%global appLoc;
%let compiled_apploc=/Public/app/dcplaceholder;
%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_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_getpathuri(filepath
)/*/STORE SOURCE*/;
%mf_abort(
iftrue=(&syscc ne 0),
msg=Cannot enter &sysmacroname with syscc=&syscc
)
%local fref rc path name var /* var is used to avoid delete timing issue */;
%let fref=%mf_getuniquefileref();
%let name=%scan(&filepath,-1,/);
%let path=%substr(&filepath,1,%length(&filepath)-%length(&name)-1);
%if %sysfunc(filename(fref,,filesrvc,folderPath="&path" filename="&name"))=0
%then %do;
%let var=_FILESRVC_&fref._URI;
%str(&&&var)
%let rc=%sysfunc(filename(fref));
%symdel &var;
%end;
%else %do;
%put &sysmacroname: did not find &filepath;
%let syscc=0;
%end;
%mend mfv_getpathuri;
%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 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
,outds=_null_
);
%local dbg;
%if &mdebug=1 %then %do;
%put &sysmacroname entry vars:;
%put _local_;
%end;
%else %let dbg=*;
%if %mfv_existfolder(&path)=1 %then %do;
%&dbg.put &sysmacroname: &path already exists;
data &outds;
self_uri="%mfv_getpathuri(&path)";
output;
stop;
run;
%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 base_uri; /* location of rest apis */
%let base_uri=%mf_getplatform(VIYARESTAPI);
%local href; /* resource address (none for root) */
%let href="&base_uri/folders/folders?parentFolderUri=/folders/folders/none";
%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_;
infile &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;
%if &SYS_PROCHTTP_STATUS_CODE ne 200 %then %do;
%put &=SYS_PROCHTTP_STATUS_CODE &=SYS_PROCHTTP_STATUS_PHRASE;
%end;
%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 &outds;
set &libref2..links;
if rel='createChild' then do;
call symputx('href',quote(cats("&base_uri",href)),'l');
&dbg put (_all_)(=);
end;
if method='GET' and rel='self' then do;
self_uri=uri;
output;
end;
keep self_uri ;
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);
/* fetch the members of the folder to get the uri */
%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;
/* 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;
%if &SYS_PROCHTTP_STATUS_CODE ne 200 %then %do;
%put &=sysmacroname &=SYS_PROCHTTP_STATUS_CODE &=SYS_PROCHTTP_STATUS_PHRASE;
%end;
%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 deleted;
/* clear refs */
filename &fname1 clear;
libname &libref1 clear;
filename &fname1a clear;
libname &libref1a clear;
%mend mv_deletejes;
%macro mf_getuniquename(prefix=MC);
&prefix.%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32-%length(&prefix))
%mend mf_getuniquename;
%macro mf_mimetype(
ext
)/*/STORE SOURCE*/ /minoperator mindelimiter=' ';
%let ext=%lowcase(&ext);
%if &ext in (sas txt text conf def list log)
%then %do;%str(text/plain)%end;
%else %if &ext=xlsx %then %do;
%str(application/vnd.openxmlformats-officedocument.spreadsheetml.sheet)%end;
%else %if &ext in (xls xlm xla xlc xlt xlw)
%then %do;%str(application/vnd.ms-excel)%end;
%else %if &ext=xlsm
%then %do;%str(application/vnd.ms-excel.sheet.macroenabled.12)%end;
%else %if &ext=xlsb
%then %do;%str(application/vnd.ms-excel.sheet.binary.macroenabled.12)%end;
%else %if &ext in (css csv html n3 sgml vcard)
%then %do;%str(text/&ext)%end;
%else %if &ext in (avif bmp cgm gif ief jxl ktx png sgi tiff webp)
%then %do;%str(image/&ext)%end;
%else %if &ext in (exi gxf ipfix json mbox mp21 mxf oda oxps pdf rtf sdp wasm
xml yang zip)
%then %do;%str(application/&ext)%end;
%else %if &ext in (jpeg jpg jpe) %then %do;%str(image/jpeg)%end;
%else %if &ext in (mp4 mp4v mpg4) %then %do;%str(video/mp4)%end;
%else %if &ext in (otf ttf woff woff2) %then %do;%str(font/&ext)%end;
%else %if &ext in (mpeg mpg mpe m1v m2v)
%then %do;%str(video/mpeg)%end;
%else %if &ext in (h261 h263 h264 jpm mj2 webm)
%then %do;%str(video/&ext)%end;
%else %if &ext in (f4v fli flv m4v mng smv)
%then %do;%str(video/x-&ext)%end;
%else %if &ext in (3ds cmx pcx rgb tga)
%then %do;%str(image/x-&ext)%end;
%else %if &ext in (asm nfo opml sfv)
%then %do;%str(text/x-&ext)%end;
%else %if &ext in (aac caf flac wav)
%then %do;%str(audio/x-&ext)%end;
%else %if &ext in (ts m2t m2ts mts)
%then %do;%str(video/mp2t)%end;
%else %if &ext in (pfa pfb pfm afm)
%then %do;%str(application/x-font-type1)%end;
%else %if &ext in (oga ogg spx opus)
%then %do;%str(audio/ogg)%end;
%else %if &ext in (mid midi kar rmi)
%then %do;%str(audio/midi)%end;
%else %if &ext in (onetoc onetoc2 onetmp onepkg)
%then %do;%str(application/onenote)%end;
%else %if &ext in (mxml xhvml xvml xvm)
%then %do;%str(application/xv+xml)%end;
%else %if &ext in (f for f77 f90)
%then %do;%str(text/x-fortran)%end;
%else %if &ext in (wmf wmz emf emz)
%then %do;%str(application/x-msmetafile)%end;
%else %if &ext in (exe dll com bat msi)
%then %do;%str(application/x-msdownload)%end;
%else %if &ext in (bin dms lrf mar so dist distz pkg bpk dump elc deploy)
%then %do;%str(application/octet-stream)%end;
%else %if &ext in (atom atomcat atomsvc ccxml davmount emma gml gpx inkml mads
mathml metalink mets mods omdoc pls rdf rsd rss sbml shf smil sru ssdl ssml
tei wsdl wspolicy xaml xenc xhtml xop xslt xspf yin)
%then %do;%str(application/&ext+xml)%end;
%else %if &ext in (dir dcr dxr cst cct cxt w3d fgd swa)
%then %do;%str(application/x-director)%end;
%else %if &ext in (z1 z2 z3 z4 z5 z6 z7 z8)
%then %do;%str(application/x-zmachine)%end;
%else %if &ext in (c cc cxx cpp h hh dic)
%then %do;%str(text/x-c)%end;
%else %if &ext in (mpga mp2 mp2a mp3 m2a m3a)
%then %do;%str(audio/mpeg)%end;
%else %if &ext in (t tr roff man me ms)
%then %do;%str(text/troff)%end;
%else %if &ext in (cbr cba cbt cbz cb7)
%then %do;%str(application/x-cbr)%end;
%else %if &ext in (fh fhc fh4 fh5 fh7)
%then %do;%str(image/x-freehand)%end;
%else %if &ext in (aab x32 u32 vox)
%then %do;%str(application/x-authorware-bin)%end;
%else %if &ext in (uvi uvvi uvg uvvg)
%then %do;%str(image/vnd.dece.graphic)%end;
%else %if &ext in (cdx cif cmdf cml csml xyz)
%then %do;%str(chemical/x-&ext)%end;
%else %if &ext in (aif aiff aifc) %then %do;%str(audio/x-aiff)%end;
%else %if &ext in (ma nb mb) %then %do;%str(application/mathematica)%end;
%else %if &ext in (mvb m13 m14) %then %do;%str(application/x-msmediaview)%end;
%else %if &ext in (msh mesh silo) %then %do;%str(model/mesh)%end;
%else %if &ext in (uri uris urls) %then %do;%str(text/uri-list)%end;
%else %if &ext in (mkv mk3d mks) %then %do;%str(video/x-matroska)%end;
%else %if &ext=ez %then %do;%str(application/andrew-inset)%end;
%else %if &ext=aw %then %do;%str(application/applixware)%end;
%else %if &ext=cdmia %then %do;%str(application/cdmi-capability)%end;
%else %if &ext=cdmic %then %do;%str(application/cdmi-container)%end;
%else %if &ext=cdmid %then %do;%str(application/cdmi-domain)%end;
%else %if &ext=cdmio %then %do;%str(application/cdmi-object)%end;
%else %if &ext=cdmiq %then %do;%str(application/cdmi-queue)%end;
%else %if &ext=cu %then %do;%str(application/cu-seeme)%end;
%else %if &ext=dssc %then %do;%str(application/dssc+der)%end;
%else %if &ext=xdssc %then %do;%str(application/dssc+xml)%end;
%else %if &ext=ecma %then %do;%str(application/ecmascript)%end;
%else %if &ext=epub %then %do;%str(application/epub+zip)%end;
%else %if &ext=pfr %then %do;%str(application/font-tdpfr)%end;
%else %if &ext=stk %then %do;%str(application/hyperstudio)%end;
%else %if &ext=ink %then %do;%str(application/inkml+xml)%end;
%else %if &ext=jar %then %do;%str(application/java-archive)%end;
%else %if &ext=ser %then %do;%str(application/java-serialized-object)%end;
%else %if &ext=class %then %do;%str(application/java-vm)%end;
%else %if &ext=jsonml %then %do;%str(application/jsonml+json)%end;
%else %if &ext=lostxml %then %do;%str(application/lost+xml)%end;
%else %if &ext=hqx %then %do;%str(application/mac-binhex40)%end;
%else %if &ext=cpt %then %do;%str(application/mac-compactpro)%end;
%else %if &ext=mrc %then %do;%str(application/marc)%end;
%else %if &ext=mrcx %then %do;%str(application/marcxml+xml)%end;
%else %if &ext=mscml %then %do;%str(application/mediaservercontrol+xml)%end;
%else %if &ext=meta4 %then %do;%str(application/metalink4+xml)%end;
%else %if &ext=m21 %then %do;%str(application/mp21)%end;
%else %if &ext=mp4s %then %do;%str(application/mp4)%end;
%else %if &ext=doc %then %do;%str(application/msword)%end;
%else %if &ext=dot %then %do;%str(application/msword)%end;
%else %if &ext=opf %then %do;%str(application/oebps-package+xml)%end;
%else %if &ext=ogx %then %do;%str(application/ogg)%end;
%else %if &ext=xer %then %do;%str(application/patch-ops-error+xml)%end;
%else %if &ext=pgp %then %do;%str(application/pgp-encrypted)%end;
%else %if &ext=asc %then %do;%str(application/pgp-signature)%end;
%else %if &ext=sig %then %do;%str(application/pgp-signature)%end;
%else %if &ext=prf %then %do;%str(application/pics-rules)%end;
%else %if &ext=p10 %then %do;%str(application/pkcs10)%end;
%else %if &ext=p7m %then %do;%str(application/pkcs7-mime)%end;
%else %if &ext=p7c %then %do;%str(application/pkcs7-mime)%end;
%else %if &ext=p7s %then %do;%str(application/pkcs7-signature)%end;
%else %if &ext=p8 %then %do;%str(application/pkcs8)%end;
%else %if &ext=ac %then %do;%str(application/pkix-attr-cert)%end;
%else %if &ext=cer %then %do;%str(application/pkix-cert)%end;
%else %if &ext=crl %then %do;%str(application/pkix-crl)%end;
%else %if &ext=pkipath %then %do;%str(application/pkix-pkipath)%end;
%else %if &ext=pki %then %do;%str(application/pkixcmp)%end;
%else %if &ext=cww %then %do;%str(application/prs.cww)%end;
%else %if &ext=pskcxml %then %do;%str(application/pskc+xml)%end;
%else %if &ext=rif %then %do;%str(application/reginfo+xml)%end;
%else %if &ext=rnc %then %do;%str(application/relax-ng-compact-syntax)%end;
%else %if &ext=rld %then %do;%str(application/resource-lists-diff+xml)%end;
%else %if &ext=rl %then %do;%str(application/resource-lists+xml)%end;
%else %if &ext=gbr %then %do;%str(application/rpki-ghostbusters)%end;
%else %if &ext=mft %then %do;%str(application/rpki-manifest)%end;
%else %if &ext=roa %then %do;%str(application/rpki-roa)%end;
%else %if &ext=scq %then %do;%str(application/scvp-cv-request)%end;
%else %if &ext=scs %then %do;%str(application/scvp-cv-response)%end;
%else %if &ext=spq %then %do;%str(application/scvp-vp-request)%end;
%else %if &ext=spp %then %do;%str(application/scvp-vp-response)%end;
%else %if &ext=setpay %then %do;%str(application/set-payment-initiation)%end;
%else %if &ext=setreg %then %do;%str(application/set-registration-initiation)%end;
%else %if &ext=smi %then %do;%str(application/smil+xml)%end;
%else %if &ext=rq %then %do;%str(application/sparql-query)%end;
%else %if &ext=srx %then %do;%str(application/sparql-results+xml)%end;
%else %if &ext=gram %then %do;%str(application/srgs)%end;
%else %if &ext=grxml %then %do;%str(application/srgs+xml)%end;
%else %if &ext=teicorpus %then %do;%str(application/tei+xml)%end;
%else %if &ext=tfi %then %do;%str(application/thraud+xml)%end;
%else %if &ext=tsd %then %do;%str(application/timestamped-data)%end;
%else %if &ext=vxml %then %do;%str(application/voicexml+xml)%end;
%else %if &ext=wgt %then %do;%str(application/widget)%end;
%else %if &ext=hlp %then %do;%str(application/winhlp)%end;
%else %if &ext=7z %then %do;%str(application/x-7z-compressed)%end;
%else %if &ext=abw %then %do;%str(application/x-abiword)%end;
%else %if &ext=ace %then %do;%str(application/x-ace-compressed)%end;
%else %if &ext=dmg %then %do;%str(application/x-apple-diskimage)%end;
%else %if &ext=aam %then %do;%str(application/x-authorware-map)%end;
%else %if &ext=aas %then %do;%str(application/x-authorware-seg)%end;
%else %if &ext=bcpio %then %do;%str(application/x-bcpio)%end;
%else %if &ext=torrent %then %do;%str(application/x-bittorrent)%end;
%else %if &ext=blb %then %do;%str(application/x-blorb)%end;
%else %if &ext=blorb %then %do;%str(application/x-blorb)%end;
%else %if &ext=bz %then %do;%str(application/x-bzip)%end;
%else %if &ext=bz2 %then %do;%str(application/x-bzip2)%end;
%else %if &ext=boz %then %do;%str(application/x-bzip2)%end;
%else %if &ext=vcd %then %do;%str(application/x-cdlink)%end;
%else %if &ext=cfs %then %do;%str(application/x-cfs-compressed)%end;
%else %if &ext=chat %then %do;%str(application/x-chat)%end;
%else %if &ext=pgn %then %do;%str(application/x-chess-pgn)%end;
%else %if &ext=nsc %then %do;%str(application/x-conference)%end;
%else %if &ext=cpio %then %do;%str(application/x-cpio)%end;
%else %if &ext=csh %then %do;%str(application/x-csh)%end;
%else %if &ext=deb %then %do;%str(application/x-debian-package)%end;
%else %if &ext=udeb %then %do;%str(application/x-debian-package)%end;
%else %if &ext=dgc %then %do;%str(application/x-dgc-compressed)%end;
%else %if &ext=wad %then %do;%str(application/x-doom)%end;
%else %if &ext=ncx %then %do;%str(application/x-dtbncx+xml)%end;
%else %if &ext=dtb %then %do;%str(application/x-dtbook+xml)%end;
%else %if &ext=res %then %do;%str(application/x-dtbresource+xml)%end;
%else %if &ext=dvi %then %do;%str(application/x-dvi)%end;
%else %if &ext=evy %then %do;%str(application/x-envoy)%end;
%else %if &ext=eva %then %do;%str(application/x-eva)%end;
%else %if &ext=bdf %then %do;%str(application/x-font-bdf)%end;
%else %if &ext=gsf %then %do;%str(application/x-font-ghostscript)%end;
%else %if &ext=psf %then %do;%str(application/x-font-linux-psf)%end;
%else %if &ext=pcf %then %do;%str(application/x-font-pcf)%end;
%else %if &ext=snf %then %do;%str(application/x-font-snf)%end;
%else %if &ext=arc %then %do;%str(application/x-freearc)%end;
%else %if &ext=spl %then %do;%str(application/x-futuresplash)%end;
%else %if &ext=gca %then %do;%str(application/x-gca-compressed)%end;
%else %if &ext=ulx %then %do;%str(application/x-glulx)%end;
%else %if &ext=gnumeric %then %do;%str(application/x-gnumeric)%end;
%else %if &ext=gramps %then %do;%str(application/x-gramps-xml)%end;
%else %if &ext=gtar %then %do;%str(application/x-gtar)%end;
%else %if &ext=hdf %then %do;%str(application/x-hdf)%end;
%else %if &ext=install %then %do;%str(application/x-install-instructions)%end;
%else %if &ext=iso %then %do;%str(application/x-iso9660-image)%end;
%else %if &ext=jnlp %then %do;%str(application/x-java-jnlp-file)%end;
%else %if &ext=latex %then %do;%str(application/x-latex)%end;
%else %if &ext=lzh %then %do;%str(application/x-lzh-compressed)%end;
%else %if &ext=lha %then %do;%str(application/x-lzh-compressed)%end;
%else %if &ext=mie %then %do;%str(application/x-mie)%end;
%else %if &ext=prc %then %do;%str(application/x-mobipocket-ebook)%end;
%else %if &ext=mobi %then %do;%str(application/x-mobipocket-ebook)%end;
%else %if &ext=application %then %do;%str(application/x-ms-application)%end;
%else %if &ext=lnk %then %do;%str(application/x-ms-shortcut)%end;
%else %if &ext=wmd %then %do;%str(application/x-ms-wmd)%end;
%else %if &ext=wmz %then %do;%str(application/x-ms-wmz)%end;
%else %if &ext=xbap %then %do;%str(application/x-ms-xbap)%end;
%else %if &ext=mdb %then %do;%str(application/x-msaccess)%end;
%else %if &ext=obd %then %do;%str(application/x-msbinder)%end;
%else %if &ext=crd %then %do;%str(application/x-mscardfile)%end;
%else %if &ext=clp %then %do;%str(application/x-msclip)%end;
%else %if &ext=mny %then %do;%str(application/x-msmoney)%end;
%else %if &ext=pub %then %do;%str(application/x-mspublisher)%end;
%else %if &ext=scd %then %do;%str(application/x-msschedule)%end;
%else %if &ext=trm %then %do;%str(application/x-msterminal)%end;
%else %if &ext=wri %then %do;%str(application/x-mswrite)%end;
%else %if &ext=nc %then %do;%str(application/x-netcdf)%end;
%else %if &ext=cdf %then %do;%str(application/x-netcdf)%end;
%else %if &ext=nzb %then %do;%str(application/x-nzb)%end;
%else %if &ext=p12 %then %do;%str(application/x-pkcs12)%end;
%else %if &ext=pfx %then %do;%str(application/x-pkcs12)%end;
%else %if &ext=p7b %then %do;%str(application/x-pkcs7-certificates)%end;
%else %if &ext=spc %then %do;%str(application/x-pkcs7-certificates)%end;
%else %if &ext=p7r %then %do;%str(application/x-pkcs7-certreqresp)%end;
%else %if &ext=rar %then %do;%str(application/x-rar-compressed)%end;
%else %if &ext=ris %then %do;%str(application/x-research-info-systems)%end;
%else %if &ext=sh %then %do;%str(application/x-sh)%end;
%else %if &ext=shar %then %do;%str(application/x-shar)%end;
%else %if &ext=swf %then %do;%str(application/x-shockwave-flash)%end;
%else %if &ext=xap %then %do;%str(application/x-silverlight-app)%end;
%else %if &ext=sql %then %do;%str(application/x-sql)%end;
%else %if &ext=sit %then %do;%str(application/x-stuffit)%end;
%else %if &ext=sitx %then %do;%str(application/x-stuffitx)%end;
%else %if &ext=srt %then %do;%str(application/x-subrip)%end;
%else %if &ext=sv4cpio %then %do;%str(application/x-sv4cpio)%end;
%else %if &ext=sv4crc %then %do;%str(application/x-sv4crc)%end;
%else %if &ext=t3 %then %do;%str(application/x-t3vm-image)%end;
%else %if &ext=gam %then %do;%str(application/x-tads)%end;
%else %if &ext=tar %then %do;%str(application/x-tar)%end;
%else %if &ext=tcl %then %do;%str(application/x-tcl)%end;
%else %if &ext=tex %then %do;%str(application/x-tex)%end;
%else %if &ext=tfm %then %do;%str(application/x-tex-tfm)%end;
%else %if &ext=texinfo %then %do;%str(application/x-texinfo)%end;
%else %if &ext=texi %then %do;%str(application/x-texinfo)%end;
%else %if &ext=obj %then %do;%str(application/x-tgif)%end;
%else %if &ext=ustar %then %do;%str(application/x-ustar)%end;
%else %if &ext=src %then %do;%str(application/x-wais-source)%end;
%else %if &ext=der %then %do;%str(application/x-x509-ca-cert)%end;
%else %if &ext=crt %then %do;%str(application/x-x509-ca-cert)%end;
%else %if &ext=fig %then %do;%str(application/x-xfig)%end;
%else %if &ext=xlf %then %do;%str(application/x-xliff+xml)%end;
%else %if &ext=xpi %then %do;%str(application/x-xpinstall)%end;
%else %if &ext=xz %then %do;%str(application/x-xz)%end;
%else %if &ext=xdf %then %do;%str(application/xcap-diff+xml)%end;
%else %if &ext=xht %then %do;%str(application/xhtml+xml)%end;
%else %if &ext=xsl %then %do;%str(application/xml)%end;
%else %if &ext=dtd %then %do;%str(application/xml-dtd)%end;
%else %if &ext=xpl %then %do;%str(application/xproc+xml)%end;
%else %if &ext=adp %then %do;%str(audio/adpcm)%end;
%else %if &ext=au %then %do;%str(audio/basic)%end;
%else %if &ext=snd %then %do;%str(audio/basic)%end;
%else %if &ext=m4a %then %do;%str(audio/mp4)%end;
%else %if &ext=mp4a %then %do;%str(audio/mp4)%end;
%else %if &ext=s3m %then %do;%str(audio/s3m)%end;
%else %if &ext=sil %then %do;%str(audio/silk)%end;
%else %if &ext=uva %then %do;%str(audio/vnd.dece.audio)%end;
%else %if &ext=uvva %then %do;%str(audio/vnd.dece.audio)%end;
%else %if &ext=eol %then %do;%str(audio/vnd.digital-winds)%end;
%else %if &ext=dra %then %do;%str(audio/vnd.dra)%end;
%else %if &ext=dts %then %do;%str(audio/vnd.dts)%end;
%else %if &ext=dtshd %then %do;%str(audio/vnd.dts.hd)%end;
%else %if &ext=lvp %then %do;%str(audio/vnd.lucent.voice)%end;
%else %if &ext=pya %then %do;%str(audio/vnd.ms-playready.media.pya)%end;
%else %if &ext=ecelp4800 %then %do;%str(audio/vnd.nuera.ecelp4800)%end;
%else %if &ext=ecelp7470 %then %do;%str(audio/vnd.nuera.ecelp7470)%end;
%else %if &ext=ecelp9600 %then %do;%str(audio/vnd.nuera.ecelp9600)%end;
%else %if &ext=rip %then %do;%str(audio/vnd.rip)%end;
%else %if &ext=weba %then %do;%str(audio/webm)%end;
%else %if &ext=mka %then %do;%str(audio/x-matroska)%end;
%else %if &ext=m3u %then %do;%str(audio/x-mpegurl)%end;
%else %if &ext=wax %then %do;%str(audio/x-ms-wax)%end;
%else %if &ext=wma %then %do;%str(audio/x-ms-wma)%end;
%else %if &ext=ra %then %do;%str(audio/x-pn-realaudio)%end;
%else %if &ext=ram %then %do;%str(audio/x-pn-realaudio)%end;
%else %if &ext=rmp %then %do;%str(audio/x-pn-realaudio-plugin)%end;
%else %if &ext=xm %then %do;%str(audio/xm)%end;
%else %if &ext=ttc %then %do;%str(font/collection)%end;
%else %if &ext=g3 %then %do;%str(image/g3fax)%end;
%else %if &ext=btif %then %do;%str(image/prs.btif)%end;
%else %if &ext=svg %then %do;%str(image/svg+xml)%end;
%else %if &ext=svgz %then %do;%str(image/svg+xml)%end;
%else %if &ext=tif %then %do;%str(image/tiff)%end;
%else %if &ext=psd %then %do;%str(image/vnd.adobe.photoshop)%end;
%else %if &ext=djv %then %do;%str(image/vnd.djvu)%end;
%else %if &ext=djvu %then %do;%str(image/vnd.djvu)%end;
%else %if &ext=sub %then %do;%str(image/vnd.dvb.subtitle)%end;
%else %if &ext=dwg %then %do;%str(image/vnd.dwg)%end;
%else %if &ext=dxf %then %do;%str(image/vnd.dxf)%end;
%else %if &ext=fbs %then %do;%str(image/vnd.fastbidsheet)%end;
%else %if &ext=fpx %then %do;%str(image/vnd.fpx)%end;
%else %if &ext=fst %then %do;%str(image/vnd.fst)%end;
%else %if &ext=mmr %then %do;%str(image/vnd.fujixerox.edmics-mmr)%end;
%else %if &ext=rlc %then %do;%str(image/vnd.fujixerox.edmics-rlc)%end;
%else %if &ext=mdi %then %do;%str(image/vnd.ms-modi)%end;
%else %if &ext=wdp %then %do;%str(image/vnd.ms-photo)%end;
%else %if &ext=npx %then %do;%str(image/vnd.net-fpx)%end;
%else %if &ext=wbmp %then %do;%str(image/vnd.wap.wbmp)%end;
%else %if &ext=xif %then %do;%str(image/vnd.xiff)%end;
%else %if &ext=ras %then %do;%str(image/x-cmu-raster)%end;
%else %if &ext=ico %then %do;%str(image/x-icon)%end;
%else %if &ext=sid %then %do;%str(image/x-mrsid-image)%end;
%else %if &ext=pct %then %do;%str(image/x-pict)%end;
%else %if &ext=pic %then %do;%str(image/x-pict)%end;
%else %if &ext=pnm %then %do;%str(image/x-portable-anymap)%end;
%else %if &ext=pbm %then %do;%str(image/x-portable-bitmap)%end;
%else %if &ext=pgm %then %do;%str(image/x-portable-graymap)%end;
%else %if &ext=ppm %then %do;%str(image/x-portable-pixmap)%end;
%else %if &ext=xbm %then %do;%str(image/x-xbitmap)%end;
%else %if &ext=xpm %then %do;%str(image/x-xpixmap)%end;
%else %if &ext=xwd %then %do;%str(image/x-xwindowdump)%end;
%else %if &ext=eml %then %do;%str(message/rfc822)%end;
%else %if &ext=mime %then %do;%str(message/rfc822)%end;
%else %if &ext=iges %then %do;%str(model/iges)%end;
%else %if &ext=igs %then %do;%str(model/iges)%end;
%else %if &ext=dae %then %do;%str(model/vnd.collada+xml)%end;
%else %if &ext=dwf %then %do;%str(model/vnd.dwf)%end;
%else %if &ext=gdl %then %do;%str(model/vnd.gdl)%end;
%else %if &ext=gtw %then %do;%str(model/vnd.gtw)%end;
%else %if &ext=vtu %then %do;%str(model/vnd.vtu)%end;
%else %if &ext=vrml %then %do;%str(model/vrml)%end;
%else %if &ext=wrl %then %do;%str(model/vrml)%end;
%else %if &ext=x3db %then %do;%str(model/x3d+binary)%end;
%else %if &ext=x3dbz %then %do;%str(model/x3d+binary)%end;
%else %if &ext=x3dv %then %do;%str(model/x3d+vrml)%end;
%else %if &ext=x3dvz %then %do;%str(model/x3d+vrml)%end;
%else %if &ext=x3d %then %do;%str(model/x3d+xml)%end;
%else %if &ext=x3dz %then %do;%str(model/x3d+xml)%end;
%else %if &ext=appcache %then %do;%str(text/cache-manifest)%end;
%else %if &ext=ics %then %do;%str(text/calendar)%end;
%else %if &ext=ifb %then %do;%str(text/calendar)%end;
%else %if &ext=htm %then %do;%str(text/html)%end;
%else %if &ext=js %then %do;%str(text/javascript)%end;
%else %if &ext=mjs %then %do;%str(text/javascript)%end;
%else %if &ext=dsc %then %do;%str(text/prs.lines.tag)%end;
%else %if &ext=rtx %then %do;%str(text/richtext)%end;
%else %if &ext=sgm %then %do;%str(text/sgml)%end;
%else %if &ext=tsv %then %do;%str(text/tab-separated-values)%end;
%else %if &ext=ttl %then %do;%str(text/turtle)%end;
%else %if &ext=curl %then %do;%str(text/vnd.curl)%end;
%else %if &ext=dcurl %then %do;%str(text/vnd.curl.dcurl)%end;
%else %if &ext=mcurl %then %do;%str(text/vnd.curl.mcurl)%end;
%else %if &ext=scurl %then %do;%str(text/vnd.curl.scurl)%end;
%else %if &ext=sub %then %do;%str(text/vnd.dvb.subtitle)%end;
%else %if &ext=fly %then %do;%str(text/vnd.fly)%end;
%else %if &ext=flx %then %do;%str(text/vnd.fmi.flexstor)%end;
%else %if &ext=gv %then %do;%str(text/vnd.graphviz)%end;
%else %if &ext=3dml %then %do;%str(text/vnd.in3d.3dml)%end;
%else %if &ext=spot %then %do;%str(text/vnd.in3d.spot)%end;
%else %if &ext=jad %then %do;%str(text/vnd.sun.j2me.app-descriptor)%end;
%else %if &ext=wml %then %do;%str(text/vnd.wap.wml)%end;
%else %if &ext=wmls %then %do;%str(text/vnd.wap.wmlscript)%end;
%else %if &ext=s %then %do;%str(text/x-asm)%end;
%else %if &ext=java %then %do;%str(text/x-java-source)%end;
%else %if &ext=p %then %do;%str(text/x-pascal)%end;
%else %if &ext=pas %then %do;%str(text/x-pascal)%end;
%else %if &ext=etx %then %do;%str(text/x-setext)%end;
%else %if &ext=uu %then %do;%str(text/x-uuencode)%end;
%else %if &ext=vcs %then %do;%str(text/x-vcalendar)%end;
%else %if &ext=vcf %then %do;%str(text/x-vcard)%end;
%else %if &ext=3gp %then %do;%str(video/3gpp)%end;
%else %if &ext=3g2 %then %do;%str(video/3gpp2)%end;
%else %if &ext=jpgv %then %do;%str(video/jpeg)%end;
%else %if &ext=jpgm %then %do;%str(video/jpm)%end;
%else %if &ext=mjp2 %then %do;%str(video/mj2)%end;
%else %if &ext=ogv %then %do;%str(video/ogg)%end;
%else %if &ext=mov %then %do;%str(video/quicktime)%end;
%else %if &ext=qt %then %do;%str(video/quicktime)%end;
%else %if &ext=uvh %then %do;%str(video/vnd.dece.hd)%end;
%else %if &ext=uvvh %then %do;%str(video/vnd.dece.hd)%end;
%else %if &ext=uvm %then %do;%str(video/vnd.dece.mobile)%end;
%else %if &ext=uvvm %then %do;%str(video/vnd.dece.mobile)%end;
%else %if &ext=uvp %then %do;%str(video/vnd.dece.pd)%end;
%else %if &ext=uvvp %then %do;%str(video/vnd.dece.pd)%end;
%else %if &ext=uvs %then %do;%str(video/vnd.dece.sd)%end;
%else %if &ext=uvvs %then %do;%str(video/vnd.dece.sd)%end;
%else %if &ext=uvv %then %do;%str(video/vnd.dece.video)%end;
%else %if &ext=uvvv %then %do;%str(video/vnd.dece.video)%end;
%else %if &ext=dvb %then %do;%str(video/vnd.dvb.file)%end;
%else %if &ext=fvt %then %do;%str(video/vnd.fvt)%end;
%else %if &ext=m4u %then %do;%str(video/vnd.mpegurl)%end;
%else %if &ext=mxu %then %do;%str(video/vnd.mpegurl)%end;
%else %if &ext=pyv %then %do;%str(video/vnd.ms-playready.media.pyv)%end;
%else %if &ext=uvu %then %do;%str(video/vnd.uvvu.mp4)%end;
%else %if &ext=uvvu %then %do;%str(video/vnd.uvvu.mp4)%end;
%else %if &ext=viv %then %do;%str(video/vnd.vivo)%end;
%else %if &ext=asf %then %do;%str(video/x-ms-asf)%end;
%else %if &ext=asx %then %do;%str(video/x-ms-asf)%end;
%else %if &ext=vob %then %do;%str(video/x-ms-vob)%end;
%else %if &ext=wm %then %do;%str(video/x-ms-wm)%end;
%else %if &ext=wmv %then %do;%str(video/x-ms-wmv)%end;
%else %if &ext=wmx %then %do;%str(video/x-ms-wmx)%end;
%else %if &ext=wvx %then %do;%str(video/x-ms-wvx)%end;
%else %if &ext=avi %then %do;%str(video/x-msvideo)%end;
%else %if &ext=movie %then %do;%str(video/x-sgi-movie)%end;
%else %if &ext=ice %then %do;%str(x-conference/x-cooltalk)%end;
%else %if "&ext"="in" %then %do;%str(text/plain)%end;
%else %do;%str(application/octet-stream)%end;
%mend mf_mimetype;
%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_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 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 */
%&dbg.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 created! Check it out:;
%put &url/SASJobExecution?_PROGRAM=&path/&name;
%mend mv_createwebservice;
/**
@file
@brief Creates a file in SAS Drive using the API method
@details Creates a file in SAS Drive using the API interface.
If the parent folder does not exist, it is created.
The API approach is more flexible than using the filesrvc engine of the
filename statement, as it provides more options.
SAS docs: https://developer.sas.com/rest-apis/files/createNewFile
Usage:
filename myfile temp;
data _null_;
file myfile;
put 'something';
run;
%mv_createfile(path=/Public/temp,name=newfile.txt,inref=myfile)
The macro also supports find & replace (used by the SASjs Streaming App
build program). This allows one string to be replaced by another at the
point at which the file is created. This is done by passing in the NAMES of
the macro variables containing the values to be swapped, eg:
filename fref temp;
data _null_;
file fref;
put 'whenever life gets you down, Mrs Brown..';
run;
%let f=Mrs Brown;
%let r=just remember that you're standing on a planet that's evolving;
%mv_createfile(path=/Public,name=life.md,inref=fref,fin,swap=f r)
@param [in] path= The parent (SAS Drive) 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= (attchment) Content Disposition. Example values:
@li inline
@li attachment
@param [in] ctype= (0) The actual MIME type of the file (if blank will be
determined based on file extension))
@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] force= (YES) Will overwrite (delete / recreate) files by default.
Set to NO to abort if a file already exists in that location.
@param pin] swap= (0) Provide two macro variable NAMES that contain the values
to be swapped, eg swap=find replace (see also the example above)
@param [out] outds= (_null_) Output dataset with the uri of the new file
@param [in] mdebug= (0) Set to 1 to enable DEBUG messages
SAS Macros
@li mf_getplatform.sas
@li mf_getuniquefileref.sas
@li mf_getuniquename.sas
@li mf_isblank.sas
@li mf_mimetype.sas
@li mfv_getpathuri.sas
@li mp_abort.sas
@li mp_base64copy.sas
@li mp_replace.sas
@li mv_createfolder.sas
Related Macros
@li mv_createfile.sas
**/
%macro mv_createfile(path=
,name=
,inref=
,intype=BINARY
,contentdisp=attachment
,ctype=0
,access_token_var=ACCESS_TOKEN
,grant_type=sas_services
,mdebug=0
,outds=_null_
,force=YES
,swap=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=MV_CREATEFILE
,msg=%str(Invalid value for grant_type: &grant_type)
)
%mp_abort(iftrue=(%mf_isblank(&path)=1 or %length(&path)=1)
,mac=MV_CREATEFILE
,msg=%str(path value must be provided)
)
%mp_abort(iftrue=(%mf_isblank(&name)=1 or %length(&name)=1)
,mac=MV_CREATEFILE
,msg=%str(name value with length >1 must be provided)
)
/* prep the source file */
%local fref;
%let fref=%mf_getuniquefileref();
%if %upcase(&intype)=BINARY %then %let fref=&inref;
%else %if %upcase(&intype)=BASE64 %then %do;
%mp_base64copy(inref=&inref, outref=&fref, action=DECODE)
%end;
%else %put %str(ERR)OR: invalid value for intype: &intype;
%if "&swap" ne "0" %then %do;
%mp_replace("%sysfunc(pathname(&fref))"
,findvar=%scan(&swap,1,%str( ))
,replacevar=%scan(&swap,2,%str( ))
)
%end;
%if &mdebug=1 %then %do;
data _null_;
infile &fref lrecl=32767;
input;
put _infile_;
run;
%end;
options noquotelenmax;
%local base_uri; /* location of rest apis */
%let base_uri=%mf_getplatform(VIYARESTAPI);
/* create folder if it does not already exist */
%local folderds self_uri;
%let folderds=%mf_getuniquename(prefix=folderds);
%mv_createfolder(path=&path
,access_token_var=&access_token_var
,grant_type=&grant_type
,mdebug=&mdebug
,outds=&folderds
)
data _null_;
set &folderds;
call symputx('self_uri',self_uri,'l');
run;
/* abort or delete if file already exists */
%let force=%upcase(&force);
%local fileuri ;
%let fileuri=%mfv_getpathuri(&path/&name);
%mp_abort(iftrue=(%mf_isblank(&fileuri)=0 and &force ne YES)
,mac=MV_CREATEFILE
,msg=%str(File &path/&name already exists and force=&force)
)
%if %mf_isblank(&fileuri)=0 and &force=YES %then %do;
proc http method="DELETE" url="&base_uri&fileuri" &oauth_bearer;
headers
%if &grant_type=authorization_code %then %do;
"Authorization"="Bearer &&&access_token_var"
%end;
"Accept"="*/*";
run;
%put &sysmacroname DELETE &base_uri&fileuri;
%if &SYS_PROCHTTP_STATUS_CODE ne 204 %then %do;
%put &=SYS_PROCHTTP_STATUS_CODE &=SYS_PROCHTTP_STATUS_PHRASE;
%end;
%end;
%local url mimetype ext;
%let url=&base_uri/files/files?parentFolderUri=&self_uri;
%let ext=%upcase(%scan(&name,-1,.));
/* fetch job info */
%local fname1;
%let fname1=%mf_getuniquefileref();
proc http method='POST' out=&fname1 &oauth_bearer in=&fref
%if "&ctype" = "0" %then %do;
%let mimetype=%mf_mimetype(&ext);
ct="&mimetype"
%end;
%else %do;
ct="&ctype"
%end;
%if "&ext"="HTML" or "&ext"="CSS" or "&ext"="JS" or "&ext"="PNG"
or "&ext"="SVG" %then %do;
url="&url%str(&)typeDefName=file";
%end;
%else %do;
url="&url";
%end;
headers "Accept"="application/json"
%if &grant_type=authorization_code %then %do;
"Authorization"="Bearer &&&access_token_var"
%end;
"Content-Disposition"=
%if "&ext"="SVG" or "&ext"="HTML" %then %do;
"filename=""&name"";"
%end;
%else %do;
"&contentdisp filename=""&name""; name=""&name"";"
%end;
;
run;
%if &mdebug=1 %then %put &sysmacroname POST &=url
&=SYS_PROCHTTP_STATUS_CODE &=SYS_PROCHTTP_STATUS_PHRASE;
%mp_abort(iftrue=(&SYS_PROCHTTP_STATUS_CODE ne 201)
,mac=MV_CREATEFILE
,msg=%str(&SYS_PROCHTTP_STATUS_CODE &SYS_PROCHTTP_STATUS_PHRASE)
)
%local libref2;
%let libref2=%mf_getuniquelibref();
libname &libref2 JSON fileref=&fname1;
/* Grab the follow on link */
data &outds;
set &libref2..links end=last;
if rel='createChild' then do;
call symputx('href',quote(cats("&base_uri",href)),'l');
&dbg put (_all_)(=);
end;
run;
%put &sysmacroname: &name created at %mfv_getpathuri(&path/&name);%put;
%put &base_uri/SASJobExecution?_file=&path/&name;%put;
%mend mv_createfile;
/* system macros for build process end */
%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 mfv_getfolderpath(uri
)/*/STORE SOURCE*/;
%local fref rc path msg var /* var used to avoid delete timing issue */;
%let fref=%mf_getuniquefileref();
%if %quote(%substr(%str(&uri),1,17)) ne %quote(/folders/folders/)
%then %do;
%put &sysmacroname: Invalid URI: &uri;
%end;
%else %if %sysfunc(filename(fref,,filesrvc,folderuri="&uri" ))=0
%then %do;
%let var=_FILESRVC_&fref._URI;
%local fid ;
%let fid= %sysfunc(fopen(&fref,I));
%let msg=%quote(%sysfunc(sysmsg()));
%unquote(%scan(&msg,2,%str(,.)))
%let rc=%sysfunc(fclose(&fid));
%let rc=%sysfunc(filename(fref));
%symdel &var;
%end;
%else %do;
%put &sysmacroname: Not Found: &uri;
%let syscc=0;
%end;
%mend mfv_getfolderpath ;
%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_getpathuri(filepath
)/*/STORE SOURCE*/;
%mf_abort(
iftrue=(&syscc ne 0),
msg=Cannot enter &sysmacroname with syscc=&syscc
)
%local fref rc path name var /* var is used to avoid delete timing issue */;
%let fref=%mf_getuniquefileref();
%let name=%scan(&filepath,-1,/);
%let path=%substr(&filepath,1,%length(&filepath)-%length(&name)-1);
%if %sysfunc(filename(fref,,filesrvc,folderPath="&path" filename="&name"))=0
%then %do;
%let var=_FILESRVC_&fref._URI;
%str(&&&var)
%let rc=%sysfunc(filename(fref));
%symdel &var;
%end;
%else %do;
%put &sysmacroname: did not find &filepath;
%let syscc=0;
%end;
%mend mfv_getpathuri;
%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_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 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
,outds=_null_
);
%local dbg;
%if &mdebug=1 %then %do;
%put &sysmacroname entry vars:;
%put _local_;
%end;
%else %let dbg=*;
%if %mfv_existfolder(&path)=1 %then %do;
%&dbg.put &sysmacroname: &path already exists;
data &outds;
self_uri="%mfv_getpathuri(&path)";
output;
stop;
run;
%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 base_uri; /* location of rest apis */
%let base_uri=%mf_getplatform(VIYARESTAPI);
%local href; /* resource address (none for root) */
%let href="&base_uri/folders/folders?parentFolderUri=/folders/folders/none";
%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_;
infile &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;
%if &SYS_PROCHTTP_STATUS_CODE ne 200 %then %do;
%put &=SYS_PROCHTTP_STATUS_CODE &=SYS_PROCHTTP_STATUS_PHRASE;
%end;
%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 &outds;
set &libref2..links;
if rel='createChild' then do;
call symputx('href',quote(cats("&base_uri",href)),'l');
&dbg put (_all_)(=);
end;
if method='GET' and rel='self' then do;
self_uri=uri;
output;
end;
keep self_uri ;
run;
libname &libref2 clear;
filename &fname2 clear;
%end;
filename &fname1 clear;
libname &libref1 clear;
%end;
%mend mv_createfolder;
* BuildInit start;
/**
@file buildinitviya.sas
@brief initialisation for viya build program
SAS Macros
@li mfv_getfolderpath.sas
@li mfv_getpathuri.sas
@li mv_createfolder.sas
**/
options nonotes nomprint;
/* update apploc to default to user home area if not set */
%let apploc=%sysfunc(ifc("&apploc"="/Public/app/dcplaceholder"
,/Users/&sysuserid/My Folder/Data Controller
,&apploc));
/* ensure the correct casing of appLoc */
%mv_createfolder(path=&apploc)
%let apploc=%mfv_getfolderpath(%mfv_getpathuri(&apploc));
* BuildInit end;
%let path=services;
%let filename=DC.html;
filename filecode temp lrecl=32767;
data _null_;
file filecode;
put 'PCFET0NUWVBFIGh0bWw+PGh0bWwgbGFuZz0iZW4iPjxoZWFkPgogICAgPG1ldGEgY2hhcnNldD0idXRmLTgiPgogICAgPHRpdGxlPkRhdGEgQ29udHJvbGxlcjwvdGl0bGU+CiAgICA8IS0tIDxiYXNlIGhyZWY9Ii8iPiAtLT4KCiAgICA8IS0tIG1ldGEgdGFncyAtLT4KICAgIDxtZXRhIG5h'@;
put 'bWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJDYXB0dXJlLCBSZXZpZXcsIGFuZCBBcHByb3ZlIj4KICAgIDxtZXRhIGl0ZW1wcm9wPSJuYW1lIiBjb250ZW50PSJEYXRhIENvbnRyb2xsZXIgZm9yIFNBU8KuIj4KICAgIDxtZXRhIGl0ZW1wcm9wPSJkZXNjcmlwdGlvbiIgY29udGVudD0iQ2Fw'@;
put 'dHVyZSwgUmV2aWV3LCBhbmQgQXBwcm92ZSI+CiAgICA8bWV0YSBpdGVtcHJvcD0iaW1hZ2UiIGNvbnRlbnQ9Imh0dHBzOi8vZG9jcy5kYXRhY29udHJvbGxlci5pby9pbWcvZGNfYmdfQXNzZXQtNUAyeC5wbmciPgogICAgPG1ldGEgcHJvcGVydHk9Im9nOnVybCIgY29udGVudD0iaHR0cDov'@;
put 'L2RlbW8uZGF0YWNvbnRyb2xsZXIuaW8iPgogICAgPG1ldGEgcHJvcGVydHk9Im9nOnR5cGUiIGNvbnRlbnQ9IndlYnNpdGUiPgogICAgPG1ldGEgcHJvcGVydHk9Im9nOnRpdGxlIiBjb250ZW50PSJEYXRhIENvbnRyb2xsZXIgZm9yIFNBU8KuIj4KICAgIDxtZXRhIHByb3BlcnR5PSJvZzpk'@;
put 'ZXNjcmlwdGlvbiIgY29udGVudD0iQ2FwdHVyZSwgUmV2aWV3LCBhbmQgQXBwcm92ZSI+CiAgICA8bWV0YSBwcm9wZXJ0eT0ib2c6aW1hZ2UiIGNvbnRlbnQ9Imh0dHBzOi8vZG9jcy5kYXRhY29udHJvbGxlci5pby9pbWcvZGNfYmdfQXNzZXQtNUAyeC5wbmciPgoKICAgIDxtZXRhIG5hbWU9'@;
put 'InZpZXdwb3J0IiBjb250ZW50PSJ3aWR0aD1kZXZpY2Utd2lkdGgsIGluaXRpYWwtc2NhbGU9MSI+CiAgICA8bWV0YSBodHRwLWVxdWl2PSJYLVVBLUNvbXBhdGlibGUiIGNvbnRlbnQ9IklFPWVkZ2UiPgogICAgPGxpbmsgcmVsPSJpY29uIiB0eXBlPSJpbWFnZS94LWljb24iIGhyZWY9Ii9T'@;
put 'QVNKb2JFeGVjdXRpb24/X0ZJTEU9L1B1YmxpYy9hcHAvZGNwbGFjZWhvbGRlci9zZXJ2aWNlcy93ZWIvaW1hZ2VzL2Zhdmljb24uaWNvIj4KICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii9TQVNKb2JFeGVjdXRpb24/X0ZJTEU9L1B1YmxpYy9hcHAvZGNwbGFjZWhvbGRlci9zZXJ2'@;
put 'aWNlcy93ZWIvc3R5bGVzLmU0NTg1NDY4MTkzNGU5ODYuY3NzIj48L2hlYWQ+CgogIDwhLS0KICAgICMjIFNBU0pTIEFkYXB0ZXIgY29uZmlnIGRldGFpbHMgIyMKCiAgICAqIGFwcExvYzogVGhlIGxvY2F0aW9uIGluIG1ldGFkYXRhIG9yIFNBUyBkcml2ZSB3aGVyZSBEQyB3aWxsIGJlIGRl'@;
put 'cGxveWVkCiAgICAqIHNlcnZlclR5cGU6IGVpdGhlciBTQVM5LCBTQVNWSVlBIG9yIFNBU0pTCiAgICAqIGxvZ2luTWVjaGFuaXNtOiBVc2UgJ0RlZmF1bHQnIGZvciByZWd1bGFyICh1c2VyL3Bhc3MpIGxvZ2lucywgb3IgJ1JlZGlyZWN0ZWQnIGZvciAyRkEvU1NPCiAgICAqIGRlYnVnOiBX'@;
put 'aGV0aGVyIHRvIGVuYWJsZSBkZWJ1ZyBvbiBzdGFydHVwCgogICAgIyMgVml5YSBvbmx5IHNldHRpbmdzICMjCiAgICAqIGFkbWluR3JvdXA6IFRoaXMgZ3JvdXAgd2lsbCBoYXZlIHVucmVzdHJpY3RlZCBhY2Nlc3MgKFZpeWEgT25seSkKICAgICogZGNQYXRoOiBUaGUgcGh5c2ljYWwgbG9j'@;
put 'YXRpb24gaW4gd2hpY2ggdG8gZGVwbG95IHRoZSBzdGFnaW5nIGFyZWEgKFZpeWEgb25seSkKICAgICogdXNlQ29tcHV0ZUFwaTogQ29ubmVjdGlvbiBtZXRob2QgKFZpeWEgb25seSkKICAgICogY29udGV4dE5hbWU6IENvbXB1dGUgQ29udGV4dCAoVml5YSBvbmx5KQoKICAtLT4KCiAgPGJv'@;
put 'ZHkgY2RzLXRoZW1lPSJsaWdodCIgY2xhc3M9Im0tMCI+PHNhc2pzIHNlcnZlcnVybD0iIiBhcHBsb2M9Ii9QdWJsaWMvYXBwL2RjcGxhY2Vob2xkZXIiIHNlcnZlcnR5cGU9IlNBU1ZJWUEiIGxvZ2lubWVjaGFuaXNtPSJSZWRpcmVjdGVkIiBkZWJ1Zz0iZmFsc2UiIHVzZWNvbXB1dGVhcGk9'@;
put 'InRydWUiIGNvbnRleHRuYW1lPSJTQVMgSm9iIEV4ZWN1dGlvbiBjb21wdXRlIGNvbnRleHQiIGFkbWluZ3JvdXA9IlNBU0FkbWluaXN0cmF0b3JzIiBkY3BhdGg9Ii90bXAvZGMiIGhvdGxpY2VuY2VrZXk9Im5vbi1jb21tZXJjaWFsLWFuZC1ldmFsdWF0aW9uIj4KICA8L3Nhc2pzPgoKICAK'@;
put 'ICAgIDxteS1hcHA+PC9teS1hcHA+CiAgPHNjcmlwdCBzcmM9Ii9TQVNKb2JFeGVjdXRpb24/X0ZJTEU9L1B1YmxpYy9hcHAvZGNwbGFjZWhvbGRlci9zZXJ2aWNlcy93ZWIvcnVudGltZS40MDJmYzNjZmJjN2UxYmQ0LmpzIiB0eXBlPSJtb2R1bGUiPjwvc2NyaXB0PjxzY3JpcHQgc3JjPSIv'@;
put 'U0FTSm9iRXhlY3V0aW9uP19GSUxFPS9QdWJsaWMvYXBwL2RjcGxhY2Vob2xkZXIvc2VydmljZXMvd2ViL3BvbHlmaWxscy5kZjI3YTI0NjU0MGVhNWVlLmpzIiB0eXBlPSJtb2R1bGUiPjwvc2NyaXB0PjxzY3JpcHQgc3JjPSIvU0FTSm9iRXhlY3V0aW9uP19GSUxFPS9QdWJsaWMvYXBwL2Rj'@;
put 'cGxhY2Vob2xkZXIvc2VydmljZXMvd2ViL3NjcmlwdHMuZjQxOGQ3ZTcxZGJmZDMwOS5qcyIgZGVmZXI9IiI+PC9zY3JpcHQ+PHNjcmlwdCBzcmM9Ii9TQVNKb2JFeGVjdXRpb24/X0ZJTEU9L1B1YmxpYy9hcHAvZGNwbGFjZWhvbGRlci9zZXJ2aWNlcy93ZWIvbWFpbi5iYzk3N2YyNzliOTg5'@;
put 'YjgwLmpzIiB0eXBlPSJtb2R1bGUiPjwvc2NyaXB0PgoKPC9ib2R5PjwvaHRtbD4=';
run;
%mv_createfile(path=&appLoc/&path, name=&filename, inref=filecode, intype=BASE64,swap=compiled_apploc apploc)
filename filecode clear;
%let path=services/admin;
%let service=dirlist;
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 '/* turn off with dsoptions=nonote2err */';
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 '/* extracted in dc_getsettings */';
put 'dc_activation_key';
put 'dc_licence_key';
put 'dc_locale';
put 'dc_request_logs';
put 'dc_restrict_viewer';
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 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */';
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 'and &DC_REQUEST_LOGS ne NO';
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 '/* sleep random amount to avoid parallel update attempts */';
put 'call sleep(ranuni(0)*0.1,1);';
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_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 $2000 fref fref2 $8 file_or_folder $6 filename $255';
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 '* 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 Fetches directories to facilitate configuration';
put '@details The service can also be invoked using the following URL param:';
put '@li &parent= (parent path)';
put ' SAS Macros
';
put '@li mp_dirlist.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 parent;';
put '/* if no flavour is specified, default to root */';
put '%let parent=%sysfunc(coalescec(&parent,/));';
put '%mp_dirlist(path=&parent,outds=dirlist, maxdepth=2)';
put '%webout(OPEN)';
put '%webout(OBJ,dirlist)';
put '%webout(CLOSE)';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%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 '/* turn off with dsoptions=nonote2err */';
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 '/* extracted in dc_getsettings */';
put 'dc_activation_key';
put 'dc_licence_key';
put 'dc_locale';
put 'dc_request_logs';
put 'dc_restrict_viewer';
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 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */';
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 'and &DC_REQUEST_LOGS ne NO';
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 '/* sleep random amount to avoid parallel update attempts */';
put 'call sleep(ranuni(0)*0.1,1);';
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 '/* turn off with dsoptions=nonote2err */';
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 '/* extracted in dc_getsettings */';
put 'dc_activation_key';
put 'dc_licence_key';
put 'dc_locale';
put 'dc_request_logs';
put 'dc_restrict_viewer';
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 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */';
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 'and &DC_REQUEST_LOGS ne NO';
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 '/* sleep random amount to avoid parallel update attempts */';
put 'call sleep(ranuni(0)*0.1,1);';
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 '/* turn off with dsoptions=nonote2err */';
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 '/* extracted in dc_getsettings */';
put 'dc_activation_key';
put 'dc_licence_key';
put 'dc_locale';
put 'dc_request_logs';
put 'dc_restrict_viewer';
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 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */';
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 'and &DC_REQUEST_LOGS ne NO';
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 '/* sleep random amount to avoid parallel update attempts */';
put 'call sleep(ranuni(0)*0.1,1);';
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_REQUEST_LOGS"';
put ',var_value="YES"';
put ',var_active=1';
put ',var_desc=''Setting to NO will prevent each request being logged to the''';
put '!!'' MPE_REQUESTS table Default=YES.'';';
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_CATS(';
put 'TX_FROM float ¬null format=datetime19.,';
put 'TX_TO float format=datetime19.,';
put 'libref char(8) label=''Library Name'',';
put 'memname char(64) label=''Member Name''';
put ');quit;';
put 'proc datasets lib=&lib noprint;';
put 'modify mpe_datacatalog_CATS;';
put 'index create';
put 'pk_mpe_datacatalog_CATS=(tx_to libref memname)';
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_OBJS(';
put 'TX_FROM num ¬null format=datetime19.,';
put 'TX_TO num ¬null format=datetime19.,';
put 'libref char(8) ¬null label=''Library Name'',';
put 'memname char(64) ¬null label=''Member Name'',';
put 'objname char(32) ¬null label=''Object Name'',';
put 'objtype char(8) ¬null label=''Object Type'',';
put 'objdesc char(256) label=''Object Description'',';
put 'alias char(32) label=''Object Alias''';
put ');quit;';
put 'proc datasets lib=&lib noprint;';
put 'modify mpe_datacatalog_OBJS;';
put 'index create';
put 'pk_mpe_datacatalog_OBJS=(libref memname objname objtype 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 - in a constraint being 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_CATS(';
put 'TX_FROM float format=datetime19.,';
put 'TX_TO float format=datetime19.,';
put 'libref char(8) label=''Library Name'',';
put 'memname char(64) label=''Member Name'',';
put 'nobjs num ¬null label=''Number of objects'',';
put 'created num ¬null format=DATETIME. label=''Date Created'',';
put 'modified num format=DATETIME. label=''Date Modified''';
put ');quit;';
put 'proc datasets lib=&lib noprint;';
put 'modify mpe_datastatus_CATS;';
put 'index create';
put 'pk_mpe_datastatus_cats=(libref memname 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 'catalog_cnt num label=''Number of Catalogs''';
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_OBJS(';
put 'TX_FROM float ¬null format=datetime19.,';
put 'TX_TO float ¬null format=datetime19.,';
put 'libref char(8) label=''Library Name'',';
put 'memname char(64) label=''Member Name'',';
put 'objname char(32) label=''Object Name'',';
put 'objtype char(8) label=''Object Type'',';
put 'created num ¬null format=DATETIME. label=''Date Created'',';
put 'modified num format=DATETIME. label=''Date Modified'',';
put 'level num label=''Library Concatenation Level''';
put ');quit;';
put 'proc datasets lib=&lib noprint;';
put 'modify mpe_datastatus_OBJS;';
put 'index create';
put 'pk_mpe_datastatus_OBJS=(libref memname objname objtype 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. label=''Date Created'',';
put 'modate num format=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 '/* fetch the members of the folder to get the uri */';
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 '/* 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 '%if &SYS_PROCHTTP_STATUS_CODE ne 200 %then %do;';
put '%put &=sysmacroname &=SYS_PROCHTTP_STATUS_CODE &=SYS_PROCHTTP_STATUS_PHRASE;';
put '%end;';
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 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 mp_abort.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 '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Unable to create &dcpath using &sysuserid)';
put ')';
put '%mf_mkdir(&dcpath/secret)';
put '%mf_mkdir(&dcpath/dc_staging)';
put '/* check we have physical permissions to the DCLIB folder */';
put 'data _null_;';
put 'putlog "dcpath=&dcpath/permTest.txt";';
put 'putlog "sysuserid=&sysuserid";';
put 'data _null_;';
put 'file "&dcpath/permTest.txt";';
put 'run;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(User &sysuserid does not have WRITE permissions to: &dcpath )';
put ')';
put 'filename delfile "&dcpath/permTest.txt";';
put 'data _null_;';
put 'rc=fdelete(''delfile'');';
put 'run;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(User &sysuserid could create (but not delete) &dcpath/permTest.txt )';
put ')';
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 '%mp_abort(iftrue=(&syscc ne 0)';
put ',mac=&sysmacroname';
put ',msg=%str(Err during &dclib build)';
put ')';
put '/* sample data library */';
put '%mf_mkdir(&dcpath/dc_demo)';
put 'libname dcdemo "&dcpath/dc_demo";';
put '%mpe_makesampledata(outlib=DCDEMO)';
put '%mp_abort(iftrue=(&syscc ne 0)';
put ',mac=&sysmacroname';
put ',msg=%str(Err during demo data build)';
put ')';
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 settings job creation)';
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 '/* turn off with dsoptions=nonote2err */';
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 '/* extracted in dc_getsettings */';
put 'dc_activation_key';
put 'dc_licence_key';
put 'dc_locale';
put 'dc_request_logs';
put 'dc_restrict_viewer';
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 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */';
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 'and &DC_REQUEST_LOGS ne NO';
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 '/* sleep random amount to avoid parallel update attempts */';
put 'call sleep(ranuni(0)*0.1,1);';
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_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_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=##%mf_getuniquefileref(prefix=BTMP);';
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 work.bitemp5a_lkp (keep=&md5_col)';
put '%if "%substr(&sysver,1,1)" ne "4" & "%substr(&sysver,1,1)" ne "5" %then %do;';
put '/nonote2err';
put '%end;';
put ';';
put 'set work.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=[&temp_table];';
put '%let top_table=[dbo].&base_dsn;';
put '%let flexinow=&SQLNOW;';
put 'create table &base_lib.."&temp_table"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 '%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 '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc afer &lib indexes extraction)';
put ')';
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 work.sumcat as';
put 'select libname as libref,';
put 'count(distinct memname) as catalog_cnt';
put 'from dictionary.catalogs';
put 'where upcase(libname)="&lib"';
put 'group by 1;';
put 'create table work.sumdsn as select';
put 'libref';
put ',sum(filesize) as libsize';
put ',count(*) as table_cnt';
put 'from statustabs';
put 'group by 1;';
put 'create table work.statuslibs as';
put 'select coalesce(a.libref,b.libref) as libref,';
put 'a.libsize,';
put 'a.table_cnt,';
put 'b.catalog_cnt';
put 'from work.sumdsn a';
put 'full join work.sumcat b';
put 'on a.libref=b.libref;';
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 mpe_refreshcatalogs(lib,cat=#all);';
put '%let lib=%upcase(&lib);';
put '%let cat=%upcase(&cat);';
put '%put running &sysmacroname &lib for &cat;';
put 'proc sql;';
put 'create table work.catdata as';
put 'select libname as libref,';
put 'memname,';
put 'objname,';
put 'objtype,';
put 'objdesc,';
put 'created,';
put 'modified,';
put 'alias,';
put 'level';
put 'from dictionary.catalogs';
put 'where upcase(libname)="&lib"';
put '%if &cat ne #ALL %then %do;';
put 'and upcase(memname)="&cat"';
put '%end;';
put ';';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc afer &lib objects extraction)';
put ')';
put '/* load mpe_datacatalog_CATS */';
put 'proc sql;';
put 'create table datacats as select distinct libref,memname from catdata;';
put '%bitemporal_dataloader(base_lib=&mpelib';
put ',base_dsn=mpe_datacatalog_CATS';
put ',append_dsn=datacats';
put ',PK=LIBREF MEMNAME';
put ',etlsource=&sysmacroname';
put ',loadtype=TXTEMPORAL';
put ',tech_from=TX_FROM';
put ',tech_to=TX_TO';
put '%if &cat = #ALL %then %do;';
put ',close_vars=LIBREF';
put '%end;';
put ',dclib=&mpelib';
put ')';
put '/* load mpe_datacatalog_objsS */';
put 'proc sql;';
put 'create table dataobjs as';
put 'select distinct libref,';
put 'memname,';
put 'objname,';
put 'objtype,';
put 'objdesc,';
put 'alias';
put 'from catdata;';
put 'quit;';
put '%bitemporal_dataloader(base_lib=&mpelib';
put ',base_dsn=mpe_datacatalog_OBJS';
put ',append_dsn=dataobjs';
put ',PK=LIBREF MEMNAME OBJNAME OBJTYPE';
put ',etlsource=&sysmacroname';
put ',loadtype=TXTEMPORAL';
put ',tech_from=TX_FROM';
put ',tech_to=TX_TO';
put '%if &cat = #ALL %then %do;';
put ',close_vars=LIBREF MEMNAME';
put '%end;';
put ',dclib=&mpelib';
put ')';
put '%put load mpe_datastatus_OBJS;';
put 'proc sql;';
put 'create table statusobjs as';
put 'select distinct libref,';
put 'memname,';
put 'objname,';
put 'objtype,';
put 'created,';
put 'modified,';
put 'level';
put 'from catdata;';
put '%bitemporal_dataloader(base_lib=&mpelib';
put ',base_dsn=mpe_datastatus_OBJS';
put ',append_dsn=statusobjs';
put ',PK=LIBREF MEMNAME OBJNAME OBJTYPE';
put ',etlsource=&sysmacroname';
put ',loadtype=TXTEMPORAL';
put ',tech_from=TX_FROM';
put ',tech_to=TX_TO';
put '%if &cat = #ALL %then %do;';
put ',close_vars=LIBREF MEMNAME';
put '%end;';
put ',dclib=&mpelib';
put ')';
put '%put load mpe_datastatus_cats;';
put 'proc sql;';
put 'create table statuscats as';
put 'select libref,';
put 'memname,';
put 'count(*) as nobjs,';
put 'min(created) as created,';
put 'max(modified) as modified';
put 'from catdata';
put 'group by 1,2;';
put '%bitemporal_dataloader(base_lib=&mpelib';
put ',base_dsn=mpe_datastatus_cats';
put ',append_dsn=statuscats';
put ',PK=LIBREF MEMNAME';
put ',etlsource=&sysmacroname';
put ',loadtype=TXTEMPORAL';
put ',tech_from=TX_FROM';
put ',tech_to=TX_TO';
put '%if &cat = #ALL %then %do;';
put ',close_vars=LIBREF';
put '%end;';
put ',dclib=&mpelib';
put ')';
put '%mend mpe_refreshcatalogs;';
put '%macro dc_refreshcatalog(libref);';
put '%if #&libref# ne ## %then %do;';
put '%put &sysmacroname: assigning specific libref, &libref;';
put '%dc_assignlib(WRITE,&libref) /* write just in order to assign direct lib */';
put '%mpe_refreshlibs(lib=&libref)';
put '%mpe_refreshtables(&libref)';
put '%mpe_refreshcatalogs(&libref)';
put '%end;';
put '%else %do;';
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 'str=cats(''%mpe_refreshcatalogs('',libref,'')'');';
put 'put str;';
put 'putlog str;';
put 'run;';
put '%inc executor;';
put '%end;';
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 '/* turn off with dsoptions=nonote2err */';
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 '/* extracted in dc_getsettings */';
put 'dc_activation_key';
put 'dc_licence_key';
put 'dc_locale';
put 'dc_request_logs';
put 'dc_restrict_viewer';
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 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */';
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 'and &DC_REQUEST_LOGS ne NO';
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 '/* sleep random amount to avoid parallel update attempts */';
put 'call sleep(ranuni(0)*0.1,1);';
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_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_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=##%mf_getuniquefileref(prefix=BTMP);';
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 work.bitemp5a_lkp (keep=&md5_col)';
put '%if "%substr(&sysver,1,1)" ne "4" & "%substr(&sysver,1,1)" ne "5" %then %do;';
put '/nonote2err';
put '%end;';
put ';';
put 'set work.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=[&temp_table];';
put '%let top_table=[dbo].&base_dsn;';
put '%let flexinow=&SQLNOW;';
put 'create table &base_lib.."&temp_table"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 '/* turn off with dsoptions=nonote2err */';
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 '/* extracted in dc_getsettings */';
put 'dc_activation_key';
put 'dc_licence_key';
put 'dc_locale';
put 'dc_request_logs';
put 'dc_restrict_viewer';
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 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */';
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 'and &DC_REQUEST_LOGS ne NO';
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 '/* sleep random amount to avoid parallel update attempts */';
put 'call sleep(ranuni(0)*0.1,1);';
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_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_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=##%mf_getuniquefileref(prefix=BTMP);';
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 work.bitemp5a_lkp (keep=&md5_col)';
put '%if "%substr(&sysver,1,1)" ne "4" & "%substr(&sysver,1,1)" ne "5" %then %do;';
put '/nonote2err';
put '%end;';
put ';';
put 'set work.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=[&temp_table];';
put '%let top_table=[dbo].&base_dsn;';
put '%let flexinow=&SQLNOW;';
put 'create table &base_lib.."&temp_table"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_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 '/* turn off with dsoptions=nonote2err */';
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 '/* extracted in dc_getsettings */';
put 'dc_activation_key';
put 'dc_licence_key';
put 'dc_locale';
put 'dc_request_logs';
put 'dc_restrict_viewer';
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 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */';
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 'and &DC_REQUEST_LOGS ne NO';
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 '/* sleep random amount to avoid parallel update attempts */';
put 'call sleep(ranuni(0)*0.1,1);';
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,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=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 '/* turn off with dsoptions=nonote2err */';
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 '/* extracted in dc_getsettings */';
put 'dc_activation_key';
put 'dc_licence_key';
put 'dc_locale';
put 'dc_request_logs';
put 'dc_restrict_viewer';
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 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */';
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 'and &DC_REQUEST_LOGS ne NO';
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 '/* sleep random amount to avoid parallel update attempts */';
put 'call sleep(ranuni(0)*0.1,1);';
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 '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 ';';
put '/* get latest reason text */';
put 'create table work.reviews as';
put 'select a.*';
put ',b.reviewed_on_dttm';
put ',b.reviewed_by_nm as approver';
put ',b.review_reason_txt';
put 'from work.submits a';
put 'left join &mpelib..mpe_review b';
put 'on a.table_id=b.table_id';
put 'order by a.table_id desc, b.reviewed_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.reviews;';
put 'by descending table_id descending reviewed_on_dttm;';
put 'if first.table_id;';
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,missing=STRING)';
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 '/* turn off with dsoptions=nonote2err */';
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 '/* extracted in dc_getsettings */';
put 'dc_activation_key';
put 'dc_licence_key';
put 'dc_locale';
put 'dc_request_logs';
put 'dc_restrict_viewer';
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 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */';
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 'and &DC_REQUEST_LOGS ne NO';
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 '/* sleep random amount to avoid parallel update attempts */';
put 'call sleep(ranuni(0)*0.1,1);';
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 'end;';
put 'else do;';
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 '/* turn off with dsoptions=nonote2err */';
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 '/* extracted in dc_getsettings */';
put 'dc_activation_key';
put 'dc_licence_key';
put 'dc_locale';
put 'dc_request_logs';
put 'dc_restrict_viewer';
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 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */';
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 'and &DC_REQUEST_LOGS ne NO';
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 '/* sleep random amount to avoid parallel update attempts */';
put 'call sleep(ranuni(0)*0.1,1);';
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 $2000 fref fref2 $8 file_or_folder $6 filename $255';
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 '/* turn off with dsoptions=nonote2err */';
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 '/* extracted in dc_getsettings */';
put 'dc_activation_key';
put 'dc_licence_key';
put 'dc_locale';
put 'dc_request_logs';
put 'dc_restrict_viewer';
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 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */';
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 'and &DC_REQUEST_LOGS ne NO';
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 '/* sleep random amount to avoid parallel update attempts */';
put 'call sleep(ranuni(0)*0.1,1);';
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 '/* turn off with dsoptions=nonote2err */';
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 '/* extracted in dc_getsettings */';
put 'dc_activation_key';
put 'dc_licence_key';
put 'dc_locale';
put 'dc_request_logs';
put 'dc_restrict_viewer';
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 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */';
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 'and &DC_REQUEST_LOGS ne NO';
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 '/* sleep random amount to avoid parallel update attempts */';
put 'call sleep(ranuni(0)*0.1,1);';
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 '/* turn off with dsoptions=nonote2err */';
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 '/* extracted in dc_getsettings */';
put 'dc_activation_key';
put 'dc_licence_key';
put 'dc_locale';
put 'dc_request_logs';
put 'dc_restrict_viewer';
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 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */';
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 'and &DC_REQUEST_LOGS ne NO';
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 '/* sleep random amount to avoid parallel update attempts */';
put 'call sleep(ranuni(0)*0.1,1);';
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_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_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=##%mf_getuniquefileref(prefix=BTMP);';
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 work.bitemp5a_lkp (keep=&md5_col)';
put '%if "%substr(&sysver,1,1)" ne "4" & "%substr(&sysver,1,1)" ne "5" %then %do;';
put '/nonote2err';
put '%end;';
put ';';
put 'set work.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=[&temp_table];';
put '%let top_table=[dbo].&base_dsn;';
put '%let flexinow=&SQLNOW;';
put 'create table &base_lib.."&temp_table"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_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 'end;';
put 'else do;';
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 '/* turn off with dsoptions=nonote2err */';
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 '/* extracted in dc_getsettings */';
put 'dc_activation_key';
put 'dc_licence_key';
put 'dc_locale';
put 'dc_request_logs';
put 'dc_restrict_viewer';
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 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */';
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 'and &DC_REQUEST_LOGS ne NO';
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 '/* sleep random amount to avoid parallel update attempts */';
put 'call sleep(ranuni(0)*0.1,1);';
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 memname;';
put '%let lenstmt=length ods_table $18 name $100 value $1000;';
put '%let libds=%upcase(&libds);';
put '%if "%scan(&libds,2,-)" ne "FC" %then %do;';
put '%let memname=%scan(&libds,2,.);';
put '%mp_dsmeta(&libds, outds=&outds)';
put '%end;';
put '%else %do;';
put '%let memname=%scan(&libds,2,.-);';
put 'data &outds;';
put '&lenstmt;';
put 'set sashelp.vcatalg;';
put 'ods_table=cats(objtype);';
put 'name=cats(objname);';
put 'value=catx('' '',objdesc,''(modified:'',put(modified,datetime19.),'')'');';
put 'where libname="%scan(&libds,1,.)" and memname="&memname";';
put 'keep ods_table name value;';
put 'run;';
put 'proc sort; by ods_table name;run;';
put '%end;';
put 'data _null_;';
put 'set &mpelib..mpe_datadictionary;';
put 'where &dc_dttmtfmt < tx_to & dd_source="&memname" & 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'' or format=:''NLDATM''';
put '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'' or format=:''NLDATE''';
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'' or format=:''NLDATM''';
put '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'' or format=:''NLDATE''';
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(&orig_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,missing=STRING)';
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 '/* turn off with dsoptions=nonote2err */';
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 '/* extracted in dc_getsettings */';
put 'dc_activation_key';
put 'dc_licence_key';
put 'dc_locale';
put 'dc_request_logs';
put 'dc_restrict_viewer';
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 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */';
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 'and &DC_REQUEST_LOGS ne NO';
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 '/* sleep random amount to avoid parallel update attempts */';
put 'call sleep(ranuni(0)*0.1,1);';
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 '/* turn off with dsoptions=nonote2err */';
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 '/* extracted in dc_getsettings */';
put 'dc_activation_key';
put 'dc_licence_key';
put 'dc_locale';
put 'dc_request_logs';
put 'dc_restrict_viewer';
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 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */';
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 'and &DC_REQUEST_LOGS ne NO';
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 '/* sleep random amount to avoid parallel update attempts */';
put 'call sleep(ranuni(0)*0.1,1);';
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 $2000 fref fref2 $8 file_or_folder $6 filename $255';
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 '/* turn off with dsoptions=nonote2err */';
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 '/* extracted in dc_getsettings */';
put 'dc_activation_key';
put 'dc_licence_key';
put 'dc_locale';
put 'dc_request_logs';
put 'dc_restrict_viewer';
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 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */';
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 'and &DC_REQUEST_LOGS ne NO';
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 '/* sleep random amount to avoid parallel update attempts */';
put 'call sleep(ranuni(0)*0.1,1);';
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,missing=STRING)';
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 '/* turn off with dsoptions=nonote2err */';
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 '/* extracted in dc_getsettings */';
put 'dc_activation_key';
put 'dc_licence_key';
put 'dc_locale';
put 'dc_request_logs';
put 'dc_restrict_viewer';
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 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */';
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 'and &DC_REQUEST_LOGS ne NO';
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 '/* sleep random amount to avoid parallel update attempts */';
put 'call sleep(ranuni(0)*0.1,1);';
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 '/* turn off with dsoptions=nonote2err */';
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 '/* extracted in dc_getsettings */';
put 'dc_activation_key';
put 'dc_licence_key';
put 'dc_locale';
put 'dc_request_logs';
put 'dc_restrict_viewer';
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 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */';
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 'and &DC_REQUEST_LOGS ne NO';
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 '/* sleep random amount to avoid parallel update attempts */';
put 'call sleep(ranuni(0)*0.1,1);';
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 'end;';
put 'else do;';
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 $2000 fref fref2 $8 file_or_folder $6 filename $255';
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'' or format2=:''NLDATM''';
put '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 'or format2=:''NLDATE''';
put 'then do;';
put 'format=''DATE9.'';';
put 'end;';
put 'else if format2=''BEST'' & formatl=0 then format=cats(''BEST'',length,''.'');';
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 _____DELETE__THIS__RECORD_____ length=$3 &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 '/* turn off with dsoptions=nonote2err */';
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 '/* extracted in dc_getsettings */';
put 'dc_activation_key';
put 'dc_licence_key';
put 'dc_locale';
put 'dc_request_logs';
put 'dc_restrict_viewer';
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 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */';
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 'and &DC_REQUEST_LOGS ne NO';
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 '/* sleep random amount to avoid parallel update attempts */';
put 'call sleep(ranuni(0)*0.1,1);';
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 'end;';
put 'else do;';
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 $2000 fref fref2 $8 file_or_folder $6 filename $255';
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'' or format2=:''NLDATM''';
put '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 'or format2=:''NLDATE''';
put 'then do;';
put 'format=''DATE9.'';';
put 'end;';
put 'else if format2=''BEST'' & formatl=0 then format=cats(''BEST'',length,''.'');';
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 _____DELETE__THIS__RECORD_____ length=$3 &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 ',''NLDATM'') 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'',''NLDATE'') 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 '/* turn off with dsoptions=nonote2err */';
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 '/* extracted in dc_getsettings */';
put 'dc_activation_key';
put 'dc_licence_key';
put 'dc_locale';
put 'dc_request_logs';
put 'dc_restrict_viewer';
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 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */';
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 'and &DC_REQUEST_LOGS ne NO';
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 '/* sleep random amount to avoid parallel update attempts */';
put 'call sleep(ranuni(0)*0.1,1);';
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 'end;';
put 'else do;';
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 $2000 fref fref2 $8 file_or_folder $6 filename $255';
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'' or format2=:''NLDATM''';
put '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 'or format2=:''NLDATE''';
put 'then do;';
put 'format=''DATE9.'';';
put 'end;';
put 'else if format2=''BEST'' & formatl=0 then format=cats(''BEST'',length,''.'');';
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 _____DELETE__THIS__RECORD_____ length=$3 &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 ',''NLDATM'') 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'',''NLDATE'') 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 '/* turn off with dsoptions=nonote2err */';
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 '/* extracted in dc_getsettings */';
put 'dc_activation_key';
put 'dc_licence_key';
put 'dc_locale';
put 'dc_request_logs';
put 'dc_restrict_viewer';
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 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */';
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 'and &DC_REQUEST_LOGS ne NO';
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 '/* sleep random amount to avoid parallel update attempts */';
put 'call sleep(ranuni(0)*0.1,1);';
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 '/* turn off with dsoptions=nonote2err */';
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 '/* extracted in dc_getsettings */';
put 'dc_activation_key';
put 'dc_licence_key';
put 'dc_locale';
put 'dc_request_logs';
put 'dc_restrict_viewer';
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 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */';
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 'and &DC_REQUEST_LOGS ne NO';
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 '/* sleep random amount to avoid parallel update attempts */';
put 'call sleep(ranuni(0)*0.1,1);';
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 '/* turn off with dsoptions=nonote2err */';
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 '/* extracted in dc_getsettings */';
put 'dc_activation_key';
put 'dc_licence_key';
put 'dc_locale';
put 'dc_request_logs';
put 'dc_restrict_viewer';
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 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */';
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 'and &DC_REQUEST_LOGS ne NO';
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 '/* sleep random amount to avoid parallel update attempts */';
put 'call sleep(ranuni(0)*0.1,1);';
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 '/* turn off with dsoptions=nonote2err */';
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 '/* extracted in dc_getsettings */';
put 'dc_activation_key';
put 'dc_licence_key';
put 'dc_locale';
put 'dc_request_logs';
put 'dc_restrict_viewer';
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 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */';
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 'and &DC_REQUEST_LOGS ne NO';
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 '/* sleep random amount to avoid parallel update attempts */';
put 'call sleep(ranuni(0)*0.1,1);';
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 '/* PK fields should not be upcased if we are trying to delete records */';
put 'if upcase(_____DELETE__THIS__RECORD_____) ne "YES" then do;';
put 'LIBREF=upcase(LIBREF);';
put 'DSN=upcase(DSN);';
put 'end;';
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 '/* turn off with dsoptions=nonote2err */';
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 '/* extracted in dc_getsettings */';
put 'dc_activation_key';
put 'dc_licence_key';
put 'dc_locale';
put 'dc_request_logs';
put 'dc_restrict_viewer';
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 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */';
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 'and &DC_REQUEST_LOGS ne NO';
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 '/* sleep random amount to avoid parallel update attempts */';
put 'call sleep(ranuni(0)*0.1,1);';
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 '/* turn off with dsoptions=nonote2err */';
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 '/* extracted in dc_getsettings */';
put 'dc_activation_key';
put 'dc_licence_key';
put 'dc_locale';
put 'dc_request_logs';
put 'dc_restrict_viewer';
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 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */';
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 'and &DC_REQUEST_LOGS ne NO';
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 '/* sleep random amount to avoid parallel update attempts */';
put 'call sleep(ranuni(0)*0.1,1);';
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 '/* turn off with dsoptions=nonote2err */';
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 '/* extracted in dc_getsettings */';
put 'dc_activation_key';
put 'dc_licence_key';
put 'dc_locale';
put 'dc_request_logs';
put 'dc_restrict_viewer';
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 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */';
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 'and &DC_REQUEST_LOGS ne NO';
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 '/* sleep random amount to avoid parallel update attempts */';
put 'call sleep(ranuni(0)*0.1,1);';
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 '/* turn off with dsoptions=nonote2err */';
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 '/* extracted in dc_getsettings */';
put 'dc_activation_key';
put 'dc_licence_key';
put 'dc_locale';
put 'dc_request_logs';
put 'dc_restrict_viewer';
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 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */';
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 'and &DC_REQUEST_LOGS ne NO';
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 '/* sleep random amount to avoid parallel update attempts */';
put 'call sleep(ranuni(0)*0.1,1);';
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 '/* turn off with dsoptions=nonote2err */';
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 '/* extracted in dc_getsettings */';
put 'dc_activation_key';
put 'dc_licence_key';
put 'dc_locale';
put 'dc_request_logs';
put 'dc_restrict_viewer';
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 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */';
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 'and &DC_REQUEST_LOGS ne NO';
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 '/* sleep random amount to avoid parallel update attempts */';
put 'call sleep(ranuni(0)*0.1,1);';
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 '/* turn off with dsoptions=nonote2err */';
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 '/* extracted in dc_getsettings */';
put 'dc_activation_key';
put 'dc_licence_key';
put 'dc_locale';
put 'dc_request_logs';
put 'dc_restrict_viewer';
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 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */';
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 'and &DC_REQUEST_LOGS ne NO';
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 '/* sleep random amount to avoid parallel update attempts */';
put 'call sleep(ranuni(0)*0.1,1);';
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,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=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 '/* turn off with dsoptions=nonote2err */';
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 '/* extracted in dc_getsettings */';
put 'dc_activation_key';
put 'dc_licence_key';
put 'dc_locale';
put 'dc_request_logs';
put 'dc_restrict_viewer';
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 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */';
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 'and &DC_REQUEST_LOGS ne NO';
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 '/* sleep random amount to avoid parallel update attempts */';
put 'call sleep(ranuni(0)*0.1,1);';
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 '/* turn off with dsoptions=nonote2err */';
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 '/* extracted in dc_getsettings */';
put 'dc_activation_key';
put 'dc_licence_key';
put 'dc_locale';
put 'dc_request_logs';
put 'dc_restrict_viewer';
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 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */';
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 'and &DC_REQUEST_LOGS ne NO';
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 '/* sleep random amount to avoid parallel update attempts */';
put 'call sleep(ranuni(0)*0.1,1);';
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 '/* turn off with dsoptions=nonote2err */';
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 '/* extracted in dc_getsettings */';
put 'dc_activation_key';
put 'dc_licence_key';
put 'dc_locale';
put 'dc_request_logs';
put 'dc_restrict_viewer';
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 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */';
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 'and &DC_REQUEST_LOGS ne NO';
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 '/* sleep random amount to avoid parallel update attempts */';
put 'call sleep(ranuni(0)*0.1,1);';
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 '/* turn off with dsoptions=nonote2err */';
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 '/* extracted in dc_getsettings */';
put 'dc_activation_key';
put 'dc_licence_key';
put 'dc_locale';
put 'dc_request_logs';
put 'dc_restrict_viewer';
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 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */';
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 'and &DC_REQUEST_LOGS ne NO';
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 '/* sleep random amount to avoid parallel update attempts */';
put 'call sleep(ranuni(0)*0.1,1);';
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 '/* turn off with dsoptions=nonote2err */';
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 '/* extracted in dc_getsettings */';
put 'dc_activation_key';
put 'dc_licence_key';
put 'dc_locale';
put 'dc_request_logs';
put 'dc_restrict_viewer';
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 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */';
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 'and &DC_REQUEST_LOGS ne NO';
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 '/* sleep random amount to avoid parallel update attempts */';
put 'call sleep(ranuni(0)*0.1,1);';
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 'run;';
put '/* if a format, extract relevant info */';
put 'data _null_;';
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 '/* turn off with dsoptions=nonote2err */';
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 '/* extracted in dc_getsettings */';
put 'dc_activation_key';
put 'dc_licence_key';
put 'dc_locale';
put 'dc_request_logs';
put 'dc_restrict_viewer';
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 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */';
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 'and &DC_REQUEST_LOGS ne NO';
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 '/* sleep random amount to avoid parallel update attempts */';
put 'call sleep(ranuni(0)*0.1,1);';
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 '/* turn off with dsoptions=nonote2err */';
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 '/* extracted in dc_getsettings */';
put 'dc_activation_key';
put 'dc_licence_key';
put 'dc_locale';
put 'dc_request_logs';
put 'dc_restrict_viewer';
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 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */';
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 'and &DC_REQUEST_LOGS ne NO';
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 '/* sleep random amount to avoid parallel update attempts */';
put 'call sleep(ranuni(0)*0.1,1);';
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_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_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=##%mf_getuniquefileref(prefix=BTMP);';
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 work.bitemp5a_lkp (keep=&md5_col)';
put '%if "%substr(&sysver,1,1)" ne "4" & "%substr(&sysver,1,1)" ne "5" %then %do;';
put '/nonote2err';
put '%end;';
put ';';
put 'set work.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=[&temp_table];';
put '%let top_table=[dbo].&base_dsn;';
put '%let flexinow=&SQLNOW;';
put 'create table &base_lib.."&temp_table"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 '%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 '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc afer &lib indexes extraction)';
put ')';
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 work.sumcat as';
put 'select libname as libref,';
put 'count(distinct memname) as catalog_cnt';
put 'from dictionary.catalogs';
put 'where upcase(libname)="&lib"';
put 'group by 1;';
put 'create table work.sumdsn as select';
put 'libref';
put ',sum(filesize) as libsize';
put ',count(*) as table_cnt';
put 'from statustabs';
put 'group by 1;';
put 'create table work.statuslibs as';
put 'select coalesce(a.libref,b.libref) as libref,';
put 'a.libsize,';
put 'a.table_cnt,';
put 'b.catalog_cnt';
put 'from work.sumdsn a';
put 'full join work.sumcat b';
put 'on a.libref=b.libref;';
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 mpe_refreshcatalogs(lib,cat=#all);';
put '%let lib=%upcase(&lib);';
put '%let cat=%upcase(&cat);';
put '%put running &sysmacroname &lib for &cat;';
put 'proc sql;';
put 'create table work.catdata as';
put 'select libname as libref,';
put 'memname,';
put 'objname,';
put 'objtype,';
put 'objdesc,';
put 'created,';
put 'modified,';
put 'alias,';
put 'level';
put 'from dictionary.catalogs';
put 'where upcase(libname)="&lib"';
put '%if &cat ne #ALL %then %do;';
put 'and upcase(memname)="&cat"';
put '%end;';
put ';';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc afer &lib objects extraction)';
put ')';
put '/* load mpe_datacatalog_CATS */';
put 'proc sql;';
put 'create table datacats as select distinct libref,memname from catdata;';
put '%bitemporal_dataloader(base_lib=&mpelib';
put ',base_dsn=mpe_datacatalog_CATS';
put ',append_dsn=datacats';
put ',PK=LIBREF MEMNAME';
put ',etlsource=&sysmacroname';
put ',loadtype=TXTEMPORAL';
put ',tech_from=TX_FROM';
put ',tech_to=TX_TO';
put '%if &cat = #ALL %then %do;';
put ',close_vars=LIBREF';
put '%end;';
put ',dclib=&mpelib';
put ')';
put '/* load mpe_datacatalog_objsS */';
put 'proc sql;';
put 'create table dataobjs as';
put 'select distinct libref,';
put 'memname,';
put 'objname,';
put 'objtype,';
put 'objdesc,';
put 'alias';
put 'from catdata;';
put 'quit;';
put '%bitemporal_dataloader(base_lib=&mpelib';
put ',base_dsn=mpe_datacatalog_OBJS';
put ',append_dsn=dataobjs';
put ',PK=LIBREF MEMNAME OBJNAME OBJTYPE';
put ',etlsource=&sysmacroname';
put ',loadtype=TXTEMPORAL';
put ',tech_from=TX_FROM';
put ',tech_to=TX_TO';
put '%if &cat = #ALL %then %do;';
put ',close_vars=LIBREF MEMNAME';
put '%end;';
put ',dclib=&mpelib';
put ')';
put '%put load mpe_datastatus_OBJS;';
put 'proc sql;';
put 'create table statusobjs as';
put 'select distinct libref,';
put 'memname,';
put 'objname,';
put 'objtype,';
put 'created,';
put 'modified,';
put 'level';
put 'from catdata;';
put '%bitemporal_dataloader(base_lib=&mpelib';
put ',base_dsn=mpe_datastatus_OBJS';
put ',append_dsn=statusobjs';
put ',PK=LIBREF MEMNAME OBJNAME OBJTYPE';
put ',etlsource=&sysmacroname';
put ',loadtype=TXTEMPORAL';
put ',tech_from=TX_FROM';
put ',tech_to=TX_TO';
put '%if &cat = #ALL %then %do;';
put ',close_vars=LIBREF MEMNAME';
put '%end;';
put ',dclib=&mpelib';
put ')';
put '%put load mpe_datastatus_cats;';
put 'proc sql;';
put 'create table statuscats as';
put 'select libref,';
put 'memname,';
put 'count(*) as nobjs,';
put 'min(created) as created,';
put 'max(modified) as modified';
put 'from catdata';
put 'group by 1,2;';
put '%bitemporal_dataloader(base_lib=&mpelib';
put ',base_dsn=mpe_datastatus_cats';
put ',append_dsn=statuscats';
put ',PK=LIBREF MEMNAME';
put ',etlsource=&sysmacroname';
put ',loadtype=TXTEMPORAL';
put ',tech_from=TX_FROM';
put ',tech_to=TX_TO';
put '%if &cat = #ALL %then %do;';
put ',close_vars=LIBREF';
put '%end;';
put ',dclib=&mpelib';
put ')';
put '%mend mpe_refreshcatalogs;';
put '%macro dc_refreshcatalog(libref);';
put '%if #&libref# ne ## %then %do;';
put '%put &sysmacroname: assigning specific libref, &libref;';
put '%dc_assignlib(WRITE,&libref) /* write just in order to assign direct lib */';
put '%mpe_refreshlibs(lib=&libref)';
put '%mpe_refreshtables(&libref)';
put '%mpe_refreshcatalogs(&libref)';
put '%end;';
put '%else %do;';
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 'str=cats(''%mpe_refreshcatalogs('',libref,'')'');';
put 'put str;';
put 'putlog str;';
put 'run;';
put '%inc executor;';
put '%end;';
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 'b.catalog_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 '/* turn off with dsoptions=nonote2err */';
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 '/* extracted in dc_getsettings */';
put 'dc_activation_key';
put 'dc_licence_key';
put 'dc_locale';
put 'dc_request_logs';
put 'dc_restrict_viewer';
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 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */';
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 'and &DC_REQUEST_LOGS ne NO';
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 '/* sleep random amount to avoid parallel update attempts */';
put 'call sleep(ranuni(0)*0.1,1);';
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 '/* turn off with dsoptions=nonote2err */';
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 '/* extracted in dc_getsettings */';
put 'dc_activation_key';
put 'dc_licence_key';
put 'dc_locale';
put 'dc_request_logs';
put 'dc_restrict_viewer';
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 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */';
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 'and &DC_REQUEST_LOGS ne NO';
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 '/* sleep random amount to avoid parallel update attempts */';
put 'call sleep(ranuni(0)*0.1,1);';
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 '/* turn off with dsoptions=nonote2err */';
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 '/* extracted in dc_getsettings */';
put 'dc_activation_key';
put 'dc_licence_key';
put 'dc_locale';
put 'dc_request_logs';
put 'dc_restrict_viewer';
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 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */';
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 'and &DC_REQUEST_LOGS ne NO';
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 '/* sleep random amount to avoid parallel update attempts */';
put 'call sleep(ranuni(0)*0.1,1);';
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 '/* turn off with dsoptions=nonote2err */';
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 '/* extracted in dc_getsettings */';
put 'dc_activation_key';
put 'dc_licence_key';
put 'dc_locale';
put 'dc_request_logs';
put 'dc_restrict_viewer';
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 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */';
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 'and &DC_REQUEST_LOGS ne NO';
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 '/* sleep random amount to avoid parallel update attempts */';
put 'call sleep(ranuni(0)*0.1,1);';
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 '/* turn off with dsoptions=nonote2err */';
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 '/* extracted in dc_getsettings */';
put 'dc_activation_key';
put 'dc_licence_key';
put 'dc_locale';
put 'dc_request_logs';
put 'dc_restrict_viewer';
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 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */';
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 'and &DC_REQUEST_LOGS ne NO';
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 '/* sleep random amount to avoid parallel update attempts */';
put 'call sleep(ranuni(0)*0.1,1);';
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 '/* turn off with dsoptions=nonote2err */';
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 '/* extracted in dc_getsettings */';
put 'dc_activation_key';
put 'dc_licence_key';
put 'dc_locale';
put 'dc_request_logs';
put 'dc_restrict_viewer';
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 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */';
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 'and &DC_REQUEST_LOGS ne NO';
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 '/* sleep random amount to avoid parallel update attempts */';
put 'call sleep(ranuni(0)*0.1,1);';
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 memname;';
put '%let lenstmt=length ods_table $18 name $100 value $1000;';
put '%let libds=%upcase(&libds);';
put '%if "%scan(&libds,2,-)" ne "FC" %then %do;';
put '%let memname=%scan(&libds,2,.);';
put '%mp_dsmeta(&libds, outds=&outds)';
put '%end;';
put '%else %do;';
put '%let memname=%scan(&libds,2,.-);';
put 'data &outds;';
put '&lenstmt;';
put 'set sashelp.vcatalg;';
put 'ods_table=cats(objtype);';
put 'name=cats(objname);';
put 'value=catx('' '',objdesc,''(modified:'',put(modified,datetime19.),'')'');';
put 'where libname="%scan(&libds,1,.)" and memname="&memname";';
put 'keep ods_table name value;';
put 'run;';
put 'proc sort; by ods_table name;run;';
put '%end;';
put 'data _null_;';
put 'set &mpelib..mpe_datadictionary;';
put 'where &dc_dttmtfmt < tx_to & dd_source="&memname" & 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'' or format=:''NLDATM''';
put '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'' or format=:''NLDATE''';
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(&orig_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 '/* turn off with dsoptions=nonote2err */';
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 '/* extracted in dc_getsettings */';
put 'dc_activation_key';
put 'dc_licence_key';
put 'dc_locale';
put 'dc_request_logs';
put 'dc_restrict_viewer';
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 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */';
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 'and &DC_REQUEST_LOGS ne NO';
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 '/* sleep random amount to avoid parallel update attempts */';
put 'call sleep(ranuni(0)*0.1,1);';
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 '/* turn off with dsoptions=nonote2err */';
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 '/* extracted in dc_getsettings */';
put 'dc_activation_key';
put 'dc_licence_key';
put 'dc_locale';
put 'dc_request_logs';
put 'dc_restrict_viewer';
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 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */';
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 'and &DC_REQUEST_LOGS ne NO';
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 '/* sleep random amount to avoid parallel update attempts */';
put 'call sleep(ranuni(0)*0.1,1);';
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,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=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 '/* turn off with dsoptions=nonote2err */';
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 '/* extracted in dc_getsettings */';
put 'dc_activation_key';
put 'dc_licence_key';
put 'dc_locale';
put 'dc_request_logs';
put 'dc_restrict_viewer';
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 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */';
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 'and &DC_REQUEST_LOGS ne NO';
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 '/* sleep random amount to avoid parallel update attempts */';
put 'call sleep(ranuni(0)*0.1,1);';
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 'coalesce(b.catalog_cnt,0) as catalog_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 '/* turn off with dsoptions=nonote2err */';
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 '/* extracted in dc_getsettings */';
put 'dc_activation_key';
put 'dc_licence_key';
put 'dc_locale';
put 'dc_request_logs';
put 'dc_restrict_viewer';
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 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */';
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 'and &DC_REQUEST_LOGS ne NO';
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 '/* sleep random amount to avoid parallel update attempts */';
put 'call sleep(ranuni(0)*0.1,1);';
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 '/* turn off with dsoptions=nonote2err */';
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 '/* extracted in dc_getsettings */';
put 'dc_activation_key';
put 'dc_licence_key';
put 'dc_locale';
put 'dc_request_logs';
put 'dc_restrict_viewer';
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 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */';
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 'and &DC_REQUEST_LOGS ne NO';
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 '/* sleep random amount to avoid parallel update attempts */';
put 'call sleep(ranuni(0)*0.1,1);';
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 '/* turn off with dsoptions=nonote2err */';
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 '/* extracted in dc_getsettings */';
put 'dc_activation_key';
put 'dc_licence_key';
put 'dc_locale';
put 'dc_request_logs';
put 'dc_restrict_viewer';
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 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */';
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 'and &DC_REQUEST_LOGS ne NO';
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 '/* sleep random amount to avoid parallel update attempts */';
put 'call sleep(ranuni(0)*0.1,1);';
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 '/* turn off with dsoptions=nonote2err */';
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 '/* extracted in dc_getsettings */';
put 'dc_activation_key';
put 'dc_licence_key';
put 'dc_locale';
put 'dc_request_logs';
put 'dc_restrict_viewer';
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 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */';
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 'and &DC_REQUEST_LOGS ne NO';
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 '/* sleep random amount to avoid parallel update attempts */';
put 'call sleep(ranuni(0)*0.1,1);';
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 '/* turn off with dsoptions=nonote2err */';
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 '/* extracted in dc_getsettings */';
put 'dc_activation_key';
put 'dc_licence_key';
put 'dc_locale';
put 'dc_request_logs';
put 'dc_restrict_viewer';
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 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */';
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 'and &DC_REQUEST_LOGS ne NO';
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 '/* sleep random amount to avoid parallel update attempts */';
put 'call sleep(ranuni(0)*0.1,1);';
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 '/* turn off with dsoptions=nonote2err */';
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 '/* extracted in dc_getsettings */';
put 'dc_activation_key';
put 'dc_licence_key';
put 'dc_locale';
put 'dc_request_logs';
put 'dc_restrict_viewer';
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 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */';
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 'and &DC_REQUEST_LOGS ne NO';
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 '/* sleep random amount to avoid parallel update attempts */';
put 'call sleep(ranuni(0)*0.1,1);';
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 '/* turn off with dsoptions=nonote2err */';
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 '/* extracted in dc_getsettings */';
put 'dc_activation_key';
put 'dc_licence_key';
put 'dc_locale';
put 'dc_request_logs';
put 'dc_restrict_viewer';
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 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */';
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 'and &DC_REQUEST_LOGS ne NO';
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 '/* sleep random amount to avoid parallel update attempts */';
put 'call sleep(ranuni(0)*0.1,1);';
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 '/* turn off with dsoptions=nonote2err */';
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 '/* extracted in dc_getsettings */';
put 'dc_activation_key';
put 'dc_licence_key';
put 'dc_locale';
put 'dc_request_logs';
put 'dc_restrict_viewer';
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 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */';
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 'and &DC_REQUEST_LOGS ne NO';
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 '/* sleep random amount to avoid parallel update attempts */';
put 'call sleep(ranuni(0)*0.1,1);';
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 '/* turn off with dsoptions=nonote2err */';
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 '/* extracted in dc_getsettings */';
put 'dc_activation_key';
put 'dc_licence_key';
put 'dc_locale';
put 'dc_request_logs';
put 'dc_restrict_viewer';
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 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */';
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 'and &DC_REQUEST_LOGS ne NO';
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 '/* sleep random amount to avoid parallel update attempts */';
put 'call sleep(ranuni(0)*0.1,1);';
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 '/* turn off with dsoptions=nonote2err */';
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 '/* extracted in dc_getsettings */';
put 'dc_activation_key';
put 'dc_licence_key';
put 'dc_locale';
put 'dc_request_logs';
put 'dc_restrict_viewer';
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 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */';
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 'and &DC_REQUEST_LOGS ne NO';
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 '/* sleep random amount to avoid parallel update attempts */';
put 'call sleep(ranuni(0)*0.1,1);';
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 '/* turn off with dsoptions=nonote2err */';
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 '/* extracted in dc_getsettings */';
put 'dc_activation_key';
put 'dc_licence_key';
put 'dc_locale';
put 'dc_request_logs';
put 'dc_restrict_viewer';
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 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */';
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 'and &DC_REQUEST_LOGS ne NO';
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 '/* sleep random amount to avoid parallel update attempts */';
put 'call sleep(ranuni(0)*0.1,1);';
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 '/* turn off with dsoptions=nonote2err */';
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 '/* extracted in dc_getsettings */';
put 'dc_activation_key';
put 'dc_licence_key';
put 'dc_locale';
put 'dc_request_logs';
put 'dc_restrict_viewer';
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 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */';
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 'and &DC_REQUEST_LOGS ne NO';
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 '/* sleep random amount to avoid parallel update attempts */';
put 'call sleep(ranuni(0)*0.1,1);';
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=411.26896d93e056dcb9.js;
filename filecode temp lrecl=427440;
data _null_;
file filecode;
put 'KCgpPT57InVzZSBzdHJpY3QiO3ZhciBEcj0xMjAwLFJ0PTEyNTIsRGM9Wzg3NCw5MzIsOTM2LDk0OSw5NTAsMTI1MCwxMjUxLDEyNTIsMTI1MywxMjU0LDEyNTUsMTI1NiwxMjU3LDEyNTgsMWU0XSxMMD17MDoxMjUyLDE6NjUwMDEsMjo2NTAwMSw3NzoxZTQsMTI4OjkzMiwxMjk6OTQ5LDEz'@;
put 'MDoxMzYxLDEzNDo5MzYsMTM2Ojk1MCwxNjE6MTI1MywxNjI6MTI1NCwxNjM6MTI1OCwxNzc6MTI1NSwxNzg6MTI1NiwxODY6MTI1NywyMDQ6MTI1MSwyMjI6ODc0LDIzODoxMjUwLDI1NToxMjUyLDY5OjY5Njl9LGUwPWZ1bmN0aW9uKGUpey0xIT1EYy5pbmRleE9mKGUpJiYoUnQ9TDBbMF09'@;
put 'ZSl9LE1yPWZ1bmN0aW9uKGUpe0RyPWUsZTAoZSl9O2Z1bmN0aW9uIHIwKCl7TXIoMTIwMCksZnVuY3Rpb24gT2MoKXtlMCgxMjUyKX0oKX1mdW5jdGlvbiB0MChlKXtmb3IodmFyIHQ9W10scj0wLGE9ZS5sZW5ndGg7cjxhOysrcil0W3JdPWUuY2hhckNvZGVBdChyKTtyZXR1cm4gdH1mdW5j'@;
put 'dGlvbiBhaShlKXtmb3IodmFyIHQ9W10scj0wO3I8ZS5sZW5ndGg+PjE7KytyKXRbcl09U3RyaW5nLmZyb21DaGFyQ29kZShlLmNoYXJDb2RlQXQoMipyKzEpKyhlLmNoYXJDb2RlQXQoMipyKTw8OCkpO3JldHVybiB0LmpvaW4oIiIpfXZhciBPZSxRdD1mdW5jdGlvbihlKXt2YXIgdD1lLmNo'@;
put 'YXJDb2RlQXQoMCkscj1lLmNoYXJDb2RlQXQoMSk7cmV0dXJuIDI1NT09dCYmMjU0PT1yP2Z1bmN0aW9uIEljKGUpe2Zvcih2YXIgdD1bXSxyPTA7cjxlLmxlbmd0aD4+MTsrK3IpdFtyXT1TdHJpbmcuZnJvbUNoYXJDb2RlKGUuY2hhckNvZGVBdCgyKnIpKyhlLmNoYXJDb2RlQXQoMipyKzEp'@;
put 'PDw4KSk7cmV0dXJuIHQuam9pbigiIil9KGUuc2xpY2UoMikpOjI1ND09dCYmMjU1PT1yP2FpKGUuc2xpY2UoMikpOjY1Mjc5PT10P2Uuc2xpY2UoMSk6ZX0scGE9ZnVuY3Rpb24odCl7cmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUodCl9LEIwPWZ1bmN0aW9uKHQpe3JldHVybiBTdHJpbmcu'@;
put 'ZnJvbUNoYXJDb2RlKHQpfSx6ZT1udWxsLGd0PSJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvPSI7ZnVuY3Rpb24gZ2EoZSl7Zm9yKHZhciB0PSIiLHI9MCxhPTAsbj0wLGk9MCxzPTAsZj0wLGM9MCxvPTA7bzxlLmxlbmd0'@;
put 'aDspaT0ocj1lLmNoYXJDb2RlQXQobysrKSk+PjIscz0oMyZyKTw8NHwoYT1lLmNoYXJDb2RlQXQobysrKSk+PjQsZj0oMTUmYSk8PDJ8KG49ZS5jaGFyQ29kZUF0KG8rKykpPj42LGM9NjMmbixpc05hTihhKT9mPWM9NjQ6aXNOYU4obikmJihjPTY0KSx0Kz1ndC5jaGFyQXQoaSkrZ3QuY2hh'@;
put 'ckF0KHMpK2d0LmNoYXJBdChmKStndC5jaGFyQXQoYyk7cmV0dXJuIHR9ZnVuY3Rpb24gT3IoZSl7dmFyIHQ9IiIsaT0wLHM9MCxmPTAsYz0wO2U9ZS5yZXBsYWNlKC9bXlx3XCtcL1w9XS9nLCIiKTtmb3IodmFyIG89MDtvPGUubGVuZ3RoOylpPWd0LmluZGV4T2YoZS5jaGFyQXQobysrKSks'@;
put 'cz1ndC5pbmRleE9mKGUuY2hhckF0KG8rKykpLHQrPVN0cmluZy5mcm9tQ2hhckNvZGUoaTw8MnxzPj40KSw2NCE9PShmPWd0LmluZGV4T2YoZS5jaGFyQXQobysrKSkpJiYodCs9U3RyaW5nLmZyb21DaGFyQ29kZSgoMTUmcyk8PDR8Zj4+MikpLDY0IT09KGM9Z3QuaW5kZXhPZihlLmNoYXJB'@;
put 'dChvKyspKSkmJih0Kz1TdHJpbmcuZnJvbUNoYXJDb2RlKCgzJmYpPDw2fGMpKTtyZXR1cm4gdH12YXIgU2U9ZnVuY3Rpb24oKXtyZXR1cm4gdHlwZW9mIEJ1ZmZlcjwidSImJnR5cGVvZiBwcm9jZXNzPCJ1IiYmdHlwZW9mIHByb2Nlc3MudmVyc2lvbnM8InUiJiYhIXByb2Nlc3MudmVyc2lv'@;
put 'bnMubm9kZX0oKSxvdD1mdW5jdGlvbigpe2lmKHR5cGVvZiBCdWZmZXI8InUiKXt2YXIgZT0hQnVmZmVyLmZyb207aWYoIWUpdHJ5e0J1ZmZlci5mcm9tKCJmb28iLCJ1dGY4Iil9Y2F0Y2h7ZT0hMH1yZXR1cm4gZT9mdW5jdGlvbih0LHIpe3JldHVybiByP25ldyBCdWZmZXIodCxyKTpuZXcg'@;
put 'QnVmZmVyKHQpfTpCdWZmZXIuZnJvbS5iaW5kKEJ1ZmZlcil9cmV0dXJuIGZ1bmN0aW9uKCl7fX0oKTtmdW5jdGlvbiBfdChlKXtyZXR1cm4gU2U/QnVmZmVyLmFsbG9jP0J1ZmZlci5hbGxvYyhlKTpuZXcgQnVmZmVyKGUpOnR5cGVvZiBVaW50OEFycmF5PCJ1Ij9uZXcgVWludDhBcnJheShl'@;
put 'KTpuZXcgQXJyYXkoZSl9ZnVuY3Rpb24gbmkoZSl7cmV0dXJuIFNlP0J1ZmZlci5hbGxvY1Vuc2FmZT9CdWZmZXIuYWxsb2NVbnNhZmUoZSk6bmV3IEJ1ZmZlcihlKTp0eXBlb2YgVWludDhBcnJheTwidSI/bmV3IFVpbnQ4QXJyYXkoZSk6bmV3IEFycmF5KGUpfXZhciBJcj1mdW5jdGlvbih0'@;
put 'KXtyZXR1cm4gU2U/b3QodCwiYmluYXJ5Iik6dC5zcGxpdCgiIikubWFwKGZ1bmN0aW9uKHIpe3JldHVybiAyNTUmci5jaGFyQ29kZUF0KDApfSl9O2Z1bmN0aW9uIHd0KGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIGUubWFwKGZ1bmN0aW9uKGEpe3JldHVybiBTdHJpbmcuZnJvbUNo'@;
put 'YXJDb2RlKGEpfSkuam9pbigiIik7Zm9yKHZhciB0PVtdLHI9MDtyPGUubGVuZ3RoOysrcil0W3JdPVN0cmluZy5mcm9tQ2hhckNvZGUoZVtyXSk7cmV0dXJuIHQuam9pbigiIil9ZnVuY3Rpb24gTTAoZSl7aWYodHlwZW9mIEFycmF5QnVmZmVyPiJ1Iil0aHJvdyBuZXcgRXJyb3IoIlVuc3Vw'@;
put 'cG9ydGVkIik7aWYoZSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKXJldHVybiBNMChuZXcgVWludDhBcnJheShlKSk7Zm9yKHZhciB0PW5ldyBBcnJheShlLmxlbmd0aCkscj0wO3I8ZS5sZW5ndGg7KytyKXRbcl09ZVtyXTtyZXR1cm4gdH12YXIgZnI9U2U/ZnVuY3Rpb24oZSl7cmV0dXJuIEJ1'@;
put 'ZmZlci5jb25jYXQoZS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIEJ1ZmZlci5pc0J1ZmZlcih0KT90Om90KHQpfSkpfTpmdW5jdGlvbihlKXtpZih0eXBlb2YgVWludDhBcnJheTwidSIpe3ZhciB0PTAscj0wO2Zvcih0PTA7dDxlLmxlbmd0aDsrK3Qpcis9ZVt0XS5sZW5ndGg7dmFyIGE9bmV3'@;
put 'IFVpbnQ4QXJyYXkociksbj0wO2Zvcih0PTAscj0wO3Q8ZS5sZW5ndGg7cis9biwrK3QpaWYobj1lW3RdLmxlbmd0aCxlW3RdaW5zdGFuY2VvZiBVaW50OEFycmF5KWEuc2V0KGVbdF0scik7ZWxzZXtpZigic3RyaW5nIj09dHlwZW9mIGVbdF0pdGhyb3cid3RmIjthLnNldChuZXcgVWludDhB'@;
put 'cnJheShlW3RdKSxyKX1yZXR1cm4gYX1yZXR1cm5bXS5jb25jYXQuYXBwbHkoW10sZS5tYXAoZnVuY3Rpb24oaSl7cmV0dXJuIEFycmF5LmlzQXJyYXkoaSk/aTpbXS5zbGljZS5jYWxsKGkpfSkpfSxkcj0vXHUwMDAwL2csd2E9L1tcdTAwMDEtXHUwMDA2XS9nO2Z1bmN0aW9uIGVhKGUpe2Zv'@;
put 'cih2YXIgdD0iIixyPWUubGVuZ3RoLTE7cj49MDspdCs9ZS5jaGFyQXQoci0tKTtyZXR1cm4gdH1mdW5jdGlvbiBZcihlLHQpe3ZhciByPSIiK2U7cmV0dXJuIHIubGVuZ3RoPj10P3I6amUoIjAiLHQtci5sZW5ndGgpK3J9ZnVuY3Rpb24gVTAoZSx0KXt2YXIgcj0iIitlO3JldHVybiByLmxl'@;
put 'bmd0aD49dD9yOmplKCIgIix0LXIubGVuZ3RoKStyfWZ1bmN0aW9uIGEwKGUsdCl7dmFyIHI9IiIrZTtyZXR1cm4gci5sZW5ndGg+PXQ/cjpyK2plKCIgIix0LXIubGVuZ3RoKX12YXIgaWk9TWF0aC5wb3coMiwzMik7ZnVuY3Rpb24gcmEoZSx0KXtyZXR1cm4gZT5paXx8ZTwtaWk/ZnVuY3Rp'@;
put 'b24gYmMoZSx0KXt2YXIgcj0iIitNYXRoLnJvdW5kKGUpO3JldHVybiByLmxlbmd0aD49dD9yOmplKCIwIix0LXIubGVuZ3RoKStyfShlLHQpOmZ1bmN0aW9uIFBjKGUsdCl7dmFyIHI9IiIrZTtyZXR1cm4gci5sZW5ndGg+PXQ/cjpqZSgiMCIsdC1yLmxlbmd0aCkrcn0oTWF0aC5yb3VuZChl'@;
put 'KSx0KX1mdW5jdGlvbiBuMChlLHQpe3JldHVybiBlLmxlbmd0aD49NysodD10fHwwKSYmMTAzPT0oMzJ8ZS5jaGFyQ29kZUF0KHQpKSYmMTAxPT0oMzJ8ZS5jaGFyQ29kZUF0KHQrMSkpJiYxMTA9PSgzMnxlLmNoYXJDb2RlQXQodCsyKSkmJjEwMT09KDMyfGUuY2hhckNvZGVBdCh0KzMpKSYm'@;
put 'MTE0PT0oMzJ8ZS5jaGFyQ29kZUF0KHQrNCkpJiY5Nz09KDMyfGUuY2hhckNvZGVBdCh0KzUpKSYmMTA4PT0oMzJ8ZS5jaGFyQ29kZUF0KHQrNikpfXZhciBzaT1bWyJTdW4iLCJTdW5kYXkiXSxbIk1vbiIsIk1vbmRheSJdLFsiVHVlIiwiVHVlc2RheSJdLFsiV2VkIiwiV2VkbmVzZGF5Il0s'@;
put 'WyJUaHUiLCJUaHVyc2RheSJdLFsiRnJpIiwiRnJpZGF5Il0sWyJTYXQiLCJTYXR1cmRheSJdXSxXMD1bWyJKIiwiSmFuIiwiSmFudWFyeSJdLFsiRiIsIkZlYiIsIkZlYnJ1YXJ5Il0sWyJNIiwiTWFyIiwiTWFyY2giXSxbIkEiLCJBcHIiLCJBcHJpbCJdLFsiTSIsIk1heSIsIk1heSJdLFsi'@;
put 'SiIsIkp1biIsIkp1bmUiXSxbIkoiLCJKdWwiLCJKdWx5Il0sWyJBIiwiQXVnIiwiQXVndXN0Il0sWyJTIiwiU2VwIiwiU2VwdGVtYmVyIl0sWyJPIiwiT2N0IiwiT2N0b2JlciJdLFsiTiIsIk5vdiIsIk5vdmVtYmVyIl0sWyJEIiwiRGVjIiwiRGVjZW1iZXIiXV0scGU9ezA6IkdlbmVyYWwi'@;
put 'LDE6IjAiLDI6IjAuMDAiLDM6IiMsIyMwIiw0OiIjLCMjMC4wMCIsOToiMCUiLDEwOiIwLjAwJSIsMTE6IjAuMDBFKzAwIiwxMjoiIyA/Lz8iLDEzOiIjID8/Lz8/IiwxNDoibS9kL3l5IiwxNToiZC1tbW0teXkiLDE2OiJkLW1tbSIsMTc6Im1tbS15eSIsMTg6Img6bW0gQU0vUE0iLDE5OiJo'@;
put 'Om1tOnNzIEFNL1BNIiwyMDoiaDptbSIsMjE6Img6bW06c3MiLDIyOiJtL2QveXkgaDptbSIsMzc6IiMsIyMwIDsoIywjIzApIiwzODoiIywjIzAgO1tSZWRdKCMsIyMwKSIsMzk6IiMsIyMwLjAwOygjLCMjMC4wMCkiLDQwOiIjLCMjMC4wMDtbUmVkXSgjLCMjMC4wMCkiLDQ1OiJtbTpzcyIs'@;
put 'NDY6IltoXTptbTpzcyIsNDc6Im1tc3MuMCIsNDg6IiMjMC4wRSswIiw0OToiQCIsNTY6JyJcdTRlMGFcdTUzNDgvXHU0ZTBiXHU1MzQ4ICJoaCJcdTY2NDIibW0iXHU1MjA2InNzIlx1NzlkMiAiJ30sZmk9ezU6MzcsNjozOCw3OjM5LDg6NDAsMjM6MCwyNDowLDI1OjAsMjY6MCwyNzoxNCwy'@;
put 'ODoxNCwyOToxNCwzMDoxNCwzMToxNCw1MDoxNCw1MToxNCw1MjoxNCw1MzoxNCw1NDoxNCw1NToxNCw1NjoxNCw1NzoxNCw1ODoxNCw1OToxLDYwOjIsNjE6Myw2Mjo0LDY3OjksNjg6MTAsNjk6MTIsNzA6MTMsNzE6MTQsNzI6MTQsNzM6MTUsNzQ6MTYsNzU6MTcsNzY6MjAsNzc6MjEsNzg6'@;
put 'MjIsNzk6NDUsODA6NDYsODE6NDcsODI6MH0sQmM9ezU6JyIkIiMsIyMwXyk7XFwoIiQiIywjIzBcXCknLDYzOiciJCIjLCMjMF8pO1xcKCIkIiMsIyMwXFwpJyw2OiciJCIjLCMjMF8pO1tSZWRdXFwoIiQiIywjIzBcXCknLDY0OiciJCIjLCMjMF8pO1tSZWRdXFwoIiQiIywjIzBcXCknLDc6'@;
put 'JyIkIiMsIyMwLjAwXyk7XFwoIiQiIywjIzAuMDBcXCknLDY1OiciJCIjLCMjMC4wMF8pO1xcKCIkIiMsIyMwLjAwXFwpJyw4OiciJCIjLCMjMC4wMF8pO1tSZWRdXFwoIiQiIywjIzAuMDBcXCknLDY2OiciJCIjLCMjMC4wMF8pO1tSZWRdXFwoIiQiIywjIzAuMDBcXCknLDQxOidfKCogIywj'@;
put 'IzBfKTtfKCogXFwoIywjIzBcXCk7XygqICItIl8pO18oQF8pJyw0MjonXygiJCIqICMsIyMwXyk7XygiJCIqIFxcKCMsIyMwXFwpO18oIiQiKiAiLSJfKTtfKEBfKScsNDM6J18oKiAjLCMjMC4wMF8pO18oKiBcXCgjLCMjMC4wMFxcKTtfKCogIi0iPz9fKTtfKEBfKScsNDQ6J18oIiQiKiAj'@;
put 'LCMjMC4wMF8pO18oIiQiKiBcXCgjLCMjMC4wMFxcKTtfKCIkIiogIi0iPz9fKTtfKEBfKSd9O2Z1bmN0aW9uIGkwKGUsdCxyKXtmb3IodmFyIGE9ZTwwPy0xOjEsbj1lKmEsaT0wLHM9MSxmPTAsYz0xLG89MCxsPTAsaD1NYXRoLmZsb29yKG4pO288dCYmKGY9KGg9TWF0aC5mbG9vcihuKSkq'@;
put 'cytpLGw9aCpvK2MsIShuLWg8NWUtOCkpOyluPTEvKG4taCksaT1zLHM9ZixjPW8sbz1sO2lmKGw+dCYmKG8+dD8obD1jLGY9aSk6KGw9byxmPXMpKSwhcilyZXR1cm5bMCxhKmYsbF07dmFyIHg9TWF0aC5mbG9vcihhKmYvbCk7cmV0dXJuW3gsYSpmLXgqbCxsXX1mdW5jdGlvbiBrdChlLHQs'@;
put 'cil7aWYoZT4yOTU4NDY1fHxlPDApcmV0dXJuIG51bGw7dmFyIGE9MHxlLG49TWF0aC5mbG9vcig4NjQwMCooZS1hKSksaT0wLHM9W10sZj17RDphLFQ6bix1Ojg2NDAwKihlLWEpLW4seTowLG06MCxkOjAsSDowLE06MCxTOjAscTowfTtpZihNYXRoLmFicyhmLnUpPDFlLTYmJihmLnU9MCks'@;
put 'dCYmdC5kYXRlMTkwNCYmKGErPTE0NjIpLGYudT4uOTk5OSYmKGYudT0wLDg2NDAwPT0rK24mJihmLlQ9bj0wLCsrYSwrK2YuRCkpLDYwPT09YSlzPXI/WzEzMTcsMTAsMjldOlsxOTAwLDIsMjldLGk9MztlbHNlIGlmKDA9PT1hKXM9cj9bMTMxNyw4LDI5XTpbMTkwMCwxLDBdLGk9NjtlbHNl'@;
put 'e2E+NjAmJi0tYTt2YXIgYz1uZXcgRGF0ZSgxOTAwLDAsMSk7Yy5zZXREYXRlKGMuZ2V0RGF0ZSgpK2EtMSkscz1bYy5nZXRGdWxsWWVhcigpLGMuZ2V0TW9udGgoKSsxLGMuZ2V0RGF0ZSgpXSxpPWMuZ2V0RGF5KCksYTw2MCYmKGk9KGkrNiklNyksciYmKGk9ZnVuY3Rpb24gWGMoZSx0KXt0'@;
put 'WzBdLT01ODE7dmFyIHI9ZS5nZXREYXkoKTtyZXR1cm4gZTw2MCYmKHI9KHIrNiklNykscn0oYyxzKSl9cmV0dXJuIGYueT1zWzBdLGYubT1zWzFdLGYuZD1zWzJdLGYuUz1uJTYwLG49TWF0aC5mbG9vcihuLzYwKSxmLk09biU2MCxuPU1hdGguZmxvb3Iobi82MCksZi5IPW4sZi5xPWksZn12'@;
put 'YXIgY2k9bmV3IERhdGUoMTg5OSwxMSwzMSwwLDAsMCksTWM9Y2kuZ2V0VGltZSgpLFVjPW5ldyBEYXRlKDE5MDAsMiwxLDAsMCwwKTtmdW5jdGlvbiBvaShlLHQpe3ZhciByPWUuZ2V0VGltZSgpO3JldHVybiB0P3ItPTEyNjIzMDRlNTplPj1VYyYmKHIrPTg2NGU1KSwoci0oTWMrNmU0Kihl'@;
put 'LmdldFRpbWV6b25lT2Zmc2V0KCktY2kuZ2V0VGltZXpvbmVPZmZzZXQoKSkpKS84NjRlNX1mdW5jdGlvbiBIMChlKXtyZXR1cm4tMT09ZS5pbmRleE9mKCIuIik/ZTplLnJlcGxhY2UoLyg/OlwuMCp8KFwuXGQqWzEtOV0pMCspJC8sIiQxIil9ZnVuY3Rpb24ga2EoZSl7dmFyIHIsdD1NYXRo'@;
put 'LmZsb29yKE1hdGgubG9nKE1hdGguYWJzKGUpKSpNYXRoLkxPRzEwRSk7cmV0dXJuIHI9dD49LTQmJnQ8PS0xP2UudG9QcmVjaXNpb24oMTArdCk6TWF0aC5hYnModCk8PTk/ZnVuY3Rpb24gSGMoZSl7dmFyIHQ9ZTwwPzEyOjExLHI9SDAoZS50b0ZpeGVkKDEyKSk7cmV0dXJuIHIubGVuZ3Ro'@;
put 'PD10fHwocj1lLnRvUHJlY2lzaW9uKDEwKSkubGVuZ3RoPD10P3I6ZS50b0V4cG9uZW50aWFsKDUpfShlKToxMD09PXQ/ZS50b0ZpeGVkKDEwKS5zdWJzdHIoMCwxMik6ZnVuY3Rpb24gVmMoZSl7dmFyIHQ9SDAoZS50b0ZpeGVkKDExKSk7cmV0dXJuIHQubGVuZ3RoPihlPDA/MTI6MTEpfHwi'@;
put 'MCI9PT10fHwiLTAiPT09dD9lLnRvUHJlY2lzaW9uKDYpOnR9KGUpLEgwKGZ1bmN0aW9uIFdjKGUpe3JldHVybi0xPT1lLmluZGV4T2YoIkUiKT9lOmUucmVwbGFjZSgvKD86XC4wKnwoXC5cZCpbMS05XSkwKylbRWVdLywiJDFFIikucmVwbGFjZSgvKEVbKy1dKShcZCkkLywiJDEwJDIiKX0o'@;
put 'ci50b1VwcGVyQ2FzZSgpKSl9ZnVuY3Rpb24gTnQoZSx0KXtzd2l0Y2godHlwZW9mIGUpe2Nhc2Uic3RyaW5nIjpyZXR1cm4gZTtjYXNlImJvb2xlYW4iOnJldHVybiBlPyJUUlVFIjoiRkFMU0UiO2Nhc2UibnVtYmVyIjpyZXR1cm4oMHxlKT09PWU/ZS50b1N0cmluZygxMCk6a2EoZSk7Y2Fz'@;
put 'ZSJ1bmRlZmluZWQiOnJldHVybiIiO2Nhc2Uib2JqZWN0IjppZihudWxsPT1lKXJldHVybiIiO2lmKGUgaW5zdGFuY2VvZiBEYXRlKXJldHVybiBScigxNCxvaShlLHQmJnQuZGF0ZTE5MDQpLHQpfXRocm93IG5ldyBFcnJvcigidW5zdXBwb3J0ZWQgdmFsdWUgaW4gR2VuZXJhbCBmb3JtYXQ6'@;
put 'ICIrZSl9ZnVuY3Rpb24gR2MoZSx0LHIsYSl7dmFyIGMsbj0iIixpPTAscz0wLGY9ci55LG89MDtzd2l0Y2goZSl7Y2FzZSA5ODpmPXIueSs1NDM7Y2FzZSAxMjE6c3dpdGNoKHQubGVuZ3RoKXtjYXNlIDE6Y2FzZSAyOmM9ZiUxMDAsbz0yO2JyZWFrO2RlZmF1bHQ6Yz1mJTFlNCxvPTR9YnJl'@;
put 'YWs7Y2FzZSAxMDk6c3dpdGNoKHQubGVuZ3RoKXtjYXNlIDE6Y2FzZSAyOmM9ci5tLG89dC5sZW5ndGg7YnJlYWs7Y2FzZSAzOnJldHVybiBXMFtyLm0tMV1bMV07Y2FzZSA1OnJldHVybiBXMFtyLm0tMV1bMF07ZGVmYXVsdDpyZXR1cm4gVzBbci5tLTFdWzJdfWJyZWFrO2Nhc2UgMTAwOnN3'@;
put 'aXRjaCh0Lmxlbmd0aCl7Y2FzZSAxOmNhc2UgMjpjPXIuZCxvPXQubGVuZ3RoO2JyZWFrO2Nhc2UgMzpyZXR1cm4gc2lbci5xXVswXTtkZWZhdWx0OnJldHVybiBzaVtyLnFdWzFdfWJyZWFrO2Nhc2UgMTA0OnN3aXRjaCh0Lmxlbmd0aCl7Y2FzZSAxOmNhc2UgMjpjPTErKHIuSCsxMSklMTIs'@;
put 'bz10Lmxlbmd0aDticmVhaztkZWZhdWx0OnRocm93ImJhZCBob3VyIGZvcm1hdDogIit0fWJyZWFrO2Nhc2UgNzI6c3dpdGNoKHQubGVuZ3RoKXtjYXNlIDE6Y2FzZSAyOmM9ci5ILG89dC5sZW5ndGg7YnJlYWs7ZGVmYXVsdDp0aHJvdyJiYWQgaG91ciBmb3JtYXQ6ICIrdH1icmVhaztjYXNl'@;
put 'IDc3OnN3aXRjaCh0Lmxlbmd0aCl7Y2FzZSAxOmNhc2UgMjpjPXIuTSxvPXQubGVuZ3RoO2JyZWFrO2RlZmF1bHQ6dGhyb3ciYmFkIG1pbnV0ZSBmb3JtYXQ6ICIrdH1icmVhaztjYXNlIDExNTppZigicyIhPXQmJiJzcyIhPXQmJiIuMCIhPXQmJiIuMDAiIT10JiYiLjAwMCIhPXQpdGhyb3ci'@;
put 'YmFkIHNlY29uZCBmb3JtYXQ6ICIrdDtyZXR1cm4gMCE9PXIudXx8InMiIT10JiYic3MiIT10PyhzPWE+PTI/Mz09PWE/MWUzOjEwMDoxPT09YT8xMDoxLChpPU1hdGgucm91bmQocyooci5TK3IudSkpKT49NjAqcyYmKGk9MCksInMiPT09dD8wPT09aT8iMCI6IiIraS9zOihuPVlyKGksMith'@;
put 'KSwic3MiPT09dD9uLnN1YnN0cigwLDIpOiIuIituLnN1YnN0cigyLHQubGVuZ3RoLTEpKSk6WXIoci5TLHQubGVuZ3RoKTtjYXNlIDkwOnN3aXRjaCh0KXtjYXNlIltoXSI6Y2FzZSJbaGhdIjpjPTI0KnIuRCtyLkg7YnJlYWs7Y2FzZSJbbV0iOmNhc2UiW21tXSI6Yz02MCooMjQqci5EK3Iu'@;
put 'SCkrci5NO2JyZWFrO2Nhc2UiW3NdIjpjYXNlIltzc10iOmM9NjAqKDYwKigyNCpyLkQrci5IKStyLk0pK01hdGgucm91bmQoci5TK3IudSk7YnJlYWs7ZGVmYXVsdDp0aHJvdyJiYWQgYWJzdGltZSBmb3JtYXQ6ICIrdH1vPTM9PT10Lmxlbmd0aD8xOjI7YnJlYWs7Y2FzZSAxMDE6Yz1mLG89'@;
put 'MX1yZXR1cm4gbz4wP1lyKGMsbyk6IiJ9ZnVuY3Rpb24gRXQoZSl7aWYoZS5sZW5ndGg8PTMpcmV0dXJuIGU7Zm9yKHZhciByPWUubGVuZ3RoJTMsYT1lLnN1YnN0cigwLHIpO3IhPWUubGVuZ3RoO3IrPTMpYSs9KGEubGVuZ3RoPjA/IiwiOiIiKStlLnN1YnN0cihyLDMpO3JldHVybiBhfXZh'@;
put 'ciBsaT0vJS9nO2Z1bmN0aW9uIHVpKGUsdCl7dmFyIHIsYT1lLmluZGV4T2YoIkUiKS1lLmluZGV4T2YoIi4iKS0xO2lmKGUubWF0Y2goL14jKzAuMEVcKzAkLykpe2lmKDA9PXQpcmV0dXJuIjAuMEUrMCI7aWYodDwwKXJldHVybiItIit1aShlLC10KTt2YXIgbj1lLmluZGV4T2YoIi4iKTst'@;
put 'MT09PW4mJihuPWUuaW5kZXhPZigiRSIpKTt2YXIgaT1NYXRoLmZsb29yKE1hdGgubG9nKHQpKk1hdGguTE9HMTBFKSVuO2lmKGk8MCYmKGkrPW4pLC0xPT09KHI9KHQvTWF0aC5wb3coMTAsaSkpLnRvUHJlY2lzaW9uKGErMSsobitpKSVuKSkuaW5kZXhPZigiZSIpKXt2YXIgcz1NYXRoLmZs'@;
put 'b29yKE1hdGgubG9nKHQpKk1hdGguTE9HMTBFKTtmb3IoLTE9PT1yLmluZGV4T2YoIi4iKT9yPXIuY2hhckF0KDApKyIuIityLnN1YnN0cigxKSsiRSsiKyhzLXIubGVuZ3RoK2kpOnIrPSJFKyIrKHMtaSk7IjAuIj09PXIuc3Vic3RyKDAsMik7KXI9KHI9ci5jaGFyQXQoMCkrci5zdWJzdHIo'@;
put 'MixuKSsiLiIrci5zdWJzdHIoMituKSkucmVwbGFjZSgvXjArKFsxLTldKS8sIiQxIikucmVwbGFjZSgvXjArXC4vLCIwLiIpO3I9ci5yZXBsYWNlKC9cKy0vLCItIil9cj1yLnJlcGxhY2UoL14oWystXT8pKFxkKilcLihcZCopW0VlXS8sZnVuY3Rpb24oZixjLG8sbCl7cmV0dXJuIGMrbyts'@;
put 'LnN1YnN0cigwLChuK2kpJW4pKyIuIitsLnN1YnN0cihpKSsiRSJ9KX1lbHNlIHI9dC50b0V4cG9uZW50aWFsKGEpO3JldHVybiBlLm1hdGNoKC9FXCswMCQvKSYmci5tYXRjaCgvZVsrLV1cZCQvKSYmKHI9ci5zdWJzdHIoMCxyLmxlbmd0aC0xKSsiMCIrci5jaGFyQXQoci5sZW5ndGgtMSkp'@;
put 'LGUubWF0Y2goL0VcLS8pJiZyLm1hdGNoKC9lXCsvKSYmKHI9ci5yZXBsYWNlKC9lXCsvLCJlIikpLHIucmVwbGFjZSgiZSIsIkUiKX12YXIgaGk9LyMgKFw/KykoID8pXC8oID8pKFxkKykvLHhpPS9eIyowKlwuKFswI10rKS8sZGk9L1wpLipbMCNdLyx2aT0vXCgjIyNcKSAjIyNcXD8tIyMj'@;
put 'Iy87ZnVuY3Rpb24gVHIoZSl7Zm9yKHZhciByLHQ9IiIsYT0wO2EhPWUubGVuZ3RoOysrYSlzd2l0Y2gocj1lLmNoYXJDb2RlQXQoYSkpe2Nhc2UgMzU6YnJlYWs7Y2FzZSA2Mzp0Kz0iICI7YnJlYWs7Y2FzZSA0ODp0Kz0iMCI7YnJlYWs7ZGVmYXVsdDp0Kz1TdHJpbmcuZnJvbUNoYXJDb2Rl'@;
put 'KHIpfXJldHVybiB0fWZ1bmN0aW9uIHBpKGUsdCl7dmFyIHI9TWF0aC5wb3coMTAsdCk7cmV0dXJuIiIrTWF0aC5yb3VuZChlKnIpL3J9ZnVuY3Rpb24gbWkoZSx0KXt2YXIgcj1lLU1hdGguZmxvb3IoZSksYT1NYXRoLnBvdygxMCx0KTtyZXR1cm4gdDwoIiIrTWF0aC5yb3VuZChyKmEpKS5s'@;
put 'ZW5ndGg/MDpNYXRoLnJvdW5kKHIqYSl9ZnVuY3Rpb24gVXIoZSx0LHIpe2lmKDQwPT09ZS5jaGFyQ29kZUF0KDApJiYhdC5tYXRjaChkaSkpe3ZhciBhPXQucmVwbGFjZSgvXCggKi8sIiIpLnJlcGxhY2UoLyBcKS8sIiIpLnJlcGxhY2UoL1wpLywiIik7cmV0dXJuIHI+PTA/VXIoIm4iLGEs'@;
put 'cik6IigiK1VyKCJuIixhLC1yKSsiKSJ9aWYoNDQ9PT10LmNoYXJDb2RlQXQodC5sZW5ndGgtMSkpcmV0dXJuIGZ1bmN0aW9uICRjKGUsdCxyKXtmb3IodmFyIGE9dC5sZW5ndGgtMTs0ND09PXQuY2hhckNvZGVBdChhLTEpOyktLWE7cmV0dXJuIGx0KGUsdC5zdWJzdHIoMCxhKSxyL01hdGgu'@;
put 'cG93KDEwLDMqKHQubGVuZ3RoLWEpKSl9KGUsdCxyKTtpZigtMSE9PXQuaW5kZXhPZigiJSIpKXJldHVybiBmdW5jdGlvbiB6YyhlLHQscil7dmFyIGE9dC5yZXBsYWNlKGxpLCIiKSxuPXQubGVuZ3RoLWEubGVuZ3RoO3JldHVybiBsdChlLGEscipNYXRoLnBvdygxMCwyKm4pKStqZSgiJSIs'@;
put 'bil9KGUsdCxyKTtpZigtMSE9PXQuaW5kZXhPZigiRSIpKXJldHVybiB1aSh0LHIpO2lmKDM2PT09dC5jaGFyQ29kZUF0KDApKXJldHVybiIkIitVcihlLHQuc3Vic3RyKCIgIj09dC5jaGFyQXQoMSk/MjoxKSxyKTt2YXIgbixpLHMsZixjPU1hdGguYWJzKHIpLG89cjwwPyItIjoiIjtpZih0'@;
put 'Lm1hdGNoKC9eMDArJC8pKXJldHVybiBvK3JhKGMsdC5sZW5ndGgpO2lmKHQubWF0Y2goL15bIz9dKyQvKSlyZXR1cm4iMCI9PT0obj1yYShyLDApKSYmKG49IiIpLG4ubGVuZ3RoPnQubGVuZ3RoP246VHIodC5zdWJzdHIoMCx0Lmxlbmd0aC1uLmxlbmd0aCkpK247aWYoaT10Lm1hdGNoKGhp'@;
put 'KSlyZXR1cm4gZnVuY3Rpb24gamMoZSx0LHIpe3ZhciBhPXBhcnNlSW50KGVbNF0sMTApLG49TWF0aC5yb3VuZCh0KmEpLGk9TWF0aC5mbG9vcihuL2EpLHM9bi1pKmEsZj1hO3JldHVybiByKygwPT09aT8iIjoiIitpKSsiICIrKDA9PT1zP2plKCIgIixlWzFdLmxlbmd0aCsxK2VbNF0ubGVu'@;
put 'Z3RoKTpVMChzLGVbMV0ubGVuZ3RoKStlWzJdKyIvIitlWzNdK1lyKGYsZVs0XS5sZW5ndGgpKX0oaSxjLG8pO2lmKHQubWF0Y2goL14jKzArJC8pKXJldHVybiBvK3JhKGMsdC5sZW5ndGgtdC5pbmRleE9mKCIwIikpO2lmKGk9dC5tYXRjaCh4aSkpcmV0dXJuIG49cGkocixpWzFdLmxlbmd0'@;
put 'aCkucmVwbGFjZSgvXihbXlwuXSspJC8sIiQxLiIrVHIoaVsxXSkpLnJlcGxhY2UoL1wuJC8sIi4iK1RyKGlbMV0pKS5yZXBsYWNlKC9cLihcZCopJC8sZnVuY3Rpb24odix1KXtyZXR1cm4iLiIrdStqZSgiMCIsVHIoaVsxXSkubGVuZ3RoLXUubGVuZ3RoKX0pLC0xIT09dC5pbmRleE9mKCIw'@;
put 'LiIpP246bi5yZXBsYWNlKC9eMFwuLywiLiIpO2lmKHQ9dC5yZXBsYWNlKC9eIysoWzAuXSkvLCIkMSIpLGk9dC5tYXRjaCgvXigwKilcLigjKikkLykpcmV0dXJuIG8rcGkoYyxpWzJdLmxlbmd0aCkucmVwbGFjZSgvXC4oXGQqWzEtOV0pMCokLywiLiQxIikucmVwbGFjZSgvXigtP1xkKikk'@;
put 'LywiJDEuIikucmVwbGFjZSgvXjBcLi8saVsxXS5sZW5ndGg/IjAuIjoiLiIpO2lmKGk9dC5tYXRjaCgvXiN7MSwzfSwjIzAoXC4/KSQvKSlyZXR1cm4gbytFdChyYShjLDApKTtpZihpPXQubWF0Y2goL14jLCMjMFwuKFsjMF0qMCkkLykpcmV0dXJuIHI8MD8iLSIrVXIoZSx0LC1yKTpFdCgi'@;
put 'IisoTWF0aC5mbG9vcihyKStmdW5jdGlvbiBZYyhlLHQpe3JldHVybiB0PCgiIitNYXRoLnJvdW5kKChlLU1hdGguZmxvb3IoZSkpKk1hdGgucG93KDEwLHQpKSkubGVuZ3RoPzE6MH0ocixpWzFdLmxlbmd0aCkpKSsiLiIrWXIobWkocixpWzFdLmxlbmd0aCksaVsxXS5sZW5ndGgpO2lmKGk9'@;
put 'dC5tYXRjaCgvXiMsIyosIzAvKSlyZXR1cm4gVXIoZSx0LnJlcGxhY2UoL14jLCMqLC8sIiIpLHIpO2lmKGk9dC5tYXRjaCgvXihbMCNdKykoXFw/LShbMCNdKykpKyQvKSlyZXR1cm4gbj1lYShVcihlLHQucmVwbGFjZSgvW1xcLV0vZywiIikscikpLHM9MCxlYShlYSh0LnJlcGxhY2UoL1xc'@;
put 'L2csIiIpKS5yZXBsYWNlKC9bMCNdL2csZnVuY3Rpb24odil7cmV0dXJuIHM8bi5sZW5ndGg/bi5jaGFyQXQocysrKToiMCI9PT12PyIwIjoiIn0pKTtpZih0Lm1hdGNoKHZpKSlyZXR1cm4iKCIrKG49VXIoZSwiIyMjIyMjIyMjIyIscikpLnN1YnN0cigwLDMpKyIpICIrbi5zdWJzdHIoMywz'@;
put 'KSsiLSIrbi5zdWJzdHIoNik7dmFyIGw9IiI7aWYoaT10Lm1hdGNoKC9eKFsjMD9dKykoID8pXC8oID8pKFsjMD9dKykvKSlyZXR1cm4gcz1NYXRoLm1pbihpWzRdLmxlbmd0aCw3KSxmPWkwKGMsTWF0aC5wb3coMTAscyktMSwhMSksbj0iIitvLCIgIj09KGw9bHQoIm4iLGlbMV0sZlsxXSkp'@;
put 'LmNoYXJBdChsLmxlbmd0aC0xKSYmKGw9bC5zdWJzdHIoMCxsLmxlbmd0aC0xKSsiMCIpLG4rPWwraVsyXSsiLyIraVszXSwobD1hMChmWzJdLHMpKS5sZW5ndGg8aVs0XS5sZW5ndGgmJihsPVRyKGlbNF0uc3Vic3RyKGlbNF0ubGVuZ3RoLWwubGVuZ3RoKSkrbCksbis9bDtpZihpPXQubWF0'@;
put 'Y2goL14jIChbIzA/XSspKCA/KVwvKCA/KShbIzA/XSspLykpcmV0dXJuIHM9TWF0aC5taW4oTWF0aC5tYXgoaVsxXS5sZW5ndGgsaVs0XS5sZW5ndGgpLDcpLG8rKChmPWkwKGMsTWF0aC5wb3coMTAscyktMSwhMCkpWzBdfHwoZlsxXT8iIjoiMCIpKSsiICIrKGZbMV0/VTAoZlsxXSxzKStp'@;
put 'WzJdKyIvIitpWzNdK2EwKGZbMl0scyk6amUoIiAiLDIqcysxK2lbMl0ubGVuZ3RoK2lbM10ubGVuZ3RoKSk7aWYoaT10Lm1hdGNoKC9eWyMwP10rJC8pKXJldHVybiBuPXJhKHIsMCksdC5sZW5ndGg8PW4ubGVuZ3RoP246VHIodC5zdWJzdHIoMCx0Lmxlbmd0aC1uLmxlbmd0aCkpK247aWYo'@;
put 'aT10Lm1hdGNoKC9eKFsjMD9dKylcLihbIzBdKykkLykpe249IiIrci50b0ZpeGVkKE1hdGgubWluKGlbMl0ubGVuZ3RoLDEwKSkucmVwbGFjZSgvKFteMF0pMCskLywiJDEiKSxzPW4uaW5kZXhPZigiLiIpO3ZhciBoPXQuaW5kZXhPZigiLiIpLXMseD10Lmxlbmd0aC1uLmxlbmd0aC1oO3Jl'@;
put 'dHVybiBUcih0LnN1YnN0cigwLGgpK24rdC5zdWJzdHIodC5sZW5ndGgteCkpfWlmKGk9dC5tYXRjaCgvXjAwLDAwMFwuKFsjMF0qMCkkLykpcmV0dXJuIHM9bWkocixpWzFdLmxlbmd0aCkscjwwPyItIitVcihlLHQsLXIpOkV0KGZ1bmN0aW9uIEpjKGUpe3JldHVybiBlPDIxNDc0ODM2NDcm'@;
put 'JmU+LTIxNDc0ODM2NDg/IiIrKGU+PTA/MHxlOmUtMXwwKToiIitNYXRoLmZsb29yKGUpfShyKSkucmVwbGFjZSgvXlxkLFxkezN9JC8sIjAkJiIpLnJlcGxhY2UoL15cZCokLyxmdW5jdGlvbih2KXtyZXR1cm4iMDAsIisodi5sZW5ndGg8Mz9ZcigwLDMtdi5sZW5ndGgpOiIiKSt2fSkrIi4i'@;
put 'K1lyKHMsaVsxXS5sZW5ndGgpO3N3aXRjaCh0KXtjYXNlIiMjIywjIzAuMDAiOnJldHVybiBVcihlLCIjLCMjMC4wMCIscik7Y2FzZSIjIyMsIyMjIjpjYXNlIiMjLCMjIyI6Y2FzZSIjLCMjIyI6dmFyIGQ9RXQocmEoYywwKSk7cmV0dXJuIjAiIT09ZD9vK2Q6IiI7Y2FzZSIjIyMsIyMjLjAw'@;
put 'IjpyZXR1cm4gVXIoZSwiIyMjLCMjMC4wMCIscikucmVwbGFjZSgvXjBcLi8sIi4iKTtjYXNlIiMsIyMjLjAwIjpyZXR1cm4gVXIoZSwiIywjIzAuMDAiLHIpLnJlcGxhY2UoL14wXC4vLCIuIil9dGhyb3cgbmV3IEVycm9yKCJ1bnN1cHBvcnRlZCBmb3JtYXQgfCIrdCsifCIpfWZ1bmN0aW9u'@;
put 'IGdpKGUsdCl7dmFyIHIsYT1lLmluZGV4T2YoIkUiKS1lLmluZGV4T2YoIi4iKS0xO2lmKGUubWF0Y2goL14jKzAuMEVcKzAkLykpe2lmKDA9PXQpcmV0dXJuIjAuMEUrMCI7aWYodDwwKXJldHVybiItIitnaShlLC10KTt2YXIgbj1lLmluZGV4T2YoIi4iKTstMT09PW4mJihuPWUuaW5kZXhP'@;
put 'ZigiRSIpKTt2YXIgaT1NYXRoLmZsb29yKE1hdGgubG9nKHQpKk1hdGguTE9HMTBFKSVuO2lmKGk8MCYmKGkrPW4pLCEocj0odC9NYXRoLnBvdygxMCxpKSkudG9QcmVjaXNpb24oYSsxKyhuK2kpJW4pKS5tYXRjaCgvW0VlXS8pKXt2YXIgcz1NYXRoLmZsb29yKE1hdGgubG9nKHQpKk1hdGgu'@;
put 'TE9HMTBFKTstMT09PXIuaW5kZXhPZigiLiIpP3I9ci5jaGFyQXQoMCkrIi4iK3Iuc3Vic3RyKDEpKyJFKyIrKHMtci5sZW5ndGgraSk6cis9IkUrIisocy1pKSxyPXIucmVwbGFjZSgvXCstLywiLSIpfXI9ci5yZXBsYWNlKC9eKFsrLV0/KShcZCopXC4oXGQqKVtFZV0vLGZ1bmN0aW9uKGYs'@;
put 'YyxvLGwpe3JldHVybiBjK28rbC5zdWJzdHIoMCwobitpKSVuKSsiLiIrbC5zdWJzdHIoaSkrIkUifSl9ZWxzZSByPXQudG9FeHBvbmVudGlhbChhKTtyZXR1cm4gZS5tYXRjaCgvRVwrMDAkLykmJnIubWF0Y2goL2VbKy1dXGQkLykmJihyPXIuc3Vic3RyKDAsci5sZW5ndGgtMSkrIjAiK3Iu'@;
put 'Y2hhckF0KHIubGVuZ3RoLTEpKSxlLm1hdGNoKC9FXC0vKSYmci5tYXRjaCgvZVwrLykmJihyPXIucmVwbGFjZSgvZVwrLywiZSIpKSxyLnJlcGxhY2UoImUiLCJFIil9ZnVuY3Rpb24gUXIoZSx0LHIpe2lmKDQwPT09ZS5jaGFyQ29kZUF0KDApJiYhdC5tYXRjaChkaSkpe3ZhciBhPXQucmVw'@;
put 'bGFjZSgvXCggKi8sIiIpLnJlcGxhY2UoLyBcKS8sIiIpLnJlcGxhY2UoL1wpLywiIik7cmV0dXJuIHI+PTA/UXIoIm4iLGEscik6IigiK1FyKCJuIixhLC1yKSsiKSJ9aWYoNDQ9PT10LmNoYXJDb2RlQXQodC5sZW5ndGgtMSkpcmV0dXJuIGZ1bmN0aW9uIHFjKGUsdCxyKXtmb3IodmFyIGE9'@;
put 'dC5sZW5ndGgtMTs0ND09PXQuY2hhckNvZGVBdChhLTEpOyktLWE7cmV0dXJuIGx0KGUsdC5zdWJzdHIoMCxhKSxyL01hdGgucG93KDEwLDMqKHQubGVuZ3RoLWEpKSl9KGUsdCxyKTtpZigtMSE9PXQuaW5kZXhPZigiJSIpKXJldHVybiBmdW5jdGlvbiBaYyhlLHQscil7dmFyIGE9dC5yZXBs'@;
put 'YWNlKGxpLCIiKSxuPXQubGVuZ3RoLWEubGVuZ3RoO3JldHVybiBsdChlLGEscipNYXRoLnBvdygxMCwyKm4pKStqZSgiJSIsbil9KGUsdCxyKTtpZigtMSE9PXQuaW5kZXhPZigiRSIpKXJldHVybiBnaSh0LHIpO2lmKDM2PT09dC5jaGFyQ29kZUF0KDApKXJldHVybiIkIitRcihlLHQuc3Vi'@;
put 'c3RyKCIgIj09dC5jaGFyQXQoMSk/MjoxKSxyKTt2YXIgbixpLHMsZixjPU1hdGguYWJzKHIpLG89cjwwPyItIjoiIjtpZih0Lm1hdGNoKC9eMDArJC8pKXJldHVybiBvK1lyKGMsdC5sZW5ndGgpO2lmKHQubWF0Y2goL15bIz9dKyQvKSlyZXR1cm4gbj0iIityLDA9PT1yJiYobj0iIiksbi5s'@;
put 'ZW5ndGg+dC5sZW5ndGg/bjpUcih0LnN1YnN0cigwLHQubGVuZ3RoLW4ubGVuZ3RoKSkrbjtpZihpPXQubWF0Y2goaGkpKXJldHVybiBmdW5jdGlvbiBLYyhlLHQscil7cmV0dXJuIHIrKDA9PT10PyIiOiIiK3QpK2plKCIgIixlWzFdLmxlbmd0aCsyK2VbNF0ubGVuZ3RoKX0oaSxjLG8pO2lm'@;
put 'KHQubWF0Y2goL14jKzArJC8pKXJldHVybiBvK1lyKGMsdC5sZW5ndGgtdC5pbmRleE9mKCIwIikpO2lmKGk9dC5tYXRjaCh4aSkpcmV0dXJuIG49KG49KCIiK3IpLnJlcGxhY2UoL14oW15cLl0rKSQvLCIkMS4iK1RyKGlbMV0pKS5yZXBsYWNlKC9cLiQvLCIuIitUcihpWzFdKSkpLnJlcGxh'@;
put 'Y2UoL1wuKFxkKikkLyxmdW5jdGlvbih2LHUpe3JldHVybiIuIit1K2plKCIwIixUcihpWzFdKS5sZW5ndGgtdS5sZW5ndGgpfSksLTEhPT10LmluZGV4T2YoIjAuIik/bjpuLnJlcGxhY2UoL14wXC4vLCIuIik7aWYodD10LnJlcGxhY2UoL14jKyhbMC5dKS8sIiQxIiksaT10Lm1hdGNoKC9e'@;
put 'KDAqKVwuKCMqKSQvKSlyZXR1cm4gbysoIiIrYykucmVwbGFjZSgvXC4oXGQqWzEtOV0pMCokLywiLiQxIikucmVwbGFjZSgvXigtP1xkKikkLywiJDEuIikucmVwbGFjZSgvXjBcLi8saVsxXS5sZW5ndGg/IjAuIjoiLiIpO2lmKGk9dC5tYXRjaCgvXiN7MSwzfSwjIzAoXC4/KSQvKSlyZXR1'@;
put 'cm4gbytFdCgiIitjKTtpZihpPXQubWF0Y2goL14jLCMjMFwuKFsjMF0qMCkkLykpcmV0dXJuIHI8MD8iLSIrUXIoZSx0LC1yKTpFdCgiIityKSsiLiIramUoIjAiLGlbMV0ubGVuZ3RoKTtpZihpPXQubWF0Y2goL14jLCMqLCMwLykpcmV0dXJuIFFyKGUsdC5yZXBsYWNlKC9eIywjKiwvLCIi'@;
put 'KSxyKTtpZihpPXQubWF0Y2goL14oWzAjXSspKFxcPy0oWzAjXSspKSskLykpcmV0dXJuIG49ZWEoUXIoZSx0LnJlcGxhY2UoL1tcXC1dL2csIiIpLHIpKSxzPTAsZWEoZWEodC5yZXBsYWNlKC9cXC9nLCIiKSkucmVwbGFjZSgvWzAjXS9nLGZ1bmN0aW9uKHYpe3JldHVybiBzPG4ubGVuZ3Ro'@;
put 'P24uY2hhckF0KHMrKyk6IjAiPT09dj8iMCI6IiJ9KSk7aWYodC5tYXRjaCh2aSkpcmV0dXJuIigiKyhuPVFyKGUsIiMjIyMjIyMjIyMiLHIpKS5zdWJzdHIoMCwzKSsiKSAiK24uc3Vic3RyKDMsMykrIi0iK24uc3Vic3RyKDYpO3ZhciBsPSIiO2lmKGk9dC5tYXRjaCgvXihbIzA/XSspKCA/'@;
put 'KVwvKCA/KShbIzA/XSspLykpcmV0dXJuIHM9TWF0aC5taW4oaVs0XS5sZW5ndGgsNyksZj1pMChjLE1hdGgucG93KDEwLHMpLTEsITEpLG49IiIrbywiICI9PShsPWx0KCJuIixpWzFdLGZbMV0pKS5jaGFyQXQobC5sZW5ndGgtMSkmJihsPWwuc3Vic3RyKDAsbC5sZW5ndGgtMSkrIjAiKSxu'@;
put 'Kz1sK2lbMl0rIi8iK2lbM10sKGw9YTAoZlsyXSxzKSkubGVuZ3RoPGlbNF0ubGVuZ3RoJiYobD1UcihpWzRdLnN1YnN0cihpWzRdLmxlbmd0aC1sLmxlbmd0aCkpK2wpLG4rPWw7aWYoaT10Lm1hdGNoKC9eIyAoWyMwP10rKSggPylcLyggPykoWyMwP10rKS8pKXJldHVybiBzPU1hdGgubWlu'@;
put 'KE1hdGgubWF4KGlbMV0ubGVuZ3RoLGlbNF0ubGVuZ3RoKSw3KSxvKygoZj1pMChjLE1hdGgucG93KDEwLHMpLTEsITApKVswXXx8KGZbMV0/IiI6IjAiKSkrIiAiKyhmWzFdP1UwKGZbMV0scykraVsyXSsiLyIraVszXSthMChmWzJdLHMpOmplKCIgIiwyKnMrMStpWzJdLmxlbmd0aCtpWzNd'@;
put 'Lmxlbmd0aCkpO2lmKGk9dC5tYXRjaCgvXlsjMD9dKyQvKSlyZXR1cm4gdC5sZW5ndGg8PShuPSIiK3IpLmxlbmd0aD9uOlRyKHQuc3Vic3RyKDAsdC5sZW5ndGgtbi5sZW5ndGgpKStuO2lmKGk9dC5tYXRjaCgvXihbIzBdKylcLihbIzBdKykkLykpe249IiIrci50b0ZpeGVkKE1hdGgubWlu'@;
put 'KGlbMl0ubGVuZ3RoLDEwKSkucmVwbGFjZSgvKFteMF0pMCskLywiJDEiKSxzPW4uaW5kZXhPZigiLiIpO3ZhciBoPXQuaW5kZXhPZigiLiIpLXMseD10Lmxlbmd0aC1uLmxlbmd0aC1oO3JldHVybiBUcih0LnN1YnN0cigwLGgpK24rdC5zdWJzdHIodC5sZW5ndGgteCkpfWlmKGk9dC5tYXRj'@;
put 'aCgvXjAwLDAwMFwuKFsjMF0qMCkkLykpcmV0dXJuIHI8MD8iLSIrUXIoZSx0LC1yKTpFdCgiIityKS5yZXBsYWNlKC9eXGQsXGR7M30kLywiMCQmIikucmVwbGFjZSgvXlxkKiQvLGZ1bmN0aW9uKHYpe3JldHVybiIwMCwiKyh2Lmxlbmd0aDwzP1lyKDAsMy12Lmxlbmd0aCk6IiIpK3Z9KSsi'@;
put 'LiIrWXIoMCxpWzFdLmxlbmd0aCk7c3dpdGNoKHQpe2Nhc2UiIyMjLCMjIyI6Y2FzZSIjIywjIyMiOmNhc2UiIywjIyMiOnZhciBkPUV0KCIiK2MpO3JldHVybiIwIiE9PWQ/bytkOiIiO2RlZmF1bHQ6aWYodC5tYXRjaCgvXC5bMCM/XSokLykpcmV0dXJuIFFyKGUsdC5zbGljZSgwLHQubGFz'@;
put 'dEluZGV4T2YoIi4iKSkscikrVHIodC5zbGljZSh0Lmxhc3RJbmRleE9mKCIuIikpKX10aHJvdyBuZXcgRXJyb3IoInVuc3VwcG9ydGVkIGZvcm1hdCB8Iit0KyJ8Iil9ZnVuY3Rpb24gbHQoZSx0LHIpe3JldHVybigwfHIpPT09cj9RcihlLHQscik6VXIoZSx0LHIpfXZhciBfaT0vXFtbSGhN'@;
put 'bVNzXHUwRTBBXHUwRTE5XHUwRTE3XSpcXS87ZnVuY3Rpb24gYnQoZSl7Zm9yKHZhciB0PTAscj0iIixhPSIiO3Q8ZS5sZW5ndGg7KXN3aXRjaChyPWUuY2hhckF0KHQpKXtjYXNlIkciOm4wKGUsdCkmJih0Kz02KSx0Kys7YnJlYWs7Y2FzZSciJzpmb3IoOzM0IT09ZS5jaGFyQ29kZUF0KCsr'@;
put 'dCkmJnQ8ZS5sZW5ndGg7KTsrK3Q7YnJlYWs7Y2FzZSJcXCI6Y2FzZSJfIjp0Kz0yO2JyZWFrO2Nhc2UiQCI6Kyt0O2JyZWFrO2Nhc2UiQiI6Y2FzZSJiIjppZigiMSI9PT1lLmNoYXJBdCh0KzEpfHwiMiI9PT1lLmNoYXJBdCh0KzEpKXJldHVybiEwO2Nhc2UiTSI6Y2FzZSJEIjpjYXNlIlki'@;
put 'OmNhc2UiSCI6Y2FzZSJTIjpjYXNlIkUiOmNhc2UibSI6Y2FzZSJkIjpjYXNlInkiOmNhc2UiaCI6Y2FzZSJzIjpjYXNlImUiOmNhc2UiZyI6cmV0dXJuITA7Y2FzZSJBIjpjYXNlImEiOmNhc2UiXHU0ZTBhIjppZigiQS9QIj09PWUuc3Vic3RyKHQsMykudG9VcHBlckNhc2UoKXx8IkFNL1BN'@;
put 'Ij09PWUuc3Vic3RyKHQsNSkudG9VcHBlckNhc2UoKXx8Ilx1NGUwYVx1NTM0OC9cdTRlMGJcdTUzNDgiPT09ZS5zdWJzdHIodCw1KS50b1VwcGVyQ2FzZSgpKXJldHVybiEwOysrdDticmVhaztjYXNlIlsiOmZvcihhPXI7Il0iIT09ZS5jaGFyQXQodCsrKSYmdDxlLmxlbmd0aDspYSs9ZS5j'@;
put 'aGFyQXQodCk7aWYoYS5tYXRjaChfaSkpcmV0dXJuITA7YnJlYWs7Y2FzZSIuIjpjYXNlIjAiOmNhc2UiIyI6Zm9yKDt0PGUubGVuZ3RoJiYoIjAjPy4sRSstJSIuaW5kZXhPZihyPWUuY2hhckF0KCsrdCkpPi0xfHwiXFwiPT1yJiYiLSI9PWUuY2hhckF0KHQrMSkmJiIwIyIuaW5kZXhPZihl'@;
put 'LmNoYXJBdCh0KzIpKT4tMSk7KTticmVhaztjYXNlIj8iOmZvcig7ZS5jaGFyQXQoKyt0KT09PXI7KTticmVhaztjYXNlIioiOisrdCwoIiAiPT1lLmNoYXJBdCh0KXx8IioiPT1lLmNoYXJBdCh0KSkmJisrdDticmVhaztjYXNlIigiOmNhc2UiKSI6Kyt0O2JyZWFrO2Nhc2UiMSI6Y2FzZSIy'@;
put 'IjpjYXNlIjMiOmNhc2UiNCI6Y2FzZSI1IjpjYXNlIjYiOmNhc2UiNyI6Y2FzZSI4IjpjYXNlIjkiOmZvcig7dDxlLmxlbmd0aCYmIjAxMjM0NTY3ODkiLmluZGV4T2YoZS5jaGFyQXQoKyt0KSk+LTE7KTticmVhaztkZWZhdWx0OisrdH1yZXR1cm4hMX12YXIgd2k9L1xbKD18Pls9XT98PFs+'@;
put 'PV0/KSgtP1xkKyg/OlwuXGQqKT8pXF0vO2Z1bmN0aW9uIGtpKGUsdCl7aWYobnVsbD09dClyZXR1cm4hMTt2YXIgcj1wYXJzZUZsb2F0KHRbMl0pO3N3aXRjaCh0WzFdKXtjYXNlIj0iOmlmKGU9PXIpcmV0dXJuITA7YnJlYWs7Y2FzZSI+IjppZihlPnIpcmV0dXJuITA7YnJlYWs7Y2FzZSI8'@;
put 'IjppZihlPHIpcmV0dXJuITA7YnJlYWs7Y2FzZSI8PiI6aWYoZSE9cilyZXR1cm4hMDticmVhaztjYXNlIj49IjppZihlPj1yKXJldHVybiEwO2JyZWFrO2Nhc2UiPD0iOmlmKGU8PXIpcmV0dXJuITB9cmV0dXJuITF9ZnVuY3Rpb24gUnIoZSx0LHIpe251bGw9PXImJihyPXt9KTt2YXIgYT0i'@;
put 'Ijtzd2l0Y2godHlwZW9mIGUpe2Nhc2Uic3RyaW5nIjphPSJtL2QveXkiPT1lJiZyLmRhdGVORj9yLmRhdGVORjplO2JyZWFrO2Nhc2UibnVtYmVyIjpudWxsPT0oYT0xND09ZSYmci5kYXRlTkY/ci5kYXRlTkY6KG51bGwhPXIudGFibGU/ci50YWJsZTpwZSlbZV0pJiYoYT1yLnRhYmxlJiZy'@;
put 'LnRhYmxlW2ZpW2VdXXx8cGVbZmlbZV1dKSxudWxsPT1hJiYoYT1CY1tlXXx8IkdlbmVyYWwiKX1pZihuMChhLDApKXJldHVybiBOdCh0LHIpO3QgaW5zdGFuY2VvZiBEYXRlJiYodD1vaSh0LHIuZGF0ZTE5MDQpKTt2YXIgbj1mdW5jdGlvbiBybyhlLHQpe3ZhciByPWZ1bmN0aW9uIFFjKGUp'@;
put 'e2Zvcih2YXIgdD1bXSxyPSExLGE9MCxuPTA7YTxlLmxlbmd0aDsrK2Epc3dpdGNoKGUuY2hhckNvZGVBdChhKSl7Y2FzZSAzNDpyPSFyO2JyZWFrO2Nhc2UgOTU6Y2FzZSA0MjpjYXNlIDkyOisrYTticmVhaztjYXNlIDU5OnRbdC5sZW5ndGhdPWUuc3Vic3RyKG4sYS1uKSxuPWErMX1pZih0'@;
put 'W3QubGVuZ3RoXT1lLnN1YnN0cihuKSwhMD09PXIpdGhyb3cgbmV3IEVycm9yKCJGb3JtYXQgfCIrZSsifCB1bnRlcm1pbmF0ZWQgc3RyaW5nICIpO3JldHVybiB0fShlKSxhPXIubGVuZ3RoLG49clthLTFdLmluZGV4T2YoIkAiKTtpZihhPDQmJm4+LTEmJi0tYSxyLmxlbmd0aD40KXRocm93'@;
put 'IG5ldyBFcnJvcigiY2Fubm90IGZpbmQgcmlnaHQgZm9ybWF0IGZvciB8IityLmpvaW4oInwiKSsifCIpO2lmKCJudW1iZXIiIT10eXBlb2YgdClyZXR1cm5bNCw0PT09ci5sZW5ndGh8fG4+LTE/cltyLmxlbmd0aC0xXToiQCJdO3N3aXRjaChyLmxlbmd0aCl7Y2FzZSAxOnI9bj4tMT9bIkdl'@;
put 'bmVyYWwiLCJHZW5lcmFsIiwiR2VuZXJhbCIsclswXV06W3JbMF0sclswXSxyWzBdLCJAIl07YnJlYWs7Y2FzZSAyOnI9bj4tMT9bclswXSxyWzBdLHJbMF0sclsxXV06W3JbMF0sclsxXSxyWzBdLCJAIl07YnJlYWs7Y2FzZSAzOnI9bj4tMT9bclswXSxyWzFdLHJbMF0sclsyXV06W3JbMF0s'@;
put 'clsxXSxyWzJdLCJAIl19dmFyIGk9dD4wP3JbMF06dDwwP3JbMV06clsyXTtpZigtMT09PXJbMF0uaW5kZXhPZigiWyIpJiYtMT09PXJbMV0uaW5kZXhPZigiWyIpKXJldHVyblthLGldO2lmKG51bGwhPXJbMF0ubWF0Y2goL1xbWz08Pl0vKXx8bnVsbCE9clsxXS5tYXRjaCgvXFtbPTw+XS8p'@;
put 'KXt2YXIgcz1yWzBdLm1hdGNoKHdpKSxmPXJbMV0ubWF0Y2god2kpO3JldHVybiBraSh0LHMpP1thLHJbMF1dOmtpKHQsZik/W2EsclsxXV06W2EscltudWxsIT1zJiZudWxsIT1mPzI6MV1dfXJldHVyblthLGldfShhLHQpO2lmKG4wKG5bMV0pKXJldHVybiBOdCh0LHIpO2lmKCEwPT09dCl0'@;
put 'PSJUUlVFIjtlbHNlIGlmKCExPT09dCl0PSJGQUxTRSI7ZWxzZSBpZigiIj09PXR8fG51bGw9PXQpcmV0dXJuIiI7cmV0dXJuIGZ1bmN0aW9uIGVvKGUsdCxyLGEpe2Zvcih2YXIgbyxsLGgsbj1bXSxpPSIiLHM9MCxmPSIiLGM9InQiLHg9IkgiO3M8ZS5sZW5ndGg7KXN3aXRjaChmPWUuY2hh'@;
put 'ckF0KHMpKXtjYXNlIkciOmlmKCFuMChlLHMpKXRocm93IG5ldyBFcnJvcigidW5yZWNvZ25pemVkIGNoYXJhY3RlciAiK2YrIiBpbiAiK2UpO25bbi5sZW5ndGhdPXt0OiJHIix2OiJHZW5lcmFsIn0scys9NzticmVhaztjYXNlJyInOmZvcihpPSIiOzM0IT09KGg9ZS5jaGFyQ29kZUF0KCsr'@;
put 'cykpJiZzPGUubGVuZ3RoOylpKz1TdHJpbmcuZnJvbUNoYXJDb2RlKGgpO25bbi5sZW5ndGhdPXt0OiJ0Iix2Oml9LCsrczticmVhaztjYXNlIlxcIjp2YXIgZD1lLmNoYXJBdCgrK3MpO25bbi5sZW5ndGhdPXt0OiIoIj09PWR8fCIpIj09PWQ/ZDoidCIsdjpkfSwrK3M7YnJlYWs7Y2FzZSJf'@;
put 'IjpuW24ubGVuZ3RoXT17dDoidCIsdjoiICJ9LHMrPTI7YnJlYWs7Y2FzZSJAIjpuW24ubGVuZ3RoXT17dDoiVCIsdjp0fSwrK3M7YnJlYWs7Y2FzZSJCIjpjYXNlImIiOmlmKCIxIj09PWUuY2hhckF0KHMrMSl8fCIyIj09PWUuY2hhckF0KHMrMSkpe2lmKG51bGw9PW8mJm51bGw9PShvPWt0'@;
put 'KHQsciwiMiI9PT1lLmNoYXJBdChzKzEpKSkpcmV0dXJuIiI7bltuLmxlbmd0aF09e3Q6IlgiLHY6ZS5zdWJzdHIocywyKX0sYz1mLHMrPTI7YnJlYWt9Y2FzZSJNIjpjYXNlIkQiOmNhc2UiWSI6Y2FzZSJIIjpjYXNlIlMiOmNhc2UiRSI6Zj1mLnRvTG93ZXJDYXNlKCk7Y2FzZSJtIjpjYXNl'@;
put 'ImQiOmNhc2UieSI6Y2FzZSJoIjpjYXNlInMiOmNhc2UiZSI6Y2FzZSJnIjppZih0PDB8fG51bGw9PW8mJm51bGw9PShvPWt0KHQscikpKXJldHVybiIiO2ZvcihpPWY7KytzPGUubGVuZ3RoJiZlLmNoYXJBdChzKS50b0xvd2VyQ2FzZSgpPT09ZjspaSs9ZjsibSI9PT1mJiYiaCI9PT1jLnRv'@;
put 'TG93ZXJDYXNlKCkmJihmPSJNIiksImgiPT09ZiYmKGY9eCksbltuLmxlbmd0aF09e3Q6Zix2Oml9LGM9ZjticmVhaztjYXNlIkEiOmNhc2UiYSI6Y2FzZSJcdTRlMGEiOnZhciB1PXt0OmYsdjpmfTtpZihudWxsPT1vJiYobz1rdCh0LHIpKSwiQS9QIj09PWUuc3Vic3RyKHMsMykudG9VcHBl'@;
put 'ckNhc2UoKT8obnVsbCE9byYmKHUudj1vLkg+PTEyPyJQIjoiQSIpLHUudD0iVCIseD0iaCIscys9Myk6IkFNL1BNIj09PWUuc3Vic3RyKHMsNSkudG9VcHBlckNhc2UoKT8obnVsbCE9byYmKHUudj1vLkg+PTEyPyJQTSI6IkFNIiksdS50PSJUIixzKz01LHg9ImgiKToiXHU0ZTBhXHU1MzQ4'@;
put 'L1x1NGUwYlx1NTM0OCI9PT1lLnN1YnN0cihzLDUpLnRvVXBwZXJDYXNlKCk/KG51bGwhPW8mJih1LnY9by5IPj0xMj8iXHU0ZTBiXHU1MzQ4IjoiXHU0ZTBhXHU1MzQ4IiksdS50PSJUIixzKz01LHg9ImgiKToodS50PSJ0IiwrK3MpLG51bGw9PW8mJiJUIj09PXUudClyZXR1cm4iIjtuW24u'@;
put 'bGVuZ3RoXT11LGM9ZjticmVhaztjYXNlIlsiOmZvcihpPWY7Il0iIT09ZS5jaGFyQXQocysrKSYmczxlLmxlbmd0aDspaSs9ZS5jaGFyQXQocyk7aWYoIl0iIT09aS5zbGljZSgtMSkpdGhyb3cndW50ZXJtaW5hdGVkICJbIiBibG9jazogfCcraSsifCI7aWYoaS5tYXRjaChfaSkpe2lmKG51'@;
put 'bGw9PW8mJm51bGw9PShvPWt0KHQscikpKXJldHVybiIiO25bbi5sZW5ndGhdPXt0OiJaIix2OmkudG9Mb3dlckNhc2UoKX0sYz1pLmNoYXJBdCgxKX1lbHNlIGkuaW5kZXhPZigiJCIpPi0xJiYoaT0oaS5tYXRjaCgvXCQoW14tXFtcXV0qKS8pfHxbXSlbMV18fCIkIixidChlKXx8KG5bbi5s'@;
put 'ZW5ndGhdPXt0OiJ0Iix2Oml9KSk7YnJlYWs7Y2FzZSIuIjppZihudWxsIT1vKXtmb3IoaT1mOysrczxlLmxlbmd0aCYmIjAiPT09KGY9ZS5jaGFyQXQocykpOylpKz1mO25bbi5sZW5ndGhdPXt0OiJzIix2Oml9O2JyZWFrfWNhc2UiMCI6Y2FzZSIjIjpmb3IoaT1mOysrczxlLmxlbmd0aCYm'@;
put 'IjAjPy4sRSstJSIuaW5kZXhPZihmPWUuY2hhckF0KHMpKT4tMTspaSs9ZjtuW24ubGVuZ3RoXT17dDoibiIsdjppfTticmVhaztjYXNlIj8iOmZvcihpPWY7ZS5jaGFyQXQoKytzKT09PWY7KWkrPWY7bltuLmxlbmd0aF09e3Q6Zix2Oml9LGM9ZjticmVhaztjYXNlIioiOisrcywoIiAiPT1l'@;
put 'LmNoYXJBdChzKXx8IioiPT1lLmNoYXJBdChzKSkmJisrczticmVhaztjYXNlIigiOmNhc2UiKSI6bltuLmxlbmd0aF09e3Q6MT09PWE/InQiOmYsdjpmfSwrK3M7YnJlYWs7Y2FzZSIxIjpjYXNlIjIiOmNhc2UiMyI6Y2FzZSI0IjpjYXNlIjUiOmNhc2UiNiI6Y2FzZSI3IjpjYXNlIjgiOmNh'@;
put 'c2UiOSI6Zm9yKGk9ZjtzPGUubGVuZ3RoJiYiMDEyMzQ1Njc4OSIuaW5kZXhPZihlLmNoYXJBdCgrK3MpKT4tMTspaSs9ZS5jaGFyQXQocyk7bltuLmxlbmd0aF09e3Q6IkQiLHY6aX07YnJlYWs7Y2FzZSIgIjpuW24ubGVuZ3RoXT17dDpmLHY6Zn0sKytzO2JyZWFrO2Nhc2UiJCI6bltuLmxl'@;
put 'bmd0aF09e3Q6InQiLHY6IiQifSwrK3M7YnJlYWs7ZGVmYXVsdDppZigtMT09PSIsJC0rLygpOiFeJid+e308Pj1cdTIwYWNhY2Zpamtsb3BxcnR1dnd4elAiLmluZGV4T2YoZikpdGhyb3cgbmV3IEVycm9yKCJ1bnJlY29nbml6ZWQgY2hhcmFjdGVyICIrZisiIGluICIrZSk7bltuLmxlbmd0'@;
put 'aF09e3Q6InQiLHY6Zn0sKytzfXZhciBULHA9MCxrPTA7Zm9yKHM9bi5sZW5ndGgtMSxjPSJ0IjtzPj0wOy0tcylzd2l0Y2gobltzXS50KXtjYXNlImgiOmNhc2UiSCI6bltzXS50PXgsYz0iaCIscDwxJiYocD0xKTticmVhaztjYXNlInMiOihUPW5bc10udi5tYXRjaCgvXC4wKyQvKSkmJihr'@;
put 'PU1hdGgubWF4KGssVFswXS5sZW5ndGgtMSkpLHA8MyYmKHA9Myk7Y2FzZSJkIjpjYXNlInkiOmNhc2UiTSI6Y2FzZSJlIjpjPW5bc10udDticmVhaztjYXNlIm0iOiJzIj09PWMmJihuW3NdLnQ9Ik0iLHA8MiYmKHA9MikpO2JyZWFrO2Nhc2UiWCI6YnJlYWs7Y2FzZSJaIjpwPDEmJm5bc10u'@;
put 'di5tYXRjaCgvW0hoXS8pJiYocD0xKSxwPDImJm5bc10udi5tYXRjaCgvW01tXS8pJiYocD0yKSxwPDMmJm5bc10udi5tYXRjaCgvW1NzXS8pJiYocD0zKX1zd2l0Y2gocCl7Y2FzZSAwOmJyZWFrO2Nhc2UgMTpvLnU+PS41JiYoby51PTAsKytvLlMpLG8uUz49NjAmJihvLlM9MCwrK28uTSks'@;
put 'by5NPj02MCYmKG8uTT0wLCsrby5IKTticmVhaztjYXNlIDI6by51Pj0uNSYmKG8udT0wLCsrby5TKSxvLlM+PTYwJiYoby5TPTAsKytvLk0pfXZhciBOLGc9IiI7Zm9yKHM9MDtzPG4ubGVuZ3RoOysrcylzd2l0Y2gobltzXS50KXtjYXNlInQiOmNhc2UiVCI6Y2FzZSIgIjpjYXNlIkQiOmJy'@;
put 'ZWFrO2Nhc2UiWCI6bltzXS52PSIiLG5bc10udD0iOyI7YnJlYWs7Y2FzZSJkIjpjYXNlIm0iOmNhc2UieSI6Y2FzZSJoIjpjYXNlIkgiOmNhc2UiTSI6Y2FzZSJzIjpjYXNlImUiOmNhc2UiYiI6Y2FzZSJaIjpuW3NdLnY9R2MobltzXS50LmNoYXJDb2RlQXQoMCksbltzXS52LG8sayksbltz'@;
put 'XS50PSJ0IjticmVhaztjYXNlIm4iOmNhc2UiPyI6Zm9yKE49cysxO251bGwhPW5bTl0mJigiPyI9PT0oZj1uW05dLnQpfHwiRCI9PT1mfHwoIiAiPT09Znx8InQiPT09ZikmJm51bGwhPW5bTisxXSYmKCI/Ij09PW5bTisxXS50fHwidCI9PT1uW04rMV0udCYmIi8iPT09bltOKzFdLnYpfHwi'@;
put 'KCI9PT1uW3NdLnQmJigiICI9PT1mfHwibiI9PT1mfHwiKSI9PT1mKXx8InQiPT09ZiYmKCIvIj09PW5bTl0udnx8IiAiPT09bltOXS52JiZudWxsIT1uW04rMV0mJiI/Ij09bltOKzFdLnQpKTspbltzXS52Kz1uW05dLnYsbltOXT17djoiIix0OiI7In0sKytOO2crPW5bc10udixzPU4tMTti'@;
put 'cmVhaztjYXNlIkciOm5bc10udD0idCIsbltzXS52PU50KHQscil9dmFyIEkseSxNPSIiO2lmKGcubGVuZ3RoPjApezQwPT1nLmNoYXJDb2RlQXQoMCk/KEk9dDwwJiY0NT09PWcuY2hhckNvZGVBdCgwKT8tdDp0LHk9bHQoIm4iLGcsSSkpOih5PWx0KCJuIixnLEk9dDwwJiZhPjE/LXQ6dCks'@;
put 'STwwJiZuWzBdJiYidCI9PW5bMF0udCYmKHk9eS5zdWJzdHIoMSksblswXS52PSItIituWzBdLnYpKSxOPXkubGVuZ3RoLTE7dmFyIFA9bi5sZW5ndGg7Zm9yKHM9MDtzPG4ubGVuZ3RoOysrcylpZihudWxsIT1uW3NdJiYidCIhPW5bc10udCYmbltzXS52LmluZGV4T2YoIi4iKT4tMSl7UD1z'@;
put 'O2JyZWFrfXZhciBSPW4ubGVuZ3RoO2lmKFA9PT1uLmxlbmd0aCYmLTE9PT15LmluZGV4T2YoIkUiKSl7Zm9yKHM9bi5sZW5ndGgtMTtzPj0wOy0tcyludWxsPT1uW3NdfHwtMT09PSJuPyIuaW5kZXhPZihuW3NdLnQpfHwoTj49bltzXS52Lmxlbmd0aC0xP25bc10udj15LnN1YnN0cigxKyhO'@;
put 'LT1uW3NdLnYubGVuZ3RoKSxuW3NdLnYubGVuZ3RoKTpOPDA/bltzXS52PSIiOihuW3NdLnY9eS5zdWJzdHIoMCxOKzEpLE49LTEpLG5bc10udD0idCIsUj1zKTtOPj0wJiZSPG4ubGVuZ3RoJiYobltSXS52PXkuc3Vic3RyKDAsTisxKStuW1JdLnYpfWVsc2UgaWYoUCE9PW4ubGVuZ3RoJiYt'@;
put 'MT09PXkuaW5kZXhPZigiRSIpKXtmb3IoTj15LmluZGV4T2YoIi4iKS0xLHM9UDtzPj0wOy0tcylpZihudWxsIT1uW3NdJiYtMSE9PSJuPyIuaW5kZXhPZihuW3NdLnQpKXtmb3IobD1uW3NdLnYuaW5kZXhPZigiLiIpPi0xJiZzPT09UD9uW3NdLnYuaW5kZXhPZigiLiIpLTE6bltzXS52Lmxl'@;
put 'bmd0aC0xLE09bltzXS52LnN1YnN0cihsKzEpO2w+PTA7LS1sKU4+PTAmJigiMCI9PT1uW3NdLnYuY2hhckF0KGwpfHwiIyI9PT1uW3NdLnYuY2hhckF0KGwpKSYmKE09eS5jaGFyQXQoTi0tKStNKTtuW3NdLnY9TSxuW3NdLnQ9InQiLFI9c31mb3IoTj49MCYmUjxuLmxlbmd0aCYmKG5bUl0u'@;
put 'dj15LnN1YnN0cigwLE4rMSkrbltSXS52KSxOPXkuaW5kZXhPZigiLiIpKzEscz1QO3M8bi5sZW5ndGg7KytzKWlmKG51bGwhPW5bc10mJigtMSE9PSJuPygiLmluZGV4T2YobltzXS50KXx8cz09PVApKXtmb3IobD1uW3NdLnYuaW5kZXhPZigiLiIpPi0xJiZzPT09UD9uW3NdLnYuaW5kZXhP'@;
put 'ZigiLiIpKzE6MCxNPW5bc10udi5zdWJzdHIoMCxsKTtsPG5bc10udi5sZW5ndGg7KytsKU48eS5sZW5ndGgmJihNKz15LmNoYXJBdChOKyspKTtuW3NdLnY9TSxuW3NdLnQ9InQiLFI9c319fWZvcihzPTA7czxuLmxlbmd0aDsrK3MpbnVsbCE9bltzXSYmIm4/Ii5pbmRleE9mKG5bc10udCk+'@;
put 'LTEmJihuW3NdLnY9bHQobltzXS50LG5bc10udixJPWE+MSYmdDwwJiZzPjAmJiItIj09PW5bcy0xXS52Py10OnQpLG5bc10udD0idCIpO3ZhciBWPSIiO2ZvcihzPTA7cyE9PW4ubGVuZ3RoOysrcyludWxsIT1uW3NdJiYoVis9bltzXS52KTtyZXR1cm4gVn0oblsxXSx0LHIsblswXSl9ZnVu'@;
put 'Y3Rpb24gZXQoZSx0KXtpZigibnVtYmVyIiE9dHlwZW9mIHQpe3Q9K3R8fC0xO2Zvcih2YXIgcj0wO3I8MzkyOysrcilpZihudWxsIT1wZVtyXSl7aWYocGVbcl09PWUpe3Q9cjticmVha319ZWxzZSB0PDAmJih0PXIpO3Q8MCYmKHQ9MzkxKX1yZXR1cm4gcGVbdF09ZSx0fWZ1bmN0aW9uIHRh'@;
put 'KCl7cGU9ZnVuY3Rpb24gTGMoZSl7cmV0dXJuIGV8fChlPXt9KSxlWzBdPSJHZW5lcmFsIixlWzFdPSIwIixlWzJdPSIwLjAwIixlWzNdPSIjLCMjMCIsZVs0XT0iIywjIzAuMDAiLGVbOV09IjAlIixlWzEwXT0iMC4wMCUiLGVbMTFdPSIwLjAwRSswMCIsZVsxMl09IiMgPy8/IixlWzEzXT0i'@;
put 'IyA/Py8/PyIsZVsxNF09Im0vZC95eSIsZVsxNV09ImQtbW1tLXl5IixlWzE2XT0iZC1tbW0iLGVbMTddPSJtbW0teXkiLGVbMThdPSJoOm1tIEFNL1BNIixlWzE5XT0iaDptbTpzcyBBTS9QTSIsZVsyMF09Img6bW0iLGVbMjFdPSJoOm1tOnNzIixlWzIyXT0ibS9kL3l5IGg6bW0iLGVbMzdd'@;
put 'PSIjLCMjMCA7KCMsIyMwKSIsZVszOF09IiMsIyMwIDtbUmVkXSgjLCMjMCkiLGVbMzldPSIjLCMjMC4wMDsoIywjIzAuMDApIixlWzQwXT0iIywjIzAuMDA7W1JlZF0oIywjIzAuMDApIixlWzQ1XT0ibW06c3MiLGVbNDZdPSJbaF06bW06c3MiLGVbNDddPSJtbXNzLjAiLGVbNDhdPSIjIzAu'@;
put 'MEUrMCIsZVs0OV09IkAiLGVbNTZdPSciXHU0ZTBhXHU1MzQ4L1x1NGUwYlx1NTM0OCAiaGgiXHU2NjQyIm1tIlx1NTIwNiJzcyJcdTc5ZDIgIicsZX0oKX12YXIgYW89ezU6JyIkIiMsIyMwXyk7XFwoIiQiIywjIzBcXCknLDY6JyIkIiMsIyMwXyk7W1JlZF1cXCgiJCIjLCMjMFxcKScsNzon'@;
put 'IiQiIywjIzAuMDBfKTtcXCgiJCIjLCMjMC4wMFxcKScsODonIiQiIywjIzAuMDBfKTtbUmVkXVxcKCIkIiMsIyMwLjAwXFwpJywyMzoiR2VuZXJhbCIsMjQ6IkdlbmVyYWwiLDI1OiJHZW5lcmFsIiwyNjoiR2VuZXJhbCIsMjc6Im0vZC95eSIsMjg6Im0vZC95eSIsMjk6Im0vZC95eSIsMzA6'@;
put 'Im0vZC95eSIsMzE6Im0vZC95eSIsMzI6Img6bW06c3MiLDMzOiJoOm1tOnNzIiwzNDoiaDptbTpzcyIsMzU6Img6bW06c3MiLDM2OiJtL2QveXkiLDQxOidfKCogIywjIzBfKTtfKCogKCMsIyMwKTtfKCogIi0iXyk7XyhAXyknLDQyOidfKCIkIiogIywjIzBfKTtfKCIkIiogKCMsIyMwKTtf'@;
put 'KCIkIiogIi0iXyk7XyhAXyknLDQzOidfKCogIywjIzAuMDBfKTtfKCogKCMsIyMwLjAwKTtfKCogIi0iPz9fKTtfKEBfKScsNDQ6J18oIiQiKiAjLCMjMC4wMF8pO18oIiQiKiAoIywjIzAuMDApO18oIiQiKiAiLSI/P18pO18oQF8pJyw1MDoibS9kL3l5Iiw1MToibS9kL3l5Iiw1MjoibS9k'@;
put 'L3l5Iiw1MzoibS9kL3l5Iiw1NDoibS9kL3l5Iiw1NToibS9kL3l5Iiw1NjoibS9kL3l5Iiw1NzoibS9kL3l5Iiw1ODoibS9kL3l5Iiw1OToiMCIsNjA6IjAuMDAiLDYxOiIjLCMjMCIsNjI6IiMsIyMwLjAwIiw2MzonIiQiIywjIzBfKTtcXCgiJCIjLCMjMFxcKScsNjQ6JyIkIiMsIyMwXyk7'@;
put 'W1JlZF1cXCgiJCIjLCMjMFxcKScsNjU6JyIkIiMsIyMwLjAwXyk7XFwoIiQiIywjIzAuMDBcXCknLDY2OiciJCIjLCMjMC4wMF8pO1tSZWRdXFwoIiQiIywjIzAuMDBcXCknLDY3OiIwJSIsNjg6IjAuMDAlIiw2OToiIyA/Lz8iLDcwOiIjID8/Lz8/Iiw3MToibS9kL3l5Iiw3MjoibS9kL3l5'@;
put 'Iiw3MzoiZC1tbW0teXkiLDc0OiJkLW1tbSIsNzU6Im1tbS15eSIsNzY6Img6bW0iLDc3OiJoOm1tOnNzIiw3ODoibS9kL3l5IGg6bW0iLDc5OiJtbTpzcyIsODA6IltoXTptbTpzcyIsODE6Im1tc3MuMCJ9LEVpPS9bZERdK3xbbU1dK3xbeVllRV0rfFtIaF0rfFtTc10rL2csc289ZnVuY3Rp'@;
put 'b24oKXt2YXIgZT17dmVyc2lvbjoiMS4yLjAifSxyPWZ1bmN0aW9uIHQoKXtmb3IodmFyIHk9MCxQPW5ldyBBcnJheSgyNTYpLFI9MDsyNTYhPVI7KytSKVBbUl09eT0xJih5PTEmKHk9MSYoeT0xJih5PTEmKHk9MSYoeT0xJih5PTEmKHk9Uik/LTMwNjY3NDkxMl55Pj4+MTp5Pj4+MSk/LTMw'@;
put 'NjY3NDkxMl55Pj4+MTp5Pj4+MSk/LTMwNjY3NDkxMl55Pj4+MTp5Pj4+MSk/LTMwNjY3NDkxMl55Pj4+MTp5Pj4+MSk/LTMwNjY3NDkxMl55Pj4+MTp5Pj4+MSk/LTMwNjY3NDkxMl55Pj4+MTp5Pj4+MSk/LTMwNjY3NDkxMl55Pj4+MTp5Pj4+MSk/LTMwNjY3NDkxMl55Pj4+MTp5Pj4+MTty'@;
put 'ZXR1cm4gdHlwZW9mIEludDMyQXJyYXk8InUiP25ldyBJbnQzMkFycmF5KFApOlB9KCksbj1mdW5jdGlvbiBhKHkpe3ZhciBQPTAsUj0wLFY9MCxYPXR5cGVvZiBJbnQzMkFycmF5PCJ1Ij9uZXcgSW50MzJBcnJheSg0MDk2KTpuZXcgQXJyYXkoNDA5Nik7Zm9yKFY9MDsyNTYhPVY7KytWKVhb'@;
put 'Vl09eVtWXTtmb3IoVj0wOzI1NiE9VjsrK1YpZm9yKFI9eVtWXSxQPTI1NitWO1A8NDA5NjtQKz0yNTYpUj1YW1BdPVI+Pj44XnlbMjU1JlJdO3ZhciBiPVtdO2ZvcihWPTE7MTYhPVY7KytWKWJbVi0xXT10eXBlb2YgSW50MzJBcnJheTwidSI/WC5zdWJhcnJheSgyNTYqViwyNTYqVisyNTYp'@;
put 'Olguc2xpY2UoMjU2KlYsMjU2KlYrMjU2KTtyZXR1cm4gYn0ociksaT1uWzBdLHM9blsxXSxmPW5bMl0sYz1uWzNdLG89bls0XSxsPW5bNV0saD1uWzZdLHg9bls3XSxkPW5bOF0sdj1uWzldLHU9blsxMF0scD1uWzExXSxrPW5bMTJdLFQ9blsxM10sZz1uWzE0XTtyZXR1cm4gZS50YWJsZT1y'@;
put 'LGUuYnN0cj1mdW5jdGlvbiBOKHksUCl7Zm9yKHZhciBSPX5QLFY9MCxYPXkubGVuZ3RoO1Y8WDspUj1SPj4+OF5yWzI1NSYoUl55LmNoYXJDb2RlQXQoVisrKSldO3JldHVybn5SfSxlLmJ1Zj1mdW5jdGlvbiBNKHksUCl7Zm9yKHZhciBSPX5QLFY9eS5sZW5ndGgtMTUsWD0wO1g8VjspUj1n'@;
put 'W3lbWCsrXV4yNTUmUl1eVFt5W1grK11eUj4+OCYyNTVdXmtbeVtYKytdXlI+PjE2JjI1NV1ecFt5W1grK11eUj4+PjI0XV51W3lbWCsrXV1edlt5W1grK11dXmRbeVtYKytdXV54W3lbWCsrXV1eaFt5W1grK11dXmxbeVtYKytdXV5vW3lbWCsrXV1eY1t5W1grK11dXmZbeVtYKytdXV5zW3lb'@;
put 'WCsrXV1eaVt5W1grK11dXnJbeVtYKytdXTtmb3IoVis9MTU7WDxWOylSPVI+Pj44XnJbMjU1JihSXnlbWCsrXSldO3JldHVybn5SfSxlLnN0cj1mdW5jdGlvbiBJKHksUCl7Zm9yKHZhciBSPX5QLFY9MCxYPXkubGVuZ3RoLGI9MCxlZT0wO1Y8WDspKGI9eS5jaGFyQ29kZUF0KFYrKykpPDEy'@;
put 'OD9SPVI+Pj44XnJbMjU1JihSXmIpXTpiPDIwNDg/Uj0oUj1SPj4+OF5yWzI1NSYoUl4oMTkyfGI+PjYmMzEpKV0pPj4+OF5yWzI1NSYoUl4oMTI4fDYzJmIpKV06Yj49NTUyOTYmJmI8NTczNDQ/KGI9NjQrKDEwMjMmYiksZWU9MTAyMyZ5LmNoYXJDb2RlQXQoVisrKSxSPShSPShSPShSPVI+'@;
put 'Pj44XnJbMjU1JihSXigyNDB8Yj4+OCY3KSldKT4+PjheclsyNTUmKFJeKDEyOHxiPj4yJjYzKSldKT4+PjheclsyNTUmKFJeKDEyOHxlZT4+NiYxNXwoMyZiKTw8NCkpXSk+Pj44XnJbMjU1JihSXigxMjh8NjMmZWUpKV0pOlI9KFI9KFI9Uj4+PjheclsyNTUmKFJeKDIyNHxiPj4xMiYxNSkp'@;
put 'XSk+Pj44XnJbMjU1JihSXigxMjh8Yj4+NiY2MykpXSk+Pj44XnJbMjU1JihSXigxMjh8NjMmYikpXTtyZXR1cm5+Un0sZX0oKSx2ZT1mdW5jdGlvbigpe3ZhciBjLHQ9e307ZnVuY3Rpb24gYShtKXtpZigiLyI9PW0uY2hhckF0KG0ubGVuZ3RoLTEpKXJldHVybi0xPT09bS5zbGljZSgwLC0x'@;
put 'KS5pbmRleE9mKCIvIik/bTphKG0uc2xpY2UoMCwtMSkpO3ZhciBFPW0ubGFzdEluZGV4T2YoIi8iKTtyZXR1cm4tMT09PUU/bTptLnNsaWNlKDAsRSsxKX1mdW5jdGlvbiBuKG0pe2lmKCIvIj09bS5jaGFyQXQobS5sZW5ndGgtMSkpcmV0dXJuIG4obS5zbGljZSgwLC0xKSk7dmFyIEU9bS5s'@;
put 'YXN0SW5kZXhPZigiLyIpO3JldHVybi0xPT09RT9tOm0uc2xpY2UoRSsxKX1mdW5jdGlvbiBpKG0sRSl7InN0cmluZyI9PXR5cGVvZiBFJiYoRT1uZXcgRGF0ZShFKSk7dmFyIF89RS5nZXRIb3VycygpO189KF89Xzw8NnxFLmdldE1pbnV0ZXMoKSk8PDV8RS5nZXRTZWNvbmRzKCk+Pj4xLG0u'@;
put 'd3JpdGVfc2hpZnQoMixfKTt2YXIgdz1FLmdldEZ1bGxZZWFyKCktMTk4MDt3PSh3PXc8PDR8RS5nZXRNb250aCgpKzEpPDw1fEUuZ2V0RGF0ZSgpLG0ud3JpdGVfc2hpZnQoMix3KX1mdW5jdGlvbiBmKG0pe2hyKG0sMCk7Zm9yKHZhciBFPXt9LF89MDttLmw8PW0ubGVuZ3RoLTQ7KXt2YXIg'@;
put 'dz1tLnJlYWRfc2hpZnQoMiksUz1tLnJlYWRfc2hpZnQoMiksRj1tLmwrUyxMPXt9OzIxNTg5PT09dyYmKDEmKF89bS5yZWFkX3NoaWZ0KDEpKSYmKEwubXRpbWU9bS5yZWFkX3NoaWZ0KDQpKSxTPjUmJigyJl8mJihMLmF0aW1lPW0ucmVhZF9zaGlmdCg0KSksNCZfJiYoTC5jdGltZT1tLnJl'@;
put 'YWRfc2hpZnQoNCkpKSxMLm10aW1lJiYoTC5tdD1uZXcgRGF0ZSgxZTMqTC5tdGltZSkpKSxtLmw9RixFW3ddPUx9cmV0dXJuIEV9ZnVuY3Rpb24gbygpe3JldHVybiBjfHwoYz17fSl9ZnVuY3Rpb24gbChtLEUpe2lmKDgwPT1tWzBdJiY3NT09bVsxXSlyZXR1cm4gQ2MobSxFKTtpZigxMDk9'@;
put 'PSgzMnxtWzBdKSYmMTA1PT0oMzJ8bVsxXSkpcmV0dXJuIGZ1bmN0aW9uIE5nKG0sRSl7aWYoIm1pbWUtdmVyc2lvbjoiIT1jZShtLnNsaWNlKDAsMTMpKS50b0xvd2VyQ2FzZSgpKXRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgTUFEIGhlYWRlciIpO3ZhciBfPUUmJkUucm9vdHx8IiIs'@;
put 'dz0oU2UmJkJ1ZmZlci5pc0J1ZmZlcihtKT9tLnRvU3RyaW5nKCJiaW5hcnkiKTpjZShtKSkuc3BsaXQoIlxyXG4iKSxTPTAsRj0iIjtmb3IoUz0wO1M8dy5sZW5ndGg7KytTKWlmKC9eQ29udGVudC1Mb2NhdGlvbjovaS50ZXN0KEY9d1tTXSkmJihGPUYuc2xpY2UoRi5pbmRleE9mKCJmaWxl'@;
put 'IikpLF98fChfPUYuc2xpY2UoMCxGLmxhc3RJbmRleE9mKCIvIikrMSkpLEYuc2xpY2UoMCxfLmxlbmd0aCkhPV8pKWZvcig7Xy5sZW5ndGg+MCYmKF89KF89Xy5zbGljZSgwLF8ubGVuZ3RoLTEpKS5zbGljZSgwLF8ubGFzdEluZGV4T2YoIi8iKSsxKSxGLnNsaWNlKDAsXy5sZW5ndGgpIT1f'@;
put 'KTspO3ZhciBMPSh3WzFdfHwiIikubWF0Y2goL2JvdW5kYXJ5PSIoLio/KSIvKTtpZighTCl0aHJvdyBuZXcgRXJyb3IoIk1BRCBjYW5ub3QgZmluZCBib3VuZGFyeSIpO3ZhciB6PSItLSIrKExbMV18fCIiKSxIPXtGaWxlSW5kZXg6W10sRnVsbFBhdGhzOltdfTt5KEgpO3ZhciBxLG5lPTA7'@;
put 'Zm9yKFM9MDtTPHcubGVuZ3RoOysrUyl7dmFyIGhlPXdbU107aGUhPT16JiZoZSE9PXorIi0tInx8KG5lKysmJlJnKEgsdy5zbGljZShxLFMpLF8pLHE9Uyl9cmV0dXJuIEh9KG0sRSk7aWYobS5sZW5ndGg8NTEyKXRocm93IG5ldyBFcnJvcigiQ0ZCIGZpbGUgc2l6ZSAiK20ubGVuZ3RoKyIg'@;
put 'PCA1MTIiKTt2YXIgXyxTLEYsTCx6LFcsdz01MTIsQj1bXSxIPW0uc2xpY2UoMCw1MTIpO2hyKEgsMCk7dmFyIHE9ZnVuY3Rpb24gaChtKXtpZig4MD09bVttLmxdJiY3NT09bVttLmwrMV0pcmV0dXJuWzAsMF07bS5jaGsobGUsIkhlYWRlciBTaWduYXR1cmU6ICIpLG0ubCs9MTY7dmFyIEU9'@;
put 'bS5yZWFkX3NoaWZ0KDIsInUiKTtyZXR1cm5bbS5yZWFkX3NoaWZ0KDIsInUiKSxFXX0oSCk7c3dpdGNoKF89cVswXSl7Y2FzZSAzOnc9NTEyO2JyZWFrO2Nhc2UgNDp3PTQwOTY7YnJlYWs7Y2FzZSAwOmlmKDA9PXFbMV0pcmV0dXJuIENjKG0sRSk7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3Io'@;
put 'Ik1ham9yIFZlcnNpb246IEV4cGVjdGVkIDMgb3IgNCBzYXcgIitfKX01MTIhPT13JiZocihIPW0uc2xpY2UoMCx3KSwyOCk7dmFyIG5lPW0uc2xpY2UoMCx3KTshZnVuY3Rpb24geChtLEUpe3ZhciBfO3N3aXRjaChtLmwrPTIsXz1tLnJlYWRfc2hpZnQoMikpe2Nhc2UgOTppZigzIT1FKXRo'@;
put 'cm93IG5ldyBFcnJvcigiU2VjdG9yIFNoaWZ0OiBFeHBlY3RlZCA5IHNhdyAiK18pO2JyZWFrO2Nhc2UgMTI6aWYoNCE9RSl0aHJvdyBuZXcgRXJyb3IoIlNlY3RvciBTaGlmdDogRXhwZWN0ZWQgMTIgc2F3ICIrXyk7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlNlY3RvciBTaGlm'@;
put 'dDogRXhwZWN0ZWQgOSBvciAxMiBzYXcgIitfKX1tLmNoaygiMDYwMCIsIk1pbmkgU2VjdG9yIFNoaWZ0OiAiKSxtLmNoaygiMDAwMDAwMDAwMDAwIiwiUmVzZXJ2ZWQ6ICIpfShILF8pO3ZhciBoZT1ILnJlYWRfc2hpZnQoNCwiaSIpO2lmKDM9PT1fJiYwIT09aGUpdGhyb3cgbmV3IEVycm9y'@;
put 'KCIjIERpcmVjdG9yeSBTZWN0b3JzOiBFeHBlY3RlZCAwIHNhdyAiK2hlKTtILmwrPTQsTD1ILnJlYWRfc2hpZnQoNCwiaSIpLEgubCs9NCxILmNoaygiMDAxMDAwMDAiLCJNaW5pIFN0cmVhbSBDdXRvZmYgU2l6ZTogIiksej1ILnJlYWRfc2hpZnQoNCwiaSIpLFM9SC5yZWFkX3NoaWZ0KDQs'@;
put 'ImkiKSxXPUgucmVhZF9zaGlmdCg0LCJpIiksRj1ILnJlYWRfc2hpZnQoNCwiaSIpO2Zvcih2YXIgaWU9LTEsZmU9MDtmZTwxMDkmJiEoKGllPUgucmVhZF9zaGlmdCg0LCJpIikpPDApOysrZmUpQltmZV09aWU7dmFyIF9lPWZ1bmN0aW9uIGQobSxFKXtmb3IodmFyIF89TWF0aC5jZWlsKG0u'@;
put 'bGVuZ3RoL0UpLTEsdz1bXSxTPTE7UzxfOysrUyl3W1MtMV09bS5zbGljZShTKkUsKFMrMSkqRSk7cmV0dXJuIHdbXy0xXT1tLnNsaWNlKF8qRSksd30obSx3KTtwKFcsRixfZSx3LEIpO3ZhciBWZT1mdW5jdGlvbiBUKG0sRSxfLHcpe3ZhciBTPW0ubGVuZ3RoLEY9W10sTD1bXSx6PVtdLFc9'@;
put 'W10sQj13LTEsSD0wLHE9MCxuZT0wLGhlPTA7Zm9yKEg9MDtIPFM7KytIKWlmKHo9W10sKG5lPUgrRSk+PVMmJihuZS09UyksIUxbbmVdKXtXPVtdO3ZhciBpZT1bXTtmb3IocT1uZTtxPj0wOyl7aWVbcV09ITAsTFtxXT0hMCx6W3oubGVuZ3RoXT1xLFcucHVzaChtW3FdKTt2YXIgZmU9X1tN'@;
put 'YXRoLmZsb29yKDQqcS93KV07aWYodzw0KyhoZT00KnEmQikpdGhyb3cgbmV3IEVycm9yKCJGQVQgYm91bmRhcnkgY3Jvc3NlZDogIitxKyIgNCAiK3cpO2lmKCFtW2ZlXXx8aWVbcT1MdChtW2ZlXSxoZSldKWJyZWFrfUZbbmVdPXtub2Rlczp6LGRhdGE6emkoW1ddKX19cmV0dXJuIEZ9KF9l'@;
put 'LEwsQix3KTtWZVtMXS5uYW1lPSIhRGlyZWN0b3J5IixTPjAmJnohPT1lZSYmKFZlW3pdLm5hbWU9IiFNaW5pRkFUIiksVmVbQlswXV0ubmFtZT0iIUZBVCIsVmUuZmF0X2FkZHJzPUIsVmUuc3N6PXc7dmFyIG5yPVtdLEJyPVtdLFphPVtdOyhmdW5jdGlvbiBnKG0sRSxfLHcsUyxGLEwseil7'@;
put 'Zm9yKHZhciBoZSxXPTAsQj13Lmxlbmd0aD8yOjAsSD1FW21dLmRhdGEscT0wLG5lPTA7cTxILmxlbmd0aDtxKz0xMjgpe3ZhciBpZT1ILnNsaWNlKHEscSsxMjgpO2hyKGllLDY0KSxuZT1pZS5yZWFkX3NoaWZ0KDIpLGhlPXUwKGllLDAsbmUtQiksdy5wdXNoKGhlKTt2YXIgZmU9e25hbWU6'@;
put 'aGUsdHlwZTppZS5yZWFkX3NoaWZ0KDEpLGNvbG9yOmllLnJlYWRfc2hpZnQoMSksTDppZS5yZWFkX3NoaWZ0KDQsImkiKSxSOmllLnJlYWRfc2hpZnQoNCwiaSIpLEM6aWUucmVhZF9zaGlmdCg0LCJpIiksY2xzaWQ6aWUucmVhZF9zaGlmdCgxNiksc3RhdGU6aWUucmVhZF9zaGlmdCg0LCJp'@;
put 'Iiksc3RhcnQ6MCxzaXplOjB9OzAhPT1pZS5yZWFkX3NoaWZ0KDIpK2llLnJlYWRfc2hpZnQoMikraWUucmVhZF9zaGlmdCgyKStpZS5yZWFkX3NoaWZ0KDIpJiYoZmUuY3Q9TihpZSxpZS5sLTgpKSwwIT09aWUucmVhZF9zaGlmdCgyKStpZS5yZWFkX3NoaWZ0KDIpK2llLnJlYWRfc2hpZnQo'@;
put 'MikraWUucmVhZF9zaGlmdCgyKSYmKGZlLm10PU4oaWUsaWUubC04KSksZmUuc3RhcnQ9aWUucmVhZF9zaGlmdCg0LCJpIiksZmUuc2l6ZT1pZS5yZWFkX3NoaWZ0KDQsImkiKSxmZS5zaXplPDAmJmZlLnN0YXJ0PDAmJihmZS5zaXplPWZlLnR5cGU9MCxmZS5zdGFydD1lZSxmZS5uYW1lPSIi'@;
put 'KSw1PT09ZmUudHlwZT8oVz1mZS5zdGFydCxTPjAmJlchPT1lZSYmKEVbV10ubmFtZT0iIVN0cmVhbURhdGEiKSk6ZmUuc2l6ZT49NDA5Nj8oZmUuc3RvcmFnZT0iZmF0Iix2b2lkIDA9PT1FW2ZlLnN0YXJ0XSYmKEVbZmUuc3RhcnRdPWsoXyxmZS5zdGFydCxFLmZhdF9hZGRycyxFLnNzeikp'@;
put 'LEVbZmUuc3RhcnRdLm5hbWU9ZmUubmFtZSxmZS5jb250ZW50PUVbZmUuc3RhcnRdLmRhdGEuc2xpY2UoMCxmZS5zaXplKSk6KGZlLnN0b3JhZ2U9Im1pbmlmYXQiLGZlLnNpemU8MD9mZS5zaXplPTA6VyE9PWVlJiZmZS5zdGFydCE9PWVlJiZFW1ddJiYoZmUuY29udGVudD11KGZlLEVbV10u'@;
put 'ZGF0YSwoRVt6XXx8e30pLmRhdGEpKSksZmUuY29udGVudCYmaHIoZmUuY29udGVudCwwKSxGW2hlXT1mZSxMLnB1c2goZmUpfX0pKEwsVmUsX2UsbnIsUyx7fSxCcix6KSxmdW5jdGlvbiB2KG0sRSxfKXtmb3IodmFyIHc9MCxTPTAsRj0wLEw9MCx6PTAsVz1fLmxlbmd0aCxCPVtdLEg9W107'@;
put 'dzxXOysrdylCW3ddPUhbd109dyxFW3ddPV9bd107Zm9yKDt6PEgubGVuZ3RoOysreilTPW1bdz1IW3pdXS5MLEY9bVt3XS5SLEw9bVt3XS5DLEJbd109PT13JiYoLTEhPT1TJiZCW1NdIT09UyYmKEJbd109QltTXSksLTEhPT1GJiZCW0ZdIT09RiYmKEJbd109QltGXSkpLC0xIT09TCYmKEJb'@;
put 'TF09dyksLTEhPT1TJiZ3IT1CW3ddJiYoQltTXT1CW3ddLEgubGFzdEluZGV4T2YoUyk8eiYmSC5wdXNoKFMpKSwtMSE9PUYmJnchPUJbd10mJihCW0ZdPUJbd10sSC5sYXN0SW5kZXhPZihGKTx6JiZILnB1c2goRikpO2Zvcih3PTE7dzxXOysrdylCW3ddPT09dyYmKC0xIT09RiYmQltGXSE9'@;
put 'PUY/Qlt3XT1CW0ZdOi0xIT09UyYmQltTXSE9PVMmJihCW3ddPUJbU10pKTtmb3Iodz0xO3c8VzsrK3cpaWYoMCE9PW1bd10udHlwZSl7aWYoKHo9dykhPUJbel0pZG97RVt3XT1FW3o9Qlt6XV0rIi8iK0Vbd119d2hpbGUoMCE9PXomJi0xIT09Qlt6XSYmeiE9Qlt6XSk7Qlt3XT0tMX1mb3Io'@;
put 'RVswXSs9Ii8iLHc9MTt3PFc7Kyt3KTIhPT1tW3ddLnR5cGUmJihFW3ddKz0iLyIpfShCcixaYSxuciksbnIuc2hpZnQoKTt2YXIgUWE9e0ZpbGVJbmRleDpCcixGdWxsUGF0aHM6WmF9O3JldHVybiBFJiZFLnJhdyYmKFFhLnJhdz17aGVhZGVyOm5lLHNlY3RvcnM6X2V9KSxRYX1mdW5jdGlv'@;
put 'biB1KG0sRSxfKXtmb3IodmFyIFM9bS5zaXplLEY9W10sTD1tLnN0YXJ0O18mJlM+MCYmTD49MDspRi5wdXNoKEUuc2xpY2UoTCpiLEwqYitiKSksUy09YixMPUx0KF8sNCpMKTtyZXR1cm4gMD09PUYubGVuZ3RoP0coMCk6ZnIoRikuc2xpY2UoMCxtLnNpemUpfWZ1bmN0aW9uIHAobSxFLF8s'@;
put 'dyxTKXt2YXIgRj1lZTtpZihtPT09ZWUpe2lmKDAhPT1FKXRocm93IG5ldyBFcnJvcigiRElGQVQgY2hhaW4gc2hvcnRlciB0aGFuIGV4cGVjdGVkIil9ZWxzZSBpZigtMSE9PW0pe3ZhciBMPV9bbV0sej0odz4+PjIpLTE7aWYoIUwpcmV0dXJuO2Zvcih2YXIgVz0wO1c8eiYmKEY9THQoTCw0'@;
put 'KlcpKSE9PWVlOysrVylTLnB1c2goRik7cChMdChMLHctNCksRS0xLF8sdyxTKX19ZnVuY3Rpb24gayhtLEUsXyx3LFMpe3ZhciBGPVtdLEw9W107U3x8KFM9W10pO3ZhciB6PXctMSxXPTAsQj0wO2ZvcihXPUU7Vz49MDspe1NbV109ITAsRltGLmxlbmd0aF09VyxMLnB1c2gobVtXXSk7dmFy'@;
put 'IEg9X1tNYXRoLmZsb29yKDQqVy93KV07aWYodzw0KyhCPTQqVyZ6KSl0aHJvdyBuZXcgRXJyb3IoIkZBVCBib3VuZGFyeSBjcm9zc2VkOiAiK1crIiA0ICIrdyk7aWYoIW1bSF0pYnJlYWs7Vz1MdChtW0hdLEIpfXJldHVybntub2RlczpGLGRhdGE6emkoW0xdKX19ZnVuY3Rpb24gTihtLEUp'@;
put 'e3JldHVybiBuZXcgRGF0ZSgxZTMqKGNyKG0sRSs0KS8xZTcqTWF0aC5wb3coMiwzMikrY3IobSxFKS8xZTctMTE2NDQ0NzM2MDApKX1mdW5jdGlvbiB5KG0sRSl7dmFyIF89RXx8e30sdz1fLnJvb3R8fCJSb290IEVudHJ5IjtpZihtLkZ1bGxQYXRoc3x8KG0uRnVsbFBhdGhzPVtdKSxtLkZp'@;
put 'bGVJbmRleHx8KG0uRmlsZUluZGV4PVtdKSxtLkZ1bGxQYXRocy5sZW5ndGghPT1tLkZpbGVJbmRleC5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJpbmNvbnNpc3RlbnQgQ0ZCIHN0cnVjdHVyZSIpOzA9PT1tLkZ1bGxQYXRocy5sZW5ndGgmJihtLkZ1bGxQYXRoc1swXT13KyIvIixtLkZpbGVJ'@;
put 'bmRleFswXT17bmFtZTp3LHR5cGU6NX0pLF8uQ0xTSUQmJihtLkZpbGVJbmRleFswXS5jbHNpZD1fLkNMU0lEKSxmdW5jdGlvbiBQKG0pe3ZhciBFPSJceDAxU2gzM3RKNSI7aWYoIXZlLmZpbmQobSwiLyIrRSkpe3ZhciBfPUcoNCk7X1swXT01NSxfWzFdPV9bM109NTAsX1syXT01NCxtLkZp'@;
put 'bGVJbmRleC5wdXNoKHtuYW1lOkUsdHlwZToyLGNvbnRlbnQ6XyxzaXplOjQsTDo2OSxSOjY5LEM6Njl9KSxtLkZ1bGxQYXRocy5wdXNoKG0uRnVsbFBhdGhzWzBdK0UpLFIobSl9fShtKX1mdW5jdGlvbiBSKG0sRSl7eShtKTtmb3IodmFyIF89ITEsdz0hMSxTPW0uRnVsbFBhdGhzLmxlbmd0'@;
put 'aC0xO1M+PTA7LS1TKXt2YXIgRj1tLkZpbGVJbmRleFtTXTtzd2l0Y2goRi50eXBlKXtjYXNlIDA6dz9fPSEwOihtLkZpbGVJbmRleC5wb3AoKSxtLkZ1bGxQYXRocy5wb3AoKSk7YnJlYWs7Y2FzZSAxOmNhc2UgMjpjYXNlIDU6dz0hMCxpc05hTihGLlIqRi5MKkYuQykmJihfPSEwKSxGLlI+'@;
put 'LTEmJkYuTD4tMSYmRi5SPT1GLkwmJihfPSEwKTticmVhaztkZWZhdWx0Ol89ITB9fWlmKF98fEUpe3ZhciBMPW5ldyBEYXRlKDE5ODcsMSwxOSksej0wLFc9T2JqZWN0LmNyZWF0ZT9PYmplY3QuY3JlYXRlKG51bGwpOnt9LEI9W107Zm9yKFM9MDtTPG0uRnVsbFBhdGhzLmxlbmd0aDsrK1Mp'@;
put 'V1ttLkZ1bGxQYXRoc1tTXV09ITAsMCE9PW0uRmlsZUluZGV4W1NdLnR5cGUmJkIucHVzaChbbS5GdWxsUGF0aHNbU10sbS5GaWxlSW5kZXhbU11dKTtmb3IoUz0wO1M8Qi5sZW5ndGg7KytTKXt2YXIgSD1hKEJbU11bMF0pOyh3PVdbSF0pfHwoQi5wdXNoKFtILHtuYW1lOm4oSCkucmVwbGFj'@;
put 'ZSgiLyIsIiIpLHR5cGU6MSxjbHNpZDpkZSxjdDpMLG10OkwsY29udGVudDpudWxsfV0pLFdbSF09ITApfWZvcihCLnNvcnQoZnVuY3Rpb24oaGUsaWUpe3JldHVybiBmdW5jdGlvbiByKG0sRSl7Zm9yKHZhciBfPW0uc3BsaXQoIi8iKSx3PUUuc3BsaXQoIi8iKSxTPTAsRj0wLEw9TWF0aC5t'@;
put 'aW4oXy5sZW5ndGgsdy5sZW5ndGgpO1M8TDsrK1Mpe2lmKEY9X1tTXS5sZW5ndGgtd1tTXS5sZW5ndGgpcmV0dXJuIEY7aWYoX1tTXSE9d1tTXSlyZXR1cm4gX1tTXTx3W1NdPy0xOjF9cmV0dXJuIF8ubGVuZ3RoLXcubGVuZ3RofShoZVswXSxpZVswXSl9KSxtLkZ1bGxQYXRocz1bXSxtLkZp'@;
put 'bGVJbmRleD1bXSxTPTA7UzxCLmxlbmd0aDsrK1MpbS5GdWxsUGF0aHNbU109QltTXVswXSxtLkZpbGVJbmRleFtTXT1CW1NdWzFdO2ZvcihTPTA7UzxCLmxlbmd0aDsrK1Mpe3ZhciBxPW0uRmlsZUluZGV4W1NdLG5lPW0uRnVsbFBhdGhzW1NdO2lmKHEubmFtZT1uKG5lKS5yZXBsYWNlKCIv'@;
put 'IiwiIikscS5MPXEuUj1xLkM9LShxLmNvbG9yPTEpLHEuc2l6ZT1xLmNvbnRlbnQ/cS5jb250ZW50Lmxlbmd0aDowLHEuc3RhcnQ9MCxxLmNsc2lkPXEuY2xzaWR8fGRlLDA9PT1TKXEuQz1CLmxlbmd0aD4xPzE6LTEscS5zaXplPTAscS50eXBlPTU7ZWxzZSBpZigiLyI9PW5lLnNsaWNlKC0x'@;
put 'KSl7Zm9yKHo9UysxO3o8Qi5sZW5ndGgmJmEobS5GdWxsUGF0aHNbel0pIT1uZTsrK3opO2ZvcihxLkM9ej49Qi5sZW5ndGg/LTE6eix6PVMrMTt6PEIubGVuZ3RoJiZhKG0uRnVsbFBhdGhzW3pdKSE9YShuZSk7Kyt6KTtxLlI9ej49Qi5sZW5ndGg/LTE6eixxLnR5cGU9MX1lbHNlIGEobS5G'@;
put 'dWxsUGF0aHNbUysxXXx8IiIpPT1hKG5lKSYmKHEuUj1TKzEpLHEudHlwZT0yfX19ZnVuY3Rpb24gVihtLEUpe3ZhciBfPUV8fHt9O2lmKCJtYWQiPT1fLmZpbGVUeXBlKXJldHVybiBmdW5jdGlvbiBiZyhtLEUpe2Zvcih2YXIgXz1FfHx7fSx3PV8uYm91bmRhcnl8fCJTaGVldEpTIixTPVsi'@;
put 'TUlNRS1WZXJzaW9uOiAxLjAiLCdDb250ZW50LVR5cGU6IG11bHRpcGFydC9yZWxhdGVkOyBib3VuZGFyeT0iJysodz0iLS0tLS0tPSIrdykuc2xpY2UoMikrJyInLCIiLCIiLCIiXSxGPW0uRnVsbFBhdGhzWzBdLEw9Rix6PW0uRmlsZUluZGV4WzBdLFc9MTtXPG0uRnVsbFBhdGhzLmxlbmd0'@;
put 'aDsrK1cpaWYoTD1tLkZ1bGxQYXRoc1tXXS5zbGljZShGLmxlbmd0aCksKHo9bS5GaWxlSW5kZXhbV10pLnNpemUmJnouY29udGVudCYmIlx4MDFTaDMzdEo1IiE9TCl7TD1MLnJlcGxhY2UoL1tceDAwLVx4MDhceDBCXHgwQ1x4MEUtXHgxRlx4N0UtXHhGRl0vZyxmdW5jdGlvbihfZSl7cmV0'@;
put 'dXJuIl94IitfZS5jaGFyQ29kZUF0KDApLnRvU3RyaW5nKDE2KSsiXyJ9KS5yZXBsYWNlKC9bXHUwMDgwLVx1RkZGRl0vZyxmdW5jdGlvbihfZSl7cmV0dXJuIl91IitfZS5jaGFyQ29kZUF0KDApLnRvU3RyaW5nKDE2KSsiXyJ9KTtmb3IodmFyIEI9ei5jb250ZW50LEg9U2UmJkJ1ZmZlci5p'@;
put 'c0J1ZmZlcihCKT9CLnRvU3RyaW5nKCJiaW5hcnkiKTpjZShCKSxxPTAsbmU9TWF0aC5taW4oMTAyNCxILmxlbmd0aCksaGU9MCxpZT0wO2llPD1uZTsrK2llKShoZT1ILmNoYXJDb2RlQXQoaWUpKT49MzImJmhlPDEyOCYmKytxO3ZhciBmZT1xPj00Km5lLzU7Uy5wdXNoKHcpLFMucHVzaCgi'@;
put 'Q29udGVudC1Mb2NhdGlvbjogIisoXy5yb290fHwiZmlsZTovLy9DOi9TaGVldEpTLyIpK0wpLFMucHVzaCgiQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogIisoZmU/InF1b3RlZC1wcmludGFibGUiOiJiYXNlNjQiKSksUy5wdXNoKCJDb250ZW50LVR5cGU6ICIrQ2coeixMKSksUy5wdXNo'@;
put 'KCIiKSxTLnB1c2goZmU/T2coSCk6RGcoSCkpfXJldHVybiBTLnB1c2godysiLS1cclxuIiksUy5qb2luKCJcclxuIil9KG0sXyk7aWYoInppcCI9PT0oUihtKSxfLmZpbGVUeXBlKSlyZXR1cm4gZnVuY3Rpb24gQWcobSxFKXt2YXIgXz1FfHx7fSx3PVtdLFM9W10sRj1HKDEpLEw9Xy5jb21w'@;
put 'cmVzc2lvbj84OjAsej0wLEI9MCxIPTAscT0wLG5lPTAsaGU9bS5GdWxsUGF0aHNbMF0saWU9aGUsZmU9bS5GaWxlSW5kZXhbMF0sX2U9W10sVmU9MDtmb3IoQj0xO0I8bS5GdWxsUGF0aHMubGVuZ3RoOysrQilpZihpZT1tLkZ1bGxQYXRoc1tCXS5zbGljZShoZS5sZW5ndGgpLChmZT1tLkZp'@;
put 'bGVJbmRleFtCXSkuc2l6ZSYmZmUuY29udGVudCYmIlx4MDFTaDMzdEo1IiE9aWUpe3ZhciBDcj1xLG5yPUcoaWUubGVuZ3RoKTtmb3IoSD0wO0g8aWUubGVuZ3RoOysrSCluci53cml0ZV9zaGlmdCgxLDEyNyZpZS5jaGFyQ29kZUF0KEgpKTtucj1uci5zbGljZSgwLG5yLmwpLF9lW25lXT1z'@;
put 'by5idWYoZmUuY29udGVudCwwKTt2YXIgQnI9ZmUuY29udGVudDs4PT1MJiYoQnI9TyhCcikpLChGPUcoMzApKS53cml0ZV9zaGlmdCg0LDY3MzI0NzUyKSxGLndyaXRlX3NoaWZ0KDIsMjApLEYud3JpdGVfc2hpZnQoMix6KSxGLndyaXRlX3NoaWZ0KDIsTCksZmUubXQ/aShGLGZlLm10KTpG'@;
put 'LndyaXRlX3NoaWZ0KDQsMCksRi53cml0ZV9zaGlmdCgtNCw4Jno/MDpfZVtuZV0pLEYud3JpdGVfc2hpZnQoNCw4Jno/MDpCci5sZW5ndGgpLEYud3JpdGVfc2hpZnQoNCw4Jno/MDpmZS5jb250ZW50Lmxlbmd0aCksRi53cml0ZV9zaGlmdCgyLG5yLmxlbmd0aCksRi53cml0ZV9zaGlmdCgy'@;
put 'LDApLHErPUYubGVuZ3RoLHcucHVzaChGKSxxKz1uci5sZW5ndGgsdy5wdXNoKG5yKSxxKz1Cci5sZW5ndGgsdy5wdXNoKEJyKSw4JnomJigoRj1HKDEyKSkud3JpdGVfc2hpZnQoLTQsX2VbbmVdKSxGLndyaXRlX3NoaWZ0KDQsQnIubGVuZ3RoKSxGLndyaXRlX3NoaWZ0KDQsZmUuY29udGVu'@;
put 'dC5sZW5ndGgpLHErPUYubCx3LnB1c2goRikpLChGPUcoNDYpKS53cml0ZV9zaGlmdCg0LDMzNjM5MjQ4KSxGLndyaXRlX3NoaWZ0KDIsMCksRi53cml0ZV9zaGlmdCgyLDIwKSxGLndyaXRlX3NoaWZ0KDIseiksRi53cml0ZV9zaGlmdCgyLEwpLEYud3JpdGVfc2hpZnQoNCwwKSxGLndyaXRl'@;
put 'X3NoaWZ0KC00LF9lW25lXSksRi53cml0ZV9zaGlmdCg0LEJyLmxlbmd0aCksRi53cml0ZV9zaGlmdCg0LGZlLmNvbnRlbnQubGVuZ3RoKSxGLndyaXRlX3NoaWZ0KDIsbnIubGVuZ3RoKSxGLndyaXRlX3NoaWZ0KDIsMCksRi53cml0ZV9zaGlmdCgyLDApLEYud3JpdGVfc2hpZnQoMiwwKSxG'@;
put 'LndyaXRlX3NoaWZ0KDIsMCksRi53cml0ZV9zaGlmdCg0LDApLEYud3JpdGVfc2hpZnQoNCxDciksVmUrPUYubCxTLnB1c2goRiksVmUrPW5yLmxlbmd0aCxTLnB1c2gobnIpLCsrbmV9cmV0dXJuKEY9RygyMikpLndyaXRlX3NoaWZ0KDQsMTAxMDEwMjU2KSxGLndyaXRlX3NoaWZ0KDIsMCks'@;
put 'Ri53cml0ZV9zaGlmdCgyLDApLEYud3JpdGVfc2hpZnQoMixuZSksRi53cml0ZV9zaGlmdCgyLG5lKSxGLndyaXRlX3NoaWZ0KDQsVmUpLEYud3JpdGVfc2hpZnQoNCxxKSxGLndyaXRlX3NoaWZ0KDIsMCksZnIoW2ZyKHcpLGZyKFMpLEZdKX0obSxfKTt2YXIgdz1mdW5jdGlvbihoZSl7Zm9y'@;
put 'KHZhciBpZT0wLGZlPTAsX2U9MDtfZTxoZS5GaWxlSW5kZXgubGVuZ3RoOysrX2Upe3ZhciBWZT1oZS5GaWxlSW5kZXhbX2VdO2lmKFZlLmNvbnRlbnQpe3ZhciBDcj1WZS5jb250ZW50Lmxlbmd0aDtDcj4wJiYoQ3I8NDA5Nj9pZSs9Q3IrNjM+PjY6ZmUrPUNyKzUxMT4+OSl9fWZvcih2YXIg'@;
put 'bnI9aGUuRnVsbFBhdGhzLmxlbmd0aCszPj4yLFphPWllKzEyNz4+NyxRYT0oaWUrNz4+MykrZmUrbnIrWmEsWnQ9UWErMTI3Pj43LHRpPVp0PD0xMDk/MDpNYXRoLmNlaWwoKFp0LTEwOSkvMTI3KTtRYStadCt0aSsxMjc+Pjc+WnQ7KXRpPSsrWnQ8PTEwOT8wOk1hdGguY2VpbCgoWnQtMTA5'@;
put 'KS8xMjcpO3ZhciBtdD1bMSx0aSxadCxaYSxucixmZSxpZSwwXTtyZXR1cm4gaGUuRmlsZUluZGV4WzBdLnNpemU9aWU8PDYsbXRbN109KGhlLkZpbGVJbmRleFswXS5zdGFydD1tdFswXSttdFsxXSttdFsyXSttdFszXSttdFs0XSttdFs1XSkrKG10WzZdKzc+PjMpLG10fShtKSxTPUcod1s3'@;
put 'XTw8OSksRj0wLEw9MDtmb3IoRj0wO0Y8ODsrK0YpUy53cml0ZV9zaGlmdCgxLHJlW0ZdKTtmb3IoRj0wO0Y8ODsrK0YpUy53cml0ZV9zaGlmdCgyLDApO2ZvcihTLndyaXRlX3NoaWZ0KDIsNjIpLFMud3JpdGVfc2hpZnQoMiwzKSxTLndyaXRlX3NoaWZ0KDIsNjU1MzQpLFMud3JpdGVfc2hp'@;
put 'ZnQoMiw5KSxTLndyaXRlX3NoaWZ0KDIsNiksRj0wO0Y8MzsrK0YpUy53cml0ZV9zaGlmdCgyLDApO2ZvcihTLndyaXRlX3NoaWZ0KDQsMCksUy53cml0ZV9zaGlmdCg0LHdbMl0pLFMud3JpdGVfc2hpZnQoNCx3WzBdK3dbMV0rd1syXSt3WzNdLTEpLFMud3JpdGVfc2hpZnQoNCwwKSxTLndy'@;
put 'aXRlX3NoaWZ0KDQsNDA5NiksUy53cml0ZV9zaGlmdCg0LHdbM10/d1swXSt3WzFdK3dbMl0tMTplZSksUy53cml0ZV9zaGlmdCg0LHdbM10pLFMud3JpdGVfc2hpZnQoLTQsd1sxXT93WzBdLTE6ZWUpLFMud3JpdGVfc2hpZnQoNCx3WzFdKSxGPTA7RjwxMDk7KytGKVMud3JpdGVfc2hpZnQo'@;
put 'LTQsRjx3WzJdP3dbMV0rRjotMSk7aWYod1sxXSlmb3IoTD0wO0w8d1sxXTsrK0wpe2Zvcig7RjwyMzYrMTI3Kkw7KytGKVMud3JpdGVfc2hpZnQoLTQsRjx3WzJdP3dbMV0rRjotMSk7Uy53cml0ZV9zaGlmdCgtNCxMPT09d1sxXS0xP2VlOkwrMSl9dmFyIHo9ZnVuY3Rpb24oaGUpe2ZvcihM'@;
put 'Kz1oZTtGPEwtMTsrK0YpUy53cml0ZV9zaGlmdCgtNCxGKzEpO2hlJiYoKytGLFMud3JpdGVfc2hpZnQoLTQsZWUpKX07Zm9yKEw9Rj0wLEwrPXdbMV07RjxMOysrRilTLndyaXRlX3NoaWZ0KC00LHVlLkRJRlNFQ1QpO2ZvcihMKz13WzJdO0Y8TDsrK0YpUy53cml0ZV9zaGlmdCgtNCx1ZS5G'@;
put 'QVRTRUNUKTt6KHdbM10pLHood1s0XSk7Zm9yKHZhciBXPTAsQj0wLEg9bS5GaWxlSW5kZXhbMF07VzxtLkZpbGVJbmRleC5sZW5ndGg7KytXKShIPW0uRmlsZUluZGV4W1ddKS5jb250ZW50JiYhKChCPUguY29udGVudC5sZW5ndGgpPDQwOTYpJiYoSC5zdGFydD1MLHooQis1MTE+PjkpKTtm'@;
put 'b3Ioeih3WzZdKzc+PjMpOzUxMSZTLmw7KVMud3JpdGVfc2hpZnQoLTQsdWUuRU5ET0ZDSEFJTik7Zm9yKEw9Rj0wLFc9MDtXPG0uRmlsZUluZGV4Lmxlbmd0aDsrK1cpKEg9bS5GaWxlSW5kZXhbV10pLmNvbnRlbnQmJihCPUguY29udGVudC5sZW5ndGgpJiYhKEI+PTQwOTYpJiYoSC5zdGFy'@;
put 'dD1MLHooQis2Mz4+NikpO2Zvcig7NTExJlMubDspUy53cml0ZV9zaGlmdCgtNCx1ZS5FTkRPRkNIQUlOKTtmb3IoRj0wO0Y8d1s0XTw8MjsrK0Ype3ZhciBxPW0uRnVsbFBhdGhzW0ZdO2lmKHEmJjAhPT1xLmxlbmd0aCl7SD1tLkZpbGVJbmRleFtGXSwwPT09RiYmKEguc3RhcnQ9SC5zaXpl'@;
put 'P0guc3RhcnQtMTplZSk7dmFyIG5lPTA9PT1GJiZfLnJvb3R8fEgubmFtZTtpZihCPTIqKG5lLmxlbmd0aCsxKSxTLndyaXRlX3NoaWZ0KDY0LG5lLCJ1dGYxNmxlIiksUy53cml0ZV9zaGlmdCgyLEIpLFMud3JpdGVfc2hpZnQoMSxILnR5cGUpLFMud3JpdGVfc2hpZnQoMSxILmNvbG9yKSxT'@;
put 'LndyaXRlX3NoaWZ0KC00LEguTCksUy53cml0ZV9zaGlmdCgtNCxILlIpLFMud3JpdGVfc2hpZnQoLTQsSC5DKSxILmNsc2lkKVMud3JpdGVfc2hpZnQoMTYsSC5jbHNpZCwiaGV4Iik7ZWxzZSBmb3IoVz0wO1c8NDsrK1cpUy53cml0ZV9zaGlmdCg0LDApO1Mud3JpdGVfc2hpZnQoNCxILnN0'@;
put 'YXRlfHwwKSxTLndyaXRlX3NoaWZ0KDQsMCksUy53cml0ZV9zaGlmdCg0LDApLFMud3JpdGVfc2hpZnQoNCwwKSxTLndyaXRlX3NoaWZ0KDQsMCksUy53cml0ZV9zaGlmdCg0LEguc3RhcnQpLFMud3JpdGVfc2hpZnQoNCxILnNpemUpLFMud3JpdGVfc2hpZnQoNCwwKX1lbHNle2ZvcihXPTA7'@;
put 'VzwxNzsrK1cpUy53cml0ZV9zaGlmdCg0LDApO2ZvcihXPTA7VzwzOysrVylTLndyaXRlX3NoaWZ0KDQsLTEpO2ZvcihXPTA7VzwxMjsrK1cpUy53cml0ZV9zaGlmdCg0LDApfX1mb3IoRj0xO0Y8bS5GaWxlSW5kZXgubGVuZ3RoOysrRilpZigoSD1tLkZpbGVJbmRleFtGXSkuc2l6ZT49NDA5'@;
put 'NilpZihTLmw9SC5zdGFydCsxPDw5LFNlJiZCdWZmZXIuaXNCdWZmZXIoSC5jb250ZW50KSlILmNvbnRlbnQuY29weShTLFMubCwwLEguc2l6ZSksUy5sKz1ILnNpemUrNTExJi01MTI7ZWxzZXtmb3IoVz0wO1c8SC5zaXplOysrVylTLndyaXRlX3NoaWZ0KDEsSC5jb250ZW50W1ddKTtmb3Io'@;
put 'OzUxMSZXOysrVylTLndyaXRlX3NoaWZ0KDEsMCl9Zm9yKEY9MTtGPG0uRmlsZUluZGV4Lmxlbmd0aDsrK0YpaWYoKEg9bS5GaWxlSW5kZXhbRl0pLnNpemU+MCYmSC5zaXplPDQwOTYpaWYoU2UmJkJ1ZmZlci5pc0J1ZmZlcihILmNvbnRlbnQpKUguY29udGVudC5jb3B5KFMsUy5sLDAsSC5z'@;
put 'aXplKSxTLmwrPUguc2l6ZSs2MyYtNjQ7ZWxzZXtmb3IoVz0wO1c8SC5zaXplOysrVylTLndyaXRlX3NoaWZ0KDEsSC5jb250ZW50W1ddKTtmb3IoOzYzJlc7KytXKVMud3JpdGVfc2hpZnQoMSwwKX1pZihTZSlTLmw9Uy5sZW5ndGg7ZWxzZSBmb3IoO1MubDxTLmxlbmd0aDspUy53cml0ZV9z'@;
put 'aGlmdCgxLDApO3JldHVybiBTfXQudmVyc2lvbj0iMS4yLjEiO3ZhciBLLGI9NjQsZWU9LTIsbGU9ImQwY2YxMWUwYTFiMTFhZTEiLHJlPVsyMDgsMjA3LDE3LDIyNCwxNjEsMTc3LDI2LDIyNV0sZGU9IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIix1ZT17TUFYUkVHU0VDVDot'@;
put 'NixESUZTRUNUOi00LEZBVFNFQ1Q6LTMsRU5ET0ZDSEFJTjplZSxGUkVFU0VDVDotMSxIRUFERVJfU0lHTkFUVVJFOmxlLEhFQURFUl9NSU5PUl9WRVJTSU9OOiIzZTAwIixNQVhSRUdTSUQ6LTYsTk9TVFJFQU06LTEsSEVBREVSX0NMU0lEOmRlLEVudHJ5VHlwZXM6WyJ1bmtub3duIiwic3Rv'@;
put 'cmFnZSIsInN0cmVhbSIsImxvY2tieXRlcyIsInByb3BlcnR5Iiwicm9vdCJdfTtmdW5jdGlvbiBjZShtKXtmb3IodmFyIEU9bmV3IEFycmF5KG0ubGVuZ3RoKSxfPTA7XzxtLmxlbmd0aDsrK18pRVtfXT1TdHJpbmcuZnJvbUNoYXJDb2RlKG1bX10pO3JldHVybiBFLmpvaW4oIiIpfWZ1bmN0'@;
put 'aW9uIE8obSl7cmV0dXJuIEs/Sy5kZWZsYXRlUmF3U3luYyhtKTp5ZShtKX1mb3IodmFyIG0sRSxEPVsxNiwxNywxOCwwLDgsNyw5LDYsMTAsNSwxMSw0LDEyLDMsMTMsMiwxNCwxLDE1XSxqPVszLDQsNSw2LDcsOCw5LDEwLDExLDEzLDE1LDE3LDE5LDIzLDI3LDMxLDM1LDQzLDUxLDU5LDY3'@;
put 'LDgzLDk5LDExNSwxMzEsMTYzLDE5NSwyMjcsMjU4XSxzZT1bMSwyLDMsNCw1LDcsOSwxMywxNywyNSwzMyw0OSw2NSw5NywxMjksMTkzLDI1NywzODUsNTEzLDc2OSwxMDI1LDE1MzcsMjA0OSwzMDczLDQwOTcsNjE0NSw4MTkzLDEyMjg5LDE2Mzg1LDI0NTc3XSxRPXR5cGVvZiBVaW50OEFy'@;
put 'cmF5PCJ1IixZPVE/bmV3IFVpbnQ4QXJyYXkoMjU2KTpbXSxFZT0wO0VlPDI1NjsrK0VlKVlbRWVdPSh2b2lkIDAsMjU1JigoRT0xMzk1MzYmKChtPUVlKTw8MXxtPDwxMSl8NTU4MTQ0JihtPDw1fG08PDE1KSk+PjE2fEU+Pjh8RSkpO2Z1bmN0aW9uIEEobSxFKXt2YXIgXz1ZWzI1NSZtXTty'@;
put 'ZXR1cm4gRTw9OD9fPj4+OC1FOihfPV88PDh8WVttPj44JjI1NV0sRTw9MTY/Xz4+PjE2LUU6KF89Xzw8OHxZW20+PjE2JjI1NV0pPj4+MjQtRSl9ZnVuY3Rpb24gUGUobSxFKXt2YXIgXz03JkUsdz1FPj4+MztyZXR1cm4obVt3XXwoXzw9Nj8wOm1bdysxXTw8OCkpPj4+XyYzfWZ1bmN0aW9u'@;
put 'IEFlKG0sRSl7dmFyIF89NyZFLHc9RT4+PjM7cmV0dXJuKG1bd118KF88PTU/MDptW3crMV08PDgpKT4+Pl8mN31mdW5jdGlvbiBDZShtLEUpe3ZhciBfPTcmRSx3PUU+Pj4zO3JldHVybihtW3ddfChfPD0zPzA6bVt3KzFdPDw4KSk+Pj5fJjMxfWZ1bmN0aW9uIG9lKG0sRSl7dmFyIF89NyZF'@;
put 'LHc9RT4+PjM7cmV0dXJuKG1bd118KF88PTE/MDptW3crMV08PDgpKT4+Pl8mMTI3fWZ1bmN0aW9uIHFlKG0sRSxfKXt2YXIgdz03JkUsUz1FPj4+MyxMPW1bU10+Pj53O3JldHVybiBfPDgtd3x8KEx8PW1bUysxXTw8OC13LF88MTYtdyl8fChMfD1tW1MrMl08PDE2LXcsXzwyNC13KXx8KEx8'@;
put 'PW1bUyszXTw8MjQtdyksTCYoMTw8XyktMX1mdW5jdGlvbiBqcihtLEUsXyl7dmFyIHc9NyZFLFM9RT4+PjM7cmV0dXJuIHc8PTU/bVtTXXw9KDcmXyk8PHc6KG1bU118PV88PHcmMjU1LG1bUysxXT0oNyZfKT4+OC13KSxFKzN9ZnVuY3Rpb24gZnQobSxFLF8pe3JldHVybiBtW0U+Pj4zXXw9'@;
put 'Xz0oMSZfKTw8KDcmRSksRSsxfWZ1bmN0aW9uIHZ0KG0sRSxfKXt2YXIgUz1FPj4+MztyZXR1cm4gbVtTXXw9MjU1JihfPDw9NyZFKSxtW1MrMV09Xz4+Pj04LEUrOH1mdW5jdGlvbiBKYShtLEUsXyl7dmFyIFM9RT4+PjM7cmV0dXJuIG1bU118PTI1NSYoXzw8PTcmRSksbVtTKzFdPTI1NSYo'@;
put 'Xz4+Pj04KSxtW1MrMl09Xz4+PjgsRSsxNn1mdW5jdGlvbiBPdChtLEUpe3ZhciBfPW0ubGVuZ3RoLHc9MipfPkU/MipfOkUrNSxTPTA7aWYoXz49RSlyZXR1cm4gbTtpZihTZSl7dmFyIEY9bmkodyk7aWYobS5jb3B5KW0uY29weShGKTtlbHNlIGZvcig7UzxtLmxlbmd0aDsrK1MpRltTXT1t'@;
put 'W1NdO3JldHVybiBGfWlmKFEpe3ZhciBMPW5ldyBVaW50OEFycmF5KHcpO2lmKEwuc2V0KUwuc2V0KG0pO2Vsc2UgZm9yKDtTPF87KytTKUxbU109bVtTXTtyZXR1cm4gTH1yZXR1cm4gbS5sZW5ndGg9dyxtfWZ1bmN0aW9uIExyKG0pe2Zvcih2YXIgRT1uZXcgQXJyYXkobSksXz0wO188bTsr'@;
put 'K18pRVtfXT0wO3JldHVybiBFfWZ1bmN0aW9uIHB0KG0sRSxfKXt2YXIgdz0xLFM9MCxGPTAsTD0wLHo9MCxXPW0ubGVuZ3RoLEI9UT9uZXcgVWludDE2QXJyYXkoMzIpOkxyKDMyKTtmb3IoRj0wO0Y8MzI7KytGKUJbRl09MDtmb3IoRj1XO0Y8XzsrK0YpbVtGXT0wO1c9bS5sZW5ndGg7dmFy'@;
put 'IEg9UT9uZXcgVWludDE2QXJyYXkoVyk6THIoVyk7Zm9yKEY9MDtGPFc7KytGKUJbUz1tW0ZdXSsrLHc8UyYmKHc9UyksSFtGXT0wO2ZvcihCWzBdPTAsRj0xO0Y8PXc7KytGKUJbRisxNl09ej16K0JbRi0xXTw8MTtmb3IoRj0wO0Y8VzsrK0YpMCE9KHo9bVtGXSkmJihIW0ZdPUJbeisxNl0r'@;
put 'Kyk7dmFyIHE9MDtmb3IoRj0wO0Y8VzsrK0YpaWYoMCE9KHE9bVtGXSkpZm9yKHo9QShIW0ZdLHcpPj53LXEsTD0oMTw8dys0LXEpLTE7TD49MDstLUwpRVt6fEw8PHFdPTE1JnF8Rjw8NDtyZXR1cm4gd312YXIgSXQ9UT9uZXcgVWludDE2QXJyYXkoNTEyKTpMcig1MTIpLHFhPVE/bmV3IFVp'@;
put 'bnQxNkFycmF5KDMyKTpMcigzMik7aWYoIVEpe2Zvcih2YXIgeXI9MDt5cjw1MTI7Kyt5cilJdFt5cl09MDtmb3IoeXI9MDt5cjwzMjsrK3lyKXFhW3lyXT0wfSFmdW5jdGlvbigpe2Zvcih2YXIgbT1bXSxFPTA7RTwzMjtFKyspbS5wdXNoKDUpO3B0KG0scWEsMzIpO3ZhciBfPVtdO2ZvcihF'@;
put 'PTA7RTw9MTQzO0UrKylfLnB1c2goOCk7Zm9yKDtFPD0yNTU7RSsrKV8ucHVzaCg5KTtmb3IoO0U8PTI3OTtFKyspXy5wdXNoKDcpO2Zvcig7RTw9Mjg3O0UrKylfLnB1c2goOCk7cHQoXyxJdCwyODgpfSgpO3ZhciBjdD1mdW5jdGlvbigpe2Zvcih2YXIgRT1RP25ldyBVaW50OEFycmF5KDMy'@;
put 'NzY4KTpbXSxfPTAsdz0wO188c2UubGVuZ3RoLTE7KytfKWZvcig7dzxzZVtfKzFdOysrdylFW3ddPV87Zm9yKDt3PDMyNzY4OysrdylFW3ddPTI5O3ZhciBTPVE/bmV3IFVpbnQ4QXJyYXkoMjU5KTpbXTtmb3IoXz0wLHc9MDtfPGoubGVuZ3RoLTE7KytfKWZvcig7dzxqW18rMV07Kyt3KVNb'@;
put 'd109XztyZXR1cm4gZnVuY3Rpb24oVyxCKXtyZXR1cm4gVy5sZW5ndGg8OD9mdW5jdGlvbiBGKHosVyl7Zm9yKHZhciBCPTA7Qjx6Lmxlbmd0aDspe3ZhciBIPU1hdGgubWluKDY1NTM1LHoubGVuZ3RoLUIpO2ZvcihXLndyaXRlX3NoaWZ0KDEsKyhCK0g9PXoubGVuZ3RoKSksVy53cml0ZV9z'@;
put 'aGlmdCgyLEgpLFcud3JpdGVfc2hpZnQoMiw2NTUzNSZ+SCk7SC0tID4wOylXW1cubCsrXT16W0IrK119cmV0dXJuIFcubH0oVyxCKTpmdW5jdGlvbiBMKHosVyl7Zm9yKHZhciBCPTAsSD0wLHE9UT9uZXcgVWludDE2QXJyYXkoMzI3NjgpOltdO0g8ei5sZW5ndGg7KXt2YXIgbmU9TWF0aC5t'@;
put 'aW4oNjU1MzUsei5sZW5ndGgtSCk7aWYobmU8MTApe2Zvcig3JihCPWpyKFcsQiwrKEgrbmU9PXoubGVuZ3RoKSkpJiYoQis9OC0oNyZCKSksVy5sPUIvOHwwLFcud3JpdGVfc2hpZnQoMixuZSksVy53cml0ZV9zaGlmdCgyLDY1NTM1Jn5uZSk7bmUtLSA+MDspV1tXLmwrK109eltIKytdO0I9'@;
put 'OCpXLmx9ZWxzZXtCPWpyKFcsQiwrKEgrbmU9PXoubGVuZ3RoKSsyKTtmb3IodmFyIGhlPTA7bmUtLSA+MDspe3ZhciBpZT16W0hdLGZlPS0xLF9lPTA7aWYoKGZlPXFbaGU9MzI3NjcmKGhlPDw1XmllKV0pJiYoKGZlfD0tMzI3NjgmSCk+SCYmKGZlLT0zMjc2OCksZmU8SCkpZm9yKDt6W2Zl'@;
put 'K19lXT09eltIK19lXSYmX2U8MjUwOykrK19lO2lmKF9lPjIpeyhpZT1TW19lXSk8PTIyP0I9dnQoVyxCLFlbaWUrMV0+PjEpLTE6KHZ0KFcsQiwzKSx2dChXLEIrPTUsWVtpZS0yM10+PjUpLEIrPTMpO3ZhciBWZT1pZTw4PzA6aWUtND4+MjtWZT4wJiYoSmEoVyxCLF9lLWpbaWVdKSxCKz1W'@;
put 'ZSksQj12dChXLEIsWVtpZT1FW0gtZmVdXT4+MyksQi09Mzt2YXIgQ3I9aWU8ND8wOmllLTI+PjE7Q3I+MCYmKEphKFcsQixILWZlLXNlW2llXSksQis9Q3IpO2Zvcih2YXIgbnI9MDtucjxfZTsrK25yKXFbaGVdPTMyNzY3JkgsaGU9MzI3NjcmKGhlPDw1XnpbSF0pLCsrSDtuZS09X2UtMX1l'@;
put 'bHNlIGllPD0xNDM/aWUrPTQ4OkI9ZnQoVyxCLDEpLEI9dnQoVyxCLFlbaWVdKSxxW2hlXT0zMjc2NyZILCsrSH1CPXZ0KFcsQiwwKS0xfX1yZXR1cm4gVy5sPShCKzcpLzh8MCxXLmx9KFcsQil9fSgpO2Z1bmN0aW9uIHllKG0pe3ZhciBFPUcoNTArTWF0aC5mbG9vcigxLjEqbS5sZW5ndGgp'@;
put 'KSxfPWN0KG0sRSk7cmV0dXJuIEUuc2xpY2UoMCxfKX12YXIgWmU9UT9uZXcgVWludDE2QXJyYXkoMzI3NjgpOkxyKDMyNzY4KSxLcj1RP25ldyBVaW50MTZBcnJheSgzMjc2OCk6THIoMzI3NjgpLHNyPVE/bmV3IFVpbnQxNkFycmF5KDEyOCk6THIoMTI4KSxxdD0xLEZjPTE7ZnVuY3Rpb24g'@;
put 'U2cobSxFKXt2YXIgXz1DZShtLEUpKzI1Nyx3PUNlKG0sRSs9NSkrMSxTPWZ1bmN0aW9uIExlKG0sRSl7dmFyIF89NyZFLHc9RT4+PjM7cmV0dXJuKG1bd118KF88PTQ/MDptW3crMV08PDgpKT4+Pl8mMTV9KG0sRSs9NSkrNDtFKz00O2Zvcih2YXIgRj0wLEw9UT9uZXcgVWludDhBcnJheSgx'@;
put 'OSk6THIoMTkpLHo9WzAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDBdLFc9MSxCPVE/bmV3IFVpbnQ4QXJyYXkoOCk6THIoOCksSD1RP25ldyBVaW50OEFycmF5KDgpOkxyKDgpLHE9TC5sZW5ndGgsbmU9MDtuZTxTOysrbmUpTFtEW25lXV09Rj1BZShtLEUpLFc8RiYmKFc9'@;
put 'RiksQltGXSsrLEUrPTM7dmFyIGhlPTA7Zm9yKEJbMF09MCxuZT0xO25lPD1XOysrbmUpSFtuZV09aGU9aGUrQltuZS0xXTw8MTtmb3IobmU9MDtuZTxxOysrbmUpMCE9KGhlPUxbbmVdKSYmKHpbbmVdPUhbaGVdKyspO3ZhciBpZT0wO2ZvcihuZT0wO25lPHE7KytuZSlpZigwIT0oaWU9TFtu'@;
put 'ZV0pKXtoZT1ZW3pbbmVdXT4+OC1pZTtmb3IodmFyIGZlPSgxPDw3LWllKS0xO2ZlPj0wOy0tZmUpc3JbaGV8ZmU8PGllXT03JmllfG5lPDwzfXZhciBfZT1bXTtmb3IoVz0xO19lLmxlbmd0aDxfK3c7KXN3aXRjaChoZT1zcltvZShtLEUpXSxFKz03JmhlLGhlPj4+PTMpe2Nhc2UgMTY6Zm9y'@;
put 'KEY9MytQZShtLEUpLEUrPTIsaGU9X2VbX2UubGVuZ3RoLTFdO0YtLSA+MDspX2UucHVzaChoZSk7YnJlYWs7Y2FzZSAxNzpmb3IoRj0zK0FlKG0sRSksRSs9MztGLS0gPjA7KV9lLnB1c2goMCk7YnJlYWs7Y2FzZSAxODpmb3IoRj0xMStvZShtLEUpLEUrPTc7Ri0tID4wOylfZS5wdXNoKDAp'@;
put 'O2JyZWFrO2RlZmF1bHQ6X2UucHVzaChoZSksVzxoZSYmKFc9aGUpfXZhciBWZT1fZS5zbGljZSgwLF8pLENyPV9lLnNsaWNlKF8pO2ZvcihuZT1fO25lPDI4NjsrK25lKVZlW25lXT0wO2ZvcihuZT13O25lPDMwOysrbmUpQ3JbbmVdPTA7cmV0dXJuIHF0PXB0KFZlLFplLDI4NiksRmM9cHQo'@;
put 'Q3IsS3IsMzApLEV9ZnVuY3Rpb24geWMobSxFKXt2YXIgdz1mdW5jdGlvbiBGZyhtLEUpe2lmKDM9PW1bMF0mJiEoMyZtWzFdKSlyZXR1cm5bX3QoRSksMl07Zm9yKHZhciBfPTAsdz0wLFM9bmkoRXx8MTw8MTgpLEY9MCxMPVMubGVuZ3RoPj4+MCx6PTAsVz0wOyEoMSZ3KTspaWYodz1BZSht'@;
put 'LF8pLF8rPTMsdz4+PjEpZm9yKHc+PjE9PTE/KHo9OSxXPTUpOihfPVNnKG0sXyksej1xdCxXPUZjKTs7KXshRSYmTDxGKzMyNzY3JiYoTD0oUz1PdChTLEYrMzI3NjcpKS5sZW5ndGgpO3ZhciBIPXFlKG0sXyx6KSxxPXc+Pj4xPT0xP0l0W0hdOlplW0hdO2lmKF8rPTE1JnEsKHE+Pj49NCk+'@;
put 'Pj44JjI1NSl7aWYoMjU2PT1xKWJyZWFrO3ZhciBuZT0ocS09MjU3KTw4PzA6cS00Pj4yO25lPjUmJihuZT0wKTt2YXIgaGU9RitqW3FdO25lPjAmJihoZSs9cWUobSxfLG5lKSxfKz1uZSksSD1xZShtLF8sVyksXys9MTUmKHE9dz4+PjE9PTE/cWFbSF06S3JbSF0pO3ZhciBpZT0ocT4+Pj00'@;
put 'KTw0PzA6cS0yPj4xLGZlPXNlW3FdO2ZvcihpZT4wJiYoZmUrPXFlKG0sXyxpZSksXys9aWUpLCFFJiZMPGhlJiYoTD0oUz1PdChTLGhlKzEwMCkpLmxlbmd0aCk7RjxoZTspU1tGXT1TW0YtZmVdLCsrRn1lbHNlIFNbRisrXT1xfWVsc2V7NyZfJiYoXys9OC0oNyZfKSk7dmFyIEI9bVtfPj4+'@;
put 'M118bVsxKyhfPj4+MyldPDw4O2lmKF8rPTMyLEI+MClmb3IoIUUmJkw8RitCJiYoTD0oUz1PdChTLEYrQikpLmxlbmd0aCk7Qi0tID4wOylTW0YrK109bVtfPj4+M10sXys9OH1yZXR1cm4gRT9bUyxfKzc+Pj4zXTpbUy5zbGljZSgwLEYpLF8rNz4+PjNdfShtLnNsaWNlKG0ubHx8MCksRSk7'@;
put 'cmV0dXJuIG0ubCs9d1sxXSx3WzBdfWZ1bmN0aW9uIEFjKG0sRSl7aWYoIW0pdGhyb3cgbmV3IEVycm9yKEUpO3R5cGVvZiBjb25zb2xlPCJ1IiYmY29uc29sZS5lcnJvcihFKX1mdW5jdGlvbiBDYyhtLEUpe3ZhciBfPW07aHIoXywwKTt2YXIgRj17RmlsZUluZGV4OltdLEZ1bGxQYXRoczpb'@;
put 'XX07eShGLHtyb290OkUucm9vdH0pO2Zvcih2YXIgTD1fLmxlbmd0aC00Oyg4MCE9X1tMXXx8NzUhPV9bTCsxXXx8NSE9X1tMKzJdfHw2IT1fW0wrM10pJiZMPj0wOyktLUw7Xy5sPUwrNCxfLmwrPTQ7dmFyIHo9Xy5yZWFkX3NoaWZ0KDIpO18ubCs9Njt2YXIgVz1fLnJlYWRfc2hpZnQoNCk7'@;
put 'Zm9yKF8ubD1XLEw9MDtMPHo7KytMKXtfLmwrPTIwO3ZhciBCPV8ucmVhZF9zaGlmdCg0KSxIPV8ucmVhZF9zaGlmdCg0KSxxPV8ucmVhZF9zaGlmdCgyKSxuZT1fLnJlYWRfc2hpZnQoMiksaGU9Xy5yZWFkX3NoaWZ0KDIpO18ubCs9ODt2YXIgaWU9Xy5yZWFkX3NoaWZ0KDQpLGZlPWYoXy5z'@;
put 'bGljZShfLmwrcSxfLmwrcStuZSkpO18ubCs9cStuZStoZTt2YXIgX2U9Xy5sO18ubD1pZSs0LHlnKF8sQixILEYsZmUpLF8ubD1fZX1yZXR1cm4gRn1mdW5jdGlvbiB5ZyhtLEUsXyx3LFMpe20ubCs9Mjt2YXIgRj1tLnJlYWRfc2hpZnQoMiksTD1tLnJlYWRfc2hpZnQoMiksej1mdW5jdGlv'@;
put 'biBzKG0pe3ZhciBFPTY1NTM1Jm0ucmVhZF9zaGlmdCgyKSxfPTY1NTM1Jm0ucmVhZF9zaGlmdCgyKSx3PW5ldyBEYXRlLFM9MzEmXyxGPTE1JihfPj4+PTUpO18+Pj49NCx3LnNldE1pbGxpc2Vjb25kcygwKSx3LnNldEZ1bGxZZWFyKF8rMTk4MCksdy5zZXRNb250aChGLTEpLHcuc2V0RGF0'@;
put 'ZShTKTt2YXIgTD0zMSZFLHo9NjMmKEU+Pj49NSk7cmV0dXJuIHcuc2V0SG91cnMoRT4+Pj02KSx3LnNldE1pbnV0ZXMoeiksdy5zZXRTZWNvbmRzKEw8PDEpLHd9KG0pO2lmKDgyNTcmRil0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIFpJUCBlbmNyeXB0aW9uIik7bS5yZWFkX3NoaWZ0'@;
put 'KDQpO2Zvcih2YXIgQj1tLnJlYWRfc2hpZnQoNCksSD1tLnJlYWRfc2hpZnQoNCkscT1tLnJlYWRfc2hpZnQoMiksbmU9bS5yZWFkX3NoaWZ0KDIpLGhlPSIiLGllPTA7aWU8cTsrK2llKWhlKz1TdHJpbmcuZnJvbUNoYXJDb2RlKG1bbS5sKytdKTtpZihuZSl7dmFyIGZlPWYobS5zbGljZSht'@;
put 'LmwsbS5sK25lKSk7KGZlWzIxNTg5XXx8e30pLm10JiYoej1mZVsyMTU4OV0ubXQpLCgoU3x8e30pWzIxNTg5XXx8e30pLm10JiYoej1TWzIxNTg5XS5tdCl9bS5sKz1uZTt2YXIgX2U9bS5zbGljZShtLmwsbS5sK0IpO3N3aXRjaChMKXtjYXNlIDg6X2U9ZnVuY3Rpb24gVShtLEUpe2lmKCFL'@;
put 'KXJldHVybiB5YyhtLEUpO3ZhciB3PW5ldygwLEsuSW5mbGF0ZVJhdyksUz13Ll9wcm9jZXNzQ2h1bmsobS5zbGljZShtLmwpLHcuX2ZpbmlzaEZsdXNoRmxhZyk7cmV0dXJuIG0ubCs9dy5ieXRlc1JlYWQsU30obSxIKTticmVhaztjYXNlIDA6YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJy'@;
put 'b3IoIlVuc3VwcG9ydGVkIFpJUCBDb21wcmVzc2lvbiBtZXRob2QgIitMKX12YXIgVmU9ITE7OCZGJiYoMTM0Njk1NzYwPT1tLnJlYWRfc2hpZnQoNCkmJihtLnJlYWRfc2hpZnQoNCksVmU9ITApLEI9bS5yZWFkX3NoaWZ0KDQpLEg9bS5yZWFkX3NoaWZ0KDQpKSxCIT1FJiZBYyhWZSwiQmFk'@;
put 'IGNvbXByZXNzZWQgc2l6ZTogIitFKyIgIT0gIitCKSxIIT1fJiZBYyhWZSwiQmFkIHVuY29tcHJlc3NlZCBzaXplOiAiK18rIiAhPSAiK0gpLHJpKHcsaGUsX2Use3Vuc2FmZTohMCxtdDp6fSl9dmFyIFAwPXtodG06InRleHQvaHRtbCIseG1sOiJ0ZXh0L3htbCIsZ2lmOiJpbWFnZS9naWYi'@;
put 'LGpwZzoiaW1hZ2UvanBlZyIscG5nOiJpbWFnZS9wbmciLG1zbzoiYXBwbGljYXRpb24veC1tc28iLHRobXg6ImFwcGxpY2F0aW9uL3ZuZC5tcy1vZmZpY2V0aGVtZSIsc2gzM3RqNToiYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtIn07ZnVuY3Rpb24gQ2cobSxFKXtpZihtLmN0eXBlKXJldHVy'@;
put 'biBtLmN0eXBlO3ZhciBfPW0ubmFtZXx8IiIsdz1fLm1hdGNoKC9cLihbXlwuXSspJC8pO3JldHVybiB3JiZQMFt3WzFdXXx8RSYmKHc9KF89RSkubWF0Y2goL1tcLlxcXShbXlwuXFxdKSskLykpJiZQMFt3WzFdXT9QMFt3WzFdXToiYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtIn1mdW5jdGlv'@;
put 'biBEZyhtKXtmb3IodmFyIEU9Z2EobSksXz1bXSx3PTA7dzxFLmxlbmd0aDt3Kz03NilfLnB1c2goRS5zbGljZSh3LHcrNzYpKTtyZXR1cm4gXy5qb2luKCJcclxuIikrIlxyXG4ifWZ1bmN0aW9uIE9nKG0pe3ZhciBFPW0ucmVwbGFjZSgvW1x4MDAtXHgwOFx4MEJceDBDXHgwRS1ceDFGXHg3'@;
put 'RS1ceEZGPV0vZyxmdW5jdGlvbihCKXt2YXIgSD1CLmNoYXJDb2RlQXQoMCkudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCk7cmV0dXJuIj0iKygxPT1ILmxlbmd0aD8iMCIrSDpIKX0pOyJcbiI9PShFPUUucmVwbGFjZSgvICQvZ20sIj0yMCIpLnJlcGxhY2UoL1x0JC9nbSwiPTA5IikpLmNo'@;
put 'YXJBdCgwKSYmKEU9Ij0wRCIrRS5zbGljZSgxKSk7Zm9yKHZhciBfPVtdLHc9KEU9RS5yZXBsYWNlKC9ccig/IVxuKS9nbSwiPTBEIikucmVwbGFjZSgvXG5cbi9nbSwiXG49MEEiKS5yZXBsYWNlKC8oW15cclxuXSlcbi9nbSwiJDE9MEEiKSkuc3BsaXQoIlxyXG4iKSxTPTA7Uzx3Lmxlbmd0'@;
put 'aDsrK1Mpe3ZhciBGPXdbU107aWYoMCE9Ri5sZW5ndGgpZm9yKHZhciBMPTA7TDxGLmxlbmd0aDspe3ZhciB6PTc2LFc9Ri5zbGljZShMLEwreik7Ij0iPT1XLmNoYXJBdCh6LTEpP3otLToiPSI9PVcuY2hhckF0KHotMik/ei09MjoiPSI9PVcuY2hhckF0KHotMykmJih6LT0zKSxXPUYuc2xp'@;
put 'Y2UoTCxMK3opLChMKz16KTxGLmxlbmd0aCYmKFcrPSI9IiksXy5wdXNoKFcpfWVsc2UgXy5wdXNoKCIiKX1yZXR1cm4gXy5qb2luKCJcclxuIil9ZnVuY3Rpb24gUmcobSxFLF8pe2Zvcih2YXIgTCx3PSIiLFM9IiIsRj0iIix6PTA7ejwxMDsrK3ope3ZhciBXPUVbel07aWYoIVd8fFcubWF0'@;
put 'Y2goL15ccyokLykpYnJlYWs7dmFyIEI9Vy5tYXRjaCgvXiguKj8pOlxzKihbXlxzXS4qKSQvKTtpZihCKXN3aXRjaChCWzFdLnRvTG93ZXJDYXNlKCkpe2Nhc2UiY29udGVudC1sb2NhdGlvbiI6dz1CWzJdLnRyaW0oKTticmVhaztjYXNlImNvbnRlbnQtdHlwZSI6Rj1CWzJdLnRyaW0oKTti'@;
put 'cmVhaztjYXNlImNvbnRlbnQtdHJhbnNmZXItZW5jb2RpbmciOlM9QlsyXS50cmltKCl9fXN3aXRjaCgrK3osUy50b0xvd2VyQ2FzZSgpKXtjYXNlImJhc2U2NCI6TD1JcihPcihFLnNsaWNlKHopLmpvaW4oIiIpKSk7YnJlYWs7Y2FzZSJxdW90ZWQtcHJpbnRhYmxlIjpMPWZ1bmN0aW9uIEln'@;
put 'KG0pe2Zvcih2YXIgRT1bXSxfPTA7XzxtLmxlbmd0aDsrK18pe2Zvcih2YXIgdz1tW19dO188PW0ubGVuZ3RoJiYiPSI9PXcuY2hhckF0KHcubGVuZ3RoLTEpOyl3PXcuc2xpY2UoMCx3Lmxlbmd0aC0xKSttWysrX107RS5wdXNoKHcpfWZvcih2YXIgUz0wO1M8RS5sZW5ndGg7KytTKUVbU109'@;
put 'RVtTXS5yZXBsYWNlKC9bPV1bMC05QS1GYS1mXXsyfS9nLGZ1bmN0aW9uKEYpe3JldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKHBhcnNlSW50KEYuc2xpY2UoMSksMTYpKX0pO3JldHVybiBJcihFLmpvaW4oIlxyXG4iKSl9KEUuc2xpY2UoeikpO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVy'@;
put 'cm9yKCJVbnN1cHBvcnRlZCBDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nICIrUyl9dmFyIEg9cmkobSx3LnNsaWNlKF8ubGVuZ3RoKSxMLHt1bnNhZmU6ITB9KTtGJiYoSC5jdHlwZT1GKX1mdW5jdGlvbiByaShtLEUsXyx3KXt2YXIgUz13JiZ3LnVuc2FmZTtTfHx5KG0pO3ZhciBGPSFTJiZ2'@;
put 'ZS5maW5kKG0sRSk7aWYoIUYpe3ZhciBMPW0uRnVsbFBhdGhzWzBdO0Uuc2xpY2UoMCxMLmxlbmd0aCk9PUw/TD1FOigiLyIhPUwuc2xpY2UoLTEpJiYoTCs9Ii8iKSxMPShMK0UpLnJlcGxhY2UoIi8vIiwiLyIpKSxGPXtuYW1lOm4oRSksdHlwZToyfSxtLkZpbGVJbmRleC5wdXNoKEYpLG0u'@;
put 'RnVsbFBhdGhzLnB1c2goTCksU3x8dmUudXRpbHMuY2ZiX2djKG0pfXJldHVybiBGLmNvbnRlbnQ9XyxGLnNpemU9Xz9fLmxlbmd0aDowLHcmJih3LkNMU0lEJiYoRi5jbHNpZD13LkNMU0lEKSx3Lm10JiYoRi5tdD13Lm10KSx3LmN0JiYoRi5jdD13LmN0KSksRn1yZXR1cm4gdC5maW5kPWZ1'@;
put 'bmN0aW9uIFgobSxFKXt2YXIgXz1tLkZ1bGxQYXRocy5tYXAoZnVuY3Rpb24oVyl7cmV0dXJuIFcudG9VcHBlckNhc2UoKX0pLHc9Xy5tYXAoZnVuY3Rpb24oVyl7dmFyIEI9Vy5zcGxpdCgiLyIpO3JldHVybiBCW0IubGVuZ3RoLSgiLyI9PVcuc2xpY2UoLTEpPzI6MSldfSksUz0hMTs0Nz09'@;
put 'PUUuY2hhckNvZGVBdCgwKT8oUz0hMCxFPV9bMF0uc2xpY2UoMCwtMSkrRSk6Uz0tMSE9PUUuaW5kZXhPZigiLyIpO3ZhciBGPUUudG9VcHBlckNhc2UoKSxMPSEwPT09Uz9fLmluZGV4T2YoRik6dy5pbmRleE9mKEYpO2lmKC0xIT09TClyZXR1cm4gbS5GaWxlSW5kZXhbTF07dmFyIHo9IUYu'@;
put 'bWF0Y2god2EpO2ZvcihGPUYucmVwbGFjZShkciwiIikseiYmKEY9Ri5yZXBsYWNlKHdhLCIhIikpLEw9MDtMPF8ubGVuZ3RoOysrTClpZigoej9fW0xdLnJlcGxhY2Uod2EsIiEiKTpfW0xdKS5yZXBsYWNlKGRyLCIiKT09Rnx8KHo/d1tMXS5yZXBsYWNlKHdhLCIhIik6d1tMXSkucmVwbGFj'@;
put 'ZShkciwiIik9PUYpcmV0dXJuIG0uRmlsZUluZGV4W0xdO3JldHVybiBudWxsfSx0LnJlYWQ9ZnVuY3Rpb24gSShtLEUpe3ZhciBfPUUmJkUudHlwZTtzd2l0Y2goX3x8U2UmJkJ1ZmZlci5pc0J1ZmZlcihtKSYmKF89ImJ1ZmZlciIpLF98fCJiYXNlNjQiKXtjYXNlImZpbGUiOnJldHVybiBm'@;
put 'dW5jdGlvbiBNKG0sRSl7cmV0dXJuIG8oKSxsKGMucmVhZEZpbGVTeW5jKG0pLEUpfShtLEUpO2Nhc2UiYmFzZTY0IjpyZXR1cm4gbChJcihPcihtKSksRSk7Y2FzZSJiaW5hcnkiOnJldHVybiBsKElyKG0pLEUpfXJldHVybiBsKG0sRSl9LHQucGFyc2U9bCx0LndyaXRlPWZ1bmN0aW9uIHhl'@;
put 'KG0sRSl7dmFyIF89VihtLEUpO3N3aXRjaChFJiZFLnR5cGV8fCJidWZmZXIiKXtjYXNlImZpbGUiOnJldHVybiBvKCksYy53cml0ZUZpbGVTeW5jKEUuZmlsZW5hbWUsXyksXztjYXNlImJpbmFyeSI6cmV0dXJuInN0cmluZyI9PXR5cGVvZiBfP186Y2UoXyk7Y2FzZSJiYXNlNjQiOnJldHVy'@;
put 'biBnYSgic3RyaW5nIj09dHlwZW9mIF8/XzpjZShfKSk7Y2FzZSJidWZmZXIiOmlmKFNlKXJldHVybiBCdWZmZXIuaXNCdWZmZXIoXyk/XzpvdChfKTtjYXNlImFycmF5IjpyZXR1cm4ic3RyaW5nIj09dHlwZW9mIF8/SXIoXyk6X31yZXR1cm4gX30sdC53cml0ZUZpbGU9ZnVuY3Rpb24gRmUo'@;
put 'bSxFLF8pe28oKTt2YXIgdz1WKG0sXyk7Yy53cml0ZUZpbGVTeW5jKEUsdyl9LHQudXRpbHM9e2NmYl9uZXc6ZnVuY3Rpb24gUGcobSl7dmFyIEU9e307cmV0dXJuIHkoRSxtKSxFfSxjZmJfYWRkOnJpLGNmYl9kZWw6ZnVuY3Rpb24gTGcobSxFKXt5KG0pO3ZhciBfPXZlLmZpbmQobSxFKTtp'@;
put 'ZihfKWZvcih2YXIgdz0wO3c8bS5GaWxlSW5kZXgubGVuZ3RoOysrdylpZihtLkZpbGVJbmRleFt3XT09XylyZXR1cm4gbS5GaWxlSW5kZXguc3BsaWNlKHcsMSksbS5GdWxsUGF0aHMuc3BsaWNlKHcsMSksITA7cmV0dXJuITF9LGNmYl9tb3Y6ZnVuY3Rpb24gQmcobSxFLF8pe3kobSk7dmFy'@;
put 'IHc9dmUuZmluZChtLEUpO2lmKHcpZm9yKHZhciBTPTA7UzxtLkZpbGVJbmRleC5sZW5ndGg7KytTKWlmKG0uRmlsZUluZGV4W1NdPT13KXJldHVybiBtLkZpbGVJbmRleFtTXS5uYW1lPW4oXyksbS5GdWxsUGF0aHNbU109XywhMDtyZXR1cm4hMX0sY2ZiX2djOmZ1bmN0aW9uIE1nKG0pe1Io'@;
put 'bSwhMCl9LFJlYWRTaGlmdDpBYSxDaGVja0ZpZWxkOmFzLHByZXBfYmxvYjpocixiY29uY2F0OmZyLHVzZV96bGliOmZ1bmN0aW9uIEMobSl7dHJ5e3ZhciBfPW5ldygwLG0uSW5mbGF0ZVJhdyk7aWYoXy5fcHJvY2Vzc0NodW5rKG5ldyBVaW50OEFycmF5KFszLDBdKSxfLl9maW5pc2hGbHVz'@;
put 'aEZsYWcpLCFfLmJ5dGVzUmVhZCl0aHJvdyBuZXcgRXJyb3IoInpsaWIgZG9lcyBub3QgZXhwb3NlIGJ5dGVzUmVhZCIpO0s9bX1jYXRjaCh3KXtjb25zb2xlLmVycm9yKCJjYW5ub3QgdXNlIG5hdGl2ZSB6bGliOiAiKyh3Lm1lc3NhZ2V8fHcpKX19LF9kZWZsYXRlUmF3OnllLF9pbmZsYXRl'@;
put 'UmF3OnljLGNvbnN0czp1ZX0sdH0oKTtmdW5jdGlvbiAkZShlKXtmb3IodmFyIHQ9T2JqZWN0LmtleXMoZSkscj1bXSxhPTA7YTx0Lmxlbmd0aDsrK2EpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsdFthXSkmJnIucHVzaCh0W2FdKTtyZXR1cm4gcn1mdW5jdGlvbiBz'@;
put 'MChlKXtmb3IodmFyIHQ9W10scj0kZShlKSxhPTA7YSE9PXIubGVuZ3RoOysrYSl0W2VbclthXV1dPXJbYV07cmV0dXJuIHR9dmFyIGMwPW5ldyBEYXRlKDE4OTksMTEsMzAsMCwwLDApO2Z1bmN0aW9uIGlyKGUsdCl7dmFyIHI9ZS5nZXRUaW1lKCk7cmV0dXJuIHQmJihyLT0xMjYzMTY4ZTUp'@;
put 'LChyLShjMC5nZXRUaW1lKCkrNmU0KihlLmdldFRpbWV6b25lT2Zmc2V0KCktYzAuZ2V0VGltZXpvbmVPZmZzZXQoKSkpKS84NjRlNX12YXIgU2k9bmV3IERhdGUsbG89YzAuZ2V0VGltZSgpKzZlNCooU2kuZ2V0VGltZXpvbmVPZmZzZXQoKS1jMC5nZXRUaW1lem9uZU9mZnNldCgpKSxGaT1T'@;
put 'aS5nZXRUaW1lem9uZU9mZnNldCgpO2Z1bmN0aW9uIG8wKGUpe3ZhciB0PW5ldyBEYXRlO3JldHVybiB0LnNldFRpbWUoMjQqZSo2MCo2MCoxZTMrbG8pLHQuZ2V0VGltZXpvbmVPZmZzZXQoKSE9PUZpJiZ0LnNldFRpbWUodC5nZXRUaW1lKCkrNmU0Kih0LmdldFRpbWV6b25lT2Zmc2V0KCkt'@;
put 'RmkpKSx0fWZ1bmN0aW9uIHVvKGUpe3ZhciB0PTAscj0wLGE9ITEsbj1lLm1hdGNoKC9QKFswLTlcLl0rWSk/KFswLTlcLl0rTSk/KFswLTlcLl0rRCk/VChbMC05XC5dK0gpPyhbMC05XC5dK00pPyhbMC05XC5dK1MpPy8pO2lmKCFuKXRocm93IG5ldyBFcnJvcigifCIrZSsifCBpcyBub3Qg'@;
put 'YW4gSVNPODYwMSBEdXJhdGlvbiIpO2Zvcih2YXIgaT0xO2khPW4ubGVuZ3RoOysraSlpZihuW2ldKXtzd2l0Y2gocj0xLGk+MyYmKGE9ITApLG5baV0uc2xpY2UobltpXS5sZW5ndGgtMSkpe2Nhc2UiWSI6dGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCBJU08gRHVyYXRpb24gRmllbGQ6'@;
put 'ICIrbltpXS5zbGljZShuW2ldLmxlbmd0aC0xKSk7Y2FzZSJEIjpyKj0yNDtjYXNlIkgiOnIqPTYwO2Nhc2UiTSI6aWYoIWEpdGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCBJU08gRHVyYXRpb24gRmllbGQ6IE0iKTtyKj02MH10Kz1yKnBhcnNlSW50KG5baV0sMTApfXJldHVybiB0fXZh'@;
put 'ciB5aT1uZXcgRGF0ZSgiMjAxNy0wMi0xOVQxOTowNjowOS4wMDBaIiksQWk9aXNOYU4oeWkuZ2V0RnVsbFllYXIoKSk/bmV3IERhdGUoIjIvMTkvMTciKTp5aSxobz0yMDE3PT1BaS5nZXRGdWxsWWVhcigpO2Z1bmN0aW9uIFhlKGUsdCl7dmFyIHI9bmV3IERhdGUoZSk7aWYoaG8pcmV0dXJu'@;
put 'IHQ+MD9yLnNldFRpbWUoci5nZXRUaW1lKCkrNjAqci5nZXRUaW1lem9uZU9mZnNldCgpKjFlMyk6dDwwJiZyLnNldFRpbWUoci5nZXRUaW1lKCktNjAqci5nZXRUaW1lem9uZU9mZnNldCgpKjFlMykscjtpZihlIGluc3RhbmNlb2YgRGF0ZSlyZXR1cm4gZTtpZigxOTE3PT1BaS5nZXRGdWxs'@;
put 'WWVhcigpJiYhaXNOYU4oci5nZXRGdWxsWWVhcigpKSl7dmFyIGE9ci5nZXRGdWxsWWVhcigpO3JldHVybiBlLmluZGV4T2YoIiIrYSk+LTF8fHIuc2V0RnVsbFllYXIoci5nZXRGdWxsWWVhcigpKzEwMCkscn12YXIgbj1lLm1hdGNoKC9cZCsvZyl8fFsiMjAxNyIsIjIiLCIxOSIsIjAiLCIw'@;
put 'IiwiMCJdLGk9bmV3IERhdGUoK25bMF0sK25bMV0tMSwrblsyXSwrblszXXx8MCwrbls0XXx8MCwrbls1XXx8MCk7cmV0dXJuIGUuaW5kZXhPZigiWiIpPi0xJiYoaT1uZXcgRGF0ZShpLmdldFRpbWUoKS02MCppLmdldFRpbWV6b25lT2Zmc2V0KCkqMWUzKSksaX1mdW5jdGlvbiBQdChlLHQp'@;
put 'e2lmKFNlJiZCdWZmZXIuaXNCdWZmZXIoZSkpe2lmKHQpe2lmKDI1NT09ZVswXSYmMjU0PT1lWzFdKXJldHVybiB0dChlLnNsaWNlKDIpLnRvU3RyaW5nKCJ1dGYxNmxlIikpO2lmKDI1ND09ZVsxXSYmMjU1PT1lWzJdKXJldHVybiB0dChhaShlLnNsaWNlKDIpLnRvU3RyaW5nKCJiaW5hcnki'@;
put 'KSkpfXJldHVybiBlLnRvU3RyaW5nKCJiaW5hcnkiKX1pZih0eXBlb2YgVGV4dERlY29kZXI8InUiKXRyeXtpZih0KXtpZigyNTU9PWVbMF0mJjI1ND09ZVsxXSlyZXR1cm4gdHQobmV3IFRleHREZWNvZGVyKCJ1dGYtMTZsZSIpLmRlY29kZShlLnNsaWNlKDIpKSk7aWYoMjU0PT1lWzBdJiYy'@;
put 'NTU9PWVbMV0pcmV0dXJuIHR0KG5ldyBUZXh0RGVjb2RlcigidXRmLTE2YmUiKS5kZWNvZGUoZS5zbGljZSgyKSkpfXZhciByPXsiXHUyMGFjIjoiXHg4MCIsIlx1MjAxYSI6Ilx4ODIiLFx1MDE5MjoiXHg4MyIsIlx1MjAxZSI6Ilx4ODQiLCJcdTIwMjYiOiJceDg1IiwiXHUyMDIwIjoiXHg4'@;
put 'NiIsIlx1MjAyMSI6Ilx4ODciLFx1MDJjNjoiXHg4OCIsIlx1MjAzMCI6Ilx4ODkiLFx1MDE2MDoiXHg4YSIsIlx1MjAzOSI6Ilx4OGIiLFx1MDE1MjoiXHg4YyIsXHUwMTdkOiJceDhlIiwiXHUyMDE4IjoiXHg5MSIsIlx1MjAxOSI6Ilx4OTIiLCJcdTIwMWMiOiJceDkzIiwiXHUyMDFkIjoi'@;
put 'XHg5NCIsIlx1MjAyMiI6Ilx4OTUiLCJcdTIwMTMiOiJceDk2IiwiXHUyMDE0IjoiXHg5NyIsIlx1MDJkYyI6Ilx4OTgiLCJcdTIxMjIiOiJceDk5IixcdTAxNjE6Ilx4OWEiLCJcdTIwM2EiOiJceDliIixcdTAxNTM6Ilx4OWMiLFx1MDE3ZToiXHg5ZSIsXHUwMTc4OiJceDlmIn07cmV0dXJu'@;
put 'IEFycmF5LmlzQXJyYXkoZSkmJihlPW5ldyBVaW50OEFycmF5KGUpKSxuZXcgVGV4dERlY29kZXIoImxhdGluMSIpLmRlY29kZShlKS5yZXBsYWNlKC9bXHUyMGFjXHUyMDFhXHUwMTkyXHUyMDFlXHUyMDI2XHUyMDIwXHUyMDIxXHUwMmM2XHUyMDMwXHUwMTYwXHUyMDM5XHUwMTUyXHUwMTdk'@;
put 'XHUyMDE4XHUyMDE5XHUyMDFjXHUyMDFkXHUyMDIyXHUyMDEzXHUyMDE0XHUwMmRjXHUyMTIyXHUwMTYxXHUyMDNhXHUwMTUzXHUwMTdlXHUwMTc4XS9nLGZ1bmN0aW9uKGkpe3JldHVybiByW2ldfHxpfSl9Y2F0Y2h7fWZvcih2YXIgYT1bXSxuPTA7biE9ZS5sZW5ndGg7KytuKWEucHVzaChT'@;
put 'dHJpbmcuZnJvbUNoYXJDb2RlKGVbbl0pKTtyZXR1cm4gYS5qb2luKCIiKX1mdW5jdGlvbiBNZShlKXtpZih0eXBlb2YgSlNPTjwidSImJiFBcnJheS5pc0FycmF5KGUpKXJldHVybiBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGUpKTtpZigib2JqZWN0IiE9dHlwZW9mIGV8fG51bGw9PWUp'@;
put 'cmV0dXJuIGU7aWYoZSBpbnN0YW5jZW9mIERhdGUpcmV0dXJuIG5ldyBEYXRlKGUuZ2V0VGltZSgpKTt2YXIgdD17fTtmb3IodmFyIHIgaW4gZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxyKSYmKHRbcl09TWUoZVtyXSkpO3JldHVybiB0fWZ1bmN0aW9uIGplKGUs'@;
put 'dCl7Zm9yKHZhciByPSIiO3IubGVuZ3RoPHQ7KXIrPWU7cmV0dXJuIHJ9ZnVuY3Rpb24gSnIoZSl7dmFyIHQ9TnVtYmVyKGUpO2lmKCFpc05hTih0KSlyZXR1cm4gaXNGaW5pdGUodCk/dDpOYU47aWYoIS9cZC8udGVzdChlKSlyZXR1cm4gdDt2YXIgcj0xLGE9ZS5yZXBsYWNlKC8oW1xkXSks'@;
put 'KFtcZF0pL2csIiQxJDIiKS5yZXBsYWNlKC9bJF0vZywiIikucmVwbGFjZSgvWyVdL2csZnVuY3Rpb24oKXtyZXR1cm4gcio9MTAwLCIifSk7cmV0dXJuIGlzTmFOKHQ9TnVtYmVyKGEpKSYmKGE9YS5yZXBsYWNlKC9bKF0oLiopWyldLyxmdW5jdGlvbihuLGkpe3JldHVybiByPS1yLGl9KSxp'@;
put 'c05hTih0PU51bWJlcihhKSkpP3Q6dC9yfXZhciB4bz1bImphbnVhcnkiLCJmZWJydWFyeSIsIm1hcmNoIiwiYXByaWwiLCJtYXkiLCJqdW5lIiwianVseSIsImF1Z3VzdCIsInNlcHRlbWJlciIsIm9jdG9iZXIiLCJub3ZlbWJlciIsImRlY2VtYmVyIl07ZnVuY3Rpb24gYWEoZSl7dmFyIHQ9'@;
put 'bmV3IERhdGUoZSkscj1uZXcgRGF0ZShOYU4pLGE9dC5nZXRZZWFyKCksbj10LmdldE1vbnRoKCksaT10LmdldERhdGUoKTtpZihpc05hTihpKSlyZXR1cm4gcjt2YXIgcz1lLnRvTG93ZXJDYXNlKCk7aWYocy5tYXRjaCgvamFufGZlYnxtYXJ8YXByfG1heXxqdW58anVsfGF1Z3xzZXB8b2N0'@;
put 'fG5vdnxkZWMvKSl7aWYoKHM9cy5yZXBsYWNlKC9bXmEtel0vZywiIikucmVwbGFjZSgvKFteYS16XXxeKVthcF1tPyhbXmEtel18JCkvLCIiKSkubGVuZ3RoPjMmJi0xPT14by5pbmRleE9mKHMpKXJldHVybiByfWVsc2UgaWYocy5tYXRjaCgvW2Etel0vKSlyZXR1cm4gcjtyZXR1cm4gYTww'@;
put 'fHxhPjgwOTk/cjoobj4wfHxpPjEpJiYxMDEhPWE/dDplLm1hdGNoKC9bXi0wLTk6LFwvXFxdLyk/cjp0fXZhciB2bz1mdW5jdGlvbigpe3ZhciBlPTU9PSJhYmFjYWJhIi5zcGxpdCgvKDo/YikvaSkubGVuZ3RoO3JldHVybiBmdW5jdGlvbihyLGEsbil7aWYoZXx8InN0cmluZyI9PXR5cGVv'@;
put 'ZiBhKXJldHVybiByLnNwbGl0KGEpO2Zvcih2YXIgaT1yLnNwbGl0KGEpLHM9W2lbMF1dLGY9MTtmPGkubGVuZ3RoOysrZilzLnB1c2gobikscy5wdXNoKGlbZl0pO3JldHVybiBzfX0oKTtmdW5jdGlvbiBDaShlKXtyZXR1cm4gZT9lLmNvbnRlbnQmJmUudHlwZT9QdChlLmNvbnRlbnQsITAp'@;
put 'OmUuZGF0YT9RdChlLmRhdGEpOmUuYXNOb2RlQnVmZmVyJiZTZT9RdChlLmFzTm9kZUJ1ZmZlcigpLnRvU3RyaW5nKCJiaW5hcnkiKSk6ZS5hc0JpbmFyeT9RdChlLmFzQmluYXJ5KCkpOmUuX2RhdGEmJmUuX2RhdGEuZ2V0Q29udGVudD9RdChQdChBcnJheS5wcm90b3R5cGUuc2xpY2UuY2Fs'@;
put 'bChlLl9kYXRhLmdldENvbnRlbnQoKSwwKSkpOm51bGw6bnVsbH1mdW5jdGlvbiBEaShlKXtpZighZSlyZXR1cm4gbnVsbDtpZihlLmRhdGEpcmV0dXJuIHQwKGUuZGF0YSk7aWYoZS5hc05vZGVCdWZmZXImJlNlKXJldHVybiBlLmFzTm9kZUJ1ZmZlcigpO2lmKGUuX2RhdGEmJmUuX2RhdGEu'@;
put 'Z2V0Q29udGVudCl7dmFyIHQ9ZS5fZGF0YS5nZXRDb250ZW50KCk7cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0P3QwKHQpOkFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHQpfXJldHVybiBlLmNvbnRlbnQmJmUudHlwZT9lLmNvbnRlbnQ6bnVsbH1mdW5jdGlvbiBXcihlLHQpe2Zvcih2YXIg'@;
put 'cj1lLkZ1bGxQYXRoc3x8JGUoZS5maWxlcyksYT10LnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvW1wvXS9nLCJcXCIpLG49YS5yZXBsYWNlKC9cXC9nLCIvIiksaT0wO2k8ci5sZW5ndGg7KytpKXt2YXIgcz1yW2ldLnJlcGxhY2UoL15Sb290IEVudHJ5W1wvXS8sIiIpLnRvTG93ZXJDYXNlKCk7'@;
put 'aWYoYT09c3x8bj09cylyZXR1cm4gZS5maWxlcz9lLmZpbGVzW3JbaV1dOmUuRmlsZUluZGV4W2ldfXJldHVybiBudWxsfWZ1bmN0aW9uIFYwKGUsdCl7dmFyIHI9V3IoZSx0KTtpZihudWxsPT1yKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IGZpbmQgZmlsZSAiK3QrIiBpbiB6aXAiKTtyZXR1'@;
put 'cm4gcn1mdW5jdGlvbiBRZShlLHQscil7aWYoIXIpcmV0dXJuIGZ1bmN0aW9uIHBvKGUpe3JldHVybiBlJiYiLmJpbiI9PT1lLm5hbWUuc2xpY2UoLTQpP0RpKGUpOkNpKGUpfShWMChlLHQpKTtpZighdClyZXR1cm4gbnVsbDt0cnl7cmV0dXJuIFFlKGUsdCl9Y2F0Y2h7cmV0dXJuIG51bGx9'@;
put 'fWZ1bmN0aW9uIE5yKGUsdCxyKXtpZighcilyZXR1cm4gQ2koVjAoZSx0KSk7aWYoIXQpcmV0dXJuIG51bGw7dHJ5e3JldHVybiBOcihlLHQpfWNhdGNoe3JldHVybiBudWxsfX1mdW5jdGlvbiBPaShlLHQscil7aWYoIXIpcmV0dXJuIERpKFYwKGUsdCkpO2lmKCF0KXJldHVybiBudWxsO3Ry'@;
put 'eXtyZXR1cm4gT2koZSx0KX1jYXRjaHtyZXR1cm4gbnVsbH19ZnVuY3Rpb24gSWkoZSl7Zm9yKHZhciB0PWUuRnVsbFBhdGhzfHwkZShlLmZpbGVzKSxyPVtdLGE9MDthPHQubGVuZ3RoOysrYSkiLyIhPXRbYV0uc2xpY2UoLTEpJiZyLnB1c2godFthXS5yZXBsYWNlKC9eUm9vdCBFbnRyeVtc'@;
put 'L10vLCIiKSk7cmV0dXJuIHIuc29ydCgpfWZ1bmN0aW9uIFJpKGUsdCl7c3dpdGNoKHQudHlwZSl7Y2FzZSJiYXNlNjQiOnJldHVybiB2ZS5yZWFkKGUse3R5cGU6ImJhc2U2NCJ9KTtjYXNlImJpbmFyeSI6cmV0dXJuIHZlLnJlYWQoZSx7dHlwZToiYmluYXJ5In0pO2Nhc2UiYnVmZmVyIjpj'@;
put 'YXNlImFycmF5IjpyZXR1cm4gdmUucmVhZChlLHt0eXBlOiJidWZmZXIifSl9dGhyb3cgbmV3IEVycm9yKCJVbnJlY29nbml6ZWQgdHlwZSAiK3QudHlwZSl9ZnVuY3Rpb24gU2EoZSx0KXtpZigiLyI9PWUuY2hhckF0KDApKXJldHVybiBlLnNsaWNlKDEpO3ZhciByPXQuc3BsaXQoIi8iKTsi'@;
put 'LyIhPXQuc2xpY2UoLTEpJiZyLnBvcCgpO2Zvcih2YXIgYT1lLnNwbGl0KCIvIik7MCE9PWEubGVuZ3RoOyl7dmFyIG49YS5zaGlmdCgpOyIuLiI9PT1uP3IucG9wKCk6Ii4iIT09biYmci5wdXNoKG4pfXJldHVybiByLmpvaW4oIi8iKX12YXIgZXI9Jzw/eG1sIHZlcnNpb249IjEuMCIgZW5j'@;
put 'b2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJ5ZXMiPz5cclxuJyxtbz0vKFteIlxzPz5cL10rKVxzKj1ccyooKD86IikoW14iXSopKD86Iil8KD86JykoW14nXSopKD86Jyl8KFteJyI+XHNdKykpL2csTmk9LzxbXC9cP10/W2EtekEtWjAtOTpfLV0rKD86XHMrW14iXHM/PlwvXStccyo9XHMq'@;
put 'KD86IlteIl0qInwnW14nXSonfFteJyI+XHM9XSspKSpccypbXC9cP10/Pi9nbSx2cj1lci5tYXRjaChOaSk/Tmk6LzxbXj5dKj4vZyxfbz0vPFx3KjovLHdvPS88KFwvPylcdys6LztmdW5jdGlvbiBtZShlLHQscil7Zm9yKHZhciBhPXt9LG49MCxpPTA7biE9PWUubGVuZ3RoJiYzMiE9PShp'@;
put 'PWUuY2hhckNvZGVBdChuKSkmJjEwIT09aSYmMTMhPT1pOysrbik7aWYodHx8KGFbMF09ZS5zbGljZSgwLG4pKSxuPT09ZS5sZW5ndGgpcmV0dXJuIGE7dmFyIHM9ZS5tYXRjaChtbyksZj0wLGM9IiIsbz0wLGw9IiIsaD0iIix4PTE7aWYocylmb3Iobz0wO28hPXMubGVuZ3RoOysrbyl7Zm9y'@;
put 'KGg9c1tvXSxpPTA7aSE9aC5sZW5ndGgmJjYxIT09aC5jaGFyQ29kZUF0KGkpOysraSk7Zm9yKGw9aC5zbGljZSgwLGkpLnRyaW0oKTszMj09aC5jaGFyQ29kZUF0KGkrMSk7KSsraTtmb3IoeD0zND09KG49aC5jaGFyQ29kZUF0KGkrMSkpfHwzOT09bj8xOjAsYz1oLnNsaWNlKGkrMSt4LGgu'@;
put 'bGVuZ3RoLXgpLGY9MDtmIT1sLmxlbmd0aCYmNTghPT1sLmNoYXJDb2RlQXQoZik7KytmKTtpZihmPT09bC5sZW5ndGgpbC5pbmRleE9mKCJfIik+MCYmKGw9bC5zbGljZSgwLGwuaW5kZXhPZigiXyIpKSksYVtsXT1jLHJ8fChhW2wudG9Mb3dlckNhc2UoKV09Yyk7ZWxzZXt2YXIgZD0oNT09'@;
put 'PWYmJiJ4bWxucyI9PT1sLnNsaWNlKDAsNSk/InhtbG5zIjoiIikrbC5zbGljZShmKzEpO2lmKGFbZF0mJiJleHQiPT1sLnNsaWNlKGYtMyxmKSljb250aW51ZTthW2RdPWMscnx8KGFbZC50b0xvd2VyQ2FzZSgpXT1jKX19cmV0dXJuIGF9ZnVuY3Rpb24gcnQoZSl7cmV0dXJuIGUucmVwbGFj'@;
put 'ZSh3bywiPCQxIil9dmFyIGJpPXsiJnF1b3Q7IjonIicsIiZhcG9zOyI6IiciLCImZ3Q7IjoiPiIsIiZsdDsiOiI8IiwiJmFtcDsiOiImIn0sRzA9czAoYmkpLEllPWZ1bmN0aW9uKCl7dmFyIGU9LyYoPzpxdW90fGFwb3N8Z3R8bHR8YW1wfCN4PyhbXGRhLWZBLUZdKykpOy9naSx0PS9feChb'@;
put 'XGRhLWZBLUZdezR9KV8vZ2k7cmV0dXJuIGZ1bmN0aW9uIHIoYSl7dmFyIG49YSsiIixpPW4uaW5kZXhPZigiPCFbQ0RBVEFbIik7aWYoLTE9PWkpcmV0dXJuIG4ucmVwbGFjZShlLGZ1bmN0aW9uKGYsYyl7cmV0dXJuIGJpW2ZdfHxTdHJpbmcuZnJvbUNoYXJDb2RlKHBhcnNlSW50KGMsZi5p'@;
put 'bmRleE9mKCJ4Iik+LTE/MTY6MTApKXx8Zn0pLnJlcGxhY2UodCxmdW5jdGlvbihmLGMpe3JldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKHBhcnNlSW50KGMsMTYpKX0pO3ZhciBzPW4uaW5kZXhPZigiXV0+Iik7cmV0dXJuIHIobi5zbGljZSgwLGkpKStuLnNsaWNlKGkrOSxzKStyKG4uc2xp'@;
put 'Y2UocyszKSl9fSgpLHowPS9bJjw+JyJdL2csTGk9L1tcdTAwMDAtXHUwMDFmXS9nO2Z1bmN0aW9uICQwKGUpe3JldHVybihlKyIiKS5yZXBsYWNlKHowLGZ1bmN0aW9uKHIpe3JldHVybiBHMFtyXX0pLnJlcGxhY2UoL1xuL2csIjxici8+IikucmVwbGFjZShMaSxmdW5jdGlvbihyKXtyZXR1'@;
put 'cm4iJiN4IisoIjAwMCIrci5jaGFyQ29kZUF0KDApLnRvU3RyaW5nKDE2KSkuc2xpY2UoLTQpKyI7In0pfXZhciBCaT1mdW5jdGlvbigpe3ZhciBlPS8mIyhcZCspOy9nO2Z1bmN0aW9uIHQocixhKXtyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShwYXJzZUludChhLDEwKSl9cmV0dXJuIGZ1'@;
put 'bmN0aW9uKGEpe3JldHVybiBhLnJlcGxhY2UoZSx0KX19KCk7ZnVuY3Rpb24gV2UoZSl7c3dpdGNoKGUpe2Nhc2UgMTpjYXNlITA6Y2FzZSIxIjpjYXNlInRydWUiOmNhc2UiVFJVRSI6cmV0dXJuITA7ZGVmYXVsdDpyZXR1cm4hMX19ZnVuY3Rpb24gajAoZSl7Zm9yKHZhciB0PSIiLHI9MCxh'@;
put 'PTAsbj0wLGk9MCxzPTAsZj0wO3I8ZS5sZW5ndGg7KShhPWUuY2hhckNvZGVBdChyKyspKTwxMjg/dCs9U3RyaW5nLmZyb21DaGFyQ29kZShhKToobj1lLmNoYXJDb2RlQXQocisrKSxhPjE5MSYmYTwyMjQ/KHM9KDMxJmEpPDw2LHN8PTYzJm4sdCs9U3RyaW5nLmZyb21DaGFyQ29kZShzKSk6'@;
put 'KGk9ZS5jaGFyQ29kZUF0KHIrKyksYTwyNDA/dCs9U3RyaW5nLmZyb21DaGFyQ29kZSgoMTUmYSk8PDEyfCg2MyZuKTw8Nnw2MyZpKTooZj0oKDcmYSk8PDE4fCg2MyZuKTw8MTJ8KDYzJmkpPDw2fDYzJihzPWUuY2hhckNvZGVBdChyKyspKSktNjU1MzYsdCs9U3RyaW5nLmZyb21DaGFyQ29k'@;
put 'ZSg1NTI5NisoZj4+PjEwJjEwMjMpKSx0Kz1TdHJpbmcuZnJvbUNoYXJDb2RlKDU2MzIwKygxMDIzJmYpKSkpKTtyZXR1cm4gdH1mdW5jdGlvbiBNaShlKXt2YXIgcixhLGYsdD1fdCgyKmUubGVuZ3RoKSxuPTEsaT0wLHM9MDtmb3IoYT0wO2E8ZS5sZW5ndGg7YSs9biluPTEsKGY9ZS5jaGFy'@;
put 'Q29kZUF0KGEpKTwxMjg/cj1mOmY8MjI0PyhyPTY0KigzMSZmKSsoNjMmZS5jaGFyQ29kZUF0KGErMSkpLG49Mik6ZjwyNDA/KHI9NDA5NiooMTUmZikrNjQqKDYzJmUuY2hhckNvZGVBdChhKzEpKSsoNjMmZS5jaGFyQ29kZUF0KGErMikpLG49Myk6KG49NCxyPTI2MjE0NCooNyZmKSs0MDk2'@;
put 'Kig2MyZlLmNoYXJDb2RlQXQoYSsxKSkrNjQqKDYzJmUuY2hhckNvZGVBdChhKzIpKSsoNjMmZS5jaGFyQ29kZUF0KGErMykpLHM9NTUyOTYrKChyLT02NTUzNik+Pj4xMCYxMDIzKSxyPTU2MzIwKygxMDIzJnIpKSwwIT09cyYmKHRbaSsrXT0yNTUmcyx0W2krK109cz4+Pjgscz0wKSx0W2kr'@;
put 'K109ciUyNTYsdFtpKytdPXI+Pj44O3JldHVybiB0LnNsaWNlKDAsaSkudG9TdHJpbmcoInVjczIiKX1mdW5jdGlvbiBVaShlKXtyZXR1cm4gb3QoZSwiYmluYXJ5IikudG9TdHJpbmcoInV0ZjgiKX12YXIgbDA9ImZvbyBiYXIgYmF6XHhlMlx4OThceDgzXHhmMFx4OWZceDhkXHhhMyIsQmU9'@;
put 'U2UmJihVaShsMCk9PWowKGwwKSYmVWl8fE1pKGwwKT09ajAobDApJiZNaSl8fGowLHR0PVNlP2Z1bmN0aW9uKGUpe3JldHVybiBvdChlLCJ1dGY4IikudG9TdHJpbmcoImJpbmFyeSIpfTpmdW5jdGlvbihlKXtmb3IodmFyIHQ9W10scj0wLGE9MCxuPTA7cjxlLmxlbmd0aDspc3dpdGNoKGE9'@;
put 'ZS5jaGFyQ29kZUF0KHIrKyksITApe2Nhc2UgYTwxMjg6dC5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoYSkpO2JyZWFrO2Nhc2UgYTwyMDQ4OnQucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKDE5MisoYT4+NikpKSx0LnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZSgxMjgrKDYzJmEpKSk7YnJl'@;
put 'YWs7Y2FzZSBhPj01NTI5NiYmYTw1NzM0NDphLT01NTI5NixuPWUuY2hhckNvZGVBdChyKyspLTU2MzIwKyhhPDwxMCksdC5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoMjQwKyhuPj4xOCY3KSkpLHQucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKDE0NCsobj4+MTImNjMpKSksdC5wdXNoKFN0'@;
put 'cmluZy5mcm9tQ2hhckNvZGUoMTI4KyhuPj42JjYzKSkpLHQucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKDEyOCsoNjMmbikpKTticmVhaztkZWZhdWx0OnQucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKDIyNCsoYT4+MTIpKSksdC5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoMTI4KyhhPj42'@;
put 'JjYzKSkpLHQucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKDEyOCsoNjMmYSkpKX1yZXR1cm4gdC5qb2luKCIiKX0sRmE9ZnVuY3Rpb24oKXt2YXIgZT17fTtyZXR1cm4gZnVuY3Rpb24ocixhKXt2YXIgbj1yKyJ8IisoYXx8IiIpO3JldHVybiBlW25dP2Vbbl06ZVtuXT1uZXcgUmVnRXhwKCI8'@;
put 'KD86XFx3KzopPyIrcisnKD86IHhtbDpzcGFjZT0icHJlc2VydmUiKT8oPzpbXj5dKik+KFtcXHNcXFNdKj8pPC8oPzpcXHcrOik/JytyKyI+IixhfHwiIil9fSgpLFdpPWZ1bmN0aW9uKCl7dmFyIGU9W1sibmJzcCIsIiAiXSxbIm1pZGRvdCIsIlx4YjciXSxbInF1b3QiLCciJ10sWyJhcG9z'@;
put 'IiwiJyJdLFsiZ3QiLCI+Il0sWyJsdCIsIjwiXSxbImFtcCIsIiYiXV0ubWFwKGZ1bmN0aW9uKHQpe3JldHVybltuZXcgUmVnRXhwKCImIit0WzBdKyI7IiwiaWciKSx0WzFdXX0pO3JldHVybiBmdW5jdGlvbihyKXtmb3IodmFyIGE9ci5yZXBsYWNlKC9eW1x0XG5cciBdKy8sIiIpLnJlcGxh'@;
put 'Y2UoL1tcdFxuXHIgXSskLywiIikucmVwbGFjZSgvPlxzKy9nLCI+IikucmVwbGFjZSgvXHMrPC9nLCI8IikucmVwbGFjZSgvW1x0XG5cciBdKy9nLCIgIikucmVwbGFjZSgvPFxzKltiQl1bclJdXHMqXC8/Pi9nLCJcbiIpLnJlcGxhY2UoLzxbXj5dKj4vZywiIiksbj0wO248ZS5sZW5ndGg7'@;
put 'KytuKWE9YS5yZXBsYWNlKGVbbl1bMF0sZVtuXVsxXSk7cmV0dXJuIGF9fSgpLFNvPWZ1bmN0aW9uKCl7dmFyIGU9e307cmV0dXJuIGZ1bmN0aW9uKHIpe3JldHVybiB2b2lkIDAhPT1lW3JdP2Vbcl06ZVtyXT1uZXcgUmVnRXhwKCI8KD86dnQ6KT8iK3IrIj4oW1xcc1xcU10qPyk8Lyg/OnZ0'@;
put 'Oik/IityKyI+IiwiZyIpfX0oKSxGbz0vPFwvPyg/OnZ0Oik/dmFyaWFudD4vZyx5bz0vPCg/OnZ0OikoW14+XSopPihbXHNcU10qKTwvO2Z1bmN0aW9uIEhpKGUsdCl7dmFyIHI9bWUoZSksYT1lLm1hdGNoKFNvKHIuYmFzZVR5cGUpKXx8W10sbj1bXTtpZihhLmxlbmd0aCE9ci5zaXplKXtp'@;
put 'Zih0LldURil0aHJvdyBuZXcgRXJyb3IoInVuZXhwZWN0ZWQgdmVjdG9yIGxlbmd0aCAiK2EubGVuZ3RoKyIgIT0gIityLnNpemUpO3JldHVybiBufXJldHVybiBhLmZvckVhY2goZnVuY3Rpb24oaSl7dmFyIHM9aS5yZXBsYWNlKEZvLCIiKS5tYXRjaCh5byk7cyYmbi5wdXNoKHt2OkJlKHNb'@;
put 'Ml0pLHQ6c1sxXX0pfSksbn1mdW5jdGlvbiBZMChlKXtpZihTZSYmQnVmZmVyLmlzQnVmZmVyKGUpKXJldHVybiBlLnRvU3RyaW5nKCJ1dGY4Iik7aWYoInN0cmluZyI9PXR5cGVvZiBlKXJldHVybiBlO2lmKHR5cGVvZiBVaW50OEFycmF5PCJ1IiYmZSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkp'@;
put 'cmV0dXJuIEJlKHd0KE0wKGUpKSk7dGhyb3cgbmV3IEVycm9yKCJCYWQgaW5wdXQgZm9ybWF0OiBleHBlY3RlZCBCdWZmZXIgb3Igc3RyaW5nIil9dmFyIHlhPS88KFwvPykoW15ccz8+PCFcLzpdKjp8KShbXlxzPzw+OlwvXSspKD86W1xzPzpcL11bXj5dKik/Pi9nbSxycj17Q09SRV9QUk9Q'@;
put 'UzoiaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL3BhY2thZ2UvMjAwNi9tZXRhZGF0YS9jb3JlLXByb3BlcnRpZXMiLENVU1RfUFJPUFM6Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L2N1c3RvbS1wcm9wZXJ0aWVzIixFWFRf'@;
put 'UFJPUFM6Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L2V4dGVuZGVkLXByb3BlcnRpZXMiLENUOiJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvcGFja2FnZS8yMDA2L2NvbnRlbnQtdHlwZXMiLFJFTFM6Imh0dHA6Ly9zY2hl'@;
put 'bWFzLm9wZW54bWxmb3JtYXRzLm9yZy9wYWNrYWdlLzIwMDYvcmVsYXRpb25zaGlwcyIsVENNTlQ6Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vb2ZmaWNlL3NwcmVhZHNoZWV0bWwvMjAxOC90aHJlYWRlZGNvbW1lbnRzIixkYzoiaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEu'@;
put 'MS8iLGRjdGVybXM6Imh0dHA6Ly9wdXJsLm9yZy9kYy90ZXJtcy8iLGRjbWl0eXBlOiJodHRwOi8vcHVybC5vcmcvZGMvZGNtaXR5cGUvIixteDoiaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9vZmZpY2UvbWFjL2V4Y2VsLzIwMDgvbWFpbiIscjoiaHR0cDovL3NjaGVtYXMub3Blbnht'@;
put 'bGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlwcyIsc2pzOiJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvcGFja2FnZS8yMDA2L3NoZWV0anMvY29yZS1wcm9wZXJ0aWVzIix2dDoiaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29m'@;
put 'ZmljZURvY3VtZW50LzIwMDYvZG9jUHJvcHNWVHlwZXMiLHhzaToiaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiLHhzZDoiaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEifSxTdD1bImh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9zcHJl'@;
put 'YWRzaGVldG1sLzIwMDYvbWFpbiIsImh0dHA6Ly9wdXJsLm9jbGMub3JnL29veG1sL3NwcmVhZHNoZWV0bWwvbWFpbiIsImh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vb2ZmaWNlL2V4Y2VsLzIwMDYvbWFpbiIsImh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vb2ZmaWNlL2V4Y2Vs'@;
put 'LzIwMDYvMiJdLEdpPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1bXSxhPTA7YTxlWzBdLmxlbmd0aDsrK2EpaWYoZVswXVthXSlmb3IodmFyIG49MCxpPWVbMF1bYV0ubGVuZ3RoO248aTtuKz0xMDI0MCl0LnB1c2guYXBwbHkodCxlWzBdW2FdLnNsaWNlKG4sbisxMDI0MCkpO3JldHVybiB0fSx6'@;
put 'aT1TZT9mdW5jdGlvbihlKXtyZXR1cm4gZVswXS5sZW5ndGg+MCYmQnVmZmVyLmlzQnVmZmVyKGVbMF1bMF0pP0J1ZmZlci5jb25jYXQoZVswXS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIEJ1ZmZlci5pc0J1ZmZlcih0KT90Om90KHQpfSkpOkdpKGUpfTpHaSwkaT1mdW5jdGlvbihlLHQscil7'@;
put 'Zm9yKHZhciBhPVtdLG49dDtuPHI7bis9MilhLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZSh1dChlLG4pKSk7cmV0dXJuIGEuam9pbigiIikucmVwbGFjZShkciwiIil9LHUwPVNlP2Z1bmN0aW9uKGUsdCxyKXtyZXR1cm4gQnVmZmVyLmlzQnVmZmVyKGUpP2UudG9TdHJpbmcoInV0ZjE2bGUi'@;
put 'LHQscikucmVwbGFjZShkciwiIik6JGkoZSx0LHIpfTokaSxqaT1mdW5jdGlvbihlLHQscil7Zm9yKHZhciBhPVtdLG49dDtuPHQrcjsrK24pYS5wdXNoKCgiMCIrZVtuXS50b1N0cmluZygxNikpLnNsaWNlKC0yKSk7cmV0dXJuIGEuam9pbigiIil9LEtpPVNlP2Z1bmN0aW9uKGUsdCxyKXty'@;
put 'ZXR1cm4gQnVmZmVyLmlzQnVmZmVyKGUpP2UudG9TdHJpbmcoImhleCIsdCx0K3IpOmppKGUsdCxyKX06amksWWk9ZnVuY3Rpb24oZSx0LHIpe2Zvcih2YXIgYT1bXSxuPXQ7bjxyO24rKylhLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZShpYShlLG4pKSk7cmV0dXJuIGEuam9pbigiIil9LG5h'@;
put 'PVNlP2Z1bmN0aW9uKHQscixhKXtyZXR1cm4gQnVmZmVyLmlzQnVmZmVyKHQpP3QudG9TdHJpbmcoInV0ZjgiLHIsYSk6WWkodCxyLGEpfTpZaSxKaT1mdW5jdGlvbihlLHQpe3ZhciByPWNyKGUsdCk7cmV0dXJuIHI+MD9uYShlLHQrNCx0KzQrci0xKToiIn0sSjA9SmkscWk9ZnVuY3Rpb24o'@;
put 'ZSx0KXt2YXIgcj1jcihlLHQpO3JldHVybiByPjA/bmEoZSx0KzQsdCs0K3ItMSk6IiJ9LHEwPXFpLFppPWZ1bmN0aW9uKGUsdCl7dmFyIHI9MipjcihlLHQpO3JldHVybiByPjA/bmEoZSx0KzQsdCs0K3ItMSk6IiJ9LFowPVppLFFpPWZ1bmN0aW9uKHQscil7dmFyIGE9Y3IodCxyKTtyZXR1'@;
put 'cm4gYT4wP3UwKHQscis0LHIrNCthKToiIn0sUTA9UWksZXM9ZnVuY3Rpb24oZSx0KXt2YXIgcj1jcihlLHQpO3JldHVybiByPjA/bmEoZSx0KzQsdCs0K3IpOiIifSxlbj1lcyxycz1mdW5jdGlvbihlLHQpe3JldHVybiBmdW5jdGlvbiBDbyhlLHQpe2Zvcih2YXIgcj0xLTIqKGVbdCs3XT4+'@;
put 'PjcpLGE9KCgxMjcmZVt0KzddKTw8NCkrKGVbdCs2XT4+PjQmMTUpLG49MTUmZVt0KzZdLGk9NTtpPj0wOy0taSluPTI1NipuK2VbdCtpXTtyZXR1cm4gMjA0Nz09YT8wPT1uP3IqKDEvMCk6TmFOOigwPT1hP2E9LTEwMjI6KGEtPTEwMjMsbis9TWF0aC5wb3coMiw1MikpLHIqTWF0aC5wb3co'@;
put 'MixhLTUyKSpuKX0oZSx0KX0saDA9cnMscm49ZnVuY3Rpb24odCl7cmV0dXJuIEFycmF5LmlzQXJyYXkodCl8fHR5cGVvZiBVaW50OEFycmF5PCJ1IiYmdCBpbnN0YW5jZW9mIFVpbnQ4QXJyYXl9O1NlJiYoSjA9ZnVuY3Rpb24odCxyKXtpZighQnVmZmVyLmlzQnVmZmVyKHQpKXJldHVybiBK'@;
put 'aSh0LHIpO3ZhciBhPXQucmVhZFVJbnQzMkxFKHIpO3JldHVybiBhPjA/dC50b1N0cmluZygidXRmOCIscis0LHIrNCthLTEpOiIifSxxMD1mdW5jdGlvbih0LHIpe2lmKCFCdWZmZXIuaXNCdWZmZXIodCkpcmV0dXJuIHFpKHQscik7dmFyIGE9dC5yZWFkVUludDMyTEUocik7cmV0dXJuIGE+'@;
put 'MD90LnRvU3RyaW5nKCJ1dGY4IixyKzQscis0K2EtMSk6IiJ9LFowPWZ1bmN0aW9uKHQscil7aWYoIUJ1ZmZlci5pc0J1ZmZlcih0KSlyZXR1cm4gWmkodCxyKTt2YXIgYT0yKnQucmVhZFVJbnQzMkxFKHIpO3JldHVybiB0LnRvU3RyaW5nKCJ1dGYxNmxlIixyKzQscis0K2EtMSl9LFEwPWZ1'@;
put 'bmN0aW9uKHQscil7aWYoIUJ1ZmZlci5pc0J1ZmZlcih0KSlyZXR1cm4gUWkodCxyKTt2YXIgYT10LnJlYWRVSW50MzJMRShyKTtyZXR1cm4gdC50b1N0cmluZygidXRmMTZsZSIscis0LHIrNCthKX0sZW49ZnVuY3Rpb24odCxyKXtpZighQnVmZmVyLmlzQnVmZmVyKHQpKXJldHVybiBlcyh0'@;
put 'LHIpO3ZhciBhPXQucmVhZFVJbnQzMkxFKHIpO3JldHVybiB0LnRvU3RyaW5nKCJ1dGY4IixyKzQscis0K2EpfSxoMD1mdW5jdGlvbih0LHIpe3JldHVybiBCdWZmZXIuaXNCdWZmZXIodCk/dC5yZWFkRG91YmxlTEUocik6cnModCxyKX0scm49ZnVuY3Rpb24odCl7cmV0dXJuIEJ1ZmZlci5p'@;
put 'c0J1ZmZlcih0KXx8QXJyYXkuaXNBcnJheSh0KXx8dHlwZW9mIFVpbnQ4QXJyYXk8InUiJiZ0IGluc3RhbmNlb2YgVWludDhBcnJheX0pLHR5cGVvZiBPZTwidSImJmZ1bmN0aW9uIHRzKCl7dTA9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBPZS51dGlscy5kZWNvZGUoMTIwMCxlLnNsaWNlKHQs'@;
put 'cikpLnJlcGxhY2UoZHIsIiIpfSxuYT1mdW5jdGlvbihlLHQscil7cmV0dXJuIE9lLnV0aWxzLmRlY29kZSg2NTAwMSxlLnNsaWNlKHQscikpfSxKMD1mdW5jdGlvbihlLHQpe3ZhciByPWNyKGUsdCk7cmV0dXJuIHI+MD9PZS51dGlscy5kZWNvZGUoUnQsZS5zbGljZSh0KzQsdCs0K3ItMSkp'@;
put 'OiIifSxxMD1mdW5jdGlvbihlLHQpe3ZhciByPWNyKGUsdCk7cmV0dXJuIHI+MD9PZS51dGlscy5kZWNvZGUoRHIsZS5zbGljZSh0KzQsdCs0K3ItMSkpOiIifSxaMD1mdW5jdGlvbihlLHQpe3ZhciByPTIqY3IoZSx0KTtyZXR1cm4gcj4wP09lLnV0aWxzLmRlY29kZSgxMjAwLGUuc2xpY2Uo'@;
put 'dCs0LHQrNCtyLTEpKToiIn0sUTA9ZnVuY3Rpb24oZSx0KXt2YXIgcj1jcihlLHQpO3JldHVybiByPjA/T2UudXRpbHMuZGVjb2RlKDEyMDAsZS5zbGljZSh0KzQsdCs0K3IpKToiIn0sZW49ZnVuY3Rpb24oZSx0KXt2YXIgcj1jcihlLHQpO3JldHVybiByPjA/T2UudXRpbHMuZGVjb2RlKDY1'@;
put 'MDAxLGUuc2xpY2UodCs0LHQrNCtyKSk6IiJ9fSgpO3ZhciBpYT1mdW5jdGlvbihlLHQpe3JldHVybiBlW3RdfSx1dD1mdW5jdGlvbihlLHQpe3JldHVybiAyNTYqZVt0KzFdK2VbdF19LE9vPWZ1bmN0aW9uKGUsdCl7dmFyIHI9MjU2KmVbdCsxXStlW3RdO3JldHVybiByPDMyNzY4P3I6LTEq'@;
put 'KDY1NTM1LXIrMSl9LGNyPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGVbdCszXSooMTw8MjQpKyhlW3QrMl08PDE2KSsoZVt0KzFdPDw4KStlW3RdfSxMdD1mdW5jdGlvbihlLHQpe3JldHVybiBlW3QrM108PDI0fGVbdCsyXTw8MTZ8ZVt0KzFdPDw4fGVbdF19LElvPWZ1bmN0aW9uKGUsdCl7cmV0'@;
put 'dXJuIGVbdF08PDI0fGVbdCsxXTw8MTZ8ZVt0KzJdPDw4fGVbdCszXX07ZnVuY3Rpb24gQWEoZSx0KXt2YXIgYSxuLHMsZixjLG8scj0iIixpPVtdO3N3aXRjaCh0KXtjYXNlImRiY3MiOmlmKG89dGhpcy5sLFNlJiZCdWZmZXIuaXNCdWZmZXIodGhpcykpcj10aGlzLnNsaWNlKHRoaXMubCx0'@;
put 'aGlzLmwrMiplKS50b1N0cmluZygidXRmMTZsZSIpO2Vsc2UgZm9yKGM9MDtjPGU7KytjKXIrPVN0cmluZy5mcm9tQ2hhckNvZGUodXQodGhpcyxvKSksbys9MjtlKj0yO2JyZWFrO2Nhc2UidXRmOCI6cj1uYSh0aGlzLHRoaXMubCx0aGlzLmwrZSk7YnJlYWs7Y2FzZSJ1dGYxNmxlIjpyPXUw'@;
put 'KHRoaXMsdGhpcy5sLHRoaXMubCsoZSo9MikpO2JyZWFrO2Nhc2Uid3N0ciI6aWYoISh0eXBlb2YgT2U8InUiKSlyZXR1cm4gQWEuY2FsbCh0aGlzLGUsImRiY3MiKTtyPU9lLnV0aWxzLmRlY29kZShEcix0aGlzLnNsaWNlKHRoaXMubCx0aGlzLmwrMiplKSksZSo9MjticmVhaztjYXNlImxw'@;
put 'c3RyLWFuc2kiOnI9SjAodGhpcyx0aGlzLmwpLGU9NCtjcih0aGlzLHRoaXMubCk7YnJlYWs7Y2FzZSJscHN0ci1jcCI6cj1xMCh0aGlzLHRoaXMubCksZT00K2NyKHRoaXMsdGhpcy5sKTticmVhaztjYXNlImxwd3N0ciI6cj1aMCh0aGlzLHRoaXMubCksZT00KzIqY3IodGhpcyx0aGlzLmwp'@;
put 'O2JyZWFrO2Nhc2UibHBwNCI6ZT00K2NyKHRoaXMsdGhpcy5sKSxyPVEwKHRoaXMsdGhpcy5sKSwyJmUmJihlKz0yKTticmVhaztjYXNlIjhscHA0IjplPTQrY3IodGhpcyx0aGlzLmwpLHI9ZW4odGhpcyx0aGlzLmwpLDMmZSYmKGUrPTQtKDMmZSkpO2JyZWFrO2Nhc2UiY3N0ciI6Zm9yKGU9'@;
put 'MCxyPSIiOzAhPT0ocz1pYSh0aGlzLHRoaXMubCtlKyspKTspaS5wdXNoKHBhKHMpKTtyPWkuam9pbigiIik7YnJlYWs7Y2FzZSJfd3N0ciI6Zm9yKGU9MCxyPSIiOzAhPT0ocz11dCh0aGlzLHRoaXMubCtlKSk7KWkucHVzaChwYShzKSksZSs9MjtlKz0yLHI9aS5qb2luKCIiKTticmVhaztj'@;
put 'YXNlImRiY3MtY29udCI6Zm9yKHI9IiIsbz10aGlzLmwsYz0wO2M8ZTsrK2Mpe2lmKHRoaXMubGVucyYmLTEhPT10aGlzLmxlbnMuaW5kZXhPZihvKSlyZXR1cm4gcz1pYSh0aGlzLG8pLHRoaXMubD1vKzEsZj1BYS5jYWxsKHRoaXMsZS1jLHM/ImRiY3MtY29udCI6InNiY3MtY29udCIpLGku'@;
put 'am9pbigiIikrZjtpLnB1c2gocGEodXQodGhpcyxvKSkpLG8rPTJ9cj1pLmpvaW4oIiIpLGUqPTI7YnJlYWs7Y2FzZSJjcHN0ciI6aWYodHlwZW9mIE9lPCJ1Iil7cj1PZS51dGlscy5kZWNvZGUoRHIsdGhpcy5zbGljZSh0aGlzLmwsdGhpcy5sK2UpKTticmVha31jYXNlInNiY3MtY29udCI6'@;
put 'Zm9yKHI9IiIsbz10aGlzLmwsYz0wO2MhPWU7KytjKXtpZih0aGlzLmxlbnMmJi0xIT09dGhpcy5sZW5zLmluZGV4T2YobykpcmV0dXJuIHM9aWEodGhpcyxvKSx0aGlzLmw9bysxLGY9QWEuY2FsbCh0aGlzLGUtYyxzPyJkYmNzLWNvbnQiOiJzYmNzLWNvbnQiKSxpLmpvaW4oIiIpK2Y7aS5w'@;
put 'dXNoKHBhKGlhKHRoaXMsbykpKSxvKz0xfXI9aS5qb2luKCIiKTticmVhaztkZWZhdWx0OnN3aXRjaChlKXtjYXNlIDE6cmV0dXJuIGE9aWEodGhpcyx0aGlzLmwpLHRoaXMubCsrLGE7Y2FzZSAyOnJldHVybiBhPSgiaSI9PT10P09vOnV0KSh0aGlzLHRoaXMubCksdGhpcy5sKz0yLGE7Y2Fz'@;
put 'ZSA0OmNhc2UtNDpyZXR1cm4iaSIhPT10JiYxMjgmdGhpc1t0aGlzLmwrM10/KG49Y3IodGhpcyx0aGlzLmwpLHRoaXMubCs9NCxuKTooYT0oZT4wP0x0OklvKSh0aGlzLHRoaXMubCksdGhpcy5sKz00LGEpO2Nhc2UgODpjYXNlLTg6aWYoImYiPT09dClyZXR1cm4gbj04PT1lP2gwKHRoaXMs'@;
put 'dGhpcy5sKTpoMChbdGhpc1t0aGlzLmwrN10sdGhpc1t0aGlzLmwrNl0sdGhpc1t0aGlzLmwrNV0sdGhpc1t0aGlzLmwrNF0sdGhpc1t0aGlzLmwrM10sdGhpc1t0aGlzLmwrMl0sdGhpc1t0aGlzLmwrMV0sdGhpc1t0aGlzLmwrMF1dLDApLHRoaXMubCs9OCxuO2U9ODtjYXNlIDE2OnI9S2ko'@;
put 'dGhpcyx0aGlzLmwsZSl9fXJldHVybiB0aGlzLmwrPWUscn12YXIgUm89ZnVuY3Rpb24oZSx0LHIpe2Vbcl09MjU1JnQsZVtyKzFdPXQ+Pj44JjI1NSxlW3IrMl09dD4+PjE2JjI1NSxlW3IrM109dD4+PjI0JjI1NX0sTm89ZnVuY3Rpb24oZSx0LHIpe2Vbcl09MjU1JnQsZVtyKzFdPXQ+Pjgm'@;
put 'MjU1LGVbcisyXT10Pj4xNiYyNTUsZVtyKzNdPXQ+PjI0JjI1NX0sYm89ZnVuY3Rpb24oZSx0LHIpe2Vbcl09MjU1JnQsZVtyKzFdPXQ+Pj44JjI1NX07ZnVuY3Rpb24gUG8oZSx0LHIpe3ZhciBhPTAsbj0wO2lmKCJkYmNzIj09PXIpe2ZvcihuPTA7biE9dC5sZW5ndGg7KytuKWJvKHRoaXMs'@;
put 'dC5jaGFyQ29kZUF0KG4pLHRoaXMubCsyKm4pO2E9Mip0Lmxlbmd0aH1lbHNlIGlmKCJzYmNzIj09PXIpe2lmKHR5cGVvZiBPZTwidSImJjg3ND09UnQpZm9yKG49MDtuIT10Lmxlbmd0aDsrK24pe3ZhciBpPU9lLnV0aWxzLmVuY29kZShSdCx0LmNoYXJBdChuKSk7dGhpc1t0aGlzLmwrbl09'@;
put 'aVswXX1lbHNlIGZvcih0PXQucmVwbGFjZSgvW15ceDAwLVx4N0ZdL2csIl8iKSxuPTA7biE9dC5sZW5ndGg7KytuKXRoaXNbdGhpcy5sK25dPTI1NSZ0LmNoYXJDb2RlQXQobik7YT10Lmxlbmd0aH1lbHNle2lmKCJoZXgiPT09cil7Zm9yKDtuPGU7KytuKXRoaXNbdGhpcy5sKytdPXBhcnNl'@;
put 'SW50KHQuc2xpY2UoMipuLDIqbisyKSwxNil8fDA7cmV0dXJuIHRoaXN9aWYoInV0ZjE2bGUiPT09cil7dmFyIHM9TWF0aC5taW4odGhpcy5sK2UsdGhpcy5sZW5ndGgpO2ZvcihuPTA7bjxNYXRoLm1pbih0Lmxlbmd0aCxlKTsrK24pe3ZhciBmPXQuY2hhckNvZGVBdChuKTt0aGlzW3RoaXMu'@;
put 'bCsrXT0yNTUmZix0aGlzW3RoaXMubCsrXT1mPj44fWZvcig7dGhpcy5sPHM7KXRoaXNbdGhpcy5sKytdPTA7cmV0dXJuIHRoaXN9c3dpdGNoKGUpe2Nhc2UgMTphPTEsdGhpc1t0aGlzLmxdPTI1NSZ0O2JyZWFrO2Nhc2UgMjphPTIsdGhpc1t0aGlzLmxdPTI1NSZ0LHRoaXNbdGhpcy5sKzFd'@;
put 'PTI1NSYodD4+Pj04KTticmVhaztjYXNlIDM6YT0zLHRoaXNbdGhpcy5sXT0yNTUmdCx0aGlzW3RoaXMubCsxXT0yNTUmKHQ+Pj49OCksdGhpc1t0aGlzLmwrMl09MjU1Jih0Pj4+PTgpO2JyZWFrO2Nhc2UgNDphPTQsUm8odGhpcyx0LHRoaXMubCk7YnJlYWs7Y2FzZSA4OmlmKGE9OCwiZiI9'@;
put 'PT1yKXshZnVuY3Rpb24gRG8oZSx0LHIpe3ZhciBhPSh0PDB8fDEvdD09LTEvMD8xOjApPDw3LG49MCxpPTAscz1hPy10OnQ7aXNGaW5pdGUocyk/MD09cz9uPWk9MDoobj1NYXRoLmZsb29yKE1hdGgubG9nKHMpL01hdGguTE4yKSxpPXMqTWF0aC5wb3coMiw1Mi1uKSxuPD0tMTAyMyYmKCFp'@;
put 'c0Zpbml0ZShpKXx8aTxNYXRoLnBvdygyLDUyKSk/bj0tMTAyMjooaS09TWF0aC5wb3coMiw1Miksbis9MTAyMykpOihuPTIwNDcsaT1pc05hTih0KT8yNjk4NTowKTtmb3IodmFyIGY9MDtmPD01OysrZixpLz0yNTYpZVtyK2ZdPTI1NSZpO2Vbcis2XT0oMTUmbik8PDR8MTUmaSxlW3IrN109'@;
put 'bj4+NHxhfSh0aGlzLHQsdGhpcy5sKTticmVha31jYXNlIDE2OmJyZWFrO2Nhc2UtNDphPTQsTm8odGhpcyx0LHRoaXMubCl9fXJldHVybiB0aGlzLmwrPWEsdGhpc31mdW5jdGlvbiBhcyhlLHQpe3ZhciByPUtpKHRoaXMsdGhpcy5sLGUubGVuZ3RoPj4xKTtpZihyIT09ZSl0aHJvdyBuZXcg'@;
put 'RXJyb3IodCsiRXhwZWN0ZWQgIitlKyIgc2F3ICIrcik7dGhpcy5sKz1lLmxlbmd0aD4+MX1mdW5jdGlvbiBocihlLHQpe2UubD10LGUucmVhZF9zaGlmdD1BYSxlLmNoaz1hcyxlLndyaXRlX3NoaWZ0PVBvfWZ1bmN0aW9uIHByKGUsdCl7ZS5sKz10fWZ1bmN0aW9uIEcoZSl7dmFyIHQ9X3Qo'@;
put 'ZSk7cmV0dXJuIGhyKHQsMCksdH1mdW5jdGlvbiBodChlLHQscil7aWYoZSl7dmFyIGEsbixpO2hyKGUsZS5sfHwwKTtmb3IodmFyIHM9ZS5sZW5ndGgsZj0wLGM9MDtlLmw8czspezEyOCYoZj1lLnJlYWRfc2hpZnQoMSkpJiYoZj0oMTI3JmYpKygoMTI3JmUucmVhZF9zaGlmdCgxKSk8PDcp'@;
put 'KTt2YXIgbz0kYVtmXXx8JGFbNjU1MzVdO2ZvcihpPTEyNyYoYT1lLnJlYWRfc2hpZnQoMSkpLG49MTtuPDQmJjEyOCZhOysrbilpKz0oMTI3JihhPWUucmVhZF9zaGlmdCgxKSkpPDw3Km47Yz1lLmwraTt2YXIgbD1vLmYmJm8uZihlLGkscik7aWYoZS5sPWMsdChsLG8sZikpcmV0dXJufX19'@;
put 'ZnVuY3Rpb24gU3IoKXt2YXIgZT1bXSx0PVNlPzI1NjoyMDQ4LHI9ZnVuY3Rpb24obyl7dmFyIGw9RyhvKTtyZXR1cm4gaHIobCwwKSxsfSxhPXIodCksbj1mdW5jdGlvbigpe2EmJihhLmxlbmd0aD5hLmwmJigoYT1hLnNsaWNlKDAsYS5sKSkubD1hLmxlbmd0aCksYS5sZW5ndGg+MCYmZS5w'@;
put 'dXNoKGEpLGE9bnVsbCl9LGk9ZnVuY3Rpb24obyl7cmV0dXJuIGEmJm88YS5sZW5ndGgtYS5sP2E6KG4oKSxhPXIoTWF0aC5tYXgobysxLHQpKSl9O3JldHVybntuZXh0OmkscHVzaDpmdW5jdGlvbihvKXtuKCksbnVsbD09KGE9bykubCYmKGEubD1hLmxlbmd0aCksaSh0KX0sZW5kOmZ1bmN0'@;
put 'aW9uKCl7cmV0dXJuIG4oKSxmcihlKX0sX2J1ZnM6ZX19ZnVuY3Rpb24gQ2EoZSx0LHIpe3ZhciBhPU1lKGUpO2lmKHQucz8oYS5jUmVsJiYoYS5jKz10LnMuYyksYS5yUmVsJiYoYS5yKz10LnMucikpOihhLmNSZWwmJihhLmMrPXQuYyksYS5yUmVsJiYoYS5yKz10LnIpKSwhcnx8ci5iaWZm'@;
put 'PDEyKXtmb3IoO2EuYz49MjU2OylhLmMtPTI1Njtmb3IoO2Eucj49NjU1MzY7KWEuci09NjU1MzZ9cmV0dXJuIGF9ZnVuY3Rpb24gbnMoZSx0LHIpe3ZhciBhPU1lKGUpO3JldHVybiBhLnM9Q2EoYS5zLHQucyxyKSxhLmU9Q2EoYS5lLHQucyxyKSxhfWZ1bmN0aW9uIERhKGUsdCl7aWYoZS5j'@;
put 'UmVsJiZlLmM8MClmb3IoZT1NZShlKTtlLmM8MDspZS5jKz10Pjg/MTYzODQ6MjU2O2lmKGUuclJlbCYmZS5yPDApZm9yKGU9TWUoZSk7ZS5yPDA7KWUucis9dD44PzEwNDg1NzY6dD41PzY1NTM2OjE2Mzg0O3ZhciByPWdlKGUpO3JldHVybiFlLmNSZWwmJm51bGwhPWUuY1JlbCYmKHI9ZnVu'@;
put 'Y3Rpb24gTW8oZSl7cmV0dXJuIGUucmVwbGFjZSgvXihbQS1aXSkvLCIkJCQxIil9KHIpKSwhZS5yUmVsJiZudWxsIT1lLnJSZWwmJihyPWZ1bmN0aW9uIExvKGUpe3JldHVybiBlLnJlcGxhY2UoLyhbQS1aXXxeKShcZCspJC8sIiQxJCQkMiIpfShyKSkscn1mdW5jdGlvbiB0bihlLHQpe3Jl'@;
put 'dHVybiAwIT1lLnMucnx8ZS5zLnJSZWx8fGUuZS5yIT0odC5iaWZmPj0xMj8xMDQ4NTc1OnQuYmlmZj49OD82NTUzNjoxNjM4NCl8fGUuZS5yUmVsPzAhPWUucy5jfHxlLnMuY1JlbHx8ZS5lLmMhPSh0LmJpZmY+PTEyPzE2MzgzOjI1NSl8fGUuZS5jUmVsP0RhKGUucyx0LmJpZmYpKyI6IitE'@;
put 'YShlLmUsdC5iaWZmKTooZS5zLnJSZWw/IiI6IiQiKStLZShlLnMucikrIjoiKyhlLmUuclJlbD8iIjoiJCIpK0tlKGUuZS5yKTooZS5zLmNSZWw/IiI6IiQiKStIZShlLnMuYykrIjoiKyhlLmUuY1JlbD8iIjoiJCIpK0hlKGUuZS5jKX1mdW5jdGlvbiBhbihlKXtyZXR1cm4gcGFyc2VJbnQo'@;
put 'ZnVuY3Rpb24gQm8oZSl7cmV0dXJuIGUucmVwbGFjZSgvXCQoXGQrKSQvLCIkMSIpfShlKSwxMCktMX1mdW5jdGlvbiBLZShlKXtyZXR1cm4iIisoZSsxKX1mdW5jdGlvbiBubihlKXtmb3IodmFyIHQ9ZnVuY3Rpb24gVW8oZSl7cmV0dXJuIGUucmVwbGFjZSgvXlwkKFtBLVpdKS8sIiQxIil9'@;
put 'KGUpLHI9MCxhPTA7YSE9PXQubGVuZ3RoOysrYSlyPTI2KnIrdC5jaGFyQ29kZUF0KGEpLTY0O3JldHVybiByLTF9ZnVuY3Rpb24gSGUoZSl7aWYoZTwwKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBjb2x1bW4gIitlKTt2YXIgdD0iIjtmb3IoKytlO2U7ZT1NYXRoLmZsb29yKChlLTEpLzI2'@;
put 'KSl0PVN0cmluZy5mcm9tQ2hhckNvZGUoKGUtMSklMjYrNjUpK3Q7cmV0dXJuIHR9ZnVuY3Rpb24gR2UoZSl7Zm9yKHZhciB0PTAscj0wLGE9MDthPGUubGVuZ3RoOysrYSl7dmFyIG49ZS5jaGFyQ29kZUF0KGEpO24+PTQ4JiZuPD01Nz90PTEwKnQrKG4tNDgpOm4+PTY1JiZuPD05MCYmKHI9'@;
put 'MjYqcisobi02NCkpfXJldHVybntjOnItMSxyOnQtMX19ZnVuY3Rpb24gZ2UoZSl7Zm9yKHZhciB0PWUuYysxLHI9IiI7dDt0PSh0LTEpLzI2fDApcj1TdHJpbmcuZnJvbUNoYXJDb2RlKCh0LTEpJTI2KzY1KStyO3JldHVybiByKyhlLnIrMSl9ZnVuY3Rpb24gUHIoZSl7dmFyIHQ9ZS5pbmRl'@;
put 'eE9mKCI6Iik7cmV0dXJuLTE9PXQ/e3M6R2UoZSksZTpHZShlKX06e3M6R2UoZS5zbGljZSgwLHQpKSxlOkdlKGUuc2xpY2UodCsxKSl9fWZ1bmN0aW9uIHdlKGUsdCl7cmV0dXJuIHR5cGVvZiB0PiJ1Inx8Im51bWJlciI9PXR5cGVvZiB0P3dlKGUucyxlLmUpOigic3RyaW5nIiE9dHlwZW9m'@;
put 'IGUmJihlPWdlKGUpKSwic3RyaW5nIiE9dHlwZW9mIHQmJih0PWdlKHQpKSxlPT10P2U6ZSsiOiIrdCl9ZnVuY3Rpb24gRGUoZSl7dmFyIHQ9e3M6e2M6MCxyOjB9LGU6e2M6MCxyOjB9fSxyPTAsYT0wLG49MCxpPWUubGVuZ3RoO2ZvcihyPTA7YTxpJiYhKChuPWUuY2hhckNvZGVBdChhKS02'@;
put 'NCk8MXx8bj4yNik7KythKXI9MjYqcituO2Zvcih0LnMuYz0tLXIscj0wO2E8aSYmISgobj1lLmNoYXJDb2RlQXQoYSktNDgpPDB8fG4+OSk7KythKXI9MTAqcituO2lmKHQucy5yPS0tcixhPT09aXx8MTAhPW4pcmV0dXJuIHQuZS5jPXQucy5jLHQuZS5yPXQucy5yLHQ7Zm9yKCsrYSxyPTA7'@;
put 'YSE9aSYmISgobj1lLmNoYXJDb2RlQXQoYSktNjQpPDF8fG4+MjYpOysrYSlyPTI2KnIrbjtmb3IodC5lLmM9LS1yLHI9MDthIT1pJiYhKChuPWUuY2hhckNvZGVBdChhKS00OCk8MHx8bj45KTsrK2Epcj0xMCpyK247cmV0dXJuIHQuZS5yPS0tcix0fWZ1bmN0aW9uIGF0KGUsdCxyKXtyZXR1'@;
put 'cm4gbnVsbD09ZXx8bnVsbD09ZS50fHwieiI9PWUudD8iIjp2b2lkIDAhPT1lLnc/ZS53OigiZCI9PWUudCYmIWUueiYmciYmci5kYXRlTkYmJihlLno9ci5kYXRlTkYpLCJlIj09ZS50P3h0W2Uudl18fGUudjpmdW5jdGlvbiBpcyhlLHQpe3ZhciByPSJkIj09ZS50JiZ0IGluc3RhbmNlb2Yg'@;
put 'RGF0ZTtpZihudWxsIT1lLnopdHJ5e3JldHVybiBlLnc9UnIoZS56LHI/aXIodCk6dCl9Y2F0Y2h7fXRyeXtyZXR1cm4gZS53PVJyKChlLlhGfHx7fSkubnVtRm10SWR8fChyPzE0OjApLHI/aXIodCk6dCl9Y2F0Y2h7cmV0dXJuIiIrdH19KGUsbnVsbD09dD9lLnY6dCkpfWZ1bmN0aW9uIEZ0'@;
put 'KGUsdCl7dmFyIHI9dCYmdC5zaGVldD90LnNoZWV0OiJTaGVldDEiLGE9e307cmV0dXJuIGFbcl09ZSx7U2hlZXROYW1lczpbcl0sU2hlZXRzOmF9fWZ1bmN0aW9uIHNhKGUsdCl7cmV0dXJuIGZ1bmN0aW9uIHNzKGUsdCxyKXt2YXIgYT1yfHx7fSxuPWU/QXJyYXkuaXNBcnJheShlKTphLmRl'@;
put 'bnNlO251bGwhPXplJiZudWxsPT1uJiYobj16ZSk7dmFyIGk9ZXx8KG4/W106e30pLHM9MCxmPTA7aWYoaSYmbnVsbCE9YS5vcmlnaW4pe2lmKCJudW1iZXIiPT10eXBlb2YgYS5vcmlnaW4pcz1hLm9yaWdpbjtlbHNle3ZhciBjPSJzdHJpbmciPT10eXBlb2YgYS5vcmlnaW4/R2UoYS5vcmln'@;
put 'aW4pOmEub3JpZ2luO3M9Yy5yLGY9Yy5jfWlbIiFyZWYiXXx8KGlbIiFyZWYiXT0iQTE6QTEiKX12YXIgbz17czp7YzoxZTcscjoxZTd9LGU6e2M6MCxyOjB9fTtpZihpWyIhcmVmIl0pe3ZhciBsPURlKGlbIiFyZWYiXSk7by5zLmM9bC5zLmMsby5zLnI9bC5zLnIsby5lLmM9TWF0aC5tYXgo'@;
put 'by5lLmMsbC5lLmMpLG8uZS5yPU1hdGgubWF4KG8uZS5yLGwuZS5yKSwtMT09cyYmKG8uZS5yPXM9bC5lLnIrMSl9Zm9yKHZhciBoPTA7aCE9dC5sZW5ndGg7KytoKWlmKHRbaF0pe2lmKCFBcnJheS5pc0FycmF5KHRbaF0pKXRocm93IG5ldyBFcnJvcigiYW9hX3RvX3NoZWV0IGV4cGVjdHMg'@;
put 'YW4gYXJyYXkgb2YgYXJyYXlzIik7Zm9yKHZhciB4PTA7eCE9dFtoXS5sZW5ndGg7Kyt4KWlmKCEodHlwZW9mIHRbaF1beF0+InUiKSl7dmFyIGQ9e3Y6dFtoXVt4XX0sdj1zK2gsdT1mK3g7aWYoby5zLnI+diYmKG8ucy5yPXYpLG8ucy5jPnUmJihvLnMuYz11KSxvLmUucjx2JiYoby5lLnI9'@;
put 'diksby5lLmM8dSYmKG8uZS5jPXUpLCF0W2hdW3hdfHwib2JqZWN0IiE9dHlwZW9mIHRbaF1beF18fEFycmF5LmlzQXJyYXkodFtoXVt4XSl8fHRbaF1beF1pbnN0YW5jZW9mIERhdGUpaWYoQXJyYXkuaXNBcnJheShkLnYpJiYoZC5mPXRbaF1beF1bMV0sZC52PWQudlswXSksbnVsbD09PWQu'@;
put 'dilpZihkLmYpZC50PSJuIjtlbHNlIGlmKGEubnVsbEVycm9yKWQudD0iZSIsZC52PTA7ZWxzZXtpZighYS5zaGVldFN0dWJzKWNvbnRpbnVlO2QudD0ieiJ9ZWxzZSJudW1iZXIiPT10eXBlb2YgZC52P2QudD0ibiI6ImJvb2xlYW4iPT10eXBlb2YgZC52P2QudD0iYiI6ZC52IGluc3RhbmNl'@;
put 'b2YgRGF0ZT8oZC56PWEuZGF0ZU5GfHxwZVsxNF0sYS5jZWxsRGF0ZXM/KGQudD0iZCIsZC53PVJyKGQueixpcihkLnYpKSk6KGQudD0ibiIsZC52PWlyKGQudiksZC53PVJyKGQueixkLnYpKSk6ZC50PSJzIjtlbHNlIGQ9dFtoXVt4XTtpZihuKWlbdl18fChpW3ZdPVtdKSxpW3ZdW3VdJiZp'@;
put 'W3ZdW3VdLnomJihkLno9aVt2XVt1XS56KSxpW3ZdW3VdPWQ7ZWxzZXt2YXIgcD1nZSh7Yzp1LHI6dn0pO2lbcF0mJmlbcF0ueiYmKGQuej1pW3BdLnopLGlbcF09ZH19fXJldHVybiBvLnMuYzwxZTcmJihpWyIhcmVmIl09d2UobykpLGl9KG51bGwsZSx0KX1mdW5jdGlvbiBtcihlKXt2YXIg'@;
put 'dD1lLnJlYWRfc2hpZnQoNCk7cmV0dXJuIDA9PT10PyIiOmUucmVhZF9zaGlmdCh0LCJkYmNzIil9ZnVuY3Rpb24gVm8oZSl7cmV0dXJue2ljaDplLnJlYWRfc2hpZnQoMiksaWZudDplLnJlYWRfc2hpZnQoMil9fWZ1bmN0aW9uIHNuKGUsdCl7dmFyIHI9ZS5sLGE9ZS5yZWFkX3NoaWZ0KDEp'@;
put 'LG49bXIoZSksaT1bXSxzPXt0Om4saDpufTtpZigxJmEpe2Zvcih2YXIgZj1lLnJlYWRfc2hpZnQoNCksYz0wO2MhPWY7KytjKWkucHVzaChWbyhlKSk7cy5yPWl9ZWxzZSBzLnI9W3tpY2g6MCxpZm50OjB9XTtyZXR1cm4gZS5sPXIrdCxzfXZhciBHbz1zbjtmdW5jdGlvbiBIcihlKXt2YXIg'@;
put 'dD1lLnJlYWRfc2hpZnQoNCkscj1lLnJlYWRfc2hpZnQoMik7cmV0dXJuIHIrPWUucmVhZF9zaGlmdCgxKTw8MTYsZS5sKysse2M6dCxpU3R5bGVSZWY6cn19ZnVuY3Rpb24gTXQoZSl7dmFyIHQ9ZS5yZWFkX3NoaWZ0KDIpO3JldHVybiB0Kz1lLnJlYWRfc2hpZnQoMSk8PDE2LGUubCsrLHtj'@;
put 'Oi0xLGlTdHlsZVJlZjp0fX12YXIgJG89bXI7ZnVuY3Rpb24gZm4oZSl7dmFyIHQ9ZS5yZWFkX3NoaWZ0KDQpO3JldHVybiAwPT09dHx8NDI5NDk2NzI5NT09PXQ/IiI6ZS5yZWFkX3NoaWZ0KHQsImRiY3MiKX12YXIgam89bXIsb249Zm47ZnVuY3Rpb24gdW4oZSl7dmFyIHQ9ZS5zbGljZShl'@;
put 'LmwsZS5sKzQpLHI9MSZ0WzBdLGE9MiZ0WzBdO2UubCs9NDt2YXIgbj0wPT09YT9oMChbMCwwLDAsMCwyNTImdFswXSx0WzFdLHRbMl0sdFszXV0sMCk6THQodCwwKT4+MjtyZXR1cm4gcj9uLzEwMDpufWZ1bmN0aW9uIG9zKGUpe3ZhciB0PXtzOnt9LGU6e319O3JldHVybiB0LnMucj1lLnJl'@;
put 'YWRfc2hpZnQoNCksdC5lLnI9ZS5yZWFkX3NoaWZ0KDQpLHQucy5jPWUucmVhZF9zaGlmdCg0KSx0LmUuYz1lLnJlYWRfc2hpZnQoNCksdH12YXIgV3Q9b3M7ZnVuY3Rpb24gZ3IoZSl7aWYoZS5sZW5ndGgtZS5sPDgpdGhyb3ciWExTIFhudW0gQnVmZmVyIHVuZGVyZmxvdyI7cmV0dXJuIGUu'@;
put 'cmVhZF9zaGlmdCg4LCJmIil9ZnVuY3Rpb24gbHMoZSx0KXt2YXIgYT1lLnJlYWRfc2hpZnQoNCk7c3dpdGNoKGEpe2Nhc2UgMDpyZXR1cm4iIjtjYXNlIDQyOTQ5NjcyOTU6Y2FzZSA0Mjk0OTY3Mjk0OnJldHVybnsyOiJCSVRNQVAiLDM6Ik1FVEFGSUxFUElDVCIsODoiRElCIiwxNDoiRU5I'@;
put 'TUVUQUZJTEUifVtlLnJlYWRfc2hpZnQoNCldfHwiIn1pZihhPjQwMCl0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIENsaXBib2FyZDogIithLnRvU3RyaW5nKDE2KSk7cmV0dXJuIGUubC09NCxlLnJlYWRfc2hpZnQoMCwxPT10PyJscHN0ciI6Imxwd3N0ciIpfXZhciBobj0yLEFyPTMs'@;
put 'dXM9MTIsaHM9ODEsYWw9WzgwLGhzXSx4bj17MTp7bjoiQ29kZVBhZ2UiLHQ6aG59LDI6e246IkNhdGVnb3J5Iix0OjgwfSwzOntuOiJQcmVzZW50YXRpb25Gb3JtYXQiLHQ6ODB9LDQ6e246IkJ5dGVDb3VudCIsdDpBcn0sNTp7bjoiTGluZUNvdW50Iix0OkFyfSw2OntuOiJQYXJhZ3JhcGhD'@;
put 'b3VudCIsdDpBcn0sNzp7bjoiU2xpZGVDb3VudCIsdDpBcn0sODp7bjoiTm90ZUNvdW50Iix0OkFyfSw5OntuOiJIaWRkZW5Db3VudCIsdDpBcn0sMTA6e246Ik11bHRpbWVkaWFDbGlwQ291bnQiLHQ6QXJ9LDExOntuOiJTY2FsZUNyb3AiLHQ6MTF9LDEyOntuOiJIZWFkaW5nUGFpcnMiLHQ6'@;
put 'NDEwOH0sMTM6e246IlRpdGxlc09mUGFydHMiLHQ6NDEyNn0sMTQ6e246Ik1hbmFnZXIiLHQ6ODB9LDE1OntuOiJDb21wYW55Iix0OjgwfSwxNjp7bjoiTGlua3NVcFRvRGF0ZSIsdDoxMX0sMTc6e246IkNoYXJhY3RlckNvdW50Iix0OkFyfSwxOTp7bjoiU2hhcmVkRG9jIix0OjExfSwyMjp7'@;
put 'bjoiSHlwZXJsaW5rc0NoYW5nZWQiLHQ6MTF9LDIzOntuOiJBcHBWZXJzaW9uIix0OkFyLHA6InZlcnNpb24ifSwyNDp7bjoiRGlnU2lnIix0OjY1fSwyNjp7bjoiQ29udGVudFR5cGUiLHQ6ODB9LDI3OntuOiJDb250ZW50U3RhdHVzIix0OjgwfSwyODp7bjoiTGFuZ3VhZ2UiLHQ6ODB9LDI5'@;
put 'OntuOiJWZXJzaW9uIix0OjgwfSwyNTU6e30sMjE0NzQ4MzY0ODp7bjoiTG9jYWxlIix0OjE5fSwyMTQ3NDgzNjUxOntuOiJCZWhhdmlvciIsdDoxOX0sMTkxOTA1NDQzNDp7fX0sZG49ezE6e246IkNvZGVQYWdlIix0OmhufSwyOntuOiJUaXRsZSIsdDo4MH0sMzp7bjoiU3ViamVjdCIsdDo4'@;
put 'MH0sNDp7bjoiQXV0aG9yIix0OjgwfSw1OntuOiJLZXl3b3JkcyIsdDo4MH0sNjp7bjoiQ29tbWVudHMiLHQ6ODB9LDc6e246IlRlbXBsYXRlIix0OjgwfSw4OntuOiJMYXN0QXV0aG9yIix0OjgwfSw5OntuOiJSZXZOdW1iZXIiLHQ6ODB9LDEwOntuOiJFZGl0VGltZSIsdDo2NH0sMTE6e246'@;
put 'Ikxhc3RQcmludGVkIix0OjY0fSwxMjp7bjoiQ3JlYXRlZERhdGUiLHQ6NjR9LDEzOntuOiJNb2RpZmllZERhdGUiLHQ6NjR9LDE0OntuOiJQYWdlQ291bnQiLHQ6QXJ9LDE1OntuOiJXb3JkQ291bnQiLHQ6QXJ9LDE2OntuOiJDaGFyQ291bnQiLHQ6QXJ9LDE3OntuOiJUaHVtYm5haWwiLHQ6'@;
put 'NzF9LDE4OntuOiJBcHBsaWNhdGlvbiIsdDo4MH0sMTk6e246IkRvY1NlY3VyaXR5Iix0OkFyfSwyNTU6e30sMjE0NzQ4MzY0ODp7bjoiTG9jYWxlIix0OjE5fSwyMTQ3NDgzNjUxOntuOiJCZWhhdmlvciIsdDoxOX0sMTkxOTA1NDQzNDp7fX0seHM9ezE6IlVTIiwyOiJDQSIsMzoiIiw3OiJS'@;
put 'VSIsMjA6IkVHIiwzMDoiR1IiLDMxOiJOTCIsMzI6IkJFIiwzMzoiRlIiLDM0OiJFUyIsMzY6IkhVIiwzOToiSVQiLDQxOiJDSCIsNDM6IkFUIiw0NDoiR0IiLDQ1OiJESyIsNDY6IlNFIiw0NzoiTk8iLDQ4OiJQTCIsNDk6IkRFIiw1MjoiTVgiLDU1OiJCUiIsNjE6IkFVIiw2NDoiTloiLDY2'@;
put 'OiJUSCIsODE6IkpQIiw4MjoiS1IiLDg0OiJWTiIsODY6IkNOIiw5MDoiVFIiLDEwNToiSlMiLDIxMzoiRFoiLDIxNjoiTUEiLDIxODoiTFkiLDM1MToiUFQiLDM1NDoiSVMiLDM1ODoiRkkiLDQyMDoiQ1oiLDg4NjoiVFciLDk2MToiTEIiLDk2MjoiSk8iLDk2MzoiU1kiLDk2NDoiSVEiLDk2'@;
put 'NToiS1ciLDk2NjoiU0EiLDk3MToiQUUiLDk3MjoiSUwiLDk3NDoiUUEiLDk4MToiSVIiLDY1NTM1OiJVUyJ9LG5sPVtudWxsLCJzb2xpZCIsIm1lZGl1bUdyYXkiLCJkYXJrR3JheSIsImxpZ2h0R3JheSIsImRhcmtIb3Jpem9udGFsIiwiZGFya1ZlcnRpY2FsIiwiZGFya0Rvd24iLCJkYXJr'@;
put 'VXAiLCJkYXJrR3JpZCIsImRhcmtUcmVsbGlzIiwibGlnaHRIb3Jpem9udGFsIiwibGlnaHRWZXJ0aWNhbCIsImxpZ2h0RG93biIsImxpZ2h0VXAiLCJsaWdodEdyaWQiLCJsaWdodFRyZWxsaXMiLCJncmF5MTI1IiwiZ3JheTA2MjUiXTtmdW5jdGlvbiBpbChlKXtyZXR1cm4gZS5tYXAoZnVu'@;
put 'Y3Rpb24odCl7cmV0dXJuW3Q+PjE2JjI1NSx0Pj44JjI1NSwyNTUmdF19KX12YXIgVnQ9TWUoaWwoWzAsMTY3NzcyMTUsMTY3MTE2ODAsNjUyODAsMjU1LDE2Nzc2OTYwLDE2NzExOTM1LDY1NTM1LDAsMTY3NzcyMTUsMTY3MTE2ODAsNjUyODAsMjU1LDE2Nzc2OTYwLDE2NzExOTM1LDY1NTM1'@;
put 'LDgzODg2MDgsMzI3NjgsMTI4LDg0MjEzNzYsODM4ODczNiwzMjg5NiwxMjYzMjI1Niw4NDIxNTA0LDEwMDY2NDMxLDEwMDQwMTY2LDE2Nzc3MTY0LDEzNDM0ODc5LDY2ODQ3NzQsMTY3NDQ1NzYsMjYzMTYsMTM0MjE4MjMsMTI4LDE2NzExOTM1LDE2Nzc2OTYwLDY1NTM1LDgzODg3MzYsODM4'@;
put 'ODYwOCwzMjg5NiwyNTUsNTI0NzksMTM0MzQ4NzksMTM0MzQ4MjgsMTY3NzcxMTMsMTAwNzk0ODcsMTY3NTEwNTIsMTM0MDg3NjcsMTY3NjQwNTcsMzM2ODcwMywzMzk0NzY0LDEwMDc5MjMyLDE2NzYzOTA0LDE2NzUwODQ4LDE2NzM3NzkyLDY3MTA5MzcsOTg2ODk1MCwxMzE1OCwzMzgxNjA2'@;
put 'LDEzMDU2LDMzNTUzOTIsMTAwNDAwNjQsMTAwNDAxNjYsMzM1NTU0NSwzMzU1NDQzLDE2Nzc3MjE1LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMF0pKSx4dD17MDoiI05VTEwhIiw3OiIjRElWLzAhIiwxNToiI1ZBTFVFISIsMjM6IiNSRUYhIiwyOToiI05BTUU/IiwzNjoiI05V'@;
put 'TSEiLDQyOiIjTi9BIiw0MzoiI0dFVFRJTkdfREFUQSIsMjU1OiIjV1RGPyJ9LGRzPXsiI05VTEwhIjowLCIjRElWLzAhIjo3LCIjVkFMVUUhIjoxNSwiI1JFRiEiOjIzLCIjTkFNRT8iOjI5LCIjTlVNISI6MzYsIiNOL0EiOjQyLCIjR0VUVElOR19EQVRBIjo0MywiI1dURj8iOjI1NX0sdm49'@;
put 'eyJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5zaGVldC5tYWluK3htbCI6Indvcmtib29rcyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5zaGVldC5tYWNyb0VuYWJsZWQubWFpbit4bWwiOiJ3b3JrYm9va3MiLCJhcHBsaWNh'@;
put 'dGlvbi92bmQubXMtZXhjZWwuc2hlZXQuYmluYXJ5Lm1hY3JvRW5hYmxlZC5tYWluIjoid29ya2Jvb2tzIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLmFkZGluLm1hY3JvRW5hYmxlZC5tYWluK3htbCI6Indvcmtib29rcyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZp'@;
put 'Y2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnRlbXBsYXRlLm1haW4reG1sIjoid29ya2Jvb2tzIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwud29ya3NoZWV0K3htbCI6InNoZWV0cyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNl'@;
put 'bC53b3Jrc2hlZXQiOiJzaGVldHMiLCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwuYmluSW5kZXhXcyI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5jaGFydHNoZWV0K3htbCI6ImNoYXJ0cyIsImFwcGxpY2F0aW9u'@;
put 'L3ZuZC5tcy1leGNlbC5jaGFydHNoZWV0IjoiY2hhcnRzIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLm1hY3Jvc2hlZXQreG1sIjoibWFjcm9zIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLm1hY3Jvc2hlZXQiOiJtYWNyb3MiLCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwuaW50bG1h'@;
put 'Y3Jvc2hlZXQiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLmJpbkluZGV4TXMiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuZGlhbG9nc2hlZXQreG1sIjoiZGlhbG9ncyIsImFwcGxpY2F0aW9uL3Zu'@;
put 'ZC5tcy1leGNlbC5kaWFsb2dzaGVldCI6ImRpYWxvZ3MiLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5zaGFyZWRTdHJpbmdzK3htbCI6InN0cnMiLCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwuc2hhcmVkU3RyaW5ncyI6InN0'@;
put 'cnMiLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5zdHlsZXMreG1sIjoic3R5bGVzIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLnN0eWxlcyI6InN0eWxlcyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1wYWNr'@;
put 'YWdlLmNvcmUtcHJvcGVydGllcyt4bWwiOiJjb3JlcHJvcHMiLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuY3VzdG9tLXByb3BlcnRpZXMreG1sIjoiY3VzdHByb3BzIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50'@;
put 'LmV4dGVuZGVkLXByb3BlcnRpZXMreG1sIjoiZXh0cHJvcHMiLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuY3VzdG9tWG1sUHJvcGVydGllcyt4bWwiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNw'@;
put 'cmVhZHNoZWV0bWwuY3VzdG9tUHJvcGVydHkiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuY29tbWVudHMreG1sIjoiY29tbWVudHMiLCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwuY29tbWVudHMiOiJjb21tZW50'@;
put 'cyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC50aHJlYWRlZGNvbW1lbnRzK3htbCI6InRocmVhZGVkY29tbWVudHMiLCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwucGVyc29uK3htbCI6InBlb3BsZSIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5z'@;
put 'cHJlYWRzaGVldG1sLnNoZWV0TWV0YWRhdGEreG1sIjoibWV0YWRhdGEiLCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwuc2hlZXRNZXRhZGF0YSI6Im1ldGFkYXRhIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLnBpdm90VGFibGUiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxm'@;
put 'b3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwucGl2b3RUYWJsZSt4bWwiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LmRyYXdpbmdtbC5jaGFydCt4bWwiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm1zLW9mZmljZS5jaGFy'@;
put 'dGNvbG9yc3R5bGUreG1sIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1vZmZpY2UuY2hhcnRzdHlsZSt4bWwiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm1zLW9mZmljZS5jaGFydGV4K3htbCI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwuY2FsY0NoYWluIjoiY2FsY2No'@;
put 'YWlucyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLmNhbGNDaGFpbit4bWwiOiJjYWxjY2hhaW5zIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwucHJpbnRlclNl'@;
put 'dHRpbmdzIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1vZmZpY2UuYWN0aXZlWCI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQubXMtb2ZmaWNlLmFjdGl2ZVgreG1sIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5hdHRhY2hlZFRvb2xiYXJzIjoiVE9ETyIsImFwcGxpY2F0'@;
put 'aW9uL3ZuZC5tcy1leGNlbC5jb25uZWN0aW9ucyI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5jb25uZWN0aW9ucyt4bWwiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLmV4dGVybmFsTGluayI6Imxp'@;
put 'bmtzIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuZXh0ZXJuYWxMaW5rK3htbCI6ImxpbmtzIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLnBpdm90Q2FjaGVEZWZpbml0aW9uIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5t'@;
put 'cy1leGNlbC5waXZvdENhY2hlUmVjb3JkcyI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5waXZvdENhY2hlRGVmaW5pdGlvbit4bWwiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmlj'@;
put 'ZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwucGl2b3RDYWNoZVJlY29yZHMreG1sIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5xdWVyeVRhYmxlIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnF1ZXJ5'@;
put 'VGFibGUreG1sIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC51c2VyTmFtZXMiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLnJldmlzaW9uSGVhZGVycyI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwucmV2aXNpb25Mb2ciOiJUT0RPIiwiYXBwbGlj'@;
put 'YXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwucmV2aXNpb25IZWFkZXJzK3htbCI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5yZXZpc2lvbkxvZyt4bWwiOiJUT0RP'@;
put 'IiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwudXNlck5hbWVzK3htbCI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwudGFibGVTaW5nbGVDZWxscyI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1h'@;
put 'dHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC50YWJsZVNpbmdsZUNlbGxzK3htbCI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwuc2xpY2VyIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5zbGljZXJDYWNoZSI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQu'@;
put 'bXMtZXhjZWwuc2xpY2VyK3htbCI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwuc2xpY2VyQ2FjaGUreG1sIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC53c1NvcnRNYXAiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLnRhYmxlIjoiVE9ETyIsImFw'@;
put 'cGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnRhYmxlK3htbCI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQudGhlbWUreG1sIjoidGhlbWVzIiwiYXBwbGljYXRpb24vdm5kLm9wZW54'@;
put 'bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnRoZW1lT3ZlcnJpZGUreG1sIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5UaW1lbGluZSt4bWwiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLlRpbWVsaW5lQ2FjaGUreG1sIjoiVE9ETyIsImFwcGxpY2F0aW9uL3Zu'@;
put 'ZC5tcy1vZmZpY2UudmJhUHJvamVjdCI6InZiYSIsImFwcGxpY2F0aW9uL3ZuZC5tcy1vZmZpY2UudmJhUHJvamVjdFNpZ25hdHVyZSI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQubXMtb2ZmaWNlLnZvbGF0aWxlRGVwZW5kZW5jaWVzIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1s'@;
put 'Zm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnZvbGF0aWxlRGVwZW5kZW5jaWVzK3htbCI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwuY29udHJvbHByb3BlcnRpZXMreG1sIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vk'@;
put 'b2N1bWVudC5tb2RlbCtkYXRhIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5TdXJ2ZXkreG1sIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5kcmF3aW5nK3htbCI6ImRyYXdpbmdzIiwiYXBwbGljYXRpb24vdm5kLm9wZW54'@;
put 'bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LmRyYXdpbmdtbC5jaGFydHNoYXBlcyt4bWwiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LmRyYXdpbmdtbC5kaWFncmFtQ29sb3JzK3htbCI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQub3Blbnht'@;
put 'bGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuZHJhd2luZ21sLmRpYWdyYW1EYXRhK3htbCI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuZHJhd2luZ21sLmRpYWdyYW1MYXlvdXQreG1sIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1s'@;
put 'Zm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5kcmF3aW5nbWwuZGlhZ3JhbVN0eWxlK3htbCI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQudm1sRHJhd2luZyI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtcGFja2FnZS5y'@;
put 'ZWxhdGlvbnNoaXBzK3htbCI6InJlbHMiLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQub2xlT2JqZWN0IjoiVE9ETyIsImltYWdlL3BuZyI6IlRPRE8iLHNoZWV0OiJqcyJ9LGtlPXtXQjoiaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29m'@;
put 'ZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlwcy9vZmZpY2VEb2N1bWVudCIsU0hFRVQ6Imh0dHA6Ly9zaGVldGpzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L3JlbGF0aW9uc2hpcHMvb2ZmaWNlRG9jdW1lbnQiLEhMSU5LOiJodHRwOi8vc2NoZW1hcy5vcGVu'@;
put 'eG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL2h5cGVybGluayIsVk1MOiJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL3ZtbERyYXdpbmciLFhQQVRIOiJodHRwOi8vc2NoZW1h'@;
put 'cy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL2V4dGVybmFsTGlua1BhdGgiLFhNSVNTOiJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL29mZmljZS8yMDA2L3JlbGF0aW9uc2hpcHMveGxFeHRlcm5hbExpbmtQYXRoL3hsUGF0aE1pc3Np'@;
put 'bmciLFhMSU5LOiJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL2V4dGVybmFsTGluayIsQ1hNTDoiaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlw'@;
put 'cy9jdXN0b21YbWwiLENYTUxQOiJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL2N1c3RvbVhtbFByb3BzIixDTU5UOiJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9y'@;
put 'ZWxhdGlvbnNoaXBzL2NvbW1lbnRzIixDT1JFX1BST1BTOiJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvcGFja2FnZS8yMDA2L3JlbGF0aW9uc2hpcHMvbWV0YWRhdGEvY29yZS1wcm9wZXJ0aWVzIixFWFRfUFJPUFM6Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9y'@;
put 'Zy9vZmZpY2VEb2N1bWVudC8yMDA2L3JlbGF0aW9uc2hpcHMvZXh0ZW5kZWQtcHJvcGVydGllcyIsQ1VTVF9QUk9QUzoiaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlwcy9jdXN0b20tcHJvcGVydGllcyIsU1NUOiJodHRw'@;
put 'Oi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL3NoYXJlZFN0cmluZ3MiLFNUWToiaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlwcy9zdHlsZXMiLFRIRU1F'@;
put 'OiJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL3RoZW1lIixDSEFSVDoiaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlwcy9jaGFydCIsQ0hBUlRF'@;
put 'WDoiaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9vZmZpY2UvMjAxNC9yZWxhdGlvbnNoaXBzL2NoYXJ0RXgiLENTOiJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL2NoYXJ0c2hlZXQiLFdTOlsiaHR0cDovL3Nj'@;
put 'aGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlwcy93b3Jrc2hlZXQiLCJodHRwOi8vcHVybC5vY2xjLm9yZy9vb3htbC9vZmZpY2VEb2N1bWVudC9yZWxhdGlvbnNoaXBzL3dvcmtzaGVldCJdLERTOiJodHRwOi8vc2NoZW1hcy5vcGVueG1s'@;
put 'Zm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL2RpYWxvZ3NoZWV0IixNUzoiaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9vZmZpY2UvMjAwNi9yZWxhdGlvbnNoaXBzL3hsTWFjcm9zaGVldCIsSU1HOiJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0'@;
put 'cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL2ltYWdlIixEUkFXOiJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL2RyYXdpbmciLFhMTUVUQToiaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1h'@;
put 'dHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlwcy9zaGVldE1ldGFkYXRhIixUQ01OVDoiaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9vZmZpY2UvMjAxNy8xMC9yZWxhdGlvbnNoaXBzL3RocmVhZGVkQ29tbWVudCIsUEVPUExFOiJodHRwOi8vc2NoZW1hcy5taWNy'@;
put 'b3NvZnQuY29tL29mZmljZS8yMDE3LzEwL3JlbGF0aW9uc2hpcHMvcGVyc29uIixWQkE6Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vb2ZmaWNlLzIwMDYvcmVsYXRpb25zaGlwcy92YmFQcm9qZWN0In07ZnVuY3Rpb24gT2EoZSl7dmFyIHQ9ZS5sYXN0SW5kZXhPZigiLyIpO3JldHVy'@;
put 'biBlLnNsaWNlKDAsdCsxKSsiX3JlbHMvIitlLnNsaWNlKHQrMSkrIi5yZWxzIn1mdW5jdGlvbiBJYShlLHQpe3ZhciByPXsiIWlkIjp7fX07aWYoIWUpcmV0dXJuIHI7Ii8iIT09dC5jaGFyQXQoMCkmJih0PSIvIit0KTt2YXIgYT17fTtyZXR1cm4oZS5tYXRjaCh2cil8fFtdKS5mb3JFYWNo'@;
put 'KGZ1bmN0aW9uKG4pe3ZhciBpPW1lKG4pO2lmKCI8UmVsYXRpb25zaGlwIj09PWlbMF0pe3ZhciBzPXt9O3MuVHlwZT1pLlR5cGUscy5UYXJnZXQ9aS5UYXJnZXQscy5JZD1pLklkLGkuVGFyZ2V0TW9kZSYmKHMuVGFyZ2V0TW9kZT1pLlRhcmdldE1vZGUpO3ZhciBmPSJFeHRlcm5hbCI9PT1p'@;
put 'LlRhcmdldE1vZGU/aS5UYXJnZXQ6U2EoaS5UYXJnZXQsdCk7cltmXT1zLGFbaS5JZF09c319KSxyWyIhaWQiXT1hLHJ9dmFyIGNsPSJhcHBsaWNhdGlvbi92bmQub2FzaXMub3BlbmRvY3VtZW50LnNwcmVhZHNoZWV0IixWcj1bWyJjcDpjYXRlZ29yeSIsIkNhdGVnb3J5Il0sWyJjcDpjb250'@;
put 'ZW50U3RhdHVzIiwiQ29udGVudFN0YXR1cyJdLFsiY3A6a2V5d29yZHMiLCJLZXl3b3JkcyJdLFsiY3A6bGFzdE1vZGlmaWVkQnkiLCJMYXN0QXV0aG9yIl0sWyJjcDpsYXN0UHJpbnRlZCIsIkxhc3RQcmludGVkIl0sWyJjcDpyZXZpc2lvbiIsIlJldk51bWJlciJdLFsiY3A6dmVyc2lvbiIs'@;
put 'IlZlcnNpb24iXSxbImRjOmNyZWF0b3IiLCJBdXRob3IiXSxbImRjOmRlc2NyaXB0aW9uIiwiQ29tbWVudHMiXSxbImRjOmlkZW50aWZpZXIiLCJJZGVudGlmaWVyIl0sWyJkYzpsYW5ndWFnZSIsIkxhbmd1YWdlIl0sWyJkYzpzdWJqZWN0IiwiU3ViamVjdCJdLFsiZGM6dGl0bGUiLCJUaXRs'@;
put 'ZSJdLFsiZGN0ZXJtczpjcmVhdGVkIiwiQ3JlYXRlZERhdGUiLCJkYXRlIl0sWyJkY3Rlcm1zOm1vZGlmaWVkIiwiTW9kaWZpZWREYXRlIiwiZGF0ZSJdXSxkbD1mdW5jdGlvbigpe2Zvcih2YXIgZT1uZXcgQXJyYXkoVnIubGVuZ3RoKSx0PTA7dDxWci5sZW5ndGg7Kyt0KXt2YXIgcj1Wclt0'@;
put 'XSxhPSIoPzoiK3JbMF0uc2xpY2UoMCxyWzBdLmluZGV4T2YoIjoiKSkrIjopIityWzBdLnNsaWNlKHJbMF0uaW5kZXhPZigiOiIpKzEpO2VbdF09bmV3IFJlZ0V4cCgiPCIrYSsiW14+XSo+KFtcXHNcXFNdKj8pPC8iK2ErIj4iKX1yZXR1cm4gZX0oKTtmdW5jdGlvbiBtcyhlKXt2YXIgdD17'@;
put 'fTtlPUJlKGUpO2Zvcih2YXIgcj0wO3I8VnIubGVuZ3RoOysrcil7dmFyIGE9VnJbcl0sbj1lLm1hdGNoKGRsW3JdKTtudWxsIT1uJiZuLmxlbmd0aD4wJiYodFthWzFdXT1JZShuWzFdKSksImRhdGUiPT09YVsyXSYmdFthWzFdXSYmKHRbYVsxXV09WGUodFthWzFdXSkpfXJldHVybiB0fXZh'@;
put 'ciBYdD1bWyJBcHBsaWNhdGlvbiIsIkFwcGxpY2F0aW9uIiwic3RyaW5nIl0sWyJBcHBWZXJzaW9uIiwiQXBwVmVyc2lvbiIsInN0cmluZyJdLFsiQ29tcGFueSIsIkNvbXBhbnkiLCJzdHJpbmciXSxbIkRvY1NlY3VyaXR5IiwiRG9jU2VjdXJpdHkiLCJzdHJpbmciXSxbIk1hbmFnZXIiLCJN'@;
put 'YW5hZ2VyIiwic3RyaW5nIl0sWyJIeXBlcmxpbmtzQ2hhbmdlZCIsIkh5cGVybGlua3NDaGFuZ2VkIiwiYm9vbCJdLFsiU2hhcmVkRG9jIiwiU2hhcmVkRG9jIiwiYm9vbCJdLFsiTGlua3NVcFRvRGF0ZSIsIkxpbmtzVXBUb0RhdGUiLCJib29sIl0sWyJTY2FsZUNyb3AiLCJTY2FsZUNyb3Ai'@;
put 'LCJib29sIl0sWyJIZWFkaW5nUGFpcnMiLCJIZWFkaW5nUGFpcnMiLCJyYXciXSxbIlRpdGxlc09mUGFydHMiLCJUaXRsZXNPZlBhcnRzIiwicmF3Il1dO2Z1bmN0aW9uIHdzKGUsdCxyLGEpe3ZhciBuPVtdO2lmKCJzdHJpbmciPT10eXBlb2YgZSluPUhpKGUsYSk7ZWxzZSBmb3IodmFyIGk9'@;
put 'MDtpPGUubGVuZ3RoOysraSluPW4uY29uY2F0KGVbaV0ubWFwKGZ1bmN0aW9uKGwpe3JldHVybnt2Omx9fSkpO3ZhciBzPSJzdHJpbmciPT10eXBlb2YgdD9IaSh0LGEpLm1hcChmdW5jdGlvbihsKXtyZXR1cm4gbC52fSk6dCxmPTAsYz0wO2lmKHMubGVuZ3RoPjApZm9yKHZhciBvPTA7byE9'@;
put 'PW4ubGVuZ3RoO28rPTIpe3N3aXRjaChjPStuW28rMV0udixuW29dLnYpe2Nhc2UiV29ya3NoZWV0cyI6Y2FzZSJcdTVkZTVcdTRmNWNcdTg4NjgiOmNhc2UiXHUwNDFiXHUwNDM4XHUwNDQxXHUwNDQyXHUwNDRiIjpjYXNlIlx1MDYyM1x1MDY0OFx1MDYzMVx1MDYyN1x1MDY0MiBcdTA2Mjdc'@;
put 'dTA2NDRcdTA2MzlcdTA2NDVcdTA2NDQiOmNhc2UiXHUzMGVmXHUzMGZjXHUzMGFmXHUzMGI3XHUzMGZjXHUzMGM4IjpjYXNlIlx1MDVkMlx1MDVkY1x1MDVkOVx1MDVkNVx1MDVlMFx1MDVkNVx1MDVlYSBcdTA1ZTJcdTA1ZDFcdTA1ZDVcdTA1ZDNcdTA1ZDQiOmNhc2UiQXJiZWl0c2JsXHhl'@;
put 'NHR0ZXIiOmNhc2UiXHhjN2FsXHUwMTMxXHUwMTVmbWEgU2F5ZmFsYXJcdTAxMzEiOmNhc2UiRmV1aWxsZXMgZGUgY2FsY3VsIjpjYXNlIkZvZ2xpIGRpIGxhdm9ybyI6Y2FzZSJGb2xoYXMgZGUgY1x4ZTFsY3VsbyI6Y2FzZSJQbGFuaWxoYXMiOmNhc2UiUmVnbmVhcmsiOmNhc2UiSG9qYXMg'@;
put 'ZGUgY1x4ZTFsY3VsbyI6Y2FzZSJXZXJrYmxhZGVuIjpyLldvcmtzaGVldHM9YyxyLlNoZWV0TmFtZXM9cy5zbGljZShmLGYrYyk7YnJlYWs7Y2FzZSJOYW1lZCBSYW5nZXMiOmNhc2UiUmFuZ29zIGNvbiBub21icmUiOmNhc2UiXHU1NDBkXHU1MjRkXHU0ZWQ4XHUzMDRkXHU0ZTAwXHU4OWE3'@;
put 'IjpjYXNlIkJlbmFubnRlIEJlcmVpY2hlIjpjYXNlIk5hdm5naXZuZSBvbXJceGU1ZGVyIjpyLk5hbWVkUmFuZ2VzPWMsci5EZWZpbmVkTmFtZXM9cy5zbGljZShmLGYrYyk7YnJlYWs7Y2FzZSJDaGFydHMiOmNhc2UiRGlhZ3JhbW1lIjpyLkNoYXJ0c2hlZXRzPWMsci5DaGFydE5hbWVzPXMu'@;
put 'c2xpY2UoZixmK2MpfWYrPWN9fXZhciBfbixwbD0vPFtePl0rPltePF0qL2csZ249e1RpdGxlOiJUaXRsZSIsU3ViamVjdDoiU3ViamVjdCIsQXV0aG9yOiJBdXRob3IiLEtleXdvcmRzOiJLZXl3b3JkcyIsQ29tbWVudHM6IkRlc2NyaXB0aW9uIixMYXN0QXV0aG9yOiJMYXN0QXV0aG9yIixS'@;
put 'ZXZOdW1iZXI6IlJldmlzaW9uIixBcHBsaWNhdGlvbjoiQXBwTmFtZSIsTGFzdFByaW50ZWQ6Ikxhc3RQcmludGVkIixDcmVhdGVkRGF0ZToiQ3JlYXRlZCIsTW9kaWZpZWREYXRlOiJMYXN0U2F2ZWQiLENhdGVnb3J5OiJDYXRlZ29yeSIsTWFuYWdlcjoiTWFuYWdlciIsQ29tcGFueToiQ29t'@;
put 'cGFueSIsQXBwVmVyc2lvbjoiVmVyc2lvbiIsQ29udGVudFN0YXR1czoiQ29udGVudFN0YXR1cyIsSWRlbnRpZmllcjoiSWRlbnRpZmllciIsTGFuZ3VhZ2U6Ikxhbmd1YWdlIn07ZnVuY3Rpb24gZ2woZSx0LHIpe19ufHwoX249czAoZ24pKSxlW3Q9X25bdF18fHRdPXJ9ZnVuY3Rpb24gd24o'@;
put 'ZSl7dmFyIHQ9ZS5yZWFkX3NoaWZ0KDQpLHI9ZS5yZWFkX3NoaWZ0KDQpO3JldHVybiBuZXcgRGF0ZSgxZTMqKHIvMWU3Kk1hdGgucG93KDIsMzIpK3QvMWU3LTExNjQ0NDczNjAwKSkudG9JU09TdHJpbmcoKS5yZXBsYWNlKC9cLjAwMC8sIiIpfWZ1bmN0aW9uIFRzKGUsdCxyKXt2YXIgYT1l'@;
put 'Lmwsbj1lLnJlYWRfc2hpZnQoMCwibHBzdHItY3AiKTtpZihyKWZvcig7ZS5sLWEmMzspKytlLmw7cmV0dXJuIG59ZnVuY3Rpb24gU3MoZSx0LHIpe3ZhciBhPWUucmVhZF9zaGlmdCgwLCJscHdzdHIiKTtyZXR1cm4gciYmKGUubCs9NC0oYS5sZW5ndGgrMSYzKSYzKSxhfWZ1bmN0aW9uIEZz'@;
put 'KGUsdCxyKXtyZXR1cm4gMzE9PT10P1NzKGUpOlRzKGUsMCxyKX1mdW5jdGlvbiBrbihlLHQscil7cmV0dXJuIEZzKGUsdCwhMT09PXI/MDo0KX1mdW5jdGlvbiBGbChlKXt2YXIgdD1lLmwscj1fMChlLGhzKTtyZXR1cm4gMD09ZVtlLmxdJiYwPT1lW2UubCsxXSYmZS5sLXQmMiYmKGUubCs9'@;
put 'MiksW3IsXzAoZSxBcildfWZ1bmN0aW9uIHlzKGUsdCl7Zm9yKHZhciByPWUucmVhZF9zaGlmdCg0KSxhPXt9LG49MDtuIT1yOysrbil7dmFyIGk9ZS5yZWFkX3NoaWZ0KDQpLHM9ZS5yZWFkX3NoaWZ0KDQpO2FbaV09ZS5yZWFkX3NoaWZ0KHMsMTIwMD09PXQ/InV0ZjE2bGUiOiJ1dGY4Iiku'@;
put 'cmVwbGFjZShkciwiIikucmVwbGFjZSh3YSwiISIpLDEyMDA9PT10JiZzJTImJihlLmwrPTIpfXJldHVybiAzJmUubCYmKGUubD1lLmw+PjM8PDIpLGF9ZnVuY3Rpb24gQXMoZSl7dmFyIHQ9ZS5yZWFkX3NoaWZ0KDQpLHI9ZS5zbGljZShlLmwsZS5sK3QpO3JldHVybiBlLmwrPXQsKDMmdCk+'@;
put 'MCYmKGUubCs9NC0oMyZ0KSYzKSxyfWZ1bmN0aW9uIF8wKGUsdCxyKXt2YXIgbixhPWUucmVhZF9zaGlmdCgyKSxpPXJ8fHt9O2lmKGUubCs9Mix0IT09dXMmJmEhPT10JiYtMT09PWFsLmluZGV4T2YodCkmJig0MTI2IT0oNjU1MzQmdCl8fDQxMjYhPSg2NTUzNCZhKSkpdGhyb3cgbmV3IEVy'@;
put 'cm9yKCJFeHBlY3RlZCB0eXBlICIrdCsiIHNhdyAiK2EpO3N3aXRjaCh0PT09dXM/YTp0KXtjYXNlIDI6cmV0dXJuIG49ZS5yZWFkX3NoaWZ0KDIsImkiKSxpLnJhd3x8KGUubCs9MiksbjtjYXNlIDM6cmV0dXJuIGUucmVhZF9zaGlmdCg0LCJpIik7Y2FzZSAxMTpyZXR1cm4gMCE9PWUucmVh'@;
put 'ZF9zaGlmdCg0KTtjYXNlIDE5OnJldHVybiBlLnJlYWRfc2hpZnQoNCk7Y2FzZSAzMDpyZXR1cm4gVHMoZSwwLDQpLnJlcGxhY2UoZHIsIiIpO2Nhc2UgMzE6cmV0dXJuIFNzKGUpO2Nhc2UgNjQ6cmV0dXJuIHduKGUpO2Nhc2UgNjU6cmV0dXJuIEFzKGUpO2Nhc2UgNzE6cmV0dXJuIGZ1bmN0'@;
put 'aW9uIEFsKGUpe3ZhciB0PXt9O3JldHVybiB0LlNpemU9ZS5yZWFkX3NoaWZ0KDQpLGUubCs9dC5TaXplKzMtKHQuU2l6ZS0xKSU0LHR9KGUpO2Nhc2UgODA6cmV0dXJuIGtuKGUsYSwhaS5yYXcpLnJlcGxhY2UoZHIsIiIpO2Nhc2UgODE6cmV0dXJuIGZ1bmN0aW9uIEVsKGUsdCl7aWYoIXQp'@;
put 'dGhyb3cgbmV3IEVycm9yKCJWdFVuYWxpZ25lZFN0cmluZyBtdXN0IGhhdmUgcG9zaXRpdmUgbGVuZ3RoIik7cmV0dXJuIEZzKGUsdCwwKX0oZSxhKS5yZXBsYWNlKGRyLCIiKTtjYXNlIDQxMDg6cmV0dXJuIGZ1bmN0aW9uIHlsKGUpe2Zvcih2YXIgdD1lLnJlYWRfc2hpZnQoNCkscj1bXSxh'@;
put 'PTA7YTx0LzI7KythKXIucHVzaChGbChlKSk7cmV0dXJuIHJ9KGUpO2Nhc2UgNDEyNjpjYXNlIDQxMjc6cmV0dXJuIDQxMjc9PWE/ZnVuY3Rpb24gVGwoZSl7Zm9yKHZhciB0PWUucmVhZF9zaGlmdCg0KSxyPVtdLGE9MDthIT10OysrYSl7dmFyIG49ZS5sO3JbYV09ZS5yZWFkX3NoaWZ0KDAs'@;
put 'Imxwd3N0ciIpLnJlcGxhY2UoZHIsIiIpLGUubC1uJjImJihlLmwrPTIpfXJldHVybiByfShlKTpmdW5jdGlvbiBTbChlKXtmb3IodmFyIHQ9ZS5yZWFkX3NoaWZ0KDQpLHI9W10sYT0wO2EhPXQ7KythKXJbYV09ZS5yZWFkX3NoaWZ0KDAsImxwc3RyLWNwIikucmVwbGFjZShkciwiIik7cmV0'@;
put 'dXJuIHJ9KGUpO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJUeXBlZFByb3BlcnR5VmFsdWUgdW5yZWNvZ25pemVkIHR5cGUgIit0KyIgIithKX19ZnVuY3Rpb24gRHMoZSx0KXt2YXIgcj1lLmwsYT1lLnJlYWRfc2hpZnQoNCksbj1lLnJlYWRfc2hpZnQoNCksaT1bXSxzPTAsZj0wLGM9LTEs'@;
put 'bz17fTtmb3Iocz0wO3MhPW47KytzKXt2YXIgbD1lLnJlYWRfc2hpZnQoNCksaD1lLnJlYWRfc2hpZnQoNCk7aVtzXT1bbCxoK3JdfWkuc29ydChmdW5jdGlvbihULGcpe3JldHVybiBUWzFdLWdbMV19KTt2YXIgeD17fTtmb3Iocz0wO3MhPW47KytzKXtpZihlLmwhPT1pW3NdWzFdKXt2YXIg'@;
put 'ZD0hMDtpZihzPjAmJnQpc3dpdGNoKHRbaVtzLTFdWzBdXS50KXtjYXNlIDI6ZS5sKzI9PT1pW3NdWzFdJiYoZS5sKz0yLGQ9ITEpO2JyZWFrO2Nhc2UgODA6Y2FzZSA0MTA4OmUubDw9aVtzXVsxXSYmKGUubD1pW3NdWzFdLGQ9ITEpfWlmKCghdHx8MD09cykmJmUubDw9aVtzXVsxXSYmKGQ9'@;
put 'ITEsZS5sPWlbc11bMV0pLGQpdGhyb3cgbmV3IEVycm9yKCJSZWFkIEVycm9yOiBFeHBlY3RlZCBhZGRyZXNzICIraVtzXVsxXSsiIGF0ICIrZS5sKyIgOiIrcyl9aWYodCl7dmFyIHY9dFtpW3NdWzBdXTtpZih4W3Yubl09XzAoZSx2LnQse3JhdzohMH0pLCJ2ZXJzaW9uIj09PXYucCYmKHhb'@;
put 'di5uXT1TdHJpbmcoeFt2Lm5dPj4xNikrIi4iKygiMDAwMCIrU3RyaW5nKDY1NTM1Jnhbdi5uXSkpLnNsaWNlKC00KSksIkNvZGVQYWdlIj09di5uKXN3aXRjaCh4W3Yubl0pe2Nhc2UgMDp4W3Yubl09MTI1MjtjYXNlIDg3NDpjYXNlIDkzMjpjYXNlIDkzNjpjYXNlIDk0OTpjYXNlIDk1MDpj'@;
put 'YXNlIDEyNTA6Y2FzZSAxMjUxOmNhc2UgMTI1MzpjYXNlIDEyNTQ6Y2FzZSAxMjU1OmNhc2UgMTI1NjpjYXNlIDEyNTc6Y2FzZSAxMjU4OmNhc2UgMWU0OmNhc2UgMTIwMDpjYXNlIDEyMDE6Y2FzZSAxMjUyOmNhc2UgNjVlMzpjYXNlLTUzNjpjYXNlIDY1MDAxOmNhc2UtNTM1Ok1yKGY9eFt2'@;
put 'Lm5dPj4+MCY2NTUzNSk7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIENvZGVQYWdlOiAiK3hbdi5uXSl9fWVsc2UgaWYoMT09PWlbc11bMF0pe2lmKGY9eC5Db2RlUGFnZT1fMChlLGhuKSxNcihmKSwtMSE9PWMpe3ZhciB1PWUubDtlLmw9aVtjXVsxXSxvPXlz'@;
put 'KGUsZiksZS5sPXV9fWVsc2UgaWYoMD09PWlbc11bMF0pe2lmKDA9PT1mKXtjPXMsZS5sPWlbcysxXVsxXTtjb250aW51ZX1vPXlzKGUsZil9ZWxzZXt2YXIgayxwPW9baVtzXVswXV07c3dpdGNoKGVbZS5sXSl7Y2FzZSA2NTplLmwrPTQsaz1BcyhlKTticmVhaztjYXNlIDMwOmNhc2UgMzE6'@;
put 'ZS5sKz00LGs9a24oZSxlW2UubC00XSkucmVwbGFjZSgvXHUwMDAwKyQvLCIiKTticmVhaztjYXNlIDM6ZS5sKz00LGs9ZS5yZWFkX3NoaWZ0KDQsImkiKTticmVhaztjYXNlIDE5OmUubCs9NCxrPWUucmVhZF9zaGlmdCg0KTticmVhaztjYXNlIDU6ZS5sKz00LGs9ZS5yZWFkX3NoaWZ0KDgs'@;
put 'ImYiKTticmVhaztjYXNlIDExOmUubCs9NCxrPUplKGUsNCk7YnJlYWs7Y2FzZSA2NDplLmwrPTQsaz1YZSh3bihlKSk7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoInVucGFyc2VkIHZhbHVlOiAiK2VbZS5sXSl9eFtwXT1rfX1yZXR1cm4gZS5sPXIrYSx4fWZ1bmN0aW9uIFJzKGUs'@;
put 'dCxyKXt2YXIgYT1lLmNvbnRlbnQ7aWYoIWEpcmV0dXJue307aHIoYSwwKTt2YXIgbixpLHMsZixjPTA7YS5jaGsoImZlZmYiLCJCeXRlIE9yZGVyOiAiKSxhLnJlYWRfc2hpZnQoMik7dmFyIG89YS5yZWFkX3NoaWZ0KDQpLGw9YS5yZWFkX3NoaWZ0KDE2KTtpZihsIT09dmUudXRpbHMuY29u'@;
put 'c3RzLkhFQURFUl9DTFNJRCYmbCE9PXIpdGhyb3cgbmV3IEVycm9yKCJCYWQgUHJvcGVydHlTZXQgQ0xTSUQgIitsKTtpZigxIT09KG49YS5yZWFkX3NoaWZ0KDQpKSYmMiE9PW4pdGhyb3cgbmV3IEVycm9yKCJVbnJlY29nbml6ZWQgI1NldHM6ICIrbik7aWYoaT1hLnJlYWRfc2hpZnQoMTYp'@;
put 'LGY9YS5yZWFkX3NoaWZ0KDQpLDE9PT1uJiZmIT09YS5sKXRocm93IG5ldyBFcnJvcigiTGVuZ3RoIG1pc21hdGNoOiAiK2YrIiAhPT0gIithLmwpOzI9PT1uJiYocz1hLnJlYWRfc2hpZnQoMTYpLGM9YS5yZWFkX3NoaWZ0KDQpKTt2YXIgdixoPURzKGEsdCkseD17U3lzdGVtSWRlbnRpZmll'@;
put 'cjpvfTtmb3IodmFyIGQgaW4gaCl4W2RdPWhbZF07aWYoeC5GTVRJRD1pLDE9PT1uKXJldHVybiB4O2lmKGMtYS5sPT0yJiYoYS5sKz0yKSxhLmwhPT1jKXRocm93IG5ldyBFcnJvcigiTGVuZ3RoIG1pc21hdGNoIDI6ICIrYS5sKyIgIT09ICIrYyk7dHJ5e3Y9RHMoYSxudWxsKX1jYXRjaHt9'@;
put 'Zm9yKGQgaW4gdil4W2RdPXZbZF07cmV0dXJuIHguRk1USUQ9W2ksc10seH1mdW5jdGlvbiB5dChlLHQpe3JldHVybiBlLnJlYWRfc2hpZnQodCksbnVsbH1mdW5jdGlvbiBKZShlLHQpe3JldHVybiAxPT09ZS5yZWFkX3NoaWZ0KHQpfWZ1bmN0aW9uIHRyKGUpe3JldHVybiBlLnJlYWRfc2hp'@;
put 'ZnQoMiwidSIpfWZ1bmN0aW9uIGJzKGUsdCl7cmV0dXJuIGZ1bmN0aW9uIE9sKGUsdCxyKXtmb3IodmFyIGE9W10sbj1lLmwrdDtlLmw8bjspYS5wdXNoKHIoZSxuLWUubCkpO2lmKG4hPT1lLmwpdGhyb3cgbmV3IEVycm9yKCJTbHVycCBlcnJvciIpO3JldHVybiBhfShlLHQsdHIpfWZ1bmN0'@;
put 'aW9uIFJhKGUsdCxyKXt2YXIgYT1lLnJlYWRfc2hpZnQociYmci5iaWZmPj0xMj8yOjEpLG49InNiY3MtY29udCIsaT1EcjtyJiZyLmJpZmY+PTgmJihEcj0xMjAwKSxyJiY4IT1yLmJpZmY/MTI9PXIuYmlmZiYmKG49IndzdHIiKTplLnJlYWRfc2hpZnQoMSkmJihuPSJkYmNzLWNvbnQiKSxy'@;
put 'LmJpZmY+PTImJnIuYmlmZjw9NSYmKG49ImNwc3RyIik7dmFyIGY9YT9lLnJlYWRfc2hpZnQoYSxuKToiIjtyZXR1cm4gRHI9aSxmfWZ1bmN0aW9uIFJsKGUpe3ZhciB0PURyO0RyPTEyMDA7dmFyIGMscj1lLnJlYWRfc2hpZnQoMiksYT1lLnJlYWRfc2hpZnQoMSksbj00JmEsaT04JmEscz0x'@;
put 'KygxJmEpLGY9MCxvPXt9O2kmJihmPWUucmVhZF9zaGlmdCgyKSksbiYmKGM9ZS5yZWFkX3NoaWZ0KDQpKTt2YXIgaD0wPT09cj8iIjplLnJlYWRfc2hpZnQociwyPT1zPyJkYmNzLWNvbnQiOiJzYmNzLWNvbnQiKTtyZXR1cm4gaSYmKGUubCs9NCpmKSxuJiYoZS5sKz1jKSxvLnQ9aCxpfHwo'@;
put 'by5yYXc9Ijx0PiIrby50KyI8L3Q+IixvLnI9by50KSxEcj10LG99ZnVuY3Rpb24gR3QoZSx0LHIpe2lmKHIpe2lmKHIuYmlmZj49MiYmci5iaWZmPD01KXJldHVybiBlLnJlYWRfc2hpZnQodCwiY3BzdHIiKTtpZihyLmJpZmY+PTEyKXJldHVybiBlLnJlYWRfc2hpZnQodCwiZGJjcy1jb250'@;
put 'Iil9dmFyIG49ZS5yZWFkX3NoaWZ0KDEpO3JldHVybiBlLnJlYWRfc2hpZnQodCwwPT09bj8ic2Jjcy1jb250IjoiZGJjcy1jb250Iil9ZnVuY3Rpb24gTmEoZSx0LHIpe3ZhciBhPWUucmVhZF9zaGlmdChyJiYyPT1yLmJpZmY/MToyKTtyZXR1cm4gMD09PWE/KGUubCsrLCIiKTpHdChlLGEs'@;
put 'cil9ZnVuY3Rpb24genQoZSx0LHIpe2lmKHIuYmlmZj41KXJldHVybiBOYShlLDAscik7dmFyIGE9ZS5yZWFkX3NoaWZ0KDEpO3JldHVybiAwPT09YT8oZS5sKyssIiIpOmUucmVhZF9zaGlmdChhLHIuYmlmZjw9NHx8IWUubGVucz8iY3BzdHIiOiJzYmNzLWNvbnQiKX1mdW5jdGlvbiB3MChl'@;
put 'KXt2YXIgdD1lLnJlYWRfc2hpZnQoNCk7cmV0dXJuIHQ+MD9lLnJlYWRfc2hpZnQodCwidXRmMTZsZSIpLnJlcGxhY2UoZHIsIiIpOiIifWZ1bmN0aW9uIE1zKGUpe3JldHVybltlLnJlYWRfc2hpZnQoMSksZS5yZWFkX3NoaWZ0KDEpLGUucmVhZF9zaGlmdCgxKSxlLnJlYWRfc2hpZnQoMSld'@;
put 'fWZ1bmN0aW9uIFVzKGUsdCl7dmFyIHI9TXMoZSk7cmV0dXJuIHJbM109MCxyfWZ1bmN0aW9uIG50KGUpe3JldHVybntyOmUucmVhZF9zaGlmdCgyKSxjOmUucmVhZF9zaGlmdCgyKSxpeGZlOmUucmVhZF9zaGlmdCgyKX19ZnVuY3Rpb24gVmwoZSx0LHIpe3ZhciBhPXIuYmlmZj44PzQ6Mjty'@;
put 'ZXR1cm5bZS5yZWFkX3NoaWZ0KGEpLGUucmVhZF9zaGlmdChhLCJpIiksZS5yZWFkX3NoaWZ0KGEsImkiKV19ZnVuY3Rpb24gV3MoZSl7cmV0dXJuW2UucmVhZF9zaGlmdCgyKSx1bihlKV19ZnVuY3Rpb24gazAoZSl7dmFyIHQ9ZS5yZWFkX3NoaWZ0KDIpLHI9ZS5yZWFkX3NoaWZ0KDIpO3Jl'@;
put 'dHVybntzOntjOmUucmVhZF9zaGlmdCgyKSxyOnR9LGU6e2M6ZS5yZWFkX3NoaWZ0KDIpLHJ9fX1mdW5jdGlvbiBWcyhlKXt2YXIgdD1lLnJlYWRfc2hpZnQoMikscj1lLnJlYWRfc2hpZnQoMik7cmV0dXJue3M6e2M6ZS5yZWFkX3NoaWZ0KDEpLHI6dH0sZTp7YzplLnJlYWRfc2hpZnQoMSks'@;
put 'cn19fXZhciBHbD1WcztmdW5jdGlvbiBYcyhlKXtlLmwrPTQ7dmFyIHQ9ZS5yZWFkX3NoaWZ0KDIpLHI9ZS5yZWFkX3NoaWZ0KDIpLGE9ZS5yZWFkX3NoaWZ0KDIpO3JldHVybiBlLmwrPTEyLFtyLHQsYV19ZnVuY3Rpb24gX3IoZSl7ZS5sKz0yLGUubCs9ZS5yZWFkX3NoaWZ0KDIpfXZhciBq'@;
put 'bD17MDpfciw0Ol9yLDU6X3IsNjpfciw3OmZ1bmN0aW9uICRsKGUpe3JldHVybiBlLmwrPTQsZS5jZj1lLnJlYWRfc2hpZnQoMikse319LDg6X3IsOTpfciwxMDpfciwxMTpfciwxMjpfciwxMzpmdW5jdGlvbiB6bChlKXt2YXIgdD17fTtyZXR1cm4gZS5sKz00LGUubCs9MTYsdC5mU2hhcmVk'@;
put 'Tm90ZT1lLnJlYWRfc2hpZnQoMiksZS5sKz00LHR9LDE0Ol9yLDE1Ol9yLDE2Ol9yLDE3Ol9yLDE4Ol9yLDE5Ol9yLDIwOl9yLDIxOlhzfTtmdW5jdGlvbiBFMChlLHQpe3ZhciByPXtCSUZGVmVyOjAsZHQ6MH07c3dpdGNoKHIuQklGRlZlcj1lLnJlYWRfc2hpZnQoMiksKHQtPTIpPj0yJiYo'@;
put 'ci5kdD1lLnJlYWRfc2hpZnQoMiksZS5sLT0yKSxyLkJJRkZWZXIpe2Nhc2UgMTUzNjpjYXNlIDEyODA6Y2FzZSAxMDI0OmNhc2UgNzY4OmNhc2UgNTEyOmNhc2UgMjpjYXNlIDc6YnJlYWs7ZGVmYXVsdDppZih0PjYpdGhyb3cgbmV3IEVycm9yKCJVbmV4cGVjdGVkIEJJRkYgVmVyICIrci5C'@;
put 'SUZGVmVyKX1yZXR1cm4gZS5yZWFkX3NoaWZ0KHQpLHJ9ZnVuY3Rpb24gR3MoZSx0LHIpe3ZhciBhPTA7ciYmMj09ci5iaWZmfHwoYT1lLnJlYWRfc2hpZnQoMikpO3ZhciBuPWUucmVhZF9zaGlmdCgyKTtyZXR1cm4gciYmMj09ci5iaWZmJiYoYT0xLShuPj4xNSksbiY9MzI3NjcpLFt7VW5z'@;
put 'eW5jZWQ6MSZhLER5WmVybzooMiZhKT4+MSxFeEFzYzooNCZhKT4+MixFeERzYzooOCZhKT4+M30sbl19dmFyIHd1PXp0O2Z1bmN0aW9uIHpzKGUsdCxyKXt2YXIgYT1lLmwrdCxuPTghPXIuYmlmZiYmci5iaWZmPzI6NCxpPWUucmVhZF9zaGlmdChuKSxzPWUucmVhZF9zaGlmdChuKSxmPWUu'@;
put 'cmVhZF9zaGlmdCgyKSxjPWUucmVhZF9zaGlmdCgyKTtyZXR1cm4gZS5sPWEse3M6e3I6aSxjOmZ9LGU6e3I6cyxjfX19ZnVuY3Rpb24ganMoZSx0LHIpe3ZhciBhPW50KGUpOygyPT1yLmJpZmZ8fDk9PXQpJiYrK2UubDt2YXIgbj1mdW5jdGlvbiBJbChlKXt2YXIgdD1lLnJlYWRfc2hpZnQo'@;
put 'MSk7cmV0dXJuIDE9PT1lLnJlYWRfc2hpZnQoMSk/dDoxPT09dH0oZSk7cmV0dXJuIGEudmFsPW4sYS50PSEwPT09bnx8ITE9PT1uPyJiIjoiZSIsYX12YXIgS3M9ZnVuY3Rpb24gSGwoZSx0LHIpe3JldHVybiAwPT09dD8iIjp6dChlLDAscil9O2Z1bmN0aW9uIFlzKGUsdCxyKXt2YXIgbixh'@;
put 'PWUucmVhZF9zaGlmdCgyKSxpPXtmQnVpbHRJbjoxJmEsZldhbnRBZHZpc2U6YT4+PjEmMSxmV2FudFBpY3Q6YT4+PjImMSxmT2xlOmE+Pj4zJjEsZk9sZUxpbms6YT4+PjQmMSxjZjphPj4+NSYxMDIzLGZJY29uOmE+Pj4xNSYxfTtyZXR1cm4gMTQ4NDk9PT1yLnNiY2NoJiYobj1mdW5jdGlv'@;
put 'biBYbChlLHQscil7ZS5sKz00O3ZhciBhPWUubCsodC09NCksbj1SYShlLDAsciksaT1lLnJlYWRfc2hpZnQoMik7aWYoaSE9PShhLT1lLmwpKXRocm93IG5ldyBFcnJvcigiTWFsZm9ybWVkIEFkZGluVWRmOiBwYWRkaW5nID0gIithKyIgIT0gIitpKTtyZXR1cm4gZS5sKz1pLG59KGUsdC0y'@;
put 'LHIpKSxpLmJvZHk9bnx8ZS5yZWFkX3NoaWZ0KHQtMiksInN0cmluZyI9PXR5cGVvZiBuJiYoaS5OYW1lPW4pLGl9dmFyIE51PVsiX3hsbm0uQ29uc29saWRhdGVfQXJlYSIsIl94bG5tLkF1dG9fT3BlbiIsIl94bG5tLkF1dG9fQ2xvc2UiLCJfeGxubS5FeHRyYWN0IiwiX3hsbm0uRGF0YWJh'@;
put 'c2UiLCJfeGxubS5Dcml0ZXJpYSIsIl94bG5tLlByaW50X0FyZWEiLCJfeGxubS5QcmludF9UaXRsZXMiLCJfeGxubS5SZWNvcmRlciIsIl94bG5tLkRhdGFfRm9ybSIsIl94bG5tLkF1dG9fQWN0aXZhdGUiLCJfeGxubS5BdXRvX0RlYWN0aXZhdGUiLCJfeGxubS5TaGVldF9UaXRsZSIsIl94'@;
put 'bG5tLl9GaWx0ZXJEYXRhYmFzZSJdO2Z1bmN0aW9uIEpzKGUsdCxyKXt2YXIgYT1lLmwrdCxuPWUucmVhZF9zaGlmdCgyKSxpPWUucmVhZF9zaGlmdCgxKSxzPWUucmVhZF9zaGlmdCgxKSxmPWUucmVhZF9zaGlmdChyJiYyPT1yLmJpZmY/MToyKSxjPTA7KCFyfHxyLmJpZmY+PTUpJiYoNSE9'@;
put 'ci5iaWZmJiYoZS5sKz0yKSxjPWUucmVhZF9zaGlmdCgyKSw1PT1yLmJpZmYmJihlLmwrPTIpLGUubCs9NCk7dmFyIG89R3QoZSxzLHIpOzMyJm4mJihvPU51W28uY2hhckNvZGVBdCgwKV0pO3ZhciBsPWEtZS5sO3ImJjI9PXIuYmlmZiYmLS1sO3ZhciBoPWEhPWUubCYmMCE9PWYmJmw+MD9m'@;
put 'dW5jdGlvbiBLZChlLHQscixhKXt2YXIgcyxuPWUubCt0LGk9SGEoZSxhLHIpO3JldHVybiBuIT09ZS5sJiYocz1XYShlLG4tZS5sLGkscikpLFtpLHNdfShlLGwscixmKTpbXTtyZXR1cm57Y2hLZXk6aSxOYW1lOm8saXRhYjpjLHJnY2U6aH19ZnVuY3Rpb24gcXMoZSx0LHIpe2lmKHIuYmlm'@;
put 'Zjw4KXJldHVybiBmdW5jdGlvbiBidShlLHQscil7Mz09ZVtlLmwrMV0mJmVbZS5sXSsrO3ZhciBhPVJhKGUsMCxyKTtyZXR1cm4gMz09YS5jaGFyQ29kZUF0KDApP2Euc2xpY2UoMSk6YX0oZSwwLHIpO2Zvcih2YXIgYT1bXSxuPWUubCt0LGk9ZS5yZWFkX3NoaWZ0KHIuYmlmZj44PzQ6Mik7'@;
put 'MCE9aS0tOylhLnB1c2goVmwoZSwwLHIpKTtpZihlLmwhPW4pdGhyb3cgbmV3IEVycm9yKCJCYWQgRXh0ZXJuU2hlZXQ6ICIrZS5sKyIgIT0gIituKTtyZXR1cm4gYX1mdW5jdGlvbiBacyhlLHQscil7dmFyIGE9R2woZSw2KTtzd2l0Y2goci5iaWZmKXtjYXNlIDI6ZS5sKyssdC09NzticmVh'@;
put 'aztjYXNlIDM6Y2FzZSA0OmUubCs9Mix0LT04O2JyZWFrO2RlZmF1bHQ6ZS5sKz02LHQtPTEyfXJldHVyblthLCRkKGUsdCxyKV19dmFyIFh1PXs4OmZ1bmN0aW9uKGUsdCl7dmFyIHI9ZS5sK3Q7ZS5sKz0xMDt2YXIgYT1lLnJlYWRfc2hpZnQoMik7ZS5sKz00LGUubCs9MixlLmwrPTIsZS5s'@;
put 'Kz0yLGUubCs9NDt2YXIgbj1lLnJlYWRfc2hpZnQoMSk7cmV0dXJuIGUubCs9bixlLmw9cix7Zm10OmF9fX07ZnVuY3Rpb24gUXMoZSx0LHIpe2lmKCFyLmNlbGxTdHlsZXMpcmV0dXJuIHByKGUsdCk7dmFyIGE9ciYmci5iaWZmPj0xMj80OjIsbj1lLnJlYWRfc2hpZnQoYSksaT1lLnJlYWRf'@;
put 'c2hpZnQoYSkscz1lLnJlYWRfc2hpZnQoYSksZj1lLnJlYWRfc2hpZnQoYSksYz1lLnJlYWRfc2hpZnQoMik7Mj09YSYmKGUubCs9Mik7dmFyIG89e3M6bixlOmksdzpzLGl4ZmU6ZixmbGFnczpjfTtyZXR1cm4oci5iaWZmPj01fHwhci5iaWZmKSYmKG8ubGV2ZWw9Yz4+OCY3KSxvfXZhciBp'@;
put 'aD1udCxzaD1icyxmaD1OYSxtaD1bMiwzLDQ4LDQ5LDEzMSwxMzksMTQwLDI0NV0sVG49ZnVuY3Rpb24oKXt2YXIgZT17MTo0MzcsMjo4NTAsMzoxMjUyLDQ6MWU0LDEwMDo4NTIsMTAxOjg2NiwxMDI6ODY1LDEwMzo4NjEsMTA0Ojg5NSwxMDU6NjIwLDEwNjo3MzcsMTA3Ojg1NywxMjA6OTUw'@;
put 'LDEyMTo5NDksMTIyOjkzNiwxMjM6OTMyLDEyNDo4NzQsMTI1OjEyNTUsMTI2OjEyNTYsMTUwOjEwMDA3LDE1MToxMDAyOSwxNTI6MTAwMDYsMjAwOjEyNTAsMjAxOjEyNTEsMjAyOjEyNTQsMjAzOjEyNTMsMDoyMDEyNyw4Ojg2NSw5OjQzNywxMDo4NTAsMTE6NDM3LDEzOjQzNywxNDo4NTAs'@;
put 'MTU6NDM3LDE2Ojg1MCwxNzo0MzcsMTg6ODUwLDE5OjkzMiwyMDo4NTAsMjE6NDM3LDIyOjg1MCwyMzo4NjUsMjQ6NDM3LDI1OjQzNywyNjo4NTAsMjc6NDM3LDI4Ojg2MywyOTo4NTAsMzE6ODUyLDM0Ojg1MiwzNTo4NTIsMzY6ODYwLDM3Ojg1MCwzODo4NjYsNTU6ODUwLDY0Ojg1Miw3Nzo5'@;
put 'MzYsNzg6OTQ5LDc5Ojk1MCw4MDo4NzQsODc6MTI1Miw4ODoxMjUyLDg5OjEyNTIsMTA4Ojg2MywxMzQ6NzM3LDEzNTo4NTIsMTM2Ojg1NywyMDQ6MTI1NywyNTU6MTY5Njl9LHQ9czAoezE6NDM3LDI6ODUwLDM6MTI1Miw0OjFlNCwxMDA6ODUyLDEwMTo4NjYsMTAyOjg2NSwxMDM6ODYxLDEw'@;
put 'NDo4OTUsMTA1OjYyMCwxMDY6NzM3LDEwNzo4NTcsMTIwOjk1MCwxMjE6OTQ5LDEyMjo5MzYsMTIzOjkzMiwxMjQ6ODc0LDEyNToxMjU1LDEyNjoxMjU2LDE1MDoxMDAwNywxNTE6MTAwMjksMTUyOjEwMDA2LDIwMDoxMjUwLDIwMToxMjUxLDIwMjoxMjU0LDIwMzoxMjUzLDA6MjAxMjd9KTtm'@;
put 'dW5jdGlvbiBhKGYsYyl7dmFyIG89Y3x8e307by5kYXRlTkZ8fChvLmRhdGVORj0ieXl5eW1tZGQiKTt2YXIgbD1zYShmdW5jdGlvbiByKGYsYyl7dmFyIG89W10sbD1fdCgxKTtzd2l0Y2goYy50eXBlKXtjYXNlImJhc2U2NCI6bD1JcihPcihmKSk7YnJlYWs7Y2FzZSJiaW5hcnkiOmw9SXIo'@;
put 'Zik7YnJlYWs7Y2FzZSJidWZmZXIiOmNhc2UiYXJyYXkiOmw9Zn1ocihsLDApO3ZhciBoPWwucmVhZF9zaGlmdCgxKSx4PSEhKDEzNiZoKSxkPSExLHY9ITE7c3dpdGNoKGgpe2Nhc2UgMjpjYXNlIDM6Y2FzZSAxMzE6Y2FzZSAxMzk6Y2FzZSAyNDU6YnJlYWs7Y2FzZSA0ODpjYXNlIDQ5OmQ9'@;
put 'ITAseD0hMDticmVhaztjYXNlIDE0MDp2PSEwO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJEQkYgVW5zdXBwb3J0ZWQgVmVyc2lvbjogIitoLnRvU3RyaW5nKDE2KSl9dmFyIHU9MCxwPTUyMTsyPT1oJiYodT1sLnJlYWRfc2hpZnQoMikpLGwubCs9MywyIT1oJiYodT1sLnJlYWRf'@;
put 'c2hpZnQoNCkpLHU+MTA0ODU3NiYmKHU9MWU2KSwyIT1oJiYocD1sLnJlYWRfc2hpZnQoMikpO3ZhciBrPWwucmVhZF9zaGlmdCgyKSxUPWMuY29kZXBhZ2V8fDEyNTI7MiE9aCYmKGwubCs9MTYsbC5yZWFkX3NoaWZ0KDEpLDAhPT1sW2wubF0mJihUPWVbbFtsLmxdXSksbC5sKz0xLGwubCs9'@;
put 'MiksdiYmKGwubCs9MzYpO2Zvcih2YXIgZz1bXSxOPXt9LE09TWF0aC5taW4obC5sZW5ndGgsMj09aD81MjE6cC0xMC0oZD8yNjQ6MCkpLEk9dj8zMjoxMTtsLmw8TSYmMTMhPWxbbC5sXTspc3dpdGNoKE49e30sTi5uYW1lPU9lLnV0aWxzLmRlY29kZShULGwuc2xpY2UobC5sLGwubCtJKSku'@;
put 'cmVwbGFjZSgvW1x1MDAwMFxyXG5dLiokL2csIiIpLGwubCs9SSxOLnR5cGU9U3RyaW5nLmZyb21DaGFyQ29kZShsLnJlYWRfc2hpZnQoMSkpLDIhPWgmJiF2JiYoTi5vZmZzZXQ9bC5yZWFkX3NoaWZ0KDQpKSxOLmxlbj1sLnJlYWRfc2hpZnQoMSksMj09aCYmKE4ub2Zmc2V0PWwucmVhZF9z'@;
put 'aGlmdCgyKSksTi5kZWM9bC5yZWFkX3NoaWZ0KDEpLE4ubmFtZS5sZW5ndGgmJmcucHVzaChOKSwyIT1oJiYobC5sKz12PzEzOjE0KSxOLnR5cGUpe2Nhc2UiQiI6KCFkfHw4IT1OLmxlbikmJmMuV1RGJiZjb25zb2xlLmxvZygiU2tpcHBpbmcgIitOLm5hbWUrIjoiK04udHlwZSk7YnJlYWs7'@;
put 'Y2FzZSJHIjpjYXNlIlAiOmMuV1RGJiZjb25zb2xlLmxvZygiU2tpcHBpbmcgIitOLm5hbWUrIjoiK04udHlwZSk7YnJlYWs7Y2FzZSIrIjpjYXNlIjAiOmNhc2UiQCI6Y2FzZSJDIjpjYXNlIkQiOmNhc2UiRiI6Y2FzZSJJIjpjYXNlIkwiOmNhc2UiTSI6Y2FzZSJOIjpjYXNlIk8iOmNhc2Ui'@;
put 'VCI6Y2FzZSJZIjpicmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVW5rbm93biBGaWVsZCBUeXBlOiAiK04udHlwZSl9aWYoMTMhPT1sW2wubF0mJihsLmw9cC0xKSwxMyE9PWwucmVhZF9zaGlmdCgxKSl0aHJvdyBuZXcgRXJyb3IoIkRCRiBUZXJtaW5hdG9yIG5vdCBmb3VuZCAiK2wu'@;
put 'bCsiICIrbFtsLmxdKTtsLmw9cDt2YXIgeT0wLFA9MDtmb3Iob1swXT1bXSxQPTA7UCE9Zy5sZW5ndGg7KytQKW9bMF1bUF09Z1tQXS5uYW1lO2Zvcig7dS0tID4wOylpZig0MiE9PWxbbC5sXSlmb3IoKytsLmwsb1srK3ldPVtdLFA9MCxQPTA7UCE9Zy5sZW5ndGg7KytQKXt2YXIgUj1sLnNs'@;
put 'aWNlKGwubCxsLmwrZ1tQXS5sZW4pO2wubCs9Z1tQXS5sZW4saHIoUiwwKTt2YXIgVj1PZS51dGlscy5kZWNvZGUoVCxSKTtzd2l0Y2goZ1tQXS50eXBlKXtjYXNlIkMiOlYudHJpbSgpLmxlbmd0aCYmKG9beV1bUF09Vi5yZXBsYWNlKC9ccyskLywiIikpO2JyZWFrO2Nhc2UiRCI6b1t5XVtQ'@;
put 'XT04PT09Vi5sZW5ndGg/bmV3IERhdGUoK1Yuc2xpY2UoMCw0KSwrVi5zbGljZSg0LDYpLTEsK1Yuc2xpY2UoNiw4KSk6VjticmVhaztjYXNlIkYiOm9beV1bUF09cGFyc2VGbG9hdChWLnRyaW0oKSk7YnJlYWs7Y2FzZSIrIjpjYXNlIkkiOm9beV1bUF09dj8yMTQ3NDgzNjQ4XlIucmVhZF9z'@;
put 'aGlmdCgtNCwiaSIpOlIucmVhZF9zaGlmdCg0LCJpIik7YnJlYWs7Y2FzZSJMIjpzd2l0Y2goVi50cmltKCkudG9VcHBlckNhc2UoKSl7Y2FzZSJZIjpjYXNlIlQiOm9beV1bUF09ITA7YnJlYWs7Y2FzZSJOIjpjYXNlIkYiOm9beV1bUF09ITE7YnJlYWs7Y2FzZSIiOmNhc2UiPyI6YnJlYWs7'@;
put 'ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIkRCRiBVbnJlY29nbml6ZWQgTDp8IitWKyJ8Iil9YnJlYWs7Y2FzZSJNIjppZigheCl0aHJvdyBuZXcgRXJyb3IoIkRCRiBVbmV4cGVjdGVkIE1FTU8gZm9yIHR5cGUgIitoLnRvU3RyaW5nKDE2KSk7b1t5XVtQXT0iIyNNRU1PIyMiKyh2P3BhcnNl'@;
put 'SW50KFYudHJpbSgpLDEwKTpSLnJlYWRfc2hpZnQoNCkpO2JyZWFrO2Nhc2UiTiI6KFY9Vi5yZXBsYWNlKC9cdTAwMDAvZywiIikudHJpbSgpKSYmIi4iIT1WJiYob1t5XVtQXT0rVnx8MCk7YnJlYWs7Y2FzZSJAIjpvW3ldW1BdPW5ldyBEYXRlKFIucmVhZF9zaGlmdCgtOCwiZiIpLTYyMTM1'@;
put 'NjgzMmU1KTticmVhaztjYXNlIlQiOm9beV1bUF09bmV3IERhdGUoODY0ZTUqKFIucmVhZF9zaGlmdCg0KS0yNDQwNTg4KStSLnJlYWRfc2hpZnQoNCkpO2JyZWFrO2Nhc2UiWSI6b1t5XVtQXT1SLnJlYWRfc2hpZnQoNCwiaSIpLzFlNCtSLnJlYWRfc2hpZnQoNCwiaSIpLzFlNCpNYXRoLnBv'@;
put 'dygyLDMyKTticmVhaztjYXNlIk8iOm9beV1bUF09LVIucmVhZF9zaGlmdCgtOCwiZiIpO2JyZWFrO2Nhc2UiQiI6aWYoZCYmOD09Z1tQXS5sZW4pe29beV1bUF09Ui5yZWFkX3NoaWZ0KDgsImYiKTticmVha31jYXNlIkciOmNhc2UiUCI6Ui5sKz1nW1BdLmxlbjticmVhaztjYXNlIjAiOmlm'@;
put 'KCJfTnVsbEZsYWdzIj09PWdbUF0ubmFtZSlicmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiREJGIFVuc3VwcG9ydGVkIGRhdGEgdHlwZSAiK2dbUF0udHlwZSl9fWVsc2UgbC5sKz1rO2lmKDIhPWgmJmwubDxsLmxlbmd0aCYmMjYhPWxbbC5sKytdKXRocm93IG5ldyBFcnJvcigiREJG'@;
put 'IEVPRiBNYXJrZXIgbWlzc2luZyAiKyhsLmwtMSkrIiBvZiAiK2wubGVuZ3RoKyIgIitsW2wubC0xXS50b1N0cmluZygxNikpO3JldHVybiBjJiZjLnNoZWV0Um93cyYmKG89by5zbGljZSgwLGMuc2hlZXRSb3dzKSksYy5EQkY9ZyxvfShmLG8pLG8pO3JldHVybiBsWyIhY29scyJdPW8uREJG'@;
put 'Lm1hcChmdW5jdGlvbihoKXtyZXR1cm57d2NoOmgubGVuLERCRjpofX0pLGRlbGV0ZSBvLkRCRixsfXZhciBpPXtCOjgsQzoyNTAsTDoxLEQ6OCwiPyI6MCwiIjowfTtyZXR1cm57dG9fd29ya2Jvb2s6ZnVuY3Rpb24gbihmLGMpe3RyeXtyZXR1cm4gRnQoYShmLGMpLGMpfWNhdGNoKG8pe2lm'@;
put 'KGMmJmMuV1RGKXRocm93IG99cmV0dXJue1NoZWV0TmFtZXM6W10sU2hlZXRzOnt9fX0sdG9fc2hlZXQ6YSxmcm9tX3NoZWV0OmZ1bmN0aW9uIHMoZixjKXt2YXIgbz1jfHx7fTtpZigrby5jb2RlcGFnZT49MCYmTXIoK28uY29kZXBhZ2UpLCJzdHJpbmciPT1vLnR5cGUpdGhyb3cgbmV3IEVy'@;
put 'cm9yKCJDYW5ub3Qgd3JpdGUgREJGIHRvIEpTIHN0cmluZyIpO3ZhciBsPVNyKCksaD1mdW5jdGlvbiBOMChlLHQpe2lmKG51bGw9PWV8fG51bGw9PWVbIiFyZWYiXSlyZXR1cm5bXTt2YXIgcj17dDoibiIsdjowfSxhPTAsbj0xLGk9W10scz0wLGY9IiIsYz17czp7cjowLGM6MH0sZTp7cjow'@;
put 'LGM6MH19LG89dHx8e30sbD1udWxsIT1vLnJhbmdlP28ucmFuZ2U6ZVsiIXJlZiJdO3N3aXRjaCgxPT09by5oZWFkZXI/YT0xOiJBIj09PW8uaGVhZGVyP2E9MjpBcnJheS5pc0FycmF5KG8uaGVhZGVyKT9hPTM6bnVsbD09by5oZWFkZXImJihhPTApLHR5cGVvZiBsKXtjYXNlInN0cmluZyI6'@;
put 'Yz1EZShsKTticmVhaztjYXNlIm51bWJlciI6KGM9RGUoZVsiIXJlZiJdKSkucy5yPWw7YnJlYWs7ZGVmYXVsdDpjPWx9YT4wJiYobj0wKTt2YXIgaD1LZShjLnMucikseD1bXSxkPVtdLHY9MCx1PTAscD1BcnJheS5pc0FycmF5KGUpLGs9Yy5zLnIsVD0wLGc9e307cCYmIWVba10mJihlW2td'@;
put 'PVtdKTt2YXIgTj1vLnNraXBIaWRkZW4mJmVbIiFjb2xzIl18fFtdLE09by5za2lwSGlkZGVuJiZlWyIhcm93cyJdfHxbXTtmb3IoVD1jLnMuYztUPD1jLmUuYzsrK1QpaWYoIShOW1RdfHx7fSkuaGlkZGVuKXN3aXRjaCh4W1RdPUhlKFQpLHI9cD9lW2tdW1RdOmVbeFtUXStoXSxhKXtjYXNl'@;
put 'IDE6aVtUXT1ULWMucy5jO2JyZWFrO2Nhc2UgMjppW1RdPXhbVF07YnJlYWs7Y2FzZSAzOmlbVF09by5oZWFkZXJbVC1jLnMuY107YnJlYWs7ZGVmYXVsdDppZihudWxsPT1yJiYocj17dzoiX19FTVBUWSIsdDoicyJ9KSxmPXM9YXQocixudWxsLG8pLHU9Z1tzXXx8MCl7ZG97Zj1zKyJfIit1'@;
put 'Kyt9d2hpbGUoZ1tmXSk7Z1tzXT11LGdbZl09MX1lbHNlIGdbc109MTtpW1RdPWZ9Zm9yKGs9Yy5zLnIrbjtrPD1jLmUucjsrK2spaWYoIShNW2tdfHx7fSkuaGlkZGVuKXt2YXIgST1fYyhlLGMsayx4LGEsaSxwLG8pOyghMT09PUkuaXNlbXB0eXx8KDE9PT1hPyExIT09by5ibGFua3Jvd3M6'@;
put 'by5ibGFua3Jvd3MpKSYmKGRbdisrXT1JLnJvdyl9cmV0dXJuIGQubGVuZ3RoPXYsZH0oZix7aGVhZGVyOjEscmF3OiEwLGNlbGxEYXRlczohMH0pLHg9aFswXSxkPWguc2xpY2UoMSksdj1mWyIhY29scyJdfHxbXSx1PTAscD0wLGs9MCxUPTE7Zm9yKHU9MDt1PHgubGVuZ3RoOysrdSlpZigo'@;
put 'KHZbdV18fHt9KS5EQkZ8fHt9KS5uYW1lKXhbdV09dlt1XS5EQkYubmFtZSwrK2s7ZWxzZSBpZihudWxsIT14W3VdKXtpZigrK2ssIm51bWJlciI9PXR5cGVvZiB4W3VdJiYoeFt1XT14W3VdLnRvU3RyaW5nKDEwKSksInN0cmluZyIhPXR5cGVvZiB4W3VdKXRocm93IG5ldyBFcnJvcigiREJG'@;
put 'IEludmFsaWQgY29sdW1uIG5hbWUgIit4W3VdKyIgfCIrdHlwZW9mIHhbdV0rInwiKTtpZih4LmluZGV4T2YoeFt1XSkhPT11KWZvcihwPTA7cDwxMDI0OysrcClpZigtMT09eC5pbmRleE9mKHhbdV0rIl8iK3ApKXt4W3VdKz0iXyIrcDticmVha319dmFyIGc9RGUoZlsiIXJlZiJdKSxOPVtd'@;
put 'LE09W10sST1bXTtmb3IodT0wO3U8PWcuZS5jLWcucy5jOysrdSl7dmFyIHk9IiIsUD0iIixSPTAsVj1bXTtmb3IocD0wO3A8ZC5sZW5ndGg7KytwKW51bGwhPWRbcF1bdV0mJlYucHVzaChkW3BdW3VdKTtpZigwIT1WLmxlbmd0aCYmbnVsbCE9eFt1XSl7Zm9yKHA9MDtwPFYubGVuZ3RoOysr'@;
put 'cCl7c3dpdGNoKHR5cGVvZiBWW3BdKXtjYXNlIm51bWJlciI6UD0iQiI7YnJlYWs7Y2FzZSJzdHJpbmciOmRlZmF1bHQ6UD0iQyI7YnJlYWs7Y2FzZSJib29sZWFuIjpQPSJMIjticmVhaztjYXNlIm9iamVjdCI6UD1WW3BdaW5zdGFuY2VvZiBEYXRlPyJEIjoiQyJ9Uj1NYXRoLm1heChSLFN0'@;
put 'cmluZyhWW3BdKS5sZW5ndGgpLHk9eSYmeSE9UD8iQyI6UH1SPjI1MCYmKFI9MjUwKSwiQyI9PShQPSgodlt1XXx8e30pLkRCRnx8e30pLnR5cGUpJiZ2W3VdLkRCRi5sZW4+UiYmKFI9dlt1XS5EQkYubGVuKSwiQiI9PXkmJiJOIj09UCYmKHk9Ik4iLElbdV09dlt1XS5EQkYuZGVjLFI9dlt1'@;
put 'XS5EQkYubGVuKSxNW3VdPSJDIj09eXx8Ik4iPT1QP1I6aVt5XXx8MCxUKz1NW3VdLE5bdV09eX1lbHNlIE5bdV09Ij8ifXZhciBYPWwubmV4dCgzMik7Zm9yKFgud3JpdGVfc2hpZnQoNCwzMTg5MDI1NzYpLFgud3JpdGVfc2hpZnQoNCxkLmxlbmd0aCksWC53cml0ZV9zaGlmdCgyLDI5Nisz'@;
put 'MiprKSxYLndyaXRlX3NoaWZ0KDIsVCksdT0wO3U8NDsrK3UpWC53cml0ZV9zaGlmdCg0LDApO2ZvcihYLndyaXRlX3NoaWZ0KDQsKCt0W1J0XXx8Myk8PDgpLHU9MCxwPTA7dTx4Lmxlbmd0aDsrK3UpaWYobnVsbCE9eFt1XSl7dmFyIGI9bC5uZXh0KDMyKSxlZT0oeFt1XS5zbGljZSgtMTAp'@;
put 'KyJcMFwwXDBcMFwwXDBcMFwwXDBcMFwwIikuc2xpY2UoMCwxMSk7Yi53cml0ZV9zaGlmdCgxLGVlLCJzYmNzIiksYi53cml0ZV9zaGlmdCgxLCI/Ij09Tlt1XT8iQyI6Tlt1XSwic2JjcyIpLGIud3JpdGVfc2hpZnQoNCxwKSxiLndyaXRlX3NoaWZ0KDEsTVt1XXx8aVtOW3VdXXx8MCksYi53'@;
put 'cml0ZV9zaGlmdCgxLElbdV18fDApLGIud3JpdGVfc2hpZnQoMSwyKSxiLndyaXRlX3NoaWZ0KDQsMCksYi53cml0ZV9zaGlmdCgxLDApLGIud3JpdGVfc2hpZnQoNCwwKSxiLndyaXRlX3NoaWZ0KDQsMCkscCs9TVt1XXx8aVtOW3VdXXx8MH12YXIgbGU9bC5uZXh0KDI2NCk7Zm9yKGxlLndy'@;
put 'aXRlX3NoaWZ0KDQsMTMpLHU9MDt1PDY1OysrdSlsZS53cml0ZV9zaGlmdCg0LDApO2Zvcih1PTA7dTxkLmxlbmd0aDsrK3Upe3ZhciByZT1sLm5leHQoVCk7Zm9yKHJlLndyaXRlX3NoaWZ0KDEsMCkscD0wO3A8eC5sZW5ndGg7KytwKWlmKG51bGwhPXhbcF0pc3dpdGNoKE5bcF0pe2Nhc2Ui'@;
put 'TCI6cmUud3JpdGVfc2hpZnQoMSxudWxsPT1kW3VdW3BdPzYzOmRbdV1bcF0/ODQ6NzApO2JyZWFrO2Nhc2UiQiI6cmUud3JpdGVfc2hpZnQoOCxkW3VdW3BdfHwwLCJmIik7YnJlYWs7Y2FzZSJOIjp2YXIgZGU9IjAiO2ZvcigibnVtYmVyIj09dHlwZW9mIGRbdV1bcF0mJihkZT1kW3VdW3Bd'@;
put 'LnRvRml4ZWQoSVtwXXx8MCkpLGs9MDtrPE1bcF0tZGUubGVuZ3RoOysraylyZS53cml0ZV9zaGlmdCgxLDMyKTtyZS53cml0ZV9zaGlmdCgxLGRlLCJzYmNzIik7YnJlYWs7Y2FzZSJEIjpkW3VdW3BdPyhyZS53cml0ZV9zaGlmdCg0LCgiMDAwMCIrZFt1XVtwXS5nZXRGdWxsWWVhcigpKS5z'@;
put 'bGljZSgtNCksInNiY3MiKSxyZS53cml0ZV9zaGlmdCgyLCgiMDAiKyhkW3VdW3BdLmdldE1vbnRoKCkrMSkpLnNsaWNlKC0yKSwic2JjcyIpLHJlLndyaXRlX3NoaWZ0KDIsKCIwMCIrZFt1XVtwXS5nZXREYXRlKCkpLnNsaWNlKC0yKSwic2JjcyIpKTpyZS53cml0ZV9zaGlmdCg4LCIwMDAw'@;
put 'MDAwMCIsInNiY3MiKTticmVhaztjYXNlIkMiOnZhciB1ZT1TdHJpbmcobnVsbCE9ZFt1XVtwXT9kW3VdW3BdOiIiKS5zbGljZSgwLE1bcF0pO2ZvcihyZS53cml0ZV9zaGlmdCgxLHVlLCJzYmNzIiksaz0wO2s8TVtwXS11ZS5sZW5ndGg7KytrKXJlLndyaXRlX3NoaWZ0KDEsMzIpfX1yZXR1'@;
put 'cm4gbC5uZXh0KDEpLndyaXRlX3NoaWZ0KDEsMjYpLGwuZW5kKCl9fX0oKSxlZj1mdW5jdGlvbigpe3ZhciBlPXtBQToiXHhjMCIsQkE6Ilx4YzEiLENBOiJceGMyIixEQToxOTUsSEE6Ilx4YzQiLEpBOjE5NyxBRToiXHhjOCIsQkU6Ilx4YzkiLENFOiJceGNhIixIRToiXHhjYiIsQUk6Ilx4'@;
put 'Y2MiLEJJOiJceGNkIixDSToiXHhjZSIsSEk6Ilx4Y2YiLEFPOiJceGQyIixCTzoiXHhkMyIsQ086Ilx4ZDQiLERPOjIxMyxITzoiXHhkNiIsQVU6Ilx4ZDkiLEJVOiJceGRhIixDVToiXHhkYiIsSFU6Ilx4ZGMiLEFhOiJceGUwIixCYToiXHhlMSIsQ2E6Ilx4ZTIiLERhOjIyNyxIYToiXHhl'@;
put 'NCIsSmE6MjI5LEFlOiJceGU4IixCZToiXHhlOSIsQ2U6Ilx4ZWEiLEhlOiJceGViIixBaToiXHhlYyIsQmk6Ilx4ZWQiLENpOiJceGVlIixIaToiXHhlZiIsQW86Ilx4ZjIiLEJvOiJceGYzIixDbzoiXHhmNCIsRG86MjQ1LEhvOiJceGY2IixBdToiXHhmOSIsQnU6Ilx4ZmEiLEN1OiJceGZi'@;
put 'IixIdToiXHhmYyIsS0M6Ilx4YzciLEtjOiJceGU3IixxOiJceGU2Iix6OiJcdTAxNTMiLGE6Ilx4YzYiLGo6Ilx1MDE1MiIsRE46MjA5LERuOjI0MSxIeToyNTUsUzoxNjksYzoxNzAsUjoxNzQsIkIgIjoxODAsMDoxNzYsMToxNzcsMjoxNzgsMzoxNzksNToxODEsNjoxODIsNzoxODMsUTox'@;
put 'ODUsazoxODYsYjoyMDgsaToyMTYsbDoyMjIsczoyNDAseToyNDgsIiEiOjE2MSwnIic6MTYyLCIjIjoxNjMsIigiOjE2NCwiJSI6MTY1LCInIjoxNjcsIkggIjoxNjgsIisiOjE3MSwiOyI6MTg3LCI8IjoxODgsIj0iOjE4OSwiPiI6MTkwLCI/IjoxOTEsInsiOjIyM30sdD1uZXcgUmVnRXhw'@;
put 'KCJceDFiTigiKyRlKGUpLmpvaW4oInwiKS5yZXBsYWNlKC9cfFx8XHwvLCJ8XFx8fCIpLnJlcGxhY2UoLyhbPygpK10pL2csIlxcJDEiKSsifFxcfCkiLCJnbSIpLHI9ZnVuY3Rpb24oeCxkKXt2YXIgdj1lW2RdO3JldHVybiJudW1iZXIiPT10eXBlb2Ygdj9CMCh2KTp2fSxhPWZ1bmN0aW9u'@;
put 'KHgsZCx2KXt2YXIgdT1kLmNoYXJDb2RlQXQoMCktMzI8PDR8di5jaGFyQ29kZUF0KDApLTQ4O3JldHVybiA1OT09dT94OkIwKHUpfTtmdW5jdGlvbiBpKHgsZCl7dmFyIFgsdj14LnNwbGl0KC9bXG5ccl0rLyksdT0tMSxwPS0xLGs9MCxUPTAsZz1bXSxOPVtdLE09bnVsbCxJPXt9LHk9W10s'@;
put 'UD1bXSxSPVtdLFY9MDtmb3IoK2QuY29kZXBhZ2U+PTAmJk1yKCtkLmNvZGVwYWdlKTtrIT09di5sZW5ndGg7KytrKXtWPTA7dmFyIHJlLGI9dltrXS50cmltKCkucmVwbGFjZSgvXHgxQihbXHgyMC1ceDJGXSkoW1x4MzAtXHgzRl0pL2csYSkucmVwbGFjZSh0LHIpLGVlPWIucmVwbGFjZSgv'@;
put 'OzsvZywiXDAiKS5zcGxpdCgiOyIpLm1hcChmdW5jdGlvbihEKXtyZXR1cm4gRC5yZXBsYWNlKC9cdTAwMDAvZywiOyIpfSk7aWYoYi5sZW5ndGg+MClzd2l0Y2goZWVbMF0pe2Nhc2UiSUQiOmNhc2UiRSI6Y2FzZSJCIjpjYXNlIk8iOmNhc2UiVyI6YnJlYWs7Y2FzZSJQIjoiUCI9PWVlWzFd'@;
put 'LmNoYXJBdCgwKSYmTi5wdXNoKGIuc2xpY2UoMykucmVwbGFjZSgvOzsvZywiOyIpKTticmVhaztjYXNlIkMiOnZhciBkZT0hMSx1ZT0hMSxGZT0hMSxjZT0hMSx4ZT0tMSxLPS0xO2ZvcihUPTE7VDxlZS5sZW5ndGg7KytUKXN3aXRjaChlZVtUXS5jaGFyQXQoMCkpe2Nhc2UiQSI6Y2FzZSJH'@;
put 'IjpicmVhaztjYXNlIlgiOnA9cGFyc2VJbnQoZWVbVF0uc2xpY2UoMSkpLTEsdWU9ITA7YnJlYWs7Y2FzZSJZIjpmb3IodT1wYXJzZUludChlZVtUXS5zbGljZSgxKSktMSx1ZXx8KHA9MCksWD1nLmxlbmd0aDtYPD11OysrWClnW1hdPVtdO2JyZWFrO2Nhc2UiSyI6JyInPT09KHJlPWVlW1Rd'@;
put 'LnNsaWNlKDEpKS5jaGFyQXQoMCk/cmU9cmUuc2xpY2UoMSxyZS5sZW5ndGgtMSk6IlRSVUUiPT09cmU/cmU9ITA6IkZBTFNFIj09PXJlP3JlPSExOmlzTmFOKEpyKHJlKSk/aXNOYU4oYWEocmUpLmdldERhdGUoKSl8fChyZT1YZShyZSkpOihyZT1KcihyZSksbnVsbCE9PU0mJmJ0KE0pJiYo'@;
put 'cmU9bzAocmUpKSksdHlwZW9mIE9lPCJ1IiYmInN0cmluZyI9PXR5cGVvZiByZSYmInN0cmluZyIhPShkfHx7fSkudHlwZSYmKGR8fHt9KS5jb2RlcGFnZSYmKHJlPU9lLnV0aWxzLmRlY29kZShkLmNvZGVwYWdlLHJlKSksZGU9ITA7YnJlYWs7Y2FzZSJFIjpjZT0hMDt2YXIgQz11YShlZVtU'@;
put 'XS5zbGljZSgxKSx7cjp1LGM6cH0pO2dbdV1bcF09W2dbdV1bcF0sQ107YnJlYWs7Y2FzZSJTIjpGZT0hMCxnW3VdW3BdPVtnW3VdW3BdLCJTNVMiXTticmVhaztjYXNlIlIiOnhlPXBhcnNlSW50KGVlW1RdLnNsaWNlKDEpKS0xO2JyZWFrO2Nhc2UiQyI6Sz1wYXJzZUludChlZVtUXS5zbGlj'@;
put 'ZSgxKSktMTticmVhaztkZWZhdWx0OmlmKGQmJmQuV1RGKXRocm93IG5ldyBFcnJvcigiU1lMSyBiYWQgcmVjb3JkICIrYil9aWYoZGUmJihnW3VdW3BdJiYyPT1nW3VdW3BdLmxlbmd0aD9nW3VdW3BdWzBdPXJlOmdbdV1bcF09cmUsTT1udWxsKSxGZSl7aWYoY2UpdGhyb3cgbmV3IEVycm9y'@;
put 'KCJTWUxLIHNoYXJlZCBmb3JtdWxhIGNhbm5vdCBoYXZlIG93biBmb3JtdWxhIik7dmFyIFU9eGU+LTEmJmdbeGVdW0tdO2lmKCFVfHwhVVsxXSl0aHJvdyBuZXcgRXJyb3IoIlNZTEsgc2hhcmVkIGZvcm11bGEgY2Fubm90IGZpbmQgYmFzZSIpO2dbdV1bcF1bMV09a2YoVVsxXSx7cjp1LXhl'@;
put 'LGM6cC1LfSl9YnJlYWs7Y2FzZSJGIjp2YXIgTz0wO2ZvcihUPTE7VDxlZS5sZW5ndGg7KytUKXN3aXRjaChlZVtUXS5jaGFyQXQoMCkpe2Nhc2UiWCI6cD1wYXJzZUludChlZVtUXS5zbGljZSgxKSktMSwrK087YnJlYWs7Y2FzZSJZIjpmb3IodT1wYXJzZUludChlZVtUXS5zbGljZSgxKSkt'@;
put 'MSxYPWcubGVuZ3RoO1g8PXU7KytYKWdbWF09W107YnJlYWs7Y2FzZSJNIjpWPXBhcnNlSW50KGVlW1RdLnNsaWNlKDEpKS8yMDticmVhaztjYXNlIkYiOmNhc2UiRyI6Y2FzZSJTIjpjYXNlIkQiOmNhc2UiTiI6YnJlYWs7Y2FzZSJQIjpNPU5bcGFyc2VJbnQoZWVbVF0uc2xpY2UoMSkpXTti'@;
put 'cmVhaztjYXNlIlciOmZvcihSPWVlW1RdLnNsaWNlKDEpLnNwbGl0KCIgIiksWD1wYXJzZUludChSWzBdLDEwKTtYPD1wYXJzZUludChSWzFdLDEwKTsrK1gpVj1wYXJzZUludChSWzJdLDEwKSxQW1gtMV09MD09PVY/e2hpZGRlbjohMH06e3djaDpWfSxLdChQW1gtMV0pO2JyZWFrO2Nhc2Ui'@;
put 'QyI6UFtwPXBhcnNlSW50KGVlW1RdLnNsaWNlKDEpKS0xXXx8KFBbcF09e30pO2JyZWFrO2Nhc2UiUiI6eVt1PXBhcnNlSW50KGVlW1RdLnNsaWNlKDEpKS0xXXx8KHlbdV09e30pLFY+MD8oeVt1XS5ocHQ9Vix5W3VdLmhweD1vYShWKSk6MD09PVYmJih5W3VdLmhpZGRlbj0hMCk7YnJlYWs7'@;
put 'ZGVmYXVsdDppZihkJiZkLldURil0aHJvdyBuZXcgRXJyb3IoIlNZTEsgYmFkIHJlY29yZCAiK2IpfU88MSYmKE09bnVsbCk7YnJlYWs7ZGVmYXVsdDppZihkJiZkLldURil0aHJvdyBuZXcgRXJyb3IoIlNZTEsgYmFkIHJlY29yZCAiK2IpfX1yZXR1cm4geS5sZW5ndGg+MCYmKElbIiFyb3dz'@;
put 'Il09eSksUC5sZW5ndGg+MCYmKElbIiFjb2xzIl09UCksZCYmZC5zaGVldFJvd3MmJihnPWcuc2xpY2UoMCxkLnNoZWV0Um93cykpLFtnLEldfWZ1bmN0aW9uIHMoeCxkKXt2YXIgdj1mdW5jdGlvbiBuKHgsZCl7c3dpdGNoKGQudHlwZSl7Y2FzZSJiYXNlNjQiOnJldHVybiBpKE9yKHgpLGQp'@;
put 'O2Nhc2UiYmluYXJ5IjpyZXR1cm4gaSh4LGQpO2Nhc2UiYnVmZmVyIjpyZXR1cm4gaShTZSYmQnVmZmVyLmlzQnVmZmVyKHgpP3gudG9TdHJpbmcoImJpbmFyeSIpOnd0KHgpLGQpO2Nhc2UiYXJyYXkiOnJldHVybiBpKFB0KHgpLGQpfXRocm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkIHR5'@;
put 'cGUgIitkLnR5cGUpfSh4LGQpLHA9dlsxXSxrPXNhKHZbMF0sZCk7cmV0dXJuICRlKHApLmZvckVhY2goZnVuY3Rpb24oVCl7a1tUXT1wW1RdfSksa31mdW5jdGlvbiBjKHgsZCx2LHUpe3ZhciBwPSJDO1kiKyh2KzEpKyI7WCIrKHUrMSkrIjtLIjtzd2l0Y2goeC50KXtjYXNlIm4iOnArPXgu'@;
put 'dnx8MCx4LmYmJiF4LkYmJihwKz0iO0UiK0luKHguZix7cjp2LGM6dX0pKTticmVhaztjYXNlImIiOnArPXgudj8iVFJVRSI6IkZBTFNFIjticmVhaztjYXNlImUiOnArPXgud3x8eC52O2JyZWFrO2Nhc2UiZCI6cCs9JyInKyh4Lnd8fHgudikrJyInO2JyZWFrO2Nhc2UicyI6cCs9JyInK3gu'@;
put 'di5yZXBsYWNlKC8iL2csIiIpLnJlcGxhY2UoLzsvZywiOzsiKSsnIid9cmV0dXJuIHB9cmV0dXJuIGVbInwiXT0yNTQse3RvX3dvcmtib29rOmZ1bmN0aW9uIGYoeCxkKXtyZXR1cm4gRnQocyh4LGQpLGQpfSx0b19zaGVldDpzLGZyb21fc2hlZXQ6ZnVuY3Rpb24gaCh4LGQpe3ZhciBrLHY9'@;
put 'WyJJRDtQV1hMO047RSJdLHU9W10scD1EZSh4WyIhcmVmIl0pLFQ9QXJyYXkuaXNBcnJheSh4KSxnPSJcclxuIjt2LnB1c2goIlA7UEdlbmVyYWwiKSx2LnB1c2goIkY7UDA7REcwRzg7TTI1NSIpLHhbIiFjb2xzIl0mJmZ1bmN0aW9uIG8oeCxkKXtkLmZvckVhY2goZnVuY3Rpb24odix1KXt2'@;
put 'YXIgcD0iRjtXIisodSsxKSsiICIrKHUrMSkrIiAiO3YuaGlkZGVuP3ArPSIwIjooIm51bWJlciI9PXR5cGVvZiB2LndpZHRoJiYhdi53cHgmJih2LndweD1QYSh2LndpZHRoKSksIm51bWJlciI9PXR5cGVvZiB2LndweCYmIXYud2NoJiYodi53Y2g9TGEodi53cHgpKSwibnVtYmVyIj09dHlw'@;
put 'ZW9mIHYud2NoJiYocCs9TWF0aC5yb3VuZCh2LndjaCkpKSwiICIhPXAuY2hhckF0KHAubGVuZ3RoLTEpJiZ4LnB1c2gocCl9KX0odix4WyIhY29scyJdKSx4WyIhcm93cyJdJiZmdW5jdGlvbiBsKHgsZCl7ZC5mb3JFYWNoKGZ1bmN0aW9uKHYsdSl7dmFyIHA9IkY7Ijt2LmhpZGRlbj9wKz0i'@;
put 'TTA7Ijp2LmhwdD9wKz0iTSIrMjAqdi5ocHQrIjsiOnYuaHB4JiYocCs9Ik0iKzIwKkJhKHYuaHB4KSsiOyIpLHAubGVuZ3RoPjImJngucHVzaChwKyJSIisodSsxKSl9KX0odix4WyIhcm93cyJdKSx2LnB1c2goIkI7WSIrKHAuZS5yLXAucy5yKzEpKyI7WCIrKHAuZS5jLXAucy5jKzEpKyI7'@;
put 'RCIrW3Aucy5jLHAucy5yLHAuZS5jLHAuZS5yXS5qb2luKCIgIikpO2Zvcih2YXIgTj1wLnMucjtOPD1wLmUucjsrK04pZm9yKHZhciBNPXAucy5jO008PXAuZS5jOysrTSl7dmFyIEk9Z2Uoe3I6TixjOk19KTsoaz1UPyh4W05dfHxbXSlbTV06eFtJXSkmJihudWxsIT1rLnZ8fGsuZiYmIWsu'@;
put 'RikmJnUucHVzaChjKGssMCxOLE0pKX1yZXR1cm4gdi5qb2luKGcpK2crdS5qb2luKGcpK2crIkUiK2d9fX0oKSxyZj1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoaSxzKXtmb3IodmFyIGY9aS5zcGxpdCgiXG4iKSxjPS0xLG89LTEsbD0wLGg9W107bCE9PWYubGVuZ3RoOysrbClpZigiQk9UIiE9'@;
put 'PWZbbF0udHJpbSgpKXtpZighKGM8MCkpe2Zvcih2YXIgeD1mW2xdLnRyaW0oKS5zcGxpdCgiLCIpLGQ9eFswXSx2PXhbMV0sdT1mWysrbF18fCIiOzEmKHUubWF0Y2goL1siXS9nKXx8W10pLmxlbmd0aCYmbDxmLmxlbmd0aC0xOyl1Kz0iXG4iK2ZbKytsXTtzd2l0Y2godT11LnRyaW0oKSwr'@;
put 'ZCl7Y2FzZS0xOmlmKCJCT1QiPT09dSl7aFsrK2NdPVtdLG89MDtjb250aW51ZX1pZigiRU9EIiE9PXUpdGhyb3cgbmV3IEVycm9yKCJVbnJlY29nbml6ZWQgRElGIHNwZWNpYWwgY29tbWFuZCAiK3UpO2JyZWFrO2Nhc2UgMDpoW2NdW29dPSJUUlVFIj09PXV8fCJGQUxTRSIhPT11JiYoaXNO'@;
put 'YU4oSnIodikpP2lzTmFOKGFhKHYpLmdldERhdGUoKSk/djpYZSh2KTpKcih2KSksKytvO2JyZWFrO2Nhc2UgMToodT0odT11LnNsaWNlKDEsdS5sZW5ndGgtMSkpLnJlcGxhY2UoLyIiL2csJyInKSkmJnUubWF0Y2goL149Ii4qIiQvKSYmKHU9dS5zbGljZSgyLC0xKSksaFtjXVtvKytdPSIi'@;
put 'IT09dT91Om51bGx9aWYoIkVPRCI9PT11KWJyZWFrfX1lbHNlIGhbKytjXT1bXSxvPTA7cmV0dXJuIHMmJnMuc2hlZXRSb3dzJiYoaD1oLnNsaWNlKDAscy5zaGVldFJvd3MpKSxofWZ1bmN0aW9uIHIoaSxzKXtyZXR1cm4gc2EoZnVuY3Rpb24gZShpLHMpe3N3aXRjaChzLnR5cGUpe2Nhc2Ui'@;
put 'YmFzZTY0IjpyZXR1cm4gdChPcihpKSxzKTtjYXNlImJpbmFyeSI6cmV0dXJuIHQoaSxzKTtjYXNlImJ1ZmZlciI6cmV0dXJuIHQoU2UmJkJ1ZmZlci5pc0J1ZmZlcihpKT9pLnRvU3RyaW5nKCJiaW5hcnkiKTp3dChpKSxzKTtjYXNlImFycmF5IjpyZXR1cm4gdChQdChpKSxzKX10aHJvdyBu'@;
put 'ZXcgRXJyb3IoIlVucmVjb2duaXplZCB0eXBlICIrcy50eXBlKX0oaSxzKSxzKX1yZXR1cm57dG9fd29ya2Jvb2s6ZnVuY3Rpb24gYShpLHMpe3JldHVybiBGdChyKGkscykscyl9LHRvX3NoZWV0OnIsZnJvbV9zaGVldDpmdW5jdGlvbigpe3ZhciBpPWZ1bmN0aW9uKGMsbyxsLGgseCl7Yy5w'@;
put 'dXNoKG8pLGMucHVzaChsKyIsIitoKSxjLnB1c2goJyInK3gucmVwbGFjZSgvIi9nLCciIicpKyciJyl9LHM9ZnVuY3Rpb24oYyxvLGwsaCl7Yy5wdXNoKG8rIiwiK2wpLGMucHVzaCgxPT1vPyciJytoLnJlcGxhY2UoLyIvZywnIiInKSsnIic6aCl9O3JldHVybiBmdW5jdGlvbihjKXt2YXIg'@;
put 'aCxvPVtdLGw9RGUoY1siIXJlZiJdKSx4PUFycmF5LmlzQXJyYXkoYyk7aShvLCJUQUJMRSIsMCwxLCJzaGVldGpzIiksaShvLCJWRUNUT1JTIiwwLGwuZS5yLWwucy5yKzEsIiIpLGkobywiVFVQTEVTIiwwLGwuZS5jLWwucy5jKzEsIiIpLGkobywiREFUQSIsMCwwLCIiKTtmb3IodmFyIGQ9'@;
put 'bC5zLnI7ZDw9bC5lLnI7KytkKXtzKG8sLTEsMCwiQk9UIik7Zm9yKHZhciB2PWwucy5jO3Y8PWwuZS5jOysrdil7dmFyIHU9Z2Uoe3I6ZCxjOnZ9KTtpZihoPXg/KGNbZF18fFtdKVt2XTpjW3VdKXN3aXRjaChoLnQpe2Nhc2UibiI6dmFyIHA9aC53OyFwJiZudWxsIT1oLnYmJihwPWgudiks'@;
put 'bnVsbD09cD9zKG8sMSwwLGguZiYmIWguRj8iPSIraC5mOiIiKTpzKG8sMCxwLCJWIik7YnJlYWs7Y2FzZSJiIjpzKG8sMCxoLnY/MTowLGgudj8iVFJVRSI6IkZBTFNFIik7YnJlYWs7Y2FzZSJzIjpzKG8sMSwwLGlzTmFOKGgudik/aC52Oic9IicraC52KyciJyk7YnJlYWs7Y2FzZSJkIjpo'@;
put 'Lnd8fChoLnc9UnIoaC56fHxwZVsxNF0saXIoWGUoaC52KSkpKSxzKG8sMCxoLncsIlYiKTticmVhaztkZWZhdWx0OnMobywxLDAsIiIpfWVsc2UgcyhvLDEsMCwiIil9fXJldHVybiBzKG8sLTEsMCwiRU9EIiksby5qb2luKCJcclxuIil9fSgpfX0oKSx0Zj1mdW5jdGlvbigpe2Z1bmN0aW9u'@;
put 'IGUoaCl7cmV0dXJuIGgucmVwbGFjZSgvXFxiL2csIlxcIikucmVwbGFjZSgvXFxjL2csIjoiKS5yZXBsYWNlKC9cXG4vZywiXG4iKX1mdW5jdGlvbiB0KGgpe3JldHVybiBoLnJlcGxhY2UoL1xcL2csIlxcYiIpLnJlcGxhY2UoLzovZywiXFxjIikucmVwbGFjZSgvXG4vZywiXFxuIil9ZnVu'@;
put 'Y3Rpb24gYShoLHgpe3JldHVybiBzYShmdW5jdGlvbiByKGgseCl7Zm9yKHZhciBkPWguc3BsaXQoIlxuIiksdj0tMSx1PS0xLHA9MCxrPVtdO3AhPT1kLmxlbmd0aDsrK3Ape3ZhciBUPWRbcF0udHJpbSgpLnNwbGl0KCI6Iik7aWYoImNlbGwiPT09VFswXSl7dmFyIGc9R2UoVFsxXSk7aWYo'@;
put 'ay5sZW5ndGg8PWcucilmb3Iodj1rLmxlbmd0aDt2PD1nLnI7Kyt2KWtbdl18fChrW3ZdPVtdKTtzd2l0Y2godj1nLnIsdT1nLmMsVFsyXSl7Y2FzZSJ0IjprW3ZdW3VdPWUoVFszXSk7YnJlYWs7Y2FzZSJ2IjprW3ZdW3VdPStUWzNdO2JyZWFrO2Nhc2UidnRmIjp2YXIgTj1UW1QubGVuZ3Ro'@;
put 'LTFdO2Nhc2UidnRjIjprW3ZdW3VdPSJubCI9PT1UWzNdPyEhK1RbNF06K1RbNF0sInZ0ZiI9PVRbMl0mJihrW3ZdW3VdPVtrW3ZdW3VdLE5dKX19fXJldHVybiB4JiZ4LnNoZWV0Um93cyYmKGs9ay5zbGljZSgwLHguc2hlZXRSb3dzKSksa30oaCx4KSx4KX12YXIgaT1bInNvY2lhbGNhbGM6'@;
put 'dmVyc2lvbjoxLjUiLCJNSU1FLVZlcnNpb246IDEuMCIsIkNvbnRlbnQtVHlwZTogbXVsdGlwYXJ0L21peGVkOyBib3VuZGFyeT1Tb2NpYWxDYWxjU3ByZWFkc2hlZXRDb250cm9sU2F2ZSJdLmpvaW4oIlxuIikscz1bIi0tU29jaWFsQ2FsY1NwcmVhZHNoZWV0Q29udHJvbFNhdmUiLCJDb250'@;
put 'ZW50LXR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLTgiXS5qb2luKCJcbiIpKyJcbiIsZj1bIiMgU29jaWFsQ2FsYyBTcHJlYWRzaGVldCBDb250cm9sIFNhdmUiLCJwYXJ0OnNoZWV0Il0uam9pbigiXG4iKSxjPSItLVNvY2lhbENhbGNTcHJlYWRzaGVldENvbnRyb2xTYXZlLS0iO2Z1'@;
put 'bmN0aW9uIG8oaCl7aWYoIWh8fCFoWyIhcmVmIl0pcmV0dXJuIiI7Zm9yKHZhciB2LHg9W10sZD1bXSx1PSIiLHA9UHIoaFsiIXJlZiJdKSxrPUFycmF5LmlzQXJyYXkoaCksVD1wLnMucjtUPD1wLmUucjsrK1QpZm9yKHZhciBnPXAucy5jO2c8PXAuZS5jOysrZylpZih1PWdlKHtyOlQsYzpn'@;
put 'fSksKHY9az8oaFtUXXx8W10pW2ddOmhbdV0pJiZudWxsIT12LnYmJiJ6IiE9PXYudCl7c3dpdGNoKGQ9WyJjZWxsIix1LCJ0Il0sdi50KXtjYXNlInMiOmNhc2Uic3RyIjpkLnB1c2godCh2LnYpKTticmVhaztjYXNlIm4iOnYuZj8oZFsyXT0idnRmIixkWzNdPSJuIixkWzRdPXYudixkWzVd'@;
put 'PXQodi5mKSk6KGRbMl09InYiLGRbM109di52KTticmVhaztjYXNlImIiOmRbMl09InZ0Iisodi5mPyJmIjoiYyIpLGRbM109Im5sIixkWzRdPXYudj8iMSI6IjAiLGRbNV09dCh2LmZ8fCh2LnY/IlRSVUUiOiJGQUxTRSIpKTticmVhaztjYXNlImQiOnZhciBOPWlyKFhlKHYudikpO2RbMl09'@;
put 'InZ0YyIsZFszXT0ibmQiLGRbNF09IiIrTixkWzVdPXYud3x8UnIodi56fHxwZVsxNF0sTik7YnJlYWs7Y2FzZSJlIjpjb250aW51ZX14LnB1c2goZC5qb2luKCI6IikpfXJldHVybiB4LnB1c2goInNoZWV0OmM6IisocC5lLmMtcC5zLmMrMSkrIjpyOiIrKHAuZS5yLXAucy5yKzEpKyI6dHZm'@;
put 'OjEiKSx4LnB1c2goInZhbHVlZm9ybWF0OjE6dGV4dC13aWtpIikseC5qb2luKCJcbiIpfXJldHVybnt0b193b3JrYm9vazpmdW5jdGlvbiBuKGgseCl7cmV0dXJuIEZ0KGEoaCx4KSx4KX0sdG9fc2hlZXQ6YSxmcm9tX3NoZWV0OmZ1bmN0aW9uIGwoaCl7cmV0dXJuW2kscyxmLHMsbyhoKSxj'@;
put 'XS5qb2luKCJcbiIpfX19KCksY2E9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGwsaCx4LGQsdil7di5yYXc/aFt4XVtkXT1sOiIiPT09bHx8KGhbeF1bZF09IlRSVUUiPT09bHx8IkZBTFNFIiE9PWwmJihpc05hTihKcihsKSk/aXNOYU4oYWEobCkuZ2V0RGF0ZSgpKT9sOlhlKGwpOkpyKGwpKSl9'@;
put 'dmFyIHI9ezQ0OiIsIiw5OiJcdCIsNTk6IjsiLDEyNDoifCJ9LGE9ezQ0OjMsOToyLDU5OjEsMTI0OjB9O2Z1bmN0aW9uIG4obCl7Zm9yKHZhciBoPXt9LHg9ITEsZD0wLHY9MDtkPGwubGVuZ3RoOysrZCkzND09KHY9bC5jaGFyQ29kZUF0KGQpKT94PSF4OiF4JiZ2IGluIHImJihoW3ZdPSho'@;
put 'W3ZdfHwwKSsxKTtmb3IoZCBpbiB2PVtdLGgpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGgsZCkmJnYucHVzaChbaFtkXSxkXSk7aWYoIXYubGVuZ3RoKWZvcihkIGluIGg9YSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoaCxkKSYmdi5wdXNoKFto'@;
put 'W2RdLGRdKTtyZXR1cm4gdi5zb3J0KGZ1bmN0aW9uKHUscCl7cmV0dXJuIHVbMF0tcFswXXx8YVt1WzFdXS1hW3BbMV1dfSksclt2LnBvcCgpWzFdXXx8NDR9ZnVuY3Rpb24gcyhsLGgpe3JldHVybiFofHwhaC5QUk58fGguRlN8fCJzZXA9Ij09bC5zbGljZSgwLDQpfHxsLmluZGV4T2YoIlx0'@;
put 'Iik+PTB8fGwuaW5kZXhPZigiLCIpPj0wfHxsLmluZGV4T2YoIjsiKT49MD9mdW5jdGlvbiBpKGwsaCl7dmFyIHg9aHx8e30sZD0iIjtudWxsIT16ZSYmbnVsbD09eC5kZW5zZSYmKHguZGVuc2U9emUpO3ZhciB2PXguZGVuc2U/W106e30sdT17czp7YzowLHI6MH0sZTp7YzowLHI6MH19OyJz'@;
put 'ZXA9Ij09bC5zbGljZSgwLDQpPzEzPT1sLmNoYXJDb2RlQXQoNSkmJjEwPT1sLmNoYXJDb2RlQXQoNik/KGQ9bC5jaGFyQXQoNCksbD1sLnNsaWNlKDcpKToxMz09bC5jaGFyQ29kZUF0KDUpfHwxMD09bC5jaGFyQ29kZUF0KDUpPyhkPWwuY2hhckF0KDQpLGw9bC5zbGljZSg2KSk6ZD1uKGwu'@;
put 'c2xpY2UoMCwxMDI0KSk6ZD14JiZ4LkZTP3guRlM6bihsLnNsaWNlKDAsMTAyNCkpO3ZhciBwPTAsaz0wLFQ9MCxnPTAsTj0wLE09ZC5jaGFyQ29kZUF0KDApLEk9ITEseT0wLFA9bC5jaGFyQ29kZUF0KDApO2w9bC5yZXBsYWNlKC9cclxuL2dtLCJcbiIpO3ZhciBSPW51bGwhPXguZGF0ZU5G'@;
put 'P2Z1bmN0aW9uIG5vKGUpe3ZhciB0PSJudW1iZXIiPT10eXBlb2YgZT9wZVtlXTplO3JldHVybiB0PXQucmVwbGFjZShFaSwiKFxcZCspIiksbmV3IFJlZ0V4cCgiXiIrdCsiJCIpfSh4LmRhdGVORik6bnVsbDtmdW5jdGlvbiBWKCl7dmFyIFg9bC5zbGljZShnLE4pLGI9e307aWYoJyInPT1Y'@;
put 'LmNoYXJBdCgwKSYmJyInPT1YLmNoYXJBdChYLmxlbmd0aC0xKSYmKFg9WC5zbGljZSgxLC0xKS5yZXBsYWNlKC8iIi9nLCciJykpLDA9PT1YLmxlbmd0aCliLnQ9InoiO2Vsc2UgaWYoeC5yYXcpYi50PSJzIixiLnY9WDtlbHNlIGlmKDA9PT1YLnRyaW0oKS5sZW5ndGgpYi50PSJzIixiLnY9'@;
put 'WDtlbHNlIGlmKDYxPT1YLmNoYXJDb2RlQXQoMCkpMzQ9PVguY2hhckNvZGVBdCgxKSYmMzQ9PVguY2hhckNvZGVBdChYLmxlbmd0aC0xKT8oYi50PSJzIixiLnY9WC5zbGljZSgyLC0xKS5yZXBsYWNlKC8iIi9nLCciJykpOmZ1bmN0aW9uIFJ4KGUpe3JldHVybiAxIT1lLmxlbmd0aH0oWCk/'@;
put 'KGIudD0ibiIsYi5mPVguc2xpY2UoMSkpOihiLnQ9InMiLGIudj1YKTtlbHNlIGlmKCJUUlVFIj09WCliLnQ9ImIiLGIudj0hMDtlbHNlIGlmKCJGQUxTRSI9PVgpYi50PSJiIixiLnY9ITE7ZWxzZSBpZihpc05hTihUPUpyKFgpKSlpZighaXNOYU4oYWEoWCkuZ2V0RGF0ZSgpKXx8UiYmWC5t'@;
put 'YXRjaChSKSl7Yi56PXguZGF0ZU5GfHxwZVsxNF07dmFyIGVlPTA7UiYmWC5tYXRjaChSKSYmKFg9ZnVuY3Rpb24gaW8oZSx0LHIpe3ZhciBhPS0xLG49LTEsaT0tMSxzPS0xLGY9LTEsYz0tMTsodC5tYXRjaChFaSl8fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKGgseCl7dmFyIGQ9cGFyc2VJbnQo'@;
put 'clt4KzFdLDEwKTtzd2l0Y2goaC50b0xvd2VyQ2FzZSgpLmNoYXJBdCgwKSl7Y2FzZSJ5IjphPWQ7YnJlYWs7Y2FzZSJkIjppPWQ7YnJlYWs7Y2FzZSJoIjpzPWQ7YnJlYWs7Y2FzZSJzIjpjPWQ7YnJlYWs7Y2FzZSJtIjpzPj0wP2Y9ZDpuPWR9fSksYz49MCYmLTE9PWYmJm4+PTAmJihmPW4s'@;
put 'bj0tMSk7dmFyIG89KCIiKyhhPj0wP2E6KG5ldyBEYXRlKS5nZXRGdWxsWWVhcigpKSkuc2xpY2UoLTQpKyItIisoIjAwIisobj49MT9uOjEpKS5zbGljZSgtMikrIi0iKygiMDAiKyhpPj0xP2k6MSkpLnNsaWNlKC0yKTs3PT1vLmxlbmd0aCYmKG89IjAiK28pLDg9PW8ubGVuZ3RoJiYobz0i'@;
put 'MjAiK28pO3ZhciBsPSgiMDAiKyhzPj0wP3M6MCkpLnNsaWNlKC0yKSsiOiIrKCIwMCIrKGY+PTA/ZjowKSkuc2xpY2UoLTIpKyI6IisoIjAwIisoYz49MD9jOjApKS5zbGljZSgtMik7cmV0dXJuLTE9PXMmJi0xPT1mJiYtMT09Yz9vOi0xPT1hJiYtMT09biYmLTE9PWk/bDpvKyJUIitsfSgw'@;
put 'LHguZGF0ZU5GLFgubWF0Y2goUil8fFtdKSxlZT0xKSx4LmNlbGxEYXRlcz8oYi50PSJkIixiLnY9WGUoWCxlZSkpOihiLnQ9Im4iLGIudj1pcihYZShYLGVlKSkpLCExIT09eC5jZWxsVGV4dCYmKGIudz1ScihiLnosYi52IGluc3RhbmNlb2YgRGF0ZT9pcihiLnYpOmIudikpLHguY2VsbE5G'@;
put 'fHxkZWxldGUgYi56fWVsc2UgYi50PSJzIixiLnY9WDtlbHNlIGIudD0ibiIsITEhPT14LmNlbGxUZXh0JiYoYi53PVgpLGIudj1UO2lmKCJ6Ij09Yi50fHwoeC5kZW5zZT8odltwXXx8KHZbcF09W10pLHZbcF1ba109Yik6dltnZSh7YzprLHI6cH0pXT1iKSxQPWwuY2hhckNvZGVBdChnPU4r'@;
put 'MSksdS5lLmM8ayYmKHUuZS5jPWspLHUuZS5yPHAmJih1LmUucj1wKSx5PT1NKSsraztlbHNlIGlmKGs9MCwrK3AseC5zaGVldFJvd3MmJnguc2hlZXRSb3dzPD1wKXJldHVybiEwfWU6Zm9yKDtOPGwubGVuZ3RoOysrTilzd2l0Y2goeT1sLmNoYXJDb2RlQXQoTikpe2Nhc2UgMzQ6MzQ9PT1Q'@;
put 'JiYoST0hSSk7YnJlYWs7Y2FzZSBNOmNhc2UgMTA6Y2FzZSAxMzppZighSSYmVigpKWJyZWFrIGV9cmV0dXJuIE4tZz4wJiZWKCksdlsiIXJlZiJdPXdlKHUpLHZ9KGwsaCk6c2EoZnVuY3Rpb24gdChsLGgpe3ZhciB4PWh8fHt9LGQ9W107aWYoIWx8fDA9PT1sLmxlbmd0aClyZXR1cm4gZDtm'@;
put 'b3IodmFyIHY9bC5zcGxpdCgvW1xyXG5dLyksdT12Lmxlbmd0aC0xO3U+PTAmJjA9PT12W3VdLmxlbmd0aDspLS11O2Zvcih2YXIgcD0xMCxrPTAsVD0wO1Q8PXU7KytUKS0xPT0oaz12W1RdLmluZGV4T2YoIiAiKSk/az12W1RdLmxlbmd0aDprKysscD1NYXRoLm1heChwLGspO2ZvcihUPTA7'@;
put 'VDw9dTsrK1Qpe2RbVF09W107dmFyIGc9MDtmb3IoZSh2W1RdLnNsaWNlKDAscCkudHJpbSgpLGQsVCxnLHgpLGc9MTtnPD0odltUXS5sZW5ndGgtcCkvMTArMTsrK2cpZSh2W1RdLnNsaWNlKHArMTAqKGctMSkscCsxMCpnKS50cmltKCksZCxULGcseCl9cmV0dXJuIHguc2hlZXRSb3dzJiYo'@;
put 'ZD1kLnNsaWNlKDAseC5zaGVldFJvd3MpKSxkfShsLGgpLGgpfWZ1bmN0aW9uIGYobCxoKXt2YXIgeD0iIixkPSJzdHJpbmciPT1oLnR5cGU/WzAsMCwwLDBdOktuKGwsaCk7c3dpdGNoKGgudHlwZSl7Y2FzZSJiYXNlNjQiOng9T3IobCk7YnJlYWs7Y2FzZSJiaW5hcnkiOmNhc2Uic3RyaW5n'@;
put 'Ijp4PWw7YnJlYWs7Y2FzZSJidWZmZXIiOng9NjUwMDE9PWguY29kZXBhZ2U/bC50b1N0cmluZygidXRmOCIpOmguY29kZXBhZ2UmJnR5cGVvZiBPZTwidSI/T2UudXRpbHMuZGVjb2RlKGguY29kZXBhZ2UsbCk6U2UmJkJ1ZmZlci5pc0J1ZmZlcihsKT9sLnRvU3RyaW5nKCJiaW5hcnkiKTp3'@;
put 'dChsKTticmVhaztjYXNlImFycmF5Ijp4PVB0KGwpO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJVbnJlY29nbml6ZWQgdHlwZSAiK2gudHlwZSl9cmV0dXJuIDIzOT09ZFswXSYmMTg3PT1kWzFdJiYxOTE9PWRbMl0/eD1CZSh4LnNsaWNlKDMpKToic3RyaW5nIiE9aC50eXBlJiYi'@;
put 'YnVmZmVyIiE9aC50eXBlJiY2NTAwMT09aC5jb2RlcGFnZT94PUJlKHgpOiJiaW5hcnkiPT1oLnR5cGUmJnR5cGVvZiBPZTwidSImJmguY29kZXBhZ2UmJih4PU9lLnV0aWxzLmRlY29kZShoLmNvZGVwYWdlLE9lLnV0aWxzLmVuY29kZSgyODU5MSx4KSkpLCJzb2NpYWxjYWxjOnZlcnNpb246'@;
put 'Ij09eC5zbGljZSgwLDE5KT90Zi50b19zaGVldCgic3RyaW5nIj09aC50eXBlP3g6QmUoeCksaCk6cyh4LGgpfXJldHVybnt0b193b3JrYm9vazpmdW5jdGlvbiBjKGwsaCl7cmV0dXJuIEZ0KGYobCxoKSxoKX0sdG9fc2hlZXQ6Zixmcm9tX3NoZWV0OmZ1bmN0aW9uIG8obCl7Zm9yKHZhciBk'@;
put 'LGg9W10seD1EZShsWyIhcmVmIl0pLHY9QXJyYXkuaXNBcnJheShsKSx1PXgucy5yO3U8PXguZS5yOysrdSl7Zm9yKHZhciBwPVtdLGs9eC5zLmM7azw9eC5lLmM7KytrKXt2YXIgVD1nZSh7cjp1LGM6a30pO2lmKChkPXY/KGxbdV18fFtdKVtrXTpsW1RdKSYmbnVsbCE9ZC52KXtmb3IodmFy'@;
put 'IGc9KGQud3x8KGF0KGQpLGQudyl8fCIiKS5zbGljZSgwLDEwKTtnLmxlbmd0aDwxMDspZys9IiAiO3AucHVzaChnKygwPT09az8iICI6IiIpKX1lbHNlIHAucHVzaCgiICAgICAgICAgICIpfWgucHVzaChwLmpvaW4oIiIpKX1yZXR1cm4gaC5qb2luKCJcbiIpfX19KCksanQ9ZnVuY3Rpb24o'@;
put 'KXtmdW5jdGlvbiBlKEMsVSxPKXtpZihDKXtocihDLEMubHx8MCk7Zm9yKHZhciBEPU8uRW51bXx8eGU7Qy5sPEMubGVuZ3RoOyl7dmFyIGo9Qy5yZWFkX3NoaWZ0KDIpLHNlPURbal18fERbNjU1MzVdLFo9Qy5yZWFkX3NoaWZ0KDIpLFE9Qy5sK1osWT1zZS5mJiZzZS5mKEMsWixPKTtpZihD'@;
put 'Lmw9USxVKFksc2UsaikpcmV0dXJufX19ZnVuY3Rpb24gcihDLFUpe2lmKCFDKXJldHVybiBDO3ZhciBPPVV8fHt9O251bGwhPXplJiZudWxsPT1PLmRlbnNlJiYoTy5kZW5zZT16ZSk7dmFyIEQ9Ty5kZW5zZT9bXTp7fSxqPSJTaGVldDEiLHNlPSIiLFo9MCxRPXt9LFk9W10sRWU9W10sQT17'@;
put 'czp7cjowLGM6MH0sZTp7cjowLGM6MH19LFBlPU8uc2hlZXRSb3dzfHwwO2lmKDA9PUNbMl0mJig4PT1DWzNdfHw5PT1DWzNdKSYmQy5sZW5ndGg+PTE2JiY1PT1DWzE0XSYmMTA4PT09Q1sxNV0pdGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCBXb3JrcyAzIGZvciBNYWMgZmlsZSIpO2lm'@;
put 'KDI9PUNbMl0pTy5FbnVtPXhlLGUoQyxmdW5jdGlvbihvZSxxZSxqcil7c3dpdGNoKGpyKXtjYXNlIDA6Ty52ZXJzPW9lLG9lPj00MDk2JiYoTy5xcHJvPSEwKTticmVhaztjYXNlIDY6QT1vZTticmVhaztjYXNlIDIwNDpvZSYmKHNlPW9lKTticmVhaztjYXNlIDIyMjpzZT1vZTticmVhaztj'@;
put 'YXNlIDE1OmNhc2UgNTE6Ty5xcHJvfHwob2VbMV0udj1vZVsxXS52LnNsaWNlKDEpKTtjYXNlIDEzOmNhc2UgMTQ6Y2FzZSAxNjoxND09anImJiEoMTEyJn5vZVsyXSkmJigxNSZvZVsyXSk+MSYmKDE1Jm9lWzJdKTwxNSYmKG9lWzFdLno9Ty5kYXRlTkZ8fHBlWzE0XSxPLmNlbGxEYXRlcyYm'@;
put 'KG9lWzFdLnQ9ImQiLG9lWzFdLnY9bzAob2VbMV0udikpKSxPLnFwcm8mJm9lWzNdPlomJihEWyIhcmVmIl09d2UoQSksUVtqXT1ELFkucHVzaChqKSxEPU8uZGVuc2U/W106e30sQT17czp7cjowLGM6MH0sZTp7cjowLGM6MH19LFo9b2VbM10saj1zZXx8IlNoZWV0IisoWisxKSxzZT0iIik7'@;
put 'dmFyIGZ0PU8uZGVuc2U/KERbb2VbMF0ucl18fFtdKVtvZVswXS5jXTpEW2dlKG9lWzBdKV07aWYoZnQpe2Z0LnQ9b2VbMV0udCxmdC52PW9lWzFdLnYsbnVsbCE9b2VbMV0ueiYmKGZ0Lno9b2VbMV0ueiksbnVsbCE9b2VbMV0uZiYmKGZ0LmY9b2VbMV0uZik7YnJlYWt9Ty5kZW5zZT8oRFtv'@;
put 'ZVswXS5yXXx8KERbb2VbMF0ucl09W10pLERbb2VbMF0ucl1bb2VbMF0uY109b2VbMV0pOkRbZ2Uob2VbMF0pXT1vZVsxXX19LE8pO2Vsc2V7aWYoMjYhPUNbMl0mJjE0IT1DWzJdKXRocm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkIExPVFVTIEJPRiAiK0NbMl0pO08uRW51bT1LLDE0PT1D'@;
put 'WzJdJiYoTy5xcHJvPSEwLEMubD0wKSxlKEMsZnVuY3Rpb24ob2UscWUsanIpe3N3aXRjaChqcil7Y2FzZSAyMDQ6aj1vZTticmVhaztjYXNlIDIyOm9lWzFdLnY9b2VbMV0udi5zbGljZSgxKTtjYXNlIDIzOmNhc2UgMjQ6Y2FzZSAyNTpjYXNlIDM3OmNhc2UgMzk6Y2FzZSA0MDppZihvZVsz'@;
put 'XT5aJiYoRFsiIXJlZiJdPXdlKEEpLFFbal09RCxZLnB1c2goaiksRD1PLmRlbnNlP1tdOnt9LEE9e3M6e3I6MCxjOjB9LGU6e3I6MCxjOjB9fSxqPSJTaGVldCIrKChaPW9lWzNdKSsxKSksUGU+MCYmb2VbMF0ucj49UGUpYnJlYWs7Ty5kZW5zZT8oRFtvZVswXS5yXXx8KERbb2VbMF0ucl09'@;
put 'W10pLERbb2VbMF0ucl1bb2VbMF0uY109b2VbMV0pOkRbZ2Uob2VbMF0pXT1vZVsxXSxBLmUuYzxvZVswXS5jJiYoQS5lLmM9b2VbMF0uYyksQS5lLnI8b2VbMF0uciYmKEEuZS5yPW9lWzBdLnIpO2JyZWFrO2Nhc2UgMjc6b2VbMTRlM10mJihFZVtvZVsxNGUzXVswXV09b2VbMTRlM11bMV0p'@;
put 'O2JyZWFrO2Nhc2UgMTUzNzpFZVtvZVswXV09b2VbMV0sb2VbMF09PVomJihqPW9lWzFdKX19LE8pfWlmKERbIiFyZWYiXT13ZShBKSxRW3NlfHxqXT1ELFkucHVzaChzZXx8aiksIUVlLmxlbmd0aClyZXR1cm57U2hlZXROYW1lczpZLFNoZWV0czpRfTtmb3IodmFyIEFlPXt9LExlPVtdLENl'@;
put 'PTA7Q2U8RWUubGVuZ3RoOysrQ2UpUVtZW0NlXV0/KExlLnB1c2goRWVbQ2VdfHxZW0NlXSksQWVbRWVbQ2VdXT1RW0VlW0NlXV18fFFbWVtDZV1dKTooTGUucHVzaChFZVtDZV0pLEFlW0VlW0NlXV09eyIhcmVmIjoiQTEifSk7cmV0dXJue1NoZWV0TmFtZXM6TGUsU2hlZXRzOkFlfX1mdW5j'@;
put 'dGlvbiBvKEMsVSxPKXt2YXIgRD1be2M6MCxyOjB9LHt0OiJuIix2OjB9LDAsMF07cmV0dXJuIE8ucXBybyYmMjA3NjghPU8udmVycz8oRFswXS5jPUMucmVhZF9zaGlmdCgxKSxEWzNdPUMucmVhZF9zaGlmdCgxKSxEWzBdLnI9Qy5yZWFkX3NoaWZ0KDIpLEMubCs9Mik6KERbMl09Qy5yZWFk'@;
put 'X3NoaWZ0KDEpLERbMF0uYz1DLnJlYWRfc2hpZnQoMiksRFswXS5yPUMucmVhZF9zaGlmdCgyKSksRH1mdW5jdGlvbiBsKEMsVSxPKXt2YXIgRD1DLmwrVSxqPW8oQywwLE8pO2lmKGpbMV0udD0icyIsMjA3Njg9PU8udmVycyl7Qy5sKys7dmFyIHNlPUMucmVhZF9zaGlmdCgxKTtyZXR1cm4g'@;
put 'alsxXS52PUMucmVhZF9zaGlmdChzZSwidXRmOCIpLGp9cmV0dXJuIE8ucXBybyYmQy5sKyssalsxXS52PUMucmVhZF9zaGlmdChELUMubCwiY3N0ciIpLGp9ZnVuY3Rpb24gaChDLFUsTyl7dmFyIEQ9Ryg3K08ubGVuZ3RoKTtELndyaXRlX3NoaWZ0KDEsMjU1KSxELndyaXRlX3NoaWZ0KDIs'@;
put 'VSksRC53cml0ZV9zaGlmdCgyLEMpLEQud3JpdGVfc2hpZnQoMSwzOSk7Zm9yKHZhciBqPTA7ajxELmxlbmd0aDsrK2ope3ZhciBzZT1PLmNoYXJDb2RlQXQoaik7RC53cml0ZV9zaGlmdCgxLHNlPj0xMjg/OTU6c2UpfXJldHVybiBELndyaXRlX3NoaWZ0KDEsMCksRH1mdW5jdGlvbiBkKEMs'@;
put 'VSxPKXt2YXIgRD1HKDcpO3JldHVybiBELndyaXRlX3NoaWZ0KDEsMjU1KSxELndyaXRlX3NoaWZ0KDIsVSksRC53cml0ZV9zaGlmdCgyLEMpLEQud3JpdGVfc2hpZnQoMixPLCJpIiksRH1mdW5jdGlvbiB1KEMsVSxPKXt2YXIgRD1HKDEzKTtyZXR1cm4gRC53cml0ZV9zaGlmdCgxLDI1NSks'@;
put 'RC53cml0ZV9zaGlmdCgyLFUpLEQud3JpdGVfc2hpZnQoMixDKSxELndyaXRlX3NoaWZ0KDgsTywiZiIpLER9ZnVuY3Rpb24gayhDLFUsTyl7dmFyIEQ9MzI3NjgmVTtyZXR1cm4gVT0oRD9DOjApKygoVSY9LTMyNzY5KT49ODE5Mj9VLTE2Mzg0OlUpLChEPyIiOiIkIikrKE8/SGUoVSk6S2Uo'@;
put 'VSkpfXZhciBUPXs1MTpbIkZBTFNFIiwwXSw1MjpbIlRSVUUiLDBdLDcwOlsiTEVOIiwxXSw4MDpbIlNVTSIsNjldLDgxOlsiQVZFUkFHRUEiLDY5XSw4MjpbIkNPVU5UQSIsNjldLDgzOlsiTUlOQSIsNjldLDg0OlsiTUFYQSIsNjldLDExMTpbIlQiLDFdfSxnPVsiIiwiIiwiIiwiIiwiIiwi'@;
put 'IiwiIiwiIiwiIiwiKyIsIi0iLCIqIiwiLyIsIl4iLCI9IiwiPD4iLCI8PSIsIj49IiwiPCIsIj4iLCIiLCIiLCIiLCIiLCImIiwiIiwiIiwiIiwiIiwiIiwiIiwiIl07ZnVuY3Rpb24gTShDKXt2YXIgVT1be2M6MCxyOjB9LHt0OiJuIix2OjB9LDBdO3JldHVybiBVWzBdLnI9Qy5yZWFkX3No'@;
put 'aWZ0KDIpLFVbM109Q1tDLmwrK10sVVswXS5jPUNbQy5sKytdLFV9ZnVuY3Rpb24geShDLFUsTyxEKXt2YXIgaj1HKDYrRC5sZW5ndGgpO2oud3JpdGVfc2hpZnQoMixDKSxqLndyaXRlX3NoaWZ0KDEsTyksai53cml0ZV9zaGlmdCgxLFUpLGoud3JpdGVfc2hpZnQoMSwzOSk7Zm9yKHZhciBz'@;
put 'ZT0wO3NlPEQubGVuZ3RoOysrc2Upe3ZhciBaPUQuY2hhckNvZGVBdChzZSk7ai53cml0ZV9zaGlmdCgxLFo+PTEyOD85NTpaKX1yZXR1cm4gai53cml0ZV9zaGlmdCgxLDApLGp9ZnVuY3Rpb24gUihDLFUpe3ZhciBPPU0oQyksRD1DLnJlYWRfc2hpZnQoNCksaj1DLnJlYWRfc2hpZnQoNCks'@;
put 'c2U9Qy5yZWFkX3NoaWZ0KDIpO2lmKDY1NTM1PT1zZSlyZXR1cm4gMD09PUQmJjMyMjEyMjU0NzI9PT1qPyhPWzFdLnQ9ImUiLE9bMV0udj0xNSk6MD09PUQmJjM0ODk2NjA5Mjg9PT1qPyhPWzFdLnQ9ImUiLE9bMV0udj00Mik6T1sxXS52PTAsTzt2YXIgWj0zMjc2OCZzZTtyZXR1cm4gc2U9'@;
put 'KDMyNzY3JnNlKS0xNjQ0NixPWzFdLnY9KDEtMipaKSooaipNYXRoLnBvdygyLHNlKzMyKStEKk1hdGgucG93KDIsc2UpKSxPfWZ1bmN0aW9uIFYoQyxVLE8sRCl7dmFyIGo9RygxNCk7aWYoai53cml0ZV9zaGlmdCgyLEMpLGoud3JpdGVfc2hpZnQoMSxPKSxqLndyaXRlX3NoaWZ0KDEsVSks'@;
put 'MD09RClyZXR1cm4gai53cml0ZV9zaGlmdCg0LDApLGoud3JpdGVfc2hpZnQoNCwwKSxqLndyaXRlX3NoaWZ0KDIsNjU1MzUpLGo7dmFyIHNlPTAsWj0wLFk9MDtyZXR1cm4gRDwwJiYoc2U9MSxEPS1EKSxaPTB8TWF0aC5sb2cyKEQpLDIxNDc0ODM2NDgmKFk9KEQvPU1hdGgucG93KDIsWi0z'@;
put 'MSkpPj4+MCl8fCgrK1osWT0oRC89Mik+Pj4wKSxELT1ZLFl8PTIxNDc0ODM2NDgsWT4+Pj0wLEQqPU1hdGgucG93KDIsMzIpLGoud3JpdGVfc2hpZnQoNCxEPj4+MCksai53cml0ZV9zaGlmdCg0LFkpLGoud3JpdGVfc2hpZnQoMixaKz0xNjM4Mysoc2U/MzI3Njg6MCkpLGp9ZnVuY3Rpb24g'@;
put 'ZWUoQyxVKXt2YXIgTz1NKEMpLEQ9Qy5yZWFkX3NoaWZ0KDgsImYiKTtyZXR1cm4gT1sxXS52PUQsT31mdW5jdGlvbiByZShDLFUpe3JldHVybiAwPT1DW0MubCtVLTFdP0MucmVhZF9zaGlmdChVLCJjc3RyIik6IiJ9ZnVuY3Rpb24gY2UoQyxVKXt2YXIgTz1HKDUrQy5sZW5ndGgpO08ud3Jp'@;
put 'dGVfc2hpZnQoMiwxNGUzKSxPLndyaXRlX3NoaWZ0KDIsVSk7Zm9yKHZhciBEPTA7RDxDLmxlbmd0aDsrK0Qpe3ZhciBqPUMuY2hhckNvZGVBdChEKTtPW08ubCsrXT1qPjEyNz85NTpqfXJldHVybiBPW08ubCsrXT0wLE99dmFyIHhlPXswOntuOiJCT0YiLGY6dHJ9LDE6e246IkVPRiJ9LDI6'@;
put 'e246IkNBTENNT0RFIn0sMzp7bjoiQ0FMQ09SREVSIn0sNDp7bjoiU1BMSVQifSw1OntuOiJTWU5DIn0sNjp7bjoiUkFOR0UiLGY6ZnVuY3Rpb24gZihDLFUsTyl7dmFyIEQ9e3M6e2M6MCxyOjB9LGU6e2M6MCxyOjB9fTtyZXR1cm4gOD09VSYmTy5xcHJvPyhELnMuYz1DLnJlYWRfc2hpZnQo'@;
put 'MSksQy5sKyssRC5zLnI9Qy5yZWFkX3NoaWZ0KDIpLEQuZS5jPUMucmVhZF9zaGlmdCgxKSxDLmwrKyxELmUucj1DLnJlYWRfc2hpZnQoMiksRCk6KEQucy5jPUMucmVhZF9zaGlmdCgyKSxELnMucj1DLnJlYWRfc2hpZnQoMiksMTI9PVUmJk8ucXBybyYmKEMubCs9MiksRC5lLmM9Qy5yZWFk'@;
put 'X3NoaWZ0KDIpLEQuZS5yPUMucmVhZF9zaGlmdCgyKSwxMj09VSYmTy5xcHJvJiYoQy5sKz0yKSw2NTUzNT09RC5zLmMmJihELnMuYz1ELmUuYz1ELnMucj1ELmUucj0wKSxEKX19LDc6e246IldJTkRPVzEifSw4OntuOiJDT0xXMSJ9LDk6e246IldJTlRXTyJ9LDEwOntuOiJDT0xXMiJ9LDEx'@;
put 'OntuOiJOQU1FIn0sMTI6e246IkJMQU5LIn0sMTM6e246IklOVEVHRVIiLGY6ZnVuY3Rpb24geChDLFUsTyl7dmFyIEQ9byhDLDAsTyk7cmV0dXJuIERbMV0udj1DLnJlYWRfc2hpZnQoMiwiaSIpLER9fSwxNDp7bjoiTlVNQkVSIixmOmZ1bmN0aW9uIHYoQyxVLE8pe3ZhciBEPW8oQywwLE8p'@;
put 'O3JldHVybiBEWzFdLnY9Qy5yZWFkX3NoaWZ0KDgsImYiKSxEfX0sMTU6e246IkxBQkVMIixmOmx9LDE2OntuOiJGT1JNVUxBIixmOmZ1bmN0aW9uIHAoQyxVLE8pe3ZhciBEPUMubCtVLGo9byhDLDAsTyk7aWYoalsxXS52PUMucmVhZF9zaGlmdCg4LCJmIiksTy5xcHJvKUMubD1EO2Vsc2V7'@;
put 'dmFyIHNlPUMucmVhZF9zaGlmdCgyKTsoZnVuY3Rpb24gTihDLFUpe2hyKEMsMCk7Zm9yKHZhciBPPVtdLEQ9MCxqPSIiLHNlPSIiLFo9IiIsUT0iIjtDLmw8Qy5sZW5ndGg7KXt2YXIgWT1DW0MubCsrXTtzd2l0Y2goWSl7Y2FzZSAwOk8ucHVzaChDLnJlYWRfc2hpZnQoOCwiZiIpKTticmVh'@;
put 'aztjYXNlIDE6c2U9ayhVWzBdLmMsQy5yZWFkX3NoaWZ0KDIpLCEwKSxqPWsoVVswXS5yLEMucmVhZF9zaGlmdCgyKSwhMSksTy5wdXNoKHNlK2opO2JyZWFrO2Nhc2UgMjp2YXIgRWU9ayhVWzBdLmMsQy5yZWFkX3NoaWZ0KDIpLCEwKSxBPWsoVVswXS5yLEMucmVhZF9zaGlmdCgyKSwhMSk7'@;
put 'c2U9ayhVWzBdLmMsQy5yZWFkX3NoaWZ0KDIpLCEwKSxqPWsoVVswXS5yLEMucmVhZF9zaGlmdCgyKSwhMSksTy5wdXNoKEVlK0ErIjoiK3NlK2opO2JyZWFrO2Nhc2UgMzppZihDLmw8Qy5sZW5ndGgpcmV0dXJuIHZvaWQgY29uc29sZS5lcnJvcigiV0sxIHByZW1hdHVyZSBmb3JtdWxhIGVu'@;
put 'ZCIpO2JyZWFrO2Nhc2UgNDpPLnB1c2goIigiK08ucG9wKCkrIikiKTticmVhaztjYXNlIDU6Ty5wdXNoKEMucmVhZF9zaGlmdCgyKSk7YnJlYWs7Y2FzZSA2OmZvcih2YXIgUGU9IiI7WT1DW0MubCsrXTspUGUrPVN0cmluZy5mcm9tQ2hhckNvZGUoWSk7Ty5wdXNoKCciJytQZS5yZXBsYWNl'@;
put 'KC8iL2csJyIiJykrJyInKTticmVhaztjYXNlIDg6Ty5wdXNoKCItIitPLnBvcCgpKTticmVhaztjYXNlIDIzOk8ucHVzaCgiKyIrTy5wb3AoKSk7YnJlYWs7Y2FzZSAyMjpPLnB1c2goIk5PVCgiK08ucG9wKCkrIikiKTticmVhaztjYXNlIDIwOmNhc2UgMjE6UT1PLnBvcCgpLFo9Ty5wb3Ao'@;
put 'KSxPLnB1c2goWyJBTkQiLCJPUiJdW1ktMjBdKyIoIitaKyIsIitRKyIpIik7YnJlYWs7ZGVmYXVsdDppZihZPDMyJiZnW1ldKVE9Ty5wb3AoKSxaPU8ucG9wKCksTy5wdXNoKForZ1tZXStRKTtlbHNle2lmKCFUW1ldKXJldHVybiBZPD03P2NvbnNvbGUuZXJyb3IoIldLMSBpbnZhbGlkIG9w'@;
put 'Y29kZSAiK1kudG9TdHJpbmcoMTYpKTpZPD0yND9jb25zb2xlLmVycm9yKCJXSzEgdW5zdXBwb3J0ZWQgb3AgIitZLnRvU3RyaW5nKDE2KSk6WTw9MzA/Y29uc29sZS5lcnJvcigiV0sxIGludmFsaWQgb3Bjb2RlICIrWS50b1N0cmluZygxNikpOlk8PTExNT9jb25zb2xlLmVycm9yKCJXSzEg'@;
put 'dW5zdXBwb3J0ZWQgZnVuY3Rpb24gb3Bjb2RlICIrWS50b1N0cmluZygxNikpOmNvbnNvbGUuZXJyb3IoIldLMSB1bnJlY29nbml6ZWQgb3Bjb2RlICIrWS50b1N0cmluZygxNikpO2lmKDY5PT0oRD1UW1ldWzFdKSYmKEQ9Q1tDLmwrK10pLEQ+Ty5sZW5ndGgpcmV0dXJuIHZvaWQgY29uc29s'@;
put 'ZS5lcnJvcigiV0sxIGJhZCBmb3JtdWxhIHBhcnNlIDB4IitZLnRvU3RyaW5nKDE2KSsiOnwiK08uam9pbigifCIpKyJ8Iik7dmFyIEFlPU8uc2xpY2UoLUQpO08ubGVuZ3RoLT1ELE8ucHVzaChUW1ldWzBdKyIoIitBZS5qb2luKCIsIikrIikiKX19fTE9PU8ubGVuZ3RoP1VbMV0uZj0iIitP'@;
put 'WzBdOmNvbnNvbGUuZXJyb3IoIldLMSBiYWQgZm9ybXVsYSBwYXJzZSB8IitPLmpvaW4oInwiKSsifCIpfSkoQy5zbGljZShDLmwsQy5sK3NlKSxqKSxDLmwrPXNlfXJldHVybiBqfX0sMjQ6e246IlRBQkxFIn0sMjU6e246Ik9SQU5HRSJ9LDI2OntuOiJQUkFOR0UifSwyNzp7bjoiU1JBTkdF'@;
put 'In0sMjg6e246IkZSQU5HRSJ9LDI5OntuOiJLUkFOR0UxIn0sMzI6e246IkhSQU5HRSJ9LDM1OntuOiJLUkFOR0UyIn0sMzY6e246IlBST1RFQyJ9LDM3OntuOiJGT09URVIifSwzODp7bjoiSEVBREVSIn0sMzk6e246IlNFVFVQIn0sNDA6e246Ik1BUkdJTlMifSw0MTp7bjoiTEFCRUxGTVQi'@;
put 'fSw0Mjp7bjoiVElUTEVTIn0sNDM6e246IlNIRUVUSlMifSw0NTp7bjoiR1JBUEgifSw0Njp7bjoiTkdSQVBIIn0sNDc6e246IkNBTENDT1VOVCJ9LDQ4OntuOiJVTkZPUk1BVFRFRCJ9LDQ5OntuOiJDVVJTT1JXMTIifSw1MDp7bjoiV0lORE9XIn0sNTE6e246IlNUUklORyIsZjpsfSw1NTp7'@;
put 'bjoiUEFTU1dPUkQifSw1Njp7bjoiTE9DS0VEIn0sNjA6e246IlFVRVJZIn0sNjE6e246IlFVRVJZTkFNRSJ9LDYyOntuOiJQUklOVCJ9LDYzOntuOiJQUklOVE5BTUUifSw2NDp7bjoiR1JBUEgyIn0sNjU6e246IkdSQVBITkFNRSJ9LDY2OntuOiJaT09NIn0sNjc6e246IlNZTVNQTElUIn0s'@;
put 'Njg6e246Ik5TUk9XUyJ9LDY5OntuOiJOU0NPTFMifSw3MDp7bjoiUlVMRVIifSw3MTp7bjoiTk5BTUUifSw3Mjp7bjoiQUNPTU0ifSw3Mzp7bjoiQU1BQ1JPIn0sNzQ6e246IlBBUlNFIn0sMTAyOntuOiJQUkFOR0VTPz8ifSwxMDM6e246IlJSQU5HRVM/PyJ9LDEwNDp7bjoiRk5BTUU/PyJ9'@;
put 'LDEwNTp7bjoiTVJBTkdFUz8/In0sMjA0OntuOiJTSEVFVE5BTUVDUyIsZjpyZX0sMjIyOntuOiJTSEVFVE5BTUVMUCIsZjpmdW5jdGlvbiBkZShDLFUpe3ZhciBPPUNbQy5sKytdO08+VS0xJiYoTz1VLTEpO2Zvcih2YXIgRD0iIjtELmxlbmd0aDxPOylEKz1TdHJpbmcuZnJvbUNoYXJDb2Rl'@;
put 'KENbQy5sKytdKTtyZXR1cm4gRH19LDY1NTM1OntuOiIifX0sSz17MDp7bjoiQk9GIn0sMTp7bjoiRU9GIn0sMjp7bjoiUEFTU1dPUkQifSwzOntuOiJDQUxDU0VUIn0sNDp7bjoiV0lORE9XU0VUIn0sNTp7bjoiU0hFRVRDRUxMUFRSIn0sNjp7bjoiU0hFRVRMQVlPVVQifSw3OntuOiJDT0xV'@;
put 'TU5XSURUSCJ9LDg6e246IkhJRERFTkNPTFVNTiJ9LDk6e246IlVTRVJSQU5HRSJ9LDEwOntuOiJTWVNURU1SQU5HRSJ9LDExOntuOiJaRVJPRk9SQ0UifSwxMjp7bjoiU09SVEtFWURJUiJ9LDEzOntuOiJGSUxFU0VBTCJ9LDE0OntuOiJEQVRBRklMTE5VTVMifSwxNTp7bjoiUFJJTlRNQUlO'@;
put 'In0sMTY6e246IlBSSU5UU1RSSU5HIn0sMTc6e246IkdSQVBITUFJTiJ9LDE4OntuOiJHUkFQSFNUUklORyJ9LDE5OntuOiI/PyJ9LDIwOntuOiJFUlJDRUxMIn0sMjE6e246Ik5BQ0VMTCJ9LDIyOntuOiJMQUJFTDE2IixmOmZ1bmN0aW9uIEkoQyxVKXt2YXIgTz1NKEMpO3JldHVybiBPWzFd'@;
put 'LnQ9InMiLE9bMV0udj1DLnJlYWRfc2hpZnQoVS00LCJjc3RyIiksT319LDIzOntuOiJOVU1CRVIxNyIsZjpSfSwyNDp7bjoiTlVNQkVSMTgiLGY6ZnVuY3Rpb24gUChDLFUpe3ZhciBPPU0oQyk7T1sxXS52PUMucmVhZF9zaGlmdCgyKTt2YXIgRD1PWzFdLnY+PjE7aWYoMSZPWzFdLnYpc3dp'@;
put 'dGNoKDcmRCl7Y2FzZSAwOkQ9NWUzKihEPj4zKTticmVhaztjYXNlIDE6RD01MDAqKEQ+PjMpO2JyZWFrO2Nhc2UgMjpEPShEPj4zKS8yMDticmVhaztjYXNlIDM6RD0oRD4+MykvMjAwO2JyZWFrO2Nhc2UgNDpEPShEPj4zKS8yZTM7YnJlYWs7Y2FzZSA1OkQ9KEQ+PjMpLzJlNDticmVhaztj'@;
put 'YXNlIDY6RD0oRD4+MykvMTY7YnJlYWs7Y2FzZSA3OkQ9KEQ+PjMpLzY0fXJldHVybiBPWzFdLnY9RCxPfX0sMjU6e246IkZPUk1VTEExOSIsZjpmdW5jdGlvbiBYKEMsVSl7dmFyIE89UihDKTtyZXR1cm4gQy5sKz1VLTE0LE99fSwyNjp7bjoiRk9STVVMQTFBIn0sMjc6e246IlhGT1JNQVQi'@;
put 'LGY6ZnVuY3Rpb24gRmUoQyxVKXtmb3IodmFyIE89e30sRD1DLmwrVTtDLmw8RDspe3ZhciBqPUMucmVhZF9zaGlmdCgyKTtpZigxNGUzPT1qKXtmb3IoT1tqXT1bMCwiIl0sT1tqXVswXT1DLnJlYWRfc2hpZnQoMik7Q1tDLmxdOylPW2pdWzFdKz1TdHJpbmcuZnJvbUNoYXJDb2RlKENbQy5s'@;
put 'XSksQy5sKys7Qy5sKyt9fXJldHVybiBPfX0sMjg6e246IkRUTEFCRUxNSVNDIn0sMjk6e246IkRUTEFCRUxDRUxMIn0sMzA6e246IkdSQVBIV0lORE9XIn0sMzE6e246IkNQQSJ9LDMyOntuOiJMUExBVVRPIn0sMzM6e246IlFVRVJZIn0sMzQ6e246IkhJRERFTlNIRUVUIn0sMzU6e246Ij8/'@;
put 'In0sMzc6e246Ik5VTUJFUjI1IixmOmZ1bmN0aW9uIGIoQyxVKXt2YXIgTz1NKEMpLEQ9Qy5yZWFkX3NoaWZ0KDQpO3JldHVybiBPWzFdLnY9RD4+NixPfX0sMzg6e246Ij8/In0sMzk6e246Ik5VTUJFUjI3IixmOmVlfSw0MDp7bjoiRk9STVVMQTI4IixmOmZ1bmN0aW9uIGxlKEMsVSl7dmFy'@;
put 'IE89ZWUoQyk7cmV0dXJuIEMubCs9VS0xMCxPfX0sMTQyOntuOiI/PyJ9LDE0Nzp7bjoiPz8ifSwxNTA6e246Ij8/In0sMTUxOntuOiI/PyJ9LDE1Mjp7bjoiPz8ifSwxNTM6e246Ij8/In0sMTU0OntuOiI/PyJ9LDE1NTp7bjoiPz8ifSwxNTY6e246Ij8/In0sMTYzOntuOiI/PyJ9LDE3NDp7'@;
put 'bjoiPz8ifSwxNzU6e246Ij8/In0sMTc2OntuOiI/PyJ9LDE3Nzp7bjoiPz8ifSwxODQ6e246Ij8/In0sMTg1OntuOiI/PyJ9LDE4Njp7bjoiPz8ifSwxODc6e246Ij8/In0sMTg4OntuOiI/PyJ9LDE5NTp7bjoiPz8ifSwyMDE6e246Ij8/In0sMjA0OntuOiJTSEVFVE5BTUVDUyIsZjpyZX0s'@;
put 'MjA1OntuOiI/PyJ9LDIwNjp7bjoiPz8ifSwyMDc6e246Ij8/In0sMjA4OntuOiI/PyJ9LDI1Njp7bjoiPz8ifSwyNTk6e246Ij8/In0sMjYwOntuOiI/PyJ9LDI2MTp7bjoiPz8ifSwyNjI6e246Ij8/In0sMjYzOntuOiI/PyJ9LDI2NTp7bjoiPz8ifSwyNjY6e246Ij8/In0sMjY3OntuOiI/'@;
put 'PyJ9LDI2ODp7bjoiPz8ifSwyNzA6e246Ij8/In0sMjcxOntuOiI/PyJ9LDM4NDp7bjoiPz8ifSwzODk6e246Ij8/In0sMzkwOntuOiI/PyJ9LDM5Mzp7bjoiPz8ifSwzOTY6e246Ij8/In0sNTEyOntuOiI/PyJ9LDUxNDp7bjoiPz8ifSw1MTM6e246Ij8/In0sNTE2OntuOiI/PyJ9LDUxNzp7'@;
put 'bjoiPz8ifSw2NDA6e246Ij8/In0sNjQxOntuOiI/PyJ9LDY0Mjp7bjoiPz8ifSw2NDM6e246Ij8/In0sNjQ0OntuOiI/PyJ9LDY0NTp7bjoiPz8ifSw2NDY6e246Ij8/In0sNjQ3OntuOiI/PyJ9LDY0ODp7bjoiPz8ifSw2NTg6e246Ij8/In0sNjU5OntuOiI/PyJ9LDY2MDp7bjoiPz8ifSw2'@;
put 'NjE6e246Ij8/In0sNjYyOntuOiI/PyJ9LDY2NTp7bjoiPz8ifSw2NjY6e246Ij8/In0sNzY4OntuOiI/PyJ9LDc3Mjp7bjoiPz8ifSwxNTM3OntuOiJTSEVFVElORk9RUCIsZjpmdW5jdGlvbiB1ZShDLFUsTyl7aWYoTy5xcHJvJiYhKFU8MjEpKXt2YXIgRD1DLnJlYWRfc2hpZnQoMSk7cmV0'@;
put 'dXJuIEMubCs9MTcsQy5sKz0xLEMubCs9MixbRCxDLnJlYWRfc2hpZnQoVS0yMSwiY3N0ciIpXX19fSwxNjAwOntuOiI/PyJ9LDE2MDI6e246Ij8/In0sMTc5Mzp7bjoiPz8ifSwxNzk0OntuOiI/PyJ9LDE3OTU6e246Ij8/In0sMTc5Njp7bjoiPz8ifSwxOTIwOntuOiI/PyJ9LDIwNDg6e246'@;
put 'Ij8/In0sMjA0OTp7bjoiPz8ifSwyMDUyOntuOiI/PyJ9LDI2ODg6e246Ij8/In0sMTA5OTg6e246Ij8/In0sMTI4NDk6e246Ij8/In0sMjgyMzM6e246Ij8/In0sMjg0ODQ6e246Ij8/In0sNjU1MzU6e246IiJ9fTtyZXR1cm57c2hlZXRfdG9fd2sxOmZ1bmN0aW9uIGEoQyxVKXt2YXIgTz1V'@;
put 'fHx7fTtpZigrTy5jb2RlcGFnZT49MCYmTXIoK08uY29kZXBhZ2UpLCJzdHJpbmciPT1PLnR5cGUpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3Qgd3JpdGUgV0sxIHRvIEpTIHN0cmluZyIpO3ZhciBEPVNyKCksaj1EZShDWyIhcmVmIl0pLHNlPUFycmF5LmlzQXJyYXkoQyksWj1bXTthZShELDAs'@;
put 'ZnVuY3Rpb24gaShDKXt2YXIgVT1HKDIpO3JldHVybiBVLndyaXRlX3NoaWZ0KDIsQyksVX0oMTAzMCkpLGFlKEQsNixmdW5jdGlvbiBjKEMpe3ZhciBVPUcoOCk7cmV0dXJuIFUud3JpdGVfc2hpZnQoMixDLnMuYyksVS53cml0ZV9zaGlmdCgyLEMucy5yKSxVLndyaXRlX3NoaWZ0KDIsQy5l'@;
put 'LmMpLFUud3JpdGVfc2hpZnQoMixDLmUuciksVX0oaikpO2Zvcih2YXIgUT1NYXRoLm1pbihqLmUuciw4MTkxKSxZPWoucy5yO1k8PVE7KytZKWZvcih2YXIgRWU9S2UoWSksQT1qLnMuYztBPD1qLmUuYzsrK0Epe1k9PT1qLnMuciYmKFpbQV09SGUoQSkpO3ZhciBBZT1zZT8oQ1tZXXx8W10p'@;
put 'W0FdOkNbWltBXStFZV07QWUmJiJ6IiE9QWUudCYmKCJuIj09QWUudD8oMHxBZS52KT09QWUudiYmQWUudj49LTMyNzY4JiZBZS52PD0zMjc2Nz9hZShELDEzLGQoWSxBLEFlLnYpKTphZShELDE0LHUoWSxBLEFlLnYpKTphZShELDE1LGgoWSxBLGF0KEFlKS5zbGljZSgwLDIzOSkpKSl9cmV0'@;
put 'dXJuIGFlKEQsMSksRC5lbmQoKX0sYm9va190b193azM6ZnVuY3Rpb24gbihDLFUpe3ZhciBPPVV8fHt9O2lmKCtPLmNvZGVwYWdlPj0wJiZNcigrTy5jb2RlcGFnZSksInN0cmluZyI9PU8udHlwZSl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCB3cml0ZSBXSzMgdG8gSlMgc3RyaW5nIik7dmFy'@;
put 'IEQ9U3IoKTthZShELDAsZnVuY3Rpb24gcyhDKXt2YXIgVT1HKDI2KTtVLndyaXRlX3NoaWZ0KDIsNDA5NiksVS53cml0ZV9zaGlmdCgyLDQpLFUud3JpdGVfc2hpZnQoNCwwKTtmb3IodmFyIE89MCxEPTAsaj0wLHNlPTA7c2U8Qy5TaGVldE5hbWVzLmxlbmd0aDsrK3NlKXt2YXIgUT1DLlNo'@;
put 'ZWV0c1tDLlNoZWV0TmFtZXNbc2VdXTtpZihRJiZRWyIhcmVmIl0peysrajt2YXIgWT1QcihRWyIhcmVmIl0pO088WS5lLnImJihPPVkuZS5yKSxEPFkuZS5jJiYoRD1ZLmUuYyl9fXJldHVybiBPPjgxOTEmJihPPTgxOTEpLFUud3JpdGVfc2hpZnQoMixPKSxVLndyaXRlX3NoaWZ0KDEsaiks'@;
put 'VS53cml0ZV9zaGlmdCgxLEQpLFUud3JpdGVfc2hpZnQoMiwwKSxVLndyaXRlX3NoaWZ0KDIsMCksVS53cml0ZV9zaGlmdCgxLDEpLFUud3JpdGVfc2hpZnQoMSwyKSxVLndyaXRlX3NoaWZ0KDQsMCksVS53cml0ZV9zaGlmdCg0LDApLFV9KEMpKTtmb3IodmFyIGo9MCxzZT0wO2o8Qy5TaGVl'@;
put 'dE5hbWVzLmxlbmd0aDsrK2opKEMuU2hlZXRzW0MuU2hlZXROYW1lc1tqXV18fHt9KVsiIXJlZiJdJiZhZShELDI3LGNlKEMuU2hlZXROYW1lc1tqXSxzZSsrKSk7dmFyIFo9MDtmb3Ioaj0wO2o8Qy5TaGVldE5hbWVzLmxlbmd0aDsrK2ope3ZhciBRPUMuU2hlZXRzW0MuU2hlZXROYW1lc1tq'@;
put 'XV07aWYoUSYmUVsiIXJlZiJdKXtmb3IodmFyIFk9RGUoUVsiIXJlZiJdKSxFZT1BcnJheS5pc0FycmF5KFEpLEE9W10sUGU9TWF0aC5taW4oWS5lLnIsODE5MSksQWU9WS5zLnI7QWU8PVBlOysrQWUpZm9yKHZhciBMZT1LZShBZSksQ2U9WS5zLmM7Q2U8PVkuZS5jOysrQ2Upe0FlPT09WS5z'@;
put 'LnImJihBW0NlXT1IZShDZSkpO3ZhciBxZT1FZT8oUVtBZV18fFtdKVtDZV06UVtBW0NlXStMZV07cWUmJiJ6IiE9cWUudCYmKCJuIj09cWUudD9hZShELDIzLFYoQWUsQ2UsWixxZS52KSk6YWUoRCwyMix5KEFlLENlLFosYXQocWUpLnNsaWNlKDAsMjM5KSkpKX0rK1p9fXJldHVybiBhZShE'@;
put 'LDEpLEQuZW5kKCl9LHRvX3dvcmtib29rOmZ1bmN0aW9uIHQoQyxVKXtzd2l0Y2goVS50eXBlKXtjYXNlImJhc2U2NCI6cmV0dXJuIHIoSXIoT3IoQykpLFUpO2Nhc2UiYmluYXJ5IjpyZXR1cm4gcihJcihDKSxVKTtjYXNlImJ1ZmZlciI6Y2FzZSJhcnJheSI6cmV0dXJuIHIoQyxVKX10aHJv'@;
put 'dyJVbnN1cHBvcnRlZCB0eXBlICIrVS50eXBlfX19KCksd2g9ZnVuY3Rpb24oKXt2YXIgZT1GYSgidCIpLHQ9RmEoInJQciIpO2Z1bmN0aW9uIHIoaSl7dmFyIHM9aS5tYXRjaChlKTtpZighcylyZXR1cm57dDoicyIsdjoiIn07dmFyIGY9e3Q6InMiLHY6SWUoc1sxXSl9LGM9aS5tYXRjaCh0'@;
put 'KTtyZXR1cm4gYyYmKGYucz1mdW5jdGlvbiBfaChlKXt2YXIgdD17fSxyPWUubWF0Y2godnIpLGE9MCxuPSExO2lmKHIpZm9yKDthIT1yLmxlbmd0aDsrK2Epe3ZhciBpPW1lKHJbYV0pO3N3aXRjaChpWzBdLnJlcGxhY2UoL1x3KjovZywiIikpe2Nhc2UiPGNvbmRlbnNlIjpjYXNlIjxleHRl'@;
put 'bmQiOmJyZWFrO2Nhc2UiPHNoYWRvdyI6aWYoIWkudmFsKWJyZWFrO2Nhc2UiPHNoYWRvdz4iOmNhc2UiPHNoYWRvdy8+Ijp0LnNoYWRvdz0xO2JyZWFrO2Nhc2UiPC9zaGFkb3c+IjpicmVhaztjYXNlIjxjaGFyc2V0IjppZigiMSI9PWkudmFsKWJyZWFrO3QuY3A9TDBbcGFyc2VJbnQoaS52'@;
put 'YWwsMTApXTticmVhaztjYXNlIjxvdXRsaW5lIjppZighaS52YWwpYnJlYWs7Y2FzZSI8b3V0bGluZT4iOmNhc2UiPG91dGxpbmUvPiI6dC5vdXRsaW5lPTE7YnJlYWs7Y2FzZSI8L291dGxpbmU+IjpicmVhaztjYXNlIjxyRm9udCI6dC5uYW1lPWkudmFsO2JyZWFrO2Nhc2UiPHN6Ijp0LnN6'@;
put 'PWkudmFsO2JyZWFrO2Nhc2UiPHN0cmlrZSI6aWYoIWkudmFsKWJyZWFrO2Nhc2UiPHN0cmlrZT4iOmNhc2UiPHN0cmlrZS8+Ijp0LnN0cmlrZT0xO2JyZWFrO2Nhc2UiPC9zdHJpa2U+IjpicmVhaztjYXNlIjx1IjppZighaS52YWwpYnJlYWs7c3dpdGNoKGkudmFsKXtjYXNlImRvdWJsZSI6'@;
put 'dC51dmFsPSJkb3VibGUiO2JyZWFrO2Nhc2Uic2luZ2xlQWNjb3VudGluZyI6dC51dmFsPSJzaW5nbGUtYWNjb3VudGluZyI7YnJlYWs7Y2FzZSJkb3VibGVBY2NvdW50aW5nIjp0LnV2YWw9ImRvdWJsZS1hY2NvdW50aW5nIn1jYXNlIjx1PiI6Y2FzZSI8dS8+Ijp0LnU9MTticmVhaztjYXNl'@;
put 'IjwvdT4iOmJyZWFrO2Nhc2UiPGIiOmlmKCIwIj09aS52YWwpYnJlYWs7Y2FzZSI8Yj4iOmNhc2UiPGIvPiI6dC5iPTE7YnJlYWs7Y2FzZSI8L2I+IjpicmVhaztjYXNlIjxpIjppZigiMCI9PWkudmFsKWJyZWFrO2Nhc2UiPGk+IjpjYXNlIjxpLz4iOnQuaT0xO2JyZWFrO2Nhc2UiPC9pPiI6'@;
put 'YnJlYWs7Y2FzZSI8Y29sb3IiOmkucmdiJiYodC5jb2xvcj1pLnJnYi5zbGljZSgyLDgpKTticmVhaztjYXNlIjxjb2xvcj4iOmNhc2UiPGNvbG9yLz4iOmNhc2UiPC9jb2xvcj4iOmJyZWFrO2Nhc2UiPGZhbWlseSI6dC5mYW1pbHk9aS52YWw7YnJlYWs7Y2FzZSI8ZmFtaWx5PiI6Y2FzZSI8'@;
put 'ZmFtaWx5Lz4iOmNhc2UiPC9mYW1pbHk+IjpicmVhaztjYXNlIjx2ZXJ0QWxpZ24iOnQudmFsaWduPWkudmFsO2JyZWFrO2Nhc2UiPHZlcnRBbGlnbj4iOmNhc2UiPHZlcnRBbGlnbi8+IjpjYXNlIjwvdmVydEFsaWduPiI6Y2FzZSI8c2NoZW1lIjpjYXNlIjxzY2hlbWU+IjpjYXNlIjxzY2hl'@;
put 'bWUvPiI6Y2FzZSI8L3NjaGVtZT4iOmNhc2UiPGV4dExzdCI6Y2FzZSI8ZXh0THN0PiI6Y2FzZSI8L2V4dExzdD4iOmJyZWFrO2Nhc2UiPGV4dCI6bj0hMDticmVhaztjYXNlIjwvZXh0PiI6bj0hMTticmVhaztkZWZhdWx0OmlmKDQ3IT09aVswXS5jaGFyQ29kZUF0KDEpJiYhbil0aHJvdyBu'@;
put 'ZXcgRXJyb3IoIlVucmVjb2duaXplZCByaWNoIGZvcm1hdCAiK2lbMF0pfX1yZXR1cm4gdH0oY1sxXSkpLGZ9dmFyIGE9LzwoPzpcdys6KT9yPi9nLG49LzxcLyg/Olx3KzopP3I+LztyZXR1cm4gZnVuY3Rpb24ocyl7cmV0dXJuIHMucmVwbGFjZShhLCIiKS5zcGxpdChuKS5tYXAocikuZmls'@;
put 'dGVyKGZ1bmN0aW9uKGYpe3JldHVybiBmLnZ9KX19KCksa2g9ZnVuY3Rpb24oKXt2YXIgdD0vKFxyXG58XG4pL2c7ZnVuY3Rpb24gYShuKXt2YXIgaT1bW10sbi52LFtdXTtyZXR1cm4gbi52PyhuLnMmJmZ1bmN0aW9uIHIobixpLHMpe3ZhciBmPVtdO24udSYmZi5wdXNoKCJ0ZXh0LWRlY29y'@;
put 'YXRpb246IHVuZGVybGluZTsiKSxuLnV2YWwmJmYucHVzaCgidGV4dC11bmRlcmxpbmUtc3R5bGU6IituLnV2YWwrIjsiKSxuLnN6JiZmLnB1c2goImZvbnQtc2l6ZToiK24uc3orInB0OyIpLG4ub3V0bGluZSYmZi5wdXNoKCJ0ZXh0LWVmZmVjdDogb3V0bGluZTsiKSxuLnNoYWRvdyYmZi5w'@;
put 'dXNoKCJ0ZXh0LXNoYWRvdzogYXV0bzsiKSxpLnB1c2goJzxzcGFuIHN0eWxlPSInK2Yuam9pbigiIikrJyI+Jyksbi5iJiYoaS5wdXNoKCI8Yj4iKSxzLnB1c2goIjwvYj4iKSksbi5pJiYoaS5wdXNoKCI8aT4iKSxzLnB1c2goIjwvaT4iKSksbi5zdHJpa2UmJihpLnB1c2goIjxzPiIpLHMu'@;
put 'cHVzaCgiPC9zPiIpKTt2YXIgYz1uLnZhbGlnbnx8IiI7InN1cGVyc2NyaXB0Ij09Y3x8InN1cGVyIj09Yz9jPSJzdXAiOiJzdWJzY3JpcHQiPT1jJiYoYz0ic3ViIiksIiIhPWMmJihpLnB1c2goIjwiK2MrIj4iKSxzLnB1c2goIjwvIitjKyI+IikpLHMucHVzaCgiPC9zcGFuPiIpfShuLnMs'@;
put 'aVswXSxpWzJdKSxpWzBdLmpvaW4oIiIpK2lbMV0ucmVwbGFjZSh0LCI8YnIvPiIpK2lbMl0uam9pbigiIikpOiIifXJldHVybiBmdW5jdGlvbihpKXtyZXR1cm4gaS5tYXAoYSkuam9pbigiIil9fSgpLEVoPS88KD86XHcrOik/dFtePl0qPihbXjxdKik8XC8oPzpcdys6KT90Pi9nLFRoPS88'@;
put 'KD86XHcrOik/cj4vLFNoPS88KD86XHcrOik/clBoLio/PihbXHNcU10qPyk8XC8oPzpcdys6KT9yUGg+L2c7ZnVuY3Rpb24gU24oZSx0KXt2YXIgcj0hdHx8dC5jZWxsSFRNTCxhPXt9O3JldHVybiBlPyhlLm1hdGNoKC9eXHMqPCg/Olx3KzopP3RbXj5dKj4vKT8oYS50PUllKEJlKGUuc2xp'@;
put 'Y2UoZS5pbmRleE9mKCI+IikrMSkuc3BsaXQoLzxcLyg/Olx3KzopP3Q+LylbMF18fCIiKSksYS5yPUJlKGUpLHImJihhLmg9JDAoYS50KSkpOmUubWF0Y2goVGgpJiYoYS5yPUJlKGUpLGEudD1JZShCZSgoZS5yZXBsYWNlKFNoLCIiKS5tYXRjaChFaCl8fFtdKS5qb2luKCIiKS5yZXBsYWNl'@;
put 'KHZyLCIiKSkpLHImJihhLmg9a2god2goYS5yKSkpKSxhKTp7dDoiIn19dmFyIEZoPS88KD86XHcrOik/c3N0KFtePl0qKT4oW1xzXFNdKik8XC8oPzpcdys6KT9zc3Q+Lyx5aD0vPCg/Olx3KzopPyg/OnNpfHNzdEl0ZW0pPi9nLEFoPS88XC8oPzpcdys6KT8oPzpzaXxzc3RJdGVtKT4vO2Z1'@;
put 'bmN0aW9uIG5mKGUpe2lmKHR5cGVvZiBPZTwidSIpcmV0dXJuIE9lLnV0aWxzLmVuY29kZShSdCxlKTtmb3IodmFyIHQ9W10scj1lLnNwbGl0KCIiKSxhPTA7YTxyLmxlbmd0aDsrK2EpdFthXT1yW2FdLmNoYXJDb2RlQXQoMCk7cmV0dXJuIHR9ZnVuY3Rpb24gZHQoZSx0KXt2YXIgcj17fTty'@;
put 'ZXR1cm4gci5NYWpvcj1lLnJlYWRfc2hpZnQoMiksci5NaW5vcj1lLnJlYWRfc2hpZnQoMiksdD49NCYmKGUubCs9dC00KSxyfWZ1bmN0aW9uIExoKGUpe2Zvcih2YXIgdD1lLnJlYWRfc2hpZnQoNCkscj1lLmwrdC00LGE9e30sbj1lLnJlYWRfc2hpZnQoNCksaT1bXTtuLS0gPjA7KWkucHVz'@;
put 'aCh7dDplLnJlYWRfc2hpZnQoNCksdjplLnJlYWRfc2hpZnQoMCwibHBwNCIpfSk7aWYoYS5uYW1lPWUucmVhZF9zaGlmdCgwLCJscHA0IiksYS5jb21wcz1pLGUubCE9cil0aHJvdyBuZXcgRXJyb3IoIkJhZCBEYXRhU3BhY2VNYXBFbnRyeTogIitlLmwrIiAhPSAiK3IpO3JldHVybiBhfWZ1'@;
put 'bmN0aW9uIHNmKGUsdCl7dmFyIHI9ZS5sK3QsYT17fTthLkZsYWdzPTYzJmUucmVhZF9zaGlmdCg0KSxlLmwrPTQsYS5BbGdJRD1lLnJlYWRfc2hpZnQoNCk7dmFyIG49ITE7c3dpdGNoKGEuQWxnSUQpe2Nhc2UgMjYxMjY6Y2FzZSAyNjEyNzpjYXNlIDI2MTI4Om49MzY9PWEuRmxhZ3M7YnJl'@;
put 'YWs7Y2FzZSAyNjYyNTpuPTQ9PWEuRmxhZ3M7YnJlYWs7Y2FzZSAwOm49MTY9PWEuRmxhZ3N8fDQ9PWEuRmxhZ3N8fDM2PT1hLkZsYWdzO2JyZWFrO2RlZmF1bHQ6dGhyb3ciVW5yZWNvZ25pemVkIGVuY3J5cHRpb24gYWxnb3JpdGhtOiAiK2EuQWxnSUR9aWYoIW4pdGhyb3cgbmV3IEVycm9y'@;
put 'KCJFbmNyeXB0aW9uIEZsYWdzL0FsZ0lEIG1pc21hdGNoIik7cmV0dXJuIGEuQWxnSURIYXNoPWUucmVhZF9zaGlmdCg0KSxhLktleVNpemU9ZS5yZWFkX3NoaWZ0KDQpLGEuUHJvdmlkZXJUeXBlPWUucmVhZF9zaGlmdCg0KSxlLmwrPTgsYS5DU1BOYW1lPWUucmVhZF9zaGlmdChyLWUubD4+'@;
put 'MSwidXRmMTZsZSIpLGUubD1yLGF9ZnVuY3Rpb24gZmYoZSx0KXt2YXIgcj17fSxhPWUubCt0O3JldHVybiBlLmwrPTQsci5TYWx0PWUuc2xpY2UoZS5sLGUubCsxNiksZS5sKz0xNixyLlZlcmlmaWVyPWUuc2xpY2UoZS5sLGUubCsxNiksZS5sKz0xNixlLnJlYWRfc2hpZnQoNCksci5WZXJp'@;
put 'Zmllckhhc2g9ZS5zbGljZShlLmwsYSksZS5sPWEscn1mdW5jdGlvbiBWaChlKXtpZigzNiE9KDYzJmUucmVhZF9zaGlmdCg0KSkpdGhyb3cgbmV3IEVycm9yKCJFbmNyeXB0aW9uSW5mbyBtaXNtYXRjaCIpO3ZhciByPWUucmVhZF9zaGlmdCg0KTtyZXR1cm57dDoiU3RkIixoOnNmKGUsciks'@;
put 'djpmZihlLGUubGVuZ3RoLWUubCl9fWZ1bmN0aW9uIFhoKCl7dGhyb3cgbmV3IEVycm9yKCJGaWxlIGlzIHBhc3N3b3JkLXByb3RlY3RlZDogRUNNQS0zNzYgRXh0ZW5zaWJsZSIpfWZ1bmN0aW9uIEdoKGUpe3ZhciB0PVsic2FsdFNpemUiLCJibG9ja1NpemUiLCJrZXlCaXRzIiwiaGFzaFNp'@;
put 'emUiLCJjaXBoZXJBbGdvcml0aG0iLCJjaXBoZXJDaGFpbmluZyIsImhhc2hBbGdvcml0aG0iLCJzYWx0VmFsdWUiXTtlLmwrPTQ7dmFyIHI9ZS5yZWFkX3NoaWZ0KGUubGVuZ3RoLWUubCwidXRmOCIpLGE9e307cmV0dXJuIHIucmVwbGFjZSh2cixmdW5jdGlvbihpKXt2YXIgcz1tZShpKTtz'@;
put 'd2l0Y2gocnQoc1swXSkpe2Nhc2UiPD94bWwiOmNhc2UiPGVuY3J5cHRpb24iOmNhc2UiPC9lbmNyeXB0aW9uPiI6Y2FzZSI8L2tleUVuY3J5cHRvcnM+IjpjYXNlIjwva2V5RW5jcnlwdG9yPiI6YnJlYWs7Y2FzZSI8a2V5RGF0YSI6dC5mb3JFYWNoKGZ1bmN0aW9uKGYpe2FbZl09c1tmXX0p'@;
put 'O2JyZWFrO2Nhc2UiPGRhdGFJbnRlZ3JpdHkiOmEuZW5jcnlwdGVkSG1hY0tleT1zLmVuY3J5cHRlZEhtYWNLZXksYS5lbmNyeXB0ZWRIbWFjVmFsdWU9cy5lbmNyeXB0ZWRIbWFjVmFsdWU7YnJlYWs7Y2FzZSI8a2V5RW5jcnlwdG9ycz4iOmNhc2UiPGtleUVuY3J5cHRvcnMiOmEuZW5jcz1b'@;
put 'XTticmVhaztjYXNlIjxrZXlFbmNyeXB0b3IiOmEudXJpPXMudXJpO2JyZWFrO2Nhc2UiPGVuY3J5cHRlZEtleSI6YS5lbmNzLnB1c2gocyk7YnJlYWs7ZGVmYXVsdDp0aHJvdyBzWzBdfX0pLGF9dmFyIGNmPWZ1bmN0aW9uKCl7dmFyIGU9WzE4NywyNTUsMjU1LDE4NiwyNTUsMjU1LDE4NSwx'@;
put 'MjgsMCwxOTAsMTUsMCwxOTEsMTUsMF0sdD1bNTc4NDAsNzQzOSw1MjM4MCwzMzk4NCw0MzY0LDM2MDAsNjE5MDIsMTI2MDYsNjI1OCw1NzY1Nyw1NDI4NywzNDA0MSwxMDI1Miw0MzM3MCwyMDE2M10scj1bNDQ3OTYsMTk5MjksMzk4NTgsMTAwNTMsMjAxMDYsNDAyMTIsMTA3NjEsMzE1ODUs'@;
put 'NjMxNzAsNjQ5MzMsNjAyNjcsNTA5MzUsNDAzOTksMTExOTksMTc3NjMsMzU1MjYsMTQ1MywyOTA2LDU4MTIsMTE2MjQsMjMyNDgsODg1LDE3NzAsMzU0MCw3MDgwLDE0MTYwLDI4MzIwLDU2NjQwLDU1MzY5LDQxMTM5LDIwODA3LDQxNjE0LDIxODIxLDQzNjQyLDE3NjIxLDI4NDg1LDU2OTcw'@;
put 'LDQ0MzQxLDE5MDE5LDM4MDM4LDE0NjA1LDI5MjEwLDYwMTk1LDUwNzkxLDQwMTc1LDEwNzUxLDIxNTAyLDQzMDA0LDI0NTM3LDE4Mzg3LDM2Nzc0LDM5NDksNzg5OCwxNTc5NiwzMTU5Miw2MzE4NCw0NzIwMSwyNDgwMyw0OTYwNiwzNzgwNSwxNDIwMywyODQwNiw1NjgxMiwxNzgyNCwzNTY0'@;
put 'OCwxNjk3LDMzOTQsNjc4OCwxMzU3NiwyNzE1Miw0MzYwMSwxNzUzOSwzNTA3OCw1NTcsMTExNCwyMjI4LDQ0NTYsMzAzODgsNjA3NzYsNTE5NTMsMzQyNDMsNzA3OSwxNDE1OCwyODMxNiwxNDEyOCwyODI1Niw1NjUxMiw0MzQyNSwxNzI1MSwzNDUwMiw3NTk3LDEzMTA1LDI2MjEwLDUyNDIw'@;
put 'LDM1MjQxLDg4MywxNzY2LDM1MzIsNDEyOSw4MjU4LDE2NTE2LDMzMDMyLDQ2NTcsOTMxNCwxODYyOF0sbj1mdW5jdGlvbihzLGYpe3JldHVybiBmdW5jdGlvbihzKXtyZXR1cm4gMjU1JihzLzJ8MTI4KnMpfShzXmYpfTtyZXR1cm4gZnVuY3Rpb24ocyl7Zm9yKHZhciBmPW5mKHMpLGM9ZnVu'@;
put 'Y3Rpb24ocyl7Zm9yKHZhciBmPXRbcy5sZW5ndGgtMV0sYz0xMDQsbz1zLmxlbmd0aC0xO28+PTA7LS1vKWZvcih2YXIgbD1zW29dLGg9MDs3IT1oOysraCk2NCZsJiYoZl49cltjXSksbCo9MiwtLWM7cmV0dXJuIGZ9KGYpLG89Zi5sZW5ndGgsbD1fdCgxNiksaD0wOzE2IT1oOysraClsW2hd'@;
put 'PTA7dmFyIHY7Zm9yKCEoMSZ+bykmJihsW29dPW4oZVswXSxjPj44KSxsWy0tb109bihmW2YubGVuZ3RoLTFdLDI1NSZjKSk7bz4wOylsWy0tb109bihmW29dLGM+PjgpLGxbLS1vXT1uKGZbb10sMjU1JmMpO2ZvcihvPTE1LHY9MTUtZi5sZW5ndGg7dj4wOylsW29dPW4oZVt2XSxjPj44KSwt'@;
put 'LXYsbFstLW9dPW4oZltvXSwyNTUmYyksLS1vLC0tdjtyZXR1cm4gbH19KCk7dmFyIG9mPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShuLGkpe3N3aXRjaChpLnR5cGUpe2Nhc2UiYmFzZTY0IjpyZXR1cm4gdChPcihuKSxpKTtjYXNlImJpbmFyeSI6cmV0dXJuIHQobixpKTtjYXNlImJ1ZmZlciI6'@;
put 'cmV0dXJuIHQoU2UmJkJ1ZmZlci5pc0J1ZmZlcihuKT9uLnRvU3RyaW5nKCJiaW5hcnkiKTp3dChuKSxpKTtjYXNlImFycmF5IjpyZXR1cm4gdChQdChuKSxpKX10aHJvdyBuZXcgRXJyb3IoIlVucmVjb2duaXplZCB0eXBlICIraS50eXBlKX1mdW5jdGlvbiB0KG4saSl7dmFyIGY9KGl8fHt9'@;
put 'KS5kZW5zZT9bXTp7fSxjPW4ubWF0Y2goL1xcdHJvd2QuKj9cXHJvd1xiL2cpO2lmKCFjLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIlJURiBtaXNzaW5nIHRhYmxlIik7dmFyIG89e3M6e2M6MCxyOjB9LGU6e2M6MCxyOmMubGVuZ3RoLTF9fTtyZXR1cm4gYy5mb3JFYWNoKGZ1bmN0aW9uKGws'@;
put 'aCl7QXJyYXkuaXNBcnJheShmKSYmKGZbaF09W10pO2Zvcih2YXIgdix4PS9cXFx3K1xiL2csZD0wLHU9LTE7dj14LmV4ZWMobCk7KXtpZigiXFxjZWxsIj09PXZbMF0pe3ZhciBwPWwuc2xpY2UoZCx4Lmxhc3RJbmRleC12WzBdLmxlbmd0aCk7aWYoIiAiPT1wWzBdJiYocD1wLnNsaWNlKDEp'@;
put 'KSwrK3UscC5sZW5ndGgpe3ZhciBrPXt2OnAsdDoicyJ9O0FycmF5LmlzQXJyYXkoZik/ZltoXVt1XT1rOmZbZ2Uoe3I6aCxjOnV9KV09a319ZD14Lmxhc3RJbmRleH11Pm8uZS5jJiYoby5lLmM9dSl9KSxmWyIhcmVmIl09d2UobyksZn1yZXR1cm57dG9fd29ya2Jvb2s6ZnVuY3Rpb24gcihu'@;
put 'LGkpe3JldHVybiBGdChlKG4saSksaSl9LHRvX3NoZWV0OmUsZnJvbV9zaGVldDpmdW5jdGlvbiBhKG4pe2Zvcih2YXIgZixpPVsie1xccnRmMVxcYW5zaSJdLHM9RGUoblsiIXJlZiJdKSxjPUFycmF5LmlzQXJyYXkobiksbz1zLnMucjtvPD1zLmUucjsrK28pe2kucHVzaCgiXFx0cm93ZFxc'@;
put 'dHJhdXRvZml0MSIpO2Zvcih2YXIgbD1zLnMuYztsPD1zLmUuYzsrK2wpaS5wdXNoKCJcXGNlbGx4IisobCsxKSk7Zm9yKGkucHVzaCgiXFxwYXJkXFxpbnRibCIpLGw9cy5zLmM7bDw9cy5lLmM7KytsKXt2YXIgaD1nZSh7cjpvLGM6bH0pOyhmPWM/KG5bb118fFtdKVtsXTpuW2hdKSYmKG51'@;
put 'bGwhPWYudnx8Zi5mJiYhZi5GKSYmKGkucHVzaCgiICIrKGYud3x8KGF0KGYpLGYudykpKSxpLnB1c2goIlxcY2VsbCIpKX1pLnB1c2goIlxccGFyZFxcaW50YmxcXHJvdyIpfXJldHVybiBpLmpvaW4oIiIpKyJ9In19fSgpO2Z1bmN0aW9uIGJhKGUpe2Zvcih2YXIgdD0wLHI9MTszIT10Oysr'@;
put 'dClyPTI1NipyKyhlW3RdPjI1NT8yNTU6ZVt0XTwwPzA6ZVt0XSk7cmV0dXJuIHIudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCkuc2xpY2UoMSl9ZnVuY3Rpb24gVDAoZSx0KXtpZigwPT09dClyZXR1cm4gZTt2YXIgcj1mdW5jdGlvbiBRaChlKXt2YXIgdD1lWzBdLzI1NSxyPWVbMV0vMjU1'@;
put 'LGE9ZVsyXS8yNTUsbj1NYXRoLm1heCh0LHIsYSksaT1NYXRoLm1pbih0LHIsYSkscz1uLWk7aWYoMD09PXMpcmV0dXJuWzAsMCx0XTt2YXIgYyxmPTAsbz1uK2k7c3dpdGNoKGM9cy8obz4xPzItbzpvKSxuKXtjYXNlIHQ6Zj0oKHItYSkvcys2KSU2O2JyZWFrO2Nhc2UgcjpmPShhLXQpL3Mr'@;
put 'MjticmVhaztjYXNlIGE6Zj0odC1yKS9zKzR9cmV0dXJuW2YvNixjLG8vMl19KGZ1bmN0aW9uIFpoKGUpe3ZhciB0PWUuc2xpY2UoIiMiPT09ZVswXT8xOjApLnNsaWNlKDAsNik7cmV0dXJuW3BhcnNlSW50KHQuc2xpY2UoMCwyKSwxNikscGFyc2VJbnQodC5zbGljZSgyLDQpLDE2KSxwYXJz'@;
put 'ZUludCh0LnNsaWNlKDQsNiksMTYpXX0oZSkpO3JldHVybiByWzJdPXQ8MD9yWzJdKigxK3QpOjEtKDEtclsyXSkqKDEtdCksYmEoZnVuY3Rpb24gZTEoZSl7dmFyIGMscj1lWzFdLGE9ZVsyXSxuPTIqciooYTwuNT9hOjEtYSksaT1hLW4vMixzPVtpLGksaV0sZj02KmVbMF07aWYoMCE9PXIp'@;
put 'c3dpdGNoKDB8Zil7Y2FzZSAwOmNhc2UgNjpjPW4qZixzWzBdKz1uLHNbMV0rPWM7YnJlYWs7Y2FzZSAxOnNbMF0rPWM9biooMi1mKSxzWzFdKz1uO2JyZWFrO2Nhc2UgMjpjPW4qKGYtMiksc1sxXSs9bixzWzJdKz1jO2JyZWFrO2Nhc2UgMzpzWzFdKz1jPW4qKDQtZiksc1syXSs9bjticmVh'@;
put 'aztjYXNlIDQ6Yz1uKihmLTQpLHNbMl0rPW4sc1swXSs9YzticmVhaztjYXNlIDU6c1syXSs9Yz1uKig2LWYpLHNbMF0rPW59Zm9yKHZhciBvPTA7MyE9bzsrK28pc1tvXT1NYXRoLnJvdW5kKDI1NSpzW29dKTtyZXR1cm4gc30ocikpfXZhciBsZj02LHIxPTE1LHQxPTEsd3I9bGY7ZnVuY3Rp'@;
put 'b24gUGEoZSl7cmV0dXJuIE1hdGguZmxvb3IoKGUrTWF0aC5yb3VuZCgxMjgvd3IpLzI1Nikqd3IpfWZ1bmN0aW9uIExhKGUpe3JldHVybiBNYXRoLmZsb29yKChlLTUpL3dyKjEwMCsuNSkvMTAwfWZ1bmN0aW9uIFMwKGUpe3JldHVybiBNYXRoLnJvdW5kKChlKndyKzUpL3dyKjI1NikvMjU2'@;
put 'fWZ1bmN0aW9uIHluKGUpe3JldHVybiBTMChMYShQYShlKSkpfWZ1bmN0aW9uIEFuKGUpe3ZhciB0PU1hdGguYWJzKGUteW4oZSkpLHI9d3I7aWYodD4uMDA1KWZvcih3cj10MTt3cjxyMTsrK3dyKU1hdGguYWJzKGUteW4oZSkpPD10JiYodD1NYXRoLmFicyhlLXluKGUpKSxyPXdyKTt3cj1y'@;
put 'fWZ1bmN0aW9uIEt0KGUpe2Uud2lkdGg/KGUud3B4PVBhKGUud2lkdGgpLGUud2NoPUxhKGUud3B4KSxlLk1EVz13cik6ZS53cHg/KGUud2NoPUxhKGUud3B4KSxlLndpZHRoPVMwKGUud2NoKSxlLk1EVz13cik6Im51bWJlciI9PXR5cGVvZiBlLndjaCYmKGUud2lkdGg9UzAoZS53Y2gpLGUu'@;
put 'd3B4PVBhKGUud2lkdGgpLGUuTURXPXdyKSxlLmN1c3RvbVdpZHRoJiZkZWxldGUgZS5jdXN0b21XaWR0aH12YXIgdWY9OTY7ZnVuY3Rpb24gQmEoZSl7cmV0dXJuIDk2KmUvdWZ9ZnVuY3Rpb24gb2EoZSl7cmV0dXJuIGUqdWYvOTZ9dmFyIG4xPXtOb25lOiJub25lIixTb2xpZDoic29saWQi'@;
put 'LEdyYXk1MDoibWVkaXVtR3JheSIsR3JheTc1OiJkYXJrR3JheSIsR3JheTI1OiJsaWdodEdyYXkiLEhvcnpTdHJpcGU6ImRhcmtIb3Jpem9udGFsIixWZXJ0U3RyaXBlOiJkYXJrVmVydGljYWwiLFJldmVyc2VEaWFnU3RyaXBlOiJkYXJrRG93biIsRGlhZ1N0cmlwZToiZGFya1VwIixEaWFn'@;
put 'Q3Jvc3M6ImRhcmtHcmlkIixUaGlja0RpYWdDcm9zczoiZGFya1RyZWxsaXMiLFRoaW5Ib3J6U3RyaXBlOiJsaWdodEhvcml6b250YWwiLFRoaW5WZXJ0U3RyaXBlOiJsaWdodFZlcnRpY2FsIixUaGluUmV2ZXJzZURpYWdTdHJpcGU6ImxpZ2h0RG93biIsVGhpbkhvcnpDcm9zczoibGlnaHRH'@;
put 'cmlkIn0sRjA9WyJudW1GbXRJZCIsImZpbGxJZCIsImZvbnRJZCIsImJvcmRlcklkIiwieGZJZCJdLHkwPVsiYXBwbHlBbGlnbm1lbnQiLCJhcHBseUJvcmRlciIsImFwcGx5RmlsbCIsImFwcGx5Rm9udCIsImFwcGx5TnVtYmVyRm9ybWF0IiwiYXBwbHlQcm90ZWN0aW9uIiwicGl2b3RCdXR0'@;
put 'b24iLCJxdW90ZVByZWZpeCJdLGgxPWZ1bmN0aW9uKCl7dmFyIHQ9LzwoPzpcdys6KT9udW1GbXRzKFtePl0qKT5bXFNcc10qPzxcLyg/Olx3KzopP251bUZtdHM+LyxyPS88KD86XHcrOik/Y2VsbFhmcyhbXj5dKik+W1xTXHNdKj88XC8oPzpcdys6KT9jZWxsWGZzPi8sYT0vPCg/Olx3Kzop'@;
put 'P2ZpbGxzKFtePl0qKT5bXFNcc10qPzxcLyg/Olx3KzopP2ZpbGxzPi8sbj0vPCg/Olx3KzopP2ZvbnRzKFtePl0qKT5bXFNcc10qPzxcLyg/Olx3KzopP2ZvbnRzPi8saT0vPCg/Olx3KzopP2JvcmRlcnMoW14+XSopPltcU1xzXSo/PFwvKD86XHcrOik/Ym9yZGVycz4vO3JldHVybiBmdW5j'@;
put 'dGlvbihmLGMsbyl7dmFyIGgsbD17fTtyZXR1cm4gZj8oKGg9KGY9Zi5yZXBsYWNlKC88IS0tKFtcc1xTXSo/KS0tPi9nbSwiIikucmVwbGFjZSgvPCFET0NUWVBFW15cW10qXFtbXlxdXSpcXT4vZ20sIiIpKS5tYXRjaCh0KSkmJmZ1bmN0aW9uIGMxKGUsdCxyKXt0Lk51bWJlckZtdD1bXTtm'@;
put 'b3IodmFyIGE9JGUocGUpLG49MDtuPGEubGVuZ3RoOysrbil0Lk51bWJlckZtdFthW25dXT1wZVthW25dXTt2YXIgaT1lWzBdLm1hdGNoKHZyKTtpZihpKWZvcihuPTA7bjxpLmxlbmd0aDsrK24pe3ZhciBzPW1lKGlbbl0pO3N3aXRjaChydChzWzBdKSl7Y2FzZSI8bnVtRm10cyI6Y2FzZSI8'@;
put 'L251bUZtdHM+IjpjYXNlIjxudW1GbXRzLz4iOmNhc2UiPG51bUZtdHM+IjpjYXNlIjwvbnVtRm10PiI6YnJlYWs7Y2FzZSI8bnVtRm10Ijp2YXIgZj1JZShCZShzLmZvcm1hdENvZGUpKSxjPXBhcnNlSW50KHMubnVtRm10SWQsMTApO2lmKHQuTnVtYmVyRm10W2NdPWYsYz4wKXtpZihjPjM5'@;
put 'Mil7Zm9yKGM9MzkyO2M+NjAmJm51bGwhPXQuTnVtYmVyRm10W2NdOy0tYyk7dC5OdW1iZXJGbXRbY109Zn1ldChmLGMpfWJyZWFrO2RlZmF1bHQ6aWYoci5XVEYpdGhyb3cgbmV3IEVycm9yKCJ1bnJlY29nbml6ZWQgIitzWzBdKyIgaW4gbnVtRm10cyIpfX19KGgsbCxvKSwoaD1mLm1hdGNo'@;
put 'KG4pKSYmZnVuY3Rpb24gZjEoZSx0LHIsYSl7dC5Gb250cz1bXTt2YXIgbj17fSxpPSExOyhlWzBdLm1hdGNoKHZyKXx8W10pLmZvckVhY2goZnVuY3Rpb24ocyl7dmFyIGY9bWUocyk7c3dpdGNoKHJ0KGZbMF0pKXtjYXNlIjxmb250cyI6Y2FzZSI8Zm9udHM+IjpjYXNlIjwvZm9udHM+Ijpj'@;
put 'YXNlIjxmb250IjpjYXNlIjxmb250PiI6Y2FzZSI8bmFtZS8+IjpjYXNlIjwvbmFtZT4iOmNhc2UiPHN6Lz4iOmNhc2UiPC9zej4iOmNhc2UiPHZlcnRBbGlnbi8+IjpjYXNlIjwvdmVydEFsaWduPiI6Y2FzZSI8ZmFtaWx5Lz4iOmNhc2UiPC9mYW1pbHk+IjpjYXNlIjxzY2hlbWUvPiI6Y2Fz'@;
put 'ZSI8L3NjaGVtZT4iOmNhc2UiPGNvbG9yLz4iOmNhc2UiPC9jb2xvcj4iOmNhc2UiPGV4dExzdCI6Y2FzZSI8ZXh0THN0PiI6Y2FzZSI8L2V4dExzdD4iOmJyZWFrO2Nhc2UiPC9mb250PiI6Y2FzZSI8Zm9udC8+Ijp0LkZvbnRzLnB1c2gobiksbj17fTticmVhaztjYXNlIjxuYW1lIjpmLnZh'@;
put 'bCYmKG4ubmFtZT1CZShmLnZhbCkpO2JyZWFrO2Nhc2UiPGIiOm4uYm9sZD1mLnZhbD9XZShmLnZhbCk6MTticmVhaztjYXNlIjxiLz4iOm4uYm9sZD0xO2JyZWFrO2Nhc2UiPGkiOm4uaXRhbGljPWYudmFsP1dlKGYudmFsKToxO2JyZWFrO2Nhc2UiPGkvPiI6bi5pdGFsaWM9MTticmVhaztj'@;
put 'YXNlIjx1Ijpzd2l0Y2goZi52YWwpe2Nhc2Uibm9uZSI6bi51bmRlcmxpbmU9MDticmVhaztjYXNlInNpbmdsZSI6bi51bmRlcmxpbmU9MTticmVhaztjYXNlImRvdWJsZSI6bi51bmRlcmxpbmU9MjticmVhaztjYXNlInNpbmdsZUFjY291bnRpbmciOm4udW5kZXJsaW5lPTMzO2JyZWFrO2Nh'@;
put 'c2UiZG91YmxlQWNjb3VudGluZyI6bi51bmRlcmxpbmU9MzR9YnJlYWs7Y2FzZSI8dS8+IjpuLnVuZGVybGluZT0xO2JyZWFrO2Nhc2UiPHN0cmlrZSI6bi5zdHJpa2U9Zi52YWw/V2UoZi52YWwpOjE7YnJlYWs7Y2FzZSI8c3RyaWtlLz4iOm4uc3RyaWtlPTE7YnJlYWs7Y2FzZSI8b3V0bGlu'@;
put 'ZSI6bi5vdXRsaW5lPWYudmFsP1dlKGYudmFsKToxO2JyZWFrO2Nhc2UiPG91dGxpbmUvPiI6bi5vdXRsaW5lPTE7YnJlYWs7Y2FzZSI8c2hhZG93IjpuLnNoYWRvdz1mLnZhbD9XZShmLnZhbCk6MTticmVhaztjYXNlIjxzaGFkb3cvPiI6bi5zaGFkb3c9MTticmVhaztjYXNlIjxjb25kZW5z'@;
put 'ZSI6bi5jb25kZW5zZT1mLnZhbD9XZShmLnZhbCk6MTticmVhaztjYXNlIjxjb25kZW5zZS8+IjpuLmNvbmRlbnNlPTE7YnJlYWs7Y2FzZSI8ZXh0ZW5kIjpuLmV4dGVuZD1mLnZhbD9XZShmLnZhbCk6MTticmVhaztjYXNlIjxleHRlbmQvPiI6bi5leHRlbmQ9MTticmVhaztjYXNlIjxzeiI6'@;
put 'Zi52YWwmJihuLnN6PStmLnZhbCk7YnJlYWs7Y2FzZSI8dmVydEFsaWduIjpmLnZhbCYmKG4udmVydEFsaWduPWYudmFsKTticmVhaztjYXNlIjxmYW1pbHkiOmYudmFsJiYobi5mYW1pbHk9cGFyc2VJbnQoZi52YWwsMTApKTticmVhaztjYXNlIjxzY2hlbWUiOmYudmFsJiYobi5zY2hlbWU9'@;
put 'Zi52YWwpO2JyZWFrO2Nhc2UiPGNoYXJzZXQiOmlmKCIxIj09Zi52YWwpYnJlYWs7Zi5jb2RlcGFnZT1MMFtwYXJzZUludChmLnZhbCwxMCldO2JyZWFrO2Nhc2UiPGNvbG9yIjppZihuLmNvbG9yfHwobi5jb2xvcj17fSksZi5hdXRvJiYobi5jb2xvci5hdXRvPVdlKGYuYXV0bykpLGYucmdi'@;
put 'KW4uY29sb3IucmdiPWYucmdiLnNsaWNlKC02KTtlbHNlIGlmKGYuaW5kZXhlZCl7bi5jb2xvci5pbmRleD1wYXJzZUludChmLmluZGV4ZWQsMTApO3ZhciBjPVZ0W24uY29sb3IuaW5kZXhdOzgxPT1uLmNvbG9yLmluZGV4JiYoYz1WdFsxXSksY3x8KGM9VnRbMV0pLG4uY29sb3IucmdiPWNb'@;
put 'MF0udG9TdHJpbmcoMTYpK2NbMV0udG9TdHJpbmcoMTYpK2NbMl0udG9TdHJpbmcoMTYpfWVsc2UgZi50aGVtZSYmKG4uY29sb3IudGhlbWU9cGFyc2VJbnQoZi50aGVtZSwxMCksZi50aW50JiYobi5jb2xvci50aW50PXBhcnNlRmxvYXQoZi50aW50KSksZi50aGVtZSYmci50aGVtZUVsZW1l'@;
put 'bnRzJiZyLnRoZW1lRWxlbWVudHMuY2xyU2NoZW1lJiYobi5jb2xvci5yZ2I9VDAoci50aGVtZUVsZW1lbnRzLmNsclNjaGVtZVtuLmNvbG9yLnRoZW1lXS5yZ2Isbi5jb2xvci50aW50fHwwKSkpO2JyZWFrO2Nhc2UiPEFsdGVybmF0ZUNvbnRlbnQiOmNhc2UiPGV4dCI6aT0hMDticmVhaztj'@;
put 'YXNlIjwvQWx0ZXJuYXRlQ29udGVudD4iOmNhc2UiPC9leHQ+IjppPSExO2JyZWFrO2RlZmF1bHQ6aWYoYSYmYS5XVEYmJiFpKXRocm93IG5ldyBFcnJvcigidW5yZWNvZ25pemVkICIrZlswXSsiIGluIGZvbnRzIil9fSl9KGgsbCxjLG8pLChoPWYubWF0Y2goYSkpJiZmdW5jdGlvbiBzMShl'@;
put 'LHQscixhKXt0LkZpbGxzPVtdO3ZhciBuPXt9LGk9ITE7KGVbMF0ubWF0Y2godnIpfHxbXSkuZm9yRWFjaChmdW5jdGlvbihzKXt2YXIgZj1tZShzKTtzd2l0Y2gocnQoZlswXSkpe2Nhc2UiPGZpbGxzIjpjYXNlIjxmaWxscz4iOmNhc2UiPC9maWxscz4iOmNhc2UiPC9maWxsPiI6Y2FzZSI8'@;
put 'Z3JhZGllbnRGaWxsPiI6Y2FzZSI8cGF0dGVybkZpbGwvPiI6Y2FzZSI8L3BhdHRlcm5GaWxsPiI6Y2FzZSI8YmdDb2xvci8+IjpjYXNlIjwvYmdDb2xvcj4iOmNhc2UiPGZnQ29sb3IvPiI6Y2FzZSI8L2ZnQ29sb3I+IjpjYXNlIjxzdG9wIjpjYXNlIjxzdG9wLz4iOmNhc2UiPC9zdG9wPiI6'@;
put 'Y2FzZSI8Y29sb3IiOmNhc2UiPGNvbG9yLz4iOmNhc2UiPC9jb2xvcj4iOmNhc2UiPGV4dExzdCI6Y2FzZSI8ZXh0THN0PiI6Y2FzZSI8L2V4dExzdD4iOmJyZWFrO2Nhc2UiPGZpbGw+IjpjYXNlIjxmaWxsIjpjYXNlIjxmaWxsLz4iOnQuRmlsbHMucHVzaChuPXt9KTticmVhaztjYXNlIjxn'@;
put 'cmFkaWVudEZpbGwiOmNhc2UiPC9ncmFkaWVudEZpbGw+Ijp0LkZpbGxzLnB1c2gobiksbj17fTticmVhaztjYXNlIjxwYXR0ZXJuRmlsbCI6Y2FzZSI8cGF0dGVybkZpbGw+IjpmLnBhdHRlcm5UeXBlJiYobi5wYXR0ZXJuVHlwZT1mLnBhdHRlcm5UeXBlKTticmVhaztjYXNlIjxiZ0NvbG9y'@;
put 'IjpuLmJnQ29sb3J8fChuLmJnQ29sb3I9e30pLGYuaW5kZXhlZCYmKG4uYmdDb2xvci5pbmRleGVkPXBhcnNlSW50KGYuaW5kZXhlZCwxMCkpLGYudGhlbWUmJihuLmJnQ29sb3IudGhlbWU9cGFyc2VJbnQoZi50aGVtZSwxMCkpLGYudGludCYmKG4uYmdDb2xvci50aW50PXBhcnNlRmxvYXQo'@;
put 'Zi50aW50KSksZi5yZ2ImJihuLmJnQ29sb3IucmdiPWYucmdiLnNsaWNlKC02KSk7YnJlYWs7Y2FzZSI8ZmdDb2xvciI6bi5mZ0NvbG9yfHwobi5mZ0NvbG9yPXt9KSxmLnRoZW1lJiYobi5mZ0NvbG9yLnRoZW1lPXBhcnNlSW50KGYudGhlbWUsMTApKSxmLnRpbnQmJihuLmZnQ29sb3IudGlu'@;
put 'dD1wYXJzZUZsb2F0KGYudGludCkpLG51bGwhPWYucmdiJiYobi5mZ0NvbG9yLnJnYj1mLnJnYi5zbGljZSgtNikpO2JyZWFrO2Nhc2UiPGV4dCI6aT0hMDticmVhaztjYXNlIjwvZXh0PiI6aT0hMTticmVhaztkZWZhdWx0OmlmKGEmJmEuV1RGJiYhaSl0aHJvdyBuZXcgRXJyb3IoInVucmVj'@;
put 'b2duaXplZCAiK2ZbMF0rIiBpbiBmaWxscyIpfX0pfShoLGwsMCxvKSwoaD1mLm1hdGNoKGkpKSYmZnVuY3Rpb24gaTEoZSx0LHIsYSl7dC5Cb3JkZXJzPVtdO3ZhciBuPXt9LGk9ITE7KGVbMF0ubWF0Y2godnIpfHxbXSkuZm9yRWFjaChmdW5jdGlvbihzKXt2YXIgZj1tZShzKTtzd2l0Y2go'@;
put 'cnQoZlswXSkpe2Nhc2UiPGJvcmRlcnMiOmNhc2UiPGJvcmRlcnM+IjpjYXNlIjwvYm9yZGVycz4iOmNhc2UiPC9ib3JkZXI+IjpjYXNlIjxsZWZ0Lz4iOmNhc2UiPGxlZnQiOmNhc2UiPGxlZnQ+IjpjYXNlIjwvbGVmdD4iOmNhc2UiPHJpZ2h0Lz4iOmNhc2UiPHJpZ2h0IjpjYXNlIjxyaWdo'@;
put 'dD4iOmNhc2UiPC9yaWdodD4iOmNhc2UiPHRvcC8+IjpjYXNlIjx0b3AiOmNhc2UiPHRvcD4iOmNhc2UiPC90b3A+IjpjYXNlIjxib3R0b20vPiI6Y2FzZSI8Ym90dG9tIjpjYXNlIjxib3R0b20+IjpjYXNlIjwvYm90dG9tPiI6Y2FzZSI8ZGlhZ29uYWwiOmNhc2UiPGRpYWdvbmFsPiI6Y2Fz'@;
put 'ZSI8ZGlhZ29uYWwvPiI6Y2FzZSI8L2RpYWdvbmFsPiI6Y2FzZSI8aG9yaXpvbnRhbCI6Y2FzZSI8aG9yaXpvbnRhbD4iOmNhc2UiPGhvcml6b250YWwvPiI6Y2FzZSI8L2hvcml6b250YWw+IjpjYXNlIjx2ZXJ0aWNhbCI6Y2FzZSI8dmVydGljYWw+IjpjYXNlIjx2ZXJ0aWNhbC8+IjpjYXNl'@;
put 'IjwvdmVydGljYWw+IjpjYXNlIjxzdGFydCI6Y2FzZSI8c3RhcnQ+IjpjYXNlIjxzdGFydC8+IjpjYXNlIjwvc3RhcnQ+IjpjYXNlIjxlbmQiOmNhc2UiPGVuZD4iOmNhc2UiPGVuZC8+IjpjYXNlIjwvZW5kPiI6Y2FzZSI8Y29sb3IiOmNhc2UiPGNvbG9yPiI6Y2FzZSI8Y29sb3IvPiI6Y2Fz'@;
put 'ZSI8L2NvbG9yPiI6Y2FzZSI8ZXh0THN0IjpjYXNlIjxleHRMc3Q+IjpjYXNlIjwvZXh0THN0PiI6YnJlYWs7Y2FzZSI8Ym9yZGVyIjpjYXNlIjxib3JkZXI+IjpjYXNlIjxib3JkZXIvPiI6bj17fSxmLmRpYWdvbmFsVXAmJihuLmRpYWdvbmFsVXA9V2UoZi5kaWFnb25hbFVwKSksZi5kaWFn'@;
put 'b25hbERvd24mJihuLmRpYWdvbmFsRG93bj1XZShmLmRpYWdvbmFsRG93bikpLHQuQm9yZGVycy5wdXNoKG4pO2JyZWFrO2Nhc2UiPGV4dCI6aT0hMDticmVhaztjYXNlIjwvZXh0PiI6aT0hMTticmVhaztkZWZhdWx0OmlmKGEmJmEuV1RGJiYhaSl0aHJvdyBuZXcgRXJyb3IoInVucmVjb2du'@;
put 'aXplZCAiK2ZbMF0rIiBpbiBib3JkZXJzIil9fSl9KGgsbCwwLG8pLChoPWYubWF0Y2gocikpJiZmdW5jdGlvbiBsMShlLHQscil7dC5DZWxsWGY9W107dmFyIGEsbj0hMTsoZVswXS5tYXRjaCh2cil8fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKGkpe3ZhciBzPW1lKGkpLGY9MDtzd2l0Y2gocnQo'@;
put 'c1swXSkpe2Nhc2UiPGNlbGxYZnMiOmNhc2UiPGNlbGxYZnM+IjpjYXNlIjxjZWxsWGZzLz4iOmNhc2UiPC9jZWxsWGZzPiI6Y2FzZSI8L3hmPiI6Y2FzZSI8L2FsaWdubWVudD4iOmNhc2UiPHByb3RlY3Rpb24iOmNhc2UiPC9wcm90ZWN0aW9uPiI6Y2FzZSI8cHJvdGVjdGlvbi8+IjpjYXNl'@;
put 'IjxleHRMc3QiOmNhc2UiPGV4dExzdD4iOmNhc2UiPC9leHRMc3Q+IjpicmVhaztjYXNlIjx4ZiI6Y2FzZSI8eGYvPiI6Zm9yKGRlbGV0ZShhPXMpWzBdLGY9MDtmPEYwLmxlbmd0aDsrK2YpYVtGMFtmXV0mJihhW0YwW2ZdXT1wYXJzZUludChhW0YwW2ZdXSwxMCkpO2ZvcihmPTA7Zjx5MC5s'@;
put 'ZW5ndGg7KytmKWFbeTBbZl1dJiYoYVt5MFtmXV09V2UoYVt5MFtmXV0pKTtpZih0Lk51bWJlckZtdCYmYS5udW1GbXRJZD4zOTIpZm9yKGY9MzkyO2Y+NjA7LS1mKWlmKHQuTnVtYmVyRm10W2EubnVtRm10SWRdPT10Lk51bWJlckZtdFtmXSl7YS5udW1GbXRJZD1mO2JyZWFrfXQuQ2VsbFhm'@;
put 'LnB1c2goYSk7YnJlYWs7Y2FzZSI8YWxpZ25tZW50IjpjYXNlIjxhbGlnbm1lbnQvPiI6dmFyIGM9e307cy52ZXJ0aWNhbCYmKGMudmVydGljYWw9cy52ZXJ0aWNhbCkscy5ob3Jpem9udGFsJiYoYy5ob3Jpem9udGFsPXMuaG9yaXpvbnRhbCksbnVsbCE9cy50ZXh0Um90YXRpb24mJihjLnRl'@;
put 'eHRSb3RhdGlvbj1zLnRleHRSb3RhdGlvbikscy5pbmRlbnQmJihjLmluZGVudD1zLmluZGVudCkscy53cmFwVGV4dCYmKGMud3JhcFRleHQ9V2Uocy53cmFwVGV4dCkpLGEuYWxpZ25tZW50PWM7YnJlYWs7Y2FzZSI8QWx0ZXJuYXRlQ29udGVudCI6Y2FzZSI8ZXh0IjpuPSEwO2JyZWFrO2Nh'@;
put 'c2UiPC9BbHRlcm5hdGVDb250ZW50PiI6Y2FzZSI8L2V4dD4iOm49ITE7YnJlYWs7ZGVmYXVsdDppZihyJiZyLldURiYmIW4pdGhyb3cgbmV3IEVycm9yKCJ1bnJlY29nbml6ZWQgIitzWzBdKyIgaW4gY2VsbFhmcyIpfX0pfShoLGwsbyksbCk6bH19KCksZzE9cHIsdzE9cHIsUDE9WyI8L2E6'@;
put 'bHQxPiIsIjwvYTpkazE+IiwiPC9hOmx0Mj4iLCI8L2E6ZGsyPiIsIjwvYTphY2NlbnQxPiIsIjwvYTphY2NlbnQyPiIsIjwvYTphY2NlbnQzPiIsIjwvYTphY2NlbnQ0PiIsIjwvYTphY2NlbnQ1PiIsIjwvYTphY2NlbnQ2PiIsIjwvYTpobGluaz4iLCI8L2E6Zm9sSGxpbms+Il07ZnVuY3Rp'@;
put 'b24gTDEoZSx0LHIpe3QudGhlbWVFbGVtZW50cy5jbHJTY2hlbWU9W107dmFyIGE9e307KGVbMF0ubWF0Y2godnIpfHxbXSkuZm9yRWFjaChmdW5jdGlvbihuKXt2YXIgaT1tZShuKTtzd2l0Y2goaVswXSl7Y2FzZSI8YTpjbHJTY2hlbWUiOmNhc2UiPC9hOmNsclNjaGVtZT4iOmJyZWFrO2Nh'@;
put 'c2UiPGE6c3JnYkNsciI6YS5yZ2I9aS52YWw7YnJlYWs7Y2FzZSI8YTpzeXNDbHIiOmEucmdiPWkubGFzdENscjticmVhaztjYXNlIjxhOmRrMT4iOmNhc2UiPC9hOmRrMT4iOmNhc2UiPGE6bHQxPiI6Y2FzZSI8L2E6bHQxPiI6Y2FzZSI8YTpkazI+IjpjYXNlIjwvYTpkazI+IjpjYXNlIjxh'@;
put 'Omx0Mj4iOmNhc2UiPC9hOmx0Mj4iOmNhc2UiPGE6YWNjZW50MT4iOmNhc2UiPC9hOmFjY2VudDE+IjpjYXNlIjxhOmFjY2VudDI+IjpjYXNlIjwvYTphY2NlbnQyPiI6Y2FzZSI8YTphY2NlbnQzPiI6Y2FzZSI8L2E6YWNjZW50Mz4iOmNhc2UiPGE6YWNjZW50ND4iOmNhc2UiPC9hOmFjY2Vu'@;
put 'dDQ+IjpjYXNlIjxhOmFjY2VudDU+IjpjYXNlIjwvYTphY2NlbnQ1PiI6Y2FzZSI8YTphY2NlbnQ2PiI6Y2FzZSI8L2E6YWNjZW50Nj4iOmNhc2UiPGE6aGxpbms+IjpjYXNlIjwvYTpobGluaz4iOmNhc2UiPGE6Zm9sSGxpbms+IjpjYXNlIjwvYTpmb2xIbGluaz4iOiIvIj09PWlbMF0uY2hh'@;
put 'ckF0KDEpPyh0LnRoZW1lRWxlbWVudHMuY2xyU2NoZW1lW1AxLmluZGV4T2YoaVswXSldPWEsYT17fSk6YS5uYW1lPWlbMF0uc2xpY2UoMyxpWzBdLmxlbmd0aC0xKTticmVhaztkZWZhdWx0OmlmKHImJnIuV1RGKXRocm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkICIraVswXSsiIGluIGNs'@;
put 'clNjaGVtZSIpfX0pfWZ1bmN0aW9uIEIxKCl7fWZ1bmN0aW9uIE0xKCl7fXZhciBVMT0vPGE6Y2xyU2NoZW1lKFtePl0qKT5bXHNcU10qPFwvYTpjbHJTY2hlbWU+LyxXMT0vPGE6Zm9udFNjaGVtZShbXj5dKik+W1xzXFNdKjxcL2E6Zm9udFNjaGVtZT4vLEgxPS88YTpmbXRTY2hlbWUoW14+'@;
put 'XSopPltcc1xTXSo8XC9hOmZtdFNjaGVtZT4vLFgxPS88YTp0aGVtZUVsZW1lbnRzKFtePl0qKT5bXHNcU10qPFwvYTp0aGVtZUVsZW1lbnRzPi87ZnVuY3Rpb24gdmYoZSx0KXsoIWV8fDA9PT1lLmxlbmd0aCkmJihlPWZ1bmN0aW9uIERuKGUsdCl7aWYodCYmdC50aGVtZVhMU1gpcmV0dXJu'@;
put 'IHQudGhlbWVYTFNYO2lmKGUmJiJzdHJpbmciPT10eXBlb2YgZS5yYXcpcmV0dXJuIGUucmF3O3ZhciByPVtlcl07cmV0dXJuIHJbci5sZW5ndGhdPSc8YTp0aGVtZSB4bWxuczphPSJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvZHJhd2luZ21sLzIwMDYvbWFpbiIgbmFtZT0i'@;
put 'T2ZmaWNlIFRoZW1lIj4nLHJbci5sZW5ndGhdPSI8YTp0aGVtZUVsZW1lbnRzPiIscltyLmxlbmd0aF09JzxhOmNsclNjaGVtZSBuYW1lPSJPZmZpY2UiPicscltyLmxlbmd0aF09JzxhOmRrMT48YTpzeXNDbHIgdmFsPSJ3aW5kb3dUZXh0IiBsYXN0Q2xyPSIwMDAwMDAiLz48L2E6ZGsxPics'@;
put 'cltyLmxlbmd0aF09JzxhOmx0MT48YTpzeXNDbHIgdmFsPSJ3aW5kb3ciIGxhc3RDbHI9IkZGRkZGRiIvPjwvYTpsdDE+JyxyW3IubGVuZ3RoXT0nPGE6ZGsyPjxhOnNyZ2JDbHIgdmFsPSIxRjQ5N0QiLz48L2E6ZGsyPicscltyLmxlbmd0aF09JzxhOmx0Mj48YTpzcmdiQ2xyIHZhbD0iRUVF'@;
put 'Q0UxIi8+PC9hOmx0Mj4nLHJbci5sZW5ndGhdPSc8YTphY2NlbnQxPjxhOnNyZ2JDbHIgdmFsPSI0RjgxQkQiLz48L2E6YWNjZW50MT4nLHJbci5sZW5ndGhdPSc8YTphY2NlbnQyPjxhOnNyZ2JDbHIgdmFsPSJDMDUwNEQiLz48L2E6YWNjZW50Mj4nLHJbci5sZW5ndGhdPSc8YTphY2NlbnQz'@;
put 'PjxhOnNyZ2JDbHIgdmFsPSI5QkJCNTkiLz48L2E6YWNjZW50Mz4nLHJbci5sZW5ndGhdPSc8YTphY2NlbnQ0PjxhOnNyZ2JDbHIgdmFsPSI4MDY0QTIiLz48L2E6YWNjZW50ND4nLHJbci5sZW5ndGhdPSc8YTphY2NlbnQ1PjxhOnNyZ2JDbHIgdmFsPSI0QkFDQzYiLz48L2E6YWNjZW50NT4n'@;
put 'LHJbci5sZW5ndGhdPSc8YTphY2NlbnQ2PjxhOnNyZ2JDbHIgdmFsPSJGNzk2NDYiLz48L2E6YWNjZW50Nj4nLHJbci5sZW5ndGhdPSc8YTpobGluaz48YTpzcmdiQ2xyIHZhbD0iMDAwMEZGIi8+PC9hOmhsaW5rPicscltyLmxlbmd0aF09JzxhOmZvbEhsaW5rPjxhOnNyZ2JDbHIgdmFsPSI4'@;
put 'MDAwODAiLz48L2E6Zm9sSGxpbms+JyxyW3IubGVuZ3RoXT0iPC9hOmNsclNjaGVtZT4iLHJbci5sZW5ndGhdPSc8YTpmb250U2NoZW1lIG5hbWU9Ik9mZmljZSI+JyxyW3IubGVuZ3RoXT0iPGE6bWFqb3JGb250PiIscltyLmxlbmd0aF09JzxhOmxhdGluIHR5cGVmYWNlPSJDYW1icmlhIi8+'@;
put 'JyxyW3IubGVuZ3RoXT0nPGE6ZWEgdHlwZWZhY2U9IiIvPicscltyLmxlbmd0aF09JzxhOmNzIHR5cGVmYWNlPSIiLz4nLHJbci5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iSnBhbiIgdHlwZWZhY2U9Ilx1ZmYyZFx1ZmYzMyBcdWZmMzBcdTMwYjRcdTMwYjdcdTMwYzNcdTMwYWYiLz4nLHJb'@;
put 'ci5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iSGFuZyIgdHlwZWZhY2U9Ilx1YjlkMVx1Yzc0MCBcdWFjZTBcdWI1MTUiLz4nLHJbci5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iSGFucyIgdHlwZWZhY2U9Ilx1NWI4Ylx1NGY1MyIvPicscltyLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJI'@;
put 'YW50IiB0eXBlZmFjZT0iXHU2NWIwXHU3ZDMwXHU2NjBlXHU5YWQ0Ii8+JyxyW3IubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IkFyYWIiIHR5cGVmYWNlPSJUaW1lcyBOZXcgUm9tYW4iLz4nLHJbci5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iSGViciIgdHlwZWZhY2U9IlRpbWVzIE5ldyBS'@;
put 'b21hbiIvPicscltyLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJUaGFpIiB0eXBlZmFjZT0iVGFob21hIi8+JyxyW3IubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IkV0aGkiIHR5cGVmYWNlPSJOeWFsYSIvPicscltyLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJCZW5nIiB0eXBlZmFjZT0i'@;
put 'VnJpbmRhIi8+JyxyW3IubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9Ikd1anIiIHR5cGVmYWNlPSJTaHJ1dGkiLz4nLHJbci5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iS2htciIgdHlwZWZhY2U9Ik1vb2xCb3JhbiIvPicscltyLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJLbmRhIiB0eXBl'@;
put 'ZmFjZT0iVHVuZ2EiLz4nLHJbci5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iR3VydSIgdHlwZWZhY2U9IlJhYXZpIi8+JyxyW3IubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IkNhbnMiIHR5cGVmYWNlPSJFdXBoZW1pYSIvPicscltyLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJDaGVyIiB0'@;
put 'eXBlZmFjZT0iUGxhbnRhZ2VuZXQgQ2hlcm9rZWUiLz4nLHJbci5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iWWlpaSIgdHlwZWZhY2U9Ik1pY3Jvc29mdCBZaSBCYWl0aSIvPicscltyLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJUaWJ0IiB0eXBlZmFjZT0iTWljcm9zb2Z0IEhpbWFsYXlh'@;
put 'Ii8+JyxyW3IubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IlRoYWEiIHR5cGVmYWNlPSJNViBCb2xpIi8+JyxyW3IubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IkRldmEiIHR5cGVmYWNlPSJNYW5nYWwiLz4nLHJbci5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iVGVsdSIgdHlwZWZhY2U9Ikdh'@;
put 'dXRhbWkiLz4nLHJbci5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iVGFtbCIgdHlwZWZhY2U9IkxhdGhhIi8+JyxyW3IubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IlN5cmMiIHR5cGVmYWNlPSJFc3RyYW5nZWxvIEVkZXNzYSIvPicscltyLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJPcnlh'@;
put 'IiB0eXBlZmFjZT0iS2FsaW5nYSIvPicscltyLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJNbHltIiB0eXBlZmFjZT0iS2FydGlrYSIvPicscltyLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJMYW9vIiB0eXBlZmFjZT0iRG9rQ2hhbXBhIi8+JyxyW3IubGVuZ3RoXT0nPGE6Zm9udCBzY3Jp'@;
put 'cHQ9IlNpbmgiIHR5cGVmYWNlPSJJc2tvb2xhIFBvdGEiLz4nLHJbci5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iTW9uZyIgdHlwZWZhY2U9Ik1vbmdvbGlhbiBCYWl0aSIvPicscltyLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJWaWV0IiB0eXBlZmFjZT0iVGltZXMgTmV3IFJvbWFuIi8+'@;
put 'JyxyW3IubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IlVpZ2giIHR5cGVmYWNlPSJNaWNyb3NvZnQgVWlnaHVyIi8+JyxyW3IubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9Ikdlb3IiIHR5cGVmYWNlPSJTeWxmYWVuIi8+JyxyW3IubGVuZ3RoXT0iPC9hOm1ham9yRm9udD4iLHJbci5sZW5ndGhd'@;
put 'PSI8YTptaW5vckZvbnQ+IixyW3IubGVuZ3RoXT0nPGE6bGF0aW4gdHlwZWZhY2U9IkNhbGlicmkiLz4nLHJbci5sZW5ndGhdPSc8YTplYSB0eXBlZmFjZT0iIi8+JyxyW3IubGVuZ3RoXT0nPGE6Y3MgdHlwZWZhY2U9IiIvPicscltyLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJKcGFuIiB0'@;
put 'eXBlZmFjZT0iXHVmZjJkXHVmZjMzIFx1ZmYzMFx1MzBiNFx1MzBiN1x1MzBjM1x1MzBhZiIvPicscltyLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJIYW5nIiB0eXBlZmFjZT0iXHViOWQxXHVjNzQwIFx1YWNlMFx1YjUxNSIvPicscltyLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJIYW5z'@;
put 'IiB0eXBlZmFjZT0iXHU1YjhiXHU0ZjUzIi8+JyxyW3IubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IkhhbnQiIHR5cGVmYWNlPSJcdTY1YjBcdTdkMzBcdTY2MGVcdTlhZDQiLz4nLHJbci5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iQXJhYiIgdHlwZWZhY2U9IkFyaWFsIi8+JyxyW3IubGVu'@;
put 'Z3RoXT0nPGE6Zm9udCBzY3JpcHQ9IkhlYnIiIHR5cGVmYWNlPSJBcmlhbCIvPicscltyLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJUaGFpIiB0eXBlZmFjZT0iVGFob21hIi8+JyxyW3IubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IkV0aGkiIHR5cGVmYWNlPSJOeWFsYSIvPicscltyLmxl'@;
put 'bmd0aF09JzxhOmZvbnQgc2NyaXB0PSJCZW5nIiB0eXBlZmFjZT0iVnJpbmRhIi8+JyxyW3IubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9Ikd1anIiIHR5cGVmYWNlPSJTaHJ1dGkiLz4nLHJbci5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iS2htciIgdHlwZWZhY2U9IkRhdW5QZW5oIi8+Jyxy'@;
put 'W3IubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IktuZGEiIHR5cGVmYWNlPSJUdW5nYSIvPicscltyLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJHdXJ1IiB0eXBlZmFjZT0iUmFhdmkiLz4nLHJbci5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iQ2FucyIgdHlwZWZhY2U9IkV1cGhlbWlhIi8+'@;
put 'JyxyW3IubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IkNoZXIiIHR5cGVmYWNlPSJQbGFudGFnZW5ldCBDaGVyb2tlZSIvPicscltyLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJZaWlpIiB0eXBlZmFjZT0iTWljcm9zb2Z0IFlpIEJhaXRpIi8+JyxyW3IubGVuZ3RoXT0nPGE6Zm9udCBzY3Jp'@;
put 'cHQ9IlRpYnQiIHR5cGVmYWNlPSJNaWNyb3NvZnQgSGltYWxheWEiLz4nLHJbci5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iVGhhYSIgdHlwZWZhY2U9Ik1WIEJvbGkiLz4nLHJbci5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iRGV2YSIgdHlwZWZhY2U9Ik1hbmdhbCIvPicscltyLmxlbmd0'@;
put 'aF09JzxhOmZvbnQgc2NyaXB0PSJUZWx1IiB0eXBlZmFjZT0iR2F1dGFtaSIvPicscltyLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJUYW1sIiB0eXBlZmFjZT0iTGF0aGEiLz4nLHJbci5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iU3lyYyIgdHlwZWZhY2U9IkVzdHJhbmdlbG8gRWRlc3Nh'@;
put 'Ii8+JyxyW3IubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9Ik9yeWEiIHR5cGVmYWNlPSJLYWxpbmdhIi8+JyxyW3IubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9Ik1seW0iIHR5cGVmYWNlPSJLYXJ0aWthIi8+JyxyW3IubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9Ikxhb28iIHR5cGVmYWNlPSJE'@;
put 'b2tDaGFtcGEiLz4nLHJbci5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iU2luaCIgdHlwZWZhY2U9Iklza29vbGEgUG90YSIvPicscltyLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJNb25nIiB0eXBlZmFjZT0iTW9uZ29saWFuIEJhaXRpIi8+JyxyW3IubGVuZ3RoXT0nPGE6Zm9udCBzY3Jp'@;
put 'cHQ9IlZpZXQiIHR5cGVmYWNlPSJBcmlhbCIvPicscltyLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJVaWdoIiB0eXBlZmFjZT0iTWljcm9zb2Z0IFVpZ2h1ciIvPicscltyLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJHZW9yIiB0eXBlZmFjZT0iU3lsZmFlbiIvPicscltyLmxlbmd0aF09'@;
put 'IjwvYTptaW5vckZvbnQ+IixyW3IubGVuZ3RoXT0iPC9hOmZvbnRTY2hlbWU+IixyW3IubGVuZ3RoXT0nPGE6Zm10U2NoZW1lIG5hbWU9Ik9mZmljZSI+JyxyW3IubGVuZ3RoXT0iPGE6ZmlsbFN0eWxlTHN0PiIscltyLmxlbmd0aF09JzxhOnNvbGlkRmlsbD48YTpzY2hlbWVDbHIgdmFsPSJw'@;
put 'aENsciIvPjwvYTpzb2xpZEZpbGw+JyxyW3IubGVuZ3RoXT0nPGE6Z3JhZEZpbGwgcm90V2l0aFNoYXBlPSIxIj4nLHJbci5sZW5ndGhdPSI8YTpnc0xzdD4iLHJbci5sZW5ndGhdPSc8YTpncyBwb3M9IjAiPjxhOnNjaGVtZUNsciB2YWw9InBoQ2xyIj48YTp0aW50IHZhbD0iNTAwMDAiLz48'@;
put 'YTpzYXRNb2QgdmFsPSIzMDAwMDAiLz48L2E6c2NoZW1lQ2xyPjwvYTpncz4nLHJbci5sZW5ndGhdPSc8YTpncyBwb3M9IjM1MDAwIj48YTpzY2hlbWVDbHIgdmFsPSJwaENsciI+PGE6dGludCB2YWw9IjM3MDAwIi8+PGE6c2F0TW9kIHZhbD0iMzAwMDAwIi8+PC9hOnNjaGVtZUNscj48L2E6'@;
put 'Z3M+JyxyW3IubGVuZ3RoXT0nPGE6Z3MgcG9zPSIxMDAwMDAiPjxhOnNjaGVtZUNsciB2YWw9InBoQ2xyIj48YTp0aW50IHZhbD0iMTUwMDAiLz48YTpzYXRNb2QgdmFsPSIzNTAwMDAiLz48L2E6c2NoZW1lQ2xyPjwvYTpncz4nLHJbci5sZW5ndGhdPSI8L2E6Z3NMc3Q+IixyW3IubGVuZ3Ro'@;
put 'XT0nPGE6bGluIGFuZz0iMTYyMDAwMDAiIHNjYWxlZD0iMSIvPicscltyLmxlbmd0aF09IjwvYTpncmFkRmlsbD4iLHJbci5sZW5ndGhdPSc8YTpncmFkRmlsbCByb3RXaXRoU2hhcGU9IjEiPicscltyLmxlbmd0aF09IjxhOmdzTHN0PiIscltyLmxlbmd0aF09JzxhOmdzIHBvcz0iMCI+PGE6'@;
put 'c2NoZW1lQ2xyIHZhbD0icGhDbHIiPjxhOnRpbnQgdmFsPSIxMDAwMDAiLz48YTpzaGFkZSB2YWw9IjEwMDAwMCIvPjxhOnNhdE1vZCB2YWw9IjEzMDAwMCIvPjwvYTpzY2hlbWVDbHI+PC9hOmdzPicscltyLmxlbmd0aF09JzxhOmdzIHBvcz0iMTAwMDAwIj48YTpzY2hlbWVDbHIgdmFsPSJw'@;
put 'aENsciI+PGE6dGludCB2YWw9IjUwMDAwIi8+PGE6c2hhZGUgdmFsPSIxMDAwMDAiLz48YTpzYXRNb2QgdmFsPSIzNTAwMDAiLz48L2E6c2NoZW1lQ2xyPjwvYTpncz4nLHJbci5sZW5ndGhdPSI8L2E6Z3NMc3Q+IixyW3IubGVuZ3RoXT0nPGE6bGluIGFuZz0iMTYyMDAwMDAiIHNjYWxlZD0i'@;
put 'MCIvPicscltyLmxlbmd0aF09IjwvYTpncmFkRmlsbD4iLHJbci5sZW5ndGhdPSI8L2E6ZmlsbFN0eWxlTHN0PiIscltyLmxlbmd0aF09IjxhOmxuU3R5bGVMc3Q+IixyW3IubGVuZ3RoXT0nPGE6bG4gdz0iOTUyNSIgY2FwPSJmbGF0IiBjbXBkPSJzbmciIGFsZ249ImN0ciI+PGE6c29saWRG'@;
put 'aWxsPjxhOnNjaGVtZUNsciB2YWw9InBoQ2xyIj48YTpzaGFkZSB2YWw9Ijk1MDAwIi8+PGE6c2F0TW9kIHZhbD0iMTA1MDAwIi8+PC9hOnNjaGVtZUNscj48L2E6c29saWRGaWxsPjxhOnByc3REYXNoIHZhbD0ic29saWQiLz48L2E6bG4+JyxyW3IubGVuZ3RoXT0nPGE6bG4gdz0iMjU0MDAi'@;
put 'IGNhcD0iZmxhdCIgY21wZD0ic25nIiBhbGduPSJjdHIiPjxhOnNvbGlkRmlsbD48YTpzY2hlbWVDbHIgdmFsPSJwaENsciIvPjwvYTpzb2xpZEZpbGw+PGE6cHJzdERhc2ggdmFsPSJzb2xpZCIvPjwvYTpsbj4nLHJbci5sZW5ndGhdPSc8YTpsbiB3PSIzODEwMCIgY2FwPSJmbGF0IiBjbXBk'@;
put 'PSJzbmciIGFsZ249ImN0ciI+PGE6c29saWRGaWxsPjxhOnNjaGVtZUNsciB2YWw9InBoQ2xyIi8+PC9hOnNvbGlkRmlsbD48YTpwcnN0RGFzaCB2YWw9InNvbGlkIi8+PC9hOmxuPicscltyLmxlbmd0aF09IjwvYTpsblN0eWxlTHN0PiIscltyLmxlbmd0aF09IjxhOmVmZmVjdFN0eWxlTHN0'@;
put 'PiIscltyLmxlbmd0aF09IjxhOmVmZmVjdFN0eWxlPiIscltyLmxlbmd0aF09IjxhOmVmZmVjdExzdD4iLHJbci5sZW5ndGhdPSc8YTpvdXRlclNoZHcgYmx1clJhZD0iNDAwMDAiIGRpc3Q9IjIwMDAwIiBkaXI9IjU0MDAwMDAiIHJvdFdpdGhTaGFwZT0iMCI+PGE6c3JnYkNsciB2YWw9IjAw'@;
put 'MDAwMCI+PGE6YWxwaGEgdmFsPSIzODAwMCIvPjwvYTpzcmdiQ2xyPjwvYTpvdXRlclNoZHc+JyxyW3IubGVuZ3RoXT0iPC9hOmVmZmVjdExzdD4iLHJbci5sZW5ndGhdPSI8L2E6ZWZmZWN0U3R5bGU+IixyW3IubGVuZ3RoXT0iPGE6ZWZmZWN0U3R5bGU+IixyW3IubGVuZ3RoXT0iPGE6ZWZm'@;
put 'ZWN0THN0PiIscltyLmxlbmd0aF09JzxhOm91dGVyU2hkdyBibHVyUmFkPSI0MDAwMCIgZGlzdD0iMjMwMDAiIGRpcj0iNTQwMDAwMCIgcm90V2l0aFNoYXBlPSIwIj48YTpzcmdiQ2xyIHZhbD0iMDAwMDAwIj48YTphbHBoYSB2YWw9IjM1MDAwIi8+PC9hOnNyZ2JDbHI+PC9hOm91dGVyU2hk'@;
put 'dz4nLHJbci5sZW5ndGhdPSI8L2E6ZWZmZWN0THN0PiIscltyLmxlbmd0aF09IjwvYTplZmZlY3RTdHlsZT4iLHJbci5sZW5ndGhdPSI8YTplZmZlY3RTdHlsZT4iLHJbci5sZW5ndGhdPSI8YTplZmZlY3RMc3Q+IixyW3IubGVuZ3RoXT0nPGE6b3V0ZXJTaGR3IGJsdXJSYWQ9IjQwMDAwIiBk'@;
put 'aXN0PSIyMzAwMCIgZGlyPSI1NDAwMDAwIiByb3RXaXRoU2hhcGU9IjAiPjxhOnNyZ2JDbHIgdmFsPSIwMDAwMDAiPjxhOmFscGhhIHZhbD0iMzUwMDAiLz48L2E6c3JnYkNscj48L2E6b3V0ZXJTaGR3PicscltyLmxlbmd0aF09IjwvYTplZmZlY3RMc3Q+IixyW3IubGVuZ3RoXT0nPGE6c2Nl'@;
put 'bmUzZD48YTpjYW1lcmEgcHJzdD0ib3J0aG9ncmFwaGljRnJvbnQiPjxhOnJvdCBsYXQ9IjAiIGxvbj0iMCIgcmV2PSIwIi8+PC9hOmNhbWVyYT48YTpsaWdodFJpZyByaWc9InRocmVlUHQiIGRpcj0idCI+PGE6cm90IGxhdD0iMCIgbG9uPSIwIiByZXY9IjEyMDAwMDAiLz48L2E6bGlnaHRS'@;
put 'aWc+PC9hOnNjZW5lM2Q+JyxyW3IubGVuZ3RoXT0nPGE6c3AzZD48YTpiZXZlbFQgdz0iNjM1MDAiIGg9IjI1NDAwIi8+PC9hOnNwM2Q+JyxyW3IubGVuZ3RoXT0iPC9hOmVmZmVjdFN0eWxlPiIscltyLmxlbmd0aF09IjwvYTplZmZlY3RTdHlsZUxzdD4iLHJbci5sZW5ndGhdPSI8YTpiZ0Zp'@;
put 'bGxTdHlsZUxzdD4iLHJbci5sZW5ndGhdPSc8YTpzb2xpZEZpbGw+PGE6c2NoZW1lQ2xyIHZhbD0icGhDbHIiLz48L2E6c29saWRGaWxsPicscltyLmxlbmd0aF09JzxhOmdyYWRGaWxsIHJvdFdpdGhTaGFwZT0iMSI+JyxyW3IubGVuZ3RoXT0iPGE6Z3NMc3Q+IixyW3IubGVuZ3RoXT0nPGE6'@;
put 'Z3MgcG9zPSIwIj48YTpzY2hlbWVDbHIgdmFsPSJwaENsciI+PGE6dGludCB2YWw9IjQwMDAwIi8+PGE6c2F0TW9kIHZhbD0iMzUwMDAwIi8+PC9hOnNjaGVtZUNscj48L2E6Z3M+JyxyW3IubGVuZ3RoXT0nPGE6Z3MgcG9zPSI0MDAwMCI+PGE6c2NoZW1lQ2xyIHZhbD0icGhDbHIiPjxhOnRp'@;
put 'bnQgdmFsPSI0NTAwMCIvPjxhOnNoYWRlIHZhbD0iOTkwMDAiLz48YTpzYXRNb2QgdmFsPSIzNTAwMDAiLz48L2E6c2NoZW1lQ2xyPjwvYTpncz4nLHJbci5sZW5ndGhdPSc8YTpncyBwb3M9IjEwMDAwMCI+PGE6c2NoZW1lQ2xyIHZhbD0icGhDbHIiPjxhOnNoYWRlIHZhbD0iMjAwMDAiLz48'@;
put 'YTpzYXRNb2QgdmFsPSIyNTUwMDAiLz48L2E6c2NoZW1lQ2xyPjwvYTpncz4nLHJbci5sZW5ndGhdPSI8L2E6Z3NMc3Q+IixyW3IubGVuZ3RoXT0nPGE6cGF0aCBwYXRoPSJjaXJjbGUiPjxhOmZpbGxUb1JlY3QgbD0iNTAwMDAiIHQ9Ii04MDAwMCIgcj0iNTAwMDAiIGI9IjE4MDAwMCIvPjwv'@;
put 'YTpwYXRoPicscltyLmxlbmd0aF09IjwvYTpncmFkRmlsbD4iLHJbci5sZW5ndGhdPSc8YTpncmFkRmlsbCByb3RXaXRoU2hhcGU9IjEiPicscltyLmxlbmd0aF09IjxhOmdzTHN0PiIscltyLmxlbmd0aF09JzxhOmdzIHBvcz0iMCI+PGE6c2NoZW1lQ2xyIHZhbD0icGhDbHIiPjxhOnRpbnQg'@;
put 'dmFsPSI4MDAwMCIvPjxhOnNhdE1vZCB2YWw9IjMwMDAwMCIvPjwvYTpzY2hlbWVDbHI+PC9hOmdzPicscltyLmxlbmd0aF09JzxhOmdzIHBvcz0iMTAwMDAwIj48YTpzY2hlbWVDbHIgdmFsPSJwaENsciI+PGE6c2hhZGUgdmFsPSIzMDAwMCIvPjxhOnNhdE1vZCB2YWw9IjIwMDAwMCIvPjwv'@;
put 'YTpzY2hlbWVDbHI+PC9hOmdzPicscltyLmxlbmd0aF09IjwvYTpnc0xzdD4iLHJbci5sZW5ndGhdPSc8YTpwYXRoIHBhdGg9ImNpcmNsZSI+PGE6ZmlsbFRvUmVjdCBsPSI1MDAwMCIgdD0iNTAwMDAiIHI9IjUwMDAwIiBiPSI1MDAwMCIvPjwvYTpwYXRoPicscltyLmxlbmd0aF09IjwvYTpn'@;
put 'cmFkRmlsbD4iLHJbci5sZW5ndGhdPSI8L2E6YmdGaWxsU3R5bGVMc3Q+IixyW3IubGVuZ3RoXT0iPC9hOmZtdFNjaGVtZT4iLHJbci5sZW5ndGhdPSI8L2E6dGhlbWVFbGVtZW50cz4iLHJbci5sZW5ndGhdPSI8YTpvYmplY3REZWZhdWx0cz4iLHJbci5sZW5ndGhdPSI8YTpzcERlZj4iLHJb'@;
put 'ci5sZW5ndGhdPSc8YTpzcFByLz48YTpib2R5UHIvPjxhOmxzdFN0eWxlLz48YTpzdHlsZT48YTpsblJlZiBpZHg9IjEiPjxhOnNjaGVtZUNsciB2YWw9ImFjY2VudDEiLz48L2E6bG5SZWY+PGE6ZmlsbFJlZiBpZHg9IjMiPjxhOnNjaGVtZUNsciB2YWw9ImFjY2VudDEiLz48L2E6ZmlsbFJl'@;
put 'Zj48YTplZmZlY3RSZWYgaWR4PSIyIj48YTpzY2hlbWVDbHIgdmFsPSJhY2NlbnQxIi8+PC9hOmVmZmVjdFJlZj48YTpmb250UmVmIGlkeD0ibWlub3IiPjxhOnNjaGVtZUNsciB2YWw9Imx0MSIvPjwvYTpmb250UmVmPjwvYTpzdHlsZT4nLHJbci5sZW5ndGhdPSI8L2E6c3BEZWY+IixyW3Iu'@;
put 'bGVuZ3RoXT0iPGE6bG5EZWY+IixyW3IubGVuZ3RoXT0nPGE6c3BQci8+PGE6Ym9keVByLz48YTpsc3RTdHlsZS8+PGE6c3R5bGU+PGE6bG5SZWYgaWR4PSIyIj48YTpzY2hlbWVDbHIgdmFsPSJhY2NlbnQxIi8+PC9hOmxuUmVmPjxhOmZpbGxSZWYgaWR4PSIwIj48YTpzY2hlbWVDbHIgdmFs'@;
put 'PSJhY2NlbnQxIi8+PC9hOmZpbGxSZWY+PGE6ZWZmZWN0UmVmIGlkeD0iMSI+PGE6c2NoZW1lQ2xyIHZhbD0iYWNjZW50MSIvPjwvYTplZmZlY3RSZWY+PGE6Zm9udFJlZiBpZHg9Im1pbm9yIj48YTpzY2hlbWVDbHIgdmFsPSJ0eDEiLz48L2E6Zm9udFJlZj48L2E6c3R5bGU+JyxyW3IubGVu'@;
put 'Z3RoXT0iPC9hOmxuRGVmPiIscltyLmxlbmd0aF09IjwvYTpvYmplY3REZWZhdWx0cz4iLHJbci5sZW5ndGhdPSI8YTpleHRyYUNsclNjaGVtZUxzdC8+IixyW3IubGVuZ3RoXT0iPC9hOnRoZW1lPiIsci5qb2luKCIiKX0oKSk7dmFyIHIsYT17fTtpZighKHI9ZS5tYXRjaChYMSkpKXRocm93'@;
put 'IG5ldyBFcnJvcigidGhlbWVFbGVtZW50cyBub3QgZm91bmQgaW4gdGhlbWUiKTtyZXR1cm4gZnVuY3Rpb24gVjEoZSx0LHIpe3ZhciBhO3QudGhlbWVFbGVtZW50cz17fSxbWyJjbHJTY2hlbWUiLFUxLEwxXSxbImZvbnRTY2hlbWUiLFcxLEIxXSxbImZtdFNjaGVtZSIsSDEsTTFdXS5mb3JF'@;
put 'YWNoKGZ1bmN0aW9uKG4pe2lmKCEoYT1lLm1hdGNoKG5bMV0pKSl0aHJvdyBuZXcgRXJyb3IoblswXSsiIG5vdCBmb3VuZCBpbiB0aGVtZUVsZW1lbnRzIik7blsyXShhLHQscil9KX0oclswXSxhLHQpLGEucmF3PWUsYX1mdW5jdGlvbiBZMShlKXt2YXIgdD1lLnJlYWRfc2hpZnQoMikscj1l'@;
put 'LnJlYWRfc2hpZnQoMiktNCxhPVt0XTtzd2l0Y2godCl7Y2FzZSA0OmNhc2UgNTpjYXNlIDc6Y2FzZSA4OmNhc2UgOTpjYXNlIDEwOmNhc2UgMTE6Y2FzZSAxMzphWzFdPWZ1bmN0aW9uICQxKGUpe3ZhciB0PXt9O3N3aXRjaCh0LnhjbHJUeXBlPWUucmVhZF9zaGlmdCgyKSx0Lm5UaW50U2hh'@;
put 'ZGU9ZS5yZWFkX3NoaWZ0KDIpLHQueGNsclR5cGUpe2Nhc2UgMDpjYXNlIDQ6ZS5sKz00O2JyZWFrO2Nhc2UgMTp0LnhjbHJWYWx1ZT1mdW5jdGlvbiBqMShlLHQpe3JldHVybiBwcihlLHQpfShlLDQpO2JyZWFrO2Nhc2UgMjp0LnhjbHJWYWx1ZT1NcyhlKTticmVhaztjYXNlIDM6dC54Y2xy'@;
put 'VmFsdWU9ZnVuY3Rpb24gejEoZSl7cmV0dXJuIGUucmVhZF9zaGlmdCg0KX0oZSl9cmV0dXJuIGUubCs9OCx0fShlKTticmVhaztjYXNlIDY6YVsxXT1mdW5jdGlvbiBLMShlLHQpe3JldHVybiBwcihlLHQpfShlLHIpO2JyZWFrO2Nhc2UgMTQ6Y2FzZSAxNTphWzFdPWUucmVhZF9zaGlmdCgx'@;
put 'PT09cj8xOjIpO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJVbnJlY29nbml6ZWQgRXh0UHJvcCB0eXBlOiAiK3QrIiAiK3IpfXJldHVybiBhfWZ1bmN0aW9uIHExKGUsdCl7dC5mb3JFYWNoKGZ1bmN0aW9uKHIpe30pfWZ1bmN0aW9uIGdmKGUsdCxyLGEpe3ZhciBpLG49QXJyYXku'@;
put 'aXNBcnJheShlKTt0LmZvckVhY2goZnVuY3Rpb24ocyl7dmFyIGY9R2Uocy5yZWYpO2lmKG4/KGVbZi5yXXx8KGVbZi5yXT1bXSksaT1lW2Yucl1bZi5jXSk6aT1lW3MucmVmXSwhaSl7aT17dDoieiJ9LG4/ZVtmLnJdW2YuY109aTplW3MucmVmXT1pO3ZhciBjPURlKGVbIiFyZWYiXXx8IkJE'@;
put 'V0dPMTAwMDAwMTpBMSIpO2Mucy5yPmYuciYmKGMucy5yPWYuciksYy5lLnI8Zi5yJiYoYy5lLnI9Zi5yKSxjLnMuYz5mLmMmJihjLnMuYz1mLmMpLGMuZS5jPGYuYyYmKGMuZS5jPWYuYyk7dmFyIG89d2UoYyk7byE9PWVbIiFyZWYiXSYmKGVbIiFyZWYiXT1vKX1pLmN8fChpLmM9W10pO3Zh'@;
put 'ciBsPXthOnMuYXV0aG9yLHQ6cy50LHI6cy5yLFQ6cn07cy5oJiYobC5oPXMuaCk7Zm9yKHZhciBoPWkuYy5sZW5ndGgtMTtoPj0wOy0taCl7aWYoIXImJmkuY1toXS5UKXJldHVybjtyJiYhaS5jW2hdLlQmJmkuYy5zcGxpY2UoaCwxKX1pZihyJiZhKWZvcihoPTA7aDxhLmxlbmd0aDsrK2gp'@;
put 'aWYobC5hPT1hW2hdLmlkKXtsLmE9YVtoXS5uYW1lfHxsLmE7YnJlYWt9aS5jLnB1c2gobCl9KX12YXIgd3g9bXIsU3g9ImFwcGxpY2F0aW9uL3ZuZC5tcy1vZmZpY2UudmJhUHJvamVjdCIsdWE9ZnVuY3Rpb24oKXt2YXIgZT0vKF58W15BLVphLXpfXSlSKFxbPy0/XGQrXF18WzEtOV1cZCp8'@;
put 'KUMoXFs/LT9cZCtcXXxbMS05XVxkKnwpKD8hW0EtWmEtejAtOV9dKS9nLHQ9e3I6MCxjOjB9O2Z1bmN0aW9uIHIoYSxuLGkscyl7dmFyIGY9ITEsYz0hMTswPT1pLmxlbmd0aD9jPSEwOiJbIj09aS5jaGFyQXQoMCkmJihjPSEwLGk9aS5zbGljZSgxLC0xKSksMD09cy5sZW5ndGg/Zj0hMDoi'@;
put 'WyI9PXMuY2hhckF0KDApJiYoZj0hMCxzPXMuc2xpY2UoMSwtMSkpO3ZhciBvPWkubGVuZ3RoPjA/MHxwYXJzZUludChpLDEwKTowLGw9cy5sZW5ndGg+MD8wfHBhcnNlSW50KHMsMTApOjA7cmV0dXJuIGY/bCs9dC5jOi0tbCxjP28rPXQucjotLW8sbisoZj8iIjoiJCIpK0hlKGwpKyhjPyIi'@;
put 'OiIkIikrS2Uobyl9cmV0dXJuIGZ1bmN0aW9uKG4saSl7cmV0dXJuIHQ9aSxuLnJlcGxhY2UoZSxyKX19KCksT249LyhefFteLl9BLVowLTldKShbJF0/KShbQS1aXXsxLDJ9fFtBLVddW0EtWl17Mn18WFtBLUVdW0EtWl18WEZbQS1EXSkoWyRdPykoMTBbMC0zXVxkezR9fDEwNFswLTddXGR7'@;
put 'M318MTA0OFswLTRdXGR7Mn18MTA0ODVbMC02XVxkfDEwNDg1N1swLTZdfFsxLTldXGR7MCw1fSkoPyFbXy5cKEEtWmEtejAtOV0pL2csSW49ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24odCxyKXtyZXR1cm4gdC5yZXBsYWNlKE9uLGZ1bmN0aW9uKGEsbixpLHMsZixjKXt2YXIgbz1ubihz'@;
put 'KS0oaT8wOnIuYyksbD1hbihjKS0oZj8wOnIucik7cmV0dXJuIG4rIlIiKygwPT1sPyIiOmY/bCsxOiJbIitsKyJdIikrIkMiKygwPT1vPyIiOmk/bysxOiJbIitvKyJdIil9KX19KCk7ZnVuY3Rpb24ga2YoZSx0KXtyZXR1cm4gZS5yZXBsYWNlKE9uLGZ1bmN0aW9uKHIsYSxuLGkscyxmKXty'@;
put 'ZXR1cm4gYSsoIiQiPT1uP24raTpIZShubihpKSt0LmMpKSsoIiQiPT1zP3MrZjpLZShhbihmKSt0LnIpKX0pfWZ1bmN0aW9uIEl4KGUsdCxyKXt2YXIgbj1Qcih0KS5zLGk9R2Uocik7cmV0dXJuIGtmKGUse3I6aS5yLW4ucixjOmkuYy1uLmN9KX1mdW5jdGlvbiBFZihlKXtyZXR1cm4gZS5y'@;
put 'ZXBsYWNlKC9feGxmblwuL2csIiIpfWZ1bmN0aW9uIGFyKGUpe2UubCs9MX1mdW5jdGlvbiBBdChlLHQpe3ZhciByPWUucmVhZF9zaGlmdCgxPT10PzE6Mik7cmV0dXJuWzE2MzgzJnIscj4+MTQmMSxyPj4xNSYxXX1mdW5jdGlvbiBUZihlLHQscil7dmFyIGE9MjtpZihyKXtpZihyLmJpZmY+'@;
put 'PTImJnIuYmlmZjw9NSlyZXR1cm4gU2YoZSk7MTI9PXIuYmlmZiYmKGE9NCl9dmFyIG49ZS5yZWFkX3NoaWZ0KGEpLGk9ZS5yZWFkX3NoaWZ0KGEpLHM9QXQoZSwyKSxmPUF0KGUsMik7cmV0dXJue3M6e3I6bixjOnNbMF0sY1JlbDpzWzFdLHJSZWw6c1syXX0sZTp7cjppLGM6ZlswXSxjUmVs'@;
put 'OmZbMV0sclJlbDpmWzJdfX19ZnVuY3Rpb24gU2YoZSl7dmFyIHQ9QXQoZSwyKSxyPUF0KGUsMiksYT1lLnJlYWRfc2hpZnQoMSksbj1lLnJlYWRfc2hpZnQoMSk7cmV0dXJue3M6e3I6dFswXSxjOmEsY1JlbDp0WzFdLHJSZWw6dFsyXX0sZTp7cjpyWzBdLGM6bixjUmVsOnJbMV0sclJlbDpy'@;
put 'WzJdfX19ZnVuY3Rpb24gRmYoZSx0LHIpe2lmKHImJnIuYmlmZj49MiYmci5iaWZmPD01KXJldHVybiBmdW5jdGlvbiBieChlKXt2YXIgdD1BdChlLDIpLHI9ZS5yZWFkX3NoaWZ0KDEpO3JldHVybntyOnRbMF0sYzpyLGNSZWw6dFsxXSxyUmVsOnRbMl19fShlKTt2YXIgYT1lLnJlYWRfc2hp'@;
put 'ZnQociYmMTI9PXIuYmlmZj80OjIpLG49QXQoZSwyKTtyZXR1cm57cjphLGM6blswXSxjUmVsOm5bMV0sclJlbDpuWzJdfX1mdW5jdGlvbiBQeChlKXt2YXIgdD1lLnJlYWRfc2hpZnQoMikscj1lLnJlYWRfc2hpZnQoMik7cmV0dXJue3I6dCxjOjI1NSZyLGZRdW90ZWQ6ISEoMTYzODQmciks'@;
put 'Y1JlbDpyPj4xNSxyUmVsOnI+PjE1fX1mdW5jdGlvbiB5ZihlKXt2YXIgdD0xJmVbZS5sKzFdO3JldHVybiBlLmwrPTQsW3QsMV19ZnVuY3Rpb24gQWYoZSl7cmV0dXJuW2UucmVhZF9zaGlmdCgxKSxlLnJlYWRfc2hpZnQoMSldfWZ1bmN0aW9uIGxkKGUsdCl7dmFyIHI9W2UucmVhZF9zaGlm'@;
put 'dCgxKV07aWYoMTI9PXQpc3dpdGNoKHJbMF0pe2Nhc2UgMjpyWzBdPTQ7YnJlYWs7Y2FzZSA0OnJbMF09MTY7YnJlYWs7Y2FzZSAwOnJbMF09MTticmVhaztjYXNlIDE6clswXT0yfXN3aXRjaChyWzBdKXtjYXNlIDQ6clsxXT1KZShlLDEpPyJUUlVFIjoiRkFMU0UiLDEyIT10JiYoZS5sKz03'@;
put 'KTticmVhaztjYXNlIDM3OmNhc2UgMTY6clsxXT14dFtlW2UubF1dLGUubCs9MTI9PXQ/NDo4O2JyZWFrO2Nhc2UgMDplLmwrPTg7YnJlYWs7Y2FzZSAxOnJbMV09Z3IoZSk7YnJlYWs7Y2FzZSAyOnJbMV09enQoZSwwLHtiaWZmOnQ+MCYmdDw4PzI6dH0pO2JyZWFrO2RlZmF1bHQ6dGhyb3cg'@;
put 'bmV3IEVycm9yKCJCYWQgU2VyQXI6ICIrclswXSl9cmV0dXJuIHJ9ZnVuY3Rpb24gdWQoZSx0LHIpe2Zvcih2YXIgYT1lLnJlYWRfc2hpZnQoMTI9PXIuYmlmZj80OjIpLG49W10saT0wO2khPWE7KytpKW4ucHVzaCgoMTI9PXIuYmlmZj9XdDprMCkoZSw4KSk7cmV0dXJuIG59ZnVuY3Rpb24g'@;
put 'aGQoZSx0LHIpe3ZhciBhPTAsbj0wOzEyPT1yLmJpZmY/KGE9ZS5yZWFkX3NoaWZ0KDQpLG49ZS5yZWFkX3NoaWZ0KDQpKToobj0xK2UucmVhZF9zaGlmdCgxKSxhPTErZS5yZWFkX3NoaWZ0KDIpKSxyLmJpZmY+PTImJnIuYmlmZjw4JiYoLS1hLDA9PS0tbiYmKG49MjU2KSk7Zm9yKHZhciBp'@;
put 'PTAscz1bXTtpIT1hJiYoc1tpXT1bXSk7KytpKWZvcih2YXIgZj0wO2YhPW47KytmKXNbaV1bZl09bGQoZSxyLmJpZmYpO3JldHVybiBzfWZ1bmN0aW9uIFVhKGUsdCxyKXtyZXR1cm4gZS5sKz0yLFtQeChlKV19ZnVuY3Rpb24gUm4oZSl7cmV0dXJuIGUubCs9NixbXX1mdW5jdGlvbiBDZihl'@;
put 'KXtyZXR1cm4gZS5sKz0yLFt0cihlKSwxJmUucmVhZF9zaGlmdCgyKV19dmFyIFJkPVsiRGF0YSIsIkFsbCIsIkhlYWRlcnMiLCI/PyIsIj9EYXRhMiIsIj8/IiwiP0RhdGFIZWFkZXJzIiwiPz8iLCJUb3RhbHMiLCI/PyIsIj8/IiwiPz8iLCI/RGF0YVRvdGFscyIsIj8/IiwiPz8iLCI/PyIs'@;
put 'Ij9DdXJyZW50Il0sRGY9ezE6e246IlB0Z0V4cCIsZjpmdW5jdGlvbiBuZChlLHQscil7cmV0dXJuIGUubCsrLHImJjEyPT1yLmJpZmY/W2UucmVhZF9zaGlmdCg0LCJpIiksMF06W2UucmVhZF9zaGlmdCgyKSxlLnJlYWRfc2hpZnQociYmMj09ci5iaWZmPzE6MildfX0sMjp7bjoiUHRnVGJs'@;
put 'IixmOnByfSwzOntuOiJQdGdBZGQiLGY6YXJ9LDQ6e246IlB0Z1N1YiIsZjphcn0sNTp7bjoiUHRnTXVsIixmOmFyfSw2OntuOiJQdGdEaXYiLGY6YXJ9LDc6e246IlB0Z1Bvd2VyIixmOmFyfSw4OntuOiJQdGdDb25jYXQiLGY6YXJ9LDk6e246IlB0Z0x0IixmOmFyfSwxMDp7bjoiUHRnTGUi'@;
put 'LGY6YXJ9LDExOntuOiJQdGdFcSIsZjphcn0sMTI6e246IlB0Z0dlIixmOmFyfSwxMzp7bjoiUHRnR3QiLGY6YXJ9LDE0OntuOiJQdGdOZSIsZjphcn0sMTU6e246IlB0Z0lzZWN0IixmOmFyfSwxNjp7bjoiUHRnVW5pb24iLGY6YXJ9LDE3OntuOiJQdGdSYW5nZSIsZjphcn0sMTg6e246IlB0'@;
put 'Z1VwbHVzIixmOmFyfSwxOTp7bjoiUHRnVW1pbnVzIixmOmFyfSwyMDp7bjoiUHRnUGVyY2VudCIsZjphcn0sMjE6e246IlB0Z1BhcmVuIixmOmFyfSwyMjp7bjoiUHRnTWlzc0FyZyIsZjphcn0sMjM6e246IlB0Z1N0ciIsZjpmdW5jdGlvbiBvZChlLHQscil7cmV0dXJuIGUubCsrLFJhKGUs'@;
put 'MCxyKX19LDI2OntuOiJQdGdTaGVldCIsZjpmdW5jdGlvbiBQZChlLHQscil7cmV0dXJuIGUubCs9NSxlLmwrPTIsZS5sKz0yPT1yLmJpZmY/MTo0LFsiUFRHU0hFRVQiXX19LDI3OntuOiJQdGdFbmRTaGVldCIsZjpmdW5jdGlvbiBMZChlLHQscil7cmV0dXJuIGUubCs9Mj09ci5iaWZmPzQ6'@;
put 'NSxbIlBUR0VORFNIRUVUIl19fSwyODp7bjoiUHRnRXJyIixmOmZ1bmN0aW9uIGlkKGUpe3JldHVybiBlLmwrKyx4dFtlLnJlYWRfc2hpZnQoMSldfX0sMjk6e246IlB0Z0Jvb2wiLGY6ZnVuY3Rpb24gZmQoZSl7cmV0dXJuIGUubCsrLDAhPT1lLnJlYWRfc2hpZnQoMSl9fSwzMDp7bjoiUHRn'@;
put 'SW50IixmOmZ1bmN0aW9uIHNkKGUpe3JldHVybiBlLmwrKyxlLnJlYWRfc2hpZnQoMil9fSwzMTp7bjoiUHRnTnVtIixmOmZ1bmN0aW9uIGNkKGUpe3JldHVybiBlLmwrKyxncihlKX19LDMyOntuOiJQdGdBcnJheSIsZjpmdW5jdGlvbiBYeChlLHQscil7dmFyIGE9KDk2JmVbZS5sKytdKT4+'@;
put 'NTtyZXR1cm4gZS5sKz0yPT1yLmJpZmY/NjoxMj09ci5iaWZmPzE0OjcsW2FdfX0sMzM6e246IlB0Z0Z1bmMiLGY6ZnVuY3Rpb24gZWQoZSx0LHIpe3ZhciBhPSg5NiZlW2UubF0pPj41O2UubCs9MTt2YXIgbj1lLnJlYWRfc2hpZnQociYmci5iaWZmPD0zPzE6Mik7cmV0dXJuW2F2W25dLFJm'@;
put 'W25dLGFdfX0sMzQ6e246IlB0Z0Z1bmNWYXIiLGY6ZnVuY3Rpb24gcmQoZSx0LHIpe3ZhciBhPWVbZS5sKytdLG49ZS5yZWFkX3NoaWZ0KDEpLGk9ciYmci5iaWZmPD0zP1s4OD09YT8tMTowLGUucmVhZF9zaGlmdCgxKV06ZnVuY3Rpb24gdGQoZSl7cmV0dXJuW2VbZS5sKzFdPj43LDMyNzY3'@;
put 'JmUucmVhZF9zaGlmdCgyKV19KGUpO3JldHVybltuLCgwPT09aVswXT9SZjp0dilbaVsxXV1dfX0sMzU6e246IlB0Z05hbWUiLGY6ZnVuY3Rpb24geGQoZSx0LHIpe3ZhciBhPWUucmVhZF9zaGlmdCgxKT4+PjUmMyxpPWUucmVhZF9zaGlmdCghcnx8ci5iaWZmPj04PzQ6Mik7c3dpdGNoKHIu'@;
put 'YmlmZil7Y2FzZSAyOmUubCs9NTticmVhaztjYXNlIDM6Y2FzZSA0OmUubCs9ODticmVhaztjYXNlIDU6ZS5sKz0xMn1yZXR1cm5bYSwwLGldfX0sMzY6e246IlB0Z1JlZiIsZjpmdW5jdGlvbiBxeChlLHQscil7dmFyIGE9KDk2JmVbZS5sXSk+PjU7cmV0dXJuIGUubCs9MSxbYSxGZihlLDAs'@;
put 'cildfX0sMzc6e246IlB0Z0FyZWEiLGY6ZnVuY3Rpb24gTXgoZSx0LHIpe3JldHVyblsoOTYmZVtlLmwrK10pPj41LFRmKGUsMCxyKV19fSwzODp7bjoiUHRnTWVtQXJlYSIsZjpmdW5jdGlvbiBwZChlLHQscil7dmFyIGE9ZS5yZWFkX3NoaWZ0KDEpPj4+NSYzO3JldHVybiBlLmwrPXImJjI9'@;
put 'PXIuYmlmZj8zOjQsW2EsZS5yZWFkX3NoaWZ0KHImJjI9PXIuYmlmZj8xOjIpXX19LDM5OntuOiJQdGdNZW1FcnIiLGY6cHJ9LDQwOntuOiJQdGdNZW1Ob01lbSIsZjpwcn0sNDE6e246IlB0Z01lbUZ1bmMiLGY6ZnVuY3Rpb24gbWQoZSx0LHIpe3JldHVybltlLnJlYWRfc2hpZnQoMSk+Pj41'@;
put 'JjMsZS5yZWFkX3NoaWZ0KHImJjI9PXIuYmlmZj8xOjIpXX19LDQyOntuOiJQdGdSZWZFcnIiLGY6ZnVuY3Rpb24gZ2QoZSx0LHIpe3ZhciBhPWUucmVhZF9zaGlmdCgxKT4+PjUmMztyZXR1cm4gZS5sKz00LHIuYmlmZjw4JiZlLmwtLSwxMj09ci5iaWZmJiYoZS5sKz0yKSxbYV19fSw0Mzp7'@;
put 'bjoiUHRnQXJlYUVyciIsZjpmdW5jdGlvbiBXeChlLHQscil7dmFyIGE9KDk2JmVbZS5sKytdKT4+NTtyZXR1cm4gZS5sKz1yJiZyLmJpZmY+OD8xMjpyLmJpZmY8OD82OjgsW2FdfX0sNDQ6e246IlB0Z1JlZk4iLGY6ZnVuY3Rpb24gWngoZSx0LHIpe3ZhciBhPSg5NiZlW2UubF0pPj41O2Uu'@;
put 'bCs9MTt2YXIgbj1mdW5jdGlvbiBMeChlLHQscil7dmFyIGE9ciYmci5iaWZmP3IuYmlmZjo4O2lmKGE+PTImJmE8PTUpcmV0dXJuIGZ1bmN0aW9uIEJ4KGUpe3ZhciB0PWUucmVhZF9zaGlmdCgyKSxyPWUucmVhZF9zaGlmdCgxKSxhPSgzMjc2OCZ0KT4+MTUsbj0oMTYzODQmdCk+PjE0O3Jl'@;
put 'dHVybiB0Jj0xNjM4MywxPT1hJiZ0Pj04MTkyJiYodC09MTYzODQpLDE9PW4mJnI+PTEyOCYmKHItPTI1Nikse3I6dCxjOnIsY1JlbDpuLHJSZWw6YX19KGUpO3ZhciBuPWUucmVhZF9zaGlmdChhPj0xMj80OjIpLGk9ZS5yZWFkX3NoaWZ0KDIpLHM9KDE2Mzg0JmkpPj4xNCxmPSgzMjc2OCZp'@;
put 'KT4+MTU7aWYoaSY9MTYzODMsMT09Zilmb3IoO24+NTI0Mjg3OyluLT0xMDQ4NTc2O2lmKDE9PXMpZm9yKDtpPjgxOTE7KWktPTE2Mzg0O3JldHVybntyOm4sYzppLGNSZWw6cyxyUmVsOmZ9fShlLDAscik7cmV0dXJuW2Esbl19fSw0NTp7bjoiUHRnQXJlYU4iLGY6ZnVuY3Rpb24gVngoZSx0'@;
put 'LHIpe3ZhciBhPSg5NiZlW2UubCsrXSk+PjUsbj1mdW5jdGlvbiBOeChlLHQscil7aWYoci5iaWZmPDgpcmV0dXJuIFNmKGUpO3ZhciBhPWUucmVhZF9zaGlmdCgxMj09ci5iaWZmPzQ6Miksbj1lLnJlYWRfc2hpZnQoMTI9PXIuYmlmZj80OjIpLGk9QXQoZSwyKSxzPUF0KGUsMik7cmV0dXJu'@;
put 'e3M6e3I6YSxjOmlbMF0sY1JlbDppWzFdLHJSZWw6aVsyXX0sZTp7cjpuLGM6c1swXSxjUmVsOnNbMV0sclJlbDpzWzJdfX19KGUsMCxyKTtyZXR1cm5bYSxuXX19LDQ2OntuOiJQdGdNZW1BcmVhTiIsZjpmdW5jdGlvbiBCZChlKXtyZXR1cm5bZS5yZWFkX3NoaWZ0KDEpPj4+NSYzLGUucmVh'@;
put 'ZF9zaGlmdCgyKV19fSw0Nzp7bjoiUHRnTWVtTm9NZW1OIixmOmZ1bmN0aW9uIE1kKGUpe3JldHVybltlLnJlYWRfc2hpZnQoMSk+Pj41JjMsZS5yZWFkX3NoaWZ0KDIpXX19LDU3OntuOiJQdGdOYW1lWCIsZjpmdW5jdGlvbiBkZChlLHQscil7cmV0dXJuIDU9PXIuYmlmZj9mdW5jdGlvbiB2'@;
put 'ZChlKXt2YXIgdD1lLnJlYWRfc2hpZnQoMSk+Pj41JjMscj1lLnJlYWRfc2hpZnQoMiwiaSIpO2UubCs9ODt2YXIgYT1lLnJlYWRfc2hpZnQoMik7cmV0dXJuIGUubCs9MTIsW3QscixhXX0oZSk6W2UucmVhZF9zaGlmdCgxKT4+PjUmMyxlLnJlYWRfc2hpZnQoMiksZS5yZWFkX3NoaWZ0KDQp'@;
put 'XX19LDU4OntuOiJQdGdSZWYzZCIsZjpmdW5jdGlvbiBReChlLHQscil7dmFyIGE9KDk2JmVbZS5sXSk+PjU7ZS5sKz0xO3ZhciBuPWUucmVhZF9zaGlmdCgyKTtyZXR1cm4gciYmNT09ci5iaWZmJiYoZS5sKz0xMiksW2EsbixGZihlLDAscildfX0sNTk6e246IlB0Z0FyZWEzZCIsZjpmdW5j'@;
put 'dGlvbiBVeChlLHQscil7dmFyIGE9KDk2JmVbZS5sKytdKT4+NSxuPWUucmVhZF9zaGlmdCgyLCJpIik7aWYociYmNT09PXIuYmlmZillLmwrPTEyO3JldHVyblthLG4sVGYoZSwwLHIpXX19LDYwOntuOiJQdGdSZWZFcnIzZCIsZjpmdW5jdGlvbiBfZChlLHQscil7dmFyIGE9KDk2JmVbZS5s'@;
put 'KytdKT4+NSxuPWUucmVhZF9zaGlmdCgyKSxpPTQ7aWYocilzd2l0Y2goci5iaWZmKXtjYXNlIDU6aT0xNTticmVhaztjYXNlIDEyOmk9Nn1yZXR1cm4gZS5sKz1pLFthLG5dfX0sNjE6e246IlB0Z0FyZWFFcnIzZCIsZjpmdW5jdGlvbiBIeChlLHQscil7dmFyIGE9KDk2JmVbZS5sKytdKT4+'@;
put 'NSxuPWUucmVhZF9zaGlmdCgyKSxpPTg7aWYocilzd2l0Y2goci5iaWZmKXtjYXNlIDU6ZS5sKz0xMixpPTY7YnJlYWs7Y2FzZSAxMjppPTEyfXJldHVybiBlLmwrPWksW2Esbl19fSwyNTU6e319LFdkPXs2NDozMiw5NjozMiw2NTozMyw5NzozMyw2NjozNCw5ODozNCw2NzozNSw5OTozNSw2'@;
put 'ODozNiwxMDA6MzYsNjk6MzcsMTAxOjM3LDcwOjM4LDEwMjozOCw3MTozOSwxMDM6MzksNzI6NDAsMTA0OjQwLDczOjQxLDEwNTo0MSw3NDo0MiwxMDY6NDIsNzU6NDMsMTA3OjQzLDc2OjQ0LDEwODo0NCw3Nzo0NSwxMDk6NDUsNzg6NDYsMTEwOjQ2LDc5OjQ3LDExMTo0Nyw4ODozNCwxMjA6'@;
put 'MzQsODk6NTcsMTIxOjU3LDkwOjU4LDEyMjo1OCw5MTo1OSwxMjM6NTksOTI6NjAsMTI0OjYwLDkzOjYxLDEyNTo2MX0sSGQ9ezE6e246IlB0Z0VsZkxlbCIsZjpDZn0sMjp7bjoiUHRnRWxmUnciLGY6VWF9LDM6e246IlB0Z0VsZkNvbCIsZjpVYX0sNjp7bjoiUHRnRWxmUndWIixmOlVhfSw3'@;
put 'OntuOiJQdGdFbGZDb2xWIixmOlVhfSwxMDp7bjoiUHRnRWxmUmFkaWNhbCIsZjpVYX0sMTE6e246IlB0Z0VsZlJhZGljYWxTIixmOlJufSwxMzp7bjoiUHRnRWxmQ29sUyIsZjpSbn0sMTU6e246IlB0Z0VsZkNvbFNWIixmOlJufSwxNjp7bjoiUHRnRWxmUmFkaWNhbExlbCIsZjpDZn0sMjU6'@;
put 'e246IlB0Z0xpc3QiLGY6ZnVuY3Rpb24gTmQoZSl7ZS5sKz0yO3ZhciB0PWUucmVhZF9zaGlmdCgyKSxyPWUucmVhZF9zaGlmdCgyKSxhPWUucmVhZF9zaGlmdCg0KSxuPWUucmVhZF9zaGlmdCgyKSxpPWUucmVhZF9zaGlmdCgyKTtyZXR1cm57aXh0aTp0LGNvbHR5cGU6MyZyLHJ0OlJkW3I+'@;
put 'PjImMzFdLGlkeDphLGM6bixDOml9fX0sMjk6e246IlB0Z1N4TmFtZSIsZjpmdW5jdGlvbiBiZChlKXtyZXR1cm4gZS5sKz0yLFtlLnJlYWRfc2hpZnQoNCldfX0sMjU1Ont9fSxWZD17MDp7bjoiUHRnQXR0ck5vb3AiLGY6ZnVuY3Rpb24gVWQoZSl7cmV0dXJuIGUubCs9NCxbMCwwXX19LDE6'@;
put 'e246IlB0Z0F0dHJTZW1pIixmOmZ1bmN0aW9uIEt4KGUsdCxyKXt2YXIgYT0yNTUmZVtlLmwrMV0/MTowO3JldHVybiBlLmwrPXImJjI9PXIuYmlmZj8zOjQsW2FdfX0sMjp7bjoiUHRnQXR0cklmIixmOmZ1bmN0aW9uICR4KGUsdCxyKXt2YXIgYT0yNTUmZVtlLmwrMV0/MTowO3JldHVybiBl'@;
put 'LmwrPTIsW2EsZS5yZWFkX3NoaWZ0KHImJjI9PXIuYmlmZj8xOjIpXX19LDQ6e246IlB0Z0F0dHJDaG9vc2UiLGY6ZnVuY3Rpb24gR3goZSx0LHIpe2UubCs9Mjtmb3IodmFyIGE9ZS5yZWFkX3NoaWZ0KHImJjI9PXIuYmlmZj8xOjIpLG49W10saT0wO2k8PWE7KytpKW4ucHVzaChlLnJlYWRf'@;
put 'c2hpZnQociYmMj09ci5iaWZmPzE6MikpO3JldHVybiBufX0sODp7bjoiUHRnQXR0ckdvdG8iLGY6ZnVuY3Rpb24gengoZSx0LHIpe3ZhciBhPTI1NSZlW2UubCsxXT8xOjA7cmV0dXJuIGUubCs9MixbYSxlLnJlYWRfc2hpZnQociYmMj09ci5iaWZmPzE6MildfX0sMTY6e246IlB0Z0F0dHJT'@;
put 'dW0iLGY6ZnVuY3Rpb24gYWQoZSx0LHIpe2UubCs9ciYmMj09ci5iaWZmPzM6NH19LDMyOntuOiJQdGdBdHRyQmF4Y2VsIixmOnlmfSwzMzp7bjoiUHRnQXR0ckJheGNlbCIsZjp5Zn0sNjQ6e246IlB0Z0F0dHJTcGFjZSIsZjpmdW5jdGlvbiBZeChlKXtyZXR1cm4gZS5yZWFkX3NoaWZ0KDIp'@;
put 'LEFmKGUpfX0sNjU6e246IlB0Z0F0dHJTcGFjZVNlbWkiLGY6ZnVuY3Rpb24gSngoZSl7cmV0dXJuIGUucmVhZF9zaGlmdCgyKSxBZihlKX19LDEyODp7bjoiUHRnQXR0cklmRXJyb3IiLGY6ZnVuY3Rpb24gangoZSl7dmFyIHQ9MjU1JmVbZS5sKzFdPzE6MDtyZXR1cm4gZS5sKz0yLFt0LGUu'@;
put 'cmVhZF9zaGlmdCgyKV19fSwyNTU6e319O2Z1bmN0aW9uIFdhKGUsdCxyLGEpe2lmKGEuYmlmZjw4KXJldHVybiBwcihlLHQpO2Zvcih2YXIgbj1lLmwrdCxpPVtdLHM9MDtzIT09ci5sZW5ndGg7KytzKXN3aXRjaChyW3NdWzBdKXtjYXNlIlB0Z0FycmF5IjpyW3NdWzFdPWhkKGUsMCxhKSxp'@;
put 'LnB1c2gocltzXVsxXSk7YnJlYWs7Y2FzZSJQdGdNZW1BcmVhIjpyW3NdWzJdPXVkKGUsMCxhKSxpLnB1c2gocltzXVsyXSk7YnJlYWs7Y2FzZSJQdGdFeHAiOmEmJjEyPT1hLmJpZmYmJihyW3NdWzFdWzFdPWUucmVhZF9zaGlmdCg0KSxpLnB1c2gocltzXVsxXSkpO2JyZWFrO2Nhc2UiUHRn'@;
put 'TGlzdCI6Y2FzZSJQdGdFbGZSYWRpY2FsUyI6Y2FzZSJQdGdFbGZDb2xTIjpjYXNlIlB0Z0VsZkNvbFNWIjp0aHJvdyJVbnN1cHBvcnRlZCAiK3Jbc11bMF19cmV0dXJuIDAhPSh0PW4tZS5sKSYmaS5wdXNoKHByKGUsdCkpLGl9ZnVuY3Rpb24gSGEoZSx0LHIpe2Zvcih2YXIgbixpLGE9ZS5s'@;
put 'K3Qscz1bXTthIT1lLmw7KXQ9YS1lLmwsbj1EZltpPWVbZS5sXV18fERmW1dkW2ldXSwoMjQ9PT1pfHwyNT09PWkpJiYobj0oMjQ9PT1pP0hkOlZkKVtlW2UubCsxXV0pLG4mJm4uZj9zLnB1c2goW24ubixuLmYoZSx0LHIpXSk6cHIoZSx0KTtyZXR1cm4gc31mdW5jdGlvbiBYZChlKXtmb3Io'@;
put 'dmFyIHQ9W10scj0wO3I8ZS5sZW5ndGg7KytyKXtmb3IodmFyIGE9ZVtyXSxuPVtdLGk9MDtpPGEubGVuZ3RoOysraSl7dmFyIHM9YVtpXTtuLnB1c2gocz8yPT09c1swXT8nIicrc1sxXS5yZXBsYWNlKC8iL2csJyIiJykrJyInOnNbMV06IiIpfXQucHVzaChuLmpvaW4oIiwiKSl9cmV0dXJu'@;
put 'IHQuam9pbigiOyIpfXZhciBHZD17UHRnQWRkOiIrIixQdGdDb25jYXQ6IiYiLFB0Z0RpdjoiLyIsUHRnRXE6Ij0iLFB0Z0dlOiI+PSIsUHRnR3Q6Ij4iLFB0Z0xlOiI8PSIsUHRnTHQ6IjwiLFB0Z011bDoiKiIsUHRnTmU6Ijw+IixQdGdQb3dlcjoiXiIsUHRnU3ViOiItIn07ZnVuY3Rpb24g'@;
put 'T2YoZSx0LHIpe2lmKCFlKXJldHVybiJTSDMzVEpTRVJSMCI7aWYoci5iaWZmPjgmJighZS5YVEl8fCFlLlhUSVt0XSkpcmV0dXJuIGUuU2hlZXROYW1lc1t0XTtpZighZS5YVEkpcmV0dXJuIlNIMzNUSlNFUlI2Ijt2YXIgYT1lLlhUSVt0XTtpZihyLmJpZmY8OClyZXR1cm4gdD4xZTQmJih0'@;
put 'LT02NTUzNiksdDwwJiYodD0tdCksMD09dD8iIjplLlhUSVt0LTFdO2lmKCFhKXJldHVybiJTSDMzVEpTRVJSMSI7dmFyIG49IiI7aWYoci5iaWZmPjgpc3dpdGNoKGVbYVswXV1bMF0pe2Nhc2UgMzU3OnJldHVybiBuPS0xPT1hWzFdPyIjUkVGIjplLlNoZWV0TmFtZXNbYVsxXV0sYVsxXT09'@;
put 'YVsyXT9uOm4rIjoiK2UuU2hlZXROYW1lc1thWzJdXTtjYXNlIDM1ODpyZXR1cm4gbnVsbCE9ci5TSUQ/ZS5TaGVldE5hbWVzW3IuU0lEXToiU0gzM1RKU1NBTUUiK2VbYVswXV1bMF07ZGVmYXVsdDpyZXR1cm4iU0gzM1RKU1NSQyIrZVthWzBdXVswXX1zd2l0Y2goZVthWzBdXVswXVswXSl7'@;
put 'Y2FzZSAxMDI1OnJldHVybiBuPS0xPT1hWzFdPyIjUkVGIjplLlNoZWV0TmFtZXNbYVsxXV18fCJTSDMzVEpTRVJSMyIsYVsxXT09YVsyXT9uOm4rIjoiK2UuU2hlZXROYW1lc1thWzJdXTtjYXNlIDE0ODQ5OnJldHVybiBlW2FbMF1dLnNsaWNlKDEpLm1hcChmdW5jdGlvbihpKXtyZXR1cm4g'@;
put 'aS5OYW1lfSkuam9pbigiOzsiKTtkZWZhdWx0OnJldHVybiBlW2FbMF1dWzBdWzNdPyhuPS0xPT1hWzFdPyIjUkVGIjplW2FbMF1dWzBdWzNdW2FbMV1dfHwiU0gzM1RKU0VSUjQiLGFbMV09PWFbMl0/bjpuKyI6IitlW2FbMF1dWzBdWzNdW2FbMl1dKToiU0gzM1RKU0VSUjIifX1mdW5jdGlv'@;
put 'biBJZihlLHQscil7dmFyIGE9T2YoZSx0LHIpO3JldHVybiIjUkVGIj09YT9hOmZ1bmN0aW9uIHpkKGUsdCl7aWYoIShlfHx0JiZ0LmJpZmY8PTUmJnQuYmlmZj49MikpdGhyb3cgbmV3IEVycm9yKCJlbXB0eSBzaGVldCBuYW1lIik7cmV0dXJuL1teXHdcdTRFMDAtXHU5RkZGXHUzMDQwLVx1'@;
put 'MzBGRl0vLnRlc3QoZSk/IiciK2UrIiciOmV9KGEscil9ZnVuY3Rpb24ga3IoZSx0LHIsYSxuKXt2YXIgYyxvLGwsZCxpPW4mJm4uYmlmZnx8OCxzPXtzOntjOjAscjowfSxlOntjOjAscjowfX0sZj1bXSxoPTAseD0wLHY9IiI7aWYoIWVbMF18fCFlWzBdWzBdKXJldHVybiIiO2Zvcih2YXIg'@;
put 'dT0tMSxwPSIiLGs9MCxUPWVbMF0ubGVuZ3RoO2s8VDsrK2spe3ZhciBnPWVbMF1ba107c3dpdGNoKGdbMF0pe2Nhc2UiUHRnVW1pbnVzIjpmLnB1c2goIi0iK2YucG9wKCkpO2JyZWFrO2Nhc2UiUHRnVXBsdXMiOmYucHVzaCgiKyIrZi5wb3AoKSk7YnJlYWs7Y2FzZSJQdGdQZXJjZW50Ijpm'@;
put 'LnB1c2goZi5wb3AoKSsiJSIpO2JyZWFrO2Nhc2UiUHRnQWRkIjpjYXNlIlB0Z0NvbmNhdCI6Y2FzZSJQdGdEaXYiOmNhc2UiUHRnRXEiOmNhc2UiUHRnR2UiOmNhc2UiUHRnR3QiOmNhc2UiUHRnTGUiOmNhc2UiUHRnTHQiOmNhc2UiUHRnTXVsIjpjYXNlIlB0Z05lIjpjYXNlIlB0Z1Bvd2Vy'@;
put 'IjpjYXNlIlB0Z1N1YiI6aWYoYz1mLnBvcCgpLG89Zi5wb3AoKSx1Pj0wKXtzd2l0Y2goZVswXVt1XVsxXVswXSl7Y2FzZSAwOnA9amUoIiAiLGVbMF1bdV1bMV1bMV0pO2JyZWFrO2Nhc2UgMTpwPWplKCJcciIsZVswXVt1XVsxXVsxXSk7YnJlYWs7ZGVmYXVsdDppZihwPSIiLG4uV1RGKXRo'@;
put 'cm93IG5ldyBFcnJvcigiVW5leHBlY3RlZCBQdGdBdHRyU3BhY2VUeXBlICIrZVswXVt1XVsxXVswXSl9bys9cCx1PS0xfWYucHVzaChvK0dkW2dbMF1dK2MpO2JyZWFrO2Nhc2UiUHRnSXNlY3QiOmM9Zi5wb3AoKSxvPWYucG9wKCksZi5wdXNoKG8rIiAiK2MpO2JyZWFrO2Nhc2UiUHRnVW5p'@;
put 'b24iOmM9Zi5wb3AoKSxvPWYucG9wKCksZi5wdXNoKG8rIiwiK2MpO2JyZWFrO2Nhc2UiUHRnUmFuZ2UiOmM9Zi5wb3AoKSxvPWYucG9wKCksZi5wdXNoKG8rIjoiK2MpO2JyZWFrO2Nhc2UiUHRnQXR0ckNob29zZSI6Y2FzZSJQdGdBdHRyR290byI6Y2FzZSJQdGdBdHRySWYiOmNhc2UiUHRn'@;
put 'QXR0cklmRXJyb3IiOmNhc2UiUHRnQXR0ckJheGNlbCI6Y2FzZSJQdGdBdHRyU2VtaSI6Y2FzZSJQdGdNZW1BcmVhIjpjYXNlIlB0Z1RibCI6Y2FzZSJQdGdNZW1FcnIiOmNhc2UiUHRnTWVtQXJlYU4iOmNhc2UiUHRnTWVtTm9NZW1OIjpjYXNlIlB0Z0F0dHJOb29wIjpjYXNlIlB0Z1NoZWV0'@;
put 'IjpjYXNlIlB0Z0VuZFNoZWV0IjpjYXNlIlB0Z01lbUZ1bmMiOmNhc2UiUHRnTWVtTm9NZW0iOmJyZWFrO2Nhc2UiUHRnUmVmIjpsPUNhKGdbMV1bMV0scyxuKSxmLnB1c2goRGEobCxpKSk7YnJlYWs7Y2FzZSJQdGdSZWZOIjpsPXI/Q2EoZ1sxXVsxXSxyLG4pOmdbMV1bMV0sZi5wdXNoKERh'@;
put 'KGwsaSkpO2JyZWFrO2Nhc2UiUHRnUmVmM2QiOmg9Z1sxXVsxXSxsPUNhKGdbMV1bMl0scyxuKSx2PUlmKGEsaCxuKSxmLnB1c2godisiISIrRGEobCxpKSk7YnJlYWs7Y2FzZSJQdGdGdW5jIjpjYXNlIlB0Z0Z1bmNWYXIiOnZhciBNPWdbMV1bMF0sST1nWzFdWzFdO018fChNPTApO3ZhciB5'@;
put 'PTA9PShNJj0xMjcpP1tdOmYuc2xpY2UoLU0pO2YubGVuZ3RoLT1NLCJVc2VyIj09PUkmJihJPXkuc2hpZnQoKSksZi5wdXNoKEkrIigiK3kuam9pbigiLCIpKyIpIik7YnJlYWs7Y2FzZSJQdGdCb29sIjpmLnB1c2goZ1sxXT8iVFJVRSI6IkZBTFNFIik7YnJlYWs7Y2FzZSJQdGdJbnQiOmNh'@;
put 'c2UiUHRnRXJyIjpmLnB1c2goZ1sxXSk7YnJlYWs7Y2FzZSJQdGdOdW0iOmYucHVzaChTdHJpbmcoZ1sxXSkpO2JyZWFrO2Nhc2UiUHRnU3RyIjpmLnB1c2goJyInK2dbMV0ucmVwbGFjZSgvIi9nLCciIicpKyciJyk7YnJlYWs7Y2FzZSJQdGdBcmVhTiI6ZD1ucyhnWzFdWzFdLHI/e3M6cn06'@;
put 'cyxuKSxmLnB1c2godG4oZCxuKSk7YnJlYWs7Y2FzZSJQdGdBcmVhIjpkPW5zKGdbMV1bMV0scyxuKSxmLnB1c2godG4oZCxuKSk7YnJlYWs7Y2FzZSJQdGdBcmVhM2QiOmQ9Z1sxXVsyXSx2PUlmKGEsaD1nWzFdWzFdLG4pLGYucHVzaCh2KyIhIit0bihkLG4pKTticmVhaztjYXNlIlB0Z0F0'@;
put 'dHJTdW0iOmYucHVzaCgiU1VNKCIrZi5wb3AoKSsiKSIpO2JyZWFrO2Nhc2UiUHRnTmFtZSI6dmFyIFA9KGEubmFtZXN8fFtdKVsoeD1nWzFdWzJdKS0xXXx8KGFbMF18fFtdKVt4XSxSPVA/UC5OYW1lOiJTSDMzVEpTTkFNRSIrU3RyaW5nKHgpO1ImJiJfeGxmbi4iPT1SLnNsaWNlKDAsNikm'@;
put 'JiFuLnhsZm4mJihSPVIuc2xpY2UoNikpLGYucHVzaChSKTticmVhaztjYXNlIlB0Z05hbWVYIjp2YXIgWCxWPWdbMV1bMV07aWYoeD1nWzFdWzJdLCEobi5iaWZmPD01KSl7dmFyIGI9IiI7aWYoMTQ4NDk9PSgoYVtWXXx8W10pWzBdfHxbXSlbMF18fCgxMDI1PT0oKGFbVl18fFtdKVswXXx8'@;
put 'W10pWzBdP2FbVl1beF0mJmFbVl1beF0uaXRhYj4wJiYoYj1hLlNoZWV0TmFtZXNbYVtWXVt4XS5pdGFiLTFdKyIhIik6Yj1hLlNoZWV0TmFtZXNbeC0xXSsiISIpLGFbVl0mJmFbVl1beF0pYis9YVtWXVt4XS5OYW1lO2Vsc2UgaWYoYVswXSYmYVswXVt4XSliKz1hWzBdW3hdLk5hbWU7ZWxz'@;
put 'ZXt2YXIgZWU9KE9mKGEsVixuKXx8IiIpLnNwbGl0KCI7OyIpO2VlW3gtMV0/Yj1lZVt4LTFdOmIrPSJTSDMzVEpTRVJSWCJ9Zi5wdXNoKGIpO2JyZWFrfVY8MCYmKFY9LVYpLGFbVl0mJihYPWFbVl1beF0pLFh8fChYPXtOYW1lOiJTSDMzVEpTRVJSWSJ9KSxmLnB1c2goWC5OYW1lKTticmVh'@;
put 'aztjYXNlIlB0Z1BhcmVuIjp2YXIgbGU9IigiLHJlPSIpIjtpZih1Pj0wKXtzd2l0Y2gocD0iIixlWzBdW3VdWzFdWzBdKXtjYXNlIDI6bGU9amUoIiAiLGVbMF1bdV1bMV1bMV0pK2xlO2JyZWFrO2Nhc2UgMzpsZT1qZSgiXHIiLGVbMF1bdV1bMV1bMV0pK2xlO2JyZWFrO2Nhc2UgNDpyZT1q'@;
put 'ZSgiICIsZVswXVt1XVsxXVsxXSkrcmU7YnJlYWs7Y2FzZSA1OnJlPWplKCJcciIsZVswXVt1XVsxXVsxXSkrcmU7YnJlYWs7ZGVmYXVsdDppZihuLldURil0aHJvdyBuZXcgRXJyb3IoIlVuZXhwZWN0ZWQgUHRnQXR0clNwYWNlVHlwZSAiK2VbMF1bdV1bMV1bMF0pfXU9LTF9Zi5wdXNoKGxl'@;
put 'K2YucG9wKCkrcmUpO2JyZWFrO2Nhc2UiUHRnUmVmRXJyIjpjYXNlIlB0Z1JlZkVycjNkIjpjYXNlIlB0Z0FyZWFFcnIiOmNhc2UiUHRnQXJlYUVycjNkIjpmLnB1c2goIiNSRUYhIik7YnJlYWs7Y2FzZSJQdGdFeHAiOnZhciBkZT17YzpyLmMscjpyLnJ9O2lmKGEuc2hhcmVkZltnZShsPXtj'@;
put 'OmdbMV1bMV0scjpnWzFdWzBdfSldKXt2YXIgdWU9YS5zaGFyZWRmW2dlKGwpXTtmLnB1c2goa3IodWUsMCxkZSxhLG4pKX1lbHNle3ZhciBGZT0hMTtmb3IoYz0wO2MhPWEuYXJyYXlmLmxlbmd0aDsrK2MpaWYoIShsLmM8KG89YS5hcnJheWZbY10pWzBdLnMuY3x8bC5jPm9bMF0uZS5jfHxs'@;
put 'LnI8b1swXS5zLnJ8fGwucj5vWzBdLmUucikpe2YucHVzaChrcihvWzFdLDAsZGUsYSxuKSksRmU9ITA7YnJlYWt9RmV8fGYucHVzaChnWzFdKX1icmVhaztjYXNlIlB0Z0FycmF5IjpmLnB1c2goInsiK1hkKGdbMV0pKyJ9Iik7YnJlYWs7Y2FzZSJQdGdBdHRyU3BhY2UiOmNhc2UiUHRnQXR0'@;
put 'clNwYWNlU2VtaSI6dT1rO2JyZWFrO2Nhc2UiUHRnTWlzc0FyZyI6Zi5wdXNoKCIiKTticmVhaztjYXNlIlB0Z0xpc3QiOmYucHVzaCgiVGFibGUiK2dbMV0uaWR4KyJbIyIrZ1sxXS5ydCsiXSIpO2JyZWFrO2Nhc2UiUHRnRWxmQ29sIjpjYXNlIlB0Z0VsZkNvbFMiOmNhc2UiUHRnRWxmQ29s'@;
put 'U1YiOmNhc2UiUHRnRWxmQ29sViI6Y2FzZSJQdGdFbGZMZWwiOmNhc2UiUHRnRWxmUmFkaWNhbCI6Y2FzZSJQdGdFbGZSYWRpY2FsTGVsIjpjYXNlIlB0Z0VsZlJhZGljYWxTIjpjYXNlIlB0Z0VsZlJ3IjpjYXNlIlB0Z0VsZlJ3ViI6dGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCBFTEZz'@;
put 'Iik7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlVucmVjb2duaXplZCBGb3JtdWxhIFRva2VuOiAiK1N0cmluZyhnKSl9aWYoMyE9bi5iaWZmJiZ1Pj0wJiYtMT09WyJQdGdBdHRyU3BhY2UiLCJQdGdBdHRyU3BhY2VTZW1pIiwiUHRnQXR0ckdvdG8iXS5pbmRleE9mKGVbMF1ba11bMF0pKXt2'@;
put 'YXIgeGU9ITA7c3dpdGNoKChnPWVbMF1bdV0pWzFdWzBdKXtjYXNlIDQ6eGU9ITE7Y2FzZSAwOnA9amUoIiAiLGdbMV1bMV0pO2JyZWFrO2Nhc2UgNTp4ZT0hMTtjYXNlIDE6cD1qZSgiXHIiLGdbMV1bMV0pO2JyZWFrO2RlZmF1bHQ6aWYocD0iIixuLldURil0aHJvdyBuZXcgRXJyb3IoIlVu'@;
put 'ZXhwZWN0ZWQgUHRnQXR0clNwYWNlVHlwZSAiK2dbMV1bMF0pfWYucHVzaCgoeGU/cDoiIikrZi5wb3AoKSsoeGU/IiI6cCkpLHU9LTF9fWlmKGYubGVuZ3RoPjEmJm4uV1RGKXRocm93IG5ldyBFcnJvcigiYmFkIGZvcm11bGEgc3RhY2siKTtyZXR1cm4gZlswXX1mdW5jdGlvbiAkZChlLHQs'@;
put 'cil7dmFyIGksYT1lLmwrdCxuPTI9PXIuYmlmZj8xOjIscz1lLnJlYWRfc2hpZnQobik7aWYoNjU1MzU9PXMpcmV0dXJuW1tdLHByKGUsdC0yKV07dmFyIGY9SGEoZSxzLHIpO3JldHVybiB0IT09cytuJiYoaT1XYShlLHQtcy1uLGYscikpLGUubD1hLFtmLGldfWZ1bmN0aW9uIFlkKGUsdCxy'@;
put 'KXt2YXIgbixhPWUubCt0LGk9ZS5yZWFkX3NoaWZ0KDIpLHM9SGEoZSxpLHIpO3JldHVybiA2NTUzNT09aT9bW10scHIoZSx0LTIpXToodCE9PWkrMiYmKG49V2EoZSxhLWktMixzLHIpKSxbcyxuXSl9ZnVuY3Rpb24gTm4oZSx0LHIpe3ZhciBhPWUubCt0LG49bnQoZSk7Mj09ci5iaWZmJiYr'@;
put 'K2UubDt2YXIgaT1mdW5jdGlvbiBKZChlKXt2YXIgdDtpZig2NTUzNSE9PXV0KGUsZS5sKzYpKXJldHVybltncihlKSwibiJdO3N3aXRjaChlW2UubF0pe2Nhc2UgMDpyZXR1cm4gZS5sKz04LFsiU3RyaW5nIiwicyJdO2Nhc2UgMTpyZXR1cm4gdD0xPT09ZVtlLmwrMl0sZS5sKz04LFt0LCJi'@;
put 'Il07Y2FzZSAyOnJldHVybiB0PWVbZS5sKzJdLGUubCs9OCxbdCwiZSJdO2Nhc2UgMzpyZXR1cm4gZS5sKz04LFsiIiwicyJdfXJldHVybltdfShlKSxzPWUucmVhZF9zaGlmdCgxKTsyIT1yLmJpZmYmJihlLnJlYWRfc2hpZnQoMSksci5iaWZmPj01JiZlLnJlYWRfc2hpZnQoNCkpO3ZhciBm'@;
put 'PWZ1bmN0aW9uIGpkKGUsdCxyKXt2YXIgaSxhPWUubCt0LG49Mj09ci5iaWZmPzE6MixzPWUucmVhZF9zaGlmdChuKTtpZig2NTUzNT09cylyZXR1cm5bW10scHIoZSx0LTIpXTt2YXIgZj1IYShlLHMscik7cmV0dXJuIHQhPT1zK24mJihpPVdhKGUsdC1zLW4sZixyKSksZS5sPWEsW2YsaV19'@;
put 'KGUsYS1lLmwscik7cmV0dXJue2NlbGw6bix2YWw6aVswXSxmb3JtdWxhOmYsc2hhcmVkOnM+PjMmMSx0dDppWzFdfX1mdW5jdGlvbiBBMChlLHQscil7dmFyIGE9ZS5yZWFkX3NoaWZ0KDQpLG49SGEoZSxhLHIpLGk9ZS5yZWFkX3NoaWZ0KDQpO3JldHVybltuLGk+MD9XYShlLGksbixyKTpu'@;
put 'dWxsXX12YXIgUWQ9QTAsQzA9QTAsZXY9QTAscnY9QTAsdHY9ezA6IkJFRVAiLDE6Ik9QRU4iLDI6Ik9QRU4uTElOS1MiLDM6IkNMT1NFLkFMTCIsNDoiU0FWRSIsNToiU0FWRS5BUyIsNjoiRklMRS5ERUxFVEUiLDc6IlBBR0UuU0VUVVAiLDg6IlBSSU5UIiw5OiJQUklOVEVSLlNFVFVQIiwx'@;
put 'MDoiUVVJVCIsMTE6Ik5FVy5XSU5ET1ciLDEyOiJBUlJBTkdFLkFMTCIsMTM6IldJTkRPVy5TSVpFIiwxNDoiV0lORE9XLk1PVkUiLDE1OiJGVUxMIiwxNjoiQ0xPU0UiLDE3OiJSVU4iLDIyOiJTRVQuUFJJTlQuQVJFQSIsMjM6IlNFVC5QUklOVC5USVRMRVMiLDI0OiJTRVQuUEFHRS5CUkVB'@;
put 'SyIsMjU6IlJFTU9WRS5QQUdFLkJSRUFLIiwyNjoiRk9OVCIsMjc6IkRJU1BMQVkiLDI4OiJQUk9URUNULkRPQ1VNRU5UIiwyOToiUFJFQ0lTSU9OIiwzMDoiQTEuUjFDMSIsMzE6IkNBTENVTEFURS5OT1ciLDMyOiJDQUxDVUxBVElPTiIsMzQ6IkRBVEEuRklORCIsMzU6IkVYVFJBQ1QiLDM2'@;
put 'OiJEQVRBLkRFTEVURSIsMzc6IlNFVC5EQVRBQkFTRSIsMzg6IlNFVC5DUklURVJJQSIsMzk6IlNPUlQiLDQwOiJEQVRBLlNFUklFUyIsNDE6IlRBQkxFIiw0MjoiRk9STUFULk5VTUJFUiIsNDM6IkFMSUdOTUVOVCIsNDQ6IlNUWUxFIiw0NToiQk9SREVSIiw0NjoiQ0VMTC5QUk9URUNUSU9O'@;
put 'Iiw0NzoiQ09MVU1OLldJRFRIIiw0ODoiVU5ETyIsNDk6IkNVVCIsNTA6IkNPUFkiLDUxOiJQQVNURSIsNTI6IkNMRUFSIiw1MzoiUEFTVEUuU1BFQ0lBTCIsNTQ6IkVESVQuREVMRVRFIiw1NToiSU5TRVJUIiw1NjoiRklMTC5SSUdIVCIsNTc6IkZJTEwuRE9XTiIsNjE6IkRFRklORS5OQU1F'@;
put 'Iiw2MjoiQ1JFQVRFLk5BTUVTIiw2MzoiRk9STVVMQS5HT1RPIiw2NDoiRk9STVVMQS5GSU5EIiw2NToiU0VMRUNULkxBU1QuQ0VMTCIsNjY6IlNIT1cuQUNUSVZFLkNFTEwiLDY3OiJHQUxMRVJZLkFSRUEiLDY4OiJHQUxMRVJZLkJBUiIsNjk6IkdBTExFUlkuQ09MVU1OIiw3MDoiR0FMTEVS'@;
put 'WS5MSU5FIiw3MToiR0FMTEVSWS5QSUUiLDcyOiJHQUxMRVJZLlNDQVRURVIiLDczOiJDT01CSU5BVElPTiIsNzQ6IlBSRUZFUlJFRCIsNzU6IkFERC5PVkVSTEFZIiw3NjoiR1JJRExJTkVTIiw3NzoiU0VULlBSRUZFUlJFRCIsNzg6IkFYRVMiLDc5OiJMRUdFTkQiLDgwOiJBVFRBQ0guVEVY'@;
put 'VCIsODE6IkFERC5BUlJPVyIsODI6IlNFTEVDVC5DSEFSVCIsODM6IlNFTEVDVC5QTE9ULkFSRUEiLDg0OiJQQVRURVJOUyIsODU6Ik1BSU4uQ0hBUlQiLDg2OiJPVkVSTEFZIiw4NzoiU0NBTEUiLDg4OiJGT1JNQVQuTEVHRU5EIiw4OToiRk9STUFULlRFWFQiLDkwOiJFRElULlJFUEVBVCIs'@;
put 'OTE6IlBBUlNFIiw5MjoiSlVTVElGWSIsOTM6IkhJREUiLDk0OiJVTkhJREUiLDk1OiJXT1JLU1BBQ0UiLDk2OiJGT1JNVUxBIiw5NzoiRk9STVVMQS5GSUxMIiw5ODoiRk9STVVMQS5BUlJBWSIsOTk6IkRBVEEuRklORC5ORVhUIiwxMDA6IkRBVEEuRklORC5QUkVWIiwxMDE6IkZPUk1VTEEu'@;
put 'RklORC5ORVhUIiwxMDI6IkZPUk1VTEEuRklORC5QUkVWIiwxMDM6IkFDVElWQVRFIiwxMDQ6IkFDVElWQVRFLk5FWFQiLDEwNToiQUNUSVZBVEUuUFJFViIsMTA2OiJVTkxPQ0tFRC5ORVhUIiwxMDc6IlVOTE9DS0VELlBSRVYiLDEwODoiQ09QWS5QSUNUVVJFIiwxMDk6IlNFTEVDVCIsMTEw'@;
put 'OiJERUxFVEUuTkFNRSIsMTExOiJERUxFVEUuRk9STUFUIiwxMTI6IlZMSU5FIiwxMTM6IkhMSU5FIiwxMTQ6IlZQQUdFIiwxMTU6IkhQQUdFIiwxMTY6IlZTQ1JPTEwiLDExNzoiSFNDUk9MTCIsMTE4OiJBTEVSVCIsMTE5OiJORVciLDEyMDoiQ0FOQ0VMLkNPUFkiLDEyMToiU0hPVy5DTElQ'@;
put 'Qk9BUkQiLDEyMjoiTUVTU0FHRSIsMTI0OiJQQVNURS5MSU5LIiwxMjU6IkFQUC5BQ1RJVkFURSIsMTI2OiJERUxFVEUuQVJST1ciLDEyNzoiUk9XLkhFSUdIVCIsMTI4OiJGT1JNQVQuTU9WRSIsMTI5OiJGT1JNQVQuU0laRSIsMTMwOiJGT1JNVUxBLlJFUExBQ0UiLDEzMToiU0VORC5LRVlT'@;
put 'IiwxMzI6IlNFTEVDVC5TUEVDSUFMIiwxMzM6IkFQUExZLk5BTUVTIiwxMzQ6IlJFUExBQ0UuRk9OVCIsMTM1OiJGUkVFWkUuUEFORVMiLDEzNjoiU0hPVy5JTkZPIiwxMzc6IlNQTElUIiwxMzg6Ik9OLldJTkRPVyIsMTM5OiJPTi5EQVRBIiwxNDA6IkRJU0FCTEUuSU5QVVQiLDE0MjoiT1VU'@;
put 'TElORSIsMTQzOiJMSVNULk5BTUVTIiwxNDQ6IkZJTEUuQ0xPU0UiLDE0NToiU0FWRS5XT1JLQk9PSyIsMTQ2OiJEQVRBLkZPUk0iLDE0NzoiQ09QWS5DSEFSVCIsMTQ4OiJPTi5USU1FIiwxNDk6IldBSVQiLDE1MDoiRk9STUFULkZPTlQiLDE1MToiRklMTC5VUCIsMTUyOiJGSUxMLkxFRlQi'@;
put 'LDE1MzoiREVMRVRFLk9WRVJMQVkiLDE1NToiU0hPUlQuTUVOVVMiLDE1OToiU0VULlVQREFURS5TVEFUVVMiLDE2MToiQ09MT1IuUEFMRVRURSIsMTYyOiJERUxFVEUuU1RZTEUiLDE2MzoiV0lORE9XLlJFU1RPUkUiLDE2NDoiV0lORE9XLk1BWElNSVpFIiwxNjY6IkNIQU5HRS5MSU5LIiwx'@;
put 'Njc6IkNBTENVTEFURS5ET0NVTUVOVCIsMTY4OiJPTi5LRVkiLDE2OToiQVBQLlJFU1RPUkUiLDE3MDoiQVBQLk1PVkUiLDE3MToiQVBQLlNJWkUiLDE3MjoiQVBQLk1JTklNSVpFIiwxNzM6IkFQUC5NQVhJTUlaRSIsMTc0OiJCUklORy5UTy5GUk9OVCIsMTc1OiJTRU5ELlRPLkJBQ0siLDE4'@;
put 'NToiTUFJTi5DSEFSVC5UWVBFIiwxODY6Ik9WRVJMQVkuQ0hBUlQuVFlQRSIsMTg3OiJTRUxFQ1QuRU5EIiwxODg6Ik9QRU4uTUFJTCIsMTg5OiJTRU5ELk1BSUwiLDE5MDoiU1RBTkRBUkQuRk9OVCIsMTkxOiJDT05TT0xJREFURSIsMTkyOiJTT1JULlNQRUNJQUwiLDE5MzoiR0FMTEVSWS4z'@;
put 'RC5BUkVBIiwxOTQ6IkdBTExFUlkuM0QuQ09MVU1OIiwxOTU6IkdBTExFUlkuM0QuTElORSIsMTk2OiJHQUxMRVJZLjNELlBJRSIsMTk3OiJWSUVXLjNEIiwxOTg6IkdPQUwuU0VFSyIsMTk5OiJXT1JLR1JPVVAiLDIwMDoiRklMTC5HUk9VUCIsMjAxOiJVUERBVEUuTElOSyIsMjAyOiJQUk9N'@;
put 'T1RFIiwyMDM6IkRFTU9URSIsMjA0OiJTSE9XLkRFVEFJTCIsMjA2OiJVTkdST1VQIiwyMDc6Ik9CSkVDVC5QUk9QRVJUSUVTIiwyMDg6IlNBVkUuTkVXLk9CSkVDVCIsMjA5OiJTSEFSRSIsMjEwOiJTSEFSRS5OQU1FIiwyMTE6IkRVUExJQ0FURSIsMjEyOiJBUFBMWS5TVFlMRSIsMjEzOiJB'@;
put 'U1NJR04uVE8uT0JKRUNUIiwyMTQ6Ik9CSkVDVC5QUk9URUNUSU9OIiwyMTU6IkhJREUuT0JKRUNUIiwyMTY6IlNFVC5FWFRSQUNUIiwyMTc6IkNSRUFURS5QVUJMSVNIRVIiLDIxODoiU1VCU0NSSUJFLlRPIiwyMTk6IkFUVFJJQlVURVMiLDIyMDoiU0hPVy5UT09MQkFSIiwyMjI6IlBSSU5U'@;
put 'LlBSRVZJRVciLDIyMzoiRURJVC5DT0xPUiIsMjI0OiJTSE9XLkxFVkVMUyIsMjI1OiJGT1JNQVQuTUFJTiIsMjI2OiJGT1JNQVQuT1ZFUkxBWSIsMjI3OiJPTi5SRUNBTEMiLDIyODoiRURJVC5TRVJJRVMiLDIyOToiREVGSU5FLlNUWUxFIiwyNDA6IkxJTkUuUFJJTlQiLDI0MzoiRU5URVIu'@;
put 'REFUQSIsMjQ5OiJHQUxMRVJZLlJBREFSIiwyNTA6Ik1FUkdFLlNUWUxFUyIsMjUxOiJFRElUSU9OLk9QVElPTlMiLDI1MjoiUEFTVEUuUElDVFVSRSIsMjUzOiJQQVNURS5QSUNUVVJFLkxJTksiLDI1NDoiU1BFTExJTkciLDI1NjoiWk9PTSIsMjU5OiJJTlNFUlQuT0JKRUNUIiwyNjA6IldJ'@;
put 'TkRPVy5NSU5JTUlaRSIsMjY1OiJTT1VORC5OT1RFIiwyNjY6IlNPVU5ELlBMQVkiLDI2NzoiRk9STUFULlNIQVBFIiwyNjg6IkVYVEVORC5QT0xZR09OIiwyNjk6IkZPUk1BVC5BVVRPIiwyNzI6IkdBTExFUlkuM0QuQkFSIiwyNzM6IkdBTExFUlkuM0QuU1VSRkFDRSIsMjc0OiJGSUxMLkFV'@;
put 'VE8iLDI3NjoiQ1VTVE9NSVpFLlRPT0xCQVIiLDI3NzoiQURELlRPT0wiLDI3ODoiRURJVC5PQkpFQ1QiLDI3OToiT04uRE9VQkxFQ0xJQ0siLDI4MDoiT04uRU5UUlkiLDI4MToiV09SS0JPT0suQUREIiwyODI6IldPUktCT09LLk1PVkUiLDI4MzoiV09SS0JPT0suQ09QWSIsMjg0OiJXT1JL'@;
put 'Qk9PSy5PUFRJT05TIiwyODU6IlNBVkUuV09SS1NQQUNFIiwyODg6IkNIQVJULldJWkFSRCIsMjg5OiJERUxFVEUuVE9PTCIsMjkwOiJNT1ZFLlRPT0wiLDI5MToiV09SS0JPT0suU0VMRUNUIiwyOTI6IldPUktCT09LLkFDVElWQVRFIiwyOTM6IkFTU0lHTi5UTy5UT09MIiwyOTU6IkNPUFku'@;
put 'VE9PTCIsMjk2OiJSRVNFVC5UT09MIiwyOTc6IkNPTlNUUkFJTi5OVU1FUklDIiwyOTg6IlBBU1RFLlRPT0wiLDMwMjoiV09SS0JPT0suTkVXIiwzMDU6IlNDRU5BUklPLkNFTExTIiwzMDY6IlNDRU5BUklPLkRFTEVURSIsMzA3OiJTQ0VOQVJJTy5BREQiLDMwODoiU0NFTkFSSU8uRURJVCIs'@;
put 'MzA5OiJTQ0VOQVJJTy5TSE9XIiwzMTA6IlNDRU5BUklPLlNIT1cuTkVYVCIsMzExOiJTQ0VOQVJJTy5TVU1NQVJZIiwzMTI6IlBJVk9ULlRBQkxFLldJWkFSRCIsMzEzOiJQSVZPVC5GSUVMRC5QUk9QRVJUSUVTIiwzMTQ6IlBJVk9ULkZJRUxEIiwzMTU6IlBJVk9ULklURU0iLDMxNjoiUElW'@;
put 'T1QuQURELkZJRUxEUyIsMzE4OiJPUFRJT05TLkNBTENVTEFUSU9OIiwzMTk6Ik9QVElPTlMuRURJVCIsMzIwOiJPUFRJT05TLlZJRVciLDMyMToiQURESU4uTUFOQUdFUiIsMzIyOiJNRU5VLkVESVRPUiIsMzIzOiJBVFRBQ0guVE9PTEJBUlMiLDMyNDoiVkJBQWN0aXZhdGUiLDMyNToiT1BU'@;
put 'SU9OUy5DSEFSVCIsMzI4OiJWQkEuSU5TRVJULkZJTEUiLDMzMDoiVkJBLlBST0NFRFVSRS5ERUZJTklUSU9OIiwzMzY6IlJPVVRJTkcuU0xJUCIsMzM4OiJST1VURS5ET0NVTUVOVCIsMzM5OiJNQUlMLkxPR09OIiwzNDI6IklOU0VSVC5QSUNUVVJFIiwzNDM6IkVESVQuVE9PTCIsMzQ0OiJH'@;
put 'QUxMRVJZLkRPVUdITlVUIiwzNTA6IkNIQVJULlRSRU5EIiwzNTI6IlBJVk9ULklURU0uUFJPUEVSVElFUyIsMzU0OiJXT1JLQk9PSy5JTlNFUlQiLDM1NToiT1BUSU9OUy5UUkFOU0lUSU9OIiwzNTY6Ik9QVElPTlMuR0VORVJBTCIsMzcwOiJGSUxURVIuQURWQU5DRUQiLDM3MzoiTUFJTC5B'@;
put 'REQuTUFJTEVSIiwzNzQ6Ik1BSUwuREVMRVRFLk1BSUxFUiIsMzc1OiJNQUlMLlJFUExZIiwzNzY6Ik1BSUwuUkVQTFkuQUxMIiwzNzc6Ik1BSUwuRk9SV0FSRCIsMzc4OiJNQUlMLk5FWFQuTEVUVEVSIiwzNzk6IkRBVEEuTEFCRUwiLDM4MDoiSU5TRVJULlRJVExFIiwzODE6IkZPTlQuUFJP'@;
put 'UEVSVElFUyIsMzgyOiJNQUNSTy5PUFRJT05TIiwzODM6IldPUktCT09LLkhJREUiLDM4NDoiV09SS0JPT0suVU5ISURFIiwzODU6IldPUktCT09LLkRFTEVURSIsMzg2OiJXT1JLQk9PSy5OQU1FIiwzODg6IkdBTExFUlkuQ1VTVE9NIiwzOTA6IkFERC5DSEFSVC5BVVRPRk9STUFUIiwzOTE6'@;
put 'IkRFTEVURS5DSEFSVC5BVVRPRk9STUFUIiwzOTI6IkNIQVJULkFERC5EQVRBIiwzOTM6IkFVVE8uT1VUTElORSIsMzk0OiJUQUIuT1JERVIiLDM5NToiU0hPVy5ESUFMT0ciLDM5NjoiU0VMRUNULkFMTCIsMzk3OiJVTkdST1VQLlNIRUVUUyIsMzk4OiJTVUJUT1RBTC5DUkVBVEUiLDM5OToi'@;
put 'U1VCVE9UQUwuUkVNT1ZFIiw0MDA6IlJFTkFNRS5PQkpFQ1QiLDQxMjoiV09SS0JPT0suU0NST0xMIiw0MTM6IldPUktCT09LLk5FWFQiLDQxNDoiV09SS0JPT0suUFJFViIsNDE1OiJXT1JLQk9PSy5UQUIuU1BMSVQiLDQxNjoiRlVMTC5TQ1JFRU4iLDQxNzoiV09SS0JPT0suUFJPVEVDVCIs'@;
put 'NDIwOiJTQ1JPTExCQVIuUFJPUEVSVElFUyIsNDIxOiJQSVZPVC5TSE9XLlBBR0VTIiw0MjI6IlRFWFQuVE8uQ09MVU1OUyIsNDIzOiJGT1JNQVQuQ0hBUlRUWVBFIiw0MjQ6IkxJTksuRk9STUFUIiw0MjU6IlRSQUNFUi5ESVNQTEFZIiw0MzA6IlRSQUNFUi5OQVZJR0FURSIsNDMxOiJUUkFD'@;
put 'RVIuQ0xFQVIiLDQzMjoiVFJBQ0VSLkVSUk9SIiw0MzM6IlBJVk9ULkZJRUxELkdST1VQIiw0MzQ6IlBJVk9ULkZJRUxELlVOR1JPVVAiLDQzNToiQ0hFQ0tCT1guUFJPUEVSVElFUyIsNDM2OiJMQUJFTC5QUk9QRVJUSUVTIiw0Mzc6IkxJU1RCT1guUFJPUEVSVElFUyIsNDM4OiJFRElUQk9Y'@;
put 'LlBST1BFUlRJRVMiLDQzOToiUElWT1QuUkVGUkVTSCIsNDQwOiJMSU5LLkNPTUJPIiw0NDE6Ik9QRU4uVEVYVCIsNDQyOiJISURFLkRJQUxPRyIsNDQzOiJTRVQuRElBTE9HLkZPQ1VTIiw0NDQ6IkVOQUJMRS5PQkpFQ1QiLDQ0NToiUFVTSEJVVFRPTi5QUk9QRVJUSUVTIiw0NDY6IlNFVC5E'@;
put 'SUFMT0cuREVGQVVMVCIsNDQ3OiJGSUxURVIiLDQ0ODoiRklMVEVSLlNIT1cuQUxMIiw0NDk6IkNMRUFSLk9VVExJTkUiLDQ1MDoiRlVOQ1RJT04uV0laQVJEIiw0NTE6IkFERC5MSVNULklURU0iLDQ1MjoiU0VULkxJU1QuSVRFTSIsNDUzOiJSRU1PVkUuTElTVC5JVEVNIiw0NTQ6IlNFTEVD'@;
put 'VC5MSVNULklURU0iLDQ1NToiU0VULkNPTlRST0wuVkFMVUUiLDQ1NjoiU0FWRS5DT1BZLkFTIiw0NTg6Ik9QVElPTlMuTElTVFMuQUREIiw0NTk6Ik9QVElPTlMuTElTVFMuREVMRVRFIiw0NjA6IlNFUklFUy5BWEVTIiw0NjE6IlNFUklFUy5YIiw0NjI6IlNFUklFUy5ZIiw0NjM6IkVSUk9S'@;
put 'QkFSLlgiLDQ2NDoiRVJST1JCQVIuWSIsNDY1OiJGT1JNQVQuQ0hBUlQiLDQ2NjoiU0VSSUVTLk9SREVSIiw0Njc6Ik1BSUwuTE9HT0ZGIiw0Njg6IkNMRUFSLlJPVVRJTkcuU0xJUCIsNDY5OiJBUFAuQUNUSVZBVEUuTUlDUk9TT0ZUIiw0NzA6Ik1BSUwuRURJVC5NQUlMRVIiLDQ3MToiT04u'@;
put 'U0hFRVQiLDQ3MjoiU1RBTkRBUkQuV0lEVEgiLDQ3MzoiU0NFTkFSSU8uTUVSR0UiLDQ3NDoiU1VNTUFSWS5JTkZPIiw0NzU6IkZJTkQuRklMRSIsNDc2OiJBQ1RJVkUuQ0VMTC5GT05UIiw0Nzc6IkVOQUJMRS5USVBXSVpBUkQiLDQ3ODoiVkJBLk1BS0UuQURESU4iLDQ4MDoiSU5TRVJUREFU'@;
put 'QVRBQkxFIiw0ODE6IldPUktHUk9VUC5PUFRJT05TIiw0ODI6Ik1BSUwuU0VORC5NQUlMRVIiLDQ4NToiQVVUT0NPUlJFQ1QiLDQ4OToiUE9TVC5ET0NVTUVOVCIsNDkxOiJQSUNLTElTVCIsNDkzOiJWSUVXLlNIT1ciLDQ5NDoiVklFVy5ERUZJTkUiLDQ5NToiVklFVy5ERUxFVEUiLDUwOToi'@;
put 'U0hFRVQuQkFDS0dST1VORCIsNTEwOiJJTlNFUlQuTUFQLk9CSkVDVCIsNTExOiJPUFRJT05TLk1FTk9OTyIsNTE3OiJNU09DSEVDS1MiLDUxODoiTk9STUFMIiw1MTk6IkxBWU9VVCIsNTIwOiJSTS5QUklOVC5BUkVBIiw1MjE6IkNMRUFSLlBSSU5ULkFSRUEiLDUyMjoiQURELlBSSU5ULkFS'@;
put 'RUEiLDUyMzoiTU9WRS5CUksiLDU0NToiSElERUNVUlIuTk9URSIsNTQ2OiJISURFQUxMLk5PVEVTIiw1NDc6IkRFTEVURS5OT1RFIiw1NDg6IlRSQVZFUlNFLk5PVEVTIiw1NDk6IkFDVElWQVRFLk5PVEVTIiw2MjA6IlBST1RFQ1QuUkVWSVNJT05TIiw2MjE6IlVOUFJPVEVDVC5SRVZJU0lP'@;
put 'TlMiLDY0NzoiT1BUSU9OUy5NRSIsNjUzOiJXRUIuUFVCTElTSCIsNjY3OiJORVdXRUJRVUVSWSIsNjczOiJQSVZPVC5UQUJMRS5DSEFSVCIsNzUzOiJPUFRJT05TLlNBVkUiLDc1NToiT1BUSU9OUy5TUEVMTCIsODA4OiJISURFQUxMLklOS0FOTk9UUyJ9LFJmPXswOiJDT1VOVCIsMToiSUYi'@;
put 'LDI6IklTTkEiLDM6IklTRVJST1IiLDQ6IlNVTSIsNToiQVZFUkFHRSIsNjoiTUlOIiw3OiJNQVgiLDg6IlJPVyIsOToiQ09MVU1OIiwxMDoiTkEiLDExOiJOUFYiLDEyOiJTVERFViIsMTM6IkRPTExBUiIsMTQ6IkZJWEVEIiwxNToiU0lOIiwxNjoiQ09TIiwxNzoiVEFOIiwxODoiQVRBTiIs'@;
put 'MTk6IlBJIiwyMDoiU1FSVCIsMjE6IkVYUCIsMjI6IkxOIiwyMzoiTE9HMTAiLDI0OiJBQlMiLDI1OiJJTlQiLDI2OiJTSUdOIiwyNzoiUk9VTkQiLDI4OiJMT09LVVAiLDI5OiJJTkRFWCIsMzA6IlJFUFQiLDMxOiJNSUQiLDMyOiJMRU4iLDMzOiJWQUxVRSIsMzQ6IlRSVUUiLDM1OiJGQUxT'@;
put 'RSIsMzY6IkFORCIsMzc6Ik9SIiwzODoiTk9UIiwzOToiTU9EIiw0MDoiRENPVU5UIiw0MToiRFNVTSIsNDI6IkRBVkVSQUdFIiw0MzoiRE1JTiIsNDQ6IkRNQVgiLDQ1OiJEU1RERVYiLDQ2OiJWQVIiLDQ3OiJEVkFSIiw0ODoiVEVYVCIsNDk6IkxJTkVTVCIsNTA6IlRSRU5EIiw1MToiTE9H'@;
put 'RVNUIiw1MjoiR1JPV1RIIiw1MzoiR09UTyIsNTQ6IkhBTFQiLDU1OiJSRVRVUk4iLDU2OiJQViIsNTc6IkZWIiw1ODoiTlBFUiIsNTk6IlBNVCIsNjA6IlJBVEUiLDYxOiJNSVJSIiw2MjoiSVJSIiw2MzoiUkFORCIsNjQ6Ik1BVENIIiw2NToiREFURSIsNjY6IlRJTUUiLDY3OiJEQVkiLDY4'@;
put 'OiJNT05USCIsNjk6IllFQVIiLDcwOiJXRUVLREFZIiw3MToiSE9VUiIsNzI6Ik1JTlVURSIsNzM6IlNFQ09ORCIsNzQ6Ik5PVyIsNzU6IkFSRUFTIiw3NjoiUk9XUyIsNzc6IkNPTFVNTlMiLDc4OiJPRkZTRVQiLDc5OiJBQlNSRUYiLDgwOiJSRUxSRUYiLDgxOiJBUkdVTUVOVCIsODI6IlNF'@;
put 'QVJDSCIsODM6IlRSQU5TUE9TRSIsODQ6IkVSUk9SIiw4NToiU1RFUCIsODY6IlRZUEUiLDg3OiJFQ0hPIiw4ODoiU0VULk5BTUUiLDg5OiJDQUxMRVIiLDkwOiJERVJFRiIsOTE6IldJTkRPV1MiLDkyOiJTRVJJRVMiLDkzOiJET0NVTUVOVFMiLDk0OiJBQ1RJVkUuQ0VMTCIsOTU6IlNFTEVD'@;
put 'VElPTiIsOTY6IlJFU1VMVCIsOTc6IkFUQU4yIiw5ODoiQVNJTiIsOTk6IkFDT1MiLDEwMDoiQ0hPT1NFIiwxMDE6IkhMT09LVVAiLDEwMjoiVkxPT0tVUCIsMTAzOiJMSU5LUyIsMTA0OiJJTlBVVCIsMTA1OiJJU1JFRiIsMTA2OiJHRVQuRk9STVVMQSIsMTA3OiJHRVQuTkFNRSIsMTA4OiJT'@;
put 'RVQuVkFMVUUiLDEwOToiTE9HIiwxMTA6IkVYRUMiLDExMToiQ0hBUiIsMTEyOiJMT1dFUiIsMTEzOiJVUFBFUiIsMTE0OiJQUk9QRVIiLDExNToiTEVGVCIsMTE2OiJSSUdIVCIsMTE3OiJFWEFDVCIsMTE4OiJUUklNIiwxMTk6IlJFUExBQ0UiLDEyMDoiU1VCU1RJVFVURSIsMTIxOiJDT0RF'@;
put 'IiwxMjI6Ik5BTUVTIiwxMjM6IkRJUkVDVE9SWSIsMTI0OiJGSU5EIiwxMjU6IkNFTEwiLDEyNjoiSVNFUlIiLDEyNzoiSVNURVhUIiwxMjg6IklTTlVNQkVSIiwxMjk6IklTQkxBTksiLDEzMDoiVCIsMTMxOiJOIiwxMzI6IkZPUEVOIiwxMzM6IkZDTE9TRSIsMTM0OiJGU0laRSIsMTM1OiJG'@;
put 'UkVBRExOIiwxMzY6IkZSRUFEIiwxMzc6IkZXUklURUxOIiwxMzg6IkZXUklURSIsMTM5OiJGUE9TIiwxNDA6IkRBVEVWQUxVRSIsMTQxOiJUSU1FVkFMVUUiLDE0MjoiU0xOIiwxNDM6IlNZRCIsMTQ0OiJEREIiLDE0NToiR0VULkRFRiIsMTQ2OiJSRUZURVhUIiwxNDc6IlRFWFRSRUYiLDE0'@;
put 'ODoiSU5ESVJFQ1QiLDE0OToiUkVHSVNURVIiLDE1MDoiQ0FMTCIsMTUxOiJBREQuQkFSIiwxNTI6IkFERC5NRU5VIiwxNTM6IkFERC5DT01NQU5EIiwxNTQ6IkVOQUJMRS5DT01NQU5EIiwxNTU6IkNIRUNLLkNPTU1BTkQiLDE1NjoiUkVOQU1FLkNPTU1BTkQiLDE1NzoiU0hPVy5CQVIiLDE1'@;
put 'ODoiREVMRVRFLk1FTlUiLDE1OToiREVMRVRFLkNPTU1BTkQiLDE2MDoiR0VULkNIQVJULklURU0iLDE2MToiRElBTE9HLkJPWCIsMTYyOiJDTEVBTiIsMTYzOiJNREVURVJNIiwxNjQ6Ik1JTlZFUlNFIiwxNjU6Ik1NVUxUIiwxNjY6IkZJTEVTIiwxNjc6IklQTVQiLDE2ODoiUFBNVCIsMTY5'@;
put 'OiJDT1VOVEEiLDE3MDoiQ0FOQ0VMLktFWSIsMTcxOiJGT1IiLDE3MjoiV0hJTEUiLDE3MzoiQlJFQUsiLDE3NDoiTkVYVCIsMTc1OiJJTklUSUFURSIsMTc2OiJSRVFVRVNUIiwxNzc6IlBPS0UiLDE3ODoiRVhFQ1VURSIsMTc5OiJURVJNSU5BVEUiLDE4MDoiUkVTVEFSVCIsMTgxOiJIRUxQ'@;
put 'IiwxODI6IkdFVC5CQVIiLDE4MzoiUFJPRFVDVCIsMTg0OiJGQUNUIiwxODU6IkdFVC5DRUxMIiwxODY6IkdFVC5XT1JLU1BBQ0UiLDE4NzoiR0VULldJTkRPVyIsMTg4OiJHRVQuRE9DVU1FTlQiLDE4OToiRFBST0RVQ1QiLDE5MDoiSVNOT05URVhUIiwxOTE6IkdFVC5OT1RFIiwxOTI6Ik5P'@;
put 'VEUiLDE5MzoiU1RERVZQIiwxOTQ6IlZBUlAiLDE5NToiRFNUREVWUCIsMTk2OiJEVkFSUCIsMTk3OiJUUlVOQyIsMTk4OiJJU0xPR0lDQUwiLDE5OToiRENPVU5UQSIsMjAwOiJERUxFVEUuQkFSIiwyMDE6IlVOUkVHSVNURVIiLDIwNDoiVVNET0xMQVIiLDIwNToiRklOREIiLDIwNjoiU0VB'@;
put 'UkNIQiIsMjA3OiJSRVBMQUNFQiIsMjA4OiJMRUZUQiIsMjA5OiJSSUdIVEIiLDIxMDoiTUlEQiIsMjExOiJMRU5CIiwyMTI6IlJPVU5EVVAiLDIxMzoiUk9VTkRET1dOIiwyMTQ6IkFTQyIsMjE1OiJEQkNTIiwyMTY6IlJBTksiLDIxOToiQUREUkVTUyIsMjIwOiJEQVlTMzYwIiwyMjE6IlRP'@;
put 'REFZIiwyMjI6IlZEQiIsMjIzOiJFTFNFIiwyMjQ6IkVMU0UuSUYiLDIyNToiRU5ELklGIiwyMjY6IkZPUi5DRUxMIiwyMjc6Ik1FRElBTiIsMjI4OiJTVU1QUk9EVUNUIiwyMjk6IlNJTkgiLDIzMDoiQ09TSCIsMjMxOiJUQU5IIiwyMzI6IkFTSU5IIiwyMzM6IkFDT1NIIiwyMzQ6IkFUQU5I'@;
put 'IiwyMzU6IkRHRVQiLDIzNjoiQ1JFQVRFLk9CSkVDVCIsMjM3OiJWT0xBVElMRSIsMjM4OiJMQVNULkVSUk9SIiwyMzk6IkNVU1RPTS5VTkRPIiwyNDA6IkNVU1RPTS5SRVBFQVQiLDI0MToiRk9STVVMQS5DT05WRVJUIiwyNDI6IkdFVC5MSU5LLklORk8iLDI0MzoiVEVYVC5CT1giLDI0NDoi'@;
put 'SU5GTyIsMjQ1OiJHUk9VUCIsMjQ2OiJHRVQuT0JKRUNUIiwyNDc6IkRCIiwyNDg6IlBBVVNFIiwyNTE6IlJFU1VNRSIsMjUyOiJGUkVRVUVOQ1kiLDI1MzoiQURELlRPT0xCQVIiLDI1NDoiREVMRVRFLlRPT0xCQVIiLDI1NToiVXNlciIsMjU2OiJSRVNFVC5UT09MQkFSIiwyNTc6IkVWQUxV'@;
put 'QVRFIiwyNTg6IkdFVC5UT09MQkFSIiwyNTk6IkdFVC5UT09MIiwyNjA6IlNQRUxMSU5HLkNIRUNLIiwyNjE6IkVSUk9SLlRZUEUiLDI2MjoiQVBQLlRJVExFIiwyNjM6IldJTkRPVy5USVRMRSIsMjY0OiJTQVZFLlRPT0xCQVIiLDI2NToiRU5BQkxFLlRPT0wiLDI2NjoiUFJFU1MuVE9PTCIs'@;
put 'MjY3OiJSRUdJU1RFUi5JRCIsMjY4OiJHRVQuV09SS0JPT0siLDI2OToiQVZFREVWIiwyNzA6IkJFVEFESVNUIiwyNzE6IkdBTU1BTE4iLDI3MjoiQkVUQUlOViIsMjczOiJCSU5PTURJU1QiLDI3NDoiQ0hJRElTVCIsMjc1OiJDSElJTlYiLDI3NjoiQ09NQklOIiwyNzc6IkNPTkZJREVOQ0Ui'@;
put 'LDI3ODoiQ1JJVEJJTk9NIiwyNzk6IkVWRU4iLDI4MDoiRVhQT05ESVNUIiwyODE6IkZESVNUIiwyODI6IkZJTlYiLDI4MzoiRklTSEVSIiwyODQ6IkZJU0hFUklOViIsMjg1OiJGTE9PUiIsMjg2OiJHQU1NQURJU1QiLDI4NzoiR0FNTUFJTlYiLDI4ODoiQ0VJTElORyIsMjg5OiJIWVBHRU9N'@;
put 'RElTVCIsMjkwOiJMT0dOT1JNRElTVCIsMjkxOiJMT0dJTlYiLDI5MjoiTkVHQklOT01ESVNUIiwyOTM6Ik5PUk1ESVNUIiwyOTQ6Ik5PUk1TRElTVCIsMjk1OiJOT1JNSU5WIiwyOTY6Ik5PUk1TSU5WIiwyOTc6IlNUQU5EQVJESVpFIiwyOTg6Ik9ERCIsMjk5OiJQRVJNVVQiLDMwMDoiUE9J'@;
put 'U1NPTiIsMzAxOiJURElTVCIsMzAyOiJXRUlCVUxMIiwzMDM6IlNVTVhNWTIiLDMwNDoiU1VNWDJNWTIiLDMwNToiU1VNWDJQWTIiLDMwNjoiQ0hJVEVTVCIsMzA3OiJDT1JSRUwiLDMwODoiQ09WQVIiLDMwOToiRk9SRUNBU1QiLDMxMDoiRlRFU1QiLDMxMToiSU5URVJDRVBUIiwzMTI6IlBF'@;
put 'QVJTT04iLDMxMzoiUlNRIiwzMTQ6IlNURVlYIiwzMTU6IlNMT1BFIiwzMTY6IlRURVNUIiwzMTc6IlBST0IiLDMxODoiREVWU1EiLDMxOToiR0VPTUVBTiIsMzIwOiJIQVJNRUFOIiwzMjE6IlNVTVNRIiwzMjI6IktVUlQiLDMyMzoiU0tFVyIsMzI0OiJaVEVTVCIsMzI1OiJMQVJHRSIsMzI2'@;
put 'OiJTTUFMTCIsMzI3OiJRVUFSVElMRSIsMzI4OiJQRVJDRU5USUxFIiwzMjk6IlBFUkNFTlRSQU5LIiwzMzA6Ik1PREUiLDMzMToiVFJJTU1FQU4iLDMzMjoiVElOViIsMzM0OiJNT1ZJRS5DT01NQU5EIiwzMzU6IkdFVC5NT1ZJRSIsMzM2OiJDT05DQVRFTkFURSIsMzM3OiJQT1dFUiIsMzM4'@;
put 'OiJQSVZPVC5BREQuREFUQSIsMzM5OiJHRVQuUElWT1QuVEFCTEUiLDM0MDoiR0VULlBJVk9ULkZJRUxEIiwzNDE6IkdFVC5QSVZPVC5JVEVNIiwzNDI6IlJBRElBTlMiLDM0MzoiREVHUkVFUyIsMzQ0OiJTVUJUT1RBTCIsMzQ1OiJTVU1JRiIsMzQ2OiJDT1VOVElGIiwzNDc6IkNPVU5UQkxB'@;
put 'TksiLDM0ODoiU0NFTkFSSU8uR0VUIiwzNDk6Ik9QVElPTlMuTElTVFMuR0VUIiwzNTA6IklTUE1UIiwzNTE6IkRBVEVESUYiLDM1MjoiREFURVNUUklORyIsMzUzOiJOVU1CRVJTVFJJTkciLDM1NDoiUk9NQU4iLDM1NToiT1BFTi5ESUFMT0ciLDM1NjoiU0FWRS5ESUFMT0ciLDM1NzoiVklF'@;
put 'Vy5HRVQiLDM1ODoiR0VUUElWT1REQVRBIiwzNTk6IkhZUEVSTElOSyIsMzYwOiJQSE9ORVRJQyIsMzYxOiJBVkVSQUdFQSIsMzYyOiJNQVhBIiwzNjM6Ik1JTkEiLDM2NDoiU1RERVZQQSIsMzY1OiJWQVJQQSIsMzY2OiJTVERFVkEiLDM2NzoiVkFSQSIsMzY4OiJCQUhUVEVYVCIsMzY5OiJU'@;
put 'SEFJREFZT0ZXRUVLIiwzNzA6IlRIQUlESUdJVCIsMzcxOiJUSEFJTU9OVEhPRllFQVIiLDM3MjoiVEhBSU5VTVNPVU5EIiwzNzM6IlRIQUlOVU1TVFJJTkciLDM3NDoiVEhBSVNUUklOR0xFTkdUSCIsMzc1OiJJU1RIQUlESUdJVCIsMzc2OiJST1VOREJBSFRET1dOIiwzNzc6IlJPVU5EQkFI'@;
put 'VFVQIiwzNzg6IlRIQUlZRUFSIiwzNzk6IlJURCIsMzgwOiJDVUJFVkFMVUUiLDM4MToiQ1VCRU1FTUJFUiIsMzgyOiJDVUJFTUVNQkVSUFJPUEVSVFkiLDM4MzoiQ1VCRVJBTktFRE1FTUJFUiIsMzg0OiJIRVgyQklOIiwzODU6IkhFWDJERUMiLDM4NjoiSEVYMk9DVCIsMzg3OiJERUMyQklO'@;
put 'IiwzODg6IkRFQzJIRVgiLDM4OToiREVDMk9DVCIsMzkwOiJPQ1QyQklOIiwzOTE6Ik9DVDJIRVgiLDM5MjoiT0NUMkRFQyIsMzkzOiJCSU4yREVDIiwzOTQ6IkJJTjJPQ1QiLDM5NToiQklOMkhFWCIsMzk2OiJJTVNVQiIsMzk3OiJJTURJViIsMzk4OiJJTVBPV0VSIiwzOTk6IklNQUJTIiw0'@;
put 'MDA6IklNU1FSVCIsNDAxOiJJTUxOIiw0MDI6IklNTE9HMiIsNDAzOiJJTUxPRzEwIiw0MDQ6IklNU0lOIiw0MDU6IklNQ09TIiw0MDY6IklNRVhQIiw0MDc6IklNQVJHVU1FTlQiLDQwODoiSU1DT05KVUdBVEUiLDQwOToiSU1BR0lOQVJZIiw0MTA6IklNUkVBTCIsNDExOiJDT01QTEVYIiw0'@;
put 'MTI6IklNU1VNIiw0MTM6IklNUFJPRFVDVCIsNDE0OiJTRVJJRVNTVU0iLDQxNToiRkFDVERPVUJMRSIsNDE2OiJTUVJUUEkiLDQxNzoiUVVPVElFTlQiLDQxODoiREVMVEEiLDQxOToiR0VTVEVQIiw0MjA6IklTRVZFTiIsNDIxOiJJU09ERCIsNDIyOiJNUk9VTkQiLDQyMzoiRVJGIiw0MjQ6'@;
put 'IkVSRkMiLDQyNToiQkVTU0VMSiIsNDI2OiJCRVNTRUxLIiw0Mjc6IkJFU1NFTFkiLDQyODoiQkVTU0VMSSIsNDI5OiJYSVJSIiw0MzA6IlhOUFYiLDQzMToiUFJJQ0VNQVQiLDQzMjoiWUlFTERNQVQiLDQzMzoiSU5UUkFURSIsNDM0OiJSRUNFSVZFRCIsNDM1OiJESVNDIiw0MzY6IlBSSUNF'@;
put 'RElTQyIsNDM3OiJZSUVMRERJU0MiLDQzODoiVEJJTExFUSIsNDM5OiJUQklMTFBSSUNFIiw0NDA6IlRCSUxMWUlFTEQiLDQ0MToiUFJJQ0UiLDQ0MjoiWUlFTEQiLDQ0MzoiRE9MTEFSREUiLDQ0NDoiRE9MTEFSRlIiLDQ0NToiTk9NSU5BTCIsNDQ2OiJFRkZFQ1QiLDQ0NzoiQ1VNUFJJTkMi'@;
put 'LDQ0ODoiQ1VNSVBNVCIsNDQ5OiJFREFURSIsNDUwOiJFT01PTlRIIiw0NTE6IllFQVJGUkFDIiw0NTI6IkNPVVBEQVlCUyIsNDUzOiJDT1VQREFZUyIsNDU0OiJDT1VQREFZU05DIiw0NTU6IkNPVVBOQ0QiLDQ1NjoiQ09VUE5VTSIsNDU3OiJDT1VQUENEIiw0NTg6IkRVUkFUSU9OIiw0NTk6'@;
put 'Ik1EVVJBVElPTiIsNDYwOiJPRERMUFJJQ0UiLDQ2MToiT0RETFlJRUxEIiw0NjI6Ik9EREZQUklDRSIsNDYzOiJPRERGWUlFTEQiLDQ2NDoiUkFOREJFVFdFRU4iLDQ2NToiV0VFS05VTSIsNDY2OiJBTU9SREVHUkMiLDQ2NzoiQU1PUkxJTkMiLDQ2ODoiQ09OVkVSVCIsNzI0OiJTSEVFVEpT'@;
put 'Iiw0Njk6IkFDQ1JJTlQiLDQ3MDoiQUNDUklOVE0iLDQ3MToiV09SS0RBWSIsNDcyOiJORVRXT1JLREFZUyIsNDczOiJHQ0QiLDQ3NDoiTVVMVElOT01JQUwiLDQ3NToiTENNIiw0NzY6IkZWU0NIRURVTEUiLDQ3NzoiQ1VCRUtQSU1FTUJFUiIsNDc4OiJDVUJFU0VUIiw0Nzk6IkNVQkVTRVRD'@;
put 'T1VOVCIsNDgwOiJJRkVSUk9SIiw0ODE6IkNPVU5USUZTIiw0ODI6IlNVTUlGUyIsNDgzOiJBVkVSQUdFSUYiLDQ4NDoiQVZFUkFHRUlGUyJ9LGF2PXsyOjEsMzoxLDEwOjAsMTU6MSwxNjoxLDE3OjEsMTg6MSwxOTowLDIwOjEsMjE6MSwyMjoxLDIzOjEsMjQ6MSwyNToxLDI2OjEsMjc6Miwz'@;
put 'MDoyLDMxOjMsMzI6MSwzMzoxLDM0OjAsMzU6MCwzODoxLDM5OjIsNDA6Myw0MTozLDQyOjMsNDM6Myw0NDozLDQ1OjMsNDc6Myw0ODoyLDUzOjEsNjE6Myw2MzowLDY1OjMsNjY6Myw2NzoxLDY4OjEsNjk6MSw3MDoxLDcxOjEsNzI6MSw3MzoxLDc0OjAsNzU6MSw3NjoxLDc3OjEsNzk6Miw4'@;
put 'MDoyLDgzOjEsODU6MCw4NjoxLDg5OjAsOTA6MSw5NDowLDk1OjAsOTc6Miw5ODoxLDk5OjEsMTAxOjMsMTAyOjMsMTA1OjEsMTA2OjEsMTA4OjIsMTExOjEsMTEyOjEsMTEzOjEsMTE0OjEsMTE3OjIsMTE4OjEsMTE5OjQsMTIxOjEsMTI2OjEsMTI3OjEsMTI4OjEsMTI5OjEsMTMwOjEsMTMx'@;
put 'OjEsMTMzOjEsMTM0OjEsMTM1OjEsMTM2OjIsMTM3OjIsMTM4OjIsMTQwOjEsMTQxOjEsMTQyOjMsMTQzOjQsMTQ0OjQsMTYxOjEsMTYyOjEsMTYzOjEsMTY0OjEsMTY1OjIsMTcyOjEsMTc1OjIsMTc2OjIsMTc3OjMsMTc4OjIsMTc5OjEsMTg0OjEsMTg2OjEsMTg5OjMsMTkwOjEsMTk1OjMs'@;
put 'MTk2OjMsMTk3OjEsMTk4OjEsMTk5OjMsMjAxOjEsMjA3OjQsMjEwOjMsMjExOjEsMjEyOjIsMjEzOjIsMjE0OjEsMjE1OjEsMjI1OjAsMjI5OjEsMjMwOjEsMjMxOjEsMjMyOjEsMjMzOjEsMjM0OjEsMjM1OjMsMjQ0OjEsMjQ3OjQsMjUyOjIsMjU3OjEsMjYxOjEsMjcxOjEsMjczOjQsMjc0'@;
put 'OjIsMjc1OjIsMjc2OjIsMjc3OjMsMjc4OjMsMjc5OjEsMjgwOjMsMjgxOjMsMjgyOjMsMjgzOjEsMjg0OjEsMjg1OjIsMjg2OjQsMjg3OjMsMjg4OjIsMjg5OjQsMjkwOjMsMjkxOjMsMjkyOjMsMjkzOjQsMjk0OjEsMjk1OjMsMjk2OjEsMjk3OjMsMjk4OjEsMjk5OjIsMzAwOjMsMzAxOjMs'@;
put 'MzAyOjQsMzAzOjIsMzA0OjIsMzA1OjIsMzA2OjIsMzA3OjIsMzA4OjIsMzA5OjMsMzEwOjIsMzExOjIsMzEyOjIsMzEzOjIsMzE0OjIsMzE1OjIsMzE2OjQsMzI1OjIsMzI2OjIsMzI3OjIsMzI4OjIsMzMxOjIsMzMyOjIsMzM3OjIsMzQyOjEsMzQzOjEsMzQ2OjIsMzQ3OjEsMzUwOjQsMzUx'@;
put 'OjMsMzUyOjEsMzUzOjIsMzYwOjEsMzY4OjEsMzY5OjEsMzcwOjEsMzcxOjEsMzcyOjEsMzczOjEsMzc0OjEsMzc1OjEsMzc2OjEsMzc3OjEsMzc4OjEsMzgyOjMsMzg1OjEsMzkyOjEsMzkzOjEsMzk2OjIsMzk3OjIsMzk4OjIsMzk5OjEsNDAwOjEsNDAxOjEsNDAyOjEsNDAzOjEsNDA0OjEs'@;
put 'NDA1OjEsNDA2OjEsNDA3OjEsNDA4OjEsNDA5OjEsNDEwOjEsNDE0OjQsNDE1OjEsNDE2OjEsNDE3OjIsNDIwOjEsNDIxOjEsNDIyOjIsNDI0OjEsNDI1OjIsNDI2OjIsNDI3OjIsNDI4OjIsNDMwOjMsNDM4OjMsNDM5OjMsNDQwOjMsNDQzOjIsNDQ0OjIsNDQ1OjIsNDQ2OjIsNDQ3OjYsNDQ4'@;
put 'OjYsNDQ5OjIsNDUwOjIsNDY0OjIsNDY4OjMsNDc2OjIsNDc5OjEsNDgwOjIsNjU1MzU6MH07ZnVuY3Rpb24gTmYoZSl7cmV0dXJuIm9mOiI9PWUuc2xpY2UoMCwzKSYmKGU9ZS5zbGljZSgzKSksNjE9PWUuY2hhckNvZGVBdCgwKSYmNjE9PShlPWUuc2xpY2UoMSkpLmNoYXJDb2RlQXQoMCkm'@;
put 'JihlPWUuc2xpY2UoMSkpLChlPShlPShlPWUucmVwbGFjZSgvQ09NXC5NSUNST1NPRlRcLi9nLCIiKSkucmVwbGFjZSgvXFsoKD86XC5bQS1aXStbMC05XSspKD86OlwuW0EtWl0rWzAtOV0rKT8pXF0vZyxmdW5jdGlvbih0LHIpe3JldHVybiByLnJlcGxhY2UoL1wuL2csIiIpfSkpLnJlcGxh'@;
put 'Y2UoL1xbLigjW0EtWl0qWz8hXSlcXS9nLCIkMSIpKS5yZXBsYWNlKC9bO35dL2csIiwiKS5yZXBsYWNlKC9cfC9nLCI7Iil9ZnVuY3Rpb24gYm4oZSl7dmFyIHQ9ZS5zcGxpdCgiOiIpO3JldHVyblt0WzBdLnNwbGl0KCIuIilbMF0sdFswXS5zcGxpdCgiLiIpWzFdKyh0Lmxlbmd0aD4xPyI6'@;
put 'IisodFsxXS5zcGxpdCgiLiIpWzFdfHx0WzFdLnNwbGl0KCIuIilbMF0pOiIiKV19dmFyIFZhPXt9LGhhPXt9O2Z1bmN0aW9uIFl0KGUsdCl7aWYoZSl7dmFyIHI9Wy43LC43LC43NSwuNzUsLjMsLjNdOyJ4bG1sIj09dCYmKHI9WzEsMSwxLDEsLjUsLjVdKSxudWxsPT1lLmxlZnQmJihlLmxl'@;
put 'ZnQ9clswXSksbnVsbD09ZS5yaWdodCYmKGUucmlnaHQ9clsxXSksbnVsbD09ZS50b3AmJihlLnRvcD1yWzJdKSxudWxsPT1lLmJvdHRvbSYmKGUuYm90dG9tPXJbM10pLG51bGw9PWUuaGVhZGVyJiYoZS5oZWFkZXI9cls0XSksbnVsbD09ZS5mb290ZXImJihlLmZvb3Rlcj1yWzVdKX19ZnVu'@;
put 'Y3Rpb24gYmYoZSx0LHIsYSxuLGkpe3RyeXthLmNlbGxORiYmKGUuej1wZVt0XSl9Y2F0Y2goZil7aWYoYS5XVEYpdGhyb3cgZn1pZigieiIhPT1lLnR8fGEuY2VsbFN0eWxlcyl7aWYoImQiPT09ZS50JiYic3RyaW5nIj09dHlwZW9mIGUudiYmKGUudj1YZShlLnYpKSwoIWF8fCExIT09YS5j'@;
put 'ZWxsVGV4dCkmJiJ6IiE9PWUudCl0cnl7aWYobnVsbD09cGVbdF0mJmV0KGFvW3RdfHwiR2VuZXJhbCIsdCksImUiPT09ZS50KWUudz1lLnd8fHh0W2Uudl07ZWxzZSBpZigwPT09dClpZigibiI9PT1lLnQpZS53PSgwfGUudik9PT1lLnY/ZS52LnRvU3RyaW5nKDEwKTprYShlLnYpO2Vsc2Ug'@;
put 'aWYoImQiPT09ZS50KXt2YXIgcz1pcihlLnYpO2Uudz0oMHxzKT09PXM/cy50b1N0cmluZygxMCk6a2Eocyl9ZWxzZXtpZih2b2lkIDA9PT1lLnYpcmV0dXJuIiI7ZS53PU50KGUudixoYSl9ZWxzZSBlLnc9UnIodCwiZCI9PT1lLnQ/aXIoZS52KTplLnYsaGEpfWNhdGNoKGYpe2lmKGEuV1RG'@;
put 'KXRocm93IGZ9aWYoYS5jZWxsU3R5bGVzJiZudWxsIT1yKXRyeXtlLnM9aS5GaWxsc1tyXSxlLnMuZmdDb2xvciYmZS5zLmZnQ29sb3IudGhlbWUmJiFlLnMuZmdDb2xvci5yZ2ImJihlLnMuZmdDb2xvci5yZ2I9VDAobi50aGVtZUVsZW1lbnRzLmNsclNjaGVtZVtlLnMuZmdDb2xvci50aGVt'@;
put 'ZV0ucmdiLGUucy5mZ0NvbG9yLnRpbnR8fDApLGEuV1RGJiYoZS5zLmZnQ29sb3IucmF3X3JnYj1uLnRoZW1lRWxlbWVudHMuY2xyU2NoZW1lW2Uucy5mZ0NvbG9yLnRoZW1lXS5yZ2IpKSxlLnMuYmdDb2xvciYmZS5zLmJnQ29sb3IudGhlbWUmJihlLnMuYmdDb2xvci5yZ2I9VDAobi50aGVt'@;
put 'ZUVsZW1lbnRzLmNsclNjaGVtZVtlLnMuYmdDb2xvci50aGVtZV0ucmdiLGUucy5iZ0NvbG9yLnRpbnR8fDApLGEuV1RGJiYoZS5zLmJnQ29sb3IucmF3X3JnYj1uLnRoZW1lRWxlbWVudHMuY2xyU2NoZW1lW2Uucy5iZ0NvbG9yLnRoZW1lXS5yZ2IpKX1jYXRjaChmKXtpZihhLldURiYmaS5G'@;
put 'aWxscyl0aHJvdyBmfX19dmFyIHN2PS88KD86XHc6KT9tZXJnZUNlbGwgcmVmPSJbQS1aMC05Ol0rIlxzKltcL10/Pi9nLGZ2PS88KD86XHcrOik/c2hlZXREYXRhW14+XSo+KFtcc1xTXSopPFwvKD86XHcrOik/c2hlZXREYXRhPi8sY3Y9LzwoPzpcdzopP2h5cGVybGluayBbXj5dKj4vZ20s'@;
put 'b3Y9LyIoXHcqOlx3KikiLyxsdj0vPCg/Olx3Oik/Y29sXGJbXj5dKltcL10/Pi9nLHV2PS88KD86XHc6KT9hdXRvRmlsdGVyW14+XSooW1wvXXw+KFtcc1xTXSopPFwvKD86XHc6KT9hdXRvRmlsdGVyKT4vZyxodj0vPCg/Olx3Oik/cGFnZU1hcmdpbnNbXj5dKlwvPi9nLFBmPS88KD86XHc6'@;
put 'KT9zaGVldFByXGIoPzpbXj5hLXpdW14+XSopP1wvPi8seHY9LzwoPzpcdzopP3NoZWV0UHJbXj5dKig/OltcL118PihbXHNcU10qKTxcLyg/Olx3Oik/c2hlZXRQcik+Lyxkdj0vPCg/Olx3Oik/c2hlZXRWaWV3c1tePl0qKD86W1wvXXw+KFtcc1xTXSopPFwvKD86XHc6KT9zaGVldFZpZXdz'@;
put 'KT4vO2Z1bmN0aW9uIExuKGUsdCxyLGEpe3ZhciBuPW1lKGUpO3IuU2hlZXRzW2FdfHwoci5TaGVldHNbYV09e30pLG4uY29kZU5hbWUmJihyLlNoZWV0c1thXS5Db2RlTmFtZT1JZShCZShuLmNvZGVOYW1lKSkpfXZhciBEdj0vPCg/Olx3Oik/c2hlZXRWaWV3KD86W14+YS16XVtePl0qKT9c'@;
put 'Lz8+LyxOdj1mdW5jdGlvbigpe3ZhciBlPS88KD86XHcrOik/Y1sgXC8+XS8sdD0vPFwvKD86XHcrOik/cm93Pi8scj0vcj1bIiddKFteIiddKilbIiddLyxhPS88KD86XHcrOik/aXM+KFtcU1xzXSo/KTxcLyg/Olx3KzopP2lzPi8sbj0vcmVmPVsiJ10oW14iJ10qKVsiJ10vLGk9RmEoInYi'@;
put 'KSxzPUZhKCJmIik7cmV0dXJuIGZ1bmN0aW9uKGMsbyxsLGgseCxkKXtmb3IodmFyIEkseSxWLFgscmUsdj0wLHU9IiIscD1bXSxrPVtdLFQ9MCxnPTAsTj0wLE09IiIsUD0wLFI9MCxiPTAsZWU9MCxsZT1BcnJheS5pc0FycmF5KGQuQ2VsbFhmKSxkZT1bXSx1ZT1bXSxGZT1BcnJheS5pc0Fy'@;
put 'cmF5KG8pLGNlPVtdLHhlPXt9LEs9ITEsQz0hIWwuc2hlZXRTdHVicyxVPWMuc3BsaXQodCksTz0wLEQ9VS5sZW5ndGg7TyE9RDsrK08pe3ZhciBqPSh1PVVbT10udHJpbSgpKS5sZW5ndGg7aWYoMCE9PWope3ZhciBzZT0wO2U6Zm9yKHY9MDt2PGo7Kyt2KXN3aXRjaCh1W3ZdKXtjYXNlIj4i'@;
put 'OmlmKCIvIiE9dVt2LTFdKXsrK3Y7YnJlYWsgZX1pZihsJiZsLmNlbGxTdHlsZXMpe2lmKFA9bnVsbCE9KHk9bWUodS5zbGljZShzZSx2KSwhMCkpLnI/cGFyc2VJbnQoeS5yLDEwKTpQKzEsUj0tMSxsLnNoZWV0Um93cyYmbC5zaGVldFJvd3M8UCljb250aW51ZTt4ZT17fSxLPSExLHkuaHQm'@;
put 'JihLPSEwLHhlLmhwdD1wYXJzZUZsb2F0KHkuaHQpLHhlLmhweD1vYSh4ZS5ocHQpKSwiMSI9PXkuaGlkZGVuJiYoSz0hMCx4ZS5oaWRkZW49ITApLG51bGwhPXkub3V0bGluZUxldmVsJiYoSz0hMCx4ZS5sZXZlbD0reS5vdXRsaW5lTGV2ZWwpLEsmJihjZVtQLTFdPXhlKX1icmVhaztjYXNl'@;
put 'IjwiOnNlPXZ9aWYoc2U+PXYpYnJlYWs7aWYoUD1udWxsIT0oeT1tZSh1LnNsaWNlKHNlLHYpLCEwKSkucj9wYXJzZUludCh5LnIsMTApOlArMSxSPS0xLCEobC5zaGVldFJvd3MmJmwuc2hlZXRSb3dzPFApKXtoLnMucj5QLTEmJihoLnMucj1QLTEpLGguZS5yPFAtMSYmKGguZS5yPVAtMSks'@;
put 'bCYmbC5jZWxsU3R5bGVzJiYoeGU9e30sSz0hMSx5Lmh0JiYoSz0hMCx4ZS5ocHQ9cGFyc2VGbG9hdCh5Lmh0KSx4ZS5ocHg9b2EoeGUuaHB0KSksIjEiPT15LmhpZGRlbiYmKEs9ITAseGUuaGlkZGVuPSEwKSxudWxsIT15Lm91dGxpbmVMZXZlbCYmKEs9ITAseGUubGV2ZWw9K3kub3V0bGlu'@;
put 'ZUxldmVsKSxLJiYoY2VbUC0xXT14ZSkpLHA9dS5zbGljZSh2KS5zcGxpdChlKTtmb3IodmFyIFo9MDtaIT1wLmxlbmd0aCYmIjwiPT1wW1pdLnRyaW0oKS5jaGFyQXQoMCk7KytaKTtmb3IocD1wLnNsaWNlKFopLHY9MDt2IT1wLmxlbmd0aDsrK3YpaWYoMCE9PSh1PXBbdl0udHJpbSgpKS5s'@;
put 'ZW5ndGgpe2lmKGs9dS5tYXRjaChyKSxUPXYsZz0wLE49MCx1PSI8YyAiKygiPCI9PXUuc2xpY2UoMCwxKT8iPiI6IiIpK3UsbnVsbCE9ayYmMj09PWsubGVuZ3RoKXtmb3IoVD0wLE09a1sxXSxnPTA7ZyE9TS5sZW5ndGgmJiEoKE49TS5jaGFyQ29kZUF0KGcpLTY0KTwxfHxOPjI2KTsrK2cp'@;
put 'VD0yNipUK047Uj0tLVR9ZWxzZSsrUjtmb3IoZz0wO2chPXUubGVuZ3RoJiY2MiE9PXUuY2hhckNvZGVBdChnKTsrK2cpO2lmKCsrZywoeT1tZSh1LnNsaWNlKDAsZyksITApKS5yfHwoeS5yPWdlKHtyOlAtMSxjOlJ9KSksST17dDoiIn0sbnVsbCE9KGs9KE09dS5zbGljZShnKSkubWF0Y2go'@;
put 'aSkpJiYiIiE9PWtbMV0mJihJLnY9SWUoa1sxXSkpLGwuY2VsbEZvcm11bGEpe2lmKG51bGwhPShrPU0ubWF0Y2gocykpJiYiIiE9PWtbMV0pe2lmKEkuZj1JZShCZShrWzFdKSkucmVwbGFjZSgvXHJcbi9nLCJcbiIpLGwueGxmbnx8KEkuZj1FZihJLmYpKSxrWzBdLmluZGV4T2YoJ3Q9ImFy'@;
put 'cmF5IicpPi0xKUkuRj0oTS5tYXRjaChuKXx8W10pWzFdLEkuRi5pbmRleE9mKCI6Iik+LTEmJmRlLnB1c2goW0RlKEkuRiksSS5GXSk7ZWxzZSBpZihrWzBdLmluZGV4T2YoJ3Q9InNoYXJlZCInKT4tMSl7WD1tZShrWzBdKTt2YXIgUT1JZShCZShrWzFdKSk7bC54bGZufHwoUT1FZihRKSks'@;
put 'dWVbcGFyc2VJbnQoWC5zaSwxMCldPVtYLFEseS5yXX19ZWxzZShrPU0ubWF0Y2goLzxmW14+XSpcLz4vKSkmJnVlWyhYPW1lKGtbMF0pKS5zaV0mJihJLmY9SXgodWVbWC5zaV1bMV0sdWVbWC5zaV1bMl0seS5yKSk7dmFyIFk9R2UoeS5yKTtmb3IoZz0wO2c8ZGUubGVuZ3RoOysrZylZLnI+'@;
put 'PWRlW2ddWzBdLnMuciYmWS5yPD1kZVtnXVswXS5lLnImJlkuYz49ZGVbZ11bMF0ucy5jJiZZLmM8PWRlW2ddWzBdLmUuYyYmKEkuRj1kZVtnXVsxXSl9aWYobnVsbD09eS50JiZ2b2lkIDA9PT1JLnYpaWYoSS5mfHxJLkYpSS52PTAsSS50PSJuIjtlbHNle2lmKCFDKWNvbnRpbnVlO0kudD0i'@;
put 'eiJ9ZWxzZSBJLnQ9eS50fHwibiI7c3dpdGNoKGgucy5jPlImJihoLnMuYz1SKSxoLmUuYzxSJiYoaC5lLmM9UiksSS50KXtjYXNlIm4iOmlmKCIiPT1JLnZ8fG51bGw9PUkudil7aWYoIUMpY29udGludWU7SS50PSJ6In1lbHNlIEkudj1wYXJzZUZsb2F0KEkudik7YnJlYWs7Y2FzZSJzIjpp'@;
put 'Zih0eXBlb2YgSS52PiJ1Iil7aWYoIUMpY29udGludWU7SS50PSJ6In1lbHNlIFY9VmFbcGFyc2VJbnQoSS52LDEwKV0sSS52PVYudCxJLnI9Vi5yLGwuY2VsbEhUTUwmJihJLmg9Vi5oKTticmVhaztjYXNlInN0ciI6SS50PSJzIixJLnY9bnVsbCE9SS52P0JlKEkudik6IiIsbC5jZWxsSFRN'@;
put 'TCYmKEkuaD0kMChJLnYpKTticmVhaztjYXNlImlubGluZVN0ciI6az1NLm1hdGNoKGEpLEkudD0icyIsbnVsbCE9ayYmKFY9U24oa1sxXSkpPyhJLnY9Vi50LGwuY2VsbEhUTUwmJihJLmg9Vi5oKSk6SS52PSIiO2JyZWFrO2Nhc2UiYiI6SS52PVdlKEkudik7YnJlYWs7Y2FzZSJkIjpsLmNl'@;
put 'bGxEYXRlcz9JLnY9WGUoSS52LDEpOihJLnY9aXIoWGUoSS52LDEpKSxJLnQ9Im4iKTticmVhaztjYXNlImUiOighbHx8ITEhPT1sLmNlbGxUZXh0KSYmKEkudz1JLnYpLEkudj1kc1tJLnZdfWlmKGI9ZWU9MCxyZT1udWxsLGxlJiZ2b2lkIDAhPT15LnMmJm51bGwhPShyZT1kLkNlbGxYZlt5'@;
put 'LnNdKSYmKG51bGwhPXJlLm51bUZtdElkJiYoYj1yZS5udW1GbXRJZCksbC5jZWxsU3R5bGVzJiZudWxsIT1yZS5maWxsSWQmJihlZT1yZS5maWxsSWQpKSxiZihJLGIsZWUsbCx4LGQpLGwuY2VsbERhdGVzJiZsZSYmIm4iPT1JLnQmJmJ0KHBlW2JdKSYmKEkudD0iZCIsSS52PW8wKEkudikp'@;
put 'LHkuY20mJmwueGxtZXRhKXt2YXIgRWU9KGwueGxtZXRhLkNlbGx8fFtdKVsreS5jbS0xXTtFZSYmIlhMREFQUiI9PUVlLnR5cGUmJihJLkQ9ITApfWlmKEZlKXt2YXIgQT1HZSh5LnIpO29bQS5yXXx8KG9bQS5yXT1bXSksb1tBLnJdW0EuY109SX1lbHNlIG9beS5yXT1JfX19fWNlLmxlbmd0'@;
put 'aD4wJiYob1siIXJvd3MiXT1jZSl9fSgpLE12PVd0O2Z1bmN0aW9uIEJmKGUpe3JldHVybltNdChlKSxncihlKSwibiJdfXZhciBrMj1XdCxNZj1bImxlZnQiLCJyaWdodCIsInRvcCIsImJvdHRvbSIsImhlYWRlciIsImZvb3RlciJdO3ZhciBCbj1bWyJhbGxvd1JlZnJlc2hRdWVyeSIsITEs'@;
put 'ImJvb2wiXSxbImF1dG9Db21wcmVzc1BpY3R1cmVzIiwhMCwiYm9vbCJdLFsiYmFja3VwRmlsZSIsITEsImJvb2wiXSxbImNoZWNrQ29tcGF0aWJpbGl0eSIsITEsImJvb2wiXSxbIkNvZGVOYW1lIiwiIl0sWyJkYXRlMTkwNCIsITEsImJvb2wiXSxbImRlZmF1bHRUaGVtZVZlcnNpb24iLDAs'@;
put 'ImludCJdLFsiZmlsdGVyUHJpdmFjeSIsITEsImJvb2wiXSxbImhpZGVQaXZvdEZpZWxkTGlzdCIsITEsImJvb2wiXSxbInByb21wdGVkU29sdXRpb25zIiwhMSwiYm9vbCJdLFsicHVibGlzaEl0ZW1zIiwhMSwiYm9vbCJdLFsicmVmcmVzaEFsbENvbm5lY3Rpb25zIiwhMSwiYm9vbCJdLFsi'@;
put 'c2F2ZUV4dGVybmFsTGlua1ZhbHVlcyIsITAsImJvb2wiXSxbInNob3dCb3JkZXJVbnNlbGVjdGVkVGFibGVzIiwhMCwiYm9vbCJdLFsic2hvd0lua0Fubm90YXRpb24iLCEwLCJib29sIl0sWyJzaG93T2JqZWN0cyIsImFsbCJdLFsic2hvd1Bpdm90Q2hhcnRGaWx0ZXIiLCExLCJib29sIl0s'@;
put 'WyJ1cGRhdGVMaW5rcyIsInVzZXJTZXQiXV0sYXA9W1siYWN0aXZlVGFiIiwwLCJpbnQiXSxbImF1dG9GaWx0ZXJEYXRlR3JvdXBpbmciLCEwLCJib29sIl0sWyJmaXJzdFNoZWV0IiwwLCJpbnQiXSxbIm1pbmltaXplZCIsITEsImJvb2wiXSxbInNob3dIb3Jpem9udGFsU2Nyb2xsIiwhMCwi'@;
put 'Ym9vbCJdLFsic2hvd1NoZWV0VGFicyIsITAsImJvb2wiXSxbInNob3dWZXJ0aWNhbFNjcm9sbCIsITAsImJvb2wiXSxbInRhYlJhdGlvIiw2MDAsImludCJdLFsidmlzaWJpbGl0eSIsInZpc2libGUiXV0sbnA9W10saXA9W1siY2FsY0NvbXBsZXRlZCIsInRydWUiXSxbImNhbGNNb2RlIiwi'@;
put 'YXV0byJdLFsiY2FsY09uU2F2ZSIsInRydWUiXSxbImNvbmN1cnJlbnRDYWxjIiwidHJ1ZSJdLFsiZnVsbENhbGNPbkxvYWQiLCJmYWxzZSJdLFsiZnVsbFByZWNpc2lvbiIsInRydWUiXSxbIml0ZXJhdGUiLCJmYWxzZSJdLFsiaXRlcmF0ZUNvdW50IiwiMTAwIl0sWyJpdGVyYXRlRGVsdGEi'@;
put 'LCIwLjAwMSJdLFsicmVmTW9kZSIsIkExIl1dO2Z1bmN0aW9uIFVmKGUsdCl7Zm9yKHZhciByPTA7ciE9ZS5sZW5ndGg7KytyKWZvcih2YXIgYT1lW3JdLG49MDtuIT10Lmxlbmd0aDsrK24pe3ZhciBpPXRbbl07aWYobnVsbD09YVtpWzBdXSlhW2lbMF1dPWlbMV07ZWxzZSBzd2l0Y2goaVsy'@;
put 'XSl7Y2FzZSJib29sIjoic3RyaW5nIj09dHlwZW9mIGFbaVswXV0mJihhW2lbMF1dPVdlKGFbaVswXV0pKTticmVhaztjYXNlImludCI6InN0cmluZyI9PXR5cGVvZiBhW2lbMF1dJiYoYVtpWzBdXT1wYXJzZUludChhW2lbMF1dLDEwKSl9fX1mdW5jdGlvbiBXZihlLHQpe2Zvcih2YXIgcj0w'@;
put 'O3IhPXQubGVuZ3RoOysrcil7dmFyIGE9dFtyXTtpZihudWxsPT1lW2FbMF1dKWVbYVswXV09YVsxXTtlbHNlIHN3aXRjaChhWzJdKXtjYXNlImJvb2wiOiJzdHJpbmciPT10eXBlb2YgZVthWzBdXSYmKGVbYVswXV09V2UoZVthWzBdXSkpO2JyZWFrO2Nhc2UiaW50Ijoic3RyaW5nIj09dHlw'@;
put 'ZW9mIGVbYVswXV0mJihlW2FbMF1dPXBhcnNlSW50KGVbYVswXV0sMTApKX19fWZ1bmN0aW9uIEhmKGUpe1dmKGUuV0JQcm9wcyxCbiksV2YoZS5DYWxjUHIsaXApLFVmKGUuV0JWaWV3LGFwKSxVZihlLlNoZWV0cyxucCksaGEuZGF0ZTE5MDQ9V2UoZS5XQlByb3BzLmRhdGUxOTA0KX12YXIg'@;
put 'ZnA9Il1bKj8vXFwiLnNwbGl0KCIiKTt2YXIgb3A9Lzxcdys6d29ya2Jvb2svO2Z1bmN0aW9uIHZwKGUsdCl7dmFyIHI9e307cmV0dXJuIGUucmVhZF9zaGlmdCg0KSxyLkFyY2hJRD1lLnJlYWRfc2hpZnQoNCksZS5sKz10LTgscn1mdW5jdGlvbiBTcChlLHQscixhLG4saSxzLGYpe3JldHVy'@;
put 'biIuYmluIj09PXQuc2xpY2UoLTQpP2Z1bmN0aW9uIE0yKGUsdCxyLGEsbixpLHMpe2lmKCFlKXJldHVybiBlO3ZhciBmPXR8fHt9O2F8fChhPXsiIWlkIjp7fX0pLG51bGwhPXplJiZudWxsPT1mLmRlbnNlJiYoZi5kZW5zZT16ZSk7dmFyIG8sdix1LHAsayxULGcsTixNLEksYz1mLmRlbnNl'@;
put 'P1tdOnt9LGw9e3M6e3I6MmU2LGM6MmU2fSxlOntyOjAsYzowfX0saD1bXSx4PSExLGQ9ITEseT1bXTtmLmJpZmY9MTIsZlsiIXJvdyJdPTA7dmFyIFA9MCxSPSExLFY9W10sWD17fSxiPWYuc3VwYm9va3N8fG4uc3VwYm9va3N8fFtbXV07aWYoYi5zaGFyZWRmPVgsYi5hcnJheWY9VixiLlNo'@;
put 'ZWV0TmFtZXM9bi5TaGVldE5hbWVzfHxuLlNoZWV0cy5tYXAoZnVuY3Rpb24oeGUpe3JldHVybiB4ZS5uYW1lfSksIWYuc3VwYm9va3MmJihmLnN1cGJvb2tzPWIsbi5OYW1lcykpZm9yKHZhciBlZT0wO2VlPG4uTmFtZXMubGVuZ3RoOysrZWUpYlswXVtlZSsxXT1uLk5hbWVzW2VlXTt2YXIg'@;
put 'dWUsRmUsbGU9W10scmU9W10sZGU9ITE7aWYoJGFbMTZdPXtuOiJCcnRTaG9ydFJlYWwiLGY6QmZ9LGh0KGUsZnVuY3Rpb24oSyxDLFUpe2lmKCFkKXN3aXRjaChVKXtjYXNlIDE0ODpvPUs7YnJlYWs7Y2FzZSAwOnY9SyxmLnNoZWV0Um93cyYmZi5zaGVldFJvd3M8PXYuciYmKGQ9ITApLE09'@;
put 'S2Uoaz12LnIpLGZbIiFyb3ciXT12LnIsKEsuaGlkZGVufHxLLmhwdHx8bnVsbCE9Sy5sZXZlbCkmJihLLmhwdCYmKEsuaHB4PW9hKEsuaHB0KSkscmVbSy5yXT1LKTticmVhaztjYXNlIDI6Y2FzZSAzOmNhc2UgNDpjYXNlIDU6Y2FzZSA2OmNhc2UgNzpjYXNlIDg6Y2FzZSA5OmNhc2UgMTA6'@;
put 'Y2FzZSAxMTpjYXNlIDEzOmNhc2UgMTQ6Y2FzZSAxNTpjYXNlIDE2OmNhc2UgMTc6Y2FzZSAxODpjYXNlIDYyOnN3aXRjaCh1PXt0OktbMl19LEtbMl0pe2Nhc2UibiI6dS52PUtbMV07YnJlYWs7Y2FzZSJzIjp1LnY9KE49VmFbS1sxXV0pLnQsdS5yPU4ucjticmVhaztjYXNlImIiOnUudj0h'@;
put 'IUtbMV07YnJlYWs7Y2FzZSJlIjp1LnY9S1sxXSwhMSE9PWYuY2VsbFRleHQmJih1Lnc9eHRbdS52XSk7YnJlYWs7Y2FzZSJzdHIiOnUudD0icyIsdS52PUtbMV07YnJlYWs7Y2FzZSJpcyI6dS50PSJzIix1LnY9S1sxXS50fWlmKChwPXMuQ2VsbFhmW0tbMF0uaVN0eWxlUmVmXSkmJmJmKHUs'@;
put 'cC5udW1GbXRJZCxudWxsLGYsaSxzKSxUPS0xPT1LWzBdLmM/VCsxOktbMF0uYyxmLmRlbnNlPyhjW2tdfHwoY1trXT1bXSksY1trXVtUXT11KTpjW0hlKFQpK01dPXUsZi5jZWxsRm9ybXVsYSl7Zm9yKFI9ITEsUD0wO1A8Vi5sZW5ndGg7KytQKXt2YXIgTz1WW1BdO3Yucj49T1swXS5zLnIm'@;
put 'JnYucjw9T1swXS5lLnImJlQ+PU9bMF0ucy5jJiZUPD1PWzBdLmUuYyYmKHUuRj13ZShPWzBdKSxSPSEwKX0hUiYmSy5sZW5ndGg+MyYmKHUuZj1LWzNdKX1pZihsLnMucj52LnImJihsLnMucj12LnIpLGwucy5jPlQmJihsLnMuYz1UKSxsLmUucjx2LnImJihsLmUucj12LnIpLGwuZS5jPFQm'@;
put 'JihsLmUuYz1UKSxmLmNlbGxEYXRlcyYmcCYmIm4iPT11LnQmJmJ0KHBlW3AubnVtRm10SWRdKSl7dmFyIEQ9a3QodS52KTtEJiYodS50PSJkIix1LnY9bmV3IERhdGUoRC55LEQubS0xLEQuZCxELkgsRC5NLEQuUyxELnUpKX11ZSYmKCJYTERBUFIiPT11ZS50eXBlJiYodS5EPSEwKSx1ZT12'@;
put 'b2lkIDApLEZlJiYoRmU9dm9pZCAwKTticmVhaztjYXNlIDE6Y2FzZSAxMjppZighZi5zaGVldFN0dWJzfHx4KWJyZWFrO3U9e3Q6InoiLHY6dm9pZCAwfSxUPS0xPT1LWzBdLmM/VCsxOktbMF0uYyxmLmRlbnNlPyhjW2tdfHwoY1trXT1bXSksY1trXVtUXT11KTpjW0hlKFQpK01dPXUsbC5z'@;
put 'LnI+di5yJiYobC5zLnI9di5yKSxsLnMuYz5UJiYobC5zLmM9VCksbC5lLnI8di5yJiYobC5lLnI9di5yKSxsLmUuYzxUJiYobC5lLmM9VCksdWUmJigiWExEQVBSIj09dWUudHlwZSYmKHUuRD0hMCksdWU9dm9pZCAwKSxGZSYmKEZlPXZvaWQgMCk7YnJlYWs7Y2FzZSAxNzY6eS5wdXNoKEsp'@;
put 'O2JyZWFrO2Nhc2UgNDk6dWU9KChmLnhsbWV0YXx8e30pLkNlbGx8fFtdKVtLLTFdO2JyZWFrO2Nhc2UgNDk0OnZhciBqPWFbIiFpZCJdW0sucmVsSWRdO2ZvcihqPyhLLlRhcmdldD1qLlRhcmdldCxLLmxvYyYmKEsuVGFyZ2V0Kz0iIyIrSy5sb2MpLEsuUmVsPWopOiIiPT1LLnJlbElkJiYo'@;
put 'Sy5UYXJnZXQ9IiMiK0subG9jKSxrPUsucmZ4LnMucjtrPD1LLnJmeC5lLnI7KytrKWZvcihUPUsucmZ4LnMuYztUPD1LLnJmeC5lLmM7KytUKWYuZGVuc2U/KGNba118fChjW2tdPVtdKSxjW2tdW1RdfHwoY1trXVtUXT17dDoieiIsdjp2b2lkIDB9KSxjW2tdW1RdLmw9Syk6KGc9Z2Uoe2M6'@;
put 'VCxyOmt9KSxjW2ddfHwoY1tnXT17dDoieiIsdjp2b2lkIDB9KSxjW2ddLmw9Syk7YnJlYWs7Y2FzZSA0MjY6aWYoIWYuY2VsbEZvcm11bGEpYnJlYWs7Vi5wdXNoKEspLChJPWYuZGVuc2U/Y1trXVtUXTpjW0hlKFQpK01dKS5mPWtyKEtbMV0sMCx7cjp2LnIsYzpUfSxiLGYpLEkuRj13ZShL'@;
put 'WzBdKTticmVhaztjYXNlIDQyNzppZighZi5jZWxsRm9ybXVsYSlicmVhaztYW2dlKEtbMF0ucyldPUtbMV0sKEk9Zi5kZW5zZT9jW2tdW1RdOmNbSGUoVCkrTV0pLmY9a3IoS1sxXSwwLHtyOnYucixjOlR9LGIsZik7YnJlYWs7Y2FzZSA2MDppZighZi5jZWxsU3R5bGVzKWJyZWFrO2Zvcig7'@;
put 'Sy5lPj1LLnM7KWxlW0suZS0tXT17d2lkdGg6Sy53LzI1NixoaWRkZW46ISEoMSZLLmZsYWdzKSxsZXZlbDpLLmxldmVsfSxkZXx8KGRlPSEwLEFuKEsudy8yNTYpKSxLdChsZVtLLmUrMV0pO2JyZWFrO2Nhc2UgMTYxOmNbIiFhdXRvZmlsdGVyIl09e3JlZjp3ZShLKX07YnJlYWs7Y2FzZSA0'@;
put 'NzY6Y1siIW1hcmdpbnMiXT1LO2JyZWFrO2Nhc2UgMTQ3Om4uU2hlZXRzW3JdfHwobi5TaGVldHNbcl09e30pLEsubmFtZSYmKG4uU2hlZXRzW3JdLkNvZGVOYW1lPUsubmFtZSksKEsuYWJvdmV8fEsubGVmdCkmJihjWyIhb3V0bGluZSJdPXthYm92ZTpLLmFib3ZlLGxlZnQ6Sy5sZWZ0fSk7'@;
put 'YnJlYWs7Y2FzZSAxMzc6bi5WaWV3c3x8KG4uVmlld3M9W3t9XSksbi5WaWV3c1swXXx8KG4uVmlld3NbMF09e30pLEsuUlRMJiYobi5WaWV3c1swXS5SVEw9ITApO2JyZWFrO2Nhc2UgNDg1OmNhc2UgNjQ6Y2FzZSAxMDUzOmNhc2UgMTUxOmNhc2UgMTUyOmNhc2UgMTc1OmNhc2UgNjQ0OmNh'@;
put 'c2UgNjI1OmNhc2UgNTYyOmNhc2UgMzk2OmNhc2UgMTExMjpjYXNlIDExNDY6Y2FzZSA0NzE6Y2FzZSAxMDUwOmNhc2UgNjQ5OmNhc2UgMTEwNTpjYXNlIDU4OTpjYXNlIDYwNzpjYXNlIDU2NDpjYXNlIDEwNTU6Y2FzZSAxNjg6Y2FzZSAxNzQ6Y2FzZSAxMTgwOmNhc2UgNDk5OmNhc2UgNTA3'@;
put 'OmNhc2UgNTUwOmNhc2UgMTcxOmNhc2UgMTY3OmNhc2UgMTE3NzpjYXNlIDE2OTpjYXNlIDExODE6Y2FzZSA1NTE6Y2FzZSA1NTI6Y2FzZSA2NjE6Y2FzZSA2Mzk6Y2FzZSA0Nzg6Y2FzZSA1Mzc6Y2FzZSA0Nzc6Y2FzZSA1MzY6Y2FzZSAxMTAzOmNhc2UgNjgwOmNhc2UgMTEwNDpjYXNlIDEw'@;
put 'MjQ6Y2FzZSA2NjM6Y2FzZSA1MzU6Y2FzZSA2Nzg6Y2FzZSA1MDQ6Y2FzZSAxMDQzOmNhc2UgNDI4OmNhc2UgMTcwOmNhc2UgMzA3MjpjYXNlIDUwOmNhc2UgMjA3MDpjYXNlIDEwNDU6YnJlYWs7Y2FzZSAzNTp4PSEwO2JyZWFrO2Nhc2UgMzY6eD0hMTticmVhaztjYXNlIDM3OmgucHVzaChV'@;
put 'KSx4PSEwO2JyZWFrO2Nhc2UgMzg6aC5wb3AoKSx4PSExO2JyZWFrO2RlZmF1bHQ6aWYoIUMuVCYmKCF4fHxmLldURikpdGhyb3cgbmV3IEVycm9yKCJVbmV4cGVjdGVkIHJlY29yZCAweCIrVS50b1N0cmluZygxNikpfX0sZiksZGVsZXRlIGYuc3VwYm9va3MsZGVsZXRlIGZbIiFyb3ciXSwh'@;
put 'Y1siIXJlZiJdJiYobC5zLnI8MmU2fHxvJiYoby5lLnI+MHx8by5lLmM+MHx8by5zLnI+MHx8by5zLmM+MCkpJiYoY1siIXJlZiJdPXdlKG98fGwpKSxmLnNoZWV0Um93cyYmY1siIXJlZiJdKXt2YXIgY2U9RGUoY1siIXJlZiJdKTtmLnNoZWV0Um93czw9K2NlLmUuciYmKGNlLmUucj1mLnNo'@;
put 'ZWV0Um93cy0xLGNlLmUucj5sLmUuciYmKGNlLmUucj1sLmUuciksY2UuZS5yPGNlLnMuciYmKGNlLnMucj1jZS5lLnIpLGNlLmUuYz5sLmUuYyYmKGNlLmUuYz1sLmUuYyksY2UuZS5jPGNlLnMuYyYmKGNlLnMuYz1jZS5lLmMpLGNbIiFmdWxscmVmIl09Y1siIXJlZiJdLGNbIiFyZWYiXT13'@;
put 'ZShjZSkpfXJldHVybiB5Lmxlbmd0aD4wJiYoY1siIW1lcmdlcyJdPXkpLGxlLmxlbmd0aD4wJiYoY1siIWNvbHMiXT1sZSkscmUubGVuZ3RoPjAmJihjWyIhcm93cyJdPXJlKSxjfShlLGEscixuLGkscyxmKTpmdW5jdGlvbiB2dihlLHQscixhLG4saSxzKXtpZighZSlyZXR1cm4gZTthfHwo'@;
put 'YT17IiFpZCI6e319KSxudWxsIT16ZSYmbnVsbD09dC5kZW5zZSYmKHQuZGVuc2U9emUpO3ZhciBmPXQuZGVuc2U/W106e30sYz17czp7cjoyZTYsYzoyZTZ9LGU6e3I6MCxjOjB9fSxvPSIiLGw9IiIsaD1lLm1hdGNoKGZ2KTtoPyhvPWUuc2xpY2UoMCxoLmluZGV4KSxsPWUuc2xpY2UoaC5p'@;
put 'bmRleCtoWzBdLmxlbmd0aCkpOm89bD1lO3ZhciB4PW8ubWF0Y2goUGYpO3g/TG4oeFswXSwwLG4scik6KHg9by5tYXRjaCh4dikpJiZmdW5jdGlvbiBtdihlLHQscixhLG4pe0xuKGUuc2xpY2UoMCxlLmluZGV4T2YoIj4iKSksMCxhLG4pfSh4WzBdLDAsMCxuLHIpO3ZhciBkPShvLm1hdGNo'@;
put 'KC88KD86XHcqOik/ZGltZW5zaW9uLyl8fHtpbmRleDotMX0pLmluZGV4O2lmKGQ+MCl7dmFyIHY9by5zbGljZShkLGQrNTApLm1hdGNoKG92KTt2JiZmdW5jdGlvbiBpdihlLHQpe3ZhciByPURlKHQpO3Iucy5yPD1yLmUuciYmci5zLmM8PXIuZS5jJiZyLnMucj49MCYmci5zLmM+PTAmJihl'@;
put 'WyIhcmVmIl09d2UocikpfShmLHZbMV0pfXZhciB1PW8ubWF0Y2goZHYpO3UmJnVbMV0mJmZ1bmN0aW9uIE92KGUsdCl7dC5WaWV3c3x8KHQuVmlld3M9W3t9XSksKGUubWF0Y2goRHYpfHxbXSkuZm9yRWFjaChmdW5jdGlvbihyLGEpe3ZhciBuPW1lKHIpO3QuVmlld3NbYV18fCh0LlZpZXdz'@;
put 'W2FdPXt9KSwrbi56b29tU2NhbGUmJih0LlZpZXdzW2FdLnpvb209K24uem9vbVNjYWxlKSxXZShuLnJpZ2h0VG9MZWZ0KSYmKHQuVmlld3NbYV0uUlRMPSEwKX0pfSh1WzFdLG4pO3ZhciBwPVtdO2lmKHQuY2VsbFN0eWxlcyl7dmFyIGs9by5tYXRjaChsdik7ayYmZnVuY3Rpb24gRnYoZSx0'@;
put 'KXtmb3IodmFyIHI9ITEsYT0wO2EhPXQubGVuZ3RoOysrYSl7dmFyIG49bWUodFthXSwhMCk7bi5oaWRkZW4mJihuLmhpZGRlbj1XZShuLmhpZGRlbikpO3ZhciBpPXBhcnNlSW50KG4ubWluLDEwKS0xLHM9cGFyc2VJbnQobi5tYXgsMTApLTE7Zm9yKG4ub3V0bGluZUxldmVsJiYobi5sZXZl'@;
put 'bD0rbi5vdXRsaW5lTGV2ZWx8fDApLGRlbGV0ZSBuLm1pbixkZWxldGUgbi5tYXgsbi53aWR0aD0rbi53aWR0aCwhciYmbi53aWR0aCYmKHI9ITAsQW4obi53aWR0aCkpLEt0KG4pO2k8PXM7KWVbaSsrXT1NZShuKX19KHAsayl9aCYmTnYoaFsxXSxmLHQsYyxpLHMpO3ZhciBUPWwubWF0Y2go'@;
put 'dXYpO1QmJihmWyIhYXV0b2ZpbHRlciJdPWZ1bmN0aW9uIEF2KGUpe3JldHVybntyZWY6KGUubWF0Y2goL3JlZj0iKFteIl0qKSIvKXx8W10pWzFdfX0oVFswXSkpO3ZhciBnPVtdLE49bC5tYXRjaChzdik7aWYoTilmb3IoZD0wO2QhPU4ubGVuZ3RoOysrZClnW2RdPURlKE5bZF0uc2xpY2Uo'@;
put 'TltkXS5pbmRleE9mKCciJykrMSkpO3ZhciBNPWwubWF0Y2goY3YpO00mJmZ1bmN0aW9uIEV2KGUsdCxyKXtmb3IodmFyIGE9QXJyYXkuaXNBcnJheShlKSxuPTA7biE9dC5sZW5ndGg7KytuKXt2YXIgaT1tZShCZSh0W25dKSwhMCk7aWYoIWkucmVmKXJldHVybjt2YXIgcz0oKHJ8fHt9KVsi'@;
put 'IWlkIl18fFtdKVtpLmlkXTtzPyhpLlRhcmdldD1zLlRhcmdldCxpLmxvY2F0aW9uJiYoaS5UYXJnZXQrPSIjIitJZShpLmxvY2F0aW9uKSkpOihpLlRhcmdldD0iIyIrSWUoaS5sb2NhdGlvbikscz17VGFyZ2V0OmkuVGFyZ2V0LFRhcmdldE1vZGU6IkludGVybmFsIn0pLGkuUmVsPXMsaS50'@;
put 'b29sdGlwJiYoaS5Ub29sdGlwPWkudG9vbHRpcCxkZWxldGUgaS50b29sdGlwKTtmb3IodmFyIGY9RGUoaS5yZWYpLGM9Zi5zLnI7Yzw9Zi5lLnI7KytjKWZvcih2YXIgbz1mLnMuYztvPD1mLmUuYzsrK28pe3ZhciBsPWdlKHtjOm8scjpjfSk7YT8oZVtjXXx8KGVbY109W10pLGVbY11bb118'@;
put 'fChlW2NdW29dPXt0OiJ6Iix2OnZvaWQgMH0pLGVbY11bb10ubD1pKTooZVtsXXx8KGVbbF09e3Q6InoiLHY6dm9pZCAwfSksZVtsXS5sPWkpfX19KGYsTSxhKTt2YXIgST1sLm1hdGNoKGh2KTtpZihJJiYoZlsiIW1hcmdpbnMiXT1mdW5jdGlvbiBUdihlKXt2YXIgdD17fTtyZXR1cm5bImxl'@;
put 'ZnQiLCJyaWdodCIsInRvcCIsImJvdHRvbSIsImhlYWRlciIsImZvb3RlciJdLmZvckVhY2goZnVuY3Rpb24ocil7ZVtyXSYmKHRbcl09cGFyc2VGbG9hdChlW3JdKSl9KSx0fShtZShJWzBdKSkpLCFmWyIhcmVmIl0mJmMuZS5jPj1jLnMuYyYmYy5lLnI+PWMucy5yJiYoZlsiIXJlZiJdPXdl'@;
put 'KGMpKSx0LnNoZWV0Um93cz4wJiZmWyIhcmVmIl0pe3ZhciB5PURlKGZbIiFyZWYiXSk7dC5zaGVldFJvd3M8PSt5LmUuciYmKHkuZS5yPXQuc2hlZXRSb3dzLTEseS5lLnI+Yy5lLnImJih5LmUucj1jLmUucikseS5lLnI8eS5zLnImJih5LnMucj15LmUucikseS5lLmM+Yy5lLmMmJih5LmUu'@;
put 'Yz1jLmUuYykseS5lLmM8eS5zLmMmJih5LnMuYz15LmUuYyksZlsiIWZ1bGxyZWYiXT1mWyIhcmVmIl0sZlsiIXJlZiJdPXdlKHkpKX1yZXR1cm4gcC5sZW5ndGg+MCYmKGZbIiFjb2xzIl09cCksZy5sZW5ndGg+MCYmKGZbIiFtZXJnZXMiXT1nKSxmfShlLGEscixuLGkscyxmKX12YXIgR2Es'@;
put 'emY9LyhbXHc6XSspPSgoPzoiKShbXiJdKikoPzoiKXwoPzonKShbXiddKikoPzonKSkvZywkZj0vKFtcdzpdKyk9KCg/OiIpKD86W14iXSopKD86Iil8KD86JykoPzpbXiddKikoPzonKSkvO2Z1bmN0aW9uIFpyKGUsdCl7dmFyIHI9ZS5zcGxpdCgvXHMrLyksYT1bXTtpZih0fHwoYVswXT1y'@;
put 'WzBdKSwxPT09ci5sZW5ndGgpcmV0dXJuIGE7dmFyIGkscyxjLG49ZS5tYXRjaCh6Zik7aWYobilmb3IoYz0wO2MhPW4ubGVuZ3RoOysrYyktMT09PShzPShpPW5bY10ubWF0Y2goJGYpKVsxXS5pbmRleE9mKCI6IikpP2FbaVsxXV09aVsyXS5zbGljZSgxLGlbMl0ubGVuZ3RoLTEpOmFbInht'@;
put 'bG5zOiI9PT1pWzFdLnNsaWNlKDAsNik/InhtbG5zIitpWzFdLnNsaWNlKDYpOmlbMV0uc2xpY2UocysxKV09aVsyXS5zbGljZSgxLGlbMl0ubGVuZ3RoLTEpO3JldHVybiBhfWZ1bmN0aW9uIEhwKGUpe3ZhciByPXt9O2lmKDE9PT1lLnNwbGl0KC9ccysvKS5sZW5ndGgpcmV0dXJuIHI7dmFy'@;
put 'IG4saSxmLGE9ZS5tYXRjaCh6Zik7aWYoYSlmb3IoZj0wO2YhPWEubGVuZ3RoOysrZiktMT09PShpPShuPWFbZl0ubWF0Y2goJGYpKVsxXS5pbmRleE9mKCI6IikpP3JbblsxXV09blsyXS5zbGljZSgxLG5bMl0ubGVuZ3RoLTEpOnJbInhtbG5zOiI9PT1uWzFdLnNsaWNlKDAsNik/InhtbG5z'@;
put 'IituWzFdLnNsaWNlKDYpOm5bMV0uc2xpY2UoaSsxKV09blsyXS5zbGljZSgxLG5bMl0ubGVuZ3RoLTEpO3JldHVybiByfWZ1bmN0aW9uIFhwKGUsdCxyLGEpe3ZhciBuPWE7c3dpdGNoKChyWzBdLm1hdGNoKC9kdDpkdD0iKFtcdy5dKykiLyl8fFsiIiwiIl0pWzFdKXtjYXNlImJvb2xlYW4i'@;
put 'Om49V2UoYSk7YnJlYWs7Y2FzZSJpMiI6Y2FzZSJpbnQiOm49cGFyc2VJbnQoYSwxMCk7YnJlYWs7Y2FzZSJyNCI6Y2FzZSJmbG9hdCI6bj1wYXJzZUZsb2F0KGEpO2JyZWFrO2Nhc2UiZGF0ZSI6Y2FzZSJkYXRlVGltZS50eiI6bj1YZShhKTticmVhaztjYXNlImk4IjpjYXNlInN0cmluZyI6'@;
put 'Y2FzZSJmaXhlZCI6Y2FzZSJ1dWlkIjpjYXNlImJpbi5iYXNlNjQiOmJyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJiYWQgY3VzdHByb3A6IityWzBdKX1lW0llKHQpXT1ufWZ1bmN0aW9uIHpwKGUsdCxyKXtpZihyLmNlbGxTdHlsZXMmJnQuSW50ZXJpb3Ipe3ZhciBhPXQuSW50ZXJp'@;
put 'b3I7YS5QYXR0ZXJuJiYoYS5wYXR0ZXJuVHlwZT1uMVthLlBhdHRlcm5dfHxhLlBhdHRlcm4pfWVbdC5JRF09dH1mdW5jdGlvbiAkcChlLHQscixhLG4saSxzLGYsYyxvKXt2YXIgbD0iR2VuZXJhbCIsaD1hLlN0eWxlSUQseD17fTtvPW98fHt9O3ZhciBkPVtdLHY9MDtmb3Iodm9pZCAwPT09'@;
put 'aCYmZiYmKGg9Zi5TdHlsZUlEKSx2b2lkIDA9PT1oJiZzJiYoaD1zLlN0eWxlSUQpO3ZvaWQgMCE9PWlbaF0mJihpW2hdLm5mJiYobD1pW2hdLm5mKSxpW2hdLkludGVyaW9yJiZkLnB1c2goaVtoXS5JbnRlcmlvciksaVtoXS5QYXJlbnQpOyloPWlbaF0uUGFyZW50O3N3aXRjaChyLlR5cGUp'@;
put 'e2Nhc2UiQm9vbGVhbiI6YS50PSJiIixhLnY9V2UoZSk7YnJlYWs7Y2FzZSJTdHJpbmciOmEudD0icyIsYS5yPUJpKEllKGUpKSxhLnY9ZS5pbmRleE9mKCI8Iik+LTE/SWUodHx8ZSkucmVwbGFjZSgvPC4qPz4vZywiIik6YS5yO2JyZWFrO2Nhc2UiRGF0ZVRpbWUiOiJaIiE9ZS5zbGljZSgt'@;
put 'MSkmJihlKz0iWiIpLGEudj0oWGUoZSktbmV3IERhdGUoRGF0ZS5VVEMoMTg5OSwxMSwzMCkpKS84NjRlNSxhLnYhPWEudj9hLnY9SWUoZSk6YS52PDYwJiYoYS52PWEudi0xKSwoIWx8fCJHZW5lcmFsIj09bCkmJihsPSJ5eXl5LW1tLWRkIik7Y2FzZSJOdW1iZXIiOnZvaWQgMD09PWEudiYm'@;
put 'KGEudj0rZSksYS50fHwoYS50PSJuIik7YnJlYWs7Y2FzZSJFcnJvciI6YS50PSJlIixhLnY9ZHNbZV0sITEhPT1vLmNlbGxUZXh0JiYoYS53PWUpO2JyZWFrO2RlZmF1bHQ6IiI9PWUmJiIiPT10P2EudD0ieiI6KGEudD0icyIsYS52PUJpKHR8fGUpKX1pZihmdW5jdGlvbiBHcChlLHQscil7'@;
put 'aWYoInoiIT09ZS50KXtpZighcnx8ITEhPT1yLmNlbGxUZXh0KXRyeXtlLnc9ImUiPT09ZS50P2Uud3x8eHRbZS52XToiR2VuZXJhbCI9PT10PyJuIj09PWUudD8oMHxlLnYpPT09ZS52P2Uudi50b1N0cmluZygxMCk6a2EoZS52KTpOdChlLnYpOmZ1bmN0aW9uIFZwKGUsdCl7dmFyIHI9R2Fb'@;
put 'ZV18fEllKGUpO3JldHVybiJHZW5lcmFsIj09PXI/TnQodCk6UnIocix0KX0odHx8IkdlbmVyYWwiLGUudil9Y2F0Y2goaSl7aWYoci5XVEYpdGhyb3cgaX10cnl7dmFyIGE9R2FbdF18fHR8fCJHZW5lcmFsIjtpZihyLmNlbGxORiYmKGUuej1hKSxyLmNlbGxEYXRlcyYmIm4iPT1lLnQmJmJ0'@;
put 'KGEpKXt2YXIgbj1rdChlLnYpO24mJihlLnQ9ImQiLGUudj1uZXcgRGF0ZShuLnksbi5tLTEsbi5kLG4uSCxuLk0sbi5TLG4udSkpfX1jYXRjaChpKXtpZihyLldURil0aHJvdyBpfX19KGEsbCxvKSwhMSE9PW8uY2VsbEZvcm11bGEpaWYoYS5Gb3JtdWxhKXt2YXIgdT1JZShhLkZvcm11bGEp'@;
put 'OzYxPT11LmNoYXJDb2RlQXQoMCkmJih1PXUuc2xpY2UoMSkpLGEuZj11YSh1LG4pLGRlbGV0ZSBhLkZvcm11bGEsIlJDIj09YS5BcnJheVJhbmdlP2EuRj11YSgiUkM6UkMiLG4pOmEuQXJyYXlSYW5nZSYmKGEuRj11YShhLkFycmF5UmFuZ2UsbiksYy5wdXNoKFtEZShhLkYpLGEuRl0pKX1l'@;
put 'bHNlIGZvcih2PTA7djxjLmxlbmd0aDsrK3Ypbi5yPj1jW3ZdWzBdLnMuciYmbi5yPD1jW3ZdWzBdLmUuciYmbi5jPj1jW3ZdWzBdLnMuYyYmbi5jPD1jW3ZdWzBdLmUuYyYmKGEuRj1jW3ZdWzFdKTtvLmNlbGxTdHlsZXMmJihkLmZvckVhY2goZnVuY3Rpb24ocCl7IXgucGF0dGVyblR5cGUm'@;
put 'JnAucGF0dGVyblR5cGUmJih4LnBhdHRlcm5UeXBlPXAucGF0dGVyblR5cGUpfSksYS5zPXgpLHZvaWQgMCE9PWEuU3R5bGVJRCYmKGEuaXhmZT1hLlN0eWxlSUQpfWZ1bmN0aW9uIGpwKGUpe2UudD1lLnZ8fCIiLGUudD1lLnQucmVwbGFjZSgvXHJcbi9nLCJcbiIpLnJlcGxhY2UoL1xyL2cs'@;
put 'IlxuIiksZS52PWUudz1lLml4ZmU9dm9pZCAwfWZ1bmN0aW9uIE1uKGUsdCl7dmFyIHI9dHx8e307dGEoKTt2YXIgYT1RdChZMChlKSk7KCJiaW5hcnkiPT1yLnR5cGV8fCJhcnJheSI9PXIudHlwZXx8ImJhc2U2NCI9PXIudHlwZSkmJihhPXR5cGVvZiBPZTwidSI/T2UudXRpbHMuZGVjb2Rl'@;
put 'KDY1MDAxLHQwKGEpKTpCZShhKSk7dmFyIG49YS5zbGljZSgwLDEwMjQpLnRvTG93ZXJDYXNlKCksaT0hMTtpZigoMTAyMyYobj1uLnJlcGxhY2UoLyIuKj8iL2csIiIpKS5pbmRleE9mKCI+IikpPk1hdGgubWluKDEwMjMmbi5pbmRleE9mKCIsIiksMTAyMyZuLmluZGV4T2YoIjsiKSkpe3Zh'@;
put 'ciBzPU1lKHIpO3JldHVybiBzLnR5cGU9InN0cmluZyIsY2EudG9fd29ya2Jvb2soYSxzKX1pZigtMT09bi5pbmRleE9mKCI8P3htbCIpJiZbImh0bWwiLCJ0YWJsZSIsImhlYWQiLCJtZXRhIiwic2NyaXB0Iiwic3R5bGUiLCJkaXYiXS5mb3JFYWNoKGZ1bmN0aW9uKHFlKXtuLmluZGV4T2Yo'@;
put 'IjwiK3FlKT49MCYmKGk9ITApfSksaSlyZXR1cm4gZnVuY3Rpb24gRG0oZSx0KXt2YXIgcj1lLm1hdGNoKC88dGFibGVbXHNcU10qPz5bXHNcU10qPzxcL3RhYmxlPi9naSk7aWYoIXJ8fDA9PXIubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBIVE1MOiBjb3VsZCBub3QgZmluZCA8'@;
put 'dGFibGU+Iik7aWYoMT09ci5sZW5ndGgpcmV0dXJuIEZ0KEpmKHJbMF0sdCksdCk7dmFyIGE9e1NoZWV0TmFtZXM6W10sU2hlZXRzOnt9fTtyZXR1cm4gci5mb3JFYWNoKGZ1bmN0aW9uKG4saSl7ZWkoYSxKZihuLHQpLCJTaGVldCIrKGkrMSkpfSksYX0oYSxyKTtHYT17IkdlbmVyYWwgTnVt'@;
put 'YmVyIjoiR2VuZXJhbCIsIkdlbmVyYWwgRGF0ZSI6cGVbMjJdLCJMb25nIERhdGUiOiJkZGRkLCBtbW1tIGRkLCB5eXl5IiwiTWVkaXVtIERhdGUiOnBlWzE1XSwiU2hvcnQgRGF0ZSI6cGVbMTRdLCJMb25nIFRpbWUiOnBlWzE5XSwiTWVkaXVtIFRpbWUiOnBlWzE4XSwiU2hvcnQgVGltZSI6'@;
put 'cGVbMjBdLEN1cnJlbmN5OiciJCIjLCMjMC4wMF8pO1tSZWRdXFwoIiQiIywjIzAuMDBcXCknLEZpeGVkOnBlWzJdLFN0YW5kYXJkOnBlWzRdLFBlcmNlbnQ6cGVbMTBdLFNjaWVudGlmaWM6cGVbMTFdLCJZZXMvTm8iOiciWWVzIjsiWWVzIjsiTm8iO0AnLCJUcnVlL0ZhbHNlIjonIlRydWUi'@;
put 'OyJUcnVlIjsiRmFsc2UiO0AnLCJPbi9PZmYiOiciWWVzIjsiWWVzIjsiTm8iO0AnfTt2YXIgZixvLGM9W107bnVsbCE9emUmJm51bGw9PXIuZGVuc2UmJihyLmRlbnNlPXplKTt2YXIgdWUsbD17fSxoPVtdLHg9ci5kZW5zZT9bXTp7fSxkPSIiLHY9e30sdT17fSxwPVpyKCc8RGF0YSBzczpU'@;
put 'eXBlPSJTdHJpbmciPicpLGs9MCxUPTAsZz0wLE49e3M6e3I6MmU2LGM6MmU2fSxlOntyOjAsYzowfX0sTT17fSxJPXt9LHk9IiIsUD0wLFI9W10sVj17fSxYPXt9LGI9MCxlZT1bXSxsZT1bXSxyZT17fSxkZT1bXSxGZT0hMSxjZT1bXSx4ZT1bXSxLPXt9LEM9MCxVPTAsTz17U2hlZXRzOltd'@;
put 'LFdCUHJvcHM6e2RhdGUxOTA0OiExfX0sRD17fTt5YS5sYXN0SW5kZXg9MCxhPWEucmVwbGFjZSgvPCEtLShbXHNcU10qPyktLT4vZ20sIiIpO2Zvcih2YXIgaj0iIjtmPXlhLmV4ZWMoYSk7KXN3aXRjaChmWzNdPShqPWZbM10pLnRvTG93ZXJDYXNlKCkpe2Nhc2UiZGF0YSI6aWYoImRhdGEi'@;
put 'PT1qKXtpZigiLyI9PT1mWzFdKXtpZigobz1jLnBvcCgpKVswXSE9PWZbM10pdGhyb3cgbmV3IEVycm9yKCJCYWQgc3RhdGU6ICIrby5qb2luKCJ8IikpfWVsc2UiLyIhPT1mWzBdLmNoYXJBdChmWzBdLmxlbmd0aC0yKSYmYy5wdXNoKFtmWzNdLCEwXSk7YnJlYWt9aWYoY1tjLmxlbmd0aC0x'@;
put 'XVsxXSlicmVhazsiLyI9PT1mWzFdPyRwKGEuc2xpY2UoayxmLmluZGV4KSx5LHAsImNvbW1lbnQiPT1jW2MubGVuZ3RoLTFdWzBdP3JlOnYse2M6VCxyOmd9LE0sZGVbVF0sdSxjZSxyKTooeT0iIixwPVpyKGZbMF0pLGs9Zi5pbmRleCtmWzBdLmxlbmd0aCk7YnJlYWs7Y2FzZSJjZWxsIjpp'@;
put 'ZigiLyI9PT1mWzFdKWlmKGxlLmxlbmd0aD4wJiYodi5jPWxlKSwoIXIuc2hlZXRSb3dzfHxyLnNoZWV0Um93cz5nKSYmdm9pZCAwIT09di52JiYoci5kZW5zZT8oeFtnXXx8KHhbZ109W10pLHhbZ11bVF09dik6eFtIZShUKStLZShnKV09diksdi5IUmVmJiYodi5sPXtUYXJnZXQ6SWUodi5I'@;
put 'UmVmKX0sdi5IUmVmU2NyZWVuVGlwJiYodi5sLlRvb2x0aXA9di5IUmVmU2NyZWVuVGlwKSxkZWxldGUgdi5IUmVmLGRlbGV0ZSB2LkhSZWZTY3JlZW5UaXApLCh2Lk1lcmdlQWNyb3NzfHx2Lk1lcmdlRG93bikmJihDPVQrKDB8cGFyc2VJbnQodi5NZXJnZUFjcm9zcywxMCkpLFU9ZysoMHxw'@;
put 'YXJzZUludCh2Lk1lcmdlRG93biwxMCkpLFIucHVzaCh7czp7YzpULHI6Z30sZTp7YzpDLHI6VX19KSksci5zaGVldFN0dWJzKWlmKHYuTWVyZ2VBY3Jvc3N8fHYuTWVyZ2VEb3duKXtmb3IodmFyIHNlPVQ7c2U8PUM7KytzZSlmb3IodmFyIFo9ZztaPD1VOysrWikoc2U+VHx8Wj5nKSYmKHIu'@;
put 'ZGVuc2U/KHhbWl18fCh4W1pdPVtdKSx4W1pdW3NlXT17dDoieiJ9KTp4W0hlKHNlKStLZShaKV09e3Q6InoifSk7VD1DKzF9ZWxzZSsrVDtlbHNlIHYuTWVyZ2VBY3Jvc3M/VD1DKzE6KytUO2Vsc2Uodj1IcChmWzBdKSkuSW5kZXgmJihUPSt2LkluZGV4LTEpLFQ8Ti5zLmMmJihOLnMuYz1U'@;
put 'KSxUPk4uZS5jJiYoTi5lLmM9VCksIi8+Ij09PWZbMF0uc2xpY2UoLTIpJiYrK1QsbGU9W107YnJlYWs7Y2FzZSJyb3ciOiIvIj09PWZbMV18fCIvPiI9PT1mWzBdLnNsaWNlKC0yKT8oZzxOLnMuciYmKE4ucy5yPWcpLGc+Ti5lLnImJihOLmUucj1nKSwiLz4iPT09ZlswXS5zbGljZSgtMikm'@;
put 'Jih1PVpyKGZbMF0pKS5JbmRleCYmKGc9K3UuSW5kZXgtMSksVD0wLCsrZyk6KCh1PVpyKGZbMF0pKS5JbmRleCYmKGc9K3UuSW5kZXgtMSksSz17fSwoIjAiPT11LkF1dG9GaXRIZWlnaHR8fHUuSGVpZ2h0KSYmKEsuaHB4PXBhcnNlSW50KHUuSGVpZ2h0LDEwKSxLLmhwdD1CYShLLmhweCks'@;
put 'eGVbZ109SyksIjEiPT11LkhpZGRlbiYmKEsuaGlkZGVuPSEwLHhlW2ddPUspKTticmVhaztjYXNlIndvcmtzaGVldCI6aWYoIi8iPT09ZlsxXSl7aWYoKG89Yy5wb3AoKSlbMF0hPT1mWzNdKXRocm93IG5ldyBFcnJvcigiQmFkIHN0YXRlOiAiK28uam9pbigifCIpKTtoLnB1c2goZCksTi5z'@;
put 'LnI8PU4uZS5yJiZOLnMuYzw9Ti5lLmMmJih4WyIhcmVmIl09d2UoTiksci5zaGVldFJvd3MmJnIuc2hlZXRSb3dzPD1OLmUuciYmKHhbIiFmdWxscmVmIl09eFsiIXJlZiJdLE4uZS5yPXIuc2hlZXRSb3dzLTEseFsiIXJlZiJdPXdlKE4pKSksUi5sZW5ndGgmJih4WyIhbWVyZ2VzIl09Uiks'@;
put 'ZGUubGVuZ3RoPjAmJih4WyIhY29scyJdPWRlKSx4ZS5sZW5ndGg+MCYmKHhbIiFyb3dzIl09eGUpLGxbZF09eH1lbHNlIE49e3M6e3I6MmU2LGM6MmU2fSxlOntyOjAsYzowfX0sZz1UPTAsYy5wdXNoKFtmWzNdLCExXSksbz1acihmWzBdKSxkPUllKG8uTmFtZSkseD1yLmRlbnNlP1tdOnt9'@;
put 'LFI9W10sY2U9W10seGU9W10sTy5TaGVldHMucHVzaChEPXtuYW1lOmQsSGlkZGVuOjB9KTticmVhaztjYXNlInRhYmxlIjppZigiLyI9PT1mWzFdKXtpZigobz1jLnBvcCgpKVswXSE9PWZbM10pdGhyb3cgbmV3IEVycm9yKCJCYWQgc3RhdGU6ICIrby5qb2luKCJ8IikpfWVsc2V7aWYoIi8+'@;
put 'Ij09ZlswXS5zbGljZSgtMikpYnJlYWs7Yy5wdXNoKFtmWzNdLCExXSksZGU9W10sRmU9ITF9YnJlYWs7Y2FzZSJzdHlsZSI6Ii8iPT09ZlsxXT96cChNLEkscik6ST1acihmWzBdKTticmVhaztjYXNlIm51bWJlcmZvcm1hdCI6SS5uZj1JZShacihmWzBdKS5Gb3JtYXR8fCJHZW5lcmFsIiks'@;
put 'R2FbSS5uZl0mJihJLm5mPUdhW0kubmZdKTtmb3IodmFyIFE9MDszOTIhPVEmJnBlW1FdIT1JLm5mOysrUSk7aWYoMzkyPT1RKWZvcihRPTU3OzM5MiE9UTsrK1EpaWYobnVsbD09cGVbUV0pe2V0KEkubmYsUSk7YnJlYWt9YnJlYWs7Y2FzZSJjb2x1bW4iOmlmKCJ0YWJsZSIhPT1jW2MubGVu'@;
put 'Z3RoLTFdWzBdKWJyZWFrO2lmKCh1ZT1acihmWzBdKSkuSGlkZGVuJiYodWUuaGlkZGVuPSEwLGRlbGV0ZSB1ZS5IaWRkZW4pLHVlLldpZHRoJiYodWUud3B4PXBhcnNlSW50KHVlLldpZHRoLDEwKSksIUZlJiZ1ZS53cHg+MTApe0ZlPSEwLHdyPWxmO2Zvcih2YXIgWT0wO1k8ZGUubGVuZ3Ro'@;
put 'OysrWSlkZVtZXSYmS3QoZGVbWV0pfUZlJiZLdCh1ZSksZGVbdWUuSW5kZXgtMXx8ZGUubGVuZ3RoXT11ZTtmb3IodmFyIEVlPTA7RWU8K3VlLlNwYW47KytFZSlkZVtkZS5sZW5ndGhdPU1lKHVlKTticmVhaztjYXNlIm5hbWVkcmFuZ2UiOmlmKCIvIj09PWZbMV0pYnJlYWs7Ty5OYW1lc3x8'@;
put 'KE8uTmFtZXM9W10pO3ZhciBBPW1lKGZbMF0pLFBlPXtOYW1lOkEuTmFtZSxSZWY6dWEoQS5SZWZlcnNUby5zbGljZSgxKSx7cjowLGM6MH0pfTtPLlNoZWV0cy5sZW5ndGg+MCYmKFBlLlNoZWV0PU8uU2hlZXRzLmxlbmd0aC0xKSxPLk5hbWVzLnB1c2goUGUpO2JyZWFrO2Nhc2UibmFtZWRj'@;
put 'ZWxsIjpjYXNlImIiOmNhc2UiaSI6Y2FzZSJ1IjpjYXNlInMiOmNhc2UiZW0iOmNhc2UiaDIiOmNhc2UiaDMiOmNhc2Uic3ViIjpjYXNlInN1cCI6Y2FzZSJzcGFuIjpjYXNlImFsaWdubWVudCI6Y2FzZSJib3JkZXJzIjpjYXNlImJvcmRlciI6Y2FzZSJwcm90ZWN0aW9uIjpjYXNlInBhcmFn'@;
put 'cmFwaHMiOmNhc2UibmFtZSI6Y2FzZSJwaXhlbHNwZXJpbmNoIjpjYXNlIm51bGwiOmJyZWFrO2Nhc2UiZm9udCI6aWYoIi8+Ij09PWZbMF0uc2xpY2UoLTIpKWJyZWFrOyIvIj09PWZbMV0/eSs9YS5zbGljZShQLGYuaW5kZXgpOlA9Zi5pbmRleCtmWzBdLmxlbmd0aDticmVhaztjYXNlImlu'@;
put 'dGVyaW9yIjppZighci5jZWxsU3R5bGVzKWJyZWFrO0kuSW50ZXJpb3I9WnIoZlswXSk7YnJlYWs7Y2FzZSJhdXRob3IiOmNhc2UidGl0bGUiOmNhc2UiZGVzY3JpcHRpb24iOmNhc2UiY3JlYXRlZCI6Y2FzZSJrZXl3b3JkcyI6Y2FzZSJzdWJqZWN0IjpjYXNlImNhdGVnb3J5IjpjYXNlImNv'@;
put 'bXBhbnkiOmNhc2UibGFzdGF1dGhvciI6Y2FzZSJsYXN0c2F2ZWQiOmNhc2UibGFzdHByaW50ZWQiOmNhc2UidmVyc2lvbiI6Y2FzZSJyZXZpc2lvbiI6Y2FzZSJ0b3RhbHRpbWUiOmNhc2UiaHlwZXJsaW5rYmFzZSI6Y2FzZSJtYW5hZ2VyIjpjYXNlImNvbnRlbnRzdGF0dXMiOmNhc2UiaWRl'@;
put 'bnRpZmllciI6Y2FzZSJsYW5ndWFnZSI6Y2FzZSJhcHBuYW1lIjppZigiLz4iPT09ZlswXS5zbGljZSgtMikpYnJlYWs7Ii8iPT09ZlsxXT9nbChWLGosYS5zbGljZShiLGYuaW5kZXgpKTpiPWYuaW5kZXgrZlswXS5sZW5ndGg7YnJlYWs7Y2FzZSJzdHlsZXMiOmNhc2Uid29ya2Jvb2siOmlm'@;
put 'KCIvIj09PWZbMV0pe2lmKChvPWMucG9wKCkpWzBdIT09ZlszXSl0aHJvdyBuZXcgRXJyb3IoIkJhZCBzdGF0ZTogIitvLmpvaW4oInwiKSl9ZWxzZSBjLnB1c2goW2ZbM10sITFdKTticmVhaztjYXNlImNvbW1lbnQiOmlmKCIvIj09PWZbMV0pe2lmKChvPWMucG9wKCkpWzBdIT09ZlszXSl0'@;
put 'aHJvdyBuZXcgRXJyb3IoIkJhZCBzdGF0ZTogIitvLmpvaW4oInwiKSk7anAocmUpLGxlLnB1c2gocmUpfWVsc2UgYy5wdXNoKFtmWzNdLCExXSkscmU9e2E6KG89WnIoZlswXSkpLkF1dGhvcn07YnJlYWs7Y2FzZSJhdXRvZmlsdGVyIjppZigiLyI9PT1mWzFdKXtpZigobz1jLnBvcCgpKVsw'@;
put 'XSE9PWZbM10pdGhyb3cgbmV3IEVycm9yKCJCYWQgc3RhdGU6ICIrby5qb2luKCJ8IikpfWVsc2UgaWYoIi8iIT09ZlswXS5jaGFyQXQoZlswXS5sZW5ndGgtMikpe3ZhciBBZT1acihmWzBdKTt4WyIhYXV0b2ZpbHRlciJdPXtyZWY6dWEoQWUuUmFuZ2UpLnJlcGxhY2UoL1wkL2csIiIpfSxj'@;
put 'LnB1c2goW2ZbM10sITBdKX1icmVhaztjYXNlImRhdGF2YWxpZGF0aW9uIjppZigiLyI9PT1mWzFdKXtpZigobz1jLnBvcCgpKVswXSE9PWZbM10pdGhyb3cgbmV3IEVycm9yKCJCYWQgc3RhdGU6ICIrby5qb2luKCJ8IikpfWVsc2UiLyIhPT1mWzBdLmNoYXJBdChmWzBdLmxlbmd0aC0yKSYm'@;
put 'Yy5wdXNoKFtmWzNdLCEwXSk7YnJlYWs7Y2FzZSJjb21wb25lbnRvcHRpb25zIjpjYXNlImRvY3VtZW50cHJvcGVydGllcyI6Y2FzZSJjdXN0b21kb2N1bWVudHByb3BlcnRpZXMiOmNhc2Uib2ZmaWNlZG9jdW1lbnRzZXR0aW5ncyI6Y2FzZSJwaXZvdHRhYmxlIjpjYXNlInBpdm90Y2FjaGUi'@;
put 'OmNhc2UibmFtZXMiOmNhc2UibWFwaW5mbyI6Y2FzZSJwYWdlYnJlYWtzIjpjYXNlInF1ZXJ5dGFibGUiOmNhc2Uic29ydGluZyI6Y2FzZSJzY2hlbWEiOmNhc2UiY29uZGl0aW9uYWxmb3JtYXR0aW5nIjpjYXNlInNtYXJ0dGFndHlwZSI6Y2FzZSJzbWFydHRhZ3MiOmNhc2UiZXhjZWx3b3Jr'@;
put 'Ym9vayI6Y2FzZSJ3b3JrYm9va29wdGlvbnMiOmNhc2Uid29ya3NoZWV0b3B0aW9ucyI6aWYoIi8iPT09ZlsxXSl7aWYoKG89Yy5wb3AoKSlbMF0hPT1mWzNdKXRocm93IG5ldyBFcnJvcigiQmFkIHN0YXRlOiAiK28uam9pbigifCIpKX1lbHNlIi8iIT09ZlswXS5jaGFyQXQoZlswXS5sZW5n'@;
put 'dGgtMikmJmMucHVzaChbZlszXSwhMF0pO2JyZWFrO2RlZmF1bHQ6aWYoMD09Yy5sZW5ndGgmJiJkb2N1bWVudCI9PWZbM118fDA9PWMubGVuZ3RoJiYidW9mIj09ZlszXSlyZXR1cm4gY2MoYSxyKTt2YXIgTGU9ITA7c3dpdGNoKGNbYy5sZW5ndGgtMV1bMF0pe2Nhc2Uib2ZmaWNlZG9jdW1l'@;
put 'bnRzZXR0aW5ncyI6c3dpdGNoKGZbM10pe2Nhc2UiYWxsb3dwbmciOmNhc2UicmVtb3ZlcGVyc29uYWxpbmZvcm1hdGlvbiI6Y2FzZSJkb3dubG9hZGNvbXBvbmVudHMiOmNhc2UibG9jYXRpb25vZmNvbXBvbmVudHMiOmNhc2UiY29sb3JzIjpjYXNlImNvbG9yIjpjYXNlImluZGV4IjpjYXNl'@;
put 'InJnYiI6Y2FzZSJ0YXJnZXRzY3JlZW5zaXplIjpjYXNlInJlYWRvbmx5cmVjb21tZW5kZWQiOmJyZWFrO2RlZmF1bHQ6TGU9ITF9YnJlYWs7Y2FzZSJjb21wb25lbnRvcHRpb25zIjpzd2l0Y2goZlszXSl7Y2FzZSJ0b29sYmFyIjpjYXNlImhpZGVvZmZpY2Vsb2dvIjpjYXNlInNwcmVhZHNo'@;
put 'ZWV0YXV0b2ZpdCI6Y2FzZSJsYWJlbCI6Y2FzZSJjYXB0aW9uIjpjYXNlIm1heGhlaWdodCI6Y2FzZSJtYXh3aWR0aCI6Y2FzZSJuZXh0c2hlZXRudW1iZXIiOmJyZWFrO2RlZmF1bHQ6TGU9ITF9YnJlYWs7Y2FzZSJleGNlbHdvcmtib29rIjpzd2l0Y2goZlszXSl7Y2FzZSJkYXRlMTkwNCI6'@;
put 'Ty5XQlByb3BzLmRhdGUxOTA0PSEwO2JyZWFrO2Nhc2Uid2luZG93aGVpZ2h0IjpjYXNlIndpbmRvd3dpZHRoIjpjYXNlIndpbmRvd3RvcHgiOmNhc2Uid2luZG93dG9weSI6Y2FzZSJ0YWJyYXRpbyI6Y2FzZSJwcm90ZWN0c3RydWN0dXJlIjpjYXNlInByb3RlY3R3aW5kb3ciOmNhc2UicHJv'@;
put 'dGVjdHdpbmRvd3MiOmNhc2UiYWN0aXZlc2hlZXQiOmNhc2UiZGlzcGxheWlua25vdGVzIjpjYXNlImZpcnN0dmlzaWJsZXNoZWV0IjpjYXNlInN1cGJvb2siOmNhc2Uic2hlZXRuYW1lIjpjYXNlInNoZWV0aW5kZXgiOmNhc2Uic2hlZXRpbmRleGZpcnN0IjpjYXNlInNoZWV0aW5kZXhsYXN0'@;
put 'IjpjYXNlImRsbCI6Y2FzZSJhY2NlcHRsYWJlbHNpbmZvcm11bGFzIjpjYXNlImRvbm90c2F2ZWxpbmt2YWx1ZXMiOmNhc2UiaXRlcmF0aW9uIjpjYXNlIm1heGl0ZXJhdGlvbnMiOmNhc2UibWF4Y2hhbmdlIjpjYXNlInBhdGgiOmNhc2UieGN0IjpjYXNlImNvdW50IjpjYXNlInNlbGVjdGVk'@;
put 'c2hlZXRzIjpjYXNlImNhbGN1bGF0aW9uIjpjYXNlInVuY2FsY2VkIjpjYXNlInN0YXJ0dXBwcm9tcHQiOmNhc2UiY3JuIjpjYXNlImV4dGVybm5hbWUiOmNhc2UiZm9ybXVsYSI6Y2FzZSJjb2xmaXJzdCI6Y2FzZSJjb2xsYXN0IjpjYXNlIndhbnRhZHZpc2UiOmNhc2UiYm9vbGVhbiI6Y2Fz'@;
put 'ZSJlcnJvciI6Y2FzZSJ0ZXh0IjpjYXNlIm9sZSI6Y2FzZSJub2F1dG9yZWNvdmVyIjpjYXNlInB1Ymxpc2hvYmplY3RzIjpjYXNlImRvbm90Y2FsY3VsYXRlYmVmb3Jlc2F2ZSI6Y2FzZSJudW1iZXIiOmNhc2UicmVmbW9kZXIxYzEiOmNhc2UiZW1iZWRzYXZlc21hcnR0YWdzIjpicmVhaztk'@;
put 'ZWZhdWx0OkxlPSExfWJyZWFrO2Nhc2Uid29ya2Jvb2tvcHRpb25zIjpzd2l0Y2goZlszXSl7Y2FzZSJvd2N2ZXJzaW9uIjpjYXNlImhlaWdodCI6Y2FzZSJ3aWR0aCI6YnJlYWs7ZGVmYXVsdDpMZT0hMX1icmVhaztjYXNlIndvcmtzaGVldG9wdGlvbnMiOnN3aXRjaChmWzNdKXtjYXNlInZp'@;
put 'c2libGUiOmlmKCIvPiIhPT1mWzBdLnNsaWNlKC0yKSlpZigiLyI9PT1mWzFdKXN3aXRjaChhLnNsaWNlKGIsZi5pbmRleCkpe2Nhc2UiU2hlZXRIaWRkZW4iOkQuSGlkZGVuPTE7YnJlYWs7Y2FzZSJTaGVldFZlcnlIaWRkZW4iOkQuSGlkZGVuPTJ9ZWxzZSBiPWYuaW5kZXgrZlswXS5sZW5n'@;
put 'dGg7YnJlYWs7Y2FzZSJoZWFkZXIiOnhbIiFtYXJnaW5zIl18fFl0KHhbIiFtYXJnaW5zIl09e30sInhsbWwiKSxpc05hTigrbWUoZlswXSkuTWFyZ2luKXx8KHhbIiFtYXJnaW5zIl0uaGVhZGVyPSttZShmWzBdKS5NYXJnaW4pO2JyZWFrO2Nhc2UiZm9vdGVyIjp4WyIhbWFyZ2lucyJdfHxZ'@;
put 'dCh4WyIhbWFyZ2lucyJdPXt9LCJ4bG1sIiksaXNOYU4oK21lKGZbMF0pLk1hcmdpbil8fCh4WyIhbWFyZ2lucyJdLmZvb3Rlcj0rbWUoZlswXSkuTWFyZ2luKTticmVhaztjYXNlInBhZ2VtYXJnaW5zIjp2YXIgQ2U9bWUoZlswXSk7eFsiIW1hcmdpbnMiXXx8WXQoeFsiIW1hcmdpbnMiXT17'@;
put 'fSwieGxtbCIpLGlzTmFOKCtDZS5Ub3ApfHwoeFsiIW1hcmdpbnMiXS50b3A9K0NlLlRvcCksaXNOYU4oK0NlLkxlZnQpfHwoeFsiIW1hcmdpbnMiXS5sZWZ0PStDZS5MZWZ0KSxpc05hTigrQ2UuUmlnaHQpfHwoeFsiIW1hcmdpbnMiXS5yaWdodD0rQ2UuUmlnaHQpLGlzTmFOKCtDZS5Cb3R0'@;
put 'b20pfHwoeFsiIW1hcmdpbnMiXS5ib3R0b209K0NlLkJvdHRvbSk7YnJlYWs7Y2FzZSJkaXNwbGF5cmlnaHR0b2xlZnQiOk8uVmlld3N8fChPLlZpZXdzPVtdKSxPLlZpZXdzWzBdfHwoTy5WaWV3c1swXT17fSksTy5WaWV3c1swXS5SVEw9ITA7YnJlYWs7Y2FzZSJmcmVlemVwYW5lcyI6Y2Fz'@;
put 'ZSJmcm96ZW5ub3NwbGl0IjpjYXNlInNwbGl0aG9yaXpvbnRhbCI6Y2FzZSJzcGxpdHZlcnRpY2FsIjpjYXNlImRvbm90ZGlzcGxheWdyaWRsaW5lcyI6Y2FzZSJhY3RpdmVyb3ciOmNhc2UiYWN0aXZlY29sIjpjYXNlInRvcHJvd2JvdHRvbXBhbmUiOmNhc2UibGVmdGNvbHVtbnJpZ2h0cGFu'@;
put 'ZSI6Y2FzZSJ1bnN5bmNlZCI6Y2FzZSJwcmludCI6Y2FzZSJwcmludGVycm9ycyI6Y2FzZSJwYW5lcyI6Y2FzZSJzY2FsZSI6Y2FzZSJwYW5lIjpjYXNlIm51bWJlciI6Y2FzZSJsYXlvdXQiOmNhc2UicGFnZXNldHVwIjpjYXNlInNlbGVjdGVkIjpjYXNlInByb3RlY3RvYmplY3RzIjpjYXNl'@;
put 'ImVuYWJsZXNlbGVjdGlvbiI6Y2FzZSJwcm90ZWN0c2NlbmFyaW9zIjpjYXNlInZhbGlkcHJpbnRlcmluZm8iOmNhc2UiaG9yaXpvbnRhbHJlc29sdXRpb24iOmNhc2UidmVydGljYWxyZXNvbHV0aW9uIjpjYXNlIm51bWJlcm9mY29waWVzIjpjYXNlImFjdGl2ZXBhbmUiOmNhc2UidG9wcm93'@;
put 'dmlzaWJsZSI6Y2FzZSJsZWZ0Y29sdW1udmlzaWJsZSI6Y2FzZSJmaXR0b3BhZ2UiOmNhc2UicmFuZ2VzZWxlY3Rpb24iOmNhc2UicGFwZXJzaXplaW5kZXgiOmNhc2UicGFnZWxheW91dHpvb20iOmNhc2UicGFnZWJyZWFrem9vbSI6Y2FzZSJmaWx0ZXJvbiI6Y2FzZSJmaXR3aWR0aCI6Y2Fz'@;
put 'ZSJmaXRoZWlnaHQiOmNhc2UiY29tbWVudHNsYXlvdXQiOmNhc2Uiem9vbSI6Y2FzZSJsZWZ0dG9yaWdodCI6Y2FzZSJncmlkbGluZXMiOmNhc2UiYWxsb3dzb3J0IjpjYXNlImFsbG93ZmlsdGVyIjpjYXNlImFsbG93aW5zZXJ0cm93cyI6Y2FzZSJhbGxvd2RlbGV0ZXJvd3MiOmNhc2UiYWxs'@;
put 'b3dpbnNlcnRjb2xzIjpjYXNlImFsbG93ZGVsZXRlY29scyI6Y2FzZSJhbGxvd2luc2VydGh5cGVybGlua3MiOmNhc2UiYWxsb3dmb3JtYXRjZWxscyI6Y2FzZSJhbGxvd3NpemVjb2xzIjpjYXNlImFsbG93c2l6ZXJvd3MiOmNhc2UidGFiY29sb3JpbmRleCI6Y2FzZSJkb25vdGRpc3BsYXlo'@;
put 'ZWFkaW5ncyI6Y2FzZSJzaG93cGFnZWxheW91dHpvb20iOmNhc2UiYmxhY2thbmR3aGl0ZSI6Y2FzZSJkb25vdGRpc3BsYXl6ZXJvcyI6Y2FzZSJkaXNwbGF5cGFnZWJyZWFrIjpjYXNlInJvd2NvbGhlYWRpbmdzIjpjYXNlImRvbm90ZGlzcGxheW91dGxpbmUiOmNhc2Uibm9vcmllbnRhdGlv'@;
put 'biI6Y2FzZSJhbGxvd3VzZXBpdm90dGFibGVzIjpjYXNlInplcm9oZWlnaHQiOmNhc2Uidmlld2FibGVyYW5nZSI6Y2FzZSJzZWxlY3Rpb24iOmNhc2UicHJvdGVjdGNvbnRlbnRzIjpicmVhaztjYXNlIm5vc3VtbWFyeXJvd3NiZWxvd2RldGFpbCI6eFsiIW91dGxpbmUiXXx8KHhbIiFvdXRs'@;
put 'aW5lIl09e30pLHhbIiFvdXRsaW5lIl0uYWJvdmU9ITA7YnJlYWs7Y2FzZSJub3N1bW1hcnljb2x1bW5zcmlnaHRkZXRhaWwiOnhbIiFvdXRsaW5lIl18fCh4WyIhb3V0bGluZSJdPXt9KSx4WyIhb3V0bGluZSJdLmxlZnQ9ITA7YnJlYWs7ZGVmYXVsdDpMZT0hMX1icmVhaztjYXNlInBpdm90'@;
put 'dGFibGUiOmNhc2UicGl2b3RjYWNoZSI6c3dpdGNoKGZbM10pe2Nhc2UiaW1tZWRpYXRlaXRlbXNvbmRyb3AiOmNhc2Uic2hvd3BhZ2VtdWx0aXBsZWl0ZW1sYWJlbCI6Y2FzZSJjb21wYWN0cm93aW5kZW50IjpjYXNlImxvY2F0aW9uIjpjYXNlInBpdm90ZmllbGQiOmNhc2Uib3JpZW50YXRp'@;
put 'b24iOmNhc2UibGF5b3V0Zm9ybSI6Y2FzZSJsYXlvdXRzdWJ0b3RhbGxvY2F0aW9uIjpjYXNlImxheW91dGNvbXBhY3Ryb3ciOmNhc2UicG9zaXRpb24iOmNhc2UicGl2b3RpdGVtIjpjYXNlImRhdGF0eXBlIjpjYXNlImRhdGFmaWVsZCI6Y2FzZSJzb3VyY2VuYW1lIjpjYXNlInBhcmVudGZp'@;
put 'ZWxkIjpjYXNlInB0bGluZWl0ZW1zIjpjYXNlInB0bGluZWl0ZW0iOmNhc2UiY291bnRvZnNhbWVpdGVtcyI6Y2FzZSJpdGVtIjpjYXNlIml0ZW10eXBlIjpjYXNlInB0c291cmNlIjpjYXNlImNhY2hlaW5kZXgiOmNhc2UiY29uc29saWRhdGlvbnJlZmVyZW5jZSI6Y2FzZSJmaWxlbmFtZSI6'@;
put 'Y2FzZSJyZWZlcmVuY2UiOmNhc2Uibm9jb2x1bW5ncmFuZCI6Y2FzZSJub3Jvd2dyYW5kIjpjYXNlImJsYW5rbGluZWFmdGVyaXRlbXMiOmNhc2UiaGlkZGVuIjpjYXNlInN1YnRvdGFsIjpjYXNlImJhc2VmaWVsZCI6Y2FzZSJtYXBjaGlsZGl0ZW1zIjpjYXNlImZ1bmN0aW9uIjpjYXNlInJl'@;
put 'ZnJlc2hvbmZpbGVvcGVuIjpjYXNlInByaW50c2V0dGl0bGVzIjpjYXNlIm1lcmdlbGFiZWxzIjpjYXNlImRlZmF1bHR2ZXJzaW9uIjpjYXNlInJlZnJlc2huYW1lIjpjYXNlInJlZnJlc2hkYXRlIjpjYXNlInJlZnJlc2hkYXRlY29weSI6Y2FzZSJ2ZXJzaW9ubGFzdHJlZnJlc2giOmNhc2Ui'@;
put 'dmVyc2lvbmxhc3R1cGRhdGUiOmNhc2UidmVyc2lvbnVwZGF0ZWFibGVtaW4iOmNhc2UidmVyc2lvbnJlZnJlc2hhYmxlbWluIjpjYXNlImNhbGN1bGF0aW9uIjpicmVhaztkZWZhdWx0OkxlPSExfWJyZWFrO2Nhc2UicGFnZWJyZWFrcyI6c3dpdGNoKGZbM10pe2Nhc2UiY29sYnJlYWtzIjpj'@;
put 'YXNlImNvbGJyZWFrIjpjYXNlInJvd2JyZWFrcyI6Y2FzZSJyb3dicmVhayI6Y2FzZSJjb2xzdGFydCI6Y2FzZSJjb2xlbmQiOmNhc2Uicm93ZW5kIjpicmVhaztkZWZhdWx0OkxlPSExfWJyZWFrO2Nhc2UiYXV0b2ZpbHRlciI6c3dpdGNoKGZbM10pe2Nhc2UiYXV0b2ZpbHRlcmNvbHVtbiI6'@;
put 'Y2FzZSJhdXRvZmlsdGVyY29uZGl0aW9uIjpjYXNlImF1dG9maWx0ZXJhbmQiOmNhc2UiYXV0b2ZpbHRlcm9yIjpicmVhaztkZWZhdWx0OkxlPSExfWJyZWFrO2Nhc2UicXVlcnl0YWJsZSI6c3dpdGNoKGZbM10pe2Nhc2UiaWQiOmNhc2UiYXV0b2Zvcm1hdGZvbnQiOmNhc2UiYXV0b2Zvcm1h'@;
put 'dHBhdHRlcm4iOmNhc2UicXVlcnlzb3VyY2UiOmNhc2UicXVlcnl0eXBlIjpjYXNlImVuYWJsZXJlZGlyZWN0aW9ucyI6Y2FzZSJyZWZyZXNoZWRpbnhsOSI6Y2FzZSJ1cmxzdHJpbmciOmNhc2UiaHRtbHRhYmxlcyI6Y2FzZSJjb25uZWN0aW9uIjpjYXNlImNvbW1hbmR0ZXh0IjpjYXNlInJl'@;
put 'ZnJlc2hpbmZvIjpjYXNlIm5vdGl0bGVzIjpjYXNlIm5leHRpZCI6Y2FzZSJjb2x1bW5pbmZvIjpjYXNlIm92ZXJ3cml0ZWNlbGxzIjpjYXNlImRvbm90cHJvbXB0Zm9yZmlsZSI6Y2FzZSJ0ZXh0d2l6YXJkc2V0dGluZ3MiOmNhc2Uic291cmNlIjpjYXNlIm51bWJlciI6Y2FzZSJkZWNpbWFs'@;
put 'IjpjYXNlInRob3VzYW5kc2VwYXJhdG9yIjpjYXNlInRyYWlsaW5nbWludXNudW1iZXJzIjpjYXNlImZvcm1hdHNldHRpbmdzIjpjYXNlImZpZWxkdHlwZSI6Y2FzZSJkZWxpbWl0ZXJzIjpjYXNlInRhYiI6Y2FzZSJjb21tYSI6Y2FzZSJhdXRvZm9ybWF0bmFtZSI6Y2FzZSJ2ZXJzaW9ubGFz'@;
put 'dGVkaXQiOmNhc2UidmVyc2lvbmxhc3RyZWZyZXNoIjpicmVhaztkZWZhdWx0OkxlPSExfWJyZWFrO2Nhc2UiZGF0YXZhbGlkYXRpb24iOnN3aXRjaChmWzNdKXtjYXNlInJhbmdlIjpjYXNlInR5cGUiOmNhc2UibWluIjpjYXNlIm1heCI6Y2FzZSJzb3J0IjpjYXNlImRlc2NlbmRpbmciOmNh'@;
put 'c2Uib3JkZXIiOmNhc2UiY2FzZXNlbnNpdGl2ZSI6Y2FzZSJ2YWx1ZSI6Y2FzZSJlcnJvcnN0eWxlIjpjYXNlImVycm9ybWVzc2FnZSI6Y2FzZSJlcnJvcnRpdGxlIjpjYXNlImlucHV0bWVzc2FnZSI6Y2FzZSJpbnB1dHRpdGxlIjpjYXNlImNvbWJvaGlkZSI6Y2FzZSJpbnB1dGhpZGUiOmNh'@;
put 'c2UiY29uZGl0aW9uIjpjYXNlInF1YWxpZmllciI6Y2FzZSJ1c2VibGFuayI6Y2FzZSJ2YWx1ZTEiOmNhc2UidmFsdWUyIjpjYXNlImZvcm1hdCI6Y2FzZSJjZWxscmFuZ2VsaXN0IjpicmVhaztkZWZhdWx0OkxlPSExfWJyZWFrO2Nhc2Uic29ydGluZyI6Y2FzZSJjb25kaXRpb25hbGZvcm1h'@;
put 'dHRpbmciOnN3aXRjaChmWzNdKXtjYXNlInJhbmdlIjpjYXNlInR5cGUiOmNhc2UibWluIjpjYXNlIm1heCI6Y2FzZSJzb3J0IjpjYXNlImRlc2NlbmRpbmciOmNhc2Uib3JkZXIiOmNhc2UiY2FzZXNlbnNpdGl2ZSI6Y2FzZSJ2YWx1ZSI6Y2FzZSJlcnJvcnN0eWxlIjpjYXNlImVycm9ybWVz'@;
put 'c2FnZSI6Y2FzZSJlcnJvcnRpdGxlIjpjYXNlImNlbGxyYW5nZWxpc3QiOmNhc2UiaW5wdXRtZXNzYWdlIjpjYXNlImlucHV0dGl0bGUiOmNhc2UiY29tYm9oaWRlIjpjYXNlImlucHV0aGlkZSI6Y2FzZSJjb25kaXRpb24iOmNhc2UicXVhbGlmaWVyIjpjYXNlInVzZWJsYW5rIjpjYXNlInZh'@;
put 'bHVlMSI6Y2FzZSJ2YWx1ZTIiOmNhc2UiZm9ybWF0IjpicmVhaztkZWZhdWx0OkxlPSExfWJyZWFrO2Nhc2UibWFwaW5mbyI6Y2FzZSJzY2hlbWEiOmNhc2UiZGF0YSI6c3dpdGNoKGZbM10pe2Nhc2UibWFwIjpjYXNlImVudHJ5IjpjYXNlInJhbmdlIjpjYXNlInhwYXRoIjpjYXNlImZpZWxk'@;
put 'IjpjYXNlInhzZHR5cGUiOmNhc2UiZmlsdGVyb24iOmNhc2UiYWdncmVnYXRlIjpjYXNlImVsZW1lbnR0eXBlIjpjYXNlImF0dHJpYnV0ZXR5cGUiOmNhc2Uic2NoZW1hIjpjYXNlImVsZW1lbnQiOmNhc2UiY29tcGxleHR5cGUiOmNhc2UiZGF0YXR5cGUiOmNhc2UiYWxsIjpjYXNlImF0dHJp'@;
put 'YnV0ZSI6Y2FzZSJleHRlbmRzIjpjYXNlInJvdyI6YnJlYWs7ZGVmYXVsdDpMZT0hMX1icmVhaztjYXNlInNtYXJ0dGFncyI6YnJlYWs7ZGVmYXVsdDpMZT0hMX1pZihMZXx8ZlszXS5tYXRjaCgvIVxbQ0RBVEEvKSlicmVhaztpZighY1tjLmxlbmd0aC0xXVsxXSl0aHJvdyJVbnJlY29nbml6'@;
put 'ZWQgdGFnOiAiK2ZbM10rInwiK2Muam9pbigifCIpO2lmKCJjdXN0b21kb2N1bWVudHByb3BlcnRpZXMiPT09Y1tjLmxlbmd0aC0xXVswXSl7aWYoIi8+Ij09PWZbMF0uc2xpY2UoLTIpKWJyZWFrOyIvIj09PWZbMV0/WHAoWCxqLGVlLGEuc2xpY2UoYixmLmluZGV4KSk6KGVlPWYsYj1mLmlu'@;
put 'ZGV4K2ZbMF0ubGVuZ3RoKTticmVha31pZihyLldURil0aHJvdyJVbnJlY29nbml6ZWQgdGFnOiAiK2ZbM10rInwiK2Muam9pbigifCIpfXZhciBvZT17fTtyZXR1cm4hci5ib29rU2hlZXRzJiYhci5ib29rUHJvcHMmJihvZS5TaGVldHM9bCksb2UuU2hlZXROYW1lcz1oLG9lLldvcmtib29r'@;
put 'PU8sb2UuU1NGPU1lKHBlKSxvZS5Qcm9wcz1WLG9lLkN1c3Rwcm9wcz1YLG9lfWZ1bmN0aW9uIFVuKGUsdCl7c3dpdGNoKCRuKHQ9dHx8e30pLHQudHlwZXx8ImJhc2U2NCIpe2Nhc2UiYmFzZTY0IjpyZXR1cm4gTW4oT3IoZSksdCk7Y2FzZSJiaW5hcnkiOmNhc2UiYnVmZmVyIjpjYXNlImZp'@;
put 'bGUiOnJldHVybiBNbihlLHQpO2Nhc2UiYXJyYXkiOnJldHVybiBNbih3dChlKSx0KX19dmFyIGZtPVs2MCwxMDg0LDIwNjYsMjE2NSwyMTc1XTtmdW5jdGlvbiBjbShlLHQscixhLG4pe3ZhciBpPWEscz1bXSxmPXIuc2xpY2Uoci5sLHIubCtpKTtpZihuJiZuLmVuYyYmbi5lbmMuaW5zaXR1'@;
put 'JiZmLmxlbmd0aD4wKXN3aXRjaChlKXtjYXNlIDk6Y2FzZSA1MjE6Y2FzZSAxMDMzOmNhc2UgMjA1NzpjYXNlIDQ3OmNhc2UgNDA1OmNhc2UgMjI1OmNhc2UgNDA2OmNhc2UgMzEyOmNhc2UgNDA0OmNhc2UgMTA6Y2FzZSAxMzM6YnJlYWs7ZGVmYXVsdDpuLmVuYy5pbnNpdHUoZil9cy5wdXNo'@;
put 'KGYpLHIubCs9aTtmb3IodmFyIGM9dXQocixyLmwpLG89V25bY10sbD0wO251bGwhPW8mJmZtLmluZGV4T2YoYyk+LTE7KWk9dXQocixyLmwrMiksbD1yLmwrNCwyMDY2PT1jP2wrPTQ6KDIxNjU9PWN8fDIxNzU9PWMpJiYobCs9MTIpLGY9ci5zbGljZShsLHIubCs0K2kpLHMucHVzaChmKSxy'@;
put 'LmwrPTQraSxvPVduW2M9dXQocixyLmwpXTt2YXIgaD1mcihzKTtocihoLDApO3ZhciB4PTA7aC5sZW5zPVtdO2Zvcih2YXIgZD0wO2Q8cy5sZW5ndGg7KytkKWgubGVucy5wdXNoKHgpLHgrPXNbZF0ubGVuZ3RoO2lmKGgubGVuZ3RoPGEpdGhyb3ciWExTIFJlY29yZCAweCIrZS50b1N0cmlu'@;
put 'ZygxNikrIiBUcnVuY2F0ZWQ6ICIraC5sZW5ndGgrIiA8ICIrYTtyZXR1cm4gdC5mKGgsaC5sZW5ndGgsbil9ZnVuY3Rpb24gaXQoZSx0LHIpe2lmKCJ6IiE9PWUudCYmZS5YRil7dmFyIGE9MDt0cnl7YT1lLnp8fGUuWEYubnVtRm10SWR8fDAsdC5jZWxsTkYmJihlLno9cGVbYV0pfWNhdGNo'@;
put 'KGkpe2lmKHQuV1RGKXRocm93IGl9aWYoIXR8fCExIT09dC5jZWxsVGV4dCl0cnl7ZS53PSJlIj09PWUudD9lLnd8fHh0W2Uudl06MD09PWF8fCJHZW5lcmFsIj09YT8ibiI9PT1lLnQ/KDB8ZS52KT09PWUudj9lLnYudG9TdHJpbmcoMTApOmthKGUudik6TnQoZS52KTpScihhLGUudix7ZGF0'@;
put 'ZTE5MDQ6ISFyLGRhdGVORjp0JiZ0LmRhdGVORn0pfWNhdGNoKGkpe2lmKHQuV1RGKXRocm93IGl9aWYodC5jZWxsRGF0ZXMmJmEmJiJuIj09ZS50JiZidChwZVthXXx8U3RyaW5nKGEpKSl7dmFyIG49a3QoZS52KTtuJiYoZS50PSJkIixlLnY9bmV3IERhdGUobi55LG4ubS0xLG4uZCxuLkgs'@;
put 'bi5NLG4uUyxuLnUpKX19fWZ1bmN0aW9uIE8wKGUsdCxyKXtyZXR1cm57djplLGl4ZmU6dCx0OnJ9fXZhciB6YT17U0k6ImUwODU5ZmYyZjk0ZjY4MTBhYjkxMDgwMDJiMjdiM2Q5IixEU0k6IjAyZDVjZGQ1OWMyZTFiMTA5Mzk3MDgwMDJiMmNmOWFlIixVREk6IjA1ZDVjZGQ1OWMyZTFiMTA5'@;
put 'Mzk3MDgwMDJiMmNmOWFlIn07ZnVuY3Rpb24gS2YoZSx0KXt2YXIgcixhLG4saTtpZih0fHwodD17fSksJG4odCkscjAoKSx0LmNvZGVwYWdlJiZlMCh0LmNvZGVwYWdlKSxlLkZ1bGxQYXRocyl7aWYodmUuZmluZChlLCIvZW5jcnlwdGlvbiIpKXRocm93IG5ldyBFcnJvcigiRmlsZSBpcyBw'@;
put 'YXNzd29yZC1wcm90ZWN0ZWQiKTtyPXZlLmZpbmQoZSwiIUNvbXBPYmoiKSxhPXZlLmZpbmQoZSwiL1dvcmtib29rIil8fHZlLmZpbmQoZSwiL0Jvb2siKX1lbHNle3N3aXRjaCh0LnR5cGUpe2Nhc2UiYmFzZTY0IjplPUlyKE9yKGUpKTticmVhaztjYXNlImJpbmFyeSI6ZT1JcihlKTticmVh'@;
put 'aztjYXNlImJ1ZmZlciI6YnJlYWs7Y2FzZSJhcnJheSI6QXJyYXkuaXNBcnJheShlKXx8KGU9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZSkpfWhyKGUsMCksYT17Y29udGVudDplfX1pZihyJiZmdW5jdGlvbiBzbShlKXt2YXIgdD17fSxyPWUuY29udGVudDtpZihyLmw9MjgsdC5BbnNp'@;
put 'VXNlclR5cGU9ci5yZWFkX3NoaWZ0KDAsImxwc3RyLWFuc2kiKSx0LkFuc2lDbGlwYm9hcmRGb3JtYXQ9ZnVuY3Rpb24gcW8oZSl7cmV0dXJuIGxzKGUsMSl9KHIpLHIubGVuZ3RoLXIubDw9NClyZXR1cm4gdDt2YXIgYT1yLnJlYWRfc2hpZnQoNCk7aWYoMD09YXx8YT40MHx8KHIubC09NCx0'@;
put 'LlJlc2VydmVkMT1yLnJlYWRfc2hpZnQoMCwibHBzdHItYW5zaSIpLHIubGVuZ3RoLXIubDw9NCl8fDE5MDc1MDU2NTIhPT0oYT1yLnJlYWRfc2hpZnQoNCkpfHwodC5Vbmljb2RlQ2xpcGJvYXJkRm9ybWF0PWZ1bmN0aW9uIFpvKGUpe3JldHVybiBscyhlLDIpfShyKSwwPT0oYT1yLnJlYWRf'@;
put 'c2hpZnQoNCkpfHxhPjQwKSlyZXR1cm4gdDtyLmwtPTQsdC5SZXNlcnZlZDI9ci5yZWFkX3NoaWZ0KDAsImxwd3N0ciIpfShyKSx0LmJvb2tQcm9wcyYmIXQuYm9va1NoZWV0cyluPXt9O2Vsc2V7dmFyIHM9U2U/ImJ1ZmZlciI6ImFycmF5IjtpZihhJiZhLmNvbnRlbnQpbj1mdW5jdGlvbiBv'@;
put 'bShlLHQpe3ZhciByPXtvcHRzOnt9fSxhPXt9O251bGwhPXplJiZudWxsPT10LmRlbnNlJiYodC5kZW5zZT16ZSk7dmFyIGgsZCx1LHAsZyxOLG49dC5kZW5zZT9bXTp7fSxpPXt9LHM9e30sZj1udWxsLGM9W10sbz0iIixsPXt9LHg9IiIsaz17fSxUPVtdLE09W10sST1bXSx5PXtTaGVldHM6'@;
put 'W10sV0JQcm9wczp7ZGF0ZTE5MDQ6ITF9LFZpZXdzOlt7fV19LFA9e30sUj1mdW5jdGlvbih5ZSl7cmV0dXJuIHllPDg/VnRbeWVdOnllPDY0JiZJW3llLThdfHxWdFt5ZV19LFg9ZnVuY3Rpb24oeWUsWmUsS3Ipe2lmKCEoSz4xfHxLci5zaGVldFJvd3MmJnllLnI+PUtyLnNoZWV0Um93cykp'@;
put 'e2lmKEtyLmNlbGxTdHlsZXMmJlplLlhGJiZaZS5YRi5kYXRhJiZmdW5jdGlvbih5ZSxaZSxLcil7dmFyIHF0LHNyPVplLlhGLmRhdGE7c3ImJnNyLnBhdHRlcm5UeXBlJiZLciYmS3IuY2VsbFN0eWxlcyYmKFplLnM9e30sWmUucy5wYXR0ZXJuVHlwZT1zci5wYXR0ZXJuVHlwZSwocXQ9YmEo'@;
put 'Uihzci5pY3ZGb3JlKSkpJiYoWmUucy5mZ0NvbG9yPXtyZ2I6cXR9KSwocXQ9YmEoUihzci5pY3ZCYWNrKSkpJiYoWmUucy5iZ0NvbG9yPXtyZ2I6cXR9KSl9KDAsWmUsS3IpLGRlbGV0ZSBaZS5peGZlLGRlbGV0ZSBaZS5YRixoPXllLHg9Z2UoeWUpLCghc3x8IXMuc3x8IXMuZSkmJihzPXtz'@;
put 'OntyOjAsYzowfSxlOntyOjAsYzowfX0pLHllLnI8cy5zLnImJihzLnMucj15ZS5yKSx5ZS5jPHMucy5jJiYocy5zLmM9eWUuYykseWUucisxPnMuZS5yJiYocy5lLnI9eWUucisxKSx5ZS5jKzE+cy5lLmMmJihzLmUuYz15ZS5jKzEpLEtyLmNlbGxGb3JtdWxhJiZaZS5mKWZvcih2YXIgc3I9'@;
put 'MDtzcjxULmxlbmd0aDsrK3NyKWlmKCEoVFtzcl1bMF0ucy5jPnllLmN8fFRbc3JdWzBdLnMucj55ZS5yfHxUW3NyXVswXS5lLmM8eWUuY3x8VFtzcl1bMF0uZS5yPHllLnIpKXtaZS5GPXdlKFRbc3JdWzBdKSwoVFtzcl1bMF0ucy5jIT15ZS5jfHxUW3NyXVswXS5zLnIhPXllLnIpJiZkZWxl'@;
put 'dGUgWmUuZixaZS5mJiYoWmUuZj0iIitrcihUW3NyXVsxXSwwLHllLGNlLGIpKTticmVha31Lci5kZW5zZT8oblt5ZS5yXXx8KG5beWUucl09W10pLG5beWUucl1beWUuY109WmUpOm5beF09WmV9fSxiPXtlbmM6ITEsc2JjY2g6MCxzbmFtZXM6W10sc2hhcmVkZjprLGFycmF5ZjpULHJydGFi'@;
put 'aWQ6W10sbGFzdHVzZXI6IiIsYmlmZjo4LGNvZGVwYWdlOjAsd2lubG9ja2VkOjAsY2VsbFN0eWxlczohIXQmJiEhdC5jZWxsU3R5bGVzLFdURjohIXQmJiEhdC53dGZ9O3QucGFzc3dvcmQmJihiLnBhc3N3b3JkPXQucGFzc3dvcmQpO3ZhciBlZSxsZT1bXSxyZT1bXSxkZT1bXSx1ZT1bXSxG'@;
put 'ZT0hMSxjZT1bXTtjZS5TaGVldE5hbWVzPWIuc25hbWVzLGNlLnNoYXJlZGY9Yi5zaGFyZWRmLGNlLmFycmF5Zj1iLmFycmF5ZixjZS5uYW1lcz1bXSxjZS5YVEk9W107dmFyIEQseGU9MCxLPTAsQz0wLFU9W10sTz1bXTtiLmNvZGVwYWdlPTEyMDAsTXIoMTIwMCk7Zm9yKHZhciBqPSExO2Uu'@;
put 'bDxlLmxlbmd0aC0xOyl7dmFyIHNlPWUubCxaPWUucmVhZF9zaGlmdCgyKTtpZigwPT09WiYmMTA9PT14ZSlicmVhazt2YXIgUT1lLmw9PT1lLmxlbmd0aD8wOmUucmVhZF9zaGlmdCgyKSxZPVduW1pdO2lmKFkmJlkuZil7aWYodC5ib29rU2hlZXRzJiYxMzM9PT14ZSYmMTMzIT09WilicmVh'@;
put 'aztpZih4ZT1aLDI9PT1ZLnJ8fDEyPT1ZLnIpe3ZhciBFZT1lLnJlYWRfc2hpZnQoMik7aWYoUS09MiwhYi5lbmMmJkVlIT09WiYmKCgyNTUmRWUpPDw4fEVlPj44KSE9PVopdGhyb3cgbmV3IEVycm9yKCJydCBtaXNtYXRjaDogIitFZSsiIT0iK1opOzEyPT1ZLnImJihlLmwrPTEwLFEtPTEw'@;
put 'KX12YXIgQT17fTtpZihBPTEwPT09Wj9ZLmYoZSxRLGIpOmNtKFosWSxlLFEsYiksMD09SyYmLTE9PT1bOSw1MjEsMTAzMywyMDU3XS5pbmRleE9mKHhlKSljb250aW51ZTtzd2l0Y2goWil7Y2FzZSAzNDpyLm9wdHMuRGF0ZTE5MDQ9eS5XQlByb3BzLmRhdGUxOTA0PUE7YnJlYWs7Y2FzZSAx'@;
put 'MzQ6ci5vcHRzLldyaXRlUHJvdGVjdD0hMDticmVhaztjYXNlIDQ3OmlmKGIuZW5jfHwoZS5sPTApLGIuZW5jPUEsIXQucGFzc3dvcmQpdGhyb3cgbmV3IEVycm9yKCJGaWxlIGlzIHBhc3N3b3JkLXByb3RlY3RlZCIpO2lmKG51bGw9PUEudmFsaWQpdGhyb3cgbmV3IEVycm9yKCJFbmNyeXB0'@;
put 'aW9uIHNjaGVtZSB1bnN1cHBvcnRlZCIpO2lmKCFBLnZhbGlkKXRocm93IG5ldyBFcnJvcigiUGFzc3dvcmQgaXMgaW5jb3JyZWN0Iik7YnJlYWs7Y2FzZSA5MjpiLmxhc3R1c2VyPUE7YnJlYWs7Y2FzZSA2Njp2YXIgUGU9TnVtYmVyKEEpO3N3aXRjaChQZSl7Y2FzZSAyMTAxMDpQZT0xMjAw'@;
put 'O2JyZWFrO2Nhc2UgMzI3Njg6UGU9MWU0O2JyZWFrO2Nhc2UgMzI3Njk6UGU9MTI1Mn1NcihiLmNvZGVwYWdlPVBlKSxqPSEwO2JyZWFrO2Nhc2UgMzE3OmIucnJ0YWJpZD1BO2JyZWFrO2Nhc2UgMjU6Yi53aW5sb2NrZWQ9QTticmVhaztjYXNlIDQzOTpyLm9wdHMuUmVmcmVzaEFsbD1BO2Jy'@;
put 'ZWFrO2Nhc2UgMTI6ci5vcHRzLkNhbGNDb3VudD1BO2JyZWFrO2Nhc2UgMTY6ci5vcHRzLkNhbGNEZWx0YT1BO2JyZWFrO2Nhc2UgMTc6ci5vcHRzLkNhbGNJdGVyPUE7YnJlYWs7Y2FzZSAxMzpyLm9wdHMuQ2FsY01vZGU9QTticmVhaztjYXNlIDE0OnIub3B0cy5DYWxjUHJlY2lzaW9uPUE7'@;
put 'YnJlYWs7Y2FzZSA5NTpyLm9wdHMuQ2FsY1NhdmVSZWNhbGM9QTticmVhaztjYXNlIDE1OmIuQ2FsY1JlZk1vZGU9QTticmVhaztjYXNlIDIyMTE6ci5vcHRzLkZ1bGxDYWxjPUE7YnJlYWs7Y2FzZSAxMjk6QS5mRGlhbG9nJiYoblsiIXR5cGUiXT0iZGlhbG9nIiksQS5mQmVsb3d8fCgoblsi'@;
put 'IW91dGxpbmUiXXx8KG5bIiFvdXRsaW5lIl09e30pKS5hYm92ZT0hMCksQS5mUmlnaHR8fCgoblsiIW91dGxpbmUiXXx8KG5bIiFvdXRsaW5lIl09e30pKS5sZWZ0PSEwKTticmVhaztjYXNlIDIyNDpNLnB1c2goQSk7YnJlYWs7Y2FzZSA0MzA6Y2UucHVzaChbQV0pLGNlW2NlLmxlbmd0aC0x'@;
put 'XS5YVEk9W107YnJlYWs7Y2FzZSAzNTpjYXNlIDU0NzpjZVtjZS5sZW5ndGgtMV0ucHVzaChBKTticmVhaztjYXNlIDI0OmNhc2UgNTM2OkQ9e05hbWU6QS5OYW1lLFJlZjprcihBLnJnY2UsMCxudWxsLGNlLGIpfSxBLml0YWI+MCYmKEQuU2hlZXQ9QS5pdGFiLTEpLGNlLm5hbWVzLnB1c2go'@;
put 'RCksY2VbMF18fChjZVswXT1bXSxjZVswXS5YVEk9W10pLGNlW2NlLmxlbmd0aC0xXS5wdXNoKEEpLCJfeGxubS5fRmlsdGVyRGF0YWJhc2UiPT1BLk5hbWUmJkEuaXRhYj4wJiZBLnJnY2UmJkEucmdjZVswXSYmQS5yZ2NlWzBdWzBdJiYiUHRnQXJlYTNkIj09QS5yZ2NlWzBdWzBdWzBdJiYo'@;
put 'T1tBLml0YWItMV09e3JlZjp3ZShBLnJnY2VbMF1bMF1bMV1bMl0pfSk7YnJlYWs7Y2FzZSAyMjpiLkV4dGVybkNvdW50PUE7YnJlYWs7Y2FzZSAyMzowPT1jZS5sZW5ndGgmJihjZVswXT1bXSxjZVswXS5YVEk9W10pLGNlW2NlLmxlbmd0aC0xXS5YVEk9Y2VbY2UubGVuZ3RoLTFdLlhUSS5j'@;
put 'b25jYXQoQSksY2UuWFRJPWNlLlhUSS5jb25jYXQoQSk7YnJlYWs7Y2FzZSAyMTk2OmlmKGIuYmlmZjw4KWJyZWFrO251bGwhPUQmJihELkNvbW1lbnQ9QVsxXSk7YnJlYWs7Y2FzZSAxODpuWyIhcHJvdGVjdCJdPUE7YnJlYWs7Y2FzZSAxOTowIT09QSYmYi5XVEYmJmNvbnNvbGUuZXJyb3Io'@;
put 'IlBhc3N3b3JkIHZlcmlmaWVyOiAiK0EpO2JyZWFrO2Nhc2UgMTMzOmlbQS5wb3NdPUEsYi5zbmFtZXMucHVzaChBLm5hbWUpO2JyZWFrO2Nhc2UgMTA6aWYoLS1LKWJyZWFrO2lmKHMuZSl7aWYocy5lLnI+MCYmcy5lLmM+MCl7aWYocy5lLnItLSxzLmUuYy0tLG5bIiFyZWYiXT13ZShzKSx0'@;
put 'LnNoZWV0Um93cyYmdC5zaGVldFJvd3M8PXMuZS5yKXt2YXIgQWU9cy5lLnI7cy5lLnI9dC5zaGVldFJvd3MtMSxuWyIhZnVsbHJlZiJdPW5bIiFyZWYiXSxuWyIhcmVmIl09d2Uocykscy5lLnI9QWV9cy5lLnIrKyxzLmUuYysrfWxlLmxlbmd0aD4wJiYoblsiIW1lcmdlcyJdPWxlKSxyZS5s'@;
put 'ZW5ndGg+MCYmKG5bIiFvYmplY3RzIl09cmUpLGRlLmxlbmd0aD4wJiYoblsiIWNvbHMiXT1kZSksdWUubGVuZ3RoPjAmJihuWyIhcm93cyJdPXVlKSx5LlNoZWV0cy5wdXNoKFApfSIiPT09bz9sPW46YVtvXT1uLG49dC5kZW5zZT9bXTp7fTticmVhaztjYXNlIDk6Y2FzZSA1MjE6Y2FzZSAx'@;
put 'MDMzOmNhc2UgMjA1NzppZig4PT09Yi5iaWZmJiYoYi5iaWZmPXs5OjIsNTIxOjMsMTAzMzo0fVtaXXx8ezUxMjoyLDc2ODozLDEwMjQ6NCwxMjgwOjUsMTUzNjo4LDI6Miw3OjJ9W0EuQklGRlZlcl18fDgpLGIuYmlmZmd1ZXNzPTA9PUEuQklGRlZlciwwPT1BLkJJRkZWZXImJjQwOTY9PUEu'@;
put 'ZHQmJihiLmJpZmY9NSxqPSEwLE1yKGIuY29kZXBhZ2U9Mjg1OTEpKSw4PT1iLmJpZmYmJjA9PUEuQklGRlZlciYmMTY9PUEuZHQmJihiLmJpZmY9MiksSysrKWJyZWFrO2lmKG49dC5kZW5zZT9bXTp7fSxiLmJpZmY8OCYmIWomJihqPSEwLE1yKGIuY29kZXBhZ2U9dC5jb2RlcGFnZXx8MTI1'@;
put 'MikpLGIuYmlmZjw1fHwwPT1BLkJJRkZWZXImJjQwOTY9PUEuZHQpeyIiPT09byYmKG89IlNoZWV0MSIpLHM9e3M6e3I6MCxjOjB9LGU6e3I6MCxjOjB9fTt2YXIgTGU9e3BvczplLmwtUSxuYW1lOm99O2lbTGUucG9zXT1MZSxiLnNuYW1lcy5wdXNoKG8pfWVsc2Ugbz0oaVtzZV18fHtuYW1l'@;
put 'OiIifSkubmFtZTszMj09QS5kdCYmKG5bIiF0eXBlIl09ImNoYXJ0IiksNjQ9PUEuZHQmJihuWyIhdHlwZSJdPSJtYWNybyIpLGxlPVtdLHJlPVtdLGIuYXJyYXlmPVQ9W10sZGU9W10sdWU9W10sRmU9ITEsUD17SGlkZGVuOihpW3NlXXx8e2hzOjB9KS5ocyxuYW1lOm99O2JyZWFrO2Nhc2Ug'@;
put 'NTE1OmNhc2UgMzpjYXNlIDI6ImNoYXJ0Ij09blsiIXR5cGUiXSYmKHQuZGVuc2U/KG5bQS5yXXx8W10pW0EuY106bltnZSh7YzpBLmMscjpBLnJ9KV0pJiYrK0EuYyxnPXtpeGZlOkEuaXhmZSxYRjpNW0EuaXhmZV18fHt9LHY6QS52YWwsdDoibiJ9LEM+MCYmKGcuej1VW2cuaXhmZT4+OCY2'@;
put 'M10pLGl0KGcsdCxyLm9wdHMuRGF0ZTE5MDQpLFgoe2M6QS5jLHI6QS5yfSxnLHQpO2JyZWFrO2Nhc2UgNTpjYXNlIDUxNzpnPXtpeGZlOkEuaXhmZSxYRjpNW0EuaXhmZV0sdjpBLnZhbCx0OkEudH0sQz4wJiYoZy56PVVbZy5peGZlPj44JjYzXSksaXQoZyx0LHIub3B0cy5EYXRlMTkwNCks'@;
put 'WCh7YzpBLmMscjpBLnJ9LGcsdCk7YnJlYWs7Y2FzZSA2Mzg6Zz17aXhmZTpBLml4ZmUsWEY6TVtBLml4ZmVdLHY6QS5ya251bSx0OiJuIn0sQz4wJiYoZy56PVVbZy5peGZlPj44JjYzXSksaXQoZyx0LHIub3B0cy5EYXRlMTkwNCksWCh7YzpBLmMscjpBLnJ9LGcsdCk7YnJlYWs7Y2FzZSAx'@;
put 'ODk6Zm9yKHZhciBDZT1BLmM7Q2U8PUEuQzsrK0NlKXt2YXIgb2U9QS5ya3JlY1tDZS1BLmNdWzBdO2c9e2l4ZmU6b2UsWEY6TVtvZV0sdjpBLnJrcmVjW0NlLUEuY11bMV0sdDoibiJ9LEM+MCYmKGcuej1VW2cuaXhmZT4+OCY2M10pLGl0KGcsdCxyLm9wdHMuRGF0ZTE5MDQpLFgoe2M6Q2Us'@;
put 'cjpBLnJ9LGcsdCl9YnJlYWs7Y2FzZSA2OmNhc2UgNTE4OmNhc2UgMTAzMDppZigiU3RyaW5nIj09QS52YWwpe2Y9QTticmVha31pZigoZz1PMChBLnZhbCxBLmNlbGwuaXhmZSxBLnR0KSkuWEY9TVtnLml4ZmVdLHQuY2VsbEZvcm11bGEpe3ZhciBxZT1BLmZvcm11bGE7aWYocWUmJnFlWzBd'@;
put 'JiZxZVswXVswXSYmIlB0Z0V4cCI9PXFlWzBdWzBdWzBdKXt2YXIganI9cWVbMF1bMF1bMV1bMF0sZnQ9cWVbMF1bMF1bMV1bMV0sdnQ9Z2Uoe3I6anIsYzpmdH0pO2tbdnRdP2cuZj0iIitrcihBLmZvcm11bGEsMCxBLmNlbGwsY2UsYik6Zy5GPSgodC5kZW5zZT8obltqcl18fFtdKVtmdF06'@;
put 'blt2dF0pfHx7fSkuRn1lbHNlIGcuZj0iIitrcihBLmZvcm11bGEsMCxBLmNlbGwsY2UsYil9Qz4wJiYoZy56PVVbZy5peGZlPj44JjYzXSksaXQoZyx0LHIub3B0cy5EYXRlMTkwNCksWChBLmNlbGwsZyx0KSxmPUE7YnJlYWs7Y2FzZSA3OmNhc2UgNTE5OmlmKCFmKXRocm93IG5ldyBFcnJv'@;
put 'cigiU3RyaW5nIHJlY29yZCBleHBlY3RzIEZvcm11bGEiKTtmLnZhbD1BLChnPU8wKEEsZi5jZWxsLml4ZmUsInMiKSkuWEY9TVtnLml4ZmVdLHQuY2VsbEZvcm11bGEmJihnLmY9IiIra3IoZi5mb3JtdWxhLDAsZi5jZWxsLGNlLGIpKSxDPjAmJihnLno9VVtnLml4ZmU+PjgmNjNdKSxpdChn'@;
put 'LHQsci5vcHRzLkRhdGUxOTA0KSxYKGYuY2VsbCxnLHQpLGY9bnVsbDticmVhaztjYXNlIDMzOmNhc2UgNTQ1OlQucHVzaChBKTt2YXIgSmE9Z2UoQVswXS5zKTtpZihkPXQuZGVuc2U/KG5bQVswXS5zLnJdfHxbXSlbQVswXS5zLmNdOm5bSmFdLHQuY2VsbEZvcm11bGEmJmQpe2lmKCFmfHwh'@;
put 'SmF8fCFkKWJyZWFrO2QuZj0iIitrcihBWzFdLDAsQVswXSxjZSxiKSxkLkY9d2UoQVswXSl9YnJlYWs7Y2FzZSAxMjEyOmlmKCF0LmNlbGxGb3JtdWxhKWJyZWFrO2lmKHgpe2lmKCFmKWJyZWFrO2tbZ2UoZi5jZWxsKV09QVswXSwoKGQ9dC5kZW5zZT8obltmLmNlbGwucl18fFtdKVtmLmNl'@;
put 'bGwuY106bltnZShmLmNlbGwpXSl8fHt9KS5mPSIiK2tyKEFbMF0sMCxoLGNlLGIpfWJyZWFrO2Nhc2UgMjUzOmc9TzAoY1tBLmlzc3RdLnQsQS5peGZlLCJzIiksY1tBLmlzc3RdLmgmJihnLmg9Y1tBLmlzc3RdLmgpLGcuWEY9TVtnLml4ZmVdLEM+MCYmKGcuej1VW2cuaXhmZT4+OCY2M10p'@;
put 'LGl0KGcsdCxyLm9wdHMuRGF0ZTE5MDQpLFgoe2M6QS5jLHI6QS5yfSxnLHQpO2JyZWFrO2Nhc2UgNTEzOnQuc2hlZXRTdHVicyYmKGc9e2l4ZmU6QS5peGZlLFhGOk1bQS5peGZlXSx0OiJ6In0sQz4wJiYoZy56PVVbZy5peGZlPj44JjYzXSksaXQoZyx0LHIub3B0cy5EYXRlMTkwNCksWCh7'@;
put 'YzpBLmMscjpBLnJ9LGcsdCkpO2JyZWFrO2Nhc2UgMTkwOmlmKHQuc2hlZXRTdHVicylmb3IodmFyIE90PUEuYztPdDw9QS5DOysrT3Qpe3ZhciBMcj1BLml4ZmVbT3QtQS5jXTtnPXtpeGZlOkxyLFhGOk1bTHJdLHQ6InoifSxDPjAmJihnLno9VVtnLml4ZmU+PjgmNjNdKSxpdChnLHQsci5v'@;
put 'cHRzLkRhdGUxOTA0KSxYKHtjOk90LHI6QS5yfSxnLHQpfWJyZWFrO2Nhc2UgMjE0OmNhc2UgNTE2OmNhc2UgNDooZz1PMChBLnZhbCxBLml4ZmUsInMiKSkuWEY9TVtnLml4ZmVdLEM+MCYmKGcuej1VW2cuaXhmZT4+OCY2M10pLGl0KGcsdCxyLm9wdHMuRGF0ZTE5MDQpLFgoe2M6QS5jLHI6'@;
put 'QS5yfSxnLHQpO2JyZWFrO2Nhc2UgMDpjYXNlIDUxMjoxPT09SyYmKHM9QSk7YnJlYWs7Y2FzZSAyNTI6Yz1BO2JyZWFrO2Nhc2UgMTA1NDppZig0PT1iLmJpZmYpe1VbQysrXT1BWzFdO2Zvcih2YXIgcHQ9MDtwdDxDKzE2MyYmcGVbcHRdIT1BWzFdOysrcHQpO3B0Pj0xNjMmJmV0KEFbMV0s'@;
put 'QysxNjMpfWVsc2UgZXQoQVsxXSxBWzBdKTticmVhaztjYXNlIDMwOlVbQysrXT1BO2Zvcih2YXIgSXQ9MDtJdDxDKzE2MyYmcGVbSXRdIT1BOysrSXQpO0l0Pj0xNjMmJmV0KEEsQysxNjMpO2JyZWFrO2Nhc2UgMjI5OmxlPWxlLmNvbmNhdChBKTticmVhaztjYXNlIDkzOnJlW0EuY21vWzBd'@;
put 'XT1iLmxhc3RvYmo9QTticmVhaztjYXNlIDQzODpiLmxhc3RvYmouVHhPPUE7YnJlYWs7Y2FzZSAxMjc6Yi5sYXN0b2JqLkltRGF0YT1BO2JyZWFrO2Nhc2UgNDQwOmZvcihwPUFbMF0ucy5yO3A8PUFbMF0uZS5yOysrcClmb3IodT1BWzBdLnMuYzt1PD1BWzBdLmUuYzsrK3UpKGQ9dC5kZW5z'@;
put 'ZT8obltwXXx8W10pW3VdOm5bZ2Uoe2M6dSxyOnB9KV0pJiYoZC5sPUFbMV0pO2JyZWFrO2Nhc2UgMjA0ODpmb3IocD1BWzBdLnMucjtwPD1BWzBdLmUucjsrK3ApZm9yKHU9QVswXS5zLmM7dTw9QVswXS5lLmM7Kyt1KShkPXQuZGVuc2U/KG5bcF18fFtdKVt1XTpuW2dlKHtjOnUscjpwfSld'@;
put 'KSYmZC5sJiYoZC5sLlRvb2x0aXA9QVsxXSk7YnJlYWs7Y2FzZSAyODppZihiLmJpZmY8PTUmJmIuYmlmZj49MilicmVhaztkPXQuZGVuc2U/KG5bQVswXS5yXXx8W10pW0FbMF0uY106bltnZShBWzBdKV07dmFyIHFhPXJlW0FbMl1dO2R8fCh0LmRlbnNlPyhuW0FbMF0ucl18fChuW0FbMF0u'@;
put 'cl09W10pLGQ9bltBWzBdLnJdW0FbMF0uY109e3Q6InoifSk6ZD1uW2dlKEFbMF0pXT17dDoieiJ9LHMuZS5yPU1hdGgubWF4KHMuZS5yLEFbMF0ucikscy5zLnI9TWF0aC5taW4ocy5zLnIsQVswXS5yKSxzLmUuYz1NYXRoLm1heChzLmUuYyxBWzBdLmMpLHMucy5jPU1hdGgubWluKHMucy5j'@;
put 'LEFbMF0uYykpLGQuY3x8KGQuYz1bXSksZC5jLnB1c2goe2E6QVsxXSx0OnFhLlR4Ty50fSk7YnJlYWs7Y2FzZSAyMTczOnExKDAsQS5leHQpO2JyZWFrO2Nhc2UgMTI1OmlmKCFiLmNlbGxTdHlsZXMpYnJlYWs7Zm9yKDtBLmU+PUEuczspZGVbQS5lLS1dPXt3aWR0aDpBLncvMjU2LGxldmVs'@;
put 'OkEubGV2ZWx8fDAsaGlkZGVuOiEhKDEmQS5mbGFncyl9LEZlfHwoRmU9ITAsQW4oQS53LzI1NikpLEt0KGRlW0EuZSsxXSk7YnJlYWs7Y2FzZSA1MjA6dmFyIHlyPXt9O251bGwhPUEubGV2ZWwmJih1ZVtBLnJdPXlyLHlyLmxldmVsPUEubGV2ZWwpLEEuaGlkZGVuJiYodWVbQS5yXT15cix5'@;
put 'ci5oaWRkZW49ITApLEEuaHB0JiYodWVbQS5yXT15cix5ci5ocHQ9QS5ocHQseXIuaHB4PW9hKEEuaHB0KSk7YnJlYWs7Y2FzZSAzODpjYXNlIDM5OmNhc2UgNDA6Y2FzZSA0MTpuWyIhbWFyZ2lucyJdfHxZdChuWyIhbWFyZ2lucyJdPXt9KSxuWyIhbWFyZ2lucyJdW3szODoibGVmdCIsMzk6'@;
put 'InJpZ2h0Iiw0MDoidG9wIiw0MToiYm90dG9tIn1bWl1dPUE7YnJlYWs7Y2FzZSAxNjE6blsiIW1hcmdpbnMiXXx8WXQoblsiIW1hcmdpbnMiXT17fSksblsiIW1hcmdpbnMiXS5oZWFkZXI9QS5oZWFkZXIsblsiIW1hcmdpbnMiXS5mb290ZXI9QS5mb290ZXI7YnJlYWs7Y2FzZSA1NzQ6QS5S'@;
put 'VEwmJih5LlZpZXdzWzBdLlJUTD0hMCk7YnJlYWs7Y2FzZSAxNDY6ST1BO2JyZWFrO2Nhc2UgMjE5ODplZT1BO2JyZWFrO2Nhc2UgMTQwOk49QTticmVhaztjYXNlIDQ0MjpvP1AuQ29kZU5hbWU9QXx8UC5uYW1lOnkuV0JQcm9wcy5Db2RlTmFtZT1BfHwiVGhpc1dvcmtib29rIn19ZWxzZSBZ'@;
put 'fHxjb25zb2xlLmVycm9yKCJNaXNzaW5nIEluZm8gZm9yIFhMUyBSZWNvcmQgMHgiK1oudG9TdHJpbmcoMTYpKSxlLmwrPVF9cmV0dXJuIHIuU2hlZXROYW1lcz0kZShpKS5zb3J0KGZ1bmN0aW9uKGN0LHllKXtyZXR1cm4gTnVtYmVyKGN0KS1OdW1iZXIoeWUpfSkubWFwKGZ1bmN0aW9uKGN0'@;
put 'KXtyZXR1cm4gaVtjdF0ubmFtZX0pLHQuYm9va1NoZWV0c3x8KHIuU2hlZXRzPWEpLCFyLlNoZWV0TmFtZXMubGVuZ3RoJiZsWyIhcmVmIl0/KHIuU2hlZXROYW1lcy5wdXNoKCJTaGVldDEiKSxyLlNoZWV0cyYmKHIuU2hlZXRzLlNoZWV0MT1sKSk6ci5QcmVhbWJsZT1sLHIuU2hlZXRzJiZP'@;
put 'LmZvckVhY2goZnVuY3Rpb24oY3QseWUpe3IuU2hlZXRzW3IuU2hlZXROYW1lc1t5ZV1dWyIhYXV0b2ZpbHRlciJdPWN0fSksci5TdHJpbmdzPWMsci5TU0Y9TWUocGUpLGIuZW5jJiYoci5FbmNyeXB0aW9uPWIuZW5jKSxlZSYmKHIuVGhlbWVzPWVlKSxyLk1ldGFkYXRhPXt9LHZvaWQgMCE9'@;
put 'PU4mJihyLk1ldGFkYXRhLkNvdW50cnk9TiksY2UubmFtZXMubGVuZ3RoPjAmJih5Lk5hbWVzPWNlLm5hbWVzKSxyLldvcmtib29rPXkscn0oYS5jb250ZW50LHQpO2Vsc2UgaWYoKGk9dmUuZmluZChlLCJQZXJmZWN0T2ZmaWNlX01BSU4iKSkmJmkuY29udGVudCluPWp0LnRvX3dvcmtib29r'@;
put 'KGkuY29udGVudCwodC50eXBlPXMsdCkpO2Vsc2V7aWYoIShpPXZlLmZpbmQoZSwiTmF0aXZlQ29udGVudF9NQUlOIikpfHwhaS5jb250ZW50KXRocm93KGk9dmUuZmluZChlLCJNTjAiKSkmJmkuY29udGVudD9uZXcgRXJyb3IoIlVuc3VwcG9ydGVkIFdvcmtzIDQgZm9yIE1hYyBmaWxlIik6'@;
put 'bmV3IEVycm9yKCJDYW5ub3QgZmluZCBXb3JrYm9vayBzdHJlYW0iKTtuPWp0LnRvX3dvcmtib29rKGkuY29udGVudCwodC50eXBlPXMsdCkpfXQuYm9va1ZCQSYmZS5GdWxsUGF0aHMmJnZlLmZpbmQoZSwiL19WQkFfUFJPSkVDVF9DVVIvVkJBL2RpciIpJiYobi52YmFyYXc9ZnVuY3Rpb24g'@;
put 'RngoZSl7dmFyIHQ9dmUudXRpbHMuY2ZiX25ldyh7cm9vdDoiUiJ9KTtyZXR1cm4gZS5GdWxsUGF0aHMuZm9yRWFjaChmdW5jdGlvbihyLGEpe2lmKCIvIiE9PXIuc2xpY2UoLTEpJiZyLm1hdGNoKC9fVkJBX1BST0pFQ1RfQ1VSLykpe3ZhciBuPXIucmVwbGFjZSgvXlteXC9dKi8sIlIiKS5y'@;
put 'ZXBsYWNlKC9cL19WQkFfUFJPSkVDVF9DVVJcdTAwMDAqLywiIik7dmUudXRpbHMuY2ZiX2FkZCh0LG4sZS5GaWxlSW5kZXhbYV0uY29udGVudCl9fSksdmUud3JpdGUodCl9KGUpKX12YXIgZj17fTtyZXR1cm4gZS5GdWxsUGF0aHMmJmZ1bmN0aW9uIGxtKGUsdCxyKXt2YXIgYT12ZS5maW5k'@;
put 'KGUsIi8hRG9jdW1lbnRTdW1tYXJ5SW5mb3JtYXRpb24iKTtpZihhJiZhLnNpemU+MCl0cnl7dmFyIG49UnMoYSx4bix6YS5EU0kpO2Zvcih2YXIgaSBpbiBuKXRbaV09bltpXX1jYXRjaChvKXtpZihyLldURil0aHJvdyBvfXZhciBzPXZlLmZpbmQoZSwiLyFTdW1tYXJ5SW5mb3JtYXRpb24i'@;
put 'KTtpZihzJiZzLnNpemU+MCl0cnl7dmFyIGY9UnMocyxkbix6YS5TSSk7Zm9yKHZhciBjIGluIGYpbnVsbD09dFtjXSYmKHRbY109ZltjXSl9Y2F0Y2gobyl7aWYoci5XVEYpdGhyb3cgb310LkhlYWRpbmdQYWlycyYmdC5UaXRsZXNPZlBhcnRzJiYod3ModC5IZWFkaW5nUGFpcnMsdC5UaXRs'@;
put 'ZXNPZlBhcnRzLHQsciksZGVsZXRlIHQuSGVhZGluZ1BhaXJzLGRlbGV0ZSB0LlRpdGxlc09mUGFydHMpfShlLGYsdCksbi5Qcm9wcz1uLkN1c3Rwcm9wcz1mLHQuYm9va0ZpbGVzJiYobi5jZmI9ZSksbn12YXIgJGE9ezA6e2Y6ZnVuY3Rpb24gUHYoZSx0KXt2YXIgcj17fSxhPWUubCt0O3Iu'@;
put 'cj1lLnJlYWRfc2hpZnQoNCksZS5sKz00O3ZhciBuPWUucmVhZF9zaGlmdCgyKTtlLmwrPTE7dmFyIGk9ZS5yZWFkX3NoaWZ0KDEpO3JldHVybiBlLmw9YSw3JmkmJihyLmxldmVsPTcmaSksMTYmaSYmKHIuaGlkZGVuPSEwKSwzMiZpJiYoci5ocHQ9bi8yMCkscn19LDE6e2Y6ZnVuY3Rpb24g'@;
put 'WHYoZSl7cmV0dXJuW0hyKGUpXX19LDI6e2Y6ZnVuY3Rpb24gYzIoZSl7cmV0dXJuW0hyKGUpLHVuKGUpLCJuIl19fSwzOntmOmZ1bmN0aW9uIHF2KGUpe3JldHVybltIcihlKSxlLnJlYWRfc2hpZnQoMSksImUiXX19LDQ6e2Y6ZnVuY3Rpb24ganYoZSl7cmV0dXJuW0hyKGUpLGUucmVhZF9z'@;
put 'aGlmdCgxKSwiYiJdfX0sNTp7ZjpmdW5jdGlvbiBpMihlKXtyZXR1cm5bSHIoZSksZ3IoZSksIm4iXX19LDY6e2Y6ZnVuY3Rpb24geDIoZSl7cmV0dXJuW0hyKGUpLG1yKGUpLCJzdHIiXX19LDc6e2Y6ZnVuY3Rpb24gcjIoZSl7cmV0dXJuW0hyKGUpLGUucmVhZF9zaGlmdCg0KSwicyJdfX0s'@;
put 'ODp7ZjpmdW5jdGlvbiB3MihlLHQscil7dmFyIGE9ZS5sK3Qsbj1IcihlKTtuLnI9clsiIXJvdyJdO3ZhciBzPVtuLG1yKGUpLCJzdHIiXTtpZihyLmNlbGxGb3JtdWxhKXtlLmwrPTI7dmFyIGY9QzAoZSxhLWUubCxyKTtzWzNdPWtyKGYsMCxuLHIuc3VwYm9va3Mscil9ZWxzZSBlLmw9YTty'@;
put 'ZXR1cm4gc319LDk6e2Y6ZnVuY3Rpb24gXzIoZSx0LHIpe3ZhciBhPWUubCt0LG49SHIoZSk7bi5yPXJbIiFyb3ciXTt2YXIgcz1bbixncihlKSwibiJdO2lmKHIuY2VsbEZvcm11bGEpe2UubCs9Mjt2YXIgZj1DMChlLGEtZS5sLHIpO3NbM109a3IoZiwwLG4sci5zdXBib29rcyxyKX1lbHNl'@;
put 'IGUubD1hO3JldHVybiBzfX0sMTA6e2Y6ZnVuY3Rpb24gbTIoZSx0LHIpe3ZhciBhPWUubCt0LG49SHIoZSk7bi5yPXJbIiFyb3ciXTt2YXIgcz1bbixlLnJlYWRfc2hpZnQoMSksImIiXTtpZihyLmNlbGxGb3JtdWxhKXtlLmwrPTI7dmFyIGY9QzAoZSxhLWUubCxyKTtzWzNdPWtyKGYsMCxu'@;
put 'LHIuc3VwYm9va3Mscil9ZWxzZSBlLmw9YTtyZXR1cm4gc319LDExOntmOmZ1bmN0aW9uIGcyKGUsdCxyKXt2YXIgYT1lLmwrdCxuPUhyKGUpO24ucj1yWyIhcm93Il07dmFyIHM9W24sZS5yZWFkX3NoaWZ0KDEpLCJlIl07aWYoci5jZWxsRm9ybXVsYSl7ZS5sKz0yO3ZhciBmPUMwKGUsYS1l'@;
put 'Lmwscik7c1szXT1rcihmLDAsbixyLnN1cGJvb2tzLHIpfWVsc2UgZS5sPWE7cmV0dXJuIHN9fSwxMjp7ZjpmdW5jdGlvbiB6dihlKXtyZXR1cm5bTXQoZSldfX0sMTM6e2Y6ZnVuY3Rpb24gbDIoZSl7cmV0dXJuW010KGUpLHVuKGUpLCJuIl19fSwxNDp7ZjpmdW5jdGlvbiBRdihlKXtyZXR1'@;
put 'cm5bTXQoZSksZS5yZWFkX3NoaWZ0KDEpLCJlIl19fSwxNTp7ZjpmdW5jdGlvbiBZdihlKXtyZXR1cm5bTXQoZSksZS5yZWFkX3NoaWZ0KDEpLCJiIl19fSwxNjp7ZjpCZn0sMTc6e2Y6ZnVuY3Rpb24gdjIoZSl7cmV0dXJuW010KGUpLG1yKGUpLCJzdHIiXX19LDE4OntmOmZ1bmN0aW9uIGEy'@;
put 'KGUpe3JldHVybltNdChlKSxlLnJlYWRfc2hpZnQoNCksInMiXX19LDE5OntmOnNufSwyMDp7fSwyMTp7fSwyMjp7fSwyMzp7fSwyNDp7fSwyNTp7fSwyNjp7fSwyNzp7fSwyODp7fSwyOTp7fSwzMDp7fSwzMTp7fSwzMjp7fSwzMzp7fSwzNDp7fSwzNTp7VDoxfSwzNjp7VDotMX0sMzc6e1Q6'@;
put 'MX0sMzg6e1Q6LTF9LDM5OntmOmZ1bmN0aW9uIHBwKGUsdCxyKXt2YXIgYT1lLmwrdDtlLmwrPTQsZS5sKz0xO3ZhciBuPWUucmVhZF9zaGlmdCg0KSxpPWpvKGUpLHM9ZXYoZSwwLHIpLGY9Zm4oZSk7ZS5sPWE7dmFyIGM9e05hbWU6aSxQdGc6c307cmV0dXJuIG48MjY4NDM1NDU1JiYoYy5T'@;
put 'aGVldD1uKSxmJiYoYy5Db21tZW50PWYpLGN9fSw0MDp7fSw0Mjp7fSw0Mzp7ZjpmdW5jdGlvbiB2MShlLHQscil7dmFyIGE9e307YS5zej1lLnJlYWRfc2hpZnQoMikvMjA7dmFyIG49ZnVuY3Rpb24gWW8oZSl7dmFyIHQ9ZS5yZWFkX3NoaWZ0KDEpO3JldHVybiBlLmwrKyx7ZkJvbGQ6MSZ0'@;
put 'LGZJdGFsaWM6MiZ0LGZVbmRlcmxpbmU6NCZ0LGZTdHJpa2VvdXQ6OCZ0LGZPdXRsaW5lOjE2JnQsZlNoYWRvdzozMiZ0LGZDb25kZW5zZTo2NCZ0LGZFeHRlbmQ6MTI4JnR9fShlKTtzd2l0Y2gobi5mSXRhbGljJiYoYS5pdGFsaWM9MSksbi5mQ29uZGVuc2UmJihhLmNvbmRlbnNlPTEpLG4u'@;
put 'ZkV4dGVuZCYmKGEuZXh0ZW5kPTEpLG4uZlNoYWRvdyYmKGEuc2hhZG93PTEpLG4uZk91dGxpbmUmJihhLm91dGxpbmU9MSksbi5mU3RyaWtlb3V0JiYoYS5zdHJpa2U9MSksNzAwPT09ZS5yZWFkX3NoaWZ0KDIpJiYoYS5ib2xkPTEpLGUucmVhZF9zaGlmdCgyKSl7Y2FzZSAxOmEudmVydEFs'@;
put 'aWduPSJzdXBlcnNjcmlwdCI7YnJlYWs7Y2FzZSAyOmEudmVydEFsaWduPSJzdWJzY3JpcHQifXZhciBzPWUucmVhZF9zaGlmdCgxKTswIT1zJiYoYS51bmRlcmxpbmU9cyk7dmFyIGY9ZS5yZWFkX3NoaWZ0KDEpO2Y+MCYmKGEuZmFtaWx5PWYpO3ZhciBjPWUucmVhZF9zaGlmdCgxKTtzd2l0'@;
put 'Y2goYz4wJiYoYS5jaGFyc2V0PWMpLGUubCsrLGEuY29sb3I9ZnVuY3Rpb24gS28oZSl7dmFyIHQ9e30sYT1lLnJlYWRfc2hpZnQoMSk+Pj4xLG49ZS5yZWFkX3NoaWZ0KDEpLGk9ZS5yZWFkX3NoaWZ0KDIsImkiKSxzPWUucmVhZF9zaGlmdCgxKSxmPWUucmVhZF9zaGlmdCgxKSxjPWUucmVh'@;
put 'ZF9zaGlmdCgxKTtzd2l0Y2goZS5sKyssYSl7Y2FzZSAwOnQuYXV0bz0xO2JyZWFrO2Nhc2UgMTp0LmluZGV4PW47dmFyIG89VnRbbl07byYmKHQucmdiPWJhKG8pKTticmVhaztjYXNlIDI6dC5yZ2I9YmEoW3MsZixjXSk7YnJlYWs7Y2FzZSAzOnQudGhlbWU9bn1yZXR1cm4gMCE9aSYmKHQu'@;
put 'dGludD1pPjA/aS8zMjc2NzppLzMyNzY4KSx0fShlKSxlLnJlYWRfc2hpZnQoMSkpe2Nhc2UgMTphLnNjaGVtZT0ibWFqb3IiO2JyZWFrO2Nhc2UgMjphLnNjaGVtZT0ibWlub3IifXJldHVybiBhLm5hbWU9bXIoZSksYX19LDQ0OntmOmZ1bmN0aW9uIHgxKGUsdCl7cmV0dXJuW2UucmVhZF9z'@;
put 'aGlmdCgyKSxtcihlKV19fSw0NTp7ZjpnMX0sNDY6e2Y6dzF9LDQ3OntmOmZ1bmN0aW9uIF8xKGUsdCl7dmFyIHI9ZS5sK3QsYT1lLnJlYWRfc2hpZnQoMiksbj1lLnJlYWRfc2hpZnQoMik7cmV0dXJuIGUubD1yLHtpeGZlOmEsbnVtRm10SWQ6bn19fSw0ODp7fSw0OTp7ZjpmdW5jdGlvbiBI'@;
put 'byhlKXtyZXR1cm4gZS5yZWFkX3NoaWZ0KDQsImkiKX19LDUwOnt9LDUxOntmOmZ1bmN0aW9uIGV4KGUpe2Zvcih2YXIgdD1bXSxyPWUucmVhZF9zaGlmdCg0KTtyLS0gPjA7KXQucHVzaChbZS5yZWFkX3NoaWZ0KDQpLGUucmVhZF9zaGlmdCg0KV0pO3JldHVybiB0fX0sNTI6e1Q6MX0sNTM6'@;
put 'e1Q6LTF9LDU0OntUOjF9LDU1OntUOi0xfSw1Njp7VDoxfSw1Nzp7VDotMX0sNTg6e30sNTk6e30sNjA6e2Y6UXN9LDYyOntmOmZ1bmN0aW9uIGgyKGUpe3JldHVybltIcihlKSxzbihlKSwiaXMiXX19LDYzOntmOmZ1bmN0aW9uIG94KGUpe3ZhciB0PXt9O3QuaT1lLnJlYWRfc2hpZnQoNCk7'@;
put 'dmFyIHI9e307ci5yPWUucmVhZF9zaGlmdCg0KSxyLmM9ZS5yZWFkX3NoaWZ0KDQpLHQucj1nZShyKTt2YXIgYT1lLnJlYWRfc2hpZnQoMSk7cmV0dXJuIDImYSYmKHQubD0iMSIpLDgmYSYmKHQuYT0iMSIpLHR9fSw2NDp7ZjpmdW5jdGlvbiBMMigpe319LDY1Ont9LDY2Ont9LDY3Ont9LDY4'@;
put 'Ont9LDY5Ont9LDcwOnt9LDEyODp7fSwxMjk6e1Q6MX0sMTMwOntUOi0xfSwxMzE6e1Q6MSxmOnByLHA6MH0sMTMyOntUOi0xfSwxMzM6e1Q6MX0sMTM0OntUOi0xfSwxMzU6e1Q6MX0sMTM2OntUOi0xfSwxMzc6e1Q6MSxmOmZ1bmN0aW9uIFIyKGUpe3ZhciB0PWUucmVhZF9zaGlmdCgyKTty'@;
put 'ZXR1cm4gZS5sKz0yOCx7UlRMOjMyJnR9fX0sMTM4OntUOi0xfSwxMzk6e1Q6MX0sMTQwOntUOi0xfSwxNDE6e1Q6MX0sMTQyOntUOi0xfSwxNDM6e1Q6MX0sMTQ0OntUOi0xfSwxNDU6e1Q6MX0sMTQ2OntUOi0xfSwxNDc6e2Y6ZnVuY3Rpb24gSHYoZSx0KXt2YXIgcj17fSxhPWVbZS5sXTty'@;
put 'ZXR1cm4rK2UubCxyLmFib3ZlPSEoNjQmYSksci5sZWZ0PSEoMTI4JmEpLGUubCs9MTgsci5uYW1lPSRvKGUsdC0xOSkscn19LDE0ODp7ZjpNdixwOjE2fSwxNTE6e2Y6ZnVuY3Rpb24geTIoKXt9fSwxNTI6e30sMTUzOntmOmZ1bmN0aW9uIHhwKGUsdCl7dmFyIHI9e30sYT1lLnJlYWRfc2hp'@;
put 'ZnQoNCk7ci5kZWZhdWx0VGhlbWVWZXJzaW9uPWUucmVhZF9zaGlmdCg0KTt2YXIgbj10Pjg/bXIoZSk6IiI7cmV0dXJuIG4ubGVuZ3RoPjAmJihyLkNvZGVOYW1lPW4pLHIuYXV0b0NvbXByZXNzUGljdHVyZXM9ISEoNjU1MzYmYSksci5iYWNrdXBGaWxlPSEhKDY0JmEpLHIuY2hlY2tDb21w'@;
put 'YXRpYmlsaXR5PSEhKDQwOTYmYSksci5kYXRlMTkwND0hISgxJmEpLHIuZmlsdGVyUHJpdmFjeT0hISg4JmEpLHIuaGlkZVBpdm90RmllbGRMaXN0PSEhKDEwMjQmYSksci5wcm9tcHRlZFNvbHV0aW9ucz0hISgxNiZhKSxyLnB1Ymxpc2hJdGVtcz0hISgyMDQ4JmEpLHIucmVmcmVzaEFsbENv'@;
put 'bm5lY3Rpb25zPSEhKDI2MjE0NCZhKSxyLnNhdmVFeHRlcm5hbExpbmtWYWx1ZXM9ISEoMTI4JmEpLHIuc2hvd0JvcmRlclVuc2VsZWN0ZWRUYWJsZXM9ISEoNCZhKSxyLnNob3dJbmtBbm5vdGF0aW9uPSEhKDMyJmEpLHIuc2hvd09iamVjdHM9WyJhbGwiLCJwbGFjZWhvbGRlcnMiLCJub25l'@;
put 'Il1bYT4+MTMmM10sci5zaG93UGl2b3RDaGFydEZpbHRlcj0hISgzMjc2OCZhKSxyLnVwZGF0ZUxpbmtzPVsidXNlclNldCIsIm5ldmVyIiwiYWx3YXlzIl1bYT4+OCYzXSxyfX0sMTU0Ont9LDE1NTp7fSwxNTY6e2Y6ZnVuY3Rpb24gdXAoZSx0KXt2YXIgcj17fTtyZXR1cm4gci5IaWRkZW49'@;
put 'ZS5yZWFkX3NoaWZ0KDQpLHIuaVRhYklEPWUucmVhZF9zaGlmdCg0KSxyLnN0clJlbElEPW9uKGUsdC04KSxyLm5hbWU9bXIoZSkscn19LDE1Nzp7fSwxNTg6e30sMTU5OntUOjEsZjpmdW5jdGlvbiBPaChlKXtyZXR1cm5bZS5yZWFkX3NoaWZ0KDQpLGUucmVhZF9zaGlmdCg0KV19fSwxNjA6'@;
put 'e1Q6LTF9LDE2MTp7VDoxLGY6V3R9LDE2Mjp7VDotMX0sMTYzOntUOjF9LDE2NDp7VDotMX0sMTY1OntUOjF9LDE2Njp7VDotMX0sMTY3Ont9LDE2ODp7fSwxNjk6e30sMTcwOnt9LDE3MTp7fSwxNzI6e1Q6MX0sMTczOntUOi0xfSwxNzQ6e30sMTc1Ont9LDE3Njp7ZjprMn0sMTc3OntUOjF9'@;
put 'LDE3ODp7VDotMX0sMTc5OntUOjF9LDE4MDp7VDotMX0sMTgxOntUOjF9LDE4Mjp7VDotMX0sMTgzOntUOjF9LDE4NDp7VDotMX0sMTg1OntUOjF9LDE4Njp7VDotMX0sMTg3OntUOjF9LDE4ODp7VDotMX0sMTg5OntUOjF9LDE5MDp7VDotMX0sMTkxOntUOjF9LDE5Mjp7VDotMX0sMTkzOntU'@;
put 'OjF9LDE5NDp7VDotMX0sMTk1OntUOjF9LDE5Njp7VDotMX0sMTk3OntUOjF9LDE5ODp7VDotMX0sMTk5OntUOjF9LDIwMDp7VDotMX0sMjAxOntUOjF9LDIwMjp7VDotMX0sMjAzOntUOjF9LDIwNDp7VDotMX0sMjA1OntUOjF9LDIwNjp7VDotMX0sMjA3OntUOjF9LDIwODp7VDotMX0sMjA5'@;
put 'OntUOjF9LDIxMDp7VDotMX0sMjExOntUOjF9LDIxMjp7VDotMX0sMjEzOntUOjF9LDIxNDp7VDotMX0sMjE1OntUOjF9LDIxNjp7VDotMX0sMjE3OntUOjF9LDIxODp7VDotMX0sMjE5OntUOjF9LDIyMDp7VDotMX0sMjIxOntUOjF9LDIyMjp7VDotMX0sMjIzOntUOjF9LDIyNDp7VDotMX0s'@;
put 'MjI1OntUOjF9LDIyNjp7VDotMX0sMjI3OntUOjF9LDIyODp7VDotMX0sMjI5OntUOjF9LDIzMDp7VDotMX0sMjMxOntUOjF9LDIzMjp7VDotMX0sMjMzOntUOjF9LDIzNDp7VDotMX0sMjM1OntUOjF9LDIzNjp7VDotMX0sMjM3OntUOjF9LDIzODp7VDotMX0sMjM5OntUOjF9LDI0MDp7VDot'@;
put 'MX0sMjQxOntUOjF9LDI0Mjp7VDotMX0sMjQzOntUOjF9LDI0NDp7VDotMX0sMjQ1OntUOjF9LDI0Njp7VDotMX0sMjQ3OntUOjF9LDI0ODp7VDotMX0sMjQ5OntUOjF9LDI1MDp7VDotMX0sMjUxOntUOjF9LDI1Mjp7VDotMX0sMjUzOntUOjF9LDI1NDp7VDotMX0sMjU1OntUOjF9LDI1Njp7'@;
put 'VDotMX0sMjU3OntUOjF9LDI1ODp7VDotMX0sMjU5OntUOjF9LDI2MDp7VDotMX0sMjYxOntUOjF9LDI2Mjp7VDotMX0sMjYzOntUOjF9LDI2NDp7VDotMX0sMjY1OntUOjF9LDI2Njp7VDotMX0sMjY3OntUOjF9LDI2ODp7VDotMX0sMjY5OntUOjF9LDI3MDp7VDotMX0sMjcxOntUOjF9LDI3'@;
put 'Mjp7VDotMX0sMjczOntUOjF9LDI3NDp7VDotMX0sMjc1OntUOjF9LDI3Njp7VDotMX0sMjc3Ont9LDI3ODp7VDoxfSwyNzk6e1Q6LTF9LDI4MDp7VDoxfSwyODE6e1Q6LTF9LDI4Mjp7VDoxfSwyODM6e1Q6MX0sMjg0OntUOi0xfSwyODU6e1Q6MX0sMjg2OntUOi0xfSwyODc6e1Q6MX0sMjg4'@;
put 'OntUOi0xfSwyODk6e1Q6MX0sMjkwOntUOi0xfSwyOTE6e1Q6MX0sMjkyOntUOi0xfSwyOTM6e1Q6MX0sMjk0OntUOi0xfSwyOTU6e1Q6MX0sMjk2OntUOi0xfSwyOTc6e1Q6MX0sMjk4OntUOi0xfSwyOTk6e1Q6MX0sMzAwOntUOi0xfSwzMDE6e1Q6MX0sMzAyOntUOi0xfSwzMDM6e1Q6MX0s'@;
put 'MzA0OntUOi0xfSwzMDU6e1Q6MX0sMzA2OntUOi0xfSwzMDc6e1Q6MX0sMzA4OntUOi0xfSwzMDk6e1Q6MX0sMzEwOntUOi0xfSwzMTE6e1Q6MX0sMzEyOntUOi0xfSwzMTM6e1Q6LTF9LDMxNDp7VDoxfSwzMTU6e1Q6LTF9LDMxNjp7VDoxfSwzMTc6e1Q6LTF9LDMxODp7VDoxfSwzMTk6e1Q6'@;
put 'LTF9LDMyMDp7VDoxfSwzMjE6e1Q6LTF9LDMyMjp7VDoxfSwzMjM6e1Q6LTF9LDMyNDp7VDoxfSwzMjU6e1Q6LTF9LDMyNjp7VDoxfSwzMjc6e1Q6LTF9LDMyODp7VDoxfSwzMjk6e1Q6LTF9LDMzMDp7VDoxfSwzMzE6e1Q6LTF9LDMzMjp7VDoxfSwzMzM6e1Q6LTF9LDMzNDp7VDoxfSwzMzU6'@;
put 'e2Y6ZnVuY3Rpb24gWjEoZSx0KXtyZXR1cm57ZmxhZ3M6ZS5yZWFkX3NoaWZ0KDQpLHZlcnNpb246ZS5yZWFkX3NoaWZ0KDQpLG5hbWU6bXIoZSl9fX0sMzM2OntUOi0xfSwzMzc6e2Y6ZnVuY3Rpb24gYXgoZSl7cmV0dXJuIGUubCs9NCwwIT1lLnJlYWRfc2hpZnQoNCl9LFQ6MX0sMzM4OntU'@;
put 'Oi0xfSwzMzk6e1Q6MX0sMzQwOntUOi0xfSwzNDE6e1Q6MX0sMzQyOntUOi0xfSwzNDM6e1Q6MX0sMzQ0OntUOi0xfSwzNDU6e1Q6MX0sMzQ2OntUOi0xfSwzNDc6e1Q6MX0sMzQ4OntUOi0xfSwzNDk6e1Q6MX0sMzUwOntUOi0xfSwzNTE6e30sMzUyOnt9LDM1Mzp7VDoxfSwzNTQ6e1Q6LTF9'@;
put 'LDM1NTp7Zjpvbn0sMzU3Ont9LDM1ODp7fSwzNTk6e30sMzYwOntUOjF9LDM2MTp7fSwzNjI6e2Y6cXN9LDM2Mzp7fSwzNjQ6e30sMzY2Ont9LDM2Nzp7fSwzNjg6e30sMzY5Ont9LDM3MDp7fSwzNzE6e30sMzcyOntUOjF9LDM3Mzp7VDotMX0sMzc0OntUOjF9LDM3NTp7VDotMX0sMzc2OntU'@;
put 'OjF9LDM3Nzp7VDotMX0sMzc4OntUOjF9LDM3OTp7VDotMX0sMzgwOntUOjF9LDM4MTp7VDotMX0sMzgyOntUOjF9LDM4Mzp7VDotMX0sMzg0OntUOjF9LDM4NTp7VDotMX0sMzg2OntUOjF9LDM4Nzp7VDotMX0sMzg4OntUOjF9LDM4OTp7VDotMX0sMzkwOntUOjF9LDM5MTp7VDotMX0sMzky'@;
put 'OntUOjF9LDM5Mzp7VDotMX0sMzk0OntUOjF9LDM5NTp7VDotMX0sMzk2Ont9LDM5Nzp7fSwzOTg6e30sMzk5Ont9LDQwMDp7fSw0MDE6e1Q6MX0sNDAzOnt9LDQwNDp7fSw0MDU6e30sNDA2Ont9LDQwNzp7fSw0MDg6e30sNDA5Ont9LDQxMDp7fSw0MTE6e30sNDEyOnt9LDQxMzp7fSw0MTQ6'@;
put 'e30sNDE1Ont9LDQxNjp7fSw0MTc6e30sNDE4Ont9LDQxOTp7fSw0MjA6e30sNDIxOnt9LDQyMjp7VDoxfSw0MjM6e1Q6MX0sNDI0OntUOi0xfSw0MjU6e1Q6LTF9LDQyNjp7ZjpmdW5jdGlvbiBBMihlLHQscil7dmFyIGE9ZS5sK3Qsbj1vcyhlKSxpPWUucmVhZF9zaGlmdCgxKSxzPVtuXTtp'@;
put 'ZihzWzJdPWksci5jZWxsRm9ybXVsYSl7dmFyIGY9UWQoZSxhLWUubCxyKTtzWzFdPWZ9ZWxzZSBlLmw9YTtyZXR1cm4gc319LDQyNzp7ZjpmdW5jdGlvbiBDMihlLHQscil7dmFyIGE9ZS5sK3QsaT1bV3QoZSwxNildO2lmKHIuY2VsbEZvcm11bGEpe3ZhciBzPXJ2KGUsYS1lLmwscik7aVsx'@;
put 'XT1zLGUubD1hfWVsc2UgZS5sPWE7cmV0dXJuIGl9fSw0Mjg6e30sNDI5OntUOjF9LDQzMDp7VDotMX0sNDMxOntUOjF9LDQzMjp7VDotMX0sNDMzOntUOjF9LDQzNDp7VDotMX0sNDM1OntUOjF9LDQzNjp7VDotMX0sNDM3OntUOjF9LDQzODp7VDotMX0sNDM5OntUOjF9LDQ0MDp7VDotMX0s'@;
put 'NDQxOntUOjF9LDQ0Mjp7VDotMX0sNDQzOntUOjF9LDQ0NDp7VDotMX0sNDQ1OntUOjF9LDQ0Njp7VDotMX0sNDQ3OntUOjF9LDQ0ODp7VDotMX0sNDQ5OntUOjF9LDQ1MDp7VDotMX0sNDUxOntUOjF9LDQ1Mjp7VDotMX0sNDUzOntUOjF9LDQ1NDp7VDotMX0sNDU1OntUOjF9LDQ1Njp7VDot'@;
put 'MX0sNDU3OntUOjF9LDQ1ODp7VDotMX0sNDU5OntUOjF9LDQ2MDp7VDotMX0sNDYxOntUOjF9LDQ2Mjp7VDotMX0sNDYzOntUOjF9LDQ2NDp7VDotMX0sNDY1OntUOjF9LDQ2Njp7VDotMX0sNDY3OntUOjF9LDQ2ODp7VDotMX0sNDY5OntUOjF9LDQ3MDp7VDotMX0sNDcxOnt9LDQ3Mjp7fSw0'@;
put 'NzM6e1Q6MX0sNDc0OntUOi0xfSw0NzU6e30sNDc2OntmOmZ1bmN0aW9uIE8yKGUpe3ZhciB0PXt9O3JldHVybiBNZi5mb3JFYWNoKGZ1bmN0aW9uKHIpe3Rbcl09Z3IoZSl9KSx0fX0sNDc3Ont9LDQ3ODp7fSw0Nzk6e1Q6MX0sNDgwOntUOi0xfSw0ODE6e1Q6MX0sNDgyOntUOi0xfSw0ODM6'@;
put 'e1Q6MX0sNDg0OntUOi0xfSw0ODU6e2Y6ZnVuY3Rpb24gV3YoKXt9fSw0ODY6e1Q6MX0sNDg3OntUOi0xfSw0ODg6e1Q6MX0sNDg5OntUOi0xfSw0OTA6e1Q6MX0sNDkxOntUOi0xfSw0OTI6e1Q6MX0sNDkzOntUOi0xfSw0OTQ6e2Y6ZnVuY3Rpb24gUzIoZSx0KXt2YXIgcj1lLmwrdCxhPVd0'@;
put 'KGUsMTYpLG49Zm4oZSksaT1tcihlKSxzPW1yKGUpLGY9bXIoZSk7ZS5sPXI7dmFyIGM9e3JmeDphLHJlbElkOm4sbG9jOmksZGlzcGxheTpmfTtyZXR1cm4gcyYmKGMuVG9vbHRpcD1zKSxjfX0sNDk1OntUOjF9LDQ5Njp7VDotMX0sNDk3OntUOjF9LDQ5ODp7VDotMX0sNDk5Ont9LDUwMDp7'@;
put 'VDoxfSw1MDE6e1Q6LTF9LDUwMjp7VDoxfSw1MDM6e1Q6LTF9LDUwNDp7fSw1MDU6e1Q6MX0sNTA2OntUOi0xfSw1MDc6e30sNTA4OntUOjF9LDUwOTp7VDotMX0sNTEwOntUOjF9LDUxMTp7VDotMX0sNTEyOnt9LDUxMzp7fSw1MTQ6e1Q6MX0sNTE1OntUOi0xfSw1MTY6e1Q6MX0sNTE3OntU'@;
put 'Oi0xfSw1MTg6e1Q6MX0sNTE5OntUOi0xfSw1MjA6e1Q6MX0sNTIxOntUOi0xfSw1MjI6e30sNTIzOnt9LDUyNDp7fSw1MjU6e30sNTI2Ont9LDUyNzp7fSw1Mjg6e1Q6MX0sNTI5OntUOi0xfSw1MzA6e1Q6MX0sNTMxOntUOi0xfSw1MzI6e1Q6MX0sNTMzOntUOi0xfSw1MzQ6e30sNTM1Ont9'@;
put 'LDUzNjp7fSw1Mzc6e30sNTM4OntUOjF9LDUzOTp7VDotMX0sNTQwOntUOjF9LDU0MTp7VDotMX0sNTQyOntUOjF9LDU0ODp7fSw1NDk6e30sNTUwOntmOm9ufSw1NTE6e30sNTUyOnt9LDU1Mzp7fSw1NTQ6e1Q6MX0sNTU1OntUOi0xfSw1NTY6e1Q6MX0sNTU3OntUOi0xfSw1NTg6e1Q6MX0s'@;
put 'NTU5OntUOi0xfSw1NjA6e1Q6MX0sNTYxOntUOi0xfSw1NjI6e30sNTY0Ont9LDU2NTp7VDoxfSw1NjY6e1Q6LTF9LDU2OTp7VDoxfSw1NzA6e1Q6LTF9LDU3Mjp7fSw1NzM6e1Q6MX0sNTc0OntUOi0xfSw1Nzc6e30sNTc4Ont9LDU3OTp7fSw1ODA6e30sNTgxOnt9LDU4Mjp7fSw1ODM6e30s'@;
put 'NTg0Ont9LDU4NTp7fSw1ODY6e30sNTg3Ont9LDU4ODp7VDotMX0sNTg5Ont9LDU5MDp7VDoxfSw1OTE6e1Q6LTF9LDU5Mjp7VDoxfSw1OTM6e1Q6LTF9LDU5NDp7VDoxfSw1OTU6e1Q6LTF9LDU5Njp7fSw1OTc6e1Q6MX0sNTk4OntUOi0xfSw1OTk6e1Q6MX0sNjAwOntUOi0xfSw2MDE6e1Q6'@;
put 'MX0sNjAyOntUOi0xfSw2MDM6e1Q6MX0sNjA0OntUOi0xfSw2MDU6e1Q6MX0sNjA2OntUOi0xfSw2MDc6e30sNjA4OntUOjF9LDYwOTp7VDotMX0sNjEwOnt9LDYxMTp7VDoxfSw2MTI6e1Q6LTF9LDYxMzp7VDoxfSw2MTQ6e1Q6LTF9LDYxNTp7VDoxfSw2MTY6e1Q6LTF9LDYxNzp7VDoxfSw2'@;
put 'MTg6e1Q6LTF9LDYxOTp7VDoxfSw2MjA6e1Q6LTF9LDYyNTp7fSw2MjY6e1Q6MX0sNjI3OntUOi0xfSw2Mjg6e1Q6MX0sNjI5OntUOi0xfSw2MzA6e1Q6MX0sNjMxOntUOi0xfSw2MzI6e2Y6d3h9LDYzMzp7VDoxfSw2MzQ6e1Q6LTF9LDYzNTp7VDoxLGY6ZnVuY3Rpb24gZ3goZSl7dmFyIHQ9'@;
put 'e307dC5pYXV0aG9yPWUucmVhZF9zaGlmdCg0KTt2YXIgcj1XdChlLDE2KTtyZXR1cm4gdC5yZng9ci5zLHQucmVmPWdlKHIucyksZS5sKz0xNix0fX0sNjM2OntUOi0xfSw2Mzc6e2Y6R299LDYzODp7VDoxfSw2Mzk6e30sNjQwOntUOi0xfSw2NDE6e1Q6MX0sNjQyOntUOi0xfSw2NDM6e1Q6'@;
put 'MX0sNjQ0Ont9LDY0NTp7VDotMX0sNjQ2OntUOjF9LDY0ODp7VDoxfSw2NDk6e30sNjUwOntUOi0xfSw2NTE6e2Y6ZnVuY3Rpb24gZXAoZSx0KXtyZXR1cm4gZS5sKz0xMCx7bmFtZTptcihlKX19fSw2NTI6e30sNjUzOntUOjF9LDY1NDp7VDotMX0sNjU1OntUOjF9LDY1Njp7VDotMX0sNjU3'@;
put 'OntUOjF9LDY1ODp7VDotMX0sNjU5Ont9LDY2MDp7VDoxfSw2NjE6e30sNjYyOntUOi0xfSw2NjM6e30sNjY0OntUOjF9LDY2NTp7fSw2NjY6e1Q6LTF9LDY2Nzp7fSw2Njg6e30sNjY5Ont9LDY3MTp7VDoxfSw2NzI6e1Q6LTF9LDY3Mzp7VDoxfSw2NzQ6e1Q6LTF9LDY3NTp7fSw2NzY6e30s'@;
put 'Njc3Ont9LDY3ODp7fSw2Nzk6e30sNjgwOnt9LDY4MTp7fSwxMDI0Ont9LDEwMjU6e30sMTAyNjp7VDoxfSwxMDI3OntUOi0xfSwxMDI4OntUOjF9LDEwMjk6e1Q6LTF9LDEwMzA6e30sMTAzMTp7VDoxfSwxMDMyOntUOi0xfSwxMDMzOntUOjF9LDEwMzQ6e1Q6LTF9LDEwMzU6e30sMTAzNjp7'@;
put 'fSwxMDM3Ont9LDEwMzg6e1Q6MX0sMTAzOTp7VDotMX0sMTA0MDp7fSwxMDQxOntUOjF9LDEwNDI6e1Q6LTF9LDEwNDM6e30sMTA0NDp7fSwxMDQ1Ont9LDEwNDY6e1Q6MX0sMTA0Nzp7VDotMX0sMTA0ODp7VDoxfSwxMDQ5OntUOi0xfSwxMDUwOnt9LDEwNTE6e1Q6MX0sMTA1Mjp7VDoxfSwx'@;
put 'MDUzOntmOmZ1bmN0aW9uIEIyKCl7fX0sMTA1NDp7VDoxfSwxMDU1Ont9LDEwNTY6e1Q6MX0sMTA1Nzp7VDotMX0sMTA1ODp7VDoxfSwxMDU5OntUOi0xfSwxMDYxOnt9LDEwNjI6e1Q6MX0sMTA2Mzp7VDotMX0sMTA2NDp7VDoxfSwxMDY1OntUOi0xfSwxMDY2OntUOjF9LDEwNjc6e1Q6LTF9'@;
put 'LDEwNjg6e1Q6MX0sMTA2OTp7VDotMX0sMTA3MDp7VDoxfSwxMDcxOntUOi0xfSwxMDcyOntUOjF9LDEwNzM6e1Q6LTF9LDEwNzU6e1Q6MX0sMTA3Njp7VDotMX0sMTA3Nzp7VDoxfSwxMDc4OntUOi0xfSwxMDc5OntUOjF9LDEwODA6e1Q6LTF9LDEwODE6e1Q6MX0sMTA4Mjp7VDotMX0sMTA4'@;
put 'Mzp7VDoxfSwxMDg0OntUOi0xfSwxMDg1Ont9LDEwODY6e1Q6MX0sMTA4Nzp7VDotMX0sMTA4ODp7VDoxfSwxMDg5OntUOi0xfSwxMDkwOntUOjF9LDEwOTE6e1Q6LTF9LDEwOTI6e1Q6MX0sMTA5Mzp7VDotMX0sMTA5NDp7VDoxfSwxMDk1OntUOi0xfSwxMDk2Ont9LDEwOTc6e1Q6MX0sMTA5'@;
put 'ODp7fSwxMDk5OntUOi0xfSwxMTAwOntUOjF9LDExMDE6e1Q6LTF9LDExMDI6e30sMTEwMzp7fSwxMTA0Ont9LDExMDU6e30sMTExMTp7fSwxMTEyOnt9LDExMTM6e1Q6MX0sMTExNDp7VDotMX0sMTExNTp7VDoxfSwxMTE2OntUOi0xfSwxMTE3Ont9LDExMTg6e1Q6MX0sMTExOTp7VDotMX0s'@;
put 'MTEyMDp7VDoxfSwxMTIxOntUOi0xfSwxMTIyOntUOjF9LDExMjM6e1Q6LTF9LDExMjQ6e1Q6MX0sMTEyNTp7VDotMX0sMTEyNjp7fSwxMTI4OntUOjF9LDExMjk6e1Q6LTF9LDExMzA6e30sMTEzMTp7VDoxfSwxMTMyOntUOi0xfSwxMTMzOntUOjF9LDExMzQ6e1Q6LTF9LDExMzU6e1Q6MX0s'@;
put 'MTEzNjp7VDotMX0sMTEzNzp7VDoxfSwxMTM4OntUOi0xfSwxMTM5OntUOjF9LDExNDA6e1Q6LTF9LDExNDE6e30sMTE0Mjp7VDoxfSwxMTQzOntUOi0xfSwxMTQ0OntUOjF9LDExNDU6e1Q6LTF9LDExNDY6e30sMTE0Nzp7VDoxfSwxMTQ4OntUOi0xfSwxMTQ5OntUOjF9LDExNTA6e1Q6LTF9'@;
put 'LDExNTI6e1Q6MX0sMTE1Mzp7VDotMX0sMTE1NDp7VDotMX0sMTE1NTp7VDotMX0sMTE1Njp7VDotMX0sMTE1Nzp7VDoxfSwxMTU4OntUOi0xfSwxMTU5OntUOjF9LDExNjA6e1Q6LTF9LDExNjE6e1Q6MX0sMTE2Mjp7VDotMX0sMTE2Mzp7VDoxfSwxMTY0OntUOi0xfSwxMTY1OntUOjF9LDEx'@;
put 'NjY6e1Q6LTF9LDExNjc6e1Q6MX0sMTE2ODp7VDotMX0sMTE2OTp7VDoxfSwxMTcwOntUOi0xfSwxMTcxOnt9LDExNzI6e1Q6MX0sMTE3Mzp7VDotMX0sMTE3Nzp7fSwxMTc4OntUOjF9LDExODA6e30sMTE4MTp7fSwxMTgyOnt9LDIwNDg6e1Q6MX0sMjA0OTp7VDotMX0sMjA1MDp7fSwyMDUx'@;
put 'OntUOjF9LDIwNTI6e1Q6LTF9LDIwNTM6e30sMjA1NDp7fSwyMDU1OntUOjF9LDIwNTY6e1Q6LTF9LDIwNTc6e1Q6MX0sMjA1ODp7VDotMX0sMjA2MDp7fSwyMDY3Ont9LDIwNjg6e1Q6MX0sMjA2OTp7VDotMX0sMjA3MDp7fSwyMDcxOnt9LDIwNzI6e1Q6MX0sMjA3Mzp7VDotMX0sMjA3NTp7'@;
put 'fSwyMDc2Ont9LDIwNzc6e1Q6MX0sMjA3ODp7VDotMX0sMjA3OTp7fSwyMDgwOntUOjF9LDIwODE6e1Q6LTF9LDIwODI6e30sMjA4Mzp7VDoxfSwyMDg0OntUOi0xfSwyMDg1OntUOjF9LDIwODY6e1Q6LTF9LDIwODc6e1Q6MX0sMjA4ODp7VDotMX0sMjA4OTp7VDoxfSwyMDkwOntUOi0xfSwy'@;
put 'MDkxOnt9LDIwOTI6e30sMjA5Mzp7VDoxfSwyMDk0OntUOi0xfSwyMDk1Ont9LDIwOTY6e1Q6MX0sMjA5Nzp7VDotMX0sMjA5ODp7VDoxfSwyMDk5OntUOi0xfSwyMTAwOntUOjF9LDIxMDE6e1Q6LTF9LDIxMDI6e30sMjEwMzp7VDoxfSwyMTA0OntUOi0xfSwyMTA1Ont9LDIxMDY6e1Q6MX0s'@;
put 'MjEwNzp7VDotMX0sMjEwODp7fSwyMTA5OntUOjF9LDIxMTA6e1Q6LTF9LDIxMTE6e1Q6MX0sMjExMjp7VDotMX0sMjExMzp7VDoxfSwyMTE0OntUOi0xfSwyMTE1Ont9LDIxMTY6e30sMjExNzp7fSwyMTE4OntUOjF9LDIxMTk6e1Q6LTF9LDIxMjA6e30sMjEyMTp7VDoxfSwyMTIyOntUOi0x'@;
put 'fSwyMTIzOntUOjF9LDIxMjQ6e1Q6LTF9LDIxMjU6e30sMjEyNjp7VDoxfSwyMTI3OntUOi0xfSwyMTI4Ont9LDIxMjk6e1Q6MX0sMjEzMDp7VDotMX0sMjEzMTp7VDoxfSwyMTMyOntUOi0xfSwyMTMzOntUOjF9LDIxMzQ6e30sMjEzNTp7fSwyMTM2Ont9LDIxMzc6e1Q6MX0sMjEzODp7VDot'@;
put 'MX0sMjEzOTp7VDoxfSwyMTQwOntUOi0xfSwyMTQxOnt9LDMwNzI6e30sMzA3Mzp7fSw0MDk2OntUOjF9LDQwOTc6e1Q6LTF9LDUwMDI6e1Q6MX0sNTAwMzp7VDotMX0sNTA4MTp7VDoxfSw1MDgyOntUOi0xfSw1MDgzOnt9LDUwODQ6e1Q6MX0sNTA4NTp7VDotMX0sNTA4Njp7VDoxfSw1MDg3'@;
put 'OntUOi0xfSw1MDg4Ont9LDUwODk6e30sNTA5MDp7fSw1MDkyOntUOjF9LDUwOTM6e1Q6LTF9LDUwOTQ6e30sNTA5NTp7VDoxfSw1MDk2OntUOi0xfSw1MDk3Ont9LDUwOTk6e30sNjU1MzU6e246IiJ9fSxXbj17Njp7ZjpObn0sMTA6e2Y6eXR9LDEyOntmOnRyfSwxMzp7Zjp0cn0sMTQ6e2Y6'@;
put 'SmV9LDE1OntmOkplfSwxNjp7Zjpncn0sMTc6e2Y6SmV9LDE4OntmOkplfSwxOTp7Zjp0cn0sMjA6e2Y6S3N9LDIxOntmOktzfSwyMzp7Zjpxc30sMjQ6e2Y6SnN9LDI1OntmOkplfSwyNjp7fSwyNzp7fSwyODp7ZjpmdW5jdGlvbiBVdShlLHQscil7cmV0dXJuIGZ1bmN0aW9uIE11KGUsdCxy'@;
put 'KXtpZighKHIuYmlmZjw4KSl7dmFyIGE9ZS5yZWFkX3NoaWZ0KDIpLG49ZS5yZWFkX3NoaWZ0KDIpLGk9ZS5yZWFkX3NoaWZ0KDIpLHM9ZS5yZWFkX3NoaWZ0KDIpLGY9enQoZSwwLHIpO3JldHVybiByLmJpZmY8OCYmZS5yZWFkX3NoaWZ0KDEpLFt7cjphLGM6bn0sZixzLGldfX0oZSwwLHIp'@;
put 'fX0sMjk6e30sMzQ6e2Y6SmV9LDM1OntmOllzfSwzODp7Zjpncn0sMzk6e2Y6Z3J9LDQwOntmOmdyfSw0MTp7Zjpncn0sNDI6e2Y6SmV9LDQzOntmOkplfSw0Nzp7ZjpmdW5jdGlvbiBxaChlLHQscil7dmFyIGE9e1R5cGU6ci5iaWZmPj04P2UucmVhZF9zaGlmdCgyKTowfTtyZXR1cm4gYS5U'@;
put 'eXBlP2Z1bmN0aW9uIEpoKGUsdCxyKXt2YXIgYT1yfHx7fTtyZXR1cm4gYS5JbmZvPWUucmVhZF9zaGlmdCgyKSxlLmwtPTIsYS5EYXRhPTE9PT1hLkluZm8/ZnVuY3Rpb24gJGgoZSl7dmFyIHQ9e30scj10LkVuY3J5cHRpb25WZXJzaW9uSW5mbz1kdChlLDQpO2lmKDEhPXIuTWFqb3J8fDEh'@;
put 'PXIuTWlub3IpdGhyb3cidW5yZWNvZ25pemVkIHZlcnNpb24gY29kZSAiK3IuTWFqb3IrIiA6ICIrci5NaW5vcjtyZXR1cm4gdC5TYWx0PWUucmVhZF9zaGlmdCgxNiksdC5FbmNyeXB0ZWRWZXJpZmllcj1lLnJlYWRfc2hpZnQoMTYpLHQuRW5jcnlwdGVkVmVyaWZpZXJIYXNoPWUucmVhZF9z'@;
put 'aGlmdCgxNiksdH0oZSk6ZnVuY3Rpb24gemgoZSx0KXt2YXIgcj17fSxhPXIuRW5jcnlwdGlvblZlcnNpb25JbmZvPWR0KGUsNCk7aWYodC09NCwyIT1hLk1pbm9yKXRocm93IG5ldyBFcnJvcigidW5yZWNvZ25pemVkIG1pbm9yIHZlcnNpb24gY29kZTogIithLk1pbm9yKTtpZihhLk1ham9y'@;
put 'PjR8fGEuTWFqb3I8Mil0aHJvdyBuZXcgRXJyb3IoInVucmVjb2duaXplZCBtYWpvciB2ZXJzaW9uIGNvZGU6ICIrYS5NYWpvcik7ci5GbGFncz1lLnJlYWRfc2hpZnQoNCksdC09NDt2YXIgbj1lLnJlYWRfc2hpZnQoNCk7cmV0dXJuIHQtPTQsci5FbmNyeXB0aW9uSGVhZGVyPXNmKGUsbiks'@;
put 'ci5FbmNyeXB0aW9uVmVyaWZpZXI9ZmYoZSx0LT1uKSxyfShlLHQpLGF9KGUsdC0yLGEpOmZ1bmN0aW9uIFloKGUsdCxyLGEpe3ZhciBuPXtrZXk6dHIoZSksdmVyaWZpY2F0aW9uQnl0ZXM6dHIoZSl9O3IucGFzc3dvcmQmJihuLnZlcmlmaWVyPWZ1bmN0aW9uIEZuKGUpe3ZhciByLGksdD0w'@;
put 'LGE9bmYoZSksbj1hLmxlbmd0aCsxO2Zvcigocj1fdChuKSlbMF09YS5sZW5ndGgsaT0xO2khPW47KytpKXJbaV09YVtpLTFdO2ZvcihpPW4tMTtpPj0wOy0taSl0PSgoMTYzODQmdD8xOjApfHQ8PDEmMzI3NjcpXnJbaV07cmV0dXJuIDUyODExXnR9KHIucGFzc3dvcmQpKSxhLnZhbGlkPW4u'@;
put 'dmVyaWZpY2F0aW9uQnl0ZXM9PT1uLnZlcmlmaWVyLGEudmFsaWQmJihhLmluc2l0dT1mdW5jdGlvbihlKXt2YXIgdD0wLHI9Y2YoZSk7cmV0dXJuIGZ1bmN0aW9uKGEpe3ZhciBuPWZ1bmN0aW9uKGUsdCxyLGEsbil7dmFyIGkscztmb3Iobnx8KG49dCksYXx8KGE9Y2YoIiIpKSxpPTA7aSE9'@;
put 'dC5sZW5ndGg7KytpKXM9dFtpXSxuW2ldPXM9MjU1Jigoc149YVtyXSk+PjV8czw8MyksKytyO3JldHVybltuLHIsYV19KDAsYSx0LHIpO3JldHVybiB0PW5bMV0sblswXX19KHIucGFzc3dvcmQpKX0oZSwwLHIsYSksYX19LDQ5OntmOmZ1bmN0aW9uIGh1KGUsdCxyKXt2YXIgYT17ZHlIZWln'@;
put 'aHQ6ZS5yZWFkX3NoaWZ0KDIpLGZsOmUucmVhZF9zaGlmdCgyKX07c3dpdGNoKHImJnIuYmlmZnx8OCl7Y2FzZSAyOmJyZWFrO2Nhc2UgMzpjYXNlIDQ6ZS5sKz0yO2JyZWFrO2RlZmF1bHQ6ZS5sKz0xMH1yZXR1cm4gYS5uYW1lPVJhKGUsMCxyKSxhfX0sNTE6e2Y6dHJ9LDYwOnt9LDYxOntm'@;
put 'OmZ1bmN0aW9uIGZ1KGUpe3JldHVybntQb3M6W2UucmVhZF9zaGlmdCgyKSxlLnJlYWRfc2hpZnQoMildLERpbTpbZS5yZWFkX3NoaWZ0KDIpLGUucmVhZF9zaGlmdCgyKV0sRmxhZ3M6ZS5yZWFkX3NoaWZ0KDIpLEN1clRhYjplLnJlYWRfc2hpZnQoMiksRmlyc3RUYWI6ZS5yZWFkX3NoaWZ0'@;
put 'KDIpLFNlbGVjdGVkOmUucmVhZF9zaGlmdCgyKSxUYWJSYXRpbzplLnJlYWRfc2hpZnQoMil9fX0sNjQ6e2Y6SmV9LDY1OntmOmZ1bmN0aW9uIHV1KCl7fX0sNjY6e2Y6dHJ9LDc3Ont9LDgwOnt9LDgxOnt9LDgyOnt9LDg1OntmOnRyfSw4OTp7fSw5MDp7fSw5MTp7fSw5Mjp7ZjpmdW5jdGlv'@;
put 'biBKbChlLHQscil7aWYoci5lbmMpcmV0dXJuIGUubCs9dCwiIjt2YXIgYT1lLmwsbj16dChlLDAscik7cmV0dXJuIGUucmVhZF9zaGlmdCh0K2EtZS5sKSxufX0sOTM6e2Y6ZnVuY3Rpb24gVnUoZSx0LHIpe2lmKHImJnIuYmlmZjw4KXJldHVybiBmdW5jdGlvbiBHdShlLHQscil7ZS5sKz00'@;
put 'O3ZhciBhPWUucmVhZF9zaGlmdCgyKSxuPWUucmVhZF9zaGlmdCgyKSxpPWUucmVhZF9zaGlmdCgyKTtlLmwrPTIsZS5sKz0yLGUubCs9MixlLmwrPTIsZS5sKz0yLGUubCs9MixlLmwrPTIsZS5sKz0yLGUubCs9MixlLmwrPTY7dmFyIHM9W107cmV0dXJuIHMucHVzaCgoWHVbYV18fHByKShl'@;
put 'LHQtPTM2LHIpKSx7Y21vOltuLGEsaV0sZnQ6c319KGUsdCxyKTt2YXIgYT1YcyhlKSxuPWZ1bmN0aW9uIEtsKGUsdCl7Zm9yKHZhciByPWUubCt0LGE9W107ZS5sPHI7KXt2YXIgbj1lLnJlYWRfc2hpZnQoMik7ZS5sLT0yO3RyeXthLnB1c2goamxbbl0oZSxyLWUubCkpfWNhdGNoe3JldHVy'@;
put 'biBlLmw9cixhfX1yZXR1cm4gZS5sIT1yJiYoZS5sPXIpLGF9KGUsdC0yMik7cmV0dXJue2NtbzphLGZ0Om59fX0sOTQ6e30sOTU6e2Y6SmV9LDk2Ont9LDk3Ont9LDk5OntmOkplfSwxMjU6e2Y6UXN9LDEyODp7ZjpmdW5jdGlvbiBBdShlKXtlLmwrPTQ7dmFyIHQ9W2UucmVhZF9zaGlmdCgy'@;
put 'KSxlLnJlYWRfc2hpZnQoMildO2lmKDAhPT10WzBdJiZ0WzBdLS0sMCE9PXRbMV0mJnRbMV0tLSx0WzBdPjd8fHRbMV0+Nyl0aHJvdyBuZXcgRXJyb3IoIkJhZCBHdXR0ZXJzOiAiK3Quam9pbigifCIpKTtyZXR1cm4gdH19LDEyOTp7ZjpmdW5jdGlvbiBabChlLHQscil7dmFyIGE9ciYmOD09'@;
put 'ci5iaWZmfHwyPT10P2UucmVhZF9zaGlmdCgyKTooZS5sKz10LDApO3JldHVybntmRGlhbG9nOjE2JmEsZkJlbG93OjY0JmEsZlJpZ2h0OjEyOCZhfX19LDEzMDp7Zjp0cn0sMTMxOntmOkplfSwxMzI6e2Y6SmV9LDEzMzp7ZjpmdW5jdGlvbiBRbChlLHQscil7dmFyIGE9ZS5yZWFkX3NoaWZ0'@;
put 'KDQpLG49MyZlLnJlYWRfc2hpZnQoMSksaT1lLnJlYWRfc2hpZnQoMSk7c3dpdGNoKGkpe2Nhc2UgMDppPSJXb3Jrc2hlZXQiO2JyZWFrO2Nhc2UgMTppPSJNYWNyb3NoZWV0IjticmVhaztjYXNlIDI6aT0iQ2hhcnRzaGVldCI7YnJlYWs7Y2FzZSA2Omk9IlZCQU1vZHVsZSJ9dmFyIHM9UmEo'@;
put 'ZSwwLHIpO3JldHVybiAwPT09cy5sZW5ndGgmJihzPSJTaGVldDEiKSx7cG9zOmEsaHM6bixkdDppLG5hbWU6c319fSwxMzQ6e30sMTQwOntmOmZ1bmN0aW9uIEp1KGUpe3ZhciByLHQ9WzAsMF07cmV0dXJuIHI9ZS5yZWFkX3NoaWZ0KDIpLHRbMF09eHNbcl18fHIscj1lLnJlYWRfc2hpZnQo'@;
put 'MiksdFsxXT14c1tyXXx8cix0fX0sMTQxOntmOnRyfSwxNDQ6e30sMTQ2OntmOmZ1bmN0aW9uIFF1KGUpe2Zvcih2YXIgdD1lLnJlYWRfc2hpZnQoMikscj1bXTt0LS0gPjA7KXIucHVzaChVcyhlKSk7cmV0dXJuIHJ9fSwxNTE6e30sMTUyOnt9LDE1Mzp7fSwxNTQ6e30sMTU1Ont9LDE1Njp7'@;
put 'Zjp0cn0sMTU3Ont9LDE1ODp7fSwxNjA6e2Y6c2h9LDE2MTp7ZjpmdW5jdGlvbiB0aChlLHQpe3ZhciByPXt9O3JldHVybiB0PDMyfHwoZS5sKz0xNixyLmhlYWRlcj1ncihlKSxyLmZvb3Rlcj1ncihlKSxlLmwrPTIpLHJ9fSwxNzQ6e30sMTc1Ont9LDE3Njp7fSwxNzc6e30sMTc4Ont9LDE4'@;
put 'MDp7fSwxODE6e30sMTgyOnt9LDE4NDp7fSwxODU6e30sMTg5OntmOmZ1bmN0aW9uIFR1KGUsdCl7Zm9yKHZhciByPWUubCt0LTIsYT1lLnJlYWRfc2hpZnQoMiksbj1lLnJlYWRfc2hpZnQoMiksaT1bXTtlLmw8cjspaS5wdXNoKFdzKGUpKTtpZihlLmwhPT1yKXRocm93IG5ldyBFcnJvcigi'@;
put 'TXVsUksgcmVhZCBlcnJvciIpO3ZhciBzPWUucmVhZF9zaGlmdCgyKTtpZihpLmxlbmd0aCE9cy1uKzEpdGhyb3cgbmV3IEVycm9yKCJNdWxSSyBsZW5ndGggbWlzbWF0Y2giKTtyZXR1cm57cjphLGM6bixDOnMscmtyZWM6aX19fSwxOTA6e2Y6ZnVuY3Rpb24gU3UoZSx0KXtmb3IodmFyIHI9'@;
put 'ZS5sK3QtMixhPWUucmVhZF9zaGlmdCgyKSxuPWUucmVhZF9zaGlmdCgyKSxpPVtdO2UubDxyOylpLnB1c2goZS5yZWFkX3NoaWZ0KDIpKTtpZihlLmwhPT1yKXRocm93IG5ldyBFcnJvcigiTXVsQmxhbmsgcmVhZCBlcnJvciIpO3ZhciBzPWUucmVhZF9zaGlmdCgyKTtpZihpLmxlbmd0aCE9'@;
put 'cy1uKzEpdGhyb3cgbmV3IEVycm9yKCJNdWxCbGFuayBsZW5ndGggbWlzbWF0Y2giKTtyZXR1cm57cjphLGM6bixDOnMsaXhmZTppfX19LDE5Mzp7Zjp5dH0sMTk3Ont9LDE5ODp7fSwxOTk6e30sMjAwOnt9LDIwMTp7fSwyMDI6e2Y6SmV9LDIwMzp7fSwyMDQ6e30sMjA1Ont9LDIwNjp7fSwy'@;
put 'MDc6e30sMjA4Ont9LDIwOTp7fSwyMTA6e30sMjExOnt9LDIxMzp7fSwyMTU6e30sMjE2Ont9LDIxNzp7fSwyMTg6e2Y6dHJ9LDIyMDp7fSwyMjE6e2Y6SmV9LDIyMjp7fSwyMjQ6e2Y6ZnVuY3Rpb24geXUoZSx0LHIpe3ZhciBhPXt9O3JldHVybiBhLmlmbnQ9ZS5yZWFkX3NoaWZ0KDIpLGEu'@;
put 'bnVtRm10SWQ9ZS5yZWFkX3NoaWZ0KDIpLGEuZmxhZ3M9ZS5yZWFkX3NoaWZ0KDIpLGEuZlN0eWxlPWEuZmxhZ3M+PjImMSxhLmRhdGE9ZnVuY3Rpb24gRnUoZSx0LHIsYSl7dmFyIG49e30saT1lLnJlYWRfc2hpZnQoNCkscz1lLnJlYWRfc2hpZnQoNCksZj1lLnJlYWRfc2hpZnQoNCksYz1l'@;
put 'LnJlYWRfc2hpZnQoMik7cmV0dXJuIG4ucGF0dGVyblR5cGU9bmxbZj4+MjZdLGEuY2VsbFN0eWxlcyYmKG4uYWxjPTcmaSxuLmZXcmFwPWk+PjMmMSxuLmFsY1Y9aT4+NCY3LG4uZkp1c3RMYXN0PWk+PjcmMSxuLnRyb3Q9aT4+OCYyNTUsbi5jSW5kZW50PWk+PjE2JjE1LG4uZlNocmlua1Rv'@;
put 'Rml0PWk+PjIwJjEsbi5pUmVhZE9yZGVyPWk+PjIyJjIsbi5mQXRyTnVtPWk+PjI2JjEsbi5mQXRyRm50PWk+PjI3JjEsbi5mQXRyQWxjPWk+PjI4JjEsbi5mQXRyQmRyPWk+PjI5JjEsbi5mQXRyUGF0PWk+PjMwJjEsbi5mQXRyUHJvdD1pPj4zMSYxLG4uZGdMZWZ0PTE1JnMsbi5kZ1JpZ2h0'@;
put 'PXM+PjQmMTUsbi5kZ1RvcD1zPj44JjE1LG4uZGdCb3R0b209cz4+MTImMTUsbi5pY3ZMZWZ0PXM+PjE2JjEyNyxuLmljdlJpZ2h0PXM+PjIzJjEyNyxuLmdyYml0RGlhZz1zPj4zMCYzLG4uaWN2VG9wPTEyNyZmLG4uaWN2Qm90dG9tPWY+PjcmMTI3LG4uaWN2RGlhZz1mPj4xNCYxMjcsbi5k'@;
put 'Z0RpYWc9Zj4+MjEmMTUsbi5pY3ZGb3JlPTEyNyZjLG4uaWN2QmFjaz1jPj43JjEyNyxuLmZzeEJ1dHRvbj1jPj4xNCYxKSxufShlLDAsMCxyKSxhfX0sMjI1OntmOmZ1bmN0aW9uIFlsKGUsdCl7cmV0dXJuIDA9PT10fHxlLnJlYWRfc2hpZnQoMiksMTIwMH19LDIyNjp7Zjp5dH0sMjI3Ont9'@;
put 'LDIyOTp7ZjpmdW5jdGlvbiBXdShlLHQpe2Zvcih2YXIgcj1bXSxhPWUucmVhZF9zaGlmdCgyKTthLS07KXIucHVzaChrMChlKSk7cmV0dXJuIHJ9fSwyMzM6e30sMjM1Ont9LDIzNjp7fSwyMzc6e30sMjM5Ont9LDI0MDp7fSwyNDE6e30sMjQyOnt9LDI0NDp7fSwyNDU6e30sMjQ2Ont9LDI0'@;
put 'Nzp7fSwyNDg6e30sMjQ5Ont9LDI1MTp7fSwyNTI6e2Y6ZnVuY3Rpb24gcnUoZSx0KXtmb3IodmFyIHI9ZS5sK3QsYT1lLnJlYWRfc2hpZnQoNCksbj1lLnJlYWRfc2hpZnQoNCksaT1bXSxzPTA7cyE9biYmZS5sPHI7KytzKWkucHVzaChSbChlKSk7cmV0dXJuIGkuQ291bnQ9YSxpLlVuaXF1'@;
put 'ZT1uLGl9fSwyNTM6e2Y6ZnVuY3Rpb24gZHUoZSl7dmFyIHQ9bnQoZSk7cmV0dXJuIHQuaXNzdD1lLnJlYWRfc2hpZnQoNCksdH19LDI1NTp7ZjpmdW5jdGlvbiBhdShlLHQpe3ZhciByPXt9O3JldHVybiByLmRzc3Q9ZS5yZWFkX3NoaWZ0KDIpLGUubCs9dC0yLHJ9fSwyNTY6e30sMjU5Ont9'@;
put 'LDI5MDp7fSwzMTE6e30sMzEyOnt9LDMxNTp7fSwzMTc6e2Y6YnN9LDMxODp7fSwzMTk6e30sMzIwOnt9LDMzMDp7fSwzMzE6e30sMzMzOnt9LDMzNDp7fSwzMzU6e30sMzM2Ont9LDMzNzp7fSwzMzg6e30sMzM5Ont9LDM0MDp7fSwzNTE6e30sMzUyOntmOkplfSwzNTM6e2Y6eXR9LDQwMTp7'@;
put 'fSw0MDI6e30sNDAzOnt9LDQwNDp7fSw0MDU6e30sNDA2Ont9LDQwNzp7fSw0MDg6e30sNDI1Ont9LDQyNjp7fSw0Mjc6e30sNDI4Ont9LDQyOTp7fSw0MzA6e2Y6ZnVuY3Rpb24gUnUoZSx0LHIpe3ZhciBhPWUubCt0LG49ZS5yZWFkX3NoaWZ0KDIpLGk9ZS5yZWFkX3NoaWZ0KDIpO2lmKHIu'@;
put 'c2JjY2g9aSwxMDI1PT1pfHwxNDg0OT09aSlyZXR1cm5baSxuXTtpZihpPDF8fGk+MjU1KXRocm93IG5ldyBFcnJvcigiVW5leHBlY3RlZCBTdXBCb29rIHR5cGU6ICIraSk7Zm9yKHZhciBzPUd0KGUsaSksZj1bXTthPmUubDspZi5wdXNoKE5hKGUpKTtyZXR1cm5baSxuLHMsZl19fSw0MzE6'@;
put 'e2Y6SmV9LDQzMjp7fSw0MzM6e30sNDM0Ont9LDQzNzp7fSw0Mzg6e2Y6ZnVuY3Rpb24genUoZSx0LHIpe3ZhciBhPWUubCxuPSIiO3RyeXtlLmwrPTQsLTE9PVswLDUsNywxMSwxMiwxNF0uaW5kZXhPZigoci5sYXN0b2JqfHx7Y21vOlswLDBdfSkuY21vWzFdKT9lLmwrPTY6ZnVuY3Rpb24g'@;
put 'YmwoZSl7dmFyIHQ9ZS5yZWFkX3NoaWZ0KDEpO2UubCsrO3ZhciByPWUucmVhZF9zaGlmdCgyKTtlLmwrPTJ9KGUpO3ZhciBmPWUucmVhZF9zaGlmdCgyKTtlLnJlYWRfc2hpZnQoMiksdHIoZSk7dmFyIGM9ZS5yZWFkX3NoaWZ0KDIpO2UubCs9Yztmb3IodmFyIG89MTtvPGUubGVucy5sZW5n'@;
put 'dGgtMTsrK28pe2lmKGUubC1hIT1lLmxlbnNbb10pdGhyb3cgbmV3IEVycm9yKCJUeE86IGJhZCBjb250aW51ZSByZWNvcmQiKTt2YXIgbD1lW2UubF07aWYoKG4rPUd0KGUsZS5sZW5zW28rMV0tZS5sZW5zW29dLTEpKS5sZW5ndGg+PShsP2Y6MipmKSlicmVha31pZihuLmxlbmd0aCE9PWYm'@;
put 'Jm4ubGVuZ3RoIT09MipmKXRocm93IG5ldyBFcnJvcigiY2NoVGV4dDogIitmKyIgIT0gIituLmxlbmd0aCk7cmV0dXJuIGUubD1hK3Qse3Q6bn19Y2F0Y2h7cmV0dXJuIGUubD1hK3Qse3Q6bn19fX0sNDM5OntmOkplfSw0NDA6e2Y6ZnVuY3Rpb24gJHUoZSx0KXt2YXIgcj1rMChlKTtlLmwr'@;
put 'PTE2O3ZhciBhPWZ1bmN0aW9uIE1sKGUsdCl7dmFyIHI9ZS5sK3QsYT1lLnJlYWRfc2hpZnQoNCk7aWYoMiE9PWEpdGhyb3cgbmV3IEVycm9yKCJVbnJlY29nbml6ZWQgc3RyZWFtVmVyc2lvbjogIithKTt2YXIgbj1lLnJlYWRfc2hpZnQoMik7ZS5sKz0yO3ZhciBpLHMsZixjLGwsaCxvPSIi'@;
put 'OzE2Jm4mJihpPXcwKGUpKSwxMjgmbiYmKHM9dzAoZSkpLCEoMjU3Jn5uKSYmKGY9dzAoZSkpLDE9PSgyNTcmbikmJihjPWZ1bmN0aW9uIEJsKGUsdCl7dmFyIHI9ZS5yZWFkX3NoaWZ0KDE2KTtzd2l0Y2gocil7Y2FzZSJlMGM5ZWE3OWY5YmFjZTExOGM4MjAwYWEwMDRiYTkwYiI6cmV0dXJu'@;
put 'IGZ1bmN0aW9uIFBsKGUpe3ZhciB0PWUucmVhZF9zaGlmdCg0KSxyPWUubCxhPSExO3Q+MjQmJihlLmwrPXQtMjQsIjc5NTg4MWY0M2IxZDdmNDhhZjJjODI1ZGM0ODUyNzYzIj09PWUucmVhZF9zaGlmdCgxNikmJihhPSEwKSxlLmw9cik7dmFyIG49ZS5yZWFkX3NoaWZ0KChhP3QtMjQ6dCk+'@;
put 'PjEsInV0ZjE2bGUiKS5yZXBsYWNlKGRyLCIiKTtyZXR1cm4gYSYmKGUubCs9MjQpLG59KGUpO2Nhc2UiMDMwMzAwMDAwMDAwMDAwMGMwMDAwMDAwMDAwMDAwNDYiOnJldHVybiBmdW5jdGlvbiBMbChlKXtmb3IodmFyIHQ9ZS5yZWFkX3NoaWZ0KDIpLHI9IiI7dC0tID4wOylyKz0iLi4vIjt2'@;
put 'YXIgYT1lLnJlYWRfc2hpZnQoMCwibHBzdHItYW5zaSIpO2lmKGUubCs9Miw1NzAwNSE9ZS5yZWFkX3NoaWZ0KDIpKXRocm93IG5ldyBFcnJvcigiQmFkIEZpbGVNb25pa2VyIik7aWYoMD09PWUucmVhZF9zaGlmdCg0KSlyZXR1cm4gcithLnJlcGxhY2UoL1xcL2csIi8iKTt2YXIgaT1lLnJl'@;
put 'YWRfc2hpZnQoNCk7aWYoMyE9ZS5yZWFkX3NoaWZ0KDIpKXRocm93IG5ldyBFcnJvcigiQmFkIEZpbGVNb25pa2VyIik7cmV0dXJuIHIrZS5yZWFkX3NoaWZ0KGk+PjEsInV0ZjE2bGUiKS5yZXBsYWNlKGRyLCIiKX0oZSk7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIE1v'@;
put 'bmlrZXIgIityKX19KGUpKSw4Jm4mJihvPXcwKGUpKSwzMiZuJiYobD1lLnJlYWRfc2hpZnQoMTYpKSw2NCZuJiYoaD13bihlKSksZS5sPXI7dmFyIHg9c3x8Znx8Y3x8IiI7eCYmbyYmKHgrPSIjIitvKSx4fHwoeD0iIyIrbyksMiZuJiYiLyI9PXguY2hhckF0KDApJiYiLyIhPXguY2hhckF0'@;
put 'KDEpJiYoeD0iZmlsZTovLyIreCk7dmFyIGQ9e1RhcmdldDp4fTtyZXR1cm4gbCYmKGQuZ3VpZD1sKSxoJiYoZC50aW1lPWgpLGkmJihkLlRvb2x0aXA9aSksZH0oZSx0LTI0KTtyZXR1cm5bcixhXX19LDQ0MTp7fSw0NDI6e2Y6TmF9LDQ0Mzp7fSw0NDQ6e2Y6dHJ9LDQ0NTp7fSw0NDY6e30s'@;
put 'NDQ4OntmOnl0fSw0NDk6e2Y6ZnVuY3Rpb24gc3UoZSl7cmV0dXJuIGUucmVhZF9zaGlmdCgyKSxlLnJlYWRfc2hpZnQoNCl9LHI6Mn0sNDUwOntmOnl0fSw1MTI6e2Y6enN9LDUxMzp7ZjppaH0sNTE1OntmOmZ1bmN0aW9uIE91KGUsdCxyKXtyLmJpZmZndWVzcyYmMj09ci5iaWZmJiYoci5i'@;
put 'aWZmPTUpO3ZhciBhPW50KGUpLG49Z3IoZSk7cmV0dXJuIGEudmFsPW4sYX19LDUxNjp7ZjpmdW5jdGlvbiBwdShlLHQscil7ci5iaWZmZ3Vlc3MmJjI9PXIuYmlmZiYmKHIuYmlmZj01KTt2YXIgbj1udChlKTsyPT1yLmJpZmYmJmUubCsrO3ZhciBpPU5hKGUsMCxyKTtyZXR1cm4gbi52YWw9'@;
put 'aSxufX0sNTE3OntmOmpzfSw1MTk6e2Y6Zmh9LDUyMDp7ZjpmdW5jdGlvbiBudShlKXt2YXIgdD17fTt0LnI9ZS5yZWFkX3NoaWZ0KDIpLHQuYz1lLnJlYWRfc2hpZnQoMiksdC5jbnQ9ZS5yZWFkX3NoaWZ0KDIpLXQuYzt2YXIgcj1lLnJlYWRfc2hpZnQoMik7ZS5sKz00O3ZhciBhPWUucmVh'@;
put 'ZF9zaGlmdCgxKTtyZXR1cm4gZS5sKz0zLDcmYSYmKHQubGV2ZWw9NyZhKSwzMiZhJiYodC5oaWRkZW49ITApLDY0JmEmJih0LmhwdD1yLzIwKSx0fX0sNTIzOnt9LDU0NTp7Zjpac30sNTQ5OntmOkdzfSw1NjY6e30sNTc0OntmOmZ1bmN0aW9uIG91KGUsdCxyKXtyZXR1cm4gciYmci5iaWZm'@;
put 'Pj0yJiZyLmJpZmY8NT97fTp7UlRMOjY0JmUucmVhZF9zaGlmdCgyKX19fSw2Mzg6e2Y6ZnVuY3Rpb24gRXUoZSl7dmFyIHQ9ZS5yZWFkX3NoaWZ0KDIpLHI9ZS5yZWFkX3NoaWZ0KDIpLGE9V3MoZSk7cmV0dXJue3I6dCxjOnIsaXhmZTphWzBdLHJrbnVtOmFbMV19fX0sNjU5Ont9LDEwNDg6'@;
put 'e30sMTA1NDp7ZjpmdW5jdGlvbiBndShlLHQscil7cmV0dXJuW2UucmVhZF9zaGlmdCgyKSx6dChlLDAscildfX0sMTA4NDp7fSwxMjEyOntmOmZ1bmN0aW9uIEx1KGUsdCxyKXt2YXIgYT1WcyhlKTtlLmwrKzt2YXIgbj1lLnJlYWRfc2hpZnQoMSk7cmV0dXJuW1lkKGUsdC09OCxyKSxuLGFd'@;
put 'fX0sMjA0ODp7ZjpmdW5jdGlvbiBLdShlLHQpe2UucmVhZF9zaGlmdCgyKTt2YXIgcj1rMChlKSxhPWUucmVhZF9zaGlmdCgodC0xMCkvMiwiZGJjcy1jb250Iik7cmV0dXJuW3IsYT1hLnJlcGxhY2UoZHIsIiIpXX19LDIwNDk6e30sMjA1MDp7fSwyMDUxOnt9LDIwNTI6e30sMjA1Mzp7fSwy'@;
put 'MDU0Ont9LDIwNTU6e30sMjA1Njp7fSwyMDU3OntmOkUwfSwyMDU4Ont9LDIwNTk6e30sMjA2MDp7fSwyMDYxOnt9LDIwNjI6e30sMjA2Mzp7fSwyMDY0Ont9LDIwNjY6e30sMjA2Nzp7fSwyMTI4Ont9LDIxMjk6e30sMjEzMDp7fSwyMTMxOnt9LDIxMzI6e30sMjEzMzp7fSwyMTM0Ont9LDIx'@;
put 'MzU6e30sMjEzNjp7fSwyMTM3Ont9LDIxMzg6e30sMjE0Njp7fSwyMTQ3OntyOjEyfSwyMTQ4Ont9LDIxNDk6e30sMjE1MDp7fSwyMTUxOntmOnl0fSwyMTUyOnt9LDIxNTQ6e30sMjE1NTp7fSwyMTU2Ont9LDIxNjE6e30sMjE2Mjp7fSwyMTY0Ont9LDIxNjU6e30sMjE2Njp7fSwyMTY3Ont9'@;
put 'LDIxNjg6e30sMjE2OTp7fSwyMTcwOnt9LDIxNzE6e30sMjE3Mjp7ZjpmdW5jdGlvbiBlaChlKXtlLmwrPTI7dmFyIHQ9e2N4ZnM6MCxjcmM6MH07cmV0dXJuIHQuY3hmcz1lLnJlYWRfc2hpZnQoMiksdC5jcmM9ZS5yZWFkX3NoaWZ0KDQpLHR9LHI6MTJ9LDIxNzM6e2Y6ZnVuY3Rpb24gSjEo'@;
put 'ZSx0KXtlLmwrPTI7dmFyIGE9ZS5yZWFkX3NoaWZ0KDIpO2UubCs9Mjtmb3IodmFyIG49ZS5yZWFkX3NoaWZ0KDIpLGk9W107bi0tID4wOylpLnB1c2goWTEoZSkpO3JldHVybntpeGZlOmEsZXh0Oml9fSxyOjEyfSwyMTc0Ont9LDIxNzU6e30sMjE4MDp7fSwyMTgxOnt9LDIxODI6e30sMjE4'@;
put 'Mzp7fSwyMTg0Ont9LDIxODU6e30sMjE4Njp7fSwyMTg3Ont9LDIxODg6e2Y6SmUscjoxMn0sMjE4OTp7fSwyMTkwOntyOjEyfSwyMTkxOnt9LDIxOTI6e30sMjE5NDp7fSwyMTk1Ont9LDIxOTY6e2Y6ZnVuY3Rpb24gUHUoZSx0LHIpe2lmKCEoci5iaWZmPDgpKXt2YXIgYT1lLnJlYWRfc2hp'@;
put 'ZnQoMiksbj1lLnJlYWRfc2hpZnQoMik7cmV0dXJuW0d0KGUsYSxyKSxHdChlLG4scildfWUubCs9dH0scjoxMn0sMjE5Nzp7fSwyMTk4OntmOmZ1bmN0aW9uIEcxKGUsdCxyKXt2YXIgYT1lLmwrdDtpZigxMjQyMjYhPT1lLnJlYWRfc2hpZnQoNCkpe2lmKCFyLmNlbGxTdHlsZXMpcmV0dXJu'@;
put 'IHZvaWQoZS5sPWEpO3ZhciBzLGk9ZS5zbGljZShlLmwpO2UubD1hO3RyeXtzPVJpKGkse3R5cGU6ImFycmF5In0pfWNhdGNoe3JldHVybn12YXIgZj1OcihzLCJ0aGVtZS90aGVtZS90aGVtZTEueG1sIiwhMCk7aWYoZilyZXR1cm4gdmYoZixyKX19LHI6MTJ9LDIxOTk6e30sMjIwMDp7fSwy'@;
put 'MjAxOnt9LDIyMDI6e2Y6ZnVuY3Rpb24gQnUoZSl7cmV0dXJuWzAhPT1lLnJlYWRfc2hpZnQoNCksMCE9PWUucmVhZF9zaGlmdCg0KSxlLnJlYWRfc2hpZnQoNCldfSxyOjEyfSwyMjAzOntmOnl0fSwyMjA0Ont9LDIyMDU6e30sMjIwNjp7fSwyMjA3Ont9LDIyMTE6e2Y6ZnVuY3Rpb24gaXUo'@;
put 'ZSl7dmFyIHQ9ZnVuY3Rpb24gV2woZSl7dmFyIHQ9ZS5yZWFkX3NoaWZ0KDIpLHI9ZS5yZWFkX3NoaWZ0KDIpO3JldHVybiBlLmwrPTgse3R5cGU6dCxmbGFnczpyfX0oZSk7aWYoMjIxMSE9dC50eXBlKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBGdXR1cmUgUmVjb3JkICIrdC50eXBlKTty'@;
put 'ZXR1cm4gMCE9PWUucmVhZF9zaGlmdCg0KX19LDIyMTI6e30sMjIxMzp7fSwyMjE0Ont9LDIyMTU6e30sNDA5Nzp7fSw0MDk4Ont9LDQwOTk6e30sNDEwMjp7fSw0MTAzOnt9LDQxMDU6e30sNDEwNjp7fSw0MTA3Ont9LDQxMDg6e30sNDEwOTp7fSw0MTE2Ont9LDQxMTc6e30sNDExODp7fSw0'@;
put 'MTE5Ont9LDQxMjA6e30sNDEyMTp7fSw0MTIyOnt9LDQxMjM6e30sNDEyNDp7fSw0MTI1Ont9LDQxMjY6e30sNDEyNzp7fSw0MTI4Ont9LDQxMjk6e30sNDEzMDp7fSw0MTMyOnt9LDQxMzM6e30sNDEzNDp7Zjp0cn0sNDEzNTp7fSw0MTQ2Ont9LDQxNDc6e30sNDE0ODp7fSw0MTQ5Ont9LDQx'@;
put 'NTQ6e30sNDE1Njp7fSw0MTU3Ont9LDQxNTg6e30sNDE1OTp7fSw0MTYwOnt9LDQxNjE6e30sNDE2Mzp7fSw0MTY0OntmOmZ1bmN0aW9uIGFoKGUsdCxyKXt2YXIgYT17YXJlYTohMX07aWYoNSE9ci5iaWZmKXJldHVybiBlLmwrPXQsYTt2YXIgbj1lLnJlYWRfc2hpZnQoMSk7cmV0dXJuIGUu'@;
put 'bCs9MywxNiZuJiYoYS5hcmVhPSEwKSxhfX0sNDE2NTp7fSw0MTY2Ont9LDQxNjg6e30sNDE3MDp7fSw0MTcxOnt9LDQxNzQ6e30sNDE3NTp7fSw0MTc2Ont9LDQxNzc6e30sNDE4Nzp7fSw0MTg4OntmOmZ1bmN0aW9uIFp1KGUpe2Zvcih2YXIgdD1lLnJlYWRfc2hpZnQoMikscj1bXTt0LS0g'@;
put 'PjA7KXIucHVzaChVcyhlKSk7cmV0dXJuIHJ9fSw0MTg5Ont9LDQxOTE6e30sNDE5Mjp7fSw0MTkzOnt9LDQxOTQ6e30sNDE5NTp7fSw0MTk2Ont9LDQxOTc6e30sNDE5ODp7fSw0MTk5Ont9LDQyMDA6e30sMDp7Zjp6c30sMTp7fSwyOntmOmZ1bmN0aW9uIGhoKGUpe3ZhciB0PW50KGUpOysr'@;
put 'ZS5sO3ZhciByPWUucmVhZF9zaGlmdCgyKTtyZXR1cm4gdC50PSJuIix0LnZhbD1yLHR9fSwzOntmOmZ1bmN0aW9uIGxoKGUpe3ZhciB0PW50KGUpOysrZS5sO3ZhciByPWdyKGUpO3JldHVybiB0LnQ9Im4iLHQudmFsPXIsdH19LDQ6e2Y6ZnVuY3Rpb24gb2goZSx0LHIpe3IuYmlmZmd1ZXNz'@;
put 'JiY1PT1yLmJpZmYmJihyLmJpZmY9Mik7dmFyIGE9bnQoZSk7KytlLmw7dmFyIG49enQoZSwwLHIpO3JldHVybiBhLnQ9InN0ciIsYS52YWw9bixhfX0sNTp7Zjpqc30sNzp7ZjpmdW5jdGlvbiBkaChlKXt2YXIgdD1lLnJlYWRfc2hpZnQoMSk7cmV0dXJuIDA9PT10PyhlLmwrKywiIik6ZS5y'@;
put 'ZWFkX3NoaWZ0KHQsInNiY3MtY29udCIpfX0sODp7fSw5OntmOkUwfSwxMTp7fSwyMjp7Zjp0cn0sMzA6e2Y6d3V9LDMxOnt9LDMyOnt9LDMzOntmOlpzfSwzNjp7fSwzNzp7ZjpHc30sNTA6e2Y6ZnVuY3Rpb24gdmgoZSx0KXtlLmwrPTYsZS5sKz0yLGUubCs9MSxlLmwrPTMsZS5sKz0xLGUu'@;
put 'bCs9dC0xM319LDYyOnt9LDUyOnt9LDY3Ont9LDY4OntmOnRyfSw2OTp7fSw4Njp7fSwxMjY6e30sMTI3OntmOmZ1bmN0aW9uIGNoKGUpe3ZhciB0PWUucmVhZF9zaGlmdCgyKSxyPWUucmVhZF9zaGlmdCgyKSxhPWUucmVhZF9zaGlmdCg0KSxuPXtmbXQ6dCxlbnY6cixsZW46YSxkYXRhOmUu'@;
put 'c2xpY2UoZS5sLGUubCthKX07cmV0dXJuIGUubCs9YSxufX0sMTM1Ont9LDEzNjp7fSwxMzc6e30sMTQ1Ont9LDE0ODp7fSwxNDk6e30sMTUwOnt9LDE2OTp7fSwxNzE6e30sMTg4Ont9LDE5MTp7fSwxOTI6e30sMTk0Ont9LDE5NTp7fSwyMTQ6e2Y6ZnVuY3Rpb24gcGgoZSx0LHIpe3ZhciBh'@;
put 'PWUubCt0LG49bnQoZSksaT1lLnJlYWRfc2hpZnQoMikscz1HdChlLGkscik7cmV0dXJuIGUubD1hLG4udD0ic3RyIixuLnZhbD1zLG59fSwyMjM6e30sMjM0Ont9LDM1NDp7fSw0MjE6e30sNTE4OntmOk5ufSw1MjE6e2Y6RTB9LDUzNjp7ZjpKc30sNTQ3OntmOllzfSw1NjE6e30sNTc5Ont9'@;
put 'LDEwMzA6e2Y6Tm59LDEwMzM6e2Y6RTB9LDEwOTE6e30sMjE1Nzp7fSwyMTYzOnt9LDIxNzc6e30sMjI0MDp7fSwyMjQxOnt9LDIyNDI6e30sMjI0Mzp7fSwyMjQ0Ont9LDIyNDU6e30sMjI0Njp7fSwyMjQ3Ont9LDIyNDg6e30sMjI0OTp7fSwyMjUwOnt9LDIyNTE6e30sMjI2Mjp7cjoxMn0s'@;
put 'MjkyODI6e319O2Z1bmN0aW9uIGFlKGUsdCxyLGEpe3ZhciBuPXQ7aWYoIWlzTmFOKG4pKXt2YXIgaT1hfHwocnx8W10pLmxlbmd0aHx8MCxzPWUubmV4dCg0KTtzLndyaXRlX3NoaWZ0KDIsbikscy53cml0ZV9zaGlmdCgyLGkpLGk+MCYmcm4ocikmJmUucHVzaChyKX19ZnVuY3Rpb24gSmYo'@;
put 'ZSx0KXt2YXIgcj10fHx7fTtudWxsIT16ZSYmbnVsbD09ci5kZW5zZSYmKHIuZGVuc2U9emUpO3ZhciBhPXIuZGVuc2U/W106e30sbj0oZT1lLnJlcGxhY2UoLzwhLS0uKj8tLT4vZywiIikpLm1hdGNoKC88dGFibGUvaSk7aWYoIW4pdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIEhUTUw6IGNv'@;
put 'dWxkIG5vdCBmaW5kIDx0YWJsZT4iKTt2YXIgaT1lLm1hdGNoKC88XC90YWJsZS9pKSxzPW4uaW5kZXgsZj1pJiZpLmluZGV4fHxlLmxlbmd0aCxjPXZvKGUuc2xpY2UocyxmKSwvKDo/PHRyW14+XSo+KS9pLCI8dHI+Iiksbz0tMSxsPTAsaD0wLHg9MCxkPXtzOntyOjFlNyxjOjFlN30sZTp7'@;
put 'cjowLGM6MH19LHY9W107Zm9yKHM9MDtzPGMubGVuZ3RoOysrcyl7dmFyIHU9Y1tzXS50cmltKCkscD11LnNsaWNlKDAsMykudG9Mb3dlckNhc2UoKTtpZigiPHRyIiE9cCl7aWYoIjx0ZCI9PXB8fCI8dGgiPT1wKXt2YXIgaz11LnNwbGl0KC88XC90W2RoXT4vaSk7Zm9yKGY9MDtmPGsubGVu'@;
put 'Z3RoOysrZil7dmFyIFQ9a1tmXS50cmltKCk7aWYoVC5tYXRjaCgvPHRbZGhdL2kpKXtmb3IodmFyIGc9VCxOPTA7IjwiPT1nLmNoYXJBdCgwKSYmKE49Zy5pbmRleE9mKCI+IikpPi0xOylnPWcuc2xpY2UoTisxKTtmb3IodmFyIE09MDtNPHYubGVuZ3RoOysrTSl7dmFyIEk9dltNXTtJLnMu'@;
put 'Yz09bCYmSS5zLnI8byYmbzw9SS5lLnImJihsPUkuZS5jKzEsTT0tMSl9dmFyIHk9bWUoVC5zbGljZSgwLFQuaW5kZXhPZigiPiIpKSk7eD15LmNvbHNwYW4/K3kuY29sc3BhbjoxLCgoaD0reS5yb3dzcGFuKT4xfHx4PjEpJiZ2LnB1c2goe3M6e3I6byxjOmx9LGU6e3I6bysoaHx8MSktMSxj'@;
put 'OmwreC0xfX0pO3ZhciBQPXkudHx8eVsiZGF0YS10Il18fCIiO2lmKCFnLmxlbmd0aCl7bCs9eDtjb250aW51ZX1pZihnPVdpKGcpLGQucy5yPm8mJihkLnMucj1vKSxkLmUucjxvJiYoZC5lLnI9byksZC5zLmM+bCYmKGQucy5jPWwpLGQuZS5jPGwmJihkLmUuYz1sKSwhZy5sZW5ndGgpe2wr'@;
put 'PXg7Y29udGludWV9dmFyIFI9e3Q6InMiLHY6Z307ci5yYXd8fCFnLnRyaW0oKS5sZW5ndGh8fCJzIj09UHx8KCJUUlVFIj09PWc/Uj17dDoiYiIsdjohMH06IkZBTFNFIj09PWc/Uj17dDoiYiIsdjohMX06aXNOYU4oSnIoZykpP2lzTmFOKGFhKGcpLmdldERhdGUoKSl8fChSPXt0OiJkIix2'@;
put 'OlhlKGcpfSxyLmNlbGxEYXRlc3x8KFI9e3Q6Im4iLHY6aXIoUi52KX0pLFIuej1yLmRhdGVORnx8cGVbMTRdKTpSPXt0OiJuIix2OkpyKGcpfSksci5kZW5zZT8oYVtvXXx8KGFbb109W10pLGFbb11bbF09Uik6YVtnZSh7cjpvLGM6bH0pXT1SLGwrPXh9fX19ZWxzZXtpZigrK28sci5zaGVl'@;
put 'dFJvd3MmJnIuc2hlZXRSb3dzPD1vKXstLW87YnJlYWt9bD0wfX1yZXR1cm4gYVsiIXJlZiJdPXdlKGQpLHYubGVuZ3RoJiYoYVsiIW1lcmdlcyJdPXYpLGF9ZnVuY3Rpb24gUm0oZSl7dmFyIHQ9ZS5yZXBsYWNlKC9bXHRcclxuXS9nLCIgIikudHJpbSgpLnJlcGxhY2UoLyArL2csIiAiKS5y'@;
put 'ZXBsYWNlKC88dGV4dDpzXC8+L2csIiAiKS5yZXBsYWNlKC88dGV4dDpzIHRleHQ6Yz0iKFxkKykiXC8+L2csZnVuY3Rpb24oYSxuKXtyZXR1cm4gQXJyYXkocGFyc2VJbnQobiwxMCkrMSkuam9pbigiICIpfSkucmVwbGFjZSgvPHRleHQ6dGFiW14+XSpcLz4vZywiXHQiKS5yZXBsYWNlKC88'@;
put 'dGV4dDpsaW5lLWJyZWFrXC8+L2csIlxuIik7cmV0dXJuW0llKHQucmVwbGFjZSgvPFtePl0qPi9nLCIiKSldfXZhciBpYz17ZGF5OlsiZCIsImRkIl0sbW9udGg6WyJtIiwibW0iXSx5ZWFyOlsieSIsInl5Il0saG91cnM6WyJoIiwiaGgiXSxtaW51dGVzOlsibSIsIm1tIl0sc2Vjb25kczpb'@;
put 'InMiLCJzcyJdLCJhbS1wbSI6WyJBL1AiLCJBTS9QTSJdLCJkYXktb2Ytd2VlayI6WyJkZGQiLCJkZGRkIl0sZXJhOlsiZSIsImVlIl0scXVhcnRlcjpbIlxcUW0iLCdtXFwidGggcXVhcnRlciInXX07ZnVuY3Rpb24gc2MoZSx0KXt2YXIgcj10fHx7fTtudWxsIT16ZSYmbnVsbD09ci5kZW5z'@;
put 'ZSYmKHIuZGVuc2U9emUpO3ZhciBpLHMsbCxoLHUscCxhPVkwKGUpLG49W10sZj17bmFtZToiIn0sYz0iIixvPTAseD17fSxkPVtdLHY9ci5kZW5zZT9bXTp7fSxrPXt2YWx1ZToiIn0sVD0iIixnPTAsTT1bXSxJPS0xLHk9LTEsUD17czp7cjoxZTYsYzoxZTd9LGU6e3I6MCxjOjB9fSxSPTAs'@;
put 'Vj17fSxYPVtdLGI9e30sZWU9MCxsZT0wLHJlPVtdLGRlPTEsdWU9MSxGZT1bXSxjZT17TmFtZXM6W119LHhlPXt9LEs9WyIiLCIiXSxDPVtdLFU9e30sTz0iIixEPTAsaj0hMSxzZT0hMSxaPTA7Zm9yKHlhLmxhc3RJbmRleD0wLGE9YS5yZXBsYWNlKC88IS0tKFtcc1xTXSo/KS0tPi9nbSwi'@;
put 'IikucmVwbGFjZSgvPCFET0NUWVBFW15cW10qXFtbXlxdXSpcXT4vZ20sIiIpO3U9eWEuZXhlYyhhKTspc3dpdGNoKHVbM109dVszXS5yZXBsYWNlKC9fLiokLywiIikpe2Nhc2UidGFibGUiOmNhc2UiXHU1ZGU1XHU0ZjVjXHU4ODY4IjoiLyI9PT11WzFdPyh2WyIhcmVmIl09UC5lLmM+PVAu'@;
put 'cy5jJiZQLmUucj49UC5zLnI/d2UoUCk6IkExOkExIixyLnNoZWV0Um93cz4wJiZyLnNoZWV0Um93czw9UC5lLnImJih2WyIhZnVsbHJlZiJdPXZbIiFyZWYiXSxQLmUucj1yLnNoZWV0Um93cy0xLHZbIiFyZWYiXT13ZShQKSksWC5sZW5ndGgmJih2WyIhbWVyZ2VzIl09WCkscmUubGVuZ3Ro'@;
put 'JiYodlsiIXJvd3MiXT1yZSksbC5uYW1lPWwuXHU1NDBkXHU3OWYwfHxsLm5hbWUsdHlwZW9mIEpTT048InUiJiZKU09OLnN0cmluZ2lmeShsKSxkLnB1c2gobC5uYW1lKSx4W2wubmFtZV09dixzZT0hMSk6Ii8iIT09dVswXS5jaGFyQXQodVswXS5sZW5ndGgtMikmJihsPW1lKHVbMF0sITEp'@;
put 'LEk9eT0tMSxQLnMucj1QLnMuYz0xZTcsUC5lLnI9UC5lLmM9MCx2PXIuZGVuc2U/W106e30sWD1bXSxyZT1bXSxzZT0hMCk7YnJlYWs7Y2FzZSJ0YWJsZS1yb3ctZ3JvdXAiOiIvIj09PXVbMV0/LS1SOisrUjticmVhaztjYXNlInRhYmxlLXJvdyI6Y2FzZSJcdTg4NGMiOmlmKCIvIj09PXVb'@;
put 'MV0pe0krPWRlLGRlPTE7YnJlYWt9aWYoKGg9bWUodVswXSwhMSkpLlx1ODg0Y1x1NTNmNz9JPWguXHU4ODRjXHU1M2Y3LTE6LTE9PUkmJihJPTApLChkZT0raFsibnVtYmVyLXJvd3MtcmVwZWF0ZWQiXXx8MSk8MTApZm9yKFo9MDtaPGRlOysrWilSPjAmJihyZVtJK1pdPXtsZXZlbDpSfSk7'@;
put 'eT0tMTticmVhaztjYXNlImNvdmVyZWQtdGFibGUtY2VsbCI6Ii8iIT09dVsxXSYmKyt5LHIuc2hlZXRTdHVicyYmKHIuZGVuc2U/KHZbSV18fCh2W0ldPVtdKSx2W0ldW3ldPXt0OiJ6In0pOnZbZ2Uoe3I6SSxjOnl9KV09e3Q6InoifSksVD0iIixNPVtdO2JyZWFrO2Nhc2UidGFibGUtY2Vs'@;
put 'bCI6Y2FzZSJcdTY1NzBcdTYzNmUiOmlmKCIvIj09PXVbMF0uY2hhckF0KHVbMF0ubGVuZ3RoLTIpKSsreSxrPW1lKHVbMF0sITEpLHVlPXBhcnNlSW50KGtbIm51bWJlci1jb2x1bW5zLXJlcGVhdGVkIl18fCIxIiwxMCkscD17dDoieiIsdjpudWxsfSxrLmZvcm11bGEmJjAhPXIuY2VsbEZv'@;
put 'cm11bGEmJihwLmY9TmYoSWUoay5mb3JtdWxhKSkpLCJzdHJpbmciPT0oay5cdTY1NzBcdTYzNmVcdTdjN2JcdTU3OGJ8fGtbInZhbHVlLXR5cGUiXSkmJihwLnQ9InMiLHAudj1JZShrWyJzdHJpbmctdmFsdWUiXXx8IiIpLHIuZGVuc2U/KHZbSV18fCh2W0ldPVtdKSx2W0ldW3ldPXApOnZb'@;
put 'Z2Uoe3I6SSxjOnl9KV09cCkseSs9dWUtMTtlbHNlIGlmKCIvIiE9PXVbMV0pe1Q9IiIsZz0wLE09W10sdWU9MTt2YXIgUT1kZT9JK2RlLTE6STtpZigrK3k+UC5lLmMmJihQLmUuYz15KSx5PFAucy5jJiYoUC5zLmM9eSksSTxQLnMuciYmKFAucy5yPUkpLFE+UC5lLnImJihQLmUucj1RKSxD'@;
put 'PVtdLFU9e30scD17dDooaz1tZSh1WzBdLCExKSkuXHU2NTcwXHU2MzZlXHU3YzdiXHU1NzhifHxrWyJ2YWx1ZS10eXBlIl0sdjpudWxsfSxyLmNlbGxGb3JtdWxhKWlmKGsuZm9ybXVsYSYmKGsuZm9ybXVsYT1JZShrLmZvcm11bGEpKSxrWyJudW1iZXItbWF0cml4LWNvbHVtbnMtc3Bhbm5l'@;
put 'ZCJdJiZrWyJudW1iZXItbWF0cml4LXJvd3Mtc3Bhbm5lZCJdJiYoZWU9cGFyc2VJbnQoa1sibnVtYmVyLW1hdHJpeC1yb3dzLXNwYW5uZWQiXSwxMCl8fDAsbGU9cGFyc2VJbnQoa1sibnVtYmVyLW1hdHJpeC1jb2x1bW5zLXNwYW5uZWQiXSwxMCl8fDAscC5GPXdlKGI9e3M6e3I6SSxjOnl9'@;
put 'LGU6e3I6SStlZS0xLGM6eStsZS0xfX0pLEZlLnB1c2goW2IscC5GXSkpLGsuZm9ybXVsYSlwLmY9TmYoay5mb3JtdWxhKTtlbHNlIGZvcihaPTA7WjxGZS5sZW5ndGg7KytaKUk+PUZlW1pdWzBdLnMuciYmSTw9RmVbWl1bMF0uZS5yJiZ5Pj1GZVtaXVswXS5zLmMmJnk8PUZlW1pdWzBdLmUu'@;
put 'YyYmKHAuRj1GZVtaXVsxXSk7c3dpdGNoKChrWyJudW1iZXItY29sdW1ucy1zcGFubmVkIl18fGtbIm51bWJlci1yb3dzLXNwYW5uZWQiXSkmJihlZT1wYXJzZUludChrWyJudW1iZXItcm93cy1zcGFubmVkIl0sMTApfHwwLGxlPXBhcnNlSW50KGtbIm51bWJlci1jb2x1bW5zLXNwYW5uZWQi'@;
put 'XSwxMCl8fDAsWC5wdXNoKGI9e3M6e3I6SSxjOnl9LGU6e3I6SStlZS0xLGM6eStsZS0xfX0pKSxrWyJudW1iZXItY29sdW1ucy1yZXBlYXRlZCJdJiYodWU9cGFyc2VJbnQoa1sibnVtYmVyLWNvbHVtbnMtcmVwZWF0ZWQiXSwxMCkpLHAudCl7Y2FzZSJib29sZWFuIjpwLnQ9ImIiLHAudj1X'@;
put 'ZShrWyJib29sZWFuLXZhbHVlIl0pO2JyZWFrO2Nhc2UiZmxvYXQiOmNhc2UicGVyY2VudGFnZSI6Y2FzZSJjdXJyZW5jeSI6cC50PSJuIixwLnY9cGFyc2VGbG9hdChrLnZhbHVlKTticmVhaztjYXNlImRhdGUiOnAudD0iZCIscC52PVhlKGtbImRhdGUtdmFsdWUiXSksci5jZWxsRGF0ZXN8'@;
put 'fChwLnQ9Im4iLHAudj1pcihwLnYpKSxwLno9Im0vZC95eSI7YnJlYWs7Y2FzZSJ0aW1lIjpwLnQ9Im4iLHAudj11byhrWyJ0aW1lLXZhbHVlIl0pLzg2NDAwLHIuY2VsbERhdGVzJiYocC50PSJkIixwLnY9bzAocC52KSkscC56PSJISDpNTTpTUyI7YnJlYWs7Y2FzZSJudW1iZXIiOnAudD0i'@;
put 'biIscC52PXBhcnNlRmxvYXQoay5cdTY1NzBcdTYzNmVcdTY1NzBcdTUwM2MpO2JyZWFrO2RlZmF1bHQ6aWYoInN0cmluZyIhPT1wLnQmJiJ0ZXh0IiE9PXAudCYmcC50KXRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgdmFsdWUgdHlwZSAiK3AudCk7cC50PSJzIixudWxsIT1rWyJzdHJp'@;
put 'bmctdmFsdWUiXSYmKFQ9SWUoa1sic3RyaW5nLXZhbHVlIl0pLE09W10pfX1lbHNle2lmKGo9ITEsInMiPT09cC50JiYocC52PVR8fCIiLE0ubGVuZ3RoJiYocC5SPU0pLGo9MD09ZykseGUuVGFyZ2V0JiYocC5sPXhlKSxDLmxlbmd0aD4wJiYocC5jPUMsQz1bXSksVCYmITEhPT1yLmNlbGxU'@;
put 'ZXh0JiYocC53PVQpLGomJihwLnQ9InoiLGRlbGV0ZSBwLnYpLCghanx8ci5zaGVldFN0dWJzKSYmIShyLnNoZWV0Um93cyYmci5zaGVldFJvd3M8PUkpKWZvcih2YXIgWT0wO1k8ZGU7KytZKXtpZih1ZT1wYXJzZUludChrWyJudW1iZXItY29sdW1ucy1yZXBlYXRlZCJdfHwiMSIsMTApLHIu'@;
put 'ZGVuc2UpZm9yKHZbSStZXXx8KHZbSStZXT1bXSksdltJK1ldW3ldPTA9PVk/cDpNZShwKTstLXVlPjA7KXZbSStZXVt5K3VlXT1NZShwKTtlbHNlIGZvcih2W2dlKHtyOkkrWSxjOnl9KV09cDstLXVlPjA7KXZbZ2Uoe3I6SStZLGM6eSt1ZX0pXT1NZShwKTtQLmUuYzw9eSYmKFAuZS5jPXkp'@;
put 'fXkrPSh1ZT1wYXJzZUludChrWyJudW1iZXItY29sdW1ucy1yZXBlYXRlZCJdfHwiMSIsMTApKS0xLHVlPTAscD17fSxUPSIiLE09W119eGU9e307YnJlYWs7Y2FzZSJkb2N1bWVudCI6Y2FzZSJkb2N1bWVudC1jb250ZW50IjpjYXNlIlx1NzUzNVx1NWI1MFx1ODg2OFx1NjgzY1x1NjU4N1x1'@;
put 'Njg2MyI6Y2FzZSJzcHJlYWRzaGVldCI6Y2FzZSJcdTRlM2JcdTRmNTMiOmNhc2Uic2NyaXB0cyI6Y2FzZSJzdHlsZXMiOmNhc2UiZm9udC1mYWNlLWRlY2xzIjpjYXNlIm1hc3Rlci1zdHlsZXMiOmlmKCIvIj09PXVbMV0pe2lmKChpPW4ucG9wKCkpWzBdIT09dVszXSl0aHJvdyJCYWQgc3Rh'@;
put 'dGU6ICIraX1lbHNlIi8iIT09dVswXS5jaGFyQXQodVswXS5sZW5ndGgtMikmJm4ucHVzaChbdVszXSwhMF0pO2JyZWFrO2Nhc2UiYW5ub3RhdGlvbiI6aWYoIi8iPT09dVsxXSl7aWYoKGk9bi5wb3AoKSlbMF0hPT11WzNdKXRocm93IkJhZCBzdGF0ZTogIitpO1UudD1ULE0ubGVuZ3RoJiYo'@;
put 'VS5SPU0pLFUuYT1PLEMucHVzaChVKX1lbHNlIi8iIT09dVswXS5jaGFyQXQodVswXS5sZW5ndGgtMikmJm4ucHVzaChbdVszXSwhMV0pO089IiIsRD0wLFQ9IiIsZz0wLE09W107YnJlYWs7Y2FzZSJjcmVhdG9yIjoiLyI9PT11WzFdP089YS5zbGljZShELHUuaW5kZXgpOkQ9dS5pbmRleCt1'@;
put 'WzBdLmxlbmd0aDticmVhaztjYXNlIm1ldGEiOmNhc2UiXHU1MTQzXHU2NTcwXHU2MzZlIjpjYXNlInNldHRpbmdzIjpjYXNlImNvbmZpZy1pdGVtLXNldCI6Y2FzZSJjb25maWctaXRlbS1tYXAtaW5kZXhlZCI6Y2FzZSJjb25maWctaXRlbS1tYXAtZW50cnkiOmNhc2UiY29uZmlnLWl0ZW0t'@;
put 'bWFwLW5hbWVkIjpjYXNlInNoYXBlcyI6Y2FzZSJmcmFtZSI6Y2FzZSJ0ZXh0LWJveCI6Y2FzZSJpbWFnZSI6Y2FzZSJkYXRhLXBpbG90LXRhYmxlcyI6Y2FzZSJsaXN0LXN0eWxlIjpjYXNlImZvcm0iOmNhc2UiZGRlLWxpbmtzIjpjYXNlImV2ZW50LWxpc3RlbmVycyI6Y2FzZSJjaGFydCI6'@;
put 'aWYoIi8iPT09dVsxXSl7aWYoKGk9bi5wb3AoKSlbMF0hPT11WzNdKXRocm93IkJhZCBzdGF0ZTogIitpfWVsc2UiLyIhPT11WzBdLmNoYXJBdCh1WzBdLmxlbmd0aC0yKSYmbi5wdXNoKFt1WzNdLCExXSk7VD0iIixnPTAsTT1bXTticmVhaztjYXNlInNjaWVudGlmaWMtbnVtYmVyIjpjYXNl'@;
put 'ImN1cnJlbmN5LXN5bWJvbCI6Y2FzZSJjdXJyZW5jeS1zdHlsZSI6Y2FzZSJzY3JpcHQiOmNhc2UibGlicmFyaWVzIjpjYXNlImF1dG9tYXRpYy1zdHlsZXMiOmNhc2UiZGVmYXVsdC1zdHlsZSI6Y2FzZSJwYWdlLWxheW91dCI6Y2FzZSJzdHlsZSI6Y2FzZSJtYXAiOmNhc2UiZm9udC1mYWNl'@;
put 'IjpjYXNlInBhcmFncmFwaC1wcm9wZXJ0aWVzIjpjYXNlInRhYmxlLXByb3BlcnRpZXMiOmNhc2UidGFibGUtY29sdW1uLXByb3BlcnRpZXMiOmNhc2UidGFibGUtcm93LXByb3BlcnRpZXMiOmNhc2UidGFibGUtY2VsbC1wcm9wZXJ0aWVzIjpjYXNlImZyYWN0aW9uIjpjYXNlImJvb2xlYW4t'@;
put 'c3R5bGUiOmNhc2UiYm9vbGVhbiI6Y2FzZSJ0ZXh0LXN0eWxlIjpjYXNlInRleHQtY29udGVudCI6Y2FzZSJ0ZXh0LXByb3BlcnRpZXMiOmNhc2UiZW1iZWRkZWQtdGV4dCI6Y2FzZSJib2R5IjpjYXNlIlx1NzUzNVx1NWI1MFx1ODg2OFx1NjgzYyI6Y2FzZSJmb3JtcyI6Y2FzZSJ0YWJsZS1j'@;
put 'b2x1bW4iOmNhc2UidGFibGUtaGVhZGVyLXJvd3MiOmNhc2UidGFibGUtcm93cyI6Y2FzZSJ0YWJsZS1jb2x1bW4tZ3JvdXAiOmNhc2UidGFibGUtaGVhZGVyLWNvbHVtbnMiOmNhc2UidGFibGUtY29sdW1ucyI6Y2FzZSJudWxsLWRhdGUiOmNhc2UiZ3JhcGhpYy1wcm9wZXJ0aWVzIjpjYXNl'@;
put 'ImNhbGN1bGF0aW9uLXNldHRpbmdzIjpjYXNlIm5hbWVkLWV4cHJlc3Npb25zIjpjYXNlImxhYmVsLXJhbmdlIjpjYXNlImxhYmVsLXJhbmdlcyI6Y2FzZSJuYW1lZC1leHByZXNzaW9uIjpjYXNlInNvcnQiOmNhc2Uic29ydC1ieSI6Y2FzZSJzb3J0LWdyb3VwcyI6Y2FzZSJ0YWIiOmNhc2Ui'@;
put 'bGluZS1icmVhayI6Y2FzZSJzcGFuIjpjYXNlInMiOmNhc2UiZGF0ZSI6Y2FzZSJvYmplY3QiOmNhc2UidGl0bGUiOmNhc2UiXHU2ODA3XHU5ODk4IjpjYXNlImRlc2MiOmNhc2UiYmluYXJ5LWRhdGEiOmNhc2UidGFibGUtc291cmNlIjpjYXNlInNjZW5hcmlvIjpjYXNlIml0ZXJhdGlvbiI6'@;
put 'Y2FzZSJjb250ZW50LXZhbGlkYXRpb25zIjpjYXNlImNvbnRlbnQtdmFsaWRhdGlvbiI6Y2FzZSJoZWxwLW1lc3NhZ2UiOmNhc2UiZXJyb3ItbWVzc2FnZSI6Y2FzZSJkYXRhYmFzZS1yYW5nZXMiOmNhc2UiZmlsdGVyIjpjYXNlImZpbHRlci1hbmQiOmNhc2UiZmlsdGVyLW9yIjpjYXNlImZp'@;
put 'bHRlci1jb25kaXRpb24iOmNhc2UibGlzdC1sZXZlbC1zdHlsZS1idWxsZXQiOmNhc2UibGlzdC1sZXZlbC1zdHlsZS1udW1iZXIiOmNhc2UibGlzdC1sZXZlbC1wcm9wZXJ0aWVzIjpjYXNlInNlbmRlci1maXJzdG5hbWUiOmNhc2Uic2VuZGVyLWxhc3RuYW1lIjpjYXNlInNlbmRlci1pbml0'@;
put 'aWFscyI6Y2FzZSJzZW5kZXItdGl0bGUiOmNhc2Uic2VuZGVyLXBvc2l0aW9uIjpjYXNlInNlbmRlci1lbWFpbCI6Y2FzZSJzZW5kZXItcGhvbmUtcHJpdmF0ZSI6Y2FzZSJzZW5kZXItZmF4IjpjYXNlInNlbmRlci1jb21wYW55IjpjYXNlInNlbmRlci1waG9uZS13b3JrIjpjYXNlInNlbmRl'@;
put 'ci1zdHJlZXQiOmNhc2Uic2VuZGVyLWNpdHkiOmNhc2Uic2VuZGVyLXBvc3RhbC1jb2RlIjpjYXNlInNlbmRlci1jb3VudHJ5IjpjYXNlInNlbmRlci1zdGF0ZS1vci1wcm92aW5jZSI6Y2FzZSJhdXRob3ItbmFtZSI6Y2FzZSJhdXRob3ItaW5pdGlhbHMiOmNhc2UiY2hhcHRlciI6Y2FzZSJm'@;
put 'aWxlLW5hbWUiOmNhc2UidGVtcGxhdGUtbmFtZSI6Y2FzZSJzaGVldC1uYW1lIjpjYXNlImV2ZW50LWxpc3RlbmVyIjpjYXNlImluaXRpYWwtY3JlYXRvciI6Y2FzZSJjcmVhdGlvbi1kYXRlIjpjYXNlInByaW50LWRhdGUiOmNhc2UiZ2VuZXJhdG9yIjpjYXNlImRvY3VtZW50LXN0YXRpc3Rp'@;
put 'YyI6Y2FzZSJ1c2VyLWRlZmluZWQiOmNhc2UiZWRpdGluZy1kdXJhdGlvbiI6Y2FzZSJlZGl0aW5nLWN5Y2xlcyI6Y2FzZSJjb25maWctaXRlbSI6Y2FzZSJwYWdlLW51bWJlciI6Y2FzZSJwYWdlLWNvdW50IjpjYXNlInRpbWUiOmNhc2UiY2VsbC1yYW5nZS1zb3VyY2UiOmNhc2UiZGV0ZWN0'@;
put 'aXZlIjpjYXNlIm9wZXJhdGlvbiI6Y2FzZSJoaWdobGlnaHRlZC1yYW5nZSI6Y2FzZSJkYXRhLXBpbG90LXRhYmxlIjpjYXNlInNvdXJjZS1jZWxsLXJhbmdlIjpjYXNlInNvdXJjZS1zZXJ2aWNlIjpjYXNlImRhdGEtcGlsb3QtZmllbGQiOmNhc2UiZGF0YS1waWxvdC1sZXZlbCI6Y2FzZSJk'@;
put 'YXRhLXBpbG90LXN1YnRvdGFscyI6Y2FzZSJkYXRhLXBpbG90LXN1YnRvdGFsIjpjYXNlImRhdGEtcGlsb3QtbWVtYmVycyI6Y2FzZSJkYXRhLXBpbG90LW1lbWJlciI6Y2FzZSJkYXRhLXBpbG90LWRpc3BsYXktaW5mbyI6Y2FzZSJkYXRhLXBpbG90LXNvcnQtaW5mbyI6Y2FzZSJkYXRhLXBp'@;
put 'bG90LWxheW91dC1pbmZvIjpjYXNlImRhdGEtcGlsb3QtZmllbGQtcmVmZXJlbmNlIjpjYXNlImRhdGEtcGlsb3QtZ3JvdXBzIjpjYXNlImRhdGEtcGlsb3QtZ3JvdXAiOmNhc2UiZGF0YS1waWxvdC1ncm91cC1tZW1iZXIiOmNhc2UicmVjdCI6Y2FzZSJkZGUtY29ubmVjdGlvbi1kZWNscyI6'@;
put 'Y2FzZSJkZGUtY29ubmVjdGlvbi1kZWNsIjpjYXNlImRkZS1saW5rIjpjYXNlImRkZS1zb3VyY2UiOmNhc2UicHJvcGVydGllcyI6Y2FzZSJwcm9wZXJ0eSI6Y2FzZSJ0YWJsZS1wcm90ZWN0aW9uIjpjYXNlImRhdGEtcGlsb3QtZ3JhbmQtdG90YWwiOmNhc2Uib2ZmaWNlLWRvY3VtZW50LWNv'@;
put 'bW1vbi1hdHRycyI6YnJlYWs7Y2FzZSJudW1iZXItc3R5bGUiOmNhc2UicGVyY2VudGFnZS1zdHlsZSI6Y2FzZSJkYXRlLXN0eWxlIjpjYXNlInRpbWUtc3R5bGUiOmlmKCIvIj09PXVbMV0pe2lmKFZbZi5uYW1lXT1jLChpPW4ucG9wKCkpWzBdIT09dVszXSl0aHJvdyJCYWQgc3RhdGU6ICIr'@;
put 'aX1lbHNlIi8iIT09dVswXS5jaGFyQXQodVswXS5sZW5ndGgtMikmJihjPSIiLGY9bWUodVswXSwhMSksbi5wdXNoKFt1WzNdLCEwXSkpO2JyZWFrO2Nhc2UibnVtYmVyIjpjYXNlImRheSI6Y2FzZSJtb250aCI6Y2FzZSJ5ZWFyIjpjYXNlImVyYSI6Y2FzZSJkYXktb2Ytd2VlayI6Y2FzZSJ3'@;
put 'ZWVrLW9mLXllYXIiOmNhc2UicXVhcnRlciI6Y2FzZSJob3VycyI6Y2FzZSJtaW51dGVzIjpjYXNlInNlY29uZHMiOmNhc2UiYW0tcG0iOnN3aXRjaChuW24ubGVuZ3RoLTFdWzBdKXtjYXNlInRpbWUtc3R5bGUiOmNhc2UiZGF0ZS1zdHlsZSI6cz1tZSh1WzBdLCExKSxjKz1pY1t1WzNdXVsi'@;
put 'bG9uZyI9PT1zLnN0eWxlPzE6MF19YnJlYWs7Y2FzZSJ0ZXh0IjppZigiLz4iPT09dVswXS5zbGljZSgtMikpYnJlYWs7aWYoIi8iPT09dVsxXSlzd2l0Y2gobltuLmxlbmd0aC0xXVswXSl7Y2FzZSJudW1iZXItc3R5bGUiOmNhc2UiZGF0ZS1zdHlsZSI6Y2FzZSJ0aW1lLXN0eWxlIjpjKz1h'@;
put 'LnNsaWNlKG8sdS5pbmRleCl9ZWxzZSBvPXUuaW5kZXgrdVswXS5sZW5ndGg7YnJlYWs7Y2FzZSJuYW1lZC1yYW5nZSI6Sz1ibigocz1tZSh1WzBdLCExKSlbImNlbGwtcmFuZ2UtYWRkcmVzcyJdKTt2YXIgRWU9e05hbWU6cy5uYW1lLFJlZjpLWzBdKyIhIitLWzFdfTtzZSYmKEVlLlNoZWV0'@;
put 'PWQubGVuZ3RoKSxjZS5OYW1lcy5wdXNoKEVlKTticmVhaztjYXNlInAiOmNhc2UiXHU2NTg3XHU2NzJjXHU0ZTMyIjppZihbIm1hc3Rlci1zdHlsZXMiXS5pbmRleE9mKG5bbi5sZW5ndGgtMV1bMF0pPi0xKWJyZWFrO2lmKCIvIiE9PXVbMV18fGsmJmtbInN0cmluZy12YWx1ZSJdKW1lKHVb'@;
put 'MF0sITEpLGc9dS5pbmRleCt1WzBdLmxlbmd0aDtlbHNle3ZhciBBPVJtKGEuc2xpY2UoZyx1LmluZGV4KSk7VD0oVC5sZW5ndGg+MD9UKyJcbiI6IiIpK0FbMF19YnJlYWs7Y2FzZSJkYXRhYmFzZS1yYW5nZSI6aWYoIi8iPT09dVsxXSlicmVhazt0cnl7eFsoSz1ibihtZSh1WzBdKVsidGFy'@;
put 'Z2V0LXJhbmdlLWFkZHJlc3MiXSkpWzBdXVsiIWF1dG9maWx0ZXIiXT17cmVmOktbMV19fWNhdGNoe31icmVhaztjYXNlImEiOmlmKCIvIiE9PXVbMV0pe2lmKCEoeGU9bWUodVswXSwhMSkpLmhyZWYpYnJlYWs7eGUuVGFyZ2V0PUllKHhlLmhyZWYpLGRlbGV0ZSB4ZS5ocmVmLCIjIj09eGUu'@;
put 'VGFyZ2V0LmNoYXJBdCgwKSYmeGUuVGFyZ2V0LmluZGV4T2YoIi4iKT4tMT8oSz1ibih4ZS5UYXJnZXQuc2xpY2UoMSkpLHhlLlRhcmdldD0iIyIrS1swXSsiISIrS1sxXSk6eGUuVGFyZ2V0Lm1hdGNoKC9eXC5cLltcXFwvXS8pJiYoeGUuVGFyZ2V0PXhlLlRhcmdldC5zbGljZSgzKSl9YnJl'@;
put 'YWs7ZGVmYXVsdDpzd2l0Y2godVsyXSl7Y2FzZSJkYzoiOmNhc2UiY2FsY2V4dDoiOmNhc2UibG9leHQ6IjpjYXNlIm9vbzoiOmNhc2UiY2hhcnRvb286IjpjYXNlImRyYXc6IjpjYXNlInN0eWxlOiI6Y2FzZSJjaGFydDoiOmNhc2UiZm9ybToiOmNhc2UidW9mOiI6Y2FzZSJcdTg4Njg6Ijpj'@;
put 'YXNlIlx1NWI1NzoiOmJyZWFrO2RlZmF1bHQ6aWYoci5XVEYpdGhyb3cgbmV3IEVycm9yKHUpfX12YXIgUGU9e1NoZWV0czp4LFNoZWV0TmFtZXM6ZCxXb3JrYm9vazpjZX07cmV0dXJuIHIuYm9va1NoZWV0cyYmZGVsZXRlIFBlLlNoZWV0cyxQZX1mdW5jdGlvbiBjYyhlLHQpe3JldHVybiBz'@;
put 'YyhlLHQpfWZ1bmN0aW9uIEp0KGUpe3JldHVybiBuZXcgRGF0YVZpZXcoZS5idWZmZXIsZS5ieXRlT2Zmc2V0LGUuYnl0ZUxlbmd0aCl9ZnVuY3Rpb24gSG4oZSl7cmV0dXJuIHR5cGVvZiBUZXh0RGVjb2RlcjwidSI/KG5ldyBUZXh0RGVjb2RlcikuZGVjb2RlKGUpOkJlKHd0KGUpKX1mdW5j'@;
put 'dGlvbiBEdChlKXt2YXIgdD1lLnJlZHVjZShmdW5jdGlvbihuLGkpe3JldHVybiBuK2kubGVuZ3RofSwwKSxyPW5ldyBVaW50OEFycmF5KHQpLGE9MDtyZXR1cm4gZS5mb3JFYWNoKGZ1bmN0aW9uKG4pe3Iuc2V0KG4sYSksYSs9bi5sZW5ndGh9KSxyfWZ1bmN0aW9uIHVjKGUpe3JldHVybiAx'@;
put 'Njg0MzAwOSooKGU9KDg1ODk5MzQ1OSYoZS09ZT4+MSYxNDMxNjU1NzY1KSkrKGU+PjImODU4OTkzNDU5KSkrKGU+PjQpJjI1MjY0NTEzNSk+Pj4yNH1mdW5jdGlvbiBLYShlLHQpe3ZhciByPXQ/dFswXTowLGE9MTI3JmVbcl07ZTppZihlW3IrK10+PTEyOCYmKGF8PSgxMjcmZVtyXSk8PDcs'@;
put 'ZVtyKytdPDEyOHx8KGF8PSgxMjcmZVtyXSk8PDE0LGVbcisrXTwxMjgpfHwoYXw9KDEyNyZlW3JdKTw8MjEsZVtyKytdPDEyOCl8fChhKz0oMTI3JmVbcl0pKk1hdGgucG93KDIsMjgpLCsrcixlW3IrK108MTI4KXx8KGErPSgxMjcmZVtyXSkqTWF0aC5wb3coMiwzNSksKytyLGVbcisrXTwx'@;
put 'MjgpfHwoYSs9KDEyNyZlW3JdKSpNYXRoLnBvdygyLDQyKSwrK3IsZVtyKytdPDEyOCkpKWJyZWFrIGU7cmV0dXJuIHQmJih0WzBdPXIpLGF9ZnVuY3Rpb24gWWUoZSl7dmFyIHQ9MCxyPTEyNyZlW3RdO2U6aWYoZVt0KytdPj0xMjgpe2lmKHJ8PSgxMjcmZVt0XSk8PDcsZVt0KytdPDEyOHx8'@;
put 'KHJ8PSgxMjcmZVt0XSk8PDE0LGVbdCsrXTwxMjgpfHwocnw9KDEyNyZlW3RdKTw8MjEsZVt0KytdPDEyOCkpYnJlYWsgZTtyfD0oMTI3JmVbdF0pPDwyOH1yZXR1cm4gcn1mdW5jdGlvbiBSZShlKXtmb3IodmFyIHQ9W10scj1bMF07clswXTxlLmxlbmd0aDspe3ZhciBmLGE9clswXSxuPUth'@;
put 'KGUsciksaT03Jm4scz0wO2lmKDA9PShuPU1hdGguZmxvb3Iobi84KSkpYnJlYWs7c3dpdGNoKGkpe2Nhc2UgMDpmb3IodmFyIGM9clswXTtlW3JbMF0rK10+PTEyODspO2Y9ZS5zbGljZShjLHJbMF0pO2JyZWFrO2Nhc2UgNTpmPWUuc2xpY2UoclswXSxyWzBdKyhzPTQpKSxyWzBdKz1zO2Jy'@;
put 'ZWFrO2Nhc2UgMTpmPWUuc2xpY2UoclswXSxyWzBdKyhzPTgpKSxyWzBdKz1zO2JyZWFrO2Nhc2UgMjpzPUthKGUsciksZj1lLnNsaWNlKHJbMF0sclswXStzKSxyWzBdKz1zO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJQQiBUeXBlICIuY29uY2F0KGksIiBmb3IgRmllbGQgIiku'@;
put 'Y29uY2F0KG4sIiBhdCBvZmZzZXQgIikuY29uY2F0KGEpKX12YXIgbz17ZGF0YTpmLHR5cGU6aX07bnVsbD09dFtuXT90W25dPVtvXTp0W25dLnB1c2gobyl9cmV0dXJuIHR9ZnVuY3Rpb24gVm4oZSx0KXtyZXR1cm4gZT8ubWFwKGZ1bmN0aW9uKHIpe3JldHVybiB0KHIuZGF0YSl9KXx8W119'@;
put 'ZnVuY3Rpb24gTW0oZSx0KXtpZigwIT1lKXRocm93IG5ldyBFcnJvcigiVW5leHBlY3RlZCBTbmFwcHkgY2h1bmsgdHlwZSAiLmNvbmNhdChlKSk7Zm9yKHZhciByPVswXSxhPUthKHQsciksbj1bXTtyWzBdPHQubGVuZ3RoOyl7dmFyIGk9MyZ0W3JbMF1dO2lmKDAhPWkpe3ZhciBjPTAsbz0w'@;
put 'O2lmKDE9PWk/KG89NCsodFtyWzBdXT4+MiY3KSxjPSgyMjQmdFtyWzBdKytdKTw8MyxjfD10W3JbMF0rK10pOihvPTErKHRbclswXSsrXT4+MiksMj09aT8oYz10W3JbMF1dfHRbclswXSsxXTw8OCxyWzBdKz0yKTooYz0odFtyWzBdXXx0W3JbMF0rMV08PDh8dFtyWzBdKzJdPDwxNnx0W3Jb'@;
put 'MF0rM108PDI0KT4+PjAsclswXSs9NCkpLG49W0R0KG4pXSwwPT1jKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBvZmZzZXQgMCIpO2lmKGM+blswXS5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIG9mZnNldCBiZXlvbmQgbGVuZ3RoIik7aWYobz49Yylmb3Iobi5wdXNoKG5bMF0u'@;
put 'c2xpY2UoLWMpKSxvLT1jO28+PW5bbi5sZW5ndGgtMV0ubGVuZ3RoOyluLnB1c2gobltuLmxlbmd0aC0xXSksby09bltuLmxlbmd0aC0xXS5sZW5ndGg7bi5wdXNoKG5bMF0uc2xpY2UoLWMsLWMrbykpfWVsc2V7dmFyIHM9dFtyWzBdKytdPj4yO2lmKHM8NjApKytzO2Vsc2V7dmFyIGY9cy01'@;
put 'OTtzPXRbclswXV0sZj4xJiYoc3w9dFtyWzBdKzFdPDw4KSxmPjImJihzfD10W3JbMF0rMl08PDE2KSxmPjMmJihzfD10W3JbMF0rM108PDI0KSxzPj4+PTAscysrLHJbMF0rPWZ9bi5wdXNoKHQuc2xpY2UoclswXSxyWzBdK3MpKSxyWzBdKz1zfX12YXIgbD1EdChuKTtpZihsLmxlbmd0aCE9'@;
put 'YSl0aHJvdyBuZXcgRXJyb3IoIlVuZXhwZWN0ZWQgbGVuZ3RoOiAiLmNvbmNhdChsLmxlbmd0aCwiICE9ICIpLmNvbmNhdChhKSk7cmV0dXJuIGx9ZnVuY3Rpb24gSG0oZSx0LHIpe3N3aXRjaChlWzBdKXtjYXNlIDA6Y2FzZSAxOmNhc2UgMjpjYXNlIDM6cmV0dXJuIGZ1bmN0aW9uIFVtKGUs'@;
put 'dCxyLGEpe3ZhciBoLG49SnQoZSksaT1uLmdldFVpbnQzMig0LCEwKSxzPShhPjE/MTI6OCkrNCp1YyhpJihhPjE/MzQ3MDozOTgpKSxmPS0xLGM9LTEsbz1OYU4sbD1uZXcgRGF0ZSgyMDAxLDAsMSk7c3dpdGNoKDUxMiZpJiYoZj1uLmdldFVpbnQzMihzLCEwKSxzKz00KSxzKz00KnVjKGkm'@;
put 'KGE+MT8xMjI4ODo0MDk2KSksMTYmaSYmKGM9bi5nZXRVaW50MzIocywhMCkscys9NCksMzImaSYmKG89bi5nZXRGbG9hdDY0KHMsITApLHMrPTgpLDY0JmkmJihsLnNldFRpbWUobC5nZXRUaW1lKCkrMWUzKm4uZ2V0RmxvYXQ2NChzLCEwKSkscys9OCksZVsyXSl7Y2FzZSAwOmJyZWFrO2Nh'@;
put 'c2UgMjpoPXt0OiJuIix2Om99O2JyZWFrO2Nhc2UgMzpoPXt0OiJzIix2OnRbY119O2JyZWFrO2Nhc2UgNTpoPXt0OiJkIix2Omx9O2JyZWFrO2Nhc2UgNjpoPXt0OiJiIix2Om8+MH07YnJlYWs7Y2FzZSA3Omg9e3Q6Im4iLHY6by84NjQwMH07YnJlYWs7Y2FzZSA4Omg9e3Q6ImUiLHY6MH07'@;
put 'YnJlYWs7Y2FzZSA5OmlmKGY+LTEpaD17dDoicyIsdjpyW2ZdfTtlbHNlIGlmKGM+LTEpaD17dDoicyIsdjp0W2NdfTtlbHNle2lmKGlzTmFOKG8pKXRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgY2VsbCB0eXBlICIuY29uY2F0KGUuc2xpY2UoMCw0KSkpO2g9e3Q6Im4iLHY6b319YnJl'@;
put 'YWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIGNlbGwgdHlwZSAiLmNvbmNhdChlLnNsaWNlKDAsNCkpKX1yZXR1cm4gaH0oZSx0LHIsZVswXSk7Y2FzZSA1OnJldHVybiBmdW5jdGlvbiBXbShlLHQscil7dmFyIGgsYT1KdChlKSxuPWEuZ2V0VWludDMyKDgsITApLGk9'@;
put 'MTIscz0tMSxmPS0xLGM9TmFOLG89TmFOLGw9bmV3IERhdGUoMjAwMSwwLDEpO3N3aXRjaCgxJm4mJihjPWZ1bmN0aW9uIExtKGUsdCl7Zm9yKHZhciByPSgxMjcmZVt0KzE1XSk8PDd8ZVt0KzE0XT4+MSxhPTEmZVt0KzE0XSxuPXQrMTM7bj49dDstLW4pYT0yNTYqYStlW25dO3JldHVybigx'@;
put 'MjgmZVt0KzE1XT8tYTphKSpNYXRoLnBvdygxMCxyLTYxNzYpfShlLGkpLGkrPTE2KSwyJm4mJihvPWEuZ2V0RmxvYXQ2NChpLCEwKSxpKz04KSw0Jm4mJihsLnNldFRpbWUobC5nZXRUaW1lKCkrMWUzKmEuZ2V0RmxvYXQ2NChpLCEwKSksaSs9OCksOCZuJiYoZj1hLmdldFVpbnQzMihpLCEw'@;
put 'KSxpKz00KSwxNiZuJiYocz1hLmdldFVpbnQzMihpLCEwKSxpKz00KSxlWzFdKXtjYXNlIDA6YnJlYWs7Y2FzZSAyOmNhc2UgMTA6aD17dDoibiIsdjpjfTticmVhaztjYXNlIDM6aD17dDoicyIsdjp0W2ZdfTticmVhaztjYXNlIDU6aD17dDoiZCIsdjpsfTticmVhaztjYXNlIDY6aD17dDoi'@;
put 'YiIsdjpvPjB9O2JyZWFrO2Nhc2UgNzpoPXt0OiJuIix2Om8vODY0MDB9O2JyZWFrO2Nhc2UgODpoPXt0OiJlIix2OjB9O2JyZWFrO2Nhc2UgOTppZighKHM+LTEpKXRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgY2VsbCB0eXBlICIuY29uY2F0KGVbMV0sIiA6ICIpLmNvbmNhdCgzMSZu'@;
put 'LCIgOiAiKS5jb25jYXQoZS5zbGljZSgwLDQpKSk7aD17dDoicyIsdjpyW3NdfTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgY2VsbCB0eXBlICIuY29uY2F0KGVbMV0sIiA6ICIpLmNvbmNhdCgzMSZuLCIgOiAiKS5jb25jYXQoZS5zbGljZSgwLDQpKSl9cmV0'@;
put 'dXJuIGh9KGUsdCxyKTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgcGF5bG9hZCB2ZXJzaW9uICIuY29uY2F0KGVbMF0pKX19ZnVuY3Rpb24gRXIoZSl7cmV0dXJuIEthKFJlKGUpWzFdWzBdLmRhdGEpfWZ1bmN0aW9uIGhjKGUsdCl7dmFyIHI9UmUodC5kYXRhKSxhPVll'@;
put 'KHJbMV1bMF0uZGF0YSksaT1bXTtyZXR1cm4oclszXXx8W10pLmZvckVhY2goZnVuY3Rpb24ocyl7dmFyIGY9UmUocy5kYXRhKSxjPVllKGZbMV1bMF0uZGF0YSk+Pj4wO3N3aXRjaChhKXtjYXNlIDE6aVtjXT1IbihmWzNdWzBdLmRhdGEpO2JyZWFrO2Nhc2UgODp2YXIgbD1SZShlW0VyKGZb'@;
put 'OV1bMF0uZGF0YSldWzBdLmRhdGEpLGg9ZVtFcihsWzFdWzBdLmRhdGEpXVswXSx4PVllKGgubWV0YVsxXVswXS5kYXRhKTtpZigyMDAxIT14KXRocm93IG5ldyBFcnJvcigiMjAwMCB1bmV4cGVjdGVkIHJlZmVyZW5jZSB0byAiLmNvbmNhdCh4KSk7dmFyIGQ9UmUoaC5kYXRhKTtpW2NdPWRb'@;
put 'M10ubWFwKGZ1bmN0aW9uKHYpe3JldHVybiBIbih2LmRhdGEpfSkuam9pbigiIil9fSksaX1mdW5jdGlvbiB6bShlLHQpe3ZhciBhPXsiIXJlZiI6IkExIn0sbj1lW0VyKFJlKHQuZGF0YSlbMl1bMF0uZGF0YSldLGk9WWUoblswXS5tZXRhWzFdWzBdLmRhdGEpO2lmKDYwMDEhPWkpdGhyb3cg'@;
put 'bmV3IEVycm9yKCI2MDAwIHVuZXhwZWN0ZWQgcmVmZXJlbmNlIHRvICIuY29uY2F0KGkpKTtyZXR1cm4gZnVuY3Rpb24gR20oZSx0LHIpe3ZhciBhLG49UmUodC5kYXRhKSxpPXtzOntyOjAsYzowfSxlOntyOjAsYzowfX07aWYoaS5lLnI9KFllKG5bNl1bMF0uZGF0YSk+Pj4wKS0xLGkuZS5y'@;
put 'PDApdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHJvdyB2YXJpbnQgIi5jb25jYXQobls2XVswXS5kYXRhKSk7aWYoaS5lLmM9KFllKG5bN11bMF0uZGF0YSk+Pj4wKS0xLGkuZS5jPDApdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGNvbCB2YXJpbnQgIi5jb25jYXQobls3XVswXS5kYXRhKSk7'@;
put 'clsiIXJlZiJdPXdlKGkpO3ZhciBzPVJlKG5bNF1bMF0uZGF0YSksZj1oYyhlLGVbRXIoc1s0XVswXS5kYXRhKV1bMF0pLGM9bnVsbCE9KGE9c1sxN10pJiZhWzBdP2hjKGUsZVtFcihzWzE3XVswXS5kYXRhKV1bMF0pOltdLG89UmUoc1szXVswXS5kYXRhKSxsPTA7b1sxXS5mb3JFYWNoKGZ1'@;
put 'bmN0aW9uKGgpe3ZhciB4PVJlKGguZGF0YSksZD1lW0VyKHhbMl1bMF0uZGF0YSldWzBdLHY9WWUoZC5tZXRhWzFdWzBdLmRhdGEpO2lmKDYwMDIhPXYpdGhyb3cgbmV3IEVycm9yKCI2MDAxIHVuZXhwZWN0ZWQgcmVmZXJlbmNlIHRvICIuY29uY2F0KHYpKTt2YXIgdT1mdW5jdGlvbiBYbShl'@;
put 'LHQpe3ZhciByLGE9UmUodC5kYXRhKSxuPW51bGwhPShyPWE/Lls3XSkmJnJbMF0/WWUoYVs3XVswXS5kYXRhKT4+PjA+MD8xOjA6LTEsaT1WbihhWzVdLGZ1bmN0aW9uKHMpe3JldHVybiBmdW5jdGlvbiBWbShlLHQpe3ZhciByLGEsbixpLHMsZixjLG8sbCxoLHgsZCx2LHUsTixNLHA9UmUo'@;
put 'ZSksaz1ZZShwWzFdWzBdLmRhdGEpPj4+MCxUPVllKHBbMl1bMF0uZGF0YSk+Pj4wLGc9KG51bGw9PShhPW51bGw9PShyPXBbOF0pP3ZvaWQgMDpyWzBdKT92b2lkIDA6YS5kYXRhKSYmWWUocFs4XVswXS5kYXRhKT4wfHwhMTtpZihudWxsIT0oaT1udWxsPT0obj1wWzddKT92b2lkIDA6blsw'@;
put 'XSkmJmkuZGF0YSYmMCE9dClOPW51bGw9PShmPW51bGw9PShzPXBbN10pP3ZvaWQgMDpzWzBdKT92b2lkIDA6Zi5kYXRhLE09bnVsbD09KG89bnVsbD09KGM9cFs2XSk/dm9pZCAwOmNbMF0pP3ZvaWQgMDpvLmRhdGE7ZWxzZXtpZihudWxsPT0oaD1udWxsPT0obD1wWzRdKT92b2lkIDA6bFsw'@;
put 'XSl8fCFoLmRhdGF8fDE9PXQpdGhyb3ciTlVNQkVSUyBUaWxlIG1pc3NpbmcgIi5jb25jYXQodCwiIGNlbGwgc3RvcmFnZSIpO049bnVsbD09KGQ9bnVsbD09KHg9cFs0XSk/dm9pZCAwOnhbMF0pP3ZvaWQgMDpkLmRhdGEsTT1udWxsPT0odT1udWxsPT0odj1wWzNdKT92b2lkIDA6dlswXSk/'@;
put 'dm9pZCAwOnUuZGF0YX1mb3IodmFyIEk9Zz80OjEseT1KdChOKSxQPVtdLFI9MDtSPE4ubGVuZ3RoLzI7KytSKXt2YXIgVj15LmdldFVpbnQxNigyKlIsITApO1Y8NjU1MzUmJlAucHVzaChbUixWXSl9aWYoUC5sZW5ndGghPVQpdGhyb3ciRXhwZWN0ZWQgIi5jb25jYXQoVCwiIGNlbGxzLCBm'@;
put 'b3VuZCAiKS5jb25jYXQoUC5sZW5ndGgpO3ZhciBYPVtdO2ZvcihSPTA7UjxQLmxlbmd0aC0xOysrUilYW1BbUl1bMF1dPU0uc3ViYXJyYXkoUFtSXVsxXSpJLFBbUisxXVsxXSpJKTtyZXR1cm4gUC5sZW5ndGg+PTEmJihYW1BbUC5sZW5ndGgtMV1bMF1dPU0uc3ViYXJyYXkoUFtQLmxlbmd0'@;
put 'aC0xXVsxXSpJKSkse1I6ayxjZWxsczpYfX0ocyxuKX0pO3JldHVybntucm93czpZZShhWzRdWzBdLmRhdGEpPj4+MCxkYXRhOmkucmVkdWNlKGZ1bmN0aW9uKHMsZil7cmV0dXJuIHNbZi5SXXx8KHNbZi5SXT1bXSksZi5jZWxscy5mb3JFYWNoKGZ1bmN0aW9uKGMsbyl7aWYoc1tmLlJdW29d'@;
put 'KXRocm93IG5ldyBFcnJvcigiRHVwbGljYXRlIGNlbGwgcj0iLmNvbmNhdChmLlIsIiBjPSIpLmNvbmNhdChvKSk7c1tmLlJdW29dPWN9KSxzfSxbXSl9fSgwLGQpO3UuZGF0YS5mb3JFYWNoKGZ1bmN0aW9uKHAsayl7cC5mb3JFYWNoKGZ1bmN0aW9uKFQsZyl7dmFyIE49Z2Uoe3I6bCtrLGM6'@;
put 'Z30pLE09SG0oVCxmLGMpO00mJihyW05dPU0pfSl9KSxsKz11Lm5yb3dzfSl9KGUsblswXSxhKSxhfWZ1bmN0aW9uIHpuKGUpe3ZhciB0LHIsYSxuLGk9e30scz1bXTtpZihlLkZ1bGxQYXRocy5mb3JFYWNoKGZ1bmN0aW9uKGMpe2lmKGMubWF0Y2goL1wuaXdwdjIvKSl0aHJvdyBuZXcgRXJy'@;
put 'b3IoIlVuc3VwcG9ydGVkIHBhc3N3b3JkIHByb3RlY3Rpb24iKX0pLGUuRmlsZUluZGV4LmZvckVhY2goZnVuY3Rpb24oYyl7aWYoYy5uYW1lLm1hdGNoKC9cLml3YSQvKSl7dmFyIG8sbDt0cnl7bz1mdW5jdGlvbiB6cihlKXtmb3IodmFyIHQ9W10scj0wO3I8ZS5sZW5ndGg7KXt2YXIgYT1l'@;
put 'W3IrK10sbj1lW3JdfGVbcisxXTw8OHxlW3IrMl08PDE2O3QucHVzaChNbShhLGUuc2xpY2Uocis9MyxyK24pKSkscis9bn1pZihyIT09ZS5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJkYXRhIGlzIG5vdCBhIHZhbGlkIGZyYW1lZCBzdHJlYW0hIik7cmV0dXJuIER0KHQpfShjLmNvbnRlbnQp'@;
put 'fWNhdGNoKGgpe3JldHVybiBjb25zb2xlLmxvZygiPz8gIitjLmNvbnRlbnQubGVuZ3RoKyIgIisoaC5tZXNzYWdlfHxoKSl9dHJ5e2w9ZnVuY3Rpb24gR3IoZSl7Zm9yKHZhciB0LHI9W10sYT1bMF07YVswXTxlLmxlbmd0aDspe3ZhciBuPUthKGUsYSksaT1SZShlLnNsaWNlKGFbMF0sYVsw'@;
put 'XStuKSk7YVswXSs9bjt2YXIgcz17aWQ6WWUoaVsxXVswXS5kYXRhKSxtZXNzYWdlczpbXX07aVsyXS5mb3JFYWNoKGZ1bmN0aW9uKGYpe3ZhciBjPVJlKGYuZGF0YSksbz1ZZShjWzNdWzBdLmRhdGEpO3MubWVzc2FnZXMucHVzaCh7bWV0YTpjLGRhdGE6ZS5zbGljZShhWzBdLGFbMF0rbyl9'@;
put 'KSxhWzBdKz1vfSksbnVsbCE9KHQ9aVszXSkmJnRbMF0mJihzLm1lcmdlPVllKGlbM11bMF0uZGF0YSk+Pj4wPjApLHIucHVzaChzKX1yZXR1cm4gcn0obyl9Y2F0Y2goaCl7cmV0dXJuIGNvbnNvbGUubG9nKCIjIyAiKyhoLm1lc3NhZ2V8fGgpKX1sLmZvckVhY2goZnVuY3Rpb24oaCl7aVto'@;
put 'LmlkXT1oLm1lc3NhZ2VzLHMucHVzaChoLmlkKX0pfX0pLCFzLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIkZpbGUgaGFzIG5vIG1lc3NhZ2VzIik7dmFyIGY9KG51bGw9PShuPW51bGw9PShhPW51bGw9PShyPW51bGw9PSh0PWk/LlsxXSk/dm9pZCAwOnRbMF0pP3ZvaWQgMDpyLm1ldGEpP3Zv'@;
put 'aWQgMDphWzFdKT92b2lkIDA6blswXS5kYXRhKSYmMT09WWUoaVsxXVswXS5tZXRhWzFdWzBdLmRhdGEpJiZpWzFdWzBdO2lmKGZ8fHMuZm9yRWFjaChmdW5jdGlvbihjKXtpW2NdLmZvckVhY2goZnVuY3Rpb24obyl7aWYoMT09WWUoby5tZXRhWzFdWzBdLmRhdGEpPj4+MCl7aWYoZil0aHJv'@;
put 'dyBuZXcgRXJyb3IoIkRvY3VtZW50IGhhcyBtdWx0aXBsZSByb290cyIpO2Y9b319KX0pLCFmKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IGZpbmQgRG9jdW1lbnQgcm9vdCIpO3JldHVybiBmdW5jdGlvbiBqbShlLHQpe3ZhciByPXtTaGVldE5hbWVzOltdLFNoZWV0czp7fX07aWYoVm4oUmUo'@;
put 'dC5kYXRhKVsxXSxFcikuZm9yRWFjaChmdW5jdGlvbihpKXtlW2ldLmZvckVhY2goZnVuY3Rpb24ocyl7aWYoMj09WWUocy5tZXRhWzFdWzBdLmRhdGEpKXt2YXIgYz1mdW5jdGlvbiAkbShlLHQpe3ZhciByLGE9UmUodC5kYXRhKSxuPXtuYW1lOm51bGwhPShyPWFbMV0pJiZyWzBdP0huKGFb'@;
put 'MV1bMF0uZGF0YSk6IiIsc2hlZXRzOltdfTtyZXR1cm4gVm4oYVsyXSxFcikuZm9yRWFjaChmdW5jdGlvbihzKXtlW3NdLmZvckVhY2goZnVuY3Rpb24oZil7NmUzPT1ZZShmLm1ldGFbMV1bMF0uZGF0YSkmJm4uc2hlZXRzLnB1c2goem0oZSxmKSl9KX0pLG59KGUscyk7Yy5zaGVldHMuZm9y'@;
put 'RWFjaChmdW5jdGlvbihvLGwpe2VpKHIsbywwPT1sP2MubmFtZTpjLm5hbWUrIl8iK2wsITApfSl9fSl9KSwwPT1yLlNoZWV0TmFtZXMubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiRW1wdHkgTlVNQkVSUyBmaWxlIik7cmV0dXJuIHJ9KGksZil9ZnVuY3Rpb24gJG4oZSl7IWZ1bmN0aW9uIHhj'@;
put 'KGUpe3JldHVybiBmdW5jdGlvbihyKXtmb3IodmFyIGE9MDthIT1lLmxlbmd0aDsrK2Epe3ZhciBuPWVbYV07dm9pZCAwPT09cltuWzBdXSYmKHJbblswXV09blsxXSksIm4iPT09blsyXSYmKHJbblswXV09TnVtYmVyKHJbblswXV0pKX19fShbWyJjZWxsTkYiLCExXSxbImNlbGxIVE1MIiwh'@;
put 'MF0sWyJjZWxsRm9ybXVsYSIsITBdLFsiY2VsbFN0eWxlcyIsITFdLFsiY2VsbFRleHQiLCEwXSxbImNlbGxEYXRlcyIsITFdLFsic2hlZXRTdHVicyIsITFdLFsic2hlZXRSb3dzIiwwLCJuIl0sWyJib29rRGVwcyIsITFdLFsiYm9va1NoZWV0cyIsITFdLFsiYm9va1Byb3BzIiwhMV0sWyJi'@;
put 'b29rRmlsZXMiLCExXSxbImJvb2tWQkEiLCExXSxbInBhc3N3b3JkIiwiIl0sWyJXVEYiLCExXV0pKGUpfWZ1bmN0aW9uIEptKGUpe3JldHVybiBrZS5XUy5pbmRleE9mKGUpPi0xPyJzaGVldCI6a2UuQ1MmJmU9PWtlLkNTPyJjaGFydCI6a2UuRFMmJmU9PWtlLkRTPyJkaWFsb2ciOmtlLk1T'@;
put 'JiZlPT1rZS5NUz8ibWFjcm8iOmUmJmUubGVuZ3RoP2U6InNoZWV0In1mdW5jdGlvbiBabShlLHQscixhLG4saSxzLGYsYyxvLGwsaCl7dHJ5e2lbYV09SWEoTnIoZSxyLCEwKSx0KTt2YXIgZCx4PVFlKGUsdCk7c3dpdGNoKGYpe2Nhc2Uic2hlZXQiOmQ9U3AoeCx0LG4sYyxpW2FdLG8sbCxo'@;
put 'KTticmVhaztjYXNlImNoYXJ0IjppZighKGQ9ZnVuY3Rpb24gRnAoZSx0LHIsYSxuLGkscyxmKXtyZXR1cm4iLmJpbiI9PT10LnNsaWNlKC00KT9mdW5jdGlvbiBycChlLHQscixhLG4pe2lmKCFlKXJldHVybiBlO2F8fChhPXsiIWlkIjp7fX0pO3ZhciBpPXsiIXR5cGUiOiJjaGFydCIsIiFk'@;
put 'cmF3ZWwiOm51bGwsIiFyZWwiOiIifSxzPVtdLGY9ITE7cmV0dXJuIGh0KGUsZnVuY3Rpb24obyxsLGgpe3N3aXRjaChoKXtjYXNlIDU1MDppWyIhcmVsIl09bzticmVhaztjYXNlIDY1MTpuLlNoZWV0c1tyXXx8KG4uU2hlZXRzW3JdPXt9KSxvLm5hbWUmJihuLlNoZWV0c1tyXS5Db2RlTmFt'@;
put 'ZT1vLm5hbWUpO2JyZWFrO2Nhc2UgNTYyOmNhc2UgNjUyOmNhc2UgNjY5OmNhc2UgNjc5OmNhc2UgNTUxOmNhc2UgNTUyOmNhc2UgNDc2OmNhc2UgMzA3MjpicmVhaztjYXNlIDM1OmY9ITA7YnJlYWs7Y2FzZSAzNjpmPSExO2JyZWFrO2Nhc2UgMzc6cy5wdXNoKGgpO2JyZWFrO2Nhc2UgMzg6'@;
put 'cy5wb3AoKTticmVhaztkZWZhdWx0OmlmKGwuVD4wKXMucHVzaChoKTtlbHNlIGlmKGwuVDwwKXMucG9wKCk7ZWxzZSBpZighZnx8dC5XVEYpdGhyb3cgbmV3IEVycm9yKCJVbmV4cGVjdGVkIHJlY29yZCAweCIraC50b1N0cmluZygxNikpfX0sdCksYVsiIWlkIl1baVsiIXJlbCJdXSYmKGlb'@;
put 'IiFkcmF3ZWwiXT1hWyIhaWQiXVtpWyIhcmVsIl1dKSxpfShlLGEscixuLGkpOmZ1bmN0aW9uIFoyKGUsdCxyLGEsbil7aWYoIWUpcmV0dXJuIGU7YXx8KGE9eyIhaWQiOnt9fSk7dmFyIHMsaT17IiF0eXBlIjoiY2hhcnQiLCIhZHJhd2VsIjpudWxsLCIhcmVsIjoiIn0sZj1lLm1hdGNoKFBm'@;
put 'KTtyZXR1cm4gZiYmTG4oZlswXSwwLG4sciksKHM9ZS5tYXRjaCgvZHJhd2luZyByOmlkPSIoLio/KSIvKSkmJihpWyIhcmVsIl09c1sxXSksYVsiIWlkIl1baVsiIXJlbCJdXSYmKGlbIiFkcmF3ZWwiXT1hWyIhaWQiXVtpWyIhcmVsIl1dKSxpfShlLDAscixuLGkpfSh4LHQsbixjLGlbYV0s'@;
put 'bykpfHwhZFsiIWRyYXdlbCJdKWJyZWFrO3ZhciB2PVNhKGRbIiFkcmF3ZWwiXS5UYXJnZXQsdCksdT1PYSh2KSxwPWZ1bmN0aW9uIGh4KGUsdCl7aWYoIWUpcmV0dXJuIj8/Ijt2YXIgcj0oZS5tYXRjaCgvPGM6Y2hhcnQgW14+XSpyOmlkPSIoW14iXSopIi8pfHxbIiIsIiJdKVsxXTtyZXR1'@;
put 'cm4gdFsiIWlkIl1bcl0uVGFyZ2V0fShOcihlLHYsITApLElhKE5yKGUsdSwhMCksdikpLGs9U2EocCx2KSxUPU9hKGspO2Q9ZnVuY3Rpb24gcTIoZSx0LHIsYSxuLGkpe3ZhciBzPWl8fHsiIXR5cGUiOiJjaGFydCJ9O2lmKCFlKXJldHVybiBpO3ZhciBmPTAsYz0wLG89IkEiLGw9e3M6e3I6'@;
put 'MmU2LGM6MmU2fSxlOntyOjAsYzowfX07cmV0dXJuKGUubWF0Y2goLzxjOm51bUNhY2hlPltcc1xTXSo/PFwvYzpudW1DYWNoZT4vZ20pfHxbXSkuZm9yRWFjaChmdW5jdGlvbihoKXt2YXIgeD1mdW5jdGlvbiBKMihlKXt2YXIgYSx0PVtdLHI9ZS5tYXRjaCgvXjxjOm51bUNhY2hlPi8pOyhl'@;
put 'Lm1hdGNoKC88YzpwdCBpZHg9IihcZCopIj4oLio/KTxcL2M6cHQ+L2dtKXx8W10pLmZvckVhY2goZnVuY3Rpb24oaSl7dmFyIHM9aS5tYXRjaCgvPGM6cHQgaWR4PSIoXGQqPykiPjxjOnY+KC4qKTxcL2M6dj48XC9jOnB0Pi8pO3MmJih0WytzWzFdXT1yPytzWzJdOnNbMl0pfSk7dmFyIG49'@;
put 'SWUoKGUubWF0Y2goLzxjOmZvcm1hdENvZGU+KFtcc1xTXSo/KTxcL2M6Zm9ybWF0Q29kZT4vKXx8WyIiLCJHZW5lcmFsIl0pWzFdKTtyZXR1cm4oZS5tYXRjaCgvPGM6Zj4oLio/KTxcL2M6Zj4vZ20pfHxbXSkuZm9yRWFjaChmdW5jdGlvbihpKXthPWkucmVwbGFjZSgvPC4qPz4vZywiIil9'@;
put 'KSxbdCxuLGFdfShoKTtsLnMucj1sLnMuYz0wLGwuZS5jPWYsbz1IZShmKSx4WzBdLmZvckVhY2goZnVuY3Rpb24oZCx2KXtzW28rS2UodildPXt0OiJuIix2OmQsejp4WzFdfSxjPXZ9KSxsLmUucjxjJiYobC5lLnI9YyksKytmfSksZj4wJiYoc1siIXJlZiJdPXdlKGwpKSxzfShOcihlLGss'@;
put 'ITApLDAsMCxJYShOcihlLFQsITApLGspLDAsZCk7YnJlYWs7Y2FzZSJtYWNybyI6ZD1mdW5jdGlvbiB5cChlLHQscixhLG4saSxzLGYpe3JldHVybiB0LnNsaWNlKC00KSx7IiF0eXBlIjoibWFjcm8ifX0oMCx0KTticmVhaztjYXNlImRpYWxvZyI6ZD1mdW5jdGlvbiBBcChlLHQscixhLG4s'@;
put 'aSxzLGYpe3JldHVybiB0LnNsaWNlKC00KSx7IiF0eXBlIjoiZGlhbG9nIn19KDAsdCk7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlVucmVjb2duaXplZCBzaGVldCB0eXBlICIrZil9c1thXT1kO3ZhciBnPVtdO2kmJmlbYV0mJiRlKGlbYV0pLmZvckVhY2goZnVuY3Rpb24oTil7'@;
put 'dmFyIE09IiI7aWYoaVthXVtOXS5UeXBlPT1rZS5DTU5UKXtNPVNhKGlbYV1bTl0uVGFyZ2V0LHQpO3ZhciBJPWZ1bmN0aW9uIElwKGUsdCxyKXtyZXR1cm4iLmJpbiI9PT10LnNsaWNlKC00KT9mdW5jdGlvbiBFeChlLHQpe3ZhciByPVtdLGE9W10sbj17fSxpPSExO3JldHVybiBodChlLGZ1'@;
put 'bmN0aW9uKGYsYyxvKXtzd2l0Y2gobyl7Y2FzZSA2MzI6YS5wdXNoKGYpO2JyZWFrO2Nhc2UgNjM1Om49ZjticmVhaztjYXNlIDYzNzpuLnQ9Zi50LG4uaD1mLmgsbi5yPWYucjticmVhaztjYXNlIDYzNjppZihuLmF1dGhvcj1hW24uaWF1dGhvcl0sZGVsZXRlIG4uaWF1dGhvcix0LnNoZWV0'@;
put 'Um93cyYmbi5yZngmJnQuc2hlZXRSb3dzPD1uLnJmeC5yKWJyZWFrO24udHx8KG4udD0iIiksZGVsZXRlIG4ucmZ4LHIucHVzaChuKTticmVhaztjYXNlIDMwNzI6Y2FzZSAzNzpjYXNlIDM4OmJyZWFrO2Nhc2UgMzU6aT0hMDticmVhaztjYXNlIDM2Omk9ITE7YnJlYWs7ZGVmYXVsdDppZigh'@;
put 'Yy5UJiYoIWl8fHQuV1RGKSl0aHJvdyBuZXcgRXJyb3IoIlVuZXhwZWN0ZWQgcmVjb3JkIDB4IitvLnRvU3RyaW5nKDE2KSl9fSkscn0oZSxyKTpmdW5jdGlvbiB4eChlLHQpe2lmKGUubWF0Y2goLzwoPzpcdys6KT9jb21tZW50cyAqXC8+LykpcmV0dXJuW107dmFyIHI9W10sYT1bXSxuPWUu'@;
put 'bWF0Y2goLzwoPzpcdys6KT9hdXRob3JzPihbXHNcU10qKTxcLyg/Olx3KzopP2F1dGhvcnM+Lyk7biYmblsxXSYmblsxXS5zcGxpdCgvPFwvXHcqOj9hdXRob3I+LykuZm9yRWFjaChmdW5jdGlvbihzKXtpZigiIiE9PXMmJiIiIT09cy50cmltKCkpe3ZhciBmPXMubWF0Y2goLzwoPzpcdys6'@;
put 'KT9hdXRob3JbXj5dKj4oLiopLyk7ZiYmci5wdXNoKGZbMV0pfX0pO3ZhciBpPWUubWF0Y2goLzwoPzpcdys6KT9jb21tZW50TGlzdD4oW1xzXFNdKik8XC8oPzpcdys6KT9jb21tZW50TGlzdD4vKTtyZXR1cm4gaSYmaVsxXSYmaVsxXS5zcGxpdCgvPFwvXHcqOj9jb21tZW50Pi8pLmZvckVh'@;
put 'Y2goZnVuY3Rpb24ocyl7aWYoIiIhPT1zJiYiIiE9PXMudHJpbSgpKXt2YXIgZj1zLm1hdGNoKC88KD86XHcrOik/Y29tbWVudFtePl0qPi8pO2lmKGYpe3ZhciBjPW1lKGZbMF0pLG89e2F1dGhvcjpjLmF1dGhvcklkJiZyW2MuYXV0aG9ySWRdfHwic2hlZXRqc2dob3N0IixyZWY6Yy5yZWYs'@;
put 'Z3VpZDpjLmd1aWR9LGw9R2UoYy5yZWYpO2lmKCEodC5zaGVldFJvd3MmJnQuc2hlZXRSb3dzPD1sLnIpKXt2YXIgaD1zLm1hdGNoKC88KD86XHcrOik/dGV4dD4oW1xzXFNdKik8XC8oPzpcdys6KT90ZXh0Pi8pLHg9ISFoJiYhIWhbMV0mJlNuKGhbMV0pfHx7cjoiIix0OiIiLGg6IiJ9O28u'@;
put 'cj14LnIsIjx0PjwvdD4iPT14LnImJih4LnQ9eC5oPSIiKSxvLnQ9KHgudHx8IiIpLnJlcGxhY2UoL1xyXG4vZywiXG4iKS5yZXBsYWNlKC9cci9nLCJcbiIpLHQuY2VsbEhUTUwmJihvLmg9eC5oKSxhLnB1c2gobyl9fX19KSxhfShlLHIpfShRZShlLE0sITApLE0sYyk7aWYoIUl8fCFJLmxl'@;
put 'bmd0aClyZXR1cm47Z2YoZCxJLCExKX1pW2FdW05dLlR5cGU9PWtlLlRDTU5UJiYoTT1TYShpW2FdW05dLlRhcmdldCx0KSxnPWcuY29uY2F0KGZ1bmN0aW9uIGR4KGUsdCl7dmFyIHI9W10sYT0hMSxuPXt9LGk9MDtyZXR1cm4gZS5yZXBsYWNlKHZyLGZ1bmN0aW9uKGYsYyl7dmFyIG89bWUo'@;
put 'Zik7c3dpdGNoKHJ0KG9bMF0pKXtjYXNlIjw/eG1sIjpjYXNlIjxUaHJlYWRlZENvbW1lbnRzIjpjYXNlIjwvVGhyZWFkZWRDb21tZW50cz4iOmNhc2UiPGV4dExzdCI6Y2FzZSI8ZXh0THN0PiI6Y2FzZSI8L2V4dExzdD4iOmNhc2UiPGV4dExzdC8+IjpicmVhaztjYXNlIjx0aHJlYWRlZENv'@;
put 'bW1lbnQiOm49e2F1dGhvcjpvLnBlcnNvbklkLGd1aWQ6by5pZCxyZWY6by5yZWYsVDoxfTticmVhaztjYXNlIjwvdGhyZWFkZWRDb21tZW50PiI6bnVsbCE9bi50JiZyLnB1c2gobik7YnJlYWs7Y2FzZSI8dGV4dD4iOmNhc2UiPHRleHQiOmk9YytmLmxlbmd0aDticmVhaztjYXNlIjwvdGV4'@;
put 'dD4iOm4udD1lLnNsaWNlKGksYykucmVwbGFjZSgvXHJcbi9nLCJcbiIpLnJlcGxhY2UoL1xyL2csIlxuIik7YnJlYWs7Y2FzZSI8bWVudGlvbnMiOmNhc2UiPG1lbnRpb25zPiI6Y2FzZSI8ZXh0IjphPSEwO2JyZWFrO2Nhc2UiPC9tZW50aW9ucz4iOmNhc2UiPC9leHQ+IjphPSExO2JyZWFr'@;
put 'O2RlZmF1bHQ6aWYoIWEmJnQuV1RGKXRocm93IG5ldyBFcnJvcigidW5yZWNvZ25pemVkICIrb1swXSsiIGluIHRocmVhZGVkIGNvbW1lbnRzIil9cmV0dXJuIGZ9KSxyfShRZShlLE0sITApLGMpKSl9KSxnJiZnLmxlbmd0aCYmZ2YoZCxnLCEwLGMucGVvcGxlfHxbXSl9Y2F0Y2goTil7aWYo'@;
put 'Yy5XVEYpdGhyb3cgTn19ZnVuY3Rpb24gJHIoZSl7cmV0dXJuIi8iPT1lLmNoYXJBdCgwKT9lLnNsaWNlKDEpOmV9ZnVuY3Rpb24gUW0oZSx0KXtpZih0YSgpLCRuKHQ9dHx8e30pLFdyKGUsIk1FVEEtSU5GL21hbmlmZXN0LnhtbCIpfHxXcihlLCJvYmplY3RkYXRhLnhtbCIpKXJldHVybiBm'@;
put 'dW5jdGlvbiBmYyhlLHQpe3Q9dHx8e30sV3IoZSwiTUVUQS1JTkYvbWFuaWZlc3QueG1sIikmJmZ1bmN0aW9uIG9sKGUsdCl7Zm9yKHZhciBhLG4scj1ZMChlKTthPXlhLmV4ZWMocik7KXN3aXRjaChhWzNdKXtjYXNlIm1hbmlmZXN0IjpicmVhaztjYXNlImZpbGUtZW50cnkiOmlmKCIvIj09'@;
put 'KG49bWUoYVswXSwhMSkpLnBhdGgmJm4udHlwZSE9PWNsKXRocm93IG5ldyBFcnJvcigiVGhpcyBPcGVuRG9jdW1lbnQgaXMgbm90IGEgc3ByZWFkc2hlZXQiKTticmVhaztjYXNlImVuY3J5cHRpb24tZGF0YSI6Y2FzZSJhbGdvcml0aG0iOmNhc2Uic3RhcnQta2V5LWdlbmVyYXRpb24iOmNh'@;
put 'c2Uia2V5LWRlcml2YXRpb24iOnRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgT0RTIEVuY3J5cHRpb24iKTtkZWZhdWx0OmlmKHQmJnQuV1RGKXRocm93IGF9fShRZShlLCJNRVRBLUlORi9tYW5pZmVzdC54bWwiKSx0KTt2YXIgcj1OcihlLCJjb250ZW50LnhtbCIpO2lmKCFyKXRocm93'@;
put 'IG5ldyBFcnJvcigiTWlzc2luZyBjb250ZW50LnhtbCBpbiBPRFMgLyBVT0YgZmlsZSIpO3ZhciBhPXNjKEJlKHIpLHQpO3JldHVybiBXcihlLCJtZXRhLnhtbCIpJiYoYS5Qcm9wcz1tcyhRZShlLCJtZXRhLnhtbCIpKSksYX0oZSx0KTtpZihXcihlLCJJbmRleC9Eb2N1bWVudC5pd2EiKSl7'@;
put 'aWYodHlwZW9mIFVpbnQ4QXJyYXk+InUiKXRocm93IG5ldyBFcnJvcigiTlVNQkVSUyBmaWxlIHBhcnNpbmcgcmVxdWlyZXMgVWludDhBcnJheSBzdXBwb3J0Iik7aWYoZS5GaWxlSW5kZXgpcmV0dXJuIHpuKGUpO3ZhciByPXZlLnV0aWxzLmNmYl9uZXcoKTtyZXR1cm4gSWkoZSkuZm9yRWFj'@;
put 'aChmdW5jdGlvbihsZSl7IWZ1bmN0aW9uIFRlKGUsdCxyKXtpZihlLkZ1bGxQYXRocyl7dmFyIGE7aWYoInN0cmluZyI9PXR5cGVvZiByKXJldHVybiBhPVNlP290KHIpOmZ1bmN0aW9uIE5jKGUpe2Zvcih2YXIgdD1bXSxyPTAsYT1lLmxlbmd0aCsyNTAsbj1fdChlLmxlbmd0aCsyNTUpLGk9'@;
put 'MDtpPGUubGVuZ3RoOysraSl7dmFyIHM9ZS5jaGFyQ29kZUF0KGkpO2lmKHM8MTI4KW5bcisrXT1zO2Vsc2UgaWYoczwyMDQ4KW5bcisrXT0xOTJ8cz4+NiYzMSxuW3IrK109MTI4fDYzJnM7ZWxzZSBpZihzPj01NTI5NiYmczw1NzM0NCl7cz02NCsoMTAyMyZzKTt2YXIgZj0xMDIzJmUuY2hh'@;
put 'ckNvZGVBdCgrK2kpO25bcisrXT0yNDB8cz4+OCY3LG5bcisrXT0xMjh8cz4+MiY2MyxuW3IrK109MTI4fGY+PjYmMTV8KDMmcyk8PDQsbltyKytdPTEyOHw2MyZmfWVsc2UgbltyKytdPTIyNHxzPj4xMiYxNSxuW3IrK109MTI4fHM+PjYmNjMsbltyKytdPTEyOHw2MyZzO3I+YSYmKHQucHVz'@;
put 'aChuLnNsaWNlKDAscikpLHI9MCxuPV90KDY1NTM1KSxhPTY1NTMwKX1yZXR1cm4gdC5wdXNoKG4uc2xpY2UoMCxyKSksZnIodCl9KHIpLHZlLnV0aWxzLmNmYl9hZGQoZSx0LGEpO3ZlLnV0aWxzLmNmYl9hZGQoZSx0LHIpfWVsc2UgZS5maWxlKHQscil9KHIsbGUsT2koZSxsZSkpfSksem4o'@;
put 'cil9aWYoIVdyKGUsIltDb250ZW50X1R5cGVzXS54bWwiKSl0aHJvdyBXcihlLCJpbmRleC54bWwuZ3oiKT9uZXcgRXJyb3IoIlVuc3VwcG9ydGVkIE5VTUJFUlMgMDggZmlsZSIpOldyKGUsImluZGV4LnhtbCIpP25ldyBFcnJvcigiVW5zdXBwb3J0ZWQgTlVNQkVSUyAwOSBmaWxlIik6bmV3'@;
put 'IEVycm9yKCJVbnN1cHBvcnRlZCBaSVAgZmlsZSIpO3ZhciBzLGYsYT1JaShlKSxuPWZ1bmN0aW9uIGZsKGUpe3ZhciB0PXt3b3JrYm9va3M6W10sc2hlZXRzOltdLGNoYXJ0czpbXSxkaWFsb2dzOltdLG1hY3JvczpbXSxyZWxzOltdLHN0cnM6W10sY29tbWVudHM6W10sdGhyZWFkZWRjb21t'@;
put 'ZW50czpbXSxsaW5rczpbXSxjb3JlcHJvcHM6W10sZXh0cHJvcHM6W10sY3VzdHByb3BzOltdLHRoZW1lczpbXSxzdHlsZXM6W10sY2FsY2NoYWluczpbXSx2YmE6W10sZHJhd2luZ3M6W10sbWV0YWRhdGE6W10scGVvcGxlOltdLFRPRE86W10seG1sbnM6IiJ9O2lmKCFlfHwhZS5tYXRjaCly'@;
put 'ZXR1cm4gdDt2YXIgcj17fTtpZigoZS5tYXRjaCh2cil8fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKGEpe3ZhciBuPW1lKGEpO3N3aXRjaChuWzBdLnJlcGxhY2UoX28sIjwiKSl7Y2FzZSI8P3htbCI6YnJlYWs7Y2FzZSI8VHlwZXMiOnQueG1sbnM9blsieG1sbnMiKyhuWzBdLm1hdGNoKC88KFx3'@;
put 'Kyk6Lyl8fFsiIiwiIl0pWzFdXTticmVhaztjYXNlIjxEZWZhdWx0IjpyW24uRXh0ZW5zaW9uXT1uLkNvbnRlbnRUeXBlO2JyZWFrO2Nhc2UiPE92ZXJyaWRlIjp2b2lkIDAhPT10W3ZuW24uQ29udGVudFR5cGVdXSYmdFt2bltuLkNvbnRlbnRUeXBlXV0ucHVzaChuLlBhcnROYW1lKX19KSx0'@;
put 'LnhtbG5zIT09cnIuQ1QpdGhyb3cgbmV3IEVycm9yKCJVbmtub3duIE5hbWVzcGFjZTogIit0LnhtbG5zKTtyZXR1cm4gdC5jYWxjY2hhaW49dC5jYWxjY2hhaW5zLmxlbmd0aD4wP3QuY2FsY2NoYWluc1swXToiIix0LnNzdD10LnN0cnMubGVuZ3RoPjA/dC5zdHJzWzBdOiIiLHQuc3R5bGU9'@;
put 'dC5zdHlsZXMubGVuZ3RoPjA/dC5zdHlsZXNbMF06IiIsdC5kZWZhdWx0cz1yLGRlbGV0ZSB0LmNhbGNjaGFpbnMsdH0oTnIoZSwiW0NvbnRlbnRfVHlwZXNdLnhtbCIpKSxpPSExO2lmKDA9PT1uLndvcmtib29rcy5sZW5ndGgmJlFlKGUsZj0ieGwvd29ya2Jvb2sueG1sIiwhMCkmJm4ud29y'@;
put 'a2Jvb2tzLnB1c2goZiksMD09PW4ud29ya2Jvb2tzLmxlbmd0aCl7aWYoIVFlKGUsZj0ieGwvd29ya2Jvb2suYmluIiwhMCkpdGhyb3cgbmV3IEVycm9yKCJDb3VsZCBub3QgZmluZCB3b3JrYm9vayIpO24ud29ya2Jvb2tzLnB1c2goZiksaT0hMH0iYmluIj09bi53b3JrYm9va3NbMF0uc2xp'@;
put 'Y2UoLTMpJiYoaT0hMCk7dmFyIGM9e30sbz17fTtpZighdC5ib29rU2hlZXRzJiYhdC5ib29rUHJvcHMpe2lmKFZhPVtdLG4uc3N0KXRyeXtWYT1mdW5jdGlvbiBPcChlLHQscil7cmV0dXJuIi5iaW4iPT09dC5zbGljZSgtNCk/ZnVuY3Rpb24gSWgoZSx0KXt2YXIgcj1bXSxhPSExO3JldHVy'@;
put 'biBodChlLGZ1bmN0aW9uKGkscyxmKXtzd2l0Y2goZil7Y2FzZSAxNTk6ci5Db3VudD1pWzBdLHIuVW5pcXVlPWlbMV07YnJlYWs7Y2FzZSAxOTpyLnB1c2goaSk7YnJlYWs7Y2FzZSAxNjA6cmV0dXJuITA7Y2FzZSAzNTphPSEwO2JyZWFrO2Nhc2UgMzY6YT0hMTticmVhaztkZWZhdWx0Omlm'@;
put 'KCFhfHx0LldURil0aHJvdyBuZXcgRXJyb3IoIlVuZXhwZWN0ZWQgcmVjb3JkIDB4IitmLnRvU3RyaW5nKDE2KSl9fSkscn0oZSxyKTpmdW5jdGlvbiBDaChlLHQpe3ZhciByPVtdLGE9IiI7aWYoIWUpcmV0dXJuIHI7dmFyIG49ZS5tYXRjaChGaCk7aWYobil7YT1uWzJdLnJlcGxhY2UoeWgs'@;
put 'IiIpLnNwbGl0KEFoKTtmb3IodmFyIGk9MDtpIT1hLmxlbmd0aDsrK2kpe3ZhciBzPVNuKGFbaV0udHJpbSgpLHQpO251bGwhPXMmJihyW3IubGVuZ3RoXT1zKX1uPW1lKG5bMV0pLHIuQ291bnQ9bi5jb3VudCxyLlVuaXF1ZT1uLnVuaXF1ZUNvdW50fXJldHVybiByfShlLHIpfShRZShlLCRy'@;
put 'KG4uc3N0KSksbi5zc3QsdCl9Y2F0Y2gobGUpe2lmKHQuV1RGKXRocm93IGxlfXQuY2VsbFN0eWxlcyYmbi50aGVtZXMubGVuZ3RoJiYoYz1mdW5jdGlvbiBEcChlLHQscil7cmV0dXJuIHZmKGUscil9KE5yKGUsbi50aGVtZXNbMF0ucmVwbGFjZSgvXlwvLywiIiksITApfHwiIiwwLHQpKSxu'@;
put 'LnN0eWxlJiYobz1mdW5jdGlvbiBDcChlLHQscixhKXtyZXR1cm4iLmJpbiI9PT10LnNsaWNlKC00KT9mdW5jdGlvbiBTMShlLHQscil7dmFyIGE9e051bWJlckZtdDpbXX07Zm9yKHZhciBuIGluIHBlKWEuTnVtYmVyRm10W25dPXBlW25dO2EuQ2VsbFhmPVtdLGEuRm9udHM9W107dmFyIGk9'@;
put 'W10scz0hMTtyZXR1cm4gaHQoZSxmdW5jdGlvbihjLG8sbCl7c3dpdGNoKGwpe2Nhc2UgNDQ6YS5OdW1iZXJGbXRbY1swXV09Y1sxXSxldChjWzFdLGNbMF0pO2JyZWFrO2Nhc2UgNDM6YS5Gb250cy5wdXNoKGMpLG51bGwhPWMuY29sb3IudGhlbWUmJnQmJnQudGhlbWVFbGVtZW50cyYmdC50'@;
put 'aGVtZUVsZW1lbnRzLmNsclNjaGVtZSYmKGMuY29sb3IucmdiPVQwKHQudGhlbWVFbGVtZW50cy5jbHJTY2hlbWVbYy5jb2xvci50aGVtZV0ucmdiLGMuY29sb3IudGludHx8MCkpO2JyZWFrO2Nhc2UgMTAyNTpjYXNlIDQ1OmNhc2UgNDY6Y2FzZSA0ODpjYXNlIDUwNzpjYXNlIDU3MjpjYXNl'@;
put 'IDQ3NTpjYXNlIDExNzE6Y2FzZSAyMTAyOmNhc2UgMTEzMDpjYXNlIDUxMjpjYXNlIDIwOTU6Y2FzZSAzMDcyOmJyZWFrO2Nhc2UgNDc6NjE3PT1pW2kubGVuZ3RoLTFdJiZhLkNlbGxYZi5wdXNoKGMpO2JyZWFrO2Nhc2UgMzU6cz0hMDticmVhaztjYXNlIDM2OnM9ITE7YnJlYWs7Y2FzZSAz'@;
put 'NzppLnB1c2gobCkscz0hMDticmVhaztjYXNlIDM4OmkucG9wKCkscz0hMTticmVhaztkZWZhdWx0OmlmKG8uVD4wKWkucHVzaChsKTtlbHNlIGlmKG8uVDwwKWkucG9wKCk7ZWxzZSBpZighc3x8ci5XVEYmJjM3IT1pW2kubGVuZ3RoLTFdKXRocm93IG5ldyBFcnJvcigiVW5leHBlY3RlZCBy'@;
put 'ZWNvcmQgMHgiK2wudG9TdHJpbmcoMTYpKX19KSxhfShlLHIsYSk6aDEoZSxyLGEpfShRZShlLCRyKG4uc3R5bGUpKSxuLnN0eWxlLGMsdCkpfW4ubGlua3MubWFwKGZ1bmN0aW9uKGxlKXt0cnl7cmV0dXJuIElhKE5yKGUsT2EoJHIobGUpKSksbGUpLGZ1bmN0aW9uIE5wKGUsdCxyLGEpe3Jl'@;
put 'dHVybiIuYmluIj09PXIuc2xpY2UoLTQpP2Z1bmN0aW9uIHV4KGUsdCxyLGEpe2lmKCFlKXJldHVybiBlO3ZhciBuPWF8fHt9LGk9ITE7aHQoZSxmdW5jdGlvbihjLG8sbCl7c3dpdGNoKGwpe2Nhc2UgMzU5OmNhc2UgMzYzOmNhc2UgMzY0OmNhc2UgMzY2OmNhc2UgMzY3OmNhc2UgMzY4OmNh'@;
put 'c2UgMzY5OmNhc2UgMzcwOmNhc2UgMzcxOmNhc2UgNDcyOmNhc2UgNTc3OmNhc2UgNTc4OmNhc2UgNTc5OmNhc2UgNTgwOmNhc2UgNTgxOmNhc2UgNTgyOmNhc2UgNTgzOmNhc2UgNTg0OmNhc2UgNTg1OmNhc2UgNTg2OmNhc2UgNTg3OmJyZWFrO2Nhc2UgMzU6aT0hMDticmVhaztjYXNlIDM2'@;
put 'Omk9ITE7YnJlYWs7ZGVmYXVsdDppZighby5UJiYoIWl8fG4uV1RGKSl0aHJvdyBuZXcgRXJyb3IoIlVuZXhwZWN0ZWQgcmVjb3JkIDB4IitsLnRvU3RyaW5nKDE2KSl9fSxuKX0oZSwwLDAsYSk6dm9pZCAwfShRZShlLCRyKGxlKSksMCxsZSx0KX1jYXRjaHt9fSk7dmFyIGw9ZnVuY3Rpb24g'@;
put 'VHAoZSx0LHIpe3JldHVybiIuYmluIj09PXQuc2xpY2UoLTQpP2Z1bmN0aW9uIG1wKGUsdCl7dmFyIHI9e0FwcFZlcnNpb246e30sV0JQcm9wczp7fSxXQlZpZXc6W10sU2hlZXRzOltdLENhbGNQcjp7fSx4bWxuczoiIn0sYT1bXSxuPSExO3R8fCh0PXt9KSx0LmJpZmY9MTI7dmFyIGk9W10s'@;
put 'cz1bW11dO3JldHVybiBzLlNoZWV0TmFtZXM9W10scy5YVEk9W10sJGFbMTZdPXtuOiJCcnRGUlRBcmNoSUQkIixmOnZwfSxodChlLGZ1bmN0aW9uKGMsbyxsKXtzd2l0Y2gobCl7Y2FzZSAxNTY6cy5TaGVldE5hbWVzLnB1c2goYy5uYW1lKSxyLlNoZWV0cy5wdXNoKGMpO2JyZWFrO2Nhc2Ug'@;
put 'MTUzOnIuV0JQcm9wcz1jO2JyZWFrO2Nhc2UgMzk6bnVsbCE9Yy5TaGVldCYmKHQuU0lEPWMuU2hlZXQpLGMuUmVmPWtyKGMuUHRnLDAsbnVsbCxzLHQpLGRlbGV0ZSB0LlNJRCxkZWxldGUgYy5QdGcsaS5wdXNoKGMpO2JyZWFrO2Nhc2UgMTAzNjpjYXNlIDM2MTpjYXNlIDIwNzE6Y2FzZSAx'@;
put 'NTg6Y2FzZSAxNDM6Y2FzZSA2NjQ6Y2FzZSAzNTM6Y2FzZSAzMDcyOmNhc2UgMzA3MzpjYXNlIDUzNDpjYXNlIDY3NzpjYXNlIDE1NzpjYXNlIDYxMDpjYXNlIDIwNTA6Y2FzZSAxNTU6Y2FzZSA1NDg6Y2FzZSA2NzY6Y2FzZSAxMjg6Y2FzZSA2NjU6Y2FzZSAyMTI4OmNhc2UgMjEyNTpjYXNl'@;
put 'IDU0OTpjYXNlIDIwNTM6Y2FzZSA1OTY6Y2FzZSAyMDc2OmNhc2UgMjA3NTpjYXNlIDIwODI6Y2FzZSAzOTc6Y2FzZSAxNTQ6Y2FzZSAxMTE3OmNhc2UgNTUzOmNhc2UgMjA5MTpjYXNlIDE2OmJyZWFrO2Nhc2UgMzU3OmNhc2UgMzU4OmNhc2UgMzU1OmNhc2UgNjY3OnNbMF0ubGVuZ3RoP3Mu'@;
put 'cHVzaChbbCxjXSk6c1swXT1bbCxjXSxzW3MubGVuZ3RoLTFdLlhUST1bXTticmVhaztjYXNlIDM2MjowPT09cy5sZW5ndGgmJihzWzBdPVtdLHNbMF0uWFRJPVtdKSxzW3MubGVuZ3RoLTFdLlhUST1zW3MubGVuZ3RoLTFdLlhUSS5jb25jYXQoYykscy5YVEk9cy5YVEkuY29uY2F0KGMpO2Jy'@;
put 'ZWFrO2Nhc2UgMzU6Y2FzZSAzNzphLnB1c2gobCksbj0hMDticmVhaztjYXNlIDM2OmNhc2UgMzg6YS5wb3AoKSxuPSExO2JyZWFrO2RlZmF1bHQ6aWYoIW8uVCYmKCFufHx0LldURiYmMzchPWFbYS5sZW5ndGgtMV0mJjM1IT1hW2EubGVuZ3RoLTFdKSl0aHJvdyBuZXcgRXJyb3IoIlVuZXhw'@;
put 'ZWN0ZWQgcmVjb3JkIDB4IitsLnRvU3RyaW5nKDE2KSl9fSx0KSxIZihyKSxyLk5hbWVzPWksci5zdXBib29rcz1zLHJ9KGUscik6ZnVuY3Rpb24gbHAoZSx0KXtpZighZSl0aHJvdyBuZXcgRXJyb3IoIkNvdWxkIG5vdCBmaW5kIGZpbGUiKTt2YXIgcj17QXBwVmVyc2lvbjp7fSxXQlByb3Bz'@;
put 'Ont9LFdCVmlldzpbXSxTaGVldHM6W10sQ2FsY1ByOnt9LE5hbWVzOltdLHhtbG5zOiIifSxhPSExLG49InhtbG5zIixpPXt9LHM9MDtpZihlLnJlcGxhY2UodnIsZnVuY3Rpb24oYyxvKXt2YXIgbD1tZShjKTtzd2l0Y2gocnQobFswXSkpe2Nhc2UiPD94bWwiOmNhc2UiPC93b3JrYm9vaz4i'@;
put 'OmNhc2UiPGZpbGVWZXJzaW9uLz4iOmNhc2UiPC9maWxlVmVyc2lvbj4iOmNhc2UiPGZpbGVTaGFyaW5nIjpjYXNlIjxmaWxlU2hhcmluZy8+IjpjYXNlIjwvd29ya2Jvb2tQcj4iOmNhc2UiPHdvcmtib29rUHJvdGVjdGlvbiI6Y2FzZSI8d29ya2Jvb2tQcm90ZWN0aW9uLz4iOmNhc2UiPGJv'@;
put 'b2tWaWV3cyI6Y2FzZSI8Ym9va1ZpZXdzPiI6Y2FzZSI8L2Jvb2tWaWV3cz4iOmNhc2UiPC93b3JrYm9va1ZpZXc+IjpjYXNlIjxzaGVldHMiOmNhc2UiPHNoZWV0cz4iOmNhc2UiPC9zaGVldHM+IjpjYXNlIjwvc2hlZXQ+IjpjYXNlIjxmdW5jdGlvbkdyb3VwcyI6Y2FzZSI8ZnVuY3Rpb25H'@;
put 'cm91cHMvPiI6Y2FzZSI8ZnVuY3Rpb25Hcm91cCI6Y2FzZSI8ZXh0ZXJuYWxSZWZlcmVuY2VzIjpjYXNlIjwvZXh0ZXJuYWxSZWZlcmVuY2VzPiI6Y2FzZSI8ZXh0ZXJuYWxSZWZlcmVuY2VzPiI6Y2FzZSI8ZXh0ZXJuYWxSZWZlcmVuY2UiOmNhc2UiPGRlZmluZWROYW1lcy8+IjpjYXNlIjxk'@;
put 'ZWZpbmVkTmFtZS8+IjpjYXNlIjwvY2FsY1ByPiI6Y2FzZSI8b2xlU2l6ZSI6Y2FzZSI8Y3VzdG9tV29ya2Jvb2tWaWV3cz4iOmNhc2UiPC9jdXN0b21Xb3JrYm9va1ZpZXdzPiI6Y2FzZSI8Y3VzdG9tV29ya2Jvb2tWaWV3cyI6Y2FzZSI8Y3VzdG9tV29ya2Jvb2tWaWV3IjpjYXNlIjwvY3Vz'@;
put 'dG9tV29ya2Jvb2tWaWV3PiI6Y2FzZSI8cGl2b3RDYWNoZXM+IjpjYXNlIjwvcGl2b3RDYWNoZXM+IjpjYXNlIjxwaXZvdENhY2hlcyI6Y2FzZSI8cGl2b3RDYWNoZSI6Y2FzZSI8c21hcnRUYWdQciI6Y2FzZSI8c21hcnRUYWdQci8+IjpjYXNlIjxzbWFydFRhZ1R5cGVzIjpjYXNlIjxzbWFy'@;
put 'dFRhZ1R5cGVzPiI6Y2FzZSI8L3NtYXJ0VGFnVHlwZXM+IjpjYXNlIjxzbWFydFRhZ1R5cGUiOmNhc2UiPHdlYlB1Ymxpc2hpbmciOmNhc2UiPHdlYlB1Ymxpc2hpbmcvPiI6Y2FzZSI8ZmlsZVJlY292ZXJ5UHIiOmNhc2UiPGZpbGVSZWNvdmVyeVByLz4iOmNhc2UiPHdlYlB1Ymxpc2hPYmpl'@;
put 'Y3RzPiI6Y2FzZSI8d2ViUHVibGlzaE9iamVjdHMiOmNhc2UiPC93ZWJQdWJsaXNoT2JqZWN0cz4iOmNhc2UiPHdlYlB1Ymxpc2hPYmplY3QiOmNhc2UiPGV4dExzdCI6Y2FzZSI8ZXh0THN0PiI6Y2FzZSI8L2V4dExzdD4iOmNhc2UiPGV4dExzdC8+IjpjYXNlIjxBcmNoSUQiOmNhc2UiPHJl'@;
put 'dmlzaW9uUHRyIjpicmVhaztjYXNlIjx3b3JrYm9vayI6Yy5tYXRjaChvcCkmJihuPSJ4bWxucyIrYy5tYXRjaCgvPChcdyspOi8pWzFdKSxyLnhtbG5zPWxbbl07YnJlYWs7Y2FzZSI8ZmlsZVZlcnNpb24iOmRlbGV0ZSBsWzBdLHIuQXBwVmVyc2lvbj1sO2JyZWFrO2Nhc2UiPHdvcmtib29r'@;
put 'UHIiOmNhc2UiPHdvcmtib29rUHIvPiI6Qm4uZm9yRWFjaChmdW5jdGlvbihoKXtpZihudWxsIT1sW2hbMF1dKXN3aXRjaChoWzJdKXtjYXNlImJvb2wiOnIuV0JQcm9wc1toWzBdXT1XZShsW2hbMF1dKTticmVhaztjYXNlImludCI6ci5XQlByb3BzW2hbMF1dPXBhcnNlSW50KGxbaFswXV0s'@;
put 'MTApO2JyZWFrO2RlZmF1bHQ6ci5XQlByb3BzW2hbMF1dPWxbaFswXV19fSksbC5jb2RlTmFtZSYmKHIuV0JQcm9wcy5Db2RlTmFtZT1CZShsLmNvZGVOYW1lKSk7YnJlYWs7Y2FzZSI8d29ya2Jvb2tWaWV3IjpjYXNlIjx3b3JrYm9va1ZpZXcvPiI6ZGVsZXRlIGxbMF0sci5XQlZpZXcucHVz'@;
put 'aChsKTticmVhaztjYXNlIjxzaGVldCI6c3dpdGNoKGwuc3RhdGUpe2Nhc2UiaGlkZGVuIjpsLkhpZGRlbj0xO2JyZWFrO2Nhc2UidmVyeUhpZGRlbiI6bC5IaWRkZW49MjticmVhaztkZWZhdWx0OmwuSGlkZGVuPTB9ZGVsZXRlIGwuc3RhdGUsbC5uYW1lPUllKEJlKGwubmFtZSkpLGRlbGV0'@;
put 'ZSBsWzBdLHIuU2hlZXRzLnB1c2gobCk7YnJlYWs7Y2FzZSI8ZGVmaW5lZE5hbWVzPiI6Y2FzZSI8ZGVmaW5lZE5hbWVzIjpjYXNlIjxleHQiOmNhc2UiPEFsdGVybmF0ZUNvbnRlbnQiOmNhc2UiPEFsdGVybmF0ZUNvbnRlbnQ+IjphPSEwO2JyZWFrO2Nhc2UiPC9kZWZpbmVkTmFtZXM+Ijpj'@;
put 'YXNlIjwvZXh0PiI6Y2FzZSI8L0FsdGVybmF0ZUNvbnRlbnQ+IjphPSExO2JyZWFrO2Nhc2UiPGRlZmluZWROYW1lIjooaT17fSkuTmFtZT1CZShsLm5hbWUpLGwuY29tbWVudCYmKGkuQ29tbWVudD1sLmNvbW1lbnQpLGwubG9jYWxTaGVldElkJiYoaS5TaGVldD0rbC5sb2NhbFNoZWV0SWQp'@;
put 'LFdlKGwuaGlkZGVufHwiMCIpJiYoaS5IaWRkZW49ITApLHM9bytjLmxlbmd0aDticmVhaztjYXNlIjwvZGVmaW5lZE5hbWU+IjppLlJlZj1JZShCZShlLnNsaWNlKHMsbykpKSxyLk5hbWVzLnB1c2goaSk7YnJlYWs7Y2FzZSI8Y2FsY1ByIjpjYXNlIjxjYWxjUHIvPiI6ZGVsZXRlIGxbMF0s'@;
put 'ci5DYWxjUHI9bDticmVhaztkZWZhdWx0OmlmKCFhJiZ0LldURil0aHJvdyBuZXcgRXJyb3IoInVucmVjb2duaXplZCAiK2xbMF0rIiBpbiB3b3JrYm9vayIpfXJldHVybiBjfSksLTE9PT1TdC5pbmRleE9mKHIueG1sbnMpKXRocm93IG5ldyBFcnJvcigiVW5rbm93biBOYW1lc3BhY2U6ICIr'@;
put 'ci54bWxucyk7cmV0dXJuIEhmKHIpLHJ9KGUscil9KFFlKGUsJHIobi53b3JrYm9va3NbMF0pKSxuLndvcmtib29rc1swXSx0KSxoPXt9LHg9IiI7bi5jb3JlcHJvcHMubGVuZ3RoJiYoKHg9UWUoZSwkcihuLmNvcmVwcm9wc1swXSksITApKSYmKGg9bXMoeCkpLDAhPT1uLmV4dHByb3BzLmxl'@;
put 'bmd0aCYmKHg9UWUoZSwkcihuLmV4dHByb3BzWzBdKSwhMCkpJiZmdW5jdGlvbiB2bChlLHQscil7dmFyIGE9e307dHx8KHQ9e30pLGU9QmUoZSksWHQuZm9yRWFjaChmdW5jdGlvbihuKXt2YXIgaT0oZS5tYXRjaChGYShuWzBdKSl8fFtdKVsxXTtzd2l0Y2goblsyXSl7Y2FzZSJzdHJpbmci'@;
put 'OmkmJih0W25bMV1dPUllKGkpKTticmVhaztjYXNlImJvb2wiOnRbblsxXV09InRydWUiPT09aTticmVhaztjYXNlInJhdyI6dmFyIHM9ZS5tYXRjaChuZXcgUmVnRXhwKCI8IituWzBdKyJbXj5dKj4oW1xcc1xcU10qPyk8LyIrblswXSsiPiIpKTtzJiZzLmxlbmd0aD4wJiYoYVtuWzFdXT1z'@;
put 'WzFdKX19KSxhLkhlYWRpbmdQYWlycyYmYS5UaXRsZXNPZlBhcnRzJiZ3cyhhLkhlYWRpbmdQYWlycyxhLlRpdGxlc09mUGFydHMsdCxyKX0oeCxoLHQpKTt2YXIgZD17fTsoIXQuYm9va1NoZWV0c3x8dC5ib29rUHJvcHMpJiYwIT09bi5jdXN0cHJvcHMubGVuZ3RoJiYoeD1OcihlLCRyKG4u'@;
put 'Y3VzdHByb3BzWzBdKSwhMCkpJiYoZD1mdW5jdGlvbiBtbChlLHQpe3ZhciByPXt9LGE9IiIsbj1lLm1hdGNoKHBsKTtpZihuKWZvcih2YXIgaT0wO2khPW4ubGVuZ3RoOysraSl7dmFyIHM9bltpXSxmPW1lKHMpO3N3aXRjaChmWzBdKXtjYXNlIjw/eG1sIjpjYXNlIjxQcm9wZXJ0aWVzIjpi'@;
put 'cmVhaztjYXNlIjxwcm9wZXJ0eSI6YT1JZShmLm5hbWUpO2JyZWFrO2Nhc2UiPC9wcm9wZXJ0eT4iOmE9bnVsbDticmVhaztkZWZhdWx0OmlmKDA9PT1zLmluZGV4T2YoIjx2dDoiKSl7dmFyIGM9cy5zcGxpdCgiPiIpLG89Y1swXS5zbGljZSg0KSxsPWNbMV07c3dpdGNoKG8pe2Nhc2UibHBz'@;
put 'dHIiOmNhc2UiYnN0ciI6Y2FzZSJscHdzdHIiOmNhc2UiY3kiOmNhc2UiZXJyb3IiOnJbYV09SWUobCk7YnJlYWs7Y2FzZSJib29sIjpyW2FdPVdlKGwpO2JyZWFrO2Nhc2UiaTEiOmNhc2UiaTIiOmNhc2UiaTQiOmNhc2UiaTgiOmNhc2UiaW50IjpjYXNlInVpbnQiOnJbYV09cGFyc2VJbnQo'@;
put 'bCwxMCk7YnJlYWs7Y2FzZSJyNCI6Y2FzZSJyOCI6Y2FzZSJkZWNpbWFsIjpyW2FdPXBhcnNlRmxvYXQobCk7YnJlYWs7Y2FzZSJmaWxldGltZSI6Y2FzZSJkYXRlIjpyW2FdPVhlKGwpO2JyZWFrO2RlZmF1bHQ6aWYoIi8iPT1vLnNsaWNlKC0xKSlicmVhazt0LldURiYmdHlwZW9mIGNvbnNv'@;
put 'bGU8InUiJiZjb25zb2xlLndhcm4oIlVuZXhwZWN0ZWQiLHMsbyxjKX19ZWxzZSBpZigiPC8iIT09cy5zbGljZSgwLDIpJiZ0LldURil0aHJvdyBuZXcgRXJyb3Iocyl9fXJldHVybiByfSh4LHQpKTt2YXIgdj17fTtpZigodC5ib29rU2hlZXRzfHx0LmJvb2tQcm9wcykmJihsLlNoZWV0cz9z'@;
put 'PWwuU2hlZXRzLm1hcChmdW5jdGlvbihyZSl7cmV0dXJuIHJlLm5hbWV9KTpoLldvcmtzaGVldHMmJmguU2hlZXROYW1lcy5sZW5ndGg+MCYmKHM9aC5TaGVldE5hbWVzKSx0LmJvb2tQcm9wcyYmKHYuUHJvcHM9aCx2LkN1c3Rwcm9wcz1kKSx0LmJvb2tTaGVldHMmJnR5cGVvZiBzPCJ1IiYm'@;
put 'KHYuU2hlZXROYW1lcz1zKSx0LmJvb2tTaGVldHM/di5TaGVldE5hbWVzOnQuYm9va1Byb3BzKSlyZXR1cm4gdjtzPXt9O3ZhciB1PXt9O3QuYm9va0RlcHMmJm4uY2FsY2NoYWluJiYodT1mdW5jdGlvbiBScChlLHQscil7cmV0dXJuIi5iaW4iPT09dC5zbGljZSgtNCk/ZnVuY3Rpb24gbHgo'@;
put 'ZSx0LHIpe3ZhciBhPVtdO3JldHVybiBodChlLGZ1bmN0aW9uKHMsZixjKXtpZig2Mz09PWMpYS5wdXNoKHMpO2Vsc2UgaWYoIWYuVCl0aHJvdyBuZXcgRXJyb3IoIlVuZXhwZWN0ZWQgcmVjb3JkIDB4IitjLnRvU3RyaW5nKDE2KSl9KSxhfShlKTpmdW5jdGlvbiBjeChlKXt2YXIgdD1bXTtp'@;
put 'ZighZSlyZXR1cm4gdDt2YXIgcj0xO3JldHVybihlLm1hdGNoKHZyKXx8W10pLmZvckVhY2goZnVuY3Rpb24oYSl7dmFyIG49bWUoYSk7c3dpdGNoKG5bMF0pe2Nhc2UiPD94bWwiOmNhc2UiPGNhbGNDaGFpbiI6Y2FzZSI8Y2FsY0NoYWluPiI6Y2FzZSI8L2NhbGNDaGFpbj4iOmJyZWFrO2Nh'@;
put 'c2UiPGMiOmRlbGV0ZSBuWzBdLG4uaT9yPW4uaTpuLmk9cix0LnB1c2gobil9fSksdH0oZSl9KFFlKGUsJHIobi5jYWxjY2hhaW4pKSxuLmNhbGNjaGFpbikpO3ZhciBULGcscD0wLGs9e30sTj1sLlNoZWV0cztoLldvcmtzaGVldHM9Ti5sZW5ndGgsaC5TaGVldE5hbWVzPVtdO2Zvcih2YXIg'@;
put 'TT0wO00hPU4ubGVuZ3RoOysrTSloLlNoZWV0TmFtZXNbTV09TltNXS5uYW1lO3ZhciBJPWk/ImJpbiI6InhtbCIseT1uLndvcmtib29rc1swXS5sYXN0SW5kZXhPZigiLyIpLFA9KG4ud29ya2Jvb2tzWzBdLnNsaWNlKDAseSsxKSsiX3JlbHMvIituLndvcmtib29rc1swXS5zbGljZSh5KzEp'@;
put 'KyIucmVscyIpLnJlcGxhY2UoL15cLy8sIiIpO1dyKGUsUCl8fChQPSJ4bC9fcmVscy93b3JrYm9vay4iK0krIi5yZWxzIik7dmFyIFI9SWEoTnIoZSxQLCEwKSxQLnJlcGxhY2UoL19yZWxzLiovLCJzNXMiKSk7KG4ubWV0YWRhdGF8fFtdKS5sZW5ndGg+PTEmJih0LnhsbWV0YT1mdW5jdGlv'@;
put 'biBicChlLHQscil7cmV0dXJuIi5iaW4iPT09dC5zbGljZSgtNCk/ZnVuY3Rpb24gaXgoZSx0LHIpe3ZhciBhPXtUeXBlczpbXSxDZWxsOltdLFZhbHVlOltdfSxuPXJ8fHt9LGk9W10scz0hMSxmPTI7cmV0dXJuIGh0KGUsZnVuY3Rpb24oYyxvLGwpe3N3aXRjaChsKXtjYXNlIDMzNTphLlR5'@;
put 'cGVzLnB1c2goe25hbWU6Yy5uYW1lfSk7YnJlYWs7Y2FzZSA1MTpjLmZvckVhY2goZnVuY3Rpb24oaCl7MT09Zj9hLkNlbGwucHVzaCh7dHlwZTphLlR5cGVzW2hbMF0tMV0ubmFtZSxpbmRleDpoWzFdfSk6MD09ZiYmYS5WYWx1ZS5wdXNoKHt0eXBlOmEuVHlwZXNbaFswXS0xXS5uYW1lLGlu'@;
put 'ZGV4OmhbMV19KX0pO2JyZWFrO2Nhc2UgMzM3OmY9Yz8xOjA7YnJlYWs7Y2FzZSAzMzg6Zj0yO2JyZWFrO2Nhc2UgMzU6aS5wdXNoKGwpLHM9ITA7YnJlYWs7Y2FzZSAzNjppLnBvcCgpLHM9ITE7YnJlYWs7ZGVmYXVsdDppZighby5UJiYoIXN8fG4uV1RGJiYzNSE9aVtpLmxlbmd0aC0xXSkp'@;
put 'dGhyb3cgbmV3IEVycm9yKCJVbmV4cGVjdGVkIHJlY29yZCAweCIrbC50b1N0cmluZygxNikpfX0pLGF9KGUsMCxyKTpmdW5jdGlvbiBmeChlLHQscil7dmFyIGE9e1R5cGVzOltdLENlbGw6W10sVmFsdWU6W119O2lmKCFlKXJldHVybiBhO3ZhciBzLG49ITEsaT0yO3JldHVybiBlLnJlcGxh'@;
put 'Y2UodnIsZnVuY3Rpb24oZil7dmFyIGM9bWUoZik7c3dpdGNoKHJ0KGNbMF0pKXtjYXNlIjw/eG1sIjpjYXNlIjxtZXRhZGF0YSI6Y2FzZSI8L21ldGFkYXRhPiI6Y2FzZSI8bWV0YWRhdGFUeXBlcyI6Y2FzZSI8L21ldGFkYXRhVHlwZXM+IjpjYXNlIjwvbWV0YWRhdGFUeXBlPiI6Y2FzZSI8'@;
put 'L2Z1dHVyZU1ldGFkYXRhPiI6Y2FzZSI8Yms+IjpjYXNlIjwvYms+IjpjYXNlIjwvcmM+IjpjYXNlIjxleHRMc3QiOmNhc2UiPGV4dExzdD4iOmNhc2UiPC9leHRMc3Q+IjpjYXNlIjxleHRMc3QvPiI6YnJlYWs7Y2FzZSI8bWV0YWRhdGFUeXBlIjphLlR5cGVzLnB1c2goe25hbWU6Yy5uYW1l'@;
put 'fSk7YnJlYWs7Y2FzZSI8ZnV0dXJlTWV0YWRhdGEiOmZvcih2YXIgbz0wO288YS5UeXBlcy5sZW5ndGg7KytvKWEuVHlwZXNbb10ubmFtZT09Yy5uYW1lJiYocz1hLlR5cGVzW29dKTticmVhaztjYXNlIjxyYyI6MT09aT9hLkNlbGwucHVzaCh7dHlwZTphLlR5cGVzW2MudC0xXS5uYW1lLGlu'@;
put 'ZGV4OitjLnZ9KTowPT1pJiZhLlZhbHVlLnB1c2goe3R5cGU6YS5UeXBlc1tjLnQtMV0ubmFtZSxpbmRleDorYy52fSk7YnJlYWs7Y2FzZSI8Y2VsbE1ldGFkYXRhIjppPTE7YnJlYWs7Y2FzZSI8L2NlbGxNZXRhZGF0YT4iOmNhc2UiPC92YWx1ZU1ldGFkYXRhPiI6aT0yO2JyZWFrO2Nhc2Ui'@;
put 'PHZhbHVlTWV0YWRhdGEiOmk9MDticmVhaztjYXNlIjxleHQiOm49ITA7YnJlYWs7Y2FzZSI8L2V4dD4iOm49ITE7YnJlYWs7Y2FzZSI8cnZiIjppZighcylicmVhaztzLm9mZnNldHN8fChzLm9mZnNldHM9W10pLHMub2Zmc2V0cy5wdXNoKCtjLmkpO2JyZWFrO2RlZmF1bHQ6aWYoIW4mJnIu'@;
put 'V1RGKXRocm93IG5ldyBFcnJvcigidW5yZWNvZ25pemVkICIrY1swXSsiIGluIG1ldGFkYXRhIil9cmV0dXJuIGZ9KSxhfShlLDAscil9KFFlKGUsJHIobi5tZXRhZGF0YVswXSkpLG4ubWV0YWRhdGFbMF0sdCkpLChuLnBlb3BsZXx8W10pLmxlbmd0aD49MSYmKHQucGVvcGxlPWZ1bmN0aW9u'@;
put 'IHB4KGUsdCl7dmFyIHI9W10sYT0hMTtyZXR1cm4gZS5yZXBsYWNlKHZyLGZ1bmN0aW9uKGkpe3ZhciBzPW1lKGkpO3N3aXRjaChydChzWzBdKSl7Y2FzZSI8P3htbCI6Y2FzZSI8cGVyc29uTGlzdCI6Y2FzZSI8L3BlcnNvbkxpc3Q+IjpjYXNlIjwvcGVyc29uPiI6Y2FzZSI8ZXh0THN0Ijpj'@;
put 'YXNlIjxleHRMc3Q+IjpjYXNlIjwvZXh0THN0PiI6Y2FzZSI8ZXh0THN0Lz4iOmJyZWFrO2Nhc2UiPHBlcnNvbiI6ci5wdXNoKHtuYW1lOnMuZGlzcGxheW5hbWUsaWQ6cy5pZH0pO2JyZWFrO2Nhc2UiPGV4dCI6YT0hMDticmVhaztjYXNlIjwvZXh0PiI6YT0hMTticmVhaztkZWZhdWx0Omlm'@;
put 'KCFhJiZ0LldURil0aHJvdyBuZXcgRXJyb3IoInVucmVjb2duaXplZCAiK3NbMF0rIiBpbiB0aHJlYWRlZCBjb21tZW50cyIpfXJldHVybiBpfSkscn0oUWUoZSwkcihuLnBlb3BsZVswXSkpLHQpKSxSJiYoUj1mdW5jdGlvbiBxbShlLHQpe2lmKCFlKXJldHVybiAwO3RyeXtlPXQubWFwKGZ1'@;
put 'bmN0aW9uKGEpe3JldHVybiBhLmlkfHwoYS5pZD1hLnN0clJlbElEKSxbYS5uYW1lLGVbIiFpZCJdW2EuaWRdLlRhcmdldCxKbShlWyIhaWQiXVthLmlkXS5UeXBlKV19KX1jYXRjaHtyZXR1cm4gbnVsbH1yZXR1cm4gZSYmMCE9PWUubGVuZ3RoP2U6bnVsbH0oUixsLlNoZWV0cykpO3ZhciBW'@;
put 'PVFlKGUsInhsL3dvcmtzaGVldHMvc2hlZXQueG1sIiwhMCk/MTowO2U6Zm9yKHA9MDtwIT1oLldvcmtzaGVldHM7KytwKXt2YXIgWD0ic2hlZXQiO2lmKFImJlJbcF0/KFQ9InhsLyIrUltwXVsxXS5yZXBsYWNlKC9bXC9dP3hsXC8vLCIiKSxXcihlLFQpfHwoVD1SW3BdWzFdKSxXcihlLFQp'@;
put 'fHwoVD1QLnJlcGxhY2UoL19yZWxzXC8uKiQvLCIiKStSW3BdWzFdKSxYPVJbcF1bMl0pOlQ9KFQ9InhsL3dvcmtzaGVldHMvc2hlZXQiKyhwKzEtVikrIi4iK0kpLnJlcGxhY2UoL3NoZWV0MFwuLywic2hlZXQuIiksZz1ULnJlcGxhY2UoL14oLiopKFwvKShbXlwvXSopJC8sIiQxL19yZWxz'@;
put 'LyQzLnJlbHMiKSx0JiZudWxsIT10LnNoZWV0cylzd2l0Y2godHlwZW9mIHQuc2hlZXRzKXtjYXNlIm51bWJlciI6aWYocCE9dC5zaGVldHMpY29udGludWUgZTticmVhaztjYXNlInN0cmluZyI6aWYoaC5TaGVldE5hbWVzW3BdLnRvTG93ZXJDYXNlKCkhPXQuc2hlZXRzLnRvTG93ZXJDYXNl'@;
put 'KCkpY29udGludWUgZTticmVhaztkZWZhdWx0OmlmKEFycmF5LmlzQXJyYXkmJkFycmF5LmlzQXJyYXkodC5zaGVldHMpKXtmb3IodmFyIGI9ITEsZWU9MDtlZSE9dC5zaGVldHMubGVuZ3RoOysrZWUpIm51bWJlciI9PXR5cGVvZiB0LnNoZWV0c1tlZV0mJnQuc2hlZXRzW2VlXT09cCYmKGI9'@;
put 'MSksInN0cmluZyI9PXR5cGVvZiB0LnNoZWV0c1tlZV0mJnQuc2hlZXRzW2VlXS50b0xvd2VyQ2FzZSgpPT1oLlNoZWV0TmFtZXNbcF0udG9Mb3dlckNhc2UoKSYmKGI9MSk7aWYoIWIpY29udGludWUgZX19Wm0oZSxULGcsaC5TaGVldE5hbWVzW3BdLHAsayxzLFgsdCxsLGMsbyl9cmV0dXJu'@;
put 'IHY9e0RpcmVjdG9yeTpuLFdvcmtib29rOmwsUHJvcHM6aCxDdXN0cHJvcHM6ZCxEZXBzOnUsU2hlZXRzOnMsU2hlZXROYW1lczpoLlNoZWV0TmFtZXMsU3RyaW5nczpWYSxTdHlsZXM6byxUaGVtZXM6YyxTU0Y6TWUocGUpfSx0JiZ0LmJvb2tGaWxlcyYmKGUuZmlsZXM/KHYua2V5cz1hLHYu'@;
put 'ZmlsZXM9ZS5maWxlcyk6KHYua2V5cz1bXSx2LmZpbGVzPXt9LGUuRnVsbFBhdGhzLmZvckVhY2goZnVuY3Rpb24obGUscmUpe2xlPWxlLnJlcGxhY2UoL15Sb290IEVudHJ5W1wvXS8sIiIpLHYua2V5cy5wdXNoKGxlKSx2LmZpbGVzW2xlXT1lLkZpbGVJbmRleFtyZV19KSkpLHQmJnQuYm9v'@;
put 'a1ZCQSYmKG4udmJhLmxlbmd0aD4wP3YudmJhcmF3PVFlKGUsJHIobi52YmFbMF0pLCEwKTpuLmRlZmF1bHRzJiZuLmRlZmF1bHRzLmJpbj09PVN4JiYodi52YmFyYXc9UWUoZSwieGwvdmJhUHJvamVjdC5iaW4iLCEwKSkpLHZ9ZnVuY3Rpb24gZWcoZSx0KXt2YXIgcj10fHx7fSxhPSJXb3Jr'@;
put 'Ym9vayIsbj12ZS5maW5kKGUsYSk7dHJ5e2lmKCEobj12ZS5maW5kKGUsYT0iLyFEYXRhU3BhY2VzL1ZlcnNpb24iKSl8fCFuLmNvbnRlbnQpdGhyb3cgbmV3IEVycm9yKCJFQ01BLTM3NiBFbmNyeXB0ZWQgZmlsZSBtaXNzaW5nICIrYSk7aWYoZnVuY3Rpb24gUGgoZSl7dmFyIHQ9e307dC5p'@;
put 'ZD1lLnJlYWRfc2hpZnQoMCwibHBwNCIpLHQuUj1kdChlLDQpLHQuVT1kdChlLDQpLHQuVz1kdChlLDQpfShuLmNvbnRlbnQpLCEobj12ZS5maW5kKGUsYT0iLyFEYXRhU3BhY2VzL0RhdGFTcGFjZU1hcCIpKXx8IW4uY29udGVudCl0aHJvdyBuZXcgRXJyb3IoIkVDTUEtMzc2IEVuY3J5cHRl'@;
put 'ZCBmaWxlIG1pc3NpbmcgIithKTt2YXIgaT1mdW5jdGlvbiBCaChlKXt2YXIgdD1bXTtlLmwrPTQ7Zm9yKHZhciByPWUucmVhZF9zaGlmdCg0KTtyLS0gPjA7KXQucHVzaChMaChlKSk7cmV0dXJuIHR9KG4uY29udGVudCk7aWYoMSE9PWkubGVuZ3RofHwxIT09aVswXS5jb21wcy5sZW5ndGh8'@;
put 'fDAhPT1pWzBdLmNvbXBzWzBdLnR8fCJTdHJvbmdFbmNyeXB0aW9uRGF0YVNwYWNlIiE9PWlbMF0ubmFtZXx8IkVuY3J5cHRlZFBhY2thZ2UiIT09aVswXS5jb21wc1swXS52KXRocm93IG5ldyBFcnJvcigiRUNNQS0zNzYgRW5jcnlwdGVkIGZpbGUgYmFkICIrYSk7aWYoIShuPXZlLmZpbmQo'@;
put 'ZSxhPSIvIURhdGFTcGFjZXMvRGF0YVNwYWNlSW5mby9TdHJvbmdFbmNyeXB0aW9uRGF0YVNwYWNlIikpfHwhbi5jb250ZW50KXRocm93IG5ldyBFcnJvcigiRUNNQS0zNzYgRW5jcnlwdGVkIGZpbGUgbWlzc2luZyAiK2EpO3ZhciBzPWZ1bmN0aW9uIE1oKGUpe3ZhciB0PVtdO2UubCs9NDtm'@;
put 'b3IodmFyIHI9ZS5yZWFkX3NoaWZ0KDQpO3ItLSA+MDspdC5wdXNoKGUucmVhZF9zaGlmdCgwLCJscHA0IikpO3JldHVybiB0fShuLmNvbnRlbnQpO2lmKDEhPXMubGVuZ3RofHwiU3Ryb25nRW5jcnlwdGlvblRyYW5zZm9ybSIhPXNbMF0pdGhyb3cgbmV3IEVycm9yKCJFQ01BLTM3NiBFbmNy'@;
put 'eXB0ZWQgZmlsZSBiYWQgIithKTtpZighKG49dmUuZmluZChlLGE9Ii8hRGF0YVNwYWNlcy9UcmFuc2Zvcm1JbmZvL1N0cm9uZ0VuY3J5cHRpb25UcmFuc2Zvcm0vIVByaW1hcnkiKSl8fCFuLmNvbnRlbnQpdGhyb3cgbmV3IEVycm9yKCJFQ01BLTM3NiBFbmNyeXB0ZWQgZmlsZSBtaXNzaW5n'@;
put 'ICIrYSk7IWZ1bmN0aW9uIFdoKGUpe3ZhciB0PWZ1bmN0aW9uIFVoKGUpe3ZhciB0PXt9O3JldHVybiBlLnJlYWRfc2hpZnQoNCksZS5sKz00LHQuaWQ9ZS5yZWFkX3NoaWZ0KDAsImxwcDQiKSx0Lm5hbWU9ZS5yZWFkX3NoaWZ0KDAsImxwcDQiKSx0LlI9ZHQoZSw0KSx0LlU9ZHQoZSw0KSx0'@;
put 'Llc9ZHQoZSw0KSx0fShlKTtpZih0LmVuYW1lPWUucmVhZF9zaGlmdCgwLCI4bHBwNCIpLHQuYmxrc3o9ZS5yZWFkX3NoaWZ0KDQpLHQuY21vZGU9ZS5yZWFkX3NoaWZ0KDQpLDQhPWUucmVhZF9zaGlmdCg0KSl0aHJvdyBuZXcgRXJyb3IoIkJhZCAhUHJpbWFyeSByZWNvcmQiKTtyZXR1cm4g'@;
put 'dH0obi5jb250ZW50KX1jYXRjaHt9aWYoIShuPXZlLmZpbmQoZSxhPSIvRW5jcnlwdGlvbkluZm8iKSl8fCFuLmNvbnRlbnQpdGhyb3cgbmV3IEVycm9yKCJFQ01BLTM3NiBFbmNyeXB0ZWQgZmlsZSBtaXNzaW5nICIrYSk7dmFyIGY9ZnVuY3Rpb24gSGgoZSl7dmFyIHQ9ZHQoZSk7c3dpdGNo'@;
put 'KHQuTWlub3Ipe2Nhc2UgMjpyZXR1cm5bdC5NaW5vcixWaChlKV07Y2FzZSAzOnJldHVyblt0Lk1pbm9yLFhoKCldO2Nhc2UgNDpyZXR1cm5bdC5NaW5vcixHaChlKV19dGhyb3cgbmV3IEVycm9yKCJFQ01BLTM3NiBFbmNyeXB0ZWQgZmlsZSB1bnJlY29nbml6ZWQgVmVyc2lvbjogIit0Lk1p'@;
put 'bm9yKX0obi5jb250ZW50KTtpZighKG49dmUuZmluZChlLGE9Ii9FbmNyeXB0ZWRQYWNrYWdlIikpfHwhbi5jb250ZW50KXRocm93IG5ldyBFcnJvcigiRUNNQS0zNzYgRW5jcnlwdGVkIGZpbGUgbWlzc2luZyAiK2EpO2lmKDQ9PWZbMF0mJnR5cGVvZiBkZWNyeXB0X2FnaWxlPCJ1IilyZXR1'@;
put 'cm4gZGVjcnlwdF9hZ2lsZShmWzFdLG4uY29udGVudCxyLnBhc3N3b3JkfHwiIixyKTtpZigyPT1mWzBdJiZ0eXBlb2YgZGVjcnlwdF9zdGQ3NjwidSIpcmV0dXJuIGRlY3J5cHRfc3RkNzYoZlsxXSxuLmNvbnRlbnQsci5wYXNzd29yZHx8IiIscik7dGhyb3cgbmV3IEVycm9yKCJGaWxlIGlz'@;
put 'IHBhc3N3b3JkLXByb3RlY3RlZCIpfWZ1bmN0aW9uIEtuKGUsdCl7dmFyIHI9IiI7c3dpdGNoKCh0fHx7fSkudHlwZXx8ImJhc2U2NCIpe2Nhc2UiYnVmZmVyIjpjYXNlImFycmF5IjpyZXR1cm5bZVswXSxlWzFdLGVbMl0sZVszXSxlWzRdLGVbNV0sZVs2XSxlWzddXTtjYXNlImJhc2U2NCI6'@;
put 'cj1PcihlLnNsaWNlKDAsMTIpKTticmVhaztjYXNlImJpbmFyeSI6cj1lO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJVbnJlY29nbml6ZWQgdHlwZSAiKyh0JiZ0LnR5cGV8fCJ1bmRlZmluZWQiKSl9cmV0dXJuW3IuY2hhckNvZGVBdCgwKSxyLmNoYXJDb2RlQXQoMSksci5jaGFy'@;
put 'Q29kZUF0KDIpLHIuY2hhckNvZGVBdCgzKSxyLmNoYXJDb2RlQXQoNCksci5jaGFyQ29kZUF0KDUpLHIuY2hhckNvZGVBdCg2KSxyLmNoYXJDb2RlQXQoNyldfWZ1bmN0aW9uIHZjKGUsdCl7dmFyIHI9MDtlOmZvcig7cjxlLmxlbmd0aDspc3dpdGNoKGUuY2hhckNvZGVBdChyKSl7Y2FzZSAx'@;
put 'MDpjYXNlIDEzOmNhc2UgMzI6KytyO2JyZWFrO2Nhc2UgNjA6cmV0dXJuIFVuKGUuc2xpY2UociksdCk7ZGVmYXVsdDpicmVhayBlfXJldHVybiBjYS50b193b3JrYm9vayhlLHQpfWZ1bmN0aW9uIFluKGUsdCxyLGEpe3JldHVybiBhPyhyLnR5cGU9InN0cmluZyIsY2EudG9fd29ya2Jvb2so'@;
put 'ZSxyKSk6Y2EudG9fd29ya2Jvb2sodCxyKX1mdW5jdGlvbiBJMChlLHQpe3IwKCk7dmFyIHI9dHx8e307aWYodHlwZW9mIEFycmF5QnVmZmVyPCJ1IiYmZSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKXJldHVybiBJMChuZXcgVWludDhBcnJheShlKSwoKHI9TWUocikpLnR5cGU9ImFycmF5Iixy'@;
put 'KSk7dHlwZW9mIFVpbnQ4QXJyYXk8InUiJiZlIGluc3RhbmNlb2YgVWludDhBcnJheSYmIXIudHlwZSYmKHIudHlwZT10eXBlb2YgRGVubzwidSI/ImJ1ZmZlciI6ImFycmF5Iik7dmFyIG4sYT1lLGk9ITE7aWYoci5jZWxsU3R5bGVzJiYoci5jZWxsTkY9ITAsci5zaGVldFN0dWJzPSEwKSxo'@;
put 'YT17fSxyLmRhdGVORiYmKGhhLmRhdGVORj1yLmRhdGVORiksci50eXBlfHwoci50eXBlPVNlJiZCdWZmZXIuaXNCdWZmZXIoZSk/ImJ1ZmZlciI6ImJhc2U2NCIpLCJmaWxlIj09ci50eXBlJiYoci50eXBlPVNlPyJidWZmZXIiOiJiaW5hcnkiLGE9ZnVuY3Rpb24gY28oZSl7aWYodHlwZW9m'@;
put 'IERlbm88InUiKXJldHVybiBEZW5vLnJlYWRGaWxlU3luYyhlKTtpZih0eXBlb2YgJDwidSImJnR5cGVvZiBGaWxlPCJ1IiYmdHlwZW9mIEZvbGRlcjwidSIpdHJ5e3ZhciB0PUZpbGUoZSk7dC5vcGVuKCJyIiksdC5lbmNvZGluZz0iYmluYXJ5Ijt2YXIgcj10LnJlYWQoKTtyZXR1cm4gdC5j'@;
put 'bG9zZSgpLHJ9Y2F0Y2goYSl7aWYoIWEubWVzc2FnZXx8IWEubWVzc2FnZS5tYXRjaCgvb25zdHJ1Y3QvKSl0aHJvdyBhfXRocm93IG5ldyBFcnJvcigiQ2Fubm90IGFjY2VzcyBmaWxlICIrZSl9KGUpLHR5cGVvZiBVaW50OEFycmF5PCJ1IiYmIVNlJiYoci50eXBlPSJhcnJheSIpKSwic3Ry'@;
put 'aW5nIj09ci50eXBlJiYoaT0hMCxyLnR5cGU9ImJpbmFyeSIsci5jb2RlcGFnZT02NTAwMSxhPWZ1bmN0aW9uIGZnKGUpe3JldHVybiBlLm1hdGNoKC9bXlx4MDAtXHg3Rl0vKT90dChlKTplfShlKSksImFycmF5Ij09ci50eXBlJiZ0eXBlb2YgVWludDhBcnJheTwidSImJmUgaW5zdGFuY2Vv'@;
put 'ZiBVaW50OEFycmF5JiZ0eXBlb2YgQXJyYXlCdWZmZXI8InUiKXt2YXIgcz1uZXcgQXJyYXlCdWZmZXIoMyksZj1uZXcgVWludDhBcnJheShzKTtpZihmLmZvbz0iYmFyIiwhZi5mb28pcmV0dXJuKHI9TWUocikpLnR5cGU9ImFycmF5IixJMChNMChhKSxyKX1zd2l0Y2goKG49S24oYSxyKSlb'@;
put 'MF0pe2Nhc2UgMjA4OmlmKDIwNz09PW5bMV0mJjE3PT09blsyXSYmMjI0PT09blszXSYmMTYxPT09bls0XSYmMTc3PT09bls1XSYmMjY9PT1uWzZdJiYyMjU9PT1uWzddKXJldHVybiBmdW5jdGlvbiBhZyhlLHQpe3JldHVybiB2ZS5maW5kKGUsIkVuY3J5cHRlZFBhY2thZ2UiKT9lZyhlLHQp'@;
put 'OktmKGUsdCl9KHZlLnJlYWQoYSxyKSxyKTticmVhaztjYXNlIDk6aWYoblsxXTw9OClyZXR1cm4gS2YoYSxyKTticmVhaztjYXNlIDYwOnJldHVybiBVbihhLHIpO2Nhc2UgNzM6aWYoNzM9PT1uWzFdJiY0Mj09PW5bMl0mJjA9PT1uWzNdKXRocm93IG5ldyBFcnJvcigiVElGRiBJbWFnZSBG'@;
put 'aWxlIGlzIG5vdCBhIHNwcmVhZHNoZWV0Iik7aWYoNjg9PT1uWzFdKXJldHVybiBmdW5jdGlvbiBnaChlLHQpe3ZhciByPXR8fHt9LGE9ISFyLldURjtyLldURj0hMDt0cnl7dmFyIG49ZWYudG9fd29ya2Jvb2soZSxyKTtyZXR1cm4gci5XVEY9YSxufWNhdGNoKGkpe2lmKHIuV1RGPWEsIWku'@;
put 'bWVzc2FnZS5tYXRjaCgvU1lMSyBiYWQgcmVjb3JkIElELykmJmEpdGhyb3cgaTtyZXR1cm4gY2EudG9fd29ya2Jvb2soZSx0KX19KGEscik7YnJlYWs7Y2FzZSA4NDppZig2NT09PW5bMV0mJjY2PT09blsyXSYmNzY9PT1uWzNdKXJldHVybiByZi50b193b3JrYm9vayhhLHIpO2JyZWFrO2Nh'@;
put 'c2UgODA6cmV0dXJuIDc1PT09blsxXSYmblsyXTw5JiZuWzNdPDk/ZnVuY3Rpb24gbmcoZSx0KXt2YXIgYT1lLG49dHx8e307cmV0dXJuIG4udHlwZXx8KG4udHlwZT1TZSYmQnVmZmVyLmlzQnVmZmVyKGUpPyJidWZmZXIiOiJiYXNlNjQiKSxRbShSaShhLG4pLG4pfShhLHIpOlluKGUsYSxy'@;
put 'LGkpO2Nhc2UgMjM5OnJldHVybiA2MD09PW5bM10/VW4oYSxyKTpZbihlLGEscixpKTtjYXNlIDI1NTppZigyNTQ9PT1uWzFdKXJldHVybiBmdW5jdGlvbiBzZyhlLHQpe3ZhciByPWU7cmV0dXJuImJhc2U2NCI9PXQudHlwZSYmKHI9T3IocikpLHI9T2UudXRpbHMuZGVjb2RlKDEyMDAsci5z'@;
put 'bGljZSgyKSwic3RyIiksdC50eXBlPSJiaW5hcnkiLHZjKHIsdCl9KGEscik7aWYoMD09PW5bMV0mJjI9PT1uWzJdJiYwPT09blszXSlyZXR1cm4ganQudG9fd29ya2Jvb2soYSxyKTticmVhaztjYXNlIDA6aWYoMD09PW5bMV0mJihuWzJdPj0yJiYwPT09blszXXx8MD09PW5bMl0mJig4PT09'@;
put 'blszXXx8OT09PW5bM10pKSlyZXR1cm4ganQudG9fd29ya2Jvb2soYSxyKTticmVhaztjYXNlIDM6Y2FzZSAxMzE6Y2FzZSAxMzk6Y2FzZSAxNDA6cmV0dXJuIFRuLnRvX3dvcmtib29rKGEscik7Y2FzZSAxMjM6aWYoOTI9PT1uWzFdJiYxMTQ9PT1uWzJdJiYxMTY9PT1uWzNdKXJldHVybiBv'@;
put 'Zi50b193b3JrYm9vayhhLHIpO2JyZWFrO2Nhc2UgMTA6Y2FzZSAxMzpjYXNlIDMyOnJldHVybiBmdW5jdGlvbiBpZyhlLHQpe3ZhciByPSIiLGE9S24oZSx0KTtzd2l0Y2godC50eXBlKXtjYXNlImJhc2U2NCI6cj1PcihlKTticmVhaztjYXNlImJpbmFyeSI6cj1lO2JyZWFrO2Nhc2UiYnVm'@;
put 'ZmVyIjpyPWUudG9TdHJpbmcoImJpbmFyeSIpO2JyZWFrO2Nhc2UiYXJyYXkiOnI9UHQoZSk7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlVucmVjb2duaXplZCB0eXBlICIrdC50eXBlKX1yZXR1cm4gMjM5PT1hWzBdJiYxODc9PWFbMV0mJjE5MT09YVsyXSYmKHI9QmUocikpLHQu'@;
put 'dHlwZT0iYmluYXJ5Iix2YyhyLHQpfShhLHIpO2Nhc2UgMTM3OmlmKDgwPT09blsxXSYmNzg9PT1uWzJdJiY3MT09PW5bM10pdGhyb3cgbmV3IEVycm9yKCJQTkcgSW1hZ2UgRmlsZSBpcyBub3QgYSBzcHJlYWRzaGVldCIpfXJldHVybiBtaC5pbmRleE9mKG5bMF0pPi0xJiZuWzJdPD0xMiYm'@;
put 'blszXTw9MzE/VG4udG9fd29ya2Jvb2soYSxyKTpZbihlLGEscixpKX1mdW5jdGlvbiBfYyhlLHQscixhLG4saSxzLGYpe3ZhciBjPUtlKHIpLG89Zi5kZWZ2YWwsbD1mLnJhd3x8IU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChmLCJyYXciKSxoPSEwLHg9MT09PW4/W106'@;
put 'e307aWYoMSE9PW4paWYoT2JqZWN0LmRlZmluZVByb3BlcnR5KXRyeXtPYmplY3QuZGVmaW5lUHJvcGVydHkoeCwiX19yb3dOdW1fXyIse3ZhbHVlOnIsZW51bWVyYWJsZTohMX0pfWNhdGNoe3guX19yb3dOdW1fXz1yfWVsc2UgeC5fX3Jvd051bV9fPXI7aWYoIXN8fGVbcl0pZm9yKHZhciBk'@;
put 'PXQucy5jO2Q8PXQuZS5jOysrZCl7dmFyIHY9cz9lW3JdW2RdOmVbYVtkXStjXTtpZih2b2lkIDAhPT12JiZ2b2lkIDAhPT12LnQpe3ZhciB1PXYudjtzd2l0Y2godi50KXtjYXNlInoiOmlmKG51bGw9PXUpYnJlYWs7Y29udGludWU7Y2FzZSJlIjp1PTA9PXU/bnVsbDp2b2lkIDA7YnJlYWs7'@;
put 'Y2FzZSJzIjpjYXNlImQiOmNhc2UiYiI6Y2FzZSJuIjpicmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigidW5yZWNvZ25pemVkIHR5cGUgIit2LnQpfWlmKG51bGwhPWlbZF0pe2lmKG51bGw9PXUpaWYoImUiPT12LnQmJm51bGw9PT11KXhbaVtkXV09bnVsbDtlbHNlIGlmKHZvaWQgMCE9'@;
put 'PW8peFtpW2RdXT1vO2Vsc2V7aWYoIWx8fG51bGwhPT11KWNvbnRpbnVlO3hbaVtkXV09bnVsbH1lbHNlIHhbaVtkXV09bCYmKCJuIiE9PXYudHx8Im4iPT09di50JiYhMSE9PWYucmF3TnVtYmVycyk/dTphdCh2LHUsZik7bnVsbCE9dSYmKGg9ITEpfX1lbHNle2lmKHZvaWQgMD09PW8pY29u'@;
put 'dGludWU7bnVsbCE9aVtkXSYmKHhbaVtkXV09byl9fXJldHVybntyb3c6eCxpc2VtcHR5Omh9fWZ1bmN0aW9uIGVpKGUsdCxyLGEpe3ZhciBuPTE7aWYoIXIpZm9yKDtuPD02NTUzNSYmLTEhPWUuU2hlZXROYW1lcy5pbmRleE9mKHI9IlNoZWV0IituKTsrK24scj12b2lkIDApO2lmKCFyfHxl'@;
put 'LlNoZWV0TmFtZXMubGVuZ3RoPj02NTUzNSl0aHJvdyBuZXcgRXJyb3IoIlRvbyBtYW55IHdvcmtzaGVldHMiKTtpZihhJiZlLlNoZWV0TmFtZXMuaW5kZXhPZihyKT49MCl7dmFyIGk9ci5tYXRjaCgvKF4uKj8pKFxkKykkLyk7bj1pJiYraVsyXXx8MDt2YXIgcz1pJiZpWzFdfHxyO2Zvcigr'@;
put 'K247bjw9NjU1MzUmJi0xIT1lLlNoZWV0TmFtZXMuaW5kZXhPZihyPXMrbik7KytuKTt9aWYoZnVuY3Rpb24gVmYoZSx0KXtpZihlLmxlbmd0aD4zMSl7aWYodClyZXR1cm4hMTt0aHJvdyBuZXcgRXJyb3IoIlNoZWV0IG5hbWVzIGNhbm5vdCBleGNlZWQgMzEgY2hhcnMiKX12YXIgcj0hMDty'@;
put 'ZXR1cm4gZnAuZm9yRWFjaChmdW5jdGlvbihhKXtpZigtMSE9ZS5pbmRleE9mKGEpKXtpZighdCl0aHJvdyBuZXcgRXJyb3IoIlNoZWV0IG5hbWUgY2Fubm90IGNvbnRhaW4gOiBcXCAvID8gKiBbIF0iKTtyPSExfX0pLHJ9KHIpLGUuU2hlZXROYW1lcy5pbmRleE9mKHIpPj0wKXRocm93IG5l'@;
put 'dyBFcnJvcigiV29ya3NoZWV0IHdpdGggbmFtZSB8IityKyJ8IGFscmVhZHkgZXhpc3RzISIpO3JldHVybiBlLlNoZWV0TmFtZXMucHVzaChyKSxlLlNoZWV0c1tyXT10LHJ9YWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsKHtkYXRhOmV9KT0+e2NvbnN0e2RhdGE6dCxvcHRzOnJ9PWU7dHJ5'@;
put 'e2NvbnN0IGE9STAodCxyKTtwb3N0TWVzc2FnZSh7ZXZlbnQ6InJlYWRpbmdfZW5kIix3b3JrYm9vazphfSl9Y2F0Y2goYSl7YS5tZXNzYWdlLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoInBhc3N3b3JkIikmJnBvc3RNZXNzYWdlKHtlcnJvcjphfSl9fSl9KSgpOw==';
run;
%mv_createfile(path=&appLoc/&path, name=&filename, inref=filecode, intype=BASE64,swap=compiled_apploc apploc)
filename filecode clear;
%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+CjxodG1sIGxhbmc9ImVuIj4KICA8aGVhZD4KICAgIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ii8+CiAgICA8dGl0bGU+RGF0YSBDb250cm9sbGVyPC90aXRsZT4KICAgIDwhLS0gPGJhc2UgaHJlZj0iLyI+IC0tPgoKICAgIDwhLS0gbWV0YSB0YWdzIC0tPgogICAgPG1l'@;
put 'dGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IkNhcHR1cmUsIFJldmlldywgYW5kIEFwcHJvdmUiLz4KICAgIDxtZXRhIGl0ZW1wcm9wPSJuYW1lIiBjb250ZW50PSJEYXRhIENvbnRyb2xsZXIgZm9yIFNBU8KuIi8+CiAgICA8bWV0YSBpdGVtcHJvcD0iZGVzY3JpcHRpb24iIGNvbnRl'@;
put 'bnQ9IkNhcHR1cmUsIFJldmlldywgYW5kIEFwcHJvdmUiLz4KICAgIDxtZXRhIGl0ZW1wcm9wPSJpbWFnZSIgY29udGVudD0iaHR0cHM6Ly9kb2NzLmRhdGFjb250cm9sbGVyLmlvL2ltZy9kY19iZ19Bc3NldC01QDJ4LnBuZyIvPgogICAgPG1ldGEgcHJvcGVydHk9Im9nOnVybCIgY29udGVu'@;
put 'dD0iaHR0cDovL2RlbW8uZGF0YWNvbnRyb2xsZXIuaW8iLz4KICAgIDxtZXRhIHByb3BlcnR5PSJvZzp0eXBlIiBjb250ZW50PSJ3ZWJzaXRlIi8+CiAgICA8bWV0YSBwcm9wZXJ0eT0ib2c6dGl0bGUiIGNvbnRlbnQ9IkRhdGEgQ29udHJvbGxlciBmb3IgU0FTwq4iLz4KICAgIDxtZXRhIHBy'@;
put 'b3BlcnR5PSJvZzpkZXNjcmlwdGlvbiIgY29udGVudD0iQ2FwdHVyZSwgUmV2aWV3LCBhbmQgQXBwcm92ZSIvPgogICAgPG1ldGEgcHJvcGVydHk9Im9nOmltYWdlIiBjb250ZW50PSJodHRwczovL2RvY3MuZGF0YWNvbnRyb2xsZXIuaW8vaW1nL2RjX2JnX0Fzc2V0LTVAMngucG5nIi8+Cgog'@;
put 'ICAgPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xIi8+CiAgICA8bWV0YSBodHRwLWVxdWl2PSJYLVVBLUNvbXBhdGlibGUiIGNvbnRlbnQ9IklFPWVkZ2UiLz4KICAgIDxsaW5rIHJlbD0iaWNvbiIgdHlwZT0iaW1hZ2Uv'@;
put 'eC1pY29uIiBocmVmPSJpbWFnZXMvZmF2aWNvbi5pY28iLz4KICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlcy5lNDU4NTQ2ODE5MzRlOTg2LmNzcyI+PC9oZWFkPgoKICA8IS0tCiAgICAjIyBTQVNKUyBBZGFwdGVyIGNvbmZpZyBkZXRhaWxzICMjCgogICAgKiBhcHBMb2M6'@;
put 'IFRoZSBsb2NhdGlvbiBpbiBtZXRhZGF0YSBvciBTQVMgZHJpdmUgd2hlcmUgREMgd2lsbCBiZSBkZXBsb3llZAogICAgKiBzZXJ2ZXJUeXBlOiBlaXRoZXIgU0FTOSwgU0FTVklZQSBvciBTQVNKUwogICAgKiBsb2dpbk1lY2hhbmlzbTogVXNlICdEZWZhdWx0JyBmb3IgcmVndWxhciAodXNl'@;
put 'ci9wYXNzKSBsb2dpbnMsIG9yICdSZWRpcmVjdGVkJyBmb3IgMkZBL1NTTwogICAgKiBkZWJ1ZzogV2hldGhlciB0byBlbmFibGUgZGVidWcgb24gc3RhcnR1cAoKICAgICMjIFZpeWEgb25seSBzZXR0aW5ncyAjIwogICAgKiBhZG1pbkdyb3VwOiBUaGlzIGdyb3VwIHdpbGwgaGF2ZSB1bnJl'@;
put 'c3RyaWN0ZWQgYWNjZXNzIChWaXlhIE9ubHkpCiAgICAqIGRjUGF0aDogVGhlIHBoeXNpY2FsIGxvY2F0aW9uIGluIHdoaWNoIHRvIGRlcGxveSB0aGUgc3RhZ2luZyBhcmVhIChWaXlhIG9ubHkpCiAgICAqIHVzZUNvbXB1dGVBcGk6IENvbm5lY3Rpb24gbWV0aG9kIChWaXlhIG9ubHkpCiAg'@;
put 'ICAqIGNvbnRleHROYW1lOiBDb21wdXRlIENvbnRleHQgKFZpeWEgb25seSkKCiAgLS0+CgogIDxzYXNqcyBzZXJ2ZXJ1cmw9IiIgYXBwbG9jPSIvUHVibGljL2FwcC9kYyIgc2VydmVydHlwZT0iU0FTSlMiIGxvZ2lubWVjaGFuaXNtPSJSZWRpcmVjdGVkIiBkZWJ1Zz0iZmFsc2UiIHVzZWNv'@;
put 'bXB1dGVhcGk9InRydWUiIGNvbnRleHRuYW1lPSJTQVMgSm9iIEV4ZWN1dGlvbiBjb21wdXRlIGNvbnRleHQiIGFkbWluZ3JvdXA9IlNBU0FkbWluaXN0cmF0b3JzIiBkY3BhdGg9Ii90bXAvZGMiIGhvdGxpY2VuY2VrZXk9Im5vbi1jb21tZXJjaWFsLWFuZC1ldmFsdWF0aW9uIj4KICA8L3Nh'@;
put 'c2pzPgoKICA8Ym9keSBjZHMtdGhlbWU9ImxpZ2h0IiBjbGFzcz0ibS0wIj4KICAgIDxteS1hcHA+PC9teS1hcHA+CiAgPHNjcmlwdCBzcmM9InJ1bnRpbWUuNDAyZmMzY2ZiYzdlMWJkNC5qcyIgdHlwZT0ibW9kdWxlIj48L3NjcmlwdD48c2NyaXB0IHNyYz0icG9seWZpbGxzLmRmMjdhMjQ2'@;
put 'NTQwZWE1ZWUuanMiIHR5cGU9Im1vZHVsZSI+PC9zY3JpcHQ+PHNjcmlwdCBzcmM9InNjcmlwdHMuZjQxOGQ3ZTcxZGJmZDMwOS5qcyIgZGVmZXI+PC9zY3JpcHQ+PHNjcmlwdCBzcmM9Im1haW4uYmM5NzdmMjc5Yjk4OWI4MC5qcyIgdHlwZT0ibW9kdWxlIj48L3NjcmlwdD48L2JvZHk+Cjwv'@;
put 'aHRtbD4K';
run;
%mv_createfile(path=&appLoc/&path, name=&filename, inref=filecode, intype=BASE64,swap=compiled_apploc apploc)
filename filecode clear;
%let filename=main.bc977f279b989b80.js;
filename filecode temp lrecl=11993296;
data _null_;
file filecode;
put 'KHNlbGYud2VicGFja0NodW5rZGF0YWNvbnRyb2xsZXI9c2VsZi53ZWJwYWNrQ2h1bmtkYXRhY29udHJvbGxlcnx8W10pLnB1c2goW1s3OTJdLHszNzQ4MjpmdW5jdGlvbih1ZSl7dWUuZXhwb3J0cz1mdW5jdGlvbihYKXt2YXIgeT17fTtmdW5jdGlvbiBJKF8pe2lmKHlbX10pcmV0dXJuIHlb'@;
put 'X10uZXhwb3J0czt2YXIgZz15W19dPXtpOl8sbDohMSxleHBvcnRzOnt9fTtyZXR1cm4gWFtfXS5jYWxsKGcuZXhwb3J0cyxnLGcuZXhwb3J0cyxJKSxnLmw9ITAsZy5leHBvcnRzfXJldHVybiBJLm09WCxJLmM9eSxJLmQ9ZnVuY3Rpb24oXyxnLEIpe0kubyhfLGcpfHxPYmplY3QuZGVmaW5l'@;
put 'UHJvcGVydHkoXyxnLHtlbnVtZXJhYmxlOiEwLGdldDpCfSl9LEkucj1mdW5jdGlvbihfKXt0eXBlb2YgU3ltYm9sPCJ1IiYmU3ltYm9sLnRvU3RyaW5nVGFnJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoXyxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOiJNb2R1bGUifSksT2JqZWN0LmRlZmlu'@;
put 'ZVByb3BlcnR5KF8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSxJLnQ9ZnVuY3Rpb24oXyxnKXtpZigxJmcmJihfPUkoXykpLDgmZ3x8NCZnJiYib2JqZWN0Ij09dHlwZW9mIF8mJl8mJl8uX19lc01vZHVsZSlyZXR1cm4gXzt2YXIgQj1PYmplY3QuY3JlYXRlKG51bGwpO2lmKEkucihCKSxP'@;
put 'YmplY3QuZGVmaW5lUHJvcGVydHkoQiwiZGVmYXVsdCIse2VudW1lcmFibGU6ITAsdmFsdWU6X30pLDImZyYmInN0cmluZyIhPXR5cGVvZiBfKWZvcih2YXIgdyBpbiBfKUkuZChCLHcsZnVuY3Rpb24oUCl7cmV0dXJuIF9bUF19LmJpbmQobnVsbCx3KSk7cmV0dXJuIEJ9LEkubj1mdW5jdGlv'@;
put 'bihfKXt2YXIgZz1fJiZfLl9fZXNNb2R1bGU/ZnVuY3Rpb24oKXtyZXR1cm4gXy5kZWZhdWx0fTpmdW5jdGlvbigpe3JldHVybiBffTtyZXR1cm4gSS5kKGcsImEiLGcpLGd9LEkubz1mdW5jdGlvbihfLGcpe3JldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoXyxn'@;
put 'KX0sSS5wPSIiLEkoSS5zPSIuL3Byb2plY3RzL2ljb25zL3NyYy9pbmRleC50cyIpfSh7Ii4vcHJvamVjdHMvaWNvbnMvc3JjL2Nsci1pY29ucy1hcGkudHMiOgovKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKICAgICAgICAgICAgICAgICAgISoq'@;
put 'KiAuL3Byb2plY3RzL2ljb25zL3NyYy9jbHItaWNvbnMtYXBpLnRzICoqKiEKICAgICAgICAgICAgICAgICAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLyohIG5vIHN0YXRpYyBleHBvcnRzIGZvdW5kICovZnVuY3Rpb24oWCx5LEkpeyJ1c2Ugc3Ry'@;
put 'aWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoeSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSkseS5DbGFyaXR5SWNvbnNBcGk9dm9pZCAwO3ZhciBfPUkoCi8qISAuL3V0aWxzL3NoYXBlLXRlbXBsYXRlLW9ic2VydmVyICovCiIuL3Byb2plY3RzL2ljb25zL3NyYy91dGlscy9zaGFwZS10ZW1w'@;
put 'bGF0ZS1vYnNlcnZlci50cyIpLGc9e30sQj1mdW5jdGlvbigpe2Z1bmN0aW9uIHcoKXt9cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh3LCJpbnN0YW5jZSIse2dldDpmdW5jdGlvbigpe3JldHVybiB3LnNpbmdsZUluc3RhbmNlfHwody5zaW5nbGVJbnN0YW5jZT1uZXcgdyksdy5zaW5n'@;
put 'bGVJbnN0YW5jZX0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSx3LnByb3RvdHlwZS52YWxpZGF0ZU5hbWU9ZnVuY3Rpb24oUCl7aWYoMD09PVAubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiU2hhcGUgbmFtZSBvciBhbGlhcyBtdXN0IGJlIGEgbm9uLWVtcHR5IHN0cmluZyEiKTtp'@;
put 'ZigvXHMvLnRlc3QoUCkpdGhyb3cgbmV3IEVycm9yKCJTaGFwZSBuYW1lIG9yIGFsaWFzIG11c3Qgbm90IGNvbnRhaW4gYW55IHdoaXRlc3BhY2UgY2hhcmFjdGVycyEiKTtyZXR1cm4hMH0sdy5wcm90b3R5cGUubm9ybWFsaXplU2hhcGVOYW1lPWZ1bmN0aW9uKFApe3JldHVybiBQLnRvTG93'@;
put 'ZXJDYXNlKCl9LHcucHJvdG90eXBlLnNldEljb25UZW1wbGF0ZT1mdW5jdGlvbihQLEYpe3ZhciBPPUYudHJpbSgpO3RoaXMudmFsaWRhdGVOYW1lKFApJiYoUD10aGlzLm5vcm1hbGl6ZVNoYXBlTmFtZShQKSxnW1BdJiZkZWxldGUgZ1tQXSxnW1BdPU8sXy5TaGFwZVRlbXBsYXRlT2JzZXJ2'@;
put 'ZXIuaW5zdGFuY2UuZW1pdENoYW5nZXMoUCxPKSl9LHcucHJvdG90eXBlLnNldEljb25BbGlhc2VzPWZ1bmN0aW9uKFAsRixPKXtmb3IodmFyIHo9MCxOPU87ejxOLmxlbmd0aDt6Kyspe3ZhciBMPU5bel07dGhpcy52YWxpZGF0ZU5hbWUoTCkmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShQLEws'@;
put 'e2dldDpmdW5jdGlvbigpe3JldHVybiBQW0ZdfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pfX0sdy5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKFApe2lmKCJvYmplY3QiIT10eXBlb2YgUCl0aHJvdyBuZXcgRXJyb3IoJ1RoZSBhcmd1bWVudCBtdXN0IGJlIGFuIG9iamVjdCBsaXRl'@;
put 'cmFsIHBhc3NlZCBpbiB0aGUgZm9sbG93aW5nIHBhdHRlcm46XG4gICAgICAgICAgICAgICAgeyAic2hhcGUtbmFtZSI6ICJzaGFwZS10ZW1wbGF0ZSIgfScpO2Zvcih2YXIgRiBpbiBQKVAuaGFzT3duUHJvcGVydHkoRikmJnRoaXMuc2V0SWNvblRlbXBsYXRlKEYsUFtGXSl9LHcucHJvdG90'@;
put 'eXBlLmhhcz1mdW5jdGlvbihQKXtyZXR1cm4hIWdbdGhpcy5ub3JtYWxpemVTaGFwZU5hbWUoUCldfSx3LnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oUCl7aWYoIVApcmV0dXJuIGc7aWYoInN0cmluZyIhPXR5cGVvZiBQKXRocm93IG5ldyBUeXBlRXJyb3IoIk9ubHkgc3RyaW5nIGFyZ3VtZW50'@;
put 'IGlzIGFsbG93ZWQgaW4gdGhpcyBtZXRob2QuIik7cmV0dXJuIGdbdGhpcy5ub3JtYWxpemVTaGFwZU5hbWUoUCldfSx3LnByb3RvdHlwZS5hbGlhcz1mdW5jdGlvbihQKXtpZigib2JqZWN0IiE9dHlwZW9mIFApdGhyb3cgbmV3IEVycm9yKCdUaGUgYXJndW1lbnQgbXVzdCBiZSBhbiBvYmpl'@;
put 'Y3QgbGl0ZXJhbCBwYXNzZWQgaW4gdGhlIGZvbGxvd2luZyBwYXR0ZXJuOlxuICAgICAgICAgICAgICAgIHsgInNoYXBlLW5hbWUiOiBbImFsaWFzLW5hbWUiLCAuLi5dIH0nKTtmb3IodmFyIEYgaW4gUClpZihQLmhhc093blByb3BlcnR5KEYpKXtpZighZy5oYXNPd25Qcm9wZXJ0eShGKSl0'@;
put 'aHJvdyBuZXcgRXJyb3IoJ0FuIGljb24gIicrRisiXCIgeW91IGFyZSB0cnlpbmcgdG8gc2V0IGFsaWFzZXMgdG8gZG9lc24ndCBleGlzdCBpbiB0aGUgQ2xhcml0eSBJY29ucyBzZXRzISIpO3RoaXMuc2V0SWNvbkFsaWFzZXMoZyxGLFBbRl0pfX0sd30oKTt5LkNsYXJpdHlJY29uc0FwaT1C'@;
put 'fSwiLi9wcm9qZWN0cy9pY29ucy9zcmMvY2xyLWljb25zLWVsZW1lbnQudHMiOgovKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCiAgICAgICAgICAgICAgICAgICEqKiogLi9wcm9qZWN0cy9pY29ucy9zcmMvY2xyLWljb25zLWVsZW1lbnQu'@;
put 'dHMgKioqIQogICAgICAgICAgICAgICAgICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLyohIG5vIHN0YXRpYyBleHBvcnRzIGZvdW5kICovZnVuY3Rpb24oWCx5LEkpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoeSwiX19l'@;
put 'c01vZHVsZSIse3ZhbHVlOiEwfSkseS5DbGFyaXR5SWNvbkVsZW1lbnQ9dm9pZCAwO3ZhciBfPUkoCi8qISAuL2Nsci1pY29ucy1hcGkgKi8KIi4vcHJvamVjdHMvaWNvbnMvc3JjL2Nsci1pY29ucy1hcGkudHMiKSxnPUkoCi8qISAuL3V0aWxzL3NoYXBlLXRlbXBsYXRlLW9ic2VydmVyICov'@;
put 'CiIuL3Byb2plY3RzL2ljb25zL3NyYy91dGlscy9zaGFwZS10ZW1wbGF0ZS1vYnNlcnZlci50cyIpLEI9MCx3PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTt3LmNsYXNzTmFtZT0iaXMtb2ZmLXNjcmVlbiI7dmFyIFA9ZnVuY3Rpb24oKXtyZXR1cm4gSFRNTEVsZW1lbnQuYXBwbHko'@;
put 'dGhpcyxhcmd1bWVudHMpfTtmdW5jdGlvbiBGKCl7dmFyIE89UC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIE8uY2xySWNvblVuaXFJZD0iX2Nscl9pY29uXyIrQixCKyssT30ib2JqZWN0Ij09dHlwZW9mIFJlZmxlY3QmJihQPWZ1bmN0aW9uKCl7cmV0dXJuIFJlZmxlY3QuY29uc3Ry'@;
put 'dWN0KEhUTUxFbGVtZW50LGFyZ3VtZW50cyx0aGlzLmNvbnN0cnVjdG9yKX0pLHkuQ2xhcml0eUljb25FbGVtZW50PUYsRi5vYnNlcnZlZEF0dHJpYnV0ZXM9WyJzaGFwZSIsInNpemUiLCJ0aXRsZSJdLChGLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKEhUTUxFbGVtZW50LnByb3RvdHlwZSx7'@;
put 'Y29uc3RydWN0b3I6e2NvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTpGfX0pKS5jb25zdHJ1Y3Rvcj1GLEYucHJvdG90eXBlLl9hcHBlbmRDdXN0b21UaXRsZT1mdW5jdGlvbigpe3ZhciBPPXcuY2xvbmVOb2RlKCExKTtPLmlkPXRoaXMuY2xySWNvblVuaXFJZCxPLnRleHRDb250'@;
put 'ZW50PXRoaXMuY3VycmVudFRpdGxlQXR0clZhbCx0aGlzLmFwcGVuZENoaWxkKE8pfSxGLnByb3RvdHlwZS5fc2V0SWNvblNpemU9ZnVuY3Rpb24oTyl7IU51bWJlcihPKXx8TnVtYmVyKE8pPDA/KHRoaXMuc3R5bGUud2lkdGg9bnVsbCx0aGlzLnN0eWxlLmhlaWdodD1udWxsKToodGhpcy5z'@;
put 'dHlsZS53aWR0aD1PKyJweCIsdGhpcy5zdHlsZS5oZWlnaHQ9TysicHgiKX0sRi5wcm90b3R5cGUuX25vcm1hbGl6ZVNoYXBlPWZ1bmN0aW9uKE8pe3JldHVybiBPLnNwbGl0KC9ccy8pWzBdLnRvTG93ZXJDYXNlKCl9LEYucHJvdG90eXBlLmNvbm5lY3RlZENhbGxiYWNrPWZ1bmN0aW9uKCl7'@;
put 'dmFyIE89dGhpcztpZih0aGlzLmdldEF0dHJpYnV0ZSgicm9sZSIpfHx0aGlzLnNldEF0dHJpYnV0ZSgicm9sZSIsIm5vbmUiKSx0aGlzLmhhc0F0dHJpYnV0ZSgic2l6ZSIpKXt2YXIgej10aGlzLmdldEF0dHJpYnV0ZSgic2l6ZSIpO3RoaXMuY3VycmVudFNpemVBdHRyVmFsIT09eiYmKHRo'@;
put 'aXMuY3VycmVudFNpemVBdHRyVmFsPXosdGhpcy5fc2V0SWNvblNpemUoeikpfWlmKHRoaXMuaGFzQXR0cmlidXRlKCJzaGFwZSIpKXt2YXIgTj10aGlzLl9ub3JtYWxpemVTaGFwZSh0aGlzLmdldEF0dHJpYnV0ZSgic2hhcGUiKSk7aWYodGhpcy5fc2hhcGVUZW1wbGF0ZVN1YnNjcmlwdGlv'@;
put 'bj1nLlNoYXBlVGVtcGxhdGVPYnNlcnZlci5pbnN0YW5jZS5zdWJzY3JpYmVUbyhOLGZ1bmN0aW9uKFUpe08uX2luamVjdFRlbXBsYXRlKFUpfSksdGhpcy5jdXJyZW50U2hhcGVBdHRyVmFsPU4sIV8uQ2xhcml0eUljb25zQXBpLmluc3RhbmNlLmhhcyh0aGlzLmN1cnJlbnRTaGFwZUF0dHJW'@;
put 'YWwpKXJldHVybiB2b2lkIHRoaXMuX2luamVjdEVycm9yVGVtcGxhdGUoKTt2YXIgTD1fLkNsYXJpdHlJY29uc0FwaS5pbnN0YW5jZS5nZXQodGhpcy5jdXJyZW50U2hhcGVBdHRyVmFsKTtpZihMPT09dGhpcy5jdXJyZW50U2hhcGVUZW1wbGF0ZSlyZXR1cm47dGhpcy5jdXJyZW50U2hhcGVU'@;
put 'ZW1wbGF0ZT1MfWlmKHRoaXMuaGFzQXR0cmlidXRlKCJ0aXRsZSIpKXt2YXIgSz10aGlzLmdldEF0dHJpYnV0ZSgidGl0bGUiKTtpZih0aGlzLmN1cnJlbnRUaXRsZUF0dHJWYWwhPT1LJiYodGhpcy5jdXJyZW50VGl0bGVBdHRyVmFsPUspLCF0aGlzLmN1cnJlbnRTaGFwZUF0dHJWYWwpcmV0'@;
put 'dXJufXRoaXMuX2luamVjdFRlbXBsYXRlKCl9LEYucHJvdG90eXBlLmF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjaz1mdW5jdGlvbihPLHosTil7dmFyIEw9dGhpcztpZigic2l6ZSI9PT1PJiZ0aGlzLl9zZXRJY29uU2l6ZShOKSwic2hhcGUiPT09Tyl7aWYodGhpcy5jdXJyZW50U2hhcGVBdHRy'@;
put 'VmFsPXRoaXMuX25vcm1hbGl6ZVNoYXBlKE4pLHRoaXMuX3NoYXBlVGVtcGxhdGVTdWJzY3JpcHRpb24mJih0aGlzLl9zaGFwZVRlbXBsYXRlU3Vic2NyaXB0aW9uKCksdGhpcy5fc2hhcGVUZW1wbGF0ZVN1YnNjcmlwdGlvbj1nLlNoYXBlVGVtcGxhdGVPYnNlcnZlci5pbnN0YW5jZS5zdWJz'@;
put 'Y3JpYmVUbyh0aGlzLmN1cnJlbnRTaGFwZUF0dHJWYWwsZnVuY3Rpb24oSyl7TC5faW5qZWN0VGVtcGxhdGUoSyl9KSksIV8uQ2xhcml0eUljb25zQXBpLmluc3RhbmNlLmhhcyh0aGlzLmN1cnJlbnRTaGFwZUF0dHJWYWwpKXJldHVybiB2b2lkIHRoaXMuX2luamVjdEVycm9yVGVtcGxhdGUo'@;
put 'KTt0aGlzLmN1cnJlbnRTaGFwZVRlbXBsYXRlPV8uQ2xhcml0eUljb25zQXBpLmluc3RhbmNlLmdldCh0aGlzLmN1cnJlbnRTaGFwZUF0dHJWYWwpfSJ0aXRsZSI9PT1PJiYodGhpcy5jdXJyZW50VGl0bGVBdHRyVmFsPU4sIXRoaXMuY3VycmVudFNoYXBlQXR0clZhbCl8fHRoaXMuX2luamVj'@;
put 'dFRlbXBsYXRlKCl9LEYucHJvdG90eXBlLmRpc2Nvbm5lY3RlZENhbGxiYWNrPWZ1bmN0aW9uKCl7dGhpcy5fc2hhcGVUZW1wbGF0ZVN1YnNjcmlwdGlvbiYmdGhpcy5fc2hhcGVUZW1wbGF0ZVN1YnNjcmlwdGlvbigpfSxGLnByb3RvdHlwZS5fc2V0QXJpYUxhYmVsbGVkQnk9ZnVuY3Rpb24o'@;
put 'KXt2YXIgTz10aGlzLmdldEF0dHJpYnV0ZSgiYXJpYS1sYWJlbGxlZGJ5IiksTj10aGlzLnF1ZXJ5U2VsZWN0b3IoInN2ZyIpfHx0aGlzO08/TyYmTy5pbmRleE9mKHRoaXMuY2xySWNvblVuaXFJZCk8MCYmTi5zZXRBdHRyaWJ1dGUoImFyaWEtbGFiZWxsZWRieSIsTysiICIrdGhpcy5jbHJJ'@;
put 'Y29uVW5pcUlkKTpOLnNldEF0dHJpYnV0ZSgiYXJpYS1sYWJlbGxlZGJ5Iix0aGlzLmNsckljb25VbmlxSWQpfSxGLnByb3RvdHlwZS5faW5qZWN0VGVtcGxhdGU9ZnVuY3Rpb24oTyl7TyYmTyE9PXRoaXMuY3VycmVudFNoYXBlVGVtcGxhdGUmJih0aGlzLmN1cnJlbnRTaGFwZVRlbXBsYXRl'@;
put 'PU8pLHRoaXMuaW5uZXJIVE1MPXRoaXMuY3VycmVudFNoYXBlVGVtcGxhdGUsdGhpcy5jdXJyZW50VGl0bGVBdHRyVmFsJiYodGhpcy5fc2V0QXJpYUxhYmVsbGVkQnkoKSx0aGlzLl9hcHBlbmRDdXN0b21UaXRsZSgpKX0sRi5wcm90b3R5cGUuX2luamVjdEVycm9yVGVtcGxhdGU9ZnVuY3Rp'@;
put 'b24oKXt0aGlzLmN1cnJlbnRTaGFwZVRlbXBsYXRlPV8uQ2xhcml0eUljb25zQXBpLmluc3RhbmNlLmdldCgiZXJyb3IiKSx0aGlzLl9pbmplY3RUZW1wbGF0ZSgpfX0sIi4vcHJvamVjdHMvaWNvbnMvc3JjL2luZGV4LnRzIjoKLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq'@;
put 'KioqKiEqXAogICAgICAgICAgICAgICAgICAhKioqIC4vcHJvamVjdHMvaWNvbnMvc3JjL2luZGV4LnRzICoqKiEKICAgICAgICAgICAgICAgICAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi8qISBubyBzdGF0aWMgZXhwb3J0cyBmb3VuZCAqL2Z1bmN0aW9uKFgs'@;
put 'eSxJKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHksIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHkuQ2xhcml0eUljb25zPXZvaWQgMDt2YXIgXz1JKAovKiEgLi9jbHItaWNvbnMtYXBpICovCiIuL3Byb2plY3RzL2ljb25zL3NyYy9jbHItaWNvbnMtYXBpLnRzIiksZz1J'@;
put 'KAovKiEgLi9jbHItaWNvbnMtZWxlbWVudCAqLwoiLi9wcm9qZWN0cy9pY29ucy9zcmMvY2xyLWljb25zLWVsZW1lbnQudHMiKSxCPUkoCi8qISAuL3NoYXBlcy9jb3JlLXNoYXBlcyAqLwoiLi9wcm9qZWN0cy9pY29ucy9zcmMvc2hhcGVzL2NvcmUtc2hhcGVzLnRzIiksdz1fLkNsYXJpdHlJ'@;
put 'Y29uc0FwaS5pbnN0YW5jZTt5LkNsYXJpdHlJY29ucz13LHcuYWRkKEIuQ29yZVNoYXBlcyksdHlwZW9mIHdpbmRvdzwidSImJih3aW5kb3cuaGFzT3duUHJvcGVydHkoIkNsYXJpdHlJY29ucyIpfHwod2luZG93LkNsYXJpdHlJY29ucz13KSxjdXN0b21FbGVtZW50cy5nZXQoImNsci1pY29u'@;
put 'Iil8fGN1c3RvbUVsZW1lbnRzLmRlZmluZSgiY2xyLWljb24iLGcuQ2xhcml0eUljb25FbGVtZW50KSl9LCIuL3Byb2plY3RzL2ljb25zL3NyYy9zaGFwZXMvY29yZS1zaGFwZXMudHMiOgovKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAog'@;
put 'ICAgICAgICAgICAgICAgICAhKioqIC4vcHJvamVjdHMvaWNvbnMvc3JjL3NoYXBlcy9jb3JlLXNoYXBlcy50cyAqKiohCiAgICAgICAgICAgICAgICAgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLyohIG5vIHN0YXRpYyBleHBvcnRzIGZv'@;
put 'dW5kICovZnVuY3Rpb24oWCx5LEkpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoeSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSkseS5Db3JlU2hhcGVzPXkuQ2xyU2hhcGVBcnJvdz15LkNsclNoYXBlU3RlcEZvcndhcmQyPXkuQ2xyU2hhcGVFeWVIaWRlPXkuQ2xyU2hhcGVF'@;
put 'eWU9eS5DbHJTaGFwZUV2ZW50PXkuQ2xyU2hhcGVDYWxlbmRhcj15LkNsclNoYXBlQW5nbGVEb3VibGU9eS5DbHJTaGFwZVZpZXdDb2x1bW5zPXkuQ2xyU2hhcGVTZWFyY2g9eS5DbHJTaGFwZVZtQnVnPXkuQ2xyU2hhcGVGaWx0ZXJHcmlkQ2lyY2xlPXkuQ2xyU2hhcGVGaWx0ZXJHcmlkPXku'@;
put 'Q2xyU2hhcGVFbGxpcHNpc1ZlcnRpY2FsPXkuQ2xyU2hhcGVFbGxpcHNpc0hvcml6b250YWw9eS5DbHJTaGFwZUNsb3VkPXkuQ2xyU2hhcGVJbWFnZT15LkNsclNoYXBlQmVsbD15LkNsclNoYXBlRm9sZGVyT3Blbj15LkNsclNoYXBlRm9sZGVyPXkuQ2xyU2hhcGVBbmdsZT15LkNsclNoYXBl'@;
put 'VXNlcj15LkNsclNoYXBlQmFycz15LkNsclNoYXBlSGVscEluZm89eS5DbHJTaGFwZVdhcm5pbmdTdGFuZGFyZD15LkNsclNoYXBlRXJyb3JTdGFuZGFyZD15LkNsclNoYXBlU3VjY2Vzc1N0YW5kYXJkPXkuQ2xyU2hhcGVJbmZvU3RhbmRhcmQ9eS5DbHJTaGFwZUluZm9DaXJjbGU9eS5DbHJT'@;
put 'aGFwZUNoZWNrQ2lyY2xlPXkuQ2xyU2hhcGVFeGNsYW1hdGlvbkNpcmNsZT15LkNsclNoYXBlRXhjbGFtYXRpb25UcmlhbmdsZT15LkNsclNoYXBlVGltZXM9eS5DbHJTaGFwZUNoZWNrPXkuQ2xyU2hhcGVDb2c9eS5DbHJTaGFwZUhvbWU9eS5DbHJTaGFwZVVua25vd25TdGF0dXM9dm9pZCAw'@;
put 'O3ZhciBfPUkoCi8qISAuLi91dGlscy9kZXNjcmlwdG9yLWNvbmZpZyAqLwoiLi9wcm9qZWN0cy9pY29ucy9zcmMvdXRpbHMvZGVzY3JpcHRvci1jb25maWcudHMiKSxnPUkoCi8qISAuLi91dGlscy9zdmctdGFnLWdlbmVyYXRvciAqLwoiLi9wcm9qZWN0cy9pY29ucy9zcmMvdXRpbHMvc3Zn'@;
put 'LXRhZy1nZW5lcmF0b3IudHMiKTt5LkNsclNoYXBlVW5rbm93blN0YXR1cz0oMCxnLmNsckljb25TVkcpKCc8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBjeD0iMTcuNTgiIGN5PSIyNi4yMyIgcj0iMS40Ii8+XG4gICAgICAgICAgICAgICAgPHBh'@;
put 'dGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0yNC43LDEzYTUuMTgsNS4xOCwwLDAsMC0yLjE2LTMuNTYsNy4yNiw3LjI2LDAsMCwwLTUuNzEtMS4wOUExMS4zNCwxMS4zNCwwLDAsMCwxMiwxMC40NCwxLDEsMCwxLDAsMTMuMjYsMTJhOS4zMiw5LjMy'@;
put 'LDAsMCwxLDMuOTQtMS43Miw1LjI5LDUuMjksMCwwLDEsNC4xNi43NCwzLjIxLDMuMjEsMCwwLDEsMS4zNSwyLjE5Yy4zMywyLjY5LTMuMTksMy43NS01LjMyLDQuMTRsLS44Mi4xNXY0LjM2YTEsMSwwLDAsMCwyLDBWMTkuMTdDMjQuNjEsMTcuNzksMjQuODgsMTQuNDEsMjQuNywxM1oiLz4n'@;
put 'KSx5LkNsclNoYXBlSG9tZT0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMzLjcxLDE3LjI5bC0xNS0xNWExLDEsMCwwLDAtMS40MSwwbC0xNSwxNWExLDEsMCwwLDAsMS40MSwxLjQxTDE4LDQuNDEsMzIuMjks'@;
put 'MTguNzFhMSwxLDAsMCwwLDEuNDEtMS40MVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTI4LDMyaC01VjIySDEzVjMySDhWMThMNiwyMFYzMmEyLDIsMCwwLDAsMiwyaDdWMjRoNlYzNGg3YTIsMiwwLDAs'@;
put 'MCwyLTJWMTkuNzZsLTItMloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzMsMTlhMSwxLDAsMCwxLS43MS0uMjlMMTgsNC40MSwzLjcxLDE4LjcxYTEsMSwwLDAsMS0xLjQxLTEuNDFsMTUtMTVhMSwxLDAsMCwx'@;
put 'LDEuNDEsMGwxNSwxNUExLDEsMCwwLDEsMzMsMTlaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTTE4LDcuNzksNiwxOS44M1YzMmEyLDIsMCwwLDAsMiwyaDdWMjRoNlYzNGg3YTIsMiwwLDAsMCwyLTJWMTkuNzZa'@;
put 'Ii8+JykseS5DbHJTaGFwZUNvZz0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE4LjEsMTFjLTMuOSwwLTcsMy4xLTcsN3MzLjEsNyw3LDdjMy45LDAsNy0zLjEsNy03UzIyLDExLDE4LjEsMTF6IE0xOC4xLDIz'@;
put 'Yy0yLjgsMC01LTIuMi01LTVzMi4yLTUsNS01YzIuOCwwLDUsMi4yLDUsNVMyMC45LDIzLDE4LjEsMjN6Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0zMi44LDE0LjdMMzAsMTMuOGwtMC42LTEuNWwxLjQt'@;
put 'Mi42YzAuMy0wLjYsMC4yLTEuNC0wLjMtMS45bC0yLjQtMi40Yy0wLjUtMC41LTEuMy0wLjYtMS45LTAuM2wtMi42LDEuNGwtMS41LTAuNmwtMC45LTIuOEMyMSwyLjUsMjAuNCwyLDE5LjcsMmgtMy40Yy0wLjcsMC0xLjMsMC41LTEuNCwxLjJMMTQsNmMtMC42LDAuMS0xLjEsMC4zLTEuNiww'@;
put 'LjZMOS44LDUuMkM5LjIsNC45LDguNCw1LDcuOSw1LjVMNS41LDcuOUM1LDguNCw0LjksOS4yLDUuMiw5LjhsMS4zLDIuNWMtMC4yLDAuNS0wLjQsMS4xLTAuNiwxLjZsLTIuOCwwLjlDMi41LDE1LDIsMTUuNiwyLDE2LjN2My40YzAsMC43LDAuNSwxLjMsMS4yLDEuNUw2LDIyLjFsMC42LDEu'@;
put 'NWwtMS40LDIuNmMtMC4zLDAuNi0wLjIsMS40LDAuMywxLjlsMi40LDIuNGMwLjUsMC41LDEuMywwLjYsMS45LDAuM2wyLjYtMS40bDEuNSwwLjZsMC45LDIuOWMwLjIsMC42LDAuOCwxLjEsMS41LDEuMWgzLjRjMC43LDAsMS4zLTAuNSwxLjUtMS4xbDAuOS0yLjlsMS41LTAuNmwyLjYsMS40'@;
put 'YzAuNiwwLjMsMS40LDAuMiwxLjktMC4zbDIuNC0yLjRjMC41LTAuNSwwLjYtMS4zLDAuMy0xLjlsLTEuNC0yLjZsMC42LTEuNWwyLjktMC45YzAuNi0wLjIsMS4xLTAuOCwxLjEtMS41di0zLjRDMzQsMTUuNiwzMy41LDE0LjksMzIuOCwxNC43eiBNMzIsMTkuNGwtMy42LDEuMUwyOC4zLDIx'@;
put 'Yy0wLjMsMC43LTAuNiwxLjQtMC45LDIuMWwtMC4zLDAuNWwxLjgsMy4zbC0yLDJsLTMuMy0xLjhsLTAuNSwwLjNjLTAuNywwLjQtMS40LDAuNy0yLjEsMC45bC0wLjUsMC4xTDE5LjQsMzJoLTIuOGwtMS4xLTMuNkwxNSwyOC4zYy0wLjctMC4zLTEuNC0wLjYtMi4xLTAuOWwtMC41LTAuM2wt'@;
put 'My4zLDEuOGwtMi0ybDEuOC0zLjNsLTAuMy0wLjVjLTAuNC0wLjctMC43LTEuNC0wLjktMi4xbC0wLjEtMC41TDQsMTkuNHYtMi44bDMuNC0xbDAuMi0wLjVjMC4yLTAuOCwwLjUtMS41LDAuOS0yLjJsMC4zLTAuNUw3LjEsOS4xbDItMmwzLjIsMS44bDAuNS0wLjNjMC43LTAuNCwxLjQtMC43'@;
put 'LDIuMi0wLjlsMC41LTAuMkwxNi42LDRoMi44bDEuMSwzLjVMMjEsNy43YzAuNywwLjIsMS40LDAuNSwyLjEsMC45bDAuNSwwLjNsMy4zLTEuOGwyLDJsLTEuOCwzLjNsMC4zLDAuNWMwLjQsMC43LDAuNywxLjQsMC45LDIuMWwwLjEsMC41bDMuNiwxLjFWMTkuNHoiLz5cbiAgICAgICAgICAg'@;
put 'ICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0xMS4xLDE4YzAsMy45LDMuMSw3LDcsN2MzLjksMCw3LTMuMSw3LTdzLTMuMS03LTctN0MxNC4yLDExLDExLjEsMTQuMSwxMS4xLDE4eiBNMjMuMSwxOGMwLDIu'@;
put 'OC0yLjIsNS01LDVjLTIuOCwwLTUtMi4yLTUtNXMyLjItNSw1LTVDMjAuOSwxMywyMy4xLDE1LjIsMjMuMSwxOHoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiIGQ9Ik0zMi44LDE0LjdM'@;
put 'MzAsMTMuOGwtMC4xLTAuM2MtMC44LDAtMS42LTAuMi0yLjQtMC40YzAuMywwLjYsMC42LDEuMywwLjgsMS45bDAuMSwwLjVsMy42LDEuMXYyLjhsLTMuNiwxLjFMMjguMywyMWMtMC4zLDAuNy0wLjYsMS40LTAuOSwyLjFsLTAuMywwLjVsMS44LDMuM2wtMiwybC0zLjMtMS44bC0wLjUsMC4z'@;
put 'Yy0wLjcsMC40LTEuNCwwLjctMi4xLDAuOWwtMC41LDAuMUwxOS40LDMyaC0yLjhsLTEuMS0zLjZMMTUsMjguM2MtMC43LTAuMy0xLjQtMC42LTIuMS0wLjlsLTAuNS0wLjNsLTMuMywxLjhsLTItMmwxLjgtMy4zbC0wLjMtMC41Yy0wLjQtMC43LTAuNy0xLjQtMC45LTIuMWwtMC4xLTAuNUw0'@;
put 'LDE5LjR2LTIuOGwzLjQtMWwwLjItMC41YzAuMi0wLjgsMC41LTEuNSwwLjktMi4ybDAuMy0wLjVMNy4xLDkuMWwyLTJsMy4yLDEuOGwwLjUtMC4zYzAuNy0wLjQsMS40LTAuNywyLjItMC45bDAuNS0wLjJMMTYuNiw0aDIuOGwxLjEsMy41TDIxLDcuN2MwLjcsMC4yLDEuMywwLjUsMS45LDAu'@;
put 'OGMtMC4zLTAuOC0wLjQtMS42LTAuNC0yLjVsLTAuNC0wLjJsLTAuOS0yLjhDMjEsMi41LDIwLjQsMiwxOS43LDJoLTMuNGMtMC43LDAtMS4zLDAuNS0xLjQsMS4yTDE0LDZjLTAuNiwwLjEtMS4xLDAuMy0xLjYsMC42TDkuOCw1LjJDOS4yLDQuOSw4LjQsNSw3LjksNS41TDUuNSw3LjlDNSw4'@;
put 'LjQsNC45LDkuMiw1LjIsOS44bDEuMywyLjVjLTAuMiwwLjUtMC40LDEuMS0wLjYsMS42bC0yLjgsMC45QzIuNSwxNSwyLDE1LjYsMiwxNi4zdjMuNGMwLDAuNywwLjUsMS4zLDEuMiwxLjVMNiwyMi4xbDAuNiwxLjVsLTEuNCwyLjZjLTAuMywwLjYtMC4yLDEuNCwwLjMsMS45bDIuNCwyLjRj'@;
put 'MC41LDAuNSwxLjMsMC42LDEuOSwwLjNsMi42LTEuNGwxLjUsMC42bDAuOSwyLjljMC4yLDAuNiwwLjgsMS4xLDEuNSwxLjFoMy40YzAuNywwLDEuMy0wLjUsMS41LTEuMWwwLjktMi45bDEuNS0wLjZsMi42LDEuNGMwLjYsMC4zLDEuNCwwLjIsMS45LTAuM2wyLjQtMi40YzAuNS0wLjUsMC42'@;
put 'LTEuMywwLjMtMS45bC0xLjQtMi42bDAuNi0xLjVsMi45LTAuOWMwLjYtMC4yLDEuMS0wLjgsMS4xLTEuNXYtMy40QzM0LDE1LjYsMzMuNSwxNC45LDMyLjgsMTQuN3oiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGlu'@;
put 'ZS1wYXRoLTMtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiBkPSJNMzMuNywxNS40aC01LjN2MC4xbDMuNiwx'@;
put 'LjF2Mi44bC0zLjYsMS4xTDI4LjMsMjFjLTAuMywwLjctMC42LDEuNC0wLjksMi4xbC0wLjMsMC41bDEuOCwzLjNsLTIsMmwtMy4zLTEuOGwtMC41LDAuM2MtMC43LDAuNC0xLjQsMC43LTIuMSwwLjlsLTAuNSwwLjFMMTkuNCwzMmgtMi44bC0xLjEtMy42TDE1LDI4LjNjLTAuNy0wLjMtMS40'@;
put 'LTAuNi0yLjEtMC45bC0wLjUtMC4zbC0zLjMsMS44bC0yLTJsMS44LTMuM2wtMC4zLTAuNWMtMC40LTAuNy0wLjctMS40LTAuOS0yLjFsLTAuMS0wLjVMNCwxOS40di0yLjhsMy40LTFsMC4yLTAuNWMwLjItMC44LDAuNS0xLjUsMC45LTIuMmwwLjMtMC41TDcuMSw5LjFsMi0ybDMuMiwxLjhs'@;
put 'MC41LTAuM2MwLjctMC40LDEuNC0wLjcsMi4yLTAuOWwwLjUtMC4yTDE2LjYsNGgyLjhsMS4xLDMuNGwxLjQtMi4zbC0wLjYtMkMyMSwyLjQsMjAuNCwyLDE5LjcsMmgtMy40Yy0wLjcsMC0xLjMsMC41LTEuNCwxLjJMMTQsNmMtMC42LDAuMS0xLjEsMC4zLTEuNiwwLjZMOS44LDUuMkM5LjIs'@;
put 'NC45LDguNCw1LDcuOSw1LjVMNS41LDcuOUM1LDguNCw0LjksOS4yLDUuMiw5LjhsMS4zLDIuNWMtMC4yLDAuNS0wLjQsMS4xLTAuNiwxLjZsLTIuOCwwLjlDMi41LDE1LDIsMTUuNiwyLDE2LjN2My40YzAsMC43LDAuNSwxLjMsMS4yLDEuNUw2LDIyLjFsMC42LDEuNWwtMS40LDIuNmMtMC4z'@;
put 'LDAuNi0wLjIsMS40LDAuMywxLjlsMi40LDIuNGMwLjUsMC41LDEuMywwLjYsMS45LDAuM2wyLjYtMS40bDEuNSwwLjZsMC45LDIuOWMwLjIsMC42LDAuOCwxLjEsMS41LDEuMWgzLjRjMC43LDAsMS4zLTAuNSwxLjUtMS4xbDAuOS0yLjlsMS41LTAuNmwyLjYsMS40YzAuNiwwLjMsMS40LDAu'@;
put 'MiwxLjktMC4zbDIuNC0yLjRjMC41LTAuNSwwLjYtMS4zLDAuMy0xLjlsLTEuNC0yLjZsMC42LTEuNWwyLjktMC45YzAuNi0wLjIsMS4xLTAuOCwxLjEtMS41di0zLjRDMzQsMTYsMzMuOSwxNS43LDMzLjcsMTUuNHoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0'@;
put 'bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIgZD0iTTE4LjEsMjNjLTIuOCwwLTUtMi4yLTUtNXMyLjItNSw1LTVjMC4yLDAsMC41LDAsMC43LDAuMWMtMC4yLTAuNi0wLjMtMS4zLTAuMi0yaC0wLjVjLTMuOSwwLTcsMy4xLTcsN2MwLDMuOSwzLjEsNyw3LDdj'@;
put 'My45LDAsNy0zLjEsNy03YzAtMC45LTAuMi0xLjgtMC41LTIuNmgtMi4yYzAuNSwwLjgsMC43LDEuNiwwLjcsMi41QzIzLjEsMjAuOCwyMC45LDIzLDE4LjEsMjN6Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1w'@;
put 'YXRoLTMtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi45LDEuMUwyMS4xLDExYy0wLjQsMC42LTAuMiwxLjQsMC4zLDEuOGMwLjIsMC4yLDAuNSwwLjIsMC44LDAuMmgxMS41YzAuNywwLDEuMy0wLjUsMS4zLTEuMmMwLTAuMy0wLjEtMC41LTAuMi0wLjhsLTUuNy05LjljLTAuNC0wLjYt'@;
put 'MS4xLTAuOC0xLjgtMC41QzI3LjEsMC44LDI3LDEsMjYuOSwxLjF6Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTMyLjU3LDE1LjcybC0zLjM1LTFhMTEuNjUsMTEuNjUsMCwwLDAtLjk1LTIuMzNsMS42NC0zLjA3'@;
put 'YS42MS42MSwwLDAsMC0uMTEtLjcyTDI3LjQxLDYuMmEuNjEuNjEsMCwwLDAtLjcyLS4xMUwyMy42NCw3LjcyYTExLjYyLDExLjYyLDAsMCwwLTIuMzYtMWwtMS0zLjMxQS42MS42MSwwLDAsMCwxOS42OSwzSDE2LjMxYS42MS42MSwwLDAsMC0uNTguNDNsLTEsMy4zYTExLjYzLDExLjYzLDAs'@;
put 'MCwwLTIuMzgsMWwtMy0xLjYyYS42MS42MSwwLDAsMC0uNzIuMTFMNi4yLDguNTlhLjYxLjYxLDAsMCwwLS4xMS43MmwxLjYyLDNhMTEuNjMsMTEuNjMsMCwwLDAtMSwyLjM3bC0zLjMxLDFhLjYxLjYxLDAsMCwwLS40My41OHYzLjM4YS42MS42MSwwLDAsMCwuNDMuNThsMy4zMywxYTExLjYy'@;
put 'LDExLjYyLDAsMCwwLDEsMi4zM0w2LjA5LDI2LjY5YS42MS42MSwwLDAsMCwuMTEuNzJMOC41OSwyOS44YS42MS42MSwwLDAsMCwuNzIuMTFsMy4wOS0xLjY1YTExLjY1LDExLjY1LDAsMCwwLDIuMy45NGwxLDMuMzdhLjYxLjYxLDAsMCwwLC41OC40M2gzLjM4YS42MS42MSwwLDAsMCwuNTgt'@;
put 'LjQzbDEtMy4zOGExMS42MywxMS42MywwLDAsMCwyLjI4LS45NGwzLjExLDEuNjZhLjYxLjYxLDAsMCwwLC43Mi0uMTFsMi4zOS0yLjM5YS42MS42MSwwLDAsMCwuMTEtLjcybC0xLjY2LTMuMWExMS42MywxMS42MywwLDAsMCwuOTUtMi4yOWwzLjM3LTFhLjYxLjYxLDAsMCwwLC40My0uNThW'@;
put 'MTYuMzFBLjYxLjYxLDAsMCwwLDMyLjU3LDE1LjcyWk0xOCwyMy41QTUuNSw1LjUsMCwxLDEsMjMuNSwxOCw1LjUsNS41LDAsMCwxLDE4LDIzLjVaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQi'@;
put 'IGQ9Ik0zMi41NywxNS43MmwtMy4zNS0xYTEyLjEyLDEyLjEyLDAsMCwwLS40Ny0xLjMyLDcuNDksNy40OSwwLDAsMS02LjE0LTYuMTYsMTEuODIsMTEuODIsMCwwLDAtMS4zMy0uNDhsLTEtMy4zMUEuNjEuNjEsMCwwLDAsMTkuNjksM0gxNi4zMWEuNjEuNjEsMCwwLDAtLjU4LjQzbC0xLDMu'@;
put 'M2ExMS42MywxMS42MywwLDAsMC0yLjM4LDFsLTMtMS42MmEuNjEuNjEsMCwwLDAtLjcyLjExTDYuMiw4LjU5YS42MS42MSwwLDAsMC0uMTEuNzJsMS42MiwzYTExLjYzLDExLjYzLDAsMCwwLTEsMi4zN2wtMy4zMSwxYS42MS42MSwwLDAsMC0uNDMuNTh2My4zOGEuNjEuNjEsMCwwLDAsLjQz'@;
put 'LjU4bDMuMzMsMWExMS42MiwxMS42MiwwLDAsMCwxLDIuMzNMNi4wOSwyNi42OWEuNjEuNjEsMCwwLDAsLjExLjcyTDguNTksMjkuOGEuNjEuNjEsMCwwLDAsLjcyLjExbDMuMDktMS42NWExMS42NSwxMS42NSwwLDAsMCwyLjMuOTRsMSwzLjM3YS42MS42MSwwLDAsMCwuNTguNDNoMy4zOGEu'@;
put 'NjEuNjEsMCwwLDAsLjU4LS40M2wxLTMuMzhhMTEuNjMsMTEuNjMsMCwwLDAsMi4yOC0uOTRsMy4xMSwxLjY2YS42MS42MSwwLDAsMCwuNzItLjExbDIuMzktMi4zOWEuNjEuNjEsMCwwLDAsLjExLS43MmwtMS42Ni0zLjFhMTEuNjMsMTEuNjMsMCwwLDAsLjk1LTIuMjlsMy4zNy0xYS42MS42'@;
put 'MSwwLDAsMCwuNDMtLjU4VjE2LjMxQS42MS42MSwwLDAsMCwzMi41NywxNS43MlpNMTgsMjMuNUE1LjUsNS41LDAsMSwxLDIzLjUsMTgsNS41LDUuNSwwLDAsMSwxOCwyMy41WiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29s'@;
put 'aWQtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiBkPSJNMzIuNTcsMTUuNzIsMzEuNSwxNS40SDIyLjg1'@;
put 'QTUuNSw1LjUsMCwxLDEsMTgsMTIuNWE1LjUzLDUuNTMsMCwwLDEsLjY1LDBBMy42OCwzLjY4LDAsMCwxLDE5LDkuODlsMi4wOS0zLjYyLS44Ni0yLjgzQS42MS42MSwwLDAsMCwxOS42OSwzSDE2LjMxYS42MS42MSwwLDAsMC0uNTguNDNsLTEsMy4zYTExLjYzLDExLjYzLDAsMCwwLTIuMzgs'@;
put 'MWwtMy0xLjYyYS42MS42MSwwLDAsMC0uNzIuMTFMNi4yLDguNTlhLjYxLjYxLDAsMCwwLS4xMS43MmwxLjYyLDNhMTEuNjMsMTEuNjMsMCwwLDAtMSwyLjM3bC0zLjMxLDFhLjYxLjYxLDAsMCwwLS40My41OHYzLjM4YS42MS42MSwwLDAsMCwuNDMuNThsMy4zMywxYTExLjYyLDExLjYyLDAs'@;
put 'MCwwLDEsMi4zM0w2LjA5LDI2LjY5YS42MS42MSwwLDAsMCwuMTEuNzJMOC41OSwyOS44YS42MS42MSwwLDAsMCwuNzIuMTFsMy4wOS0xLjY1YTExLjY1LDExLjY1LDAsMCwwLDIuMy45NGwxLDMuMzdhLjYxLjYxLDAsMCwwLC41OC40M2gzLjM4YS42MS42MSwwLDAsMCwuNTgtLjQzbDEtMy4z'@;
put 'OGExMS42MywxMS42MywwLDAsMCwyLjI4LS45NGwzLjExLDEuNjZhLjYxLjYxLDAsMCwwLC43Mi0uMTFsMi4zOS0yLjM5YS42MS42MSwwLDAsMCwuMTEtLjcybC0xLjY2LTMuMWExMS42MywxMS42MywwLDAsMCwuOTUtMi4yOWwzLjM3LTFhLjYxLjYxLDAsMCwwLC40My0uNThWMTYuMzFBLjYx'@;
put 'LjYxLDAsMCwwLDMyLjU3LDE1LjcyWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywx'@;
put 'M0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiLz4nKSx5LkNsclNoYXBlQ2hlY2s9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0x'@;
put 'My43MiwyNy42OSwzLjI5LDE3LjI3YTEsMSwwLDAsMSwxLjQxLTEuNDFsOSw5TDMxLjI5LDcuMjlhMSwxLDAsMCwxLDEuNDEsMS40MVoiLz4nKSx5LkNsclNoYXBlVGltZXM9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEi'@;
put 'IGQ9Ik0xOS40MSwxOGw4LjI5LTguMjlhMSwxLDAsMCwwLTEuNDEtMS40MUwxOCwxNi41OSw5LjcxLDguMjlBMSwxLDAsMCwwLDguMjksOS43MUwxNi41OSwxOCw4LjI5LDI2LjI5YTEsMSwwLDEsMCwxLjQxLDEuNDFMMTgsMTkuNDFsOC4yOSw4LjI5YTEsMSwwLDAsMCwxLjQxLTEuNDFaIi8+'@;
put 'JykseS5DbHJTaGFwZUV4Y2xhbWF0aW9uVHJpYW5nbGU9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xOCwyMS4zMmExLjMsMS4zLDAsMCwwLDEuMy0xLjNWMTRhMS4zLDEuMywwLDEsMC0yLjYsMHY2QTEuMywx'@;
put 'LjMsMCwwLDAsMTgsMjEuMzJaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgY3g9IjE3Ljk1IiBjeT0iMjQuMjciIHI9IjEuNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5l'@;
put 'IGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMzAuMzMsMjUuNTQsMjAuNTksNy42YTMsMywwLDAsMC01LjI3LDBMNS41NywyNS41NEEzLDMsMCwwLDAsOC4yMSwzMEgyNy42OWEzLDMsMCwwLDAsMi42NC00LjQzWm0tMS43OCwxLjk0YTEsMSwwLDAsMS0uODYuNDlIOC4yMWExLDEsMCwwLDEt'@;
put 'Ljg4LTEuNDhMMTcuMDcsOC41NWExLDEsMCwwLDEsMS43NiwwbDkuNzQsMTcuOTRBMSwxLDAsMCwxLDI4LjU1LDI3LjQ4WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zMC4zMywyNS41NCwyMC41OSw3LjZhMywz'@;
put 'LDAsMCwwLTUuMjcsMEw1LjU3LDI1LjU0QTMsMywwLDAsMCw4LjIxLDMwSDI3LjY5YTMsMywwLDAsMCwyLjY0LTQuNDNaTTE2LjQ2LDEyLjc0YTEuNDksMS40OSwwLDAsMSwzLDB2Ni44OWExLjQ5LDEuNDksMCwxLDEtMywwWk0xOCwyNi4yNWExLjcyLDEuNzIsMCwxLDEsMS43Mi0xLjcyQTEu'@;
put 'NzIsMS43MiwwLDAsMSwxOCwyNi4yNVoiLz4nKSx5LkNsclNoYXBlRXhjbGFtYXRpb25DaXJjbGU9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xOCw2QTEyLDEyLDAsMSwwLDMwLDE4LDEyLDEyLDAsMCwwLDE4'@;
put 'LDZabTAsMjJBMTAsMTAsMCwxLDEsMjgsMTgsMTAsMTAsMCwwLDEsMTgsMjhaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0xOCwyMC4wN2ExLjMsMS4zLDAsMCwxLTEuMy0xLjN2LTZhMS4zLDEuMywwLDEs'@;
put 'MSwyLjYsMHY2QTEuMywxLjMsMCwwLDEsMTgsMjAuMDdaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgY3g9IjE3Ljk1IiBjeT0iMjMuMDIiIHI9IjEuNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNz'@;
put 'PSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0xOCw2QTEyLDEyLDAsMSwwLDMwLDE4LDEyLDEyLDAsMCwwLDE4LDZabS0xLjQ5LDZhMS40OSwxLjQ5LDAsMCwxLDMsMHY2Ljg5YTEuNDksMS40OSwwLDEsMS0zLDBaTTE4LDI1LjVhMS43MiwxLjcyLDAsMSwxLDEuNzItMS43'@;
put 'MkExLjcyLDEuNzIsMCwwLDEsMTgsMjUuNVoiLz4nKSx5LkNsclNoYXBlQ2hlY2tDaXJjbGU9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xOCw2QTEyLDEyLDAsMSwwLDMwLDE4LDEyLDEyLDAsMCwwLDE4LDZa'@;
put 'bTAsMjJBMTAsMTAsMCwxLDEsMjgsMTgsMTAsMTAsMCwwLDEsMTgsMjhaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0xNi4zNCwyMy43NGwtNS01YTEsMSwwLDAsMSwxLjQxLTEuNDFsMy41OSwzLjU5LDYu'@;
put 'NzgtNi43OGExLDEsMCwwLDEsMS40MSwxLjQxWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zMCwxOEExMiwxMiwwLDEsMSwxOCw2LDEyLDEyLDAsMCwxLDMwLDE4Wm0tNC43Ny0yLjE2YTEuNCwxLjQsMCwwLDAt'@;
put 'Mi0ybC02Ljc3LDYuNzdMMTMsMTcuMTZhMS40LDEuNCwwLDAsMC0yLDJsNS40NSw1LjQ1WiIvPicpLHkuQ2xyU2hhcGVJbmZvQ2lyY2xlPSgwLGcuY2xySWNvblNWRykoJzxjaXJjbGUgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiICBjeD0iMTcuOTMiIGN5PSIx'@;
put 'MS45IiByPSIxLjQiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgIGQ9Ik0yMSwyM0gxOVYxNUgxNmExLDEsMCwwLDAsMCwyaDF2NkgxNWExLDEsMCwxLDAsMCwyaDZhMSwxLDAsMCwwLDAtMloiLz5cbiAgICAgICAg'@;
put 'ICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgIGQ9Ik0xOCw2QTEyLDEyLDAsMSwwLDMwLDE4LDEyLDEyLDAsMCwwLDE4LDZabTAsMjJBMTAsMTAsMCwxLDEsMjgsMTgsMTAsMTAsMCwwLDEsMTgsMjhaIi8+XG4gICAgICAgICAgICAgICAg'@;
put 'PHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTE4LDZBMTIsMTIsMCwxLDAsMzAsMTgsMTIsMTIsMCwwLDAsMTgsNlptLTIsNS4xNWEyLDIsMCwxLDEsMiwyQTIsMiwwLDAsMSwxNS45LDExLjE1Wk0yMywyNGExLDEsMCwwLDEtMSwxSDE1YTEsMSwwLDEs'@;
put 'MSwwLTJoMlYxN0gxNmExLDEsMCwwLDEsMC0yaDR2OGgyQTEsMSwwLDAsMSwyMywyNFoiLz4nKSx5LkNsclNoYXBlSW5mb1N0YW5kYXJkPSgwLGcuY2xySWNvblNWRykoJzxjaXJjbGUgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGN4PSIxNy45NyIgY3k9IjEw'@;
put 'LjQ1IiByPSIxLjQiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTIxLDI1SDE5VjE0LjFIMTZhMSwxLDAsMCwwLDAsMmgxVjI1SDE1YTEsMSwwLDAsMCwwLDJoNmExLDEsMCwwLDAsMC0yWiIvPlxuICAgICAg'@;
put 'ICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMTgsMzRBMTYsMTYsMCwxLDEsMzQsMTgsMTYsMTYsMCwwLDEsMTgsMzRaTTE4LDRBMTQsMTQsMCwxLDAsMzIsMTgsMTQsMTQsMCwwLDAsMTgsNFoiLz5cbiAgICAgICAgICAgICAg'@;
put 'ICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMTgsMi4xYTE2LDE2LDAsMSwwLDE2LDE2QTE2LDE2LDAsMCwwLDE4LDIuMVptLS4xLDUuMjhhMiwyLDAsMSwxLTIsMkEyLDIsMCwwLDEsMTcuOSw3LjM4Wm0zLjYsMjEuMjVoLTdhMS40LDEuNCwwLDEs'@;
put 'MSwwLTIuOGgyLjF2LTkuMkgxNWExLjQsMS40LDAsMSwxLDAtMi44aDQuNHYxMmgyLjFhMS40LDEuNCwwLDEsMSwwLDIuOFoiLz4nKSx5LkNsclNoYXBlU3VjY2Vzc1N0YW5kYXJkPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0'@;
put 'aC0xIiBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm0wLDMwQTE0LDE0LDAsMSwxLDMyLDE4LDE0LDE0LDAsMCwxLDE4LDMyWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJN'@;
put 'MjgsMTIuMWExLDEsMCwwLDAtMS40MSwwTDE1LjQ5LDIzLjE1bC02LTZBMSwxLDAsMCwwLDgsMTguNTNMMTUuNDksMjYsMjgsMTMuNTJBMSwxLDAsMCwwLDI4LDEyLjFaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0i'@;
put 'TTE4LDJBMTYsMTYsMCwxLDAsMzQsMTgsMTYsMTYsMCwwLDAsMTgsMlpNMjguNDUsMTIuNjMsMTUuMzEsMjUuNzYsNy41NSwxOGExLjQsMS40LDAsMCwxLDItMmw1Ljc4LDUuNzhMMjYuNDcsMTAuNjVhMS40LDEuNCwwLDEsMSwyLDJaIi8+JykseS5DbHJTaGFwZUVycm9yU3RhbmRhcmQ9KDAs'@;
put 'Zy5jbHJJY29uU1ZHKSgnPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgY3g9IjE4IiBjeT0iMjYuMDYiIHI9IjEuMzMiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0i'@;
put 'TTE4LDIyLjYxYTEsMSwwLDAsMS0xLTF2LTEyYTEsMSwwLDEsMSwyLDB2MTJBMSwxLDAsMCwxLDE4LDIyLjYxWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMTgsMzRBMTYsMTYsMCwxLDEsMzQsMTgsMTYs'@;
put 'MTYsMCwwLDEsMTgsMzRaTTE4LDRBMTQsMTQsMCwxLDAsMzIsMTgsMTQsMTQsMCwwLDAsMTgsNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMTgsMi4xYTE2LDE2LDAsMSwwLDE2LDE2QTE2LDE2LDAsMCwwLDE4'@;
put 'LDIuMVpNMTYuNiw4LjhhMS40LDEuNCwwLDAsMSwyLjgsMHYxMmExLjQsMS40LDAsMCwxLTIuOCwwWk0xOCwyOC42YTEuOCwxLjgsMCwxLDEsMS44LTEuOEExLjgsMS44LDAsMCwxLDE4LDI4LjZaIi8+JykseS5DbHJTaGFwZVdhcm5pbmdTdGFuZGFyZD0oMCxnLmNsckljb25TVkcpKCc8Y2ly'@;
put 'Y2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBjeD0iMTgiIGN5PSIyNi4wNiIgcj0iMS4zMyIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMTgsMjIuNjFhMSwxLDAsMCwx'@;
put 'LTEtMXYtMTJhMSwxLDAsMSwxLDIsMHYxMkExLDEsMCwwLDEsMTgsMjIuNjFaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIGQ9Ik0xNS4wNjIwNzgyLDEuNjgxMTk2IEMxNS42Mjk4ODE5LDAuNjQ5MjY2MzU1IDE2'@;
put 'LjcxMDkwOTEsMC4wMTAyMjE5Mzk2IDE3Ljg4NSwwLjAxMDIyMTkzOTYgQzE5LjA1OTA5MDksMC4wMTAyMjE5Mzk2IDIwLjE0MDExODEsMC42NDkyNjYzNTUgMjAuNzA4NjQzMywxLjY4MjUyMTI5IEwzNC41OTg2NDQsMjcuMjQyNTIyNSBDMzUuMTQwNzc0NiwyOC4yNDAxMzk3IDM1LjExNzQz'@;
put 'NDUsMjkuNDQ5NTM3MyAzNC41MzcyMTYxLDMwLjQyNTQ5NDMgQzMzLjk1Njk5NzcsMzEuNDAxNDUxNCAzMi45MDU2NzEsMzEuOTk5Njk4NCAzMS43NywzMiBMNC4wMjIzOTMyMywzMS45OTk3NDkyIEMyLjg3NDA5MDA5LDMyLjAyNTQ2OTkgMS43OTkwMjg0MywzMS40Mzc1NzUzIDEuMjAxMDYz'@;
put 'MzUsMzAuNDU2OTEyNiBDMC42MDMwOTgyNjUsMjkuNDc2MjQ5OSAwLjU3Mjc3Nzg5OSwyOC4yNTEzMTc5IDEuMTIyMDc4MTgsMjcuMjQxMTk2IEwxNS4wNjIwNzgyLDEuNjgxMTk2IFogTTIuODc4NTA3NjcsMjguMTk3NzI4MiBDMi42NzA2MDk2NiwyOC41ODAwMzc2IDIuNjgyMDk3NSwyOS4w'@;
put 'NDQxNDIzIDIuOTA4NjU1NywyOS40MTU2OTc3IEMzLjEzNTIxMzksMjkuNzg3MjUzMiAzLjU0MjUzNTQsMzAuMDA5OTk1OSA0LDMwIEwzMS43Njk3MzQ0LDMwIEMzMi4xOTk5MTkxLDI5Ljk5OTg4NTggMzIuNTk4MjQ3OCwyOS43NzMyMjA4IDMyLjgxODA4MjEsMjkuNDAzNDQ4MiBDMzMuMDM3'@;
put 'OTE2NCwyOS4wMzM2NzU3IDMzLjA0Njc1OTUsMjguNTc1NDU2NyAzMi44NDEzNTY3LDI4LjE5NzQ3ODcgTDE4Ljk1Mzg3MzksMi42NDIwODE5NSBDMTguNzM5NDIzNiwyLjI1MjM0NDM2IDE4LjMyOTg0MTksMi4wMTAyMjE5NCAxNy44ODUsMi4wMTAyMjE5NCBDMTcuNDQwNjg4OSwyLjAxMDIy'@;
put 'MTk0IDE3LjAzMTU1MzgsMi4yNTE3NjY5MiAxNi44MTY4OTQ2LDIuNjQwNjg3NTMgTDIuODc4NTA3NjcsMjguMTk3NzI4MiBaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTM0LjYsMjkuMjEsMjAuNzEsMy42NWEz'@;
put 'LjIyLDMuMjIsMCwwLDAtNS42NiwwTDEuMTcsMjkuMjFBMy4yMiwzLjIyLDAsMCwwLDQsMzRIMzEuNzdhMy4yMiwzLjIyLDAsMCwwLDIuODMtNC43NVpNMTYuNiwxMGExLjQsMS40LDAsMCwxLDIuOCwwdjEyYTEuNCwxLjQsMCwwLDEtMi44LDBaTTE4LDI5Ljg1YTEuOCwxLjgsMCwxLDEsMS44'@;
put 'LTEuOEExLjgsMS44LDAsMCwxLDE4LDI5Ljg1WiIvPicpLHkuQ2xyU2hhcGVIZWxwSW5mbz0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjUuMzksMjUuNDVhMSwxLDAsMCwwLTEuMzguMjljLTEuNDEsMi4xNi00LDQuODEtNi4zMSw1LjdzLTQuMTIuNTctNC44NCwwYy0uMzEtLjI3LTEu'@;
put 'MTItMS0uNDMtMy40OS40Ni0xLjY2LDMuMzItOS40OCw0LTExLjM4bC0yLjE4LjI4Yy0uNjksMS44Ni0zLjI5LDguODQtMy43NiwxMC41OC0uNjgsMi40OS0uMzQsNC4zLDEuMDksNS41NkE1LjU5LDUuNTksMCwwLDAsMTUsMzRhOS41Myw5LjUzLDAsMCwwLDMuNDUtLjdjMi43OS0xLjA5LDUu'@;
put 'NzItNC4xMiw3LjI2LTYuNDdBMSwxLDAsMCwwLDI1LjM5LDI1LjQ1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTkuMywxMWE0LjUsNC41LDAsMSwwLTQuNS00LjVBNC41LDQuNSwwLDAsMCwxOS4zLDExWm0w'@;
put 'LTdhMi41LDIuNSwwLDEsMS0yLjUsMi41QTIuNSwyLjUsMCwwLDEsMTkuMyw0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTEuODEsMTVjLjA2LDAsNi4yNy0uODIsNy43My0xLC42NS0uMSwxLjE0LDAsMS4z'@;
put 'LjE1cy4yMS44LS4wNywxLjY4Yy0uNjEsMS44Ni0zLjY5LDExLTQuNTksMTMuNzFhOCw4LDAsMCwwLDEuMjktLjM4LDcuMzIsNy4zMiwwLDAsMCwxLjE1LS42QzE5Ljg1LDI1LDIyLjE1LDE4LjEsMjIuNjcsMTYuNTJzLjM5LTIuNzgtLjMtMy42YTMuMTYsMy4xNiwwLDAsMC0zLjA4LS44M2Mt'@;
put 'MS40My4xNS03LjQ3Ljk0LTcuNzMsMWExLDEsMCwwLDAsLjI2LDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjIwLjc1IiBjeT0iNiIgcj0iNCIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBh'@;
put 'dGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNC44NCwyNi4yM2ExLDEsMCwwLDAtMS40LjI5LDE2LjYsMTYuNiwwLDAsMS0zLjUxLDMuNzdjLS4zMy4yNS0xLjU2LDEuMi0yLjA4LDEtLjM2LS4xMS0uMTUtLjgyLS4wOC0xLjEybC41My0xLjU3Yy4yMi0uNjQsNC4wNS0xMiw0LjQ3'@;
put 'LTEzLjMuNjItMS45LjM1LTMuNzctMi40OC0zLjMyLS43Ny4wOC04LjU4LDEuMDktOC43MiwxLjFhMSwxLDAsMCwwLC4xMywyczMtLjM5LDMuMzMtLjQyYS44OC44OCwwLDAsMSwuODUuNDQsMi40NywyLjQ3LDAsMCwxLS4wNywxLjcxYy0uMjYsMS00LjM3LDEyLjU4LTQuNSwxMy4yNWEyLjc4'@;
put 'LDIuNzgsMCwwLDAsMS4xOCwzLDUsNSwwLDAsMCwzLjA4LjgzaDBhOC41Myw4LjUzLDAsMCwwLDMuMDktLjYyYzIuNDktMSw1LjA5LTMuNjYsNi40Ni01Ljc1QTEsMSwwLDAsMCwyNC44NCwyNi4yM1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+JykseS5DbHJT'@;
put 'aGFwZUJhcnM9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMiwyOUg0YTEsMSwwLDAsMSwwLTJIMzJhMSwxLDAsMCwxLDAsMloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGlu'@;
put 'ZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTMyLDE5SDRhMSwxLDAsMCwxLDAtMkgzMmExLDEsMCwwLDEsMCwyWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMzIsOUg0QTEsMSwwLDAsMSw0LDdIMzJh'@;
put 'MSwxLDAsMCwxLDAsMloiLz4nKSx5LkNsclNoYXBlVXNlcj0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTgsMTdhNyw3LDAsMSwwLTctN0E3LDcsMCwwLDAsMTgsMTdaTTE4LDVhNSw1LDAsMSwxLTUsNUE1LDUsMCwwLDEsMTgsNVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91'@;
put 'dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLjQ3LDI0LjM3YTE3LjE2LDE3LjE2LDAsMCwwLTI0LjkzLDBBMiwyLDAsMCwwLDUsMjUuNzRWMzFhMiwyLDAsMCwwLDIsMkgyOWEyLDIsMCwwLDAsMi0yVjI1Ljc0QTIsMiwwLDAsMCwzMC40NywyNC4zN1pNMjksMzFI'@;
put 'N1YyNS43M2ExNS4xNywxNS4xNywwLDAsMSwyMiwwaDBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMC40NywyNC4zN2ExNy4xNiwxNy4xNiwwLDAsMC0yNC45MywwQTIsMiwwLDAsMCw1LDI1Ljc0VjMxYTIs'@;
put 'MiwwLDAsMCwyLDJIMjlhMiwyLDAsMCwwLDItMlYyNS43NEEyLDIsMCwwLDAsMzAuNDcsMjQuMzdaTTI5LDMxSDdWMjUuNzNhMTUuMTcsMTUuMTcsMCwwLDEsMjIsMGgwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIC8+XG4g'@;
put 'ICAgICAgICAgICA8cGF0aCBkPSJNMTgsMTdhNyw3LDAsMCwwLDQuNDUtMS42aC0uMjJBMy42OCwzLjY4LDAsMCwxLDIwLDE0LjZhNSw1LDAsMSwxLDEuMjQtOC40MmwxLTEuNzZBNyw3LDAsMSwwLDE4LDE3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1w'@;
put 'YXRoLTItLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiAgY2xhc3M9'@;
put 'ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAuNDcsMjQuMzdhMTcuMTYsMTcuMTYsMCwwLDAtMjQuOTMsMEEyLDIsMCwwLDAsNSwyNS43NFYzMWEyLDIsMCwwLDAsMiwy'@;
put 'SDI5YTIsMiwwLDAsMCwyLTJWMjUuNzRBMiwyLDAsMCwwLDMwLjQ3LDI0LjM3Wk0yOSwzMUg3VjI1LjczYTE1LjE3LDE1LjE3LDAsMCwxLDIyLDBoMFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxw'@;
put 'YXRoIGQ9Ik0xOCwxN2E3LDcsMCwwLDAsNi44NS01LjU2LDcuNCw3LjQsMCwwLDEtMi4yNC02LjY5QTcsNywwLDEsMCwxOCwxN1pNMTgsNWE1LDUsMCwxLDEtNSw1QTUsNSwwLDAsMSwxOCw1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFk'@;
put 'Z2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLjYxLDI0LjUyYTE3LjE2'@;
put 'LDE3LjE2LDAsMCwwLTI1LjIyLDAsMS41MSwxLjUxLDAsMCwwLS4zOSwxdjZBMS41LDEuNSwwLDAsMCw2LjUsMzNoMjNBMS41LDEuNSwwLDAsMCwzMSwzMS41di02QTEuNTEsMS41MSwwLDAsMCwzMC42MSwyNC41MloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+'@;
put 'XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIxOCIgY3k9IjEwIiByPSI3IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLjYxLDI0LjUyYTE3LjE2LDE3LjE2LDAsMCwwLTI1LjIyLDAsMS41MSwxLjUxLDAsMCwwLS4z'@;
put 'OSwxdjZBMS41LDEuNSwwLDAsMCw2LjUsMzNoMjNBMS41LDEuNSwwLDAsMCwzMSwzMS41di02QTEuNTEsMS41MSwwLDAsMCwzMC42MSwyNC41MloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBk'@;
put 'PSJNMTgsMTdhNyw3LDAsMCwwLDQuNDUtMS42aC0uMjJBMy42OCwzLjY4LDAsMCwxLDE5LDkuODlsMy4xNi01LjQ3QTcsNywwLDEsMCwxOCwxN1oiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBk'@;
put 'PSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiAgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgt'@;
put 'My0tYWxlcnRlZCBjbHItaS1hbGVydCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMC42MSwyNC41MmExNy4xNiwxNy4xNiwwLDAsMC0yNS4yMiwwLDEuNTEsMS41MSwwLDAsMC0uMzksMXY2QTEuNSwxLjUsMCwwLDAsNi41LDMzaDIzQTEuNSwxLjUsMCwwLDAsMzEsMzEuNXYtNkExLjUx'@;
put 'LDEuNTEsMCwwLDAsMzAuNjEsMjQuNTJaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwxN2E3LDcsMCwwLDAsNi44NS01LjU2LDcuNCw3LjQsMCwwLDEtMi4yNC02LjY5QTcsNywwLDEs'@;
put 'MCwxOCwxN1oiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQg'@;
put 'Y2xyLWktYmFkZ2UiIC8+JykseS5DbHJTaGFwZUFuZ2xlPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMjkuNTIsMjIuNTIsMTgsMTAuNiw2LjQ4LDIyLjUyYTEuNywxLjcsMCwwLDAsMi40NSwyLjM2TDE4LDE1'@;
put 'LjQ5bDkuMDgsOS4zOWExLjcsMS43LDAsMCwwLDIuNDUtMi4zNloiLz4nKSx5LkNsclNoYXBlRm9sZGVyPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzAsOUgxNi40MkwxNC4xMSw1LjgyQTIsMiwwLDAsMCwx'@;
put 'Mi40OSw1SDZBMiwyLDAsMCwwLDQsN1YyOWEyLDIsMCwwLDAsMiwySDMwYTIsMiwwLDAsMCwyLTJWMTFBMiwyLDAsMCwwLDMwLDlabTAsMjBINlYxM2g3LjMxYTIsMiwwLDAsMCwyLTJINlY3aDYuNDlsMi42MSwzLjU5YTEsMSwwLDAsMCwuODEuNDFIMzBaIi8+XG4gICAgICAgICAgICAgICAg'@;
put 'PHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMzAsMTMuNVYyOUg2VjEzaDcuMzFhMiwyLDAsMCwwLDItMkg2VjdoNi40OWwyLjYxLDMuNTlhMSwxLDAsMCwwLC44MS40MWg4LjUxYTcuNSw3LjUsMCwwLDEtMS4yOS0y'@;
put 'SDE2LjQyTDE0LjExLDUuODJBMiwyLDAsMCwwLDEyLjQ5LDVINkEyLDIsMCwwLDAsNCw3VjI5YTIsMiwwLDAsMCwyLDJIMzBhMiwyLDAsMCwwLDItMlYxMy4yMkE3LjQ5LDcuNDksMCwwLDEsMzAsMTMuNVoiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5l'@;
put 'LS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiBkPSJNMzAs'@;
put 'MTUuNFYyOUg2VjEzaDcuMzFhMiwyLDAsMCwwLDItMkg2VjdoNi40OWwyLjYxLDMuNTlhMSwxLDAsMCwwLC44MS40MWgyLjczQTMuNjYsMy42NiwwLDAsMSwxOSw5Ljg5TDE5LjU2LDlIMTYuNDJMMTQuMTEsNS44MkEyLDIsMCwwLDAsMTIuNDksNUg2QTIsMiwwLDAsMCw0LDdWMjlhMiwyLDAs'@;
put 'MCwwLDIsMkgzMGEyLDIsMCwwLDAsMi0yVjE1LjRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCww'@;
put 'LDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzAsOUgxNi40Mkwx'@;
put 'NC4xMSw1LjgyQTIsMiwwLDAsMCwxMi40OSw1SDZBMiwyLDAsMCwwLDQsN1YyOWEyLDIsMCwwLDAsMiwySDMwYTIsMiwwLDAsMCwyLTJWMTFBMiwyLDAsMCwwLDMwLDlaTTYsMTFWN2g2LjQ5bDIuNzIsNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFs'@;
put 'ZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiBkPSJNMjIuMjMsMTUuNEEzLjY4LDMuNjgsMCwwLDEsMTksOS44OUwxOS41Niw5SDE2LjQyTDE0LjExLDUuODJBMiwyLDAsMCwwLDEyLjQ5LDVINkEyLDIsMCwwLDAsNCw3VjI5YTIsMiwwLDAsMCwyLDJIMzBhMiwyLDAsMCwwLDIt'@;
put 'MlYxNS40Wk02LDExVjdoNi40OWwyLjcyLDRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIy'@;
put 'LjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMzAs'@;
put 'MTMuNUE3LjUsNy41LDAsMCwxLDIzLjEzLDlIMTYuNDJMMTQuMTEsNS44MkEyLDIsMCwwLDAsMTIuNDksNUg2QTIsMiwwLDAsMCw0LDdWMjlhMiwyLDAsMCwwLDIsMkgzMGEyLDIsMCwwLDAsMi0yVjEzLjIyQTcuNDksNy40OSwwLDAsMSwzMCwxMy41Wk02LDExVjdoNi40OWwyLjcyLDRaIi8+'@;
put 'XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPicpLHkuQ2xyU2hhcGVGb2xkZXJPcGVuPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGNs'@;
put 'YXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzUuMzIsMTMuNzRBMS43MSwxLjcxLDAsMCwwLDMzLjg3LDEzSDExLjE3YTIuNTksMi41OSwwLDAsMC0yLjI1LDEuNTIsMSwxLDAsMCwwLDAsLjE0TDYsMjVWN2g2LjQ5bDIuNjEsMy41OWExLDEsMCwwLDAsLjgx'@;
put 'LjQxSDMyYTIsMiwwLDAsMC0yLTJIMTYuNDJMMTQuMTEsNS44MkEyLDIsMCwwLDAsMTIuNDksNUg2QTIsMiwwLDAsMCw0LDdWMjkuNjlBMS4zNywxLjM3LDAsMCwwLDUuNDEsMzFIMzAuMzRhMSwxLDAsMCwwLDEtLjcybDQuMTktMTUuMUExLjY0LDEuNjQsMCwwLDAsMzUuMzIsMTMuNzRaTTI5'@;
put 'LjU1LDI5SDYuOWwzLjg4LTEzLjgxYS42Ni42NiwwLDAsMSwuMzgtLjI0SDMzLjQ5WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgZD0iTTM1LjMyLDEzLjc0QTEuNzEsMS43MSwwLDAs'@;
put 'MCwzMy44NywxM0gxMS4xN2EyLjU5LDIuNTksMCwwLDAtMi4yNSwxLjUyLDEsMSwwLDAsMCwwLC4xNEw2LDI1VjdoNi40OWwyLjYxLDMuNTlhMSwxLDAsMCwwLC44MS40MWg4LjUyYTcuNDksNy40OSwwLDAsMS0xLjI5LTJIMTYuNDJMMTQuMTEsNS44MkEyLDIsMCwwLDAsMTIuNDksNUg2QTIs'@;
put 'MiwwLDAsMCw0LDdWMjkuNjlBMS4zNywxLjM3LDAsMCwwLDUuNDEsMzFIMzAuMzRhMSwxLDAsMCwwLDEtLjcybDQuMTktMTUuMUExLjY0LDEuNjQsMCwwLDAsMzUuMzIsMTMuNzRaTTI5LjU1LDI5SDYuOWwzLjg4LTEzLjgxYS42Ni42NiwwLDAsMSwuMzgtLjI0SDMzLjQ5WiIvPlxuICAgICAg'@;
put 'ICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQg'@;
put 'Y2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0zMy42OCwxNS40aC0uM0wyOS41NSwyOUg2LjlsMy44OC0xMy44MWEuNjYuNjYsMCwwLDEsLjM4LS4yNGg5LjQyQTMuNjcsMy42NywwLDAsMSwxOSwxMy41NmEzLjYzLDMuNjMsMCwwLDEtLjI2LS41NkgxMS4xN2EyLjU5LDIuNTks'@;
put 'MCwwLDAtMi4yNSwxLjUyLDEsMSwwLDAsMCwwLC4xNEw2LDI1VjdoNi40OWwyLjYxLDMuNTlhMSwxLDAsMCwwLC44MS40MWgyLjczQTMuNjYsMy42NiwwLDAsMSwxOSw5Ljg5TDE5LjU2LDlIMTYuNDJMMTQuMTEsNS44MkEyLDIsMCwwLDAsMTIuNDksNUg2QTIsMiwwLDAsMCw0LDdWMjkuNjlB'@;
put 'MS4zNywxLjM3LDAsMCwwLDUuNDEsMzFIMzAuMzRhMSwxLDAsMCwwLDEtLjcybDQuMTktMTUuMWExLjY4LDEuNjgsMCwwLDAsLjA3LS4zMkEzLjY3LDMuNjcsMCwwLDEsMzMuNjgsMTUuNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBj'@;
put 'bHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIvPlxu'@;
put 'ICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zNS4zMiwxMy43NEExLjcxLDEuNzEsMCwwLDAsMzMuODcsMTNIMTEuMTdhMi41OSwyLjU5LDAsMCwwLTIuMjUsMS41MiwxLDEsMCwwLDAsMCwuMTRMNiwyNVY3aDYuNDlsMi42'@;
put 'MSwzLjU5YTEsMSwwLDAsMCwuODEuNDFIMzJhMiwyLDAsMCwwLTItMkgxNi40MkwxNC4xMSw1LjgyQTIsMiwwLDAsMCwxMi40OSw1SDZBMiwyLDAsMCwwLDQsN1YyOS42OUExLjM3LDEuMzcsMCwwLDAsNS40MSwzMUgzMC4zNGExLDEsMCwwLDAsMS0uNzJsNC4xOS0xNS4xQTEuNjQsMS42NCww'@;
put 'LDAsMCwzNS4zMiwxMy43NFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiBkPSJNMzMuNjgsMTUuNEgyMi4yM0EzLjY5LDMuNjksMCwwLDEsMTksMTMuNTZhMy42MywzLjYzLDAsMCwxLS4y'@;
put 'Ni0uNTZIMTEuMTdhMi41OSwyLjU5LDAsMCwwLTIuMjUsMS41MiwxLDEsMCwwLDAsMCwuMTRMNiwyNVY3aDYuNDlsMi42MSwzLjU5YTEsMSwwLDAsMCwuODEuNDFoMi43M0EzLjY2LDMuNjYsMCwwLDEsMTksOS44OUwxOS41Niw5SDE2LjQyTDE0LjExLDUuODJBMiwyLDAsMCwwLDEyLjQ5LDVI'@;
put 'NkEyLDIsMCwwLDAsNCw3VjI5LjY5QTEuMzcsMS4zNywwLDAsMCw1LjQxLDMxSDMwLjM0YTEsMSwwLDAsMCwxLS43Mmw0LjE5LTE1LjFhMS42OCwxLjY4LDAsMCwwLC4wNy0uMzJBMy42NywzLjY3LDAsMCwxLDMzLjY4LDE1LjRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNs'@;
put 'ci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAs'@;
put 'MCwyNi44NSwxLjE0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMzUuMzIsMTMuNzRBMS43MSwxLjcxLDAsMCwwLDMzLjg3LDEzSDExLjE3YTIuNTksMi41OSwwLDAsMC0yLjI1LDEu'@;
put 'NTIsMSwxLDAsMCwwLDAsLjE0TDYsMjVWN2g2LjQ5bDIuNjEsMy41OWExLDEsMCwwLDAsLjgxLjQxaDguNTJhNy40OSw3LjQ5LDAsMCwxLTEuMzEtMkgxNi40MkwxNC4xMSw1LjgyQTIsMiwwLDAsMCwxMi40OSw1SDZBMiwyLDAsMCwwLDQsN1YyOS42OUExLjM3LDEuMzcsMCwwLDAsNS40MSwz'@;
put 'MUgzMC4zNGExLDEsMCwwLDAsMS0uNzJsNC4xOS0xNS4xQTEuNjQsMS42NCwwLDAsMCwzNS4zMiwxMy43NFoiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAi'@;
put 'IGN5PSI2IiByPSI1Ii8+JykseS5DbHJTaGFwZUJlbGw9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMi41MSwyNy44M0ExNC40LDE0LjQsMCwwLDEsMzAsMjQuOWExMi42MywxMi42MywwLDAsMS0xLjM1LTQu'@;
put 'ODFWMTUuMTVBMTAuODEsMTAuODEsMCwwLDAsMTkuMjEsNC40VjMuMTFhMS4zMywxLjMzLDAsMSwwLTIuNjcsMFY0LjQyQTEwLjgxLDEwLjgxLDAsMCwwLDcuMjEsMTUuMTV2NC45NEExMi42MywxMi42MywwLDAsMSw1Ljg2LDI0LjlhMTQuNCwxNC40LDAsMCwxLTIuNDcsMi45MywxLDEsMCww'@;
put 'LDAtLjM0Ljc1djEuMzZhMSwxLDAsMCwwLDEsMWgyNy44YTEsMSwwLDAsMCwxLTFWMjguNThBMSwxLDAsMCwwLDMyLjUxLDI3LjgzWk01LjEzLDI4Ljk0YTE2LjE3LDE2LjE3LDAsMCwwLDIuNDQtMywxNC4yNCwxNC4yNCwwLDAsMCwxLjY1LTUuODVWMTUuMTVhOC43NCw4Ljc0LDAsMSwxLDE3'@;
put 'LjQ3LDB2NC45NGExNC4yNCwxNC4yNCwwLDAsMCwxLjY1LDUuODUsMTYuMTcsMTYuMTcsMCwwLDAsMi40NCwzWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMTgsMzQuMjhBMi42NywyLjY3LDAsMCwwLDIw'@;
put 'LjU4LDMySDE1LjMyQTIuNjcsMi42NywwLDAsMCwxOCwzNC4yOFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0xOCwzNC4yOEEyLjY3LDIuNjcsMCwwLDAsMjAuNTgsMzJIMTUu'@;
put 'MzJBMi42NywyLjY3LDAsMCwwLDE4LDM0LjI4WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgZD0iTTMyLjUxLDI3LjgzQTE0LjQsMTQuNCwwLDAsMSwzMCwyNC45YTEyLjYzLDEyLjYz'@;
put 'LDAsMCwxLTEuMzUtNC44MVYxNS4xNWExMC45MiwxMC45MiwwLDAsMC0uMTYtMS43OSw3LjQ0LDcuNDQsMCwwLDEtMi4yNC0uODQsOC44OSw4Ljg5LDAsMCwxLC40LDIuNjR2NC45NGExNC4yNCwxNC4yNCwwLDAsMCwxLjY1LDUuODUsMTYuMTcsMTYuMTcsMCwwLDAsMi40NCwzSDUuMTNhMTYu'@;
put 'MTcsMTYuMTcsMCwwLDAsMi40NC0zLDE0LjI0LDE0LjI0LDAsMCwwLDEuNjUtNS44NVYxNS4xNUE4LjgsOC44LDAsMCwxLDE4LDYuMzFhOC42MSw4LjYxLDAsMCwxLDQuNzYsMS40NEE3LjQ5LDcuNDksMCwwLDEsMjIuNSw2YzAtLjIxLDAtLjQyLDAtLjYzYTEwLjU4LDEwLjU4LDAsMCwwLTMu'@;
put 'MzItMVYzLjExYTEuMzMsMS4zMywwLDEsMC0yLjY3LDBWNC40MkExMC44MSwxMC44MSwwLDAsMCw3LjIxLDE1LjE1djQuOTRBMTIuNjMsMTIuNjMsMCwwLDEsNS44NiwyNC45YTE0LjQsMTQuNCwwLDAsMS0yLjQ3LDIuOTMsMSwxLDAsMCwwLS4zNC43NXYxLjM2YTEsMSwwLDAsMCwxLDFoMjcu'@;
put 'OGExLDEsMCwwLDAsMS0xVjI4LjU4QTEsMSwwLDAsMCwzMi41MSwyNy44M1oiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIv'@;
put 'PlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zMi44NSwyOC4xM2wtLjM0LS4zQTE0LjM3LDE0LjM3LDAsMCwxLDMwLDI0LjlhMTIuNjMsMTIuNjMsMCwwLDEtMS4zNS00LjgxVjE1LjE1QTEwLjgxLDEwLjgxLDAsMCww'@;
put 'LDE5LjIxLDQuNFYzLjExYTEuMzMsMS4zMywwLDEsMC0yLjY3LDBWNC40MkExMC44MSwxMC44MSwwLDAsMCw3LjIxLDE1LjE1djQuOTRBMTIuNjMsMTIuNjMsMCwwLDEsNS44NiwyNC45YTE0LjQsMTQuNCwwLDAsMS0yLjQ3LDIuOTNsLS4zNC4zdjIuODJIMzIuODVaIi8+XG4gICAgICAgICAg'@;
put 'ICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTTE1LjMyLDMyYTIuNjUsMi42NSwwLDAsMCw1LjI1LDBaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRn'@;
put 'ZWQiIGQ9Ik0xOCwzNC4yOEEyLjY3LDIuNjcsMCwwLDAsMjAuNTgsMzJIMTUuMzJBMi42NywyLjY3LDAsMCwwLDE4LDM0LjI4WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIiBkPSJNMzIuODUs'@;
put 'MjguMTNsLS4zNC0uM0ExNC4zNywxNC4zNywwLDAsMSwzMCwyNC45YTEyLjYzLDEyLjYzLDAsMCwxLTEuMzUtNC44MVYxNS4xNWExMC45MiwxMC45MiwwLDAsMC0uMTYtMS43OUE3LjUsNy41LDAsMCwxLDIyLjUsNmMwLS4yMSwwLS40MiwwLS42M2ExMC41NywxMC41NywwLDAsMC0zLjMyLTFW'@;
put 'My4xMWExLjMzLDEuMzMsMCwxLDAtMi42NywwVjQuNDJBMTAuODEsMTAuODEsMCwwLDAsNy4yMSwxNS4xNXY0Ljk0QTEyLjYzLDEyLjYzLDAsMCwxLDUuODYsMjQuOWExNC40LDE0LjQsMCwwLDEtMi40NywyLjkzbC0uMzQuM3YyLjgySDMyLjg1WiIvPlxuICAgICAgICAgICAgICAgIDxjaXJj'@;
put 'bGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz4nKSx5LkNsclNoYXBlSW1hZ2U9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMyLDRINEEyLDIsMCwwLDAsMiw2VjMwYTIs'@;
put 'MiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlY2QTIsMiwwLDAsMCwzMiw0Wk00LDMwVjZIMzJWMzBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTguOTIsMTRhMywzLDAsMSwwLTMtM0EzLDMsMCwwLDAsOC45'@;
put 'MiwxNFptMC00LjZBMS42LDEuNiwwLDEsMSw3LjMzLDExLDEuNiwxLjYsMCwwLDEsOC45Miw5LjQxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMi43OCwxNS4zN2wtNS40LDUuNC00LTRhMSwxLDAsMCwwLTEu'@;
put 'NDEsMEw1LjkyLDIyLjl2Mi44M2w2Ljc5LTYuNzlMMTYsMjIuMThsLTMuNzUsMy43NUgxNWw4LjQ1LTguNDVMMzAsMjRWMjEuMThsLTUuODEtNS44MUExLDEsMCwwLDAsMjIuNzgsMTUuMzdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICAgICAgICAg'@;
put 'ICAgPHBhdGggZD0iTTExLjkzLDExYTMsMywwLDEsMC0zLDNBMywzLDAsMCwwLDExLjkzLDExWm0tNC42LDBhMS42LDEuNiwwLDEsMSwxLjYsMS42QTEuNiwxLjYsMCwwLDEsNy4zMywxMVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdl'@;
put 'ZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE3LjM4LDIwLjc3bC00LTRhMSwxLDAsMCwwLTEuNDEsMEw1LjkyLDIyLjl2Mi44M2w2Ljc5LTYuNzlMMTYsMjIuMThsLTMuNzUsMy43NUgxNWw4LjQ1LTguNDVMMzAsMjRWMjEuMThsLTUuODEtNS44MWExLDEsMCwwLDAtMS40MSwwWiIgY2xh'@;
put 'c3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIsMTMuMjJWMzBINFY2SDIyLjVhNy40OSw3LjQ5LDAsMCwxLC4yOC0ySDRBMiwyLDAsMCwwLDIsNlYzMGEyLDIsMCwwLDAsMiwySDMyYTIsMiww'@;
put 'LDAsMCwyLTJWMTIuMzRBNy40NSw3LjQ1LDAsMCwxLDMyLDEzLjIyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1vdXRsaW5l'@;
put 'LS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLDRINEEyLDIsMCwwLDAsMiw2VjMwYTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlY2QTIsMiwwLDAsMCwzMiw0Wk04LjkyLDhhMywzLDAsMSwx'@;
put 'LTMsM0EzLDMsMCwwLDEsOC45Miw4Wk02LDI3VjIyLjlsNi02LjA4YTEsMSwwLDAsMSwxLjQxLDBMMTYsMTkuMzUsOC4zMiwyN1ptMjQsMEgxMS4xNWw2LjIzLTYuMjMsNS40LTUuNGExLDEsMCwwLDEsMS40MSwwTDMwLDIxLjE4WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBh'@;
put 'dGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLDEzLjVBNy40OCw3LjQ4LDAsMCwxLDIyLjc4LDRINEEyLDIsMCwwLDAsMiw2VjMwYTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYxMi4zNEE3LjQ2LDcuNDYsMCwwLDEsMzAsMTMuNVpNOC45Miw4YTMsMywwLDEsMS0zLDNB'@;
put 'MywzLDAsMCwxLDguOTIsOFpNNiwyN1YyMi45bDYtNi4wOGExLDEsMCwwLDEsMS40MSwwTDE2LDE5LjM1LDguMzIsMjdabTI0LDBIMTEuMTVsNi4yMy02LjIzLDUuNC01LjRhMSwxLDAsMCwxLDEuNDEsMEwzMCwyMS4xOFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlk'@;
put 'LXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+JykseS5DbHJTaGFwZUNsb3VkPSgwLGcuY2xySWNvblNWRyko'@;
put 'JzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMjcuMTQsMzNIMTAuNjJDNS42NywzMywxLDI4LjE5LDEsMjMuMWExMCwxMCwwLDAsMSw4LTkuNzUsMTAuMTksMTAuMTksMCwwLDEsMjAuMzMsMS4wNkExMC4wNywxMC4wNywwLDAsMSwyOSwxNi42'@;
put 'NmE4LjI5LDguMjksMCwwLDEsNiw4QzM1LDI5LjEsMzEuMzMsMzMsMjcuMTQsMzNaTTE5LjA5LDYuMjNhOC4yNCw4LjI0LDAsMCwwLTguMTksOGwwLC44Ny0uODYuMUE3Ljk0LDcuOTQsMCwwLDAsMywyMy4xYzAsNCwzLjc3LDcuOSw3LjYyLDcuOUgyNy4xNEMzMC4yMSwzMSwzMywyOCwzMywy'@;
put 'NC42NWE2LjMxLDYuMzEsMCwwLDAtNS4zNy02LjI2bC0xLjE4LS4xOC4zOS0xLjEzQTguMTgsOC4xOCwwLDAsMCwxOS4wOSw2LjIzWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgZD0i'@;
put 'TTI5LDE2LjY2YTEwLjA3LDEwLjA3LDAsMCwwLC4yNS0yLjI0YzAtLjMzLDAtLjY1LDAtMWE3LjQ1LDcuNDUsMCwwLDEtMi4xLS41NCw4LDgsMCwwLDEtLjMsNC4xNmwtLjM5LDEuMTMsMS4xOC4xOGE2LjMxLDYuMzEsMCwwLDEsNS4zNyw2LjI2QzMyLjk1LDI4LDMwLjE2LDMxLDI3LjA5LDMx'@;
put 'SDEwLjU3Yy0zLjg0LDAtNy42Mi0zLjkxLTcuNjItNy45YTcuOTQsNy45NCwwLDAsMSw3LTcuODlsLjg2LS4xLDAtLjg3YTguMjQsOC4yNCwwLDAsMSw4LjE5LThBOC4xMyw4LjEzLDAsMCwxLDIyLjU4LDdhNy41Myw3LjUzLDAsMCwxLS4wOC0xLDcuNTEsNy41MSwwLDAsMSwuMDktMS4xMkEx'@;
put 'MC4xMywxMC4xMywwLDAsMCwxOSw0LjIzLDEwLjI2LDEwLjI2LDAsMCwwLDguOTEsMTMuMzZhMTAsMTAsMCwwLDAtOCw5Ljc1YzAsNS4wOSw0LjY3LDkuOSw5LjYyLDkuOUgyNy4wOWM0LjE5LDAsNy44Ni0zLjksNy44Ni04LjM1QTguMjksOC4yOSwwLDAsMCwyOSwxNi42NloiLz5cbiAgICAg'@;
put 'ICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVk'@;
put 'IGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiBkPSJNMjksMTYuNjZhMTAuMTQsMTAuMTQsMCwwLDAsLjItMS4zaC0yYTguMjgsOC4yOCwwLDAsMS0uMzcsMS43MmwtLjM5LDEuMTMsMS4xOC4xOGE2LjMxLDYuMzEsMCwwLDEsNS4zNyw2LjI2QzMyLjk1LDI4LDMwLjE2LDMxLDI3LjA5'@;
put 'LDMxSDEwLjU3Yy0zLjg0LDAtNy42Mi0zLjkxLTcuNjItNy45YTcuOTQsNy45NCwwLDAsMSw3LTcuODlsLjg2LS4xLDAtLjg3QTguMTYsOC4xNiwwLDAsMSwyMSw2LjQ3bDEtMS44QTEwLjE5LDEwLjE5LDAsMCwwLDguOTEsMTMuMzZhMTAsMTAsMCwwLDAtOCw5Ljc1YzAsNS4wOSw0LjY3LDku'@;
put 'OSw5LjYyLDkuOUgyNy4wOWM0LjE5LDAsNy44Ni0zLjksNy44Ni04LjM1QTguMjksOC4yOSwwLDAsMCwyOSwxNi42NloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVy'@;
put 'dCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xp'@;
put 'ZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0yOSwxNi42NmExMC4wNywxMC4wNywwLDAsMCwuMjUtMi4yNEExMC4xOSwxMC4xOSwwLDAsMCw4LjkxLDEzLjM2LDEwLDEwLDAsMCwwLDEsMjMuMUMxLDI4LjE5LDUuNjIsMzMsMTAuNTcsMzNIMjcuMDlDMzEuMjgsMzMsMzUsMjkuMSwzNSwyNC42'@;
put 'NUE4LjI5LDguMjksMCwwLDAsMjksMTYuNjZaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0yOSwxNi42NmExMC4wNywxMC4wNywwLDAsMCwuMjUtMi4yNGMwLS4zMywwLS42NSwwLTFh'@;
put 'Ny40NCw3LjQ0LDAsMCwxLTYuNi04LjU4QTEwLjEzLDEwLjEzLDAsMCwwLDE5LDQuMjMsMTAuMjYsMTAuMjYsMCwwLDAsOC45MSwxMy4zNiwxMCwxMCwwLDAsMCwxLDIzLjFDMSwyOC4xOSw1LjYyLDMzLDEwLjU3LDMzSDI3LjA5QzMxLjI4LDMzLDM1LDI5LjEsMzUsMjQuNjVBOC4yOSw4LjI5'@;
put 'LDAsMCwwLDI5LDE2LjY2WiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0i'@;
put 'Y2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiBkPSJNMjksMTYuNjZhMTAuMTUsMTAuMTUsMCwwLDAsLjItMS4yNmgtN0EzLjY4LDMuNjgsMCwwLDEsMTksOS44OWwzLTUuMjFBMTAuMTksMTAuMTksMCwwLDAsOC45MSwxMy4zNiwxMCwxMCwwLDAsMCwx'@;
put 'LDIzLjFDMSwyOC4xOSw1LjYyLDMzLDEwLjU3LDMzSDI3LjA5QzMxLjI4LDMzLDM1LDI5LjEsMzUsMjQuNjVBOC4yOSw4LjI5LDAsMCwwLDI5LDE2LjY2WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFs'@;
put 'ZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiLz4nKSx5LkNsclNoYXBlRWxsaXBzaXNIb3Jp'@;
put 'em9udGFsPSgwLGcuY2xySWNvblNWRykoJzxjaXJjbGUgY3g9IjMxLjEiIGN5PSIxOCIgcj0iMi45IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjE4IiBjeT0iMTgiIHI9IjIuOSIgY2xhc3M9ImNsci1pLW91'@;
put 'dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSI0LjkiIGN5PSIxOCIgcj0iMi45IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMxLjEiIGN5PSIxOCIgcj0i'@;
put 'Mi45IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIxOCIgY3k9IjE4IiByPSIyLjkiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJh'@;
put 'ZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjQuOSIgY3k9IjE4IiByPSIyLjkiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgIGNsYXNz'@;
put 'PSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCBjbHItaS1iYWRnZSIgLz4nKSx5LkNsclNoYXBlRWxsaXBzaXNWZXJ0aWNhbD0oMCxnLmNsckljb25TVkcpKCc8Y2lyY2xlIGN4PSIxOCIgY3k9IjQuOSIgcj0iMi45IiBjbGFzcz0iY2xyLWktb3V0'@;
put 'bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjE4IiBjeT0iMTgiIHI9IjIuOSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIxOCIgY3k9IjMxLjEiIHI9IjIu'@;
put 'OSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIxOCIgY3k9IjQuOSIgcj0iMi45IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIC8+XG4gICAgICAg'@;
put 'ICAgICA8Y2lyY2xlIGN4PSIxOCIgY3k9IjE4IiByPSIyLjkiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjE4IiBjeT0iMzEuMSIgcj0iMi45IiBjbGFzcz0iY2xyLWktb3V0bGlu'@;
put 'ZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiICBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+JykseS5D'@;
put 'bHJTaGFwZUZpbHRlckdyaWQ9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xNSwyNS44NmwyLDFWMjAuMjdhMSwxLDAsMCwwLS4yOS0uN0wxMC4yMywxM0gyNS43OWwtNi40Nyw2LjU3YTEsMSwwLDAsMC0uMjku'@;
put 'N0wxOSwyOGwyLDFWMjAuNjhMMjcuNTgsMTRBMS40NiwxLjQ2LDAsMCwwLDI4LDEzVjEyYTEsMSwwLDAsMC0xLTFIOWExLDEsMCwwLDAtMSwxdjFhMS40NiwxLjQ2LDAsMCwwLC40MiwxTDE1LDIwLjY4WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHIt'@;
put 'aS1zb2xpZC1wYXRoLTEiIGQ9Ik04LDExdjEuMTJhLjUuNSwwLDAsMCwuMTUuMzVsNy4yOCw3LjM2YS41LjUsMCwwLDEsLjE1LjM1djYuODlhLjUuNSwwLDAsMCwuMjguNDVsMy45NSwxLjQxYS41LjUsMCwwLDAsLjcyLS40NWwwLTguMzlhLjU0LjU0LDAsMCwxLC4xOC0uMzVsNy4xMi03LjI1'@;
put 'YS41LjUsMCwwLDAsLjE1LS4zNVYxMVoiLz4nKSx5LkNsclNoYXBlRmlsdGVyR3JpZENpcmNsZT0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE1LDI1Ljg2bDIsMVYyMC4yN2ExLDEsMCwwLDAtLjI5LS43TDEw'@;
put 'LjIzLDEzSDI1Ljc5bC02LjQ3LDYuNTdhMSwxLDAsMCwwLS4yOS43TDE5LDI4bDIsMVYyMC42OEwyNy41OCwxNEExLjQ2LDEuNDYsMCwwLDAsMjgsMTNWMTJhMSwxLDAsMCwwLTEtMUg5YTEsMSwwLDAsMC0xLDF2MWExLjQ2LDEuNDYsMCwwLDAsLjQyLDFMMTUsMjAuNjhaIi8+XG4gICAgICAg'@;
put 'ICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJabTAsMzBBMTQsMTQsMCwxLDEsMzIsMTgsMTQsMTQsMCwwLDEsMTgsMzJaIi8+XG4gICAgICAgICAgICAgICAg'@;
put 'PHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTE4LDJBMTYsMTYsMCwxLDAsMzQsMTgsMTYsMTYsMCwwLDAsMTgsMlptMCwzMEExNCwxNCwwLDEsMSwzMiwxOCwxNCwxNCwwLDAsMSwxOCwzMloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0i'@;
put 'Y2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNOCwxMXYxLjEyYS41LjUsMCwwLDAsLjE1LjM1bDcuMjgsNy4zNmEuNS41LDAsMCwxLC4xNS4zNXY2Ljg5YS41LjUsMCwwLDAsLjI4LjQ1bDMuOTUsMS40MWEuNS41LDAsMCwwLC43Mi0uNDVsMC04LjM5YS41NC41NCwwLDAsMSwu'@;
put 'MTgtLjM1bDcuMTItNy4yNWEuNS41LDAsMCwwLC4xNS0uMzVWMTFaIi8+JykseS5DbHJTaGFwZVZtQnVnPSgwLGcuY2xySWNvblNWRykoJzxyZWN0IHdpZHRoPSIzNiIgaGVpZ2h0PSIzNiIgcng9IjMiIGZpbGw9IiNmZmZmZmYiIG9wYWNpdHk9IjAuMTUiIHN0eWxlPSJpc29sYXRpb246aXNv'@;
put 'bGF0ZSIvPjxwYXRoIGQ9Ik0zLjc5LDE0LjgzYTEuMDksMS4wOSwwLDAsMC0xLjQ3LS41NiwxLjA5LDEuMDksMCwwLDAtLjU0LDEuNDlsMi40Nyw1LjRjLjM5Ljg1LjgsMS4yOSwxLjU3LDEuMjlTNywyMiw3LjM5LDIxLjE2bDIuMTctNC43N2EuMzMuMzMsMCwwLDEsLjMxLS4yLjM1LjM1LDAs'@;
put 'MCwxLC4zNS4zNXY0LjYxYTEuMTUsMS4xNSwwLDAsMCwxLjE0LDEuMywxLjE3LDEuMTcsMCwwLDAsMS4xNy0xLjNWMTcuMzhhMS4xNSwxLjE1LDAsMCwxLDEuMjItMS4yLDEuMTMsMS4xMywwLDAsMSwxLjE4LDEuMnYzLjc3YTEuMTcsMS4xNywwLDEsMCwyLjMyLDBWMTcuMzhhMS4xNSwxLjE1'@;
put 'LDAsMCwxLDEuMjItMS4yLDEuMTMsMS4xMywwLDAsMSwxLjE4LDEuMnYzLjc3YTEuMTYsMS4xNiwwLDEsMCwyLjMxLDBWMTYuODZhMi42OSwyLjY5LDAsMCwwLTIuNzgtMi42OSwzLjU3LDMuNTcsMCwwLDAtMi40NywxLjA1LDIuNzUsMi43NSwwLDAsMC0yLjM4LTEuMDVBMy45MywzLjkzLDAs'@;
put 'MCwwLDEyLDE1LjIyYTIuODIsMi44MiwwLDAsMC0yLjA4LTEuMDVBMi41NSwyLjU1LDAsMCwwLDcuNCwxNS44OUw1LjgyLDE5LjYzbC0yLTQuOCIgZmlsbD0iI2ZmZmZmZiIvPjxwYXRoIGQ9Ik0zMywxNC4xOEExLjE0LDEuMTQsMCwwLDAsMzEuOSwxNWwtMS4xOSwzLjczTDI5LjUsMTUuMDVh'@;
put 'MS4xOCwxLjE4LDAsMCwwLTEuMTUtLjg3aC0uMWExLjIsMS4yLDAsMCwwLTEuMTUuODdsLTEuMTksMy43MS0xLjE4LTMuNzFhMS4xNSwxLjE1LDAsMCwwLTEuMTEtLjg3LDEuMDgsMS4wOCwwLDAsMC0xLjEyLDEuMDcsMS42OCwxLjY4LDAsMCwwLC4xLjU0bDIsNS43YTEuMjcsMS4yNywwLDAs'@;
put 'MCwxLjI3LDEsMS4yNCwxLjI0LDAsMCwwLDEuMi0uOTNsMS4yLTMuNjQsMS4yLDMuNjRhMS4yNSwxLjI1LDAsMCwwLDEuMjYuOTNBMS4yNywxLjI3LDAsMCwwLDMyLDIxLjVMMzQsMTUuNzNhMS43NywxLjc3LDAsMCwwLC4wOC0uNDhBMS4wNywxLjA3LDAsMCwwLDMzLDE0LjE4WiIgZmlsbD0i'@;
put 'I2ZmZmZmZiIvPicpLHkuQ2xyU2hhcGVTZWFyY2g9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xNi4zMyw1LjA1QTEwLjk1LDEwLjk1LDAsMSwxLDUuMzksMTYsMTEsMTEsMCwwLDEsMTYuMzMsNS4wNW0wLTIu'@;
put 'MDVhMTMsMTMsMCwxLDAsMTMsMTMsMTMsMTMsMCwwLDAtMTMtMTNaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0zNSwzMy4yOWwtNy4zNy03LjQyLTEuNDIsMS40MSw3LjM3LDcuNDJBMSwxLDAsMSwwLDM1'@;
put 'LDMzLjI5WiIvPicpLHkuQ2xyU2hhcGVWaWV3Q29sdW1ucz0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMxLDVINUEyLDIsMCwwLDAsMyw3VjI5YTIsMiwwLDAsMCwyLDJIMzFhMiwyLDAsMCwwLDItMlY3QTIs'@;
put 'MiwwLDAsMCwzMSw1Wk0xMywyOUg1VjdoOFptMTAsMEgxNVY3aDhaIi8+JykseS5DbHJTaGFwZUFuZ2xlRG91YmxlPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMjksMTkuNDFhMSwxLDAsMCwxLS43MS0uMjlM'@;
put 'MTgsOC44Myw3LjcxLDE5LjEyYTEsMSwwLDAsMS0xLjQxLTEuNDFMMTgsNiwyOS43MSwxNy43MUExLDEsMCwwLDEsMjksMTkuNDFaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0yOSwzMC40MWExLDEsMCww'@;
put 'LDEtLjcxLS4yOUwxOCwxOS44Myw3LjcxLDMwLjEyYTEsMSwwLDAsMS0xLjQxLTEuNDFMMTgsMTcsMjkuNzEsMjguNzFBMSwxLDAsMCwxLDI5LDMwLjQxWiIvPicpLHkuQ2xyU2hhcGVDYWxlbmRhcj0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1v'@;
put 'dXRsaW5lLXBhdGgtMSIgZD0iTTMyLjI1LDZIMjlWOGgzVjMwSDRWOEg3VjZIMy43NUExLjc4LDEuNzgsMCwwLDAsMiw3LjgxVjMwLjE5QTEuNzgsMS43OCwwLDAsMCwzLjc1LDMyaDI4LjVBMS43OCwxLjc4LDAsMCwwLDM0LDMwLjE5VjcuODFBMS43OCwxLjc4LDAsMCwwLDMyLjI1LDZaIi8+'@;
put 'XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIHg9IjgiIHk9IjE0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRo'@;
put 'LTMiIHg9IjE0IiB5PSIxNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiB4PSIyMCIgeT0iMTQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVj'@;
put 'dCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgeD0iMjYiIHk9IjE0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIHg9IjgiIHk9IjE5IiB3aWR0'@;
put 'aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTciIHg9IjE0IiB5PSIxOSIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5l'@;
put 'IGNsci1pLW91dGxpbmUtcGF0aC04IiB4PSIyMCIgeT0iMTkiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtOSIgeD0iMjYiIHk9IjE5IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4g'@;
put 'ICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEwIiB4PSI4IiB5PSIyNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0x'@;
put 'MSIgeD0iMTQiIHk9IjI0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEyIiB4PSIyMCIgeT0iMjQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVj'@;
put 'dCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTMiIHg9IjI2IiB5PSIyNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xNCIgZD0iTTEwLDEwYTEsMSww'@;
put 'LDAsMCwxLTFWM0ExLDEsMCwwLDAsOSwzVjlBMSwxLDAsMCwwLDEwLDEwWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xNSIgZD0iTTI2LDEwYTEsMSwwLDAsMCwxLTFWM2ExLDEsMCwwLDAtMiwwVjlBMSwxLDAsMCww'@;
put 'LDI2LDEwWiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xNiIgeD0iMTMiIHk9IjYiIHdpZHRoPSIxMCIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdl'@;
put 'ZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMzIsMTMuMjJWMzBINFY4SDdWNkgzLjc1QTEuNzgsMS43OCwwLDAsMCwyLDcuODFWMzAuMTlBMS43OCwxLjc4LDAsMCwwLDMuNzUsMzJoMjguNUExLjc4LDEuNzgsMCwwLDAsMzQsMzAuMTlWMTIuMzRBNy40NSw3LjQ1LDAsMCwx'@;
put 'LDMyLDEzLjIyWiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgeD0iOCIgeT0iMTQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xy'@;
put 'LWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiIHg9IjE0IiB5PSIxNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdl'@;
put 'ZCIgeD0iMjAiIHk9IjE0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYmFkZ2VkIiB4PSIyNiIgeT0iMTQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAg'@;
put 'ICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC02LS1iYWRnZWQiIHg9IjgiIHk9IjE5IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBj'@;
put 'bHItaS1vdXRsaW5lLXBhdGgtNy0tYmFkZ2VkIiB4PSIxNCIgeT0iMTkiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC04LS1iYWRnZWQiIHg9IjIwIiB5PSIxOSIgd2lk'@;
put 'dGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTktLWJhZGdlZCIgeD0iMjYiIHk9IjE5IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xh'@;
put 'c3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMTAtLWJhZGdlZCIgeD0iOCIgeT0iMjQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0x'@;
put 'MS0tYmFkZ2VkIiB4PSIxNCIgeT0iMjQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xMi0tYmFkZ2VkIiB4PSIyMCIgeT0iMjQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIi'@;
put 'Lz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xMy0tYmFkZ2VkIiB4PSIyNiIgeT0iMjQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGlu'@;
put 'ZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xNC0tYmFkZ2VkIiBkPSJNMTAsMTBhMSwxLDAsMCwwLDEtMVYzQTEsMSwwLDAsMCw5LDNWOUExLDEsMCwwLDAsMTAsMTBaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRs'@;
put 'aW5lLXBhdGgtMTUtLWJhZGdlZCIgZD0iTTIyLjUsNkgxM1Y4aDkuNzhBNy40OSw3LjQ5LDAsMCwxLDIyLjUsNloiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTE2LS1iYWRnZWQgY2xyLWktYmFkZ2Ui'@;
put 'IGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgZD0iTTMzLjY4LDE1LjRIMzJWMzBINFY4SDdWNkgzLjc1QTEuNzgsMS43OCwwLDAsMCwyLDcuODFW'@;
put 'MzAuMTlBMS43OCwxLjc4LDAsMCwwLDMuNzUsMzJoMjguNUExLjc4LDEuNzgsMCwwLDAsMzQsMzAuMTlWMTUuMzhaIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiIHg9IjgiIHk9IjE0'@;
put 'IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiIHg9IjE0IiB5PSIxNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxy'@;
put 'ZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIiB4PSI4IiB5PSIxOSIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxp'@;
put 'bmUtcGF0aC01LS1hbGVydGVkIiB4PSIxNCIgeT0iMTkiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNi0tYWxlcnRlZCIgeD0iMjAiIHk9IjE5IiB3aWR0aD0iMiIg'@;
put 'aGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTctLWFsZXJ0ZWQiIHg9IjI2IiB5PSIxOSIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJj'@;
put 'bHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC04LS1hbGVydGVkIiB4PSI4IiB5PSIyNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC05LS1h'@;
put 'bGVydGVkIiB4PSIxNCIgeT0iMjQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMTAtLWFsZXJ0ZWQiIHg9IjIwIiB5PSIyNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIv'@;
put 'PlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xMS0tYWxlcnRlZCIgeD0iMjYiIHk9IjI0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxp'@;
put 'bmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEyLS1hbGVydGVkIiBkPSJNMTAsMTBhMSwxLDAsMCwwLDEtMVYzQTEsMSwwLDAsMCw5LDNWOUExLDEsMCwwLDAsMTAsMTBaIi8+PHBvbHlnb24gcG9pbnRzPSIyMS4yOSA2IDEzIDYgMTMgOCAyMC4xNCA4IDIxLjI5IDYiLz5cbiAgICAg'@;
put 'ICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMTMtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQu'@;
put 'NzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzIuMjUsNmgtNFY5YTIuMiwyLjIsMCwxLDEtNC40LDBWNkgxMi4yVjlBMi4yLDIuMiww'@;
put 'LDAsMSw3LjgsOVY2aC00QTEuNzgsMS43OCwwLDAsMCwyLDcuODFWMzAuMTlBMS43OCwxLjc4LDAsMCwwLDMuNzUsMzJoMjguNUExLjc4LDEuNzgsMCwwLDAsMzQsMzAuMTlWNy44MUExLjc4LDEuNzgsMCwwLDAsMzIuMjUsNlpNMTAsMjZIOFYyNGgyWm0wLTVIOFYxOWgyWm0wLTVIOFYxNGgy'@;
put 'Wm02LDEwSDE0VjI0aDJabTAtNUgxNFYxOWgyWm0wLTVIMTRWMTRoMlptNiwxMEgyMFYyNGgyWm0wLTVIMjBWMTloMlptMC01SDIwVjE0aDJabTYsMTBIMjZWMjRoMlptMC01SDI2VjE5aDJabTAtNUgyNlYxNGgyWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xp'@;
put 'ZCBjbHItaS1zb2xpZC1wYXRoLTIiIGQ9Ik0xMCwxMGExLDEsMCwwLDAsMS0xVjNBMSwxLDAsMCwwLDksM1Y5QTEsMSwwLDAsMCwxMCwxMFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiBkPSJNMjYsMTBhMSwxLDAsMCww'@;
put 'LDEtMVYzYTEsMSwwLDAsMC0yLDBWOUExLDEsMCwwLDAsMjYsMTBaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0xMCwxMGExLDEsMCwwLDAsMS0xVjNBMSwxLDAsMCwwLDksM1Y5QTEs'@;
put 'MSwwLDAsMCwxMCwxMFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCIgZD0iTTMwLDEzLjVBNy41LDcuNSwwLDAsMSwyMi41LDZIMTIuMlY5QTIuMiwyLjIsMCwwLDEsNy44LDlWNmgtNEExLjc4'@;
put 'LDEuNzgsMCwwLDAsMiw3LjgxVjMwLjE5QTEuNzgsMS43OCwwLDAsMCwzLjc1LDMyaDI4LjVBMS43OCwxLjc4LDAsMCwwLDM0LDMwLjE5VjEyLjM0QTcuNDUsNy40NSwwLDAsMSwzMCwxMy41Wk0xMCwyNkg4VjI0aDJabTAtNUg4VjE5aDJabTAtNUg4VjE0aDJabTYsMTBIMTRWMjRoMlptMC01'@;
put 'SDE0VjE5aDJabTAtNUgxNFYxNGgyWm02LDEwSDIwVjI0aDJabTAtNUgyMFYxOWgyWm0wLTVIMjBWMTRoMlptNiwxMEgyNlYyNGgyWm0wLTVIMjZWMTloMlptMC01SDI2VjE0aDJaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1z'@;
put 'b2xpZC1wYXRoLTMtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0zMy42OCwxNS40SDIyLjIzQTMuNjgsMy42'@;
put 'OCwwLDAsMSwxOSw5Ljg5TDIxLjI5LDZIMTIuMlY5QTIuMiwyLjIsMCwwLDEsNy44LDlWNmgtNEExLjc4LDEuNzgsMCwwLDAsMiw3LjgxVjMwLjE5QTEuNzgsMS43OCwwLDAsMCwzLjc1LDMyaDI4LjVBMS43OCwxLjc4LDAsMCwwLDM0LDMwLjE5VjE1LjM4Wk0xMCwyNkg4VjI0aDJabTAtNUg4'@;
put 'VjE5aDJabTAtNUg4VjE0aDJabTYsMTBIMTRWMjRoMlptMC01SDE0VjE5aDJabTAtNUgxNFYxNGgyWm02LDEwSDIwVjI0aDJabTAtNUgyMFYxOWgyWm02LDVIMjZWMjRoMlptMC01SDI2VjE5aDJaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVk'@;
put 'IGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCIgZD0iTTEwLDEwYTEsMSwwLDAsMCwxLTFWM0ExLDEsMCwwLDAsOSwzVjlBMSwxLDAsMCwwLDEwLDEwWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWFs'@;
put 'ZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiLz4nKSx5LkNsclNoYXBlRXZlbnQ9KDAsZy5j'@;
put 'bHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xNi4xNywyNS44NiwxMC44MSwyMC41YTEsMSwwLDAsMSwxLjQxLTEuNDFMMTYuMTcsMjNsOC42NC04LjY0YTEsMSwwLDAsMSwxLjQxLDEuNDFaIi8+XG4gICAgICAgICAgICAg'@;
put 'ICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0zMi4yNSw2SDI5VjhoM1YzMEg0VjhIN1Y2SDMuNzVBMS43OCwxLjc4LDAsMCwwLDIsNy44MVYzMC4xOUExLjc4LDEuNzgsMCwwLDAsMy43NSwzMmgyOC41QTEuNzgsMS43OCwwLDAsMCwzNCwz'@;
put 'MC4xOVY3LjgxQTEuNzgsMS43OCwwLDAsMCwzMi4yNSw2WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMTAsMTBhMSwxLDAsMCwwLDEtMVYzQTEsMSwwLDAsMCw5LDNWOUExLDEsMCwwLDAsMTAsMTBaIi8+'@;
put 'XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIGQ9Ik0yNiwxMGExLDEsMCwwLDAsMS0xVjNhMSwxLDAsMCwwLTIsMFY5QTEsMSwwLDAsMCwyNiwxMFoiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWkt'@;
put 'b3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgeD0iMTMiIHk9IjYiIHdpZHRoPSIxMCIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMTAuODEsMjAuNWw1'@;
put 'LjM2LDUuMzZMMjYuMjIsMTUuODFhMSwxLDAsMCwwLTEuNDEtMS40MUwxNi4xNywyM2wtMy45NC0zLjk0YTEsMSwwLDAsMC0xLjQxLDEuNDFaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2Vk'@;
put 'IiBkPSJNMTAsMTBhMSwxLDAsMCwwLDEtMVYzQTEsMSwwLDAsMCw5LDNWOUExLDEsMCwwLDAsMTAsMTBaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIiBkPSJNMzIsMTMuMjJWMzBINFY4'@;
put 'SDdWNkgzLjc1QTEuNzgsMS43OCwwLDAsMCwyLDcuODFWMzAuMTlBMS43OCwxLjc4LDAsMCwwLDMuNzUsMzJoMjguNUExLjc4LDEuNzgsMCwwLDAsMzQsMzAuMTlWMTIuMzRBNy40NSw3LjQ1LDAsMCwxLDMyLDEzLjIyWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1v'@;
put 'dXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCIgZD0iTTIyLjUsNkgxM1Y4aDkuNzhBNy40OSw3LjQ5LDAsMCwxLDIyLjUsNloiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRo'@;
put 'LTUtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiBkPSJNMTAsMTBhMSwxLDAsMCwwLDEtMVYzQTEsMSwwLDAs'@;
put 'MCw5LDNWOUExLDEsMCwwLDAsMTAsMTBaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiIGQ9Ik0xMC44MSwyMC41bDUuMzYsNS4zNkwyNi4yMiwxNS44MWExLDEsMCwwLDAsLjIzLS40'@;
put 'MUgyMy44TDE2LjE3LDIzbC0zLjk0LTMuOTRhMSwxLDAsMCwwLTEuNDEsMS40MVoiLz5cbiAgICAgICAgICAgICAgICA8cG9seWdvbiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIgcG9pbnRzPSIyMS4yOSA2IDEzIDYgMTMgOCAy'@;
put 'MC4xNCA4IDIxLjI5IDYiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYWxlcnRlZCIgZD0iTTMzLjY4LDE1LjRIMzJWMzBINFY4SDdWNkgzLjc1QTEuNzgsMS43OCwwLDAsMCwyLDcuODFWMzAuMTlB'@;
put 'MS43OCwxLjc4LDAsMCwwLDMuNzUsMzJoMjguNUExLjc4LDEuNzgsMCwwLDAsMzQsMzAuMTlWMTUuMzhaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0y'@;
put 'Ni44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWkt'@;
put 'c29saWQtcGF0aC0xIiBkPSJNMTAsMTBhMSwxLDAsMCwwLDEtMVYzQTEsMSwwLDAsMCw5LDNWOUExLDEsMCwwLDAsMTAsMTBaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTTI2LDEwYTEsMSwwLDAsMCwxLTFWM2Ex'@;
put 'LDEsMCwwLDAtMiwwVjlBMSwxLDAsMCwwLDI2LDEwWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIGQ9Ik0zMi4yNSw2aC00VjlhMi4yLDIuMiwwLDAsMS00LjQsMFY2SDEyLjJWOUEyLjIsMi4yLDAsMCwxLDcuOCw5VjZo'@;
put 'LTRBMS43OCwxLjc4LDAsMCwwLDIsNy44MVYzMC4xOUExLjc4LDEuNzgsMCwwLDAsMy43NSwzMmgyOC41QTEuNzgsMS43OCwwLDAsMCwzNCwzMC4xOVY3LjgxQTEuNzgsMS43OCwwLDAsMCwzMi4yNSw2Wk0yNS45NCwxNi41OGwtOS42Nyw5LjY3TDExLDIwLjk0QTEuMzYsMS4zNiwwLDAsMSwx'@;
put 'Mi45LDE5bDMuMzgsMy4zOEwyNCwxNC42NmExLjM2LDEuMzYsMCwxLDEsMS45MywxLjkzWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0xMCwxMGExLDEsMCwwLDAsMS0xVjNBMSwx'@;
put 'LDAsMCwwLDksM1Y5QTEsMSwwLDAsMCwxMCwxMFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIiBkPSJNMzMuNjgsMTUuNEgyNi4zYTEuMzQsMS4zNCwwLDAsMS0uMzYsMS4xOGwtOS42Nyw5'@;
put 'LjY3TDExLDIwLjk0QTEuMzYsMS4zNiwwLDAsMSwxMi45LDE5bDMuMzgsMy4zOCw3LTdoLTFBMy42OCwzLjY4LDAsMCwxLDE5LDkuODlMMjEuMjksNkgxMi4yVjlBMi4yLDIuMiwwLDAsMSw3LjgsOVY2aC00QTEuNzgsMS43OCwwLDAsMCwyLDcuODFWMzAuMTlBMS43OCwxLjc4LDAsMCwwLDMu'@;
put 'NzUsMzJoMjguNUExLjc4LDEuNzgsMCwwLDAsMzQsMzAuMTlWMTUuMzhaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMy0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4y'@;
put 'OCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0t'@;
put 'YmFkZ2VkIiBkPSJNMTAsMTBhMSwxLDAsMCwwLDEtMVYzQTEsMSwwLDAsMCw5LDNWOUExLDEsMCwwLDAsMTAsMTBaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQiIGQ9Ik0zMCwxMy41QTcuNSw3'@;
put 'LjUsMCwwLDEsMjIuNSw2SDEyLjJWOUEyLjIsMi4yLDAsMCwxLDcuOCw5VjZoLTRBMS43OCwxLjc4LDAsMCwwLDIsNy44MVYzMC4xOUExLjc4LDEuNzgsMCwwLDAsMy43NSwzMmgyOC41QTEuNzgsMS43OCwwLDAsMCwzNCwzMC4xOVYxMi4zNEE3LjQ1LDcuNDUsMCwwLDEsMzAsMTMuNVptLTQu'@;
put 'MDYsMy4wOC05LjY3LDkuNjdMMTEsMjAuOTRBMS4zNiwxLjM2LDAsMCwxLDEyLjksMTlsMy4zOCwzLjM4TDI0LDE0LjY2YTEuMzYsMS4zNiwwLDEsMSwxLjkzLDEuOTNaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1w'@;
put 'YXRoLTMtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPicpLHkuQ2xyU2hhcGVFeWU9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMzLjYyLDE3LjUzYy0zLjM3LTYuMjMtOS4yOC0xMC0xNS44Mi0xMFM1LjM0LDExLjMsMiwxNy41M0wxLjcyLDE4bC4yNi40'@;
put 'OGMzLjM3LDYuMjMsOS4yOCwxMCwxNS44MiwxMHMxMi40Ni0zLjcyLDE1LjgyLTEwbC4yNi0uNDhaTTE3LjgsMjYuNDNDMTIuMTcsMjYuNDMsNywyMy4yOSw0LDE4YzMtNS4yOSw4LjE3LTguNDMsMTMuOC04LjQzUzI4LjU0LDEyLjcyLDMxLjU5LDE4QzI4LjU0LDIzLjI5LDIzLjQyLDI2LjQz'@;
put 'LDE3LjgsMjYuNDNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LjA5LDExLjE3QTYuODYsNi44NiwwLDEsMCwyNSwxOCw2Ljg2LDYuODYsMCwwLDAsMTguMDksMTEuMTdabTAsMTEuNzJBNC44Niw0Ljg2LDAs'@;
put 'MSwxLDIzLDE4LDQuODcsNC44NywwLDAsMSwxOC4wOSwyMi44OVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuNjIsMTcuNTNjLTMuMzctNi4yMy05LjI4LTEwLTE1LjgyLTEwUzUuMzQsMTEuMywyLDE3LjUz'@;
put 'TDEuNzIsMThsLjI2LjQ4YzMuMzcsNi4yMyw5LjI4LDEwLDE1LjgyLDEwczEyLjQ2LTMuNzIsMTUuODItMTBsLjI2LS40OFpNMTcuOCwyNi40M0MxMi4xNywyNi40Myw3LDIzLjI5LDQsMThjMy01LjI5LDguMTctOC40MywxMy44LTguNDNTMjguNTQsMTIuNzIsMzEuNTksMThDMjguNTQsMjMu'@;
put 'MjksMjMuNDIsMjYuNDMsMTcuOCwyNi40M1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjE4LjA5IiBjeT0iMTguMDMiIHI9IjYuODYiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiLz4nKSx5'@;
put 'LkNsclNoYXBlRXllSGlkZT0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjUuMTksMjAuNEE2Ljc4LDYuNzgsMCwwLDAsMjUuNjIsMThhNi44Niw2Ljg2LDAsMCwwLTYuODYtNi44Niw2Ljc5LDYuNzksMCwwLDAtMi4zNy40M0wxOCwxMy4yM2E0Ljc4LDQuNzgsMCwwLDEsLjc0LS4wNkE0'@;
put 'Ljg3LDQuODcsMCwwLDEsMjMuNjIsMThhNC43OSw0Ljc5LDAsMCwxLS4wNi43NFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzQuMjksMTcuNTNjLTMuMzctNi4yMy05LjI4LTEwLTE1LjgyLTEwYTE2LjgyLDE2'@;
put 'LjgyLDAsMCwwLTUuMjQuODVMMTQuODQsMTBhMTQuNzgsMTQuNzgsMCwwLDEsMy42My0uNDdjNS42MywwLDEwLjc1LDMuMTQsMTMuOCw4LjQzYTE3Ljc1LDE3Ljc1LDAsMCwxLTQuMzcsNS4xbDEuNDIsMS40MmExOS45MywxOS45MywwLDAsMCw1LTZsLjI2LS40OFoiIGNsYXNzPSJjbHItaS1v'@;
put 'dXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNNC44Nyw1Ljc4bDQuNDYsNC40NmExOS41MiwxOS41MiwwLDAsMC02LjY5LDcuMjlMMi4zOCwxOGwuMjYuNDhjMy4zNyw2LjIzLDkuMjgsMTAsMTUuODIsMTBhMTYuOTMsMTYuOTMsMCwwLDAsNy4z'@;
put 'Ny0xLjY5bDUsNSwxLjc1LTEuNS0yNi0yNlptOS43NSw5Ljc1LDYuNjUsNi42NWE0LjgxLDQuODEsMCwwLDEtMi41LjcyQTQuODcsNC44NywwLDAsMSwxMy45LDE4LDQuODEsNC44MSwwLDAsMSwxNC42MiwxNS41M1ptLTEuNDUtMS40NWE2Ljg1LDYuODUsMCwwLDAsOS41NSw5LjU1bDEuNiwx'@;
put 'LjZhMTQuOTEsMTQuOTEsMCwwLDEtNS44NiwxLjJjLTUuNjMsMC0xMC43NS0zLjE0LTEzLjgtOC40M2ExNy4yOSwxNy4yOSwwLDAsMSw2LjEyLTYuM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTguMzcsMTEu'@;
put 'MTdBNi43OSw2Ljc5LDAsMCwwLDE2LDExLjZsOC44LDguOEE2Ljc4LDYuNzgsMCwwLDAsMjUuMjMsMTgsNi44Niw2Ljg2LDAsMCwwLDE4LjM3LDExLjE3WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTM0LjI5LDE3LjUz'@;
put 'Yy0zLjM3LTYuMjMtOS4yOC0xMC0xNS44Mi0xMGExNi44MiwxNi44MiwwLDAsMC01LjI0Ljg1TDE0Ljg0LDEwYTE0Ljc4LDE0Ljc4LDAsMCwxLDMuNjMtLjQ3YzUuNjMsMCwxMC43NSwzLjE0LDEzLjgsOC40M2ExNy43NSwxNy43NSwwLDAsMS00LjM3LDUuMWwxLjQyLDEuNDJhMTkuOTMsMTku'@;
put 'OTMsMCwwLDAsNS02bC4yNi0uNDhaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNNC44Nyw1Ljc4bDQuNDYsNC40NmExOS41MiwxOS41MiwwLDAsMC02LjY5LDcuMjlMMi4zOCwxOGwuMjYuNDhjMy4zNyw2LjIzLDkuMjgs'@;
put 'MTAsMTUuODIsMTBhMTYuOTMsMTYuOTMsMCwwLDAsNy4zNy0xLjY5bDUsNSwxLjc1LTEuNS0yNi0yNlptOC4zLDguM2E2Ljg1LDYuODUsMCwwLDAsOS41NSw5LjU1bDEuNiwxLjZhMTQuOTEsMTQuOTEsMCwwLDEtNS44NiwxLjJjLTUuNjMsMC0xMC43NS0zLjE0LTEzLjgtOC40M2ExNy4yOSwx'@;
put 'Ny4yOSwwLDAsMSw2LjEyLTYuM1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiLz4nKSx5LkNsclNoYXBlU3RlcEZvcndhcmQyPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik03LjA4LDYuNTJhMS42OCwxLjY4LDAsMCwwLDAsMi40TDE2LjUxLDE4LDcuMTIsMjcu'@;
put 'MDhhMS43LDEuNywwLDAsMCwyLjM2LDIuNDRoMEwyMS40LDE4LDkuNDgsNi40N0ExLjY5LDEuNjksMCwwLDAsNy4wOCw2LjUyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTI2LjQ5LDVhMS43LDEuNywwLDAsMC0xLjcsMS43VjI5LjNh'@;
put 'MS43LDEuNywwLDAsMCwzLjQsMFY2LjdBMS43LDEuNywwLDAsMCwyNi40OSw1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+JykseS5DbHJTaGFwZUFycm93PSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yNy42NiwxNS42MSwxOCw2LDguMzQsMTUu'@;
put 'NjFBMSwxLDAsMSwwLDkuNzUsMTdMMTcsOS44MVYyOC45NGExLDEsMCwxLDAsMiwwVjkuODFMMjYuMjUsMTdhMSwxLDAsMCwwLDEuNDEtMS40MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+JykseS5Db3JlU2hhcGVzPXsidW5rbm93bi1zdGF0dXMiOnku'@;
put 'Q2xyU2hhcGVVbmtub3duU3RhdHVzLGhvbWU6eS5DbHJTaGFwZUhvbWUsY29nOnkuQ2xyU2hhcGVDb2csY2hlY2s6eS5DbHJTaGFwZUNoZWNrLHRpbWVzOnkuQ2xyU2hhcGVUaW1lcywiZXhjbGFtYXRpb24tdHJpYW5nbGUiOnkuQ2xyU2hhcGVFeGNsYW1hdGlvblRyaWFuZ2xlLCJleGNsYW1h'@;
put 'dGlvbi1jaXJjbGUiOnkuQ2xyU2hhcGVFeGNsYW1hdGlvbkNpcmNsZSwiY2hlY2stY2lyY2xlIjp5LkNsclNoYXBlQ2hlY2tDaXJjbGUsImluZm8tY2lyY2xlIjp5LkNsclNoYXBlSW5mb0NpcmNsZSwiaW5mby1zdGFuZGFyZCI6eS5DbHJTaGFwZUluZm9TdGFuZGFyZCwic3VjY2Vzcy1zdGFu'@;
put 'ZGFyZCI6eS5DbHJTaGFwZVN1Y2Nlc3NTdGFuZGFyZCwiZXJyb3Itc3RhbmRhcmQiOnkuQ2xyU2hhcGVFcnJvclN0YW5kYXJkLCJ3YXJuaW5nLXN0YW5kYXJkIjp5LkNsclNoYXBlV2FybmluZ1N0YW5kYXJkLCJoZWxwLWluZm8iOnkuQ2xyU2hhcGVIZWxwSW5mbyxiYXJzOnkuQ2xyU2hhcGVC'@;
put 'YXJzLHVzZXI6eS5DbHJTaGFwZVVzZXIsYW5nbGU6eS5DbHJTaGFwZUFuZ2xlLGZvbGRlcjp5LkNsclNoYXBlRm9sZGVyLCJmb2xkZXItb3BlbiI6eS5DbHJTaGFwZUZvbGRlck9wZW4sYmVsbDp5LkNsclNoYXBlQmVsbCxpbWFnZTp5LkNsclNoYXBlSW1hZ2UsY2xvdWQ6eS5DbHJTaGFwZUNs'@;
put 'b3VkLCJlbGxpcHNpcy1ob3Jpem9udGFsIjp5LkNsclNoYXBlRWxsaXBzaXNIb3Jpem9udGFsLCJlbGxpcHNpcy12ZXJ0aWNhbCI6eS5DbHJTaGFwZUVsbGlwc2lzVmVydGljYWwsImZpbHRlci1ncmlkIjp5LkNsclNoYXBlRmlsdGVyR3JpZCwiZmlsdGVyLWdyaWQtY2lyY2xlIjp5LkNsclNo'@;
put 'YXBlRmlsdGVyR3JpZENpcmNsZSwidm0tYnVnIjp5LkNsclNoYXBlVm1CdWcsc2VhcmNoOnkuQ2xyU2hhcGVTZWFyY2gsInZpZXctY29sdW1ucyI6eS5DbHJTaGFwZVZpZXdDb2x1bW5zLCJhbmdsZS1kb3VibGUiOnkuQ2xyU2hhcGVBbmdsZURvdWJsZSxjYWxlbmRhcjp5LkNsclNoYXBlQ2Fs'@;
put 'ZW5kYXIsZXZlbnQ6eS5DbHJTaGFwZUV2ZW50LGV5ZTp5LkNsclNoYXBlRXllLCJleWUtaGlkZSI6eS5DbHJTaGFwZUV5ZUhpZGUsInN0ZXAtZm9yd2FyZC0yIjp5LkNsclNoYXBlU3RlcEZvcndhcmQyLGFycm93OnkuQ2xyU2hhcGVBcnJvd30sT2JqZWN0LmRlZmluZVByb3BlcnR5KHkuQ29y'@;
put 'ZVNoYXBlcywiaG91c2UiLCgwLF8uZGVzY3JpcHRvckNvbmZpZykoeS5Db3JlU2hhcGVzLmhvbWUpKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoeS5Db3JlU2hhcGVzLCJzZXR0aW5ncyIsKDAsXy5kZXNjcmlwdG9yQ29uZmlnKSh5LkNvcmVTaGFwZXMuY29nKSksT2JqZWN0LmRlZmluZVByb3Bl'@;
put 'cnR5KHkuQ29yZVNoYXBlcywic3VjY2VzcyIsKDAsXy5kZXNjcmlwdG9yQ29uZmlnKSh5LkNvcmVTaGFwZXMuY2hlY2spKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoeS5Db3JlU2hhcGVzLCJjbG9zZSIsKDAsXy5kZXNjcmlwdG9yQ29uZmlnKSh5LkNvcmVTaGFwZXMudGltZXMpKSxPYmplY3Qu'@;
put 'ZGVmaW5lUHJvcGVydHkoeS5Db3JlU2hhcGVzLCJ3YXJuaW5nIiwoMCxfLmRlc2NyaXB0b3JDb25maWcpKHkuQ29yZVNoYXBlc1siZXhjbGFtYXRpb24tdHJpYW5nbGUiXSkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh5LkNvcmVTaGFwZXMsImVycm9yIiwoMCxfLmRlc2NyaXB0b3JDb25maWcp'@;
put 'KHkuQ29yZVNoYXBlc1siZXhjbGFtYXRpb24tY2lyY2xlIl0pKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoeS5Db3JlU2hhcGVzLCJpbmZvIiwoMCxfLmRlc2NyaXB0b3JDb25maWcpKHkuQ29yZVNoYXBlc1siaW5mby1jaXJjbGUiXSkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh5LkNvcmVTaGFw'@;
put 'ZXMsIm1lbnUiLCgwLF8uZGVzY3JpcHRvckNvbmZpZykoeS5Db3JlU2hhcGVzLmJhcnMpKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoeS5Db3JlU2hhcGVzLCJhdmF0YXIiLCgwLF8uZGVzY3JpcHRvckNvbmZpZykoeS5Db3JlU2hhcGVzLnVzZXIpKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoeS5D'@;
put 'b3JlU2hhcGVzLCJjYXJldCIsKDAsXy5kZXNjcmlwdG9yQ29uZmlnKSh5LkNvcmVTaGFwZXMuYW5nbGUpKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoeS5Db3JlU2hhcGVzLCJkaXJlY3RvcnkiLCgwLF8uZGVzY3JpcHRvckNvbmZpZykoeS5Db3JlU2hhcGVzLmZvbGRlcikpLE9iamVjdC5kZWZp'@;
put 'bmVQcm9wZXJ0eSh5LkNvcmVTaGFwZXMsIm5vdGlmaWNhdGlvbiIsKDAsXy5kZXNjcmlwdG9yQ29uZmlnKSh5LkNvcmVTaGFwZXMuYmVsbCkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh5LkNvcmVTaGFwZXMsImNvbGxhcHNlIiwoMCxfLmRlc2NyaXB0b3JDb25maWcpKHkuQ29yZVNoYXBlc1si'@;
put 'YW5nbGUtZG91YmxlIl0pKX0sIi4vcHJvamVjdHMvaWNvbnMvc3JjL3V0aWxzL2Rlc2NyaXB0b3ItY29uZmlnLnRzIjoKLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAogICAgICAgICAgICAgICAgICAhKioqIC4vcHJvamVjdHMv'@;
put 'aWNvbnMvc3JjL3V0aWxzL2Rlc2NyaXB0b3ItY29uZmlnLnRzICoqKiEKICAgICAgICAgICAgICAgICAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi8qISBubyBzdGF0aWMgZXhwb3J0cyBmb3VuZCAqL2Z1bmN0aW9uKFgseSxJKXsi'@;
put 'dXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHksIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHkuZGVzY3JpcHRvckNvbmZpZz12b2lkIDAseS5kZXNjcmlwdG9yQ29uZmlnPWZ1bmN0aW9uIF8oZyl7cmV0dXJue2VudW1lcmFibGU6ITAsd3JpdGFibGU6ITAsY29uZmlndXJhYmxl'@;
put 'OiEwLHZhbHVlOmd9fX0sIi4vcHJvamVjdHMvaWNvbnMvc3JjL3V0aWxzL3NoYXBlLXRlbXBsYXRlLW9ic2VydmVyLnRzIjoKLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAogICAgICAgICAgICAgICAgICAhKioqIC4v'@;
put 'cHJvamVjdHMvaWNvbnMvc3JjL3V0aWxzL3NoYXBlLXRlbXBsYXRlLW9ic2VydmVyLnRzICoqKiEKICAgICAgICAgICAgICAgICAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi8qISBubyBzdGF0aWMgZXhwb3J0cyBmb3Vu'@;
put 'ZCAqL2Z1bmN0aW9uKFgseSxJKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHksIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHkuU2hhcGVUZW1wbGF0ZU9ic2VydmVyPXkuY2hhbmdlSGFuZGxlckNhbGxiYWNrcz12b2lkIDAseS5jaGFuZ2VIYW5kbGVyQ2FsbGJhY2tzPXt9'@;
put 'O3ZhciBfPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZygpe3RoaXMuY2FsbGJhY2tzPXkuY2hhbmdlSGFuZGxlckNhbGxiYWNrc31yZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGcsImluc3RhbmNlIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGcuc2luZ2xlSW5zdGFuY2V8fChnLnNpbmdsZUlu'@;
put 'c3RhbmNlPW5ldyBnKSxnLnNpbmdsZUluc3RhbmNlfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLGcucHJvdG90eXBlLnN1YnNjcmliZVRvPWZ1bmN0aW9uKEIsdyl7dmFyIFA9dGhpcztyZXR1cm4gdGhpcy5jYWxsYmFja3NbQl0/LTE9PT10aGlzLmNhbGxiYWNrc1tCXS5pbmRl'@;
put 'eE9mKHcpJiZ0aGlzLmNhbGxiYWNrc1tCXS5wdXNoKHcpOnRoaXMuY2FsbGJhY2tzW0JdPVt3XSxmdW5jdGlvbigpe3ZhciBGPVAuY2FsbGJhY2tzW0JdLmluZGV4T2Yodyk7UC5jYWxsYmFja3NbQl0uc3BsaWNlKEYsMSksMD09PVAuY2FsbGJhY2tzW0JdLmxlbmd0aCYmZGVsZXRlIFAuY2Fs'@;
put 'bGJhY2tzW0JdfX0sZy5wcm90b3R5cGUuZW1pdENoYW5nZXM9ZnVuY3Rpb24oQix3KXt0aGlzLmNhbGxiYWNrc1tCXSYmdGhpcy5jYWxsYmFja3NbQl0ubWFwKGZ1bmN0aW9uKFApe1Aodyl9KX0sZ30oKTt5LlNoYXBlVGVtcGxhdGVPYnNlcnZlcj1ffSwiLi9wcm9qZWN0cy9pY29ucy9zcmMv'@;
put 'dXRpbHMvc3ZnLXRhZy1nZW5lcmF0b3IudHMiOgovKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCiAgICAgICAgICAgICAgICAgICEqKiogLi9wcm9qZWN0cy9pY29ucy9zcmMvdXRpbHMvc3ZnLXRhZy1nZW5lcmF0b3IudHMgKioq'@;
put 'IQogICAgICAgICAgICAgICAgICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLyohIG5vIHN0YXRpYyBleHBvcnRzIGZvdW5kICovZnVuY3Rpb24oWCx5LEkpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoeSwiX19l'@;
put 'c01vZHVsZSIse3ZhbHVlOiEwfSkseS5jbHJJY29uU1ZHPXZvaWQgMDt5LmNsckljb25TVkc9ZnVuY3Rpb24gdyhQKXt2YXIgRj0iIjtyZXR1cm4gUC5pbmRleE9mKCItLWJhZGdlZCIpPi0xJiYoRis9ImNhbi1iYWRnZSAiKSxQLmluZGV4T2YoIi0tYWxlcnRlZCIpPi0xJiYoRis9ImNhbi1h'@;
put 'bGVydCAiKSxQLmluZGV4T2YoImNsci1pLXNvbGlkIik+LTEmJihGKz0iaGFzLXNvbGlkICIpLChGPyc8c3ZnIHZlcnNpb249IjEuMSIgY2xhc3M9IicrRisnIiB2aWV3Qm94PSIwIDAgMzYgMzYiIHByZXNlcnZlQXNwZWN0UmF0aW89InhNaWRZTWlkIG1lZXQiXG4gICAgeG1sbnM9Imh0dHA6'@;
put 'Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgZm9jdXNhYmxlPSJmYWxzZSIgcm9sZT0iaW1nIj4nOic8c3ZnIHZlcnNpb249IjEuMSIgdmlld0JveD0iMCAwIDM2IDM2IiBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSJ4TWlkWU1p'@;
put 'ZCBtZWV0IlxuICAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIGZvY3VzYWJsZT0iZmFsc2UiIHJvbGU9ImltZyI+JykrUCsiPC9zdmc+In19fSl9LDgwNjg1OmZ1bmN0aW9uKHVlKXt1ZS5leHBv'@;
put 'cnRzPWZ1bmN0aW9uKFgpe3ZhciB5PXt9O2Z1bmN0aW9uIEkoXyl7aWYoeVtfXSlyZXR1cm4geVtfXS5leHBvcnRzO3ZhciBnPXlbX109e2k6XyxsOiExLGV4cG9ydHM6e319O3JldHVybiBYW19dLmNhbGwoZy5leHBvcnRzLGcsZy5leHBvcnRzLEkpLGcubD0hMCxnLmV4cG9ydHN9cmV0dXJu'@;
put 'IEkubT1YLEkuYz15LEkuZD1mdW5jdGlvbihfLGcsQil7SS5vKF8sZyl8fE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfLGcse2VudW1lcmFibGU6ITAsZ2V0OkJ9KX0sSS5yPWZ1bmN0aW9uKF8pe3R5cGVvZiBTeW1ib2w8InUiJiZTeW1ib2wudG9TdHJpbmdUYWcmJk9iamVjdC5kZWZpbmVQcm9w'@;
put 'ZXJ0eShfLFN5bWJvbC50b1N0cmluZ1RhZyx7dmFsdWU6Ik1vZHVsZSJ9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoXywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9LEkudD1mdW5jdGlvbihfLGcpe2lmKDEmZyYmKF89SShfKSksOCZnfHw0JmcmJiJvYmplY3QiPT10eXBlb2YgXyYmXyYmXy5f'@;
put 'X2VzTW9kdWxlKXJldHVybiBfO3ZhciBCPU9iamVjdC5jcmVhdGUobnVsbCk7aWYoSS5yKEIpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShCLCJkZWZhdWx0Iix7ZW51bWVyYWJsZTohMCx2YWx1ZTpffSksMiZnJiYic3RyaW5nIiE9dHlwZW9mIF8pZm9yKHZhciB3IGluIF8pSS5kKEIsdyxmdW5j'@;
put 'dGlvbihQKXtyZXR1cm4gX1tQXX0uYmluZChudWxsLHcpKTtyZXR1cm4gQn0sSS5uPWZ1bmN0aW9uKF8pe3ZhciBnPV8mJl8uX19lc01vZHVsZT9mdW5jdGlvbigpe3JldHVybiBfLmRlZmF1bHR9OmZ1bmN0aW9uKCl7cmV0dXJuIF99O3JldHVybiBJLmQoZywiYSIsZyksZ30sSS5vPWZ1bmN0'@;
put 'aW9uKF8sZyl7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChfLGcpfSxJLnA9IiIsSShJLnM9Ii4vcHJvamVjdHMvaWNvbnMvc3JjL3NoYXBlcy9hbGwtc2hhcGVzLnRzIil9KHsiLi9wcm9qZWN0cy9pY29ucy9zcmMvc2hhcGVzL2FsbC1zaGFwZXMudHMiOgov'@;
put 'KiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCiAgICAgICAgICAgICAgICAgICEqKiogLi9wcm9qZWN0cy9pY29ucy9zcmMvc2hhcGVzL2FsbC1zaGFwZXMudHMgKioqIQogICAgICAgICAgICAgICAgICBcKioqKioqKioqKioqKioqKioqKioq'@;
put 'KioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLyohIG5vIHN0YXRpYyBleHBvcnRzIGZvdW5kICovZnVuY3Rpb24oWCx5LEkpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoeSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSkseS5BbGxTaGFwZXM9dm9pZCAwO3ZhciBfPUko'@;
put 'Ci8qISAuL2NoYXJ0LXNoYXBlcyAqLwoiLi9wcm9qZWN0cy9pY29ucy9zcmMvc2hhcGVzL2NoYXJ0LXNoYXBlcy50cyIpLGc9SSgKLyohIC4vY29tbWVyY2Utc2hhcGVzICovCiIuL3Byb2plY3RzL2ljb25zL3NyYy9zaGFwZXMvY29tbWVyY2Utc2hhcGVzLnRzIiksQj1JKAovKiEgLi9jb3Jl'@;
put 'LXNoYXBlcyAqLwoiLi9wcm9qZWN0cy9pY29ucy9zcmMvc2hhcGVzL2NvcmUtc2hhcGVzLnRzIiksdz1JKAovKiEgLi9lc3NlbnRpYWwtc2hhcGVzICovCiIuL3Byb2plY3RzL2ljb25zL3NyYy9zaGFwZXMvZXNzZW50aWFsLXNoYXBlcy50cyIpLFA9SSgKLyohIC4vbWVkaWEtc2hhcGVzICov'@;
put 'CiIuL3Byb2plY3RzL2ljb25zL3NyYy9zaGFwZXMvbWVkaWEtc2hhcGVzLnRzIiksRj1JKAovKiEgLi9zb2NpYWwtc2hhcGVzICovCiIuL3Byb2plY3RzL2ljb25zL3NyYy9zaGFwZXMvc29jaWFsLXNoYXBlcy50cyIpLE89SSgKLyohIC4vdGVjaG5vbG9neS1zaGFwZXMgKi8KIi4vcHJvamVj'@;
put 'dHMvaWNvbnMvc3JjL3NoYXBlcy90ZWNobm9sb2d5LXNoYXBlcy50cyIpLHo9SSgKLyohIC4vdGV4dC1lZGl0LXNoYXBlcyAqLwoiLi9wcm9qZWN0cy9pY29ucy9zcmMvc2hhcGVzL3RleHQtZWRpdC1zaGFwZXMudHMiKSxOPUkoCi8qISAuL3RyYXZlbC1zaGFwZXMgKi8KIi4vcHJvamVjdHMv'@;
put 'aWNvbnMvc3JjL3NoYXBlcy90cmF2ZWwtc2hhcGVzLnRzIiksTD1bQi5Db3JlU2hhcGVzLGcuQ29tbWVyY2VTaGFwZXMsdy5Fc3NlbnRpYWxTaGFwZXMsUC5NZWRpYVNoYXBlcyxGLlNvY2lhbFNoYXBlcyxPLlRlY2hub2xvZ3lTaGFwZXMsTi5UcmF2ZWxTaGFwZXMsXy5DaGFydFNoYXBlcyx6'@;
put 'LlRleHRFZGl0U2hhcGVzXSxLPXt9O3kuQWxsU2hhcGVzPUs7Zm9yKHZhciBVPTAsVz1MO1U8Vy5sZW5ndGg7VSsrKXt2YXIgWT1XW1VdO2Zvcih2YXIgcSBpbiBZKVkuaGFzT3duUHJvcGVydHkocSkmJihLW3FdPVlbcV0pfXR5cGVvZiB3aW5kb3c8InUiJiZ3aW5kb3cuaGFzT3duUHJvcGVy'@;
put 'dHkoIkNsYXJpdHlJY29ucyIpJiZ3aW5kb3cuQ2xhcml0eUljb25zLmFkZChLKX0sIi4vcHJvamVjdHMvaWNvbnMvc3JjL3NoYXBlcy9jaGFydC1zaGFwZXMudHMiOgovKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKICAgICAgICAgICAg'@;
put 'ICAgICAgISoqKiAuL3Byb2plY3RzL2ljb25zL3NyYy9zaGFwZXMvY2hhcnQtc2hhcGVzLnRzICoqKiEKICAgICAgICAgICAgICAgICAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLyohIG5vIHN0YXRpYyBleHBvcnRzIGZvdW5kICovZnVu'@;
put 'Y3Rpb24oWCx5LEkpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoeSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSkseS5DaGFydFNoYXBlcz15LkNsclNoYXBlQmVsbEN1cnZlPXkuQ2xyU2hhcGVUaWNrQ2hhcnQ9eS5DbHJTaGFwZVNjYXR0ZXJQbG90PXkuQ2xyU2hhcGVQaWVD'@;
put 'aGFydD15LkNsclNoYXBlTGluZUNoYXJ0PXkuQ2xyU2hhcGVIZWF0TWFwPXkuQ2xyU2hhcGVHcmlkQ2hhcnQ9eS5DbHJTaGFwZUN1cnZlQ2hhcnQ9eS5DbHJTaGFwZUNsb3VkQ2hhcnQ9eS5DbHJTaGFwZUJ1YmJsZUNoYXJ0PXkuQ2xyU2hhcGVCb3hQbG90PXkuQ2xyU2hhcGVCYXJDaGFydD15'@;
put 'LkNsclNoYXBlQXhpc0NoYXJ0PXZvaWQgMDt2YXIgXz1JKAovKiEgLi4vdXRpbHMvZGVzY3JpcHRvci1jb25maWcgKi8KIi4vcHJvamVjdHMvaWNvbnMvc3JjL3V0aWxzL2Rlc2NyaXB0b3ItY29uZmlnLnRzIiksZz1JKAovKiEgLi4vdXRpbHMvc3ZnLXRhZy1nZW5lcmF0b3IgKi8KIi4vcHJv'@;
put 'amVjdHMvaWNvbnMvc3JjL3V0aWxzL3N2Zy10YWctZ2VuZXJhdG9yLnRzIik7eS5DbHJTaGFwZUF4aXNDaGFydD0oMCxnLmNsckljb25TVkcpKCdcbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0gMzIgNSBMIDQgNSBDIDIuODk1IDUgMiA1'@;
put 'Ljg5NSAyIDcgTCAyIDI5IEMgMiAzMC4xMDUgMi44OTUgMzEgNCAzMSBMIDMyIDMxIEMgMzMuMTA1IDMxIDM0IDMwLjEwNSAzNCAyOSBMIDM0IDcgQyAzNCA1Ljg5NSAzMy4xMDUgNSAzMiA1IFogTSA0IDI5IEwgNCA3IEwgMzIgNyBMIDMyIDI5IFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1p'@;
put 'LW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0gNi4wMDcgMjYuNzMxIEwgMjcuNzMgMjYuNzMgQyAyOC40OSAyNi42NyAyOC45MSAyNS44IDI4LjQ3IDI1LjE3IEMgMjguMyAyNC45MiAyOC4wMyAyNC43NiAyNy43MyAyNC43NCBMIDguMDAxIDI0LjczNiBMIDguMDEgMTEuMDEg'@;
put 'QyA4LjAxIDEwLjIzIDcuMTcgOS43NSA2LjUgMTAuMTQgQyA2LjE5IDEwLjMxIDYgMTAuNjUgNiAxMS4wMSBMIDYuMDA3IDI2LjczMSBaIi8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0gMzQgNyBMIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEw'@;
put 'NSAzMSAzMiAzMSBMIDQgMzEgQyAyLjg5NiAzMSAyIDMwLjEwNSAyIDI5IEwgMiA3IEMgMiA1Ljg5NiAyLjg5NiA1IDQgNSBMIDMyIDUgQyAzMy4xMDUgNSAzNCA1Ljg5NiAzNCA3IFogTSA2LjAwNyAyNi43MzEgTCAyNy43MyAyNi43MyBDIDI4LjQ5IDI2LjY3IDI4LjkxIDI1LjggMjguNDcg'@;
put 'MjUuMTcgQyAyOC4zIDI0LjkyIDI4LjAzIDI0Ljc2IDI3LjczIDI0Ljc0IEwgOC4wMDEgMjQuNzM2IEwgOC4wMSAxMS4wMSBDIDguMDEgMTAuMjMgNy4xNyA5Ljc1IDYuNSAxMC4xNCBDIDYuMTkgMTAuMzEgNiAxMC42NSA2IDExLjAxIFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxp'@;
put 'bmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiBkPSJNIDMyIDEzLjIyIEwgMzIgMjkgTCA0IDI5IEwgNCA3IEwgMjIuNTcgNyBDIDIyLjUyNCA2LjY2OCAyMi41MDEgNi4zMzQgMjIuNSA2IEMgMjIuNTAxIDUuNjY1IDIyLjUyNCA1LjMzMSAyMi41NyA1IEwgNCA1IEMg'@;
put 'Mi44OTUgNSAyIDUuODk1IDIgNyBMIDIgMjkgQyAyIDMwLjEwNCAyLjg5NSAzMSA0IDMxIEwgMzIgMzEgQyAzMy4xMDQgMzEgMzQgMzAuMTA0IDM0IDI5IEwgMzQgMTIuMzQgQyAzMy4zOCAxMi43MyAzMi43MDYgMTMuMDI2IDMyIDEzLjIyIFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91'@;
put 'dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiBkPSJNIDYuMDA3IDI2LjczMSBMIDI3LjczIDI2LjczIEMgMjguNDkgMjYuNjcgMjguOTEgMjUuOCAyOC40NyAyNS4xNyBDIDI4LjMgMjQuOTIgMjguMDMgMjQuNzYgMjcuNzMgMjQuNzQgTCA4LjAwMSAyNC43MzYg'@;
put 'TCA4LjAxIDExLjAxIEMgOC4wMSAxMC4yMyA3LjE3IDkuNzUgNi41IDEwLjE0IEMgNi4xOSAxMC4zMSA2IDEwLjY1IDYgMTEuMDEgTCA2LjAwNyAyNi43MzEgWiIvPlxuICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCBj'@;
put 'bHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgZD0iTSAzNCAxMi4zNCBMIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEwNSAzMSAzMiAzMSBMIDQgMzEgQyAyLjg5NiAz'@;
put 'MSAyIDMwLjEwNSAyIDI5IEwgMiA3IEMgMiA1Ljg5NiAyLjg5NiA1IDQgNSBMIDIyLjU3IDUgQyAyMS45NjkgOS4yMzMgMjUuMDUgMTMuMSAyOS4zMSAxMy40NiBMIDMwLjMyIDEzLjQ4IEMgMzEuNjI2IDEzLjQyOSAzMi44OTUgMTMuMDM2IDM0IDEyLjM0IFogTSA2LjAwNyAyNi43MzEgTCAy'@;
put 'Ny43MyAyNi43MyBDIDI4LjQ5IDI2LjY3IDI4LjkxIDI1LjggMjguNDcgMjUuMTcgQyAyOC4zIDI0LjkyIDI4LjAzIDI0Ljc2IDI3LjczIDI0Ljc0IEwgOC4wMDEgMjQuNzM2IEwgOC4wMSAxMS4wMSBDIDguMDEgMTAuMjMgNy4xNyA5Ljc1IDYuNSAxMC4xNCBDIDYuMTkgMTAuMzEgNiAxMC42'@;
put 'NSA2IDExLjAxIFoiLz5cbiAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRs'@;
put 'aW5lLXBhdGgtMS0tYWxlcnRlZCIgZD0iTSAzNCAyOSBDIDM0IDMwLjEwNSAzMy4xMDUgMzEgMzIgMzEgTCA0IDMxIEMgMi44OTUgMzEgMiAzMC4xMDUgMiAyOSBMIDIgNyBDIDIgNS44OTUgMi44OTUgNSA0IDUgTCAyMS45NTggNSBMIDIwLjc4NiA3IEwgNCA3IEwgNCAyOSBMIDMyIDI5IEwg'@;
put 'MzIgMTUuMzU3IEwgMzQgMTUuMzU3IFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiIGQ9Ik0gNi4wMDcgMjYuNzMxIEwgMjcuNzMgMjYuNzMgQyAyOC40OSAyNi42NyAyOC45MSAyNS44IDI4LjQ3IDI1LjE3'@;
put 'IEMgMjguMyAyNC45MiAyOC4wMyAyNC43NiAyNy43MyAyNC43NCBMIDguMDAxIDI0LjczNiBMIDguMDEgMTEuMDEgQyA4LjAxIDEwLjIzIDcuMTcgOS43NSA2LjUgMTAuMTQgQyA2LjE5IDEwLjMxIDYgMTAuNjUgNiAxMS4wMSBMIDYuMDA3IDI2LjczMSBaIi8+XG4gIDxwYXRoIGNsYXNzPSJj'@;
put 'bHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNIDI2Ljg1NCAxLjE0NCBMIDIxLjEzNCAxMS4wMDQgQyAyMC41NzkgMTEuODE4IDIxLjExNCAxMi45MjggMjIuMDk3IDEzLjAwMSBDIDIyLjE0MiAxMy4wMDUgMjIuMTg4'@;
put 'IDEzLjAwNiAyMi4yMzQgMTMuMDA0IEwgMzMuNjg0IDEzLjAwNCBDIDM0LjY2OSAxMy4wMzYgMzUuMzE5IDExLjk5MSAzNC44NTUgMTEuMTIyIEMgMzQuODM0IDExLjA4MSAzNC44MSAxMS4wNDIgMzQuNzg0IDExLjAwNCBMIDI5LjA2NCAxLjE0NCBDIDI4LjU3IDAuMjk5IDI3LjM0OCAwLjI5'@;
put 'OSAyNi44NTQgMS4xNDQgWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiBkPSJNIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEwNSAzMSAzMiAzMSBMIDQgMzEgQyAyLjg5NiAzMSAyIDMwLjEwNSAyIDI5IEwgMiA3IEMg'@;
put 'MiA1Ljg5NiAyLjg5NiA1IDQgNSBMIDIxLjk1OCA1IEwgMTcuNjI1IDEyLjM5NSBDIDE2Ljc5NSAxMy42MDEgMTcuNTk0IDE1LjI0NSAxOS4wNjQgMTUuMzUxIEMgMTkuMTM0IDE1LjM1NyAxOS4yMDEgMTUuMzU5IDE5LjI3IDE1LjM1NyBMIDM0IDE1LjM1NyBaIE0gNi4wMDcgMjYuNzMxIEwg'@;
put 'MjcuNzMgMjYuNzMgQyAyOC40OSAyNi42NyAyOC45MSAyNS44IDI4LjQ3IDI1LjE3IEMgMjguMyAyNC45MiAyOC4wMyAyNC43NiAyNy43MyAyNC43NCBMIDguMDAxIDI0LjczNiBMIDguMDEgMTEuMDEgQyA4LjAxIDEwLjIzIDcuMTcgOS43NSA2LjUgMTAuMTQgQyA2LjE5IDEwLjMxIDYgMTAu'@;
put 'NjUgNiAxMS4wMSBaIi8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0gMjYuODU0IDEuMTQ0IEwgMjEuMTM0IDExLjAwNCBDIDIwLjU3OSAxMS44MTggMjEuMTE0IDEyLjkyOCAyMi4wOTcg'@;
put 'MTMuMDAxIEMgMjIuMTQyIDEzLjAwNSAyMi4xODggMTMuMDA2IDIyLjIzNCAxMy4wMDQgTCAzMy42ODQgMTMuMDA0IEMgMzQuNjY5IDEzLjAzNiAzNS4zMTkgMTEuOTkxIDM0Ljg1NSAxMS4xMjIgQyAzNC44MzQgMTEuMDgxIDM0LjgxIDExLjA0MiAzNC43ODQgMTEuMDA0IEwgMjkuMDY0IDEu'@;
put 'MTQ0IEMgMjguNTcgMC4yOTkgMjcuMzQ4IDAuMjk5IDI2Ljg1NCAxLjE0NCBaIi8+JykseS5DbHJTaGFwZUJhckNoYXJ0PSgwLGcuY2xySWNvblNWRykoJ1xuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMyLDVINEEyLDIsMCwwLDAsMiw3'@;
put 'VjI5YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlY3QTIsMiwwLDAsMCwzMiw1Wk00LDI5VjdIMzJWMjlaIj48L3BhdGg+XG4gIDxwYXRoIGQ9Ik0gNyAxMCBMIDEzIDEwIEwgMTMgMjYgTCAxMS40IDI2IEwgMTEuNCAxMS42IEwgOC42IDExLjYgTCA4LjYgMjYgTCA3IDI2IFoiIGNs'@;
put 'YXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIj48L3BhdGg+XG4gIDxwYXRoIGQ9Ik0gMTUgMTkgTCAyMSAxOSBMIDIxIDI2IEwgMTkuNCAyNiBMIDE5LjQgMjAuNiBMIDE2LjYgMjAuNiBMIDE2LjYgMjYgTCAxNSAyNiBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHIt'@;
put 'aS1vdXRsaW5lLXBhdGgtMyI+PC9wYXRoPlxuICA8cGF0aCBkPSJNIDIzIDE2IEwgMjkgMTYgTCAyOSAyNiBMIDI3LjQgMjYgTCAyNy40IDE3LjYgTCAyNC42IDE3LjYgTCAyNC42IDI2IEwgMjMgMjYgWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiPjwvcGF0'@;
put 'aD5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTSAzNCA3IEwgMzQgMjkgQyAzNCAzMC4xMDUgMzMuMTA1IDMxIDMyIDMxIEwgNCAzMSBDIDIuODk1IDMxIDIgMzAuMTA1IDIgMjkgTCAyIDcgQyAyIDUuODk1IDIuODk1IDUgNCA1IEwgMzIgNSBD'@;
put 'IDMzLjEwNSA1IDM0IDUuODk1IDM0IDcgWiBNIDcgMjYgTCAxMyAyNiBMIDEzIDEwIEwgNyAxMCBaIE0gMTUgMjYgTCAyMSAyNiBMIDIxIDE5IEwgMTUgMTkgWiBNIDIzIDI2IEwgMjkgMjYgTCAyOSAxNiBMIDIzIDE2IFoiPjwvcGF0aD5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUt'@;
put 'LWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiBkPSJNIDMyIDEzLjIyIEwgMzIgMjkgTCA0IDI5IEwgNCA3IEwgMjIuNTcgNyBDIDIyLjUyNCA2LjY2OCAyMi41MDEgNi4zMzQgMjIuNSA2IEMgMjIuNTAxIDUuNjY1IDIyLjUyNCA1LjMzMSAyMi41NyA1IEwgNCA1IEMgMi44'@;
put 'OTUgNSAyIDUuODk1IDIgNyBMIDIgMjkgQyAyIDMwLjEwNCAyLjg5NSAzMSA0IDMxIEwgMzIgMzEgQyAzMy4xMDUgMzEgMzQgMzAuMTA0IDM0IDI5IEwgMzQgMTIuMzQgQyAzMy4zOCAxMi43MyAzMi43MDYgMTMuMDI2IDMyIDEzLjIyIFoiPjwvcGF0aD5cbiAgPHBhdGggZD0iTSA3IDEwIEwg'@;
put 'MTMgMTAgTCAxMyAyNiBMIDExLjQgMjYgTCAxMS40IDExLjYgTCA4LjYgMTEuNiBMIDguNiAyNiBMIDcgMjYgWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIj48L3BhdGg+XG4gIDxwYXRoIGQ9Ik0gMTUgMTkgTCAyMSAxOSBMIDIx'@;
put 'IDI2IEwgMTkuNCAyNiBMIDE5LjQgMjAuNiBMIDE2LjYgMjAuNiBMIDE2LjYgMjYgTCAxNSAyNiBaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiPjwvcGF0aD5cbiAgPHBhdGggZD0iTSAyMyAxNiBMIDI5IDE2IEwgMjkgMjYgTCAy'@;
put 'Ny40IDI2IEwgMjcuNCAxNy42IEwgMjQuNiAxNy42IEwgMjQuNiAyNiBMIDIzIDI2IFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCI+PC9wYXRoPlxuICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWkt'@;
put 'b3V0bGluZS1wYXRoLTUtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSI+PC9jaXJjbGU+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiBkPSJNIDM0IDEyLjM0IEwgMzQgMjkgQyAzNCAzMC4xMDUg'@;
put 'MzMuMTA1IDMxIDMyIDMxIEwgNCAzMSBDIDIuODk1IDMxIDIgMzAuMTA1IDIgMjkgTCAyIDcgQyAyIDUuODk1IDIuODk1IDUgNCA1IEwgMjIuNTcgNSBDIDIxLjk2OSA5LjIzMyAyNS4wNSAxMy4xIDI5LjMxIDEzLjQ2IEwgMzAuMzIgMTMuNDggQyAzMS42MjUgMTMuNDI5IDMyLjg5NSAxMy4w'@;
put 'MzYgMzQgMTIuMzQgWiBNIDcgMjYgTCAxMyAyNiBMIDEzIDEwIEwgNyAxMCBaIE0gMTUgMjYgTCAyMSAyNiBMIDIxIDE5IEwgMTUgMTkgWiBNIDIzIDI2IEwgMjkgMjYgTCAyOSAxNiBMIDIzIDE2IFoiPjwvcGF0aD5cbiAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHIt'@;
put 'aS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSI+PC9jaXJjbGU+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiBkPSJNIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEw'@;
put 'NSAzMSAzMiAzMSBMIDQgMzEgQyAyLjg5NSAzMSAyIDMwLjEwNSAyIDI5IEwgMiA3IEMgMiA1Ljg5NSAyLjg5NSA1IDQgNSBMIDIxLjk1OCA1IEwgMjAuNzg2IDcgTCA0IDcgTCA0IDI5IEwgMzIgMjkgTCAzMiAxNS4zNTcgTCAzNCAxNS4zNTcgWiI+PC9wYXRoPlxuICA8cGF0aCBkPSJNIDcg'@;
put 'MTAgTCAxMyAxMCBMIDEzIDI2IEwgMTEuNCAyNiBMIDExLjQgMTEuNiBMIDguNiAxMS42IEwgOC42IDI2IEwgNyAyNiBaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCI+PC9wYXRoPlxuICA8cGF0aCBkPSJNIDE1IDE5IEwgMjEg'@;
put 'MTkgTCAyMSAyNiBMIDE5LjQgMjYgTCAxOS40IDIwLjYgTCAxNi42IDIwLjYgTCAxNi42IDI2IEwgMTUgMjYgWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiPjwvcGF0aD5cbiAgPHBhdGggZD0iTSAyMyAxNiBMIDI5IDE2IEwg'@;
put 'MjkgMjYgTCAyNy40IDI2IEwgMjcuNCAxNy42IEwgMjQuNiAxNy42IEwgMjQuNiAyNiBMIDIzIDI2IFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIj48L3BhdGg+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVy'@;
put 'dGVkIGNsci1pLW91dGxpbmUtcGF0aC01LS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNIDI2Ljg1NCAxLjE0NCBMIDIxLjEzNCAxMS4wMDQgQyAyMC41NzkgMTEuODE4IDIxLjExNCAxMi45MjggMjIuMDk3IDEzLjAwMSBDIDIyLjE0MiAxMy4wMDUgMjIuMTg4IDEzLjAwNiAyMi4yMzQgMTMu'@;
put 'MDA0IEwgMzMuNjg0IDEzLjAwNCBDIDM0LjY2OSAxMy4wMzYgMzUuMzE5IDExLjk5MSAzNC44NTUgMTEuMTIyIEMgMzQuODM0IDExLjA4MSAzNC44MSAxMS4wNDIgMzQuNzg0IDExLjAwNCBMIDI5LjA2NCAxLjE0NCBDIDI4LjU3IDAuMjk5IDI3LjM0OCAwLjI5OSAyNi44NTQgMS4xNDQgWiI+'@;
put 'PC9wYXRoPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiBkPSJNIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEwNSAzMSAzMiAzMSBMIDQgMzEgQyAyLjg5NSAzMSAyIDMwLjEwNSAyIDI5IEwgMiA3IEMgMiA1Ljg5NSAyLjg5'@;
put 'NSA1IDQgNSBMIDIxLjk1OCA1IEwgMTcuNjI1IDEyLjM5NSBDIDE2Ljc5NSAxMy42MDEgMTcuNTk0IDE1LjI0NSAxOS4wNjQgMTUuMzUxIEMgMTkuMTM0IDE1LjM1NyAxOS4yMDEgMTUuMzU5IDE5LjI3IDE1LjM1NyBMIDM0IDE1LjM1NyBaIE0gNyAyNiBMIDEzIDI2IEwgMTMgMTAgTCA3IDEw'@;
put 'IFogTSAxNSAyNiBMIDIxIDI2IEwgMjEgMTkgTCAxNSAxOSBaIE0gMjMgMjYgTCAyOSAyNiBMIDI5IDE2IEwgMjMgMTYgWiI+PC9wYXRoPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNIDI2'@;
put 'Ljg1NCAxLjE0NCBMIDIxLjEzNCAxMS4wMDQgQyAyMC41NzkgMTEuODE4IDIxLjExNCAxMi45MjggMjIuMDk3IDEzLjAwMSBDIDIyLjE0MiAxMy4wMDUgMjIuMTg4IDEzLjAwNiAyMi4yMzQgMTMuMDA0IEwgMzMuNjg0IDEzLjAwNCBDIDM0LjY2OSAxMy4wMzYgMzUuMzE5IDExLjk5MSAzNC44'@;
put 'NTUgMTEuMTIyIEMgMzQuODM0IDExLjA4MSAzNC44MSAxMS4wNDIgMzQuNzg0IDExLjAwNCBMIDI5LjA2NCAxLjE0NCBDIDI4LjU3IDAuMjk5IDI3LjM0OCAwLjI5OSAyNi44NTQgMS4xNDQgWiI+PC9wYXRoPicpLHkuQ2xyU2hhcGVCb3hQbG90PSgwLGcuY2xySWNvblNWRykoJ1xuICA8cGF0'@;
put 'aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMyLDVINEEyLDIsMCwwLDAsMiw3VjI5YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlY3QTIsMiwwLDAsMCwzMiw1Wk00LDI5VjdIMzJWMjlaIj48L3BhdGg+XG4gIDxwYXRoIGQ9Ik0gNyAxMiBM'@;
put 'IDE3IDEyIEwgMTcgMjYgTCA3IDI2IEwgNyAxMiBaIE0gOC42IDI0LjQgTCAxNS40IDI0LjQgTCAxNS40IDE4LjggTCA4LjYgMTguOCBMIDguNiAyNC40IFogTSAxNS40IDEzLjYgTCA4LjYgMTMuNiBMIDguNiAxNy4yIEwgMTUuNCAxNy4yIEwgMTUuNCAxMy42IFoiIGNsYXNzPSJjbHItaS1v'@;
put 'dXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIj48L3BhdGg+XG4gIDxwYXRoIGQ9Ik0gMTkgMjQgTCAyOSAyNCBMIDI5IDEwIEwgMTkgMTAgTCAxOSAyNCBaIE0gMjAuNiAxMS42IEwgMjcuNCAxMS42IEwgMjcuNCAxNy4yIEwgMjAuNiAxNy4yIEwgMjAuNiAxMS42IFogTSAyNy40IDIyLjQg'@;
put 'TCAyMC42IDIyLjQgTCAyMC42IDE4LjggTCAyNy40IDE4LjggTCAyNy40IDIyLjQgWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiPjwvcGF0aD5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTSAzNCA3IEwgMzQg'@;
put 'MjkgQyAzNCAzMC4xMDUgMzMuMTA1IDMxIDMyIDMxIEwgNCAzMSBDIDIuODk1IDMxIDIgMzAuMTA1IDIgMjkgTCAyIDcgQyAyIDUuODk1IDIuODk1IDUgNCA1IEwgMzIgNSBDIDMzLjEwNSA1IDM0IDUuODk1IDM0IDcgWiBNIDcgMjYgTCAxNyAyNiBMIDE3IDEyIEwgNyAxMiBaIE0gOSAxOSBM'@;
put 'IDE1IDE5IEwgMTUgMjQgTCA5IDI0IFogTSAxNSAxNyBMIDkgMTcgTCA5IDE0IEwgMTUgMTQgWiBNIDE5IDI0IEwgMjkgMjQgTCAyOSAxMCBMIDE5IDEwIFogTSAyMSAxMiBMIDI3IDEyIEwgMjcgMTcgTCAyMSAxNyBaIE0gMjcgMjIgTCAyMSAyMiBMIDIxIDE5IEwgMjcgMTkgWiI+PC9wYXRo'@;
put 'PlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0gMzIgMTMuMjIgTCAzMiAyOSBMIDQgMjkgTCA0IDcgTCAyMi41NyA3IEMgMjIuNTI0IDYuNjY4IDIyLjUwMSA2LjMzNCAyMi41IDYgQyAyMi41MDEgNS42NjUg'@;
put 'MjIuNTI0IDUuMzMxIDIyLjU3IDUgTCA0IDUgQyAyLjg5NSA1IDIgNS44OTUgMiA3IEwgMiAyOSBDIDIgMzAuMTA0IDIuODk1IDMxIDQgMzEgTCAzMiAzMSBDIDMzLjEwNSAzMSAzNCAzMC4xMDQgMzQgMjkgTCAzNCAxMi4zNCBDIDMzLjM4IDEyLjczIDMyLjcwNiAxMy4wMjYgMzIgMTMuMjIg'@;
put 'WiI+PC9wYXRoPlxuICA8cGF0aCBkPSJNIDcgMTIgTCAxNyAxMiBMIDE3IDI2IEwgNyAyNiBMIDcgMTIgWiBNIDguNiAyNC40IEwgMTUuNCAyNC40IEwgMTUuNCAxOC44IEwgOC42IDE4LjggTCA4LjYgMjQuNCBaIE0gMTUuNCAxMy42IEwgOC42IDEzLjYgTCA4LjYgMTcuMiBMIDE1LjQgMTcu'@;
put 'MiBMIDE1LjQgMTMuNiBaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiPjwvcGF0aD5cbiAgPHBhdGggZD0iTSAxOSAxMCBMIDIzLjcyOCAxMCBDIDI0LjEwNSAxMC41OTYgMjQuNTY0IDExLjEzNSAyNS4wOSAxMS42IEwgMjAuNiAx'@;
put 'MS42IEwgMjAuNiAxNy4yIEwgMjcuNCAxNy4yIEwgMjcuNCAxMi45ODcgQyAyNy45MDkgMTMuMTc3IDI4LjQ0NSAxMy4zMTMgMjkgMTMuMzg3IEwgMjkgMjQgTCAxOSAyNCBaIE0gMjcuNCAxOC44IEwgMjAuNiAxOC44IEwgMjAuNiAyMi40IEwgMjcuNCAyMi40IFoiIGNsYXNzPSJjbHItaS1v'@;
put 'dXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCI+PC9wYXRoPlxuICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSI+PC9jaXJjbGU+'@;
put 'XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiBkPSJNIDM0IDEyLjM0IEwgMzQgMjkgQyAzNCAzMC4xMDUgMzMuMTA1IDMxIDMyIDMxIEwgNCAzMSBDIDIuODk1IDMxIDIgMzAuMTA1IDIgMjkgTCAyIDcgQyAyIDUuODk1IDIu'@;
put 'ODk1IDUgNCA1IEwgMjIuNTcgNSBDIDIyLjMxMiA2LjgxNyAyMi43MzIgOC41NjYgMjMuNjMzIDEwIEwgMTkgMTAgTCAxOSAyNCBMIDI5IDI0IEwgMjkgMTMuNDI3IEMgMjkuMTAzIDEzLjQ0IDI5LjIwNiAxMy40NTEgMjkuMzEgMTMuNDYgTCAzMC4zMiAxMy40OCBDIDMxLjYyNSAxMy40Mjkg'@;
put 'MzIuODk1IDEzLjAzNiAzNCAxMi4zNCBaIE0gNyAyNiBMIDE3IDI2IEwgMTcgMTIgTCA3IDEyIFogTSA5IDE5IEwgMTUgMTkgTCAxNSAyNCBMIDkgMjQgWiBNIDE1IDE3IEwgOSAxNyBMIDkgMTQgTCAxNSAxNCBaIE0gMjEgMTIgTCAyNS40NzIgMTIgQyAyNS45NCAxMi4zNTIgMjYuNDUyIDEy'@;
put 'LjY1IDI3IDEyLjg4NSBMIDI3IDE3IEwgMjEgMTcgWiBNIDI3IDIyIEwgMjEgMjIgTCAyMSAxOSBMIDI3IDE5IFoiPjwvcGF0aD5cbiAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0i'@;
put 'NiIgcj0iNSI+PC9jaXJjbGU+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiBkPSJNIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEwNSAzMSAzMiAzMSBMIDQgMzEgQyAyLjg5NSAzMSAyIDMwLjEwNSAyIDI5IEwgMiA3'@;
put 'IEMgMiA1Ljg5NSAyLjg5NSA1IDQgNSBMIDIxLjk1OCA1IEwgMjAuNzg2IDcgTCA0IDcgTCA0IDI5IEwgMzIgMjkgTCAzMiAxNS4zNTcgTCAzNCAxNS4zNTcgWiI+PC9wYXRoPlxuICA8cGF0aCBkPSJNIDcgMTIgTCAxNyAxMiBMIDE3IDI2IEwgNyAyNiBMIDcgMTIgWiBNIDguNiAyNC40IEwg'@;
put 'MTUuNCAyNC40IEwgMTUuNCAxOC44IEwgOC42IDE4LjggTCA4LjYgMjQuNCBaIE0gMTUuNCAxMy42IEwgOC42IDEzLjYgTCA4LjYgMTcuMiBMIDE1LjQgMTcuMiBMIDE1LjQgMTMuNiBaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRl'@;
put 'ZCI+PC9wYXRoPlxuICA8cGF0aCBkPSJNIDI5IDI0IEwgMTkgMjQgTCAxOSAxNS4zNDUgQyAxOS4wMjEgMTUuMzQ4IDIwLjYgMTUuMzYgMjAuNiAxNS4zNiBMIDIwLjYgMTcuMiBMIDI3LjQgMTcuMiBMIDI3LjQgMTUuMzYgTCAyOSAxNS4zNTcgTCAyOSAyNCBaIE0gMjcuNCAxOC44IEwgMjAu'@;
put 'NiAxOC44IEwgMjAuNiAyMi40IEwgMjcuNCAyMi40IEwgMjcuNCAxOC44IFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVkIj48L3BhdGg+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxp'@;
put 'bmUtcGF0aC00LS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNIDI2Ljg1NCAxLjE0NCBMIDIxLjEzNCAxMS4wMDQgQyAyMC41NzkgMTEuODE4IDIxLjExNCAxMi45MjggMjIuMDk3IDEzLjAwMSBDIDIyLjE0MiAxMy4wMDUgMjIuMTg4IDEzLjAwNiAyMi4yMzQgMTMuMDA0IEwgMzMuNjg0IDEz'@;
put 'LjAwNCBDIDM0LjY2OSAxMy4wMzYgMzUuMzE5IDExLjk5MSAzNC44NTUgMTEuMTIyIEMgMzQuODM0IDExLjA4MSAzNC44MSAxMS4wNDIgMzQuNzg0IDExLjAwNCBMIDI5LjA2NCAxLjE0NCBDIDI4LjU3IDAuMjk5IDI3LjM0OCAwLjI5OSAyNi44NTQgMS4xNDQgWiI+PC9wYXRoPlxuICA8cGF0'@;
put 'aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiBkPSJNIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEwNSAzMSAzMiAzMSBMIDQgMzEgQyAyLjg5NSAzMSAyIDMwLjEwNSAyIDI5IEwgMiA3IEMgMiA1Ljg5NSAyLjg5NSA1IDQgNSBMIDIxLjk1'@;
put 'OCA1IEwgMTkuMDI4IDEwIEwgMTkgMTAgTCAxOSAxMC4wNDggTCAxNy42MjUgMTIuMzk1IEMgMTYuODA3IDEzLjU4MyAxNy41NzEgMTUuMTk3IDE5IDE1LjM0NSBMIDE5IDI0IEwgMjkgMjQgTCAyOSAxNS4zNTcgTCAzNCAxNS4zNTcgWiBNIDcgMjYgTCAxNyAyNiBMIDE3IDEyIEwgNyAxMiBa'@;
put 'IE0gOSAxOSBMIDE1IDE5IEwgMTUgMjQgTCA5IDI0IFogTSAxNSAxNyBMIDkgMTcgTCA5IDE0IEwgMTUgMTQgWiBNIDI3IDE3IEwgMjEgMTcgTCAyMSAxNS4zNTcgTCAyNyAxNS4zNTcgWiBNIDI3IDIyIEwgMjEgMjIgTCAyMSAxOSBMIDI3IDE5IFoiPjwvcGF0aD5cbiAgPHBhdGggY2xhc3M9'@;
put 'ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTSAyNi44NTQgMS4xNDQgTCAyMS4xMzQgMTEuMDA0IEMgMjAuNTc5IDExLjgxOCAyMS4xMTQgMTIuOTI4IDIyLjA5NyAxMy4wMDEgQyAyMi4xNDIgMTMuMDA1IDIyLjE4OCAx'@;
put 'My4wMDYgMjIuMjM0IDEzLjAwNCBMIDMzLjY4NCAxMy4wMDQgQyAzNC42NjkgMTMuMDM2IDM1LjMxOSAxMS45OTEgMzQuODU1IDExLjEyMiBDIDM0LjgzNCAxMS4wODEgMzQuODEgMTEuMDQyIDM0Ljc4NCAxMS4wMDQgTCAyOS4wNjQgMS4xNDQgQyAyOC41NyAwLjI5OSAyNy4zNDggMC4yOTkg'@;
put 'MjYuODU0IDEuMTQ0IFoiPjwvcGF0aD4nKSx5LkNsclNoYXBlQnViYmxlQ2hhcnQ9KDAsZy5jbHJJY29uU1ZHKSgnXG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNIDMyIDUgTCA0IDUgQyAyLjg5NSA1IDIgNS44OTUgMiA3IEwgMiAyOSBD'@;
put 'IDIgMzAuMTA1IDIuODk1IDMxIDQgMzEgTCAzMiAzMSBDIDMzLjEwNSAzMSAzNCAzMC4xMDUgMzQgMjkgTCAzNCA3IEMgMzQgNS44OTUgMzMuMTA1IDUgMzIgNSBaIE0gNCAyOSBMIDQgNyBMIDMyIDcgTCAzMiAyOSBaIj48L3BhdGg+XG4gIDxwYXRoIGQ9Ik0gMjkgMTggQyAyOSAxOS42NTcg'@;
put 'MjcuNjU3IDIxIDI2IDIxIEMgMjQuMzQzIDIxIDIzIDE5LjY1NyAyMyAxOCBDIDIzIDE2LjM0MyAyNC4zNDMgMTUgMjYgMTUgQyAyNy42NTcgMTUgMjkgMTYuMzQzIDI5IDE4IFogTSAyNiAxNi42IEMgMjUuMjI3IDE2LjYgMjQuNiAxNy4yMjcgMjQuNiAxOCBDIDI0LjYgMTguNzczIDI1LjIy'@;
put 'NyAxOS40IDI2IDE5LjQgQyAyNi43NzMgMTkuNCAyNy40IDE4Ljc3MyAyNy40IDE4IEMgMjcuNCAxNy4yMjcgMjYuNzczIDE2LjYgMjYgMTYuNiBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgcng9IjMiPjwvcGF0aD5cbiAgPHBhdGggZD0iTSAxNSAxNCBD'@;
put 'IDE1IDE2LjIwOSAxMy4yMDkgMTggMTEgMTggQyA4Ljc5MSAxOCA3IDE2LjIwOSA3IDE0IEMgNyAxMS43OTEgOC43OTEgMTAgMTEgMTAgQyAxMy4yMDkgMTAgMTUgMTEuNzkxIDE1IDE0IFogTSAxMSAxMS42IEMgOS42NzUgMTEuNiA4LjYgMTIuNjc1IDguNiAxNCBDIDguNiAxNS4zMjUgOS42'@;
put 'NzUgMTYuNCAxMSAxNi40IEMgMTIuMzI1IDE2LjQgMTMuNCAxNS4zMjUgMTMuNCAxNCBDIDEzLjQgMTIuNjc1IDEyLjMyNSAxMS42IDExIDExLjYgWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIHJ4PSIzIj48L3BhdGg+XG4gIDxwYXRoIGQ9Ik0gMjEgMjMg'@;
put 'QyAyMSAyNC42NTcgMTkuNjU3IDI2IDE4IDI2IEMgMTYuMzQzIDI2IDE1IDI0LjY1NyAxNSAyMyBDIDE1IDIxLjM0MyAxNi4zNDMgMjAgMTggMjAgQyAxOS42NTcgMjAgMjEgMjEuMzQzIDIxIDIzIFogTSAxOCAyMS42IEMgMTcuMjI3IDIxLjYgMTYuNiAyMi4yMjcgMTYuNiAyMyBDIDE2LjYg'@;
put 'MjMuNzczIDE3LjIyNyAyNC40IDE4IDI0LjQgQyAxOC43NzMgMjQuNCAxOS40IDIzLjc3MyAxOS40IDIzIEMgMTkuNCAyMi4yMjcgMTguNzczIDIxLjYgMTggMjEuNiBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgcng9IjMiPjwvcGF0aD5cbiAgPHBhdGgg'@;
put 'Y2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTSAzNCA3IEwgMzQgMjkgQyAzNCAzMC4xMDUgMzMuMTA1IDMxIDMyIDMxIEwgNCAzMSBDIDIuODk2IDMxIDIgMzAuMTA1IDIgMjkgTCAyIDcgQyAyIDUuODk2IDIuODk2IDUgNCA1IEwgMzIgNSBDIDMzLjEwNSA1IDM0'@;
put 'IDUuODk2IDM0IDcgWiBNIDExIDEwIEMgOC43OTEgMTAgNyAxMS43OTEgNyAxNCBDIDcgMTYuMjA5IDguNzkxIDE4IDExIDE4IEMgMTMuMjA5IDE4IDE1IDE2LjIwOSAxNSAxNCBDIDE1IDExLjc5MSAxMy4yMDkgMTAgMTEgMTAgWiBNIDI2IDE1IEMgMjQuMzQzIDE1IDIzIDE2LjM0MyAyMyAx'@;
put 'OCBDIDIzIDE5LjY1NyAyNC4zNDMgMjEgMjYgMjEgQyAyNy42NTcgMjEgMjkgMTkuNjU3IDI5IDE4IEMgMjkgMTYuMzQzIDI3LjY1NyAxNSAyNiAxNSBaIE0gMTggMjAgQyAxNi4zNDMgMjAgMTUgMjEuMzQzIDE1IDIzIEMgMTUgMjQuNjU3IDE2LjM0MyAyNiAxOCAyNiBDIDE5LjY1NyAyNiAy'@;
put 'MSAyNC42NTcgMjEgMjMgQyAyMSAyMS4zNDMgMTkuNjU3IDIwIDE4IDIwIFoiPjwvcGF0aD5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiBkPSJNIDMyIDEzLjIyIEwgMzIgMjkgTCA0IDI5IEwgNCA3IEwgMjIuNTcg'@;
put 'NyBDIDIyLjUyNCA2LjY2OCAyMi41MDEgNi4zMzQgMjIuNSA2IEMgMjIuNTAxIDUuNjY1IDIyLjUyNCA1LjMzMSAyMi41NyA1IEwgNCA1IEMgMi44OTUgNSAyIDUuODk1IDIgNyBMIDIgMjkgQyAyIDMwLjEwNCAyLjg5NSAzMSA0IDMxIEwgMzIgMzEgQyAzMy4xMDQgMzEgMzQgMzAuMTA0IDM0'@;
put 'IDI5IEwgMzQgMTIuMzQgQyAzMy4zOCAxMi43MyAzMi43MDYgMTMuMDI2IDMyIDEzLjIyIFoiPjwvcGF0aD5cbiAgPHBhdGggZD0iTSAyOSAxOCBDIDI5IDE5LjY1NyAyNy42NTcgMjEgMjYgMjEgQyAyNC4zNDMgMjEgMjMgMTkuNjU3IDIzIDE4IEMgMjMgMTYuMzQzIDI0LjM0MyAxNSAyNiAx'@;
put 'NSBDIDI3LjY1NyAxNSAyOSAxNi4zNDMgMjkgMTggWiBNIDI2IDE2LjYgQyAyNS4yMjcgMTYuNiAyNC42IDE3LjIyNyAyNC42IDE4IEMgMjQuNiAxOC43NzMgMjUuMjI3IDE5LjQgMjYgMTkuNCBDIDI2Ljc3MyAxOS40IDI3LjQgMTguNzczIDI3LjQgMTggQyAyNy40IDE3LjIyNyAyNi43NzMg'@;
put 'MTYuNiAyNiAxNi42IFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgcng9IjMiPjwvcGF0aD5cbiAgPHBhdGggZD0iTSAxNSAxNCBDIDE1IDE2LjIwOSAxMy4yMDkgMTggMTEgMTggQyA4Ljc5MSAxOCA3IDE2LjIwOSA3IDE0IEMg'@;
put 'NyAxMS43OTEgOC43OTEgMTAgMTEgMTAgQyAxMy4yMDkgMTAgMTUgMTEuNzkxIDE1IDE0IFogTSAxMSAxMS42IEMgOS42NzUgMTEuNiA4LjYgMTIuNjc1IDguNiAxNCBDIDguNiAxNS4zMjUgOS42NzUgMTYuNCAxMSAxNi40IEMgMTIuMzI1IDE2LjQgMTMuNCAxNS4zMjUgMTMuNCAxNCBDIDEz'@;
put 'LjQgMTIuNjc1IDEyLjMyNSAxMS42IDExIDExLjYgWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIiByeD0iMyI+PC9wYXRoPlxuICA8cGF0aCBkPSJNIDIxIDIzIEMgMjEgMjQuNjU3IDE5LjY1NyAyNiAxOCAyNiBDIDE2LjM0MyAy'@;
put 'NiAxNSAyNC42NTcgMTUgMjMgQyAxNSAyMS4zNDMgMTYuMzQzIDIwIDE4IDIwIEMgMTkuNjU3IDIwIDIxIDIxLjM0MyAyMSAyMyBaIE0gMTggMjEuNiBDIDE3LjIyNyAyMS42IDE2LjYgMjIuMjI3IDE2LjYgMjMgQyAxNi42IDIzLjc3MyAxNy4yMjcgMjQuNCAxOCAyNC40IEMgMTguNzczIDI0'@;
put 'LjQgMTkuNCAyMy43NzMgMTkuNCAyMyBDIDE5LjQgMjIuMjI3IDE4Ljc3MyAyMS42IDE4IDIxLjYgWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIiByeD0iMyI+PC9wYXRoPlxuICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5l'@;
put 'LS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSI+PC9jaXJjbGU+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiBkPSJNIDM0IDEyLjM0IEwgMzQg'@;
put 'MjkgQyAzNCAzMC4xMDUgMzMuMTA1IDMxIDMyIDMxIEwgNCAzMSBDIDIuODk2IDMxIDIgMzAuMTA1IDIgMjkgTCAyIDcgQyAyIDUuODk2IDIuODk2IDUgNCA1IEwgMjIuNTcgNSBDIDIxLjk2OSA5LjIzMyAyNS4wNSAxMy4xIDI5LjMxIDEzLjQ2IEwgMzAuMzIgMTMuNDggQyAzMS42MjYgMTMu'@;
put 'NDI5IDMyLjg5NSAxMy4wMzYgMzQgMTIuMzQgWiBNIDExIDEwIEMgOC43OTEgMTAgNyAxMS43OTEgNyAxNCBDIDcgMTYuMjA5IDguNzkxIDE4IDExIDE4IEMgMTMuMjA5IDE4IDE1IDE2LjIwOSAxNSAxNCBDIDE1IDExLjc5MSAxMy4yMDkgMTAgMTEgMTAgWiBNIDI2IDE1IEMgMjQuMzQzIDE1'@;
put 'IDIzIDE2LjM0MyAyMyAxOCBDIDIzIDE5LjY1NyAyNC4zNDMgMjEgMjYgMjEgQyAyNy42NTcgMjEgMjkgMTkuNjU3IDI5IDE4IEMgMjkgMTYuMzQzIDI3LjY1NyAxNSAyNiAxNSBaIE0gMTggMjAgQyAxNi4zNDMgMjAgMTUgMjEuMzQzIDE1IDIzIEMgMTUgMjQuNjU3IDE2LjM0MyAyNiAxOCAy'@;
put 'NiBDIDE5LjY1NyAyNiAyMSAyNC42NTcgMjEgMjMgQyAyMSAyMS4zNDMgMTkuNjU3IDIwIDE4IDIwIFoiPjwvcGF0aD5cbiAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0i'@;
put 'NSI+PC9jaXJjbGU+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiBkPSJNIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEwNSAzMSAzMiAzMSBMIDQgMzEgQyAyLjg5NSAzMSAyIDMwLjEwNSAyIDI5IEwgMiA3IEMgMiA1'@;
put 'Ljg5NSAyLjg5NSA1IDQgNSBMIDIxLjk1OCA1IEwgMjAuNzg2IDcgTCA0IDcgTCA0IDI5IEwgMzIgMjkgTCAzMiAxNS4zNTcgTCAzNCAxNS4zNTcgWiI+PC9wYXRoPlxuICA8cGF0aCBkPSJNIDI5IDE4IEMgMjkgMTkuNjU3IDI3LjY1NyAyMSAyNiAyMSBDIDI0LjM0MyAyMSAyMyAxOS42NTcg'@;
put 'MjMgMTggQyAyMyAxNi4zNDMgMjQuMzQzIDE1IDI2IDE1IEMgMjcuNjU3IDE1IDI5IDE2LjM0MyAyOSAxOCBaIE0gMjYgMTYuNiBDIDI1LjIyNyAxNi42IDI0LjYgMTcuMjI3IDI0LjYgMTggQyAyNC42IDE4Ljc3MyAyNS4yMjcgMTkuNCAyNiAxOS40IEMgMjYuNzczIDE5LjQgMjcuNCAxOC43'@;
put 'NzMgMjcuNCAxOCBDIDI3LjQgMTcuMjI3IDI2Ljc3MyAxNi42IDI2IDE2LjYgWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiIHJ4PSIzIj48L3BhdGg+XG4gIDxwYXRoIGQ9Ik0gMTUgMTQgQyAxNSAxNi4yMDkgMTMuMjA5IDE4'@;
put 'IDExIDE4IEMgOC43OTEgMTggNyAxNi4yMDkgNyAxNCBDIDcgMTEuNzkxIDguNzkxIDEwIDExIDEwIEMgMTMuMjA5IDEwIDE1IDExLjc5MSAxNSAxNCBaIE0gMTEgMTEuNiBDIDkuNjc1IDExLjYgOC42IDEyLjY3NSA4LjYgMTQgQyA4LjYgMTUuMzI1IDkuNjc1IDE2LjQgMTEgMTYuNCBDIDEy'@;
put 'LjMyNSAxNi40IDEzLjQgMTUuMzI1IDEzLjQgMTQgQyAxMy40IDEyLjY3NSAxMi4zMjUgMTEuNiAxMSAxMS42IFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVkIiByeD0iMyI+PC9wYXRoPlxuICA8cGF0aCBkPSJNIDIxIDIzIEMg'@;
put 'MjEgMjQuNjU3IDE5LjY1NyAyNiAxOCAyNiBDIDE2LjM0MyAyNiAxNSAyNC42NTcgMTUgMjMgQyAxNSAyMS4zNDMgMTYuMzQzIDIwIDE4IDIwIEMgMTkuNjU3IDIwIDIxIDIxLjM0MyAyMSAyMyBaIE0gMTggMjEuNiBDIDE3LjIyNyAyMS42IDE2LjYgMjIuMjI3IDE2LjYgMjMgQyAxNi42IDIz'@;
put 'Ljc3MyAxNy4yMjcgMjQuNCAxOCAyNC40IEMgMTguNzczIDI0LjQgMTkuNCAyMy43NzMgMTkuNCAyMyBDIDE5LjQgMjIuMjI3IDE4Ljc3MyAyMS42IDE4IDIxLjYgWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWFsZXJ0ZWQiIHJ4PSIzIj48'@;
put 'L3BhdGg+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC01LS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNIDI2Ljg1NCAxLjE0NCBMIDIxLjEzNCAxMS4wMDQgQyAyMC41NzkgMTEuODE4IDIxLjExNCAxMi45MjggMjIuMDk3IDEzLjAw'@;
put 'MSBDIDIyLjE0MiAxMy4wMDUgMjIuMTg4IDEzLjAwNiAyMi4yMzQgMTMuMDA0IEwgMzMuNjg0IDEzLjAwNCBDIDM0LjY2OSAxMy4wMzYgMzUuMzE5IDExLjk5MSAzNC44NTUgMTEuMTIyIEMgMzQuODM0IDExLjA4MSAzNC44MSAxMS4wNDIgMzQuNzg0IDExLjAwNCBMIDI5LjA2NCAxLjE0NCBD'@;
put 'IDI4LjU3IDAuMjk5IDI3LjM0OCAwLjI5OSAyNi44NTQgMS4xNDQgWiI+PC9wYXRoPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiBkPSJNIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEwNSAzMSAzMiAzMSBMIDQgMzEgQyAy'@;
put 'Ljg5NiAzMSAyIDMwLjEwNSAyIDI5IEwgMiA3IEMgMiA1Ljg5NiAyLjg5NiA1IDQgNSBMIDIxLjk1OCA1IEwgMTcuNjI1IDEyLjM5NSBDIDE2Ljc5NSAxMy42MDEgMTcuNTk0IDE1LjI0NSAxOS4wNjQgMTUuMzUxIEMgMTkuMTM0IDE1LjM1NyAxOS4yMDEgMTUuMzU5IDE5LjI3IDE1LjM1NyBM'@;
put 'IDI0LjU3OSAxNS4zNTcgQyAyMy42MzkgMTUuODYzIDIzIDE2Ljg1NyAyMyAxOCBDIDIzIDE5LjY1NyAyNC4zNDMgMjEgMjYgMjEgQyAyNy42NTcgMjEgMjkgMTkuNjU3IDI5IDE4IEMgMjkgMTYuODU3IDI4LjM2MSAxNS44NjMgMjcuNDIxIDE1LjM1NyBMIDM0IDE1LjM1NyBaIE0gMTEgMTAg'@;
put 'QyA4Ljc5MSAxMCA3IDExLjc5MSA3IDE0IEMgNyAxNi4yMDkgOC43OTEgMTggMTEgMTggQyAxMy4yMDkgMTggMTUgMTYuMjA5IDE1IDE0IEMgMTUgMTEuNzkxIDEzLjIwOSAxMCAxMSAxMCBaIE0gMTggMjAgQyAxNi4zNDMgMjAgMTUgMjEuMzQzIDE1IDIzIEMgMTUgMjQuNjU3IDE2LjM0MyAy'@;
put 'NiAxOCAyNiBDIDE5LjY1NyAyNiAyMSAyNC42NTcgMjEgMjMgQyAyMSAyMS4zNDMgMTkuNjU3IDIwIDE4IDIwIFoiPjwvcGF0aD5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTSAyNi44NTQg'@;
put 'MS4xNDQgTCAyMS4xMzQgMTEuMDA0IEMgMjAuNTc5IDExLjgxOCAyMS4xMTQgMTIuOTI4IDIyLjA5NyAxMy4wMDEgQyAyMi4xNDIgMTMuMDA1IDIyLjE4OCAxMy4wMDYgMjIuMjM0IDEzLjAwNCBMIDMzLjY4NCAxMy4wMDQgQyAzNC42NjkgMTMuMDM2IDM1LjMxOSAxMS45OTEgMzQuODU1IDEx'@;
put 'LjEyMiBDIDM0LjgzNCAxMS4wODEgMzQuODEgMTEuMDQyIDM0Ljc4NCAxMS4wMDQgTCAyOS4wNjQgMS4xNDQgQyAyOC41NyAwLjI5OSAyNy4zNDggMC4yOTkgMjYuODU0IDEuMTQ0IFoiPjwvcGF0aD4nKSx5LkNsclNoYXBlQ2xvdWRDaGFydD0oMCxnLmNsckljb25TVkcpKCdcbiAgPHBhdGgg'@;
put 'Y2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMiw1SDRBMiwyLDAsMCwwLDIsN1YyOWEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWN0EyLDIsMCwwLDAsMzIsNVpNNCwyOVY3SDMyVjI5WiI+PC9wYXRoPlxuICA8cGF0aCBkPSJNIDIwLjk3MSAx'@;
put 'MS4yNDMgQyAyMy4zMTQgMTMuNTg2IDIyLjM2NCAxOC4zMzUgMTguODQ5IDIxLjg0OSBDIDE1LjMzNCAyNS4zNjQgMTAuNTg2IDI2LjMxNCA4LjI0MyAyMy45NyBDIDUuODk5IDIxLjYyNyA2Ljg0OSAxNi44NzggMTAuMzY0IDEzLjM2NCBDIDEzLjg3OSA5Ljg0OSAxOC42MjggOC45IDIwLjk3'@;
put 'MSAxMS4yNDMgWiBNIDExLjYzNiAxNC42MzcgQyA4LjgyNCAxNy40NDkgNy44NzUgMjEuMDU4IDkuNTE1IDIyLjY5OCBDIDExLjE1NSAyNC4zMzggMTQuNzY0IDIzLjM4OSAxNy41NzYgMjAuNTc3IEMgMjAuMzg4IDE3Ljc2NSAyMS4zMzggMTQuMTU2IDE5LjY5NyAxMi41MTYgQyAxOC4wNTcg'@;
put 'MTAuODc2IDE0LjQ0OCAxMS44MjUgMTEuNjM2IDE0LjYzNyBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiI+PC9wYXRoPlxuICA8cGF0aCBkPSJNIDI4IDIyIEMgMjggMjMuNjU3IDI2LjY1NyAyNSAyNSAyNSBDIDIzLjM0MyAyNSAyMiAyMy42NTcgMjIgMjIg'@;
put 'QyAyMiAyMC4zNDMgMjMuMzQzIDE5IDI1IDE5IEMgMjYuNjU3IDE5IDI4IDIwLjM0MyAyOCAyMiBaIE0gMjUgMjAuNiBDIDI0LjIyNyAyMC42IDIzLjYgMjEuMjI3IDIzLjYgMjIgQyAyMy42IDIyLjc3MyAyNC4yMjcgMjMuNCAyNSAyMy40IEMgMjUuNzczIDIzLjQgMjYuNCAyMi43NzMgMjYu'@;
put 'NCAyMiBDIDI2LjQgMjEuMjI3IDI1Ljc3MyAyMC42IDI1IDIwLjYgWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIHg9IjciPjwvcGF0aD5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTSAzNCA3IEwgMzQgMjkg'@;
put 'QyAzNCAzMC4xMDUgMzMuMTA1IDMxIDMyIDMxIEwgNCAzMSBDIDIuODk1IDMxIDIgMzAuMTA1IDIgMjkgTCAyIDcgQyAyIDUuODk1IDIuODk1IDUgNCA1IEwgMzIgNSBDIDMzLjEwNSA1IDM0IDUuODk1IDM0IDcgWiBNIDEwLjM2NCAxMy4zNjQgQyA2Ljg0OSAxNi44NzggNS44OTkgMjEuNjI3'@;
put 'IDguMjQzIDIzLjk3IEMgMTAuNTg2IDI2LjMxNCAxNS4zMzQgMjUuMzY0IDE4Ljg0OSAyMS44NDkgQyAyMi4zNjQgMTguMzM1IDIzLjMxNCAxMy41ODYgMjAuOTcxIDExLjI0MyBDIDE4LjYyOCA4LjkgMTMuODc5IDkuODQ5IDEwLjM2NCAxMy4zNjQgWiBNIDI1IDE5IEMgMjMuMzQzIDE5IDIy'@;
put 'IDIwLjM0MyAyMiAyMiBDIDIyIDIzLjY1NyAyMy4zNDMgMjUgMjUgMjUgQyAyNi42NTcgMjUgMjggMjMuNjU3IDI4IDIyIEMgMjggMjAuMzQzIDI2LjY1NyAxOSAyNSAxOSBaIj48L3BhdGg+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRo'@;
put 'LTEtLWJhZGdlZCIgZD0iTSAzMiAxMy4yMiBMIDMyIDI5IEwgNCAyOSBMIDQgNyBMIDIyLjU3IDcgQyAyMi41MjQgNi42NjggMjIuNTAxIDYuMzM0IDIyLjUgNiBDIDIyLjUwMSA1LjY2NSAyMi41MjQgNS4zMzEgMjIuNTcgNSBMIDQgNSBDIDIuODk1IDUgMiA1Ljg5NSAyIDcgTCAyIDI5IEMg'@;
put 'MiAzMC4xMDQgMi44OTUgMzEgNCAzMSBMIDMyIDMxIEMgMzMuMTA1IDMxIDM0IDMwLjEwNCAzNCAyOSBMIDM0IDEyLjM0IEMgMzMuMzggMTIuNzMgMzIuNzA2IDEzLjAyNiAzMiAxMy4yMiBaIj48L3BhdGg+XG4gIDxwYXRoIGQ9Ik0gMjAuOTcxIDExLjI0MyBDIDIzLjMxNCAxMy41ODYgMjIu'@;
put 'MzY0IDE4LjMzNSAxOC44NDkgMjEuODQ5IEMgMTUuMzM0IDI1LjM2NCAxMC41ODYgMjYuMzE0IDguMjQzIDIzLjk3IEMgNS44OTkgMjEuNjI3IDYuODQ5IDE2Ljg3OCAxMC4zNjQgMTMuMzY0IEMgMTMuODc5IDkuODQ5IDE4LjYyOCA4LjkgMjAuOTcxIDExLjI0MyBaIE0gMTEuNjM2IDE0LjYz'@;
put 'NyBDIDguODI0IDE3LjQ0OSA3Ljg3NSAyMS4wNTggOS41MTUgMjIuNjk4IEMgMTEuMTU1IDI0LjMzOCAxNC43NjQgMjMuMzg5IDE3LjU3NiAyMC41NzcgQyAyMC4zODggMTcuNzY1IDIxLjMzOCAxNC4xNTYgMTkuNjk3IDEyLjUxNiBDIDE4LjA1NyAxMC44NzYgMTQuNDQ4IDExLjgyNSAxMS42'@;
put 'MzYgMTQuNjM3IFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCI+PC9wYXRoPlxuICA8cGF0aCBkPSJNIDI4IDIyIEMgMjggMjMuNjU3IDI2LjY1NyAyNSAyNSAyNSBDIDIzLjM0MyAyNSAyMiAyMy42NTcgMjIgMjIgQyAyMiAyMC4z'@;
put 'NDMgMjMuMzQzIDE5IDI1IDE5IEMgMjYuNjU3IDE5IDI4IDIwLjM0MyAyOCAyMiBaIE0gMjUgMjAuNiBDIDI0LjIyNiAyMC42IDIzLjYgMjEuMjI2IDIzLjYgMjIgQyAyMy42IDIyLjc3MyAyNC4yMjYgMjMuNCAyNSAyMy40IEMgMjUuNzczIDIzLjQgMjYuNCAyMi43NzMgMjYuNCAyMiBDIDI2'@;
put 'LjQgMjEuMjI2IDI1Ljc3MyAyMC42IDI1IDIwLjYgWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIiB4PSI3Ij48L3BhdGg+XG4gIDxjaXJjbGUgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgt'@;
put 'NC0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ij48L2NpcmNsZT5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0gMzQgMTIuMzQgTCAzNCAyOSBDIDM0IDMwLjEwNSAzMy4xMDUgMzEgMzIg'@;
put 'MzEgTCA0IDMxIEMgMi44OTUgMzEgMiAzMC4xMDUgMiAyOSBMIDIgNyBDIDIgNS44OTUgMi44OTUgNSA0IDUgTCAyMi41NyA1IEMgMjEuOTY5IDkuMjMzIDI1LjA1IDEzLjEgMjkuMzEgMTMuNDYgTCAzMC4zMiAxMy40OCBDIDMxLjYyNSAxMy40MjkgMzIuODk1IDEzLjAzNiAzNCAxMi4zNCBa'@;
put 'IE0gMTAuMzY0IDEzLjM2NCBDIDYuODQ5IDE2Ljg3OCA1Ljg5OSAyMS42MjcgOC4yNDMgMjMuOTcgQyAxMC41ODYgMjYuMzE0IDE1LjMzNCAyNS4zNjQgMTguODQ5IDIxLjg0OSBDIDIyLjM2NCAxOC4zMzUgMjMuMzE0IDEzLjU4NiAyMC45NzEgMTEuMjQzIEMgMTguNjI4IDguOSAxMy44Nzkg'@;
put 'OS44NDkgMTAuMzY0IDEzLjM2NCBaIE0gMjUgMTkgQyAyMy4zNDMgMTkgMjIgMjAuMzQzIDIyIDIyIEMgMjIgMjMuNjU3IDIzLjM0MyAyNSAyNSAyNSBDIDI2LjY1NyAyNSAyOCAyMy42NTcgMjggMjIgQyAyOCAyMC4zNDMgMjYuNjU3IDE5IDI1IDE5IFoiPjwvcGF0aD5cbiAgPGNpcmNsZSBj'@;
put 'bGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSI+PC9jaXJjbGU+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVk'@;
put 'IiBkPSJNIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEwNSAzMSAzMiAzMSBMIDQgMzEgQyAyLjg5NSAzMSAyIDMwLjEwNSAyIDI5IEwgMiA3IEMgMiA1Ljg5NSAyLjg5NSA1IDQgNSBMIDIxLjk1OCA1IEwgMjAuNzg2IDcgTCA0IDcgTCA0IDI5IEwgMzIgMjkgTCAzMiAxNS4zNTcgTCAzNCAxNS4z'@;
put 'NTcgWiI+PC9wYXRoPlxuICA8cGF0aCBkPSJNIDE4Ljg0OSAyMS44NDkgQyAxNS4zMzQgMjUuMzY0IDEwLjU4NiAyNi4zMTQgOC4yNDMgMjMuOTcgQyA1Ljg5OSAyMS42MjcgNi44NDkgMTYuODc4IDEwLjM2NCAxMy4zNjQgQyAxMy4wNDkgMTAuNjc5IDE2LjQ1MyA5LjQ5MiAxOC45NTYgMTAu'@;
put 'MTI0IEwgMTguMDA4IDExLjc0MSBDIDE2LjE4IDExLjUxOCAxMy42OTUgMTIuNTc4IDExLjYzNiAxNC42MzcgQyA4LjgyNCAxNy40NDkgNy44NzUgMjEuMDU4IDkuNTE1IDIyLjY5OCBDIDExLjE1NSAyNC4zMzggMTQuNzY0IDIzLjM4OSAxNy41NzYgMjAuNTc3IEMgMTkuMjI4IDE4LjkyNSAy'@;
put 'MC4yMzcgMTYuOTk4IDIwLjQ1NiAxNS4zNTcgTCAyMi4yMiAxNS4zNTcgQyAyMi4wMDYgMTcuNDc3IDIwLjgzOCAxOS44NjEgMTguODQ5IDIxLjg0OSBaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCI+PC9wYXRoPlxuICA8cGF0'@;
put 'aCBkPSJNIDI4IDIyIEMgMjggMjMuNjU3IDI2LjY1NyAyNSAyNSAyNSBDIDIzLjM0MyAyNSAyMiAyMy42NTcgMjIgMjIgQyAyMiAyMC4zNDMgMjMuMzQzIDE5IDI1IDE5IEMgMjYuNjU3IDE5IDI4IDIwLjM0MyAyOCAyMiBaIE0gMjUgMjAuNiBDIDI0LjIyNiAyMC42IDIzLjYgMjEuMjI2IDIz'@;
put 'LjYgMjIgQyAyMy42IDIyLjc3MyAyNC4yMjYgMjMuNCAyNSAyMy40IEMgMjUuNzczIDIzLjQgMjYuNCAyMi43NzMgMjYuNCAyMiBDIDI2LjQgMjEuMjI2IDI1Ljc3MyAyMC42IDI1IDIwLjYgWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFs'@;
put 'ZXJ0ZWQiIHg9IjciPjwvcGF0aD5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0gMjYuODU0IDEuMTQ0IEwgMjEuMTM0IDExLjAwNCBDIDIwLjU3OSAxMS44MTggMjEuMTE0IDEyLjky'@;
put 'OCAyMi4wOTcgMTMuMDAxIEMgMjIuMTQyIDEzLjAwNSAyMi4xODggMTMuMDA2IDIyLjIzNCAxMy4wMDQgTCAzMy42ODQgMTMuMDA0IEMgMzQuNjY5IDEzLjAzNiAzNS4zMTkgMTEuOTkxIDM0Ljg1NSAxMS4xMjIgQyAzNC44MzQgMTEuMDgxIDM0LjgxIDExLjA0MiAzNC43ODQgMTEuMDA0IEwg'@;
put 'MjkuMDY0IDEuMTQ0IEMgMjguNTcgMC4yOTkgMjcuMzQ4IDAuMjk5IDI2Ljg1NCAxLjE0NCBaIj48L3BhdGg+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0gMzQgMjkgQyAzNCAzMC4xMDUgMzMuMTA1IDMxIDMy'@;
put 'IDMxIEwgNCAzMSBDIDIuODk1IDMxIDIgMzAuMTA1IDIgMjkgTCAyIDcgQyAyIDUuODk1IDIuODk1IDUgNCA1IEwgMjEuOTU4IDUgTCAxOC45NTYgMTAuMTI0IEMgMTYuNDUzIDkuNDkyIDEzLjA0OSAxMC42NzkgMTAuMzY0IDEzLjM2NCBDIDYuODQ5IDE2Ljg3OCA1Ljg5OSAyMS42MjcgOC4y'@;
put 'NDMgMjMuOTcgQyAxMC41ODYgMjYuMzE0IDE1LjMzNCAyNS4zNjQgMTguODQ5IDIxLjg0OSBDIDIwLjgzOCAxOS44NjEgMjIuMDA2IDE3LjQ3NyAyMi4yMiAxNS4zNTcgTCAzNCAxNS4zNTcgWiBNIDI1IDE5IEMgMjMuMzQzIDE5IDIyIDIwLjM0MyAyMiAyMiBDIDIyIDIzLjY1NyAyMy4zNDMg'@;
put 'MjUgMjUgMjUgQyAyNi42NTcgMjUgMjggMjMuNjU3IDI4IDIyIEMgMjggMjAuMzQzIDI2LjY1NyAxOSAyNSAxOSBaIj48L3BhdGg+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0gMjYuODU0'@;
put 'IDEuMTQ0IEwgMjEuMTM0IDExLjAwNCBDIDIwLjU3OSAxMS44MTggMjEuMTE0IDEyLjkyOCAyMi4wOTcgMTMuMDAxIEMgMjIuMTQyIDEzLjAwNSAyMi4xODggMTMuMDA2IDIyLjIzNCAxMy4wMDQgTCAzMy42ODQgMTMuMDA0IEMgMzQuNjY5IDEzLjAzNiAzNS4zMTkgMTEuOTkxIDM0Ljg1NSAx'@;
put 'MS4xMjIgQyAzNC44MzQgMTEuMDgxIDM0LjgxIDExLjA0MiAzNC43ODQgMTEuMDA0IEwgMjkuMDY0IDEuMTQ0IEMgMjguNTcgMC4yOTkgMjcuMzQ4IDAuMjk5IDI2Ljg1NCAxLjE0NCBaIj48L3BhdGg+JykseS5DbHJTaGFwZUN1cnZlQ2hhcnQ9KDAsZy5jbHJJY29uU1ZHKSgnXG4gIDxwYXRo'@;
put 'IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNIDMyIDUgTCA0IDUgQyAyLjg5NSA1IDIgNS44OTUgMiA3IEwgMiAyOSBDIDIgMzAuMTA1IDIuODk1IDMxIDQgMzEgTCAzMiAzMSBDIDMzLjEwNSAzMSAzNCAzMC4xMDUgMzQgMjkgTCAzNCA3IEMgMzQgNS44'@;
put 'OTUgMzMuMTA1IDUgMzIgNSBaIE0gNCAyOSBMIDQgNyBMIDMyIDcgTCAzMiAyOSBaIj48L3BhdGg+XG4gIDxwYXRoIGQ9Ik0gNyAxMS44IEMgNi41NTggMTEuOCA2LjIgMTEuNDQyIDYuMiAxMSBDIDYuMiAxMC41NTggNi41NTggMTAuMiA3IDEwLjIgTCAxMyAxMC4yIEMgMTUuNDA0IDEwLjIg'@;
put 'MTYuMzY4IDExLjkwNyAxNy42NTMgMTYuNDc4IEMgMTcuNjk1IDE2LjYyOCAxNy43NDQgMTYuODAzIDE3LjgzNSAxNy4xMjkgQyAxNy45MDkgMTcuMzkyIDE3Ljk2NCAxNy41ODggMTguMDE5IDE3Ljc4IEMgMTkuMzMyIDIyLjM3NSAyMC41NDkgMjQuMiAyMyAyNC4yIEwgMjkgMjQuMiBDIDI5'@;
put 'LjQ0MiAyNC4yIDI5LjggMjQuNTU4IDI5LjggMjUgQyAyOS44IDI1LjQ0MiAyOS40NDIgMjUuOCAyOSAyNS44IEwgMjMgMjUuOCBDIDE5LjUzNSAyNS44IDE3Ljk4MSAyMy40NjkgMTYuNDgxIDE4LjIyIEMgMTYuNDI1IDE4LjAyNSAxNi4zNjkgMTcuODI2IDE2LjI5NSAxNy41NiBDIDE2LjIw'@;
put 'MyAxNy4yMzQgMTYuMTU0IDE3LjA2IDE2LjExMyAxNi45MTEgQyAxNS4wNDMgMTMuMTA1IDE0LjMwNSAxMS44IDEzIDExLjggTCA3IDExLjggWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiPjwvcGF0aD5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNs'@;
put 'ci1pLXNvbGlkLXBhdGgtMSIgZD0iTSAzNCA3IEwgMzQgMjkgQyAzNCAzMC4xMDUgMzMuMTA1IDMxIDMyIDMxIEwgNCAzMSBDIDIuODk2IDMxIDIgMzAuMTA1IDIgMjkgTCAyIDcgQyAyIDUuODk2IDIuODk2IDUgNCA1IEwgMzIgNSBDIDMzLjEwNSA1IDM0IDUuODk2IDM0IDcgWiBNIDEzIDEy'@;
put 'IEMgMTQuODE3IDEyIDE1LjY3NCAxMy40OTkgMTcuMDM5IDE4LjI3NSBDIDE3LjgxMyAyMC45ODQgMTguMjAxIDIyLjExOCAxOC44ODIgMjMuMzA5IEMgMTkuODcgMjUuMDM4IDIxLjIwNSAyNiAyMyAyNiBMIDI5IDI2IEMgMjkuNTUyIDI2IDMwIDI1LjU1MiAzMCAyNSBDIDMwIDI0LjQ0OCAy'@;
put 'OS41NTIgMjQgMjkgMjQgTCAyMyAyNCBDIDIxLjE4MyAyNCAyMC4zMjYgMjIuNTAxIDE4Ljk2MiAxNy43MjUgQyAxOC4xODggMTUuMDE2IDE3Ljc5OSAxMy44ODIgMTcuMTE4IDEyLjY5MSBDIDE2LjEzIDEwLjk2MiAxNC43OTUgMTAgMTMgMTAgTCA3IDEwIEMgNi40NDggMTAgNiAxMC40NDgg'@;
put 'NiAxMSBDIDYgMTEuNTUyIDYuNDQ4IDEyIDcgMTIgWiI+PC9wYXRoPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0gMzIgMTMuMjIgTCAzMiAyOSBMIDQgMjkgTCA0IDcgTCAyMi41NyA3IEMgMjIuNTI0IDYu'@;
put 'NjY4IDIyLjUwMSA2LjMzNCAyMi41IDYgQyAyMi41MDEgNS42NjUgMjIuNTI0IDUuMzMxIDIyLjU3IDUgTCA0IDUgQyAyLjg5NSA1IDIgNS44OTUgMiA3IEwgMiAyOSBDIDIgMzAuMTA0IDIuODk1IDMxIDQgMzEgTCAzMiAzMSBDIDMzLjEwNCAzMSAzNCAzMC4xMDQgMzQgMjkgTCAzNCAxMi4z'@;
put 'NCBDIDMzLjM4IDEyLjczIDMyLjcwNiAxMy4wMjYgMzIgMTMuMjIgWiI+PC9wYXRoPlxuICA8cGF0aCBkPSJNIDcgMTEuOCBDIDYuNTU4IDExLjggNi4yIDExLjQ0MiA2LjIgMTEgQyA2LjIgMTAuNTU4IDYuNTU4IDEwLjIgNyAxMC4yIEwgMTMgMTAuMiBDIDE1LjQwNCAxMC4yIDE2LjM2OCAx'@;
put 'MS45MDcgMTcuNjUzIDE2LjQ3OCBDIDE3LjY5NSAxNi42MjggMTcuNzQ0IDE2LjgwMyAxNy44MzUgMTcuMTI5IEMgMTcuOTA5IDE3LjM5MiAxNy45NjQgMTcuNTg4IDE4LjAxOSAxNy43OCBDIDE5LjMzMiAyMi4zNzUgMjAuNTQ5IDI0LjIgMjMgMjQuMiBMIDI5IDI0LjIgQyAyOS40NDIgMjQu'@;
put 'MiAyOS44IDI0LjU1OCAyOS44IDI1IEMgMjkuOCAyNS40NDIgMjkuNDQyIDI1LjggMjkgMjUuOCBMIDIzIDI1LjggQyAxOS41MzUgMjUuOCAxNy45ODEgMjMuNDY5IDE2LjQ4MSAxOC4yMiBDIDE2LjQyNSAxOC4wMjUgMTYuMzY5IDE3LjgyNiAxNi4yOTUgMTcuNTYgQyAxNi4yMDMgMTcuMjM0'@;
put 'IDE2LjE1NCAxNy4wNiAxNi4xMTMgMTYuOTExIEMgMTUuMDQzIDEzLjEwNSAxNC4zMDUgMTEuOCAxMyAxMS44IEwgNyAxMS44IFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCI+PC9wYXRoPlxuICA8Y2lyY2xlIGNsYXNzPSJjbHIt'@;
put 'aS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSI+PC9jaXJjbGU+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiBkPSJNIDM0IDEy'@;
put 'LjM0IEwgMzQgMjkgQyAzNCAzMC4xMDUgMzMuMTA1IDMxIDMyIDMxIEwgNCAzMSBDIDIuODk2IDMxIDIgMzAuMTA1IDIgMjkgTCAyIDcgQyAyIDUuODk2IDIuODk2IDUgNCA1IEwgMjIuNTcgNSBDIDIxLjk2OSA5LjIzMyAyNS4wNSAxMy4xIDI5LjMxIDEzLjQ2IEwgMzAuMzIgMTMuNDggQyAz'@;
put 'MS42MjYgMTMuNDI5IDMyLjg5NSAxMy4wMzYgMzQgMTIuMzQgWiBNIDEzIDEyIEMgMTQuODE3IDEyIDE1LjY3NCAxMy40OTkgMTcuMDM5IDE4LjI3NSBDIDE3LjgxMyAyMC45ODQgMTguMjAxIDIyLjExOCAxOC44ODIgMjMuMzA5IEMgMTkuODcgMjUuMDM4IDIxLjIwNSAyNiAyMyAyNiBMIDI5'@;
put 'IDI2IEMgMjkuNTUyIDI2IDMwIDI1LjU1MiAzMCAyNSBDIDMwIDI0LjQ0OCAyOS41NTIgMjQgMjkgMjQgTCAyMyAyNCBDIDIxLjE4MyAyNCAyMC4zMjYgMjIuNTAxIDE4Ljk2MiAxNy43MjUgQyAxOC4xODggMTUuMDE2IDE3Ljc5OSAxMy44ODIgMTcuMTE4IDEyLjY5MSBDIDE2LjEzIDEwLjk2'@;
put 'MiAxNC43OTUgMTAgMTMgMTAgTCA3IDEwIEMgNi40NDggMTAgNiAxMC40NDggNiAxMSBDIDYgMTEuNTUyIDYuNDQ4IDEyIDcgMTIgWiI+PC9wYXRoPlxuICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIiBj'@;
put 'eD0iMzAiIGN5PSI2IiByPSI1Ij48L2NpcmNsZT5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0gMzQgMjkgQyAzNCAzMC4xMDUgMzMuMTA1IDMxIDMyIDMxIEwgNCAzMSBDIDIuODk1IDMxIDIgMzAuMTA1'@;
put 'IDIgMjkgTCAyIDcgQyAyIDUuODk1IDIuODk1IDUgNCA1IEwgMjEuOTU4IDUgTCAyMC43ODYgNyBMIDQgNyBMIDQgMjkgTCAzMiAyOSBMIDMyIDE1LjM1NyBMIDM0IDE1LjM1NyBaIj48L3BhdGg+XG4gIDxwYXRoIGQ9Ik0gNyAxMS44IEMgNi41NTggMTEuOCA2LjIgMTEuNDQyIDYuMiAxMSBD'@;
put 'IDYuMiAxMC41NTggNi41NTggMTAuMiA3IDEwLjIgTCAxMyAxMC4yIEMgMTUuNDA0IDEwLjIgMTYuMzY4IDExLjkwNyAxNy42NTMgMTYuNDc4IEMgMTcuNjk1IDE2LjYyOCAxNy43NDQgMTYuODAzIDE3LjgzNSAxNy4xMjkgQyAxNy45MDkgMTcuMzkyIDE3Ljk2NCAxNy41ODggMTguMDE5IDE3'@;
put 'Ljc4IEMgMTkuMzMyIDIyLjM3NSAyMC41NDkgMjQuMiAyMyAyNC4yIEwgMjkgMjQuMiBDIDI5LjQ0MiAyNC4yIDI5LjggMjQuNTU4IDI5LjggMjUgQyAyOS44IDI1LjQ0MiAyOS40NDIgMjUuOCAyOSAyNS44IEwgMjMgMjUuOCBDIDE5LjUzNSAyNS44IDE3Ljk4MSAyMy40NjkgMTYuNDgxIDE4'@;
put 'LjIyIEMgMTYuNDI1IDE4LjAyNSAxNi4zNjkgMTcuODI2IDE2LjI5NSAxNy41NiBDIDE2LjIwMyAxNy4yMzQgMTYuMTU0IDE3LjA2IDE2LjExMyAxNi45MTEgQyAxNS4wNDMgMTMuMTA1IDE0LjMwNSAxMS44IDEzIDExLjggTCA3IDExLjggWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0'@;
put 'ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiPjwvcGF0aD5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0gMjYuODU0IDEuMTQ0IEwgMjEuMTM0IDExLjAwNCBDIDIwLjU3'@;
put 'OSAxMS44MTggMjEuMTE0IDEyLjkyOCAyMi4wOTcgMTMuMDAxIEMgMjIuMTQyIDEzLjAwNSAyMi4xODggMTMuMDA2IDIyLjIzNCAxMy4wMDQgTCAzMy42ODQgMTMuMDA0IEMgMzQuNjY5IDEzLjAzNiAzNS4zMTkgMTEuOTkxIDM0Ljg1NSAxMS4xMjIgQyAzNC44MzQgMTEuMDgxIDM0LjgxIDEx'@;
put 'LjA0MiAzNC43ODQgMTEuMDA0IEwgMjkuMDY0IDEuMTQ0IEMgMjguNTcgMC4yOTkgMjcuMzQ4IDAuMjk5IDI2Ljg1NCAxLjE0NCBaIj48L3BhdGg+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0gMzQgMjkgQyAz'@;
put 'NCAzMC4xMDUgMzMuMTA1IDMxIDMyIDMxIEwgNCAzMSBDIDIuODk2IDMxIDIgMzAuMTA1IDIgMjkgTCAyIDcgQyAyIDUuODk2IDIuODk2IDUgNCA1IEwgMjEuOTU4IDUgTCAxNy42MjUgMTIuMzk1IEMgMTcuNDc2IDEyLjYxMiAxNy4zNzkgMTIuODQzIDE3LjMzIDEzLjA3NyBDIDE3LjI2MiAx'@;
put 'Mi45NDggMTcuMTkyIDEyLjgyIDE3LjExOCAxMi42OTEgQyAxNi4xMyAxMC45NjIgMTQuNzk1IDEwIDEzIDEwIEwgNyAxMCBDIDYuNDQ4IDEwIDYgMTAuNDQ4IDYgMTEgQyA2IDExLjU1MiA2LjQ0OCAxMiA3IDEyIEwgMTMgMTIgQyAxNC44MTcgMTIgMTUuNjc0IDEzLjQ5OSAxNy4wMzkgMTgu'@;
put 'Mjc1IEMgMTcuODEzIDIwLjk4NCAxOC4yMDEgMjIuMTE4IDE4Ljg4MiAyMy4zMDkgQyAxOS44NyAyNS4wMzggMjEuMjA1IDI2IDIzIDI2IEwgMjkgMjYgQyAyOS41NTIgMjYgMzAgMjUuNTUyIDMwIDI1IEMgMzAgMjQuNDQ4IDI5LjU1MiAyNCAyOSAyNCBMIDIzIDI0IEMgMjEuMTgzIDI0IDIw'@;
put 'LjMyNiAyMi41MDEgMTguOTYyIDE3LjcyNSBDIDE4LjY0IDE2LjU5OCAxOC4zODUgMTUuNzQ0IDE4LjE0NyAxNS4wNDQgQyAxOC40MDcgMTUuMjE1IDE4LjcxNyAxNS4zMjYgMTkuMDY0IDE1LjM1MSBDIDE5LjEzNCAxNS4zNTcgMTkuMjAxIDE1LjM1OSAxOS4yNyAxNS4zNTcgTCAzNCAxNS4z'@;
put 'NTcgWiI+PC9wYXRoPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNIDI2Ljg1NCAxLjE0NCBMIDIxLjEzNCAxMS4wMDQgQyAyMC41NzkgMTEuODE4IDIxLjExNCAxMi45MjggMjIuMDk3IDEz'@;
put 'LjAwMSBDIDIyLjE0MiAxMy4wMDUgMjIuMTg4IDEzLjAwNiAyMi4yMzQgMTMuMDA0IEwgMzMuNjg0IDEzLjAwNCBDIDM0LjY2OSAxMy4wMzYgMzUuMzE5IDExLjk5MSAzNC44NTUgMTEuMTIyIEMgMzQuODM0IDExLjA4MSAzNC44MSAxMS4wNDIgMzQuNzg0IDExLjAwNCBMIDI5LjA2NCAxLjE0'@;
put 'NCBDIDI4LjU3IDAuMjk5IDI3LjM0OCAwLjI5OSAyNi44NTQgMS4xNDQgWiI+PC9wYXRoPicpLHkuQ2xyU2hhcGVHcmlkQ2hhcnQ9KDAsZy5jbHJJY29uU1ZHKSgnXG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMTUsMTdINGEyLDIsMCww'@;
put 'LDEtMi0yVjhBMiwyLDAsMCwxLDQsNkgxNWEyLDIsMCwwLDEsMiwydjdBMiwyLDAsMCwxLDE1LDE3Wk00LDh2N0gxNVY4WiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTMyLDE3SDIxYTIsMiwwLDAsMS0yLTJWOGEyLDIsMCwwLDEs'@;
put 'Mi0ySDMyYTIsMiwwLDAsMSwyLDJ2N0EyLDIsMCwwLDEsMzIsMTdaTTIxLDh2N0gzMlY4WiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgZD0iTTE1LDMwSDRhMiwyLDAsMCwxLTItMlYyMWEyLDIsMCwwLDEsMi0ySDE1YTIsMiwwLDAsMSwy'@;
put 'LDJ2N0EyLDIsMCwwLDEsMTUsMzBaTTQsMjF2N0gxNVYyMVoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIGQ9Ik0zMiwzMEgyMWEyLDIsMCwwLDEtMi0yVjIxYTIsMiwwLDAsMSwyLTJIMzJhMiwyLDAsMCwxLDIsMnY3QTIsMiwwLDAsMSwz'@;
put 'MiwzMFpNMjEsMjF2N0gzMlYyMVoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTSAxNSAxNyBMIDQgMTcgQyAyLjg5NSAxNyAyIDE2LjEwNSAyIDE1IEwgMiA4IEMgMiA2Ljg5NSAyLjg5NSA2IDQgNiBMIDE1IDYgQyAxNi4xMDUgNiAxNyA2'@;
put 'Ljg5NSAxNyA4IEwgMTcgMTUgQyAxNyAxNi4xMDUgMTYuMTA1IDE3IDE1IDE3IFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTSAzMiAxNyBMIDIxIDE3IEMgMTkuODk1IDE3IDE5IDE2LjEwNSAxOSAxNSBMIDE5IDggQyAxOSA2Ljg5NSAx'@;
put 'OS44OTUgNiAyMSA2IEwgMzIgNiBDIDMzLjEwNSA2IDM0IDYuODk1IDM0IDggTCAzNCAxNSBDIDM0IDE2LjEwNSAzMy4xMDUgMTcgMzIgMTcgWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiBkPSJNIDE1IDMwIEwgNCAzMCBDIDIuODk1IDMwIDIg'@;
put 'MjkuMTA1IDIgMjggTCAyIDIxIEMgMiAxOS44OTUgMi44OTUgMTkgNCAxOSBMIDE1IDE5IEMgMTYuMTA1IDE5IDE3IDE5Ljg5NSAxNyAyMSBMIDE3IDI4IEMgMTcgMjkuMTA1IDE2LjEwNSAzMCAxNSAzMCBaIi8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRo'@;
put 'LTQiIGQ9Ik0gMzIgMzAgTCAyMSAzMCBDIDE5Ljg5NSAzMCAxOSAyOS4xMDUgMTkgMjggTCAxOSAyMSBDIDE5IDE5Ljg5NSAxOS44OTUgMTkgMjEgMTkgTCAzMiAxOSBDIDMzLjEwNSAxOSAzNCAxOS44OTUgMzQgMjEgTCAzNCAyOCBDIDM0IDI5LjEwNSAzMy4xMDUgMzAgMzIgMzAgWiIvPlxu'@;
put 'ICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLWFsZXJ0ZWQiIGQ9Ik0xNSwxN0g0YTIsMiwwLDAsMS0yLTJWOEEyLDIsMCwwLDEsNCw2SDE1YTIsMiwwLDAsMSwyLDJ2N0EyLDIsMCwwLDEsMTUsMTdaTTQsOHY3SDE1VjhaIi8+XG4gIDxw'@;
put 'YXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItYWxlcnRlZCIgZD0iTSAzMiAxNyBMIDIxIDE3IEMgMjAuMDE0IDE3IDE5LjE5NSAxNi4yODcgMTkuMDMgMTUuMzQ4IEMgMTkuMDQxIDE1LjM0OSAxOS4wNTMgMTUuMzUgMTkuMDY0IDE1LjM1MSBD'@;
put 'IDE5LjEzNCAxNS4zNTcgMTkuMjAxIDE1LjM1OSAxOS4yNyAxNS4zNTcgTCAzMy45NjggMTUuMzU3IEMgMzMuOCAxNi4yOTIgMzIuOTgzIDE3IDMyIDE3IFogTSAxOSA4IEMgMTkgNi44OTUgMTkuODk1IDYgMjEgNiBMIDIxLjM3MiA2IEwgMTkgMTAuMDQ4IFoiLz5cbiAgPHBhdGggY2xhc3M9'@;
put 'ImNsci1pLW91dGxpbmUtYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy1hbGVydGVkIiBkPSJNMTUsMzBINGEyLDIsMCwwLDEtMi0yVjIxYTIsMiwwLDAsMSwyLTJIMTVhMiwyLDAsMCwxLDIsMnY3QTIsMiwwLDAsMSwxNSwzMFpNNCwyMXY3SDE1VjIxWiIvPlxuICA8cGF0aCBjbGFzcz0i'@;
put 'Y2xyLWktb3V0bGluZS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LWFsZXJ0ZWQiIGQ9Ik0zMiwzMEgyMWEyLDIsMCwwLDEtMi0yVjIxYTIsMiwwLDAsMSwyLTJIMzJhMiwyLDAsMCwxLDIsMnY3QTIsMiwwLDAsMSwzMiwzMFpNMjEsMjF2N0gzMlYyMVoiLz5cbiAgPHBhdGggY2xhc3M9'@;
put 'ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0gMjYuODU0IDEuMTQ0IEwgMjEuMTM0IDExLjAwNCBDIDIwLjU3OSAxMS44MTggMjEuMTE0IDEyLjkyOCAyMi4wOTcgMTMuMDAxIEMgMjIuMTQyIDEzLjAwNSAyMi4x'@;
put 'ODggMTMuMDA2IDIyLjIzNCAxMy4wMDQgTCAzMy42ODQgMTMuMDA0IEMgMzQuNjY5IDEzLjAzNiAzNS4zMTkgMTEuOTkxIDM0Ljg1NSAxMS4xMjIgQyAzNC44MzQgMTEuMDgxIDM0LjgxIDExLjA0MiAzNC43ODQgMTEuMDA0IEwgMjkuMDY0IDEuMTQ0IEMgMjguNTcgMC4yOTkgMjcuMzQ4IDAu'@;
put 'Mjk5IDI2Ljg1NCAxLjE0NCBaIi8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0gMTUgMTcgTCA0IDE3IEMgMi44OTUgMTcgMiAxNi4xMDUgMiAxNSBMIDIgOCBDIDIgNi44OTUgMi44OTUgNiA0IDYgTCAxNSA2'@;
put 'IEMgMTYuMTA1IDYgMTcgNi44OTUgMTcgOCBMIDE3IDE1IEMgMTcgMTYuMTA1IDE2LjEwNSAxNyAxNSAxNyBaIi8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQiIGQ9Ik0gMzIgMTcgTCAyMSAxNyBDIDIwLjAxNCAxNyAx'@;
put 'OS4xOTUgMTYuMjg3IDE5LjAzIDE1LjM0OCBDIDE5LjA0MSAxNS4zNDkgMTkuMDUzIDE1LjM1IDE5LjA2NCAxNS4zNTEgQyAxOS4xMzQgMTUuMzU3IDE5LjIwMSAxNS4zNTkgMTkuMjcgMTUuMzU3IEwgMzMuOTY4IDE1LjM1NyBDIDMzLjggMTYuMjkyIDMyLjk4MyAxNyAzMiAxNyBaIE0gMTkg'@;
put 'OCBDIDE5IDYuODk1IDE5Ljg5NSA2IDIxIDYgTCAyMS4zNzIgNiBMIDE5IDEwLjA0OCBaIi8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWFsZXJ0ZWQiIGQ9Ik0gMTUgMzAgTCA0IDMwIEMgMi44OTUgMzAgMiAyOS4xMDUgMiAyOCBM'@;
put 'IDIgMjEgQyAyIDE5Ljg5NSAyLjg5NSAxOSA0IDE5IEwgMTUgMTkgQyAxNi4xMDUgMTkgMTcgMTkuODk1IDE3IDIxIEwgMTcgMjggQyAxNyAyOS4xMDUgMTYuMTA1IDMwIDE1IDMwIFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtNC0t'@;
put 'YWxlcnRlZCIgZD0iTSAzMiAzMCBMIDIxIDMwIEMgMTkuODk1IDMwIDE5IDI5LjEwNSAxOSAyOCBMIDE5IDIxIEMgMTkgMTkuODk1IDE5Ljg5NSAxOSAyMSAxOSBMIDMyIDE5IEMgMzMuMTA1IDE5IDM0IDE5Ljg5NSAzNCAyMSBMIDM0IDI4IEMgMzQgMjkuMTA1IDMzLjEwNSAzMCAzMiAzMCBa'@;
put 'Ii8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTUtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0gMjYuODU0IDEuMTQ0IEwgMjEuMTM0IDExLjAwNCBDIDIwLjU3OSAxMS44MTggMjEuMTE0IDEyLjkyOCAyMi4wOTcgMTMuMDAxIEMgMjIu'@;
put 'MTQyIDEzLjAwNSAyMi4xODggMTMuMDA2IDIyLjIzNCAxMy4wMDQgTCAzMy42ODQgMTMuMDA0IEMgMzQuNjY5IDEzLjAzNiAzNS4zMTkgMTEuOTkxIDM0Ljg1NSAxMS4xMjIgQyAzNC44MzQgMTEuMDgxIDM0LjgxIDExLjA0MiAzNC43ODQgMTEuMDA0IEwgMjkuMDY0IDEuMTQ0IEMgMjguNTcg'@;
put 'MC4yOTkgMjcuMzQ4IDAuMjk5IDI2Ljg1NCAxLjE0NCBaIi8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgZD0iTTE1LDE3SDRhMiwyLDAsMCwxLTItMlY4QTIsMiwwLDAsMSw0LDZIMTVhMiwyLDAsMCwxLDIsMnY3'@;
put 'QTIsMiwwLDAsMSwxNSwxN1pNNCw4djdIMTVWOFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiBkPSJNIDMyIDE3IEwgMjEgMTcgQyAxOS44OTUgMTcgMTkgMTYuMTA1IDE5IDE1IEwgMTkgOCBDIDE5IDYuODk1'@;
put 'IDE5Ljg5NSA2IDIxIDYgTCAyMi41OSA2IEMgMjIuNTkgNi4wMTkgMjIuNTkgNi4wMzcgMjIuNTkgNi4wNTYgQyAyMi41OSA2LjcyOSAyMi42OCA3LjM4MSAyMi44NDggOCBMIDIxIDggTCAyMSAxNSBMIDMyIDE1IEwgMzIgMTMuMTc1IEMgMzIuNzE3IDEyLjk3MiAzMy4zODkgMTIuNjY0IDM0'@;
put 'IDEyLjI2OSBMIDM0IDE1IEMgMzQgMTYuMTA1IDMzLjEwNSAxNyAzMiAxNyBaIi8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIgZD0iTTE1LDMwSDRhMiwyLDAsMCwxLTItMlYyMWEyLDIsMCwwLDEsMi0ySDE1YTIs'@;
put 'MiwwLDAsMSwyLDJ2N0EyLDIsMCwwLDEsMTUsMzBaTTQsMjF2N0gxNVYyMVoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIiBkPSJNMzIsMzBIMjFhMiwyLDAsMCwxLTItMlYyMWEyLDIsMCwwLDEsMi0ySDMyYTIs'@;
put 'MiwwLDAsMSwyLDJ2N0EyLDIsMCwwLDEsMzIsMzBaTTIxLDIxdjdIMzJWMjFaIi8+XG4gIDxjaXJjbGUgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+XG4gIDxwYXRoIGNs'@;
put 'YXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiBkPSJNIDE1IDE3IEwgNCAxNyBDIDIuODk1IDE3IDIgMTYuMTA1IDIgMTUgTCAyIDggQyAyIDYuODk1IDIuODk1IDYgNCA2IEwgMTUgNiBDIDE2LjEwNSA2IDE3IDYuODk1IDE3IDggTCAxNyAxNSBD'@;
put 'IDE3IDE2LjEwNSAxNi4xMDUgMTcgMTUgMTcgWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCIgZD0iTSAzMiAxNyBMIDIxIDE3IEMgMTkuODk1IDE3IDE5IDE2LjEwNSAxOSAxNSBMIDE5IDggQyAxOSA2Ljg5NSAxOS44'@;
put 'OTUgNiAyMSA2IEwgMjIuNTkgNiBDIDIyLjU5IDYuMDE5IDIyLjU5IDYuMDM3IDIyLjU5IDYuMDU2IEMgMjIuNTkgMTAuMTQxIDI1LjkwMSAxMy40NTIgMjkuOTg2IDEzLjQ1MiBDIDMxLjQ2NiAxMy40NTIgMzIuODQ0IDEzLjAxOCAzNCAxMi4yNjkgTCAzNCAxNSBDIDM0IDE2LjEwNSAzMy4x'@;
put 'MDUgMTcgMzIgMTcgWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWJhZGdlZCIgZD0iTSAxNSAzMCBMIDQgMzAgQyAyLjg5NSAzMCAyIDI5LjEwNSAyIDI4IEwgMiAyMSBDIDIgMTkuODk1IDIuODk1IDE5IDQgMTkgTCAxNSAxOSBD'@;
put 'IDE2LjEwNSAxOSAxNyAxOS44OTUgMTcgMjEgTCAxNyAyOCBDIDE3IDI5LjEwNSAxNi4xMDUgMzAgMTUgMzAgWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTQtLWJhZGdlZCIgZD0iTSAzMiAzMCBMIDIxIDMwIEMgMTkuODk1IDMwIDE5'@;
put 'IDI5LjEwNSAxOSAyOCBMIDE5IDIxIEMgMTkgMTkuODk1IDE5Ljg5NSAxOSAyMSAxOSBMIDMyIDE5IEMgMzMuMTA1IDE5IDM0IDE5Ljg5NSAzNCAyMSBMIDM0IDI4IEMgMzQgMjkuMTA1IDMzLjEwNSAzMCAzMiAzMCBaIi8+XG4gIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQg'@;
put 'Y2xyLWktc29saWQtcGF0aC01LS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz4nKSx5LkNsclNoYXBlSGVhdE1hcD0oMCxnLmNsckljb25TVkcpKCdcbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0gMzIgNSBM'@;
put 'IDQgNSBDIDIuODk1IDUgMiA1Ljg5NSAyIDcgTCAyIDI5IEMgMiAzMC4xMDUgMi44OTUgMzEgNCAzMSBMIDMyIDMxIEMgMzMuMTA1IDMxIDM0IDMwLjEwNSAzNCAyOSBMIDM0IDcgQyAzNCA1Ljg5NSAzMy4xMDUgNSAzMiA1IFogTSA0IDI5IEwgNCA3IEwgMzIgNyBMIDMyIDI5IFoiPjwvcGF0'@;
put 'aD5cbiAgPHBhdGggZD0iTSA4IDEwIEwgMjggMTAgTCAyOCAyNiBMIDggMjYgWiBNIDkuNiAyNCBMIDE0LjEgMjQgTCAxNC4xIDE4LjggTCA5LjYgMTguOCBaIE0gMTQuMSAxMS42IEwgOS42IDExLjYgTCA5LjYgMTcuMiBMIDE0LjEgMTcuMiBaIE0gMjYgMjQgTCAyNiAxOC44IEwgMjEuOSAx'@;
put 'OC44IEwgMjEuOSAyNCBaIE0gMjYgMTEuNiBMIDIxLjkgMTEuNiBMIDIxLjkgMTcuMiBMIDI2IDE3LjIgWiBNIDE1LjcgMTEuNiBMIDE1LjcgMTcuMiBMIDIwLjMgMTcuMiBMIDIwLjMgMTEuNiBaIE0gMTUuNyAyNCBMIDIwLjMgMjQgTCAyMC4zIDE4LjggTCAxNS43IDE4LjggWiIgY2xhc3M9'@;
put 'ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiPjwvcGF0aD5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiBkPSJNIDMyIDEzLjIyIEwgMzIgMjkgTCA0IDI5IEwgNCA3IEwgMjIuNTcgNyBDIDIyLjUy'@;
put 'NCA2LjY2OCAyMi41MDEgNi4zMzQgMjIuNSA2IEMgMjIuNTAxIDUuNjY1IDIyLjUyNCA1LjMzMSAyMi41NyA1IEwgNCA1IEMgMi44OTUgNSAyIDUuODk1IDIgNyBMIDIgMjkgQyAyIDMwLjEwNCAyLjg5NSAzMSA0IDMxIEwgMzIgMzEgQyAzMy4xMDQgMzEgMzQgMzAuMTA0IDM0IDI5IEwgMzQg'@;
put 'MTIuMzQgQyAzMy4zOCAxMi43MyAzMi43MDYgMTMuMDI2IDMyIDEzLjIyIFoiPjwvcGF0aD5cbiAgPHBhdGggZD0iTSA4IDEwIEwgMjMuNzI4IDEwIEMgMjQuMTA1IDEwLjU5NiAyNC41NjQgMTEuMTM1IDI1LjA5IDExLjYgTCAyMS45IDExLjYgTCAyMS45IDE3LjIgTCAyNiAxNy4yIEwgMjYg'@;
put 'MTIuMjg3IEMgMjYuNjExIDEyLjY3OSAyNy4yODQgMTIuOTgzIDI4IDEzLjE4MiBMIDI4IDI2IEwgOCAyNiBaIE0gOS42IDI0IEwgMTQuMSAyNCBMIDE0LjEgMTguOCBMIDkuNiAxOC44IFogTSAxNC4xIDExLjYgTCA5LjYgMTEuNiBMIDkuNiAxNy4yIEwgMTQuMSAxNy4yIFogTSAyNiAyNCBM'@;
put 'IDI2IDE4LjggTCAyMS45IDE4LjggTCAyMS45IDI0IFogTSAxNS43IDExLjYgTCAxNS43IDE3LjIgTCAyMC4zIDE3LjIgTCAyMC4zIDExLjYgWiBNIDE1LjcgMjQgTCAyMC4zIDI0IEwgMjAuMyAxOC44IEwgMTUuNyAxOC44IFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWkt'@;
put 'b3V0bGluZS1wYXRoLTItLWJhZGdlZCI+PC9wYXRoPlxuICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTIyLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiPjwvY2lyY2xlPlxuICA8cGF0aCBjbGFzcz0iY2xy'@;
put 'LWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgZD0iTSAzNCAyOSBDIDM0IDMwLjEwNSAzMy4xMDUgMzEgMzIgMzEgTCA0IDMxIEMgMi44OTUgMzEgMiAzMC4xMDUgMiAyOSBMIDIgNyBDIDIgNS44OTUgMi44OTUgNSA0IDUgTCAyMS45NTggNSBMIDIw'@;
put 'Ljc4NiA3IEwgNCA3IEwgNCAyOSBMIDMyIDI5IEwgMzIgMTUuMzU3IEwgMzQgMTUuMzU3IFoiPjwvcGF0aD5cbiAgPHBhdGggZD0iTSA4IDEwIEwgMTkuMDI4IDEwIEwgMTguMDkxIDExLjYgTCAxNS43IDExLjYgTCAxNS43IDE3LjIgTCAyMC4zIDE3LjIgTCAyMC4zIDE1LjM1NyBMIDIxLjkg'@;
put 'MTUuMzU3IEwgMjEuOSAxNy4yIEwgMjYgMTcuMiBMIDI2IDE1LjM1NyBMIDI4IDE1LjM1NyBMIDI4IDI2IEwgOCAyNiBaIE0gOS42IDI0IEwgMTQuMSAyNCBMIDE0LjEgMTguOCBMIDkuNiAxOC44IFogTSAxNC4xIDExLjYgTCA5LjYgMTEuNiBMIDkuNiAxNy4yIEwgMTQuMSAxNy4yIFogTSAy'@;
put 'NiAyNCBMIDI2IDE4LjggTCAyMS45IDE4LjggTCAyMS45IDI0IFogTSAxNS43IDI0IEwgMjAuMyAyNCBMIDIwLjMgMTguOCBMIDE1LjcgMTguOCBaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCI+PC9wYXRoPlxuICA8cGF0aCBj'@;
put 'bGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMjItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0gMjYuODU0IDEuMTQ0IEwgMjEuMTM0IDExLjAwNCBDIDIwLjU3OSAxMS44MTggMjEuMTE0IDEyLjkyOCAyMi4wOTcgMTMuMDAxIEMgMjIuMTQyIDEzLjAw'@;
put 'NSAyMi4xODggMTMuMDA2IDIyLjIzNCAxMy4wMDQgTCAzMy42ODQgMTMuMDA0IEMgMzQuNjY5IDEzLjAzNiAzNS4zMTkgMTEuOTkxIDM0Ljg1NSAxMS4xMjIgQyAzNC44MzQgMTEuMDgxIDM0LjgxIDExLjA0MiAzNC43ODQgMTEuMDA0IEwgMjkuMDY0IDEuMTQ0IEMgMjguNTcgMC4yOTkgMjcu'@;
put 'MzQ4IDAuMjk5IDI2Ljg1NCAxLjE0NCBaIj48L3BhdGg+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0gMzQgNyBMIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEwNSAzMSAzMiAzMSBMIDQgMzEgQyAyLjg5NiAzMSAyIDMwLjEwNSAyIDI5IEwgMiA3'@;
put 'IEMgMiA1Ljg5NiAyLjg5NiA1IDQgNSBMIDMyIDUgQyAzMy4xMDUgNSAzNCA1Ljg5NiAzNCA3IFogTSA4IDI2IEwgMjggMjYgTCAyOCAxMCBMIDggMTAgWiBNIDEwIDE5IEwgMTQgMTkgTCAxNCAyNCBMIDEwIDI0IFogTSAyMiAyNCBMIDIyIDE5IEwgMjYgMTkgTCAyNiAyNCBaIE0gMjAgMTkg'@;
put 'TCAyMCAyNCBMIDE2IDI0IEwgMTYgMTkgWiBNIDI2IDE3IEwgMjIgMTcgTCAyMiAxMiBMIDI2IDEyIFogTSAyMCAxMiBMIDIwIDE3IEwgMTYgMTcgTCAxNiAxMiBaIE0gMTQgMTIgTCAxNCAxNyBMIDEwIDE3IEwgMTAgMTIgWiI+PC9wYXRoPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQt'@;
put 'LWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgZD0iTSAzNCAxMi4zNCBMIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEwNSAzMSAzMiAzMSBMIDQgMzEgQyAyLjg5NiAzMSAyIDMwLjEwNSAyIDI5IEwgMiA3IEMgMiA1Ljg5NiAyLjg5NiA1IDQgNSBMIDIyLjU3IDUgQyAyMi4zMTIg'@;
put 'Ni44MTcgMjIuNzMyIDguNTY2IDIzLjYzMyAxMCBMIDggMTAgTCA4IDI2IEwgMjggMjYgTCAyOCAxMy4yMzIgQyAyOC40MjEgMTMuMzQ1IDI4Ljg1OSAxMy40MjIgMjkuMzEgMTMuNDYgTCAzMC4zMiAxMy40OCBDIDMxLjYyNiAxMy40MjkgMzIuODk1IDEzLjAzNiAzNCAxMi4zNCBaIE0gMTAg'@;
put 'MTkgTCAxNCAxOSBMIDE0IDI0IEwgMTAgMjQgWiBNIDIyIDI0IEwgMjIgMTkgTCAyNiAxOSBMIDI2IDI0IFogTSAyMCAxOSBMIDIwIDI0IEwgMTYgMjQgTCAxNiAxOSBaIE0gMjYgMTcgTCAyMiAxNyBMIDIyIDEyIEwgMjUuNTg0IDEyIEMgMjUuNzE5IDEyLjEgMjUuODU4IDEyLjE5NiAyNiAx'@;
put 'Mi4yODcgWiBNIDIwIDEyIEwgMjAgMTcgTCAxNiAxNyBMIDE2IDEyIFogTSAxNCAxMiBMIDE0IDE3IEwgMTAgMTcgTCAxMCAxMiBaIj48L3BhdGg+XG4gIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yMi0tYmFkZ2VkIGNsci1pLWJhZGdlIiBj'@;
put 'eD0iMzAiIGN5PSI2IiByPSI1Ij48L2NpcmNsZT5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIgZD0iTSAzNCAyOSBDIDM0IDMwLjEwNSAzMy4xMDUgMzEgMzIgMzEgTCA0IDMxIEMgMi44OTYgMzEgMiAzMC4xMDUgMiAy'@;
put 'OSBMIDIgNyBDIDIgNS44OTYgMi44OTYgNSA0IDUgTCAyMS45NTggNSBMIDE5LjAyOCAxMCBMIDggMTAgTCA4IDI2IEwgMjggMjYgTCAyOCAxNS4zNTcgTCAzNCAxNS4zNTcgWiBNIDEwIDE5IEwgMTQgMTkgTCAxNCAyNCBMIDEwIDI0IFogTSAyMiAyNCBMIDIyIDE5IEwgMjYgMTkgTCAyNiAy'@;
put 'NCBaIE0gMjAgMTkgTCAyMCAyNCBMIDE2IDI0IEwgMTYgMTkgWiBNIDI2IDE3IEwgMjIgMTcgTCAyMiAxNS4zNTcgTCAyNiAxNS4zNTcgWiBNIDIwIDE3IEwgMTYgMTcgTCAxNiAxMiBMIDE3Ljg1NiAxMiBMIDE3LjYyNSAxMi4zOTUgQyAxNi43OTUgMTMuNjAxIDE3LjU5NCAxNS4yNDUgMTku'@;
put 'MDY0IDE1LjM1MSBDIDE5LjEzNCAxNS4zNTcgMTkuMjAxIDE1LjM1OSAxOS4yNyAxNS4zNTcgTCAyMCAxNS4zNTcgWiBNIDE0IDEyIEwgMTQgMTcgTCAxMCAxNyBMIDEwIDEyIFoiPjwvcGF0aD5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgt'@;
put 'MjItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0gMjYuODU0IDEuMTQ0IEwgMjEuMTM0IDExLjAwNCBDIDIwLjU3OSAxMS44MTggMjEuMTE0IDEyLjkyOCAyMi4wOTcgMTMuMDAxIEMgMjIuMTQyIDEzLjAwNSAyMi4xODggMTMuMDA2IDIyLjIzNCAxMy4wMDQgTCAzMy42ODQgMTMuMDA0IEMg'@;
put 'MzQuNjY5IDEzLjAzNiAzNS4zMTkgMTEuOTkxIDM0Ljg1NSAxMS4xMjIgQyAzNC44MzQgMTEuMDgxIDM0LjgxIDExLjA0MiAzNC43ODQgMTEuMDA0IEwgMjkuMDY0IDEuMTQ0IEMgMjguNTcgMC4yOTkgMjcuMzQ4IDAuMjk5IDI2Ljg1NCAxLjE0NCBaIj48L3BhdGg+JykseS5DbHJTaGFwZUxp'@;
put 'bmVDaGFydD0oMCxnLmNsckljb25TVkcpKCdcbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0gMzIgNSBMIDQgNSBDIDIuODk1IDUgMiA1Ljg5NSAyIDcgTCAyIDI5IEMgMiAzMC4xMDUgMi44OTUgMzEgNCAzMSBMIDMyIDMxIEMgMzMuMTA1'@;
put 'IDMxIDM0IDMwLjEwNSAzNCAyOSBMIDM0IDcgQyAzNCA1Ljg5NSAzMy4xMDUgNSAzMiA1IFogTSA0IDI5IEwgNCA3IEwgMzIgNyBMIDMyIDI5IFoiPjwvcGF0aD5cbiAgPHBvbHlnb24gcG9pbnRzPSIxNS42MiAxNS4yMjIgOS42MDIgMjMuOTY4IDUuNTUgMjAuMzg0IDYuNjEgMTkuMTg2IDku'@;
put 'MzA4IDIxLjU3MiAxNS42MzQgMTIuMzggMjIuMzg0IDIyLjM5NSAyOS4xMzggMTMuNDcgMzAuNDE0IDE0LjQzNiAyMi4zMDggMjUuMTQ1IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiI+PC9wb2x5Z29uPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xy'@;
put 'LWktc29saWQtcGF0aC0xIiBkPSJNIDMyIDUgTCA0IDUgQyAyLjg5NiA1IDIgNS44OTYgMiA3IEwgMiAyOSBDIDIgMzAuMTA1IDIuODk2IDMxIDQgMzEgTCAzMiAzMSBDIDMzLjEwNSAzMSAzNCAzMC4xMDUgMzQgMjkgTCAzNCA3IEMgMzQgNS44OTYgMzMuMTA1IDUgMzIgNSBaIE0gMjIuNTYg'@;
put 'MjUuOTQgTCAxNS40NiAxNS4zNiBMIDkuMTIgMjQuNjQgTCA0LjYyIDIwLjY0IEwgNiAxOS4wNSBMIDguNyAyMS40NCBMIDE1LjQ2IDExLjU2IEwgMjIuNjUgMjIuMjcgTCAyOS42NSAxMyBMIDMxLjM1IDE0LjI4IFoiPjwvcGF0aD5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJh'@;
put 'ZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiBkPSJNIDMyIDEzLjIyIEwgMzIgMjkgTCA0IDI5IEwgNCA3IEwgMjIuNTcgNyBDIDIyLjUyNCA2LjY2OCAyMi41MDEgNi4zMzQgMjIuNSA2IEMgMjIuNTAxIDUuNjY1IDIyLjUyNCA1LjMzMSAyMi41NyA1IEwgNCA1IEMgMi44OTUg'@;
put 'NSAyIDUuODk1IDIgNyBMIDIgMjkgQyAyIDMwLjEwNCAyLjg5NSAzMSA0IDMxIEwgMzIgMzEgQyAzMy4xMDQgMzEgMzQgMzAuMTA0IDM0IDI5IEwgMzQgMTIuMzQgQyAzMy4zOCAxMi43MyAzMi43MDYgMTMuMDI2IDMyIDEzLjIyIFoiPjwvcGF0aD5cbiAgPHBvbHlnb24gcG9pbnRzPSIxNS42'@;
put 'MiAxNS4yMjIgOS42MDIgMjMuOTY4IDUuNTUgMjAuMzg0IDYuNjEgMTkuMTg2IDkuMzA4IDIxLjU3MiAxNS42MzQgMTIuMzggMjIuMzg0IDIyLjM5NSAyOS4xMzggMTMuNDcgMzAuNDE0IDE0LjQzNiAyMi4zMDggMjUuMTQ1IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91'@;
put 'dGxpbmUtcGF0aC0yLS1iYWRnZWQiPjwvcG9seWdvbj5cbiAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiPjwvY2lyY2xlPlxuICA8cGF0aCBjbGFzcz0iY2xy'@;
put 'LWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgZD0iTSAzMC4zMiAxMy40OCBMIDMxLjM4IDE0LjI4IEwgMjIuNTYgMjUuOTQgTCAxNS40NiAxNS4zNiBMIDkuMTIgMjQuNjQgTCA0LjYyIDIwLjY0IEwgNiAxOS4wNSBMIDguNyAyMS40NCBMIDE1LjQ2IDExLjU2'@;
put 'IEwgMjIuNjUgMjIuMjcgTCAyOS4zMSAxMy40NiBDIDI1LjA1IDEzLjEgMjEuOTY5IDkuMjMzIDIyLjU3IDUgTCA0IDUgQyAyLjg5NiA1IDIgNS44OTYgMiA3IEwgMiAyOSBDIDIgMzAuMTA1IDIuODk2IDMxIDQgMzEgTCAzMiAzMSBDIDMzLjEwNSAzMSAzNCAzMC4xMDUgMzQgMjkgTCAzNCAx'@;
put 'Mi4zNCBDIDMyLjg5NSAxMy4wMzYgMzEuNjI2IDEzLjQyOSAzMC4zMiAxMy40OCBaIj48L3BhdGg+XG4gIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiPjwvY2lyY2xl'@;
put 'PlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgZD0iTSAzNCAyOSBDIDM0IDMwLjEwNSAzMy4xMDUgMzEgMzIgMzEgTCA0IDMxIEMgMi44OTUgMzEgMiAzMC4xMDUgMiAyOSBMIDIgNyBDIDIgNS44OTUgMi44OTUg'@;
put 'NSA0IDUgTCAyMS45NTggNSBMIDIwLjc4NiA3IEwgNCA3IEwgNCAyOSBMIDMyIDI5IEwgMzIgMTUuMzU3IEwgMzQgMTUuMzU3IFoiPjwvcGF0aD5cbiAgPHBhdGggZD0iTSAxNS42MiAxNS4yMjIgTCA5LjYwMiAyMy45NjggTCA1LjU1IDIwLjM4NCBMIDYuNjEgMTkuMTg2IEwgOS4zMDggMjEu'@;
put 'NTcyIEwgMTUuNjM0IDEyLjM4IEwgMjIuMzg0IDIyLjM5NSBMIDI3LjcxNyAxNS4zNDggTCAyOS43MjQgMTUuMzQ4IEwgMjIuMzA4IDI1LjE0NSBaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCI+PC9wYXRoPlxuICA8cGF0aCBj'@;
put 'bGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTSAyNi44NTQgMS4xNDQgTCAyMS4xMzQgMTEuMDA0IEMgMjAuNTc5IDExLjgxOCAyMS4xMTQgMTIuOTI4IDIyLjA5NyAxMy4wMDEgQyAyMi4xNDIgMTMuMDA1'@;
put 'IDIyLjE4OCAxMy4wMDYgMjIuMjM0IDEzLjAwNCBMIDMzLjY4NCAxMy4wMDQgQyAzNC42NjkgMTMuMDM2IDM1LjMxOSAxMS45OTEgMzQuODU1IDExLjEyMiBDIDM0LjgzNCAxMS4wODEgMzQuODEgMTEuMDQyIDM0Ljc4NCAxMS4wMDQgTCAyOS4wNjQgMS4xNDQgQyAyOC41NyAwLjI5OSAyNy4z'@;
put 'NDggMC4yOTkgMjYuODU0IDEuMTQ0IFoiPjwvcGF0aD5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIgZD0iTSAzNCAyOSBDIDM0IDMwLjEwNSAzMy4xMDUgMzEgMzIgMzEgTCA0IDMxIEMgMi44OTYgMzEgMiAzMC4xMDUg'@;
put 'MiAyOSBMIDIgNyBDIDIgNS44OTYgMi44OTYgNSA0IDUgTCAyMS45NTggNSBMIDE3LjYyNSAxMi4zOTUgQyAxNi43OTUgMTMuNjAxIDE3LjU5NCAxNS4yNDUgMTkuMDY0IDE1LjM1MSBDIDE5LjEzNCAxNS4zNTcgMTkuMjAxIDE1LjM1OSAxOS4yNyAxNS4zNTcgTCAyNy40NTIgMTUuMzU3IEwg'@;
put 'MjIuMzggMjIuMDYgTCAxNS42MyAxMiBMIDkuMjggMjEuMjggTCA2Ljc1IDE5LjA0IEwgNS40MiAyMC41MyBMIDkuNjUgMjQuMjggTCAxNS42MSAxNS41NiBMIDIyLjI4IDI1LjUgTCAyOS45NTkgMTUuMzU3IEwgMzQgMTUuMzU3IFoiPjwvcGF0aD5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNv'@;
put 'bGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTSAyNi44NTQgMS4xNDQgTCAyMS4xMzQgMTEuMDA0IEMgMjAuNTc5IDExLjgxOCAyMS4xMTQgMTIuOTI4IDIyLjA5NyAxMy4wMDEgQyAyMi4xNDIgMTMuMDA1IDIyLjE4OCAxMy4wMDYgMjIu'@;
put 'MjM0IDEzLjAwNCBMIDMzLjY4NCAxMy4wMDQgQyAzNC42NjkgMTMuMDM2IDM1LjMxOSAxMS45OTEgMzQuODU1IDExLjEyMiBDIDM0LjgzNCAxMS4wODEgMzQuODEgMTEuMDQyIDM0Ljc4NCAxMS4wMDQgTCAyOS4wNjQgMS4xNDQgQyAyOC41NyAwLjI5OSAyNy4zNDggMC4yOTkgMjYuODU0IDEu'@;
put 'MTQ0IFoiPjwvcGF0aD4nKSx5LkNsclNoYXBlUGllQ2hhcnQ9KDAsZy5jbHJJY29uU1ZHKSgnXG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNIDMyIDUgTCA0IDUgQyAyLjg5NSA1IDIgNS44OTUgMiA3IEwgMiAyOSBDIDIgMzAuMTA1IDIu'@;
put 'ODk1IDMxIDQgMzEgTCAzMiAzMSBDIDMzLjEwNSAzMSAzNCAzMC4xMDUgMzQgMjkgTCAzNCA3IEMgMzQgNS44OTUgMzMuMTA1IDUgMzIgNSBaIE0gNCAyOSBMIDQgNyBMIDMyIDcgTCAzMiAyOSBaIj48L3BhdGg+XG4gIDxwYXRoIGQ9Ik0gMTcgMjcgQyAxMi41ODIgMjcgOSAyMy40MTggOSAx'@;
put 'OSBDIDkgMTQuNTgyIDEyLjU4MiAxMSAxNyAxMSBMIDE3IDE5IEwgMjUgMTkgQyAyNSAyMy40MTggMjEuNDE4IDI3IDE3IDI3IFogTSAyMy4yNDcgMjAuNCBMIDE1LjQgMjAuNCBMIDE1LjQgMTIuODAyIEMgMTIuNjQgMTMuNTEzIDEwLjYwMSAxNi4wMTggMTAuNiAxOSBDIDEwLjYgMjIuNTM1'@;
put 'IDEzLjQ2NSAyNS40IDE3IDI1LjQgQyAyMC4wNTQgMjUuNDAxIDIyLjYwOCAyMy4yNjEgMjMuMjQ3IDIwLjQgWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiPjwvcGF0aD5cbiAgPHBhdGggZD0iTSAxOSA5IEMgMjMuNDE4IDkgMjcgMTIuNTgyIDI3IDE3IEwg'@;
put 'MTkgMTcgWiBNIDI1LjE5OCAxNS40IEMgMjQuNjIgMTMuMTUgMjIuODQ5IDExLjM4IDIwLjYgMTAuODAxIEwgMjAuNiAxNS40IFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIj48L3BhdGg+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xp'@;
put 'ZC1wYXRoLTEiIGQ9Ik0gMzQgNyBMIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEwNSAzMSAzMiAzMSBDIDMyIDMxIDIgMzAuMTA1IDIgMjkgTCAyIDcgQyAyIDUuODk2IDIuODk2IDUgNCA1IEwgMzIgNSBDIDMzLjEwNSA1IDM0IDUuODk2IDM0IDcgWiBNIDI1IDE5IEwgMTcgMTkgTCAxNyAxMSBD'@;
put 'IDEyLjU4MiAxMSA5IDE0LjU4MiA5IDE5IEMgOSAyMy40MTggMTIuNTgyIDI3IDE3IDI3IEMgMjEuNDE4IDI3IDI1IDIzLjQxOCAyNSAxOSBaIE0gMTkgMTcgTCAyNyAxNyBDIDI3IDEyLjU4MiAyMy40MTggOSAxOSA5IFoiPjwvcGF0aD5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUt'@;
put 'LWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiBkPSJNIDMyIDEzLjIyIEwgMzIgMjkgTCA0IDI5IEwgNCA3IEwgMjIuNTcgNyBDIDIyLjUyNCA2LjY2OCAyMi41MDEgNi4zMzQgMjIuNSA2IEMgMjIuNTAxIDUuNjY1IDIyLjUyNCA1LjMzMSAyMi41NyA1IEwgNCA1IEMgMi44'@;
put 'OTUgNSAyIDUuODk1IDIgNyBMIDIgMjkgQyAyIDMwLjEwNCAyLjg5NSAzMSA0IDMxIEwgMzIgMzEgQyAzMy4xMDQgMzEgMzQgMzAuMTA0IDM0IDI5IEwgMzQgMTIuMzQgQyAzMy4zOCAxMi43MyAzMi43MDYgMTMuMDI2IDMyIDEzLjIyIFoiPjwvcGF0aD5cbiAgPHBhdGggZD0iTSAxNyAyNyBD'@;
put 'IDEyLjU4MiAyNyA5IDIzLjQxOCA5IDE5IEMgOSAxNC41ODIgMTIuNTgyIDExIDE3IDExIEwgMTcgMTkgTCAyNSAxOSBDIDI1IDIzLjQxOCAyMS40MTggMjcgMTcgMjcgWiBNIDIzLjI0NyAyMC40IEwgMTUuNCAyMC40IEwgMTUuNCAxMi44MDIgQyAxMi42NCAxMy41MTMgMTAuNjAxIDE2LjAx'@;
put 'OCAxMC42IDE5IEMgMTAuNiAyMi41MzUgMTMuNDY1IDI1LjQgMTcgMjUuNCBDIDIwLjA1NCAyNS40MDEgMjIuNjA4IDIzLjI2MSAyMy4yNDcgMjAuNCBaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiPjwvcGF0aD5cbiAgPHBhdGgg'@;
put 'ZD0iTSAxOSA5IEMgMjMuNDE4IDkgMjcgMTIuNTgyIDI3IDE3IEwgMTkgMTcgWiBNIDI1LjE5OCAxNS40IEMgMjQuNjIgMTMuMTUgMjIuODQ5IDExLjM4IDIwLjYgMTAuODAxIEwgMjAuNiAxNS40IFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMt'@;
put 'LWJhZGdlZCI+PC9wYXRoPlxuICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSI+PC9jaXJjbGU+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2Vk'@;
put 'IGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiBkPSJNIDM0IDEyLjM0IEwgMzQgMjkgQyAzNCAzMC4xMDUgMzMuMTA1IDMxIDMyIDMxIEwgNCAzMSBDIDIuODk2IDMxIDIgMzAuMTA1IDIgMjkgTCAyIDcgQyAyIDUuODk2IDIuODk2IDUgNCA1IEwgMjIuNTcgNSBDIDIxLjk2OSA5LjIzMyAy'@;
put 'NS4wNSAxMy4xIDI5LjMxIDEzLjQ2IEwgMzAuMzIgMTMuNDggQyAzMS42MjYgMTMuNDI5IDMyLjg5NSAxMy4wMzYgMzQgMTIuMzQgWiBNIDI1IDE5IEwgMTcgMTkgTCAxNyAxMSBDIDEyLjU4MiAxMSA5IDE0LjU4MiA5IDE5IEMgOSAyMy40MTggMTIuNTgyIDI3IDE3IDI3IEMgMjEuNDE4IDI3'@;
put 'IDI1IDIzLjQxOCAyNSAxOSBaIE0gMTkgMTcgTCAyNyAxNyBDIDI3IDEyLjU4MiAyMy40MTggOSAxOSA5IFoiPjwvcGF0aD5cbiAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIg'@;
put 'cj0iNSI+PC9jaXJjbGU+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiBkPSJNIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEwNSAzMSAzMiAzMSBMIDQgMzEgQyAyLjg5NSAzMSAyIDMwLjEwNSAyIDI5IEwgMiA3IEMg'@;
put 'MiA1Ljg5NSAyLjg5NSA1IDQgNSBMIDIxLjk1OCA1IEwgMjAuNzg2IDcgTCA0IDcgTCA0IDI5IEwgMzIgMjkgTCAzMiAxNS4zNTcgTCAzNCAxNS4zNTcgWiI+PC9wYXRoPlxuICA8cGF0aCBkPSJNIDE3IDI3IEMgMTIuNTgyIDI3IDkgMjMuNDE4IDkgMTkgQyA5IDE0LjU4MiAxMi41ODIgMTEg'@;
put 'MTcgMTEgTCAxNyAxOSBMIDI1IDE5IEMgMjUgMjMuNDE4IDIxLjQxOCAyNyAxNyAyNyBaIE0gMjMuMjQ3IDIwLjQgTCAxNS40IDIwLjQgTCAxNS40IDEyLjgwMiBDIDEyLjY0IDEzLjUxMyAxMC42MDEgMTYuMDE4IDEwLjYgMTkgQyAxMC42IDIyLjUzNSAxMy40NjUgMjUuNCAxNyAyNS40IEMg'@;
put 'MjAuMDU0IDI1LjQwMSAyMi42MDggMjMuMjYxIDIzLjI0NyAyMC40IFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIj48L3BhdGg+XG4gIDxwYXRoIGQ9Ik0gMjcgMTcgTCAxOSAxNyBMIDE5IDE1LjM0NSBDIDE5LjAyMSAxNS4z'@;
put 'NDggMTkuMDQzIDE1LjM0OSAxOS4wNjQgMTUuMzUxIEMgMTkuMTM0IDE1LjM1NyAxOS4yMDEgMTUuMzU5IDE5LjI3IDE1LjM1NyBMIDI2LjgzMSAxNS4zNTcgQyAyNi45NDIgMTUuODg3IDI3IDE2LjQzNyAyNyAxNyBaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRs'@;
put 'aW5lLXBhdGgtMy0tYWxlcnRlZCI+PC9wYXRoPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTSAyNi44NTQgMS4xNDQgTCAyMS4xMzQgMTEuMDA0IEMgMjAuNTc5IDExLjgxOCAyMS4x'@;
put 'MTQgMTIuOTI4IDIyLjA5NyAxMy4wMDEgQyAyMi4xNDIgMTMuMDA1IDIyLjE4OCAxMy4wMDYgMjIuMjM0IDEzLjAwNCBMIDMzLjY4NCAxMy4wMDQgQyAzNC42NjkgMTMuMDM2IDM1LjMxOSAxMS45OTEgMzQuODU1IDExLjEyMiBDIDM0LjgzNCAxMS4wODEgMzQuODEgMTEuMDQyIDM0Ljc4NCAx'@;
put 'MS4wMDQgTCAyOS4wNjQgMS4xNDQgQyAyOC41NyAwLjI5OSAyNy4zNDggMC4yOTkgMjYuODU0IDEuMTQ0IFoiPjwvcGF0aD5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIgZD0iTSAzNCAyOSBDIDM0IDMwLjEwNSAzMy4x'@;
put 'MDUgMzEgMzIgMzEgTCA0IDMxIEMgMi44OTYgMzEgMiAzMC4xMDUgMiAyOSBMIDIgNyBDIDIgNS44OTYgMi44OTYgNSA0IDUgTCAyMS45NTggNSBMIDE3LjYyNSAxMi4zOTUgQyAxNi44MDcgMTMuNTgzIDE3LjU3MSAxNS4xOTcgMTkgMTUuMzQ1IEwgMTkgMTcgTCAyNyAxNyBDIDI3IDE2LjQz'@;
put 'NyAyNi45NDIgMTUuODg3IDI2LjgzMSAxNS4zNTcgTCAzNCAxNS4zNTcgWiBNIDI1IDE5IEwgMTcgMTkgTCAxNyAxMSBDIDEyLjU4MiAxMSA5IDE0LjU4MiA5IDE5IEMgOSAyMy40MTggMTIuNTgyIDI3IDE3IDI3IEMgMjEuNDE4IDI3IDI1IDIzLjQxOCAyNSAxOSBaIj48L3BhdGg+XG4gIDxw'@;
put 'YXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0gMjYuODU0IDEuMTQ0IEwgMjEuMTM0IDExLjAwNCBDIDIwLjU3OSAxMS44MTggMjEuMTE0IDEyLjkyOCAyMi4wOTcgMTMuMDAxIEMgMjIuMTQyIDEzLjAw'@;
put 'NSAyMi4xODggMTMuMDA2IDIyLjIzNCAxMy4wMDQgTCAzMy42ODQgMTMuMDA0IEMgMzQuNjY5IDEzLjAzNiAzNS4zMTkgMTEuOTkxIDM0Ljg1NSAxMS4xMjIgQyAzNC44MzQgMTEuMDgxIDM0LjgxIDExLjA0MiAzNC43ODQgMTEuMDA0IEwgMjkuMDY0IDEuMTQ0IEMgMjguNTcgMC4yOTkgMjcu'@;
put 'MzQ4IDAuMjk5IDI2Ljg1NCAxLjE0NCBaIj48L3BhdGg+JykseS5DbHJTaGFwZVNjYXR0ZXJQbG90PSgwLGcuY2xySWNvblNWRykoJ1xuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTSAzMiA1IEwgNCA1IEMgMi44OTUgNSAyIDUuODk1IDIg'@;
put 'NyBMIDIgMjkgQyAyIDMwLjEwNSAyLjg5NSAzMSA0IDMxIEwgMzIgMzEgQyAzMy4xMDUgMzEgMzQgMzAuMTA1IDM0IDI5IEwgMzQgNyBDIDM0IDUuODk1IDMzLjEwNSA1IDMyIDUgWiBNIDQgMjkgTCA0IDcgTCAzMiA3IEwgMzIgMjkgWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGlu'@;
put 'ZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTSA5LjEwMSAxNS44IEMgOS40MTMgMTYuMTExIDkuOTE5IDE2LjExMSAxMC4yMzEgMTUuOCBMIDExLjM5MSAxNC42NCBMIDEyLjU1MSAxNS44IEMgMTIuOTY0IDE2LjI1NiAxMy43MTcgMTYuMDk0IDEzLjkwNSAxNS41MDcgQyAxNC4wMDIgMTUu'@;
put 'MjA4IDEzLjkxNCAxNC44ODEgMTMuNjgxIDE0LjY3IEwgMTIuNTMxIDEzLjU0IEwgMTMuNjkxIDEyLjM4IEMgMTQuMTQ3IDExLjk2NiAxMy45ODUgMTEuMjE0IDEzLjM5OSAxMS4wMjUgQyAxMy4xIDEwLjkyOSAxMi43NzIgMTEuMDE3IDEyLjU2MSAxMS4yNSBMIDExLjQwMSAxMi40MSBMIDEw'@;
put 'LjIzMSAxMS4yMiBDIDkuODE3IDEwLjc2MyA5LjA2NSAxMC45MjYgOC44NzcgMTEuNTEyIEMgOC43OCAxMS44MTEgOC44NjggMTIuMTM5IDkuMTAxIDEyLjM1IEwgMTAuMjYxIDEzLjU0IEwgOS4xMDEgMTQuNjcgQyA4Ljc4OSAxNC45ODIgOC43ODkgMTUuNDg3IDkuMTAxIDE1LjggWiIvPlxu'@;
put 'ICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgZD0iTSAxNS4xNzYgMjUuNTM2IEMgMTUuNDg4IDI1Ljg0NyAxNS45OTQgMjUuODQ3IDE2LjMwNiAyNS41MzYgTCAxNy40NjYgMjQuMzc2IEwgMTguNjI2IDI1LjUzNiBDIDE5LjAzOSAyNS45OTIgMTku'@;
put 'NzkyIDI1LjgzIDE5Ljk4IDI1LjI0MyBDIDIwLjA3NyAyNC45NDQgMTkuOTg5IDI0LjYxNyAxOS43NTYgMjQuNDA2IEwgMTguNjA2IDIzLjI3NiBMIDE5Ljc2NiAyMi4xMTYgQyAyMC4yMjIgMjEuNzAyIDIwLjA2IDIwLjk1IDE5LjQ3NCAyMC43NjEgQyAxOS4xNzUgMjAuNjY1IDE4Ljg0NyAy'@;
put 'MC43NTMgMTguNjM2IDIwLjk4NiBMIDE3LjQ3NiAyMi4xNDYgTCAxNi4zMDYgMjAuOTU2IEMgMTUuODkyIDIwLjQ5OSAxNS4xNCAyMC42NjIgMTQuOTUyIDIxLjI0OCBDIDE0Ljg1NSAyMS41NDcgMTQuOTQzIDIxLjg3NSAxNS4xNzYgMjIuMDg2IEwgMTYuMzM2IDIzLjI3NiBMIDE1LjE3NiAy'@;
put 'NC40MDYgQyAxNC44NjQgMjQuNzE4IDE0Ljg2NCAyNS4yMjMgMTUuMTc2IDI1LjUzNiBaIi8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiBkPSJNIDIyLjkxMiAyMC4zNDMgQyAyMy4yMjQgMjAuNjU0IDIzLjczIDIwLjY1NCAyNC4wNDIgMjAu'@;
put 'MzQzIEwgMjUuMjAyIDE5LjE4MyBMIDI2LjM2MiAyMC4zNDMgQyAyNi43NzUgMjAuNzk5IDI3LjUyOCAyMC42MzcgMjcuNzE2IDIwLjA1IEMgMjcuODEzIDE5Ljc1MSAyNy43MjUgMTkuNDI0IDI3LjQ5MiAxOS4yMTMgTCAyNi4zNDIgMTguMDgzIEwgMjcuNTAyIDE2LjkyMyBDIDI3Ljk1OCAx'@;
put 'Ni41MDkgMjcuNzk2IDE1Ljc1NyAyNy4yMSAxNS41NjggQyAyNi45MTEgMTUuNDcyIDI2LjU4MyAxNS41NiAyNi4zNzIgMTUuNzkzIEwgMjUuMjEyIDE2Ljk1MyBMIDI0LjA0MiAxNS43NjMgQyAyMy42MjggMTUuMzA2IDIyLjg3NiAxNS40NjkgMjIuNjg4IDE2LjA1NSBDIDIyLjU5MSAxNi4z'@;
put 'NTQgMjIuNjc5IDE2LjY4MiAyMi45MTIgMTYuODkzIEwgMjQuMDcyIDE4LjA4MyBMIDIyLjkxMiAxOS4yMTMgQyAyMi42IDE5LjUyNSAyMi42IDIwLjAzIDIyLjkxMiAyMC4zNDMgWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNIDM0IDcg'@;
put 'TCAzNCAyOSBDIDM0IDMwLjEwNSAzMy4xMDUgMzEgMzIgMzEgTCA0IDMxIEMgMi44OTYgMzEgMiAzMC4xMDUgMiAyOSBMIDIgNyBDIDIgNS44OTYgMi44OTYgNSA0IDUgTCAzMiA1IEMgMzMuMTA1IDUgMzQgNS44OTYgMzQgNyBaIE0gOS4xMDEgMTUuOCBDIDkuNDEzIDE2LjExMSA5LjkxOSAx'@;
put 'Ni4xMTEgMTAuMjMxIDE1LjggTCAxMS4zOTEgMTQuNjQgTCAxMi41NTEgMTUuOCBDIDEyLjk2NCAxNi4yNTYgMTMuNzE3IDE2LjA5NCAxMy45MDUgMTUuNTA3IEMgMTQuMDAyIDE1LjIwOCAxMy45MTQgMTQuODgxIDEzLjY4MSAxNC42NyBMIDEyLjUzMSAxMy41NCBMIDEzLjY5MSAxMi4zOCBD'@;
put 'IDE0LjE0NyAxMS45NjYgMTMuOTg1IDExLjIxNCAxMy4zOTkgMTEuMDI1IEMgMTMuMSAxMC45MjkgMTIuNzcyIDExLjAxNyAxMi41NjEgMTEuMjUgTCAxMS40MDEgMTIuNDEgTCAxMC4yMzEgMTEuMjIgQyA5LjgxNyAxMC43NjMgOS4wNjUgMTAuOTI2IDguODc3IDExLjUxMiBDIDguNzggMTEu'@;
put 'ODExIDguODY4IDEyLjEzOSA5LjEwMSAxMi4zNSBMIDEwLjI2MSAxMy41NCBMIDkuMTAxIDE0LjY3IEMgOC43ODkgMTQuOTgyIDguNzg5IDE1LjQ4NyA5LjEwMSAxNS44IFogTSAxNS4xNzYgMjUuNTM2IEMgMTUuNDg4IDI1Ljg0NyAxNS45OTQgMjUuODQ3IDE2LjMwNiAyNS41MzYgTCAxNy40'@;
put 'NjYgMjQuMzc2IEwgMTguNjI2IDI1LjUzNiBDIDE5LjAzOSAyNS45OTIgMTkuNzkyIDI1LjgzIDE5Ljk4IDI1LjI0MyBDIDIwLjA3NyAyNC45NDQgMTkuOTg5IDI0LjYxNyAxOS43NTYgMjQuNDA2IEwgMTguNjA2IDIzLjI3NiBMIDE5Ljc2NiAyMi4xMTYgQyAyMC4yMjIgMjEuNzAyIDIwLjA2'@;
put 'IDIwLjk1IDE5LjQ3NCAyMC43NjEgQyAxOS4xNzUgMjAuNjY1IDE4Ljg0NyAyMC43NTMgMTguNjM2IDIwLjk4NiBMIDE3LjQ3NiAyMi4xNDYgTCAxNi4zMDYgMjAuOTU2IEMgMTUuODkyIDIwLjQ5OSAxNS4xNCAyMC42NjIgMTQuOTUyIDIxLjI0OCBDIDE0Ljg1NSAyMS41NDcgMTQuOTQzIDIx'@;
put 'Ljg3NSAxNS4xNzYgMjIuMDg2IEwgMTYuMzM2IDIzLjI3NiBMIDE1LjE3NiAyNC40MDYgQyAxNC44NjQgMjQuNzE4IDE0Ljg2NCAyNS4yMjMgMTUuMTc2IDI1LjUzNiBaIE0gMjIuOTEyIDIwLjM0MyBDIDIzLjIyNCAyMC42NTQgMjMuNzMgMjAuNjU0IDI0LjA0MiAyMC4zNDMgTCAyNS4yMDIg'@;
put 'MTkuMTgzIEwgMjYuMzYyIDIwLjM0MyBDIDI2Ljc3NSAyMC43OTkgMjcuNTI4IDIwLjYzNyAyNy43MTYgMjAuMDUgQyAyNy44MTMgMTkuNzUxIDI3LjcyNSAxOS40MjQgMjcuNDkyIDE5LjIxMyBMIDI2LjM0MiAxOC4wODMgTCAyNy41MDIgMTYuOTIzIEMgMjcuOTU4IDE2LjUwOSAyNy43OTYg'@;
put 'MTUuNzU3IDI3LjIxIDE1LjU2OCBDIDI2LjkxMSAxNS40NzIgMjYuNTgzIDE1LjU2IDI2LjM3MiAxNS43OTMgTCAyNS4yMTIgMTYuOTUzIEwgMjQuMDQyIDE1Ljc2MyBDIDIzLjYyOCAxNS4zMDYgMjIuODc2IDE1LjQ2OSAyMi42ODggMTYuMDU1IEMgMjIuNTkxIDE2LjM1NCAyMi42NzkgMTYu'@;
put 'NjgyIDIyLjkxMiAxNi44OTMgTCAyNC4wNzIgMTguMDgzIEwgMjIuOTEyIDE5LjIxMyBDIDIyLjYgMTkuNTI1IDIyLjYgMjAuMDMgMjIuOTEyIDIwLjM0MyBaIi8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgZD0i'@;
put 'TSAzMiAxMy4yMiBMIDMyIDI5IEwgNCAyOSBMIDQgNyBMIDIyLjU3IDcgQyAyMi41MjQgNi42NjggMjIuNTAxIDYuMzM0IDIyLjUgNiBDIDIyLjUwMSA1LjY2NSAyMi41MjQgNS4zMzEgMjIuNTcgNSBMIDQgNSBDIDIuODk1IDUgMiA1Ljg5NSAyIDcgTCAyIDI5IEMgMiAzMC4xMDQgMi44OTUg'@;
put 'MzEgNCAzMSBMIDMyIDMxIEMgMzMuMTA0IDMxIDM0IDMwLjEwNCAzNCAyOSBMIDM0IDEyLjM0IEMgMzMuMzggMTIuNzMgMzIuNzA2IDEzLjAyNiAzMiAxMy4yMiBaIi8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIg'@;
put 'ZD0iTSA5LjEwMSAxNS44IEMgOS40MTMgMTYuMTExIDkuOTE5IDE2LjExMSAxMC4yMzEgMTUuOCBMIDExLjM5MSAxNC42NCBMIDEyLjU1MSAxNS44IEMgMTIuOTY0IDE2LjI1NiAxMy43MTcgMTYuMDk0IDEzLjkwNSAxNS41MDcgQyAxNC4wMDIgMTUuMjA4IDEzLjkxNCAxNC44ODEgMTMuNjgx'@;
put 'IDE0LjY3IEwgMTIuNTMxIDEzLjU0IEwgMTMuNjkxIDEyLjM4IEMgMTQuMTQ3IDExLjk2NiAxMy45ODUgMTEuMjE0IDEzLjM5OSAxMS4wMjUgQyAxMy4xIDEwLjkyOSAxMi43NzIgMTEuMDE3IDEyLjU2MSAxMS4yNSBMIDExLjQwMSAxMi40MSBMIDEwLjIzMSAxMS4yMiBDIDkuODE3IDEwLjc2'@;
put 'MyA5LjA2NSAxMC45MjYgOC44NzcgMTEuNTEyIEMgOC43OCAxMS44MTEgOC44NjggMTIuMTM5IDkuMTAxIDEyLjM1IEwgMTAuMjYxIDEzLjU0IEwgOS4xMDEgMTQuNjcgQyA4Ljc4OSAxNC45ODIgOC43ODkgMTUuNDg3IDkuMTAxIDE1LjggWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0'@;
put 'bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiIGQ9Ik0gMTUuMTc2IDI1LjUzNiBDIDE1LjQ4OCAyNS44NDcgMTUuOTk0IDI1Ljg0NyAxNi4zMDYgMjUuNTM2IEwgMTcuNDY2IDI0LjM3NiBMIDE4LjYyNiAyNS41MzYgQyAxOS4wMzkgMjUuOTkyIDE5Ljc5MiAyNS44'@;
put 'MyAxOS45OCAyNS4yNDMgQyAyMC4wNzcgMjQuOTQ0IDE5Ljk4OSAyNC42MTcgMTkuNzU2IDI0LjQwNiBMIDE4LjYwNiAyMy4yNzYgTCAxOS43NjYgMjIuMTE2IEMgMjAuMjIyIDIxLjcwMiAyMC4wNiAyMC45NSAxOS40NzQgMjAuNzYxIEMgMTkuMTc1IDIwLjY2NSAxOC44NDcgMjAuNzUzIDE4'@;
put 'LjYzNiAyMC45ODYgTCAxNy40NzYgMjIuMTQ2IEwgMTYuMzA2IDIwLjk1NiBDIDE1Ljg5MiAyMC40OTkgMTUuMTQgMjAuNjYyIDE0Ljk1MiAyMS4yNDggQyAxNC44NTUgMjEuNTQ3IDE0Ljk0MyAyMS44NzUgMTUuMTc2IDIyLjA4NiBMIDE2LjMzNiAyMy4yNzYgTCAxNS4xNzYgMjQuNDA2IEMg'@;
put 'MTQuODY0IDI0LjcxOCAxNC44NjQgMjUuMjIzIDE1LjE3NiAyNS41MzYgWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQiIGQ9Ik0gMjIuOTEyIDIwLjM0MyBDIDIzLjIyNCAyMC42NTQgMjMuNzMgMjAuNjU0IDI0'@;
put 'LjA0MiAyMC4zNDMgTCAyNS4yMDIgMTkuMTgzIEwgMjYuMzYyIDIwLjM0MyBDIDI2Ljc3NSAyMC43OTkgMjcuNTI4IDIwLjYzNyAyNy43MTYgMjAuMDUgQyAyNy44MTMgMTkuNzUxIDI3LjcyNSAxOS40MjQgMjcuNDkyIDE5LjIxMyBMIDI2LjM0MiAxOC4wODMgTCAyNy41MDIgMTYuOTIzIEMg'@;
put 'MjcuOTU4IDE2LjUwOSAyNy43OTYgMTUuNzU3IDI3LjIxIDE1LjU2OCBDIDI2LjkxMSAxNS40NzIgMjYuNTgzIDE1LjU2IDI2LjM3MiAxNS43OTMgTCAyNS4yMTIgMTYuOTUzIEwgMjQuMDQyIDE1Ljc2MyBDIDIzLjYyOCAxNS4zMDYgMjIuODc2IDE1LjQ2OSAyMi42ODggMTYuMDU1IEMgMjIu'@;
put 'NTkxIDE2LjM1NCAyMi42NzkgMTYuNjgyIDIyLjkxMiAxNi44OTMgTCAyNC4wNzIgMTguMDgzIEwgMjIuOTEyIDE5LjIxMyBDIDIyLjYgMTkuNTI1IDIyLjYgMjAuMDMgMjIuOTEyIDIwLjM0MyBaIi8+XG4gIDxjaXJjbGUgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRs'@;
put 'aW5lLXBhdGgtNS0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiBkPSJNIDM0IDEyLjM0IEwgMzQgMjkgQyAzNCAzMC4xMDUgMzMuMTA1IDMxIDMy'@;
put 'IDMxIEwgNCAzMSBDIDIuODk2IDMxIDIgMzAuMTA1IDIgMjkgTCAyIDcgQyAyIDUuODk2IDIuODk2IDUgNCA1IEwgMjIuNTcgNSBDIDIxLjk2OSA5LjIzMyAyNS4wNSAxMy4xIDI5LjMxIDEzLjQ2IEwgMzAuMzIgMTMuNDggQyAzMS42MjYgMTMuNDI5IDMyLjg5NSAxMy4wMzYgMzQgMTIuMzQg'@;
put 'WiBNIDkuMTAxIDE1LjggQyA5LjQxMyAxNi4xMTEgOS45MTkgMTYuMTExIDEwLjIzMSAxNS44IEwgMTEuMzkxIDE0LjY0IEwgMTIuNTUxIDE1LjggQyAxMi45NjQgMTYuMjU2IDEzLjcxNyAxNi4wOTQgMTMuOTA1IDE1LjUwNyBDIDE0LjAwMiAxNS4yMDggMTMuOTE0IDE0Ljg4MSAxMy42ODEg'@;
put 'MTQuNjcgTCAxMi41MzEgMTMuNTQgTCAxMy42OTEgMTIuMzggQyAxNC4xNDcgMTEuOTY2IDEzLjk4NSAxMS4yMTQgMTMuMzk5IDExLjAyNSBDIDEzLjEgMTAuOTI5IDEyLjc3MiAxMS4wMTcgMTIuNTYxIDExLjI1IEwgMTEuNDAxIDEyLjQxIEwgMTAuMjMxIDExLjIyIEMgOS44MTcgMTAuNzYz'@;
put 'IDkuMDY1IDEwLjkyNiA4Ljg3NyAxMS41MTIgQyA4Ljc4IDExLjgxMSA4Ljg2OCAxMi4xMzkgOS4xMDEgMTIuMzUgTCAxMC4yNjEgMTMuNTQgTCA5LjEwMSAxNC42NyBDIDguNzg5IDE0Ljk4MiA4Ljc4OSAxNS40ODcgOS4xMDEgMTUuOCBaIE0gMTUuMTc2IDI1LjUzNiBDIDE1LjQ4OCAyNS44'@;
put 'NDcgMTUuOTk0IDI1Ljg0NyAxNi4zMDYgMjUuNTM2IEwgMTcuNDY2IDI0LjM3NiBMIDE4LjYyNiAyNS41MzYgQyAxOS4wMzkgMjUuOTkyIDE5Ljc5MiAyNS44MyAxOS45OCAyNS4yNDMgQyAyMC4wNzcgMjQuOTQ0IDE5Ljk4OSAyNC42MTcgMTkuNzU2IDI0LjQwNiBMIDE4LjYwNiAyMy4yNzYg'@;
put 'TCAxOS43NjYgMjIuMTE2IEMgMjAuMjIyIDIxLjcwMiAyMC4wNiAyMC45NSAxOS40NzQgMjAuNzYxIEMgMTkuMTc1IDIwLjY2NSAxOC44NDcgMjAuNzUzIDE4LjYzNiAyMC45ODYgTCAxNy40NzYgMjIuMTQ2IEwgMTYuMzA2IDIwLjk1NiBDIDE1Ljg5MiAyMC40OTkgMTUuMTQgMjAuNjYyIDE0'@;
put 'Ljk1MiAyMS4yNDggQyAxNC44NTUgMjEuNTQ3IDE0Ljk0MyAyMS44NzUgMTUuMTc2IDIyLjA4NiBMIDE2LjMzNiAyMy4yNzYgTCAxNS4xNzYgMjQuNDA2IEMgMTQuODY0IDI0LjcxOCAxNC44NjQgMjUuMjIzIDE1LjE3NiAyNS41MzYgWiBNIDIyLjkxMiAyMC4zNDMgQyAyMy4yMjQgMjAuNjU0'@;
put 'IDIzLjczIDIwLjY1NCAyNC4wNDIgMjAuMzQzIEwgMjUuMjAyIDE5LjE4MyBMIDI2LjM2MiAyMC4zNDMgQyAyNi43NzUgMjAuNzk5IDI3LjUyOCAyMC42MzcgMjcuNzE2IDIwLjA1IEMgMjcuODEzIDE5Ljc1MSAyNy43MjUgMTkuNDI0IDI3LjQ5MiAxOS4yMTMgTCAyNi4zNDIgMTguMDgzIEwg'@;
put 'MjcuNTAyIDE2LjkyMyBDIDI3Ljk1OCAxNi41MDkgMjcuNzk2IDE1Ljc1NyAyNy4yMSAxNS41NjggQyAyNi45MTEgMTUuNDcyIDI2LjU4MyAxNS41NiAyNi4zNzIgMTUuNzkzIEwgMjUuMjEyIDE2Ljk1MyBMIDI0LjA0MiAxNS43NjMgQyAyMy42MjggMTUuMzA2IDIyLjg3NiAxNS40NjkgMjIu'@;
put 'Njg4IDE2LjA1NSBDIDIyLjU5MSAxNi4zNTQgMjIuNjc5IDE2LjY4MiAyMi45MTIgMTYuODkzIEwgMjQuMDcyIDE4LjA4MyBMIDIyLjkxMiAxOS4yMTMgQyAyMi42IDE5LjUyNSAyMi42IDIwLjAzIDIyLjkxMiAyMC4zNDMgWiIvPlxuICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFk'@;
put 'Z2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiBkPSJNIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEw'@;
put 'NSAzMSAzMiAzMSBMIDQgMzEgQyAyLjg5NSAzMSAyIDMwLjEwNSAyIDI5IEwgMiA3IEMgMiA1Ljg5NSAyLjg5NSA1IDQgNSBMIDIxLjk1OCA1IEwgMjAuNzg2IDcgTCA0IDcgTCA0IDI5IEwgMzIgMjkgTCAzMiAxNS4zNTcgTCAzNCAxNS4zNTcgWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWkt'@;
put 'b3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIgZD0iTSA5LjEwMSAxNS44IEMgOS40MTMgMTYuMTExIDkuOTE5IDE2LjExMSAxMC4yMzEgMTUuOCBMIDExLjM5MSAxNC42NCBMIDEyLjU1MSAxNS44IEMgMTIuOTY0IDE2LjI1NiAxMy43MTcgMTYuMDk0IDEz'@;
put 'LjkwNSAxNS41MDcgQyAxNC4wMDIgMTUuMjA4IDEzLjkxNCAxNC44ODEgMTMuNjgxIDE0LjY3IEwgMTIuNTMxIDEzLjU0IEwgMTMuNjkxIDEyLjM4IEMgMTQuMTQ3IDExLjk2NiAxMy45ODUgMTEuMjE0IDEzLjM5OSAxMS4wMjUgQyAxMy4xIDEwLjkyOSAxMi43NzIgMTEuMDE3IDEyLjU2MSAx'@;
put 'MS4yNSBMIDExLjQwMSAxMi40MSBMIDEwLjIzMSAxMS4yMiBDIDkuODE3IDEwLjc2MyA5LjA2NSAxMC45MjYgOC44NzcgMTEuNTEyIEMgOC43OCAxMS44MTEgOC44NjggMTIuMTM5IDkuMTAxIDEyLjM1IEwgMTAuMjYxIDEzLjU0IEwgOS4xMDEgMTQuNjcgQyA4Ljc4OSAxNC45ODIgOC43ODkg'@;
put 'MTUuNDg3IDkuMTAxIDE1LjggWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIgZD0iTSAxNS4xNzYgMjUuNTM2IEMgMTUuNDg4IDI1Ljg0NyAxNS45OTQgMjUuODQ3IDE2LjMwNiAyNS41MzYgTCAxNy40NjYg'@;
put 'MjQuMzc2IEwgMTguNjI2IDI1LjUzNiBDIDE5LjAzOSAyNS45OTIgMTkuNzkyIDI1LjgzIDE5Ljk4IDI1LjI0MyBDIDIwLjA3NyAyNC45NDQgMTkuOTg5IDI0LjYxNyAxOS43NTYgMjQuNDA2IEwgMTguNjA2IDIzLjI3NiBMIDE5Ljc2NiAyMi4xMTYgQyAyMC4yMjIgMjEuNzAyIDIwLjA2IDIw'@;
put 'Ljk1IDE5LjQ3NCAyMC43NjEgQyAxOS4xNzUgMjAuNjY1IDE4Ljg0NyAyMC43NTMgMTguNjM2IDIwLjk4NiBMIDE3LjQ3NiAyMi4xNDYgTCAxNi4zMDYgMjAuOTU2IEMgMTUuODkyIDIwLjQ5OSAxNS4xNCAyMC42NjIgMTQuOTUyIDIxLjI0OCBDIDE0Ljg1NSAyMS41NDcgMTQuOTQzIDIxLjg3'@;
put 'NSAxNS4xNzYgMjIuMDg2IEwgMTYuMzM2IDIzLjI3NiBMIDE1LjE3NiAyNC40MDYgQyAxNC44NjQgMjQuNzE4IDE0Ljg2NCAyNS4yMjMgMTUuMTc2IDI1LjUzNiBaIi8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVk'@;
put 'IiBkPSJNIDIyLjkxMiAyMC4zNDMgQyAyMy4yMjQgMjAuNjU0IDIzLjczIDIwLjY1NCAyNC4wNDIgMjAuMzQzIEwgMjUuMjAyIDE5LjE4MyBMIDI2LjM2MiAyMC4zNDMgQyAyNi43NzUgMjAuNzk5IDI3LjUyOCAyMC42MzcgMjcuNzE2IDIwLjA1IEMgMjcuODEzIDE5Ljc1MSAyNy43MjUgMTku'@;
put 'NDI0IDI3LjQ5MiAxOS4yMTMgTCAyNi4zNDIgMTguMDgzIEwgMjcuNTAyIDE2LjkyMyBDIDI3Ljk1OCAxNi41MDkgMjcuNzk2IDE1Ljc1NyAyNy4yMSAxNS41NjggQyAyNi45MTEgMTUuNDcyIDI2LjU4MyAxNS41NiAyNi4zNzIgMTUuNzkzIEwgMjUuMjEyIDE2Ljk1MyBMIDI0LjA0MiAxNS43'@;
put 'NjMgQyAyMy42MjggMTUuMzA2IDIyLjg3NiAxNS40NjkgMjIuNjg4IDE2LjA1NSBDIDIyLjU5MSAxNi4zNTQgMjIuNjc5IDE2LjY4MiAyMi45MTIgMTYuODkzIEwgMjQuMDcyIDE4LjA4MyBMIDIyLjkxMiAxOS4yMTMgQyAyMi42IDE5LjUyNSAyMi42IDIwLjAzIDIyLjkxMiAyMC4zNDMgWiIv'@;
put 'PlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTSAyNi44NTQgMS4xNDQgTCAyMS4xMzQgMTEuMDA0IEMgMjAuNTc5IDExLjgxOCAyMS4xMTQgMTIuOTI4IDIyLjA5NyAxMy4wMDEgQyAy'@;
put 'Mi4xNDIgMTMuMDA1IDIyLjE4OCAxMy4wMDYgMjIuMjM0IDEzLjAwNCBMIDMzLjY4NCAxMy4wMDQgQyAzNC42NjkgMTMuMDM2IDM1LjMxOSAxMS45OTEgMzQuODU1IDExLjEyMiBDIDM0LjgzNCAxMS4wODEgMzQuODEgMTEuMDQyIDM0Ljc4NCAxMS4wMDQgTCAyOS4wNjQgMS4xNDQgQyAyOC41'@;
put 'NyAwLjI5OSAyNy4zNDggMC4yOTkgMjYuODU0IDEuMTQ0IFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIgZD0iTSAzNCAyOSBDIDM0IDMwLjEwNSAzMy4xMDUgMzEgMzIgMzEgTCA0IDMxIEMgMi44OTYgMzEgMiAz'@;
put 'MC4xMDUgMiAyOSBMIDIgNyBDIDIgNS44OTYgMi44OTYgNSA0IDUgTCAyMS45NTggNSBMIDE3LjYyNSAxMi4zOTUgQyAxNi43OTUgMTMuNjAxIDE3LjU5NCAxNS4yNDUgMTkuMDY0IDE1LjM1MSBDIDE5LjEzNCAxNS4zNTcgMTkuMjAxIDE1LjM1OSAxOS4yNyAxNS4zNTcgTCAzNCAxNS4zNTcg'@;
put 'WiBNIDkuMTAxIDE1LjggQyA5LjQxMyAxNi4xMTEgOS45MTkgMTYuMTExIDEwLjIzMSAxNS44IEwgMTEuMzkxIDE0LjY0IEwgMTIuNTUxIDE1LjggQyAxMi45NjQgMTYuMjU2IDEzLjcxNyAxNi4wOTQgMTMuOTA1IDE1LjUwNyBDIDE0LjAwMiAxNS4yMDggMTMuOTE0IDE0Ljg4MSAxMy42ODEg'@;
put 'MTQuNjcgTCAxMi41MzEgMTMuNTQgTCAxMy42OTEgMTIuMzggQyAxNC4xNDcgMTEuOTY2IDEzLjk4NSAxMS4yMTQgMTMuMzk5IDExLjAyNSBDIDEzLjEgMTAuOTI5IDEyLjc3MiAxMS4wMTcgMTIuNTYxIDExLjI1IEwgMTEuNDAxIDEyLjQxIEwgMTAuMjMxIDExLjIyIEMgOS44MTcgMTAuNzYz'@;
put 'IDkuMDY1IDEwLjkyNiA4Ljg3NyAxMS41MTIgQyA4Ljc4IDExLjgxMSA4Ljg2OCAxMi4xMzkgOS4xMDEgMTIuMzUgTCAxMC4yNjEgMTMuNTQgTCA5LjEwMSAxNC42NyBDIDguNzg5IDE0Ljk4MiA4Ljc4OSAxNS40ODcgOS4xMDEgMTUuOCBaIE0gMTUuMTc2IDI1LjUzNiBDIDE1LjQ4OCAyNS44'@;
put 'NDcgMTUuOTk0IDI1Ljg0NyAxNi4zMDYgMjUuNTM2IEwgMTcuNDY2IDI0LjM3NiBMIDE4LjYyNiAyNS41MzYgQyAxOS4wMzkgMjUuOTkyIDE5Ljc5MiAyNS44MyAxOS45OCAyNS4yNDMgQyAyMC4wNzcgMjQuOTQ0IDE5Ljk4OSAyNC42MTcgMTkuNzU2IDI0LjQwNiBMIDE4LjYwNiAyMy4yNzYg'@;
put 'TCAxOS43NjYgMjIuMTE2IEMgMjAuMjIyIDIxLjcwMiAyMC4wNiAyMC45NSAxOS40NzQgMjAuNzYxIEMgMTkuMTc1IDIwLjY2NSAxOC44NDcgMjAuNzUzIDE4LjYzNiAyMC45ODYgTCAxNy40NzYgMjIuMTQ2IEwgMTYuMzA2IDIwLjk1NiBDIDE1Ljg5MiAyMC40OTkgMTUuMTQgMjAuNjYyIDE0'@;
put 'Ljk1MiAyMS4yNDggQyAxNC44NTUgMjEuNTQ3IDE0Ljk0MyAyMS44NzUgMTUuMTc2IDIyLjA4NiBMIDE2LjMzNiAyMy4yNzYgTCAxNS4xNzYgMjQuNDA2IEMgMTQuODY0IDI0LjcxOCAxNC44NjQgMjUuMjIzIDE1LjE3NiAyNS41MzYgWiBNIDIyLjkxMiAyMC4zNDMgQyAyMy4yMjQgMjAuNjU0'@;
put 'IDIzLjczIDIwLjY1NCAyNC4wNDIgMjAuMzQzIEwgMjUuMjAyIDE5LjE4MyBMIDI2LjM2MiAyMC4zNDMgQyAyNi43NzUgMjAuNzk5IDI3LjUyOCAyMC42MzcgMjcuNzE2IDIwLjA1IEMgMjcuODEzIDE5Ljc1MSAyNy43MjUgMTkuNDI0IDI3LjQ5MiAxOS4yMTMgTCAyNi4zNDIgMTguMDgzIEwg'@;
put 'MjcuNTAyIDE2LjkyMyBDIDI3Ljk1OCAxNi41MDkgMjcuNzk2IDE1Ljc1NyAyNy4yMSAxNS41NjggQyAyNi45MTEgMTUuNDcyIDI2LjU4MyAxNS41NiAyNi4zNzIgMTUuNzkzIEwgMjUuMjEyIDE2Ljk1MyBMIDI0LjA0MiAxNS43NjMgQyAyMy42MjggMTUuMzA2IDIyLjg3NiAxNS40NjkgMjIu'@;
put 'Njg4IDE2LjA1NSBDIDIyLjU5MSAxNi4zNTQgMjIuNjc5IDE2LjY4MiAyMi45MTIgMTYuODkzIEwgMjQuMDcyIDE4LjA4MyBMIDIyLjkxMiAxOS4yMTMgQyAyMi42IDE5LjUyNSAyMi42IDIwLjAzIDIyLjkxMiAyMC4zNDMgWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0'@;
put 'ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNIDI2Ljg1NCAxLjE0NCBMIDIxLjEzNCAxMS4wMDQgQyAyMC41NzkgMTEuODE4IDIxLjExNCAxMi45MjggMjIuMDk3IDEzLjAwMSBDIDIyLjE0MiAxMy4wMDUgMjIuMTg4IDEzLjAwNiAyMi4yMzQgMTMuMDA0'@;
put 'IEwgMzMuNjg0IDEzLjAwNCBDIDM0LjY2OSAxMy4wMzYgMzUuMzE5IDExLjk5MSAzNC44NTUgMTEuMTIyIEMgMzQuODM0IDExLjA4MSAzNC44MSAxMS4wNDIgMzQuNzg0IDExLjAwNCBMIDI5LjA2NCAxLjE0NCBDIDI4LjU3IDAuMjk5IDI3LjM0OCAwLjI5OSAyNi44NTQgMS4xNDQgWiIvPlxu'@;
put 'ICA8cmVjdCB3aWR0aD0iMzYiIGhlaWdodD0iMzYiIGZpbGwtb3BhY2l0eT0iMCIvPicpLHkuQ2xyU2hhcGVUaWNrQ2hhcnQ9KDAsZy5jbHJJY29uU1ZHKSgnXG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNIDMyIDUgTCA0IDUgQyAyLjg5'@;
put 'NSA1IDIgNS44OTUgMiA3IEwgMiAyOSBDIDIgMzAuMTA1IDIuODk1IDMxIDQgMzEgTCAzMiAzMSBDIDMzLjEwNSAzMSAzNCAzMC4xMDUgMzQgMjkgTCAzNCA3IEMgMzQgNS44OTUgMzMuMTA1IDUgMzIgNSBaIE0gNCAyOSBMIDQgNyBMIDMyIDcgTCAzMiAyOSBaIi8+XG4gIDxwYXRoIGNsYXNz'@;
put 'PSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNIDYgMjUgTCA4IDI1IEwgOCAyMiBMIDEwIDIyIEwgMTAgMjUgTCAxMyAyNSBMIDEzIDIyIEwgMTUgMjIgTCAxNSAyNSBMIDE4IDI1IEwgMTggMjIgTCAyMCAyMiBMIDIwIDI1IEwgMjMgMjUgTCAyMyAyMiBMIDI1IDIy'@;
put 'IEwgMjUgMjUgTCAyNy43MjMgMjUgQyAyOC4wMjMgMjUuMDIgMjguMjkzIDI1LjE4IDI4LjQ2MyAyNS40MyBDIDI4LjkwMyAyNi4wNiAyOC40ODMgMjYuOTMgMjcuNzIzIDI2Ljk5IEwgNiAyNi45OTEgWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0x'@;
put 'IiBkPSJNIDM0IDcgTCAzNCAyOSBDIDM0IDMwLjEwNSAzMy4xMDUgMzEgMzIgMzEgTCA0IDMxIEMgMi44OTYgMzEgMiAzMC4xMDUgMiAyOSBMIDIgNyBDIDIgNS44OTYgMi44OTYgNSA0IDUgTCAzMiA1IEMgMzMuMTA1IDUgMzQgNS44OTYgMzQgNyBaIE0gNiAyNi45OTEgTCAyNy43MjMgMjYu'@;
put 'OTkgQyAyOC40ODMgMjYuOTMgMjguOTAzIDI2LjA2IDI4LjQ2MyAyNS40MyBDIDI4LjI5MyAyNS4xOCAyOC4wMjMgMjUuMDIgMjcuNzIzIDI1IEwgMjUgMjUgTCAyNSAyMiBMIDIzIDIyIEwgMjMgMjUgTCAyMCAyNSBMIDIwIDIyIEwgMTggMjIgTCAxOCAyNSBMIDE1IDI1IEwgMTUgMjIgTCAx'@;
put 'MyAyMiBMIDEzIDI1IEwgMTAgMjUgTCAxMCAyMiBMIDggMjIgTCA4IDI1IEwgNiAyNSBaIi8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgZD0iTSAzMiAxMy4yMiBMIDMyIDI5IEwgNCAyOSBMIDQgNyBMIDIyLjU3'@;
put 'IDcgQyAyMi41MjQgNi42NjggMjIuNTAxIDYuMzM0IDIyLjUgNiBDIDIyLjUwMSA1LjY2NSAyMi41MjQgNS4zMzEgMjIuNTcgNSBMIDQgNSBDIDIuODk1IDUgMiA1Ljg5NSAyIDcgTCAyIDI5IEMgMiAzMC4xMDQgMi44OTUgMzEgNCAzMSBMIDMyIDMxIEMgMzMuMTA0IDMxIDM0IDMwLjEwNCAz'@;
put 'NCAyOSBMIDM0IDEyLjM0IEMgMzMuMzggMTIuNzMgMzIuNzA2IDEzLjAyNiAzMiAxMy4yMiBaIi8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgZD0iTSA2IDI1IEwgOCAyNSBMIDggMjIgTCAxMCAyMiBMIDEwIDI1'@;
put 'IEwgMTMgMjUgTCAxMyAyMiBMIDE1IDIyIEwgMTUgMjUgTCAxOCAyNSBMIDE4IDIyIEwgMjAgMjIgTCAyMCAyNSBMIDIzIDI1IEwgMjMgMjIgTCAyNSAyMiBMIDI1IDI1IEwgMjcuNzIzIDI1IEMgMjguMDIzIDI1LjAyIDI4LjI5MyAyNS4xOCAyOC40NjMgMjUuNDMgQyAyOC45MDMgMjYuMDYg'@;
put 'MjguNDgzIDI2LjkzIDI3LjcyMyAyNi45OSBMIDYgMjYuOTkxIFoiLz5cbiAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAgPHBhdGggY2xhc3M9ImNs'@;
put 'ci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0gMzQgMTIuMzQgTCAzNCAyOSBDIDM0IDMwLjEwNSAzMy4xMDUgMzEgMzIgMzEgTCA0IDMxIEMgMi44OTYgMzEgMiAzMC4xMDUgMiAyOSBMIDIgNyBDIDIgNS44OTYgMi44OTYgNSA0IDUgTCAyMi41NyA1'@;
put 'IEMgMjEuOTY5IDkuMjMzIDI1LjA1IDEzLjEgMjkuMzEgMTMuNDYgTCAzMC4zMiAxMy40OCBDIDMxLjYyNiAxMy40MjkgMzIuODk1IDEzLjAzNiAzNCAxMi4zNCBaIE0gNiAyNi45OTEgTCAyNy43MjMgMjYuOTkgQyAyOC40ODMgMjYuOTMgMjguOTAzIDI2LjA2IDI4LjQ2MyAyNS40MyBDIDI4'@;
put 'LjI5MyAyNS4xOCAyOC4wMjMgMjUuMDIgMjcuNzIzIDI1IEwgMjUgMjUgTCAyNSAyMiBMIDIzIDIyIEwgMjMgMjUgTCAyMCAyNSBMIDIwIDIyIEwgMTggMjIgTCAxOCAyNSBMIDE1IDI1IEwgMTUgMjIgTCAxMyAyMiBMIDEzIDI1IEwgMTAgMjUgTCAxMCAyMiBMIDggMjIgTCA4IDI1IEwgNiAy'@;
put 'NSBaIi8+XG4gIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRo'@;
put 'LTEtLWFsZXJ0ZWQiIGQ9Ik0gMzQgMjkgQyAzNCAzMC4xMDUgMzMuMTA1IDMxIDMyIDMxIEwgNCAzMSBDIDIuODk1IDMxIDIgMzAuMTA1IDIgMjkgTCAyIDcgQyAyIDUuODk1IDIuODk1IDUgNCA1IEwgMjEuOTU4IDUgTCAyMC43ODYgNyBMIDQgNyBMIDQgMjkgTCAzMiAyOSBMIDMyIDE1LjM1'@;
put 'NyBMIDM0IDE1LjM1NyBaIi8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIiBkPSJNIDYgMjUgTCA4IDI1IEwgOCAyMiBMIDEwIDIyIEwgMTAgMjUgTCAxMyAyNSBMIDEzIDIyIEwgMTUgMjIgTCAxNSAyNSBMIDE4'@;
put 'IDI1IEwgMTggMjIgTCAyMCAyMiBMIDIwIDI1IEwgMjMgMjUgTCAyMyAyMiBMIDI1IDIyIEwgMjUgMjUgTCAyNy43MjMgMjUgQyAyOC4wMjMgMjUuMDIgMjguMjkzIDI1LjE4IDI4LjQ2MyAyNS40MyBDIDI4LjkwMyAyNi4wNiAyOC40ODMgMjYuOTMgMjcuNzIzIDI2Ljk5IEwgNiAyNi45OTEg'@;
put 'WiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTSAyNi44NTQgMS4xNDQgTCAyMS4xMzQgMTEuMDA0IEMgMjAuNTc5IDExLjgxOCAyMS4xMTQgMTIuOTI4IDIyLjA5NyAxMy4wMDEg'@;
put 'QyAyMi4xNDIgMTMuMDA1IDIyLjE4OCAxMy4wMDYgMjIuMjM0IDEzLjAwNCBMIDMzLjY4NCAxMy4wMDQgQyAzNC42NjkgMTMuMDM2IDM1LjMxOSAxMS45OTEgMzQuODU1IDExLjEyMiBDIDM0LjgzNCAxMS4wODEgMzQuODEgMTEuMDQyIDM0Ljc4NCAxMS4wMDQgTCAyOS4wNjQgMS4xNDQgQyAy'@;
put 'OC41NyAwLjI5OSAyNy4zNDggMC4yOTkgMjYuODU0IDEuMTQ0IFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIgZD0iTSAzNCAyOSBDIDM0IDMwLjEwNSAzMy4xMDUgMzEgMzIgMzEgTCA0IDMxIEMgMi44OTYgMzEg'@;
put 'MiAzMC4xMDUgMiAyOSBMIDIgNyBDIDIgNS44OTYgMi44OTYgNSA0IDUgTCAyMS45NTggNSBMIDE3LjYyNSAxMi4zOTUgQyAxNi43OTUgMTMuNjAxIDE3LjU5NCAxNS4yNDUgMTkuMDY0IDE1LjM1MSBDIDE5LjEzNCAxNS4zNTcgMTkuMjAxIDE1LjM1OSAxOS4yNyAxNS4zNTcgTCAzNCAxNS4z'@;
put 'NTcgWiBNIDYgMjYuOTkxIEwgMjcuNzIzIDI2Ljk5IEMgMjguNDgzIDI2LjkzIDI4LjkwMyAyNi4wNiAyOC40NjMgMjUuNDMgQyAyOC4yOTMgMjUuMTggMjguMDIzIDI1LjAyIDI3LjcyMyAyNSBMIDI1IDI1IEwgMjUgMjIgTCAyMyAyMiBMIDIzIDI1IEwgMjAgMjUgTCAyMCAyMiBMIDE4IDIy'@;
put 'IEwgMTggMjUgTCAxNSAyNSBMIDE1IDIyIEwgMTMgMjIgTCAxMyAyNSBMIDEwIDI1IEwgMTAgMjIgTCA4IDIyIEwgOCAyNSBMIDYgMjUgWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJN'@;
put 'IDI2Ljg1NCAxLjE0NCBMIDIxLjEzNCAxMS4wMDQgQyAyMC41NzkgMTEuODE4IDIxLjExNCAxMi45MjggMjIuMDk3IDEzLjAwMSBDIDIyLjE0MiAxMy4wMDUgMjIuMTg4IDEzLjAwNiAyMi4yMzQgMTMuMDA0IEwgMzMuNjg0IDEzLjAwNCBDIDM0LjY2OSAxMy4wMzYgMzUuMzE5IDExLjk5MSAz'@;
put 'NC44NTUgMTEuMTIyIEMgMzQuODM0IDExLjA4MSAzNC44MSAxMS4wNDIgMzQuNzg0IDExLjAwNCBMIDI5LjA2NCAxLjE0NCBDIDI4LjU3IDAuMjk5IDI3LjM0OCAwLjI5OSAyNi44NTQgMS4xNDQgWiIvPicpLHkuQ2xyU2hhcGVCZWxsQ3VydmU9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggZD0i'@;
put 'TTMzLDI5SDNBMSwxLDAsMSwxLDMsMjdIMzNBMSwxLDAsMSwxLDMzLDI5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTMzLDI1aC0uNjJhOC4xMSw4LjExLDAsMCwxLTgtNi42N0MyMy42MiwxNC40NCwyMS44OSw3Ljk0LDE4LDcuOTRz'@;
put 'LTUuNjksNi41MS02LjM4LDEwLjM5YTguMTEsOC4xMSwwLDAsMS04LDYuNjVIM2ExLDEsMCwxLDEsMC0yaC42QTYuMTEsNi4xMSwwLDAsMCw5LjYsMThjMS40MS03Ljg4LDQuMy0xMiw4LjM1LTEyczYuOTMsNC4xNiw4LjMzLDEyYTYuMTEsNi4xMSwwLDAsMCw2LDVIMzNhMSwxLDAsMCwxLDAs'@;
put 'MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPicpLHkuQ2hhcnRTaGFwZXM9eyJheGlzLWNoYXJ0Ijp5LkNsclNoYXBlQXhpc0NoYXJ0LCJiYXItY2hhcnQiOnkuQ2xyU2hhcGVCYXJDaGFydCwiYnViYmxlLWNoYXJ0Ijp5LkNsclNoYXBlQnViYmxlQ2hh'@;
put 'cnQsImNsb3VkLWNoYXJ0Ijp5LkNsclNoYXBlQ2xvdWRDaGFydCwiY3VydmUtY2hhcnQiOnkuQ2xyU2hhcGVDdXJ2ZUNoYXJ0LCJncmlkLWNoYXJ0Ijp5LkNsclNoYXBlR3JpZENoYXJ0LCJsaW5lLWNoYXJ0Ijp5LkNsclNoYXBlTGluZUNoYXJ0LCJwaWUtY2hhcnQiOnkuQ2xyU2hhcGVQaWVD'@;
put 'aGFydCwidGljay1jaGFydCI6eS5DbHJTaGFwZVRpY2tDaGFydCwic2NhdHRlci1wbG90Ijp5LkNsclNoYXBlU2NhdHRlclBsb3QsImJveC1wbG90Ijp5LkNsclNoYXBlQm94UGxvdCwiaGVhdC1tYXAiOnkuQ2xyU2hhcGVIZWF0TWFwLCJiZWxsLWN1cnZlIjp5LkNsclNoYXBlQmVsbEN1cnZl'@;
put 'fSxPYmplY3QuZGVmaW5lUHJvcGVydHkoeS5DaGFydFNoYXBlcywiYW5hbHl0aWNzIiwoMCxfLmRlc2NyaXB0b3JDb25maWcpKHkuQ2hhcnRTaGFwZXNbImxpbmUtY2hhcnQiXSkpLHR5cGVvZiB3aW5kb3c8InUiJiZ3aW5kb3cuaGFzT3duUHJvcGVydHkoIkNsYXJpdHlJY29ucyIpJiZ3aW5k'@;
put 'b3cuQ2xhcml0eUljb25zLmFkZCh5LkNoYXJ0U2hhcGVzKX0sIi4vcHJvamVjdHMvaWNvbnMvc3JjL3NoYXBlcy9jb21tZXJjZS1zaGFwZXMudHMiOgovKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKICAgICAgICAgICAgICAgICAg'@;
put 'ISoqKiAuL3Byb2plY3RzL2ljb25zL3NyYy9zaGFwZXMvY29tbWVyY2Utc2hhcGVzLnRzICoqKiEKICAgICAgICAgICAgICAgICAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLyohIG5vIHN0YXRpYyBleHBvcnRzIGZvdW5kICovZnVu'@;
put 'Y3Rpb24oWCx5LEkpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoeSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSkseS5Db21tZXJjZVNoYXBlcz15LkNsclNoYXBlRmFjdG9yeT15LkNsclNoYXBlRW1wbG95ZWU9eS5DbHJTaGFwZUVtcGxveWVlR3JvdXA9eS5DbHJTaGFwZVJ1'@;
put 'YmxlPXkuQ2xyU2hhcGVQZXNvPXkuQ2xyU2hhcGVDb2luQmFnPXkuQ2xyU2hhcGVCaXRjb2luPXkuQ2xyU2hhcGVZZW49eS5DbHJTaGFwZVdvbj15LkNsclNoYXBlUnVwZWU9eS5DbHJTaGFwZVBvdW5kPXkuQ2xyU2hhcGVFQ2hlY2s9eS5DbHJTaGFwZURvbGxhckJpbGw9eS5DbHJTaGFwZUJh'@;
put 'bms9eS5DbHJTaGFwZUNyZWRpdENhcmQ9eS5DbHJTaGFwZURvbGxhcj15LkNsclNoYXBlRXVybz15LkNsclNoYXBlU3RvcmU9eS5DbHJTaGFwZVdhbGxldD15LkNsclNoYXBlU2hvcHBpbmdDYXJ0PXkuQ2xyU2hhcGVQaWdneUJhbms9eS5DbHJTaGFwZVNob3BwaW5nQmFnPXkuQ2xyU2hhcGVD'@;
put 'YWxjdWxhdG9yPXZvaWQgMDt2YXIgXz1JKAovKiEgLi4vdXRpbHMvZGVzY3JpcHRvci1jb25maWcgKi8KIi4vcHJvamVjdHMvaWNvbnMvc3JjL3V0aWxzL2Rlc2NyaXB0b3ItY29uZmlnLnRzIiksZz1JKAovKiEgLi4vdXRpbHMvc3ZnLXRhZy1nZW5lcmF0b3IgKi8KIi4vcHJvamVjdHMvaWNv'@;
put 'bnMvc3JjL3V0aWxzL3N2Zy10YWctZ2VuZXJhdG9yLnRzIik7eS5DbHJTaGFwZUNhbGN1bGF0b3I9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0yOCwySDhBMiwyLDAsMCwwLDYsNFYzMmEyLDIsMCwwLDAsMiwy'@;
put 'SDI4YTIsMiwwLDAsMCwyLTJWNEEyLDIsMCwwLDAsMjgsMlpNOCwzMlY0SDI4VjMyWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0xMiw4SDI1LjY3VjZIMTFhMSwxLDAsMCwwLTEsMXY0LjY3aDJaIi8+XG4gICAg'@;
put 'ICAgICAgICA8cG9seWdvbiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgcG9pbnRzPSIxMiAxNiAxMCAxNiAxMCAxOCAxNCAxOCAxNCAxNCAxMiAxNCAxMiAxNiIvPlxuICAgICAgICAgICAgPHBvbHlnb24gY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0'@;
put 'bGluZS1wYXRoLTQiIHBvaW50cz0iMjQgMTYgMjIgMTYgMjIgMTggMjYgMTggMjYgMTQgMjQgMTQgMjQgMTYiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiBwb2ludHM9IjE4IDE2IDE2IDE2IDE2IDE4IDIwIDE4IDIw'@;
put 'IDE0IDE4IDE0IDE4IDE2Ii8+XG4gICAgICAgICAgICA8cG9seWdvbiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIgcG9pbnRzPSIxMiAyMiAxMCAyMiAxMCAyNCAxNCAyNCAxNCAyMCAxMiAyMCAxMiAyMiIvPlxuICAgICAgICAgICAgPHBvbHlnb24gY2xhc3M9'@;
put 'ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTciIHBvaW50cz0iMjQgMjIgMjIgMjIgMjIgMjQgMjYgMjQgMjYgMjAgMjQgMjAgMjQgMjIiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC04IiBwb2ludHM9IjE4'@;
put 'IDIyIDE2IDIyIDE2IDI0IDIwIDI0IDIwIDIwIDE4IDIwIDE4IDIyIi8+XG4gICAgICAgICAgICA8cG9seWdvbiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtOSIgcG9pbnRzPSIxMiAyOCAxMCAyOCAxMCAzMCAxNCAzMCAxNCAyNiAxMiAyNiAxMiAyOCIvPlxuICAg'@;
put 'ICAgICAgICAgPHBvbHlnb24gY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEwIiBwb2ludHM9IjI0IDI4IDIyIDI4IDIyIDMwIDI2IDMwIDI2IDI2IDI0IDI2IDI0IDI4Ii8+XG4gICAgICAgICAgICA8cG9seWdvbiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1v'@;
put 'dXRsaW5lLXBhdGgtMTEiIHBvaW50cz0iMTggMjggMTYgMjggMTYgMzAgMjAgMzAgMjAgMjYgMTggMjYgMTggMjgiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0yOCwySDhBMiwyLDAsMCwwLDYsNFYzMmEyLDIsMCwwLDAs'@;
put 'MiwySDI4YTIsMiwwLDAsMCwyLTJWNEEyLDIsMCwwLDAsMjgsMlpNMTIsMjhIMTBWMjZoMlptMC02SDEwVjIwaDJabTAtNkgxMFYxNGgyWm03LDEySDE3VjI2aDJabTAtNkgxN1YyMGgyWm0wLTZIMTdWMTRoMlptNywxMkgyNFYyNmgyWm0wLTZIMjRWMjBoMlptMC02SDI0VjE0aDJabTAtN0gx'@;
put 'MFY1SDI2WiIvPicpLHkuQ2xyU2hhcGVTaG9wcGluZ0JhZz0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTI1LDEyVjkuMDVhNyw3LDAsMSwwLTE0LDB2N2ExLDEsMCwwLDAsMiwwVjE0aDhWMTJIMTNWOS4wNWE1'@;
put 'LDUsMCwxLDEsMTAsMFYxNmExLDEsMCwxLDAsMiwwVjE0aDVWMzJINlYxNEg5VjEySDRWMzIuMDlBMS45MSwxLjkxLDAsMCwwLDUuOTEsMzRIMzAuMDlBMS45MSwxLjkxLDAsMCwwLDMyLDMyLjA5VjEyWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNv'@;
put 'bGlkLXBhdGgtMSIgZD0iTTEzLDkuMjJhNSw1LDAsMSwxLDEwLDBWMTJoMlY5LjIyYTcsNywwLDEsMC0xNCwwVjEyaDJaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNMjUsMTJ2My4xYTEsMSwwLDEsMS0yLDBWMTJIMTN2'@;
put 'My4xYTEsMSwwLDAsMS0yLDBWMTJINFYzMmEyLDIsMCwwLDAsMiwySDMwYTIsMiwwLDAsMCwyLTJWMTJaIi8+JykseS5DbHJTaGFwZVBpZ2d5QmFuaz0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE5LjcyLDEw'@;
put 'LjQ3YTExLjY1LDExLjY1LDAsMCwwLTYuMzEuNTJBLjguOCwwLDEsMCwxNCwxMi40OCwxMC4xMSwxMC4xMSwwLDAsMSwxOS40NCwxMmEuOC44LDAsMSwwLC4yOC0xLjU3WiIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIg'@;
put 'Y3g9IjI1LjM4IiBjeT0iMTYuNzEiIHI9IjEuMzYiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMzUuNTEsMTguNjNhMSwxLDAsMCwwLS44NC0uNDQsMy40MiwzLjQyLDAsMCwxLTIuMDktMS4xMiwxNy4zNSwxNy4z'@;
put 'NSwwLDAsMS0yLjYzLTMuNzhsMi44OC00LjVBMS44OSwxLjg5LDAsMCwwLDMzLDdhMS43NywxLjc3LDAsMCwwLTEuMzMtMSwxMC4xMiwxMC4xMiwwLDAsMC01LjM5Ljc1LDEyLjcyLDEyLjcyLDAsMCwwLTIuNzIsMS42MywxNi45NCwxNi45NCwwLDAsMC01LjE2LTEuMzlDMTEuMzEsNi4zLDQu'@;
put 'ODMsMTAuOSw0LDE3SDRhMi41NiwyLjU2LDAsMCwxLTEuMzgtMS41MywxLjgxLDEuODEsMCwwLDEsLjE0LTEuNCwxLjE5LDEuMTksMCwwLDEsLjQzLS40MywxLjA4LDEuMDgsMCwwLDAtMS4xMi0xLjg1QTMuMzEsMy4zMSwwLDAsMCwuOTEsMTNhNCw0LDAsMCwwLS4zMywzLjA4QTQuNzYsNC43'@;
put 'NiwwLDAsMCwzLDE4Ljk1bC45Mi40NmExNy41OCwxNy41OCwwLDAsMCwxLjgyLDdsLjE3LjM4QTIzLDIzLDAsMCwwLDkuMiwzMS44OGExLDEsMCwwLDAsLjc1LjM0aDQuNTJhMSwxLDAsMCwwLC45Mi0xLjM4TDE1LDI5Ljk0bDEuMTguMTNhMjAuMzMsMjAuMzMsMCwwLDAsNCwwYy4zNy42Ljc3'@;
put 'LDEuMiwxLjIxLDEuNzlhMSwxLDAsMCwwLC44LjQxaDQuMzRhMSwxLDAsMCwwLC45Mi0xLjM5Yy0uMTctLjQtLjM0LS44My0uNDctMS4yLS4xOC0uNTMtLjMyLTEtLjQzLTEuNDVBMTMuMTgsMTMuMTgsMCwwLDAsMjkuNTYsMjZhMTIuNSwxMi41LDAsMCwwLDMsMCwxLDEsMCwwLDAsLjc4LS42'@;
put 'MmwyLjI2LTUuODFBMSwxLDAsMCwwLDM1LjUxLDE4LjYzWm0tMy43OCw1LjQ0YTExLjM3LDExLjM3LDAsMCwxLTIuMzUtLjExaDBhOC4yLDguMiwwLDAsMS0yLjUzLS44NywxLDEsMCwwLDAtLjkzLDEuNzcsMTEuNzIsMTEuNzIsMCwwLDAsMS4yOS41OCw4LDgsMCwwLDEtMS44LDEuMTZsLTEu'@;
put 'MDYuNDhzLjQ5LDIuMTkuODIsMy4xNkgyMi43OWMtLjI0LS4zNC0xLjQ1LTIuMzYtMS40NS0yLjM2bC0uNjcuMDlhMTguNTMsMTguNTMsMCwwLDEtNC4yNS4xMmMtLjY2LS4wNi0xLjc2LS4yLTIuNjItLjM1bC0xLjU1LS4yN3MuNjMsMi40My43NSwyLjc0djBIMTAuNDJBMjAuNTcsMjAuNTcs'@;
put 'MCwwLDEsNy43NiwyNmwtLjE4LS4zOUExNC42MiwxNC42MiwwLDAsMSw2LDE3LjQ4Yy41NC01LjE5LDYuMTItOS4xMSwxMi4xOS04LjU0YTE1LjQ3LDE1LjQ3LDAsMCwxLDUuMDgsMS40OGwuNjIuMjkuNS0uNDdBMTAuMjksMTAuMjksMCwwLDEsMjcsOC41NGE4LjI1LDguMjUsMCwwLDEsNC0u'@;
put 'NjVsLTMuMzgsNS4yOS4yNS41aDBhMjEuMTYsMjEuMTYsMCwwLDAsMy4zMSw0Ljg0LDYuNDksNi40OSwwLDAsMCwyLjE0LDEuMzlaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzUsMTguODdBNS44Myw1LjgzLDAsMCwx'@;
put 'LDMzLDE3LjYxYTIxLjYzLDIxLjYzLDAsMCwxLTMuMjktNC44NGwzLjM5LTUuMjlhLjkuOSwwLDAsMC0uNTQtMS4zOCw5LjY3LDkuNjcsMCwwLDAtNS4xMy43MiwxMiwxMiwwLDAsMC0zLjEzLDJBMTcuMzcsMTcuMzcsMCwwLDAsMTguNiw3LjE1QzExLjgsNi41Miw1LjI3LDEwLjksNC41NCwx'@;
put 'N2wtLjE0LS4wN0EyLjc2LDIuNzYsMCwwLDEsMi45LDE1LjI5YTIsMiwwLDAsMSwuMTUtMS41NSwxLjMyLDEuMzIsMCwwLDEsLjQ3LS40OCwxLjA4LDEuMDgsMCwxLDAtMS4xMi0xLjg1LDMuNDUsMy40NSwwLDAsMC0xLjIzLDEuMjVBNC4xNiw0LjE2LDAsMCwwLC44NCwxNS45YTUsNSwwLDAs'@;
put 'MCwyLjU3LDNsMSwuNTRhMTguNjIsMTguNjIsMCwwLDAsMiw3LjMsMjMsMjMsMCwwLDAsMyw0Ljc5LDEsMSwwLDAsMCwuOC4zOGgzLjYxYS41Mi41MiwwLDAsMCwuNC0uNzVMMTQsMzAuMzhhMTEsMTEsMCwwLDEtLjMzLTEuMThjLjkxLjE2LDIuMDguMzEsMi44Ny4zOGEyMC4wNywyMC4wNyww'@;
put 'LDAsMCwzLjEyLDBjLjM5LjcuNzksMS4zMywxLjE1LDEuODVhLjkzLjkzLDAsMCwwLC43Ny40MWgzLjExYS42NS42NSwwLDAsMCwuNjEtLjg1Yy0uMjMtLjc0LS41My0xLjc1LS43MS0yLjM3YTE1LjksMTUuOSwwLDAsMCwzLjc1LTEuNzZjLjE2LS4xMS4zMi0uMjYuNDgtLjM5YTEzLjc3LDEz'@;
put 'Ljc3LDAsMCwxLTIuNDItMSwuOC44LDAsMCwxLC43NC0xLjQyLDExLjY0LDExLjY0LDAsMCwwLDMuMTgsMS4xLDEzLjMxLDEzLjMxLDAsMCwwLDIuNjguMTIsMSwxLDAsMCwwLC45LS42NmwxLjczLTQuNDRBMSwxLDAsMCwwLDM1LDE4Ljg3Wk0xMy43OSwxMS41OWEuODYuODYsMCwwLDEtLjMu'@;
put 'MDUuODUuODUsMCwwLDEtLjMtMS42NCwxMi40MSwxMi40MSwwLDAsMSw2LjY5LS41NS44NS44NSwwLDEsMS0uMywxLjY3QTEwLjc1LDEwLjc1LDAsMCwwLDEzLjc5LDExLjU5Wm0xMi41Miw2LjEyYTEuNDQsMS40NCwwLDEsMSwxLjQ0LTEuNDRBMS40NCwxLjQ0LDAsMCwxLDI2LjMyLDE3Ljcy'@;
put 'WiIvPicpLHkuQ2xyU2hhcGVTaG9wcGluZ0NhcnQ9KDAsZy5jbHJJY29uU1ZHKSgnPGNpcmNsZSBjeD0iMTMuMzMiIGN5PSIyOS43NSIgcj0iMi4yNSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIyNyIgY3k9'@;
put 'IjI5Ljc1IiByPSIyLjI1IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy4wOCw1LjM3QTEsMSwwLDAsMCwzMi4zMSw1SDExLjQ5bC42NSwySDMxTDI4LjMzLDE5aC0xNUw4Ljc2LDQuNTNhMSwxLDAsMCwwLS42'@;
put 'Ni0uNjVMNCwyLjYyYTEsMSwwLDEsMC0uNTksMS45Mkw3LDUuNjRsNC41OSwxNC41TDkuOTUsMjEuNDhsLS4xMy4xM0EyLjY2LDIuNjYsMCwwLDAsOS43NCwyNSwyLjc1LDIuNzUsMCwwLDAsMTIsMjZIMjguNjlhMSwxLDAsMCwwLDAtMkgxMS44NGEuNjcuNjcsMCwwLDEtLjU2LTFsMi40MS0y'@;
put 'SDI5LjEzYTEsMSwwLDAsMCwxLS43OGwzLjE3LTE0QTEsMSwwLDAsMCwzMy4wOCw1LjM3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIxMy4zMyIgY3k9IjI5Ljc1IiByPSIyLjI1IiBjbGFzcz0iY2xyLWkt'@;
put 'b3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjI3IiBjeT0iMjkuNzUiIHI9IjIuMjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIiAvPlxu'@;
put 'ICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSIyMC43MSA3IDIxLjg3IDUgMTEuNDkgNSAxMi4xNCA3IDIwLjcxIDciIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI5LjE1LDE1'@;
put 'LjQsMjguMzMsMTloLTE1TDguNzYsNC41M2ExLDEsMCwwLDAtLjY2LS42NUw0LDIuNjJhMSwxLDAsMSwwLS41OSwxLjkyTDcsNS42NGw0LjU5LDE0LjVMOS45NSwyMS40OGwtLjEzLjEzQTIuNjYsMi42NiwwLDAsMCw5Ljc0LDI1LDIuNzUsMi43NSwwLDAsMCwxMiwyNkgyOC42OWExLDEsMCww'@;
put 'LDAsMC0ySDExLjg0YS42Ny42NywwLDAsMS0uNTYtMWwyLjQxLTJIMjkuMTNhMSwxLDAsMCwwLDEtLjc4bDEuMDktNC44MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1'@;
put 'LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC01LS1h'@;
put 'bGVydGVkIGNsci1pLWFsZXJ0IiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMTMuMzMiIGN5PSIyOS43NSIgcj0iMi4yNSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMjci'@;
put 'IGN5PSIyOS43NSIgcj0iMi4yNSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIyLjU3LDdhNy41Miw3LjUyLDAsMCwxLS4wNy0xLDcuNTIsNy41MiwwLDAsMSwuMDctMUgxMS40OWwu'@;
put 'NjUsMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMCwxMy41bC0uNDIsMEwyOC4zMywxOWgtMTVMOC43Niw0LjUzYTEsMSwwLDAsMC0uNjYtLjY1TDQsMi42MmExLDEsMCwxLDAt'@;
put 'LjU5LDEuOTJMNyw1LjY0bDQuNTksMTQuNUw5Ljk1LDIxLjQ4bC0uMTMuMTNBMi42NiwyLjY2LDAsMCwwLDkuNzQsMjUsMi43NSwyLjc1LDAsMCwwLDEyLDI2SDI4LjY5YTEsMSwwLDAsMCwwLTJIMTEuODRhLjY3LjY3LDAsMCwxLS41Ni0xbDIuNDEtMkgyOS4xM2ExLDEsMCwwLDAsMS0uNzhs'@;
put 'MS41Ny02LjkxQTcuNTEsNy41MSwwLDAsMSwzMCwxMy41WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJh'@;
put 'ZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMTMuNSIgY3k9IjI5LjUiIHI9IjIuNSIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9'@;
put 'IjI2LjUiIGN5PSIyOS41IiByPSIyLjUiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuMSw2LjM5QTEsMSwwLDAsMCwzMi4zMSw2SDkuMjFMOC43Niw0LjU3YTEsMSwwLDAsMC0uNjYtLjY1TDQsMi42NmExLDEsMCwx'@;
put 'LDAtLjU5LDEuOTJMNyw1LjY4bDQuNTgsMTQuNDdMOS45NSwyMS40OWwtLjEzLjEzQTIuNjYsMi42NiwwLDAsMCw5Ljc0LDI1LDIuNzUsMi43NSwwLDAsMCwxMiwyNkgyOC42OWExLDEsMCwwLDAsMC0ySDExLjg0YS42Ny42NywwLDAsMS0uNTYtMWwyLjQxLTJIMjkuMTJhMSwxLDAsMCwwLDEt'@;
put 'Ljc2bDMuMi0xM0ExLDEsMCwwLDAsMzMuMSw2LjM5WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjEzLjUiIGN5PSIyOS41IiByPSIyLjUiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1w'@;
put 'YXRoLTEtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIyNi41IiBjeT0iMjkuNSIgcj0iMi41IiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIyLjIzLDE1LjRBMy42'@;
put 'OCwzLjY4LDAsMCwxLDE5LDkuODlMMjEuMjksNkg5LjIxTDguNzYsNC41N2ExLDEsMCwwLDAtLjY2LS42NUw0LDIuNjZhMSwxLDAsMSwwLS41OSwxLjkyTDcsNS42OGw0LjU4LDE0LjQ3TDkuOTUsMjEuNDlsLS4xMy4xM0EyLjY2LDIuNjYsMCwwLDAsOS43NCwyNSwyLjc1LDIuNzUsMCwwLDAs'@;
put 'MTIsMjZIMjguNjlhMSwxLDAsMCwwLDAtMkgxMS44NGEuNjcuNjcsMCwwLDEtLjU2LTFsMi40MS0ySDI5LjEyYTEsMSwwLDAsMCwxLS43NmwxLjE5LTQuODRaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0zLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAg'@;
put 'PHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xp'@;
put 'ZC1wYXRoLTQtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIxMy41IiBjeT0iMjkuNSIgcj0iMi41IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9'@;
put 'IjI2LjUiIGN5PSIyOS41IiByPSIyLjUiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLDEzLjVBNy41LDcuNSwwLDAsMSwyMi41LDZIOS4yMUw4Ljc2LDQuNTdhMSwxLDAsMCwwLS42Ni0u'@;
put 'NjVMNCwyLjY2YTEsMSwwLDEsMC0uNTksMS45Mkw3LDUuNjhsNC41OCwxNC40N0w5Ljk1LDIxLjQ5bC0uMTMuMTNBMi42NiwyLjY2LDAsMCwwLDkuNzQsMjUsMi43NSwyLjc1LDAsMCwwLDEyLDI2SDI4LjY5YTEsMSwwLDAsMCwwLTJIMTEuODRhLjY3LjY3LDAsMCwxLS41Ni0xbDIuNDEtMkgy'@;
put 'OS4xMmExLDEsMCwwLDAsMS0uNzZsMS43MS03QTcuNDksNy40OSwwLDAsMSwzMCwxMy41WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiICBjbGFzcz0iY2xy'@;
put 'LWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTQtLWJhZGdlZCBjbHItaS1iYWRnZSIgLz4nKSx5LkNsclNoYXBlV2FsbGV0PSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzIsMTVIMzFWOWExLDEs'@;
put 'MCwwLDAtMS0xSDZhMSwxLDAsMCwxLTEtLjgyVjYuODJBMSwxLDAsMCwxLDYsNkgyOS41OGExLDEsMCwwLDAsMC0ySDZBMywzLDAsMCwwLDMsN2EzLjA4LDMuMDgsMCwwLDAsMCwuMzZWMjcuOTNBNC4xLDQuMSwwLDAsMCw3LjEzLDMySDMwYTEsMSwwLDAsMCwxLTFWMjVoMWExLDEsMCwwLDAs'@;
put 'MS0xVjE2QTEsMSwwLDAsMCwzMiwxNVpNMjksMzBINy4xM0EyLjExLDIuMTEsMCwwLDEsNSwyNy45M1Y5Ljg4QTMuMTEsMy4xMSwwLDAsMCw2LDEwSDI5djVIMjJhNSw1LDAsMCwwLDAsMTBoN1ptMi03SDIyYTMsMywwLDAsMSwwLTZIMzFaIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGNsYXNz'@;
put 'PSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBjeD0iMjMuMDEiIGN5PSIyMCIgcj0iMS41Ii8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzIuOTQsMTRIMzFWOWExLDEsMCwwLDAtMS0xSDZBMSwxLDAs'@;
put 'MCwxLDUsN0g1VjdBMSwxLDAsMCwxLDYsNkgyOS42YTEsMSwwLDEsMCwwLTJINkEyLjk0LDIuOTQsMCwwLDAsMyw2Ljg4djIxQTQuMTMsNC4xMywwLDAsMCw3LjE1LDMySDMwYTEsMSwwLDAsMCwxLTFWMjZoMS45NGEuOTMuOTMsMCwwLDAsMS0uOTF2LTEwQTEuMDgsMS4wOCwwLDAsMCwzMi45'@;
put 'NCwxNFpNMzIsMjRsLTguNTgsMGEzLjg3LDMuODcsMCwwLDEtMy43My00LDMuODcsMy44NywwLDAsMSwzLjczLTRMMzIsMTZaIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIGN4PSIyNC4wNCIgY3k9IjE5LjkyIiByPSIxLjUi'@;
put 'Lz4nKSx5LkNsclNoYXBlU3RvcmU9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0yOCwzMEgxNlYyMkgxNHY4SDhWMjJINnY4YTIsMiwwLDAsMCwyLDJIMjhhMiwyLDAsMCwwLDItMlYyMkgyOFoiLz5cbiAgICAg'@;
put 'ICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMzMuNzksMTMuMjcsMjkuNzEsNS4xMUEyLDIsMCwwLDAsMjcuOTIsNEg4LjA4QTIsMiwwLDAsMCw2LjI5LDUuMTFMMi4yMSwxMy4yN2EyLDIsMCwwLDAtLjIxLjl2My4wOGEyLDIsMCww'@;
put 'LDAsLjQ2LDEuMjhBNC42Nyw0LjY3LDAsMCwwLDYsMjAuMTNhNC43Miw0LjcyLDAsMCwwLDMtMS4wNyw0LjczLDQuNzMsMCwwLDAsNiwwLDQuNzMsNC43MywwLDAsMCw2LDAsNC43Myw0LjczLDAsMCwwLDYsMCw0LjcyLDQuNzIsMCwwLDAsNi41My0uNTJBMiwyLDAsMCwwLDM0LDE3LjI2VjE0'@;
put 'LjE3QTIsMiwwLDAsMCwzMy43OSwxMy4yN1pNMzAsMTguMTNBMi42OCwyLjY4LDAsMCwxLDI3LjgyLDE3TDI3LDE1Ljg4LDI2LjE5LDE3YTIuNzEsMi43MSwwLDAsMS00LjM3LDBMMjEsMTUuODgsMjAuMTksMTdhMi43MSwyLjcxLDAsMCwxLTQuMzcsMEwxNSwxNS44OCwxNC4xOSwxN2EyLjcx'@;
put 'LDIuNzEsMCwwLDEtNC4zNywwTDksMTUuODgsOC4xOCwxN0EyLjY4LDIuNjgsMCwwLDEsNiwxOC4xM2EyLjY0LDIuNjQsMCwwLDEtMi0uODhWMTQuMTdMOC4wOCw2SDI3LjkyTDMyLDE0LjE2di42N2wwLDIuMzlBMi42NywyLjY3LDAsMCwxLDMwLDE4LjEzWiIvPlxuICAgICAgICAgICAgPHBh'@;
put 'dGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTI4LDMwSDE2VjIySDE0djhIOFYyMkg2djhhMiwyLDAsMCwwLDIsMkgyOGEyLDIsMCwwLDAsMi0yVjIySDI4WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBh'@;
put 'dGgtMiIgZD0iTTMzLjc5LDEzLjI3LDI5LjcxLDUuMTFBMiwyLDAsMCwwLDI3LjkyLDRIOC4wOEEyLDIsMCwwLDAsNi4yOSw1LjExTDIuMjEsMTMuMjdhMiwyLDAsMCwwLS4yMS45djMuMDhhMiwyLDAsMCwwLC40NiwxLjI4QTQuNjcsNC42NywwLDAsMCw2LDIwLjEzYTQuNzIsNC43MiwwLDAs'@;
put 'MCwzLTEuMDcsNC43Myw0LjczLDAsMCwwLDYsMCw0LjczLDQuNzMsMCwwLDAsNiwwLDQuNzMsNC43MywwLDAsMCw2LDAsNC43Miw0LjcyLDAsMCwwLDYuNTMtLjUyQTIsMiwwLDAsMCwzNCwxNy4yNlYxNC4xN0EyLDIsMCwwLDAsMzMuNzksMTMuMjdaTTE1LDE0LjR2MS41MkwxNC4xOCwxN2Ey'@;
put 'LjcxLDIuNzEsMCwwLDEtNC4zNywwTDksMTUuODhWMTQuNEwxMS41OSw2SDE2Wm0xMiwxLjQ4TDI2LjE5LDE3YTIuNzEsMi43MSwwLDAsMS00LjM3LDBMMjEsMTUuODhsMCwwVjE0LjRMMjAsNmg0LjQ1TDI3LDE0LjRaIi8+JykseS5DbHJTaGFwZUV1cm89KDAsZy5jbHJJY29uU1ZHKSgnPHBh'@;
put 'dGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMS40OCwyOC40OWExLDEsMCwwLDAtMS4zOC0uMzJBMTIsMTIsMCwwLDEsMTIuNDUsMjJIMjQuMTZhMSwxLDAsMCwwLDAtMkgxMS45M2ExMS4xNiwxMS4xNiwwLDAsMSwwLTRIMjQuMTZhMSwxLDAsMCww'@;
put 'LDAtMkgxMi40NUExMiwxMiwwLDAsMSwzMC4wNiw3LjhhMSwxLDAsMCwwLDEuMDYtMS43QTE0LDE0LDAsMCwwLDEwLjM0LDE0SDMuNTRhMSwxLDAsMSwwLDAsMkg5LjkxYTE0LDE0LDAsMCwwLS4xNiwyLDE0LDE0LDAsMCwwLC4xNiwySDMuNTRhMSwxLDAsMSwwLDAsMmg2LjhhMTQsMTQsMCww'@;
put 'LDAsMjAuODMsNy44N0ExLDEsMCwwLDAsMzEuNDgsMjguNDlaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm03LjQyLDI1LjE2QTEwLjg4LDEwLjg4'@;
put 'LDAsMCwxLDkuMjMsMjFINS44NGExLDEsMCwwLDEsMC0yaDNjMC0uMzUtLjA1LS43MS0uMDUtMS4wN3MwLS42MywwLS45M2gtM2ExLDEsMCwwLDEsMC0ySDkuMTlBMTAuODYsMTAuODYsMCwwLDEsMjUuMzgsOC42OWExLjI1LDEuMjUsMCwwLDEtMS4zMiwyLjEyQTguMzYsOC4zNiwwLDAsMCwx'@;
put 'MS44MiwxNWg5LjM2YTEsMSwwLDAsMSwwLDJIMTEuMzNhNy43Miw3LjcyLDAsMCwwLDAsMmg5LjgyYTEsMSwwLDAsMSwwLDJIMTEuODdhOC4zNiw4LjM2LDAsMCwwLDEyLjIyLDQsMS4yNSwxLjI1LDAsMSwxLDEuMzMsMi4xMloiLz4nKSx5LkNsclNoYXBlRG9sbGFyPSgwLGcuY2xySWNvblNW'@;
put 'RykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMjYsMjEuMTVhNi45MSw2LjkxLDAsMCwwLTQuMzgtMy4zMkEyNiwyNiwwLDAsMCwxOSwxNy4xOVY4LjEyQTEwLjA1LDEwLjA1LDAsMCwxLDIzLjg2LDEwYTEsMSwwLDAsMCwxLjMzLTEuNUEx'@;
put 'MS43NSwxMS43NSwwLDAsMCwxOSw2LjFWM2ExLDEsMCwwLDAtMiwwVjZjLTQuNC4xLTYuODMsMi4yOS03LjU3LDQuMThBNS41Niw1LjU2LDAsMCwwLDExLjY2LDE3LDEzLjIsMTMuMiwwLDAsMCwxNywxOC44NFYyOGExMi4zLDEyLjMsMCwwLDEtNy4xNC0yLjc0QTEsMSwwLDEsMCw4LjQ5LDI2'@;
put 'LjcsMTQuMDksMTQuMDksMCwwLDAsMTcsMzB2M2ExLDEsMCwwLDAsMiwwVjMwYzIuODItLjE5LDYuMDctMS4wOSw3LjMtNC43NkE1LjMzLDUuMzMsMCwwLDAsMjYsMjEuMTVaTTEyLjc5LDE1LjMyYTMuNTcsMy41NywwLDAsMS0xLjQ5LTQuMzlDMTEuNDEsMTAuNjMsMTIuNTMsOC4xMiwxNyw4'@;
put 'djguOEExMC43LDEwLjcsMCwwLDEsMTIuNzksMTUuMzJaTTI0LjQsMjQuNTZjLS43MiwyLjE0LTIuMzIsMy4xNy01LjQsMy40VjE5LjIzYy42NC4xNCwxLjMuMywyLC41MWE1LDUsMCwwLDEsMy4xOSwyLjMyQTMuMzQsMy4zNCwwLDAsMSwyNC40LDI0LjU2WiIvPlxuICAgICAgICAgICAgPHBh'@;
put 'dGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSJcbiAgICAgICAgICAgICAgICBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm03LjY1LDIxLjU5Yy0xLDMtMy42MSwzLjg0LTUuOSw0djJhMS4yNSwxLjI1LDAsMCwxLTIuNSwwVjI3LjU5'@;
put 'QTExLjQ3LDExLjQ3LDAsMCwxLDExLDI1YTEuMjUsMS4yNSwwLDEsMSwxLjcxLTEuODMsOS4xMSw5LjExLDAsMCwwLDQuNTUsMS45NFYxOC44M2E5LjYzLDkuNjMsMCwwLDEtMy43My0xLjQxLDQuOCw0LjgsMCwwLDEtMS45MS01Ljg0Yy41OS0xLjUxLDIuNDItMy4yMyw1LjY0LTMuNTFWNi4y'@;
put 'NWExLjI1LDEuMjUsMCwwLDEsMi41LDBWOC4xMWE5LjY3LDkuNjcsMCwwLDEsNC45LDJBMS4yNSwxLjI1LDAsMCwxLDIzLDExLjk1YTcuMTQsNy4xNCwwLDAsMC0zLjI0LTEuMzF2Ni4xM2MuNi4xMywxLjI0LjI3LDEuOTEuNDhhNS44NSw1Ljg1LDAsMCwxLDMuNjksMi44MkE0LjY0LDQuNjQs'@;
put 'MCwwLDEsMjUuNjUsMjMuNTlaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNMjAuOTIsMTkuNjRjLS40LS4xMi0uNzktLjIyLTEuMTctLjN2NS43NmMyLS4yLDMuMDctLjksMy41My0yLjNhMi4xNSwyLjE1LDAsMCwwLS4x'@;
put 'NS0xLjU4QTMuNDksMy40OSwwLDAsMCwyMC45MiwxOS42NFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIGQ9Ik0xMy45NCwxMi40OGEyLjMxLDIuMzEsMCwwLDAsMSwyLjg3LDYuNTMsNi41MywwLDAsMCwyLjMyLjkyVjEwLjU1'@;
put 'QzE1LjE2LDEwLjgsMTQuMTksMTEuODQsMTMuOTQsMTIuNDhaIi8+JykseS5DbHJTaGFwZUNyZWRpdENhcmQ9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMyLDZINEEyLDIsMCwwLDAsMiw4VjI4YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlY4QTIsMiwwLDAsMCwzMiw2Wm0w'@;
put 'LDIsMCwxMkg0TDQsOFpNNCwyOFYyNEgzMnY0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSI3IiB5PSIzIiB3aWR0aD0iMjIiIGhlaWdodD0iMzAiIHJ4PSIwLjk2IiByeT0iMC45NiIgdHJhbnNmb3JtPSJ0cmFu'@;
put 'c2xhdGUoMzYpIHJvdGF0ZSg5MCkiIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzAwMCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLXdpZHRoPSIyIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLDZINEEyLDIs'@;
put 'MCwwLDAsMiw4VjI4YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlY4QTIsMiwwLDAsMCwzMiw2Wm0wLDE4SDRWMjBIMzJaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPicpLHkuQ2xyU2hhcGVCYW5rPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0z'@;
put 'LjUsMTMuNTYsMTgsNS4yM2wxNC41LDguMzNhMSwxLDAsMCwwLDEtMS43M0wxOCwyLjkyLDIuNSwxMS44M2ExLDEsMCwxLDAsMSwxLjczWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik00LDI2YTEsMSwwLDAsMCwx'@;
put 'LDFIMzFhMSwxLDAsMCwwLDAtMkgyOFYxNy42M0gyNlYyNUgxOVYxNy42M0gxN1YyNUgxMFYxNy42M0g4VjI1SDVBMSwxLDAsMCwwLDQsMjZaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iNS4wMiIgeT0iMTQiIHdp'@;
put 'ZHRoPSIyNiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLDI5SDNhMSwxLDAsMCwwLDAsMkgzM2ExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1w'@;
put 'YXRoLTQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMi4xNSwxMS41OGgzLjIxTDE4LjY1LDcuNzJhLjguOCwwLDAsMC0uOCwwbC02LjcyLDMuODZoMy4yMWwzLjktMi4yNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01Ii8+XG4gICAgICAgICAgICA8cGF0'@;
put 'aCBkPSJNNCwyNmExLDEsMCwwLDAsMSwxSDMxYTEsMSwwLDAsMCwwLTJIMjhWMTcuNjNIMjZWMjVIMTlWMTcuNjNIMTdWMjVIMTBWMTcuNjNIOFYyNUg1QTEsMSwwLDAsMCw0LDI2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIi8+'@;
put 'XG4gICAgICAgICAgICA8cmVjdCB4PSI1LjAyIiB5PSIxNCIgd2lkdGg9IjI2IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLDI5SDNhMSwxLDAsMCwwLDAsMkgz'@;
put 'M2ExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIuMTUsMTEuNThoMy4yMUwxOC42NSw3LjcyYS44LjgsMCwwLDAtLjgsMGwtNi43MiwzLjg2aDMuMjFsMy45'@;
put 'LTIuMjRaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMi41LDZjMC0uMTYsMC0uMzIsMC0uNDhMMTgsMi45MiwyLjUsMTEuODNhMSwxLDAsMSwwLDEsMS43M0wxOCw1LjIzLDIyLjc3'@;
put 'LDhBNy40OSw3LjQ5LDAsMCwxLDIyLjUsNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMxLjk0LDEzLjI0bC41Ni4zMmExLDEsMCwwLDAsMS40NC0xLjE5QTcuNDUsNy40NSwwLDAs'@;
put 'MSwzMS45NCwxMy4yNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0'@;
put 'aC02LS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik00LDI2YTEsMSwwLDAsMCwxLDFIMzFhMSwxLDAsMCwwLDAtMkgyOFYxNy42M0gyNlYyNUgxOVYxNy42M0gxN1YyNUgxMFYxNy42M0g4VjI1SDVBMSwxLDAsMCwwLDQsMjZaIiBjbGFzcz0iY2xyLWktb3V0'@;
put 'bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLDI5SDNhMSwxLDAsMCwwLDAsMkgzM2ExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFs'@;
put 'ZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMi41LDE1QTMuNTEsMy41MSwwLDAsMSwyMCwxNEg1djJIMzFWMTVaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE5LjQ2'@;
put 'LDkuNzRsLjY4LTEuMTctMS40OS0uODVhLjguOCwwLDAsMC0uOCwwbC02LjcyLDMuODZoMy4yMWwzLjktMi4yNCwxLjEuNjNDMTkuMzksOS44OSwxOS40Miw5LjgxLDE5LjQ2LDkuNzRaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYWxlcnRl'@;
put 'ZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIyLjA1LDUuMjUsMTgsMi45MiwyLjUsMTEuODNhMSwxLDAsMSwwLDEsMS43M0wxOCw1LjIzLDIxLjA1LDdaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYWxlcnRlZCIvPlxuICAgICAgICAg'@;
put 'ICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWkt'@;
put 'b3V0bGluZS1wYXRoLTYtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zLjUsMTMuNTYsNSwxMi42OFYxNkgzMVYxMi43MWwxLjQ4Ljg1YTEsMSwwLDAsMCwxLTEuNzNMMTgsMi45MiwyLjUsMTEuODNhMSwxLDAsMSwwLDEsMS43M1pNMTcuODUsNy4xMWEu'@;
put 'OC44LDAsMCwxLC44LDBMMjUuMzcsMTFIMjIuMTVsLTMuOS0yLjI0TDE0LjM1LDExSDExLjE0WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLjg1LDI3SDMydi0uODVBMS4xNSwxLjE1LDAsMCwwLDMwLjg1LDI1SDI4'@;
put 'VjE3LjYzSDI0VjI1SDIwVjE3LjYzSDE2VjI1SDEyVjE3LjYzSDhWMjVINS4xNUExLjE1LDEuMTUsMCwwLDAsNCwyNi4xNVYyN0gzLjE1QTEuMTUsMS4xNSwwLDAsMCwyLDI4LjE1VjMxSDM0VjI4LjE1QTEuMTUsMS4xNSwwLDAsMCwzMi44NSwyN1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHIt'@;
put 'aS1zb2xpZC1wYXRoLTIiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMi44NSwyN0gzMnYtLjg1QTEuMTUsMS4xNSwwLDAsMCwzMC44NSwyNUgyOFYxNy42M0gyNFYyNUgyMFYxNy42M0gxNlYyNUgxMlYxNy42M0g4VjI1SDUuMTVBMS4xNSwxLjE1LDAsMCwwLDQsMjYuMTVWMjdIMy4xNUEx'@;
put 'LjE1LDEuMTUsMCwwLDAsMiwyOC4xNVYzMUgzNFYyOC4xNUExLjE1LDEuMTUsMCwwLDAsMzIuODUsMjdaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLDEzLjVBNy40Nyw3LjQ3LDAsMCwx'@;
put 'LDI0LjM5LDExSDIyLjE1bC0zLjktMi4yNEwxNC4zNSwxMUgxMS4xNGw2LjcyLTMuODZhLjguOCwwLDAsMSwuOCwwbDUsMi44N0E3LjQ1LDcuNDUsMCwwLDEsMjIuNSw2YzAtLjE2LDAtLjMyLDAtLjQ4TDE4LDIuOTIsMi41LDExLjgzYTEsMSwwLDEsMCwxLDEuNzNMNSwxMi42OFYxNkgzMVYx'@;
put 'My40MkE3LjUzLDcuNTMsMCwwLDEsMzAsMTMuNVoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzEuOTQsMTMuMjRsLjU2LjMyYTEsMSwwLDAsMCwxLjQ0LTEuMTlBNy40NSw3LjQ1LDAsMCwx'@;
put 'LDMxLjk0LDEzLjI0WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtNC0tYmFk'@;
put 'Z2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIuODUsMjdIMzJ2LS44NUExLjE1LDEuMTUsMCwwLDAsMzAuODUsMjVIMjhWMTcuNjNIMjRWMjVIMjBWMTcuNjNIMTZWMjVIMTJWMTcuNjNIOFYyNUg1LjE1QTEuMTUsMS4xNSwwLDAsMCw0LDI2LjE1VjI3SDMuMTVB'@;
put 'MS4xNSwxLjE1LDAsMCwwLDIsMjguMTVWMzFIMzRWMjguMTVBMS4xNSwxLjE1LDAsMCwwLDMyLjg1LDI3WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIyLjUsMTVhMy41MSwzLjUxLDAs'@;
put 'MCwxLTMtNS4yNmwuMTQtLjI0LTEuMzUtLjc4TDE0LjM1LDExSDExLjE0bDYuNzItMy44NmEuOC44LDAsMCwxLC44LDBsMS43NSwxLDEuNjUtMi44NkwxOCwyLjkyLDIuNSwxMS44M2ExLDEsMCwxLDAsMSwxLjczTDUsMTIuNjhWMTZIMzFWMTVaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0'@;
put 'ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1'@;
put 'LDEuMTRaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0zLS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+JykseS5DbHJTaGFwZURvbGxhckJpbGw9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRo'@;
put 'LTEiIGQ9Ik0zMiw4SDRhMiwyLDAsMCwwLTIsMlYyNmEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMTBBMiwyLDAsMCwwLDMyLDhabTAsNmE0LjI1LDQuMjUsMCwwLDEtMy45LTRIMzJabTAsMS42MnY0LjgzQTUuODcsNS44NywwLDAsMCwyNi40OSwyNmgtMTdBNS44Nyw1Ljg3LDAs'@;
put 'MCwwLDQsMjAuNDRWMTUuNkE1Ljg3LDUuODcsMCwwLDAsOS41MSwxMGgxN0E1Ljg3LDUuODcsMCwwLDAsMzIsMTUuNlpNNy45LDEwQTQuMjUsNC4yNSwwLDAsMSw0LDE0VjEwWk00LDIyLjA2QTQuMjUsNC4yNSwwLDAsMSw3LjksMjZINFpNMjguMSwyNkE0LjI1LDQuMjUsMCwwLDEsMzIsMjIu'@;
put 'MDZWMjZaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTE4LDEwLjg1Yy0zLjQ3LDAtNi4zLDMuMjEtNi4zLDcuMTVzMi44Myw3LjE1LDYuMyw3LjE1LDYuMy0zLjIxLDYuMy03LjE1UzIxLjQ3LDEwLjg1LDE4LDEw'@;
put 'Ljg1Wm0wLDEyLjY5Yy0yLjU5LDAtNC43LTIuNDktNC43LTUuNTVzMi4xMS01LjU1LDQuNy01LjU1LDQuNywyLjQ5LDQuNyw1LjU1UzIwLjU5LDIzLjU1LDE4LDIzLjU1WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTMy'@;
put 'LDhINGEyLDIsMCwwLDAtMiwyVjI2YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYxMEEyLDIsMCwwLDAsMzIsOFpNNCwyNlYyMS4xNUE1LjE4LDUuMTgsMCwwLDEsOC43OSwyNlpNNCwxNC44NVYxMEg4Ljc5QTUuMTgsNS4xOCwwLDAsMSw0LDE0Ljg1Wk0xOCwyNS4xNWMtMy40Nyww'@;
put 'LTYuMy0zLjIxLTYuMy03LjE1czIuODMtNy4xNSw2LjMtNy4xNSw2LjMsMy4yMSw2LjMsNy4xNVMyMS40NywyNS4xNSwxOCwyNS4xNVpNMzIsMjZIMjcuMjVBNS4xOCw1LjE4LDAsMCwxLDMyLDIxLjE1Wm0wLTExLjE1QTUuMTgsNS4xOCwwLDAsMSwyNy4yNSwxMEgzMloiLz5cbiAgICAgICAg'@;
put 'ICAgIDxlbGxpcHNlIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIGN4PSIxOCIgY3k9IjE4IiByeD0iNCIgcnk9IjQuNzIiLz4nKSx5LkNsclNoYXBlRUNoZWNrPSgwLGcuY2xySWNvblNWRykoJzxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUt'@;
put 'cGF0aC0xIiB4PSIxNiIgeT0iMTYiIHdpZHRoPSIxNSIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgeD0iMjAiIHk9IjIxIiB3aWR0aD0iMTEiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHBhdGgg'@;
put 'Y2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIGQ9Ik0zNCw4SDEyLjkzYTguMzUsOC4zNSwwLDAsMSwuNzksMkgzM1YyNkgzVjE5LjlhNy44Myw3LjgzLDAsMCwxLTItMS4zNFYyN2ExLDEsMCwwLDAsMSwxSDM0YTEsMSwwLDAsMCwxLTFWOUExLDEsMCwwLDAsMzQs'@;
put 'OFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiBkPSJNNi41NywxOC42OGE2LjE3LDYuMTcsMCwwLDAsNC4zMi0xLjU5LDEuMiwxLjIsMCwwLDAsLjM2LS44NCwxLjA4LDEuMDgsMCwwLDAtMS4wOS0xLjExLDEsMSwwLDAs'@;
put 'MC0uNzEuMjUsNC4zMiw0LjMyLDAsMCwxLTIuODQsMSwzLjM1LDMuMzUsMCwwLDEtMy40Ni0zaDcuNTNBMS4yOSwxLjI5LDAsMCwwLDEyLDEyLjA2LDUuNjgsNS42OCwwLDAsMCw2LjI3LDYuMTQsNiw2LDAsMCwwLC40LDEyLjR2MEE2LDYsMCwwLDAsNi41NywxOC42OFpNNi4yNSw4LjM5YzEu'@;
put 'ODIsMCwyLjg3LDEuMzksMywzLjE2SDMuMTNDMy4zOCw5LjY5LDQuNTYsOC4zOSw2LjI1LDguMzlaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzQsOEgxMi45MWE4LjYxLDguNjEsMCwwLDEsMS4yLDQuMzksOCw4LDAs'@;
put 'MCwxLTcuNzgsOC4yN0E3LjUxLDcuNTEsMCwwLDEsMSwxOC40MVYyN2ExLDEsMCwwLDAsMSwxSDM0YTEsMSwwLDAsMCwxLTFWOUExLDEsMCwwLDAsMzQsOFpNMzEsMjNIMjBWMjFIMzFabTAtNUgxNlYxNkgzMVoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHIt'@;
put 'aS1zb2xpZC1wYXRoLTIiIGQ9Ik02LjU3LDE4LjY4QTYsNiwwLDAsMSwuNCwxMi40NHYwQTYsNiwwLDAsMSw2LjI3LDYuMTQsNS42OCw1LjY4LDAsMCwxLDEyLDEyLjA2YTEuMjksMS4yOSwwLDAsMS0xLjMsMS4zMkgzLjE1YTMuMzUsMy4zNSwwLDAsMCwzLjQ2LDMsNC4zMiw0LjMyLDAsMCww'@;
put 'LDIuODQtMSwxLDEsMCwwLDEsLjcxLS4yNSwxLjA4LDEuMDgsMCwwLDEsMS4wOSwxLjExLDEuMiwxLjIsMCwwLDEtLjM2Ljg0QTYuMTcsNi4xNywwLDAsMSw2LjU3LDE4LjY4Wk05LjMsMTEuNTVjLS4xOC0xLjc3LTEuMjMtMy4xNi0zLTMuMTZzLTIuODcsMS4zLTMuMTIsMy4xNloiLz4nKSx5'@;
put 'LkNsclNoYXBlUG91bmQ9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0yNy45LDMwSDEzLjRBOC40NSw4LjQ1LDAsMCwwLDE1LDI0LjY1VjIxaDQuMzFhMSwxLDAsMCwwLDAtMkgxNVYxMS4zMUE1LjI0LDUuMjQs'@;
put 'MCwwLDEsMjAuMjEsNiw1LjE5LDUuMTksMCwwLDEsMjQsNy43M2ExLDEsMCwwLDAsMS40OC0xLjM1QTcuMTksNy4xOSwwLDAsMCwxMywxMS4zMVYxOUg4LjcyYTEsMSwwLDEsMCwwLDJIMTN2My42NUMxMywyOS4zOCwxMC4xMiwzMCwxMCwzMGExLDEsMCwwLDAsLjE3LDJIMjcuOWExLDEsMCwx'@;
put 'LDAsMC0yWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTE4LDJBMTYsMTYsMCwxLDAsMzQsMTgsMTYsMTYsMCwwLDAsMTgsMlptNi41LDI1LjkySDExLjc0YTEuMjUsMS4yNSwwLDAsMS0uMjItMi40OGMuMTUsMCwxLjcy'@;
put 'LS40OSwxLjcyLTMuNTRWMTloLTIuNWExLDEsMCwwLDEsMC0yaDIuNVYxMS44OGE1Ljg1LDUuODUsMCwwLDEsNS43Mi02LDUuNjMsNS42MywwLDAsMSw0LjIxLDEuOTRBMS4yNSwxLjI1LDAsMSwxLDIxLjMsOS41MSwzLjA4LDMuMDgsMCwwLDAsMTksOC40MmEzLjM1LDMuMzUsMCwwLDAtMy4y'@;
put 'MiwzLjQ2VjE3aDNhMSwxLDAsMCwxLDAsMmgtM3YyLjlBNy42NSw3LjY1LDAsMCwxLDE1LDI1LjQySDI0LjVhMS4yNSwxLjI1LDAsMCwxLDAsMi41WiIvPicpLHkuQ2xyU2hhcGVSdXBlZT0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5l'@;
put 'LXBhdGgtMSIgZD0iTTI4LDhIMjQuMTRBNy41Miw3LjUyLDAsMCwwLDIyLjYsNkgyOGExLDEsMCwwLDAsMC0ySDEwYTEsMSwwLDAsMCwwLDJoNy41NWE1LjQyLDUuNDIsMCwwLDEsNC4yLDJIMTBhMSwxLDAsMCwwLDAsMkgyMi43OUE1LjU0LDUuNTQsMCwwLDEsMjMsMTEuNTEsNS40OCw1LjQ4'@;
put 'LDAsMCwxLDE3LjU1LDE3SDExLjE0YTEsMSwwLDAsMC0uNzUsMS42NkwyMi4wNiwzMmExLDEsMCwxLDAsMS41LTEuMzJMMTMuMzUsMTloNC4yMWE3LjUxLDcuNTEsMCwwLDAsNy4zLTlIMjhhMSwxLDAsMCwwLDAtMloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBj'@;
put 'bHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJabTUuODgsOUgyNmExLDEsMCwwLDEsMCwySDI0LjI2YzAsLjA2LDAsLjEyLDAsLjE5YTYuMDksNi4wOSwwLDAsMS02LDYuMmgtMmw2LjgyLDguMDZhMS4yNSwxLjI1LDAsMCwxLTEu'@;
put 'OTEsMS42MkwxMi42MywxOC45NGExLjI1LDEuMjUsMCwwLDEsMS0yLjA2aDQuNzFhMy41OSwzLjU5LDAsMCwwLDMuNDgtMy42OWMwLS4wNywwLS4xMywwLS4yaC05YTEsMSwwLDAsMSwwLTJoOC4zMmEzLjQxLDMuNDEsMCwwLDAtMi43OC0xLjVIMTIuNzVhMS4yNSwxLjI1LDAsMCwxLDAtMi41'@;
put 'SDI2YTEsMSwwLDAsMSwwLDJIMjIuNjhBNi4yMyw2LjIzLDAsMCwxLDIzLjg4LDExWiIvPicpLHkuQ2xyU2hhcGVXb249KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMywxOEgyOC43NWwuNS0ySDMzYTEsMSww'@;
put 'LDAsMCwwLTJIMjkuNzRsMi4xNy04Ljc2QTEsMSwwLDAsMCwzMCw0Ljc2TDI3LjY4LDE0SDIxLjMxTDE5LDQuNzZhMSwxLDAsMCwwLTEuOTQsMEwxNC43OSwxNEg4LjQyTDYuMTMsNC43NmExLDEsMCwwLDAtMS45NC40OEw2LjM2LDE0SDNhMSwxLDAsMCwwLDAsMkg2Ljg1bC41LDJIM2ExLDEs'@;
put 'MCwwLDAsMCwySDcuODRsMi43OSwxMS4yNGExLDEsMCwwLDAsMS45NCwwTDE1LjM2LDIwaDUuMzhsMi43OSwxMS4yNGExLDEsMCwwLDAsMS45NCwwTDI4LjI1LDIwSDMzYTEsMSwwLDAsMCwwLTJabS01LjgyLTItLjUsMkgyMi4zbC0uNS0yWk0xOCw5LjE2LDE5LjI1LDE0aC0yLjRaTTguOTEs'@;
put 'MTZoNS4zOGwtLjUsMkg5LjQxWk0xMS42LDI2Ljg0LDkuOTEsMjBIMTMuM1pNMTUuODUsMThsLjUtMmgzLjM5bC41LDJabTguNjQsOC44NEwyMi44LDIwaDMuMzlaIi8+XG4gICAgICAgICAgICA8cG9seWdvbiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBwb2ludHM9'@;
put 'IjE3Ljc0IDE2IDE3LjIyIDE4IDE4Ljg1IDE4IDE4LjMyIDE2IDE3Ljc0IDE2Ii8+XG4gICAgICAgICAgICA8cG9seWdvbiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBwb2ludHM9IjExLjk0IDE4IDE0LjYzIDE4IDE1LjE2IDE2IDExLjQxIDE2IDExLjk0IDE4Ii8+'@;
put 'XG4gICAgICAgICAgICA8cG9seWdvbiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiBwb2ludHM9IjEzLjI5IDIzLjEgMTQuMSAyMCAxMi40NyAyMCAxMy4yOSAyMy4xIi8+XG4gICAgICAgICAgICA8cG9seWdvbiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQt'@;
put 'cGF0aC00IiBwb2ludHM9IjIxLjQ0IDE4IDI0LjEzIDE4IDI0LjY2IDE2IDIwLjkxIDE2IDIxLjQ0IDE4Ii8+XG4gICAgICAgICAgICA8cG9seWdvbiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC01IiBwb2ludHM9IjIyLjc4IDIzLjEgMjMuNiAyMCAyMS45NyAyMCAyMi43'@;
put 'OCAyMy4xIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC02IiBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWk0yOSwyMEgyNi4xOUwyNCwyOC4zMmExLjI1LDEuMjUsMCwwLDEtMi40MiwwTDE5LjM4LDIw'@;
put 'SDE2LjY5bC0yLjE5LDguMzJhMS4yNSwxLjI1LDAsMCwxLTIuNDIsMEw5Ljg4LDIwSDdhMSwxLDAsMCwxLDAtMkg5LjM1bC0uNTMtMkg3YTEsMSwwLDAsMSwwLTJIOC4zbC0xLTMuNjhhMS4yNSwxLjI1LDAsMCwxLDIuNDItLjY0TDEwLjg4LDE0aDQuOGwxLjE0LTQuMzJhMS4yNSwxLjI1LDAs'@;
put 'MCwxLDIuNDIsMEwyMC4zOCwxNGg0LjhsMS4xNC00LjMyYTEuMjUsMS4yNSwwLDAsMSwyLjQyLjY0bC0xLDMuNjhIMjlhMSwxLDAsMCwxLDAsMkgyNy4yNGwtLjUzLDJIMjlhMSwxLDAsMCwxLDAsMloiLz4nKSx5LkNsclNoYXBlWWVuPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJj'@;
put 'bHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMjkuMzQsNC41NWExLDEsMCwxLDAtMS42Ny0xLjFMMTgsMTguMjMsOC4zMywzLjQ1YTEsMSwwLDAsMC0xLjY3LDEuMUwxNywyMC4zNVYyMi4ySDEyYS44LjgsMCwwLDAsMCwxLjZoNXYyLjRIMTJhLjguOCwwLDAsMCwwLDEu'@;
put 'Nmg1VjMyYTEsMSwwLDAsMCwyLDBWMjcuOGg1YS44LjgsMCwwLDAsMC0xLjZIMTlWMjMuOGg1YS44LjgsMCwwLDAsMC0xLjZIMTlWMjAuMzVaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMTgsMkExNiwxNiwwLDEsMCwz'@;
put 'NCwxOCwxNiwxNiwwLDAsMCwxOCwyWm04LjA3LDcuOTFMMTkuNzQsMjBIMjJhMSwxLDAsMCwxLDAsMkgxOS4yNXYySDIyYTEsMSwwLDAsMSwwLDJIMTkuMjV2Mi43NWExLjI1LDEuMjUsMCwwLDEtMi41LDBWMjZIMTRhMSwxLDAsMSwxLDAtMmgyLjc1VjIySDE0YTEsMSwwLDEsMSwwLTJoMi4y'@;
put 'Nkw5LjkzLDkuOTFhMS4yNSwxLjI1LDAsMSwxLDIuMTItMS4zM0wxOCwxOC4wOGw1Ljk1LTkuNDlhMS4yNSwxLjI1LDAsMSwxLDIuMTIsMS4zM1oiLz4nKSx5LkNsclNoYXBlQml0Y29pbj0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjQuMTEsMTYuODhBNS40OSw1LjQ5LDAsMCwwLDIx'@;
put 'LDdWNGExLDEsMCwwLDAtMiwwVjdIMTZWNGExLDEsMCwwLDAtMiwwVjdIMTFhMSwxLDAsMCwwLTEsMVYyOGExLDEsMCwwLDAsMSwxaDN2M2ExLDEsMCwwLDAsMiwwVjI5aDN2M2ExLDEsMCwwLDAsMiwwVjI5aC4wOEE2LjA3LDYuMDcsMCwwLDAsMjcsMjIuODF2LS42MkE2LjI1LDYuMjUsMCww'@;
put 'LDAsMjQuMTEsMTYuODhaTTEyLDloOC42OWEzLjU5LDMuNTksMCwwLDEsMy40MywyLjM2QTMuNTEsMy41MSwwLDAsMSwyMC43OSwxNkgxMlpNMjUsMjIuODFBNC4wOCw0LjA4LDAsMCwxLDIxLjA2LDI3SDEyVjE4aDkuMDZBNC4wOCw0LjA4LDAsMCwxLDI1LDIyLjE5WiIgY2xhc3M9ImNsci1p'@;
put 'LW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjEuMTgsMTguNDdIMTQuNXY2aDYuNjhhMi43LDIuNywwLDAsMCwyLjYzLTIuNzd2LS40OEEyLjcxLDIuNzEsMCwwLDAsMjEuMTgsMTguNDdaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWkt'@;
put 'c29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIzLDEzLjc1YTIuMjQsMi4yNCwwLDAsMC0yLjIzLTIuMjVIMTQuNVYxNmg2LjNBMi4yMiwyLjIyLDAsMCwwLDIzLDEzLjc1WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz5cbiAgICAgICAg'@;
put 'ICAgIDxwYXRoIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJabTguMzEsMTkuNzNBNS4yMiw1LjIyLDAsMCwxLDIxLjE4LDI3SDIxdjEuOWExLDEsMCwwLDEtMiwwVjI3SDE3djEuOWExLDEsMCwwLDEtMiwwVjI3SDEzLjI1QTEuMjUsMS4yNSwwLDAsMSwxMiwy'@;
put 'NS43NVYxNy4yM2gwdi03QTEuMjUsMS4yNSwwLDAsMSwxMy4yNSw5SDE1VjcuMDdhMSwxLDAsMCwxLDIsMFY5aDJWNy4wN2ExLDEsMCwwLDEsMiwwVjlhNC43Miw0LjcyLDAsMCwxLDMuMiw4LDUuMzEsNS4zMSwwLDAsMSwyLjExLDQuMjRaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29s'@;
put 'aWQtcGF0aC0zIiAvPicpLHkuQ2xyU2hhcGVDb2luQmFnPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yMS42LDI5YTEsMSwwLDAsMC0xLTFoLTZhMSwxLDAsMCwwLDAsMmg2QTEsMSwwLDAsMCwyMS42LDI5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEi'@;
put 'IC8+PHBhdGggZD0iTTIyLjU0LDI0aC02YTEsMSwwLDAsMCwwLDJoNmExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTIyLDMySDE2YTEsMSwwLDAsMCwwLDJoNmExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1p'@;
put 'LW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+PHBhdGggZD0iTTMyLjcsMzJoLTdhMSwxLDAsMCwwLDAsMmg3YTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz48cGF0aCBkPSJNMzMuNywyOGgtN2ExLDEsMCwwLDAsMCwy'@;
put 'aDdhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiAvPjxwYXRoIGQ9Ik0zMy43NCwyNmEyOCwyOCwwLDAsMC0yLjgyLTEwLjEyQTIwLjI0LDIwLjI0LDAsMCwwLDI0LjYsOC43MUwyNywzLjQyYTEsMSwwLDAsMC0uMDctMUExLDEsMCww'@;
put 'LDAsMjYuMTMsMkg5LjhhMSwxLDAsMCwwLS45MSwxLjQybDIuNDUsNS4zMWEyMC4zMywyMC4zMywwLDAsMC02LjI4LDcuMTVjLTIuMTUsNC0yLjgyLDguODktMywxMi4yOGEzLjYsMy42LDAsMCwwLDEsMi43MUEzLjc5LDMuNzksMCwwLDAsNS44LDMxLjk0SDEyVjMwSDUuNzJhMS42OCwxLjY4'@;
put 'LDAsMCwxLTEuMjEtLjUyLDEuNjIsMS42MiwwLDAsMS0uNDUtMS4yM2MuMTQtMi42MS42OS03LjU4LDIuNzYtMTEuNDVBMTgsMTgsMCwwLDEsMTMuMDgsMTBoMWEzMC44MSwzMC44MSwwLDAsMC0xLjg3LDIuOTIsMjIuNzgsMjIuNzgsMCwwLDAtMS40NywzLjM0bDEuMzcuOTJhMjQsMjQsMCww'@;
put 'LDEsMS40OS0zLjQ3QTI5LjEsMjkuMSwwLDAsMSwxNi4wNSwxMGgxYTIxLjQ1LDIxLjQ1LDAsMCwxLDEuNDEsNSwyMi41NCwyMi41NCwwLDAsMSwuMzIsMy44NmwxLjU4LTEuMTFhMjQuMTUsMjQuMTUsMCwwLDAtLjMyLTNBMjQuODIsMjQuODIsMCwwLDAsMTguNzYsMTBoLjc4bC45MS0ySDEz'@;
put 'LjIxTDExLjM2LDRIMjQuNTdsLTIuNSw1LjQ3YTkuOTMsOS45MywwLDAsMSwxLjIzLjc4LDE4LjYzLDE4LjYzLDAsMCwxLDUuODYsNi41N0EyNi41OSwyNi41OSwwLDAsMSwzMS43MywyNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02IiAvPlxuICAgIDxwYXRo'@;
put 'IGQ9Ik0yNC44OSwyNmg3Ljg2Yy0uNjYtOC43MS00LjQxLTE0LjEyLTkuMjItMTcuMzJMMjUuNzIsMy45YTEsMSwwLDAsMC0uOTEtMS40SDExLjFhMSwxLDAsMCwwLS45MSwxLjRsMS4yLDIuNkgyMS41MWwtLjksMkgxOC43NkEyNC45LDI0LjksMCwwLDEsMjAsMTMuMTlhMjQuNDksMjQuNDks'@;
put 'MCwwLDEsLjMyLDNsLTEuNTgsMS4xMWEyMi41NCwyMi41NCwwLDAsMC0uMzItMy44NkEyMS43NCwyMS43NCwwLDAsMCwxNyw4LjVoLTFhMjguMjIsMjguMjIsMCwwLDAtMi40OCwzLjcsMjMuOTEsMjMuOTEsMCwwLDAtMS40OSwzLjQ2bC0xLjM3LS45MWEyMi43OCwyMi43OCwwLDAsMSwxLjQ3'@;
put 'LTMuMzRBMzAuODEsMzAuODEsMCwwLDEsMTQuMDUsOC41SDEyLjNsLjA4LjE3QzcuMDgsMTIuMiwzLjA1LDE4LjQsMy4wNSwyOC43NUExLjY1LDEuNjUsMCwwLDAsNC42MSwzMC41aDhBMi42NywyLjY3LDAsMCwxLDE0LjIxLDI2YTIuNjcsMi42NywwLDAsMS0uMzctMS4zNCwyLjcsMi43LDAs'@;
put 'MCwxLDIuNy0yLjdoNmEyLjcsMi43LDAsMCwxLDIuNywyLjdBMi42MywyLjYzLDAsMCwxLDI0Ljg5LDI2WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz48cGF0aCBkPSJNMjEuNiwyOC41YTEsMSwwLDAsMC0xLTFoLTZhMSwxLDAsMCwwLDAsMmg2QTEsMSwwLDAs'@;
put 'MCwyMS42LDI4LjVaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0yMi41NCwyMy41aC02YTEsMSwwLDAsMCwwLDJoNmExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgLz48cGF0aCBkPSJNMjIs'@;
put 'MzEuNUgxNmExLDEsMCwwLDAsMCwyaDZhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTQiIC8+PHBhdGggZD0iTTMyLjcsMzEuNWgtN2ExLDEsMCwwLDAsMCwyaDdhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xp'@;
put 'ZC1wYXRoLTUiIC8+PHBhdGggZD0iTTMzLjcsMjcuNWgtN2ExLDEsMCwwLDAsMCwyaDdhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTYiIC8+JykseS5DbHJTaGFwZVBlc289KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMxLDEzLjJIMjcu'@;
put 'ODlBNi44MSw2LjgxLDAsMCwwLDI4LDEyYTcuODUsNy44NSwwLDAsMC0uMS0xLjE5aDIuOTNhLjguOCwwLDAsMCwwLTEuNkgyNy40NkE4LjQ0LDguNDQsMCwwLDAsMTkuNTcsNEgxMWExLDEsMCwwLDAtMSwxVjkuMkg3YS44LjgsMCwwLDAsMCwxLjZoM3YyLjRIN2EuOC44LDAsMCwwLDAsMS42'@;
put 'aDNWMzFhMSwxLDAsMCwwLDIsMFYyMGg3LjU3YTguNDUsOC40NSwwLDAsMCw3Ljg5LTUuMkgzMWEuOC44LDAsMCwwLDAtMS42Wk0xMiw2aDcuNTdhNi41MSw2LjUxLDAsMCwxLDUuNjgsMy4ySDEyWm0wLDQuOEgyNS44N2E1LjYsNS42LDAsMCwxLDAsMi40SDEyWk0xOS41NywxOEgxMlYxNC44'@;
put 'SDI1LjI1QTYuNTEsNi41MSwwLDAsMSwxOS41NywxOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0xNC4xOCwxMy44VjE2aDkuNDVhNS4yNiw1LjI2LDAsMCwwLC4wOC0uODksNC43Miw0LjcyLDAsMCwwLS4yLTEuMzFaIiBjbGFzcz0i'@;
put 'Y2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0xNC4xOCwxOS43aDUuMTlhNC4yOCw0LjI4LDAsMCwwLDMuNS0xLjlIMTQuMThaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0xOS4zNywxMC41MUgxNC4xOFYxMmg4'@;
put 'LjM3QTQuMjEsNC4yMSwwLDAsMCwxOS4zNywxMC41MVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIC8+PHBhdGggZD0iTTE3LjY3LDJhMTYsMTYsMCwxLDAsMTYsMTZBMTYsMTYsMCwwLDAsMTcuNjcsMlptMTAuNSwxNS44SDI1LjdhNi44Nyw2Ljg3LDAsMCwxLTYu'@;
put 'MzMsNC40SDE0LjE4djYuNTRhMS4yNSwxLjI1LDAsMSwxLTIuNSwwVjE3LjhIOC43NmEuOS45LDAsMSwxLDAtMS44aDIuOTJWMTMuOEg4Ljc2YS45LjksMCwxLDEsMC0xLjhoMi45MlY5LjI2QTEuMjUsMS4yNSwwLDAsMSwxMi45Myw4aDYuNDRhNi44NCw2Ljg0LDAsMCwxLDYuMTUsNGgyLjY1'@;
put 'YS45LjksMCwwLDEsMCwxLjhIMjYuMDlhNi45MSw2LjkxLDAsMCwxLC4xMiwxLjMsNi44LDYuOCwwLDAsMS0uMDYuOWgyYS45LjksMCwwLDEsMCwxLjhaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC00IiAvPicpLHkuQ2xyU2hhcGVSdWJsZT0oMCxnLmNsckljb25TVkcp'@;
put 'KCc8cGF0aCBkPSJNMjAuNTcsMjBBOC4yMyw4LjIzLDAsMCwwLDI5LDEyYTguMjMsOC4yMywwLDAsMC04LjQzLThIMTJhMSwxLDAsMCwwLTEsMVYxOEg5YTEsMSwwLDAsMCwwLDJoMnYySDlhMSwxLDAsMCwwLDAsMmgydjdhMSwxLDAsMCwwLDIsMFYyNGg5YTEsMSwwLDAsMCwwLTJIMTNWMjBa'@;
put 'TTEzLDZoNy41N0E2LjI0LDYuMjQsMCwwLDEsMjcsMTJhNi4yMyw2LjIzLDAsMCwxLTYuNDMsNkgxM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0yMC43NSw5LjI1SDE1djguODFoNS43OWE0LjY2LDQuNjYsMCwwLDAsNC44Ni00LjRB'@;
put 'NC42NSw0LjY1LDAsMCwwLDIwLjc1LDkuMjVaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJabTIuNzUsMTguNTZIMTVWMjJoOC4yOWExLDEsMCwwLDEsMCwySDE1djVhMS4y'@;
put 'NSwxLjI1LDAsMCwxLTIuNSwwVjI0SDExLjI1YTEsMSwwLDAsMSwwLTJoMS4yMVYyMC41NkgxMS4yNWExLjI1LDEuMjUsMCwwLDEsMC0yLjVoMS4yMVY4YTEuMjUsMS4yNSwwLDAsMSwxLjI1LTEuMjVoN2E3LjE0LDcuMTQsMCwwLDEsNy4zNiw2LjlBNy4xNSw3LjE1LDAsMCwxLDIwLjc1LDIw'@;
put 'LjU2WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz4nKSx5LkNsclNoYXBlRW1wbG95ZWVHcm91cD0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTguNDIsMTYuMzFhNS43LDUuNywwLDEsMSw1Ljc2LTUuN0E1Ljc0LDUuNzQsMCwwLDEsMTguNDIsMTYuMzFa'@;
put 'bTAtOS40YTMuNywzLjcsMCwxLDAsMy43NiwzLjdBMy43NCwzLjc0LDAsMCwwLDE4LjQyLDYuOTFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICA8cGF0aCBkPSJNMTguNDIsMTYuMzFhNS43LDUuNywwLDEsMSw1Ljc2LTUuN0E1Ljc0LDUuNzQsMCww'@;
put 'LDEsMTguNDIsMTYuMzFabTAtOS40YTMuNywzLjcsMCwxLDAsMy43NiwzLjdBMy43NCwzLjc0LDAsMCwwLDE4LjQyLDYuOTFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICA8cGF0aCBkPSJNMjEuOTEsMTcuNjVhMjAuNiwyMC42LDAsMCwwLTEzLDJB'@;
put 'MS43NywxLjc3LDAsMCwwLDgsMjEuMjV2My41NmExLDEsMCwwLDAsMiwwVjIxLjM4YTE4LjkyLDE4LjkyLDAsMCwxLDEyLTEuNjhaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICA8cGF0aCBkPSJNMzMsMjJIMjYuM1YyMC41MmExLDEsMCwwLDAtMiww'@;
put 'VjIySDE3YTEsMSwwLDAsMC0xLDFWMzNhMSwxLDAsMCwwLDEsMUgzM2ExLDEsMCwwLDAsMS0xVjIzQTEsMSwwLDAsMCwzMywyMlpNMzIsMzJIMThWMjRoNi4zdi40MWExLDEsMCwwLDAsMiwwVjI0SDMyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiLz5cbiAg'@;
put 'PHJlY3QgeD0iMjEuODEiIHk9IjI3LjQyIiB3aWR0aD0iNS45NiIgaGVpZ2h0PSIxLjQiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01Ii8+XG4gIDxwYXRoIGQ9Ik0xMC44NCwxMi4yNGExOCwxOCwwLDAsMC03Ljk1LDJBMS42NywxLjY3LDAsMCwwLDIsMTUuNzF2'@;
put 'My4xYTEsMSwwLDAsMCwyLDB2LTIuOWExNiwxNiwwLDAsMSw3LjU4LTEuNjdBNy4yOCw3LjI4LDAsMCwxLDEwLjg0LDEyLjI0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiLz5cbiAgPHBhdGggZD0iTTMzLjExLDE0LjIzYTE3LjgsMTcuOCwwLDAsMC03LjEy'@;
put 'LTIsNy40Niw3LjQ2LDAsMCwxLS43MywyQTE1Ljg5LDE1Ljg5LDAsMCwxLDMyLDE1LjkxdjIuOWExLDEsMCwxLDAsMiwwdi0zLjFBMS42NywxLjY3LDAsMCwwLDMzLjExLDE0LjIzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTciLz5cbiAgPHBhdGggZD0iTTEw'@;
put 'LjY2LDEwLjYxYzAtLjIzLDAtLjQ1LDAtLjY3YTMuMDcsMy4wNywwLDAsMSwuNTQtNi4xMSwzLjE1LDMuMTUsMCwwLDEsMi4yLjg5LDguMTYsOC4xNiwwLDAsMSwxLjctMS4wOCw1LjEzLDUuMTMsMCwwLDAtOSwzLjI3LDUuMSw1LjEsMCwwLDAsNC43LDVBNy40Miw3LjQyLDAsMCwxLDEwLjY2'@;
put 'LDEwLjYxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTgiLz5cbiAgPHBhdGggZD0iTTI0Ljc3LDEuODNhNS4xNyw1LjE3LDAsMCwwLTMuNjksMS41NSw3Ljg3LDcuODcsMCwwLDEsMS45LDEsMy4xNCwzLjE0LDAsMCwxLDQuOTMsMi41MiwzLjA5LDMuMDksMCww'@;
put 'LDEtMS43OSwyLjc3LDcuMTQsNy4xNCwwLDAsMSwuMDYuOTMsNy44OCw3Ljg4LDAsMCwxLS4xLDEuMiw1LjEsNS4xLDAsMCwwLDMuODMtNC45QTUuMTIsNS4xMiwwLDAsMCwyNC43NywxLjgzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTkiLz5cbiAgXG4gIDxl'@;
put 'bGxpcHNlIGN4PSIxOCIgY3k9IjExLjI4IiByeD0iNC43NiIgcnk9IjQuNyIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICA8cGF0aCBkPSJNMTAuNzgsMTEuNzVjLjE2LDAsLjMyLDAsLjQ4LDAsMC0uMTUsMC0uMjgsMC0uNDNhNi43LDYuNywwLDAsMSwzLjc1'@;
put 'LTYsNC42Miw0LjYyLDAsMSwwLTQuMjEsNi40NloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiLz5cbiAgPHBhdGggZD0iTTI0Ljc2LDExLjI4YzAsLjE1LDAsLjI4LDAsLjQzLjE2LDAsLjMyLDAsLjQ4LDBBNC41OCw0LjU4LDAsMSwwLDIxLDUuMjksNi43LDYuNyww'@;
put 'LDAsMSwyNC43NiwxMS4yOFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiLz5cbiAgPHBhdGggZD0iTTIyLjI5LDE2LjQ1YTIxLjQ1LDIxLjQ1LDAsMCwxLDUuNzEsMiwyLjcxLDIuNzEsMCwwLDEsLjY4LjUzSDM0VjE1LjU2YS43Mi43MiwwLDAsMC0uMzgtLjY0LDE4'@;
put 'LDE4LDAsMCwwLTguNC0yLjA1bC0uNjYsMEE2LjY2LDYuNjYsMCwwLDEsMjIuMjksMTYuNDVaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC00Ii8+XG4gIDxwYXRoIGQ9Ik02LjUzLDIwLjkyQTIuNzYsMi43NiwwLDAsMSw4LDE4LjQ3YTIxLjQ1LDIxLjQ1LDAsMCwxLDUu'@;
put 'NzEtMiw2LjY2LDYuNjYsMCwwLDEtMi4yNy0zLjU1bC0uNjYsMGExOCwxOCwwLDAsMC04LjQsMi4wNS43Mi43MiwwLDAsMC0uMzguNjRWMjJINi41M1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTUiLz5cbiAgPHJlY3QgeD0iMjEuNDYiIHk9IjI2LjY5IiB3aWR0aD0i'@;
put 'NS45NiIgaGVpZ2h0PSIxLjQiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTYiLz5cbiAgPHBhdGggZD0iTTMyLjgxLDIxLjI2SDI1Ljk0di0xYTEsMSwwLDAsMC0yLDB2MUgyMlYxOC40M0EyMC4xNywyMC4xNywwLDAsMCwxOCwxOGExOS4yNywxOS4yNywwLDAsMC05LjA2'@;
put 'LDIuMjIuNzYuNzYsMCwwLDAtLjQxLjY4djUuNjFoNy4xMXY2LjA5YTEsMSwwLDAsMCwxLDFIMzIuODFhMSwxLDAsMCwwLDEtMVYyMi4yNkExLDEsMCwwLDAsMzIuODEsMjEuMjZabS0xLDEwLjM2SDE3LjY0VjIzLjI2aDYuM3YuOTFhMSwxLDAsMCwwLDIsMHYtLjkxaDUuODdaIiBjbGFzcz0i'@;
put 'Y2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC03Ii8+JykseS5DbHJTaGFwZUVtcGxveWVlPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xNi40MywxNi42OWE3LDcsMCwxLDEsNy03QTcsNywwLDAsMSwxNi40MywxNi42OVptMC0xMS45MmE1LDUsMCwxLDAsNSw1QTUsNSwwLDAsMCwx'@;
put 'Ni40Myw0Ljc3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgPHBhdGggZD0iTTIyLDE3LjlBMjUuNDEsMjUuNDEsMCwwLDAsNS44OCwxOS41N2E0LjA2LDQuMDYsMCwwLDAtMi4zMSwzLjY4VjI5LjJhMSwxLDAsMSwwLDIsMFYyMy4yNWEyLDIsMCww'@;
put 'LDEsMS4xNi0xLjg2LDIyLjkxLDIyLjkxLDAsMCwxLDkuNy0yLjExLDIzLjU4LDIzLjU4LDAsMCwxLDUuNTcuNjZaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICA8cmVjdCB4PSIyMi4xNCIgeT0iMjcuNDEiIHdpZHRoPSI2LjE0IiBoZWlnaHQ9IjEu'@;
put 'NCIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiLz5cbiAgPHBhdGggZD0iTTMzLjE3LDIxLjQ3SDI4djJoNC4xN3Y4LjM3SDE4VjIzLjQ3aDYuM3YuNDJhMSwxLDAsMCwwLDIsMFYyMGExLDEsMCwwLDAtMiwwdjEuNDdIMTdhMSwxLDAsMCwwLTEsMVYzMi44NGEx'@;
put 'LDEsMCwwLDAsMSwxSDMzLjE3YTEsMSwwLDAsMCwxLTFWMjIuNDdBMSwxLDAsMCwwLDMzLjE3LDIxLjQ3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiLz5cbiAgXG4gIDxjaXJjbGUgY3g9IjE2Ljg2IiBjeT0iOS43MyIgcj0iNi40NiIgY2xhc3M9ImNsci1p'@;
put 'LXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICA8cmVjdCB4PSIyMSIgeT0iMjgiIHdpZHRoPSI3IiBoZWlnaHQ9IjEuNCIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIvPlxuICA8cGF0aCBkPSJNMTUsMzB2M2ExLDEsMCwwLDAsMSwxSDMzYTEsMSwwLDAsMCwx'@;
put 'LTFWMjNhMSwxLDAsMCwwLTEtMUgyNlYyMC41M2ExLDEsMCwwLDAtMiwwVjIySDIyVjE4LjQyQTMyLjEyLDMyLjEyLDAsMCwwLDE2Ljg2LDE4YTI2LDI2LDAsMCwwLTExLDIuMzksMy4yOCwzLjI4LDAsMCwwLTEuODgsM1YzMFptMTcsMkgxN1YyNGg3di40MmExLDEsMCwwLDAsMiwwVjI0aDZa'@;
put 'IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIi8+JykseS5DbHJTaGFwZUZhY3Rvcnk9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMzLjQ3LDcuMzdhMSwxLDAsMCwwLTEsLjA2TDIzLDEzLjc3VjguMjZhMSwxLDAsMCwwLTEuNjQtLjc3TDEzLjQ4LDE0SDEwVjQu'@;
put 'NjJhMSwxLDAsMCwwLS43OC0xbC00LS45YTEsMSwwLDAsMC0uODUuMkExLDEsMCwwLDAsNCwzLjczVjE0SDNhMSwxLDAsMCwwLTEsMVYzMWExLDEsMCwwLDAsMSwxSDMzYTEsMSwwLDAsMCwxLTFWOC4yNkExLDEsMCwwLDAsMzMuNDcsNy4zN1pNNiw1bDIsLjQ0VjE0SDZaTTMyLDMwSDRWMTZo'@;
put 'OS44M2ExLDEsMCwwLDAsLjY0LS4yM0wyMSwxMC4zN3Y1LjI4YTEsMSwwLDAsMCwxLjU2LjgzTDMyLDEwLjE0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgPHJlY3QgeD0iNiIgeT0iMTcuOTkiIHdpZHRoPSI4IiBoZWlnaHQ9IjIiIGNsYXNzPSJj'@;
put 'bHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gIDxyZWN0IHg9IjYiIHk9IjIxLjk5IiB3aWR0aD0iOCIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICA8cmVjdCB4PSI2IiB5PSIyNS45OSIgd2lkdGg9IjgiIGhl'@;
put 'aWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiLz5cbiAgPHJlY3QgeD0iMTkiIHk9IjE4Ljk5IiB3aWR0aD0iMiIgaGVpZ2h0PSIzIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIvPlxuICA8cmVjdCB4PSIxOSIgeT0i'@;
put 'MjQuOTkiIHdpZHRoPSIyIiBoZWlnaHQ9IjMiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02Ii8+XG4gIDxyZWN0IHg9IjIzIiB5PSIxOC45OSIgd2lkdGg9IjIiIGhlaWdodD0iMyIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTciLz5c'@;
put 'biAgPHJlY3QgeD0iMjMiIHk9IjI0Ljk5IiB3aWR0aD0iMiIgaGVpZ2h0PSIzIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtOCIvPlxuICA8cmVjdCB4PSIyNyIgeT0iMTguOTkiIHdpZHRoPSIyIiBoZWlnaHQ9IjMiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1p'@;
put 'LW91dGxpbmUtcGF0aC05Ii8+XG4gIDxyZWN0IHg9IjI3IiB5PSIyNC45OSIgd2lkdGg9IjIiIGhlaWdodD0iMyIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEwIi8+XG4gIFxuICA8cGF0aCBkPSJNMzIuNDUsOC40NCwyMiwxNS4zVjkuNTFhMSwxLDAsMCwwLTEu'@;
put 'NjMtLjc4TDE0LjA3LDE0SDEwVjQuMDZMNCwyLjcxVjE0SDJWMzFhMSwxLDAsMCwwLDEsMUgzM2ExLDEsMCwwLDAsMS0xVjkuMjdBMSwxLDAsMCwwLDMyLjQ1LDguNDRaTTE0LDI5SDZWMjdoOFptMC00SDZWMjNoOFptMC00SDZWMTloOFptOCw4SDIwVjI2aDJabTAtNkgyMFYyMGgyWm00LDZI'@;
put 'MjRWMjZoMlptMC02SDI0VjIwaDJabTQsNkgyOFYyNmgyWm0wLTZIMjhWMjBoMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz4nKSx5LkNvbW1lcmNlU2hhcGVzPXtjYWxjdWxhdG9yOnkuQ2xyU2hhcGVDYWxjdWxhdG9yLCJwaWdneS1iYW5rIjp5LkNsclNoYXBl'@;
put 'UGlnZ3lCYW5rLCJzaG9wcGluZy1iYWciOnkuQ2xyU2hhcGVTaG9wcGluZ0JhZywic2hvcHBpbmctY2FydCI6eS5DbHJTaGFwZVNob3BwaW5nQ2FydCx3YWxsZXQ6eS5DbHJTaGFwZVdhbGxldCxzdG9yZTp5LkNsclNoYXBlU3RvcmUsZXVybzp5LkNsclNoYXBlRXVybyxkb2xsYXI6eS5DbHJT'@;
put 'aGFwZURvbGxhcixwZXNvOnkuQ2xyU2hhcGVQZXNvLCJjcmVkaXQtY2FyZCI6eS5DbHJTaGFwZUNyZWRpdENhcmQsYmFuazp5LkNsclNoYXBlQmFuaywiZG9sbGFyLWJpbGwiOnkuQ2xyU2hhcGVEb2xsYXJCaWxsLCJlLWNoZWNrIjp5LkNsclNoYXBlRUNoZWNrLHBvdW5kOnkuQ2xyU2hhcGVQ'@;
put 'b3VuZCxydXBlZTp5LkNsclNoYXBlUnVwZWUsd29uOnkuQ2xyU2hhcGVXb24seWVuOnkuQ2xyU2hhcGVZZW4sYml0Y29pbjp5LkNsclNoYXBlQml0Y29pbixydWJsZTp5LkNsclNoYXBlUnVibGUsImNvaW4tYmFnIjp5LkNsclNoYXBlQ29pbkJhZywiZW1wbG95ZWUtZ3JvdXAiOnkuQ2xyU2hh'@;
put 'cGVFbXBsb3llZUdyb3VwLGVtcGxveWVlOnkuQ2xyU2hhcGVFbXBsb3llZSxmYWN0b3J5OnkuQ2xyU2hhcGVGYWN0b3J5fSxPYmplY3QuZGVmaW5lUHJvcGVydHkoeS5Db21tZXJjZVNoYXBlcywic2F2aW5ncyIsKDAsXy5kZXNjcmlwdG9yQ29uZmlnKSh5LkNvbW1lcmNlU2hhcGVzWyJwaWdn'@;
put 'eS1iYW5rIl0pKSx0eXBlb2Ygd2luZG93PCJ1IiYmd2luZG93Lmhhc093blByb3BlcnR5KCJDbGFyaXR5SWNvbnMiKSYmd2luZG93LkNsYXJpdHlJY29ucy5hZGQoeS5Db21tZXJjZVNoYXBlcyl9LCIuL3Byb2plY3RzL2ljb25zL3NyYy9zaGFwZXMvY29yZS1zaGFwZXMudHMiOgovKiEqKioq'@;
put 'KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAogICAgICAgICAgICAgICAgICAhKioqIC4vcHJvamVjdHMvaWNvbnMvc3JjL3NoYXBlcy9jb3JlLXNoYXBlcy50cyAqKiohCiAgICAgICAgICAgICAgICAgIFwqKioqKioqKioqKioqKioqKioqKioqKioq'@;
put 'KioqKioqKioqKioqKioqKioqKioqKioqKi8KLyohIG5vIHN0YXRpYyBleHBvcnRzIGZvdW5kICovZnVuY3Rpb24oWCx5LEkpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoeSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSkseS5Db3JlU2hhcGVzPXkuQ2xyU2hhcGVBcnJvdz15'@;
put 'LkNsclNoYXBlU3RlcEZvcndhcmQyPXkuQ2xyU2hhcGVFeWVIaWRlPXkuQ2xyU2hhcGVFeWU9eS5DbHJTaGFwZUV2ZW50PXkuQ2xyU2hhcGVDYWxlbmRhcj15LkNsclNoYXBlQW5nbGVEb3VibGU9eS5DbHJTaGFwZVZpZXdDb2x1bW5zPXkuQ2xyU2hhcGVTZWFyY2g9eS5DbHJTaGFwZVZtQnVn'@;
put 'PXkuQ2xyU2hhcGVGaWx0ZXJHcmlkQ2lyY2xlPXkuQ2xyU2hhcGVGaWx0ZXJHcmlkPXkuQ2xyU2hhcGVFbGxpcHNpc1ZlcnRpY2FsPXkuQ2xyU2hhcGVFbGxpcHNpc0hvcml6b250YWw9eS5DbHJTaGFwZUNsb3VkPXkuQ2xyU2hhcGVJbWFnZT15LkNsclNoYXBlQmVsbD15LkNsclNoYXBlRm9s'@;
put 'ZGVyT3Blbj15LkNsclNoYXBlRm9sZGVyPXkuQ2xyU2hhcGVBbmdsZT15LkNsclNoYXBlVXNlcj15LkNsclNoYXBlQmFycz15LkNsclNoYXBlSGVscEluZm89eS5DbHJTaGFwZVdhcm5pbmdTdGFuZGFyZD15LkNsclNoYXBlRXJyb3JTdGFuZGFyZD15LkNsclNoYXBlU3VjY2Vzc1N0YW5kYXJk'@;
put 'PXkuQ2xyU2hhcGVJbmZvU3RhbmRhcmQ9eS5DbHJTaGFwZUluZm9DaXJjbGU9eS5DbHJTaGFwZUNoZWNrQ2lyY2xlPXkuQ2xyU2hhcGVFeGNsYW1hdGlvbkNpcmNsZT15LkNsclNoYXBlRXhjbGFtYXRpb25UcmlhbmdsZT15LkNsclNoYXBlVGltZXM9eS5DbHJTaGFwZUNoZWNrPXkuQ2xyU2hh'@;
put 'cGVDb2c9eS5DbHJTaGFwZUhvbWU9eS5DbHJTaGFwZVVua25vd25TdGF0dXM9dm9pZCAwO3ZhciBfPUkoCi8qISAuLi91dGlscy9kZXNjcmlwdG9yLWNvbmZpZyAqLwoiLi9wcm9qZWN0cy9pY29ucy9zcmMvdXRpbHMvZGVzY3JpcHRvci1jb25maWcudHMiKSxnPUkoCi8qISAuLi91dGlscy9z'@;
put 'dmctdGFnLWdlbmVyYXRvciAqLwoiLi9wcm9qZWN0cy9pY29ucy9zcmMvdXRpbHMvc3ZnLXRhZy1nZW5lcmF0b3IudHMiKTt5LkNsclNoYXBlVW5rbm93blN0YXR1cz0oMCxnLmNsckljb25TVkcpKCc8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBj'@;
put 'eD0iMTcuNTgiIGN5PSIyNi4yMyIgcj0iMS40Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0yNC43LDEzYTUuMTgsNS4xOCwwLDAsMC0yLjE2LTMuNTYsNy4yNiw3LjI2LDAsMCwwLTUuNzEtMS4wOUExMS4z'@;
put 'NCwxMS4zNCwwLDAsMCwxMiwxMC40NCwxLDEsMCwxLDAsMTMuMjYsMTJhOS4zMiw5LjMyLDAsMCwxLDMuOTQtMS43Miw1LjI5LDUuMjksMCwwLDEsNC4xNi43NCwzLjIxLDMuMjEsMCwwLDEsMS4zNSwyLjE5Yy4zMywyLjY5LTMuMTksMy43NS01LjMyLDQuMTRsLS44Mi4xNXY0LjM2YTEsMSww'@;
put 'LDAsMCwyLDBWMTkuMTdDMjQuNjEsMTcuNzksMjQuODgsMTQuNDEsMjQuNywxM1oiLz4nKSx5LkNsclNoYXBlSG9tZT0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMzLjcxLDE3LjI5bC0xNS0xNWExLDEsMCww'@;
put 'LDAtMS40MSwwbC0xNSwxNWExLDEsMCwwLDAsMS40MSwxLjQxTDE4LDQuNDEsMzIuMjksMTguNzFhMSwxLDAsMCwwLDEuNDEtMS40MVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTI4LDMyaC01VjIySDEz'@;
put 'VjMySDhWMThMNiwyMFYzMmEyLDIsMCwwLDAsMiwyaDdWMjRoNlYzNGg3YTIsMiwwLDAsMCwyLTJWMTkuNzZsLTItMloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzMsMTlhMSwxLDAsMCwxLS43MS0uMjlMMTgs'@;
put 'NC40MSwzLjcxLDE4LjcxYTEsMSwwLDAsMS0xLjQxLTEuNDFsMTUtMTVhMSwxLDAsMCwxLDEuNDEsMGwxNSwxNUExLDEsMCwwLDEsMzMsMTlaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTTE4LDcuNzksNiwxOS44'@;
put 'M1YzMmEyLDIsMCwwLDAsMiwyaDdWMjRoNlYzNGg3YTIsMiwwLDAsMCwyLTJWMTkuNzZaIi8+JykseS5DbHJTaGFwZUNvZz0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE4LjEsMTFjLTMuOSwwLTcsMy4xLTcs'@;
put 'N3MzLjEsNyw3LDdjMy45LDAsNy0zLjEsNy03UzIyLDExLDE4LjEsMTF6IE0xOC4xLDIzYy0yLjgsMC01LTIuMi01LTVzMi4yLTUsNS01YzIuOCwwLDUsMi4yLDUsNVMyMC45LDIzLDE4LjEsMjN6Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWkt'@;
put 'b3V0bGluZS1wYXRoLTIiIGQ9Ik0zMi44LDE0LjdMMzAsMTMuOGwtMC42LTEuNWwxLjQtMi42YzAuMy0wLjYsMC4yLTEuNC0wLjMtMS45bC0yLjQtMi40Yy0wLjUtMC41LTEuMy0wLjYtMS45LTAuM2wtMi42LDEuNGwtMS41LTAuNmwtMC45LTIuOEMyMSwyLjUsMjAuNCwyLDE5LjcsMmgtMy40'@;
put 'Yy0wLjcsMC0xLjMsMC41LTEuNCwxLjJMMTQsNmMtMC42LDAuMS0xLjEsMC4zLTEuNiwwLjZMOS44LDUuMkM5LjIsNC45LDguNCw1LDcuOSw1LjVMNS41LDcuOUM1LDguNCw0LjksOS4yLDUuMiw5LjhsMS4zLDIuNWMtMC4yLDAuNS0wLjQsMS4xLTAuNiwxLjZsLTIuOCwwLjlDMi41LDE1LDIs'@;
put 'MTUuNiwyLDE2LjN2My40YzAsMC43LDAuNSwxLjMsMS4yLDEuNUw2LDIyLjFsMC42LDEuNWwtMS40LDIuNmMtMC4zLDAuNi0wLjIsMS40LDAuMywxLjlsMi40LDIuNGMwLjUsMC41LDEuMywwLjYsMS45LDAuM2wyLjYtMS40bDEuNSwwLjZsMC45LDIuOWMwLjIsMC42LDAuOCwxLjEsMS41LDEu'@;
put 'MWgzLjRjMC43LDAsMS4zLTAuNSwxLjUtMS4xbDAuOS0yLjlsMS41LTAuNmwyLjYsMS40YzAuNiwwLjMsMS40LDAuMiwxLjktMC4zbDIuNC0yLjRjMC41LTAuNSwwLjYtMS4zLDAuMy0xLjlsLTEuNC0yLjZsMC42LTEuNWwyLjktMC45YzAuNi0wLjIsMS4xLTAuOCwxLjEtMS41di0zLjRDMzQs'@;
put 'MTUuNiwzMy41LDE0LjksMzIuOCwxNC43eiBNMzIsMTkuNGwtMy42LDEuMUwyOC4zLDIxYy0wLjMsMC43LTAuNiwxLjQtMC45LDIuMWwtMC4zLDAuNWwxLjgsMy4zbC0yLDJsLTMuMy0xLjhsLTAuNSwwLjNjLTAuNywwLjQtMS40LDAuNy0yLjEsMC45bC0wLjUsMC4xTDE5LjQsMzJoLTIuOGwt'@;
put 'MS4xLTMuNkwxNSwyOC4zYy0wLjctMC4zLTEuNC0wLjYtMi4xLTAuOWwtMC41LTAuM2wtMy4zLDEuOGwtMi0ybDEuOC0zLjNsLTAuMy0wLjVjLTAuNC0wLjctMC43LTEuNC0wLjktMi4xbC0wLjEtMC41TDQsMTkuNHYtMi44bDMuNC0xbDAuMi0wLjVjMC4yLTAuOCwwLjUtMS41LDAuOS0yLjJs'@;
put 'MC4zLTAuNUw3LjEsOS4xbDItMmwzLjIsMS44bDAuNS0wLjNjMC43LTAuNCwxLjQtMC43LDIuMi0wLjlsMC41LTAuMkwxNi42LDRoMi44bDEuMSwzLjVMMjEsNy43YzAuNywwLjIsMS40LDAuNSwyLjEsMC45bDAuNSwwLjNsMy4zLTEuOGwyLDJsLTEuOCwzLjNsMC4zLDAuNWMwLjQsMC43LDAu'@;
put 'NywxLjQsMC45LDIuMWwwLjEsMC41bDMuNiwxLjFWMTkuNHoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0xMS4xLDE4YzAsMy45LDMuMSw3LDcsN2MzLjksMCw3LTMuMSw3LTdz'@;
put 'LTMuMS03LTctN0MxNC4yLDExLDExLjEsMTQuMSwxMS4xLDE4eiBNMjMuMSwxOGMwLDIuOC0yLjIsNS01LDVjLTIuOCwwLTUtMi4yLTUtNXMyLjItNSw1LTVDMjAuOSwxMywyMy4xLDE1LjIsMjMuMSwxOHoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0t'@;
put 'YmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiIGQ9Ik0zMi44LDE0LjdMMzAsMTMuOGwtMC4xLTAuM2MtMC44LDAtMS42LTAuMi0yLjQtMC40YzAuMywwLjYsMC42LDEuMywwLjgsMS45bDAuMSwwLjVsMy42LDEuMXYyLjhsLTMuNiwxLjFMMjguMywyMWMtMC4zLDAuNy0wLjYs'@;
put 'MS40LTAuOSwyLjFsLTAuMywwLjVsMS44LDMuM2wtMiwybC0zLjMtMS44bC0wLjUsMC4zYy0wLjcsMC40LTEuNCwwLjctMi4xLDAuOWwtMC41LDAuMUwxOS40LDMyaC0yLjhsLTEuMS0zLjZMMTUsMjguM2MtMC43LTAuMy0xLjQtMC42LTIuMS0wLjlsLTAuNS0wLjNsLTMuMywxLjhsLTItMmwx'@;
put 'LjgtMy4zbC0wLjMtMC41Yy0wLjQtMC43LTAuNy0xLjQtMC45LTIuMWwtMC4xLTAuNUw0LDE5LjR2LTIuOGwzLjQtMWwwLjItMC41YzAuMi0wLjgsMC41LTEuNSwwLjktMi4ybDAuMy0wLjVMNy4xLDkuMWwyLTJsMy4yLDEuOGwwLjUtMC4zYzAuNy0wLjQsMS40LTAuNywyLjItMC45bDAuNS0w'@;
put 'LjJMMTYuNiw0aDIuOGwxLjEsMy41TDIxLDcuN2MwLjcsMC4yLDEuMywwLjUsMS45LDAuOGMtMC4zLTAuOC0wLjQtMS42LTAuNC0yLjVsLTAuNC0wLjJsLTAuOS0yLjhDMjEsMi41LDIwLjQsMiwxOS43LDJoLTMuNGMtMC43LDAtMS4zLDAuNS0xLjQsMS4yTDE0LDZjLTAuNiwwLjEtMS4xLDAu'@;
put 'My0xLjYsMC42TDkuOCw1LjJDOS4yLDQuOSw4LjQsNSw3LjksNS41TDUuNSw3LjlDNSw4LjQsNC45LDkuMiw1LjIsOS44bDEuMywyLjVjLTAuMiwwLjUtMC40LDEuMS0wLjYsMS42bC0yLjgsMC45QzIuNSwxNSwyLDE1LjYsMiwxNi4zdjMuNGMwLDAuNywwLjUsMS4zLDEuMiwxLjVMNiwyMi4x'@;
put 'bDAuNiwxLjVsLTEuNCwyLjZjLTAuMywwLjYtMC4yLDEuNCwwLjMsMS45bDIuNCwyLjRjMC41LDAuNSwxLjMsMC42LDEuOSwwLjNsMi42LTEuNGwxLjUsMC42bDAuOSwyLjljMC4yLDAuNiwwLjgsMS4xLDEuNSwxLjFoMy40YzAuNywwLDEuMy0wLjUsMS41LTEuMWwwLjktMi45bDEuNS0wLjZs'@;
put 'Mi42LDEuNGMwLjYsMC4zLDEuNCwwLjIsMS45LTAuM2wyLjQtMi40YzAuNS0wLjUsMC42LTEuMywwLjMtMS45bC0xLjQtMi42bDAuNi0xLjVsMi45LTAuOWMwLjYtMC4yLDEuMS0wLjgsMS4xLTEuNXYtMy40QzM0LDE1LjYsMzMuNSwxNC45LDMyLjgsMTQuN3oiLz5cbiAgICAgICAgICAgICAg'@;
put 'ICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91'@;
put 'dGxpbmUtcGF0aC0xLS1hbGVydGVkIiBkPSJNMzMuNywxNS40aC01LjN2MC4xbDMuNiwxLjF2Mi44bC0zLjYsMS4xTDI4LjMsMjFjLTAuMywwLjctMC42LDEuNC0wLjksMi4xbC0wLjMsMC41bDEuOCwzLjNsLTIsMmwtMy4zLTEuOGwtMC41LDAuM2MtMC43LDAuNC0xLjQsMC43LTIuMSwwLjls'@;
put 'LTAuNSwwLjFMMTkuNCwzMmgtMi44bC0xLjEtMy42TDE1LDI4LjNjLTAuNy0wLjMtMS40LTAuNi0yLjEtMC45bC0wLjUtMC4zbC0zLjMsMS44bC0yLTJsMS44LTMuM2wtMC4zLTAuNWMtMC40LTAuNy0wLjctMS40LTAuOS0yLjFsLTAuMS0wLjVMNCwxOS40di0yLjhsMy40LTFsMC4yLTAuNWMw'@;
put 'LjItMC44LDAuNS0xLjUsMC45LTIuMmwwLjMtMC41TDcuMSw5LjFsMi0ybDMuMiwxLjhsMC41LTAuM2MwLjctMC40LDEuNC0wLjcsMi4yLTAuOWwwLjUtMC4yTDE2LjYsNGgyLjhsMS4xLDMuNGwxLjQtMi4zbC0wLjYtMkMyMSwyLjQsMjAuNCwyLDE5LjcsMmgtMy40Yy0wLjcsMC0xLjMsMC41'@;
put 'LTEuNCwxLjJMMTQsNmMtMC42LDAuMS0xLjEsMC4zLTEuNiwwLjZMOS44LDUuMkM5LjIsNC45LDguNCw1LDcuOSw1LjVMNS41LDcuOUM1LDguNCw0LjksOS4yLDUuMiw5LjhsMS4zLDIuNWMtMC4yLDAuNS0wLjQsMS4xLTAuNiwxLjZsLTIuOCwwLjlDMi41LDE1LDIsMTUuNiwyLDE2LjN2My40'@;
put 'YzAsMC43LDAuNSwxLjMsMS4yLDEuNUw2LDIyLjFsMC42LDEuNWwtMS40LDIuNmMtMC4zLDAuNi0wLjIsMS40LDAuMywxLjlsMi40LDIuNGMwLjUsMC41LDEuMywwLjYsMS45LDAuM2wyLjYtMS40bDEuNSwwLjZsMC45LDIuOWMwLjIsMC42LDAuOCwxLjEsMS41LDEuMWgzLjRjMC43LDAsMS4z'@;
put 'LTAuNSwxLjUtMS4xbDAuOS0yLjlsMS41LTAuNmwyLjYsMS40YzAuNiwwLjMsMS40LDAuMiwxLjktMC4zbDIuNC0yLjRjMC41LTAuNSwwLjYtMS4zLDAuMy0xLjlsLTEuNC0yLjZsMC42LTEuNWwyLjktMC45YzAuNi0wLjIsMS4xLTAuOCwxLjEtMS41di0zLjRDMzQsMTYsMzMuOSwxNS43LDMz'@;
put 'LjcsMTUuNHoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIgZD0iTTE4LjEsMjNjLTIuOCwwLTUtMi4yLTUtNXMyLjItNSw1LTVjMC4yLDAsMC41LDAsMC43LDAuMWMtMC4yLTAuNi0w'@;
put 'LjMtMS4zLTAuMi0yaC0wLjVjLTMuOSwwLTcsMy4xLTcsN2MwLDMuOSwzLjEsNyw3LDdjMy45LDAsNy0zLjEsNy03YzAtMC45LTAuMi0xLjgtMC41LTIuNmgtMi4yYzAuNSwwLjgsMC43LDEuNiwwLjcsMi41QzIzLjEsMjAuOCwyMC45LDIzLDE4LjEsMjN6Ii8+XG4gICAgICAgICAgICAgICAg'@;
put 'PHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi45LDEuMUwyMS4xLDExYy0wLjQsMC42LTAuMiwxLjQsMC4zLDEuOGMwLjIsMC4yLDAuNSwwLjIsMC44LDAuMmgxMS41YzAuNywwLDEuMy0w'@;
put 'LjUsMS4zLTEuMmMwLTAuMy0wLjEtMC41LTAuMi0wLjhsLTUuNy05LjljLTAuNC0wLjYtMS4xLTAuOC0xLjgtMC41QzI3LjEsMC44LDI3LDEsMjYuOSwxLjF6Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTMyLjU3'@;
put 'LDE1LjcybC0zLjM1LTFhMTEuNjUsMTEuNjUsMCwwLDAtLjk1LTIuMzNsMS42NC0zLjA3YS42MS42MSwwLDAsMC0uMTEtLjcyTDI3LjQxLDYuMmEuNjEuNjEsMCwwLDAtLjcyLS4xMUwyMy42NCw3LjcyYTExLjYyLDExLjYyLDAsMCwwLTIuMzYtMWwtMS0zLjMxQS42MS42MSwwLDAsMCwxOS42'@;
put 'OSwzSDE2LjMxYS42MS42MSwwLDAsMC0uNTguNDNsLTEsMy4zYTExLjYzLDExLjYzLDAsMCwwLTIuMzgsMWwtMy0xLjYyYS42MS42MSwwLDAsMC0uNzIuMTFMNi4yLDguNTlhLjYxLjYxLDAsMCwwLS4xMS43MmwxLjYyLDNhMTEuNjMsMTEuNjMsMCwwLDAtMSwyLjM3bC0zLjMxLDFhLjYxLjYx'@;
put 'LDAsMCwwLS40My41OHYzLjM4YS42MS42MSwwLDAsMCwuNDMuNThsMy4zMywxYTExLjYyLDExLjYyLDAsMCwwLDEsMi4zM0w2LjA5LDI2LjY5YS42MS42MSwwLDAsMCwuMTEuNzJMOC41OSwyOS44YS42MS42MSwwLDAsMCwuNzIuMTFsMy4wOS0xLjY1YTExLjY1LDExLjY1LDAsMCwwLDIuMy45'@;
put 'NGwxLDMuMzdhLjYxLjYxLDAsMCwwLC41OC40M2gzLjM4YS42MS42MSwwLDAsMCwuNTgtLjQzbDEtMy4zOGExMS42MywxMS42MywwLDAsMCwyLjI4LS45NGwzLjExLDEuNjZhLjYxLjYxLDAsMCwwLC43Mi0uMTFsMi4zOS0yLjM5YS42MS42MSwwLDAsMCwuMTEtLjcybC0xLjY2LTMuMWExMS42'@;
put 'MywxMS42MywwLDAsMCwuOTUtMi4yOWwzLjM3LTFhLjYxLjYxLDAsMCwwLC40My0uNThWMTYuMzFBLjYxLjYxLDAsMCwwLDMyLjU3LDE1LjcyWk0xOCwyMy41QTUuNSw1LjUsMCwxLDEsMjMuNSwxOCw1LjUsNS41LDAsMCwxLDE4LDIzLjVaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xh'@;
put 'c3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0zMi41NywxNS43MmwtMy4zNS0xYTEyLjEyLDEyLjEyLDAsMCwwLS40Ny0xLjMyLDcuNDksNy40OSwwLDAsMS02LjE0LTYuMTYsMTEuODIsMTEuODIsMCwwLDAtMS4zMy0uNDhsLTEtMy4zMUEu'@;
put 'NjEuNjEsMCwwLDAsMTkuNjksM0gxNi4zMWEuNjEuNjEsMCwwLDAtLjU4LjQzbC0xLDMuM2ExMS42MywxMS42MywwLDAsMC0yLjM4LDFsLTMtMS42MmEuNjEuNjEsMCwwLDAtLjcyLjExTDYuMiw4LjU5YS42MS42MSwwLDAsMC0uMTEuNzJsMS42MiwzYTExLjYzLDExLjYzLDAsMCwwLTEsMi4z'@;
put 'N2wtMy4zMSwxYS42MS42MSwwLDAsMC0uNDMuNTh2My4zOGEuNjEuNjEsMCwwLDAsLjQzLjU4bDMuMzMsMWExMS42MiwxMS42MiwwLDAsMCwxLDIuMzNMNi4wOSwyNi42OWEuNjEuNjEsMCwwLDAsLjExLjcyTDguNTksMjkuOGEuNjEuNjEsMCwwLDAsLjcyLjExbDMuMDktMS42NWExMS42NSwx'@;
put 'MS42NSwwLDAsMCwyLjMuOTRsMSwzLjM3YS42MS42MSwwLDAsMCwuNTguNDNoMy4zOGEuNjEuNjEsMCwwLDAsLjU4LS40M2wxLTMuMzhhMTEuNjMsMTEuNjMsMCwwLDAsMi4yOC0uOTRsMy4xMSwxLjY2YS42MS42MSwwLDAsMCwuNzItLjExbDIuMzktMi4zOWEuNjEuNjEsMCwwLDAsLjExLS43'@;
put 'MmwtMS42Ni0zLjFhMTEuNjMsMTEuNjMsMCwwLDAsLjk1LTIuMjlsMy4zNy0xYS42MS42MSwwLDAsMCwuNDMtLjU4VjE2LjMxQS42MS42MSwwLDAsMCwzMi41NywxNS43MlpNMTgsMjMuNUE1LjUsNS41LDAsMSwxLDIzLjUsMTgsNS41LDUuNSwwLDAsMSwxOCwyMy41WiIvPlxuICAgICAgICAg'@;
put 'ICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29s'@;
put 'aWQtcGF0aC0xLS1hbGVydGVkIiBkPSJNMzIuNTcsMTUuNzIsMzEuNSwxNS40SDIyLjg1QTUuNSw1LjUsMCwxLDEsMTgsMTIuNWE1LjUzLDUuNTMsMCwwLDEsLjY1LDBBMy42OCwzLjY4LDAsMCwxLDE5LDkuODlsMi4wOS0zLjYyLS44Ni0yLjgzQS42MS42MSwwLDAsMCwxOS42OSwzSDE2LjMx'@;
put 'YS42MS42MSwwLDAsMC0uNTguNDNsLTEsMy4zYTExLjYzLDExLjYzLDAsMCwwLTIuMzgsMWwtMy0xLjYyYS42MS42MSwwLDAsMC0uNzIuMTFMNi4yLDguNTlhLjYxLjYxLDAsMCwwLS4xMS43MmwxLjYyLDNhMTEuNjMsMTEuNjMsMCwwLDAtMSwyLjM3bC0zLjMxLDFhLjYxLjYxLDAsMCwwLS40'@;
put 'My41OHYzLjM4YS42MS42MSwwLDAsMCwuNDMuNThsMy4zMywxYTExLjYyLDExLjYyLDAsMCwwLDEsMi4zM0w2LjA5LDI2LjY5YS42MS42MSwwLDAsMCwuMTEuNzJMOC41OSwyOS44YS42MS42MSwwLDAsMCwuNzIuMTFsMy4wOS0xLjY1YTExLjY1LDExLjY1LDAsMCwwLDIuMy45NGwxLDMuMzdh'@;
put 'LjYxLjYxLDAsMCwwLC41OC40M2gzLjM4YS42MS42MSwwLDAsMCwuNTgtLjQzbDEtMy4zOGExMS42MywxMS42MywwLDAsMCwyLjI4LS45NGwzLjExLDEuNjZhLjYxLjYxLDAsMCwwLC43Mi0uMTFsMi4zOS0yLjM5YS42MS42MSwwLDAsMCwuMTEtLjcybC0xLjY2LTMuMWExMS42MywxMS42Myww'@;
put 'LDAsMCwuOTUtMi4yOWwzLjM3LTFhLjYxLjYxLDAsMCwwLC40My0uNThWMTYuMzFBLjYxLjYxLDAsMCwwLDMyLjU3LDE1LjcyWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxl'@;
put 'cnQiIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiLz4nKSx5LkNsclNoYXBlQ2hlY2s9KDAsZy5jbHJJY29uU1ZHKSgnPHBh'@;
put 'dGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xMy43MiwyNy42OSwzLjI5LDE3LjI3YTEsMSwwLDAsMSwxLjQxLTEuNDFsOSw5TDMxLjI5LDcuMjlhMSwxLDAsMCwxLDEuNDEsMS40MVoiLz4nKSx5LkNsclNoYXBlVGltZXM9KDAsZy5jbHJJY29uU1ZH'@;
put 'KSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xOS40MSwxOGw4LjI5LTguMjlhMSwxLDAsMCwwLTEuNDEtMS40MUwxOCwxNi41OSw5LjcxLDguMjlBMSwxLDAsMCwwLDguMjksOS43MUwxNi41OSwxOCw4LjI5LDI2LjI5YTEsMSwwLDEsMCwx'@;
put 'LjQxLDEuNDFMMTgsMTkuNDFsOC4yOSw4LjI5YTEsMSwwLDAsMCwxLjQxLTEuNDFaIi8+JykseS5DbHJTaGFwZUV4Y2xhbWF0aW9uVHJpYW5nbGU9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xOCwyMS4zMmEx'@;
put 'LjMsMS4zLDAsMCwwLDEuMy0xLjNWMTRhMS4zLDEuMywwLDEsMC0yLjYsMHY2QTEuMywxLjMsMCwwLDAsMTgsMjEuMzJaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgY3g9IjE3Ljk1IiBjeT0iMjQuMjciIHI9'@;
put 'IjEuNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMzAuMzMsMjUuNTQsMjAuNTksNy42YTMsMywwLDAsMC01LjI3LDBMNS41NywyNS41NEEzLDMsMCwwLDAsOC4yMSwzMEgyNy42OWEzLDMsMCwwLDAsMi42'@;
put 'NC00LjQzWm0tMS43OCwxLjk0YTEsMSwwLDAsMS0uODYuNDlIOC4yMWExLDEsMCwwLDEtLjg4LTEuNDhMMTcuMDcsOC41NWExLDEsMCwwLDEsMS43NiwwbDkuNzQsMTcuOTRBMSwxLDAsMCwxLDI4LjU1LDI3LjQ4WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xp'@;
put 'ZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zMC4zMywyNS41NCwyMC41OSw3LjZhMywzLDAsMCwwLTUuMjcsMEw1LjU3LDI1LjU0QTMsMywwLDAsMCw4LjIxLDMwSDI3LjY5YTMsMywwLDAsMCwyLjY0LTQuNDNaTTE2LjQ2LDEyLjc0YTEuNDksMS40OSwwLDAsMSwzLDB2Ni44OWExLjQ5LDEu'@;
put 'NDksMCwxLDEtMywwWk0xOCwyNi4yNWExLjcyLDEuNzIsMCwxLDEsMS43Mi0xLjcyQTEuNzIsMS43MiwwLDAsMSwxOCwyNi4yNVoiLz4nKSx5LkNsclNoYXBlRXhjbGFtYXRpb25DaXJjbGU9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGlu'@;
put 'ZS1wYXRoLTEiIGQ9Ik0xOCw2QTEyLDEyLDAsMSwwLDMwLDE4LDEyLDEyLDAsMCwwLDE4LDZabTAsMjJBMTAsMTAsMCwxLDEsMjgsMTgsMTAsMTAsMCwwLDEsMTgsMjhaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIi'@;
put 'IGQ9Ik0xOCwyMC4wN2ExLjMsMS4zLDAsMCwxLTEuMy0xLjN2LTZhMS4zLDEuMywwLDEsMSwyLjYsMHY2QTEuMywxLjMsMCwwLDEsMTgsMjAuMDdaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgY3g9IjE3Ljk1'@;
put 'IiBjeT0iMjMuMDIiIHI9IjEuNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0xOCw2QTEyLDEyLDAsMSwwLDMwLDE4LDEyLDEyLDAsMCwwLDE4LDZabS0xLjQ5LDZhMS40OSwxLjQ5LDAsMCwxLDMsMHY2Ljg5YTEu'@;
put 'NDksMS40OSwwLDEsMS0zLDBaTTE4LDI1LjVhMS43MiwxLjcyLDAsMSwxLDEuNzItMS43MkExLjcyLDEuNzIsMCwwLDEsMTgsMjUuNVoiLz4nKSx5LkNsclNoYXBlQ2hlY2tDaXJjbGU9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1w'@;
put 'YXRoLTEiIGQ9Ik0xOCw2QTEyLDEyLDAsMSwwLDMwLDE4LDEyLDEyLDAsMCwwLDE4LDZabTAsMjJBMTAsMTAsMCwxLDEsMjgsMTgsMTAsMTAsMCwwLDEsMTgsMjhaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9'@;
put 'Ik0xNi4zNCwyMy43NGwtNS01YTEsMSwwLDAsMSwxLjQxLTEuNDFsMy41OSwzLjU5LDYuNzgtNi43OGExLDEsMCwwLDEsMS40MSwxLjQxWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zMCwxOEExMiwxMiwwLDEs'@;
put 'MSwxOCw2LDEyLDEyLDAsMCwxLDMwLDE4Wm0tNC43Ny0yLjE2YTEuNCwxLjQsMCwwLDAtMi0ybC02Ljc3LDYuNzdMMTMsMTcuMTZhMS40LDEuNCwwLDAsMC0yLDJsNS40NSw1LjQ1WiIvPicpLHkuQ2xyU2hhcGVJbmZvQ2lyY2xlPSgwLGcuY2xySWNvblNWRykoJzxjaXJjbGUgY2xhc3M9ImNs'@;
put 'ci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiICBjeD0iMTcuOTMiIGN5PSIxMS45IiByPSIxLjQiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgIGQ9Ik0yMSwyM0gxOVYxNUgxNmExLDEsMCwwLDAsMCwy'@;
put 'aDF2NkgxNWExLDEsMCwxLDAsMCwyaDZhMSwxLDAsMCwwLDAtMloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgIGQ9Ik0xOCw2QTEyLDEyLDAsMSwwLDMwLDE4LDEyLDEyLDAsMCwwLDE4LDZabTAsMjJBMTAsMTAs'@;
put 'MCwxLDEsMjgsMTgsMTAsMTAsMCwwLDEsMTgsMjhaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTE4LDZBMTIsMTIsMCwxLDAsMzAsMTgsMTIsMTIsMCwwLDAsMTgsNlptLTIsNS4xNWEyLDIsMCwxLDEsMiwyQTIs'@;
put 'MiwwLDAsMSwxNS45LDExLjE1Wk0yMywyNGExLDEsMCwwLDEtMSwxSDE1YTEsMSwwLDEsMSwwLTJoMlYxN0gxNmExLDEsMCwwLDEsMC0yaDR2OGgyQTEsMSwwLDAsMSwyMywyNFoiLz4nKSx5LkNsclNoYXBlSW5mb1N0YW5kYXJkPSgwLGcuY2xySWNvblNWRykoJzxjaXJjbGUgY2xhc3M9ImNs'@;
put 'ci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGN4PSIxNy45NyIgY3k9IjEwLjQ1IiByPSIxLjQiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTIxLDI1SDE5VjE0LjFIMTZhMSwxLDAsMCwwLDAs'@;
put 'MmgxVjI1SDE1YTEsMSwwLDAsMCwwLDJoNmExLDEsMCwwLDAsMC0yWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMTgsMzRBMTYsMTYsMCwxLDEsMzQsMTgsMTYsMTYsMCwwLDEsMTgsMzRaTTE4LDRBMTQs'@;
put 'MTQsMCwxLDAsMzIsMTgsMTQsMTQsMCwwLDAsMTgsNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMTgsMi4xYTE2LDE2LDAsMSwwLDE2LDE2QTE2LDE2LDAsMCwwLDE4LDIuMVptLS4xLDUuMjhhMiwyLDAsMSwx'@;
put 'LTIsMkEyLDIsMCwwLDEsMTcuOSw3LjM4Wm0zLjYsMjEuMjVoLTdhMS40LDEuNCwwLDEsMSwwLTIuOGgyLjF2LTkuMkgxNWExLjQsMS40LDAsMSwxLDAtMi44aDQuNHYxMmgyLjFhMS40LDEuNCwwLDEsMSwwLDIuOFoiLz4nKSx5LkNsclNoYXBlU3VjY2Vzc1N0YW5kYXJkPSgwLGcuY2xySWNv'@;
put 'blNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm0wLDMwQTE0LDE0LDAsMSwxLDMyLDE4LDE0LDE0LDAsMCwxLDE4LDMyWiIvPlxuICAgICAgICAgICAgICAgIDxw'@;
put 'YXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMjgsMTIuMWExLDEsMCwwLDAtMS40MSwwTDE1LjQ5LDIzLjE1bC02LTZBMSwxLDAsMCwwLDgsMTguNTNMMTUuNDksMjYsMjgsMTMuNTJBMSwxLDAsMCwwLDI4LDEyLjFaIi8+XG4gICAgICAgICAgICAg'@;
put 'ICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTE4LDJBMTYsMTYsMCwxLDAsMzQsMTgsMTYsMTYsMCwwLDAsMTgsMlpNMjguNDUsMTIuNjMsMTUuMzEsMjUuNzYsNy41NSwxOGExLjQsMS40LDAsMCwxLDItMmw1Ljc4LDUuNzhMMjYuNDcsMTAuNjVh'@;
put 'MS40LDEuNCwwLDEsMSwyLDJaIi8+JykseS5DbHJTaGFwZUVycm9yU3RhbmRhcmQ9KDAsZy5jbHJJY29uU1ZHKSgnPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgY3g9IjE4IiBjeT0iMjYuMDYiIHI9IjEuMzMiLz5cbiAgICAgICAgICAgICAgICA8'@;
put 'cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTE4LDIyLjYxYTEsMSwwLDAsMS0xLTF2LTEyYTEsMSwwLDEsMSwyLDB2MTJBMSwxLDAsMCwxLDE4LDIyLjYxWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNs'@;
put 'ci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMTgsMzRBMTYsMTYsMCwxLDEsMzQsMTgsMTYsMTYsMCwwLDEsMTgsMzRaTTE4LDRBMTQsMTQsMCwxLDAsMzIsMTgsMTQsMTQsMCwwLDAsMTgsNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQt'@;
put 'cGF0aC0xIiBkPSJNMTgsMi4xYTE2LDE2LDAsMSwwLDE2LDE2QTE2LDE2LDAsMCwwLDE4LDIuMVpNMTYuNiw4LjhhMS40LDEuNCwwLDAsMSwyLjgsMHYxMmExLjQsMS40LDAsMCwxLTIuOCwwWk0xOCwyOC42YTEuOCwxLjgsMCwxLDEsMS44LTEuOEExLjgsMS44LDAsMCwxLDE4LDI4LjZaIi8+'@;
put 'JykseS5DbHJTaGFwZVdhcm5pbmdTdGFuZGFyZD0oMCxnLmNsckljb25TVkcpKCc8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBjeD0iMTgiIGN5PSIyNi4wNiIgcj0iMS4zMyIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1v'@;
put 'dXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMTgsMjIuNjFhMSwxLDAsMCwxLTEtMXYtMTJhMSwxLDAsMSwxLDIsMHYxMkExLDEsMCwwLDEsMTgsMjIuNjFaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMi'@;
put 'IGQ9Ik0xNS4wNjIwNzgyLDEuNjgxMTk2IEMxNS42Mjk4ODE5LDAuNjQ5MjY2MzU1IDE2LjcxMDkwOTEsMC4wMTAyMjE5Mzk2IDE3Ljg4NSwwLjAxMDIyMTkzOTYgQzE5LjA1OTA5MDksMC4wMTAyMjE5Mzk2IDIwLjE0MDExODEsMC42NDkyNjYzNTUgMjAuNzA4NjQzMywxLjY4MjUyMTI5IEwz'@;
put 'NC41OTg2NDQsMjcuMjQyNTIyNSBDMzUuMTQwNzc0NiwyOC4yNDAxMzk3IDM1LjExNzQzNDUsMjkuNDQ5NTM3MyAzNC41MzcyMTYxLDMwLjQyNTQ5NDMgQzMzLjk1Njk5NzcsMzEuNDAxNDUxNCAzMi45MDU2NzEsMzEuOTk5Njk4NCAzMS43NywzMiBMNC4wMjIzOTMyMywzMS45OTk3NDkyIEMy'@;
put 'Ljg3NDA5MDA5LDMyLjAyNTQ2OTkgMS43OTkwMjg0MywzMS40Mzc1NzUzIDEuMjAxMDYzMzUsMzAuNDU2OTEyNiBDMC42MDMwOTgyNjUsMjkuNDc2MjQ5OSAwLjU3Mjc3Nzg5OSwyOC4yNTEzMTc5IDEuMTIyMDc4MTgsMjcuMjQxMTk2IEwxNS4wNjIwNzgyLDEuNjgxMTk2IFogTTIuODc4NTA3'@;
put 'NjcsMjguMTk3NzI4MiBDMi42NzA2MDk2NiwyOC41ODAwMzc2IDIuNjgyMDk3NSwyOS4wNDQxNDIzIDIuOTA4NjU1NywyOS40MTU2OTc3IEMzLjEzNTIxMzksMjkuNzg3MjUzMiAzLjU0MjUzNTQsMzAuMDA5OTk1OSA0LDMwIEwzMS43Njk3MzQ0LDMwIEMzMi4xOTk5MTkxLDI5Ljk5OTg4NTgg'@;
put 'MzIuNTk4MjQ3OCwyOS43NzMyMjA4IDMyLjgxODA4MjEsMjkuNDAzNDQ4MiBDMzMuMDM3OTE2NCwyOS4wMzM2NzU3IDMzLjA0Njc1OTUsMjguNTc1NDU2NyAzMi44NDEzNTY3LDI4LjE5NzQ3ODcgTDE4Ljk1Mzg3MzksMi42NDIwODE5NSBDMTguNzM5NDIzNiwyLjI1MjM0NDM2IDE4LjMyOTg0'@;
put 'MTksMi4wMTAyMjE5NCAxNy44ODUsMi4wMTAyMjE5NCBDMTcuNDQwNjg4OSwyLjAxMDIyMTk0IDE3LjAzMTU1MzgsMi4yNTE3NjY5MiAxNi44MTY4OTQ2LDIuNjQwNjg3NTMgTDIuODc4NTA3NjcsMjguMTk3NzI4MiBaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNv'@;
put 'bGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTM0LjYsMjkuMjEsMjAuNzEsMy42NWEzLjIyLDMuMjIsMCwwLDAtNS42NiwwTDEuMTcsMjkuMjFBMy4yMiwzLjIyLDAsMCwwLDQsMzRIMzEuNzdhMy4yMiwzLjIyLDAsMCwwLDIuODMtNC43NVpNMTYuNiwxMGExLjQsMS40LDAsMCwxLDIuOCww'@;
put 'djEyYTEuNCwxLjQsMCwwLDEtMi44LDBaTTE4LDI5Ljg1YTEuOCwxLjgsMCwxLDEsMS44LTEuOEExLjgsMS44LDAsMCwxLDE4LDI5Ljg1WiIvPicpLHkuQ2xyU2hhcGVIZWxwSW5mbz0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjUuMzksMjUuNDVhMSwxLDAsMCwwLTEuMzguMjljLTEu'@;
put 'NDEsMi4xNi00LDQuODEtNi4zMSw1LjdzLTQuMTIuNTctNC44NCwwYy0uMzEtLjI3LTEuMTItMS0uNDMtMy40OS40Ni0xLjY2LDMuMzItOS40OCw0LTExLjM4bC0yLjE4LjI4Yy0uNjksMS44Ni0zLjI5LDguODQtMy43NiwxMC41OC0uNjgsMi40OS0uMzQsNC4zLDEuMDksNS41NkE1LjU5LDUu'@;
put 'NTksMCwwLDAsMTUsMzRhOS41Myw5LjUzLDAsMCwwLDMuNDUtLjdjMi43OS0xLjA5LDUuNzItNC4xMiw3LjI2LTYuNDdBMSwxLDAsMCwwLDI1LjM5LDI1LjQ1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTku'@;
put 'MywxMWE0LjUsNC41LDAsMSwwLTQuNS00LjVBNC41LDQuNSwwLDAsMCwxOS4zLDExWm0wLTdhMi41LDIuNSwwLDEsMS0yLjUsMi41QTIuNSwyLjUsMCwwLDEsMTkuMyw0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBk'@;
put 'PSJNMTEuODEsMTVjLjA2LDAsNi4yNy0uODIsNy43My0xLC42NS0uMSwxLjE0LDAsMS4zLjE1cy4yMS44LS4wNywxLjY4Yy0uNjEsMS44Ni0zLjY5LDExLTQuNTksMTMuNzFhOCw4LDAsMCwwLDEuMjktLjM4LDcuMzIsNy4zMiwwLDAsMCwxLjE1LS42QzE5Ljg1LDI1LDIyLjE1LDE4LjEsMjIu'@;
put 'NjcsMTYuNTJzLjM5LTIuNzgtLjMtMy42YTMuMTYsMy4xNiwwLDAsMC0zLjA4LS44M2MtMS40My4xNS03LjQ3Ljk0LTcuNzMsMWExLDEsMCwwLDAsLjI2LDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjIw'@;
put 'Ljc1IiBjeT0iNiIgcj0iNCIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNC44NCwyNi4yM2ExLDEsMCwwLDAtMS40LjI5LDE2LjYsMTYuNiwwLDAsMS0zLjUxLDMuNzdjLS4zMy4yNS0xLjU2LDEuMi0yLjA4LDEtLjM2'@;
put 'LS4xMS0uMTUtLjgyLS4wOC0xLjEybC41My0xLjU3Yy4yMi0uNjQsNC4wNS0xMiw0LjQ3LTEzLjMuNjItMS45LjM1LTMuNzctMi40OC0zLjMyLS43Ny4wOC04LjU4LDEuMDktOC43MiwxLjFhMSwxLDAsMCwwLC4xMywyczMtLjM5LDMuMzMtLjQyYS44OC44OCwwLDAsMSwuODUuNDQsMi40Nywy'@;
put 'LjQ3LDAsMCwxLS4wNywxLjcxYy0uMjYsMS00LjM3LDEyLjU4LTQuNSwxMy4yNWEyLjc4LDIuNzgsMCwwLDAsMS4xOCwzLDUsNSwwLDAsMCwzLjA4LjgzaDBhOC41Myw4LjUzLDAsMCwwLDMuMDktLjYyYzIuNDktMSw1LjA5LTMuNjYsNi40Ni01Ljc1QTEsMSwwLDAsMCwyNC44NCwyNi4yM1oi'@;
put 'IGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+JykseS5DbHJTaGFwZUJhcnM9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMiwyOUg0YTEsMSwwLDAsMSwwLTJIMzJhMSwxLDAsMCwx'@;
put 'LDAsMloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTMyLDE5SDRhMSwxLDAsMCwxLDAtMkgzMmExLDEsMCwwLDEsMCwyWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5l'@;
put 'IGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMzIsOUg0QTEsMSwwLDAsMSw0LDdIMzJhMSwxLDAsMCwxLDAsMloiLz4nKSx5LkNsclNoYXBlVXNlcj0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTgsMTdhNyw3LDAsMSwwLTctN0E3LDcsMCwwLDAsMTgsMTdaTTE4LDVhNSw1LDAsMSwx'@;
put 'LTUsNUE1LDUsMCwwLDEsMTgsNVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLjQ3LDI0LjM3YTE3LjE2LDE3LjE2LDAsMCwwLTI0LjkzLDBBMiwyLDAsMCwwLDUsMjUuNzRWMzFhMiwyLDAsMCwwLDIsMkgy'@;
put 'OWEyLDIsMCwwLDAsMi0yVjI1Ljc0QTIsMiwwLDAsMCwzMC40NywyNC4zN1pNMjksMzFIN1YyNS43M2ExNS4xNywxNS4xNywwLDAsMSwyMiwwaDBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMC40NywyNC4z'@;
put 'N2ExNy4xNiwxNy4xNiwwLDAsMC0yNC45MywwQTIsMiwwLDAsMCw1LDI1Ljc0VjMxYTIsMiwwLDAsMCwyLDJIMjlhMiwyLDAsMCwwLDItMlYyNS43NEEyLDIsMCwwLDAsMzAuNDcsMjQuMzdaTTI5LDMxSDdWMjUuNzNhMTUuMTcsMTUuMTcsMCwwLDEsMjIsMGgwWiIgY2xhc3M9ImNsci1pLW91'@;
put 'dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsMTdhNyw3LDAsMCwwLDQuNDUtMS42aC0uMjJBMy42OCwzLjY4LDAsMCwxLDIwLDE0LjZhNSw1LDAsMSwxLDEuMjQtOC40MmwxLTEuNzZBNyw3LDAsMSwwLDE4'@;
put 'LDE3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4'@;
put 'LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAuNDcsMjQuMzdhMTcuMTYsMTcu'@;
put 'MTYsMCwwLDAtMjQuOTMsMEEyLDIsMCwwLDAsNSwyNS43NFYzMWEyLDIsMCwwLDAsMiwySDI5YTIsMiwwLDAsMCwyLTJWMjUuNzRBMiwyLDAsMCwwLDMwLjQ3LDI0LjM3Wk0yOSwzMUg3VjI1LjczYTE1LjE3LDE1LjE3LDAsMCwxLDIyLDBoMFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRn'@;
put 'ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwxN2E3LDcsMCwwLDAsNi44NS01LjU2LDcuNCw3LjQsMCwwLDEtMi4yNC02LjY5QTcsNywwLDEsMCwxOCwxN1pNMTgsNWE1LDUsMCwxLDEtNSw1QTUsNSwwLDAsMSwxOCw1WiIgY2xh'@;
put 'c3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIGNsci1p'@;
put 'LWJhZGdlIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLjYxLDI0LjUyYTE3LjE2LDE3LjE2LDAsMCwwLTI1LjIyLDAsMS41MSwxLjUxLDAsMCwwLS4zOSwxdjZBMS41LDEuNSwwLDAsMCw2LjUsMzNoMjNBMS41LDEuNSwwLDAsMCwzMSwzMS41di02QTEuNTEsMS41MSwwLDAsMCwzMC42'@;
put 'MSwyNC41MloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIxOCIgY3k9IjEwIiByPSI3IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLjYx'@;
put 'LDI0LjUyYTE3LjE2LDE3LjE2LDAsMCwwLTI1LjIyLDAsMS41MSwxLjUxLDAsMCwwLS4zOSwxdjZBMS41LDEuNSwwLDAsMCw2LjUsMzNoMjNBMS41LDEuNSwwLDAsMCwzMSwzMS41di02QTEuNTEsMS41MSwwLDAsMCwzMC42MSwyNC41MloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBj'@;
put 'bHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsMTdhNyw3LDAsMCwwLDQuNDUtMS42aC0uMjJBMy42OCwzLjY4LDAsMCwxLDE5LDkuODlsMy4xNi01LjQ3QTcsNywwLDEsMCwxOCwxN1oiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBj'@;
put 'bHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEu'@;
put 'MTRaIiAgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMy0tYWxlcnRlZCBjbHItaS1hbGVydCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMC42MSwyNC41MmExNy4xNiwxNy4xNiwwLDAsMC0yNS4yMiwwLDEuNTEsMS41MSwwLDAsMC0uMzksMXY2QTEu'@;
put 'NSwxLjUsMCwwLDAsNi41LDMzaDIzQTEuNSwxLjUsMCwwLDAsMzEsMzEuNXYtNkExLjUxLDEuNTEsMCwwLDAsMzAuNjEsMjQuNTJaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwxN2E3'@;
put 'LDcsMCwwLDAsNi44NS01LjU2LDcuNCw3LjQsMCwwLDEtMi4yNC02LjY5QTcsNywwLDEsMCwxOCwxN1oiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xh'@;
put 'c3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+JykseS5DbHJTaGFwZUFuZ2xlPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMjkuNTIsMjIu'@;
put 'NTIsMTgsMTAuNiw2LjQ4LDIyLjUyYTEuNywxLjcsMCwwLDAsMi40NSwyLjM2TDE4LDE1LjQ5bDkuMDgsOS4zOWExLjcsMS43LDAsMCwwLDIuNDUtMi4zNloiLz4nKSx5LkNsclNoYXBlRm9sZGVyPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91'@;
put 'dGxpbmUtcGF0aC0xIiBkPSJNMzAsOUgxNi40MkwxNC4xMSw1LjgyQTIsMiwwLDAsMCwxMi40OSw1SDZBMiwyLDAsMCwwLDQsN1YyOWEyLDIsMCwwLDAsMiwySDMwYTIsMiwwLDAsMCwyLTJWMTFBMiwyLDAsMCwwLDMwLDlabTAsMjBINlYxM2g3LjMxYTIsMiwwLDAsMCwyLTJINlY3aDYuNDls'@;
put 'Mi42MSwzLjU5YTEsMSwwLDAsMCwuODEuNDFIMzBaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMzAsMTMuNVYyOUg2VjEzaDcuMzFhMiwyLDAsMCwwLDItMkg2VjdoNi40OWwy'@;
put 'LjYxLDMuNTlhMSwxLDAsMCwwLC44MS40MWg4LjUxYTcuNSw3LjUsMCwwLDEtMS4yOS0ySDE2LjQyTDE0LjExLDUuODJBMiwyLDAsMCwwLDEyLjQ5LDVINkEyLDIsMCwwLDAsNCw3VjI5YTIsMiwwLDAsMCwyLDJIMzBhMiwyLDAsMCwwLDItMlYxMy4yMkE3LjQ5LDcuNDksMCwwLDEsMzAsMTMu'@;
put 'NVoiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRs'@;
put 'aW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiBkPSJNMzAsMTUuNFYyOUg2VjEzaDcuMzFhMiwyLDAsMCwwLDItMkg2VjdoNi40OWwyLjYxLDMuNTlhMSwxLDAsMCwwLC44MS40MWgyLjczQTMuNjYsMy42NiwwLDAsMSwxOSw5Ljg5TDE5LjU2LDlIMTYuNDJMMTQu'@;
put 'MTEsNS44MkEyLDIsMCwwLDAsMTIuNDksNUg2QTIsMiwwLDAsMCw0LDdWMjlhMiwyLDAsMCwwLDIsMkgzMGEyLDIsMCwwLDAsMi0yVjE1LjRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0'@;
put 'ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFz'@;
put 'cz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzAsOUgxNi40MkwxNC4xMSw1LjgyQTIsMiwwLDAsMCwxMi40OSw1SDZBMiwyLDAsMCwwLDQsN1YyOWEyLDIsMCwwLDAsMiwySDMwYTIsMiwwLDAsMCwyLTJWMTFBMiwyLDAsMCwwLDMwLDlaTTYsMTFWN2g2LjQ5bDIuNzIs'@;
put 'NFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiBkPSJNMjIuMjMsMTUuNEEzLjY4LDMuNjgsMCwwLDEsMTksOS44OUwxOS41Niw5SDE2LjQyTDE0LjExLDUuODJBMiwyLDAsMCwwLDEyLjQ5'@;
put 'LDVINkEyLDIsMCwwLDAsNCw3VjI5YTIsMiwwLDAsMCwyLDJIMzBhMiwyLDAsMCwwLDItMlYxNS40Wk02LDExVjdoNi40OWwyLjcyLDRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCBjbHIt'@;
put 'aS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHIt'@;
put 'aS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMzAsMTMuNUE3LjUsNy41LDAsMCwxLDIzLjEzLDlIMTYuNDJMMTQuMTEsNS44MkEyLDIsMCwwLDAsMTIuNDksNUg2QTIsMiwwLDAsMCw0LDdWMjlhMiwyLDAsMCwwLDIsMkgzMGEyLDIsMCwwLDAsMi0yVjEz'@;
put 'LjIyQTcuNDksNy40OSwwLDAsMSwzMCwxMy41Wk02LDExVjdoNi40OWwyLjcyLDRaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIv'@;
put 'PicpLHkuQ2xyU2hhcGVGb2xkZXJPcGVuPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzUuMzIsMTMuNzRBMS43MSwxLjcxLDAsMCwwLDMzLjg3LDEzSDExLjE3YTIuNTksMi41OSwwLDAsMC0yLjI1LDEuNTIs'@;
put 'MSwxLDAsMCwwLDAsLjE0TDYsMjVWN2g2LjQ5bDIuNjEsMy41OWExLDEsMCwwLDAsLjgxLjQxSDMyYTIsMiwwLDAsMC0yLTJIMTYuNDJMMTQuMTEsNS44MkEyLDIsMCwwLDAsMTIuNDksNUg2QTIsMiwwLDAsMCw0LDdWMjkuNjlBMS4zNywxLjM3LDAsMCwwLDUuNDEsMzFIMzAuMzRhMSwxLDAs'@;
put 'MCwwLDEtLjcybDQuMTktMTUuMUExLjY0LDEuNjQsMCwwLDAsMzUuMzIsMTMuNzRaTTI5LjU1LDI5SDYuOWwzLjg4LTEzLjgxYS42Ni42NiwwLDAsMSwuMzgtLjI0SDMzLjQ5WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0'@;
put 'bGluZS1wYXRoLTEtLWJhZGdlZCIgZD0iTTM1LjMyLDEzLjc0QTEuNzEsMS43MSwwLDAsMCwzMy44NywxM0gxMS4xN2EyLjU5LDIuNTksMCwwLDAtMi4yNSwxLjUyLDEsMSwwLDAsMCwwLC4xNEw2LDI1VjdoNi40OWwyLjYxLDMuNTlhMSwxLDAsMCwwLC44MS40MWg4LjUyYTcuNDksNy40OSww'@;
put 'LDAsMS0xLjI5LTJIMTYuNDJMMTQuMTEsNS44MkEyLDIsMCwwLDAsMTIuNDksNUg2QTIsMiwwLDAsMCw0LDdWMjkuNjlBMS4zNywxLjM3LDAsMCwwLDUuNDEsMzFIMzAuMzRhMSwxLDAsMCwwLDEtLjcybDQuMTktMTUuMUExLjY0LDEuNjQsMCwwLDAsMzUuMzIsMTMuNzRaTTI5LjU1LDI5SDYu'@;
put 'OWwzLjg4LTEzLjgxYS42Ni42NiwwLDAsMSwuMzgtLjI0SDMzLjQ5WiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+XG4g'@;
put 'ICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0zMy42OCwxNS40aC0uM0wyOS41NSwyOUg2LjlsMy44OC0xMy44MWEuNjYuNjYsMCwwLDEsLjM4LS4yNGg5LjQyQTMuNjcsMy42NywwLDAs'@;
put 'MSwxOSwxMy41NmEzLjYzLDMuNjMsMCwwLDEtLjI2LS41NkgxMS4xN2EyLjU5LDIuNTksMCwwLDAtMi4yNSwxLjUyLDEsMSwwLDAsMCwwLC4xNEw2LDI1VjdoNi40OWwyLjYxLDMuNTlhMSwxLDAsMCwwLC44MS40MWgyLjczQTMuNjYsMy42NiwwLDAsMSwxOSw5Ljg5TDE5LjU2LDlIMTYuNDJM'@;
put 'MTQuMTEsNS44MkEyLDIsMCwwLDAsMTIuNDksNUg2QTIsMiwwLDAsMCw0LDdWMjkuNjlBMS4zNywxLjM3LDAsMCwwLDUuNDEsMzFIMzAuMzRhMSwxLDAsMCwwLDEtLjcybDQuMTktMTUuMWExLjY4LDEuNjgsMCwwLDAsLjA3LS4zMkEzLjY3LDMuNjcsMCwwLDEsMzMuNjgsMTUuNFoiLz5cbiAg'@;
put 'ICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwz'@;
put 'NC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zNS4zMiwxMy43NEExLjcxLDEuNzEsMCwwLDAsMzMuODcsMTNIMTEuMTdhMi41OSwy'@;
put 'LjU5LDAsMCwwLTIuMjUsMS41MiwxLDEsMCwwLDAsMCwuMTRMNiwyNVY3aDYuNDlsMi42MSwzLjU5YTEsMSwwLDAsMCwuODEuNDFIMzJhMiwyLDAsMCwwLTItMkgxNi40MkwxNC4xMSw1LjgyQTIsMiwwLDAsMCwxMi40OSw1SDZBMiwyLDAsMCwwLDQsN1YyOS42OUExLjM3LDEuMzcsMCwwLDAs'@;
put 'NS40MSwzMUgzMC4zNGExLDEsMCwwLDAsMS0uNzJsNC4xOS0xNS4xQTEuNjQsMS42NCwwLDAsMCwzNS4zMiwxMy43NFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiBkPSJNMzMuNjgsMTUu'@;
put 'NEgyMi4yM0EzLjY5LDMuNjksMCwwLDEsMTksMTMuNTZhMy42MywzLjYzLDAsMCwxLS4yNi0uNTZIMTEuMTdhMi41OSwyLjU5LDAsMCwwLTIuMjUsMS41MiwxLDEsMCwwLDAsMCwuMTRMNiwyNVY3aDYuNDlsMi42MSwzLjU5YTEsMSwwLDAsMCwuODEuNDFoMi43M0EzLjY2LDMuNjYsMCwwLDEs'@;
put 'MTksOS44OUwxOS41Niw5SDE2LjQyTDE0LjExLDUuODJBMiwyLDAsMCwwLDEyLjQ5LDVINkEyLDIsMCwwLDAsNCw3VjI5LjY5QTEuMzcsMS4zNywwLDAsMCw1LjQxLDMxSDMwLjM0YTEsMSwwLDAsMCwxLS43Mmw0LjE5LTE1LjFhMS42OCwxLjY4LDAsMCwwLC4wNy0uMzJBMy42NywzLjY3LDAs'@;
put 'MCwxLDMzLjY4LDE1LjRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4'@;
put 'QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMzUuMzIsMTMuNzRBMS43'@;
put 'MSwxLjcxLDAsMCwwLDMzLjg3LDEzSDExLjE3YTIuNTksMi41OSwwLDAsMC0yLjI1LDEuNTIsMSwxLDAsMCwwLDAsLjE0TDYsMjVWN2g2LjQ5bDIuNjEsMy41OWExLDEsMCwwLDAsLjgxLjQxaDguNTJhNy40OSw3LjQ5LDAsMCwxLTEuMzEtMkgxNi40MkwxNC4xMSw1LjgyQTIsMiwwLDAsMCwx'@;
put 'Mi40OSw1SDZBMiwyLDAsMCwwLDQsN1YyOS42OUExLjM3LDEuMzcsMCwwLDAsNS40MSwzMUgzMC4zNGExLDEsMCwwLDAsMS0uNzJsNC4xOS0xNS4xQTEuNjQsMS42NCwwLDAsMCwzNS4zMiwxMy43NFoiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFk'@;
put 'Z2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+JykseS5DbHJTaGFwZUJlbGw9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMi41MSwyNy44'@;
put 'M0ExNC40LDE0LjQsMCwwLDEsMzAsMjQuOWExMi42MywxMi42MywwLDAsMS0xLjM1LTQuODFWMTUuMTVBMTAuODEsMTAuODEsMCwwLDAsMTkuMjEsNC40VjMuMTFhMS4zMywxLjMzLDAsMSwwLTIuNjcsMFY0LjQyQTEwLjgxLDEwLjgxLDAsMCwwLDcuMjEsMTUuMTV2NC45NEExMi42MywxMi42'@;
put 'MywwLDAsMSw1Ljg2LDI0LjlhMTQuNCwxNC40LDAsMCwxLTIuNDcsMi45MywxLDEsMCwwLDAtLjM0Ljc1djEuMzZhMSwxLDAsMCwwLDEsMWgyNy44YTEsMSwwLDAsMCwxLTFWMjguNThBMSwxLDAsMCwwLDMyLjUxLDI3LjgzWk01LjEzLDI4Ljk0YTE2LjE3LDE2LjE3LDAsMCwwLDIuNDQtMywx'@;
put 'NC4yNCwxNC4yNCwwLDAsMCwxLjY1LTUuODVWMTUuMTVhOC43NCw4Ljc0LDAsMSwxLDE3LjQ3LDB2NC45NGExNC4yNCwxNC4yNCwwLDAsMCwxLjY1LDUuODUsMTYuMTcsMTYuMTcsMCwwLDAsMi40NCwzWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNs'@;
put 'ci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMTgsMzQuMjhBMi42NywyLjY3LDAsMCwwLDIwLjU4LDMySDE1LjMyQTIuNjcsMi42NywwLDAsMCwxOCwzNC4yOFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0x'@;
put 'LS1iYWRnZWQiIGQ9Ik0xOCwzNC4yOEEyLjY3LDIuNjcsMCwwLDAsMjAuNTgsMzJIMTUuMzJBMi42NywyLjY3LDAsMCwwLDE4LDM0LjI4WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIg'@;
put 'ZD0iTTMyLjUxLDI3LjgzQTE0LjQsMTQuNCwwLDAsMSwzMCwyNC45YTEyLjYzLDEyLjYzLDAsMCwxLTEuMzUtNC44MVYxNS4xNWExMC45MiwxMC45MiwwLDAsMC0uMTYtMS43OSw3LjQ0LDcuNDQsMCwwLDEtMi4yNC0uODQsOC44OSw4Ljg5LDAsMCwxLC40LDIuNjR2NC45NGExNC4yNCwxNC4y'@;
put 'NCwwLDAsMCwxLjY1LDUuODUsMTYuMTcsMTYuMTcsMCwwLDAsMi40NCwzSDUuMTNhMTYuMTcsMTYuMTcsMCwwLDAsMi40NC0zLDE0LjI0LDE0LjI0LDAsMCwwLDEuNjUtNS44NVYxNS4xNUE4LjgsOC44LDAsMCwxLDE4LDYuMzFhOC42MSw4LjYxLDAsMCwxLDQuNzYsMS40NEE3LjQ5LDcuNDks'@;
put 'MCwwLDEsMjIuNSw2YzAtLjIxLDAtLjQyLDAtLjYzYTEwLjU4LDEwLjU4LDAsMCwwLTMuMzItMVYzLjExYTEuMzMsMS4zMywwLDEsMC0yLjY3LDBWNC40MkExMC44MSwxMC44MSwwLDAsMCw3LjIxLDE1LjE1djQuOTRBMTIuNjMsMTIuNjMsMCwwLDEsNS44NiwyNC45YTE0LjQsMTQuNCwwLDAs'@;
put 'MS0yLjQ3LDIuOTMsMSwxLDAsMCwwLS4zNC43NXYxLjM2YTEsMSwwLDAsMCwxLDFoMjcuOGExLDEsMCwwLDAsMS0xVjI4LjU4QTEsMSwwLDAsMCwzMi41MSwyNy44M1oiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGlu'@;
put 'ZS1wYXRoLTEtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zMi44NSwyOC4xM2wtLjM0LS4zQTE0LjM3LDE0LjM3LDAsMCwxLDMwLDI0Ljlh'@;
put 'MTIuNjMsMTIuNjMsMCwwLDEtMS4zNS00LjgxVjE1LjE1QTEwLjgxLDEwLjgxLDAsMCwwLDE5LjIxLDQuNFYzLjExYTEuMzMsMS4zMywwLDEsMC0yLjY3LDBWNC40MkExMC44MSwxMC44MSwwLDAsMCw3LjIxLDE1LjE1djQuOTRBMTIuNjMsMTIuNjMsMCwwLDEsNS44NiwyNC45YTE0LjQsMTQu'@;
put 'NCwwLDAsMS0yLjQ3LDIuOTNsLS4zNC4zdjIuODJIMzIuODVaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTTE1LjMyLDMyYTIuNjUsMi42NSwwLDAsMCw1LjI1LDBaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGgg'@;
put 'Y2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0xOCwzNC4yOEEyLjY3LDIuNjcsMCwwLDAsMjAuNTgsMzJIMTUuMzJBMi42NywyLjY3LDAsMCwwLDE4LDM0LjI4WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1z'@;
put 'b2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIiBkPSJNMzIuODUsMjguMTNsLS4zNC0uM0ExNC4zNywxNC4zNywwLDAsMSwzMCwyNC45YTEyLjYzLDEyLjYzLDAsMCwxLTEuMzUtNC44MVYxNS4xNWExMC45MiwxMC45MiwwLDAsMC0uMTYtMS43OUE3LjUsNy41LDAsMCwx'@;
put 'LDIyLjUsNmMwLS4yMSwwLS40MiwwLS42M2ExMC41NywxMC41NywwLDAsMC0zLjMyLTFWMy4xMWExLjMzLDEuMzMsMCwxLDAtMi42NywwVjQuNDJBMTAuODEsMTAuODEsMCwwLDAsNy4yMSwxNS4xNXY0Ljk0QTEyLjYzLDEyLjYzLDAsMCwxLDUuODYsMjQuOWExNC40LDE0LjQsMCwwLDEtMi40'@;
put 'NywyLjkzbC0uMzQuM3YyLjgySDMyLjg1WiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz4nKSx5LkNsclNoYXBlSW1hZ2U9KDAs'@;
put 'Zy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMyLDRINEEyLDIsMCwwLDAsMiw2VjMwYTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlY2QTIsMiwwLDAsMCwzMiw0Wk00LDMwVjZIMzJWMzBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAg'@;
put 'ICAgICAgPHBhdGggZD0iTTguOTIsMTRhMywzLDAsMSwwLTMtM0EzLDMsMCwwLDAsOC45MiwxNFptMC00LjZBMS42LDEuNiwwLDEsMSw3LjMzLDExLDEuNiwxLjYsMCwwLDEsOC45Miw5LjQxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgICAgICAg'@;
put 'ICAgIDxwYXRoIGQ9Ik0yMi43OCwxNS4zN2wtNS40LDUuNC00LTRhMSwxLDAsMCwwLTEuNDEsMEw1LjkyLDIyLjl2Mi44M2w2Ljc5LTYuNzlMMTYsMjIuMThsLTMuNzUsMy43NUgxNWw4LjQ1LTguNDVMMzAsMjRWMjEuMThsLTUuODEtNS44MUExLDEsMCwwLDAsMjIuNzgsMTUuMzdaIiBjbGFz'@;
put 'cz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTExLjkzLDExYTMsMywwLDEsMC0zLDNBMywzLDAsMCwwLDExLjkzLDExWm0tNC42LDBhMS42LDEuNiwwLDEsMSwxLjYsMS42QTEuNiwxLjYsMCwwLDEsNy4zMywxMVoiIGNsYXNz'@;
put 'PSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE3LjM4LDIwLjc3bC00LTRhMSwxLDAsMCwwLTEuNDEsMEw1LjkyLDIyLjl2Mi44M2w2Ljc5LTYuNzlMMTYsMjIuMThsLTMuNzUsMy43NUgxNWw4LjQ1'@;
put 'LTguNDVMMzAsMjRWMjEuMThsLTUuODEtNS44MWExLDEsMCwwLDAtMS40MSwwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIsMTMuMjJWMzBINFY2SDIyLjVhNy40OSw3LjQ5LDAs'@;
put 'MCwxLC4yOC0ySDRBMiwyLDAsMCwwLDIsNlYzMGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMTIuMzRBNy40NSw3LjQ1LDAsMCwxLDMyLDEzLjIyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIi8+XG4gICAgICAgICAg'@;
put 'ICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLDRINEEyLDIsMCwwLDAsMiw2VjMwYTIsMiwwLDAsMCwyLDJI'@;
put 'MzJhMiwyLDAsMCwwLDItMlY2QTIsMiwwLDAsMCwzMiw0Wk04LjkyLDhhMywzLDAsMSwxLTMsM0EzLDMsMCwwLDEsOC45Miw4Wk02LDI3VjIyLjlsNi02LjA4YTEsMSwwLDAsMSwxLjQxLDBMMTYsMTkuMzUsOC4zMiwyN1ptMjQsMEgxMS4xNWw2LjIzLTYuMjMsNS40LTUuNGExLDEsMCwwLDEs'@;
put 'MS40MSwwTDMwLDIxLjE4WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLDEzLjVBNy40OCw3LjQ4LDAsMCwxLDIyLjc4LDRINEEyLDIsMCwwLDAsMiw2VjMwYTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYx'@;
put 'Mi4zNEE3LjQ2LDcuNDYsMCwwLDEsMzAsMTMuNVpNOC45Miw4YTMsMywwLDEsMS0zLDNBMywzLDAsMCwxLDguOTIsOFpNNiwyN1YyMi45bDYtNi4wOGExLDEsMCwwLDEsMS40MSwwTDE2LDE5LjM1LDguMzIsMjdabTI0LDBIMTEuMTVsNi4yMy02LjIzLDUuNC01LjRhMSwxLDAsMCwxLDEuNDEs'@;
put 'MEwzMCwyMS4xOFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2Vk'@;
put 'IGNsci1pLWJhZGdlIi8+JykseS5DbHJTaGFwZUNsb3VkPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMjcuMTQsMzNIMTAuNjJDNS42NywzMywxLDI4LjE5LDEsMjMuMWExMCwxMCwwLDAsMSw4LTkuNzUsMTAu'@;
put 'MTksMTAuMTksMCwwLDEsMjAuMzMsMS4wNkExMC4wNywxMC4wNywwLDAsMSwyOSwxNi42NmE4LjI5LDguMjksMCwwLDEsNiw4QzM1LDI5LjEsMzEuMzMsMzMsMjcuMTQsMzNaTTE5LjA5LDYuMjNhOC4yNCw4LjI0LDAsMCwwLTguMTksOGwwLC44Ny0uODYuMUE3Ljk0LDcuOTQsMCwwLDAsMywy'@;
put 'My4xYzAsNCwzLjc3LDcuOSw3LjYyLDcuOUgyNy4xNEMzMC4yMSwzMSwzMywyOCwzMywyNC42NWE2LjMxLDYuMzEsMCwwLDAtNS4zNy02LjI2bC0xLjE4LS4xOC4zOS0xLjEzQTguMTgsOC4xOCwwLDAsMCwxOS4wOSw2LjIzWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHIt'@;
put 'aS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgZD0iTTI5LDE2LjY2YTEwLjA3LDEwLjA3LDAsMCwwLC4yNS0yLjI0YzAtLjMzLDAtLjY1LDAtMWE3LjQ1LDcuNDUsMCwwLDEtMi4xLS41NCw4LDgsMCwwLDEtLjMsNC4xNmwtLjM5LDEuMTMsMS4xOC4xOGE2'@;
put 'LjMxLDYuMzEsMCwwLDEsNS4zNyw2LjI2QzMyLjk1LDI4LDMwLjE2LDMxLDI3LjA5LDMxSDEwLjU3Yy0zLjg0LDAtNy42Mi0zLjkxLTcuNjItNy45YTcuOTQsNy45NCwwLDAsMSw3LTcuODlsLjg2LS4xLDAtLjg3YTguMjQsOC4yNCwwLDAsMSw4LjE5LThBOC4xMyw4LjEzLDAsMCwxLDIyLjU4'@;
put 'LDdhNy41Myw3LjUzLDAsMCwxLS4wOC0xLDcuNTEsNy41MSwwLDAsMSwuMDktMS4xMkExMC4xMywxMC4xMywwLDAsMCwxOSw0LjIzLDEwLjI2LDEwLjI2LDAsMCwwLDguOTEsMTMuMzZhMTAsMTAsMCwwLDAtOCw5Ljc1YzAsNS4wOSw0LjY3LDkuOSw5LjYyLDkuOUgyNy4wOWM0LjE5LDAsNy44'@;
put 'Ni0zLjksNy44Ni04LjM1QTguMjksOC4yOSwwLDAsMCwyOSwxNi42NloiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxu'@;
put 'ICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiBkPSJNMjksMTYuNjZhMTAuMTQsMTAuMTQsMCwwLDAsLjItMS4zaC0yYTguMjgsOC4yOCwwLDAsMS0uMzcsMS43MmwtLjM5LDEuMTMsMS4xOC4x'@;
put 'OGE2LjMxLDYuMzEsMCwwLDEsNS4zNyw2LjI2QzMyLjk1LDI4LDMwLjE2LDMxLDI3LjA5LDMxSDEwLjU3Yy0zLjg0LDAtNy42Mi0zLjkxLTcuNjItNy45YTcuOTQsNy45NCwwLDAsMSw3LTcuODlsLjg2LS4xLDAtLjg3QTguMTYsOC4xNiwwLDAsMSwyMSw2LjQ3bDEtMS44QTEwLjE5LDEwLjE5'@;
put 'LDAsMCwwLDguOTEsMTMuMzZhMTAsMTAsMCwwLDAtOCw5Ljc1YzAsNS4wOSw0LjY3LDkuOSw5LjYyLDkuOUgyNy4wOWM0LjE5LDAsNy44Ni0zLjksNy44Ni04LjM1QTguMjksOC4yOSwwLDAsMCwyOSwxNi42NloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGlu'@;
put 'ZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44'@;
put 'NSwxLjE0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0yOSwxNi42NmExMC4wNywxMC4wNywwLDAsMCwuMjUtMi4yNEExMC4xOSwxMC4xOSwwLDAsMCw4LjkxLDEzLjM2LDEwLDEwLDAsMCwwLDEsMjMuMUMxLDI4'@;
put 'LjE5LDUuNjIsMzMsMTAuNTcsMzNIMjcuMDlDMzEuMjgsMzMsMzUsMjkuMSwzNSwyNC42NUE4LjI5LDguMjksMCwwLDAsMjksMTYuNjZaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0y'@;
put 'OSwxNi42NmExMC4wNywxMC4wNywwLDAsMCwuMjUtMi4yNGMwLS4zMywwLS42NSwwLTFhNy40NCw3LjQ0LDAsMCwxLTYuNi04LjU4QTEwLjEzLDEwLjEzLDAsMCwwLDE5LDQuMjMsMTAuMjYsMTAuMjYsMCwwLDAsOC45MSwxMy4zNiwxMCwxMCwwLDAsMCwxLDIzLjFDMSwyOC4xOSw1LjYyLDMz'@;
put 'LDEwLjU3LDMzSDI3LjA5QzMxLjI4LDMzLDM1LDI5LjEsMzUsMjQuNjVBOC4yOSw4LjI5LDAsMCwwLDI5LDE2LjY2WiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4'@;
put 'PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiBkPSJNMjksMTYuNjZhMTAuMTUsMTAuMTUsMCwwLDAsLjItMS4yNmgtN0EzLjY4LDMuNjgsMCwwLDEsMTksOS44'@;
put 'OWwzLTUuMjFBMTAuMTksMTAuMTksMCwwLDAsOC45MSwxMy4zNiwxMCwxMCwwLDAsMCwxLDIzLjFDMSwyOC4xOSw1LjYyLDMzLDEwLjU3LDMzSDI3LjA5QzMxLjI4LDMzLDM1LDI5LjEsMzUsMjQuNjVBOC4yOSw4LjI5LDAsMCwwLDI5LDE2LjY2WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRo'@;
put 'IGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4'@;
put 'LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiLz4nKSx5LkNsclNoYXBlRWxsaXBzaXNIb3Jpem9udGFsPSgwLGcuY2xySWNvblNWRykoJzxjaXJjbGUgY3g9IjMxLjEiIGN5PSIxOCIgcj0iMi45IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAg'@;
put 'ICAgIDxjaXJjbGUgY3g9IjE4IiBjeT0iMTgiIHI9IjIuOSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSI0LjkiIGN5PSIxOCIgcj0iMi45IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBh'@;
put 'dGgtMyIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMxLjEiIGN5PSIxOCIgcj0iMi45IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIxOCIgY3k9IjE4IiByPSIyLjkiIGNs'@;
put 'YXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjQuOSIgY3k9IjE4IiByPSIyLjkiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIg'@;
put 'Lz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCBjbHItaS1iYWRnZSIgLz4nKSx5LkNsclNoYXBlRWxsaXBzaXNWZXJ0aWNhbD0oMCxnLmNsckljb25TVkcp'@;
put 'KCc8Y2lyY2xlIGN4PSIxOCIgY3k9IjQuOSIgcj0iMi45IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjE4IiBjeT0iMTgiIHI9IjIuOSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRo'@;
put 'LTIiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIxOCIgY3k9IjMxLjEiIHI9IjIuOSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIxOCIgY3k9IjQuOSIgcj0iMi45IiBjbGFzcz0iY2xyLWktb3V0bGlu'@;
put 'ZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIxOCIgY3k9IjE4IiByPSIyLjkiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxj'@;
put 'aXJjbGUgY3g9IjE4IiBjeT0iMzEuMSIgcj0iMi45IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiICBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2Vk'@;
put 'IGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+JykseS5DbHJTaGFwZUZpbHRlckdyaWQ9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xNSwyNS44NmwyLDFWMjAuMjdhMSwxLDAs'@;
put 'MCwwLS4yOS0uN0wxMC4yMywxM0gyNS43OWwtNi40Nyw2LjU3YTEsMSwwLDAsMC0uMjkuN0wxOSwyOGwyLDFWMjAuNjhMMjcuNTgsMTRBMS40NiwxLjQ2LDAsMCwwLDI4LDEzVjEyYTEsMSwwLDAsMC0xLTFIOWExLDEsMCwwLDAtMSwxdjFhMS40NiwxLjQ2LDAsMCwwLC40MiwxTDE1LDIwLjY4'@;
put 'WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik04LDExdjEuMTJhLjUuNSwwLDAsMCwuMTUuMzVsNy4yOCw3LjM2YS41LjUsMCwwLDEsLjE1LjM1djYuODlhLjUuNSwwLDAsMCwuMjguNDVsMy45NSwxLjQxYS41LjUs'@;
put 'MCwwLDAsLjcyLS40NWwwLTguMzlhLjU0LjU0LDAsMCwxLC4xOC0uMzVsNy4xMi03LjI1YS41LjUsMCwwLDAsLjE1LS4zNVYxMVoiLz4nKSx5LkNsclNoYXBlRmlsdGVyR3JpZENpcmNsZT0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5l'@;
put 'LXBhdGgtMSIgZD0iTTE1LDI1Ljg2bDIsMVYyMC4yN2ExLDEsMCwwLDAtLjI5LS43TDEwLjIzLDEzSDI1Ljc5bC02LjQ3LDYuNTdhMSwxLDAsMCwwLS4yOS43TDE5LDI4bDIsMVYyMC42OEwyNy41OCwxNEExLjQ2LDEuNDYsMCwwLDAsMjgsMTNWMTJhMSwxLDAsMCwwLTEtMUg5YTEsMSwwLDAs'@;
put 'MC0xLDF2MWExLjQ2LDEuNDYsMCwwLDAsLjQyLDFMMTUsMjAuNjhaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJabTAsMzBBMTQsMTQs'@;
put 'MCwxLDEsMzIsMTgsMTQsMTQsMCwwLDEsMTgsMzJaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTE4LDJBMTYsMTYsMCwxLDAsMzQsMTgsMTYsMTYsMCwwLDAsMTgsMlptMCwzMEExNCwxNCwwLDEsMSwzMiwxOCwx'@;
put 'NCwxNCwwLDAsMSwxOCwzMloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNOCwxMXYxLjEyYS41LjUsMCwwLDAsLjE1LjM1bDcuMjgsNy4zNmEuNS41LDAsMCwxLC4xNS4zNXY2Ljg5YS41LjUsMCwwLDAsLjI4LjQ1'@;
put 'bDMuOTUsMS40MWEuNS41LDAsMCwwLC43Mi0uNDVsMC04LjM5YS41NC41NCwwLDAsMSwuMTgtLjM1bDcuMTItNy4yNWEuNS41LDAsMCwwLC4xNS0uMzVWMTFaIi8+JykseS5DbHJTaGFwZVZtQnVnPSgwLGcuY2xySWNvblNWRykoJzxyZWN0IHdpZHRoPSIzNiIgaGVpZ2h0PSIzNiIgcng9IjMi'@;
put 'IGZpbGw9IiNmZmZmZmYiIG9wYWNpdHk9IjAuMTUiIHN0eWxlPSJpc29sYXRpb246aXNvbGF0ZSIvPjxwYXRoIGQ9Ik0zLjc5LDE0LjgzYTEuMDksMS4wOSwwLDAsMC0xLjQ3LS41NiwxLjA5LDEuMDksMCwwLDAtLjU0LDEuNDlsMi40Nyw1LjRjLjM5Ljg1LjgsMS4yOSwxLjU3LDEuMjlTNywy'@;
put 'Miw3LjM5LDIxLjE2bDIuMTctNC43N2EuMzMuMzMsMCwwLDEsLjMxLS4yLjM1LjM1LDAsMCwxLC4zNS4zNXY0LjYxYTEuMTUsMS4xNSwwLDAsMCwxLjE0LDEuMywxLjE3LDEuMTcsMCwwLDAsMS4xNy0xLjNWMTcuMzhhMS4xNSwxLjE1LDAsMCwxLDEuMjItMS4yLDEuMTMsMS4xMywwLDAsMSwx'@;
put 'LjE4LDEuMnYzLjc3YTEuMTcsMS4xNywwLDEsMCwyLjMyLDBWMTcuMzhhMS4xNSwxLjE1LDAsMCwxLDEuMjItMS4yLDEuMTMsMS4xMywwLDAsMSwxLjE4LDEuMnYzLjc3YTEuMTYsMS4xNiwwLDEsMCwyLjMxLDBWMTYuODZhMi42OSwyLjY5LDAsMCwwLTIuNzgtMi42OSwzLjU3LDMuNTcsMCww'@;
put 'LDAtMi40NywxLjA1LDIuNzUsMi43NSwwLDAsMC0yLjM4LTEuMDVBMy45MywzLjkzLDAsMCwwLDEyLDE1LjIyYTIuODIsMi44MiwwLDAsMC0yLjA4LTEuMDVBMi41NSwyLjU1LDAsMCwwLDcuNCwxNS44OUw1LjgyLDE5LjYzbC0yLTQuOCIgZmlsbD0iI2ZmZmZmZiIvPjxwYXRoIGQ9Ik0zMywx'@;
put 'NC4xOEExLjE0LDEuMTQsMCwwLDAsMzEuOSwxNWwtMS4xOSwzLjczTDI5LjUsMTUuMDVhMS4xOCwxLjE4LDAsMCwwLTEuMTUtLjg3aC0uMWExLjIsMS4yLDAsMCwwLTEuMTUuODdsLTEuMTksMy43MS0xLjE4LTMuNzFhMS4xNSwxLjE1LDAsMCwwLTEuMTEtLjg3LDEuMDgsMS4wOCwwLDAsMC0x'@;
put 'LjEyLDEuMDcsMS42OCwxLjY4LDAsMCwwLC4xLjU0bDIsNS43YTEuMjcsMS4yNywwLDAsMCwxLjI3LDEsMS4yNCwxLjI0LDAsMCwwLDEuMi0uOTNsMS4yLTMuNjQsMS4yLDMuNjRhMS4yNSwxLjI1LDAsMCwwLDEuMjYuOTNBMS4yNywxLjI3LDAsMCwwLDMyLDIxLjVMMzQsMTUuNzNhMS43Nywx'@;
put 'Ljc3LDAsMCwwLC4wOC0uNDhBMS4wNywxLjA3LDAsMCwwLDMzLDE0LjE4WiIgZmlsbD0iI2ZmZmZmZiIvPicpLHkuQ2xyU2hhcGVTZWFyY2g9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xNi4zMyw1LjA1QTEw'@;
put 'Ljk1LDEwLjk1LDAsMSwxLDUuMzksMTYsMTEsMTEsMCwwLDEsMTYuMzMsNS4wNW0wLTIuMDVhMTMsMTMsMCwxLDAsMTMsMTMsMTMsMTMsMCwwLDAtMTMtMTNaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0z'@;
put 'NSwzMy4yOWwtNy4zNy03LjQyLTEuNDIsMS40MSw3LjM3LDcuNDJBMSwxLDAsMSwwLDM1LDMzLjI5WiIvPicpLHkuQ2xyU2hhcGVWaWV3Q29sdW1ucz0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMxLDVINUEy'@;
put 'LDIsMCwwLDAsMyw3VjI5YTIsMiwwLDAsMCwyLDJIMzFhMiwyLDAsMCwwLDItMlY3QTIsMiwwLDAsMCwzMSw1Wk0xMywyOUg1VjdoOFptMTAsMEgxNVY3aDhaIi8+JykseS5DbHJTaGFwZUFuZ2xlRG91YmxlPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNs'@;
put 'ci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMjksMTkuNDFhMSwxLDAsMCwxLS43MS0uMjlMMTgsOC44Myw3LjcxLDE5LjEyYTEsMSwwLDAsMS0xLjQxLTEuNDFMMTgsNiwyOS43MSwxNy43MUExLDEsMCwwLDEsMjksMTkuNDFaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1p'@;
put 'LW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0yOSwzMC40MWExLDEsMCwwLDEtLjcxLS4yOUwxOCwxOS44Myw3LjcxLDMwLjEyYTEsMSwwLDAsMS0xLjQxLTEuNDFMMTgsMTcsMjkuNzEsMjguNzFBMSwxLDAsMCwxLDI5LDMwLjQxWiIvPicpLHkuQ2xyU2hhcGVDYWxlbmRhcj0o'@;
put 'MCxnLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMyLjI1LDZIMjlWOGgzVjMwSDRWOEg3VjZIMy43NUExLjc4LDEuNzgsMCwwLDAsMiw3LjgxVjMwLjE5QTEuNzgsMS43OCwwLDAsMCwzLjc1LDMyaDI4LjVBMS43OCwx'@;
put 'Ljc4LDAsMCwwLDM0LDMwLjE5VjcuODFBMS43OCwxLjc4LDAsMCwwLDMyLjI1LDZaIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIHg9IjgiIHk9IjE0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAg'@;
put 'ICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIHg9IjE0IiB5PSIxNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiB4PSIyMCIg'@;
put 'eT0iMTQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgeD0iMjYiIHk9IjE0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNs'@;
put 'ci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIHg9IjgiIHk9IjE5IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTciIHg9IjE0IiB5PSIxOSIgd2lkdGg9IjIiIGhlaWdo'@;
put 'dD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC04IiB4PSIyMCIgeT0iMTkiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRs'@;
put 'aW5lLXBhdGgtOSIgeD0iMjYiIHk9IjE5IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEwIiB4PSI4IiB5PSIyNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAg'@;
put 'ICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xMSIgeD0iMTQiIHk9IjI0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEyIiB4PSIyMCIg'@;
put 'eT0iMjQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTMiIHg9IjI2IiB5PSIyNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJj'@;
put 'bHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xNCIgZD0iTTEwLDEwYTEsMSwwLDAsMCwxLTFWM0ExLDEsMCwwLDAsOSwzVjlBMSwxLDAsMCwwLDEwLDEwWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xNSIg'@;
put 'ZD0iTTI2LDEwYTEsMSwwLDAsMCwxLTFWM2ExLDEsMCwwLDAtMiwwVjlBMSwxLDAsMCwwLDI2LDEwWiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xNiIgeD0iMTMiIHk9IjYiIHdpZHRoPSIxMCIgaGVpZ2h0PSIyIi8+'@;
put 'XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMzIsMTMuMjJWMzBINFY4SDdWNkgzLjc1QTEuNzgsMS43OCwwLDAsMCwyLDcuODFWMzAuMTlBMS43OCwxLjc4LDAsMCwwLDMuNzUsMzJo'@;
put 'MjguNUExLjc4LDEuNzgsMCwwLDAsMzQsMzAuMTlWMTIuMzRBNy40NSw3LjQ1LDAsMCwxLDMyLDEzLjIyWiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgeD0iOCIgeT0iMTQiIHdpZHRo'@;
put 'PSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiIHg9IjE0IiB5PSIxNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNz'@;
put 'PSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCIgeD0iMjAiIHk9IjE0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0t'@;
put 'YmFkZ2VkIiB4PSIyNiIgeT0iMTQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC02LS1iYWRnZWQiIHg9IjgiIHk9IjE5IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4g'@;
put 'ICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNy0tYmFkZ2VkIiB4PSIxNCIgeT0iMTkiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFk'@;
put 'Z2VkIGNsci1pLW91dGxpbmUtcGF0aC04LS1iYWRnZWQiIHg9IjIwIiB5PSIxOSIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTktLWJhZGdlZCIgeD0iMjYiIHk9IjE5'@;
put 'IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMTAtLWJhZGdlZCIgeD0iOCIgeT0iMjQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVj'@;
put 'dCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xMS0tYmFkZ2VkIiB4PSIxNCIgeT0iMjQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUt'@;
put 'cGF0aC0xMi0tYmFkZ2VkIiB4PSIyMCIgeT0iMjQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xMy0tYmFkZ2VkIiB4PSIyNiIgeT0iMjQiIHdpZHRoPSIyIiBoZWln'@;
put 'aHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xNC0tYmFkZ2VkIiBkPSJNMTAsMTBhMSwxLDAsMCwwLDEtMVYzQTEsMSwwLDAsMCw5LDNWOUExLDEsMCwwLDAsMTAsMTBaIi8+XG4gICAgICAgICAg'@;
put 'ICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMTUtLWJhZGdlZCIgZD0iTTIyLjUsNkgxM1Y4aDkuNzhBNy40OSw3LjQ5LDAsMCwxLDIyLjUsNloiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5l'@;
put 'LS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTE2LS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgZD0iTTMz'@;
put 'LjY4LDE1LjRIMzJWMzBINFY4SDdWNkgzLjc1QTEuNzgsMS43OCwwLDAsMCwyLDcuODFWMzAuMTlBMS43OCwxLjc4LDAsMCwwLDMuNzUsMzJoMjguNUExLjc4LDEuNzgsMCwwLDAsMzQsMzAuMTlWMTUuMzhaIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUt'@;
put 'LWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiIHg9IjgiIHk9IjE0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiIHg9IjE0'@;
put 'IiB5PSIxNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIiB4PSI4IiB5PSIxOSIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAg'@;
put 'ICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC01LS1hbGVydGVkIiB4PSIxNCIgeT0iMTkiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHIt'@;
put 'aS1vdXRsaW5lLXBhdGgtNi0tYWxlcnRlZCIgeD0iMjAiIHk9IjE5IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTctLWFsZXJ0ZWQiIHg9IjI2IiB5PSIxOSIgd2lk'@;
put 'dGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC04LS1hbGVydGVkIiB4PSI4IiB5PSIyNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNs'@;
put 'YXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC05LS1hbGVydGVkIiB4PSIxNCIgeT0iMjQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBh'@;
put 'dGgtMTAtLWFsZXJ0ZWQiIHg9IjIwIiB5PSIyNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xMS0tYWxlcnRlZCIgeD0iMjYiIHk9IjI0IiB3aWR0aD0iMiIgaGVp'@;
put 'Z2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEyLS1hbGVydGVkIiBkPSJNMTAsMTBhMSwxLDAsMCwwLDEtMVYzQTEsMSwwLDAsMCw5LDNWOUExLDEsMCwwLDAsMTAsMTBaIi8+PHBvbHlnb24g'@;
put 'cG9pbnRzPSIyMS4yOSA2IDEzIDYgMTMgOCAyMC4xNCA4IDIxLjI5IDYiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMTMtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDEx'@;
put 'QTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJN'@;
put 'MzIuMjUsNmgtNFY5YTIuMiwyLjIsMCwxLDEtNC40LDBWNkgxMi4yVjlBMi4yLDIuMiwwLDAsMSw3LjgsOVY2aC00QTEuNzgsMS43OCwwLDAsMCwyLDcuODFWMzAuMTlBMS43OCwxLjc4LDAsMCwwLDMuNzUsMzJoMjguNUExLjc4LDEuNzgsMCwwLDAsMzQsMzAuMTlWNy44MUExLjc4LDEuNzgs'@;
put 'MCwwLDAsMzIuMjUsNlpNMTAsMjZIOFYyNGgyWm0wLTVIOFYxOWgyWm0wLTVIOFYxNGgyWm02LDEwSDE0VjI0aDJabTAtNUgxNFYxOWgyWm0wLTVIMTRWMTRoMlptNiwxMEgyMFYyNGgyWm0wLTVIMjBWMTloMlptMC01SDIwVjE0aDJabTYsMTBIMjZWMjRoMlptMC01SDI2VjE5aDJabTAtNUgy'@;
put 'NlYxNGgyWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIGQ9Ik0xMCwxMGExLDEsMCwwLDAsMS0xVjNBMSwxLDAsMCwwLDksM1Y5QTEsMSwwLDAsMCwxMCwxMFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0i'@;
put 'Y2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiBkPSJNMjYsMTBhMSwxLDAsMCwwLDEtMVYzYTEsMSwwLDAsMC0yLDBWOUExLDEsMCwwLDAsMjYsMTBaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1i'@;
put 'YWRnZWQiIGQ9Ik0xMCwxMGExLDEsMCwwLDAsMS0xVjNBMSwxLDAsMCwwLDksM1Y5QTEsMSwwLDAsMCwxMCwxMFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCIgZD0iTTMwLDEzLjVBNy41LDcu'@;
put 'NSwwLDAsMSwyMi41LDZIMTIuMlY5QTIuMiwyLjIsMCwwLDEsNy44LDlWNmgtNEExLjc4LDEuNzgsMCwwLDAsMiw3LjgxVjMwLjE5QTEuNzgsMS43OCwwLDAsMCwzLjc1LDMyaDI4LjVBMS43OCwxLjc4LDAsMCwwLDM0LDMwLjE5VjEyLjM0QTcuNDUsNy40NSwwLDAsMSwzMCwxMy41Wk0xMCwy'@;
put 'Nkg4VjI0aDJabTAtNUg4VjE5aDJabTAtNUg4VjE0aDJabTYsMTBIMTRWMjRoMlptMC01SDE0VjE5aDJabTAtNUgxNFYxNGgyWm02LDEwSDIwVjI0aDJabTAtNUgyMFYxOWgyWm0wLTVIMjBWMTRoMlptNiwxMEgyNlYyNGgyWm0wLTVIMjZWMTloMlptMC01SDI2VjE0aDJaIi8+XG4gICAgICAg'@;
put 'ICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1z'@;
put 'b2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0zMy42OCwxNS40SDIyLjIzQTMuNjgsMy42OCwwLDAsMSwxOSw5Ljg5TDIxLjI5LDZIMTIuMlY5QTIuMiwyLjIsMCwwLDEsNy44LDlWNmgtNEExLjc4LDEuNzgsMCwwLDAsMiw3LjgxVjMwLjE5QTEuNzgsMS43OCwwLDAsMCwzLjc1LDMyaDI4LjVB'@;
put 'MS43OCwxLjc4LDAsMCwwLDM0LDMwLjE5VjE1LjM4Wk0xMCwyNkg4VjI0aDJabTAtNUg4VjE5aDJabTAtNUg4VjE0aDJabTYsMTBIMTRWMjRoMlptMC01SDE0VjE5aDJabTAtNUgxNFYxNGgyWm02LDEwSDIwVjI0aDJabTAtNUgyMFYxOWgyWm02LDVIMjZWMjRoMlptMC01SDI2VjE5aDJaIi8+'@;
put 'XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCIgZD0iTTEwLDEwYTEsMSwwLDAsMCwxLTFWM0ExLDEsMCwwLDAsOSwzVjlBMSwxLDAsMCwwLDEwLDEwWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRo'@;
put 'IGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4'@;
put 'LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiLz4nKSx5LkNsclNoYXBlRXZlbnQ9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xNi4xNywyNS44NiwxMC44MSwyMC41YTEsMSwwLDAsMSwxLjQxLTEuNDFMMTYuMTcs'@;
put 'MjNsOC42NC04LjY0YTEsMSwwLDAsMSwxLjQxLDEuNDFaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0zMi4yNSw2SDI5VjhoM1YzMEg0VjhIN1Y2SDMuNzVBMS43OCwxLjc4LDAsMCwwLDIsNy44MVYzMC4x'@;
put 'OUExLjc4LDEuNzgsMCwwLDAsMy43NSwzMmgyOC41QTEuNzgsMS43OCwwLDAsMCwzNCwzMC4xOVY3LjgxQTEuNzgsMS43OCwwLDAsMCwzMi4yNSw2WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMTAsMTBh'@;
put 'MSwxLDAsMCwwLDEtMVYzQTEsMSwwLDAsMCw5LDNWOUExLDEsMCwwLDAsMTAsMTBaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIGQ9Ik0yNiwxMGExLDEsMCwwLDAsMS0xVjNhMSwxLDAsMCwwLTIsMFY5QTEsMSww'@;
put 'LDAsMCwyNiwxMFoiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgeD0iMTMiIHk9IjYiIHdpZHRoPSIxMCIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJh'@;
put 'ZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMTAuODEsMjAuNWw1LjM2LDUuMzZMMjYuMjIsMTUuODFhMSwxLDAsMCwwLTEuNDEtMS40MUwxNi4xNywyM2wtMy45NC0zLjk0YTEsMSwwLDAsMC0xLjQxLDEuNDFaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9'@;
put 'ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiBkPSJNMTAsMTBhMSwxLDAsMCwwLDEtMVYzQTEsMSwwLDAsMCw5LDNWOUExLDEsMCwwLDAsMTAsMTBaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdl'@;
put 'ZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIiBkPSJNMzIsMTMuMjJWMzBINFY4SDdWNkgzLjc1QTEuNzgsMS43OCwwLDAsMCwyLDcuODFWMzAuMTlBMS43OCwxLjc4LDAsMCwwLDMuNzUsMzJoMjguNUExLjc4LDEuNzgsMCwwLDAsMzQsMzAuMTlWMTIuMzRBNy40NSw3LjQ1LDAsMCwx'@;
put 'LDMyLDEzLjIyWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCIgZD0iTTIyLjUsNkgxM1Y4aDkuNzhBNy40OSw3LjQ5LDAsMCwxLDIyLjUsNloiLz5cbiAgICAgICAgICAgICAgICA8Y2ly'@;
put 'Y2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUt'@;
put 'cGF0aC0xLS1hbGVydGVkIiBkPSJNMTAsMTBhMSwxLDAsMCwwLDEtMVYzQTEsMSwwLDAsMCw5LDNWOUExLDEsMCwwLDAsMTAsMTBaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiIGQ9'@;
put 'Ik0xMC44MSwyMC41bDUuMzYsNS4zNkwyNi4yMiwxNS44MWExLDEsMCwwLDAsLjIzLS40MUgyMy44TDE2LjE3LDIzbC0zLjk0LTMuOTRhMSwxLDAsMCwwLTEuNDEsMS40MVoiLz5cbiAgICAgICAgICAgICAgICA8cG9seWdvbiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1v'@;
put 'dXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIgcG9pbnRzPSIyMS4yOSA2IDEzIDYgMTMgOCAyMC4xNCA4IDIxLjI5IDYiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYWxlcnRlZCIgZD0iTTMzLjY4LDE1'@;
put 'LjRIMzJWMzBINFY4SDdWNkgzLjc1QTEuNzgsMS43OCwwLDAsMCwyLDcuODFWMzAuMTlBMS43OCwxLjc4LDAsMCwwLDMuNzUsMzJoMjguNUExLjc4LDEuNzgsMCwwLDAsMzQsMzAuMTlWMTUuMzhaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0'@;
put 'ZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoi'@;
put 'Lz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMTAsMTBhMSwxLDAsMCwwLDEtMVYzQTEsMSwwLDAsMCw5LDNWOUExLDEsMCwwLDAsMTAsMTBaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNv'@;
put 'bGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTTI2LDEwYTEsMSwwLDAsMCwxLTFWM2ExLDEsMCwwLDAtMiwwVjlBMSwxLDAsMCwwLDI2LDEwWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIGQ9Ik0zMi4yNSw2aC00Vjlh'@;
put 'Mi4yLDIuMiwwLDAsMS00LjQsMFY2SDEyLjJWOUEyLjIsMi4yLDAsMCwxLDcuOCw5VjZoLTRBMS43OCwxLjc4LDAsMCwwLDIsNy44MVYzMC4xOUExLjc4LDEuNzgsMCwwLDAsMy43NSwzMmgyOC41QTEuNzgsMS43OCwwLDAsMCwzNCwzMC4xOVY3LjgxQTEuNzgsMS43OCwwLDAsMCwzMi4yNSw2'@;
put 'Wk0yNS45NCwxNi41OGwtOS42Nyw5LjY3TDExLDIwLjk0QTEuMzYsMS4zNiwwLDAsMSwxMi45LDE5bDMuMzgsMy4zOEwyNCwxNC42NmExLjM2LDEuMzYsMCwxLDEsMS45MywxLjkzWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1z'@;
put 'b2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0xMCwxMGExLDEsMCwwLDAsMS0xVjNBMSwxLDAsMCwwLDksM1Y5QTEsMSwwLDAsMCwxMCwxMFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIiBk'@;
put 'PSJNMzMuNjgsMTUuNEgyNi4zYTEuMzQsMS4zNCwwLDAsMS0uMzYsMS4xOGwtOS42Nyw5LjY3TDExLDIwLjk0QTEuMzYsMS4zNiwwLDAsMSwxMi45LDE5bDMuMzgsMy4zOCw3LTdoLTFBMy42OCwzLjY4LDAsMCwxLDE5LDkuODlMMjEuMjksNkgxMi4yVjlBMi4yLDIuMiwwLDAsMSw3LjgsOVY2'@;
put 'aC00QTEuNzgsMS43OCwwLDAsMCwyLDcuODFWMzAuMTlBMS43OCwxLjc4LDAsMCwwLDMuNzUsMzJoMjguNUExLjc4LDEuNzgsMCwwLDAsMzQsMzAuMTlWMTUuMzhaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgt'@;
put 'My0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIvPlxuICAgICAgICAgICAgICAgIDxw'@;
put 'YXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMTAsMTBhMSwxLDAsMCwwLDEtMVYzQTEsMSwwLDAsMCw5LDNWOUExLDEsMCwwLDAsMTAsMTBaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1i'@;
put 'YWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQiIGQ9Ik0zMCwxMy41QTcuNSw3LjUsMCwwLDEsMjIuNSw2SDEyLjJWOUEyLjIsMi4yLDAsMCwxLDcuOCw5VjZoLTRBMS43OCwxLjc4LDAsMCwwLDIsNy44MVYzMC4xOUExLjc4LDEuNzgsMCwwLDAsMy43NSwzMmgyOC41QTEuNzgsMS43'@;
put 'OCwwLDAsMCwzNCwzMC4xOVYxMi4zNEE3LjQ1LDcuNDUsMCwwLDEsMzAsMTMuNVptLTQuMDYsMy4wOC05LjY3LDkuNjdMMTEsMjAuOTRBMS4zNiwxLjM2LDAsMCwxLDEyLjksMTlsMy4zOCwzLjM4TDI0LDE0LjY2YTEuMzYsMS4zNiwwLDEsMSwxLjkzLDEuOTNaIi8+XG4gICAgICAgICAgICAg'@;
put 'ICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPicpLHkuQ2xyU2hhcGVFeWU9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMzLjYyLDE3LjUzYy0zLjM3LTYu'@;
put 'MjMtOS4yOC0xMC0xNS44Mi0xMFM1LjM0LDExLjMsMiwxNy41M0wxLjcyLDE4bC4yNi40OGMzLjM3LDYuMjMsOS4yOCwxMCwxNS44MiwxMHMxMi40Ni0zLjcyLDE1LjgyLTEwbC4yNi0uNDhaTTE3LjgsMjYuNDNDMTIuMTcsMjYuNDMsNywyMy4yOSw0LDE4YzMtNS4yOSw4LjE3LTguNDMsMTMu'@;
put 'OC04LjQzUzI4LjU0LDEyLjcyLDMxLjU5LDE4QzI4LjU0LDIzLjI5LDIzLjQyLDI2LjQzLDE3LjgsMjYuNDNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LjA5LDExLjE3QTYuODYsNi44NiwwLDEsMCwyNSwx'@;
put 'OCw2Ljg2LDYuODYsMCwwLDAsMTguMDksMTEuMTdabTAsMTEuNzJBNC44Niw0Ljg2LDAsMSwxLDIzLDE4LDQuODcsNC44NywwLDAsMSwxOC4wOSwyMi44OVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuNjIs'@;
put 'MTcuNTNjLTMuMzctNi4yMy05LjI4LTEwLTE1LjgyLTEwUzUuMzQsMTEuMywyLDE3LjUzTDEuNzIsMThsLjI2LjQ4YzMuMzcsNi4yMyw5LjI4LDEwLDE1LjgyLDEwczEyLjQ2LTMuNzIsMTUuODItMTBsLjI2LS40OFpNMTcuOCwyNi40M0MxMi4xNywyNi40Myw3LDIzLjI5LDQsMThjMy01LjI5'@;
put 'LDguMTctOC40MywxMy44LTguNDNTMjguNTQsMTIuNzIsMzEuNTksMThDMjguNTQsMjMuMjksMjMuNDIsMjYuNDMsMTcuOCwyNi40M1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjE4LjA5IiBjeT0iMTguMDMiIHI9'@;
put 'IjYuODYiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiLz4nKSx5LkNsclNoYXBlRXllSGlkZT0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjUuMTksMjAuNEE2Ljc4LDYuNzgsMCwwLDAsMjUuNjIsMThhNi44Niw2Ljg2LDAsMCwwLTYuODYtNi44Niw2Ljc5LDYu'@;
put 'NzksMCwwLDAtMi4zNy40M0wxOCwxMy4yM2E0Ljc4LDQuNzgsMCwwLDEsLjc0LS4wNkE0Ljg3LDQuODcsMCwwLDEsMjMuNjIsMThhNC43OSw0Ljc5LDAsMCwxLS4wNi43NFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBk'@;
put 'PSJNMzQuMjksMTcuNTNjLTMuMzctNi4yMy05LjI4LTEwLTE1LjgyLTEwYTE2LjgyLDE2LjgyLDAsMCwwLTUuMjQuODVMMTQuODQsMTBhMTQuNzgsMTQuNzgsMCwwLDEsMy42My0uNDdjNS42MywwLDEwLjc1LDMuMTQsMTMuOCw4LjQzYTE3Ljc1LDE3Ljc1LDAsMCwxLTQuMzcsNS4xbDEuNDIs'@;
put 'MS40MmExOS45MywxOS45MywwLDAsMCw1LTZsLjI2LS40OFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNNC44Nyw1Ljc4bDQuNDYsNC40NmExOS41MiwxOS41MiwwLDAsMC02LjY5LDcuMjlMMi4zOCwxOGwuMjYu'@;
put 'NDhjMy4zNyw2LjIzLDkuMjgsMTAsMTUuODIsMTBhMTYuOTMsMTYuOTMsMCwwLDAsNy4zNy0xLjY5bDUsNSwxLjc1LTEuNS0yNi0yNlptOS43NSw5Ljc1LDYuNjUsNi42NWE0LjgxLDQuODEsMCwwLDEtMi41LjcyQTQuODcsNC44NywwLDAsMSwxMy45LDE4LDQuODEsNC44MSwwLDAsMSwxNC42'@;
put 'MiwxNS41M1ptLTEuNDUtMS40NWE2Ljg1LDYuODUsMCwwLDAsOS41NSw5LjU1bDEuNiwxLjZhMTQuOTEsMTQuOTEsMCwwLDEtNS44NiwxLjJjLTUuNjMsMC0xMC43NS0zLjE0LTEzLjgtOC40M2ExNy4yOSwxNy4yOSwwLDAsMSw2LjEyLTYuM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1p'@;
put 'LW91dGxpbmUtcGF0aC0zIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTguMzcsMTEuMTdBNi43OSw2Ljc5LDAsMCwwLDE2LDExLjZsOC44LDguOEE2Ljc4LDYuNzgsMCwwLDAsMjUuMjMsMTgsNi44Niw2Ljg2LDAsMCwwLDE4LjM3LDExLjE3WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1p'@;
put 'LXNvbGlkLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTM0LjI5LDE3LjUzYy0zLjM3LTYuMjMtOS4yOC0xMC0xNS44Mi0xMGExNi44MiwxNi44MiwwLDAsMC01LjI0Ljg1TDE0Ljg0LDEwYTE0Ljc4LDE0Ljc4LDAsMCwxLDMuNjMtLjQ3YzUuNjMsMCwxMC43NSwzLjE0LDEzLjgs'@;
put 'OC40M2ExNy43NSwxNy43NSwwLDAsMS00LjM3LDUuMWwxLjQyLDEuNDJhMTkuOTMsMTkuOTMsMCwwLDAsNS02bC4yNi0uNDhaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNNC44Nyw1Ljc4bDQuNDYsNC40NmExOS41Miwx'@;
put 'OS41MiwwLDAsMC02LjY5LDcuMjlMMi4zOCwxOGwuMjYuNDhjMy4zNyw2LjIzLDkuMjgsMTAsMTUuODIsMTBhMTYuOTMsMTYuOTMsMCwwLDAsNy4zNy0xLjY5bDUsNSwxLjc1LTEuNS0yNi0yNlptOC4zLDguM2E2Ljg1LDYuODUsMCwwLDAsOS41NSw5LjU1bDEuNiwxLjZhMTQuOTEsMTQuOTEs'@;
put 'MCwwLDEtNS44NiwxLjJjLTUuNjMsMC0xMC43NS0zLjE0LTEzLjgtOC40M2ExNy4yOSwxNy4yOSwwLDAsMSw2LjEyLTYuM1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiLz4nKSx5LkNsclNoYXBlU3RlcEZvcndhcmQyPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9'@;
put 'Ik03LjA4LDYuNTJhMS42OCwxLjY4LDAsMCwwLDAsMi40TDE2LjUxLDE4LDcuMTIsMjcuMDhhMS43LDEuNywwLDAsMCwyLjM2LDIuNDRoMEwyMS40LDE4LDkuNDgsNi40N0ExLjY5LDEuNjksMCwwLDAsNy4wOCw2LjUyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRo'@;
put 'LTEiIC8+PHBhdGggZD0iTTI2LjQ5LDVhMS43LDEuNywwLDAsMC0xLjcsMS43VjI5LjNhMS43LDEuNywwLDAsMCwzLjQsMFY2LjdBMS43LDEuNywwLDAsMCwyNi40OSw1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+JykseS5DbHJTaGFwZUFycm93PSgw'@;
put 'LGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yNy42NiwxNS42MSwxOCw2LDguMzQsMTUuNjFBMSwxLDAsMSwwLDkuNzUsMTdMMTcsOS44MVYyOC45NGExLDEsMCwxLDAsMiwwVjkuODFMMjYuMjUsMTdhMSwxLDAsMCwwLDEuNDEtMS40MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91'@;
put 'dGxpbmUtcGF0aC0xIi8+JykseS5Db3JlU2hhcGVzPXsidW5rbm93bi1zdGF0dXMiOnkuQ2xyU2hhcGVVbmtub3duU3RhdHVzLGhvbWU6eS5DbHJTaGFwZUhvbWUsY29nOnkuQ2xyU2hhcGVDb2csY2hlY2s6eS5DbHJTaGFwZUNoZWNrLHRpbWVzOnkuQ2xyU2hhcGVUaW1lcywiZXhjbGFtYXRp'@;
put 'b24tdHJpYW5nbGUiOnkuQ2xyU2hhcGVFeGNsYW1hdGlvblRyaWFuZ2xlLCJleGNsYW1hdGlvbi1jaXJjbGUiOnkuQ2xyU2hhcGVFeGNsYW1hdGlvbkNpcmNsZSwiY2hlY2stY2lyY2xlIjp5LkNsclNoYXBlQ2hlY2tDaXJjbGUsImluZm8tY2lyY2xlIjp5LkNsclNoYXBlSW5mb0NpcmNsZSwi'@;
put 'aW5mby1zdGFuZGFyZCI6eS5DbHJTaGFwZUluZm9TdGFuZGFyZCwic3VjY2Vzcy1zdGFuZGFyZCI6eS5DbHJTaGFwZVN1Y2Nlc3NTdGFuZGFyZCwiZXJyb3Itc3RhbmRhcmQiOnkuQ2xyU2hhcGVFcnJvclN0YW5kYXJkLCJ3YXJuaW5nLXN0YW5kYXJkIjp5LkNsclNoYXBlV2FybmluZ1N0YW5k'@;
put 'YXJkLCJoZWxwLWluZm8iOnkuQ2xyU2hhcGVIZWxwSW5mbyxiYXJzOnkuQ2xyU2hhcGVCYXJzLHVzZXI6eS5DbHJTaGFwZVVzZXIsYW5nbGU6eS5DbHJTaGFwZUFuZ2xlLGZvbGRlcjp5LkNsclNoYXBlRm9sZGVyLCJmb2xkZXItb3BlbiI6eS5DbHJTaGFwZUZvbGRlck9wZW4sYmVsbDp5LkNs'@;
put 'clNoYXBlQmVsbCxpbWFnZTp5LkNsclNoYXBlSW1hZ2UsY2xvdWQ6eS5DbHJTaGFwZUNsb3VkLCJlbGxpcHNpcy1ob3Jpem9udGFsIjp5LkNsclNoYXBlRWxsaXBzaXNIb3Jpem9udGFsLCJlbGxpcHNpcy12ZXJ0aWNhbCI6eS5DbHJTaGFwZUVsbGlwc2lzVmVydGljYWwsImZpbHRlci1ncmlk'@;
put 'Ijp5LkNsclNoYXBlRmlsdGVyR3JpZCwiZmlsdGVyLWdyaWQtY2lyY2xlIjp5LkNsclNoYXBlRmlsdGVyR3JpZENpcmNsZSwidm0tYnVnIjp5LkNsclNoYXBlVm1CdWcsc2VhcmNoOnkuQ2xyU2hhcGVTZWFyY2gsInZpZXctY29sdW1ucyI6eS5DbHJTaGFwZVZpZXdDb2x1bW5zLCJhbmdsZS1k'@;
put 'b3VibGUiOnkuQ2xyU2hhcGVBbmdsZURvdWJsZSxjYWxlbmRhcjp5LkNsclNoYXBlQ2FsZW5kYXIsZXZlbnQ6eS5DbHJTaGFwZUV2ZW50LGV5ZTp5LkNsclNoYXBlRXllLCJleWUtaGlkZSI6eS5DbHJTaGFwZUV5ZUhpZGUsInN0ZXAtZm9yd2FyZC0yIjp5LkNsclNoYXBlU3RlcEZvcndhcmQy'@;
put 'LGFycm93OnkuQ2xyU2hhcGVBcnJvd30sT2JqZWN0LmRlZmluZVByb3BlcnR5KHkuQ29yZVNoYXBlcywiaG91c2UiLCgwLF8uZGVzY3JpcHRvckNvbmZpZykoeS5Db3JlU2hhcGVzLmhvbWUpKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoeS5Db3JlU2hhcGVzLCJzZXR0aW5ncyIsKDAsXy5kZXNj'@;
put 'cmlwdG9yQ29uZmlnKSh5LkNvcmVTaGFwZXMuY29nKSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHkuQ29yZVNoYXBlcywic3VjY2VzcyIsKDAsXy5kZXNjcmlwdG9yQ29uZmlnKSh5LkNvcmVTaGFwZXMuY2hlY2spKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoeS5Db3JlU2hhcGVzLCJjbG9zZSIs'@;
put 'KDAsXy5kZXNjcmlwdG9yQ29uZmlnKSh5LkNvcmVTaGFwZXMudGltZXMpKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoeS5Db3JlU2hhcGVzLCJ3YXJuaW5nIiwoMCxfLmRlc2NyaXB0b3JDb25maWcpKHkuQ29yZVNoYXBlc1siZXhjbGFtYXRpb24tdHJpYW5nbGUiXSkpLE9iamVjdC5kZWZpbmVQ'@;
put 'cm9wZXJ0eSh5LkNvcmVTaGFwZXMsImVycm9yIiwoMCxfLmRlc2NyaXB0b3JDb25maWcpKHkuQ29yZVNoYXBlc1siZXhjbGFtYXRpb24tY2lyY2xlIl0pKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoeS5Db3JlU2hhcGVzLCJpbmZvIiwoMCxfLmRlc2NyaXB0b3JDb25maWcpKHkuQ29yZVNoYXBl'@;
put 'c1siaW5mby1jaXJjbGUiXSkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh5LkNvcmVTaGFwZXMsIm1lbnUiLCgwLF8uZGVzY3JpcHRvckNvbmZpZykoeS5Db3JlU2hhcGVzLmJhcnMpKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoeS5Db3JlU2hhcGVzLCJhdmF0YXIiLCgwLF8uZGVzY3JpcHRvckNv'@;
put 'bmZpZykoeS5Db3JlU2hhcGVzLnVzZXIpKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoeS5Db3JlU2hhcGVzLCJjYXJldCIsKDAsXy5kZXNjcmlwdG9yQ29uZmlnKSh5LkNvcmVTaGFwZXMuYW5nbGUpKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoeS5Db3JlU2hhcGVzLCJkaXJlY3RvcnkiLCgwLF8u'@;
put 'ZGVzY3JpcHRvckNvbmZpZykoeS5Db3JlU2hhcGVzLmZvbGRlcikpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh5LkNvcmVTaGFwZXMsIm5vdGlmaWNhdGlvbiIsKDAsXy5kZXNjcmlwdG9yQ29uZmlnKSh5LkNvcmVTaGFwZXMuYmVsbCkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh5LkNvcmVTaGFw'@;
put 'ZXMsImNvbGxhcHNlIiwoMCxfLmRlc2NyaXB0b3JDb25maWcpKHkuQ29yZVNoYXBlc1siYW5nbGUtZG91YmxlIl0pKX0sIi4vcHJvamVjdHMvaWNvbnMvc3JjL3NoYXBlcy9lc3NlbnRpYWwtc2hhcGVzLnRzIjoKLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq'@;
put 'KioqKioqKioqKioqKiEqXAogICAgICAgICAgICAgICAgICAhKioqIC4vcHJvamVjdHMvaWNvbnMvc3JjL3NoYXBlcy9lc3NlbnRpYWwtc2hhcGVzLnRzICoqKiEKICAgICAgICAgICAgICAgICAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq'@;
put 'KiovCi8qISBubyBzdGF0aWMgZXhwb3J0cyBmb3VuZCAqL2Z1bmN0aW9uKFgseSxJKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHksIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHkuQ2xyU2hhcGVMb2dvdXQ9eS5DbHJTaGFwZUxvZ2luPXkuQ2xyU2hhcGVIZWxwPXkuQ2xy'@;
put 'U2hhcGVDb3B5PXkuQ2xyU2hhcGVDaGlsZEFycm93PXkuQ2xyU2hhcGVDaXJjbGVBcnJvdz15LkNsclNoYXBlQWxhcm1DbG9jaz15LkNsclNoYXBlQ2xvY2s9eS5DbHJTaGFwZUhpc3Rvcnk9eS5DbHJTaGFwZVRhZ3M9eS5DbHJTaGFwZVRhZz15LkNsclNoYXBlVHJhc2g9eS5DbHJTaGFwZVRp'@;
put 'bWVzQ2lyY2xlPXkuQ2xyU2hhcGVCYW49eS5DbHJTaGFwZVBsdXNDaXJjbGU9eS5DbHJTaGFwZU1pbnVzQ2lyY2xlPXkuQ2xyU2hhcGVNaW51cz15LkNsclNoYXBlUGx1cz15LkNsclNoYXBlRmlsZT15LkNsclNoYXBlUGluPXkuQ2xyU2hhcGVGaWx0ZXI9eS5DbHJTaGFwZVBvcE91dD15LkNs'@;
put 'clNoYXBlVXNlcnM9eS5DbHJTaGFwZVVubG9jaz15LkNsclNoYXBlTG9jaz15LkNsclNoYXBlVXBsb2FkPXkuQ2xyU2hhcGVEb3dubG9hZD15LkNsclNoYXBlTGlnaHRidWxiPXkuQ2xyU2hhcGVWaWV3Q2FyZHM9eS5DbHJTaGFwZVZpZXdMaXN0PXkuQ2xyU2hhcGVTeW5jPXkuQ2xyU2hhcGVS'@;
put 'ZWZyZXNoPXkuQ2xyU2hhcGVOb3RlPXkuQ2xyU2hhcGVQZW5jaWw9eS5DbHJTaGFwZVRoZXJtb21ldGVyPXkuQ2xyU2hhcGVCdWc9eS5DbHJTaGFwZVNjaXNzb3JzPXkuQ2xyU2hhcGVBc3Rlcmlzaz15LkNsclNoYXBlQm9vaz15LkNsclNoYXBlT2JqZWN0cz15LkNsclNoYXBlUmVzaXplPXku'@;
put 'Q2xyU2hhcGVDdXJzb3JIYW5kQ2xpY2s9eS5DbHJTaGFwZUN1cnNvckhhbmQ9eS5DbHJTaGFwZUN1cnNvckFycm93PXkuQ2xyU2hhcGVHcmlkVmlldz15LkNsclNoYXBlQnViYmxlRXhjbGFtYXRpb249eS5DbHJTaGFwZU5ldz15LkNsclNoYXBlQWxhcm1PZmY9eS5DbHJTaGFwZVBpbmJvYXJk'@;
put 'PXkuQ2xyU2hhcGVBZGRUZXh0PXZvaWQgMCx5LkNsclNoYXBlQ2xvbmU9eS5DbHJTaGFwZUN1cnNvck1vdmU9eS5DbHJTaGFwZVdhbmQ9eS5DbHJTaGFwZVN1bj15LkNsclNoYXBlTW9vbj15LkNsclNoYXBlRmlsdGVyMj15LkNsclNoYXBlRHJhZ0hhbmRsZT15LkNsclNoYXBlQ29weVRvQ2xp'@;
put 'cGJvYXJkPXkuQ2xyU2hhcGVDb2xvclBpY2tlcj15LkNsclNoYXBlQnJpZWZjYXNlPXkuQ2xyU2hhcGVFeHBhbmRDYXJkPXkuQ2xyU2hhcGVDb2xsYXBzZUNhcmQ9eS5DbHJTaGFwZVNvcnRCeT15LkNsclNoYXBlQWNjZXNzaWJpbGl0eTI9eS5DbHJTaGFwZUFjY2Vzc2liaWxpdHkxPXkuQ2xy'@;
put 'U2hhcGVTaHJpbms9eS5DbHJTaGFwZVBhcGVyY2xpcD15LkNsclNoYXBlRmlsZUdyb3VwPXkuQ2xyU2hhcGVSZXBlYXQ9eS5DbHJTaGFwZUlkQmFkZ2U9eS5DbHJTaGFwZUJhbGFuY2U9eS5DbHJTaGFwZU9yZ2FuaXphdGlvbj15LkNsclNoYXBlTm9BY2Nlc3M9eS5DbHJTaGFwZUhvdXJnbGFz'@;
put 'cz15LkNsclNoYXBlRmxhbWU9eS5DbHJTaGFwZVRhcmdldD15LkNsclNoYXBlQnVsbHNleWU9eS5DbHJTaGFwZVdyZW5jaD15LkNsclNoYXBlQm9sdD15LkNsclNoYXBlTGlicmFyeT15LkNsclNoYXBlS2V5PXkuQ2xyU2hhcGVab29tT3V0PXkuQ2xyU2hhcGVab29tSW49eS5DbHJTaGFwZVdp'@;
put 'bmRvd1Jlc3RvcmU9eS5DbHJTaGFwZVdpbmRvd01pbj15LkNsclNoYXBlV2luZG93TWF4PXkuQ2xyU2hhcGVXaW5kb3dDbG9zZT15LkNsclNoYXBlVG9vbHM9eS5DbHJTaGFwZVN3aXRjaD15LkNsclNoYXBlVHdvV2F5QXJyb3dzPXkuQ2xyU2hhcGVGaWxlU2V0dGluZ3M9eS5DbHJTaGFwZVNj'@;
put 'cm9sbD15LkNsclNoYXBlVW5kbz15LkNsclNoYXBlUmVkbz15LkNsclNoYXBlTGlzdD15LkNsclNoYXBlRmlyZXdhbGw9eS5DbHJTaGFwZUNsaXBib2FyZD15LkNsclNoYXBlU2xpZGVyPXkuQ2xyU2hhcGVXb3JsZD15LkNsclNoYXBlUHJpbnRlcj12b2lkIDAseS5Fc3NlbnRpYWxTaGFwZXM9'@;
put 'eS5DbHJTaGFwZUNvbG9yUGFsZXR0ZT15LkNsclNoYXBlRmlyc3RBaWQ9eS5DbHJTaGFwZUJldGE9eS5DbHJTaGFwZURvdENpcmNsZT15LkNsclNoYXBlQ2lyY2xlPXkuQ2xyU2hhcGVDcm9zc2hhaXJzPXkuQ2xyU2hhcGVWb2x1bWU9eS5DbHJTaGFwZVRhYmxlPXkuQ2xyU2hhcGVTbm93Zmxh'@;
put 'a2U9eS5DbHJTaGFwZUZ1ZWw9eS5DbHJTaGFwZUZvcm09eS5DbHJTaGFwZUZpc2g9eS5DbHJTaGFwZVRyZWU9eS5DbHJTaGFwZVJlY3ljbGU9eS5DbHJTaGFwZUZpbHRlck9mZj15LkNsclNoYXBlRmlsZVppcD15LkNsclNoYXBlQ3Vyc29ySGFuZE9wZW49eS5DbHJTaGFwZUN1cnNvckhhbmRH'@;
put 'cmFiPXkuQ2xyU2hhcGVUcmVlVmlldz15LkNsclNoYXBlUG9ydHJhaXQ9eS5DbHJTaGFwZVBhc3RlPXkuQ2xyU2hhcGVMYW5kc2NhcGU9eS5DbHJTaGFwZUVyYXNlcj15LkNsclNoYXBlRHJhZ0hhbmRsZUNvcm5lcj15LkNsclNoYXBlRGV0YWlscz12b2lkIDA7dmFyIF89SSgKLyohIC4uL3V0'@;
put 'aWxzL2Rlc2NyaXB0b3ItY29uZmlnICovCiIuL3Byb2plY3RzL2ljb25zL3NyYy91dGlscy9kZXNjcmlwdG9yLWNvbmZpZy50cyIpLGc9SSgKLyohIC4uL3V0aWxzL3N2Zy10YWctZ2VuZXJhdG9yICovCiIuL3Byb2plY3RzL2ljb25zL3NyYy91dGlscy9zdmctdGFnLWdlbmVyYXRvci50cyIp'@;
put 'LEI9SSgKLyohIC4vY29yZS1zaGFwZXMgKi8KIi4vcHJvamVjdHMvaWNvbnMvc3JjL3NoYXBlcy9jb3JlLXNoYXBlcy50cyIpO3kuQ2xyU2hhcGVBZGRUZXh0PSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzEs'@;
put 'MjFIMTNhMSwxLDAsMCwwLDAsMkgzMWExLDEsMCwwLDAsMC0yWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0xMiwxNmExLDEsMCwwLDAsMSwxSDMxYTEsMSwwLDAsMCwwLTJIMTNBMSwxLDAsMCwwLDEyLDE2WiIv'@;
put 'PlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIGQ9Ik0yNywyN0gxM2ExLDEsMCwwLDAsMCwySDI3YTEsMSwwLDAsMCwwLTJaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5l'@;
put 'LXBhdGgtNCIgZD0iTTE1Ljg5LDlhMSwxLDAsMCwwLTEtMUgxMFYzLjIxYTEsMSwwLDAsMC0yLDBWOEgyLjg5YTEsMSwwLDAsMCwwLDJIOHY1LjIxYTEsMSwwLDAsMCwyLDBWMTBoNC44OUExLDEsMCwwLDAsMTUuODksOVoiLz4nKSx5LkNsclNoYXBlUGluYm9hcmQ9KDAsZy5jbHJJY29uU1ZH'@;
put 'KSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMCwzMCw2LDMwLDYsNkgyMlY0SDZBMiwyLDAsMCwwLDQsNlYzMGEyLDIsMCwwLDAsMiwySDMwYTIsMiwwLDAsMCwyLTJWMTRIMzBaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xy'@;
put 'LWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTMzLjU3LDkuMzNsLTctN2ExLDEsMCwwLDAtMS40MSwxLjQxbDcsN2ExLDEsMCwxLDAsMS40MS0xLjQxWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIGQ9'@;
put 'Ik0yMi4xLDExLjE5bC43LjVMMjYuNDYsOCwyNSw2LjU2LDIyLjUxLDkuMTNjLTItLjg3LTQuMzUuMTQtNS45MiwxLjY4bC0uNzIuNzEsMy41NCwzLjU0LTMuNjcsMy42NywxLjQxLDEuNDEsMy42Ny0zLjY3TDI0LjM3LDIwbC43MS0uNzJjMS41NC0xLjU3LDIuNTUtMy45MiwxLjY4LTUuOTNs'@;
put 'Mi41NC0yLjU3TDI3Ljg4LDkuMzgsMjQuMjEsMTMuMWwuNDkuNjljLjc2LDEsLjI1LDIuMzctLjQxLDMuMzNMMTguNzcsMTEuNkMxOS44NCwxMC44NiwyMS4xNSwxMC41LDIyLjEsMTEuMTlaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0'@;
put 'aC0xIiBkPSJNMzAsMzAsNiwzMCw2LDZIMjJWNEg2QTIsMiwwLDAsMCw0LDZWMzBhMiwyLDAsMCwwLDIsMkgzMGEyLDIsMCwwLDAsMi0yVjE0SDMwWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTTMzLjU3LDkuMzNsLTct'@;
put 'N2ExLDEsMCwwLDAtMS40MSwxLjQxbDEuMzgsMS4zOC00LDRjLTItLjg3LTQuMzUuMTQtNS45MiwxLjY4bC0uNzIuNzEsMy41NCwzLjU0LTMuNjcsMy42NywxLjQxLDEuNDEsMy42Ny0zLjY3TDI0LjM3LDIwbC43MS0uNzJjMS41NC0xLjU3LDIuNTUtMy45MSwxLjY4LTUuOTJsNC00LDEuMzgs'@;
put 'MS4zOGExLDEsMCwxLDAsMS40MS0xLjQxWiIvPicpLHkuQ2xyU2hhcGVBbGFybU9mZj0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMxLjQ3LDMuODRhNS43OCw1Ljc4LDAsMCwwLTcuMzctLjYzLDE2LjA4LDE2'@;
put 'LjA4LDAsMCwxLDguMiw3LjY1QTUuNzMsNS43MywwLDAsMCwzMS40NywzLjg0WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0yNS4zMywyMS41NGEuOS45LDAsMCwwLS40MS0xLjJsLTMuMi0xLjU2TDI0Ljg5LDIy'@;
put 'QS44OS44OSwwLDAsMCwyNS4zMywyMS41NFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMTgsOC42YS45LjksMCwwLDAtLjkuOXY0LjZsMS44LDEuODFWOS41QS45LjksMCwwLDAsMTgsOC42WiIvPlxuICAgICAg'@;
put 'ICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIGQ9Ik0xMS40MiwzLjQzYTUuOCw1LjgsMCwwLDAtNS44MS0uODFMOC4zLDUuMzJBMTYsMTYsMCwwLDEsMTEuNDIsMy40M1oiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRs'@;
put 'aW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiBkPSJNMTgsNGExMy45MSwxMy45MSwwLDAsMC04LjMsMi43NWwxLjQyLDEuNDNBMTIsMTIsMCwwLDEsMjcuODIsMjQuOWwxLjQyLDEuNDNBMTQsMTQsMCwwLDAsMTgsNFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5l'@;
put 'IGNsci1pLW91dGxpbmUtcGF0aC02IiBkPSJNMS41Niw0LjIxLDIuNzMsNS4zOGE1LjcsNS43LDAsMCwwLC42Nyw2LjFBMTUuNzgsMTUuNzgsMCwwLDEsNS40Niw4LjEyTDYuODgsOS41NUExMy45NCwxMy45NCwwLDAsMCw4LjExLDI3Ljg4TDUuNTYsMzAuNDNBMSwxLDAsMSwwLDcsMzEuODRs'@;
put 'Mi42Ni0yLjY2YTEzLjg5LDEzLjg5LDAsMCwwLDE2LjgsMGw0LjE0LDQuMTVMMzIsMzEuOSwzLDIuOFpNMjUsMjcuNzJBMTEuODksMTEuODksMCwwLDEsMTgsMzAsMTIsMTIsMCwwLDEsNiwxOGExMS44OSwxMS44OSwwLDAsMSwyLjI5LTdaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0i'@;
put 'Y2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzEuNDcsMy44NGE1Ljc4LDUuNzgsMCwwLDAtNy4zNy0uNjMsMTYuMDgsMTYuMDgsMCwwLDEsOC4yLDcuNjVBNS43Myw1LjczLDAsMCwwLDMxLjQ3LDMuODRaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29s'@;
put 'aWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNMTEuNDIsMy40M2E1LjgsNS44LDAsMCwwLTUuNzctLjgyTDguMzMsNS4zQTE2LDE2LDAsMCwxLDExLjQyLDMuNDNaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiBkPSJNMjQuOTIs'@;
put 'MjEuOTRsNC4zNCw0LjM2QTE0LDE0LDAsMCwwLDkuNzUsNi43M0wxNywxNFY5LjY5YTEsMSwwLDAsMSwyLDBWMTZsMi4zMywyLjM0TDI1LDIwLjFhMSwxLDAsMCwxLC40NywxLjMzQTEsMSwwLDAsMSwyNC45MiwyMS45NFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xp'@;
put 'ZCBjbHItaS1zb2xpZC1wYXRoLTQiIGQ9Ik0xLjYxLDQuMjEsMi43Myw1LjM0YTUuNzMsNS43MywwLDAsMCwuNjcsNi4xNUExNS44OCwxNS44OCwwLDAsMSw1LjQ4LDguMUw2LjkxLDkuNTJBMTMuOTQsMTMuOTQsMCwwLDAsOC4xMSwyNy44OEw1LjU2LDMwLjQzQTEsMSwwLDEsMCw3LDMxLjg0'@;
put 'bDIuNjYtMi42NmExMy44OSwxMy44OSwwLDAsMCwxNi44MywwbDQuMTYsNC4xN0wzMiwzMS45LDMsMi44WiIvPicpLHkuQ2xyU2hhcGVOZXc9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zNC41OSwyM2wtNC4w'@;
put 'OC01LDQtNC45YTEuODIsMS44MiwwLDAsMCwuMjMtMS45NEExLjkzLDEuOTMsMCwwLDAsMzIuOTQsMTBoLTMxQTEuOTEsMS45MSwwLDAsMCwwLDExLjg4VjI0LjEzQTEuOTEsMS45MSwwLDAsMCwxLjk0LDI2SDMzLjA1YTEuOTMsMS45MywwLDAsMCwxLjc3LTEuMDlBMS44MiwxLjgyLDAsMCww'@;
put 'LDM0LjU5LDIzWk0yLDI0VjEySDMyLjc4bC00Ljg0LDUuOTNMMzIuODUsMjRaIi8+XG4gICAgICAgICAgICA8cG9seWdvbiAgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIHBvaW50cz0iOS4zOSAxOS4zNSA2LjEzIDE1IDUgMTUgNSAyMS4xOCA2LjEzIDIxLjE4'@;
put 'IDYuMTMgMTYuODQgOS4zOSAyMS4xOCAxMC41MSAyMS4xOCAxMC41MSAxNSA5LjM5IDE1IDkuMzkgMTkuMzUiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uICBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgcG9pbnRzPSIxMi4xOCAyMS4xOCAxNi44NCAyMS4xOCAx'@;
put 'Ni44NCAyMC4xNiAxMy4zMSAyMC4xNiAxMy4zMSAxOC41NSAxNi41IDE4LjU1IDE2LjUgMTcuNTIgMTMuMzEgMTcuNTIgMTMuMzEgMTYuMDMgMTYuODQgMTYuMDMgMTYuODQgMTUgMTIuMTggMTUgMTIuMTggMjEuMTgiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uICBjbGFzcz0iY2xyLWktb3V0'@;
put 'bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgcG9pbnRzPSIyNC41MiAxOS40MyAyMy4wNiAxNSAyMS44NCAxNSAyMC4zNyAxOS40MyAxOS4wNSAxNSAxNy44MiAxNSAxOS43OCAyMS4xOCAyMC44OSAyMS4xOCAyMi40NSAxNi41OSAyNCAyMS4xOCAyNS4xMyAyMS4xOCAyNy4wOCAxNSAyNS44'@;
put 'NSAxNSAyNC41MiAxOS40MyIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTM0LjExLDI0LjQ5bC0zLjkyLTYuNjIsMy44OC02LjM1QTEsMSwwLDAsMCwzMy4yMiwxMEgyYTIsMiwwLDAsMC0yLDJWMjRhMiwyLDAsMCwwLDIs'@;
put 'MkgzMy4yNUExLDEsMCwwLDAsMzQuMTEsMjQuNDlabS0yMy42LTMuMzFIOS4zOUw2LjEzLDE2Ljg0djQuMzVINVYxNUg2LjEzbDMuMjcsNC4zNVYxNWgxLjEyWk0xNi44NCwxNkgxMy4zMXYxLjQ5aDMuMnYxaC0zLjJ2MS42MWgzLjUzdjFIMTIuMThWMTVoNC42NVptOC4yOSw1LjE2SDI0bC0x'@;
put 'LjU1LTQuNTlMMjAuOSwyMS4xOEgxOS43OGwtMi02LjE4SDE5bDEuMzIsNC40M0wyMS44NCwxNWgxLjIybDEuNDYsNC40M0wyNS44NSwxNWgxLjIzWiIvPicpLHkuQ2xyU2hhcGVCdWJibGVFeGNsYW1hdGlvbj0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBj'@;
put 'bHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE4LDIuNWMtOC44MiwwLTE2LDYuMjgtMTYsMTRzNy4xOCwxNCwxNiwxNGExOCwxOCwwLDAsMCw0Ljg4LS42OGw1LjUzLDMuNTJhMSwxLDAsMCwwLDEuNTQtLjg0bDAtNi43M2ExMywxMywwLDAsMCw0LTkuMjdDMzQsOC43OCwyNi44MiwyLjUsMTgs'@;
put 'Mi41Wk0yOC4yOSwyNC42MWExLDEsMCwwLDAtLjMyLjczbDAsNS4zNC00LjM4LTIuNzlhMSwxLDAsMCwwLS44My0uMTFBMTYsMTYsMCwwLDEsMTgsMjguNWMtNy43MiwwLTE0LTUuMzgtMTQtMTJzNi4yOC0xMiwxNC0xMiwxNCw1LjM4LDE0LDEyQTExLjA4LDExLjA4LDAsMCwxLDI4LjI5LDI0'@;
put 'LjYxWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0xOCwyMC42M2ExLDEsMCwwLDAsMS0xVjguNDhhMSwxLDAsMSwwLTIsMFYxOS42MUExLDEsMCwwLDAsMTgsMjAuNjNaIi8+XG4gICAgICAgICAgICA8Y2lyY2xl'@;
put 'IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBjeD0iMTgiIGN5PSIyNC4wNCIgcj0iMS4zMyIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTE4LDIuNWMtOC44MiwwLTE2LDYuMjgtMTYsMTRz'@;
put 'Ny4xOCwxNCwxNiwxNGExOCwxOCwwLDAsMCw0Ljg4LS42OGw1LjUzLDMuNTJhMSwxLDAsMCwwLDEuNTQtLjg0bDAtNi43M2ExMywxMywwLDAsMCw0LTkuMjdDMzQsOC43OCwyNi44MiwyLjUsMTgsMi41Wk0xNi45Myw5LjEzYTEuNDEsMS40MSwwLDEsMSwyLjgxLDBWMTguOWExLjQxLDEuNDEs'@;
put 'MCwxLDEtMi44MSwwWm0xLjQxLDE3LjM1YTEuODcsMS44NywwLDEsMSwxLjg3LTEuODdBMS44NywxLjg3LDAsMCwxLDE4LjM0LDI2LjQ3WiIvPicpLHkuQ2xyU2hhcGVHcmlkVmlldz0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBh'@;
put 'dGgtMSIgZD0iTTE0LDRINkEyLDIsMCwwLDAsNCw2djhhMiwyLDAsMCwwLDIsMmg4YTIsMiwwLDAsMCwyLTJWNkEyLDIsMCwwLDAsMTQsNFpNNiwxNFY2aDh2OFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMzAs'@;
put 'NEgyMmEyLDIsMCwwLDAtMiwydjhhMiwyLDAsMCwwLDIsMmg4YTIsMiwwLDAsMCwyLTJWNkEyLDIsMCwwLDAsMzAsNFpNMjIsMTRWNmg4djhaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgZD0iTTE0LDIwSDZhMiwyLDAs'@;
put 'MCwwLTIsMnY4YTIsMiwwLDAsMCwyLDJoOGEyLDIsMCwwLDAsMi0yVjIyQTIsMiwwLDAsMCwxNCwyMFpNNiwzMFYyMmg4djhaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgZD0iTTMwLDIwSDIyYTIsMiwwLDAsMC0yLDJ2'@;
put 'OGEyLDIsMCwwLDAsMiwyaDhhMiwyLDAsMCwwLDItMlYyMkEyLDIsMCwwLDAsMzAsMjBaTTIyLDMwVjIyaDh2OFoiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIHg9IjQiIHk9IjQiIHdpZHRoPSIxMiIgaGVpZ2h0PSIxMiIgcng9'@;
put 'IjIiIHJ5PSIyIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiB4PSIyMCIgeT0iNCIgd2lkdGg9IjEyIiBoZWlnaHQ9IjEyIiByeD0iMiIgcnk9IjIiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1zb2xpZCBjbHIt'@;
put 'aS1zb2xpZC1wYXRoLTMiIHg9IjQiIHk9IjIwIiB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHJ4PSIyIiByeT0iMiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNCIgeD0iMjAiIHk9IjIwIiB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHJ4'@;
put 'PSIyIiByeT0iMiIvPicpLHkuQ2xyU2hhcGVDdXJzb3JBcnJvdz0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE0LjU4LDMyLjMxYTEsMSwwLDAsMS0uOTQtLjY1TDQsNS42NUExLDEsMCwwLDEsNS4yNSw0LjM3'@;
put 'bDI2LDkuNjhhMSwxLDAsMCwxLS4wNSwxLjg5bC04LjM2LDIuNTcsOC4zLDguM2ExLDEsMCwwLDEsMCwxLjQxbC0zLjI2LDMuMjZhMSwxLDAsMCwxLS43MS4yOWgwYTEsMSwwLDAsMS0uNzEtLjI5bC04LjMzLTguMzMtMi42LDguNDVhMSwxLDAsMCwxLS45My43MVptMy4wOS0xMmExLDEsMCww'@;
put 'LDEsLjcxLjI5bDguNzksOC43OUwyOSwyNy41MWwtOC43Ni04Ljc2YTEsMSwwLDAsMSwuNDEtMS42Nmw3LjEzLTIuMkw2LjYsN2w3Ljg5LDIxLjJMMTYuNzEsMjFhMSwxLDAsMCwxLC43MS0uNjhaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQt'@;
put 'cGF0aC0xIiBkPSJNMjksMTIuMzYsMy44OCwzQTEsMSwwLDAsMCwyLjU5LDQuMjhMMTIsMjkuNDRhMSwxLDAsMCwwLDEuODktLjA1bDIuNjktOC43NSw5LjEyLDguOWExLDEsMCwwLDAsMS40MSwwbDIuMzUtMi4zNWExLDEsMCwwLDAsMC0xLjQxbC05LjA5LTguODZMMjksMTQuMjVBMSwxLDAs'@;
put 'MCwwLDI5LDEyLjM2WiIvPicpLHkuQ2xyU2hhcGVDdXJzb3JIYW5kPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzAuNzQsMTUuMTlhMTMuNjYsMTMuNjYsMCwwLDAtNi44Ny0zLjgzQTI2LDI2LDAsMCwwLDE4'@;
put 'LDEwLjU4VjUuMjhBMy40LDMuNCwwLDAsMCwxNC41LDIsMy40LDMuNCwwLDAsMCwxMSw1LjI4djEwTDkuNCwxMy43YTMuNzcsMy43NywwLDAsMC01LjI4LDBBMy42NywzLjY3LDAsMCwwLDMsMTYuMzNhMy42LDMuNiwwLDAsMCwxLDIuNTZsNC42Niw1LjUyYTExLjUzLDExLjUzLDAsMCwwLDEu'@;
put 'NDMsNCwxMC4xMiwxMC4xMiwwLDAsMCwyLDIuNTR2MS45MmExLjA3LDEuMDcsMCwwLDAsMSwxLjA4SDI3YTEuMDcsMS4wNywwLDAsMCwxLTEuMDh2LTIuN2ExMi44MSwxMi44MSwwLDAsMCwzLTguMzZ2LTZBMSwxLDAsMCwwLDMwLjc0LDE1LjE5Wk0yOSwyMS44NmExMC43MiwxMC43MiwwLDAs'@;
put 'MS0yLjYsNy4yNiwxLjExLDEuMTEsMCwwLDAtLjQuNzJWMzJIMTQuMTRWMzAuNTJhMSwxLDAsMCwwLS40NC0uODMsNy4yNiw3LjI2LDAsMCwxLTEuODItMi4yMyw5LjE0LDkuMTQsMCwwLDEtMS4yLTMuNTIsMSwxLDAsMCwwLS4yMy0uNTlMNS41MywxNy41M2ExLjcsMS43LDAsMCwxLDAtMi40'@;
put 'MiwxLjc2LDEuNzYsMCwwLDEsMi40NywwbDMsM3YzLjE0bDItMVY1LjI4QTEuNDIsMS40MiwwLDAsMSwxNC41LDQsMS40MiwxLjQyLDAsMCwxLDE2LDUuMjh2MTEuOGwyLC40M1YxMi41OWEyNC4yNywyNC4yNywwLDAsMSwyLjUxLjE4VjE4bDEuNi4zNVYxM2MuNDEuMDguODMuMTcsMS4yNi4y'@;
put 'OGExNC44OCwxNC44OCwwLDAsMSwxLjUzLjQ5djUuMTVsMS42LjM1VjE0LjVBMTEuMDYsMTEuMDYsMCwwLDEsMjksMTYuMjNaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMjguNjksMTQuMzN2NC44M2wtMi0uNDNWMTMu'@;
put 'MjRhMTYuMTksMTYuMTksMCwwLDAtMi4zMy0uODR2NS44MmwtMi0uNDNWMTJjLTEuMS0uMTgtMi4xOC0uMy0zLjA4LS4zNnY1LjUxbC0yLS40M1YxMS40OGgwVjQuMzRhMi41MywyLjUzLDAsMCwwLTIuNi0yLjQzLDIuNTMsMi41MywwLDAsMC0yLjYsMi40M1YxNy4yN2gwdjIuNTlsLTIsMVYx'@;
put 'NS42TDcuNzUsMTMuMjFhMi44MywyLjgzLDAsMCwwLTQsMCwyLjkzLDIuOTMsMCwwLDAsMCw0LjA5bDYsNy4xYTEwLjgyLDEwLjgyLDAsMCwwLDEuMzksNC4yMiw4LjQyLDguNDIsMCwwLDAsMi4yMSwyLjczdjIuNTZIMjcuNzlWMzAuNjJhMTIuNTQsMTIuNTQsMCwwLDAsMy04LjV2LTZBMTAs'@;
put 'MTAsMCwwLDAsMjguNjksMTQuMzNaIi8+JykseS5DbHJTaGFwZUN1cnNvckhhbmRDbGljaz0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMwLjQsMTcuNmMtMS44LTEuOS00LjItMy4yLTYuNy0zLjdjLTEuMS0w'@;
put 'LjMtMi4yLTAuNS0zLjMtMC42YzIuOC0zLjMsMi4zLTguMy0xLTExLjFzLTguMy0yLjMtMTEuMSwxcy0yLjMsOC4zLDEsMTEuMVxuICAgICAgICAgICAgICAgICAgICBjMC42LDAuNSwxLjIsMC45LDEuOCwxLjF2Mi4ybC0xLjYtMS41Yy0xLjQtMS40LTMuNy0xLjQtNS4yLDBjLTEuNCwxLjQt'@;
put 'MS41LDMuNi0wLjEsNWw0LjYsNS40YzAuMiwxLjQsMC43LDIuNywxLjQsMy45XG4gICAgICAgICAgICAgICAgICAgIGMwLjUsMC45LDEuMiwxLjgsMS45LDIuNXYxLjljMCwwLjYsMC40LDEsMSwxaDEzLjZjMC41LDAsMS0wLjUsMS0xdi0yLjZjMS45LTIuMywyLjktNS4yLDIuOS04LjF2LTUu'@;
put 'OFxuICAgICAgICAgICAgICAgICAgICBDMzAuNywxNy45LDMwLjYsMTcuNywzMC40LDE3LjZ6IE04LjQsOC4yYzAtMy4zLDIuNy01LjksNi01LjhjMy4zLDAsNS45LDIuNyw1LjgsNmMwLDEuOC0wLjgsMy40LTIuMiw0LjVWNy45XG4gICAgICAgICAgICAgICAgICAgIGMtMC4xLTEuOC0xLjYt'@;
put 'My4yLTMuNC0zLjJjLTEuOC0wLjEtMy40LDEuNC0zLjQsMy4ydjUuMkM5LjUsMTIuMSw4LjUsMTAuMiw4LjQsOC4yTDguNCw4LjJ6IE0yOC43LDI0YzAuMSwyLjYtMC44LDUuMS0yLjUsNy4xXG4gICAgICAgICAgICAgICAgICAgIGMtMC4yLDAuMi0wLjQsMC40LTAuNCwwLjd2Mi4xSDE0LjJ2'@;
put 'LTEuNGMwLTAuMy0wLjItMC42LTAuNC0wLjhjLTAuNy0wLjYtMS4zLTEuMy0xLjgtMi4yYy0wLjYtMS0xLTIuMi0xLjItMy40XG4gICAgICAgICAgICAgICAgICAgIGMwLTAuMi0wLjEtMC40LTAuMi0wLjZsLTQuOC01LjdjLTAuMy0wLjMtMC41LTAuNy0wLjUtMS4yYzAtMC40LDAuMi0wLjks'@;
put 'MC41LTEuMmMwLjctMC42LDEuNy0wLjYsMi40LDBsMi45LDIuOXYzbDEuOS0xVjcuOVxuICAgICAgICAgICAgICAgICAgICBjMC4xLTAuNywwLjctMS4zLDEuNS0xLjJjMC43LDAsMS40LDAuNSwxLjQsMS4ydjExLjVsMiwwLjR2LTQuNmMwLjEtMC4xLDAuMi0wLjEsMC4zLTAuMmMwLjcsMCwx'@;
put 'LjQsMC4xLDIuMSwwLjJ2NS4xbDEuNiwwLjN2LTUuMlxuICAgICAgICAgICAgICAgICAgICBsMS4yLDAuM2MwLjUsMC4xLDEsMC4zLDEuNSwwLjV2NWwxLjYsMC4zdi00LjZjMC45LDAuNCwxLjcsMSwyLjQsMS43TDI4LjcsMjR6Ii8+JykseS5DbHJTaGFwZVJlc2l6ZT0oMCxnLmNsckljb25T'@;
put 'VkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE5LDRhMSwxLDAsMCwwLDAsMmg5LjU5bC05LjI1LDkuMjVhMSwxLDAsMSwwLDEuNDEsMS40MUwzMCw3LjQxVjE3YTEsMSwwLDAsMCwyLDBWNFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNs'@;
put 'YXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNNCwxOWExLDEsMCwwLDEsMiwwdjkuNTlsOS4yNS05LjI1YTEsMSwwLDEsMSwxLjQxLDEuNDFMNy40MSwzMEgxN2ExLDEsMCwwLDEsMCwySDRaIi8+JykseS5DbHJTaGFwZU9iamVjdHM9KDAsZy5jbHJJY29uU1ZH'@;
put 'KSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xNi4wOCwxNC45YTEwLjQxLDEwLjQxLDAsMCwxLDEuODctLjcxbC00LTEwLjc3YTIsMiwwLDAsMC0zLjc1LDBMMiwyNS4yNkEyLDIsMCwwLDAsMy45MiwyOGg2Ljk0YTEwLDEwLDAsMCwxLS41'@;
put 'Mi0ySDMuOTJMMTIuMDYsNC4xMloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMzIsOUgyMmEyLDIsMCwwLDAtMiwydjIuODVjLjIzLDAsLjQ2LDAsLjY5LDBBMTAuNTEsMTAuNTEsMCwwLDEsMjIsMTMuOVYxMUgz'@;
put 'MlYyMUgzMC42NWExMC40MiwxMC40MiwwLDAsMSwuNDUsMkgzMmEyLDIsMCwwLDAsMi0yVjExQTIsMiwwLDAsMCwzMiw5WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIGQ9Ik0yMC42OSwxNS44MWE4LjUsOC41LDAsMSww'@;
put 'LDguNSw4LjVBOC41MSw4LjUxLDAsMCwwLDIwLjY5LDE1LjgxWm0wLDE1YTYuNSw2LjUsMCwxLDEsNi41LTYuNUE2LjUxLDYuNTEsMCwwLDEsMjAuNjksMzAuODFaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMTAuNjUs'@;
put 'MjQuNDRhOS41MSw5LjUxLDAsMCwxLDcuMDYtOS4xN0wxMywzYTEsMSwwLDAsMC0xLjg3LDBMMi4wNywyNi41NkExLDEsMCwwLDAsMywyNy45Mmg4LjMyQTkuNDQsOS40NCwwLDAsMSwxMC42NSwyNC40NFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1z'@;
put 'b2xpZC1wYXRoLTIiIGQ9Ik0zMiwxMEgyMGExLDEsMCwwLDAtMSwxdjRhOS40Myw5LjQzLDAsMCwxLDEwLjYzLDlIMzJhMSwxLDAsMCwwLDEtMVYxMUExLDEsMCwwLDAsMzIsMTBaIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMi'@;
put 'IGN4PSIyMC4xNSIgY3k9IjI0LjQ0IiByPSI3LjUiLz4nKSx5LkNsclNoYXBlQm9vaz0oMCxnLmNsckljb25TVkcpKCc8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgeD0iMTAiIHk9IjUuMiIgd2lkdGg9IjE4IiBoZWlnaHQ9IjEuNTUiLz5cbiAgICAg'@;
put 'ICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMjksOEg5Ljg2QTEuODksMS44OSwwLDAsMSw4LDYsMiwyLDAsMCwxLDkuODYsNEgyOWExLDEsMCwwLDAsMC0ySDkuODZBNCw0LDAsMCwwLDYsNmE0LjE0LDQuMTQsMCwwLDAsMCwuNDks'@;
put 'MSwxLDAsMCwwLDAsLjI0VjMwYTQsNCwwLDAsMCwzLjg2LDRIMjlhMSwxLDAsMCwwLDEtMVY5LjI1czAtLjA2LDAtLjA5LDAtLjA2LDAtLjA5QTEuMDcsMS4wNywwLDAsMCwyOSw4Wk0yOCwzMkg5Ljg2QTIsMiwwLDAsMSw4LDMwVjkuNTVBMy42MywzLjYzLDAsMCwwLDkuODYsMTBIMjhaIi8+'@;
put 'XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiB4PSIxMCIgeT0iNS4yIiB3aWR0aD0iMTgiIGhlaWdodD0iMS41NSIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTTI5'@;
put 'LDhIOS44NkExLjg5LDEuODksMCwwLDEsOCw2LDIsMiwwLDAsMSw5Ljg2LDRIMjlhMSwxLDAsMSwwLDAtMkg5Ljg2QTQsNCwwLDAsMCw2LDZhNC4xNCw0LjE0LDAsMCwwLDAsLjQ5LDEsMSwwLDAsMCwwLC4yNFYzMGE0LDQsMCwwLDAsMy44Niw0SDI5YTEsMSwwLDAsMCwxLTFWOS4yNXMwLS4w'@;
put 'NiwwLS4wOSwwLS4wNiwwLS4wOUExLjA3LDEuMDcsMCwwLDAsMjksOFoiLz4nKSx5LkNsclNoYXBlQXN0ZXJpc2s9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0yOC44OSwyMC45MWwtNS0yLjkxLDQuODctMi44'@;
put 'NmEzLjExLDMuMTEsMCwwLDAsMS4xNC0xLjA4LDMsMywwLDAsMC00LjA5LTQuMTVMMjEsMTIuNzZWN2EzLDMsMCwwLDAtNiwwdjUuNzZMMTAuMTUsOS45MWEzLDMsMCwxLDAtMyw1LjE4bDUsMi45MUw3LjIsMjAuODZhMy4xMSwzLjExLDAsMCwwLTEuMTQsMS4wOCwzLDMsMCwwLDAsNC4wOSw0'@;
put 'LjE0TDE1LDIzLjI0VjI4LjlhMywzLDAsMCwwLDIsMi45NEEzLDMsMCwwLDAsMjEsMjlWMjMuMjRsNC44NSwyLjg1YTMsMywwLDEsMCwzLTUuMThaTTI4LjI0LDI0YTEsMSwwLDAsMS0xLjM3LjM2TDE5LDE5Ljc1VjI5YTEsMSwwLDAsMS0yLDBWMTkuNzVMOS4xMywyNC4zNmExLDEsMCwwLDEt'@;
put 'MS0xLjcyTDE2LDE4bC03LjktNC42NGExLDEsMCwxLDEsMS0xLjcyTDE3LDE2LjI1VjdhMSwxLDAsMCwxLDIsMHY5LjI1bDcuODctNC42MmExLDEsMCwwLDEsMSwxLjcyTDIwLDE4bDcuOSw0LjY0QTEsMSwwLDAsMSwyOC4yNCwyNFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHIt'@;
put 'aS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0yOC44OSwyMC45MWwtNS0yLjkxLDQuODctMi44NmEzLjExLDMuMTEsMCwwLDAsMS4xNC0xLjA4LDMsMywwLDAsMC00LjA5LTQuMTVMMjEsMTIuNzZWN2EzLDMsMCwwLDAtNiwwdjUuNzZMMTAuMTUsOS45MWEzLDMsMCwxLDAtMyw1LjE4'@;
put 'bDUsMi45MUw3LjIsMjAuODZhMy4xMSwzLjExLDAsMCwwLTEuMTQsMS4wOCwzLDMsMCwwLDAsNC4wOSw0LjE0TDE1LDIzLjI0VjI4LjlhMywzLDAsMCwwLDIsMi45NEEzLDMsMCwwLDAsMjEsMjlWMjMuMjRsNC44NSwyLjg1YTMsMywwLDEsMCwzLTUuMThaIi8+JykseS5DbHJTaGFwZVNjaXNz'@;
put 'b3JzPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIlxuICAgICAgICAgICAgZD0iTTI0LjA2LDE4LjE4bDkuNjEtOC43N2ExLDEsMCwwLDAtLjA5LTEuNTVsLTIuMjQtMS42YTMuNTcsMy41NywwLDAsMC00LjI4LjEyTDE1'@;
put 'Ljg4LDE1LjNsLTMuMjYtMi41MmE1LjQ1LDUuNDUsMCwxLDAtMSwxLjc3bDIuNjIsMkwxMCwyMGE1LjQ4LDUuNDgsMCwxLDAsMS41OSwxLjI5TDI4LjMsNy45NGExLjU3LDEuNTcsMCwwLDEsMS44OC0uMDVsMS4yMy44OEwyMS4xLDE4LjE5bDEwLjMxLDkuNC0xLjIzLjg4YTEuNTcsMS41Nyww'@;
put 'LDAsMS0xLjg4LS4wNWwtOS44MS03Ljg1TDE3LDIxLjkzbDEwLjA2LDhhMy41NywzLjU3LDAsMCwwLDQuMjkuMTJsMi4yNC0xLjZhMSwxLDAsMCwwLC4wOS0xLjU1Wk03LjQ1LDE0LjU0YTMuNDYsMy40NiwwLDEsMSwzLjQ1LTMuNDZBMy40NiwzLjQ2LDAsMCwxLDcuNDUsMTQuNTRabTAsMTMu'@;
put 'NzJBMy40NiwzLjQ2LDAsMSwxLDEwLjksMjQuOCwzLjQ2LDMuNDYsMCwwLDEsNy40NSwyOC4yNloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zMy44MSw4LjEzLDMxLjYzLDYuNDhhMS45MiwxLjkyLDAsMCwwLTIuMzYs'@;
put 'MEwxMCwyMi4wNmE1LjQ2LDUuNDYsMCwxLDAsMiwxLjgxbDMuOS0zLjEyTDI5LjI3LDMxLjUyYTEuOTIsMS45MiwwLDAsMCwyLjM2LDBsMi4xOC0xLjY0TDIwLjk0LDE5Wk03LjQ1LDI5Ljc1YTIuODYsMi44NiwwLDEsMSwyLjg2LTIuODZBMi44NywyLjg3LDAsMCwxLDcuNDUsMjkuNzVaIi8+'@;
put 'XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNMTQuMywxNS4yNCwxMiwxMy4zOGE1LjQ2LDUuNDYsMCwxLDAtMiwxLjgxTDEyLjE2LDE3Wm0tNi44NS0yYTIuODYsMi44NiwwLDEsMSwyLjg2LTIuODZBMi44NiwyLjg2LDAsMCwx'@;
put 'LDcuNDUsMTMuMjNaIi8+JykseS5DbHJTaGFwZUJ1Zz0oMCxnLmNsckljb25TVkcpKCc8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBjeD0iMjMuNTYiIGN5PSIxNy43NCIgcj0iMS45NSIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xy'@;
put 'LWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgY3g9IjIyLjQyIiBjeT0iMjUuODgiIHI9IjEuNTgiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIGN4PSIxMi44NiIgY3k9IjE3Ljc0IiByPSIxLjk1Ii8+XG4g'@;
put 'ICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiBjeD0iMTMuOTkiIGN5PSIyNS44OCIgcj0iMS41OCIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIGQ9Ik0zMC44'@;
put 'MywyMEgyOWExOS4yOSwxOS4yOSwwLDAsMC0xLjE4LTUuNzNsMS40Ni0uNzlhMSwxLDAsMCwwLS45NS0xLjc2bC0zLDEuNjRBMTcuNjUsMTcuNjUsMCwwLDEsMjcsMjAuNzJDMjcsMjcsMjMuOCwzMS4yMywxOC44LDMxLjYyVjE1SDE3LjJWMzEuNjJDMTIuMjIsMzEuMjEsOSwyNyw5LDIwLjcy'@;
put 'YTE3Ljc0LDE3Ljc0LDAsMCwxLDEuNzMtNy4zNEw3LjcsMTEuNzJhMSwxLDAsMCwwLS45NSwxLjc2bDEuNS44QTE5LjM4LDE5LjM4LDAsMCwwLDcuMDcsMjBINS4xN2ExLDEsMCwwLDAsMCwySDcuMWExNC42MiwxNC42MiwwLDAsMCwxLjY2LDYuMTdMNi44NywyOS40OUExLDEsMCwxLDAsOCwz'@;
put 'MS4xMmwxLjg0LTEuMjlBMTAuMzgsMTAuMzgsMCwwLDAsMTgsMzMuNjZhMTAuMzgsMTAuMzgsMCwwLDAsOC4xNC0zLjgxTDI4LDMxLjEyYTEsMSwwLDEsMCwxLjE1LTEuNjRsLTEuODYtMS4zQTE0LjYxLDE0LjYxLDAsMCwwLDI4Ljk0LDIyaDEuODlhMSwxLDAsMCwwLDAtMloiLz5cbiAgICAg'@;
put 'ICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02IiBkPSJNMTEuNTEsNS4zNmExLjY3LDEuNjcsMCwwLDAsMS4wNy0uNTFBMy4yMSwzLjIxLDAsMCwxLDEzLjc2LDZhMTYuMzgsMTYuMzgsMCwwLDAtMi42NSwyLjg5LDIsMiwwLDAsMCwxLjYxLDMu'@;
put 'MTlIMjMuMzJBMiwyLDAsMCwwLDI1LjEsMTFhMiwyLDAsMCwwLS4xNy0yLjFBMTYuMzQsMTYuMzQsMCwwLDAsMjIuMjUsNmEzLjIxLDMuMjEsMCwwLDEsMS4xNy0xLjExQTEuNjgsMS42OCwwLDEsMCwyMywzLjI3LDQuNzcsNC43NywwLDAsMCwyMSw1YTUuODEsNS44MSwwLDAsMC0yLjkzLTEs'@;
put 'NS44Myw1LjgzLDAsMCwwLTMsMUE0Ljc3LDQuNzcsMCwwLDAsMTMsMy4yN2ExLjY4LDEuNjgsMCwxLDAtMS40OSwyLjA5Wk0xOCw2LjA3YzEuNDUsMCwzLjUzLDEuNTcsNS4zMSw0aDBsLTEwLjYsMEMxNC40OSw3LjYzLDE2LjU2LDYuMDcsMTgsNi4wN1oiLz5cbiAgICAgICAgICAgIDxwYXRo'@;
put 'IGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zMC44MywyMEgyOWExOS4yOSwxOS4yOSwwLDAsMC0xLjE4LTUuNzNsMS40Ni0uNzlhMSwxLDAsMCwwLS45NS0xLjc2bC0zLDEuMjhIMTAuNzhMNy43LDExLjcyYTEsMSwwLDAsMC0uOTUsMS43NmwxLjUuOEExOS4z'@;
put 'OCwxOS4zOCwwLDAsMCw3LjA3LDIwSDUuMTdhMSwxLDAsMCwwLDAsMkg3LjFhMTQuNjIsMTQuNjIsMCwwLDAsMS42Niw2LjE3TDYuODcsMjkuNDlBMSwxLDAsMSwwLDgsMzEuMTJsMS44NC0xLjI5QTEwLjI5LDEwLjI5LDAsMCwwLDE3LDMzLjZWMTVoMlYzMy42YTEwLjI5LDEwLjI5LDAsMCww'@;
put 'LDcuMTYtMy43NUwyOCwzMS4xMmExLDEsMCwxLDAsMS4xNS0xLjY0bC0xLjg2LTEuM0ExNC42MSwxNC42MSwwLDAsMCwyOC45NCwyMmgxLjg5YTEsMSwwLDAsMCwwLTJaTTEwLjkxLDE3Ljc0YTEuOTUsMS45NSwwLDEsMSwxLjk1LDEuOTVBMS45NSwxLjk1LDAsMCwxLDEwLjkxLDE3Ljc0Wk0x'@;
put 'NCwyNy40NmExLjU4LDEuNTgsMCwxLDEsMS41OC0xLjU4QTEuNTgsMS41OCwwLDAsMSwxNCwyNy40NlptOC40MywwQTEuNTgsMS41OCwwLDEsMSwyNCwyNS44OCwxLjU4LDEuNTgsMCwwLDEsMjIuNDIsMjcuNDZabTEuMTMtNy43N2ExLjk1LDEuOTUsMCwxLDEsMS45NS0xLjk1QTEuOTUsMS45'@;
put 'NSwwLDAsMSwyMy41NiwxOS42OVoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIGQ9Ik0xMS4yMyw1LjI2YTEuNjcsMS42NywwLDAsMCwuNTQtLjMyLDUuOSw1LjksMCwwLDEsLjg5LjU4LDcuNDQsNy40NCwwLDAsMSwuOTUuOTRB'@;
put 'MTguNDgsMTguNDgsMCwwLDAsMTAuNzksOS43Yy0uNC41Ny4wOSwxLjI4Ljg2LDEuMjhIMjQuNDRjLjc3LDAsMS4yNi0uNzEuODYtMS4yOGExOC4zOCwxOC4zOCwwLDAsMC0yLjg4LTMuMjgsNy4yOCw3LjI4LDAsMCwxLC45MS0uOSw1LjksNS45LDAsMCwxLC44OS0uNTgsMS42OSwxLjY5LDAs'@;
put 'MSwwLS41Ni0xLjUxLDcuNDksNy40OSwwLDAsMC0xLjMyLjgzLDkuMDYsOS4wNiwwLDAsMC0xLjE5LDEuMThBNS44NSw1Ljg1LDAsMCwwLDE4LDQuM2E1LjkxLDUuOTEsMCwwLDAtMy4xNywxLjE5LDkuMiw5LjIsMCwwLDAtMS4yMi0xLjIxLDcuNDksNy40OSwwLDAsMC0xLjMyLS44MywxLjY4'@;
put 'LDEuNjgsMCwxLDAtMS4xMSwxLjgzWiIvPicpLHkuQ2xyU2hhcGVUaGVybW9tZXRlcj0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE5LDIzLjE3VjExLjQ2SDE3VjIzLjJhMywzLDAsMSwwLDIsMFoiLz5cbiAg'@;
put 'ICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMjYsMTVhMSwxLDAsMCwwLDAtMkgyMy45MlYxMUgyNmExLDEsMCwwLDAsMC0ySDIzLjkyVjhhNiw2LDAsMCwwLTEyLDBWMjAuODFhOCw4LDAsMSwwLDEyLS4yVjE5SDI2YTEsMSww'@;
put 'LDAsMCwwLTJIMjMuOTJWMTVaTTI0LDI2YTYsNiwwLDEsMS0xMC4zNi00LjEybC4yNy0uMjlWOGE0LDQsMCwwLDEsOCwwVjIxLjQ0bC4zLjI5QTYsNiwwLDAsMSwyNCwyNloiLz4nKSx5LkNsclNoYXBlUGVuY2lsPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5l'@;
put 'IGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzMuODcsOC4zMiwyOCwyLjQyYTIuMDcsMi4wNywwLDAsMC0yLjkyLDBMNC4yNywyMy4ybC0xLjksOC4yYTIuMDYsMi4wNiwwLDAsMCwyLDIuNSwyLjE0LDIuMTQsMCwwLDAsLjQzLDBMMTMuMDksMzIsMzMuODcsMTEuMjRBMi4wNywyLjA3LDAs'@;
put 'MCwwLDMzLjg3LDguMzJaTTEyLjA5LDMwLjIsNC4zMiwzMS44M2wxLjc3LTcuNjJMMjEuNjYsOC43bDYsNlpNMjksMTMuMjVsLTYtNiwzLjQ4LTMuNDYsNS45LDZaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTQu'@;
put 'MjIsMjMuMmwtMS45LDguMmEyLjA2LDIuMDYsMCwwLDAsMiwyLjUsMi4xNCwyLjE0LDAsMCwwLC40MywwTDEzLDMyLDI4Ljg0LDE2LjIyLDIwLDcuNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNMzMuODIsOC4z'@;
put 'MmwtNS45LTUuOWEyLjA3LDIuMDcsMCwwLDAtMi45MiwwTDIxLjcyLDUuN2w4LjgzLDguODMsMy4yOC0zLjI4QTIuMDcsMi4wNywwLDAsMCwzMy44Miw4LjMyWiIvPicpLHkuQ2xyU2hhcGVOb3RlPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yOCwzMEg2VjhIMTkuMjJsMi0ySDZBMiwy'@;
put 'LDAsMCwwLDQsOFYzMGEyLDIsMCwwLDAsMiwySDI4YTIsMiwwLDAsMCwyLTJWMTVsLTIsMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjUzLDUuODQsMzAuMTYsMi40N2ExLjYxLDEuNjEsMCwwLDAtMi4y'@;
put 'OCwwTDE0LjE3LDE2LjI2bC0xLjExLDQuODFBMS42MSwxLjYxLDAsMCwwLDE0LjYzLDIzLDEuNjksMS42OSwwLDAsMCwxNSwyM2w0Ljg1LTEuMDdMMzMuNTMsOC4xMkExLjYxLDEuNjEsMCwwLDAsMzMuNTMsNS44NFpNMTguODEsMjAuMDhsLTMuNjYuODFMMTYsMTcuMjYsMjYuMzIsNi44N2wy'@;
put 'LjgyLDIuODJaTTMwLjI3LDguNTYsMjcuNDUsNS43NCwyOSw0LjE2LDMxLjg0LDdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMyw2LjQsMjkuMywyLjdhMS43MSwxLjcxLDAsMCwwLTIuMzYsMEwyMy42NSw2'@;
put 'SDZBMiwyLDAsMCwwLDQsOFYzMGEyLDIsMCwwLDAsMiwySDI4YTIsMiwwLDAsMCwyLTJWMTEuNzZsMy0zQTEuNjcsMS42NywwLDAsMCwzMyw2LjRaTTE4LjgzLDIwLjEzbC00LjE5LjkzLDEtNC4xNSw5LjU1LTkuNTcsMy4yMywzLjIzWk0yOS41LDkuNDMsMjYuMjcsNi4ybDEuODUtMS44NSwz'@;
put 'LjIzLDMuMjNaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPicpLHkuQ2xyU2hhcGVSZWZyZXNoPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMjIuNCwxMS42NWExLjA5LDEuMDks'@;
put 'MCwwLDAsMS4wOSwxLjA5SDM0LjQzVjEuODFhMS4wOSwxLjA5LDAsMSwwLTIuMTksMFY4Ljk1YTE2LjQxLDE2LjQxLDAsMSwwLDEuNDcsMTUuODYsMS4xMiwxLjEyLDAsMCwwLTIuMDUtLjksMTQuMTgsMTQuMTgsMCwxLDEtMS4wNS0xMy4zNkgyMy41QTEuMDksMS4wOSwwLDAsMCwyMi40LDEx'@;
put 'LjY1WiIvPicpLHkuQ2xyU2hhcGVTeW5jPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzIuODQsMTUuNzJhMSwxLDAsMSwwLTIsLjI5QTEzLjE1LDEzLjE1LDAsMCwxLDMxLDE3Ljk0LDEzLDEzLDAsMCwxLDgu'@;
put 'NywyN2g1LjM2YTEsMSwwLDAsMCwwLTJoLTl2OWExLDEsMCwxLDAsMiwwVjI4LjJBMTUsMTUsMCwwLDAsMzIuODQsMTUuNzJaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0zMC4wNiwxQTEuMDUsMS4wNSww'@;
put 'LDAsMCwyOSwyVjcuODNBMTQuOTQsMTQuOTQsMCwwLDAsMywxNy45NGExNS4xNiwxNS4xNiwwLDAsMCwuMiwyLjQ4LDEsMSwwLDAsMCwxLC44NGguMTZhMSwxLDAsMCwwLC44Mi0xLjE1QTEzLjIzLDEzLjIzLDAsMCwxLDUsMTcuOTRhMTMsMTMsMCwwLDEsMTMtMTNBMTIuODcsMTIuODcsMCww'@;
put 'LDEsMjcuNDQsOUgyMi4wNmExLDEsMCwwLDAsMCwySDMxVjJBMSwxLDAsMCwwLDMwLjA2LDFaIi8+JykseS5DbHJTaGFwZVZpZXdMaXN0PSgwLGcuY2xySWNvblNWRykoJzxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiB4PSIyIiB5PSI4IiB3aWR0aD0i'@;
put 'MiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik03LDEwSDMxYTEsMSwwLDAsMCwwLTJIN2ExLDEsMCwwLDAsMCwyWiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1v'@;
put 'dXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiB4PSIyIiB5PSIxNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiBkPSJNMzEsMTRIN2ExLDEsMCwwLDAsMCwySDMxYTEsMSww'@;
put 'LDAsMCwwLTJaIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIHg9IjIiIHk9IjIwIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWkt'@;
put 'b3V0bGluZS1wYXRoLTYiIGQ9Ik0zMSwyMEg3YTEsMSwwLDAsMCwwLDJIMzFhMSwxLDAsMCwwLDAtMloiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNyIgeD0iMiIgeT0iMjYiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5c'@;
put 'biAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtOCIgZD0iTTMxLDI2SDdhMSwxLDAsMCwwLDAsMkgzMWExLDEsMCwwLDAsMC0yWiIvPicpLHkuQ2xyU2hhcGVWaWV3Q2FyZHM9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9'@;
put 'ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xNSwxN0g0YTIsMiwwLDAsMS0yLTJWOEEyLDIsMCwwLDEsNCw2SDE1YTIsMiwwLDAsMSwyLDJ2N0EyLDIsMCwwLDEsMTUsMTdaTTQsOHY3SDE1VjhaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1p'@;
put 'LW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0zMiwxN0gyMWEyLDIsMCwwLDEtMi0yVjhhMiwyLDAsMCwxLDItMkgzMmEyLDIsMCwwLDEsMiwydjdBMiwyLDAsMCwxLDMyLDE3Wk0yMSw4djdIMzJWOFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0'@;
put 'bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgZD0iTTE1LDMwSDRhMiwyLDAsMCwxLTItMlYyMWEyLDIsMCwwLDEsMi0ySDE1YTIsMiwwLDAsMSwyLDJ2N0EyLDIsMCwwLDEsMTUsMzBaTTQsMjF2N0gxNVYyMVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGlu'@;
put 'ZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgZD0iTTMyLDMwSDIxYTIsMiwwLDAsMS0yLTJWMjFhMiwyLDAsMCwxLDItMkgzMmEyLDIsMCwwLDEsMiwydjdBMiwyLDAsMCwxLDMyLDMwWk0yMSwyMXY3SDMyVjIxWiIvPicpLHkuQ2xyU2hhcGVMaWdodGJ1bGI9KDAsZy5jbHJJY29uU1ZHKSgnPHBh'@;
put 'dGggZD0iTTE4LDIuMjVhMTEsMTEsMCwwLDAtMTEsMTEsMTAuNjgsMTAuNjgsMCwwLDAsMSw0LjYzLDE2LjM2LDE2LjM2LDAsMCwwLDEuMTIsMS43OCwxNywxNywwLDAsMSwyLDMuNDcsMTYuMTksMTYuMTksMCwwLDEsLjU5LDRoMkExOC4xNywxOC4xNywwLDAsMCwxMywyMi40NGExOC40Niwx'@;
put 'OC40NiwwLDAsMC0yLjIyLTMuOTIsMTUuNzksMTUuNzksMCwwLDEtMS0xLjU0QTguNjQsOC42NCwwLDAsMSw5LDEzLjIzYTksOSwwLDAsMSwxOC4wNywwQTguNjQsOC42NCwwLDAsMSwyNi4yMSwxN2ExNS43OSwxNS43OSwwLDAsMS0xLDEuNTRBMTguNDYsMTguNDYsMCwwLDAsMjMsMjIuNDRh'@;
put 'MTguMTcsMTguMTcsMCwwLDAtLjcxLDQuNzFoMmExNi4xOSwxNi4xOSwwLDAsMSwuNTktNCwxNywxNywwLDAsMSwyLTMuNDdBMTYuMzEsMTYuMzEsMCwwLDAsMjgsMTcuODZhMTAuNjgsMTAuNjgsMCwwLDAsMS00LjYzQTExLDExLDAsMCwwLDE4LDIuMjVaIiBjbGFzcz0iY2xyLWktb3V0bGlu'@;
put 'ZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LjYzLDE1LjUxYS44LjgsMCwwLDAtMS4xMywwbC0zLDMsMi44NiwzLjEzdjUuNTRIMTlWMjFsLTIuMjQtMi40NSwxLjg5LTEuODlBLjguOCwwLDAsMCwxOC42MywxNS41MVoiIGNsYXNzPSJjbHItaS1v'@;
put 'dXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjMuODYsMjkuMTVIMTIuMTFhLjguOCwwLDEsMCwwLDEuNkgyMy44NmEuOC44LDAsMCwwLDAtMS42WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiLz5cbiAgICAg'@;
put 'ICAgICAgIDxwYXRoIGQ9Ik0yMiwzMi4xNUgxNGEuOC44LDAsMSwwLDAsMS42SDIyYS44LjgsMCwxLDAsMC0xLjZaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE3LjMyLDEwLjg5bC0yLjczLDIuNzNhLjguOCww'@;
put 'LDAsMCwxLjEzLDEuMTNMMTguNDUsMTJhLjguOCwwLDEsMC0xLjEzLTEuMTNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE5LDI3LjE1VjIxbC0yLjI0LTIuNDUsMS44OS0xLjg5YS44LjgsMCwwLDAtMS4xMy0x'@;
put 'LjEzbC0zLDMsMi44NiwzLjEzdjUuNTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMy44NiwyOS4xNUgxMi4xMWEuOC44LDAsMSwwLDAsMS42SDIzLjg2YS44LjgsMCwwLDAsMC0x'@;
put 'LjZaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMiwzMi4xNUgxNGEuOC44LDAsMSwwLDAsMS42SDIyYS44LjgsMCwxLDAsMC0xLjZaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFk'@;
put 'Z2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNS43MiwxNC43NSwxOC40NSwxMmEuOC44LDAsMSwwLTEuMTMtMS4xM2wtMi43MywyLjczYS44LjgsMCwwLDAsMS4xMywxLjEzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBj'@;
put 'bHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjcsMTIuODhjMCwuMTIsMCwuMjMsMCwuMzVBOC42NCw4LjY0LDAsMCwxLDI2LjIxLDE3YTE1Ljc5LDE1Ljc5LDAsMCwxLTEsMS41NEExOC40NiwxOC40NiwwLDAsMCwyMywyMi40NGExOC4xNywx'@;
put 'OC4xNywwLDAsMC0uNzEsNC43MWgyYTE2LjE5LDE2LjE5LDAsMCwxLC41OS00LDE3LDE3LDAsMCwxLDItMy40N0ExNi4zMSwxNi4zMSwwLDAsMCwyOCwxNy44NmExMC42MywxMC42MywwLDAsMCwxLTQuNDNBNy40NSw3LjQ1LDAsMCwxLDI3LDEyLjg4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUt'@;
put 'LWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTMuNzEsMjcuMTVBMTguMTcsMTguMTcsMCwwLDAsMTMsMjIuNDRhMTguNDYsMTguNDYsMCwwLDAtMi4yMi0zLjkyLDE1Ljc5LDE1Ljc5LDAsMCwxLTEtMS41NEE4LjY0LDguNjQs'@;
put 'MCwwLDEsOSwxMy4yMyw5LDksMCwwLDEsMjIuNTMsNS40N2E3LjQ1LDcuNDUsMCwwLDEsLjQzLTIsMTEsMTEsMCwwLDAtMTYsOS44LDEwLjY4LDEwLjY4LDAsMCwwLDEsNC42MywxNi4zNiwxNi4zNiwwLDAsMCwxLjEyLDEuNzgsMTcsMTcsMCwwLDEsMiwzLjQ3LDE2LjE5LDE2LjE5LDAsMCwx'@;
put 'LC41OSw0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTctLWJh'@;
put 'ZGdlZCBjbHItaS1iYWRnZSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIzLjg2LDI5LjE1SDEyLjExYS44LjgsMCwxLDAsMCwxLjZIMjMuODZhLjguOCwwLDAsMCwwLTEuNloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9'@;
put 'Ik0yMiwzMi4xNUgxNGEuOC44LDAsMSwwLDAsMS42SDIyYS44LjgsMCwxLDAsMC0xLjZaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsMi4yNWExMSwxMSwwLDAsMC0xMSwxMSwxMC42OCwxMC42OCwwLDAsMCwxLDQu'@;
put 'NjMsMTYuMzYsMTYuMzYsMCwwLDAsMS4xMiwxLjc4LDE3LDE3LDAsMCwxLDIsMy40NywxNi4xOSwxNi4xOSwwLDAsMSwuNTksNGg1LjY5VjIxLjYxbC0yLjg2LTMuMTMsMy0zYS44LjgsMCwwLDEsMS4xMywxLjEzbC0xLjg5LDEuODlMMTksMjF2Ni4xN0gyNC4zYTE2LjE5LDE2LjE5LDAsMCwx'@;
put 'LC41OS00LDE3LDE3LDAsMCwxLDItMy40N0ExNi4zMSwxNi4zMSwwLDAsMCwyOCwxNy44NmExMC42OCwxMC42OCwwLDAsMCwxLTQuNjNBMTEsMTEsMCwwLDAsMTgsMi4yNVpNMTguNDUsMTJsLTIuNzMsMi43M2EuOC44LDAsMSwxLTEuMTMtMS4xM2wyLjczLTIuNzNBLjguOCwwLDEsMSwxOC40'@;
put 'NSwxMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMy44NiwyOS4xNUgxMi4xMWEuOC44LDAsMSwwLDAsMS42SDIzLjg2YS44LjgsMCwwLDAsMC0xLjZaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1z'@;
put 'b2xpZC1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIyLDMyLjE1SDE0YS44LjgsMCwxLDAsMCwxLjZIMjJhLjguOCwwLDEsMCwwLTEuNloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIi8+XG4gICAgICAgICAg'@;
put 'ICA8cGF0aCBkPSJNMjIuNSw2QTcuNDcsNy40NywwLDAsMSwyMywzLjQ0YTExLDExLDAsMCwwLTE2LDkuOCwxMC42OCwxMC42OCwwLDAsMCwxLDQuNjMsMTYuMzYsMTYuMzYsMCwwLDAsMS4xMiwxLjc4LDE3LDE3LDAsMCwxLDIsMy40NywxNi4xOSwxNi4xOSwwLDAsMSwuNTksNGg1LjY5VjIx'@;
put 'LjYxbC0yLjg2LTMuMTMsMy0zYS44LjgsMCwwLDEsMS4xMywxLjEzbC0xLjg5LDEuODlMMTksMjF2Ni4xN0gyNC4zYTE2LjE5LDE2LjE5LDAsMCwxLC41OS00LDE3LDE3LDAsMCwxLDItMy40N0ExNi4zMSwxNi4zMSwwLDAsMCwyOCwxNy44NmExMC42MywxMC42MywwLDAsMCwxLTQuNDNBNy41'@;
put 'LDcuNSwwLDAsMSwyMi41LDZabS00LDYtMi43MywyLjczYS44LjgsMCwxLDEtMS4xMy0xLjEzbDIuNzMtMi43M0EuOC44LDAsMSwxLDE4LjQ1LDEyWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUg'@;
put 'Y3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC00LS1iYWRnZWQgY2xyLWktYmFkZ2UiLz4nKSx5LkNsclNoYXBlRG93bmxvYWQ9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0'@;
put 'bGluZS1wYXRoLTEiIGQ9Ik0zMSwzMUg1YTEsMSwwLDAsMCwwLDJIMzFhMSwxLDAsMCwwLDAtMloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTE4LDI5LjQ4LDI4LjYxLDE4Ljg3YTEsMSwwLDAsMC0xLjQx'@;
put 'LTEuNDFMMTksMjUuNjVWNWExLDEsMCwwLDAtMiwwVjI1LjY1TDguODEsMTcuNDZhMSwxLDAsMSwwLTEuNDEsMS40MVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0zMSwzMUg1'@;
put 'YTEsMSwwLDAsMCwwLDJIMzFhMSwxLDAsMCwwLDAtMloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiIGQ9Ik0xOCwyOS40OCwyOC42MSwxOC44N2ExLDEsMCwwLDAtMS40MS0xLjQxTDE5'@;
put 'LDI1LjY1VjVhMSwxLDAsMCwwLTIsMFYyNS42NUw4LjgxLDE3LjQ2YTEsMSwwLDEsMC0xLjQxLDEuNDFaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIz'@;
put 'MCIgY3k9IjYiIHI9IjUiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgZD0iTTMxLDMxSDVhMSwxLDAsMCwwLDAsMkgzMWExLDEsMCwwLDAsMC0yWiIvPlxuICAgICAgICAgICAgICAg'@;
put 'IDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIiBkPSJNMTgsMjkuNDgsMjguNjEsMTguODdhMSwxLDAsMCwwLTEuNDEtMS40MUwxOSwyNS42NVY1YTEsMSwwLDAsMC0yLDBWMjUuNjVMOC44MSwxNy40NmExLDEsMCwxLDAt'@;
put 'MS40MSwxLjQxWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhB'@;
put 'MS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIi8+JykseS5DbHJTaGFwZVVwbG9hZD0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMxLDMxSDVh'@;
put 'MSwxLDAsMCwwLDAsMkgzMWExLDEsMCwwLDAsMC0yWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNOC44MSwxNSwxNyw2LjgzVjI3LjQ4YTEsMSwwLDAsMCwyLDBWNi44M0wyNy4xOSwxNWExLDEsMCwwLDAs'@;
put 'MS40MS0xLjQxTDE4LDMsNy4zOSwxMy42MUExLDEsMCwxLDAsOC44MSwxNVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgZD0iTTMxLDMxSDVjLTAuNiwwLTEsMC40LTEsMXMwLjQs'@;
put 'MSwxLDFoMjZjMC42LDAsMS0wLjQsMS0xUzMxLjYsMzEsMzEsMzF6Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik04LjgsMTVMMTcsNi44djIwLjZjMCwwLjYsMC40LDEsMSwx'@;
put 'czEtMC40LDEtMVY2LjhMMjAuMSw4bDEtMS44TDE4LDNMNy40LDEzLjZDNywxNCw2LjksMTQuNiw3LjIsMTVzMSwwLjUsMS40LDAuMUM4LjcsMTUuMSw4LjgsMTUuMSw4LjgsMTV6Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWkt'@;
put 'b3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi45LDEuMUwyMS4xLDExYy0wLjQsMC42LTAuMiwxLjQsMC4zLDEuOGMwLjIsMC4yLDAuNSwwLjIsMC44LDAuMmgxMS41YzAuNywwLDEuMy0wLjUsMS4zLTEuMmMwLTAuMy0wLjEtMC41LTAuMi0wLjhsLTUuNy05Ljlj'@;
put 'LTAuNC0wLjYtMS4xLTAuOC0xLjgtMC41QzI3LjEsMC44LDI3LDEsMjYuOSwxLjF6Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMzEsMzFINWExLDEsMCwwLDAsMCwySDMxYTEs'@;
put 'MSwwLDAsMCwwLTJaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiBkPSJNOC44MSwxNSwxNyw2LjgzVjI3LjQ4YTEsMSwwLDAsMCwyLDBWNi44M0wyNy4xOSwxNWExLDEsMCwwLDAsMS40'@;
put 'MS0xLjQxTDE4LDMsNy4zOSwxMy42MUExLDEsMCwxLDAsOC44MSwxNVoiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPicp'@;
put 'LHkuQ2xyU2hhcGVMb2NrPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMTguMDksMjAuNTlBMi40MSwyLjQxLDAsMCwwLDE3LDI1LjE0VjI4aDJWMjUuMjNhMi40MSwyLjQxLDAsMCwwLS45MS00LjY0WiIvPlxu'@;
put 'ICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMjYsMTVWMTAuNzJhOC4yLDguMiwwLDAsMC04LTguMzYsOC4yLDguMiwwLDAsMC04LDguMzZWMTVIN1YzMmEyLDIsMCwwLDAsMiwySDI3YTIsMiwwLDAsMCwyLTJWMTVa'@;
put 'TTEyLDEwLjcyYTYuMiw2LjIsMCwwLDEsNi02LjM2LDYuMiw2LjIsMCwwLDEsNiw2LjM2VjE1SDEyWk05LDMyVjE3SDI3VjMyWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0yNiwxNVYxMC43MmE4LjIsOC4yLDAs'@;
put 'MCwwLTgtOC4zNiw4LjIsOC4yLDAsMCwwLTgsOC4zNlYxNUg3VjMyYTIsMiwwLDAsMCwyLDJIMjdhMiwyLDAsMCwwLDItMlYxNVpNMTksMjUuMjNWMjhIMTdWMjUuMTRhMi40LDIuNCwwLDEsMSwyLC4wOVpNMjQsMTVIMTJWMTAuNzJhNi4yLDYuMiwwLDAsMSw2LTYuMzYsNi4yLDYuMiwwLDAs'@;
put 'MSw2LDYuMzZaIi8+JykseS5DbHJTaGFwZVVubG9jaz0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTEyLDI1LjE0VjI4aDJWMjUuMjNhMi40MiwyLjQyLDAsMSwwLTItLjA5WiIvPlxuICAgICAgICAgICAgICAg'@;
put 'IDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMjYsMmE4LjIsOC4yLDAsMCwwLTgsOC4zNlYxNUgyVjMyYTIsMiwwLDAsMCwyLDJIMjJhMiwyLDAsMCwwLDItMlYxNUgyMFYxMC4zNkE2LjIsNi4yLDAsMCwxLDI2LDRhNi4yLDYuMiwwLDAsMSw2'@;
put 'LDYuMzZ2Ni44M2ExLDEsMCwwLDAsMiwwVjEwLjM2QTguMiw4LjIsMCwwLDAsMjYsMlpNMjIsMTdWMzJINFYxN1oiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMjYsMmE4LjIsOC4yLDAsMCwwLTgsOC4zNlYxNUgy'@;
put 'VjMyYTIsMiwwLDAsMCwyLDJIMjJhMiwyLDAsMCwwLDItMlYxNUgyMFYxMC4zNkE2LjIsNi4yLDAsMCwxLDI2LDRhNi4yLDYuMiwwLDAsMSw2LDYuMzZ2Ni44M2ExLDEsMCwwLDAsMiwwVjEwLjM2QTguMiw4LjIsMCwwLDAsMjYsMlpNMTQsMjUuMjNWMjhIMTJWMjUuMTRhMi40LDIuNCwwLDEs'@;
put 'MSwyLC4wOVoiLz4nKSx5LkNsclNoYXBlVXNlcnM9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xNy45LDE3LjNjMi43LDAsNC44LTIuMiw0LjgtNC45YzAtMi43LTIuMi00LjgtNC45LTQuOGMtMi43LDAtNC44'@;
put 'LDIuMi00LjgsNC44QzEzLDE1LjEsMTUuMiwxNy4zLDE3LjksMTcuM3ogTTE3LjgsOS42QzE3LjksOS42LDE3LjksOS42LDE3LjgsOS42YzEuNiwwLDIuOSwxLjMsMi45LDIuOXMtMS4zLDIuOC0yLjksMi44Yy0xLjYsMC0yLjgtMS4zLTIuOC0yLjhDMTUsMTAuOSwxNi4zLDkuNiwxNy44LDku'@;
put 'NnoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTMyLjcsMTYuN2MtMS45LTEuNy00LjQtMi42LTctMi41Yy0wLjMsMC0wLjUsMC0wLjgsMGMtMC4yLDAuOC0wLjUsMS41LTAuOSwyLjFjMC42LTAuMSwxLjEt'@;
put 'MC4xLDEuNy0wLjFjMS45LTAuMSwzLjgsMC41LDUuMywxLjZWMjVoMnYtOEwzMi43LDE2Ljd6Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIGQ9Ik0yMy40LDcuOGMwLjUtMS4yLDEuOS0xLjgsMy4yLTEuM2MxLjIs'@;
put 'MC41LDEuOCwxLjksMS4zLDMuMmMtMC40LDAuOS0xLjMsMS41LTIuMiwxLjVjLTAuMiwwLTAuNSwwLTAuNy0wLjFjMC4xLDAuNSwwLjEsMSwwLjEsMS40YzAsMC4yLDAsMC40LDAsMC42YzAuMiwwLDAuNCwwLjEsMC42LDAuMWMyLjUsMCw0LjUtMiw0LjUtNC40YzAtMi41LTItNC41LTQuNC00'@;
put 'LjVjLTEuNiwwLTMsMC44LTMuOCwyLjJDMjIuNSw2LjgsMjMsNy4yLDIzLjQsNy44eiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiBkPSJNMTIsMTYuNGMtMC40LTAuNi0wLjctMS4zLTAuOS0yLjFjLTAuMywwLTAu'@;
put 'NSwwLTAuOCwwYy0yLjYtMC4xLTUuMSwwLjgtNywyLjRMMywxN3Y4aDJ2LTcuMmMxLjYtMS4xLDMuNC0xLjcsNS4zLTEuNkMxMC45LDE2LjIsMTEuNSwxNi4zLDEyLDE2LjR6Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRo'@;
put 'LTUiIGQ9Ik0xMC4zLDEzLjFjMC4yLDAsMC40LDAsMC42LTAuMWMwLTAuMiwwLTAuNCwwLTAuNmMwLTAuNSwwLTEsMC4xLTEuNGMtMC4yLDAuMS0wLjUsMC4xLTAuNywwLjFjLTEuMywwLTIuNC0xLjEtMi40LTIuNGMwLTEuMywxLjEtMi40LDIuNC0yLjRjMSwwLDEuOSwwLjYsMi4zLDEuNWMw'@;
put 'LjQtMC41LDEtMSwxLjUtMS40Yy0xLjMtMi4xLTQtMi44LTYuMS0xLjVjLTIuMSwxLjMtMi44LDQtMS41LDYuMUM3LjMsMTIuMyw4LjcsMTMuMSwxMC4zLDEzLjF6Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIGQ9'@;
put 'Ik0yNi4xLDIyLjdsLTAuMi0wLjNjLTItMi4yLTQuOC0zLjUtNy44LTMuNGMtMy0wLjEtNS45LDEuMi03LjksMy40TDEwLDIyLjd2Ny42YzAsMC45LDAuNywxLjcsMS43LDEuN2MwLDAsMCwwLDAsMGgxMi44YzAuOSwwLDEuNy0wLjgsMS43LTEuN2MwLDAsMCwwLDAsMFYyMi43eiBNMjQuMSwz'@;
put 'MEgxMnYtNi42YzEuNi0xLjYsMy44LTIuNCw2LjEtMi40YzIuMi0wLjEsNC40LDAuOCw2LDIuNFYzMHoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgZD0iTTExLjA5LDE0LjU3Yy4x'@;
put 'LDAsLjIsMCwuMzEsMGE2LjQzLDYuNDMsMCwwLDEsLjA5LTIsMi4wOSwyLjA5LDAsMSwxLDEuNDctMyw2LjU4LDYuNTgsMCwwLDEsMS41NS0xLjMxLDQuMDksNC4wOSwwLDEsMC0zLjQyLDYuMzNaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0'@;
put 'ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiIGQ9Ik0xMywxOC4xNGE2LjUzLDYuNTMsMCwwLDEtMS4yOC0yLjJsLS42MywwYTguNjcsOC42NywwLDAsMC02LjQzLDIuNTJsLS4yNC4yOHY3aDJWMTkuNTFhNyw3LDAsMCwxLDQuNjctMS42QTguMDksOC4wOSwwLDAsMSwxMywxOC4x'@;
put 'NFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIgZD0iTTMxLjM1LDE4LjQyQTguNTksOC41OSwwLDAsMCwyNSwxNS45MWMtLjMyLDAtLjYsMC0uOS4wNmE2LjUzLDYuNTMsMCwwLDEt'@;
put 'MS4zNSwyLjI1QTcuOSw3LjksMCwwLDEsMjUsMTcuOTFhNi45NCw2Ljk0LDAsMCwxLDQuNjQsMS41OHY2LjI3aDJWMTguN1oiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYWxlcnRlZCIgZD0iTTE4'@;
put 'LjEsMTkuNzNBOS42OSw5LjY5LDAsMCwwLDExLDIyLjQ3bC0uMjUuMjh2Ny4zM2ExLjU3LDEuNTcsMCwwLDAsMS42MSwxLjU0SDIzLjgzYTEuNTcsMS41NywwLDAsMCwxLjYxLTEuNTRWMjIuNzNsLS4yNS0uMjhBOS41OCw5LjU4LDAsMCwwLDE4LjEsMTkuNzNabTUuMzMsOS44OEgxMi43M1Yy'@;
put 'My41NWE4LjA4LDguMDgsMCwwLDEsNS4zNy0xLjgyLDgsOCwwLDAsMSw1LjMzLDEuOFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYWxlcnRlZCIgZD0iTTIwLjI4LDE0LjI3YTIuNDYsMi40Niww'@;
put 'LDEsMS0yLjQyLTIuODksMi40NCwyLjQ0LDAsMCwxLDEsLjI0LDMuNjcsMy42NywwLDAsMSwuNDMtMiw0LjQxLDQuNDEsMCwwLDAtMS40OC0uMjdBNC40Nyw0LjQ3LDAsMSwwLDIyLjE0LDE1LDMuNjksMy42OSwwLDAsMSwyMC4yOCwxNC4yN1oiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBj'@;
put 'bGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNi0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI3LjE4LjhsLTUuNzIsOS45MWExLjI4LDEuMjgsMCwwLDAsMS4xLDEuOTFIMzRhMS4yOCwxLjI4LDAsMCwwLDEuMS0xLjkxTDI5LjM5LjhBMS4yOCwxLjI4'@;
put 'LDAsMCwwLDI3LjE4LjhaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMTEuMDksMTQuNTdjLjEsMCwuMiwwLC4zMSwwYTYuNDMsNi40MywwLDAsMSwuMDktMiwyLjA5LDIuMDks'@;
put 'MCwxLDEsMS40Ny0zLDYuNTgsNi41OCwwLDAsMSwxLjU1LTEuMzEsNC4wOSw0LjA5LDAsMSwwLTMuNDIsNi4zM1oiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiIGQ9Ik0xMywxOC4xNGE2'@;
put 'LjUzLDYuNTMsMCwwLDEtMS4yOC0yLjJsLS42MywwYTguNjcsOC42NywwLDAsMC02LjQzLDIuNTJsLS4yNC4yOHY3aDJWMTkuNTFhNyw3LDAsMCwxLDQuNjctMS42QTguMDksOC4wOSwwLDAsMSwxMywxOC4xNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGlu'@;
put 'ZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiIGQ9Ik0zMS4zNSwxOC40MkE4LjU5LDguNTksMCwwLDAsMjUsMTUuOTFjLS4zMiwwLS42LDAtLjkuMDZhNi41Myw2LjUzLDAsMCwxLTEuMzUsMi4yNUE3LjksNy45LDAsMCwxLDI1LDE3LjkxYTYuOTQsNi45NCwwLDAsMSw0'@;
put 'LjY0LDEuNTh2Ni4yN2gyVjE4LjdaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIiBkPSJNMTcuODYsMTguM2E0LjQ3LDQuNDcsMCwxLDAtNC40Ny00LjQ3QTQuNDcsNC40NywwLDAsMCwx'@;
put 'Ny44NiwxOC4zWm0wLTYuOTNhMi40NywyLjQ3LDAsMSwxLTIuNDcsMi40N0EyLjQ3LDIuNDcsMCwwLDEsMTcuODYsMTEuMzdaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYmFkZ2VkIiBkPSJNMTgu'@;
put 'MSwxOS43M0E5LjY5LDkuNjksMCwwLDAsMTEsMjIuNDdsLS4yNS4yOHY3LjMzYTEuNTcsMS41NywwLDAsMCwxLjYxLDEuNTRIMjMuODNhMS41NywxLjU3LDAsMCwwLDEuNjEtMS41NFYyMi43M2wtLjI1LS4yOEE5LjU4LDkuNTgsMCwwLDAsMTguMSwxOS43M1ptNS4zMyw5Ljg4SDEyLjczVjIz'@;
put 'LjU1YTguMDgsOC4wOCwwLDAsMSw1LjM3LTEuODIsOCw4LDAsMCwxLDUuMzMsMS44WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTYtLWJhZGdlZCIgZD0iTTI2LjM3LDEyYTIsMiwwLDAsMS0yLjA5LjQy'@;
put 'LDYuNTMsNi41MywwLDAsMSwuMTUsMS4zOCw2LjU5LDYuNTksMCwwLDEsMCwuNjgsNCw0LDAsMCwwLC41Ny4wNiw0LjA4LDQuMDgsMCwwLDAsMy4zLTEuN0E3LjQ1LDcuNDUsMCwwLDEsMjYuMzcsMTJaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJh'@;
put 'ZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNy0tYmFkZ2VkIiBkPSJNMjIuOTUsNi45M2E0LjE2LDQuMTYsMCwwLDAtMS40NywxLjQ0QTYuNTksNi41OSwwLDAsMSwyMyw5Ljc3YTIuMSwyLjEsMCwwLDEsLjU5LS44M0E3LjQ0LDcuNDQsMCwwLDEsMjIuOTUsNi45M1oiLz5cbiAgICAgICAgICAg'@;
put 'ICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTgtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwLjMzIiBjeT0iNS42NyIgcj0iNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xp'@;
put 'ZC1wYXRoLTEiIGQ9Ik0xMiwxNi4xNHEtLjQzLDAtLjg3LDBhOC42Nyw4LjY3LDAsMCwwLTYuNDMsMi41MmwtLjI0LjI4djguMjhIOC41NHYtNC43bC41NS0uNjIuMjUtLjI5YTExLDExLDAsMCwxLDQuNzEtMi44NkE2LjU5LDYuNTksMCwwLDEsMTIsMTYuMTRaIi8+XG4gICAgICAgICAgICAg'@;
put 'ICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTTMxLjM0LDE4LjYzYTguNjcsOC42NywwLDAsMC02LjQzLTIuNTIsMTAuNDcsMTAuNDcsMCwwLDAtMS4wOS4wNiw2LjU5LDYuNTksMCwwLDEtMiwyLjQ1LDEwLjkxLDEwLjkxLDAsMCwxLDUsM2wuMjUu'@;
put 'MjguNTQuNjJ2NC43MWgzLjk0VjE4LjkxWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIGQ9Ik0xMS4xLDE0LjE5Yy4xMSwwLC4yLDAsLjMxLDBhNi40NSw2LjQ1LDAsMCwxLDMuMTEtNi4yOSw0LjA5LDQuMDksMCwxLDAt'@;
put 'My40Miw2LjMzWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTQiIGQ9Ik0yNC40MywxMy40NGE2LjU0LDYuNTQsMCwwLDEsMCwuNjksNC4wOSw0LjA5LDAsMCwwLC41OC4wNWguMTlBNC4wOSw0LjA5LDAsMSwwLDIxLjQ3LDgs'@;
put 'Ni41Myw2LjUzLDAsMCwxLDI0LjQzLDEzLjQ0WiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNSIgY3g9IjE3Ljg3IiBjeT0iMTMuNDUiIHI9IjQuNDciLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWkt'@;
put 'c29saWQgY2xyLWktc29saWQtcGF0aC02IiBkPSJNMTguMTEsMjAuM0E5LjY5LDkuNjksMCwwLDAsMTEsMjNsLS4yNS4yOHY2LjMzYTEuNTcsMS41NywwLDAsMCwxLjYsMS41NEgyMy44NGExLjU3LDEuNTcsMCwwLDAsMS42LTEuNTRWMjMuM0wyNS4yLDIzQTkuNTgsOS41OCwwLDAsMCwxOC4x'@;
put 'MSwyMC4zWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0xMiwxNi4xNHEtLjQzLDAtLjg3LDBhOC42Nyw4LjY3LDAsMCwwLTYuNDMsMi41MmwtLjI0LjI4djguMjhIOC41NHYtNC43'@;
put 'bC41NS0uNjIuMjUtLjI5YTExLDExLDAsMCwxLDQuNzEtMi44NkE2LjU5LDYuNTksMCwwLDEsMTIsMTYuMTRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCIgZD0iTTMxLjM0LDE4LjYzYTgu'@;
put 'NjcsOC42NywwLDAsMC02LjQzLTIuNTIsMTAuNDcsMTAuNDcsMCwwLDAtMS4wOS4wNiw2LjU5LDYuNTksMCwwLDEtMiwyLjQ1LDEwLjkxLDEwLjkxLDAsMCwxLDUsM2wuMjUuMjguNTQuNjJ2NC43MWgzLjk0VjE4LjkxWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1z'@;
put 'b2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWFsZXJ0ZWQiIGQ9Ik0xMS4xLDE0LjE5Yy4xMSwwLC4yLDAsLjMxLDBhNi40NSw2LjQ1LDAsMCwxLDMuMTEtNi4yOSw0LjA5LDQuMDksMCwxLDAtMy40Miw2LjMzWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHIt'@;
put 'aS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTQtLWFsZXJ0ZWQiIGQ9Ik0xOC4xMSwyMC4zQTkuNjksOS42OSwwLDAsMCwxMSwyM2wtLjI1LjI4djYuMzNhMS41NywxLjU3LDAsMCwwLDEuNiwxLjU0SDIzLjg0YTEuNTcsMS41NywwLDAsMCwxLjYtMS41NFYyMy4zTDI1LjIsMjNB'@;
put 'OS41OCw5LjU4LDAsMCwwLDE4LjExLDIwLjNaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtNS0tYWxlcnRlZCIgZD0iTTE3Ljg3LDE3LjkyYTQuNDYsNC40NiwwLDAsMCw0LTIuNTRBMy42NywzLjY3LDAsMCwx'@;
put 'LDE5LDkuODlsLjM1LS42MUE0LjQyLDQuNDIsMCwwLDAsMTcuODcsOWE0LjQ3LDQuNDcsMCwxLDAsMCw4LjkzWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTYtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0y'@;
put 'Ni44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdl'@;
put 'ZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgZD0iTTEyLDE2LjE0cS0uNDMsMC0uODcsMGE4LjY3LDguNjcsMCwwLDAtNi40MywyLjUybC0uMjQuMjh2OC4yOEg4LjU0di00LjdsLjU1LS42Mi4yNS0uMjlhMTEsMTEsMCwwLDEsNC43MS0yLjg2QTYuNTgsNi41OCwwLDAsMSwxMiwxNi4x'@;
put 'NFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCIgZD0iTTMxLjM0LDE4LjYzYTguNjcsOC42NywwLDAsMC02LjQzLTIuNTIsMTAuNDcsMTAuNDcsMCwwLDAtMS4wOS4wNiw2LjU5LDYuNTksMCww'@;
put 'LDEtMiwyLjQ1LDEwLjkxLDEwLjkxLDAsMCwxLDUsM2wuMjUuMjguNTQuNjJ2NC43MWgzLjk0VjE4LjkxWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMy0tYmFkZ2VkIiBkPSJNMTEuMSwxNC4xOWMuMTEsMCwu'@;
put 'MiwwLC4zMSwwYTYuNDUsNi40NSwwLDAsMSwzLjExLTYuMjksNC4wOSw0LjA5LDAsMSwwLTMuNDIsNi4zM1oiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtNC0tYmFkZ2VkIiBjeD0iMTcuODciIGN5PSIxMy40'@;
put 'NSIgcj0iNC40NyIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtNS0tYmFkZ2VkIiBkPSJNMTguMTEsMjAuM0E5LjY5LDkuNjksMCwwLDAsMTEsMjNsLS4yNS4yOHY2LjMzYTEuNTcsMS41NywwLDAsMCwxLjYsMS41'@;
put 'NEgyMy44NGExLjU3LDEuNTcsMCwwLDAsMS42LTEuNTRWMjMuM0wyNS4yLDIzQTkuNTgsOS41OCwwLDAsMCwxOC4xMSwyMC4zWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtNi0tYmFkZ2VkIiBkPSJNMjQuNDMs'@;
put 'MTMuNDRhNi41NCw2LjU0LDAsMCwxLDAsLjY5LDQuMDksNC4wOSwwLDAsMCwuNTguMDVoLjE5YTQuMDUsNC4wNSwwLDAsMCwyLjUyLTEsNy41LDcuNSwwLDAsMS01LjE0LTYuMzJBNC4xMyw0LjEzLDAsMCwwLDIxLjQ3LDgsNi41Myw2LjUzLDAsMCwxLDI0LjQzLDEzLjQ0WiIvPlxuICAgICAg'@;
put 'ICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC03LS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz4nKSx5LkNsclNoYXBlUG9wT3V0PSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1v'@;
put 'dXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMjcsMzNINWEyLDIsMCwwLDEtMi0yVjlBMiwyLDAsMCwxLDUsN0gxNVY5SDVWMzFIMjdWMjFoMlYzMUEyLDIsMCwwLDEsMjcsMzNaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0'@;
put 'bGluZS1wYXRoLTIiIGQ9Ik0xOCwzYTEsMSwwLDAsMCwwLDJIMjkuNTlMMTUuNzQsMTguODVhMSwxLDAsMSwwLDEuNDEsMS40MUwzMSw2LjQxVjE4YTEsMSwwLDAsMCwyLDBWM1oiLz4nKSx5LkNsclNoYXBlRmlsdGVyPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRs'@;
put 'aW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzMsNEgzQTEsMSwwLDAsMCwyLDVWNi42N2ExLjc5LDEuNzksMCwwLDAsLjUzLDEuMjdMMTQsMTkuNTh2MTAuMmwyLC43NlYxOWExLDEsMCwwLDAtLjI5LS43MUw0LDYuNTlWNkgzMnYuNjFMMjAuMzMsMTguMjlBMSwxLDAsMCwwLDIwLDE5'@;
put 'bDAsMTMuMjFMMjIsMzNWMTkuNUwzMy40Nyw4QTEuODEsMS44MSwwLDAsMCwzNCw2LjdWNUExLDEsMCwwLDAsMzMsNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMjIsMzNWMTkuNUwzMy40Nyw4QTEuODEsMS44'@;
put 'MSwwLDAsMCwzNCw2LjdWNWExLDEsMCwwLDAtMS0xSDNBMSwxLDAsMCwwLDIsNVY2LjY3YTEuNzksMS43OSwwLDAsMCwuNTMsMS4yN0wxNCwxOS41OHYxMC4yWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy40OCw0aC0zMUEuNTIuNTIsMCwwLDAsMiw0LjUyVjYuMjRhMS4zMywx'@;
put 'LjMzLDAsMCwwLC4zOS45NWwxMiwxMnYxMGw3LjI1LDMuNjFWMTkuMTdsMTItMTJBMS4zNSwxLjM1LDAsMCwwLDM0LDYuMjZWNC41MkEuNTIuNTIsMCwwLDAsMzMuNDgsNFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+JykseS5DbHJTaGFwZVBpbj0oMCxnLmNs'@;
put 'ckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMzLDE2LjU5YTEsMSwwLDAsMS0uNzEtLjI5TDE5LjcsMy43MWExLDEsMCwwLDEsMS40MS0xLjQxTDMzLjcxLDE0Ljg5QTEsMSwwLDAsMSwzMywxNi41OVoiLz5cbiAgICAgICAg'@;
put 'ICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTI4LjUyLDE1LjU2bC0xLjQxLTEuNDEtNy4yLDcuMmExLDEsMCwwLDAtLjI1LDEsOSw5LDAsMCwxLTEuNTMsOC4wOUw1LjU4LDE3Ljg3YTksOSwwLDAsMSw4LjA5LTEuNTMsMSwxLDAs'@;
put 'MCwwLDEtLjI1bDcuMi03LjJMMjAuNDQsNy40OGwtNi43OSw2Ljc5QTEwLjk0LDEwLjk0LDAsMCwwLDMuNDEsMTcuMTFhMSwxLDAsMCwwLDAsMS40Mmw2LjMzLDYuMzNMMi4yOSwzMi4yOWExLDEsMCwxLDAsMS40MSwxLjQxbDcuNDQtNy40NCw2LjMzLDYuMzNhMSwxLDAsMCwwLC43MS4yOWgw'@;
put 'YTEsMSwwLDAsMCwuNzEtLjMsMTEsMTEsMCwwLDAsMi44NC0xMC4yNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzMsMTYuNzFhMSwxLDAsMCwxLS43MS0uMjlMMTkuNywzLjgyYTEsMSwwLDAsMSwxLjQxLTEu'@;
put 'NDFMMzMuNzEsMTVBMSwxLDAsMCwxLDMzLDE2LjcxWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIGQ9Ik0yMC40NCw3LjU5bC02Ljc5LDYuNzlBMTAuOTQsMTAuOTQsMCwwLDAsMy40MSwxNy4yMmExLDEsMCwwLDAsMCwx'@;
put 'LjQyTDkuNzMsMjUsMi4yOSwzMi40MWExLDEsMCwxLDAsMS40MSwxLjQxbDcuNDQtNy40NCw2LjMzLDYuMzNhMSwxLDAsMCwwLC43MS4yOWgwYTEsMSwwLDAsMCwuNzEtLjMsMTEsMTEsMCwwLDAsMi44NC0xMC4yNGw2Ljc5LTYuNzlaIi8+JykseS5DbHJTaGFwZUZpbGU9KDAsZy5jbHJJY29u'@;
put 'U1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0yMS44OSw0SDcuODNBMS44OCwxLjg4LDAsMCwwLDYsNS45MVYzMC4wOUExLjg4LDEuODgsMCwwLDAsNy44MywzMkgyOC4xN0ExLjg4LDEuODgsMCwwLDAsMzAsMzAuMDlWMTEuOTJabS0u'@;
put 'MywyLjQ5LDYsNS45aC02Wk04LDMwVjZIMjB2OGg4VjMwWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgZD0iTTIxLjU5LDEyLjM5VjYuNDlsMS4wNywxYTcuMzEsNy4zMSwwLDAsMSww'@;
put 'LTIuODJMMjEuODksNEg3LjgzQTEuODgsMS44OCwwLDAsMCw2LDUuOTFWMzAuMDlBMS44OCwxLjg4LDAsMCwwLDcuODMsMzJIMjguMTdBMS44OCwxLjg4LDAsMCwwLDMwLDMwLjA5VjEzLjVhNy40NSw3LjQ1LDAsMCwxLTMuOTEtMS4xMVpNMjgsMzBIOFY2SDIwdjhoOFoiLz5cbiAgICAgICAg'@;
put 'ICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNs'@;
put 'ci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiBkPSJNMjgsMTUuNFYzMEg4VjZIMjBWOC4yNWwyLjI1LTMuOUwyMS44OSw0SDcuODNBMS44OCwxLjg4LDAsMCwwLDYsNS45MVYzMC4wOUExLjg4LDEuODgsMCwwLDAsNy44MywzMkgyOC4xN0ExLjg4LDEuODgsMCwwLDAsMzAsMzAuMDlWMTUu'@;
put 'NFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4y'@;
put 'OCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0yMS44OSw0SDcuODNBMS44OCwxLjg4LDAsMCwwLDYsNS45MVYzMC4w'@;
put 'OUExLjg4LDEuODgsMCwwLDAsNy44MywzMkgyOC4xN0ExLjg4LDEuODgsMCwwLDAsMzAsMzAuMDlWMTEuOTJaTTIxLDEzVjUuODRMMjguMywxM1oiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIg'@;
put 'ZD0iTTI3LjI1LDEzSDIxVjUuODRsMS42NCwxLjZhNy4yNSw3LjI1LDAsMCwxLDAtMi43NEwyMS44OSw0SDcuODNBMS44OCwxLjg4LDAsMCwwLDYsNS45MVYzMC4wOUExLjg4LDEuODgsMCwwLDAsNy44MywzMkgyOC4xN0ExLjg4LDEuODgsMCwwLDAsMzAsMzAuMDlWMTMuNUE3LjQ3LDcuNDcs'@;
put 'MCwwLDEsMjcuMjUsMTNaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJj'@;
put 'bHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0yMi4yLDE1LjRjLTIsMC0zLjctMS42LTMuNy0zLjZjMC0wLjcsMC4yLTEuMywwLjUtMS45bDMuMi01LjVMMjEuOSw0SDcuOEM2LjgsNCw2LDQuOSw2LDUuOXYyNC4yYzAsMSwwLjgsMS45LDEuOCwx'@;
put 'LjloMjAuM2MxLDAsMS44LTAuOSwxLjgtMS45VjE1LjRIMjIuMnoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNMjYuOSwxLjFMMjEuMSwxMWMtMC40LDAuNi0w'@;
put 'LjIsMS40LDAuMywxLjhjMC4yLDAuMiwwLjUsMC4yLDAuOCwwLjJoMTEuNWMwLjcsMCwxLjMtMC41LDEuMy0xLjJjMC0wLjMtMC4xLTAuNS0wLjItMC44bC01LjctOS45Yy0wLjQtMC42LTEuMS0wLjgtMS44LTAuNUMyNy4xLDAuOCwyNywxLDI2LjksMS4xeiIvPicpLHkuQ2xyU2hhcGVQbHVz'@;
put 'PSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzAsMTdIMTlWNmExLDEsMCwxLDAtMiwwVjE3SDZhMSwxLDAsMCwwLTEsMSwuOTEuOTEsMCwwLDAsMSwuOTRIMTdWMzBhMSwxLDAsMSwwLDIsMFYxOUgzMGExLDEs'@;
put 'MCwwLDAsMS0xQTEsMSwwLDAsMCwzMCwxN1oiLz4nKSx5LkNsclNoYXBlTWludXM9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI2LDE3SDEwYTEsMSwwLDAsMCwwLDJIMjZhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPicp'@;
put 'LHkuQ2xyU2hhcGVNaW51c0NpcmNsZT0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm0wLDMwQTE0LDE0LDAsMSwxLDMyLDE4LDE0LDE0LDAsMCwxLDE4LDMyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0'@;
put 'bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjQsMTdIMTJhMSwxLDAsMCwwLDAsMkgyNGExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsMkExNiwxNiwwLDEs'@;
put 'MCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm02LDE3LjVIMTJhMS41LDEuNSwwLDAsMSwwLTNIMjRhMS41LDEuNSwwLDAsMSwwLDNaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPicpLHkuQ2xyU2hhcGVQbHVzQ2lyY2xlPSgwLGcuY2xySWNvblNWRykoJzxwYXRo'@;
put 'IGQ9Ik0yNi4xNywxN0gxOVY5LjgzYTEsMSwwLDAsMC0yLDBWMTdIOS44M2ExLDEsMCwwLDAsMCwySDE3djcuMTdhMSwxLDAsMCwwLDIsMFYxOWg3LjE3YTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBh'@;
put 'dGggZD0iTTE4LDJBMTYsMTYsMCwxLDAsMzQsMTgsMTYsMTYsMCwwLDAsMTgsMlptMCwzMEExNCwxNCwwLDEsMSwzMiwxOCwxNCwxNCwwLDAsMSwxOCwzMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzQsMThB'@;
put 'MTYsMTYsMCwxLDEsMTgsMiwxNiwxNiwwLDAsMSwzNCwxOFptLTguNDEtMS41SDE5LjVWMTAuNDFhMS41LDEuNSwwLDAsMC0zLDBWMTYuNUgxMC40MWExLjUsMS41LDAsMCwwLDAsM0gxNi41djYuMDlhMS41LDEuNSwwLDAsMCwzLDBWMTkuNWg2LjA5YTEuNSwxLjUsMCwwLDAsMC0zWiIgY2xh'@;
put 'c3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPicpLHkuQ2xyU2hhcGVCYW49KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJa'@;
put 'TTQsMThBMTMuOTMsMTMuOTMsMCwwLDEsNy40Myw4Ljg1TDI3LjE1LDI4LjU3QTE0LDE0LDAsMCwxLDQsMThabTI0LjU3LDkuMTVMOC44NSw3LjQzQTE0LDE0LDAsMCwxLDI4LjU3LDI3LjE1WiIvPicpLHkuQ2xyU2hhcGVUaW1lc0NpcmNsZT0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBjbGFz'@;
put 'cz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE5LjYxLDE4bDQuODYtNC44NmExLDEsMCwwLDAtMS40MS0xLjQxTDE4LjIsMTYuNTRsLTQuODktNC44OWExLDEsMCwwLDAtMS40MSwxLjQxTDE2Ljc4LDE4LDEyLDIyLjcyYTEsMSwwLDEsMCwxLjQxLDEuNDFsNC43'@;
put 'Ny00Ljc3LDQuNzQsNC43NGExLDEsMCwwLDAsMS40MS0xLjQxWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMTgsMzRBMTYsMTYsMCwxLDEsMzQsMTgsMTYsMTYsMCwwLDEsMTgsMzRaTTE4LDRBMTQsMTQs'@;
put 'MCwxLDAsMzIsMTgsMTQsMTQsMCwwLDAsMTgsNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm04LDIyLjFhMS40LDEuNCwwLDAsMS0yLDJs'@;
put 'LTYtNkwxMiwyNi4xMmExLjQsMS40LDAsMSwxLTItMkwxNiwxOC4wOCw5LjgzLDExLjg2YTEuNCwxLjQsMCwxLDEsMi0yTDE4LDE2LjFsNi4xNy02LjE3YTEuNCwxLjQsMCwxLDEsMiwyTDIwLDE4LjA4WiIvPicpLHkuQ2xyU2hhcGVUcmFzaD0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBjbGFz'@;
put 'cz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTI3LjE0LDM0SDguODZBMi45MywyLjkzLDAsMCwxLDYsMzFWMTEuMjNIOFYzMWEuOTMuOTMsMCwwLDAsLjg2LDFIMjcuMTRBLjkzLjkzLDAsMCwwLDI4LDMxVjExLjIzaDJWMzFBMi45MywyLjkzLDAsMCwxLDI3LjE0'@;
put 'LDM0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMzAuNzgsOUg1QTEsMSwwLDAsMSw1LDdIMzAuNzhhMSwxLDAsMCwxLDAsMloiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0'@;
put 'bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgeD0iMjEiIHk9IjEzIiB3aWR0aD0iMiIgaGVpZ2h0PSIxNSIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiB4PSIxMyIgeT0iMTMiIHdpZHRoPSIyIiBoZWlnaHQ9IjE1'@;
put 'Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIGQ9Ik0yMyw1Ljg2SDIxLjFWNEgxNC45VjUuODZIMTNWNGEyLDIsMCwwLDEsMS45LTJoNi4yQTIsMiwwLDAsMSwyMyw0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRo'@;
put 'IGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik02LDlWMzFhMi45MywyLjkzLDAsMCwwLDIuODYsM0gyNy4wOUEyLjkzLDIuOTMsMCwwLDAsMzAsMzFWOVptOSwyMEgxM1YxNGgyWm04LDBIMjFWMTRoMloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0i'@;
put 'Y2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNMzAuNzMsNUgyM1Y0QTIsMiwwLDAsMCwyMSwyaC02LjJBMiwyLDAsMCwwLDEzLDRWNUg1QTEsMSwwLDEsMCw1LDdIMzAuNzNhMSwxLDAsMCwwLDAtMloiLz4nKSx5LkNsclNoYXBlVGFnPSgwLGcuY2xySWNvblNWRykoJzxjaXJj'@;
put 'bGUgY3g9IjEwLjUyIiBjeT0iMTAuNTIiIHI9IjEuNDMiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzEuOTMsMTkuMiwxNy4zMyw0LjZBMiwyLDAsMCwwLDE1LjkyLDRMNiw0QTIsMiwwLDAsMCw0LDZsMCw5Ljky'@;
put 'YTIsMiwwLDAsMCwuNTksMS40MWwxNC42LDE0LjZhMiwyLDAsMCwwLDIuODMsMGw5LjktOS45QTIsMiwwLDAsMCwzMS45MywxOS4yWk0yMC42MiwzMC41Miw2LDE1LjkxVjZoOS45MmwxNC42LDE0LjYyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAg'@;
put 'ICAgICAgICAgIDxjaXJjbGUgY3g9IjEwLjUyIiBjeT0iMTAuNTIiIHI9IjEuNDMiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzEuOTMsMTkuMmwtMy44LTMuOEgyNS4zMWw1LjIy'@;
put 'LDUuMjItOS45LDkuOUw2LDE1LjkxVjZoOS45MmwzLjQxLDMuNDEsMS0xLjc4LTMtM0EyLDIsMCwwLDAsMTUuOTIsNEw2LDRBMiwyLDAsMCwwLDQsNmwwLDkuOTJhMiwyLDAsMCwwLC41OSwxLjQxbDE0LjYsMTQuNmEyLDIsMCwwLDAsMi44MywwbDkuOS05LjlBMiwyLDAsMCwwLDMxLjkzLDE5'@;
put 'LjJaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwx'@;
put 'MUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjEwLjUyIiBjeT0iMTAuNTIiIHI9IjEu'@;
put 'NDMiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMxLjkzLDE5LjIsMTcuMzMsNC42QTIsMiwwLDAsMCwxNS45Miw0TDYsNEEyLDIsMCwwLDAsNCw2bDAsOS45MmEyLDIsMCwwLDAsLjU5'@;
put 'LDEuNDFsMTQuNiwxNC42YTIsMiwwLDAsMCwyLjgzLDBsOS45LTkuOUEyLDIsMCwwLDAsMzEuOTMsMTkuMlpNMjAuNjIsMzAuNTIsNiwxNS45MVY2aDkuOTJsMTQuNiwxNC42MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIvPlxu'@;
put 'ICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMS45MywxOS4yLDE3LjMzLDQuNkEyLDIsMCww'@;
put 'LDAsMTUuOTIsNEw2LDRBMiwyLDAsMCwwLDQsNmwwLDkuOTJhMiwyLDAsMCwwLC41OSwxLjQxbDE0LjYsMTQuNmEyLDIsMCwwLDAsMi44MywwbDkuOS05LjlBMiwyLDAsMCwwLDMxLjkzLDE5LjJaTTkuNjUsMTEuMzFhMS42NiwxLjY2LDAsMSwxLDEuNjYtMS42NkExLjY2LDEuNjYsMCwwLDEs'@;
put 'OS42NSwxMS4zMVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOC40NiwxNS43M0gyMi4yM0EzLjY4LDMuNjgsMCwwLDEsMTksMTAuMjJsMS40My0yLjQ3TDE3LjMzLDQuNkEyLDIsMCwwLDAsMTUuOTIsNEw2LDRBMiwy'@;
put 'LDAsMCwwLDQsNmwwLDkuOTJhMiwyLDAsMCwwLC41OSwxLjQxbDE0LjYsMTQuNmEyLDIsMCwwLDAsMi44MywwbDkuOS05LjlhMiwyLDAsMCwwLDAtMi44M1pNOS42NSwxMS4zMWExLjY2LDEuNjYsMCwxLDEsMS42Ni0xLjY2QTEuNjYsMS42NiwwLDAsMSw5LjY1LDExLjMxWiIgY2xhc3M9ImNs'@;
put 'ci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuNDdsLTUuNzIsOS45MWExLjI4LDEuMjgsMCwwLDAsMS4xLDEuOTFIMzMuNjhhMS4yOCwxLjI4LDAsMCwwLDEuMS0xLjkxTDI5LjA2LDEuNDdBMS4y'@;
put 'OCwxLjI4LDAsMCwwLDI2Ljg1LDEuNDdaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzEuOTMsMTkuMiwxNy4zMyw0LjZBMiwyLDAsMCwwLDE1LjkyLDRMNiw0QTIs'@;
put 'MiwwLDAsMCw0LDZsMCw5LjkyYTIsMiwwLDAsMCwuNTksMS40MWwxNC42LDE0LjZhMiwyLDAsMCwwLDIuODMsMGw5LjktOS45QTIsMiwwLDAsMCwzMS45MywxOS4yWk05LjY1LDExLjMxYTEuNjYsMS42NiwwLDEsMSwxLjY2LTEuNjZBMS42NiwxLjY2LDAsMCwxLDkuNjUsMTEuMzFaIiBjbGFz'@;
put 'cz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2LjMzIiByPSI1IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIv'@;
put 'PicpLHkuQ2xyU2hhcGVUYWdzPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMy4xNiwxOS4xMywxOS41OCw1LjU1QTEuOTIsMS45MiwwLDAsMCwxOC4yMSw1SDE2LjEyTDMxLjc1LDIwLjQ1LDIxLjIyLDMxLjA3YTEuOTMsMS45MywwLDAsMCwyLjczLDBsOS4yMS05LjIxYTEuOTMsMS45'@;
put 'MywwLDAsMCwwLTIuNzNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iNy44MSIgY3k9IjExLjE0IiByPSIxLjMzIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICAgICAg'@;
put 'ICAgICAgPHBhdGggZD0iTTI3Ljc4LDE5LjE3LDE0LjIsNS41OEExLjkyLDEuOTIsMCwwLDAsMTIuODMsNUgzLjYxQTEuOTMsMS45MywwLDAsMCwxLjY4LDYuOTN2OS4yMmExLjkyLDEuOTIsMCwwLDAsLjU3LDEuMzZMMTUuODQsMzEuMWExLjkzLDEuOTMsMCwwLDAsMi43MywwbDkuMjEtOS4y'@;
put 'MUExLjkzLDEuOTMsMCwwLDAsMjcuNzgsMTkuMTdaTTE3LjI2LDI5LjY5LDMuNjksMTYuMTVWN2g5LjFMMjYuMzcsMjAuNDhaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iNy44MSIgY3k9IjExLjE0IiByPSIx'@;
put 'LjMzIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNy43OCwxOS4xNywxNC4yLDUuNThBMS45MiwxLjkyLDAsMCwwLDEyLjgzLDVIMy42MUExLjkzLDEuOTMsMCwwLDAsMS42OCw2Ljkz'@;
put 'djkuMjJhMS45MiwxLjkyLDAsMCwwLC41NywxLjM2TDE1Ljg0LDMxLjFhMS45MywxLjkzLDAsMCwwLDIuNzMsMGw5LjIxLTkuMjFBMS45MywxLjkzLDAsMCwwLDI3Ljc4LDE5LjE3Wk0xNy4yNiwyOS42OSwzLjY5LDE2LjE1VjdoOS4xTDI2LjM3LDIwLjQ4WiIgY2xhc3M9ImNsci1pLW91dGxp'@;
put 'bmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuMTYsMTkuMTMsMTkuNTgsNS41NUExLjkyLDEuOTIsMCwwLDAsMTguMjEsNUgxNi4xMkwzMS43NSwyMC40NSwyMS4yMiwzMS4wN2ExLjkzLDEuOTMsMCwwLDAsMi43Myww'@;
put 'bDkuMjEtOS4yMWExLjkzLDEuOTMsMCwwLDAsMC0yLjczWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRn'@;
put 'ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iNy44MSIgY3k9IjExLjE0IiByPSIxLjMzIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIvPlxuICAg'@;
put 'ICAgICAgICAgPHBhdGggZD0iTTI3Ljc4LDE5LjE3LDI0LDE1LjRIMjIuMjNBMy42NSwzLjY1LDAsMCwxLDIxLDE1LjE5bDUuMzMsNS4yOS05LjExLDkuMjFMMy42OSwxNi4xNVY3aDkuMWw2LDUuOTRhMy42OCwzLjY4LDAsMCwxLC4xLTIuNjlMMTQuMiw1LjU4QTEuOTIsMS45MiwwLDAsMCwx'@;
put 'Mi44Myw1SDMuNjFBMS45MywxLjkzLDAsMCwwLDEuNjgsNi45M3Y5LjIyYTEuOTIsMS45MiwwLDAsMCwuNTcsMS4zNkwxNS44NCwzMS4xYTEuOTMsMS45MywwLDAsMCwyLjczLDBsOS4yMS05LjIxQTEuOTMsMS45MywwLDAsMCwyNy43OCwxOS4xN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1h'@;
put 'bGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjAuODMsNi44LDE5LjU4LDUuNTVBMS45MiwxLjkyLDAsMCwwLDE4LjIxLDVIMTYuMTJMMTkuNzksOC42WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0'@;
put 'bGluZS1wYXRoLTMtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy4xNiwxOS4xMywyOS40MywxNS40SDI2LjY1bDUuMSw1TDIxLjIyLDMxLjA3YTEuOTMsMS45MywwLDAsMCwyLjczLDBsOS4yMS05LjIxYTEuOTMsMS45MywwLDAsMCwwLTIuNzNaIiBjbGFzcz0iY2xyLWkt'@;
put 'b3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgs'@;
put 'MS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy4xNiwxOS4xMywxOS41OCw1LjU1QTEuOTIsMS45MiwwLDAsMCwxOC4y'@;
put 'MSw1SDE2LjEyTDMxLjc1LDIwLjQ1LDIxLjIyLDMxLjA3YTEuOTMsMS45MywwLDAsMCwyLjczLDBsOS4yMS05LjIxYTEuOTMsMS45MywwLDAsMCwwLTIuNzNaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjcuNzgsMTku'@;
put 'MTcsMTQuMiw1LjU4QTEuOTIsMS45MiwwLDAsMCwxMi44Myw1SDMuNjFBMS45MywxLjkzLDAsMCwwLDEuNjgsNi45M3Y5LjIyYTEuOTIsMS45MiwwLDAsMCwuNTcsMS4zNkwxNS44NCwzMS4xYTEuOTMsMS45MywwLDAsMCwyLjczLDBsOS4yMS05LjIxQTEuOTMsMS45MywwLDAsMCwyNy43OCwx'@;
put 'OS4xN1pNNi42NywxMS43MkExLjczLDEuNzMsMCwxLDEsOC40LDEwLDEuNzMsMS43MywwLDAsMSw2LjY3LDExLjcyWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI3Ljc4LDE5LjE3LDE0LjIsNS41OEExLjkyLDEuOTIs'@;
put 'MCwwLDAsMTIuODMsNUgzLjYxQTEuOTMsMS45MywwLDAsMCwxLjY4LDYuOTN2OS4yMmExLjkyLDEuOTIsMCwwLDAsLjU3LDEuMzZMMTUuODQsMzEuMWExLjkzLDEuOTMsMCwwLDAsMi43MywwbDkuMjEtOS4yMUExLjkzLDEuOTMsMCwwLDAsMjcuNzgsMTkuMTdaTTYuNjcsMTEuNzJBMS43Mywx'@;
put 'LjczLDAsMSwxLDguNCwxMCwxLjczLDEuNzMsMCwwLDEsNi42NywxMS43MloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuMTYsMTkuMTMsMTkuNTgsNS41NUExLjkyLDEuOTIsMCwwLDAs'@;
put 'MTguMjEsNUgxNi4xMkwzMS43NSwyMC40NSwyMS4yMiwzMS4wN2ExLjkzLDEuOTMsMCwwLDAsMi43MywwbDkuMjEtOS4yMWExLjkzLDEuOTMsMCwwLDAsMC0yLjczWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAg'@;
put 'IDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMC44Myw2LjgsMTkuNTgsNS41NUExLjkyLDEuOTIsMCwwLDAsMTguMjEs'@;
put 'NUgxNi4xMkwxOS43OSw4LjZaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuMTYsMTkuMTMsMjkuNDMsMTUuNEgyNi42NWw1LjEsNUwyMS4yMiwzMS4wN2ExLjkzLDEuOTMsMCwwLDAs'@;
put 'Mi43MywwbDkuMjEtOS4yMWExLjkzLDEuOTMsMCwwLDAsMC0yLjczWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI3Ljc4LDE5LjE3LDI0LDE1LjRIMjIuMjNhMy42NywzLjY3LDAsMCwx'@;
put 'LTMuMzYtNS4xNUwxNC4yLDUuNThBMS45MiwxLjkyLDAsMCwwLDEyLjgzLDVIMy42MUExLjkzLDEuOTMsMCwwLDAsMS42OCw2LjkzdjkuMjJhMS45MiwxLjkyLDAsMCwwLC41NywxLjM2TDE1Ljg0LDMxLjFhMS45MywxLjkzLDAsMCwwLDIuNzMsMGw5LjIxLTkuMjFBMS45MywxLjkzLDAsMCww'@;
put 'LDI3Ljc4LDE5LjE3Wk02LjY3LDExLjcyQTEuNzMsMS43MywwLDEsMSw4LjQsMTAsMS43MywxLjczLDAsMCwxLDYuNjcsMTEuNzJaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0zLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUs'@;
put 'MS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC00LS1hbGVydGVk'@;
put 'IGNsci1pLWFsZXJ0Ii8+JykseS5DbHJTaGFwZUhpc3Rvcnk9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE4LDkuODNhMSwxLDAsMCwwLTEsMXY4LjcybDUuOSw0QTEsMSwwLDAsMCwyNCwyMS44OGwtNS0zLjM5VjEwLjgzQTEsMSwwLDAsMCwxOCw5LjgzWiIgY2xhc3M9ImNsci1pLW91'@;
put 'dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwyQTE2LjA5LDE2LjA5LDAsMCwwLDQsMTAuMjZWNS4yYTEsMSwwLDAsMC0yLDBWMTRoOC44YTEsMSwwLDAsMCwwLTJINS4zNUExNCwxNCwwLDEsMSw4LjU4LDI4LjM1YTEsMSwwLDAsMC0xLjM1'@;
put 'LDEuNDhBMTYsMTYsMCwxLDAsMTgsMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+JykseS5DbHJTaGFwZUNsb2NrPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJabTAsMzBBMTQs'@;
put 'MTQsMCwxLDEsMzIsMTgsMTQsMTQsMCwwLDEsMTgsMzJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LjkyLDE4LjRWMTAuNzVhMSwxLDAsMCwwLTIsMHY4LjcybDUuOSw0YTEsMSwwLDEsMCwxLjExLTEuNjZa'@;
put 'IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTgsMTcuOTRBOS45NCw5Ljk0LDAsMCwxLDIzLjQxLDkuNTlsLjg1LTEuMzZhMTEuNTUsMTEuNTUsMCwxLDAtOC41MywyMUwxNiwyNy43QTEwLDEwLDAsMCwxLDgsMTcu'@;
put 'OTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LjkyLDEwLjc1YTEsMSwwLDAsMC0yLDB2OC43Mmw1LjksNGExLDEsMCwxLDAsMS4xMS0xLjY2bC01LTMuMzlaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFk'@;
put 'Z2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy4xMiwxMi44MWE3LjQ0LDcuNDQsMCwwLDEtMS45MS41OCwxNC4wNSwxNC4wNSwwLDEsMS04LjYtOC42LDcuNDQsNy40NCwwLDAsMSwuNTgtMS45MSwxNi4wNiwxNi4wNiwwLDEsMCw5'@;
put 'LjkzLDkuOTNaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCw2LjM4YTExLjU2LDExLjU2LDAsMCwwLTIuMjcsMjIuODlMMTYsMjcuN2ExMCwxMCwwLDEsMSw3LjM5LTE4LjFoMGE3'@;
put 'LjQ1LDcuNDUsMCwwLDEtLjc4LTIuMjNBMTEuNDUsMTEuNDUsMCwwLDAsMTgsNi4zOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xy'@;
put 'LWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOC45MiwxMC43NWExLDEsMCwwLDAtMiwwdjguNzJsNS45LDRhMSwxLDAsMSwwLDEuMTEtMS42NmwtNS0zLjM5WiIgY2xhc3M9ImNsci1p'@;
put 'LW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy43NywxNS4zOWgtMkExNCwxNCwwLDEsMSwyMi4wOSw0LjYxbDEtMS43NkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwzMy43NywxNS4zOVoiIGNs'@;
put 'YXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsOGE5LjgxLDkuODEsMCwwLDEsMiwuMjNsLjg1LTEuNDZhMTEuNTUsMTEuNTUsMCwxLDAtNS4xMywyMi41MkwxNiwyNy43QTEwLDEwLDAs'@;
put 'MCwxLDE4LDhaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwz'@;
put 'NC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0'@;
put 'LDE4LDE2LDE2LDAsMCwwLDE4LDJabTYuMiwyMS4xOGExLDEsMCwwLDEtMS4zOS4yOGwtNS45LTRWMTAuNzVhMSwxLDAsMCwxLDIsMFYxOC40bDUsMy4zOUExLDEsMCwwLDEsMjQuMiwyMy4xOFpNMjMuODUsOC4yM2ExMS4zOSwxMS4zOSwwLDEsMC04LjU0LDIwLjgzTDE1LDMwLjYzYTEzLDEz'@;
put 'LDAsMSwxLDkuNy0yMy43N1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy4xMiwxMi44MUE3LjQ4LDcuNDgsMCwwLDEsMjIuNjgsNy42MywxMS4yNCwxMS4yNCwwLDAsMCwxOCw2LjZhMTEuMzksMTEuMzksMCwwLDAt'@;
put 'Mi42OSwyMi40N0wxNSwzMC42M0ExMywxMywwLDAsMSwxOCw1YTEyLjgxLDEyLjgxLDAsMCwxLDQuNTEuODIsNy40Niw3LjQ2LDAsMCwxLC42OC0yLjk0LDE2LjA2LDE2LjA2LDAsMSwwLDkuOTMsOS45M1pNMjQuMiwyMy4xOGExLDEsMCwwLDEtMS4zOS4yOGwtNS45LTRWMTAuNzVhMSwxLDAs'@;
put 'MCwxLDIsMFYxOC40bDUsMy4zOUExLDEsMCwwLDEsMjQuMiwyMy4xOFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFk'@;
put 'Z2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuNzcsMTUuMzlIMjIuMjNBMy42OSwzLjY5LDAsMCwxLDE5LDEzLjU2YzAtLjA5LS4wOS0uMTgtLjEzLS4yN1YxOC40bDUsMy4zOWExLDEsMCwwLDEtMS4xMSwxLjY2'@;
put 'bC01LjktNFYxMC43NWExLDEsMCwwLDEsMS45MS0uNDFBMy42NSwzLjY1LDAsMCwxLDE5LDkuODlMMjAuNzQsN0ExMS4xOSwxMS4xOSwwLDAsMCwxOCw2LjZhMTEuMzksMTEuMzksMCwwLDAtMi42OSwyMi40N0wxNSwzMC42M0ExMywxMywwLDAsMSwxOCw1YTEyLjgsMTIuOCwwLDAsMSwzLjU3'@;
put 'LjUxbDEuNTMtMi42NkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwzMy43NywxNS4zOVoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgs'@;
put 'MS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz4nKSx5'@;
put 'LkNsclNoYXBlQWxhcm1DbG9jaz0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzEuNDcsMy44NGE1Ljc4LDUuNzgsMCwwLDAtNy4zNy0uNjMsMTYuMDgsMTYuMDgsMCwwLDEsOC4yLDcuNjVBNS43Myw1LjczLDAsMCwwLDMxLjQ3LDMuODRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHIt'@;
put 'aS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTExLjQyLDMuNDNhNS43Nyw1Ljc3LDAsMCwwLTcuNjQuNDEsNS43Miw1LjcyLDAsMCwwLS4zOCw3LjY0QTE2LjA4LDE2LjA4LDAsMCwxLDExLjQyLDMuNDNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRs'@;
put 'aW5lLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE2LjQsNC4wOUExNCwxNCwwLDAsMCw4LjExLDI3Ljg4TDUuNTYsMzAuNDNBMSwxLDAsMSwwLDcsMzEuODRsMi42Ni0yLjY2YTEzLjksMTMuOSwwLDAsMCwxNi44OC0uMDhsMi43NCwyLjc0YTEsMSwwLDAsMCwxLjQxLTEuNDFM'@;
put 'MjgsMjcuNzhBMTQsMTQsMCwwLDAsMTYuNCw0LjA5Wk0xOS41OCwyOS45QTEyLDEyLDAsMSwxLDI5LjkyLDE5LjU2LDEyLDEyLDAsMCwxLDE5LjU4LDI5LjlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI0Ljky'@;
put 'LDIwLjM0bC02LjA2LTNWOS41YS45LjksMCwwLDAtMS44LDB2OUwyNC4xMiwyMmEuOS45LDAsMSwwLC43OS0xLjYyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMS40MiwzLjQzYTUuNzcsNS43NywwLDAsMC03'@;
put 'LjY0LjQxLDUuNzIsNS43MiwwLDAsMC0uMzgsNy42NEExNi4wOCwxNi4wOCwwLDAsMSwxMS40MiwzLjQzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOC44Niw5LjVhLjkuOSww'@;
put 'LDAsMC0xLjgsMHY5TDI0LjEyLDIyYS45LjksMCwxLDAsLjc5LTEuNjJsLTYuMDYtM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjgsMjcuNzhBMTMuODgsMTMuODgsMCwwLDAs'@;
put 'MzEuNzcsMTUuNGgtMmExMi4wNywxMi4wNywwLDEsMS04LjY3LTlsMS0xLjhhMTQsMTQsMCwwLDAtMTQsMjMuMjdMNS41NiwzMC40M0ExLDEsMCwxLDAsNywzMS44NGwyLjY2LTIuNjZhMTMuOSwxMy45LDAsMCwwLDE2Ljg4LS4wOGwyLjc0LDIuNzRhMSwxLDAsMCwwLDEuNDEtMS40MVoiIGNs'@;
put 'YXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2'@;
put 'LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTExLjQyLDMuNDNhNS43Nyw1Ljc3LDAsMCwwLTcuNjQu'@;
put 'NDEsNS43Miw1LjcyLDAsMCwwLS4zOCw3LjY0QTE2LjA4LDE2LjA4LDAsMCwxLDExLjQyLDMuNDNaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjgsMjcuNzhBMTMuODgsMTMuODgsMCww'@;
put 'LDAsMzEuNzcsMTUuNEgyMi4yM0EzLjY5LDMuNjksMCwwLDEsMTksMTMuNTZMMTksMTMuNHYzLjc4TDI1LDIwLjFhMSwxLDAsMSwxLS44NywxLjhMMTcsMTguNDRWOS42OWExLDEsMCwwLDEsMiwwVjEwTDE5LDkuODlsMy01LjI4YTE0LDE0LDAsMCwwLTE0LDIzLjI3TDUuNTYsMzAuNDNBMSwx'@;
put 'LDAsMSwwLDcsMzEuODRsMi42Ni0yLjY2YTEzLjksMTMuOSwwLDAsMCwxNi44OC0uMDhsMi43NCwyLjc0YTEsMSwwLDAsMCwxLjQxLTEuNDFaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJN'@;
put 'MjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0zLS1h'@;
put 'bGVydGVkIGNsci1pLWFsZXJ0Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTEuNDIsMy40M2E1Ljc3LDUuNzcsMCwwLDAtNy42NC40MSw1LjcyLDUuNzIsMCwwLDAtLjM4LDcuNjRBMTYuMDgsMTYuMDgsMCwwLDEsMTEuNDIsMy40M1oiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNs'@;
put 'ci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjgsMjcuNzhhMTMuODksMTMuODksMCwwLDAsMy4yMS0xNC4zOUE3LjQ2LDcuNDYsMCwwLDEsMjIuNSw2YTcuNTIsNy41MiwwLDAsMSwuMTEtMS4yMUExNCwxNCwwLDAsMCw4LjExLDI3Ljg4TDUuNTYs'@;
put 'MzAuNDNBMSwxLDAsMSwwLDcsMzEuODRsMi42Ni0yLjY2YTEzLjksMTMuOSwwLDAsMCwxNi44OC0uMDhsMi43NCwyLjc0YTEsMSwwLDAsMCwxLjQxLTEuNDFabS0yLjUyLTYuMzVhMSwxLDAsMCwxLTEuMzMuNDdMMTcsMTguNDRWOS42OWExLDEsMCwwLDEsMiwwdjcuNUwyNSwyMC4xQTEsMSww'@;
put 'LDAsMSwyNS40OSwyMS40M1oiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMy0t'@;
put 'YmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTEuNDIsMy40M2E1Ljc3LDUuNzcsMCwwLDAtNy42NC40MSw1LjcyLDUuNzIsMCwwLDAtLjM4LDcuNjRBMTYuMDgsMTYuMDgsMCwwLDEsMTEuNDIsMy40M1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQg'@;
put 'Y2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4Ljg2LDkuNWEuOS45LDAsMCwwLTEuOCwwdjlMMjQuMTIsMjJhLjkuOSwwLDEsMCwuNzktMS42MmwtNi4wNi0zWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5l'@;
put 'LXBhdGgtMi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjgsMjcuNzhhMTMuODksMTMuODksMCwwLDAsMy4yMS0xNC4zOSw3LDcsMCwwLDEtMi4xMS4wNUExMiwxMiwwLDEsMSwyMi41Niw2LjksNy41NCw3LjU0LDAsMCwxLDIyLjUsNmE3LjUyLDcuNTIsMCwwLDEsLjExLTEu'@;
put 'MjFBMTQsMTQsMCwwLDAsOC4xMSwyNy44OEw1LjU2LDMwLjQzQTEsMSwwLDEsMCw3LDMxLjg0bDIuNjYtMi42NmExMy45LDEzLjksMCwwLDAsMTYuODgtLjA4bDIuNzQsMi43NGExLDEsMCwwLDAsMS40MS0xLjQxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5l'@;
put 'LXBhdGgtMy0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMxLjQ3LDMu'@;
put 'ODRhNS43OCw1Ljc4LDAsMCwwLTcuMzctLjYzLDE2LjA4LDE2LjA4LDAsMCwxLDguMiw3LjY1QTUuNzMsNS43MywwLDAsMCwzMS40NywzLjg0WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTExLjQyLDMuNDNhNS43Nyw1'@;
put 'Ljc3LDAsMCwwLTcuNjQuNDEsNS43Miw1LjcyLDAsMCwwLS4zOCw3LjY0QTE2LjA4LDE2LjA4LDAsMCwxLDExLjQyLDMuNDNaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsNEExNCwxNCwwLDAsMCw4LjExLDI3Ljg4'@;
put 'TDUuNTYsMzAuNDNBMSwxLDAsMSwwLDcsMzEuODRsMi42Ni0yLjY2YTEzLjksMTMuOSwwLDAsMCwxNi44OC0uMDhsMi43NCwyLjc0YTEsMSwwLDAsMCwxLjQxLTEuNDFMMjgsMjcuNzhBMTQsMTQsMCwwLDAsMTgsNFptNy40NywxNy40M2ExLDEsMCwwLDEtMS4zMy40N0wxNywxOC40NFY5LjY5'@;
put 'YTEsMSwwLDAsMSwyLDB2Ny41TDI1LDIwLjFBMSwxLDAsMCwxLDI1LjQ5LDIxLjQzWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIvPicpLHkuQ2xyU2hhcGVDaXJjbGVBcnJvdz0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwx'@;
put 'OCwxNiwxNiwwLDAsMCwxOCwyWm0wLDMwQTE0LDE0LDAsMSwxLDMyLDE4LDE0LDE0LDAsMCwxLDE4LDMyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOC4wOCw4LjI2bC03LjYxLDcuNjFhMSwxLDAsMSwwLDEu'@;
put 'NDEsMS40MUwxNywxMi4xOHYxNWExLDEsMCwwLDAsMiwwVjEybDUuMjgsNS4yOGExLDEsMCwxLDAsMS40MS0xLjQxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2'@;
put 'LDAsMCwwLDE4LDJabTgsMTUuNTdhMS40MywxLjQzLDAsMCwxLTIsMEwxOS40LDEzVjI3LjE0YTEuNCwxLjQsMCwwLDEtMi44LDB2LTE0bC00LjQzLDQuNDNhMS40LDEuNCwwLDAsMS0yLTJMMTguMDgsNy43LDI2LDE1LjU5QTEuNCwxLjQsMCwwLDEsMjYsMTcuNTdaIiBjbGFzcz0iY2xyLWkt'@;
put 'c29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+JykseS5DbHJTaGFwZUNoaWxkQXJyb3c9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI0LjgyLDE1LjhhMSwxLDAsMCwwLTEuNDEsMCwxLDEsMCwwLDAsMCwxLjQxTDI3LjIsMjFIOVYzLjc4YTEsMSwwLDEsMC0yLDBWMjFhMiwyLDAsMCww'@;
put 'LDIsMkgyNy4xNWwtMy43NCwzLjc1YTEsMSwwLDAsMCwwLDEuNDEsMSwxLDAsMCwwLC43LjI5LDEsMSwwLDAsMCwuNzEtLjI5TDMxLDIyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+JykseS5DbHJTaGFwZUNvcHk9KDAsZy5jbHJJY29uU1ZHKSgnPHBh'@;
put 'dGggZD0iTTI5LjUsN2gtMTlBMS41LDEuNSwwLDAsMCw5LDguNXYyNEExLjUsMS41LDAsMCwwLDEwLjUsMzRoMTlBMS41LDEuNSwwLDAsMCwzMSwzMi41VjguNUExLjUsMS41LDAsMCwwLDI5LjUsN1pNMjksMzJIMTFWOUgyOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUt'@;
put 'cGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYsMy41QTEuNSwxLjUsMCwwLDAsMjQuNSwySDUuNUExLjUsMS41LDAsMCwwLDQsMy41djI0QTEuNSwxLjUsMCwwLDAsNS41LDI5SDZWNEgyNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4g'@;
put 'ICAgICAgICAgICA8cGF0aCBkPSJNMjcsMy41NkExLjU2LDEuNTYsMCwwLDAsMjUuNDMsMkg1LjU3QTEuNTYsMS41NiwwLDAsMCw0LDMuNTZWMjguNDRBMS41NiwxLjU2LDAsMCwwLDUuNTcsMzBoLjUyVjQuMDdIMjdaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+'@;
put 'XG4gICAgICAgICAgICA8cmVjdCB4PSI4IiB5PSI2IiB3aWR0aD0iMjMiIGhlaWdodD0iMjgiIHJ4PSIxLjUiIHJ5PSIxLjUiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiLz4nKSx5LkNsclNoYXBlSGVscD0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTgsMkEx'@;
put 'NiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm0wLDMwQTE0LDE0LDAsMSwxLDMyLDE4LDE0LDE0LDAsMCwxLDE4LDMyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOC4yOSw4LjkyYTcuMzgsNy4z'@;
put 'OCwwLDAsMC01LjcyLDIuNTcsMSwxLDAsMCwwLS4zMi43MS45Mi45MiwwLDAsMCwuOTUuOTIsMS4wOCwxLjA4LDAsMCwwLC43MS0uMjksNS43LDUuNywwLDAsMSw0LjMzLTJjMi4zNiwwLDMuODMsMS41MiwzLjgzLDMuNDF2LjA1YzAsMi4yMS0xLjc2LDMuNDQtNC41NCwzLjY1YS44LjgsMCww'@;
put 'LDAtLjc2LjkyczAsMi4zMiwwLDIuNzVhMSwxLDAsMCwwLDEsLjloLjExYTEsMSwwLDAsMCwuOS0xVjE5LjQ1YzMtLjQyLDUuNDMtMiw1LjQzLTUuMjh2LS4wNUMyNC4xOCwxMS4xMiwyMS44NCw4LjkyLDE4LjI5LDguOTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBh'@;
put 'dGgtMiIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMTcuNzgiIGN5PSIyNi4yIiByPSIxLjI1IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI0LjE4LDE0LjE3di0uMDVjMC0zLTIuMzQtNS4yLTUuODgtNS4y'@;
put 'YTcuMzgsNy4zOCwwLDAsMC01LjcyLDIuNTcsMSwxLDAsMCwwLS4zMi43MS45Mi45MiwwLDAsMCwuOTUuOTIsMS4wOCwxLjA4LDAsMCwwLC43MS0uMjksNS43LDUuNywwLDAsMSw0LjMzLTJjMi4zNiwwLDMuODMsMS41MiwzLjgzLDMuNDF2LjA1YzAsMi4yMS0xLjc2LDMuNDQtNC41NCwzLjY1'@;
put 'YS44LjgsMCwwLDAtLjc2LjkyczAsMi4zMiwwLDIuNzVhMSwxLDAsMCwwLDEsLjloLjExYTEsMSwwLDAsMCwuOS0xVjE5LjQ1QzIxLjc1LDE5LDI0LjE4LDE3LjQ1LDI0LjE4LDE0LjE3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2Vk'@;
put 'Ii8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIxNy43OCIgY3k9IjI2LjIiIHI9IjEuMjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjEyLDEyLjgxYTcuNDMsNy40MywwLDAs'@;
put 'MS0xLjkxLjU4LDE0LjA1LDE0LjA1LDAsMSwxLTguNi04LjYsNy40NCw3LjQ0LDAsMCwxLC41OC0xLjkxLDE2LjA2LDE2LjA2LDAsMSwwLDkuOTMsOS45M1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIvPlxuICAgICAgICAgICAg'@;
put 'PGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy4xMiwxMi44MWE3LjQ5LDcuNDksMCwwLDEtOS45My05LjkzLDE2'@;
put 'LjA2LDE2LjA2LDAsMSwwLDkuOTMsOS45M1ptLTE1LjM0LDE1YTEuNjUsMS42NSwwLDEsMSwxLjY1LTEuNjVBMS42NSwxLjY1LDAsMCwxLDE3Ljc4LDI3Ljg1Wm0xLjM3LTguMDZ2MS43MmExLjM3LDEuMzcsMCwwLDEtMS4zLDEuMzZoLS4xMWExLjM0LDEuMzQsMCwwLDEtMS4zOS0xLjNjMC0u'@;
put 'NDQsMC0yLjc2LDAtMi43NmExLjE5LDEuMTksMCwwLDEsMS4xMi0xLjMxYzEuNTctLjEyLDQuMTgtLjcsNC4xOC0zLjI1LDAtMS44My0xLjQxLTMuMDctMy40My0zLjA3YTUuMzEsNS4zMSwwLDAsMC00LDEuOTIsMS4zNiwxLjM2LDAsMCwxLTIuMzUtLjksMS40MywxLjQzLDAsMCwxLC40My0x'@;
put 'LDcuNzcsNy43NywwLDAsMSw2LTIuNjljMy43LDAsNi4yOCwyLjMsNi4yOCw1LjZDMjQuNTgsMTcuMTYsMjIuNjEsMTkuMiwxOS4xNSwxOS43OVoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4'@;
put 'PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm0tLjIyLDI1Ljg1YTEu'@;
put 'NjUsMS42NSwwLDEsMSwxLjY1LTEuNjVBMS42NSwxLjY1LDAsMCwxLDE3Ljc4LDI3Ljg1Wm0xLjM3LTguMDZ2MS43MmExLjM3LDEuMzcsMCwwLDEtMS4zLDEuMzZoLS4xMWExLjM0LDEuMzQsMCwwLDEtMS4zOS0xLjNjMC0uNDQsMC0yLjc2LDAtMi43NmExLjE5LDEuMTksMCwwLDEsMS4xMi0x'@;
put 'LjMxYzEuNTctLjEyLDQuMTgtLjcsNC4xOC0zLjI1LDAtMS44My0xLjQxLTMuMDctMy40My0zLjA3YTUuMzEsNS4zMSwwLDAsMC00LDEuOTIsMS4zNiwxLjM2LDAsMCwxLTIuMzUtLjksMS40MywxLjQzLDAsMCwxLC40My0xLDcuNzcsNy43NywwLDAsMSw2LTIuNjljMy43LDAsNi4yOCwyLjMs'@;
put 'Ni4yOCw1LjZDMjQuNTgsMTcuMTYsMjIuNjEsMTkuMiwxOS4xNSwxOS43OVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz4nKSx5LkNsclNoYXBlTG9naW49KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI4LDRIMTJhMiwyLDAsMCwwLTIsMkgyOFYzMEgxMlYy'@;
put 'MC4ySDEwVjMwYTIsMiwwLDAsMCwyLDJIMjhhMiwyLDAsMCwwLDItMlY2QTIsMiwwLDAsMCwyOCw0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTUuMTIsMTguNDZhMSwxLDAsMSwwLDEuNDEsMS40MWw1Ljc5'@;
put 'LTUuNzlMMTYuNTQsOC4yOWExLDEsMCwwLDAtMS40MSwxLjQxTDE4LjUsMTNINGExLDEsMCwwLDAtMSwxLDEsMSwwLDAsMCwxLDFIMTguNVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LDRIMTJhMiwyLDAs'@;
put 'MCwwLTIsMnY3aDguNUwxNS4xMiw5LjcxYTEsMSwwLDAsMSwxLjQxLTEuNDFsNS43OSw1Ljc5LTUuNzksNS43OWExLDEsMCwwLDEtMS40MS0xLjQxTDE4LjUsMTVIMTBWMzBhMiwyLDAsMCwwLDIsMkgyOGEyLDIsMCwwLDAsMi0yVjZBMiwyLDAsMCwwLDI4LDRaIiBjbGFzcz0iY2xyLWktc29s'@;
put 'aWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTEwLDEzSDRhMSwxLDAsMCwwLTEsMSwxLDEsMCwwLDAsMSwxaDZaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPicpLHkuQ2xyU2hhcGVMb2dvdXQ9KDAsZy5jbHJJY29uU1ZH'@;
put 'KSgnPHBhdGggZD0iTTcsNkgyM3Y5LjhoMlY2YTIsMiwwLDAsMC0yLTJIN0EyLDIsMCwwLDAsNSw2VjMwYTIsMiwwLDAsMCwyLDJIMjNhMiwyLDAsMCwwLDItMkg3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0y'@;
put 'OC4xNiwxNy4yOGExLDEsMCwwLDAtMS40MSwxLjQxTDMwLjEzLDIySDE1LjYzYTEsMSwwLDAsMC0xLDEsMSwxLDAsMCwwLDEsMWgxNC41bC0zLjM4LDMuNDZhMSwxLDAsMSwwLDEuNDEsMS40MUwzNCwyMy4wN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+'@;
put 'XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjMsNEg3QTIsMiwwLDAsMCw1LDZWMzBhMiwyLDAsMCwwLDIsMkgyM2EyLDIsMCwwLDAsMi0yVjI0SDE1LjYzYTEsMSwwLDAsMS0xLTEsMSwxLDAsMCwxLDEtMUgyNVY2QTIsMiwwLDAsMCwyMyw0WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNv'@;
put 'bGlkLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LjE2LDE3LjI4YTEsMSwwLDAsMC0xLjQxLDEuNDFMMzAuMTMsMjJIMjV2Mmg1LjEzbC0zLjM4LDMuNDZhMSwxLDAsMSwwLDEuNDEsMS40MUwzNCwyMy4wN1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRo'@;
put 'LTIiLz4nKSx5LkNsclNoYXBlUHJpbnRlcj0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjksOUgyN1Y1SDlWOUg3YTQsNCwwLDAsMC00LDRWMjRINi45MlYyMi4wOUg1VjEzYTIsMiwwLDAsMSwyLTJIMjlhMiwyLDAsMCwxLDIsMnY5SDI5LjA4VjI0SDMzVjEzQTQsNCwwLDAsMCwyOSw5'@;
put 'Wk0yNSw5SDExVjdIMjVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LDE4SDhhMSwxLDAsMCwwLDAsMkg5VjMySDI3VjIwaDFhMSwxLDAsMCwwLDAtMlpNMjUsMzBIMTFWMjBIMjVaIiBjbGFzcz0iY2xyLWkt'@;
put 'b3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMjciIHk9IjEzLjA0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LDE4SDhh'@;
put 'MSwxLDAsMCwwLDAsMkg5VjMySDI3VjIwaDFhMSwxLDAsMCwwLDAtMlpNMjUsMzBIMTFWMjBIMjVaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSIzMSAxNS40IDMxIDIy'@;
put 'LjA5IDI5LjA4IDIyLjA5IDI5LjA4IDI0IDMzIDI0IDMzIDE1LjQgMzEgMTUuNCIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik01LDEzYTIsMiwwLDAsMSwyLTJIMTguNjRBMy42NSwz'@;
put 'LjY1LDAsMCwxLDE5LDkuODlMMTkuNTQsOUgxMVY3aDkuNzFsMS4xMy0ySDlWOUg3YTQsNCwwLDAsMC00LDRWMjRINi45MlYyMi4wOUg1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9'@;
put 'Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0'@;
put 'aC00LS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjgsMThIOGExLDEsMCwwLDAsMCwySDlWMzJIMjdWMjBoMWExLDEsMCwwLDAsMC0yWk0yNSwzMEgxMVYyMEgyNVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRo'@;
put 'LTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMjciIHk9IjEzLjA0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMywxMi44OGE3'@;
put 'LjQ1LDcuNDUsMCwwLDEtMiwuNTV2OC42NkgyOS4wOFYyNEgzM1YxM0MzMywxMywzMywxMi45MywzMywxMi44OFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTUsMTNhMiwyLDAsMCwx'@;
put 'LDItMkgyNC40MmE3LjUsNy41LDAsMCwxLTEuMjctMkgxMVY3SDIyLjU3YTcuNTIsNy41MiwwLDAsMS0uMDctMSw3LjU0LDcuNTQsMCwwLDEsLjA3LTFIOVY5SDdhNCw0LDAsMCwwLTQsNFYyNEg2LjkyVjIyLjA5SDVaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxp'@;
put 'bmUtcGF0aC00LS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjksOUgy'@;
put 'N1Y1SDlWOUg3YTQsNCwwLDAsMC00LDRWMjRIOXY4SDI3VjI0aDZWMTNBNCw0LDAsMCwwLDI5LDlaTTI1LDI0djZIMTFWMTlIMjVaTTI1LDlIMTFWN0gyNVptNCw2SDI3VjEzaDJaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBk'@;
put 'PSJNMjIuMjMsMTUuNEEzLjY4LDMuNjgsMCwwLDEsMTksOS44OUwxOS41NCw5SDExVjdoOS43MWwxLjEzLTJIOVY5SDdhNCw0LDAsMCwwLTQsNFYyNEg5djhIMjdWMjRoNlYxNS40Wk0yNSwyNHY2SDExVjE5SDI1WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBh'@;
put 'dGgtMS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNs'@;
put 'ci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLDEyLjg4YTcuMyw3LjMsMCwwLDEtNCwuNTVWMTVIMjdWMTNoLjMyYTcuNTIsNy41MiwwLDAsMS00LjE4LTRIMTFWN0gyMi41N2E3LjUy'@;
put 'LDcuNTIsMCwwLDEtLjA3LTEsNy41NCw3LjU0LDAsMCwxLC4wNy0xSDlWOUg3YTQsNCwwLDAsMC00LDRWMjRIOXY4SDI3VjI0aDZWMTNDMzMsMTMsMzMsMTIuOTMsMzMsMTIuODhaTTI1LDI0djZIMTFWMTlIMjVaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRo'@;
put 'LTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIvPicpLHkuQ2xyU2hhcGVXb3JsZD0oMCxnLmNsckljb25TVkcpKCc8cGF0'@;
put 'aCBkPSJNMjYuNTQsMThhMTkuMzgsMTkuMzgsMCwwLDAtLjQzLTRoMy42YTEyLjMsMTIuMywwLDAsMC0uNjctMS42SDI1LjY5QTE5LjcyLDE5LjcyLDAsMCwwLDIyLjgsNi41M2ExMi4zLDEyLjMsMCwwLDAtMi41NS0uNzYsMTcuODMsMTcuODMsMCwwLDEsMy44OSw2LjU5SDE4Ljc1VjUuNmMt'@;
put 'LjI1LDAtLjUxLDAtLjc3LDBzLS40OSwwLS43MywwdjYuNzdIMTEuODZhMTcuODMsMTcuODMsMCwwLDEsMy45LTYuNiwxMi4yOCwxMi4yOCwwLDAsMC0yLjU0Ljc1LDE5LjcyLDE5LjcyLDAsMCwwLTIuOTEsNS44NUg2Ljk0QTEyLjMsMTIuMywwLDAsMCw2LjI2LDE0SDkuODlhMTkuMzgsMTku'@;
put 'MzgsMCwwLDAtLjQzLDQsMTkuNjcsMTkuNjcsMCwwLDAsLjUsNC4zN0g2LjQyQTEyLjM0LDEyLjM0LDAsMCwwLDcuMTYsMjRoMy4yM2ExOS4zMiwxOS4zMiwwLDAsMCwyLjY5LDUuMzYsMTIuMjgsMTIuMjgsMCwwLDAsMi42MS43OUExNy45MSwxNy45MSwwLDAsMSwxMiwyNGg1LjI2djYuMzRj'@;
put 'LjI0LDAsLjQ5LDAsLjczLDBzLjUxLDAsLjc3LDBWMjRIMjRhMTcuOSwxNy45LDAsMCwxLTMuNyw2LjE1LDEyLjI4LDEyLjI4LDAsMCwwLDIuNjItLjgxQTE5LjMyLDE5LjMyLDAsMCwwLDI1LjYxLDI0aDMuMmExMi4zNCwxMi4zNCwwLDAsMCwuNzQtMS42SDI2QTE5LjY3LDE5LjY3LDAsMCww'@;
put 'LDI2LjU0LDE4Wm0tOS4yOSw0LjM3SDExLjUxYTE3LjY5LDE3LjY5LDAsMCwxLS4wOS04LjRoNS44M1ptNy4yNCwwSDE4Ljc1VjE0aDUuODNBMTguMjEsMTguMjEsMCwwLDEsMjUsMTgsMTguMTIsMTguMTIsMCwwLDEsMjQuNDksMjIuMzdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1v'@;
put 'dXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDJBMTYsMTYsMCwxLDAsMzQsMTgsMTYsMTYsMCwwLDAsMTgsMlptMCwzMEExNCwxNCwwLDEsMSwzMiwxOCwxNCwxNCwwLDAsMSwxOCwzMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0y'@;
put 'Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuMTIsMTIuODFhNy40NCw3LjQ0LDAsMCwxLTEuOTEuNTgsMTQuMDUsMTQuMDUsMCwxLDEtOC42LTguNiw3LjQzLDcuNDMsMCwwLDEsLjU4LTEuOTEsMTYuMDYsMTYuMDYsMCwxLDAsOS45Myw5LjkzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUt'@;
put 'LWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjAuMjUsNS43N2ExNy44MywxNy44MywwLDAsMSwzLjg5LDYuNTlIMTguNzVWNS42Yy0uMjUsMC0uNTEsMC0uNzcsMHMtLjQ5LDAtLjczLDB2Ni43N0gxMS44NmExNy44MywxNy44'@;
put 'MywwLDAsMSwzLjktNi42LDEyLjI4LDEyLjI4LDAsMCwwLTIuNTQuNzUsMTkuNzIsMTkuNzIsMCwwLDAtMi45MSw1Ljg1SDYuOTRBMTIuMywxMi4zLDAsMCwwLDYuMjYsMTRIOS44OWExOS4zOCwxOS4zOCwwLDAsMC0uNDMsNCwxOS42NywxOS42NywwLDAsMCwuNSw0LjM3SDYuNDJBMTIuMzQs'@;
put 'MTIuMzQsMCwwLDAsNy4xNiwyNGgzLjIzYTE5LjMyLDE5LjMyLDAsMCwwLDIuNjksNS4zNiwxMi4yOCwxMi4yOCwwLDAsMCwyLjYxLjc5QTE3LjkxLDE3LjkxLDAsMCwxLDEyLDI0aDUuMjZ2Ni4zNGMuMjQsMCwuNDksMCwuNzMsMHMuNTEsMCwuNzcsMFYyNEgyNGExNy45LDE3LjksMCwwLDEt'@;
put 'My43LDYuMTUsMTIuMjgsMTIuMjgsMCwwLDAsMi42Mi0uODFBMTkuMzIsMTkuMzIsMCwwLDAsMjUuNjEsMjRoMy4yYTEyLjM0LDEyLjM0LDAsMCwwLC43NC0xLjZIMjZhMTkuNjcsMTkuNjcsMCwwLDAsLjUtNC4zNywxOS4zOCwxOS4zOCwwLDAsMC0uNDMtNGgzLjZjLS4wNi0uMTctLjEyLS4z'@;
put 'My0uMTktLjQ5YTcuNDUsNy40NSwwLDAsMS0zLjQ3LTEuMTFoLS4zNmMwLS4xMS0uMDgtLjIxLS4xMS0uMzJhNy40OCw3LjQ4LDAsMCwxLTMuMDYtNS42MkExMi40MSwxMi40MSwwLDAsMCwyMC4yNSw1Ljc3Wm0tMywxNi41OUgxMS41MWExNy42OSwxNy42OSwwLDAsMS0uMDktOC40aDUuODNa'@;
put 'TTI1LDE4YTE4LjEyLDE4LjEyLDAsMCwxLS41NSw0LjM3SDE4Ljc1VjE0aDUuODNBMTguMjEsMTguMjEsMCwwLDEsMjUsMThaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBj'@;
put 'eT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTAuMDUsMThhMjAuNDYsMjAuNDYsMCwwLDAsLjYyLDQuOTNoNi40OFYxMy40NUgxMC41OEEyMC41'@;
put 'NSwyMC41NSwwLDAsMCwxMC4wNSwxOFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOC44NSwxMy40NXY5LjQ4aDYuNDhBMjAuNDYsMjAuNDYsMCwwLDAsMjYsMThhMjAuNTUsMjAuNTUsMCwwLDAtLjUyLTQuNTVaIiBj'@;
put 'bGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWk0zMC4yMiwyNC43MUgyNi42YTIxLjgsMjEuOCwwLDAsMS0zLDYsMTMuODYsMTMuODYsMCwwLDEtMywuOTIs'@;
put 'MjAuMjEsMjAuMjEsMCwwLDAsNC4xOC02Ljk0SDE4Ljg2djcuMTVjLS4yOSwwLS41NywwLS44Niwwcy0uNTUsMC0uODMsMFYyNC43MUgxMS4yMmEyMC4yMSwyMC4yMSwwLDAsMCw0LjE4LDYuOTUsMTMuODYsMTMuODYsMCwwLDEtMi45NC0uOSwyMS44LDIxLjgsMCwwLDEtMy02LjA1SDUuNzhh'@;
put 'MTMuOTQsMTMuOTQsMCwwLDEtLjgzLTEuODFoNEEyMi4yLDIyLjIsMCwwLDEsOC4zNywxOGEyMS44OCwyMS44OCwwLDAsMSwuNDgtNC41NUg0Ljc2YTEzLjg4LDEzLjg4LDAsMCwxLC43Ni0xLjgxSDkuMzNBMjIuMjYsMjIuMjYsMCwwLDEsMTIuNjEsNWExMy44NiwxMy44NiwwLDAsMSwyLjg3'@;
put 'LS44NCwyMC4xMywyMC4xMywwLDAsMC00LjQsNy40NWg2LjA5VjRjLjI4LDAsLjU1LDAsLjgzLDBzLjU4LDAsLjg2LDB2Ny42NGg2LjA5YTIwLjEzLDIwLjEzLDAsMCwwLTQuMzktNy40NEExMy44OSwxMy44OSwwLDAsMSwyMy40Myw1YTIyLjI2LDIyLjI2LDAsMCwxLDMuMjcsNi41OWgzLjc3'@;
put 'YTEzLjg5LDEzLjg5LDAsMCwxLC43NiwxLjgxSDI3LjE3QTIxLjg4LDIxLjg4LDAsMCwxLDI3LjY2LDE4YTIyLjIsMjIuMiwwLDAsMS0uNTcsNC45M2g0QTEzLjk0LDEzLjk0LDAsMCwxLDMwLjIyLDI0LjcxWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIvPlxuICAg'@;
put 'ICAgICAgICAgPHBhdGggZD0iTTEwLjA1LDE4YTIwLjQ2LDIwLjQ2LDAsMCwwLC42Miw0LjkzaDYuNDhWMTMuNDVIMTAuNThBMjAuNTUsMjAuNTUsMCwwLDAsMTAuMDUsMThaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAg'@;
put 'ICAgICAgPHBhdGggZD0iTTE4Ljg1LDIyLjk0aDYuNDhBMjAuNDYsMjAuNDYsMCwwLDAsMjYsMThhMjAuNTUsMjAuNTUsMCwwLDAtLjUyLTQuNTVIMTguODVaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBh'@;
put 'dGggZD0iTTMzLjEyLDEyLjgxYTcuNDQsNy40NCwwLDAsMS0xLjkuNTh2MEgzMWE2Ljc3LDYuNzcsMCwwLDEtMi4wNywwaC0xLjhBMjEuODgsMjEuODgsMCwwLDEsMjcuNjYsMThhMjIuMiwyMi4yLDAsMCwxLS41Nyw0LjkzaDRhMTMuOTQsMTMuOTQsMCwwLDEtLjgzLDEuODFIMjYuNmEyMS44'@;
put 'LDIxLjgsMCwwLDEtMyw2LDEzLjg2LDEzLjg2LDAsMCwxLTMsLjkyLDIwLjIxLDIwLjIxLDAsMCwwLDQuMTgtNi45NEgxOC44NnY3LjE1Yy0uMjksMC0uNTcsMC0uODYsMHMtLjU1LDAtLjgzLDBWMjQuNzFIMTEuMjJhMjAuMjEsMjAuMjEsMCwwLDAsNC4xOCw2Ljk1LDEzLjg2LDEzLjg2LDAs'@;
put 'MCwxLTIuOTQtLjksMjEuOCwyMS44LDAsMCwxLTMtNi4wNUg1Ljc4YTEzLjk0LDEzLjk0LDAsMCwxLS44My0xLjgxaDRBMjIuMiwyMi4yLDAsMCwxLDguMzcsMThhMjEuODgsMjEuODgsMCwwLDEsLjQ4LTQuNTVINC43NmExMy44OCwxMy44OCwwLDAsMSwuNzYtMS44MUg5LjMzQTIyLjI2LDIy'@;
put 'LjI2LDAsMCwxLDEyLjYxLDVhMTMuODYsMTMuODYsMCwwLDEsMi44Ny0uODQsMjAuMTMsMjAuMTMsMCwwLDAtNC40LDcuNDVoNi4wOVY0Yy4yOCwwLC41NSwwLC44Mywwcy41OCwwLC44NiwwdjcuNjRoNi4wOWwwLS4xM2E3LjQ3LDcuNDcsMCwwLDEtMi4zNi00Ljc2LDIwLjM3LDIwLjM3LDAs'@;
put 'MCwwLTItMi41NSwxNC4yMywxNC4yMywwLDAsMSwyLjA2LjU2LDcuNDQsNy40NCwwLDAsMSwuNTctMS44NiwxNi4wNiwxNi4wNiwwLDEsMCw5LjkzLDkuOTNaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNp'@;
put 'cmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTQtLWJhZGdlZCBjbHItaS1iYWRnZSIvPicpLHkuQ2xyU2hhcGVTbGlkZXI9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTEyLDEyLjM3QTQsNCwwLDAsMCw5LDgu'@;
put 'NDhWNUExLDEsMCwxLDAsNyw1VjguNDhhNCw0LDAsMCwwLDAsNy43OFYzMWExLDEsMCwxLDAsMiwwVjE2LjI2QTQsNCwwLDAsMCwxMiwxMi4zN1ptLTQsMmEyLDIsMCwxLDEsMi0yQTIsMiwwLDAsMSw4LDE0LjRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIv'@;
put 'PlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLDE1LjgzYTQsNCwwLDAsMC0zLTMuODlWNWExLDEsMCwxLDAtMiwwdjYuOTRhNCw0LDAsMCwwLDAsNy43OFYzMWExLDEsMCwxLDAsMiwwVjE5LjcyQTQsNCwwLDAsMCwzMiwxNS44M1ptLTQsMmEyLDIsMCwxLDEsMi0yQTIsMiwwLDAsMSwyOCwx'@;
put 'Ny44N1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIsMjQuNWE0LDQsMCwwLDAtMy0zLjg5VjVhMSwxLDAsMSwwLTIsMFYyMC42MWE0LDQsMCwwLDAsMCw3Ljc4VjMxYTEsMSwwLDEsMCwyLDBWMjguMzlBNCw0'@;
put 'LDAsMCwwLDIyLDI0LjVabS00LDJhMiwyLDAsMSwxLDItMkEyLDIsMCwwLDEsMTgsMjYuNTNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTksOS4yOVY1QTEsMSwwLDEsMCw3LDVWOS4zYTMuMjIsMy4yMiwwLDAs'@;
put 'MCwwLDYuMTFWMzFhMSwxLDAsMSwwLDIsMFYxNS40M0EzLjIyLDMuMjIsMCwwLDAsOSw5LjI5WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE5LDIxLjQ1VjVhMSwxLDAsMSwwLTIsMFYyMS40N2EzLjIyLDMuMjIsMCww'@;
put 'LDAsMCw2LjExVjMxYTEsMSwwLDEsMCwyLDBWMjcuNmEzLjIyLDMuMjIsMCwwLDAsMC02LjE0WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI5LDEyLjc1VjVhMSwxLDAsMSwwLTIsMHY3Ljc2YTMuMjIsMy4yMiwwLDAs'@;
put 'MCwwLDYuMTFWMzFhMSwxLDAsMSwwLDIsMFYxOC44OWEzLjIyLDMuMjIsMCwwLDAsMC02LjE0WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIvPicpLHkuQ2xyU2hhcGVDbGlwYm9hcmQ9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI5LjI5LDVIMjdWN2gyVjMy'@;
put 'SDdWN0g5VjVIN0ExLjc1LDEuNzUsMCwwLDAsNSw2LjY5VjMyLjMxQTEuNywxLjcsMCwwLDAsNi43MSwzNEgyOS4yOUExLjcsMS43LDAsMCwwLDMxLDMyLjMxVjYuNjlBMS43LDEuNywwLDAsMCwyOS4yOSw1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+'@;
put 'XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYsNy4zM0EyLjM0LDIuMzQsMCwwLDAsMjMuNjcsNUgyMS44N2E0LDQsMCwwLDAtNy43NSwwSDEyLjMzQTIuMzQsMi4zNCwwLDAsMCwxMCw3LjMzVjExSDI2Wk0yNCw5SDEyVjcuMzNBLjMzLjMzLDAsMCwxLDEyLjMzLDdIMTZWNmEyLDIsMCwwLDEs'@;
put 'NCwwVjdoMy42N2EuMzMuMzMsMCwwLDEsLjMzLjMzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMSIgeT0iMTQiIHdpZHRoPSIxNCIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRs'@;
put 'aW5lLXBhdGgtMyIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjExIiB5PSIxOCIgd2lkdGg9IjE0IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTEiIHk9IjIyIiB3aWR0aD0iMTQiIGhlaWdo'@;
put 'dD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMSIgeT0iMjYiIHdpZHRoPSIxNCIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIgLz5cbiAgICAgICAgICAg'@;
put 'IDxyZWN0IHg9IjExIiB5PSIxNCIgd2lkdGg9IjE0IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjExIiB5PSIxOCIgd2lkdGg9IjE0IiBoZWlnaHQ9IjIiIGNsYXNz'@;
put 'PSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjExIiB5PSIyMiIgd2lkdGg9IjE0IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJh'@;
put 'ZGdlZCIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjExIiB5PSIyNiIgd2lkdGg9IjE0IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMy4xMyw5SDEyVjcuMzNB'@;
put 'LjMzLjMzLDAsMCwxLDEyLjMzLDdIMTZWNmEyLDIsMCwwLDEsNCwwVjdoMi41N2E3LjUyLDcuNTIsMCwwLDEtLjA3LTEsNy41Miw3LjUyLDAsMCwxLC4wNy0xaC0uN2E0LDQsMCwwLDAtNy43NSwwSDEyLjMzQTIuMzQsMi4zNCwwLDAsMCwxMCw3LjMzVjExSDI0LjQyQTcuNSw3LjUsMCwwLDEs'@;
put 'MjMuMTMsOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMCwxMy41YTcuNTIsNy41MiwwLDAsMS0xLS4wN1YzMkg3VjdIOVY1SDdBMS43NSwxLjc1LDAsMCwwLDUsNi42OVYzMi4z'@;
put 'MUExLjcsMS43LDAsMCwwLDYuNzEsMzRIMjkuMjlBMS43LDEuNywwLDAsMCwzMSwzMi4zMVYxMy40M0E3LjUyLDcuNTIsMCwwLDEsMzAsMTMuNVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTYtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJj'@;
put 'bGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTctLWJhZGdlZCBjbHItaS1iYWRnZSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOS4yOSw1SDIyLjE3YTQuNDUsNC40NSwwLDAsMC00LjExLTNBNC40Niw0'@;
put 'LjQ2LDAsMCwwLDE0LDVIN0ExLjc1LDEuNzUsMCwwLDAsNSw2LjY5VjMyLjMxQTEuNywxLjcsMCwwLDAsNi43MSwzNEgyOS4yOUExLjcsMS43LDAsMCwwLDMxLDMyLjMxVjYuNjlBMS43LDEuNywwLDAsMCwyOS4yOSw1Wm0tMTgsM2ExLDEsMCwwLDEsMS0xaDMuNDRWNi4zMWEyLjMxLDIuMzEs'@;
put 'MCwxLDEsNC42MywwVjdoMy40NGExLDEsMCwwLDEsMSwxdjJIMTEuMzFaTTI1LDI4SDExVjI2SDI1Wm0wLTRIMTFWMjJIMjVabTAtNEgxMVYxOEgyNVptMC00SDExVjE0SDI1WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9'@;
put 'Ik0zMCwxMy41QTcuNDksNy40OSwwLDAsMSwyMy42NiwxMEgxMS4zMVY4YTEsMSwwLDAsMSwxLTFoMy40NFY2LjMxYTIuMzEsMi4zMSwwLDEsMSw0LjYzLDBWN2gyLjE5YTcuNTQsNy41NCwwLDAsMS0uMDctMSw3LjUyLDcuNTIsMCwwLDEsLjA3LTFoLS40YTQuNDUsNC40NSwwLDAsMC00LjEx'@;
put 'LTNBNC40Niw0LjQ2LDAsMCwwLDE0LDVIN0ExLjc1LDEuNzUsMCwwLDAsNSw2LjY5VjMyLjMxQTEuNywxLjcsMCwwLDAsNi43MSwzNEgyOS4yOUExLjcsMS43LDAsMCwwLDMxLDMyLjMxVjEzLjQzQTcuNTIsNy41MiwwLDAsMSwzMCwxMy41Wk0yNSwyOEgxMVYyNkgyNVptMC00SDExVjIySDI1'@;
put 'Wm0wLTRIMTFWMThIMjVabTAtNEgxMVYxNEgyNVoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWkt'@;
put 'c29saWQtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+JykseS5DbHJTaGFwZUZpcmV3YWxsPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMiw2SDRBMiwyLDAsMCwwLDIsOFYyOGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWOEEyLDIsMCwwLDAsMzIsNlpNNCw4SDMy'@;
put 'djUuMDhIMjMuOHYtNEgyMnY0SDE0di00SDEydjRINFptMCw3SDMydjYuMDhIMjguOTJWMTYuMjdIMjd2NC44MUgxOC45MlYxNi4yN0gxN3Y0LjgxSDguOVYxNi4yN0g3djQuODFINFpNMjMuOCwyOFYyNC4yN0gyMi4yVjI4SDE0VjI0LjI3aC0xLjZWMjhINFYyM0gzMnY1WiIgY2xhc3M9ImNs'@;
put 'ci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuNjgsMTUuNEgzMnY1LjY4SDI4LjkyVjE2LjI3SDI3djQuODFIMTguOTJWMTYuMjdIMTd2NC44MUg4LjlWMTYuMjdIN3Y0LjgxSDRWMTVIMjAuNThhMy41OCwzLjU4LDAsMCwxLTEu'@;
put 'NzYtMS45MkgxNHYtNEgxMnY0SDRWOEgyMC4xNGwxLjE1LTJINEEyLDIsMCwwLDAsMiw4VjI4YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYxNS4zOFpNMjMuOCwyOFYyNC4yN0gyMi4yVjI4SDE0VjI0LjI3aC0xLjZWMjhINFYyM0gzMnY1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUt'@;
put 'LWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAs'@;
put 'MCwwLDI2Ljg1LDEuMTRaIiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAsMTMuNWE3LjQ3LDcuNDcsMCwwLDEtMi40NS0uNDJIMjMuOFYxMC4yMmE3LjUs'@;
put 'Ny41LDAsMCwxLS42My0xLjE0SDIydjRIMTR2LTRIMTJ2NEg0VjhIMjIuNzhhNy40OSw3LjQ5LDAsMCwxLS4yOC0ySDRBMiwyLDAsMCwwLDIsOFYyOGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMTIuMzRBNy40NSw3LjQ1LDAsMCwxLDMwLDEzLjVaTTQsMTVIMzJ2Ni4wOEgyOC45'@;
put 'MlYxNi4yN0gyN3Y0LjgxSDE4LjkyVjE2LjI3SDE3djQuODFIOC45VjE2LjI3SDd2NC44MUg0Wk0yMy44LDI4VjI0LjI3SDIyLjJWMjhIMTRWMjQuMjdoLTEuNlYyOEg0VjIzSDMydjVaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQi'@;
put 'IC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiICBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIsNkg0QTIsMiwwLDAsMCwyLDhW'@;
put 'MjhhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjhBMiwyLDAsMCwwLDMyLDZaTTE0LDI4SDEyVjI0aDJabTEwLDBIMjJWMjRoMlptOC02SDRWMjBIN1YxNkg5djRoOFYxNmgydjRoOFYxNmgydjRoM1ptMC04SDRWMTJoOFY4aDJ2NGg4VjhoMnY0aDhaIiBjbGFzcz0iY2xyLWktc29s'@;
put 'aWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjY4LDE1LjRIMjIuMjNBMy42OSwzLjY5LDAsMCwxLDE5LjM1LDE0SDRWMTJoOFY4aDJ2NGg0LjU3QTMuNjcsMy42NywwLDAsMSwxOSw5Ljg5TDIxLjI5LDZINEEyLDIsMCwwLDAsMiw4VjI4YTIsMiww'@;
put 'LDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYxNS4zOFpNMTQsMjhIMTJWMjRoMlptMTAsMEgyMlYyNGgyWm04LTZINFYyMEg3VjE2SDl2NGg4VjE2aDJ2NGg4VjE2aDJ2NGgzWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIgLz5cbiAg'@;
put 'ICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiICBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQg'@;
put 'Y2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI0LDEwLjQ5VjEyaDEuNTFBNy41Myw3LjUzLDAsMCwxLDI0LDEwLjQ5WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQi'@;
put 'IC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIsMTMuMjJWMTRINFYxMmg4VjhoMnY0aDhWOGguNzhhNy40OSw3LjQ5LDAsMCwxLS4yOC0ySDRBMiwyLDAsMCwwLDIsOFYyOGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMTIuMzRBNy40NSw3LjQ1LDAsMCwxLDMyLDEzLjIyWk0x'@;
put 'NCwyOEgxMlYyNGgyWm0xMCwwSDIyVjI0aDJabTgtNkg0VjIwSDdWMTZIOXY0aDhWMTZoMnY0aDhWMTZoMnY0aDNaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0i'@;
put 'NSIgIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPicpLHkuQ2xyU2hhcGVMaXN0PSgwLGcuY2xySWNvblNWRykoJzxyZWN0IHg9IjE1IiB5PSI4IiB3aWR0aD0iOSIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0'@;
put 'bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE1IiB5PSIxMiIgd2lkdGg9IjkiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxNSIgeT0iMTYiIHdp'@;
put 'ZHRoPSI5IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTUiIHk9IjIwIiB3aWR0aD0iOSIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz5c'@;
put 'biAgICAgICAgICAgIDxyZWN0IHg9IjE1IiB5PSIyNCIgd2lkdGg9IjkiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMSIgeT0iOCIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1p'@;
put 'LW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMSIgeT0iMTIiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC03IiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTEiIHk9IjE2'@;
put 'IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtOCIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjExIiB5PSIyMCIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTki'@;
put 'IC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMSIgeT0iMjQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xMCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOCwySDhBMiwyLDAsMCwwLDYsNFYzMmEyLDIsMCwwLDAsMiwy'@;
put 'SDI4YTIsMiwwLDAsMCwyLTJWNEEyLDIsMCwwLDAsMjgsMlptMCwzMEg4VjRIMjhaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTEiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxNSIgeT0iMTIiIHdpZHRoPSI5IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1v'@;
put 'dXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE1IiB5PSIxNiIgd2lkdGg9IjkiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiAvPlxu'@;
put 'ICAgICAgICAgICAgPHJlY3QgeD0iMTUiIHk9IjIwIiB3aWR0aD0iOSIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxNSIgeT0iMjQiIHdpZHRoPSI5IiBoZWlnaHQ9'@;
put 'IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjExIiB5PSI4IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0'@;
put 'aC01LS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMSIgeT0iMTIiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTYtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjExIiB5PSIxNiIg'@;
put 'd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNy0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTEiIHk9IjIwIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2Vk'@;
put 'IGNsci1pLW91dGxpbmUtcGF0aC04LS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMSIgeT0iMjQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTktLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxw'@;
put 'YXRoIGQ9Ik0xNSw4djJoOC42NmE3LjQ1LDcuNDUsMCwwLDEtLjg5LTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xMC0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LDEzLjIyVjMySDhWNEgyMi43OGE3LjQ1LDcuNDUsMCww'@;
put 'LDEsLjg4LTJIOEEyLDIsMCwwLDAsNiw0VjMyYTIsMiwwLDAsMCwyLDJIMjhhMiwyLDAsMCwwLDItMlYxMy41QTcuNDksNy40OSwwLDAsMSwyOCwxMy4yMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTExLS1iYWRnZWQiIC8+XG4gICAgICAgICAg'@;
put 'ICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiICBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xMi0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LDJIOEEyLDIsMCwwLDAsNiw0VjMyYTIsMiwwLDAsMCwy'@;
put 'LDJIMjhhMiwyLDAsMCwwLDItMlY0QTIsMiwwLDAsMCwyOCwyWk0xMywyNkgxMVYyNGgyWm0wLTRIMTFWMjBoMlptMC00SDExVjE2aDJabTAtNEgxMVYxMmgyWm0wLTRIMTFWOGgyWk0yNSwyNkgxNVYyNEgyNVptMC00SDE1VjIwSDI1Wm0wLTRIMTVWMTZIMjVabTAtNEgxNVYxMkgyNVptMC00'@;
put 'SDE1VjhIMjVaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIzLjY2LDEwSDE1VjhoNy43OGE3LjQyLDcuNDIsMCwwLDEsLjg5LTZIOEEyLDIsMCwwLDAsNiw0VjMyYTIsMiwwLDAsMCwyLDJIMjhhMiwyLDAsMCwwLDIt'@;
put 'MlYxMy41QTcuNDksNy40OSwwLDAsMSwyMy42NiwxMFpNMTMsMjZIMTFWMjRoMlptMC00SDExVjIwaDJabTAtNEgxMVYxNmgyWm0wLTRIMTFWMTJoMlptMC00SDExVjhoMlpNMjUsMjZIMTVWMjRIMjVabTAtNEgxNVYyMEgyNVptMC00SDE1VjE2SDI1Wm0wLTRIMTVWMTJIMjVaIiBjbGFzcz0i'@;
put 'Y2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPicp'@;
put 'LHkuQ2xyU2hhcGVSZWRvPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yNCw0LjIyYTEsMSwwLDAsMC0xLjQxLDEuNDJsNS41Niw1LjQ5aC0xM0ExMSwxMSwwLDAsMCwxMC4wNywzMiwxLDEsMCwwLDAsMTEsMzAuMThhOSw5LDAsMCwxLTUtOCw5LjA4LDkuMDgsMCwwLDEsOS4xMy05aDEz'@;
put 'bC01LjU0LDUuNDhBMSwxLDAsMCwwLDI0LDIwbDgtNy45MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPicpLHkuQ2xyU2hhcGVVbmRvPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yMC44NywxMS4xNGgtMTNsNS41Ni01LjQ5QTEsMSwwLDAsMCwx'@;
put 'Miw0LjIyTDQsMTIuMTMsMTIsMjBhMSwxLDAsMCwwLDEuNDEtMS40Mkw3Ljg2LDEzLjE0aDEzYTkuMDgsOS4wOCwwLDAsMSw5LjEzLDksOSw5LDAsMCwxLTUsOEExLDEsMCwwLDAsMjUuOTMsMzJhMTEsMTEsMCwwLDAtNS4wNi0yMC44MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91'@;
put 'dGxpbmUtcGF0aC0xIiAvPicpLHkuQ2xyU2hhcGVTY3JvbGw9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTM0LDExLjEyVjYuNThhNC41LDQuNSwwLDAsMC00LjUtNC41aC0xNkE0LjUsNC41LDAsMCwwLDksNi41OHYyM2EyLjUsMi41LDAsMSwxLTUsMFYyNkg3LjE5VjI0SDJ2NS41QTQu'@;
put 'NSw0LjUsMCwwLDAsNi41LDM0SDI1LjU4YTQuNSw0LjUsMCwwLDAsNC41LTQuNVYxMy4xM2gtMlYyOS41NGEyLjUsMi41LDAsMCwxLTIuNSwyLjVIMTAuMjRhNC40Nyw0LjQ3LDAsMCwwLC43Ni0yLjV2LTIzYTIuNSwyLjUsMCwwLDEsNSwwdjQuNTRabS00LjUtN0EyLjUsMi41LDAsMCwxLDMy'@;
put 'LDYuNThWOS4xMkgxOFY2LjU4YTQuNDgsNC40OCwwLDAsMC0uNzYtMi41WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjguMDgsMTUuNFYyOS41NGEyLjUsMi41LDAsMCwxLTIuNSwyLjVIMTAuMjRhNC40Nyw0'@;
put 'LjQ3LDAsMCwwLC43Ni0yLjV2LTIzYTIuNSwyLjUsMCwwLDEsNSwwdjQuNTRoMi42MUEzLjY2LDMuNjYsMCwwLDEsMTksOS44OWwuNDQtLjc2SDE4VjYuNThhNC40OCw0LjQ4LDAsMCwwLS43Ni0yLjVIMjIuNGwxLjE1LTJIMTMuNUE0LjUsNC41LDAsMCwwLDksNi41OHYyM2EyLjUsMi41LDAs'@;
put 'MSwxLTUsMFYyNkg3LjE5VjI0SDJ2NS41QTQuNSw0LjUsMCwwLDAsNi41LDM0SDI1LjU4YTQuNSw0LjUsMCwwLDAsNC41LTQuNVYxNS40WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBk'@;
put 'PSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1w'@;
put 'YXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAsMTMuNWE3LjQ5LDcuNDksMCwwLDEtMS45Mi0uMjZ2MTYuM2EyLjUsMi41LDAsMCwxLTIuNSwyLjVIMTAuMjRhNC40Nyw0LjQ3LDAsMCwwLC43Ni0yLjV2LTIzYTIuNSwyLjUsMCwwLDEsNSww'@;
put 'djQuNTRoOC41NGE3LjUsNy41LDAsMCwxLTEuMzUtMkgxOFY2LjU4YTQuNDgsNC40OCwwLDAsMC0uNzYtMi41aDUuNTJhNy40NCw3LjQ0LDAsMCwxLC44Ni0ySDEzLjVBNC41LDQuNSwwLDAsMCw5LDYuNTh2MjNhMi41LDIuNSwwLDEsMS01LDBWMjZINy4xOVYyNEgydjUuNUE0LjUsNC41LDAs'@;
put 'MCwwLDYuNSwzNEgyNS41OGE0LjUsNC41LDAsMCwwLDQuNS00LjV2LTE2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLW91'@;
put 'dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTM0LDExLjEyVjYuNThhNC41LDQuNSwwLDAsMC00LjUtNC41aC0xNkE0LjUsNC41LDAsMCwwLDksNi41OFYyNEgydjUuNUE0LjUsNC41LDAsMCww'@;
put 'LDYuNSwzNEgyNS41OGE0LjUsNC41LDAsMCwwLDQuNS00LjVWMTMuMTNoLTJWMjkuNTRhMi41LDIuNSwwLDAsMS0yLjUsMi41SDEwLjI0YTQuNDcsNC40NywwLDAsMCwuNzYtMi41di0yM2EyLjUsMi41LDAsMCwxLDUsMHY0LjU0WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBh'@;
put 'dGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOC4wOCwxNS40VjI5LjU0YTIuNSwyLjUsMCwwLDEtMi41LDIuNUgxMC4yNGE0LjQ3LDQuNDcsMCwwLDAsLjc2LTIuNXYtMjNhMi41LDIuNSwwLDAsMSw1LDB2NC41NGgyLjYxQTMuNjYsMy42NiwwLDAsMSwxOSw5Ljg5bDQuNTEtNy44'@;
put 'SDEzLjVBNC41LDQuNSwwLDAsMCw5LDYuNThWMjRIMnY1LjVBNC41LDQuNSwwLDAsMCw2LjUsMzRIMjUuNThhNC41LDQuNSwwLDAsMCw0LjUtNC41VjE1LjRaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAg'@;
put 'PHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xp'@;
put 'ZC1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAsMTMuNWE3LjQ5LDcuNDksMCwwLDEtMS45Mi0uMjZ2MTYuM2EyLjUsMi41LDAsMCwxLTIuNSwyLjVIMTAuMjRhNC40Nyw0LjQ3LDAsMCwwLC43Ni0yLjV2LTIzYTIuNSwyLjUsMCwwLDEs'@;
put 'NSwwdjQuNTRoOC41NGE3LjQ2LDcuNDYsMCwwLDEtLjkyLTlIMTMuNUE0LjUsNC41LDAsMCwwLDksNi41OFYyNEgydjUuNUE0LjUsNC41LDAsMCwwLDYuNSwzNEgyNS41OGE0LjUsNC41LDAsMCwwLDQuNS00LjV2LTE2WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQt'@;
put 'cGF0aC0xLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiICBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgLz4nKSx5LkNsclNoYXBlRmlsZVNldHRpbmdzPSgwLGcuY2xy'@;
put 'SWNvblNWRykoJzxwYXRoIGQ9Ik0zMy44MywyMy40M2ExLjE2LDEuMTYsMCwwLDAtLjcxLTEuMTJsLTEuNjgtLjVjLS4wOS0uMjQtLjE4LS40OC0uMjktLjcxbC43OC0xLjQ0YTEuMTYsMS4xNiwwLDAsMC0uMjEtMS4zN2wtMS40Mi0xLjQxYTEuMTYsMS4xNiwwLDAsMC0xLjM3LS4ybC0xLjQ1'@;
put 'Ljc2YTcuODQsNy44NCwwLDAsMC0uNzYtLjMybC0uNDgtMS41OGExLjE1LDEuMTUsMCwwLDAtMS4xMS0uNzdoLTJhMS4xNiwxLjE2LDAsMCwwLTEuMTEuODJsLS40NywxLjU0YTcuNzYsNy43NiwwLDAsMC0uNzcuMzJsLTEuNDItLjc2YTEuMTYsMS4xNiwwLDAsMC0xLjM2LjJsLTEuNDUsMS40'@;
put 'YTEuMTYsMS4xNiwwLDAsMC0uMjEsMS4zOEwxNy4wOCwyMWE3LjY0LDcuNjQsMCwwLDAtLjMxLjc0bC0xLjU4LjQ3YTEuMTUsMS4xNSwwLDAsMC0uODMsMS4xMXYyYTEuMTUsMS4xNSwwLDAsMCwuODMsMS4xbDEuNTkuNDdhNy41Myw3LjUzLDAsMCwwLC4zMS43MmwtLjc4LDEuNDZhMS4xNiwx'@;
put 'LjE2LDAsMCwwLC4yMSwxLjM3bDEuNDIsMS40YTEuMTYsMS4xNiwwLDAsMCwxLjM3LjIxbDEuNDgtLjc4Yy4yMy4xMS40Ny4yLjcyLjI5TDIyLDMzLjE4YTEuMTYsMS4xNiwwLDAsMCwxLjExLjgxaDJhMS4xNiwxLjE2LDAsMCwwLDEuMTEtLjgybC40Ny0xLjU4Yy4yNC0uMDguNDctLjE4Ljct'@;
put 'LjI5bDEuNS43OWExLjE2LDEuMTYsMCwwLDAsMS4zNi0uMmwxLjQyLTEuNGExLjE2LDEuMTYsMCwwLDAsLjIxLTEuMzhsLS43OS0xLjQ1cS4xNi0uMzQuMjktLjY5TDMzLDI2LjVhMS4xNSwxLjE1LDAsMCwwLC44My0xLjExWm0tMS42LDEuNjMtMi4xMS42Mi0uMTIuNDJhNiw2LDAsMCwxLS41'@;
put 'LDEuMTlsLS4yMS4zOCwxLDEuOTEtMSwxLTItMS0uMzcuMmE2LjIxLDYuMjEsMCwwLDEtMS4yLjQ5bC0uNDIuMTItLjYzLDIuMDlIMjMuNDJsLS42My0yLjA4LS40Mi0uMTJhNi4yMyw2LjIzLDAsMCwxLTEuMjEtLjQ5bC0uMzctLjItMS45NCwxLTEtMSwxLTEuOTQtLjIyLS4zOEE2LDYsMCww'@;
put 'LDEsMTguMTcsMjZMMTgsMjUuNjMsMTYsMjVWMjMuNjlMMTgsMjMuMDhsLjEzLS40MWE1Ljk0LDUuOTQsMCwwLDEsLjUzLTEuMjNMMTguOSwyMWwtMS0xLjg1LDEtLjk0LDEuODksMSwuMzgtLjIxYTYuMjMsNi4yMywwLDAsMSwxLjI2LS41MmwuNDEtLjEyLjYzLTJoMS4zOGwuNjIsMiwuNDEu'@;
put 'MTJBNi4yMSw2LjIxLDAsMCwxLDI3LjEsMTlsLjM4LjIxLDEuOTItMSwxLDEtMSwxLjg5LjIxLjM4YTYuMDgsNi4wOCwwLDAsMSwuNSwxLjIxbC4xMi40MiwyLjA2LjYxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBk'@;
put 'PSJNMjQuMTIsMjAuMzVhNCw0LDAsMSwwLDQuMDgsNEE0LjA2LDQuMDYsMCwwLDAsMjQuMTIsMjAuMzVabTAsNi40NmEyLjQzLDIuNDMsMCwxLDEsMi40OC0yLjQzQTIuNDYsMi40NiwwLDAsMSwyNC4xMiwyNi44MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0y'@;
put 'IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE0LjQ5LDMxSDZWNUgyNnY3Ljg5YTMuMiwzLjIsMCwwLDEsMiwxLjcyVjVhMiwyLDAsMCwwLTItMkg2QTIsMiwwLDAsMCw0LDVWMzFhMiwyLDAsMCwwLDIsMkgxNi4yM2wtMS4xLTEuMDhBMy4xMSwzLjExLDAsMCwxLDE0LjQ5LDMxWiIgY2xh'@;
put 'c3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjQuMTIsMjAuMzVhNCw0LDAsMSwwLDQuMDgsNEE0LjA2LDQuMDYsMCwwLDAsMjQuMTIsMjAuMzVabTAsNi40NmEyLjQzLDIuNDMsMCwxLDEsMi40OC0yLjQzQTIuNDYsMi40'@;
put 'NiwwLDAsMSwyNC4xMiwyNi44MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjgzLDIzLjQzYTEuMTYsMS4xNiwwLDAsMC0uNzEtMS4xMmwtMS42OC0uNWMtLjA5LS4yNC0u'@;
put 'MTgtLjQ4LS4yOS0uNzFsLjc4LTEuNDRhMS4xNiwxLjE2LDAsMCwwLS4yMS0xLjM3bC0xLjQyLTEuNDFhMS4xNiwxLjE2LDAsMCwwLTEuMzctLjJsLTEuNDUuNzZhNy44NCw3Ljg0LDAsMCwwLS43Ni0uMzJsLS40OC0xLjU4YTEuMTUsMS4xNSwwLDAsMC0xLjExLS43N2gtMmExLjE2LDEuMTYs'@;
put 'MCwwLDAtMS4xMS44MmwtLjQ3LDEuNTRhNy43Niw3Ljc2LDAsMCwwLS43Ny4zMmwtMS40Mi0uNzZhMS4xNiwxLjE2LDAsMCwwLTEuMzYuMmwtMS40NSwxLjRhMS4xNiwxLjE2LDAsMCwwLS4yMSwxLjM4TDE3LjA4LDIxYTcuNjQsNy42NCwwLDAsMC0uMzEuNzRsLTEuNTguNDdhMS4xNSwxLjE1'@;
put 'LDAsMCwwLS44MywxLjExdjJhMS4xNSwxLjE1LDAsMCwwLC44MywxLjFsMS41OS40N2E3LjUzLDcuNTMsMCwwLDAsLjMxLjcybC0uNzgsMS40NmExLjE2LDEuMTYsMCwwLDAsLjIxLDEuMzdsMS40MiwxLjRhMS4xNiwxLjE2LDAsMCwwLDEuMzcuMjFsMS40OC0uNzhjLjIzLjExLjQ3LjIuNzIu'@;
put 'MjlMMjIsMzMuMThhMS4xNiwxLjE2LDAsMCwwLDEuMTEuODFoMmExLjE2LDEuMTYsMCwwLDAsMS4xMS0uODJsLjQ3LTEuNThjLjI0LS4wOC40Ny0uMTguNy0uMjlsMS41Ljc5YTEuMTYsMS4xNiwwLDAsMCwxLjM2LS4ybDEuNDItMS40YTEuMTYsMS4xNiwwLDAsMCwuMjEtMS4zOGwtLjc5LTEu'@;
put 'NDVxLjE2LS4zNC4yOS0uNjlMMzMsMjYuNWExLjE1LDEuMTUsMCwwLDAsLjgzLTEuMTFabS0xLjYsMS42My0yLjExLjYyLS4xMi40MmE2LDYsMCwwLDEtLjUsMS4xOWwtLjIxLjM4LDEsMS45MS0xLDEtMi0xLS4zNy4yYTYuMjEsNi4yMSwwLDAsMS0xLjIuNDlsLS40Mi4xMi0uNjMsMi4wOUgy'@;
put 'My40MmwtLjYzLTIuMDgtLjQyLS4xMmE2LjIzLDYuMjMsMCwwLDEtMS4yMS0uNDlsLS4zNy0uMi0xLjk0LDEtMS0xLDEtMS45NC0uMjItLjM4QTYsNiwwLDAsMSwxOC4xNywyNkwxOCwyNS42MywxNiwyNVYyMy42OUwxOCwyMy4wOGwuMTMtLjQxYTUuOTQsNS45NCwwLDAsMSwuNTMtMS4yM0wx'@;
put 'OC45LDIxbC0xLTEuODUsMS0uOTQsMS44OSwxLC4zOC0uMjFhNi4yMyw2LjIzLDAsMCwxLDEuMjYtLjUybC40MS0uMTIuNjMtMmgxLjM4bC42MiwyLC40MS4xMkE2LjIxLDYuMjEsMCwwLDEsMjcuMSwxOWwuMzguMjEsMS45Mi0xLDEsMS0xLDEuODkuMjEuMzhhNi4wOCw2LjA4LDAsMCwxLC41'@;
put 'LDEuMjFsLjEyLjQyLDIuMDYuNjFaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNC40OSwzMUg2VjVIMjEuODdMMjMsM0g2QTIsMiwwLDAsMCw0LDVWMzFhMiwyLDAsMCwwLDIs'@;
put 'MkgxNi4yM2wtMS4xLTEuMDhBMy4xMSwzLjExLDAsMCwxLDE0LjQ5LDMxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCww'@;
put 'LDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIC8+XG4gICAg'@;
put 'ICAgICAgICA8cGF0aCBkPSJNMzMuODMsMjMuNDNhMS4xNiwxLjE2LDAsMCwwLS43MS0xLjEybC0xLjY4LS41Yy0uMDktLjI0LS4xOC0uNDgtLjI5LS43MWwuNzgtMS40NGExLjE2LDEuMTYsMCwwLDAtLjIxLTEuMzdsLTEuNDItMS40MWExLjE2LDEuMTYsMCwwLDAtMS4zNy0uMmwtMS40NS43'@;
put 'NmE3Ljg0LDcuODQsMCwwLDAtLjc2LS4zMmwtLjQ4LTEuNThhMS4xNSwxLjE1LDAsMCwwLTEuMTEtLjc3aC0yYTEuMTYsMS4xNiwwLDAsMC0xLjExLjgybC0uNDcsMS41NGE3Ljc2LDcuNzYsMCwwLDAtLjc3LjMybC0xLjQyLS43NmExLjE2LDEuMTYsMCwwLDAtMS4zNi4ybC0xLjQ1LDEuNGEx'@;
put 'LjE2LDEuMTYsMCwwLDAtLjIxLDEuMzhMMTcuMDgsMjFhNy42NCw3LjY0LDAsMCwwLS4zMS43NGwtMS41OC40N2ExLjE1LDEuMTUsMCwwLDAtLjgzLDEuMTF2MmExLjE1LDEuMTUsMCwwLDAsLjgzLDEuMWwxLjU5LjQ3YTcuNTMsNy41MywwLDAsMCwuMzEuNzJsLS43OCwxLjQ2YTEuMTYsMS4x'@;
put 'NiwwLDAsMCwuMjEsMS4zN2wxLjQyLDEuNGExLjE2LDEuMTYsMCwwLDAsMS4zNy4yMWwxLjQ4LS43OGMuMjMuMTEuNDcuMi43Mi4yOUwyMiwzMy4xOGExLjE2LDEuMTYsMCwwLDAsMS4xMS44MWgyYTEuMTYsMS4xNiwwLDAsMCwxLjExLS44MmwuNDctMS41OGMuMjQtLjA4LjQ3LS4xOC43LS4y'@;
put 'OWwxLjUuNzlhMS4xNiwxLjE2LDAsMCwwLDEuMzYtLjJsMS40Mi0xLjRhMS4xNiwxLjE2LDAsMCwwLC4yMS0xLjM4bC0uNzktMS40NXEuMTYtLjM0LjI5LS42OUwzMywyNi41YTEuMTUsMS4xNSwwLDAsMCwuODMtMS4xMVptLTEuNiwxLjYzLTIuMTEuNjItLjEyLjQyYTYsNiwwLDAsMS0uNSwx'@;
put 'LjE5bC0uMjEuMzgsMSwxLjkxLTEsMS0yLTEtLjM3LjJhNi4yMSw2LjIxLDAsMCwxLTEuMi40OWwtLjQyLjEyLS42MywyLjA5SDIzLjQybC0uNjMtMi4wOC0uNDItLjEyYTYuMjMsNi4yMywwLDAsMS0xLjIxLS40OWwtLjM3LS4yLTEuOTQsMS0xLTEsMS0xLjk0LS4yMi0uMzhBNiw2LDAsMCwx'@;
put 'LDE4LjE3LDI2TDE4LDI1LjYzLDE2LDI1VjIzLjY5TDE4LDIzLjA4bC4xMy0uNDFhNS45NCw1Ljk0LDAsMCwxLC41My0xLjIzTDE4LjksMjFsLTEtMS44NSwxLS45NCwxLjg5LDEsLjM4LS4yMWE2LjIzLDYuMjMsMCwwLDEsMS4yNi0uNTJsLjQxLS4xMi42My0yaDEuMzhsLjYyLDIsLjQxLjEy'@;
put 'QTYuMjEsNi4yMSwwLDAsMSwyNy4xLDE5bC4zOC4yMSwxLjkyLTEsMSwxLTEsMS44OS4yMS4zOGE2LjA4LDYuMDgsMCwwLDEsLjUsMS4yMWwuMTIuNDIsMi4wNi42MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgLz5cbiAgICAg'@;
put 'ICAgICAgIDxwYXRoIGQ9Ik0yNC4xMiwyMC4zNWE0LDQsMCwxLDAsNC4wOCw0QTQuMDYsNC4wNiwwLDAsMCwyNC4xMiwyMC4zNVptMCw2LjQ2YTIuNDMsMi40MywwLDEsMSwyLjQ4LTIuNDNBMi40NiwyLjQ2LDAsMCwxLDI0LjEyLDI2LjgyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdl'@;
put 'ZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE0LjQ5LDMxSDZWNUgyMy4wOGE2Ljk0LDYuOTQsMCwwLDEsLjYtMkg2QTIsMiwwLDAsMCw0LDVWMzFhMiwyLDAsMCwwLDIsMkgxNi4yM2wtMS4xLTEuMDhBMy4xMSwzLjExLDAsMCwxLDE0'@;
put 'LjQ5LDMxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LDE1LjMzVjEyLjcxYTcsNywwLDAsMS0yLTF2MS44OEEzLjIsMy4yLDAsMCwxLDI4LDE1LjMzWiIgY2xhc3M9ImNsci1p'@;
put 'LW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYmFkZ2VkIGNsci1pLWJhZGdlIiAv'@;
put 'PlxuICAgICAgICAgICAgPHBhdGggZD0iTTE1LjU1LDMxSDZWNUgyNnY4Ljc4YTIuMzcsMi4zNywwLDAsMSwyLDEuNTdWNWEyLDIsMCwwLDAtMi0ySDZBMiwyLDAsMCwwLDQsNVYzMWEyLDIsMCwwLDAsMiwySDE3LjE2bC0xLTFBMi4zOCwyLjM4LDAsMCwxLDE1LjU1LDMxWiIgY2xhc3M9ImNs'@;
put 'ci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy41NCwyMy40N2wtMi0uNjFhNy4wNiw3LjA2LDAsMCwwLS41OC0xLjQxbDEtMS44NmEuMzcuMzcsMCwwLDAtLjA3LS40NEwzMC40MSwxNy43YS4zNy4zNywwLDAsMC0uNDQtLjA3bC0xLjg1'@;
put 'LDFBNyw3LDAsMCwwLDI2LjY5LDE4bC0uNjEtMmEuMzcuMzcsMCwwLDAtLjM2LS4yNWgtMmEuMzcuMzcsMCwwLDAtLjM1LjI2bC0uNjEsMmE3LDcsMCwwLDAtMS40NC42MWwtMS44Mi0xYS4zNy4zNywwLDAsMC0uNDQuMDdsLTEuNDcsMS40NGEuMzcuMzcsMCwwLDAtLjA3LjQ0bDEsMS44MmE3'@;
put 'LDcsMCwwLDAtLjYxLDEuNDRsLTIsLjYxYS4zNy4zNywwLDAsMC0uMjYuMzV2MmEuMzcuMzcsMCwwLDAsLjI2LjM1bDIsLjYxYTcsNywwLDAsMCwuNjEsMS40MWwtMSwxLjlhLjM3LjM3LDAsMCwwLC4wNy40NEwxOSwzMmEuMzcuMzcsMCwwLDAsLjQ0LjA3bDEuODctMWE3LjA2LDcuMDYsMCww'@;
put 'LDAsMS4zOS41N2wuNjEsMmEuMzcuMzcsMCwwLDAsLjM1LjI2aDJhLjM3LjM3LDAsMCwwLC4zNS0uMjZsLjYxLTJhNyw3LDAsMCwwLDEuMzgtLjU3bDEuODksMWEuMzcuMzcsMCwwLDAsLjQ0LS4wN2wxLjQ1LTEuNDVhLjM3LjM3LDAsMCwwLC4wNy0uNDRsLTEtMS44OGE3LjA2LDcuMDYsMCww'@;
put 'LDAsLjU4LTEuMzlsMi0uNjFhLjM3LjM3LDAsMCwwLC4yNi0uMzVWMjMuODNBLjM3LjM3LDAsMCwwLDMzLjU0LDIzLjQ3Wk0yNC43LDI4LjE5QTMuMzMsMy4zMywwLDEsMSwyOCwyNC44NiwzLjMzLDMuMzMsMCwwLDEsMjQuNywyOC4xOVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xp'@;
put 'ZC1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuNTQsMjMuNDdsLTItLjYxYTcuMDYsNy4wNiwwLDAsMC0uNTgtMS40MWwxLTEuODZhLjM3LjM3LDAsMCwwLS4wNy0uNDRMMzAuNDEsMTcuN2EuMzcuMzcsMCwwLDAtLjQ0LS4wN2wtMS44NSwxQTcsNywwLDAsMCwyNi42OSwx'@;
put 'OGwtLjYxLTJhLjM3LjM3LDAsMCwwLS4zNi0uMjVoLTJhLjM3LjM3LDAsMCwwLS4zNS4yNmwtLjYxLDJhNyw3LDAsMCwwLTEuNDQuNjFsLTEuODItMWEuMzcuMzcsMCwwLDAtLjQ0LjA3bC0xLjQ3LDEuNDRhLjM3LjM3LDAsMCwwLS4wNy40NGwxLDEuODJhNyw3LDAsMCwwLS42MSwxLjQ0bC0y'@;
put 'LC42MWEuMzcuMzcsMCwwLDAtLjI2LjM1djJhLjM3LjM3LDAsMCwwLC4yNi4zNWwyLC42MWE3LDcsMCwwLDAsLjYxLDEuNDFsLTEsMS45YS4zNy4zNywwLDAsMCwuMDcuNDRMMTksMzJhLjM3LjM3LDAsMCwwLC40NC4wN2wxLjg3LTFhNy4wNiw3LjA2LDAsMCwwLDEuMzkuNTdsLjYxLDJhLjM3'@;
put 'LjM3LDAsMCwwLC4zNS4yNmgyYS4zNy4zNywwLDAsMCwuMzUtLjI2bC42MS0yYTcsNywwLDAsMCwxLjM4LS41N2wxLjg5LDFhLjM3LjM3LDAsMCwwLC40NC0uMDdsMS40NS0xLjQ1YS4zNy4zNywwLDAsMCwuMDctLjQ0bC0xLTEuODhhNy4wNiw3LjA2LDAsMCwwLC41OC0xLjM5bDItLjYxYS4z'@;
put 'Ny4zNywwLDAsMCwuMjYtLjM1VjIzLjgzQS4zNy4zNywwLDAsMCwzMy41NCwyMy40N1pNMjQuNywyOC4xOUEzLjMzLDMuMzMsMCwxLDEsMjgsMjQuODYsMy4zMywzLjMzLDAsMCwxLDI0LjcsMjguMTlaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1h'@;
put 'bGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE1LjU1LDMxSDZWNUgyMS44N0wyMywzSDZBMiwyLDAsMCwwLDQsNVYzMWEyLDIsMCwwLDAsMiwySDE3LjE2bC0xLTFBMi4zOCwyLjM4LDAsMCwxLDE1LjU1LDMxWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNv'@;
put 'bGlkLXBhdGgtMi0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiICBj'@;
put 'bGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0zLS1hbGVydGVkIGNsci1pLWFsZXJ0IiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRn'@;
put 'ZWQgY2xyLWktYmFkZ2UiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuNTQsMjMuNDdsLTItLjYxYTcuMDYsNy4wNiwwLDAsMC0uNTgtMS40MWwxLTEuODZhLjM3LjM3LDAsMCwwLS4wNy0uNDRMMzAuNDEsMTcuN2EuMzcuMzcsMCwwLDAtLjQ0LS4wN2wtMS44NSwxQTcsNywwLDAsMCwy'@;
put 'Ni42OSwxOGwtLjYxLTJhLjM3LjM3LDAsMCwwLS4zNi0uMjVoLTJhLjM3LjM3LDAsMCwwLS4zNS4yNmwtLjYxLDJhNyw3LDAsMCwwLTEuNDQuNjFsLTEuODItMWEuMzcuMzcsMCwwLDAtLjQ0LjA3bC0xLjQ3LDEuNDRhLjM3LjM3LDAsMCwwLS4wNy40NGwxLDEuODJhNyw3LDAsMCwwLS42MSwx'@;
put 'LjQ0bC0yLC42MWEuMzcuMzcsMCwwLDAtLjI2LjM1djJhLjM3LjM3LDAsMCwwLC4yNi4zNWwyLC42MWE3LDcsMCwwLDAsLjYxLDEuNDFsLTEsMS45YS4zNy4zNywwLDAsMCwuMDcuNDRMMTksMzJhLjM3LjM3LDAsMCwwLC40NC4wN2wxLjg3LTFhNy4wNiw3LjA2LDAsMCwwLDEuMzkuNTdsLjYx'@;
put 'LDJhLjM3LjM3LDAsMCwwLC4zNS4yNmgyYS4zNy4zNywwLDAsMCwuMzUtLjI2bC42MS0yYTcsNywwLDAsMCwxLjM4LS41N2wxLjg5LDFhLjM3LjM3LDAsMCwwLC40NC0uMDdsMS40NS0xLjQ1YS4zNy4zNywwLDAsMCwuMDctLjQ0bC0xLTEuODhhNy4wNiw3LjA2LDAsMCwwLC41OC0xLjM5bDIt'@;
put 'LjYxYS4zNy4zNywwLDAsMCwuMjYtLjM1VjIzLjgzQS4zNy4zNywwLDAsMCwzMy41NCwyMy40N1pNMjQuNywyOC4xOUEzLjMzLDMuMzMsMCwxLDEsMjgsMjQuODYsMy4zMywzLjMzLDAsMCwxLDI0LjcsMjguMTlaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRo'@;
put 'LTItLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNS41NSwzMUg2VjVIMjMuMDhhNi45NCw2Ljk0LDAsMCwxLC42LTJINkEyLDIsMCwwLDAsNCw1VjMxYTIsMiwwLDAsMCwyLDJIMTcuMTZsLTEtMUEyLjM4LDIuMzgsMCwwLDEsMTUuNTUsMzFaIiBjbGFzcz0iY2xyLWktc29s'@;
put 'aWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOCwxNS4zNlYxMi43MWE3LDcsMCwwLDEtMi0xdjJBMi4zNywyLjM3LDAsMCwxLDI4LDE1LjM2WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0'@;
put 'aC00LS1iYWRnZWQiIC8+JykseS5DbHJTaGFwZVR3b1dheUFycm93cz0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjMuNDMsMTYuODNBMSwxLDAsMCwwLDIyLDE4LjI0TDI1LjcyLDIySDcuODNhMSwxLDAsMCwwLDAsMkgyNS43MkwyMiwyNy43YTEsMSwwLDEsMCwxLjQyLDEuNDFMMjku'@;
put 'NTMsMjNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMy4yNCwxOC40NWExLDEsMCwwLDAsLjcxLTEuNzFMMTAuMjQsMTNIMjguMTJhMSwxLDAsMCwwLDAtMkgxMC4yNGwzLjcxLTMuNzNhMSwxLDAsMCwwLTEu'@;
put 'NDItMS40MUw2LjQyLDEybDYuMTEsNi4xNEExLDEsMCwwLDAsMTMuMjQsMTguNDVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz4nKSx5LkNsclNoYXBlU3dpdGNoPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik01LjcxLDE0SDIwLjkyVjEySDUuNzFM'@;
put 'OS40Miw4LjI3QTEsMSwwLDEsMCw4LDYuODZMMS44OSwxMyw4LDE5LjE0YTEsMSwwLDEsMCwxLjQyLTEuNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMjMiIHk9IjEyIiB3aWR0aD0iMyIgaGVpZ2h0PSIyIiBj'@;
put 'bGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjI4IiB5PSIxMiIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8cGF0aCBk'@;
put 'PSJNMjcuOTIsMTcuODZhMSwxLDAsMCwwLTEuNDIsMS40MUwzMC4yMSwyM0gxNXYySDMwLjIxTDI2LjUsMjguNzRhMSwxLDAsMSwwLDEuNDIsMS40TDM0LDI0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMCIg'@;
put 'eT0iMjMiIHdpZHRoPSIzIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iNiIgeT0iMjMiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0'@;
put 'aC02IiAvPicpLHkuQ2xyU2hhcGVUb29scz0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjAsMTRIMTZhMSwxLDAsMCwwLTEsMXY2YTEsMSwwLDAsMCwxLDFoNGExLDEsMCwwLDAsMS0xVjE1QTEsMSwwLDAsMCwyMCwxNFptLS40LDYuNkgxNi40VjE1LjRoMy4yWiIgY2xhc3M9ImNsci1p'@;
put 'LW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuNzEsMTIuMzgsMjkuNjIsOC4yOUExLDEsMCwwLDAsMjguOTIsOGgtNVY2LjA1QTIsMiwwLDAsMCwyMiw0SDEzLjg0QTEuOTIsMS45MiwwLDAsMCwxMiw2LjA1VjhINy4wOGExLDEsMCww'@;
put 'LDAtLjcxLjI5TDIuMjksMTIuMzhhMSwxLDAsMCwwLS4yOS43MVYyOGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMTMuMDhBMSwxLDAsMCwwLDMzLjcxLDEyLjM4Wk0xNCw2aDhWOEgxNFpNMzIsMTdIMjJ2MS45M0gzMlYyOEg0VjE4LjkzSDE0VjE3SDRWMTMuNUw3LjUsMTBoMjFM'@;
put 'MzIsMTMuNVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTYuNCIgeT0iMTUuNCIgd2lkdGg9IjMuMiIgaGVpZ2h0PSI1LjIiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+XG4gICAg'@;
put 'ICAgICAgICA8cGF0aCBkPSJNMjEsMjFhMSwxLDAsMCwxLTEsMUgxNmExLDEsMCwwLDEtMS0xVjE5SDJ2OWEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMTlIMjFaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0i'@;
put 'TTMzLjcxLDEyLjM4LDI5LjYyLDguMjlBMSwxLDAsMCwwLDI4LjkyLDhoLTVWNi4wNUEyLDIsMCwwLDAsMjIsNEgxMy44NEExLjkyLDEuOTIsMCwwLDAsMTIsNi4wNVY4SDcuMDhhMSwxLDAsMCwwLS43MS4yOUwyLjI5LDEyLjM4YTEsMSwwLDAsMC0uMjkuNzFWMTdIMTVWMTVhMSwxLDAsMCwx'@;
put 'LDEtMWg0YTEsMSwwLDAsMSwxLDF2MkgzNFYxMy4wOEExLDEsMCwwLDAsMzMuNzEsMTIuMzhaTTIyLDhIMTRWNmg4WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgLz4nKSx5LkNsclNoYXBlV2luZG93Q2xvc2U9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE5'@;
put 'LjQxLDE4bDcuMjktNy4yOWExLDEsMCwwLDAtMS40MS0xLjQxTDE4LDE2LjU5LDEwLjcxLDkuMjlhMSwxLDAsMCwwLTEuNDEsMS40MUwxNi41OSwxOCw5LjI5LDI1LjI5YTEsMSwwLDEsMCwxLjQxLDEuNDFMMTgsMTkuNDFsNy4yOSw3LjI5YTEsMSwwLDAsMCwxLjQxLTEuNDFaIiBjbGFzcz0i'@;
put 'Y2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz4nKSx5LkNsclNoYXBlV2luZG93TWF4PSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yNy44OSw5aC0yMGEyLDIsMCwwLDAtMiwyVjI1YTIsMiwwLDAsMCwyLDJoMjBhMiwyLDAsMCwwLDItMlYxMUEyLDIsMCwwLDAsMjcu'@;
put 'ODksOVptLTIwLDE2VjExaDIwVjI1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+JykseS5DbHJTaGFwZVdpbmRvd01pbj0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjcsMjdIOWExLDEsMCwwLDEsMC0ySDI3YTEsMSwwLDAsMSwwLDJaIiBjbGFz'@;
put 'cz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz4nKSx5LkNsclNoYXBlV2luZG93UmVzdG9yZT0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjgsOEgxNGEyLDIsMCwwLDAtMiwydjJoMlYxMEgyOFYyMEgyNnYyaDJhMiwyLDAsMCwwLDItMlYxMEEyLDIsMCwwLDAs'@;
put 'MjgsOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIyLDE0SDhhMiwyLDAsMCwwLTIsMlYyNmEyLDIsMCwwLDAsMiwySDIyYTIsMiwwLDAsMCwyLTJWMTZBMiwyLDAsMCwwLDIyLDE0Wk04LDI2VjE2SDIyVjI2'@;
put 'WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+JykseS5DbHJTaGFwZVpvb21Jbj0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTYsNEExMiwxMiwwLDEsMCwyOCwxNiwxMiwxMiwwLDAsMCwxNiw0Wm0wLDIxLjkxQTEwLDEwLDAsMSwxLDI2LDE2LDEw'@;
put 'LDEwLDAsMCwxLDE2LDI1LjkxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzEuNzEsMjkuNjlsLTUuMTctNS4xN0ExMy42OCwxMy42OCwwLDAsMSwyNS4xNSwyNmw1LjE1LDUuMTVhMSwxLDAsMCwwLDEuNDEt'@;
put 'MS40MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIxLDE1SDE3VjExYTEsMSwwLDAsMC0yLDB2NEgxMWExLDEsMCwwLDAsMCwyaDR2NGExLDEsMCwwLDAsMiwwVjE3aDRhMSwxLDAsMCwwLDAtMloiIGNsYXNz'@;
put 'PSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPicpLHkuQ2xyU2hhcGVab29tT3V0PSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xNiw0QTEyLDEyLDAsMSwwLDI4LDE2LDEyLDEyLDAsMCwwLDE2LDRabTAsMjEuOTFBMTAsMTAsMCwxLDEsMjYsMTYsMTAsMTAsMCww'@;
put 'LDEsMTYsMjUuOTFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMS43MSwyOS42OWwtNS4xNy01LjE3QTEzLjY4LDEzLjY4LDAsMCwxLDI1LjE1LDI2bDUuMTUsNS4xNWExLDEsMCwwLDAsMS40MS0xLjQxWiIg'@;
put 'Y2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjAsMTVIMTJhMSwxLDAsMCwwLDAsMmg4YTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz4nKSx5LkNsclNo'@;
put 'YXBlS2V5PSgwLGcuY2xySWNvblNWRykoJzxyZWN0IHg9IjYuMzMiIHk9IjEwLjcxIiB3aWR0aD0iOS43MSIgaGVpZ2h0PSIyLjU3IiByeD0iMSIgcnk9IjEiIHRyYW5zZm9ybT0idHJhbnNsYXRlKC01LjIxIDExLjQzKSByb3RhdGUoLTQ1KSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWkt'@;
put 'b3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjMuMzUsMTYuOGwuNjMtLjYzQTUsNSwwLDAsMCwyNCw5LjFMMTguNzEsMy44NGE1LDUsMCwwLDAtNy4wNywwTDMuMDksMTIuMzlhNSw1LDAsMCwwLDAsNy4wN2w1LjI2LDUuMjZhNSw1LDAsMCwwLDcuMDcsMGwuNC0u'@;
put 'NEwxOCwyNi40OGgzLjQ0djNoMy42OXYxLjYzTDI4LDM0aDZWMjcuNDVaTTMyLDMySDI4Ljg2bC0xLjc3LTEuNzZ2LTIuOEgyMy40MXYtM0gxOC44bC0zLTNMMTQsMjMuMzFhMywzLDAsMCwxLTQuMjQsMEw0LjUsMThhMywzLDAsMCwxLDAtNC4yNGw4LjU2LTguNTZhMywzLDAsMCwxLDQuMjQs'@;
put 'MGw1LjI2LDUuMjZhMywzLDAsMCwxLDAsNC4yNGwtMiwyTDMyLDI4LjI4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSI2LjMzIiB5PSIxMC43MSIgd2lkdGg9IjkuNzEiIGhlaWdodD0iMi41NyIgcng9IjEiIHJ5'@;
put 'PSIxIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtNS4yMSAxMS40Mykgcm90YXRlKC00NSkiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIzLjM1LDE2LjhsLjYzLS42M2E1LDUsMCww'@;
put 'LDAsLjYzLS43N0gyMi4yM2wtLjI5LDBMMjAuNTIsMTYuOCwzMiwyOC4yOFYzMkgyOC44NmwtMS43Ny0xLjc2di0yLjhIMjMuNDF2LTNIMTguOGwtMy0zTDE0LDIzLjMxYTMsMywwLDAsMS00LjI0LDBMNC41LDE4YTMsMywwLDAsMSwwLTQuMjRsOC41Ni04LjU2YTMsMywwLDAsMSw0LjI0LDBM'@;
put 'MjAuMSw4LjA2bDEtMS43OUwxOC43MSwzLjg0YTUsNSwwLDAsMC03LjA3LDBMMy4wOSwxMi4zOWE1LDUsMCwwLDAsMCw3LjA3bDUuMjYsNS4yNmE1LDUsMCwwLDAsNy4wNywwbC40LS40TDE4LDI2LjQ4aDMuNDR2M2gzLjY5djEuNjNMMjgsMzRoNlYyNy40NVoiIGNsYXNzPSJjbHItaS1vdXRs'@;
put 'aW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4y'@;
put 'OCwwLDAsMCwyNi44NSwxLjE0WiIgIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVkIGNsci1pLWFsZXJ0IiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iNi4zMyIgeT0iMTAuNzEiIHdpZHRoPSI5LjcxIiBoZWlnaHQ9IjIuNTciIHJ4'@;
put 'PSIxIiByeT0iMSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTUuMjEgMTEuNDMpIHJvdGF0ZSgtNDUpIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjMuMzUsMTYuOGwuNjMtLjYzQTUs'@;
put 'NSwwLDAsMCwyNCw5LjFMMTguNzEsMy44NGE1LDUsMCwwLDAtNy4wNywwTDMuMDksMTIuMzlhNSw1LDAsMCwwLDAsNy4wN2w1LjI2LDUuMjZhNSw1LDAsMCwwLDcuMDcsMGwuNC0uNEwxOCwyNi40OGgzLjQ0djNoMy42OXYxLjYzTDI4LDM0aDZWMjcuNDVaTTMyLDMySDI4Ljg2bC0xLjc3LTEu'@;
put 'NzZ2LTIuOEgyMy40MXYtM0gxOC44bC0zLTNMMTQsMjMuMzFhMywzLDAsMCwxLTQuMjQsMEw0LjUsMThhMywzLDAsMCwxLDAtNC4yNGw4LjU2LTguNTZhMywzLDAsMCwxLDQuMjQsMGw1LjI2LDUuMjZhMywzLDAsMCwxLDAsNC4yNGwtMiwyTDMyLDI4LjI4WiIgY2xhc3M9ImNsci1pLW91dGxp'@;
put 'bmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPlxuICAg'@;
put 'ICAgICAgICAgPHBhdGggZD0iTTIzLjM4LDE2Ljc3bC42LS42QTUsNSwwLDAsMCwyNCw5LjFMMTguNzEsMy44NGE1LDUsMCwwLDAtNy4wNywwTDMuMDksMTIuMzlhNSw1LDAsMCwwLDAsNy4wN2w1LjI2LDUuMjZhNSw1LDAsMCwwLDcuMDcsMGwuNDUtLjQ1LDIuMSwyLjJoMy40NHYzaDMuNjl2'@;
put 'MS42M0wyOCwzNGg2VjI3LjQ1Wm0tOC41Ni02LjU5TDkuMzcsMTUuNjRhMSwxLDAsMCwxLTEuNDEsMGwtLjQtLjRhMSwxLDAsMCwxLDAtMS40MUwxMyw4LjM2YTEsMSwwLDAsMSwxLjQxLDBsLjQuNEExLDEsMCwwLDEsMTQuODIsMTAuMThaTTMyLDMySDI4Ljg2bC0xLjc3LTEuNzZ2LTIuOEgy'@;
put 'My40MXYtM0gxOC44bC0xLjUyLTEuNjFMMjIsMTguMTgsMzIsMjguMjhaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIzLjM4LDE2Ljc3bC42LS42YTUsNSwwLDAsMCwuNjMtLjc3SDIyLjIzQTMuNjgsMy42OCwwLDAs'@;
put 'MSwxOSw5Ljg5bDIuMDktMy42MkwxOC43MSwzLjg0YTUsNSwwLDAsMC03LjA3LDBMMy4wOSwxMi4zOWE1LDUsMCwwLDAsMCw3LjA3bDUuMjYsNS4yNmE1LDUsMCwwLDAsNy4wNywwbC40NS0uNDUsMi4xLDIuMmgzLjQ0djNoMy42OXYxLjYzTDI4LDM0aDZWMjcuNDVabS04LjU2LTYuNTlMOS4z'@;
put 'NywxNS42NGExLDEsMCwwLDEtMS40MSwwbC0uNC0uNGExLDEsMCwwLDEsMC0xLjQxTDEzLDguMzZhMSwxLDAsMCwxLDEuNDEsMGwuNC40QTEsMSwwLDAsMSwxNC44MiwxMC4xOFpNMzIsMzJIMjguODZsLTEuNzctMS43NnYtMi44SDIzLjQxdi0zSDE4LjhsLTEuNTItMS42MUwyMiwxOC4xOCwz'@;
put 'MiwyOC4yOFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4'@;
put 'LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiAgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMy4zOCwxNi43N2wuNi0uNkE1LDUsMCww'@;
put 'LDAsMjQsOS4xTDE4LjcxLDMuODRhNSw1LDAsMCwwLTcuMDcsMEwzLjA5LDEyLjM5YTUsNSwwLDAsMCwwLDcuMDdsNS4yNiw1LjI2YTUsNSwwLDAsMCw3LjA3LDBsLjQ1LS40NSwyLjEsMi4yaDMuNDR2M2gzLjY5djEuNjNMMjgsMzRoNlYyNy40NVptLTguNTYtNi41OUw5LjM3LDE1LjY0YTEs'@;
put 'MSwwLDAsMS0xLjQxLDBsLS40LS40YTEsMSwwLDAsMSwwLTEuNDFMMTMsOC4zNmExLDEsMCwwLDEsMS40MSwwbC40LjRBMSwxLDAsMCwxLDE0LjgyLDEwLjE4Wk0zMiwzMkgyOC44NmwtMS43Ny0xLjc2di0yLjhIMjMuNDF2LTNIMTguOGwtMS41Mi0xLjYxTDIyLDE4LjE4LDMyLDI4LjI4WiIg'@;
put 'Y2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiICBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRn'@;
put 'ZSIgLz4nKSx5LkNsclNoYXBlTGlicmFyeT0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzMuNDgsMjkuNjMsMjYuNzQsMTEuODJhMiwyLDAsMCwwLTIuNTgtMS4xNkwyMSwxMS44NVY4LjkyQTEuOTIsMS45MiwwLDAsMCwxOS4wOCw3SDE0VjQuOTJBMS45MiwxLjkyLDAsMCwwLDEyLjA4'@;
put 'LDNINUEyLDIsMCwwLDAsMyw1VjMyYTEsMSwwLDAsMCwxLDFIMjBhMSwxLDAsMCwwLDEtMVYxOS4yN2w1LDEzLjIxYTEsMSwwLDAsMCwxLjI5LjU4bDUuNjEtMi4xNGExLDEsMCwwLDAsLjU4LTEuMjlaTTEyLDguODNWMzFINVY1aDdaTTE5LDMxSDE0VjloNVptOC41MS0uMjVMMjEuMTMsMTMu'@;
put 'OTJsMy43NC0xLjQyLDYuMzksMTYuODNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMi43NSwzSDUuMjVBMS4xNSwxLjE1LDAsMCwwLDQsNFYzM0gxNFY0QTEuMTUsMS4xNSwwLDAsMCwxMi43NSwzWiIgY2xh'@;
put 'c3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy43NywzMS4wOWwtNi45NC0xOC4zYTEsMSwwLDAsMC0xLjI5LS41OEwyMiwxMy41OVY5YTEsMSwwLDAsMC0xLTFIMTZWMzNoNlYxNC42OUwyOC45MywzM1oiIGNsYXNzPSJjbHIt'@;
put 'aS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+JykseS5DbHJTaGFwZUJvbHQ9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTEwLjUyLDM0aC0zYTEsMSwwLDAsMS0uODgtMS40NEwxMi41NSwyMUg2YTEsMSwwLDAsMS0uODUtMS41NGwxMC42OC0xN0ExLDEsMCwwLDEsMTYuNjQsMkgz'@;
put 'MC4wN2ExLDEsMCwwLDEsLjc3LDEuNjlMMjEuNzgsMTRoNS4zOGExLDEsMCwwLDEsLjczLDEuNjZsLTE2LjYzLDE4QTEsMSwwLDAsMSwxMC41MiwzNFpNOS4xOCwzMmguOTFMMjQuODYsMTZIMTkuNTlhMSwxLDAsMCwxLS43Ny0xLjY5TDI3Ljg4LDRIMTcuMTlMNy43NywxOUgxNC4yYTEsMSww'@;
put 'LDAsMSwuODgsMS40NFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLjgsMi4yOUEuNDkuNDksMCwwLDAsMzAuMzUsMkgxNi40MmEuNS41LDAsMCwwLS40Mi4yM2wtMTAuNzEsMTdBLjQ5LjQ5LDAsMCwwLDUu'@;
put 'NywyMGg3LjY3TDYuNiwzMy4yNWEuNTIuNTIsMCwwLDAsLjQ2Ljc1aDNhLjUuNSwwLDAsMCwuMzctLjE2TDI4LDE0Ljg1YS41LjUsMCwwLDAtLjM3LS44NUgyMC44OUwzMC43MiwyLjgyQS40OS40OSwwLDAsMCwzMC44LDIuMjlaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0'@;
put 'aC0xIiAvPicpLHkuQ2xyU2hhcGVXcmVuY2g9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMzLjE4LDI2LjExLDIwLjM1LDEzLjI4QTkuMjgsOS4yOCwwLDAsMCw3LjU0LDIuNzlsLTEuMzQuNTksNS4zOCw1LjM4TDguNzYsMTEuNTksMy4zOCw2LjIxLDIuNzksNy41NEE5LjI3LDkuMjcs'@;
put 'MCwwLDAsMTMuMjgsMjAuMzVMMjYuMTEsMzMuMThhMiwyLDAsMCwwLDIuODMsMGw0LjI0LTQuMjRBMiwyLDAsMCwwLDMzLjE4LDI2LjExWm0tNS42Niw1LjY2TDEzLjg4LDE4LjEybC0uNTcuMTZhNy4yNyw3LjI3LDAsMCwxLTkuMzEtNyw3LjIsNy4yLDAsMCwxLC4xNS0xLjQ4bDQuNjEsNC42'@;
put 'MSw1LjY2LTUuNjZMOS44MSw0LjE1YTcuMjcsNy4yNywwLDAsMSw4LjQ3LDkuMTZsLS4xNi41N0wzMS43NywyNy41M1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMjcuMTMiIGN5PSIyNy4wOSIgcj0iMS4z'@;
put 'IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMTEuMjEgMjcuMTIpIHJvdGF0ZSgtNDUpIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy43MywyNy43MiwxOS42NywxMy42NmE4Ljc5LDguNzksMCwwLDAtMTItMTAu'@;
put 'NUwxMyw4LjUzLDguNTMsMTMsMy4xNiw3LjY3YTguNzksOC43OSwwLDAsMCwxMC41LDEyTDI3LjcyLDMzLjczYTEuMDcsMS4wNywwLDAsMCwxLjUsMGw0LjUxLTQuNTFBMS4wNywxLjA3LDAsMCwwLDMzLjczLDI3LjcyWk0yOSwyOWExLjM4LDEuMzgsMCwxLDEsMC0yQTEuMzgsMS4zOCwwLDAs'@;
put 'MSwyOSwyOVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+JykseS5DbHJTaGFwZUJ1bGxzZXllPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOCwyYTE1LjkyLDE1LjkyLDAsMCwwLTQuMjUuNTlsLjc3LDEuODZhMTQuMDcsMTQuMDcsMCwxLDEtMTAsMTBs'@;
put 'LTEuODYtLjc4QTE2LDE2LDAsMSwwLDE4LDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik03LjQ1LDE1LjdhMTAuODEsMTAuODEsMCwxLDAsOC4zLTguMjZMMTYuMzcsOUE5LjI0LDkuMjQsMCwxLDEsOSwxNi4z'@;
put 'MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDIyLjA5YTQuMDgsNC4wOCwwLDAsMS00LTMuNjhsLTEuNjMtLjY4YzAsLjA5LDAsLjE4LDAsLjI3QTUuNjksNS42OSwwLDEsMCwxOCwxMi4zMWgtLjI0TDE4'@;
put 'LjQzLDE0QTQuMDcsNC4wNywwLDAsMSwxOCwyMi4wOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTguMiwxMy4zNGEuNS41LDAsMCwwLC4zNS4xNUgxMi4ybDUuMzcsNS4zN0ExLDEsMCwwLDAsMTksMTcuNDRM'@;
put 'MTMuNTMsMTJWOC41MWEuNS41LDAsMCwwLS4xNS0uMzVMNy43OSwyLjU3YS41LjUsMCwwLDAtLjg1LjM1djRIM2EuNS41LDAsMCwwLS4zNS44NVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE5LDE4Ljg1YTEs'@;
put 'MSwwLDAsMS0xLjQxLDBsLTMtM0E0LDQsMCwwLDAsMTMuOTEsMTgsNC4wOSw0LjA5LDAsMSwwLDE4LDEzLjkxYTQsNCwwLDAsMC0yLC41NWwzLDNBMSwxLDAsMCwxLDE5LDE4Ljg1WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRo'@;
put 'IGQ9Ik0xOCwyYTE1LjkyLDE1LjkyLDAsMCwwLTQuMjUuNTlsMS42LDMuODlBMTEuODksMTEuODksMCwxLDEsNi40OSwxNS4zTDIuNjEsMTMuNjhBMTYsMTYsMCwxLDAsMTgsMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBk'@;
put 'PSJNOCwxNS45NEExMC4xNywxMC4xNywwLDEsMCwxNiw4bDEuNjksNC4xMS4zMSwwQTUuODgsNS44OCwwLDEsMSwxMi4xMiwxOGMwLS4xMiwwLS4yMywwLS4zNVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNOC4yLDEz'@;
put 'LjM0YS41LjUsMCwwLDAsLjM1LjE1SDEyLjJsMi4zNSwyLjM1QTQuMDksNC4wOSwwLDAsMSwxNiwxNC40NkwxMy41MywxMlY4LjUxYS41LjUsMCwwLDAtLjE1LS4zNUw3Ljc5LDIuNTdhLjUuNSwwLDAsMC0uODUuMzV2NEgzYS41LjUsMCwwLDAtLjM1Ljg1WiIgY2xhc3M9ImNsci1pLXNvbGlk'@;
put 'IGNsci1pLXNvbGlkLXBhdGgtNCIgLz4nKSx5LkNsclNoYXBlVGFyZ2V0PSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJabTAsMzBBMTQsMTQsMCwxLDEsMzIsMTgsMTQsMTQsMCwwLDEsMTgsMzJaIiBjbGFzcz0iY2xy'@;
put 'LWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCw3LjJBMTAuOCwxMC44LDAsMSwwLDI4LjgsMTgsMTAuODEsMTAuODEsMCwwLDAsMTgsNy4yWm0wLDIwQTkuMiw5LjIsMCwxLDEsMjcuMiwxOCw5LjIxLDkuMjEsMCwwLDEsMTgsMjcu'@;
put 'MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDEyLjMxQTUuNjksNS42OSwwLDEsMCwyMy42OSwxOCw1LjY5LDUuNjksMCwwLDAsMTgsMTIuMzFabTAsOS43N0E0LjA5LDQuMDksMCwxLDEsMjIuMDksMTgs'@;
put 'NC4wOSw0LjA5LDAsMCwxLDE4LDIyLjA5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIxOCIgY3k9IjE4IiByPSI0LjA5IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAg'@;
put 'ICAgICAgICAgPHBhdGggZD0iTTE4LDcuODNBMTAuMTcsMTAuMTcsMCwxLDAsMjguMTcsMTgsMTAuMTgsMTAuMTgsMCwwLDAsMTgsNy44M1ptMCwxNkE1Ljg4LDUuODgsMCwxLDEsMjMuODgsMTgsNS44OCw1Ljg4LDAsMCwxLDE4LDIzLjg4WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNv'@;
put 'bGlkLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJabTAsMjcuODNBMTEuODMsMTEuODMsMCwxLDEsMjkuODMsMTgsMTEuODUsMTEuODUsMCwwLDEsMTgsMjkuODNaIiBjbGFzcz0iY2xyLWktc29saWQgY2xy'@;
put 'LWktc29saWQtcGF0aC0zIiAvPicpLHkuQ2xyU2hhcGVGbGFtZT0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzEuMywxNi42NmMtMS4xOS0yLjA5LTcuOTQtMTQuMTUtNy45NC0xNC4xNWExLDEsMCwwLDAtMS43NSwwbC02LDEwLjY0LTMtNS4yOGExLDEsMCwwLDAtMS43NSwwUzUuNCwx'@;
put 'Ny43OCw0LjQyLDE5LjVBOS4zLDkuMywwLDAsMCwzLDI0LjYxQzMsMjkuNzIsNS44NiwzNCwxMS42NywzNEgyMi40OEMyOC4yOCwzNCwzMywyOSwzMywyMi43OEExMS4xMywxMS4xMywwLDAsMCwzMS4zLDE2LjY2Wk0yMi40OCwzMkgxMS43N0M4LjEzLDMyLDUsMjguNjYsNSwyNC42MWE3LjQz'@;
put 'LDcuNDMsMCwwLDEsMS4xNi00LjEzYy43My0xLjI5LDQuMDUtNy4yMSw1LjY1LTEwLjA3bDMsNS4yOGExLDEsMCwwLDAsLjg3LjUxaDBhMSwxLDAsMCwwLC44Ny0uNTFMMjIuNDksNWMxLjg2LDMuMzMsNi4xNSwxMSw3LjA3LDEyLjZBOS4yNCw5LjI0LDAsMCwxLDMxLDIyLjc4QzMxLDI3Ljg3'@;
put 'LDI3LjE4LDMyLDIyLjQ4LDMyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjUuNzUsMjEuNzNjLS42NS0xLjE2LTQuMzgtNy44MS00LjM4LTcuODFhLjguOCwwLDAsMC0xLjQsMGwtNC4yLDcuNDgtMS41OS0y'@;
put 'LjQ5YS44LjgsMCwwLDAtMS4zNSwwTDkuMzcsMjQuMzVhNC4zNSw0LjM1LDAsMCwwLS44MiwyLjYsNC40OSw0LjQ5LDAsMCwwLC41LDJIMTFhMywzLDAsMCwxLS44My0yLDIuNzgsMi43OCwwLDAsMSwuNTYtMS43M2wyLjgtNC4zOCwxLjY2LDIuNmEuOC44LDAsMCwwLDEuNDEtLjEyLDcuODIs'@;
put 'Ny44MiwwLDAsMSwuNC0uOEwyMC42NywxNmwzLjY5LDYuNTdhNC44Myw0LjgzLDAsMCwxLC43NywyLjcxQTUsNSwwLDAsMSwyMy40NiwyOWgyLjEzYTYuNjgsNi42OCwwLDAsMCwxLjE0LTMuNzQsNi40NSw2LjQ1LDAsMCwwLTEtMy41WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0'@;
put 'bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzEuMywxNi4zMmMtMS4xOS0yLjA5LTcuOTQtMTQuMTUtNy45NC0xNC4xNWExLDEsMCwwLDAtMS43NSwwbC02LDEwLjY0LTMtNS4yOGExLDEsMCwwLDAtMS43NSwwUzUuNCwxNy40Myw0LjQyLDE5LjE1QTkuMyw5LjMsMCww'@;
put 'LDAsMywyNC4yNmMwLDUuMTEsMy44OCw5LjY1LDguNjcsOS43NEgyMi40OEMyOC4yOCwzNCwzMywyOC42MiwzMywyMi40NEExMS4xMywxMS4xMywwLDAsMCwzMS4zLDE2LjMyWk0yMS40OCwzMkgxNC41NEE0LjY4LDQuNjgsMCwwLDEsMTAsMjcuNDFhMy45MSwzLjkxLDAsMCwxLC43NS0yLjM0'@;
put 'bDMuMzUtNS4yMWEuNS41LDAsMCwxLC44NCwwbDEuNzgsMi43NywwLS4wOGMuNjMtMS4xMSw0LjIzLTcuNDgsNC4yMy03LjQ4YS41LjUsMCwwLDEsLjg3LDBzMy42LDYuMzgsNC4yMyw3LjQ4QTUuODMsNS44MywwLDAsMSwyNywyNS43NkMyNywzMiwyMi4xLDMyLDIxLjQ4LDMyWiIgY2xhc3M9'@;
put 'ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz4nKSx5LkNsclNoYXBlSG91cmdsYXNzPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yOSwzMkgyNlYyNC45MWE2LjY3LDYuNjcsMCwwLDAtMi42OS01LjMzbC0xLjI4LTFBNi4zNiw2LjM2LDAsMCwwLDIxLDE4aDBhNi4yOSw2'@;
put 'LjI5LDAsMCwwLDEtLjYybDEuMjgtMUE2LjY3LDYuNjcsMCwwLDAsMjYsMTEuMDlWNGgzYTEsMSwwLDAsMCwwLTJIN0ExLDEsMCwwLDAsNyw0aDN2Ny4wOWE2LjY3LDYuNjcsMCwwLDAsMi42OSw1LjMzbDEuMjgsMUE2LjM2LDYuMzYsMCwwLDAsMTUsMThoMGE2LjI3LDYuMjcsMCwwLDAtMSwu'@;
put 'NjJsLTEuMjgsMUE2LjY3LDYuNjcsMCwwLDAsMTAsMjQuOTFWMzJIN2ExLDEsMCwwLDAsMCwySDI5YTEsMSwwLDAsMCwwLTJaTTEyLDI0LjkxYTQuNjYsNC42NiwwLDAsMSwxLjg4LTMuNzJsMS4yOC0xYTQuNjYsNC42NiwwLDAsMSwxLjE4LS42MywxLDEsMCwwLDAsLjY1LS45NFYxNy4zM2Ex'@;
put 'LDEsMCwwLDAtLjY1LS45NCw0LjY3LDQuNjcsMCwwLDEtMS4xOS0uNjNsLTEuMjgtMUE0LjY2LDQuNjYsMCwwLDEsMTIsMTEuMDlWNEgyNHY3LjA5YTQuNjYsNC42NiwwLDAsMS0xLjg4LDMuNzJsLTEuMjgsMWgwYTQuNjYsNC42NiwwLDAsMS0xLjE4LjYzLDEsMSwwLDAsMC0uNjUuOTR2MS4z'@;
put 'NGExLDEsMCwwLDAsLjY1Ljk0LDQuNjcsNC42NywwLDAsMSwxLjE5LjYzbDEuMjgsMUE0LjY2LDQuNjYsMCwwLDEsMjQsMjQuOTFWMzJIMTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOSwzMkgyNlYyNC45'@;
put 'MWE2LjY3LDYuNjcsMCwwLDAtMi42OS01LjMzbC0xLjI4LTFBNi4zNiw2LjM2LDAsMCwwLDIxLDE4aDBhNi4yOSw2LjI5LDAsMCwwLDEtLjYybDEuMjgtMWE2LjY0LDYuNjQsMCwwLDAsMS4wOS0xSDIyLjIzYTMuNjQsMy42NCwwLDAsMS0uNzgtLjA5bC0uNjIuNDZoMGE0LjY2LDQuNjYsMCww'@;
put 'LDEtMS4xOC42MywxLDEsMCwwLDAtLjY1Ljk0djEuMzRhMSwxLDAsMCwwLC42NS45NCw0LjY3LDQuNjcsMCwwLDEsMS4xOS42M2wxLjI4LDFBNC42Niw0LjY2LDAsMCwxLDI0LDI0LjkxVjMySDEyVjI0LjkxYTQuNjYsNC42NiwwLDAsMSwxLjg4LTMuNzJsMS4yOC0xYTQuNjYsNC42NiwwLDAs'@;
put 'MSwxLjE4LS42MywxLDEsMCwwLDAsLjY1LS45NFYxNy4zM2ExLDEsMCwwLDAtLjY1LS45NCw0LjY3LDQuNjcsMCwwLDEtMS4xOS0uNjNsLTEuMjgtMUE0LjY2LDQuNjYsMCwwLDEsMTIsMTEuMDlWNEgyMi40NUwyMy42LDJIN0ExLDEsMCwwLDAsNyw0aDN2Ny4wOWE2LjY3LDYuNjcsMCwwLDAs'@;
put 'Mi42OSw1LjMzbDEuMjgsMUE2LjM2LDYuMzYsMCwwLDAsMTUsMThoMGE2LjI3LDYuMjcsMCwwLDAtMSwuNjJsLTEuMjgsMUE2LjY3LDYuNjcsMCwwLDAsMTAsMjQuOTFWMzJIN2ExLDEsMCwwLDAsMCwySDI5YTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBj'@;
put 'bHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUs'@;
put 'MS4xNFoiICBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOSwzMkgyNlYyNC45MWE2LjY3LDYuNjcsMCwwLDAtMi42OS01LjMzbC0xLjI4LTFBNi4zNiw2LjM2'@;
put 'LDAsMCwwLDIxLDE4aDBhNi4yOSw2LjI5LDAsMCwwLDEtLjYybDEuMjgtMWE2LjY4LDYuNjgsMCwwLDAsMi41Ny00LjE2QTcuNTMsNy41MywwLDAsMSwyNCwxMC40OXYuNjFhNC42Niw0LjY2LDAsMCwxLTEuODgsMy43MmwtMS4yOCwxaDBhNC42Niw0LjY2LDAsMCwxLTEuMTguNjMsMSwxLDAs'@;
put 'MCwwLS42NS45NHYxLjM0YTEsMSwwLDAsMCwuNjUuOTQsNC42Nyw0LjY3LDAsMCwxLDEuMTkuNjNsMS4yOCwxQTQuNjYsNC42NiwwLDAsMSwyNCwyNC45MVYzMkgxMlYyNC45MWE0LjY2LDQuNjYsMCwwLDEsMS44OC0zLjcybDEuMjgtMWE0LjY2LDQuNjYsMCwwLDEsMS4xOC0uNjMsMSwxLDAs'@;
put 'MCwwLC42NS0uOTRWMTcuMzNhMSwxLDAsMCwwLS42NS0uOTQsNC42Nyw0LjY3LDAsMCwxLTEuMTktLjYzbC0xLjI4LTFBNC42Niw0LjY2LDAsMCwxLDEyLDExLjA5VjRIMjIuNzhhNy40NSw3LjQ1LDAsMCwxLC44OS0ySDdBMSwxLDAsMCwwLDcsNGgzdjcuMDlhNi42Nyw2LjY3LDAsMCwwLDIu'@;
put 'NjksNS4zM2wxLjI4LDFBNi4zNiw2LjM2LDAsMCwwLDE1LDE4aDBhNi4yNyw2LjI3LDAsMCwwLTEsLjYybC0xLjI4LDFBNi42Nyw2LjY3LDAsMCwwLDEwLDI0LjkxVjMySDdhMSwxLDAsMCwwLDAsMkgyOWExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHIt'@;
put 'aS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPlxuICAgICAgICAgICAgPHBhdGgg'@;
put 'ZD0iTTYuNjcsNGgyMmExLDEsMCwwLDAsMC0yaC0yMmExLDEsMCwxLDAsMCwyWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOC42NywzMmgtMjJhMSwxLDAsMCwwLDAsMmgyMmExLDEsMCwxLDAsMC0yWiIgY2xhc3M9'@;
put 'ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMi41NSwxNS42N0E2LjA3LDYuMDcsMCwwLDAsMjUsMTEuMTJWNkgxMC4wNnY1LjEyYTYuMDcsNi4wNywwLDAsMCwyLjQ1LDQuNTUsMTEuNDgsMTEuNDgsMCwwLDAsMi45MSwxLjcydjEu'@;
put 'MTZhMTEuNDgsMTEuNDgsMCwwLDAtMi45MSwxLjcyLDYuMDcsNi4wNywwLDAsMC0yLjQ1LDQuNTV2NS4xMkgyNVYyNC44MmE2LjA3LDYuMDcsMCwwLDAtMi40NS00LjU1LDExLjQ4LDExLjQ4LDAsMCwwLTIuOTEtMS43MlYxNy4zOUExMS40OCwxMS40OCwwLDAsMCwyMi41NSwxNS42N1oiIGNs'@;
put 'YXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjguNjcsMzJoLTIyYTEsMSwwLDAsMCwwLDJoMjJhMSwxLDAsMSwwLDAtMloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQi'@;
put 'IC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNNi42Nyw0SDIyLjQ1TDIzLjYsMkg2LjY3YTEsMSwwLDEsMCwwLDJaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTEyLjUxLDIwLjI3YTYu'@;
put 'MDcsNi4wNywwLDAsMC0yLjQ1LDQuNTV2NS4xMkgyNVYyNC44MmE2LjA3LDYuMDcsMCwwLDAtMi40NS00LjU1LDExLjQ4LDExLjQ4LDAsMCwwLTIuOTEtMS43MlYxNy4zOWExMS40OCwxMS40OCwwLDAsMCwyLjkxLTEuNzJsLjMtLjI3aC0uNjJBMy42OCwzLjY4LDAsMCwxLDE5LDkuODlMMjEu'@;
put 'MjksNkgxMC4wNnY1LjEyYTYuMDcsNi4wNywwLDAsMCwyLjQ1LDQuNTUsMTEuNDgsMTEuNDgsMCwwLDAsMi45MSwxLjcydjEuMTZBMTEuNDgsMTEuNDgsMCwwLDAsMTIuNTEsMjAuMjdaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0zLS1hbGVydGVkIiAv'@;
put 'PlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxl'@;
put 'cnRlZCBjbHItaS1zb2xpZC1wYXRoLTQtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjguNjcsMzJoLTIyYTEsMSwwLDAsMCwwLDJoMjJhMSwxLDAsMSwwLDAtMloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0t'@;
put 'YmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTYuNjcsNEgyMi43OGE3LjQ1LDcuNDUsMCwwLDEsLjg5LTJoLTE3YTEsMSwwLDEsMCwwLDJaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRo'@;
put 'IGQ9Ik0yMi41NSwyMC4yN2ExMS40OCwxMS40OCwwLDAsMC0yLjkxLTEuNzJWMTcuMzlhMTEuNDgsMTEuNDgsMCwwLDAsMi45MS0xLjcyQTYuMjUsNi4yNSwwLDAsMCwyNSwxMS41NSw3LjQ3LDcuNDcsMCwwLDEsMjIuNSw2SDEwLjA2djUuMTJhNi4wNyw2LjA3LDAsMCwwLDIuNDUsNC41NSwx'@;
put 'MS40OCwxMS40OCwwLDAsMCwyLjkxLDEuNzJ2MS4xNmExMS40OCwxMS40OCwwLDAsMC0yLjkxLDEuNzIsNi4wNyw2LjA3LDAsMCwwLTIuNDUsNC41NXY1LjEySDI1VjI0LjgyQTYuMDcsNi4wNywwLDAsMCwyMi41NSwyMC4yN1oiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNv'@;
put 'bGlkLXBhdGgtMy0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC00LS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+JykseS5DbHJTaGFwZU5vQWNjZXNzPSgwLGcuY2xy'@;
put 'SWNvblNWRykoJzxwYXRoIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJabTAsMzBBMTQsMTQsMCwxLDEsMzIsMTgsMTQsMTQsMCwwLDEsMTgsMzJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxw'@;
put 'YXRoIGQ9Ik0yNy4xNSwxNUg4Ljg1QTEuODUsMS44NSwwLDAsMCw3LDE2Ljg1djIuMjlBMS44NSwxLjg1LDAsMCwwLDguODUsMjFIMjcuMTVBMS44NSwxLjg1LDAsMCwwLDI5LDE5LjE1VjE2Ljg1QTEuODUsMS44NSwwLDAsMCwyNy4xNSwxNVptLjI1LDQuMTVhLjI1LjI1LDAsMCwxLS4yNS4y'@;
put 'NUg4Ljg1YS4yNS4yNSwwLDAsMS0uMjUtLjI1VjE2Ljg1YS4yNS4yNSwwLDAsMSwuMjUtLjI1SDI3LjE1YS4yNS4yNSwwLDAsMSwuMjUuMjVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwyQTE2LDE2LDAs'@;
put 'MSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJaTTI5LjE1LDIwSDYuODVBLjg1Ljg1LDAsMCwxLDYsMTkuMTVWMTYuODVBLjg1Ljg1LDAsMCwxLDYuODUsMTZIMjkuMTVhLjg1Ljg1LDAsMCwxLC44NS44NXYyLjI5QS44NS44NSwwLDAsMSwyOS4xNSwyMFoiIGNsYXNzPSJjbHItaS1zb2xpZCBj'@;
put 'bHItaS1zb2xpZC1wYXRoLTEiIC8+JykseS5DbHJTaGFwZU9yZ2FuaXphdGlvbj0oMCxnLmNsckljb25TVkcpKCc8cG9seWdvbiBwb2ludHM9IjkuOCAxOC44IDI2LjIgMTguOCAyNi4yIDIxLjg4IDI3LjggMjEuODggMjcuOCAxNy4yIDE4LjggMTcuMiAxOC44IDE0IDE3LjIgMTQgMTcuMiAx'@;
put 'Ny4yIDguMiAxNy4yIDguMiAyMS44OCA5LjggMjEuODggOS44IDE4LjgiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE0LDIzSDRhMiwyLDAsMCwwLTIsMnY2YTIsMiwwLDAsMCwyLDJIMTRhMiwyLDAsMCwwLDIt'@;
put 'MlYyNUEyLDIsMCwwLDAsMTQsMjNaTTQsMzFWMjVIMTR2NloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLDIzSDIyYTIsMiwwLDAsMC0yLDJ2NmEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMjVB'@;
put 'MiwyLDAsMCwwLDMyLDIzWk0yMiwzMVYyNUgzMnY2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTMsMTNIMjNhMiwyLDAsMCwwLDItMlY1YTIsMiwwLDAsMC0yLTJIMTNhMiwyLDAsMCwwLTIsMnY2QTIsMiww'@;
put 'LDAsMCwxMywxM1ptMC04SDIzdjZIMTNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIHBvaW50cz0iOS44IDE4LjggMjYuMiAxOC44IDI2LjIgMjEuODggMjcuOCAyMS44OCAyNy44IDE3LjIgMTguOCAxNy4yIDE4'@;
put 'LjggMTQgMTcuMiAxNCAxNy4yIDE3LjIgOC4yIDE3LjIgOC4yIDIxLjg4IDkuOCAyMS44OCA5LjggMTguOCIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjIiIHk9IjIzIiB3aWR0aD0iMTQiIGhlaWdodD0iMTAiIHJ4PSIy'@;
put 'IiByeT0iMiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjIwIiB5PSIyMyIgd2lkdGg9IjE0IiBoZWlnaHQ9IjEwIiByeD0iMiIgcnk9IjIiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIC8+XG4g'@;
put 'ICAgICAgICAgICA8cmVjdCB4PSIxMSIgeT0iMyIgd2lkdGg9IjE0IiBoZWlnaHQ9IjEwIiByeD0iMiIgcnk9IjIiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTQiIC8+JykseS5DbHJTaGFwZUJhbGFuY2U9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI0LDMzSDEy'@;
put 'YTEsMSwwLDAsMSwwLTJIMjRhMSwxLDAsMCwxLDAsMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTciIHk9IjkiIHdpZHRoPSIyIiBoZWlnaHQ9IjIyLjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91'@;
put 'dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LDdIOEExLDEsMCwwLDEsOCw1SDI4YTEsMSwwLDAsMSwwLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi45MywyNC43OWE3LjIz'@;
put 'LDcuMjMsMCwwLDEtNS44MS0yLjg5bC0uNi0uOCwxLjU5LTEuMjEuNi44YTUuMjgsNS4yOCwwLDAsMCw4LjQyLDBsLjYtLjgsMS41OSwxLjIxLS42LjhBNy4yMyw3LjIzLDAsMCwxLDI2LjkzLDI0Ljc5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+XG4g'@;
put 'ICAgICAgICAgICA8cGF0aCBkPSJNMzAuNTEsMTkuMjVhLjguOCwwLDAsMS0uNzMtLjQ4TDI2LjkzLDEyLjJsLTIuODUsNi41N2EuOC44LDAsMCwxLTEuNDctLjY0TDI2LjIsOS44N2EuODMuODMsMCwwLDEsMS40NywwbDMuNTgsOC4yNmEuOC44LDAsMCwxLS43MywxLjEyWiIgY2xhc3M9ImNs'@;
put 'ci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNOS42OCwyNC43OUE3LjIzLDcuMjMsMCwwLDEsMy44OCwyMS45bC0uNi0uOEw0Ljg2LDE5LjlsLjYuOGE1LjI4LDUuMjgsMCwwLDAsOC40MiwwbC42LS44LDEuNTksMS4yMS0uNi44QTcu'@;
put 'MjMsNy4yMywwLDAsMSw5LjY4LDI0Ljc5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTMuMjYsMTkuMjVhLjguOCwwLDAsMS0uNzMtLjQ4TDkuNjgsMTIuMiw2Ljg0LDE4Ljc3YS44LjgsMCwwLDEtMS40Ny0u'@;
put 'NjRMOC45NSw5Ljg3YS44My44MywwLDAsMSwxLjQ3LDBMMTQsMTguMTNhLjguOCwwLDAsMS0uNzMsMS4xMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC03IiAvPicpLHkuQ2xyU2hhcGVJZEJhZGdlPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOCwyMmE0'@;
put 'LjIzLDQuMjMsMCwxLDAtNC4yMy00LjIzQTQuMjMsNC4yMywwLDAsMCwxOCwyMlptMC02Ljg2YTIuNjMsMi42MywwLDEsMS0yLjYzLDIuNjNBMi42MywyLjYzLDAsMCwxLDE4LDE1LjE0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAg'@;
put 'ICA8cGF0aCBkPSJNMjIsNGEyLDIsMCwwLDAtMi0ySDE2YTIsMiwwLDAsMC0yLDJ2N2g4Wk0yMCw5SDE2VjRoNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2LDMwVjI3LjdhMS4xMiwxLjEyLDAsMCwwLS4y'@;
put 'Ni0uNzNBOS45LDkuOSwwLDAsMCwxOCwyMy42OSw5LjksOS45LDAsMCwwLDEwLjI2LDI3YTEuMTMsMS4xMywwLDAsMC0uMjYuNzNWMzBoMS42VjI3Ljg3QTguMzMsOC4zMywwLDAsMSwxOCwyNS4yOWE4LjMzLDguMzMsMCwwLDEsNi40LDIuNTlWMzBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBj'@;
put 'bHItaS1vdXRsaW5lLXBhdGgtMyIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOCw2SDI0VjhoNFYzMkg4VjhoNFY2SDhBMiwyLDAsMCwwLDYsOFYzMmEyLDIsMCwwLDAsMiwySDI4YTIsMiwwLDAsMCwyLTJWOEEyLDIsMCwwLDAsMjgsNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1p'@;
put 'LW91dGxpbmUtcGF0aC00IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDIyYTQuMjMsNC4yMywwLDEsMC00LjIzLTQuMjNBNC4yMyw0LjIzLDAsMCwwLDE4LDIyWm0wLTYuODZhMi42MywyLjYzLDAsMSwxLTIuNjMsMi42M0EyLjYzLDIuNjMsMCwwLDEsMTgsMTUuMTRaIiBjbGFzcz0i'@;
put 'Y2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMC4yNiwyN2ExLjEzLDEuMTMsMCwwLDAtLjI2LjczVjMwaDEuNlYyNy44N0E4LjMzLDguMzMsMCwwLDEsMTgsMjUuMjlhOC4zMyw4LjMzLDAsMCwx'@;
put 'LDYuNCwyLjU5VjMwSDI2VjI3LjdhMS4xMiwxLjEyLDAsMCwwLS4yNi0uNzNBOS45LDkuOSwwLDAsMCwxOCwyMy42OSw5LjksOS45LDAsMCwwLDEwLjI2LDI3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiIC8+XG4gICAgICAg'@;
put 'ICAgICA8cGF0aCBkPSJNMTksOS44OSwxOS41Niw5SDE2VjRoNFY4LjI0bDItMy40NlY0YTIsMiwwLDAsMC0yLTJIMTZhMiwyLDAsMCwwLTIsMnY3aDQuNjRBMy42NiwzLjY2LDAsMCwxLDE5LDkuODlaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgt'@;
put 'My0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOCwxNS40VjMySDhWOGg0VjZIOEEyLDIsMCwwLDAsNiw4VjMyYTIsMiwwLDAsMCwyLDJIMjhhMiwyLDAsMCwwLDItMlYxNS40WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQt'@;
put 'LWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiAgY2xhc3M9ImNsci1p'@;
put 'LW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsMjJhNC4yMyw0LjIzLDAsMSwwLTQuMjMtNC4yM0E0LjIzLDQuMjMsMCwwLDAsMTgsMjJabTAtNi44NmEyLjYzLDIuNjMsMCwxLDEt'@;
put 'Mi42MywyLjYzQTIuNjMsMi42MywwLDAsMSwxOCwxNS4xNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMiw0YTIsMiwwLDAsMC0yLTJIMTZhMiwyLDAsMCwwLTIsMnY3aDhaTTIw'@;
put 'LDlIMTZWNGg0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTEwLjI2LDI3YTEuMTMsMS4xMywwLDAsMC0uMjYuNzNWMzBoMS42VjI3Ljg3QTguMzMsOC4zMywwLDAsMSwxOCwyNS4y'@;
put 'OWE4LjMzLDguMzMsMCwwLDEsNi40LDIuNTlWMzBIMjZWMjcuN2ExLjEyLDEuMTIsMCwwLDAtLjI2LS43M0E5LjksOS45LDAsMCwwLDE4LDIzLjY5LDkuOSw5LjksMCwwLDAsMTAuMjYsMjdaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRn'@;
put 'ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjgsMTMuMjJWMzJIOFY4aDRWNkg4QTIsMiwwLDAsMCw2LDhWMzJhMiwyLDAsMCwwLDIsMkgyOGEyLDIsMCwwLDAsMi0yVjEzLjVBNy40OSw3LjQ5LDAsMCwxLDI4LDEzLjIyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHIt'@;
put 'aS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPlxuICAgICAgICAgICAgPGNpcmNs'@;
put 'ZSBjeD0iMTgiIGN5PSIxNy43NyIgcj0iNC4yMyIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMSw0YTIsMiwwLDAsMC0yLTJIMTdhMiwyLDAsMCwwLTIsMnY2aDZaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29s'@;
put 'aWQtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTEwLjI2LDI3YTEuMTMsMS4xMywwLDAsMC0uMjYuNzNWMzBIMjZWMjcuN2ExLjEyLDEuMTIsMCwwLDAtLjI2LS43M0E5LjksOS45LDAsMCwwLDE4LDIzLjY5LDkuOSw5LjksMCwwLDAsMTAuMjYsMjdaIiBjbGFzcz0iY2xyLWkt'@;
put 'c29saWQgY2xyLWktc29saWQtcGF0aC0zIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LDZIMjNWOGg1VjMySDhWOGg1VjZIOEEyLDIsMCwwLDAsNiw4VjMyYTIsMiwwLDAsMCwyLDJIMjhhMiwyLDAsMCwwLDItMlY4QTIsMiwwLDAsMCwyOCw2WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNs'@;
put 'ci1pLXNvbGlkLXBhdGgtNCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOSw5Ljg5LDIxLDYuNVY0YTIsMiwwLDAsMC0yLTJIMTdhMiwyLDAsMCwwLTIsMnY2aDRaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiAvPlxuICAgICAg'@;
put 'ICAgICAgPGNpcmNsZSBjeD0iMTgiIGN5PSIxNy43NyIgcj0iNC4yMyIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMC4yNiwyN2ExLjEzLDEuMTMsMCwwLDAtLjI2LjczVjMwSDI2VjI3'@;
put 'LjdhMS4xMiwxLjEyLDAsMCwwLS4yNi0uNzNBOS45LDkuOSwwLDAsMCwxOCwyMy42OSw5LjksOS45LDAsMCwwLDEwLjI2LDI3WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMy0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOCwxNS40'@;
put 'VjMySDhWOGg1VjZIOEEyLDIsMCwwLDAsNiw4VjMyYTIsMiwwLDAsMCwyLDJIMjhhMiwyLDAsMCwwLDItMlYxNS40WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtNC0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIx'@;
put 'LjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiICBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC01LS1hbGVydGVkIGNsci1p'@;
put 'LWFsZXJ0IiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMTgiIGN5PSIxNy43NyIgcj0iNC4yMyIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjEsNGEyLDIsMCwwLDAtMi0ySDE3YTIs'@;
put 'MiwwLDAsMC0yLDJ2Nmg2WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTAuMjYsMjdhMS4xMywxLjEzLDAsMCwwLS4yNi43M1YzMEgyNlYyNy43YTEuMTIsMS4xMiwwLDAsMC0uMjYtLjcz'@;
put 'QTkuOSw5LjksMCwwLDAsMTgsMjMuNjksOS45LDkuOSwwLDAsMCwxMC4yNiwyN1oiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMy0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LDEzLjIyVjMySDhWOGg1VjZIOEEyLDIsMCwwLDAsNiw4'@;
put 'VjMyYTIsMiwwLDAsMCwyLDJIMjhhMiwyLDAsMCwwLDItMlYxMy41QTcuNDksNy40OSwwLDAsMSwyOCwxMy4yMloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtNC0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1'@;
put 'IiAgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC01LS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+JykseS5DbHJTaGFwZVJlcGVhdD0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTYs'@;
put 'MTQuMTVBMy4xNywzLjE3LDAsMCwxLDkuMTcsMTFIMjguNGwtNC4yOCw0LjU0YTEsMSwwLDEsMCwxLjQ2LDEuMzdMMzIuMDksMTAsMjUuNTgsMy4wOWExLDEsMCwxLDAtMS40NiwxLjM3TDI4LjQsOUg5LjE3QTUuMTcsNS4xNywwLDAsMCw0LDE0LjE1djYuMWwyLTIuMTJaIi8+XG4gICAgICAg'@;
put 'ICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTMwLDIxLjg1QTMuMTcsMy4xNywwLDAsMSwyNi44MywyNUg3LjZsNC4yOC00LjU0YTEsMSwwLDEsMC0xLjQ2LTEuMzdMMy45MSwyNmw2LjUxLDYuOTFhMSwxLDAsMSwwLDEuNDYtMS4zN0w3'@;
put 'LjYsMjdIMjYuODNBNS4xNyw1LjE3LDAsMCwwLDMyLDIxLjg1di02LjFsLTIsMi4xMloiLz4nKSx5LkNsclNoYXBlRmlsZUdyb3VwPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzEsMzRIMTNhMSwxLDAsMCwx'@;
put 'LTEtMVYxMWExLDEsMCwwLDEsMS0xSDMxYTEsMSwwLDAsMSwxLDFWMzNBMSwxLDAsMCwxLDMxLDM0Wk0xNCwzMkgzMFYxMkgxNFoiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiB4PSIxNiIgeT0iMTYiIHdpZHRoPSIxMiIg'@;
put 'aGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgeD0iMTYiIHk9IjIwIiB3aWR0aD0iMTIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGlu'@;
put 'ZS1wYXRoLTQiIHg9IjE2IiB5PSIyNCIgd2lkdGg9IjEyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiBkPSJNNiwyNFY0SDI0VjNhMSwxLDAsMCwwLTEtMUg1QTEsMSwwLDAsMCw0LDNWMjVhMSwxLDAs'@;
put 'MCwwLDEsMUg2WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIGQ9Ik0xMCwyOFY4SDI4VjdhMSwxLDAsMCwwLTEtMUg5QTEsMSwwLDAsMCw4LDdWMjlhMSwxLDAsMCwwLDEsMWgxWiIvPlxuICAgICAgICAgICAgPHBhdGgg'@;
put 'Y2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTMxLDEwSDEzYTEsMSwwLDAsMC0xLDFWMzNhMSwxLDAsMCwwLDEsMUgzMWExLDEsMCwwLDAsMS0xVjExQTEsMSwwLDAsMCwzMSwxMFpNMjgsMjZIMTZWMjRIMjhabTAtNEgxNlYyMEgyOFptMC00SDE2VjE2SDI4WiIv'@;
put 'PlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTTYsMjRWNEgyNFYzYTEsMSwwLDAsMC0xLTFINUExLDEsMCwwLDAsNCwzVjI1YTEsMSwwLDAsMCwxLDFINloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xp'@;
put 'ZCBjbHItaS1zb2xpZC1wYXRoLTMiIGQ9Ik0xMCwyOFY4SDI4VjdhMSwxLDAsMCwwLTEtMUg5QTEsMSwwLDAsMCw4LDdWMjlhMSwxLDAsMCwwLDEsMWgxWiIvPicpLHkuQ2xyU2hhcGVQYXBlcmNsaXA9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWkt'@;
put 'b3V0bGluZS1wYXRoLTEiIGQ9Ik04LjQyLDMyLjZBNi4zLDYuMywwLDAsMSw0LDMwLjc5bC0uMTMtLjEzQTYuMiw2LjIsMCwwLDEsMiwyNi4yMiw2Ljc3LDYuNzcsMCwwLDEsNCwyMS40TDE5LjUsNi4wN2E4LjY3LDguNjcsMCwwLDEsMTIuMTUtLjM1QTgsOCwwLDAsMSwzNCwxMS40NGE5LDks'@;
put 'MCwwLDEtMi43LDYuMzZMMTcuMzcsMzEuNkExLDEsMCwxLDEsMTYsMzAuMThMMjkuODksMTYuMzhBNyw3LDAsMCwwLDMyLDExLjQ0YTYsNiwwLDAsMC0xLjc2LTQuMyw2LjY3LDYuNjcsMCwwLDAtOS4zNC4zNUw1LjQ1LDIyLjgyQTQuNzgsNC43OCwwLDAsMCw0LDI2LjIyYTQuMjEsNC4yMSww'@;
put 'LDAsMCwxLjI0LDNsLjEzLjEzYTQuNjQsNC42NCwwLDAsMCw2LjUtLjIxTDI1LjIyLDE1Ljk0QTIuNywyLjcsMCwwLDAsMjYsMTRhMi4zNSwyLjM1LDAsMCwwLS42OS0xLjY4LDIuNjEsMi42MSwwLDAsMC0zLjY2LjEzbC05LjIsOS4xMmExLDEsMCwxLDEtMS40MS0xLjQyTDIwLjI4LDExYTQu'@;
put 'NjIsNC42MiwwLDAsMSw2LjQ4LS4xM0E0LjMzLDQuMzMsMCwwLDEsMjgsMTRhNC42OCw0LjY4LDAsMCwxLTEuNDEsMy4zNEwxMy4yOCwzMC41OEE2LjkxLDYuOTEsMCwwLDEsOC40MiwzMi42WiIvPicpLHkuQ2xyU2hhcGVTaHJpbms9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNs'@;
put 'ci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMiwxNUgyMi40MWw5LjI1LTkuMjVhMSwxLDAsMCwwLTEuNDEtMS40MUwyMSwxMy41OVY0YTEsMSwwLDAsMC0yLDBWMTdIMzJhMSwxLDAsMCwwLDAtMloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRs'@;
put 'aW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNNCwxOWExLDEsMCwwLDAsMCwyaDkuNTlMNC4zMywzMC4yNWExLDEsMCwxLDAsMS40MSwxLjQxTDE1LDIyLjQxVjMyYTEsMSwwLDAsMCwyLDBWMTlaIi8+JykseS5DbHJTaGFwZUFjY2Vzc2liaWxpdHkxPSgwLGcuY2xySWNvblNWRykoJzxw'@;
put 'YXRoIGQ9Ik0xNC40NCwzMS45NGE3LjMxLDcuMzEsMCwwLDEtNS43LTExLjg4TDcuMzIsMTguNjRhOS4zLDkuMywwLDAsMCwxMy4xLDEzLjExTDE5LDMwLjMzQTcuMjksNy4yOSwwLDAsMSwxNC40NCwzMS45NFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAv'@;
put 'PlxuICAgICAgICAgICAgPHBhdGggZD0iTTI1LjM2LDEuNjdhNC4xMiw0LjEyLDAsMSwwLDQuMTEsNC4xMUE0LjEyLDQuMTIsMCwwLDAsMjUuMzYsMS42N1ptMCw2LjIzYTIuMTIsMi4xMiwwLDEsMSwyLjExLTIuMTJBMi4xMiwyLjEyLDAsMCwxLDI1LjM2LDcuOVoiIGNsYXNzPSJjbHItaS1v'@;
put 'dXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2LjU2LDE4LjE4aC01YTEsMSwwLDAsMC0uMjQuMDVsMy4wOS0zLjU1YTIuODMsMi44MywwLDAsMC0uNjktNC4zM2wtOC00LjZhMSwxLDAsMCwwLTEuMTIuMDhMOS44Myw5LjU4QTEsMSwwLDAs'@;
put 'MCw5LjY2LDExYTEsMSwwLDAsMCwuNzkuMzgsMSwxLDAsMCwwLC42MS0uMjFsNC4yNy0zLjM0LDMuMTEsMS43Ny01LjA4LDUuNzhoMGE5LjI4LDkuMjgsMCwwLDAtNC41MywxLjgzbDEuNDMsMS40M0E3LjMsNy4zLDAsMCwxLDIwLjQyLDI4LjgxbDEuNDIsMS40M2E5LjI3LDkuMjcsMCwwLDAs'@;
put 'Ljc3LTEwLjA2aDIuODJsLS43Nyw2LjUxYTEsMSwwLDAsMCwuODgsMS4xMWguMTJhMSwxLDAsMCwwLDEtLjg4bC45LTcuNjJhMSwxLDAsMCwwLS4yNS0uNzhBMSwxLDAsMCwwLDI2LjU2LDE4LjE4Wm0tNi4zNy03LjU2LDIuNTIsMS40NmEuNzkuNzksMCwwLDEsLjQuNTkuODEuODEsMCwwLDEt'@;
put 'LjIuNjlMMTkuNzUsMTdBOS4xNyw5LjE3LDAsMCwwLDE2LDE1LjQ1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTQuNzcsMzEuOTRhNy4zMSw3LjMxLDAsMCwxLTUuNy0xMS44OEw3LjY1LDE4LjY0YTkuMyw5'@;
put 'LjMsMCwwLDAsMTMuMSwxMy4xMWwtMS40Mi0xLjQyQTcuMjksNy4yOSwwLDAsMSwxNC43NywzMS45NFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuNjUsMi4xYTMuMTIsMy4xMiwwLDEsMCwzLjExLDMuMTJBMy4x'@;
put 'MiwzLjEyLDAsMCwwLDI2LjY1LDIuMVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODEsMTguMThIMjEuNDdxLS4zMS0uMzMtLjY2LS42M2w0LjM4LTQuODZhMi4xNCwyLjE0LDAsMCwwLS41My0zLjI3TDIwLjks'@;
put 'Ny4yM2wwLDBMMTcuMDUsNS4wN2ExLDEsMCwwLDAtMS4xMS4wOEwxMS4xNSw4LjlhMSwxLDAsMCwwLDEuMjMsMS41OGw0LjI3LTMuMzQsMi44NywxLjYzTDEzLjYsMTUuMzlhOS4zMyw5LjMzLDAsMCwwLTQuNDQsMS44MmwxLjQyLDEuNDNBNy4zLDcuMywwLDAsMSwyMC43NSwyOC44MWwxLjQz'@;
put 'LDEuNDNBOS4yNyw5LjI3LDAsMCwwLDIzLDIwLjE4aDIuNzRsLS43Nyw2LjUxYTEsMSwwLDAsMCwuODcsMS4xMWguMTJhMSwxLDAsMCwwLDEtLjg4bC45LTcuNjJhMSwxLDAsMCwwLS4yNS0uNzhBMSwxLDAsMCwwLDI2LjgxLDE4LjE4WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlk'@;
put 'LXBhdGgtMyIgLz4nKSx5LkNsclNoYXBlQWNjZXNzaWJpbGl0eTI9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMwLjA2LDExaC0yNGExLDEsMCwxLDAsMCwySDE0djkuNjVzMCwwLDAsMGwtMy43NSwxMGExLDEsMCwwLDAsLjU4LDEuMjksMS4xMywxLjEzLDAsMCwwLC4zNi4wNiwxLDEs'@;
put 'MCwwLDAsLjkzLS42NUwxNS42MiwyNGg0Ljc2bDMuNTIsOS4zNWExLDEsMCwwLDAsLjkzLjY1LDEuMTMsMS4xMywwLDAsMCwuMzYtLjA2LDEsMSwwLDAsMCwuNTgtMS4yOUwyMiwyMi42OHMwLDAsMCwwVjEzaDguMDZhMSwxLDAsMSwwLDAtMlpNMjAsMjJIMTZWMTNoNFoiIGNsYXNzPSJjbHIt'@;
put 'aS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDEwYTQsNCwwLDEsMC00LTRBNCw0LDAsMCwwLDE4LDEwWm0wLTZhMiwyLDAsMSwxLTIsMkEyLDIsMCwwLDEsMTgsNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUt'@;
put 'cGF0aC0yIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMTcuOTYiIGN5PSI1IiByPSIzIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLDEwSDZhMSwxLDAsMCwwLDAsMmg4djguMzZzMCwwLDAsMEwxMC4xMSwz'@;
put 'My4xN2ExLDEsMCwwLDAsLjY2LDEuMjUsMS41NSwxLjU1LDAsMCwwLC4yOSwwLDEsMSwwLDAsMCwxLS43MWwzLjI5LTEwLjg0aDUuMzhMMjQsMzMuNzVhMSwxLDAsMCwwLDEsLjcxLDEuNTUsMS41NSwwLDAsMCwuMjksMCwxLDEsMCwwLDAsLjY2LTEuMjVMMjIsMjAuNHMwLDAsMCwwVjEyaDhh'@;
put 'MSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+JykseS5DbHJTaGFwZVNvcnRCeT0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjguNTQsMTNINy40NmExLDEsMCwwLDEsMC0ySDI4LjU0YTEsMSwwLDAsMSwwLDJaIiBjbGFzcz0iY2xy'@;
put 'LWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMS4xNywxOUg3LjQ2YTEsMSwwLDAsMSwwLTJIMjEuMTdhMSwxLDAsMCwxLDAsMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAg'@;
put 'ICAgPHBhdGggZD0iTTEzLjc0LDI1SDcuNDZhMSwxLDAsMCwxLDAtMmg2LjI4YTEsMSwwLDAsMSwwLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz4nKSx5LkNsclNoYXBlQ29sbGFwc2VDYXJkPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMywy'@;
put 'MUgzYTEsMSwwLDAsMC0xLDF2NmExLDEsMCwwLDAsMSwxSDMzYTEsMSwwLDAsMCwxLTFWMjJBMSwxLDAsMCwwLDMzLDIxWm0tMSw2SDRWMjNIMzJaIiAgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwyMC4yMmw1'@;
put 'LjY1LTUuNjVhLjgxLjgxLDAsMCwwLDAtMS4xNC44LjgsMCwwLDAtMS4xMywwTDE4LDE4bC00LjUyLTQuNTJhLjguOCwwLDAsMC0xLjEzLDAsLjgxLjgxLDAsMCwwLDAsMS4xNFoiICBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBh'@;
put 'dGggZD0iTTE4LDE0LjIybDUuNjUtNS42NWEuODEuODEsMCwwLDAsMC0xLjE0LjguOCwwLDAsMC0xLjEzLDBMMTgsMTIsMTMuNDgsNy40M2EuOC44LDAsMCwwLTEuMTMsMCwuODEuODEsMCwwLDAsMCwxLjE0WiIgIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIi8+'@;
put 'XG4gICAgICAgICAgICA8cmVjdCB4PSIyIiB5PSIyMiIgd2lkdGg9IjMyIiBoZWlnaHQ9IjgiIHJ4PSIxIiByeT0iMSIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwyMC43bC01Ljc5LTUuNzlhMSwxLDAsMCwxLDAt'@;
put 'MS40MSwxLDEsMCwwLDEsMS40MSwwTDE4LDE3Ljg3bDQuMzgtNC4zN2ExLDEsMCwwLDEsMS40MSwwLDEsMSwwLDAsMSwwLDEuNDFaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDE0LjUsMTIuMjEsOC43MWExLDEs'@;
put 'MCwwLDEsMC0xLjQyLDEsMSwwLDAsMSwxLjQxLDBMMTgsMTEuNjdsNC4zOC00LjM4YTEsMSwwLDAsMSwxLjQxLDAsMSwxLDAsMCwxLDAsMS40MloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIC8+JykseS5DbHJTaGFwZUV4cGFuZENhcmQ9KDAsZy5jbHJJY29uU1ZH'@;
put 'KSgnPHBhdGggZD0iTTMzLDZIM0ExLDEsMCwwLDAsMiw3VjI5YTEsMSwwLDAsMCwxLDFIMzNhMSwxLDAsMCwwLDEtMVY3QTEsMSwwLDAsMCwzMyw2Wk0zMiwyOEg0VjhIMzJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGgg'@;
put 'ZD0iTTEzLjQ4LDE1Ljg2LDE4LDExLjM0bDQuNTIsNC41MmEuNzcuNzcsMCwwLDAsLjU2LjI0LjgxLjgxLDAsMCwwLC41Ny0xLjM3TDE4LDkuMDhsLTUuNjUsNS42NWEuOC44LDAsMSwwLDEuMTMsMS4xM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4g'@;
put 'ICAgICAgICAgICA8cGF0aCBkPSJNMTMuNDgsMjEuODYsMTgsMTcuMzRsNC41Miw0LjUyYS43Ny43NywwLDAsMCwuNTYuMjQuODEuODEsMCwwLDAsLjU3LTEuMzdMMTgsMTUuMDhsLTUuNjUsNS42NWEuOC44LDAsMSwwLDEuMTMsMS4xM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91'@;
put 'dGxpbmUtcGF0aC0zIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMsNkgzQTEsMSwwLDAsMCwyLDdWMjlhMSwxLDAsMCwwLDEsMUgzM2ExLDEsMCwwLDAsMS0xVjdBMSwxLDAsMCwwLDMzLDZaTTIzLjc5LDIxLjQxYTEsMSwwLDAsMS0xLjQxLDBMMTgsMTdsLTQuMzgsNC4zOGExLDEsMCww'@;
put 'LDEtMS40MSwwLDEsMSwwLDAsMSwwLTEuNDJMMTgsMTQuMiwyMy43OSwyMEExLDEsMCwwLDEsMjMuNzksMjEuNDFabTAtNi4yYTEsMSwwLDAsMS0xLjQxLDBMMTgsMTAuODNsLTQuMzgsNC4zOGExLDEsMCwwLDEtMS40MSwwLDEsMSwwLDAsMSwwLTEuNDJMMTgsOGw1Ljc5LDUuNzlBMSwxLDAs'@;
put 'MCwxLDIzLjc5LDE1LjIxWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz4nKSx5LkNsclNoYXBlQnJpZWZjYXNlPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMiwyOGEwLDAsMCwwLDEsMCwwSDRWMjEuMzJhNy4xLDcuMSwwLDAsMS0yLTEuNDNWMjhhMiwy'@;
put 'LDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjE5Ljg5YTYuNzQsNi43NCwwLDAsMS0yLDEuNDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbjxwYXRoIGQ9Ik0yNSwyMi40YTEsMSwwLDAsMCwxLTFWMTUuOTRIMjRWMThIMTR2MkgyNHYxLjRBMSwx'@;
put 'LDAsMCwwLDI1LDIyLjRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbjxwYXRoIGQ9Ik0zMyw2SDI0VjQuMzhBMi40MiwyLjQyLDAsMCwwLDIxLjU1LDJoLTcuMUEyLjQyLDIuNDIsMCwwLDAsMTIsNC4zOFY2SDNBMSwxLDAsMCwwLDIsN3Y4YTUsNSww'@;
put 'LDAsMCw1LDVoM3YxLjRhMSwxLDAsMCwwLDIsMFYxNS45NEgxMFYxOEg3YTMsMywwLDAsMS0zLTNWOEgzMnY3YTMsMywwLDAsMS0zLDNIMjh2MmgxYTUsNSwwLDAsMCw1LTVWN0ExLDEsMCwwLDAsMzMsNlpNMjIsNkgxNFY0LjQzQS40NS40NSwwLDAsMSwxNC40NSw0aDcuMTFhLjQzLjQzLDAs'@;
put 'MCwxLC40NC40MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPlxuPHBhdGggZD0iTTMwLDE4QTQuMDYsNC4wNiwwLDAsMCwzNCwxNFY2SDI0VjQuNDNBMi40NCwyLjQ0LDAsMCwwLDIxLjU1LDJoLTcuMUEyLjQ0LDIuNDQsMCwwLDAsMTIsNC40M1Y2SDJ2'@;
put 'OEE0LjA2LDQuMDYsMCwwLDAsNi4wNSwxOGg0VjE1LjkyaDJ2NS43YTEsMSwwLDEsMS0yLDBWMjAuMDZINi4wNkE2LjA2LDYuMDYsMCwwLDEsMiwxOC40OXY5LjQ1YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYxOC40OWE2LDYsMCwwLDEtNC4wNiwxLjU3SDI4VjE4Wk0xNCw0LjQz'@;
put 'QS40NS40NSwwLDAsMSwxNC40NSw0aDcuMWEuNDUuNDUsMCwwLDEsLjQ1LjQzVjZIMTRaTTI2LDIxLjYyYTEsMSwwLDEsMS0yLDBWMjAuMDZIMTRWMThIMjRWMTUuOTJoMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+JykseS5DbHJTaGFwZUNvbG9yUGlja2Vy'@;
put 'PSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMywxMC4wNWE1LjA3LDUuMDcsMCwwLDAsLjEtNy4xN0E1LjA2LDUuMDYsMCwwLDAsMjYsM0wyMC43OCw4LjE1YTIuMTMsMi4xMywwLDAsMS0zLDBsLS42Ny0uNjdMMTUuNzIsOC45MiwyNy4wOCwyMC4yOGwxLjQyLTEuNDItLjY3LS42N2Ey'@;
put 'LjEzLDIuMTMsMCwwLDEsMC0zWk0yNi40NCwxMy44YTQuMDcsNC4wNywwLDAsMC0xLjA4LDEuOTJsLTUuMDgtNS4wOEE0LjA3LDQuMDcsMCwwLDAsMjIuMiw5LjU2bDUuMTYtNS4xN2EzLjA5LDMuMDksMCwwLDEsNC4zNS0uMSwzLjA5LDMuMDksMCwwLDEtLjEsNC4zNVoiIGNsYXNzPSJjbHIt'@;
put 'aS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuPHBhdGggZD0iTTcuMywzMS41MWEyLDIsMCwxLDEtMi44My0yLjgzTDE4LjU4LDE0LjU3bC0xLjQyLTEuNDFMMy4wNSwyNy4yN2E0LDQsMCwwLDAtLjY4LDQuOEwuODksMzMuNTVBMSwxLDAsMCwwLC44OSwzNWExLDEsMCwwLDAs'@;
put 'MS40MiwwbDEuNDMtMS40NGEzLjkzLDMuOTMsMCwwLDAsMi4wOS42LDQuMDYsNC4wNiwwLDAsMCwyLjg4LTEuMkwyMi44MiwxOC44MSwyMS40MSwxNy40WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG48cGF0aCBkPSJNMzMuNzMsMi4xMWE0LjA5LDQu'@;
put 'MDksMCwwLDAtNS43Ni4xTDIyLjgxLDcuMzhhMy4xMywzLjEzLDAsMCwxLTQuMy4xMUwxNy4wOSw4LjkxLDI3LDE4Ljc5bDEuNDItMS40MkEzLjE4LDMuMTgsMCwwLDEsMjguNDYsMTNsNS4xNy01LjE3QTQuMDgsNC4wOCwwLDAsMCwzMy43MywyLjExWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNs'@;
put 'ci1pLXNvbGlkLXBhdGgtMSIgLz5cbjxwYXRoIGQ9Ik0yMi4xOCwxNi43OSw3LjQ2LDMxLjUxYTIsMiwwLDEsMS0yLjgyLTIuODNMMTkuMzUsMTRsLTEuNDEtMS40MUwzLjIyLDI3LjI3YTQsNCwwLDAsMC0uNjgsNC44TDEuMDYsMzMuNTVhMSwxLDAsMCwwLDAsMS40MSwxLDEsMCwwLDAsMS40'@;
put 'MSwwbDEuNDQtMS40NGEzLjkzLDMuOTMsMCwwLDAsMi4wOS42LDQuMDYsNC4wNiwwLDAsMCwyLjg4LTEuMkwyMy42LDE4LjIxWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz4nKSx5LkNsclNoYXBlQ29weVRvQ2xpcGJvYXJkPSgwLGcuY2xySWNvblNWRykoJzxw'@;
put 'YXRoIGQ9Ik0yMi42LDRIMjEuNTVhMy44OSwzLjg5LDAsMCwwLTcuMzEsMEgxMy40QTIuNDEsMi40MSwwLDAsMCwxMSw2LjRWMTBIMjVWNi40QTIuNDEsMi40MSwwLDAsMCwyMi42LDRaTTIzLDhIMTNWNi4yNUEuMjUuMjUsMCwwLDEsMTMuMjUsNmgyLjY5bC4xMi0xLjExQTEuMjQsMS4yNCww'@;
put 'LDAsMSwxNi42MSw0YTIsMiwwLDAsMSwzLjE1LDEuMThsLjA5Ljg0aDIuOWEuMjUuMjUsMCwwLDEsLjI1LjI1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG48cGF0aCBkPSJNMzMuMjUsMTguMDZIMjEuMzNsMi44NC0yLjgzYTEsMSwwLDEsMC0xLjQy'@;
put 'LTEuNDJMMTcuNSwxOS4wNmw1LjI1LDUuMjVhMSwxLDAsMCwwLC43MS4yOSwxLDEsMCwwLDAsLjcxLTEuN2wtMi44NC0yLjg0SDMzLjI1YTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbjxwYXRoIGQ9Ik0yOSwxNmgyVjYuNjhB'@;
put 'MS42NiwxLjY2LDAsMCwwLDI5LjM1LDVIMjcuMDhWN0gyOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPlxuPHBhdGggZD0iTTI5LDMxSDdWN0g5VjVINi42NEExLjY2LDEuNjYsMCwwLDAsNSw2LjY3VjMxLjMyQTEuNjYsMS42NiwwLDAsMCw2LjY1LDMz'@;
put 'SDI5LjM2QTEuNjYsMS42NiwwLDAsMCwzMSwzMS4zM1YyMi4wNkgyOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPicpLHkuQ2xyU2hhcGVEcmFnSGFuZGxlPSgwLGcuY2xySWNvblNWRykoJzxjaXJjbGUgY3g9IjE1IiBjeT0iMTIiIHI9IjEuNSIgY2xh'@;
put 'c3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PGNpcmNsZSBjeD0iMTUiIGN5PSIyNCIgcj0iMS41IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48Y2lyY2xlIGN4PSIyMSIgY3k9IjEyIiByPSIxLjUiIGNsYXNzPSJjbHItaS1v'@;
put 'dXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxjaXJjbGUgY3g9IjIxIiBjeT0iMjQiIHI9IjEuNSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+PGNpcmNsZSBjeD0iMjEiIGN5PSIxOCIgcj0iMS41IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHIt'@;
put 'aS1vdXRsaW5lLXBhdGgtNSIgLz48Y2lyY2xlIGN4PSIxNSIgY3k9IjE4IiByPSIxLjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02IiAvPicpLHkuQ2xyU2hhcGVGaWx0ZXIyPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMywxMUgzYTEsMSwwLDAsMCww'@;
put 'LDJIMzNhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuPHBhdGggZD0iTTI4LDE3SDhhMSwxLDAsMCwwLDAsMkgyOGExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+'@;
put 'XG48cGF0aCBkPSJNMjMsMjNIMTNhMSwxLDAsMCwwLDAsMkgyM2ExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+JykseS5DbHJTaGFwZU1vb249KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMxLDI3LjE5YTEsMSwwLDAsMC0x'@;
put 'LS41NmMtLjI4LDAtLjU2LDAtLjg1LDBBMTEsMTEsMCwwLDEsMjQuOTIsNS42MWExLDEsMCwwLDAsLjYxLTEsMSwxLDAsMCwwLS42Ny0uOTEsMTQuNywxNC43LDAsMCwwLTUtLjg3LDE1LjEyLDE1LjEyLDAsMCwwLDAsMzAuMjQsMTQuNzgsMTQuNzgsMCwwLDAsMTEtNC44MUExLDEsMCwwLDAs'@;
put 'MzEsMjcuMTlaTTE5Ljg5LDMxLjEyYTEzLjEyLDEzLjEyLDAsMCwxLDAtMjYuMjQsMTEuODEsMTEuODEsMCwwLDEsMiwuMTYsMTMsMTMsMCwwLDAsNS43MiwyMy41M0ExMi43NSwxMi43NSwwLDAsMSwxOS44OSwzMS4xMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0'@;
put 'aC0xIiAvPlxuPHBhdGggZD0iTTI5LjIsMjYuNzJBMTIuMDcsMTIuMDcsMCwwLDEsMjIuOSw0LjQ0LDEzLjY4LDEzLjY4LDAsMCwwLDE5LjQ5LDRhMTQsMTQsMCwwLDAsMCwyOCwxMy44MiwxMy44MiwwLDAsMCwxMC45LTUuMzRBMTEuNzEsMTEuNzEsMCwwLDEsMjkuMiwyNi43MloiIGNsYXNz'@;
put 'PSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+JykseS5DbHJTaGFwZVN1bj0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTgsNi4zMWExLDEsMCwwLDAsMS0xVjEuOTFhMSwxLDAsMCwwLTIsMHYzLjRBMSwxLDAsMCwwLDE4LDYuMzFaIiBjbGFzcz0iY2xyLWktb3V0bGlu'@;
put 'ZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbjxwYXRoIGQ9Ik0xOCwyOS42OWExLDEsMCwwLDAtMSwxdjMuNGExLDEsMCwwLDAsMiwwdi0zLjRBMSwxLDAsMCwwLDE4LDI5LjY5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG48cGF0aCBkPSJNOC4z'@;
put 'Miw5Ljc0QTEsMSwwLDAsMCw5LDEwYTEsMSwwLDAsMCwuNzEtLjI5LDEsMSwwLDAsMCwwLTEuNDJMNy4zMyw1LjkyQTEsMSwwLDAsMCw1LjkyLDcuMzNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz48cGF0aCBkPSJNMjcuNjgsMjYuMjZhMSwxLDAsMSww'@;
put 'LTEuNDIsMS40MmwyLjQxLDIuNGExLDEsMCwwLDAsLjcxLjMsMSwxLDAsMCwwLC43LS4zLDEsMSwwLDAsMCwwLTEuNDFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz48cGF0aCBkPSJNNi4zMSwxOGExLDEsMCwwLDAtMS0xSDEuOTFhMSwxLDAsMCwwLDAs'@;
put 'MmgzLjRBMSwxLDAsMCwwLDYuMzEsMThaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz48cGF0aCBkPSJNMzQuMDksMTdoLTMuNGExLDEsMCwxLDAsMCwyaDMuNGExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1w'@;
put 'YXRoLTYiIC8+PHBhdGggZD0iTTguMzIsMjYuMjZsLTIuNCwyLjQxYTEsMSwwLDAsMCwuNywxLjcxLDEsMSwwLDAsMCwuNzEtLjNsMi40MS0yLjRhMSwxLDAsMSwwLTEuNDItMS40MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC03IiAvPjxwYXRoIGQ9Ik0yNywx'@;
put 'MGExLDEsMCwwLDAsLjcxLS4yOWwyLjQtMi40MWExLDEsMCwwLDAsMC0xLjQxLDEsMSwwLDAsMC0xLjQxLDBsLTIuNDEsMi40YTEsMSwwLDAsMCwwLDEuNDJBMSwxLDAsMCwwLDI3LDEwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTgiIC8+PHBhdGggZD0iTTE4'@;
put 'LjEzLDcuNzVhMTAuMTMsMTAuMTMsMCwxLDAsMTAsMTAuMTNBMTAuMDgsMTAuMDgsMCwwLDAsMTguMTMsNy43NVptMCwxOC4yNWE4LjEzLDguMTMsMCwxLDEsOC04LjEyQTguMDgsOC4wOCwwLDAsMSwxOC4xMywyNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC05'@;
put 'IiAvPjxwYXRoIGQ9Ik0xOCw2LjQyYTEsMSwwLDAsMCwxLTFWMS45MWExLDEsMCwwLDAtMiwwVjUuNDJBMSwxLDAsMCwwLDE4LDYuNDJaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0xOCwyOS41OGExLDEsMCwwLDAtMSwxdjMuNTFhMSwxLDAs'@;
put 'MCwwLDIsMFYzMC41OEExLDEsMCwwLDAsMTgsMjkuNThaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPjxwYXRoIGQ9Ik04LjQsOS44MUExLDEsMCwwLDAsOS44MSw4LjRMNy4zMyw1LjkyQTEsMSwwLDAsMCw1LjkyLDcuMzNaIiBjbGFzcz0iY2xyLWktc29saWQg'@;
put 'Y2xyLWktc29saWQtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0yNy42LDI2LjE5YTEsMSwwLDAsMC0xLjQxLDEuNDFsMi40OCwyLjQ4YTEsMSwwLDAsMCwxLjQxLTEuNDFaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC00IiAvPjxwYXRoIGQ9Ik02LjQyLDE4YTEsMSwwLDAsMC0x'@;
put 'LTFIMS45MWExLDEsMCwwLDAsMCwySDUuNDJBMSwxLDAsMCwwLDYuNDIsMThaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC01IiAvPjxwYXRoIGQ9Ik0zNC4wOSwxN0gzMC41OGExLDEsMCwwLDAsMCwyaDMuNTFhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1zb2xp'@;
put 'ZCBjbHItaS1zb2xpZC1wYXRoLTYiIC8+PHBhdGggZD0iTTguNCwyNi4xOSw1LjkyLDI4LjY3YTEsMSwwLDAsMCwxLjQxLDEuNDFMOS44MSwyNy42QTEsMSwwLDAsMCw4LjQsMjYuMTlaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC03IiAvPjxwYXRoIGQ9Ik0yNy42LDku'@;
put 'ODFsMi40OC0yLjQ4YTEsMSwwLDAsMC0xLjQxLTEuNDFMMjYuMTksOC40QTEsMSwwLDAsMCwyNy42LDkuODFaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC04IiAvPjxjaXJjbGUgY3g9IjE4IiBjeT0iMTgiIHI9IjEwIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29s'@;
put 'aWQtcGF0aC05IiAvPicpLHkuQ2xyU2hhcGVXYW5kPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzQuMSw0LDMxLjcxLDEuNmExLjgzLDEuODMsMCwwLDAtMS4zMS0uNTRoMGEyLjA1LDIuMDUsMCwwLDAtMS40'@;
put 'NS42MkwxLjc2LDI5LjIzQTIsMiwwLDAsMCwxLjY4LDMybDIuNCwyLjQzQTEuODMsMS44MywwLDAsMCw1LjM5LDM1aDBhMi4wNSwyLjA1LDAsMCwwLDEuNDUtLjYyTDM0LDYuNzlBMiwyLDAsMCwwLDM0LjEsNFpNNS40MiwzMi45MywzLjE2LDMwLjY1aDBMMjQuMTEsOS40M2wyLjI1LDIuMjha'@;
put 'TTMyLjYxLDUuMzlsLTUuMTIsNS4xOEwyNS4yNCw4LjI5bDUuMTMtNS4yLDIuMjUsMi4yOFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMzIuNTMsMjAuNDdsMi4wOS0yLjA5YS44LjgsMCwwLDAtMS4xMy0xLjEz'@;
put 'bC0yLjA5LDIuMDktMi4wOS0yLjA5YS44LjgsMCwwLDAtMS4xMywxLjEzbDIuMDksMi4wOS0yLjA5LDIuMDlhLjguOCwwLDAsMCwxLjEzLDEuMTNsMi4wOS0yLjA5LDIuMDksMi4wOWEuOC44LDAsMCwwLDEuMTMtMS4xM1oiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRs'@;
put 'aW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMTQuNzgsNi41MWEuOC44LDAsMCwwLDEuMTMsMEwxNy40LDVsMS40OSwxLjQ5QS44LjgsMCwwLDAsMjAsNS4zOEwxOC41NCwzLjg5LDIwLDIuNGEuOC44LDAsMCwwLTEuMTMtMS4xM0wxNy40LDIuNzYsMTUuOTEsMS4yN0EuOC44LDAsMSww'@;
put 'LDE0Ljc4LDIuNGwxLjQ5LDEuNDlMMTQuNzgsNS4zOEEuOC44LDAsMCwwLDE0Ljc4LDYuNTFaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgZD0iTTguMzMsMTUuMjZhLjguOCwwLDAsMCwxLjEzLDBsMS4xNi0xLjE2LDEu'@;
put 'MTYsMS4xNmEuOC44LDAsMSwwLDEuMTMtMS4xM0wxMS43NiwxM2wxLjE2LTEuMTZhLjguOCwwLDEsMC0xLjEzLTEuMTNsLTEuMTYsMS4xNkw5LjQ2LDEwLjY4YS44LjgsMCwxLDAtMS4xMywxLjEzTDkuNDksMTMsOC4zMywxNC4xM0EuOC44LDAsMCwwLDguMzMsMTUuMjZaIi8+JykseS5DbHJT'@;
put 'aGFwZUN1cnNvck1vdmU9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI4Ljg1LDEyLjg5YTEsMSwwLDAsMC0xLjQyLDAsMSwxLDAsMCwwLDAsMS40MUwzMC4xNCwxN0gxOVY1Ljg2bDIuNjksMi43YTEsMSwwLDAsMCwxLjQxLDAsMSwxLDAsMCwwLDAtMS40MkwxOCwyLDEyLjg5LDcuMTVh'@;
put 'MSwxLDAsMCwwLS4yOS43MSwxLDEsMCwwLDAsMS43MS43TDE3LDUuODZWMTdINS44NmwyLjctMi42OWExLDEsMCwwLDAsMC0xLjQxLDEsMSwwLDAsMC0xLjQyLDBMMiwxOGw1LjE0LDUuMTFhMSwxLDAsMCwwLC43MS4yOSwxLDEsMCwwLDAsLjctMS43MUw1Ljg2LDE5SDE3VjMwLjE0bC0yLjY5'@;
put 'LTIuN2ExLDEsMCwwLDAtMS43MS43LDEsMSwwLDAsMCwuMjkuNzFMMTgsMzRsNS4xMS01LjE0YTEsMSwwLDAsMCwwLTEuNDIsMSwxLDAsMCwwLTEuNDEsMEwxOSwzMC4xNFYxOUgzMC4xNGwtMi43LDIuNjlhMSwxLDAsMCwwLC43LDEuNzEsMSwxLDAsMCwwLC43MS0uMjlMMzQsMThaIiBjbGFz'@;
put 'cz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz4nKSx5LkNsclNoYXBlQ2xvbmU9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTYsNkgyMnY0aDJWNmEyLDIsMCwwLDAtMi0ySDZBMiwyLDAsMCwwLDQsNlYyMmEyLDIsMCwwLDAsMiwyaDRWMjJINloiIGNsYXNzPSJj'@;
put 'bHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0zMCwxMkgxNGEyLDIsMCwwLDAtMiwyVjMwYTIsMiwwLDAsMCwyLDJIMzBhMiwyLDAsMCwwLDItMlYxNEEyLDIsMCwwLDAsMzAsMTJabTAsMThIMTRWMTRIMzBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHIt'@;
put 'aS1vdXRsaW5lLXBhdGgtMiIgLz48cG9seWdvbiBwb2ludHM9IjIxIDI4IDIzIDI4IDIzIDIzIDI4IDIzIDI4IDIxIDIzIDIxIDIzIDE2IDIxIDE2IDIxIDIxIDE2IDIxIDE2IDIzIDIxIDIzIDIxIDI4IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz48cGF0'@;
put 'aCBkPSJNMjQsMTBWNmEyLDIsMCwwLDAtMi0ySDZBMiwyLDAsMCwwLDQsNlYyMmEyLDIsMCwwLDAsMiwyaDRWMTJhMiwyLDAsMCwxLDItMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+PHBhdGggZD0iTTMwLDEySDE0YTIsMiwwLDAsMC0yLDJWMzBhMiwyLDAs'@;
put 'MCwwLDIsMkgzMGEyLDIsMCwwLDAsMi0yVjE0QTIsMiwwLDAsMCwzMCwxMlpNMjgsMjNIMjN2NUgyMVYyM0gxNlYyMWg1VjE2aDJ2NWg1WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz4nKSx5LkNsclNoYXBlRGV0YWlscz0oMCxnLmNsckljb25TVkcpKCc8cGF0'@;
put 'aCBkPSJNMzIsNkg0QTIsMiwwLDAsMCwyLDhWMjhhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjhBMiwyLDAsMCwwLDMyLDZabTAsMjJINFY4SDMyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTksMTRIMjdhMSwxLDAsMCww'@;
put 'LDAtMkg5YTEsMSwwLDAsMCwwLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNOSwxOEgyN2ExLDEsMCwwLDAsMC0ySDlhMSwxLDAsMCwwLDAsMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxw'@;
put 'YXRoIGQ9Ik05LDIySDE5YTEsMSwwLDAsMCwwLTJIOWExLDEsMCwwLDAsMCwyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+PHBhdGggZD0iTTMyLDZINEEyLDIsMCwwLDAsMiw4VjI4YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlY4QTIsMiww'@;
put 'LDAsMCwzMiw2Wk0xOSwyMkg5YTEsMSwwLDAsMSwwLTJIMTlhMSwxLDAsMCwxLDAsMlptOC00SDlhMSwxLDAsMCwxLDAtMkgyN2ExLDEsMCwwLDEsMCwyWm0wLTRIOWExLDEsMCwwLDEsMC0ySDI3YTEsMSwwLDAsMSwwLDJaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0x'@;
put 'IiAvPicpLHkuQ2xyU2hhcGVEcmFnSGFuZGxlQ29ybmVyPSgwLGcuY2xySWNvblNWRykoJzxjaXJjbGUgY3g9IjEyIiBjeT0iMjQiIHI9IjEuNSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PGNpcmNsZSBjeD0iMTgiIGN5PSIyNCIgcj0iMS41IiBjbGFz'@;
put 'cz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48Y2lyY2xlIGN4PSIxOCIgY3k9IjE4IiByPSIxLjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxjaXJjbGUgY3g9IjI0IiBjeT0iMTIiIHI9IjEuNSIgY2xhc3M9ImNsci1pLW91'@;
put 'dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+PGNpcmNsZSBjeD0iMjQiIGN5PSIyNCIgcj0iMS41IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz48Y2lyY2xlIGN4PSIyNCIgY3k9IjE4IiByPSIxLjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1p'@;
put 'LW91dGxpbmUtcGF0aC02IiAvPicpLHkuQ2xyU2hhcGVFcmFzZXI9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTM1LjYyLDEyYTIuODIsMi44MiwwLDAsMC0uODQtMkwyNy40OSwyLjY1YTIuOSwyLjksMCwwLDAtNCwwTDIuODMsMjMuMjhhMi44NCwyLjg0LDAsMCwwLDAsNEw3LjUzLDMy'@;
put 'SDNhMSwxLDAsMCwwLDAsMkgyOGExLDEsMCwwLDAsMC0ySDE2Ljc0bDE4LTE4QTIuODIsMi44MiwwLDAsMCwzNS42MiwxMlpNMTMuOTEsMzJIMTAuMzZMNC4yNSwyNS44OWEuODQuODQsMCwwLDEsMC0xLjE5bDUuNTEtNS41Miw4LjQ5LDguNDhaTTMzLjM3LDEyLjU0LDE5LjY2LDI2LjI1bC04'@;
put 'LjQ4LTguNDksMTMuNy0xMy43YS44Ni44NiwwLDAsMSwxLjE5LDBsNy4zLDcuMjlhLjg2Ljg2LDAsMCwxLC4yNS42QS44Mi44MiwwLDAsMSwzMy4zNywxMi41NFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0yOCwzMkgxNS4zM0wxOSwy'@;
put 'OC4zN2wtOS45LTkuOUwzLjU0LDI0YTEuODMsMS44MywwLDAsMCwwLDIuNkw5LDMySDNhMSwxLDAsMCwwLDAsMkgyOGExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz48cGF0aCBkPSJNMzQuMDgsMTAuNjVsLTcuMy03LjNhMS44MywxLjgz'@;
put 'LDAsMCwwLTIuNiwwTDEwLjQ3LDE3LjA2bDkuOSw5LjlMMzQuMDgsMTMuMjVBMS44NSwxLjg1LDAsMCwwLDM0LjA4LDEwLjY1WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz4nKSx5LkNsclNoYXBlTGFuZHNjYXBlPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9'@;
put 'Ik0zMiw2SDRBMiwyLDAsMCwwLDIsOFYyOGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWOEEyLDIsMCwwLDAsMzIsNlptMCwyMkg0VjhIMzJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNOSwyMmEuODIuODIsMCwwLDAsLjU1'@;
put 'LS4yMS44LjgsMCwwLDAsMC0xLjEzTDcuODMsMTguOEgyOC4xN2wtMS43MiwxLjg2YS44LjgsMCwwLDAsMCwxLjEzQS44Mi44MiwwLDAsMCwyNywyMmEuNzguNzgsMCwwLDAsLjU4LS4yNkwzMS4wOSwxOGwtMy40Ny0zLjc0YS43OS43OSwwLDAsMC0xLjEzLDAsLjguOCwwLDAsMCwwLDEuMTNs'@;
put 'MS43MiwxLjg2SDcuODNsMS43Mi0xLjg2YS44LjgsMCwwLDAsMC0xLjEzLjc5Ljc5LDAsMCwwLTEuMTMsMEw0LjkxLDE4bDMuNDcsMy43NEEuNzguNzgsMCwwLDAsOSwyMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0zMiw2SDRBMiwy'@;
put 'LDAsMCwwLDIsOFYyOGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWOEEyLDIsMCwwLDAsMzIsNlpNMjcuNzcsMjEuODhhMSwxLDAsMCwxLS43My4zMiwxLDEsMCwwLDEtLjY4LS4yNywxLDEsMCwwLDEtLjA2LTEuNDFMMjcuNzEsMTlIOC4yOUw5LjcsMjAuNTJhMSwxLDAsMCwxLS4w'@;
put 'NiwxLjQxQTEsMSwwLDAsMSw5LDIyLjJhMSwxLDAsMCwxLS43My0uMzJMNC42NCwxOGwzLjU5LTMuODhBMSwxLDAsMCwxLDkuNywxNS40OEw4LjI5LDE3SDI3LjcxTDI2LjMsMTUuNDhhMSwxLDAsMCwxLDEuNDctMS4zNkwzMS4zNiwxOFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xp'@;
put 'ZC1wYXRoLTEiIC8+JykseS5DbHJTaGFwZVBhc3RlPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMCwxMkgyNnYyaDR2MmgyVjE0QTIsMiwwLDAsMCwzMCwxMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxyZWN0IHg9IjMwIiB5PSIxOCIgd2lk'@;
put 'dGg9IjIiIGhlaWdodD0iNiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTMwLDMwSDI4djJoMmEyLDIsMCwwLDAsMi0yVjI2SDMwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+PHBhdGggZD0iTTI0'@;
put 'LDIyVjZhMiwyLDAsMCwwLTItMkg2QTIsMiwwLDAsMCw0LDZWMjJhMiwyLDAsMCwwLDIsMkgyMkEyLDIsMCwwLDAsMjQsMjJaTTYsNkgyMlYyMkg2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+PHJlY3QgeD0iMjAiIHk9IjMwIiB3aWR0aD0iNiIgaGVp'@;
put 'Z2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz48cGF0aCBkPSJNMTQsMjZIMTJ2NGEyLDIsMCwwLDAsMiwyaDRWMzBIMTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIgLz48cGF0aCBkPSJNMzAsMTJIMjZ2Mmg0'@;
put 'djJoMlYxNEEyLDIsMCwwLDAsMzAsMTJaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPjxyZWN0IHg9IjMwIiB5PSIxOCIgd2lkdGg9IjIiIGhlaWdodD0iNiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz48cGF0aCBkPSJNMzAsMzBI'@;
put 'Mjh2MmgyYTIsMiwwLDAsMCwyLTJWMjZIMzBaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiAvPjxyZWN0IHg9IjQiIHk9IjQiIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgcng9IjIiIHJ5PSIyIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC00IiAv'@;
put 'PjxyZWN0IHg9IjIwIiB5PSIzMCIgd2lkdGg9IjYiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNSIgLz48cGF0aCBkPSJNMTQsMjZIMTJ2NGEyLDIsMCwwLDAsMiwyaDRWMzBIMTRaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC02'@;
put 'IiAvPicpLHkuQ2xyU2hhcGVQb3J0cmFpdD0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTUuMzQsMjYuNDVhLjguOCwwLDAsMC0xLjEzLDAsLjc5Ljc5LDAsMCwwLDAsMS4xM0wxOCwzMS4wOWwzLjc0LTMuNDdhLjc5Ljc5LDAsMCwwLC4wNS0xLjEzLjguOCwwLDAsMC0xLjEzLDBMMTgu'@;
put 'OCwyOC4xN1Y3LjgzbDEuODYsMS43MmEuOC44LDAsMSwwLDEuMDgtMS4xN0wxOCw0LjkxLDE0LjI2LDguMzhhLjc5Ljc5LDAsMCwwLDAsMS4xMy44LjgsMCwwLDAsMS4xMywwTDE3LjIsNy44M1YyOC4xN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxw'@;
put 'YXRoIGQ9Ik0yOCwySDhBMiwyLDAsMCwwLDYsNFYzMmEyLDIsMCwwLDAsMiwySDI4YTIsMiwwLDAsMCwyLTJWNEEyLDIsMCwwLDAsMjgsMlptMCwzMEg4VjRIMjhaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMjgsMkg4QTIsMiwwLDAs'@;
put 'MCw2LDRWMzJhMiwyLDAsMCwwLDIsMkgyOGEyLDIsMCwwLDAsMi0yVjRBMiwyLDAsMCwwLDI4LDJaTTIwLjUyLDI2LjNhMSwxLDAsMCwxLDEuMzYsMS40N0wxOCwzMS4zNmwtMy44OC0zLjU5YTEsMSwwLDAsMSwxLjM2LTEuNDdMMTcsMjcuNzFWOC4yOUwxNS40OCw5LjdhMSwxLDAsMCwxLTEu'@;
put 'MzYtMS40N0wxOCw0LjY0bDMuODgsMy41OWExLDEsMCwwLDEsLjA1LDEuNDEsMSwxLDAsMCwxLS43My4zMiwxLDEsMCwwLDEtLjY4LS4yNkwxOSw4LjI5VjI3LjcxWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz4nKSx5LkNsclNoYXBlVHJlZVZpZXc9KDAsZy5j'@;
put 'bHJJY29uU1ZHKSgnPHBhdGggZD0iTTE1LDMySDExYTEsMSwwLDAsMS0xLTFWMjdhMSwxLDAsMCwxLDEtMWg0YTEsMSwwLDAsMSwxLDF2NEExLDEsMCwwLDEsMTUsMzJabS0zLTJoMlYyOEgxMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9'@;
put 'Ik0xNSwxNkgxMWExLDEsMCwwLDAtMSwxdjEuMkg1LjhWMTJIN2ExLDEsMCwwLDAsMS0xVjdBMSwxLDAsMCwwLDcsNkgzQTEsMSwwLDAsMCwyLDd2NGExLDEsMCwwLDAsMSwxSDQuMlYyOS44aDYuMzZhLjguOCwwLDAsMCwwLTEuNkg1LjhWMTkuOEgxMFYyMWExLDEsMCwwLDAsMSwxaDRhMSwx'@;
put 'LDAsMCwwLDEtMVYxN0ExLDEsMCwwLDAsMTUsMTZaTTQsOEg2djJINFpNMTQsMjBIMTJWMThoMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0zNCw5YTEsMSwwLDAsMC0xLTFIMTB2MkgzM0ExLDEsMCwwLDAsMzQsOVoiIGNsYXNzPSJj'@;
put 'bHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0zMywxOEgxOHYySDMzYTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz48cGF0aCBkPSJNMzMsMjhIMTh2MkgzM2ExLDEsMCwwLDAsMC0yWiIgY2xh'@;
put 'c3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIC8+PHJlY3QgeD0iMTAiIHk9IjI2IiB3aWR0aD0iNiIgaGVpZ2h0PSI2IiByeD0iMSIgcnk9IjEiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+PHBhdGggZD0iTTE1LDE2SDExYTEsMSwwLDAs'@;
put 'MC0xLDF2MS4ySDUuOFYxMkg3YTEsMSwwLDAsMCwxLTFWN0ExLDEsMCwwLDAsNyw2SDNBMSwxLDAsMCwwLDIsN3Y0YTEsMSwwLDAsMCwxLDFINC4yVjI5LjhIMTFhLjguOCwwLDEsMCwwLTEuNkg1LjhWMTkuOEgxMFYyMWExLDEsMCwwLDAsMSwxaDRhMSwxLDAsMCwwLDEtMVYxN0ExLDEsMCww'@;
put 'LDAsMTUsMTZaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0zMyw4SDEwdjJIMzNhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIC8+PHBhdGggZD0iTTMzLDE4SDE4djJIMzNhMSwxLDAsMCww'@;
put 'LDAtMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTQiIC8+PHBhdGggZD0iTTMzLDI4SDE4djJIMzNhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTUiIC8+JykseS5DbHJTaGFwZUN1cnNvckhhbmRHcmFiPSgwLGcuY2xy'@;
put 'SWNvblNWRykoJzxwYXRoIGQ9Ik0yOC4wOSw5Ljc0YTQsNCwwLDAsMC0xLjE2LjE5Yy0uMTktMS4yNC0xLjU1LTIuMTgtMy4yNy0yLjE4QTQsNCwwLDAsMCwyMi4xMyw4LDMuMzcsMy4zNywwLDAsMCwxOSw2LjNhMy40NSwzLjQ1LDAsMCwwLTIuODcsMS4zMiwzLjY1LDMuNjUsMCwwLDAtMS44'@;
put 'OS0uNTFBMy4wNSwzLjA1LDAsMCwwLDExLDkuODl2LjkxYy0xLjA2LjQtNC4xMSwxLjgtNC45MSw0Ljg0cy4zNCw4LDIuNjksMTEuNzhhMjUuMjEsMjUuMjEsMCwwLDAsNS45LDYuNDEuOS45LDAsMCwwLC41My4xN0gyNS41NWEuOTIuOTIsMCwwLDAsLjU1LS4xOSwxMy4xMywxMy4xMywwLDAs'@;
put 'MCwzLjc1LTYuMTNBMjUuOCwyNS44LDAsMCwwLDMxLjQxLDE4di01LjVBMy4wOCwzLjA4LDAsMCwwLDI4LjA5LDkuNzRaTTI5LjYxLDE4YTI0LDI0LDAsMCwxLTEuNDcsOS4xNUExMi40NiwxMi40NiwwLDAsMSwyNS4yLDMyLjJIMTUuNDdhMjMuNzUsMjMuNzUsMCwwLDEtNS4yLTUuNzJjLTIu'@;
put 'MzctMy44Ni0zLTguMjMtMi40OC0xMC4zOUE1LjcsNS43LDAsMCwxLDExLDEyLjc2djcuNjVhLjkuOSwwLDAsMCwxLjgsMFY5Ljg5YzAtLjQ3LjU5LTEsMS40Ni0xczEuNDkuNTIsMS40OSwxdjUuNzJoMS44VjguODFjMC0uMjguNTgtLjcxLDEuNDYtLjcxczEuNTMuNDgsMS41My43NXY2Ljg5'@;
put 'aDEuOFYxMGwuMTctLjEyYTIuMSwyLjEsMCwwLDEsMS4xOC0uMzJjLjkzLDAsMS41LjQ0LDEuNS42OGwwLDYuNUgyN1YxMS44N2ExLjkxLDEuOTEsMCwwLDEsMS4xMi0uMzNjLjg2LDAsMS41Mi41MSwxLjUyLjk0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEi'@;
put 'IC8+JykseS5DbHJTaGFwZUN1cnNvckhhbmRPcGVuPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMS40Niw4LjU3QTMuMTEsMy4xMSwwLDAsMCwyNyw1Ljc1YTMuMTksMy4xOSwwLDAsMC00LjY2LTIuNjQsMy4yOSwzLjI5LDAsMCwwLTYuNDItLjc2LDMuMjMsMy4yMywwLDAsMC0xLjY2'@;
put 'LS40NkEzLjI3LDMuMjcsMCwwLDAsMTEsNS4xOFYxNy44NGMtMS4yOC0xLjYtMi41My0zLjE4LTIuNzItMy40NUEzLjE5LDMuMTksMCwwLDAsNS41NiwxMi45YTMuMzcsMy4zNywwLDAsMC0zLjQ3LDMuNDhDMi4xOCwxOC4xOCw1LjY2LDI0LjU0LDgsMjhjMy41NCw1LjI0LDYuOTIsNiw3LjA3'@;
put 'LDZsLjE4LDBIMjUuNTlhLjkyLjkyLDAsMCwwLC41NS0uMTksMTMuMTMsMTMuMTMsMCwwLDAsMy43NS02LjEzYzEtMy4wOSwxLjUzLTcuNTMsMS41OC0xMy41NlpNMjguMTgsMjcuMTJhMTIuNDYsMTIuNDYsMCwwLDEtMi45NCw1LjA4SDE1LjMzYy0uNDctLjE0LTMuMDctMS4xLTUuODctNS4y'@;
put 'NVMzLjk0LDE3LjI3LDMuODksMTYuMjlhMS41LDEuNSwwLDAsMSwuNDUtMS4xMywxLjUyLDEuNTIsMCwwLDEsMS4xNC0uNDYsMS40MywxLjQzLDAsMCwxLDEuMzIuNzFjLjI5LjQzLDIuMzYsMywzLjU3LDQuNTNMMTIuOCwxOC4zVjUuMThhMS40OCwxLjQ4LDAsMSwxLDIuOTUsMFYxNi4zMmgx'@;
put 'Ljh2LTEzYTEuNTEsMS41MSwwLDAsMSwzLDBWMTYuNDVoMS44VjZhMS40MywxLjQzLDAsMSwxLDIuODUsMFYxNy40NEgyN1Y4LjU0YTEuMzMsMS4zMywwLDAsMSwyLjY1LDB2NS41NUMyOS42MiwyMCwyOS4xNCwyNC4yMSwyOC4xOCwyNy4xMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1p'@;
put 'LW91dGxpbmUtcGF0aC0xIiAvPicpLHkuQ2xyU2hhcGVGaWxlWmlwPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMCwzMC4yVjEybC04LjEtNy45SDcuOEM2LjgsNC4xLDYsNC45LDYsNmMwLDAsMCwwLDAsMHYyNC4yYzAsMSwwLjcsMS44LDEuNywxLjhjMCwwLDAuMSwwLDAuMSwwaDIw'@;
put 'LjNcblx0XHRjMSwwLDEuOC0wLjcsMS44LTEuN0MzMCwzMC4zLDMwLDMwLjIsMzAsMzAuMnogTTIyLDYuNmw1LjYsNS40SDIyVjYuNnogTTI4LDMwSDcuOUw4LDZoMTJ2OGg4VjMweiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTEyLDI0'@;
put 'YzAsMS43LDEuMywzLDMsM3MzLTEuMywzLTN2LTRoLTZWMjR6IE0xMy40LDI0di0yLjZoMy4yVjI0YzAuMSwwLjktMC42LDEuNy0xLjUsMS43Yy0wLjksMC4xLTEuNy0wLjYtMS43LTEuNVxuXHRcdEMxMy40LDI0LjIsMTMuNCwyNC4xLDEzLjQsMjR6IiBjbGFzcz0iY2xyLWktb3V0bGluZSBj'@;
put 'bHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMTguMiw5YzAtMC42LTAuNC0xLTEtMUgxNXYyaDIuMkMxNy44LDEwLDE4LjIsOS42LDE4LjIsOXoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0xMi43LDEwYy0wLjYsMC0xLDAu'@;
put 'NC0xLDFzMC40LDEsMSwxSDE1di0ySDEyLjd6IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz48cGF0aCBkPSJNMTcuMiwxNGMwLjYsMCwxLTAuNCwxLTFzLTAuNC0xLTEtMUgxNXYySDE3LjJ6IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5l'@;
put 'LXBhdGgtNSIgLz48cGF0aCBkPSJNMTEuNywxNWMwLDAuNiwwLjQsMSwxLDFIMTV2LTJoLTIuM0MxMi4yLDE0LDExLjcsMTQuNCwxMS43LDE1eiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIC8+PHBhdGggZD0iTTE3LjIsMThjMC42LDAsMS0wLjQsMS0xcy0w'@;
put 'LjQtMS0xLTFIMTV2MkgxNy4yeiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTciIC8+PHBhdGggZD0iTTE1LDI1LjZjMC45LDAsMS42LTAuNywxLjYtMS42di0yLjZoLTMuMlYyNEMxMy40LDI0LjksMTQuMSwyNS42LDE1LDI1LjZ6IiBjbGFzcz0iY2xyLWktc29s'@;
put 'aWQgY2xyLWktc29saWQtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0yMS45LDRINy44QzYuOCw0LDYsNC45LDYsNS45djI0LjJjMCwxLDAuOCwxLjksMS44LDEuOWgyMC4zYzEsMCwxLjgtMC45LDEuOC0xLjlWMTEuOUwyMS45LDR6IE0xOCwyNGMwLDEuNy0xLjMsMy0zLDNcblx0XHRzLTMtMS4zLTMt'@;
put 'M3YtNGg2VjI0eiBNMTcuMiwxMmMwLjYsMCwxLDAuNCwxLDFzLTAuNCwxLTEsMUgxNXYyaDIuMmMwLjYsMCwxLDAuNCwxLDFzLTAuNCwxLTEsMUgxNXYtMmgtMi4yYy0wLjYsMC0xLTAuNC0xLTFcblx0XHRzMC40LTEsMS0xSDE1di0yaC0yLjJjLTAuNiwwLTEtMC40LTEtMXMwLjQtMSwxLTFI'@;
put 'MTVWOGgyLjJjMC42LDAsMSwwLjQsMSwxcy0wLjQsMS0xLDFIMTV2MkgxNy4yeiBNMjEuOSwxMlY2LjVsNS43LDUuNUgyMS45eiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz4nKSx5LkNsclNoYXBlRmlsdGVyT2ZmPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9'@;
put 'Ik0zNCw2LjRDMzQsNS42LDMzLjMsNSwzMi41LDVIMTAuM2wyLDJIMzJ2MC42bC05LjYsOS42bDEuNCwxLjRMMzMuNCw5QzMzLjgsOC42LDM0LDguMSwzNCw3LjZWNi41QzM0LDYuNSwzNCw2LjQsMzQsNi40eiJcblx0XHQgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRo'@;
put 'LTEiIC8+PHBhdGggZD0iTTIuNywzbDIsMmgtMUMyLjksNC45LDIuMSw1LjUsMiw2LjN2MS4xYzAsMC41LDAuMiwxLDAuNiwxLjRMMTQsMjAuMnYxMC4zbDEuOSwwLjhWMTkuNEw0LDcuNVY3aDIuN0wyMCwyMC4zdjEyLjlsMiwwLjhcblx0XHRjMCwwLDAsMCwwLTAuMVYyMi4zbDEwLjEsMTAu'@;
put 'MWwxLjQtMS40TDQuMSwxLjZMMi43LDN6IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMjMuOSwxOC42TDEwLjMsNS4xaDIyLjJDMzMuMyw1LDM0LDUuNiwzNCw2LjRjMCwwLDAsMCwwLDAuMXYxLjFjMCwwLjUtMC4yLDEtMC42LDEuNEwy'@;
put 'My45LDE4LjZ6IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0zMy41LDMxTDQuMSwxLjZMMi42LDNsMi4xLDIuMUgzLjVDMi43LDUsMiw1LjYsMiw2LjRjMCwwLDAsMCwwLDAuMXYxLjFjMCwwLjUsMC4yLDEsMC42LDEuNEwxNCwyMC41djEwLjFs'@;
put 'OCwzLjRWMjIuNFxuXHRsMTAuMSwxMC4xTDMzLjUsMzF6IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPicpLHkuQ2xyU2hhcGVSZWN5Y2xlPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik02LjQsMTcuNGMwLjIsMC4xLDAuMywwLjEsMC41LDAuMWMwLjIsMCww'@;
put 'LjQtMC4xLDAuNS0wLjFsNy00LjFjMC4zLTAuMiwwLjUtMC41LDAuNS0wLjljMC0wLjQtMC4yLTAuNy0wLjUtMC45TDExLjksMTBcblx0XHRMMTQsNi4yYzAuNC0wLjcsMS0xLjMsMS43LTEuN2MyLTEuMSw0LjUtMC4zLDUuNiwxLjdjMC4zLDAuNSwwLjksMC42LDEuNCwwLjNjMCwwLDAsMCww'@;
put 'LjEsMGMwLjQtMC4zLDAuNS0wLjksMC4zLTEuM1xuXHRcdGMtMC42LTEtMS40LTEuOS0yLjQtMi40Yy0zLTEuNi02LjctMC42LTguMywyLjRMOS42LDkuOWMtMC4zLDAuNS0wLjEsMS4xLDAuMywxLjRsMiwxLjJsLTQsMi40VjguMmMwLTAuNi0wLjQtMS0xLTFcblx0XHRDNi40LDcuMyw2LDcu'@;
put 'Nyw2LDguM3Y4LjNDNiwxNi45LDYuMiwxNy4yLDYuNCwxNy40eiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTMyLjEsMjFsLTMuNS02LjJjLTAuMS0wLjItMC40LTAuNC0wLjYtMC41Yy0wLjMtMC4xLTAuNSwwLTAuOCwwLjFsLTIuMiwx'@;
put 'LjNWMTFsNS41LDMuM2MwLjEsMCwwLjEsMC4xLDAuMiwwLjFcblx0XHRjMC41LDAuMiwxLjEsMCwxLjMtMC41YzAuMi0wLjUsMC0xLjEtMC41LTEuM2wtNy00LjJjLTAuMy0wLjItMC43LTAuMi0xLDBDMjMuMSw4LjUsMjMsOC44LDIzLDkuMnY4LjNjMCwwLjQsMC4xLDAuOCwwLjQsMVxuXHRc'@;
put 'dGMwLjMsMC4yLDAuNywwLjIsMSwwbDIuOS0xLjdsMyw1LjNjMC43LDEuMywwLjcsMi44LDAsNC4xYy0wLjYsMS4yLTEuOSwxLjktMy4yLDEuOWgtMC45Yy0wLjUsMC0xLjIsMC40LTEuMiwxXG5cdFx0YzAuMSwwLjYsMC42LDEsMS4yLDFoMC45YzIuMSwwLDQtMS4xLDUtMi45QzMzLjIsMjUu'@;
put 'MiwzMy4yLDIyLjksMzIuMSwyMXoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0yMi40LDI4LjJsLTctNC4yYy0wLjMtMC4yLTAuNy0wLjItMSwwYy0wLjMsMC4yLTAuNCwwLjUtMC40LDAuOXYzLjNIOS4xYy0xLjUtMC4xLTIuOS0wLjkt'@;
put 'My42LTIuM1xuXHRcdGMtMC44LTEuNC0wLjgtMy4yLDAtNC42YzAuMy0wLjUsMC4xLTEuMS0wLjQtMS40Yy0wLjUtMC4zLTEuMS0wLjEtMS40LDAuNGMtMS4yLDIuMS0xLjEsNC42LDAuMSw2LjZDNC45LDI4LjgsNywzMCw5LjIsMzBIMTVcblx0XHRjMC42LDAsMS0wLjQsMS0xdi0yLjRsNCwy'@;
put 'LjRsLTUuNiwzLjNjLTAuMywwLjItMC41LDAuNS0wLjUsMC45YzAsMC42LDAuNSwxLDEsMWMwLjIsMCwwLjMtMC4xLDAuNS0wLjJsNy00LjJcblx0XHRjMC4yLTAuMSwwLjMtMC4yLDAuNC0wLjRDMjMuMSwyOSwyMi45LDI4LjQsMjIuNCwyOC4yeiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xy'@;
put 'LWktb3V0bGluZS1wYXRoLTMiIC8+PHBhdGggZD0iTTIwLjgsMy4xYy0zLTEuNi02LjctMC42LTguNCwyLjRsLTIuMiwzLjhsLTItMS4xQzguMiw4LDgsOCw3LjksOEM3LjQsOCw3LDguNCw3LDguOXY3LjJjMCwwLjMsMC4xLDAuNiwwLjQsMC44XG5cdFx0YzAuMSwwLjEsMC4zLDAuMSwwLjQs'@;
put 'MC4xYzAuMiwwLDAuMywwLDAuNC0wLjFsNi4zLTMuNmMwLjMtMC4yLDAuNC0wLjQsMC40LTAuOGMwLTAuMy0wLjItMC42LTAuNC0wLjhMMTIsMTAuM2wyLjItMy44XG5cdFx0YzAuNC0wLjcsMS0xLjMsMS43LTEuN2MyLTEuMSw0LjUtMC4zLDUuNiwxLjdjMC4zLDAuNSwwLjksMC42LDEuNCww'@;
put 'LjRjMC41LTAuMywwLjYtMC45LDAuNC0xLjRDMjIuNiw0LjUsMjEuOCwzLjYsMjAuOCwzLjF6IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0zMi4yLDIxLjFsLTMtNS4zbDIuMy0xLjNjMC4zLTAuMiwwLjQtMC40LDAuNC0wLjhjMC0wLjMtMC4y'@;
put 'LTAuNi0wLjQtMC44bC02LjItMy42Yy0wLjEtMC4xLTAuMy0wLjEtMC40LTAuMVxuXHRcdGMtMC41LDAtMC45LDAuNC0wLjksMC45djcuMmMwLDAuMywwLjIsMC42LDAuNCwwLjhjMC4xLDAuMSwwLjMsMC4xLDAuNCwwLjFjMC4yLDAsMC4zLTAuMSwwLjQtMC4xbDIuMi0xLjNsMyw1LjNcblx0'@;
put 'XHRjMC43LDEuMiwwLjcsMi44LDAsNGMtMC43LDEuMi0xLjksMS45LTMuMiwxLjloLTAuOWMtMC42LDAtMSwwLjQtMSwxYzAsMC42LDAuNCwxLDEsMWgwLjljMi4xLDAsNC0xLjEsNS0zXG5cdFx0QzMzLjIsMjUuMywzMy4yLDIzLDMyLjIsMjEuMXoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHIt'@;
put 'aS1zb2xpZC1wYXRoLTIiIC8+PHBhdGggZD0iTTIxLjcsMjguNGwtNi4yLTMuNmMtMC4xLTAuMS0wLjMtMC4xLTAuNC0wLjFjLTAuNSwwLTAuOSwwLjQtMC45LDAuOXYyLjZIOS4zYy0xLjUsMC0yLjktMC44LTMuNi0yLjFcblx0XHRjLTAuOC0xLjQtMC44LTMuMSwwLTQuNWMwLjMtMC41LDAu'@;
put 'MS0xLjEtMC40LTEuNGMtMC41LTAuMy0xLjEtMC4xLTEuNCwwLjRjLTEuMiwyLTEuMiw0LjUsMCw2LjVjMS4xLDEuOSwzLjEsMy4xLDUuNCwzLjFoNC44djIuNlxuXHRcdGMwLDAuMywwLjIsMC42LDAuNCwwLjhjMC4xLDAuMSwwLjMsMC4xLDAuNCwwLjFjMC4xLDAsMC4zLDAsMC40LTAuMWw2'@;
put 'LjMtMy42YzAuMy0wLjIsMC40LTAuNCwwLjQtMC44XG5cdFx0QzIyLjEsMjguOCwyMS45LDI4LjUsMjEuNywyOC40eiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgLz4nKSx5LkNsclNoYXBlVHJlZT0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzAuNiwxMS43'@;
put 'QzI5LjIsNS44LDI0LDEuNywxOCwxLjdjLTcuMiwwLTEzLDUuOC0xMywxM2MwLDYuOCw1LjMsMTIuNCwxMiwxMi45djVjMCwwLjYsMC40LDEsMSwxczEtMC40LDEtMXYtNXYtMlYyMlxuXHRjMCwwLDAsMCwwLTAuMXYtMy42bDQuNy00LjdjMC40LTAuNCwwLjQtMSwwLTEuNGMtMC40LTAuNC0x'@;
put 'LTAuNC0xLjQsMEwxOSwxNS42di0zbC0zLjMtMy4zYy0wLjQtMC40LTEtMC40LTEuNCwwXG5cdGMtMC40LDAuNC0wLjQsMSwwLDEuNGwyLjcsMi43djYuMmwtMy44LTMuOGMtMC40LTAuNC0xLTAuNC0xLjQsMGMtMC40LDAuNC0wLjQsMSwwLDEuNGw1LjIsNS4ydjMuMmMtNS42LTAuNS0xMC01'@;
put 'LjItMTAtMTAuOVxuXHRjMC02LjEsNC45LTExLDExLTExczExLDQuOSwxMSwxMWMwLDQuOS0zLjMsOS4yLTgsMTAuNnYyLjFDMjgsMjUuNywzMi4zLDE4LjcsMzAuNiwxMS43eiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTE4LDJDMTAu'@;
put 'OCwxLjcsNC44LDcuMyw0LjUsMTQuNUM0LjIsMjEuNyw5LjgsMjcuNywxNywyOHYtNS4ybC01LjItNS4yYy0wLjQtMC40LTAuNC0xLDAtMS40YzAuNC0wLjQsMS0wLjQsMS40LDBcblx0YzAsMCwwLDAsMCwwbDMuOCwzLjh2LTYuMmwtMi43LTIuN2MtMC40LTAuNC0wLjQtMSwwLTEuNGMwLjQt'@;
put 'MC40LDEtMC40LDEuNCwwYzAsMCwwLDAsMCwwbDMuMywzLjN2M2wzLjMtMy4zYzAuNC0wLjQsMS0wLjQsMS40LDBcblx0YzAsMCwwLDAsMCwwYzAuNCwwLjQsMC40LDEsMCwxLjRMMTksMTguOFYyOGM3LjItMC4zLDEyLjgtNi4zLDEyLjUtMTMuNVMyNS4yLDEuNywxOCwyeiIgY2xhc3M9ImNs'@;
put 'ci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz48cGF0aCBkPSJNMTgsMjhjLTAuMywwLTAuNiwwLTEsMHY1YzAsMC42LDAuNCwxLDEsMXMxLTAuNCwxLTF2LTVDMTguNywyOCwxOC4zLDI4LDE4LDI4eiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz4nKSx5'@;
put 'LkNsclNoYXBlRmlzaD0oMCxnLmNsckljb25TVkcpKCc8Y2lyY2xlIGN4PSIxMS40OSIgY3k9IjE3LjUiIHI9IjEuNSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTMzLjQ4LDkuMjlhMSwxLDAsMCwwLTEsMGMtMy4zNywyLTUuOTEsNS44'@;
put 'MS02LjksNy40NUwyNC44NSwxOHMtMSwxLjYyLTEsMS42MmMtMS43NiwyLjQ5LTUuMSw2LjM2LTguNzksNi4zNi00LjY1LDAtOC43NS02LjE1LTkuODQtNy45NCwxLjA5LTEuNzksNS4xOC03Ljk0LDkuODQtNy45NCwzLjU0LDAsNi43NywzLjU4LDguNTgsNi4wN2wuMjgtLjQ4cy4zNi0uNTEu'@;
put 'OTMtMS4yNUMyMi43MiwxMS42NCwxOS4xOCw4LjA2LDE1LDguMDZjLTYuNTksMC0xMS42Nyw5LjA3LTExLjg4LDkuNDZMMi44OSwxOGwuMjcuNDhjLjIxLjM5LDUuMjksOS40NiwxMS44OCw5LjQ2LDUuMDYsMCw5LjIyLTUuMzQsMTEtOEMyNiwyMCwyNy4xOCwxOCwyNy4xOCwxOGgwbC4wNy0u'@;
put 'MTFhMTguMDYsMTguMDYsMCwwLDEsMS44OC0yLjc1czAsMCwwLDBhMjAuMzEsMjAuMzEsMCwwLDEsMi44Ni0zVjIzLjg4YTIwLjkzLDIwLjkzLDAsMCwxLTMuNjEtNGwtLjE2LjI2aDBsLTEsMS41OWExOC43NCwxOC43NCwwLDAsMCw1LjIxLDQuOTUsMSwxLDAsMCwwLC41LjE0LDEuMTMsMS4x'@;
put 'MywwLDAsMCwuNS0uMTMsMSwxLDAsMCwwLC41LS44N1YxMC4xNkExLDEsMCwwLDAsMzMuNDgsOS4yOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPicpLHkuQ2xyU2hhcGVGb3JtPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yMSwxMkg3YTEsMSww'@;
put 'LDAsMS0xLTFWN0ExLDEsMCwwLDEsNyw2SDIxYTEsMSwwLDAsMSwxLDF2NEExLDEsMCwwLDEsMjEsMTJaTTgsMTBIMjBWNy45NEg4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTIxLDE0LjA4SDdhMSwxLDAsMCwwLTEsMVYxOWExLDEs'@;
put 'MCwwLDAsMSwxSDE4LjM2TDIyLDE2LjNWMTUuMDhBMSwxLDAsMCwwLDIxLDE0LjA4Wk0yMCwxOEg4VjE2SDIwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTExLjA2LDMxLjUxdi0uMDZsLjMyLTEuMzlINFY0aDIwVjE0LjI1TDI2LDEy'@;
put 'LjM2VjNhMSwxLDAsMCwwLTEtMUgzQTEsMSwwLDAsMCwyLDNWMzFhMSwxLDAsMCwwLDEsMWg4QTMuNDQsMy40NCwwLDAsMSwxMS4wNiwzMS41MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0yMiwxOS4xN2wtLjc4Ljc5QTEsMSwwLDAs'@;
put 'MCwyMiwxOS4xN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPjxwYXRoIGQ9Ik02LDI2Ljk0YTEsMSwwLDAsMCwxLDFoNC44NGwuMy0xLjMuMTMtLjU1LDAtLjA1SDhWMjRoNi4zNGwyLTJIN2ExLDEsMCwwLDAtMSwxWiIgY2xhc3M9ImNsci1pLW91dGxp'@;
put 'bmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIC8+PHBhdGggZD0iTTMzLjQ5LDE2LjY3LDMwLjEyLDEzLjNhMS42MSwxLjYxLDAsMCwwLTIuMjgsMGgwTDE0LjEzLDI3LjA5LDEzLDMxLjlhMS42MSwxLjYxLDAsMCwwLDEuMjYsMS45LDEuNTUsMS41NSwwLDAsMCwuMzEsMCwxLjE1LDEuMTUsMCww'@;
put 'LDAsLjM3LDBsNC44NS0xLjA3TDMzLjQ5LDE5YTEuNiwxLjYsMCwwLDAsMC0yLjI3Wk0xOC43NywzMC45MWwtMy42Ni44MUwxNiwyOC4wOSwyNi4yOCwxNy43bDIuODIsMi44MlpNMzAuMjMsMTkuMzlsLTIuODItMi44MkwyOSwxNWwyLjg0LDIuODRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBj'@;
put 'bHItaS1vdXRsaW5lLXBhdGgtNiIgLz4nKSx5LkNsclNoYXBlRnVlbD0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjAuMTIsMzRINS45QTIuODEsMi44MSwwLDAsMSwzLDMxLjE5VjQuODZBMi45LDIuOSwwLDAsMSw2LDIuMDdIMjAuMjJBMi43MiwyLjcyLDAsMCwxLDIzLDQuODZWMzEu'@;
put 'MTlBMi44MiwyLjgyLDAsMCwxLDIwLjEyLDM0Wk01LjksNEEuODcuODcsMCwwLDAsNSw0Ljg2VjMxLjE5YS44Ny44NywwLDAsMCwuODcuODdIMjAuMTJhLjk0Ljk0LDAsMCwwLC45NS0uODdWNC44NkEuOTQuOTQsMCwwLDAsMjAuMTIsNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91'@;
put 'dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0yOS41MywzNEEzLjUsMy41LDAsMCwxLDI2LDMwLjVWMjNhMiwyLDAsMCwwLTItMkgyMi41N2ExLDEsMCwwLDEsMC0ySDI0YTQsNCwwLDAsMSw0LDRWMzAuNWExLjUsMS41LDAsMCwwLDMsMFYxNy4zbC0zLjEzLTdBMi4yOSwyLjI5LDAsMCwwLDI1'@;
put 'LjgsOWgtLjczYTEsMSwwLDEsMSwwLTJoLjczYTQuMyw0LjMsMCwwLDEsMy45MywyLjU1bDMuMjEsNy4xNmExLDEsMCwwLDEsLjA5LjQxVjMwLjVBMy41LDMuNSwwLDAsMSwyOS41MywzNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0x'@;
put 'OCw5SDhBMSwxLDAsMSwxLDgsN0gxOGExLDEsMCwwLDEsMCwyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+PHBhdGggZD0iTTE4LDEzSDhBMSwxLDAsMSwxLDgsMTFIMThBMSwxLDAsMSwxLDE4LDEzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWkt'@;
put 'b3V0bGluZS1wYXRoLTQiIC8+PHBhdGggZD0iTTI1LDEyLjA4YTEsMSwwLDAsMS0xLTF2LTZhMSwxLDAsMCwxLDIsMHY2QTEsMSwwLDAsMSwyNSwxMi4wOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiAvPicpLHkuQ2xyU2hhcGVTbm93Zmxha2U9KDAsZy5j'@;
put 'bHJJY29uU1ZHKSgnPHBhdGggZD0iTTE4LjA1LDMzLjYxYTEsMSwwLDAsMS0xLTFWMy4zN2ExLDEsMCwxLDEsMS45NSwwVjMyLjYzQTEsMSwwLDAsMSwxOC4wNSwzMy42MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0xOC4wNiwxMC4w'@;
put 'NywxNC41Miw2LjU0YTEsMSwwLDAsMSwwLTEuNDEsMSwxLDAsMCwxLDEuNDEsMGwyLjEzLDIuMTIsMi4xMi0yLjEyYTEsMSwwLDAsMSwxLjQxLDAsMSwxLDAsMCwxLDAsMS40MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0yMC44NSwz'@;
put 'MS4xN2ExLDEsMCwwLDEtLjctLjI5TDE4LDI4Ljc2LDE1LjksMzAuODhhMSwxLDAsMCwxLTEuNDEsMCwxLDEsMCwwLDEsMC0xLjQyTDE4LDI1LjkzbDMuNTQsMy41M2ExLDEsMCwwLDEsMCwxLjQyQTEsMSwwLDAsMSwyMC44NSwzMS4xN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91'@;
put 'dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0zMC45MiwyNi41YTEsMSwwLDAsMS0uNS0uMTNsLTI2LTE1QTEsMSwwLDAsMSw0LjA3LDEwYTEsMSwwLDAsMSwxLjM3LS4zNmwyNiwxNWExLDEsMCwwLDEtLjUsMS44N1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00'@;
put 'IiAvPjxwYXRoIGQ9Ik02LDE1LjM3YTEsMSwwLDAsMS0uMjYtMmwyLjktLjc4TDcuODQsOS43M2ExLDEsMCwxLDEsMS45My0uNTJMMTEuMDcsMTQsNi4yNCwxNS4zM0EuODIuODIsMCwwLDEsNiwxNS4zN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiAvPjxw'@;
put 'YXRoIGQ9Ik0yNy4wNSwyNy41NGExLDEsMCwwLDEtMS0uNzVMMjQuOCwyMmw0LjgyLTEuM2ExLDEsMCwxLDEsLjUyLDEuOTNsLTIuOS43OC43OCwyLjlhMSwxLDAsMCwxLS43MSwxLjIyQS43NS43NSwwLDAsMSwyNy4wNSwyNy41NFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxp'@;
put 'bmUtcGF0aC02IiAvPjxwYXRoIGQ9Ik00Ljk0LDI2LjVhMSwxLDAsMCwxLS41LTEuODdsMjYtMTVhMSwxLDAsMCwxLDEuMzYuMzYsMSwxLDAsMCwxLS4zNiwxLjM3bC0yNiwxNUExLDEsMCwwLDEsNC45NCwyNi41WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTci'@;
put 'IC8+PHBhdGggZD0iTTguODEsMjcuNTRhLjc1Ljc1LDAsMCwxLS4yNiwwLDEsMSwwLDAsMS0uNzEtMS4yMmwuNzgtMi45LTIuOS0uNzhBMSwxLDAsMCwxLDUsMjEuMzhhMSwxLDAsMCwxLDEuMjMtLjcxTDExLjA3LDIybC0xLjMsNC44MkExLDEsMCwwLDEsOC44MSwyNy41NFoiIGNsYXNzPSJj'@;
put 'bHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC04IiAvPjxwYXRoIGQ9Ik0yOS44OCwxNS4zN2EuODIuODIsMCwwLDEtLjI2LDBMMjQuOCwxNGwxLjI5LTQuODNBMSwxLDAsMSwxLDI4LDkuNzNsLS43OCwyLjg5LDIuOS43OGExLDEsMCwwLDEtLjI2LDJaIiBjbGFzcz0iY2xyLWktb3V0'@;
put 'bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtOSIgLz4nKSx5LkNsclNoYXBlVGFibGU9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTgsMzRhMSwxLDAsMCwxLTEtMVYyLjkyYTEsMSwwLDAsMSwyLDBWMzNBMSwxLDAsMCwxLDgsMzRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRs'@;
put 'aW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNMTcsMzMuOTJhMSwxLDAsMCwxLTEtMVY5LjFhMSwxLDAsMSwxLDIsMFYzMi45MkExLDEsMCwwLDEsMTcsMzMuOTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMjYsMzRhMSwxLDAsMCwxLTEt'@;
put 'MVY5YTEsMSwwLDAsMSwyLDBWMzNBMSwxLDAsMCwxLDI2LDM0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+PHBhdGggZD0iTTMzLjExLDE4aC0yNWExLDEsMCwxLDEsMC0yaDI1YTEsMSwwLDEsMSwwLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHIt'@;
put 'aS1vdXRsaW5lLXBhdGgtNCIgLz48cGF0aCBkPSJNMzMuMSwyNi45NEg4LjFBMSwxLDAsMSwxLDguMSwyNWgyNWExLDEsMCwxLDEsMCwxLjkyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIC8+PHBhdGggZD0iTTMzLDguOTJIM0ExLDEsMCwxLDEsMyw3SDMz'@;
put 'YTEsMSwwLDEsMSwwLDEuOTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIgLz4nKSx5LkNsclNoYXBlVm9sdW1lPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yNS44OCwzMkgxMmE0LDQsMCwwLDEtNC00VjExLjQ2TDIuMzEsNS43N2ExLDEsMCwwLDEt'@;
put 'LjIyLTEuMDlBMSwxLDAsMCwxLDMsNC4wNkgyOC44NmExLDEsMCwwLDEsMSwxVjI4QTQsNCwwLDAsMSwyNS44OCwzMlpNNS40Myw2bDQuMjgsNC4zNGEuNzUuNzUsMCwwLDEsLjIxLjYzdjE3QTIuMTMsMi4xMywwLDAsMCwxMiwzMEgyNS44OEEyLjEsMi4xLDAsMCwwLDI4LDI4VjZaIiBjbGFz'@;
put 'cz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNMzMsMTZhMSwxLDAsMCwxLTEtMVY2SDI4Ljg2YS45Mi45MiwwLDAsMS0xLS45LDEsMSwwLDAsMSwxLTFIMzNhMSwxLDAsMCwxLDEsMVYxNUExLDEsMCwwLDEsMzMsMTZaIiBjbGFzcz0iY2xyLWktb3V0'@;
put 'bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMjQsMTFIMThhMSwxLDAsMSwxLDAtMkgyNGExLDEsMCwxLDEsMCwyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+PHBhdGggZD0iTTI0LDE1SDIxYTEsMSwwLDEsMSwwLTJIMjRhMSwx'@;
put 'LDAsMSwxLDAsMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPjxwYXRoIGQ9Ik0yNCwxOUgxOGExLDEsMCwxLDEsMC0ySDI0YTEsMSwwLDEsMSwwLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz48cGF0aCBkPSJN'@;
put 'MjQsMjdIMThhMSwxLDAsMSwxLDAtMkgyNGExLDEsMCwxLDEsMCwyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIC8+PHBhdGggZD0iTTI0LDIzSDIxQTEsMSwwLDEsMSwyMSwyMUgyNEExLDEsMCwxLDEsMjQsMjNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBj'@;
put 'bHItaS1vdXRsaW5lLXBhdGgtNyIgLz4nKSx5LkNsclNoYXBlQ3Jvc3NoYWlycz0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTgsMjlBMTEsMTEsMCwxLDEsMjksMTgsMTEsMTEsMCwwLDEsMTgsMjlaTTE4LDlhOSw5LDAsMSwwLDksOUE5LDksMCwwLDAsMTgsOVoiIGNsYXNzPSJjbHIt'@;
put 'aS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0xOCwyM2E1LDUsMCwxLDEsNS01QTUsNSwwLDAsMSwxOCwyM1ptMC04YTMsMywwLDEsMCwzLDNBMywzLDAsMCwwLDE4LDE1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBh'@;
put 'dGggZD0iTTE4LDlhMSwxLDAsMCwxLTEtMVYyLjhhMSwxLDAsMCwxLDIsMFY4QTEsMSwwLDAsMSwxOCw5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+PHBhdGggZD0iTTE4LDM0YTEsMSwwLDAsMS0xLTFWMjhhMSwxLDAsMCwxLDIsMHY1QTEsMSwwLDAs'@;
put 'MSwxOCwzNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPjxwYXRoIGQ9Ik04LDE5SDMuMTdhMSwxLDAsMCwxLDAtMkg4YTEsMSwwLDAsMSwwLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz48cGF0aCBkPSJNMzMu'@;
put 'MSwxOUgyOGExLDEsMCwwLDEsMC0yaDUuMWExLDEsMCwwLDEsMCwyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIC8+JykseS5DbHJTaGFwZUNpcmNsZT0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTgsMzRBMTYsMTYsMCwxLDEsMzQsMTgsMTYsMTYs'@;
put 'MCwwLDEsMTgsMzRaTTE4LDRBMTQsMTQsMCwxLDAsMzIsMTgsMTQsMTQsMCwwLDAsMTgsNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0xOCwzNEExNiwxNiwwLDEsMSwzNCwxOCwxNiwxNiwwLDAsMSwxOCwzNFoiIGNsYXNzPSJjbHIt'@;
put 'aS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+JykseS5DbHJTaGFwZURvdENpcmNsZT0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTgsMTFhNyw3LDAsMSwxLTcsNyw3LDcsMCwwLDEsNy03IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0'@;
put 'aCBkPSJNMTgsMzRBMTYsMTYsMCwxLDEsMzQsMTgsMTYsMTYsMCwwLDEsMTgsMzRaTTE4LDRBMTQsMTQsMCwxLDAsMzIsMTgsMTQsMTQsMCwwLDAsMTgsNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPicpLHkuQ2xyU2hhcGVCZXRhPSgwLGcuY2xySWNv'@;
put 'blNWRykoJzxwYXRoIGQ9Ik03LjIxLDE0LjA3aDNhMS42MSwxLjYxLDAsMCwxLDEuODEsMS41LDEuNDQsMS40NCwwLDAsMS0uODQsMS4zNCwxLjY3LDEuNjcsMCwwLDEsMS4xLDEuNTMsMS43NSwxLjc1LDAsMCwxLTIsMS42M0g3LjIxWm0yLjcxLDIuNDJjLjQ4LDAsLjgyLS4yOC44Mi0uNjdz'@;
put 'LS4zNC0uNjUtLjgyLS42NUg4LjQ5djEuMzJabS4yLDIuNDhhLjc1Ljc1LDAsMSwwLDAtMS40N0g4LjQ5VjE5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgPHBhdGggZD0iTTE0LjU1LDE1LjIzdjEuMmgzdjEuMTZoLTN2MS4zMmgzLjMzdjEuMTZI'@;
put 'MTMuMjZ2LTZoNC42MnYxLjE2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgPHBhdGggZD0iTTIwLjQxLDE1LjIzSDE4LjU0VjE0LjA3aDV2MS4xNkgyMS43djQuODRIMjAuNDFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBh'@;
put 'dGgtMyIvPlxuICA8cGF0aCBkPSJNMjgsMTkuMTJIMjUuMzJsLS4zOC45NUgyMy41bDIuNDQtNmgxLjQ0bDIuNDUsNkgyOC4zOFpNMjcuNTUsMThsLS44OS0yLjE5TDI1Ljc3LDE4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiLz5cbiAgPHBhdGggZD0iTTgu'@;
put 'MDYsMzBhLjg0Ljg0LDAsMCwxLS4zOC0uMDhBMSwxLDAsMCwxLDcuMDYsMjlWMjVoLTRhMSwxLDAsMCwxLTEtMVYxMGExLDEsMCwwLDEsMS0xaDMwYTEsMSwwLDAsMSwxLDFWMjRhMSwxLDAsMCwxLTEsMUgxMy40OEw4Ljc3LDI5LjcxQTEsMSwwLDAsMSw4LjA2LDMwWm0tNC03aDRhMSwxLDAs'@;
put 'MCwxLDEsMXYyLjU5bDMuMy0zLjNhMSwxLDAsMCwxLC43LS4yOWgxOVYxMWgtMjhaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIvPlxuXG4gIDxwb2x5Z29uIHBvaW50cz0iMjUuOCwxOCAyNy41LDE4IDI2LjcsMTUuOCIgY2xhc3M9ImNsci1pLXNvbGlkIGNs'@;
put 'ci1pLXNvbGlkLXBhdGgtMSIvPlxuXHQ8cGF0aCBkPSJNMTAuNCwxNy41Yy0wLjEsMC0wLjIsMC0wLjMsMEg4LjVWMTlsMS42LDBjMC40LDAuMSwwLjgtMC4yLDAuOS0wLjZDMTEuMSwxOCwxMC44LDE3LjYsMTAuNCwxNy41eiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgt'@;
put 'MiIvPlxuXHQ8cGF0aCBkPSJNMTAuNywxNS44YzAtMC40LTAuMy0wLjctMC44LTAuN0g4LjV2MS4zaDEuNEMxMC40LDE2LjUsMTAuNywxNi4yLDEwLjcsMTUuOHoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiLz5cblx0PHBhdGggZD0iTTMzLjEsOWgtMzBjLTAuNiww'@;
put 'LTEsMC40LTEsMXYxNGMwLDAuNiwwLjQsMSwxLDFoNHY0YzAsMC40LDAuMiwwLjgsMC42LDAuOUM3LjgsMzAsNy45LDMwLDguMSwzMGMwLjMsMCwwLjUtMC4xLDAuNy0wLjNcblx0XHRsNC43LTQuN2gxOS42YzAuNiwwLDEtMC40LDEtMVYxMEMzNC4xLDkuNCwzMy42LDksMzMuMSw5eiBNMTAu'@;
put 'NCwyMC4xYy0wLjEsMC0wLjEsMC0wLjIsMEg3LjJ2LTZoM2MwLjktMC4xLDEuNywwLjUsMS44LDEuNFxuXHRcdGMwLDAsMCwwLjEsMCwwLjFjMCwwLjYtMC4zLDEuMS0wLjgsMS4zYzAuNiwwLjIsMS4xLDAuOCwxLjEsMS41QzEyLjIsMTkuNCwxMS40LDIwLjEsMTAuNCwyMC4xeiBNMTcuOSwx'@;
put 'NS4yaC0zLjN2MS4yaDN2MS4yaC0zdjEuM1xuXHRcdGgzLjN2MS4yaC00LjZ2LTZoNC42VjE1LjJ6IE0yMS43LDIwLjFoLTEuM3YtNC44aC0xLjl2LTEuMmg1djEuMmgtMS44VjIwLjF6IE0yOC40LDIwLjFsLTAuNC0xaC0yLjdsLTAuNCwxaC0xLjRsMi40LTZoMS40bDIuNSw2XG5cdFx0SDI4'@;
put 'LjR6IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC00Ii8+XG4nKSx5LkNsclNoYXBlRmlyc3RBaWQ9KDAsZy5jbHJJY29uU1ZHKSgnXG4gIDxwYXRoIGQ9Ik0zMiw2SDIzLjkxVjQuNUEyLjUsMi41LDAsMCwwLDIxLjQxLDJoLTdhMi41LDIuNSwwLDAsMC0yLjUsMi41VjZI'@;
put 'NEEyLDIsMCwwLDAsMiw4VjI4YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlY4QTIsMiwwLDAsMCwzMiw2Wk0xMy45MSw0LjVhLjUuNSwwLDAsMSwuNS0uNWg3YS41LjUsMCwwLDEsLjUuNVY2aC04Wk00LDI4VjhIMzJWMjhaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRs'@;
put 'aW5lLXBhdGgtMSIvPlxuICA8cGF0aCBkPSJNMjAuMTUsMjUuMkgxNi43NGExLjMsMS4zLDAsMCwxLTEuMy0xLjNWMjEuMmgtMi43YTEuMywxLjMsMCwwLDEtMS4zLTEuM1YxNi41YTEuMywxLjMsMCwwLDEsMS4zLTEuM2gyLjdWMTIuNWExLjMsMS4zLDAsMCwxLDEuMy0xLjNoMy40MWExLjMs'@;
put 'MS4zLDAsMCwxLDEuMjksMS4zdjIuN2gyLjcxYTEuMywxLjMsMCwwLDEsMS4yOSwxLjN2My40YTEuMywxLjMsMCwwLDEtMS4yOSwxLjNIMjEuNDR2Mi43QTEuMywxLjMsMCwwLDEsMjAuMTUsMjUuMlpNMTcsMjMuNmgyLjgxdi00aDRWMTYuOGgtNHYtNEgxN3Y0SDEzdjIuOGg0Wm03LjExLTYu'@;
put 'OFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG5cbiAgPHBhdGggZD0iTTMyLDZIMjMuOTFWNC41QTIuNSwyLjUsMCwwLDAsMjEuNDEsMmgtN2EyLjUsMi41LDAsMCwwLTIuNSwyLjVWNkg0QTIsMiwwLDAsMCwyLDhWMjhhMiwyLDAsMCwwLDIsMkgzMmEy'@;
put 'LDIsMCwwLDAsMi0yVjhBMiwyLDAsMCwwLDMyLDZaTTEzLjkxLDQuNWEuNS41LDAsMCwxLC41LS41aDdhLjUuNSwwLDAsMSwuNS41VjZoLThaTTI0LjY0LDE5LjlhLjUuNSwwLDAsMS0uNS41aC0zLjV2My41YS41LjUsMCwwLDEtLjUuNWgtMy40YS41LjUsMCwwLDEtLjUtLjVWMjAuNGgtMy41'@;
put 'YS41LjUsMCwwLDEtLjUtLjVWMTYuNWEuNS41LDAsMCwxLC41LS41aDMuNVYxMi41YS41LjUsMCwwLDEsLjUtLjVoMy40YS41LjUsMCwwLDEsLjUuNVYxNmgzLjVhLjUuNSwwLDAsMSwuNS41WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAnKSx5LkNsclNo'@;
put 'YXBlQ29sb3JQYWxldHRlPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yMS41NCwyMy4wNWEzLjIyLDMuMjIsMCwwLDEtMy0xLjc3QTMuMDUsMy4wNSwwLDAsMSwxOC41LDE5YTMuNzQsMy43NCwwLDAsMSwxLjk1LTIuMDZBMy40LDMuNCwwLDAsMSwyNSwxOC4zYTMsMywwLDAsMSwuMDgs'@;
put 'Mi4zMiwzLjY5LDMuNjksMCwwLDEtMiwyLjA3QTMuODUsMy44NSwwLDAsMSwyMS41NCwyMy4wNVptLjU0LTQuOTFhMi40MSwyLjQxLDAsMCwwLTEsLjIxaDBBMi4xMywyLjEzLDAsMCwwLDIwLDE5LjUxYTEuMzcsMS4zNywwLDAsMCwwLDEuMDksMS44MSwxLjgxLDAsMCwwLDIuNDUuNjMsMi4x'@;
put 'LDIuMSwwLDAsMCwxLjEyLTEuMTUsMS40LDEuNCwwLDAsMCwwLTEuMUExLjU5LDEuNTksMCwwLDAsMjIuMDgsMTguMTRabS0xLjI5LS41MmgwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgPHBhdGggZD0iTTE2LjE5LDMzLjg3QTEzLjcyLDEzLjcy'@;
put 'LDAsMCwxLDYuNCwzMCwxMy44NiwxMy44NiwwLDAsMSwyLDIwYzAtNC40LDItOC44NCw1LjY4LTEyLjVhMTguMiwxOC4yLDAsMCwxLDEzLjEtNS4zN2guMTJjMy4zMywwLDYuODUsMS40OSw3LjI0LDQuNzMuMjEsMS43Ny0uNTksMy40Ny0xLjI5LDUtLjU1LDEuMTctMS4xMSwyLjM5LS43Miwy'@;
put 'LjgxczEsLjEyLDIuMDktLjJhNi4yNyw2LjI3LDAsMCwxLDMuMzgtLjM2LDMsMywwLDAsMSwxLjg3LDEuNTZjLjk0LDEuODMuNDcsNC42Ny0uMjMsNi41NGgwQTE3LjM4LDE3LjM4LDAsMCwxLDI5LDI4Ljc0LDE5LjQzLDE5LjQzLDAsMCwxLDE2LjE5LDMzLjg3Wk0yMC43OCw0LjE2QTE2LjIy'@;
put 'LDE2LjIyLDAsMCwwLDkuMDksOUM1Ljc5LDEyLjIzLDQsMTYuMTYsNCwyMEExMS45MiwxMS45MiwwLDAsMCw3LjgsMjguNmM1LjM4LDUuMjUsMTQuNjIsMy41NSwxOS44Ny0xLjMzYTE1LjUyLDE1LjUyLDAsMCwwLDMuNy01Ljc1aDBjLjctMS45Ljg0LTMuOTIuMzItNC45MmExLDEsMCwwLDAt'@;
put 'LjYxLS41NSw0Ljg2LDQuODYsMCwwLDAtMi4yOS4zNWMtMS4zMS4zOS0zLC44OS00LjEyLS4zNS0xLjMyLTEuNC0uNDYtMy4yNS4zNy01YTcuOTMsNy45MywwLDAsMCwxLjExLTMuOWMtLjI0LTItMi44MS0yLjk1LTUuMjYtM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUt'@;
put 'cGF0aC0yIi8+XG4gIDxwYXRoIGQ9Ik0yMy44NywyNi42NUEyLjU5LDIuNTksMCwwLDAsMjIuMzUsMjVMMjIsMjQuOWwtLjQ2LDEuNTMuMTYsMGExLDEsMCwwLDEsLjYuNjFjLjE3LjYtLjQxLDEuMzEtMS4yNiwxLjU1cy0xLjcxLS4wNy0xLjg4LS42NmwtMS41NC40M2gwYTIuODMsMi44Myww'@;
put 'LDAsMCwyLjg0LDEuOTEsNCw0LDAsMCwwLDEtLjE0QTMsMywwLDAsMCwyMy44NywyNi42NVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIi8+XG4gIDxwYXRoIGQ9Ik0xNS4wNywyNS41OWgwYTIuNzMsMi43MywwLDAsMC0yLjI0LTEuODRsLS4yNywxLjU4YTEu'@;
put 'MTIsMS4xMiwwLDAsMSwxLC43Yy4xNy41OS0uNDEsMS4zLTEuMjYsMS41NEExLjkyLDEuOTIsMCwwLDEsMTEsMjcuNTJhMSwxLDAsMCwxLS42LS42MXMwLS4wOSwwLS4xM2wtMS41OC4xNmEyLDIsMCwwLDAsLjA2LjQxQTIuNTksMi41OSwwLDAsMCwxMC4zNywyOWEzLjM2LDMuMzYsMCwwLDAs'@;
put 'MS4zMS4yNSwzLjcsMy43LDAsMCwwLDEtLjE0QTMsMywwLDAsMCwxNS4wNywyNS41OVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00Ii8+XG4gIDxwYXRoIGQ9Ik0xMC43OCwxOS4xN2EyLjU5LDIuNTksMCwwLDAtMS41Mi0xLjY1LDIuOTEsMi45MSwwLDAsMC0u'@;
put 'NS0uMTZsLS4zNywxLjU2YTEuMjEsMS4yMSwwLDAsMSwuMjUuMDgsMSwxLDAsMCwxLC42LjZjLjE3LjYtLjQxLDEuMzEtMS4yNiwxLjU1cy0xLjcxLS4wNi0xLjg4LS42NmEuODYuODYsMCwwLDEsMC0uMzlsLTEuNTYtLjM0YTIuNCwyLjQsMCwwLDAsMCwxLjE2QTIuODMsMi44MywwLDAsMCw3'@;
put 'LjQsMjIuODNhNCw0LDAsMCwwLDEtLjE0QTMsMywwLDAsMCwxMC43OCwxOS4xN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01Ii8+XG4gIDxwYXRoIGQ9Ik0xMy40NSwxMS40YTIuNTksMi41OSwwLDAsMC0xLjUyLTEuNjUsMS4xNywxLjE3LDAsMCwwLS4yLS4w'@;
put 'NmwtLjUyLDEuNTFhLjM4LjM4LDAsMCwxLC4xLDAsMSwxLDAsMCwxLC42LjZjLjE3LjYtLjQxLDEuMzEtMS4yNiwxLjU1YTIuMDYsMi4wNiwwLDAsMS0xLjI4LS4wNSwxLDEsMCwwLDEtLjYtLjYxLjg1Ljg1LDAsMCwxLDAtLjMybC0xLjU4LS4xOWEyLjMsMi4zLDAsMCwwLC4wNi45NEEyLjU2'@;
put 'LDIuNTYsMCwwLDAsOC43NSwxNC44YTMuMzcsMy4zNywwLDAsMCwxLjMxLjI2LDQsNCwwLDAsMCwxLS4xNEEzLDMsMCwwLDAsMTMuNDUsMTEuNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02Ii8+XG4gIDxwYXRoIGQ9Ik0yMSw2Ljc4YTIuNTYsMi41NiwwLDAs'@;
put 'MC0xLjUyLTEuNjVsLS4zLS4xTDE4LjcsNi41NmwuMTUsMGExLDEsMCwwLDEsLjYuNjFjLjE3LjYtLjQxLDEuMy0xLjI2LDEuNTRzLTEuNzEtLjA2LTEuODgtLjY1YS45LjksMCwwLDEsLjA2LS41OEwxNC44OSw2LjlhMi40NywyLjQ3LDAsMCwwLS4xMiwxLjYzLDIuODQsMi44NCwwLDAsMCwy'@;
put 'Ljg0LDEuOTEsMy41OCwzLjU4LDAsMCwwLDEtLjE1QTMsMywwLDAsMCwyMSw2Ljc4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTciLz5cblxuICA8cGF0aCBkPSJNMzIuMjMsMTQuODljLTIuMS0uNTYtNC45MywxLjgtNi4zNC4zLTEuNzEtMS44MiwyLjI3LTUu'@;
put 'NTMsMS44Ni04LjkyLS4zMy0yLjc4LTMuNTEtNC4wOC02LjY2LTQuMUExOC41LDE4LjUsMCwwLDAsNy43NCw3LjU5Yy02LjY0LDYuNTktOC4wNywxNi0xLjM3LDIyLjQ4LDYuMjEsNiwxNi42MSw0LjIzLDIyLjY3LTEuNGExNy43MywxNy43MywwLDAsMCw0LjIyLTYuNTRDMzQuMzQsMTkuMjMs'@;
put 'MzQuNDQsMTUuNDksMzIuMjMsMTQuODlaTTkuNCwxMC41N2EyLjIzLDIuMjMsMCwwLDEsMi44NywxLjIxLDIuMjIsMi4yMiwwLDAsMS0xLjgxLDIuNTNBMi4yMiwyLjIyLDAsMCwxLDcuNTksMTMuMSwyLjIzLDIuMjMsMCwwLDEsOS40LDEwLjU3Wk01LjA3LDIwLjgyYTIuMjIsMi4yMiwwLDAs'@;
put 'MSwxLjgyLTIuNTNBMi4yMiwyLjIyLDAsMCwxLDkuNzUsMTkuNSwyLjIzLDIuMjMsMCwwLDEsNy45NCwyMiwyLjI0LDIuMjQsMCwwLDEsNS4wNywyMC44MlptNyw4LjMzYTIuMjIsMi4yMiwwLDAsMS0yLjg3LTEuMjFBMi4yMywyLjIzLDAsMCwxLDExLDI1LjQxYTIuMjMsMi4yMywwLDAsMSwy'@;
put 'Ljg3LDEuMjFBMi4yMiwyLjIyLDAsMCwxLDEyLDI5LjE1Wk0xNSw4LjI2YTIuMjMsMi4yMywwLDAsMSwxLjgxLTIuNTMsMi4yNCwyLjI0LDAsMCwxLDIuODcsMS4yMSwyLjIyLDIuMjIsMCwwLDEtMS44MiwyLjUzQTIuMjEsMi4yMSwwLDAsMSwxNSw4LjI2Wm01LjgyLDIyLjE5YTIuMjIsMi4y'@;
put 'MiwwLDAsMS0yLjg3LTEuMjEsMi4yMywyLjIzLDAsMCwxLDEuODEtMi41MywyLjI0LDIuMjQsMCwwLDEsMi44NywxLjIxQTIuMjIsMi4yMiwwLDAsMSwyMC43OCwzMC40NVptNS0xMC40NmEzLjIsMy4yLDAsMCwxLTEuNjksMS43NiwzLjUzLDMuNTMsMCwwLDEtMS40LjMsMi43OCwyLjc4LDAs'@;
put 'MCwxLTIuNTYtMS41LDIuNDksMi40OSwwLDAsMS0uMDctMiwzLjIsMy4yLDAsMCwxLDEuNjktMS43NiwzLDMsMCwwLDEsNCwxLjJBMi41NCwyLjU0LDAsMCwxLDI1Ljc5LDIwWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPicpLHkuRXNzZW50aWFsU2hhcGVzPXsi'@;
put 'YWRkLXRleHQiOnkuQ2xyU2hhcGVBZGRUZXh0LCJhbGFybS1vZmYiOnkuQ2xyU2hhcGVBbGFybU9mZixwaW5ib2FyZDp5LkNsclNoYXBlUGluYm9hcmQsbmV3OnkuQ2xyU2hhcGVOZXcsImJ1YmJsZS1leGNsYW1hdGlvbiI6eS5DbHJTaGFwZUJ1YmJsZUV4Y2xhbWF0aW9uLCJncmlkLXZpZXci'@;
put 'OnkuQ2xyU2hhcGVHcmlkVmlldywiY3Vyc29yLWFycm93Ijp5LkNsclNoYXBlQ3Vyc29yQXJyb3csImN1cnNvci1oYW5kIjp5LkNsclNoYXBlQ3Vyc29ySGFuZCwiY3Vyc29yLWhhbmQtY2xpY2siOnkuQ2xyU2hhcGVDdXJzb3JIYW5kQ2xpY2ssImN1cnNvci1oYW5kLWdyYWIiOnkuQ2xyU2hh'@;
put 'cGVDdXJzb3JIYW5kR3JhYiwiY3Vyc29yLWhhbmQtb3BlbiI6eS5DbHJTaGFwZUN1cnNvckhhbmRPcGVuLCJjdXJzb3ItbW92ZSI6eS5DbHJTaGFwZUN1cnNvck1vdmUsImZpcnN0LWFpZCI6eS5DbHJTaGFwZUZpcnN0QWlkLHJlc2l6ZTp5LkNsclNoYXBlUmVzaXplLG9iamVjdHM6eS5DbHJT'@;
put 'aGFwZU9iamVjdHMsYm9vazp5LkNsclNoYXBlQm9vayxhc3Rlcmlzazp5LkNsclNoYXBlQXN0ZXJpc2ssYnVnOnkuQ2xyU2hhcGVCdWcsc2Npc3NvcnM6eS5DbHJTaGFwZVNjaXNzb3JzLHRoZXJtb21ldGVyOnkuQ2xyU2hhcGVUaGVybW9tZXRlcixwZW5jaWw6eS5DbHJTaGFwZVBlbmNpbCxu'@;
put 'b3RlOnkuQ2xyU2hhcGVOb3RlLHJlZnJlc2g6eS5DbHJTaGFwZVJlZnJlc2gsc3luYzp5LkNsclNoYXBlU3luYywidmlldy1saXN0Ijp5LkNsclNoYXBlVmlld0xpc3QsInZpZXctY2FyZHMiOnkuQ2xyU2hhcGVWaWV3Q2FyZHMsInRyZWUtdmlldyI6eS5DbHJTaGFwZVRyZWVWaWV3LGxpZ2h0'@;
put 'YnVsYjp5LkNsclNoYXBlTGlnaHRidWxiLGRvd25sb2FkOnkuQ2xyU2hhcGVEb3dubG9hZCx1cGxvYWQ6eS5DbHJTaGFwZVVwbG9hZCxsb2NrOnkuQ2xyU2hhcGVMb2NrLHVubG9jazp5LkNsclNoYXBlVW5sb2NrLHVzZXJzOnkuQ2xyU2hhcGVVc2VycywicG9wLW91dCI6eS5DbHJTaGFwZVBv'@;
put 'cE91dCxmaWx0ZXI6eS5DbHJTaGFwZUZpbHRlcixwaW46eS5DbHJTaGFwZVBpbixmaWxlOnkuQ2xyU2hhcGVGaWxlLHBsdXM6eS5DbHJTaGFwZVBsdXMsbWludXM6eS5DbHJTaGFwZU1pbnVzLCJtaW51cy1jaXJjbGUiOnkuQ2xyU2hhcGVNaW51c0NpcmNsZSwicGx1cy1jaXJjbGUiOnkuQ2xy'@;
put 'U2hhcGVQbHVzQ2lyY2xlLGJhbjp5LkNsclNoYXBlQmFuLCJ0aW1lcy1jaXJjbGUiOnkuQ2xyU2hhcGVUaW1lc0NpcmNsZSx0cmFzaDp5LkNsclNoYXBlVHJhc2gsY2lyY2xlOnkuQ2xyU2hhcGVDaXJjbGUsdGFnOnkuQ2xyU2hhcGVUYWcsdGFnczp5LkNsclNoYXBlVGFncyxoaXN0b3J5Onku'@;
put 'Q2xyU2hhcGVIaXN0b3J5LGNsb2NrOnkuQ2xyU2hhcGVDbG9jaywiYWxhcm0tY2xvY2siOnkuQ2xyU2hhcGVBbGFybUNsb2NrLGFycm93OkIuQ2xyU2hhcGVBcnJvdywiY2lyY2xlLWFycm93Ijp5LkNsclNoYXBlQ2lyY2xlQXJyb3csImNoaWxkLWFycm93Ijp5LkNsclNoYXBlQ2hpbGRBcnJv'@;
put 'dyxjb3B5OnkuQ2xyU2hhcGVDb3B5LGhlbHA6eS5DbHJTaGFwZUhlbHAsbG9naW46eS5DbHJTaGFwZUxvZ2luLGxvZ291dDp5LkNsclNoYXBlTG9nb3V0LHByaW50ZXI6eS5DbHJTaGFwZVByaW50ZXIsd29ybGQ6eS5DbHJTaGFwZVdvcmxkLHNsaWRlcjp5LkNsclNoYXBlU2xpZGVyLGNsaXBi'@;
put 'b2FyZDp5LkNsclNoYXBlQ2xpcGJvYXJkLGZpcmV3YWxsOnkuQ2xyU2hhcGVGaXJld2FsbCxsaXN0OnkuQ2xyU2hhcGVMaXN0LHJlZG86eS5DbHJTaGFwZVJlZG8sdW5kbzp5LkNsclNoYXBlVW5kbyxzY3JvbGw6eS5DbHJTaGFwZVNjcm9sbCwiZmlsZS1zZXR0aW5ncyI6eS5DbHJTaGFwZUZp'@;
put 'bGVTZXR0aW5ncywidHdvLXdheS1hcnJvd3MiOnkuQ2xyU2hhcGVUd29XYXlBcnJvd3Msc3dpdGNoOnkuQ2xyU2hhcGVTd2l0Y2gsdG9vbHM6eS5DbHJTaGFwZVRvb2xzLCJ3aW5kb3ctY2xvc2UiOnkuQ2xyU2hhcGVXaW5kb3dDbG9zZSwid2luZG93LW1heCI6eS5DbHJTaGFwZVdpbmRvd01h'@;
put 'eCwid2luZG93LW1pbiI6eS5DbHJTaGFwZVdpbmRvd01pbiwid2luZG93LXJlc3RvcmUiOnkuQ2xyU2hhcGVXaW5kb3dSZXN0b3JlLCJ6b29tLWluIjp5LkNsclNoYXBlWm9vbUluLCJ6b29tLW91dCI6eS5DbHJTaGFwZVpvb21PdXQsa2V5OnkuQ2xyU2hhcGVLZXksbGlicmFyeTp5LkNsclNo'@;
put 'YXBlTGlicmFyeSxib2x0OnkuQ2xyU2hhcGVCb2x0LHdyZW5jaDp5LkNsclNoYXBlV3JlbmNoLGJ1bGxzZXllOnkuQ2xyU2hhcGVCdWxsc2V5ZSx0YXJnZXQ6eS5DbHJTaGFwZVRhcmdldCxmbGFtZTp5LkNsclNoYXBlRmxhbWUsaG91cmdsYXNzOnkuQ2xyU2hhcGVIb3VyZ2xhc3MsIm5vLWFj'@;
put 'Y2VzcyI6eS5DbHJTaGFwZU5vQWNjZXNzLG9yZ2FuaXphdGlvbjp5LkNsclNoYXBlT3JnYW5pemF0aW9uLGJhbGFuY2U6eS5DbHJTaGFwZUJhbGFuY2UsImlkLWJhZGdlIjp5LkNsclNoYXBlSWRCYWRnZSxyZXBlYXQ6eS5DbHJTaGFwZVJlcGVhdCwiZmlsZS1ncm91cCI6eS5DbHJTaGFwZUZp'@;
put 'bGVHcm91cCxwYXBlcmNsaXA6eS5DbHJTaGFwZVBhcGVyY2xpcCxzaHJpbms6eS5DbHJTaGFwZVNocmluaywiYWNjZXNzaWJpbGl0eS0xIjp5LkNsclNoYXBlQWNjZXNzaWJpbGl0eTEsImFjY2Vzc2liaWxpdHktMiI6eS5DbHJTaGFwZUFjY2Vzc2liaWxpdHkyLCJzb3J0LWJ5Ijp5LkNsclNo'@;
put 'YXBlU29ydEJ5LCJjb2xsYXBzZS1jYXJkIjp5LkNsclNoYXBlQ29sbGFwc2VDYXJkLCJleHBhbmQtY2FyZCI6eS5DbHJTaGFwZUV4cGFuZENhcmQsYnJpZWZjYXNlOnkuQ2xyU2hhcGVCcmllZmNhc2UsImNvbG9yLXBpY2tlciI6eS5DbHJTaGFwZUNvbG9yUGlja2VyLCJjb3B5LXRvLWNsaXBi'@;
put 'b2FyZCI6eS5DbHJTaGFwZUNvcHlUb0NsaXBib2FyZCwiZmlsdGVyLTIiOnkuQ2xyU2hhcGVGaWx0ZXIyLCJkcmFnLWhhbmRsZSI6eS5DbHJTaGFwZURyYWdIYW5kbGUsbW9vbjp5LkNsclNoYXBlTW9vbixzdW46eS5DbHJTaGFwZVN1bix3YW5kOnkuQ2xyU2hhcGVXYW5kLGNsb25lOnkuQ2xy'@;
put 'U2hhcGVDbG9uZSxkZXRhaWxzOnkuQ2xyU2hhcGVEZXRhaWxzLCJkcmFnLWhhbmRsZS1jb3JuZXIiOnkuQ2xyU2hhcGVEcmFnSGFuZGxlQ29ybmVyLGVyYXNlcjp5LkNsclNoYXBlRXJhc2VyLGxhbmRzY2FwZTp5LkNsclNoYXBlTGFuZHNjYXBlLHBhc3RlOnkuQ2xyU2hhcGVQYXN0ZSxwb3J0'@;
put 'cmFpdDp5LkNsclNoYXBlUG9ydHJhaXQsImZpbGUtemlwIjp5LkNsclNoYXBlRmlsZVppcCwiZmlsdGVyLW9mZiI6eS5DbHJTaGFwZUZpbHRlck9mZixyZWN5Y2xlOnkuQ2xyU2hhcGVSZWN5Y2xlLHRyZWU6eS5DbHJTaGFwZVRyZWUsZmlzaDp5LkNsclNoYXBlRmlzaCxmb3JtOnkuQ2xyU2hh'@;
put 'cGVGb3JtLGZ1ZWw6eS5DbHJTaGFwZUZ1ZWwsc25vd2ZsYWtlOnkuQ2xyU2hhcGVTbm93Zmxha2UsdGFibGU6eS5DbHJTaGFwZVRhYmxlLCJkb3QtY2lyY2xlIjp5LkNsclNoYXBlRG90Q2lyY2xlLHZvbHVtZTp5LkNsclNoYXBlVm9sdW1lLGNyb3NzaGFpcnM6eS5DbHJTaGFwZUNyb3NzaGFp'@;
put 'cnMsYmV0YTp5LkNsclNoYXBlQmV0YSwiY29sb3ItcGFsZXR0ZSI6eS5DbHJTaGFwZUNvbG9yUGFsZXR0ZX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KHkuRXNzZW50aWFsU2hhcGVzLCJlZGl0IiwoMCxfLmRlc2NyaXB0b3JDb25maWcpKHkuRXNzZW50aWFsU2hhcGVzLnBlbmNpbCkpLE9iamVj'@;
put 'dC5kZWZpbmVQcm9wZXJ0eSh5LkVzc2VudGlhbFNoYXBlcywibm90ZS1lZGl0IiwoMCxfLmRlc2NyaXB0b3JDb25maWcpKHkuRXNzZW50aWFsU2hhcGVzLm5vdGUpKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoeS5Fc3NlbnRpYWxTaGFwZXMsImdyb3VwIiwoMCxfLmRlc2NyaXB0b3JDb25maWcp'@;
put 'KHkuRXNzZW50aWFsU2hhcGVzLnVzZXJzKSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHkuRXNzZW50aWFsU2hhcGVzLCJkb2N1bWVudCIsKDAsXy5kZXNjcmlwdG9yQ29uZmlnKSh5LkVzc2VudGlhbFNoYXBlcy5maWxlKSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHkuRXNzZW50aWFsU2hhcGVz'@;
put 'LCJhZGQiLCgwLF8uZGVzY3JpcHRvckNvbmZpZykoeS5Fc3NlbnRpYWxTaGFwZXMucGx1cykpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh5LkVzc2VudGlhbFNoYXBlcywiY2FuY2VsIiwoMCxfLmRlc2NyaXB0b3JDb25maWcpKHkuRXNzZW50aWFsU2hhcGVzLmJhbikpLE9iamVjdC5kZWZpbmVQ'@;
put 'cm9wZXJ0eSh5LkVzc2VudGlhbFNoYXBlcywicmVtb3ZlIiwoMCxfLmRlc2NyaXB0b3JDb25maWcpKHkuRXNzZW50aWFsU2hhcGVzWyJ0aW1lcy1jaXJjbGUiXSkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh5LkVzc2VudGlhbFNoYXBlcywic2lnbi1pbiIsKDAsXy5kZXNjcmlwdG9yQ29uZmln'@;
put 'KSh5LkVzc2VudGlhbFNoYXBlcy5sb2dpbikpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh5LkVzc2VudGlhbFNoYXBlcywic2lnbi1vdXQiLCgwLF8uZGVzY3JpcHRvckNvbmZpZykoeS5Fc3NlbnRpYWxTaGFwZXMubG9nb3V0KSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHkuRXNzZW50aWFsU2hh'@;
put 'cGVzLCJsaWdodG5pbmciLCgwLF8uZGVzY3JpcHRvckNvbmZpZykoeS5Fc3NlbnRpYWxTaGFwZXMuYm9sdCkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh5LkVzc2VudGlhbFNoYXBlcywiZmxvdy1jaGFydCIsKDAsXy5kZXNjcmlwdG9yQ29uZmlnKSh5LkVzc2VudGlhbFNoYXBlcy5vcmdhbml6'@;
put 'YXRpb24pKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoeS5Fc3NlbnRpYWxTaGFwZXMsImFsZXJ0IiwoMCxfLmRlc2NyaXB0b3JDb25maWcpKHkuRXNzZW50aWFsU2hhcGVzWyJidWJibGUtZXhjbGFtYXRpb24iXSkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh5LkVzc2VudGlhbFNoYXBlcywicGlu'@;
put 'bmVkIiwoMCxfLmRlc2NyaXB0b3JDb25maWcpKHkuRXNzZW50aWFsU2hhcGVzLnBpbmJvYXJkKSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHkuRXNzZW50aWFsU2hhcGVzLCJhdHRhY2htZW50IiwoMCxfLmRlc2NyaXB0b3JDb25maWcpKHkuRXNzZW50aWFsU2hhcGVzLnBhcGVyY2xpcCkpLE9i'@;
put 'amVjdC5kZWZpbmVQcm9wZXJ0eSh5LkVzc2VudGlhbFNoYXBlcywiYXR0YWNobWVudCIsKDAsXy5kZXNjcmlwdG9yQ29uZmlnKSh5LkVzc2VudGlhbFNoYXBlcy5wYXBlcmNsaXApKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoeS5Fc3NlbnRpYWxTaGFwZXMsInJlc2l6ZS1kb3duIiwoMCxfLmRl'@;
put 'c2NyaXB0b3JDb25maWcpKHkuRXNzZW50aWFsU2hhcGVzLnNocmluaykpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh5LkVzc2VudGlhbFNoYXBlcywicmVzaXplLXVwIiwoMCxfLmRlc2NyaXB0b3JDb25maWcpKHkuRXNzZW50aWFsU2hhcGVzLnJlc2l6ZSkpLHR5cGVvZiB3aW5kb3c8InUiJiZ3'@;
put 'aW5kb3cuaGFzT3duUHJvcGVydHkoIkNsYXJpdHlJY29ucyIpJiZ3aW5kb3cuQ2xhcml0eUljb25zLmFkZCh5LkVzc2VudGlhbFNoYXBlcyl9LCIuL3Byb2plY3RzL2ljb25zL3NyYy9zaGFwZXMvbWVkaWEtc2hhcGVzLnRzIjoKLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq'@;
put 'KioqKioqKioqKioqKioqKioqISpcCiAgICAgICAgICAgICAgICAgICEqKiogLi9wcm9qZWN0cy9pY29ucy9zcmMvc2hhcGVzL21lZGlhLXNoYXBlcy50cyAqKiohCiAgICAgICAgICAgICAgICAgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiov'@;
put 'Ci8qISBubyBzdGF0aWMgZXhwb3J0cyBmb3VuZCAqL2Z1bmN0aW9uKFgseSxJKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHksIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHkuTWVkaWFTaGFwZXM9eS5DbHJTaGFwZU1pY3JvcGhvbmVNdXRlPXkuQ2xyU2hhcGVNaWNyb3Bo'@;
put 'b25lPXkuQ2xyU2hhcGVWaWRlb0dhbGxlcnk9eS5DbHJTaGFwZVJlcGxheU9uZT15LkNsclNoYXBlUmVwbGF5QWxsPXkuQ2xyU2hhcGVJbWFnZUdhbGxlcnk9eS5DbHJTaGFwZU11c2ljTm90ZT15LkNsclNoYXBlRmlsbVN0cmlwPXkuQ2xyU2hhcGVIZWFkcGhvbmVzPXkuQ2xyU2hhcGVWb2x1'@;
put 'bWVNdXRlPXkuQ2xyU2hhcGVWb2x1bWVVcD15LkNsclNoYXBlVm9sdW1lRG93bj15LkNsclNoYXBlU2h1ZmZsZT15LkNsclNoYXBlVmlkZW9DYW1lcmE9eS5DbHJTaGFwZUNhbWVyYT15LkNsclNoYXBlRmFzdEZvcndhcmQ9eS5DbHJTaGFwZVJld2luZD15LkNsclNoYXBlUG93ZXI9eS5DbHJT'@;
put 'aGFwZVN0b3A9eS5DbHJTaGFwZVN0ZXBGb3J3YXJkPXkuQ2xyU2hhcGVQYXVzZT15LkNsclNoYXBlUGxheT12b2lkIDA7dmFyIF89SSgKLyohIC4uL3V0aWxzL3N2Zy10YWctZ2VuZXJhdG9yICovCiIuL3Byb2plY3RzL2ljb25zL3NyYy91dGlscy9zdmctdGFnLWdlbmVyYXRvci50cyIpO3ku'@;
put 'Q2xyU2hhcGVQbGF5PSgwLF8uY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNOC4wNywzMS42QTIuMDcsMi4wNywwLDAsMSw2LDI5LjUzVjYuMzJBMi4wNywyLjA3LDAsMCwxLDksNC40N0wzMi4yMSwxNi4wOGEyLjA3LDIu'@;
put 'MDcsMCwwLDEsMCwzLjdMOSwzMS4zOEEyLjA2LDIuMDYsMCwwLDEsOC4wNywzMS42Wm0wLTI1LjM0TDgsNi4zMlYyOS41M2wuMS4wNkwzMS4zMSwxOGEuMDYuMDYsMCwwLDAsMC0uMDZaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBh'@;
put 'dGgtMSIgZD0iTTMyLjE2LDE2LjA4LDguOTQsNC40N0EyLjA3LDIuMDcsMCwwLDAsNiw2LjMyVjI5LjUzYTIuMDYsMi4wNiwwLDAsMCwzLDEuODVMMzIuMTYsMTkuNzdhMi4wNywyLjA3LDAsMCwwLDAtMy43WiIvPicpLHkuQ2xyU2hhcGVQYXVzZT0oMCxfLmNsckljb25TVkcpKCc8cGF0aCBj'@;
put 'bGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTEyLjkzLDMySDYuMDdBMi4wNywyLjA3LDAsMCwxLDQsMjkuOTNWNi4wN0EyLjA3LDIuMDcsMCwwLDEsNi4wNyw0aDYuODdBMi4wNywyLjA3LDAsMCwxLDE1LDYuMDdWMjkuOTNBMi4wNywyLjA3LDAsMCwxLDEy'@;
put 'LjkzLDMyWk0xMyw2SDZWMzBoN1oiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTI5LjkzLDMySDIzLjA3QTIuMDcsMi4wNywwLDAsMSwyMSwyOS45M1Y2LjA3QTIuMDcsMi4wNywwLDAsMSwyMy4wNyw0aDYu'@;
put 'ODdBMi4wNywyLjA3LDAsMCwxLDMyLDYuMDdWMjkuOTNBMi4wNywyLjA3LDAsMCwxLDI5LjkzLDMyWk0zMCw2SDIzVjMwaDdaIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgeD0iMy45NSIgeT0iNCIgd2lkdGg9IjExIiBo'@;
put 'ZWlnaHQ9IjI4IiByeD0iMi4wNyIgcnk9IjIuMDciLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiB4PSIyMC45NSIgeT0iNCIgd2lkdGg9IjExIiBoZWlnaHQ9IjI4IiByeD0iMi4wNyIgcnk9IjIuMDciLz4nKSx5LkNsclNo'@;
put 'YXBlU3RlcEZvcndhcmQ9KDAsXy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik01LDMyLjIzYTIsMiwwLDAsMS0yLTJWNS43N0EyLDIsMCwwLDEsNi4xNyw0LjE0TDIzLjIzLDE2LjM4YTIsMiwwLDAsMSwwLDMuMjVoMEw2'@;
put 'LjE3LDMxLjg2QTIsMiwwLDAsMSw1LDMyLjIzWk01LDUuNzdWMzAuMjNMMjIuMDcsMThaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0zMSwzMkgyOGEyLDIsMCwwLDEtMi0yVjZhMiwyLDAsMCwxLDItMmgz'@;
put 'YTIsMiwwLDAsMSwyLDJWMzBBMiwyLDAsMCwxLDMxLDMyWk0yOCw2VjMwaDNWNloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNNSwzMS45YTIsMiwwLDAsMS0yLTJWNS40NEEyLDIsMCwwLDEsNi4xMiwzLjgxTDIz'@;
put 'LjE4LDE2YTIsMiwwLDAsMSwwLDMuMjVoMEw2LjEyLDMxLjUyQTIsMiwwLDAsMSw1LDMxLjlaIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgeD0iMjUuOTUiIHk9IjMuNjciIHdpZHRoPSI3IiBoZWlnaHQ9IjI4IiByeD0i'@;
put 'MiIgcnk9IjIiLz4nKSx5LkNsclNoYXBlU3RvcD0oMCxfLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMwLDMySDZhMiwyLDAsMCwxLTItMlY2QTIsMiwwLDAsMSw2LDRIMzBhMiwyLDAsMCwxLDIsMlYzMEEyLDIsMCww'@;
put 'LDEsMzAsMzJaTTYsNlYzMEgzMFY2WiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIHg9IjMuOTYiIHk9IjQiIHdpZHRoPSIyNy45OSIgaGVpZ2h0PSIyOCIgcng9IjIiIHJ5PSIyIi8+JykseS5DbHJTaGFwZVBvd2VyPSgw'@;
put 'LF8uY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMTgsMjFhMSwxLDAsMCwxLTEtMVY0YTEsMSwwLDAsMSwyLDBWMjBBMSwxLDAsMCwxLDE4LDIxWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1v'@;
put 'dXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMTgsMzQuMTVhMTUsMTUsMCwwLDEtNy41Mi0yOCwxLDEsMCwwLDEsMSwxLjczLDEzLDEzLDAsMSwwLDEzLDAsMSwxLDAsMSwxLDEtMS43MywxNSwxNSwwLDAsMS03LjUyLDI4WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNz'@;
put 'PSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiBkPSJNMTgsMjFhMSwxLDAsMCwwLDEtMVY0YTEsMSwwLDAsMC0yLDBWMjBBMSwxLDAsMCwwLDE4LDIxWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1h'@;
put 'bGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIiBkPSJNMzIuNTEsMTUuNEgzMC40NGExMywxMywwLDEsMS0xOS03LjUsMSwxLDAsMCwwLTEtMS43M0ExNSwxNSwwLDEsMCwzMywxOS4xNSwxNC45LDE0LjksMCwwLDAsMzIuNTEsMTUuNFoiLz5cbiAgICAgICAgICAgICAgICA8'@;
put 'cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwx'@;
put 'LjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgZD0iTTE4LDIxYTEsMSwwLDAsMS0xLTFWNGExLDEsMCwwLDEsMiwwVjIwQTEsMSww'@;
put 'LDAsMSwxOCwyMVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiIGQ9Ik0zMCwxMy41bC0uMzEsMEExMywxMywwLDEsMSwxMS40OCw3LjlhMSwxLDAsMCwwLTEtMS43MywxNSwxNSwwLDEs'@;
put 'MCwyMS4zMSw3LjFBNy40OSw3LjQ5LDAsMCwxLDMwLDEzLjVaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAgICAg'@;
put 'ICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm0uMDYsMTcuNjhhMS4yOCwxLjI4LDAsMCwxLTEuMjktMS4yOFY4LjY1YTEuMjksMS4yOSwwLDAsMSwyLjU4LDBW'@;
put 'MTguNEExLjI4LDEuMjgsMCwwLDEsMTguMDYsMTkuNjhaTTE4LDI3Ljc5QTkuODgsOS44OCwwLDAsMSwxMi4xNyw5Ljg1YTEuNCwxLjQsMCwwLDEsMS45NC4zMSwxLjM3LDEuMzcsMCwwLDEtLjMxLDEuOTIsNy4xOCw3LjE4LDAsMSwwLDExLjQzLDUuOCw3LjA3LDcuMDcsMCwwLDAtMy01Ljc2'@;
put 'QTEuMzcsMS4zNywwLDAsMSwyMiwxMC4yYTEuNCwxLjQsMCwwLDEsMS45NC0uMjlBOS44OCw5Ljg4LDAsMCwxLDE4LDI3Ljc5WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0zMy42'@;
put 'OCwxNS40aC02QTkuNyw5LjcsMCwwLDEsMjgsMTcuODlhMTAsMTAsMCwxLDEtMTUuODMtOCwxLjQsMS40LDAsMCwxLDEuOTQuMzEsMS4zNywxLjM3LDAsMCwxLS4zMSwxLjkyLDcuMTgsNy4xOCwwLDEsMCwxMS40Myw1LjgsNy4wOCw3LjA4LDAsMCwwLS40NS0yLjQ5SDIyLjIzQTMuNjksMy42'@;
put 'OSwwLDAsMSwxOS4zNSwxNHY0LjRhMS4yOSwxLjI5LDAsMCwxLTIuNTgsMFY4LjY1YTEuMjksMS4yOSwwLDAsMSwyLjU4LDB2LjcxbDMuNzYtNi41MUExNiwxNiwwLDEsMCwzNCwxOGExNiwxNiwwLDAsMC0uMjMtMi42MVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWkt'@;
put 'c29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2'@;
put 'Ljg1LDEuMTRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0zMCwxMy41YTcuNDcsNy40NywwLDAsMS0zLjU3LS45QTkuODMsOS44MywwLDAsMSwyOCwxNy44OWExMCwxMCwwLDEsMS0x'@;
put 'NS44My04LDEuNCwxLjQsMCwwLDEsMS45NC4zMSwxLjM3LDEuMzcsMCwwLDEtLjMxLDEuOTIsNy4xOCw3LjE4LDAsMSwwLDExLjQzLDUuOCw3LjA3LDcuMDcsMCwwLDAtMy01Ljc2QTEuMzcsMS4zNywwLDAsMSwyMiwxMC4yYTEuMzgsMS4zOCwwLDAsMSwxLjUyLS40OSw3LjQ1LDcuNDUsMCww'@;
put 'LDEtLjMtNi44MywxNi4wNiwxNi4wNiwwLDEsMCw5LjkzLDkuOTNBNy40Niw3LjQ2LDAsMCwxLDMwLDEzLjVaTTE2Ljc3LDguNjVhMS4yOSwxLjI5LDAsMCwxLDIuNTgsMFYxOC40YTEuMjksMS4yOSwwLDAsMS0yLjU4LDBaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xy'@;
put 'LWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPicpLHkuQ2xyU2hhcGVSZXdpbmQ9KDAsXy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEi'@;
put 'IGQ9Ik0xNy4wOSwzMS41OGwtMTUuMzItMTJhMiwyLDAsMCwxLDAtMy4xNWwxNS4zMi0xMmExLjkzLDEuOTMsMCwwLDEsMi4wNi0uMjJBMS43NywxLjc3LDAsMCwxLDIwLDZ2Ni43TDMwLjgzLDQuNDJhMS45MywxLjkzLDAsMCwxLDIuMDYtLjIyQTIsMiwwLDAsMSwzNCw2VjMwYTIsMiwwLDAs'@;
put 'MS0xLjExLDEuNzksMS45NCwxLjk0LDAsMCwxLTIuMDYtLjIyTDIwLDIzLjMxVjMwYTEuNzcsMS43NywwLDAsMS0uODUsMS43OSwxLjk0LDEuOTQsMCwwLDEtMi4wNi0uMjJaTTMyLDMwbC4wNi0yNEwxOCwxNi44VjZMMywxOCwxOCwzMFYxOS4yWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xh'@;
put 'c3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTE2LjkyLDMxLjU4LDEuNiwxOS41N2EyLDIsMCwwLDEsMC0zLjE1bDE1LjMyLTEyQTEuOTMsMS45MywwLDAsMSwxOSw0LjIsMS44OSwxLjg5LDAsMCwxLDIwLDZ2Ni43TDMwLjY2LDQuNDJhMS45MywxLjkzLDAsMCwxLDIu'@;
put 'MDYtLjIyQTIsMiwwLDAsMSwzMy44Myw2VjMwYTIsMiwwLDAsMS0xLjExLDEuNzksMS45NCwxLjk0LDAsMCwxLTIuMDYtLjIyTDIwLDIzLjMxVjMwYTEuODksMS44OSwwLDAsMS0xLDEuNzksMS45NCwxLjk0LDAsMCwxLTIuMDYtLjIyWiIvPicpLHkuQ2xyU2hhcGVGYXN0Rm9yd2FyZD0oMCxf'@;
put 'LmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE3Ljc3LDMxLjkyYTIsMiwwLDAsMS0uODYtLjJBMS44MSwxLjgxLDAsMCwxLDE2LDI5Ljkzdi02LjdMNS4yNCwzMS41YTEuOTQsMS45NCwwLDAsMS0yLjA2LjIyLDIsMiww'@;
put 'LDAsMS0xLjExLTEuNzl2LTI0QTIsMiwwLDAsMSwzLjE4LDQuMTJhMS45MywxLjkzLDAsMCwxLDIuMDYuMjJMMTYsMTIuNjFWNS45MWExLjgxLDEuODEsMCwwLDEsLjkxLTEuNzlBMS45MywxLjkzLDAsMCwxLDE5LDQuMzRsMTUuMzIsMTJhMiwyLDAsMCwxLDAsMy4xNUwxOSwzMS41QTIsMiww'@;
put 'LDAsMSwxNy43NywzMS45MlptMC0xMi44VjI5LjkzbDE1LjI2LTEyLTE1LjMyLTEyLC4wNiwxMC44MUw0LDUuOTF2MjRaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMTcuNzEsMzJhMiwyLDAsMCwxLS44Ni0uMkExLjc3'@;
put 'LDEuNzcsMCwwLDEsMTYsMzB2LTYuN0w1LjE3LDMxLjU4YTEuOTQsMS45NCwwLDAsMS0yLjA2LjIyQTIsMiwwLDAsMSwyLDMwVjZBMiwyLDAsMCwxLDMuMTEsNC4yYTEuOTMsMS45MywwLDAsMSwyLjA2LjIyTDE2LDEyLjY5VjZhMS43NywxLjc3LDAsMCwxLC44NS0xLjc5LDEuOTMsMS45Myww'@;
put 'LDAsMSwyLjA2LjIybDE1LjMyLDEyYTIsMiwwLDAsMSwwLDMuMTVsLTE1LjMyLDEyQTIsMiwwLDAsMSwxNy43MSwzMloiLz4nKSx5LkNsclNoYXBlQ2FtZXJhPSgwLF8uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMiw4SDI0LjdMMjMuNjQsNS4yOEEyLDIsMCwwLDAsMjEuNzgsNEgxNC4yMmEy'@;
put 'LDIsMCwwLDAtMS44NywxLjI4TDExLjMsOEg0YTIsMiwwLDAsMC0yLDJWMzBhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjEwQTIsMiwwLDAsMCwzMiw4Wm0wLDIySDRWMTBoOC42N2wxLjU1LTRoNy41NmwxLjU1LDRIMzJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRs'@;
put 'aW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTksMTlhOSw5LDAsMSwwLDktOUE5LDksMCwwLDAsOSwxOVptMTYuNCwwQTcuNCw3LjQsMCwxLDEsMTgsMTEuNiw3LjQxLDcuNDEsMCwwLDEsMjUuNCwxOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0'@;
put 'aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNOS4zNywxMi44M2EuOC44LDAsMCwwLS44LS44SDYuMTdhLjguOCwwLDAsMCwwLDEuNmgyLjRBLjguOCwwLDAsMCw5LjM3LDEyLjgzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiLz5cbiAgICAgICAgICAg'@;
put 'IDxwYXRoIGQ9Ik0xMi4zNCwxOWE1LjU3LDUuNTcsMCwwLDAsMy4yNCw1bC44NS0xLjM3YTQsNCwwLDEsMSw0LjExLTYuNjFsLjg2LTEuMzhBNS41Niw1LjU2LDAsMCwwLDEyLjM0LDE5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiLz5cbiAgICAgICAgICAg'@;
put 'IDxwYXRoIGQ9Ik0zMiw4SDI0LjdMMjMuNjQsNS4yOEEyLDIsMCwwLDAsMjEuNzgsNEgxNC4yMmEyLDIsMCwwLDAtMS44NywxLjI4TDExLjMsOEg0YTIsMiwwLDAsMC0yLDJWMzBhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjEwQTIsMiwwLDAsMCwzMiw4Wk02LjE3LDEzLjYzYS44'@;
put 'LjgsMCwwLDEsMC0xLjZoMi40YS44LjgsMCwwLDEsMCwxLjZaTTE4LDI4YTksOSwwLDEsMSw5LTlBOSw5LDAsMCwxLDE4LDI4WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTExLjExLDE5LjA2YTcuMDcsNy4wNywwLDAs'@;
put 'MCw0LjExLDYuNDFsMS4wOS0xLjc0YTUsNSwwLDEsMSw1LjIyLTguMzlsMS4wOS0xLjc2YTcuMDYsNy4wNiwwLDAsMC0xMS41MSw1LjQ4WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIvPicpLHkuQ2xyU2hhcGVWaWRlb0NhbWVyYT0oMCxfLmNsckljb25TVkcpKCc8'@;
put 'cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTM0LDEwLjM0YTIuMTEsMi4xMSwwLDAsMC0xLjE2LTEuOSwyLDIsMCwwLDAtMi4xMy4xNUwyNiwxMS42VjhhMiwyLDAsMCwwLTItMkg2YTQsNCwwLDAsMC00LDRWMjZhNCw0LDAsMCwwLDQsNEgyNGEy'@;
put 'LDIsMCwwLDAsMi0yVjI0LjRsNC42NCwzYTIuMDcsMi4wNywwLDAsMCwyLjIuMkEyLjExLDIuMTEsMCwwLDAsMzQsMjUuNjZaTTMxLjkzLDI1Ljc3Yy0uMDYsMC0uMTEsMC0uMTktLjA2TDI0LDIwLjc3VjI4SDZhMiwyLDAsMCwxLTItMlYxMEEyLDIsMCwwLDEsNiw4SDI0djcuMjNsNy44LTVh'@;
put 'LjExLjExLDAsMCwxLC4xMywwLC4xMS4xMSwwLDAsMSwuMDcuMTFWMjUuNjZBLjExLjExLDAsMCwxLDMxLjkzLDI1Ljc3WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTMyLjMsOS4zNSwyNiwxMi45VjhhMiwyLDAsMCww'@;
put 'LTItMkg2YTQsNCwwLDAsMC00LDRWMjZhNCw0LDAsMCwwLDQsNEgyNGEyLDIsMCwwLDAsMi0yVjIzLjA4bDYuMywzLjU1QTEuMSwxLjEsMCwwLDAsMzQsMjUuNzdWMTAuMkExLjEsMS4xLDAsMCwwLDMyLjMsOS4zNVoiLz4nKSx5LkNsclNoYXBlU2h1ZmZsZT0oMCxfLmNsckljb25TVkcpKCc8'@;
put 'cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTIxLjYxLDExaDguNjJsLTMuMywzLjNhMSwxLDAsMSwwLDEuNDEsMS40MkwzNCwxMC4wOGwtLjcxLS43MWgwTDI4LjM0LDQuNDNhMSwxLDAsMCwwLTEuNDEsMS40MkwzMC4xMSw5SDIxYTEsMSwwLDAs'@;
put 'MC0uODYuNUwxNy41LDE0LjA5bDEuMTYsMloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMTEuMDcsMjUuMDdIM2ExLDEsMCwwLDAsMCwyaDguNjVhMSwxLDAsMCwwLC44Ni0uNUwxNS4xOCwyMiwxNCwyMFoiLz5c'@;
put 'biAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMjguMzQsMjAuMTdhMSwxLDAsMCwwLTEuNDEsMS40MmwzLjUsMy41SDIxLjYxTDEyLjUxLDkuNTNhMSwxLDAsMCwwLS44Ni0uNUgzYTEsMSwwLDEsMCwwLDJoOC4wN2w5LjEs'@;
put 'MTUuNTVhMSwxLDAsMCwwLC44Ni41SDI5LjlsLTMsM2ExLDEsMCwwLDAsMS40MSwxLjQybDQuOTUtNC45NGgwbC43MS0uNzFaIi8+JykseS5DbHJTaGFwZVZvbHVtZURvd249KDAsXy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEi'@;
put 'IGQ9Ik0yMy40MSwyNS4xMWExLDEsMCwwLDEtLjU0LTEuODUsNi4yMSw2LjIxLDAsMCwwLS4xOS0xMC42NSwxLDEsMCwxLDEsMS0xLjczQTguMjEsOC4yMSwwLDAsMSwyMy45NCwyNSwxLDEsMCwwLDEsMjMuNDEsMjUuMTFaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0'@;
put 'bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTE4LDMyYTIsMiwwLDAsMS0xLjQyLS41OUw5LjE0LDI0SDRhMiwyLDAsMCwxLTItMlYxNGEyLDIsMCwwLDEsMi0ySDkuMjJsNy4zMy03LjQxQTIsMiwwLDAsMSwyMCw2VjMwYTIsMiwwLDAsMS0xLjI0LDEuODVBMiwyLDAsMCwxLDE4LDMy'@;
put 'Wk00LDE0djhIOS41NmExLDEsMCwwLDEsLjcxLjI4TDE4LDMwVjZsLTcuNjUsNy42OGExLDEsMCwwLDEtLjcxLjNaTTE4LDZaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMjMuNDEsMjUuMTFhMSwxLDAsMCwxLS41NC0x'@;
put 'Ljg1LDYuMjEsNi4yMSwwLDAsMC0uMTktMTAuNjUsMSwxLDAsMSwxLDEtMS43M0E4LjIxLDguMjEsMCwwLDEsMjMuOTQsMjUsMSwxLDAsMCwxLDIzLjQxLDI1LjExWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTTE4LjM0'@;
put 'LDMuODcsOSwxMkgzYTEsMSwwLDAsMC0xLDFWMjNhMSwxLDAsMCwwLDEsMUg4LjgzbDkuNTEsOC4zQTEsMSwwLDAsMCwyMCwzMS41NVY0LjYyQTEsMSwwLDAsMCwxOC4zNCwzLjg3WiIvPicpLHkuQ2xyU2hhcGVWb2x1bWVVcD0oMCxfLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWkt'@;
put 'b3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTIzLjQxLDI1LjI1YTEsMSwwLDAsMS0uNTQtMS44NSw2LjIxLDYuMjEsMCwwLDAtLjE5LTEwLjY1LDEsMSwwLDEsMSwxLTEuNzMsOC4yMSw4LjIxLDAsMCwxLC4yNCwxNC4wNkExLDEsMCwwLDEsMjMuNDEsMjUuMjVaIi8+XG4gICAg'@;
put 'ICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTI1LjYyLDMxLjE4YTEsMSwwLDAsMS0uNDUtMS44OUExMi40NCwxMi40NCwwLDAsMCwyNSw2Ljg5YTEsMSwwLDEsMSwuODctMS44LDE0LjQ0LDE0LjQ0LDAsMCwxLC4yNCwyNkExLDEs'@;
put 'MCwwLDEsMjUuNjIsMzEuMThaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgZD0iTTE4LDMyLjA2YTIsMiwwLDAsMS0xLjQyLS41OUw5LjE0LDI0SDRhMiwyLDAsMCwxLTItMlYxNGEyLDIsMCwwLDEsMi0ySDkuMjJsNy4z'@;
put 'My03LjM5QTIsMiwwLDAsMSwyMCw2djI0YTIsMiwwLDAsMS0xLjI0LDEuODVBMiwyLDAsMCwxLDE4LDMyLjA2Wk00LDE0djhIOS41NmExLDEsMCwwLDEsLjcxLjNMMTgsMzAuMDZWNkwxMC4zNSwxMy43YTEsMSwwLDAsMS0uNzEuM1pNMTgsNloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNz'@;
put 'PSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0yMy40MSwyNS4yNWExLDEsMCwwLDEtLjU0LTEuODUsNi4yMSw2LjIxLDAsMCwwLS4xOS0xMC42NSwxLDEsMCwxLDEsMS0xLjczLDguMjEsOC4yMSwwLDAsMSwuMjQsMTQuMDZBMSwxLDAsMCwxLDIzLjQxLDI1LjI1WiIvPlxu'@;
put 'ICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTTI1LjYyLDMxLjE4YTEsMSwwLDAsMS0uNDUtMS44OUExMi40NCwxMi40NCwwLDAsMCwyNSw2Ljg5YTEsMSwwLDEsMSwuODctMS44LDE0LjQ0LDE0LjQ0LDAsMCwxLC4yNCwyNkExLDEs'@;
put 'MCwwLDEsMjUuNjIsMzEuMThaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiBkPSJNMTguMzMsNCw5LjA3LDEyaC02YTEsMSwwLDAsMC0xLDF2OS45MmExLDEsMCwwLDAsMSwxSDguODhsOS40Niw4LjI0QTEsMSwwLDAsMCwyMCwz'@;
put 'MS40M1Y0LjcyQTEsMSwwLDAsMCwxOC4zMyw0WiIvPicpLHkuQ2xyU2hhcGVWb2x1bWVNdXRlPSgwLF8uY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMy42MSw2LjQxLDkuMTksMTJINGEyLDIsMCwwLDAtMiwydjhhMiwy'@;
put 'LDAsMCwwLDIsMkg5LjE0bDcuNDEsNy40N0EyLDIsMCwwLDAsMTgsMzJhMiwyLDAsMCwwLC43Ni0uMTVBMiwyLDAsMCwwLDIwLDMwVjIyLjc3bDUuODksNS44OWMtLjI1LjE1LS40OS4yOS0uNzUuNDJhMSwxLDAsMCwwLC45LDEuNzksMTQuNCwxNC40LDAsMCwwLDEuMzEtLjc1bDIuMjgsMi4y'@;
put 'OEwzMSwzMSw1LDVaTTE4LDMwbC03LjczLTcuNzdBMSwxLDAsMCwwLDkuNTYsMjJINFYxNEg5LjY0YTEsMSwwLDAsMCwuNzEtLjNsLjI2LS4yNkwxOCwyMC44MVoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMjQu'@;
put 'ODksNi42OUExMi40MiwxMi40MiwwLDAsMSwyOSwyNi4xbDEuNDIsMS40MkExNC40MiwxNC40MiwwLDAsMCwyNS43Niw0Ljg4YTEsMSwwLDEsMC0uODcsMS44WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIGQ9Ik0yMi42'@;
put 'OSwxMi42MkE2LjI3LDYuMjcsMCwwLDEsMjUuOCwxOGE2LjE3LDYuMTcsMCwwLDEtMS4yNCwzLjcxTDI2LDIzLjEzQTguMTUsOC4xNSwwLDAsMCwyNy44LDE4YTguMjgsOC4yOCwwLDAsMC00LjEtNy4xMSwxLDEsMCwxLDAtMSwxLjczWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNs'@;
put 'ci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIGQ9Ik0xOCw2djkuMTVsMiwyVjZhMiwyLDAsMCwwLTMuNDItMS40MUwxMiw5LjE3bDEuNDEsMS40MVoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0yNC44Nyw2'@;
put 'LjY5QTEyLjQyLDEyLjQyLDAsMCwxLDI4Ljc1LDI2LjNsMS40MiwxLjQyQTE0LjQzLDE0LjQzLDAsMCwwLDI1Ljc0LDQuODhhMSwxLDAsMCwwLS44NywxLjhaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNMjcuMywyNy42'@;
put 'N2gwbC0zLjg0LTMuODQtLjU3LS41N2gwTDQuNjMsNSwzLjIxLDYuNDEsOC44LDEySDNhMSwxLDAsMCwwLTEsMVYyM2ExLDEsMCwwLDAsMSwxSDguODNsOS41MSw4LjNBMSwxLDAsMCwwLDIwLDMxLjU1VjIzLjJsNS41OSw1LjU5Yy0uMTcuMS0uMzQuMi0uNTEuMjlhMSwxLDAsMCwwLC45LDEu'@;
put 'NzljLjM3LS4xOS43Mi0uNCwxLjA4LS42MmwyLjE0LDIuMTRMMzAuNjEsMzFsLTMuMjUtMy4yNVoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIGQ9Ik0yMi42OSwxMi42MkE2LjI3LDYuMjcsMCwwLDEsMjUuOCwxOGE2LjE3LDYu'@;
put 'MTcsMCwwLDEtMS40MiwzLjkybDEuNDIsMS40MmE4LjE2LDguMTYsMCwwLDAsMi01LjM0LDguMjgsOC4yOCwwLDAsMC00LjEtNy4xMSwxLDEsMCwxLDAtMSwxLjczWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNCIgZD0iTTIwLDQu'@;
put 'NjJhMSwxLDAsMCwwLTEuNjYtLjc1bC02LjQyLDUuNkwyMCwxNy41NFoiLz4nKSx5LkNsclNoYXBlSGVhZHBob25lcz0oMCxfLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE4LDNBMTQuMjcsMTQuMjcsMCwwLDAsNCwx'@;
put 'Ny41VjMxSDkuMkEyLjc0LDIuNzQsMCwwLDAsMTIsMjguMzNWMjEuNjdBMi43NCwyLjc0LDAsMCwwLDkuMiwxOUg2VjE3LjVBMTIuMjcsMTIuMjcsMCwwLDEsMTgsNSwxMi4yNywxMi4yNywwLDAsMSwzMCwxNy41VjE5SDI2LjhBMi43NCwyLjc0LDAsMCwwLDI0LDIxLjY3djYuNjdBMi43NCwy'@;
put 'Ljc0LDAsMCwwLDI2LjgsMzFIMzJWMTcuNUExNC4yNywxNC4yNywwLDAsMCwxOCwzWk05LjIsMjFhLjc1Ljc1LDAsMCwxLC44LjY3djYuNjdhLjc1Ljc1LDAsMCwxLS44LjY3SDZWMjFaTTI2LDI4LjMzVjIxLjY3YS43NS43NSwwLDAsMSwuOC0uNjdIMzB2OEgyNi44QS43NS43NSwwLDAsMSwy'@;
put 'NiwyOC4zM1oiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0xOCwzQTE0LjI3LDE0LjI3LDAsMCwwLDQsMTcuNVYzMUg4LjJBMS43NCwxLjc0LDAsMCwwLDEwLDI5LjMzVjIyLjY3QTEuNzQsMS43NCwwLDAsMCw4LjIsMjFI'@;
put 'NlYxNy41QTEyLjI3LDEyLjI3LDAsMCwxLDE4LDUsMTIuMjcsMTIuMjcsMCwwLDEsMzAsMTcuNVYyMUgyNy44QTEuNzQsMS43NCwwLDAsMCwyNiwyMi42N3Y2LjY3QTEuNzQsMS43NCwwLDAsMCwyNy44LDMxSDMyVjE3LjVBMTQuMjcsMTQuMjcsMCwwLDAsMTgsM1oiLz4nKSx5LkNsclNoYXBl'@;
put 'RmlsbVN0cmlwPSgwLF8uY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzAsNEg2QTIsMiwwLDAsMCw0LDZWMzBhMiwyLDAsMCwwLDIsMkgzMGEyLDIsMCwwLDAsMi0yVjZBMiwyLDAsMCwwLDMwLDRabTAsMjZINlY2SDMw'@;
put 'WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0xNC42LDIzLjA3YTEuMjksMS4yOSwwLDAsMCwxLjI0LjA5bDguNzMtNGExLjMsMS4zLDAsMCwwLDAtMi4zN2gwbC04LjczLTRBMS4zLDEuMywwLDAsMCwxNCwxNHY4'@;
put 'QTEuMjksMS4yOSwwLDAsMCwxNC42LDIzLjA3Wm0xLTguNkwyMy4zMSwxOCwxNS42LDIxLjUxWiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIHg9IjgiIHk9IjciIHdpZHRoPSIyIiBoZWlnaHQ9IjMiLz5cbiAgICAgICAg'@;
put 'ICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiB4PSIxNCIgeT0iNyIgd2lkdGg9IjIiIGhlaWdodD0iMyIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIHg9IjIwIiB5PSI3IiB3'@;
put 'aWR0aD0iMiIgaGVpZ2h0PSIzIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIgeD0iMjYiIHk9IjciIHdpZHRoPSIyIiBoZWlnaHQ9IjMiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1p'@;
put 'LW91dGxpbmUtcGF0aC03IiB4PSI4IiB5PSIyNiIgd2lkdGg9IjIiIGhlaWdodD0iMyIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTgiIHg9IjE0IiB5PSIyNiIgd2lkdGg9IjIiIGhlaWdodD0iMyIvPlxuICAgICAgICAgICAg'@;
put 'PHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTkiIHg9IjIwIiB5PSIyNiIgd2lkdGg9IjIiIGhlaWdodD0iMyIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEwIiB4PSIyNiIgeT0iMjYiIHdp'@;
put 'ZHRoPSIyIiBoZWlnaHQ9IjMiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zMCw0SDZBMiwyLDAsMCwwLDQsNlYzMGEyLDIsMCwwLDAsMiwySDMwYTIsMiwwLDAsMCwyLTJWNkEyLDIsMCwwLDAsMzAsNFpNMjAsN2gydjNI'@;
put 'MjBaTTE0LDdoMnYzSDE0Wk0xMCwyOUg4VjI2aDJabTAtMTlIOFY3aDJabTYsMTlIMTRWMjZoMlptNiwwSDIwVjI2aDJabTMuMTYtMTAuMTZMMTUuMzksMjMuMkExLDEsMCwwLDEsMTQsMjIuMjhWMTMuNTdhMSwxLDAsMCwxLDEuNDEtLjkxTDI1LjE2LDE3QTEsMSwwLDAsMSwyNS4xNiwxOC44'@;
put 'NFpNMjgsMjlIMjZWMjZoMlptMC0xOUgyNlY3aDJaIi8+JykseS5DbHJTaGFwZU11c2ljTm90ZT0oMCxfLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSJcbiAgICAgICAgICAgICAgICBkPSJNMzEuNjgsNi4xNmMtMS45Mi0zLjMt'@;
put 'MTAuNi00LTExLjU4LTQuMDlMMTksMlYyMi4zNGE1Ljg5LDUuODksMCwwLDAtLjgyLS41Niw4LjMzLDguMzMsMCwwLDAtNi41My0uNDFDNy41NywyMi43LDQuOTIsMjYuNSw1Ljc4LDI5Ljg0YTUuMzMsNS4zMywwLDAsMCwyLjY2LDMuMzIsNy40OCw3LjQ4LDAsMCwwLDMuNjEuODhBOS41NCw5'@;
put 'LjU0LDAsMCwwLDE1LDMzLjU3YzMuNjctMS4xOCw2LjE3LTQuMzMsNi4wNi03LjM2VjkuMzRhMjkuMTQsMjkuMTQsMCwwLDEsNi41NSwxLjQzLDEsMSwwLDEsMCwuNzItMS44N0EzMS4zNywzMS4zNywwLDAsMCwyMSw3LjMzVjQuMTdjMy4zMy4zNiw4LDEuMzgsOC45MiwzLDIsMy40MS0yLjMz'@;
put 'LDcuMzYtMi4zNyw3LjRhMSwxLDAsMCwwLDEuMzMsMS40OUMyOS4xNSwxNS44NSwzNC41LDExLDMxLjY4LDYuMTZaTTE0LjM1LDMxLjY3YTYuNDMsNi40MywwLDAsMS01LS4yNiwzLjMxLDMuMzEsMCwwLDEtMS42OS0yLjA3Yy0uNi0yLjMzLDEuNDUtNS4wNSw0LjU4LTYuMDZhNy41Miw3LjUy'@;
put 'LDAsMCwxLDIuMy0uMzcsNS41Miw1LjUyLDAsMCwxLDIuNjUuNjIsMy4zMSwzLjMxLDAsMCwxLDEuNjksMi4wN0MxOS41NCwyNy45NCwxNy40OSwzMC42NiwxNC4zNSwzMS42N1oiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiXG4g'@;
put 'ICAgICAgICAgICAgICAgZD0iTTMxLjY4LDYuMTZjLTEuOTItMy4zLTEwLjYtNC0xMS41OC00LjA5TDE5LDJWMjIuMjlhNS44OCw1Ljg4LDAsMCwwLS44MS0uNTUsOC4zMyw4LjMzLDAsMCwwLTYuNTMtLjQxYy00LjEyLDEuMzMtNi43Nyw1LjEzLTUuOTEsOC40N2E1LjMzLDUuMzMsMCwwLDAs'@;
put 'Mi42NiwzLjMyLDcuNDgsNy40OCwwLDAsMCwzLjYxLjg4QTkuNTQsOS41NCwwLDAsMCwxNSwzMy41MmMzLjctMS4xOSw2LjItNC4zNyw2LjA2LTcuNDIsMCwwLDAsMCwwLDBWOC40OWMxLC4xMiwyLjM3LjMzLDMuODIuNjRhMTEuMTcsMTEuMTcsMCwwLDEsNC4wNiwxLjQ2YzEsLjY2LjM4LDEu'@;
put 'OS4zMywyYTExLjgsMTEuOCwwLDAsMS0xLjY2LDIsMSwxLDAsMCwwLDEuMzMsMS40OUMyOS4xNSwxNS44NSwzNC41LDExLDMxLjY4LDYuMTZaIi8+JykseS5DbHJTaGFwZUltYWdlR2FsbGVyeT0oMCxfLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzIuMTIsMTBIMy44OEExLjg4LDEuODgsMCww'@;
put 'LDAsMiwxMS44OFYzMC4xMkExLjg4LDEuODgsMCwwLDAsMy44OCwzMkgzMi4xMkExLjg4LDEuODgsMCwwLDAsMzQsMzAuMTJWMTEuODhBMS44OCwxLjg4LDAsMCwwLDMyLjEyLDEwWk0zMiwzMEg0VjEySDMyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+'@;
put 'PHBhdGggZD0iTTguNTYsMTkuNDVhMywzLDAsMSwwLTMtM0EzLDMsMCwwLDAsOC41NiwxOS40NVptMC00LjZBMS42LDEuNiwwLDEsMSw3LDE2LjQ1LDEuNiwxLjYsMCwwLDEsOC41NiwxNC44NVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9'@;
put 'Ik03LjksMjhsNi02LDMuMTgsMy4xOEwxNC4yNiwyOGgybDcuNDYtNy40NkwzMCwyNi43N3YtMkwyNC4yLDE5YS43MS43MSwwLDAsMC0xLDBsLTUuMTYsNS4xNkwxNC4zNywyMC41YS43MS43MSwwLDAsMC0xLDBMNS45MiwyOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUt'@;
put 'cGF0aC0zIiAvPjxwYXRoIGQ9Ik0zMC4xNCwzaDBhMSwxLDAsMCwwLTEtMWgtMjJhMSwxLDAsMCwwLTEsMWgwVjRoMjRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz48cGF0aCBkPSJNMzIuMTIsN1Y3YTEsMSwwLDAsMC0xLTFoLTI2YTEsMSwwLDAsMC0x'@;
put 'LDFoMFY4aDI4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIC8+PHBhdGggZD0iTTMwLjE0LDNoMGExLDEsMCwwLDAtMS0xaC0yMmExLDEsMCwwLDAtMSwxaDBWNGgyNFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+PHBhdGgg'@;
put 'ZD0iTTMyLjEyLDdWN2ExLDEsMCwwLDAtMS0xaC0yNmExLDEsMCwwLDAtMSwxaDBWOGgyOFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+PHBhdGggZD0iTTMyLjEyLDEwSDMuODhBMS44OCwxLjg4LDAsMCwwLDIsMTEuODhWMzAuMTJBMS44OCwxLjg4LDAsMCww'@;
put 'LDMuODgsMzJIMzIuMTJBMS44OCwxLjg4LDAsMCwwLDM0LDMwLjEyVjExLjg4QTEuODgsMS44OCwwLDAsMCwzMi4xMiwxMFpNOC41NiwxMy40NWEzLDMsMCwxLDEtMywzQTMsMywwLDAsMSw4LjU2LDEzLjQ1Wk0zMCwyOGgtMjRsNy40Ni03LjQ3YS43MS43MSwwLDAsMSwxLDBsMy42OCwzLjY4'@;
put 'TDIzLjIxLDE5YS43MS43MSwwLDAsMSwxLDBMMzAsMjQuNzlaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiAvPicpLHkuQ2xyU2hhcGVSZXBsYXlBbGw9KDAsXy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE3LjQ2LDI2LjIyYTEuNCwxLjQsMCwwLDAsMS0uNDJsNS41'@;
put 'OS01LjU2YTEuNDMsMS40MywwLDAsMCwuNDItMSwxLjQ2LDEuNDYsMCwwLDAtLjQyLTFsLTUuNTktNS41NmExLjQzLDEuNDMsMCwwLDAtMi40NCwxVjI0Ljc5YTEuNDEsMS40MSwwLDAsMCwuODgsMS4zMkExLjU0LDEuNTQsMCwwLDAsMTcuNDYsMjYuMjJabS4xNi0xMi4xNiw1LjE5LDUuMTYt'@;
put 'NS4xOSw1LjE3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTE4LjA2LDVoLTYuN2wyLjkyLTIuNjRBMSwxLDAsMCwwLDEyLjk0Ljg4TDcuMzIsNiwxMi45NCwxMWExLDEsMCwwLDAsLjY3LjI2LDEsMSwwLDAsMCwuNzQtLjMzLDEsMSww'@;
put 'LDAsMC0uMDctMS40MkwxMS40Niw3aDYuNkExMS43OCwxMS43OCwwLDEsMSw3LjcxLDI0LjQxLDEsMSwwLDAsMCw2LDI1LjM2LDEzLjc4LDEzLjc4LDAsMSwwLDE4LjA2LDVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz4nKSx5LkNsclNoYXBlUmVwbGF5'@;
put 'T25lPSgwLF8uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOSwyNy4yN2ExLDEsMCwwLDAsMS0xVjE0YTEsMSwwLDAsMC0xLTFIMTlhMy44LDMuOCwwLDAsMC0xLjEuMjNsLTIsLjYyYS45Mi45MiwwLDAsMC0uNzIuODYuODguODgsMCwwLDAsLjg4Ljg2LDEuNDYsMS40NiwwLDAsMCwuNDMtLjA4'@;
put 'TDE4LDE1LjA3djExLjJBMSwxLDAsMCwwLDE5LDI3LjI3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTE4LjA2LDVoLTYuN2wyLjkyLTIuNjRBMSwxLDAsMCwwLDEyLjk0Ljg4TDcuMzIsNiwxMi45NCwxMWExLDEsMCwwLDAsLjY3LjI2'@;
put 'LDEsMSwwLDAsMCwuNzQtLjMzLDEsMSwwLDAsMC0uMDctMS40MkwxMS40Niw3aDYuNkExMS43OCwxMS43OCwwLDEsMSw3LjcxLDI0LjQxLDEsMSwwLDAsMCw2LDI1LjM2LDEzLjc4LDEzLjc4LDAsMSwwLDE4LjA2LDVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgt'@;
put 'MiIgLz4nKSx5LkNsclNoYXBlVmlkZW9HYWxsZXJ5PSgwLF8uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMi4xMiwxMEgzLjg4QTEuODgsMS44OCwwLDAsMCwyLDExLjg4VjMwLjEyQTEuODgsMS44OCwwLDAsMCwzLjg4LDMySDMyLjEyQTEuODgsMS44OCwwLDAsMCwzNCwzMC4xMlYxMS44OEEx'@;
put 'Ljg4LDEuODgsMCwwLDAsMzIuMTIsMTBaTTMyLDMwSDRWMTJIMzJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNMzAuMTQsM2gwYTEsMSwwLDAsMC0xLTFoLTIyYTEsMSwwLDAsMC0xLDFoMFY0aDI0WiIgY2xhc3M9ImNsci1pLW91dGxp'@;
put 'bmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTMyLjEyLDdWN2ExLDEsMCwwLDAtMS0xaC0yNmExLDEsMCwwLDAtMSwxaDBWOGgyOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0xMi44MiwyNi43OWExLjc0LDEuNzQs'@;
put 'MCwwLDAsLjkzLjI4LDEuNjgsMS42OCwwLDAsMCwuNjktLjE1bDkuNzctNC4zNmExLjY5LDEuNjksMCwwLDAsMC0zLjFMMTQuNDQsMTUuMWExLjcsMS43LDAsMCwwLTIuMzksMS41NXY4LjcyQTEuNywxLjcsMCwwLDAsMTIuODIsMjYuNzlabS42My0xMC4xNGEuMjkuMjksMCwwLDEsLjE0LS4y'@;
put 'NS4zLjMsMCwwLDEsLjE2LDAsLjI3LjI3LDAsMCwxLC4xMiwwbDkuNzcsNC4zNWEuMjkuMjksMCwwLDEsLjE4LjI4LjI4LjI4LDAsMCwxLS4xOC4yN2wtOS43Nyw0LjM2YS4yOC4yOCwwLDAsMS0uMjgsMCwuMzEuMzEsMCwwLDEtLjE0LS4yNVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1p'@;
put 'LW91dGxpbmUtcGF0aC00IiAvPjxwYXRoIGQ9Ik0zMi4xMiwxMEgzLjg4QTEuODgsMS44OCwwLDAsMCwyLDExLjg4VjMwLjEyQTEuODgsMS44OCwwLDAsMCwzLjg4LDMySDMyLjEyQTEuODgsMS44OCwwLDAsMCwzNCwzMC4xMlYxMS44OEExLjg4LDEuODgsMCwwLDAsMzIuMTIsMTBaTTI0LjE4'@;
put 'LDIxLjgzbC05Ljc3LDQuMzZBMSwxLDAsMCwxLDEzLDI1LjI4VjE2LjU2YTEsMSwwLDAsMSwxLjQxLS45MUwyNC4xOCwyMEExLDEsMCwwLDEsMjQuMTgsMjEuODNaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0zMC4xNCwzaDBhMSwxLDAsMCww'@;
put 'LTEtMWgtMjJhMSwxLDAsMCwwLTEsMWgwVjRoMjRaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0zMi4xMiw3VjdhMSwxLDAsMCwwLTEtMWgtMjZhMSwxLDAsMCwwLTEsMWgwVjhoMjhaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQt'@;
put 'cGF0aC0zIiAvPicpLHkuQ2xyU2hhcGVNaWNyb3Bob25lPSgwLF8uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOCwyNGMzLjksMCw3LTMuMSw3LTdWOWMwLTMuOS0zLjEtNy03LTdzLTcsMy4xLTcsN3Y4QzExLDIwLjksMTQuMSwyNCwxOCwyNHogTTEzLDljMC0yLjgsMi4yLTUsNS01czUsMi4y'@;
put 'LDUsNXY4XG5cdFx0YzAsMi44LTIuMiw1LTUsNXMtNS0yLjItNS01Vjl6IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNMzAsMTdoLTJjMCw1LjUtNC41LDEwLTEwLDEwUzgsMjIuNSw4LDE3SDZjMCw2LjMsNC44LDExLjQsMTEsMTEuOVYz'@;
put 'MmgtM2MtMC42LDAtMSwwLjQtMSwxczAuNCwxLDEsMWg4YzAuNiwwLDEtMC40LDEtMVxuXHRcdHMtMC40LTEtMS0xaC0zdi0zLjFDMjUuMiwyOC40LDMwLDIzLjMsMzAsMTd6IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMTgsMjRjMy45'@;
put 'LDAsNy0zLjEsNy03VjljMC0zLjktMy4xLTctNy03cy03LDMuMS03LDd2OEMxMSwyMC45LDE0LjEsMjQsMTgsMjR6IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0zMCwxN2gtMmMwLDUuNS00LjUsMTAtMTAsMTBTOCwyMi41LDgsMTdINmMwLDYu'@;
put 'Myw0LjgsMTEuNCwxMSwxMS45VjMyaC0zYy0wLjYsMC0xLDAuNC0xLDFzMC40LDEsMSwxaDhjMC42LDAsMS0wLjQsMS0xXG5cdFx0cy0wLjQtMS0xLTFoLTN2LTMuMUMyNS4yLDI4LjQsMzAsMjMuMywzMCwxN3oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+Jyks'@;
put 'eS5DbHJTaGFwZU1pY3JvcGhvbmVNdXRlPSgwLF8uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMCwxN2gtMmMwLDEuOC0wLjUsMy41LTEuNCw1bDEuNSwxLjVDMjkuMywyMS41LDI5LjksMTkuMywzMCwxN3oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxw'@;
put 'YXRoIGQ9Ik0xOCw0YzIuOCwwLDUsMi4yLDUsNXY4YzAsMC40LTAuMSwwLjgtMC4yLDEuMmwxLjYsMS42YzAuNC0wLjksMC42LTEuOCwwLjYtMi44VjljMC0zLjktMy4yLTctNy4xLTYuOVxuXHRcdGMtMi45LDAtNS42LDEuOS02LjUsNC43TDEzLDguM0MxMy41LDUuOSwxNS42LDQuMiwxOCw0'@;
put 'eiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTI1LjIsMjYuNmw2LjksNi45bDEuNC0xLjRMNCwyLjZMMi42LDRsOC40LDguNFYxN2MwLDMuOSwzLjEsNyw3LDdjMS4zLDAsMi41LTAuMywzLjYtMWwyLjIsMi4yQzIyLjEsMjYuNCwyMC4x'@;
put 'LDI3LDE4LDI3XG5cdFx0Yy01LjQsMC4yLTkuOC00LjEtMTAtOS40YzAtMC4yLDAtMC40LDAtMC42SDZjMC4xLDYuMiw0LjgsMTEuNCwxMSwxMnYzaC0zYy0wLjYsMC0xLDAuNC0xLDFzMC40LDEsMSwxaDhjMC42LDAsMS0wLjQsMS0xXG5cdFx0cy0wLjQtMS0xLTFoLTN2LTNDMjEuMiwyOC44'@;
put 'LDIzLjQsMjgsMjUuMiwyNi42eiBNMTMuOCwxOS43QzEzLjMsMTguOSwxMywxOCwxMywxN3YtMi42bDcuMSw3LjFDMTcuOSwyMi41LDE1LjIsMjEuOCwxMy44LDE5Ljd6IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz48cGF0aCBkPSJNMzAsMTdoLTJjMCwx'@;
put 'LjgtMC41LDMuNS0xLjQsNWwxLjUsMS41QzI5LjMsMjEuNSwyOS45LDE5LjMsMzAsMTd6IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0yNSwxN1Y5YzAtMy45LTMuMi03LTcuMS02LjljLTIuOSwwLTUuNiwxLjktNi41LDQuN2wxMywxM0MyNC44'@;
put 'LDE4LjksMjUsMTcuOSwyNSwxN3oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+PHBhdGggZD0iTTI1LjIsMjYuNmw2LjksNi45bDEuNC0xLjRMNCwyLjZMMi42LDRsOC40LDguNFYxN2MwLDMuOSwzLjEsNyw3LDdjMS4zLDAsMi41LTAuMywzLjYtMWwyLjIsMi4y'@;
put 'QzIyLjEsMjYuNCwyMC4xLDI3LDE4LDI3XG5cdFx0Yy01LjQsMC4yLTkuOC00LjEtMTAtOS40YzAtMC4yLDAtMC40LDAtMC42SDZjMC4xLDYuMiw0LjgsMTEuNCwxMSwxMnYzaC0zYy0wLjYsMC0xLDAuNC0xLDFzMC40LDEsMSwxaDhjMC42LDAsMS0wLjQsMS0xXG5cdFx0cy0wLjQtMS0xLTFo'@;
put 'LTN2LTNDMjEuMiwyOC44LDIzLjQsMjgsMjUuMiwyNi42eiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgLz4nKSx5Lk1lZGlhU2hhcGVzPXtwbGF5OnkuQ2xyU2hhcGVQbGF5LHBhdXNlOnkuQ2xyU2hhcGVQYXVzZSwic3RlcC1mb3J3YXJkIjp5LkNsclNoYXBlU3Rl'@;
put 'cEZvcndhcmQsc3RvcDp5LkNsclNoYXBlU3RvcCxwb3dlcjp5LkNsclNoYXBlUG93ZXIscmV3aW5kOnkuQ2xyU2hhcGVSZXdpbmQsImZhc3QtZm9yd2FyZCI6eS5DbHJTaGFwZUZhc3RGb3J3YXJkLGNhbWVyYTp5LkNsclNoYXBlQ2FtZXJhLCJ2aWRlby1jYW1lcmEiOnkuQ2xyU2hhcGVWaWRl'@;
put 'b0NhbWVyYSxzaHVmZmxlOnkuQ2xyU2hhcGVTaHVmZmxlLCJ2b2x1bWUtdXAiOnkuQ2xyU2hhcGVWb2x1bWVVcCwidm9sdW1lLWRvd24iOnkuQ2xyU2hhcGVWb2x1bWVEb3duLCJ2b2x1bWUtbXV0ZSI6eS5DbHJTaGFwZVZvbHVtZU11dGUsaGVhZHBob25lczp5LkNsclNoYXBlSGVhZHBob25l'@;
put 'cywiZmlsbS1zdHJpcCI6eS5DbHJTaGFwZUZpbG1TdHJpcCwibXVzaWMtbm90ZSI6eS5DbHJTaGFwZU11c2ljTm90ZSwiaW1hZ2UtZ2FsbGVyeSI6eS5DbHJTaGFwZUltYWdlR2FsbGVyeSwicmVwbGF5LWFsbCI6eS5DbHJTaGFwZVJlcGxheUFsbCwicmVwbGF5LW9uZSI6eS5DbHJTaGFwZVJl'@;
put 'cGxheU9uZSwidmlkZW8tZ2FsbGVyeSI6eS5DbHJTaGFwZVZpZGVvR2FsbGVyeSxtaWNyb3Bob25lOnkuQ2xyU2hhcGVNaWNyb3Bob25lLCJtaWNyb3Bob25lLW11dGUiOnkuQ2xyU2hhcGVNaWNyb3Bob25lTXV0ZX0sdHlwZW9mIHdpbmRvdzwidSImJndpbmRvdy5oYXNPd25Qcm9wZXJ0eSgi'@;
put 'Q2xhcml0eUljb25zIikmJndpbmRvdy5DbGFyaXR5SWNvbnMuYWRkKHkuTWVkaWFTaGFwZXMpfSwiLi9wcm9qZWN0cy9pY29ucy9zcmMvc2hhcGVzL3NvY2lhbC1zaGFwZXMudHMiOgovKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCiAg'@;
put 'ICAgICAgICAgICAgICAgICEqKiogLi9wcm9qZWN0cy9pY29ucy9zcmMvc2hhcGVzL3NvY2lhbC1zaGFwZXMudHMgKioqIQogICAgICAgICAgICAgICAgICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLyohIG5vIHN0YXRpYyBleHBvcnRz'@;
put 'IGZvdW5kICovZnVuY3Rpb24oWCx5LEkpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoeSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSkseS5Tb2NpYWxTaGFwZXM9eS5DbHJTaGFwZUhhc2h0YWc9eS5DbHJTaGFwZUNyb3duPXkuQ2xyU2hhcGVUaHVtYnNEb3duPXkuQ2xyU2hh'@;
put 'cGVUaHVtYnNVcD15LkNsclNoYXBlU2FkRmFjZT15LkNsclNoYXBlTmV1dHJhbEZhY2U9eS5DbHJTaGFwZUhhcHB5RmFjZT15LkNsclNoYXBlUGljdHVyZT15LkNsclNoYXBlQ2hhdEJ1YmJsZT15LkNsclNoYXBlVGFsa0J1YmJsZXM9eS5DbHJTaGFwZUhlYXJ0QnJva2VuPXkuQ2xyU2hhcGVI'@;
put 'ZWFydD15LkNsclNoYXBlSW5ib3g9eS5DbHJTaGFwZUZsYWc9eS5DbHJTaGFwZVRhc2tzPXkuQ2xyU2hhcGVFbnZlbG9wZT15LkNsclNoYXBlQm9va21hcms9eS5DbHJTaGFwZUhhbGZTdGFyPXkuQ2xyU2hhcGVTdGFyPXkuQ2xyU2hhcGVTaGFyZT12b2lkIDA7dmFyIF89SSgKLyohIC4uL3V0'@;
put 'aWxzL2Rlc2NyaXB0b3ItY29uZmlnICovCiIuL3Byb2plY3RzL2ljb25zL3NyYy91dGlscy9kZXNjcmlwdG9yLWNvbmZpZy50cyIpLGc9SSgKLyohIC4uL3V0aWxzL3N2Zy10YWctZ2VuZXJhdG9yICovCiIuL3Byb2plY3RzL2ljb25zL3NyYy91dGlscy9zdmctdGFnLWdlbmVyYXRvci50cyIp'@;
put 'LEI9SSgKLyohIC4vY29yZS1zaGFwZXMgKi8KIi4vcHJvamVjdHMvaWNvbnMvc3JjL3NoYXBlcy9jb3JlLXNoYXBlcy50cyIpO3kuQ2xyU2hhcGVTaGFyZT0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTI3LjUz'@;
put 'LDI0YTUsNSwwLDAsMC0zLjYsMS41NUwxMS43NCwxOS40NWE0LjQ3LDQuNDcsMCwwLDAsMC0yLjhsMTIuMjEtNi4yMWE1LjEyLDUuMTIsMCwxLDAtMS4wNy0xLjdMMTAuNzksMTQuODlhNSw1LDAsMSwwLDAsNi4zM2wxMi4wNiw2LjA3QTQuOTMsNC45MywwLDAsMCwyMi41NCwyOWE1LDUsMCwx'@;
put 'LDAsNS01Wm0wLTIwYTMsMywwLDEsMS0zLDNBMywzLDAsMCwxLDI3LjUzLDRaTTcsMjFhMywzLDAsMSwxLDMtM0EzLDMsMCwwLDEsNywyMVpNMjcuNTMsMzJhMywzLDAsMSwxLDMtM0EzLDMsMCwwLDEsMjcuNTMsMzJaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNv'@;
put 'bGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTI3LjUzLDI0YTUsNSwwLDAsMC0zLjYsMS41NUwxMS43NCwxOS40NWE0LjQ3LDQuNDcsMCwwLDAsMC0yLjhsMTIuMjEtNi4yMWE1LjEyLDUuMTIsMCwxLDAtMS4wNy0xLjdMMTAuNzksMTQuODlhNSw1LDAsMSwwLDAsNi4zM2wxMi4wNiw2LjA3'@;
put 'QTQuOTMsNC45MywwLDAsMCwyMi41NCwyOWE1LDUsMCwxLDAsNS01WiIvPicpLHkuQ2xyU2hhcGVTdGFyPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMjcuMTksMzRhMi4yMiwyLjIyLDAsMCwxLTEuMjQtLjM4'@;
put 'bC03LjQ2LTVhLjIyLjIyLDAsMCwwLS4yNSwwbC03LjQ2LDVBMi4yMiwyLjIyLDAsMCwxLDcuNCwzMS4yMWwyLjQ1LTguNjRhLjIzLjIzLDAsMCwwLS4wOC0uMjRMMi43MSwxNi43OGEyLjIyLDIuMjIsMCwwLDEsMS4yOS00bDktLjM0YS4yMy4yMywwLDAsMCwuMi0uMTVsMy4xLTguNDNhMi4y'@;
put 'MiwyLjIyLDAsMCwxLDQuMTcsMGwzLjEsOC40M2EuMjMuMjMsMCwwLDAsLjIuMTVsOSwuMzRhMi4yMiwyLjIyLDAsMCwxLDEuMjksNEwyNywyMi4zM2EuMjIuMjIsMCwwLDAtLjA4LjI0bDIuNDUsOC42NEEyLjIzLDIuMjMsMCwwLDEsMjcuMTksMzRabS04LjgyLTcuNDJBMi4yMSwyLjIxLDAs'@;
put 'MCwxLDE5LjYsMjdsNy40Niw1YS4yMi4yMiwwLDAsMCwuMzQtLjI1bC0yLjQ1LTguNjRhMi4yMSwyLjIxLDAsMCwxLC43Ny0yLjM1bDcuMDYtNS41NWEuMjIuMjIsMCwwLDAtLjEzLS40bC05LS4zNGEyLjIyLDIuMjIsMCwwLDEtMi0xLjQ2bC0zLjEtOC40M2EuMjIuMjIsMCwwLDAtLjQyLDBM'@;
put 'MTUuMDYsMTNhMi4yMiwyLjIyLDAsMCwxLTIsMS40NmwtOSwuMzRhLjIyLjIyLDAsMCwwLS4xMy40TDExLDIwLjc2YTIuMjIsMi4yMiwwLDAsMSwuNzcsMi4zNUw5LjMzLDMxLjc1YS4yMS4yMSwwLDAsMCwuMDguMjQuMi4yLDAsMCwwLC4yNiwwbDcuNDYtNUEyLjIyLDIuMjIsMCwwLDEsMTgu'@;
put 'MzYsMjYuNjJaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTM0LDE2Ljc4YTIuMjIsMi4yMiwwLDAsMC0xLjI5LTRsLTktLjM0YS4yMy4yMywwLDAsMS0uMi0uMTVMMjAuNCwzLjg5YTIuMjIsMi4yMiwwLDAsMC00'@;
put 'LjE3LDBsLTMuMSw4LjQzYS4yMy4yMywwLDAsMS0uMi4xNWwtOSwuMzRhMi4yMiwyLjIyLDAsMCwwLTEuMjksNGw3LjA2LDUuNTVhLjIzLjIzLDAsMCwxLC4wOC4yNEw3LjM1LDMxLjIxYTIuMjIsMi4yMiwwLDAsMCwzLjM4LDIuNDVsNy40Ni01YS4yMi4yMiwwLDAsMSwuMjUsMGw3LjQ2LDVh'@;
put 'Mi4yLDIuMiwwLDAsMCwyLjU1LDAsMi4yLDIuMiwwLDAsMCwuODMtMi40bC0yLjQ1LTguNjRhLjIyLjIyLDAsMCwxLC4wOC0uMjRaIi8+JykseS5DbHJTaGFwZUhhbGZTdGFyPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0x'@;
put 'IiBkPSJNMzQsMTYuNzhhMi4yMiwyLjIyLDAsMCwwLTEuMjktNGwtOS0uMzRhLjIzLjIzLDAsMCwxLS4yLS4xNUwyMC40LDMuODlhMi4yMiwyLjIyLDAsMCwwLTQuMTcsMGwtMy4xLDguNDNhLjIzLjIzLDAsMCwxLS4yLjE1bC05LC4zNGEyLjIyLDIuMjIsMCwwLDAtMS4yOSw0bDcuMDYsNS41'@;
put 'NWEuMjIuMjIsMCwwLDEsLjA4LjI0TDcuMzUsMzEuMjFBMi4yMywyLjIzLDAsMCwwLDkuNDksMzRhMi4yMiwyLjIyLDAsMCwwLDEuMjQtLjM4bDcuNDYtNWEuMjIuMjIsMCwwLDEsLjI1LDBsNy40Niw1YTIuMjIsMi4yMiwwLDAsMCwzLjM4LTIuNDVsLTIuNDUtOC42NGEuMjMuMjMsMCwwLDEs'@;
put 'LjA4LS4yNFpNMTguMzMsMjYuNjJoMGEyLjIxLDIuMjEsMCwwLDAtMS4yNC4zOEw5LjYyLDMyYS4yMi4yMiwwLDAsMS0uMzQtLjI1bDIuNDUtOC42NEEyLjIxLDIuMjEsMCwwLDAsMTEsMjAuNzZMMy45LDE1LjIxYS4yMi4yMiwwLDAsMSwuMTMtLjRsOS0uMzRBMi4yMiwyLjIyLDAsMCwwLDE1'@;
put 'LDEzbDMuMS04LjQzYS4yLjIsMCwwLDEsLjIxLS4xNWgwWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zNCwxNi43OGEyLjIyLDIuMjIsMCwwLDAtMS4yOS00bC05LS4zNGEuMjMuMjMsMCwwLDEtLjItLjE1TDIw'@;
put 'LjQsMy44OWEyLjIyLDIuMjIsMCwwLDAtNC4xNywwbC0zLjEsOC40M2EuMjMuMjMsMCwwLDEtLjIuMTVsLTksLjM0YTIuMjIsMi4yMiwwLDAsMC0xLjI5LDRsNy4wNiw1LjU1YS4yMy4yMywwLDAsMSwuMDguMjRMNy4zNSwzMS4yMWEyLjIyLDIuMjIsMCwwLDAsMy4zOCwyLjQ1bDcuNDYtNWEu'@;
put 'MjIuMjIsMCwwLDEsLjI1LDBsNy40Niw1YTIuMiwyLjIsMCwwLDAsMi41NSwwLDIuMiwyLjIsMCwwLDAsLjgzLTIuNGwtMi40NS04LjY0YS4yMi4yMiwwLDAsMSwuMDgtLjI0Wk0yNC45LDIzLjExbDIuNDUsOC42NEEuMjIuMjIsMCwwLDEsMjcsMzJsLTcuNDYtNWEyLjIxLDIuMjEsMCwwLDAt'@;
put 'MS4yNC0uMzhoMFY0LjQ0aDBhLjIuMiwwLDAsMSwuMjEuMTVMMjEuNjIsMTNhMi4yMiwyLjIyLDAsMCwwLDIsMS40Nmw5LC4zNGEuMjIuMjIsMCwwLDEsLjEzLjRsLTcuMDYsNS41NUEyLjIxLDIuMjEsMCwwLDAsMjQuOSwyMy4xMVoiLz4nKSx5LkNsclNoYXBlQm9va21hcms9KDAsZy5jbHJJ'@;
put 'Y29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0yNiwzNGEyLDIsMCwwLDEtMS40MS0uNThMMTgsMjYuODJsLTYuNTQsNi41MkEyLDIsMCwwLDEsOCwzMS45M1Y0YTIsMiwwLDAsMSwyLTJIMjZhMiwyLDAsMCwxLDIsMlYzMmEyLDIs'@;
put 'MCwwLDEtMiwyWm0wLTJoMFY0SDEwVjMxLjkzTDE4LDI0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0yNiwySDEwQTIsMiwwLDAsMCw4LDRWMzEuOTNhMiwyLDAsMCwwLDMuNDIsMS40MWw2LjU0LTYuNTIsNi42'@;
put 'Myw2LjZBMiwyLDAsMCwwLDI4LDMyVjRBMiwyLDAsMCwwLDI2LDJaIi8+JykseS5DbHJTaGFwZUVudmVsb3BlPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzIsNkg0QTIsMiwwLDAsMCwyLDhWMjhhMiwyLDAs'@;
put 'MCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjhBMiwyLDAsMCwwLDMyLDZaTTMwLjQ2LDI4SDUuNjZsNy03LjI0LTEuNDQtMS4zOUw0LDI2Ljg0VjkuNTJMMTYuNDMsMjEuODlhMiwyLDAsMCwwLDIuODIsMEwzMiw5LjIxdjE3LjVsLTcuMzYtNy4zNi0xLjQxLDEuNDFaTTUuMzEsOEgzMC4zOEwx'@;
put 'Ny44NCwyMC40N1oiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0zMiwxMy4wOFYyNi43MWwtNy4zNi03LjM2LTEuNDEsMS40MUwzMC40NiwyOEg1LjY2bDctNy4yNC0xLjQ0LTEu'@;
put 'MzlMNCwyNi44NFY5LjUyTDE2LjQzLDIxLjg5YTIsMiwwLDAsMCwyLjgyLDBsOC44My04Ljc4YTcuNDQsNy40NCwwLDAsMS0yLS44NWwtOC4yNiw4LjIxTDUuMzEsOEgyMi44MWE3LjQ5LDcuNDksMCwwLDEtLjMxLTJINEEyLDIsMCwwLDAsMiw4VjI4YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAs'@;
put 'MCwwLDItMlYxMi4yQTcuNDUsNy40NSwwLDAsMSwzMiwxMy4wOFoiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNS44NiIgcj0iNSIvPlxu'@;
put 'ICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiBkPSJNMzMuNjgsMTUuMjZIMzJWMjYuNzFsLTcuMzYtNy4zNi0xLjQxLDEuNDFMMzAuNDYsMjhINS42Nmw3LTcuMjQtMS40NC0xLjM5TDQsMjYu'@;
put 'ODRWOS41MkwxNi40MywyMS44OWEyLDIsMCwwLDAsMi44MiwwbDYuNjYtNi42M0gyMy4wOGwtNS4yNCw1LjIxTDUuMzEsOEgyMC4wNmwxLjE1LTJINEEyLDIsMCwwLDAsMiw4VjI4YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYxNS4yNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0'@;
put 'aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDFsLTUuNzIsOS45MWExLjI4LDEuMjgsMCwwLDAsMS4xLDEuOTFIMzMuNjhhMS4yOCwxLjI4LDAsMCwwLDEuMS0xLjkxTDI5LjA2LDFBMS4y'@;
put 'OCwxLjI4LDAsMCwwLDI2Ljg1LDFaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTMyLjMzLDZhMiwyLDAsMCwwLS40MSwwaC0yOGEyLDIsMCwwLDAtLjUzLjA4TDE3Ljg0LDIwLjQ3WiIvPlxuICAgICAgICAgICAg'@;
put 'ICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIGQ9Ik0zMy44MSw3LjM5LDE5LjI1LDIxLjg5YTIsMiwwLDAsMS0yLjgyLDBMMiw3LjVhMiwyLDAsMCwwLS4wNy41VjI4YTIsMiwwLDAsMCwyLDJoMjhhMiwyLDAsMCwwLDItMlY4QTIsMiwwLDAsMCwzMy44'@;
put 'MSw3LjM5Wk01LjMsMjhIMy45MVYyNi41N2w3LjI3LTcuMjEsMS40MSwxLjQxWm0yNi42MSwwSDMwLjUxbC03LjI5LTcuMjMsMS40MS0xLjQxLDcuMjcsNy4yMVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEt'@;
put 'LWJhZGdlZCIgZD0iTTI2LDEyLjM0QTcuNDksNy40OSwwLDAsMSwyMi41LDZIMy45MmEyLDIsMCwwLDAtLjUzLjA4TDE3Ljg0LDIwLjQ3WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIiBkPSJN'@;
put 'MzAsMTMuNWE3LjQ5LDcuNDksMCwwLDEtMi0uMjlsLTguNzEsOC42OGEyLDIsMCwwLDEtMi44MiwwTDIsNy41YTIsMiwwLDAsMC0uMDcuNVYyOGEyLDIsMCwwLDAsMiwyaDI4YTIsMiwwLDAsMCwyLTJWMTIuMzlBNy40NSw3LjQ1LDAsMCwxLDMwLDEzLjVaTTUuMywyOEgzLjkxVjI2LjU3bDcu'@;
put 'MjctNy4yMSwxLjQxLDEuNDFabTI2LjYxLDBIMzAuNTFsLTcuMjktNy4yMywxLjQxLTEuNDEsNy4yNyw3LjIxWiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIz'@;
put 'MCIgY3k9IjYiIHI9IjUiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiBkPSJNMzMuNjgsMTUuNEgyNS43N2wtNi41Miw2LjQ5YTIsMiwwLDAsMS0yLjgyLDBMMiw3LjVhMiwyLDAsMCwwLS4w'@;
put 'Ny41VjI4YTIsMiwwLDAsMCwyLDJoMjhhMiwyLDAsMCwwLDItMlYxNS4zOFpNNS4zLDI4SDMuOTFWMjYuNTdsNy4yNy03LjIxLDEuNDEsMS40MVptMjYuNjEsMEgzMC41MWwtNy4yOS03LjIzLDEuNDEtMS40MSw3LjI3LDcuMjFaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNs'@;
put 'ci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCIgZD0iTTIyLjk0LDE1LjRoLS43QTMuNjgsMy42OCwwLDAsMSwxOSw5Ljg5TDIxLjI5LDZIMy45MmEyLDIsMCwwLDAtLjUzLjA4TDE3Ljg0LDIwLjQ3WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNz'@;
put 'PSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgs'@;
put 'MCwwLDAsMjYuODUsMS4xNFoiLz4nKSx5LkNsclNoYXBlVGFza3M9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0yOS4yOSwzNEg2LjcxQTEuNywxLjcsMCwwLDEsNSwzMi4zMVY2LjY5QTEuNzUsMS43NSwwLDAs'@;
put 'MSw3LDVIOVY3SDdWMzJIMjlWN0gyN1Y1aDIuMjVBMS43LDEuNywwLDAsMSwzMSw2LjY5VjMyLjMxQTEuNywxLjcsMCwwLDEsMjkuMjksMzRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0xNi42NiwyNS43'@;
put 'NiwxMS4zLDIwLjRBMSwxLDAsMCwxLDEyLjcyLDE5bDMuOTQsMy45NCw4LjY0LTguNjRhMSwxLDAsMCwxLDEuNDEsMS40MVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgZD0iTTI2LDExSDEwVjcuMzNBMi4zNCwy'@;
put 'LjM0LDAsMCwxLDEyLjMzLDVoMS43OWE0LDQsMCwwLDEsNy43NSwwaDEuNzlBMi4zNCwyLjM0LDAsMCwxLDI2LDcuMzNaTTEyLDlIMjRWNy4zM0EuMzMuMzMsMCwwLDAsMjMuNjcsN0gyMFY2YTIsMiwwLDAsMC00LDBWN0gxMi4zM2EuMzMuMzMsMCwwLDAtLjMzLjMzWiIvPlxuICAgICAgICAg'@;
put 'ICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiBkPSJNMTksOS44OSwxOS41Niw5SDEyVjcuMzNBLjMzLjMzLDAsMCwxLDEyLjMzLDdIMTZWNmEyLDIsMCwwLDEsNCwwVjdoLjcxbDEuMTYtMmE0LDQsMCwwLDAt'@;
put 'Ny43NCwwSDEyLjMzQTIuMzQsMi4zNCwwLDAsMCwxMCw3LjMzVjExaDguNjRBMy42NSwzLjY1LDAsMCwxLDE5LDkuODlaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiIGQ9Ik0yNC4x'@;
put 'OSwxNS40bC03LjUzLDcuNTNMMTIuNzIsMTlBMSwxLDAsMCwwLDExLjMsMjAuNGw1LjM2LDUuMzZMMjYuNzEsMTUuNzFhMSwxLDAsMCwwLC4yLS4zMVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0t'@;
put 'YWxlcnRlZCIgZD0iTTI5LDE1LjRWMzJIN1Y3SDlWNUg3QTEuNzUsMS43NSwwLDAsMCw1LDYuNjlWMzIuMzFBMS43LDEuNywwLDAsMCw2LjcxLDM0SDI5LjI5QTEuNywxLjcsMCwwLDAsMzEsMzIuMzFWMTUuNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGlu'@;
put 'ZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44'@;
put 'NSwxLjE0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgZD0iTTEyLjcyLDE5QTEsMSwwLDAsMCwxMS4zLDIwLjRsNS4zNiw1LjM2TDI2LjcxLDE1LjcxYTEsMSwwLDAsMC0xLjQxLTEu'@;
put 'NDFsLTguNjQsOC42NFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiIGQ9Ik0yMy4xMyw5SDEyVjcuMzNBLjMzLjMzLDAsMCwxLDEyLjMzLDdIMTZWNmEyLDIsMCwwLDEsNCwwVjdoMi41'@;
put 'N2E3LjUyLDcuNTIsMCwwLDEtLjA3LTEsNy41Miw3LjUyLDAsMCwxLC4wNy0xaC0uN2E0LDQsMCwwLDAtNy43NSwwSDEyLjMzQTIuMzQsMi4zNCwwLDAsMCwxMCw3LjMzVjExSDI0LjQyQTcuNSw3LjUsMCwwLDEsMjMuMTMsOVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xy'@;
put 'LWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiIGQ9Ik0zMCwxMy41YTcuNTIsNy41MiwwLDAsMS0xLS4wN1YzMkg3VjdIOVY1SDdBMS43NSwxLjc1LDAsMCwwLDUsNi42OVYzMi4zMUExLjcsMS43LDAsMCwwLDYuNzEsMzRIMjkuMjlBMS43LDEuNywwLDAs'@;
put 'MCwzMSwzMi4zMVYxMy40M0E3LjUyLDcuNTIsMCwwLDEsMzAsMTMuNVoiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxu'@;
put 'ICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0yOS4yOSw0Ljk1aC03LjJhNC4zMSw0LjMxLDAsMCwwLTguMTcsMEg3QTEuNzUsMS43NSwwLDAsMCw1LDYuNjRWMzIuMjZhMS43LDEuNywwLDAsMCwxLjcxLDEuNjlIMjkuMjlB'@;
put 'MS43LDEuNywwLDAsMCwzMSwzMi4yNlY2LjY0QTEuNywxLjcsMCwwLDAsMjkuMjksNC45NVptLTE4LDNhMSwxLDAsMCwxLDEtMWgzLjQ0VjYuMzJhMi4zMSwyLjMxLDAsMCwxLDQuNjMsMFY3aDMuNDRhMSwxLDAsMCwxLDEsMVY5LjhIMTEuMjVabTE0LjUyLDkuMjMtOS4xMiw5LjEyLTUuMjQt'@;
put 'NS4yNGExLjQsMS40LDAsMCwxLDItMmwzLjI2LDMuMjYsNy4xNC03LjE0YTEuNCwxLjQsMCwxLDEsMiwyWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0yNS44OCwxNS40YTEuMzgs'@;
put 'MS4zOCwwLDAsMS0uMTEsMS44MWwtOS4xMiw5LjEyLTUuMjQtNS4yNGExLjQsMS40LDAsMCwxLDItMmwzLjI2LDMuMjYsNy03SDIyLjIzQTMuNjgsMy42OCwwLDAsMSwxOSw5Ljg5bDAtLjA5SDExLjI1VjhhMSwxLDAsMCwxLDEtMWgzLjQ0VjYuMzJhMi4zMSwyLjMxLDAsMCwxLDQuNjMsMFY3'@;
put 'aC40MkwyMiw0Ljc2YTQuMyw0LjMsMCwwLDAtOC4wOS4xOUg3QTEuNzUsMS43NSwwLDAsMCw1LDYuNjRWMzIuMjZhMS43LDEuNywwLDAsMCwxLjcxLDEuNjlIMjkuMjlBMS43LDEuNywwLDAsMCwzMSwzMi4yNlYxNS40WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1z'@;
put 'b2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYu'@;
put 'ODUsMS4xNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgZD0iTTMwLDEzLjVhNy40OSw3LjQ5LDAsMCwxLTYuNDYtMy43SDExLjI1VjhhMSwxLDAsMCwxLDEtMWgzLjQ0VjYuMzJhMi4zMSwy'@;
put 'LjMxLDAsMCwxLDQuNjMsMFY3aDIuMjZhNy41Myw3LjUzLDAsMCwxLS4wNy0xLDcuNTMsNy41MywwLDAsMSwuMDgtMS4wNWgtLjVhNC4zMSw0LjMxLDAsMCwwLTguMTcsMEg3QTEuNzUsMS43NSwwLDAsMCw1LDYuNjRWMzIuMjZhMS43LDEuNywwLDAsMCwxLjcxLDEuNjlIMjkuMjlBMS43LDEu'@;
put 'NywwLDAsMCwzMSwzMi4yNlYxMy40M0E3LjUyLDcuNTIsMCwwLDEsMzAsMTMuNVptLTQuMjMsMy43MS05LjEyLDkuMTItNS4yNC01LjI0YTEuNCwxLjQsMCwwLDEsMi0ybDMuMjYsMy4yNiw3LjE0LTcuMTRhMS40LDEuNCwwLDEsMSwyLDJaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBj'@;
put 'bGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPicpLHkuQ2xyU2hhcGVGbGFnPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUt'@;
put 'cGF0aC0xIiBkPSJNNiwzNGExLDEsMCwwLDEtMS0xVjNBMSwxLDAsMCwxLDcsM1YzM0ExLDEsMCwwLDEsNiwzNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTMwLjU1LDMuODJhMSwxLDAsMCwwLTEsMCwx'@;
put 'NC45LDE0LjksMCwwLDEtNi4xMywxLjE2LDEzLjExLDEzLjExLDAsMCwxLTUuMTgtMS40OSwxMi43OCwxMi43OCwwLDAsMC01LTEuNDVBMTAuODYsMTAuODYsMCwwLDAsOSwyLjg1VjUuMDhBOC44LDguOCwwLDAsMSwxMy4yNSw0YTExLjIyLDExLjIyLDAsMCwxLDQuMiwxLjI4LDE0Ljg0LDE0'@;
put 'Ljg0LDAsMCwwLDYsMS42NkExOC43NSwxOC43NSwwLDAsMCwyOSw2LjEyVjE4Ljk1YTE2LjE2LDE2LjE2LDAsMCwxLTUuNTguOTMsMTMuMTEsMTMuMTEsMCwwLDEtNS4xOC0xLjQ5LDEyLjc4LDEyLjc4LDAsMCwwLTUtMS40NUExMC44NiwxMC44NiwwLDAsMCw5LDE3Ljc5VjIwYTguOCw4Ljgs'@;
put 'MCwwLDEsNC4yNS0xLjA4LDExLjIyLDExLjIyLDAsMCwxLDQuMiwxLjI4LDE0Ljg0LDE0Ljg0LDAsMCwwLDYsMS42NiwxNi43OSwxNi43OSwwLDAsMCw3LTEuMzcsMSwxLDAsMCwwLC41NS0uODlWNC42N0ExLDEsMCwwLDAsMzAuNTUsMy44MloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBj'@;
put 'bGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNNS45MiwyYTEsMSwwLDAsMC0xLDFWMzNhMSwxLDAsMCwwLDIsMFYzQTEsMSwwLDAsMCw1LjkyLDJaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIg'@;
put 'ZD0iTTMwLjUsMy44MmExLDEsMCwwLDAtMSwwLDE0LjksMTQuOSwwLDAsMS02LjEzLDEuMTYsMTMuMTEsMTMuMTEsMCwwLDEtNS4xOC0xLjQ5QTEyLjc4LDEyLjc4LDAsMCwwLDEzLjIsMiwxMC44NiwxMC44NiwwLDAsMCw5LDIuODVWMjBhOC44LDguOCwwLDAsMSw0LjI1LTEuMDgsMTEuMjIs'@;
put 'MTEuMjIsMCwwLDEsNC4yLDEuMjgsMTQuODQsMTQuODQsMCwwLDAsNiwxLjY2LDE2Ljc5LDE2Ljc5LDAsMCwwLDctMS4zNywxLDEsMCwwLDAsLjU1LS44OVY0LjY3QTEsMSwwLDAsMCwzMC41LDMuODJaIi8+JykseS5DbHJTaGFwZUluYm94PSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0x'@;
put 'Mi4yMywxMy4wOWExLDEsMCwwLDAsMCwxLjQxTDE4LDIwLjNsNS43OS01Ljc5YTEsMSwwLDAsMC0xLjQxLTEuNDFMMTksMTYuNDdWMkExLDEsMCwwLDAsMTgsMWExLDEsMCwwLDAtMSwxdjE0LjVsLTMuMzgtMy4zOEExLDEsMCwwLDAsMTIuMjMsMTMuMDlaIiBjbGFzcz0iY2xyLWktb3V0bGlu'@;
put 'ZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI5LjUsNUgyMlY3aDdWMjFIMjMuNjFsLS4xLjg5YTUuNDIsNS40MiwwLDAsMS0xMC43NywwbC0uMS0uODlIN1Y3aDdWNUg2LjVBMS41LDEuNSwwLDAsMCw1LDYuNXYyNUExLjUsMS41LDAsMCwwLDYuNSwz'@;
put 'M2gyM0ExLjUsMS41LDAsMCwwLDMxLDMxLjVWNi41QTEuNSwxLjUsMCwwLDAsMjkuNSw1Wk0yOSwzMUg3VjIzaDMuOTFhNy40Miw3LjQyLDAsMCwwLDE0LjQ0LDBIMjlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0i'@;
put 'TTEyLjIzLDEzLjA5YTEsMSwwLDAsMCwwLDEuNDFMMTgsMjAuM2w1Ljc5LTUuNzlhMSwxLDAsMCwwLTEuNDEtMS40MUwxOSwxNi40N1YyQTEsMSwwLDAsMCwxOCwxYTEsMSwwLDAsMC0xLDF2MTQuNWwtMy4zOC0zLjM4QTEsMSwwLDAsMCwxMi4yMywxMy4wOVoiIGNsYXNzPSJjbHItaS1vdXRs'@;
put 'aW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLDEzLjVhNy41Miw3LjUyLDAsMCwxLTEtLjA3VjIxSDIzLjYxbC0uMS44OWE1LjQyLDUuNDIsMCwwLDEtMTAuNzcsMGwtLjEtLjg5SDdWN2g3VjVINi41QTEuNSwxLjUs'@;
put 'MCwwLDAsNSw2LjV2MjVBMS41LDEuNSwwLDAsMCw2LjUsMzNoMjNBMS41LDEuNSwwLDAsMCwzMSwzMS41VjEzLjQzQTcuNTIsNy41MiwwLDAsMSwzMCwxMy41Wk0yOSwzMUg3VjIzaDMuOTFhNy40Miw3LjQyLDAsMCwwLDE0LjQ0LDBIMjlaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2Vk'@;
put 'IGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+JykseS5DbHJTaGFwZUhlYXJ0'@;
put 'PSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOCwzMi40M2ExLDEsMCwwLDEtLjYxLS4yMUMxMS44MywyNy45LDgsMjQuMTgsNS4zMiwyMC41MSwxLjksMTUuODIsMS4xMiwxMS40OSwzLDcuNjRjMS4zNC0yLjc1LDUuMTktNSw5LjY5LTMuNjlBOS44Nyw5Ljg3LDAsMCwxLDE4LDcuNzJh'@;
put 'OS44Nyw5Ljg3LDAsMCwxLDUuMzEtMy43N2M0LjQ5LTEuMjksOC4zNS45NCw5LjY5LDMuNjksMS44OCwzLjg1LDEuMSw4LjE4LTIuMzIsMTIuODdDMjgsMjQuMTgsMjQuMTcsMjcuOSwxOC42MSwzMi4yMkExLDEsMCwwLDEsMTgsMzIuNDNaTTEwLjEzLDUuNThBNS45LDUuOSwwLDAsMCw0Ljgs'@;
put 'OC41MWMtMS41NSwzLjE4LS44NSw2LjcyLDIuMTQsMTAuODFBNTcuMTMsNTcuMTMsMCwwLDAsMTgsMzAuMTYsNTcuMTMsNTcuMTMsMCwwLDAsMjkuMDYsMTkuMzNjMy00LjEsMy42OS03LjY0LDIuMTQtMTAuODEtMS0yLTQtMy41OS03LjM0LTIuNjVhOCw4LDAsMCwwLTQuOTQsNC4yLDEsMSww'@;
put 'LDAsMS0xLjg1LDAsNy45Myw3LjkzLDAsMCwwLTQuOTQtNC4yQTcuMzEsNy4zMSwwLDAsMCwxMC4xMyw1LjU4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMyw3LjY0Yy0xLjM0LTIuNzUtNS4yLTUtOS42OS0z'@;
put 'LjY5QTkuODcsOS44NywwLDAsMCwxOCw3LjcyYTkuODcsOS44NywwLDAsMC01LjMxLTMuNzdDOC4xOSwyLjY2LDQuMzQsNC44OSwzLDcuNjRjLTEuODgsMy44NS0xLjEsOC4xOCwyLjMyLDEyLjg3QzgsMjQuMTgsMTEuODMsMjcuOSwxNy4zOSwzMi4yMmExLDEsMCwwLDAsMS4yMywwYzUuNTUt'@;
put 'NC4zMSw5LjM5LTgsMTIuMDctMTEuNzFDMzQuMSwxNS44MiwzNC44OCwxMS40OSwzMyw3LjY0WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPicpLHkuQ2xyU2hhcGVIZWFydEJyb2tlbj0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzMsNy42NGMtMS4zNC0y'@;
put 'Ljc1LTUuMDktNS05LjY5LTMuNjlhOS44Nyw5Ljg3LDAsMCwwLTYsNC44NCwxOC45LDE4LjksMCwwLDAtMi4yMyw1LjMzbDUuMjgsMi4zNC00LjYsNC4zNywzLjQ5LDQuMSwxLjUyLTEuM0wxOC41NCwyMWw1LjQtNS4xM0wxNy41OCwxM0ExNi4yMywxNi4yMywwLDAsMSwxOS43NSw4LjlhNy42'@;
put 'OCw3LjY4LDAsMCwxLDQuMTEtM2MzLjM0LS44OSw2LjM0LjYsNy4zNCwyLjY1LDEuNTUsMy4xOC44NSw2LjcyLTIuMTQsMTAuODFBNTcuMTYsNTcuMTYsMCwwLDEsMTgsMzAuMTYsNTcuMTYsNTcuMTYsMCwwLDEsNi45NCwxOS4zM2MtMy00LjEtMy42OS03LjY0LTIuMTQtMTAuODFhNS45LDUu'@;
put 'OSwwLDAsMSw1LjMzLTIuOTMsNy4zMSw3LjMxLDAsMCwxLDIsLjI5LDcuNyw3LjcsMCwwLDEsMy4zOCwybC4xNS0uM2ExMC42NiwxMC42NiwwLDAsMSwxLTEuNDEsOS42NCw5LjY0LDAsMCwwLTMuOTQtMi4yMkM4LjIsMi42Niw0LjM0LDQuODksMyw3LjY0Yy0xLjg4LDMuODUtMS4xLDguMTgs'@;
put 'Mi4zMiwxMi44N0M4LDI0LjE4LDExLjgzLDI3LjksMTcuMzksMzIuMjJhMSwxLDAsMCwwLDEuMjMsMGM1LjU1LTQuMzEsOS4zOS04LDEyLjA3LTExLjcxQzM0LjEsMTUuODIsMzQuODgsMTEuNDksMzMsNy42NFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+'@;
put 'XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMsNy42NGMtMS4zNC0yLjc1LTUuMi01LTkuNjktMy42OUExMS41NSwxMS41NSwwLDAsMCwxOC4xOSw3LjVhMTYuODksMTYuODksMCwwLDAtMi40OCw0LjU2TDIyLjI3LDE1LDE2LjcsMjAuMjYsMTksMjNsLTEuNTcsMS4zNC0zLjYtNC4yMiw0Ljc0'@;
put 'LTQuNTEtNS40NC0yLjQxYTE5LjQ5LDE5LjQ5LDAsMCwxLDIuMy01LjUsMTQuNzcsMTQuNzcsMCwwLDEsMS4wNi0xLjU0bC4wNiwwYTkuNjYsOS42NiwwLDAsMC0zLjg5LTIuMThDOC4xOSwyLjY2LDQuMzQsNC44OSwzLDcuNjRjLTEuODgsMy44NS0xLjEsOC4xOCwyLjMyLDEyLjg3QzgsMjQu'@;
put 'MTgsMTEuODMsMjcuOSwxNy4zOSwzMi4yMmExLDEsMCwwLDAsMS4yMywwYzUuNTUtNC4zMSw5LjM5LTgsMTIuMDctMTEuNzFDMzQuMSwxNS44MiwzNC44OCwxMS40OSwzMyw3LjY0WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPicpLHkuQ2xyU2hhcGVUYWxrQnVi'@;
put 'Ymxlcz0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjMsMjZhMSwxLDAsMCwxLTEsMUg4Yy0uMjIsMC0uNDMuMi0uNjEuMzNMNCwzMFYxNGExLDEsMCwwLDEsMS0xSDguODZWMTFINWEzLDMsMCwwLDAtMywzVjMyYTEsMSwwLDAsMCwuNTYuODksMSwxLDAsMCwwLDEtLjFMOC43MSwyOUgy'@;
put 'Mi4xNUEyLjc3LDIuNzcsMCwwLDAsMjUsMjYuMTNWMjVIMjNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMxLDRIMTRhMywzLDAsMCwwLTMsM1YxOWEzLDMsMCwwLDAsMywzSDI3LjU1bDQuNzgsMy43MWExLDEs'@;
put 'MCwwLDAsMSwuMTEsMSwxLDAsMCwwLC41Ny0uOVY3QTMsMywwLDAsMCwzMSw0Wk0zMiwyMi45NCwyOC41LDIwLjIxYTEsMSwwLDAsMC0uNjEtLjIxSDE0YTEsMSwwLDAsMS0xLTFWN2ExLDEsMCwwLDEsMS0xSDMxQTEuMSwxLjEsMCwwLDEsMzIsNy4wNloiIGNsYXNzPSJjbHItaS1vdXRsaW5l'@;
put 'IGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjMsMjZhMSwxLDAsMCwxLTEsMUg4Yy0uMjIsMC0uNDMuMi0uNjEuMzNMNCwzMFYxNGExLDEsMCwwLDEsMS0xSDguODZWMTFINWEzLDMsMCwwLDAtMywzVjMyYTEsMSwwLDAsMCwuNTYuODksMSwxLDAsMCww'@;
put 'LDEtLjFMOC43MSwyOUgyMi4xNUEyLjc3LDIuNzcsMCwwLDAsMjUsMjYuMTNWMjVIMjNaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMiwxMy4yMnY5LjcyTDI4LjUsMjAuMjFhMSwx'@;
put 'LDAsMCwwLS42MS0uMjFIMTRhMSwxLDAsMCwxLTEtMVY3YTEsMSwwLDAsMSwxLTFIMjIuNWE3LjQ5LDcuNDksMCwwLDEsLjI4LTJIMTRhMywzLDAsMCwwLTMsM1YxOWEzLDMsMCwwLDAsMywzSDI3LjU1bDQuNzgsMy43MWExLDEsMCwwLDAsMSwuMTEsMSwxLDAsMCwwLC41Ny0uOVYxMi4zN0E3'@;
put 'LjQ1LDcuNDUsMCwwLDEsMzIsMTMuMjJaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1v'@;
put 'dXRsaW5lLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNOCwxOVYxMUg1YTMsMywwLDAsMC0zLDNWMzJhMSwxLDAsMCwwLC41Ni44OSwxLDEsMCwwLDAsMS0uMUw4LjcxLDI5SDIyLjE1QTIuNzcsMi43NywwLDAsMCwyNSwyNi4xM1YyNUgxNEE2'@;
put 'LDYsMCwwLDEsOCwxOVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMSw0SDE0YTMsMywwLDAsMC0zLDNWMTlhMywzLDAsMCwwLDMsM0gyNy41NWw0Ljc4LDMuNzFhMSwxLDAsMCwwLDEsLjExLDEsMSwwLDAsMCwuNTct'@;
put 'LjlWN0EzLDMsMCwwLDAsMzEsNFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik04LDE5VjExSDVhMywzLDAsMCwwLTMsM1YzMmExLDEsMCwwLDAsLjU2Ljg5LDEsMSwwLDAsMCwxLS4xTDguNzEsMjlIMjIuMTVBMi43Nywy'@;
put 'Ljc3LDAsMCwwLDI1LDI2LjEzVjI1SDE0QTYsNiwwLDAsMSw4LDE5WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMCwxMy41QTcuNDgsNy40OCwwLDAsMSwyMi43OCw0SDE0YTMsMywwLDAs'@;
put 'MC0zLDNWMTlhMywzLDAsMCwwLDMsM0gyNy41NWw0Ljc4LDMuNzFhMSwxLDAsMCwwLDEsLjExLDEsMSwwLDAsMCwuNTctLjlWMTIuMzdBNy40NSw3LjQ1LDAsMCwxLDMwLDEzLjVaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCIvPlxuICAg'@;
put 'ICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWJhZGdlZCBjbHItaS1iYWRnZSIvPicpLHkuQ2xyU2hhcGVDaGF0QnViYmxlPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOCwyLjVj'@;
put 'LTguODIsMC0xNiw2LjI4LTE2LDE0czcuMTgsMTQsMTYsMTRhMTgsMTgsMCwwLDAsNC44OC0uNjhsNS41MywzLjUyYTEsMSwwLDAsMCwxLjU0LS44NGwwLTYuNzNhMTMsMTMsMCwwLDAsNC05LjI3QzM0LDguNzgsMjYuODIsMi41LDE4LDIuNVpNMjguMjksMjQuNjFhMSwxLDAsMCwwLS4zMi43'@;
put 'M2wwLDUuMzQtNC4zOC0yLjc5YTEsMSwwLDAsMC0uODMtLjExQTE2LDE2LDAsMCwxLDE4LDI4LjVjLTcuNzIsMC0xNC01LjM4LTE0LTEyczYuMjgtMTIsMTQtMTIsMTQsNS4zOCwxNCwxMkExMS4wOCwxMS4wOCwwLDAsMSwyOC4yOSwyNC42MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1p'@;
put 'LW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI1LDE1LjVIMTFhMSwxLDAsMCwwLDAsMkgyNWExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjEuNzUsMjAu'@;
put 'NWgtNy41YTEsMSwwLDAsMCwwLDJoNy41YTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMS4yOCwxMi41SDI0LjcyYTEsMSwwLDAsMCwwLTJIMTEuMjhhMSwxLDAsMCwwLDAsMloiIGNs'@;
put 'YXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjM4LDEyLjY5YTcuNDMsNy40MywwLDAsMS0xLjg5LjY2QTEwLjM1LDEwLjM1LDAsMCwxLDMyLDE2LjVhMTEuMDgsMTEuMDgsMCwwLDEtMy43MSw4LjExLDEsMSwwLDAs'@;
put 'MC0uMzIuNzNsMCw1LjM0LTQuMzgtMi43OWExLDEsMCwwLDAtLjgzLS4xMUExNiwxNiwwLDAsMSwxOCwyOC41Yy03LjcyLDAtMTQtNS4zOC0xNC0xMnM2LjI4LTEyLDE0LTEyYTE2LDE2LDAsMCwxLDQuNTUuNjZBNy40NCw3LjQ0LDAsMCwxLDIzLDMuMjJhMTgsMTgsMCwwLDAtNS0uNzJjLTgu'@;
put 'ODIsMC0xNiw2LjI4LTE2LDE0czcuMTgsMTQsMTYsMTRhMTgsMTgsMCwwLDAsNC44OC0uNjhsNS41MywzLjUyYTEsMSwwLDAsMCwxLjU0LS44NGwwLTYuNzNhMTMsMTMsMCwwLDAsNC05LjI3QTEyLjMyLDEyLjMyLDAsMCwwLDMzLjM4LDEyLjY5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJh'@;
put 'ZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTExLDE1LjVhMSwxLDAsMCwwLDAsMkgyNWExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiAvPlxu'@;
put 'ICAgICAgICAgICAgPHBhdGggZD0iTTE0LjI1LDIwLjVhMSwxLDAsMCwwLDAsMmg3LjVhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMC4yOCwxMS41YTEs'@;
put 'MSwwLDAsMCwxLDFIMjQuNzJhMSwxLDAsMCwwLC44My0uNDdBNy41Myw3LjUzLDAsMCwxLDI0LDEwLjVIMTEuMjhBMSwxLDAsMCwwLDEwLjI4LDExLjVaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8'@;
put 'Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiICBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC01LS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsMi41Yy04LjgyLDAtMTYsNi4yOC0xNiwxNHM3LjE4LDE0LDE2'@;
put 'LDE0YTE4LDE4LDAsMCwwLDQuODgtLjY4bDUuNTMsMy41MmExLDEsMCwwLDAsMS41NC0uODRsMC02LjczYTEzLDEzLDAsMCwwLDQtOS4yN0MzNCw4Ljc4LDI2LjgyLDIuNSwxOCwyLjVabTgsMTRhMSwxLDAsMCwxLTEsMUgxMWExLDEsMCwwLDEsMC0ySDI1QTEsMSwwLDAsMSwyNiwxNi41Wm0t'@;
put 'My4yNSw1YTEsMSwwLDAsMS0xLDFoLTcuNWExLDEsMCwwLDEsMC0yaDcuNUExLDEsMCwwLDEsMjIuNzUsMjEuNVptLTEyLjQ3LTEwYTEsMSwwLDAsMSwxLTFIMjQuNzJhMSwxLDAsMCwxLDAsMkgxMS4yOEExLDEsMCwwLDEsMTAuMjgsMTEuNVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1z'@;
put 'b2xpZC1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAsMTMuMjVhNy40Niw3LjQ2LDAsMCwxLTQuMzUtMS40LDEsMSwwLDAsMS0uOTMuNjVIMTEuMjhhMSwxLDAsMCwxLDAtMkgyNC4yQTcuNDYsNy40NiwwLDAsMSwyMywzLjJhMTgsMTgsMCwwLDAtNS0uN2MtOC44MiwwLTE2'@;
put 'LDYuMjgtMTYsMTRzNy4xOCwxNCwxNiwxNGExOCwxOCwwLDAsMCw0Ljg4LS42OGw1LjUzLDMuNTJhMSwxLDAsMCwwLDEuNTQtLjg0bDAtNi43M2ExMywxMywwLDAsMCw0LTkuMjcsMTIuMzQsMTIuMzQsMCwwLDAtLjY4LTRBNy40Niw3LjQ2LDAsMCwxLDMwLDEzLjI1Wk0yMS43NSwyMi41aC03'@;
put 'LjVhMSwxLDAsMCwxLDAtMmg3LjVhMSwxLDAsMCwxLDAsMlptMy4yNS01SDExYTEsMSwwLDAsMSwwLTJIMjVhMSwxLDAsMCwxLDAsMloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAi'@;
put 'IGN5PSI1Ljc1IiByPSI1IiAgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+JykseS5DbHJTaGFwZVBpY3R1cmU9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMyLDRINEEyLDIsMCwwLDAsMiw2VjMwYTIsMiww'@;
put 'LDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlY2QTIsMiwwLDAsMCwzMiw0Wk00LDMwVjZIMzJWMzBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTguOTIsMTRhMywzLDAsMSwwLTMtM0EzLDMsMCwwLDAsOC45Miwx'@;
put 'NFptMC00LjZBMS42LDEuNiwwLDEsMSw3LjMzLDExLDEuNiwxLjYsMCwwLDEsOC45Miw5LjQxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMi43OCwxNS4zN2wtNS40LDUuNC00LTRhMSwxLDAsMCwwLTEuNDEs'@;
put 'MEw1LjkyLDIyLjl2Mi44M2w2Ljc5LTYuNzlMMTYsMjIuMThsLTMuNzUsMy43NUgxNWw4LjQ1LTguNDVMMzAsMjRWMjEuMThsLTUuODEtNS44MUExLDEsMCwwLDAsMjIuNzgsMTUuMzdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICAgICAgICAgICAg'@;
put 'PHBhdGggZD0iTTExLjkzLDExYTMsMywwLDEsMC0zLDNBMywzLDAsMCwwLDExLjkzLDExWm0tNC42LDBhMS42LDEuNiwwLDEsMSwxLjYsMS42QTEuNiwxLjYsMCwwLDEsNy4zMywxMVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIv'@;
put 'PlxuICAgICAgICAgICAgPHBhdGggZD0iTTE3LjM4LDIwLjc3bC00LTRhMSwxLDAsMCwwLTEuNDEsMEw1LjkyLDIyLjl2Mi44M2w2Ljc5LTYuNzlMMTYsMjIuMThsLTMuNzUsMy43NUgxNWw4LjQ1LTguNDVMMzAsMjRWMjEuMThsLTUuODEtNS44MWExLDEsMCwwLDAtMS40MSwwWiIgY2xhc3M9'@;
put 'ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIsMTMuMjJWMzBINFY2SDIyLjVhNy40OSw3LjQ5LDAsMCwxLC4yOC0ySDRBMiwyLDAsMCwwLDIsNlYzMGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAs'@;
put 'MCwyLTJWMTIuMzRBNy40NSw3LjQ1LDAsMCwxLDMyLDEzLjIyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1i'@;
put 'YWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLDRINEEyLDIsMCwwLDAsMiw2VjMwYTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlY2QTIsMiwwLDAsMCwzMiw0Wk04LjkyLDhhMywzLDAsMSwxLTMs'@;
put 'M0EzLDMsMCwwLDEsOC45Miw4Wk02LDI3VjIyLjlsNi02LjA4YTEsMSwwLDAsMSwxLjQxLDBMMTYsMTkuMzUsOC4zMiwyN1ptMjQsMEgxMS4xNWw2LjIzLTYuMjMsNS40LTUuNGExLDEsMCwwLDEsMS40MSwwTDMwLDIxLjE4WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgt'@;
put 'MSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLDEzLjVBNy40OCw3LjQ4LDAsMCwxLDIyLjc4LDRINEEyLDIsMCwwLDAsMiw2VjMwYTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYxMi4zNEE3LjQ2LDcuNDYsMCwwLDEsMzAsMTMuNVpNOC45Miw4YTMsMywwLDEsMS0zLDNBMywz'@;
put 'LDAsMCwxLDguOTIsOFpNNiwyN1YyMi45bDYtNi4wOGExLDEsMCwwLDEsMS40MSwwTDE2LDE5LjM1LDguMzIsMjdabTI0LDBIMTEuMTVsNi4yMy02LjIzLDUuNC01LjRhMSwxLDAsMCwxLDEuNDEsMEwzMCwyMS4xOFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBh'@;
put 'dGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+JykseS5DbHJTaGFwZUhhcHB5RmFjZT0oMCxnLmNsckljb25TVkcp'@;
put 'KCc8cGF0aCBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm0wLDMwQTE0LDE0LDAsMSwxLDMyLDE4LDE0LDE0LDAsMCwxLDE4LDMyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9'@;
put 'IjEwLjg5IiBjeT0iMTMuODkiIHI9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIyNS4wNSIgY3k9IjEzLjg5IiByPSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxu'@;
put 'ICAgICAgICAgICAgPHBhdGggZD0iTTE4LjEzLDI4LjIxYTguNjcsOC42NywwLDAsMCw4LjI2LTZIOS44N0E4LjY3LDguNjcsMCwwLDAsMTguMTMsMjguMjFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDJB'@;
put 'MTYsMTYsMCwxLDAsMzQsMTgsMTYsMTYsMCwwLDAsMTgsMlpNOC44OSwxMy44OWEyLDIsMCwxLDEsMiwyQTIsMiwwLDAsMSw4Ljg5LDEzLjg5Wm05LjI0LDE0LjMyYTguNjcsOC42NywwLDAsMS04LjI2LTZIMjYuMzhBOC42Nyw4LjY3LDAsMCwxLDE4LjEzLDI4LjIxWm02LjkzLTEyLjMyYTIs'@;
put 'MiwwLDEsMSwyLTJBMiwyLDAsMCwxLDI1LjA1LDE1Ljg5WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPicpLHkuQ2xyU2hhcGVOZXV0cmFsRmFjZT0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjQuMDUsMjIuMDZoLTEyYTEsMSwwLDAsMCwwLDJoMTJhMSwx'@;
put 'LDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm0wLDMwQTE0LDE0LDAsMSwxLDMyLDE4LDE0LDE0LDAsMCwxLDE4LDMyWiIg'@;
put 'Y2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjI1LjE2IiBjeT0iMTQuMjgiIHI9IjEuOCIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9'@;
put 'IjExLjE2IiBjeT0iMTQuMjgiIHI9IjEuOCIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJabTcuMDUsMjEuMDZhMSwxLDAsMCwxLTEsMWgtMTJh'@;
put 'MSwxLDAsMCwxLDAtMmgxMkExLDEsMCwwLDEsMjUuMDUsMjMuMDZaTTI3LDE0LjI4YTEuOCwxLjgsMCwxLDEtMS44LTEuOEExLjgsMS44LDAsMCwxLDI3LDE0LjI4Wm0tMTUuOCwxLjhhMS44LDEuOCwwLDEsMSwxLjgtMS44QTEuOCwxLjgsMCwwLDEsMTEuMTYsMTYuMDhaIiBjbGFzcz0iY2xy'@;
put 'LWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+JykseS5DbHJTaGFwZVNhZEZhY2U9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE4LDJBMTYsMTYsMCwxLDAsMzQsMTgsMTYsMTYsMCwwLDAsMTgsMlptMCwzMEExNCwxNCwwLDEsMSwzMiwxOCwxNCwxNCwwLDAsMSwxOCwzMloiIGNs'@;
put 'YXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIyNS4xNiIgY3k9IjE0LjI4IiByPSIxLjgiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIx'@;
put 'MS40MSIgY3k9IjE0LjI4IiByPSIxLjgiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTguMTYsMjBhOSw5LDAsMCwwLTcuMzMsMy43OCwxLDEsMCwxLDAsMS42MywxLjE2LDcsNywwLDAsMSwxMS4zMS0uMTMsMSwx'@;
put 'LDAsMCwwLDEuNi0xLjJBOSw5LDAsMCwwLDE4LjE2LDIwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJabTksMTIuMjhhMS44LDEuOCwwLDEs'@;
put 'MS0xLjgtMS44QTEuOCwxLjgsMCwwLDEsMjcsMTQuMjhabS0xNS41NSwxLjhhMS44LDEuOCwwLDEsMSwxLjgtMS44QTEuOCwxLjgsMCwwLDEsMTEuNDEsMTYuMDhabTE0LDcuNTNhMSwxLDAsMCwxLTEuNiwxLjIsNyw3LDAsMCwwLTExLjMxLjEzLDEsMSwwLDEsMS0xLjYzLTEuMTYsOSw5LDAs'@;
put 'MCwxLDE0LjU0LS4xN1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz4nKSx5LkNsclNoYXBlVGh1bWJzVXA9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI0LDI2Yy0yLjkyLDEuODItNy4zLDQtOS4zNyw0aC02YTE2LjY4LDE2LjY4LDAsMCwxLTMuMzEtNi4w'@;
put 'OEEyNi43MSwyNi43MSwwLDAsMSw0LDE2aDlWNmEyLjA1LDIuMDUsMCwwLDEsMS4yNi0xLjY5Yy43NywyLDIuNjIsNi41Nyw0LjIzLDguNzJBMTEuMzksMTEuMzksMCwwLDAsMjQsMTYuOTFWMTQuNzhhOS4xMyw5LjEzLDAsMCwxLTMuOTEtM2MtMS44OC0yLjUxLTQuMjktOS4xMS00LjMxLTku'@;
put 'MTdBMSwxLDAsMCwwLDE0LjU5LDJDMTMuMjUsMi4zOCwxMSwzLjYsMTEsNnY4SDNhMSwxLDAsMCwwLTEsMSwyOSwyOSwwLDAsMCwxLjQsOS42MmMxLjg5LDUuNCw0LjEsNy4xNCw0LjIsNy4yMmExLDEsMCwwLDAsLjYxLjIxaDYuNDJjMi40MywwLDYuNTUtMiw5LjM3LTMuNjNaIiBjbGFzcz0i'@;
put 'Y2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zNCwzMUgyN2ExLDEsMCwwLDEtMS0xVjE0YTEsMSwwLDAsMSwxLTFoN1ptLTYtMmg0VjE1SDI4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+'@;
put 'XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTkuNjMsMTIuMTJDMTcuNTEsOS4yOCwxNC44OCwyLDE0Ljg4LDJTMTIsMi44MywxMiw1LjI1VjE1SDIuMjNhMjkuNDYsMjkuNDYsMCwwLDAsMS40NCw5Ljc0QzUuNjEsMzAuMjcsNy44LDMyLDcuOCwzMmg2Ljg2QzE2LjksMzIsMjEsMzAuMDYsMjQs'@;
put 'MjguMzFWMTUuNTFBMTAuODQsMTAuODQsMCwwLDEsMTkuNjMsMTIuMTJaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI3LDEzYTEsMSwwLDAsMC0xLDFWMzBhMSwxLDAsMCwwLDEsMWg3VjEzWiIgY2xhc3M9ImNsci1p'@;
put 'LXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz4nKSx5LkNsclNoYXBlVGh1bWJzRG93bj0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTIsMTBjMi45Mi0xLjgyLDcuMy00LDkuMzctNGg2YTE2LjY4LDE2LjY4LDAsMCwxLDMuMzEsNi4wOEEyNi43MSwyNi43MSwwLDAsMSwzMiwyMEgy'@;
put 'M1YzMGEyLjA1LDIuMDUsMCwwLDEtMS4yNiwxLjY5Yy0uNzctMi0yLjYyLTYuNTctNC4yMy04LjcyQTExLjM5LDExLjM5LDAsMCwwLDEyLDE5LjA5djIuMTNhOS4xMyw5LjEzLDAsMCwxLDMuOTEsM2MxLjg4LDIuNTEsNC4yOSw5LjExLDQuMzEsOS4xN2ExLDEsMCwwLDAsMS4xOS42M0MyMi43'@;
put 'NSwzMy42MiwyNSwzMi40LDI1LDMwVjIyaDhhMSwxLDAsMCwwLDEtMSwyOSwyOSwwLDAsMC0xLjQtOS42MmMtMS44OS01LjQtNC4xLTcuMTQtNC4yLTcuMjJBMSwxLDAsMCwwLDI3Ljc5LDRIMjEuMzdDMTguOTQsNCwxNC44Myw2LDEyLDcuNjNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHIt'@;
put 'aS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yLDVIOWExLDEsMCwwLDEsMSwxVjIyYTEsMSwwLDAsMS0xLDFIMlpNOCw3SDRWMjFIOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0i'@;
put 'TTE2LjM3LDIzLjg0YzIuMTIsMi44NCw0Ljc2LDEwLjA3LDQuNzYsMTAuMDdTMjQsMzMuMTMsMjQsMzAuNzFWMjFoOS43N2EyOS40NiwyOS40NiwwLDAsMC0xLjQ0LTkuNzRDMzAuMzksNS42OCwyOC4yLDQsMjguMiw0SDIxLjM1QzE5LjEsNCwxNSw1LjksMTIsNy42NXYxMi44QTEwLjg0LDEw'@;
put 'Ljg0LDAsMCwxLDE2LjM3LDIzLjg0WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik05LDIzYTEsMSwwLDAsMCwxLTFWNkExLDEsMCwwLDAsOSw1SDJWMjNaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0'@;
put 'aC0yIiAvPicpLHkuQ2xyU2hhcGVDcm93bj0oMCxnLmNsckljb25TVkcpKCdcbiAgPHBhdGggZD0iTTQsMTMuMzNBMS4zOSwxLjM5LDAsMSwwLDIuNiwxNC43MiwxLjM5LDEuMzksMCwwLDAsNCwxMy4zM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4g'@;
put 'IDxwYXRoIGQ9Ik0zMS44MSwxNS44NGEyMC4zNSwyMC4zNSwwLDAsMC00LjU4LDEuNDMsMjIuNywyMi43LDAsMCwwLTMuNDgsMi4xQTE3LjY5LDE3LjY5LDAsMCwxLDIyLDE2LjU3YTQ3LjY1LDQ3LjY1LDAsMCwxLTIuOC03LjY5LDEsMSwwLDAsMC0xLS43NCwxLDEsMCwwLDAtMSwuNzQsNDYu'@;
put 'NzEsNDYuNzEsMCwwLDEtMi44LDcuNjksMTcsMTcsMCwwLDEtMS43NiwyLjgsMjIuNywyMi43LDAsMCwwLTMuNDgtMi4xLDIwLjY2LDIwLjY2LDAsMCwwLTQuNTgtMS40MywxLDEsMCwwLDAtMSwuMzksMSwxLDAsMCwwLS4wOSwxLjA1QTUwLjEzLDUwLjEzLDAsMCwxLDcuODIsMzEuMTdhMSwx'@;
put 'LDAsMCwwLDEsLjgzSDI3LjYyYTEsMSwwLDAsMCwxLS44Myw1MC4xNSw1MC4xNSwwLDAsMSw0LjI2LTEzLjg5LDEsMSwwLDAsMC0uMDktMS4wNUExLDEsMCwwLDAsMzEuODEsMTUuODRaTTI2Ljc5LDMwSDkuNjRhNTUuNjYsNTUuNjYsMCwwLDAtMy40LTExLjcxLDE1Ljc1LDE1Ljc1LDAsMCwx'@;
put 'LDIuMDkuNzgsMjAsMjAsMCwwLDEsMy44NSwyLjQ1LDEsMSwwLDAsMCwxLjM5LS4wOSwxOS4yOCwxOS4yOCwwLDAsMCwyLjY3LTQsNDMuNDYsNDMuNDYsMCwwLDAsMi00Ljg5LDQxLjc0LDQxLjc0LDAsMCwwLDIsNC44OSwxOS45MiwxOS45MiwwLDAsMCwyLjY2LDQsMSwxLDAsMCwwLDEuNC4w'@;
put 'OSwxOS4yMSwxOS4yMSwwLDAsMSwzLjg1LTIuNDUsMTQuNzcsMTQuNzcsMCwwLDEsMi4wOS0uNzhBNTUuMDcsNTUuMDcsMCwwLDAsMjYuNzksMzBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICA8ZWxsaXBzZSBjeD0iMzMuODMiIGN5PSIxMy4zMyIg'@;
put 'cng9IjEuMzkiIHJ5PSIxLjM5IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICA8cGF0aCBkPSJNMTguMjIsNi4zOUExLjM5LDEuMzksMCwxLDAsMTYuODQsNSwxLjM5LDEuMzksMCwwLDAsMTguMjIsNi4zOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNs'@;
put 'ci1pLW91dGxpbmUtcGF0aC00Ii8+XG4gIDxwYXRoIGQ9Ik0xOC4yMywyNi4zNGExLjExLDEuMTEsMCwxLDAsMS4xLDEuMUExLjEsMS4xLDAsMCwwLDE4LjIzLDI2LjM0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiLz5cbiAgPHBhdGggZD0iTTEyLjU4LDI2'@;
put 'LjM0YTEuMTEsMS4xMSwwLDEsMCwxLjEsMS4xQTEuMSwxLjEsMCwwLDAsMTIuNTgsMjYuMzRaIi8+PHBhdGggZD0iTTIzLjg5LDI2LjM0YTEuMTEsMS4xMSwwLDEsMCwxLjEsMS4xQTEuMSwxLjEsMCwwLDAsMjMuODksMjYuMzRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5l'@;
put 'LXBhdGgtNiIvPlxuXG4gIDxwYXRoIGQ9Ik0yLjYsMTEuOTNBMS40LDEuNCwwLDEsMCw0LDEzLjMzLDEuNCwxLjQsMCwwLDAsMi42LDExLjkzWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICA8ZWxsaXBzZSBjeD0iMzMuODMiIGN5PSIxMy4zMyIgcng9IjEu'@;
put 'MzkiIHJ5PSIxLjM5IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIi8+XG4gIDxwYXRoIGQ9Ik0xOC4yMiw2LjM5QTEuMzksMS4zOSwwLDEsMCwxNi44NCw1LDEuMzksMS4zOSwwLDAsMCwxOC4yMiw2LjM5WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBh'@;
put 'dGgtMyIvPlxuICA8cGF0aCBkPSJNMzEuNjMsMTYuMUExOC42MSwxOC42MSwwLDAsMCwyOCwxNy4zNGEyMS41NywyMS41NywwLDAsMC00LDIuNDksMTkuMiwxOS4yLDAsMCwxLTIuMjYtMy40OSw0OC45Miw0OC45MiwwLDAsMS0yLjUyLTYuNTgsMSwxLDAsMCwwLTEtLjcxaDBhMSwxLDAsMCww'@;
put 'LTEsLjcxLDQ4LjQyLDQ4LjQyLDAsMCwxLTIuNTIsNi41OCwxOC42OSwxOC42OSwwLDAsMS0yLjI2LDMuNDgsMjIuODEsMjIuODEsMCwwLDAtNC0yLjQ4QTE4LjgzLDE4LjgzLDAsMCwwLDQuOSwxNi4xYTEsMSwwLDAsMC0xLC4zMywxLDEsMCwwLDAtLjEzLDEuMDcsNTUuOSw1NS45LDAsMCwx'@;
put 'LDQsMTMuNSwxLDEsMCwwLDAsMSwuODNoMTlhMSwxLDAsMCwwLDEtLjgzLDU1LjksNTUuOSwwLDAsMSw0LTEzLjUsMSwxLDAsMCwwLS4xMy0xLjA3QTEsMSwwLDAsMCwzMS42MywxNi4xWk0xMS4wOCwyOC41NWExLjExLDEuMTEsMCwxLDEsMS4xLTEuMTFBMS4xMSwxLjExLDAsMCwxLDExLjA4'@;
put 'LDI4LjU1Wm03LjE1LDBhMS4xMSwxLjExLDAsMCwxLDAtMi4yMSwxLjExLDEuMTEsMCwwLDEsMCwyLjIxWm03LjE2LDBhMS4xMSwxLjExLDAsMSwxLDEuMS0xLjExQTEuMTEsMS4xMSwwLDAsMSwyNS4zOSwyOC41NVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTQiLz5c'@;
put 'biAgJykseS5DbHJTaGFwZUhhc2h0YWc9KDAsZy5jbHJJY29uU1ZHKSgnXG4gIDxwYXRoIGQ9Ik0zMiwxMkgyNS4zNGwxLjU1LTcuNzRhMSwxLDAsMCwwLTItLjM5TDIzLjMsMTJIMTUuMTFsMS41NS03Ljc0YTEsMSwwLDAsMC0yLS4zOUwxMy4wNywxMkg2YTEsMSwwLDAsMCwwLDJoNi42N2wt'@;
put 'MS42LDhINGExLDEsMCwwLDAsMCwyaDYuNjZMOS4xMSwzMS43NGExLDEsMCwwLDAsLjc5LDEuMTcuNjguNjgsMCwwLDAsLjIsMCwxLDEsMCwwLDAsMS0uOEwxMi43LDI0aDguMTlsLTEuNTUsNy43NGExLDEsMCwwLDAsLjc5LDEuMTcuNjIuNjIsMCwwLDAsLjE5LDAsMSwxLDAsMCwwLDEtLjhM'@;
put 'MjIuOTMsMjRIMzBhMSwxLDAsMCwwLDAtMkgyMy4zM2wxLjYxLThIMzJhMSwxLDAsMCwwLDAtMlpNMjEuMjksMjJIMTMuMWwxLjYxLThIMjIuOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG5cbiAgPHBhdGggZD0iTTMxLjg3LDEwSDI2LjMybDEtNC44'@;
put 'M0ExLDEsMCwwLDAsMjYuMzUsNGgtMmExLDEsMCwwLDAtMSwuNzhMMjIuMzMsMTBoLTUuNGwxLTQuODNBMSwxLDAsMCwwLDE3LDRIMTVhMSwxLDAsMCwwLTEsLjc4TDEzLDEwSDdhMSwxLDAsMCwwLTEsLjhsLS40MSwyYTEsMSwwLDAsMCwxLDEuMmg1LjU1TDEwLjUsMjJoLTZhMSwxLDAsMCww'@;
put 'LTEsLjhsLS40MSwyYTEsMSwwLDAsMCwxLDEuMkg5LjY4bC0xLDQuODNhMSwxLDAsMCwwLDEsMS4xN2gyYTEsMSwwLDAsMCwuOTUtLjc4TDEzLjY3LDI2aDUuNGwtMSw0LjgzQTEsMSwwLDAsMCwxOSwzMmgyYTEsMSwwLDAsMCwxLS43OEwyMy4wNSwyNmg2YTEsMSwwLDAsMCwxLS44bC40LTJh'@;
put 'MSwxLDAsMCwwLTEtMS4ySDIzLjg3bDEuNjMtOGg2YTEsMSwwLDAsMCwxLS44bC40MS0yQTEsMSwwLDAsMCwzMS44NywxMFptLTEyLDEyaC01LjRsMS42NC04aDUuNFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgJykseS5Tb2NpYWxTaGFwZXM9e2Nyb3du'@;
put 'OnkuQ2xyU2hhcGVDcm93bixzaGFyZTp5LkNsclNoYXBlU2hhcmUsc3Rhcjp5LkNsclNoYXBlU3RhciwiaGFsZi1zdGFyIjp5LkNsclNoYXBlSGFsZlN0YXIsYm9va21hcms6eS5DbHJTaGFwZUJvb2ttYXJrLGVudmVsb3BlOnkuQ2xyU2hhcGVFbnZlbG9wZSxjYWxlbmRhcjpCLkNsclNoYXBl'@;
put 'Q2FsZW5kYXIsZXZlbnQ6Qi5DbHJTaGFwZUV2ZW50LHRhc2tzOnkuQ2xyU2hhcGVUYXNrcyxmbGFnOnkuQ2xyU2hhcGVGbGFnLGluYm94OnkuQ2xyU2hhcGVJbmJveCxoYXNodGFnOnkuQ2xyU2hhcGVIYXNodGFnLGhlYXJ0OnkuQ2xyU2hhcGVIZWFydCwiaGVhcnQtYnJva2VuIjp5LkNsclNo'@;
put 'YXBlSGVhcnRCcm9rZW4sInRhbGstYnViYmxlcyI6eS5DbHJTaGFwZVRhbGtCdWJibGVzLCJjaGF0LWJ1YmJsZSI6eS5DbHJTaGFwZUNoYXRCdWJibGUscGljdHVyZTp5LkNsclNoYXBlUGljdHVyZSwiaGFwcHktZmFjZSI6eS5DbHJTaGFwZUhhcHB5RmFjZSwibmV1dHJhbC1mYWNlIjp5LkNs'@;
put 'clNoYXBlTmV1dHJhbEZhY2UsInNhZC1mYWNlIjp5LkNsclNoYXBlU2FkRmFjZSwidGh1bWJzLXVwIjp5LkNsclNoYXBlVGh1bWJzVXAsInRodW1icy1kb3duIjp5LkNsclNoYXBlVGh1bWJzRG93bn0sT2JqZWN0LmRlZmluZVByb3BlcnR5KHkuU29jaWFsU2hhcGVzLCJmYXZvcml0ZSIsKDAs'@;
put 'Xy5kZXNjcmlwdG9yQ29uZmlnKSh5LlNvY2lhbFNoYXBlcy5zdGFyKSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHkuU29jaWFsU2hhcGVzLCJlbWFpbCIsKDAsXy5kZXNjcmlwdG9yQ29uZmlnKSh5LlNvY2lhbFNoYXBlcy5lbnZlbG9wZSkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh5LlNvY2lh'@;
put 'bFNoYXBlcywiZGF0ZSIsKDAsXy5kZXNjcmlwdG9yQ29uZmlnKSh5LlNvY2lhbFNoYXBlcy5jYWxlbmRhcikpLHR5cGVvZiB3aW5kb3c8InUiJiZ3aW5kb3cuaGFzT3duUHJvcGVydHkoIkNsYXJpdHlJY29ucyIpJiZ3aW5kb3cuQ2xhcml0eUljb25zLmFkZCh5LlNvY2lhbFNoYXBlcyl9LCIu'@;
put 'L3Byb2plY3RzL2ljb25zL3NyYy9zaGFwZXMvdGVjaG5vbG9neS1zaGFwZXMudHMiOgovKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAogICAgICAgICAgICAgICAgICAhKioqIC4vcHJvamVjdHMvaWNvbnMvc3JjL3NoYXBlcy90'@;
put 'ZWNobm9sb2d5LXNoYXBlcy50cyAqKiohCiAgICAgICAgICAgICAgICAgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLyohIG5vIHN0YXRpYyBleHBvcnRzIGZvdW5kICovZnVuY3Rpb24oWCx5LEkpeyJ1c2Ugc3RyaWN0IjtPYmpl'@;
put 'Y3QuZGVmaW5lUHJvcGVydHkoeSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSkseS5DbHJTaGFwZVZNV0FwcD15LkNsclNoYXBlVk09eS5DbHJTaGFwZVJvdXRlcj15LkNsclNoYXBlTmV0d29ya1N3aXRjaD15LkNsclNoYXBlTmV0d29ya1NldHRpbmdzPXkuQ2xyU2hhcGVOZXR3b3JrR2xvYmU9'@;
put 'eS5DbHJTaGFwZVRhYmxldD15LkNsclNoYXBlTW9iaWxlPXkuQ2xyU2hhcGVCYXR0ZXJ5PXkuQ2xyU2hhcGVBcHBsaWNhdGlvbj15LkNsclNoYXBlQ29kZT15LkNsclNoYXBlVGVybWluYWw9eS5DbHJTaGFwZURpc3BsYXk9eS5DbHJTaGFwZUNvbXB1dGVyPXkuQ2xyU2hhcGVGbG9wcHk9eS5D'@;
put 'bHJTaGFwZVBsdWdpbj15LkNsclNoYXBlRG93bmxvYWRDbG91ZD15LkNsclNoYXBlVXBsb2FkQ2xvdWQ9eS5DbHJTaGFwZUV4cG9ydD15LkNsclNoYXBlSW1wb3J0PXkuQ2xyU2hhcGVTaGllbGRYPXkuQ2xyU2hhcGVTaGllbGQ9eS5DbHJTaGFwZVNoaWVsZENoZWNrPXkuQ2xyU2hhcGVSZXNv'@;
put 'dXJjZVBvb2w9eS5DbHJTaGFwZURhdGFDbHVzdGVyPXkuQ2xyU2hhcGVNZW1vcnk9eS5DbHJTaGFwZUNQVT15LkNsclNoYXBlQnVpbGRpbmc9eS5DbHJTaGFwZUFwcGxpY2F0aW9ucz15LkNsclNoYXBlQ2x1c3Rlcj15LkNsclNoYXBlU3RvcmFnZT15LkNsclNoYXBlSG9zdD15LkNsclNoYXBl'@;
put 'RGFzaGJvYXJkPXkuQ2xyU2hhcGVNb3VzZT15LkNsclNoYXBlS2V5Ym9hcmQ9eS5DbHJTaGFwZURldmljZXM9eS5DbHJTaGFwZUJhY2t1cD15LkNsclNoYXBlQmFja3VwUmVzdG9yZT15LkNsclNoYXBlSGFyZERpc2s9eS5DbHJTaGFwZVJhY2tTZXJ2ZXI9eS5DbHJTaGFwZVdpZmk9eS5DbHJT'@;
put 'aGFwZUJ1bmRsZT15LkNsclNoYXBlQmxvY2tzR3JvdXA9eS5DbHJTaGFwZUJsb2NrPXkuQ2xyU2hhcGVMYXllcnM9eS5DbHJTaGFwZVVuaW5zdGFsbD15LkNsclNoYXBlSW5zdGFsbD15LkNsclNoYXBlTm9XaWZpPXkuQ2xyU2hhcGVQaG9uZUhhbmRzZXQ9eS5DbHJTaGFwZVJ1bGVyUGVuY2ls'@;
put 'PXZvaWQgMCx5LlRlY2hub2xvZ3lTaGFwZXM9eS5DbHJTaGFwZUZpbGVTaGFyZTI9eS5DbHJTaGFwZUNpQ2Q9eS5DbHJTaGFwZUFuaW1hdGlvbj15LkNsclNoYXBlVGFwZURyaXZlPXkuQ2xyU2hhcGVNZWRpYUNoYW5nZXI9eS5DbHJDb250cm9sTHVuPXkuQ2xyU2hhcGVQb2Q9eS5DbHJTaGFw'@;
put 'ZU5vZGU9eS5DbHJTaGFwZU5hbWVzcGFjZT15LkNsclNoYXBlTm9kZXM9eS5DbHJTaGFwZU5vZGVHcm91cD15LkNsclNoYXBlU3RvcmFnZUFkYXB0ZXI9eS5DbHJTaGFwZUhvc3RHcm91cD15LkNsclNoYXBlU3F1aWQ9eS5DbHJTaGFwZUNhcGFjaXRvcj15LkNsclNoYXBlUmVzaXN0b3I9eS5D'@;
put 'bHJTaGFwZUluZHVjdG9yPXkuQ2xyU2hhcGVSYWRhcj15LkNsclNoYXBlVXNiPXkuQ2xyU2hhcGVRckNvZGU9eS5DbHJTaGFwZUZpbGVTaGFyZT15LkNsclNoYXBlQ29udGFpbmVyVm9sdW1lPXkuQ2xyU2hhcGVDb250YWluZXI9eS5DbHJTaGFwZUNkRHZkPXkuQ2xyU2hhcGVCYXJDb2RlPXku'@;
put 'Q2xyU2hhcGVBdG9tPXkuQ2xyU2hhcGVBc3NpZ25Vc2VyPXkuQ2xyU2hhcGVQcm9jZXNzT25WTT15LkNsclNoYXBlQmx1ZXRvb3RoT2ZmPXkuQ2xyU2hhcGVCbHVldG9vdGg9eS5DbHJTaGFwZVNTRD15LkNsclNoYXBlTlZNZT15LkNsclNoYXBlSGFyZERyaXZlRGlza3M9eS5DbHJTaGFwZUhh'@;
put 'cmREcml2ZT15LkNsclNoYXBlQWRtaW5pc3RyYXRvcj15LkNsclNoYXBlRmxhc2s9eS5DbHJTaGFwZUhlbGl4PXkuQ2xyU2hhcGVEZXBsb3k9eS5DbHJTaGFwZUNsb3VkVHJhZmZpYz15LkNsclNoYXBlQ2xvdWRTY2FsZT15LkNsclNoYXBlQ2xvdWROZXR3b3JrPXkuQ2xyU2hhcGVVbmxpbms9'@;
put 'eS5DbHJTaGFwZUxpbms9eS5DbHJTaGFwZURpc2Nvbm5lY3Q9eS5DbHJTaGFwZUNvbm5lY3Q9eS5DbHJTaGFwZVVuYXJjaGl2ZT15LkNsclNoYXBlQXJjaGl2ZT15LkNsclNoYXBlQ2VydGlmaWNhdGU9dm9pZCAwO3ZhciBfPUkoCi8qISAuLi91dGlscy9kZXNjcmlwdG9yLWNvbmZpZyAqLwoi'@;
put 'Li9wcm9qZWN0cy9pY29ucy9zcmMvdXRpbHMvZGVzY3JpcHRvci1jb25maWcudHMiKSxnPUkoCi8qISAuLi91dGlscy9zdmctdGFnLWdlbmVyYXRvciAqLwoiLi9wcm9qZWN0cy9pY29ucy9zcmMvdXRpbHMvc3ZnLXRhZy1nZW5lcmF0b3IudHMiKTt5LkNsclNoYXBlUnVsZXJQZW5jaWw9KDAs'@;
put 'Zy5jbHJJY29uU1ZHKSgnPHBvbHlnb24gY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIHBvaW50cz0iOSAxNy40MSA5IDI3IDE4LjU5IDI3IDE2LjU5IDI1IDExIDI1IDExIDE5LjQxIDkgMTcuNDEiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1v'@;
put 'dXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMzQuODcsMzIuMjksMzIsMjkuMzhWMzJINFYyNy44NUg2di0xLjZINFYxOS42SDZWMThINFYxMS42SDZWMTBINFY0LjQxTDE5Ljk0LDIwLjI2VjE3LjQ0TDMuNzEsMS4yOUExLDEsMCwwLDAsMiwyVjMzYTEsMSwwLDAsMCwxLDFIMzQu'@;
put 'MTZhMSwxLDAsMCwwLC43MS0xLjcxWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIGQ9Ik0yNCwzMGg0YTIsMiwwLDAsMCwyLTJWOC43TDI3LjcsNC40N2EyLDIsMCwwLDAtMS43Ni0xaDBhMiwyLDAsMCwwLTEuNzYsMS4w'@;
put 'OEwyMiw4LjcyVjI4QTIsMiwwLDAsMCwyNCwzMFpNMjQsOS4ybDEuOTQtMy43N0wyOCw5LjIxVjI0SDI0Wm0wLDE2LjQzaDR2Mi40NEgyNFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zNC44NywzMi4yMSwzMCwyNy4z'@;
put 'N1Y4Ljc1TDI3LjcsNC41MmEyLDIsMCwwLDAtMy41NCwwTDIyLDguNzZWMTkuNDFMMy43MSwxLjIxQTEsMSwwLDAsMCwyLDEuOTJWMTBINC4xN3YxLjZIMlYxOEg0LjE3djEuNkgydjYuNjVINC4xN3YxLjZIMnY1LjA3YTEsMSwwLDAsMCwxLDFIMzQuMTZhMSwxLDAsMCwwLC43MS0xLjcxWk0x'@;
put 'MCwyNlYxNi45NEwxOS4wNywyNlptMTgsMi4xMUgyNFYyNS42OGg0Wm0wLTRIMjRWOS4yNWwxLjk0LTMuNzdMMjgsOS4yNloiLz5cbicpLHkuQ2xyU2hhcGVQaG9uZUhhbmRzZXQ9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRo'@;
put 'LTEiIGQ9Ik0yNy43MywzNS40NGE0LjcyLDQuNzIsMCwwLDEtMS0uMTEsMzMuOTEsMzMuOTEsMCwwLDEtMTYuNjItOC43NSwzMi43MSwzMi43MSwwLDAsMS05LTE2LjI1QTQuNTgsNC41OCwwLDAsMSwyLjQ2LDYuMDVsNC0zLjg1QTIsMiwwLDAsMSw4LDEuNjZhMiwyLDAsMCwxLDEuNDUuODds'@;
put 'NSw3LjM5YTEuNiwxLjYsMCwwLDEtLjExLDEuOWwtMi41MSwzYTE4Ljk0LDE4Ljk0LDAsMCwwLDQuMTcsNS44OWgwYTE5LjI2LDE5LjI2LDAsMCwwLDYuMDcsNC4wOWwzLjExLTIuNDdhMS42NCwxLjY0LDAsMCwxLDEuODYtLjEybDcuNTUsNC44OEEyLDIsMCwwLDEsMzUsMzAuMmwtMy45LDMu'@;
put 'ODZBNC43NCw0Ljc0LDAsMCwxLDI3LjczLDM1LjQ0Wk03Ljg0LDMuNjRsLTQsMy44NWEyLjU0LDIuNTQsMCwwLDAtLjc1LDIuNCwzMC43LDMwLjcsMCwwLDAsOC40MSwxNS4yNiwzMS45LDMxLjksMCwwLDAsMTUuNjQsOC4yMywyLjc1LDIuNzUsMCwwLDAsMi41LS43NGwzLjktMy44Ni03LjI5'@;
put 'LTQuNzEtMy4zNCwyLjY2YTEsMSwwLDAsMS0uOTIuMTcsMjAuMDYsMjAuMDYsMCwwLDEtNy4zNi00Ljc1aDBhMTkuNDksMTkuNDksMCwwLDEtNC44Ny03LjJBMSwxLDAsMCwxLDEwLDE0bDIuNy0zLjIzWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNv'@;
put 'bGlkLXBhdGgtMSIgZD0iTTE1LjIyLDIwLjY0YTIwLjM3LDIwLjM3LDAsMCwwLDcuNCw0Ljc5bDMuNzctM2EuNjcuNjcsMCwwLDEsLjc2LDBsNyw0LjUxYTIsMiwwLDAsMSwuMzMsMy4xOGwtMy4yOCwzLjI0YTQsNCwwLDAsMS0zLjYzLDEuMDcsMzUuMDksMzUuMDksMCwwLDEtMTcuMTUtOUEz'@;
put 'My43OSwzMy43OSwwLDAsMSwxLjE1LDguNmEzLjc4LDMuNzgsMCwwLDEsMS4xLTMuNTVsMy40LTMuMjhhMiwyLDAsMCwxLDMuMTIuMzJMMTMuNDMsOWEuNjMuNjMsMCwwLDEsMCwuNzVsLTMuMDcsMy42OUExOS43NSwxOS43NSwwLDAsMCwxNS4yMiwyMC42NFoiLz5cbicpLHkuQ2xyU2hhcGVO'@;
put 'b1dpZmk9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xOCwyNC40MmE0LDQsMCwxLDAsNCw0QTQsNCwwLDAsMCwxOCwyNC40MlptMCw2YTIsMiwwLDEsMSwyLTJBMiwyLDAsMCwxLDE4LDMwLjQyWiIvPlxuICAg'@;
put 'ICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0yNi4yMSwyMS44NWExLDEsMCwwLDAtLjIzLTEuNCwxMy41NiwxMy41NiwwLDAsMC01LTIuMjNsMy44NywzLjg3QTEsMSwwLDAsMCwyNi4yMSwyMS44NVoiLz5cbiAgICAgICAgICAg'@;
put 'IDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMTguMDUsMTAuNzJhMjAuODgsMjAuODgsMCwwLDAtNC4xNi40M2wxLjc0LDEuNzRhMTksMTksMCwwLDEsMi40Mi0uMTdBMTguNzYsMTguNzYsMCwwLDEsMjguNjQsMTZhMSwxLDAsMCwwLDEuMTIt'@;
put 'MS42NUEyMC43NSwyMC43NSwwLDAsMCwxOC4wNSwxMC43MloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiBkPSJNMzMuNTUsOC4yQTI4LjExLDI4LjExLDAsMCwwLDguMTEsNS4zNkw5LjY5LDYuOTNBMjYsMjYsMCwwLDEs'@;
put 'MzIuNDUsOS44N2ExLDEsMCwwLDAsMS4xLTEuNjdaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgZD0iTTEuODQsNC43NSw0LjI3LDcuMThjLS42Mi4zNC0xLjIzLjctMS44MywxLjFBMSwxLDAsMSwwLDMuNTYsOS45NEM0'@;
put 'LjI2LDkuNDcsNSw5LDUuNzQsOC42NWwzLjg3LDMuODdBMjAuNTksMjAuNTksMCwwLDAsNi4yMywxNC40LDEsMSwwLDAsMCw3LjM2LDE2YTE4LjgyLDE4LjgyLDAsMCwxLDMuNzctMmw0LjE2LDQuMTZBMTMuNTEsMTMuNTEsMCwwLDAsMTAsMjAuNTVhMSwxLDAsMCwwLDEuMTgsMS42MUExMS41'@;
put 'MiwxMS41MiwwLDAsMSwxNywyMGwxMC44LDEwLjgsMS40MS0xLjQxLTI2LTI2WiIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBjeD0iMTgiIGN5PSIyOS41NCIgcj0iMyIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNs'@;
put 'ci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTTI5LjE4LDE3LjcxbC4xMS0uMTdhMS41MSwxLjUxLDAsMCwwLS40Ny0yLjFBMjAuNTcsMjAuNTcsMCwwLDAsMTgsMTIuMzdjLS41NiwwLTEuMTEsMC0xLjY1LjA3bDMuMjEsMy4yMWExNy40MSwxNy40MSwwLDAsMSw3LjYsMi41MkEx'@;
put 'LjQ5LDEuNDksMCwwLDAsMjkuMTgsMTcuNzFaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiBkPSJNMzIuNzYsOS4zOEEyNy45LDI3LjksMCwwLDAsMTAuMTgsNi4yN0wxMi44MSw4LjlBMjQuNjgsMjQuNjgsMCwwLDEsMzEuMSwx'@;
put 'Mi4xMmExLjQ5LDEuNDksMCwwLDAsMi0uNDZsLjExLS4xN0ExLjUxLDEuNTEsMCwwLDAsMzIuNzYsOS4zOFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTQiIGQ9Ik0zLDQuNzVsMy4xLDMuMUEyNy4yOCwyNy4yOCwwLDAsMCwzLjE4'@;
put 'LDkuNDJhMS41MSwxLjUxLDAsMCwwLS40OCwyLjExbC4xMS4xN2ExLjQ5LDEuNDksMCwwLDAsMiwuNDYsMjQuNjksMjQuNjksMCwwLDEsMy42Ny0xLjlsMy4xNCwzLjE0YTIwLjYzLDIwLjYzLDAsMCwwLTQuNTMsMi4wOSwxLjUxLDEuNTEsMCwwLDAtLjQ2LDIuMWwuMTEuMTdhMS40OSwxLjQ5'@;
put 'LDAsMCwwLDIsLjQ2QTE3LjQ2LDE3LjQ2LDAsMCwxLDE0LjI1LDE2bDMuNiwzLjZhMTMuMzksMTMuMzksMCwwLDAtNi43OSwxLjkzLDEuNSwxLjUsMCwwLDAtLjQ2LDIuMDlsLjEuMTZhMS41MiwxLjUyLDAsMCwwLDIuMDYuNDQsMTAuMiwxMC4yLDAsMCwxLDktLjdMMjksMzAuNzVsMS40MS0x'@;
put 'LjQxLTI2LTI2WiIvPlxuJykseS5DbHJTaGFwZUluc3RhbGw9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMC45Miw4SDI2LjU1YTEsMSwwLDAsMCwwLDJIMzFWMzBINVYxMEg5LjM4YTEsMSwwLDAsMCwwLTJI'@;
put 'NS4wOEEyLDIsMCwwLDAsMywxMFYzMGEyLDIsMCwwLDAsMi4wOCwySDMwLjkyQTIsMiwwLDAsMCwzMywzMFYxMEEyLDIsMCwwLDAsMzAuOTIsOFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMTAuMywxOC44N2w3'@;
put 'LDYuODlhMSwxLDAsMCwwLDEuNCwwbDctNi44OWExLDEsMCwwLDAtMS40LTEuNDNMMTksMjIuNjVWNGExLDEsMCwwLDAtMiwwVjIyLjY1bC01LjMtNS4yMWExLDEsMCwwLDAtMS40LDEuNDNaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1p'@;
put 'LW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0xMC4zLDE4Ljg3bDcsNi44OWExLDEsMCwwLDAsMS40LDBsNy02Ljg5YTEsMSwwLDAsMC0xLjQtMS40M0wxOSwyMi42NVY0YTEsMSwwLDAsMC0yLDBWMjIuNjVsLTUuMy01LjIxYTEsMSwwLDAsMC0xLjQsMS40M1oiLz48cGF0aCBkPSJNMzEs'@;
put 'MTMuNDNWMzBINVYxMEg5LjM4YTEsMSwwLDAsMCwwLTJINS4wOEEyLDIsMCwwLDAsMywxMFYzMGEyLDIsMCwwLDAsMi4wOCwySDMwLjkyQTIsMiwwLDAsMCwzMywzMFYxMi44N0E3LjQ1LDcuNDUsMCwwLDEsMzEsMTMuNDNaIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1v'@;
put 'dXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0x'@;
put 'MC4zLDE4Ljg3bDcsNi44OWExLDEsMCwwLDAsMS40LDBsNy02Ljg5YTEsMSwwLDAsMC0xLjQtMS40M0wxOSwyMi42NVY0YTEsMSwwLDAsMC0yLDBWMjIuNjVsLTUuMy01LjIxYTEsMSwwLDAsMC0xLjQsMS40M1oiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1h'@;
put 'bGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIiBkPSJNMzEsMTUuNFYzMEg1VjEwSDkuMzhhMSwxLDAsMCwwLDAtMkg1LjA4QTIsMiwwLDAsMCwzLDEwVjMwYTIsMiwwLDAsMCwyLjA4LDJIMzAuOTJBMiwyLDAsMCwwLDMzLDMwVjE1LjRaIi8+XG4gICAgICAgICAgICA8cGF0'@;
put 'aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0'@;
put 'QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIvPlxuJykseS5DbHJTaGFwZVVuaW5zdGFsbD0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTExLjI5LDI2LjcyYTEsMSwwLDAsMCwxLjQxLDBMMTgsMjEuNDls'@;
put 'NS4zLDUuMjNBMSwxLDAsMCwwLDI0LjcsMjUuM2wtNS4yOC01LjIxLDUuMjgtNS4yMWExLDEsMCwwLDAtMS40MS0xLjQyTDE4LDE4LjY4bC01LjMtNS4yM2ExLDEsMCwwLDAtMS40MSwxLjQybDUuMjgsNS4yMUwxMS4zLDI1LjNBMSwxLDAsMCwwLDExLjI5LDI2LjcyWiIvPlxuICAgICAgICAg'@;
put 'ICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0zMC45Miw4SDI2LjU1YTEsMSwwLDAsMCwwLDJIMzFWMzBINVYxMEg5LjM4YTEsMSwwLDAsMCwwLTJINS4wOEEyLDIsMCwwLDAsMywxMFYzMGEyLDIsMCwwLDAsMi4wOCwySDMwLjkyQTIsMiww'@;
put 'LDAsMCwzMywzMFYxMEEyLDIsMCwwLDAsMzAuOTIsOFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgZD0iTTExLjI5LDI2LjcyYTEsMSwwLDAsMCwxLjQxLDBMMTgsMjEuNDlsNS4zLDUuMjNB'@;
put 'MSwxLDAsMCwwLDI0LjcsMjUuM2wtNS4yOC01LjIxLDUuMjgtNS4yMWExLDEsMCwwLDAtMS40MS0xLjQyTDE4LDE4LjY4bC01LjMtNS4yM2ExLDEsMCwwLDAtMS40MSwxLjQybDUuMjgsNS4yMUwxMS4zLDI1LjNBMSwxLDAsMCwwLDExLjI5LDI2LjcyWiIvPlxuICAgICAgICAgICAgPHBhdGgg'@;
put 'Y2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiBkPSJNMzEsMTMuNDNWMzBINVYxMEg5LjM4YTEsMSwwLDAsMCwwLTJINS4wOEEyLDIsMCwwLDAsMywxMFYzMGEyLDIsMCwwLDAsMi4wOCwySDMwLjkyQTIsMiwwLDAsMCwzMywzMFYxMi44'@;
put 'N0E3LjQ1LDcuNDUsMCwwLDEsMzEsMTMuNDNaIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgPHBhdGgg'@;
put 'Y2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0xMS4yOSwyNi43MmExLDEsMCwwLDAsMS40MSwwTDE4LDIxLjQ5bDUuMyw1LjIzQTEsMSwwLDAsMCwyNC43LDI1LjNsLTUuMjgtNS4yMSw0Ljc1LTQuNjlIMjIuMjNhMy42NSwz'@;
put 'LjY1LDAsMCwxLS44MS0uMUwxOCwxOC42OGwtNS4zLTUuMjNhMSwxLDAsMCwwLTEuNDEsMS40Mmw1LjI4LDUuMjFMMTEuMywyNS4zQTEsMSwwLDAsMCwxMS4yOSwyNi43MloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUt'@;
put 'cGF0aC0yLS1hbGVydGVkIiBkPSJNMzEsMTUuNFYzMEg1VjEwSDkuMzhhMSwxLDAsMCwwLDAtMkg1LjA4QTIsMiwwLDAsMCwzLDEwVjMwYTIsMiwwLDAsMCwyLjA4LDJIMzAuOTJBMiwyLDAsMCwwLDMzLDMwVjE1LjRaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGlu'@;
put 'ZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44'@;
put 'NSwxLjE0WiIvPlxuJykseS5DbHJTaGFwZUxheWVycz0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE4LDIwLjI1YTEsMSwwLDAsMS0uNDMtLjFsLTE1LTcuMDlhMSwxLDAsMCwxLDAtMS44MWwxNS03LjA5YTEs'@;
put 'MSwwLDAsMSwuODUsMGwxNSw3LjA5YTEsMSwwLDAsMSwwLDEuODFsLTE1LDcuMDlBMSwxLDAsMCwxLDE4LDIwLjI1Wk01LjM0LDEyLjE2bDEyLjY2LDYsMTIuNjYtNkwxOCw2LjE4WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRo'@;
put 'LTIiIGQ9Ik0xOCwyNi4xNmExLDEsMCwwLDEtLjQzLS4xTDIuNTcsMTlhMSwxLDAsMSwxLC44NS0xLjgxTDE4LDI0LjA2bDE0LjU3LTYuODlBMSwxLDAsMSwxLDMzLjQzLDE5bC0xNSw3LjA5QTEsMSwwLDAsMSwxOCwyNi4xNloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1v'@;
put 'dXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMTgsMzIuMDdhMSwxLDAsMCwxLS40My0uMWwtMTUtNy4wOWExLDEsMCwwLDEsLjg1LTEuODFMMTgsMzBsMTQuNTctNi44OWExLDEsMCwxLDEsLjg1LDEuODFMMTguNDMsMzJBMSwxLDAsMCwxLDE4LDMyLjA3WiIvPlxuICAgICAgICAg'@;
put 'ICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTE4LDIwLjI1YTEsMSwwLDAsMS0uNDMtLjFsLTE1LTcuMDlhMSwxLDAsMCwxLDAtMS44MWwxNS03LjA5YTEsMSwwLDAsMSwuODUsMGwxNSw3LjA5YTEsMSwwLDAsMSwwLDEuODFsLTE1LDcuMDlBMSwx'@;
put 'LDAsMCwxLDE4LDIwLjI1WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTTE4LDI2LjE2YTEsMSwwLDAsMS0uNDMtLjFMMi41NywxOWExLDEsMCwxLDEsLjg1LTEuODFMMTgsMjQuMDZsMTQuNTctNi44OUExLDEsMCwxLDEs'@;
put 'MzMuNDMsMTlsLTE1LDcuMDlBMSwxLDAsMCwxLDE4LDI2LjE2WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgZD0iTTE4LDMyLjA3YTEsMSwwLDAsMS0uNDMtLjFsLTE1LTcuMDlhMSwxLDAsMCwxLC44NS0xLjgxTDE4LDMwbDE0'@;
put 'LjU3LTYuODlhMSwxLDAsMSwxLC44NSwxLjgxTDE4LjQzLDMyQTEsMSwwLDAsMSwxOCwzMi4wN1oiLz5cbicpLHkuQ2xyU2hhcGVCbG9jaz0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzEuNDIsOS4wOWwtMTMtNmExLDEsMCwwLDAtLjg0LDBsLTEzLDZBMSwxLDAsMCwwLDQsMTBWMjdh'@;
put 'MSwxLDAsMCwwLC41OC45MWwxMyw2YTEsMSwwLDAsMCwuODQsMGwxMy02QTEsMSwwLDAsMCwzMiwyN1YxMEExLDEsMCwwLDAsMzEuNDIsOS4wOVpNMTgsNS4xLDI4LjYxLDEwLDE4LDE0LjksNy4zOSwxMFpNNiwxMS41NmwxMSw1LjA4djE0LjhMNiwyNi4zNlpNMTksMzEuNDRWMTYuNjRsMTEt'@;
put 'NS4wOHYxNC44WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAsMTUuNTNWMjYuMzZMMTksMzEuNDRWMTYuNjRsMi41Ny0xLjE5YTMuNjcsMy42NywwLDAsMS0yLjExLTEuMjJMMTgsMTQuOSw3LjM5LDEwLDE4'@;
put 'LDUuMWwzLjA4LDEuNDIsMS0xLjc0TDE4LjQyLDMuMDlhMSwxLDAsMCwwLS44NCwwbC0xMyw2QTEsMSwwLDAsMCw0LDEwVjI3YTEsMSwwLDAsMCwuNTguOTFsMTMsNmExLDEsMCwwLDAsLjg0LDBsMTMtNkExLDEsMCwwLDAsMzIsMjdWMTUuNTNaTTE3LDMxLjQ0LDYsMjYuMzZWMTEuNTZsMTEs'@;
put 'NS4wOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg3LDEuMjZsLTUuNzIsOS45MWExLjI4LDEuMjgsMCwwLDAsMS4xLDEuOTJIMzMuN2ExLjI4LDEuMjgsMCwwLDAsMS4x'@;
put 'LTEuOTJMMjkuMDgsMS4yNkExLjI4LDEuMjgsMCwwLDAsMjYuODcsMS4yNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLDEzLjVWMjYuMzZMMTksMzEu'@;
put 'NDRWMTYuNjRsOC4wOC0zLjczYTcuNTcsNy41NywwLDAsMS0yLTEuMjdMMTgsMTQuOSw3LjM5LDEwLDE4LDUuMWw0LjYxLDIuMTNBNy4xMiw3LjEyLDAsMCwxLDIyLjUsNmE4LDgsMCwwLDEsLjA3LTFMMTguNDIsMy4wOWExLDEsMCwwLDAtLjg0LDBsLTEzLDZBMSwxLDAsMCwwLDQsMTBWMjdh'@;
put 'MSwxLDAsMCwwLC41OC45MWwxMyw2YTEsMSwwLDAsMCwuODQsMGwxMy02QTEsMSwwLDAsMCwzMiwyN1YxMy4yMkE3LjM3LDcuMzcsMCwwLDEsMzAsMTMuNVpNMTcsMzEuNDQsNiwyNi4zNlYxMS41NmwxMSw1LjA4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5l'@;
put 'LXBhdGgtMS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIDxw'@;
put 'YXRoIGQ9Ik0zMS40Miw5LjA5bC0xMy02YTEsMSwwLDAsMC0uODQsMGwtMTMsNkExLDEsMCwwLDAsNCwxMFYyN2ExLDEsMCwwLDAsLjU4LjkxbDEzLDZhMSwxLDAsMCwwLC44NCwwbDEzLTZBMSwxLDAsMCwwLDMyLDI3VjEwQTEsMSwwLDAsMCwzMS40Miw5LjA5Wk0xOCwxNC45LDcuMzksMTAs'@;
put 'MTgsNS4xLDI4LjYxLDEwWk0zMCwyNi4zNiwxOSwzMS40NFYxNi42NGwxMS01LjA4WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMCwxNS4zOHYxMUwxOSwzMS40NFYxNi42NGwyLjc5LTEuMjlhMy42OCwzLjY4LDAs'@;
put 'MCwxLTIuMjUtMS4xNkwxOCwxNC45LDcuMzksMTAsMTgsNS4xbDMsMS4zOSwxLTEuNzVMMTguNDIsMy4wOWExLDEsMCwwLDAtLjg0LDBsLTEzLDZBMSwxLDAsMCwwLDQsMTBWMjdhMSwxLDAsMCwwLC41OC45MWwxMyw2YTEsMSwwLDAsMCwuODQsMGwxMy02QTEsMSwwLDAsMCwzMiwyN1YxNS4z'@;
put 'OFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xMiwyMS4xMywxMWExLjI3LDEuMjcsMCwwLDAsMS4xLDEuOTFIMzMuNjhBMS4yNywxLjI3LDAsMCwwLDM0Ljc4LDExTDI5'@;
put 'LjA2LDEuMTJBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTJaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLDEzLjVWMjYuMzZMMTksMzEuNDRWMTYuNjRsOC4w'@;
put 'OC0zLjczYTcuNTcsNy41NywwLDAsMS0yLTEuMjdMMTgsMTQuOSw3LjM5LDEwLDE4LDUuMWw0LjYxLDIuMTNBNy4xMiw3LjEyLDAsMCwxLDIyLjUsNmE4LDgsMCwwLDEsLjA3LTFMMTguNDIsMy4wOWExLDEsMCwwLDAtLjg0LDBsLTEzLDZBMSwxLDAsMCwwLDQsMTBWMjdhMSwxLDAsMCwwLC41'@;
put 'OC45MWwxMyw2YTEsMSwwLDAsMCwuODQsMGwxMy02QTEsMSwwLDAsMCwzMiwyN1YxMy4yMkE3LjM3LDcuMzcsMCwwLDEsMzAsMTMuNVoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAi'@;
put 'IGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgLz4nKSx5LkNsclNoYXBlQmxvY2tzR3JvdXA9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMzLjUzLDE4Ljc2LDI2LjYsMTUuNTdWNi40M0Ex'@;
put 'LDEsMCwwLDAsMjYsNS41M2wtNy41LTMuNDVhMSwxLDAsMCwwLS44NCwwbC03LjUsMy40NWExLDEsMCwwLDAtLjU4LjkxdjkuMTRMMi42OCwxOC43NmExLDEsMCwwLDAtLjU4LjkxdjkuNzhoMGExLDEsMCwwLDAsLjU4LjkxbDcuNSwzLjQ1YTEsMSwwLDAsMCwuODQsMGw3LjA4LTMuMjYsNy4w'@;
put 'OCwzLjI2YTEsMSwwLDAsMCwuODQsMGw3LjUtMy40NWExLDEsMCwwLDAsLjU4LS45MWgwVjE5LjY3QTEsMSwwLDAsMCwzMy41MywxOC43NlptLTIuODEuOTFMMjUuNjEsMjIsMjAuNSwxOS42N2w1LjExLTIuMzVaTTE4LjEsNC4wOGw1LjExLDIuMzVMMTguMSw4Ljc4LDEzLDYuNDNaTTEwLjYs'@;
put 'MTcuMzFsNS4xMSwyLjM1TDEwLjYsMjIsNS40OSwxOS42N1ptNi41LDExLjQ5LTYuNSwzLTYuNS0zVjIxLjIzTDEwLjE4LDI0QTEsMSwwLDAsMCwxMSwyNGw2LjA4LTIuOFpNMTEuNiwxNS41N2gwVjhsNi4wOCwyLjhhMSwxLDAsMCwwLC44NCwwTDI0LjYsOHY3LjU4aDBsLTYuNSwzWk0zMi4x'@;
put 'MSwyOC44MWwtNi41LDMtNi41MS0zVjIxLjIyTDI1LjE5LDI0QTEsMSwwLDAsMCwyNiwyNGw2LjA4LTIuOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuPHBhdGggZD0iTTMzLjUzLDE4Ljc2LDI2LjYsMTUuNTdoLTJ2MGwtNi41LDMtNi41LTNWOGw2'@;
put 'LjA4LDIuOGExLDEsMCwwLDAsLjg0LDBsLjI0LS4xMWE0LjE3LDQuMTcsMCwwLDEsLjI5LS42NWwxLjMzLTIuMzEtMi4yOCwxTDEzLDYuNDNsNS4xLTIuMzUsMy40NywxLjYsMS0xLjczTDE4LjUsMi4wOGExLDEsMCwwLDAtLjg0LDBsLTcuNSwzLjQ1YTEsMSwwLDAsMC0uNTguOTF2OS4xNGwt'@;
put 'Ni45LDMuMThhMSwxLDAsMCwwLS41OC45MXY5Ljc4YTEsMSwwLDAsMCwuNTguOTFsNy41LDMuNDVhMSwxLDAsMCwwLC44NCwwbDcuMDgtMy4yNiw3LjA4LDMuMjZhMSwxLDAsMCwwLC44NCwwbDcuNS0zLjQ1YTEsMSwwLDAsMCwuNTgtLjkxVjE5LjY3QTEsMSwwLDAsMCwzMy41MywxOC43NlpN'@;
put 'MTAuNiwxNy4zMWw1LjExLDIuMzVMMTAuNiwyMiw1LjQ5LDE5LjY3Wm0wLDE0LjQ5LTYuNS0zVjIxLjIzTDEwLjE4LDI0QTEsMSwwLDAsMCwxMSwyNGw2LjA4LTIuOCwwLDcuNlptMTUtMTQuNDgsNS4xMSwyLjM1TDI1LjYxLDIyLDIwLjUsMTkuNjdabTAsMTQuNDktNi41MS0zVjIxLjIyTDI1'@;
put 'LjE5LDI0QTEsMSwwLDAsMCwyNiwyNGw2LjA4LTIuOCwwLDcuNjFaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgLz5cbjxwYXRoIGQ9Ik0yNi44NSwxLjE0bC01LjcyLDkuOTFBMS4yNywxLjI3LDAsMCwwLDIyLjIzLDEzSDMz'@;
put 'LjY4YTEuMjcsMS4yNywwLDAsMCwxLjEtMS45MUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIC8+XG48cGF0aCBkPSJNMzMuNTMsMTgu'@;
put 'NzYsMjYuNiwxNS41N1YxMi43YTcuNTgsNy41OCwwLDAsMS0yLTEuNTF2NC4zOWwtNi41LDMtNi41LTNWOGw2LjA4LDIuOGExLDEsMCwwLDAsLjg0LDBMMjMsOC43MmE3LjA1LDcuMDUsMCwwLDEtLjQ3LTJsLTQuNDcsMkwxMyw2LjQzbDUuMS0yLjM1LDQuNDQsMnMwLS4wNiwwLS4wOWE3LjU1'@;
put 'LDcuNTUsMCwwLDEsLjI3LTJsLTQuMy0yYTEsMSwwLDAsMC0uODQsMGwtNy41LDMuNDVhMSwxLDAsMCwwLS41OC45MXY5LjE0bC02LjksMy4xOGExLDEsMCwwLDAtLjU4LjkxdjkuNzhhMSwxLDAsMCwwLC41OC45MWw3LjUsMy40NWExLDEsMCwwLDAsLjg0LDBsNy4wOC0zLjI2LDcuMDgsMy4y'@;
put 'NmExLDEsMCwwLDAsLjg0LDBsNy41LTMuNDVhMSwxLDAsMCwwLC41OC0uOTFWMTkuNjdBMSwxLDAsMCwwLDMzLjUzLDE4Ljc2Wk0xMC42LDE3LjMxbDUuMTEsMi4zNUwxMC42LDIyLDUuNDksMTkuNjdabTAsMTQuNDktNi41LTNWMjEuMjNMMTAuMTgsMjRBMSwxLDAsMCwwLDExLDI0bDYuMDgt'@;
put 'Mi44LDAsNy42Wm0xNS0xNC40OCw1LjExLDIuMzVMMjUuNjEsMjIsMjAuNSwxOS42N1ptMCwxNC40OS02LjUxLTNWMjEuMjJMMjUuMTksMjRBMSwxLDAsMCwwLDI2LDI0bDYuMDgtMi44LDAsNy42MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEt'@;
put 'LWJhZGdlZCIgLz5cbjxjaXJjbGUgY3g9IjMwLjAzIiBjeT0iNi4wMyIgcj0iNSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPlxuPHBhdGggZD0iTTMzLjUzLDE4Ljc2LDI2LjYsMTUuNTdWNi40M0ExLDEs'@;
put 'MCwwLDAsMjYsNS41M2wtNy41LTMuNDVhMSwxLDAsMCwwLS44NCwwbC03LjUsMy40NWExLDEsMCwwLDAtLjU4LjkxdjkuMTRMMi42OCwxOC43NmExLDEsMCwwLDAtLjU4LjkxdjkuNzhoMGExLDEsMCwwLDAsLjU4LjkxbDcuNSwzLjQ1YTEsMSwwLDAsMCwuODQsMGw3LjA4LTMuMjYsNy4wOCwz'@;
put 'LjI2YTEsMSwwLDAsMCwuODQsMGw3LjUtMy40NWExLDEsMCwwLDAsLjU4LS45MWgwVjE5LjY3QTEsMSwwLDAsMCwzMy41MywxOC43NlpNMjUuNjEsMjIsMjAuNSwxOS42N2w1LjExLTIuMzUsNS4xMSwyLjM1Wm0tMS02LjQ0LTYuNDQsM1YxMC44N2ExLDEsMCwwLDAsLjM1LS4wOEwyNC42LDh2'@;
put 'Ny41OFpNMTguMSw0LjA4bDUuMTEsMi4zNUwxOC4xLDguNzgsMTMsNi40M1pNMTAuNiwxNy4zMWw1LjExLDIuMzVMMTAuNiwyMiw1LjQ5LDE5LjY3Wm02LjUsMTEuNDktNi41LDNoMFYyNC4xMWgwQTEsMSwwLDAsMCwxMSwyNGw2LjA4LTIuOFptMTUsMC02LjQ2LDNWMjQuMTFBMSwxLDAsMCww'@;
put 'LDI2LDI0bDYuMDgtMi44WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbjxwYXRoIGQ9Ik0zMy41MywxOC43NiwyNi42LDE1LjU3djBoLTJ2MGwtNi40MywzVjEwLjg3YTEuMDUsMS4wNSwwLDAsMCwuMzUtLjA4bC4xNC0uMDZBMy4yMywzLjIzLDAsMCwxLDE5'@;
put 'LDEwbDEuMjgtMi4yMi0yLjE0LDFMMTMsNi40M2w1LjEtMi4zNSwzLjM5LDEuNTYsMS0xLjczLTQtMS44M2ExLDEsMCwwLDAtLjg0LDBsLTcuNSwzLjQ1YTEsMSwwLDAsMC0uNTguOTF2OS4xNGwtNi45LDMuMThhMSwxLDAsMCwwLS41OC45MXY5Ljc4YTEsMSwwLDAsMCwuNTguOTFsNy41LDMu'@;
put 'NDVhMSwxLDAsMCwwLC44NCwwbDcuMDgtMy4yNiw3LjA4LDMuMjZhMSwxLDAsMCwwLC44NCwwbDcuNS0zLjQ1YTEsMSwwLDAsMCwuNTgtLjkxVjE5LjY3QTEsMSwwLDAsMCwzMy41MywxOC43NlptLTI4LC45MSw1LjExLTIuMzYsNS4xMSwyLjM1TDEwLjYsMjJaTTEwLjYsMzEuOFYyNC4xMUEx'@;
put 'LjA4LDEuMDgsMCwwLDAsMTEsMjRsNi4wOC0yLjgsMCw3LjZabTkuOS0xMi4xMyw1LjExLTIuMzUsNS4xMSwyLjM1TDI1LjYxLDIyWk0yNS42NCwzMS44VjI0LjExQS44OS44OSwwLDAsMCwyNiwyNGw2LjA4LTIuOCwwLDcuNloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1z'@;
put 'b2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIC8+XG48cGF0aCBkPSJNMjYuODksMS4xNGwtNS43Miw5LjkxQTEuMjcsMS4yNywwLDAsMCwyMi4yNywxM0gzMy43MmExLjI3LDEuMjcsMCwwLDAsMS4xLTEuOTFMMjkuMSwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44OSwxLjE0WiIgY2xhc3M9ImNsci1p'@;
put 'LXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIgLz5cbjxwYXRoIGQ9Ik0zMy41MywxOC43NiwyNi42LDE1LjU3VjEyLjY5YTcuNjYsNy42NiwwLDAsMS0yLTEuNDd2NC4zNGwtNi40MywzVjEwLjg3YTEuMDUsMS4wNSwwLDAsMCwuMzUtLjA4'@;
put 'TDIzLDguNzNhNy42NSw3LjY1LDAsMCwxLS40OC0ybC00LjQyLDJMMTMsNi40M2w1LjEtMi4zNSw0LjM4LDJWNmE3LjU1LDcuNTUsMCwwLDEsLjI3LTJMMTguNSwyLjA4YTEsMSwwLDAsMC0uODQsMGwtNy41LDMuNDVhMSwxLDAsMCwwLS41OC45MXY5LjE0bC02LjksMy4xOGExLDEsMCwwLDAt'@;
put 'LjU4LjkxdjkuNzhhMSwxLDAsMCwwLC41OC45MWw3LjUsMy40NWExLDEsMCwwLDAsLjg0LDBsNy4wOC0zLjI2LDcuMDgsMy4yNmExLDEsMCwwLDAsLjg0LDBsNy41LTMuNDVhMSwxLDAsMCwwLC41OC0uOTFWMTkuNjdBMSwxLDAsMCwwLDMzLjUzLDE4Ljc2Wm0tMjgsLjkxLDUuMTEtMi4zNiw1'@;
put 'LjExLDIuMzVMMTAuNiwyMlpNMTAuNiwzMS44VjI0LjExQTEuMDgsMS4wOCwwLDAsMCwxMSwyNGw2LjA4LTIuOCwwLDcuNlptOS45LTEyLjEzLDUuMTEtMi4zNSw1LjExLDIuMzVMMjUuNjEsMjJaTTI1LjY0LDMxLjhWMjQuMTFBLjg5Ljg5LDAsMCwwLDI2LDI0bDYuMDgtMi44LDAsNy42WiIg'@;
put 'Y2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIC8+XG48Y2lyY2xlIGN4PSIyOS45OCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPicpLHku'@;
put 'Q2xyU2hhcGVCdW5kbGU9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMi40Myw4LjM1bC0xMy02LjIxYTEsMSwwLDAsMC0uODcsMGwtMTUsNy4yNGExLDEsMCwwLDAtLjU3LjlWMjYuODNhMSwxLDAsMCwwLC42'@;
put 'LjkybDEzLDYuMTlhMSwxLDAsMCwwLC44NywwbDE1LTcuMjRhMSwxLDAsMCwwLC41Ny0uOVY5LjI1QTEsMSwwLDAsMCwzMi40Myw4LjM1Wk0xOSw0LjE1LDI5LjkzLDkuMzdsLTUuMDUsMi40NEwxNC4yMSw2LjQ2Wk0xNywxNS42NCw2LDEwLjQxbDUuOS0yLjg1TDIyLjYsMTIuOTFaTTUsMTIu'@;
put 'MTMsMTYsMTcuNFYzMS40Nkw1LDI2LjJaTTE4LDMxLjQ1VjE3LjM2bDEzLTYuMjl2MTQuMVoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zMi40Myw4LjM1bC0xMy02LjIxYTEsMSwwLDAsMC0uODcsMGwtMTUsNy4yNGEx'@;
put 'LDEsMCwwLDAtLjU3LjlWMjYuODNhMSwxLDAsMCwwLC42LjkybDEzLDYuMTlhMSwxLDAsMCwwLC44NywwbDE1LTcuMjRhMSwxLDAsMCwwLC41Ny0uOVY5LjI1QTEsMSwwLDAsMCwzMi40Myw4LjM1Wk0xOSw0LjE1LDI5LjkzLDkuMzdsLTUuMDUsMi40NEwxNC4yMSw2LjQ2Wk0xNywxNS42NCw2'@;
put 'LDEwLjQxbDUuOS0yLjg1TDIyLjYsMTIuOTFabTEsMTUuOFYxNy4zNmwxMy02LjI5djE0LjFaIi8+XG4nKSx5LkNsclNoYXBlV2lmaT0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMzLjU1LDguMmEyOC4xLDI4'@;
put 'LjEsMCwwLDAtMzEuMTEuMDhBMSwxLDAsMSwwLDMuNTYsOS45NGEyNi4xMSwyNi4xMSwwLDAsMSwyOC44OS0uMDcsMSwxLDAsMCwwLDEuMS0xLjY3WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0xOC4wNSwxMC43'@;
put 'MkEyMC43NCwyMC43NCwwLDAsMCw2LjIzLDE0LjQsMSwxLDAsMCwwLDcuMzYsMTYsMTguODUsMTguODUsMCwwLDEsMjguNjQsMTZhMSwxLDAsMCwwLDEuMTItMS42NUEyMC43NSwyMC43NSwwLDAsMCwxOC4wNSwxMC43MloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRs'@;
put 'aW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMTguMDUsMTcuOWExMy41MSwxMy41MSwwLDAsMC04LDIuNjQsMSwxLDAsMCwwLDEuMTgsMS42MSwxMS41NiwxMS41NiwwLDAsMSwxMy42Mi0uMDhBMSwxLDAsMSwwLDI2LDIwLjQ2LDEzLjUyLDEzLjUyLDAsMCwwLDE4LjA1LDE3LjlaIi8+'@;
put 'XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgZD0iTTE4LDI0LjQyYTQsNCwwLDEsMCw0LDRBNCw0LDAsMCwwLDE4LDI0LjQyWm0wLDZhMiwyLDAsMSwxLDItMkEyLDIsMCwwLDEsMTgsMzAuNDJaIi8+XG4gICAgICAgICAgICA8'@;
put 'Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGN4PSIxOCIgY3k9IjI5LjU0IiByPSIzIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNMzIuNzYsOS4zOGEyNy44NywyNy44NywwLDAsMC0y'@;
put 'OS41NywwLDEuNTEsMS41MSwwLDAsMC0uNDgsMi4xMWwuMTEuMTdhMS40OSwxLjQ5LDAsMCwwLDIsLjQ2LDI0LjY4LDI0LjY4LDAsMCwxLDI2LjI2LDAsMS40OSwxLjQ5LDAsMCwwLDItLjQ2bC4xMS0uMTdBMS41MSwxLjUxLDAsMCwwLDMyLjc2LDkuMzhaIi8+XG4gICAgICAgICAgICA8cGF0'@;
put 'aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiBkPSJNMjguODIsMTUuNDRhMjAuNTksMjAuNTksMCwwLDAtMjEuNywwLDEuNTEsMS41MSwwLDAsMC0uNDYsMi4xbC4xMS4xN2ExLjQ5LDEuNDksMCwwLDAsMiwuNDYsMTcuNCwxNy40LDAsMCwxLDE4LjM2LDAsMS40OSwx'@;
put 'LjQ5LDAsMCwwLDItLjQ2bC4xMS0uMTdBMS41MSwxLjUxLDAsMCwwLDI4LjgyLDE1LjQ0WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNCIgZD0iTTI0Ljg4LDIxLjQ5YTEzLjQxLDEzLjQxLDAsMCwwLTEzLjgyLDAsMS41LDEuNSww'@;
put 'LDAsMC0uNDYsMi4wOWwuMS4xNmExLjUyLDEuNTIsMCwwLDAsMi4wNi40NCwxMC4yNywxMC4yNywwLDAsMSwxMC40MiwwLDEuNTIsMS41MiwwLDAsMCwyLjA2LS40NWwuMS0uMTZBMS40OSwxLjQ5LDAsMCwwLDI0Ljg4LDIxLjQ5WiIvPlxuJykseS5DbHJTaGFwZVJhY2tTZXJ2ZXI9KDAsZy5j'@;
put 'bHJJY29uU1ZHKSgnPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIHg9IjEwIiB5PSIxNyIgd2lkdGg9IjE0IiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVk'@;
put 'IGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIiB4PSI2IiB5PSIyNSIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiIHg9IjEwIiB5PSIyNSIgd2lk'@;
put 'dGg9IjE0IiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIiBkPSJNMTguNjQsMTFBMy42NSwzLjY1LDAsMCwxLDE5LDkuODlMMTkuNTYsOUgxMHYyWiIvPlxuICAgICAgICAg'@;
put 'ICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWFsZXJ0ZWQiIGQ9Ik0zMy42OCwxNS40SDMyVjIxSDRWMTVIMjAuNThBMy42NywzLjY3LDAsMCwxLDE5LDEzLjU2YTMuNjMsMy42MywwLDAsMS0uMjYtLjU2SDRWN0gyMC43MWwxLjE1'@;
put 'LTJINEEyLDIsMCwwLDAsMiw3VjI5YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYxNS4zOFpNNCwyOVYyM0gzMnY2WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTYtLWFsZXJ0ZWQgY2xyLWktYWxl'@;
put 'cnQiIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5l'@;
put 'LS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgeD0iNiIgeT0iOSIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiB4PSI2IiB5PSIxNyIg'@;
put 'd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIiB4PSIxMCIgeT0iMTciIHdpZHRoPSIxNCIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0i'@;
put 'Y2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQiIHg9IjYiIHk9IjI1IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC01LS1iYWRnZWQi'@;
put 'IHg9IjEwIiB5PSIyNSIgd2lkdGg9IjE0IiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTYtLWJhZGdlZCIgZD0iTTEwLDExSDI0di0uNTFBNy40OCw3LjQ4LDAsMCwxLDIzLjEzLDlIMTBaIi8+'@;
put 'XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC03LS1iYWRnZWQiIGQ9Ik0zMCwxMy41YTcuNDcsNy40NywwLDAsMS0yLjY4LS41SDRWN0gyMi41N2E3LjUyLDcuNTIsMCwwLDEtLjA3LTEsNy41Miw3LjUyLDAsMCwxLC4w'@;
put 'Ny0xSDRBMiwyLDAsMCwwLDIsN1YyOWEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMTIuMzRBNy40Niw3LjQ2LDAsMCwxLDMwLDEzLjVaTTQsMTVIMzJ2Nkg0Wk00LDI5VjIzSDMydjZaIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQg'@;
put 'Y2xyLWktb3V0bGluZS1wYXRoLTgtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIHg9IjYiIHk9IjkiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAg'@;
put 'ICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiB4PSIxMCIgeT0iOSIgd2lkdGg9IjE0IiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiB4PSI2IiB5'@;
put 'PSIxNyIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIHg9IjEwIiB5PSIxNyIgd2lkdGg9IjE0IiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRs'@;
put 'aW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiBkPSJNMzIsNUg0QTIsMiwwLDAsMCwyLDdWMjlhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjdBMiwyLDAsMCwwLDMyLDVaTTQsN0gzMnY2SDRabTAsOEgzMnY2SDRaTTQsMjlWMjNIMzJ2NloiLz5cbiAgICAgICAgICAgIDxyZWN0IGNs'@;
put 'YXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02IiB4PSI2IiB5PSIyNSIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTciIHg9IjEwIiB5PSIyNSIgd2lkdGg9IjE0IiBo'@;
put 'ZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0yLDMwYTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYyNEgyWm04LTNIMjR2MkgxMFpNNiwyN0g4djJINloiLz5cbiAg'@;
put 'ICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQiIGQ9Ik0xOSw5Ljg5LDE5LjU2LDlIMTBWN0gyMC43MWwxLjczLTNINEEyLDIsMCwwLDAsMiw2djZIMTguNTdBMy42NywzLjY3LDAsMCwxLDE5LDkuODlaTTgsOUg2'@;
put 'VjdIOFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWFsZXJ0ZWQiIGQ9Ik0zMy42OCwxNS40SDIyLjIzQTMuNjksMy42OSwwLDAsMSwxOS4zNSwxNEgydjhIMzRWMTUuMzhaTTgsMTlINlYxN0g4Wm0xNiwwSDEw'@;
put 'VjE3SDI0WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtNC0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCww'@;
put 'LDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0yLDE0djhIMzRWMTRabTYsNUg2VjE3SDhabTE2LDBI'@;
put 'MTBWMTdIMjRaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCIgZD0iTTIsMzBhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjI0SDJabTgtM0gyNHYySDEwWk02LDI3SDh2Mkg2WiIvPlxuICAg'@;
put 'ICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQiIGQ9Ik0yMy4xMyw5SDEwVjdIMjIuNTdhNy41Miw3LjUyLDAsMCwxLS4wNy0xLDcuNDksNy40OSwwLDAsMSwuMjgtMkg0QTIsMiwwLDAsMCwyLDZ2NkgyNS41MUE3LjUy'@;
put 'LDcuNTIsMCwwLDEsMjMuMTMsOVpNOCw5SDZWN0g4WiIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTQtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgPHBhdGgg'@;
put 'Y2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTIsMjJIMzRWMTRIMlptOC01SDI0djJIMTBaTTYsMTdIOHYySDZaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNMzIsNEg0QTIsMiwwLDAsMCwy'@;
put 'LDZ2NkgzNFY2QTIsMiwwLDAsMCwzMiw0Wk04LDlINlY3SDhaTTI0LDlIMTBWN0gyNFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIGQ9Ik0yLDMwYTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYyNEgyWm04LTNIMjR2'@;
put 'MkgxMFpNNiwyN0g4djJINloiLz5cbicpLHkuQ2xyU2hhcGVIYXJkRGlzaz0oMCxnLmNsckljb25TVkcpKCc8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgeD0iNiIgeT0iMjAiIHdpZHRoPSIyNCIgaGVpZ2h0PSIyIi8+'@;
put 'XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIgeD0iMjYiIHk9IjI0IiB3aWR0aD0iNCIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRl'@;
put 'ZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIgZD0iTTM0LDIxLjA4bC0xLjQtNS42OEgzMC41MWwxLjQ5LDZWMjlINFYyMS40NEw3LjA2LDloMTIuNWwxLjE1LTJINy4wNkEyLDIsMCwwLDAsNS4xMyw4LjQ3TDIsMjEuMDhhMSwxLDAsMCwwLDAsLjI0VjI5YTIsMiwwLDAsMCwyLDJI'@;
put 'MzJhMiwyLDAsMCwwLDItMlYyMS4zMUExLDEsMCwwLDAsMzQsMjEuMDhaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4y'@;
put 'OCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0t'@;
put 'YmFkZ2VkIiB4PSI2IiB5PSIyMCIgd2lkdGg9IjI0IiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgeD0iMjYiIHk9IjI0IiB3aWR0aD0iNCIgaGVpZ2h0PSIyIi8+XG4gICAg'@;
put 'ICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiIGQ9Ik0zNCwyMS4wOCwzMiwxMy4yMWE3LjQ5LDcuNDksMCwwLDEtMiwuMjlsMiw3Ljk0VjI5SDRWMjEuNDRMNy4wNiw5SDIzLjEzYTcuNDUsNy40NSwwLDAsMS0u'@;
put 'NTUtMkg3LjA2QTIsMiwwLDAsMCw1LjEzLDguNDdMMiwyMS4wOGExLDEsMCwwLDAsMCwuMjRWMjlhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjIxLjMxQTEsMSwwLDAsMCwzNCwyMS4wOFoiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdl'@;
put 'ZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTM0LDIxLjA4LDMwLjg2LDguNDNBMiwyLDAsMCwwLDI4'@;
put 'Ljk0LDdINy4wNkEyLDIsMCwwLDAsNS4xMyw4LjQ3TDIsMjEuMDhhMSwxLDAsMCwwLDAsLjI0VjI5YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYyMS4zMUExLDEsMCwwLDAsMzQsMjEuMDhaTTQsMjlWMjEuNDRMNy4wNiw5SDI4LjkzTDMyLDIxLjQ0VjI5WiIvPlxuICAgICAgICAg'@;
put 'ICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIHg9IjYiIHk9IjIwIiB3aWR0aD0iMjQiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIHg9IjI2IiB5PSIyNCIg'@;
put 'd2lkdGg9IjQiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIgZD0iTTIsMjJ2N2EyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMjJabTI4LDVIMjZWMjVoNFoiLz5cbiAg'@;
put 'ICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQiIGQ9Ik0zMi41OCwxNS40SDIyLjIzQTMuNjgsMy42OCwwLDAsMSwxOSw5Ljg5TDIwLjcxLDdINy4wNkEyLDIsMCwwLDAsNS4xMyw4LjQ3TDIuMjksMjBIMzMuNzFa'@;
put 'Ii8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0zLS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0'@;
put 'Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgZD0iTTIsMjJ2N2EyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJW'@;
put 'MjJabTI4LDVIMjZWMjVoNFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMzIsMTMuMjFBNy40Nyw3LjQ3LDAsMCwxLDIyLjU3LDdINy4wNkEyLDIsMCwwLDAsNS4xMyw4LjQ3TDIuMjksMjBI'@;
put 'MzMuNzFaIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWkt'@;
put 'c29saWQtcGF0aC0xIiBkPSJNMzAuODYsOC40M0EyLDIsMCwwLDAsMjguOTQsN0g3LjA2QTIsMiwwLDAsMCw1LjEzLDguNDdMMi4yOSwyMEgzMy43MVoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIGQ9Ik0yLDIydjdhMiwyLDAs'@;
put 'MCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjIyWm0yOCw1SDI2VjI1aDRaIi8+XG4nKSx5LkNsclNoYXBlQmFja3VwUmVzdG9yZT0oMCxnLmNsckljb25TVkcpKCc8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgeD0iNiIg'@;
put 'eT0iMjIiIHdpZHRoPSIyNCIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIgeD0iMjYiIHk9IjI2IiB3aWR0aD0iNCIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cGF0'@;
put 'aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIgZD0iTTEzLDkuOTIsMTcsNlYxOWExLDEsMCwxLDAsMiwwVjZsMS40NywxLjQ2LDEtMS43OUwxOCwyLjE2LDExLjYxLDguNUExLDEsMCwwLDAsMTMsOS45MloiLz5cbiAgICAgICAg'@;
put 'ICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIiBkPSJNMzEuNTgsMTUuNEgyOS40NmMxLDIuODUsMi4zMSw2LjM3LDIuNTQsNy4wOFYzMEg0VjIyLjQ4QzQuMjgsMjEuNjUsNy4wNSwxNCw3LjA1LDE0SDE1VjEySDcu'@;
put 'MDdhMS45MiwxLjkyLDAsMCwwLTEuOSwxLjMyQzIsMjIsMiwyMi4xLDIsMjIuMzNWMzBhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjIyLjMzQzM0LDIyLjEyLDM0LDIyLDMxLjU4LDE1LjRaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRl'@;
put 'ZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIv'@;
put 'PlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiB4PSI2IiB5PSIyMiIgd2lkdGg9IjI0IiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQg'@;
put 'Y2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgeD0iMjYiIHk9IjI2IiB3aWR0aD0iNCIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiIGQ9Ik0xMyw5LjkyLDE3LDZWMTlh'@;
put 'MSwxLDAsMSwwLDIsMFY2bDQsMy45NWExLDEsMCwwLDAsLjcxLjI5bC4xMSwwYTcuNDYsNy40NiwwLDAsMS0xLjI1LTMuNTJMMTgsMi4xNiwxMS42MSw4LjVBMSwxLDAsMCwwLDEzLDkuOTJaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1p'@;
put 'LW91dGxpbmUtcGF0aC00LS1iYWRnZWQiIGQ9Ik0zMC44NywxMy40NWE3LjU1LDcuNTUsMCwwLDEtLjg3LjA1QTcuNDYsNy40NiwwLDAsMSwyNS41MSwxMkgyMXYyaDcuOTVDMzAsMTYuOTQsMzEuNzIsMjEuNjUsMzIsMjIuNDhWMzBINFYyMi40OEM0LjI4LDIxLjY1LDcuMDUsMTQsNy4wNSwx'@;
put 'NEgxNVYxMkg3LjA3YTEuOTIsMS45MiwwLDAsMC0xLjksMS4zMkMyLDIyLDIsMjIuMSwyLDIyLjMzVjMwYTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYyMi4zM0MzNCwyMi4xLDM0LDIyLDMwLjg3LDEzLjQ1WiIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0'@;
put 'bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC01LS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiB4PSI2IiB5PSIyMiIgd2lkdGg9IjI0IiBo'@;
put 'ZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiB4PSIyNiIgeT0iMjYiIHdpZHRoPSI0IiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUt'@;
put 'cGF0aC0zIiBkPSJNMTMsOS45MiwxNyw2VjE5YTEsMSwwLDEsMCwyLDBWNmw0LDMuOTVBMSwxLDAsMSwwLDI0LjM4LDguNUwxOCwyLjE2LDExLjYxLDguNUExLDEsMCwwLDAsMTMsOS45MloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUt'@;
put 'cGF0aC00IiBkPSJNMzAuODQsMTMuMzdBMS45NCwxLjk0LDAsMCwwLDI4LjkzLDEySDIxdjJoNy45NUMzMCwxNi45NCwzMS43MiwyMS42NSwzMiwyMi40OFYzMEg0VjIyLjQ4QzQuMjgsMjEuNjUsNy4wNSwxNCw3LjA1LDE0SDE1VjEySDcuMDdhMS45MiwxLjkyLDAsMCwwLTEuOSwxLjMyQzIs'@;
put 'MjIsMiwyMi4xLDIsMjIuMzNWMzBhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjIyLjMzQzM0LDIyLjEsMzQsMjIsMzAuODQsMTMuMzdaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiBk'@;
put 'PSJNMiwyNHY2YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYyNFptMjgsNUgyNlYyN2g0WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCIgZD0iTTEzLDkuOTIsMTcsNlYxOGExLDEsMCwx'@;
put 'LDAsMiwwVjZsMS40NywxLjQ2LDEtMS43OUwxOCwyLjE2LDExLjYxLDguNUExLDEsMCwwLDAsMTMsOS45MloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWFsZXJ0ZWQiIGQ9Ik0zMS41OCwxNS40SDIyLjIzQTMu'@;
put 'NjIsMy42MiwwLDAsMSwyMSwxNS4xNlYxOGEzLDMsMCwxLDEtNiwwVjEySDcuMDdhMS45MiwxLjkyLDAsMCwwLTEuOSwxLjMyQzIuODYsMTkuNjgsMi4yNCwyMS40MywyLjA3LDIySDMzLjkzQzMzLjc5LDIxLjQ5LDMzLjI4LDIwLjA3LDMxLjU4LDE1LjRaIi8+XG4gICAgICAgICAgICA8cGF0'@;
put 'aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC00LS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4y'@;
put 'OCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgZD0iTTIsMjR2NmEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMjRabTI4LDVIMjZWMjdoNFoiLz5c'@;
put 'biAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIiBkPSJNMTMsOS45MiwxNyw2VjE4YTEsMSwwLDEsMCwyLDBWNmw0LDMuOTVhMSwxLDAsMCwwLC43MS4yOWwuMTEsMGE3LjQ2LDcuNDYsMCwwLDEtMS4yNS0zLjUy'@;
put 'TDE4LDIuMTYsMTEuNjEsOC41QTEsMSwwLDAsMCwxMyw5LjkyWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQiIGQ9Ik0zMC44NywxMy40NWE3LjU1LDcuNTUsMCwwLDEtLjg3LjA1QTcuNDYsNy40Niww'@;
put 'LDAsMSwyNS41MSwxMkgyMXY2YTMsMywwLDEsMS02LDBWMTJINy4wN2ExLjkyLDEuOTIsMCwwLDAtMS45LDEuMzJDMi44NiwxOS42OCwyLjI0LDIxLjQzLDIuMDcsMjJIMzMuOTNDMzMuNzcsMjEuNDMsMzMuMTUsMTkuNywzMC44NywxMy40NVoiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY2xh'@;
put 'c3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC00LS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0yLDI0djZhMiwyLDAsMCww'@;
put 'LDIsMkgzMmEyLDIsMCwwLDAsMi0yVjI0Wm0yOCw1SDI2VjI3aDRaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNMzAuODQsMTMuMzdBMS45NCwxLjk0LDAsMCwwLDI4LjkzLDEySDIxdjZhMywzLDAsMSwxLTYsMFYxMkg3'@;
put 'LjA3YTEuOTIsMS45MiwwLDAsMC0xLjksMS4zMkMyLjg2LDE5LjY4LDIuMjQsMjEuNDMsMi4wNywyMkgzMy45M0MzMy43NywyMS40MywzMy4xNCwxOS42OSwzMC44NCwxMy4zN1oiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIGQ9'@;
put 'Ik0xMyw5LjkyLDE3LDZWMThhMSwxLDAsMSwwLDIsMFY2bDQsMy45NUExLDEsMCwxLDAsMjQuMzgsOC41TDE4LDIuMTYsMTEuNjEsOC41QTEsMSwwLDAsMCwxMyw5LjkyWiIvPlxuJykseS5DbHJTaGFwZUJhY2t1cD0oMCxnLmNsckljb25TVkcpKCc8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGlu'@;
put 'ZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgeD0iNiIgeT0iMjIiIHdpZHRoPSIyNCIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIgeD0iMjYi'@;
put 'IHk9IjI2IiB3aWR0aD0iNCIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIgZD0iTTE4LDE5Ljg0bDQuNDctNC40NGgtLjIzYTMuNjcsMy42NywwLDAsMS0yLS42MUwxOSwx'@;
put 'NlY0YTEsMSwwLDEsMC0yLDBWMTZsLTQtMy45NWExLDEsMCwwLDAtMS40MSwxLjQyWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWFsZXJ0ZWQiIGQ9Ik0zMS41OCwxNS40SDI5LjQ2YzEsMi44NSwyLjMx'@;
put 'LDYuMzcsMi41NCw3LjA4VjMwSDRWMjIuNDhDNC4yOCwyMS42NSw3LjA1LDE0LDcuMDUsMTRIOS41OGEzLDMsMCwwLDEtLjE0LTJINy4wN2ExLjkyLDEuOTIsMCwwLDAtMS45LDEuMzJDMiwyMiwyLDIyLjEsMiwyMi4zM1YzMGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMjIuMzND'@;
put 'MzQsMjIuMTIsMzQsMjIsMzEuNTgsMTUuNFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC01LS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIu'@;
put 'MjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIHg9IjYiIHk9'@;
put 'IjIyIiB3aWR0aD0iMjQiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiB4PSIyNiIgeT0iMjYiIHdpZHRoPSI0IiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgIDxwYXRoIGNs'@;
put 'YXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIgZD0iTTE4LDE5Ljg0bDYuMzgtNi4zNUExLDEsMCwxLDAsMjMsMTIuMDhMMTksMTZWNGExLDEsMCwxLDAtMiwwVjE2bC00LTMuOTVhMSwxLDAsMCwwLTEuNDEsMS40MloiLz5cbiAgICAgICAg'@;
put 'ICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCIgZD0iTTMwLjg3LDEzLjQ1YTcuNTUsNy41NSwwLDAsMS0uODcuMDUsNy40Niw3LjQ2LDAsMCwxLTMuMzUtLjgsMywzLDAsMCwxLS4yNCwxLjNoMi41NEMzMCwxNi45NCwz'@;
put 'MS43MiwyMS42NSwzMiwyMi40OFYzMEg0VjIyLjQ4QzQuMjgsMjEuNjUsNy4wNSwxNCw3LjA1LDE0SDkuNThhMywzLDAsMCwxLS4xNC0ySDcuMDdhMS45MiwxLjkyLDAsMCwwLTEuOSwxLjMyQzIsMjIsMiwyMi4xLDIsMjIuMzNWMzBhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjIy'@;
put 'LjMzQzM0LDIyLjEsMzQsMjIsMzAuODcsMTMuNDVaIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgPHJl'@;
put 'Y3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIHg9IjYiIHk9IjIyIiB3aWR0aD0iMjQiIGhlaWdodD0iMiIvPjxyZWN0IHg9IjI2IiB5PSIyNiIgd2lkdGg9IjQiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUg'@;
put 'Y2xyLWktb3V0bGluZS1wYXRoLTIiXG4gICAgICAgICAgICAgICAgZD0iTTMwLjg0LDEzLjM3QTEuOTQsMS45NCwwLDAsMCwyOC45MywxMkgyNi41NWEzLDMsMCwwLDEtLjE0LDJoMi41NEMzMCwxNi45NCwzMS43MiwyMS42NSwzMiwyMi40OFYzMEg0VjIyLjQ4QzQuMjgsMjEuNjUsNy4wNSwx'@;
put 'NCw3LjA1LDE0SDkuNThhMywzLDAsMCwxLS4xNC0ySDcuMDdhMS45MiwxLjkyLDAsMCwwLTEuOSwxLjMyQzIsMjIsMiwyMi4xLDIsMjIuMzNWMzBhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjIyLjMzQzM0LDIyLjEsMzQsMjIsMzAuODQsMTMuMzdaIi8+XG4gICAgICAgICAgICA8'@;
put 'cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgZD0iTTE4LDE5Ljg0bDYuMzgtNi4zNUExLDEsMCwxLDAsMjMsMTIuMDhMMTksMTZWNGExLDEsMCwxLDAtMiwwVjE2bC00LTMuOTVhMSwxLDAsMCwwLTEuNDEsMS40MloiLz5cbiAgICAgICAgICAgIDxwYXRo'@;
put 'IGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0xNi41OCwyMS4yNiwxMC4yLDE0LjkxQTMsMywwLDAsMSw5LjQ0LDEySDcuMDdhMS45MiwxLjkyLDAsMCwwLTEuOSwxLjMyQzIuODYsMTkuNjgsMi4yNCwyMS40MywyLjA3LDIySDE3'@;
put 'LjMzWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCIgZD0iTTIsMjR2NmEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMjRabTI4LDRIMjZWMjZoNFoiLz5cbiAgICAgICAgICAgIDxwYXRo'@;
put 'IGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWFsZXJ0ZWQiIGQ9Ik0xOC42NiwyMkgzMy45M2MtLjE1LS41MS0uNjUtMS45My0yLjM1LTYuNkgyNS4zbC01Ljg5LDUuODZaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFs'@;
put 'ZXJ0ZWQgY2xyLWktc29saWQtcGF0aC00LS1hbGVydGVkIiBkPSJNMTgsMTkuODRsNC40Ny00LjQ0aC0uMjNhMy42NCwzLjY0LDAsMCwxLTItLjYxTDE5LDE2VjRhMSwxLDAsMSwwLTIsMFYxNmwtNC0zLjk1YTEsMSwwLDAsMC0xLjQxLDEuNDJaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFz'@;
put 'cz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC01LS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4'@;
put 'LDAsMCwwLDI2Ljg1LDEuMTRaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgZD0iTTE4LDE5Ljg0bDYuMzgtNi4zNUExLDEsMCwxLDAsMjMsMTIuMDhMMTksMTZWNGExLDEsMCwxLDAtMiwwVjE2bC00'@;
put 'LTMuOTVhMSwxLDAsMCwwLTEuNDEsMS40MloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIiBkPSJNMTYuNTgsMjEuMjYsMTAuMiwxNC45MUEzLDMsMCwwLDEsOS40NCwxMkg3LjA3YTEuOTIsMS45Miww'@;
put 'LDAsMC0xLjksMS4zMkMyLjg2LDE5LjY4LDIuMjQsMjEuNDMsMi4wNywyMkgxNy4zM1oiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMy0tYmFkZ2VkIiBkPSJNMiwyNHY2YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCww'@;
put 'LDItMlYyNFptMjgsNEgyNlYyNmg0WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC00LS1iYWRnZWQiIGQ9Ik0xOC42NiwyMkgzMy45M2MtLjE3LS41Ny0uNzktMi4zLTMuMDYtOC41NWE3LjU1LDcuNTUsMCwwLDEtLjg3'@;
put 'LjA1LDcuNDYsNy40NiwwLDAsMS0zLjM1LS44LDMsMywwLDAsMS0uODYsMi4yMWwtNi4zOCw2LjM1WiIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTUtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIg'@;
put 'cj0iNSIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTE4LDE5Ljg0bDYuMzgtNi4zNUExLDEsMCwxLDAsMjMsMTIuMDhMMTksMTZWNGExLDEsMCwxLDAtMiwwVjE2bC00LTMuOTVhMSwxLDAsMCwwLTEuNDEsMS40MloiLz5c'@;
put 'biAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIGQ9Ik0xOS40MSwyMS4yNmwtLjc0Ljc0SDMzLjkzYy0uMTctLjU3LS43OS0yLjMxLTMuMDktOC42M0ExLjk0LDEuOTQsMCwwLDAsMjguOTMsMTJIMjYuNTVhMywzLDAsMCwxLS43NiwyLjky'@;
put 'WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgZD0iTTE2LjU4LDIxLjI2LDEwLjIsMTQuOTFBMywzLDAsMCwxLDkuNDQsMTJINy4wN2ExLjkyLDEuOTIsMCwwLDAtMS45LDEuMzJDMi44NiwxOS42OCwyLjI0LDIxLjQzLDIuMDcs'@;
put 'MjJIMTcuMzNaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC00IiBkPSJNMiwyNHY2YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYyNFptMjgsNEgyNlYyNmg0WiIvPlxuJykseS5DbHJTaGFwZURldmljZXM9KDAsZy5jbHJJ'@;
put 'Y29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMiwxM0gyNGEyLDIsMCwwLDAtMiwyVjMwYTIsMiwwLDAsMCwyLDJoOGEyLDIsMCwwLDAsMi0yVjE1QTIsMiwwLDAsMCwzMiwxM1ptMCwyVjI2SDI0VjE1Wk0yNCwzMFYyNy42aDhW'@;
put 'MzBaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTIwLDIySDRWNkgyOHY1aDJWNmEyLDIsMCwwLDAtMi0ySDRBMiwyLDAsMCwwLDIsNlYyMmEyLDIsMCwwLDAsMiwySDIwWiIvPlxuICAgICAgICAgICAgPHBhdGgg'@;
put 'Y2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIGQ9Ik0yMCwyNkg5YTEsMSwwLDAsMCwwLDJIMjBaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzIsMTNIMjRhMiwyLDAsMCwwLTIsMlYzMGEy'@;
put 'LDIsMCwwLDAsMiwyaDhhMiwyLDAsMCwwLDItMlYxNUEyLDIsMCwwLDAsMzIsMTNabTAsMlYyOEgyNFYxNVoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIGQ9Ik0yOCw0SDRBMiwyLDAsMCwwLDIsNlYyMmEyLDIsMCwwLDAsMiwy'@;
put 'aDh2Mkg5LjMyQTEuMiwxLjIsMCwwLDAsOCwyN2ExLjIsMS4yLDAsMCwwLDEuMzIsMUgxOS45MnYtLjM3SDIwVjIySDRWNkgyOHY1aDJWNkEyLDIsMCwwLDAsMjgsNFoiLz5cbicpLHkuQ2xyU2hhcGVLZXlib2FyZD0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGlu'@;
put 'ZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMyLDhINGEyLDIsMCwwLDAtMiwyVjI2YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYxMEEyLDIsMCwwLDAsMzIsOFptMCwxOEg0VjEwSDMyWiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWkt'@;
put 'b3V0bGluZS1wYXRoLTIiIHg9IjciIHk9IjEzIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgeD0iMTEiIHk9IjEzIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8'@;
put 'cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgeD0iMTUiIHk9IjEzIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgeD0iMTkiIHk9IjEzIiB3aWR0'@;
put 'aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIgeD0iMjMiIHk9IjEzIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1v'@;
put 'dXRsaW5lLXBhdGgtNyIgeD0iMjciIHk9IjEzIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtOCIgeD0iNyIgeT0iMTciIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgIDxy'@;
put 'ZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC05IiB4PSIxMSIgeT0iMTciIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xMCIgeD0iMTUiIHk9IjE3IiB3aWR0'@;
put 'aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTEiIHg9IjE5IiB5PSIxNyIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWkt'@;
put 'b3V0bGluZS1wYXRoLTEyIiB4PSIyMyIgeT0iMTciIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xMyIgeD0iMjciIHk9IjE3IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAg'@;
put 'ICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTQiIHg9IjI3IiB5PSIyMiIgd2lkdGg9IjEuOTQiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTE1IiB4PSI3IiB5PSIy'@;
put 'MiIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTE2IiB4PSIxMS4xMyIgeT0iMjIiIHdpZHRoPSIxMy43NSIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWkt'@;
put 'c29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzIsOEg0YTIsMiwwLDAsMC0yLDJWMjZhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjEwQTIsMiwwLDAsMCwzMiw4Wk0xOSwxM2gydjJIMTlabTAsNGgydjJIMTlabS00LTRoMnYySDE1Wm0wLDRoMnYySDE1Wm0tNC00aDJ2Mkgx'@;
put 'MVpNOSwyNEg3VjIySDlabTAtNUg3VjE3SDlabTAtNEg3VjEzSDlabTIsMmgydjJIMTFabTEzLjg4LDdIMTEuMTNWMjJIMjQuODhaTTI1LDE5SDIzVjE3aDJabTAtNEgyM1YxM2gyWm0zLjk0LDlIMjdWMjJoMS45NFpNMjksMTlIMjdWMTdoMlptMC00SDI3VjEzaDJaIi8+XG4nKSx5LkNsclNo'@;
put 'YXBlTW91c2U9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xOCwzNEExMCwxMCwwLDAsMSw4LDI0VjEyYTEwLDEwLDAsMCwxLDIwLDBWMjRBMTAsMTAsMCwwLDEsMTgsMzRaTTE4LDRhOCw4LDAsMCwwLTgsOFYy'@;
put 'NGE4LDgsMCwwLDAsMTYsMFYxMkE4LDgsMCwwLDAsMTgsNFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMTgsMTVhMSwxLDAsMCwxLTEtMVYxMGExLDEsMCwwLDEsMiwwdjRBMSwxLDAsMCwxLDE4LDE1WiIvPlxu'@;
put 'ICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTE4LDJBMTAsMTAsMCwwLDAsOCwxMlYyNGExMCwxMCwwLDAsMCwyMCwwVjEyQTEwLDEwLDAsMCwwLDE4LDJabTEuMywxMS40NGExLjMsMS4zLDAsMCwxLTIuNiwwVjEwYTEuMywxLjMs'@;
put 'MCwwLDEsMi42LDBaIi8+XG4nKSx5LkNsclNoYXBlRGFzaGJvYXJkPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMjUuMTgsMTIuMzJsLTUuOTEsNS44MWEzLDMsMCwxLDAsMS40MSwxLjQybDUuOTItNS44MVoi'@;
put 'Lz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTE4LDQuMjVBMTYuNDksMTYuNDksMCwwLDAsNS40LDMxLjRsLjMuMzVIMzAuM2wuMy0uMzVBMTYuNDksMTYuNDksMCwwLDAsMTgsNC4yNVptMTEuMzQsMjUuNUg2'@;
put 'LjY2YTE0LjQzLDE0LjQzLDAsMCwxLTMuMTEtNy44NEg3di0ySDMuNTVBMTQuNDEsMTQuNDEsMCwwLDEsNywxMS4yOWwyLjQ1LDIuNDUsMS40MS0xLjQxTDguNDMsOS44N0ExNC40MSwxNC40MSwwLDAsMSwxNyw2LjI5djMuNWgyVjYuM2ExNC40NywxNC40NywwLDAsMSwxMy40LDEzLjYxSDI4'@;
put 'LjkydjJoMy41M0ExNC40MywxNC40MywwLDAsMSwyOS4zNCwyOS43NVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0xNS44NSwxOC42OWEzLDMsMCwxLDAsNC44My44NWw1Ljky'@;
put 'LTUuODEtMS40MS0xLjQxLTUuOTEsNS44MUEzLDMsMCwwLDAsMTUuODUsMTguNjlaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiBkPSJNMzIuNTgsMTNhNy40NSw3LjQ1LDAsMCwxLTIu'@;
put 'MDYuNDQsMTQuNCwxNC40LDAsMCwxLDEuOTMsNi40M0gyOC45MnYyaDMuNTNhMTQuNDMsMTQuNDMsMCwwLDEtMy4xMSw3Ljg0SDYuNjZhMTQuNDMsMTQuNDMsMCwwLDEtMy4xMS03Ljg0SDd2LTJIMy41NUExNC40MSwxNC40MSwwLDAsMSw3LDExLjI5bDIuNDUsMi40NSwxLjQxLTEuNDFMOC40'@;
put 'Myw5Ljg3QTE0LjQxLDE0LjQxLDAsMCwxLDE3LDYuMjl2My41aDJWNi4zQTE0LjQxLDE0LjQxLDAsMCwxLDIyLjU4LDdhNy41Miw3LjUyLDAsMCwxLS4wOC0xLDcuNTIsNy41MiwwLDAsMSwuMDktMS4wOUExNi40OSwxNi40OSwwLDAsMCw1LjQsMzEuNGwuMy4zNUgzMC4zbC4zLS4zNWExNi40'@;
put 'NSwxNi40NSwwLDAsMCwyLTE4LjM2WiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+XG4gICAgICAgICAgICAgICAgPHBh'@;
put 'dGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTE4LDQuMjVBMTYuNDksMTYuNDksMCwwLDAsNS40LDMxLjRsLjMuMzVIMzAuM2wuMy0uMzVBMTYuNDksMTYuNDksMCwwLDAsMTgsNC4yNVptOC42LDkuNDgtNS45Miw1LjgxYTMsMywwLDEsMS0xLjQxLTEuNDJs'@;
put 'NS45MS01LjgxWm0tMjMsNi4xN0g3djJIMy41NmMwLS4zOS0uMDUtLjc3LS4wNS0xLjE3UzMuNTMsMjAuMTgsMy41NSwxOS45Wm00Ljg4LTEwLDIuNDYsMi40Nkw5LjQ3LDEzLjc0LDcsMTEuMjlBMTQuNTcsMTQuNTcsMCwwLDEsOC40Myw5Ljg3Wk0xOSw5Ljc5SDE3VjYuMjljLjMyLDAsLjYz'@;
put 'LDAsMSwwcy43LDAsMSwuMDVaTTMyLjQ5LDIwLjc0YzAsLjM5LDAsLjc5LS4wNSwxLjE3SDI4Ljkydi0yaDMuNTNDMzIuNDcsMjAuMTgsMzIuNDksMjAuNDYsMzIuNDksMjAuNzRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29s'@;
put 'aWQtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0zMi41OCwxM2E3LjQ2LDcuNDYsMCwwLDEtMTAtOC4xMkExNi40OSwxNi40OSwwLDAsMCw1LjQsMzEuNGwuMy4zNUgzMC4zbC4zLS4zNWExNi40NSwxNi40NSwwLDAsMCwyLTE4LjM2Wk0xNyw2LjI5Yy4zMiwwLC42MywwLDEsMHMuNywwLDEsLjA1djMu'@;
put 'NUgxN1pNNywyMS45MUgzLjU2YzAtLjM5LS4wNS0uNzctLjA1LTEuMTdzMC0uNTYsMC0uODNIN1ptMi41MS04LjE2TDcsMTEuMjlBMTQuNTcsMTQuNTcsMCwwLDEsOC40Myw5Ljg3bDIuNDYsMi40NlptMTAuNjIsOS4xOWEzLDMsMCwxLDEtLjgyLTQuODFsNS45MS01LjgxLDEuNDEsMS40MS01'@;
put 'LjkyLDUuODFBMywzLDAsMCwxLDIwLjA5LDIyLjkzWm0xMi4zNS0xSDI4Ljkydi0yaDMuNTNjMCwuMjgsMCwuNTUsMCwuODNTMzIuNDcsMjEuNTIsMzIuNDQsMjEuOTFaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1w'@;
put 'YXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuJykseS5DbHJTaGFwZUhvc3Q9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xOCwyNC4zYTIuNDgsMi40OCwwLDEsMCwy'@;
put 'LjQ4LDIuNDdBMi40OCwyLjQ4LDAsMCwwLDE4LDI0LjNabTAsMy42YTEuMTMsMS4xMywwLDEsMSwxLjEzLTEuMTJBMS4xMywxLjEzLDAsMCwxLDE4LDI3LjlaIi8+PHJlY3QgeD0iMTMuNSIgeT0iMjAuNyIgd2lkdGg9IjkiIGhlaWdodD0iMS40NCIvPlxuICAgICAgICAgICAgICAgIDxwYXRo'@;
put 'IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMjUuNjUsMy42SDEwLjM1QTEuMzUsMS4zNSwwLDAsMCw5LDQuOTVWMzIuNEgyN1Y0Ljk1QTEuMzUsMS4zNSwwLDAsMCwyNS42NSwzLjZabS0uNDUsMjdIMTAuOFY1LjRIMjUuMloiLz5cbiAgICAgICAgICAg'@;
put 'ICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgeD0iMTIuNiIgeT0iNy4yIiB3aWR0aD0iMTAuOCIgaGVpZ2h0PSIxLjQ0Ii8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQi'@;
put 'IHg9IjEyLjYiIHk9IjEwLjgiIHdpZHRoPSIxMC44IiBoZWlnaHQ9IjEuNDQiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgZD0iTTE1LjIsMjcuOGMwLDEuNSwxLjIsMi44LDIuOCwy'@;
put 'LjhzMi44LTEuMiwyLjgtMi44UzE5LjUsMjUsMTgsMjVTMTUuMiwyNi4yLDE1LjIsMjcuOHogTTE5LjIsMjcuOGMwLDAuNy0wLjYsMS4yLTEuMiwxLjJzLTEuMi0wLjYtMS4yLTEuMnMwLjYtMS4yLDEuMi0xLjJTMTkuMiwyNy4xLDE5LjIsMjcuOHoiLz5cbiAgICAgICAgICAgICAgICA8cmVj'@;
put 'dCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIgeD0iMTMiIHk9IjIxIiB3aWR0aD0iMTAiIGhlaWdodD0iMS42Ii8+XG4gICAgICAgICAgICAgICAgPHBvbHlnb24gY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWkt'@;
put 'b3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiIHBvaW50cz0iMjEuMyw2IDEyLDYgMTIsNy42IDIwLjQsNy42Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWFsZXJ0ZWQiIGQ9Ik0xMiwxMS42aDYuNmMw'@;
put 'LTAuNiwwLjItMS4xLDAuNC0xLjZoLTdWMTEuNnoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYWxlcnRlZCIgZD0iTTI2LDE1LjRWMzJIMTBWNGgxMi41bDEuMS0ySDkuNUM4LjcsMiw4LDIuNyw4'@;
put 'LDMuNVYzNGgyMFYxNS40SDI2eiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC02LS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNMjYuOSwxLjFMMjEuMSwxMWMtMC40LDAuNi0wLjIsMS40LDAuMywxLjhj'@;
put 'MC4yLDAuMiwwLjUsMC4yLDAuOCwwLjJoMTEuNWMwLjcsMCwxLjMtMC41LDEuMy0xLjJjMC0wLjMtMC4xLTAuNS0wLjItMC44bC01LjctOS45Yy0wLjQtMC42LTEuMS0wLjgtMS44LTAuNUMyNy4xLDAuOCwyNywxLDI2LjksMS4xeiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJj'@;
put 'bHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgZD0iTTE1LjIsMjcuOGMwLDEuNSwxLjIsMi44LDIuOCwyLjhzMi44LTEuMiwyLjgtMi44UzE5LjUsMjUsMTgsMjVTMTUuMiwyNi4yLDE1LjIsMjcuOHogTTE5LjIsMjcuOGMwLDAuNy0wLjYsMS4yLTEu'@;
put 'MiwxLjJzLTEuMi0wLjYtMS4yLTEuMnMwLjYtMS4yLDEuMi0xLjJTMTkuMiwyNy4xLDE5LjIsMjcuOHoiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiIHg9IjEzIiB5PSIyMSIgd2lkdGg9'@;
put 'IjEwIiBoZWlnaHQ9IjEuNiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIgZD0iTTI0LDEwLjVjLTAuMS0wLjItMC4yLTAuMy0wLjMtMC41SDEydjEuNmgxMlYxMC41eiIvPlxuICAgICAg'@;
put 'ICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCIgZD0iTTEyLDZ2MS42aDEwLjdjLTAuMS0wLjUtMC4yLTEuMS0wLjItMS42SDEyeiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRs'@;
put 'aW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWJhZGdlZCIgZD0iTTI2LDEyLjNWMzJIMTBWNGgxMi44YzAuMi0wLjcsMC41LTEuNCwwLjktMkg5LjVDOC43LDIsOCwyLjcsOCwzLjVWMzRoMjBWMTMuMkMyNy4zLDEzLDI2LjYsMTIuNywyNiwxMi4zeiIvPlxuICAgICAgICAgICAg'@;
put 'ICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNi0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgt'@;
put 'MSIgZD0iTTI2LjUsMmgtMTdDOC43LDIsOCwyLjcsOCwzLjVWMzRoMjBWMy41QzI4LDIuNywyNy4zLDIsMjYuNSwyeiBNMTgsMzAuNWMtMS41LDAtMi44LTEuMi0yLjgtMi44UzE2LjUsMjUsMTgsMjVzMi44LDEuMiwyLjgsMi44UzE5LjUsMzAuNSwxOCwzMC41eiBNMjMsMjIuNkgxM1YyMWgx'@;
put 'MFYyMi42eiBNMjQsMTEuNkgxMlYxMGgxMlYxMS42eiBNMjQsNy42SDEyVjZoMTJWNy42eiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgY3g9IjE4IiBjeT0iMjcuOCIgcj0iMS4yIi8+XG4gICAgICAgICAgICAgICAg'@;
put 'PHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIgZD0iTTIyLjIsMTUuM2MtMiwwLTMuNy0xLjYtMy43LTMuN0gxMlYxMGg2LjljMC0wLjEsMC4xLTAuMiwwLjEtMC4ybDEuMi0yLjJIMTJWNmg5LjJsMi4zLTRoLTE0QzguNywyLDgs'@;
put 'Mi43LDgsMy41VjM0aDIwVjE1LjNIMjIuMnogTTE4LDMwLjVjLTEuNSwwLTIuOC0xLjItMi44LTIuOFMxNi41LDI1LDE4LDI1czIuOCwxLjIsMi44LDIuOFMxOS41LDMwLjUsMTgsMzAuNXogTTIzLDIyLjZIMTNWMjFoMTBWMjIuNnoiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNz'@;
put 'PSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQiIGN4PSIxOCIgY3k9IjI3LjgiIHI9IjEuMiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWFsZXJ0ZWQgY2xyLWkt'@;
put 'YWxlcnQiIGQ9Ik0yNi45LDFsLTUuNyw5LjljLTAuMywwLjYtMC4xLDEuNCwwLjUsMS43YzAuMiwwLjEsMC40LDAuMiwwLjYsMC4yaDExLjRjMC43LDAsMS4zLTAuNiwxLjMtMS4zYzAtMC4yLTAuMS0wLjQtMC4yLTAuNkwyOS4xLDFjLTAuNC0wLjYtMS4xLTAuOC0xLjgtMC41QzI3LjEsMC43'@;
put 'LDI3LDAuOCwyNi45LDF6Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0yNCwxMC4zdjEuMkgxMlYxMGgxMS44Yy0wLjUtMC43LTAuOC0xLjUtMS0yLjRIMTJWNmgxMC41YzAsMCwwLTAu'@;
put 'MSwwLTAuMWMwLTEuNCwwLjQtMi43LDEuMS0zLjlIOS41QzguNywyLDgsMi43LDgsMy41VjM0aDIwVjEzLjFDMjYuNCwxMi42LDI1LDExLjcsMjQsMTAuM3ogTTE4LDMwLjVjLTEuNSwwLTIuOC0xLjItMi44LTIuOFMxNi41LDI1LDE4LDI1czIuOCwxLjIsMi44LDIuOFMxOS41LDMwLjUsMTgs'@;
put 'MzAuNXpNMjMsMjIuNkgxM1YyMWgxMFYyMi42eiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQiIGN4PSIxOCIgY3k9IjI3LjgiIHI9IjEuMiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUg'@;
put 'Y2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjUuOSIgcj0iNSIvPlxuJykseS5DbHJTaGFwZVN0b3JhZ2U9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWkt'@;
put 'b3V0bGluZS1wYXRoLTEiIGQ9Ik0zMyw2LjY5aDBjLS4xOC0zLjQxLTkuNDctNC4zMy0xNS00LjMzUzMsMy4yOSwzLDYuNzhWMjkuMzdjMCwzLjQ5LDkuNDMsNC40MywxNSw0LjQzczE1LS45MywxNS00LjQzVjYuNzhzMCwwLDAsMFMzMyw2LjcsMzMsNi42OVptLTIsNy41NmMtLjMzLjg2LTUu'@;
put 'MDYsMi40NS0xMywyLjQ1QTM3LjQ1LDM3LjQ1LDAsMCwxLDcsMTUuMzR2Mi4wOEE0My4zMiw0My4zMiwwLDAsMCwxOCwxOC43YzQsMCw5LjkzLS40OCwxMy0ydjUuMTdjLS4zMy44Ni01LjA2LDIuNDUtMTMsMi40NUEzNy40NSwzNy40NSwwLDAsMSw3LDIyLjkyVjI1YTQzLjMyLDQzLjMyLDAs'@;
put 'MCwwLDExLDEuMjhjNCwwLDkuOTMtLjQ4LDEzLTJ2NS4xYy0uMzUuODYtNS4wOCwyLjQ1LTEzLDIuNDVTNS4zLDMwLjIsNSwyOS4zN1Y2LjgyQzUuMyw2LDEwLDQuMzYsMTgsNC4zNmM3Ljc3LDAsMTIuNDYsMS41MywxMywyLjM3LS41Mi44Ny01LjIxLDIuMzktMTMsMi4zOUEzNy42LDM3LjYs'@;
put 'MCwwLDEsNyw3Ljc2VjkuODVhNDMuNTMsNDMuNTMsMCwwLDAsMTEsMS4yN2M0LDAsOS45My0uNDgsMTMtMloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgZD0iTTE5LjUxLDkuMDks'@;
put 'MTgsOS4xMUEzNy42LDM3LjYsMCwwLDEsNyw3Ljc2VjkuODVhNDMuNTMsNDMuNTMsMCwwLDAsMTEsMS4yN2guNjFBMy42NiwzLjY2LDAsMCwxLDE5LDkuODlaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRo'@;
put 'LTItLWFsZXJ0ZWQiIGQ9Ik0yOC44MywxNS40QTM4LjM3LDM4LjM3LDAsMCwxLDE4LDE2LjcsMzcuNDUsMzcuNDUsMCwwLDEsNywxNS4zNHYyLjA4QTQzLjMzLDQzLjMzLDAsMCwwLDE4LDE4LjdjNCwwLDkuOTMtLjQ4LDEzLTJ2NS4xN2MtLjMzLjg2LTUuMDYsMi40NS0xMywyLjQ1QTM3LjQ1'@;
put 'LDM3LjQ1LDAsMCwxLDcsMjIuOTJWMjVhNDMuMzMsNDMuMzMsMCwwLDAsMTEsMS4yOGM0LDAsOS45My0uNDgsMTMtMnY1LjFjLS4zNS44Ni01LjA4LDIuNDUtMTMsMi40NVM1LjMsMzAuMiw1LDI5LjM3VjYuODJDNS4zLDYsMTAsNC4zNiwxOCw0LjM2YzEuNSwwLDIuODkuMDYsNC4xNS4xNmwx'@;
put 'LjEtMS45Yy0xLjg2LS4xOC0zLjctLjI2LTUuMjUtLjI2LTUuNTcsMC0xNSwuOTMtMTUsNC40M1YyOS4zN2MwLDMuNDksOS40Myw0LjQzLDE1LDQuNDNzMTUtLjkzLDE1LTQuNDN2LTE0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNs'@;
put 'ci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIi8+XG4g'@;
put 'ICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiBkPSJNNyw3Ljc2VjkuODVhNDMuNTMsNDMuNTMsMCwwLDAsMTEsMS4yNyw1NC44Miw1NC44MiwwLDAsMCw2LjItLjM2LDcuNSw3LjUsMCwwLDEtMS4x'@;
put 'My0xLjg4Yy0xLjUuMTUtMy4yLjI0LTUuMDcuMjRBMzcuNiwzNy42LDAsMCwxLDcsNy43NloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiIGQ9Ik0zMSwxMy40M3YuODJjLS4zMy44Ni01'@;
put 'LjA2LDIuNDUtMTMsMi40NUEzNy40NSwzNy40NSwwLDAsMSw3LDE1LjM0djIuMDhBNDMuMzMsNDMuMzMsMCwwLDAsMTgsMTguN2M0LDAsOS45My0uNDgsMTMtMnY1LjE3Yy0uMzMuODYtNS4wNiwyLjQ1LTEzLDIuNDVBMzcuNDUsMzcuNDUsMCwwLDEsNywyMi45MlYyNWE0My4zMyw0My4zMyww'@;
put 'LDAsMCwxMSwxLjI4YzQsMCw5LjkzLS40OCwxMy0ydjUuMWMtLjM1Ljg2LTUuMDgsMi40NS0xMywyLjQ1UzUuMywzMC4yLDUsMjkuMzdWNi44MkM1LjMsNiwxMCw0LjM2LDE4LDQuMzZjMS43LDAsMy4yNS4wOCw0LjY0LjJhNy40NCw3LjQ0LDAsMCwxLC42Ny0xLjk0Yy0xLjg4LS4xOC0zLjc1'@;
put 'LS4yNi01LjMxLS4yNi01LjU3LDAtMTUsLjkzLTE1LDQuNDNWMjkuMzdjMCwzLjQ5LDkuNDMsNC40MywxNSw0LjQzczE1LS45MywxNS00LjQzVjEyLjg3QTcuNDUsNy40NSwwLDAsMSwzMSwxMy40M1oiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1i'@;
put 'YWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0xNy45MSwxOC4yOGM4LjA4LDAsMTQuNjYtMS43'@;
put 'NCwxNS4wOS0zLjk0VjguNTljLS40MywyLjItNywzLjk0LTE1LjA5LDMuOTRBMzkuNCwzOS40LDAsMCwxLDYuMjUsMTFWOWEzOS40LDM5LjQsMCwwLDAsMTEuNjYsMS41MUMyNiwxMC41MywzMi41Miw4Ljc5LDMzLDYuNjFoMEMzMi44LDMuMiwyMy41MiwyLjI4LDE4LDIuMjhTMywzLjIxLDMs'@;
put 'Ni43MVYyOS4yOWMwLDMuNDksOS40Myw0LjQzLDE1LDQuNDNzMTUtLjkzLDE1LTQuNDNWMjQuMDlDMzIuNTcsMjYuMjgsMjYsMjgsMTcuOTEsMjhBMzkuNCwzOS40LDAsMCwxLDYuMjUsMjYuNTJ2LTJBMzkuNCwzOS40LDAsMCwwLDE3LjkxLDI2QzI2LDI2LDMyLjU3LDI0LjI4LDMzLDIyLjA5'@;
put 'VjE2LjM0Yy0uNDMsMi4yLTcsMy45NC0xNS4wOSwzLjk0QTM5LjQsMzkuNCwwLDAsMSw2LjI1LDE4Ljc3di0yQTM5LjQsMzkuNCwwLDAsMCwxNy45MSwxOC4yOFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0x'@;
put 'LS1hbGVydGVkIiBkPSJNMTcuOTEsMjAuMjhBMzkuNCwzOS40LDAsMCwxLDYuMjUsMTguNzd2LTJhMzkuNCwzOS40LDAsMCwwLDExLjY2LDEuNTFjNi45LDAsMTIuNy0xLjI3LDE0LjUxLTNIMjIuMjNhMy42NywzLjY3LDAsMCwxLTMuNTUtMi43NWgtLjc3QTM5LjQsMzkuNCwwLDAsMSw2LjI1'@;
put 'LDExVjlhMzkuNCwzOS40LDAsMCwwLDExLjY2LDEuNTFoLjgyQTMuNjQsMy42NCwwLDAsMSwxOSw5Ljc1bDQuMTctNy4yMmMtMS44NS0uMTgtMy42OC0uMjUtNS4yMS0uMjUtNS41NywwLTE1LC45My0xNSw0LjQzVjI5LjI5YzAsMy40OSw5LjQzLDQuNDMsMTUsNC40M3MxNS0uOTMsMTUtNC40'@;
put 'M1YyNC4wOUMzMi41NywyNi4yOCwyNiwyOCwxNy45MSwyOEEzOS40LDM5LjQsMCwwLDEsNi4yNSwyNi41MnYtMkEzOS40LDM5LjQsMCwwLDAsMTcuOTEsMjZDMjYsMjYsMzIuNTcsMjQuMjgsMzMsMjIuMDlWMTYuMzRDMzIuNTcsMTguNTMsMjYsMjAuMjgsMTcuOTEsMjAuMjhaIi8+XG4gICAg'@;
put 'ICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDFsLTUuNzIsOS45MWExLjI4LDEuMjgsMCwwLDAsMS4xLDEuOTFIMzMuNjhhMS4yOCwxLjI4LDAsMCwwLDEuMS0xLjkx'@;
put 'TDI5LjA2LDFBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDFaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0xNy45MSwxOC4yOGM4LjA4LDAsMTQuNjYtMS43NCwxNS4wOS0zLjk0di0xLjZh'@;
put 'Ny40Nyw3LjQ3LDAsMCwxLTcuMzgtLjgsNDguMyw0OC4zLDAsMCwxLTcuNzEuNTlBMzkuNCwzOS40LDAsMCwxLDYuMjUsMTFWOWEzOS40LDM5LjQsMCwwLDAsMTEuNjYsMS41MSw1MSw1MSwwLDAsMCw2LS4zNCw3LjQ2LDcuNDYsMCwwLDEtLjU5LTcuNjVjLTEuODctLjE4LTMuNzMtLjI2LTUu'@;
put 'MjgtLjI2LTUuNTcsMC0xNSwuOTMtMTUsNC40M1YyOS4yOWMwLDMuNDksOS40Myw0LjQzLDE1LDQuNDNzMTUtLjkzLDE1LTQuNDNWMjQuMDlDMzIuNTcsMjYuMjgsMjYsMjgsMTcuOTEsMjhBMzkuNCwzOS40LDAsMCwxLDYuMjUsMjYuNTJ2LTJBMzkuNCwzOS40LDAsMCwwLDE3LjkxLDI2QzI2'@;
put 'LDI2LDMyLjU3LDI0LjI4LDMzLDIyLjA5VjE2LjM0Yy0uNDMsMi4yLTcsMy45NC0xNS4wOSwzLjk0QTM5LjQsMzkuNCwwLDAsMSw2LjI1LDE4Ljc3di0yQTM5LjQsMzkuNCwwLDAsMCwxNy45MSwxOC4yOFoiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZC0t'@;
put 'YmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI1Ljg2IiByPSI1Ii8+XG4nKSx5LkNsclNoYXBlQ2x1c3Rlcj0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzEuMzYsOEgyNy41djJIMzFWMzBIMjcuNXYySDMzVjkuNjdBMS42NSwx'@;
put 'LjY1LDAsMCwwLDMxLjM2LDhaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTUsMTBIOC41VjhINC42NEExLjY1LDEuNjUsMCwwLDAsMyw5LjY3VjMySDguNVYzMEg1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xy'@;
put 'LWktb3V0bGluZS1wYXRoLTIiLz48ZWxsaXBzZSBjeD0iMTguMDEiIGN5PSIyNS45OSIgcng9IjEuOCIgcnk9IjEuNzkiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjQuMzIsNEgxMS42OEExLjY4LDEuNjgsMCww'@;
put 'LDAsMTAsNS42OFYzMkgyNlY1LjY4QTEuNjgsMS42OCwwLDAsMCwyNC4zMiw0Wk0yNCwzMEgxMlY2SDI0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjEzLjUiIHk9IjkuMjEiIHdpZHRoPSI5IiBoZWlnaHQ9IjEu'@;
put 'NiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik01LDEwSDguNVY4SDQuNjRBMS42NSwxLjY1LDAsMCwwLDMsOS42N1YzMkg4LjVWMzBINVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxp'@;
put 'bmUtcGF0aC0xLS1hbGVydGVkIi8+PGVsbGlwc2UgY3g9IjE4LjAxIiBjeT0iMjUuOTkiIHJ4PSIxLjgiIHJ5PSIxLjc5IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE5LDkuODls'@;
put 'LjM5LS42OEgxMy41djEuNmg1LjE3QTMuNjUsMy42NSwwLDAsMSwxOSw5Ljg5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNCwzMEgxMlY2aDkuMjlsMS4xNS0ySDExLjY4QTEu'@;
put 'NjgsMS42OCwwLDAsMCwxMCw1LjY4VjMySDI2VjE1LjRIMjRaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSIzMSAxNS40IDMxIDMwIDI3LjUgMzAgMjcuNSAzMiAzMyAz'@;
put 'MiAzMyAxNS40IDMxIDE1LjQiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC01LS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4'@;
put 'LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNi0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTUsMTBIOC41VjhI'@;
put 'NC42NEExLjY1LDEuNjUsMCwwLDAsMyw5LjY3VjMySDguNVYzMEg1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIi8+PGVsbGlwc2UgY3g9IjE4LjAxIiBjeT0iMjUuOTkiIHJ4PSIxLjgiIHJ5PSIxLjc5IiBjbGFzcz0iY2xyLWkt'@;
put 'b3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjEzLjUiIHk9IjkuMjEiIHdpZHRoPSI5IiBoZWlnaHQ9IjEuNiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2Vk'@;
put 'Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjQsMTAuNDlWMzBIMTJWNkgyMi41YTcuNDksNy40OSwwLDAsMSwuMjgtMkgxMS42OEExLjY4LDEuNjgsMCwwLDAsMTAsNS42OFYzMkgyNlYxMi4zNEE3LjUzLDcuNTMsMCwwLDEsMjQsMTAuNDlaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFk'@;
put 'Z2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMSwxMy40M1YzMEgyNy41djJIMzNWMTIuODdBNy40NSw3LjQ1LDAsMCwxLDMxLDEzLjQzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0t'@;
put 'YmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTYtLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMxLjM2LDhIMjcuNVYzMkgz'@;
put 'M1Y5LjY3QTEuNjUsMS42NSwwLDAsMCwzMS4zNiw4WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMsOS42N1YzMkg4LjVWOEg0LjY0QTEuNjUsMS42NSwwLDAsMCwzLDkuNjdaIiBjbGFzcz0iY2xyLWktc29saWQgY2xy'@;
put 'LWktc29saWQtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjQuMzIsNEgxMS42OEExLjY4LDEuNjgsMCwwLDAsMTAsNS42OFYzMkgyNlY1LjY4QTEuNjgsMS42OCwwLDAsMCwyNC4zMiw0Wk0xOCwyNy43OUExLjc5LDEuNzksMCwxLDEsMTkuODEsMjYsMS44LDEuOCwwLDAsMSwx'@;
put 'OCwyNy43OVpNMjMsMTAuNkgxM1Y5SDIzWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMsOS42N1YzMkg4LjVWOEg0LjY0QTEuNjUsMS42NSwwLDAsMCwzLDkuNjdaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQg'@;
put 'Y2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIyNy41IiB5PSIxNS40IiB3aWR0aD0iNS41IiBoZWlnaHQ9IjE2LjYiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAg'@;
put 'IDxwYXRoIGQ9Ik0xOSwxMy41NmEzLjY4LDMuNjgsMCwwLDEtLjMxLTNIMTNWOWg2LjU2bDIuODktNUgxMS42OEExLjY4LDEuNjgsMCwwLDAsMTAsNS42OFYzMkgyNlYxNS40SDIyLjIzQTMuNjksMy42OSwwLDAsMSwxOSwxMy41NlpNMTgsMjcuNzlBMS43OSwxLjc5LDAsMSwxLDE5LjgxLDI2'@;
put 'LDEuOCwxLjgsMCwwLDEsMTgsMjcuNzlaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0zLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwx'@;
put 'LjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC00LS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMyw5LjY3VjMySDgu'@;
put 'NVY4SDQuNjRBMS42NSwxLjY1LDAsMCwwLDMsOS42N1oiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIuNSw2YTcuNDksNy40OSwwLDAsMSwuMjgtMkgxMS42OEExLjY4LDEuNjgsMCwwLDAs'@;
put 'MTAsNS42OFYzMkgyNlYxMi4zNEE3LjQ5LDcuNDksMCwwLDEsMjIuNSw2Wk0xOCwyNy43OUExLjc5LDEuNzksMCwxLDEsMTkuODEsMjYsMS44LDEuOCwwLDAsMSwxOCwyNy43OVpNMjMsMTAuNkgxM1Y5SDIzWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0y'@;
put 'LS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMCwxMy41YTcuNDcsNy40NywwLDAsMS0yLjUtLjQ0VjMySDMzVjEyLjg3QTcuNDcsNy40NywwLDAsMSwzMCwxMy41WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQiLz5cbiAg'@;
put 'ICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC00LS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgJykseS5DbHJTaGFwZUFwcGxpY2F0aW9ucz0oMCxnLmNsckljb25TVkcpKCc8cG9s'@;
put 'eWdvbiBwb2ludHM9IjggOCA0IDggNCAxMCAxMCAxMCAxMCA0IDggNCA4IDgiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cG9seWdvbiBwb2ludHM9IjE5IDggMTUgOCAxNSAxMCAyMSAxMCAyMSA0IDE5IDQgMTkgOCIgY2xhc3M9'@;
put 'ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIHBvaW50cz0iMzAgNCAzMCA4IDI2IDggMjYgMTAgMzIgMTAgMzIgNCAzMCA0IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICAgICAgICAgICAg'@;
put 'PHBvbHlnb24gcG9pbnRzPSI4IDE5IDQgMTkgNCAyMSAxMCAyMSAxMCAxNSA4IDE1IDggMTkiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00Ii8+XG4gICAgICAgICAgICA8cG9seWdvbiBwb2ludHM9IjE5IDE5IDE1IDE5IDE1IDIxIDIxIDIxIDIxIDE1IDE5IDE1'@;
put 'IDE5IDE5IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSIzMCAxOSAyNiAxOSAyNiAyMSAzMiAyMSAzMiAxNSAzMCAxNSAzMCAxOSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRo'@;
put 'LTYiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIHBvaW50cz0iOCAzMCA0IDMwIDQgMzIgMTAgMzIgMTAgMjYgOCAyNiA4IDMwIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNyIvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSIxOSAzMCAxNSAzMCAxNSAz'@;
put 'MiAyMSAzMiAyMSAyNiAxOSAyNiAxOSAzMCIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTgiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIHBvaW50cz0iMzAgMzAgMjYgMzAgMjYgMzIgMzIgMzIgMzIgMjYgMzAgMjYgMzAgMzAiIGNsYXNzPSJjbHItaS1vdXRsaW5l'@;
put 'IGNsci1pLW91dGxpbmUtcGF0aC05Ii8+XG4gICAgICAgICAgICA8cG9seWdvbiBwb2ludHM9IjggOCA0IDggNCAxMCAxMCAxMCAxMCA0IDggNCA4IDgiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBv'@;
put 'bHlnb24gcG9pbnRzPSIxOSA4IDE1IDggMTUgMTAgMjEgMTAgMjEgNCAxOSA0IDE5IDgiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSI4IDE5IDQgMTkgNCAyMSAxMCAyMSAx'@;
put 'MCAxNSA4IDE1IDggMTkiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSIxOSAxOSAxNSAxOSAxNSAyMSAyMSAyMSAyMSAxNSAxOSAxNSAxOSAxOSIgY2xhc3M9ImNsci1pLW91'@;
put 'dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cG9seWdvbiBwb2ludHM9IjMwIDE5IDI2IDE5IDI2IDIxIDMyIDIxIDMyIDE1IDMwIDE1IDMwIDE5IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0'@;
put 'aC01LS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIHBvaW50cz0iOCAzMCA0IDMwIDQgMzIgMTAgMzIgMTAgMjYgOCAyNiA4IDMwIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC02LS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwb2x5Z29u'@;
put 'IHBvaW50cz0iMTkgMzAgMTUgMzAgMTUgMzIgMjEgMzIgMjEgMjYgMTkgMjYgMTkgMzAiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTctLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSIzMCAzMCAyNiAzMCAyNiAzMiAzMiAz'@;
put 'MiAzMiAyNiAzMCAyNiAzMCAzMCIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtOC0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGlu'@;
put 'ZS1wYXRoLTktLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSI4IDggNCA4IDQgMTAgMTAgMTAgMTAgNCA4IDQgOCA4IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIvPlxuICAgICAg'@;
put 'ICAgICAgPHBvbHlnb24gcG9pbnRzPSI4IDE5IDQgMTkgNCAyMSAxMCAyMSAxMCAxNSA4IDE1IDggMTkiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cG9seWdvbiBwb2ludHM9IjE5IDE5IDE1IDE5'@;
put 'IDE1IDIxIDIxIDIxIDIxIDE1IDE5IDE1IDE5IDE5IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSIzMCAxNSAzMCAxOSAyNiAxOSAyNiAyMSAzMiAyMSAzMiAxNSAzMCAx'@;
put 'NSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIHBvaW50cz0iOCAzMCA0IDMwIDQgMzIgMTAgMzIgMTAgMjYgOCAyNiA4IDMwIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBj'@;
put 'bHItaS1vdXRsaW5lLXBhdGgtNS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSIxOSAzMCAxNSAzMCAxNSAzMiAyMSAzMiAyMSAyNiAxOSAyNiAxOSAzMCIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTYtLWFsZXJ0ZWQi'@;
put 'Lz5cbiAgICAgICAgICAgIDxwb2x5Z29uIHBvaW50cz0iMzAgMzAgMjYgMzAgMjYgMzIgMzIgMzIgMzIgMjYgMzAgMjYgMzAgMzAiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC03LS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTks'@;
put 'OEgxNXYyaDRMMTksOS44OSwyMSw2LjVWNEgxOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC04LS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMu'@;
put 'NjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtOS0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0i'@;
put 'NCIgeT0iNCIgd2lkdGg9IjYiIGhlaWdodD0iNiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iNCIgeT0iMTUiIHdpZHRoPSI2IiBoZWlnaHQ9IjYiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiLz5c'@;
put 'biAgICAgICAgICAgIDxyZWN0IHg9IjQiIHk9IjI2IiB3aWR0aD0iNiIgaGVpZ2h0PSI2IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxNSIgeT0iNCIgd2lkdGg9IjYiIGhlaWdodD0iNiIgY2xhc3M9ImNsci1pLXNvbGlk'@;
put 'IGNsci1pLXNvbGlkLXBhdGgtNCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTUiIHk9IjE1IiB3aWR0aD0iNiIgaGVpZ2h0PSI2IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC01Ii8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxNSIgeT0iMjYiIHdpZHRoPSI2IiBoZWln'@;
put 'aHQ9IjYiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTYiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjI2IiB5PSI0IiB3aWR0aD0iNiIgaGVpZ2h0PSI2IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC03Ii8+XG4gICAgICAgICAgICA8cmVjdCB4PSIy'@;
put 'NiIgeT0iMTUiIHdpZHRoPSI2IiBoZWlnaHQ9IjYiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTgiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjI2IiB5PSIyNiIgd2lkdGg9IjYiIGhlaWdodD0iNiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtOSIv'@;
put 'PlxuICAgICAgICAgICAgPHJlY3QgeD0iNCIgeT0iNCIgd2lkdGg9IjYiIGhlaWdodD0iNiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iNCIgeT0iMTUiIHdpZHRoPSI2IiBoZWlnaHQ9IjYi'@;
put 'IGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjQiIHk9IjI2IiB3aWR0aD0iNiIgaGVpZ2h0PSI2IiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0zLS1hbGVy'@;
put 'dGVkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxNSIgeT0iMTUiIHdpZHRoPSI2IiBoZWlnaHQ9IjYiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTQtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE1IiB5PSIyNiIgd2lkdGg9IjYiIGhl'@;
put 'aWdodD0iNiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtNS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMjYiIHk9IjE1IiB3aWR0aD0iNiIgaGVpZ2h0PSI2IiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0'@;
put 'aC02LS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIyNiIgeT0iMjYiIHdpZHRoPSI2IiBoZWlnaHQ9IjYiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTctLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNSwxMGg0TDE5LDku'@;
put 'ODksMjEsNi41VjRIMTVaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC04LS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCww'@;
put 'LDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC05LS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG4gICAgICAgICAgICA8cmVjdCB4PSI0IiB5PSI0IiB3aWR0aD0iNiIgaGVp'@;
put 'Z2h0PSI2IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iNCIgeT0iMTUiIHdpZHRoPSI2IiBoZWlnaHQ9IjYiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0t'@;
put 'YmFkZ2VkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSI0IiB5PSIyNiIgd2lkdGg9IjYiIGhlaWdodD0iNiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE1IiB5PSI0IiB3aWR0aD0iNiIgaGVp'@;
put 'Z2h0PSI2IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTQtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTUiIHk9IjE1IiB3aWR0aD0iNiIgaGVpZ2h0PSI2IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTUt'@;
put 'LWJhZGdlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTUiIHk9IjI2IiB3aWR0aD0iNiIgaGVpZ2h0PSI2IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTYtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMjYiIHk9IjE1IiB3aWR0aD0iNiIg'@;
put 'aGVpZ2h0PSI2IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTctLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMjYiIHk9IjI2IiB3aWR0aD0iNiIgaGVpZ2h0PSI2IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRo'@;
put 'LTgtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTktLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuICAgICAgICAnKSx5LkNsclNoYXBlQnVpbGRpbmc9KDAsZy5jbHJJ'@;
put 'Y29uU1ZHKSgnPHBhdGggZD0iTTE5Ljg4LDNINi4xMkEyLjEyLDIuMTIsMCwwLDAsNCw1LjEyVjMzSDIyVjUuMTJBMi4xMiwyLjEyLDAsMCwwLDE5Ljg4LDNaTTIwLDMxSDE3VjI4SDl2M0g2VjUuMTJBLjEyLjEyLDAsMCwxLDYuMTIsNUgxOS44OGEuMTIuMTIsMCwwLDEsLjEyLjEyWiIgY2xh'@;
put 'c3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSI4IiB5PSI4IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRn'@;
put 'ZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjEyIiB5PSI4IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE2IiB5PSI4IiB3aWR0aD0iMiIgaGVp'@;
put 'Z2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjgiIHk9IjEzIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUt'@;
put 'cGF0aC01LS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjEyIiB5PSIxMyIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxNiIgeT0iMTMi'@;
put 'IHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTctLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iOCIgeT0iMTgiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQg'@;
put 'Y2xyLWktb3V0bGluZS1wYXRoLTgtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTIiIHk9IjE4IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC05LS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxyZWN0'@;
put 'IHg9IjE2IiB5PSIxOCIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMTAtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iOCIgeT0iMjMiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1v'@;
put 'dXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTExLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjEyIiB5PSIyMyIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMTItLWJhZGdlZCIvPlxu'@;
put 'ICAgICAgICAgICAgPHJlY3QgeD0iMTYiIHk9IjIzIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xMy0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIyMyIgeT0iMTMiIHdpZHRoPSIyIiBoZWlnaHQ9'@;
put 'IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTE0LS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjI3IiB5PSIxMyIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBh'@;
put 'dGgtMTUtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMjMiIHk9IjE4IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xNi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIyNyIgeT0iMTgi'@;
put 'IHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTE3LS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjIzIiB5PSIyMyIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdl'@;
put 'ZCBjbHItaS1vdXRsaW5lLXBhdGgtMTgtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMjciIHk9IjIzIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xOS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8'@;
put 'cGF0aCBkPSJNMzEsMTMuNDNWMzFIMjN2MkgzM1YxMi44N0E3LjQ1LDcuNDUsMCwwLDEsMzEsMTMuNDNaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yMC0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUi'@;
put 'IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTIxLS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjgiIHk9IjgiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91'@;
put 'dGxpbmUtcGF0aC0xLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMiIgeT0iOCIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE2'@;
put 'IiB5PSI4IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iOCIgeT0iMTMiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5l'@;
put 'LS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMiIgeT0iMTMiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC01LS1hbGVydGVkIi8+XG4gICAg'@;
put 'ICAgICAgICA8cmVjdCB4PSIxNiIgeT0iMTMiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC02LS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSI4IiB5PSIxOCIgd2lkdGg9IjIiIGhlaWdodD0iMiIg'@;
put 'Y2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTctLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjEyIiB5PSIxOCIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRo'@;
put 'LTgtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE2IiB5PSIxOCIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTktLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjgiIHk9IjIzIiB3'@;
put 'aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMTAtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjEyIiB5PSIyMyIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0'@;
put 'ZWQgY2xyLWktb3V0bGluZS1wYXRoLTExLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxNiIgeT0iMjMiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xMi0tYWxlcnRlZCIvPlxuICAgICAgICAg'@;
put 'ICAgPHJlY3QgeD0iMjMiIHk9IjE4IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMTMtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjI3IiB5PSIxOCIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xh'@;
put 'c3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTE0LS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIyMyIgeT0iMjMiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0x'@;
put 'NS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMjciIHk9IjIzIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMTYtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMCwzMUgxN1Yy'@;
put 'OEg5djNINlY1LjEyQS4xMi4xMiwwLDAsMSw2LjEyLDVIMTkuODhhLjEyLjEyLDAsMCwxLC4xMi4xMlY4LjI0bDItMy40MUEyLjEyLDIuMTIsMCwwLDAsMTkuODgsM0g2LjEyQTIuMTIsMi4xMiwwLDAsMCw0LDUuMTJWMzNIMjJWMTUuMzhhMy42OCwzLjY4LDAsMCwxLTItLjc0WiIgY2xhc3M9'@;
put 'ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTE3LS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cG9seWdvbiBwb2ludHM9IjMxIDE1LjQgMzEgMzEgMjMgMzEgMjMgMzMgMzMgMzMgMzMgMTUuNCAzMSAxNS40IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRl'@;
put 'ZCBjbHItaS1vdXRsaW5lLXBhdGgtMTgtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYu'@;
put 'ODUsMS4xNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xOS0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMxLDhIMjJWMzNIMzNWMTBBMiwyLDAsMCwwLDMxLDhaTTI2LDI1SDI0VjIzaDJabTAtNUgyNFYx'@;
put 'OGgyWm0wLTVIMjRWMTNoMlptNCwxMEgyOFYyM2gyWm0wLTVIMjhWMThoMlptMC01SDI4VjEzaDJaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTcuODgsM0g2LjEyQTIuMTIsMi4xMiwwLDAsMCw0LDUuMTJWMzNIOVYz'@;
put 'MGg2djNoNVY1LjEyQTIuMTIsMi4xMiwwLDAsMCwxNy44OCwzWk05LDI1SDdWMjNIOVptMC01SDdWMThIOVptMC01SDdWMTNIOVptMC01SDdWOEg5Wm00LDE1SDExVjIzaDJabTAtNUgxMVYxOGgyWm0wLTVIMTFWMTNoMlptMC01SDExVjhoMlptNCwxNUgxNVYyM2gyWm0wLTVIMTVWMThoMlpt'@;
put 'MC01SDE1VjEzaDJabTAtNUgxNVY4aDJaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTcuODgsM0g2LjEyQTIuMTIsMi4xMiwwLDAsMCw0LDUuMTJWMzNIOVYzMGg2djNoNVYxNC42NGEzLjY3LDMuNjcsMCwwLDEtMS00'@;
put 'Ljc2bDEtMS42NVY1LjEyQTIuMTIsMi4xMiwwLDAsMCwxNy44OCwzWk05LDI1SDdWMjNIOVptMC01SDdWMThIOVptMC01SDdWMTNIOVptMC01SDdWOEg5Wm00LDE1SDExVjIzaDJabTAtNUgxMVYxOGgyWm0wLTVIMTFWMTNoMlptMC01SDExVjhoMlptNCwxNUgxNVYyM2gyWm0wLTVIMTVWMTho'@;
put 'MlptMC01SDE1VjEzaDJabTAtNUgxNVY4aDJaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIuMjMsMTUuNGwtLjIzLDBWMzNIMzNWMTUuNFpNMjYsMjVIMjRWMjNoMlptMC01SDI0VjE4'@;
put 'aDJabTQsNUgyOFYyM2gyWm0wLTVIMjhWMThoMloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEEx'@;
put 'LjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNy44OCwz'@;
put 'SDYuMTJBMi4xMiwyLjEyLDAsMCwwLDQsNS4xMlYzM0g5VjMwaDZ2M2g1VjUuMTJBMi4xMiwyLjEyLDAsMCwwLDE3Ljg4LDNaTTksMjVIN1YyM0g5Wm0wLTVIN1YxOEg5Wm0wLTVIN1YxM0g5Wm0wLTVIN1Y4SDlabTQsMTVIMTFWMjNoMlptMC01SDExVjE4aDJabTAtNUgxMVYxM2gyWm0wLTVI'@;
put 'MTFWOGgyWm00LDE1SDE1VjIzaDJabTAtNUgxNVYxOGgyWm0wLTVIMTVWMTNoMlptMC01SDE1VjhoMloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAsMTMuNVYxNUgyOFYxMy4yMkE3LjUs'@;
put 'Ny41LDAsMCwxLDIyLjc4LDhIMjJWMzNIMzNWMTIuODdBNy40Nyw3LjQ3LDAsMCwxLDMwLDEzLjVaTTI2LDI1SDI0VjIzaDJabTAtNUgyNFYxOGgyWm0wLTVIMjRWMTNoMlptNCwxMEgyOFYyM2gyWm0wLTVIMjhWMThoMloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlk'@;
put 'LXBhdGgtMi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzEsOEgyM3YyaDhW'@;
put 'MzFIMjN2MkgzM1YxMEEyLDIsMCwwLDAsMzEsOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTkuODgsM0g2LjEyQTIuMTIsMi4xMiwwLDAsMCw0LDUuMTJWMzNIMjJWNS4xMkEyLjEyLDIuMTIsMCwwLDAsMTku'@;
put 'ODgsM1pNMjAsMzFIMTdWMjhIOXYzSDZWNS4xMkEuMTIuMTIsMCwwLDEsNi4xMiw1SDE5Ljg4YS4xMi4xMiwwLDAsMSwuMTIuMTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iOCIgeT0iOCIgd2lkdGg9IjIiIGhl'@;
put 'aWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjEyIiB5PSI4IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIvPlxuICAgICAgICAgICAg'@;
put 'PHJlY3QgeD0iMTYiIHk9IjgiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01Ii8+XG4gICAgICAgICAgICA8cmVjdCB4PSI4IiB5PSIxMyIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWkt'@;
put 'b3V0bGluZS1wYXRoLTYiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjEyIiB5PSIxMyIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTciLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE2IiB5PSIxMyIgd2lkdGg9IjIiIGhlaWdo'@;
put 'dD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTgiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjgiIHk9IjE4IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtOSIvPlxuICAgICAgICAgICAgPHJl'@;
put 'Y3QgeD0iMTIiIHk9IjE4IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTAiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE2IiB5PSIxOCIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWkt'@;
put 'b3V0bGluZS1wYXRoLTExIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSI4IiB5PSIyMyIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEyIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMiIgeT0iMjMiIHdpZHRoPSIyIiBoZWln'@;
put 'aHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xMyIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTYiIHk9IjIzIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTQiLz5cbiAgICAgICAgICAg'@;
put 'IDxyZWN0IHg9IjIzIiB5PSIxMyIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTE1Ii8+XG4gICAgICAgICAgICA8cmVjdCB4PSIyNyIgeT0iMTMiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNs'@;
put 'ci1pLW91dGxpbmUtcGF0aC0xNiIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMjMiIHk9IjE4IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTciLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjI3IiB5PSIxOCIgd2lkdGg9IjIi'@;
put 'IGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTE4Ii8+XG4gICAgICAgICAgICA8cmVjdCB4PSIyMyIgeT0iMjMiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xOSIvPlxuICAgICAg'@;
put 'ICAgICAgPHJlY3QgeD0iMjciIHk9IjIzIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMjAiLz5cbiAgICAgICAgJykseS5DbHJTaGFwZUNQVT0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjMuMDgsMjMuMDdoLTExdjEu'@;
put 'NUgyMy44M2EuNzUuNzUsMCwwLDAsLjc1LS43NVYxMS4zM2gtMS41WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMi4yLDE4LjE1YS44LjgsMCwxLDAsMC0xLjZIMzB2LTUuNGgyLjJhLjguOCwwLDEsMCwwLTEu'@;
put 'NkgzMFY4LjFBMi4xLDIuMSwwLDAsMCwyNy45LDZIMjYuMzVWMy44YS44LjgsMCwxLDAtMS42LDBWNmgtNS40VjMuOGEuOC44LDAsMSwwLTEuNiwwVjZoLTUuNFYzLjhhLjguOCwwLDEsMC0xLjYsMFY2SDguMUEyLjEsMi4xLDAsMCwwLDYsOC4xVjkuNTVIMy44YS44LjgsMCwxLDAsMCwxLjZI'@;
put 'NnY1LjRIMy44YS44LjgsMCwxLDAsMCwxLjZINnY1LjRIMy44YS44LjgsMCwxLDAsMCwxLjZINlYyNy45QTIuMSwyLjEsMCwwLDAsOC4xLDMwaDIuNjV2Mi4yYS44LjgsMCwxLDAsMS42LDBWMzBoNS40djIuMmEuOC44LDAsMSwwLDEuNiwwVjMwaDUuNHYyLjJhLjguOCwwLDEsMCwxLjYsMFYz'@;
put 'MEgyNy45QTIuMSwyLjEsMCwwLDAsMzAsMjcuOVYyNS4xNWgyLjJhLjguOCwwLDEsMCwwLTEuNkgzMHYtNS40Wk0yOCwyNy45YS4xLjEsMCwwLDEtLjEuMUg4LjFhLjEuMSwwLDAsMS0uMS0uMVY4LjFBLjEuMSwwLDAsMSw4LjEsOEgyNy45YS4xLjEsMCwwLDEsLjEuMVoiIGNsYXNzPSJjbHIt'@;
put 'aS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTIuMDYsMjQuNTdIMjMuODNhLjc1Ljc1LDAsMCwwLC43NS0uNzVWMTEuMzNoLTEuNVYyMy4wN2gtMTFaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0'@;
put 'aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMi4yLDIzLjU1SDMwdi01LjRoMi4yYS44LjgsMCwxLDAsMC0xLjZIMzBWMTMuNWE3LjQ5LDcuNDksMCwwLDEtMi0uMjhWMjcuOWEuMS4xLDAsMCwxLS4xLjFIOC4xYS4xLjEsMCwwLDEtLjEtLjFWOC4xQS4xLjEsMCwwLDEs'@;
put 'OC4xLDhIMjIuNzhhNy40OSw3LjQ5LDAsMCwxLS4yOC0ySDE5LjM1VjMuOGEuOC44LDAsMSwwLTEuNiwwVjZoLTUuNFYzLjhhLjguOCwwLDEsMC0xLjYsMFY2SDguMUEyLjEsMi4xLDAsMCwwLDYsOC4xVjkuNTVIMy44YS44LjgsMCwxLDAsMCwxLjZINnY1LjRIMy44YS44LjgsMCwxLDAsMCwx'@;
put 'LjZINnY1LjRIMy44YS44LjgsMCwxLDAsMCwxLjZINlYyNy45QTIuMSwyLjEsMCwwLDAsOC4xLDMwaDIuNjV2Mi4yYS44LjgsMCwxLDAsMS42LDBWMzBoNS40djIuMmEuOC44LDAsMSwwLDEuNiwwVjMwaDUuNHYyLjJhLjguOCwwLDEsMCwxLjYsMFYzMEgyNy45QTIuMSwyLjEsMCwwLDAsMzAs'@;
put 'MjcuOVYyNS4xNWgyLjJhLjguOCwwLDEsMCwwLTEuNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2Vk'@;
put 'IGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMi4yLDIzLjU1SDMwdi01LjRoMi4yYS44LjgsMCwxLDAsMC0xLjZIMzBWMTUuNEgyOFYyNy45YS4xLjEsMCwwLDEtLjEuMUg4LjFhLjEuMSwwLDAsMS0uMS0uMVY4LjFB'@;
put 'LjEuMSwwLDAsMSw4LjEsOGgxMmwxLjE1LTJIMTkuMzVWMy44YS44LjgsMCwxLDAtMS42LDBWNmgtNS40VjMuOGEuOC44LDAsMSwwLTEuNiwwVjZIOC4xQTIuMSwyLjEsMCwwLDAsNiw4LjFWOS41NUgzLjhhLjguOCwwLDEsMCwwLDEuNkg2djUuNEgzLjhhLjguOCwwLDEsMCwwLDEuNkg2djUu'@;
put 'NEgzLjhhLjguOCwwLDEsMCwwLDEuNkg2VjI3LjlBMi4xLDIuMSwwLDAsMCw4LjEsMzBoMi42NXYyLjJhLjguOCwwLDEsMCwxLjYsMFYzMGg1LjR2Mi4yYS44LjgsMCwxLDAsMS42LDBWMzBoNS40djIuMmEuOC44LDAsMSwwLDEuNiwwVjMwSDI3LjlBMi4xLDIuMSwwLDAsMCwzMCwyNy45VjI1'@;
put 'LjE1aDIuMmEuOC44LDAsMSwwLDAtMS42WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMi4wNiwyNC41N0gyMy44M2EuNzUuNzUsMCwwLDAsLjc1LS43NVYxNS40aC0xLjV2Ny42'@;
put 'N2gtMTFaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQu'@;
put 'NzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIuMiwyMy41NUgzMHYtNS40aDIu'@;
put 'MmEuOC44LDAsMSwwLDAtMS42SDMwVjE1LjRIMjV2OC40MUExLjE4LDEuMTgsMCwwLDEsMjQsMjVIMTNWMjNIMjNWMTUuNGgtLjc3QTMuNjgsMy42OCwwLDAsMSwxOSw5Ljg5TDIxLjI5LDZIMTkuMzVWMy44YS44LjgsMCwxLDAtMS42LDBWNmgtNS40VjMuOGEuOC44LDAsMSwwLTEuNiwwVjZI'@;
put 'OC4xQTIuMSwyLjEsMCwwLDAsNiw4LjFWOS41NUgzLjhhLjguOCwwLDEsMCwwLDEuNkg2djUuNEgzLjhhLjguOCwwLDEsMCwwLDEuNkg2djUuNEgzLjhhLjguOCwwLDEsMCwwLDEuNkg2VjI3LjlBMi4xLDIuMSwwLDAsMCw4LjEsMzBoMi42NXYyLjJhLjguOCwwLDEsMCwxLjYsMFYzMGg1LjR2'@;
put 'Mi4yYS44LjgsMCwxLDAsMS42LDBWMzBoNS40djIuMmEuOC44LDAsMSwwLDEuNiwwVjMwSDI3LjlBMi4xLDIuMSwwLDAsMCwzMCwyNy45VjI1LjE1aDIuMmEuOC44LDAsMSwwLDAtMS42WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIv'@;
put 'PlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVy'@;
put 'dGVkIGNsci1pLXNvbGlkLXBhdGgtMy0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLjIsMjMuNTVIMzB2LTUuNGgyLjJhLjguOCwwLDEsMCwwLTEuNkgzMFYxMy41YTcuNDYsNy40NiwwLDAsMS01LTEuOTJWMjMuODFBMS4xOCwxLjE4LDAsMCwxLDI0'@;
put 'LDI1SDEzVjIzSDIzVjExaDEuNDJBNy40Niw3LjQ2LDAsMCwxLDIyLjUsNkgxOS4zNVYzLjhhLjguOCwwLDEsMC0xLjYsMFY2aC01LjRWMy44YS44LjgsMCwxLDAtMS42LDBWNkg4LjFBMi4xLDIuMSwwLDAsMCw2LDguMVY5LjU1SDMuOGEuOC44LDAsMSwwLDAsMS42SDZ2NS40SDMuOGEuOC44'@;
put 'LDAsMSwwLDAsMS42SDZ2NS40SDMuOGEuOC44LDAsMSwwLDAsMS42SDZWMjcuOUEyLjEsMi4xLDAsMCwwLDguMSwzMGgyLjY1djIuMmEuOC44LDAsMSwwLDEuNiwwVjMwaDUuNHYyLjJhLjguOCwwLDEsMCwxLjYsMFYzMGg1LjR2Mi4yYS44LjgsMCwxLDAsMS42LDBWMzBIMjcuOUEyLjEsMi4x'@;
put 'LDAsMCwwLDMwLDI3LjlWMjUuMTVoMi4yYS44LjgsMCwxLDAsMC0xLjZaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktc29saWQtLWJh'@;
put 'ZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLjIsMTguMTVhLjguOCwwLDEsMCwwLTEuNkgzMHYtNS40aDIuMmEuOC44LDAsMSwwLDAtMS42SDMwVjguMUEyLjEsMi4xLDAsMCwwLDI3LjksNkgyNi4zNVYzLjhh'@;
put 'LjguOCwwLDEsMC0xLjYsMFY2aC01LjRWMy44YS44LjgsMCwxLDAtMS42LDBWNmgtNS40VjMuOGEuOC44LDAsMSwwLTEuNiwwVjZIOC4xQTIuMSwyLjEsMCwwLDAsNiw4LjFWOS41NUgzLjhhLjguOCwwLDEsMCwwLDEuNkg2djUuNEgzLjhhLjguOCwwLDEsMCwwLDEuNkg2djUuNEgzLjhhLjgu'@;
put 'OCwwLDEsMCwwLDEuNkg2VjI3LjlBMi4xLDIuMSwwLDAsMCw4LjEsMzBoMi42NXYyLjJhLjguOCwwLDEsMCwxLjYsMFYzMGg1LjR2Mi4yYS44LjgsMCwxLDAsMS42LDBWMzBoNS40djIuMmEuOC44LDAsMSwwLDEuNiwwVjMwSDI3LjlBMi4xLDIuMSwwLDAsMCwzMCwyNy45VjI1LjE1aDIuMmEu'@;
put 'OC44LDAsMSwwLDAtMS42SDMwdi01LjRaTTI1LDIzLjgxQTEuMTgsMS4xOCwwLDAsMSwyNCwyNUgxM1YyM0gyM1YxMWgyWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAgICAgICAnKSx5LkNsclNoYXBlTWVtb3J5PSgwLGcuY2xySWNvblNWRykoJzxyZWN0'@;
put 'IHg9IjgiIHk9IjEyIiB3aWR0aD0iNCIgaGVpZ2h0PSI4IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTYiIHk9IjEyIiB3aWR0aD0iNCIgaGVpZ2h0PSI4IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRs'@;
put 'aW5lLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMjQiIHk9IjEyIiB3aWR0aD0iNCIgaGVpZ2h0PSI4IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE1LDI3SDRWMTdIMlYyN2EyLDIsMCwwLDAsMiwy'@;
put 'SDE2LjYxVjI1LjU1aDIuMjZWMjRIMTVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLDdINEEyLDIsMCwwLDAsMiw5djRINFY5SDMydjRoMlY5QTIsMiwwLDAsMCwzMiw3WiIgY2xhc3M9ImNsci1pLW91dGxp'@;
put 'bmUgY2xyLWktb3V0bGluZS1wYXRoLTUiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMiwyN0gxOXYySDMyYTIsMiwwLDAsMCwyLTJWMTdIMzJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iOCIgeT0iMTIiIHdp'@;
put 'ZHRoPSI0IiBoZWlnaHQ9IjgiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTUsMjdINFYxN0gyVjI3YTIsMiwwLDAsMCwyLDJIMTYuNjFWMjUuNTVoMi4yNlYyNEgxNVoiIGNsYXNz'@;
put 'PSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIsMTdWMjdIMTl2MkgzMmEyLDIsMCwwLDAsMi0yVjE3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRo'@;
put 'LTMtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOSwxMy41NkEzLjY2LDMuNjYsMCwwLDEsMTguNTcsMTJIMTZ2OGg0VjE0LjY0QTMuNjcsMy42NywwLDAsMSwxOSwxMy41NloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1h'@;
put 'bGVydGVkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIyNCIgeT0iMTUuNCIgd2lkdGg9IjQiIGhlaWdodD0iNC42IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTQsOUgxOS41Nmwx'@;
put 'LjE1LTJINEEyLDIsMCwwLDAsMiw5djRINFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC02LS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhB'@;
put 'MS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNy0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iOCIg'@;
put 'eT0iMTIiIHdpZHRoPSI0IiBoZWlnaHQ9IjgiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTYiIHk9IjEyIiB3aWR0aD0iNCIgaGVpZ2h0PSI4IiBjbGFzcz0iY2xyLWktb3V0bGluZS0t'@;
put 'YmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNSwyN0g0VjE3SDJWMjdhMiwyLDAsMCwwLDIsMkgxNi42MVYyNS41NWgyLjI2VjI0SDE1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgt'@;
put 'My0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIsMTdWMjdIMTl2MkgzMmEyLDIsMCwwLDAsMi0yVjE3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjgsMTMuMjJB'@;
put 'Ny40Niw3LjQ2LDAsMCwxLDI1LjUxLDEySDI0djhoNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTQsOUgyMy4xM2E3LjQ1LDcuNDUsMCwwLDEtLjU1LTJINEEyLDIsMCwwLDAsMiw5'@;
put 'djRINFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTYtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC03LS1iYWRn'@;
put 'ZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zNCwxM1Y5YTIsMiwwLDAsMC0yLTJINEEyLDIsMCwwLDAsMiw5djRINHY0SDJWMjdhMiwyLDAsMCwwLDIsMkgxNi42MVYyNS41NUgxOVYyOUgzMmEyLDIsMCwwLDAsMi0yVjE3SDMyVjEzWk0xMiwyMEg4VjEyaDRabTgs'@;
put 'MEgxNlYxMmg0Wm04LDBIMjRWMTJoNFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMiwxN1YxNS4wN0gyOFYyMEgyNFYxNS4wN0gyMi4yM0EzLjY4LDMuNjgsMCwwLDEsMjAsMTQuMzFWMjBIMTZWMTJoMi42MUEzLjY4'@;
put 'LDMuNjgsMCwwLDEsMTksOS41NUwyMC41Miw3SDRBMiwyLDAsMCwwLDIsOXY0SDR2NEgyVjI3YTIsMiwwLDAsMCwyLDJIMTYuNjFWMjUuNTVIMTlWMjlIMzJhMiwyLDAsMCwwLDItMlYxN1pNMTIsMjBIOFYxMmg0WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBh'@;
put 'dGgtMS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LjhsLTUuNzIsOS45MWExLjI4LDEuMjgsMCwwLDAsMS4xLDEuOTFIMzMuNjhhMS4yOCwxLjI4LDAsMCwwLDEuMS0xLjkxTDI5LjA2LjhBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LjhaIiBjbGFzcz0iY2xyLWktc29s'@;
put 'aWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIsMTdWMTMuMjJhNy4zMyw3LjMzLDAsMCwxLTQsMFYyMEgyNFYxMmgxLjUxYTcuNDgsNy40OCwwLDAsMS0yLjk0LTVINEEyLDIsMCwwLDAsMiw5djRI'@;
put 'NHY0SDJWMjdhMiwyLDAsMCwwLDIsMkgxNi42MVYyNS41NUgxOVYyOUgzMmEyLDIsMCwwLDAsMi0yVjE3Wk0xMiwyMEg4VjEyaDRabTgsMEgxNlYxMmg0WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJj'@;
put 'bGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgJykseS5DbHJTaGFwZURhdGFDbHVzdGVyPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yNi41LDQuMDhD'@;
put 'MjIuNzcsNC4wOCwxOSw1LjQsMTksNy45MVY5LjVhMTguNzUsMTguNzUsMCwwLDEsMiwuMlY3LjkxYzAtLjY1LDIuMDktMS44NCw1LjUtMS44NFMzMiw3LjI3LDMyLDcuOTFWMTguMjRjMCwuNTQtMS40NiwxLjQ0LTMuOSwxLjczdjJjMy4xMy0uMzIsNS45LTEuNiw1LjktMy43NVY3LjkxQzM0'@;
put 'LDUuNCwzMC4yMyw0LjA4LDI2LjUsNC4wOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNNCwxOC4yNFY3LjkxYzAtLjY1LDIuMDktMS44NCw1LjUtMS44NFMxNSw3LjI3LDE1LDcuOTFWOS43YTE4Ljc1LDE4Ljc1'@;
put 'LDAsMCwxLDItLjJWNy45MWMwLTIuNTItMy43Ny0zLjg0LTcuNS0zLjg0UzIsNS40LDIsNy45MVYxOC4yNEMyLDIwLjQsNC43NywyMS42Nyw3LjksMjJWMjBDNS40NiwxOS42OCw0LDE4Ljc4LDQsMTguMjRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxu'@;
put 'ICAgICAgICAgICAgPHBhdGggZD0iTTE4LDEwLjg1Yy00LjkzLDAtOC42NSwxLjg4LTguNjUsNC4zOFYyNy41NGMwLDIuNSwzLjcyLDQuMzgsOC42NSw0LjM4czguNjUtMS44OCw4LjY1LTQuMzhWMTUuMjNDMjYuNjUsMTIuNzMsMjIuOTMsMTAuODUsMTgsMTAuODVabTYuNjUsNy42N2MtLjg1'@;
put 'LDEtMy40MiwyLTYuNjUsMkExNC40OSwxNC40OSwwLDAsMSwxNCwyMHYxLjQ2YTE2LjMzLDE2LjMzLDAsMCwwLDQsLjQ3LDEyLjc2LDEyLjc2LDAsMCwwLDYuNjUtMS41NnYzLjEyYy0uODUsMS0zLjQyLDItNi42NSwyYTE0LjQ5LDE0LjQ5LDAsMCwxLTQtLjUzdjEuNDZhMTYuMzMsMTYuMzMs'@;
put 'MCwwLDAsNCwuNDcsMTIuNzYsMTIuNzYsMCwwLDAsNi42NS0xLjU2djIuMjljMCwuOTUtMi42NSwyLjM4LTYuNjUsMi4zOHMtNi42NS0xLjQzLTYuNjUtMi4zOFYxNS4yM2MwLS45NSwyLjY1LTIuMzgsNi42NS0yLjM4czYuNjUsMS40Myw2LjY1LDIuMzhaIiBjbGFzcz0iY2xyLWktb3V0bGlu'@;
put 'ZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTQsMTguMjRWNy45MWMwLS42NSwyLjA5LTEuODQsNS41LTEuODRTMTUsNy4yNywxNSw3LjkxVjkuN2ExOC43NSwxOC43NSwwLDAsMSwyLS4yVjcuOTFjMC0yLjUyLTMuNzctMy44NC03LjUtMy44NFMyLDUu'@;
put 'NCwyLDcuOTFWMTguMjRDMiwyMC40LDQuNzcsMjEuNjcsNy45LDIyVjIwQzUuNDYsMTkuNjgsNCwxOC43OCw0LDE4LjI0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNC42NSwx'@;
put 'OC41MmMtLjg1LDEtMy40MiwyLTYuNjUsMkExNC40OSwxNC40OSwwLDAsMSwxNCwyMHYxLjQ2YTE2LjMzLDE2LjMzLDAsMCwwLDQsLjQ3LDEyLjc2LDEyLjc2LDAsMCwwLDYuNjUtMS41NnYzLjEyYy0uODUsMS0zLjQyLDItNi42NSwyYTE0LjQ5LDE0LjQ5LDAsMCwxLTQtLjUzdjEuNDZhMTYu'@;
put 'MzMsMTYuMzMsMCwwLDAsNCwuNDcsMTIuNzYsMTIuNzYsMCwwLDAsNi42NS0xLjU2djIuMjljMCwuOTUtMi42NSwyLjM4LTYuNjUsMi4zOHMtNi42NS0xLjQzLTYuNjUtMi4zOFYxNS4yM2MwLS45NSwyLjY1LTIuMzgsNi42NS0yLjM4bC43NSwwYTMuNjksMy42OSwwLDAsMS0uMDgtMmwtLjY2'@;
put 'LDBjLTQuOTMsMC04LjY1LDEuODgtOC42NSw0LjM4VjI3LjU0YzAsMi41LDMuNzIsNC4zOCw4LjY1LDQuMzhzOC42NS0xLjg4LDguNjUtNC4zOFYxNS40aC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiLz5cbiAgICAgICAg'@;
put 'ICAgIDxwYXRoIGQ9Ik0yMiw0LjhjLTEuNzUuNjMtMywxLjY4LTMsMy4xMlY5LjVsLjI1LDBaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjY4LDE1LjRIMzJ2Mi44NGMwLC41'@;
put 'NC0xLjQ2LDEuNDQtMy45LDEuNzN2MmMzLjEzLS4zMiw1LjktMS42LDUuOS0zLjc1VjE1LjM4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEu'@;
put 'MjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC01LS1hbGVydGVkIGNsci1pLWFsZXJ0'@;
put 'Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNNCwxOC4yNFY3LjkxYzAtLjY1LDIuMDktMS44NCw1LjUtMS44NFMxNSw3LjI3LDE1LDcuOTFWOS43YTE4Ljc1LDE4Ljc1LDAsMCwxLDItLjJWNy45MWMwLTIuNTItMy43Ny0zLjg0LTcuNS0zLjg0UzIsNS40LDIsNy45MVYxOC4yNEMyLDIwLjQs'@;
put 'NC43NywyMS42Nyw3LjksMjJWMjBDNS40NiwxOS42OCw0LDE4Ljc4LDQsMTguMjRaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwxMC44NWMtNC45MywwLTguNjUsMS44OC04LjY1'@;
put 'LDQuMzhWMjcuNTRjMCwyLjUsMy43Miw0LjM4LDguNjUsNC4zOHM4LjY1LTEuODgsOC42NS00LjM4VjE1LjIzQzI2LjY1LDEyLjczLDIyLjkzLDEwLjg1LDE4LDEwLjg1Wm02LjY1LDcuNjdjLS44NSwxLTMuNDIsMi02LjY1LDJBMTQuNDksMTQuNDksMCwwLDEsMTQsMjB2MS40NmExNi4zMywx'@;
put 'Ni4zMywwLDAsMCw0LC40NywxMi43NiwxMi43NiwwLDAsMCw2LjY1LTEuNTZ2My4xMmMtLjg1LDEtMy40MiwyLTYuNjUsMmExNC40OSwxNC40OSwwLDAsMS00LS41M3YxLjQ2YTE2LjMzLDE2LjMzLDAsMCwwLDQsLjQ3LDEyLjc2LDEyLjc2LDAsMCwwLDYuNjUtMS41NnYyLjI5YzAsLjk1LTIu'@;
put 'NjUsMi4zOC02LjY1LDIuMzhzLTYuNjUtMS40My02LjY1LTIuMzhWMTUuMjNjMC0uOTUsMi42NS0yLjM4LDYuNjUtMi4zOHM2LjY1LDEuNDMsNi42NSwyLjM4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIi8+XG4gICAgICAgICAg'@;
put 'ICA8cGF0aCBkPSJNMjEsNy45MWMwLS4zMy41NS0uOCwxLjU0LTEuMTgsMC0uMjQsMC0uNDgsMC0uNzNhNy41Miw3LjUyLDAsMCwxLC4xNC0xLjQxQzIwLjU1LDUuMTksMTksNi4zLDE5LDcuOTFWOS41YTE4Ljc1LDE4Ljc1LDAsMCwxLDIsLjJaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFk'@;
put 'Z2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMiwxMy4yMnY1YzAsLjU0LTEuNDYsMS40NC0zLjksMS43M3YyYzMuMTMtLjMyLDUuOS0xLjYsNS45LTMuNzV2LTUuOUE3LjQ1LDcuNDUsMCwwLDEsMzIsMTMuMjJaIiBjbGFzcz0iY2xy'@;
put 'LWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+'@;
put 'XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuNSw0LjA4QzIyLjc3LDQuMDgsMTksNS40LDE5LDcuOTFWOS40OGM1LjMuMjYsOSwyLjYsOSw1Ljc2djYuN2wuMDUuMDZjMy4xMy0uMzIsNS45LTEuNiw1LjktMy43NVY3LjkxQzM0LDUuNCwzMC4yMyw0LjA4LDI2LjUsNC4wOFoiIGNsYXNzPSJj'@;
put 'bHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNyw5LjQ4VjcuOTFjMC0yLjUyLTMuNzctMy44NC03LjUtMy44NFMyLDUuNCwyLDcuOTFWMTguMjRDMiwyMC40LDQuNzcsMjEuNjcsNy45LDIyTDgsMjEuOTN2LTYuN0M4LDEyLjA4LDExLjcs'@;
put 'OS43NCwxNyw5LjQ4WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDEwLjg1Yy00LjkzLDAtOC42NSwxLjg4LTguNjUsNC4zOFYyNy41NGMwLDIuNSwzLjcyLDQuMzgsOC42NSw0LjM4czguNjUtMS44OCw4LjY1LTQu'@;
put 'MzhWMjUuMzhBMTMuNTgsMTMuNTgsMCwwLDEsMTgsMjhhMTYuNzcsMTYuNzcsMCwwLDEtNi0xVjI1LjI3YTE0LjUsMTQuNSwwLDAsMCw2LDEuMTdjNC4yMSwwLDcuNjUtMS4yMyw4LjYzLTMuMjNWMjAuNDdDMjQuOCwyMiwyMS43MiwyMywxOCwyM2ExNi43NywxNi43NywwLDAsMS02LTFWMjAu'@;
put 'MjNhMTQuNSwxNC41LDAsMCwwLDYsMS4xN2M0LjIxLDAsNy42NS0xLjExLDguNjMtMy4xMVYxNS4yM0MyNi42NSwxMi43MywyMi45MywxMC44NSwxOCwxMC44NVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNyw5LjQ4'@;
put 'VjcuOTFjMC0yLjUyLTMuNzctMy44NC03LjUtMy44NFMyLDUuNCwyLDcuOTFWMTguMjRDMiwyMC40LDQuNzcsMjEuNjcsNy45LDIyTDgsMjEuOTN2LTYuN0M4LDEyLjA4LDExLjcsOS43NCwxNyw5LjQ4WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0t'@;
put 'YWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE5LDEzLjU2YTMuNjgsMy42OCwwLDAsMS0uMzktMi43bC0uNjYsMGMtNC45MywwLTguNjUsMS44OC04LjY1LDQuMzhWMjcuNTRjMCwyLjUsMy43Miw0LjM4LDguNjUsNC4zOHM4LjY1LTEuODgsOC42NS00LjM4VjI1LjM4QTEzLjU4'@;
put 'LDEzLjU4LDAsMCwxLDE4LDI4YTE2Ljc3LDE2Ljc3LDAsMCwxLTYtMVYyNS4yN2ExNC41LDE0LjUsMCwwLDAsNiwxLjE3YzQuMjEsMCw3LjY1LTEuMjMsOC42My0zLjIzVjIwLjQ3QzI0LjgsMjIsMjEuNzIsMjMsMTgsMjNhMTYuNzcsMTYuNzcsMCwwLDEtNi0xVjIwLjIzYTE0LjUsMTQuNSww'@;
put 'LDAsMCw2LDEuMTdjNC4yMSwwLDcuNjUtMS4xMSw4LjYzLTMuMTFWMTUuNEgyMi4yM0EzLjY5LDMuNjksMCwwLDEsMTksMTMuNTZaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIsNC44'@;
put 'Yy0xLjc1LjYzLTMsMS42OC0zLDMuMTJWOS40OGwuMjcsMFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy42OCwxNS40SDI4djYuNTNsLjA1LjA2YzMuMTMtLjMyLDUuOS0xLjYsNS45'@;
put 'LTMuNzVWMTUuMzhaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC00LS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0'@;
put 'Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC01LS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTcsOS40OFY3LjkxYzAtMi41Mi0zLjc3'@;
put 'LTMuODQtNy41LTMuODRTMiw1LjQsMiw3LjkxVjE4LjI0QzIsMjAuNCw0Ljc3LDIxLjY3LDcuOSwyMkw4LDIxLjkzdi02LjdDOCwxMi4wOCwxMS43LDkuNzQsMTcsOS40OFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAg'@;
put 'ICAgICA8cGF0aCBkPSJNMTgsMTAuODVjLTQuOTMsMC04LjY1LDEuODgtOC42NSw0LjM4VjI3LjU0YzAsMi41LDMuNzIsNC4zOCw4LjY1LDQuMzhzOC42NS0xLjg4LDguNjUtNC4zOFYyNS4zOEExMy41OCwxMy41OCwwLDAsMSwxOCwyOGExNi43NywxNi43NywwLDAsMS02LTFWMjUuMjdhMTQu'@;
put 'NSwxNC41LDAsMCwwLDYsMS4xN2M0LjIxLDAsNy42NS0xLjIzLDguNjMtMy4yM1YyMC40N0MyNC44LDIyLDIxLjcyLDIzLDE4LDIzYTE2Ljc3LDE2Ljc3LDAsMCwxLTYtMVYyMC4yM2ExNC41LDE0LjUsMCwwLDAsNiwxLjE3YzQuMjEsMCw3LjY1LTEuMTEsOC42My0zLjExVjE1LjIzQzI2LjY1'@;
put 'LDEyLjczLDIyLjkzLDEwLjg1LDE4LDEwLjg1WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMi41LDZhNy41Miw3LjUyLDAsMCwxLC4xNC0xLjRDMjAuNTUsNS4xOSwxOSw2LjMsMTksNy45'@;
put 'MVY5LjQ4YTE1LjMzLDE1LjMzLDAsMCwxLDUsMUE3LjQ2LDcuNDYsMCwwLDEsMjIuNSw2WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMCwxMy40OUE3LjQ3LDcuNDcsMCwwLDEsMjcuMzUs'@;
put 'MTNhNCw0LDAsMCwxLC43LDIuMjN2Ni43bC4wNS4wNmMzLjEzLS4zMiw1LjktMS42LDUuOS0zLjc1VjEyLjMzQTcuNDYsNy40NiwwLDAsMSwzMCwxMy40OVoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtNC0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2ly'@;
put 'Y2xlIGN4PSIzMCIgY3k9IjUuOTkiIHI9IjUiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtNS0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICcpLHkuQ2xyU2hhcGVSZXNvdXJjZVBvb2w9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMzLjY4'@;
put 'LDE1LjRIMzEuNzNhMTQsMTQsMCwwLDEsLjIyLDEuNkgxNy40OUw4LjMsMjguMDdBMTQsMTQsMCwwLDEsMjIuMDksNC42MmwxLTEuNzZBMTYsMTYsMCwxLDAsMzQsMThhMTYsMTYsMCwwLDAtLjIzLTIuNjFaTTE4LDMyYTEzLjkxLDEzLjkxLDAsMCwxLTguMTYtMi42NUwxOC40MywxOUgzMS45'@;
put 'NUExNCwxNCwwLDAsMSwxOCwzMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwx'@;
put 'LjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDJBMTYs'@;
put 'MTYsMCwxLDAsMzQsMTgsMTYsMTYsMCwwLDAsMTgsMlpNNCwxOGExNCwxNCwwLDAsMSwyNy45NS0xSDE3LjQ5TDguMywyOC4wN0ExNCwxNCwwLDAsMSw0LDE4Wk0xOCwzMmExMy45MSwxMy45MSwwLDAsMS04LjE2LTIuNjVMMTguNDMsMTlIMzEuOTVBMTQsMTQsMCwwLDEsMTgsMzJaIiBjbGFz'@;
put 'cz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMxLjIsMTMuNGExMy45MSwxMy45MSwwLDAsMSwuNzUsMy42SDE3LjQ5TDguMywyOC4wN0ExNCwxNCwwLDAsMSwyMi42MSw0LjhhNy40Myw3LjQzLDAsMCwxLC41OC0xLjkyLDE2'@;
put 'LjA2LDE2LjA2LDAsMSwwLDkuOTMsOS45M0E3LjQzLDcuNDMsMCwwLDEsMzEuMiwxMy40Wk0xOCwzMmExMy45MSwxMy45MSwwLDAsMS04LjE2LTIuNjVMMTguNDMsMTlIMzEuOTVBMTQsMTQsMCwwLDEsMTgsMzJaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUt'@;
put 'cGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNOC41NywzMC45'@;
put 'QTE2LDE2LDAsMCwwLDMzLjk1LDE5SDE4LjQzWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjk1LDE3QTE2LDE2LDAsMSwwLDcsMjkuNkwxNy40OSwxN1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1w'@;
put 'YXRoLTIiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik04LjU3LDMwLjlBMTYsMTYsMCwwLDAsMzMuOTUsMTlIMTguNDNaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjk1LDE3YTE1Ljkx'@;
put 'LDE1LjkxLDAsMCwwLS44NC00LjE4LDcuNDksNy40OSwwLDAsMS05LjkyLTkuOTRBMTYsMTYsMCwwLDAsNywyOS42TDE3LjQ5LDE3WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBj'@;
put 'eT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik04LjU3LDMwLjlBMTYsMTYsMCwwLDAsMzMuOTUsMTlIMTguNDNaIiBjbGFzcz0iY2xyLWktc29saWQtLWFs'@;
put 'ZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuOTUsMTdhMTYsMTYsMCwwLDAtLjE4LTEuNjFIMjIuMjNBMy42OCwzLjY4LDAsMCwxLDE5LDkuODlsNC4wNi03QTE2LDE2LDAsMCwwLDcsMjkuNkwxNy40OSwxN1oiIGNsYXNzPSJj'@;
put 'bHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4'@;
put 'LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5cbiAgICAgICAgJykseS5DbHJTaGFwZVNoaWVsZENoZWNrPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMS4yNSw3'@;
put 'LjRhNDMuNzksNDMuNzksMCwwLDEtNi42Mi0yLjM1LDQ1LDQ1LDAsMCwxLTYuMDgtMy4yMUwxOCwxLjVsLS41NC4zNWE0NSw0NSwwLDAsMS02LjA4LDMuMjFBNDMuNzksNDMuNzksMCwwLDEsNC43NSw3LjRMNCw3LjU5djguMzRjMCwxMy4zOSwxMy41MywxOC40LDEzLjY2LDE4LjQ1bC4zNC4x'@;
put 'Mi4zNC0uMTJjLjE0LDAsMTMuNjYtNS4wNSwxMy42Ni0xOC40NVY3LjU5Wk0zMCwxNS45M2MwLDExLTEwLDE1LjYxLTEyLDE2LjQzLTItLjgyLTEyLTUuNDQtMTItMTYuNDNWOS4xNGE0Ny41NCw0Ny41NCwwLDAsMCw2LjE4LTIuMjUsNDguMjMsNDguMjMsMCwwLDAsNS44Mi0zLDQ4LjIzLDQ4'@;
put 'LjIzLDAsMCwwLDUuODIsM0E0Ny41NCw0Ny41NCwwLDAsMCwzMCw5LjE0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMC44OCwxNi44N2ExLDEsMCwwLDAtMS40MSwxLjQxbDYsNkwyNi40LDEzLjc3QTEsMSww'@;
put 'LDAsMCwyNSwxMi4zM2wtOS40Nyw5LjE5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMS4yNSw3LjRhNDMuNzksNDMuNzksMCwwLDEtNi42Mi0yLjM1LDQ1LDQ1LDAsMCwxLTYuMDgtMy4yMUwxOCwxLjVsLS41'@;
put 'NC4zNWE0NSw0NSwwLDAsMS02LjA4LDMuMjFBNDMuNzksNDMuNzksMCwwLDEsNC43NSw3LjRMNCw3LjU5djguMzRjMCwxMy4zOSwxMy41MywxOC40LDEzLjY2LDE4LjQ1bC4zNC4xMi4zNC0uMTJjLjE0LDAsMTMuNjYtNS4wNSwxMy42Ni0xOC40NVY3LjU5Wm0tNC41Nyw2LjY1TDE1LjUxLDI0'@;
put 'LjksOS4xOSwxOC41N2ExLjQsMS40LDAsMCwxLDItMkwxNS41NCwyMSwyNC43MywxMmExLjQsMS40LDAsMSwxLDIsMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgICAgICAgJykseS5DbHJTaGFwZVNoaWVsZD0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBk'@;
put 'PSJNMzEuMjUsNy40YTQzLjc5LDQzLjc5LDAsMCwxLTYuNjItMi4zNSw0NSw0NSwwLDAsMS02LjA4LTMuMjFMMTgsMS41bC0uNTQuMzVhNDUsNDUsMCwwLDEtNi4wOCwzLjIxQTQzLjc5LDQzLjc5LDAsMCwxLDQuNzUsNy40TDQsNy41OXY4LjM0YzAsMTMuMzksMTMuNTMsMTguNCwxMy42Niwx'@;
put 'OC40NWwuMzQuMTIuMzQtLjEyYy4xNCwwLDEzLjY2LTUuMDUsMTMuNjYtMTguNDVWNy41OVpNMzAsMTUuOTNjMCwxMS0xMCwxNS42MS0xMiwxNi40My0yLS44Mi0xMi01LjQ0LTEyLTE2LjQzVjkuMTRhNDcuNTQsNDcuNTQsMCwwLDAsNi4xOC0yLjI1LDQ4LjIzLDQ4LjIzLDAsMCwwLDUuODIt'@;
put 'Myw0OC4yMyw0OC4yMywwLDAsMCw1LjgyLDNBNDcuNTQsNDcuNTQsMCwwLDAsMzAsOS4xNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAsMTUuNHYuNTNjMCwxMS0xMCwxNS42MS0xMiwxNi40My0yLS44Mi0x'@;
put 'Mi01LjQ0LTEyLTE2LjQzVjkuMTRhNDcuNTQsNDcuNTQsMCwwLDAsNi4xOC0yLjI1LDQ4LjIzLDQ4LjIzLDAsMCwwLDUuODItM2MxLC42NCwyLjIsMS4yNywzLjQzLDEuODlsMS0xLjc0YTQxLjEsNDEuMSwwLDAsMS0zLjg5LTIuMThMMTgsMS41bC0uNTQuMzVhNDUsNDUsMCwwLDEtNi4wOCwz'@;
put 'LjIxQTQzLjc5LDQzLjc5LDAsMCwxLDQuNzUsNy40TDQsNy41OXY4LjM0YzAsMTMuMzksMTMuNTMsMTguNCwxMy42NiwxOC40NWwuMzQuMTIuMzQtLjEyYy4xNCwwLDEzLjY2LTUuMDUsMTMuNjYtMTguNDVWMTUuNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxp'@;
put 'bmUtcGF0aC0xLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFz'@;
put 'cz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLDEzLjV2Mi40M2MwLDExLTEwLDE1LjYxLTEyLDE2LjQzLTItLjgyLTEyLTUuNDQtMTItMTYuNDNWOS4xNGE0Ny41NCw0'@;
put 'Ny41NCwwLDAsMCw2LjE4LTIuMjUsNDguMjMsNDguMjMsMCwwLDAsNS44Mi0zLDQ2LjE5LDQ2LjE5LDAsMCwwLDQuNTEsMi40MmMwLS4xLDAtLjE5LDAtLjI5YTcuNDksNy40OSwwLDAsMSwuMjMtMS44Myw0MS42MSw0MS42MSwwLDAsMS00LjE5LTIuMzNMMTgsMS41bC0uNTQuMzVhNDUsNDUs'@;
put 'MCwwLDEtNi4wOCwzLjIxQTQzLjc5LDQzLjc5LDAsMCwxLDQuNzUsNy40TDQsNy41OXY4LjM0YzAsMTMuMzksMTMuNTMsMTguNCwxMy42NiwxOC40NWwuMzQuMTIuMzQtLjEyYy4xNCwwLDEzLjY2LTUuMDUsMTMuNjYtMTguNDVWMTMuMjJBNy40OSw3LjQ5LDAsMCwxLDMwLDEzLjVaIiBjbGFz'@;
put 'cz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJh'@;
put 'ZGdlIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzEuMjUsNy40YTQzLjc5LDQzLjc5LDAsMCwxLTYuNjItMi4zNSw0NSw0NSwwLDAsMS02LjA4LTMuMjFMMTgsMS41bC0uNTQuMzVhNDUsNDUsMCwwLDEtNi4wOCwzLjIxQTQzLjc5LDQzLjc5LDAsMCwxLDQuNzUsNy40TDQsNy41OXY4LjM0'@;
put 'YzAsMTMuMzksMTMuNTMsMTguNCwxMy42NiwxOC40NWwuMzQuMTIuMzQtLjEyYy4xNCwwLDEzLjY2LTUuMDUsMTMuNjYtMTguNDVWNy41OVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMi4yMywxNS40QTMuNjgsMy42'@;
put 'OCwwLDAsMSwxOSw5Ljg5TDIyLjQzLDRhNDEuMSw0MS4xLDAsMCwxLTMuODktMi4xOEwxOCwxLjVsLS41NC4zNWE0NSw0NSwwLDAsMS02LjA4LDMuMjFBNDMuNzksNDMuNzksMCwwLDEsNC43NSw3LjRMNCw3LjU5djguMzRjMCwxMy4zOSwxMy41MywxOC40LDEzLjY2LDE4LjQ1bC4zNC4xMi4z'@;
put 'NC0uMTJjLjE0LDAsMTMuNjYtNS4wNSwxMy42Ni0xOC40NVYxNS40WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIz'@;
put 'LDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAgICAgICAgICAgPHBhdGgg'@;
put 'ZD0iTTMwLDEzLjVhNy40Nyw3LjQ3LDAsMCwxLTcuMjctOS4zMyw0MS42MSw0MS42MSwwLDAsMS00LjE5LTIuMzNMMTgsMS41bC0uNTQuMzVhNDUsNDUsMCwwLDEtNi4wOCwzLjIxQTQzLjc5LDQzLjc5LDAsMCwxLDQuNzUsNy40TDQsNy41OXY4LjM0YzAsMTMuMzksMTMuNTMsMTguNCwxMy42'@;
put 'NiwxOC40NWwuMzQuMTIuMzQtLjEyYy4xNCwwLDEzLjY2LTUuMDUsMTMuNjYtMTguNDVWMTMuMjJBNy40OSw3LjQ5LDAsMCwxLDMwLDEzLjVaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0i'@;
put 'MzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuICAgICAgICAnKSx5LkNsclNoYXBlU2hpZWxkWD0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzEuMjUsNy40YTQzLjc5LDQzLjc5'@;
put 'LDAsMCwxLTYuNjItMi4zNSw0NSw0NSwwLDAsMS02LjA4LTMuMjFMMTgsMS41bC0uNTQuMzVhNDUsNDUsMCwwLDEtNi4wOCwzLjIxQTQzLjc5LDQzLjc5LDAsMCwxLDQuNzUsNy40TDQsNy41OXY4LjM0YzAsMTMuMzksMTMuNTMsMTguNCwxMy42NiwxOC40NWwuMzQuMTIuMzQtLjEyYy4xNCww'@;
put 'LDEzLjY2LTUuMDUsMTMuNjYtMTguNDVWNy41OVpNMzAsMTUuOTNjMCwxMS0xMCwxNS42MS0xMiwxNi40My0yLS44Mi0xMi01LjQ0LTEyLTE2LjQzVjkuMTRhNDcuNTQsNDcuNTQsMCwwLDAsNi4xOC0yLjI1LDQ4LjIzLDQ4LjIzLDAsMCwwLDUuODItMyw0OC4yMyw0OC4yMywwLDAsMCw1Ljgy'@;
put 'LDNBNDcuNTQsNDcuNTQsMCwwLDAsMzAsOS4xNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIuODEsMTAuNzksMTgsMTUuNjFsLTQuODEtNC44MWExLDEsMCwwLDAtMS40MSwxLjQxTDE2LjU5LDE3bC00Ljgx'@;
put 'LDQuODFhMSwxLDAsMSwwLDEuNDEsMS40MUwxOCwxOC40M2w0LjgxLDQuODFhMSwxLDAsMCwwLDEuNDEtMS40MUwxOS40MSwxN2w0LjgxLTQuODFhMSwxLDAsMCwwLTEuNDEtMS40MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8'@;
put 'cGF0aCBkPSJNMzEuMjUsNy40YTQzLjc5LDQzLjc5LDAsMCwxLTYuNjItMi4zNSw0NSw0NSwwLDAsMS02LjA4LTMuMjFMMTgsMS41bC0uNTQuMzVhNDUsNDUsMCwwLDEtNi4wOCwzLjIxQTQzLjc5LDQzLjc5LDAsMCwxLDQuNzUsNy40TDQsNy41OXY4LjM0YzAsMTMuMzksMTMuNTMsMTguNCwx'@;
put 'My42NiwxOC40NWwuMzQuMTIuMzQtLjEyYy4xNCwwLDEzLjY2LTUuMDUsMTMuNjYtMTguNDVWNy41OVpNMjQuNTEsMjEuNTVhMS40LDEuNCwwLDAsMS0yLDJMMTgsMTlsLTQuNTMsNC41M2ExLjQzLDEuNDMsMCwwLDEtMiwwLDEuNCwxLjQsMCwwLDEsMC0yTDE2LDE3bC00LjUzLTQuNTNhMS40'@;
put 'LDEuNCwwLDEsMSwyLTJMMTgsMTVsNC41My00LjUzYTEuNCwxLjQsMCwwLDEsMiwyTDIwLDE3WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAgICAgICAnKSx5LkNsclNoYXBlSW1wb3J0PSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yOCw0SDE0Ljg3'@;
put 'TDgsMTAuODZWMTVoMlYxMy42MWg3LjYxVjZIMjhWMzBIOGEyLDIsMCwwLDAsMiwySDI4YTIsMiwwLDAsMCwyLTJWNkEyLDIsMCwwLDAsMjgsNFpNMTYsMTJIMTB2LS4zMkwxNS43LDZIMTZaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAg'@;
put 'ICAgPHBhdGggZD0iTTExLjk0LDI2LjI4YTEsMSwwLDEsMCwxLjQxLDEuNDFMMTksMjJsLTUuNjgtNS42OGExLDEsMCwwLDAtMS40MSwxLjQxTDE1LjIsMjFIM2ExLDEsMCwxLDAsMCwySDE1LjIzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgICAg'@;
put 'ICAgICAgIDxwYXRoIGQ9Ik0xMS45NCwyNi4yOGExLDEsMCwxLDAsMS40MSwxLjQxTDE5LDIybC01LjY4LTUuNjhhMSwxLDAsMCwwLTEuNDEsMS40MUwxNS4yLDIxSDNhMSwxLDAsMSwwLDAsMkgxNS4yM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0'@;
put 'aC0xLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjgsMTUuNFYzMEg4YTIsMiwwLDAsMCwyLDJIMjhhMiwyLDAsMCwwLDItMlYxNS40WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAg'@;
put 'IDxwYXRoIGQ9Ik0xMCwxMy42MWg3LjYxVjZoMy42OGwxLjE1LTJIMTQuODdMOCwxMC44NlYxNWgyWm0wLTEuOTJMMTUuNyw2SDE2djZIMTBaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGgg'@;
put 'ZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1w'@;
put 'YXRoLTQtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMS45NCwyNi4yOGExLDEsMCwxLDAsMS40MSwxLjQxTDE5LDIybC01LjY4LTUuNjhhMSwxLDAsMCwwLTEuNDEsMS40MUwxNS4yLDIxSDNhMSwxLDAsMSwwLDAsMkgxNS4yM1oiIGNsYXNzPSJjbHIt'@;
put 'aS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LDEzLjIyVjMwSDhhMiwyLDAsMCwwLDIsMkgyOGEyLDIsMCwwLDAsMi0yVjEzLjVBNy40OSw3LjQ5LDAsMCwxLDI4LDEzLjIyWiIgY2xhc3M9ImNsci1pLW91'@;
put 'dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTAsMTMuNjFoNy42MVY2SDIyLjVhNy40OSw3LjQ5LDAsMCwxLC4yOC0ySDE0Ljg3TDgsMTAuODZWMTVoMlptMC0xLjkyTDE1LjcsNkgxNnY2SDEwWiIgY2xhc3M9ImNs'@;
put 'ci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCBjbHItaS1iYWRnZSIv'@;
put 'PlxuICAgICAgICAgICAgPHBhdGggZD0iTTMsMjFhMSwxLDAsMSwwLDAsMkg4VjIxWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LDRIMTQuODdMOCwxMC44NlYyMUgxNS4ybC0zLjI1LTMuMjVhMSwxLDAsMCwxLDEu'@;
put 'NDEtMS40MUwxOSwyMmwtNS42OCw1LjY4YTEsMSwwLDAsMS0xLjQxLTEuNDFMMTUuMjMsMjNIOHY3YTIsMiwwLDAsMCwyLDJIMjhhMiwyLDAsMCwwLDItMlY2QTIsMiwwLDAsMCwyOCw0Wk0xNiwxMkgxMHYtLjMyTDE1LjY5LDZIMTZaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQt'@;
put 'cGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMywyMWExLDEsMCwxLDAsMCwySDhWMjFaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIuMjMsMTUuNEEzLjY4LDMuNjgsMCww'@;
put 'LDEsMTksOS44OUwyMi40NSw0SDE0Ljg3TDgsMTAuODZWMjFIMTUuMmwtMy4yNS0zLjI1YTEsMSwwLDAsMSwxLjQxLTEuNDFMMTksMjJsLTUuNjgsNS42OGExLDEsMCwwLDEtMS40MS0xLjQxTDE1LjIzLDIzSDh2N2EyLDIsMCwwLDAsMiwySDI4YTIsMiwwLDAsMCwyLTJWMTUuNFpNMTYsMTJI'@;
put 'MTB2LS4zMkwxNS42OSw2SDE2WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCww'@;
put 'LDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMy0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMsMjFhMSwxLDAsMSwwLDAs'@;
put 'Mkg4VjIxWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMi41LDZhNy40OSw3LjQ5LDAsMCwxLC4yOC0ySDE0Ljg3TDgsMTAuODZWMjFIMTUuMmwtMy4yNS0zLjI1YTEsMSwwLDAsMSwxLjQx'@;
put 'LTEuNDFMMTksMjJsLTUuNjgsNS42OGExLDEsMCwwLDEtMS40MS0xLjQxTDE1LjIzLDIzSDh2N2EyLDIsMCwwLDAsMiwySDI4YTIsMiwwLDAsMCwyLTJWMTMuNUE3LjUsNy41LDAsMCwxLDIyLjUsNlpNMTYsMTJIMTB2LS4zMkwxNS42OSw2SDE2WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRn'@;
put 'ZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgJykseS5DbHJTaGFw'@;
put 'ZUV4cG9ydD0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNNiwxMy42MWg3LjYxVjZIMjR2OC4zOGgyVjZhMiwyLDAsMCwwLTItMkgxMC44N0w0LDEwLjg3VjMwYTIsMiwwLDAsMCwyLDJIMjRhMiwyLDAsMCwwLDItMkg2Wm0wLTEuOTJMMTEuNjksNkgxMnY2SDZaIiBjbGFzcz0iY2xyLWkt'@;
put 'b3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LjMyLDE2LjM1YTEsMSwwLDAsMC0xLjQxLDEuNDFMMzAuMTYsMjFIMThhMSwxLDAsMCwwLDAsMkgzMC4xOWwtMy4yOCwzLjI4YTEsMSwwLDEsMCwxLjQxLDEuNDFMMzQsMjJaIiBjbGFzcz0i'@;
put 'Y2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LjMyLDE2LjM1YTEsMSwwLDAsMC0xLjQxLDEuNDFMMzAuMTYsMjFIMThhMSwxLDAsMCwwLDAsMkgzMC4xOWwtMy4yOCwzLjI4YTEsMSwwLDEsMCwxLjQxLDEuNDFMMzQsMjJaIiBj'@;
put 'bGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTYsMTMuNjFoNy42MVY2aDcuNjhsMS4xNS0ySDEwLjg3TDQsMTAuODdWMzBhMiwyLDAsMCwwLDIsMkgyNGEyLDIsMCwwLDAsMi0ySDZabTAt'@;
put 'MS45MkwxMS42OSw2SDEydjZINloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwx'@;
put 'LjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LjMyLDE2'@;
put 'LjM1YTEsMSwwLDAsMC0xLjQxLDEuNDFMMzAuMTYsMjFIMThhMSwxLDAsMCwwLDAsMkgzMC4xOWwtMy4yOCwzLjI4YTEsMSwwLDEsMCwxLjQxLDEuNDFMMzQsMjJaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAg'@;
put 'ICAgIDxwYXRoIGQ9Ik0yNiwxMi4zNGE3LjUzLDcuNTMsMCwwLDEtMi0xLjg1djMuODloMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTYsMTMuNjFoNy42MVY2SDIyLjVhNy40OSw3'@;
put 'LjQ5LDAsMCwxLC4yOC0ySDEwLjg3TDQsMTAuODdWMzBhMiwyLDAsMCwwLDIsMkgyNGEyLDIsMCwwLDAsMi0ySDZabTAtMS45MkwxMS42OSw2SDEydjZINloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIvPlxuICAgICAgICAgICAg'@;
put 'PGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNywyMmExLDEsMCwwLDEsMS0xaDhWNmEyLDIsMCwwLDAtMi0ySDEw'@;
put 'Ljg3TDQsMTAuODZWMzBhMiwyLDAsMCwwLDIsMkgyNGEyLDIsMCwwLDAsMi0yVjIzSDE4QTEsMSwwLDAsMSwxNywyMlpNMTIsMTJINnYtLjMyTDExLjY5LDZIMTJaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjkuMzIs'@;
put 'MTYuMzVhMSwxLDAsMCwwLTEuNDEsMS40MUwzMS4xNiwyMUgyNnYyaDUuMTlsLTMuMjgsMy4yOGExLDEsMCwxLDAsMS40MSwxLjQxTDM1LDIyWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI5LjMyLDE2LjM1YTEsMSww'@;
put 'LDAsMC0xLjQxLDEuNDFMMzEuMTYsMjFIMjZ2Mmg1LjE5bC0zLjI4LDMuMjhhMSwxLDAsMSwwLDEuNDEsMS40MUwzNSwyMloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNywyMmExLDEs'@;
put 'MCwwLDEsMS0xaDhWMTUuNEgyMi4yM0EzLjY4LDMuNjgsMCwwLDEsMTksOS44OUwyMi40NSw0SDEwLjg3TDQsMTAuODZWMzBhMiwyLDAsMCwwLDIsMkgyNGEyLDIsMCwwLDAsMi0yVjIzSDE4QTEsMSwwLDAsMSwxNywyMlpNMTIsMTJINnYtLjMyTDExLjY5LDZIMTJaIiBjbGFzcz0iY2xyLWkt'@;
put 'c29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4'@;
put 'LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0zLS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjkuMzIsMTYuMzVhMSwxLDAsMCwwLTEuNDEsMS40MUwzMS4xNiwyMUgyNnYyaDUuMTls'@;
put 'LTMuMjgsMy4yOGExLDEsMCwxLDAsMS40MSwxLjQxTDM1LDIyWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNywyMmExLDEsMCwwLDEsMS0xaDhWMTIuMzRBNy40Niw3LjQ2LDAsMCwxLDIy'@;
put 'Ljc4LDRIMTAuODdMNCwxMC44NlYzMGEyLDIsMCwwLDAsMiwySDI0YTIsMiwwLDAsMCwyLTJWMjNIMThBMSwxLDAsMCwxLDE3LDIyWk0xMiwxMkg2di0uMzJMMTEuNjksNkgxMloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIi8+XG4gICAg'@;
put 'ICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICcpLHkuQ2xyU2hhcGVVcGxvYWRDbG91ZD0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBk'@;
put 'PSJNMzAuMzEsMTNjMC0uMSwwLS4yMSwwLS4zMmExMC4yNiwxMC4yNiwwLDAsMC0xMC40NS0xMCwxMC40NywxMC40NywwLDAsMC05LjYsNi4xQTkuNzQsOS43NCwwLDAsMCwxLjYsMTguNCw5LjYyLDkuNjIsMCwwLDAsMTEuMjUsMjhIMTVWMjZIMTEuMjVBNy42NSw3LjY1LDAsMCwxLDExLDEw'@;
put 'Ljc0bC42NywwLC4yMy0uNjNhOC40Myw4LjQzLDAsMCwxLDgtNS40LDguMjYsOC4yNiwwLDAsMSw4LjQ1LDgsNy43NSw3Ljc1LDAsMCwxLDAsLjhsLS4wOC43Mi42NS4zQTYsNiwwLDAsMSwyNi4zOCwyNkgyMXYyaDUuMzhhOCw4LDAsMCwwLDMuOTMtMTVaIiBjbGFzcz0iY2xyLWktb3V0bGlu'@;
put 'ZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIyLjI4LDIxLjg1QTEsMSwwLDAsMCwyMywyMC4xNGwtNS01LTUsNWExLDEsMCwwLDAsMS40MSwxLjQxTDE3LDE5VjMxLjI1YTEsMSwwLDEsMCwyLDBWMTlsMi41NywyLjU3QTEsMSwwLDAsMCwyMi4yOCwy'@;
put 'MS44NVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIuMjgsMjEuODVBMSwxLDAsMCwwLDIzLDIwLjE0bC01LTUtNSw1YTEsMSwwLDAsMCwxLjQxLDEuNDFMMTcsMTlWMzEuMjVhMSwxLDAsMSwwLDIsMFYxOWwy'@;
put 'LjU3LDIuNTdBMSwxLDAsMCwwLDIyLjI4LDIxLjg1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zLjYsMTguMzhBNy43MSw3LjcxLDAsMCwxLDExLDEwLjc0bC42NywwLC4yMy0u'@;
put 'NjNhOC40Myw4LjQzLDAsMCwxLDgtNS40LDguODEsOC44MSwwLDAsMSwyLC4yNWwxLTEuOGExMC44LDEwLjgsMCwwLDAtMy4wNy0uNDUsMTAuNDcsMTAuNDcsMCwwLDAtOS42LDYuMUE5Ljc0LDkuNzQsMCwwLDAsMS42LDE4LjQsOS42Miw5LjYyLDAsMCwwLDExLjI1LDI4SDE1VjI2SDExLjI1'@;
put 'QTcuNjYsNy42NiwwLDAsMSwzLjYsMTguMzhaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLjksMTUuNEgzMC4yMUE2LDYsMCwwLDEsMjYuMzgsMjZIMjF2Mmg1LjM4QTgsOCww'@;
put 'LDAsMCwzMi45LDE1LjRaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCww'@;
put 'LDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMi4yOCwyMS44NUEx'@;
put 'LDEsMCwwLDAsMjMsMjAuMTRsLTUtNS01LDVhMSwxLDAsMCwwLDEuNDEsMS40MUwxNywxOVYzMS4yNWExLDEsMCwxLDAsMiwwVjE5bDIuNTcsMi41N0ExLDEsMCwwLDAsMjIuMjgsMjEuODVaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRn'@;
put 'ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMC45MiwxMy40NGE3LjEzLDcuMTMsMCwwLDEtMi42My0uMTRjMCwuMDgsMCwuMTUsMCwuMjNsLS4wOC43Mi42NS4zQTYsNiwwLDAsMSwyNi4zOCwyNkgyMXYyaDUuMzhhOCw4LDAsMCwwLDQuNTQtMTQuNTZaIiBjbGFzcz0iY2xyLWktb3V0'@;
put 'bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zLjYsMTguMzhBNy43MSw3LjcxLDAsMCwxLDExLDEwLjc0bC42NywwLC4yMy0uNjNhOC40Myw4LjQzLDAsMCwxLDgtNS40LDguNzksOC43OSwwLDAsMSwyLjY4LjQyLDcu'@;
put 'NDUsNy40NSwwLDAsMSwuNS0xLjk0LDEwLjc5LDEwLjc5LDAsMCwwLTMuMTgtLjQ4LDEwLjQ3LDEwLjQ3LDAsMCwwLTkuNiw2LjFBOS43NCw5Ljc0LDAsMCwwLDEuNiwxOC40LDkuNjIsOS42MiwwLDAsMCwxMS4yNSwyOEgxNVYyNkgxMS4yNUE3LjY2LDcuNjYsMCwwLDEsMy42LDE4LjM4WiIg'@;
put 'Y2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCBjbHIt'@;
put 'aS1iYWRnZSIvPlxuICAgICAgICAnKSx5LkNsclNoYXBlRG93bmxvYWRDbG91ZD0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzAuMzEsMTNjMC0uMSwwLS4yMSwwLS4zMmExMC4yNiwxMC4yNiwwLDAsMC0xMC40NS0xMCwxMC40NywxMC40NywwLDAsMC05LjYsNi4xQTkuNjUsOS42NSww'@;
put 'LDAsMCwxMC44OSwyOGEzLDMsMCwwLDEsMC0yQTcuNjUsNy42NSwwLDAsMSwxMSwxMC43NGwuNjcsMCwuMjMtLjYzYTguNDMsOC40MywwLDAsMSw4LTUuNCw4LjI2LDguMjYsMCwwLDEsOC40NSw4LDcuNzUsNy43NSwwLDAsMSwwLC44bC0uMDguNzIuNjUuM0E2LDYsMCwwLDEsMjYuMzgsMjZI'@;
put 'MjUuMDlhMywzLDAsMCwxLDAsMmgxLjI4YTgsOCwwLDAsMCwzLjkzLTE1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMi4yOCwyNi4wN2ExLDEsMCwwLDAtLjcxLjI5TDE5LDI4Ljk0VjE2LjY4YTEsMSwwLDEs'@;
put 'MC0yLDBWMjguOTRsLTIuNTctMi41N0ExLDEsMCwwLDAsMTMsMjcuNzhsNSw1LDUtNWExLDEsMCwwLDAtLjcxLTEuNzFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIyLjI4LDI2LjA3YTEsMSwwLDAsMC0uNzEu'@;
put 'MjlMMTksMjguOTRWMTYuNjhhMSwxLDAsMSwwLTIsMFYyOC45NGwtMi41Ny0yLjU3QTEsMSwwLDAsMCwxMywyNy43OGw1LDUsNS01YTEsMSwwLDAsMC0uNzEtMS43MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIi8+XG4gICAg'@;
put 'ICAgICAgICA8cGF0aCBkPSJNMTkuODcsNC42OWE4LjgxLDguODEsMCwwLDEsMiwuMjVsMS0xLjhhMTAuOCwxMC44LDAsMCwwLTMuMDctLjQ1LDEwLjQ3LDEwLjQ3LDAsMCwwLTkuNiw2LjFBOS42NSw5LjY1LDAsMCwwLDEwLjg5LDI4YTMsMywwLDAsMSwwLTJBNy42NSw3LjY1LDAsMCwxLDEx'@;
put 'LDEwLjc0bC42NywwLC4yMy0uNjNBOC40Myw4LjQzLDAsMCwxLDE5Ljg3LDQuNjlaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLjksMTUuNEgzMC4yMUE2LDYsMCwwLDEsMjYu'@;
put 'MzgsMjZIMjUuMDlhMywzLDAsMCwxLDAsMmgxLjI4QTgsOCwwLDAsMCwzMi45LDE1LjRaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwx'@;
put 'LjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5c'@;
put 'biAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMi4yOCwyNi4wN2ExLDEsMCwwLDAtLjcxLjI5TDE5LDI4Ljk0VjE2LjY4YTEsMSwwLDEsMC0yLDBWMjguOTRsLTIuNTctMi41N0ExLDEsMCwwLDAsMTMsMjcuNzhsNSw1LDUtNWExLDEsMCwwLDAtLjcxLTEuNzFaIiBjbGFzcz0iY2xyLWktb3V0bGlu'@;
put 'ZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOS44Nyw0LjY5YTguNzksOC43OSwwLDAsMSwyLjY4LjQyLDcuNDUsNy40NSwwLDAsMSwuNS0xLjk0LDEwLjc5LDEwLjc5LDAsMCwwLTMuMTgtLjQ4LDEwLjQ3LDEwLjQ3LDAs'@;
put 'MCwwLTkuNiw2LjFBOS42NSw5LjY1LDAsMCwwLDEwLjg5LDI4YTMsMywwLDAsMSwwLTJBNy42NSw3LjY1LDAsMCwxLDExLDEwLjc0bC42NywwLC4yMy0uNjNBOC40Myw4LjQzLDAsMCwxLDE5Ljg3LDQuNjlaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0'@;
put 'aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMC45MiwxMy40NGE3LjEzLDcuMTMsMCwwLDEtMi42My0uMTRjMCwuMDgsMCwuMTUsMCwuMjNsLS4wOC43Mi42NS4zQTYsNiwwLDAsMSwyNi4zOCwyNkgyNS4wOWEzLDMsMCwwLDEsMCwyaDEuMjhhOCw4LDAsMCwwLDQuNTQt'@;
put 'MTQuNjFaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFk'@;
put 'Z2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICcpLHkuQ2xyU2hhcGVQbHVnaW49KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI5LjgxLDE2SDI5VjguODNhMiwyLDAsMCwwLTItMkgyMUE1LjE0LDUuMTQsMCwwLDAsMTYuNTEsMiw1LDUsMCwwLDAsMTEsNi44M0g0YTIsMiwwLDAsMC0y'@;
put 'LDJWMTdINC44MUEzLjEzLDMuMTMsMCwwLDEsOCwxOS42OSwzLDMsMCwwLDEsNy4yMiwyMiwzLDMsMCwwLDEsNSwyM0gydjguODNhMiwyLDAsMCwwLDIsMkgyN2EyLDIsMCwwLDAsMi0yVjI2aDFhNSw1LDAsMCwwLDUtNS41MUE1LjE1LDUuMTUsMCwwLDAsMjkuODEsMTZabTIuNDEsN0EzLDMs'@;
put 'MCwwLDEsMzAsMjRIMjd2Ny44M0g0VjI1SDVhNSw1LDAsMCwwLDUtNS41MUE1LjE1LDUuMTUsMCwwLDAsNC44MSwxNUg0VjguODNoOVY3YTMsMywwLDAsMSwxLTIuMjJBMywzLDAsMCwxLDE2LjMxLDQsMy4xMywzLjEzLDAsMCwxLDE5LDcuMTlWOC44M2g4VjE4aDIuODFBMy4xMywzLjEzLDAs'@;
put 'MCwxLDMzLDIwLjY5LDMsMywwLDAsMSwzMi4yMiwyM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjkuODEsMTZIMjl2LS42SDI3VjE4aDIuODFBMy4xMywzLjEzLDAsMCwxLDMzLDIwLjY5LDMsMywwLDAsMSwz'@;
put 'Mi4yMiwyMywzLDMsMCwwLDEsMzAsMjRIMjd2Ny44M0g0VjI1SDVhNSw1LDAsMCwwLDUtNS41MUE1LjE1LDUuMTUsMCwwLDAsNC44MSwxNUg0VjguODNoOVY3YTMsMywwLDAsMSwxLTIuMjJBMywzLDAsMCwxLDE2LjMxLDQsMy4xMywzLjEzLDAsMCwxLDE5LDcuMTlWOC44M2guNjZMMjEsNi41'@;
put 'OUE1LjEyLDUuMTIsMCwwLDAsMTYuNTEsMiw1LDUsMCwwLDAsMTEsNi44M0g0YTIsMiwwLDAsMC0yLDJWMTdINC44MUEzLjEzLDMuMTMsMCwwLDEsOCwxOS42OSwzLDMsMCwwLDEsNy4yMiwyMiwzLDMsMCwwLDEsNSwyM0gydjguODNhMiwyLDAsMCwwLDIsMkgyN2EyLDIsMCwwLDAsMi0yVjI2'@;
put 'aDFhNSw1LDAsMCwwLDUtNS41MUE1LjE1LDUuMTUsMCwwLDAsMjkuODEsMTZaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAs'@;
put 'MCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5cbiAgICAg'@;
put 'ICAgICAgIDxwYXRoIGQ9Ik0yOS44MSwxNkgyOVYxMy40M2E3LjQ1LDcuNDUsMCwwLDEtMi0uNTVWMThoMi44MUEzLjEzLDMuMTMsMCwwLDEsMzMsMjAuNjksMywzLDAsMCwxLDMyLjIyLDIzLDMsMywwLDAsMSwzMCwyNEgyN3Y3LjgzSDRWMjVINWE1LDUsMCwwLDAsNS01LjUxQTUuMTUsNS4x'@;
put 'NSwwLDAsMCw0LjgxLDE1SDRWOC44M2g5VjdhMywzLDAsMCwxLDEtMi4yMkEzLDMsMCwwLDEsMTYuMzEsNCwzLjEzLDMuMTMsMCwwLDEsMTksNy4xOVY4LjgzaDQuMDZhNy40NCw3LjQ0LDAsMCwxLS41MS0ySDIxQTUuMTQsNS4xNCwwLDAsMCwxNi41MSwyLDUsNSwwLDAsMCwxMSw2LjgzSDRh'@;
put 'MiwyLDAsMCwwLTIsMlYxN0g0LjgxQTMuMTMsMy4xMywwLDAsMSw4LDE5LjY5LDMsMywwLDAsMSw3LjIyLDIyLDMsMywwLDAsMSw1LDIzSDJ2OC44M2EyLDIsMCwwLDAsMiwySDI3YTIsMiwwLDAsMCwyLTJWMjZoMWE1LDUsMCwwLDAsNS01LjUxQTUuMTUsNS4xNSwwLDAsMCwyOS44MSwxNloi'@;
put 'IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQgY2xy'@;
put 'LWktYmFkZ2UiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOS44MSwxNkgyOVY4LjgzYTIsMiwwLDAsMC0yLTJIMjFBNS4xNCw1LjE0LDAsMCwwLDE2LjUxLDIsNSw1LDAsMCwwLDExLDYuODNINGEyLDIsMCwwLDAtMiwyVjE3SDQuODFBMy4xMywzLjEzLDAsMCwxLDgsMTkuNjksMywzLDAs'@;
put 'MCwxLDcuMjIsMjIsMywzLDAsMCwxLDUsMjNIMnY4LjgzYTIsMiwwLDAsMCwyLDJIMjdhMiwyLDAsMCwwLDItMlYyNmgxYTUsNSwwLDAsMCw1LTUuNTFBNS4xNSw1LjE1LDAsMCwwLDI5LjgxLDE2WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAgICAgICAg'@;
put 'ICAgPHBhdGggZD0iTTI5LjgxLDE2SDI5di0uNkgyMi4yM0EzLjY4LDMuNjgsMCwwLDEsMTksOS44OUwyMSw2LjU5QTUuMTIsNS4xMiwwLDAsMCwxNi41MSwyLDUsNSwwLDAsMCwxMSw2LjgzSDRhMiwyLDAsMCwwLTIsMlYxN0g0LjgxQTMuMTMsMy4xMywwLDAsMSw4LDE5LjY5LDMsMywwLDAs'@;
put 'MSw3LjIyLDIyLDMsMywwLDAsMSw1LDIzSDJ2OC44M2EyLDIsMCwwLDAsMiwySDI3YTIsMiwwLDAsMCwyLTJWMjZoMWE1LDUsMCwwLDAsNS01LjUxQTUuMTUsNS4xNSwwLDAsMCwyOS44MSwxNloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0'@;
put 'ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiIGNsYXNzPSJjbHItaS1zb2xpZC0t'@;
put 'YWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOS44MSwxNkgyOVYxMy40M2E3LjUsNy41LDAsMCwxLTYuNDUtNi41OUgyMUE1LjE0LDUuMTQsMCwwLDAsMTYuNTEsMiw1LDUsMCwwLDAsMTEsNi44M0g0YTIs'@;
put 'MiwwLDAsMC0yLDJWMTdINC44MUEzLjEzLDMuMTMsMCwwLDEsOCwxOS42OSwzLDMsMCwwLDEsNy4yMiwyMiwzLDMsMCwwLDEsNSwyM0gydjguODNhMiwyLDAsMCwwLDIsMkgyN2EyLDIsMCwwLDAsMi0yVjI2aDFhNSw1LDAsMCwwLDUtNS41MUE1LjE1LDUuMTUsMCwwLDAsMjkuODEsMTZaIiBj'@;
put 'bGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIv'@;
put 'PlxuICAgICAgICAnKSx5LkNsclNoYXBlRmxvcHB5PSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yNy4zNiw0SDZBMiwyLDAsMCwwLDQsNlYzMGEyLDIsMCwwLDAsMiwySDMwYTIsMiwwLDAsMCwyLTJWOC43OFpNMjUsMzBIMTFWMjJIMjVabTUsMEgyN1YyMmEyLDIsMCwwLDAtMi0ySDEx'@;
put 'YTIsMiwwLDAsMC0yLDJ2OEg2VjZoNHY2YTIsMiwwLDAsMCwyLDJIMjRhMiwyLDAsMCwwLDItMkgxMlY2SDI2LjUxTDMwLDkuNTlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMCwxMy41aDBWMzBIMjdWMjJh'@;
put 'MiwyLDAsMCwwLTItMkgxMWEyLDIsMCwwLDAtMiwydjhINlY2aDR2NmEyLDIsMCwwLDAsMiwySDI0YTIsMiwwLDAsMCwyLTEuNjhsLS40My0uM0gxMlY2SDIyLjVhNy40OSw3LjQ5LDAsMCwxLC4yOC0ySDZBMiwyLDAsMCwwLDQsNlYzMGEyLDIsMCwwLDAsMiwySDMwYTIsMiwwLDAsMCwyLTJW'@;
put 'MTMuMjJBNy40OSw3LjQ5LDAsMCwxLDMwLDEzLjVaTTI1LDMwSDExVjIySDI1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1v'@;
put 'dXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLDE1LjRWMzBIMjdWMjJhMiwyLDAsMCwwLTItMkgxMWEyLDIsMCwwLDAtMiwydjhINlY2aDR2NmEyLDIsMCwwLDAsMiwyaDcuMzVhMy41NCwz'@;
put 'LjU0LDAsMCwxLS43Ny0ySDEyVjZoOS4yOWwxLjE1LTJINkEyLDIsMCwwLDAsNCw2VjMwYTIsMiwwLDAsMCwyLDJIMzBhMiwyLDAsMCwwLDItMlYxNS40Wk0yNSwzMEgxMVYyMkgyNVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVk'@;
put 'Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0t'@;
put 'YWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI3LjM2LDRINkEyLDIsMCwwLDAsNCw2VjMwYTIsMiwwLDAsMCwyLDJIMzBhMiwyLDAsMCwwLDItMlY4Ljc4Wk0yNiwzMEgxMFYyMS41QTEuNSwxLjUsMCww'@;
put 'LDEsMTEuNSwyMGgxM0ExLjUsMS41LDAsMCwxLDI2LDIxLjVaTTI0LDE0SDEyYTIsMiwwLDAsMS0yLTJWNmgydjZIMjZBMiwyLDAsMCwxLDI0LDE0WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLDEzLjVhNy40Niw3'@;
put 'LjQ2LDAsMCwxLTQtMS4xOEEyLDIsMCwwLDEsMjQsMTRIMTJhMiwyLDAsMCwxLTItMlY2aDJ2NkgyNS41NGE3LjQ1LDcuNDUsMCwwLDEtMi43Ni04SDZBMiwyLDAsMCwwLDQsNlYzMGEyLDIsMCwwLDAsMiwySDMwYTIsMiwwLDAsMCwyLTJWMTMuMjJBNy40OSw3LjQ5LDAsMCwxLDMwLDEzLjVa'@;
put 'TTI2LDMwSDEwVjIxLjVBMS41LDEuNSwwLDAsMSwxMS41LDIwaDEzQTEuNSwxLjUsMCwwLDEsMjYsMjEuNVoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNs'@;
put 'YXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIuMjMsMTUuNEEzLjY5LDMuNjksMCwwLDEsMTkuMzUsMTRIMTJhMiwyLDAsMCwxLTItMlY2aDJ2Nmg2LjU4QTMuNjcsMy42Nyww'@;
put 'LDAsMSwxOSw5Ljg5TDIyLjQ1LDRINkEyLDIsMCwwLDAsNCw2VjMwYTIsMiwwLDAsMCwyLDJIMzBhMiwyLDAsMCwwLDItMlYxNS40Wk0yNiwzMEgxMFYyMS41QTEuNSwxLjUsMCwwLDEsMTEuNSwyMGgxM0ExLjUsMS41LDAsMCwxLDI2LDIxLjVaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0'@;
put 'ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1'@;
put 'LDEuMTRaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG4gICAgICAgICcpLHkuQ2xyU2hhcGVDb21wdXRlcj0oMCxnLmNsckljb25TVkcpKCc8cG9seWdvbiBwb2ludHM9IjkuNiAyMi44OCA5LjYgMTAuNiAy'@;
put 'NC40IDEwLjYgMjUuOTggOSA4IDkgOCAyMi44OCA5LjYgMjIuODgiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNNiw3SDMwVjIzaDJWNi41QTEuNSwxLjUsMCwwLDAsMzAuNSw1SDUuNUExLjUsMS41LDAsMCwwLDQs'@;
put 'Ni41VjIzSDZaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTEsMjV2My40QTIuNiwyLjYsMCwwLDAsMy42LDMxSDMyLjM0YTIuNiwyLjYsMCwwLDAsMi42LTIuNlYyNVptMzIsMy40YS42LjYsMCwwLDEtLjYuNkgz'@;
put 'LjU2YS42LjYsMCwwLDEtLjYtLjZWMjYuNTNoOS45NWExLjY0LDEuNjQsMCwwLDAsMS41LDFoNy4xM2ExLjY0LDEuNjQsMCwwLDAsMS41LTFIMzNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTEsMjV2My40QTIu'@;
put 'NiwyLjYsMCwwLDAsMy42LDMxSDMyLjM0YTIuNiwyLjYsMCwwLDAsMi42LTIuNlYyNVptMzIsMy40YS42LjYsMCwwLDEtLjYuNkgzLjU2YS42LjYsMCwwLDEtLjYtLjZWMjYuNTNoOS45NWExLjY0LDEuNjQsMCwwLDAsMS41LDFoNy4xM2ExLjY0LDEuNjQsMCwwLDAsMS41LTFIMzNaIiBjbGFz'@;
put 'cz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTkuNiwyMi44OFYxMC42aDkuMTRBMy42NCwzLjY0LDAsMCwxLDE5LDkuODlMMTkuNTYsOUg4VjIyLjg4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUt'@;
put 'LWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik02LDdIMjAuNzFsMS4xNS0ySDUuNUExLjUsMS41LDAsMCwwLDQsNi41VjIzSDZaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0t'@;
put 'YWxlcnRlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMzAiIHk9IjE1LjQiIHdpZHRoPSIyIiBoZWlnaHQ9IjcuNiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0'@;
put 'LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC01LS1hbGVydGVk'@;
put 'IGNsci1pLWFsZXJ0Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMSwyNXYzLjRBMi42LDIuNiwwLDAsMCwzLjYsMzFIMzIuMzRhMi42LDIuNiwwLDAsMCwyLjYtMi42VjI1Wm0zMiwzLjRhLjYuNiwwLDAsMS0uNi42SDMuNTZhLjYuNiwwLDAsMS0uNi0uNlYyNi41M2g5Ljk1YTEuNjQsMS42'@;
put 'NCwwLDAsMCwxLjUsMWg3LjEzYTEuNjQsMS42NCwwLDAsMCwxLjUtMUgzM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIyLjUsNmE3LjUyLDcuNTIsMCwwLDEsLjA3LTFINS41QTEu'@;
put 'NSwxLjUsMCwwLDAsNCw2LjVWMjNINlY3SDIyLjU3QTcuNTIsNy41MiwwLDAsMSwyMi41LDZaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMCwxMy41VjIzaDJWMTMuMjJBNy40OSw3'@;
put 'LjQ5LDAsMCwxLDMwLDEzLjVaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMy4xMyw5SDhWMjIuODhIOS42VjEwLjZIMjQuMDhBNy40OSw3LjQ5LDAsMCwxLDIzLjEzLDlaIiBjbGFz'@;
put 'cz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYmFkZ2VkIGNsci1pLWJh'@;
put 'ZGdlIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjMuODEsMjZjLS4zNS45LS45NCwxLjUtMS42MSwxLjVIMTMuNzRjLS42OCwwLTEuMjYtLjYtMS42MS0xLjVIMXYxLjc1QTIuNDUsMi40NSwwLDAsMCwzLjYsMzBIMzIuNEEyLjQ1LDIuNDUsMCwwLDAsMzUsMjcuNzVWMjZaIiBjbGFzcz0i'@;
put 'Y2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNNywxMEgyOVYyNGgzVjcuNTdBMS41NCwxLjU0LDAsMCwwLDMwLjUsNkg1LjVBMS41NCwxLjU0LDAsMCwwLDQsNy41N1YyNEg3WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBh'@;
put 'dGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIzLjgxLDI2Yy0uMzUuOS0uOTQsMS41LTEuNjEsMS41SDEzLjc0Yy0uNjgsMC0xLjI2LS42LTEuNjEtMS41SDF2MS43NUEyLjQ1LDIuNDUsMCwwLDAsMy42LDMwSDMyLjRBMi40NSwyLjQ1LDAsMCwwLDM1LDI3Ljc1VjI2WiIgY2xhc3M9'@;
put 'ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMjkiIHk9IjE1LjQiIHdpZHRoPSIzIiBoZWlnaHQ9IjguNiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRl'@;
put 'ZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTcsMTBIMTlMMTksOS44OSwyMS4yOSw2SDUuNUExLjU0LDEuNTQsMCwwLDAsNCw3LjU3VjI0SDdaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0zLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBk'@;
put 'PSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC00'@;
put 'LS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjMuODEsMjZjLS4zNS45LS45NCwxLjUtMS42MSwxLjVIMTMuNzRjLS42OCwwLTEuMjYtLjYtMS42MS0xLjVIMXYxLjc1QTIuNDUsMi40NSwwLDAsMCwzLjYsMzBIMzIuNEEyLjQ1LDIuNDUsMCwwLDAsMzUs'@;
put 'MjcuNzVWMjZaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTcsMTBIMjMuNjZBNy40Niw3LjQ2LDAsMCwxLDIyLjUsNkg1LjVBMS41NCwxLjU0LDAsMCwwLDQsNy41N1YyNEg3WiIgY2xhc3M9'@;
put 'ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMiwxMy4yMmE3LjE0LDcuMTQsMCwwLDEtMywuMlYyNGgzWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQi'@;
put 'Lz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC00LS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgJykseS5DbHJTaGFwZURpc3BsYXk9KDAsZy5jbHJJY29uU1ZHKSgnPHBh'@;
put 'dGggZD0iTTMyLjUsM0gzLjVBMS41LDEuNSwwLDAsMCwyLDQuNXYyMUExLjUsMS41LDAsMCwwLDMuNSwyN2gyOUExLjUsMS41LDAsMCwwLDM0LDI1LjVWNC41QTEuNSwxLjUsMCwwLDAsMzIuNSwzWk0zMiwyNUg0VjVIMzJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBh'@;
put 'dGgtMSIvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSI3LjcgOC43NiAyOC4xMyA4Ljc2IDI5Ljk0IDcuMTYgNi4xIDcuMTYgNi4xIDIzIDcuNyAyMyA3LjcgOC43NiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgICAgICAgICAgIDxwYXRo'@;
put 'IGQ9Ik0yNiwzMkgyNC4yNmEzLjYxLDMuNjEsMCwwLDEtMS41LTIuNTJWMjguMTNIMjEuMjRWMjkuNUE0LjIsNC4yLDAsMCwwLDIyLjE3LDMySDEzLjgzYTQuMiw0LjIsMCwwLDAsLjkzLTIuNTJWMjguMTNIMTMuMjRWMjkuNUEzLjYxLDMuNjEsMCwwLDEsMTEuNzQsMzJIOS45NGExLDEsMCwx'@;
put 'LDAsMCwySDI2LjA2YS45Mi45MiwwLDAsMCwxLTFBMSwxLDAsMCwwLDI2LDMyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNiwzMkgyNC4yNmEzLjYxLDMuNjEsMCwwLDEtMS41LTIuNTJWMjguMTNIMjEuMjRW'@;
put 'MjkuNUE0LjIsNC4yLDAsMCwwLDIyLjE3LDMySDEzLjgzYTQuMiw0LjIsMCwwLDAsLjkzLTIuNTJWMjguMTNIMTMuMjRWMjkuNUEzLjYxLDMuNjEsMCwwLDEsMTEuNzQsMzJIOS45NGExLDEsMCwxLDAsMCwySDI2LjA2YS45Mi45MiwwLDAsMCwxLTFBMSwxLDAsMCwwLDI2LDMyWiIgY2xhc3M9'@;
put 'ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy42OCwxNS40SDMyVjI1SDRWNUgyMS44N0wyMywzSDMuNUExLjUsMS41LDAsMCwwLDIsNC41djIxQTEuNSwxLjUsMCwwLDAsMy41LDI3aDI5QTEu'@;
put 'NSwxLjUsMCwwLDAsMzQsMjUuNVYxNS4zOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cG9seWdvbiBwb2ludHM9IjcuNyAyMyA3LjcgOC43NiAxOS43IDguNzYgMjAuNjIgNy4xNiA2LjEgNy4x'@;
put 'NiA2LjEgMjMgNy43IDIzIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCww'@;
put 'LDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNiwzMkgyNC4yNmEz'@;
put 'LjYxLDMuNjEsMCwwLDEtMS41LTIuNTJWMjguMTNIMjEuMjRWMjkuNUE0LjIsNC4yLDAsMCwwLDIyLjE3LDMySDEzLjgzYTQuMiw0LjIsMCwwLDAsLjkzLTIuNTJWMjguMTNIMTMuMjRWMjkuNUEzLjYxLDMuNjEsMCwwLDEsMTEuNzQsMzJIOS45NGExLDEsMCwxLDAsMCwySDI2LjA2YS45Mi45'@;
put 'MiwwLDAsMCwxLTFBMSwxLDAsMCwwLDI2LDMyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNNi4xLDIzSDcuN1Y4Ljc2SDIzYTcuNDQsNy40NCwwLDAsMS0uNDMtMS42SDYuMVoiIGNs'@;
put 'YXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLDEzLjIyVjI1SDRWNUgyMi41N2E3LjQ1LDcuNDUsMCwwLDEsLjU1LTJIMy41QTEuNSwxLjUsMCwwLDAsMiw0LjV2MjFBMS41LDEuNSwwLDAs'@;
put 'MCwzLjUsMjdoMjlBMS41LDEuNSwwLDAsMCwzNCwyNS41VjEyLjM0QTcuNDUsNy40NSwwLDAsMSwzMiwxMy4yMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiBy'@;
put 'PSI1IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNiwzMkgyNC4yNmEzLjYxLDMuNjEsMCwwLDEtMS41LTIuNTJWMjguMTNIMTMuMjRWMjkuNUEzLjYxLDMuNjEs'@;
put 'MCwwLDEsMTEuNzQsMzJIOS45NGExLDEsMCwxLDAsMCwySDI2LjA2YS45Mi45MiwwLDAsMCwxLTFBMSwxLDAsMCwwLDI2LDMyWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLjUsM0gzLjVBMS41LDEuNSwwLDAsMCwy'@;
put 'LDQuNXYyMUExLjUsMS41LDAsMCwwLDMuNSwyN2gyOUExLjUsMS41LDAsMCwwLDM0LDI1LjVWNC41QTEuNSwxLjUsMCwwLDAsMzIuNSwzWk0zMSwyMS44M0g1VjdIMzFaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYs'@;
put 'MzJIMjQuMjZhMy42MSwzLjYxLDAsMCwxLTEuNS0yLjUyVjI4LjEzSDEzLjI0VjI5LjVBMy42MSwzLjYxLDAsMCwxLDExLjc0LDMySDkuOTRhMSwxLDAsMSwwLDAsMkgyNi4wNmEuOTIuOTIsMCwwLDAsMS0xQTEsMSwwLDAsMCwyNiwzMloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBj'@;
put 'bHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy42OCwxNS40SDMxdjYuNDNINVY3SDIwLjcxTDIzLDNIMy41QTEuNSwxLjUsMCwwLDAsMiw0LjV2MjFBMS41LDEuNSwwLDAsMCwzLjUsMjdoMjlBMS41LDEuNSwwLDAsMCwzNCwyNS41VjE1LjM4'@;
put 'WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4w'@;
put 'NiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMy0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2LDMySDI0LjI2YTMuNjEsMy42MSwwLDAsMS0xLjUtMi41'@;
put 'MlYyOC4xM0gxMy4yNFYyOS41QTMuNjEsMy42MSwwLDAsMSwxMS43NCwzMkg5Ljk0YTEsMSwwLDEsMCwwLDJIMjYuMDZhLjkyLjkyLDAsMCwwLDEtMUExLDEsMCwwLDAsMjYsMzJaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIvPlxuICAg'@;
put 'ICAgICAgICAgPHBhdGggZD0iTTMxLDEzLjQzdjguNDFINVY3SDIyLjU3YTcuMjksNy4yOSwwLDAsMSwuNTUtNEgzLjVBMS41LDEuNSwwLDAsMCwyLDQuNXYyMUExLjUsMS41LDAsMCwwLDMuNSwyN2gyOUExLjUsMS41LDAsMCwwLDM0LDI1LjVWMTIuMzRBNy40NCw3LjQ0LDAsMCwxLDMxLDEz'@;
put 'LjQzWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQgY2xyLWkt'@;
put 'YmFkZ2UiLz5cbiAgICAgICAgJykseS5DbHJTaGFwZVRlcm1pbmFsPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMiw1SDRBMiwyLDAsMCwwLDIsN1YyOWEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWN0EyLDIsMCwwLDAsMzIsNVpNNCw3SDMyVjkuMkg0Wk00LDI5VjEwLjhI'@;
put 'MzJWMjlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE3IiB5PSIyMyIgd2lkdGg9IjYiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAg'@;
put 'ICA8cG9seWdvbiBwb2ludHM9IjcgMTUuNjggMTMuNzkgMTguOCA3IDIxLjkxIDcgMjQuMTEgMTYuNiAxOS43IDE2LjYgMTcuODkgNyAxMy40OCA3IDE1LjY4IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE3IiB5'@;
put 'PSIyMyIgd2lkdGg9IjYiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cG9seWdvbiBwb2ludHM9IjcgMjQuMTEgMTYuNiAxOS43IDE2LjYgMTcuODkgNyAxMy40OCA3IDE1LjY4'@;
put 'IDEzLjc5IDE4LjggNyAyMS45MSA3IDI0LjExIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy42OCwxNS40SDMyVjI5SDRWMTAuOEgxOC42OEEzLjY2LDMuNjYsMCwwLDEsMTks'@;
put 'OS44OWwuNC0uNjlINFY3SDIwLjcxbDEuMTUtMkg0QTIsMiwwLDAsMCwyLDdWMjlhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjE1LjM4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8'@;
put 'cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0'@;
put 'bGluZS1wYXRoLTQtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxNyIgeT0iMjMiIHdpZHRoPSI2IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgLz5cbiAgICAgICAgICAg'@;
put 'IDxwb2x5Z29uIHBvaW50cz0iNyAyNC4xMSAxNi42IDE5LjcgMTYuNiAxNy44OSA3IDEzLjQ4IDcgMTUuNjggMTMuNzkgMTguOCA3IDIxLjkxIDcgMjQuMTEiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgLz5cbiAgICAgICAgICAg'@;
put 'IDxwYXRoIGQ9Ik0zMiwxMy4yMlYyOUg0VjEwLjhIMjQuMjRhNy41MSw3LjUxLDAsMCwxLTEtMS42SDRWN0gyMi41N2E3LjUyLDcuNTIsMCwwLDEtLjA3LTEsNy41Miw3LjUyLDAsMCwxLC4wNy0xSDRBMiwyLDAsMCwwLDIsN1YyOWEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMTIu'@;
put 'MzRBNy40NSw3LjQ1LDAsMCwxLDMyLDEzLjIyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBj'@;
put 'bHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLDVINEEyLDIsMCwwLDAsMiw3VjI5YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlY3QTIsMiwwLDAsMCwzMiw1Wk02LjgsMTUuODFWMTMuMTdsMTAsNC41OXYy'@;
put 'LjA4bC0xMCw0LjU5VjIxLjc4bDYuNTEtM1pNMjMuNCwyNS40SDE3VjIzaDYuNFpNNCw5LjJWN0gzMlY5LjJaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjY4LDE1LjRIMjIuMjNBMy42OCwzLjY4LDAsMCwxLDE5'@;
put 'LDkuODlsLjQtLjY5SDRWN0gyMC43MWwxLjE1LTJINEEyLDIsMCwwLDAsMiw3VjI5YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYxNS4zOFpNMTYuOCwxOS44M2wtMTAsNC41OVYyMS43OGw2LjUxLTMtNi41MS0zVjEzLjE3bDEwLDQuNTlabTYuNiw1LjU3SDE3VjIzaDYuNFoiIGNs'@;
put 'YXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEu'@;
put 'MTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiAgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMCwxMy41YTcuNDksNy40OSwwLDAsMS02Ljc4LTQuM0g0VjdI'@;
put 'MjIuNTdhNy41Miw3LjUyLDAsMCwxLS4wNy0xLDcuNTIsNy41MiwwLDAsMSwuMDctMUg0QTIsMiwwLDAsMCwyLDdWMjlhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjEyLjM0QTcuNDYsNy40NiwwLDAsMSwzMCwxMy41Wk0xNi44LDE5LjgzbC0xMCw0LjU5VjIxLjc4bDYuNTEtMy02'@;
put 'LjUxLTNWMTMuMTdsMTAsNC41OVptNi42LDUuNTdIMTdWMjNoNi40WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiICBjbGFzcz0iY2xyLWktc29saWQtLWJh'@;
put 'ZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgLz5cbiAgICAgICAgJykseS5DbHJTaGFwZUNvZGU9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTEzLjcxLDEyLjU5YTEsMSwwLDAsMC0xLjM5LS4yNkw1Ljc5LDE2Ljc4YTEsMSwwLDAsMCwwLDEuNjVsNi41'@;
put 'Myw0LjQ1YTEsMSwwLDEsMCwxLjEzLTEuNjVMOC4xMywxNy42MSwxMy40NSwxNEExLDEsMCwwLDAsMTMuNzEsMTIuNTlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMC4yMSwxNi43OGwtNi41My00LjQ1QTEs'@;
put 'MSwwLDEsMCwyMi41NSwxNGw1LjMyLDMuNjMtNS4zMiwzLjYzYTEsMSwwLDAsMCwxLjEzLDEuNjVsNi41My00LjQ1YTEsMSwwLDAsMCwwLTEuNjVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOS45NCw5Ljgz'@;
put 'YS45LjksMCwwLDAtMS4wOS42NkwxNS40MSwyNC4yOWEuOS45LDAsMCwwLC42NiwxLjA5bC4yMiwwYS45LjksMCwwLDAsLjg3LS42OGwzLjQ0LTEzLjgxQS45LjksMCwwLDAsMTkuOTQsOS44M1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPlxuICAgICAg'@;
put 'ICAgICAgPHBhdGggZD0iTTEzLjcxLDEyLjU5YTEsMSwwLDAsMC0xLjM5LS4yNkw1Ljc5LDE2Ljc4YTEsMSwwLDAsMCwwLDEuNjVsNi41Myw0LjQ1YTEsMSwwLDEsMCwxLjEzLTEuNjVMOC4xMywxNy42MSwxMy40NSwxNEExLDEsMCwwLDAsMTMuNzEsMTIuNTlaIiBjbGFzcz0iY2xyLWktb3V0'@;
put 'bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOC41NiwxMS42MiwxNS40MSwyNC4yOWEuOS45LDAsMCwwLC42NiwxLjA5bC4yMiwwYS45LjksMCwwLDAsLjg3LS42OEwxOS43MywxNC40YTMuNTksMy41OSwwLDAs'@;
put 'MS0xLjE2LTIuNzlaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMC4yMSwxNi43OGwtMi0xLjM4SDI0LjY0bDMuMjQsMi4yMS01LjMyLDMuNjNhMSwxLDAsMCwwLDEuMTMsMS42'@;
put 'NWw2LjUzLTQuNDVhMSwxLDAsMCwwLDAtMS42NVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMz'@;
put 'LjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIGNsci1pLWFsZXJ0IiAvPlxuICAgICAgICAgICAgPHBhdGgg'@;
put 'ZD0iTTEzLjcxLDEyLjU5YTEsMSwwLDAsMC0xLjM5LS4yNkw1Ljc5LDE2Ljc4YTEsMSwwLDAsMCwwLDEuNjVsNi41Myw0LjQ1YTEsMSwwLDEsMCwxLjEzLTEuNjVMOC4xMywxNy42MSwxMy40NSwxNEExLDEsMCwwLDAsMTMuNzEsMTIuNTlaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2Vk'@;
put 'IGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAuMjEsMTYuNzhsLTYuNTMtNC40NUExLDEsMCwxLDAsMjIuNTUsMTRsNS4zMiwzLjYzLTUuMzIsMy42M2ExLDEsMCwwLDAsMS4xMywxLjY1bDYuNTMtNC40NWExLDEsMCwwLDAsMC0xLjY1'@;
put 'WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE5Ljk0LDkuODNhLjkuOSwwLDAsMC0xLjA5LjY2TDE1LjQxLDI0LjI5YS45LjksMCwwLDAsLjY2LDEuMDlsLjIyLDBhLjkuOSwwLDAs'@;
put 'MCwuODctLjY4bDMuNDQtMTMuODFBLjkuOSwwLDAsMCwxOS45NCw5LjgzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLW91'@;
put 'dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPlxuICAgICAgICAnKSx5LkNsclNoYXBlQXBwbGljYXRpb249KDAsZy5jbHJJY29uU1ZHKSgnPHJlY3QgeD0iNSIgeT0iNyIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91'@;
put 'dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSI5IiB5PSI3IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjEzIiB5PSI3IiB3aWR0'@;
put 'aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMiw0SDRBMiwyLDAsMCwwLDIsNlYzMGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWNkEyLDIsMCwwLDAsMzIsNFpNNCw2SDMy'@;
put 'djQuMkg0Wk00LDMwVjExLjhIMzJWMzBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMiw0SDRBMiwyLDAsMCwwLDIsNlYzMGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWNkEyLDIsMCwwLDAsMzIs'@;
put 'NFptMCw2LjJINFY2SDMyWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjUiIHk9IjciIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+XG4gICAgICAgICAg'@;
put 'ICA8cmVjdCB4PSI5IiB5PSI3IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTMiIHk9IjciIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xp'@;
put 'ZC1wYXRoLTQiIC8+XG4gICAgICAgICcpLHkuQ2xyU2hhcGVCYXR0ZXJ5PSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOC41OSwxMS43N2ExLDEsMCwwLDAtMS43MywxbDIuNSw0LjM0LTYuMDctMSw1LjI5LDEwLjU5YTEsMSwwLDAsMCwxLjc5LS44OWwtMy41My03LjA4LDYuMzgsMS4w'@;
put 'NloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI1LjEyLDRIMjNWMy41OEExLjU4LDEuNTgsMCwwLDAsMjEuNDIsMkgxNC41OEExLjU4LDEuNTgsMCwwLDAsMTMsMy41OFY0SDEwLjg4QTEuODgsMS44OCwwLDAs'@;
put 'MCw5LDUuODhWMzIuMTJBMS44OCwxLjg4LDAsMCwwLDEwLjg4LDM0SDI1LjEyQTEuODgsMS44OCwwLDAsMCwyNywzMi4xMlY1Ljg4QTEuODgsMS44OCwwLDAsMCwyNS4xMiw0Wk0yNSwzMkgxMVY2aDRWNGg2VjZoNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0y'@;
put 'IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LjU5LDExLjc3YTEsMSwwLDAsMC0xLjczLDFsMi41LDQuMzQtNi4wNy0xLDUuMjksMTAuNTlhMSwxLDAsMCwwLDEuNzktLjg5bC0zLjUzLTcuMDgsNi4zOCwxLjA2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0'@;
put 'bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiAg'@;
put 'Y2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjUsMTUuNFYzMkgxMVY2aDRWNGg2VjZoLjI4bDEuNjQtMi44NUExLjU3LDEuNTcsMCwwLDAsMjEuNDIsMkgxNC41'@;
put 'OEExLjU4LDEuNTgsMCwwLDAsMTMsMy41OFY0SDEwLjg4QTEuODgsMS44OCwwLDAsMCw5LDUuODhWMzIuMTJBMS44OCwxLjg4LDAsMCwwLDEwLjg4LDM0SDI1LjEyQTEuODgsMS44OCwwLDAsMCwyNywzMi4xMlYxNS40WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0'@;
put 'bGluZS1wYXRoLTMtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiICBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJN'@;
put 'MTguNTksMTEuNzdhMSwxLDAsMCwwLTEuNzMsMWwyLjUsNC4zNC02LjA3LTEsNS4yOSwxMC41OWExLDEsMCwwLDAsMS43OS0uODlsLTMuNTMtNy4wOCw2LjM4LDEuMDZaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiIC8+XG4gICAg'@;
put 'ICAgICAgICA8cGF0aCBkPSJNMjUsMTEuNThWMzJIMTFWNmg0VjRoNlY2SDIyLjVBNy40Nyw3LjQ3LDAsMCwxLDIzLDMuMzgsMS41NywxLjU3LDAsMCwwLDIxLjQyLDJIMTQuNThBMS41OCwxLjU4LDAsMCwwLDEzLDMuNThWNEgxMC44OEExLjg4LDEuODgsMCwwLDAsOSw1Ljg4VjMyLjEyQTEu'@;
put 'ODgsMS44OCwwLDAsMCwxMC44OCwzNEgyNS4xMkExLjg4LDEuODgsMCwwLDAsMjcsMzIuMTJWMTIuODdBNy41LDcuNSwwLDAsMSwyNSwxMS41OFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRo'@;
put 'IGQ9Ik0yMiw0VjIuNjJBLjYuNiwwLDAsMCwyMS40MiwySDE0LjU4YS42LjYsMCwwLDAtLjU4LjYyVjRIMTBBMS4wOSwxLjA5LDAsMCwwLDksNS4wN3YyOEExLDEsMCwwLDAsMTAsMzRIMjZhMSwxLDAsMCwwLDEtLjk0di0yOEExLjA5LDEuMDksMCwwLDAsMjYsNFpNMjAuMjYsMjUuNDRhMS4y'@;
put 'LDEuMiwwLDAsMS0yLjE1LDEuMDdMMTIuNjUsMTUuNTZsNiwxLTIuMjktNGExLjIsMS4yLDAsMSwxLDIuMDgtMS4ybDQuODMsOC4zN0wxNi45LDE4LjdaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQs'@;
put 'MjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQgY2xy'@;
put 'LWktYWxlcnQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIuMjMsMTUuNEEzLjY2LDMuNjYsMCwwLDEsMjAuNTUsMTVsMi43Niw0Ljc5TDE2LjksMTguN2wzLjM2LDYuNzNhMS4yLDEuMiwwLDAsMS0yLjE1LDEuMDdMMTIuNjUsMTUuNTZsNiwxLTIuMjktNGExLjIsMS4yLDAsMSwxLDIu'@;
put 'MDgtMS4ybC4wOS4xNUEzLjY2LDMuNjYsMCwwLDEsMTksOS44OUwyMi40NSw0SDIyVjIuNjJBLjYuNiwwLDAsMCwyMS40MiwySDE0LjU4YS42LjYsMCwwLDAtLjU4LjYyVjRIMTBBMS4wOSwxLjA5LDAsMCwwLDksNS4wN3YyOEExLDEsMCwwLDAsMTAsMzRIMjZhMSwxLDAsMCwwLDEtLjk0VjE1'@;
put 'LjRaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQgY2xy'@;
put 'LWktYmFkZ2UiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIuNSw2YTcuNDksNy40OSwwLDAsMSwuMjgtMkgyMlYyLjYyQS42LjYsMCwwLDAsMjEuNDIsMkgxNC41OGEuNi42LDAsMCwwLS41OC42MlY0SDEwQTEuMDksMS4wOSwwLDAsMCw5LDUuMDd2MjhBMSwxLDAsMCwwLDEwLDM0SDI2'@;
put 'YTEsMSwwLDAsMCwxLS45NFYxMi44N0E3LjUsNy41LDAsMCwxLDIyLjUsNlpNMjAuMjYsMjUuNDRhMS4yLDEuMiwwLDAsMS0yLjE1LDEuMDdMMTIuNjUsMTUuNTZsNiwxLTIuMjktNGExLjIsMS4yLDAsMSwxLDIuMDgtMS4ybDQuODMsOC4zN0wxNi45LDE4LjdaIiBjbGFzcz0iY2xyLWktc29s'@;
put 'aWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCIgLz5cbiAgICAgICAgJykseS5DbHJTaGFwZU1vYmlsZT0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjUsNEgxMUEyLDIsMCwwLDAsOSw2VjMwYTIsMiwwLDAsMCwyLDJIMjVhMiwyLDAsMCwwLDItMlY2QTIsMiwwLDAs'@;
put 'MCwyNSw0Wk0xMSw2SDI1VjI0SDExWm0wLDI0VjI2SDI1djRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE3IiB5PSIyNyIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWkt'@;
put 'b3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjUsNEgxMUEyLDIsMCwwLDAsOSw2VjMwYTIsMiwwLDAsMCwyLDJIMjVhMiwyLDAsMCwwLDItMlY2QTIsMiwwLDAsMCwyNSw0Wk0xOSwzMEgxN1YyOGgyWm0tOC00VjZIMjVWMjZaIiBjbGFzcz0iY2xyLWktc29saWQg'@;
put 'Y2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAnKSx5LkNsclNoYXBlVGFibGV0PSgwLGcuY2xySWNvblNWRykoJzxyZWN0IHg9IjE3IiB5PSIyOSIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAg'@;
put 'ICAgICA8cGF0aCBkPSJNMzAsMkg2QTIsMiwwLDAsMCw0LDRWMzJhMiwyLDAsMCwwLDIsMkgzMGEyLDIsMCwwLDAsMi0yVjRBMiwyLDAsMCwwLDMwLDJabTAsMlYyNi4zOEg2VjRaTTYsMzJWMjhIMzB2NFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxu'@;
put 'ICAgICAgICAgICAgPHBhdGggZD0iTTMwLDJINkEyLDIsMCwwLDAsNCw0VjMyYTIsMiwwLDAsMCwyLDJIMzBhMiwyLDAsMCwwLDItMlY0QTIsMiwwLDAsMCwzMCwyWk0xOSwzMkgxN1YzMGgyWk02LDI4VjRIMzBWMjhaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAv'@;
put 'PlxuICAgICAgICAnKSx5LkNsclNoYXBlTmV0d29ya0dsb2JlPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yNi41OCwzMmgtMThhMSwxLDAsMSwwLDAsMmgxOGExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAg'@;
put 'ICAgICA8cGF0aCBkPSJNMTcuNzUsMmExNCwxNCwwLDAsMC0xNCwxNGMwLC40NSwwLC44OS4wNywxLjMzbDAsMGgwQTE0LDE0LDAsMSwwLDE3Ljc1LDJabTAsMmExMiwxMiwwLDAsMSw4LjQ0LDMuNDhjMCwuMzMsMCwuNjYsMCwxQTE4LjUxLDE4LjUxLDAsMCwwLDE0LDguNTNhMi4zMywyLjMz'@;
put 'LDAsMCwwLTEuMTQtLjYxbC0uMjUsMGMtLjEyLS40Mi0uMjMtLjg0LS4zMi0xLjI3cy0uMTQtLjgxLS4xOS0xLjIyQTExLjkyLDExLjkyLDAsMCwxLDE3Ljc1LDRabS0zLDUuODdBMTcsMTcsMCwwLDEsMjUuOTIsMTBhMTYuOSwxNi45LDAsMCwxLTMuMTEsNywyLjI4LDIuMjgsMCwwLDAtMi41'@;
put 'OC41N2MtLjM1LS4yLS43LS40LTEtLjYzYTE2LDE2LDAsMCwxLTQuOTMtNS4yMywyLjI1LDIuMjUsMCwwLDAsLjQ3LTEuNzdabS00LTMuNmMwLC4yMS4wNi40My4xLjY0LjA5LjQ0LjIxLjg3LjMzLDEuM2EyLjI4LDIuMjgsMCwwLDAtMS4xLDIuMjVBMTguMzIsMTguMzIsMCwwLDAsNS45LDE0'@;
put 'LjIyLDEyLDEyLDAsMCwxLDEwLjc2LDYuMjdabTAsMTUuNzFBMi4zNCwyLjM0LDAsMCwwLDkuMiwyMy43NGwtLjY0LDBBMTEuOTQsMTEuOTQsMCwwLDEsNS44LDE2LjkybC4xMS0uMTlhMTYuOSwxNi45LDAsMCwxLDQuODEtNC44OSwyLjMxLDIuMzEsMCwwLDAsMi4yOC42MywxNy41MywxNy41'@;
put 'MywwLDAsMCw1LjM1LDUuNjVjLjQxLjI3LjgzLjUyLDEuMjUuNzZBMi4zMiwyLjMyLDAsMCwwLDE5Ljc4LDIwYTE2Ljk0LDE2Ljk0LDAsMCwxLTYuMiwzLjExQTIuMzQsMi4zNCwwLDAsMCwxMC43NiwyMlptNyw2YTExLjkyLDExLjkyLDAsMCwxLTUuODEtMS41MWwuMjgtLjA2YTIuMzQsMi4z'@;
put 'NCwwLDAsMCwxLjU3LTEuNzksMTguNDMsMTguNDMsMCwwLDAsNy0zLjUsMi4yOSwyLjI5LDAsMCwwLDMtLjYyLDE3LjQxLDE3LjQxLDAsMCwwLDQuMzIuNTZsLjUzLDBBMTIsMTIsMCwwLDEsMTcuNzUsMjhabTYuNTEtOC45YTIuMzMsMi4zMywwLDAsMC0uMzMtMS4xOSwxOC40LDE4LjQsMCww'@;
put 'LDAsMy4zOS03LjM3cS43NS4zNSwxLjQ4Ljc4YTEyLDEyLDAsMCwxLC40Miw4LjJBMTYsMTYsMCwwLDEsMjQuMjcsMTkuMTFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi41OCwzMmgtMThhMSwxLDAsMSww'@;
put 'LDAsMmgxOGExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzEuNzMsMTUuNGgtMmMwLC4yLDAsLjQsMCwuNjFhMTIsMTIsMCwwLDEtLjUzLDMuNTIsMTYs'@;
put 'MTYsMCwwLDEtNS0uNDEsMi4zMywyLjMzLDAsMCwwLS4zMy0xLjE5LDE4Ljg3LDE4Ljg3LDAsMCwwLDEuNjItMi41MkgyMy44M2ExNy4yOSwxNy4yOSwwLDAsMS0xLDEuNTQsMi4yOCwyLjI4LDAsMCwwLTIuNTguNTdjLS4zNS0uMi0uNy0uNC0xLS42M2ExNiwxNiwwLDAsMS00LjkzLTUuMjMs'@;
put 'Mi4yNSwyLjI1LDAsMCwwLC40Ny0xLjc3QTE3LjA4LDE3LjA4LDAsMCwxLDE5LjU2LDlsLjg3LTEuNTFhMTguNTksMTguNTksMCwwLDAtNi4zOSwxLDIuMzMsMi4zMywwLDAsMC0xLjE0LS42MWwtLjI1LDBjLS4xMi0uNDItLjIzLS44NC0uMzItMS4yN3MtLjE0LS44MS0uMTktMS4yMkExMS44'@;
put 'OCwxMS44OCwwLDAsMSwyMiw0Ljc5TDIzLDNBMTQsMTQsMCwwLDAsMy43NSwxNmMwLC40NSwwLC44OS4wNywxLjMzbDAsMGgwQTE0LDE0LDAsMCwwLDMxLjc2LDE2QzMxLjc2LDE1LjgsMzEuNzQsMTUuNiwzMS43MywxNS40Wm0tMjEtOS4xM2MwLC4yMS4wNi40My4xLjY0LjA5LjQ0LjIxLjg3'@;
put 'LjMzLDEuM2EyLjI4LDIuMjgsMCwwLDAtMS4xLDIuMjVBMTguMzIsMTguMzIsMCwwLDAsNS45LDE0LjIyLDEyLDEyLDAsMCwxLDEwLjc2LDYuMjdabTAsMTUuNzFBMi4zNCwyLjM0LDAsMCwwLDkuMiwyMy43NGwtLjY0LDBBMTEuOTQsMTEuOTQsMCwwLDEsNS44LDE2LjkybC4xMS0uMTlhMTYu'@;
put 'OSwxNi45LDAsMCwxLDQuODEtNC44OSwyLjMxLDIuMzEsMCwwLDAsMi4yOC42MywxNy41MywxNy41MywwLDAsMCw1LjM1LDUuNjVjLjQxLjI3LjgzLjUyLDEuMjUuNzZBMi4zMiwyLjMyLDAsMCwwLDE5Ljc4LDIwYTE2Ljk0LDE2Ljk0LDAsMCwxLTYuMiwzLjExQTIuMzQsMi4zNCwwLDAsMCwx'@;
put 'MC43NiwyMlptNyw2YTExLjkyLDExLjkyLDAsMCwxLTUuODEtMS41MWwuMjgtLjA2YTIuMzQsMi4zNCwwLDAsMCwxLjU3LTEuNzksMTguNDMsMTguNDMsMCwwLDAsNy0zLjUsMi4yOSwyLjI5LDAsMCwwLDMtLjYyLDE3LjQxLDE3LjQxLDAsMCwwLDQuMzIuNTZsLjUzLDBBMTIsMTIsMCwwLDEs'@;
put 'MTcuNzUsMjhaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAs'@;
put 'MzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiICBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCBjbHItaS1hbGVydCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi41OCwzMmgtMThhMSwx'@;
put 'LDAsMSwwLDAsMmgxOGExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMxLjUsMTMuMzVhNy41NCw3LjU0LDAsMCwxLTEuNS4xNWwtLjUxLDBhMTEuOTEsMTEu'@;
put 'OTEsMCwwLDEtLjI1LDYsMTYsMTYsMCwwLDEtNS0uNDEsMi4zMywyLjMzLDAsMCwwLS4zMy0xLjE5LDE4LjU5LDE4LjU5LDAsMCwwLDIuNzgtNS4xOCw3LjQ5LDcuNDksMCwwLDEtMS4zMS0uODIsMTcsMTcsMCwwLDEtMi42MSw1LDIuMjgsMi4yOCwwLDAsMC0yLjU4LjU3Yy0uMzUtLjItLjct'@;
put 'LjQtMS0uNjNhMTYsMTYsMCwwLDEtNC45My01LjIzLDIuMjUsMi4yNSwwLDAsMCwuNDctMS43NywxNywxNywwLDAsMSw4LjUzLS42Miw3LjQzLDcuNDMsMCwwLDEtLjU2LTEuNTlBMTguNTYsMTguNTYsMCwwLDAsMTQsOC41M2EyLjMzLDIuMzMsMCwwLDAtMS4xNC0uNjFsLS4yNSwwYy0uMTIt'@;
put 'LjQyLS4yMy0uODQtLjMyLTEuMjdzLS4xNC0uODEtLjE5LTEuMjJBMTEuOTIsMTEuOTIsMCwwLDEsMjIuNTcsNWE3LjQ1LDcuNDUsMCwwLDEsLjUzLTJBMTQsMTQsMCwwLDAsMy43NSwxNmMwLC40NSwwLC44OS4wNywxLjMzbDAsMGgwYTE0LDE0LDAsMSwwLDI3LjY4LTRaTTEwLjc2LDYuMjdj'@;
put 'MCwuMjEuMDYuNDMuMS42NC4wOS40NC4yMS44Ny4zMywxLjNhMi4yOCwyLjI4LDAsMCwwLTEuMSwyLjI1QTE4LjMyLDE4LjMyLDAsMCwwLDUuOSwxNC4yMiwxMiwxMiwwLDAsMSwxMC43Niw2LjI3Wm0wLDE1LjcxQTIuMzQsMi4zNCwwLDAsMCw5LjIsMjMuNzRsLS42NCwwQTExLjk0LDExLjk0'@;
put 'LDAsMCwxLDUuOCwxNi45MmwuMTEtLjE5YTE2LjksMTYuOSwwLDAsMSw0LjgxLTQuODksMi4zMSwyLjMxLDAsMCwwLDIuMjguNjMsMTcuNTMsMTcuNTMsMCwwLDAsNS4zNSw1LjY1Yy40MS4yNy44My41MiwxLjI1Ljc2QTIuMzIsMi4zMiwwLDAsMCwxOS43OCwyMGExNi45NCwxNi45NCwwLDAs'@;
put 'MS02LjIsMy4xMUEyLjM0LDIuMzQsMCwwLDAsMTAuNzYsMjJabTcsNmExMS45MiwxMS45MiwwLDAsMS01LjgxLTEuNTFsLjI4LS4wNmEyLjM0LDIuMzQsMCwwLDAsMS41Ny0xLjc5LDE4LjQzLDE4LjQzLDAsMCwwLDctMy41LDIuMjksMi4yOSwwLDAsMCwzLS42MiwxNy40MSwxNy40MSwwLDAs'@;
put 'MCw0LjMyLjU2bC41MywwQTEyLDEyLDAsMCwxLDE3Ljc1LDI4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLW91dGxpbmUt'@;
put 'LWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2LjU4LDMyaC0xOGExLDEsMCwxLDAsMCwyaDE4YTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxu'@;
put 'ICAgICAgICAgICAgPHBhdGggZD0iTTE0LjcyLDkuODdhMi4yNSwyLjI1LDAsMCwxLS40NywxLjc3LDE2LDE2LDAsMCwwLDQuOTMsNS4yM2MuMzQuMjMuNjkuNDMsMSwuNjNhMi4yOCwyLjI4LDAsMCwxLDIuNTgtLjU3LDE2LjksMTYuOSwwLDAsMCwzLjExLTdBMTcsMTcsMCwwLDAsMTQuNzIs'@;
put 'OS44N1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTcuNzUsMmExNCwxNCwwLDAsMC0xNCwxNGMwLC40NSwwLC44OS4wNywxLjMzbDAsMGgwQTE0LDE0LDAsMSwwLDE3Ljc1LDJaTTI4LjEsMjEuMDlhMTcuNDEsMTcu'@;
put 'NDEsMCwwLDEtNC4zMi0uNTYsMi4yOSwyLjI5LDAsMCwxLTMsLjYyLDE4LjQzLDE4LjQzLDAsMCwxLTcsMy41LDIuMzQsMi4zNCwwLDAsMS0xLjU3LDEuNzlsLS4yOS4wNmExMS45MywxMS45MywwLDAsMS0zLjM5LTIuOGwuNjYsMGEyLjMzLDIuMzMsMCwwLDEsNC4zNy0uNThBMTYuOTQsMTYu'@;
put 'OTQsMCwwLDAsMTkuNzgsMjBhMi4zMiwyLjMyLDAsMCwxLS4xOC0xLjE3Yy0uNDItLjI0LS44NC0uNDktMS4yNS0uNzZBMTcuNTMsMTcuNTMsMCwwLDEsMTMsMTIuNDdhMi4zMSwyLjMxLDAsMCwxLTIuMjgtLjYzLDI3LjMxLDI3LjMxLDAsMCwwLTUsNC43NGMwLS4yLDAtLjM5LDAtLjU3YTEy'@;
put 'LDEyLDAsMCwxLC4xNC0xLjczLDE4Ljc1LDE4Ljc1LDAsMCwxLDQuMi0zLjgsMi4yOCwyLjI4LDAsMCwxLDEuMS0yLjI1Yy0uMTItLjQzLS4yNC0uODYtLjMzLTEuMywwLS4xNCwwLS4yOS0uMTEtLjY0YTEyLDEyLDAsMCwxLDEuMzctLjg3Yy4xLjU5LjE0LjkuMjEsMS4yMXMuMi44NS4zMiwx'@;
put 'LjI3bC4yNSwwQTIuMzMsMi4zMywwLDAsMSwxNCw4LjUzYTE4LjUxLDE4LjUxLDAsMCwxLDEyLjExLS4wN2MwLS4zMiwwLS42NSwwLTFoMGExMiwxMiwwLDAsMSwyLjYyLDMuODVoMHEtLjczLS40My0xLjQ4LS43OGExOC40LDE4LjQsMCwwLDEtMy4zOSw3LjM3LDIuMzMsMi4zMywwLDAsMSwu'@;
put 'MzMsMS4xOSwyMiwyMiwwLDAsMCw1LC40NSwxMS44OCwxMS44OCwwLDAsMS0uNjEsMS41M1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuNTgsMzJoLTE4YTEsMSwwLDEsMCwwLDJoMThhMSwxLDAsMCwwLDAtMloi'@;
put 'IGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzEuNzMsMTUuNEgyNS41NmExOC44NywxOC44NywwLDAsMS0xLjYyLDIuNTIsMi4zMywyLjMzLDAsMCwxLC4zMywxLjE5LDIyLDIyLDAsMCww'@;
put 'LDUsLjQ1LDExLjg4LDExLjg4LDAsMCwxLS42MSwxLjUzSDI4LjFhMTcuNDEsMTcuNDEsMCwwLDEtNC4zMi0uNTYsMi4yOSwyLjI5LDAsMCwxLTMsLjYyLDE4LjQzLDE4LjQzLDAsMCwxLTcsMy41LDIuMzQsMi4zNCwwLDAsMS0xLjU3LDEuNzlsLS4yOS4wNmExMS45MywxMS45MywwLDAsMS0z'@;
put 'LjM5LTIuOGwuNjYsMGEyLjMzLDIuMzMsMCwwLDEsNC4zNy0uNThBMTYuOTQsMTYuOTQsMCwwLDAsMTkuNzgsMjBhMi4zMiwyLjMyLDAsMCwxLS4xOC0xLjE3Yy0uNDItLjI0LS44NC0uNDktMS4yNS0uNzZBMTcuNTMsMTcuNTMsMCwwLDEsMTMsMTIuNDdhMi4zMSwyLjMxLDAsMCwxLTIuMjgt'@;
put 'LjYzLDI3LjMxLDI3LjMxLDAsMCwwLTUsNC43NGMwLS4yLDAtLjM5LDAtLjU3YTEyLDEyLDAsMCwxLC4xNC0xLjczLDE4Ljc1LDE4Ljc1LDAsMCwxLDQuMi0zLjgsMi4yOCwyLjI4LDAsMCwxLDEuMS0yLjI1Yy0uMTItLjQzLS4yNC0uODYtLjMzLTEuMywwLS4xNCwwLS4yOS0uMTEtLjY0YTEy'@;
put 'LDEyLDAsMCwxLDEuMzctLjg3Yy4xLjU5LjE0LjkuMjEsMS4yMXMuMi44NS4zMiwxLjI3bC4yNSwwQTIuMzMsMi4zMywwLDAsMSwxNCw4LjUzYTE4LjU5LDE4LjU5LDAsMCwxLDYuMzktMUwyMywzQTE0LDE0LDAsMCwwLDMuNzUsMTZjMCwuNDUsMCwuODkuMDcsMS4zM2wwLDBoMEExNCwxNCww'@;
put 'LDAsMCwzMS43NiwxNkMzMS43NiwxNS44LDMxLjc0LDE1LjYsMzEuNzMsMTUuNFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTQuMjYsMTEuNjRhMTYsMTYsMCwwLDAsNC45Myw1LjIz'@;
put 'Yy4zNC4yMy42OS40MywxLC42M2EyLjI4LDIuMjgsMCwwLDEsMi41OC0uNTcsMTcuMjksMTcuMjksMCwwLDAsMS0xLjU0aC0xLjZBMy42OCwzLjY4LDAsMCwxLDE5LDkuODlMMTkuNTYsOWExNy4wOCwxNy4wOCwwLDAsMC00Ljg0Ljg4LDIuMjUsMi4yNSwwLDAsMS0uNDcsMS43N1oiIGNsYXNz'@;
put 'PSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRB'@;
put 'MS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiAgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtNC0tYWxlcnRlZCBjbHItaS1hbGVydCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi41OCwzMmgtMThhMSwxLDAsMSwwLDAsMmgxOGExLDEsMCwwLDAs'@;
put 'MC0yWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMS41LDEzLjM1YTcuNTQsNy41NCwwLDAsMS0xLjUuMTUsNy40Niw3LjQ2LDAsMCwxLTMuMjgtLjc2LDE4LjU5LDE4LjU5LDAsMCwxLTIu'@;
put 'NzgsNS4xOCwyLjMzLDIuMzMsMCwwLDEsLjMzLDEuMTksMjIsMjIsMCwwLDAsNSwuNDUsMTEuODgsMTEuODgsMCwwLDEtLjYxLDEuNTNIMjguMWExNy40MSwxNy40MSwwLDAsMS00LjMyLS41NiwyLjI5LDIuMjksMCwwLDEtMywuNjIsMTguNDMsMTguNDMsMCwwLDEtNywzLjUsMi4zNCwyLjM0'@;
put 'LDAsMCwxLTEuNTcsMS43OWwtLjI5LjA2YTExLjkzLDExLjkzLDAsMCwxLTMuMzktMi44bC42NiwwYTIuMzMsMi4zMywwLDAsMSw0LjM3LS41OEExNi45NCwxNi45NCwwLDAsMCwxOS43OCwyMGEyLjMyLDIuMzIsMCwwLDEtLjE4LTEuMTdjLS40Mi0uMjQtLjg0LS40OS0xLjI1LS43NkExNy41'@;
put 'MywxNy41MywwLDAsMSwxMywxMi40N2EyLjMxLDIuMzEsMCwwLDEtMi4yOC0uNjMsMjcuMzEsMjcuMzEsMCwwLDAtNSw0Ljc0YzAtLjIsMC0uMzksMC0uNTdhMTIsMTIsMCwwLDEsLjE0LTEuNzMsMTguNzUsMTguNzUsMCwwLDEsNC4yLTMuOCwyLjI4LDIuMjgsMCwwLDEsMS4xLTIuMjVjLS4x'@;
put 'Mi0uNDMtLjI0LS44Ni0uMzMtMS4zLDAtLjE0LDAtLjI5LS4xMS0uNjRhMTIsMTIsMCwwLDEsMS4zNy0uODdjLjEuNTkuMTQuOS4yMSwxLjIxcy4yLjg1LjMyLDEuMjdsLjI1LDBBMi4zMywyLjMzLDAsMCwxLDE0LDguNTNhMTguNTYsMTguNTYsMCwwLDEsOC42NS0uODcsNy40NSw3LjQ1LDAs'@;
put 'MCwxLC40MS00LjU5QTE0LDE0LDAsMCwwLDMuNzUsMTZjMCwuNDUsMCwuODkuMDcsMS4zM2wwLDBoMGExNCwxNCwwLDEsMCwyNy42OC00WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNC43'@;
put 'Miw5Ljg3YTIuMjUsMi4yNSwwLDAsMS0uNDcsMS43NywxNiwxNiwwLDAsMCw0LjkzLDUuMjNjLjM0LjIzLjY5LjQzLDEsLjYzYTIuMjgsMi4yOCwwLDAsMSwyLjU4LS41NywxNywxNywwLDAsMCwyLjYxLTUsNy41Miw3LjUyLDAsMCwxLTIuMTYtMi42N0ExNywxNywwLDAsMCwxNC43Miw5Ljg3'@;
put 'WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC00LS1iYWRnZWQgY2xyLWktYmFk'@;
put 'Z2UiLz5cbiAgICAgICAgJykseS5DbHJTaGFwZU5ldHdvcmtTZXR0aW5ncz0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTAuODUsMjcuNDRhMi4yOSwyLjI5LDAsMCwwLDEuNzQtMS42OGMuNTQtLjE0LDEuMDYtLjMyLDEuNTktLjUxdi0xLjJhMi43NywyLjc3LDAsMCwxLC4wNi0uNTEs'@;
put 'MTcuNDQsMTcuNDQsMCwwLDEtMS44Mi42MiwyLjI4LDIuMjgsMCwwLDAtNC4yOC42M2wtLjQ1LDBoMGExMS45MywxMS45MywwLDAsMS0yLjg4LTcuMjcsMTcuNzksMTcuNzksMCwwLDEsNS00LjcyLDIuMjMsMi4yMywwLDAsMCwyLjI5LjU2LDE4LjUyLDE4LjUyLDAsMCwwLDQuNDcsNSwyLjc0'@;
put 'LDIuNzQsMCwwLDEsLjIxLS4yNGwuOTUtLjkxYTE2LjksMTYuOSwwLDAsMS00LjM1LTQuNzksMi4yNywyLjI3LDAsMCwwLC4zNS0xLjJjMC0uMDcsMC0uMTQsMC0uMjJBMTcuNjksMTcuNjksMCwwLDEsMjUsMTFhMTcuNDksMTcuNDksMCwwLDEtMS4xNSwzLjM0bC4xOSwwaDEuNTZhMTksMTks'@;
put 'MCwwLDAsLjkxLTIuNzJjLjQzLjE5Ljg0LjQxLDEuMjYuNjRhMTEuOTQsMTEuOTQsMCwwLDEsMSw0LjA5bDAsMEEyLjc3LDIuNzcsMCwwLDEsMzAsMTZhMi43MywyLjczLDAsMCwxLC42OC4xQTE0LDE0LDAsMSwwLDE2LjA4LDMxYTIuNzIsMi43MiwwLDAsMSwwLTJBMTEuOTMsMTEuOTMsMCww'@;
put 'LDEsMTAuODUsMjcuNDRaTTE2Ljc2LDVhMTIsMTIsMCwwLDEsOC42MSwzLjY2YzAsLjI1LDAsLjUxLS4wOC43NmExOS4yMSwxOS4yMSwwLDAsMC0xMi4zNS4xMUEyLjI4LDIuMjgsMCwwLDAsMTEuNzQsOWExNywxNywwLDAsMS0uNjEtMi41M0ExMS45MiwxMS45MiwwLDAsMSwxNi43Niw1Wk05'@;
put 'LjY2LDcuMzZhMTguNzIsMTguNzIsMCwwLDAsLjQ5LDEuOTIsMi4yOCwyLjI4LDAsMCwwLTEuMDcsMS45M3MwLC4xLDAsLjE1QTE5LjQ1LDE5LjQ1LDAsMCwwLDUsMTQuNzksMTIsMTIsMCwwLDEsOS42Niw3LjM2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEi'@;
put 'IC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjUsMjEuMTlBMy44NCwzLjg0LDAsMSwwLDI4Ljg4LDI1LDMuODcsMy44NywwLDAsMCwyNSwyMS4xOVptMCw2LjA4QTIuMjQsMi4yNCwwLDEsMSwyNy4yOCwyNSwyLjI2LDIuMjYsMCwwLDEsMjUsMjcuMjdaIiBjbGFzcz0iY2xyLWktb3V0bGlu'@;
put 'ZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zNC4xNywyNC4xNGExLjE0LDEuMTQsMCwwLDAtLjctMS4xbC0xLjU2LS40NnEtLjExLS4zMi0uMjYtLjYzbC43Mi0xLjMzYTEuMTQsMS4xNCwwLDAsMC0uMjEtMS4zNGwtMS4zNC0xLjMyYTEuMTQsMS4x'@;
put 'NCwwLDAsMC0xLjM0LS4ybC0xLjM0LjcxYTcuMjgsNy4yOCwwLDAsMC0uNjctLjI4TDI3LDE2LjcxYTEuMTQsMS4xNCwwLDAsMC0xLjA4LS43NkgyNGExLjE0LDEuMTQsMCwwLDAtMS4wOC44bC0uNDQsMS40M2E3LjMyLDcuMzIsMCwwLDAtLjY4LjI4bC0xLjMyLS43YTEuMTQsMS4xNCwwLDAs'@;
put 'MC0xLjMzLjE5bC0xLjM3LDEuMzFhMS4xNCwxLjE0LDAsMCwwLS4yMSwxLjM1bC43LDEuMjhxLS4xNi4zMi0uMjguNjVMMTYuNTgsMjNhMS4xMywxLjEzLDAsMCwwLS44MSwxLjA5djEuODdBMS4xNCwxLjE0LDAsMCwwLDE2LjU5LDI3bDEuNDcuNDRxLjEyLjMyLjI4LjY0bC0uNzIsMS4zNWEx'@;
put 'LjE0LDEuMTQsMCwwLDAsLjIsMS4zNWwxLjM0LDEuMzJhMS4xNCwxLjE0LDAsMCwwLDEuMzQuMmwxLjM3LS43MnEuMzEuMTQuNjMuMjZsLjQ0LDEuNDdhMS4xNCwxLjE0LDAsMCwwLDEuMDkuOGgxLjlBMS4xNCwxLjE0LDAsMCwwLDI3LDMzLjMxbC40NC0xLjQ3Yy4yMS0uMDcuNDItLjE2LjYy'@;
put 'LS4yNWwxLjM4LjczYTEuMTQsMS4xNCwwLDAsMCwxLjMzLS4ybDEuMzQtMS4zMmExLjE0LDEuMTQsMCwwLDAsLjIxLTEuMzVsLS43My0xLjM0cS4xNC0uMy4yNS0uNmwxLjUtLjQ0QTEuMTMsMS4xMywwLDAsMCwzNC4xNywyNlptLTEuNiwxLjUtMiwuNTgtLjEyLjQyQTUuNTUsNS41NSwwLDAs'@;
put 'MSwzMCwyNy43M2wtLjIxLjM4LDEsMS43OS0uODYuODQtMS44Mi0xLS4zNy4yYTUuNzgsNS43OCwwLDAsMS0xLjEyLjQ2bC0uNDIuMTItLjU5LDJIMjQuMzhsLS41OS0xLjk1LS40Mi0uMTJBNS44Niw1Ljg2LDAsMCwxLDIyLjI0LDMwbC0uMzctLjItMS44MSwxLS44Ni0uODUsMS0xLjgyLS4y'@;
put 'Mi0uMzhhNS42LDUuNiwwLDAsMS0uNDktMS4xM2wtLjEzLS40MS0xLjk1LS41OFYyNC40MmwxLjk0LS41OC4xMi0uNDFhNS41Myw1LjUzLDAsMCwxLC40OS0xLjE0bC4yMi0uMzktMS0xLjczLjg3LS44NCwxLjc3Ljk0LjM4LS4yMWE1LjgsNS44LDAsMCwxLDEuMTctLjQ5bC40MS0uMTIuNTkt'@;
put 'MS45MWgxLjIzbC41OCwxLjkuNDEuMTJhNS43OSw1Ljc5LDAsMCwxLDEuMTYuNDhsLjM4LjIxLDEuOC0uOTUuODYuODUtMSwxLjc3LjIxLjM4YTUuNTMsNS41MywwLDAsMSwuNDcsMS4xM2wuMTIuNDIsMS45My41N1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0z'@;
put 'IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTM0LDIzLjYzLDMyLDIzYTcuMDYsNy4wNiwwLDAsMC0uNTgtMS40MWwxLTEuODZhLjM3LjM3LDAsMCwwLS4wNy0uNDRMMzAuOSwxNy44NmEuMzcuMzcsMCwwLDAtLjQ0LS4wN2wtMS44NSwxYTcsNywwLDAsMC0xLjQzLS42MWwtLjYxLTJhLjM3'@;
put 'LjM3LDAsMCwwLS4zNi0uMjVoLTJhLjM3LjM3LDAsMCwwLS4zNS4yNmwtLjYxLDJhNyw3LDAsMCwwLTEuNDQuNjFMMjAsMTcuOGEuMzcuMzcsMCwwLDAtLjQ0LjA3TDE4LDE5LjMxYS4zNy4zNywwLDAsMC0uMDcuNDRsMSwxLjgyQTcsNywwLDAsMCwxOC4zNSwyM2wtMiwuNjFhLjM3LjM3LDAs'@;
put 'MCwwLS4yNi4zNXYyYS4zNy4zNywwLDAsMCwuMjYuMzVsMiwuNjFBNyw3LDAsMCwwLDE5LDI4LjM3bC0xLDEuOWEuMzcuMzcsMCwwLDAsLjA3LjQ0bDEuNDUsMS40NWEuMzcuMzcsMCwwLDAsLjQ0LjA3bDEuODctMWE3LjA2LDcuMDYsMCwwLDAsMS4zOS41N2wuNjEsMmEuMzcuMzcsMCwwLDAs'@;
put 'LjM1LjI2aDJhLjM3LjM3LDAsMCwwLC4zNS0uMjZsLjYxLTJhNyw3LDAsMCwwLDEuMzgtLjU3bDEuODksMWEuMzcuMzcsMCwwLDAsLjQ0LS4wN2wxLjQ1LTEuNDVhLjM3LjM3LDAsMCwwLC4wNy0uNDRsLTEtMS44OEE3LDcsMCwwLDAsMzEuOTUsMjdsMi0uNjFhLjM3LjM3LDAsMCwwLC4yNi0u'@;
put 'MzVWMjRBLjM3LjM3LDAsMCwwLDM0LDIzLjYzWm0tOC44Myw0LjcyQTMuMzMsMy4zMywwLDEsMSwyOC41MywyNSwzLjMzLDMuMzMsMCwwLDEsMjUuMTksMjguMzRaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTEwLjg1'@;
put 'LDI3LjQ0YTIuMjksMi4yOSwwLDAsMCwxLjc0LTEuNjgsMTkuNzEsMTkuNzEsMCwwLDAsMS44OS0uNlYyMy45NWEyLDIsMCwwLDEsLjA5LS41NSwxNy40MiwxNy40MiwwLDAsMS0yLjE3Ljc4LDIuMjgsMi4yOCwwLDAsMC00LjI4LjYzbC0uNDUsMGgwYTExLjkzLDExLjkzLDAsMCwxLTIuODgt'@;
put 'Ny4yNywxNy43OSwxNy43OSwwLDAsMSw1LTQuNzIsMi4yMywyLjIzLDAsMCwwLDIuMjkuNTYsMTguNTIsMTguNTIsMCwwLDAsNC42NSw1LjA5LDEuOTMsMS45MywwLDAsMSwuMjMtLjMybC44OS0uODdhMTYuODksMTYuODksMCwwLDEtNC40OS00Ljg5LDIuMjcsMi4yNywwLDAsMCwuMzUtMS4y'@;
put 'YzAtLjA3LDAtLjE0LDAtLjIyQTE3LjY5LDE3LjY5LDAsMCwxLDI1LDExYTE3LjQ5LDE3LjQ5LDAsMCwxLTEuMTUsMy4zNSwxLjk0LDEuOTQsMCwwLDEsLjMxLS4wNWgxLjQ1YTE5LjA2LDE5LjA2LDAsMCwwLC45LTIuN2MuNDMuMTkuODQuNDEsMS4yNi42NGExMS45MywxMS45MywwLDAsMSwx'@;
put 'LDQuNjNsMS0uNTFhMiwyLDAsMCwxLC45Mi0uMjNoLjA4QTE0LDE0LDAsMSwwLDE2LjQ0LDMxYTEuOTQsMS45NCwwLDAsMSwuMTItMS40NmwuMjgtLjUzaC0uMDdBMTEuOTEsMTEuOTEsMCwwLDEsMTAuODUsMjcuNDRaTTE2Ljc2LDVhMTIsMTIsMCwwLDEsOC42MSwzLjY2YzAsLjI1LDAsLjUx'@;
put 'LS4wOC43NmExOS4yMSwxOS4yMSwwLDAsMC0xMi4zNS4xMUEyLjI4LDIuMjgsMCwwLDAsMTEuNzQsOWExNywxNywwLDAsMS0uNjEtMi41M0ExMS45MiwxMS45MiwwLDAsMSwxNi43Niw1Wk05LjY2LDcuMzZhMTguNzIsMTguNzIsMCwwLDAsLjQ5LDEuOTIsMi4yOCwyLjI4LDAsMCwwLTEuMDcs'@;
put 'MS45M3MwLC4xLDAsLjE1QTE5LjQ1LDE5LjQ1LDAsMCwwLDUsMTQuNzksMTIsMTIsMCwwLDEsOS42Niw3LjM2WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz5cbiAgICAgICAgJykseS5DbHJTaGFwZU5ldHdvcmtTd2l0Y2g9KDAsZy5jbHJJY29uU1ZHKSgnPHBh'@;
put 'dGggZD0iTTMzLjkxLDE4LjQ3LDMwLjc4LDguNDFBMiwyLDAsMCwwLDI4Ljg3LDdINy4xM0EyLDIsMCwwLDAsNS4yMiw4LjQxTDIuMDksMTguNDhhMiwyLDAsMCwwLS4wOS41OVYyN2EyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMTkuMDZBMiwyLDAsMCwwLDMzLjkxLDE4LjQ3Wk0z'@;
put 'MiwyN0g0VjE5LjA2TDcuMTMsOUgyOC44N0wzMiwxOS4wNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iNy4xMiIgeT0iMjIiIHdpZHRoPSIxLjgiIGhlaWdodD0iMyIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xy'@;
put 'LWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMi4xMiIgeT0iMjIiIHdpZHRoPSIxLjgiIGhlaWdodD0iMyIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxNy4xMSIgeT0iMjIiIHdp'@;
put 'ZHRoPSIxLjgiIGhlaWdodD0iMyIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIyMi4xIiB5PSIyMiIgd2lkdGg9IjEuOCIgaGVpZ2h0PSIzIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgt'@;
put 'NSIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjI3LjEiIHk9IjIyIiB3aWR0aD0iMS44IiBoZWlnaHQ9IjMiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02IiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iNi4yMyIgeT0iMTgiIHdpZHRoPSIyMy42OSIgaGVpZ2h0'@;
put 'PSIxLjQiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC03IiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iNy4xMiIgeT0iMjIiIHdpZHRoPSIxLjgiIGhlaWdodD0iMyIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFs'@;
put 'ZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMi4xMiIgeT0iMjIiIHdpZHRoPSIxLjgiIGhlaWdodD0iMyIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxNy4xMSIgeT0i'@;
put 'MjIiIHdpZHRoPSIxLjgiIGhlaWdodD0iMyIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIyMi4xIiB5PSIyMiIgd2lkdGg9IjEuOCIgaGVpZ2h0PSIzIiBjbGFzcz0iY2xyLWktb3V0'@;
put 'bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjI3LjEiIHk9IjIyIiB3aWR0aD0iMS44IiBoZWlnaHQ9IjMiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC01LS1hbGVydGVk'@;
put 'IiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iNi4yMyIgeT0iMTgiIHdpZHRoPSIyMy42OSIgaGVpZ2h0PSIxLjQiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC02LS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjkxLDE4LjQ3'@;
put 'LDMzLDE1LjRIMzAuODZMMzIsMTkuMDZWMjdINFYxOS4wNkw3LjEzLDlIMTkuNTZsMS4xNS0ySDcuMTNBMiwyLDAsMCwwLDUuMjIsOC40MUwyLjA5LDE4LjQ4YTIsMiwwLDAsMC0uMDkuNTlWMjdhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjE5LjA2QTIsMiwwLDAsMCwzMy45MSwx'@;
put 'OC40N1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC03LS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43'@;
put 'OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC04LS1hbGVydGVkIGNsci1pLWFsZXJ0IiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iNy4xMiIgeT0iMjIiIHdpZHRoPSIx'@;
put 'LjgiIGhlaWdodD0iMyIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTIuMTIiIHk9IjIyIiB3aWR0aD0iMS44IiBoZWlnaHQ9IjMiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQg'@;
put 'Y2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE3LjExIiB5PSIyMiIgd2lkdGg9IjEuOCIgaGVpZ2h0PSIzIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiIC8+XG4gICAgICAgICAg'@;
put 'ICA8cmVjdCB4PSIyMi4xIiB5PSIyMiIgd2lkdGg9IjEuOCIgaGVpZ2h0PSIzIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIyNy4xIiB5PSIyMiIgd2lkdGg9IjEuOCIgaGVpZ2h0PSIz'@;
put 'IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC01LS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSI2LjIzIiB5PSIxOCIgd2lkdGg9IjIzLjY5IiBoZWlnaHQ9IjEuNCIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRs'@;
put 'aW5lLXBhdGgtNi0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjkxLDE4LjQ3bC0xLjY1LTUuMzJhNy40OSw3LjQ5LDAsMCwxLTIsLjMzTDMyLDE5LjA2VjI3SDRWMTkuMDZMNy4xMyw5aDE2YTcuNDUsNy40NSwwLDAsMS0uNTUtMkg3LjEzQTIsMiwwLDAsMCw1LjIyLDgu'@;
put 'NDFMMi4wOSwxOC40OGEyLDIsMCwwLDAtLjA5LjU5VjI3YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYxOS4wNkEyLDIsMCwwLDAsMzMuOTEsMTguNDdaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC03LS1iYWRnZWQiIC8+XG4gICAgICAg'@;
put 'ICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiICBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC04LS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuOTEsMTguNDcsMzAuNzgsOC40MUEyLDIsMCwwLDAs'@;
put 'MjguODcsN0g3LjEzQTIsMiwwLDAsMCw1LjIyLDguNDFMMi4wOSwxOC40OGEyLDIsMCwwLDAtLjA5LjU5VjI3YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYxOS4wNkEyLDIsMCwwLDAsMzMuOTEsMTguNDdaTTguOTIsMjVINy4xMlYyMmgxLjhabTUsMGgtMS44VjIyaDEuOFptNSww'@;
put 'aC0xLjhWMjJoMS44Wm01LDBIMjIuMVYyMmgxLjhabTUsMEgyNy4xVjIyaDEuOFpNMzEsMTkuNEg1VjE4SDMxWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMywxNS40SDIyLjIzQTMuNjgsMy42OCwwLDAsMSwxOSw5'@;
put 'Ljg5TDIwLjcxLDdINy4xM0EyLDIsMCwwLDAsNS4yMiw4LjQxTDIuMDksMTguNDhhMiwyLDAsMCwwLS4wOS41OVYyN2EyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMTkuMDZhMiwyLDAsMCwwLS4wOS0uNTlaTTguOTIsMjVINy4xMlYyMmgxLjhabTUsMGgtMS44VjIyaDEuOFptNSww'@;
put 'aC0xLjhWMjJoMS44Wm01LDBIMjIuMVYyMmgxLjhabTUsMEgyNy4xVjIyaDEuOFpNMzEsMTkuNEg1VjE4SDMxWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEz'@;
put 'LDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiICBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIGNsci1pLWFs'@;
put 'ZXJ0IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLjI2LDEzLjE1QTcuNDksNy40OSwwLDAsMSwyMi41Nyw3SDcuMTNBMiwyLDAsMCwwLDUuMjIsOC40MUwyLjA5LDE4LjQ4YTIsMiwwLDAsMC0uMDkuNTlWMjdhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjE5LjA2YTIsMiww'@;
put 'LDAsMC0uMDktLjU5Wk04LjkyLDI1SDcuMTJWMjJoMS44Wm01LDBoLTEuOFYyMmgxLjhabTUsMGgtMS44VjIyaDEuOFptNSwwSDIyLjFWMjJoMS44Wm01LDBIMjcuMVYyMmgxLjhaTTMxLDE5LjRINVYxOEgzMVoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgt'@;
put 'MS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+XG4gICAgICAgICcpLHkuQ2xyU2hhcGVSb3V0ZXI9KDAsZy5jbHJJ'@;
put 'Y29uU1ZHKSgnPHBhdGggZD0iTTE4LDE0Ljg3bDUuMTEtNS4xNGExLDEsMCwxLDAtMS40Mi0xLjQxTDE5LDExVjMuMzNhMSwxLDAsMCwwLTIsMFYxMUwxNC4zMSw4LjMyYTEsMSwwLDEsMC0xLjQyLDEuNDFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5c'@;
put 'biAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwyMS4xM2wtNS4xMSw1LjE0YTEsMSwwLDAsMCwxLjQyLDEuNDFMMTcsMjV2Ny42OWExLDEsMCwwLDAsMiwwVjI1bDIuNjksMi43MWExLDEsMCwwLDAsMS40Mi0xLjQxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIi'@;
put 'IC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjguODUsMTIuODlhMSwxLDAsMCwwLTEuNDEsMS40MkwzMC4xNSwxN0gyMi40NmExLDEsMCwxLDAsMCwyaDcuNjlsLTIuNzEsMi42OWExLDEsMCwwLDAsMS40MSwxLjQyTDM0LDE4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGlu'@;
put 'ZS1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNNS44NSwxOWg3LjY5YTEsMSwwLDAsMCwwLTJINS44NWwyLjcxLTIuNjlhMSwxLDAsMSwwLTEuNDEtMS40MkwyLDE4bDUuMTQsNS4xMWExLDEsMCwxLDAsMS40MS0xLjQyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0'@;
put 'bGluZS1wYXRoLTQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsMjEuMTNsLTUuMTEsNS4xNGExLDEsMCwwLDAsMS40MiwxLjQxTDE3LDI1djcuNjlhMSwxLDAsMCwwLDIsMFYyNWwyLjY5LDIuNzFhMSwxLDAsMCwwLDEuNDItMS40MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVy'@;
put 'dGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTUuODUsMTloNy42OWExLDEsMCwwLDAsMC0ySDUuODVsMi43MS0yLjY5YTEsMSwwLDEsMC0xLjQxLTEuNDJMMiwxOGw1LjE0LDUuMTFhMSwxLDAsMSwwLDEuNDEtMS40MloiIGNsYXNz'@;
put 'PSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMxLjM4LDE1LjRIMjguNTRMMzAuMTUsMTdIMjIuNDZhMSwxLDAsMSwwLDAsMmg3LjY5bC0yLjcxLDIuNjlhMSwxLDAsMCwwLDEuNDEsMS40Mkwz'@;
put 'NCwxOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDE0Ljg3bDEuMTUtMS4xNi0uMS0uMTVBMy42OCwzLjY4LDAsMCwxLDE5LDEwVjMuMzNhMSwxLDAsMCwwLTIsMFYxMUwx'@;
put 'NC4zMSw4LjMyYTEsMSwwLDEsMC0xLjQyLDEuNDFaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gz'@;
put 'My42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiICBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYWxlcnRlZCBjbHItaS1hbGVydCIgLz5cbiAgICAgICAgICAgIDxwYXRo'@;
put 'IGQ9Ik0xOCwxNC44N2w1LjExLTUuMTRhMSwxLDAsMSwwLTEuNDItMS40MUwxOSwxMVYzLjMzYTEsMSwwLDAsMC0yLDBWMTFMMTQuMzEsOC4zMmExLDEsMCwxLDAtMS40MiwxLjQxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiAv'@;
put 'PlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDIxLjEzbC01LjExLDUuMTRhMSwxLDAsMCwwLDEuNDIsMS40MUwxNywyNXY3LjY5YTEsMSwwLDAsMCwyLDBWMjVsMi42OSwyLjcxYTEsMSwwLDAsMCwxLjQyLTEuNDFaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxp'@;
put 'bmUtcGF0aC0yLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjguODUsMTIuODlhMSwxLDAsMCwwLTEuNDEsMS40MkwzMC4xNSwxN0gyMi40NmExLDEsMCwxLDAsMCwyaDcuNjlsLTIuNzEsMi42OWExLDEsMCwwLDAsMS40MSwxLjQyTDM0LDE4WiIgY2xhc3M9ImNsci1pLW91'@;
put 'dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTUuODUsMTloNy42OWExLDEsMCwwLDAsMC0ySDUuODVsMi43MS0yLjY5YTEsMSwwLDEsMC0xLjQxLTEuNDJMMiwxOGw1LjE0LDUuMTFhMSwxLDAsMSwwLDEuNDEtMS40'@;
put 'MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWJhZGdl'@;
put 'ZCBjbHItaS1iYWRnZSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwxLjY3YTE2LDE2LDAsMSwwLDE2LDE2QTE2LDE2LDAsMCwwLDE4LDEuNjdaTTEzLjg2LDkuOTJhLjguOCwwLDAsMSwxLjEzLDBsMi4yMSwyLjE5VjUuOTNhLjguOCwwLDAsMSwxLjYsMHY2LjE4TDIxLDkuOTJhLjgu'@;
put 'OCwwLDEsMSwxLjEzLDEuMTRMMTgsMTUuMTVsLTQuMTQtNC4xQS44LjgsMCwwLDEsMTMuODYsOS45MlpNMTAuMzIsMjEuNzRhLjguOCwwLDAsMS0xLjEzLDBMNSwxNy42N2w0LjE5LTQuMDlhLjguOCwwLDEsMSwxLjEyLDEuMTRsLTIuMiwyLjE0aDYuMjdhLjguOCwwLDAsMSwwLDEuNkg4LjEx'@;
put 'bDIuMiwyLjE1QS44LjgsMCwwLDEsMTAuMzIsMjEuNzRabTExLjgyLDMuNjdhLjguOCwwLDAsMS0xLjEzLDBMMTguOCwyMy4yM1YyOS40YS44LjgsMCwwLDEtMS42LDBWMjMuMjNMMTUsMjUuNDJhLjguOCwwLDEsMS0xLjEzLTEuMTRMMTgsMjAuMThsNC4xNCw0LjFBLjguOCwwLDAsMSwyMi4x'@;
put 'NCwyNS40MVptNC42Ny0zLjY2YS44LjgsMCwxLDEtMS4xMi0xLjE0bDIuMi0yLjE1SDIxLjYzYS44LjgsMCwwLDEsMC0xLjZoNi4yN2wtMi4yLTIuMTRhLjguOCwwLDEsMSwxLjEyLTEuMTRMMzEsMTcuNjdaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAg'@;
put 'ICAgICAgICAgPHBhdGggZD0iTTMzLjgyLDE1LjM5SDI4LjY4TDMxLDE3LjY3bC00LjE5LDQuMDlhLjguOCwwLDEsMS0xLjEyLTEuMTRsMi4yLTIuMTVIMjEuNjNhLjguOCwwLDAsMSwwLTEuNmg2LjI3bC0xLjUtMS40N0gyMi4yM2EzLjY4LDMuNjgsMCwwLDEtMy0xLjUxTDE4LDE1LjE1bC00'@;
put 'LjE0LTQuMUEuOC44LDAsMSwxLDE1LDkuOTJsMi4yMSwyLjE5VjUuOTNhLjguOCwwLDAsMSwxLjYsMHY0LjQ5QTMuNjUsMy42NSwwLDAsMSwxOSw5Ljg5bDQuMjItNy4zMUExNiwxNiwwLDEsMCwzNCwxNy42NywxNiwxNiwwLDAsMCwzMy44MiwxNS4zOVptLTIzLjUsNi4zNWEuOC44LDAsMCwx'@;
put 'LTEuMTMsMEw1LDE3LjY3bDQuMTktNC4wOWEuOC44LDAsMSwxLDEuMTIsMS4xNGwtMi4yLDIuMTRoNi4yN2EuOC44LDAsMCwxLDAsMS42SDguMTFsMi4yLDIuMTVBLjguOCwwLDAsMSwxMC4zMiwyMS43NFptMTEuODIsMy42N2EuOC44LDAsMCwxLTEuMTMsMEwxOC44LDIzLjIzVjI5LjRhLjgu'@;
put 'OCwwLDAsMS0xLjYsMFYyMy4yM0wxNSwyNS40MmEuOC44LDAsMSwxLTEuMTMtMS4xNEwxOCwyMC4xOGw0LjE0LDQuMUEuOC44LDAsMCwxLDIyLjE0LDI1LjQxWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAg'@;
put 'IDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiICBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29s'@;
put 'aWQtcGF0aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjIyLDEyLjc2QTcuNDksNy40OSwwLDAsMSwyMy4zMiwyLjZhMTYsMTYsMCwxLDAsOS45LDEwLjE3Wk0xMy44Niw5LjkyYS44LjgsMCwwLDEsMS4xMywwbDIuMjEsMi4xOVY1LjkzYS44'@;
put 'LjgsMCwwLDEsMS42LDB2Ni4xOEwyMSw5LjkyYS44LjgsMCwxLDEsMS4xMywxLjE0TDE4LDE1LjE1bC00LjE0LTQuMUEuOC44LDAsMCwxLDEzLjg2LDkuOTJaTTEwLjMyLDIxLjc0YS44LjgsMCwwLDEtMS4xMywwTDUsMTcuNjdsNC4xOS00LjA5YS44LjgsMCwxLDEsMS4xMiwxLjE0bC0yLjIs'@;
put 'Mi4xNGg2LjI3YS44LjgsMCwwLDEsMCwxLjZIOC4xMWwyLjIsMi4xNUEuOC44LDAsMCwxLDEwLjMyLDIxLjc0Wm0xMS44MiwzLjY3YS44LjgsMCwwLDEtMS4xMywwTDE4LjgsMjMuMjNWMjkuNGEuOC44LDAsMCwxLTEuNiwwVjIzLjIzTDE1LDI1LjQyYS44LjgsMCwxLDEtMS4xMy0xLjE0TDE4'@;
put 'LDIwLjE4bDQuMTQsNC4xQS44LjgsMCwwLDEsMjIuMTQsMjUuNDFabTQuNjctMy42NmEuOC44LDAsMSwxLTEuMTItMS4xNGwyLjItMi4xNUgyMS42M2EuOC44LDAsMCwxLDAtMS42aDYuMjdsLTIuMi0yLjE0YS44LjgsMCwxLDEsMS4xMi0xLjE0TDMxLDE3LjY3WiIgY2xhc3M9ImNsci1pLXNv'@;
put 'bGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiICBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgLz5cbiAgICAgICAg'@;
put 'JykseS5DbHJTaGFwZVZNPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xMSw1SDI1VjhoMlY1YTIsMiwwLDAsMC0yLTJIMTFBMiwyLDAsMCwwLDksNXY2Ljg1aDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9'@;
put 'Ik0zMCwxMEgxN3YyaDh2NmgyVjEyaDNWMjZIMjJWMTdhMiwyLDAsMCwwLTItMkg2YTIsMiwwLDAsMC0yLDJWMzFhMiwyLDAsMCwwLDIsMkgyMGEyLDIsMCwwLDAsMi0yVjI4aDhhMiwyLDAsMCwwLDItMlYxMkEyLDIsMCwwLDAsMzAsMTBaTTYsMzFWMTdIMjB2OUgxNlYyMEgxNHY2YTIsMiww'@;
put 'LDAsMCwyLDJoNHYzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTEsNUgyMS44N0wyMywzSDExQTIsMiwwLDAsMCw5LDV2Ni44NWgyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0'@;
put 'bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIyNS4wMSIgeT0iMTUuNCIgd2lkdGg9IjEuOTkiIGhlaWdodD0iMi42IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAg'@;
put 'IDxwYXRoIGQ9Ik0zMCwxNS40VjI2SDIyVjE3YTIsMiwwLDAsMC0yLTJINmEyLDIsMCwwLDAtMiwyVjMxYTIsMiwwLDAsMCwyLDJIMjBhMiwyLDAsMCwwLDItMlYyOGg4YTIsMiwwLDAsMCwyLTJWMTUuNFpNNiwzMVYxN0gyMHY5SDE2VjIwSDE0djZhMiwyLDAsMCwwLDIsMmg0djNaIiBjbGFz'@;
put 'cz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNywxMHYyaDEuNTdBMy42NywzLjY3LDAsMCwxLDE5LDEwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1w'@;
put 'YXRoLTQtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiAgY2xhc3M9'@;
put 'ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTEsNUgyMi41N2E3LjQ1LDcuNDUsMCwwLDEsLjU1LTJIMTFBMiwyLDAsMCwwLDksNXY2Ljg1aDJaIiBjbGFzcz0iY2xyLWkt'@;
put 'b3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAsMTMuNWgwVjI2SDIyVjE3YTIsMiwwLDAsMC0yLTJINmEyLDIsMCwwLDAtMiwyVjMxYTIsMiwwLDAsMCwyLDJIMjBhMiwyLDAsMCwwLDItMlYyOGg4YTIsMiww'@;
put 'LDAsMCwyLTJWMTMuMjJBNy40OSw3LjQ5LDAsMCwxLDMwLDEzLjVaTTYsMzFWMTdIMjB2OUgxNlYyMEgxNHY2YTIsMiwwLDAsMCwyLDJoNHYzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGgg'@;
put 'ZD0iTTE3LDEyaDh2NmgyVjEyLjg3QTcuNTIsNy41MiwwLDAsMSwyMy42NiwxMEgxN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgIGNsYXNzPSJj'@;
put 'bHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCBjbHItaS1iYWRnZSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMy41OSwxMmEzLjYsMy42LDAsMCwxLDMuNi0zLjZIMjdWNWEyLDIsMCwwLDAtMi0ySDExQTIsMiwwLDAsMCw5LDV2OC40aDQuNTla'@;
put 'IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLDEwSDE3LjE5YTIsMiwwLDAsMC0yLDJ2MS40SDIwQTMuNiwzLjYsMCwwLDEsMjMuNiwxN3Y4SDIyVjE3YTIsMiwwLDAsMC0yLTJINmEyLDIsMCwwLDAtMiwyVjMxYTIs'@;
put 'MiwwLDAsMCwyLDJIMjBhMiwyLDAsMCwwLDItMlYyOS42SDE3LjE5YTMuNiwzLjYsMCwwLDEtMy42LTMuNlYyMGgxLjZ2NmEyLDIsMCwwLDAsMiwySDMwYTIsMiwwLDAsMCwyLTJWMTJBMiwyLDAsMCwwLDMwLDEwWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz5c'@;
put 'biAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMy41OSwxMmEzLjYsMy42LDAsMCwxLDMuNi0zLjZoMi43MkwyMywzSDExQTIsMiwwLDAsMCw5LDV2OC40aDQuNTlaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAg'@;
put 'PHBhdGggZD0iTTE3LjE5LDEwYTIsMiwwLDAsMC0yLDJ2MS40SDE5QTMuNjgsMy42OCwwLDAsMSwxOSwxMFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjMuMjEsMTUuNEEzLjU1LDMu'@;
put 'NTUsMCwwLDEsMjMuNiwxN3Y4SDIyVjE3YTIsMiwwLDAsMC0yLTJINmEyLDIsMCwwLDAtMiwyVjMxYTIsMiwwLDAsMCwyLDJIMjBhMiwyLDAsMCwwLDItMlYyOS42SDE3LjE5YTMuNiwzLjYsMCwwLDEtMy42LTMuNlYyMGgxLjZ2NmEyLDIsMCwwLDAsMiwySDMwYTIsMiwwLDAsMCwyLTJWMTUu'@;
put 'NFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5'@;
put 'LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiAgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtNC0tYWxlcnRlZCBjbHItaS1hbGVydCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMy41OSwxMmEzLjYsMy42LDAsMCwxLDMuNi0zLjZI'@;
put 'MjIuOUE3LjQ1LDcuNDUsMCwwLDEsMjMuMTMsM0gxMUEyLDIsMCwwLDAsOSw1djguNGg0LjU5WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAsMTMuNUE3LjQ5LDcuNDksMCwwLDEsMjMu'@;
put 'NjYsMTBIMTcuMTlhMiwyLDAsMCwwLTIsMnYxLjRIMjBBMy42LDMuNiwwLDAsMSwyMy42LDE3djhIMjJWMTdhMiwyLDAsMCwwLTItMkg2YTIsMiwwLDAsMC0yLDJWMzFhMiwyLDAsMCwwLDIsMkgyMGEyLDIsMCwwLDAsMi0yVjI5LjZIMTcuMTlhMy42LDMuNiwwLDAsMS0zLjYtMy42VjIwaDEu'@;
put 'NnY2YTIsMiwwLDAsMCwyLDJIMzBhMiwyLDAsMCwwLDItMlYxMy4yMkE3LjQ5LDcuNDksMCwwLDEsMzAsMTMuNVoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1'@;
put 'IiAgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+XG4gICAgICAgICcpLHkuQ2xyU2hhcGVWTVdBcHA9KDAsZy5jbHJJY29uU1ZHKSgnPHBvbHlnb24gcG9pbnRzPSIyOCAyMiAzMCAyMiAzMCAzMCAyMiAzMCAyMiAy'@;
put 'OCAyMCAyOCAyMCAzMiAzMiAzMiAzMiAyMCAyOCAyMCAyOCAyMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cG9seWdvbiBwb2ludHM9IjE0IDMwIDYgMzAgNiAyMiA4IDIyIDggMjAgNCAyMCA0IDMyIDE2IDMyIDE2IDI4IDE0'@;
put 'IDI4IDE0IDMwIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIHBvaW50cz0iOCAxNCA2IDE0IDYgNiAxNCA2IDE0IDggMTYgOCAxNiA0IDQgNCA0IDE2IDggMTYgOCAxNCIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xy'@;
put 'LWktb3V0bGluZS1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8cG9seWdvbiBwb2ludHM9IjIwIDQgMjAgOCAyMiA4IDIyIDYgMzAgNiAzMCAxNCAyOCAxNCAyOCAxNiAzMiAxNiAzMiA0IDIwIDQiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPlxuICAgICAg'@;
put 'ICAgICAgPHJlY3QgeD0iMTEiIHk9IjExIiB3aWR0aD0iNiIgaGVpZ2h0PSI2IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE5IiB5PSIxMSIgd2lkdGg9IjYiIGhlaWdodD0iNiIgY2xhc3M9ImNsci1pLW91dGxp'@;
put 'bmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMSIgeT0iMTkiIHdpZHRoPSI2IiBoZWlnaHQ9IjYiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC03IiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTkiIHk9IjE5IiB3aWR0'@;
put 'aD0iNiIgaGVpZ2h0PSI2IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtOCIgLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIHBvaW50cz0iMjggMjIgMzAgMjIgMzAgMzAgMjIgMzAgMjIgMjggMjAgMjggMjAgMzIgMzIgMzIgMzIgMjAgMjggMjAgMjggMjIiIGNsYXNz'@;
put 'PSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSIxNCAzMCA2IDMwIDYgMjIgOCAyMiA4IDIwIDQgMjAgNCAzMiAxNiAzMiAxNiAyOCAxNCAyOCAxNCAzMCIgY2xhc3M9ImNsci1pLW91'@;
put 'dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cG9seWdvbiBwb2ludHM9IjggMTQgNiAxNCA2IDYgMTQgNiAxNCA4IDE2IDggMTYgNCA0IDQgNCAxNiA4IDE2IDggMTQiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNs'@;
put 'ci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTEiIHk9IjExIiB3aWR0aD0iNiIgaGVpZ2h0PSI2IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxy'@;
put 'ZWN0IHg9IjExIiB5PSIxOSIgd2lkdGg9IjYiIGhlaWdodD0iNiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxOSIgeT0iMTkiIHdpZHRoPSI2IiBoZWlnaHQ9IjYiIGNsYXNzPSJj'@;
put 'bHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC02LS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI1LDE1LjRIMjIuMjNBMy42OSwzLjY5LDAsMCwxLDE5LDEzLjU2bDAtLjFWMTdoNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1p'@;
put 'LW91dGxpbmUtcGF0aC03LS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSIyMi40NSA0IDIwIDQgMjAgOCAyMC4xNCA4IDIyLjQ1IDQiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC04LS1hbGVydGVkIiAvPlxuICAgICAg'@;
put 'ICAgICAgPHJlY3QgeD0iMjgiIHk9IjE1LjQiIHdpZHRoPSI0IiBoZWlnaHQ9IjAuNiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTktLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEu'@;
put 'MjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEwLS1hbGVydGVkIGNsci1pLWFsZXJ0IiAv'@;
put 'PlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSIyOCAyMiAzMCAyMiAzMCAzMCAyMiAzMCAyMiAyOCAyMCAyOCAyMCAzMiAzMiAzMiAzMiAyMCAyOCAyMCAyOCAyMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiAvPlxuICAg'@;
put 'ICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSIxNCAzMCA2IDMwIDYgMjIgOCAyMiA4IDIwIDQgMjAgNCAzMiAxNiAzMiAxNiAyOCAxNCAyOCAxNCAzMCIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBv'@;
put 'bHlnb24gcG9pbnRzPSI4IDE0IDYgMTQgNiA2IDE0IDYgMTQgOCAxNiA4IDE2IDQgNCA0IDQgMTYgOCAxNiA4IDE0IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMSIgeT0iMTEiIHdp'@;
put 'ZHRoPSI2IiBoZWlnaHQ9IjYiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjExIiB5PSIxOSIgd2lkdGg9IjYiIGhlaWdodD0iNiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBj'@;
put 'bHItaS1vdXRsaW5lLXBhdGgtNS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTkiIHk9IjE5IiB3aWR0aD0iNiIgaGVpZ2h0PSI2IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC02LS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cGF0'@;
put 'aCBkPSJNMjIsNmguNWE3LjQ5LDcuNDksMCwwLDEsLjI4LTJIMjBWOGgyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNy0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLDEzLjVWMTRIMjh2Mmg0VjEzLjIyQTcuNDksNy40OSww'@;
put 'LDAsMSwzMCwxMy41WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtOC0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI1LDExLjU4YTcuNTMsNy41MywwLDAsMS0uNTgtLjU4SDE5djZoNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1i'@;
put 'YWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTktLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEwLS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+XG4gICAgICAg'@;
put 'ICcpLHkuQ2xyU2hhcGVDZXJ0aWZpY2F0ZT0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzIsNkg0QTIsMiwwLDAsMCwyLDhWMjhhMiwyLDAsMCwwLDIsMkgxOWwuNTctLjcuOTMtMS4xNEwyMC40MSwyOEg0VjhIMzJsMCw4LjU2YTguNDEsOC40MSwwLDAsMSwyLDEuODFWOEEyLDIsMCww'@;
put 'LDAsMzIsNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iNyIgeT0iMTIiIHdpZHRoPSIxNyIgaGVpZ2h0PSIxLjYiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAg'@;
put 'ICAgICAgPHJlY3QgeD0iNyIgeT0iMTYiIHdpZHRoPSIxMSIgaGVpZ2h0PSIxLjYiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iNyIgeT0iMjMiIHdpZHRoPSIxMCIgaGVpZ2h0PSIxLjYiIGNsYXNzPSJjbHItaS1v'@;
put 'dXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI3LjQ2LDE3LjIzYTYuMzYsNi4zNiwwLDAsMC00LjQsMTFsLTEuOTQsMi4zNy45LDMuNjEsMy42Ni00LjQ2YTYuMjYsNi4yNiwwLDAsMCwzLjU1LDBsMy42Niw0LjQ2LjktMy42MS0xLjk0LTIu'@;
put 'MzdhNi4zNiw2LjM2LDAsMCwwLTQuNC0xMVptMCwxMC42OGE0LjMxLDQuMzEsMCwxLDEsNC4zNy00LjMxQTQuMzUsNC4zNSwwLDAsMSwyNy40NiwyNy45MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iNyIgeT0i'@;
put 'MTYiIHdpZHRoPSIxMSIgaGVpZ2h0PSIxLjYiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iNyIgeT0iMjMiIHdpZHRoPSIxMCIgaGVpZ2h0PSIxLjYiIGNsYXNzPSJjbHItaS1vdXRs'@;
put 'aW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI3LjQ2LDE3LjIzYTYuMzYsNi4zNiwwLDAsMC00LjQsMTFsLTEuOTQsMi4zNy45LDMuNjEsMy42Ni00LjQ2YTYuMjYsNi4yNiwwLDAsMCwzLjU1LDBsMy42Niw0LjQ2'@;
put 'LjktMy42MS0xLjk0LTIuMzdhNi4zNiw2LjM2LDAsMCwwLTQuNC0xMVptMCwxMC42OGE0LjMxLDQuMzEsMCwxLDEsNC4zNy00LjMxQTQuMzUsNC4zNSwwLDAsMSwyNy40NiwyNy45MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVk'@;
put 'IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE5LDEzLjU2QTMuNjYsMy42NiwwLDAsMSwxOC41NywxMkg3djEuNkgxOS4wN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMz'@;
put 'LjY4LDE1LjRIMzJ2MS4xNmE4LjQxLDguNDEsMCwwLDEsMiwxLjgxdi0zWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNNCwyOFY4SDIwLjE0bDEuMTUtMkg0QTIsMiwwLDAsMCwy'@;
put 'LDhWMjhhMiwyLDAsMCwwLDIsMkgxOWwuNTctLjcuOTMtMS4xNEwyMC40MSwyOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC02LS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4'@;
put 'LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC03LS1hbGVydGVkIGNsci1pLWFsZXJ0IiAvPlxu'@;
put 'ICAgICAgICAgICAgPHJlY3QgeD0iNyIgeT0iMTIiIHdpZHRoPSIxNyIgaGVpZ2h0PSIxLjYiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjciIHk9IjE2IiB3aWR0aD0iMTEiIGhlaWdo'@;
put 'dD0iMS42IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSI3IiB5PSIyMyIgd2lkdGg9IjEwIiBoZWlnaHQ9IjEuNiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRs'@;
put 'aW5lLXBhdGgtMy0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI3LjQ2LDE3LjIzYTYuMzYsNi4zNiwwLDAsMC00LjQsMTFsLTEuOTQsMi4zNy45LDMuNjEsMy42Ni00LjQ2YTYuMjYsNi4yNiwwLDAsMCwzLjU1LDBsMy42Niw0LjQ2LjktMy42MS0xLjk0LTIuMzdhNi4zNiw2'@;
put 'LjM2LDAsMCwwLTQuNC0xMVptMCwxMC42OGE0LjMxLDQuMzEsMCwxLDEsNC4zNy00LjMxQTQuMzUsNC4zNSwwLDAsMSwyNy40NiwyNy45MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9'@;
put 'Ik0zMiwxMy4yMnYzLjM0YTguNDEsOC40MSwwLDAsMSwyLDEuODF2LTZBNy40NSw3LjQ1LDAsMCwxLDMyLDEzLjIyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTQsMjhWOEgyMi43'@;
put 'OGE3LjQ5LDcuNDksMCwwLDEtLjI4LTJINEEyLDIsMCwwLDAsMiw4VjI4YTIsMiwwLDAsMCwyLDJIMTlsLjU3LS43LjkzLTEuMTRMMjAuNDEsMjhaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC02LS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2ly'@;
put 'Y2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiICBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC03LS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTksMzBINGEyLDIsMCwwLDEtMi0yVjhBMiwyLDAsMCwxLDQsNkgzMmEy'@;
put 'LDIsMCwwLDEsMiwyVjE4LjM3YTguMzQsOC4zNCwwLDAsMC0xMy40OSw5Ljc5bC0uOTMsMS4xNFpNNywxMnYxLjZIMjRWMTJabTAsNS42SDE4VjE2SDdabTAsN0gxN1YyM0g3WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9'@;
put 'Ik0zMy44MywyMy41OWE2LjM3LDYuMzcsMCwxLDAtMTAuNzcsNC41OWwtMS45NCwyLjM3LjksMy42MSwzLjY2LTQuNDZhNi4yNiw2LjI2LDAsMCwwLDMuNTUsMGwzLjY2LDQuNDYuOS0zLjYxLTEuOTQtMi4zN0E2LjM0LDYuMzQsMCwwLDAsMzMuODMsMjMuNTlabS0xMC43NCwwYTQuMzcsNC4z'@;
put 'NywwLDEsMSw0LjM3LDQuMzFBNC4zNSw0LjM1LDAsMCwxLDIzLjEsMjMuNTlaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjgzLDIzLjU5YTYuMzcsNi4zNywwLDEsMC0xMC43Nyw0LjU5bC0xLjk0LDIuMzcuOSwz'@;
put 'LjYxLDMuNjYtNC40NmE2LjI2LDYuMjYsMCwwLDAsMy41NSwwbDMuNjYsNC40Ni45LTMuNjEtMS45NC0yLjM3QTYuMzQsNi4zNCwwLDAsMCwzMy44MywyMy41OVptLTEwLjc0LDBhNC4zNyw0LjM3LDAsMSwxLDQuMzcsNC4zMUE0LjM1LDQuMzUsMCwwLDEsMjMuMSwyMy41OVoiIGNsYXNzPSJj'@;
put 'bHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuNjgsMTUuNEgyOS4yNWE4LjM2LDguMzYsMCwwLDEsNC43NSwzdi0zWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgt'@;
put 'Mi0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOS4wNywxMy42SDdWMTJIMTguNTdBMy42NywzLjY3LDAsMCwxLDE5LDkuODlMMjEuMjksNkg0QTIsMiwwLDAsMCwyLDhWMjhhMiwyLDAsMCwwLDIsMkgxOWwuNTctLjcuOTMtMS4xNEE4LjM0LDguMzQsMCwwLDEsMjUuNjYs'@;
put 'MTUuNEgyMi4yM0EzLjY4LDMuNjgsMCwwLDEsMTkuMDcsMTMuNlpNMTcsMjQuNkg3VjIzSDE3Wm0xLTdIN1YxNkgxOFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwy'@;
put 'MS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiAgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtNC0tYWxlcnRlZCBjbHIt'@;
put 'aS1hbGVydCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNy40NiwxNy4yM2E2LjM2LDYuMzYsMCwwLDAtNC40LDExbC0xLjk0LDIuMzcuOSwzLjYxLDMuNjYtNC40NmE2LjI2LDYuMjYsMCwwLDAsMy41NSwwbDMuNjYsNC40Ni45LTMuNjEtMS45NC0yLjM3YTYuMzYsNi4zNiwwLDAsMC00'@;
put 'LjQtMTFabTAsMTAuNjhhNC4zMSw0LjMxLDAsMSwxLDQuMzctNC4zMUE0LjM1LDQuMzUsMCwwLDEsMjcuNDYsMjcuOTFaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMCwxMy41QTcuNSw3'@;
put 'LjUsMCwwLDEsMjIuNSw2SDRBMiwyLDAsMCwwLDIsOFYyOGEyLDIsMCwwLDAsMiwySDE5bC41Ny0uNy45My0xLjE0QTguMzQsOC4zNCwwLDAsMSwzNCwxOC4zN3YtNkE3LjQ2LDcuNDYsMCwwLDEsMzAsMTMuNVpNMTcsMjQuNkg3VjIzSDE3Wm0xLTdIN1YxNkgxOFptNi00SDdWMTJIMjRaIiBj'@;
put 'bGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdl'@;
put 'IiAvPlxuICAgICAgICAnKSx5LkNsclNoYXBlQXJjaGl2ZT0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjksMzJIN1YyMkg1VjMyYTIsMiwwLDAsMCwyLDJIMjlhMiwyLDAsMCwwLDItMlYyMkgyOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxu'@;
put 'ICAgICAgICAgICAgPHBhdGggZD0iTTE0LDI0YTEsMSwwLDAsMCwxLDFoNmExLDEsMCwwLDAsMC0ySDE1QTEsMSwwLDAsMCwxNCwyNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE0LDE4SDZWMTRoNGEzLDMs'@;
put 'MCwwLDEtLjY4LTEuODdzMC0uMDksMC0uMTNINS41QTEuNSwxLjUsMCwwLDAsNCwxMy41VjIwSDE2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAuNSwxMkgyNi42NnMwLC4wOSwwLC4xM0EzLDMsMCwwLDEs'@;
put 'MjYsMTRoNHY0SDIybC0yLDJIMzJWMTMuNUExLjUsMS41LDAsMCwwLDMwLjUsMTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwxOS4xOGw2LjM4LTYuMzVBMSwxLDAsMSwwLDIzLDExLjQxbC00LDMuOTVW'@;
put 'M2ExLDEsMCwxLDAtMiwwdjEyLjRsLTQtMy45NWExLDEsMCwwLDAtMS40MSwxLjQyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTkuNDEsMjAuNiwxOCwyMmwtMS40MS0xLjRMMTYsMjBINVYzMmEyLDIsMCww'@;
put 'LDAsMiwySDI5YTIsMiwwLDAsMCwyLTJWMjBIMjBaTTIyLDI0YTEsMSwwLDAsMS0xLDFIMTVhMSwxLDAsMCwxLDAtMmg2QTEsMSwwLDAsMSwyMiwyNFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAuNSwxMkgyNi42'@;
put 'NnMwLC4wOSwwLC4xM2EzLDMsMCwwLDEtLjg4LDIuMTJMMjIsMThIMzJWMTMuNUExLjUsMS41LDAsMCwwLDMwLjUsMTJaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTEwLjIsMTQuMjVhMywzLDAsMCwxLS44OC0yLjEy'@;
put 'czAtLjA5LDAtLjEzSDUuNUExLjUsMS41LDAsMCwwLDQsMTMuNVYxOEgxNFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsMTkuMThsNi4zOC02LjM1QTEsMSwwLDEsMCwyMywxMS40MWwtNCwzLjk1VjNhMSwxLDAs'@;
put 'MSwwLTIsMHYxMi40bC00LTMuOTVhMSwxLDAsMCwwLTEuNDEsMS40MloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTQiIC8+XG4gICAgICAgICcpLHkuQ2xyU2hhcGVVbmFyY2hpdmU9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI5LDMySDdWMjJINVYzMmEyLDIs'@;
put 'MCwwLDAsMiwySDI5YTIsMiwwLDAsMCwyLTJWMjJIMjlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNCwyNGExLDEsMCwwLDAsMSwxaDZhMSwxLDAsMCwwLDAtMkgxNUExLDEsMCwwLDAsMTQsMjRaIiBjbGFz'@;
put 'cz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNSwxOEg2VjE0aDlWMTJINS41QTEuNSwxLjUsMCwwLDAsNCwxMy41VjIwSDE1Ljc4QTMsMywwLDAsMSwxNSwxOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxp'@;
put 'bmUtcGF0aC0zIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLjUsMTJIMjF2Mmg5djRIMjFhMywzLDAsMCwxLS43OCwySDMyVjEzLjVBMS41LDEuNSwwLDAsMCwzMC41LDEyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+XG4gICAgICAgICAgICA8'@;
put 'cGF0aCBkPSJNMTMsOS41NSwxNyw1LjZWMThhMSwxLDAsMSwwLDIsMFY1LjZsNCwzLjk1YTEsMSwwLDEsMCwxLjQxLTEuNDJMMTgsMS43OCwxMS42MSw4LjEzQTEsMSwwLDAsMCwxMyw5LjU1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIC8+XG4gICAgICAg'@;
put 'ICAgICA8cGF0aCBkPSJNMTgsMjFhMywzLDAsMCwxLTIuMjItMUg1VjMyYTIsMiwwLDAsMCwyLDJIMjlhMiwyLDAsMCwwLDItMlYyMEgyMC4yMUEzLDMsMCwwLDEsMTgsMjFabTQsM2ExLDEsMCwwLDEtMSwxSDE1YTEsMSwwLDAsMSwwLTJoNkExLDEsMCwwLDEsMjIsMjRaIiBjbGFzcz0iY2xy'@;
put 'LWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE1LDEySDUuNUExLjUsMS41LDAsMCwwLDQsMTMuNVYxOEgxNVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAuNSwx'@;
put 'MkgyMXY2SDMyVjEzLjVBMS41LDEuNSwwLDAsMCwzMC41LDEyWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMyw5LjU1LDE3LDUuNlYxOGExLDEsMCwxLDAsMiwwVjUuNmw0LDMuOTVhMSwxLDAsMSwwLDEuNDEtMS40'@;
put 'MkwxOCwxLjc4LDExLjYxLDguMTNBMSwxLDAsMCwwLDEzLDkuNTVaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC00IiAvPlxuICAgICAgICAnKSx5LkNsclNoYXBlQ29ubmVjdD0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzQsMTdIMjguMjNBNi4yNSw2LjI1LDAs'@;
put 'MCwwLDIyLDEySDE0LjE1YTYuMjUsNi4yNSwwLDAsMC02LjIxLDVIMnYySDcuOTNhNi4yMiw2LjIyLDAsMCwwLDYuMjIsNUgyMmE2LjIyLDYuMjIsMCwwLDAsNi4yMi01SDM0Wk0xNy4wOCwyMkgxNC4xNWE0LjE3LDQuMTcsMCwwLDEtNC4zMS00LDQuMTcsNC4xNywwLDAsMSw0LjMxLTRoMi45'@;
put 'NFpNMjIsMjJIMTlWMTRoM2E0LjE3LDQuMTcsMCwwLDEsNC4zMSw0QTQuMTcsNC4xNywwLDAsMSwyMiwyMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE3LDEySDE0LjE1YTYuMjUsNi4yNSwwLDAsMC02LjIx'@;
put 'LDVIMnYySDcuOTNhNi4yMiw2LjIyLDAsMCwwLDYuMjIsNUgxN1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjguMjMsMTdBNi4yNSw2LjI1LDAsMCwwLDIyLDEySDE5VjI0aDNhNi4yMiw2LjIyLDAsMCwwLDYuMjIt'@;
put 'NUgzNFYxN1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+XG4gICAgICAgICcpLHkuQ2xyU2hhcGVEaXNjb25uZWN0PSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xMi4xNyw2QTYuMjEsNi4yMSwwLDAsMCw2LDExSDIuMTN2Mkg2YTYuMjMsNi4yMywwLDAs'@;
put 'MCw2LjIxLDVIMTdWNlpNMTUuMSwxNkgxMi4xN2E0LjIsNC4yLDAsMCwxLTQuMzEtNCw0LjE3LDQuMTcsMCwwLDEsNC4zMS00SDE1LjFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy45MiwyM0gzMC4xNGE2'@;
put 'LjI1LDYuMjUsMCwwLDAtNi4yMS01SDE5djJIMTRhMSwxLDAsMSwwLDAsMmg1djRIMTRhMSwxLDAsMCwwLTEsMSwxLDEsMCwwLDAsMSwxaDV2Mmg0Ljk0YTYuMjMsNi4yMywwLDAsMCw2LjIyLTVoMy43NlptLTEwLDVIMjFWMjBoMi45NGE0LjE3LDQuMTcsMCwwLDEsNC4zMSw0QTQuMTcsNC4x'@;
put 'NywwLDAsMSwyMy45NCwyOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTEyLDZhNi4yMSw2LjIxLDAsMCwwLTYuMjEsNUgydjJINS44M0E2LjIzLDYuMjMsMCwwLDAsMTIsMThIMTdWNloiIGNsYXNzPSJjbHIt'@;
put 'aS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuNzksMjNIMzAuMTRhNi4yNSw2LjI1LDAsMCwwLTYuMjEtNUgxOXYySDE0YTEsMSwwLDAsMC0xLDEsMSwxLDAsMCwwLDEsMWg1djRIMTRhMSwxLDAsMCwwLTEsMSwxLDEsMCwwLDAsMSwxaDV2'@;
put 'Mmg0Ljk0YTYuMjMsNi4yMywwLDAsMCw2LjIyLTVoMy42NFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+XG4gICAgICAgICcpLHkuQ2xyU2hhcGVMaW5rPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xNy42LDI0LjMybC0yLjQ2LDIuNDRhNCw0LDAsMCwx'@;
put 'LTUuNjIsMCwzLjkyLDMuOTIsMCwwLDEsMC01LjU1bDQuNjktNC42NWE0LDQsMCwwLDEsNS42MiwwLDMuODYsMy44NiwwLDAsMSwxLDEuNzFBMiwyLDAsMCwwLDIxLjEsMThsMS4yOS0xLjI4YTUuODksNS44OSwwLDAsMC0xLjE1LTEuNjIsNiw2LDAsMCwwLTguNDQsMEw4LjEsMTkuNzlhNS45'@;
put 'MSw1LjkxLDAsMCwwLDAsOC4zOSw2LDYsMCwwLDAsOC40NCwwbDMuNjUtMy42MmMtLjE3LDAtLjMzLDAtLjUsMEE4LDgsMCwwLDEsMTcuNiwyNC4zMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LjYxLDcu'@;
put 'ODJhNiw2LDAsMCwwLTguNDQsMGwtMy42NSwzLjYyYy4xNywwLC4zMywwLC40OSwwaDBhOCw4LDAsMCwxLDIuMS4yOGwyLjQ2LTIuNDRhNCw0LDAsMCwxLDUuNjIsMCwzLjkyLDMuOTIsMCwwLDEsMCw1LjU1bC00LjY5LDQuNjVhNCw0LDAsMCwxLTUuNjIsMCwzLjg2LDMuODYsMCwwLDEtMS0x'@;
put 'LjcxLDIsMiwwLDAsMC0uMjguMjNsLTEuMjksMS4yOGE1Ljg5LDUuODksMCwwLDAsMS4xNSwxLjYyLDYsNiwwLDAsMCw4LjQ0LDBsNC42OS00LjY1YTUuOTIsNS45MiwwLDAsMCwwLTguMzlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAg'@;
put 'JykseS5DbHJTaGFwZVVubGluaz0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNNSw1LDMuNTksNi40MWw5LDlMOC4xLDE5Ljc5YTUuOTEsNS45MSwwLDAsMCwwLDguMzksNiw2LDAsMCwwLDguNDQsMEwyMSwyMy43OGw4LjYzLDguNjNMMzEsMzFaTTE1LjEzLDI2Ljc2YTQsNCwwLDAsMS01'@;
put 'LjYyLDAsMy45MiwzLjkyLDAsMCwxLDAtNS41NUwxNCwxNi43OWw1LjU4LDUuNThaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMS41Myw5LjIyYTQsNCwwLDAsMSw1LjYyLDAsMy45MiwzLjkyLDAsMCwxLDAs'@;
put 'NS41NWwtNC43OSw0Ljc2TDIzLjc4LDIxbDQuNzktNC43NmE1LjkyLDUuOTIsMCwwLDAsMC04LjM5LDYsNiwwLDAsMC04LjQ0LDBsLTQuNzYsNC43NEwxNi43OCwxNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAnKSx5LkNsclNoYXBl'@;
put 'Q2xvdWROZXR3b3JrPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMC43MSwxNS4xOHYtMUExMS4yOCwxMS4yOCwwLDAsMCwxOS41NiwyLjgzaC0uMTFhMTEuMjgsMTEuMjgsMCwwLDAtMTEsOC45Myw3LjQ3LDcuNDcsMCwwLDAsMCwxNC45NEgyOS4xM2E1Ljg2LDUuODYsMCwwLDAsMS41'@;
put 'OC0xMS41MlpNMjkuMTMsMjQuN0g4LjQ2YTUuNDcsNS40NywwLDEsMSwwLTEwLjk0aDEuNjlsLjExLS44N2E5LjI3LDkuMjcsMCwwLDEsMTguNDUsMS4zdjEuMjhjMCwuMDksMCwuMTgsMCwuMjdsLS4wNywxLjE1Ljk0LjExYTMuODYsMy44NiwwLDAsMS0uNDMsNy43MVoiIGNsYXNzPSJjbHIt'@;
put 'aS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI5LjU4LDMxLjE4SDE4Ljg1di0yLjRoLTJ2Mi40SDYuMDhhMSwxLDAsMCwwLDAsMmgyMy41YTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBh'@;
put 'dGgtMiIgLz5cbiAgICAgICAgJykseS5DbHJTaGFwZUNsb3VkU2NhbGU9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTYuMzIsMTEuMTFINy44NEw4LDEwLjI0QTcuMTksNy4xOSwwLDAsMSwxNS4wNyw0aC4wN2E3LjE1LDcuMTUsMCwwLDEsNC43MSwxLjgzLDExLjEsMTEuMSwwLDAsMSwz'@;
put 'LjA5LjY0QTkuMTgsOS4xOCwwLDAsMCwxNS4xNiwyaC0uMDlBOS4yLDkuMiwwLDAsMCw2LjEzLDkuMTEsNi4xNSw2LjE1LDAsMCwwLDIuMzMsMTkuOTUsOC4wOSw4LjA5LDAsMCwxLDMsMTcuNzFhNC4xMiw0LjEyLDAsMCwxLS44MS0yLjQ0QTQuMTYsNC4xNiwwLDAsMSw2LjMyLDExLjExWiIg'@;
put 'Y2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTAuNCwxNi45MWgxLjUyTDEyLDE2YTcuMTksNy4xOSwwLDAsMSw3LjEyLTYuMjVoLjA3YTcuMTcsNy4xNywwLDAsMSw1LjcsMi45MiwxMS4wNSwxMS4wNSwwLDAsMSwy'@;
put 'LjcyLjc3LDkuMiw5LjIsMCwwLDAtOC40LTUuNjloLS4wOWE5LjIsOS4yLDAsMCwwLTguOTQsNy4xMiw2LjE1LDYuMTUsMCwwLDAtMy42NCwxMSw4LjExLDguMTEsMCwwLDEsLjc5LTIsNC4xNCw0LjE0LDAsMCwxLDMtN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0'@;
put 'aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLjQyLDI0LjQ3di0uNjJhOS4xOCw5LjE4LDAsMCwwLTE4LjEzLTIuMTZBNi4xNiw2LjE2LDAsMCwwLDE0LjQ4LDM0SDMxYTQuODgsNC44OCwwLDAsMCwxLjQ2LTkuNTNaTTMxLDMySDE0LjQ4YTQuMTYsNC4xNiwwLDEsMSwwLTguMzJI'@;
put 'MTZsLjExLS44N2E3LjE5LDcuMTksMCwwLDEsNy4xMi02LjI1aC4wN2E3LjIxLDcuMjEsMCwwLDEsNy4xMiw3LjI1djFjMCwuMDcsMCwuMTMsMCwuMmwtLjA3LDEuMTEuOTQuMTFBMi44OCwyLjg4LDAsMCwxLDMxLDMyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRo'@;
put 'LTMiIC8+XG4gICAgICAgICcpLHkuQ2xyU2hhcGVDbG91ZFRyYWZmaWM9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI2LjU0LDIwLjgyYS44OC44OCwwLDAsMC0uODgtLjg4SDIwLjc1bDEuMS0xLjFBLjg4Ljg4LDAsMCwwLDIwLjYsMTcuNmwtMy4yMSwzLjIyTDIwLjYsMjRhLjg4Ljg4'@;
put 'LDAsMSwwLDEuMjUtMS4yNEwyMC43NiwyMS43aDQuOUEuODguODgsMCwwLDAsMjYuNTQsMjAuODJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOS4yNywyMS43YS44OC44OCwwLDEsMCwwLTEuNzZoLS41OGEu'@;
put 'ODguODgsMCwxLDAsMCwxLjc2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIuMjEsMjBoLS4wNmEuODUuODUsMCwwLDAtLjg1Ljg4LjkxLjkxLDAsMCwwLC45MS44OC44OC44OCwwLDEsMCwwLTEuNzZaIiBj'@;
put 'bGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMi41OSwxMWEuODguODgsMCwwLDAtMS4yNSwxLjI0bDEuMSwxLjFIMjcuNTNhLjg4Ljg4LDAsMSwwLDAsMS43Nmg0LjlsLTEuMDksMS4wOWEuODguODgsMCwwLDAsMS4y'@;
put 'NSwxLjI0bDMuMjEtMy4yMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI0LjUsMTUuMDdhLjg4Ljg4LDAsMSwwLDAtMS43NmgtLjU4YS44OC44OCwwLDEsMCwwLDEuNzZaIiBjbGFzcz0iY2xyLWktb3V0bGlu'@;
put 'ZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMS45LDE0LjI3YS44NS44NSwwLDAsMC0uODUtLjg4SDIxYS44OC44OCwwLDEsMCwwLDEuNzZBLjkxLjkxLDAsMCwwLDIxLjksMTQuMjdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5l'@;
put 'LXBhdGgtNiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMC4zNiwyMy42NWMwLC4xMywwLC4yNiwwLC4zOWEzLjc3LDMuNzcsMCwwLDEtMy42MiwzLjg5SDcuMjhhNS4zMiw1LjMyLDAsMCwxLTUuMTMtNS40OEE1LjMyLDUuMzIsMCwwLDEsNy4yOCwxN0g4LjkxTDksMTYuMTJhOC45Miw4'@;
put 'LjkyLDAsMCwxLDguNjItOGguMDhhOC40OSw4LjQ5LDAsMCwxLDYuNTYsMy4yOWgyLjM3YTEwLjU1LDEwLjU1LDAsMCwwLTguOTEtNS4yNWgtLjExQTEwLjgyLDEwLjgyLDAsMCwwLDcuMjIsMTVhNy4yOCw3LjI4LDAsMCwwLTcsNy40Myw3LjI3LDcuMjcsMCwwLDAsNy4wOCw3LjQzSDI2Ljc3'@;
put 'QTUuNzIsNS43MiwwLDAsMCwzMi4zNSwyNGEzLjc3LDMuNzcsMCwwLDAsMC0uMzlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNyIgLz5cbiAgICAgICAgJykseS5DbHJTaGFwZURlcGxveT0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0'@;
put 'bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMzLDJIMjIuMWExLDEsMCwwLDAsMCwyaDguNTNsLTguODIsOWExLDEsMCwxLDAsMS40MywxLjRMMzIsNS40NlYxMy45YTEsMSwwLDAsMCwyLDBWM0ExLDEsMCwwLDAsMzMsMloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHIt'@;
put 'aS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMTEuNTQsMTAuNzNsLTksNS4xN2ExLDEsMCwwLDAtLjUuODd2MTFhMSwxLDAsMCwwLC41Ljg3bDksNS4xNWExLDEsMCwwLDAsMSwwbDktNS4xNWExLDEsMCwwLDAsLjUtLjg3di0xMWExLDEsMCwwLDAtLjUtLjg3bC05LTUuMTdB'@;
put 'MSwxLDAsMCwwLDExLjU0LDEwLjczWk0xMSwzMS4wOGwtNy00VjE4LjQ0bDcsNFpNMTIsMjEsNC44MSwxNi44NywxMiwxMi43OGw3LjIxLDQuMTJabTgsNi4wOS03LDRWMjIuNDRsNy00WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgt'@;
put 'MSIgZD0iTTMzLDJIMjIuMWExLDEsMCwwLDAsMCwyaDguNTNsLTguODIsOWExLDEsMCwxLDAsMS40MywxLjRMMzIsNS40NlYxMy45YTEsMSwwLDAsMCwyLDBWM0ExLDEsMCwwLDAsMzMsMloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRo'@;
put 'LTIiIGQ9Ik0xMi40NiwxMC43M2ExLDEsMCwwLDAtMSwwbC04LjY4LDVMMTIsMjFsOS4xOS01LjI2WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgZD0iTTIsMjcuNzNhMSwxLDAsMCwwLC41Ljg3TDExLDMzLjQ2di0xMUwyLDE3'@;
put 'LjI4WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNCIgZD0iTTEzLDMzLjQ2bDguNS00Ljg2YTEsMSwwLDAsMCwuNS0uODdWMTcuMjlsLTksNS4xNVoiLz5cbiAgICAgICAgJykseS5DbHJTaGFwZUhlbGl4PSgwLGcuY2xySWNvblNW'@;
put 'RykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNOC44OCwxMy4wN2EuOS45LDAsMCwxLS40OS0xLjY2bDguOTMtNS43M2EuOS45LDAsMSwxLDEsMS41Mkw5LjM3LDEyLjkyQS45LjksMCwwLDEsOC44OCwxMy4wN1oiLz5cbiAgICAgICAgICAg'@;
put 'IDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMTMuMjUsMTUuMTFhLjkuOSwwLDAsMS0uNDktMS42NkwxOCwxMC4wOGEuOS45LDAsMSwxLDEsMS41MkwxMy43NCwxNUEuOS45LDAsMCwxLDEzLjI1LDE1LjExWiIvPlxuICAgICAgICAgICAgPHBh'@;
put 'dGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIGQ9Ik0xOS43MiwzMC4yM2EuOS45LDAsMCwxLS40OS0xLjY2bDguOTMtNS43M2EuOS45LDAsMCwxLDEsMS41MkwyMC4yLDMwLjA5QS45LjksMCwwLDEsMTkuNzIsMzAuMjNaIi8+XG4gICAgICAgICAgICA8cGF0'@;
put 'aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgZD0iTTE4LjkyLDI1Ljk0YS45LjksMCwwLDEtLjQ5LTEuNjZsNS4yNS0zLjM3YS45LjksMCwxLDEsMSwxLjUxTDE5LjQsMjUuOEEuODkuODksMCwwLDEsMTguOTIsMjUuOTRaIi8+XG4gICAgICAgICAgICA8cGF0'@;
put 'aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgZD0iTTIxLjU2LDUuNjlhMy41OSwzLjU5LDAsMCwxLC4xNSwzLjUzTDE4LjgzLDE1aDIuMjVsMi40My00Ljg3YTUuNjEsNS42MSwwLDAsMC01LTguMTRIMTMuMjZsLTEsMmg2LjIyQTMuNjEsMy42MSwwLDAsMSwy'@;
put 'MS41Niw1LjY5WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMi45MSwyMC43OEE1LjUzLDUuNTMsMCwwLDAsMjcuNjYsMTdIOS4zMWEzLjU0LDMuNTQsMCwwLDEtMy41Ni0zLjY3LDMuNjEsMy42MSwwLDAsMSwu'@;
put 'NDItMS41NGw0LjI2LTguNDlhMSwxLDAsMSwwLTEuNzktLjlMNC40LDEwLjg0QTUuNjcsNS42NywwLDAsMCw0LDE1LjIyLDUuNTMsNS41MywwLDAsMCw5LjI4LDE5aDcuNmwtMy40NCw2Ljg3YTUuNjQsNS42NCwwLDAsMCwxLjUsNi45MkE1LjM4LDUuMzgsMCwwLDAsMTguNDEsMzRoNS4yNWwx'@;
put 'LTJIMTguNDNhMy41OCwzLjU4LDAsMCwxLTMuMjItNS4yMUwxOS4xMSwxOWg4LjU0YTMuNDIsMy40MiwwLDAsMSwyLjE1LjcxLDMuNTcsMy41NywwLDAsMSwxLDQuNDNsLTQuMTIsOC4yMmExLDEsMCwxLDAsMS43OS45bDQuMDYtOC4xQTUuNjcsNS42NywwLDAsMCwzMi45MSwyMC43OFoiLz5c'@;
put 'biAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zMi4xNiwxOS42M0E1LjU1LDUuNTUsMCwwLDAsMjcuNDIsMTdIMTAuMDZhNC4zNiw0LjM2LDAsMCwxLTMuNjctMiw0LjA3LDQuMDcsMCwwLDEtLjE5LTQuMTNsMy42Mi03LDEuNDIs'@;
put 'MS42My0yLjc0LDUuMyw4Ljg0LTUuNjZhLjkxLjkxLDAsMCwxLDEsMS41M0w3Ljg0LDEzLjM4YTIuMTMsMi4xMywwLDAsMCwuMjQuNTIsMi4yOCwyLjI4LDAsMCwwLDEuNjUsMUwxOC4xMSw5LjVhLjkxLjkxLDAsMCwxLDEsMS41MkwxMywxNC45NEgyMC44bDIuNDEtNC44MmE1LjYsNS42LDAs'@;
put 'MCwwLTUtOC4xMkg5YTEsMSwwLDAsMC0uOS41NkwzLjg4LDEwLjg5YTUuNiw1LjYsMCwwLDAsNSw4LjEyaDcuNjVsLTMuNDMsNi44N2E1LjYsNS42LDAsMCwwLDUsOC4xMmg5LjI4YTEsMSwwLDAsMCwuOTMtLjY1bDQuMTQtOC4yNEE1LjU4LDUuNTgsMCwwLDAsMzIuMTYsMTkuNjNaTTE3Ljc1'@;
put 'LDI1LjU3QS45MS45MSwwLDAsMSwxOCwyNC4zMWw2LTMuODhBLjkxLjkxLDAsMSwxLDI1LDIybC02LDMuODhhLjkxLjkxLDAsMCwxLTEuMjYtLjI3Wk0yOSwyNC4zNGwtOSw1Ljc4YS45MS45MSwwLDEsMS0xLTEuNTNsOS01Ljc4YS45MS45MSwwLDEsMSwxLDEuNTNaIi8+XG4gICAgICAgICcp'@;
put 'LHkuQ2xyU2hhcGVGbGFzaz0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzEuNDMsMjcuMjgsMjMsMTQuODRWNGgxYTEsMSwwLDAsMCwwLTJIMTJhMSwxLDAsMCwwLDAsMmgxVjE0Ljg0TDQuNTEsMjcuMzZBNC4yOSw0LjI5LDAsMCwwLDUsMzIuOCw0LjM4LDQuMzgsMCwwLDAsOC4xNSwz'@;
put 'NEgyOGE0LjI0LDQuMjQsMCwwLDAsMy40Mi02LjcyWk0yOS44NSwzMWEyLjYyLDIuNjIsMCwwLDEtMiwxSDhhMi4yLDIuMiwwLDAsMS0yLjA2LTEuNDEsMi42OCwyLjY4LDAsMCwxLC4yOS0yLjE3bDMtNC40NCwxNCwwLTEuMzEtMkgxMC41N0wxNSwxNS40NlY0aDZWMTUuNDZsOC44NCwxMy4w'@;
put 'NUEyLjIzLDIuMjMsMCwwLDEsMjkuODUsMzFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMS40OSwyNy40LDIzLDE0Ljk0VjRoMWExLDEsMCwwLDAsMC0ySDEyLjA4YTEsMSwwLDAsMCwwLDJIMTNWMTQuOTRM'@;
put 'NC41OCwyNy4zMWE0LjMxLDQuMzEsMCwwLDAtLjc4LDNBNC4yMyw0LjIzLDAsMCwwLDgsMzRIMjcuODZBNC4zNiw0LjM2LDAsMCwwLDMxLDMyLjgsNC4yMyw0LjIzLDAsMCwwLDMxLjQ5LDI3LjRaTTE1LDE1LjQ5VjRoNlYxNS40OUwyNi4xNSwyM0g5Ljg1WiIgY2xhc3M9ImNsci1pLXNvbGlk'@;
put 'IGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgJykseS5DbHJTaGFwZUFkbWluaXN0cmF0b3I9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE0LjY4LDE0LjgxYTYuNzYsNi43NiwwLDEsMSw2Ljc2LTYuNzVBNi43Nyw2Ljc3LDAsMCwxLDE0LjY4LDE0LjgxWm0wLTExLjUxYTQu'@;
put 'NzYsNC43NiwwLDEsMCw0Ljc2LDQuNzZBNC43Niw0Ljc2LDAsMCwwLDE0LjY4LDMuM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE2LjQyLDMxLjY4QTIuMTQsMi4xNCwwLDAsMSwxNS44LDMwSDRWMjQuMjJh'@;
put 'MTQuODEsMTQuODEsMCwwLDEsMTEuMDktNC42OGwuNzIsMGEyLjIsMi4yLDAsMCwxLC42Mi0xLjg1bC4xMi0uMTFjLS40NywwLTEtLjA2LTEuNDYtLjA2QTE2LjQ3LDE2LjQ3LDAsMCwwLDIuMiwyMy4yNmExLDEsMCwwLDAtLjIuNlYzMGEyLDIsMCwwLDAsMiwySDE2LjdaIiBjbGFzcz0iY2xy'@;
put 'LWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NywxNi4yOWEuMzcuMzcsMCwwLDEsLjE1LDAsLjQyLjQyLDAsMCwwLS4xNSwwWiIgIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPlxuICAgICAg'@;
put 'ICAgICAgPHBhdGggZD0iTTMzLjY4LDIzLjMybC0yLS42MWE3LjIxLDcuMjEsMCwwLDAtLjU4LTEuNDFsMS0xLjg2QS4zOC4zOCwwLDAsMCwzMiwxOWwtMS40NS0xLjQ1YS4zNi4zNiwwLDAsMC0uNDQtLjA3bC0xLjg0LDFhNy4xNSw3LjE1LDAsMCwwLTEuNDMtLjYxbC0uNjEtMmEuMzYuMzYs'@;
put 'MCwwLDAtLjM2LS4yNEgyMy44MmEuMzYuMzYsMCwwLDAtLjM1LjI2bC0uNjEsMmE3LDcsMCwwLDAtMS40NC42bC0xLjgyLTFhLjM1LjM1LDAsMCwwLS40My4wN0wxNy42OSwxOWEuMzguMzgsMCwwLDAtLjA2LjQ0bDEsMS44MkE2Ljc3LDYuNzcsMCwwLDAsMTgsMjIuNjlsLTIsLjZhLjM2LjM2'@;
put 'LDAsMCwwLS4yNi4zNXYyLjA1QS4zNS4zNSwwLDAsMCwxNiwyNmwyLC42MWE3LDcsMCwwLDAsLjYsMS40MWwtMSwxLjkxYS4zNi4zNiwwLDAsMCwuMDYuNDNsMS40NSwxLjQ1YS4zOC4zOCwwLDAsMCwuNDQuMDdsMS44Ny0xYTcuMDksNy4wOSwwLDAsMCwxLjQuNTdsLjYsMmEuMzguMzgsMCww'@;
put 'LDAsLjM1LjI2aDIuMDVhLjM3LjM3LDAsMCwwLC4zNS0uMjZsLjYxLTIuMDVhNi45Miw2LjkyLDAsMCwwLDEuMzgtLjU3bDEuODksMWEuMzYuMzYsMCwwLDAsLjQzLS4wN0wzMiwzMC40QS4zNS4zNSwwLDAsMCwzMiwzMGwtMS0xLjg4YTcsNywwLDAsMCwuNTgtMS4zOWwyLS42MWEuMzYuMzYs'@;
put 'MCwwLDAsLjI2LS4zNVYyMy42N0EuMzYuMzYsMCwwLDAsMzMuNjgsMjMuMzJaTTI0Ljg1LDI4YTMuMzQsMy4zNCwwLDEsMSwzLjMzLTMuMzNBMy4zNCwzLjM0LDAsMCwxLDI0Ljg1LDI4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+XG4gICAgICAgICAg'@;
put 'ICA8Y2lyY2xlIGN4PSIxNC42NyIgY3k9IjguMyIgcj0iNiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNi40NCwzMS44MmEyLjE1LDIuMTUsMCwwLDEtLjM4LTIuNTVsLjUzLTEtMS4wOS0uMzNBMi4xNCwyLjE0LDAs'@;
put 'MCwxLDE0LDI1Ljg0VjIzLjc5YTIuMTYsMi4xNiwwLDAsMSwxLjUzLTIuMDdsMS4wOS0uMzMtLjUyLTFhMi4xNywyLjE3LDAsMCwxLC4zNS0yLjUyLDE4LjkyLDE4LjkyLDAsMCwwLTIuMzItLjE2QTE1LjU4LDE1LjU4LDAsMCwwLDIsMjMuMDd2Ny43NWExLDEsMCwwLDAsMSwxSDE2LjQ0WiIg'@;
put 'Y2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy43LDIzLjQ2bC0yLS42YTYuNzMsNi43MywwLDAsMC0uNTgtMS40MmwxLTEuODZhLjM1LjM1LDAsMCwwLS4wNy0uNDNsLTEuNDUtMS40NmEuMzguMzgsMCwwLDAtLjQzLS4w'@;
put 'N2wtMS44NSwxYTcuNzQsNy43NCwwLDAsMC0xLjQzLS42bC0uNjEtMmEuMzguMzgsMCwwLDAtLjM2LS4yNUgyMy44NGEuMzguMzgsMCwwLDAtLjM1LjI2bC0uNiwyYTYuODUsNi44NSwwLDAsMC0xLjQ1LjYxbC0xLjgxLTFhLjM4LjM4LDAsMCwwLS40NC4wNmwtMS40NywxLjQ0YS4zNy4zNyww'@;
put 'LDAsMC0uMDcuNDRsMSwxLjgyQTcuMjQsNy4yNCwwLDAsMCwxOCwyMi44M2wtMiwuNjFhLjM2LjM2LDAsMCwwLS4yNi4zNXYyLjA1YS4zNi4zNiwwLDAsMCwuMjYuMzVsMiwuNjFhNy4yOSw3LjI5LDAsMCwwLC42LDEuNDFsLTEsMS45YS4zNy4zNywwLDAsMCwuMDcuNDRMMTkuMTYsMzJhLjM4'@;
put 'LjM4LDAsMCwwLC40NC4wNmwxLjg3LTFhNy4wOSw3LjA5LDAsMCwwLDEuNC41N2wuNiwyLjA1YS4zOC4zOCwwLDAsMCwuMzYuMjZoMi4wNWEuMzguMzgsMCwwLDAsLjM1LS4yNmwuNi0yLjA1YTYuNjgsNi42OCwwLDAsMCwxLjM4LS41N2wxLjg5LDFhLjM4LjM4LDAsMCwwLC40NC0uMDZMMzIs'@;
put 'MzAuNTVhLjM4LjM4LDAsMCwwLC4wNi0uNDRsLTEtMS44OGE2LjkyLDYuOTIsMCwwLDAsLjU3LTEuMzhsMi0uNjFhLjM5LjM5LDAsMCwwLC4yNy0uMzVWMjMuODJBLjQuNCwwLDAsMCwzMy43LDIzLjQ2Wm0tOC44Myw0LjcyYTMuMzQsMy4zNCwwLDEsMSwzLjMzLTMuMzRBMy4zNCwzLjM0LDAs'@;
put 'MCwxLDI0Ljg3LDI4LjE4WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgLz5cbiAgICAgICAgJykseS5DbHJTaGFwZUhhcmREcml2ZT0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzQsOGEyLDIsMCwwLDAtMi0ySDRBMiwyLDAsMCwwLDIsOFYyOGEyLDIsMCww'@;
put 'LDAsMiwySDMyYTIsMiwwLDAsMCwyLTJaTTMyLDI4SDRWOEgzMlYyOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iNi4yMSIgY3k9IjEwLjI1IiByPSIxLjI1IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHIt'@;
put 'aS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjI5LjgxIiBjeT0iMTAuMjUiIHI9IjEuMjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iNi4yMSIgY3k9IjI1LjQyIiByPSIx'@;
put 'LjI1IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjI5LjgxIiBjeT0iMjUuNDIiIHI9IjEuMjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiAvPlxuICAgICAgICAgICAgPHBh'@;
put 'dGggZD0iTTExLjg4LDE4LjA4YTMuNTksMy41OSwwLDEsMCwzLjU5LTMuNTksMy44NCwzLjg0LDAsMCwwLS45MS4xM0wxNSwxNi4xNmEyLjA4LDIuMDgsMCwwLDEsLjUtLjA3LDIsMiwwLDEsMS0yLDIsMS42NCwxLjY0LDAsMCwxLC4wOC0uNUwxMiwxNy4xNkEzLjUzLDMuNTMsMCwwLDAsMTEu'@;
put 'ODgsMTguMDhaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNS40NywyNS43M2E3LjY2LDcuNjYsMCwwLDEtNy42NS03LjY1LDcuNTUsNy41NSwwLDAsMSwuMjctMkw2LjU0LDE1LjdhOS4yNCw5LjI0LDAsMCww'@;
put 'LDE3LjgsNC45NUgyMi42NkE3LjY0LDcuNjQsMCwwLDEsMTUuNDcsMjUuNzNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNyIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOC4yMiwxNy44M2EuOC44LDAsMCwwLS44LS44SDI0LjY2YTkuMjYsOS4yNiwwLDAs'@;
put 'MC05LjE5LTguMiw5LjM2LDkuMzYsMCwwLDAtMi4zOC4zMmwuNDIsMS41NGE3Ljg2LDcuODYsMCwwLDEsMi0uMjZBNy42Niw3LjY2LDAsMCwxLDIzLDE3SDIwLjkyYS44LjgsMCwwLDAsMCwxLjZoNi41QS44LjgsMCwwLDAsMjguMjIsMTcuODNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHIt'@;
put 'aS1vdXRsaW5lLXBhdGgtOCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMiw2SDRBMiwyLDAsMCwwLDIsOFYyOGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWOEEyLDIsMCwwLDAsMzIsNlpNMTIsMTcuMTZsMS41NC40MmExLjY0LDEuNjQsMCwwLDAtLjA4LjUsMiwyLDAsMSww'@;
put 'LDItMiwyLjA4LDIuMDgsMCwwLDAtLjUuMDdsLS40MS0xLjU0YTMuODQsMy44NCwwLDAsMSwuOTEtLjEzLDMuNTksMy41OSwwLDEsMS0zLjU5LDMuNTlBMy41MywzLjUzLDAsMCwxLDEyLDE3LjE2Wk01LjMxLDhBMS4yNSwxLjI1LDAsMSwxLDQuMDYsOS4yNSwxLjI1LDEuMjUsMCwwLDEsNS4z'@;
put 'MSw4Wm0wLDIwLjA2YTEuMjUsMS4yNSwwLDEsMSwxLjI1LTEuMjVBMS4yNSwxLjI1LDAsMCwxLDUuMzEsMjguMDZabTEwLjE2LS43M0E5LjIyLDkuMjIsMCwwLDEsNi41NCwxNS43bDEuNTUuNDFhNy41NSw3LjU1LDAsMCwwLS4yNywyLDcuNjQsNy42NCwwLDAsMCwxNC44NCwyLjU3aDEuNjhB'@;
put 'OS4yNSw5LjI1LDAsMCwxLDE1LjQ3LDI3LjMzWm0xMi04LjdoLTYuNWEuOC44LDAsMCwxLDAtMS42SDIzYTcuNjYsNy42NiwwLDAsMC03LjU3LTYuNiw3Ljg2LDcuODYsMCwwLDAtMiwuMjZsLS40Mi0xLjU0YTkuMzYsOS4zNiwwLDAsMSwyLjM4LS4zMkE5LjI2LDkuMjYsMCwwLDEsMjQuNjYs'@;
put 'MTdoMi43NmEuOC44LDAsMCwxLDAsMS42Wm0zLjM5LDkuNDNhMS4yNSwxLjI1LDAsMSwxLDEuMjUtMS4yNUExLjI1LDEuMjUsMCwwLDEsMzAuODEsMjguMDZabTAtMTcuNTZhMS4yNSwxLjI1LDAsMSwxLDEuMjUtMS4yNUExLjI1LDEuMjUsMCwwLDEsMzAuODEsMTAuNVoiIGNsYXNzPSJjbHIt'@;
put 'aS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+XG4gICAgICAgICcpLHkuQ2xyU2hhcGVIYXJkRHJpdmVEaXNrcz0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjYsNS43NEExLjc0LDEuNzQsMCwwLDAsMjQuMjYsNEgzLjc0QTEuNzQsMS43NCwwLDAsMCwyLDUuNzRWMjAuMjZBMS43'@;
put 'NCwxLjc0LDAsMCwwLDMuNzQsMjJINFY2SDI2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAsOS43NEExLjc0LDEuNzQsMCwwLDAsMjguMjYsOEg3Ljc0QTEuNzQsMS43NCwwLDAsMCw2LDkuNzRWMjQuMjZB'@;
put 'MS43NCwxLjc0LDAsMCwwLDcuNzQsMjZIOFYxMEgzMFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLjI2LDEySDExLjc0QTEuNzQsMS43NCwwLDAsMCwxMCwxMy43NFYyOC4yNkExLjc0LDEuNzQsMCwwLDAs'@;
put 'MTEuNzQsMzBIMzIuMjZBMS43NCwxLjc0LDAsMCwwLDM0LDI4LjI2VjEzLjc0QTEuNzQsMS43NCwwLDAsMCwzMi4yNiwxMlpNMzIsMjhIMTJWMTRIMzJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOS45NCwy'@;
put 'My42OGEyLjY0LDIuNjQsMCwxLDAtMi43LTIuNjNBMi42NywyLjY3LDAsMCwwLDE5Ljk0LDIzLjY4Wm0wLTMuODdhMS4yNCwxLjI0LDAsMSwxLTEuMjksMS4yNEExLjI3LDEuMjcsMCwwLDEsMTkuOTQsMTkuODFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIg'@;
put 'Lz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOS45NCwxNi4yMmE0LjkzLDQuOTMsMCwwLDEsNC45NSw0LjM1SDIzLjcxVjIyaDQuNDFhLjcuNywwLDAsMCwwLTEuNEgyNi4zMWE2LjMzLDYuMzMsMCwwLDAtNi4zNy01Ljc1LDYuNTgsNi41OCwwLDAsMC0xLjQ4LjE3bC4zNSwxLjM3QTQuNzMs'@;
put 'NC43MywwLDAsMSwxOS45NCwxNi4yMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE5Ljk0LDI3LjI3YTYuNDIsNi40MiwwLDAsMCw1LjY3LTMuMzVIMjMuOTNhNSw1LDAsMCwxLTQsMS45NSw0LjkxLDQuOTEs'@;
put 'MCwwLDEtNS00LjgyLDUuMTYsNS4xNiwwLDAsMSwuMDgtLjc5TDEzLjYzLDIwYTcsNywwLDAsMC0uMDksMUE2LjMyLDYuMzIsMCwwLDAsMTkuOTQsMjcuMjdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNiw1'@;
put 'Ljc0QTEuNzQsMS43NCwwLDAsMCwyNC4yNiw0SDMuNzRBMS43NCwxLjc0LDAsMCwwLDIsNS43NFYyMC4yNkExLjc0LDEuNzQsMCwwLDAsMy43NCwyMkg0VjZIMjZaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLDku'@;
put 'NzRBMS43NCwxLjc0LDAsMCwwLDI4LjI2LDhINy43NEExLjc0LDEuNzQsMCwwLDAsNiw5Ljc0VjI0LjI2QTEuNzQsMS43NCwwLDAsMCw3Ljc0LDI2SDhWMTBIMzBaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE5LjYy'@;
put 'LDIyLjZBMS41NSwxLjU1LDAsMSwwLDE4LDIxLjA1LDEuNiwxLjYsMCwwLDAsMTkuNjIsMjIuNloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIuMjYsMTJIMTEuNzRBMS43NCwxLjc0LDAsMCwwLDEwLDEzLjc0VjI4'@;
put 'LjI2QTEuNzQsMS43NCwwLDAsMCwxMS43NCwzMEgzMi4yNkExLjc0LDEuNzQsMCwwLDAsMzQsMjguMjZWMTMuNzRBMS43NCwxLjc0LDAsMCwwLDMyLjI2LDEyWk0xOS42MiwxNy43NGEzLjMxLDMuMzEsMCwxLDEtMy4zOCwzLjMxQTMuMzUsMy4zNSwwLDAsMSwxOS42MiwxNy43NFptMCwxMS4x'@;
put 'M2E3Ljk0LDcuOTQsMCwwLDEtOC03LjgyLDcuODMsNy44MywwLDAsMSwuMTEtMS4yOWwxLjc1LjNhNS4zNiw1LjM2LDAsMCwwLS4xMSwxLDYuMTgsNi4xOCwwLDAsMCw2LjI4LDYuMDYsNi4zNSw2LjM1LDAsMCwwLDUtMi40NmgyLjFBOC4wNiw4LjA2LDAsMCwxLDE5LjYyLDI4Ljg3Wk0yOS44'@;
put 'OSwyMi4ySDI0LjM2VjIwLjQ0aDEuNDhBNi4xOSw2LjE5LDAsMCwwLDE5LjYyLDE1YTYuNDgsNi40OCwwLDAsMC0xLjQxLjE2bC0uNDUtMS43YTguMTYsOC4xNiwwLDAsMSwxLjg2LS4yMiw4LDgsMCwwLDEsOCw3LjIxaDIuMjZhLjg4Ljg4LDAsMCwxLDAsMS43NloiIGNsYXNzPSJjbHItaS1z'@;
put 'b2xpZCBjbHItaS1zb2xpZC1wYXRoLTQiIC8+XG4gICAgICAgICcpLHkuQ2xyU2hhcGVOVk1lPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yNywyMlYxNGEyLDIsMCwwLDAtMi0ySDExYTIsMiwwLDAsMC0yLDJ2OGEyLDIsMCwwLDAsMiwySDI1QTIsMiwwLDAsMCwyNywyMlpNMTEsMTRI'@;
put 'MjV2OEgxMVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTkiIHk9IjYiIHdpZHRoPSI0IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAg'@;
put 'ICAgPHJlY3QgeD0iMjUuMDEiIHk9IjYiIHdpZHRoPSIxLjk3IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTUuOCw4SDE2Ljg3VjZoLTExTDcuNzgsNC4wOGExLDEsMCwwLDAsMC0xLjQyLDEs'@;
put 'MSwwLDAsMC0xLjQxLDBMMiw3LDYuMzcsMTEuNGExLDEsMCwwLDAsMS40MSwwLDEsMSwwLDAsMCwwLTEuNDFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOS42MSwyNC42OGExLDEsMCwwLDAtMS40MSwwLDEs'@;
put 'MSwwLDAsMCwwLDEuNDJMMzAuMSwyOEgxOXYySDMwLjJsLTIsMmExLDEsMCwwLDAsMCwxLjQxLDEsMSwwLDAsMCwuNy4yOSwxLDEsMCwwLDAsLjcxLS4yOUwzNCwyOS4wNVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiAvPlxuICAgICAgICAgICAgPHJlY3Qg'@;
put 'eD0iMTMiIHk9IjI4IiB3aWR0aD0iNCIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjkiIHk9IjI4IiB3aWR0aD0iMS45NyIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1v'@;
put 'dXRsaW5lLXBhdGgtNyIgLz5cbiAgICAgICAgJykseS5DbHJTaGFwZVNTRD0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzIsNkg0QTIsMiwwLDAsMCwyLDhWMjhhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjhBMiwyLDAsMCwwLDMyLDZabTAsMjJINFY4SDMyWiIgY2xhc3M9'@;
put 'ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSI2LjIxIiBjeT0iMTAuMjUiIHI9IjEuMjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMjku'@;
put 'ODEiIGN5PSIxMC4yNSIgcj0iMS4yNSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSI2LjIxIiBjeT0iMjUuNDIiIHI9IjEuMjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAv'@;
put 'PlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMjkuODEiIGN5PSIyNS40MiIgcj0iMS4yNSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTAsMTguNjJjMS4zMi4zMSwxLjkxLjU0LDEuOTEsMS4yMnMtLjUzLDEu'@;
put 'MDktMS41NSwxLjA5YTQsNCwwLDAsMS0yLjcxLTEuMTFsLS44NiwxLjA2YTUsNSwwLDAsMCwzLjUyLDEuMzRjMiwwLDMuMS0xLDMuMS0yLjUycy0xLjE1LTIuMDUtMi44Ny0yLjQ0Yy0xLjMxLS4zLTEuOTItLjU0LTEuOTItMS4yMUExLjI1LDEuMjUsMCwwLDEsMTAsMTVhMy42OCwzLjY4LDAs'@;
put 'MCwxLDIuMzcsMWwuODEtMS4xQTQuNTgsNC41OCwwLDAsMCwxMCwxMy42OWMtMS43NCwwLTMsMS4wNS0zLDIuNDlTOC4yNiwxOC4yMiwxMCwxOC42MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE3LjgzLDIw'@;
put 'LjkzYTQsNCwwLDAsMS0yLjcxLTEuMTFsLS44NiwxLjA2YTUsNSwwLDAsMCwzLjUyLDEuMzRjMiwwLDMuMS0xLDMuMS0yLjUyUzE5LjczLDE3LjY1LDE4LDE3LjI2Yy0xLjMxLS4zLTEuOTItLjU0LTEuOTItMS4yMUExLjI1LDEuMjUsMCwwLDEsMTcuNDgsMTVhMy42OCwzLjY4LDAsMCwxLDIu'@;
put 'MzcsMWwuODEtMS4xYTQuNTYsNC41NiwwLDAsMC0zLjEyLTEuMTVjLTEuNzMsMC0zLDEuMDUtMywyLjQ5czEuMTksMiwyLjg5LDIuNDRjMS4zMi4zMSwxLjkxLjU0LDEuOTEsMS4yMlMxOC44NSwyMC45MywxNy44MywyMC45M1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUt'@;
put 'cGF0aC03IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI5LjksMThjMC0yLjQxLTEuOTItNC4xMi00LjY0LTQuMTJoLTIuOXY4LjI0aDIuOUMyOCwyMi4wOCwyOS45LDIwLjM3LDI5LjksMThabS02LTIuNzZoMS41NmEyLjc3LDIuNzcsMCwxLDEsMCw1LjUzSDIzLjg2WiIgY2xhc3M9ImNs'@;
put 'ci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTgiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIsNkg0QTIsMiwwLDAsMCwyLDhWMjhhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjhBMiwyLDAsMCwwLDMyLDZaTTUuMjEsOEExLjI1LDEuMjUsMCwxLDEsNCw5LjI1LDEu'@;
put 'MjUsMS4yNSwwLDAsMSw1LjIxLDhabTAsMjBhMS4yNSwxLjI1LDAsMSwxLDEuMjUtMS4yNUExLjI1LDEuMjUsMCwwLDEsNS4yMSwyOFptNS4wNi01Ljc4YTUsNSwwLDAsMS0zLjUyLTEuMzRsLjg2LTEuMDZhNCw0LDAsMCwwLDIuNzEsMS4xMWMxLDAsMS41NS0uNSwxLjU1LTEuMDlzLS41OS0u'@;
put 'OTEtMS45MS0xLjIyYy0xLjctLjQtMi44OS0uODktMi44OS0yLjQ0czEuMjItMi40OSwzLTIuNDlhNC41OCw0LjU4LDAsMCwxLDMuMTIsMS4xNWwtLjgxLDEuMUEzLjY4LDMuNjgsMCwwLDAsMTAsMTVhMS4yNSwxLjI1LDAsMCwwLTEuMzksMS4wOGMwLC42Ny42MS45MSwxLjkyLDEuMjEsMS43'@;
put 'Mi4zOSwyLjg3Ljk0LDIuODcsMi40NFMxMi4yNCwyMi4yMiwxMC4yNywyMi4yMlptNy41MSwwYTUsNSwwLDAsMS0zLjUyLTEuMzRsLjg2LTEuMDZhNCw0LDAsMCwwLDIuNzEsMS4xMWMxLDAsMS41NS0uNSwxLjU1LTEuMDlzLS41OS0uOTEtMS45MS0xLjIyYy0xLjctLjQtMi44OS0uODktMi44'@;
put 'OS0yLjQ0czEuMjMtMi40OSwzLTIuNDlhNC41Niw0LjU2LDAsMCwxLDMuMTIsMS4xNWwtLjgxLDEuMWEzLjY4LDMuNjgsMCwwLDAtMi4zNy0xLDEuMjUsMS4yNSwwLDAsMC0xLjM5LDEuMDhjMCwuNjcuNjEuOTEsMS45MiwxLjIxLDEuNzIuMzksMi44Ny45NCwyLjg3LDIuNDRTMTkuNzUsMjIu'@;
put 'MjIsMTcuNzgsMjIuMjJabTQuNTgtLjE0VjEzLjg0aDIuOWMyLjcyLDAsNC42NCwxLjcxLDQuNjQsNC4xMlMyOCwyMi4wOCwyNS4yNiwyMi4wOFpNMzAuNjksMjhhMS4yNSwxLjI1LDAsMSwxLDEuMjUtMS4yNUExLjI1LDEuMjUsMCwwLDEsMzAuNjksMjhabTAtMTcuNWExLjI1LDEuMjUsMCwx'@;
put 'LDEsMS4yNS0xLjI1QTEuMjUsMS4yNSwwLDAsMSwzMC42OSwxMC41WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMy44NiwxNS4yaDEuNTZhMi43NywyLjc3LDAsMSwxLDAsNS41M0gyMy44NloiIGNsYXNzPSJjbHIt'@;
put 'aS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+XG4gICAgICAgICcpLHkuQ2xyU2hhcGVCbHVldG9vdGg9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI2LjY0LDI1LjI3LDE5LDE3LjUzLDE5LDMsMjUuMjEsOS40bC01LjY1LDUuNzlMMjEsMTYuNjJsNS42OC01LjgyYTIsMiwwLDAs'@;
put 'MCwwLTIuNzhMMjAuNDgsMS43QTIuMDgsMi4wOCwwLDAsMCwxOC44NSwxLDIsMiwwLDAsMCwxNywzVjE1LjM4TDEwLjA1LDguMjdBMSwxLDAsMCwwLDguNjIsOS42NkwxNi43OSwxOCw5LjA2LDI2YTEsMSwwLDAsMCwwLDEuNDEsMSwxLDAsMCwwLC43LjI5LDEsMSwwLDAsMCwuNzItLjMxTDE3'@;
put 'LDIwLjY4VjMzYTIuMDcsMi4wNywwLDAsMCwuNzEsMS42MkEyLDIsMCwwLDAsMTksMzVhMS45NCwxLjk0LDAsMCwwLDEuNDItLjZsNi4yMy02LjM4QTIsMiwwLDAsMCwyNi42NCwyNS4yN1pNMTksMzMuMDVWMjAuMjlsNi4yMSw2LjM2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0'@;
put 'bGluZS1wYXRoLTEiIC8+XG4gIDxwYXRoIGQ9Ik0yNi41MiwyNC41MmwtNS42NS01LjgzLTEuNDYtMS41di0xMkwyMy43OSw5LjdsLTMuNiwzLjcxLDIuMjQsMi4yOSw0LjA5LTQuMjJhMi41NCwyLjU0LDAsMCwwLDAtMy41NkwyMC41NywxLjc4QTIuNTQsMi41NCwwLDAsMCwxNi4yLDMuNTVW'@;
put 'MTMuODZsLTUuNTMtNS43YTEuNiwxLjYsMCwxLDAtMi4zLDIuMjNMMTUuNzUsMThsLTcsNy4xOWExLjYsMS42LDAsMCwwLDAsMi4yNiwxLjYzLDEuNjMsMCwwLDAsMS4xMi40NSwxLjU4LDEuNTgsMCwwLDAsMS4xNS0uNDlsNS4xMS01LjI3VjMyLjQ1YTIuNTMsMi41MywwLDAsMCwxLjU5LDIu'@;
put 'MzYsMi40NCwyLjQ0LDAsMCwwLC45NS4xOSwyLjU2LDIuNTYsMCwwLDAsMS44My0uNzdsNS45NS02LjE1QTIuNTQsMi41NCwwLDAsMCwyNi41MiwyNC41MlpNMTkuNCwzMC44M1YyMS43N2w0LjM5LDQuNTNaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPicpLHku'@;
put 'Q2xyU2hhcGVCbHVldG9vdGhPZmY9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE5LDMsMjUuMjIsOS40bC01LjY2LDUuOEwyMSwxNi42M2w1LjY4LTUuODNhMiwyLDAsMCwwLDAtMi43OEwyMC40OCwxLjdBMiwyLDAsMCwwLDE4Ljg1LDEsMiwyLDAsMCwwLDE3LDN2MTEuNGwyLDJaIiBj'@;
put 'bGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNNC43Nyw1LDMuMzYsNi40MiwxNS44OSwxOSw5LjA2LDI2YTEsMSwwLDAsMCwuNzEsMS43LDEsMSwwLDAsMCwuNzItLjMxTDE3LDIwLjY4VjMyLjk0YTIuMDgsMi4wOCwwLDAsMCwuNzEsMS42M0Ey'@;
put 'LDIsMCwwLDAsMTksMzVhMiwyLDAsMCwwLDEuNDItLjZsNS40MS01LjU0LDMuNTQsMy41M0wzMC43NywzMVpNMTksMzMuMDV2LTExbDUuNDEsNS40MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0xOS4zMSw1LjE3LDIzLjcsOS43bC0z'@;
put 'LjU5LDMuNzEsMi4yNCwyLjI5LDQuMDktNC4yMmEyLjU2LDIuNTYsMCwwLDAsMC0zLjU2bC02LTYuMTRhMi41MSwyLjUxLDAsMCwwLTIuNzctLjU5LDIuNTQsMi41NCwwLDAsMC0xLjYsMi4zNnYxMGwzLjIxLDMuMjFaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAv'@;
put 'PjxwYXRoIGQ9Ik00LjUsNSwzLjA5LDYuNDIsMTUuMTcsMTguNTEsOC43LDI1LjE5QTEuNiwxLjYsMCwwLDAsOS44NSwyNy45LDEuNTcsMS41NywwLDAsMCwxMSwyNy40MWw1LjExLTUuMjdWMzIuNDVhMi41NCwyLjU0LDAsMCwwLDEuNiwyLjM2LDIuNDQsMi40NCwwLDAsMCwuOTUuMTksMi41'@;
put 'NSwyLjU1LDAsMCwwLDEuODItLjc3bDUuMTItNS4yOSwzLjQ5LDMuNDhMMzAuNSwzMVpNMTkuODEsMzAuODNWMjIuNjVsNCw0WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz4nKSx5LkNsclNoYXBlUHJvY2Vzc09uVk09KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGgg'@;
put 'ZD0iTTMzLjQ5LDI2LjI4YTEsMSwwLDAsMC0xLjItLjdsLTIuNDkuNjdhMTQuMjMsMTQuMjMsMCwwLDAsMi40LTYuNzVBMTQuNDgsMTQuNDgsMCwwLDAsMjcuMzcsNy4zNSwxLDEsMCwwLDAsMjYsNy40NGExLDEsMCwwLDAsLjA5LDEuNDEsMTIuNDUsMTIuNDUsMCwwLDEsNC4xNiwxMC40Niwx'@;
put 'Mi4xOSwxMi4xOSwwLDAsMS0yLDUuNzRMMjgsMjIuNTRhMSwxLDAsMSwwLTEuOTUuMTZsLjUsNi40NCw2LjI1LTEuNjZBMSwxLDAsMCwwLDMzLjQ5LDI2LjI4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTQuMzEsMTcuMDhhMS4wNiwx'@;
put 'LjA2LDAsMCwwLC40NC4xNiwxLDEsMCwwLDAsMS4xMi0uODVBMTIuMjEsMTIuMjEsMCwwLDEsMTguNjksNS44NEwxNi40NSw3LjM3YTEsMSwwLDAsMCwuNDcsMS43OUExLDEsMCwwLDAsMTcuNTYsOWw1LjMzLTMuNjZMMTguMzMuNzZhMSwxLDAsMSwwLTEuMzksMS4zOGwxLjcsMS43QTE0LjIs'@;
put 'MTQuMiwwLDAsMCwzLjg5LDE2LjEyLDEsMSwwLDAsMCw0LjMxLDE3LjA4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTIxLjczLDI5LjkzYTEyLDEyLDAsMCwxLTQuODQuNTEsMTIuMywxMi4zLDAsMCwxLTkuNTctNi4zbDIuNDkuOTNh'@;
put 'MSwxLDAsMCwwLC42OS0xLjg0bC00LjU5LTEuN2gwTDQuNDQsMjEsMy4zMywyNy4zNWExLDEsMCwwLDAsLjc5LDEuMTNsLjE3LDBhMSwxLDAsMCwwLDEtLjgxbC40Mi0yLjRhMTQuMywxNC4zLDAsMCwwLDExLDcuMTQsMTMuOTEsMTMuOTEsMCwwLDAsNS42My0uNiwxLDEsMCwwLDAtLjYtMS45'@;
put 'WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+PHBhdGggZD0iTTIyLDEzSDE0YTEsMSwwLDAsMC0xLDF2OGExLDEsMCwwLDAsMSwxaDhhMSwxLDAsMCwwLDEtMVYxNEExLDEsMCwwLDAsMjIsMTNabS0xLDhIMTVWMTVoNloiIGNsYXNzPSJjbHItaS1vdXRs'@;
put 'aW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPicpLHkuQ2xyU2hhcGVBc3NpZ25Vc2VyPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOCwxN2E3LjQ2LDcuNDYsMCwxLDAtNy40NS03LjQ2QTcuNDYsNy40NiwwLDAsMCwxOCwxN1pNMTgsNC4wN2E1LjQ2LDUuNDYsMCwxLDEtNS40NSw1'@;
put 'LjQ1QTUuNDYsNS40NiwwLDAsMSwxOCw0LjA3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTYsMzEuODlWMjUuNzdhMTYuMTMsMTYuMTMsMCwwLDEsMTItNSwxNi42MSwxNi42MSwwLDAsMSw4LjcxLDIuMzNsMS4zNS0xLjUxQTE4LjUz'@;
put 'LDE4LjUzLDAsMCwwLDE4LDE4Ljc0LDE3LjcsMTcuNywwLDAsMCw0LjIxLDI0LjhhMSwxLDAsMCwwLS4yMS42djYuNDlBMi4wNiwyLjA2LDAsMCwwLDYsMzRIMTguMzlsLTEuOS0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTMwLDMx'@;
put 'Ljg5LDMwLDMySDI2Ljg1bC0xLjgsMkgzMGEyLjA2LDIuMDYsMCwwLDAsMi0yLjA3VjI2LjJsLTIsMi4yM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0zNC43NiwxOC42MmExLDEsMCwwLDAtMS40MS4wOGwtMTEuNjIsMTMtNS4yLTUu'@;
put 'NTlBMSwxLDAsMCwwLDE1LjEyLDI2YTEsMSwwLDAsMC0uMDYsMS40Mmw2LjY5LDcuMkwzNC44NCwyMEExLDEsMCwwLDAsMzQuNzYsMTguNjJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz48Y2lyY2xlIGN4PSIxNy45OSIgY3k9IjEwLjM2IiByPSI2Ljgx'@;
put 'IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0xMiwyNi42NWEyLjgsMi44LDAsMCwxLDQuODUtMS44TDIwLjcxLDI5bDYuODQtNy42M0ExNi44MSwxNi44MSwwLDAsMCwxOCwxOC41NSwxNi4xMywxNi4xMywwLDAsMCw1LjUsMjRhMSwxLDAsMCww'@;
put 'LS4yLjYxVjMwYTIsMiwwLDAsMCwxLjk0LDJoOC41N2wtMy4wNy0zLjNBMi44MSwyLjgxLDAsMCwxLDEyLDI2LjY1WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz48cGF0aCBkPSJNMjguNzYsMzJhMiwyLDAsMCwwLDEuOTQtMlYyNi4yNEwyNS41NywzMloiIGNs'@;
put 'YXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIC8+PHBhdGggZD0iTTMzLjc3LDE4LjYyYTEsMSwwLDAsMC0xLjQyLjA4bC0xMS42MiwxMy01LjItNS41OUExLDEsMCwwLDAsMTQuMTIsMjZhMSwxLDAsMCwwLDAsMS40Mmw2LjY4LDcuMkwzMy44NCwyMEExLDEsMCwwLDAsMzMu'@;
put 'NzcsMTguNjJaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC00IiAvPicpLHkuQ2xyU2hhcGVBdG9tPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOCwxNC4wNWE0LDQsMCwxLDAsNCw0QTQsNCwwLDAsMCwxOCwxNC4wNVptMCw2LjQ0YTIuNDIsMi40MiwwLDEsMSwy'@;
put 'LjQyLTIuNDJBMi40MiwyLjQyLDAsMCwxLDE4LDIwLjQ5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTI0LjIzLDExLjcxYTM5LjE0LDM5LjE0LDAsMCwwLTQuNTctMy45MiwyMi44NiwyMi44NiwwLDAsMSwzLjQ4LTEuNzJjLjMyLS4x'@;
put 'Mi42Mi0uMjEuOTItLjNhMi4yOCwyLjI4LDAsMCwwLDMuODEtLjQ2LDMuMzEsMy4zMSwwLDAsMSwxLjkyLjg0YzEuMTksMS4xOSwxLjIyLDMuNTkuMSw2LjU4LjQ5LjY1Ljk0LDEuMzEsMS4zNSwyLC4xNy0uNC4zNS0uNzkuNDktMS4xOCwxLjQ3LTMuODUsMS4yOC03LS41My04Ljc4YTUuMjks'@;
put 'NS4yOSwwLDAsMC0zLjMzLTEuNDQsMi4yOSwyLjI5LDAsMCwwLTQuMzEuNTRjLS4zNy4xMS0uNzQuMjItMS4xMy4zN2EyNS43OSwyNS43OSwwLDAsMC00LjU3LDIuMzVBMjYuMjEsMjYuMjEsMCwwLDAsMTMuMjgsNC4yYy0zLjg1LTEuNDYtNy0xLjI4LTguNzcuNTNDMi44NSw2LjQsMi41OCw5'@;
put 'LjE3LDMuNjgsMTIuNTlhMi4yOCwyLjI4LDAsMCwwLDEuNTksMy42N2MuMzIuNjEuNjcsMS4yMiwxLjA2LDEuODJBMjUuNTQsMjUuNTQsMCwwLDAsNCwyMi42NmMtMS40NywzLjg0LTEuMjgsNywuNTMsOC43N2E1LjYzLDUuNjMsMCwwLDAsNC4xMiwxLjUxLDEzLjM0LDEzLjM0LDAsMCwwLDQu'@;
put 'NjUtMSwyNi4yMSwyNi4yMSwwLDAsMCw0LjU4LTIuMzVBMjUuNzksMjUuNzksMCwwLDAsMjIuNDMsMzJhMTQuMTYsMTQuMTYsMCwwLDAsMy42NS45QTIuMywyLjMsMCwwLDAsMzAuNDYsMzJhNC41NSw0LjU1LDAsMCwwLC43NC0uNTdjMS44MS0xLjgxLDItNC45My41My04Ljc3QTMyLjY4LDMy'@;
put 'LjY4LDAsMCwwLDI0LjIzLDExLjcxWk0xMi41NywzMC4wOWMtMywxLjE1LTUuNDUsMS4xMy02LjY1LS4wOHMtMS4yMy0zLjYyLS4wNy02LjY0YTIyLjc3LDIyLjc3LDAsMCwxLDEuNzEtMy40OCw0MC4xOSw0MC4xOSwwLDAsMCwzLjkyLDQuNTZjLjQzLjQzLjg3Ljg1LDEuMzEsMS4yNXEuOS0u'@;
put 'NDYsMS44My0xLjA1Yy0uNTgtLjUyLTEuMTYtMS0xLjcyLTEuNjFhMzQsMzQsMCwwLDEtNS43NC03LjQ3QTIuMjksMi4yOSwwLDAsMCw1LjUsMTEuNjloMGMtLjc1LTIuNS0uNjItNC40OS40My01LjU0YTMuNzIsMy43MiwwLDAsMSwyLjcyLS45MiwxMS40LDExLjQsMCwwLDEsMy45My44NCwy'@;
put 'Mi44NiwyMi44NiwwLDAsMSwzLjQ4LDEuNzIsMzkuMTQsMzkuMTQsMCwwLDAtNC41NywzLjkyYy0uNDQuNDQtLjg3LjktMS4yOSwxLjM2YTIwLjI3LDIwLjI3LDAsMCwwLDEsMS44NWMuNTQtLjYxLDEuMDktMS4yMSwxLjY4LTEuOGEzNi4zMywzNi4zMywwLDAsMSw1LTQuMTcsMzYuODgsMzYu'@;
put 'ODgsMCwwLDEsNC45NSw0LjE3LDM2LjI2LDM2LjI2LDAsMCwxLDQuMTcsNSwzNywzNywwLDAsMS00LjE3LDVBMzAuNjgsMzAuNjgsMCwwLDEsMTIuNTcsMzAuMDlaTTI5Ljc5LDMwbC0uMTYuMTNhMi4yNywyLjI3LDAsMCwwLTMuNS43MiwxMi41NywxMi41NywwLDAsMS0zLS43NywyMiwyMiww'@;
put 'LDAsMS0zLjQ4LTEuNzIsMzkuMTQsMzkuMTQsMCwwLDAsNC41Ny0zLjkyLDM4LjI2LDM4LjI2LDAsMCwwLDMuOTItNC41NiwyMi44OCwyMi44OCwwLDAsMSwxLjcyLDMuNDhDMzEsMjYuMzksMzEsMjguODEsMjkuNzksMzBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBh'@;
put 'dGgtMiIgLz48cGF0aCBkPSJNMjQuMjMsMTEuNzFhMzkuMTQsMzkuMTQsMCwwLDAtNC41Ny0zLjkyLDIyLjg2LDIyLjg2LDAsMCwxLDMuNDgtMS43MmMuMzItLjEyLjYyLS4yMS45Mi0uM2EyLjI4LDIuMjgsMCwwLDAsMy44MS0uNDYsMy4zMSwzLjMxLDAsMCwxLDEuOTIuODRjMS4xOSwxLjE5'@;
put 'LDEuMjIsMy41OS4xLDYuNTguNDkuNjUuOTQsMS4zMSwxLjM1LDIsLjE3LS40LjM1LS43OS40OS0xLjE4LDEuNDctMy44NSwxLjI4LTctLjUzLTguNzhhNS4yOSw1LjI5LDAsMCwwLTMuMzMtMS40NCwyLjI5LDIuMjksMCwwLDAtNC4zMS41NGMtLjM3LjExLS43NC4yMi0xLjEzLjM3YTI1Ljc5'@;
put 'LDI1Ljc5LDAsMCwwLTQuNTcsMi4zNUEyNi4yMSwyNi4yMSwwLDAsMCwxMy4yOCw0LjJjLTMuODUtMS40Ni03LTEuMjgtOC43Ny41M0MyLjg1LDYuNCwyLjU4LDkuMTcsMy42OCwxMi41OWEyLjI4LDIuMjgsMCwwLDAsMS41OSwzLjY3Yy4zMi42MS42NywxLjIyLDEuMDYsMS44MkEyNS41NCwy'@;
put 'NS41NCwwLDAsMCw0LDIyLjY2Yy0xLjQ3LDMuODQtMS4yOCw3LC41Myw4Ljc3YTUuNjMsNS42MywwLDAsMCw0LjEyLDEuNTEsMTMuMzQsMTMuMzQsMCwwLDAsNC42NS0xLDI2LjIxLDI2LjIxLDAsMCwwLDQuNTgtMi4zNUEyNS43OSwyNS43OSwwLDAsMCwyMi40MywzMmExNC4xNiwxNC4xNiww'@;
put 'LDAsMCwzLjY1LjlBMi4zLDIuMywwLDAsMCwzMC40NiwzMmE0LjU1LDQuNTUsMCwwLDAsLjc0LS41N2MxLjgxLTEuODEsMi00LjkzLjUzLTguNzdBMzIuNjgsMzIuNjgsMCwwLDAsMjQuMjMsMTEuNzFaTTEyLjU3LDMwLjA5Yy0zLDEuMTUtNS40NSwxLjEzLTYuNjUtLjA4cy0xLjIzLTMuNjIt'@;
put 'LjA3LTYuNjRhMjIuNzcsMjIuNzcsMCwwLDEsMS43MS0zLjQ4LDQwLjE5LDQwLjE5LDAsMCwwLDMuOTIsNC41NmMuNDMuNDMuODcuODUsMS4zMSwxLjI1cS45LS40NiwxLjgzLTEuMDVjLS41OC0uNTItMS4xNi0xLTEuNzItMS42MWEzNCwzNCwwLDAsMS01Ljc0LTcuNDdBMi4yOSwyLjI5LDAs'@;
put 'MCwwLDUuNSwxMS42OWgwYy0uNzUtMi41LS42Mi00LjQ5LjQzLTUuNTRhMy43MiwzLjcyLDAsMCwxLDIuNzItLjkyLDExLjQsMTEuNCwwLDAsMSwzLjkzLjg0LDIyLjg2LDIyLjg2LDAsMCwxLDMuNDgsMS43MiwzOS4xNCwzOS4xNCwwLDAsMC00LjU3LDMuOTJjLS40NC40NC0uODcuOS0xLjI5'@;
put 'LDEuMzZhMjAuMjcsMjAuMjcsMCwwLDAsMSwxLjg1Yy41NC0uNjEsMS4wOS0xLjIxLDEuNjgtMS44YTM2LjMzLDM2LjMzLDAsMCwxLDUtNC4xNywzNi44OCwzNi44OCwwLDAsMSw0Ljk1LDQuMTcsMzYuMjYsMzYuMjYsMCwwLDEsNC4xNyw1LDM3LDM3LDAsMCwxLTQuMTcsNUEzMC42OCwzMC42'@;
put 'OCwwLDAsMSwxMi41NywzMC4wOVpNMjkuNzksMzBsLS4xNi4xM2EyLjI3LDIuMjcsMCwwLDAtMy41LjcyLDEyLjU3LDEyLjU3LDAsMCwxLTMtLjc3LDIyLDIyLDAsMCwxLTMuNDgtMS43MiwzOS4xNCwzOS4xNCwwLDAsMCw0LjU3LTMuOTIsMzguMjYsMzguMjYsMCwwLDAsMy45Mi00LjU2LDIy'@;
put 'Ljg4LDIyLjg4LDAsMCwxLDEuNzIsMy40OEMzMSwyNi4zOSwzMSwyOC44MSwyOS43OSwzMFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+PGNpcmNsZSBjeD0iMTcuOTkiIGN5PSIxOC4wNyIgcj0iMy4zIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMi42NiAzLjEx'@;
put 'KSByb3RhdGUoLTkuMjIpIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPicpLHkuQ2xyU2hhcGVCYXJDb2RlPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik01LDdBMSwxLDAsMCwwLDQsOFYzMGExLDEsMCwwLDAsMiwwVjhBMSwxLDAsMCwwLDUsN1oiIGNsYXNz'@;
put 'PSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik05LDdBMSwxLDAsMCwwLDgsOFYyNmExLDEsMCwwLDAsMiwwVjhBMSwxLDAsMCwwLDksN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0xMyw3YTEs'@;
put 'MSwwLDAsMC0xLDFWMjZhMSwxLDAsMCwwLDIsMFY4QTEsMSwwLDAsMCwxMyw3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+PHBhdGggZD0iTTE3LDdhMSwxLDAsMCwwLTEsMVYyNmExLDEsMCwwLDAsMiwwVjhBMSwxLDAsMCwwLDE3LDdaIiBjbGFzcz0i'@;
put 'Y2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz48cGF0aCBkPSJNMjEsN2ExLDEsMCwwLDAtMSwxVjI2YTEsMSwwLDAsMCwyLDBWOEExLDEsMCwwLDAsMjEsN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiAvPjxwYXRoIGQ9Ik0yNSw3YTEs'@;
put 'MSwwLDAsMC0xLDFWMjZhMSwxLDAsMCwwLDIsMFY4QTEsMSwwLDAsMCwyNSw3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIC8+PHBhdGggZD0iTTI5LDdhMSwxLDAsMCwwLTEsMVYyNmExLDEsMCwwLDAsMiwwVjhBMSwxLDAsMCwwLDI5LDdaIiBjbGFzcz0i'@;
put 'Y2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNyIgLz48cGF0aCBkPSJNMzMsN2ExLDEsMCwwLDAtMSwxVjMwYTEsMSwwLDAsMCwyLDBWOEExLDEsMCwwLDAsMzMsN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC04IiAvPicpLHkuQ2xyU2hhcGVDZER2'@;
put 'ZD0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm0wLDMwQTE0LDE0LDAsMSwxLDMyLDE4LDE0LDE0LDAsMCwxLDE4LDMyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGgg'@;
put 'ZD0iTTIyLjMzLDE4YTQuNDYsNC40NiwwLDEsMC00LjQ1LDQuNDZBNC40Niw0LjQ2LDAsMCwwLDIyLjMzLDE4Wk0xNy44OCwyMC45QTIuODYsMi44NiwwLDEsMSwyMC43MywxOCwyLjg2LDIuODYsMCwwLDEsMTcuODgsMjAuOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUt'@;
put 'cGF0aC0yIiAvPjxwYXRoIGQ9Ik0xNy44OCw3LjQzSDE4VjUuODRoLS4xMkExMi4yMSwxMi4yMSwwLDAsMCw1LjY4LDE3Ljc1aDEuNkExMC42MSwxMC42MSwwLDAsMSwxNy44OCw3LjQzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+PHBhdGggZD0iTTMw'@;
put 'LjA4LDE4SDI4LjQ5djBBMTAuNjEsMTAuNjEsMCwwLDEsMTguMjUsMjguNjN2MS42QTEyLjIyLDEyLjIyLDAsMCwwLDMwLjA5LDE4UzMwLjA4LDE4LDMwLjA4LDE4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+PHBhdGggZD0iTTE4LDExVjkuNDRoLS4x'@;
put 'MmE4LjYyLDguNjIsMCwwLDAtOC42LDguMzJoMS42YTcsNywwLDAsMSw3LTYuNzJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz48cGF0aCBkPSJNMTguMjUsMjV2MS42QTguNjEsOC42MSwwLDAsMCwyNi40OCwxOHYwaC0xLjZ2MEE3LDcsMCwwLDEsMTgu'@;
put 'MjUsMjVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIgLz48cGF0aCBkPSJNMTguMTcsMS45MmExNiwxNiwwLDEsMCwxNiwxNkExNiwxNiwwLDAsMCwxOC4xNywxLjkyWk0yNi4yMywxOGgxLjU0YTkuNjEsOS42MSwwLDAsMS05LjYsOS41M0gxOFYyNmguMTdB'@;
put 'OC4wNyw4LjA3LDAsMCwwLDI2LjIzLDE4Wk02LjA1LDE4SDQuNDV2LS4wOEExMy43MiwxMy43MiwwLDAsMSwxOCw0LjIxdjEuNkExMi4xMywxMi4xMywwLDAsMCw2LjA1LDE3LjkyWm00LjA1LDBIOC41NnYtLjA4QTkuNjEsOS42MSwwLDAsMSwxOCw4LjMyVjkuODZhOC4wNyw4LjA3LDAsMCww'@;
put 'LTcuOSw4LjA2Wm00LjMyLS4wOGEzLjc1LDMuNzUsMCwxLDEsMy43NSwzLjc1QTMuNzUsMy43NSwwLDAsMSwxNC40MiwxNy45MlptMy43NSwxMy43MUgxOFYzMGguMTdBMTIuMTMsMTIuMTMsMCwwLDAsMzAuMjgsMThoMS42QTEzLjczLDEzLjczLDAsMCwxLDE4LjE3LDMxLjYzWiIgY2xhc3M9'@;
put 'ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz4nKSx5LkNsclNoYXBlQ29udGFpbmVyPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMiwzMEg0YTIsMiwwLDAsMS0yLTJWOEEyLDIsMCwwLDEsNCw2SDMyYTIsMiwwLDAsMSwyLDJWMjhBMiwyLDAsMCwxLDMyLDMwWk00LDhW'@;
put 'MjhIMzJWOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik05LDI1LjNhLjguOCwwLDAsMS0uOC0uOHYtMTNhLjguOCwwLDAsMSwxLjYsMHYxM0EuOC44LDAsMCwxLDksMjUuM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxp'@;
put 'bmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0xNC45MiwyNS4zYS44LjgsMCwwLDEtLjgtLjh2LTEzYS44LjgsMCwwLDEsMS42LDB2MTNBLjguOCwwLDAsMSwxNC45MiwyNS4zWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+PHBhdGggZD0iTTIxLDI1LjNhLjgu'@;
put 'OCwwLDAsMS0uOC0uOHYtMTNhLjguOCwwLDAsMSwxLjYsMHYxM0EuOC44LDAsMCwxLDIxLDI1LjNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz48cGF0aCBkPSJNMjcsMjUuM2EuOC44LDAsMCwxLS44LS44di0xM2EuOC44LDAsMCwxLDEuNiwwdjEzQS44'@;
put 'LjgsMCwwLDEsMjcsMjUuM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiAvPjxwYXRoIGQ9Ik0zMiw2SDRBMiwyLDAsMCwwLDIsOFYyOGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWOEEyLDIsMCwwLDAsMzIsNlpNOS42MywyNC4yM2EuNzkuNzks'@;
put 'MCwwLDEtLjgxLjc3QS43OS43OSwwLDAsMSw4LDI0LjIzVjExLjc3QS43OS43OSwwLDAsMSw4LjgyLDExYS43OS43OSwwLDAsMSwuODEuNzdabTYsMGEuNzkuNzksMCwwLDEtLjgyLjc3Ljc5Ljc5LDAsMCwxLS44MS0uNzdWMTEuNzdhLjc5Ljc5LDAsMCwxLC44MS0uNzcuNzkuNzksMCwwLDEs'@;
put 'LjgyLjc3Wm02LjIxLDBhLjc5Ljc5LDAsMCwxLS44Mi43Ny43OS43OSwwLDAsMS0uODEtLjc3VjExLjc3YS43OS43OSwwLDAsMSwuODEtLjc3Ljc5Ljc5LDAsMCwxLC44Mi43N1ptNi4xMiwwYS43OS43OSwwLDAsMS0uODIuNzcuNzkuNzksMCwwLDEtLjgxLS43N1YxMS43N2EuNzkuNzksMCww'@;
put 'LDEsLjgxLS43Ny43OS43OSwwLDAsMSwuODIuNzdaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPicpLHkuQ2xyU2hhcGVDb250YWluZXJWb2x1bWU9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTgsMTcuNThhMzIuMzUsMzIuMzUsMCwwLDAsNi4zLjkyLDQu'@;
put 'MTMsNC4xMywwLDAsMSwuOTItMS4zNywzMC45NCwzMC45NCwwLDAsMS03LjIyLTFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNNiwyOFY4LjE5Yy4zNC0uNzYsNC4zMS0yLjExLDExLTIuMTFzMTAuNjcsMS4zNSwxMSwydi4zYy0uODIu'@;
put 'NzktNC41OCwyLjA1LTExLjExLDIuMDVBMzMuNDgsMzMuNDgsMCwwLDEsOCw5LjQ0djEuNDRhMzUuNiwzNS42LDAsMCwwLDguODksMWM0LjI5LDAsOC44LS41OCwxMS4xMS0xLjgydjUuMDdhNS4zLDUuMywwLDAsMS0xLjgxLjg4SDMwVjguMTJjMC0zLjE5LTguMTctNC0xMy00cy0xMywuODUt'@;
put 'MTMsNFYyOEM0LDMwLjYzLDkuMzksMzEuNjgsMTQsMzJWMzBDOS4xMywyOS42Niw2LjI4LDI4LjYyLDYsMjhaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNOCwyNC4yOGEzMS4zLDMxLjMsMCwwLDAsNiwuODl2LTEuNGEyOC45MywyOC45'@;
put 'MywwLDAsMS02LS45M1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0zMiwxOEgxOGEyLDIsMCwwLDAtMiwyVjMyYTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYyMEEyLDIsMCwwLDAsMzIsMThaTTE4LDMyVjIwSDMyVjMyWiIg'@;
put 'Y2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+PHBhdGggZD0iTTIxLDIxLjdhLjcuNywwLDAsMC0uNy43djcuNDlhLjcuNywwLDAsMCwxLjQsMFYyMi40QS43LjcsMCwwLDAsMjEsMjEuN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0'@;
put 'aC01IiAvPjxwYXRoIGQ9Ik0yNSwyMS44MmEuNy43LDAsMCwwLS43LjdWMzBhLjcuNywwLDEsMCwxLjQsMFYyMi41MkEuNy43LDAsMCwwLDI1LDIxLjgyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIC8+PHBhdGggZD0iTTI5LDIxLjdhLjcuNywwLDAsMC0u'@;
put 'Ny43djcuNDlhLjcuNywwLDEsMCwxLjQsMFYyMi40QS43LjcsMCwwLDAsMjksMjEuN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC03IiAvPjxwYXRoIGQ9Ik0zMiwxOEgxOGEyLDIsMCwwLDAtMiwyVjMyYTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYy'@;
put 'MEEyLDIsMCwwLDAsMzIsMThaTTE4LDMyVjIwSDMyVjMyWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz48cGF0aCBkPSJNMjEsMjEuN2EuNy43LDAsMCwwLS43Ljd2Ny40OWEuNy43LDAsMCwwLDEuNCwwVjIyLjRBLjcuNywwLDAsMCwyMSwyMS43WiIgY2xhc3M9'@;
put 'ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz48cGF0aCBkPSJNMjUsMjEuODJhLjcuNywwLDAsMC0uNy43VjMwYS43LjcsMCwxLDAsMS40LDBWMjIuNTJBLjcuNywwLDAsMCwyNSwyMS44MloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIC8+PHBhdGgg'@;
put 'ZD0iTTI5LDIxLjdhLjcuNywwLDAsMC0uNy43djcuNDlhLjcuNywwLDEsMCwxLjQsMFYyMi40QS43LjcsMCwwLDAsMjksMjEuN1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTQiIC8+PHBhdGggZD0iTTE4LDE2SDI4VjguMTJjMC0xLjY4LTUuMzgtMy0xMi0zUzQsNi40'@;
put 'NCw0LDguMTJWMjhjMCwxLjUsNC4zMywyLjc1LDEwLDNWMjUuMjJhMjkuMTcsMjkuMTcsMCwwLDEtOC0xLjI5VjIyLjQ0bC4yNC4xQTI2LjYzLDI2LjYzLDAsMCwwLDE0LDIzLjgyVjIwYTQsNCwwLDAsMSwuMjktMS40N0EyOS4xOSwyOS4xOSwwLDAsMSw2LDE3LjIzVjE1Ljc1bC4yNC4wOWEy'@;
put 'OSwyOSwwLDAsMCw5LDEuMzJoMEE0LDQsMCwwLDEsMTgsMTZaTTYsMTAuNTRWOS4wNWwuMjQuMDlBMzAuMTIsMzAuMTIsMCwwLDAsMTYsMTAuNDcsMjguMzMsMjguMzMsMCwwLDAsMjYsOS4wNXYxLjVhMzIuNTMsMzIuNTMsMCwwLDEtMTAsMS4zMkEzMi40NCwzMi40NCwwLDAsMSw2LDEwLjU0'@;
put 'WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNSIgLz4nKSx5LkNsclNoYXBlRmlsZVNoYXJlPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMCw5SDE2LjQyTDE0LjExLDUuODJBMiwyLDAsMCwwLDEyLjQ5LDVINkEyLDIsMCwwLDAsNCw3VjI5YTIsMiwwLDAsMCwy'@;
put 'LDJIMzBhMiwyLDAsMCwwLDItMlYxMUEyLDIsMCwwLDAsMzAsOVptMCwyMEg2VjEzaDcuMzFhMiwyLDAsMCwwLDItMkg2VjdoNi40OWwyLjYxLDMuNTlhMSwxLDAsMCwwLC44MS40MUgzMFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0y'@;
put 'MS45MSwyMi40OGEyLjA2LDIuMDYsMCwwLDAtMS40NC42MmwtNS43Mi0yLjY2VjIwbDUuNjYtMi42NWEyLjA4LDIuMDgsMCwxLDAsLjA2LTIuOTQsMi4xMiwyLjEyLDAsMCwwLS42NCwxLjQ4di4yM2wtNS42NCwyLjY2YTIuMDgsMi4wOCwwLDEsMC0uMDgsMi45NWwuMDgtLjA4LDUuNjcsMi42'@;
put 'NnYuM2EyLjA5LDIuMDksMCwxLDAsMi4wOC0yLjFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMzAsOUgxNi40MkwxNC4xMSw1LjgyQTIsMiwwLDAsMCwxMi40OSw1SDZBMiwyLDAsMCwwLDQsN1YyOWEyLDIsMCwwLDAsMiwySDMwYTIs'@;
put 'MiwwLDAsMCwyLTJWMTFBMiwyLDAsMCwwLDMwLDlaTTYsN2g2LjQ5bDIuNzIsNEg2Wk0yMS45NCwyNi42NGEyLjA5LDIuMDksMCwwLDEtMi4xMS0yLjA2bDAtLjMtNS42Ny0yLjY2LS4wOC4wOGEyLjA4LDIuMDgsMCwxLDEsLjA4LTIuOTVsNS42NC0yLjY2di0uMjNhMi4wOCwyLjA4LDAsMSwx'@;
put 'LC41OCwxLjQ2TDE0Ljc1LDIwdi40N2w1LjcyLDIuNjZhMi4wNywyLjA3LDAsMSwxLDEuNDcsMy41NFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+JykseS5DbHJTaGFwZVFyQ29kZT0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNNS42LDRBMS42LDEuNiww'@;
put 'LDAsMCw0LDUuNlYxMmg4VjRaTTEwLDEwSDZWNmg0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTQsMzAuNEExLjYsMS42LDAsMCwwLDUuNiwzMkgxMlYyNEg0Wk02LDI2aDR2NEg2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWkt'@;
put 'b3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTI0LDMyaDYuNEExLjYsMS42LDAsMCwwLDMyLDMwLjRWMjRIMjRabTItNmg0djRIMjZaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz48cGF0aCBkPSJNMzAuNCw0SDI0djhoOFY1LjZBMS42LDEuNiwwLDAs'@;
put 'MCwzMC40LDRaTTMwLDEwSDI2VjZoNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPjxwb2x5Z29uIHBvaW50cz0iMjAgMTAgMjAgOCAxNiA4IDE2IDEyIDE4IDEyIDE4IDEwIDIwIDEwIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBh'@;
put 'dGgtNSIgLz48cmVjdCB4PSIxMiIgeT0iMTIiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02IiAvPjxyZWN0IHg9IjE0IiB5PSIxNCIgd2lkdGg9IjQiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0'@;
put 'bGluZS1wYXRoLTciIC8+PHBvbHlnb24gcG9pbnRzPSIyMCA2IDIwIDggMjIgOCAyMiA0IDE0IDQgMTQgOCAxNiA4IDE2IDYgMjAgNiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTgiIC8+PHJlY3QgeD0iNCIgeT0iMTQiIHdpZHRoPSIyIiBoZWlnaHQ9IjQiIGNs'@;
put 'YXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC05IiAvPjxwb2x5Z29uIHBvaW50cz0iMTIgMTYgMTIgMTggMTAgMTggMTAgMTQgOCAxNCA4IDE4IDYgMTggNiAyMCA0IDIwIDQgMjIgOCAyMiA4IDIwIDEwIDIwIDEwIDIyIDEyIDIyIDEyIDIwIDE0IDIwIDE0IDE2IDEyIDE2'@;
put 'IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTAiIC8+PHBvbHlnb24gcG9pbnRzPSIyMCAxNiAyMiAxNiAyMiAxOCAyNCAxOCAyNCAxNiAyNiAxNiAyNiAxNCAyMiAxNCAyMiAxMCAyMCAxMCAyMCAxMiAxOCAxMiAxOCAxNCAyMCAxNCAyMCAxNiIgY2xhc3M9ImNs'@;
put 'ci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTExIiAvPjxwb2x5Z29uIHBvaW50cz0iMTggMzAgMTQgMzAgMTQgMzIgMjIgMzIgMjIgMzAgMjAgMzAgMjAgMjggMTggMjggMTggMzAiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xMiIgLz48cG9seWdvbiBw'@;
put 'b2ludHM9IjIyIDIwIDIyIDE4IDIwIDE4IDIwIDE2IDE4IDE2IDE4IDE4IDE2IDE4IDE2IDIwIDE4IDIwIDE4IDIyIDIwIDIyIDIwIDIwIDIyIDIwIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTMiIC8+PHJlY3QgeD0iMzAiIHk9IjIwIiB3aWR0aD0iMiIgaGVp'@;
put 'Z2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTQiIC8+PHJlY3QgeD0iMjIiIHk9IjIwIiB3aWR0aD0iNiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTUiIC8+PHBvbHlnb24gcG9pbnRzPSIzMCAxNCAy'@;
put 'OCAxNCAyOCAxNiAyNiAxNiAyNiAxOCAyOCAxOCAyOCAyMCAzMCAyMCAzMCAxOCAzMiAxOCAzMiAxNiAzMCAxNiAzMCAxNCIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTE2IiAvPjxyZWN0IHg9IjIwIiB5PSIyMiIgd2lkdGg9IjIiIGhlaWdodD0iNiIgY2xhc3M9'@;
put 'ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTE3IiAvPjxwb2x5Z29uIHBvaW50cz0iMTQgMjggMTYgMjggMTYgMjYgMTggMjYgMTggMjQgMTYgMjQgMTYgMjAgMTQgMjAgMTQgMjgiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xOCIgLz4nKSx5LkNs'@;
put 'clNoYXBlVXNiPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xNC4yOSwxMS40YTEuNDksMS40OSwwLDAsMSwxLjI4LS43MmgxYTIuODksMi44OSwwLDAsMCwyLjc1LDIuMDksMywzLDAsMCwwLDAtNS45MSwyLjksMi45LDAsMCwwLTIuNjcsMS44MkgxNS41N2EzLjQ5LDMuNDksMCwwLDAt'@;
put 'MywxLjY2bC0zLDQuODNoMi4zNlptNS0yLjk0QTEuMzYsMS4zNiwwLDEsMSwxOCw5LjgxLDEuMzIsMS4zMiwwLDAsMSwxOS4zMyw4LjQ2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTM0LjMsMTcuMzdsLTYuMTEtMy42NmEuNy43LDAs'@;
put 'MCwwLS43LDAsLjcxLjcxLDAsMCwwLS4zNi42MVYxN0g2LjkyYTIuMzMsMi4zMywwLDAsMSwuMzIsMS4xNywyLjQ3LDIuNDcsMCwxLDEtMi40Ny0yLjQ2LDIuMzcsMi4zNywwLDAsMSwxLjE1LjNsLjkzLTEuNzZBNC40NCw0LjQ0LDAsMSwwLDkuMTUsMTloMy41OGw0LjE3LDYuNjVhMy40OSwz'@;
put 'LjQ5LDAsMCwwLDMsMS42NmgxLjY2djEuMjhhLjc5Ljc5LDAsMCwwLC44Ljc5aDQuNDlhLjc5Ljc5LDAsMCwwLC44LS43OXYtNC40YS43OS43OSwwLDAsMC0uOC0uOEgyMi4zNGEuOC44LDAsMCwwLS44Ljh2MS4xMkgxOS44OGExLjUxLDEuNTEsMCwwLDEtMS4yOC0uNzJMMTUuMDksMTloMTJ2'@;
put 'Mi42NmEuNjkuNjksMCwwLDAsLjM2LjYxLjY3LjY3LDAsMCwwLC4zNC4wOS42NS42NSwwLDAsMCwuMzYtLjFsNi4xMS0zLjY2YS42OS42OSwwLDAsMCwuMzQtLjZBLjcxLjcxLDAsMCwwLDM0LjMsMTcuMzdaTTIzLjE0LDI1SDI2djIuOEgyMy4xNFptNS4zOS00LjU2VjE1LjU1bDQsMi40Mloi'@;
put 'IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0zNC43MiwxNy4zN2wtNS41MS0zLjMxYS43MS43MSwwLDAsMC0xLjA3LjZWMTdIMTEuNzdsMy41Mi01LjZhMS40OSwxLjQ5LDAsMCwxLDEuMjgtLjcyaDEuNjRhMi40MSwyLjQxLDAsMCwwLDIu'@;
put 'MjUsMS42MSwyLjQ4LDIuNDgsMCwwLDAsMC00Ljk1LDIuMzgsMi4zOCwwLDAsMC0yLjEzLDEuMzRIMTYuNTdhMy40OSwzLjQ5LDAsMCwwLTMsMS42Nkw5LjQxLDE3SDhhMy40NiwzLjQ2LDAsMSwwLC4wOCwyaDUuNjRsNC4xNSw2LjYyYTMuNDksMy40OSwwLDAsMCwzLDEuNjZoMi41OXYuOTJo'@;
put 'NC40VjIzLjhoLTQuNHYxLjQ4SDIwLjg4YTEuNTEsMS41MSwwLDAsMS0xLjI4LS43MkwxNi4xMSwxOWgxMnYyLjI4YS43LjcsMCwwLDAsLjM2LjYxLjcyLjcyLDAsMCwwLC4zNC4wOS42NS42NSwwLDAsMCwuMzYtLjFsNS41Mi0zLjMxYS43LjcsMCwwLDAsMC0xLjJaIiBjbGFzcz0iY2xyLWkt'@;
put 'c29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPicpLHkuQ2xyU2hhcGVSYWRhcj0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzIsMThjMCw3LjctNi4zLDE0LTE0LDE0Yy03LjcsMC0xNC02LjMtMTQtMTRDNCwxMC42LDkuNyw0LjUsMTcuMSw0djMuN2MtNS43LDAuNS05LjksNS41LTku'@;
put 'NCwxMS4yczUuNSw5LjksMTEuMiw5LjRcblx0YzUuMy0wLjUsOS40LTQuOSw5LjQtMTAuM2gtMmMwLDQuNi0zLjcsOC4zLTguMyw4LjNzLTguMy0zLjctOC4zLTguM2MwLTQuMiwzLjEtNy44LDcuMy04LjN2NC40Yy0xLjgsMC40LTMuMSwyLTMuMSwzLjlcblx0YzAsMi4yLDEuOCw0LDQsNHM0'@;
put 'LTEuOCw0LTRjMC0xLjgtMS4zLTMuNC0zLTMuOFYyLjFDMTguNiwyLDE4LjMsMiwxOCwyQzkuMiwyLDIsOS4yLDIsMThzNy4yLDE2LDE2LDE2czE2LTcuMiwxNi0xNkgzMnogTTIwLDE4XG5cdGMwLDEuMS0wLjksMi0yLDJzLTItMC45LTItMnMwLjktMiwyLTJTMjAsMTYuOSwyMCwxOHoiIGNs'@;
put 'YXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0zMiwxOGMwLDcuNy02LjIsMTQtMTQsMTRTNCwyNS44LDQsMThjMC03LjQsNS43LTEzLjUsMTMuMS0xNHYzLjdjLTUuNywwLjUtOS44LDUuNS05LjMsMTEuMnM1LjUsOS44LDExLjIsOS4zXG5cdFx0'@;
put 'YzUuMy0wLjUsOS4zLTQuOSw5LjMtMTAuMmgtMmMwLDQuNi0zLjcsOC4zLTguMyw4LjNTOS43LDIyLjYsOS43LDE4YzAtNC4yLDMuMi03LjgsNy4zLTguMnY0LjRjLTIuMSwwLjYtMy40LDIuNy0yLjksNC45XG5cdFx0YzAuNiwyLjEsMi43LDMuNCw0LjksMi45YzIuMS0wLjYsMy40LTIuNywy'@;
put 'LjktNC45Yy0wLjQtMS40LTEuNS0yLjUtMi45LTIuOVYyYy0wLjQsMC0wLjcsMC0xLjEsMGMtOC44LDAtMTYsNy4yLTE2LDE2XG5cdFx0YzAsOC44LDcuMiwxNiwxNiwxNnMxNi03LjIsMTYtMTZjMCwwLDAsMCwwLDBIMzJ6IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0x'@;
put 'IiAvPicpLHkuQ2xyU2hhcGVJbmR1Y3Rvcj0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjQuMzEsMjUuODFjLTEuNzUsMC0zLTIuNDktMy02YTEyLjc5LDEyLjc5LDAsMCwxLDEuNzItNi43LDIuNTcsMi41NywwLDAsMC0zLjc5LDBBMTIuNzksMTIuNzksMCwwLDEsMjEsMTkuNzZjMCwz'@;
put 'LjU2LTEuMjMsNi0zLDZzLTMtMi40OS0zLTZhMTIuNzksMTIuNzksMCwwLDEsMS43Mi02LjcsMi41NywyLjU3LDAsMCwwLTMuNzksMCwxMi43OSwxMi43OSwwLDAsMSwxLjcyLDYuN2MwLDMuNTYtMS4yMyw2LTMsNnMtMy0yLjQ5LTMtNmExMi44OCwxMi44OCwwLDAsMSwxLjcxLTYuNywyLjcs'@;
put 'Mi43LDAsMCwwLTEuODktLjg3QzcuMSwxMi4xOSw1LjY5LDEzLjcsNSwxNmwtLjIzLjdIMmExLDEsMCwwLDEsMC0ySDMuMjljMS4xLTIuODMsMy4wNi00LjU1LDUuMjQtNC41NWE0LjY3LDQuNjcsMCwwLDEsMy4xNiwxLjMyLDQuNjIsNC42MiwwLDAsMSwzLjE1LTEuMzJBNC42NSw0LjY1LDAs'@;
put 'MCwxLDE4LDExLjUxYTQuNDMsNC40MywwLDAsMSw2LjMxLDAsNC42Nyw0LjY3LDAsMCwxLDMuMTYtMS4zMmMyLjE4LDAsNC4xNCwxLjcyLDUuMjQsNC41NUgzNGExLDEsMCwwLDEsMCwySDMxLjI4bC0uMjMtLjdjLS43NC0yLjM0LTIuMTUtMy44NS0zLjU4LTMuODVhMi43LDIuNywwLDAsMC0x'@;
put 'Ljg5Ljg3LDEyLjg4LDEyLjg4LDAsMCwxLDEuNzEsNi43QzI3LjI5LDIzLjMyLDI2LjA3LDI1LjgxLDI0LjMxLDI1LjgxWk0xOCwxNC45M2ExMS43MSwxMS43MSwwLDAsMC0xLDQuODNjMCwyLjU0LjY2LDMuNzUsMSw0LC4zMi0uMjcsMS0xLjQ4LDEtNEExMS43MSwxMS43MSwwLDAsMCwxOCwx'@;
put 'NC45M1ptNi4zMSwwYTExLjcxLDExLjcxLDAsMCwwLTEsNC44M2MwLDIuNTQuNjYsMy43NSwxLDQsLjMyLS4yNywxLTEuNDgsMS00QTExLjcxLDExLjcxLDAsMCwwLDI0LjMxLDE0LjkzWm0tMTIuNjIsMGExMS43MSwxMS43MSwwLDAsMC0xLDQuODNjMCwyLjU0LjY2LDMuNzUsMSw0LC4zMi0u'@;
put 'MjcsMS0xLjQ4LDEtNEExMS43MSwxMS43MSwwLDAsMCwxMS42OSwxNC45M1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPicpLHkuQ2xyU2hhcGVSZXNpc3Rvcj0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjkuNDMsMjYuMzRoMEExLjQ3LDEuNDcs'@;
put 'MCwwLDEsMjgsMjUuMjJMMjQuODYsMTMuMTUsMjEuNzQsMjUuMjJhMS40OSwxLjQ5LDAsMCwxLTEuNDUsMS4xMmgwYTEuNDksMS40OSwwLDAsMS0xLjQ2LTEuMTJMMTUuNzEsMTMuMTUsMTIuNiwyNS4yMmExLjUxLDEuNTEsMCwwLDEtMi45MSwwTDYuNTcsMTMuMTUsNS4yMiwxOC4zN0gyYTEs'@;
put 'MSwwLDAsMSwwLTJIMy42N2wxLjQ1LTUuNTlBMS40OCwxLjQ4LDAsMCwxLDYuNTcsOS42NmgwQTEuNDcsMS40NywwLDAsMSw4LDEwLjc4bDMuMTIsMTIuMDcsMy4xMi0xMi4wN2ExLjQ5LDEuNDksMCwwLDEsMS40NS0xLjEyaDBhMS40OSwxLjQ5LDAsMCwxLDEuNDYsMS4xMmwzLjEyLDEyLjA3'@;
put 'LDMuMTItMTIuMDdhMS41LDEuNSwwLDAsMSwyLjksMGwzLjEyLDEyLjA3LDEuMzUtNS4yMkgzNGExLDEsMCwwLDEsMCwySDMyLjMzbC0xLjQ1LDUuNTlBMS40OCwxLjQ4LDAsMCwxLDI5LjQzLDI2LjM0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+Jyks'@;
put 'eS5DbHJTaGFwZUNhcGFjaXRvcj0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTUsMzQuMDZhMSwxLDAsMCwxLTEtMVYzLjE1YTEsMSwwLDEsMSwyLDBWMzMuMDZBMSwxLDAsMCwxLDE1LDM0LjA2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBh'@;
put 'dGggZD0iTTIxLDM0LjA2YTEsMSwwLDAsMS0xLTFWMy4xNWExLDEsMCwxLDEsMiwwVjMzLjA2QTEsMSwwLDAsMSwyMSwzNC4wNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0xNC40NiwxOUgzYTEsMSwwLDAsMSwwLTJIMTQuNDZhMSwx'@;
put 'LDAsMCwxLDAsMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0zMywxOUgyMS41NGExLDEsMCwwLDEsMC0ySDMzYTEsMSwwLDAsMSwwLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz4nKSx5LkNs'@;
put 'clNoYXBlU3F1aWQ9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE4LDdhMSwxLDAsMCwxLTEtMVYzLjE5YTEsMSwwLDAsMSwyLDBWNkExLDEsMCwwLDEsMTgsN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0xOCwzNGExLDEsMCww'@;
put 'LDEtMS0xVjMwYTEsMSwwLDAsMSwyLDB2M0ExLDEsMCwwLDEsMTgsMzRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNNy40MSwxOGwxLjc4LTEuNzdhMSwxLDAsMSwwLTEuNDItMS40Mkw2LDE2LjU5LDQuMjMsMTQuODFhMSwxLDAsMSww'@;
put 'LTEuNDIsMS40Mkw0LjU5LDE4LDIuODEsMTkuNzdhMSwxLDAsMCwwLDAsMS40MiwxLDEsMCwwLDAsLjcxLjI5LDEsMSwwLDAsMCwuNzEtLjI5TDYsMTkuNDFsMS43NywxLjc4YTEsMSwwLDAsMCwxLjQyLDAsMSwxLDAsMCwwLDAtMS40MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91'@;
put 'dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik02LDEzLjc2bC4zNi0uMzZhMywzLDAsMCwxLDIuMTEtLjg4LDExLDExLDAsMCwxLDE5LDAsMywzLDAsMCwxLDIuMTIuODhsLjM2LjM2LjItLjJhMTMsMTMsMCwwLDAtMjQuNCwwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1w'@;
put 'YXRoLTQiIC8+PHBhdGggZD0iTTMwLDIyLjI0bC0uMzYuMzZhMywzLDAsMCwxLTIuMTIuODgsMTEsMTEsMCwwLDEtMTksMCwzLDMsMCwwLDEtMi4xMi0uODhMNiwyMi4yNGwtLjIuMmExMywxMywwLDAsMCwyNC40LDBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgt'@;
put 'NSIgLz48cGF0aCBkPSJNMzEuNDEsMThsMS43OC0xLjc3YTEsMSwwLDAsMC0xLjQyLTEuNDJMMzAsMTYuNTlsLTEuNzctMS43OGExLDEsMCwxLDAtMS40MiwxLjQyTDI4LjU5LDE4bC0xLjc4LDEuNzdhMSwxLDAsMCwwLDAsMS40MiwxLDEsMCwwLDAsLjcxLjI5LDEsMSwwLDAsMCwuNzEtLjI5'@;
put 'TDMwLDE5LjQxbDEuNzcsMS43OGExLDEsMCwwLDAsMS40MiwwLDEsMSwwLDAsMCwwLTEuNDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIgLz4nKSx5LkNsclNoYXBlSG9zdEdyb3VwPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yMS4wOCwzNGgtMTRB'@;
put 'MS4wOCwxLjA4LDAsMCwxLDYsMzNWMTJhMS4wOCwxLjA4LDAsMCwxLDEuMDgtMS4wOGgxNEExLjA4LDEuMDgsMCwwLDEsMjIuMTYsMTJWMzNBMS4wOCwxLjA4LDAsMCwxLDIxLjA4LDM0Wk04LjE2LDMxLjg4SDIwVjEzSDguMTZaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5l'@;
put 'LXBhdGgtMSIgLz5cbjxyZWN0IHg9IjEwLjA4IiB5PSIxNC45NiIgd2lkdGg9IjgiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTI2LjEsMjcuODFoLTJWOWgtMTJWN2gxM2ExLDEsMCwwLDEsMSwxWiIgY2xhc3M9ImNs'@;
put 'ci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+XG48cGF0aCBkPSJNMzAuMDgsMjNoLTJWNWgtMTFWM2gxMmExLDEsMCwwLDEsMSwxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+PHJlY3QgeD0iMTMuMDgiIHk9IjI3Ljg4IiB3aWR0aD0i'@;
put 'MiIgaGVpZ2h0PSIyLjE2IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz5cblxuPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTE1LjA4LDMxIEwxLjA4LDMxIEMwLjUxMzQyNzE5NywzMS4wMDE1NTY0IDAuMDQxOTY2'@;
put 'Mzc2NSwzMC41NjUwMTg2IDAsMzAgTDAsOSBDMCw4LjQwMzUzMjQ3IDAuNDgzNTMyNDcsNy45MiAxLjA4LDcuOTIgTDE1LjA4LDcuOTIgQzE1LjY3NjQ2NzUsNy45MiAxNi4xNiw4LjQwMzUzMjQ3IDE2LjE2LDkgTDE2LjE2LDMwIEMxNi4xMTgwMzM2LDMwLjU2NTAxODYgMTUuNjQ2NTcyOCwz'@;
put 'MS4wMDE1NTY0IDE1LjA4LDMxIFogTTQuMDgsMTEuOTYgTDQuMDgsMTMuOTYgTDEyLjA4LDEzLjk2IEwxMi4wOCwxMS45NiBMNC4wOCwxMS45NiBaIE03LjA4LDI0Ljg4IEw3LjA4LDI3LjA0IEw5LjA4LDI3LjA0IEw5LjA4LDI0Ljg4IEw3LjA4LDI0Ljg4IFoiIC8+XG48cGF0aCBjbGFzcz0i'@;
put 'Y2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNMjAuMSwyNC44MSBMMTguMSwyNC44MSBMMTguMSw2IEw2LjEsNiBMNi4xLDQgTDE5LjEsNCBDMTkuNjUyMjg0Nyw0IDIwLjEsNC40NDc3MTUyNSAyMC4xLDUgTDIwLjEsMjQuODEgWiIgLz5cbjxwYXRoIGNsYXNzPSJjbHItaS1z'@;
put 'b2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIGQ9Ik0yNC4wOCwyMCBMMjIuMDgsMjAgTDIyLjA4LDIgTDExLjA4LDIgTDExLjA4LDAgTDIzLjA4LDAgQzIzLjYzMjI4NDcsMCAyNC4wOCwwLjQ0NzcxNTI1IDI0LjA4LDEgTDI0LjA4LDIwIFoiIC8+JykseS5DbHJTaGFwZVN0b3JhZ2VBZGFwdGVy'@;
put 'PSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik02LjA2LDMwYTEsMSwwLDAsMS0xLTFWOGgtMmExLDEsMCwwLDEsMC0yaDRWMjlBMSwxLDAsMCwxLDYuMDYsMzBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICA8cGF0aCBkPSJNMzAuMDYsMjdoLTI1'@;
put 'VjloMjVhMywzLDAsMCwxLDMsM1YyNEEzLDMsMCwwLDEsMzAuMDYsMjdabS0yMy0yaDIzYTEsMSwwLDAsMCwxLTFWMTJhMSwxLDAsMCwwLTEtMWgtMjNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICA8cmVjdCB4PSIyMi4wNiIgeT0iMjAiIHdpZHRo'@;
put 'PSI2IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIi8+XG4gIDxyZWN0IHg9IjIyLjA2IiB5PSIxNCIgd2lkdGg9IjYiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiLz5cbiAgPHBhdGggZD0i'@;
put 'TTE5LjA2LDIyaC04VjIwaDdWMTRoMnY3QTEsMSwwLDAsMSwxOS4wNiwyMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01Ii8+JykseS5DbHJTaGFwZU5vZGVHcm91cD0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzMuNTMsMjEuNThsLTQuOTQtMi44M1Yx'@;
put 'My4wOWExLDEsMCwwLDAtLjUxLS44N0wyMi42NCw5LjFhMSwxLDAsMCwwLTEsMEwxNi4yLDEyLjIyYTEsMSwwLDAsMC0uNTEuODd2NS42NmwtNC45NCwyLjgzYTEsMSwwLDAsMC0uNS44N3Y2LjI0YTEsMSwwLDAsMCwuNS44Nmw1LjQ1LDMuMTJhMSwxLDAsMCwwLDEsMGw0Ljk1LTIuODMsNC45'@;
put 'NSwyLjgzYTEsMSwwLDAsMCwuNS4xNCwxLDEsMCwwLDAsLjQ5LS4xNGw1LjQ1LTMuMTJhMSwxLDAsMCwwLC41LS44NlYyMi40NUExLDEsMCwwLDAsMzMuNTMsMjEuNThaTTIyLjE0LDExLjEybDQuNDUsMi41NVYxOWwtNC40NiwyLjU2LTQuNDQtMi42VjEzLjY3Wk0xNi42OSwzMC42NWwtNC40'@;
put 'NC0yLjU0VjIzbDQuNjgtMi42OCw0LjQsMi41N1YyOFpNMzIsMjguMTFsLTQuNDQsMi41NEwyMi45MywyOFYyMi45M2w0LjQ2LTIuNTdMMzIsMjNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICA8cGF0aCBkPSJNNywyNy40M2ExLDEsMCwwLDEtMS0x'@;
put 'VjE5LjlBMSwxLDAsMCwxLDYuNSwxOWw0Ljk1LTIuODNWMTAuNTRhMSwxLDAsMCwxLC41LS44N2w1LjIxLTNhMSwxLDAsMCwxLDEuMzcuMzcsMSwxLDAsMCwxLS4zOCwxLjM3bC00LjcsMi42OHY1LjY2YTEsMSwwLDAsMS0uNTEuODdMOCwyMC40OHY1Ljk1QTEsMSwwLDAsMSw3LDI3LjQzWiIg'@;
put 'Y2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgPHBhdGggZD0iTTMsMjUuMDVhMSwxLDAsMCwxLTEtMVYxNy41M2ExLDEsMCwwLDEsLjUtLjg2bDUtMi44NFY4LjE3QTEsMSwwLDAsMSw4LDcuMzFsNS4yNS0zYTEsMSwwLDAsMSwxLDEuNzRMOS40NSw4Ljc1'@;
put 'djUuNjZhMSwxLDAsMCwxLS41MS44N0w0LDE4LjExdjUuOTRBMSwxLDAsMCwxLDMsMjUuMDVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPicpLHkuQ2xyU2hhcGVOb2Rlcz0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTAuNSwzNC4yOSwyLDI5LjM5'@;
put 'VjE5LjU4bDguNS00LjksOC41LDQuOXY5LjgxWk00LDI4LjIzLDEwLjUsMzIsMTcsMjguMjNWMjAuNzRMMTAuNSwxNyw0LDIwLjc0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgPHBhdGggZD0iTTI1LjUsMzQuMjksMTcsMjkuMzlWMTkuNThsOC41'@;
put 'LTQuOSw4LjUsNC45djkuODFaTTE5LDI4LjIzLDI1LjUsMzIsMzIsMjguMjNWMjAuNzRMMjUuNSwxNywxOSwyMC43NFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gIDxwYXRoIGQ9Ik0xOCwyMS4zMmwtOC41LTQuOVY2LjYxTDE4LDEuNzFsOC41LDQu'@;
put 'OXY5LjgxWm0tNi41LTYuMDZMMTgsMTlsNi41LTMuNzVWNy43N0wxOCw0LDExLjUsNy43N1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIi8+JykseS5DbHJTaGFwZU5hbWVzcGFjZT0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjcsNC4xOGExLDEsMCwx'@;
put 'LDAtMSwxLjczbDYsMy40N1YyNi42MmwtNiwzLjQ3YTEsMSwwLDAsMC0uMzcsMS4zNiwxLDEsMCwwLDAsMS4zNy4zN2w3LTQuMDVWOC4yM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gIDxwYXRoIGQ9Ik05LjY4LDI5LjksNCwyNi42MlY5LjM4TDku'@;
put 'NjgsNi4xYTEsMSwwLDEsMC0xLTEuNzNMMiw4LjIzVjI3Ljc3bDYuNjgsMy44NmExLDEsMCwwLDAsMS4zNy0uMzdBMSwxLDAsMCwwLDkuNjgsMjkuOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gIDxwYXRoIGQ9Ik0xMCwxMlYyNGEyLDIsMCwwLDAs'@;
put 'MiwySDI0YTIsMiwwLDAsMCwyLTJWMTJhMiwyLDAsMCwwLTItMkgxMkEyLDIsMCwwLDAsMTAsMTJabTcsMHY1SDEyVjEyWm0tNSw3aDV2NUgxMlptNyw1VjE5aDV2NVptNS03SDE5VjEyaDVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPicpLHkuQ2xyU2hh'@;
put 'cGVOb2RlPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOCwzMC42Niw3LDI0LjMzVjExLjY3TDE4LDUuMzRsMTEsNi4zM1YyNC4zM1pNOSwyMy4xOGw5LDUuMTcsOS01LjE3VjEyLjgyTDE4LDcuNjUsOSwxMi44MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0'@;
put 'aC0xIi8+JykseS5DbHJTaGFwZVBvZD0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjYsMzJIMTBhNiw2LDAsMCwxLTYtNlYxMGE2LDYsMCwwLDEsNi02SDI2YTYsNiwwLDAsMSw2LDZWMjZBNiw2LDAsMCwxLDI2LDMyWk0xMCw2YTQsNCwwLDAsMC00LDRWMjZhNCw0LDAsMCwwLDQsNEgy'@;
put 'NmE0LDQsMCwwLDAsNC00VjEwYTQsNCwwLDAsMC00LTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICA8cGF0aCBkPSJNMjYuNTYsMTVIMTUuNDRBMS40MywxLjQzLDAsMCwwLDE0LDE2LjQ0djguMTJBMS40MywxLjQzLDAsMCwwLDE1LjQ0LDI2SDI2'@;
put 'LjU2QTEuNDMsMS40MywwLDAsMCwyOCwyNC41NlYxNi40NEExLjQzLDEuNDMsMCwwLDAsMjYuNTYsMTVaTTI2LDI0SDE2VjE3SDI2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgPHBhdGggZD0iTTEyLjQsMTlIMTBWMTJIMjB2MS40aDJ2LTJBMS40'@;
put 'MywxLjQzLDAsMCwwLDIwLjU2LDEwSDkuNDRBMS40MywxLjQzLDAsMCwwLDgsMTEuNDR2OC4xMkExLjQzLDEuNDMsMCwwLDAsOS40NCwyMWgzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiLz4nKSx5LkNsckNvbnRyb2xMdW49KDAsZy5jbHJJY29uU1ZHKSgn'@;
put 'XG4gIDxwYXRoIGQ9Ik04LDI0LjU5YTI1LjUsMjUuNSwwLDAsMCwyLjc1LjU5bDEuMjEtMS40MWEyNC4xMywyNC4xMywwLDAsMS00LS44M1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gIDxwYXRoIGQ9Ik02LDI3LjUzVjEwLjNjMi45LDEuNDMsOC4z'@;
put 'NCwxLjg4LDEyLDEuODhzOS4xLS40NSwxMi0xLjg4djUuMTFjLS45MS44Mi01LDIuMTMtMTIsMi4xM0EzNC44MSwzNC44MSwwLDAsMSw4LDE2LjMzVjE4YTQwLjg2LDQwLjg2LDAsMCwwLDEwLDEuMTZjMy40NiwwLDkuMTMtLjQ1LDEyLTEuOTF2My4yM2gyVjhoMHMwLDAsMC0uMDdjMC0zLjM1'@;
put 'LTguOC00LjI1LTE0LTQuMjVTNCw0LjU4LDQsNy45M3YxOS42YzAsMiwzLjE3LDMuMTQsNi44MywzLjcyTDguMzgsMjguNjhDNywyOC4yOCw2LjEzLDI3Ljg0LDYsMjcuNTNaTTE4LDUuNjhjNy4xNSwwLDExLjUzLDEuNDQsMTIsMi4yNS0uNDYuODEtNC44NCwyLjI1LTEyLDIuMjVTNi4zMSw4'@;
put 'LjY5LDYsOEM2LjMxLDcuMTgsMTAuNzEsNS42OCwxOCw1LjY4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgPHBhdGggZD0iTTMyLjA5LDIySDE1LjQ2bC01LjQxLDYuMzFMMTUuNDksMzRoMTYuNmEyLDIsMCwwLDAsMi0yVjIzLjkzQTIsMiwwLDAs'@;
put 'MCwzMi4wOSwyMlptMCwxMEgxNi4zNGwtMy41OS0zLjc3TDE2LjM4LDI0SDMyLjA5djhaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICA8cGF0aCBkPSJNMTYuMTEsMjdhMSwxLDAsMSwwLDEsMUExLDEsMCwwLDAsMTYuMTEsMjdaIiBjbGFzcz0iY2xy'@;
put 'LWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIvPlxuXG4gIDxwYXRoIGQ9Ik04LDI0LjU5YTI1LjUsMjUuNSwwLDAsMCwyLjc1LjU5bDEuMjEtMS40MWEyNC4xMywyNC4xMywwLDAsMS00LS44M1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRo'@;
put 'LTEtLWJhZGdlZCIvPlxuICA8cGF0aCBkPSJNMzIuMDksMjJIMTUuNDZsLTUuNDEsNi4zMUwxNS40OSwzNGgxNi42YTIsMiwwLDAsMCwyLTJWMjMuOTNBMiwyLDAsMCwwLDMyLjA5LDIyWm0wLDEwSDE2LjM0bC0zLjU5LTMuNzdMMTYuMzgsMjRIMzIuMDl2OFoiIGNsYXNzPSJjbHItaS1vdXRs'@;
put 'aW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIvPlxuICA8cGF0aCBkPSJNMTYuMTEsMjdhMSwxLDAsMSwwLDEsMUExLDEsMCwwLDAsMTYuMTEsMjdaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiLz5cbiAg'@;
put 'PHBhdGggZD0iTTE4LDE3LjU0QTM0LjgxLDM0LjgxLDAsMCwxLDgsMTYuMzNWMThhNDAuODYsNDAuODYsMCwwLDAsMTAsMS4xNmMzLjQ2LDAsOS4xMy0uNDUsMTItMS45MXYzLjIzaDJWMTMuMjJhNy4zMiw3LjMyLDAsMCwxLTIsLjI4djEuOTFDMjkuMDksMTYuMjMsMjUsMTcuNTQsMTgsMTcu'@;
put 'NTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQiLz5cbiAgPHBhdGggZD0iTTYsMjcuNTNWMTAuM2MyLjksMS40Myw4LjM0LDEuODgsMTIsMS44OGE0Ny42Niw0Ny42NiwwLDAsMCw3LjA5LS41Miw3LjQ1LDcuNDUsMCwwLDEtMS41'@;
put 'MS0xLjgsNDcuNCw0Ny40LDAsMCwxLTUuNTguMzJDMTAuNzEsMTAuMTgsNi4zMSw4LjY5LDYsOGMuMzItLjgsNC43Mi0yLjMsMTItMi4zLDEuNjYsMCwzLjE2LjA4LDQuNTEuMjFhNy41Niw3LjU2LDAsMCwxLC4yOS0yYy0xLjctLjE3LTMuMzgtLjI0LTQuOC0uMjQtNS4yLDAtMTQsLjktMTQs'@;
put 'NC4yNXYxOS42YzAsMiwzLjE3LDMuMTQsNi44MywzLjcyTDguMzgsMjguNjhDNywyOC4yOCw2LjEzLDI3Ljg0LDYsMjcuNTNaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC01LS1iYWRnZWQiLz5cbiAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1'@;
put 'IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC02LS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cblxuICA8cGF0aCBkPSJNOCwyNC41OWEyNS41LDI1LjUsMCwwLDAsMi43NS41OWwxLjIxLTEuNDFhMjQuMTMsMjQuMTMsMCwwLDEtNC0uODNaIi8+PHBhdGgg'@;
put 'ZD0iTTMyLjA5LDIySDE1LjQ2bC01LjQxLDYuMzFMMTUuNDksMzRoMTYuNmEyLDIsMCwwLDAsMi0yVjIzLjkzQTIsMiwwLDAsMCwzMi4wOSwyMlptMCwxMEgxNi4zNGwtMy41OS0zLjc3TDE2LjM4LDI0SDMyLjA5djhaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRs'@;
put 'aW5lLXBhdGgtMS0tYWxlcnRlZCIvPlxuICA8cGF0aCBkPSJNMTYuMTEsMjdhMSwxLDAsMSwwLDEsMUExLDEsMCwwLDAsMTYuMTEsMjdaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIvPlxuICA8cGF0aCBkPSJNNiwyNy41M1Yx'@;
put 'MC4zYzIuOSwxLjQzLDguMzQsMS44OCwxMiwxLjg4aC41OWEzLjU5LDMuNTksMCwwLDEsLjMyLTJIMThDMTAuNzEsMTAuMTgsNi4zMSw4LjY5LDYsOGMuMzItLjgsNC43Mi0yLjMsMTItMi4zLDEuMjIsMCwyLjM1LjA1LDMuNDEuMTJsMS4xLTEuOTFjLTEuNi0uMTUtMy4xNy0uMjEtNC41MS0u'@;
put 'MjEtNS4yLDAtMTQsLjktMTQsNC4yNXYxOS42YzAsMiwzLjE3LDMuMTQsNi44MywzLjcyTDguMzgsMjguNjhDNywyOC4yOCw2LjEzLDI3Ljg0LDYsMjcuNTNaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIvPlxuICA8cGF0aCBk'@;
put 'PSJNOCwxNi4zM1YxOGE0MC44Niw0MC44NiwwLDAsMCwxMCwxLjE2YzMuNDYsMCw5LjEzLS40NSwxMi0xLjkxdjMuMjNoMlYxNS40SDMwYy0uOTEuODItNSwyLjEzLTEyLDIuMTNBMzQuODEsMzQuODEsMCwwLDEsOCwxNi4zM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1p'@;
put 'LW91dGxpbmUtcGF0aC00LS1hbGVydGVkIi8+XG4gIDxwYXRoIGQ9Ik0yNi44NSwxLjE0bC01LjcyLDkuOTFBMS4yNywxLjI3LDAsMCwwLDIyLjIzLDEzSDMzLjY4YTEuMjcsMS4yNywwLDAsMCwxLjEtMS45MUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9'@;
put 'ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5cblxuICA8cGF0aCBkPSJNMTYuMTEsMjdhMSwxLDAsMSwwLDEsMUExLDEsMCwwLDAsMTYuMTEsMjdaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0x'@;
put 'Ii8+XG4gIDxwYXRoIGQ9Ik0zMi4wOSwyMUgzMlYxNy4zMmMtMS45LDIuOTMtMTAuNDYsMy4zLTE0LDMuM0E0Mi40Myw0Mi40MywwLDAsMSw4LDE5LjU2VjE3Ljg4QTQwLjU5LDQwLjU5LDAsMCwwLDE4LDE5YzUsMCwxMy4yLS44MiwxNC0zLjgyVjEwLjcyYy0yLjIxLDMuMzYtMTAuNDksMy40'@;
put 'Ni0xNCwzLjQ2QTQyLjEyLDQyLjEyLDAsMCwxLDgsMTMuMTFWMTFhNDAuNTksNDAuNTksMCwwLDAsMTAsMS4xNGM1LDAsMTMuMjgtLjgzLDE0LTMuODhWNy44M2gwYy0uMTktMy4yNy04Ljg0LTQuMTUtMTQtNC4xNVM0LjIxLDQuNTYsNCw3LjgzSDR2MTkuN2MwLDIuMTYsMy42NCwzLjMsNy42'@;
put 'MywzLjg0bDIuODQsMywuNTkuNjJoMTdhMywzLDAsMCwwLDMtM1YyMy45M0EzLDMsMCwwLDAsMzIuMDksMjFaTTgsMjYuMDhWMjQuNGEyNS43OSwyNS43OSwwLDAsMCwzLjQ2LjdsLTEuMjQsMS40NEM5LjQ2LDI2LjQyLDguNzEsMjYuMjcsOCwyNi4wOFpNMzMuMDksMzJhMSwxLDAsMCwxLTEs'@;
put 'MUgxNS45MkwxMS40LDI4LjIzLDE1LjkyLDIzSDMyLjA5YTEsMSwwLDAsMSwxLDFaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIi8+XG5cbiAgPHBhdGggZD0iTTE2LjExLDI3YTEsMSwwLDEsMCwxLDFBMSwxLDAsMCwwLDE2LjExLDI3WiIgY2xhc3M9ImNsci1pLXNv'@;
put 'bGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiLz5cbiAgPHBhdGggZD0iTTMyLjA5LDIxSDMyVjE3LjMyYy0xLjksMi45My0xMC40NiwzLjMtMTQsMy4zQTQyLjQzLDQyLjQzLDAsMCwxLDgsMTkuNTZWMTcuODhBNDAuNTksNDAuNTksMCwwLDAsMTgsMTljNSwwLDEzLjIt'@;
put 'LjgyLDE0LTMuODJ2LTJhNy4zNCw3LjM0LDAsMCwxLTQuMTIsMCwzOS40NywzOS40NywwLDAsMS05Ljg4LDFBNDIuMTIsNDIuMTIsMCwwLDEsOCwxMy4xMVYxMWE0MC41OSw0MC41OSwwLDAsMCwxMCwxLjE0LDQ3Ljc2LDQ3Ljc2LDAsMCwwLDcuMDktLjUyQTcuNDUsNy40NSwwLDAsMSwyMi44'@;
put 'LDMuOTJjLTEuNy0uMTctMy4zOC0uMjQtNC44LS4yNC01LjE0LDAtMTMuNzkuODgtMTQsNC4xNUg0djE5LjdjMCwyLjE2LDMuNjQsMy4zLDcuNjMsMy44NGwyLjg0LDMsLjU5LjYyaDE3YTMsMywwLDAsMCwzLTNWMjMuOTNBMywzLDAsMCwwLDMyLjA5LDIxWk04LDI2LjA4VjI0LjRhMjUuNzks'@;
put 'MjUuNzksMCwwLDAsMy40Ni43bC0xLjI0LDEuNDRDOS40NiwyNi40Miw4LjcxLDI2LjI3LDgsMjYuMDhaTTMzLjA5LDMyYTEsMSwwLDAsMS0xLDFIMTUuOTJMMTEuNCwyOC4yMywxNS45MiwyM0gzMi4wOWExLDEsMCwwLDEsMSwxWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWkt'@;
put 'c29saWQtcGF0aC0yLS1iYWRnZWQiLz5cbiAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuXG4gIDxwYXRoIGQ9Ik0xNi4xMSwyN2ExLDEsMCwxLDAsMSwxQTEs'@;
put 'MSwwLDAsMCwxNi4xMSwyN1oiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiLz5cbiAgPHBhdGggZD0iTTMyLjA5LDIxSDMyVjE3LjMyYy0xLjksMi45My0xMC40NiwzLjMtMTQsMy4zQTQyLjQzLDQyLjQzLDAsMCwxLDgsMTkuNTZWMTcu'@;
put 'ODhBNDAuNTksNDAuNTksMCwwLDAsMTgsMTljNC44NSwwLDEyLjgtLjc5LDEzLjkxLTMuNjJIMjIuMjNhMy42OCwzLjY4LDAsMCwxLTIuNzMtMS4yM0gxOEE0Mi4xMiw0Mi4xMiwwLDAsMSw4LDEzLjExVjExYTQwLjU5LDQwLjU5LDAsMCwwLDEwLDEuMTRoLjU5YTMuNjEsMy42MSwwLDAsMSwu'@;
put 'NDYtMi4yOWwzLjQ2LTZjLTEuNi0uMTUtMy4xNy0uMjEtNC41MS0uMjEtNS4xNCwwLTEzLjc5Ljg4LTE0LDQuMTVINHYxOS43YzAsMi4xNiwzLjY0LDMuMyw3LjYzLDMuODRsMi44NCwzLC41OS42MmgxN2EzLDMsMCwwLDAsMy0zVjIzLjkzQTMsMywwLDAsMCwzMi4wOSwyMVpNOCwyNi4wOFYy'@;
put 'NC40YTI1Ljc5LDI1Ljc5LDAsMCwwLDMuNDYuN2wtMS4yNCwxLjQ0QzkuNDYsMjYuNDIsOC43MSwyNi4yNyw4LDI2LjA4Wk0zMy4wOSwzMmExLDEsMCwwLDEtMSwxSDE1LjkyTDExLjQsMjguMjMsMTUuOTIsMjNIMzIuMDlhMSwxLDAsMCwxLDEsMVoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxl'@;
put 'cnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQiLz5cbiAgPHBhdGggZD0iTTI2Ljg1LDEuMTRsLTUuNzIsOS45MUExLjI3LDEuMjcsMCwwLDAsMjIuMjMsMTNIMzMuNjhhMS4yNywxLjI3LDAsMCwwLDEuMS0xLjkxTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRa'@;
put 'IiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0zLS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG4gICcpLHkuQ2xyU2hhcGVNZWRpYUNoYW5nZXI9KDAsZy5jbHJJY29uU1ZHKSgnXG4gIDxwYXRoIGQ9Ik0zMCw0SDZBMiwyLDAsMCwwLDQsNlYzMGEyLDIsMCww'@;
put 'LDAsMiwySDcuODh2MS41N2ExLDEsMCwwLDAsMiwwVjMyaDE2djEuNTdhMSwxLDAsMCwwLDIsMFYzMkgzMGEyLDIsMCwwLDAsMi0yVjZBMiwyLDAsMCwwLDMwLDRaTTYsMzBWNkgzMFYzMFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gIDxyZWN0IHg9'@;
put 'IjIwIiB5PSIxOCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPjxyZWN0IHg9IjI0IiB5PSIxOCIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgPHJlY3QgeD0iMjAiIHk9IjIyIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBj'@;
put 'bGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICA8cmVjdCB4PSIyNCIgeT0iMjIiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00Ii8+XG4gIDxwYXRoIGQ9Ik0yNy4yMiwxMEgyMHY0YS44Ljgs'@;
put 'MCwxLDAsMS41OSwwVjExLjZoNS42M2EuOC44LDAsMSwwLDAtMS42WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiLz5cbiAgPHJlY3QgeD0iOC44MSIgeT0iMTAiIHdpZHRoPSI4LjE0IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91'@;
put 'dGxpbmUtcGF0aC02Ii8+XG4gIDxyZWN0IHg9IjguODEiIHk9IjE0IiB3aWR0aD0iOC4xNCIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNyIvPlxuICA8cmVjdCB4PSI4LjgxIiB5PSIxOCIgd2lkdGg9IjguMTQiIGhlaWdodD0iMiIgY2xhc3M9'@;
put 'ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTgiLz5cbiAgPHJlY3QgeD0iOC44MSIgeT0iMjIiIHdpZHRoPSI4LjE0IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC05Ii8+XG4gIDxyZWN0IHg9IjguODEiIHk9IjI2IiB3aWR0aD0i'@;
put 'OC4xNCIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTAiLz5cblxuICA8cmVjdCB4PSIyMCIgeT0iMTgiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdl'@;
put 'ZCIvPlxuICA8cmVjdCB4PSIyNCIgeT0iMTgiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIvPlxuICA8cmVjdCB4PSIyMCIgeT0iMjIiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHIt'@;
put 'aS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIvPlxuICA8cmVjdCB4PSIyNCIgeT0iMjIiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCIvPlxuICA8cmVjdCB4'@;
put 'PSI4LjgxIiB5PSIxMCIgd2lkdGg9IjguMTQiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYmFkZ2VkIi8+XG4gIDxyZWN0IHg9IjguODEiIHk9IjE0IiB3aWR0aD0iOC4xNCIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0'@;
put 'bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC02LS1iYWRnZWQiLz5cbiAgPHJlY3QgeD0iOC44MSIgeT0iMTgiIHdpZHRoPSI4LjE0IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTctLWJhZGdlZCIvPlxuICA8cmVjdCB4'@;
put 'PSI4LjgxIiB5PSIyMiIgd2lkdGg9IjguMTQiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtOC0tYmFkZ2VkIi8+XG4gIDxyZWN0IHg9IjguODEiIHk9IjI2IiB3aWR0aD0iOC4xNCIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0'@;
put 'bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC05LS1iYWRnZWQiLz5cbiAgPHBhdGggZD0iTTIwLDE0YS44LjgsMCwxLDAsMS41OSwwVjExLjZIMjVBNy43NCw3Ljc0LDAsMCwxLDIzLjY2LDEwSDIwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBh'@;
put 'dGgtMTAtLWJhZGdlZCIvPlxuICA8cGF0aCBkPSJNMzAsMTMuNWgwVjMwSDZWNkgyMi41VjZhNy4zNyw3LjM3LDAsMCwxLC4yOC0ySDZBMiwyLDAsMCwwLDQsNlYzMGEyLDIsMCwwLDAsMiwySDcuODh2MS41N2ExLDEsMCwwLDAsMiwwVjMyaDE2djEuNTdhMSwxLDAsMCwwLDIsMFYzMkgzMGEy'@;
put 'LDIsMCwwLDAsMi0yVjEzLjIyQTcuMzcsNy4zNywwLDAsMSwzMCwxMy41WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMTEtLWJhZGdlZCIvPlxuICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRn'@;
put 'ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEyLS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cblxuICA8cmVjdCB4PSIyMCIgeT0iMTgiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIi8+XG4gIDxyZWN0'@;
put 'IHg9IjI0IiB5PSIxOCIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiLz5cbiAgPHJlY3QgeD0iMjAiIHk9IjIyIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0t'@;
put 'YWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIvPlxuICA8cmVjdCB4PSIyNCIgeT0iMjIiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIi8+XG4gIDxyZWN0IHg9IjguODEi'@;
put 'IHk9IjEwIiB3aWR0aD0iOC4xNCIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYWxlcnRlZCIvPlxuICA8cmVjdCB4PSI4LjgxIiB5PSIxNCIgd2lkdGg9IjguMTQiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUt'@;
put 'LWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTYtLWFsZXJ0ZWQiLz5cbiAgPHJlY3QgeD0iOC44MSIgeT0iMTgiIHdpZHRoPSI4LjE0IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC03LS1hbGVydGVkIi8+XG4gIDxyZWN0IHg9'@;
put 'IjguODEiIHk9IjIyIiB3aWR0aD0iOC4xNCIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtOC0tYWxlcnRlZCIvPlxuICA8cmVjdCB4PSI4LjgxIiB5PSIyNiIgd2lkdGg9IjguMTQiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91'@;
put 'dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTktLWFsZXJ0ZWQiLz5cbiAgPHBhdGggZD0iTTMwLDE1LjRWMzBINlY2SDIxLjI3bDEuMTgtMkg2QTIsMiwwLDAsMCw0LDZWMzBhMiwyLDAsMCwwLDIsMkg3Ljg4djEuNTdhMSwxLDAsMCwwLDIsMFYzMmgxNnYxLjU3YTEsMSwwLDAs'@;
put 'MCwyLDBWMzJIMzBhMiwyLDAsMCwwLDItMlYxNS40WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEwLS1hbGVydGVkIi8+XG4gIDxwYXRoIGQ9Ik0yNi44NSwxLjE0bC01LjcyLDkuOTFBMS4yNywxLjI3LDAsMCwwLDIyLjIzLDEzSDMzLjY4YTEu'@;
put 'MjcsMS4yNywwLDAsMCwxLjEtMS45MUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTExLS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG5cbiAgPHBhdGggZD0iTTMwLDRINkEyLDIs'@;
put 'MCwwLDAsNCw2VjMwYTIsMiwwLDAsMCwyLDJINy44OHYxLjU3YTEsMSwwLDAsMCwyLDBWMzJoMTZ2MS41N2ExLDEsMCwwLDAsMiwwVjMySDMwYTIsMiwwLDAsMCwyLTJWNkEyLDIsMCwwLDAsMzAsNFpNMTcsMjhIOC44MVYyNkgxN1ptMC00SDguODFWMjJIMTdabTAtNEg4LjgxVjE4SDE3Wm0w'@;
put 'LTRIOC44MVYxNEgxN1ptMC00SDguODFWMTBIMTdaTTIyLDI0SDIwVjIyaDJabTAtNEgyMFYxOGgyWm00LDRIMjRWMjJoMlptMC00SDI0VjE4aDJabTAtNkgyMFYxMGg2WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuXG4gIDxwYXRoIGQ9Ik0zMCwxMy41YTcu'@;
put 'NDksNy40OSwwLDAsMS00LTEuMTZWMTRIMjBWMTBoMy42NkE3LjQ5LDcuNDksMCwwLDEsMjIuNSw2YTcuMzcsNy4zNywwLDAsMSwuMjgtMkg2QTIsMiwwLDAsMCw0LDZWMzBhMiwyLDAsMCwwLDIsMkg3Ljg4djEuNTdhMSwxLDAsMCwwLDIsMFYzMmgxNnYxLjU3YTEsMSwwLDAsMCwyLDBWMzJI'@;
put 'MzBhMiwyLDAsMCwwLDItMlYxMy4yMkE3LjM3LDcuMzcsMCwwLDEsMzAsMTMuNVpNMTcsMjhIOC44MVYyNkgxN1ptMC00SDguODFWMjJIMTdabTAtNEg4LjgxVjE4SDE3Wm0wLTRIOC44MVYxNEgxN1ptMC00SDguODFWMTBIMTdaTTIyLDI0SDIwVjIyaDJabTAtNEgyMFYxOGgyWm00LDRIMjRW'@;
put 'MjJoMlptMC00SDI0VjE4aDJaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIvPlxuICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIGNs'@;
put 'ci1pLWJhZGdlIi8+XG5cbiAgPHBhdGggZD0iTTIyLjIzLDE1LjRhMy42OCwzLjY4LDAsMCwxLTMuMTgtNS41MUwyMi40NSw0SDZBMiwyLDAsMCwwLDQsNlYzMGEyLDIsMCwwLDAsMiwySDcuODh2MS41N2ExLDEsMCwwLDAsMiwwVjMyaDE2djEuNTdhMSwxLDAsMCwwLDIsMFYzMkgzMGEyLDIs'@;
put 'MCwwLDAsMi0yVjE1LjRaTTE3LDI4SDguODFWMjZIMTdabTAtNEg4LjgxVjIySDE3Wm0wLTRIOC44MVYxOEgxN1ptMC00SDguODFWMTRIMTdabTAtNEg4LjgxVjEwSDE3Wk0yMiwyNEgyMFYyMmgyWm0wLTRIMjBWMThoMlptNCw0SDI0VjIyaDJabTAtNEgyNFYxOGgyWiIgY2xhc3M9ImNsci1p'@;
put 'LXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIvPlxuICA8cGF0aCBkPSJNMjYuODUsMS4xNGwtNS43Miw5LjkxQTEuMjcsMS4yNywwLDAsMCwyMi4yMywxM0gzMy42OGExLjI3LDEuMjcsMCwwLDAsMS4xLTEuOTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAs'@;
put 'MjYuODUsMS4xNFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5cbiAgJykseS5DbHJTaGFwZVRhcGVEcml2ZT0oMCxnLmNsckljb25TVkcpKCdcbiAgPHBhdGggZD0iTTMyLDZINEEyLDIsMCwwLDAsMiw4VjI4'@;
put 'YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlY4QTIsMiwwLDAsMCwzMiw2Wk00LDI4VjhIMzJWMjhaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICA8cGF0aCBkPSJNMTMuMzMsMTMuMzVhNC41Miw0LjUyLDAsMSwwLDQuNTMsNC41MkE0LjUz'@;
put 'LDQuNTMsMCwwLDAsMTMuMzMsMTMuMzVabTAsNy40NGEyLjkyLDIuOTIsMCwxLDEsMi45My0yLjkyQTIuOTIsMi45MiwwLDAsMSwxMy4zMywyMC43OVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gIDxwYXRoIGQ9Ik0yMy42MiwxMy4zNWE0LjUyLDQu'@;
put 'NTIsMCwxLDAsNC41Miw0LjUyQTQuNTMsNC41MywwLDAsMCwyMy42MiwxMy4zNVptMCw3LjQ0YTIuOTIsMi45MiwwLDEsMSwyLjkyLTIuOTJBMi45MiwyLjkyLDAsMCwxLDIzLjYyLDIwLjc5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiLz5cbiAgPHBhdGgg'@;
put 'ZD0iTTYsMTFWMjMuNTVIOFYxMkgyOS4zNFYxMEg3QTEsMSwwLDAsMCw2LDExWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiLz5cblxuICA8cGF0aCBkPSJNOC44MSwxNy44N2E0LjUzLDQuNTMsMCwxLDAsNC41Mi00LjUyQTQuNTMsNC41MywwLDAsMCw4Ljgx'@;
put 'LDE3Ljg3Wm03LjQ1LDBBMi45MywyLjkzLDAsMSwxLDEzLjMzLDE1LDIuOTMsMi45MywwLDAsMSwxNi4yNiwxNy44N1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIvPlxuICA8cGF0aCBkPSJNMTkuMSwxNy44N2E0LjUyLDQuNTIs'@;
put 'MCwxLDAsNC41Mi00LjUyQTQuNTMsNC41MywwLDAsMCwxOS4xLDE3Ljg3Wm03LjQ0LDBBMi45MiwyLjkyLDAsMSwxLDIzLjYyLDE1LDIuOTIsMi45MiwwLDAsMSwyNi41NCwxNy44N1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIv'@;
put 'PlxuICA8cGF0aCBkPSJNMzIsMTMuMjJWMjhINFY4SDIyLjc4YTcuMzcsNy4zNywwLDAsMS0uMjgtMkg0QTIsMiwwLDAsMCwyLDhWMjhhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjEyLjM0QTcuNjUsNy42NSwwLDAsMSwzMiwxMy4yMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1i'@;
put 'YWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIvPlxuICA8cGF0aCBkPSJNNiwxMVYyMy41NUg4VjEySDI1LjUxYTcuNjYsNy42NiwwLDAsMS0xLjg1LTJIN0ExLDEsMCwwLDAsNiwxMVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQt'@;
put 'LWJhZGdlZCIvPlxuICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuXG4gIDxwYXRoIGQ9Ik04LjgxLDE3Ljg3YTQuNTMsNC41MywwLDEsMCw0LjUyLTQu'@;
put 'NTJBNC41Myw0LjUzLDAsMCwwLDguODEsMTcuODdabTcuNDUsMEEyLjkzLDIuOTMsMCwxLDEsMTMuMzMsMTUsMi45MywyLjkzLDAsMCwxLDE2LjI2LDE3Ljg3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiLz5cbiAgPHBhdGgg'@;
put 'ZD0iTTcsMTBhMSwxLDAsMCwwLTEsMVYyMy41NUg4VjEySDE4LjU3QTMuNywzLjcsMCwwLDEsMTksMTBaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIvPlxuICA8cGF0aCBkPSJNMzMuNjgsMTUuNEgzMlYyOEg0VjhIMjAuMTRs'@;
put 'MS4xNS0ySDRBMiwyLDAsMCwwLDIsOFYyOGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMTUuMzhaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIvPlxuICA8cGF0aCBkPSJNMjIuMDksMTUuMzlhMy42NSwzLjY1LDAs'@;
put 'MCwxLTEuOC0uNTUsNC41MSw0LjUxLDAsMSwwLDcuMTEuNTZIMjUuMTdhMi45MiwyLjkyLDAsMSwxLTMuMDgsMFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIi8+XG4gIDxwYXRoIGQ9Ik0yNi44NSwxLjE0bC01LjcyLDkuOTFB'@;
put 'MS4yNywxLjI3LDAsMCwwLDIyLjIzLDEzSDMzLjY4YTEuMjcsMS4yNywwLDAsMCwxLjEtMS45MUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWFsZXJ0ZWQgY2xyLWktYWxl'@;
put 'cnQiLz5cblxuICA8cGF0aCBkPSJNMzIsNkg0QTIsMiwwLDAsMCwyLDhWMjhhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjhBMiwyLDAsMCwwLDMyLDZaTTMwLDI0SDZWMTJIMzBaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+XG4gIDxwYXRoIGQ9Ik0x'@;
put 'Mi4yMSwyM2E1LDUsMCwxLDAtNS01QTUsNSwwLDAsMCwxMi4yMSwyM1ptMC03YTIsMiwwLDEsMS0yLDJBMiwyLDAsMCwxLDEyLjIxLDE2WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIvPlxuICA8cGF0aCBkPSJNMjMuNzksMjNhNSw1LDAsMSwwLTUtNUE1LDUsMCww'@;
put 'LDAsMjMuNzksMjNabTAtN2EyLDIsMCwxLDEtMiwyQTIsMiwwLDAsMSwyMy43OSwxNloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiLz5cblxuICA8cGF0aCBkPSJNMTIuMjEsMjNhNSw1LDAsMSwwLTUtNUE1LDUsMCwwLDAsMTIuMjEsMjNabTAtN2EyLDIsMCwxLDEt'@;
put 'MiwyQTIsMiwwLDAsMSwxMi4yMSwxNloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIi8+XG4gIDxwYXRoIGQ9Ik0yMy43OSwyM2E1LDUsMCwxLDAtNS01QTUsNSwwLDAsMCwyMy43OSwyM1ptMC03YTIsMiwwLDEsMS0yLDJBMiwyLDAsMCwx'@;
put 'LDIzLjc5LDE2WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQiLz5cbiAgPHBhdGggZD0iTTMwLDEzLjVWMjRINlYxMkgyNS41MWE3LjQ5LDcuNDksMCwwLDEtMy02SDRBMiwyLDAsMCwwLDIsOFYyOGEyLDIsMCwwLDAsMiwySDMyYTIsMiww'@;
put 'LDAsMCwyLTJWMTIuMzRBNy40OSw3LjQ5LDAsMCwxLDMwLDEzLjVaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWJhZGdlZCIvPlxuICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNv'@;
put 'bGlkLXBhdGgtNC0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG5cbiAgPHBhdGggZD0iTTcuMiwxOGE1LDUsMCwxLDAsNS01QTUsNSwwLDAsMCw3LjIsMThabTcsMGEyLDIsMCwxLDEtMi0yQTIsMiwwLDAsMSwxNC4yMiwxOFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xp'@;
put 'ZC1wYXRoLTEtLWFsZXJ0ZWQiLz5cbiAgPHBhdGggZD0iTTE4Ljc4LDE4YTUsNSwwLDEsMCw5LjI3LTIuNkgyMi4yM2EzLjcxLDMuNzEsMCwwLDEtMi4xNy0uNzFBNSw1LDAsMCwwLDE4Ljc4LDE4Wm01LTJhMiwyLDAsMSwxLTIsMkEyLDIsMCwwLDEsMjMuNzksMTZaIiBjbGFzcz0iY2xyLWkt'@;
put 'c29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIi8+XG4gIDxwYXRoIGQ9Ik0zMy42OCwxNS40SDMwVjI0SDZWMTJIMTguNTdhMy42NSwzLjY1LDAsMCwxLC40OC0yLjExTDIxLjI5LDZINEEyLDIsMCwwLDAsMiw4VjI4YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCww'@;
put 'LDItMlYxNS4zOFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWFsZXJ0ZWQiLz5cbiAgPHBhdGggZD0iTTI2Ljg1LDEuMTRsLTUuNzIsOS45MUExLjI3LDEuMjcsMCwwLDAsMjIuMjMsMTNIMzMuNjhhMS4yNywxLjI3LDAsMCwwLDEuMS0xLjkxTDI5'@;
put 'LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC00LS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG4gICcpLHkuQ2xyU2hhcGVBbmltYXRpb249KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTEw'@;
put 'LjE2LDMxLjcxYTQuNCw0LjQsMCwwLDEtNC42NC0xQTQuMzQsNC4zNCwwLDAsMSw0LjIzLDI3LjZhNC40MSw0LjQxLDAsMCwxLC4xOC0xLjIsMTEuNjEsMTEuNjEsMCwwLDEtMS0yLjU2LDYuNCw2LjQsMCwwLDAsOS4zMyw4LjYzQTExLjU1LDExLjU1LDAsMCwxLDEwLjE2LDMxLjcxWiIgY2xh'@;
put 'c3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgPHBhdGggZD0iTTE4LjQxLDI3LjY4YTcuNjEsNy42MSwwLDAsMS05LjA4LTEuMjYsNy41OCw3LjU4LDAsMCwxLTEuMjctOS4wNiwxNC4yNiwxNC4yNiwwLDAsMS0uMzctMi44NSw5LjU4LDkuNTgsMCwwLDAsLjIy'@;
put 'LDEzLjMzLDkuNjMsOS42MywwLDAsMCwxMy4zNS4yMkExNC40NiwxNC40NiwwLDAsMSwxOC40MSwyNy42OFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gIDxwYXRoIGQ9Ik0yMS42NiwyNi4yMWExMi4xLDEyLjEsMCwxLDEsOC41Ny0zLjU0aDBBMTIu'@;
put 'MTEsMTIuMTEsMCwwLDEsMjEuNjYsMjYuMjFaTTIxLjY2LDRBMTAuMTEsMTAuMTEsMCwwLDAsMTEuNTQsMTQuMTFhMTAsMTAsMCwwLDAsMyw3LjE0LDEwLjEyLDEwLjEyLDAsMCwwLDE0LjMxLDBBMTAuMTEsMTAuMTEsMCwwLDAsMjEuNjYsNFptNy44NiwxOGgwWiIgY2xhc3M9ImNsci1pLW91'@;
put 'dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiLz5cbiAgXG4gIDxwYXRoIGQ9Ik0zLjUsMjMuNzdhNi40MSw2LjQxLDAsMCwwLDkuMzMsOC42N0ExMS42NSwxMS42NSwwLDAsMSwzLjUsMjMuNzdaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+XG4gIDxwYXRoIGQ9'@;
put 'Ik03LjY4LDE0LjUzYTkuNiw5LjYsMCwwLDAsMTMuNCwxMy43QTE0LjExLDE0LjExLDAsMCwxLDcuNjgsMTQuNTNaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIi8+XG4gIDxwYXRoIGQ9Ik0yMS43OCwyQTEyLjEyLDEyLjEyLDAsMSwxLDkuNjYsMTQuMTUsMTIuMTIs'@;
put 'MTIuMTIsMCwwLDEsMjEuNzgsMiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIvPlxuICAnKSx5LkNsclNoYXBlQ2lDZD0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjMuNTMsMTkuODFhNy40NSw3LjQ1LDAsMCwxLTEuNjUtLjE4LDEwLjQ4LDEwLjQ4LDAsMCwx'@;
put 'LC43MiwyLjEzYy4zLDAsLjYxLDAsLjkzLDBhOS41Miw5LjUyLDAsMCwwLDMtLjQ5bC0uOTMtMS44MUE3LjY3LDcuNjcsMCwwLDEsMjMuNTMsMTkuODFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICA8cGF0aCBkPSJNMTguMzYsMTcuODcsMTgsMTcu'@;
put 'NDlhNy40LDcuNCwwLDAsMS0yLjItNS45Miw3LjMxLDcuMzEsMCwwLDEsMS41NC00TDE3LjI2LDlBMSwxLDAsMCwwLDE4LjE3LDEwaC4wOWExLDEsMCwwLDAsMS0uOTFMMTkuNiw1YTEsMSwwLDAsMC0uMjktLjc5QTEsMSwwLDAsMCwxOC41Miw0bC00LjA5LjM1YTEsMSwwLDAsMCwuMTcsMmwx'@;
put 'LjI5LS4xMWE5LjQ1LDkuNDUsMCwwLDAtMi4wNSw1LjMyLDkuMjgsOS4yOCwwLDAsMCwyLjY3LDcuMjZsLjMxLjM3YTcuMzMsNy4zMywwLDAsMSwyLjA2LDQuOTEsNy4zOSw3LjM5LDAsMCwxLS4yNiwyLjQ3bDEuOC45MWE4Ljc2LDguNzYsMCwwLDAsLjQ1LTMuNTFBOS4yOCw5LjI4LDAsMCww'@;
put 'LDE4LjM2LDE3Ljg3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgPHBhdGggZD0iTTMyLjQsMTcuOTEsMzEuMTksMThBOS42NSw5LjY1LDAsMCwwLDIzLjUzLDIuNDVhOS4zMyw5LjMzLDAsMCwwLTMsLjQ5bC45MSwxLjhhNy42Nyw3LjY3LDAsMCwx'@;
put 'LDkuNzYsNy4zOSw3LjU4LDcuNTgsMCwwLDEtMS42NSw0LjcybC4xLTEuNTRhMSwxLDAsMSwwLTItLjEzbC0uMjgsNC4wOGExLDEsMCwwLDAsLjMxLjc4Ljk0Ljk0LDAsMCwwLC42OS4yOGguMWw0LjA4LS40MmExLDEsMCwwLDAsLjktMS4xQTEsMSwwLDAsMCwzMi40LDE3LjkxWiIgY2xhc3M9'@;
put 'ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiLz5cbiAgPHBhdGggZD0iTTQuMDcsMjAuNDRoLjA4bDQuMDktLjM1YTEsMSwwLDEsMC0uMTctMmwtMS4zOS4xMmE3LjYzLDcuNjMsMCwwLDEsNC41Mi0xLjQ5LDcuOSw3LjksMCwwLDEsMS42My4xOCwxMC4yMywxMC4yMywwLDAs'@;
put 'MS0uNzEtMi4xM2MtLjMsMC0uNjEsMC0uOTIsMGE5LjY2LDkuNjYsMCwwLDAtNS45LDJsLjEyLTEuMzFhMSwxLDAsMCwwLS45Mi0xLjA4LDEsMSwwLDAsMC0xLjA4LjkxbC0uMzUsNC4wOGExLDEsMCwwLDAsMSwxLjA4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRo'@;
put 'LTQiLz5cbiAgPHBhdGggZD0iTTE4LjQyLDI4LjIzbC00LjA5LjI3YTEsMSwwLDAsMCwuMTMsMkwxNiwzMC4zOWE3LjcxLDcuNzEsMCwwLDEtMTIuNTQtNiw3LjYsNy42LDAsMCwxLC4yOS0yTDIsMjEuNDZhOS41OSw5LjU5LDAsMCwwLS40NywyLjk1QTkuNyw5LjcsMCwwLDAsMTcuMTksMzJs'@;
put 'LS4xMiwxLjE4YTEsMSwwLDAsMCwuODksMS4xaC4xMWExLDEsMCwwLDAsMS0uOWwuNDItNC4wNmExLDEsMCwwLDAtMS4wNi0xLjFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIvPicpLHkuQ2xyU2hhcGVGaWxlU2hhcmUyPSgwLGcuY2xySWNvblNWRykoJzxw'@;
put 'YXRoIGQ9Ik0yNSw0SDcuODNBMS44OSwxLjg5LDAsMCwwLDYsNS45MVYzMC4wOUExLjg5LDEuODksMCwwLDAsNy44MywzMkgyOC4xN0ExLjg3LDEuODcsMCwwLDAsMzAsMzAuMDlWOVpNMjQsNS43OCwyOC4yLDEwSDI0Wk04LDMwVjZIMjJ2Nmg2VjMwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUg'@;
put 'Y2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgPHBhdGggZD0iTTIyLDIxLjgxYTIuMTEsMi4xMSwwLDAsMC0xLjQ0LjYybC01LjcyLTIuNjZ2LS40NGw1LjY2LTIuNjVhMi4wOCwyLjA4LDAsMSwwLC4wNi0yLjk0aDBhMi4xNCwyLjE0LDAsMCwwLS42NCwxLjQ4di4yM2wtNS42NCwyLjY2YTIu'@;
put 'MDgsMi4wOCwwLDEsMC0uMDgsMi45NWwuMDgtLjA4LDUuNjcsMi42NnYuM0EyLjA5LDIuMDksMCwxLDAsMjIsMjEuODRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICBcbiAgPHBhdGggZD0iTTI1LDQuMDZINy44M0ExLjg5LDEuODksMCwwLDAsNiw2'@;
put 'VjMwLjE1YTEuODksMS44OSwwLDAsMCwxLjgzLDEuOTFIMjguMTdBMS44NywxLjg3LDAsMCwwLDMwLDMwLjE1VjlaTTIyLDI2YTIuMDksMi4wOSwwLDAsMS0yLjEtMi4wOHYtLjNMMTQuMjcsMjFsLS4wOC4wOGEyLjA4LDIuMDgsMCwxLDEsLjA4LTIuOTVsNS42NC0yLjY2di0uMjNhMi4xNCwy'@;
put 'LjE0LDAsMCwxLC42NC0xLjQ4aDBhMi4wOCwyLjA4LDAsMSwxLS4wNiwyLjk0bC01LjY2LDIuNjV2LjQ0bDUuNzIsMi42NkEyLjExLDIuMTEsMCwwLDEsMjIsMjEuODFsMCwwQTIuMDksMi4wOSwwLDAsMSwyMiwyNlptMi0xNlY1Ljg0bDQuMiw0LjIyWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNs'@;
put 'ci1pLXNvbGlkLXBhdGgtMSIvPicpLHkuVGVjaG5vbG9neVNoYXBlcz17InJ1bGVyLXBlbmNpbCI6eS5DbHJTaGFwZVJ1bGVyUGVuY2lsLCJwaG9uZS1oYW5kc2V0Ijp5LkNsclNoYXBlUGhvbmVIYW5kc2V0LCJuby13aWZpIjp5LkNsclNoYXBlTm9XaWZpLGluc3RhbGw6eS5DbHJTaGFwZUlu'@;
put 'c3RhbGwsdW5pbnN0YWxsOnkuQ2xyU2hhcGVVbmluc3RhbGwsbGF5ZXJzOnkuQ2xyU2hhcGVMYXllcnMsYmxvY2s6eS5DbHJTaGFwZUJsb2NrLCJibG9ja3MtZ3JvdXAiOnkuQ2xyU2hhcGVCbG9ja3NHcm91cCxidW5kbGU6eS5DbHJTaGFwZUJ1bmRsZSx3aWZpOnkuQ2xyU2hhcGVXaWZpLCJy'@;
put 'YWNrLXNlcnZlciI6eS5DbHJTaGFwZVJhY2tTZXJ2ZXIsImhhcmQtZGlzayI6eS5DbHJTaGFwZUhhcmREaXNrLCJiYWNrdXAtcmVzdG9yZSI6eS5DbHJTaGFwZUJhY2t1cFJlc3RvcmUsYmFja3VwOnkuQ2xyU2hhcGVCYWNrdXAsZGV2aWNlczp5LkNsclNoYXBlRGV2aWNlcyxrZXlib2FyZDp5'@;
put 'LkNsclNoYXBlS2V5Ym9hcmQsbW91c2U6eS5DbHJTaGFwZU1vdXNlLGRhc2hib2FyZDp5LkNsclNoYXBlRGFzaGJvYXJkLGhvc3Q6eS5DbHJTaGFwZUhvc3Qsc3RvcmFnZTp5LkNsclNoYXBlU3RvcmFnZSxjbHVzdGVyOnkuQ2xyU2hhcGVDbHVzdGVyLGFwcGxpY2F0aW9uczp5LkNsclNoYXBl'@;
put 'QXBwbGljYXRpb25zLGJ1aWxkaW5nOnkuQ2xyU2hhcGVCdWlsZGluZyxjcHU6eS5DbHJTaGFwZUNQVSxtZW1vcnk6eS5DbHJTaGFwZU1lbW9yeSwiZGF0YS1jbHVzdGVyIjp5LkNsclNoYXBlRGF0YUNsdXN0ZXIsInJlc291cmNlLXBvb2wiOnkuQ2xyU2hhcGVSZXNvdXJjZVBvb2wsc2hpZWxk'@;
put 'OnkuQ2xyU2hhcGVTaGllbGQsInNoaWVsZC1jaGVjayI6eS5DbHJTaGFwZVNoaWVsZENoZWNrLCJzaGllbGQteCI6eS5DbHJTaGFwZVNoaWVsZFgsaW1wb3J0OnkuQ2xyU2hhcGVJbXBvcnQsZXhwb3J0OnkuQ2xyU2hhcGVFeHBvcnQsInVwbG9hZC1jbG91ZCI6eS5DbHJTaGFwZVVwbG9hZENs'@;
put 'b3VkLCJkb3dubG9hZC1jbG91ZCI6eS5DbHJTaGFwZURvd25sb2FkQ2xvdWQscGx1Z2luOnkuQ2xyU2hhcGVQbHVnaW4sZmxvcHB5OnkuQ2xyU2hhcGVGbG9wcHksY29tcHV0ZXI6eS5DbHJTaGFwZUNvbXB1dGVyLGRpc3BsYXk6eS5DbHJTaGFwZURpc3BsYXksdGVybWluYWw6eS5DbHJTaGFw'@;
put 'ZVRlcm1pbmFsLGNvZGU6eS5DbHJTaGFwZUNvZGUsYXBwbGljYXRpb246eS5DbHJTaGFwZUFwcGxpY2F0aW9uLGJhdHRlcnk6eS5DbHJTaGFwZUJhdHRlcnksbW9iaWxlOnkuQ2xyU2hhcGVNb2JpbGUsdGFibGV0OnkuQ2xyU2hhcGVUYWJsZXQsIm5ldHdvcmstZ2xvYmUiOnkuQ2xyU2hhcGVO'@;
put 'ZXR3b3JrR2xvYmUsIm5ldHdvcmstc2V0dGluZ3MiOnkuQ2xyU2hhcGVOZXR3b3JrU2V0dGluZ3MsIm5ldHdvcmstc3dpdGNoIjp5LkNsclNoYXBlTmV0d29ya1N3aXRjaCxyb3V0ZXI6eS5DbHJTaGFwZVJvdXRlcix2bTp5LkNsclNoYXBlVk0sInZtdy1hcHAiOnkuQ2xyU2hhcGVWTVdBcHAs'@;
put 'Y2VydGlmaWNhdGU6eS5DbHJTaGFwZUNlcnRpZmljYXRlLGFyY2hpdmU6eS5DbHJTaGFwZUFyY2hpdmUsdW5hcmNoaXZlOnkuQ2xyU2hhcGVVbmFyY2hpdmUsY29ubmVjdDp5LkNsclNoYXBlQ29ubmVjdCxkaXNjb25uZWN0OnkuQ2xyU2hhcGVEaXNjb25uZWN0LGxpbms6eS5DbHJTaGFwZUxp'@;
put 'bmssdW5saW5rOnkuQ2xyU2hhcGVVbmxpbmssImNsb3VkLW5ldHdvcmsiOnkuQ2xyU2hhcGVDbG91ZE5ldHdvcmssImNsb3VkLXNjYWxlIjp5LkNsclNoYXBlQ2xvdWRTY2FsZSwiY2xvdWQtdHJhZmZpYyI6eS5DbHJTaGFwZUNsb3VkVHJhZmZpYywiY29udHJvbC1sdW4iOnkuQ2xyQ29udHJv'@;
put 'bEx1bixkZXBsb3k6eS5DbHJTaGFwZURlcGxveSxoZWxpeDp5LkNsclNoYXBlSGVsaXgsZmxhc2s6eS5DbHJTaGFwZUZsYXNrLGFkbWluaXN0cmF0b3I6eS5DbHJTaGFwZUFkbWluaXN0cmF0b3IsImhhcmQtZHJpdmUiOnkuQ2xyU2hhcGVIYXJkRHJpdmUsImhhcmQtZHJpdmUtZGlza3MiOnku'@;
put 'Q2xyU2hhcGVIYXJkRHJpdmVEaXNrcyxudm1lOnkuQ2xyU2hhcGVOVk1lLHNzZDp5LkNsclNoYXBlU1NELGJsdWV0b290aDp5LkNsclNoYXBlQmx1ZXRvb3RoLCJibHVldG9vdGgtb2ZmIjp5LkNsclNoYXBlQmx1ZXRvb3RoT2ZmLCJwcm9jZXNzLW9uLXZtIjp5LkNsclNoYXBlUHJvY2Vzc09u'@;
put 'Vk0sImFzc2lnbi11c2VyIjp5LkNsclNoYXBlQXNzaWduVXNlcixhdG9tOnkuQ2xyU2hhcGVBdG9tLCJiYXItY29kZSI6eS5DbHJTaGFwZUJhckNvZGUsImNkLWR2ZCI6eS5DbHJTaGFwZUNkRHZkLGNvbnRhaW5lcjp5LkNsclNoYXBlQ29udGFpbmVyLCJjb250YWluZXItdm9sdW1lIjp5LkNs'@;
put 'clNoYXBlQ29udGFpbmVyVm9sdW1lLCJmaWxlLXNoYXJlIjp5LkNsclNoYXBlRmlsZVNoYXJlLCJxci1jb2RlIjp5LkNsclNoYXBlUXJDb2RlLHVzYjp5LkNsclNoYXBlVXNiLHJhZGFyOnkuQ2xyU2hhcGVSYWRhcixjYXBhY2l0b3I6eS5DbHJTaGFwZUNhcGFjaXRvcixzcXVpZDp5LkNsclNo'@;
put 'YXBlU3F1aWQsaW5kdWN0b3I6eS5DbHJTaGFwZUluZHVjdG9yLHJlc2lzdG9yOnkuQ2xyU2hhcGVSZXNpc3RvciwiaG9zdC1ncm91cCI6eS5DbHJTaGFwZUhvc3RHcm91cCwic3RvcmFnZS1hZGFwdGVyIjp5LkNsclNoYXBlU3RvcmFnZUFkYXB0ZXIsIm5vZGUtZ3JvdXAiOnkuQ2xyU2hhcGVO'@;
put 'b2RlR3JvdXAsbm9kZXM6eS5DbHJTaGFwZU5vZGVzLG5hbWVzcGFjZTp5LkNsclNoYXBlTmFtZXNwYWNlLG5vZGU6eS5DbHJTaGFwZU5vZGUscG9kOnkuQ2xyU2hhcGVQb2QsIm1lZGlhLWNoYW5nZXIiOnkuQ2xyU2hhcGVNZWRpYUNoYW5nZXIsInRhcGUtZHJpdmUiOnkuQ2xyU2hhcGVUYXBl'@;
put 'RHJpdmUsYW5pbWF0aW9uOnkuQ2xyU2hhcGVBbmltYXRpb24sImNpLWNkIjp5LkNsclNoYXBlQ2lDZCwiZmlsZS1zaGFyZS0yIjp5LkNsclNoYXBlRmlsZVNoYXJlMn0sT2JqZWN0LmRlZmluZVByb3BlcnR5KHkuVGVjaG5vbG9neVNoYXBlcywic2VydmVyIiwoMCxfLmRlc2NyaXB0b3JDb25m'@;
put 'aWcpKHkuVGVjaG5vbG9neVNoYXBlcy5ob3N0KSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHkuVGVjaG5vbG9neVNoYXBlcywiY29tbWFuZCIsKDAsXy5kZXNjcmlwdG9yQ29uZmlnKSh5LlRlY2hub2xvZ3lTaGFwZXMudGVybWluYWwpKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoeS5UZWNobm9s'@;
put 'b2d5U2hhcGVzLCJtb2JpbGUtcGhvbmUiLCgwLF8uZGVzY3JpcHRvckNvbmZpZykoeS5UZWNobm9sb2d5U2hhcGVzLm1vYmlsZSkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh5LlRlY2hub2xvZ3lTaGFwZXMsImxpY2Vuc2UiLCgwLF8uZGVzY3JpcHRvckNvbmZpZykoeS5UZWNobm9sb2d5U2hh'@;
put 'cGVzLmNlcnRpZmljYXRlKSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHkuVGVjaG5vbG9neVNoYXBlcywiZGlzY29ubmVjdGVkIiwoMCxfLmRlc2NyaXB0b3JDb25maWcpKHkuVGVjaG5vbG9neVNoYXBlc1sibm8td2lmaSJdKSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHkuVGVjaG5vbG9neVNo'@;
put 'YXBlcywicmVjZWl2ZXIiLCgwLF8uZGVzY3JpcHRvckNvbmZpZykoeS5UZWNobm9sb2d5U2hhcGVzWyJwaG9uZS1oYW5kc2V0Il0pKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoeS5UZWNobm9sb2d5U2hhcGVzLCJkZXNpZ24iLCgwLF8uZGVzY3JpcHRvckNvbmZpZykoeS5UZWNobm9sb2d5U2hh'@;
put 'cGVzWyJydWxlci1wZW5jaWwiXSkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh5LlRlY2hub2xvZ3lTaGFwZXMsImRuYSIsKDAsXy5kZXNjcmlwdG9yQ29uZmlnKSh5LlRlY2hub2xvZ3lTaGFwZXMuaGVsaXgpKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoeS5UZWNobm9sb2d5U2hhcGVzLCJmb2xk'@;
put 'ZXItc2hhcmUiLCgwLF8uZGVzY3JpcHRvckNvbmZpZykoeS5UZWNobm9sb2d5U2hhcGVzWyJmaWxlLXNoYXJlIl0pKSx0eXBlb2Ygd2luZG93PCJ1IiYmd2luZG93Lmhhc093blByb3BlcnR5KCJDbGFyaXR5SWNvbnMiKSYmd2luZG93LkNsYXJpdHlJY29ucy5hZGQoeS5UZWNobm9sb2d5U2hh'@;
put 'cGVzKX0sIi4vcHJvamVjdHMvaWNvbnMvc3JjL3NoYXBlcy90ZXh0LWVkaXQtc2hhcGVzLnRzIjoKLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAogICAgICAgICAgICAgICAgICAhKioqIC4vcHJvamVjdHMvaWNvbnMvc3JjL3No'@;
put 'YXBlcy90ZXh0LWVkaXQtc2hhcGVzLnRzICoqKiEKICAgICAgICAgICAgICAgICAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi8qISBubyBzdGF0aWMgZXhwb3J0cyBmb3VuZCAqL2Z1bmN0aW9uKFgseSxJKXsidXNlIHN0cmljdCI7'@;
put 'T2JqZWN0LmRlZmluZVByb3BlcnR5KHksIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHkuVGV4dEVkaXRTaGFwZXM9eS5DbHJTaGFwZVN1cGVyc2NyaXB0PXkuQ2xyU2hhcGVTdWJzY3JpcHQ9eS5DbHJTaGFwZVN0cmlrZXRocm91Z2g9eS5DbHJTaGFwZUluZGVudD15LkNsclNoYXBlT3V0ZGVu'@;
put 'dD15LkNsclNoYXBlSGlnaGxpZ2h0ZXI9eS5DbHJTaGFwZVRleHRDb2xvcj15LkNsclNoYXBlTGFuZ3VhZ2U9eS5DbHJTaGFwZUFsaWduVG9wPXkuQ2xyU2hhcGVBbGlnbk1pZGRsZT15LkNsclNoYXBlQWxpZ25Cb3R0b209eS5DbHJTaGFwZVVuZGVybGluZT15LkNsclNoYXBlVGV4dD15LkNs'@;
put 'clNoYXBlQWxpZ25SaWdodFRleHQ9eS5DbHJTaGFwZUJsb2NrUXVvdGU9eS5DbHJTaGFwZVBhaW50Um9sbGVyPXkuQ2xyU2hhcGVOdW1iZXJMaXN0PXkuQ2xyU2hhcGVBbGlnbkxlZnRUZXh0PXkuQ2xyU2hhcGVKdXN0aWZ5VGV4dD15LkNsclNoYXBlSXRhbGljPXkuQ2xyU2hhcGVBbGlnblJp'@;
put 'Z2h0PXkuQ2xyU2hhcGVBbGlnbkxlZnQ9eS5DbHJTaGFwZUFsaWduQ2VudGVyPXkuQ2xyU2hhcGVGb250U2l6ZT15LkNsclNoYXBlQ2hlY2tib3hMaXN0PXkuQ2xyU2hhcGVDZW50ZXJUZXh0PXkuQ2xyU2hhcGVCdWxsZXRMaXN0PXkuQ2xyU2hhcGVCb2xkPXZvaWQgMDt2YXIgXz1JKAovKiEg'@;
put 'Li4vdXRpbHMvc3ZnLXRhZy1nZW5lcmF0b3IgKi8KIi4vcHJvamVjdHMvaWNvbnMvc3JjL3V0aWxzL3N2Zy10YWctZ2VuZXJhdG9yLnRzIik7eS5DbHJTaGFwZUJvbGQ9KDAsXy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTIyLjQzLDE3LjU0YTQuNjcsNC42NywwLDAsMCwyLjgtNC4zN3YtLjA2'@;
put 'YTQuNDMsNC40MywwLDAsMC0xLjMxLTMuMjUsNy4wOSw3LjA5LDAsMCwwLTUuMTMtMS43M2gtN0ExLjcxLDEuNzEsMCwwLDAsMTAsOS44NlYyNmExLjcyLDEuNzIsMCwwLDAsMS43NCwxLjc0aDcuMzNjNC4zNywwLDcuMjUtMS44OCw3LjI1LTUuMzhWMjIuM0MyNi4zMiwxOS42NCwyNC43Mywx'@;
put 'OC4zMiwyMi40MywxNy41NFpNMTMuNjgsMTEuNGg0LjU0YzIsMCwzLjE1Ljg5LDMuMTUsMi4zM3YuMDZjMCwxLjY4LTEuMzYsMi40OS0zLjM4LDIuNDlIMTMuNjhaTTIyLjM3LDIyYzAsMS41OS0xLjMxLDIuNDMtMy40NiwyLjQzSDEzLjY4VjE5LjYyaDVjMi40OSwwLDMuNjkuODgsMy42OSwy'@;
put 'LjM3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+JykseS5DbHJTaGFwZUJ1bGxldExpc3Q9KDAsXy5jbHJJY29uU1ZHKSgnPGNpcmNsZSBjeD0iNS4yMSIgY3k9IjkuMTciIHI9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0'@;
put 'aC0xIiAvPjxjaXJjbGUgY3g9IjUuMjEiIGN5PSIxNy4xNyIgcj0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PGNpcmNsZSBjeD0iNS4yMSIgY3k9IjI1LjE3IiByPSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIg'@;
put 'Lz48cGF0aCBkPSJNMzIuNDIsOWExLDEsMCwwLDAtMS0xSDEwdjJIMzEuNDJBMSwxLDAsMCwwLDMyLjQyLDlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz48cGF0aCBkPSJNMzEuNDIsMTZIMTB2MkgzMS40MmExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNs'@;
put 'ci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIC8+PHBhdGggZD0iTTMxLjQyLDI0SDEwdjJIMzEuNDJhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02IiAvPicpLHkuQ2xyU2hhcGVDZW50ZXJUZXh0PSgwLF8uY2xySWNvblNW'@;
put 'RykoJzxwYXRoIGQ9Ik0zMC44OCw4SDUuMTJhMS4xLDEuMSwwLDAsMCwwLDIuMkgzMC44OGExLjEsMS4xLDAsMSwwLDAtMi4yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTI1LjUsMTYuMmExLjEsMS4xLDAsMSwwLDAtMi4yaC0xNWEx'@;
put 'LjEsMS4xLDAsMSwwLDAsMi4yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTMwLjI1LDIwSDUuNzVhMS4xLDEuMSwwLDAsMCwwLDIuMmgyNC41YTEuMSwxLjEsMCwwLDAsMC0yLjJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1v'@;
put 'dXRsaW5lLXBhdGgtMyIgLz48cGF0aCBkPSJNMjQuODgsMjZIMTEuMTJhMS4xLDEuMSwwLDEsMCwwLDIuMkgyNC44OGExLjEsMS4xLDAsMSwwLDAtMi4yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+JykseS5DbHJTaGFwZUNoZWNrYm94TGlzdD0oMCxf'@;
put 'LmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzEuNDMsMTZIMTB2MkgzMS40M2ExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTMxLjQzLDI0SDEwdjJIMzEuNDNhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1v'@;
put 'dXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0xNS40NSwxMGgxNmExLDEsMCwwLDAsMC0yaC0xNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0xNy41LDMuNDJhMS4wOSwxLjA5LDAsMCwwLTEuNTUsMEw3Ljg5'@;
put 'LDExLjQ4LDQuNTEsNy44NEExLjEsMS4xLDAsMSwwLDIuOSw5LjM0bDQuOTQsNS4zTDE3LjUsNUExLjEsMS4xLDAsMCwwLDE3LjUsMy40MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPicpLHkuQ2xyU2hhcGVGb250U2l6ZT0oMCxfLmNsckljb25TVkcp'@;
put 'KCc8cGF0aCBkPSJNMjEsOS4wOEExLjEzLDEuMTMsMCwwLDAsMTkuODYsOEg0LjYyYTEuMSwxLjEsMCwxLDAsMCwyLjE5SDExVjI3YTEuMDksMS4wOSwwLDAsMCwyLjE3LDBWMTAuMTloNi42OUExLjE0LDEuMTQsMCwwLDAsMjEsOS4wOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91'@;
put 'dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0zMC42NywxNUgyMS4xNWExLjEsMS4xLDAsMSwwLDAsMi4xOUgyNVYyNi41YTEuMDksMS4wOSwwLDAsMCwyLjE3LDBWMTcuMjNoMy41NGExLjEsMS4xLDAsMSwwLDAtMi4xOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0'@;
put 'aC0yIiAvPicpLHkuQ2xyU2hhcGVBbGlnbkNlbnRlcj0oMCxfLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzEsMjBIMTlWMTZoNmExLDEsMCwwLDAsMS0xVjdhMSwxLDAsMCwwLTEtMUgxOVYyYTEsMSwwLDAsMC0yLDBWNkgxMWExLDEsMCwwLDAtMSwxdjhhMSwxLDAsMCwwLDEsMWg2djRINWEx'@;
put 'LDEsMCwwLDAtMSwxdjhhMSwxLDAsMCwwLDEsMUgxN3Y0YTEsMSwwLDAsMCwyLDBWMzBIMzFhMSwxLDAsMCwwLDEtMVYyMUExLDEsMCwwLDAsMzEsMjBaTTEyLDE0VjhIMjR2NlpNMzAsMjhINlYyMkgzMFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPicp'@;
put 'LHkuQ2xyU2hhcGVBbGlnbkxlZnQ9KDAsXy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTUsMUExLDEsMCwwLDAsNCwyVjM0YTEsMSwwLDAsMCwyLDBWMkExLDEsMCwwLDAsNSwxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTMxLDIwSDhW'@;
put 'MzBIMzFhMSwxLDAsMCwwLDEtMVYyMUExLDEsMCwwLDAsMzEsMjBabS0xLDhIMTBWMjJIMzBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMjQsMTVWN2ExLDEsMCwwLDAtMS0xSDhWMTZIMjNBMSwxLDAsMCwwLDI0LDE1Wm0tMi0xSDEw'@;
put 'VjhIMjJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz4nKSx5LkNsclNoYXBlQWxpZ25SaWdodD0oMCxfLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzEsMWExLDEsMCwwLDAtMSwxVjM0YTEsMSwwLDAsMCwyLDBWMkExLDEsMCwwLDAsMzEsMVoiIGNsYXNz'@;
put 'PSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik00LDIxdjhhMSwxLDAsMCwwLDEsMUgyOFYyMEg1QTEsMSwwLDAsMCw0LDIxWm0yLDFIMjZ2Nkg2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTEy'@;
put 'LDd2OGExLDEsMCwwLDAsMSwxSDI4VjZIMTNBMSwxLDAsMCwwLDEyLDdabTIsMUgyNnY2SDE0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+JykseS5DbHJTaGFwZUl0YWxpYz0oMCxfLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjQuNDIsOEgxNy4xYTEu'@;
put 'MSwxLjEsMCwxLDAsMCwyLjE5aDIuMTNMMTMuMTEsMjUuNTVIMTAuNDdhMS4xLDEuMSwwLDEsMCwwLDIuMTlIMTcuOGExLjEsMS4xLDAsMSwwLDAtMi4xOUgxNS41MWw2LjEzLTE1LjM2aDIuNzhhMS4xLDEuMSwwLDEsMCwwLTIuMTlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRs'@;
put 'aW5lLXBhdGgtMSIgLz4nKSx5LkNsclNoYXBlSnVzdGlmeVRleHQ9KDAsXy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTYsMTAuMkgzMS43NWExLjEsMS4xLDAsMSwwLDAtMi4ySDZhMS4xLDEuMSwwLDEsMCwwLDIuMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0x'@;
put 'IiAvPjxwYXRoIGQ9Ik0zMS43NSwxNEg2YTEuMSwxLjEsMCwxLDAsMCwyLjJIMzEuNzVhMS4xLDEuMSwwLDEsMCwwLTIuMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0zMS4xMiwyMEg2LjYyYTEuMSwxLjEsMCwxLDAsMCwyLjJoMjQu'@;
put 'NWExLjEsMS4xLDAsMSwwLDAtMi4yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+PHBhdGggZD0iTTMwLjQ1LDI1LjgzSDYuNmExLjEsMS4xLDAsMCwwLDAsMi4ySDMwLjQ1YTEuMSwxLjEsMCwwLDAsMC0yLjJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBj'@;
put 'bHItaS1vdXRsaW5lLXBhdGgtNCIgLz4nKSx5LkNsclNoYXBlQWxpZ25MZWZ0VGV4dD0oMCxfLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjAuMjUsMjZINnYyLjJIMjAuMjVhMS4xLDEuMSwwLDAsMCwwLTIuMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAv'@;
put 'PjxwYXRoIGQ9Ik0yOCwyMEg2djIuMkgyOEExLjEsMS4xLDAsMCwwLDI4LDIwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTIyLjYsMTUuMUExLjEsMS4xLDAsMCwwLDIxLjUsMTRINnYyLjJIMjEuNUExLjEsMS4xLDAsMCwwLDIyLjYs'@;
put 'MTUuMVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0yOS4yNSw4SDZ2Mi4ySDI5LjI1YTEuMSwxLjEsMCwxLDAsMC0yLjJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz4nKSx5LkNsclNoYXBlTnVt'@;
put 'YmVyTGlzdD0oMCxfLmNsckljb25TVkcpKCc8cG9seWdvbiBwb2ludHM9IjUuNDYgNy40MSA1LjQ2IDExLjU2IDYuNjUgMTEuNTYgNi42NSA2LjA1IDUuNyA2LjA1IDQuMDUgNy4xNiA0LjUyIDggNS40NiA3LjQxIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIg'@;
put 'Lz48cGF0aCBkPSJNNS41NywxNC44MmEuNzYuNzYsMCwwLDEsLjgzLjczYzAsLjM4LS4yMS43NC0uODcsMS4yN2wtMiwxLjU3djFINy42N1YxOC4yOEg1LjMzbDEtLjc3YzEtLjcsMS4yOC0xLjI3LDEuMjgtMmExLjgzLDEuODMsMCwwLDAtMi0xLjc2LDIuNjMsMi42MywwLDAsMC0yLjE0LDEu'@;
put 'MDhsLjc2LjczQTEuNzUsMS43NSwwLDAsMSw1LjU3LDE0LjgyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTYuNTYsMjQuNjRhMS4zMiwxLjMyLDAsMCwwLDEtMS4yN2MwLS44Ny0uNzgtMS41MS0yLTEuNTFhMi42MSwyLjYxLDAsMCww'@;
put 'LTIuMSwxbC42OS43MmExLjc4LDEuNzgsMCwwLDEsMS4zLS42NGMuNTQsMCwuOTIuMjYuOTIuNjZzLS4zNi42Mi0xLC42Mkg0Ljc5djFoLjY0Yy43NCwwLDEuMDcuMjEsMS4wNy42M3MtLjM1LjY4LTEsLjY4YTIsMiwwLDAsMS0xLjQ2LS42NWwtLjcuNzhhMi44NSwyLjg1LDAsMCwwLDIuMjEu'@;
put 'OTNjMS4yOSwwLDIuMTMtLjY5LDIuMTMtMS42NEExLjMzLDEuMzMsMCwwLDAsNi41NiwyNC42NFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0zMi40Miw5YTEsMSwwLDAsMC0xLTFIMTB2MkgzMS40MkExLDEsMCwwLDAsMzIuNDIsOVoi'@;
put 'IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPjxwYXRoIGQ9Ik0zMS40MiwxNkgxMHYySDMxLjQyYTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz48cGF0aCBkPSJNMzEuNDIsMjRIMTB2MkgzMS40'@;
put 'MmExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIC8+JykseS5DbHJTaGFwZVBhaW50Um9sbGVyPSgwLF8uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMSwxMFY0YTIsMiwwLDAsMC0yLTJINkEyLDIsMCwwLDAsNCw0djZhMiwyLDAsMCww'@;
put 'LDIsMkgyOUEyLDIsMCwwLDAsMzEsMTBaTTYsNEgyOXY2SDZaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNMzMsNkgzMnY2LjI5TDE4LjcsMTYuNTRhMSwxLDAsMCwwLS43LDFWMTlIMTZWMzNhMiwyLDAsMCwwLDIsMmgyYTIsMiwwLDAs'@;
put 'MCwyLTJWMTlIMjB2LS43M0wzMy4zLDE0YTEsMSwwLDAsMCwuNy0xVjdBMSwxLDAsMCwwLDMzLDZaTTIwLDMzSDE4VjIxaDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cmVjdCB4PSI0IiB5PSIyIiB3aWR0aD0iMjciIGhlaWdodD0iMTAiIHJ4PSIx'@;
put 'IiByeT0iMSIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz48cGF0aCBkPSJNMzMsNkgzMnY2LjI0TDE4LjcxLDE2LjQ1YTEsMSwwLDAsMC0uNzEsMVYxOUgxNlYzNGExLDEsMCwwLDAsMSwxaDRhMSwxLDAsMCwwLDEtMVYxOUgyMHYtLjgyTDMzLjI5LDE0QTEsMSww'@;
put 'LDAsMCwzNCwxM1Y3QTEsMSwwLDAsMCwzMyw2WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz4nKSx5LkNsclNoYXBlQmxvY2tRdW90ZT0oMCxfLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTEuODYsMTYuNTVhNC4zMSw0LjMxLDAsMCwwLTIuMTEuNTYsMTQuNDQs'@;
put 'MTQuNDQsMCwwLDEsNC4zNi02LDEuMSwxLjEsMCwwLDAtMS40LTEuN2MtNCwzLjI1LTUuNzgsNy43NS01Ljc4LDEwLjU0QTUuMDgsNS4wOCwwLDAsMCwxMCwyNC41OGE0LjQsNC40LDAsMCwwLDEuODguNDQsNC4yNCw0LjI0LDAsMSwwLDAtOC40N1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNs'@;
put 'ci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0yMywxNi41NWE0LjI5LDQuMjksMCwwLDAtMi4xMS41NiwxNC41LDE0LjUsMCwwLDEsNC4zNS02LDEuMSwxLjEsMCwxLDAtMS4zOS0xLjdjLTQsMy4yNS01Ljc4LDcuNzUtNS43OCwxMC41NGE1LjA4LDUuMDgsMCwwLDAsMyw0LjYxQTQu'@;
put 'MzcsNC4zNywwLDAsMCwyMywyNWE0LjI0LDQuMjQsMCwxLDAsMC04LjQ3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+JykseS5DbHJTaGFwZUFsaWduUmlnaHRUZXh0PSgwLF8uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xNC42NSwyNy4xYTEuMSwxLjEs'@;
put 'MCwwLDAsMS4xLDEuMUgzMFYyNkgxNS43NUExLjEsMS4xLDAsMCwwLDE0LjY1LDI3LjFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNNi45LDIxLjFBMS4xLDEuMSwwLDAsMCw4LDIyLjJIMzBWMjBIOEExLjEsMS4xLDAsMCwwLDYuOSwy'@;
put 'MS4xWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTEzLjQsMTUuMWExLjEsMS4xLDAsMCwwLDEuMSwxLjFIMzBWMTRIMTQuNUExLjEsMS4xLDAsMCwwLDEzLjQsMTUuMVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUt'@;
put 'cGF0aC0zIiAvPjxwYXRoIGQ9Ik02Ljc1LDhhMS4xLDEuMSwwLDEsMCwwLDIuMkgzMFY4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+JykseS5DbHJTaGFwZVRleHQ9KDAsXy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTEyLjE5LDguODRhMS40NSwxLjQ1'@;
put 'LDAsMCwwLTEuNC0xaC0uMTJhMS40NiwxLjQ2LDAsMCwwLTEuNDIsMUwxLjE0LDI2LjU2YTEuMjksMS4yOSwwLDAsMC0uMTQuNTksMSwxLDAsMCwwLDEsMSwxLjEyLDEuMTIsMCwwLDAsMS4wOC0uNzdsMi4wOC00LjY1aDExbDIuMDgsNC41OWExLjI0LDEuMjQsMCwwLDAsMS4xMi44MywxLjA4'@;
put 'LDEuMDgsMCwwLDAsMS4wOC0xLjA4LDEuNjQsMS42NCwwLDAsMC0uMTQtLjU3Wk02LjA4LDIwLjcxbDQuNTktMTAuMjIsNC42LDEwLjIyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTMyLjI0LDE0Ljc4QTYuMzUsNi4zNSwwLDAsMCwy'@;
put 'Ny42LDEzLjJhMTEuMzYsMTEuMzYsMCwwLDAtNC43LDEsMSwxLDAsMCwwLS41OC44OSwxLDEsMCwwLDAsLjk0LjkyLDEuMjMsMS4yMywwLDAsMCwuMzktLjA4LDguODcsOC44NywwLDAsMSwzLjcyLS44MWMyLjcsMCw0LjI4LDEuMzMsNC4yOCwzLjkydi41YTE1LjI5LDE1LjI5LDAsMCwwLTQu'@;
put 'NDItLjYxYy0zLjY0LDAtNi4xNCwxLjYxLTYuMTQsNC42NHYuMDVjMCwyLjk1LDIuNyw0LjQ4LDUuMzcsNC40OGE2LjI5LDYuMjksMCwwLDAsNS4xOS0yLjQ4VjI2LjlhMSwxLDAsMCwwLDEsMSwxLDEsMCwwLDAsMS0xLjA2VjE5QTUuNzEsNS43MSwwLDAsMCwzMi4yNCwxNC43OFptLS41Niw3'@;
put 'LjdjMCwyLjI4LTIuMTcsMy44OS00LjgxLDMuODktMS45NCwwLTMuNjEtMS4wNi0zLjYxLTIuODZ2LS4wNmMwLTEuOCwxLjUtMyw0LjItM2ExNS4yLDE1LjIsMCwwLDEsNC4yMi42MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPicpLHkuQ2xyU2hhcGVV'@;
put 'bmRlcmxpbmU9KDAsXy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE4LDI4LjE3YzUuMDgsMCw4LjQ4LTMuMDgsOC40OC05VjguNTRhMS4xNSwxLjE1LDAsMSwwLTIuMywwdjEwLjhjMCw0LjQ0LTIuMzgsNi43MS02LjEzLDYuNzFzLTYuMjEtMi40Ny02LjIxLTYuODVWOC41NGExLjE1LDEuMTUs'@;
put 'MCwxLDAtMi4zLDB2MTAuOEM5LjUzLDI1LjA5LDEzLDI4LjE3LDE4LDI4LjE3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTMxLDMwSDVhMS4xMSwxLjExLDAsMCwwLDAsMi4yMUgzMUExLjExLDEuMTEsMCwwLDAsMzEsMzBaIiBjbGFz'@;
put 'cz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz4nKSx5LkNsclNoYXBlQWxpZ25Cb3R0b209KDAsXy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTM0LDMwSDJhMSwxLDAsMCwwLDAsMkgzNGExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0'@;
put 'bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTE2LDVhMSwxLDAsMCwwLTEtMUg3QTEsMSwwLDAsMCw2LDVWMjhIMTZaTTE0LDI2SDhWNmg2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTMwLDEzYTEsMSwwLDAsMC0xLTFIMjFhMSwxLDAs'@;
put 'MCwwLTEsMVYyOEgzMFpNMjgsMjZIMjJWMTRoNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPicpLHkuQ2xyU2hhcGVBbGlnbk1pZGRsZT0oMCxfLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzQsMTdIMzBWMTFhMSwxLDAsMCwwLTEtMUgyMWExLDEsMCww'@;
put 'LDAtMSwxdjZIMTZWNWExLDEsMCwwLDAtMS0xSDdBMSwxLDAsMCwwLDYsNVYxN0gyYTEsMSwwLDAsMCwwLDJINlYzMWExLDEsMCwwLDAsMSwxaDhhMSwxLDAsMCwwLDEtMVYxOWg0djZhMSwxLDAsMCwwLDEsMWg4YTEsMSwwLDAsMCwxLTFWMTloNGExLDEsMCwwLDAsMC0yWk0xNCwzMEg4VjZo'@;
put 'NlptMTQtNkgyMlYxMmg2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+JykseS5DbHJTaGFwZUFsaWduVG9wPSgwLF8uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zNCw0SDJBMSwxLDAsMCwwLDIsNkgzNGExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1p'@;
put 'LW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTYsMzFhMSwxLDAsMCwwLDEsMWg4YTEsMSwwLDAsMCwxLTFWOEg2Wk04LDEwaDZWMzBIOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0yMCwyM2ExLDEsMCww'@;
put 'LDAsMSwxaDhhMSwxLDAsMCwwLDEtMVY4SDIwWm0yLTEzaDZWMjJIMjJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz4nKSx5LkNsclNoYXBlTGFuZ3VhZ2U9KDAsXy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMwLDNIMTR2NWgyVjVoMTRjMC42LDAsMSww'@;
put 'LjQsMSwxdjExYzAsMC42LTAuNCwxLTEsMUgxN3Y3aC01LjNMOCwyNy45VjI1SDVjLTAuNiwwLTEtMC40LTEtMVYxM2MwLTAuNiwwLjQtMSwxLTFoMTN2LTJINVxuXHRcdGMtMS43LDAtMywxLjMtMywzdjExYzAsMS43LDEuMywzLDMsM2gxdjUuMWw2LjMtNS4xSDE5di03aDExYzEuNywwLDMt'@;
put 'MS4zLDMtM1Y2QzMzLDQuMywzMS43LDMsMzAsM3oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik02LjIsMjIuOWgyLjRsMC42LTEuNmgzLjFsMC42LDEuNmgyLjRMMTEuOSwxNEg5LjVMNi4yLDIyLjl6IE0xMC43LDE2LjVsMSwzLjFoLTJM'@;
put 'MTAuNywxNi41eiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTIwLDE3YzEuMSwwLDIuNi0wLjMsNC0xYzEuNCwwLjcsMywxLDQsMXYtMmMwLDAtMSwwLTIuMS0wLjRjMS4yLTEuMiwyLjEtMywyLjEtNS42VjhoLTNWNmgtMnYyaC0zdjJo'@;
put 'NS45XG5cdFx0Yy0wLjIsMS44LTEsMi45LTEuOSwzLjZjLTAuNi0wLjUtMS4yLTEuMi0xLjYtMi4xaC0yLjFjMC40LDEuMywxLDIuMywxLjgsMy4xQzIxLjEsMTUsMjAuMiwxNSwyMCwxNVYxN3oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwb2x5Z29u'@;
put 'IHBvaW50cz0iMTEsMTYuNSAxMCwxOS42IDEyLDE5LjYgMTEsMTYuNSBcdCIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz48cGF0aCBkPSJNMzAuMywzaC0xNnY1aDR2MmgtMTNjLTEuNywwLTMsMS4zLTMsM3YxMWMwLDEuNywxLjMsMywzLDNoMXY1LjFsNi4zLTUu'@;
put 'MWg2Ljd2LTdoMTFjMS43LDAsMy0xLjMsMy0zVjZcblx0XHRDMzMuMyw0LjMsMzIsMywzMC4zLDN6IE0xMy4xLDIyLjlsLTAuNS0xLjZIOS41bC0wLjYsMS42SDYuNUw5LjgsMTRoMi40bDMuMyw4LjlMMTMuMSwyMi45eiBNMjguMywxNXYyYy0xLjMsMC0yLjctMC40LTMuOS0xXG5cdFx0Yy0x'@;
put 'LjIsMC42LTIuNiwwLjktNCwxbC0wLjEtMmMwLjcsMCwxLjQtMC4xLDIuMS0wLjNjLTAuOS0wLjktMS41LTItMS44LTMuMmgyLjFjMC4zLDAuOSwwLjksMS42LDEuNiwyLjJjMS4xLTAuOSwxLjgtMi4yLDEuOS0zLjdcblx0XHRoLTZWOGgzVjZoMnYyaDMuM2wwLjEsMWMwLjEsMi4xLTAuNyw0'@;
put 'LjItMi4yLDUuN0MyNy4xLDE0LjksMjcuNywxNSwyOC4zLDE1eiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz4nKSx5LkNsclNoYXBlVGV4dENvbG9yPSgwLF8uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOS40NywzLjg0YTEuNDUsMS40NSwwLDAsMC0xLjQtMUgx'@;
put 'OGExLjQ1LDEuNDUsMCwwLDAtMS40MiwxTDguNDIsMjEuNTZhMS4zNSwxLjM1LDAsMCwwLS4xNC41OSwxLDEsMCwwLDAsMSwxLDEuMTEsMS4xMSwwLDAsMCwxLjA4LS43N2wyLjA4LTQuNjVoMTFsMi4wOCw0LjU5YTEuMjQsMS4yNCwwLDAsMCwxLjEyLjgzLDEuMDgsMS4wOCwwLDAsMCwxLjA4'@;
put 'LTEuMDgsMS41OSwxLjU5LDAsMCwwLS4xNC0uNTdaTTEzLjM2LDE1LjcxLDE4LDUuNDlsNC42LDEwLjIyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgPHJlY3QgeD0iNC4wNiIgeT0iMjUiIHdpZHRoPSIyOCIgaGVpZ2h0PSI4IiByeD0iMiIgcnk9'@;
put 'IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+JykseS5DbHJTaGFwZUhpZ2hsaWdodGVyPSgwLF8uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xNS44MiwyNi4wNmExLDEsMCwwLDEtLjcxLS4yOUw4LjY3LDE5LjMzYTEsMSwwLDAsMS0uMjktLjcxLDEsMSww'@;
put 'LDAsMSwuMjktLjcxTDIzLDMuNTRhNS41NSw1LjU1LDAsMSwxLDcuODUsNy44NkwxNi41MywyNS43N0ExLDEsMCwwLDEsMTUuODIsMjYuMDZabS01LTcuNDQsNSw1TDI5LjQ4LDEwYTMuNTQsMy41NCwwLDAsMCwwLTUsMy42MywzLjYzLDAsMCwwLTUsMFoiIGNsYXNzPSJjbHItaS1vdXRsaW5l'@;
put 'IGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gIDxwYXRoIGQ9Ik0xMC4zOCwyOC4yOEExLDEsMCwwLDEsOS42NywyOEw2LjQ1LDI0Ljc3YTEsMSwwLDAsMS0uMjItMS4wOWwyLjIyLTUuNDRhMSwxLDAsMCwxLDEuNjMtLjMzbDYuNDUsNi40NEExLDEsMCwwLDEsMTYuMiwyNmwtNS40NCwyLjIy'@;
put 'QTEuMzMsMS4zMywwLDAsMSwxMC4zOCwyOC4yOFpNOC4zMywyMy44MmwyLjI5LDIuMjgsMy40My0xLjRMOS43NCwyMC4zOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gIDxwYXRoIGQ9Ik04Ljk0LDMwaC01YTEsMSwwLDAsMS0uODQtMS41NWwzLjIy'@;
put 'LTQuOTRhMSwxLDAsMCwxLDEuNTUtLjE2bDMuMjEsMy4yMmExLDEsMCwwLDEsLjA2LDEuMzVMOS43LDI5LjY0QTEsMSwwLDAsMSw4Ljk0LDMwWk01Ljc4LDI4SDguNDdMOSwyNy4zNGwtMS43LTEuN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIi8+XG4gIDxy'@;
put 'ZWN0IHg9IjMuMDYiIHk9IjMxIiB3aWR0aD0iMzAiIGhlaWdodD0iMyIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiLz4nKSx5LkNsclNoYXBlT3V0ZGVudD0oMCxfLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzEuMDYsOWgtMjZhMSwxLDAsMSwxLDAtMmgyNmEx'@;
put 'LDEsMCwxLDEsMCwyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgPHBhdGggZD0iTTMxLjA2LDE0aC0xN2ExLDEsMCwwLDEsMC0yaDE3YTEsMSwwLDEsMSwwLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxu'@;
put 'ICA8cGF0aCBkPSJNMzEuMDYsMTloLTE3YTEsMSwwLDAsMSwwLTJoMTdhMSwxLDAsMSwxLDAsMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIi8+XG4gIDxwYXRoIGQ9Ik0zMS4wNiwyNGgtMTdhMSwxLDAsMCwxLDAtMmgxN2ExLDEsMCwxLDEsMCwyWiIgY2xh'@;
put 'c3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiLz5cbiAgPHBhdGggZD0iTTMxLjA2LDI5aC0yNmExLDEsMCwwLDEsMC0yaDI2YTEsMSwwLDEsMSwwLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIvPlxuICA8cGF0aCBkPSJNOS41Niwy'@;
put 'Mi41NGExLDEsMCwwLDEtLjctLjNMNC42MSwxOGw0LjI1LTQuMjRhMSwxLDAsMCwxLDEuNDEsMS40MUw3LjQ0LDE4bDIuODMsMi44M2ExLDEsMCwwLDEtLjcxLDEuNzFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIvPicpLHkuQ2xyU2hhcGVJbmRlbnQ9KDAs'@;
put 'Xy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMxLjA2LDloLTI2YTEsMSwwLDEsMSwwLTJoMjZhMSwxLDAsMSwxLDAsMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gIDxwYXRoIGQ9Ik0zMS4wNiwxNGgtMTdhMSwxLDAsMCwxLDAtMmgxN2ExLDEsMCwx'@;
put 'LDEsMCwyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgPHBhdGggZD0iTTMxLjA2LDE5aC0xN2ExLDEsMCwwLDEsMC0yaDE3YTEsMSwwLDEsMSwwLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICA8cGF0'@;
put 'aCBkPSJNMzEuMDYsMjRoLTE3YTEsMSwwLDAsMSwwLTJoMTdhMSwxLDAsMSwxLDAsMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00Ii8+XG4gIDxwYXRoIGQ9Ik0zMS4wNiwyOWgtMjZhMSwxLDAsMCwxLDAtMmgyNmExLDEsMCwxLDEsMCwyWiIgY2xhc3M9ImNs'@;
put 'ci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiLz5cbiAgPHBhdGggZD0iTTUuNTYsMjIuNTRhMSwxLDAsMCwxLS43LTEuNzFMNy42OCwxOCw0Ljg2LDE1LjE3YTEsMSwwLDAsMSwwLTEuNDEsMSwxLDAsMCwxLDEuNDEsMEwxMC41MSwxOCw2LjI3LDIyLjI0QTEsMSwwLDAsMSw1LjU2'@;
put 'LDIyLjU0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiLz4nKSx5LkNsclNoYXBlU3RyaWtldGhyb3VnaD0oMCxfLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzIuODgsMTkuOTJoLTMwYTEsMSwwLDEsMSwwLTJoMzBhMSwxLDAsMCwxLDAsMloiIGNsYXNzPSJj'@;
put 'bHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gIDxwYXRoIGQ9Ik03LjI3LDE1Ljg2YTEyLjksMTIuOSwwLDAsMSwxLjI5LS41MkE1LjY5LDUuNjksMCwwLDEsMTAuMzksMTVhMy4xOCwzLjE4LDAsMCwxLDIuNzUsMS4xMUE0LjQ0LDQuNDQsMCwwLDEsMTQsMTguODV2LjQ5'@;
put 'YTEzLjgzLDEzLjgzLDAsMCwwLTQuMjktLjc0LDYuMTksNi4xOSwwLDAsMC0yLjU5LjU0QTUsNSwwLDAsMCw1LjgxLDIwSDE1Ljg4VjE4Ljg1YTUuNjcsNS42NywwLDAsMC0xLjM3LTQsNS4xNiw1LjE2LDAsMCwwLTQtMS40OSwxMCwxMCwwLDAsMC0zLjkxLjg4Ljg3Ljg3LDAsMCwwLS40NCwx'@;
put 'LjE4QS44NC44NCwwLDAsMCw3LjI3LDE1Ljg2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgPHBhdGggZD0iTTIxLDIwYTUuOTQsNS45NCwwLDAsMSwuNTQtMi4zMSw0LjM1LDQuMzUsMCwwLDEsMS41OC0xLjgzLDQuMjcsNC4yNywwLDAsMSw0LjU5'@;
put 'LDAsNC40Nyw0LjQ3LDAsMCwxLDEuNTcsMS44M0E2LjEyLDYuMTIsMCwwLDEsMjkuODUsMjBoMmE3LjczLDcuNzMsMCwwLDAtLjc4LTMuMTksNiw2LDAsMCwwLTIuMTgtMi40NSw1Ljc0LDUuNzQsMCwwLDAtMy4xLS44OCw1LjM5LDUuMzksMCwwLDAtMi44LjczLDUuNTUsNS41NSwwLDAsMC0y'@;
put 'LDIuMDVWMTBhLjg3Ljg3LDAsMCwwLS44Ni0uODZIMjBhLjg3Ljg3LDAsMCwwLS44Ni44NlYyMFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIi8+XG4gIDxwYXRoIGQ9Ik0yOS42NywyMmE1LjYxLDUuNjEsMCwwLDEtLjM2LDEuMDcsNC40Nyw0LjQ3LDAsMCwx'@;
put 'LTEuNTcsMS44NSw0LjMyLDQuMzIsMCwwLDEtNC41OSwwLDQuMzUsNC4zNSwwLDAsMS0xLjU4LTEuODVBNS42NCw1LjY0LDAsMCwxLDIxLjIsMjJIMTkuMDl2NC4xM0EuODcuODcsMCwwLDAsMjAsMjdoLjJhLjg3Ljg3LDAsMCwwLC44Ni0uODZWMjQuNTFhNS41OCw1LjU4LDAsMCwwLDIsMi4w'@;
put 'Niw1LjQ4LDUuNDgsMCwwLDAsMi44LjcyLDUuNjYsNS42NiwwLDAsMCwzLjEtLjg4QTUuODgsNS44OCwwLDAsMCwzMS4wOSwyNCw3LjA5LDcuMDksMCwwLDAsMzEuNzMsMjJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIvPlxuICA8cGF0aCBkPSJNMTQsMjJ2'@;
put 'Ljc2YTMuMzQsMy4zNCwwLDAsMS0xLjYyLDIsNS4zNCw1LjM0LDAsMCwxLTIuNjkuNzIsMy43OCwzLjc4LDAsMCwxLTIuMzYtLjcsMi4yNCwyLjI0LDAsMCwxLS45NC0xLjksMi4yOSwyLjI5LDAsMCwxLC4yLS45MUg0LjYyYTQsNCwwLDAsMC0uMTMsMSwzLjgzLDMuODMsMCwwLDAsMS4zNSwz'@;
put 'LjA2QTUuMTUsNS4xNSwwLDAsMCw5LjMxLDI3LjIsNiw2LDAsMCwwLDEyLDI2LjU3YTQuNjIsNC42MiwwLDAsMCwyLTEuNzRWMjZhLjg2Ljg2LDAsMCwwLC44Ni44NkgxNWEuODYuODYsMCwwLDAsLjg2LS44NlYyMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01'@;
put 'Ii8+JykseS5DbHJTaGFwZVN1YnNjcmlwdD0oMCxfLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTQuNTUsMThsNi44LDguNmExLjE3LDEuMTcsMCwwLDEtLjkyLDEuOWgwYTEuMTcsMS4xNywwLDAsMS0uOTItLjQ0TDEzLDE5LjkxLDYuNiwyOGExLjE3LDEuMTcsMCwwLDEtLjkyLjQ0aDBhMS4x'@;
put 'NywxLjE3LDAsMCwxLS45Mi0xLjlMMTEuNTUsMThsLTYuOC04LjZhMS4xNywxLjE3LDAsMCwxLC45Mi0xLjloMEExLjE3LDEuMTcsMCwwLDEsNi42Myw4bDYuNDQsOC4xM0wxOS41LDhhMS4xNywxLjE3LDAsMCwxLC45Mi0uNDRoMGExLjE3LDEuMTcsMCwwLDEsLjkyLDEuOVoiIGNsYXNzPSJj'@;
put 'bHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gIDxwYXRoIGQ9Ik0yMywzMS44LDI3LjQ5LDI4YTkuOSw5LjksMCwwLDAsMS44OC0yLjA1QTMuNDQsMy40NCwwLDAsMCwzMCwyNGEyLjM1LDIuMzUsMCwwLDAtLjM1LTEuMjcsMi40NCwyLjQ0LDAsMCwwLTEtLjg0LDIuOSwy'@;
put 'LjksMCwwLDAtMS4yNi0uMjgsMy4zNiwzLjM2LDAsMCwwLTEuODMuNSw1LjY0LDUuNjQsMCwwLDAtMS40OCwxLjQybC0xLS44MWE1LjExLDUuMTEsMCwwLDEsNC4zNi0yLjM3LDQuMzUsNC4zNSwwLDAsMSwyLC40NSwzLjQzLDMuNDMsMCwwLDEsMiwzLjE4LDQuNDUsNC40NSwwLDAsMS0uNjgs'@;
put 'Mi4zNSwxMC45LDEwLjksMCwwLDEtMi4yNCwyLjQ2bC0zLjI0LDIuODFIMzEuNVYzM0gyM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+JykseS5DbHJTaGFwZVN1cGVyc2NyaXB0PSgwLF8uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xNC40MywxOGw2Ljc5'@;
put 'LDguNmExLjE3LDEuMTcsMCwwLDEtLjkyLDEuOWgwYTEuMTcsMS4xNywwLDAsMS0uOTItLjQ0bC02LjQ0LTguMTNMNi40NywyOGExLjE3LDEuMTcsMCwwLDEtLjkyLjQ0aDBhMS4xNywxLjE3LDAsMCwxLS45Mi0xLjlMMTEuNDMsMThsLTYuOC04LjZhMS4xNywxLjE3LDAsMCwxLC45Mi0xLjlo'@;
put 'MEExLjIsMS4yLDAsMCwxLDYuNTEsOGw2LjQzLDguMTNMMTkuMzgsOGExLjE3LDEuMTcsMCwwLDEsLjkyLS40NGgwYTEuMTcsMS4xNywwLDAsMSwuOTIsMS45WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgPHBhdGggZD0iTTIyLjg1LDE0LjQ3bDQu'@;
put 'NTEtMy44NWE5LjM3LDkuMzcsMCwwLDAsMS44OC0yLDMuNDMsMy40MywwLDAsMCwuNTktMS44NiwyLjI3LDIuMjcsMCwwLDAtLjM2LTEuMjcsMi4zOCwyLjM4LDAsMCwwLS45NS0uODMsMi43NywyLjc3LDAsMCwwLTEuMjYtLjI5LDMuMzksMy4zOSwwLDAsMC0xLjgzLjUsNS44Myw1LjgzLDAs'@;
put 'MCwwLTEuNDksMS40MmwtMS0uODFhNS4xMiw1LjEyLDAsMCwxLDQuMzYtMi4zNyw0LjM2LDQuMzYsMCwwLDEsMiwuNDUsMy40NywzLjQ3LDAsMCwxLDIsMy4xOEE0LjQ0LDQuNDQsMCwwLDEsMzAuNTgsOWExMS4xNCwxMS4xNCwwLDAsMS0yLjI0LDIuNDZMMjUuMSwxNC4zMWg2LjI4djEuMzNI'@;
put 'MjIuODVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPicpLHkuVGV4dEVkaXRTaGFwZXM9e2JvbGQ6eS5DbHJTaGFwZUJvbGQsImJ1bGxldC1saXN0Ijp5LkNsclNoYXBlQnVsbGV0TGlzdCwiY2hlY2tib3gtbGlzdCI6eS5DbHJTaGFwZUNoZWNrYm94TGlz'@;
put 'dCwibnVtYmVyLWxpc3QiOnkuQ2xyU2hhcGVOdW1iZXJMaXN0LCJmb250LXNpemUiOnkuQ2xyU2hhcGVGb250U2l6ZSxpdGFsaWM6eS5DbHJTaGFwZUl0YWxpYywianVzdGlmeS10ZXh0Ijp5LkNsclNoYXBlSnVzdGlmeVRleHQsImNlbnRlci10ZXh0Ijp5LkNsclNoYXBlQ2VudGVyVGV4dCwi'@;
put 'YWxpZ24tbGVmdC10ZXh0Ijp5LkNsclNoYXBlQWxpZ25MZWZ0VGV4dCwiYWxpZ24tcmlnaHQtdGV4dCI6eS5DbHJTaGFwZUFsaWduUmlnaHRUZXh0LCJwYWludC1yb2xsZXIiOnkuQ2xyU2hhcGVQYWludFJvbGxlciwiYmxvY2stcXVvdGUiOnkuQ2xyU2hhcGVCbG9ja1F1b3RlLHRleHQ6eS5D'@;
put 'bHJTaGFwZVRleHQsdW5kZXJsaW5lOnkuQ2xyU2hhcGVVbmRlcmxpbmUsImFsaWduLWNlbnRlciI6eS5DbHJTaGFwZUFsaWduQ2VudGVyLCJhbGlnbi1sZWZ0Ijp5LkNsclNoYXBlQWxpZ25MZWZ0LCJhbGlnbi1yaWdodCI6eS5DbHJTaGFwZUFsaWduUmlnaHQsImFsaWduLWJvdHRvbSI6eS5D'@;
put 'bHJTaGFwZUFsaWduQm90dG9tLCJhbGlnbi1taWRkbGUiOnkuQ2xyU2hhcGVBbGlnbk1pZGRsZSwiYWxpZ24tdG9wIjp5LkNsclNoYXBlQWxpZ25Ub3AsbGFuZ3VhZ2U6eS5DbHJTaGFwZUxhbmd1YWdlLCJ0ZXh0LWNvbG9yIjp5LkNsclNoYXBlVGV4dENvbG9yLGhpZ2hsaWdodGVyOnkuQ2xy'@;
put 'U2hhcGVIaWdobGlnaHRlcixpbmRlbnQ6eS5DbHJTaGFwZUluZGVudCxvdXRkZW50OnkuQ2xyU2hhcGVPdXRkZW50LHN0cmlrZXRocm91Z2g6eS5DbHJTaGFwZVN0cmlrZXRocm91Z2gsc3Vic2NyaXB0OnkuQ2xyU2hhcGVTdWJzY3JpcHQsc3VwZXJzY3JpcHQ6eS5DbHJTaGFwZVN1cGVyc2Ny'@;
put 'aXB0fSx0eXBlb2Ygd2luZG93PCJ1IiYmd2luZG93Lmhhc093blByb3BlcnR5KCJDbGFyaXR5SWNvbnMiKSYmd2luZG93LkNsYXJpdHlJY29ucy5hZGQoeS5UZXh0RWRpdFNoYXBlcyl9LCIuL3Byb2plY3RzL2ljb25zL3NyYy9zaGFwZXMvdHJhdmVsLXNoYXBlcy50cyI6Ci8qISoqKioqKioq'@;
put 'KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKICAgICAgICAgICAgICAgICAgISoqKiAuL3Byb2plY3RzL2ljb25zL3NyYy9zaGFwZXMvdHJhdmVsLXNoYXBlcy50cyAqKiohCiAgICAgICAgICAgICAgICAgIFwqKioqKioqKioqKioqKioqKioqKioqKioq'@;
put 'KioqKioqKioqKioqKioqKioqKioqKioqKioqLwovKiEgbm8gc3RhdGljIGV4cG9ydHMgZm91bmQgKi9mdW5jdGlvbihYLHksSSl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh5LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx5LlRyYXZlbFNoYXBlcz15LkNsclNoYXBlT25I'@;
put 'b2xpZGF5PXkuQ2xyU2hhcGVUcmFpbGVyPXkuQ2xyU2hhcGVGZXJyeT15LkNsclNoYXBlQ2FyYXZhbj15LkNsclNoYXBlQ2FtcGVydmFuPXkuQ2xyU2hhcGVCb2F0PXkuQ2xyU2hhcGVCaWN5Y2xlPXkuQ2xyU2hhcGVNYXBNYXJrZXI9eS5DbHJTaGFwZUNvbXBhc3M9eS5DbHJTaGFwZU1hcD15'@;
put 'LkNsclNoYXBlQ2FyPXkuQ2xyU2hhcGVBaXJwbGFuZT15LkNsclNoYXBlVHJ1Y2s9dm9pZCAwO3ZhciBfPUkoCi8qISAuLi91dGlscy9kZXNjcmlwdG9yLWNvbmZpZyAqLwoiLi9wcm9qZWN0cy9pY29ucy9zcmMvdXRpbHMvZGVzY3JpcHRvci1jb25maWcudHMiKSxnPUkoCi8qISAuLi91dGls'@;
put 'cy9zdmctdGFnLWdlbmVyYXRvciAqLwoiLi9wcm9qZWN0cy9pY29ucy9zcmMvdXRpbHMvc3ZnLXRhZy1nZW5lcmF0b3IudHMiKTt5LkNsclNoYXBlVHJ1Y2s9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMCwx'@;
put 'MkgyNlY3YTEsMSwwLDAsMC0xLTFIM0ExLDEsMCwwLDAsMiw3VjI1YTEsMSwwLDAsMCwxLDFINFY4SDI0VjE5LjdhNi40NSw2LjQ1LDAsMCwxLDEuNTYtLjJjLjE1LDAsLjI5LDAsLjQ0LDBWMTRoNGEyLDIsMCwwLDEsMiwydjFIMjh2Mmg0djVIMjkuNmE0LjU0LDQuNTQsMCwwLDAtOC4zNCww'@;
put 'SDE0LjQzYTQuNSw0LjUsMCwwLDAtNC4xNy0yLjc2QTQuMzgsNC4zOCwwLDEsMCwxNC43MiwyNkgyMWE0LjQ5LDQuNDksMCwwLDAsOC45MiwwSDMzYTEsMSwwLDAsMCwxLTFWMTZBNCw0LDAsMCwwLDMwLDEyWk0xMC4yNiwyOGEyLjM4LDIuMzgsMCwxLDEsMC00Ljc1LDIuMzgsMi4zOCwwLDEs'@;
put 'MSwwLDQuNzVabTE1LjE3LDBhMi4zOCwyLjM4LDAsMSwxLDIuNS0yLjM3QTIuNDQsMi40NCwwLDAsMSwyNS40MywyOFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zMCwxMkgyNlY3YTEsMSwwLDAsMC0xLTFIM0ExLDEs'@;
put 'MCwwLDAsMiw3VjI1YTEsMSwwLDAsMCwxLDFINFY4SDI0VjIxLjQ5QTQuNDUsNC40NSwwLDAsMCwyMS4yNSwyNEgxNC40M2E0LjUsNC41LDAsMCwwLTQuMTctMi43NkE0LjM4LDQuMzgsMCwxLDAsMTQuNzIsMjZIMjFhNC40OCw0LjQ4LDAsMCwwLDguOTEsMEgzNFYxNkE0LDQsMCwwLDAsMzAs'@;
put 'MTJaTTEwLjI2LDI4YTIuMzgsMi4zOCwwLDEsMSwwLTQuNzUsMi4zOCwyLjM4LDAsMSwxLDAsNC43NVptMTUuMTcsMGEyLjM4LDIuMzgsMCwxLDEsMi41LTIuMzdBMi40NCwyLjQ0LDAsMCwxLDI1LjQyLDI4Wk0zMiwxN0gyNlYxNGg0YTIsMiwwLDAsMSwyLDJaIi8+JykseS5DbHJTaGFwZUFp'@;
put 'cnBsYW5lPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzUuNzcsOC4xNmEyLjQzLDIuNDMsMCwwLDAtMS45LTJMMjgsNC44N2E0LjUsNC41LDAsMCwwLTMuNjUuNzlMNywxOC4zLDIuMTQsMTguMUExLjg2LDEu'@;
put 'ODYsMCwwLDAsLjkxLDIxLjQxbDUsMy45M2MuNi43MywxLC41OSwxMC45My00LjgybC45Myw5LjQyYTEuMzYsMS4zNiwwLDAsMCwuODUsMS4xOCwxLjQzLDEuNDMsMCwwLDAsLjU0LjEsMS41NCwxLjU0LDAsMCwwLDEtLjQxbDIuMzktMi4xOGExLjUyLDEuNTIsMCwwLDAsLjQ2LS44M0wyNS4y'@;
put 'LDE1LjljMy41Ny0yLDYuOTUtMy44OCw5LjM2LTUuMjVBMi40MywyLjQzLDAsMCwwLDM1Ljc3LDguMTZabS0yLjIuNzVjLTIuNSwxLjQyLTYsMy40MS05Ljc2LDUuNDdsLS40MS4yM0wyMS4wNywyNy4yOGwtMS40NywxLjM0TDE4LjUsMTcuMzIsMTcuMTcsMThDMTAsMjIsNy42MSwyMy4xNiw2'@;
put 'Ljc5LDIzLjUybC00LjMtMy40MSw1LjA4LjIyLDE4LTEzLjA2YTIuNTEsMi41MSwwLDAsMSwyLS40NWw1Ljg1LDEuMjZhLjQzLjQzLDAsMCwxLC4zNS4zN0EuNDIuNDIsMCwwLDEsMzMuNTcsOC45MVoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91'@;
put 'dGxpbmUtcGF0aC0yIiBkPSJNNywxMi41NGwzLjU2LDEsMS42NC0xLjE5LTQtMS4xNkwxMCwxMC4wOWw1LjQ3LS4xNiwyLjMtMS42N0wxMCw4LjVhMS4yNSwxLjI1LDAsMCwwLS43LjE3TDYuNjcsMTAuMkExLjI4LDEuMjgsMCwwLDAsNywxMi41NFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNs'@;
put 'YXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik02LjI1LDExLjUsMTIsMTMuMTZsNi4zMi00LjU5LTkuMDcuMjZBLjUyLjUyLDAsMCwwLDksOC45MUw2LjEzLDEwLjU2QS41MS41MSwwLDAsMCw2LjI1LDExLjVaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xy'@;
put 'LWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNMzQuNTIsNi4zNiwyOC4yMiw1YTMuNzgsMy43OCwwLDAsMC0zLjA3LjY3TDYuMTIsMTkuNWwtNC41Ny0uMmExLjI1LDEuMjUsMCwwLDAtLjgzLDIuMjJsNC40NSwzLjUzYS41NS41NSwwLDAsMCwuNTMuMDljMS4yNy0uNDksNi0zLDEx'@;
put 'LjU5LTYuMDdsMS4xMiwxMS41MWEuNTUuNTUsMCwwLDAsLjkuMzdsMi41LTIuMDhhLjc2Ljc2LDAsMCwwLC4yNi0uNDVsMi4zNy0xMy4yOWM0LTIuMjIsNy44Mi00LjM3LDEwLjUxLTUuODlBMS41NSwxLjU1LDAsMCwwLDM0LjUyLDYuMzZaIi8+JykseS5DbHJTaGFwZUNhcj0oMCxnLmNscklj'@;
put 'b25TVkcpKCc8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgeD0iMTUiIHk9IjE3IiB3aWR0aD0iMyIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0y'@;
put 'Ni40NSwxNC4xN0EyMi4xLDIyLjEsMCwwLDAsMTkuMzgsN2E5LjY0LDkuNjQsMCwwLDAtOS0uNyw4LjYsOC42LDAsMCwwLTQuODIsNi40Yy0uMDguNDctLjE0LjkyLS4yLDEuMzZBNCw0LDAsMCwwLDIsMTh2Ni4xM2EyLDIsMCwwLDAsMiwyVjIwSDRWMThhMiwyLDAsMCwxLDItMkgyNC43M0E3'@;
put 'LjI4LDcuMjgsMCwwLDEsMzIsMjMuMjdWMjRoLTJhNC41Myw0LjUzLDAsMSwwLC4zMywySDMyYTIsMiwwLDAsMCwyLTJ2LS43M0E5LjI4LDkuMjgsMCwwLDAsMjYuNDUsMTQuMTdaTTExLDE0SDYuOTNjMC0uMzEuMDktLjYzLjE1LTFBNi41Miw2LjUyLDAsMCwxLDExLDhoMFptMiwwVjcuNThh'@;
put 'OC4xNyw4LjE3LDAsMCwxLDUuMzYsMS4xNkExOSwxOSwwLDAsMSwyMy45LDE0Wk0yNS44LDI4LjM4YTIuNSwyLjUsMCwxLDEsMi41LTIuNUEyLjUsMi41LDAsMCwxLDI1LjgsMjguMzhaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGlu'@;
put 'ZS1wYXRoLTMiIGQ9Ik0xNC4xNywyNGE0LjUzLDQuNTMsMCwxLDAsLjMzLDJoNS4zYzAtLjA4LDAtLjE3LDAtLjI1QTYsNiwwLDAsMSwyMCwyNFpNMTAsMjguMzhhMi41LDIuNSwwLDEsMSwyLjUtMi41QTIuNSwyLjUsMCwwLDEsMTAsMjguMzhaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGgg'@;
put 'Y2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTI2Ljg3LDE0LjI4QTIyLjM2LDIyLjM2LDAsMCwwLDE5LjY1LDYuOWE5LjY0LDkuNjQsMCwwLDAtOS0uNyw4LjYsOC42LDAsMCwwLTQuODIsNi40Yy0uMDguNDktLjE1LDEtLjIxLDEuNGgtMUEyLjU5LDIuNTksMCww'@;
put 'LDAsMiwxNi41OXY4LjU1YS44Ni44NiwwLDAsMCwuODYuODZINC41OWMwLS4xMywwLS4yNiwwLS4zOWE1Ljc3LDUuNzcsMCwwLDEsNy43MS01LjQ1bC0xLDFhNC41Niw0LjU2LDAsMCwwLTQuMzQsMS41OCwzLDMsMCwwLDAtLjYzLjkzQTQuNSw0LjUsMCwxLDAsMTQuODIsMjZoNS40OGMwLS4x'@;
put 'MywwLS4yNiwwLS4zOUE1Ljc3LDUuNzcsMCwwLDEsMjgsMjAuMTZsLTEsMWE0LjU2LDQuNTYsMCwwLDAtNC4zNCwxLjU4LDMsMywwLDAsMC0uNjMuOTNBNC41LDQuNSwwLDEsMCwzMC41MywyNmgyLjYxYS44Ni44NiwwLDAsMCwuODYtLjg2VjIzLjM2QTkuMzksOS4zOSwwLDAsMCwyNi44Nywx'@;
put 'NC4yOFpNMTIsMTRIOGMwLS4zNS4xLS43MS4xNi0xLjA3YTYuNTIsNi41MiwwLDAsMSwzLjg3LTVoMFpNMTAuMzYsMjguMzZhMi41LDIuNSwwLDEsMSwyLjUtMi41QTIuNSwyLjUsMCwwLDEsMTAuMzYsMjguMzZaTTE5LDE5SDE2VjE3aDNabS02LTVWNy40N2E4LjE2LDguMTYsMCwwLDEsNS40'@;
put 'LDEuMTVBMTkuMTUsMTkuMTUsMCwwLDEsMjQsMTRaTTI2LjA2LDI4LjM2YTIuNSwyLjUsMCwxLDEsMi41LTIuNUEyLjUsMi41LDAsMCwxLDI2LjA2LDI4LjM2WiIvPicpLHkuQ2xyU2hhcGVNYXA9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0'@;
put 'bGluZS1wYXRoLTEiIGQ9Ik0zMy41OSw2LjE5QTEsMSwwLDAsMCwzMi43LDZMMjMuMDksOSwxMy40Niw0LjExYTEsMSwwLDAsMC0uODQsMEwyLjYyLDguMkExLDEsMCwwLDAsMiw5LjEzVjI5LjYxYTEsMSwwLDAsMCwxLjM4LjkyTDEzLDI2LjU4bDkuNTksNC45MmExLDEsMCwwLDAsLjQ2LjEx'@;
put 'LDEsMSwwLDAsMCwuMywwbDEwLTMuMTJhMSwxLDAsMCwwLC43LTFWN0ExLDEsMCwwLDAsMzMuNTksNi4xOVpNMzIsMjYuNzVsLTguMzIsMi42VjI3LjA2aC0xLjZ2MmwtOC40LTQuMzFWMjMuMDZoLTEuNnYxLjcyTDQsMjguMTFWOS43OWw4LjA4LTMuMzNWOC44MWgxLjZWNi40N2w4LjQsNC4z'@;
put 'djIuMWgxLjZWMTFMMzIsOC4zNloiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgeD0iMjIuMDgiIHk9IjE1LjA2IiB3aWR0aD0iMS42IiBoZWlnaHQ9IjMuODEiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFz'@;
put 'cz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgeD0iMjIuMDgiIHk9IjIxLjA2IiB3aWR0aD0iMS42IiBoZWlnaHQ9IjMuODEiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgeD0iMTIuMDgiIHk9'@;
put 'IjExLjA2IiB3aWR0aD0iMS42IiBoZWlnaHQ9IjMuODEiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgeD0iMTIuMDgiIHk9IjE3LjEzIiB3aWR0aD0iMS42IiBoZWlnaHQ9IjMuNzUiLz5cbiAgICAgICAgICAgICAg'@;
put 'ICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzMuMzEsNy4zNSwyNSw5Ljk0VjE0SDIzVjEwLjI5TDE0LDUuNjhWOUgxMlY1LjI3bC05LjY3LDRBLjUzLjUzLDAsMCwwLDIsOS43NVYzMC40NWEuNTMuNTMsMCwwLDAsLjc0LjQ5TDEyLDI3LjEyVjIz'@;
put 'aDJ2NC41M2w5LDQuNjFWMjhoMnYzLjc5bDguNjMtMi43YS41My41MywwLDAsMCwuMzctLjUxVjcuODZBLjUzLjUzLDAsMCwwLDMzLjMxLDcuMzVaTTE0LDIxSDEyVjE3aDJabTAtNkgxMlYxMWgyWk0yNSwyNkgyM1YyMmgyWm0wLTZIMjNWMTZoMloiLz4nKSx5LkNsclNoYXBlQ29tcGFzcz0o'@;
put 'MCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjAuODIsMTUuMzFoMEwxMC40Niw5Yy0uNDYtLjI2LTEuMTEuMzctLjg2Ljg0bDYuMTUsMTAuNTYsMTAuNTYsNi4xNWEuNjYuNjYsMCwwLDAsLjg0LS44NlptLTQsNCwzLTMsNC41NSw3LjQ0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWkt'@;
put 'b3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm0xLDI5Ljk1VjI5LjUzSDE3djIuNDJBMTQsMTQsMCwwLDEsNC4wNSwxOUg2LjQ3VjE3SDQuMDVBMTQsMTQsMCwwLDEsMTcsNC4wNVY2LjQ3aDJW'@;
put 'NC4wNUExNCwxNCwwLDAsMSwzMS45NSwxN0gyOS41M3YyaDIuNDJBMTQsMTQsMCwwLDEsMTksMzEuOTVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCww'@;
put 'LDE4LDJaTTYuNDcsMTlINC4wNWMwLS4zMy0uMDUtLjY2LS4wNS0xczAtLjY3LjA1LTFINi40N1pNMTcsNC4wNWMuMzMsMCwuNjYtLjA1LDEtLjA1cy42NywwLDEsLjA1VjYuNDdIMTdabTIsMjcuOWMtLjMzLDAtLjY2LjA1LTEsLjA1cy0uNjcsMC0xLS4wNVYyOS41M2gyWm04LTUuNThhLjU5'@;
put 'LjU5LDAsMCwxLS42OS4xNkwxNS43NSwyMC4zOCw5LjYsOS44MmMtLjI1LS40Ny4zOS0xLjEuODYtLjg0bDEwLjM3LDYuMzNoMGw2LjMzLDEwLjM3QS41OS41OSwwLDAsMSwyNywyNi4zN1pNMjkuNTMsMTlWMTdoMi40MmMwLC4zMy4wNS42Ni4wNSwxczAsLjY3LS4wNSwxWiIgY2xhc3M9ImNs'@;
put 'ci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIHBvaW50cz0iMTYuNzcgMTkuMzUgMjQuMzUgMjMuNzcgMTkuOCAxNi4zMyAxNi43NyAxOS4zNSIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz4nKSx5LkNsclNoYXBl'@;
put 'TWFwTWFya2VyPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMTgsNi43MmE1LjczLDUuNzMsMCwxLDAsNS43Myw1LjczQTUuNzMsNS43MywwLDAsMCwxOCw2LjcyWm0wLDkuNDZhMy43MywzLjczLDAsMSwxLDMu'@;
put 'NzMtMy43M0EzLjczLDMuNzMsMCwwLDEsMTgsMTYuMTdaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0xOCwyQTExLjc5LDExLjc5LDAsMCwwLDYuMjIsMTMuNzNjMCw0LjY3LDIuNjIsOC41OCw0LjU0LDEx'@;
put 'LjQzbC4zNS41MmE5OS42MSw5OS42MSwwLDAsMCw2LjE0LDhsLjc2Ljg5Ljc2LS44OWE5OS44Miw5OS44MiwwLDAsMCw2LjE0LThsLjM1LS41M2MxLjkxLTIuODUsNC41My02Ljc1LDQuNTMtMTEuNDJBMTEuNzksMTEuNzksMCwwLDAsMTgsMlpNMjMuNTksMjRsLS4zNi41M2MtMS43MiwyLjU4'@;
put 'LTQsNS40Ny01LjIzLDYuOS0xLjE4LTEuNDMtMy41MS00LjMyLTUuMjMtNi45TDEyLjQyLDI0Yy0xLjc3LTIuNjQtNC4yLTYuMjUtNC4yLTEwLjMxYTkuNzgsOS43OCwwLDEsMSwxOS41NiwwQzI3Ljc4LDE3Ljc5LDI1LjM2LDIxLjQsMjMuNTksMjRaIi8+XG4gICAgICAgICAgICAgICAgPHBh'@;
put 'dGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMTgsNi43MmE1LjczLDUuNzMsMCwxLDAsNS43Myw1LjczQTUuNzMsNS43MywwLDAsMCwxOCw2LjcyWm0wLDkuNDZhMy43MywzLjczLDAsMSwxLDMuNzMtMy43M0EzLjczLDMu'@;
put 'NzMsMCwwLDEsMTgsMTYuMTdaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiBkPSJNMjkuNzcsMTMuNDlhNy40OSw3LjQ5LDAsMCwxLTItLjMzYzAsLjE5LDAsLjM4LDAsLjU3LDAsNC4w'@;
put 'Ni0yLjQyLDcuNjctNC4xOSwxMC4zMWwtLjM2LjUzYy0xLjcyLDIuNTgtNCw1LjQ3LTUuMjMsNi45LTEuMTgtMS40My0zLjUxLTQuMzItNS4yMy02LjlMMTIuNDIsMjRjLTEuNzctMi42NC00LjItNi4yNS00LjItMTAuMzFBOS43Nyw5Ljc3LDAsMCwxLDIyLjU2LDUuMDlhNy40NSw3LjQ1LDAs'@;
put 'MCwxLC41Mi0yQTExLjc1LDExLjc1LDAsMCwwLDYuMjIsMTMuNzNjMCw0LjY3LDIuNjIsOC41OCw0LjU0LDExLjQzbC4zNS41MmE5OS42MSw5OS42MSwwLDAsMCw2LjE0LDhsLjc2Ljg5Ljc2LS44OWE5OS44Miw5OS44MiwwLDAsMCw2LjE0LThsLjM1LS41M2MxLjkxLTIuODUsNC41My02Ljc1'@;
put 'LDQuNTMtMTEuNDJDMjkuNzgsMTMuNjUsMjkuNzcsMTMuNTcsMjkuNzcsMTMuNDlaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9'@;
put 'IjUiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMTgsMkExMS43OSwxMS43OSwwLDAsMCw2LjIyLDEzLjczYzAsNC42NywyLjYyLDguNTgsNC41NCwxMS40M2wuMzUuNTJhOTkuNjEsOTkuNjEsMCwwLDAsNi4xNCw4'@;
put 'bC43Ni44OS43Ni0uODlhOTkuODIsOTkuODIsMCwwLDAsNi4xNC04bC4zNS0uNTNjMS45MS0yLjg1LDQuNTMtNi43NSw0LjUzLTExLjQyQTExLjc5LDExLjc5LDAsMCwwLDE4LDJabTAsMTdhNi41Niw2LjU2LDAsMSwxLDYuNTYtNi41NkE2LjU2LDYuNTYsMCwwLDEsMTgsMTlaIi8+XG4gICAg'@;
put 'ICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBjeD0iMTgiIGN5PSIxMi40NCIgcj0iMy43MyIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2Vk'@;
put 'IiBkPSJNMjkuNzcsMTMuNDlBNy40Nyw3LjQ3LDAsMCwxLDI0LjM4LDExYTYuNTgsNi41OCwwLDEsMS0xLjYxLTMsNy40Miw3LjQyLDAsMCwxLC4zMS00Ljg0QTExLjc1LDExLjc1LDAsMCwwLDYuMjIsMTMuNzNjMCw0LjY3LDIuNjIsOC41OCw0LjU0LDExLjQzbC4zNS41MmE5OS42MSw5OS42'@;
put 'MSwwLDAsMCw2LjE0LDhsLjc2Ljg5Ljc2LS44OWE5OS44Miw5OS44MiwwLDAsMCw2LjE0LThsLjM1LS41M2MxLjkxLTIuODUsNC41My02Ljc1LDQuNTMtMTEuNDJDMjkuNzgsMTMuNjUsMjkuNzcsMTMuNTcsMjkuNzcsMTMuNDlaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0i'@;
put 'Y2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCIgY3g9IjE4IiBjeT0iMTIuNDQiIHI9IjMuNzMiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJh'@;
put 'ZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+JykseS5DbHJTaGFwZUJpY3ljbGU9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTguNSwyOS42NUE2LjUxLDYuNTEsMCwwLDEsMiwyMy4xNWE2LjM5LDYuMzksMCwwLDEsNi41LTYuMzZBNi4zOSw2LjM5LDAsMCwxLDE1LDIzLjE1LDYuNTEs'@;
put 'Ni41MSwwLDAsMSw4LjUsMjkuNjVabTAtMTFhNC41LDQuNSwwLDEsMCw0LjUsNC41QTQuNTEsNC41MSwwLDAsMCw4LjUsMTguNjVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNMjcuNSwyOS42NWE2LjUxLDYuNTEsMCwwLDEtNi41LTYu'@;
put 'NSw2LjUsNi41LDAsMCwxLDEzLDBBNi41MSw2LjUxLDAsMCwxLDI3LjUsMjkuNjVabTAtMTFhNC41LDQuNSwwLDEsMCw0LjUsNC41QTQuNTEsNC41MSwwLDAsMCwyNy41LDE4LjY1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTE5LDI0'@;
put 'LjY2SDhhMSwxLDAsMCwxLS44OS0xLjQ1bDUtMTAsMS43OC45TDkuNjIsMjIuNzNIMTlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz48cmVjdCB4PSIxMyIgeT0iMTIuNjgiIHdpZHRoPSIxMSIgaGVpZ2h0PSIxLjkxIiBjbGFzcz0iY2xyLWktb3V0bGlu'@;
put 'ZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz48cGF0aCBkPSJNMjgsMjQuNjZhMSwxLDAsMCwxLS45NC0uNjZMMjIuMjksMTAuNjZIMjBhMSwxLDAsMCwxLTEtMSwxLDEsMCwwLDEsMS0uOTNoM2EuOTQuOTQsMCwwLDEsLjk0LjZsNSwxNGExLDEsMCwwLDEtLjYsMS4yN0ExLDEsMCwwLDEsMjgs'@;
put 'MjQuNjZaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz48cGF0aCBkPSJNMTMsMTQuNjZhMSwxLDAsMCwxLS43MS0uMjlsLTEuNy0xLjcxSDhhMSwxLDAsMCwxLTEtMSwuOTQuOTQsMCwwLDEsMS0xaDNhMS4wOCwxLjA4LDAsMCwxLC43NS4yN2wyLDJhMSwx'@;
put 'LDAsMCwxLDAsMS40MUExLDEsMCwwLDEsMTMsMTQuNjZaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIgLz48cGF0aCBkPSJNMTUsMjEuOWMtMC4yLTItMS4yLTMuOC0yLjktNC45bC0yLjUsNC45SDE1eiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlk'@;
put 'LXBhdGgtMSIgLz48cGF0aCBkPSJNNy4yLDIzLjRjLTAuMi0wLjMtMC4yLTAuNywwLTFsMy4yLTYuM2MtMC42LTAuMi0xLjItMC4yLTEuOC0wLjJDNSwxNS45LDIsMTguOCwyLDIyLjRjMCwzLjYsMi45LDYuNSw2LjUsNi41XG5cdGMzLDAsNS42LTIuMSw2LjMtNUg4QzcuNywyMy45LDcuMywy'@;
put 'My43LDcuMiwyMy40eiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz48cGF0aCBkPSJNMTksMjEuOWgtNGMwLDAuMiwwLDAuMywwLDAuNWMwLDAuNS0wLjEsMS0wLjIsMS41SDE5VjIxLjl6IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiAv'@;
put 'PjxwYXRoIGQ9Ik0yNy41LDE1LjljLTAuMywwLTAuNiwwLTAuOSwwLjFsMi40LDYuNmMwLjIsMC41LTAuMSwxLjEtMC42LDEuM2MtMC4xLDAtMC4yLDAuMS0wLjMsMC4xYy0wLjQsMC0wLjgtMC4zLTAuOS0wLjdsLTIuNC02Ljdcblx0Yy0zLjIsMS42LTQuNSw1LjUtMyw4LjdjMS42LDMuMiw1'@;
put 'LjUsNC41LDguNywzYzMuMi0xLjYsNC41LTUuNSwzLTguN0MzMi4yLDE3LjMsMzAsMTUuOSwyNy41LDE1Ljl6IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC00IiAvPjxwYXRoIGQ9Ik0yNC43LDE2LjdjMC42LTAuMywxLjMtMC41LDEuOS0wLjZsLTIuNy03LjRDMjMuOCw4'@;
put 'LjIsMjMuNCw4LDIzLDcuOWgtM2MtMC42LDAtMSwwLjUtMSwxLjFjMCwwLjUsMC40LDAuOSwxLDAuOVxuXHRjMCwwLDAsMCwwLDBoMi4zbDAuNywyaC05LjZsLTEuNy0xLjdDMTEuNSwxMC4xLDExLjMsMTAsMTEsMTBIOGMtMC42LDAtMSwwLjQtMSwxczAuNCwxLDEsMWgyLjZsMS4yLDEuMmwt'@;
put 'MS41LDNcblx0YzAuNiwwLjIsMS4zLDAuNSwxLjgsMC44bDEuNi0zLjJoMTBMMjQuNywxNi43eiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNSIgLz4nKSx5LkNsclNoYXBlQm9hdD0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjkuMSwyNy4xQzI4LDI3LDI2Ljks'@;
put 'MjcuNCwyNiwyOC4yYy0xLjEsMS4xLTIuOSwxLjEtNC4xLDBjLTEtMC43LTIuMS0xLjEtMy4zLTEuMWMtMS4yLTAuMS0yLjQsMC4zLTMuMywxLjFcblx0XHRDMTQuNywyOC43LDE0LDI5LDEzLjIsMjlzLTEuNS0wLjMtMi4xLTAuOGMtMS0wLjgtMi4yLTEuMi0zLjQtMS4ycy0yLjQsMC40LTMu'@;
put 'NCwxLjJDMy43LDI4LjcsMi44LDI5LDIsMjl2MlxuXHRcdGMxLjMsMC4xLDIuNi0wLjMsMy42LTEuMkM2LjIsMjkuMyw3LjEsMjksNy45LDI5YzAuNywwLDEuNSwwLjMsMi4xLDAuOGMxLjgsMS42LDQuNiwxLjYsNi41LDBjMC42LTAuNSwxLjMtMC44LDIuMS0wLjhcblx0XHRjMC43LDAsMS40'@;
put 'LDAuMywyLDAuOGMxLjksMS42LDQuNiwxLjYsNi41LDBjMC41LTAuNSwxLjMtMC44LDItMC44YzAuNywwLDEuNCwwLjMsMS45LDAuOGMwLjksMC43LDEuOSwxLjEsMywxLjJ2LTJcblx0XHRjLTEsMC0xLjItMC40LTEuNy0wLjhDMzEuNCwyNy41LDMwLjMsMjcuMSwyOS4xLDI3LjF6IiBjbGFz'@;
put 'cz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNNiwyM2MwLTAuNiwwLjUtMSwxLjEtMUgzMmwtMy41LDMuMWgwLjJjMC44LDAsMS42LDAuMiwyLjIsMC41bDIuNS0yLjJsMC4yLTAuMmMwLjctMC44LDAuNi0yLjEtMC4yLTIuOFxuXHRcdEMzMywyMC4y'@;
put 'LDMyLjYsMjAsMzIuMSwyMGgtMjVjLTEuNywwLTMsMS4zLTMsM3YzLjJjMC41LTAuNSwxLjItMC44LDEuOS0xLjFWMjN6IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNOC45LDE5SDE1di03LjhjMC0wLjYtMC4zLTEuMi0wLjgtMS42QzEz'@;
put 'LjMsOC45LDEyLDkuMSwxMS40LDEwbC00LjEsNS45Yy0wLjQsMC42LTAuNCwxLjQtMC4xLDIuMUM3LjUsMTguNiw4LjIsMTksOC45LDE5XG5cdFx0eiBNMTMuMSwxMS4yTDEzLDE3SDguOUwxMy4xLDExLjJ6IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz48'@;
put 'cGF0aCBkPSJNMjYsMThjMC40LTAuNiwwLjQtMS40LDAtMkwxOS43LDUuNmMtMC40LTAuNi0xLTEtMS43LTFjLTEuMSwwLTIsMC45LTIsMlYxOWg4LjNDMjUsMTksMjUuNywxOC42LDI2LDE4eiBNMTcuOSw2LjZcblx0XHRsNi40LDEwLjVoLTYuNFY2LjZ6IiBjbGFzcz0iY2xyLWktb3V0bGlu'@;
put 'ZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz48cGF0aCBkPSJNMzQsMzFjLTEuMS0wLjEtMi4xLTAuNS0zLTEuMmMtMC41LTAuNS0xLjItMC44LTItMC44Yy0wLjcsMC0xLjUsMC4zLTIsMC44Yy0wLjksMC44LTIsMS4xLTMuMSwxLjFjLTEuMiwwLTIuNC0wLjQtMy4zLTEuMVxuXHRjLTEuMi0x'@;
put 'LjEtMy0xLjEtNC4xLDBjLTAuOSwwLjgtMi4xLDEuMi0zLjQsMS4yYy0xLjIsMC0yLjMtMC40LTMuMi0xLjJjLTAuNi0wLjUtMS4zLTAuOC0yLTAuOGMtMC44LDAtMS43LDAuMy0yLjMsMC44XG5cdGMtMSwwLjgtMi4zLDEuMi0zLjUsMS4xVjI5YzAuOCwwLDEuNy0wLjMsMi4zLTAuOWMxLTAu'@;
put 'OCwyLjItMS4yLDMuNC0xLjFjMS4yLDAsMi40LDAuNCwzLjMsMS4yYzEuMiwxLjEsMywxLjEsNC4yLDBcblx0YzEuOS0xLjYsNC43LTEuNiw2LjUsMGMxLjIsMS4xLDMsMS4xLDQuMSwwYzAuOS0wLjgsMi4xLTEuMiwzLjMtMS4yYzEuMSwwLDIuMiwwLjQsMywxLjJDMzIuOCwyOC43LDMzLDI5'@;
put 'LDM0LDI5TDM0LDMxeiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz48cGF0aCBkPSJNNC4xLDI2LjJjMC42LTAuNSwxLjItMC44LDEuOS0xVjIzYzAtMC42LDAuNC0xLjEsMS0xLjFoMjVMMjguNCwyNWgwLjJjMC44LDAsMS42LDAuMiwyLjIsMC41bDIuNS0yLjJs'@;
put 'MC4yLTAuMlxuXHRjMC43LTAuOSwwLjUtMi4xLTAuNC0yLjhDMzIuOSwyMC4xLDMyLjQsMjAsMzIsMjBIN2MtMS43LDAtMywxLjMtMywzTDQuMSwyNi4yTDQuMSwyNi4yeiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz48cGF0aCBkPSJNMTQuOSwxOC45SDguOWMt'@;
put 'MS4xLDAtMi0wLjktMi0yYzAtMC40LDAuMS0wLjgsMC40LTEuMmw0LjEtNS44YzAuNi0wLjksMS45LTEuMSwyLjgtMC41YzAuNSwwLjQsMC44LDEsMC44LDEuNlYxOC45eiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgLz48cGF0aCBkPSJNMjQuMywxOC45SDE2VjYu'@;
put 'NGMwLTEuMSwwLjktMiwyLTJjMC43LDAsMS4zLDAuNCwxLjcsMUwyNiwxNS44YzAuNiwxLDAuMiwyLjItMC43LDIuN0MyNSwxOC43LDI0LjYsMTguOCwyNC4zLDE4Ljlcblx0TDI0LjMsMTguOXoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTQiIC8+JykseS5DbHJTaGFw'@;
put 'ZUNhbXBlcnZhbj0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNOS41LDI0QzkuNSwyNCw5LjUsMjQsOS41LDI0QzcuNiwyNCw2LDI1LjYsNiwyNy41YzAsMCwwLDAsMCwwQzYsMjkuNCw3LjYsMzEsOS41LDMxYzEuOSwwLDMuNS0xLjYsMy41LTMuNVxuXHRcdFMxMS40LDI0LDkuNSwyNHog'@;
put 'TTkuNSwyOUM4LjcsMjksOCwyOC4zLDgsMjcuNVM4LjcsMjYsOS41LDI2czEuNSwwLjcsMS41LDEuNVMxMC4zLDI5LDkuNSwyOXoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0yMy41LDI0QzIzLjUsMjQsMjMuNSwyNCwyMy41LDI0Yy0x'@;
put 'LjksMC0zLjUsMS42LTMuNSwzLjVjMCwwLDAsMCwwLDBjMCwxLjksMS41LDMuNSwzLjUsMy41YzEuOSwwLDMuNS0xLjYsMy41LTMuNVxuXHRcdFMyNS40LDI0LDIzLjUsMjR6IE0yMy41LDI5Yy0wLjgsMC0xLjUtMC43LTEuNS0xLjVzMC43LTEuNSwxLjUtMS41czEuNSwwLjcsMS41LDEuNVMy'@;
put 'NC4zLDI5LDIzLjUsMjl6IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMzMsMjAuMVYyMGgtMC4xbC0zLjUtNS41QzMxLDEzLjYsMzIsMTIsMzIsMTAuM1Y5LjdDMzIsNy4xLDI5LjksNSwyNy4zLDVoLTguNWMtMS45LDAtMy43LDEuMi00'@;
put 'LjQsM0g1Yy0xLjcsMC0zLDEuMy0zLDNcblx0XHR2MTdoMlYxMWMwLTAuNiwwLjQtMSwxLTFoMTAuOUwxNiw5LjJDMTYuMyw3LjksMTcuNCw3LDE4LjcsN2g4LjVDMjguOCw3LDMwLDguMiwzMCw5Ljd2MC41YzAsMS41LTEuMiwyLjctMi43LDIuN0gyNHY5aDcuOFxuXHRcdGwwLjIsMC4zVjI1'@;
put 'YzAsMC42LTAuNCwxLTEsMWgtMnYyaDJjMS43LDAsMy0xLjMsMy0zdi0zLjNMMzMsMjAuMXogTTI2LDIwdi01aDEuNWwzLjEsNUgyNnoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxyZWN0IHg9IjE5IiB5PSI5IiB3aWR0aD0iOCIgaGVpZ2h0PSIyIiBj'@;
put 'bGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz48cG9seWdvbiBwb2ludHM9IjIwLDIyIDIyLDIyIDIyLDEzIDE1LDEzIDE1LDI4IDE3LDI4IDE3LDE1IDIwLDE1IFx0IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz48cGF0aCBk'@;
put 'PSJNNiwyMGg3di03SDZWMjB6IE04LDE1aDN2M0g4VjE1eiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIC8+PHBhdGggZD0iTTkuNSwyNEM3LjYsMjQsNiwyNS42LDYsMjcuNVM3LjYsMzEsOS41LDMxYzAsMCwwLDAsMCwwYzEuOSwwLDMuNS0xLjYsMy41LTMu'@;
put 'NWMwLDAsMC0wLjEsMC0wLjFDMTMsMjUuNSwxMS40LDI0LDkuNSwyNHoiXG5cdFx0IGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+PGNpcmNsZSBjeD0iMjMuNSIgY3k9IjI3LjUiIHI9IjMuNSIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIg'@;
put 'Lz48cGF0aCBkPSJNMjkuNSwxNC41QzMxLDEzLjYsMzIsMTIsMzIsMTAuMlY5LjdjMCwwLDAsMCwwLTAuMUMzMiw3LDI5LjksNSwyNy4zLDVoLTguNWMtMS45LDAtMy43LDEuMi00LjQsM0g1Yy0xLjcsMC0zLDEuMy0zLDN2MTdcblx0XHRoMlYxMWMwLTAuNiwwLjQtMSwxLTFoMTAuOUwxNiw5'@;
put 'LjJDMTYuMyw3LjksMTcuNCw3LDE4LjcsN2g4LjVDMjguOCw3LDMwLDguMiwzMCw5Ljd2MC41YzAsMS41LTEuMiwyLjctMi43LDIuN0gyN2gtM3Y5aDcuOFxuXHRcdGwwLjIsMC4zVjI1YzAsMC42LTAuNCwxLTEsMWgtMnYyaDJjMS43LDAsMy0xLjMsMy0zdi0zLjNMMjkuNSwxNC41eiIgY2xh'@;
put 'c3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgLz48cmVjdCB4PSIxOSIgeT0iOSIgd2lkdGg9IjcuOSIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC00IiAvPjxwb2x5Z29uIHBvaW50cz0iMjAsMjIgMjEuOSwyMiAyMS45LDEzIDE1LDEz'@;
put 'IDE1LDI4IDE2LjksMjggMTYuOSwxNSAyMCwxNSBcdCIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNSIgLz48cmVjdCB4PSI2IiB5PSIxMyIgd2lkdGg9IjYuOSIgaGVpZ2h0PSI3IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC02IiAvPicpLHkuQ2xy'@;
put 'U2hhcGVDYXJhdmFuPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xMy41LDIxQzExLDIxLDksMjMsOSwyNS41czIsNC41LDQuNSw0LjVjMi41LDAsNC41LTIsNC41LTQuNUMxOCwyMywxNiwyMSwxMy41LDIxeiBNMTMuNSwyOGMtMS40LDAtMi41LTEuMS0yLjUtMi41XG5cdFx0czEuMS0y'@;
put 'LjUsMi41LTIuNXMyLjUsMS4xLDIuNSwyLjVTMTQuOSwyOCwxMy41LDI4eiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTMzLDI0aC0ydi03LjVjMC0wLjUtMC4xLTEtMC40LTEuNWwtNC4yLTcuNWMtMC41LTEtMS41LTEuNS0yLjYtMS41'@;
put 'SDVDMy4zLDYsMiw3LjMsMiw5djE0YzAsMS43LDEuMywzLDMsM2gydi0ySDVcblx0XHRjLTAuNiwwLTEtMC40LTEtMVY5YzAtMC42LDAuNC0xLDEtMWgxOC44YzAuNCwwLDAuNywwLjIsMC45LDAuNWw0LjIsNy41YzAuMSwwLjEsMC4xLDAuMywwLjEsMC41VjI0aC00VjEyaC03djhoMnYtNmgz'@;
put 'djEwaC0zdjJoMTNcblx0XHRjMC42LDAsMS0wLjQsMS0xUzMzLjYsMjQsMzMsMjR6IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMTYsMTJIN3Y2aDlWMTJ6IE0xNCwxNkg5di0yaDVWMTZ6IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHIt'@;
put 'aS1vdXRsaW5lLXBhdGgtMyIgLz48cGF0aCBkPSJNMTMuNSwzMEMxMSwzMCw5LDI4LDksMjUuNXMyLTQuNSw0LjUtNC41czQuNSwyLDQuNSw0LjVDMTgsMjgsMTYsMzAsMTMuNSwzMHoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+PHBhdGggZD0iTTMzLDI0aC0y'@;
put 'di03LjVjMC0wLjUtMC4xLTEtMC40LTEuNWwtNC4yLTcuNWMtMC41LTEtMS41LTEuNS0yLjYtMS41SDVDMy4zLDYsMiw3LjMsMiw5djE0YzAsMS43LDEuMywzLDMsM2gydi0ySDVcblx0Yy0wLjYsMC0xLTAuNC0xLTFWOWMwLTAuNiwwLjQtMSwxLTFoMTguOGMwLjQsMCwwLjcsMC4yLDAuOSww'@;
put 'LjVsNC4yLDcuNWMwLjEsMC4xLDAuMSwwLjMsMC4xLDAuNVYyNGgtNFYxMmgtN3Y4aDJ2LTZoM3YxMGgtM3YyaDEzXG5cdGMwLjYsMCwxLTAuNCwxLTFTMzMuNiwyNCwzMywyNHoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+PHBhdGggZD0iTTE2LDE4SDd2LTZo'@;
put 'OVYxOHoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIC8+JykseS5DbHJTaGFwZUZlcnJ5PSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yOSwyNS4xYy0xLjIsMC0yLjMsMC40LTMuMywxLjFjMCwwLDAsMCwwLDBjLTEuMSwxLjEtMywxLjEtNC4xLDBjLTAuOS0w'@;
put 'LjgtMi4xLTEuMi0zLjMtMS4yYy0xLjIsMC0yLjMsMC40LTMuMiwxLjJcblx0XHRjLTEuMiwxLjEtMywxLjEtNC4yLDBDMTAsMjUuNCw4LjgsMjUsNy42LDI1Yy0xLjIsMC0yLjQsMC40LTMuNCwxLjFDMy42LDI2LjcsMi44LDI3LDIsMjd2MmMxLjMsMC4xLDIuNS0wLjQsMy40LTEuMlxuXHRc'@;
put 'dEM2LjEsMjcuMyw2LjksMjcsNy43LDI3YzAuOCwwLDEuNSwwLjMsMi4xLDAuOGMxLjksMS42LDQuNywxLjYsNi41LDBjMC42LTAuNSwxLjMtMC44LDIuMS0wLjhjMC44LDAsMS41LDAuMywyLjEsMC44XG5cdFx0YzEuOSwxLjYsNC42LDEuNiw2LjUsMGMwLjUtMC41LDEuMy0wLjgsMi0wLjhj'@;
put 'MC43LDAsMS41LDAuMywyLDAuOGMwLjksMC43LDIsMS4xLDMuMSwxLjJ2LTEuOWMtMC43LDAtMS40LTAuMy0xLjktMC45XG5cdFx0QzMxLjMsMjUuNCwzMC4xLDI1LDI5LDI1LjF6IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNNS45LDIz'@;
put 'LjJWMjBIMzJsLTMuNSwzaDAuMmMwLjgsMCwxLjYsMC4yLDIuMiwwLjVsMi41LTIuMmwwLjItMC4yYzAuNS0wLjYsMC41LTEuNCwwLjItMi4xYy0wLjQtMC43LTEtMS0xLjgtMWgtNC40XG5cdFx0TDIyLjUsMTFIMTdjLTEuNywwLTMsMS4zLTMsM2gtMlY4LjFINnY2LjFjLTEuMiwwLjQtMiwx'@;
put 'LjUtMiwyLjh2MS4xVjIwdjQuM2wwLjEtMC4xQzQuNiwyMy43LDUuMiwyMy40LDUuOSwyMy4yeiBNOCwxMGgydjRIOFYxMHpcblx0XHQgTTYsMTdjMC0wLjYsMC40LTEsMS0xaDl2LTJjMC0wLjYsMC40LTEsMS0xaDVsMC42LDFIMTh2Mmg1LjhsMS4yLDIuMUg2VjE3eiIgY2xhc3M9ImNsci1p'@;
put 'LW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTI4LjIsMjVjLTEuMiwwLTIuNCwwLjQtMy4zLDEuMmMtMS4yLDEuMS0zLDEuMS00LjEsMGMtMS45LTEuNi00LjYtMS42LTYuNSwwYy0xLjIsMS4xLTIuOSwxLjEtNC4xLDBcblx0XHRjLTAuOS0wLjgtMi0xLjItMy4y'@;
put 'LTEuMmMtMS4yLDAtMi4zLDAuNC0zLjIsMS4yQzMuNCwyNi43LDIuNywyNywyLDI3djJjMS4xLTAuMSwyLjItMC41LDMuMS0xLjJDNS42LDI3LjMsNi4zLDI3LDcsMjdcblx0XHRjMC43LDAsMS41LDAuMywyLDAuOGMxLjksMS42LDQuNywxLjYsNi42LDBjMC42LTAuNSwxLjMtMC44LDIuMS0w'@;
put 'LjhjMC44LDAsMS41LDAuMywyLjEsMC44YzEuOSwxLjYsNC43LDEuNiw2LjUsMFxuXHRcdGMwLjYtMC41LDEuMy0wLjgsMi4xLTAuOGMwLjgsMCwxLjYsMC4zLDIuMSwwLjhjMC45LDAuOCwyLjIsMS4zLDMuNCwxLjJ2LTJjLTAuOCwwLTEuNi0wLjMtMi4yLTAuOEMzMC43LDI1LjQsMjkuNSwy'@;
put 'NSwyOC4yLDI1eiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz48cGF0aCBkPSJNNS44LDIzLjJ2LTMuM2gyNi4xTDI4LjQsMjNoMC4yYzAuOCwwLDEuNiwwLjIsMi4yLDAuNWwyLjUtMi4ybDAuMS0wLjJjMC43LTAuOSwwLjUtMi4xLTAuNC0yLjhjLTAuMy0wLjMt'@;
put 'MC44LTAuNC0xLjItMC40XG5cdFx0aC00LjFsLTUuNC03aC01LjVjLTEuNywwLTMsMS4zLTMsM2gtMlY4SDZ2Ni4yYy0xLjIsMC40LTIuMSwxLjUtMi4xLDIuOGwwLDcuMmwwLjEsMEM0LjUsMjMuNyw1LjEsMjMuNCw1LjgsMjMuMnogTTE3LjksMTRoNC4yXG5cdFx0bDEuNCwyaC01LjdWMTR6'@;
put 'IE03LjksMTBoMnY0aC0yVjEweiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz4nKSx5LkNsclNoYXBlVHJhaWxlcj0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTUsMTkuMmMtMy4yLDAtNS44LDIuNi01LjgsNS44czIuNiw1LjgsNS44LDUuOHM1LjgtMi42'@;
put 'LDUuOC01LjhTMTguMiwxOS4yLDE1LDE5LjJ6IE0xNSwyOS4yYy0yLjMsMC00LjItMS45LTQuMi00LjJcblx0XHRzMS45LTQuMiw0LjItNC4yczQuMiwxLjksNC4yLDQuMlMxNy4zLDI5LjIsMTUsMjkuMnoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxy'@;
put 'ZWN0IHg9IjE0IiB5PSIyNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTMzLDlIMnYxMy4xYzAsMCwwLDAsMCwwQzIsMjQuMywzLjcsMjYsNS45LDI2SDd2LTJINS45Yy0xLDAtMS44LTAuOC0xLjkt'@;
put 'MS45VjE1aDIydjcuMWMwLDEtMC44LDEuOC0xLjksMS45SDIzdjJoMS4xXG5cdFx0YzAsMCwwLDAsMCwwYzIuMSwwLDMuOC0xLjcsMy44LTMuOVYxMWg1YzAuNiwwLDEtMC40LDEtMVMzMy42LDksMzMsOXogTTI2LDEzSDR2LTJoMjJWMTN6IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1v'@;
put 'dXRsaW5lLXBhdGgtMyIgLz48cGF0aCBkPSJNMzMsOUgydjEzLjFjMCwwLDAsMCwwLDBDMiwyNC4zLDMuNywyNiw1LjksMjZIN3YtMkg1LjljLTEsMC0xLjgtMC44LTEuOS0xLjlWMTVoMjJ2Ny4xYzAsMS0wLjgsMS44LTEuOSwxLjlIMjN2MmgxLjFcblx0YzAsMCwwLDAsMCwwYzIuMSwwLDMu'@;
put 'OC0xLjcsMy44LTMuOVYxMWg1YzAuNiwwLDEtMC40LDEtMVMzMy42LDksMzMsOXoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+PHBhdGggZD0iTTE1LDE5LjJjLTMuMiwwLTUuOCwyLjYtNS44LDUuOHMyLjYsNS44LDUuOCw1LjhzNS44LTIuNiw1LjgtNS44bDAs'@;
put 'MEMyMC44LDIxLjgsMTguMiwxOS4yLDE1LDE5LjJ6IE0xNiwyNmgtMnYtMmgyVjI2eiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz4nKSx5LkNsclNoYXBlT25Ib2xpZGF5PSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOC4wOCwyLjM0Yy04LjgyLDAtMTYs'@;
put 'Ni4yOC0xNiwxNHM3LjE4LDE0LDE2LDE0QTE3LjkxLDE3LjkxLDAsMCwwLDIzLDI5LjY2bDUuNTMsMy41MmExLDEsMCwwLDAsMS4zOC0uMywxLDEsMCwwLDAsLjE2LS41NFYyNS42MWExMywxMywwLDAsMCw0LTkuMjdDMzQuMDgsOC42MiwyNi45LDIuMzQsMTguMDgsMi4zNFpNMjguMzcsMjQu'@;
put 'NDVhMSwxLDAsMCwwLS4zMi43M3Y1LjM0bC00LjM4LTIuNzlhMSwxLDAsMCwwLS44My0uMTEsMTYsMTYsMCwwLDEtNC43Ni43MmMtNy43MiwwLTE0LTUuMzgtMTQtMTJzNi4yOC0xMiwxNC0xMiwxNCw1LjM4LDE0LDEyQTExLjEsMTEuMSwwLDAsMSwyOC4zNywyNC40NVoiIGNsYXNzPSJjbHIt'@;
put 'aS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gIDxwYXRoIGQ9Ik0zMS4xLDE1LjgyLDMxLDE1LjY3LDI4LjUsMTMuNDRhMy4yNSwzLjI1LDAsMCwwLTIuMzktLjg0bC01LjM4LjM0LTMuNTktM2EuODEuODEsMCwwLDAtLjUyLS4xOUgxMy41NmEuNzguNzgsMCwwLDAtLjY5LjQu'@;
put 'NzcuNzcsMCwwLDAsMCwuNzlsMS4zNiwyLjQ0LTQuNzEuMjksMS4zMSwxLjUyLDE1LjM5LTFhMS42NSwxLjY1LDAsMCwxLDEuMjIuNDNsMi4zNiwyLjEzYS4xMS4xMSwwLDAsMSwwLC4wN2MwLC4wNi0uMDkuMDUtLjEuMDZIMjEuODJsLS4zNS4zNy01LjE5LDUuNTNIMTQuNjRsMi43My01LjlI'@;
put 'OC41NEw3LjEzLDE0LjE2LDYuNTEsMTNhLjguOCwwLDAsMC0xLS4yQS44MS44MSwwLDAsMCw1LjIsMTMuOWwyLDMuOTRhMS4yMSwxLjIxLDAsMCwwLDEuMDguNjVoNi41N2wtMS45NCw0LjE4QTEuMiwxLjIsMCwwLDAsMTMsMjMuODNhMS4yMiwxLjIyLDAsMCwwLDEsLjU2aDIuNDNhMS4xNywx'@;
put 'LjE3LDAsMCwwLC44OC0uMzlsNS4xOC01LjUxaDcuMTZhMS42NSwxLjY1LDAsMCwwLDEuNTItLjkxQTEuNzQsMS43NCwwLDAsMCwzMS4xLDE1LjgyWk0xNC45MiwxMS4zMWgxLjQxbDIuMDksMS43N0wxNiwxMy4yM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0y'@;
put 'Ii8+XG4gIFxuICA8cGF0aCBkPSJNMTgsMi41Yy04LjgyLDAtMTYsNi4yOC0xNiwxNHM3LjE4LDE0LDE2LDE0YTE3LjkxLDE3LjkxLDAsMCwwLDQuODgtLjY4bDUuNTMsMy41MmExLDEsMCwwLDAsMS4zOC0uM0ExLDEsMCwwLDAsMzAsMzIuNVYyNS43N2ExMywxMywwLDAsMCw0LTkuMjdDMzQs'@;
put 'OC43OCwyNi44MiwyLjUsMTgsMi41Wk0yOS44NCwxOEgyMS41MWEuNDIuNDIsMCwwLDAtLjMuMTNsLTUuMyw1LjY0YS4zOS4zOSwwLDAsMS0uMjkuMTNIMTMuMTlhLjQxLjQxLDAsMCwxLS4zNy0uNThsMi40Ny01LjMySDcuNDZhLjQyLjQyLDAsMCwxLS4zNi0uMjJsLTIuNy01SDYuMjRhLjUz'@;
put 'LjUzLDAsMCwxLC4zOS4xOGwxLjU2LDEuNjlhLjM4LjM4LDAsMCwwLC4zMy4xNGw2LjE4LS4zOC0yLTMuNTVoMi44OWEuNDcuNDcsMCwwLDEsLjMxLjExTDE5LjYzLDE0bDYuNjktLjM1YTIuNDQsMi40NCwwLDAsMSwxLjgxLjYzbDIuNDcsMi4yM0EuOTIuOTIsMCwwLDEsMjkuODQsMThaIiBj'@;
put 'bGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+XG4gICcpLHkuVHJhdmVsU2hhcGVzPXt0cnVjazp5LkNsclNoYXBlVHJ1Y2ssYWlycGxhbmU6eS5DbHJTaGFwZUFpcnBsYW5lLGNhcjp5LkNsclNoYXBlQ2FyLG1hcDp5LkNsclNoYXBlTWFwLGNvbXBhc3M6eS5DbHJTaGFw'@;
put 'ZUNvbXBhc3MsIm1hcC1tYXJrZXIiOnkuQ2xyU2hhcGVNYXBNYXJrZXIsYmljeWNsZTp5LkNsclNoYXBlQmljeWNsZSxib2F0OnkuQ2xyU2hhcGVCb2F0LGNhbXBlcnZhbjp5LkNsclNoYXBlQ2FtcGVydmFuLGNhcmF2YW46eS5DbHJTaGFwZUNhcmF2YW4sZmVycnk6eS5DbHJTaGFwZUZlcnJ5'@;
put 'LHRyYWlsZXI6eS5DbHJTaGFwZVRyYWlsZXIsIm9uLWhvbGlkYXkiOnkuQ2xyU2hhcGVPbkhvbGlkYXl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh5LlRyYXZlbFNoYXBlcywicGxhbmUiLCgwLF8uZGVzY3JpcHRvckNvbmZpZykoeS5UcmF2ZWxTaGFwZXMuYWlycGxhbmUpKSxPYmplY3QuZGVm'@;
put 'aW5lUHJvcGVydHkoeS5UcmF2ZWxTaGFwZXMsImF1dG8iLCgwLF8uZGVzY3JpcHRvckNvbmZpZykoeS5UcmF2ZWxTaGFwZXMuY2FyKSksdHlwZW9mIHdpbmRvdzwidSImJndpbmRvdy5oYXNPd25Qcm9wZXJ0eSgiQ2xhcml0eUljb25zIikmJndpbmRvdy5DbGFyaXR5SWNvbnMuYWRkKHkuVHJh'@;
put 'dmVsU2hhcGVzKX0sIi4vcHJvamVjdHMvaWNvbnMvc3JjL3V0aWxzL2Rlc2NyaXB0b3ItY29uZmlnLnRzIjoKLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAogICAgICAgICAgICAgICAgICAhKioqIC4vcHJvamVjdHMvaWNvbnMv'@;
put 'c3JjL3V0aWxzL2Rlc2NyaXB0b3ItY29uZmlnLnRzICoqKiEKICAgICAgICAgICAgICAgICAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi8qISBubyBzdGF0aWMgZXhwb3J0cyBmb3VuZCAqL2Z1bmN0aW9uKFgseSxJKXsidXNlIHN0'@;
put 'cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHksIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHkuZGVzY3JpcHRvckNvbmZpZz12b2lkIDAseS5kZXNjcmlwdG9yQ29uZmlnPWZ1bmN0aW9uIF8oZyl7cmV0dXJue2VudW1lcmFibGU6ITAsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwLHZh'@;
put 'bHVlOmd9fX0sIi4vcHJvamVjdHMvaWNvbnMvc3JjL3V0aWxzL3N2Zy10YWctZ2VuZXJhdG9yLnRzIjoKLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAogICAgICAgICAgICAgICAgICAhKioqIC4vcHJvamVjdHMvaWNvbnMvc3Jj'@;
put 'L3V0aWxzL3N2Zy10YWctZ2VuZXJhdG9yLnRzICoqKiEKICAgICAgICAgICAgICAgICAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi8qISBubyBzdGF0aWMgZXhwb3J0cyBmb3VuZCAqL2Z1bmN0aW9uKFgseSxJKXsidXNlIHN0cmlj'@;
put 'dCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHksIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHkuY2xySWNvblNWRz12b2lkIDA7eS5jbHJJY29uU1ZHPWZ1bmN0aW9uIHcoUCl7dmFyIEY9IiI7cmV0dXJuIFAuaW5kZXhPZigiLS1iYWRnZWQiKT4tMSYmKEYrPSJjYW4tYmFkZ2UgIiksUC5pbmRl'@;
put 'eE9mKCItLWFsZXJ0ZWQiKT4tMSYmKEYrPSJjYW4tYWxlcnQgIiksUC5pbmRleE9mKCJjbHItaS1zb2xpZCIpPi0xJiYoRis9Imhhcy1zb2xpZCAiKSwoRj8nPHN2ZyB2ZXJzaW9uPSIxLjEiIGNsYXNzPSInK0YrJyIgdmlld0JveD0iMCAwIDM2IDM2IiBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSJ4'@;
put 'TWlkWU1pZCBtZWV0IlxuICAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIGZvY3VzYWJsZT0iZmFsc2UiIHJvbGU9ImltZyI+JzonPHN2ZyB2ZXJzaW9uPSIxLjEiIHZpZXdCb3g9IjAgMCAzNiAz'@;
put 'NiIgcHJlc2VydmVBc3BlY3RSYXRpbz0ieE1pZFlNaWQgbWVldCJcbiAgICB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiBmb2N1c2FibGU9ImZhbHNlIiByb2xlPSJpbWciPicpK1ArIjwvc3ZnPiJ9'@;
put 'fX0pfSwzNjA5NToodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST17fTt5LnIoSSkseS5kKEkse2FycmF5QXZnOigpPT5McWUsYXJyYXlFYWNoOigpPT5ZbixhcnJheUZpbHRlcjooKT0+SW0sYXJyYXlGbGF0dGVuOigpPT5tMmUsYXJyYXlNYXA6KCk9PnlzLGFycmF5TWF4OigpPT5JcWUs'@;
put 'YXJyYXlNaW46KCk9PlJxZSxhcnJheVJlZHVjZTooKT0+cXUsYXJyYXlTdW06KCk9PmcyZSxhcnJheVVuaXF1ZTooKT0+djJlLGV4dGVuZEFycmF5OigpPT5sJCxnZXREaWZmZXJlbmNlT2ZBcnJheXM6KCk9PmMkLGdldEludGVyc2VjdGlvbk9mQXJyYXlzOigpPT5PcWUsZ2V0VW5pb25PZkFy'@;
put 'cmF5czooKT0+UHFlLHBpdm90OigpPT5oRSxzdHJpbmdUb0FycmF5OigpPT51JCx0bzJkQXJyYXk6KCk9PnAyZX0pO3ZhciBfPXt9O3kucihfKSx5LmQoXyx7X2luamVjdFByb2R1Y3RJbmZvOigpPT5TMmUsaXNEZWZpbmVkOigpPT5QYSxpc0VtcHR5OigpPT5VYyxpc1JlZ0V4cDooKT0+YjJl'@;
put 'LGlzVW5kZWZpbmVkOigpPT5fYyxzdHJpbmdpZnk6KCk9PmxjfSk7dmFyIGc9e307eS5yKGcpLHkuZChnLHtlcXVhbHNJZ25vcmVDYXNlOigpPT5WcWUsaXNQZXJjZW50VmFsdWU6KCk9PmYkLHJhbmRvbVN0cmluZzooKT0+aCQsc2FuaXRpemU6KCk9PklPLHN0cmlwVGFnczooKT0+ZyQsc3Vi'@;
put 'c3RpdHV0ZTooKT0+cCQsdG9VcHBlckNhc2VGaXJzdDooKT0+cDF9KTt2YXIgQj17fTt5LnIoQikseS5kKEIse0hUTUxfQ0hBUkFDVEVSUzooKT0+TjJlLGFkZENsYXNzOigpPT5UaSxhZGRFdmVudDooKT0+ZFhlLGNsZWFyVGV4dFNlbGVjdGlvbjooKT0+TSQsY2xvc2VzdDooKT0+Um0sY2xv'@;
put 'c2VzdERvd246KCk9PmJFLGVtcHR5OigpPT54cCxmYXN0SW5uZXJIVE1MOigpPT56NyxmYXN0SW5uZXJUZXh0OigpPT5QbSxmaW5kRmlyc3RQYXJlbnRXaXRoQ2xhc3M6KCk9Pk8yZSxnZXRDYXJldFBvc2l0aW9uOigpPT5TJCxnZXRDc3NUcmFuc2Zvcm06KCk9PmdYZSxnZXRGcmFtZUVsZW1l'@;
put 'bnQ6KCk9PkwyZSxnZXRNYXhpbXVtU2Nyb2xsTGVmdDooKT0+ajJlLGdldE1heGltdW1TY3JvbGxUb3A6KCk9PkIyZSxnZXRQYXJlbnQ6KCk9PlIyZSxnZXRQYXJlbnRXaW5kb3c6KCk9PkI3LGdldFNjcm9sbExlZnQ6KCk9PnckLGdldFNjcm9sbFRvcDooKT0+T08sZ2V0U2Nyb2xsYWJsZUVs'@;
put 'ZW1lbnQ6KCk9PnlFLGdldFNjcm9sbGJhcldpZHRoOigpPT5mMCxnZXRTZWxlY3Rpb25FbmRQb3NpdGlvbjooKT0+ejJlLGdldFNlbGVjdGlvblRleHQ6KCk9PmZYZSxnZXRTdHlsZTooKT0+X0UsZ2V0VHJpbW1pbmdDb250YWluZXI6KCk9PmFfLGdldFdpbmRvd1Njcm9sbExlZnQ6KCk9PkxP'@;
put 'LGdldFdpbmRvd1Njcm9sbFRvcDooKT0+XyQsaGFzQWNjZXNzVG9QYXJlbnRXaW5kb3c6KCk9PmNYZSxoYXNDbGFzczooKT0+cG8saGFzSG9yaXpvbnRhbFNjcm9sbGJhcjooKT0+VCQsaGFzVmVydGljYWxTY3JvbGxiYXI6KCk9PkUkLGhhc1plcm9IZWlnaHQ6KCk9PlYyZSxpbmRleDooKT0+'@;
put 'UDJlLGlubmVySGVpZ2h0OigpPT5vXyxpbm5lcldpZHRoOigpPT5DJCxpc0NoaWxkT2Y6KCk9PkxtLGlzRGV0YWNoZWQ6KCk9PkEkLGlzSFRNTEVsZW1lbnQ6KCk9PkVwLGlzSW5wdXQ6KCk9PlNFLGlzSW50ZXJuYWxFbGVtZW50OigpPT52RSxpc091dHNpZGVJbnB1dDooKT0+Rk8saXNWaXNp'@;
put 'YmxlOigpPT5VNyxtYWtlRWxlbWVudENvbnRlbnRFZGl0YWJsZUFuZFNlbGVjdEl0c0NvbnRlbnQ6KCk9PmskLG1hdGNoZXNDU1NSdWxlczooKT0+dVhlLG9ic2VydmVWaXNpYmlsaXR5Q2hhbmdlT25jZTooKT0+VTJlLG9mZnNldDooKT0+VTAsb3V0ZXJIZWlnaHQ6KCk9Pnh1LG91dGVyV2lk'@;
put 'dGg6KCk9PnN1LG92ZXJsYXlDb250YWluc0VsZW1lbnQ6KCk9Pk9tLHJlbW92ZUF0dHJpYnV0ZTooKT0+ajcscmVtb3ZlQ2xhc3M6KCk9PmxvLHJlbW92ZUNvbnRlbnRFZGl0YWJsZUZyb21FbGVtZW50QW5kRGVzZWxlY3Q6KCk9PkQkLHJlbW92ZUV2ZW50OigpPT5oWGUscmVtb3ZlVGV4dE5v'@;
put 'ZGVzOigpPT55JCxyZXNldENzc1RyYW5zZm9ybTooKT0+Q0UscnVuV2l0aFNlbGVjdGVkQ29udGVuZEVkaXRhYmxlRWxlbWVudDooKT0+WjJlLHNlbGVjdEVsZW1lbnRJZkFsbG93ZWQ6KCk9Pm1YZSxzZXRBdHRyaWJ1dGU6KCk9PnZvLHNldENhcmV0UG9zaXRpb246KCk9PndFLHNldE92ZXJs'@;
put 'YXlQb3NpdGlvbjooKT0+UE99KTt2YXIgdz17fTt5LnIodykseS5kKHcse2N1cnJ5OigpPT5ZMmUsY3VycnlSaWdodDooKT0+eVhlLGRlYm91bmNlOigpPT5NRSxmYXN0Q2FsbDooKT0+SE8saXNGdW5jdGlvbjooKT0+bWwscGFydGlhbDooKT0+SSQscGlwZTooKT0+YlhlLHRocm90dGxlOigp'@;
put 'PT5XMmUsdGhyb3R0bGVBZnRlckhpdHM6KCk9PnZYZX0pO3ZhciBQPXt9O3kucihQKSx5LmQoUCx7Y2xvbmU6KCk9Pm4zLGNyZWF0ZU9iamVjdFByb3BMaXN0ZW5lcjooKT0+RmQsZGVlcENsb25lOigpPT5nMSxkZWVwRXh0ZW5kOigpPT54RSxkZWVwT2JqZWN0U2l6ZTooKT0+Qk8sZGVmaW5l'@;
put 'R2V0dGVyOigpPT5UcCxkdWNrU2NoZW1hOigpPT5zXyxleHRlbmQ6KCk9PkV1LGdldFByb3BlcnR5OigpPT4kMmUsaGFzT3duUHJvcGVydHk6KCk9PlR1LGluaGVyaXQ6KCk9PkcyZSxpc09iamVjdDooKT0+cW8saXNPYmplY3RFcXVhbDooKT0+Tk8sbWl4aW46KCk9PlRsLG9iamVjdEVhY2g6'@;
put 'KCk9PlhvLHNldFByb3BlcnR5OigpPT5WT30pO3ZhciBGPXt9O3kucihGKSx5LmQoRix7Y2FuY2VsQW5pbWF0aW9uRnJhbWU6KCk9PlRFLGdldENvbXBhcmlzb25GdW5jdGlvbjooKT0+cTJlLGlzQ1NSOigpPT5LMmUsaXNUb3VjaFN1cHBvcnRlZDooKT0+UiQscmVxdWVzdEFuaW1hdGlvbkZy'@;
put 'YW1lOigpPT5FRX0pO3ZhciBPPXt9O3kucihPKSx5LmQoTyx7aXNDaHJvbWU6KCk9PkwkLGlzQ2hyb21lV2ViS2l0OigpPT5RMmUsaXNFZGdlOigpPT50ZmUsaXNFZGdlV2ViS2l0OigpPT5fWGUsaXNGaXJlZm94OigpPT5qTyxpc0ZpcmVmb3hXZWJLaXQ6KCk9PmVmZSxpc0lPUzooKT0+TyQs'@;
put 'aXNJcGFkT1M6KCk9PlAkLGlzTGludXhPUzooKT0+d1hlLGlzTWFjT1M6KCk9PnpPLGlzTW9iaWxlQnJvd3NlcjooKT0+QXAsaXNTYWZhcmk6KCk9PkFFLGlzV2luZG93c09TOigpPT5GJCxzZXRCcm93c2VyTWV0YTooKT0+WDJlLHNldFBsYXRmb3JtTWV0YTooKT0+SjJlfSk7dmFyIHo9e307'@;
put 'eS5yKHopLHkuZCh6LHtLRVlfQ09ERVM6KCk9PllhLGlzQ3RybEtleTooKT0+U1hlLGlzQ3RybE1ldGFLZXk6KCk9PnJmZSxpc0Z1bmN0aW9uS2V5OigpPT5IJCxpc0tleTooKT0+dV8saXNQcmludGFibGVDaGFyOigpPT5uZmV9KTt2YXIgTj17fTt5LnIoTikseS5kKE4se2lzSW1tZWRpYXRl'@;
put 'UHJvcGFnYXRpb25TdG9wcGVkOigpPT5GbSxpc0xlZnRDbGljazooKT0+VU8saXNSaWdodENsaWNrOigpPT5IbSxpc1RvdWNoRXZlbnQ6KCk9PmlmZSxvZmZzZXRSZWxhdGl2ZVRvOigpPT5hZmUsc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uOigpPT5CMn0pO3ZhciBMPXt9O3kucihMKSx5LmQo'@;
put 'TCx7X2RhdGFUb0hUTUw6KCk9PnEkLGh0bWxUb0dyaWRTZXR0aW5nczooKT0+YmZlLGluc3RhbmNlVG9IVE1MOigpPT5LJH0pO3ZhciBLPXt9O3kucihLKSx5LmQoSyx7Y2xhbXA6KCk9PmtzLGlzTnVtZXJpYzooKT0+bTEsaXNOdW1lcmljTGlrZTooKT0+eWZlLHJhbmdlRWFjaDooKT0+R2Es'@;
put 'cmFuZ2VFYWNoUmV2ZXJzZTooKT0+WCQsdmFsdWVBY2NvcmRpbmdQZXJjZW50OigpPT5KJH0pO3ZhciBVPXt9O3kucihVKSx5LmQoVSx7Y291bnRGaXJzdFJvd0tleXM6KCk9PkZLLGNyZWF0ZUVtcHR5U3ByZWFkc2hlZXREYXRhOigpPT5rdHQsY3JlYXRlU3ByZWFkc2hlZXREYXRhOigpPT5U'@;
put 'dHQsY3JlYXRlU3ByZWFkc2hlZXRPYmplY3REYXRhOigpPT5BdHQsZGF0YVJvd1RvQ2hhbmdlc0FycmF5OigpPT5QSyxpc0FycmF5T2ZBcnJheXM6KCk9PkUzZSxpc0FycmF5T2ZPYmplY3RzOigpPT5UM2Usc3ByZWFkc2hlZXRDb2x1bW5JbmRleDooKT0+RXR0LHNwcmVhZHNoZWV0Q29sdW1u'@;
put 'TGFiZWw6KCk9PmhQfSk7dmFyIFc9e307eS5yKFcpLHkuZChXLHtDSEVDS0JPWF9DSEVDS0VEOigpPT5oWCxDSEVDS0JPWF9SRU5ERVJFUl9OQU1FU1BBQ0U6KCk9PmRYLENIRUNLQk9YX1VOQ0hFQ0tFRDooKT0+ZlgsQ09OVEVYVE1FTlVfSVRFTVNfQUREX0NPTU1FTlQ6KCk9PmhxLENPTlRF'@;
put 'WFRNRU5VX0lURU1TX0FMSUdOTUVOVDooKT0+bXEsQ09OVEVYVE1FTlVfSVRFTVNfQUxJR05NRU5UX0JPVFRPTTooKT0+U3EsQ09OVEVYVE1FTlVfSVRFTVNfQUxJR05NRU5UX0NFTlRFUjooKT0+YnEsQ09OVEVYVE1FTlVfSVRFTVNfQUxJR05NRU5UX0pVU1RJRlk6KCk9Pl9xLENPTlRFWFRN'@;
put 'RU5VX0lURU1TX0FMSUdOTUVOVF9MRUZUOigpPT52cSxDT05URVhUTUVOVV9JVEVNU19BTElHTk1FTlRfTUlERExFOigpPT5DcSxDT05URVhUTUVOVV9JVEVNU19BTElHTk1FTlRfUklHSFQ6KCk9PnlxLENPTlRFWFRNRU5VX0lURU1TX0FMSUdOTUVOVF9UT1A6KCk9PndxLENPTlRFWFRNRU5V'@;
put 'X0lURU1TX0JPUkRFUlM6KCk9Pk1xLENPTlRFWFRNRU5VX0lURU1TX0JPUkRFUlNfQk9UVE9NOigpPT5UcSxDT05URVhUTUVOVV9JVEVNU19CT1JERVJTX0xFRlQ6KCk9PkFxLENPTlRFWFRNRU5VX0lURU1TX0JPUkRFUlNfUklHSFQ6KCk9PkVxLENPTlRFWFRNRU5VX0lURU1TX0JPUkRFUlNf'@;
put 'VE9QOigpPT54cSxDT05URVhUTUVOVV9JVEVNU19DTEVBUl9DT0xVTU46KCk9Pm5xLENPTlRFWFRNRU5VX0lURU1TX0NPUFk6KCk9PnJxLENPTlRFWFRNRU5VX0lURU1TX0NPUFlfQ09MVU1OX0hFQURFUlNfT05MWTooKT0+b3EsQ09OVEVYVE1FTlVfSVRFTVNfQ09QWV9XSVRIX0NPTFVNTl9H'@;
put 'Uk9VUF9IRUFERVJTOigpPT5hcSxDT05URVhUTUVOVV9JVEVNU19DT1BZX1dJVEhfQ09MVU1OX0hFQURFUlM6KCk9PmlxLENPTlRFWFRNRU5VX0lURU1TX0NVVDooKT0+c3EsQ09OVEVYVE1FTlVfSVRFTVNfRURJVF9DT01NRU5UOigpPT5mcSxDT05URVhUTUVOVV9JVEVNU19GUkVFWkVfQ09M'@;
put 'VU1OOigpPT5scSxDT05URVhUTUVOVV9JVEVNU19ISURFX0NPTFVNTjooKT0+UnEsQ09OVEVYVE1FTlVfSVRFTVNfSElERV9ST1c6KCk9Pk9xLENPTlRFWFRNRU5VX0lURU1TX0lOU0VSVF9MRUZUOigpPT5xSyxDT05URVhUTUVOVV9JVEVNU19JTlNFUlRfUklHSFQ6KCk9PlhLLENPTlRFWFRN'@;
put 'RU5VX0lURU1TX01FUkdFX0NFTExTOigpPT51cSxDT05URVhUTUVOVV9JVEVNU19ORVNURURfUk9XU19ERVRBQ0hfQ0hJTEQ6KCk9PklxLENPTlRFWFRNRU5VX0lURU1TX05FU1RFRF9ST1dTX0lOU0VSVF9DSElMRDooKT0+RHEsQ09OVEVYVE1FTlVfSVRFTVNfTk9fSVRFTVM6KCk9PkdLLENP'@;
put 'TlRFWFRNRU5VX0lURU1TX1JFQURfT05MWTooKT0+X1AsQ09OVEVYVE1FTlVfSVRFTVNfUkVBRF9PTkxZX0NPTU1FTlQ6KCk9PmdxLENPTlRFWFRNRU5VX0lURU1TX1JFRE86KCk9PnRxLENPTlRFWFRNRU5VX0lURU1TX1JFTU9WRV9CT1JERVJTOigpPT5rcSxDT05URVhUTUVOVV9JVEVNU19S'@;
put 'RU1PVkVfQ09MVU1OOigpPT5RSyxDT05URVhUTUVOVV9JVEVNU19SRU1PVkVfQ09NTUVOVDooKT0+cHEsQ09OVEVYVE1FTlVfSVRFTVNfUkVNT1ZFX1JPVzooKT0+SkssQ09OVEVYVE1FTlVfSVRFTVNfUk9XX0FCT1ZFOigpPT4kSyxDT05URVhUTUVOVV9JVEVNU19ST1dfQkVMT1c6KCk9PktL'@;
put 'LENPTlRFWFRNRU5VX0lURU1TX1NIT1dfQ09MVU1OOigpPT5McSxDT05URVhUTUVOVV9JVEVNU19TSE9XX1JPVzooKT0+UHEsQ09OVEVYVE1FTlVfSVRFTVNfVU5ETzooKT0+ZXEsQ09OVEVYVE1FTlVfSVRFTVNfVU5GUkVFWkVfQ09MVU1OOigpPT5jcSxDT05URVhUTUVOVV9JVEVNU19VTk1F'@;
put 'UkdFX0NFTExTOigpPT5kcSxDT05URVhUX01FTlVfSVRFTVNfTkFNRVNQQUNFOigpPT5WM2UsRklMVEVSU19CVVRUT05TX0NBTkNFTDooKT0+c1gsRklMVEVSU19CVVRUT05TX0NMRUFSOigpPT5hWCxGSUxURVJTX0JVVFRPTlNfT0s6KCk9Pm9YLEZJTFRFUlNfQlVUVE9OU19QTEFDRUhPTERF'@;
put 'Ul9TRUFSQ0g6KCk9PmxYLEZJTFRFUlNfQlVUVE9OU19QTEFDRUhPTERFUl9TRUNPTkRfVkFMVUU6KCk9PnVYLEZJTFRFUlNfQlVUVE9OU19QTEFDRUhPTERFUl9WQUxVRTooKT0+Y1gsRklMVEVSU19CVVRUT05TX1NFTEVDVF9BTEw6KCk9PmlYLEZJTFRFUlNfQ09ORElUSU9OU19BRlRFUjoo'@;
put 'KT0+cXEsRklMVEVSU19DT05ESVRJT05TX0JFRk9SRTooKT0+WHEsRklMVEVSU19DT05ESVRJT05TX0JFR0lOU19XSVRIOigpPT5CcSxGSUxURVJTX0NPTkRJVElPTlNfQkVUV0VFTjooKT0+JHEsRklMVEVSU19DT05ESVRJT05TX0JZX1ZBTFVFOigpPT5zbnQsRklMVEVSU19DT05ESVRJT05T'@;
put 'X0NPTlRBSU5TOigpPT56cSxGSUxURVJTX0NPTkRJVElPTlNfRU1QVFk6KCk9PkZxLEZJTFRFUlNfQ09ORElUSU9OU19FTkRTX1dJVEg6KCk9PmpxLEZJTFRFUlNfQ09ORElUSU9OU19FUVVBTDooKT0+TnEsRklMVEVSU19DT05ESVRJT05TX0dSRUFURVJfVEhBTjooKT0+WnEsRklMVEVSU19D'@;
put 'T05ESVRJT05TX0dSRUFURVJfVEhBTl9PUl9FUVVBTDooKT0+V3EsRklMVEVSU19DT05ESVRJT05TX0xFU1NfVEhBTjooKT0+WXEsRklMVEVSU19DT05ESVRJT05TX0xFU1NfVEhBTl9PUl9FUVVBTDooKT0+R3EsRklMVEVSU19DT05ESVRJT05TX05BTUVTUEFDRTooKT0+V2MsRklMVEVSU19D'@;
put 'T05ESVRJT05TX05PTkU6KCk9PndQLEZJTFRFUlNfQ09ORElUSU9OU19OT1RfQkVUV0VFTjooKT0+S3EsRklMVEVSU19DT05ESVRJT05TX05PVF9DT05UQUlOOigpPT5VcSxGSUxURVJTX0NPTkRJVElPTlNfTk9UX0VNUFRZOigpPT5IcSxGSUxURVJTX0NPTkRJVElPTlNfTk9UX0VRVUFMOigp'@;
put 'PT5WcSxGSUxURVJTX0NPTkRJVElPTlNfVE9EQVk6KCk9PkpxLEZJTFRFUlNfQ09ORElUSU9OU19UT01PUlJPVzooKT0+UXEsRklMVEVSU19DT05ESVRJT05TX1lFU1RFUkRBWTooKT0+ZVgsRklMVEVSU19ESVZTX0ZJTFRFUl9CWV9DT05ESVRJT046KCk9PnRYLEZJTFRFUlNfRElWU19GSUxU'@;
put 'RVJfQllfVkFMVUU6KCk9Pm5YLEZJTFRFUlNfTEFCRUxTX0NPTkpVTkNUSU9OOigpPT5yWCxGSUxURVJTX0xBQkVMU19ESVNKVU5DVElPTjooKT0+Q1AsRklMVEVSU19OQU1FU1BBQ0U6KCk9PnExLEZJTFRFUlNfVkFMVUVTX0JMQU5LX0NFTExTOigpPT5TUH0pO3ZhciBZPXt9O2Z1bmN0aW9u'@;
put 'IHEoYyxsLGEsZCxoLGYsdil7dHJ5e3ZhciBNPWNbZl0odiksRD1NLnZhbHVlfWNhdGNoKFope3JldHVybiB2b2lkIGEoWil9TS5kb25lP2woRCk6UHJvbWlzZS5yZXNvbHZlKEQpLnRoZW4oZCxoKX1mdW5jdGlvbiBlZShjKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbD10aGlzLGE9YXJndW1l'@;
put 'bnRzO3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihkLGgpe3ZhciBmPWMuYXBwbHkobCxhKTtmdW5jdGlvbiB2KEQpe3EoZixkLGgsdixNLCJuZXh0IixEKX1mdW5jdGlvbiBNKEQpe3EoZixkLGgsdixNLCJ0aHJvdyIsRCl9dih2b2lkIDApfSl9fXkucihZKSx5LmQoWSx7Z2V0Tm9ybWFs'@;
put 'aXplZERhdGU6KCk9PnY0ZX0pO2xldCBuZT1udWxsLGxlPTE7Y29uc3QgbWU9U3ltYm9sKCJTSUdOQUwiKTtmdW5jdGlvbiBfZShjKXtjb25zdCBsPW5lO3JldHVybiBuZT1jLGx9ZnVuY3Rpb24geChjKXtpZigoIXNlKGMpfHxjLmRpcnR5KSYmKGMuZGlydHl8fGMubGFzdENsZWFuRXBvY2gh'@;
put 'PT1sZSkpe2lmKCFjLnByb2R1Y2VyTXVzdFJlY29tcHV0ZShjKSYmIW0oYykpcmV0dXJuIGMuZGlydHk9ITEsdm9pZChjLmxhc3RDbGVhbkVwb2NoPWxlKTtjLnByb2R1Y2VyUmVjb21wdXRlVmFsdWUoYyksYy5kaXJ0eT0hMSxjLmxhc3RDbGVhbkVwb2NoPWxlfX1mdW5jdGlvbiBtKGMpe3dl'@;
put 'KGMpO2ZvcihsZXQgbD0wO2w8Yy5wcm9kdWNlck5vZGUubGVuZ3RoO2wrKyl7Y29uc3QgYT1jLnByb2R1Y2VyTm9kZVtsXSxkPWMucHJvZHVjZXJMYXN0UmVhZFZlcnNpb25bbF07aWYoZCE9PWEudmVyc2lvbnx8KHgoYSksZCE9PWEudmVyc2lvbikpcmV0dXJuITB9cmV0dXJuITF9ZnVuY3Rp'@;
put 'b24gdGUoYyxsKXtpZihmdW5jdGlvbiBVZShjKXtjLmxpdmVDb25zdW1lck5vZGU/Pz1bXSxjLmxpdmVDb25zdW1lckluZGV4T2ZUaGlzPz89W119KGMpLHdlKGMpLDE9PT1jLmxpdmVDb25zdW1lck5vZGUubGVuZ3RoKWZvcihsZXQgZD0wO2Q8Yy5wcm9kdWNlck5vZGUubGVuZ3RoO2QrKyl0'@;
put 'ZShjLnByb2R1Y2VyTm9kZVtkXSxjLnByb2R1Y2VySW5kZXhPZlRoaXNbZF0pO2NvbnN0IGE9Yy5saXZlQ29uc3VtZXJOb2RlLmxlbmd0aC0xO2lmKGMubGl2ZUNvbnN1bWVyTm9kZVtsXT1jLmxpdmVDb25zdW1lck5vZGVbYV0sYy5saXZlQ29uc3VtZXJJbmRleE9mVGhpc1tsXT1jLmxpdmVD'@;
put 'b25zdW1lckluZGV4T2ZUaGlzW2FdLGMubGl2ZUNvbnN1bWVyTm9kZS5sZW5ndGgtLSxjLmxpdmVDb25zdW1lckluZGV4T2ZUaGlzLmxlbmd0aC0tLGw8Yy5saXZlQ29uc3VtZXJOb2RlLmxlbmd0aCl7Y29uc3QgZD1jLmxpdmVDb25zdW1lckluZGV4T2ZUaGlzW2xdLGg9Yy5saXZlQ29uc3Vt'@;
put 'ZXJOb2RlW2xdO3dlKGgpLGgucHJvZHVjZXJJbmRleE9mVGhpc1tkXT1sfX1mdW5jdGlvbiBzZShjKXtyZXR1cm4gYy5jb25zdW1lcklzQWx3YXlzTGl2ZXx8KGM/LmxpdmVDb25zdW1lck5vZGU/Lmxlbmd0aD8/MCk+MH1mdW5jdGlvbiB3ZShjKXtjLnByb2R1Y2VyTm9kZT8/PVtdLGMucHJv'@;
put 'ZHVjZXJJbmRleE9mVGhpcz8/PVtdLGMucHJvZHVjZXJMYXN0UmVhZFZlcnNpb24/Pz1bXX1sZXQgRGU9bnVsbDtmdW5jdGlvbiAkZShjKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgY31mdW5jdGlvbiB0dChjKXtjb25zdCBhPWMoZD0+e0Vycm9yLmNhbGwoZCksZC5zdGFjaz0obmV3IEVy'@;
put 'cm9yKS5zdGFja30pO3JldHVybiBhLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKEVycm9yLnByb3RvdHlwZSksYS5wcm90b3R5cGUuY29uc3RydWN0b3I9YSxhfWNvbnN0IEhlPXR0KGM9PmZ1bmN0aW9uKGEpe2ModGhpcyksdGhpcy5tZXNzYWdlPWE/YCR7YS5sZW5ndGh9IGVycm9ycyBvY2N1'@;
put 'cnJlZCBkdXJpbmcgdW5zdWJzY3JpcHRpb246XG4ke2EubWFwKChkLGgpPT5gJHtoKzF9KSAke2QudG9TdHJpbmcoKX1gKS5qb2luKCJcbiAgIil9YDoiIix0aGlzLm5hbWU9IlVuc3Vic2NyaXB0aW9uRXJyb3IiLHRoaXMuZXJyb3JzPWF9KTtmdW5jdGlvbiB1dChjLGwpe2lmKGMpe2NvbnN0'@;
put 'IGE9Yy5pbmRleE9mKGwpOzA8PWEmJmMuc3BsaWNlKGEsMSl9fWNsYXNzIHF0e2NvbnN0cnVjdG9yKGwpe3RoaXMuaW5pdGlhbFRlYXJkb3duPWwsdGhpcy5jbG9zZWQ9ITEsdGhpcy5fcGFyZW50YWdlPW51bGwsdGhpcy5fZmluYWxpemVycz1udWxsfXVuc3Vic2NyaWJlKCl7bGV0IGw7aWYo'@;
put 'IXRoaXMuY2xvc2VkKXt0aGlzLmNsb3NlZD0hMDtjb25zdHtfcGFyZW50YWdlOmF9PXRoaXM7aWYoYSlpZih0aGlzLl9wYXJlbnRhZ2U9bnVsbCxBcnJheS5pc0FycmF5KGEpKWZvcihjb25zdCBmIG9mIGEpZi5yZW1vdmUodGhpcyk7ZWxzZSBhLnJlbW92ZSh0aGlzKTtjb25zdHtpbml0aWFs'@;
put 'VGVhcmRvd246ZH09dGhpcztpZigkZShkKSl0cnl7ZCgpfWNhdGNoKGYpe2w9ZiBpbnN0YW5jZW9mIEhlP2YuZXJyb3JzOltmXX1jb25zdHtfZmluYWxpemVyczpofT10aGlzO2lmKGgpe3RoaXMuX2ZpbmFsaXplcnM9bnVsbDtmb3IoY29uc3QgZiBvZiBoKXRyeXtjaShmKX1jYXRjaCh2KXts'@;
put 'PWw/P1tdLHYgaW5zdGFuY2VvZiBIZT9sPVsuLi5sLC4uLnYuZXJyb3JzXTpsLnB1c2godil9fWlmKGwpdGhyb3cgbmV3IEhlKGwpfX1hZGQobCl7dmFyIGE7aWYobCYmbCE9PXRoaXMpaWYodGhpcy5jbG9zZWQpY2kobCk7ZWxzZXtpZihsIGluc3RhbmNlb2YgcXQpe2lmKGwuY2xvc2VkfHxs'@;
put 'Ll9oYXNQYXJlbnQodGhpcykpcmV0dXJuO2wuX2FkZFBhcmVudCh0aGlzKX0odGhpcy5fZmluYWxpemVycz1udWxsIT09KGE9dGhpcy5fZmluYWxpemVycykmJnZvaWQgMCE9PWE/YTpbXSkucHVzaChsKX19X2hhc1BhcmVudChsKXtjb25zdHtfcGFyZW50YWdlOmF9PXRoaXM7cmV0dXJuIGE9'@;
put 'PT1sfHxBcnJheS5pc0FycmF5KGEpJiZhLmluY2x1ZGVzKGwpfV9hZGRQYXJlbnQobCl7Y29uc3R7X3BhcmVudGFnZTphfT10aGlzO3RoaXMuX3BhcmVudGFnZT1BcnJheS5pc0FycmF5KGEpPyhhLnB1c2gobCksYSk6YT9bYSxsXTpsfV9yZW1vdmVQYXJlbnQobCl7Y29uc3R7X3BhcmVudGFn'@;
put 'ZTphfT10aGlzO2E9PT1sP3RoaXMuX3BhcmVudGFnZT1udWxsOkFycmF5LmlzQXJyYXkoYSkmJnV0KGEsbCl9cmVtb3ZlKGwpe2NvbnN0e19maW5hbGl6ZXJzOmF9PXRoaXM7YSYmdXQoYSxsKSxsIGluc3RhbmNlb2YgcXQmJmwuX3JlbW92ZVBhcmVudCh0aGlzKX19cXQuRU1QVFk9KCgpPT57'@;
put 'Y29uc3QgYz1uZXcgcXQ7cmV0dXJuIGMuY2xvc2VkPSEwLGN9KSgpO2NvbnN0IFJ0PXF0LkVNUFRZO2Z1bmN0aW9uIFB0KGMpe3JldHVybiBjIGluc3RhbmNlb2YgcXR8fGMmJiJjbG9zZWQiaW4gYyYmJGUoYy5yZW1vdmUpJiYkZShjLmFkZCkmJiRlKGMudW5zdWJzY3JpYmUpfWZ1bmN0aW9u'@;
put 'IGNpKGMpeyRlKGMpP2MoKTpjLnVuc3Vic2NyaWJlKCl9Y29uc3QgUXQ9e29uVW5oYW5kbGVkRXJyb3I6bnVsbCxvblN0b3BwZWROb3RpZmljYXRpb246bnVsbCxQcm9taXNlOnZvaWQgMCx1c2VEZXByZWNhdGVkU3luY2hyb25vdXNFcnJvckhhbmRsaW5nOiExLHVzZURlcHJlY2F0ZWROZXh0'@;
put 'Q29udGV4dDohMX0sc249e3NldFRpbWVvdXQoYyxsLC4uLmEpe2NvbnN0e2RlbGVnYXRlOmR9PXNuO3JldHVybiBkPy5zZXRUaW1lb3V0P2Quc2V0VGltZW91dChjLGwsLi4uYSk6c2V0VGltZW91dChjLGwsLi4uYSl9LGNsZWFyVGltZW91dChjKXtjb25zdHtkZWxlZ2F0ZTpsfT1zbjtyZXR1'@;
put 'cm4obD8uY2xlYXJUaW1lb3V0fHxjbGVhclRpbWVvdXQpKGMpfSxkZWxlZ2F0ZTp2b2lkIDB9O2Z1bmN0aW9uIFJpKGMpe3NuLnNldFRpbWVvdXQoKCk9Pntjb25zdHtvblVuaGFuZGxlZEVycm9yOmx9PVF0O2lmKCFsKXRocm93IGM7bChjKX0pfWZ1bmN0aW9uIGhuKCl7fWNvbnN0IGZ0PUF0'@;
put 'KCJDIix2b2lkIDAsdm9pZCAwKTtmdW5jdGlvbiBBdChjLGwsYSl7cmV0dXJue2tpbmQ6Yyx2YWx1ZTpsLGVycm9yOmF9fWxldCBSbj1udWxsO2Z1bmN0aW9uIHN0KGMpe2lmKFF0LnVzZURlcHJlY2F0ZWRTeW5jaHJvbm91c0Vycm9ySGFuZGxpbmcpe2NvbnN0IGw9IVJuO2lmKGwmJihSbj17'@;
put 'ZXJyb3JUaHJvd246ITEsZXJyb3I6bnVsbH0pLGMoKSxsKXtjb25zdHtlcnJvclRocm93bjphLGVycm9yOmR9PVJuO2lmKFJuPW51bGwsYSl0aHJvdyBkfX1lbHNlIGMoKX1jbGFzcyByaSBleHRlbmRzIHF0e2NvbnN0cnVjdG9yKGwpe3N1cGVyKCksdGhpcy5pc1N0b3BwZWQ9ITEsbD8odGhp'@;
put 'cy5kZXN0aW5hdGlvbj1sLFB0KGwpJiZsLmFkZCh0aGlzKSk6dGhpcy5kZXN0aW5hdGlvbj16dH1zdGF0aWMgY3JlYXRlKGwsYSxkKXtyZXR1cm4gbmV3IGh0KGwsYSxkKX1uZXh0KGwpe3RoaXMuaXNTdG9wcGVkP3JuKGZ1bmN0aW9uIFd0KGMpe3JldHVybiBBdCgiTiIsYyx2b2lkIDApfShs'@;
put 'KSx0aGlzKTp0aGlzLl9uZXh0KGwpfWVycm9yKGwpe3RoaXMuaXNTdG9wcGVkP3JuKGZ1bmN0aW9uIE9yKGMpe3JldHVybiBBdCgiRSIsdm9pZCAwLGMpfShsKSx0aGlzKToodGhpcy5pc1N0b3BwZWQ9ITAsdGhpcy5fZXJyb3IobCkpfWNvbXBsZXRlKCl7dGhpcy5pc1N0b3BwZWQ/cm4oZnQs'@;
put 'dGhpcyk6KHRoaXMuaXNTdG9wcGVkPSEwLHRoaXMuX2NvbXBsZXRlKCkpfXVuc3Vic2NyaWJlKCl7dGhpcy5jbG9zZWR8fCh0aGlzLmlzU3RvcHBlZD0hMCxzdXBlci51bnN1YnNjcmliZSgpLHRoaXMuZGVzdGluYXRpb249bnVsbCl9X25leHQobCl7dGhpcy5kZXN0aW5hdGlvbi5uZXh0KGwp'@;
put 'fV9lcnJvcihsKXt0cnl7dGhpcy5kZXN0aW5hdGlvbi5lcnJvcihsKX1maW5hbGx5e3RoaXMudW5zdWJzY3JpYmUoKX19X2NvbXBsZXRlKCl7dHJ5e3RoaXMuZGVzdGluYXRpb24uY29tcGxldGUoKX1maW5hbGx5e3RoaXMudW5zdWJzY3JpYmUoKX19fWNvbnN0IFdlPUZ1bmN0aW9uLnByb3Rv'@;
put 'dHlwZS5iaW5kO2Z1bmN0aW9uIFR0KGMsbCl7cmV0dXJuIFdlLmNhbGwoYyxsKX1jbGFzcyBucntjb25zdHJ1Y3RvcihsKXt0aGlzLnBhcnRpYWxPYnNlcnZlcj1sfW5leHQobCl7Y29uc3R7cGFydGlhbE9ic2VydmVyOmF9PXRoaXM7aWYoYS5uZXh0KXRyeXthLm5leHQobCl9Y2F0Y2goZCl7'@;
put 'eHQoZCl9fWVycm9yKGwpe2NvbnN0e3BhcnRpYWxPYnNlcnZlcjphfT10aGlzO2lmKGEuZXJyb3IpdHJ5e2EuZXJyb3IobCl9Y2F0Y2goZCl7eHQoZCl9ZWxzZSB4dChsKX1jb21wbGV0ZSgpe2NvbnN0e3BhcnRpYWxPYnNlcnZlcjpsfT10aGlzO2lmKGwuY29tcGxldGUpdHJ5e2wuY29tcGxl'@;
put 'dGUoKX1jYXRjaChhKXt4dChhKX19fWNsYXNzIGh0IGV4dGVuZHMgcml7Y29uc3RydWN0b3IobCxhLGQpe2xldCBoO2lmKHN1cGVyKCksJGUobCl8fCFsKWg9e25leHQ6bD8/dm9pZCAwLGVycm9yOmE/P3ZvaWQgMCxjb21wbGV0ZTpkPz92b2lkIDB9O2Vsc2V7bGV0IGY7dGhpcyYmUXQudXNl'@;
put 'RGVwcmVjYXRlZE5leHRDb250ZXh0PyhmPU9iamVjdC5jcmVhdGUobCksZi51bnN1YnNjcmliZT0oKT0+dGhpcy51bnN1YnNjcmliZSgpLGg9e25leHQ6bC5uZXh0JiZUdChsLm5leHQsZiksZXJyb3I6bC5lcnJvciYmVHQobC5lcnJvcixmKSxjb21wbGV0ZTpsLmNvbXBsZXRlJiZUdChsLmNv'@;
put 'bXBsZXRlLGYpfSk6aD1sfXRoaXMuZGVzdGluYXRpb249bmV3IG5yKGgpfX1mdW5jdGlvbiB4dChjKXtRdC51c2VEZXByZWNhdGVkU3luY2hyb25vdXNFcnJvckhhbmRsaW5nP2Z1bmN0aW9uIFV0KGMpe1F0LnVzZURlcHJlY2F0ZWRTeW5jaHJvbm91c0Vycm9ySGFuZGxpbmcmJlJuJiYoUm4u'@;
put 'ZXJyb3JUaHJvd249ITAsUm4uZXJyb3I9Yyl9KGMpOlJpKGMpfWZ1bmN0aW9uIHJuKGMsbCl7Y29uc3R7b25TdG9wcGVkTm90aWZpY2F0aW9uOmF9PVF0O2EmJnNuLnNldFRpbWVvdXQoKCk9PmEoYyxsKSl9Y29uc3QgenQ9e2Nsb3NlZDohMCxuZXh0OmhuLGVycm9yOmZ1bmN0aW9uIGpuKGMp'@;
put 'e3Rocm93IGN9LGNvbXBsZXRlOmhufSxoaT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZTeW1ib2wub2JzZXJ2YWJsZXx8IkBAb2JzZXJ2YWJsZSI7ZnVuY3Rpb24gY24oYyl7cmV0dXJuIGN9ZnVuY3Rpb24gSWkoYyl7cmV0dXJuIDA9PT1jLmxlbmd0aD9jbjoxPT09Yy5sZW5ndGg/Y1sw'@;
put 'XTpmdW5jdGlvbihhKXtyZXR1cm4gYy5yZWR1Y2UoKGQsaCk9PmgoZCksYSl9fWxldCBYdD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe2EmJih0aGlzLl9zdWJzY3JpYmU9YSl9bGlmdChhKXtjb25zdCBkPW5ldyBjO3JldHVybiBkLnNvdXJjZT10aGlzLGQub3BlcmF0b3I9YSxkfXN1'@;
put 'YnNjcmliZShhLGQsaCl7Y29uc3QgZj1mdW5jdGlvbiBFaShjKXtyZXR1cm4gYyYmYyBpbnN0YW5jZW9mIHJpfHxmdW5jdGlvbiB1YShjKXtyZXR1cm4gYyYmJGUoYy5uZXh0KSYmJGUoYy5lcnJvcikmJiRlKGMuY29tcGxldGUpfShjKSYmUHQoYyl9KGEpP2E6bmV3IGh0KGEsZCxoKTtyZXR1'@;
put 'cm4gc3QoKCk9Pntjb25zdHtvcGVyYXRvcjp2LHNvdXJjZTpNfT10aGlzO2YuYWRkKHY/di5jYWxsKGYsTSk6TT90aGlzLl9zdWJzY3JpYmUoZik6dGhpcy5fdHJ5U3Vic2NyaWJlKGYpKX0pLGZ9X3RyeVN1YnNjcmliZShhKXt0cnl7cmV0dXJuIHRoaXMuX3N1YnNjcmliZShhKX1jYXRjaChk'@;
put 'KXthLmVycm9yKGQpfX1mb3JFYWNoKGEsZCl7cmV0dXJuIG5ldyhkPWVuKGQpKSgoaCxmKT0+e2NvbnN0IHY9bmV3IGh0KHtuZXh0Ok09Pnt0cnl7YShNKX1jYXRjaChEKXtmKEQpLHYudW5zdWJzY3JpYmUoKX19LGVycm9yOmYsY29tcGxldGU6aH0pO3RoaXMuc3Vic2NyaWJlKHYpfSl9X3N1'@;
put 'YnNjcmliZShhKXt2YXIgZDtyZXR1cm4gbnVsbD09PShkPXRoaXMuc291cmNlKXx8dm9pZCAwPT09ZD92b2lkIDA6ZC5zdWJzY3JpYmUoYSl9W2hpXSgpe3JldHVybiB0aGlzfXBpcGUoLi4uYSl7cmV0dXJuIElpKGEpKHRoaXMpfXRvUHJvbWlzZShhKXtyZXR1cm4gbmV3KGE9ZW4oYSkpKChk'@;
put 'LGgpPT57bGV0IGY7dGhpcy5zdWJzY3JpYmUodj0+Zj12LHY9PmgodiksKCk9PmQoZikpfSl9fXJldHVybiBjLmNyZWF0ZT1sPT5uZXcgYyhsKSxjfSkoKTtmdW5jdGlvbiBlbihjKXt2YXIgbDtyZXR1cm4gbnVsbCE9PShsPWM/P1F0LlByb21pc2UpJiZ2b2lkIDAhPT1sP2w6UHJvbWlzZX1j'@;
put 'b25zdCB2cj10dChjPT5mdW5jdGlvbigpe2ModGhpcyksdGhpcy5uYW1lPSJPYmplY3RVbnN1YnNjcmliZWRFcnJvciIsdGhpcy5tZXNzYWdlPSJvYmplY3QgdW5zdWJzY3JpYmVkIn0pO2xldCBXbj0oKCk9PntjbGFzcyBjIGV4dGVuZHMgWHR7Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMu'@;
put 'Y2xvc2VkPSExLHRoaXMuY3VycmVudE9ic2VydmVycz1udWxsLHRoaXMub2JzZXJ2ZXJzPVtdLHRoaXMuaXNTdG9wcGVkPSExLHRoaXMuaGFzRXJyb3I9ITEsdGhpcy50aHJvd25FcnJvcj1udWxsfWxpZnQoYSl7Y29uc3QgZD1uZXcgJGkodGhpcyx0aGlzKTtyZXR1cm4gZC5vcGVyYXRvcj1h'@;
put 'LGR9X3Rocm93SWZDbG9zZWQoKXtpZih0aGlzLmNsb3NlZCl0aHJvdyBuZXcgdnJ9bmV4dChhKXtzdCgoKT0+e2lmKHRoaXMuX3Rocm93SWZDbG9zZWQoKSwhdGhpcy5pc1N0b3BwZWQpe3RoaXMuY3VycmVudE9ic2VydmVyc3x8KHRoaXMuY3VycmVudE9ic2VydmVycz1BcnJheS5mcm9tKHRo'@;
put 'aXMub2JzZXJ2ZXJzKSk7Zm9yKGNvbnN0IGQgb2YgdGhpcy5jdXJyZW50T2JzZXJ2ZXJzKWQubmV4dChhKX19KX1lcnJvcihhKXtzdCgoKT0+e2lmKHRoaXMuX3Rocm93SWZDbG9zZWQoKSwhdGhpcy5pc1N0b3BwZWQpe3RoaXMuaGFzRXJyb3I9dGhpcy5pc1N0b3BwZWQ9ITAsdGhpcy50aHJv'@;
put 'd25FcnJvcj1hO2NvbnN0e29ic2VydmVyczpkfT10aGlzO2Zvcig7ZC5sZW5ndGg7KWQuc2hpZnQoKS5lcnJvcihhKX19KX1jb21wbGV0ZSgpe3N0KCgpPT57aWYodGhpcy5fdGhyb3dJZkNsb3NlZCgpLCF0aGlzLmlzU3RvcHBlZCl7dGhpcy5pc1N0b3BwZWQ9ITA7Y29uc3R7b2JzZXJ2ZXJz'@;
put 'OmF9PXRoaXM7Zm9yKDthLmxlbmd0aDspYS5zaGlmdCgpLmNvbXBsZXRlKCl9fSl9dW5zdWJzY3JpYmUoKXt0aGlzLmlzU3RvcHBlZD10aGlzLmNsb3NlZD0hMCx0aGlzLm9ic2VydmVycz10aGlzLmN1cnJlbnRPYnNlcnZlcnM9bnVsbH1nZXQgb2JzZXJ2ZWQoKXt2YXIgYTtyZXR1cm4obnVs'@;
put 'bD09PShhPXRoaXMub2JzZXJ2ZXJzKXx8dm9pZCAwPT09YT92b2lkIDA6YS5sZW5ndGgpPjB9X3RyeVN1YnNjcmliZShhKXtyZXR1cm4gdGhpcy5fdGhyb3dJZkNsb3NlZCgpLHN1cGVyLl90cnlTdWJzY3JpYmUoYSl9X3N1YnNjcmliZShhKXtyZXR1cm4gdGhpcy5fdGhyb3dJZkNsb3NlZCgp'@;
put 'LHRoaXMuX2NoZWNrRmluYWxpemVkU3RhdHVzZXMoYSksdGhpcy5faW5uZXJTdWJzY3JpYmUoYSl9X2lubmVyU3Vic2NyaWJlKGEpe2NvbnN0e2hhc0Vycm9yOmQsaXNTdG9wcGVkOmgsb2JzZXJ2ZXJzOmZ9PXRoaXM7cmV0dXJuIGR8fGg/UnQ6KHRoaXMuY3VycmVudE9ic2VydmVycz1udWxs'@;
put 'LGYucHVzaChhKSxuZXcgcXQoKCk9Pnt0aGlzLmN1cnJlbnRPYnNlcnZlcnM9bnVsbCx1dChmLGEpfSkpfV9jaGVja0ZpbmFsaXplZFN0YXR1c2VzKGEpe2NvbnN0e2hhc0Vycm9yOmQsdGhyb3duRXJyb3I6aCxpc1N0b3BwZWQ6Zn09dGhpcztkP2EuZXJyb3IoaCk6ZiYmYS5jb21wbGV0ZSgp'@;
put 'fWFzT2JzZXJ2YWJsZSgpe2NvbnN0IGE9bmV3IFh0O3JldHVybiBhLnNvdXJjZT10aGlzLGF9fXJldHVybiBjLmNyZWF0ZT0obCxhKT0+bmV3ICRpKGwsYSksY30pKCk7Y2xhc3MgJGkgZXh0ZW5kcyBXbntjb25zdHJ1Y3RvcihsLGEpe3N1cGVyKCksdGhpcy5kZXN0aW5hdGlvbj1sLHRoaXMu'@;
put 'c291cmNlPWF9bmV4dChsKXt2YXIgYSxkO251bGw9PT0oZD1udWxsPT09KGE9dGhpcy5kZXN0aW5hdGlvbil8fHZvaWQgMD09PWE/dm9pZCAwOmEubmV4dCl8fHZvaWQgMD09PWR8fGQuY2FsbChhLGwpfWVycm9yKGwpe3ZhciBhLGQ7bnVsbD09PShkPW51bGw9PT0oYT10aGlzLmRlc3RpbmF0'@;
put 'aW9uKXx8dm9pZCAwPT09YT92b2lkIDA6YS5lcnJvcil8fHZvaWQgMD09PWR8fGQuY2FsbChhLGwpfWNvbXBsZXRlKCl7dmFyIGwsYTtudWxsPT09KGE9bnVsbD09PShsPXRoaXMuZGVzdGluYXRpb24pfHx2b2lkIDA9PT1sP3ZvaWQgMDpsLmNvbXBsZXRlKXx8dm9pZCAwPT09YXx8YS5jYWxs'@;
put 'KGwpfV9zdWJzY3JpYmUobCl7dmFyIGEsZDtyZXR1cm4gbnVsbCE9PShkPW51bGw9PT0oYT10aGlzLnNvdXJjZSl8fHZvaWQgMD09PWE/dm9pZCAwOmEuc3Vic2NyaWJlKGwpKSYmdm9pZCAwIT09ZD9kOlJ0fX1jbGFzcyBlaSBleHRlbmRzIFdue2NvbnN0cnVjdG9yKGwpe3N1cGVyKCksdGhp'@;
put 'cy5fdmFsdWU9bH1nZXQgdmFsdWUoKXtyZXR1cm4gdGhpcy5nZXRWYWx1ZSgpfV9zdWJzY3JpYmUobCl7Y29uc3QgYT1zdXBlci5fc3Vic2NyaWJlKGwpO3JldHVybiFhLmNsb3NlZCYmbC5uZXh0KHRoaXMuX3ZhbHVlKSxhfWdldFZhbHVlKCl7Y29uc3R7aGFzRXJyb3I6bCx0aHJvd25FcnJv'@;
put 'cjphLF92YWx1ZTpkfT10aGlzO2lmKGwpdGhyb3cgYTtyZXR1cm4gdGhpcy5fdGhyb3dJZkNsb3NlZCgpLGR9bmV4dChsKXtzdXBlci5uZXh0KHRoaXMuX3ZhbHVlPWwpfX1mdW5jdGlvbiBRcihjKXtyZXR1cm4gJGUoYz8ubGlmdCl9ZnVuY3Rpb24gVmkoYyl7cmV0dXJuIGw9PntpZihRcihs'@;
put 'KSlyZXR1cm4gbC5saWZ0KGZ1bmN0aW9uKGEpe3RyeXtyZXR1cm4gYyhhLHRoaXMpfWNhdGNoKGQpe3RoaXMuZXJyb3IoZCl9fSk7dGhyb3cgbmV3IFR5cGVFcnJvcigiVW5hYmxlIHRvIGxpZnQgdW5rbm93biBPYnNlcnZhYmxlIHR5cGUiKX19ZnVuY3Rpb24gTmkoYyxsLGEsZCxoKXtyZXR1'@;
put 'cm4gbmV3IERhKGMsbCxhLGQsaCl9Y2xhc3MgRGEgZXh0ZW5kcyByaXtjb25zdHJ1Y3RvcihsLGEsZCxoLGYsdil7c3VwZXIobCksdGhpcy5vbkZpbmFsaXplPWYsdGhpcy5zaG91bGRVbnN1YnNjcmliZT12LHRoaXMuX25leHQ9YT9mdW5jdGlvbihNKXt0cnl7YShNKX1jYXRjaChEKXtsLmVy'@;
put 'cm9yKEQpfX06c3VwZXIuX25leHQsdGhpcy5fZXJyb3I9aD9mdW5jdGlvbihNKXt0cnl7aChNKX1jYXRjaChEKXtsLmVycm9yKEQpfWZpbmFsbHl7dGhpcy51bnN1YnNjcmliZSgpfX06c3VwZXIuX2Vycm9yLHRoaXMuX2NvbXBsZXRlPWQ/ZnVuY3Rpb24oKXt0cnl7ZCgpfWNhdGNoKE0pe2wu'@;
put 'ZXJyb3IoTSl9ZmluYWxseXt0aGlzLnVuc3Vic2NyaWJlKCl9fTpzdXBlci5fY29tcGxldGV9dW5zdWJzY3JpYmUoKXt2YXIgbDtpZighdGhpcy5zaG91bGRVbnN1YnNjcmliZXx8dGhpcy5zaG91bGRVbnN1YnNjcmliZSgpKXtjb25zdHtjbG9zZWQ6YX09dGhpcztzdXBlci51bnN1YnNjcmli'@;
put 'ZSgpLCFhJiYobnVsbD09PShsPXRoaXMub25GaW5hbGl6ZSl8fHZvaWQgMD09PWx8fGwuY2FsbCh0aGlzKSl9fX1mdW5jdGlvbiBMcihjLGwpe3JldHVybiBWaSgoYSxkKT0+e2xldCBoPTA7YS5zdWJzY3JpYmUoTmkoZCxmPT57ZC5uZXh0KGMuY2FsbChsLGYsaCsrKSl9KSl9KX1jb25zdCBw'@;
put 'YT0iaHR0cHM6Ly9nLmNvL25nL3NlY3VyaXR5I3hzcyI7Y2xhc3MgUW4gZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3RvcihsLGEpe3N1cGVyKGZ1bmN0aW9uIGxhKGMsbCl7cmV0dXJuYE5HMCR7TWF0aC5hYnMoYyl9JHtsPyI6ICIrbDoiIn1gfShsLGEpKSx0aGlzLmNvZGU9bH19ZnVuY3Rpb24g'@;
put 'TnMoYyl7cmV0dXJue3RvU3RyaW5nOmN9LnRvU3RyaW5nKCl9Y29uc3QgcHU9Il9fcGFyYW1ldGVyc19fIjtmdW5jdGlvbiB4YShjLGwsYSl7cmV0dXJuIE5zKCgpPT57Y29uc3QgZD1mdW5jdGlvbiBpcihjKXtyZXR1cm4gZnVuY3Rpb24oLi4uYSl7aWYoYyl7Y29uc3QgZD1jKC4uLmEpO2Zv'@;
put 'cihjb25zdCBoIGluIGQpdGhpc1toXT1kW2hdfX19KGwpO2Z1bmN0aW9uIGgoLi4uZil7aWYodGhpcyBpbnN0YW5jZW9mIGgpcmV0dXJuIGQuYXBwbHkodGhpcyxmKSx0aGlzO2NvbnN0IHY9bmV3IGgoLi4uZik7cmV0dXJuIE0uYW5ub3RhdGlvbj12LE07ZnVuY3Rpb24gTShELFoscmUpe2Nv'@;
put 'bnN0IGNlPUQuaGFzT3duUHJvcGVydHkocHUpP0RbcHVdOk9iamVjdC5kZWZpbmVQcm9wZXJ0eShELHB1LHt2YWx1ZTpbXX0pW3B1XTtmb3IoO2NlLmxlbmd0aDw9cmU7KWNlLnB1c2gobnVsbCk7cmV0dXJuKGNlW3JlXT1jZVtyZV18fFtdKS5wdXNoKHYpLER9fXJldHVybiBhJiYoaC5wcm90'@;
put 'b3R5cGU9T2JqZWN0LmNyZWF0ZShhLnByb3RvdHlwZSkpLGgucHJvdG90eXBlLm5nTWV0YWRhdGFOYW1lPWMsaC5hbm5vdGF0aW9uQ2xzPWgsaH0pfWNvbnN0IFZ0PWdsb2JhbFRoaXM7ZnVuY3Rpb24gSGEoYyl7Zm9yKGxldCBsIGluIGMpaWYoY1tsXT09PUhhKXJldHVybiBsO3Rocm93IEVy'@;
put 'cm9yKCJDb3VsZCBub3QgZmluZCByZW5hbWVkIHByb3BlcnR5IG9uIHRhcmdldCBvYmplY3QuIil9ZnVuY3Rpb24gTHUoYyxsKXtmb3IoY29uc3QgYSBpbiBsKWwuaGFzT3duUHJvcGVydHkoYSkmJiFjLmhhc093blByb3BlcnR5KGEpJiYoY1thXT1sW2FdKX1mdW5jdGlvbiBQcihjKXtpZigi'@;
put 'c3RyaW5nIj09dHlwZW9mIGMpcmV0dXJuIGM7aWYoQXJyYXkuaXNBcnJheShjKSlyZXR1cm4iWyIrYy5tYXAoUHIpLmpvaW4oIiwgIikrIl0iO2lmKG51bGw9PWMpcmV0dXJuIiIrYztpZihjLm92ZXJyaWRkZW5OYW1lKXJldHVybmAke2Mub3ZlcnJpZGRlbk5hbWV9YDtpZihjLm5hbWUpcmV0'@;
put 'dXJuYCR7Yy5uYW1lfWA7Y29uc3QgbD1jLnRvU3RyaW5nKCk7aWYobnVsbD09bClyZXR1cm4iIitsO2NvbnN0IGE9bC5pbmRleE9mKCJcbiIpO3JldHVybi0xPT09YT9sOmwuc3Vic3RyaW5nKDAsYSl9ZnVuY3Rpb24gb2QoYyxsKXtyZXR1cm4gbnVsbD09Y3x8IiI9PT1jP251bGw9PT1sPyIi'@;
put 'Omw6bnVsbD09bHx8IiI9PT1sP2M6YysiICIrbH1jb25zdCBjZj1IYSh7X19mb3J3YXJkX3JlZl9fOkhhfSk7ZnVuY3Rpb24gQ3MoYyl7cmV0dXJuIGMuX19mb3J3YXJkX3JlZl9fPUNzLGMudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gUHIodGhpcygpKX0sY31mdW5jdGlvbiBZaShjKXty'@;
put 'ZXR1cm4geWwoYyk/YygpOmN9ZnVuY3Rpb24geWwoYyl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIGMmJmMuaGFzT3duUHJvcGVydHkoY2YpJiZjLl9fZm9yd2FyZF9yZWZfXz09PUNzfWZ1bmN0aW9uIGFuKGMpe3JldHVybnt0b2tlbjpjLnRva2VuLHByb3ZpZGVkSW46Yy5wcm92aWRlZElu'@;
put 'fHxudWxsLGZhY3Rvcnk6Yy5mYWN0b3J5LHZhbHVlOnZvaWQgMH19ZnVuY3Rpb24gQXIoYyl7cmV0dXJue3Byb3ZpZGVyczpjLnByb3ZpZGVyc3x8W10saW1wb3J0czpjLmltcG9ydHN8fFtdfX1mdW5jdGlvbiBQbyhjKXtyZXR1cm4gb2woYyxTcyl8fG9sKGMsSG8pfWZ1bmN0aW9uIG9sKGMs'@;
put 'bCl7cmV0dXJuIGMuaGFzT3duUHJvcGVydHkobCk/Y1tsXTpudWxsfWZ1bmN0aW9uIFZzKGMpe3JldHVybiBjJiYoYy5oYXNPd25Qcm9wZXJ0eShqbCl8fGMuaGFzT3duUHJvcGVydHkoa28pKT9jW2psXTpudWxsfWNvbnN0IFNzPUhhKHtcdTAyNzVwcm92OkhhfSksamw9SGEoe1x1MDI3NWlu'@;
put 'ajpIYX0pLEhvPUhhKHtuZ0luamVjdGFibGVEZWY6SGF9KSxrbz1IYSh7bmdJbmplY3RvckRlZjpIYX0pO2NsYXNzIFN0e2NvbnN0cnVjdG9yKGwsYSl7dGhpcy5fZGVzYz1sLHRoaXMubmdNZXRhZGF0YU5hbWU9IkluamVjdGlvblRva2VuIix0aGlzLlx1MDI3NXByb3Y9dm9pZCAwLCJudW1i'@;
put 'ZXIiPT10eXBlb2YgYT90aGlzLl9fTkdfRUxFTUVOVF9JRF9fPWE6dm9pZCAwIT09YSYmKHRoaXMuXHUwMjc1cHJvdj1hbih7dG9rZW46dGhpcyxwcm92aWRlZEluOmEucHJvdmlkZWRJbnx8InJvb3QiLGZhY3Rvcnk6YS5mYWN0b3J5fSkpfWdldCBtdWx0aSgpe3JldHVybiB0aGlzfXRvU3Ry'@;
put 'aW5nKCl7cmV0dXJuYEluamVjdGlvblRva2VuICR7dGhpcy5fZGVzY31gfX1mdW5jdGlvbiBWYShjKXtyZXR1cm4gYyYmISFjLlx1MDI3NXByb3ZpZGVyc31jb25zdCAkbz1IYSh7XHUwMjc1Y21wOkhhfSksWGw9SGEoe1x1MDI3NWRpcjpIYX0pLHRvPUhhKHtcdTAyNzVwaXBlOkhhfSksX289'@;
put 'SGEoe1x1MDI3NW1vZDpIYX0pLGppPUhhKHtcdTAyNzVmYWM6SGF9KSxQYz1IYSh7X19OR19FTEVNRU5UX0lEX186SGF9KSx6bD1IYSh7X19OR19FTlZfSURfXzpIYX0pO2Z1bmN0aW9uIENhKGMpe3JldHVybiJzdHJpbmciPT10eXBlb2YgYz9jOm51bGw9PWM/IiI6U3RyaW5nKGMpfWZ1bmN0'@;
put 'aW9uIE1zKGMsbCl7dGhyb3cgbmV3IFFuKC0yMDEsITEpfXZhciByYT1mdW5jdGlvbihjKXtyZXR1cm4gY1tjLkRlZmF1bHQ9MF09IkRlZmF1bHQiLGNbYy5Ib3N0PTFdPSJIb3N0IixjW2MuU2VsZj0yXT0iU2VsZiIsY1tjLlNraXBTZWxmPTRdPSJTa2lwU2VsZiIsY1tjLk9wdGlvbmFsPThd'@;
put 'PSJPcHRpb25hbCIsY30ocmF8fHt9KTtsZXQgb287ZnVuY3Rpb24gYTUoKXtyZXR1cm4gb299ZnVuY3Rpb24gX2woYyl7Y29uc3QgbD1vbztyZXR1cm4gb289YyxsfWZ1bmN0aW9uIHRoKGMsbCxhKXtjb25zdCBkPVBvKGMpO3JldHVybiBkJiYicm9vdCI9PWQucHJvdmlkZWRJbj92b2lkIDA9'@;
put 'PT1kLnZhbHVlP2QudmFsdWU9ZC5mYWN0b3J5KCk6ZC52YWx1ZTphJnJhLk9wdGlvbmFsP251bGw6dm9pZCAwIT09bD9sOnZvaWQgTXMoKX1jb25zdCBLMD17fSxndT0iX19OR19ESV9GTEFHX18iLEZjPSJuZ1RlbXBUb2tlblBhdGgiLFJ3PS9cbi9nbSxzbD0iX19zb3VyY2UiO2xldCBJMztm'@;
put 'dW5jdGlvbiBuaChjKXtjb25zdCBsPUkzO3JldHVybiBJMz1jLGx9ZnVuY3Rpb24gRDEoYyxsPXJhLkRlZmF1bHQpe2lmKHZvaWQgMD09PUkzKXRocm93IG5ldyBRbigtMjAzLCExKTtyZXR1cm4gbnVsbD09PUkzP3RoKGMsdm9pZCAwLGwpOkkzLmdldChjLGwmcmEuT3B0aW9uYWw/bnVsbDp2'@;
put 'b2lkIDAsbCl9ZnVuY3Rpb24geHIoYyxsPXJhLkRlZmF1bHQpe3JldHVybihhNSgpfHxEMSkoWWkoYyksbCl9ZnVuY3Rpb24gZmkoYyxsPXJhLkRlZmF1bHQpe3JldHVybiB4cihjLG81KGwpKX1mdW5jdGlvbiBvNShjKXtyZXR1cm4gdHlwZW9mIGM+InUifHwibnVtYmVyIj09dHlwZW9mIGM/'@;
put 'YzooYy5vcHRpb25hbCYmOCl8KGMuaG9zdCYmMSl8KGMuc2VsZiYmMil8KGMuc2tpcFNlbGYmJjQpfWZ1bmN0aW9uIHM1KGMpe2NvbnN0IGw9W107Zm9yKGxldCBhPTA7YTxjLmxlbmd0aDthKyspe2NvbnN0IGQ9WWkoY1thXSk7aWYoQXJyYXkuaXNBcnJheShkKSl7aWYoMD09PWQubGVuZ3Ro'@;
put 'KXRocm93IG5ldyBRbig5MDAsITEpO2xldCBoLGY9cmEuRGVmYXVsdDtmb3IobGV0IHY9MDt2PGQubGVuZ3RoO3YrKyl7Y29uc3QgTT1kW3ZdLEQ9cGYoTSk7Im51bWJlciI9PXR5cGVvZiBEPy0xPT09RD9oPU0udG9rZW46Znw9RDpoPU19bC5wdXNoKHhyKGgsZikpfWVsc2UgbC5wdXNoKHhy'@;
put 'KGQpKX1yZXR1cm4gbH1mdW5jdGlvbiB0MChjLGwpe3JldHVybiBjW2d1XT1sLGMucHJvdG90eXBlW2d1XT1sLGN9ZnVuY3Rpb24gcGYoYyl7cmV0dXJuIGNbZ3VdfWNvbnN0IGM1PXQwKHhhKCJJbmplY3QiLGM9Pih7dG9rZW46Y30pKSwtMSksSTE9dDAoeGEoIk9wdGlvbmFsIiksOCksbGQ9'@;
put 'dDAoeGEoIlNraXBTZWxmIiksNCk7ZnVuY3Rpb24gbXUoYyxsKXtyZXR1cm4gYy5oYXNPd25Qcm9wZXJ0eShqaSk/Y1tqaV06bnVsbH1mdW5jdGlvbiBSMyhjLGwpe2MuZm9yRWFjaChhPT5BcnJheS5pc0FycmF5KGEpP1IzKGEsbCk6bChhKSl9ZnVuY3Rpb24gUGwoYyxsLGEpe2w+PWMubGVu'@;
put 'Z3RoP2MucHVzaChhKTpjLnNwbGljZShsLDAsYSl9ZnVuY3Rpb24gT3UoYyxsKXtyZXR1cm4gbD49Yy5sZW5ndGgtMT9jLnBvcCgpOmMuc3BsaWNlKGwsMSlbMF19ZnVuY3Rpb24gXzAoYyxsLGEpe2xldCBkPWUyKGMsbCk7cmV0dXJuIGQ+PTA/Y1sxfGRdPWE6KGQ9fmQsZnVuY3Rpb24gZHYo'@;
put 'YyxsLGEsZCl7bGV0IGg9Yy5sZW5ndGg7aWYoaD09bCljLnB1c2goYSxkKTtlbHNlIGlmKDE9PT1oKWMucHVzaChkLGNbMF0pLGNbMF09YTtlbHNle2ZvcihoLS0sYy5wdXNoKGNbaC0xXSxjW2hdKTtoPmw7KWNbaF09Y1toLTJdLGgtLTtjW2xdPWEsY1tsKzFdPWR9fShjLGQsbCxhKSksZH1m'@;
put 'dW5jdGlvbiBBNihjLGwpe2NvbnN0IGE9ZTIoYyxsKTtpZihhPj0wKXJldHVybiBjWzF8YV19ZnVuY3Rpb24gZTIoYyxsKXtyZXR1cm4gZnVuY3Rpb24gUjEoYyxsLGEpe2xldCBkPTAsaD1jLmxlbmd0aD4+YTtmb3IoO2ghPT1kOyl7Y29uc3QgZj1kKyhoLWQ+PjEpLHY9Y1tmPDxhXTtpZihs'@;
put 'PT09dilyZXR1cm4gZjw8YTt2Pmw/aD1mOmQ9ZisxfXJldHVybn4oaDw8YSl9KGMsbCwxKX1jb25zdCBJMD17fSx0cz1bXSx0Mj1uZXcgU3QoIiIpLEwzPW5ldyBTdCgiIiwtMSksazY9bmV3IFN0KCIiKTtjbGFzcyB1NXtnZXQobCxhPUswKXtpZihhPT09SzApe2NvbnN0IGQ9bmV3IEVycm9y'@;
put 'KGBOdWxsSW5qZWN0b3JFcnJvcjogTm8gcHJvdmlkZXIgZm9yICR7UHIobCl9IWApO3Rocm93IGQubmFtZT0iTnVsbEluamVjdG9yRXJyb3IiLGR9cmV0dXJuIGF9fXZhciBPMz1mdW5jdGlvbihjKXtyZXR1cm4gY1tjLk9uUHVzaD0wXT0iT25QdXNoIixjW2MuRGVmYXVsdD0xXT0iRGVmYXVs'@;
put 'dCIsY30oTzN8fHt9KSxKcz1mdW5jdGlvbihjKXtyZXR1cm4gY1tjLkVtdWxhdGVkPTBdPSJFbXVsYXRlZCIsY1tjLk5vbmU9Ml09Ik5vbmUiLGNbYy5TaGFkb3dEb209M109IlNoYWRvd0RvbSIsY30oSnN8fHt9KSxObj1mdW5jdGlvbihjKXtyZXR1cm4gY1tjLk5vbmU9MF09Ik5vbmUiLGNb'@;
put 'Yy5TaWduYWxCYXNlZD0xXT0iU2lnbmFsQmFzZWQiLGNbYy5IYXNEZWNvcmF0b3JJbnB1dFRyYW5zZm9ybT0yXT0iSGFzRGVjb3JhdG9ySW5wdXRUcmFuc2Zvcm0iLGN9KE5ufHx7fSk7ZnVuY3Rpb24gRncoYyxsLGEpe2xldCBkPWMubGVuZ3RoO2Zvcig7Oyl7Y29uc3QgaD1jLmluZGV4T2Yo'@;
put 'bCxhKTtpZigtMT09PWgpcmV0dXJuIGg7aWYoMD09PWh8fGMuY2hhckNvZGVBdChoLTEpPD0zMil7Y29uc3QgZj1sLmxlbmd0aDtpZihoK2Y9PT1kfHxjLmNoYXJDb2RlQXQoaCtmKTw9MzIpcmV0dXJuIGh9YT1oKzF9fWZ1bmN0aW9uIG00KGMsbCxhKXtsZXQgZD0wO2Zvcig7ZDxhLmxlbmd0'@;
put 'aDspe2NvbnN0IGg9YVtkXTtpZigibnVtYmVyIj09dHlwZW9mIGgpe2lmKDAhPT1oKWJyZWFrO2QrKztjb25zdCBmPWFbZCsrXSx2PWFbZCsrXSxNPWFbZCsrXTtjLnNldEF0dHJpYnV0ZShsLHYsTSxmKX1lbHNle2NvbnN0IGY9aCx2PWFbKytkXTtoNShmKT9jLnNldFByb3BlcnR5KGwsZix2'@;
put 'KTpjLnNldEF0dHJpYnV0ZShsLGYsdiksZCsrfX1yZXR1cm4gZH1mdW5jdGlvbiBkNShjKXtyZXR1cm4gMz09PWN8fDQ9PT1jfHw2PT09Y31mdW5jdGlvbiBoNShjKXtyZXR1cm4gNjQ9PT1jLmNoYXJDb2RlQXQoMCl9ZnVuY3Rpb24gdmYoYyxsKXtpZihudWxsIT09bCYmMCE9PWwubGVuZ3Ro'@;
put 'KWlmKG51bGw9PT1jfHwwPT09Yy5sZW5ndGgpYz1sLnNsaWNlKCk7ZWxzZXtsZXQgYT0tMTtmb3IobGV0IGQ9MDtkPGwubGVuZ3RoO2QrKyl7Y29uc3QgaD1sW2RdOyJudW1iZXIiPT10eXBlb2YgaD9hPWg6MD09PWF8fEQ2KGMsYSxoLG51bGwsLTE9PT1hfHwyPT09YT9sWysrZF06bnVsbCl9'@;
put 'fXJldHVybiBjfWZ1bmN0aW9uIEQ2KGMsbCxhLGQsaCl7bGV0IGY9MCx2PWMubGVuZ3RoO2lmKC0xPT09bCl2PS0xO2Vsc2UgZm9yKDtmPGMubGVuZ3RoOyl7Y29uc3QgTT1jW2YrK107aWYoIm51bWJlciI9PXR5cGVvZiBNKXtpZihNPT09bCl7dj0tMTticmVha31pZihNPmwpe3Y9Zi0xO2Jy'@;
put 'ZWFrfX19Zm9yKDtmPGMubGVuZ3RoOyl7Y29uc3QgTT1jW2ZdO2lmKCJudW1iZXIiPT10eXBlb2YgTSlicmVhaztpZihNPT09YSl7aWYobnVsbD09PWQpcmV0dXJuIHZvaWQobnVsbCE9PWgmJihjW2YrMV09aCkpO2lmKGQ9PT1jW2YrMV0pcmV0dXJuIHZvaWQoY1tmKzJdPWgpfWYrKyxudWxs'@;
put 'IT09ZCYmZisrLG51bGwhPT1oJiZmKyt9LTEhPT12JiYoYy5zcGxpY2UodiwwLGwpLGY9disxKSxjLnNwbGljZShmKyssMCxhKSxudWxsIT09ZCYmYy5zcGxpY2UoZisrLDAsZCksbnVsbCE9PWgmJmMuc3BsaWNlKGYrKywwLGgpfWNvbnN0IGh2PSJuZy10ZW1wbGF0ZSI7ZnVuY3Rpb24gSTYo'@;
put 'YyxsLGEsZCl7bGV0IGg9MDtpZihkKXtmb3IoO2g8bC5sZW5ndGgmJiJzdHJpbmciPT10eXBlb2YgbFtoXTtoKz0yKWlmKCJjbGFzcyI9PT1sW2hdJiYtMSE9PUZ3KGxbaCsxXS50b0xvd2VyQ2FzZSgpLGEsMCkpcmV0dXJuITB9ZWxzZSBpZih2NChjKSlyZXR1cm4hMTtpZihoPWwuaW5kZXhP'@;
put 'ZigxLGgpLGg+LTEpe2xldCBmO2Zvcig7KytoPGwubGVuZ3RoJiYic3RyaW5nIj09dHlwZW9mKGY9bFtoXSk7KWlmKGYudG9Mb3dlckNhc2UoKT09PWEpcmV0dXJuITB9cmV0dXJuITF9ZnVuY3Rpb24gdjQoYyl7cmV0dXJuIDQ9PT1jLnR5cGUmJmMudmFsdWUhPT1odn1mdW5jdGlvbiByMChj'@;
put 'LGwsYSl7cmV0dXJuIGw9PT0oNCE9PWMudHlwZXx8YT9jLnZhbHVlOmh2KX1mdW5jdGlvbiBIdyhjLGwsYSl7bGV0IGQ9NDtjb25zdCBoPWMuYXR0cnMsZj1udWxsIT09aD9mdW5jdGlvbiBwdihjKXtmb3IobGV0IGw9MDtsPGMubGVuZ3RoO2wrKylpZihkNShjW2xdKSlyZXR1cm4gbDtyZXR1'@;
put 'cm4gYy5sZW5ndGh9KGgpOjA7bGV0IHY9ITE7Zm9yKGxldCBNPTA7TTxsLmxlbmd0aDtNKyspe2NvbnN0IEQ9bFtNXTtpZigibnVtYmVyIiE9dHlwZW9mIEQpe2lmKCF2KWlmKDQmZCl7aWYoZD0yfDEmZCwiIiE9PUQmJiFyMChjLEQsYSl8fCIiPT09RCYmMT09PWwubGVuZ3RoKXtpZihNYyhk'@;
put 'KSlyZXR1cm4hMTt2PSEwfX1lbHNlIGlmKDgmZCl7aWYobnVsbD09PWh8fCFJNihjLGgsRCxhKSl7aWYoTWMoZCkpcmV0dXJuITE7dj0hMH19ZWxzZXtjb25zdCBaPWxbKytNXSxyZT1QMyhELGgsdjQoYyksYSk7aWYoLTE9PT1yZSl7aWYoTWMoZCkpcmV0dXJuITE7dj0hMDtjb250aW51ZX1p'@;
put 'ZigiIiE9PVope2xldCBjZTtpZihjZT1yZT5mPyIiOmhbcmUrMV0udG9Mb3dlckNhc2UoKSwyJmQmJlohPT1jZSl7aWYoTWMoZCkpcmV0dXJuITE7dj0hMH19fX1lbHNle2lmKCF2JiYhTWMoZCkmJiFNYyhEKSlyZXR1cm4hMTtpZih2JiZNYyhEKSljb250aW51ZTt2PSExLGQ9RHwxJmR9fXJl'@;
put 'dHVybiBNYyhkKXx8dn1mdW5jdGlvbiBNYyhjKXtyZXR1cm4hKDEmYyl9ZnVuY3Rpb24gUDMoYyxsLGEsZCl7aWYobnVsbD09PWwpcmV0dXJuLTE7bGV0IGg9MDtpZihkfHwhYSl7bGV0IGY9ITE7Zm9yKDtoPGwubGVuZ3RoOyl7Y29uc3Qgdj1sW2hdO2lmKHY9PT1jKXJldHVybiBoO2lmKDM9'@;
put 'PT12fHw2PT09dilmPSEwO2Vsc2V7aWYoMT09PXZ8fDI9PT12KXtsZXQgTT1sWysraF07Zm9yKDsic3RyaW5nIj09dHlwZW9mIE07KU09bFsrK2hdO2NvbnRpbnVlfWlmKDQ9PT12KWJyZWFrO2lmKDA9PT12KXtoKz00O2NvbnRpbnVlfX1oKz1mPzE6Mn1yZXR1cm4tMX1yZXR1cm4gZnVuY3Rp'@;
put 'b24gZ3YoYyxsKXtsZXQgYT1jLmluZGV4T2YoNCk7aWYoYT4tMSlmb3IoYSsrO2E8Yy5sZW5ndGg7KXtjb25zdCBkPWNbYV07aWYoIm51bWJlciI9PXR5cGVvZiBkKXJldHVybi0xO2lmKGQ9PT1sKXJldHVybiBhO2ErK31yZXR1cm4tMX0obCxjKX1mdW5jdGlvbiBiNChjLGwsYT0hMSl7Zm9y'@;
put 'KGxldCBkPTA7ZDxsLmxlbmd0aDtkKyspaWYoSHcoYyxsW2RdLGEpKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIE53KGMsbCl7ZTpmb3IobGV0IGE9MDthPGwubGVuZ3RoO2ErKyl7Y29uc3QgZD1sW2FdO2lmKGMubGVuZ3RoPT09ZC5sZW5ndGgpe2ZvcihsZXQgaD0wO2g8Yy5sZW5ndGg7'@;
put 'aCsrKWlmKGNbaF0hPT1kW2hdKWNvbnRpbnVlIGU7cmV0dXJuITB9fXJldHVybiExfWZ1bmN0aW9uIG12KGMsbCl7cmV0dXJuIGM/Ijpub3QoIitsLnRyaW0oKSsiKSI6bH1mdW5jdGlvbiBWdyhjKXtsZXQgbD1jWzBdLGE9MSxkPTIsaD0iIixmPSExO2Zvcig7YTxjLmxlbmd0aDspe2xldCB2'@;
put 'PWNbYV07aWYoInN0cmluZyI9PXR5cGVvZiB2KWlmKDImZCl7Y29uc3QgTT1jWysrYV07aCs9IlsiK3YrKE0ubGVuZ3RoPjA/Jz0iJytNKyciJzoiIikrIl0ifWVsc2UgOCZkP2grPSIuIit2OjQmZCYmKGgrPSIgIit2KTtlbHNlIiIhPT1oJiYhTWModikmJihsKz1tdihmLGgpLGg9IiIpLGQ9'@;
put 'dixmPWZ8fCFNYyhkKTthKyt9cmV0dXJuIiIhPT1oJiYobCs9bXYoZixoKSksbH1mdW5jdGlvbiBWcihjKXtyZXR1cm4gTnMoKCk9Pntjb25zdCBsPVI2KGMpLGE9ey4uLmwsZGVjbHM6Yy5kZWNscyx2YXJzOmMudmFycyx0ZW1wbGF0ZTpjLnRlbXBsYXRlLGNvbnN0czpjLmNvbnN0c3x8bnVs'@;
put 'bCxuZ0NvbnRlbnRTZWxlY3RvcnM6Yy5uZ0NvbnRlbnRTZWxlY3RvcnMsb25QdXNoOmMuY2hhbmdlRGV0ZWN0aW9uPT09TzMuT25QdXNoLGRpcmVjdGl2ZURlZnM6bnVsbCxwaXBlRGVmczpudWxsLGRlcGVuZGVuY2llczpsLnN0YW5kYWxvbmUmJmMuZGVwZW5kZW5jaWVzfHxudWxsLGdldFN0'@;
put 'YW5kYWxvbmVJbmplY3RvcjpudWxsLHNpZ25hbHM6Yy5zaWduYWxzPz8hMSxkYXRhOmMuZGF0YXx8e30sZW5jYXBzdWxhdGlvbjpjLmVuY2Fwc3VsYXRpb258fEpzLkVtdWxhdGVkLHN0eWxlczpjLnN0eWxlc3x8dHMsXzpudWxsLHNjaGVtYXM6Yy5zY2hlbWFzfHxudWxsLHRWaWV3Om51bGws'@;
put 'aWQ6IiJ9O1IwKGEpO2NvbnN0IGQ9Yy5kZXBlbmRlbmNpZXM7cmV0dXJuIGEuZGlyZWN0aXZlRGVmcz1wNShkLCExKSxhLnBpcGVEZWZzPXA1KGQsITApLGEuaWQ9ZnVuY3Rpb24gancoYyl7bGV0IGw9MDtjb25zdCBhPVtjLnNlbGVjdG9ycyxjLm5nQ29udGVudFNlbGVjdG9ycyxjLmhvc3RW'@;
put 'YXJzLGMuaG9zdEF0dHJzLGMuY29uc3RzLGMudmFycyxjLmRlY2xzLGMuZW5jYXBzdWxhdGlvbixjLnN0YW5kYWxvbmUsYy5zaWduYWxzLGMuZXhwb3J0QXMsSlNPTi5zdHJpbmdpZnkoYy5pbnB1dHMpLEpTT04uc3RyaW5naWZ5KGMub3V0cHV0cyksT2JqZWN0LmdldE93blByb3BlcnR5TmFt'@;
put 'ZXMoYy50eXBlLnByb3RvdHlwZSksISFjLmNvbnRlbnRRdWVyaWVzLCEhYy52aWV3UXVlcnldLmpvaW4oInwiKTtmb3IoY29uc3QgaCBvZiBhKWw9TWF0aC5pbXVsKDMxLGwpK2guY2hhckNvZGVBdCgwKXwwO3JldHVybiBsKz0yMTQ3NDgzNjQ4LCJjIitsfShhKSxhfSl9ZnVuY3Rpb24gYmYo'@;
put 'Yyl7cmV0dXJuIFZvKGMpfHx4YyhjKX1mdW5jdGlvbiBmNShjKXtyZXR1cm4gbnVsbCE9PWN9ZnVuY3Rpb24ga2koYyl7cmV0dXJuIE5zKCgpPT4oe3R5cGU6Yy50eXBlLGJvb3RzdHJhcDpjLmJvb3RzdHJhcHx8dHMsZGVjbGFyYXRpb25zOmMuZGVjbGFyYXRpb25zfHx0cyxpbXBvcnRzOmMu'@;
put 'aW1wb3J0c3x8dHMsZXhwb3J0czpjLmV4cG9ydHN8fHRzLHRyYW5zaXRpdmVDb21waWxlU2NvcGVzOm51bGwsc2NoZW1hczpjLnNjaGVtYXN8fG51bGwsaWQ6Yy5pZHx8bnVsbH0pKX1mdW5jdGlvbiB5NChjLGwpe2lmKG51bGw9PWMpcmV0dXJuIEkwO2NvbnN0IGE9e307Zm9yKGNvbnN0IGQg'@;
put 'aW4gYylpZihjLmhhc093blByb3BlcnR5KGQpKXtjb25zdCBoPWNbZF07bGV0IGYsdixNPU5uLk5vbmU7QXJyYXkuaXNBcnJheShoKT8oTT1oWzBdLGY9aFsxXSx2PWhbMl0/P2YpOihmPWgsdj1oKSxsPyhhW2ZdPU0hPT1Obi5Ob25lP1tkLE1dOmQsbFtmXT12KTphW2ZdPWR9cmV0dXJuIGF9'@;
put 'ZnVuY3Rpb24gRXIoYyl7cmV0dXJuIE5zKCgpPT57Y29uc3QgbD1SNihjKTtyZXR1cm4gUjAobCksbH0pfWZ1bmN0aW9uIGxsKGMpe3JldHVybnt0eXBlOmMudHlwZSxuYW1lOmMubmFtZSxmYWN0b3J5Om51bGwscHVyZTohMSE9PWMucHVyZSxzdGFuZGFsb25lOiEwPT09Yy5zdGFuZGFsb25l'@;
put 'LG9uRGVzdHJveTpjLnR5cGUucHJvdG90eXBlLm5nT25EZXN0cm95fHxudWxsfX1mdW5jdGlvbiBWbyhjKXtyZXR1cm4gY1skb118fG51bGx9ZnVuY3Rpb24geGMoYyl7cmV0dXJuIGNbWGxdfHxudWxsfWZ1bmN0aW9uIGV1KGMpe3JldHVybiBjW3RvXXx8bnVsbH1mdW5jdGlvbiBQdShjLGwp'@;
put 'e2NvbnN0IGE9Y1tfb118fG51bGw7aWYoIWEmJiEwPT09bCl0aHJvdyBuZXcgRXJyb3IoYFR5cGUgJHtQcihjKX0gZG9lcyBub3QgaGF2ZSAnXHUwMjc1bW9kJyBwcm9wZXJ0eS5gKTtyZXR1cm4gYX1mdW5jdGlvbiBSNihjKXtjb25zdCBsPXt9O3JldHVybnt0eXBlOmMudHlwZSxwcm92aWRl'@;
put 'cnNSZXNvbHZlcjpudWxsLGZhY3Rvcnk6bnVsbCxob3N0QmluZGluZ3M6Yy5ob3N0QmluZGluZ3N8fG51bGwsaG9zdFZhcnM6Yy5ob3N0VmFyc3x8MCxob3N0QXR0cnM6Yy5ob3N0QXR0cnN8fG51bGwsY29udGVudFF1ZXJpZXM6Yy5jb250ZW50UXVlcmllc3x8bnVsbCxkZWNsYXJlZElucHV0'@;
put 'czpsLGlucHV0VHJhbnNmb3JtczpudWxsLGlucHV0Q29uZmlnOmMuaW5wdXRzfHxJMCxleHBvcnRBczpjLmV4cG9ydEFzfHxudWxsLHN0YW5kYWxvbmU6ITA9PT1jLnN0YW5kYWxvbmUsc2lnbmFsczohMD09PWMuc2lnbmFscyxzZWxlY3RvcnM6Yy5zZWxlY3RvcnN8fHRzLHZpZXdRdWVyeTpj'@;
put 'LnZpZXdRdWVyeXx8bnVsbCxmZWF0dXJlczpjLmZlYXR1cmVzfHxudWxsLHNldElucHV0Om51bGwsZmluZEhvc3REaXJlY3RpdmVEZWZzOm51bGwsaG9zdERpcmVjdGl2ZXM6bnVsbCxpbnB1dHM6eTQoYy5pbnB1dHMsbCksb3V0cHV0czp5NChjLm91dHB1dHMpLGRlYnVnSW5mbzpudWxsfX1m'@;
put 'dW5jdGlvbiBSMChjKXtjLmZlYXR1cmVzPy5mb3JFYWNoKGw9PmwoYykpfWZ1bmN0aW9uIHA1KGMsbCl7aWYoIWMpcmV0dXJuIG51bGw7Y29uc3QgYT1sP2V1OmJmO3JldHVybigpPT4oImZ1bmN0aW9uIj09dHlwZW9mIGM/YygpOmMpLm1hcChkPT5hKGQpKS5maWx0ZXIoZjUpfWZ1bmN0aW9u'@;
put 'IHp3KC4uLmMpe3JldHVybntcdTAyNzVwcm92aWRlcnM6cmgoMCxjKSxcdTAyNzVmcm9tTmdNb2R1bGU6ITB9fWZ1bmN0aW9uIHJoKGMsLi4ubCl7Y29uc3QgYT1bXSxkPW5ldyBTZXQ7bGV0IGg7Y29uc3QgZj12PT57YS5wdXNoKHYpfTtyZXR1cm4gUjMobCx2PT57Y29uc3QgTT12O180KE0s'@;
put 'ZixbXSxkKSYmKGh8fD1bXSxoLnB1c2goTSkpfSksdm9pZCAwIT09aCYmYnYoaCxmKSxhfWZ1bmN0aW9uIGJ2KGMsbCl7Zm9yKGxldCBhPTA7YTxjLmxlbmd0aDthKyspe2NvbnN0e25nTW9kdWxlOmQscHJvdmlkZXJzOmh9PWNbYV07TDYoaCxmPT57bChmLGQpfSl9fWZ1bmN0aW9uIF80KGMs'@;
put 'bCxhLGQpe2lmKCEoYz1ZaShjKSkpcmV0dXJuITE7bGV0IGg9bnVsbCxmPVZzKGMpO2NvbnN0IHY9IWYmJlZvKGMpO2lmKGZ8fHYpe2lmKHYmJiF2LnN0YW5kYWxvbmUpcmV0dXJuITE7aD1jfWVsc2V7Y29uc3QgRD1jLm5nTW9kdWxlO2lmKGY9VnMoRCksIWYpcmV0dXJuITE7aD1EfWNvbnN0'@;
put 'IE09ZC5oYXMoaCk7aWYodil7aWYoTSlyZXR1cm4hMTtpZihkLmFkZChoKSx2LmRlcGVuZGVuY2llcyl7Y29uc3QgRD0iZnVuY3Rpb24iPT10eXBlb2Ygdi5kZXBlbmRlbmNpZXM/di5kZXBlbmRlbmNpZXMoKTp2LmRlcGVuZGVuY2llcztmb3IoY29uc3QgWiBvZiBEKV80KFosbCxhLGQpfX1l'@;
put 'bHNle2lmKCFmKXJldHVybiExO3tpZihudWxsIT1mLmltcG9ydHMmJiFNKXtsZXQgWjtkLmFkZChoKTt0cnl7UjMoZi5pbXBvcnRzLHJlPT57XzQocmUsbCxhLGQpJiYoWnx8PVtdLFoucHVzaChyZSkpfSl9ZmluYWxseXt9dm9pZCAwIT09WiYmYnYoWixsKX1pZighTSl7Y29uc3QgWj1tdSho'@;
put 'KXx8KCgpPT5uZXcgaCk7bCh7cHJvdmlkZTpoLHVzZUZhY3Rvcnk6WixkZXBzOnRzfSxoKSxsKHtwcm92aWRlOms2LHVzZVZhbHVlOmgsbXVsdGk6ITB9LGgpLGwoe3Byb3ZpZGU6dDIsdXNlVmFsdWU6KCk9PnhyKGgpLG11bHRpOiEwfSxoKX1jb25zdCBEPWYucHJvdmlkZXJzO2lmKG51bGwh'@;
put 'PUQmJiFNKXtjb25zdCBaPWM7TDYoRCxyZT0+e2wocmUsWil9KX19fXJldHVybiBoIT09YyYmdm9pZCAwIT09Yy5wcm92aWRlcnN9ZnVuY3Rpb24gTDYoYyxsKXtmb3IobGV0IGEgb2YgYylWYShhKSYmKGE9YS5cdTAyNzVwcm92aWRlcnMpLEFycmF5LmlzQXJyYXkoYSk/TDYoYSxsKTpsKGEp'@;
put 'fWNvbnN0IFV3PUhhKHtwcm92aWRlOlN0cmluZyx1c2VWYWx1ZTpIYX0pO2Z1bmN0aW9uIE82KGMpe3JldHVybiBudWxsIT09YyYmIm9iamVjdCI9PXR5cGVvZiBjJiZVdyBpbiBjfWZ1bmN0aW9uIF9mKGMpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBjfWNvbnN0IEY2PW5ldyBTdCgiIiks'@;
put 'RjM9e30sWnc9e307bGV0IEg2O2Z1bmN0aW9uIEgzKCl7cmV0dXJuIHZvaWQgMD09PUg2JiYoSDY9bmV3IHU1KSxINn1jbGFzcyBoY3t9Y2xhc3MgY2QgZXh0ZW5kcyBoY3tnZXQgZGVzdHJveWVkKCl7cmV0dXJuIHRoaXMuX2Rlc3Ryb3llZH1jb25zdHJ1Y3RvcihsLGEsZCxoKXtzdXBlcigp'@;
put 'LHRoaXMucGFyZW50PWEsdGhpcy5zb3VyY2U9ZCx0aGlzLnNjb3Blcz1oLHRoaXMucmVjb3Jkcz1uZXcgTWFwLHRoaXMuX25nT25EZXN0cm95SG9va3M9bmV3IFNldCx0aGlzLl9vbkRlc3Ryb3lIb29rcz1bXSx0aGlzLl9kZXN0cm95ZWQ9ITEsbTUobCx2PT50aGlzLnByb2Nlc3NQcm92aWRl'@;
put 'cih2KSksdGhpcy5yZWNvcmRzLnNldChMMyxOMyh2b2lkIDAsdGhpcykpLGguaGFzKCJlbnZpcm9ubWVudCIpJiZ0aGlzLnJlY29yZHMuc2V0KGhjLE4zKHZvaWQgMCx0aGlzKSk7Y29uc3QgZj10aGlzLnJlY29yZHMuZ2V0KEY2KTtudWxsIT1mJiYic3RyaW5nIj09dHlwZW9mIGYudmFsdWUm'@;
put 'JnRoaXMuc2NvcGVzLmFkZChmLnZhbHVlKSx0aGlzLmluamVjdG9yRGVmVHlwZXM9bmV3IFNldCh0aGlzLmdldChrNix0cyxyYS5TZWxmKSl9ZGVzdHJveSgpe3RoaXMuYXNzZXJ0Tm90RGVzdHJveWVkKCksdGhpcy5fZGVzdHJveWVkPSEwO2NvbnN0IGw9X2UobnVsbCk7dHJ5e2Zvcihjb25z'@;
put 'dCBkIG9mIHRoaXMuX25nT25EZXN0cm95SG9va3MpZC5uZ09uRGVzdHJveSgpO2NvbnN0IGE9dGhpcy5fb25EZXN0cm95SG9va3M7dGhpcy5fb25EZXN0cm95SG9va3M9W107Zm9yKGNvbnN0IGQgb2YgYSlkKCl9ZmluYWxseXt0aGlzLnJlY29yZHMuY2xlYXIoKSx0aGlzLl9uZ09uRGVzdHJv'@;
put 'eUhvb2tzLmNsZWFyKCksdGhpcy5pbmplY3RvckRlZlR5cGVzLmNsZWFyKCksX2UobCl9fW9uRGVzdHJveShsKXtyZXR1cm4gdGhpcy5hc3NlcnROb3REZXN0cm95ZWQoKSx0aGlzLl9vbkRlc3Ryb3lIb29rcy5wdXNoKGwpLCgpPT50aGlzLnJlbW92ZU9uRGVzdHJveShsKX1ydW5JbkNvbnRl'@;
put 'eHQobCl7dGhpcy5hc3NlcnROb3REZXN0cm95ZWQoKTtjb25zdCBhPW5oKHRoaXMpLGQ9X2wodm9pZCAwKTt0cnl7cmV0dXJuIGwoKX1maW5hbGx5e25oKGEpLF9sKGQpfX1nZXQobCxhPUswLGQ9cmEuRGVmYXVsdCl7aWYodGhpcy5hc3NlcnROb3REZXN0cm95ZWQoKSxsLmhhc093blByb3Bl'@;
put 'cnR5KHpsKSlyZXR1cm4gbFt6bF0odGhpcyk7ZD1vNShkKTtjb25zdCBmPW5oKHRoaXMpLHY9X2wodm9pZCAwKTt0cnl7aWYoIShkJnJhLlNraXBTZWxmKSl7bGV0IEQ9dGhpcy5yZWNvcmRzLmdldChsKTtpZih2b2lkIDA9PT1EKXtjb25zdCBaPWZ1bmN0aW9uIFl3KGMpe3JldHVybiJmdW5j'@;
put 'dGlvbiI9PXR5cGVvZiBjfHwib2JqZWN0Ij09dHlwZW9mIGMmJmMgaW5zdGFuY2VvZiBTdH0obCkmJlBvKGwpO0Q9WiYmdGhpcy5pbmplY3RhYmxlRGVmSW5TY29wZShaKT9OMyhnNShsKSxGMyk6bnVsbCx0aGlzLnJlY29yZHMuc2V0KGwsRCl9aWYobnVsbCE9RClyZXR1cm4gdGhpcy5oeWRy'@;
put 'YXRlKGwsRCl9cmV0dXJuKGQmcmEuU2VsZj9IMygpOnRoaXMucGFyZW50KS5nZXQobCxhPWQmcmEuT3B0aW9uYWwmJmE9PT1LMD9udWxsOmEpfWNhdGNoKE0pe2lmKCJOdWxsSW5qZWN0b3JFcnJvciI9PT1NLm5hbWUpe2lmKChNW0ZjXT1NW0ZjXXx8W10pLnVuc2hpZnQoUHIobCkpLGYpdGhy'@;
put 'b3cgTTtyZXR1cm4gZnVuY3Rpb24gbDUoYyxsLGEsZCl7Y29uc3QgaD1jW0ZjXTt0aHJvdyBsW3NsXSYmaC51bnNoaWZ0KGxbc2xdKSxjLm1lc3NhZ2U9ZnVuY3Rpb24gZzQoYyxsLGEsZD1udWxsKXtjPWMmJiJcbiI9PT1jLmNoYXJBdCgwKSYmIlx1MDI3NSI9PWMuY2hhckF0KDEpP2Muc2xp'@;
put 'Y2UoMik6YztsZXQgaD1QcihsKTtpZihBcnJheS5pc0FycmF5KGwpKWg9bC5tYXAoUHIpLmpvaW4oIiAtPiAiKTtlbHNlIGlmKCJvYmplY3QiPT10eXBlb2YgbCl7bGV0IGY9W107Zm9yKGxldCB2IGluIGwpaWYobC5oYXNPd25Qcm9wZXJ0eSh2KSl7bGV0IE09bFt2XTtmLnB1c2godisiOiIr'@;
put 'KCJzdHJpbmciPT10eXBlb2YgTT9KU09OLnN0cmluZ2lmeShNKTpQcihNKSkpfWg9YHske2Yuam9pbigiLCAiKX19YH1yZXR1cm5gJHthfSR7ZD8iKCIrZCsiKSI6IiJ9WyR7aH1dOiAke2MucmVwbGFjZShSdywiXG4gICIpfWB9KCJcbiIrYy5tZXNzYWdlLGgsYSxkKSxjLm5nVG9rZW5QYXRo'@;
put 'PWgsY1tGY109bnVsbCxjfShNLGwsIlIzSW5qZWN0b3JFcnJvciIsdGhpcy5zb3VyY2UpfXRocm93IE19ZmluYWxseXtfbCh2KSxuaChmKX19cmVzb2x2ZUluamVjdG9ySW5pdGlhbGl6ZXJzKCl7Y29uc3QgbD1fZShudWxsKSxhPW5oKHRoaXMpLGQ9X2wodm9pZCAwKTt0cnl7Y29uc3QgZj10'@;
put 'aGlzLmdldCh0Mix0cyxyYS5TZWxmKTtmb3IoY29uc3QgdiBvZiBmKXYoKX1maW5hbGx5e25oKGEpLF9sKGQpLF9lKGwpfX10b1N0cmluZygpe2NvbnN0IGw9W10sYT10aGlzLnJlY29yZHM7Zm9yKGNvbnN0IGQgb2YgYS5rZXlzKCkpbC5wdXNoKFByKGQpKTtyZXR1cm5gUjNJbmplY3Rvclsk'@;
put 'e2wuam9pbigiLCAiKX1dYH1hc3NlcnROb3REZXN0cm95ZWQoKXtpZih0aGlzLl9kZXN0cm95ZWQpdGhyb3cgbmV3IFFuKDIwNSwhMSl9cHJvY2Vzc1Byb3ZpZGVyKGwpe2xldCBhPV9mKGw9WWkobCkpP2w6WWkobCYmbC5wcm92aWRlKTtjb25zdCBkPWZ1bmN0aW9uIE42KGMpe3JldHVybiBP'@;
put 'NihjKT9OMyh2b2lkIDAsYy51c2VWYWx1ZSk6TjMoQ3YoYyksRjMpfShsKTtpZighX2YobCkmJiEwPT09bC5tdWx0aSl7bGV0IGg9dGhpcy5yZWNvcmRzLmdldChhKTtofHwoaD1OMyh2b2lkIDAsRjMsITApLGguZmFjdG9yeT0oKT0+czUoaC5tdWx0aSksdGhpcy5yZWNvcmRzLnNldChhLGgp'@;
put 'KSxhPWwsaC5tdWx0aS5wdXNoKGwpfXRoaXMucmVjb3Jkcy5zZXQoYSxkKX1oeWRyYXRlKGwsYSl7Y29uc3QgZD1fZShudWxsKTt0cnl7cmV0dXJuIGEudmFsdWU9PT1GMyYmKGEudmFsdWU9WncsYS52YWx1ZT1hLmZhY3RvcnkoKSksIm9iamVjdCI9PXR5cGVvZiBhLnZhbHVlJiZhLnZhbHVl'@;
put 'JiZmdW5jdGlvbiBTdihjKXtyZXR1cm4gbnVsbCE9PWMmJiJvYmplY3QiPT10eXBlb2YgYyYmImZ1bmN0aW9uIj09dHlwZW9mIGMubmdPbkRlc3Ryb3l9KGEudmFsdWUpJiZ0aGlzLl9uZ09uRGVzdHJveUhvb2tzLmFkZChhLnZhbHVlKSxhLnZhbHVlfWZpbmFsbHl7X2UoZCl9fWluamVjdGFi'@;
put 'bGVEZWZJblNjb3BlKGwpe2lmKCFsLnByb3ZpZGVkSW4pcmV0dXJuITE7Y29uc3QgYT1ZaShsLnByb3ZpZGVkSW4pO3JldHVybiJzdHJpbmciPT10eXBlb2YgYT8iYW55Ij09PWF8fHRoaXMuc2NvcGVzLmhhcyhhKTp0aGlzLmluamVjdG9yRGVmVHlwZXMuaGFzKGEpfXJlbW92ZU9uRGVzdHJv'@;
put 'eShsKXtjb25zdCBhPXRoaXMuX29uRGVzdHJveUhvb2tzLmluZGV4T2YobCk7LTEhPT1hJiZ0aGlzLl9vbkRlc3Ryb3lIb29rcy5zcGxpY2UoYSwxKX19ZnVuY3Rpb24gZzUoYyl7Y29uc3QgbD1QbyhjKSxhPW51bGwhPT1sP2wuZmFjdG9yeTptdShjKTtpZihudWxsIT09YSlyZXR1cm4gYTtp'@;
put 'ZihjIGluc3RhbmNlb2YgU3QpdGhyb3cgbmV3IFFuKDIwNCwhMSk7aWYoYyBpbnN0YW5jZW9mIEZ1bmN0aW9uKXJldHVybiBmdW5jdGlvbiB3dihjKXtpZihjLmxlbmd0aD4wKXRocm93IG5ldyBRbigyMDQsITEpO2NvbnN0IGE9ZnVuY3Rpb24gem8oYyl7cmV0dXJuIGMmJihjW1NzXXx8Y1tI'@;
put 'b10pfHxudWxsfShjKTtyZXR1cm4gbnVsbCE9PWE/KCk9PmEuZmFjdG9yeShjKTooKT0+bmV3IGN9KGMpO3Rocm93IG5ldyBRbigyMDQsITEpfWZ1bmN0aW9uIEN2KGMsbCxhKXtsZXQgZDtpZihfZihjKSl7Y29uc3QgaD1ZaShjKTtyZXR1cm4gbXUoaCl8fGc1KGgpfWlmKE82KGMpKWQ9KCk9'@;
put 'PllpKGMudXNlVmFsdWUpO2Vsc2UgaWYoZnVuY3Rpb24gX3YoYyl7cmV0dXJuISghY3x8IWMudXNlRmFjdG9yeSl9KGMpKWQ9KCk9PmMudXNlRmFjdG9yeSguLi5zNShjLmRlcHN8fFtdKSk7ZWxzZSBpZihmdW5jdGlvbiB5dihjKXtyZXR1cm4hKCFjfHwhYy51c2VFeGlzdGluZyl9KGMpKWQ9'@;
put 'KCk9PnhyKFlpKGMudXNlRXhpc3RpbmcpKTtlbHNle2NvbnN0IGg9WWkoYyYmKGMudXNlQ2xhc3N8fGMucHJvdmlkZSkpO2lmKCFmdW5jdGlvbiBXdyhjKXtyZXR1cm4hIWMuZGVwc30oYykpcmV0dXJuIG11KGgpfHxnNShoKTtkPSgpPT5uZXcgaCguLi5zNShjLmRlcHMpKX1yZXR1cm4gZH1m'@;
put 'dW5jdGlvbiBOMyhjLGwsYT0hMSl7cmV0dXJue2ZhY3Rvcnk6Yyx2YWx1ZTpsLG11bHRpOmE/W106dm9pZCAwfX1mdW5jdGlvbiBtNShjLGwpe2Zvcihjb25zdCBhIG9mIGMpQXJyYXkuaXNBcnJheShhKT9tNShhLGwpOmEmJlZhKGEpP201KGEuXHUwMjc1cHJvdmlkZXJzLGwpOmwoYSl9ZnVu'@;
put 'Y3Rpb24gcTAoYyxsKXtjIGluc3RhbmNlb2YgY2QmJmMuYXNzZXJ0Tm90RGVzdHJveWVkKCk7Y29uc3QgZD1uaChjKSxoPV9sKHZvaWQgMCk7dHJ5e3JldHVybiBsKCl9ZmluYWxseXtuaChkKSxfbChoKX19ZnVuY3Rpb24gTXYoKXtyZXR1cm4gdm9pZCAwIT09YTUoKXx8bnVsbCE9ZnVuY3Rp'@;
put 'b24gTHcoKXtyZXR1cm4gSTN9KCl9Y29uc3QgajY9RnVuY3Rpb247Y29uc3QgVWw9MCxLaT0xLFVhPTIsZmM9MyxOYz00LHJjPTUsbnU9NixYMD03LGNsPTgscGM9OSxMMT0xMCxibz0xMSxTZj0xMixDND0xMyxvMD0xNCxabD0xNSxTND0xNixNZj0xNyx1ZD0xOCx3MD0xOSxhMj0yMCxvMj0y'@;
put 'MSx2NT0yMix4Zj0yMyx3bz0yNSx6Nj0xLHZ1PTcsVjM9OSxnYz0xMDt2YXIgYjU9ZnVuY3Rpb24oYyl7cmV0dXJuIGNbYy5Ob25lPTBdPSJOb25lIixjW2MuSGFzVHJhbnNwbGFudGVkVmlld3M9Ml09Ikhhc1RyYW5zcGxhbnRlZFZpZXdzIixjfShiNXx8e30pO2Z1bmN0aW9uIEZ1KGMpe3Jl'@;
put 'dHVybiBBcnJheS5pc0FycmF5KGMpJiYib2JqZWN0Ij09dHlwZW9mIGNbejZdfWZ1bmN0aW9uIEh1KGMpe3JldHVybiBBcnJheS5pc0FycmF5KGMpJiYhMD09PWNbejZdfWZ1bmN0aW9uIHJ1KGMpe3JldHVybiEhKDQmYy5mbGFncyl9ZnVuY3Rpb24gRWYoYyl7cmV0dXJuIGMuY29tcG9uZW50'@;
put 'T2Zmc2V0Pi0xfWZ1bmN0aW9uIEowKGMpe3JldHVybiEoMSZ+Yy5mbGFncyl9ZnVuY3Rpb24gVmMoYyl7cmV0dXJuISFjLnRlbXBsYXRlfWZ1bmN0aW9uIHg0KGMpe3JldHVybiEhKDUxMiZjW1VhXSl9Y2xhc3MgdFZ7Y29uc3RydWN0b3IobCxhLGQpe3RoaXMucHJldmlvdXNWYWx1ZT1sLHRo'@;
put 'aXMuY3VycmVudFZhbHVlPWEsdGhpcy5maXJzdENoYW5nZT1kfWlzRmlyc3RDaGFuZ2UoKXtyZXR1cm4gdGhpcy5maXJzdENoYW5nZX19ZnVuY3Rpb24gWUEoYyxsLGEsZCl7bnVsbCE9PWw/bC5hcHBseVZhbHVlVG9JbnB1dFNpZ25hbChsLGQpOmNbYV09ZH1mdW5jdGlvbiB3bCgpe3JldHVy'@;
put 'biBHQX1mdW5jdGlvbiBHQShjKXtyZXR1cm4gYy50eXBlLnByb3RvdHlwZS5uZ09uQ2hhbmdlcyYmKGMuc2V0SW5wdXQ9clYpLG5WfWZ1bmN0aW9uIG5WKCl7Y29uc3QgYz1LQSh0aGlzKSxsPWM/LmN1cnJlbnQ7aWYobCl7Y29uc3QgYT1jLnByZXZpb3VzO2lmKGE9PT1JMCljLnByZXZpb3Vz'@;
put 'PWw7ZWxzZSBmb3IobGV0IGQgaW4gbClhW2RdPWxbZF07Yy5jdXJyZW50PW51bGwsdGhpcy5uZ09uQ2hhbmdlcyhsKX19ZnVuY3Rpb24gclYoYyxsLGEsZCxoKXtjb25zdCBmPXRoaXMuZGVjbGFyZWRJbnB1dHNbZF0sdj1LQShjKXx8ZnVuY3Rpb24gaVYoYyxsKXtyZXR1cm4gY1skQV09bH0o'@;
put 'Yyx7cHJldmlvdXM6STAsY3VycmVudDpudWxsfSksTT12LmN1cnJlbnR8fCh2LmN1cnJlbnQ9e30pLEQ9di5wcmV2aW91cyxaPURbZl07TVtmXT1uZXcgdFYoWiYmWi5jdXJyZW50VmFsdWUsYSxEPT09STApLFlBKGMsbCxoLGEpfXdsLm5nSW5oZXJpdD0hMDtjb25zdCAkQT0iX19uZ1NpbXBs'@;
put 'ZUNoYW5nZXNfXyI7ZnVuY3Rpb24gS0EoYyl7cmV0dXJuIGNbJEFdfHxudWxsfWNvbnN0IHUyPWZ1bmN0aW9uKGMsbCxhKXt9O2xldCBYQT0hMTtmdW5jdGlvbiBDbChjKXtmb3IoO0FycmF5LmlzQXJyYXkoYyk7KWM9Y1tVbF07cmV0dXJuIGN9ZnVuY3Rpb24geTUoYyxsKXtyZXR1cm4gQ2wo'@;
put 'bFtjXSl9ZnVuY3Rpb24gTDAoYyxsKXtyZXR1cm4gQ2wobFtjLmluZGV4XSl9ZnVuY3Rpb24gWTYoYyxsKXtyZXR1cm4gYy5kYXRhW2xdfWZ1bmN0aW9uIEU0KGMsbCl7cmV0dXJuIGNbbF19ZnVuY3Rpb24gTzEoYyxsKXtjb25zdCBhPWxbY107cmV0dXJuIEZ1KGEpP2E6YVtVbF19ZnVuY3Rp'@;
put 'b24gUXcoYyl7cmV0dXJuISgxMjgmfmNbVWFdKX1mdW5jdGlvbiBkMihjLGwpe3JldHVybiBudWxsPT1sP251bGw6Y1tsXX1mdW5jdGlvbiBlQyhjKXtjW01mXT0wfWZ1bmN0aW9uIGNWKGMpezEwMjQmY1tVYV18fChjW1VhXXw9MTAyNCxRdyhjKSYmRzYoYykpfWZ1bmN0aW9uIFR2KGMpe3Jl'@;
put 'dHVybiEhKDkyMTYmY1tVYV18fGNbeGZdPy5kaXJ0eSl9ZnVuY3Rpb24gbkMoYyl7Y1tMMV0uY2hhbmdlRGV0ZWN0aW9uU2NoZWR1bGVyPy5ub3RpZnkoMSksVHYoYyk/RzYoYyk6NjQmY1tVYV0mJihmdW5jdGlvbiBvVigpe3JldHVybiBYQX0oKT8oY1tVYV18PTEwMjQsRzYoYykpOmNbTDFd'@;
put 'LmNoYW5nZURldGVjdGlvblNjaGVkdWxlcj8ubm90aWZ5KCkpfWZ1bmN0aW9uIEc2KGMpe2NbTDFdLmNoYW5nZURldGVjdGlvblNjaGVkdWxlcj8ubm90aWZ5KCk7bGV0IGw9VDQoYyk7Zm9yKDtudWxsIT09bCYmISg4MTkyJmxbVWFdKSYmKGxbVWFdfD04MTkyLFF3KGwpKTspbD1UNChsKX1m'@;
put 'dW5jdGlvbiBBdihjLGwpe2lmKCEoMjU2Jn5jW1VhXSkpdGhyb3cgbmV3IFFuKDkxMSwhMSk7bnVsbD09PWNbbzJdJiYoY1tvMl09W10pLGNbbzJdLnB1c2gobCl9ZnVuY3Rpb24gVDQoYyl7Y29uc3QgbD1jW2ZjXTtyZXR1cm4gSHUobCk/bFtmY106bH1jb25zdCBDbz17bEZyYW1lOmFrKG51'@;
put 'bGwpLGJpbmRpbmdzRW5hYmxlZDohMCxza2lwSHlkcmF0aW9uUm9vdFROb2RlOm51bGx9O2Z1bmN0aW9uIHRrKCl7cmV0dXJuIENvLmJpbmRpbmdzRW5hYmxlZH1mdW5jdGlvbiBfNSgpe3JldHVybiBudWxsIT09Q28uc2tpcEh5ZHJhdGlvblJvb3RUTm9kZX1mdW5jdGlvbiBkaSgpe3JldHVy'@;
put 'biBDby5sRnJhbWUubFZpZXd9ZnVuY3Rpb24gbHMoKXtyZXR1cm4gQ28ubEZyYW1lLnRWaWV3fWZ1bmN0aW9uIHd0KGMpe3JldHVybiBDby5sRnJhbWUuY29udGV4dExWaWV3PWMsY1tjbF19ZnVuY3Rpb24gQ3QoYyl7cmV0dXJuIENvLmxGcmFtZS5jb250ZXh0TFZpZXc9bnVsbCxjfWZ1bmN0'@;
put 'aW9uIHVsKCl7bGV0IGM9ckMoKTtmb3IoO251bGwhPT1jJiY2ND09PWMudHlwZTspYz1jLnBhcmVudDtyZXR1cm4gY31mdW5jdGlvbiByQygpe3JldHVybiBDby5sRnJhbWUuY3VycmVudFROb2RlfWZ1bmN0aW9uIGgyKGMsbCl7Y29uc3QgYT1Dby5sRnJhbWU7YS5jdXJyZW50VE5vZGU9Yyxh'@;
put 'LmlzUGFyZW50PWx9ZnVuY3Rpb24gaUMoKXtyZXR1cm4gQ28ubEZyYW1lLmlzUGFyZW50fWZ1bmN0aW9uIGFDKCl7Q28ubEZyYW1lLmlzUGFyZW50PSExfWZ1bmN0aW9uIE8wKCl7Y29uc3QgYz1Dby5sRnJhbWU7bGV0IGw9Yy5iaW5kaW5nUm9vdEluZGV4O3JldHVybi0xPT09bCYmKGw9Yy5i'@;
put 'aW5kaW5nUm9vdEluZGV4PWMudFZpZXcuYmluZGluZ1N0YXJ0SW5kZXgpLGx9ZnVuY3Rpb24gVGYoKXtyZXR1cm4gQ28ubEZyYW1lLmJpbmRpbmdJbmRleH1mdW5jdGlvbiBhaCgpe3JldHVybiBDby5sRnJhbWUuYmluZGluZ0luZGV4Kyt9ZnVuY3Rpb24gQWYoYyl7Y29uc3QgbD1Dby5sRnJh'@;
put 'bWUsYT1sLmJpbmRpbmdJbmRleDtyZXR1cm4gbC5iaW5kaW5nSW5kZXg9bC5iaW5kaW5nSW5kZXgrYyxhfWZ1bmN0aW9uIHlWKGMsbCl7Y29uc3QgYT1Dby5sRnJhbWU7YS5iaW5kaW5nSW5kZXg9YS5iaW5kaW5nUm9vdEluZGV4PWMsb0MobCl9ZnVuY3Rpb24gb0MoYyl7Q28ubEZyYW1lLmN1'@;
put 'cnJlbnREaXJlY3RpdmVJbmRleD1jfWZ1bmN0aW9uIHNDKGMpe2NvbnN0IGw9Q28ubEZyYW1lLmN1cnJlbnREaXJlY3RpdmVJbmRleDtyZXR1cm4tMT09PWw/bnVsbDpjW2xdfWZ1bmN0aW9uIGxDKCl7cmV0dXJuIENvLmxGcmFtZS5jdXJyZW50UXVlcnlJbmRleH1mdW5jdGlvbiBCMyhjKXtD'@;
put 'by5sRnJhbWUuY3VycmVudFF1ZXJ5SW5kZXg9Y31mdW5jdGlvbiBjQyhjKXtjb25zdCBsPWNbS2ldO3JldHVybiAyPT09bC50eXBlP2wuZGVjbFROb2RlOjE9PT1sLnR5cGU/Y1tyY106bnVsbH1mdW5jdGlvbiBEdihjLGwsYSl7aWYoYSZyYS5Ta2lwU2VsZil7bGV0IGg9bCxmPWM7Zm9yKDsh'@;
put 'KGg9aC5wYXJlbnQsbnVsbCE9PWh8fGEmcmEuSG9zdHx8KGg9Y0MoZiksbnVsbD09PWh8fChmPWZbbzBdLDEwJmgudHlwZSkpKTspO2lmKG51bGw9PT1oKXJldHVybiExO2w9aCxjPWZ9Y29uc3QgZD1Dby5sRnJhbWU9ajMoKTtyZXR1cm4gZC5jdXJyZW50VE5vZGU9bCxkLmxWaWV3PWMsITB9'@;
put 'ZnVuY3Rpb24gSzYoYyl7Y29uc3QgbD1qMygpLGE9Y1tLaV07Q28ubEZyYW1lPWwsbC5jdXJyZW50VE5vZGU9YS5maXJzdENoaWxkLGwubFZpZXc9YyxsLnRWaWV3PWEsbC5jb250ZXh0TFZpZXc9YyxsLmJpbmRpbmdJbmRleD1hLmJpbmRpbmdTdGFydEluZGV4LGwuaW5JMThuPSExfWZ1bmN0'@;
put 'aW9uIGozKCl7Y29uc3QgYz1Dby5sRnJhbWUsbD1udWxsPT09Yz9udWxsOmMuY2hpbGQ7cmV0dXJuIG51bGw9PT1sP2FrKGMpOmx9ZnVuY3Rpb24gYWsoYyl7Y29uc3QgbD17Y3VycmVudFROb2RlOm51bGwsaXNQYXJlbnQ6ITAsbFZpZXc6bnVsbCx0VmlldzpudWxsLHNlbGVjdGVkSW5kZXg6'@;
put 'LTEsY29udGV4dExWaWV3Om51bGwsZWxlbWVudERlcHRoQ291bnQ6MCxjdXJyZW50TmFtZXNwYWNlOm51bGwsY3VycmVudERpcmVjdGl2ZUluZGV4Oi0xLGJpbmRpbmdSb290SW5kZXg6LTEsYmluZGluZ0luZGV4Oi0xLGN1cnJlbnRRdWVyeUluZGV4OjAscGFyZW50OmMsY2hpbGQ6bnVsbCxp'@;
put 'bkkxOG46ITF9O3JldHVybiBudWxsIT09YyYmKGMuY2hpbGQ9bCksbH1mdW5jdGlvbiBJdigpe2NvbnN0IGM9Q28ubEZyYW1lO3JldHVybiBDby5sRnJhbWU9Yy5wYXJlbnQsYy5jdXJyZW50VE5vZGU9bnVsbCxjLmxWaWV3PW51bGwsY31jb25zdCBvaz1JdjtmdW5jdGlvbiB3NSgpe2NvbnN0'@;
put 'IGM9SXYoKTtjLmlzUGFyZW50PSEwLGMudFZpZXc9bnVsbCxjLnNlbGVjdGVkSW5kZXg9LTEsYy5jb250ZXh0TFZpZXc9bnVsbCxjLmVsZW1lbnREZXB0aENvdW50PTAsYy5jdXJyZW50RGlyZWN0aXZlSW5kZXg9LTEsYy5jdXJyZW50TmFtZXNwYWNlPW51bGwsYy5iaW5kaW5nUm9vdEluZGV4'@;
put 'PS0xLGMuYmluZGluZ0luZGV4PS0xLGMuY3VycmVudFF1ZXJ5SW5kZXg9MH1mdW5jdGlvbiBWdSgpe3JldHVybiBDby5sRnJhbWUuc2VsZWN0ZWRJbmRleH1mdW5jdGlvbiBBNChjKXtDby5sRnJhbWUuc2VsZWN0ZWRJbmRleD1jfWZ1bmN0aW9uIFFzKCl7Y29uc3QgYz1Dby5sRnJhbWU7cmV0'@;
put 'dXJuIFk2KGMudFZpZXcsYy5zZWxlY3RlZEluZGV4KX1sZXQgbGs9ITA7ZnVuY3Rpb24gcTYoKXtyZXR1cm4gbGt9ZnVuY3Rpb24gZjIoYyl7bGs9Y31mdW5jdGlvbiBSdihjLGwpe2ZvcihsZXQgYT1sLmRpcmVjdGl2ZVN0YXJ0LGQ9bC5kaXJlY3RpdmVFbmQ7YTxkO2ErKyl7Y29uc3QgZj1j'@;
put 'LmRhdGFbYV0udHlwZS5wcm90b3R5cGUse25nQWZ0ZXJDb250ZW50SW5pdDp2LG5nQWZ0ZXJDb250ZW50Q2hlY2tlZDpNLG5nQWZ0ZXJWaWV3SW5pdDpELG5nQWZ0ZXJWaWV3Q2hlY2tlZDpaLG5nT25EZXN0cm95OnJlfT1mO3YmJihjLmNvbnRlbnRIb29rcz8/PVtdKS5wdXNoKC1hLHYpLE0m'@;
put 'JigoYy5jb250ZW50SG9va3M/Pz1bXSkucHVzaChhLE0pLChjLmNvbnRlbnRDaGVja0hvb2tzPz89W10pLnB1c2goYSxNKSksRCYmKGMudmlld0hvb2tzPz89W10pLnB1c2goLWEsRCksWiYmKChjLnZpZXdIb29rcz8/PVtdKS5wdXNoKGEsWiksKGMudmlld0NoZWNrSG9va3M/Pz1bXSkucHVz'@;
put 'aChhLFopKSxudWxsIT1yZSYmKGMuZGVzdHJveUhvb2tzPz89W10pLnB1c2goYSxyZSl9fWZ1bmN0aW9uIEx2KGMsbCxhKXtjayhjLGwsMyxhKX1mdW5jdGlvbiBPdihjLGwsYSxkKXsoMyZjW1VhXSk9PT1hJiZjayhjLGwsYSxkKX1mdW5jdGlvbiBkQyhjLGwpe2xldCBhPWNbVWFdOygzJmEp'@;
put 'PT09bCYmKGEmPTE2MzgzLGErPTEsY1tVYV09YSl9ZnVuY3Rpb24gY2soYyxsLGEsZCl7Y29uc3QgZj1kPz8tMSx2PWwubGVuZ3RoLTE7bGV0IE09MDtmb3IobGV0IEQ9dm9pZCAwIT09ZD82NTUzNSZjW01mXTowO0Q8djtEKyspaWYoIm51bWJlciI9PXR5cGVvZiBsW0QrMV0pe2lmKE09bFtE'@;
put 'XSxudWxsIT1kJiZNPj1kKWJyZWFrfWVsc2UgbFtEXTwwJiYoY1tNZl0rPTY1NTM2KSwoTTxmfHwtMT09ZikmJihFVihjLGEsbCxEKSxjW01mXT0oNDI5NDkwMTc2MCZjW01mXSkrRCsyKSxEKyt9ZnVuY3Rpb24gdWsoYyxsKXt1Mig0LGMsbCk7Y29uc3QgYT1fZShudWxsKTt0cnl7bC5jYWxs'@;
put 'KGMpfWZpbmFsbHl7X2UoYSksdTIoNSxjLGwpfX1mdW5jdGlvbiBFVihjLGwsYSxkKXtjb25zdCBoPWFbZF08MCxmPWFbZCsxXSxNPWNbaD8tYVtkXTphW2RdXTtoP2NbVWFdPj4xNDxjW01mXT4+MTYmJigzJmNbVWFdKT09PWwmJihjW1VhXSs9MTYzODQsdWsoTSxmKSk6dWsoTSxmKX1jb25z'@;
put 'dCBrND0tMTtjbGFzcyBQMXtjb25zdHJ1Y3RvcihsLGEsZCl7dGhpcy5mYWN0b3J5PWwsdGhpcy5yZXNvbHZpbmc9ITEsdGhpcy5jYW5TZWVWaWV3UHJvdmlkZXJzPWEsdGhpcy5pbmplY3RJbXBsPWR9fWZ1bmN0aW9uIFB2KGMpe3JldHVybiBjIT09azR9ZnVuY3Rpb24gWDYoYyl7cmV0dXJu'@;
put 'IDMyNzY3JmN9ZnVuY3Rpb24gSjYoYyxsKXtsZXQgYT1mdW5jdGlvbiBSVihjKXtyZXR1cm4gYz4+MTZ9KGMpLGQ9bDtmb3IoO2E+MDspZD1kW28wXSxhLS07cmV0dXJuIGR9bGV0IGZDPSEwO2Z1bmN0aW9uIEZ2KGMpe2NvbnN0IGw9ZkM7cmV0dXJuIGZDPWMsbH1jb25zdCBIdj0yNTUscEM9'@;
put 'NTtsZXQgTFY9MDtjb25zdCBwMj17fTtmdW5jdGlvbiBOdihjLGwpe2NvbnN0IGE9VnYoYyxsKTtpZigtMSE9PWEpcmV0dXJuIGE7Y29uc3QgZD1sW0tpXTtkLmZpcnN0Q3JlYXRlUGFzcyYmKGMuaW5qZWN0b3JJbmRleD1sLmxlbmd0aCxnQyhkLmRhdGEsYyksZ0MobCxudWxsKSxnQyhkLmJs'@;
put 'dWVwcmludCxudWxsKSk7Y29uc3QgaD1DNShjLGwpLGY9Yy5pbmplY3RvckluZGV4O2lmKFB2KGgpKXtjb25zdCB2PVg2KGgpLE09SjYoaCxsKSxEPU1bS2ldLmRhdGE7Zm9yKGxldCBaPTA7Wjw4O1orKylsW2YrWl09TVt2K1pdfERbditaXX1yZXR1cm4gbFtmKzhdPWgsZn1mdW5jdGlvbiBn'@;
put 'QyhjLGwpe2MucHVzaCgwLDAsMCwwLDAsMCwwLDAsbCl9ZnVuY3Rpb24gVnYoYyxsKXtyZXR1cm4tMT09PWMuaW5qZWN0b3JJbmRleHx8Yy5wYXJlbnQmJmMucGFyZW50LmluamVjdG9ySW5kZXg9PT1jLmluamVjdG9ySW5kZXh8fG51bGw9PT1sW2MuaW5qZWN0b3JJbmRleCs4XT8tMTpjLmlu'@;
put 'amVjdG9ySW5kZXh9ZnVuY3Rpb24gQzUoYyxsKXtpZihjLnBhcmVudCYmLTEhPT1jLnBhcmVudC5pbmplY3RvckluZGV4KXJldHVybiBjLnBhcmVudC5pbmplY3RvckluZGV4O2xldCBhPTAsZD1udWxsLGg9bDtmb3IoO251bGwhPT1oOyl7aWYoZD1zaChoKSxudWxsPT09ZClyZXR1cm4gazQ7'@;
put 'aWYoYSsrLGg9aFtvMF0sLTEhPT1kLmluamVjdG9ySW5kZXgpcmV0dXJuIGQuaW5qZWN0b3JJbmRleHxhPDwxNn1yZXR1cm4gazR9ZnVuY3Rpb24gaGQoYyxsLGEpeyFmdW5jdGlvbiBPVihjLGwsYSl7bGV0IGQ7InN0cmluZyI9PXR5cGVvZiBhP2Q9YS5jaGFyQ29kZUF0KDApfHwwOmEuaGFz'@;
put 'T3duUHJvcGVydHkoUGMpJiYoZD1hW1BjXSksbnVsbD09ZCYmKGQ9YVtQY109TFYrKyk7Y29uc3QgaD1kJkh2O2wuZGF0YVtjKyhoPj5wQyldfD0xPDxofShjLGwsYSl9ZnVuY3Rpb24gZGsoYyxsLGEpe2lmKGEmcmEuT3B0aW9uYWx8fHZvaWQgMCE9PWMpcmV0dXJuIGM7TXMoKX1mdW5jdGlv'@;
put 'biBvaChjLGwsYSxkKXtpZihhJnJhLk9wdGlvbmFsJiZ2b2lkIDA9PT1kJiYoZD1udWxsKSwhKGEmKHJhLlNlbGZ8cmEuSG9zdCkpKXtjb25zdCBoPWNbcGNdLGY9X2wodm9pZCAwKTt0cnl7cmV0dXJuIGg/aC5nZXQobCxkLGEmcmEuT3B0aW9uYWwpOnRoKGwsZCxhJnJhLk9wdGlvbmFsKX1m'@;
put 'aW5hbGx5e19sKGYpfX1yZXR1cm4gZGsoZCwwLGEpfWZ1bmN0aW9uIGhrKGMsbCxhLGQ9cmEuRGVmYXVsdCxoKXtpZihudWxsIT09Yyl7aWYoMjA0OCZsW1VhXSYmIShkJnJhLlNlbGYpKXtjb25zdCB2PWZ1bmN0aW9uIFUzKGMsbCxhLGQsaCl7bGV0IGY9Yyx2PWw7Zm9yKDtudWxsIT09ZiYm'@;
put 'bnVsbCE9PXYmJjIwNDgmdltVYV0mJiEoNTEyJnZbVWFdKTspe2NvbnN0IE09UzUoZix2LGEsZHxyYS5TZWxmLHAyKTtpZihNIT09cDIpcmV0dXJuIE07bGV0IEQ9Zi5wYXJlbnQ7aWYoIUQpe2NvbnN0IFo9dlthMl07aWYoWil7Y29uc3QgcmU9Wi5nZXQoYSxwMixkKTtpZihyZSE9PXAyKXJl'@;
put 'dHVybiByZX1EPXNoKHYpLHY9dltvMF19Zj1EfXJldHVybiBofShjLGwsYSxkLHAyKTtpZih2IT09cDIpcmV0dXJuIHZ9Y29uc3QgZj1TNShjLGwsYSxkLHAyKTtpZihmIT09cDIpcmV0dXJuIGZ9cmV0dXJuIG9oKGwsYSxkLGgpfWZ1bmN0aW9uIFM1KGMsbCxhLGQsaCl7Y29uc3QgZj1mdW5j'@;
put 'dGlvbiBUYyhjKXtpZigic3RyaW5nIj09dHlwZW9mIGMpcmV0dXJuIGMuY2hhckNvZGVBdCgwKXx8MDtjb25zdCBsPWMuaGFzT3duUHJvcGVydHkoUGMpP2NbUGNdOnZvaWQgMDtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIGw/bD49MD9sJkh2OlEwOmx9KGEpO2lmKCJmdW5jdGlvbiI9PXR5cGVv'@;
put 'ZiBmKXtpZighRHYobCxjLGQpKXJldHVybiBkJnJhLkhvc3Q/ZGsoaCwwLGQpOm9oKGwsYSxkLGgpO3RyeXtsZXQgdjtpZih2PWYoZCksbnVsbCE9dnx8ZCZyYS5PcHRpb25hbClyZXR1cm4gdjtNcygpfWZpbmFsbHl7b2soKX19ZWxzZSBpZigibnVtYmVyIj09dHlwZW9mIGYpe2xldCB2PW51'@;
put 'bGwsTT1WdihjLGwpLEQ9azQsWj1kJnJhLkhvc3Q/bFtabF1bcmNdOm51bGw7Zm9yKCgtMT09PU18fGQmcmEuU2tpcFNlbGYpJiYoRD0tMT09PU0/QzUoYyxsKTpsW00rOF0sRCE9PWs0JiZ4NShkLCExKT8odj1sW0tpXSxNPVg2KEQpLGw9SjYoRCxsKSk6TT0tMSk7LTEhPT1NOyl7Y29uc3Qg'@;
put 'cmU9bFtLaV07aWYoTTUoZixNLHJlLmRhdGEpKXtjb25zdCBjZT1mayhNLGwsYSx2LGQsWik7aWYoY2UhPT1wMilyZXR1cm4gY2V9RD1sW00rOF0sRCE9PWs0JiZ4NShkLGxbS2ldLmRhdGFbTSs4XT09PVopJiZNNShmLE0sbCk/KHY9cmUsTT1YNihEKSxsPUo2KEQsbCkpOk09LTF9fXJldHVy'@;
put 'biBofWZ1bmN0aW9uIGZrKGMsbCxhLGQsaCxmKXtjb25zdCB2PWxbS2ldLE09di5kYXRhW2MrOF0scmU9QnYoTSx2LGEsbnVsbD09ZD9FZihNKSYmZkM6ZCE9diYmISEoMyZNLnR5cGUpLGgmcmEuSG9zdCYmZj09PU0pO3JldHVybiBudWxsIT09cmU/RDQobCx2LHJlLE0pOnAyfWZ1bmN0aW9u'@;
put 'IEJ2KGMsbCxhLGQsaCl7Y29uc3QgZj1jLnByb3ZpZGVySW5kZXhlcyx2PWwuZGF0YSxNPTEwNDg1NzUmZixEPWMuZGlyZWN0aXZlU3RhcnQscmU9Zj4+MjAsYmU9aD9NK3JlOmMuZGlyZWN0aXZlRW5kO2ZvcihsZXQgRWU9ZD9NOk0rcmU7RWU8YmU7RWUrKyl7Y29uc3QgQmU9dltFZV07aWYo'@;
put 'RWU8RCYmYT09PUJlfHxFZT49RCYmQmUudHlwZT09PWEpcmV0dXJuIEVlfWlmKGgpe2NvbnN0IEVlPXZbRF07aWYoRWUmJlZjKEVlKSYmRWUudHlwZT09PWEpcmV0dXJuIER9cmV0dXJuIG51bGx9ZnVuY3Rpb24gRDQoYyxsLGEsZCl7bGV0IGg9Y1thXTtjb25zdCBmPWwuZGF0YTtpZihmdW5j'@;
put 'dGlvbiBUVihjKXtyZXR1cm4gYyBpbnN0YW5jZW9mIFAxfShoKSl7Y29uc3Qgdj1oO3YucmVzb2x2aW5nJiZmdW5jdGlvbiAkMChjLGwpe3Rocm93IGwmJmwuam9pbigiID4gIiksbmV3IFFuKC0yMDAsYyl9KGZ1bmN0aW9uIFRhKGMpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBjP2MubmFt'@;
put 'ZXx8Yy50b1N0cmluZygpOiJvYmplY3QiPT10eXBlb2YgYyYmbnVsbCE9YyYmImZ1bmN0aW9uIj09dHlwZW9mIGMudHlwZT9jLnR5cGUubmFtZXx8Yy50eXBlLnRvU3RyaW5nKCk6Q2EoYyl9KGZbYV0pKTtjb25zdCBNPUZ2KHYuY2FuU2VlVmlld1Byb3ZpZGVycyk7di5yZXNvbHZpbmc9ITA7'@;
put 'Y29uc3QgWj12LmluamVjdEltcGw/X2wodi5pbmplY3RJbXBsKTpudWxsO0R2KGMsZCxyYS5EZWZhdWx0KTt0cnl7aD1jW2FdPXYuZmFjdG9yeSh2b2lkIDAsZixjLGQpLGwuZmlyc3RDcmVhdGVQYXNzJiZhPj1kLmRpcmVjdGl2ZVN0YXJ0JiZmdW5jdGlvbiB4VihjLGwsYSl7Y29uc3R7bmdP'@;
put 'bkNoYW5nZXM6ZCxuZ09uSW5pdDpoLG5nRG9DaGVjazpmfT1sLnR5cGUucHJvdG90eXBlO2lmKGQpe2NvbnN0IHY9R0EobCk7KGEucHJlT3JkZXJIb29rcz8/PVtdKS5wdXNoKGMsdiksKGEucHJlT3JkZXJDaGVja0hvb2tzPz89W10pLnB1c2goYyx2KX1oJiYoYS5wcmVPcmRlckhvb2tzPz89'@;
put 'W10pLnB1c2goMC1jLGgpLGYmJigoYS5wcmVPcmRlckhvb2tzPz89W10pLnB1c2goYyxmKSwoYS5wcmVPcmRlckNoZWNrSG9va3M/Pz1bXSkucHVzaChjLGYpKX0oYSxmW2FdLGwpfWZpbmFsbHl7bnVsbCE9PVomJl9sKFopLEZ2KE0pLHYucmVzb2x2aW5nPSExLG9rKCl9fXJldHVybiBofWZ1'@;
put 'bmN0aW9uIE01KGMsbCxhKXtyZXR1cm4hIShhW2wrKGM+PnBDKV0mMTw8Yyl9ZnVuY3Rpb24geDUoYyxsKXtyZXR1cm4hKGMmcmEuU2VsZnx8YyZyYS5Ib3N0JiZsKX1jbGFzcyBCdXtjb25zdHJ1Y3RvcihsLGEpe3RoaXMuX3ROb2RlPWwsdGhpcy5fbFZpZXc9YX1nZXQobCxhLGQpe3JldHVy'@;
put 'biBoayh0aGlzLl90Tm9kZSx0aGlzLl9sVmlldyxsLG81KGQpLGEpfX1mdW5jdGlvbiBRMCgpe3JldHVybiBuZXcgQnUodWwoKSxkaSgpKX1mdW5jdGlvbiBZcyhjKXtyZXR1cm4gTnMoKCk9Pntjb25zdCBsPWMucHJvdG90eXBlLmNvbnN0cnVjdG9yLGE9bFtqaV18fERmKGwpLGQ9T2JqZWN0'@;
put 'LnByb3RvdHlwZTtsZXQgaD1PYmplY3QuZ2V0UHJvdG90eXBlT2YoYy5wcm90b3R5cGUpLmNvbnN0cnVjdG9yO2Zvcig7aCYmaCE9PWQ7KXtjb25zdCBmPWhbamldfHxEZihoKTtpZihmJiZmIT09YSlyZXR1cm4gZjtoPU9iamVjdC5nZXRQcm90b3R5cGVPZihoKX1yZXR1cm4gZj0+bmV3IGZ9'@;
put 'KX1mdW5jdGlvbiBEZihjKXtyZXR1cm4geWwoYyk/KCk9Pntjb25zdCBsPURmKFlpKGMpKTtyZXR1cm4gbCYmbCgpfTptdShjKX1mdW5jdGlvbiBzaChjKXtjb25zdCBsPWNbS2ldLGE9bC50eXBlO3JldHVybiAyPT09YT9sLmRlY2xUTm9kZToxPT09YT9jW3JjXTpudWxsfWZ1bmN0aW9uIElm'@;
put 'KGMpe3JldHVybiBmdW5jdGlvbiBQVihjLGwpe2lmKCJjbGFzcyI9PT1sKXJldHVybiBjLmNsYXNzZXM7aWYoInN0eWxlIj09PWwpcmV0dXJuIGMuc3R5bGVzO2NvbnN0IGE9Yy5hdHRycztpZihhKXtjb25zdCBkPWEubGVuZ3RoO2xldCBoPTA7Zm9yKDtoPGQ7KXtjb25zdCBmPWFbaF07aWYo'@;
put 'ZDUoZikpYnJlYWs7aWYoMD09PWYpaCs9MjtlbHNlIGlmKCJudW1iZXIiPT10eXBlb2YgZilmb3IoaCsrO2g8ZCYmInN0cmluZyI9PXR5cGVvZiBhW2hdOyloKys7ZWxzZXtpZihmPT09bClyZXR1cm4gYVtoKzFdO2grPTJ9fX1yZXR1cm4gbnVsbH0odWwoKSxjKX1mdW5jdGlvbiB3QyhjLGw9'@;
put 'bnVsbCxhPW51bGwsZCl7Y29uc3QgaD1SNChjLGwsYSxkKTtyZXR1cm4gaC5yZXNvbHZlSW5qZWN0b3JJbml0aWFsaXplcnMoKSxofWZ1bmN0aW9uIFI0KGMsbD1udWxsLGE9bnVsbCxkLGg9bmV3IFNldCl7Y29uc3QgZj1bYXx8dHMsencoYyldO3JldHVybiBkPWR8fCgib2JqZWN0Ij09dHlw'@;
put 'ZW9mIGM/dm9pZCAwOlByKGMpKSxuZXcgY2QoZixsfHxIMygpLGR8fG51bGwsaCl9bGV0IERzPSgoKT0+e2NsYXNzIGN7c3RhdGlje3RoaXMuVEhST1dfSUZfTk9UX0ZPVU5EPUswfXN0YXRpY3t0aGlzLk5VTEw9bmV3IHU1fXN0YXRpYyBjcmVhdGUoYSxkKXtpZihBcnJheS5pc0FycmF5KGEp'@;
put 'KXJldHVybiB3Qyh7bmFtZToiIn0sZCxhLCIiKTt7Y29uc3QgaD1hLm5hbWU/PyIiO3JldHVybiB3Qyh7bmFtZTpofSxhLnBhcmVudCxhLnByb3ZpZGVycyxoKX19c3RhdGlje3RoaXMuXHUwMjc1cHJvdj1hbih7dG9rZW46Yyxwcm92aWRlZEluOiJhbnkiLGZhY3Rvcnk6KCk9PnhyKEwzKX0p'@;
put 'fXN0YXRpY3t0aGlzLl9fTkdfRUxFTUVOVF9JRF9fPS0xfX1yZXR1cm4gY30pKCk7ZnVuY3Rpb24gQTUoYyl7cmV0dXJuIGMubmdPcmlnaW5hbEVycm9yfWNsYXNzIGcye2NvbnN0cnVjdG9yKCl7dGhpcy5fY29uc29sZT1jb25zb2xlfWhhbmRsZUVycm9yKGwpe2NvbnN0IGE9dGhpcy5fZmlu'@;
put 'ZE9yaWdpbmFsRXJyb3IobCk7dGhpcy5fY29uc29sZS5lcnJvcigiRVJST1IiLGwpLGEmJnRoaXMuX2NvbnNvbGUuZXJyb3IoIk9SSUdJTkFMIEVSUk9SIixhKX1fZmluZE9yaWdpbmFsRXJyb3IobCl7bGV0IGE9bCYmQTUobCk7Zm9yKDthJiZBNShhKTspYT1BNShhKTtyZXR1cm4gYXx8bnVs'@;
put 'bH19Y29uc3Qgdms9bmV3IFN0KCIiLHtwcm92aWRlZEluOiJyb290IixmYWN0b3J5OigpPT5maShnMikuaGFuZGxlRXJyb3IuYmluZCh2b2lkIDApfSk7bGV0IGs1PSgoKT0+e2NsYXNzIGN7c3RhdGlje3RoaXMuX19OR19FTEVNRU5UX0lEX189VzN9c3RhdGlje3RoaXMuX19OR19FTlZfSURf'@;
put 'Xz1hPT5hfX1yZXR1cm4gY30pKCk7Y2xhc3MgWjMgZXh0ZW5kcyBrNXtjb25zdHJ1Y3RvcihsKXtzdXBlcigpLHRoaXMuX2xWaWV3PWx9b25EZXN0cm95KGwpe3JldHVybiBBdih0aGlzLl9sVmlldyxsKSwoKT0+ZnVuY3Rpb24ga3YoYyxsKXtpZihudWxsPT09Y1tvMl0pcmV0dXJuO2NvbnN0'@;
put 'IGE9Y1tvMl0uaW5kZXhPZihsKTstMSE9PWEmJmNbbzJdLnNwbGljZShhLDEpfSh0aGlzLl9sVmlldyxsKX19ZnVuY3Rpb24gVzMoKXtyZXR1cm4gbmV3IFozKGRpKCkpfWZ1bmN0aW9uIE5WKCl7cmV0dXJuIEw0KHVsKCksZGkoKSl9ZnVuY3Rpb24gTDQoYyxsKXtyZXR1cm4gbmV3IEppKEww'@;
put 'KGMsbCkpfWxldCBKaT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMubmF0aXZlRWxlbWVudD1hfXN0YXRpY3t0aGlzLl9fTkdfRUxFTUVOVF9JRF9fPU5WfX1yZXR1cm4gY30pKCk7ZnVuY3Rpb24geWsoYyl7cmV0dXJuIGMgaW5zdGFuY2VvZiBKaT9jLm5hdGl2ZUVsZW1lbnQ6'@;
put 'Y31mdW5jdGlvbiBDQyhjKXtyZXR1cm4gbD0+e3NldFRpbWVvdXQoYyx2b2lkIDAsbCl9fWNvbnN0IEtyPWNsYXNzIFZWIGV4dGVuZHMgV257Y29uc3RydWN0b3IobD0hMSl7c3VwZXIoKSx0aGlzLmRlc3Ryb3lSZWY9dm9pZCAwLHRoaXMuX19pc0FzeW5jPWwsTXYoKSYmKHRoaXMuZGVzdHJv'@;
put 'eVJlZj1maShrNSx7b3B0aW9uYWw6ITB9KT8/dm9pZCAwKX1lbWl0KGwpe2NvbnN0IGE9X2UobnVsbCk7dHJ5e3N1cGVyLm5leHQobCl9ZmluYWxseXtfZShhKX19c3Vic2NyaWJlKGwsYSxkKXtsZXQgaD1sLGY9YXx8KCgpPT5udWxsKSx2PWQ7aWYobCYmIm9iamVjdCI9PXR5cGVvZiBsKXtj'@;
put 'b25zdCBEPWw7aD1ELm5leHQ/LmJpbmQoRCksZj1ELmVycm9yPy5iaW5kKEQpLHY9RC5jb21wbGV0ZT8uYmluZChEKX10aGlzLl9faXNBc3luYyYmKGY9Q0MoZiksaCYmKGg9Q0MoaCkpLHYmJih2PUNDKHYpKSk7Y29uc3QgTT1zdXBlci5zdWJzY3JpYmUoe25leHQ6aCxlcnJvcjpmLGNvbXBs'@;
put 'ZXRlOnZ9KTtyZXR1cm4gbCBpbnN0YW5jZW9mIHF0JiZsLmFkZChNKSxNfX07ZnVuY3Rpb24gQlYoKXtyZXR1cm4gdGhpcy5fcmVzdWx0c1tTeW1ib2wuaXRlcmF0b3JdKCl9Y2xhc3MgZmR7Z2V0IGNoYW5nZXMoKXtyZXR1cm4gdGhpcy5fY2hhbmdlcz8/PW5ldyBLcn1jb25zdHJ1Y3Rvcihs'@;
put 'PSExKXt0aGlzLl9lbWl0RGlzdGluY3RDaGFuZ2VzT25seT1sLHRoaXMuZGlydHk9ITAsdGhpcy5fb25EaXJ0eT12b2lkIDAsdGhpcy5fcmVzdWx0cz1bXSx0aGlzLl9jaGFuZ2VzRGV0ZWN0ZWQ9ITEsdGhpcy5fY2hhbmdlcz12b2lkIDAsdGhpcy5sZW5ndGg9MCx0aGlzLmZpcnN0PXZvaWQg'@;
put 'MCx0aGlzLmxhc3Q9dm9pZCAwO2NvbnN0IGE9ZmQucHJvdG90eXBlO2FbU3ltYm9sLml0ZXJhdG9yXXx8KGFbU3ltYm9sLml0ZXJhdG9yXT1CVil9Z2V0KGwpe3JldHVybiB0aGlzLl9yZXN1bHRzW2xdfW1hcChsKXtyZXR1cm4gdGhpcy5fcmVzdWx0cy5tYXAobCl9ZmlsdGVyKGwpe3JldHVy'@;
put 'biB0aGlzLl9yZXN1bHRzLmZpbHRlcihsKX1maW5kKGwpe3JldHVybiB0aGlzLl9yZXN1bHRzLmZpbmQobCl9cmVkdWNlKGwsYSl7cmV0dXJuIHRoaXMuX3Jlc3VsdHMucmVkdWNlKGwsYSl9Zm9yRWFjaChsKXt0aGlzLl9yZXN1bHRzLmZvckVhY2gobCl9c29tZShsKXtyZXR1cm4gdGhpcy5f'@;
put 'cmVzdWx0cy5zb21lKGwpfXRvQXJyYXkoKXtyZXR1cm4gdGhpcy5fcmVzdWx0cy5zbGljZSgpfXRvU3RyaW5nKCl7cmV0dXJuIHRoaXMuX3Jlc3VsdHMudG9TdHJpbmcoKX1yZXNldChsLGEpe3RoaXMuZGlydHk9ITE7Y29uc3QgZD1mdW5jdGlvbiBuMChjKXtyZXR1cm4gYy5mbGF0KE51bWJl'@;
put 'ci5QT1NJVElWRV9JTkZJTklUWSl9KGwpOyh0aGlzLl9jaGFuZ2VzRGV0ZWN0ZWQ9IWZ1bmN0aW9uIGdmKGMsbCxhKXtpZihjLmxlbmd0aCE9PWwubGVuZ3RoKXJldHVybiExO2ZvcihsZXQgZD0wO2Q8Yy5sZW5ndGg7ZCsrKXtsZXQgaD1jW2RdLGY9bFtkXTtpZihhJiYoaD1hKGgpLGY9YShm'@;
put 'KSksZiE9PWgpcmV0dXJuITF9cmV0dXJuITB9KHRoaXMuX3Jlc3VsdHMsZCxhKSkmJih0aGlzLl9yZXN1bHRzPWQsdGhpcy5sZW5ndGg9ZC5sZW5ndGgsdGhpcy5sYXN0PWRbdGhpcy5sZW5ndGgtMV0sdGhpcy5maXJzdD1kWzBdKX1ub3RpZnlPbkNoYW5nZXMoKXt2b2lkIDAhPT10aGlzLl9j'@;
put 'aGFuZ2VzJiYodGhpcy5fY2hhbmdlc0RldGVjdGVkfHwhdGhpcy5fZW1pdERpc3RpbmN0Q2hhbmdlc09ubHkpJiZ0aGlzLl9jaGFuZ2VzLmVtaXQodGhpcyl9b25EaXJ0eShsKXt0aGlzLl9vbkRpcnR5PWx9c2V0RGlydHkoKXt0aGlzLmRpcnR5PSEwLHRoaXMuX29uRGlydHk/LigpfWRlc3Ry'@;
put 'b3koKXt2b2lkIDAhPT10aGlzLl9jaGFuZ2VzJiYodGhpcy5fY2hhbmdlcy5jb21wbGV0ZSgpLHRoaXMuX2NoYW5nZXMudW5zdWJzY3JpYmUoKSl9fWZ1bmN0aW9uIFp2KGMpe3JldHVybiEoMTI4Jn5jLmZsYWdzKX1jb25zdCBTQz1uZXcgTWFwO2xldCB6Vj0wO2NvbnN0IHhDPSJfX25nQ29u'@;
put 'dGV4dF9fIjtmdW5jdGlvbiBqdShjLGwpe0Z1KGwpPyhjW3hDXT1sW3cwXSxmdW5jdGlvbiBaVihjKXtTQy5zZXQoY1t3MF0sYyl9KGwpKTpjW3hDXT1sfWZ1bmN0aW9uIEVrKGMpe3JldHVybiBBayhjW1NmXSl9ZnVuY3Rpb24gVGsoYyl7cmV0dXJuIEFrKGNbTmNdKX1mdW5jdGlvbiBBayhj'@;
put 'KXtmb3IoO251bGwhPT1jJiYhSHUoYyk7KWM9Y1tOY107cmV0dXJuIGN9bGV0IFRDO2Z1bmN0aW9uIFkzKCl7aWYodm9pZCAwIT09VEMpcmV0dXJuIFRDO2lmKHR5cGVvZiBkb2N1bWVudDwidSIpcmV0dXJuIGRvY3VtZW50O3Rocm93IG5ldyBRbigyMTAsITEpfWNvbnN0ICR2PW5ldyBTdCgi'@;
put 'Iix7cHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTooKT0+c0J9KSxzQj0ibmciLFBrPW5ldyBTdCgiIiksaW89bmV3IFN0KCIiLHtwcm92aWRlZEluOiJwbGF0Zm9ybSIsZmFjdG9yeTooKT0+InVua25vd24ifSksRms9bmV3IFN0KCIiKSxMNT1uZXcgU3QoIiIse3Byb3ZpZGVkSW46InJvb3Qi'@;
put 'LGZhY3Rvcnk6KCk9PlkzKCkuYm9keT8ucXVlcnlTZWxlY3RvcigiW25nQ3NwTm9uY2VdIik/LmdldEF0dHJpYnV0ZSgibmdDc3BOb25jZSIpfHxudWxsfSk7bGV0IE5rPSgpPT5udWxsO2Z1bmN0aW9uIFJDKGMsbCxhPSExKXtyZXR1cm4gTmsoYyxsLGEpfWNvbnN0IGprPW5ldyBTdCgiIix7'@;
put 'cHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTooKT0+ITF9KTtsZXQgUXYsZWI7ZnVuY3Rpb24gRjUoYyl7cmV0dXJuIGZ1bmN0aW9uIEhDKCl7aWYodm9pZCAwPT09UXYmJihRdj1udWxsLFZ0LnRydXN0ZWRUeXBlcykpdHJ5e1F2PVZ0LnRydXN0ZWRUeXBlcy5jcmVhdGVQb2xpY3koImFuZ3Vs'@;
put 'YXIiLHtjcmVhdGVIVE1MOmM9PmMsY3JlYXRlU2NyaXB0OmM9PmMsY3JlYXRlU2NyaXB0VVJMOmM9PmN9KX1jYXRjaHt9cmV0dXJuIFF2fSgpPy5jcmVhdGVIVE1MKGMpfHxjfWZ1bmN0aW9uIE5DKCl7aWYodm9pZCAwPT09ZWImJihlYj1udWxsLFZ0LnRydXN0ZWRUeXBlcykpdHJ5e2ViPVZ0'@;
put 'LnRydXN0ZWRUeXBlcy5jcmVhdGVQb2xpY3koImFuZ3VsYXIjdW5zYWZlLWJ5cGFzcyIse2NyZWF0ZUhUTUw6Yz0+YyxjcmVhdGVTY3JpcHQ6Yz0+YyxjcmVhdGVTY3JpcHRVUkw6Yz0+Y30pfWNhdGNoe31yZXR1cm4gZWJ9ZnVuY3Rpb24gVWsoYyl7cmV0dXJuIE5DKCk/LmNyZWF0ZUhUTUwo'@;
put 'Yyl8fGN9ZnVuY3Rpb24gV2soYyl7cmV0dXJuIE5DKCk/LmNyZWF0ZVNjcmlwdFVSTChjKXx8Y31jbGFzcyBZa3tjb25zdHJ1Y3RvcihsKXt0aGlzLmNoYW5naW5nVGhpc0JyZWFrc0FwcGxpY2F0aW9uU2VjdXJpdHk9bH10b1N0cmluZygpe3JldHVybmBTYWZlVmFsdWUgbXVzdCB1c2UgW3By'@;
put 'b3BlcnR5XT1iaW5kaW5nOiAke3RoaXMuY2hhbmdpbmdUaGlzQnJlYWtzQXBwbGljYXRpb25TZWN1cml0eX0gKHNlZSAke3BhfSlgfX1mdW5jdGlvbiBtMihjKXtyZXR1cm4gYyBpbnN0YW5jZW9mIFlrP2MuY2hhbmdpbmdUaGlzQnJlYWtzQXBwbGljYXRpb25TZWN1cml0eTpjfWZ1bmN0aW9u'@;
put 'IEg0KGMsbCl7Y29uc3QgYT1mdW5jdGlvbiBHayhjKXtyZXR1cm4gYyBpbnN0YW5jZW9mIFlrJiZjLmdldFR5cGVOYW1lKCl8fG51bGx9KGMpO2lmKG51bGwhPWEmJmEhPT1sKXtpZigiUmVzb3VyY2VVUkwiPT09YSYmIlVSTCI9PT1sKXJldHVybiEwO3Rocm93IG5ldyBFcnJvcihgUmVxdWly'@;
put 'ZWQgYSBzYWZlICR7bH0sIGdvdCBhICR7YX0gKHNlZSAke3BhfSlgKX1yZXR1cm4gYT09PWx9Y2xhc3MgJGt7Y29uc3RydWN0b3IobCl7dGhpcy5pbmVydERvY3VtZW50SGVscGVyPWx9Z2V0SW5lcnRCb2R5RWxlbWVudChsKXtsPSI8Ym9keT48cmVtb3ZlPjwvcmVtb3ZlPiIrbDt0cnl7Y29u'@;
put 'c3QgYT0obmV3IHdpbmRvdy5ET01QYXJzZXIpLnBhcnNlRnJvbVN0cmluZyhGNShsKSwidGV4dC9odG1sIikuYm9keTtyZXR1cm4gbnVsbD09PWE/dGhpcy5pbmVydERvY3VtZW50SGVscGVyLmdldEluZXJ0Qm9keUVsZW1lbnQobCk6KGEucmVtb3ZlQ2hpbGQoYS5maXJzdENoaWxkKSxhKX1j'@;
put 'YXRjaHtyZXR1cm4gbnVsbH19fWNsYXNzIFRCe2NvbnN0cnVjdG9yKGwpe3RoaXMuZGVmYXVsdERvYz1sLHRoaXMuaW5lcnREb2N1bWVudD10aGlzLmRlZmF1bHREb2MuaW1wbGVtZW50YXRpb24uY3JlYXRlSFRNTERvY3VtZW50KCJzYW5pdGl6YXRpb24taW5lcnQiKX1nZXRJbmVydEJvZHlF'@;
put 'bGVtZW50KGwpe2NvbnN0IGE9dGhpcy5pbmVydERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRlbXBsYXRlIik7cmV0dXJuIGEuaW5uZXJIVE1MPUY1KGwpLGF9fWNvbnN0IEFCPS9eKD8hamF2YXNjcmlwdDopKD86W2EtejAtOSsuLV0rOnxbXiY6XC8/I10qKD86W1wvPyNdfCQpKS9pO2Z1bmN0'@;
put 'aW9uIEJDKGMpe3JldHVybihjPVN0cmluZyhjKSkubWF0Y2goQUIpP2M6InVuc2FmZToiK2N9ZnVuY3Rpb24gTGYoYyl7Y29uc3QgbD17fTtmb3IoY29uc3QgYSBvZiBjLnNwbGl0KCIsIikpbFthXT0hMDtyZXR1cm4gbH1mdW5jdGlvbiBhOCguLi5jKXtjb25zdCBsPXt9O2Zvcihjb25zdCBh'@;
put 'IG9mIGMpZm9yKGNvbnN0IGQgaW4gYSlhLmhhc093blByb3BlcnR5KGQpJiYobFtkXT0hMCk7cmV0dXJuIGx9Y29uc3QgcWs9TGYoImFyZWEsYnIsY29sLGhyLGltZyx3YnIiKSxYaz1MZigiY29sZ3JvdXAsZGQsZHQsbGkscCx0Ym9keSx0ZCx0Zm9vdCx0aCx0aGVhZCx0ciIpLEprPUxmKCJy'@;
put 'cCxydCIpLGpDPWE4KHFrLGE4KFhrLExmKCJhZGRyZXNzLGFydGljbGUsYXNpZGUsYmxvY2txdW90ZSxjYXB0aW9uLGNlbnRlcixkZWwsZGV0YWlscyxkaWFsb2csZGlyLGRpdixkbCxmaWd1cmUsZmlnY2FwdGlvbixmb290ZXIsaDEsaDIsaDMsaDQsaDUsaDYsaGVhZGVyLGhncm91cCxocixp'@;
put 'bnMsbWFpbixtYXAsbWVudSxuYXYsb2wscHJlLHNlY3Rpb24sc3VtbWFyeSx0YWJsZSx1bCIpKSxhOChKayxMZigiYSxhYmJyLGFjcm9ueW0sYXVkaW8sYixiZGksYmRvLGJpZyxicixjaXRlLGNvZGUsZGVsLGRmbixlbSxmb250LGksaW1nLGlucyxrYmQsbGFiZWwsbWFwLG1hcmsscGljdHVy'@;
put 'ZSxxLHJ1YnkscnAscnQscyxzYW1wLHNtYWxsLHNvdXJjZSxzcGFuLHN0cmlrZSxzdHJvbmcsc3ViLHN1cCx0aW1lLHRyYWNrLHR0LHUsdmFyLHZpZGVvIikpLGE4KEprLFhrKSksekM9TGYoImJhY2tncm91bmQsY2l0ZSxocmVmLGl0ZW10eXBlLGxvbmdkZXNjLHBvc3RlcixzcmMseGxpbms6'@;
put 'aHJlZiIpLFFrPWE4KHpDLExmKCJhYmJyLGFjY2Vzc2tleSxhbGlnbixhbHQsYXV0b3BsYXksYXhpcyxiZ2NvbG9yLGJvcmRlcixjZWxscGFkZGluZyxjZWxsc3BhY2luZyxjbGFzcyxjbGVhcixjb2xvcixjb2xzLGNvbHNwYW4sY29tcGFjdCxjb250cm9scyxjb29yZHMsZGF0ZXRpbWUsZGVm'@;
put 'YXVsdCxkaXIsZG93bmxvYWQsZmFjZSxoZWFkZXJzLGhlaWdodCxoaWRkZW4saHJlZmxhbmcsaHNwYWNlLGlzbWFwLGl0ZW1zY29wZSxpdGVtcHJvcCxraW5kLGxhYmVsLGxhbmcsbGFuZ3VhZ2UsbG9vcCxtZWRpYSxtdXRlZCxub2hyZWYsbm93cmFwLG9wZW4scHJlbG9hZCxyZWwscmV2LHJv'@;
put 'bGUscm93cyxyb3dzcGFuLHJ1bGVzLHNjb3BlLHNjcm9sbGluZyxzaGFwZSxzaXplLHNpemVzLHNwYW4sc3JjbGFuZyxzcmNzZXQsc3RhcnQsc3VtbWFyeSx0YWJpbmRleCx0YXJnZXQsdGl0bGUsdHJhbnNsYXRlLHR5cGUsdXNlbWFwLHZhbGlnbix2YWx1ZSx2c3BhY2Usd2lkdGgiKSxMZigi'@;
put 'YXJpYS1hY3RpdmVkZXNjZW5kYW50LGFyaWEtYXRvbWljLGFyaWEtYXV0b2NvbXBsZXRlLGFyaWEtYnVzeSxhcmlhLWNoZWNrZWQsYXJpYS1jb2xjb3VudCxhcmlhLWNvbGluZGV4LGFyaWEtY29sc3BhbixhcmlhLWNvbnRyb2xzLGFyaWEtY3VycmVudCxhcmlhLWRlc2NyaWJlZGJ5LGFyaWEt'@;
put 'ZGV0YWlscyxhcmlhLWRpc2FibGVkLGFyaWEtZHJvcGVmZmVjdCxhcmlhLWVycm9ybWVzc2FnZSxhcmlhLWV4cGFuZGVkLGFyaWEtZmxvd3RvLGFyaWEtZ3JhYmJlZCxhcmlhLWhhc3BvcHVwLGFyaWEtaGlkZGVuLGFyaWEtaW52YWxpZCxhcmlhLWtleXNob3J0Y3V0cyxhcmlhLWxhYmVsLGFy'@;
put 'aWEtbGFiZWxsZWRieSxhcmlhLWxldmVsLGFyaWEtbGl2ZSxhcmlhLW1vZGFsLGFyaWEtbXVsdGlsaW5lLGFyaWEtbXVsdGlzZWxlY3RhYmxlLGFyaWEtb3JpZW50YXRpb24sYXJpYS1vd25zLGFyaWEtcGxhY2Vob2xkZXIsYXJpYS1wb3NpbnNldCxhcmlhLXByZXNzZWQsYXJpYS1yZWFkb25s'@;
put 'eSxhcmlhLXJlbGV2YW50LGFyaWEtcmVxdWlyZWQsYXJpYS1yb2xlZGVzY3JpcHRpb24sYXJpYS1yb3djb3VudCxhcmlhLXJvd2luZGV4LGFyaWEtcm93c3BhbixhcmlhLXNlbGVjdGVkLGFyaWEtc2V0c2l6ZSxhcmlhLXNvcnQsYXJpYS12YWx1ZW1heCxhcmlhLXZhbHVlbWluLGFyaWEtdmFs'@;
put 'dWVub3csYXJpYS12YWx1ZXRleHQiKSksa0I9TGYoInNjcmlwdCxzdHlsZSx0ZW1wbGF0ZSIpO2NsYXNzIGVEe2NvbnN0cnVjdG9yKCl7dGhpcy5zYW5pdGl6ZWRTb21ldGhpbmc9ITEsdGhpcy5idWY9W119c2FuaXRpemVDaGlsZHJlbihsKXtsZXQgYT1sLmZpcnN0Q2hpbGQsZD0hMCxoPVtd'@;
put 'O2Zvcig7YTspaWYoYS5ub2RlVHlwZT09PU5vZGUuRUxFTUVOVF9OT0RFP2Q9dGhpcy5zdGFydEVsZW1lbnQoYSk6YS5ub2RlVHlwZT09PU5vZGUuVEVYVF9OT0RFP3RoaXMuY2hhcnMoYS5ub2RlVmFsdWUpOnRoaXMuc2FuaXRpemVkU29tZXRoaW5nPSEwLGQmJmEuZmlyc3RDaGlsZCloLnB1'@;
put 'c2goYSksYT1SQihhKTtlbHNlIGZvcig7YTspe2Eubm9kZVR5cGU9PT1Ob2RlLkVMRU1FTlRfTk9ERSYmdGhpcy5lbmRFbGVtZW50KGEpO2xldCBmPUlCKGEpO2lmKGYpe2E9ZjticmVha31hPWgucG9wKCl9cmV0dXJuIHRoaXMuYnVmLmpvaW4oIiIpfXN0YXJ0RWxlbWVudChsKXtjb25zdCBh'@;
put 'PXREKGwpLnRvTG93ZXJDYXNlKCk7aWYoIWpDLmhhc093blByb3BlcnR5KGEpKXJldHVybiB0aGlzLnNhbml0aXplZFNvbWV0aGluZz0hMCwha0IuaGFzT3duUHJvcGVydHkoYSk7dGhpcy5idWYucHVzaCgiPCIpLHRoaXMuYnVmLnB1c2goYSk7Y29uc3QgZD1sLmF0dHJpYnV0ZXM7Zm9yKGxl'@;
put 'dCBoPTA7aDxkLmxlbmd0aDtoKyspe2NvbnN0IGY9ZC5pdGVtKGgpLHY9Zi5uYW1lLE09di50b0xvd2VyQ2FzZSgpO2lmKCFRay5oYXNPd25Qcm9wZXJ0eShNKSl7dGhpcy5zYW5pdGl6ZWRTb21ldGhpbmc9ITA7Y29udGludWV9bGV0IEQ9Zi52YWx1ZTt6Q1tNXSYmKEQ9QkMoRCkpLHRoaXMu'@;
put 'YnVmLnB1c2goIiAiLHYsJz0iJyxyRChEKSwnIicpfXJldHVybiB0aGlzLmJ1Zi5wdXNoKCI+IiksITB9ZW5kRWxlbWVudChsKXtjb25zdCBhPXREKGwpLnRvTG93ZXJDYXNlKCk7akMuaGFzT3duUHJvcGVydHkoYSkmJiFxay5oYXNPd25Qcm9wZXJ0eShhKSYmKHRoaXMuYnVmLnB1c2goIjwv'@;
put 'IiksdGhpcy5idWYucHVzaChhKSx0aGlzLmJ1Zi5wdXNoKCI+IikpfWNoYXJzKGwpe3RoaXMuYnVmLnB1c2gockQobCkpfX1mdW5jdGlvbiBJQihjKXtjb25zdCBsPWMubmV4dFNpYmxpbmc7aWYobCYmYyE9PWwucHJldmlvdXNTaWJsaW5nKXRocm93IG5EKGwpO3JldHVybiBsfWZ1bmN0aW9u'@;
put 'IFJCKGMpe2NvbnN0IGw9Yy5maXJzdENoaWxkO2lmKGwmJmZ1bmN0aW9uIERCKGMsbCl7cmV0dXJuKGMuY29tcGFyZURvY3VtZW50UG9zaXRpb24obCkmTm9kZS5ET0NVTUVOVF9QT1NJVElPTl9DT05UQUlORURfQlkpIT09Tm9kZS5ET0NVTUVOVF9QT1NJVElPTl9DT05UQUlORURfQll9KGMs'@;
put 'bCkpdGhyb3cgbkQobCk7cmV0dXJuIGx9ZnVuY3Rpb24gdEQoYyl7Y29uc3QgbD1jLm5vZGVOYW1lO3JldHVybiJzdHJpbmciPT10eXBlb2YgbD9sOiJGT1JNIn1mdW5jdGlvbiBuRChjKXtyZXR1cm4gbmV3IEVycm9yKGBGYWlsZWQgdG8gc2FuaXRpemUgaHRtbCBiZWNhdXNlIHRoZSBlbGVt'@;
put 'ZW50IGlzIGNsb2JiZXJlZDogJHtjLm91dGVySFRNTH1gKX1jb25zdCBMQj0vW1x1RDgwMC1cdURCRkZdW1x1REMwMC1cdURGRkZdL2csT0I9LyhbXlwjLX4gfCFdKS9nO2Z1bmN0aW9uIHJEKGMpe3JldHVybiBjLnJlcGxhY2UoLyYvZywiJmFtcDsiKS5yZXBsYWNlKExCLGZ1bmN0aW9uKGwp'@;
put 'e3JldHVybiImIyIrKDEwMjQqKGwuY2hhckNvZGVBdCgwKS01NTI5NikrKGwuY2hhckNvZGVBdCgxKS01NjMyMCkrNjU1MzYpKyI7In0pLnJlcGxhY2UoT0IsZnVuY3Rpb24obCl7cmV0dXJuIiYjIitsLmNoYXJDb2RlQXQoMCkrIjsifSkucmVwbGFjZSgvPC9nLCImbHQ7IikucmVwbGFjZSgv'@;
put 'Pi9nLCImZ3Q7Iil9bGV0IHRiO2Z1bmN0aW9uIFVDKGMpe3JldHVybiJjb250ZW50ImluIGMmJmZ1bmN0aW9uIEZCKGMpe3JldHVybiBjLm5vZGVUeXBlPT09Tm9kZS5FTEVNRU5UX05PREUmJiJURU1QTEFURSI9PT1jLm5vZGVOYW1lfShjKT9jLmNvbnRlbnQ6bnVsbH12YXIgTjU9ZnVuY3Rp'@;
put 'b24oYyl7cmV0dXJuIGNbYy5OT05FPTBdPSJOT05FIixjW2MuSFRNTD0xXT0iSFRNTCIsY1tjLlNUWUxFPTJdPSJTVFlMRSIsY1tjLlNDUklQVD0zXT0iU0NSSVBUIixjW2MuVVJMPTRdPSJVUkwiLGNbYy5SRVNPVVJDRV9VUkw9NV09IlJFU09VUkNFX1VSTCIsY30oTjV8fHt9KTtmdW5jdGlv'@;
put 'biBWNChjKXtjb25zdCBsPW84KCk7cmV0dXJuIGw/VWsobC5zYW5pdGl6ZShONS5IVE1MLGMpfHwiIik6SDQoYywiSFRNTCIpP1VrKG0yKGMpKTpmdW5jdGlvbiBQQihjLGwpe2xldCBhPW51bGw7dHJ5e3RiPXRifHxmdW5jdGlvbiBWQyhjKXtjb25zdCBsPW5ldyBUQihjKTtyZXR1cm4gZnVu'@;
put 'Y3Rpb24gS2soKXt0cnl7cmV0dXJuISEobmV3IHdpbmRvdy5ET01QYXJzZXIpLnBhcnNlRnJvbVN0cmluZyhGNSgiIiksInRleHQvaHRtbCIpfWNhdGNoe3JldHVybiExfX0oKT9uZXcgJGsobCk6bH0oYyk7bGV0IGQ9bD9TdHJpbmcobCk6IiI7YT10Yi5nZXRJbmVydEJvZHlFbGVtZW50KGQp'@;
put 'O2xldCBoPTUsZj1kO2Rve2lmKDA9PT1oKXRocm93IG5ldyBFcnJvcigiRmFpbGVkIHRvIHNhbml0aXplIGh0bWwgYmVjYXVzZSB0aGUgaW5wdXQgaXMgdW5zdGFibGUiKTtoLS0sZD1mLGY9YS5pbm5lckhUTUwsYT10Yi5nZXRJbmVydEJvZHlFbGVtZW50KGQpfXdoaWxlKGQhPT1mKTtyZXR1'@;
put 'cm4gRjUoKG5ldyBlRCkuc2FuaXRpemVDaGlsZHJlbihVQyhhKXx8YSkpfWZpbmFsbHl7aWYoYSl7Y29uc3QgZD1VQyhhKXx8YTtmb3IoO2QuZmlyc3RDaGlsZDspZC5yZW1vdmVDaGlsZChkLmZpcnN0Q2hpbGQpfX19KFkzKCksQ2EoYykpfWZ1bmN0aW9uIFpDKGMpe2NvbnN0IGw9bzgoKTty'@;
put 'ZXR1cm4gbD9sLnNhbml0aXplKE41LlVSTCxjKXx8IiI6SDQoYywiVVJMIik/bTIoYyk6QkMoQ2EoYykpfWZ1bmN0aW9uIGlEKGMpe2NvbnN0IGw9bzgoKTtpZihsKXJldHVybiBXayhsLnNhbml0aXplKE41LlJFU09VUkNFX1VSTCxjKXx8IiIpO2lmKEg0KGMsIlJlc291cmNlVVJMIikpcmV0'@;
put 'dXJuIFdrKG0yKGMpKTt0aHJvdyBuZXcgUW4oOTA0LCExKX1mdW5jdGlvbiBvOCgpe2NvbnN0IGM9ZGkoKTtyZXR1cm4gYyYmY1tMMV0uc2FuaXRpemVyfWNvbnN0IHpCPS9ePnxeLT58PCEtLXwtLT58LS0hPnw8IS0kL2csVUI9Lyg8fD4pL2csWkI9Ilx1MjAwYiQxXHUyMDBiIjtmdW5jdGlv'@;
put 'biBxQyhjKXtyZXR1cm4gYy5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3fWZ1bmN0aW9uICQzKGMpe3JldHVybiBjLm93bmVyRG9jdW1lbnR9ZnVuY3Rpb24gRjEoYyl7cmV0dXJuIGMgaW5zdGFuY2VvZiBGdW5jdGlvbj9jKCk6Y312YXIgSzM9ZnVuY3Rpb24oYyl7cmV0dXJuIGNbYy5JbXBv'@;
put 'cnRhbnQ9MV09IkltcG9ydGFudCIsY1tjLkRhc2hDYXNlPTJdPSJEYXNoQ2FzZSIsY30oSzN8fHt9KTtsZXQgWEM7ZnVuY3Rpb24gSkMoYyxsKXtyZXR1cm4gWEMoYyxsKX1mdW5jdGlvbiBCNShjLGwsYSxkLGgpe2lmKG51bGwhPWQpe2xldCBmLHY9ITE7SHUoZCk/Zj1kOkZ1KGQpJiYodj0h'@;
put 'MCxkPWRbVWxdKTtjb25zdCBNPUNsKGQpOzA9PT1jJiZudWxsIT09YT9udWxsPT1oP29iKGwsYSxNKTpaNChsLGEsTSxofHxudWxsLCEwKToxPT09YyYmbnVsbCE9PWE/WjQobCxhLE0saHx8bnVsbCwhMCk6Mj09PWM/ZnVuY3Rpb24gZDgoYyxsLGEpe2NvbnN0IGQ9cTMoYyxsKTtkJiZmdW5j'@;
put 'dGlvbiBsOChjLGwsYSxkKXtjLnJlbW92ZUNoaWxkKGwsYSxkKX0oYyxkLGwsYSl9KGwsTSx2KTozPT09YyYmbC5kZXN0cm95Tm9kZShNKSxudWxsIT1mJiZmdW5jdGlvbiBuaihjLGwsYSxkLGgpe2NvbnN0IGY9YVt2dV07ZiE9PUNsKGEpJiZCNShsLGMsZCxmLGgpO2ZvcihsZXQgTT1nYztN'@;
put 'PGEubGVuZ3RoO00rKyl7Y29uc3QgRD1hW01dO3NiKERbS2ldLEQsYyxsLGQsZil9fShsLGMsZixhLGgpfX1mdW5jdGlvbiBlUyhjLGwpe3JldHVybiBjLmNyZWF0ZUNvbW1lbnQoZnVuY3Rpb24gVjUoYyl7cmV0dXJuIGMucmVwbGFjZSh6QixsPT5sLnJlcGxhY2UoVUIsWkIpKX0obCkpfWZ1'@;
put 'bmN0aW9uIHo0KGMsbCxhKXtyZXR1cm4gYy5jcmVhdGVFbGVtZW50KGwsYSl9ZnVuY3Rpb24gZkQoYyxsKXtsW0wxXS5jaGFuZ2VEZXRlY3Rpb25TY2hlZHVsZXI/Lm5vdGlmeSgxKSxzYihjLGwsbFtib10sMixudWxsLG51bGwpfWZ1bmN0aW9uIG5TKGMsbCl7Y29uc3QgYT1jW1YzXSxkPWEu'@;
put 'aW5kZXhPZihsKTthLnNwbGljZShkLDEpfWZ1bmN0aW9uIHM4KGMsbCl7aWYoYy5sZW5ndGg8PWdjKXJldHVybjtjb25zdCBhPWdjK2wsZD1jW2FdO2lmKGQpe2NvbnN0IGg9ZFtTNF07bnVsbCE9PWgmJmghPT1jJiZuUyhoLGQpLGw+MCYmKGNbYS0xXVtOY109ZFtOY10pO2NvbnN0IGY9T3Uo'@;
put 'YyxnYytsKTshZnVuY3Rpb24gaEQoYyxsKXtmRChjLGwpLGxbVWxdPW51bGwsbFtyY109bnVsbH0oZFtLaV0sZCk7Y29uc3Qgdj1mW3VkXTtudWxsIT09diYmdi5kZXRhY2hWaWV3KGZbS2ldKSxkW2ZjXT1udWxsLGRbTmNdPW51bGwsZFtVYV0mPS0xMjl9cmV0dXJuIGR9ZnVuY3Rpb24gVTQo'@;
put 'YyxsKXtpZighKDI1NiZsW1VhXSkpe2NvbnN0IGE9bFtib107YS5kZXN0cm95Tm9kZSYmc2IoYyxsLGEsMyxudWxsLG51bGwpLGZ1bmN0aW9uIEpCKGMpe2xldCBsPWNbU2ZdO2lmKCFsKXJldHVybiByUyhjW0tpXSxjKTtmb3IoO2w7KXtsZXQgYT1udWxsO2lmKEZ1KGwpKWE9bFtTZl07ZWxz'@;
put 'ZXtjb25zdCBkPWxbZ2NdO2QmJihhPWQpfWlmKCFhKXtmb3IoO2wmJiFsW05jXSYmbCE9PWM7KUZ1KGwpJiZyUyhsW0tpXSxsKSxsPWxbZmNdO251bGw9PT1sJiYobD1jKSxGdShsKSYmclMobFtLaV0sbCksYT1sJiZsW05jXX1sPWF9fShsKX19ZnVuY3Rpb24gclMoYyxsKXtpZigyNTYmbFtV'@;
put 'YV0pcmV0dXJuO2NvbnN0IGE9X2UobnVsbCk7dHJ5e2xbVWFdJj0tMTI5LGxbVWFdfD0yNTYsbFt4Zl0mJmZ1bmN0aW9uIEEoYyl7aWYod2UoYyksc2UoYykpZm9yKGxldCBsPTA7bDxjLnByb2R1Y2VyTm9kZS5sZW5ndGg7bCsrKXRlKGMucHJvZHVjZXJOb2RlW2xdLGMucHJvZHVjZXJJbmRl'@;
put 'eE9mVGhpc1tsXSk7Yy5wcm9kdWNlck5vZGUubGVuZ3RoPWMucHJvZHVjZXJMYXN0UmVhZFZlcnNpb24ubGVuZ3RoPWMucHJvZHVjZXJJbmRleE9mVGhpcy5sZW5ndGg9MCxjLmxpdmVDb25zdW1lck5vZGUmJihjLmxpdmVDb25zdW1lck5vZGUubGVuZ3RoPWMubGl2ZUNvbnN1bWVySW5kZXhP'@;
put 'ZlRoaXMubGVuZ3RoPTApfShsW3hmXSksZnVuY3Rpb24gZWooYyxsKXtsZXQgYTtpZihudWxsIT1jJiZudWxsIT0oYT1jLmRlc3Ryb3lIb29rcykpZm9yKGxldCBkPTA7ZDxhLmxlbmd0aDtkKz0yKXtjb25zdCBoPWxbYVtkXV07aWYoIShoIGluc3RhbmNlb2YgUDEpKXtjb25zdCBmPWFbZCsx'@;
put 'XTtpZihBcnJheS5pc0FycmF5KGYpKWZvcihsZXQgdj0wO3Y8Zi5sZW5ndGg7dis9Mil7Y29uc3QgTT1oW2Zbdl1dLEQ9Zlt2KzFdO3UyKDQsTSxEKTt0cnl7RC5jYWxsKE0pfWZpbmFsbHl7dTIoNSxNLEQpfX1lbHNle3UyKDQsaCxmKTt0cnl7Zi5jYWxsKGgpfWZpbmFsbHl7dTIoNSxoLGYp'@;
put 'fX19fX0oYyxsKSxmdW5jdGlvbiBwRChjLGwpe2NvbnN0IGE9Yy5jbGVhbnVwLGQ9bFtYMF07aWYobnVsbCE9PWEpZm9yKGxldCBmPTA7ZjxhLmxlbmd0aC0xO2YrPTIpaWYoInN0cmluZyI9PXR5cGVvZiBhW2ZdKXtjb25zdCB2PWFbZiszXTt2Pj0wP2Rbdl0oKTpkWy12XS51bnN1YnNjcmli'@;
put 'ZSgpLGYrPTJ9ZWxzZSBhW2ZdLmNhbGwoZFthW2YrMV1dKTtudWxsIT09ZCYmKGxbWDBdPW51bGwpO2NvbnN0IGg9bFtvMl07aWYobnVsbCE9PWgpe2xbbzJdPW51bGw7Zm9yKGxldCBmPTA7ZjxoLmxlbmd0aDtmKyspKDAsaFtmXSkoKX19KGMsbCksMT09PWxbS2ldLnR5cGUmJmxbYm9dLmRl'@;
put 'c3Ryb3koKTtjb25zdCBkPWxbUzRdO2lmKG51bGwhPT1kJiZIdShsW2ZjXSkpe2QhPT1sW2ZjXSYmblMoZCxsKTtjb25zdCBoPWxbdWRdO251bGwhPT1oJiZoLmRldGFjaFZpZXcoYyl9IWZ1bmN0aW9uIFdWKGMpe1NDLmRlbGV0ZShjW3cwXSl9KGwpfWZpbmFsbHl7X2UoYSl9fWZ1bmN0aW9u'@;
put 'IGFiKGMsbCxhKXtyZXR1cm4gZnVuY3Rpb24gaVMoYyxsLGEpe2xldCBkPWw7Zm9yKDtudWxsIT09ZCYmNDAmZC50eXBlOylkPShsPWQpLnBhcmVudDtpZihudWxsPT09ZClyZXR1cm4gYVtVbF07e2NvbnN0e2NvbXBvbmVudE9mZnNldDpofT1kO2lmKGg+LTEpe2NvbnN0e2VuY2Fwc3VsYXRp'@;
put 'b246Zn09Yy5kYXRhW2QuZGlyZWN0aXZlU3RhcnQraF07aWYoZj09PUpzLk5vbmV8fGY9PT1Kcy5FbXVsYXRlZClyZXR1cm4gbnVsbH1yZXR1cm4gTDAoZCxhKX19KGMsbC5wYXJlbnQsYSl9ZnVuY3Rpb24gWjQoYyxsLGEsZCxoKXtjLmluc2VydEJlZm9yZShsLGEsZCxoKX1mdW5jdGlvbiBv'@;
put 'YihjLGwsYSl7Yy5hcHBlbmRDaGlsZChsLGEpfWZ1bmN0aW9uIGdEKGMsbCxhLGQsaCl7bnVsbCE9PWQ/WjQoYyxsLGEsZCxoKTpvYihjLGwsYSl9ZnVuY3Rpb24gcTMoYyxsKXtyZXR1cm4gYy5wYXJlbnROb2RlKGwpfWZ1bmN0aW9uIHU4KGMsbCxhKXtyZXR1cm4gWDMoYyxsLGEpfWxldCBz'@;
put 'UyxYMz1mdW5jdGlvbiBvUyhjLGwsYSl7cmV0dXJuIDQwJmMudHlwZT9MMChjLGEpOm51bGx9O2Z1bmN0aW9uIGwwKGMsbCxhLGQpe2NvbnN0IGg9YWIoYyxkLGwpLGY9bFtib10sTT11OChkLnBhcmVudHx8bFtyY10sZCxsKTtpZihudWxsIT1oKWlmKEFycmF5LmlzQXJyYXkoYSkpZm9yKGxl'@;
put 'dCBEPTA7RDxhLmxlbmd0aDtEKyspZ0QoZixoLGFbRF0sTSwhMSk7ZWxzZSBnRChmLGgsYSxNLCExKTt2b2lkIDAhPT1zUyYmc1MoZixkLGwsYSxoKX1mdW5jdGlvbiBKMyhjLGwpe2lmKG51bGwhPT1sKXtjb25zdCBhPWwudHlwZTtpZigzJmEpcmV0dXJuIEwwKGwsYyk7aWYoNCZhKXJldHVy'@;
put 'biBjUygtMSxjW2wuaW5kZXhdKTtpZig4JmEpe2NvbnN0IGQ9bC5jaGlsZDtpZihudWxsIT09ZClyZXR1cm4gSjMoYyxkKTt7Y29uc3QgaD1jW2wuaW5kZXhdO3JldHVybiBIdShoKT9jUygtMSxoKTpDbChoKX19aWYoMzImYSlyZXR1cm4gSkMobCxjKSgpfHxDbChjW2wuaW5kZXhdKTt7Y29u'@;
put 'c3QgZD1tRChjLGwpO3JldHVybiBudWxsIT09ZD9BcnJheS5pc0FycmF5KGQpP2RbMF06SjMoVDQoY1tabF0pLGQpOkozKGMsbC5uZXh0KX19cmV0dXJuIG51bGx9ZnVuY3Rpb24gbUQoYyxsKXtyZXR1cm4gbnVsbCE9PWw/Y1tabF1bcmNdLnByb2plY3Rpb25bbC5wcm9qZWN0aW9uXTpudWxs'@;
put 'fWZ1bmN0aW9uIGNTKGMsbCl7Y29uc3QgYT1nYytjKzE7aWYoYTxsLmxlbmd0aCl7Y29uc3QgZD1sW2FdLGg9ZFtLaV0uZmlyc3RDaGlsZDtpZihudWxsIT09aClyZXR1cm4gSjMoZCxoKX1yZXR1cm4gbFt2dV19ZnVuY3Rpb24gdVMoYyxsLGEsZCxoLGYsdil7Zm9yKDtudWxsIT1hOyl7Y29u'@;
put 'c3QgTT1kW2EuaW5kZXhdLEQ9YS50eXBlO2lmKHYmJjA9PT1sJiYoTSYmanUoQ2woTSksZCksYS5mbGFnc3w9MiksMzImfmEuZmxhZ3MpaWYoOCZEKXVTKGMsbCxhLmNoaWxkLGQsaCxmLCExKSxCNShsLGMsaCxNLGYpO2Vsc2UgaWYoMzImRCl7Y29uc3QgWj1KQyhhLGQpO2xldCByZTtmb3Io'@;
put 'O3JlPVooKTspQjUobCxjLGgscmUsZik7QjUobCxjLGgsTSxmKX1lbHNlIDE2JkQ/YkQoYyxsLGQsYSxoLGYpOkI1KGwsYyxoLE0sZik7YT12P2EucHJvamVjdGlvbk5leHQ6YS5uZXh0fX1mdW5jdGlvbiBzYihjLGwsYSxkLGgsZil7dVMoYSxkLGMuZmlyc3RDaGlsZCxsLGgsZiwhMSl9ZnVu'@;
put 'Y3Rpb24gYkQoYyxsLGEsZCxoLGYpe2NvbnN0IHY9YVtabF0sRD12W3JjXS5wcm9qZWN0aW9uW2QucHJvamVjdGlvbl07aWYoQXJyYXkuaXNBcnJheShEKSlmb3IobGV0IFo9MDtaPEQubGVuZ3RoO1orKylCNShsLGMsaCxEW1pdLGYpO2Vsc2V7bGV0IFo9RDtjb25zdCByZT12W2ZjXTtadihk'@;
put 'KSYmKFouZmxhZ3N8PTEyOCksdVMoYyxsLFoscmUsaCxmLCEwKX19ZnVuY3Rpb24gd0QoYyxsLGEpeyIiPT09YT9jLnJlbW92ZUF0dHJpYnV0ZShsLCJjbGFzcyIpOmMuc2V0QXR0cmlidXRlKGwsImNsYXNzIixhKX1mdW5jdGlvbiBDRChjLGwsYSl7Y29uc3R7bWVyZ2VkQXR0cnM6ZCxjbGFz'@;
put 'c2VzOmgsc3R5bGVzOmZ9PWE7bnVsbCE9PWQmJm00KGMsbCxkKSxudWxsIT09aCYmd0QoYyxsLGgpLG51bGwhPT1mJiZmdW5jdGlvbiBfRChjLGwsYSl7Yy5zZXRBdHRyaWJ1dGUobCwic3R5bGUiLGEpfShjLGwsZil9Y29uc3QgUm89e307ZnVuY3Rpb24gZmUoYz0xKXtkUyhscygpLGRpKCks'@;
put 'VnUoKStjLCExKX1mdW5jdGlvbiBkUyhjLGwsYSxkKXtpZighZClpZigzJn5sW1VhXSl7Y29uc3QgZj1jLnByZU9yZGVySG9va3M7bnVsbCE9PWYmJk92KGwsZiwwLGEpfWVsc2V7Y29uc3QgZj1jLnByZU9yZGVyQ2hlY2tIb29rcztudWxsIT09ZiYmTHYobCxmLGEpfUE0KGEpfWZ1bmN0aW9u'@;
put 'IEdlKGMsbD1yYS5EZWZhdWx0KXtjb25zdCBhPWRpKCk7cmV0dXJuIG51bGw9PT1hP3hyKGMsbCk6aGsodWwoKSxhLFlpKGMpLGwpfWZ1bmN0aW9uIE1EKGMsbCxhLGQsaCxmKXtjb25zdCB2PV9lKG51bGwpO3RyeXtsZXQgTT1udWxsO2gmTm4uU2lnbmFsQmFzZWQmJihNPWxbZF1bbWVdKSxu'@;
put 'dWxsIT09TSYmdm9pZCAwIT09TS50cmFuc2Zvcm1GbiYmKGY9TS50cmFuc2Zvcm1GbihmKSksaCZObi5IYXNEZWNvcmF0b3JJbnB1dFRyYW5zZm9ybSYmKGY9Yy5pbnB1dFRyYW5zZm9ybXNbZF0uY2FsbChsLGYpKSxudWxsIT09Yy5zZXRJbnB1dD9jLnNldElucHV0KGwsTSxmLGEsZCk6WUEo'@;
put 'bCxNLGQsZil9ZmluYWxseXtfZSh2KX19ZnVuY3Rpb24gbGIoYyxsLGEsZCxoLGYsdixNLEQsWixyZSl7Y29uc3QgY2U9bC5ibHVlcHJpbnQuc2xpY2UoKTtyZXR1cm4gY2VbVWxdPWgsY2VbVWFdPTIwNHxkLChudWxsIT09Wnx8YyYmMjA0OCZjW1VhXSkmJihjZVtVYV18PTIwNDgpLGVDKGNl'@;
put 'KSxjZVtmY109Y2VbbzBdPWMsY2VbY2xdPWEsY2VbTDFdPXZ8fGMmJmNbTDFdLGNlW2JvXT1NfHxjJiZjW2JvXSxjZVtwY109RHx8YyYmY1twY118fG51bGwsY2VbcmNdPWYsY2VbdzBdPWZ1bmN0aW9uIFVWKCl7cmV0dXJuIHpWKyt9KCksY2VbbnVdPXJlLGNlW2EyXT1aLGNlW1psXT0yPT1s'@;
put 'LnR5cGU/Y1tabF06Y2UsY2V9ZnVuY3Rpb24gajUoYyxsLGEsZCxoKXtsZXQgZj1jLmRhdGFbbF07aWYobnVsbD09PWYpZj1mdW5jdGlvbiBoUyhjLGwsYSxkLGgpe2NvbnN0IGY9ckMoKSx2PWlDKCksRD1jLmRhdGFbbF09ZnVuY3Rpb24gREQoYyxsLGEsZCxoLGYpe2xldCB2PWw/bC5pbmpl'@;
put 'Y3RvckluZGV4Oi0xLE09MDtyZXR1cm4gXzUoKSYmKE18PTEyOCkse3R5cGU6YSxpbmRleDpkLGluc2VydEJlZm9yZUluZGV4Om51bGwsaW5qZWN0b3JJbmRleDp2LGRpcmVjdGl2ZVN0YXJ0Oi0xLGRpcmVjdGl2ZUVuZDotMSxkaXJlY3RpdmVTdHlsaW5nTGFzdDotMSxjb21wb25lbnRPZmZz'@;
put 'ZXQ6LTEscHJvcGVydHlCaW5kaW5nczpudWxsLGZsYWdzOk0scHJvdmlkZXJJbmRleGVzOjAsdmFsdWU6aCxhdHRyczpmLG1lcmdlZEF0dHJzOm51bGwsbG9jYWxOYW1lczpudWxsLGluaXRpYWxJbnB1dHM6dm9pZCAwLGlucHV0czpudWxsLG91dHB1dHM6bnVsbCx0VmlldzpudWxsLG5leHQ6'@;
put 'bnVsbCxwcmV2Om51bGwscHJvamVjdGlvbk5leHQ6bnVsbCxjaGlsZDpudWxsLHBhcmVudDpsLHByb2plY3Rpb246bnVsbCxzdHlsZXM6bnVsbCxzdHlsZXNXaXRob3V0SG9zdDpudWxsLHJlc2lkdWFsU3R5bGVzOnZvaWQgMCxjbGFzc2VzOm51bGwsY2xhc3Nlc1dpdGhvdXRIb3N0Om51bGws'@;
put 'cmVzaWR1YWxDbGFzc2VzOnZvaWQgMCxjbGFzc0JpbmRpbmdzOjAsc3R5bGVCaW5kaW5nczowfX0oMCx2P2Y6ZiYmZi5wYXJlbnQsYSxsLGQsaCk7cmV0dXJuIG51bGw9PT1jLmZpcnN0Q2hpbGQmJihjLmZpcnN0Q2hpbGQ9RCksbnVsbCE9PWYmJih2P251bGw9PWYuY2hpbGQmJm51bGwhPT1E'@;
put 'LnBhcmVudCYmKGYuY2hpbGQ9RCk6bnVsbD09PWYubmV4dCYmKGYubmV4dD1ELEQucHJldj1mKSksRH0oYyxsLGEsZCxoKSxmdW5jdGlvbiBiVigpe3JldHVybiBDby5sRnJhbWUuaW5JMThufSgpJiYoZi5mbGFnc3w9MzIpO2Vsc2UgaWYoNjQmZi50eXBlKXtmLnR5cGU9YSxmLnZhbHVlPWQs'@;
put 'Zi5hdHRycz1oO2NvbnN0IHY9ZnVuY3Rpb24gJDYoKXtjb25zdCBjPUNvLmxGcmFtZSxsPWMuY3VycmVudFROb2RlO3JldHVybiBjLmlzUGFyZW50P2w6bC5wYXJlbnR9KCk7Zi5pbmplY3RvckluZGV4PW51bGw9PT12Py0xOnYuaW5qZWN0b3JJbmRleH1yZXR1cm4gaDIoZiwhMCksZn1mdW5j'@;
put 'dGlvbiBoOChjLGwsYSxkKXtpZigwPT09YSlyZXR1cm4tMTtjb25zdCBoPWwubGVuZ3RoO2ZvcihsZXQgZj0wO2Y8YTtmKyspbC5wdXNoKGQpLGMuYmx1ZXByaW50LnB1c2goZCksYy5kYXRhLnB1c2gobnVsbCk7cmV0dXJuIGh9ZnVuY3Rpb24geEQoYyxsLGEsZCxoKXtjb25zdCBmPVZ1KCks'@;
put 'dj0yJmQ7dHJ5e0E0KC0xKSx2JiZsLmxlbmd0aD53byYmZFMoYyxsLHdvLCExKSx1Mih2PzI6MCxoKSxhKGQsaCl9ZmluYWxseXtBNChmKSx1Mih2PzM6MSxoKX19ZnVuY3Rpb24gZlMoYyxsLGEpe2lmKHJ1KGwpKXtjb25zdCBkPV9lKG51bGwpO3RyeXtjb25zdCBmPWwuZGlyZWN0aXZlRW5k'@;
put 'O2ZvcihsZXQgdj1sLmRpcmVjdGl2ZVN0YXJ0O3Y8Zjt2Kyspe2NvbnN0IE09Yy5kYXRhW3ZdO00uY29udGVudFF1ZXJpZXMmJk0uY29udGVudFF1ZXJpZXMoMSxhW3ZdLHYpfX1maW5hbGx5e19lKGQpfX19ZnVuY3Rpb24gcFMoYyxsLGEpe3RrKCkmJihmdW5jdGlvbiBoaihjLGwsYSxkKXtj'@;
put 'b25zdCBoPWEuZGlyZWN0aXZlU3RhcnQsZj1hLmRpcmVjdGl2ZUVuZDtFZihhKSYmZnVuY3Rpb24gYmooYyxsLGEpe2NvbnN0IGQ9TDAobCxjKSxoPWNiKGEpO2xldCB2PTE2O2Euc2lnbmFscz92PTQwOTY6YS5vblB1c2gmJih2PTY0KTtjb25zdCBNPWY4KGMsbGIoYyxoLG51bGwsdixkLGws'@;
put 'bnVsbCxjW0wxXS5yZW5kZXJlckZhY3RvcnkuY3JlYXRlUmVuZGVyZXIoZCxhKSxudWxsLG51bGwsbnVsbCkpO2NbbC5pbmRleF09TX0obCxhLGMuZGF0YVtoK2EuY29tcG9uZW50T2Zmc2V0XSksYy5maXJzdENyZWF0ZVBhc3N8fE52KGEsbCksanUoZCxsKTtjb25zdCB2PWEuaW5pdGlhbElu'@;
put 'cHV0cztmb3IobGV0IE09aDtNPGY7TSsrKXtjb25zdCBEPWMuZGF0YVtNXSxaPUQ0KGwsYyxNLGEpO2p1KFosbCksbnVsbCE9PXYmJnViKDAsTS1oLFosRCwwLHYpLFZjKEQpJiYoTzEoYS5pbmRleCxsKVtjbF09RDQobCxjLE0sYSkpfX0oYyxsLGEsTDAoYSxsKSksISg2NCZ+YS5mbGFncykm'@;
put 'Jk9EKGMsbCxhKSl9ZnVuY3Rpb24gZ1MoYyxsLGE9TDApe2NvbnN0IGQ9bC5sb2NhbE5hbWVzO2lmKG51bGwhPT1kKXtsZXQgaD1sLmluZGV4KzE7Zm9yKGxldCBmPTA7ZjxkLmxlbmd0aDtmKz0yKXtjb25zdCB2PWRbZisxXSxNPS0xPT09dj9hKGwsYyk6Y1t2XTtjW2grK109TX19fWZ1bmN0'@;
put 'aW9uIGNiKGMpe2NvbnN0IGw9Yy50VmlldztyZXR1cm4gbnVsbD09PWx8fGwuaW5jb21wbGV0ZUZpcnN0UGFzcz9jLnRWaWV3PW1TKDEsbnVsbCxjLnRlbXBsYXRlLGMuZGVjbHMsYy52YXJzLGMuZGlyZWN0aXZlRGVmcyxjLnBpcGVEZWZzLGMudmlld1F1ZXJ5LGMuc2NoZW1hcyxjLmNvbnN0'@;
put 'cyxjLmlkKTpsfWZ1bmN0aW9uIG1TKGMsbCxhLGQsaCxmLHYsTSxELFoscmUpe2NvbnN0IGNlPXdvK2QsYmU9Y2UraCxFZT1mdW5jdGlvbiBpaihjLGwpe2NvbnN0IGE9W107Zm9yKGxldCBkPTA7ZDxsO2QrKylhLnB1c2goZDxjP251bGw6Um8pO3JldHVybiBhfShjZSxiZSksQmU9ImZ1bmN0'@;
put 'aW9uIj09dHlwZW9mIFo/WigpOlo7cmV0dXJuIEVlW0tpXT17dHlwZTpjLGJsdWVwcmludDpFZSx0ZW1wbGF0ZTphLHF1ZXJpZXM6bnVsbCx2aWV3UXVlcnk6TSxkZWNsVE5vZGU6bCxkYXRhOkVlLnNsaWNlKCkuZmlsbChudWxsLGNlKSxiaW5kaW5nU3RhcnRJbmRleDpjZSxleHBhbmRvU3Rh'@;
put 'cnRJbmRleDpiZSxob3N0QmluZGluZ09wQ29kZXM6bnVsbCxmaXJzdENyZWF0ZVBhc3M6ITAsZmlyc3RVcGRhdGVQYXNzOiEwLHN0YXRpY1ZpZXdRdWVyaWVzOiExLHN0YXRpY0NvbnRlbnRRdWVyaWVzOiExLHByZU9yZGVySG9va3M6bnVsbCxwcmVPcmRlckNoZWNrSG9va3M6bnVsbCxjb250'@;
put 'ZW50SG9va3M6bnVsbCxjb250ZW50Q2hlY2tIb29rczpudWxsLHZpZXdIb29rczpudWxsLHZpZXdDaGVja0hvb2tzOm51bGwsZGVzdHJveUhvb2tzOm51bGwsY2xlYW51cDpudWxsLGNvbnRlbnRRdWVyaWVzOm51bGwsY29tcG9uZW50czpudWxsLGRpcmVjdGl2ZVJlZ2lzdHJ5OiJmdW5jdGlv'@;
put 'biI9PXR5cGVvZiBmP2YoKTpmLHBpcGVSZWdpc3RyeToiZnVuY3Rpb24iPT10eXBlb2Ygdj92KCk6dixmaXJzdENoaWxkOm51bGwsc2NoZW1hczpELGNvbnN0czpCZSxpbmNvbXBsZXRlRmlyc3RQYXNzOiExLHNzcklkOnJlfX1sZXQgRUQ9KCk9Pm51bGw7ZnVuY3Rpb24gSUQoYyxsLGEsZCxo'@;
put 'KXtmb3IobGV0IGYgaW4gbCl7aWYoIWwuaGFzT3duUHJvcGVydHkoZikpY29udGludWU7Y29uc3Qgdj1sW2ZdO2lmKHZvaWQgMD09PXYpY29udGludWU7ZD8/PXt9O2xldCBNLEQ9Tm4uTm9uZTtBcnJheS5pc0FycmF5KHYpPyhNPXZbMF0sRD12WzFdKTpNPXY7bGV0IFo9ZjtpZihudWxsIT09'@;
put 'aCl7aWYoIWguaGFzT3duUHJvcGVydHkoZikpY29udGludWU7Wj1oW2ZdfTA9PT1jP1JEKGQsYSxaLE0sRCk6UkQoZCxhLFosTSl9cmV0dXJuIGR9ZnVuY3Rpb24gUkQoYyxsLGEsZCxoKXtsZXQgZjtjLmhhc093blByb3BlcnR5KGEpPyhmPWNbYV0pLnB1c2gobCxkKTpmPWNbYV09W2wsZF0s'@;
put 'dm9pZCAwIT09aCYmZi5wdXNoKGgpfWZ1bmN0aW9uIEYwKGMsbCxhLGQsaCxmLHYsTSl7Y29uc3QgRD1MMChsLGEpO2xldCByZSxaPWwuaW5wdXRzOyFNJiZudWxsIT1aJiYocmU9WltkXSk/KENTKGMsYSxyZSxkLGgpLEVmKGwpJiZmdW5jdGlvbiBjaihjLGwpe2NvbnN0IGE9TzEobCxjKTsx'@;
put 'NiZhW1VhXXx8KGFbVWFdfD02NCl9KGEsbC5pbmRleCkpOjMmbC50eXBlJiYoZD1mdW5jdGlvbiBsaihjKXtyZXR1cm4iY2xhc3MiPT09Yz8iY2xhc3NOYW1lIjoiZm9yIj09PWM/Imh0bWxGb3IiOiJmb3JtYWN0aW9uIj09PWM/ImZvcm1BY3Rpb24iOiJpbm5lckh0bWwiPT09Yz8iaW5uZXJI'@;
put 'VE1MIjoicmVhZG9ubHkiPT09Yz8icmVhZE9ubHkiOiJ0YWJpbmRleCI9PT1jPyJ0YWJJbmRleCI6Y30oZCksaD1udWxsIT12P3YoaCxsLnZhbHVlfHwiIixkKTpoLGYuc2V0UHJvcGVydHkoRCxkLGgpKX1mdW5jdGlvbiB2UyhjLGwsYSxkKXtpZih0aygpKXtjb25zdCBoPW51bGw9PT1kP251'@;
put 'bGw6eyIiOi0xfSxmPWZ1bmN0aW9uIGZqKGMsbCl7Y29uc3QgYT1jLmRpcmVjdGl2ZVJlZ2lzdHJ5O2xldCBkPW51bGwsaD1udWxsO2lmKGEpZm9yKGxldCBmPTA7ZjxhLmxlbmd0aDtmKyspe2NvbnN0IHY9YVtmXTtpZihiNChsLHYuc2VsZWN0b3JzLCExKSlpZihkfHwoZD1bXSksVmModikp'@;
put 'aWYobnVsbCE9PXYuZmluZEhvc3REaXJlY3RpdmVEZWZzKXtjb25zdCBNPVtdO2g9aHx8bmV3IE1hcCx2LmZpbmRIb3N0RGlyZWN0aXZlRGVmcyh2LE0saCksZC51bnNoaWZ0KC4uLk0sdikseVMoYyxsLE0ubGVuZ3RoKX1lbHNlIGQudW5zaGlmdCh2KSx5UyhjLGwsMCk7ZWxzZSBoPWh8fG5l'@;
put 'dyBNYXAsdi5maW5kSG9zdERpcmVjdGl2ZURlZnM/Lih2LGQsaCksZC5wdXNoKHYpfXJldHVybiBudWxsPT09ZD9udWxsOltkLGhdfShjLGEpO2xldCB2LE07bnVsbD09PWY/dj1NPW51bGw6W3YsTV09ZixudWxsIT09diYmYlMoYyxsLGEsdixoLE0pLGgmJmZ1bmN0aW9uIHBqKGMsbCxhKXtp'@;
put 'ZihsKXtjb25zdCBkPWMubG9jYWxOYW1lcz1bXTtmb3IobGV0IGg9MDtoPGwubGVuZ3RoO2grPTIpe2NvbnN0IGY9YVtsW2grMV1dO2lmKG51bGw9PWYpdGhyb3cgbmV3IFFuKC0zMDEsITEpO2QucHVzaChsW2hdLGYpfX19KGEsZCxoKX1hLm1lcmdlZEF0dHJzPXZmKGEubWVyZ2VkQXR0cnMs'@;
put 'YS5hdHRycyl9ZnVuY3Rpb24gYlMoYyxsLGEsZCxoLGYpe2ZvcihsZXQgWj0wO1o8ZC5sZW5ndGg7WisrKWhkKE52KGEsbCksYyxkW1pdLnR5cGUpOyFmdW5jdGlvbiBtaihjLGwsYSl7Yy5mbGFnc3w9MSxjLmRpcmVjdGl2ZVN0YXJ0PWwsYy5kaXJlY3RpdmVFbmQ9bCthLGMucHJvdmlkZXJJ'@;
put 'bmRleGVzPWx9KGEsYy5kYXRhLmxlbmd0aCxkLmxlbmd0aCk7Zm9yKGxldCBaPTA7WjxkLmxlbmd0aDtaKyspe2NvbnN0IHJlPWRbWl07cmUucHJvdmlkZXJzUmVzb2x2ZXImJnJlLnByb3ZpZGVyc1Jlc29sdmVyKHJlKX1sZXQgdj0hMSxNPSExLEQ9aDgoYyxsLGQubGVuZ3RoLG51bGwpO2Zv'@;
put 'cihsZXQgWj0wO1o8ZC5sZW5ndGg7WisrKXtjb25zdCByZT1kW1pdO2EubWVyZ2VkQXR0cnM9dmYoYS5tZXJnZWRBdHRycyxyZS5ob3N0QXR0cnMpLHZqKGMsYSxsLEQscmUpLGdqKEQscmUsaCksbnVsbCE9PXJlLmNvbnRlbnRRdWVyaWVzJiYoYS5mbGFnc3w9NCksKG51bGwhPT1yZS5ob3N0'@;
put 'QmluZGluZ3N8fG51bGwhPT1yZS5ob3N0QXR0cnN8fDAhPT1yZS5ob3N0VmFycykmJihhLmZsYWdzfD02NCk7Y29uc3QgY2U9cmUudHlwZS5wcm90b3R5cGU7IXYmJihjZS5uZ09uQ2hhbmdlc3x8Y2UubmdPbkluaXR8fGNlLm5nRG9DaGVjaykmJigoYy5wcmVPcmRlckhvb2tzPz89W10pLnB1'@;
put 'c2goYS5pbmRleCksdj0hMCksIU0mJihjZS5uZ09uQ2hhbmdlc3x8Y2UubmdEb0NoZWNrKSYmKChjLnByZU9yZGVyQ2hlY2tIb29rcz8/PVtdKS5wdXNoKGEuaW5kZXgpLE09ITApLEQrK30hZnVuY3Rpb24gc2ooYyxsLGEpe2NvbnN0IGg9bC5kaXJlY3RpdmVFbmQsZj1jLmRhdGEsdj1sLmF0'@;
put 'dHJzLE09W107bGV0IEQ9bnVsbCxaPW51bGw7Zm9yKGxldCByZT1sLmRpcmVjdGl2ZVN0YXJ0O3JlPGg7cmUrKyl7Y29uc3QgY2U9ZltyZV0sYmU9YT9hLmdldChjZSk6bnVsbCxCZT1iZT9iZS5vdXRwdXRzOm51bGw7RD1JRCgwLGNlLmlucHV0cyxyZSxELGJlP2JlLmlucHV0czpudWxsKSxa'@;
put 'PUlEKDEsY2Uub3V0cHV0cyxyZSxaLEJlKTtjb25zdCBxZT1udWxsPT09RHx8bnVsbD09PXZ8fHY0KGwpP251bGw6RkQoRCxyZSx2KTtNLnB1c2gocWUpfW51bGwhPT1EJiYoRC5oYXNPd25Qcm9wZXJ0eSgiY2xhc3MiKSYmKGwuZmxhZ3N8PTgpLEQuaGFzT3duUHJvcGVydHkoInN0eWxlIikm'@;
put 'JihsLmZsYWdzfD0xNikpLGwuaW5pdGlhbElucHV0cz1NLGwuaW5wdXRzPUQsbC5vdXRwdXRzPVp9KGMsYSxmKX1mdW5jdGlvbiBPRChjLGwsYSl7Y29uc3QgZD1hLmRpcmVjdGl2ZVN0YXJ0LGg9YS5kaXJlY3RpdmVFbmQsZj1hLmluZGV4LHY9ZnVuY3Rpb24gX1YoKXtyZXR1cm4gQ28ubEZy'@;
put 'YW1lLmN1cnJlbnREaXJlY3RpdmVJbmRleH0oKTt0cnl7QTQoZik7Zm9yKGxldCBNPWQ7TTxoO00rKyl7Y29uc3QgRD1jLmRhdGFbTV0sWj1sW01dO29DKE0pLChudWxsIT09RC5ob3N0QmluZGluZ3N8fDAhPT1ELmhvc3RWYXJzfHxudWxsIT09RC5ob3N0QXR0cnMpJiZQRChELFopfX1maW5h'@;
put 'bGx5e0E0KC0xKSxvQyh2KX19ZnVuY3Rpb24gUEQoYyxsKXtudWxsIT09Yy5ob3N0QmluZGluZ3MmJmMuaG9zdEJpbmRpbmdzKDEsbCl9ZnVuY3Rpb24geVMoYyxsLGEpe2wuY29tcG9uZW50T2Zmc2V0PWEsKGMuY29tcG9uZW50cz8/PVtdKS5wdXNoKGwuaW5kZXgpfWZ1bmN0aW9uIGdqKGMs'@;
put 'bCxhKXtpZihhKXtpZihsLmV4cG9ydEFzKWZvcihsZXQgZD0wO2Q8bC5leHBvcnRBcy5sZW5ndGg7ZCsrKWFbbC5leHBvcnRBc1tkXV09YztWYyhsKSYmKGFbIiJdPWMpfX1mdW5jdGlvbiB2aihjLGwsYSxkLGgpe2MuZGF0YVtkXT1oO2NvbnN0IGY9aC5mYWN0b3J5fHwoaC5mYWN0b3J5PW11'@;
put 'KGgudHlwZSkpLHY9bmV3IFAxKGYsVmMoaCksR2UpO2MuYmx1ZXByaW50W2RdPXYsYVtkXT12LGZ1bmN0aW9uIExEKGMsbCxhLGQsaCl7Y29uc3QgZj1oLmhvc3RCaW5kaW5ncztpZihmKXtsZXQgdj1jLmhvc3RCaW5kaW5nT3BDb2RlcztudWxsPT09diYmKHY9Yy5ob3N0QmluZGluZ09wQ29k'@;
put 'ZXM9W10pO2NvbnN0IE09fmwuaW5kZXg7KGZ1bmN0aW9uIGRqKGMpe2xldCBsPWMubGVuZ3RoO2Zvcig7bD4wOyl7Y29uc3QgYT1jWy0tbF07aWYoIm51bWJlciI9PXR5cGVvZiBhJiZhPDApcmV0dXJuIGF9cmV0dXJuIDB9KSh2KSE9TSYmdi5wdXNoKE0pLHYucHVzaChhLGQsZil9fShjLGws'@;
put 'ZCxoOChjLGEsaC5ob3N0VmFycyxSbyksaCl9ZnVuY3Rpb24gdWgoYyxsLGEsZCxoLGYpe2NvbnN0IHY9TDAoYyxsKTshZnVuY3Rpb24gX1MoYyxsLGEsZCxoLGYsdil7aWYobnVsbD09ZiljLnJlbW92ZUF0dHJpYnV0ZShsLGgsYSk7ZWxzZXtjb25zdCBNPW51bGw9PXY/Q2EoZik6dihmLGR8'@;
put 'fCIiLGgpO2Muc2V0QXR0cmlidXRlKGwsaCxNLGEpfX0obFtib10sdixmLGMudmFsdWUsYSxkLGgpfWZ1bmN0aW9uIHViKGMsbCxhLGQsaCxmKXtjb25zdCB2PWZbbF07aWYobnVsbCE9PXYpZm9yKGxldCBNPTA7TTx2Lmxlbmd0aDspTUQoZCxhLHZbTSsrXSx2W00rK10sdltNKytdLHZbTSsr'@;
put 'XSl9ZnVuY3Rpb24gRkQoYyxsLGEpe2xldCBkPW51bGwsaD0wO2Zvcig7aDxhLmxlbmd0aDspe2NvbnN0IGY9YVtoXTtpZigwIT09ZilpZig1IT09Zil7aWYoIm51bWJlciI9PXR5cGVvZiBmKWJyZWFrO2lmKGMuaGFzT3duUHJvcGVydHkoZikpe251bGw9PT1kJiYoZD1bXSk7Y29uc3Qgdj1j'@;
put 'W2ZdO2ZvcihsZXQgTT0wO008di5sZW5ndGg7TSs9MylpZih2W01dPT09bCl7ZC5wdXNoKGYsdltNKzFdLHZbTSsyXSxhW2grMV0pO2JyZWFrfX1oKz0yfWVsc2UgaCs9MjtlbHNlIGgrPTR9cmV0dXJuIGR9ZnVuY3Rpb24gd1MoYyxsLGEsZCl7cmV0dXJuW2MsITAsMCxsLG51bGwsZCxudWxs'@;
put 'LGEsbnVsbCxudWxsXX1mdW5jdGlvbiBIRChjLGwpe2NvbnN0IGE9Yy5jb250ZW50UXVlcmllcztpZihudWxsIT09YSl7Y29uc3QgZD1fZShudWxsKTt0cnl7Zm9yKGxldCBoPTA7aDxhLmxlbmd0aDtoKz0yKXtjb25zdCB2PWFbaCsxXTtpZigtMSE9PXYpe2NvbnN0IE09Yy5kYXRhW3ZdO0Iz'@;
put 'KGFbaF0pLE0uY29udGVudFF1ZXJpZXMoMixsW3ZdLHYpfX19ZmluYWxseXtfZShkKX19fWZ1bmN0aW9uIGY4KGMsbCl7cmV0dXJuIGNbU2ZdP2NbQzRdW05jXT1sOmNbU2ZdPWwsY1tDNF09bCxsfWZ1bmN0aW9uIGRiKGMsbCxhKXtCMygwKTtjb25zdCBkPV9lKG51bGwpO3RyeXtsKGMsYSl9'@;
put 'ZmluYWxseXtfZShkKX19ZnVuY3Rpb24gTkQoYyl7cmV0dXJuIGNbWDBdfHwoY1tYMF09W10pfWZ1bmN0aW9uIHA4KGMpe3JldHVybiBjLmNsZWFudXB8fChjLmNsZWFudXA9W10pfWZ1bmN0aW9uIFc0KGMsbCxhKXtyZXR1cm4obnVsbD09PWN8fFZjKGMpKSYmKGE9ZnVuY3Rpb24gSncoYyl7'@;
put 'Zm9yKDtBcnJheS5pc0FycmF5KGMpOyl7aWYoIm9iamVjdCI9PXR5cGVvZiBjW3o2XSlyZXR1cm4gYztjPWNbVWxdfXJldHVybiBudWxsfShhW2wuaW5kZXhdKSksYVtib119ZnVuY3Rpb24gejUoYyxsKXtjb25zdCBhPWNbcGNdLGQ9YT9hLmdldChnMixudWxsKTpudWxsO2QmJmQuaGFuZGxl'@;
put 'RXJyb3IobCl9ZnVuY3Rpb24gQ1MoYyxsLGEsZCxoKXtmb3IobGV0IGY9MDtmPGEubGVuZ3RoOyl7Y29uc3Qgdj1hW2YrK10sTT1hW2YrK10sRD1hW2YrK107TUQoYy5kYXRhW3ZdLGxbdl0sZCxNLEQsaCl9fWZ1bmN0aW9uIHYyKGMsbCxhKXtjb25zdCBkPXk1KGwsYyk7IWZ1bmN0aW9uIGRE'@;
put 'KGMsbCxhKXtjLnNldFZhbHVlKGwsYSl9KGNbYm9dLGQsYSl9ZnVuY3Rpb24gX2ooYyxsKXtjb25zdCBhPU8xKGwsYyksZD1hW0tpXTshZnVuY3Rpb24gd2ooYyxsKXtmb3IobGV0IGE9bC5sZW5ndGg7YTxjLmJsdWVwcmludC5sZW5ndGg7YSsrKWwucHVzaChjLmJsdWVwcmludFthXSl9KGQs'@;
put 'YSk7Y29uc3QgaD1hW1VsXTtudWxsIT09aCYmbnVsbD09PWFbbnVdJiYoYVtudV09UkMoaCxhW3BjXSkpLFNTKGQsYSxhW2NsXSl9ZnVuY3Rpb24gU1MoYyxsLGEpe0s2KGwpO3RyeXtjb25zdCBkPWMudmlld1F1ZXJ5O251bGwhPT1kJiZkYigxLGQsYSk7Y29uc3QgaD1jLnRlbXBsYXRlO251'@;
put 'bGwhPT1oJiZ4RChjLGwsaCwxLGEpLGMuZmlyc3RDcmVhdGVQYXNzJiYoYy5maXJzdENyZWF0ZVBhc3M9ITEpLGxbdWRdPy5maW5pc2hWaWV3Q3JlYXRpb24oYyksYy5zdGF0aWNDb250ZW50UXVlcmllcyYmSEQoYyxsKSxjLnN0YXRpY1ZpZXdRdWVyaWVzJiZkYigyLGMudmlld1F1ZXJ5LGEp'@;
put 'O2NvbnN0IGY9Yy5jb21wb25lbnRzO251bGwhPT1mJiZmdW5jdGlvbiBDaihjLGwpe2ZvcihsZXQgYT0wO2E8bC5sZW5ndGg7YSsrKV9qKGMsbFthXSl9KGwsZil9Y2F0Y2goZCl7dGhyb3cgYy5maXJzdENyZWF0ZVBhc3MmJihjLmluY29tcGxldGVGaXJzdFBhc3M9ITAsYy5maXJzdENyZWF0'@;
put 'ZVBhc3M9ITEpLGR9ZmluYWxseXtsW1VhXSY9LTUsdzUoKX19ZnVuY3Rpb24gVTUoYyxsKXtyZXR1cm4hbHx8bnVsbD09PWwuZmlyc3RDaGlsZHx8WnYoYyl9ZnVuY3Rpb24gdjgoYyxsLGEsZD0hMCl7Y29uc3QgaD1sW0tpXTtpZihmdW5jdGlvbiB0UyhjLGwsYSxkKXtjb25zdCBoPWdjK2Qs'@;
put 'Zj1hLmxlbmd0aDtkPjAmJihhW2gtMV1bTmNdPWwpLGQ8Zi1nYz8obFtOY109YVtoXSxQbChhLGdjK2QsbCkpOihhLnB1c2gobCksbFtOY109bnVsbCksbFtmY109YTtjb25zdCB2PWxbUzRdO251bGwhPT12JiZhIT09diYmZnVuY3Rpb24gUUIoYyxsKXtjb25zdCBhPWNbVjNdO2xbWmxdIT09'@;
put 'bFtmY11bZmNdW1psXSYmKGNbVWFdfD1iNS5IYXNUcmFuc3BsYW50ZWRWaWV3cyksbnVsbD09PWE/Y1tWM109W2xdOmEucHVzaChsKX0odixsKTtjb25zdCBNPWxbdWRdO251bGwhPT1NJiZNLmluc2VydFZpZXcoYyksbkMobCksbFtVYV18PTEyOH0oaCxsLGMsYSksZCl7Y29uc3Qgdj1jUyhh'@;
put 'LGMpLE09bFtib10sRD1xMyhNLGNbdnVdKTtudWxsIT09RCYmZnVuY3Rpb24gWEIoYyxsLGEsZCxoLGYpe2RbVWxdPWgsZFtyY109bCxzYihjLGQsYSwxLGgsZil9KGgsY1tyY10sTSxsLEQsdil9Y29uc3QgZj1sW251XTtudWxsIT09ZiYmbnVsbCE9PWYuZmlyc3RDaGlsZCYmKGYuZmlyc3RD'@;
put 'aGlsZD1udWxsKX1mdW5jdGlvbiBiOChjLGwsYSxkLGg9ITEpe2Zvcig7bnVsbCE9PWE7KXtjb25zdCBmPWxbYS5pbmRleF07bnVsbCE9PWYmJmQucHVzaChDbChmKSksSHUoZikmJlZEKGYsZCk7Y29uc3Qgdj1hLnR5cGU7aWYoOCZ2KWI4KGMsbCxhLmNoaWxkLGQpO2Vsc2UgaWYoMzImdil7'@;
put 'Y29uc3QgTT1KQyhhLGwpO2xldCBEO2Zvcig7RD1NKCk7KWQucHVzaChEKX1lbHNlIGlmKDE2JnYpe2NvbnN0IE09bUQobCxhKTtpZihBcnJheS5pc0FycmF5KE0pKWQucHVzaCguLi5NKTtlbHNle2NvbnN0IEQ9VDQobFtabF0pO2I4KERbS2ldLEQsTSxkLCEwKX19YT1oP2EucHJvamVjdGlv'@;
put 'bk5leHQ6YS5uZXh0fXJldHVybiBkfWZ1bmN0aW9uIFZEKGMsbCl7Zm9yKGxldCBhPWdjO2E8Yy5sZW5ndGg7YSsrKXtjb25zdCBkPWNbYV0saD1kW0tpXS5maXJzdENoaWxkO251bGwhPT1oJiZiOChkW0tpXSxkLGgsbCl9Y1t2dV0hPT1jW1VsXSYmbC5wdXNoKGNbdnVdKX1sZXQgQkQ9W107'@;
put 'Y29uc3QgRWo9e3ZlcnNpb246MCxsYXN0Q2xlYW5FcG9jaDowLGRpcnR5OiExLHByb2R1Y2VyTm9kZTp2b2lkIDAscHJvZHVjZXJMYXN0UmVhZFZlcnNpb246dm9pZCAwLHByb2R1Y2VySW5kZXhPZlRoaXM6dm9pZCAwLG5leHRQcm9kdWNlckluZGV4OjAsbGl2ZUNvbnN1bWVyTm9kZTp2b2lk'@;
put 'IDAsbGl2ZUNvbnN1bWVySW5kZXhPZlRoaXM6dm9pZCAwLGNvbnN1bWVyQWxsb3dTaWduYWxXcml0ZXM6ITEsY29uc3VtZXJJc0Fsd2F5c0xpdmU6ITEscHJvZHVjZXJNdXN0UmVjb21wdXRlOigpPT4hMSxwcm9kdWNlclJlY29tcHV0ZVZhbHVlOigpPT57fSxjb25zdW1lck1hcmtlZERpcnR5'@;
put 'OigpPT57fSxjb25zdW1lck9uU2lnbmFsUmVhZDooKT0+e30sY29uc3VtZXJJc0Fsd2F5c0xpdmU6ITAsY29uc3VtZXJNYXJrZWREaXJ0eTpjPT57RzYoYy5sVmlldyl9LGNvbnN1bWVyT25TaWduYWxSZWFkKCl7dGhpcy5sVmlld1t4Zl09dGhpc319LGpEPTEwMDtmdW5jdGlvbiBoYihjLGw9'@;
put 'ITAsYT0wKXtjb25zdCBkPWNbTDFdLGg9ZC5yZW5kZXJlckZhY3Rvcnk7aC5iZWdpbj8uKCk7dHJ5eyFmdW5jdGlvbiBUaihjLGwpe3hTKGMsbCk7bGV0IGE9MDtmb3IoO1R2KGMpOyl7aWYoYT09PWpEKXRocm93IG5ldyBRbigxMDMsITEpO2ErKyx4UyhjLDEpfX0oYyxhKX1jYXRjaCh2KXt0'@;
put 'aHJvdyBsJiZ6NShjLHYpLHZ9ZmluYWxseXtoLmVuZD8uKCksZC5pbmxpbmVFZmZlY3RSdW5uZXI/LmZsdXNoKCl9fWZ1bmN0aW9uIEFqKGMsbCxhLGQpe2NvbnN0IGg9bFtVYV07aWYoISgyNTYmfmgpKXJldHVybjtsW0wxXS5pbmxpbmVFZmZlY3RSdW5uZXI/LmZsdXNoKCksSzYobCk7bGV0'@;
put 'IHY9bnVsbCxNPW51bGw7KGZ1bmN0aW9uIGtqKGMpe3JldHVybiAyIT09Yy50eXBlfSkoYykmJihNPWZ1bmN0aW9uIFNqKGMpe3JldHVybiBjW3hmXT8/ZnVuY3Rpb24gTWooYyl7Y29uc3QgbD1CRC5wb3AoKT8/T2JqZWN0LmNyZWF0ZShFaik7cmV0dXJuIGwubFZpZXc9YyxsfShjKX0obCks'@;
put 'dj1mdW5jdGlvbiBqKGMpe3JldHVybiBjJiYoYy5uZXh0UHJvZHVjZXJJbmRleD0wKSxfZShjKX0oTSkpO3RyeXtlQyhsKSxmdW5jdGlvbiByayhjKXtyZXR1cm4gQ28ubEZyYW1lLmJpbmRpbmdJbmRleD1jfShjLmJpbmRpbmdTdGFydEluZGV4KSxudWxsIT09YSYmeEQoYyxsLGEsMixkKTtj'@;
put 'b25zdCBEPSEoMyZ+aCk7aWYoRCl7Y29uc3QgY2U9Yy5wcmVPcmRlckNoZWNrSG9va3M7bnVsbCE9PWNlJiZMdihsLGNlLG51bGwpfWVsc2V7Y29uc3QgY2U9Yy5wcmVPcmRlckhvb2tzO251bGwhPT1jZSYmT3YobCxjZSwwLG51bGwpLGRDKGwsMCl9aWYoZnVuY3Rpb24gRGooYyl7Zm9yKGxl'@;
put 'dCBsPUVrKGMpO251bGwhPT1sO2w9VGsobCkpe2lmKCEobFtVYV0mYjUuSGFzVHJhbnNwbGFudGVkVmlld3MpKWNvbnRpbnVlO2NvbnN0IGE9bFtWM107Zm9yKGxldCBkPTA7ZDxhLmxlbmd0aDtkKyspe2NWKGFbZF0pfX19KGwpLHpEKGwsMCksbnVsbCE9PWMuY29udGVudFF1ZXJpZXMmJkhE'@;
put 'KGMsbCksRCl7Y29uc3QgY2U9Yy5jb250ZW50Q2hlY2tIb29rcztudWxsIT09Y2UmJkx2KGwsY2UpfWVsc2V7Y29uc3QgY2U9Yy5jb250ZW50SG9va3M7bnVsbCE9PWNlJiZPdihsLGNlLDEpLGRDKGwsMSl9IWZ1bmN0aW9uIHJqKGMsbCl7Y29uc3QgYT1jLmhvc3RCaW5kaW5nT3BDb2Rlcztp'@;
put 'ZihudWxsIT09YSl0cnl7Zm9yKGxldCBkPTA7ZDxhLmxlbmd0aDtkKyspe2NvbnN0IGg9YVtkXTtpZihoPDApQTQofmgpO2Vsc2V7Y29uc3QgZj1oLHY9YVsrK2RdLE09YVsrK2RdO3lWKHYsZiksTSgyLGxbZl0pfX19ZmluYWxseXtBNCgtMSl9fShjLGwpO2NvbnN0IFo9Yy5jb21wb25lbnRz'@;
put 'O251bGwhPT1aJiZaRChsLFosMCk7Y29uc3QgcmU9Yy52aWV3UXVlcnk7aWYobnVsbCE9PXJlJiZkYigyLHJlLGQpLEQpe2NvbnN0IGNlPWMudmlld0NoZWNrSG9va3M7bnVsbCE9PWNlJiZMdihsLGNlKX1lbHNle2NvbnN0IGNlPWMudmlld0hvb2tzO251bGwhPT1jZSYmT3YobCxjZSwyKSxk'@;
put 'QyhsLDIpfWlmKCEwPT09Yy5maXJzdFVwZGF0ZVBhc3MmJihjLmZpcnN0VXBkYXRlUGFzcz0hMSksbFt2NV0pe2Zvcihjb25zdCBjZSBvZiBsW3Y1XSljZSgpO2xbdjVdPW51bGx9bFtVYV0mPS03M31jYXRjaChEKXt0aHJvdyBHNihsKSxEfWZpbmFsbHl7bnVsbCE9PU0mJihmdW5jdGlvbiBF'@;
put 'KGMsbCl7aWYoX2UobCksYyYmdm9pZCAwIT09Yy5wcm9kdWNlck5vZGUmJnZvaWQgMCE9PWMucHJvZHVjZXJJbmRleE9mVGhpcyYmdm9pZCAwIT09Yy5wcm9kdWNlckxhc3RSZWFkVmVyc2lvbil7aWYoc2UoYykpZm9yKGxldCBhPWMubmV4dFByb2R1Y2VySW5kZXg7YTxjLnByb2R1Y2VyTm9k'@;
put 'ZS5sZW5ndGg7YSsrKXRlKGMucHJvZHVjZXJOb2RlW2FdLGMucHJvZHVjZXJJbmRleE9mVGhpc1thXSk7Zm9yKDtjLnByb2R1Y2VyTm9kZS5sZW5ndGg+Yy5uZXh0UHJvZHVjZXJJbmRleDspYy5wcm9kdWNlck5vZGUucG9wKCksYy5wcm9kdWNlckxhc3RSZWFkVmVyc2lvbi5wb3AoKSxjLnBy'@;
put 'b2R1Y2VySW5kZXhPZlRoaXMucG9wKCl9fShNLHYpLGZ1bmN0aW9uIHhqKGMpe2MubFZpZXdbeGZdIT09YyYmKGMubFZpZXc9bnVsbCxCRC5wdXNoKGMpKX0oTSkpLHc1KCl9fWZ1bmN0aW9uIHpEKGMsbCl7Zm9yKGxldCBhPUVrKGMpO251bGwhPT1hO2E9VGsoYSkpZm9yKGxldCBkPWdjO2Q8'@;
put 'YS5sZW5ndGg7ZCsrKVVEKGFbZF0sbCl9ZnVuY3Rpb24gSWooYyxsLGEpe1VEKE8xKGwsYyksYSl9ZnVuY3Rpb24gVUQoYyxsKXtRdyhjKSYmeFMoYyxsKX1mdW5jdGlvbiB4UyhjLGwpe2NvbnN0IGQ9Y1tLaV0saD1jW1VhXSxmPWNbeGZdO2xldCB2PSEhKDA9PT1sJiYxNiZoKTtpZih2fHw9'@;
put 'ISEoNjQmaCYmMD09PWwpLHZ8fD0hISgxMDI0JmgpLHZ8fD0hKCFmPy5kaXJ0eXx8IW0oZikpLGYmJihmLmRpcnR5PSExKSxjW1VhXSY9LTkyMTcsdilBaihkLGMsZC50ZW1wbGF0ZSxjW2NsXSk7ZWxzZSBpZig4MTkyJmgpe3pEKGMsMSk7Y29uc3QgTT1kLmNvbXBvbmVudHM7bnVsbCE9PU0m'@;
put 'JlpEKGMsTSwxKX19ZnVuY3Rpb24gWkQoYyxsLGEpe2ZvcihsZXQgZD0wO2Q8bC5sZW5ndGg7ZCsrKUlqKGMsbFtkXSxhKX1mdW5jdGlvbiB5OChjKXtmb3IoY1tMMV0uY2hhbmdlRGV0ZWN0aW9uU2NoZWR1bGVyPy5ub3RpZnkoKTtjOyl7Y1tVYV18PTY0O2NvbnN0IGw9VDQoYyk7aWYoeDQo'@;
put 'YykmJiFsKXJldHVybiBjO2M9bH1yZXR1cm4gbnVsbH1jbGFzcyBfOHtnZXQgcm9vdE5vZGVzKCl7Y29uc3QgbD10aGlzLl9sVmlldyxhPWxbS2ldO3JldHVybiBiOChhLGwsYS5maXJzdENoaWxkLFtdKX1jb25zdHJ1Y3RvcihsLGEsZD0hMCl7dGhpcy5fbFZpZXc9bCx0aGlzLl9jZFJlZklu'@;
put 'amVjdGluZ1ZpZXc9YSx0aGlzLm5vdGlmeUVycm9ySGFuZGxlcj1kLHRoaXMuX2FwcFJlZj1udWxsLHRoaXMuX2F0dGFjaGVkVG9WaWV3Q29udGFpbmVyPSExfWdldCBjb250ZXh0KCl7cmV0dXJuIHRoaXMuX2xWaWV3W2NsXX1zZXQgY29udGV4dChsKXt0aGlzLl9sVmlld1tjbF09bH1nZXQg'@;
put 'ZGVzdHJveWVkKCl7cmV0dXJuISgyNTYmfnRoaXMuX2xWaWV3W1VhXSl9ZGVzdHJveSgpe2lmKHRoaXMuX2FwcFJlZil0aGlzLl9hcHBSZWYuZGV0YWNoVmlldyh0aGlzKTtlbHNlIGlmKHRoaXMuX2F0dGFjaGVkVG9WaWV3Q29udGFpbmVyKXtjb25zdCBsPXRoaXMuX2xWaWV3W2ZjXTtpZihI'@;
put 'dShsKSl7Y29uc3QgYT1sWzhdLGQ9YT9hLmluZGV4T2YodGhpcyk6LTE7ZD4tMSYmKHM4KGwsZCksT3UoYSxkKSl9dGhpcy5fYXR0YWNoZWRUb1ZpZXdDb250YWluZXI9ITF9VTQodGhpcy5fbFZpZXdbS2ldLHRoaXMuX2xWaWV3KX1vbkRlc3Ryb3kobCl7QXYodGhpcy5fbFZpZXcsbCl9bWFy'@;
put 'a0ZvckNoZWNrKCl7eTgodGhpcy5fY2RSZWZJbmplY3RpbmdWaWV3fHx0aGlzLl9sVmlldyl9ZGV0YWNoKCl7dGhpcy5fbFZpZXdbVWFdJj0tMTI5fXJlYXR0YWNoKCl7bkModGhpcy5fbFZpZXcpLHRoaXMuX2xWaWV3W1VhXXw9MTI4fWRldGVjdENoYW5nZXMoKXt0aGlzLl9sVmlld1tVYV18'@;
put 'PTEwMjQsaGIodGhpcy5fbFZpZXcsdGhpcy5ub3RpZnlFcnJvckhhbmRsZXIpfWNoZWNrTm9DaGFuZ2VzKCl7fWF0dGFjaFRvVmlld0NvbnRhaW5lclJlZigpe2lmKHRoaXMuX2FwcFJlZil0aHJvdyBuZXcgUW4oOTAyLCExKTt0aGlzLl9hdHRhY2hlZFRvVmlld0NvbnRhaW5lcj0hMH1kZXRh'@;
put 'Y2hGcm9tQXBwUmVmKCl7dGhpcy5fYXBwUmVmPW51bGwsZkQodGhpcy5fbFZpZXdbS2ldLHRoaXMuX2xWaWV3KX1hdHRhY2hUb0FwcFJlZihsKXtpZih0aGlzLl9hdHRhY2hlZFRvVmlld0NvbnRhaW5lcil0aHJvdyBuZXcgUW4oOTAyLCExKTt0aGlzLl9hcHBSZWY9bCxuQyh0aGlzLl9sVmll'@;
put 'dyl9fWxldCBTbD0oKCk9PntjbGFzcyBje3N0YXRpY3t0aGlzLl9fTkdfRUxFTUVOVF9JRF9fPU9qfX1yZXR1cm4gY30pKCk7Y29uc3QgUmo9U2wsTGo9Y2xhc3MgZXh0ZW5kcyBSantjb25zdHJ1Y3RvcihsLGEsZCl7c3VwZXIoKSx0aGlzLl9kZWNsYXJhdGlvbkxWaWV3PWwsdGhpcy5fZGVj'@;
put 'bGFyYXRpb25UQ29udGFpbmVyPWEsdGhpcy5lbGVtZW50UmVmPWR9Z2V0IHNzcklkKCl7cmV0dXJuIHRoaXMuX2RlY2xhcmF0aW9uVENvbnRhaW5lci50Vmlldz8uc3NySWR8fG51bGx9Y3JlYXRlRW1iZWRkZWRWaWV3KGwsYSl7cmV0dXJuIHRoaXMuY3JlYXRlRW1iZWRkZWRWaWV3SW1wbChs'@;
put 'LGEpfWNyZWF0ZUVtYmVkZGVkVmlld0ltcGwobCxhLGQpe2NvbnN0IGg9ZnVuY3Rpb24gZzgoYyxsLGEsZCl7Y29uc3QgaD1fZShudWxsKTt0cnl7Y29uc3QgZj1sLnRWaWV3LEQ9bGIoYyxmLGEsNDA5NiZjW1VhXT80MDk2OjE2LG51bGwsbCxudWxsLG51bGwsZD8uaW5qZWN0b3I/P251bGws'@;
put 'ZD8uZW1iZWRkZWRWaWV3SW5qZWN0b3I/P251bGwsZD8uZGVoeWRyYXRlZFZpZXc/P251bGwpO0RbUzRdPWNbbC5pbmRleF07Y29uc3QgcmU9Y1t1ZF07cmV0dXJuIG51bGwhPT1yZSYmKERbdWRdPXJlLmNyZWF0ZUVtYmVkZGVkVmlldyhmKSksU1MoZixELGEpLER9ZmluYWxseXtfZShoKX19'@;
put 'KHRoaXMuX2RlY2xhcmF0aW9uTFZpZXcsdGhpcy5fZGVjbGFyYXRpb25UQ29udGFpbmVyLGwse2VtYmVkZGVkVmlld0luamVjdG9yOmEsZGVoeWRyYXRlZFZpZXc6ZH0pO3JldHVybiBuZXcgXzgoaCl9fTtmdW5jdGlvbiBPaigpe3JldHVybiBmYih1bCgpLGRpKCkpfWZ1bmN0aW9uIGZiKGMs'@;
put 'bCl7cmV0dXJuIDQmYy50eXBlP25ldyBMaihsLGMsTDQoYyxsKSk6bnVsbH1jbGFzcyBiYnt9Y2xhc3Mgcnp7fWNsYXNzIFFEe31jbGFzcyBventyZXNvbHZlQ29tcG9uZW50RmFjdG9yeShsKXt0aHJvdyBmdW5jdGlvbiBpeihjKXtjb25zdCBsPUVycm9yKGBObyBjb21wb25lbnQgZmFjdG9y'@;
put 'eSBmb3VuZCBmb3IgJHtQcihjKX0uYCk7cmV0dXJuIGwubmdDb21wb25lbnQ9YyxsfShsKX19bGV0IFc1PSgoKT0+e2NsYXNzIGN7c3RhdGlje3RoaXMuTlVMTD1uZXcgb3p9fXJldHVybiBjfSkoKTtjbGFzcyB4OHt9bGV0IEVvPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLmRl'@;
put 'c3Ryb3lOb2RlPW51bGx9c3RhdGlje3RoaXMuX19OR19FTEVNRU5UX0lEX189KCk9PmZ1bmN0aW9uIHN6KCl7Y29uc3QgYz1kaSgpLGE9TzEodWwoKS5pbmRleCxjKTtyZXR1cm4oRnUoYSk/YTpjKVtib119KCl9fXJldHVybiBjfSkoKSxsej0oKCk9PntjbGFzcyBje3N0YXRpY3t0aGlzLlx1'@;
put 'MDI3NXByb3Y9YW4oe3Rva2VuOmMscHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTooKT0+bnVsbH0pfX1yZXR1cm4gY30pKCk7Y29uc3QgUlM9e30sZUk9bmV3IFNldDtmdW5jdGlvbiBiMihjKXtlSS5oYXMoYyl8fChlSS5hZGQoYykscGVyZm9ybWFuY2U/Lm1hcms/LigibWFya19mZWF0dXJl'@;
put 'X3VzYWdlIix7ZGV0YWlsOntmZWF0dXJlOmN9fSkpfWZ1bmN0aW9uIHRJKC4uLmMpe31jbGFzcyBXYXtjb25zdHJ1Y3Rvcih7ZW5hYmxlTG9uZ1N0YWNrVHJhY2U6bD0hMSxzaG91bGRDb2FsZXNjZUV2ZW50Q2hhbmdlRGV0ZWN0aW9uOmE9ITEsc2hvdWxkQ29hbGVzY2VSdW5DaGFuZ2VEZXRl'@;
put 'Y3Rpb246ZD0hMX0pe2lmKHRoaXMuaGFzUGVuZGluZ01hY3JvdGFza3M9ITEsdGhpcy5oYXNQZW5kaW5nTWljcm90YXNrcz0hMSx0aGlzLmlzU3RhYmxlPSEwLHRoaXMub25VbnN0YWJsZT1uZXcgS3IoITEpLHRoaXMub25NaWNyb3Rhc2tFbXB0eT1uZXcgS3IoITEpLHRoaXMub25TdGFibGU9'@;
put 'bmV3IEtyKCExKSx0aGlzLm9uRXJyb3I9bmV3IEtyKCExKSx0eXBlb2YgWm9uZT4idSIpdGhyb3cgbmV3IFFuKDkwOCwhMSk7Wm9uZS5hc3NlcnRab25lUGF0Y2hlZCgpO2NvbnN0IGg9dGhpcztoLl9uZXN0aW5nPTAsaC5fb3V0ZXI9aC5faW5uZXI9Wm9uZS5jdXJyZW50LFpvbmUuVGFza1Ry'@;
put 'YWNraW5nWm9uZVNwZWMmJihoLl9pbm5lcj1oLl9pbm5lci5mb3JrKG5ldyBab25lLlRhc2tUcmFja2luZ1pvbmVTcGVjKSksbCYmWm9uZS5sb25nU3RhY2tUcmFjZVpvbmVTcGVjJiYoaC5faW5uZXI9aC5faW5uZXIuZm9yayhab25lLmxvbmdTdGFja1RyYWNlWm9uZVNwZWMpKSxoLnNob3Vs'@;
put 'ZENvYWxlc2NlRXZlbnRDaGFuZ2VEZXRlY3Rpb249IWQmJmEsaC5zaG91bGRDb2FsZXNjZVJ1bkNoYW5nZURldGVjdGlvbj1kLGgubGFzdFJlcXVlc3RBbmltYXRpb25GcmFtZUlkPS0xLGgubmF0aXZlUmVxdWVzdEFuaW1hdGlvbkZyYW1lPWZ1bmN0aW9uIGN6KCl7Y29uc3QgYz0iZnVuY3Rp'@;
put 'b24iPT10eXBlb2YgVnQucmVxdWVzdEFuaW1hdGlvbkZyYW1lO2xldCBsPVZ0W2M/InJlcXVlc3RBbmltYXRpb25GcmFtZSI6InNldFRpbWVvdXQiXSxhPVZ0W2M/ImNhbmNlbEFuaW1hdGlvbkZyYW1lIjoiY2xlYXJUaW1lb3V0Il07aWYodHlwZW9mIFpvbmU8InUiJiZsJiZhKXtjb25zdCBk'@;
put 'PWxbWm9uZS5fX3N5bWJvbF9fKCJPcmlnaW5hbERlbGVnYXRlIildO2QmJihsPWQpO2NvbnN0IGg9YVtab25lLl9fc3ltYm9sX18oIk9yaWdpbmFsRGVsZWdhdGUiKV07aCYmKGE9aCl9cmV0dXJue25hdGl2ZVJlcXVlc3RBbmltYXRpb25GcmFtZTpsLG5hdGl2ZUNhbmNlbEFuaW1hdGlvbkZy'@;
put 'YW1lOmF9fSgpLm5hdGl2ZVJlcXVlc3RBbmltYXRpb25GcmFtZSxmdW5jdGlvbiBoeihjKXtjb25zdCBsPSgpPT57IWZ1bmN0aW9uIGR6KGMpe2MuaXNDaGVja1N0YWJsZVJ1bm5pbmd8fC0xIT09Yy5sYXN0UmVxdWVzdEFuaW1hdGlvbkZyYW1lSWR8fChjLmxhc3RSZXF1ZXN0QW5pbWF0aW9u'@;
put 'RnJhbWVJZD1jLm5hdGl2ZVJlcXVlc3RBbmltYXRpb25GcmFtZS5jYWxsKFZ0LCgpPT57Yy5mYWtlVG9wRXZlbnRUYXNrfHwoYy5mYWtlVG9wRXZlbnRUYXNrPVpvbmUucm9vdC5zY2hlZHVsZUV2ZW50VGFzaygiZmFrZVRvcEV2ZW50VGFzayIsKCk9PntjLmxhc3RSZXF1ZXN0QW5pbWF0aW9u'@;
put 'RnJhbWVJZD0tMSxPUyhjKSxjLmlzQ2hlY2tTdGFibGVSdW5uaW5nPSEwLExTKGMpLGMuaXNDaGVja1N0YWJsZVJ1bm5pbmc9ITF9LHZvaWQgMCwoKT0+e30sKCk9Pnt9KSksYy5mYWtlVG9wRXZlbnRUYXNrLmludm9rZSgpfSksT1MoYykpfShjKX07Yy5faW5uZXI9Yy5faW5uZXIuZm9yayh7'@;
put 'bmFtZToiYW5ndWxhciIscHJvcGVydGllczp7aXNBbmd1bGFyWm9uZTohMH0sb25JbnZva2VUYXNrOihhLGQsaCxmLHYsTSk9PntpZihmdW5jdGlvbiBmeihjKXtyZXR1cm4hKCFBcnJheS5pc0FycmF5KGMpfHwxIT09Yy5sZW5ndGgpJiYhMD09PWNbMF0uZGF0YT8uX19pZ25vcmVfbmdfem9u'@;
put 'ZV9ffShNKSlyZXR1cm4gYS5pbnZva2VUYXNrKGgsZix2LE0pO3RyeXtyZXR1cm4geWIoYyksYS5pbnZva2VUYXNrKGgsZix2LE0pfWZpbmFsbHl7KGMuc2hvdWxkQ29hbGVzY2VFdmVudENoYW5nZURldGVjdGlvbiYmImV2ZW50VGFzayI9PT1mLnR5cGV8fGMuc2hvdWxkQ29hbGVzY2VSdW5D'@;
put 'aGFuZ2VEZXRlY3Rpb24pJiZsKCksbkkoYyl9fSxvbkludm9rZTooYSxkLGgsZix2LE0sRCk9Pnt0cnl7cmV0dXJuIHliKGMpLGEuaW52b2tlKGgsZix2LE0sRCl9ZmluYWxseXtjLnNob3VsZENvYWxlc2NlUnVuQ2hhbmdlRGV0ZWN0aW9uJiZsKCksbkkoYyl9fSxvbkhhc1Rhc2s6KGEsZCxo'@;
put 'LGYpPT57YS5oYXNUYXNrKGgsZiksZD09PWgmJigibWljcm9UYXNrIj09Zi5jaGFuZ2U/KGMuX2hhc1BlbmRpbmdNaWNyb3Rhc2tzPWYubWljcm9UYXNrLE9TKGMpLExTKGMpKToibWFjcm9UYXNrIj09Zi5jaGFuZ2UmJihjLmhhc1BlbmRpbmdNYWNyb3Rhc2tzPWYubWFjcm9UYXNrKSl9LG9u'@;
put 'SGFuZGxlRXJyb3I6KGEsZCxoLGYpPT4oYS5oYW5kbGVFcnJvcihoLGYpLGMucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PmMub25FcnJvci5lbWl0KGYpKSwhMSl9KX0oaCl9c3RhdGljIGlzSW5Bbmd1bGFyWm9uZSgpe3JldHVybiB0eXBlb2YgWm9uZTwidSImJiEwPT09Wm9uZS5jdXJyZW50Lmdl'@;
put 'dCgiaXNBbmd1bGFyWm9uZSIpfXN0YXRpYyBhc3NlcnRJbkFuZ3VsYXJab25lKCl7aWYoIVdhLmlzSW5Bbmd1bGFyWm9uZSgpKXRocm93IG5ldyBRbig5MDksITEpfXN0YXRpYyBhc3NlcnROb3RJbkFuZ3VsYXJab25lKCl7aWYoV2EuaXNJbkFuZ3VsYXJab25lKCkpdGhyb3cgbmV3IFFuKDkw'@;
put 'OSwhMSl9cnVuKGwsYSxkKXtyZXR1cm4gdGhpcy5faW5uZXIucnVuKGwsYSxkKX1ydW5UYXNrKGwsYSxkLGgpe2NvbnN0IGY9dGhpcy5faW5uZXIsdj1mLnNjaGVkdWxlRXZlbnRUYXNrKCJOZ1pvbmVFdmVudDogIitoLGwsdXosdEksdEkpO3RyeXtyZXR1cm4gZi5ydW5UYXNrKHYsYSxkKX1m'@;
put 'aW5hbGx5e2YuY2FuY2VsVGFzayh2KX19cnVuR3VhcmRlZChsLGEsZCl7cmV0dXJuIHRoaXMuX2lubmVyLnJ1bkd1YXJkZWQobCxhLGQpfXJ1bk91dHNpZGVBbmd1bGFyKGwpe3JldHVybiB0aGlzLl9vdXRlci5ydW4obCl9fWNvbnN0IHV6PXt9O2Z1bmN0aW9uIExTKGMpe2lmKDA9PWMuX25l'@;
put 'c3RpbmcmJiFjLmhhc1BlbmRpbmdNaWNyb3Rhc2tzJiYhYy5pc1N0YWJsZSl0cnl7Yy5fbmVzdGluZysrLGMub25NaWNyb3Rhc2tFbXB0eS5lbWl0KG51bGwpfWZpbmFsbHl7aWYoYy5fbmVzdGluZy0tLCFjLmhhc1BlbmRpbmdNaWNyb3Rhc2tzKXRyeXtjLnJ1bk91dHNpZGVBbmd1bGFyKCgp'@;
put 'PT5jLm9uU3RhYmxlLmVtaXQobnVsbCkpfWZpbmFsbHl7Yy5pc1N0YWJsZT0hMH19fWZ1bmN0aW9uIE9TKGMpe2MuaGFzUGVuZGluZ01pY3JvdGFza3M9ISEoYy5faGFzUGVuZGluZ01pY3JvdGFza3N8fChjLnNob3VsZENvYWxlc2NlRXZlbnRDaGFuZ2VEZXRlY3Rpb258fGMuc2hvdWxkQ29h'@;
put 'bGVzY2VSdW5DaGFuZ2VEZXRlY3Rpb24pJiYtMSE9PWMubGFzdFJlcXVlc3RBbmltYXRpb25GcmFtZUlkKX1mdW5jdGlvbiB5YihjKXtjLl9uZXN0aW5nKyssYy5pc1N0YWJsZSYmKGMuaXNTdGFibGU9ITEsYy5vblVuc3RhYmxlLmVtaXQobnVsbCkpfWZ1bmN0aW9uIG5JKGMpe2MuX25lc3Rp'@;
put 'bmctLSxMUyhjKX1jbGFzcyBySXtjb25zdHJ1Y3Rvcigpe3RoaXMuaGFzUGVuZGluZ01pY3JvdGFza3M9ITEsdGhpcy5oYXNQZW5kaW5nTWFjcm90YXNrcz0hMSx0aGlzLmlzU3RhYmxlPSEwLHRoaXMub25VbnN0YWJsZT1uZXcgS3IsdGhpcy5vbk1pY3JvdGFza0VtcHR5PW5ldyBLcix0aGlz'@;
put 'Lm9uU3RhYmxlPW5ldyBLcix0aGlzLm9uRXJyb3I9bmV3IEtyfXJ1bihsLGEsZCl7cmV0dXJuIGwuYXBwbHkoYSxkKX1ydW5HdWFyZGVkKGwsYSxkKXtyZXR1cm4gbC5hcHBseShhLGQpfXJ1bk91dHNpZGVBbmd1bGFyKGwpe3JldHVybiBsKCl9cnVuVGFzayhsLGEsZCxoKXtyZXR1cm4gbC5h'@;
put 'cHBseShhLGQpfX12YXIgUTM9ZnVuY3Rpb24oYyl7cmV0dXJuIGNbYy5FYXJseVJlYWQ9MF09IkVhcmx5UmVhZCIsY1tjLldyaXRlPTFdPSJXcml0ZSIsY1tjLk1peGVkUmVhZFdyaXRlPTJdPSJNaXhlZFJlYWRXcml0ZSIsY1tjLlJlYWQ9M109IlJlYWQiLGN9KFEzfHx7fSk7Y29uc3QgUFM9'@;
put 'e2Rlc3Ryb3koKXt9fTtmdW5jdGlvbiBfYihjLGwpeyFsJiZmdW5jdGlvbiB3ZihjKXtpZighTXYoKSl0aHJvdyBuZXcgUW4oLTIwMywhMSl9KCk7Y29uc3QgYT1sPy5pbmplY3Rvcj8/ZmkoRHMpO2lmKCFmdW5jdGlvbiBjaChjKXtyZXR1cm4iYnJvd3NlciI9PT0oYz8/ZmkoRHMpKS5nZXQo'@;
put 'aW8pfShhKSlyZXR1cm4gUFM7YjIoIk5nQWZ0ZXJOZXh0UmVuZGVyIik7Y29uc3QgZD1hLmdldChFOCksaD1kLmhhbmRsZXI/Pz1uZXcgb0ksZj1sPy5waGFzZT8/UTMuTWl4ZWRSZWFkV3JpdGUsdj0oKT0+e2gudW5yZWdpc3RlcihEKSxNKCl9LE09YS5nZXQoazUpLm9uRGVzdHJveSh2KSxE'@;
put 'PXEwKGEsKCk9Pm5ldyBhSShmLCgpPT57digpLGMoKX0pKTtyZXR1cm4gaC5yZWdpc3RlcihEKSx7ZGVzdHJveTp2fX1jbGFzcyBhSXtjb25zdHJ1Y3RvcihsLGEpe3RoaXMucGhhc2U9bCx0aGlzLmNhbGxiYWNrRm49YSx0aGlzLnpvbmU9ZmkoV2EpLHRoaXMuZXJyb3JIYW5kbGVyPWZpKGcy'@;
put 'LHtvcHRpb25hbDohMH0pLGZpKGJiLHtvcHRpb25hbDohMH0pPy5ub3RpZnkoMSl9aW52b2tlKCl7dHJ5e3RoaXMuem9uZS5ydW5PdXRzaWRlQW5ndWxhcih0aGlzLmNhbGxiYWNrRm4pfWNhdGNoKGwpe3RoaXMuZXJyb3JIYW5kbGVyPy5oYW5kbGVFcnJvcihsKX19fWNsYXNzIG9Je2NvbnN0'@;
put 'cnVjdG9yKCl7dGhpcy5leGVjdXRpbmdDYWxsYmFja3M9ITEsdGhpcy5idWNrZXRzPXtbUTMuRWFybHlSZWFkXTpuZXcgU2V0LFtRMy5Xcml0ZV06bmV3IFNldCxbUTMuTWl4ZWRSZWFkV3JpdGVdOm5ldyBTZXQsW1EzLlJlYWRdOm5ldyBTZXR9LHRoaXMuZGVmZXJyZWRDYWxsYmFja3M9bmV3'@;
put 'IFNldH1yZWdpc3RlcihsKXsodGhpcy5leGVjdXRpbmdDYWxsYmFja3M/dGhpcy5kZWZlcnJlZENhbGxiYWNrczp0aGlzLmJ1Y2tldHNbbC5waGFzZV0pLmFkZChsKX11bnJlZ2lzdGVyKGwpe3RoaXMuYnVja2V0c1tsLnBoYXNlXS5kZWxldGUobCksdGhpcy5kZWZlcnJlZENhbGxiYWNrcy5k'@;
put 'ZWxldGUobCl9ZXhlY3V0ZSgpe3RoaXMuZXhlY3V0aW5nQ2FsbGJhY2tzPSEwO2Zvcihjb25zdCBsIG9mIE9iamVjdC52YWx1ZXModGhpcy5idWNrZXRzKSlmb3IoY29uc3QgYSBvZiBsKWEuaW52b2tlKCk7dGhpcy5leGVjdXRpbmdDYWxsYmFja3M9ITE7Zm9yKGNvbnN0IGwgb2YgdGhpcy5k'@;
put 'ZWZlcnJlZENhbGxiYWNrcyl0aGlzLmJ1Y2tldHNbbC5waGFzZV0uYWRkKGwpO3RoaXMuZGVmZXJyZWRDYWxsYmFja3MuY2xlYXIoKX1kZXN0cm95KCl7Zm9yKGNvbnN0IGwgb2YgT2JqZWN0LnZhbHVlcyh0aGlzLmJ1Y2tldHMpKWwuY2xlYXIoKTt0aGlzLmRlZmVycmVkQ2FsbGJhY2tzLmNs'@;
put 'ZWFyKCl9fWxldCBFOD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5oYW5kbGVyPW51bGwsdGhpcy5pbnRlcm5hbENhbGxiYWNrcz1bXX1leGVjdXRlKCl7dGhpcy5leGVjdXRlSW50ZXJuYWxDYWxsYmFja3MoKSx0aGlzLmhhbmRsZXI/LmV4ZWN1dGUoKX1leGVjdXRlSW50ZXJu'@;
put 'YWxDYWxsYmFja3MoKXtjb25zdCBhPVsuLi50aGlzLmludGVybmFsQ2FsbGJhY2tzXTt0aGlzLmludGVybmFsQ2FsbGJhY2tzLmxlbmd0aD0wO2Zvcihjb25zdCBkIG9mIGEpZCgpfW5nT25EZXN0cm95KCl7dGhpcy5oYW5kbGVyPy5kZXN0cm95KCksdGhpcy5oYW5kbGVyPW51bGwsdGhpcy5p'@;
put 'bnRlcm5hbENhbGxiYWNrcy5sZW5ndGg9MH1zdGF0aWN7dGhpcy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLHByb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6KCk9Pm5ldyBjfSl9fXJldHVybiBjfSkoKTtmdW5jdGlvbiBDYihjLGwsYSl7bGV0IGQ9YT9jLnN0eWxlczpudWxsLGg9YT9jLmNsYXNz'@;
put 'ZXM6bnVsbCxmPTA7aWYobnVsbCE9PWwpZm9yKGxldCB2PTA7djxsLmxlbmd0aDt2Kyspe2NvbnN0IE09bFt2XTsibnVtYmVyIj09dHlwZW9mIE0/Zj1NOjE9PWY/aD1vZChoLE0pOjI9PWYmJihkPW9kKGQsTSsiOiAiK2xbKyt2XSsiOyIpKX1hP2Muc3R5bGVzPWQ6Yy5zdHlsZXNXaXRob3V0'@;
put 'SG9zdD1kLGE/Yy5jbGFzc2VzPWg6Yy5jbGFzc2VzV2l0aG91dEhvc3Q9aH1jbGFzcyBjSSBleHRlbmRzIFc1e2NvbnN0cnVjdG9yKGwpe3N1cGVyKCksdGhpcy5uZ01vZHVsZT1sfXJlc29sdmVDb21wb25lbnRGYWN0b3J5KGwpe2NvbnN0IGE9Vm8obCk7cmV0dXJuIG5ldyBrOChhLHRoaXMu'@;
put 'bmdNb2R1bGUpfX1mdW5jdGlvbiB1SShjKXtjb25zdCBsPVtdO2Zvcihjb25zdCBhIGluIGMpe2lmKCFjLmhhc093blByb3BlcnR5KGEpKWNvbnRpbnVlO2NvbnN0IGQ9Y1thXTt2b2lkIDAhPT1kJiZsLnB1c2goe3Byb3BOYW1lOkFycmF5LmlzQXJyYXkoZCk/ZFswXTpkLHRlbXBsYXRlTmFt'@;
put 'ZTphfSl9cmV0dXJuIGx9Y2xhc3MgU2J7Y29uc3RydWN0b3IobCxhKXt0aGlzLmluamVjdG9yPWwsdGhpcy5wYXJlbnRJbmplY3Rvcj1hfWdldChsLGEsZCl7ZD1vNShkKTtjb25zdCBoPXRoaXMuaW5qZWN0b3IuZ2V0KGwsUlMsZCk7cmV0dXJuIGghPT1SU3x8YT09PVJTP2g6dGhpcy5wYXJl'@;
put 'bnRJbmplY3Rvci5nZXQobCxhLGQpfX1jbGFzcyBrOCBleHRlbmRzIFFEe2dldCBpbnB1dHMoKXtjb25zdCBsPXRoaXMuY29tcG9uZW50RGVmLGE9bC5pbnB1dFRyYW5zZm9ybXMsZD11SShsLmlucHV0cyk7aWYobnVsbCE9PWEpZm9yKGNvbnN0IGggb2YgZClhLmhhc093blByb3BlcnR5KGgu'@;
put 'cHJvcE5hbWUpJiYoaC50cmFuc2Zvcm09YVtoLnByb3BOYW1lXSk7cmV0dXJuIGR9Z2V0IG91dHB1dHMoKXtyZXR1cm4gdUkodGhpcy5jb21wb25lbnREZWYub3V0cHV0cyl9Y29uc3RydWN0b3IobCxhKXtzdXBlcigpLHRoaXMuY29tcG9uZW50RGVmPWwsdGhpcy5uZ01vZHVsZT1hLHRoaXMu'@;
put 'Y29tcG9uZW50VHlwZT1sLnR5cGUsdGhpcy5zZWxlY3Rvcj1mdW5jdGlvbiBCdyhjKXtyZXR1cm4gYy5tYXAoVncpLmpvaW4oIiwiKX0obC5zZWxlY3RvcnMpLHRoaXMubmdDb250ZW50U2VsZWN0b3JzPWwubmdDb250ZW50U2VsZWN0b3JzP2wubmdDb250ZW50U2VsZWN0b3JzOltdLHRoaXMu'@;
put 'aXNCb3VuZFRvTW9kdWxlPSEhYX1jcmVhdGUobCxhLGQsaCl7Y29uc3QgZj1fZShudWxsKTt0cnl7bGV0IHY9KGg9aHx8dGhpcy5uZ01vZHVsZSlpbnN0YW5jZW9mIGhjP2g6aD8uaW5qZWN0b3I7diYmbnVsbCE9PXRoaXMuY29tcG9uZW50RGVmLmdldFN0YW5kYWxvbmVJbmplY3RvciYmKHY9'@;
put 'dGhpcy5jb21wb25lbnREZWYuZ2V0U3RhbmRhbG9uZUluamVjdG9yKHYpfHx2KTtjb25zdCBNPXY/bmV3IFNiKGwsdik6bCxEPU0uZ2V0KHg4LG51bGwpO2lmKG51bGw9PT1EKXRocm93IG5ldyBRbig0MDcsITEpO2NvbnN0IFo9TS5nZXQobHosbnVsbCksYmU9e3JlbmRlcmVyRmFjdG9yeTpE'@;
put 'LHNhbml0aXplcjpaLGlubGluZUVmZmVjdFJ1bm5lcjpudWxsLGFmdGVyUmVuZGVyRXZlbnRNYW5hZ2VyOk0uZ2V0KEU4LG51bGwpLGNoYW5nZURldGVjdGlvblNjaGVkdWxlcjpNLmdldChiYixudWxsKX0sRWU9RC5jcmVhdGVSZW5kZXJlcihudWxsLHRoaXMuY29tcG9uZW50RGVmKSxCZT10'@;
put 'aGlzLmNvbXBvbmVudERlZi5zZWxlY3RvcnNbMF1bMF18fCJkaXYiLHFlPWQ/ZnVuY3Rpb24gYWooYyxsLGEsZCl7Y29uc3QgZj1kLmdldChqaywhMSl8fGE9PT1Kcy5TaGFkb3dEb20sdj1jLnNlbGVjdFJvb3RFbGVtZW50KGwsZik7cmV0dXJuIGZ1bmN0aW9uIG9qKGMpe0VEKGMpfSh2KSx2'@;
put 'fShFZSxkLHRoaXMuY29tcG9uZW50RGVmLmVuY2Fwc3VsYXRpb24sTSk6ejQoRWUsQmUsZnVuY3Rpb24gdnooYyl7Y29uc3QgbD1jLnRvTG93ZXJDYXNlKCk7cmV0dXJuInN2ZyI9PT1sPyJzdmciOiJtYXRoIj09PWw/Im1hdGgiOm51bGx9KEJlKSk7bGV0IHJ0PTUxMjt0aGlzLmNvbXBvbmVu'@;
put 'dERlZi5zaWduYWxzP3J0fD00MDk2OnRoaXMuY29tcG9uZW50RGVmLm9uUHVzaHx8KHJ0fD0xNik7bGV0IHB0PW51bGw7bnVsbCE9PXFlJiYocHQ9UkMocWUsTSwhMCkpO2NvbnN0IGR0PW1TKDAsbnVsbCxudWxsLDEsMCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCksSnQ9bGIobnVs'@;
put 'bCxkdCxudWxsLHJ0LG51bGwsbnVsbCxiZSxFZSxNLG51bGwscHQpO2xldCB2bixDbjtLNihKdCk7dHJ5e2NvbnN0IHRuPXRoaXMuY29tcG9uZW50RGVmO2xldCBNbixDcj1udWxsO3RuLmZpbmRIb3N0RGlyZWN0aXZlRGVmcz8oTW49W10sQ3I9bmV3IE1hcCx0bi5maW5kSG9zdERpcmVjdGl2'@;
put 'ZURlZnModG4sTW4sQ3IpLE1uLnB1c2godG4pKTpNbj1bdG5dO2NvbnN0IEdyPWZ1bmN0aW9uIHl6KGMsbCl7Y29uc3QgYT1jW0tpXSxkPXdvO3JldHVybiBjW2RdPWwsajUoYSxkLDIsIiNob3N0IixudWxsKX0oSnQscWUpLG1yPWZ1bmN0aW9uIF96KGMsbCxhLGQsaCxmLHYpe2NvbnN0IE09'@;
put 'aFtLaV07IWZ1bmN0aW9uIHd6KGMsbCxhLGQpe2Zvcihjb25zdCBoIG9mIGMpbC5tZXJnZWRBdHRycz12ZihsLm1lcmdlZEF0dHJzLGguaG9zdEF0dHJzKTtudWxsIT09bC5tZXJnZWRBdHRycyYmKENiKGwsbC5tZXJnZWRBdHRycywhMCksbnVsbCE9PWEmJkNEKGQsYSxsKSl9KGQsYyxsLHYp'@;
put 'O2xldCBEPW51bGw7bnVsbCE9PWwmJihEPVJDKGwsaFtwY10pKTtjb25zdCBaPWYucmVuZGVyZXJGYWN0b3J5LmNyZWF0ZVJlbmRlcmVyKGwsYSk7bGV0IHJlPTE2O2Euc2lnbmFscz9yZT00MDk2OmEub25QdXNoJiYocmU9NjQpO2NvbnN0IGNlPWxiKGgsY2IoYSksbnVsbCxyZSxoW2MuaW5k'@;
put 'ZXhdLGMsZixaLG51bGwsbnVsbCxEKTtyZXR1cm4gTS5maXJzdENyZWF0ZVBhc3MmJnlTKE0sYyxkLmxlbmd0aC0xKSxmOChoLGNlKSxoW2MuaW5kZXhdPWNlfShHcixxZSx0bixNbixKdCxiZSxFZSk7Q249WTYoZHQsd28pLHFlJiZmdW5jdGlvbiBTeihjLGwsYSxkKXtpZihkKW00KGMsYSxb'@;
put 'Im5nLXZlcnNpb24iLCIxNy4zLjEyIl0pO2Vsc2V7Y29uc3R7YXR0cnM6aCxjbGFzc2VzOmZ9PWZ1bmN0aW9uIEthKGMpe2NvbnN0IGw9W10sYT1bXTtsZXQgZD0xLGg9Mjtmb3IoO2Q8Yy5sZW5ndGg7KXtsZXQgZj1jW2RdO2lmKCJzdHJpbmciPT10eXBlb2YgZikyPT09aD8iIiE9PWYmJmwu'@;
put 'cHVzaChmLGNbKytkXSk6OD09PWgmJmEucHVzaChmKTtlbHNle2lmKCFNYyhoKSlicmVhaztoPWZ9ZCsrfXJldHVybnthdHRyczpsLGNsYXNzZXM6YX19KGwuc2VsZWN0b3JzWzBdKTtoJiZtNChjLGEsaCksZiYmZi5sZW5ndGg+MCYmd0QoYyxhLGYuam9pbigiICIpKX19KEVlLHRuLHFlLGQp'@;
put 'LHZvaWQgMCE9PWEmJmZ1bmN0aW9uIE16KGMsbCxhKXtjb25zdCBkPWMucHJvamVjdGlvbj1bXTtmb3IobGV0IGg9MDtoPGwubGVuZ3RoO2grKyl7Y29uc3QgZj1hW2hdO2QucHVzaChudWxsIT1mP0FycmF5LmZyb20oZik6bnVsbCl9fShDbix0aGlzLm5nQ29udGVudFNlbGVjdG9ycyxhKSx2'@;
put 'bj1mdW5jdGlvbiBDeihjLGwsYSxkLGgsZil7Y29uc3Qgdj11bCgpLE09aFtLaV0sRD1MMCh2LGgpO2JTKE0saCx2LGEsbnVsbCxkKTtmb3IobGV0IHJlPTA7cmU8YS5sZW5ndGg7cmUrKylqdShENChoLE0sdi5kaXJlY3RpdmVTdGFydCtyZSx2KSxoKTtPRChNLGgsdiksRCYmanUoRCxoKTtj'@;
put 'b25zdCBaPUQ0KGgsTSx2LmRpcmVjdGl2ZVN0YXJ0K3YuY29tcG9uZW50T2Zmc2V0LHYpO2lmKGNbY2xdPWhbY2xdPVosbnVsbCE9PWYpZm9yKGNvbnN0IHJlIG9mIGYpcmUoWixsKTtyZXR1cm4gZlMoTSx2LGgpLFp9KG1yLHRuLE1uLENyLEp0LFt4el0pLFNTKGR0LEp0LG51bGwpfWZpbmFs'@;
put 'bHl7dzUoKX1yZXR1cm4gbmV3IGJ6KHRoaXMuY29tcG9uZW50VHlwZSx2bixMNChDbixKdCksSnQsQ24pfWZpbmFsbHl7X2UoZil9fX1jbGFzcyBieiBleHRlbmRzIHJ6e2NvbnN0cnVjdG9yKGwsYSxkLGgsZil7c3VwZXIoKSx0aGlzLmxvY2F0aW9uPWQsdGhpcy5fcm9vdExWaWV3PWgsdGhp'@;
put 'cy5fdE5vZGU9Zix0aGlzLnByZXZpb3VzSW5wdXRWYWx1ZXM9bnVsbCx0aGlzLmluc3RhbmNlPWEsdGhpcy5ob3N0Vmlldz10aGlzLmNoYW5nZURldGVjdG9yUmVmPW5ldyBfOChoLHZvaWQgMCwhMSksdGhpcy5jb21wb25lbnRUeXBlPWx9c2V0SW5wdXQobCxhKXtjb25zdCBkPXRoaXMuX3RO'@;
put 'b2RlLmlucHV0cztsZXQgaDtpZihudWxsIT09ZCYmKGg9ZFtsXSkpe2lmKHRoaXMucHJldmlvdXNJbnB1dFZhbHVlcz8/PW5ldyBNYXAsdGhpcy5wcmV2aW91c0lucHV0VmFsdWVzLmhhcyhsKSYmT2JqZWN0LmlzKHRoaXMucHJldmlvdXNJbnB1dFZhbHVlcy5nZXQobCksYSkpcmV0dXJuO2Nv'@;
put 'bnN0IGY9dGhpcy5fcm9vdExWaWV3O0NTKGZbS2ldLGYsaCxsLGEpLHRoaXMucHJldmlvdXNJbnB1dFZhbHVlcy5zZXQobCxhKSx5OChPMSh0aGlzLl90Tm9kZS5pbmRleCxmKSl9fWdldCBpbmplY3Rvcigpe3JldHVybiBuZXcgQnUodGhpcy5fdE5vZGUsdGhpcy5fcm9vdExWaWV3KX1kZXN0'@;
put 'cm95KCl7dGhpcy5ob3N0Vmlldy5kZXN0cm95KCl9b25EZXN0cm95KGwpe3RoaXMuaG9zdFZpZXcub25EZXN0cm95KGwpfX1mdW5jdGlvbiB4eigpe2NvbnN0IGM9dWwoKTtSdihkaSgpW0tpXSxjKX1sZXQgRG89KCgpPT57Y2xhc3MgY3tzdGF0aWN7dGhpcy5fX05HX0VMRU1FTlRfSURfXz1F'@;
put 'en19cmV0dXJuIGN9KSgpO2Z1bmN0aW9uIEV6KCl7cmV0dXJuIGZJKHVsKCksZGkoKSl9Y29uc3QgVHo9RG8sZEk9Y2xhc3MgZXh0ZW5kcyBUentjb25zdHJ1Y3RvcihsLGEsZCl7c3VwZXIoKSx0aGlzLl9sQ29udGFpbmVyPWwsdGhpcy5faG9zdFROb2RlPWEsdGhpcy5faG9zdExWaWV3PWR9'@;
put 'Z2V0IGVsZW1lbnQoKXtyZXR1cm4gTDQodGhpcy5faG9zdFROb2RlLHRoaXMuX2hvc3RMVmlldyl9Z2V0IGluamVjdG9yKCl7cmV0dXJuIG5ldyBCdSh0aGlzLl9ob3N0VE5vZGUsdGhpcy5faG9zdExWaWV3KX1nZXQgcGFyZW50SW5qZWN0b3IoKXtjb25zdCBsPUM1KHRoaXMuX2hvc3RUTm9k'@;
put 'ZSx0aGlzLl9ob3N0TFZpZXcpO2lmKFB2KGwpKXtjb25zdCBhPUo2KGwsdGhpcy5faG9zdExWaWV3KSxkPVg2KGwpO3JldHVybiBuZXcgQnUoYVtLaV0uZGF0YVtkKzhdLGEpfXJldHVybiBuZXcgQnUobnVsbCx0aGlzLl9ob3N0TFZpZXcpfWNsZWFyKCl7Zm9yKDt0aGlzLmxlbmd0aD4wOyl0'@;
put 'aGlzLnJlbW92ZSh0aGlzLmxlbmd0aC0xKX1nZXQobCl7Y29uc3QgYT1oSSh0aGlzLl9sQ29udGFpbmVyKTtyZXR1cm4gbnVsbCE9PWEmJmFbbF18fG51bGx9Z2V0IGxlbmd0aCgpe3JldHVybiB0aGlzLl9sQ29udGFpbmVyLmxlbmd0aC1nY31jcmVhdGVFbWJlZGRlZFZpZXcobCxhLGQpe2xl'@;
put 'dCBoLGY7Im51bWJlciI9PXR5cGVvZiBkP2g9ZDpudWxsIT1kJiYoaD1kLmluZGV4LGY9ZC5pbmplY3Rvcik7Y29uc3QgTT1sLmNyZWF0ZUVtYmVkZGVkVmlld0ltcGwoYXx8e30sZixudWxsKTtyZXR1cm4gdGhpcy5pbnNlcnRJbXBsKE0saCxVNSh0aGlzLl9ob3N0VE5vZGUsbnVsbCkpLE19'@;
put 'Y3JlYXRlQ29tcG9uZW50KGwsYSxkLGgsZil7Y29uc3Qgdj1sJiYhZnVuY3Rpb24gemkoYyl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIGN9KGwpO2xldCBNO2lmKHYpTT1hO2Vsc2V7Y29uc3QgQmU9YXx8e307TT1CZS5pbmRleCxkPUJlLmluamVjdG9yLGg9QmUucHJvamVjdGFibGVOb2Rl'@;
put 'cyxmPUJlLmVudmlyb25tZW50SW5qZWN0b3J8fEJlLm5nTW9kdWxlUmVmfWNvbnN0IEQ9dj9sOm5ldyBrOChWbyhsKSksWj1kfHx0aGlzLnBhcmVudEluamVjdG9yO2lmKCFmJiZudWxsPT1ELm5nTW9kdWxlKXtjb25zdCBxZT0odj9aOnRoaXMucGFyZW50SW5qZWN0b3IpLmdldChoYyxudWxs'@;
put 'KTtxZSYmKGY9cWUpfVZvKEQuY29tcG9uZW50VHlwZT8/e30pO2NvbnN0IEVlPUQuY3JlYXRlKFosaCxudWxsLGYpO3JldHVybiB0aGlzLmluc2VydEltcGwoRWUuaG9zdFZpZXcsTSxVNSh0aGlzLl9ob3N0VE5vZGUsbnVsbCkpLEVlfWluc2VydChsLGEpe3JldHVybiB0aGlzLmluc2VydElt'@;
put 'cGwobCxhLCEwKX1pbnNlcnRJbXBsKGwsYSxkKXtjb25zdCBoPWwuX2xWaWV3O2lmKGZ1bmN0aW9uIEpBKGMpe3JldHVybiBIdShjW2ZjXSl9KGgpKXtjb25zdCBNPXRoaXMuaW5kZXhPZihsKTtpZigtMSE9PU0pdGhpcy5kZXRhY2goTSk7ZWxzZXtjb25zdCBEPWhbZmNdLFo9bmV3IGRJKEQs'@;
put 'RFtyY10sRFtmY10pO1ouZGV0YWNoKFouaW5kZXhPZihsKSl9fWNvbnN0IGY9dGhpcy5fYWRqdXN0SW5kZXgoYSksdj10aGlzLl9sQ29udGFpbmVyO3JldHVybiB2OCh2LGgsZixkKSxsLmF0dGFjaFRvVmlld0NvbnRhaW5lclJlZigpLFBsKFZTKHYpLGYsbCksbH1tb3ZlKGwsYSl7cmV0dXJu'@;
put 'IHRoaXMuaW5zZXJ0KGwsYSl9aW5kZXhPZihsKXtjb25zdCBhPWhJKHRoaXMuX2xDb250YWluZXIpO3JldHVybiBudWxsIT09YT9hLmluZGV4T2YobCk6LTF9cmVtb3ZlKGwpe2NvbnN0IGE9dGhpcy5fYWRqdXN0SW5kZXgobCwtMSksZD1zOCh0aGlzLl9sQ29udGFpbmVyLGEpO2QmJihPdShW'@;
put 'Uyh0aGlzLl9sQ29udGFpbmVyKSxhKSxVNChkW0tpXSxkKSl9ZGV0YWNoKGwpe2NvbnN0IGE9dGhpcy5fYWRqdXN0SW5kZXgobCwtMSksZD1zOCh0aGlzLl9sQ29udGFpbmVyLGEpO3JldHVybiBkJiZudWxsIT1PdShWUyh0aGlzLl9sQ29udGFpbmVyKSxhKT9uZXcgXzgoZCk6bnVsbH1fYWRq'@;
put 'dXN0SW5kZXgobCxhPTApe3JldHVybiBsPz90aGlzLmxlbmd0aCthfX07ZnVuY3Rpb24gaEkoYyl7cmV0dXJuIGNbOF19ZnVuY3Rpb24gVlMoYyl7cmV0dXJuIGNbOF18fChjWzhdPVtdKX1mdW5jdGlvbiBmSShjLGwpe2xldCBhO2NvbnN0IGQ9bFtjLmluZGV4XTtyZXR1cm4gSHUoZCk/YT1k'@;
put 'OihhPXdTKGQsbCxudWxsLGMpLGxbYy5pbmRleF09YSxmOChsLGEpKSxCUyhhLGwsYyxkKSxuZXcgZEkoYSxjLGwpfWxldCBCUz1mdW5jdGlvbiBqUyhjLGwsYSxkKXtpZihjW3Z1XSlyZXR1cm47bGV0IGg7aD04JmEudHlwZT9DbChkKTpmdW5jdGlvbiBBeihjLGwpe2NvbnN0IGE9Y1tib10s'@;
put 'ZD1hLmNyZWF0ZUNvbW1lbnQoIiIpLGg9TDAobCxjKTtyZXR1cm4gWjQoYSxxMyhhLGgpLGQsZnVuY3Rpb24gYVMoYyxsKXtyZXR1cm4gYy5uZXh0U2libGluZyhsKX0oYSxoKSwhMSksZH0obCxhKSxjW3Z1XT1ofSxNYj0oKT0+ITE7Y2xhc3MgelN7Y29uc3RydWN0b3IobCl7dGhpcy5xdWVy'@;
put 'eUxpc3Q9bCx0aGlzLm1hdGNoZXM9bnVsbH1jbG9uZSgpe3JldHVybiBuZXcgelModGhpcy5xdWVyeUxpc3QpfXNldERpcnR5KCl7dGhpcy5xdWVyeUxpc3Quc2V0RGlydHkoKX19Y2xhc3MgeGJ7Y29uc3RydWN0b3IobD1bXSl7dGhpcy5xdWVyaWVzPWx9Y3JlYXRlRW1iZWRkZWRWaWV3KGwp'@;
put 'e2NvbnN0IGE9bC5xdWVyaWVzO2lmKG51bGwhPT1hKXtjb25zdCBkPW51bGwhPT1sLmNvbnRlbnRRdWVyaWVzP2wuY29udGVudFF1ZXJpZXNbMF06YS5sZW5ndGgsaD1bXTtmb3IobGV0IGY9MDtmPGQ7ZisrKXtjb25zdCB2PWEuZ2V0QnlJbmRleChmKTtoLnB1c2godGhpcy5xdWVyaWVzW3Yu'@;
put 'aW5kZXhJbkRlY2xhcmF0aW9uVmlld10uY2xvbmUoKSl9cmV0dXJuIG5ldyB4YihoKX1yZXR1cm4gbnVsbH1pbnNlcnRWaWV3KGwpe3RoaXMuZGlydHlRdWVyaWVzV2l0aE1hdGNoZXMobCl9ZGV0YWNoVmlldyhsKXt0aGlzLmRpcnR5UXVlcmllc1dpdGhNYXRjaGVzKGwpfWZpbmlzaFZpZXdD'@;
put 'cmVhdGlvbihsKXt0aGlzLmRpcnR5UXVlcmllc1dpdGhNYXRjaGVzKGwpfWRpcnR5UXVlcmllc1dpdGhNYXRjaGVzKGwpe2ZvcihsZXQgYT0wO2E8dGhpcy5xdWVyaWVzLmxlbmd0aDthKyspbnVsbCE9PVlTKGwsYSkubWF0Y2hlcyYmdGhpcy5xdWVyaWVzW2FdLnNldERpcnR5KCl9fWNsYXNz'@;
put 'IHBJe2NvbnN0cnVjdG9yKGwsYSxkPW51bGwpe3RoaXMuZmxhZ3M9YSx0aGlzLnJlYWQ9ZCx0aGlzLnByZWRpY2F0ZT0ic3RyaW5nIj09dHlwZW9mIGw/ZnVuY3Rpb24geUkoYyl7cmV0dXJuIGMuc3BsaXQoIiwiKS5tYXAobD0+bC50cmltKCkpfShsKTpsfX1jbGFzcyBVU3tjb25zdHJ1Y3Rv'@;
put 'cihsPVtdKXt0aGlzLnF1ZXJpZXM9bH1lbGVtZW50U3RhcnQobCxhKXtmb3IobGV0IGQ9MDtkPHRoaXMucXVlcmllcy5sZW5ndGg7ZCsrKXRoaXMucXVlcmllc1tkXS5lbGVtZW50U3RhcnQobCxhKX1lbGVtZW50RW5kKGwpe2ZvcihsZXQgYT0wO2E8dGhpcy5xdWVyaWVzLmxlbmd0aDthKysp'@;
put 'dGhpcy5xdWVyaWVzW2FdLmVsZW1lbnRFbmQobCl9ZW1iZWRkZWRUVmlldyhsKXtsZXQgYT1udWxsO2ZvcihsZXQgZD0wO2Q8dGhpcy5sZW5ndGg7ZCsrKXtjb25zdCBoPW51bGwhPT1hP2EubGVuZ3RoOjAsZj10aGlzLmdldEJ5SW5kZXgoZCkuZW1iZWRkZWRUVmlldyhsLGgpO2YmJihmLmlu'@;
put 'ZGV4SW5EZWNsYXJhdGlvblZpZXc9ZCxudWxsIT09YT9hLnB1c2goZik6YT1bZl0pfXJldHVybiBudWxsIT09YT9uZXcgVVMoYSk6bnVsbH10ZW1wbGF0ZShsLGEpe2ZvcihsZXQgZD0wO2Q8dGhpcy5xdWVyaWVzLmxlbmd0aDtkKyspdGhpcy5xdWVyaWVzW2RdLnRlbXBsYXRlKGwsYSl9Z2V0'@;
put 'QnlJbmRleChsKXtyZXR1cm4gdGhpcy5xdWVyaWVzW2xdfWdldCBsZW5ndGgoKXtyZXR1cm4gdGhpcy5xdWVyaWVzLmxlbmd0aH10cmFjayhsKXt0aGlzLnF1ZXJpZXMucHVzaChsKX19Y2xhc3MgWlN7Y29uc3RydWN0b3IobCxhPS0xKXt0aGlzLm1ldGFkYXRhPWwsdGhpcy5tYXRjaGVzPW51'@;
put 'bGwsdGhpcy5pbmRleEluRGVjbGFyYXRpb25WaWV3PS0xLHRoaXMuY3Jvc3Nlc05nVGVtcGxhdGU9ITEsdGhpcy5fYXBwbGllc1RvTmV4dE5vZGU9ITAsdGhpcy5fZGVjbGFyYXRpb25Ob2RlSW5kZXg9YX1lbGVtZW50U3RhcnQobCxhKXt0aGlzLmlzQXBwbHlpbmdUb05vZGUoYSkmJnRoaXMu'@;
put 'bWF0Y2hUTm9kZShsLGEpfWVsZW1lbnRFbmQobCl7dGhpcy5fZGVjbGFyYXRpb25Ob2RlSW5kZXg9PT1sLmluZGV4JiYodGhpcy5fYXBwbGllc1RvTmV4dE5vZGU9ITEpfXRlbXBsYXRlKGwsYSl7dGhpcy5lbGVtZW50U3RhcnQobCxhKX1lbWJlZGRlZFRWaWV3KGwsYSl7cmV0dXJuIHRoaXMu'@;
put 'aXNBcHBseWluZ1RvTm9kZShsKT8odGhpcy5jcm9zc2VzTmdUZW1wbGF0ZT0hMCx0aGlzLmFkZE1hdGNoKC1sLmluZGV4LGEpLG5ldyBaUyh0aGlzLm1ldGFkYXRhKSk6bnVsbH1pc0FwcGx5aW5nVG9Ob2RlKGwpe2lmKHRoaXMuX2FwcGxpZXNUb05leHROb2RlJiYxJn50aGlzLm1ldGFkYXRh'@;
put 'LmZsYWdzKXtjb25zdCBhPXRoaXMuX2RlY2xhcmF0aW9uTm9kZUluZGV4O2xldCBkPWwucGFyZW50O2Zvcig7bnVsbCE9PWQmJjgmZC50eXBlJiZkLmluZGV4IT09YTspZD1kLnBhcmVudDtyZXR1cm4gYT09PShudWxsIT09ZD9kLmluZGV4Oi0xKX1yZXR1cm4gdGhpcy5fYXBwbGllc1RvTmV4'@;
put 'dE5vZGV9bWF0Y2hUTm9kZShsLGEpe2NvbnN0IGQ9dGhpcy5tZXRhZGF0YS5wcmVkaWNhdGU7aWYoQXJyYXkuaXNBcnJheShkKSlmb3IobGV0IGg9MDtoPGQubGVuZ3RoO2grKyl7Y29uc3QgZj1kW2hdO3RoaXMubWF0Y2hUTm9kZVdpdGhSZWFkT3B0aW9uKGwsYSxSeihhLGYpKSx0aGlzLm1h'@;
put 'dGNoVE5vZGVXaXRoUmVhZE9wdGlvbihsLGEsQnYoYSxsLGYsITEsITEpKX1lbHNlIGQ9PT1TbD80JmEudHlwZSYmdGhpcy5tYXRjaFROb2RlV2l0aFJlYWRPcHRpb24obCxhLC0xKTp0aGlzLm1hdGNoVE5vZGVXaXRoUmVhZE9wdGlvbihsLGEsQnYoYSxsLGQsITEsITEpKX1tYXRjaFROb2Rl'@;
put 'V2l0aFJlYWRPcHRpb24obCxhLGQpe2lmKG51bGwhPT1kKXtjb25zdCBoPXRoaXMubWV0YWRhdGEucmVhZDtpZihudWxsIT09aClpZihoPT09Sml8fGg9PT1Eb3x8aD09PVNsJiY0JmEudHlwZSl0aGlzLmFkZE1hdGNoKGEuaW5kZXgsLTIpO2Vsc2V7Y29uc3QgZj1CdihhLGwsaCwhMSwhMSk7'@;
put 'bnVsbCE9PWYmJnRoaXMuYWRkTWF0Y2goYS5pbmRleCxmKX1lbHNlIHRoaXMuYWRkTWF0Y2goYS5pbmRleCxkKX19YWRkTWF0Y2gobCxhKXtudWxsPT09dGhpcy5tYXRjaGVzP3RoaXMubWF0Y2hlcz1bbCxhXTp0aGlzLm1hdGNoZXMucHVzaChsLGEpfX1mdW5jdGlvbiBSeihjLGwpe2NvbnN0'@;
put 'IGE9Yy5sb2NhbE5hbWVzO2lmKG51bGwhPT1hKWZvcihsZXQgZD0wO2Q8YS5sZW5ndGg7ZCs9MilpZihhW2RdPT09bClyZXR1cm4gYVtkKzFdO3JldHVybiBudWxsfWZ1bmN0aW9uIEx6KGMsbCxhLGQpe3JldHVybi0xPT09YT9mdW5jdGlvbiBnSShjLGwpe3JldHVybiAxMSZjLnR5cGU/TDQo'@;
put 'YyxsKTo0JmMudHlwZT9mYihjLGwpOm51bGx9KGwsYyk6LTI9PT1hP2Z1bmN0aW9uIFdTKGMsbCxhKXtyZXR1cm4gYT09PUppP0w0KGwsYyk6YT09PVNsP2ZiKGwsYyk6YT09PURvP2ZJKGwsYyk6dm9pZCAwfShjLGwsZCk6RDQoYyxjW0tpXSxhLGwpfWZ1bmN0aW9uIFk1KGMsbCxhLGQpe2Nv'@;
put 'bnN0IGg9bFt1ZF0ucXVlcmllc1tkXTtpZihudWxsPT09aC5tYXRjaGVzKXtjb25zdCBmPWMuZGF0YSx2PWEubWF0Y2hlcyxNPVtdO2ZvcihsZXQgRD0wO251bGwhPT12JiZEPHYubGVuZ3RoO0QrPTIpe2NvbnN0IFo9dltEXTtNLnB1c2goWjwwP251bGw6THoobCxmW1pdLHZbRCsxXSxhLm1l'@;
put 'dGFkYXRhLnJlYWQpKX1oLm1hdGNoZXM9TX1yZXR1cm4gaC5tYXRjaGVzfWZ1bmN0aW9uIEQ4KGMsbCxhLGQpe2NvbnN0IGg9Yy5xdWVyaWVzLmdldEJ5SW5kZXgoYSksZj1oLm1hdGNoZXM7aWYobnVsbCE9PWYpe2NvbnN0IHY9WTUoYyxsLGgsYSk7Zm9yKGxldCBNPTA7TTxmLmxlbmd0aDtN'@;
put 'Kz0yKXtjb25zdCBEPWZbTV07aWYoRD4wKWQucHVzaCh2W00vMl0pO2Vsc2V7Y29uc3QgWj1mW00rMV0scmU9bFstRF07Zm9yKGxldCBjZT1nYztjZTxyZS5sZW5ndGg7Y2UrKyl7Y29uc3QgYmU9cmVbY2VdO2JlW1M0XT09PWJlW2ZjXSYmRDgoYmVbS2ldLGJlLFosZCl9aWYobnVsbCE9PXJl'@;
put 'W1YzXSl7Y29uc3QgY2U9cmVbVjNdO2ZvcihsZXQgYmU9MDtiZTxjZS5sZW5ndGg7YmUrKyl7Y29uc3QgRWU9Y2VbYmVdO0Q4KEVlW0tpXSxFZSxaLGQpfX19fX1yZXR1cm4gZH1mdW5jdGlvbiBtSShjLGwsYSl7Y29uc3QgZD1uZXcgZmQoISg0Jn5hKSk7cmV0dXJuIGZ1bmN0aW9uIGtEKGMs'@;
put 'bCxhLGQpe2NvbnN0IGg9TkQobCk7aC5wdXNoKGEpLGMuZmlyc3RDcmVhdGVQYXNzJiZwOChjKS5wdXNoKGQsaC5sZW5ndGgtMSl9KGMsbCxkLGQuZGVzdHJveSksKGxbdWRdPz89bmV3IHhiKS5xdWVyaWVzLnB1c2gobmV3IHpTKGQpKS0xfWZ1bmN0aW9uIF9JKGMsbCxhKXtudWxsPT09Yy5x'@;
put 'dWVyaWVzJiYoYy5xdWVyaWVzPW5ldyBVUyksYy5xdWVyaWVzLnRyYWNrKG5ldyBaUyhsLGEpKX1mdW5jdGlvbiBZUyhjLGwpe3JldHVybiBjLnF1ZXJpZXMuZ2V0QnlJbmRleChsKX1mdW5jdGlvbiB3SShjLGwpe2NvbnN0IGE9Y1tLaV0sZD1ZUyhhLGwpO3JldHVybiBkLmNyb3NzZXNOZ1Rl'@;
put 'bXBsYXRlP0Q4KGEsYyxsLFtdKTpZNShhLGMsZCxsKX1mdW5jdGlvbiBTSShjKXtyZXR1cm4gZnVuY3Rpb24gRWIoYyl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIGMmJnZvaWQgMCE9PWNbbWVdfShjKSYmImZ1bmN0aW9uIj09dHlwZW9mIGMuc2V0fWZ1bmN0aW9uIHdhKGMpe2xldCBsPWZ1'@;
put 'bmN0aW9uIFhTKGMpe3JldHVybiBPYmplY3QuZ2V0UHJvdG90eXBlT2YoYy5wcm90b3R5cGUpLmNvbnN0cnVjdG9yfShjLnR5cGUpLGE9ITA7Y29uc3QgZD1bY107Zm9yKDtsOyl7bGV0IGg7aWYoVmMoYykpaD1sLlx1MDI3NWNtcHx8bC5cdTAyNzVkaXI7ZWxzZXtpZihsLlx1MDI3NWNtcCl0'@;
put 'aHJvdyBuZXcgUW4oOTAzLCExKTtoPWwuXHUwMjc1ZGlyfWlmKGgpe2lmKGEpe2QucHVzaChoKTtjb25zdCB2PWM7di5pbnB1dHM9UDgoYy5pbnB1dHMpLHYuaW5wdXRUcmFuc2Zvcm1zPVA4KGMuaW5wdXRUcmFuc2Zvcm1zKSx2LmRlY2xhcmVkSW5wdXRzPVA4KGMuZGVjbGFyZWRJbnB1dHMp'@;
put 'LHYub3V0cHV0cz1QOChjLm91dHB1dHMpO2NvbnN0IE09aC5ob3N0QmluZGluZ3M7TSYmT2YoYyxNKTtjb25zdCBEPWgudmlld1F1ZXJ5LFo9aC5jb250ZW50UXVlcmllcztpZihEJiZSSShjLEQpLFomJlp6KGMsWiksSUkoYyxoKSxMdShjLm91dHB1dHMsaC5vdXRwdXRzKSxWYyhoKSYmaC5k'@;
put 'YXRhLmFuaW1hdGlvbil7Y29uc3QgcmU9Yy5kYXRhO3JlLmFuaW1hdGlvbj0ocmUuYW5pbWF0aW9ufHxbXSkuY29uY2F0KGguZGF0YS5hbmltYXRpb24pfX1jb25zdCBmPWguZmVhdHVyZXM7aWYoZilmb3IobGV0IHY9MDt2PGYubGVuZ3RoO3YrKyl7Y29uc3QgTT1mW3ZdO00mJk0ubmdJbmhl'@;
put 'cml0JiZNKGMpLE09PT13YSYmKGE9ITEpfX1sPU9iamVjdC5nZXRQcm90b3R5cGVPZihsKX0hZnVuY3Rpb24gVXooYyl7bGV0IGw9MCxhPW51bGw7Zm9yKGxldCBkPWMubGVuZ3RoLTE7ZD49MDtkLS0pe2NvbnN0IGg9Y1tkXTtoLmhvc3RWYXJzPWwrPWguaG9zdFZhcnMsaC5ob3N0QXR0cnM9'@;
put 'dmYoaC5ob3N0QXR0cnMsYT12ZihhLGguaG9zdEF0dHJzKSl9fShkKX1mdW5jdGlvbiBJSShjLGwpe2Zvcihjb25zdCBhIGluIGwuaW5wdXRzKXtpZighbC5pbnB1dHMuaGFzT3duUHJvcGVydHkoYSl8fGMuaW5wdXRzLmhhc093blByb3BlcnR5KGEpKWNvbnRpbnVlO2NvbnN0IGQ9bC5pbnB1'@;
put 'dHNbYV07aWYodm9pZCAwIT09ZCYmKGMuaW5wdXRzW2FdPWQsYy5kZWNsYXJlZElucHV0c1thXT1sLmRlY2xhcmVkSW5wdXRzW2FdLG51bGwhPT1sLmlucHV0VHJhbnNmb3Jtcykpe2NvbnN0IGg9QXJyYXkuaXNBcnJheShkKT9kWzBdOmQ7aWYoIWwuaW5wdXRUcmFuc2Zvcm1zLmhhc093blBy'@;
put 'b3BlcnR5KGgpKWNvbnRpbnVlO2MuaW5wdXRUcmFuc2Zvcm1zPz89e30sYy5pbnB1dFRyYW5zZm9ybXNbaF09bC5pbnB1dFRyYW5zZm9ybXNbaF19fX1mdW5jdGlvbiBQOChjKXtyZXR1cm4gYz09PUkwP3t9OmM9PT10cz9bXTpjfWZ1bmN0aW9uIFJJKGMsbCl7Y29uc3QgYT1jLnZpZXdRdWVy'@;
put 'eTtjLnZpZXdRdWVyeT1hPyhkLGgpPT57bChkLGgpLGEoZCxoKX06bH1mdW5jdGlvbiBaeihjLGwpe2NvbnN0IGE9Yy5jb250ZW50UXVlcmllcztjLmNvbnRlbnRRdWVyaWVzPWE/KGQsaCxmKT0+e2woZCxoLGYpLGEoZCxoLGYpfTpsfWZ1bmN0aW9uIE9mKGMsbCl7Y29uc3QgYT1jLmhvc3RC'@;
put 'aW5kaW5ncztjLmhvc3RCaW5kaW5ncz1hPyhkLGgpPT57bChkLGgpLGEoZCxoKX06bH1mdW5jdGlvbiB2ZChjKXtjb25zdCBsPWE9Pntjb25zdCBkPShBcnJheS5pc0FycmF5KGMpP2M6YygpKS5tYXAoaD0+ImZ1bmN0aW9uIj09dHlwZW9mIGg/e2RpcmVjdGl2ZTpZaShoKSxpbnB1dHM6STAs'@;
put 'b3V0cHV0czpJMH06e2RpcmVjdGl2ZTpZaShoLmRpcmVjdGl2ZSksaW5wdXRzOk9JKGguaW5wdXRzKSxvdXRwdXRzOk9JKGgub3V0cHV0cyl9KTtudWxsPT09YS5ob3N0RGlyZWN0aXZlcz8oYS5maW5kSG9zdERpcmVjdGl2ZURlZnM9TEksYS5ob3N0RGlyZWN0aXZlcz1kKTphLmhvc3REaXJl'@;
put 'Y3RpdmVzLnVuc2hpZnQoLi4uZCl9O3JldHVybiBsLm5nSW5oZXJpdD0hMCxsfWZ1bmN0aW9uIExJKGMsbCxhKXtpZihudWxsIT09Yy5ob3N0RGlyZWN0aXZlcylmb3IoY29uc3QgZCBvZiBjLmhvc3REaXJlY3RpdmVzKXtjb25zdCBoPXhjKGQuZGlyZWN0aXZlKTskeihoLmRlY2xhcmVkSW5w'@;
put 'dXRzLGQuaW5wdXRzKSxMSShoLGwsYSksYS5zZXQoaCxkKSxsLnB1c2goaCl9fWZ1bmN0aW9uIE9JKGMpe2lmKHZvaWQgMD09PWN8fDA9PT1jLmxlbmd0aClyZXR1cm4gSTA7Y29uc3QgbD17fTtmb3IobGV0IGE9MDthPGMubGVuZ3RoO2ErPTIpbFtjW2FdXT1jW2ErMV07cmV0dXJuIGx9ZnVu'@;
put 'Y3Rpb24gJHooYyxsKXtmb3IoY29uc3QgYSBpbiBsKWwuaGFzT3duUHJvcGVydHkoYSkmJihjW2xbYV1dPWNbYV0pfWZ1bmN0aW9uIFdsKGMpe2NvbnN0IGw9Yy5pbnB1dENvbmZpZyxhPXt9O2Zvcihjb25zdCBkIGluIGwpaWYobC5oYXNPd25Qcm9wZXJ0eShkKSl7Y29uc3QgaD1sW2RdO0Fy'@;
put 'cmF5LmlzQXJyYXkoaCkmJmhbM10mJihhW2RdPWhbM10pfWMuaW5wdXRUcmFuc2Zvcm1zPWF9Y2xhc3MgbnB7fWNsYXNzIG1je31jbGFzcyBSYiBleHRlbmRzIG5we2NvbnN0cnVjdG9yKGwsYSxkKXtzdXBlcigpLHRoaXMuX3BhcmVudD1hLHRoaXMuX2Jvb3RzdHJhcENvbXBvbmVudHM9W10s'@;
put 'dGhpcy5kZXN0cm95Q2JzPVtdLHRoaXMuY29tcG9uZW50RmFjdG9yeVJlc29sdmVyPW5ldyBjSSh0aGlzKTtjb25zdCBoPVB1KGwpO3RoaXMuX2Jvb3RzdHJhcENvbXBvbmVudHM9RjEoaC5ib290c3RyYXApLHRoaXMuX3IzSW5qZWN0b3I9UjQobCxhLFt7cHJvdmlkZTpucCx1c2VWYWx1ZTp0'@;
put 'aGlzfSx7cHJvdmlkZTpXNSx1c2VWYWx1ZTp0aGlzLmNvbXBvbmVudEZhY3RvcnlSZXNvbHZlcn0sLi4uZF0sUHIobCksbmV3IFNldChbImVudmlyb25tZW50Il0pKSx0aGlzLl9yM0luamVjdG9yLnJlc29sdmVJbmplY3RvckluaXRpYWxpemVycygpLHRoaXMuaW5zdGFuY2U9dGhpcy5fcjNJ'@;
put 'bmplY3Rvci5nZXQobCl9Z2V0IGluamVjdG9yKCl7cmV0dXJuIHRoaXMuX3IzSW5qZWN0b3J9ZGVzdHJveSgpe2NvbnN0IGw9dGhpcy5fcjNJbmplY3RvcjshbC5kZXN0cm95ZWQmJmwuZGVzdHJveSgpLHRoaXMuZGVzdHJveUNicy5mb3JFYWNoKGE9PmEoKSksdGhpcy5kZXN0cm95Q2JzPW51'@;
put 'bGx9b25EZXN0cm95KGwpe3RoaXMuZGVzdHJveUNicy5wdXNoKGwpfX1jbGFzcyBMYiBleHRlbmRzIG1je2NvbnN0cnVjdG9yKGwpe3N1cGVyKCksdGhpcy5tb2R1bGVUeXBlPWx9Y3JlYXRlKGwpe3JldHVybiBuZXcgUmIodGhpcy5tb2R1bGVUeXBlLGwsW10pfX1jbGFzcyBGOCBleHRlbmRz'@;
put 'IG5we2NvbnN0cnVjdG9yKGwpe3N1cGVyKCksdGhpcy5jb21wb25lbnRGYWN0b3J5UmVzb2x2ZXI9bmV3IGNJKHRoaXMpLHRoaXMuaW5zdGFuY2U9bnVsbDtjb25zdCBhPW5ldyBjZChbLi4ubC5wcm92aWRlcnMse3Byb3ZpZGU6bnAsdXNlVmFsdWU6dGhpc30se3Byb3ZpZGU6VzUsdXNlVmFs'@;
put 'dWU6dGhpcy5jb21wb25lbnRGYWN0b3J5UmVzb2x2ZXJ9XSxsLnBhcmVudHx8SDMoKSxsLmRlYnVnTmFtZSxuZXcgU2V0KFsiZW52aXJvbm1lbnQiXSkpO3RoaXMuaW5qZWN0b3I9YSxsLnJ1bkVudmlyb25tZW50SW5pdGlhbGl6ZXJzJiZhLnJlc29sdmVJbmplY3RvckluaXRpYWxpemVycygp'@;
put 'fWRlc3Ryb3koKXt0aGlzLmluamVjdG9yLmRlc3Ryb3koKX1vbkRlc3Ryb3kobCl7dGhpcy5pbmplY3Rvci5vbkRlc3Ryb3kobCl9fWZ1bmN0aW9uIEc0KGMsbCxhPW51bGwpe3JldHVybiBuZXcgRjgoe3Byb3ZpZGVyczpjLHBhcmVudDpsLGRlYnVnTmFtZTphLHJ1bkVudmlyb25tZW50SW5p'@;
put 'dGlhbGl6ZXJzOiEwfSkuaW5qZWN0b3J9bGV0IFBmPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLnRhc2tJZD0wLHRoaXMucGVuZGluZ1Rhc2tzPW5ldyBTZXQsdGhpcy5oYXNQZW5kaW5nVGFza3M9bmV3IGVpKCExKX1nZXQgX2hhc1BlbmRpbmdUYXNrcygpe3JldHVybiB0aGlz'@;
put 'Lmhhc1BlbmRpbmdUYXNrcy52YWx1ZX1hZGQoKXt0aGlzLl9oYXNQZW5kaW5nVGFza3N8fHRoaXMuaGFzUGVuZGluZ1Rhc2tzLm5leHQoITApO2NvbnN0IGE9dGhpcy50YXNrSWQrKztyZXR1cm4gdGhpcy5wZW5kaW5nVGFza3MuYWRkKGEpLGF9cmVtb3ZlKGEpe3RoaXMucGVuZGluZ1Rhc2tz'@;
put 'LmRlbGV0ZShhKSwwPT09dGhpcy5wZW5kaW5nVGFza3Muc2l6ZSYmdGhpcy5faGFzUGVuZGluZ1Rhc2tzJiZ0aGlzLmhhc1BlbmRpbmdUYXNrcy5uZXh0KCExKX1uZ09uRGVzdHJveSgpe3RoaXMucGVuZGluZ1Rhc2tzLmNsZWFyKCksdGhpcy5faGFzUGVuZGluZ1Rhc2tzJiZ0aGlzLmhhc1Bl'@;
put 'bmRpbmdUYXNrcy5uZXh0KCExKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSl9fXJldHVybiBjfSkoKTtmdW5j'@;
put 'dGlvbiBPYihjKXtyZXR1cm4hIUpTKGMpJiYoQXJyYXkuaXNBcnJheShjKXx8IShjIGluc3RhbmNlb2YgTWFwKSYmU3ltYm9sLml0ZXJhdG9yIGluIGMpfWZ1bmN0aW9uIEpTKGMpe3JldHVybiBudWxsIT09YyYmKCJmdW5jdGlvbiI9PXR5cGVvZiBjfHwib2JqZWN0Ij09dHlwZW9mIGMpfWZ1'@;
put 'bmN0aW9uIHkyKGMsbCxhKXtyZXR1cm4gY1tsXT1hfWZ1bmN0aW9uIEJjKGMsbCxhKXtyZXR1cm4hT2JqZWN0LmlzKGNbbF0sYSkmJihjW2xdPWEsITApfWZ1bmN0aW9uIHJwKGMsbCxhLGQpe2NvbnN0IGg9QmMoYyxsLGEpO3JldHVybiBCYyhjLGwrMSxkKXx8aH1mdW5jdGlvbiBGYihjLGws'@;
put 'YSxkLGgpe2NvbnN0IGY9cnAoYyxsLGEsZCk7cmV0dXJuIEJjKGMsbCsyLGgpfHxmfWZ1bmN0aW9uIGJkKGMsbCxhLGQsaCxmKXtjb25zdCB2PXJwKGMsbCxhLGQpO3JldHVybiBycChjLGwrMixoLGYpfHx2fWZ1bmN0aW9uIGd0KGMsbCxhLGQsaCxmLHYsTSl7Y29uc3QgRD1kaSgpLFo9bHMo'@;
put 'KSxyZT1jK3dvLGNlPVouZmlyc3RDcmVhdGVQYXNzP2Z1bmN0aW9uIFFTKGMsbCxhLGQsaCxmLHYsTSxEKXtjb25zdCBaPWwuY29uc3RzLHJlPWo1KGwsYyw0LHZ8fG51bGwsZDIoWixNKSk7dlMobCxhLHJlLGQyKFosRCkpLFJ2KGwscmUpO2NvbnN0IGNlPXJlLnRWaWV3PW1TKDIscmUsZCxo'@;
put 'LGYsbC5kaXJlY3RpdmVSZWdpc3RyeSxsLnBpcGVSZWdpc3RyeSxudWxsLGwuc2NoZW1hcyxaLG51bGwpO3JldHVybiBudWxsIT09bC5xdWVyaWVzJiYobC5xdWVyaWVzLnRlbXBsYXRlKGwscmUpLGNlLnF1ZXJpZXM9bC5xdWVyaWVzLmVtYmVkZGVkVFZpZXcocmUpKSxyZX0ocmUsWixELGws'@;
put 'YSxkLGgsZix2KTpaLmRhdGFbcmVdO2gyKGNlLCExKTtjb25zdCBiZT1WSShaLEQsY2UsYyk7cTYoKSYmbDAoWixELGJlLGNlKSxqdShiZSxEKTtjb25zdCBFZT13UyhiZSxELGJlLGNlKTtyZXR1cm4gRFtyZV09RWUsZjgoRCxFZSksZnVuY3Rpb24gSDAoYyxsLGEpe3JldHVybiBNYihjLGws'@;
put 'YSl9KEVlLGNlLEQpLEowKGNlKSYmcFMoWixELGNlKSxudWxsIT12JiZnUyhELGNlLE0pLGd0fWxldCBWST1mdW5jdGlvbiBlTShjLGwsYSxkKXtyZXR1cm4gZjIoITApLGxbYm9dLmNyZWF0ZUNvbW1lbnQoIiIpfTtmdW5jdGlvbiBocihjLGwsYSxkKXtjb25zdCBoPWRpKCk7cmV0dXJuIEJj'@;
put 'KGgsYWgoKSxsKSYmKGxzKCksdWgoUXMoKSxoLGMsbCxhLGQpKSxocn1mdW5jdGlvbiBZbChjLGwsYSxkKXtyZXR1cm4gQmMoYyxhaCgpLGEpP2wrQ2EoYSkrZDpSb31mdW5jdGlvbiBZbyhjLGwpe3JldHVybiBjPDwxN3xsPDwyfWZ1bmN0aW9uIHhsKGMpe3JldHVybiBjPj4xNyYzMjc2N31m'@;
put 'dW5jdGlvbiBGZihjKXtyZXR1cm4gMnxjfWZ1bmN0aW9uIHlkKGMpe3JldHVybigxMzEwNjgmYyk+PjJ9ZnVuY3Rpb24gZ24oYyxsKXtyZXR1cm4tMTMxMDY5JmN8bDw8Mn1mdW5jdGlvbiB3bihjKXtyZXR1cm4gMXxjfWZ1bmN0aW9uIHlyKGMsbCxhLGQpe2NvbnN0IGg9Y1thKzFdLGY9bnVs'@;
put 'bD09PWw7bGV0IHY9ZD94bChoKTp5ZChoKSxNPSExO2Zvcig7MCE9PXYmJighMT09PU18fGYpOyl7Y29uc3QgWj1jW3YrMV07V3IoY1t2XSxsKSYmKE09ITAsY1t2KzFdPWQ/d24oWik6RmYoWikpLHY9ZD94bChaKTp5ZChaKX1NJiYoY1thKzFdPWQ/RmYoaCk6d24oaCkpfWZ1bmN0aW9uIFdy'@;
put 'KGMsbCl7cmV0dXJuIG51bGw9PT1jfHxudWxsPT1sfHwoQXJyYXkuaXNBcnJheShjKT9jWzFdOmMpPT09bHx8ISghQXJyYXkuaXNBcnJheShjKXx8InN0cmluZyIhPXR5cGVvZiBsKSYmZTIoYyxsKT49MH1jb25zdCBvaT17dGV4dEVuZDowLGtleTowLGtleUVuZDowLHZhbHVlOjAsdmFsdWVF'@;
put 'bmQ6MH07ZnVuY3Rpb24gbmkoYyl7cmV0dXJuIGMuc3Vic3RyaW5nKG9pLmtleSxvaS5rZXlFbmQpfWZ1bmN0aW9uIG5vKGMsbCl7Y29uc3QgYT1vaS50ZXh0RW5kO3JldHVybiBhPT09bD8tMToobD1vaS5rZXlFbmQ9ZnVuY3Rpb24gcjEoYyxsLGEpe2Zvcig7bDxhJiZjLmNoYXJDb2RlQXQo'@;
put 'bCk+MzI7KWwrKztyZXR1cm4gbH0oYyxvaS5rZXk9bCxhKSx4cyhjLGwsYSkpfWZ1bmN0aW9uIHhzKGMsbCxhKXtmb3IoO2w8YSYmYy5jaGFyQ29kZUF0KGwpPD0zMjspbCsrO3JldHVybiBsfWZ1bmN0aW9uIE1lKGMsbCxhKXtjb25zdCBkPWRpKCk7cmV0dXJuIEJjKGQsYWgoKSxsKSYmRjAo'@;
put 'bHMoKSxRcygpLGQsYyxsLGRbYm9dLGEsITEpLE1lfWZ1bmN0aW9uIGhoKGMsbCxhLGQsaCl7Y29uc3Qgdj1oPyJjbGFzcyI6InN0eWxlIjtDUyhjLGEsbC5pbnB1dHNbdl0sdixkKX1mdW5jdGlvbiBfZChjLGwsYSl7cmV0dXJuIEhmKGMsbCxhLCExKSxfZH1mdW5jdGlvbiBUcihjLGwpe3Jl'@;
put 'dHVybiBIZihjLGwsbnVsbCwhMCksVHJ9ZnVuY3Rpb24gYXAoYyxsKXtmb3IobGV0IGE9ZnVuY3Rpb24gVWkoYyl7cmV0dXJuIGZ1bmN0aW9uIFRvKGMpe29pLmtleT0wLG9pLmtleUVuZD0wLG9pLnZhbHVlPTAsb2kudmFsdWVFbmQ9MCxvaS50ZXh0RW5kPWMubGVuZ3RofShjKSxubyhjLHhz'@;
put 'KGMsMCxvaS50ZXh0RW5kKSl9KGwpO2E+PTA7YT1ubyhsLGEpKV8wKGMsbmkobCksITApfWZ1bmN0aW9uIEhmKGMsbCxhLGQpe2NvbnN0IGg9ZGkoKSxmPWxzKCksdj1BZigyKTtmLmZpcnN0VXBkYXRlUGFzcyYmb3JlKGYsYyx2LGQpLGwhPT1SbyYmQmMoaCx2LGwpJiZscmUoZixmLmRhdGFb'@;
put 'VnUoKV0saCxoW2JvXSxjLGhbdisxXT1mdW5jdGlvbiBuOWUoYyxsKXtyZXR1cm4gbnVsbD09Y3x8IiI9PT1jfHwoInN0cmluZyI9PXR5cGVvZiBsP2MrPWw6Im9iamVjdCI9PXR5cGVvZiBjJiYoYz1QcihtMihjKSkpKSxjfShsLGEpLGQsdil9ZnVuY3Rpb24gYXJlKGMsbCl7cmV0dXJuIGw+'@;
put 'PWMuZXhwYW5kb1N0YXJ0SW5kZXh9ZnVuY3Rpb24gb3JlKGMsbCxhLGQpe2NvbnN0IGg9Yy5kYXRhO2lmKG51bGw9PT1oW2ErMV0pe2NvbnN0IGY9aFtWdSgpXSx2PWFyZShjLGEpO3VyZShmLGQpJiZudWxsPT09bCYmIXYmJihsPSExKSxsPWZ1bmN0aW9uIEs3ZShjLGwsYSxkKXtjb25zdCBo'@;
put 'PXNDKGMpO2xldCBmPWQ/bC5yZXNpZHVhbENsYXNzZXM6bC5yZXNpZHVhbFN0eWxlcztpZihudWxsPT09aCkwPT09KGQ/bC5jbGFzc0JpbmRpbmdzOmwuc3R5bGVCaW5kaW5ncykmJihhPW9NKGE9clUobnVsbCxjLGwsYSxkKSxsLmF0dHJzLGQpLGY9bnVsbCk7ZWxzZXtjb25zdCB2PWwuZGly'@;
put 'ZWN0aXZlU3R5bGluZ0xhc3Q7aWYoLTE9PT12fHxjW3ZdIT09aClpZihhPXJVKGgsYyxsLGEsZCksbnVsbD09PWYpe2xldCBEPWZ1bmN0aW9uIHE3ZShjLGwsYSl7Y29uc3QgZD1hP2wuY2xhc3NCaW5kaW5nczpsLnN0eWxlQmluZGluZ3M7aWYoMCE9PXlkKGQpKXJldHVybiBjW3hsKGQpXX0o'@;
put 'YyxsLGQpO3ZvaWQgMCE9PUQmJkFycmF5LmlzQXJyYXkoRCkmJihEPXJVKG51bGwsYyxsLERbMV0sZCksRD1vTShELGwuYXR0cnMsZCksZnVuY3Rpb24gWDdlKGMsbCxhLGQpe2NbeGwoYT9sLmNsYXNzQmluZGluZ3M6bC5zdHlsZUJpbmRpbmdzKV09ZH0oYyxsLGQsRCkpfWVsc2UgZj1mdW5j'@;
put 'dGlvbiBKN2UoYyxsLGEpe2xldCBkO2NvbnN0IGg9bC5kaXJlY3RpdmVFbmQ7Zm9yKGxldCBmPTErbC5kaXJlY3RpdmVTdHlsaW5nTGFzdDtmPGg7ZisrKWQ9b00oZCxjW2ZdLmhvc3RBdHRycyxhKTtyZXR1cm4gb00oZCxsLmF0dHJzLGEpfShjLGwsZCl9cmV0dXJuIHZvaWQgMCE9PWYmJihk'@;
put 'P2wucmVzaWR1YWxDbGFzc2VzPWY6bC5yZXNpZHVhbFN0eWxlcz1mKSxhfShoLGYsbCxkKSxmdW5jdGlvbiB4bihjLGwsYSxkLGgsZil7bGV0IHY9Zj9sLmNsYXNzQmluZGluZ3M6bC5zdHlsZUJpbmRpbmdzLE09eGwodiksRD15ZCh2KTtjW2RdPWE7bGV0IHJlLFo9ITE7aWYoQXJyYXkuaXNB'@;
put 'cnJheShhKT8ocmU9YVsxXSwobnVsbD09PXJlfHxlMihhLHJlKT4wKSYmKFo9ITApKTpyZT1hLGgpaWYoMCE9PUQpe2NvbnN0IGJlPXhsKGNbTSsxXSk7Y1tkKzFdPVlvKGJlLE0pLDAhPT1iZSYmKGNbYmUrMV09Z24oY1tiZSsxXSxkKSksY1tNKzFdPWZ1bmN0aW9uIEVsKGMsbCl7cmV0dXJu'@;
put 'IDEzMTA3MSZjfGw8PDE3fShjW00rMV0sZCl9ZWxzZSBjW2QrMV09WW8oTSwwKSwwIT09TSYmKGNbTSsxXT1nbihjW00rMV0sZCkpLE09ZDtlbHNlIGNbZCsxXT1ZbyhELDApLDA9PT1NP009ZDpjW0QrMV09Z24oY1tEKzFdLGQpLEQ9ZDtaJiYoY1tkKzFdPUZmKGNbZCsxXSkpLHlyKGMscmUs'@;
put 'ZCwhMCkseXIoYyxyZSxkLCExKSxmdW5jdGlvbiB6bihjLGwsYSxkLGgpe2NvbnN0IGY9aD9jLnJlc2lkdWFsQ2xhc3NlczpjLnJlc2lkdWFsU3R5bGVzO251bGwhPWYmJiJzdHJpbmciPT10eXBlb2YgbCYmZTIoZixsKT49MCYmKGFbZCsxXT13bihhW2QrMV0pKX0obCxyZSxjLGQsZiksdj1Z'@;
put 'byhNLEQpLGY/bC5jbGFzc0JpbmRpbmdzPXY6bC5zdHlsZUJpbmRpbmdzPXZ9KGgsZixsLGEsdixkKX19ZnVuY3Rpb24gclUoYyxsLGEsZCxoKXtsZXQgZj1udWxsO2NvbnN0IHY9YS5kaXJlY3RpdmVFbmQ7bGV0IE09YS5kaXJlY3RpdmVTdHlsaW5nTGFzdDtmb3IoLTE9PT1NP009YS5kaXJl'@;
put 'Y3RpdmVTdGFydDpNKys7TTx2JiYoZj1sW01dLGQ9b00oZCxmLmhvc3RBdHRycyxoKSxmIT09Yyk7KU0rKztyZXR1cm4gbnVsbCE9PWMmJihhLmRpcmVjdGl2ZVN0eWxpbmdMYXN0PU0pLGR9ZnVuY3Rpb24gb00oYyxsLGEpe2NvbnN0IGQ9YT8xOjI7bGV0IGg9LTE7aWYobnVsbCE9PWwpZm9y'@;
put 'KGxldCBmPTA7ZjxsLmxlbmd0aDtmKyspe2NvbnN0IHY9bFtmXTsibnVtYmVyIj09dHlwZW9mIHY/aD12Omg9PT1kJiYoQXJyYXkuaXNBcnJheShjKXx8KGM9dm9pZCAwPT09Yz9bXTpbIiIsY10pLF8wKGMsdiwhIWF8fGxbKytmXSkpfXJldHVybiB2b2lkIDA9PT1jP251bGw6Y31mdW5jdGlv'@;
put 'biBscmUoYyxsLGEsZCxoLGYsdixNKXtpZighKDMmbC50eXBlKSlyZXR1cm47Y29uc3QgRD1jLmRhdGEsWj1EW00rMV0scmU9ZnVuY3Rpb24ga24oYyl7cmV0dXJuISgxJn5jKX0oWik/Y3JlKEQsbCxhLGgseWQoWiksdik6dm9pZCAwO1pJKHJlKXx8KFpJKGYpfHxmdW5jdGlvbiBfdShjKXty'@;
put 'ZXR1cm4hKDImfmMpfShaKSYmKGY9Y3JlKEQsbnVsbCxhLGgsTSx2KSksZnVuY3Rpb24geUQoYyxsLGEsZCxoKXtpZihsKWg/Yy5hZGRDbGFzcyhhLGQpOmMucmVtb3ZlQ2xhc3MoYSxkKTtlbHNle2xldCBmPS0xPT09ZC5pbmRleE9mKCItIik/dm9pZCAwOkszLkRhc2hDYXNlO251bGw9PWg/'@;
put 'Yy5yZW1vdmVTdHlsZShhLGQsZik6KCJzdHJpbmciPT10eXBlb2YgaCYmaC5lbmRzV2l0aCgiIWltcG9ydGFudCIpJiYoaD1oLnNsaWNlKDAsLTEwKSxmfD1LMy5JbXBvcnRhbnQpLGMuc2V0U3R5bGUoYSxkLGgsZikpfX0oZCx2LHk1KFZ1KCksYSksaCxmKSl9ZnVuY3Rpb24gY3JlKGMsbCxh'@;
put 'LGQsaCxmKXtjb25zdCB2PW51bGw9PT1sO2xldCBNO2Zvcig7aD4wOyl7Y29uc3QgRD1jW2hdLFo9QXJyYXkuaXNBcnJheShEKSxyZT1aP0RbMV06RCxjZT1udWxsPT09cmU7bGV0IGJlPWFbaCsxXTtiZT09PVJvJiYoYmU9Y2U/dHM6dm9pZCAwKTtsZXQgRWU9Y2U/QTYoYmUsZCk6cmU9PT1k'@;
put 'P2JlOnZvaWQgMDtpZihaJiYhWkkoRWUpJiYoRWU9QTYoRCxkKSksWkkoRWUpJiYoTT1FZSx2KSlyZXR1cm4gTTtjb25zdCBCZT1jW2grMV07aD12P3hsKEJlKTp5ZChCZSl9aWYobnVsbCE9PWwpe2xldCBEPWY/bC5yZXNpZHVhbENsYXNzZXM6bC5yZXNpZHVhbFN0eWxlcztudWxsIT1EJiYo'@;
put 'TT1BNihELGQpKX1yZXR1cm4gTX1mdW5jdGlvbiBaSShjKXtyZXR1cm4gdm9pZCAwIT09Y31mdW5jdGlvbiB1cmUoYyxsKXtyZXR1cm4hIShjLmZsYWdzJihsPzg6MTYpKX1mdW5jdGlvbiBkcmUoYyxsLGEpeyFmdW5jdGlvbiBOZihjLGwsYSxkKXtjb25zdCBoPWxzKCksZj1BZigyKTtoLmZp'@;
put 'cnN0VXBkYXRlUGFzcyYmb3JlKGgsbnVsbCxmLGQpO2NvbnN0IHY9ZGkoKTtpZihhIT09Um8mJkJjKHYsZixhKSl7Y29uc3QgTT1oLmRhdGFbVnUoKV07aWYodXJlKE0sZCkmJiFhcmUoaCxmKSl7bGV0IEQ9ZD9NLmNsYXNzZXNXaXRob3V0SG9zdDpNLnN0eWxlc1dpdGhvdXRIb3N0O251bGwh'@;
put 'PT1EJiYoYT1vZChELGF8fCIiKSksaGgoaCxNLHYsYSxkKX1lbHNlIWZ1bmN0aW9uIHQ5ZShjLGwsYSxkLGgsZix2LE0pe2g9PT1SbyYmKGg9dHMpO2xldCBEPTAsWj0wLHJlPTA8aC5sZW5ndGg/aFswXTpudWxsLGNlPTA8Zi5sZW5ndGg/ZlswXTpudWxsO2Zvcig7bnVsbCE9PXJlfHxudWxs'@;
put 'IT09Y2U7KXtjb25zdCBiZT1EPGgubGVuZ3RoP2hbRCsxXTp2b2lkIDAsRWU9WjxmLmxlbmd0aD9mW1orMV06dm9pZCAwO2xldCBxZSxCZT1udWxsO3JlPT09Y2U/KEQrPTIsWis9MixiZSE9PUVlJiYoQmU9Y2UscWU9RWUpKTpudWxsPT09Y2V8fG51bGwhPT1yZSYmcmU8Y2U/KEQrPTIsQmU9'@;
put 'cmUpOihaKz0yLEJlPWNlLHFlPUVlKSxudWxsIT09QmUmJmxyZShjLGwsYSxkLEJlLHFlLHYsTSkscmU9RDxoLmxlbmd0aD9oW0RdOm51bGwsY2U9WjxmLmxlbmd0aD9mW1pdOm51bGx9fShoLE0sdix2W2JvXSx2W2YrMV0sdltmKzFdPWZ1bmN0aW9uIFE3ZShjLGwsYSl7aWYobnVsbD09YXx8'@;
put 'IiI9PT1hKXJldHVybiB0cztjb25zdCBkPVtdLGg9bTIoYSk7aWYoQXJyYXkuaXNBcnJheShoKSlmb3IobGV0IGY9MDtmPGgubGVuZ3RoO2YrKyljKGQsaFtmXSwhMCk7ZWxzZSBpZigib2JqZWN0Ij09dHlwZW9mIGgpZm9yKGNvbnN0IGYgaW4gaCloLmhhc093blByb3BlcnR5KGYpJiZjKGQs'@;
put 'ZixoW2ZdKTtlbHNlInN0cmluZyI9PXR5cGVvZiBoJiZsKGQsaCk7cmV0dXJuIGR9KGMsbCxhKSxkLGYpfX0oXzAsYXAsWWwoZGkoKSxjLGwsYSksITApfWZ1bmN0aW9uIGRlKGMsbCxhLGQpe2NvbnN0IGg9ZGkoKSxmPWxzKCksdj13bytjLE09aFtib10sRD1mLmZpcnN0Q3JlYXRlUGFzcz9m'@;
put 'dW5jdGlvbiBNOWUoYyxsLGEsZCxoLGYpe2NvbnN0IHY9bC5jb25zdHMsRD1qNShsLGMsMixkLGQyKHYsaCkpO3JldHVybiB2UyhsLGEsRCxkMih2LGYpKSxudWxsIT09RC5hdHRycyYmQ2IoRCxELmF0dHJzLCExKSxudWxsIT09RC5tZXJnZWRBdHRycyYmQ2IoRCxELm1lcmdlZEF0dHJzLCEw'@;
put 'KSxudWxsIT09bC5xdWVyaWVzJiZsLnF1ZXJpZXMuZWxlbWVudFN0YXJ0KGwsRCksRH0odixmLGgsbCxhLGQpOmYuZGF0YVt2XSxaPWdyZShmLGgsRCxNLGwsYyk7aFt2XT1aO2NvbnN0IHJlPUowKEQpO3JldHVybiBoMihELCEwKSxDRChNLFosRCksIWZ1bmN0aW9uIEg4KGMpe3JldHVybiEo'@;
put 'MzImfmMuZmxhZ3MpfShEKSYmcTYoKSYmbDAoZixoLFosRCksMD09PWZ1bmN0aW9uIHVWKCl7cmV0dXJuIENvLmxGcmFtZS5lbGVtZW50RGVwdGhDb3VudH0oKSYmanUoWixoKSxmdW5jdGlvbiBkVigpe0NvLmxGcmFtZS5lbGVtZW50RGVwdGhDb3VudCsrfSgpLHJlJiYocFMoZixoLEQpLGZT'@;
put 'KGYsRCxoKSksbnVsbCE9PWQmJmdTKGgsRCksZGV9ZnVuY3Rpb24gaGUoKXtsZXQgYz11bCgpO2lDKCk/YUMoKTooYz1jLnBhcmVudCxoMihjLCExKSk7Y29uc3QgbD1jOyhmdW5jdGlvbiBoVihjKXtyZXR1cm4gQ28uc2tpcEh5ZHJhdGlvblJvb3RUTm9kZT09PWN9KShsKSYmZnVuY3Rpb24g'@;
put 'bVYoKXtDby5za2lwSHlkcmF0aW9uUm9vdFROb2RlPW51bGx9KCksZnVuY3Rpb24gZWsoKXtDby5sRnJhbWUuZWxlbWVudERlcHRoQ291bnQtLX0oKTtjb25zdCBhPWxzKCk7cmV0dXJuIGEuZmlyc3RDcmVhdGVQYXNzJiYoUnYoYSxjKSxydShjKSYmYS5xdWVyaWVzLmVsZW1lbnRFbmQoYykp'@;
put 'LG51bGwhPWwuY2xhc3Nlc1dpdGhvdXRIb3N0JiZmdW5jdGlvbiBrVihjKXtyZXR1cm4hISg4JmMuZmxhZ3MpfShsKSYmaGgoYSxsLGRpKCksbC5jbGFzc2VzV2l0aG91dEhvc3QsITApLG51bGwhPWwuc3R5bGVzV2l0aG91dEhvc3QmJmZ1bmN0aW9uIERWKGMpe3JldHVybiEhKDE2JmMuZmxh'@;
put 'Z3MpfShsKSYmaGgoYSxsLGRpKCksbC5zdHlsZXNXaXRob3V0SG9zdCwhMSksaGV9ZnVuY3Rpb24gR3QoYyxsLGEsZCl7cmV0dXJuIGRlKGMsbCxhLGQpLGhlKCksR3R9bGV0IGdyZT0oYyxsLGEsZCxoLGYpPT4oZjIoITApLHo0KGQsaCxmdW5jdGlvbiBzaygpe3JldHVybiBDby5sRnJhbWUu'@;
put 'Y3VycmVudE5hbWVzcGFjZX0oKSkpO2Z1bmN0aW9uIHNpKGMsbCxhKXtjb25zdCBkPWRpKCksaD1scygpLGY9Yyt3byx2PWguZmlyc3RDcmVhdGVQYXNzP2Z1bmN0aW9uIFQ5ZShjLGwsYSxkLGgpe2NvbnN0IGY9bC5jb25zdHMsdj1kMihmLGQpLE09ajUobCxjLDgsIm5nLWNvbnRhaW5lciIs'@;
put 'dik7cmV0dXJuIG51bGwhPT12JiZDYihNLHYsITApLHZTKGwsYSxNLGQyKGYsaCkpLG51bGwhPT1sLnF1ZXJpZXMmJmwucXVlcmllcy5lbGVtZW50U3RhcnQobCxNKSxNfShmLGgsZCxsLGEpOmguZGF0YVtmXTtoMih2LCEwKTtjb25zdCBNPW1yZShoLGQsdixjKTtyZXR1cm4gZFtmXT1NLHE2'@;
put 'KCkmJmwwKGgsZCxNLHYpLGp1KE0sZCksSjAodikmJihwUyhoLGQsdiksZlMoaCx2LGQpKSxudWxsIT1hJiZnUyhkLHYpLHNpfWZ1bmN0aW9uIGxpKCl7bGV0IGM9dWwoKTtjb25zdCBsPWxzKCk7cmV0dXJuIGlDKCk/YUMoKTooYz1jLnBhcmVudCxoMihjLCExKSksbC5maXJzdENyZWF0ZVBh'@;
put 'c3MmJihSdihsLGMpLHJ1KGMpJiZsLnF1ZXJpZXMuZWxlbWVudEVuZChjKSksbGl9ZnVuY3Rpb24gRmwoYyxsLGEpe3JldHVybiBzaShjLGwsYSksbGkoKSxGbH1sZXQgbXJlPShjLGwsYSxkKT0+KGYyKCEwKSxlUyhsW2JvXSwiIikpO2Z1bmN0aW9uIExuKCl7cmV0dXJuIGRpKCl9ZnVuY3Rp'@;
put 'b24gb3AoYyxsLGEpe2NvbnN0IGQ9ZGkoKTtyZXR1cm4gQmMoZCxhaCgpLGwpJiZGMChscygpLFFzKCksZCxjLGwsZFtib10sYSwhMCksb3B9ZnVuY3Rpb24gbFUoYyxsLGEpe2NvbnN0IGQ9ZGkoKTtpZihCYyhkLGFoKCksbCkpe2NvbnN0IGY9bHMoKSx2PVFzKCk7RjAoZix2LGQsYyxsLFc0'@;
put 'KHNDKGYuZGF0YSksdixkKSxhLCEwKX1yZXR1cm4gbFV9Y29uc3Qgajg9dm9pZCAwO3ZhciBJOWU9WyJlbiIsW1siYSIsInAiXSxbIkFNIiwiUE0iXSxqOF0sW1siQU0iLCJQTSJdLGo4LGo4XSxbWyJTIiwiTSIsIlQiLCJXIiwiVCIsIkYiLCJTIl0sWyJTdW4iLCJNb24iLCJUdWUiLCJXZWQi'@;
put 'LCJUaHUiLCJGcmkiLCJTYXQiXSxbIlN1bmRheSIsIk1vbmRheSIsIlR1ZXNkYXkiLCJXZWRuZXNkYXkiLCJUaHVyc2RheSIsIkZyaWRheSIsIlNhdHVyZGF5Il0sWyJTdSIsIk1vIiwiVHUiLCJXZSIsIlRoIiwiRnIiLCJTYSJdXSxqOCxbWyJKIiwiRiIsIk0iLCJBIiwiTSIsIkoiLCJKIiwi'@;
put 'QSIsIlMiLCJPIiwiTiIsIkQiXSxbIkphbiIsIkZlYiIsIk1hciIsIkFwciIsIk1heSIsIkp1biIsIkp1bCIsIkF1ZyIsIlNlcCIsIk9jdCIsIk5vdiIsIkRlYyJdLFsiSmFudWFyeSIsIkZlYnJ1YXJ5IiwiTWFyY2giLCJBcHJpbCIsIk1heSIsIkp1bmUiLCJKdWx5IiwiQXVndXN0IiwiU2Vw'@;
put 'dGVtYmVyIiwiT2N0b2JlciIsIk5vdmVtYmVyIiwiRGVjZW1iZXIiXV0sajgsW1siQiIsIkEiXSxbIkJDIiwiQUQiXSxbIkJlZm9yZSBDaHJpc3QiLCJBbm5vIERvbWluaSJdXSwwLFs2LDBdLFsiTS9kL3l5IiwiTU1NIGQsIHkiLCJNTU1NIGQsIHkiLCJFRUVFLCBNTU1NIGQsIHkiXSxbImg6'@;
put 'bW0gYSIsImg6bW06c3MgYSIsImg6bW06c3MgYSB6IiwiaDptbTpzcyBhIHp6enoiXSxbInsxfSwgezB9IixqOCwiezF9ICdhdCcgezB9IixqOF0sWyIuIiwiLCIsIjsiLCIlIiwiKyIsIi0iLCJFIiwiXHhkNyIsIlx1MjAzMCIsIlx1MjIxZSIsIk5hTiIsIjoiXSxbIiMsIyMwLiMjIyIsIiMs'@;
put 'IyMwJSIsIlx4YTQjLCMjMC4wMCIsIiNFMCJdLCJVU0QiLCIkIiwiVVMgRG9sbGFyIix7fSwibHRyIixmdW5jdGlvbiBEOWUoYyl7Y29uc3QgYT1NYXRoLmZsb29yKE1hdGguYWJzKGMpKSxkPWMudG9TdHJpbmcoKS5yZXBsYWNlKC9eW14uXSpcLj8vLCIiKS5sZW5ndGg7cmV0dXJuIDE9PT1h'@;
put 'JiYwPT09ZD8xOjV9XTtsZXQgVWI9e307ZnVuY3Rpb24gbzEoYyl7Y29uc3QgbD1mdW5jdGlvbiBMOWUoYyl7cmV0dXJuIGMudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9fL2csIi0iKX0oYyk7bGV0IGE9YnJlKGwpO2lmKGEpcmV0dXJuIGE7Y29uc3QgZD1sLnNwbGl0KCItIilbMF07aWYoYT1i'@;
put 'cmUoZCksYSlyZXR1cm4gYTtpZigiZW4iPT09ZClyZXR1cm4gSTllO3Rocm93IG5ldyBRbig3MDEsITEpfWZ1bmN0aW9uIGJyZShjKXtyZXR1cm4gYyBpbiBVYnx8KFViW2NdPVZ0Lm5nJiZWdC5uZy5jb21tb24mJlZ0Lm5nLmNvbW1vbi5sb2NhbGVzJiZWdC5uZy5jb21tb24ubG9jYWxlc1tj'@;
put 'XSksVWJbY119dmFyIGVjPWZ1bmN0aW9uKGMpe3JldHVybiBjW2MuTG9jYWxlSWQ9MF09IkxvY2FsZUlkIixjW2MuRGF5UGVyaW9kc0Zvcm1hdD0xXT0iRGF5UGVyaW9kc0Zvcm1hdCIsY1tjLkRheVBlcmlvZHNTdGFuZGFsb25lPTJdPSJEYXlQZXJpb2RzU3RhbmRhbG9uZSIsY1tjLkRheXNG'@;
put 'b3JtYXQ9M109IkRheXNGb3JtYXQiLGNbYy5EYXlzU3RhbmRhbG9uZT00XT0iRGF5c1N0YW5kYWxvbmUiLGNbYy5Nb250aHNGb3JtYXQ9NV09Ik1vbnRoc0Zvcm1hdCIsY1tjLk1vbnRoc1N0YW5kYWxvbmU9Nl09Ik1vbnRoc1N0YW5kYWxvbmUiLGNbYy5FcmFzPTddPSJFcmFzIixjW2MuRmly'@;
put 'c3REYXlPZldlZWs9OF09IkZpcnN0RGF5T2ZXZWVrIixjW2MuV2Vla2VuZFJhbmdlPTldPSJXZWVrZW5kUmFuZ2UiLGNbYy5EYXRlRm9ybWF0PTEwXT0iRGF0ZUZvcm1hdCIsY1tjLlRpbWVGb3JtYXQ9MTFdPSJUaW1lRm9ybWF0IixjW2MuRGF0ZVRpbWVGb3JtYXQ9MTJdPSJEYXRlVGltZUZv'@;
put 'cm1hdCIsY1tjLk51bWJlclN5bWJvbHM9MTNdPSJOdW1iZXJTeW1ib2xzIixjW2MuTnVtYmVyRm9ybWF0cz0xNF09Ik51bWJlckZvcm1hdHMiLGNbYy5DdXJyZW5jeUNvZGU9MTVdPSJDdXJyZW5jeUNvZGUiLGNbYy5DdXJyZW5jeVN5bWJvbD0xNl09IkN1cnJlbmN5U3ltYm9sIixjW2MuQ3Vy'@;
put 'cmVuY3lOYW1lPTE3XT0iQ3VycmVuY3lOYW1lIixjW2MuQ3VycmVuY2llcz0xOF09IkN1cnJlbmNpZXMiLGNbYy5EaXJlY3Rpb25hbGl0eT0xOV09IkRpcmVjdGlvbmFsaXR5IixjW2MuUGx1cmFsQ2FzZT0yMF09IlBsdXJhbENhc2UiLGNbYy5FeHRyYURhdGE9MjFdPSJFeHRyYURhdGEiLGN9'@;
put 'KGVjfHx7fSk7Y29uc3QgWmI9ImVuLVVTIjtsZXQgeXJlPVpiO2Z1bmN0aW9uIEZ0KGMsbCxhLGQpe2NvbnN0IGg9ZGkoKSxmPWxzKCksdj11bCgpO3JldHVybiBoVShmLGgsaFtib10sdixjLGwsZCksRnR9ZnVuY3Rpb24gZFUoYyxsKXtjb25zdCBhPXVsKCksZD1kaSgpLGg9bHMoKTtyZXR1'@;
put 'cm4gaFUoaCxkLFc0KHNDKGguZGF0YSksYSxkKSxhLGMsbCksZFV9ZnVuY3Rpb24gaFUoYyxsLGEsZCxoLGYsdil7Y29uc3QgTT1KMChkKSxaPWMuZmlyc3RDcmVhdGVQYXNzJiZwOChjKSxyZT1sW2NsXSxjZT1ORChsKTtsZXQgYmU9ITA7aWYoMyZkLnR5cGV8fHYpe2NvbnN0IHFlPUwwKGQs'@;
put 'bCkscnQ9dj92KHFlKTpxZSxwdD1jZS5sZW5ndGgsZHQ9dj92bj0+dihDbCh2bltkLmluZGV4XSkpOmQuaW5kZXg7bGV0IEp0PW51bGw7aWYoIXYmJk0mJihKdD1mdW5jdGlvbiBrdmUoYyxsLGEsZCl7Y29uc3QgaD1jLmNsZWFudXA7aWYobnVsbCE9aClmb3IobGV0IGY9MDtmPGgubGVuZ3Ro'@;
put 'LTE7Zis9Mil7Y29uc3Qgdj1oW2ZdO2lmKHY9PT1hJiZoW2YrMV09PT1kKXtjb25zdCBNPWxbWDBdLEQ9aFtmKzJdO3JldHVybiBNLmxlbmd0aD5EP01bRF06bnVsbH0ic3RyaW5nIj09dHlwZW9mIHYmJihmKz0yKX1yZXR1cm4gbnVsbH0oYyxsLGgsZC5pbmRleCkpLG51bGwhPT1KdCkoSnQu'@;
put 'X19uZ0xhc3RMaXN0ZW5lckZuX198fEp0KS5fX25nTmV4dExpc3RlbmVyRm5fXz1mLEp0Ll9fbmdMYXN0TGlzdGVuZXJGbl9fPWYsYmU9ITE7ZWxzZXtmPVlyZShkLGwscmUsZiwhMSk7Y29uc3Qgdm49YS5saXN0ZW4ocnQsaCxmKTtjZS5wdXNoKGYsdm4pLFomJloucHVzaChoLGR0LHB0LHB0'@;
put 'KzEpfX1lbHNlIGY9WXJlKGQsbCxyZSxmLCExKTtjb25zdCBFZT1kLm91dHB1dHM7bGV0IEJlO2lmKGJlJiZudWxsIT09RWUmJihCZT1FZVtoXSkpe2NvbnN0IHFlPUJlLmxlbmd0aDtpZihxZSlmb3IobGV0IHJ0PTA7cnQ8cWU7cnQrPTIpe2NvbnN0IENuPWxbQmVbcnRdXVtCZVtydCsxXV0u'@;
put 'c3Vic2NyaWJlKGYpLHRuPWNlLmxlbmd0aDtjZS5wdXNoKGYsQ24pLFomJloucHVzaChoLGQuaW5kZXgsdG4sLSh0bisxKSl9fX1mdW5jdGlvbiBXcmUoYyxsLGEsZCl7Y29uc3QgaD1fZShudWxsKTt0cnl7cmV0dXJuIHUyKDYsbCxhKSwhMSE9PWEoZCl9Y2F0Y2goZil7cmV0dXJuIHo1KGMs'@;
put 'ZiksITF9ZmluYWxseXt1Mig3LGwsYSksX2UoaCl9fWZ1bmN0aW9uIFlyZShjLGwsYSxkLGgpe3JldHVybiBmdW5jdGlvbiBmKHYpe2lmKHY9PT1GdW5jdGlvbilyZXR1cm4gZDt5OChjLmNvbXBvbmVudE9mZnNldD4tMT9PMShjLmluZGV4LGwpOmwpO2xldCBEPVdyZShsLGEsZCx2KSxaPWYu'@;
put 'X19uZ05leHRMaXN0ZW5lckZuX187Zm9yKDtaOylEPVdyZShsLGEsWix2KSYmRCxaPVouX19uZ05leHRMaXN0ZW5lckZuX187cmV0dXJuIGgmJiExPT09RCYmdi5wcmV2ZW50RGVmYXVsdCgpLER9fWZ1bmN0aW9uIFJlKGM9MSl7cmV0dXJuIGZ1bmN0aW9uIHdWKGMpe3JldHVybihDby5sRnJh'@;
put 'bWUuY29udGV4dExWaWV3PWZ1bmN0aW9uIHRDKGMsbCl7Zm9yKDtjPjA7KWw9bFtvMF0sYy0tO3JldHVybiBsfShjLENvLmxGcmFtZS5jb250ZXh0TFZpZXcpKVtjbF19KGMpfWZ1bmN0aW9uIER2ZShjLGwpe2xldCBhPW51bGw7Y29uc3QgZD1mdW5jdGlvbiBmdihjKXtjb25zdCBsPWMuYXR0'@;
put 'cnM7aWYobnVsbCE9bCl7Y29uc3QgYT1sLmluZGV4T2YoNSk7aWYoISgxJmEpKXJldHVybiBsW2ErMV19cmV0dXJuIG51bGx9KGMpO2ZvcihsZXQgaD0wO2g8bC5sZW5ndGg7aCsrKXtjb25zdCBmPWxbaF07aWYoIioiIT09Zil7aWYobnVsbD09PWQ/YjQoYyxmLCEwKTpOdyhkLGYpKXJldHVy'@;
put 'biBofWVsc2UgYT1ofXJldHVybiBhfWZ1bmN0aW9uIHNhKGMpe2NvbnN0IGw9ZGkoKVtabF1bcmNdO2lmKCFsLnByb2plY3Rpb24pe2NvbnN0IGQ9bC5wcm9qZWN0aW9uPWZ1bmN0aW9uIFFoKGMsbCl7Y29uc3QgYT1bXTtmb3IobGV0IGQ9MDtkPGM7ZCsrKWEucHVzaChsKTtyZXR1cm4gYX0o'@;
put 'Yz9jLmxlbmd0aDoxLG51bGwpLGg9ZC5zbGljZSgpO2xldCBmPWwuY2hpbGQ7Zm9yKDtudWxsIT09Zjspe2NvbnN0IHY9Yz9EdmUoZixjKTowO251bGwhPT12JiYoaFt2XT9oW3ZdLnByb2plY3Rpb25OZXh0PWY6ZFt2XT1mLGhbdl09ZiksZj1mLm5leHR9fX1mdW5jdGlvbiBZcihjLGw9MCxh'@;
put 'KXtjb25zdCBkPWRpKCksaD1scygpLGY9ajUoaCx3bytjLDE2LG51bGwsYXx8bnVsbCk7bnVsbD09PWYucHJvamVjdGlvbiYmKGYucHJvamVjdGlvbj1sKSxhQygpLCghZFtudV18fF81KCkpJiYzMiZ+Zi5mbGFncyYmZnVuY3Rpb24gdGooYyxsLGEpe2JEKGxbYm9dLDAsbCxhLGFiKGMsYSxs'@;
put 'KSx1OChhLnBhcmVudHx8bFtyY10sYSxsKSl9KGgsZCxmKX1mdW5jdGlvbiBmTShjLGwsYSl7cmV0dXJuIGZVKGMsIiIsbCwiIixhKSxmTX1mdW5jdGlvbiBmVShjLGwsYSxkLGgpe2NvbnN0IGY9ZGkoKSx2PVlsKGYsbCxhLGQpO3JldHVybiB2IT09Um8mJkYwKGxzKCksUXMoKSxmLGMsdixm'@;
put 'W2JvXSxoLCExKSxmVX1mdW5jdGlvbiBhbyhjLGwsYSxkKXshZnVuY3Rpb24gYkkoYyxsLGEsZCl7Y29uc3QgaD1scygpO2lmKGguZmlyc3RDcmVhdGVQYXNzKXtjb25zdCBmPXVsKCk7X0koaCxuZXcgcEkobCxhLGQpLGYuaW5kZXgpLGZ1bmN0aW9uIE96KGMsbCl7Y29uc3QgYT1jLmNvbnRl'@;
put 'bnRRdWVyaWVzfHwoYy5jb250ZW50UXVlcmllcz1bXSk7bCE9PShhLmxlbmd0aD9hW2EubGVuZ3RoLTFdOi0xKSYmYS5wdXNoKGMucXVlcmllcy5sZW5ndGgtMSxsKX0oaCxjKSwhKDImfmEpJiYoaC5zdGF0aWNDb250ZW50UXVlcmllcz0hMCl9cmV0dXJuIG1JKGgsZGkoKSxhKX0oYyxsLGEs'@;
put 'ZCl9ZnVuY3Rpb24gcWEoYyxsLGEpeyFmdW5jdGlvbiB2SShjLGwsYSl7Y29uc3QgZD1scygpO3JldHVybiBkLmZpcnN0Q3JlYXRlUGFzcyYmKF9JKGQsbmV3IHBJKGMsbCxhKSwtMSksISgyJn5sKSYmKGQuc3RhdGljVmlld1F1ZXJpZXM9ITApKSxtSShkLGRpKCksbCl9KGMsbCxhKX1mdW5j'@;
put 'dGlvbiBDaShjKXtjb25zdCBsPWRpKCksYT1scygpLGQ9bEMoKTtCMyhkKzEpO2NvbnN0IGg9WVMoYSxkKTtpZihjLmRpcnR5JiZmdW5jdGlvbiBsVihjKXtyZXR1cm4hKDQmfmNbVWFdKX0obCk9PT0hKDImfmgubWV0YWRhdGEuZmxhZ3MpKXtpZihudWxsPT09aC5tYXRjaGVzKWMucmVzZXQo'@;
put 'W10pO2Vsc2V7Y29uc3QgZj13SShsLGQpO2MucmVzZXQoZix5ayksYy5ub3RpZnlPbkNoYW5nZXMoKX1yZXR1cm4hMH1yZXR1cm4hMX1mdW5jdGlvbiBTaSgpe3JldHVybiBmdW5jdGlvbiBJOChjLGwpe3JldHVybiBjW3VkXS5xdWVyaWVzW2xdLnF1ZXJ5TGlzdH0oZGkoKSxsQygpKX1mdW5j'@;
put 'dGlvbiBoYShjKXtyZXR1cm4gRTQoZnVuY3Rpb24gdlYoKXtyZXR1cm4gQ28ubEZyYW1lLmNvbnRleHRMVmlld30oKSx3bytjKX1mdW5jdGlvbiBMZShjLGw9IiIpe2NvbnN0IGE9ZGkoKSxkPWxzKCksaD1jK3dvLGY9ZC5maXJzdENyZWF0ZVBhc3M/ajUoZCxoLDEsbCxudWxsKTpkLmRhdGFb'@;
put 'aF0sdj11aWUoZCxhLGYsbCxjKTthW2hdPXYscTYoKSYmbDAoZCxhLHYsZiksaDIoZiwhMSl9bGV0IHVpZT0oYyxsLGEsZCxoKT0+KGYyKCEwKSxmdW5jdGlvbiBqNChjLGwpe3JldHVybiBjLmNyZWF0ZVRleHQobCl9KGxbYm9dLGQpKTtmdW5jdGlvbiB3cihjKXtyZXR1cm4gRHIoIiIsYywi'@;
put 'Iiksd3J9ZnVuY3Rpb24gRHIoYyxsLGEpe2NvbnN0IGQ9ZGkoKSxoPVlsKGQsYyxsLGEpO3JldHVybiBoIT09Um8mJnYyKGQsVnUoKSxoKSxEcn1mdW5jdGlvbiBVdShjLGwsYSxkLGgpe2NvbnN0IGY9ZGkoKSx2PWZ1bmN0aW9uIEdsKGMsbCxhLGQsaCxmKXtjb25zdCBNPXJwKGMsVGYoKSxh'@;
put 'LGgpO3JldHVybiBBZigyKSxNP2wrQ2EoYSkrZCtDYShoKStmOlJvfShmLGMsbCxhLGQsaCk7cmV0dXJuIHYhPT1SbyYmdjIoZixWdSgpLHYpLFV1fWZ1bmN0aW9uIFZmKGMsbCxhLGQsaCxmLHYpe2NvbnN0IE09ZGkoKSxEPWZ1bmN0aW9uIHl1KGMsbCxhLGQsaCxmLHYsTSl7Y29uc3QgWj1G'@;
put 'YihjLFRmKCksYSxoLHYpO3JldHVybiBBZigzKSxaP2wrQ2EoYSkrZCtDYShoKStmK0NhKHYpK006Um99KE0sYyxsLGEsZCxoLGYsdik7cmV0dXJuIEQhPT1SbyYmdjIoTSxWdSgpLEQpLFZmfWZ1bmN0aW9uIEtJKGMsbCxhLGQsaCxmLHYsTSxEKXtjb25zdCBaPWRpKCkscmU9ZnVuY3Rpb24g'@;
put 'TWwoYyxsLGEsZCxoLGYsdixNLEQsWil7Y29uc3QgY2U9YmQoYyxUZigpLGEsaCx2LEQpO3JldHVybiBBZig0KSxjZT9sK0NhKGEpK2QrQ2EoaCkrZitDYSh2KStNK0NhKEQpK1o6Um99KFosYyxsLGEsZCxoLGYsdixNLEQpO3JldHVybiByZSE9PVJvJiZ2MihaLFZ1KCkscmUpLEtJfWZ1bmN0'@;
put 'aW9uIHBpKGMsbCxhKXtTSShsKSYmKGw9bCgpKTtjb25zdCBkPWRpKCk7cmV0dXJuIEJjKGQsYWgoKSxsKSYmRjAobHMoKSxRcygpLGQsYyxsLGRbYm9dLGEsITEpLHBpfWZ1bmN0aW9uIG1pKGMsbCl7Y29uc3QgYT1TSShjKTtyZXR1cm4gYSYmYy5zZXQobCksYX1mdW5jdGlvbiBnaShjLGwp'@;
put 'e2NvbnN0IGE9ZGkoKSxkPWxzKCksaD11bCgpO3JldHVybiBoVShkLGEsYVtib10saCxjLGwpLGdpfWZ1bmN0aW9uIHBVKGMsbCxhLGQsaCl7aWYoYz1ZaShjKSxBcnJheS5pc0FycmF5KGMpKWZvcihsZXQgZj0wO2Y8Yy5sZW5ndGg7ZisrKXBVKGNbZl0sbCxhLGQsaCk7ZWxzZXtjb25zdCBm'@;
put 'PWxzKCksdj1kaSgpLE09dWwoKTtsZXQgRD1fZihjKT9jOllpKGMucHJvdmlkZSk7Y29uc3QgWj1DdihjKSxyZT0xMDQ4NTc1Jk0ucHJvdmlkZXJJbmRleGVzLGNlPU0uZGlyZWN0aXZlU3RhcnQsYmU9TS5wcm92aWRlckluZGV4ZXM+PjIwO2lmKF9mKGMpfHwhYy5tdWx0aSl7Y29uc3QgRWU9'@;
put 'bmV3IFAxKFosaCxHZSksQmU9bVUoRCxsLGg/cmU6cmUrYmUsY2UpOy0xPT09QmU/KGhkKE52KE0sdiksZixEKSxnVShmLGMsbC5sZW5ndGgpLGwucHVzaChEKSxNLmRpcmVjdGl2ZVN0YXJ0KyssTS5kaXJlY3RpdmVFbmQrKyxoJiYoTS5wcm92aWRlckluZGV4ZXMrPTEwNDg1NzYpLGEucHVz'@;
put 'aChFZSksdi5wdXNoKEVlKSk6KGFbQmVdPUVlLHZbQmVdPUVlKX1lbHNle2NvbnN0IEVlPW1VKEQsbCxyZStiZSxjZSksQmU9bVUoRCxsLHJlLHJlK2JlKSxydD1CZT49MCYmYVtCZV07aWYoaCYmIXJ0fHwhaCYmIShFZT49MCYmYVtFZV0pKXtoZChOdihNLHYpLGYsRCk7Y29uc3QgcHQ9ZnVu'@;
put 'Y3Rpb24gS3ZlKGMsbCxhLGQsaCl7Y29uc3QgZj1uZXcgUDEoYyxhLEdlKTtyZXR1cm4gZi5tdWx0aT1bXSxmLmluZGV4PWwsZi5jb21wb25lbnRQcm92aWRlcnM9MCxtaWUoZixoLGQmJiFhKSxmfShoPyR2ZTpHdmUsYS5sZW5ndGgsaCxkLFopOyFoJiZydCYmKGFbQmVdLnByb3ZpZGVyRmFj'@;
put 'dG9yeT1wdCksZ1UoZixjLGwubGVuZ3RoLDApLGwucHVzaChEKSxNLmRpcmVjdGl2ZVN0YXJ0KyssTS5kaXJlY3RpdmVFbmQrKyxoJiYoTS5wcm92aWRlckluZGV4ZXMrPTEwNDg1NzYpLGEucHVzaChwdCksdi5wdXNoKHB0KX1lbHNlIGdVKGYsYyxFZT4tMT9FZTpCZSxtaWUoYVtoP0JlOkVl'@;
put 'XSxaLCFoJiZkKSk7IWgmJmQmJnJ0JiZhW0JlXS5jb21wb25lbnRQcm92aWRlcnMrK319fWZ1bmN0aW9uIGdVKGMsbCxhLGQpe2NvbnN0IGg9X2YobCksZj1mdW5jdGlvbiBQNihjKXtyZXR1cm4hIWMudXNlQ2xhc3N9KGwpO2lmKGh8fGYpe2NvbnN0IEQ9KGY/WWkobC51c2VDbGFzcyk6bCku'@;
put 'cHJvdG90eXBlLm5nT25EZXN0cm95O2lmKEQpe2NvbnN0IFo9Yy5kZXN0cm95SG9va3N8fChjLmRlc3Ryb3lIb29rcz1bXSk7aWYoIWgmJmwubXVsdGkpe2NvbnN0IHJlPVouaW5kZXhPZihhKTstMT09PXJlP1oucHVzaChhLFtkLERdKTpaW3JlKzFdLnB1c2goZCxEKX1lbHNlIFoucHVzaChh'@;
put 'LEQpfX19ZnVuY3Rpb24gbWllKGMsbCxhKXtyZXR1cm4gYSYmYy5jb21wb25lbnRQcm92aWRlcnMrKyxjLm11bHRpLnB1c2gobCktMX1mdW5jdGlvbiBtVShjLGwsYSxkKXtmb3IobGV0IGg9YTtoPGQ7aCsrKWlmKGxbaF09PT1jKXJldHVybiBoO3JldHVybi0xfWZ1bmN0aW9uIEd2ZShjLGws'@;
put 'YSxkKXtyZXR1cm4gdlUodGhpcy5tdWx0aSxbXSl9ZnVuY3Rpb24gJHZlKGMsbCxhLGQpe2NvbnN0IGg9dGhpcy5tdWx0aTtsZXQgZjtpZih0aGlzLnByb3ZpZGVyRmFjdG9yeSl7Y29uc3Qgdj10aGlzLnByb3ZpZGVyRmFjdG9yeS5jb21wb25lbnRQcm92aWRlcnMsTT1ENChhLGFbS2ldLHRo'@;
put 'aXMucHJvdmlkZXJGYWN0b3J5LmluZGV4LGQpO2Y9TS5zbGljZSgwLHYpLHZVKGgsZik7Zm9yKGxldCBEPXY7RDxNLmxlbmd0aDtEKyspZi5wdXNoKE1bRF0pfWVsc2UgZj1bXSx2VShoLGYpO3JldHVybiBmfWZ1bmN0aW9uIHZVKGMsbCl7Zm9yKGxldCBhPTA7YTxjLmxlbmd0aDthKyspbC5w'@;
put 'dXNoKCgwLGNbYV0pKCkpO3JldHVybiBsfWZ1bmN0aW9uIGRhKGMsbD1bXSl7cmV0dXJuIGE9PnthLnByb3ZpZGVyc1Jlc29sdmVyPShkLGgpPT5mdW5jdGlvbiBZdmUoYyxsLGEpe2NvbnN0IGQ9bHMoKTtpZihkLmZpcnN0Q3JlYXRlUGFzcyl7Y29uc3QgaD1WYyhjKTtwVShhLGQuZGF0YSxk'@;
put 'LmJsdWVwcmludCxoLCEwKSxwVShsLGQuZGF0YSxkLmJsdWVwcmludCxoLCExKX19KGQsaD9oKGMpOmMsbCl9fWxldCBxdmU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLl9pbmplY3Rvcj1hLHRoaXMuY2FjaGVkSW5qZWN0b3JzPW5ldyBNYXB9Z2V0T3JDcmVhdGVTdGFuZGFs'@;
put 'b25lSW5qZWN0b3IoYSl7aWYoIWEuc3RhbmRhbG9uZSlyZXR1cm4gbnVsbDtpZighdGhpcy5jYWNoZWRJbmplY3RvcnMuaGFzKGEpKXtjb25zdCBkPXJoKDAsYS50eXBlKSxoPWQubGVuZ3RoPjA/RzQoW2RdLHRoaXMuX2luamVjdG9yLGBTdGFuZGFsb25lWyR7YS50eXBlLm5hbWV9XWApOm51'@;
put 'bGw7dGhpcy5jYWNoZWRJbmplY3RvcnMuc2V0KGEsaCl9cmV0dXJuIHRoaXMuY2FjaGVkSW5qZWN0b3JzLmdldChhKX1uZ09uRGVzdHJveSgpe3RyeXtmb3IoY29uc3QgYSBvZiB0aGlzLmNhY2hlZEluamVjdG9ycy52YWx1ZXMoKSludWxsIT09YSYmYS5kZXN0cm95KCl9ZmluYWxseXt0aGlz'@;
put 'LmNhY2hlZEluamVjdG9ycy5jbGVhcigpfX1zdGF0aWN7dGhpcy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLHByb3ZpZGVkSW46ImVudmlyb25tZW50IixmYWN0b3J5OigpPT5uZXcgYyh4cihoYykpfSl9fXJldHVybiBjfSkoKTtmdW5jdGlvbiBxSShjKXtiMigiTmdTdGFuZGFsb25lIiksYy5n'@;
put 'ZXRTdGFuZGFsb25lSW5qZWN0b3I9bD0+bC5nZXQocXZlKS5nZXRPckNyZWF0ZVN0YW5kYWxvbmVJbmplY3RvcihjKX1mdW5jdGlvbiBHcyhjLGwsYSl7Y29uc3QgZD1PMCgpK2MsaD1kaSgpO3JldHVybiBoW2RdPT09Um8/eTIoaCxkLGE/bC5jYWxsKGEpOmwoKSk6ZnVuY3Rpb24gQWMoYyxs'@;
put 'KXtyZXR1cm4gY1tsXX0oaCxkKX1mdW5jdGlvbiBzcChjLGwsYSxkKXtyZXR1cm4gYmllKGRpKCksTzAoKSxjLGwsYSxkKX1mdW5jdGlvbiBscChjLGwsYSxkLGgpe3JldHVybiB5aWUoZGkoKSxPMCgpLGMsbCxhLGQsaCl9ZnVuY3Rpb24gcE0oYyxsLGEsZCxoLGYpe3JldHVybiBfaWUoZGko'@;
put 'KSxPMCgpLGMsbCxhLGQsaCxmKX1mdW5jdGlvbiBKSShjLGwsYSxkLGgsZix2KXtyZXR1cm4gZnVuY3Rpb24gd2llKGMsbCxhLGQsaCxmLHYsTSxEKXtjb25zdCBaPWwrYTtyZXR1cm4gYmQoYyxaLGgsZix2LE0pP3kyKGMsWis0LEQ/ZC5jYWxsKEQsaCxmLHYsTSk6ZChoLGYsdixNKSk6Z00o'@;
put 'YyxaKzQpfShkaSgpLE8wKCksYyxsLGEsZCxoLGYsdil9ZnVuY3Rpb24gZ00oYyxsKXtjb25zdCBhPWNbbF07cmV0dXJuIGE9PT1Sbz92b2lkIDA6YX1mdW5jdGlvbiBiaWUoYyxsLGEsZCxoLGYpe2NvbnN0IHY9bCthO3JldHVybiBCYyhjLHYsaCk/eTIoYyx2KzEsZj9kLmNhbGwoZixoKTpk'@;
put 'KGgpKTpnTShjLHYrMSl9ZnVuY3Rpb24geWllKGMsbCxhLGQsaCxmLHYpe2NvbnN0IE09bCthO3JldHVybiBycChjLE0saCxmKT95MihjLE0rMix2P2QuY2FsbCh2LGgsZik6ZChoLGYpKTpnTShjLE0rMil9ZnVuY3Rpb24gX2llKGMsbCxhLGQsaCxmLHYsTSl7Y29uc3QgRD1sK2E7cmV0dXJu'@;
put 'IEZiKGMsRCxoLGYsdik/eTIoYyxEKzMsTT9kLmNhbGwoTSxoLGYsdik6ZChoLGYsdikpOmdNKGMsRCszKX1mdW5jdGlvbiBlbChjLGwpe2NvbnN0IGE9bHMoKTtsZXQgZDtjb25zdCBoPWMrd287YS5maXJzdENyZWF0ZVBhc3M/KGQ9ZnVuY3Rpb24gaWJlKGMsbCl7aWYobClmb3IobGV0IGE9'@;
put 'bC5sZW5ndGgtMTthPj0wO2EtLSl7Y29uc3QgZD1sW2FdO2lmKGM9PT1kLm5hbWUpcmV0dXJuIGR9fShsLGEucGlwZVJlZ2lzdHJ5KSxhLmRhdGFbaF09ZCxkLm9uRGVzdHJveSYmKGEuZGVzdHJveUhvb2tzPz89W10pLnB1c2goaCxkLm9uRGVzdHJveSkpOmQ9YS5kYXRhW2hdO2NvbnN0IGY9'@;
put 'ZC5mYWN0b3J5fHwoZC5mYWN0b3J5PW11KGQudHlwZSkpLE09X2woR2UpO3RyeXtjb25zdCBEPUZ2KCExKSxaPWYoKTtyZXR1cm4gRnYoRCksZnVuY3Rpb24gT3ZlKGMsbCxhLGQpe2E+PWMuZGF0YS5sZW5ndGgmJihjLmRhdGFbYV09bnVsbCxjLmJsdWVwcmludFthXT1udWxsKSxsW2FdPWR9'@;
put 'KGEsZGkoKSxoLFopLFp9ZmluYWxseXtfbChNKX19ZnVuY3Rpb24gRGMoYyxsLGEpe2NvbnN0IGQ9Yyt3byxoPWRpKCksZj1FNChoLGQpO3JldHVybiBtTShoLGQpP2JpZShoLE8wKCksbCxmLnRyYW5zZm9ybSxhLGYpOmYudHJhbnNmb3JtKGEpfWZ1bmN0aW9uIHo4KGMsbCxhLGQpe2NvbnN0'@;
put 'IGg9Yyt3byxmPWRpKCksdj1FNChmLGgpO3JldHVybiBtTShmLGgpP3lpZShmLE8wKCksbCx2LnRyYW5zZm9ybSxhLGQsdik6di50cmFuc2Zvcm0oYSxkKX1mdW5jdGlvbiBiVShjLGwsYSxkLGgpe2NvbnN0IGY9Yyt3byx2PWRpKCksTT1FNCh2LGYpO3JldHVybiBtTSh2LGYpP19pZSh2LE8w'@;
put 'KCksbCxNLnRyYW5zZm9ybSxhLGQsaCxNKTpNLnRyYW5zZm9ybShhLGQsaCl9ZnVuY3Rpb24gbU0oYyxsKXtyZXR1cm4gY1tLaV0uZGF0YVtsXS5wdXJlfWZ1bmN0aW9uIEljKGMsbCl7cmV0dXJuIGZiKGMsbCl9Y2xhc3MgYk17Y29uc3RydWN0b3IobCl7dGhpcy5mdWxsPWw7Y29uc3QgYT1s'@;
put 'LnNwbGl0KCIuIik7dGhpcy5tYWpvcj1hWzBdLHRoaXMubWlub3I9YVsxXSx0aGlzLnBhdGNoPWEuc2xpY2UoMikuam9pbigiLiIpfX1jb25zdCBOaWU9bmV3IGJNKCIxNy4zLjEyIik7bGV0IFZpZT0oKCk9PntjbGFzcyBje2xvZyhhKXtjb25zb2xlLmxvZyhhKX13YXJuKGEpe2NvbnNvbGUu'@;
put 'd2FybihhKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InBsYXRmb3JtIn0pfX1yZXR1cm4gY30pKCk7Y29uc3QgWmllPW5l'@;
put 'dyBTdCgiIiksdFI9bmV3IFN0KCIiKTtsZXQgRVUsTVU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCl7dGhpcy5fbmdab25lPWEsdGhpcy5yZWdpc3RyeT1kLHRoaXMuX3BlbmRpbmdDb3VudD0wLHRoaXMuX2lzWm9uZVN0YWJsZT0hMCx0aGlzLl9jYWxsYmFja3M9W10sdGhpcy50'@;
put 'YXNrVHJhY2tpbmdab25lPW51bGwsRVV8fChmdW5jdGlvbiBRYmUoYyl7RVU9Y30oaCksaC5hZGRUb1dpbmRvdyhkKSksdGhpcy5fd2F0Y2hBbmd1bGFyRXZlbnRzKCksYS5ydW4oKCk9Pnt0aGlzLnRhc2tUcmFja2luZ1pvbmU9dHlwZW9mIFpvbmU+InUiP251bGw6Wm9uZS5jdXJyZW50Lmdl'@;
put 'dCgiVGFza1RyYWNraW5nWm9uZSIpfSl9X3dhdGNoQW5ndWxhckV2ZW50cygpe3RoaXMuX25nWm9uZS5vblVuc3RhYmxlLnN1YnNjcmliZSh7bmV4dDooKT0+e3RoaXMuX2lzWm9uZVN0YWJsZT0hMX19KSx0aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9Pnt0aGlzLl9uZ1pvbmUu'@;
put 'b25TdGFibGUuc3Vic2NyaWJlKHtuZXh0OigpPT57V2EuYXNzZXJ0Tm90SW5Bbmd1bGFyWm9uZSgpLHF1ZXVlTWljcm90YXNrKCgpPT57dGhpcy5faXNab25lU3RhYmxlPSEwLHRoaXMuX3J1bkNhbGxiYWNrc0lmUmVhZHkoKX0pfX0pfSl9aW5jcmVhc2VQZW5kaW5nUmVxdWVzdENvdW50KCl7'@;
put 'cmV0dXJuIHRoaXMuX3BlbmRpbmdDb3VudCs9MSx0aGlzLl9wZW5kaW5nQ291bnR9ZGVjcmVhc2VQZW5kaW5nUmVxdWVzdENvdW50KCl7aWYodGhpcy5fcGVuZGluZ0NvdW50LT0xLHRoaXMuX3BlbmRpbmdDb3VudDwwKXRocm93IG5ldyBFcnJvcigicGVuZGluZyBhc3luYyByZXF1ZXN0cyBi'@;
put 'ZWxvdyB6ZXJvIik7cmV0dXJuIHRoaXMuX3J1bkNhbGxiYWNrc0lmUmVhZHkoKSx0aGlzLl9wZW5kaW5nQ291bnR9aXNTdGFibGUoKXtyZXR1cm4gdGhpcy5faXNab25lU3RhYmxlJiYwPT09dGhpcy5fcGVuZGluZ0NvdW50JiYhdGhpcy5fbmdab25lLmhhc1BlbmRpbmdNYWNyb3Rhc2tzfV9y'@;
put 'dW5DYWxsYmFja3NJZlJlYWR5KCl7aWYodGhpcy5pc1N0YWJsZSgpKXF1ZXVlTWljcm90YXNrKCgpPT57Zm9yKDswIT09dGhpcy5fY2FsbGJhY2tzLmxlbmd0aDspe2xldCBhPXRoaXMuX2NhbGxiYWNrcy5wb3AoKTtjbGVhclRpbWVvdXQoYS50aW1lb3V0SWQpLGEuZG9uZUNiKCl9fSk7ZWxz'@;
put 'ZXtsZXQgYT10aGlzLmdldFBlbmRpbmdUYXNrcygpO3RoaXMuX2NhbGxiYWNrcz10aGlzLl9jYWxsYmFja3MuZmlsdGVyKGQ9PiFkLnVwZGF0ZUNifHwhZC51cGRhdGVDYihhKXx8KGNsZWFyVGltZW91dChkLnRpbWVvdXRJZCksITEpKX19Z2V0UGVuZGluZ1Rhc2tzKCl7cmV0dXJuIHRoaXMu'@;
put 'dGFza1RyYWNraW5nWm9uZT90aGlzLnRhc2tUcmFja2luZ1pvbmUubWFjcm9UYXNrcy5tYXAoYT0+KHtzb3VyY2U6YS5zb3VyY2UsY3JlYXRpb25Mb2NhdGlvbjphLmNyZWF0aW9uTG9jYXRpb24sZGF0YTphLmRhdGF9KSk6W119YWRkQ2FsbGJhY2soYSxkLGgpe2xldCBmPS0xO2QmJmQ+MCYm'@;
put 'KGY9c2V0VGltZW91dCgoKT0+e3RoaXMuX2NhbGxiYWNrcz10aGlzLl9jYWxsYmFja3MuZmlsdGVyKHY9PnYudGltZW91dElkIT09ZiksYSgpfSxkKSksdGhpcy5fY2FsbGJhY2tzLnB1c2goe2RvbmVDYjphLHRpbWVvdXRJZDpmLHVwZGF0ZUNiOmh9KX13aGVuU3RhYmxlKGEsZCxoKXtpZiho'@;
put 'JiYhdGhpcy50YXNrVHJhY2tpbmdab25lKXRocm93IG5ldyBFcnJvcignVGFzayB0cmFja2luZyB6b25lIGlzIHJlcXVpcmVkIHdoZW4gcGFzc2luZyBhbiB1cGRhdGUgY2FsbGJhY2sgdG8gd2hlblN0YWJsZSgpLiBJcyAiem9uZS5qcy9wbHVnaW5zL3Rhc2stdHJhY2tpbmciIGxvYWRlZD8n'@;
put 'KTt0aGlzLmFkZENhbGxiYWNrKGEsZCxoKSx0aGlzLl9ydW5DYWxsYmFja3NJZlJlYWR5KCl9Z2V0UGVuZGluZ1JlcXVlc3RDb3VudCgpe3JldHVybiB0aGlzLl9wZW5kaW5nQ291bnR9cmVnaXN0ZXJBcHBsaWNhdGlvbihhKXt0aGlzLnJlZ2lzdHJ5LnJlZ2lzdGVyQXBwbGljYXRpb24oYSx0'@;
put 'aGlzKX11bnJlZ2lzdGVyQXBwbGljYXRpb24oYSl7dGhpcy5yZWdpc3RyeS51bnJlZ2lzdGVyQXBwbGljYXRpb24oYSl9ZmluZFByb3ZpZGVycyhhLGQsaCl7cmV0dXJuW119c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoeHIoV2EpLHhyKHhVKSx4'@;
put 'cih0UikpfX1zdGF0aWN7dGhpcy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KX19cmV0dXJuIGN9KSgpLHhVPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLl9hcHBsaWNhdGlvbnM9bmV3IE1hcH1yZWdpc3RlckFwcGxpY2F0aW9uKGEsZCl7dGhp'@;
put 'cy5fYXBwbGljYXRpb25zLnNldChhLGQpfXVucmVnaXN0ZXJBcHBsaWNhdGlvbihhKXt0aGlzLl9hcHBsaWNhdGlvbnMuZGVsZXRlKGEpfXVucmVnaXN0ZXJBbGxBcHBsaWNhdGlvbnMoKXt0aGlzLl9hcHBsaWNhdGlvbnMuY2xlYXIoKX1nZXRUZXN0YWJpbGl0eShhKXtyZXR1cm4gdGhpcy5f'@;
put 'YXBwbGljYXRpb25zLmdldChhKXx8bnVsbH1nZXRBbGxUZXN0YWJpbGl0aWVzKCl7cmV0dXJuIEFycmF5LmZyb20odGhpcy5fYXBwbGljYXRpb25zLnZhbHVlcygpKX1nZXRBbGxSb290RWxlbWVudHMoKXtyZXR1cm4gQXJyYXkuZnJvbSh0aGlzLl9hcHBsaWNhdGlvbnMua2V5cygpKX1maW5k'@;
put 'VGVzdGFiaWxpdHlJblRyZWUoYSxkPSEwKXtyZXR1cm4gRVU/LmZpbmRUZXN0YWJpbGl0eUluVHJlZSh0aGlzLGEsZCk/P251bGx9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFj'@;
put 'dG9yeTpjLlx1MDI3NWZhYyxwcm92aWRlZEluOiJwbGF0Zm9ybSJ9KX19cmV0dXJuIGN9KSgpO2Z1bmN0aW9uIF9NKGMpe3JldHVybiEhYyYmImZ1bmN0aW9uIj09dHlwZW9mIGMudGhlbn1mdW5jdGlvbiBXaWUoYyl7cmV0dXJuISFjJiYiZnVuY3Rpb24iPT10eXBlb2YgYy5zdWJzY3JpYmV9'@;
put 'Y29uc3QgVFU9bmV3IFN0KCIiKTtsZXQgQVU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuaW5pdGlhbGl6ZWQ9ITEsdGhpcy5kb25lPSExLHRoaXMuZG9uZVByb21pc2U9bmV3IFByb21pc2UoKGEsZCk9Pnt0aGlzLnJlc29sdmU9YSx0aGlzLnJlamVjdD1kfSksdGhpcy5hcHBJ'@;
put 'bml0cz1maShUVSx7b3B0aW9uYWw6ITB9KT8/W119cnVuSW5pdGlhbGl6ZXJzKCl7aWYodGhpcy5pbml0aWFsaXplZClyZXR1cm47Y29uc3QgYT1bXTtmb3IoY29uc3QgaCBvZiB0aGlzLmFwcEluaXRzKXtjb25zdCBmPWgoKTtpZihfTShmKSlhLnB1c2goZik7ZWxzZSBpZihXaWUoZikpe2Nv'@;
put 'bnN0IHY9bmV3IFByb21pc2UoKE0sRCk9PntmLnN1YnNjcmliZSh7Y29tcGxldGU6TSxlcnJvcjpEfSl9KTthLnB1c2godil9fWNvbnN0IGQ9KCk9Pnt0aGlzLmRvbmU9ITAsdGhpcy5yZXNvbHZlKCl9O1Byb21pc2UuYWxsKGEpLnRoZW4oKCk9PntkKCl9KS5jYXRjaChoPT57dGhpcy5yZWpl'@;
put 'Y3QoaCl9KSwwPT09YS5sZW5ndGgmJmQoKSx0aGlzLmluaXRpYWxpemVkPSEwfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWMscHJvdmlkZWRJbjoi'@;
put 'cm9vdCJ9KX19cmV0dXJuIGN9KSgpO2NvbnN0IGtVPW5ldyBTdCgiIik7ZnVuY3Rpb24gJGllKGMsbCl7cmV0dXJuIEFycmF5LmlzQXJyYXkobCk/bC5yZWR1Y2UoJGllLGMpOnsuLi5jLC4uLmx9fWxldCBxND0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5fYm9vdHN0cmFwTGlz'@;
put 'dGVuZXJzPVtdLHRoaXMuX3J1bm5pbmdUaWNrPSExLHRoaXMuX2Rlc3Ryb3llZD0hMSx0aGlzLl9kZXN0cm95TGlzdGVuZXJzPVtdLHRoaXMuX3ZpZXdzPVtdLHRoaXMuaW50ZXJuYWxFcnJvckhhbmRsZXI9ZmkodmspLHRoaXMuYWZ0ZXJSZW5kZXJFZmZlY3RNYW5hZ2VyPWZpKEU4KSx0aGlz'@;
put 'LmV4dGVybmFsVGVzdFZpZXdzPW5ldyBTZXQsdGhpcy5iZWZvcmVSZW5kZXI9bmV3IFduLHRoaXMuYWZ0ZXJUaWNrPW5ldyBXbix0aGlzLmNvbXBvbmVudFR5cGVzPVtdLHRoaXMuY29tcG9uZW50cz1bXSx0aGlzLmlzU3RhYmxlPWZpKFBmKS5oYXNQZW5kaW5nVGFza3MucGlwZShMcihhPT4h'@;
put 'YSkpLHRoaXMuX2luamVjdG9yPWZpKGhjKX1nZXQgZGVzdHJveWVkKCl7cmV0dXJuIHRoaXMuX2Rlc3Ryb3llZH1nZXQgaW5qZWN0b3IoKXtyZXR1cm4gdGhpcy5faW5qZWN0b3J9Ym9vdHN0cmFwKGEsZCl7Y29uc3QgaD1hIGluc3RhbmNlb2YgUUQ7aWYoIXRoaXMuX2luamVjdG9yLmdldChB'@;
put 'VSkuZG9uZSl0aHJvdyFoJiZmdW5jdGlvbiBuMihjKXtjb25zdCBsPVZvKGMpfHx4YyhjKXx8ZXUoYyk7cmV0dXJuIG51bGwhPT1sJiZsLnN0YW5kYWxvbmV9KGEpLG5ldyBRbig0MDUsITEpO2xldCB2O3Y9aD9hOnRoaXMuX2luamVjdG9yLmdldChXNSkucmVzb2x2ZUNvbXBvbmVudEZhY3Rv'@;
put 'cnkoYSksdGhpcy5jb21wb25lbnRUeXBlcy5wdXNoKHYuY29tcG9uZW50VHlwZSk7Y29uc3QgTT1mdW5jdGlvbiBleWUoYyl7cmV0dXJuIGMuaXNCb3VuZFRvTW9kdWxlfSh2KT92b2lkIDA6dGhpcy5faW5qZWN0b3IuZ2V0KG5wKSxaPXYuY3JlYXRlKERzLk5VTEwsW10sZHx8di5zZWxlY3Rv'@;
put 'cixNKSxyZT1aLmxvY2F0aW9uLm5hdGl2ZUVsZW1lbnQsY2U9Wi5pbmplY3Rvci5nZXQoWmllLG51bGwpO3JldHVybiBjZT8ucmVnaXN0ZXJBcHBsaWNhdGlvbihyZSksWi5vbkRlc3Ryb3koKCk9Pnt0aGlzLmRldGFjaFZpZXcoWi5ob3N0VmlldyksblIodGhpcy5jb21wb25lbnRzLFopLGNl'@;
put 'Py51bnJlZ2lzdGVyQXBwbGljYXRpb24ocmUpfSksdGhpcy5fbG9hZENvbXBvbmVudChaKSxafXRpY2soKXt0aGlzLl90aWNrKCEwKX1fdGljayhhKXtpZih0aGlzLl9ydW5uaW5nVGljayl0aHJvdyBuZXcgUW4oMTAxLCExKTtjb25zdCBkPV9lKG51bGwpO3RyeXt0aGlzLl9ydW5uaW5nVGlj'@;
put 'az0hMCx0aGlzLmRldGVjdENoYW5nZXNJbkF0dGFjaGVkVmlld3MoYSl9Y2F0Y2goaCl7dGhpcy5pbnRlcm5hbEVycm9ySGFuZGxlcihoKX1maW5hbGx5e3RoaXMuYWZ0ZXJUaWNrLm5leHQoKSx0aGlzLl9ydW5uaW5nVGljaz0hMSxfZShkKX19ZGV0ZWN0Q2hhbmdlc0luQXR0YWNoZWRWaWV3'@;
put 'cyhhKXtsZXQgZD0wO2NvbnN0IGg9dGhpcy5hZnRlclJlbmRlckVmZmVjdE1hbmFnZXI7Zm9yKDs7KXtpZihkPT09akQpdGhyb3cgbmV3IFFuKDEwMywhMSk7aWYoYSl7Y29uc3QgZj0wPT09ZDt0aGlzLmJlZm9yZVJlbmRlci5uZXh0KGYpO2ZvcihsZXR7X2xWaWV3OnYsbm90aWZ5RXJyb3JI'@;
put 'YW5kbGVyOk19b2YgdGhpcy5fdmlld3MpbnllKHYsZixNKX1pZihkKyssaC5leGVjdXRlSW50ZXJuYWxDYWxsYmFja3MoKSwhWy4uLnRoaXMuZXh0ZXJuYWxUZXN0Vmlld3Mua2V5cygpLC4uLnRoaXMuX3ZpZXdzXS5zb21lKCh7X2xWaWV3OmZ9KT0+RFUoZikpJiYoaC5leGVjdXRlKCksIVsu'@;
put 'Li50aGlzLmV4dGVybmFsVGVzdFZpZXdzLmtleXMoKSwuLi50aGlzLl92aWV3c10uc29tZSgoe19sVmlldzpmfSk9PkRVKGYpKSkpYnJlYWt9fWF0dGFjaFZpZXcoYSl7Y29uc3QgZD1hO3RoaXMuX3ZpZXdzLnB1c2goZCksZC5hdHRhY2hUb0FwcFJlZih0aGlzKX1kZXRhY2hWaWV3KGEpe2Nv'@;
put 'bnN0IGQ9YTtuUih0aGlzLl92aWV3cyxkKSxkLmRldGFjaEZyb21BcHBSZWYoKX1fbG9hZENvbXBvbmVudChhKXt0aGlzLmF0dGFjaFZpZXcoYS5ob3N0VmlldyksdGhpcy50aWNrKCksdGhpcy5jb21wb25lbnRzLnB1c2goYSk7Y29uc3QgZD10aGlzLl9pbmplY3Rvci5nZXQoa1UsW10pO1su'@;
put 'Li50aGlzLl9ib290c3RyYXBMaXN0ZW5lcnMsLi4uZF0uZm9yRWFjaChoPT5oKGEpKX1uZ09uRGVzdHJveSgpe2lmKCF0aGlzLl9kZXN0cm95ZWQpdHJ5e3RoaXMuX2Rlc3Ryb3lMaXN0ZW5lcnMuZm9yRWFjaChhPT5hKCkpLHRoaXMuX3ZpZXdzLnNsaWNlKCkuZm9yRWFjaChhPT5hLmRlc3Ry'@;
put 'b3koKSl9ZmluYWxseXt0aGlzLl9kZXN0cm95ZWQ9ITAsdGhpcy5fdmlld3M9W10sdGhpcy5fYm9vdHN0cmFwTGlzdGVuZXJzPVtdLHRoaXMuX2Rlc3Ryb3lMaXN0ZW5lcnM9W119fW9uRGVzdHJveShhKXtyZXR1cm4gdGhpcy5fZGVzdHJveUxpc3RlbmVycy5wdXNoKGEpLCgpPT5uUih0aGlz'@;
put 'Ll9kZXN0cm95TGlzdGVuZXJzLGEpfWRlc3Ryb3koKXtpZih0aGlzLl9kZXN0cm95ZWQpdGhyb3cgbmV3IFFuKDQwNiwhMSk7Y29uc3QgYT10aGlzLl9pbmplY3RvcjthLmRlc3Ryb3kmJiFhLmRlc3Ryb3llZCYmYS5kZXN0cm95KCl9Z2V0IHZpZXdDb3VudCgpe3JldHVybiB0aGlzLl92aWV3'@;
put 'cy5sZW5ndGh9d2FybklmRGVzdHJveWVkKCl7fXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KX19cmV0dXJuIGN9'@;
put 'KSgpO2Z1bmN0aW9uIG5SKGMsbCl7Y29uc3QgYT1jLmluZGV4T2YobCk7YT4tMSYmYy5zcGxpY2UoYSwxKX1mdW5jdGlvbiBueWUoYyxsLGEpeyFsJiYhRFUoYyl8fGZ1bmN0aW9uIHJ5ZShjLGwsYSl7bGV0IGQ7YT8oZD0wLGNbVWFdfD0xMDI0KTpkPTY0JmNbVWFdPzA6MSxoYihjLGwsZCl9'@;
put 'KGMsYSxsKX1mdW5jdGlvbiBEVShjKXtyZXR1cm4gVHYoYyl9Y2xhc3MgaXlle2NvbnN0cnVjdG9yKGwsYSl7dGhpcy5uZ01vZHVsZUZhY3Rvcnk9bCx0aGlzLmNvbXBvbmVudEZhY3Rvcmllcz1hfX1sZXQgS2llPSgoKT0+e2NsYXNzIGN7Y29tcGlsZU1vZHVsZVN5bmMoYSl7cmV0dXJuIG5l'@;
put 'dyBMYihhKX1jb21waWxlTW9kdWxlQXN5bmMoYSl7cmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLmNvbXBpbGVNb2R1bGVTeW5jKGEpKX1jb21waWxlTW9kdWxlQW5kQWxsQ29tcG9uZW50c1N5bmMoYSl7Y29uc3QgZD10aGlzLmNvbXBpbGVNb2R1bGVTeW5jKGEpLGY9RjEoUHUoYSkuZGVj'@;
put 'bGFyYXRpb25zKS5yZWR1Y2UoKHYsTSk9Pntjb25zdCBEPVZvKE0pO3JldHVybiBEJiZ2LnB1c2gobmV3IGs4KEQpKSx2fSxbXSk7cmV0dXJuIG5ldyBpeWUoZCxmKX1jb21waWxlTW9kdWxlQW5kQWxsQ29tcG9uZW50c0FzeW5jKGEpe3JldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5jb21w'@;
put 'aWxlTW9kdWxlQW5kQWxsQ29tcG9uZW50c1N5bmMoYSkpfWNsZWFyQ2FjaGUoKXt9Y2xlYXJDYWNoZUZvcihhKXt9Z2V0TW9kdWxlSWQoYSl7fXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVwcm92PWFuKHt0b2tl'@;
put 'bjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KX19cmV0dXJuIGN9KSgpLHN5ZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy56b25lPWZpKFdhKSx0aGlzLmFwcGxpY2F0aW9uUmVmPWZpKHE0KX1pbml0aWFsaXplKCl7dGhpcy5fb25NaWNyb3Rhc2tF'@;
put 'bXB0eVN1YnNjcmlwdGlvbnx8KHRoaXMuX29uTWljcm90YXNrRW1wdHlTdWJzY3JpcHRpb249dGhpcy56b25lLm9uTWljcm90YXNrRW1wdHkuc3Vic2NyaWJlKHtuZXh0OigpPT57dGhpcy56b25lLnJ1bigoKT0+e3RoaXMuYXBwbGljYXRpb25SZWYudGljaygpfSl9fSkpfW5nT25EZXN0cm95'@;
put 'KCl7dGhpcy5fb25NaWNyb3Rhc2tFbXB0eVN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjLHByb3Zp'@;
put 'ZGVkSW46InJvb3QifSl9fXJldHVybiBjfSkoKTtmdW5jdGlvbiBseWUoKXtjb25zdCBjPWZpKFdhKSxsPWZpKGcyKTtyZXR1cm4gYT0+Yy5ydW5PdXRzaWRlQW5ndWxhcigoKT0+bC5oYW5kbGVFcnJvcihhKSl9bGV0IHV5ZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5zdWJz'@;
put 'Y3JpcHRpb249bmV3IHF0LHRoaXMuaW5pdGlhbGl6ZWQ9ITEsdGhpcy56b25lPWZpKFdhKSx0aGlzLnBlbmRpbmdUYXNrcz1maShQZil9aW5pdGlhbGl6ZSgpe2lmKHRoaXMuaW5pdGlhbGl6ZWQpcmV0dXJuO3RoaXMuaW5pdGlhbGl6ZWQ9ITA7bGV0IGE9bnVsbDshdGhpcy56b25lLmlzU3Rh'@;
put 'YmxlJiYhdGhpcy56b25lLmhhc1BlbmRpbmdNYWNyb3Rhc2tzJiYhdGhpcy56b25lLmhhc1BlbmRpbmdNaWNyb3Rhc2tzJiYoYT10aGlzLnBlbmRpbmdUYXNrcy5hZGQoKSksdGhpcy56b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57dGhpcy5zdWJzY3JpcHRpb24uYWRkKHRoaXMuem9uZS5v'@;
put 'blN0YWJsZS5zdWJzY3JpYmUoKCk9PntXYS5hc3NlcnROb3RJbkFuZ3VsYXJab25lKCkscXVldWVNaWNyb3Rhc2soKCk9PntudWxsIT09YSYmIXRoaXMuem9uZS5oYXNQZW5kaW5nTWFjcm90YXNrcyYmIXRoaXMuem9uZS5oYXNQZW5kaW5nTWljcm90YXNrcyYmKHRoaXMucGVuZGluZ1Rhc2tz'@;
put 'LnJlbW92ZShhKSxhPW51bGwpfSl9KSl9KSx0aGlzLnN1YnNjcmlwdGlvbi5hZGQodGhpcy56b25lLm9uVW5zdGFibGUuc3Vic2NyaWJlKCgpPT57V2EuYXNzZXJ0SW5Bbmd1bGFyWm9uZSgpLGE/Pz10aGlzLnBlbmRpbmdUYXNrcy5hZGQoKX0pKX1uZ09uRGVzdHJveSgpe3RoaXMuc3Vic2Ny'@;
put 'aXB0aW9uLnVuc3Vic2NyaWJlKCl9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pfX1yZXR1cm4gY30pKCk7Y29u'@;
put 'c3QgQmY9bmV3IFN0KCIiLHtwcm92aWRlZEluOiJyb290IixmYWN0b3J5OigpPT5maShCZixyYS5PcHRpb25hbHxyYS5Ta2lwU2VsZil8fGZ1bmN0aW9uIGR5ZSgpe3JldHVybiB0eXBlb2YgJGxvY2FsaXplPCJ1IiYmJGxvY2FsaXplLmxvY2FsZXx8WmJ9KCl9KSxJVT1uZXcgU3QoIiIpO2xl'@;
put 'dCBRaWU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLl9pbmplY3Rvcj1hLHRoaXMuX21vZHVsZXM9W10sdGhpcy5fZGVzdHJveUxpc3RlbmVycz1bXSx0aGlzLl9kZXN0cm95ZWQ9ITF9Ym9vdHN0cmFwTW9kdWxlRmFjdG9yeShhLGQpe2NvbnN0IGg9ZnVuY3Rpb24gaUkoYz0i'@;
put 'em9uZS5qcyIsbCl7cmV0dXJuIm5vb3AiPT09Yz9uZXcgckk6InpvbmUuanMiPT09Yz9uZXcgV2EobCk6Y30oZD8ubmdab25lLGZ1bmN0aW9uIEppZShjKXtyZXR1cm57ZW5hYmxlTG9uZ1N0YWNrVHJhY2U6ITEsc2hvdWxkQ29hbGVzY2VFdmVudENoYW5nZURldGVjdGlvbjpjPy5ldmVudENv'@;
put 'YWxlc2Npbmc/PyExLHNob3VsZENvYWxlc2NlUnVuQ2hhbmdlRGV0ZWN0aW9uOmM/LnJ1bkNvYWxlc2Npbmc/PyExfX0oe2V2ZW50Q29hbGVzY2luZzpkPy5uZ1pvbmVFdmVudENvYWxlc2NpbmcscnVuQ29hbGVzY2luZzpkPy5uZ1pvbmVSdW5Db2FsZXNjaW5nfSkpO3JldHVybiBoLnJ1bigo'@;
put 'KT0+e2NvbnN0IGY9ZnVuY3Rpb24gRkkoYyxsLGEpe3JldHVybiBuZXcgUmIoYyxsLGEpfShhLm1vZHVsZVR5cGUsdGhpcy5pbmplY3RvcixmdW5jdGlvbiBYaWUoYyl7cmV0dXJuW3twcm92aWRlOldhLHVzZUZhY3Rvcnk6Y30se3Byb3ZpZGU6dDIsbXVsdGk6ITAsdXNlRmFjdG9yeTooKT0+'@;
put 'e2NvbnN0IGw9Zmkoc3llLHtvcHRpb25hbDohMH0pO3JldHVybigpPT5sLmluaXRpYWxpemUoKX19LHtwcm92aWRlOnQyLG11bHRpOiEwLHVzZUZhY3Rvcnk6KCk9Pntjb25zdCBsPWZpKHV5ZSk7cmV0dXJuKCk9PntsLmluaXRpYWxpemUoKX19fSx7cHJvdmlkZTp2ayx1c2VGYWN0b3J5Omx5'@;
put 'ZX1dfSgoKT0+aCkpLHY9Zi5pbmplY3Rvci5nZXQoZzIsbnVsbCk7cmV0dXJuIGgucnVuT3V0c2lkZUFuZ3VsYXIoKCk9Pntjb25zdCBNPWgub25FcnJvci5zdWJzY3JpYmUoe25leHQ6RD0+e3YuaGFuZGxlRXJyb3IoRCl9fSk7Zi5vbkRlc3Ryb3koKCk9PntuUih0aGlzLl9tb2R1bGVzLGYp'@;
put 'LE0udW5zdWJzY3JpYmUoKX0pfSksZnVuY3Rpb24gR2llKGMsbCxhKXt0cnl7Y29uc3QgZD1hKCk7cmV0dXJuIF9NKGQpP2QuY2F0Y2goaD0+e3Rocm93IGwucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PmMuaGFuZGxlRXJyb3IoaCkpLGh9KTpkfWNhdGNoKGQpe3Rocm93IGwucnVuT3V0c2lkZUFu'@;
put 'Z3VsYXIoKCk9PmMuaGFuZGxlRXJyb3IoZCkpLGR9fSh2LGgsKCk9Pntjb25zdCBNPWYuaW5qZWN0b3IuZ2V0KEFVKTtyZXR1cm4gTS5ydW5Jbml0aWFsaXplcnMoKSxNLmRvbmVQcm9taXNlLnRoZW4oKCk9PihmdW5jdGlvbiBfcmUoYyl7InN0cmluZyI9PXR5cGVvZiBjJiYoeXJlPWMudG9M'@;
put 'b3dlckNhc2UoKS5yZXBsYWNlKC9fL2csIi0iKSl9KGYuaW5qZWN0b3IuZ2V0KEJmLFpiKXx8WmIpLHRoaXMuX21vZHVsZURvQm9vdHN0cmFwKGYpLGYpKX0pfSl9Ym9vdHN0cmFwTW9kdWxlKGEsZD1bXSl7Y29uc3QgaD0kaWUoe30sZCk7cmV0dXJuIGZ1bmN0aW9uIG95ZShjLGwsYSl7Y29u'@;
put 'c3QgZD1uZXcgTGIoYSk7cmV0dXJuIFByb21pc2UucmVzb2x2ZShkKX0oMCwwLGEpLnRoZW4oZj0+dGhpcy5ib290c3RyYXBNb2R1bGVGYWN0b3J5KGYsaCkpfV9tb2R1bGVEb0Jvb3RzdHJhcChhKXtjb25zdCBkPWEuaW5qZWN0b3IuZ2V0KHE0KTtpZihhLl9ib290c3RyYXBDb21wb25lbnRz'@;
put 'Lmxlbmd0aD4wKWEuX2Jvb3RzdHJhcENvbXBvbmVudHMuZm9yRWFjaChoPT5kLmJvb3RzdHJhcChoKSk7ZWxzZXtpZighYS5pbnN0YW5jZS5uZ0RvQm9vdHN0cmFwKXRocm93IG5ldyBRbigtNDAzLCExKTthLmluc3RhbmNlLm5nRG9Cb290c3RyYXAoZCl9dGhpcy5fbW9kdWxlcy5wdXNoKGEp'@;
put 'fW9uRGVzdHJveShhKXt0aGlzLl9kZXN0cm95TGlzdGVuZXJzLnB1c2goYSl9Z2V0IGluamVjdG9yKCl7cmV0dXJuIHRoaXMuX2luamVjdG9yfWRlc3Ryb3koKXtpZih0aGlzLl9kZXN0cm95ZWQpdGhyb3cgbmV3IFFuKDQwNCwhMSk7dGhpcy5fbW9kdWxlcy5zbGljZSgpLmZvckVhY2goZD0+'@;
put 'ZC5kZXN0cm95KCkpLHRoaXMuX2Rlc3Ryb3lMaXN0ZW5lcnMuZm9yRWFjaChkPT5kKCkpO2NvbnN0IGE9dGhpcy5faW5qZWN0b3IuZ2V0KElVLG51bGwpO2EmJihhLmZvckVhY2goZD0+ZCgpKSxhLmNsZWFyKCkpLHRoaXMuX2Rlc3Ryb3llZD0hMH1nZXQgZGVzdHJveWVkKCl7cmV0dXJuIHRo'@;
put 'aXMuX2Rlc3Ryb3llZH1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKSh4cihEcykpfX1zdGF0aWN7dGhpcy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWMscHJvdmlkZWRJbjoicGxhdGZvcm0ifSl9fXJldHVybiBjfSko'@;
put 'KSxRNT1udWxsO2NvbnN0IGVhZT1uZXcgU3QoIiIpO2Z1bmN0aW9uIHRhZShjLGwsYT1bXSl7Y29uc3QgZD1gUGxhdGZvcm06ICR7bH1gLGg9bmV3IFN0KGQpO3JldHVybihmPVtdKT0+e2xldCB2PVJVKCk7aWYoIXZ8fHYuaW5qZWN0b3IuZ2V0KGVhZSwhMSkpe2NvbnN0IE09Wy4uLmEsLi4u'@;
put 'Zix7cHJvdmlkZTpoLHVzZVZhbHVlOiEwfV07Yz9jKE0pOmZ1bmN0aW9uIHB5ZShjKXtpZihRNSYmIVE1LmdldChlYWUsITEpKXRocm93IG5ldyBRbig0MDAsITEpOyhmdW5jdGlvbiBZaWUoKXshZnVuY3Rpb24gT2UoYyl7RGU9Y30oKCk9Pnt0aHJvdyBuZXcgUW4oNjAwLCExKX0pfSkoKSxR'@;
put 'NT1jO2NvbnN0IGw9Yy5nZXQoUWllKTsoZnVuY3Rpb24gcmFlKGMpe2MuZ2V0KFBrLG51bGwpPy5mb3JFYWNoKGE9PmEoKSl9KShjKX0oZnVuY3Rpb24gbmFlKGM9W10sbCl7cmV0dXJuIERzLmNyZWF0ZSh7bmFtZTpsLHByb3ZpZGVyczpbe3Byb3ZpZGU6RjYsdXNlVmFsdWU6InBsYXRmb3Jt'@;
put 'In0se3Byb3ZpZGU6SVUsdXNlVmFsdWU6bmV3IFNldChbKCk9PlE1PW51bGxdKX0sLi4uY119KX0oTSxkKSl9cmV0dXJuIGZ1bmN0aW9uIGd5ZShjKXtjb25zdCBsPVJVKCk7aWYoIWwpdGhyb3cgbmV3IFFuKDQwMSwhMSk7cmV0dXJuIGx9KCl9fWZ1bmN0aW9uIFJVKCl7cmV0dXJuIFE1Py5n'@;
put 'ZXQoUWllKT8/bnVsbH1sZXQgRXM9KCgpPT57Y2xhc3MgY3tzdGF0aWN7dGhpcy5fX05HX0VMRU1FTlRfSURfXz12eWV9fXJldHVybiBjfSkoKTtmdW5jdGlvbiB2eWUoYyl7cmV0dXJuIGZ1bmN0aW9uIGJ5ZShjLGwsYSl7aWYoRWYoYykmJiFhKXtjb25zdCBkPU8xKGMuaW5kZXgsbCk7cmV0'@;
put 'dXJuIG5ldyBfOChkLGQpfXJldHVybiA0NyZjLnR5cGU/bmV3IF84KGxbWmxdLGwpOm51bGx9KHVsKCksZGkoKSwhKDE2Jn5jKSl9Y2xhc3MgbGFle2NvbnN0cnVjdG9yKCl7fXN1cHBvcnRzKGwpe3JldHVybiBPYihsKX1jcmVhdGUobCl7cmV0dXJuIG5ldyBTeWUobCl9fWNvbnN0IEN5ZT0o'@;
put 'YyxsKT0+bDtjbGFzcyBTeWV7Y29uc3RydWN0b3IobCl7dGhpcy5sZW5ndGg9MCx0aGlzLl9saW5rZWRSZWNvcmRzPW51bGwsdGhpcy5fdW5saW5rZWRSZWNvcmRzPW51bGwsdGhpcy5fcHJldmlvdXNJdEhlYWQ9bnVsbCx0aGlzLl9pdEhlYWQ9bnVsbCx0aGlzLl9pdFRhaWw9bnVsbCx0aGlz'@;
put 'Ll9hZGRpdGlvbnNIZWFkPW51bGwsdGhpcy5fYWRkaXRpb25zVGFpbD1udWxsLHRoaXMuX21vdmVzSGVhZD1udWxsLHRoaXMuX21vdmVzVGFpbD1udWxsLHRoaXMuX3JlbW92YWxzSGVhZD1udWxsLHRoaXMuX3JlbW92YWxzVGFpbD1udWxsLHRoaXMuX2lkZW50aXR5Q2hhbmdlc0hlYWQ9bnVs'@;
put 'bCx0aGlzLl9pZGVudGl0eUNoYW5nZXNUYWlsPW51bGwsdGhpcy5fdHJhY2tCeUZuPWx8fEN5ZX1mb3JFYWNoSXRlbShsKXtsZXQgYTtmb3IoYT10aGlzLl9pdEhlYWQ7bnVsbCE9PWE7YT1hLl9uZXh0KWwoYSl9Zm9yRWFjaE9wZXJhdGlvbihsKXtsZXQgYT10aGlzLl9pdEhlYWQsZD10aGlz'@;
put 'Ll9yZW1vdmFsc0hlYWQsaD0wLGY9bnVsbDtmb3IoO2F8fGQ7KXtjb25zdCB2PSFkfHxhJiZhLmN1cnJlbnRJbmRleDx1YWUoZCxoLGYpP2E6ZCxNPXVhZSh2LGgsZiksRD12LmN1cnJlbnRJbmRleDtpZih2PT09ZCloLS0sZD1kLl9uZXh0UmVtb3ZlZDtlbHNlIGlmKGE9YS5fbmV4dCxudWxs'@;
put 'PT12LnByZXZpb3VzSW5kZXgpaCsrO2Vsc2V7Znx8KGY9W10pO2NvbnN0IFo9TS1oLHJlPUQtaDtpZihaIT1yZSl7Zm9yKGxldCBiZT0wO2JlPFo7YmUrKyl7Y29uc3QgRWU9YmU8Zi5sZW5ndGg/ZltiZV06ZltiZV09MCxCZT1FZStiZTtyZTw9QmUmJkJlPFomJihmW2JlXT1FZSsxKX1mW3Yu'@;
put 'cHJldmlvdXNJbmRleF09cmUtWn19TSE9PUQmJmwodixNLEQpfX1mb3JFYWNoUHJldmlvdXNJdGVtKGwpe2xldCBhO2ZvcihhPXRoaXMuX3ByZXZpb3VzSXRIZWFkO251bGwhPT1hO2E9YS5fbmV4dFByZXZpb3VzKWwoYSl9Zm9yRWFjaEFkZGVkSXRlbShsKXtsZXQgYTtmb3IoYT10aGlzLl9h'@;
put 'ZGRpdGlvbnNIZWFkO251bGwhPT1hO2E9YS5fbmV4dEFkZGVkKWwoYSl9Zm9yRWFjaE1vdmVkSXRlbShsKXtsZXQgYTtmb3IoYT10aGlzLl9tb3Zlc0hlYWQ7bnVsbCE9PWE7YT1hLl9uZXh0TW92ZWQpbChhKX1mb3JFYWNoUmVtb3ZlZEl0ZW0obCl7bGV0IGE7Zm9yKGE9dGhpcy5fcmVtb3Zh'@;
put 'bHNIZWFkO251bGwhPT1hO2E9YS5fbmV4dFJlbW92ZWQpbChhKX1mb3JFYWNoSWRlbnRpdHlDaGFuZ2UobCl7bGV0IGE7Zm9yKGE9dGhpcy5faWRlbnRpdHlDaGFuZ2VzSGVhZDtudWxsIT09YTthPWEuX25leHRJZGVudGl0eUNoYW5nZSlsKGEpfWRpZmYobCl7aWYobnVsbD09bCYmKGw9W10p'@;
put 'LCFPYihsKSl0aHJvdyBuZXcgUW4oOTAwLCExKTtyZXR1cm4gdGhpcy5jaGVjayhsKT90aGlzOm51bGx9b25EZXN0cm95KCl7fWNoZWNrKGwpe3RoaXMuX3Jlc2V0KCk7bGV0IGgsZix2LGE9dGhpcy5faXRIZWFkLGQ9ITE7aWYoQXJyYXkuaXNBcnJheShsKSl7dGhpcy5sZW5ndGg9bC5sZW5n'@;
put 'dGg7Zm9yKGxldCBNPTA7TTx0aGlzLmxlbmd0aDtNKyspZj1sW01dLHY9dGhpcy5fdHJhY2tCeUZuKE0sZiksbnVsbCE9PWEmJk9iamVjdC5pcyhhLnRyYWNrQnlJZCx2KT8oZCYmKGE9dGhpcy5fdmVyaWZ5UmVpbnNlcnRpb24oYSxmLHYsTSkpLE9iamVjdC5pcyhhLml0ZW0sZil8fHRoaXMu'@;
put 'X2FkZElkZW50aXR5Q2hhbmdlKGEsZikpOihhPXRoaXMuX21pc21hdGNoKGEsZix2LE0pLGQ9ITApLGE9YS5fbmV4dH1lbHNlIGg9MCxmdW5jdGlvbiBReihjLGwpe2lmKEFycmF5LmlzQXJyYXkoYykpZm9yKGxldCBhPTA7YTxjLmxlbmd0aDthKyspbChjW2FdKTtlbHNle2NvbnN0IGE9Y1tT'@;
put 'eW1ib2wuaXRlcmF0b3JdKCk7bGV0IGQ7Zm9yKDshKGQ9YS5uZXh0KCkpLmRvbmU7KWwoZC52YWx1ZSl9fShsLE09Pnt2PXRoaXMuX3RyYWNrQnlGbihoLE0pLG51bGwhPT1hJiZPYmplY3QuaXMoYS50cmFja0J5SWQsdik/KGQmJihhPXRoaXMuX3ZlcmlmeVJlaW5zZXJ0aW9uKGEsTSx2LGgp'@;
put 'KSxPYmplY3QuaXMoYS5pdGVtLE0pfHx0aGlzLl9hZGRJZGVudGl0eUNoYW5nZShhLE0pKTooYT10aGlzLl9taXNtYXRjaChhLE0sdixoKSxkPSEwKSxhPWEuX25leHQsaCsrfSksdGhpcy5sZW5ndGg9aDtyZXR1cm4gdGhpcy5fdHJ1bmNhdGUoYSksdGhpcy5jb2xsZWN0aW9uPWwsdGhpcy5p'@;
put 'c0RpcnR5fWdldCBpc0RpcnR5KCl7cmV0dXJuIG51bGwhPT10aGlzLl9hZGRpdGlvbnNIZWFkfHxudWxsIT09dGhpcy5fbW92ZXNIZWFkfHxudWxsIT09dGhpcy5fcmVtb3ZhbHNIZWFkfHxudWxsIT09dGhpcy5faWRlbnRpdHlDaGFuZ2VzSGVhZH1fcmVzZXQoKXtpZih0aGlzLmlzRGlydHkp'@;
put 'e2xldCBsO2ZvcihsPXRoaXMuX3ByZXZpb3VzSXRIZWFkPXRoaXMuX2l0SGVhZDtudWxsIT09bDtsPWwuX25leHQpbC5fbmV4dFByZXZpb3VzPWwuX25leHQ7Zm9yKGw9dGhpcy5fYWRkaXRpb25zSGVhZDtudWxsIT09bDtsPWwuX25leHRBZGRlZClsLnByZXZpb3VzSW5kZXg9bC5jdXJyZW50'@;
put 'SW5kZXg7Zm9yKHRoaXMuX2FkZGl0aW9uc0hlYWQ9dGhpcy5fYWRkaXRpb25zVGFpbD1udWxsLGw9dGhpcy5fbW92ZXNIZWFkO251bGwhPT1sO2w9bC5fbmV4dE1vdmVkKWwucHJldmlvdXNJbmRleD1sLmN1cnJlbnRJbmRleDt0aGlzLl9tb3Zlc0hlYWQ9dGhpcy5fbW92ZXNUYWlsPW51bGws'@;
put 'dGhpcy5fcmVtb3ZhbHNIZWFkPXRoaXMuX3JlbW92YWxzVGFpbD1udWxsLHRoaXMuX2lkZW50aXR5Q2hhbmdlc0hlYWQ9dGhpcy5faWRlbnRpdHlDaGFuZ2VzVGFpbD1udWxsfX1fbWlzbWF0Y2gobCxhLGQsaCl7bGV0IGY7cmV0dXJuIG51bGw9PT1sP2Y9dGhpcy5faXRUYWlsOihmPWwuX3By'@;
put 'ZXYsdGhpcy5fcmVtb3ZlKGwpKSxudWxsIT09KGw9bnVsbD09PXRoaXMuX3VubGlua2VkUmVjb3Jkcz9udWxsOnRoaXMuX3VubGlua2VkUmVjb3Jkcy5nZXQoZCxudWxsKSk/KE9iamVjdC5pcyhsLml0ZW0sYSl8fHRoaXMuX2FkZElkZW50aXR5Q2hhbmdlKGwsYSksdGhpcy5fcmVpbnNlcnRB'@;
put 'ZnRlcihsLGYsaCkpOm51bGwhPT0obD1udWxsPT09dGhpcy5fbGlua2VkUmVjb3Jkcz9udWxsOnRoaXMuX2xpbmtlZFJlY29yZHMuZ2V0KGQsaCkpPyhPYmplY3QuaXMobC5pdGVtLGEpfHx0aGlzLl9hZGRJZGVudGl0eUNoYW5nZShsLGEpLHRoaXMuX21vdmVBZnRlcihsLGYsaCkpOmw9dGhp'@;
put 'cy5fYWRkQWZ0ZXIobmV3IE15ZShhLGQpLGYsaCksbH1fdmVyaWZ5UmVpbnNlcnRpb24obCxhLGQsaCl7bGV0IGY9bnVsbD09PXRoaXMuX3VubGlua2VkUmVjb3Jkcz9udWxsOnRoaXMuX3VubGlua2VkUmVjb3Jkcy5nZXQoZCxudWxsKTtyZXR1cm4gbnVsbCE9PWY/bD10aGlzLl9yZWluc2Vy'@;
put 'dEFmdGVyKGYsbC5fcHJldixoKTpsLmN1cnJlbnRJbmRleCE9aCYmKGwuY3VycmVudEluZGV4PWgsdGhpcy5fYWRkVG9Nb3ZlcyhsLGgpKSxsfV90cnVuY2F0ZShsKXtmb3IoO251bGwhPT1sOyl7Y29uc3QgYT1sLl9uZXh0O3RoaXMuX2FkZFRvUmVtb3ZhbHModGhpcy5fdW5saW5rKGwpKSxs'@;
put 'PWF9bnVsbCE9PXRoaXMuX3VubGlua2VkUmVjb3JkcyYmdGhpcy5fdW5saW5rZWRSZWNvcmRzLmNsZWFyKCksbnVsbCE9PXRoaXMuX2FkZGl0aW9uc1RhaWwmJih0aGlzLl9hZGRpdGlvbnNUYWlsLl9uZXh0QWRkZWQ9bnVsbCksbnVsbCE9PXRoaXMuX21vdmVzVGFpbCYmKHRoaXMuX21vdmVz'@;
put 'VGFpbC5fbmV4dE1vdmVkPW51bGwpLG51bGwhPT10aGlzLl9pdFRhaWwmJih0aGlzLl9pdFRhaWwuX25leHQ9bnVsbCksbnVsbCE9PXRoaXMuX3JlbW92YWxzVGFpbCYmKHRoaXMuX3JlbW92YWxzVGFpbC5fbmV4dFJlbW92ZWQ9bnVsbCksbnVsbCE9PXRoaXMuX2lkZW50aXR5Q2hhbmdlc1Rh'@;
put 'aWwmJih0aGlzLl9pZGVudGl0eUNoYW5nZXNUYWlsLl9uZXh0SWRlbnRpdHlDaGFuZ2U9bnVsbCl9X3JlaW5zZXJ0QWZ0ZXIobCxhLGQpe251bGwhPT10aGlzLl91bmxpbmtlZFJlY29yZHMmJnRoaXMuX3VubGlua2VkUmVjb3Jkcy5yZW1vdmUobCk7Y29uc3QgaD1sLl9wcmV2UmVtb3ZlZCxm'@;
put 'PWwuX25leHRSZW1vdmVkO3JldHVybiBudWxsPT09aD90aGlzLl9yZW1vdmFsc0hlYWQ9ZjpoLl9uZXh0UmVtb3ZlZD1mLG51bGw9PT1mP3RoaXMuX3JlbW92YWxzVGFpbD1oOmYuX3ByZXZSZW1vdmVkPWgsdGhpcy5faW5zZXJ0QWZ0ZXIobCxhLGQpLHRoaXMuX2FkZFRvTW92ZXMobCxkKSxs'@;
put 'fV9tb3ZlQWZ0ZXIobCxhLGQpe3JldHVybiB0aGlzLl91bmxpbmsobCksdGhpcy5faW5zZXJ0QWZ0ZXIobCxhLGQpLHRoaXMuX2FkZFRvTW92ZXMobCxkKSxsfV9hZGRBZnRlcihsLGEsZCl7cmV0dXJuIHRoaXMuX2luc2VydEFmdGVyKGwsYSxkKSx0aGlzLl9hZGRpdGlvbnNUYWlsPW51bGw9'@;
put 'PT10aGlzLl9hZGRpdGlvbnNUYWlsP3RoaXMuX2FkZGl0aW9uc0hlYWQ9bDp0aGlzLl9hZGRpdGlvbnNUYWlsLl9uZXh0QWRkZWQ9bCxsfV9pbnNlcnRBZnRlcihsLGEsZCl7Y29uc3QgaD1udWxsPT09YT90aGlzLl9pdEhlYWQ6YS5fbmV4dDtyZXR1cm4gbC5fbmV4dD1oLGwuX3ByZXY9YSxu'@;
put 'dWxsPT09aD90aGlzLl9pdFRhaWw9bDpoLl9wcmV2PWwsbnVsbD09PWE/dGhpcy5faXRIZWFkPWw6YS5fbmV4dD1sLG51bGw9PT10aGlzLl9saW5rZWRSZWNvcmRzJiYodGhpcy5fbGlua2VkUmVjb3Jkcz1uZXcgY2FlKSx0aGlzLl9saW5rZWRSZWNvcmRzLnB1dChsKSxsLmN1cnJlbnRJbmRl'@;
put 'eD1kLGx9X3JlbW92ZShsKXtyZXR1cm4gdGhpcy5fYWRkVG9SZW1vdmFscyh0aGlzLl91bmxpbmsobCkpfV91bmxpbmsobCl7bnVsbCE9PXRoaXMuX2xpbmtlZFJlY29yZHMmJnRoaXMuX2xpbmtlZFJlY29yZHMucmVtb3ZlKGwpO2NvbnN0IGE9bC5fcHJldixkPWwuX25leHQ7cmV0dXJuIG51'@;
put 'bGw9PT1hP3RoaXMuX2l0SGVhZD1kOmEuX25leHQ9ZCxudWxsPT09ZD90aGlzLl9pdFRhaWw9YTpkLl9wcmV2PWEsbH1fYWRkVG9Nb3ZlcyhsLGEpe3JldHVybiBsLnByZXZpb3VzSW5kZXg9PT1hfHwodGhpcy5fbW92ZXNUYWlsPW51bGw9PT10aGlzLl9tb3Zlc1RhaWw/dGhpcy5fbW92ZXNI'@;
put 'ZWFkPWw6dGhpcy5fbW92ZXNUYWlsLl9uZXh0TW92ZWQ9bCksbH1fYWRkVG9SZW1vdmFscyhsKXtyZXR1cm4gbnVsbD09PXRoaXMuX3VubGlua2VkUmVjb3JkcyYmKHRoaXMuX3VubGlua2VkUmVjb3Jkcz1uZXcgY2FlKSx0aGlzLl91bmxpbmtlZFJlY29yZHMucHV0KGwpLGwuY3VycmVudElu'@;
put 'ZGV4PW51bGwsbC5fbmV4dFJlbW92ZWQ9bnVsbCxudWxsPT09dGhpcy5fcmVtb3ZhbHNUYWlsPyh0aGlzLl9yZW1vdmFsc1RhaWw9dGhpcy5fcmVtb3ZhbHNIZWFkPWwsbC5fcHJldlJlbW92ZWQ9bnVsbCk6KGwuX3ByZXZSZW1vdmVkPXRoaXMuX3JlbW92YWxzVGFpbCx0aGlzLl9yZW1vdmFs'@;
put 'c1RhaWw9dGhpcy5fcmVtb3ZhbHNUYWlsLl9uZXh0UmVtb3ZlZD1sKSxsfV9hZGRJZGVudGl0eUNoYW5nZShsLGEpe3JldHVybiBsLml0ZW09YSx0aGlzLl9pZGVudGl0eUNoYW5nZXNUYWlsPW51bGw9PT10aGlzLl9pZGVudGl0eUNoYW5nZXNUYWlsP3RoaXMuX2lkZW50aXR5Q2hhbmdlc0hl'@;
put 'YWQ9bDp0aGlzLl9pZGVudGl0eUNoYW5nZXNUYWlsLl9uZXh0SWRlbnRpdHlDaGFuZ2U9bCxsfX1jbGFzcyBNeWV7Y29uc3RydWN0b3IobCxhKXt0aGlzLml0ZW09bCx0aGlzLnRyYWNrQnlJZD1hLHRoaXMuY3VycmVudEluZGV4PW51bGwsdGhpcy5wcmV2aW91c0luZGV4PW51bGwsdGhpcy5f'@;
put 'bmV4dFByZXZpb3VzPW51bGwsdGhpcy5fcHJldj1udWxsLHRoaXMuX25leHQ9bnVsbCx0aGlzLl9wcmV2RHVwPW51bGwsdGhpcy5fbmV4dER1cD1udWxsLHRoaXMuX3ByZXZSZW1vdmVkPW51bGwsdGhpcy5fbmV4dFJlbW92ZWQ9bnVsbCx0aGlzLl9uZXh0QWRkZWQ9bnVsbCx0aGlzLl9uZXh0'@;
put 'TW92ZWQ9bnVsbCx0aGlzLl9uZXh0SWRlbnRpdHlDaGFuZ2U9bnVsbH19Y2xhc3MgeHlle2NvbnN0cnVjdG9yKCl7dGhpcy5faGVhZD1udWxsLHRoaXMuX3RhaWw9bnVsbH1hZGQobCl7bnVsbD09PXRoaXMuX2hlYWQ/KHRoaXMuX2hlYWQ9dGhpcy5fdGFpbD1sLGwuX25leHREdXA9bnVsbCxs'@;
put 'Ll9wcmV2RHVwPW51bGwpOih0aGlzLl90YWlsLl9uZXh0RHVwPWwsbC5fcHJldkR1cD10aGlzLl90YWlsLGwuX25leHREdXA9bnVsbCx0aGlzLl90YWlsPWwpfWdldChsLGEpe2xldCBkO2ZvcihkPXRoaXMuX2hlYWQ7bnVsbCE9PWQ7ZD1kLl9uZXh0RHVwKWlmKChudWxsPT09YXx8YTw9ZC5j'@;
put 'dXJyZW50SW5kZXgpJiZPYmplY3QuaXMoZC50cmFja0J5SWQsbCkpcmV0dXJuIGQ7cmV0dXJuIG51bGx9cmVtb3ZlKGwpe2NvbnN0IGE9bC5fcHJldkR1cCxkPWwuX25leHREdXA7cmV0dXJuIG51bGw9PT1hP3RoaXMuX2hlYWQ9ZDphLl9uZXh0RHVwPWQsbnVsbD09PWQ/dGhpcy5fdGFpbD1h'@;
put 'OmQuX3ByZXZEdXA9YSxudWxsPT09dGhpcy5faGVhZH19Y2xhc3MgY2Fle2NvbnN0cnVjdG9yKCl7dGhpcy5tYXA9bmV3IE1hcH1wdXQobCl7Y29uc3QgYT1sLnRyYWNrQnlJZDtsZXQgZD10aGlzLm1hcC5nZXQoYSk7ZHx8KGQ9bmV3IHh5ZSx0aGlzLm1hcC5zZXQoYSxkKSksZC5hZGQobCl9'@;
put 'Z2V0KGwsYSl7Y29uc3QgaD10aGlzLm1hcC5nZXQobCk7cmV0dXJuIGg/aC5nZXQobCxhKTpudWxsfXJlbW92ZShsKXtjb25zdCBhPWwudHJhY2tCeUlkO3JldHVybiB0aGlzLm1hcC5nZXQoYSkucmVtb3ZlKGwpJiZ0aGlzLm1hcC5kZWxldGUoYSksbH1nZXQgaXNFbXB0eSgpe3JldHVybiAw'@;
put 'PT09dGhpcy5tYXAuc2l6ZX1jbGVhcigpe3RoaXMubWFwLmNsZWFyKCl9fWZ1bmN0aW9uIHVhZShjLGwsYSl7Y29uc3QgZD1jLnByZXZpb3VzSW5kZXg7aWYobnVsbD09PWQpcmV0dXJuIGQ7bGV0IGg9MDtyZXR1cm4gYSYmZDxhLmxlbmd0aCYmKGg9YVtkXSksZCtsK2h9Y2xhc3MgZGFle2Nv'@;
put 'bnN0cnVjdG9yKCl7fXN1cHBvcnRzKGwpe3JldHVybiBsIGluc3RhbmNlb2YgTWFwfHxKUyhsKX1jcmVhdGUoKXtyZXR1cm4gbmV3IEV5ZX19Y2xhc3MgRXlle2NvbnN0cnVjdG9yKCl7dGhpcy5fcmVjb3Jkcz1uZXcgTWFwLHRoaXMuX21hcEhlYWQ9bnVsbCx0aGlzLl9hcHBlbmRBZnRlcj1u'@;
put 'dWxsLHRoaXMuX3ByZXZpb3VzTWFwSGVhZD1udWxsLHRoaXMuX2NoYW5nZXNIZWFkPW51bGwsdGhpcy5fY2hhbmdlc1RhaWw9bnVsbCx0aGlzLl9hZGRpdGlvbnNIZWFkPW51bGwsdGhpcy5fYWRkaXRpb25zVGFpbD1udWxsLHRoaXMuX3JlbW92YWxzSGVhZD1udWxsLHRoaXMuX3JlbW92YWxz'@;
put 'VGFpbD1udWxsfWdldCBpc0RpcnR5KCl7cmV0dXJuIG51bGwhPT10aGlzLl9hZGRpdGlvbnNIZWFkfHxudWxsIT09dGhpcy5fY2hhbmdlc0hlYWR8fG51bGwhPT10aGlzLl9yZW1vdmFsc0hlYWR9Zm9yRWFjaEl0ZW0obCl7bGV0IGE7Zm9yKGE9dGhpcy5fbWFwSGVhZDtudWxsIT09YTthPWEu'@;
put 'X25leHQpbChhKX1mb3JFYWNoUHJldmlvdXNJdGVtKGwpe2xldCBhO2ZvcihhPXRoaXMuX3ByZXZpb3VzTWFwSGVhZDtudWxsIT09YTthPWEuX25leHRQcmV2aW91cylsKGEpfWZvckVhY2hDaGFuZ2VkSXRlbShsKXtsZXQgYTtmb3IoYT10aGlzLl9jaGFuZ2VzSGVhZDtudWxsIT09YTthPWEu'@;
put 'X25leHRDaGFuZ2VkKWwoYSl9Zm9yRWFjaEFkZGVkSXRlbShsKXtsZXQgYTtmb3IoYT10aGlzLl9hZGRpdGlvbnNIZWFkO251bGwhPT1hO2E9YS5fbmV4dEFkZGVkKWwoYSl9Zm9yRWFjaFJlbW92ZWRJdGVtKGwpe2xldCBhO2ZvcihhPXRoaXMuX3JlbW92YWxzSGVhZDtudWxsIT09YTthPWEu'@;
put 'X25leHRSZW1vdmVkKWwoYSl9ZGlmZihsKXtpZihsKXtpZighKGwgaW5zdGFuY2VvZiBNYXB8fEpTKGwpKSl0aHJvdyBuZXcgUW4oOTAwLCExKX1lbHNlIGw9bmV3IE1hcDtyZXR1cm4gdGhpcy5jaGVjayhsKT90aGlzOm51bGx9b25EZXN0cm95KCl7fWNoZWNrKGwpe3RoaXMuX3Jlc2V0KCk7'@;
put 'bGV0IGE9dGhpcy5fbWFwSGVhZDtpZih0aGlzLl9hcHBlbmRBZnRlcj1udWxsLHRoaXMuX2ZvckVhY2gobCwoZCxoKT0+e2lmKGEmJmEua2V5PT09aCl0aGlzLl9tYXliZUFkZFRvQ2hhbmdlcyhhLGQpLHRoaXMuX2FwcGVuZEFmdGVyPWEsYT1hLl9uZXh0O2Vsc2V7Y29uc3QgZj10aGlzLl9n'@;
put 'ZXRPckNyZWF0ZVJlY29yZEZvcktleShoLGQpO2E9dGhpcy5faW5zZXJ0QmVmb3JlT3JBcHBlbmQoYSxmKX19KSxhKXthLl9wcmV2JiYoYS5fcHJldi5fbmV4dD1udWxsKSx0aGlzLl9yZW1vdmFsc0hlYWQ9YTtmb3IobGV0IGQ9YTtudWxsIT09ZDtkPWQuX25leHRSZW1vdmVkKWQ9PT10aGlz'@;
put 'Ll9tYXBIZWFkJiYodGhpcy5fbWFwSGVhZD1udWxsKSx0aGlzLl9yZWNvcmRzLmRlbGV0ZShkLmtleSksZC5fbmV4dFJlbW92ZWQ9ZC5fbmV4dCxkLnByZXZpb3VzVmFsdWU9ZC5jdXJyZW50VmFsdWUsZC5jdXJyZW50VmFsdWU9bnVsbCxkLl9wcmV2PW51bGwsZC5fbmV4dD1udWxsfXJldHVy'@;
put 'biB0aGlzLl9jaGFuZ2VzVGFpbCYmKHRoaXMuX2NoYW5nZXNUYWlsLl9uZXh0Q2hhbmdlZD1udWxsKSx0aGlzLl9hZGRpdGlvbnNUYWlsJiYodGhpcy5fYWRkaXRpb25zVGFpbC5fbmV4dEFkZGVkPW51bGwpLHRoaXMuaXNEaXJ0eX1faW5zZXJ0QmVmb3JlT3JBcHBlbmQobCxhKXtpZihsKXtj'@;
put 'b25zdCBkPWwuX3ByZXY7cmV0dXJuIGEuX25leHQ9bCxhLl9wcmV2PWQsbC5fcHJldj1hLGQmJihkLl9uZXh0PWEpLGw9PT10aGlzLl9tYXBIZWFkJiYodGhpcy5fbWFwSGVhZD1hKSx0aGlzLl9hcHBlbmRBZnRlcj1sLGx9cmV0dXJuIHRoaXMuX2FwcGVuZEFmdGVyPyh0aGlzLl9hcHBlbmRB'@;
put 'ZnRlci5fbmV4dD1hLGEuX3ByZXY9dGhpcy5fYXBwZW5kQWZ0ZXIpOnRoaXMuX21hcEhlYWQ9YSx0aGlzLl9hcHBlbmRBZnRlcj1hLG51bGx9X2dldE9yQ3JlYXRlUmVjb3JkRm9yS2V5KGwsYSl7aWYodGhpcy5fcmVjb3Jkcy5oYXMobCkpe2NvbnN0IGg9dGhpcy5fcmVjb3Jkcy5nZXQobCk7'@;
put 'dGhpcy5fbWF5YmVBZGRUb0NoYW5nZXMoaCxhKTtjb25zdCBmPWguX3ByZXYsdj1oLl9uZXh0O3JldHVybiBmJiYoZi5fbmV4dD12KSx2JiYodi5fcHJldj1mKSxoLl9uZXh0PW51bGwsaC5fcHJldj1udWxsLGh9Y29uc3QgZD1uZXcgVHllKGwpO3JldHVybiB0aGlzLl9yZWNvcmRzLnNldChs'@;
put 'LGQpLGQuY3VycmVudFZhbHVlPWEsdGhpcy5fYWRkVG9BZGRpdGlvbnMoZCksZH1fcmVzZXQoKXtpZih0aGlzLmlzRGlydHkpe2xldCBsO2Zvcih0aGlzLl9wcmV2aW91c01hcEhlYWQ9dGhpcy5fbWFwSGVhZCxsPXRoaXMuX3ByZXZpb3VzTWFwSGVhZDtudWxsIT09bDtsPWwuX25leHQpbC5f'@;
put 'bmV4dFByZXZpb3VzPWwuX25leHQ7Zm9yKGw9dGhpcy5fY2hhbmdlc0hlYWQ7bnVsbCE9PWw7bD1sLl9uZXh0Q2hhbmdlZClsLnByZXZpb3VzVmFsdWU9bC5jdXJyZW50VmFsdWU7Zm9yKGw9dGhpcy5fYWRkaXRpb25zSGVhZDtudWxsIT1sO2w9bC5fbmV4dEFkZGVkKWwucHJldmlvdXNWYWx1'@;
put 'ZT1sLmN1cnJlbnRWYWx1ZTt0aGlzLl9jaGFuZ2VzSGVhZD10aGlzLl9jaGFuZ2VzVGFpbD1udWxsLHRoaXMuX2FkZGl0aW9uc0hlYWQ9dGhpcy5fYWRkaXRpb25zVGFpbD1udWxsLHRoaXMuX3JlbW92YWxzSGVhZD1udWxsfX1fbWF5YmVBZGRUb0NoYW5nZXMobCxhKXtPYmplY3QuaXMoYSxs'@;
put 'LmN1cnJlbnRWYWx1ZSl8fChsLnByZXZpb3VzVmFsdWU9bC5jdXJyZW50VmFsdWUsbC5jdXJyZW50VmFsdWU9YSx0aGlzLl9hZGRUb0NoYW5nZXMobCkpfV9hZGRUb0FkZGl0aW9ucyhsKXtudWxsPT09dGhpcy5fYWRkaXRpb25zSGVhZD90aGlzLl9hZGRpdGlvbnNIZWFkPXRoaXMuX2FkZGl0'@;
put 'aW9uc1RhaWw9bDoodGhpcy5fYWRkaXRpb25zVGFpbC5fbmV4dEFkZGVkPWwsdGhpcy5fYWRkaXRpb25zVGFpbD1sKX1fYWRkVG9DaGFuZ2VzKGwpe251bGw9PT10aGlzLl9jaGFuZ2VzSGVhZD90aGlzLl9jaGFuZ2VzSGVhZD10aGlzLl9jaGFuZ2VzVGFpbD1sOih0aGlzLl9jaGFuZ2VzVGFp'@;
put 'bC5fbmV4dENoYW5nZWQ9bCx0aGlzLl9jaGFuZ2VzVGFpbD1sKX1fZm9yRWFjaChsLGEpe2wgaW5zdGFuY2VvZiBNYXA/bC5mb3JFYWNoKGEpOk9iamVjdC5rZXlzKGwpLmZvckVhY2goZD0+YShsW2RdLGQpKX19Y2xhc3MgVHlle2NvbnN0cnVjdG9yKGwpe3RoaXMua2V5PWwsdGhpcy5wcmV2'@;
put 'aW91c1ZhbHVlPW51bGwsdGhpcy5jdXJyZW50VmFsdWU9bnVsbCx0aGlzLl9uZXh0UHJldmlvdXM9bnVsbCx0aGlzLl9uZXh0PW51bGwsdGhpcy5fcHJldj1udWxsLHRoaXMuX25leHRBZGRlZD1udWxsLHRoaXMuX25leHRSZW1vdmVkPW51bGwsdGhpcy5fbmV4dENoYW5nZWQ9bnVsbH19ZnVu'@;
put 'Y3Rpb24gaGFlKCl7cmV0dXJuIG5ldyBlbShbbmV3IGxhZV0pfWxldCBlbT0oKCk9PntjbGFzcyBje3N0YXRpY3t0aGlzLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMscHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTpoYWV9KX1jb25zdHJ1Y3RvcihhKXt0aGlzLmZhY3Rvcmllcz1hfXN0YXRpYyBj'@;
put 'cmVhdGUoYSxkKXtpZihudWxsIT1kKXtjb25zdCBoPWQuZmFjdG9yaWVzLnNsaWNlKCk7YT1hLmNvbmNhdChoKX1yZXR1cm4gbmV3IGMoYSl9c3RhdGljIGV4dGVuZChhKXtyZXR1cm57cHJvdmlkZTpjLHVzZUZhY3Rvcnk6ZD0+Yy5jcmVhdGUoYSxkfHxoYWUoKSksZGVwczpbW2MsbmV3IGxk'@;
put 'LG5ldyBJMV1dfX1maW5kKGEpe2NvbnN0IGQ9dGhpcy5mYWN0b3JpZXMuZmluZChoPT5oLnN1cHBvcnRzKGEpKTtpZihudWxsIT1kKXJldHVybiBkO3Rocm93IG5ldyBRbig5MDEsITEpfX1yZXR1cm4gY30pKCk7ZnVuY3Rpb24gZmFlKCl7cmV0dXJuIG5ldyB3TShbbmV3IGRhZV0pfWxldCB3'@;
put 'TT0oKCk9PntjbGFzcyBje3N0YXRpY3t0aGlzLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMscHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTpmYWV9KX1jb25zdHJ1Y3RvcihhKXt0aGlzLmZhY3Rvcmllcz1hfXN0YXRpYyBjcmVhdGUoYSxkKXtpZihkKXtjb25zdCBoPWQuZmFjdG9yaWVzLnNsaWNl'@;
put 'KCk7YT1hLmNvbmNhdChoKX1yZXR1cm4gbmV3IGMoYSl9c3RhdGljIGV4dGVuZChhKXtyZXR1cm57cHJvdmlkZTpjLHVzZUZhY3Rvcnk6ZD0+Yy5jcmVhdGUoYSxkfHxmYWUoKSksZGVwczpbW2MsbmV3IGxkLG5ldyBJMV1dfX1maW5kKGEpe2NvbnN0IGQ9dGhpcy5mYWN0b3JpZXMuZmluZCho'@;
put 'PT5oLnN1cHBvcnRzKGEpKTtpZihkKXJldHVybiBkO3Rocm93IG5ldyBRbig5MDEsITEpfX1yZXR1cm4gY30pKCk7Y29uc3QgRHllPXRhZShudWxsLCJjb3JlIixbXSk7bGV0IEl5ZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe31zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24o'@;
put 'ZCl7cmV0dXJuIG5ldyhkfHxjKSh4cihxNCkpfX1zdGF0aWN7dGhpcy5cdTAyNzVtb2Q9a2koe3R5cGU6Y30pfXN0YXRpY3t0aGlzLlx1MDI3NWluaj1Bcih7fSl9fXJldHVybiBjfSkoKTtmdW5jdGlvbiBzMShjKXtyZXR1cm4iYm9vbGVhbiI9PXR5cGVvZiBjP2M6bnVsbCE9YyYmImZhbHNl'@;
put 'IiE9PWN9ZnVuY3Rpb24gUGFlKGMpe2NvbnN0IGw9X2UobnVsbCk7dHJ5e3JldHVybiBjKCl9ZmluYWxseXtfZShsKX19bGV0IEhhZT1udWxsO2Z1bmN0aW9uIHRtKCl7cmV0dXJuIEhhZX1jbGFzcyBwX2V7fWNvbnN0IHZzPW5ldyBTdCgiIik7bGV0IFZVPSgoKT0+e2NsYXNzIGN7aGlzdG9y'@;
put 'eUdvKGEpe3Rocm93IG5ldyBFcnJvcigiIil9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTooKT0+ZmkobV9lKSxwcm92aWRlZEluOiJwbGF0Zm9ybSJ9KX19cmV0dXJu'@;
put 'IGN9KSgpO2NvbnN0IGdfZT1uZXcgU3QoIiIpO2xldCBtX2U9KCgpPT57Y2xhc3MgYyBleHRlbmRzIFZVe2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLl9kb2M9ZmkodnMpLHRoaXMuX2xvY2F0aW9uPXdpbmRvdy5sb2NhdGlvbix0aGlzLl9oaXN0b3J5PXdpbmRvdy5oaXN0b3J5fWdldEJh'@;
put 'c2VIcmVmRnJvbURPTSgpe3JldHVybiB0bSgpLmdldEJhc2VIcmVmKHRoaXMuX2RvYyl9b25Qb3BTdGF0ZShhKXtjb25zdCBkPXRtKCkuZ2V0R2xvYmFsRXZlbnRUYXJnZXQodGhpcy5fZG9jLCJ3aW5kb3ciKTtyZXR1cm4gZC5hZGRFdmVudExpc3RlbmVyKCJwb3BzdGF0ZSIsYSwhMSksKCk9'@;
put 'PmQucmVtb3ZlRXZlbnRMaXN0ZW5lcigicG9wc3RhdGUiLGEpfW9uSGFzaENoYW5nZShhKXtjb25zdCBkPXRtKCkuZ2V0R2xvYmFsRXZlbnRUYXJnZXQodGhpcy5fZG9jLCJ3aW5kb3ciKTtyZXR1cm4gZC5hZGRFdmVudExpc3RlbmVyKCJoYXNoY2hhbmdlIixhLCExKSwoKT0+ZC5yZW1vdmVF'@;
put 'dmVudExpc3RlbmVyKCJoYXNoY2hhbmdlIixhKX1nZXQgaHJlZigpe3JldHVybiB0aGlzLl9sb2NhdGlvbi5ocmVmfWdldCBwcm90b2NvbCgpe3JldHVybiB0aGlzLl9sb2NhdGlvbi5wcm90b2NvbH1nZXQgaG9zdG5hbWUoKXtyZXR1cm4gdGhpcy5fbG9jYXRpb24uaG9zdG5hbWV9Z2V0IHBv'@;
put 'cnQoKXtyZXR1cm4gdGhpcy5fbG9jYXRpb24ucG9ydH1nZXQgcGF0aG5hbWUoKXtyZXR1cm4gdGhpcy5fbG9jYXRpb24ucGF0aG5hbWV9Z2V0IHNlYXJjaCgpe3JldHVybiB0aGlzLl9sb2NhdGlvbi5zZWFyY2h9Z2V0IGhhc2goKXtyZXR1cm4gdGhpcy5fbG9jYXRpb24uaGFzaH1zZXQgcGF0'@;
put 'aG5hbWUoYSl7dGhpcy5fbG9jYXRpb24ucGF0aG5hbWU9YX1wdXNoU3RhdGUoYSxkLGgpe3RoaXMuX2hpc3RvcnkucHVzaFN0YXRlKGEsZCxoKX1yZXBsYWNlU3RhdGUoYSxkLGgpe3RoaXMuX2hpc3RvcnkucmVwbGFjZVN0YXRlKGEsZCxoKX1mb3J3YXJkKCl7dGhpcy5faGlzdG9yeS5mb3J3'@;
put 'YXJkKCl9YmFjaygpe3RoaXMuX2hpc3RvcnkuYmFjaygpfWhpc3RvcnlHbyhhPTApe3RoaXMuX2hpc3RvcnkuZ28oYSl9Z2V0U3RhdGUoKXtyZXR1cm4gdGhpcy5faGlzdG9yeS5zdGF0ZX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlj'@;
put 'e3RoaXMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OigpPT5uZXcgYyxwcm92aWRlZEluOiJwbGF0Zm9ybSJ9KX19cmV0dXJuIGN9KSgpO2Z1bmN0aW9uIEJVKGMsbCl7aWYoMD09Yy5sZW5ndGgpcmV0dXJuIGw7aWYoMD09bC5sZW5ndGgpcmV0dXJuIGM7bGV0IGE9MDtyZXR1cm4g'@;
put 'Yy5lbmRzV2l0aCgiLyIpJiZhKyssbC5zdGFydHNXaXRoKCIvIikmJmErKywyPT1hP2MrbC5zdWJzdHJpbmcoMSk6MT09YT9jK2w6YysiLyIrbH1mdW5jdGlvbiBOYWUoYyl7Y29uc3QgbD1jLm1hdGNoKC8jfFw/fCQvKSxhPWwmJmwuaW5kZXh8fGMubGVuZ3RoO3JldHVybiBjLnNsaWNlKDAs'@;
put 'YS0oIi8iPT09Y1thLTFdPzE6MCkpK2Muc2xpY2UoYSl9ZnVuY3Rpb24gWDQoYyl7cmV0dXJuIGMmJiI/IiE9PWNbMF0/Ij8iK2M6Y31sZXQgWjg9KCgpPT57Y2xhc3MgY3toaXN0b3J5R28oYSl7dGhyb3cgbmV3IEVycm9yKCIiKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7'@;
put 'cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OigpPT5maShCYWUpLHByb3ZpZGVkSW46InJvb3QifSl9fXJldHVybiBjfSkoKTtjb25zdCBWYWU9bmV3IFN0KCIiKTtsZXQgQmFlPSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyBaOHtjb25z'@;
put 'dHJ1Y3RvcihhLGQpe3N1cGVyKCksdGhpcy5fcGxhdGZvcm1Mb2NhdGlvbj1hLHRoaXMuX3JlbW92ZUxpc3RlbmVyRm5zPVtdLHRoaXMuX2Jhc2VIcmVmPWQ/P3RoaXMuX3BsYXRmb3JtTG9jYXRpb24uZ2V0QmFzZUhyZWZGcm9tRE9NKCk/P2ZpKHZzKS5sb2NhdGlvbj8ub3JpZ2luPz8iIn1u'@;
put 'Z09uRGVzdHJveSgpe2Zvcig7dGhpcy5fcmVtb3ZlTGlzdGVuZXJGbnMubGVuZ3RoOyl0aGlzLl9yZW1vdmVMaXN0ZW5lckZucy5wb3AoKSgpfW9uUG9wU3RhdGUoYSl7dGhpcy5fcmVtb3ZlTGlzdGVuZXJGbnMucHVzaCh0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLm9uUG9wU3RhdGUoYSksdGhp'@;
put 'cy5fcGxhdGZvcm1Mb2NhdGlvbi5vbkhhc2hDaGFuZ2UoYSkpfWdldEJhc2VIcmVmKCl7cmV0dXJuIHRoaXMuX2Jhc2VIcmVmfXByZXBhcmVFeHRlcm5hbFVybChhKXtyZXR1cm4gQlUodGhpcy5fYmFzZUhyZWYsYSl9cGF0aChhPSExKXtjb25zdCBkPXRoaXMuX3BsYXRmb3JtTG9jYXRpb24u'@;
put 'cGF0aG5hbWUrWDQodGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5zZWFyY2gpLGg9dGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5oYXNoO3JldHVybiBoJiZhP2Ake2R9JHtofWA6ZH1wdXNoU3RhdGUoYSxkLGgsZil7Y29uc3Qgdj10aGlzLnByZXBhcmVFeHRlcm5hbFVybChoK1g0KGYpKTt0aGlzLl9w'@;
put 'bGF0Zm9ybUxvY2F0aW9uLnB1c2hTdGF0ZShhLGQsdil9cmVwbGFjZVN0YXRlKGEsZCxoLGYpe2NvbnN0IHY9dGhpcy5wcmVwYXJlRXh0ZXJuYWxVcmwoaCtYNChmKSk7dGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5yZXBsYWNlU3RhdGUoYSxkLHYpfWZvcndhcmQoKXt0aGlzLl9wbGF0Zm9ybUxv'@;
put 'Y2F0aW9uLmZvcndhcmQoKX1iYWNrKCl7dGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5iYWNrKCl9Z2V0U3RhdGUoKXtyZXR1cm4gdGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5nZXRTdGF0ZSgpfWhpc3RvcnlHbyhhPTApe3RoaXMuX3BsYXRmb3JtTG9jYXRpb24uaGlzdG9yeUdvPy4oYSl9c3RhdGlj'@;
put 'e3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoeHIoVlUpLHhyKFZhZSw4KSl9fXN0YXRpY3t0aGlzLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pfX1yZXR1cm4gY30pKCksdl9lPSgoKT0+e2Ns'@;
put 'YXNzIGMgZXh0ZW5kcyBaOHtjb25zdHJ1Y3RvcihhLGQpe3N1cGVyKCksdGhpcy5fcGxhdGZvcm1Mb2NhdGlvbj1hLHRoaXMuX2Jhc2VIcmVmPSIiLHRoaXMuX3JlbW92ZUxpc3RlbmVyRm5zPVtdLG51bGwhPWQmJih0aGlzLl9iYXNlSHJlZj1kKX1uZ09uRGVzdHJveSgpe2Zvcig7dGhpcy5f'@;
put 'cmVtb3ZlTGlzdGVuZXJGbnMubGVuZ3RoOyl0aGlzLl9yZW1vdmVMaXN0ZW5lckZucy5wb3AoKSgpfW9uUG9wU3RhdGUoYSl7dGhpcy5fcmVtb3ZlTGlzdGVuZXJGbnMucHVzaCh0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLm9uUG9wU3RhdGUoYSksdGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5vbkhh'@;
put 'c2hDaGFuZ2UoYSkpfWdldEJhc2VIcmVmKCl7cmV0dXJuIHRoaXMuX2Jhc2VIcmVmfXBhdGgoYT0hMSl7Y29uc3QgZD10aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLmhhc2g/PyIjIjtyZXR1cm4gZC5sZW5ndGg+MD9kLnN1YnN0cmluZygxKTpkfXByZXBhcmVFeHRlcm5hbFVybChhKXtjb25zdCBk'@;
put 'PUJVKHRoaXMuX2Jhc2VIcmVmLGEpO3JldHVybiBkLmxlbmd0aD4wPyIjIitkOmR9cHVzaFN0YXRlKGEsZCxoLGYpe2xldCB2PXRoaXMucHJlcGFyZUV4dGVybmFsVXJsKGgrWDQoZikpOzA9PXYubGVuZ3RoJiYodj10aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLnBhdGhuYW1lKSx0aGlzLl9wbGF0'@;
put 'Zm9ybUxvY2F0aW9uLnB1c2hTdGF0ZShhLGQsdil9cmVwbGFjZVN0YXRlKGEsZCxoLGYpe2xldCB2PXRoaXMucHJlcGFyZUV4dGVybmFsVXJsKGgrWDQoZikpOzA9PXYubGVuZ3RoJiYodj10aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLnBhdGhuYW1lKSx0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLnJl'@;
put 'cGxhY2VTdGF0ZShhLGQsdil9Zm9yd2FyZCgpe3RoaXMuX3BsYXRmb3JtTG9jYXRpb24uZm9yd2FyZCgpfWJhY2soKXt0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLmJhY2soKX1nZXRTdGF0ZSgpe3JldHVybiB0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLmdldFN0YXRlKCl9aGlzdG9yeUdvKGE9MCl7'@;
put 'dGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5oaXN0b3J5R28/LihhKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKSh4cihWVSkseHIoVmFlLDgpKX19c3RhdGlje3RoaXMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSl9'@;
put 'fXJldHVybiBjfSkoKSxmaD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMuX3N1YmplY3Q9bmV3IEtyLHRoaXMuX3VybENoYW5nZUxpc3RlbmVycz1bXSx0aGlzLl91cmxDaGFuZ2VTdWJzY3JpcHRpb249bnVsbCx0aGlzLl9sb2NhdGlvblN0cmF0ZWd5PWE7Y29uc3QgZD10aGlz'@;
put 'Ll9sb2NhdGlvblN0cmF0ZWd5LmdldEJhc2VIcmVmKCk7dGhpcy5fYmFzZVBhdGg9ZnVuY3Rpb24gX19lKGMpe2lmKG5ldyBSZWdFeHAoIl4oaHR0cHM/Oik/Ly8iKS50ZXN0KGMpKXtjb25zdFssYV09Yy5zcGxpdCgvXC9cL1teXC9dKy8pO3JldHVybiBhfXJldHVybiBjfShOYWUoamFlKGQp'@;
put 'KSksdGhpcy5fbG9jYXRpb25TdHJhdGVneS5vblBvcFN0YXRlKGg9Pnt0aGlzLl9zdWJqZWN0LmVtaXQoe3VybDp0aGlzLnBhdGgoITApLHBvcDohMCxzdGF0ZTpoLnN0YXRlLHR5cGU6aC50eXBlfSl9KX1uZ09uRGVzdHJveSgpe3RoaXMuX3VybENoYW5nZVN1YnNjcmlwdGlvbj8udW5zdWJz'@;
put 'Y3JpYmUoKSx0aGlzLl91cmxDaGFuZ2VMaXN0ZW5lcnM9W119cGF0aChhPSExKXtyZXR1cm4gdGhpcy5ub3JtYWxpemUodGhpcy5fbG9jYXRpb25TdHJhdGVneS5wYXRoKGEpKX1nZXRTdGF0ZSgpe3JldHVybiB0aGlzLl9sb2NhdGlvblN0cmF0ZWd5LmdldFN0YXRlKCl9aXNDdXJyZW50UGF0'@;
put 'aEVxdWFsVG8oYSxkPSIiKXtyZXR1cm4gdGhpcy5wYXRoKCk9PXRoaXMubm9ybWFsaXplKGErWDQoZCkpfW5vcm1hbGl6ZShhKXtyZXR1cm4gYy5zdHJpcFRyYWlsaW5nU2xhc2goZnVuY3Rpb24geV9lKGMsbCl7aWYoIWN8fCFsLnN0YXJ0c1dpdGgoYykpcmV0dXJuIGw7Y29uc3QgYT1sLnN1'@;
put 'YnN0cmluZyhjLmxlbmd0aCk7cmV0dXJuIiI9PT1hfHxbIi8iLCI7IiwiPyIsIiMiXS5pbmNsdWRlcyhhWzBdKT9hOmx9KHRoaXMuX2Jhc2VQYXRoLGphZShhKSkpfXByZXBhcmVFeHRlcm5hbFVybChhKXtyZXR1cm4gYSYmIi8iIT09YVswXSYmKGE9Ii8iK2EpLHRoaXMuX2xvY2F0aW9uU3Ry'@;
put 'YXRlZ3kucHJlcGFyZUV4dGVybmFsVXJsKGEpfWdvKGEsZD0iIixoPW51bGwpe3RoaXMuX2xvY2F0aW9uU3RyYXRlZ3kucHVzaFN0YXRlKGgsIiIsYSxkKSx0aGlzLl9ub3RpZnlVcmxDaGFuZ2VMaXN0ZW5lcnModGhpcy5wcmVwYXJlRXh0ZXJuYWxVcmwoYStYNChkKSksaCl9cmVwbGFjZVN0'@;
put 'YXRlKGEsZD0iIixoPW51bGwpe3RoaXMuX2xvY2F0aW9uU3RyYXRlZ3kucmVwbGFjZVN0YXRlKGgsIiIsYSxkKSx0aGlzLl9ub3RpZnlVcmxDaGFuZ2VMaXN0ZW5lcnModGhpcy5wcmVwYXJlRXh0ZXJuYWxVcmwoYStYNChkKSksaCl9Zm9yd2FyZCgpe3RoaXMuX2xvY2F0aW9uU3RyYXRlZ3ku'@;
put 'Zm9yd2FyZCgpfWJhY2soKXt0aGlzLl9sb2NhdGlvblN0cmF0ZWd5LmJhY2soKX1oaXN0b3J5R28oYT0wKXt0aGlzLl9sb2NhdGlvblN0cmF0ZWd5Lmhpc3RvcnlHbz8uKGEpfW9uVXJsQ2hhbmdlKGEpe3JldHVybiB0aGlzLl91cmxDaGFuZ2VMaXN0ZW5lcnMucHVzaChhKSx0aGlzLl91cmxD'@;
put 'aGFuZ2VTdWJzY3JpcHRpb24/Pz10aGlzLnN1YnNjcmliZShkPT57dGhpcy5fbm90aWZ5VXJsQ2hhbmdlTGlzdGVuZXJzKGQudXJsLGQuc3RhdGUpfSksKCk9Pntjb25zdCBkPXRoaXMuX3VybENoYW5nZUxpc3RlbmVycy5pbmRleE9mKGEpO3RoaXMuX3VybENoYW5nZUxpc3RlbmVycy5zcGxp'@;
put 'Y2UoZCwxKSwwPT09dGhpcy5fdXJsQ2hhbmdlTGlzdGVuZXJzLmxlbmd0aCYmKHRoaXMuX3VybENoYW5nZVN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKSx0aGlzLl91cmxDaGFuZ2VTdWJzY3JpcHRpb249bnVsbCl9fV9ub3RpZnlVcmxDaGFuZ2VMaXN0ZW5lcnMoYT0iIixkKXt0aGlzLl91'@;
put 'cmxDaGFuZ2VMaXN0ZW5lcnMuZm9yRWFjaChoPT5oKGEsZCkpfXN1YnNjcmliZShhLGQsaCl7cmV0dXJuIHRoaXMuX3N1YmplY3Quc3Vic2NyaWJlKHtuZXh0OmEsZXJyb3I6ZCxjb21wbGV0ZTpofSl9c3RhdGlje3RoaXMubm9ybWFsaXplUXVlcnlQYXJhbXM9WDR9c3RhdGlje3RoaXMuam9p'@;
put 'bldpdGhTbGFzaD1CVX1zdGF0aWN7dGhpcy5zdHJpcFRyYWlsaW5nU2xhc2g9TmFlfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKHhyKFo4KSl9fXN0YXRpY3t0aGlzLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTooKT0+ZnVuY3Rpb24g'@;
put 'Yl9lKCl7cmV0dXJuIG5ldyBmaCh4cihaOCkpfSgpLHByb3ZpZGVkSW46InJvb3QifSl9fXJldHVybiBjfSkoKTtmdW5jdGlvbiBqYWUoYyl7cmV0dXJuIGMucmVwbGFjZSgvXC9pbmRleC5odG1sJC8sIiIpfXZhciBkMD1mdW5jdGlvbihjKXtyZXR1cm4gY1tjLkZvcm1hdD0wXT0iRm9ybWF0'@;
put 'IixjW2MuU3RhbmRhbG9uZT0xXT0iU3RhbmRhbG9uZSIsY30oZDB8fHt9KSxkbD1mdW5jdGlvbihjKXtyZXR1cm4gY1tjLk5hcnJvdz0wXT0iTmFycm93IixjW2MuQWJicmV2aWF0ZWQ9MV09IkFiYnJldmlhdGVkIixjW2MuV2lkZT0yXT0iV2lkZSIsY1tjLlNob3J0PTNdPSJTaG9ydCIsY30o'@;
put 'ZGx8fHt9KSxDZD1mdW5jdGlvbihjKXtyZXR1cm4gY1tjLlNob3J0PTBdPSJTaG9ydCIsY1tjLk1lZGl1bT0xXT0iTWVkaXVtIixjW2MuTG9uZz0yXT0iTG9uZyIsY1tjLkZ1bGw9M109IkZ1bGwiLGN9KENkfHx7fSk7ZnVuY3Rpb24galUoYyxsLGEpe2NvbnN0IGQ9bzEoYyksZj1DMihbZFtl'@;
put 'Yy5EYXlzRm9ybWF0XSxkW2VjLkRheXNTdGFuZGFsb25lXV0sbCk7cmV0dXJuIEMyKGYsYSl9ZnVuY3Rpb24gelUoYyxsLGEpe2NvbnN0IGQ9bzEoYyksZj1DMihbZFtlYy5Nb250aHNGb3JtYXRdLGRbZWMuTW9udGhzU3RhbmRhbG9uZV1dLGwpO3JldHVybiBDMihmLGEpfWZ1bmN0aW9uIEMy'@;
put 'KGMsbCl7Zm9yKGxldCBhPWw7YT4tMTthLS0paWYodHlwZW9mIGNbYV08InUiKXJldHVybiBjW2FdO3Rocm93IG5ldyBFcnJvcigiTG9jYWxlIGRhdGEgQVBJOiBsb2NhbGUgZGF0YSB1bmRlZmluZWQiKX1mdW5jdGlvbiBxYWUoYyxsKXtsPWVuY29kZVVSSUNvbXBvbmVudChsKTtmb3IoY29u'@;
put 'c3QgYSBvZiBjLnNwbGl0KCI7Iikpe2NvbnN0IGQ9YS5pbmRleE9mKCI9IiksW2gsZl09LTE9PWQ/W2EsIiJdOlthLnNsaWNlKDAsZCksYS5zbGljZShkKzEpXTtpZihoLnRyaW0oKT09PWwpcmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChmKX1yZXR1cm4gbnVsbH1jb25zdCBKVT0vXHMrLyxY'@;
put 'YWU9W107bGV0IHd1PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkKXt0aGlzLl9uZ0VsPWEsdGhpcy5fcmVuZGVyZXI9ZCx0aGlzLmluaXRpYWxDbGFzc2VzPVhhZSx0aGlzLnN0YXRlTWFwPW5ldyBNYXB9c2V0IGtsYXNzKGEpe3RoaXMuaW5pdGlhbENsYXNzZXM9bnVsbCE9YT9hLnRy'@;
put 'aW0oKS5zcGxpdChKVSk6WGFlfXNldCBuZ0NsYXNzKGEpe3RoaXMucmF3Q2xhc3M9InN0cmluZyI9PXR5cGVvZiBhP2EudHJpbSgpLnNwbGl0KEpVKTphfW5nRG9DaGVjaygpe2Zvcihjb25zdCBkIG9mIHRoaXMuaW5pdGlhbENsYXNzZXMpdGhpcy5fdXBkYXRlU3RhdGUoZCwhMCk7Y29uc3Qg'@;
put 'YT10aGlzLnJhd0NsYXNzO2lmKEFycmF5LmlzQXJyYXkoYSl8fGEgaW5zdGFuY2VvZiBTZXQpZm9yKGNvbnN0IGQgb2YgYSl0aGlzLl91cGRhdGVTdGF0ZShkLCEwKTtlbHNlIGlmKG51bGwhPWEpZm9yKGNvbnN0IGQgb2YgT2JqZWN0LmtleXMoYSkpdGhpcy5fdXBkYXRlU3RhdGUoZCwhIWFb'@;
put 'ZF0pO3RoaXMuX2FwcGx5U3RhdGVEaWZmKCl9X3VwZGF0ZVN0YXRlKGEsZCl7Y29uc3QgaD10aGlzLnN0YXRlTWFwLmdldChhKTt2b2lkIDAhPT1oPyhoLmVuYWJsZWQhPT1kJiYoaC5jaGFuZ2VkPSEwLGguZW5hYmxlZD1kKSxoLnRvdWNoZWQ9ITApOnRoaXMuc3RhdGVNYXAuc2V0KGEse2Vu'@;
put 'YWJsZWQ6ZCxjaGFuZ2VkOiEwLHRvdWNoZWQ6ITB9KX1fYXBwbHlTdGF0ZURpZmYoKXtmb3IoY29uc3QgYSBvZiB0aGlzLnN0YXRlTWFwKXtjb25zdCBkPWFbMF0saD1hWzFdO2guY2hhbmdlZD8odGhpcy5fdG9nZ2xlQ2xhc3MoZCxoLmVuYWJsZWQpLGguY2hhbmdlZD0hMSk6aC50b3VjaGVk'@;
put 'fHwoaC5lbmFibGVkJiZ0aGlzLl90b2dnbGVDbGFzcyhkLCExKSx0aGlzLnN0YXRlTWFwLmRlbGV0ZShkKSksaC50b3VjaGVkPSExfX1fdG9nZ2xlQ2xhc3MoYSxkKXsoYT1hLnRyaW0oKSkubGVuZ3RoPjAmJmEuc3BsaXQoSlUpLmZvckVhY2goaD0+e2Q/dGhpcy5fcmVuZGVyZXIuYWRkQ2xh'@;
put 'c3ModGhpcy5fbmdFbC5uYXRpdmVFbGVtZW50LGgpOnRoaXMuX3JlbmRlcmVyLnJlbW92ZUNsYXNzKHRoaXMuX25nRWwubmF0aXZlRWxlbWVudCxoKX0pfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKEdlKEppKSxHZShFbykpfX1zdGF0aWN7dGhp'@;
put 'cy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwibmdDbGFzcyIsIiJdXSxpbnB1dHM6e2tsYXNzOltObi5Ob25lLCJjbGFzcyIsImtsYXNzIl0sbmdDbGFzczoibmdDbGFzcyJ9LHN0YW5kYWxvbmU6ITB9KX19cmV0dXJuIGN9KSgpO2NsYXNzIGF3ZXtjb25zdHJ1Y3Rvcihs'@;
put 'LGEsZCxoKXt0aGlzLiRpbXBsaWNpdD1sLHRoaXMubmdGb3JPZj1hLHRoaXMuaW5kZXg9ZCx0aGlzLmNvdW50PWh9Z2V0IGZpcnN0KCl7cmV0dXJuIDA9PT10aGlzLmluZGV4fWdldCBsYXN0KCl7cmV0dXJuIHRoaXMuaW5kZXg9PT10aGlzLmNvdW50LTF9Z2V0IGV2ZW4oKXtyZXR1cm4gdGhp'@;
put 'cy5pbmRleCUyPT0wfWdldCBvZGQoKXtyZXR1cm4hdGhpcy5ldmVufX1sZXQgbnM9KCgpPT57Y2xhc3MgY3tzZXQgbmdGb3JPZihhKXt0aGlzLl9uZ0Zvck9mPWEsdGhpcy5fbmdGb3JPZkRpcnR5PSEwfXNldCBuZ0ZvclRyYWNrQnkoYSl7dGhpcy5fdHJhY2tCeUZuPWF9Z2V0IG5nRm9yVHJh'@;
put 'Y2tCeSgpe3JldHVybiB0aGlzLl90cmFja0J5Rm59Y29uc3RydWN0b3IoYSxkLGgpe3RoaXMuX3ZpZXdDb250YWluZXI9YSx0aGlzLl90ZW1wbGF0ZT1kLHRoaXMuX2RpZmZlcnM9aCx0aGlzLl9uZ0Zvck9mPW51bGwsdGhpcy5fbmdGb3JPZkRpcnR5PSEwLHRoaXMuX2RpZmZlcj1udWxsfXNl'@;
put 'dCBuZ0ZvclRlbXBsYXRlKGEpe2EmJih0aGlzLl90ZW1wbGF0ZT1hKX1uZ0RvQ2hlY2soKXtpZih0aGlzLl9uZ0Zvck9mRGlydHkpe3RoaXMuX25nRm9yT2ZEaXJ0eT0hMTtjb25zdCBhPXRoaXMuX25nRm9yT2Y7IXRoaXMuX2RpZmZlciYmYSYmKHRoaXMuX2RpZmZlcj10aGlzLl9kaWZmZXJz'@;
put 'LmZpbmQoYSkuY3JlYXRlKHRoaXMubmdGb3JUcmFja0J5KSl9aWYodGhpcy5fZGlmZmVyKXtjb25zdCBhPXRoaXMuX2RpZmZlci5kaWZmKHRoaXMuX25nRm9yT2YpO2EmJnRoaXMuX2FwcGx5Q2hhbmdlcyhhKX19X2FwcGx5Q2hhbmdlcyhhKXtjb25zdCBkPXRoaXMuX3ZpZXdDb250YWluZXI7'@;
put 'YS5mb3JFYWNoT3BlcmF0aW9uKChoLGYsdik9PntpZihudWxsPT1oLnByZXZpb3VzSW5kZXgpZC5jcmVhdGVFbWJlZGRlZFZpZXcodGhpcy5fdGVtcGxhdGUsbmV3IGF3ZShoLml0ZW0sdGhpcy5fbmdGb3JPZiwtMSwtMSksbnVsbD09PXY/dm9pZCAwOnYpO2Vsc2UgaWYobnVsbD09dilkLnJl'@;
put 'bW92ZShudWxsPT09Zj92b2lkIDA6Zik7ZWxzZSBpZihudWxsIT09Zil7Y29uc3QgTT1kLmdldChmKTtkLm1vdmUoTSx2KSxRYWUoTSxoKX19KTtmb3IobGV0IGg9MCxmPWQubGVuZ3RoO2g8ZjtoKyspe2NvbnN0IE09ZC5nZXQoaCkuY29udGV4dDtNLmluZGV4PWgsTS5jb3VudD1mLE0ubmdG'@;
put 'b3JPZj10aGlzLl9uZ0Zvck9mfWEuZm9yRWFjaElkZW50aXR5Q2hhbmdlKGg9PntRYWUoZC5nZXQoaC5jdXJyZW50SW5kZXgpLGgpfSl9c3RhdGljIG5nVGVtcGxhdGVDb250ZXh0R3VhcmQoYSxkKXtyZXR1cm4hMH1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5l'@;
put 'dyhkfHxjKShHZShEbyksR2UoU2wpLEdlKGVtKSl9fXN0YXRpY3t0aGlzLlx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJuZ0ZvciIsIiIsIm5nRm9yT2YiLCIiXV0saW5wdXRzOntuZ0Zvck9mOiJuZ0Zvck9mIixuZ0ZvclRyYWNrQnk6Im5nRm9yVHJhY2tCeSIsbmdGb3JU'@;
put 'ZW1wbGF0ZToibmdGb3JUZW1wbGF0ZSJ9LHN0YW5kYWxvbmU6ITB9KX19cmV0dXJuIGN9KSgpO2Z1bmN0aW9uIFFhZShjLGwpe2MuY29udGV4dC4kaW1wbGljaXQ9bC5pdGVtfWxldCBiYT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCl7dGhpcy5fdmlld0NvbnRhaW5lcj1hLHRoaXMu'@;
put 'X2NvbnRleHQ9bmV3IG93ZSx0aGlzLl90aGVuVGVtcGxhdGVSZWY9bnVsbCx0aGlzLl9lbHNlVGVtcGxhdGVSZWY9bnVsbCx0aGlzLl90aGVuVmlld1JlZj1udWxsLHRoaXMuX2Vsc2VWaWV3UmVmPW51bGwsdGhpcy5fdGhlblRlbXBsYXRlUmVmPWR9c2V0IG5nSWYoYSl7dGhpcy5fY29udGV4'@;
put 'dC4kaW1wbGljaXQ9dGhpcy5fY29udGV4dC5uZ0lmPWEsdGhpcy5fdXBkYXRlVmlldygpfXNldCBuZ0lmVGhlbihhKXtlb2UoIm5nSWZUaGVuIixhKSx0aGlzLl90aGVuVGVtcGxhdGVSZWY9YSx0aGlzLl90aGVuVmlld1JlZj1udWxsLHRoaXMuX3VwZGF0ZVZpZXcoKX1zZXQgbmdJZkVsc2Uo'@;
put 'YSl7ZW9lKCJuZ0lmRWxzZSIsYSksdGhpcy5fZWxzZVRlbXBsYXRlUmVmPWEsdGhpcy5fZWxzZVZpZXdSZWY9bnVsbCx0aGlzLl91cGRhdGVWaWV3KCl9X3VwZGF0ZVZpZXcoKXt0aGlzLl9jb250ZXh0LiRpbXBsaWNpdD90aGlzLl90aGVuVmlld1JlZnx8KHRoaXMuX3ZpZXdDb250YWluZXIu'@;
put 'Y2xlYXIoKSx0aGlzLl9lbHNlVmlld1JlZj1udWxsLHRoaXMuX3RoZW5UZW1wbGF0ZVJlZiYmKHRoaXMuX3RoZW5WaWV3UmVmPXRoaXMuX3ZpZXdDb250YWluZXIuY3JlYXRlRW1iZWRkZWRWaWV3KHRoaXMuX3RoZW5UZW1wbGF0ZVJlZix0aGlzLl9jb250ZXh0KSkpOnRoaXMuX2Vsc2VWaWV3'@;
put 'UmVmfHwodGhpcy5fdmlld0NvbnRhaW5lci5jbGVhcigpLHRoaXMuX3RoZW5WaWV3UmVmPW51bGwsdGhpcy5fZWxzZVRlbXBsYXRlUmVmJiYodGhpcy5fZWxzZVZpZXdSZWY9dGhpcy5fdmlld0NvbnRhaW5lci5jcmVhdGVFbWJlZGRlZFZpZXcodGhpcy5fZWxzZVRlbXBsYXRlUmVmLHRoaXMu'@;
put 'X2NvbnRleHQpKSl9c3RhdGljIG5nVGVtcGxhdGVDb250ZXh0R3VhcmQoYSxkKXtyZXR1cm4hMH1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShHZShEbyksR2UoU2wpKX19c3RhdGlje3RoaXMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3Jz'@;
put 'OltbIiIsIm5nSWYiLCIiXV0saW5wdXRzOntuZ0lmOiJuZ0lmIixuZ0lmVGhlbjoibmdJZlRoZW4iLG5nSWZFbHNlOiJuZ0lmRWxzZSJ9LHN0YW5kYWxvbmU6ITB9KX19cmV0dXJuIGN9KSgpO2NsYXNzIG93ZXtjb25zdHJ1Y3Rvcigpe3RoaXMuJGltcGxpY2l0PW51bGwsdGhpcy5uZ0lmPW51'@;
put 'bGx9fWZ1bmN0aW9uIGVvZShjLGwpe2lmKGwmJiFsLmNyZWF0ZUVtYmVkZGVkVmlldyl0aHJvdyBuZXcgRXJyb3IoYCR7Y30gbXVzdCBiZSBhIFRlbXBsYXRlUmVmLCBidXQgcmVjZWl2ZWQgJyR7UHIobCl9Jy5gKX1jbGFzcyBRVXtjb25zdHJ1Y3RvcihsLGEpe3RoaXMuX3ZpZXdDb250YWlu'@;
put 'ZXJSZWY9bCx0aGlzLl90ZW1wbGF0ZVJlZj1hLHRoaXMuX2NyZWF0ZWQ9ITF9Y3JlYXRlKCl7dGhpcy5fY3JlYXRlZD0hMCx0aGlzLl92aWV3Q29udGFpbmVyUmVmLmNyZWF0ZUVtYmVkZGVkVmlldyh0aGlzLl90ZW1wbGF0ZVJlZil9ZGVzdHJveSgpe3RoaXMuX2NyZWF0ZWQ9ITEsdGhpcy5f'@;
put 'dmlld0NvbnRhaW5lclJlZi5jbGVhcigpfWVuZm9yY2VTdGF0ZShsKXtsJiYhdGhpcy5fY3JlYXRlZD90aGlzLmNyZWF0ZSgpOiFsJiZ0aGlzLl9jcmVhdGVkJiZ0aGlzLmRlc3Ryb3koKX19bGV0IFMyPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLl9kZWZhdWx0Vmlld3M9W10s'@;
put 'dGhpcy5fZGVmYXVsdFVzZWQ9ITEsdGhpcy5fY2FzZUNvdW50PTAsdGhpcy5fbGFzdENhc2VDaGVja0luZGV4PTAsdGhpcy5fbGFzdENhc2VzTWF0Y2hlZD0hMX1zZXQgbmdTd2l0Y2goYSl7dGhpcy5fbmdTd2l0Y2g9YSwwPT09dGhpcy5fY2FzZUNvdW50JiZ0aGlzLl91cGRhdGVEZWZhdWx0'@;
put 'Q2FzZXMoITApfV9hZGRDYXNlKCl7cmV0dXJuIHRoaXMuX2Nhc2VDb3VudCsrfV9hZGREZWZhdWx0KGEpe3RoaXMuX2RlZmF1bHRWaWV3cy5wdXNoKGEpfV9tYXRjaENhc2UoYSl7Y29uc3QgZD1hPT09dGhpcy5fbmdTd2l0Y2g7cmV0dXJuIHRoaXMuX2xhc3RDYXNlc01hdGNoZWR8fD1kLHRo'@;
put 'aXMuX2xhc3RDYXNlQ2hlY2tJbmRleCsrLHRoaXMuX2xhc3RDYXNlQ2hlY2tJbmRleD09PXRoaXMuX2Nhc2VDb3VudCYmKHRoaXMuX3VwZGF0ZURlZmF1bHRDYXNlcyghdGhpcy5fbGFzdENhc2VzTWF0Y2hlZCksdGhpcy5fbGFzdENhc2VDaGVja0luZGV4PTAsdGhpcy5fbGFzdENhc2VzTWF0'@;
put 'Y2hlZD0hMSksZH1fdXBkYXRlRGVmYXVsdENhc2VzKGEpe2lmKHRoaXMuX2RlZmF1bHRWaWV3cy5sZW5ndGg+MCYmYSE9PXRoaXMuX2RlZmF1bHRVc2VkKXt0aGlzLl9kZWZhdWx0VXNlZD1hO2Zvcihjb25zdCBkIG9mIHRoaXMuX2RlZmF1bHRWaWV3cylkLmVuZm9yY2VTdGF0ZShhKX19c3Rh'@;
put 'dGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJuZ1N3aXRjaCIsIiJdXSxpbnB1dHM6e25nU3dpdGNoOiJuZ1N3aXRjaCJ9LHN0YW5kYWxvbmU6ITB9KX19cmV0dXJu'@;
put 'IGN9KSgpLGNwPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgpe3RoaXMubmdTd2l0Y2g9aCxoLl9hZGRDYXNlKCksdGhpcy5fdmlldz1uZXcgUVUoYSxkKX1uZ0RvQ2hlY2soKXt0aGlzLl92aWV3LmVuZm9yY2VTdGF0ZSh0aGlzLm5nU3dpdGNoLl9tYXRjaENhc2UodGhpcy5uZ1N3'@;
put 'aXRjaENhc2UpKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShHZShEbyksR2UoU2wpLEdlKFMyLDkpKX19c3RhdGlje3RoaXMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsIm5nU3dpdGNoQ2FzZSIsIiJdXSxpbnB1dHM6e25n'@;
put 'U3dpdGNoQ2FzZToibmdTd2l0Y2hDYXNlIn0sc3RhbmRhbG9uZTohMH0pfX1yZXR1cm4gY30pKCksbm9lPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgpe3RoaXMuX25nRWw9YSx0aGlzLl9kaWZmZXJzPWQsdGhpcy5fcmVuZGVyZXI9aCx0aGlzLl9uZ1N0eWxlPW51bGwsdGhpcy5f'@;
put 'ZGlmZmVyPW51bGx9c2V0IG5nU3R5bGUoYSl7dGhpcy5fbmdTdHlsZT1hLCF0aGlzLl9kaWZmZXImJmEmJih0aGlzLl9kaWZmZXI9dGhpcy5fZGlmZmVycy5maW5kKGEpLmNyZWF0ZSgpKX1uZ0RvQ2hlY2soKXtpZih0aGlzLl9kaWZmZXIpe2NvbnN0IGE9dGhpcy5fZGlmZmVyLmRpZmYodGhp'@;
put 'cy5fbmdTdHlsZSk7YSYmdGhpcy5fYXBwbHlDaGFuZ2VzKGEpfX1fc2V0U3R5bGUoYSxkKXtjb25zdFtoLGZdPWEuc3BsaXQoIi4iKSx2PS0xPT09aC5pbmRleE9mKCItIik/dm9pZCAwOkszLkRhc2hDYXNlO251bGwhPWQ/dGhpcy5fcmVuZGVyZXIuc2V0U3R5bGUodGhpcy5fbmdFbC5uYXRp'@;
put 'dmVFbGVtZW50LGgsZj9gJHtkfSR7Zn1gOmQsdik6dGhpcy5fcmVuZGVyZXIucmVtb3ZlU3R5bGUodGhpcy5fbmdFbC5uYXRpdmVFbGVtZW50LGgsdil9X2FwcGx5Q2hhbmdlcyhhKXthLmZvckVhY2hSZW1vdmVkSXRlbShkPT50aGlzLl9zZXRTdHlsZShkLmtleSxudWxsKSksYS5mb3JFYWNo'@;
put 'QWRkZWRJdGVtKGQ9PnRoaXMuX3NldFN0eWxlKGQua2V5LGQuY3VycmVudFZhbHVlKSksYS5mb3JFYWNoQ2hhbmdlZEl0ZW0oZD0+dGhpcy5fc2V0U3R5bGUoZC5rZXksZC5jdXJyZW50VmFsdWUpKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShH'@;
put 'ZShKaSksR2Uod00pLEdlKEVvKSl9fXN0YXRpY3t0aGlzLlx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJuZ1N0eWxlIiwiIl1dLGlucHV0czp7bmdTdHlsZToibmdTdHlsZSJ9LHN0YW5kYWxvbmU6ITB9KX19cmV0dXJuIGN9KSgpLE4xPSgoKT0+e2NsYXNzIGN7Y29uc3Ry'@;
put 'dWN0b3IoYSl7dGhpcy5fdmlld0NvbnRhaW5lclJlZj1hLHRoaXMuX3ZpZXdSZWY9bnVsbCx0aGlzLm5nVGVtcGxhdGVPdXRsZXRDb250ZXh0PW51bGwsdGhpcy5uZ1RlbXBsYXRlT3V0bGV0PW51bGwsdGhpcy5uZ1RlbXBsYXRlT3V0bGV0SW5qZWN0b3I9bnVsbH1uZ09uQ2hhbmdlcyhhKXtp'@;
put 'Zih0aGlzLl9zaG91bGRSZWNyZWF0ZVZpZXcoYSkpe2NvbnN0IGQ9dGhpcy5fdmlld0NvbnRhaW5lclJlZjtpZih0aGlzLl92aWV3UmVmJiZkLnJlbW92ZShkLmluZGV4T2YodGhpcy5fdmlld1JlZikpLCF0aGlzLm5nVGVtcGxhdGVPdXRsZXQpcmV0dXJuIHZvaWQodGhpcy5fdmlld1JlZj1u'@;
put 'dWxsKTtjb25zdCBoPXRoaXMuX2NyZWF0ZUNvbnRleHRGb3J3YXJkUHJveHkoKTt0aGlzLl92aWV3UmVmPWQuY3JlYXRlRW1iZWRkZWRWaWV3KHRoaXMubmdUZW1wbGF0ZU91dGxldCxoLHtpbmplY3Rvcjp0aGlzLm5nVGVtcGxhdGVPdXRsZXRJbmplY3Rvcj8/dm9pZCAwfSl9fV9zaG91bGRS'@;
put 'ZWNyZWF0ZVZpZXcoYSl7cmV0dXJuISFhLm5nVGVtcGxhdGVPdXRsZXR8fCEhYS5uZ1RlbXBsYXRlT3V0bGV0SW5qZWN0b3J9X2NyZWF0ZUNvbnRleHRGb3J3YXJkUHJveHkoKXtyZXR1cm4gbmV3IFByb3h5KHt9LHtzZXQ6KGEsZCxoKT0+ISF0aGlzLm5nVGVtcGxhdGVPdXRsZXRDb250ZXh0'@;
put 'JiZSZWZsZWN0LnNldCh0aGlzLm5nVGVtcGxhdGVPdXRsZXRDb250ZXh0LGQsaCksZ2V0OihhLGQsaCk9PntpZih0aGlzLm5nVGVtcGxhdGVPdXRsZXRDb250ZXh0KXJldHVybiBSZWZsZWN0LmdldCh0aGlzLm5nVGVtcGxhdGVPdXRsZXRDb250ZXh0LGQsaCl9fSl9c3RhdGlje3RoaXMuXHUw'@;
put 'Mjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoR2UoRG8pKX19c3RhdGlje3RoaXMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsIm5nVGVtcGxhdGVPdXRsZXQiLCIiXV0saW5wdXRzOntuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dDoibmdUZW1wbGF0ZU91dGxl'@;
put 'dENvbnRleHQiLG5nVGVtcGxhdGVPdXRsZXQ6Im5nVGVtcGxhdGVPdXRsZXQiLG5nVGVtcGxhdGVPdXRsZXRJbmplY3RvcjoibmdUZW1wbGF0ZU91dGxldEluamVjdG9yIn0sc3RhbmRhbG9uZTohMCxmZWF0dXJlczpbd2xdfSl9fXJldHVybiBjfSkoKTtjbGFzcyB1d2V7Y3JlYXRlU3Vic2Ny'@;
put 'aXB0aW9uKGwsYSl7cmV0dXJuIFBhZSgoKT0+bC5zdWJzY3JpYmUoe25leHQ6YSxlcnJvcjpkPT57dGhyb3cgZH19KSl9ZGlzcG9zZShsKXtQYWUoKCk9PmwudW5zdWJzY3JpYmUoKSl9fWNsYXNzIGR3ZXtjcmVhdGVTdWJzY3JpcHRpb24obCxhKXtyZXR1cm4gbC50aGVuKGEsZD0+e3Rocm93'@;
put 'IGR9KX1kaXNwb3NlKGwpe319Y29uc3QgaHdlPW5ldyBkd2UsZndlPW5ldyB1d2U7bGV0IEVNPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5fbGF0ZXN0VmFsdWU9bnVsbCx0aGlzLm1hcmtGb3JDaGVja09uVmFsdWVVcGRhdGU9ITAsdGhpcy5fc3Vic2NyaXB0aW9uPW51bGws'@;
put 'dGhpcy5fb2JqPW51bGwsdGhpcy5fc3RyYXRlZ3k9bnVsbCx0aGlzLl9yZWY9YX1uZ09uRGVzdHJveSgpe3RoaXMuX3N1YnNjcmlwdGlvbiYmdGhpcy5fZGlzcG9zZSgpLHRoaXMuX3JlZj1udWxsfXRyYW5zZm9ybShhKXtpZighdGhpcy5fb2JqKXtpZihhKXRyeXt0aGlzLm1hcmtGb3JDaGVj'@;
put 'a09uVmFsdWVVcGRhdGU9ITEsdGhpcy5fc3Vic2NyaWJlKGEpfWZpbmFsbHl7dGhpcy5tYXJrRm9yQ2hlY2tPblZhbHVlVXBkYXRlPSEwfXJldHVybiB0aGlzLl9sYXRlc3RWYWx1ZX1yZXR1cm4gYSE9PXRoaXMuX29iaj8odGhpcy5fZGlzcG9zZSgpLHRoaXMudHJhbnNmb3JtKGEpKTp0aGlz'@;
put 'Ll9sYXRlc3RWYWx1ZX1fc3Vic2NyaWJlKGEpe3RoaXMuX29iaj1hLHRoaXMuX3N0cmF0ZWd5PXRoaXMuX3NlbGVjdFN0cmF0ZWd5KGEpLHRoaXMuX3N1YnNjcmlwdGlvbj10aGlzLl9zdHJhdGVneS5jcmVhdGVTdWJzY3JpcHRpb24oYSxkPT50aGlzLl91cGRhdGVMYXRlc3RWYWx1ZShhLGQp'@;
put 'KX1fc2VsZWN0U3RyYXRlZ3koYSl7aWYoX00oYSkpcmV0dXJuIGh3ZTtpZihXaWUoYSkpcmV0dXJuIGZ3ZTt0aHJvdyBmdW5jdGlvbiB6ZihjLGwpe3JldHVybiBuZXcgUW4oMjEwMCwhMSl9KCl9X2Rpc3Bvc2UoKXt0aGlzLl9zdHJhdGVneS5kaXNwb3NlKHRoaXMuX3N1YnNjcmlwdGlvbiks'@;
put 'dGhpcy5fbGF0ZXN0VmFsdWU9bnVsbCx0aGlzLl9zdWJzY3JpcHRpb249bnVsbCx0aGlzLl9vYmo9bnVsbH1fdXBkYXRlTGF0ZXN0VmFsdWUoYSxkKXthPT09dGhpcy5fb2JqJiYodGhpcy5fbGF0ZXN0VmFsdWU9ZCx0aGlzLm1hcmtGb3JDaGVja09uVmFsdWVVcGRhdGUmJnRoaXMuX3JlZj8u'@;
put 'bWFya0ZvckNoZWNrKCkpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKEdlKEVzLDE2KSl9fXN0YXRpY3t0aGlzLlx1MDI3NXBpcGU9bGwoe25hbWU6ImFzeW5jIix0eXBlOmMscHVyZTohMSxzdGFuZGFsb25lOiEwfSl9fXJldHVybiBjfSkoKSxl'@;
put 'Wj0oKCk9PntjbGFzcyBje3RyYW5zZm9ybShhKXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkoYSxudWxsLDIpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVwaXBlPWxsKHtuYW1lOiJqc29uIix0eXBlOmMscHVyZToh'@;
put 'MSxzdGFuZGFsb25lOiEwfSl9fXJldHVybiBjfSkoKSx3Uj0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMuZGlmZmVycz1hLHRoaXMua2V5VmFsdWVzPVtdLHRoaXMuY29tcGFyZUZuPXJvZX10cmFuc2Zvcm0oYSxkPXJvZSl7aWYoIWF8fCEoYSBpbnN0YW5jZW9mIE1hcCkmJiJv'@;
put 'YmplY3QiIT10eXBlb2YgYSlyZXR1cm4gbnVsbDt0aGlzLmRpZmZlcj8/PXRoaXMuZGlmZmVycy5maW5kKGEpLmNyZWF0ZSgpO2NvbnN0IGg9dGhpcy5kaWZmZXIuZGlmZihhKSxmPWQhPT10aGlzLmNvbXBhcmVGbjtyZXR1cm4gaCYmKHRoaXMua2V5VmFsdWVzPVtdLGguZm9yRWFjaEl0ZW0o'@;
put 'dj0+e3RoaXMua2V5VmFsdWVzLnB1c2goZnVuY3Rpb24geHdlKGMsbCl7cmV0dXJue2tleTpjLHZhbHVlOmx9fSh2LmtleSx2LmN1cnJlbnRWYWx1ZSkpfSkpLChofHxmKSYmKHRoaXMua2V5VmFsdWVzLnNvcnQoZCksdGhpcy5jb21wYXJlRm49ZCksdGhpcy5rZXlWYWx1ZXN9c3RhdGlje3Ro'@;
put 'aXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoR2Uod00sMTYpKX19c3RhdGlje3RoaXMuXHUwMjc1cGlwZT1sbCh7bmFtZToia2V5dmFsdWUiLHR5cGU6YyxwdXJlOiExLHN0YW5kYWxvbmU6ITB9KX19cmV0dXJuIGN9KSgpO2Z1bmN0aW9uIHJvZShjLGwpe2NvbnN0'@;
put 'IGE9Yy5rZXksZD1sLmtleTtpZihhPT09ZClyZXR1cm4gMDtpZih2b2lkIDA9PT1hKXJldHVybiAxO2lmKHZvaWQgMD09PWQpcmV0dXJuLTE7aWYobnVsbD09PWEpcmV0dXJuIDE7aWYobnVsbD09PWQpcmV0dXJuLTE7aWYoInN0cmluZyI9PXR5cGVvZiBhJiYic3RyaW5nIj09dHlwZW9mIGQp'@;
put 'cmV0dXJuIGE8ZD8tMToxO2lmKCJudW1iZXIiPT10eXBlb2YgYSYmIm51bWJlciI9PXR5cGVvZiBkKXJldHVybiBhLWQ7aWYoImJvb2xlYW4iPT10eXBlb2YgYSYmImJvb2xlYW4iPT10eXBlb2YgZClyZXR1cm4gYTxkPy0xOjE7Y29uc3QgaD1TdHJpbmcoYSksZj1TdHJpbmcoZCk7cmV0dXJu'@;
put 'IGg9PWY/MDpoPGY/LTE6MX1sZXQgUmE9KCgpPT57Y2xhc3MgY3tzdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1bW9kPWtpKHt0eXBlOmN9KX1zdGF0aWN7dGhpcy5cdTAyNzVpbmo9QXIoe30pfX1yZXR1cm4gY30p'@;
put 'KCk7ZnVuY3Rpb24gdGwoYyl7cmV0dXJuImJyb3dzZXIiPT09Y31mdW5jdGlvbiBhb2UoYyl7cmV0dXJuInNlcnZlciI9PT1jfWxldCBSd2U9KCgpPT57Y2xhc3MgY3tzdGF0aWN7dGhpcy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLHByb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6KCk9PnRsKGZp'@;
put 'KGlvKSk/bmV3IEx3ZShmaSh2cyksd2luZG93KTpuZXcgUHdlfSl9fXJldHVybiBjfSkoKTtjbGFzcyBMd2V7Y29uc3RydWN0b3IobCxhKXt0aGlzLmRvY3VtZW50PWwsdGhpcy53aW5kb3c9YSx0aGlzLm9mZnNldD0oKT0+WzAsMF19c2V0T2Zmc2V0KGwpe3RoaXMub2Zmc2V0PUFycmF5Lmlz'@;
put 'QXJyYXkobCk/KCk9Pmw6bH1nZXRTY3JvbGxQb3NpdGlvbigpe3JldHVyblt0aGlzLndpbmRvdy5zY3JvbGxYLHRoaXMud2luZG93LnNjcm9sbFldfXNjcm9sbFRvUG9zaXRpb24obCl7dGhpcy53aW5kb3cuc2Nyb2xsVG8obFswXSxsWzFdKX1zY3JvbGxUb0FuY2hvcihsKXtjb25zdCBhPWZ1'@;
put 'bmN0aW9uIE93ZShjLGwpe2NvbnN0IGE9Yy5nZXRFbGVtZW50QnlJZChsKXx8Yy5nZXRFbGVtZW50c0J5TmFtZShsKVswXTtpZihhKXJldHVybiBhO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjLmNyZWF0ZVRyZWVXYWxrZXImJmMuYm9keSYmImZ1bmN0aW9uIj09dHlwZW9mIGMuYm9keS5hdHRh'@;
put 'Y2hTaGFkb3cpe2NvbnN0IGQ9Yy5jcmVhdGVUcmVlV2Fsa2VyKGMuYm9keSxOb2RlRmlsdGVyLlNIT1dfRUxFTUVOVCk7bGV0IGg9ZC5jdXJyZW50Tm9kZTtmb3IoO2g7KXtjb25zdCBmPWguc2hhZG93Um9vdDtpZihmKXtjb25zdCB2PWYuZ2V0RWxlbWVudEJ5SWQobCl8fGYucXVlcnlTZWxl'@;
put 'Y3RvcihgW25hbWU9IiR7bH0iXWApO2lmKHYpcmV0dXJuIHZ9aD1kLm5leHROb2RlKCl9fXJldHVybiBudWxsfSh0aGlzLmRvY3VtZW50LGwpO2EmJih0aGlzLnNjcm9sbFRvRWxlbWVudChhKSxhLmZvY3VzKCkpfXNldEhpc3RvcnlTY3JvbGxSZXN0b3JhdGlvbihsKXt0aGlzLndpbmRvdy5o'@;
put 'aXN0b3J5LnNjcm9sbFJlc3RvcmF0aW9uPWx9c2Nyb2xsVG9FbGVtZW50KGwpe2NvbnN0IGE9bC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxkPWEubGVmdCt0aGlzLndpbmRvdy5wYWdlWE9mZnNldCxoPWEudG9wK3RoaXMud2luZG93LnBhZ2VZT2Zmc2V0LGY9dGhpcy5vZmZzZXQoKTt0aGlz'@;
put 'LndpbmRvdy5zY3JvbGxUbyhkLWZbMF0saC1mWzFdKX19Y2xhc3MgUHdle3NldE9mZnNldChsKXt9Z2V0U2Nyb2xsUG9zaXRpb24oKXtyZXR1cm5bMCwwXX1zY3JvbGxUb1Bvc2l0aW9uKGwpe31zY3JvbGxUb0FuY2hvcihsKXt9c2V0SGlzdG9yeVNjcm9sbFJlc3RvcmF0aW9uKGwpe319Y2xh'@;
put 'c3Mgb29le31jbGFzcyBjQ2UgZXh0ZW5kcyBwX2V7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuc3VwcG9ydHNET01FdmVudHM9ITB9fWNsYXNzIGlaIGV4dGVuZHMgY0Nle3N0YXRpYyBtYWtlQ3VycmVudCgpeyFmdW5jdGlvbiBmX2UoYyl7SGFlPz89Y30obmV3IGla'@;
put 'KX1vbkFuZENhbmNlbChsLGEsZCl7cmV0dXJuIGwuYWRkRXZlbnRMaXN0ZW5lcihhLGQpLCgpPT57bC5yZW1vdmVFdmVudExpc3RlbmVyKGEsZCl9fWRpc3BhdGNoRXZlbnQobCxhKXtsLmRpc3BhdGNoRXZlbnQoYSl9cmVtb3ZlKGwpe2wucGFyZW50Tm9kZSYmbC5wYXJlbnROb2RlLnJlbW92'@;
put 'ZUNoaWxkKGwpfWNyZWF0ZUVsZW1lbnQobCxhKXtyZXR1cm4oYT1hfHx0aGlzLmdldERlZmF1bHREb2N1bWVudCgpKS5jcmVhdGVFbGVtZW50KGwpfWNyZWF0ZUh0bWxEb2N1bWVudCgpe3JldHVybiBkb2N1bWVudC5pbXBsZW1lbnRhdGlvbi5jcmVhdGVIVE1MRG9jdW1lbnQoImZha2VUaXRs'@;
put 'ZSIpfWdldERlZmF1bHREb2N1bWVudCgpe3JldHVybiBkb2N1bWVudH1pc0VsZW1lbnROb2RlKGwpe3JldHVybiBsLm5vZGVUeXBlPT09Tm9kZS5FTEVNRU5UX05PREV9aXNTaGFkb3dSb290KGwpe3JldHVybiBsIGluc3RhbmNlb2YgRG9jdW1lbnRGcmFnbWVudH1nZXRHbG9iYWxFdmVudFRh'@;
put 'cmdldChsLGEpe3JldHVybiJ3aW5kb3ciPT09YT93aW5kb3c6ImRvY3VtZW50Ij09PWE/bDoiYm9keSI9PT1hP2wuYm9keTpudWxsfWdldEJhc2VIcmVmKGwpe2NvbnN0IGE9ZnVuY3Rpb24gdUNlKCl7cmV0dXJuIGtNPWtNfHxkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCJiYXNlIiksa00/a00u'@;
put 'Z2V0QXR0cmlidXRlKCJocmVmIik6bnVsbH0oKTtyZXR1cm4gbnVsbD09YT9udWxsOmZ1bmN0aW9uIGRDZShjKXtyZXR1cm4gbmV3IFVSTChjLGRvY3VtZW50LmJhc2VVUkkpLnBhdGhuYW1lfShhKX1yZXNldEJhc2VFbGVtZW50KCl7a009bnVsbH1nZXRVc2VyQWdlbnQoKXtyZXR1cm4gd2lu'@;
put 'ZG93Lm5hdmlnYXRvci51c2VyQWdlbnR9Z2V0Q29va2llKGwpe3JldHVybiBxYWUoZG9jdW1lbnQuY29va2llLGwpfX1sZXQga009bnVsbCxmQ2U9KCgpPT57Y2xhc3MgY3tidWlsZCgpe3JldHVybiBuZXcgWE1MSHR0cFJlcXVlc3R9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQp'@;
put 'e3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pfX1yZXR1cm4gY30pKCk7Y29uc3QgYVo9bmV3IFN0KCIiKTtsZXQgZ29lPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkKXt0aGlzLl96b25lPWQsdGhp'@;
put 'cy5fZXZlbnROYW1lVG9QbHVnaW49bmV3IE1hcCxhLmZvckVhY2goaD0+e2gubWFuYWdlcj10aGlzfSksdGhpcy5fcGx1Z2lucz1hLnNsaWNlKCkucmV2ZXJzZSgpfWFkZEV2ZW50TGlzdGVuZXIoYSxkLGgpe3JldHVybiB0aGlzLl9maW5kUGx1Z2luRm9yKGQpLmFkZEV2ZW50TGlzdGVuZXIo'@;
put 'YSxkLGgpfWdldFpvbmUoKXtyZXR1cm4gdGhpcy5fem9uZX1fZmluZFBsdWdpbkZvcihhKXtsZXQgZD10aGlzLl9ldmVudE5hbWVUb1BsdWdpbi5nZXQoYSk7aWYoZClyZXR1cm4gZDtpZihkPXRoaXMuX3BsdWdpbnMuZmluZChmPT5mLnN1cHBvcnRzKGEpKSwhZCl0aHJvdyBuZXcgUW4oNTEw'@;
put 'MSwhMSk7cmV0dXJuIHRoaXMuX2V2ZW50TmFtZVRvUGx1Z2luLnNldChhLGQpLGR9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoeHIoYVopLHhyKFdhKSl9fXN0YXRpY3t0aGlzLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3'@;
put 'NWZhY30pfX1yZXR1cm4gY30pKCk7Y2xhc3MgbW9le2NvbnN0cnVjdG9yKGwpe3RoaXMuX2RvYz1sfX1jb25zdCBvWj0ibmctYXBwLWlkIjtsZXQgdm9lPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZj17fSl7dGhpcy5kb2M9YSx0aGlzLmFwcElkPWQsdGhpcy5ub25jZT1oLHRo'@;
put 'aXMucGxhdGZvcm1JZD1mLHRoaXMuc3R5bGVSZWY9bmV3IE1hcCx0aGlzLmhvc3ROb2Rlcz1uZXcgU2V0LHRoaXMuc3R5bGVOb2Rlc0luRE9NPXRoaXMuY29sbGVjdFNlcnZlclJlbmRlcmVkU3R5bGVzKCksdGhpcy5wbGF0Zm9ybUlzU2VydmVyPWFvZShmKSx0aGlzLnJlc2V0SG9zdE5vZGVz'@;
put 'KCl9YWRkU3R5bGVzKGEpe2Zvcihjb25zdCBkIG9mIGEpMT09PXRoaXMuY2hhbmdlVXNhZ2VDb3VudChkLDEpJiZ0aGlzLm9uU3R5bGVBZGRlZChkKX1yZW1vdmVTdHlsZXMoYSl7Zm9yKGNvbnN0IGQgb2YgYSl0aGlzLmNoYW5nZVVzYWdlQ291bnQoZCwtMSk8PTAmJnRoaXMub25TdHlsZVJl'@;
put 'bW92ZWQoZCl9bmdPbkRlc3Ryb3koKXtjb25zdCBhPXRoaXMuc3R5bGVOb2Rlc0luRE9NO2EmJihhLmZvckVhY2goZD0+ZC5yZW1vdmUoKSksYS5jbGVhcigpKTtmb3IoY29uc3QgZCBvZiB0aGlzLmdldEFsbFN0eWxlcygpKXRoaXMub25TdHlsZVJlbW92ZWQoZCk7dGhpcy5yZXNldEhvc3RO'@;
put 'b2RlcygpfWFkZEhvc3QoYSl7dGhpcy5ob3N0Tm9kZXMuYWRkKGEpO2Zvcihjb25zdCBkIG9mIHRoaXMuZ2V0QWxsU3R5bGVzKCkpdGhpcy5hZGRTdHlsZVRvSG9zdChhLGQpfXJlbW92ZUhvc3QoYSl7dGhpcy5ob3N0Tm9kZXMuZGVsZXRlKGEpfWdldEFsbFN0eWxlcygpe3JldHVybiB0aGlz'@;
put 'LnN0eWxlUmVmLmtleXMoKX1vblN0eWxlQWRkZWQoYSl7Zm9yKGNvbnN0IGQgb2YgdGhpcy5ob3N0Tm9kZXMpdGhpcy5hZGRTdHlsZVRvSG9zdChkLGEpfW9uU3R5bGVSZW1vdmVkKGEpe2NvbnN0IGQ9dGhpcy5zdHlsZVJlZjtkLmdldChhKT8uZWxlbWVudHM/LmZvckVhY2goaD0+aC5yZW1v'@;
put 'dmUoKSksZC5kZWxldGUoYSl9Y29sbGVjdFNlcnZlclJlbmRlcmVkU3R5bGVzKCl7Y29uc3QgYT10aGlzLmRvYy5oZWFkPy5xdWVyeVNlbGVjdG9yQWxsKGBzdHlsZVske29afT0iJHt0aGlzLmFwcElkfSJdYCk7aWYoYT8ubGVuZ3RoKXtjb25zdCBkPW5ldyBNYXA7cmV0dXJuIGEuZm9yRWFj'@;
put 'aChoPT57bnVsbCE9aC50ZXh0Q29udGVudCYmZC5zZXQoaC50ZXh0Q29udGVudCxoKX0pLGR9cmV0dXJuIG51bGx9Y2hhbmdlVXNhZ2VDb3VudChhLGQpe2NvbnN0IGg9dGhpcy5zdHlsZVJlZjtpZihoLmhhcyhhKSl7Y29uc3QgZj1oLmdldChhKTtyZXR1cm4gZi51c2FnZSs9ZCxmLnVzYWdl'@;
put 'fXJldHVybiBoLnNldChhLHt1c2FnZTpkLGVsZW1lbnRzOltdfSksZH1nZXRTdHlsZUVsZW1lbnQoYSxkKXtjb25zdCBoPXRoaXMuc3R5bGVOb2Rlc0luRE9NLGY9aD8uZ2V0KGQpO2lmKGY/LnBhcmVudE5vZGU9PT1hKXJldHVybiBoLmRlbGV0ZShkKSxmLnJlbW92ZUF0dHJpYnV0ZShvWiks'@;
put 'Zjt7Y29uc3Qgdj10aGlzLmRvYy5jcmVhdGVFbGVtZW50KCJzdHlsZSIpO3JldHVybiB0aGlzLm5vbmNlJiZ2LnNldEF0dHJpYnV0ZSgibm9uY2UiLHRoaXMubm9uY2UpLHYudGV4dENvbnRlbnQ9ZCx0aGlzLnBsYXRmb3JtSXNTZXJ2ZXImJnYuc2V0QXR0cmlidXRlKG9aLHRoaXMuYXBwSWQp'@;
put 'LGEuYXBwZW5kQ2hpbGQodiksdn19YWRkU3R5bGVUb0hvc3QoYSxkKXtjb25zdCBoPXRoaXMuZ2V0U3R5bGVFbGVtZW50KGEsZCksZj10aGlzLnN0eWxlUmVmLHY9Zi5nZXQoZCk/LmVsZW1lbnRzO3Y/di5wdXNoKGgpOmYuc2V0KGQse2VsZW1lbnRzOltoXSx1c2FnZToxfSl9cmVzZXRIb3N0'@;
put 'Tm9kZXMoKXtjb25zdCBhPXRoaXMuaG9zdE5vZGVzO2EuY2xlYXIoKSxhLmFkZCh0aGlzLmRvYy5oZWFkKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKSh4cih2cykseHIoJHYpLHhyKEw1LDgpLHhyKGlvKSl9fXN0YXRpY3t0aGlzLlx1MDI3NXBy'@;
put 'b3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pfX1yZXR1cm4gY30pKCk7Y29uc3Qgc1o9e3N2ZzoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLHhodG1sOiJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIix4bGluazoiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGlu'@;
put 'ayIseG1sOiJodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UiLHhtbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3htbG5zLyIsbWF0aDoiaHR0cDovL3d3dy53My5vcmcvMTk5OC9NYXRoTUwvIn0sbFo9LyVDT01QJS9nLHZDZT1uZXcgU3QoIiIse3Byb3ZpZGVkSW46InJv'@;
put 'b3QiLGZhY3Rvcnk6KCk9PiEwfSk7ZnVuY3Rpb24geW9lKGMsbCl7cmV0dXJuIGwubWFwKGE9PmEucmVwbGFjZShsWixjKSl9bGV0IGNaPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZix2LE0sRCxaPW51bGwpe3RoaXMuZXZlbnRNYW5hZ2VyPWEsdGhpcy5zaGFyZWRTdHlsZXNI'@;
put 'b3N0PWQsdGhpcy5hcHBJZD1oLHRoaXMucmVtb3ZlU3R5bGVzT25Db21wRGVzdHJveT1mLHRoaXMuZG9jPXYsdGhpcy5wbGF0Zm9ybUlkPU0sdGhpcy5uZ1pvbmU9RCx0aGlzLm5vbmNlPVosdGhpcy5yZW5kZXJlckJ5Q29tcElkPW5ldyBNYXAsdGhpcy5wbGF0Zm9ybUlzU2VydmVyPWFvZShN'@;
put 'KSx0aGlzLmRlZmF1bHRSZW5kZXJlcj1uZXcgdVooYSx2LEQsdGhpcy5wbGF0Zm9ybUlzU2VydmVyKX1jcmVhdGVSZW5kZXJlcihhLGQpe2lmKCFhfHwhZClyZXR1cm4gdGhpcy5kZWZhdWx0UmVuZGVyZXI7dGhpcy5wbGF0Zm9ybUlzU2VydmVyJiZkLmVuY2Fwc3VsYXRpb249PT1Kcy5TaGFk'@;
put 'b3dEb20mJihkPXsuLi5kLGVuY2Fwc3VsYXRpb246SnMuRW11bGF0ZWR9KTtjb25zdCBoPXRoaXMuZ2V0T3JDcmVhdGVSZW5kZXJlcihhLGQpO3JldHVybiBoIGluc3RhbmNlb2Ygd29lP2guYXBwbHlUb0hvc3QoYSk6aCBpbnN0YW5jZW9mIGRaJiZoLmFwcGx5U3R5bGVzKCksaH1nZXRPckNy'@;
put 'ZWF0ZVJlbmRlcmVyKGEsZCl7Y29uc3QgaD10aGlzLnJlbmRlcmVyQnlDb21wSWQ7bGV0IGY9aC5nZXQoZC5pZCk7aWYoIWYpe2NvbnN0IHY9dGhpcy5kb2MsTT10aGlzLm5nWm9uZSxEPXRoaXMuZXZlbnRNYW5hZ2VyLFo9dGhpcy5zaGFyZWRTdHlsZXNIb3N0LHJlPXRoaXMucmVtb3ZlU3R5'@;
put 'bGVzT25Db21wRGVzdHJveSxjZT10aGlzLnBsYXRmb3JtSXNTZXJ2ZXI7c3dpdGNoKGQuZW5jYXBzdWxhdGlvbil7Y2FzZSBKcy5FbXVsYXRlZDpmPW5ldyB3b2UoRCxaLGQsdGhpcy5hcHBJZCxyZSx2LE0sY2UpO2JyZWFrO2Nhc2UgSnMuU2hhZG93RG9tOnJldHVybiBuZXcgd0NlKEQsWixh'@;
put 'LGQsdixNLHRoaXMubm9uY2UsY2UpO2RlZmF1bHQ6Zj1uZXcgZFooRCxaLGQscmUsdixNLGNlKX1oLnNldChkLmlkLGYpfXJldHVybiBmfW5nT25EZXN0cm95KCl7dGhpcy5yZW5kZXJlckJ5Q29tcElkLmNsZWFyKCl9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBu'@;
put 'ZXcoZHx8YykoeHIoZ29lKSx4cih2b2UpLHhyKCR2KSx4cih2Q2UpLHhyKHZzKSx4cihpbykseHIoV2EpLHhyKEw1KSl9fXN0YXRpY3t0aGlzLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pfX1yZXR1cm4gY30pKCk7Y2xhc3MgdVp7Y29uc3RydWN0b3IobCxh'@;
put 'LGQsaCl7dGhpcy5ldmVudE1hbmFnZXI9bCx0aGlzLmRvYz1hLHRoaXMubmdab25lPWQsdGhpcy5wbGF0Zm9ybUlzU2VydmVyPWgsdGhpcy5kYXRhPU9iamVjdC5jcmVhdGUobnVsbCksdGhpcy50aHJvd09uU3ludGhldGljUHJvcHM9ITAsdGhpcy5kZXN0cm95Tm9kZT1udWxsfWRlc3Ryb3ko'@;
put 'KXt9Y3JlYXRlRWxlbWVudChsLGEpe3JldHVybiBhP3RoaXMuZG9jLmNyZWF0ZUVsZW1lbnROUyhzWlthXXx8YSxsKTp0aGlzLmRvYy5jcmVhdGVFbGVtZW50KGwpfWNyZWF0ZUNvbW1lbnQobCl7cmV0dXJuIHRoaXMuZG9jLmNyZWF0ZUNvbW1lbnQobCl9Y3JlYXRlVGV4dChsKXtyZXR1cm4g'@;
put 'dGhpcy5kb2MuY3JlYXRlVGV4dE5vZGUobCl9YXBwZW5kQ2hpbGQobCxhKXsoX29lKGwpP2wuY29udGVudDpsKS5hcHBlbmRDaGlsZChhKX1pbnNlcnRCZWZvcmUobCxhLGQpe2wmJihfb2UobCk/bC5jb250ZW50OmwpLmluc2VydEJlZm9yZShhLGQpfXJlbW92ZUNoaWxkKGwsYSl7bCYmbC5y'@;
put 'ZW1vdmVDaGlsZChhKX1zZWxlY3RSb290RWxlbWVudChsLGEpe2xldCBkPSJzdHJpbmciPT10eXBlb2YgbD90aGlzLmRvYy5xdWVyeVNlbGVjdG9yKGwpOmw7aWYoIWQpdGhyb3cgbmV3IFFuKC01MTA0LCExKTtyZXR1cm4gYXx8KGQudGV4dENvbnRlbnQ9IiIpLGR9cGFyZW50Tm9kZShsKXty'@;
put 'ZXR1cm4gbC5wYXJlbnROb2RlfW5leHRTaWJsaW5nKGwpe3JldHVybiBsLm5leHRTaWJsaW5nfXNldEF0dHJpYnV0ZShsLGEsZCxoKXtpZihoKXthPWgrIjoiK2E7Y29uc3QgZj1zWltoXTtmP2wuc2V0QXR0cmlidXRlTlMoZixhLGQpOmwuc2V0QXR0cmlidXRlKGEsZCl9ZWxzZSBsLnNldEF0'@;
put 'dHJpYnV0ZShhLGQpfXJlbW92ZUF0dHJpYnV0ZShsLGEsZCl7aWYoZCl7Y29uc3QgaD1zWltkXTtoP2wucmVtb3ZlQXR0cmlidXRlTlMoaCxhKTpsLnJlbW92ZUF0dHJpYnV0ZShgJHtkfToke2F9YCl9ZWxzZSBsLnJlbW92ZUF0dHJpYnV0ZShhKX1hZGRDbGFzcyhsLGEpe2wuY2xhc3NMaXN0'@;
put 'LmFkZChhKX1yZW1vdmVDbGFzcyhsLGEpe2wuY2xhc3NMaXN0LnJlbW92ZShhKX1zZXRTdHlsZShsLGEsZCxoKXtoJihLMy5EYXNoQ2FzZXxLMy5JbXBvcnRhbnQpP2wuc3R5bGUuc2V0UHJvcGVydHkoYSxkLGgmSzMuSW1wb3J0YW50PyJpbXBvcnRhbnQiOiIiKTpsLnN0eWxlW2FdPWR9cmVt'@;
put 'b3ZlU3R5bGUobCxhLGQpe2QmSzMuRGFzaENhc2U/bC5zdHlsZS5yZW1vdmVQcm9wZXJ0eShhKTpsLnN0eWxlW2FdPSIifXNldFByb3BlcnR5KGwsYSxkKXtudWxsIT1sJiYobFthXT1kKX1zZXRWYWx1ZShsLGEpe2wubm9kZVZhbHVlPWF9bGlzdGVuKGwsYSxkKXtpZigic3RyaW5nIj09dHlw'@;
put 'ZW9mIGwmJiEobD10bSgpLmdldEdsb2JhbEV2ZW50VGFyZ2V0KHRoaXMuZG9jLGwpKSl0aHJvdyBuZXcgRXJyb3IoYFVuc3VwcG9ydGVkIGV2ZW50IHRhcmdldCAke2x9IGZvciBldmVudCAke2F9YCk7cmV0dXJuIHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIobCxhLHRoaXMu'@;
put 'ZGVjb3JhdGVQcmV2ZW50RGVmYXVsdChkKSl9ZGVjb3JhdGVQcmV2ZW50RGVmYXVsdChsKXtyZXR1cm4gYT0+e2lmKCJfX25nVW53cmFwX18iPT09YSlyZXR1cm4gbDshMT09PSh0aGlzLnBsYXRmb3JtSXNTZXJ2ZXI/dGhpcy5uZ1pvbmUucnVuR3VhcmRlZCgoKT0+bChhKSk6bChhKSkmJmEu'@;
put 'cHJldmVudERlZmF1bHQoKX19fWZ1bmN0aW9uIF9vZShjKXtyZXR1cm4iVEVNUExBVEUiPT09Yy50YWdOYW1lJiZ2b2lkIDAhPT1jLmNvbnRlbnR9Y2xhc3Mgd0NlIGV4dGVuZHMgdVp7Y29uc3RydWN0b3IobCxhLGQsaCxmLHYsTSxEKXtzdXBlcihsLGYsdixEKSx0aGlzLnNoYXJlZFN0eWxl'@;
put 'c0hvc3Q9YSx0aGlzLmhvc3RFbD1kLHRoaXMuc2hhZG93Um9vdD1kLmF0dGFjaFNoYWRvdyh7bW9kZToib3BlbiJ9KSx0aGlzLnNoYXJlZFN0eWxlc0hvc3QuYWRkSG9zdCh0aGlzLnNoYWRvd1Jvb3QpO2NvbnN0IFo9eW9lKGguaWQsaC5zdHlsZXMpO2Zvcihjb25zdCByZSBvZiBaKXtjb25z'@;
put 'dCBjZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzdHlsZSIpO00mJmNlLnNldEF0dHJpYnV0ZSgibm9uY2UiLE0pLGNlLnRleHRDb250ZW50PXJlLHRoaXMuc2hhZG93Um9vdC5hcHBlbmRDaGlsZChjZSl9fW5vZGVPclNoYWRvd1Jvb3QobCl7cmV0dXJuIGw9PT10aGlzLmhvc3RFbD90aGlz'@;
put 'LnNoYWRvd1Jvb3Q6bH1hcHBlbmRDaGlsZChsLGEpe3JldHVybiBzdXBlci5hcHBlbmRDaGlsZCh0aGlzLm5vZGVPclNoYWRvd1Jvb3QobCksYSl9aW5zZXJ0QmVmb3JlKGwsYSxkKXtyZXR1cm4gc3VwZXIuaW5zZXJ0QmVmb3JlKHRoaXMubm9kZU9yU2hhZG93Um9vdChsKSxhLGQpfXJlbW92'@;
put 'ZUNoaWxkKGwsYSl7cmV0dXJuIHN1cGVyLnJlbW92ZUNoaWxkKHRoaXMubm9kZU9yU2hhZG93Um9vdChsKSxhKX1wYXJlbnROb2RlKGwpe3JldHVybiB0aGlzLm5vZGVPclNoYWRvd1Jvb3Qoc3VwZXIucGFyZW50Tm9kZSh0aGlzLm5vZGVPclNoYWRvd1Jvb3QobCkpKX1kZXN0cm95KCl7dGhp'@;
put 'cy5zaGFyZWRTdHlsZXNIb3N0LnJlbW92ZUhvc3QodGhpcy5zaGFkb3dSb290KX19Y2xhc3MgZFogZXh0ZW5kcyB1Wntjb25zdHJ1Y3RvcihsLGEsZCxoLGYsdixNLEQpe3N1cGVyKGwsZix2LE0pLHRoaXMuc2hhcmVkU3R5bGVzSG9zdD1hLHRoaXMucmVtb3ZlU3R5bGVzT25Db21wRGVzdHJv'@;
put 'eT1oLHRoaXMuc3R5bGVzPUQ/eW9lKEQsZC5zdHlsZXMpOmQuc3R5bGVzfWFwcGx5U3R5bGVzKCl7dGhpcy5zaGFyZWRTdHlsZXNIb3N0LmFkZFN0eWxlcyh0aGlzLnN0eWxlcyl9ZGVzdHJveSgpe3RoaXMucmVtb3ZlU3R5bGVzT25Db21wRGVzdHJveSYmdGhpcy5zaGFyZWRTdHlsZXNIb3N0'@;
put 'LnJlbW92ZVN0eWxlcyh0aGlzLnN0eWxlcyl9fWNsYXNzIHdvZSBleHRlbmRzIGRae2NvbnN0cnVjdG9yKGwsYSxkLGgsZix2LE0sRCl7Y29uc3QgWj1oKyItIitkLmlkO3N1cGVyKGwsYSxkLGYsdixNLEQsWiksdGhpcy5jb250ZW50QXR0cj1mdW5jdGlvbiBiQ2UoYyl7cmV0dXJuIl9uZ2Nv'@;
put 'bnRlbnQtJUNPTVAlIi5yZXBsYWNlKGxaLGMpfShaKSx0aGlzLmhvc3RBdHRyPWZ1bmN0aW9uIHlDZShjKXtyZXR1cm4iX25naG9zdC0lQ09NUCUiLnJlcGxhY2UobFosYyl9KFopfWFwcGx5VG9Ib3N0KGwpe3RoaXMuYXBwbHlTdHlsZXMoKSx0aGlzLnNldEF0dHJpYnV0ZShsLHRoaXMuaG9z'@;
put 'dEF0dHIsIiIpfWNyZWF0ZUVsZW1lbnQobCxhKXtjb25zdCBkPXN1cGVyLmNyZWF0ZUVsZW1lbnQobCxhKTtyZXR1cm4gc3VwZXIuc2V0QXR0cmlidXRlKGQsdGhpcy5jb250ZW50QXR0ciwiIiksZH19bGV0IENDZT0oKCk9PntjbGFzcyBjIGV4dGVuZHMgbW9le2NvbnN0cnVjdG9yKGEpe3N1'@;
put 'cGVyKGEpfXN1cHBvcnRzKGEpe3JldHVybiEwfWFkZEV2ZW50TGlzdGVuZXIoYSxkLGgpe3JldHVybiBhLmFkZEV2ZW50TGlzdGVuZXIoZCxoLCExKSwoKT0+dGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKGEsZCxoKX1yZW1vdmVFdmVudExpc3RlbmVyKGEsZCxoKXtyZXR1cm4gYS5yZW1vdmVF'@;
put 'dmVudExpc3RlbmVyKGQsaCl9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoeHIodnMpKX19c3RhdGlje3RoaXMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSl9fXJldHVybiBjfSkoKTtjb25zdCBDb2U9WyJhbHQi'@;
put 'LCJjb250cm9sIiwibWV0YSIsInNoaWZ0Il0sU0NlPXsiXGIiOiJCYWNrc3BhY2UiLCJcdCI6IlRhYiIsIlx4N2YiOiJEZWxldGUiLCJceDFiIjoiRXNjYXBlIixEZWw6IkRlbGV0ZSIsRXNjOiJFc2NhcGUiLExlZnQ6IkFycm93TGVmdCIsUmlnaHQ6IkFycm93UmlnaHQiLFVwOiJBcnJvd1Vw'@;
put 'IixEb3duOiJBcnJvd0Rvd24iLE1lbnU6IkNvbnRleHRNZW51IixTY3JvbGw6IlNjcm9sbExvY2siLFdpbjoiT1MifSxNQ2U9e2FsdDpjPT5jLmFsdEtleSxjb250cm9sOmM9PmMuY3RybEtleSxtZXRhOmM9PmMubWV0YUtleSxzaGlmdDpjPT5jLnNoaWZ0S2V5fTtsZXQgeENlPSgoKT0+e2Ns'@;
put 'YXNzIGMgZXh0ZW5kcyBtb2V7Y29uc3RydWN0b3IoYSl7c3VwZXIoYSl9c3VwcG9ydHMoYSl7cmV0dXJuIG51bGwhPWMucGFyc2VFdmVudE5hbWUoYSl9YWRkRXZlbnRMaXN0ZW5lcihhLGQsaCl7Y29uc3QgZj1jLnBhcnNlRXZlbnROYW1lKGQpLHY9Yy5ldmVudENhbGxiYWNrKGYuZnVsbEtl'@;
put 'eSxoLHRoaXMubWFuYWdlci5nZXRab25lKCkpO3JldHVybiB0aGlzLm1hbmFnZXIuZ2V0Wm9uZSgpLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT50bSgpLm9uQW5kQ2FuY2VsKGEsZi5kb21FdmVudE5hbWUsdikpfXN0YXRpYyBwYXJzZUV2ZW50TmFtZShhKXtjb25zdCBkPWEudG9Mb3dlckNhc2Uo'@;
put 'KS5zcGxpdCgiLiIpLGg9ZC5zaGlmdCgpO2lmKDA9PT1kLmxlbmd0aHx8ImtleWRvd24iIT09aCYmImtleXVwIiE9PWgpcmV0dXJuIG51bGw7Y29uc3QgZj1jLl9ub3JtYWxpemVLZXkoZC5wb3AoKSk7bGV0IHY9IiIsTT1kLmluZGV4T2YoImNvZGUiKTtpZihNPi0xJiYoZC5zcGxpY2UoTSwx'@;
put 'KSx2PSJjb2RlLiIpLENvZS5mb3JFYWNoKFo9Pntjb25zdCByZT1kLmluZGV4T2YoWik7cmU+LTEmJihkLnNwbGljZShyZSwxKSx2Kz1aKyIuIil9KSx2Kz1mLDAhPWQubGVuZ3RofHwwPT09Zi5sZW5ndGgpcmV0dXJuIG51bGw7Y29uc3QgRD17fTtyZXR1cm4gRC5kb21FdmVudE5hbWU9aCxE'@;
put 'LmZ1bGxLZXk9dixEfXN0YXRpYyBtYXRjaEV2ZW50RnVsbEtleUNvZGUoYSxkKXtsZXQgaD1TQ2VbYS5rZXldfHxhLmtleSxmPSIiO3JldHVybiBkLmluZGV4T2YoImNvZGUuIik+LTEmJihoPWEuY29kZSxmPSJjb2RlLiIpLCEobnVsbD09aHx8IWgpJiYoaD1oLnRvTG93ZXJDYXNlKCksIiAi'@;
put 'PT09aD9oPSJzcGFjZSI6Ii4iPT09aCYmKGg9ImRvdCIpLENvZS5mb3JFYWNoKHY9Pnt2IT09aCYmKDAsTUNlW3ZdKShhKSYmKGYrPXYrIi4iKX0pLGYrPWgsZj09PWQpfXN0YXRpYyBldmVudENhbGxiYWNrKGEsZCxoKXtyZXR1cm4gZj0+e2MubWF0Y2hFdmVudEZ1bGxLZXlDb2RlKGYsYSkm'@;
put 'JmgucnVuR3VhcmRlZCgoKT0+ZChmKSl9fXN0YXRpYyBfbm9ybWFsaXplS2V5KGEpe3JldHVybiJlc2MiPT09YT8iZXNjYXBlIjphfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKHhyKHZzKSl9fXN0YXRpY3t0aGlzLlx1MDI3NXByb3Y9YW4oe3Rv'@;
put 'a2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pfX1yZXR1cm4gY30pKCk7Y29uc3QgTW9lPVt7cHJvdmlkZTppbyx1c2VWYWx1ZToiYnJvd3NlciJ9LHtwcm92aWRlOlBrLHVzZVZhbHVlOmZ1bmN0aW9uIEVDZSgpe2laLm1ha2VDdXJyZW50KCl9LG11bHRpOiEwfSx7cHJvdmlkZTp2cyx1c2VG'@;
put 'YWN0b3J5OmZ1bmN0aW9uIEFDZSgpe3JldHVybiBmdW5jdGlvbiBvQihjKXtUQz1jfShkb2N1bWVudCksZG9jdW1lbnR9LGRlcHM6W119XSxrQ2U9dGFlKER5ZSwiYnJvd3NlciIsTW9lKSxEQ2U9bmV3IFN0KCIiKSx4b2U9W3twcm92aWRlOnRSLHVzZUNsYXNzOmNsYXNzIGhDZXthZGRUb1dp'@;
put 'bmRvdyhsKXtWdC5nZXRBbmd1bGFyVGVzdGFiaWxpdHk9KGQsaD0hMCk9Pntjb25zdCBmPWwuZmluZFRlc3RhYmlsaXR5SW5UcmVlKGQsaCk7aWYobnVsbD09Zil0aHJvdyBuZXcgUW4oNTEwMywhMSk7cmV0dXJuIGZ9LFZ0LmdldEFsbEFuZ3VsYXJUZXN0YWJpbGl0aWVzPSgpPT5sLmdldEFs'@;
put 'bFRlc3RhYmlsaXRpZXMoKSxWdC5nZXRBbGxBbmd1bGFyUm9vdEVsZW1lbnRzPSgpPT5sLmdldEFsbFJvb3RFbGVtZW50cygpLFZ0LmZyYW1ld29ya1N0YWJpbGl6ZXJzfHwoVnQuZnJhbWV3b3JrU3RhYmlsaXplcnM9W10pLFZ0LmZyYW1ld29ya1N0YWJpbGl6ZXJzLnB1c2goZD0+e2NvbnN0'@;
put 'IGg9VnQuZ2V0QWxsQW5ndWxhclRlc3RhYmlsaXRpZXMoKTtsZXQgZj1oLmxlbmd0aDtjb25zdCB2PWZ1bmN0aW9uKCl7Zi0tLDA9PWYmJmQoKX07aC5mb3JFYWNoKE09PntNLndoZW5TdGFibGUodil9KX0pfWZpbmRUZXN0YWJpbGl0eUluVHJlZShsLGEsZCl7cmV0dXJuIG51bGw9PWE/bnVs'@;
put 'bDpsLmdldFRlc3RhYmlsaXR5KGEpPz8oZD90bSgpLmlzU2hhZG93Um9vdChhKT90aGlzLmZpbmRUZXN0YWJpbGl0eUluVHJlZShsLGEuaG9zdCwhMCk6dGhpcy5maW5kVGVzdGFiaWxpdHlJblRyZWUobCxhLnBhcmVudEVsZW1lbnQsITApOm51bGwpfX0sZGVwczpbXX0se3Byb3ZpZGU6Wmll'@;
put 'LHVzZUNsYXNzOk1VLGRlcHM6W1dhLHhVLHRSXX0se3Byb3ZpZGU6TVUsdXNlQ2xhc3M6TVUsZGVwczpbV2EseFUsdFJdfV0sRW9lPVt7cHJvdmlkZTpGNix1c2VWYWx1ZToicm9vdCJ9LHtwcm92aWRlOmcyLHVzZUZhY3Rvcnk6ZnVuY3Rpb24gVENlKCl7cmV0dXJuIG5ldyBnMn0sZGVwczpb'@;
put 'XX0se3Byb3ZpZGU6YVosdXNlQ2xhc3M6Q0NlLG11bHRpOiEwLGRlcHM6W3ZzLFdhLGlvXX0se3Byb3ZpZGU6YVosdXNlQ2xhc3M6eENlLG11bHRpOiEwLGRlcHM6W3ZzXX0sY1osdm9lLGdvZSx7cHJvdmlkZTp4OCx1c2VFeGlzdGluZzpjWn0se3Byb3ZpZGU6b29lLHVzZUNsYXNzOmZDZSxk'@;
put 'ZXBzOltdfSxbXV07bGV0IFRvZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe31zdGF0aWMgd2l0aFNlcnZlclRyYW5zaXRpb24oYSl7cmV0dXJue25nTW9kdWxlOmMscHJvdmlkZXJzOlt7cHJvdmlkZTokdix1c2VWYWx1ZTphLmFwcElkfV19fXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1m'@;
put 'dW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKHhyKERDZSwxMikpfX1zdGF0aWN7dGhpcy5cdTAyNzVtb2Q9a2koe3R5cGU6Y30pfXN0YXRpY3t0aGlzLlx1MDI3NWluaj1Bcih7cHJvdmlkZXJzOlsuLi5Fb2UsLi4ueG9lXSxpbXBvcnRzOltSYSxJeWVdfSl9fXJldHVybiBjfSkoKSxJQ2U9'@;
put 'KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLl9kb2M9YX1nZXRUaXRsZSgpe3JldHVybiB0aGlzLl9kb2MudGl0bGV9c2V0VGl0bGUoYSl7dGhpcy5fZG9jLnRpdGxlPWF8fCIifXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKHhyKHZz'@;
put 'KSl9fXN0YXRpY3t0aGlzLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pfX1yZXR1cm4gY30pKCk7eSgzNzQ4MikseSg4MDY4NSk7Y29uc3QgaFo9e2ZpbHRlcjp7Y29sczpbXSx2YWxzOltdLGdyb3VwTG9naWM6IiIsd2hlcmVD'@;
put 'bGF1c2U6IiIsbGliZHM6IiIsY2xhdXNlczpbXSxxdWVyeTpbXX19LEtuPXtyb290UGFyYW06IiIsZGNMaWI6IiIseGxtYXBzOltdLGVkaXRvcjp7c3RhcnR1cFNldDohMSx0cmVlTm9kZUxpYnJhcmllczpbXSxsaWJzQW5kVGFibGVzOltdLGxpYnJhcmllczpbXSxsaWJyYXJ5OiIiLHRhYmxl'@;
put 'OiIiLGZpbHRlcjp7Y29sczpbXSx2YWxzOltdLGdyb3VwTG9naWM6IiIsd2hlcmVDbGF1c2U6IiIsbGliZHM6IiIsY2xhdXNlczpbXSxxdWVyeTpbXX19LHZpZXdlcjp7c3RhcnR1cFNldDohMSx0YWJsZXNTZXQ6ITEsbGlicmFyaWVzOltdLHRhYmxlczpudWxsLGxpYnJhcnk6IiIsdGFibGU6'@;
put 'IiIsbGliaW5mbzpbXSxsaWJyYXJpZXNTZWFyY2g6IiIsZmlsdGVyOntjb2xzOltdLHZhbHM6W10sZ3JvdXBMb2dpYzoiIix3aGVyZUNsYXVzZToiIixsaWJkczoiIixjbGF1c2VzOltdLHF1ZXJ5OltdfSxjdXJyZW50U2VsZWN0aW9uOiIifSx2aWV3Ym94ZXM6e30sbGluZWFnZTp7bGlicmFy'@;
put 'eUxpc3Q6W10sdGFibGVzTGlzdDpbXSxjb2x1bW5zTGlzdDpbXSxsaWJyYXJpZXNTZWFyY2g6IiIsbGliOiIiLHRhYmxlOiIiLGNvbHVtbjoiIixjdXJyZW50TGluZWFnZVBhdGhMaWJUYWJsZToiIixjdXJyZW50TGluZWFnZVBhdGhDb2x1bW46IiJ9LG1ldGFkYXRhOnttZXRhRGF0YUxpc3Q6'@;
put 'dm9pZCAwLG1ldGFEYXRhU2VhcmNoOiIiLG1ldGFPYmplY3RMaXN0OltdLG1ldGFPYmplY3RTZWFyY2g6IiIsbWV0YVJlcG9zaXRvcmllczp2b2lkIDAsc2VsZWN0ZWRSZXBvc2l0b3J5OiIifSx2aXlhQXBpOntjb2xsZWN0aW9uc0xpc3Q6dm9pZCAwLGNvbGxlY3Rpb25zU2VhcmNoOiIiLHNl'@;
put 'bGVjdGVkUmVwb3NpdG9yeToiIn0sdXNlcm5hdjp7dXNlckxpc3Q6dm9pZCAwLHVzZXJTZWFyY2g6IiIsZ3JvdXBMaXN0OnZvaWQgMCxncm91cFNlYXJjaDoiIixyb2xlTGlzdDp2b2lkIDAscm9sZVNlYXJjaDoiIn0sb3BlcmF0b3JzOntudW1PcGVyYXRvcnM6WyI9IiwiPCIsIj4iLCI8PSIs'@;
put 'Ij49IiwiQkVUV0VFTiIsIklOIiwiTk9UIElOIiwiTkUiXSxjaGFyT3BlcmF0b3JzOlsiPSIsIjwiLCI+IiwiPD0iLCI+PSIsIkNPTlRBSU5TIiwiSU4iLCJOT1QgSU4iLCJORSJdfSxoYW5kc29udGFibGU6e2RhcmtUYWJsZUhlYWRlckNsYXNzOiJkYXJrVEgifSx1c2VyRHJvcGRvd25Db25m'@;
put 'aWc6e2Nsb3NlT25EZWJ1Z0NsaWNrOiExfX07dmFyIE9vPXkoOTc1ODYpLElvZT15Lm4oT28pO2Z1bmN0aW9uIFJvZShjLGwpe3N3aXRjaChjKXtjYXNlIDA6cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGwuYXBwbHkodGhpcyxhcmd1bWVudHMpfTtjYXNlIDE6cmV0dXJuIGZ1bmN0aW9uKGEp'@;
put 'e3JldHVybiBsLmFwcGx5KHRoaXMsYXJndW1lbnRzKX07Y2FzZSAyOnJldHVybiBmdW5jdGlvbihhLGQpe3JldHVybiBsLmFwcGx5KHRoaXMsYXJndW1lbnRzKX07Y2FzZSAzOnJldHVybiBmdW5jdGlvbihhLGQsaCl7cmV0dXJuIGwuYXBwbHkodGhpcyxhcmd1bWVudHMpfTtjYXNlIDQ6cmV0'@;
put 'dXJuIGZ1bmN0aW9uKGEsZCxoLGYpe3JldHVybiBsLmFwcGx5KHRoaXMsYXJndW1lbnRzKX07Y2FzZSA1OnJldHVybiBmdW5jdGlvbihhLGQsaCxmLHYpe3JldHVybiBsLmFwcGx5KHRoaXMsYXJndW1lbnRzKX07Y2FzZSA2OnJldHVybiBmdW5jdGlvbihhLGQsaCxmLHYsTSl7cmV0dXJuIGwu'@;
put 'YXBwbHkodGhpcyxhcmd1bWVudHMpfTtjYXNlIDc6cmV0dXJuIGZ1bmN0aW9uKGEsZCxoLGYsdixNLEQpe3JldHVybiBsLmFwcGx5KHRoaXMsYXJndW1lbnRzKX07Y2FzZSA4OnJldHVybiBmdW5jdGlvbihhLGQsaCxmLHYsTSxELFope3JldHVybiBsLmFwcGx5KHRoaXMsYXJndW1lbnRzKX07'@;
put 'Y2FzZSA5OnJldHVybiBmdW5jdGlvbihhLGQsaCxmLHYsTSxELFoscmUpe3JldHVybiBsLmFwcGx5KHRoaXMsYXJndW1lbnRzKX07Y2FzZSAxMDpyZXR1cm4gZnVuY3Rpb24oYSxkLGgsZix2LE0sRCxaLHJlLGNlKXtyZXR1cm4gbC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9O2RlZmF1bHQ6dGhy'@;
put 'b3cgbmV3IEVycm9yKCJGaXJzdCBhcmd1bWVudCB0byBfYXJpdHkgbXVzdCBiZSBhIG5vbi1uZWdhdGl2ZSBpbnRlZ2VyIG5vIGdyZWF0ZXIgdGhhbiB0ZW4iKX19ZnVuY3Rpb24gbm0oYyl7cmV0dXJuIG51bGwhPWMmJiJvYmplY3QiPT10eXBlb2YgYyYmITA9PT1jWyJAQGZ1bmN0aW9uYWwv'@;
put 'cGxhY2Vob2xkZXIiXX1mdW5jdGlvbiBlZyhjKXtyZXR1cm4gZnVuY3Rpb24gbChhKXtyZXR1cm4gMD09PWFyZ3VtZW50cy5sZW5ndGh8fG5tKGEpP2w6Yy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fWZ1bmN0aW9uIEtiKGMpe3JldHVybiBmdW5jdGlvbiBsKGEsZCl7c3dpdGNoKGFyZ3VtZW50'@;
put 'cy5sZW5ndGgpe2Nhc2UgMDpyZXR1cm4gbDtjYXNlIDE6cmV0dXJuIG5tKGEpP2w6ZWcoZnVuY3Rpb24oaCl7cmV0dXJuIGMoYSxoKX0pO2RlZmF1bHQ6cmV0dXJuIG5tKGEpJiZubShkKT9sOm5tKGEpP2VnKGZ1bmN0aW9uKGgpe3JldHVybiBjKGgsZCl9KTpubShkKT9lZyhmdW5jdGlvbiho'@;
put 'KXtyZXR1cm4gYyhhLGgpfSk6YyhhLGQpfX19ZnVuY3Rpb24gTG9lKGMsbCxhKXtyZXR1cm4gZnVuY3Rpb24oKXtmb3IodmFyIGQ9W10saD0wLGY9Yyx2PTAsTT0hMTt2PGwubGVuZ3RofHxoPGFyZ3VtZW50cy5sZW5ndGg7KXt2YXIgRDt2PGwubGVuZ3RoJiYoIW5tKGxbdl0pfHxoPj1hcmd1'@;
put 'bWVudHMubGVuZ3RoKT9EPWxbdl06KEQ9YXJndW1lbnRzW2hdLGgrPTEpLGRbdl09RCxubShEKT9NPSEwOmYtPTEsdis9MX1yZXR1cm4hTSYmZjw9MD9hLmFwcGx5KHRoaXMsZCk6Um9lKE1hdGgubWF4KDAsZiksTG9lKGMsZCxhKSl9fWNvbnN0IE9vZT1LYihmdW5jdGlvbihsLGEpe3JldHVy'@;
put 'biAxPT09bD9lZyhhKTpSb2UobCxMb2UobCxbXSxhKSl9KSxQb2U9S2IoZnVuY3Rpb24obCxhKXtyZXR1cm4gYSBpbnN0YW5jZW9mIGx8fG51bGwhPWEmJihhLmNvbnN0cnVjdG9yPT09bHx8Ik9iamVjdCI9PT1sLm5hbWUmJiJvYmplY3QiPT10eXBlb2YgYSl9KTtmdW5jdGlvbiB4UihjLGwp'@;
put 'e3JldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobCxjKX12YXIgRm9lPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7Y29uc3QgSG9lPWZ1bmN0aW9uKCl7cmV0dXJuIltvYmplY3QgQXJndW1lbnRzXSI9PT1Gb2UuY2FsbChhcmd1bWVudHMpP2Z1bmN0aW9uKGwp'@;
put 'e3JldHVybiJbb2JqZWN0IEFyZ3VtZW50c10iPT09Rm9lLmNhbGwobCl9OmZ1bmN0aW9uKGwpe3JldHVybiB4UigiY2FsbGVlIixsKX19KCksTkNlPUFycmF5LmlzQXJyYXl8fGZ1bmN0aW9uKGwpe3JldHVybiBudWxsIT1sJiZsLmxlbmd0aD49MCYmIltvYmplY3QgQXJyYXldIj09PU9iamVj'@;
put 'dC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChsKX07ZnVuY3Rpb24gTm9lKGMpe3JldHVybiJbb2JqZWN0IFN0cmluZ10iPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGMpfXZhciBqQ2U9ZWcoZnVuY3Rpb24obCl7cmV0dXJuIG51bGwhPWwmJiJmdW5jdGlvbiI9PXR5cGVvZiBs'@;
put 'WyJmYW50YXN5LWxhbmQvZW1wdHkiXT9sWyJmYW50YXN5LWxhbmQvZW1wdHkiXSgpOm51bGwhPWwmJm51bGwhPWwuY29uc3RydWN0b3ImJiJmdW5jdGlvbiI9PXR5cGVvZiBsLmNvbnN0cnVjdG9yWyJmYW50YXN5LWxhbmQvZW1wdHkiXT9sLmNvbnN0cnVjdG9yWyJmYW50YXN5LWxhbmQvZW1w'@;
put 'dHkiXSgpOm51bGwhPWwmJiJmdW5jdGlvbiI9PXR5cGVvZiBsLmVtcHR5P2wuZW1wdHkoKTpudWxsIT1sJiZudWxsIT1sLmNvbnN0cnVjdG9yJiYiZnVuY3Rpb24iPT10eXBlb2YgbC5jb25zdHJ1Y3Rvci5lbXB0eT9sLmNvbnN0cnVjdG9yLmVtcHR5KCk6TkNlKGwpP1tdOk5vZShsKT8iIjpm'@;
put 'dW5jdGlvbiBWQ2UoYyl7cmV0dXJuIltvYmplY3QgT2JqZWN0XSI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYyl9KGwpP3t9OkhvZShsKT9mdW5jdGlvbigpe3JldHVybiBhcmd1bWVudHN9KCk6ZnVuY3Rpb24gQkNlKGMpe3ZhciBsPU9iamVjdC5wcm90b3R5cGUudG9TdHJp'@;
put 'bmcuY2FsbChjKTtyZXR1cm4iW29iamVjdCBVaW50OENsYW1wZWRBcnJheV0iPT09bHx8IltvYmplY3QgSW50OEFycmF5XSI9PT1sfHwiW29iamVjdCBVaW50OEFycmF5XSI9PT1sfHwiW29iamVjdCBJbnQxNkFycmF5XSI9PT1sfHwiW29iamVjdCBVaW50MTZBcnJheV0iPT09bHx8IltvYmpl'@;
put 'Y3QgSW50MzJBcnJheV0iPT09bHx8IltvYmplY3QgVWludDMyQXJyYXldIj09PWx8fCJbb2JqZWN0IEZsb2F0MzJBcnJheV0iPT09bHx8IltvYmplY3QgRmxvYXQ2NEFycmF5XSI9PT1sfHwiW29iamVjdCBCaWdJbnQ2NEFycmF5XSI9PT1sfHwiW29iamVjdCBCaWdVaW50NjRBcnJheV0iPT09'@;
put 'bH0obCk/bC5jb25zdHJ1Y3Rvci5mcm9tKCIiKTp2b2lkIDB9KTtjb25zdCB6Q2U9akNlO2Z1bmN0aW9uIFZvZShjKXtmb3IodmFyIGEsbD1bXTshKGE9Yy5uZXh0KCkpLmRvbmU7KWwucHVzaChhLnZhbHVlKTtyZXR1cm4gbH1mdW5jdGlvbiBCb2UoYyxsLGEpe2Zvcih2YXIgZD0wLGg9YS5s'@;
put 'ZW5ndGg7ZDxoOyl7aWYoYyhsLGFbZF0pKXJldHVybiEwO2QrPTF9cmV0dXJuITF9Y29uc3QgZlo9ImZ1bmN0aW9uIj09dHlwZW9mIE9iamVjdC5pcz9PYmplY3QuaXM6ZnVuY3Rpb24gWkNlKGMsbCl7cmV0dXJuIGM9PT1sPzAhPT1jfHwxL2M9PTEvbDpjIT1jJiZsIT1sfTt2YXIgV0NlPSF7'@;
put 'dG9TdHJpbmc6bnVsbH0ucHJvcGVydHlJc0VudW1lcmFibGUoInRvU3RyaW5nIiksam9lPVsiY29uc3RydWN0b3IiLCJ2YWx1ZU9mIiwiaXNQcm90b3R5cGVPZiIsInRvU3RyaW5nIiwicHJvcGVydHlJc0VudW1lcmFibGUiLCJoYXNPd25Qcm9wZXJ0eSIsInRvTG9jYWxlU3RyaW5nIl0sem9l'@;
put 'PWZ1bmN0aW9uKCl7cmV0dXJuIGFyZ3VtZW50cy5wcm9wZXJ0eUlzRW51bWVyYWJsZSgibGVuZ3RoIil9KCksWUNlPWZ1bmN0aW9uKGwsYSl7Zm9yKHZhciBkPTA7ZDxsLmxlbmd0aDspe2lmKGxbZF09PT1hKXJldHVybiEwO2QrPTF9cmV0dXJuITF9O2NvbnN0IFVvZT1lZygiZnVuY3Rpb24i'@;
put 'IT10eXBlb2YgT2JqZWN0LmtleXN8fHpvZT9mdW5jdGlvbihsKXtpZihPYmplY3QobCkhPT1sKXJldHVybltdO3ZhciBhLGQsaD1bXSxmPXpvZSYmSG9lKGwpO2ZvcihhIGluIGwpeFIoYSxsKSYmKCFmfHwibGVuZ3RoIiE9PWEpJiYoaFtoLmxlbmd0aF09YSk7aWYoV0NlKWZvcihkPWpvZS5s'@;
put 'ZW5ndGgtMTtkPj0wOyl4UihhPWpvZVtkXSxsKSYmIVlDZShoLGEpJiYoaFtoLmxlbmd0aF09YSksZC09MTtyZXR1cm4gaH06ZnVuY3Rpb24obCl7cmV0dXJuIE9iamVjdChsKSE9PWw/W106T2JqZWN0LmtleXMobCl9KSxab2U9ZWcoZnVuY3Rpb24obCl7cmV0dXJuIG51bGw9PT1sPyJOdWxs'@;
put 'Ijp2b2lkIDA9PT1sPyJVbmRlZmluZWQiOk9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChsKS5zbGljZSg4LC0xKX0pO2Z1bmN0aW9uIFdvZShjLGwsYSxkKXt2YXIgaD1Wb2UoYyk7ZnVuY3Rpb24gdihNLEQpe3JldHVybiBwWihNLEQsYS5zbGljZSgpLGQuc2xpY2UoKSl9cmV0dXJu'@;
put 'IUJvZShmdW5jdGlvbihNLEQpe3JldHVybiFCb2UodixELE0pfSxWb2UobCksaCl9ZnVuY3Rpb24gcFooYyxsLGEsZCl7aWYoZlooYyxsKSlyZXR1cm4hMDt2YXIgaD1ab2UoYyk7aWYoaCE9PVpvZShsKSlyZXR1cm4hMTtpZigiZnVuY3Rpb24iPT10eXBlb2YgY1siZmFudGFzeS1sYW5kL2Vx'@;
put 'dWFscyJdfHwiZnVuY3Rpb24iPT10eXBlb2YgbFsiZmFudGFzeS1sYW5kL2VxdWFscyJdKXJldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBjWyJmYW50YXN5LWxhbmQvZXF1YWxzIl0mJmNbImZhbnRhc3ktbGFuZC9lcXVhbHMiXShsKSYmImZ1bmN0aW9uIj09dHlwZW9mIGxbImZhbnRhc3ktbGFu'@;
put 'ZC9lcXVhbHMiXSYmbFsiZmFudGFzeS1sYW5kL2VxdWFscyJdKGMpO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjLmVxdWFsc3x8ImZ1bmN0aW9uIj09dHlwZW9mIGwuZXF1YWxzKXJldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBjLmVxdWFscyYmYy5lcXVhbHMobCkmJiJmdW5jdGlvbiI9PXR5cGVv'@;
put 'ZiBsLmVxdWFscyYmbC5lcXVhbHMoYyk7c3dpdGNoKGgpe2Nhc2UiQXJndW1lbnRzIjpjYXNlIkFycmF5IjpjYXNlIk9iamVjdCI6aWYoImZ1bmN0aW9uIj09dHlwZW9mIGMuY29uc3RydWN0b3ImJiJQcm9taXNlIj09PWZ1bmN0aW9uIFVDZShjKXt2YXIgbD1TdHJpbmcoYykubWF0Y2goL15m'@;
put 'dW5jdGlvbiAoXHcqKS8pO3JldHVybiBudWxsPT1sPyIiOmxbMV19KGMuY29uc3RydWN0b3IpKXJldHVybiBjPT09bDticmVhaztjYXNlIkJvb2xlYW4iOmNhc2UiTnVtYmVyIjpjYXNlIlN0cmluZyI6aWYodHlwZW9mIGMhPXR5cGVvZiBsfHwhZlooYy52YWx1ZU9mKCksbC52YWx1ZU9mKCkp'@;
put 'KXJldHVybiExO2JyZWFrO2Nhc2UiRGF0ZSI6aWYoIWZaKGMudmFsdWVPZigpLGwudmFsdWVPZigpKSlyZXR1cm4hMTticmVhaztjYXNlIkVycm9yIjpyZXR1cm4gYy5uYW1lPT09bC5uYW1lJiZjLm1lc3NhZ2U9PT1sLm1lc3NhZ2U7Y2FzZSJSZWdFeHAiOmlmKGMuc291cmNlIT09bC5zb3Vy'@;
put 'Y2V8fGMuZ2xvYmFsIT09bC5nbG9iYWx8fGMuaWdub3JlQ2FzZSE9PWwuaWdub3JlQ2FzZXx8Yy5tdWx0aWxpbmUhPT1sLm11bHRpbGluZXx8Yy5zdGlja3khPT1sLnN0aWNreXx8Yy51bmljb2RlIT09bC51bmljb2RlKXJldHVybiExfWZvcih2YXIgZj1hLmxlbmd0aC0xO2Y+PTA7KXtpZihh'@;
put 'W2ZdPT09YylyZXR1cm4gZFtmXT09PWw7Zi09MX1zd2l0Y2goaCl7Y2FzZSJNYXAiOnJldHVybiBjLnNpemU9PT1sLnNpemUmJldvZShjLmVudHJpZXMoKSxsLmVudHJpZXMoKSxhLmNvbmNhdChbY10pLGQuY29uY2F0KFtsXSkpO2Nhc2UiU2V0IjpyZXR1cm4gYy5zaXplPT09bC5zaXplJiZX'@;
put 'b2UoYy52YWx1ZXMoKSxsLnZhbHVlcygpLGEuY29uY2F0KFtjXSksZC5jb25jYXQoW2xdKSk7Y2FzZSJBcmd1bWVudHMiOmNhc2UiQXJyYXkiOmNhc2UiT2JqZWN0IjpjYXNlIkJvb2xlYW4iOmNhc2UiTnVtYmVyIjpjYXNlIlN0cmluZyI6Y2FzZSJEYXRlIjpjYXNlIkVycm9yIjpjYXNlIlJl'@;
put 'Z0V4cCI6Y2FzZSJJbnQ4QXJyYXkiOmNhc2UiVWludDhBcnJheSI6Y2FzZSJVaW50OENsYW1wZWRBcnJheSI6Y2FzZSJJbnQxNkFycmF5IjpjYXNlIlVpbnQxNkFycmF5IjpjYXNlIkludDMyQXJyYXkiOmNhc2UiVWludDMyQXJyYXkiOmNhc2UiRmxvYXQzMkFycmF5IjpjYXNlIkZsb2F0NjRB'@;
put 'cnJheSI6Y2FzZSJBcnJheUJ1ZmZlciI6YnJlYWs7ZGVmYXVsdDpyZXR1cm4hMX12YXIgdj1Vb2UoYyk7aWYodi5sZW5ndGghPT1Vb2UobCkubGVuZ3RoKXJldHVybiExO3ZhciBNPWEuY29uY2F0KFtjXSksRD1kLmNvbmNhdChbbF0pO2ZvcihmPXYubGVuZ3RoLTE7Zj49MDspe3ZhciBaPXZb'@;
put 'Zl07aWYoIXhSKFosbCl8fCFwWihsW1pdLGNbWl0sTSxEKSlyZXR1cm4hMTtmLT0xfXJldHVybiEwfWNvbnN0IHFDZT1LYihmdW5jdGlvbihsLGEpe3JldHVybiBwWihsLGEsW10sW10pfSksWW9lPWVnKGZ1bmN0aW9uKGwpe3JldHVybiBudWxsIT1sJiZxQ2UobCx6Q2UobCkpfSk7ZnVuY3Rp'@;
put 'b24gSU0oYyl7cmV0dXJuIG51bGw9PWN9ZnVuY3Rpb24gUk0oYyl7cmV0dXJuIElNKGMpfHxZb2UoYyl9ZnVuY3Rpb24gZ1ooYyl7cmV0dXJuIFBvZShTdHJpbmcsYyl9ZnVuY3Rpb24gS29lKGMsbCl7cmV0dXJuIGMhPT1sfWZ1bmN0aW9uIFFvZShjPXdpbmRvdyl7cmV0dXJuIUlNKGMpfWNv'@;
put 'bnN0IG9TZT1OdW1iZXIuaXNJbnRlZ2VyfHxmdW5jdGlvbihsKXtyZXR1cm4oMHxsKT09PWx9LGxTZT1LYihmdW5jdGlvbihsLGEpe3ZhciBkPWw8MD9hLmxlbmd0aCtsOmw7cmV0dXJuIE5vZShhKT9hLmNoYXJBdChkKTphW2RdfSksdVNlPUtiKGZ1bmN0aW9uKGwsYSl7cmV0dXJuIGwubWFw'@;
put 'KGZ1bmN0aW9uKGQpe2Zvcih2YXIgdixoPWEsZj0wO2Y8ZC5sZW5ndGg7KXtpZihudWxsPT1oKXJldHVybjtoPW9TZSh2PWRbZl0pP2xTZSh2LGgpOmhbdl0sZis9MX1yZXR1cm4gaH0pfSksaFNlPUtiKGZ1bmN0aW9uKGwsYSl7cmV0dXJuIHVTZShbbF0sYSlbMF19KSxwU2U9T29lKDIsKGMs'@;
put 'bCk9PnZvaWQgMCE9PWhTZShjLGwpKSxlc2U9cFNlKHsiQEBmdW5jdGlvbmFsL3BsYWNlaG9sZGVyIjohMH0sd2luZG93KTtsZXQgVFIsdHNlLG1aLHZaO2Z1bmN0aW9uIG5zZShjPSEwKXtpZighY3x8IVRSKXtjb25zdCBsPWRvY3VtZW50JiZkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCJbbmct'@;
put 'dmVyc2lvbl0iKTtUUj1sPyIiK2wuZ2V0QXR0cmlidXRlKCJuZy12ZXJzaW9uIik6dm9pZCAwfXJldHVybiBUUn1mdW5jdGlvbiBtU2UoYz0hMCl7cmV0dXJuIGMmJlRSfHwodHNlPXdpbmRvdz8uYW5ndWxhcj8udmVyc2lvbj8uZnVsbCksdHNlfWZ1bmN0aW9uIHJzZShjPSEwKXtyZXR1cm4g'@;
put 'YyYmbVp8fChtWj13aW5kb3c/LkNEUz8uX3JlYWN0Py52ZXJzaW9uP3dpbmRvdy5DRFMuX3JlYWN0LnZlcnNpb246ZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiW2RhdGEtcmVhY3Ryb290XSwgW2RhdGEtcmVhY3RpZF0iKT8idW5rbm93biB2ZXJzaW9uIjp2b2lkIDApLG1afWZ1bmN0aW9uIGlz'@;
put 'ZShjPSEwKXtpZighY3x8IXZaKXtjb25zdCBsPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoIioiKTtsZXQgYTtmb3IobGV0IGQ9MDtkPGwubGVuZ3RoO2QrKylpZihsW2RdLl9fdnVlX18pe2E9bFtkXTticmVha312Wj1hPyJ1bmtub3duIHZlcnNpb24iOnZvaWQgMH1yZXR1cm4gdlp9ZnVu'@;
put 'Y3Rpb24gVzgoYyl7cmV0dXJuIGMucmVwbGFjZSgvW0EtWl0vZyxsPT4iLSIrbC50b0xvd2VyQ2FzZSgpKX1mdW5jdGlvbiBzc2UoYyl7cmV0dXJuIGMuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkrYy5zbGljZSgxKX1jb25zdCBDU2U9bmV3IGNsYXNze2NvbnN0cnVjdG9yKCl7aWYodGhpcy5z'@;
put 'dXBwb3J0cz17anM6ITB9LCFkb2N1bWVudC5ib2R5Lmhhc0F0dHJpYnV0ZSgiY2RzLXN1cHBvcnRzIil8fCJuby1qcyI9PT1kb2N1bWVudC5ib2R5LmdldEF0dHJpYnV0ZSgiY2RzLXN1cHBvcnRzIikpe2NvbnN0IGM9VzgoT2JqZWN0LmtleXModGhpcy5zdXBwb3J0cykucmVkdWNlKChsLGEp'@;
put 'PT5gJHtsfSAke3RoaXMuc3VwcG9ydHNbYV0/YToibm8tIithfWAsIiIpKS50cmltKCk7ZG9jdW1lbnQuYm9keS5zZXRBdHRyaWJ1dGUoImNkcy1zdXBwb3J0cyIsYyl9fX07Y2xhc3MgTE17c3RhdGljIGxvZyguLi5sKXtfWigpJiZ5WigpJiZjb25zb2xlLmxvZyguLi5sKX1zdGF0aWMgd2Fy'@;
put 'biguLi5sKXtfWigpJiZ5WigpJiZjb25zb2xlLndhcm4oLi4ubCl9c3RhdGljIGVycm9yKC4uLmwpe19aKCkmJnlaKCkmJmNvbnNvbGUuZXJyb3IoLi4ubCl9fWZ1bmN0aW9uIHlaKCl7cmV0dXJuIWVzZShbImphc21pbmUiXSl9ZnVuY3Rpb24gX1ooKXtyZXR1cm4hd2luZG93LkNEUy5lbnZp'@;
put 'cm9ubWVudC5wcm9kdWN0aW9ufWZ1bmN0aW9uIHVzZSgpe1FvZSgpJiYod2luZG93LkNEUz13aW5kb3cuQ0RTfHx7X3ZlcnNpb246W10sX3JlYWN0Ont2ZXJzaW9uOnZvaWQgMH0sX3N1cHBvcnRzOkNTZS5zdXBwb3J0cyxfaXNTdGF0ZVByb3hpZWQ6ITEsX3N0YXRlOntmb2N1c1RyYXBJdGVt'@;
put 'czpbXSxsYXllckVsZW1lbnRzOltdLGkxOG5SZWdpc3RyeTp7fSxlbGVtZW50UmVnaXN0cnk6e30saWNvblJlZ2lzdHJ5Ont9LG1vdGlvblJlZ2lzdHJ5Ont9fSxlbnZpcm9ubWVudDp7cHJvZHVjdGlvbjohMX0sZ2V0RGV0YWlsczpkc2UsbG9nRGV0YWlsczpTU2V9LGZ1bmN0aW9uKCl7Y29u'@;
put 'c3QgYz0iNi4xNS4xIjt3aW5kb3cuQ0RTLl92ZXJzaW9uLmluZGV4T2YoYyk8MCYmKHdpbmRvdy5DRFMuX3ZlcnNpb24ucHVzaChjKSxkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCJib2R5Iik/LnNldEF0dHJpYnV0ZSgiY2RzLXZlcnNpb24iLHdpbmRvdy5DRFMuX3ZlcnNpb24uam9pbigiICIp'@;
put 'KSksd2luZG93LkNEUy5fdmVyc2lvbi5sZW5ndGg+MSYmTE0ud2FybigiUnVubmluZyBtb3JlIHRoYW4gb25lIHZlcnNpb24gb2YgQ2xhcml0eSBjYW4gY2F1c2UgdW5leHBlY3RlZCBpc3N1ZXMuIFBsZWFzZSBlbnN1cmUgb25seSBvbmUgdmVyc2lvbiBpcyBsb2FkZWQuIil9KCksd2luZG93'@;
put 'LkNEUy5faXNTdGF0ZVByb3hpZWR8fCh3aW5kb3cuQ0RTLl9pc1N0YXRlUHJveGllZD0hMCx3aW5kb3cuQ0RTLl9zdGF0ZT1uZXcgUHJveHkod2luZG93LkNEUy5fc3RhdGUse3NldDooYyxsLGEpPT57Y29uc3QgZD17a2V5OmwscHJldjp3aW5kb3cuQ0RTLl9zdGF0ZVtsXSxjdXJyZW50OmF9'@;
put 'O3JldHVybiBjW2xdPWEsZG9jdW1lbnQuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoIkNEU19TVEFURV9VUERBVEUiLHtkZXRhaWw6ZH0pKSwhMH19KSkpfWZ1bmN0aW9uIGRzZSgpe3JldHVybnt2ZXJzaW9uczp3aW5kb3cuQ0RTLl92ZXJzaW9uLGVudmlyb25tZW50OndpbmRvdy5D'@;
put 'RFMuZW52aXJvbm1lbnQsdXNlckFnZW50Om5hdmlnYXRvci51c2VyQWdlbnQsc3VwcG9ydHM6d2luZG93LkNEUy5fc3VwcG9ydHMsYW5ndWxhclZlcnNpb246bnNlKCExKSxhbmd1bGFySlNWZXJzaW9uOm1TZSghMSkscmVhY3RWZXJzaW9uOnJzZSghMSksdnVlVmVyc2lvbjppc2UoITEpLHN0'@;
put 'YXRlOnsuLi53aW5kb3cuQ0RTLl9zdGF0ZSxpY29uUmVnaXN0cnk6T2JqZWN0LmtleXMod2luZG93LkNEUy5fc3RhdGUuaWNvblJlZ2lzdHJ5KSxtb3Rpb25SZWdpc3RyeTpPYmplY3Qua2V5cyh3aW5kb3cuQ0RTLl9zdGF0ZS5tb3Rpb25SZWdpc3RyeSksZm9jdXNUcmFwUmVnaXN0cnk6T2Jq'@;
put 'ZWN0LmtleXMod2luZG93LkNEUy5fc3RhdGUuZm9jdXNUcmFwSXRlbXMubWFwKGM9PmMuZm9jdXNUcmFwSWQpKX19fWZ1bmN0aW9uIFNTZSgpe0xNLmxvZyhKU09OLnN0cmluZ2lmeShkc2UoKSxudWxsLDIpKX1jb25zdCBNU2U9T29lKDMsKGMsbCxhKT0+eyFmdW5jdGlvbiBnU2UoYyxsKXty'@;
put 'ZXR1cm4gbHx8KGw9d2luZG93JiZ3aW5kb3cuY3VzdG9tRWxlbWVudHMpLCFsfHwhIWwuZ2V0KGMpfShjKXx8ZnVuY3Rpb24gdlNlKCl7cmV0dXJuIHdpbmRvdz8ubG9jYXRpb24/LmhyZWY/LmluY2x1ZGVzKCJsb2NhbGhvc3Q6NjAwNiIpfSgpPyhhLmRlZmluZShjLGwpLHVzZSgpLHdpbmRv'@;
put 'dyYmIU9iamVjdC5rZXlzKHdpbmRvdy5DRFMuX3N0YXRlLmVsZW1lbnRSZWdpc3RyeSkuc29tZShkPT5kPT09YykmJih3aW5kb3cuQ0RTLl9zdGF0ZS5lbGVtZW50UmVnaXN0cnk9ey4uLndpbmRvdy5DRFMuX3N0YXRlLmVsZW1lbnRSZWdpc3RyeSxbY106e319KSk6TE0ud2FybihjKyIgaGFz'@;
put 'IGFscmVhZHkgYmVlbiByZWdpc3RlcmVkIil9KTtmdW5jdGlvbiBVZihjLGwsYSxkKXt2YXIgdixoPWFyZ3VtZW50cy5sZW5ndGgsZj1oPDM/bDpudWxsPT09ZD9kPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobCxhKTpkO2lmKCJvYmplY3QiPT10eXBlb2YgUmVmbGVjdCYmImZ1'@;
put 'bmN0aW9uIj09dHlwZW9mIFJlZmxlY3QuZGVjb3JhdGUpZj1SZWZsZWN0LmRlY29yYXRlKGMsbCxhLGQpO2Vsc2UgZm9yKHZhciBNPWMubGVuZ3RoLTE7TT49MDtNLS0pKHY9Y1tNXSkmJihmPShoPDM/dihmKTpoPjM/dihsLGEsZik6dihsLGEpKXx8Zik7cmV0dXJuIGg+MyYmZiYmT2JqZWN0'@;
put 'LmRlZmluZVByb3BlcnR5KGwsYSxmKSxmfWZ1bmN0aW9uIHJtKGMpe3JldHVybiB0aGlzIGluc3RhbmNlb2Ygcm0/KHRoaXMudj1jLHRoaXMpOm5ldyBybShjKX1mdW5jdGlvbiBnc2UoYyl7aWYoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKXRocm93IG5ldyBUeXBlRXJyb3IoIlN5bWJvbC5hc3lu'@;
put 'Y0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLiIpO3ZhciBhLGw9Y1tTeW1ib2wuYXN5bmNJdGVyYXRvcl07cmV0dXJuIGw/bC5jYWxsKGMpOihjPWZ1bmN0aW9uIE1aKGMpe3ZhciBsPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJlN5bWJvbC5pdGVyYXRvcixhPWwmJmNbbF0sZD0wO2lmKGEp'@;
put 'cmV0dXJuIGEuY2FsbChjKTtpZihjJiYibnVtYmVyIj09dHlwZW9mIGMubGVuZ3RoKXJldHVybntuZXh0OmZ1bmN0aW9uKCl7cmV0dXJuIGMmJmQ+PWMubGVuZ3RoJiYoYz12b2lkIDApLHt2YWx1ZTpjJiZjW2QrK10sZG9uZTohY319fTt0aHJvdyBuZXcgVHlwZUVycm9yKGw/Ik9iamVjdCBp'@;
put 'cyBub3QgaXRlcmFibGUuIjoiU3ltYm9sLml0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLiIpfShjKSxhPXt9LGQoIm5leHQiKSxkKCJ0aHJvdyIpLGQoInJldHVybiIpLGFbU3ltYm9sLmFzeW5jSXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LGEpO2Z1bmN0aW9uIGQoZil7YVtmXT1j'@;
put 'W2ZdJiZmdW5jdGlvbih2KXtyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oTSxEKXshZnVuY3Rpb24gaChmLHYsTSxEKXtQcm9taXNlLnJlc29sdmUoRCkudGhlbihmdW5jdGlvbihaKXtmKHt2YWx1ZTpaLGRvbmU6TX0pfSx2KX0oTSxELCh2PWNbZl0odikpLmRvbmUsdi52YWx1ZSl9KX19'@;
put 'fSJmdW5jdGlvbiI9PXR5cGVvZiBTdXBwcmVzc2VkRXJyb3ImJlN1cHByZXNzZWRFcnJvcjtsZXQgbXNlPSExO2Z1bmN0aW9uIFhTZShjKXtpZigoYz1NYXRoLnRydW5jKGMpfHwwKTwwJiYoYys9dGhpcy5sZW5ndGgpLCEoYzwwfHxjPj10aGlzLmxlbmd0aCkpcmV0dXJuIHRoaXNbY119aWYo'@;
put 'IW1zZSl7bXNlPSEwO2NvbnN0IGM9UmVmbGVjdC5nZXRQcm90b3R5cGVPZihJbnQ4QXJyYXkpO2Zvcihjb25zdCBsIG9mW0FycmF5LFN0cmluZyxjXSlPYmplY3QuZGVmaW5lUHJvcGVydHkobC5wcm90b3R5cGUsImF0Iix7dmFsdWU6WFNlLHdyaXRhYmxlOiEwLGVudW1lcmFibGU6ITEsY29u'@;
put 'ZmlndXJhYmxlOiEwfSl9bGV0IHZzZT0hMSxic2U9ITE7ZnVuY3Rpb24geXNlKGMsbCxhKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoYyxhLHtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5oYXNBdHRyaWJ1dGUobCk/dGhpcy5nZXRBdHRy'@;
put 'aWJ1dGUobCk6bnVsbH0sc2V0OmZ1bmN0aW9uKGQpe251bGwhPT1kP3RoaXMuc2V0QXR0cmlidXRlKGwsZCk6dGhpcy5yZW1vdmVBdHRyaWJ1dGUobCl9fSl9dnNlfHxFbGVtZW50LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSgicm9sZSIpfHwoeXNlKEVsZW1lbnQucHJvdG90eXBlLCJyb2xl'@;
put 'Iiwicm9sZSIpLHZzZT0hMCksYnNlfHxFbGVtZW50LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSgiYXJpYUxhYmVsIil8fChic2U9ITAsWyJBY3RpdmVEZXNjZW5kYW50IiwiQXRvbWljIiwiQXV0b0NvbXBsZXRlIiwiQnVzeSIsIkNoZWNrZWQiLCJDb2xDb3VudCIsIkNvbEluZGV4IiwiQ29s'@;
put 'U3BhbiIsIkNvbnRyb2xzIiwiQ3VycmVudCIsIkRlc2NyaWJlZEJ5IiwiRGV0YWlscyIsIkRpc2FibGVkIiwiRXJyb3JNZXNzYWdlIiwiRXhwYW5kZWQiLCJGbG93VG8iLCJIYXNQb3B1cCIsIkhpZGRlbiIsIkludmFsaWQiLCJLZXlTaG9ydGN1dHMiLCJMYWJlbCIsIkxhYmVsbGVkQnkiLCJM'@;
put 'ZXZlbCIsIkxpdmUiLCJNb2RhbCIsIk11bHRpTGluZSIsIk11bHRpU2VsZWN0YWJsZSIsIk9yaWVudGF0aW9uIiwiT3ducyIsIlBsYWNlaG9sZGVyIiwiUG9zSW5TZXQiLCJQcmVzc2VkIiwiUmVhZE9ubHkiLCJSZWxldmFudCIsIlJlcXVpcmVkIiwiUm9sZURlc2NyaXB0aW9uIiwiUm93Q291'@;
put 'bnQiLCJSb3dJbmRleCIsIlJvd1NwYW4iLCJTZWxlY3RlZCIsIlNldFNpemUiLCJTb3J0IiwiVmFsdWVNYXgiLCJWYWx1ZU1pbiIsIlZhbHVlTm93IiwiVmFsdWVUZXh0Il0uZm9yRWFjaChjPT55c2UoRWxlbWVudC5wcm90b3R5cGUsImFyaWEtIitjLnRvTG93ZXJDYXNlKCksImFyaWEiK2Mp'@;
put 'KSk7Y29uc3QgQVI9d2luZG93LEVaPUFSLlNoYWRvd1Jvb3QmJih2b2lkIDA9PT1BUi5TaGFkeUNTU3x8QVIuU2hhZHlDU1MubmF0aXZlU2hhZG93KSYmImFkb3B0ZWRTdHlsZVNoZWV0cyJpbiBEb2N1bWVudC5wcm90b3R5cGUmJiJyZXBsYWNlImluIENTU1N0eWxlU2hlZXQucHJvdG90eXBl'@;
put 'LFRaPVN5bWJvbCgpLF9zZT1uZXcgV2Vha01hcDtjbGFzcyB3c2V7Y29uc3RydWN0b3IobCxhLGQpe2lmKHRoaXMuXyRjc3NSZXN1bHQkPSEwLGQhPT1UWil0aHJvdyBFcnJvcigiQ1NTUmVzdWx0IGlzIG5vdCBjb25zdHJ1Y3RhYmxlLiBVc2UgYHVuc2FmZUNTU2Agb3IgYGNzc2AgaW5zdGVh'@;
put 'ZC4iKTt0aGlzLmNzc1RleHQ9bCx0aGlzLnQ9YX1nZXQgc3R5bGVTaGVldCgpe2xldCBsPXRoaXMubztjb25zdCBhPXRoaXMudDtpZihFWiYmdm9pZCAwPT09bCl7Y29uc3QgZD12b2lkIDAhPT1hJiYxPT09YS5sZW5ndGg7ZCYmKGw9X3NlLmdldChhKSksdm9pZCAwPT09bCYmKCh0aGlzLm89'@;
put 'bD1uZXcgQ1NTU3R5bGVTaGVldCkucmVwbGFjZVN5bmModGhpcy5jc3NUZXh0KSxkJiZfc2Uuc2V0KGEsbCkpfXJldHVybiBsfXRvU3RyaW5nKCl7cmV0dXJuIHRoaXMuY3NzVGV4dH19Y29uc3QgQ3NlPShjLC4uLmwpPT57Y29uc3QgYT0xPT09Yy5sZW5ndGg/Y1swXTpsLnJlZHVjZSgoZCxo'@;
put 'LGYpPT5kKyh2PT57aWYoITA9PT12Ll8kY3NzUmVzdWx0JClyZXR1cm4gdi5jc3NUZXh0O2lmKCJudW1iZXIiPT10eXBlb2YgdilyZXR1cm4gdjt0aHJvdyBFcnJvcigiVmFsdWUgcGFzc2VkIHRvICdjc3MnIGZ1bmN0aW9uIG11c3QgYmUgYSAnY3NzJyBmdW5jdGlvbiByZXN1bHQ6ICIrdisi'@;
put 'LiBVc2UgJ3Vuc2FmZUNTUycgdG8gcGFzcyBub24tbGl0ZXJhbCB2YWx1ZXMsIGJ1dCB0YWtlIGNhcmUgdG8gZW5zdXJlIHBhZ2Ugc2VjdXJpdHkuIil9KShoKStjW2YrMV0sY1swXSk7cmV0dXJuIG5ldyB3c2UoYSxjLFRaKX0sU3NlPUVaP2M9PmM6Yz0+YyBpbnN0YW5jZW9mIENTU1N0eWxl'@;
put 'U2hlZXQ/KGw9PntsZXQgYT0iIjtmb3IoY29uc3QgZCBvZiBsLmNzc1J1bGVzKWErPWQuY3NzVGV4dDtyZXR1cm4oYz0+bmV3IHdzZSgic3RyaW5nIj09dHlwZW9mIGM/YzpjKyIiLHZvaWQgMCxUWikpKGEpfSkoYyk6Yzt2YXIgQVo7Y29uc3Qga1I9d2luZG93LE1zZT1rUi50cnVzdGVkVHlw'@;
put 'ZXMsZU1lPU1zZT9Nc2UuZW1wdHlTY3JpcHQ6IiIseHNlPWtSLnJlYWN0aXZlRWxlbWVudFBvbHlmaWxsU3VwcG9ydCxrWj17dG9BdHRyaWJ1dGUoYyxsKXtzd2l0Y2gobCl7Y2FzZSBCb29sZWFuOmM9Yz9lTWU6bnVsbDticmVhaztjYXNlIE9iamVjdDpjYXNlIEFycmF5OmM9bnVsbD09Yz9j'@;
put 'OkpTT04uc3RyaW5naWZ5KGMpfXJldHVybiBjfSxmcm9tQXR0cmlidXRlKGMsbCl7bGV0IGE9Yztzd2l0Y2gobCl7Y2FzZSBCb29sZWFuOmE9bnVsbCE9PWM7YnJlYWs7Y2FzZSBOdW1iZXI6YT1udWxsPT09Yz9udWxsOk51bWJlcihjKTticmVhaztjYXNlIE9iamVjdDpjYXNlIEFycmF5OnRy'@;
put 'eXthPUpTT04ucGFyc2UoYyl9Y2F0Y2h7YT1udWxsfX1yZXR1cm4gYX19LEVzZT0oYyxsKT0+bCE9PWMmJihsPT1sfHxjPT1jKSxEWj17YXR0cmlidXRlOiEwLHR5cGU6U3RyaW5nLGNvbnZlcnRlcjprWixyZWZsZWN0OiExLGhhc0NoYW5nZWQ6RXNlfSxJWj0iZmluYWxpemVkIjtjbGFzcyBx'@;
put 'YiBleHRlbmRzIEhUTUxFbGVtZW50e2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLl8kRWk9bmV3IE1hcCx0aGlzLmlzVXBkYXRlUGVuZGluZz0hMSx0aGlzLmhhc1VwZGF0ZWQ9ITEsdGhpcy5fJEVsPW51bGwsdGhpcy5fJEV1KCl9c3RhdGljIGFkZEluaXRpYWxpemVyKGwpe3ZhciBhO3Ro'@;
put 'aXMuZmluYWxpemUoKSwobnVsbCE9PShhPXRoaXMuaCkmJnZvaWQgMCE9PWE/YTp0aGlzLmg9W10pLnB1c2gobCl9c3RhdGljIGdldCBvYnNlcnZlZEF0dHJpYnV0ZXMoKXt0aGlzLmZpbmFsaXplKCk7Y29uc3QgbD1bXTtyZXR1cm4gdGhpcy5lbGVtZW50UHJvcGVydGllcy5mb3JFYWNoKChh'@;
put 'LGQpPT57Y29uc3QgaD10aGlzLl8kRXAoZCxhKTt2b2lkIDAhPT1oJiYodGhpcy5fJEV2LnNldChoLGQpLGwucHVzaChoKSl9KSxsfXN0YXRpYyBjcmVhdGVQcm9wZXJ0eShsLGE9RFope2lmKGEuc3RhdGUmJihhLmF0dHJpYnV0ZT0hMSksdGhpcy5maW5hbGl6ZSgpLHRoaXMuZWxlbWVudFBy'@;
put 'b3BlcnRpZXMuc2V0KGwsYSksIWEubm9BY2Nlc3NvciYmIXRoaXMucHJvdG90eXBlLmhhc093blByb3BlcnR5KGwpKXtjb25zdCBkPSJzeW1ib2wiPT10eXBlb2YgbD9TeW1ib2woKToiX18iK2wsaD10aGlzLmdldFByb3BlcnR5RGVzY3JpcHRvcihsLGQsYSk7dm9pZCAwIT09aCYmT2JqZWN0'@;
put 'LmRlZmluZVByb3BlcnR5KHRoaXMucHJvdG90eXBlLGwsaCl9fXN0YXRpYyBnZXRQcm9wZXJ0eURlc2NyaXB0b3IobCxhLGQpe3JldHVybntnZXQoKXtyZXR1cm4gdGhpc1thXX0sc2V0KGgpe2NvbnN0IGY9dGhpc1tsXTt0aGlzW2FdPWgsdGhpcy5yZXF1ZXN0VXBkYXRlKGwsZixkKX0sY29u'@;
put 'ZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITB9fXN0YXRpYyBnZXRQcm9wZXJ0eU9wdGlvbnMobCl7cmV0dXJuIHRoaXMuZWxlbWVudFByb3BlcnRpZXMuZ2V0KGwpfHxEWn1zdGF0aWMgZmluYWxpemUoKXtpZih0aGlzLmhhc093blByb3BlcnR5KElaKSlyZXR1cm4hMTt0aGlzW0laXT0hMDtj'@;
put 'b25zdCBsPU9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKTtpZihsLmZpbmFsaXplKCksdm9pZCAwIT09bC5oJiYodGhpcy5oPVsuLi5sLmhdKSx0aGlzLmVsZW1lbnRQcm9wZXJ0aWVzPW5ldyBNYXAobC5lbGVtZW50UHJvcGVydGllcyksdGhpcy5fJEV2PW5ldyBNYXAsdGhpcy5oYXNPd25Q'@;
put 'cm9wZXJ0eSgicHJvcGVydGllcyIpKXtjb25zdCBhPXRoaXMucHJvcGVydGllcyxkPVsuLi5PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhhKSwuLi5PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGEpXTtmb3IoY29uc3QgaCBvZiBkKXRoaXMuY3JlYXRlUHJvcGVydHkoaCxhW2hdKX1y'@;
put 'ZXR1cm4gdGhpcy5lbGVtZW50U3R5bGVzPXRoaXMuZmluYWxpemVTdHlsZXModGhpcy5zdHlsZXMpLCEwfXN0YXRpYyBmaW5hbGl6ZVN0eWxlcyhsKXtjb25zdCBhPVtdO2lmKEFycmF5LmlzQXJyYXkobCkpe2NvbnN0IGQ9bmV3IFNldChsLmZsYXQoMS8wKS5yZXZlcnNlKCkpO2Zvcihjb25z'@;
put 'dCBoIG9mIGQpYS51bnNoaWZ0KFNzZShoKSl9ZWxzZSB2b2lkIDAhPT1sJiZhLnB1c2goU3NlKGwpKTtyZXR1cm4gYX1zdGF0aWMgXyRFcChsLGEpe2NvbnN0IGQ9YS5hdHRyaWJ1dGU7cmV0dXJuITE9PT1kP3ZvaWQgMDoic3RyaW5nIj09dHlwZW9mIGQ/ZDoic3RyaW5nIj09dHlwZW9mIGw/'@;
put 'bC50b0xvd2VyQ2FzZSgpOnZvaWQgMH1fJEV1KCl7dmFyIGw7dGhpcy5fJEVfPW5ldyBQcm9taXNlKGE9PnRoaXMuZW5hYmxlVXBkYXRpbmc9YSksdGhpcy5fJEFMPW5ldyBNYXAsdGhpcy5fJEVnKCksdGhpcy5yZXF1ZXN0VXBkYXRlKCksbnVsbD09PShsPXRoaXMuY29uc3RydWN0b3IuaCl8'@;
put 'fHZvaWQgMD09PWx8fGwuZm9yRWFjaChhPT5hKHRoaXMpKX1hZGRDb250cm9sbGVyKGwpe3ZhciBhLGQ7KG51bGwhPT0oYT10aGlzLl8kRVMpJiZ2b2lkIDAhPT1hP2E6dGhpcy5fJEVTPVtdKS5wdXNoKGwpLHZvaWQgMCE9PXRoaXMucmVuZGVyUm9vdCYmdGhpcy5pc0Nvbm5lY3RlZCYmKG51'@;
put 'bGw9PT0oZD1sLmhvc3RDb25uZWN0ZWQpfHx2b2lkIDA9PT1kfHxkLmNhbGwobCkpfXJlbW92ZUNvbnRyb2xsZXIobCl7dmFyIGE7bnVsbD09PShhPXRoaXMuXyRFUyl8fHZvaWQgMD09PWF8fGEuc3BsaWNlKHRoaXMuXyRFUy5pbmRleE9mKGwpPj4+MCwxKX1fJEVnKCl7dGhpcy5jb25zdHJ1'@;
put 'Y3Rvci5lbGVtZW50UHJvcGVydGllcy5mb3JFYWNoKChsLGEpPT57dGhpcy5oYXNPd25Qcm9wZXJ0eShhKSYmKHRoaXMuXyRFaS5zZXQoYSx0aGlzW2FdKSxkZWxldGUgdGhpc1thXSl9KX1jcmVhdGVSZW5kZXJSb290KCl7dmFyIGw7Y29uc3QgYT1udWxsIT09KGw9dGhpcy5zaGFkb3dSb290'@;
put 'KSYmdm9pZCAwIT09bD9sOnRoaXMuYXR0YWNoU2hhZG93KHRoaXMuY29uc3RydWN0b3Iuc2hhZG93Um9vdE9wdGlvbnMpO3JldHVybigoYyxsKT0+e0VaP2MuYWRvcHRlZFN0eWxlU2hlZXRzPWwubWFwKGE9PmEgaW5zdGFuY2VvZiBDU1NTdHlsZVNoZWV0P2E6YS5zdHlsZVNoZWV0KTpsLmZv'@;
put 'ckVhY2goYT0+e2NvbnN0IGQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3R5bGUiKSxoPUFSLmxpdE5vbmNlO3ZvaWQgMCE9PWgmJmQuc2V0QXR0cmlidXRlKCJub25jZSIsaCksZC50ZXh0Q29udGVudD1hLmNzc1RleHQsYy5hcHBlbmRDaGlsZChkKX0pfSkoYSx0aGlzLmNvbnN0cnVjdG9y'@;
put 'LmVsZW1lbnRTdHlsZXMpLGF9Y29ubmVjdGVkQ2FsbGJhY2soKXt2YXIgbDt2b2lkIDA9PT10aGlzLnJlbmRlclJvb3QmJih0aGlzLnJlbmRlclJvb3Q9dGhpcy5jcmVhdGVSZW5kZXJSb290KCkpLHRoaXMuZW5hYmxlVXBkYXRpbmcoITApLG51bGw9PT0obD10aGlzLl8kRVMpfHx2b2lkIDA9'@;
put 'PT1sfHxsLmZvckVhY2goYT0+e3ZhciBkO3JldHVybiBudWxsPT09KGQ9YS5ob3N0Q29ubmVjdGVkKXx8dm9pZCAwPT09ZD92b2lkIDA6ZC5jYWxsKGEpfSl9ZW5hYmxlVXBkYXRpbmcobCl7fWRpc2Nvbm5lY3RlZENhbGxiYWNrKCl7dmFyIGw7bnVsbD09PShsPXRoaXMuXyRFUyl8fHZvaWQg'@;
put 'MD09PWx8fGwuZm9yRWFjaChhPT57dmFyIGQ7cmV0dXJuIG51bGw9PT0oZD1hLmhvc3REaXNjb25uZWN0ZWQpfHx2b2lkIDA9PT1kP3ZvaWQgMDpkLmNhbGwoYSl9KX1hdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2sobCxhLGQpe3RoaXMuXyRBSyhsLGQpfV8kRU8obCxhLGQ9RFope3ZhciBoO2Nv'@;
put 'bnN0IGY9dGhpcy5jb25zdHJ1Y3Rvci5fJEVwKGwsZCk7aWYodm9pZCAwIT09ZiYmITA9PT1kLnJlZmxlY3Qpe2NvbnN0IHY9KHZvaWQgMCE9PShudWxsPT09KGg9ZC5jb252ZXJ0ZXIpfHx2b2lkIDA9PT1oP3ZvaWQgMDpoLnRvQXR0cmlidXRlKT9kLmNvbnZlcnRlcjprWikudG9BdHRyaWJ1'@;
put 'dGUoYSxkLnR5cGUpO3RoaXMuXyRFbD1sLG51bGw9PXY/dGhpcy5yZW1vdmVBdHRyaWJ1dGUoZik6dGhpcy5zZXRBdHRyaWJ1dGUoZix2KSx0aGlzLl8kRWw9bnVsbH19XyRBSyhsLGEpe3ZhciBkO2NvbnN0IGg9dGhpcy5jb25zdHJ1Y3RvcixmPWguXyRFdi5nZXQobCk7aWYodm9pZCAwIT09'@;
put 'ZiYmdGhpcy5fJEVsIT09Zil7Y29uc3Qgdj1oLmdldFByb3BlcnR5T3B0aW9ucyhmKSxNPSJmdW5jdGlvbiI9PXR5cGVvZiB2LmNvbnZlcnRlcj97ZnJvbUF0dHJpYnV0ZTp2LmNvbnZlcnRlcn06dm9pZCAwIT09KG51bGw9PT0oZD12LmNvbnZlcnRlcil8fHZvaWQgMD09PWQ/dm9pZCAwOmQu'@;
put 'ZnJvbUF0dHJpYnV0ZSk/di5jb252ZXJ0ZXI6a1o7dGhpcy5fJEVsPWYsdGhpc1tmXT1NLmZyb21BdHRyaWJ1dGUoYSx2LnR5cGUpLHRoaXMuXyRFbD1udWxsfX1yZXF1ZXN0VXBkYXRlKGwsYSxkKXtsZXQgaD0hMDt2b2lkIDAhPT1sJiYoKChkPWR8fHRoaXMuY29uc3RydWN0b3IuZ2V0UHJv'@;
put 'cGVydHlPcHRpb25zKGwpKS5oYXNDaGFuZ2VkfHxFc2UpKHRoaXNbbF0sYSk/KHRoaXMuXyRBTC5oYXMobCl8fHRoaXMuXyRBTC5zZXQobCxhKSwhMD09PWQucmVmbGVjdCYmdGhpcy5fJEVsIT09bCYmKHZvaWQgMD09PXRoaXMuXyRFQyYmKHRoaXMuXyRFQz1uZXcgTWFwKSx0aGlzLl8kRUMu'@;
put 'c2V0KGwsZCkpKTpoPSExKSwhdGhpcy5pc1VwZGF0ZVBlbmRpbmcmJmgmJih0aGlzLl8kRV89dGhpcy5fJEVqKCkpfV8kRWooKXt2YXIgbD10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXtsLmlzVXBkYXRlUGVuZGluZz0hMDt0cnl7eWllbGQgbC5fJEVffWNhdGNoKGQpe1Byb21pc2UucmVq'@;
put 'ZWN0KGQpfWNvbnN0IGE9bC5zY2hlZHVsZVVwZGF0ZSgpO3JldHVybiBudWxsIT1hJiYoeWllbGQgYSksIWwuaXNVcGRhdGVQZW5kaW5nfSkoKX1zY2hlZHVsZVVwZGF0ZSgpe3JldHVybiB0aGlzLnBlcmZvcm1VcGRhdGUoKX1wZXJmb3JtVXBkYXRlKCl7dmFyIGw7aWYoIXRoaXMuaXNVcGRh'@;
put 'dGVQZW5kaW5nKXJldHVybjt0aGlzLl8kRWkmJih0aGlzLl8kRWkuZm9yRWFjaCgoaCxmKT0+dGhpc1tmXT1oKSx0aGlzLl8kRWk9dm9pZCAwKTtsZXQgYT0hMTtjb25zdCBkPXRoaXMuXyRBTDt0cnl7YT10aGlzLnNob3VsZFVwZGF0ZShkKSxhPyh0aGlzLndpbGxVcGRhdGUoZCksbnVsbD09'@;
put 'PShsPXRoaXMuXyRFUyl8fHZvaWQgMD09PWx8fGwuZm9yRWFjaChoPT57dmFyIGY7cmV0dXJuIG51bGw9PT0oZj1oLmhvc3RVcGRhdGUpfHx2b2lkIDA9PT1mP3ZvaWQgMDpmLmNhbGwoaCl9KSx0aGlzLnVwZGF0ZShkKSk6dGhpcy5fJEVrKCl9Y2F0Y2goaCl7dGhyb3cgYT0hMSx0aGlzLl8k'@;
put 'RWsoKSxofWEmJnRoaXMuXyRBRShkKX13aWxsVXBkYXRlKGwpe31fJEFFKGwpe3ZhciBhO251bGw9PT0oYT10aGlzLl8kRVMpfHx2b2lkIDA9PT1hfHxhLmZvckVhY2goZD0+e3ZhciBoO3JldHVybiBudWxsPT09KGg9ZC5ob3N0VXBkYXRlZCl8fHZvaWQgMD09PWg/dm9pZCAwOmguY2FsbChk'@;
put 'KX0pLHRoaXMuaGFzVXBkYXRlZHx8KHRoaXMuaGFzVXBkYXRlZD0hMCx0aGlzLmZpcnN0VXBkYXRlZChsKSksdGhpcy51cGRhdGVkKGwpfV8kRWsoKXt0aGlzLl8kQUw9bmV3IE1hcCx0aGlzLmlzVXBkYXRlUGVuZGluZz0hMX1nZXQgdXBkYXRlQ29tcGxldGUoKXtyZXR1cm4gdGhpcy5nZXRV'@;
put 'cGRhdGVDb21wbGV0ZSgpfWdldFVwZGF0ZUNvbXBsZXRlKCl7cmV0dXJuIHRoaXMuXyRFX31zaG91bGRVcGRhdGUobCl7cmV0dXJuITB9dXBkYXRlKGwpe3ZvaWQgMCE9PXRoaXMuXyRFQyYmKHRoaXMuXyRFQy5mb3JFYWNoKChhLGQpPT50aGlzLl8kRU8oZCx0aGlzW2RdLGEpKSx0aGlzLl8k'@;
put 'RUM9dm9pZCAwKSx0aGlzLl8kRWsoKX11cGRhdGVkKGwpe31maXJzdFVwZGF0ZWQobCl7fX12YXIgUlo7cWJbSVpdPSEwLHFiLmVsZW1lbnRQcm9wZXJ0aWVzPW5ldyBNYXAscWIuZWxlbWVudFN0eWxlcz1bXSxxYi5zaGFkb3dSb290T3B0aW9ucz17bW9kZToib3BlbiJ9LHhzZT8uKHtSZWFj'@;
put 'dGl2ZUVsZW1lbnQ6cWJ9KSwobnVsbCE9PShBWj1rUi5yZWFjdGl2ZUVsZW1lbnRWZXJzaW9ucykmJnZvaWQgMCE9PUFaP0FaOmtSLnJlYWN0aXZlRWxlbWVudFZlcnNpb25zPVtdKS5wdXNoKCIxLjYuMyIpO2NvbnN0IERSPXdpbmRvdyxYYj1EUi50cnVzdGVkVHlwZXMsVHNlPVhiP1hiLmNy'@;
put 'ZWF0ZVBvbGljeSgibGl0LWh0bWwiLHtjcmVhdGVIVE1MOmM9PmN9KTp2b2lkIDAsSVI9IiRsaXQkIix0Zz1gbGl0JCR7KE1hdGgucmFuZG9tKCkrIiIpLnNsaWNlKDkpfSRgLExaPSI/Iit0Zyx0TWU9YDwke0xafT5gLFk4PWRvY3VtZW50LE9NPSgpPT5ZOC5jcmVhdGVDb21tZW50KCIiKSxQ'@;
put 'TT1jPT5udWxsPT09Y3x8Im9iamVjdCIhPXR5cGVvZiBjJiYiZnVuY3Rpb24iIT10eXBlb2YgYyxBc2U9QXJyYXkuaXNBcnJheSxPWj0iWyBcdFxuXGZccl0iLEZNPS88KD86KCEtLXxcL1teYS16QS1aXSl8KFwvP1thLXpBLVpdW14+XHNdKil8KFwvPyQpKS9nLERzZT0vLS0+L2csSXNlPS8+'@;
put 'L2csRzg9UmVnRXhwKGA+fCR7T1p9KD86KFteXFxzIic+PS9dKykoJHtPWn0qPSR7T1p9Kig/OlteIFx0XG5cZlxyIidcYDw+PV18KCJ8Jyl8KSl8JClgLCJnIiksUnNlPS8nL2csTHNlPS8iL2csT3NlPS9eKD86c2NyaXB0fHN0eWxlfHRleHRhcmVhfHRpdGxlKSQvaSxQc2U9Yz0+KGwsLi4u'@;
put 'YSk9Pih7XyRsaXRUeXBlJDpjLHN0cmluZ3M6bCx2YWx1ZXM6YX0pLG5NZT1Qc2UoMSksck1lPVBzZSgyKSxKYj1TeW1ib2wuZm9yKCJsaXQtbm9DaGFuZ2UiKSxTMD1TeW1ib2wuZm9yKCJsaXQtbm90aGluZyIpLEZzZT1uZXcgV2Vha01hcCwkOD1ZOC5jcmVhdGVUcmVlV2Fsa2VyKFk4LDEy'@;
put 'OSxudWxsLCExKTtmdW5jdGlvbiBIc2UoYyxsKXtpZighQXJyYXkuaXNBcnJheShjKXx8IWMuaGFzT3duUHJvcGVydHkoInJhdyIpKXRocm93IEVycm9yKCJpbnZhbGlkIHRlbXBsYXRlIHN0cmluZ3MgYXJyYXkiKTtyZXR1cm4gdm9pZCAwIT09VHNlP1RzZS5jcmVhdGVIVE1MKGwpOmx9Y2xh'@;
put 'c3MgSE17Y29uc3RydWN0b3Ioe3N0cmluZ3M6bCxfJGxpdFR5cGUkOmF9LGQpe2xldCBoO3RoaXMucGFydHM9W107bGV0IGY9MCx2PTA7Y29uc3QgTT1sLmxlbmd0aC0xLEQ9dGhpcy5wYXJ0cyxbWixyZV09KChjLGwpPT57Y29uc3QgYT1jLmxlbmd0aC0xLGQ9W107bGV0IGgsZj0yPT09bD8i'@;
put 'PHN2Zz4iOiIiLHY9Rk07Zm9yKGxldCBNPTA7TTxhO00rKyl7Y29uc3QgRD1jW01dO2xldCBaLHJlLGNlPS0xLGJlPTA7Zm9yKDtiZTxELmxlbmd0aCYmKHYubGFzdEluZGV4PWJlLHJlPXYuZXhlYyhEKSxudWxsIT09cmUpOyliZT12Lmxhc3RJbmRleCx2PT09Rk0/IiEtLSI9PT1yZVsxXT92'@;
put 'PURzZTp2b2lkIDAhPT1yZVsxXT92PUlzZTp2b2lkIDAhPT1yZVsyXT8oT3NlLnRlc3QocmVbMl0pJiYoaD1SZWdFeHAoIjwvIityZVsyXSwiZyIpKSx2PUc4KTp2b2lkIDAhPT1yZVszXSYmKHY9RzgpOnY9PT1HOD8iPiI9PT1yZVswXT8odj1oPz9GTSxjZT0tMSk6dm9pZCAwPT09cmVbMV0/'@;
put 'Y2U9LTI6KGNlPXYubGFzdEluZGV4LXJlWzJdLmxlbmd0aCxaPXJlWzFdLHY9dm9pZCAwPT09cmVbM10/Rzg6JyInPT09cmVbM10/THNlOlJzZSk6dj09PUxzZXx8dj09PVJzZT92PUc4OnY9PT1Ec2V8fHY9PT1Jc2U/dj1GTToodj1HOCxoPXZvaWQgMCk7Y29uc3QgRWU9dj09PUc4JiZjW00r'@;
put 'MV0uc3RhcnRzV2l0aCgiLz4iKT8iICI6IiI7Zis9dj09PUZNP0QrdE1lOmNlPj0wPyhkLnB1c2goWiksRC5zbGljZSgwLGNlKStJUitELnNsaWNlKGNlKSt0ZytFZSk6RCt0ZysoLTI9PT1jZT8oZC5wdXNoKHZvaWQgMCksTSk6RWUpfXJldHVybltIc2UoYyxmKyhjW2FdfHwiPD8+IikrKDI9'@;
put 'PT1sPyI8L3N2Zz4iOiIiKSksZF19KShsLGEpO2lmKHRoaXMuZWw9SE0uY3JlYXRlRWxlbWVudChaLGQpLCQ4LmN1cnJlbnROb2RlPXRoaXMuZWwuY29udGVudCwyPT09YSl7Y29uc3QgY2U9dGhpcy5lbC5jb250ZW50LGJlPWNlLmZpcnN0Q2hpbGQ7YmUucmVtb3ZlKCksY2UuYXBwZW5kKC4u'@;
put 'LmJlLmNoaWxkTm9kZXMpfWZvcig7bnVsbCE9PShoPSQ4Lm5leHROb2RlKCkpJiZELmxlbmd0aDxNOyl7aWYoMT09PWgubm9kZVR5cGUpe2lmKGguaGFzQXR0cmlidXRlcygpKXtjb25zdCBjZT1bXTtmb3IoY29uc3QgYmUgb2YgaC5nZXRBdHRyaWJ1dGVOYW1lcygpKWlmKGJlLmVuZHNXaXRo'@;
put 'KElSKXx8YmUuc3RhcnRzV2l0aCh0Zykpe2NvbnN0IEVlPXJlW3YrK107aWYoY2UucHVzaChiZSksdm9pZCAwIT09RWUpe2NvbnN0IEJlPWguZ2V0QXR0cmlidXRlKEVlLnRvTG93ZXJDYXNlKCkrSVIpLnNwbGl0KHRnKSxxZT0vKFsuP0BdKT8oLiopLy5leGVjKEVlKTtELnB1c2goe3R5cGU6'@;
put 'MSxpbmRleDpmLG5hbWU6cWVbMl0sc3RyaW5nczpCZSxjdG9yOiIuIj09PXFlWzFdP0JzZToiPyI9PT1xZVsxXT9qc2U6IkAiPT09cWVbMV0/enNlOk5NfSl9ZWxzZSBELnB1c2goe3R5cGU6NixpbmRleDpmfSl9Zm9yKGNvbnN0IGJlIG9mIGNlKWgucmVtb3ZlQXR0cmlidXRlKGJlKX1pZihP'@;
put 'c2UudGVzdChoLnRhZ05hbWUpKXtjb25zdCBjZT1oLnRleHRDb250ZW50LnNwbGl0KHRnKSxiZT1jZS5sZW5ndGgtMTtpZihiZT4wKXtoLnRleHRDb250ZW50PVhiP1hiLmVtcHR5U2NyaXB0OiIiO2ZvcihsZXQgRWU9MDtFZTxiZTtFZSsrKWguYXBwZW5kKGNlW0VlXSxPTSgpKSwkOC5uZXh0'@;
put 'Tm9kZSgpLEQucHVzaCh7dHlwZToyLGluZGV4OisrZn0pO2guYXBwZW5kKGNlW2JlXSxPTSgpKX19fWVsc2UgaWYoOD09PWgubm9kZVR5cGUpaWYoaC5kYXRhPT09TFopRC5wdXNoKHt0eXBlOjIsaW5kZXg6Zn0pO2Vsc2V7bGV0IGNlPS0xO2Zvcig7LTEhPT0oY2U9aC5kYXRhLmluZGV4T2Yo'@;
put 'dGcsY2UrMSkpOylELnB1c2goe3R5cGU6NyxpbmRleDpmfSksY2UrPXRnLmxlbmd0aC0xfWYrK319c3RhdGljIGNyZWF0ZUVsZW1lbnQobCxhKXtjb25zdCBkPVk4LmNyZWF0ZUVsZW1lbnQoInRlbXBsYXRlIik7cmV0dXJuIGQuaW5uZXJIVE1MPWwsZH19ZnVuY3Rpb24gSzgoYyxsLGE9Yyxk'@;
put 'KXt2YXIgaCxmLHYsTTtpZihsPT09SmIpcmV0dXJuIGw7bGV0IEQ9dm9pZCAwIT09ZD9udWxsPT09KGg9YS5fJENvKXx8dm9pZCAwPT09aD92b2lkIDA6aFtkXTphLl8kQ2w7Y29uc3QgWj1QTShsKT92b2lkIDA6bC5fJGxpdERpcmVjdGl2ZSQ7cmV0dXJuIEQ/LmNvbnN0cnVjdG9yIT09WiYm'@;
put 'KG51bGw9PT0oZj1EPy5fJEFPKXx8dm9pZCAwPT09Znx8Zi5jYWxsKEQsITEpLHZvaWQgMD09PVo/RD12b2lkIDA6KEQ9bmV3IFooYyksRC5fJEFUKGMsYSxkKSksdm9pZCAwIT09ZD8obnVsbCE9PSh2PShNPWEpLl8kQ28pJiZ2b2lkIDAhPT12P3Y6TS5fJENvPVtdKVtkXT1EOmEuXyRDbD1E'@;
put 'KSx2b2lkIDAhPT1EJiYobD1LOChjLEQuXyRBUyhjLGwudmFsdWVzKSxELGQpKSxsfWNsYXNzIFZzZXtjb25zdHJ1Y3RvcihsLGEpe3RoaXMuXyRBVj1bXSx0aGlzLl8kQU49dm9pZCAwLHRoaXMuXyRBRD1sLHRoaXMuXyRBTT1hfWdldCBwYXJlbnROb2RlKCl7cmV0dXJuIHRoaXMuXyRBTS5w'@;
put 'YXJlbnROb2RlfWdldCBfJEFVKCl7cmV0dXJuIHRoaXMuXyRBTS5fJEFVfXUobCl7dmFyIGE7Y29uc3R7ZWw6e2NvbnRlbnQ6ZH0scGFydHM6aH09dGhpcy5fJEFELGY9KG51bGwhPT0oYT1sPy5jcmVhdGlvblNjb3BlKSYmdm9pZCAwIT09YT9hOlk4KS5pbXBvcnROb2RlKGQsITApOyQ4LmN1'@;
put 'cnJlbnROb2RlPWY7bGV0IHY9JDgubmV4dE5vZGUoKSxNPTAsRD0wLFo9aFswXTtmb3IoO3ZvaWQgMCE9PVo7KXtpZihNPT09Wi5pbmRleCl7bGV0IHJlOzI9PT1aLnR5cGU/cmU9bmV3IFFiKHYsdi5uZXh0U2libGluZyx0aGlzLGwpOjE9PT1aLnR5cGU/cmU9bmV3IFouY3Rvcih2LFoubmFt'@;
put 'ZSxaLnN0cmluZ3MsdGhpcyxsKTo2PT09Wi50eXBlJiYocmU9bmV3IFVzZSh2LHRoaXMsbCkpLHRoaXMuXyRBVi5wdXNoKHJlKSxaPWhbKytEXX1NIT09Wj8uaW5kZXgmJih2PSQ4Lm5leHROb2RlKCksTSsrKX1yZXR1cm4gJDguY3VycmVudE5vZGU9WTgsZn12KGwpe2xldCBhPTA7Zm9yKGNv'@;
put 'bnN0IGQgb2YgdGhpcy5fJEFWKXZvaWQgMCE9PWQmJih2b2lkIDAhPT1kLnN0cmluZ3M/KGQuXyRBSShsLGQsYSksYSs9ZC5zdHJpbmdzLmxlbmd0aC0yKTpkLl8kQUkobFthXSkpLGErK319Y2xhc3MgUWJ7Y29uc3RydWN0b3IobCxhLGQsaCl7dmFyIGY7dGhpcy50eXBlPTIsdGhpcy5fJEFI'@;
put 'PVMwLHRoaXMuXyRBTj12b2lkIDAsdGhpcy5fJEFBPWwsdGhpcy5fJEFCPWEsdGhpcy5fJEFNPWQsdGhpcy5vcHRpb25zPWgsdGhpcy5fJENwPW51bGw9PT0oZj1oPy5pc0Nvbm5lY3RlZCl8fHZvaWQgMD09PWZ8fGZ9Z2V0IF8kQVUoKXt2YXIgbCxhO3JldHVybiBudWxsIT09KGE9bnVsbD09'@;
put 'PShsPXRoaXMuXyRBTSl8fHZvaWQgMD09PWw/dm9pZCAwOmwuXyRBVSkmJnZvaWQgMCE9PWE/YTp0aGlzLl8kQ3B9Z2V0IHBhcmVudE5vZGUoKXtsZXQgbD10aGlzLl8kQUEucGFyZW50Tm9kZTtjb25zdCBhPXRoaXMuXyRBTTtyZXR1cm4gdm9pZCAwIT09YSYmMTE9PT1sPy5ub2RlVHlwZSYm'@;
put 'KGw9YS5wYXJlbnROb2RlKSxsfWdldCBzdGFydE5vZGUoKXtyZXR1cm4gdGhpcy5fJEFBfWdldCBlbmROb2RlKCl7cmV0dXJuIHRoaXMuXyRBQn1fJEFJKGwsYT10aGlzKXtsPUs4KHRoaXMsbCxhKSxQTShsKT9sPT09UzB8fG51bGw9PWx8fCIiPT09bD8odGhpcy5fJEFIIT09UzAmJnRoaXMu'@;
put 'XyRBUigpLHRoaXMuXyRBSD1TMCk6bCE9PXRoaXMuXyRBSCYmbCE9PUpiJiZ0aGlzLl8obCk6dm9pZCAwIT09bC5fJGxpdFR5cGUkP3RoaXMuZyhsKTp2b2lkIDAhPT1sLm5vZGVUeXBlP3RoaXMuJChsKTooYz0+QXNlKGMpfHwiZnVuY3Rpb24iPT10eXBlb2YgYz8uW1N5bWJvbC5pdGVyYXRv'@;
put 'cl0pKGwpP3RoaXMuVChsKTp0aGlzLl8obCl9ayhsKXtyZXR1cm4gdGhpcy5fJEFBLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGwsdGhpcy5fJEFCKX0kKGwpe3RoaXMuXyRBSCE9PWwmJih0aGlzLl8kQVIoKSx0aGlzLl8kQUg9dGhpcy5rKGwpKX1fKGwpe3RoaXMuXyRBSCE9PVMwJiZQTSh0'@;
put 'aGlzLl8kQUgpP3RoaXMuXyRBQS5uZXh0U2libGluZy5kYXRhPWw6dGhpcy4kKFk4LmNyZWF0ZVRleHROb2RlKGwpKSx0aGlzLl8kQUg9bH1nKGwpe3ZhciBhO2NvbnN0e3ZhbHVlczpkLF8kbGl0VHlwZSQ6aH09bCxmPSJudW1iZXIiPT10eXBlb2YgaD90aGlzLl8kQUMobCk6KHZvaWQgMD09'@;
put 'PWguZWwmJihoLmVsPUhNLmNyZWF0ZUVsZW1lbnQoSHNlKGguaCxoLmhbMF0pLHRoaXMub3B0aW9ucykpLGgpO2lmKChudWxsPT09KGE9dGhpcy5fJEFIKXx8dm9pZCAwPT09YT92b2lkIDA6YS5fJEFEKT09PWYpdGhpcy5fJEFILnYoZCk7ZWxzZXtjb25zdCB2PW5ldyBWc2UoZix0aGlzKSxN'@;
put 'PXYudSh0aGlzLm9wdGlvbnMpO3YudihkKSx0aGlzLiQoTSksdGhpcy5fJEFIPXZ9fV8kQUMobCl7bGV0IGE9RnNlLmdldChsLnN0cmluZ3MpO3JldHVybiB2b2lkIDA9PT1hJiZGc2Uuc2V0KGwuc3RyaW5ncyxhPW5ldyBITShsKSksYX1UKGwpe0FzZSh0aGlzLl8kQUgpfHwodGhpcy5fJEFI'@;
put 'PVtdLHRoaXMuXyRBUigpKTtjb25zdCBhPXRoaXMuXyRBSDtsZXQgZCxoPTA7Zm9yKGNvbnN0IGYgb2YgbCloPT09YS5sZW5ndGg/YS5wdXNoKGQ9bmV3IFFiKHRoaXMuayhPTSgpKSx0aGlzLmsoT00oKSksdGhpcyx0aGlzLm9wdGlvbnMpKTpkPWFbaF0sZC5fJEFJKGYpLGgrKztoPGEubGVu'@;
put 'Z3RoJiYodGhpcy5fJEFSKGQmJmQuXyRBQi5uZXh0U2libGluZyxoKSxhLmxlbmd0aD1oKX1fJEFSKGw9dGhpcy5fJEFBLm5leHRTaWJsaW5nLGEpe3ZhciBkO2ZvcihudWxsPT09KGQ9dGhpcy5fJEFQKXx8dm9pZCAwPT09ZHx8ZC5jYWxsKHRoaXMsITEsITAsYSk7bCYmbCE9PXRoaXMuXyRB'@;
put 'Qjspe2NvbnN0IGg9bC5uZXh0U2libGluZztsLnJlbW92ZSgpLGw9aH19c2V0Q29ubmVjdGVkKGwpe3ZhciBhO3ZvaWQgMD09PXRoaXMuXyRBTSYmKHRoaXMuXyRDcD1sLG51bGw9PT0oYT10aGlzLl8kQVApfHx2b2lkIDA9PT1hfHxhLmNhbGwodGhpcyxsKSl9fWNsYXNzIE5Ne2NvbnN0cnVj'@;
put 'dG9yKGwsYSxkLGgsZil7dGhpcy50eXBlPTEsdGhpcy5fJEFIPVMwLHRoaXMuXyRBTj12b2lkIDAsdGhpcy5lbGVtZW50PWwsdGhpcy5uYW1lPWEsdGhpcy5fJEFNPWgsdGhpcy5vcHRpb25zPWYsZC5sZW5ndGg+Mnx8IiIhPT1kWzBdfHwiIiE9PWRbMV0/KHRoaXMuXyRBSD1BcnJheShkLmxl'@;
put 'bmd0aC0xKS5maWxsKG5ldyBTdHJpbmcpLHRoaXMuc3RyaW5ncz1kKTp0aGlzLl8kQUg9UzB9Z2V0IHRhZ05hbWUoKXtyZXR1cm4gdGhpcy5lbGVtZW50LnRhZ05hbWV9Z2V0IF8kQVUoKXtyZXR1cm4gdGhpcy5fJEFNLl8kQVV9XyRBSShsLGE9dGhpcyxkLGgpe2NvbnN0IGY9dGhpcy5zdHJp'@;
put 'bmdzO2xldCB2PSExO2lmKHZvaWQgMD09PWYpbD1LOCh0aGlzLGwsYSwwKSx2PSFQTShsKXx8bCE9PXRoaXMuXyRBSCYmbCE9PUpiLHYmJih0aGlzLl8kQUg9bCk7ZWxzZXtjb25zdCBNPWw7bGV0IEQsWjtmb3IobD1mWzBdLEQ9MDtEPGYubGVuZ3RoLTE7RCsrKVo9SzgodGhpcyxNW2QrRF0s'@;
put 'YSxEKSxaPT09SmImJihaPXRoaXMuXyRBSFtEXSksdnx8KHY9IVBNKFopfHxaIT09dGhpcy5fJEFIW0RdKSxaPT09UzA/bD1TMDpsIT09UzAmJihsKz0oWj8/IiIpK2ZbRCsxXSksdGhpcy5fJEFIW0RdPVp9diYmIWgmJnRoaXMuaihsKX1qKGwpe2w9PT1TMD90aGlzLmVsZW1lbnQucmVtb3Zl'@;
put 'QXR0cmlidXRlKHRoaXMubmFtZSk6dGhpcy5lbGVtZW50LnNldEF0dHJpYnV0ZSh0aGlzLm5hbWUsbD8/IiIpfX1jbGFzcyBCc2UgZXh0ZW5kcyBOTXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy50eXBlPTN9aihsKXt0aGlzLmVsZW1lbnRbdGhpcy5uYW1lXT1sPT09'@;
put 'UzA/dm9pZCAwOmx9fWNvbnN0IGlNZT1YYj9YYi5lbXB0eVNjcmlwdDoiIjtjbGFzcyBqc2UgZXh0ZW5kcyBOTXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy50eXBlPTR9aihsKXtsJiZsIT09UzA/dGhpcy5lbGVtZW50LnNldEF0dHJpYnV0ZSh0aGlzLm5hbWUsaU1l'@;
put 'KTp0aGlzLmVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKHRoaXMubmFtZSl9fWNsYXNzIHpzZSBleHRlbmRzIE5Ne2NvbnN0cnVjdG9yKGwsYSxkLGgsZil7c3VwZXIobCxhLGQsaCxmKSx0aGlzLnR5cGU9NX1fJEFJKGwsYT10aGlzKXt2YXIgZDtpZigobD1udWxsIT09KGQ9SzgodGhpcyxsLGEs'@;
put 'MCkpJiZ2b2lkIDAhPT1kP2Q6UzApPT09SmIpcmV0dXJuO2NvbnN0IGg9dGhpcy5fJEFILGY9bD09PVMwJiZoIT09UzB8fGwuY2FwdHVyZSE9PWguY2FwdHVyZXx8bC5vbmNlIT09aC5vbmNlfHxsLnBhc3NpdmUhPT1oLnBhc3NpdmUsdj1sIT09UzAmJihoPT09UzB8fGYpO2YmJnRoaXMuZWxl'@;
put 'bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKHRoaXMubmFtZSx0aGlzLGgpLHYmJnRoaXMuZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKHRoaXMubmFtZSx0aGlzLGwpLHRoaXMuXyRBSD1sfWhhbmRsZUV2ZW50KGwpe3ZhciBhLGQ7ImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMuXyRBSD90aGlzLl8k'@;
put 'QUguY2FsbChudWxsIT09KGQ9bnVsbD09PShhPXRoaXMub3B0aW9ucyl8fHZvaWQgMD09PWE/dm9pZCAwOmEuaG9zdCkmJnZvaWQgMCE9PWQ/ZDp0aGlzLmVsZW1lbnQsbCk6dGhpcy5fJEFILmhhbmRsZUV2ZW50KGwpfX1jbGFzcyBVc2V7Y29uc3RydWN0b3IobCxhLGQpe3RoaXMuZWxlbWVu'@;
put 'dD1sLHRoaXMudHlwZT02LHRoaXMuXyRBTj12b2lkIDAsdGhpcy5fJEFNPWEsdGhpcy5vcHRpb25zPWR9Z2V0IF8kQVUoKXtyZXR1cm4gdGhpcy5fJEFNLl8kQVV9XyRBSShsKXtLOCh0aGlzLGwpfX1jb25zdCBac2U9RFIubGl0SHRtbFBvbHlmaWxsU3VwcG9ydDt2YXIgUFosRlo7WnNlPy4o'@;
put 'SE0sUWIpLChudWxsIT09KFJaPURSLmxpdEh0bWxWZXJzaW9ucykmJnZvaWQgMCE9PVJaP1JaOkRSLmxpdEh0bWxWZXJzaW9ucz1bXSkucHVzaCgiMi44LjAiKTtjbGFzcyBWTSBleHRlbmRzIHFie2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLnJlbmRlck9wdGlvbnM9'@;
put 'e2hvc3Q6dGhpc30sdGhpcy5fJERvPXZvaWQgMH1jcmVhdGVSZW5kZXJSb290KCl7dmFyIGwsYTtjb25zdCBkPXN1cGVyLmNyZWF0ZVJlbmRlclJvb3QoKTtyZXR1cm4gbnVsbCE9PShsPShhPXRoaXMucmVuZGVyT3B0aW9ucykucmVuZGVyQmVmb3JlKSYmdm9pZCAwIT09bHx8KGEucmVuZGVy'@;
put 'QmVmb3JlPWQuZmlyc3RDaGlsZCksZH11cGRhdGUobCl7Y29uc3QgYT10aGlzLnJlbmRlcigpO3RoaXMuaGFzVXBkYXRlZHx8KHRoaXMucmVuZGVyT3B0aW9ucy5pc0Nvbm5lY3RlZD10aGlzLmlzQ29ubmVjdGVkKSxzdXBlci51cGRhdGUobCksdGhpcy5fJERvPSgoYyxsLGEpPT57dmFyIGQs'@;
put 'aDtjb25zdCBmPW51bGwhPT0oZD1hPy5yZW5kZXJCZWZvcmUpJiZ2b2lkIDAhPT1kP2Q6bDtsZXQgdj1mLl8kbGl0UGFydCQ7aWYodm9pZCAwPT09dil7Y29uc3QgTT1udWxsIT09KGg9YT8ucmVuZGVyQmVmb3JlKSYmdm9pZCAwIT09aD9oOm51bGw7Zi5fJGxpdFBhcnQkPXY9bmV3IFFiKGwu'@;
put 'aW5zZXJ0QmVmb3JlKE9NKCksTSksTSx2b2lkIDAsYT8/e30pfXJldHVybiB2Ll8kQUkoYyksdn0pKGEsdGhpcy5yZW5kZXJSb290LHRoaXMucmVuZGVyT3B0aW9ucyl9Y29ubmVjdGVkQ2FsbGJhY2soKXt2YXIgbDtzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpLG51bGw9PT0obD10aGlzLl8k'@;
put 'RG8pfHx2b2lkIDA9PT1sfHxsLnNldENvbm5lY3RlZCghMCl9ZGlzY29ubmVjdGVkQ2FsbGJhY2soKXt2YXIgbDtzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjaygpLG51bGw9PT0obD10aGlzLl8kRG8pfHx2b2lkIDA9PT1sfHxsLnNldENvbm5lY3RlZCghMSl9cmVuZGVyKCl7cmV0dXJuIEpi'@;
put 'fX1WTS5maW5hbGl6ZWQ9ITAsVk0uXyRsaXRFbGVtZW50JD0hMCxudWxsPT09KFBaPWdsb2JhbFRoaXMubGl0RWxlbWVudEh5ZHJhdGVTdXBwb3J0KXx8dm9pZCAwPT09UFp8fFBaLmNhbGwoZ2xvYmFsVGhpcyx7TGl0RWxlbWVudDpWTX0pO2NvbnN0IFdzZT1nbG9iYWxUaGlzLmxpdEVsZW1l'@;
put 'bnRQb2x5ZmlsbFN1cHBvcnQ7V3NlPy4oe0xpdEVsZW1lbnQ6Vk19KSwobnVsbCE9PShGWj1nbG9iYWxUaGlzLmxpdEVsZW1lbnRWZXJzaW9ucykmJnZvaWQgMCE9PUZaP0ZaOmdsb2JhbFRoaXMubGl0RWxlbWVudFZlcnNpb25zPVtdKS5wdXNoKCIzLjMuMyIpO2NvbnN0IHNNZT1Dc2VgQGNo'@;
put 'YXJzZXQgIlVURi04Ijs6aG9zdCw6cm9vdHstLc60Mjp2YXIoLS1jZHMtZ2xvYmFsLWxheW91dC1zcGFjZS14eHMsIGNhbGMoNCAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsIDIwKSkpOy0tzrQzOnZhcigtLWNkcy1nbG9iYWwtbGF5b3V0LXNwYWNlLXhzLCBjYWxjKDggKiAxcmVt'@;
put 'IC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLCAyMCkpKTstLc60NDp2YXIoLS1jZHMtZ2xvYmFsLWxheW91dC1zcGFjZS1zbSwgY2FsYygxMiAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsIDIwKSkpOy0tzrQ1OnZhcigtLWNkcy1nbG9iYWwtbGF5b3V0LXNwYWNlLW1kLCBjYWxjKDE2'@;
put 'ICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwgMjApKSk7LS3OtDY6dmFyKC0tY2RzLWdsb2JhbC1sYXlvdXQtc3BhY2UtbGcsIGNhbGMoMjQgKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLCAyMCkpKTstLc60Nzp2YXIoLS1jZHMtZ2xvYmFsLWxheW91dC1zcGFjZS14bCwg'@;
put 'Y2FsYygzMiAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsIDIwKSkpfVtjZHMtbGF5b3V0fj0id3JhcDpub25lIl17ZmxleC13cmFwOm5vd3JhcCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJhbGlnbjpzdHJldGNoIl17ZmxleC1ncm93OjEhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0i'@;
put 'YWxpZ246c2hyaW5rIl17ZmxleC1zaHJpbms6MSFpbXBvcnRhbnQ7ZmxleC1ncm93OjAhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXXtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246cm93O2ZsZXgtd3JhcDp3cmFwO2p1c3RpZnktaXRlbXM6ZmxleC1zdGFydDthbGlnbi1p'@;
put 'dGVtczpmbGV4LXN0YXJ0O3dpZHRoOjEwMCU7bWFyZ2luOjA7bWluLWhlaWdodDowfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXT5bY2RzLWxheW91dH49aG9yaXpvbnRhbF0sW2Nkcy1sYXlvdXR+PWhvcml6b250YWxdPltjZHMtbGF5b3V0fj12ZXJ0aWNhbF0sW2Nkcy1sYXlvdXR+PWhvcml6'@;
put 'b250YWxdPltjZHMtdGV4dF17d2lkdGg6aW5pdGlhbCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbjp0b3AiXXthbGlnbi1pdGVtczpmbGV4LXN0YXJ0fVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ246bGVmdCJd'@;
put 'e2p1c3RpZnktY29udGVudDpmbGV4LXN0YXJ0fVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ246cmlnaHQiXXtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1lbmR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbjp2ZXJ0aWNhbC1jZW50ZXIi'@;
put 'XXthbGlnbi1pdGVtczpjZW50ZXI7YWxpZ24tY29udGVudDpjZW50ZXJ9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbjpob3Jpem9udGFsLWNlbnRlciJde2p1c3RpZnktY29udGVudDpjZW50ZXJ9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQq'@;
put 'PSJhbGlnbjpjZW50ZXIiXXthbGlnbi1pdGVtczpjZW50ZXI7YWxpZ24tY29udGVudDpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcn1bY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9Im9yZGVyOnJldmVyc2UiXXtmbGV4LWRpcmVjdGlvbjpyb3ctcmV2ZXJzZX1bY2Rz'@;
put 'LWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9ImFsaWduOmhvcml6b250YWwtc3RyZXRjaCJde2p1c3RpZnktY29udGVudDpzdHJldGNoO2ZsZXgtZ3JvdzoxfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ246aG9yaXpvbnRhbC1zdHJldGNoIl0+Kntm'@;
put 'bGV4LWdyb3c6MX1bY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9ImFsaWduOnN0cmV0Y2giXXthbGlnbi1pdGVtczpzdHJldGNoO2FsaWduLWNvbnRlbnQ6c3RyZXRjaDtmbGV4LWdyb3c6MX1bY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9ImFsaWduOnN0'@;
put 'cmV0Y2giXT4qe2ZsZXgtZ3JvdzoxfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXT5bY2RzLWxheW91dCo9ImFsaWduOmNlbnRlciJdLFtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXT5bY2RzLWxheW91dCo9ImFsaWduOnZlcnRpY2FsLWNlbnRlciJde2FsaWduLXNlbGY6Y2VudGVyfVtjZHMtbGF5'@;
put 'b3V0fj1ob3Jpem9udGFsXT5bY2RzLWxheW91dCo9ImFsaWduOmNlbnRlciJdLFtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXT5bY2RzLWxheW91dCo9ImFsaWduOmhvcml6b250YWwtY2VudGVyIl17bWFyZ2luLWxlZnQ6YXV0byFpbXBvcnRhbnQ7bWFyZ2luLXJpZ2h0OmF1dG8haW1wb3J0YW50'@;
put 'fVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXT5bY2RzLWxheW91dCo9ImFsaWduOnRvcCJde2FsaWduLXNlbGY6ZmxleC1zdGFydH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbjpyaWdodCJde21hcmdpbi1sZWZ0OmF1dG8haW1wb3J0YW50fVtjZHMtbGF5b3V0'@;
put 'fj1ob3Jpem9udGFsXT5bY2RzLWxheW91dCo9ImFsaWduOmxlZnQiXXttYXJnaW4tcmlnaHQ6YXV0byFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXXt3aWR0aDoxMDAlO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47YWxpZ24taXRlbXM6ZmxleC1zdGFydH1bY2Rz'@;
put 'LWxheW91dH49dmVydGljYWxdLFtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWduOnRvcCJde2p1c3RpZnktY29udGVudDpmbGV4LXN0YXJ0fVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWduOmxlZnQiXXthbGlnbi1pdGVtczpmbGV4LXN0YXJ0'@;
put 'fVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWduOnJpZ2h0Il17YWxpZ24taXRlbXM6ZmxleC1lbmR9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0iYWxpZ246dmVydGljYWwtY2VudGVyIl17anVzdGlmeS1jb250ZW50OmNlbnRlcn1bY2RzLWxheW91'@;
put 'dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJhbGlnbjpob3Jpem9udGFsLWNlbnRlciJde2FsaWduLWl0ZW1zOmNlbnRlcn1bY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJhbGlnbjpjZW50ZXIiXXthbGlnbi1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcn1b'@;
put 'Y2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJvcmRlcjpyZXZlcnNlIl17ZmxleC1kaXJlY3Rpb246Y29sdW1uLXJldmVyc2V9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0iYWxpZ246aG9yaXpvbnRhbC1zdHJldGNoIl17YWxpZ24taXRlbXM6c3RyZXRjaH1b'@;
put 'Y2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJhbGlnbjpzdHJldGNoIl17YWxpZ24taXRlbXM6c3RyZXRjaDtqdXN0aWZ5LWNvbnRlbnQ6c3RyZXRjaH1bY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJhbGlnbjpzdHJldGNoIl0+KntmbGV4LWdyb3c6MX1bY2Rz'@;
put 'LWxheW91dH49dmVydGljYWxdPltjZHMtbGF5b3V0Kj0iYWxpZ246Y2VudGVyIl0sW2Nkcy1sYXlvdXR+PXZlcnRpY2FsXT5bY2RzLWxheW91dCo9ImFsaWduOnZlcnRpY2FsLWNlbnRlciJde21hcmdpbi10b3A6YXV0bzttYXJnaW4tYm90dG9tOmF1dG99W2Nkcy1sYXlvdXR+PXZlcnRpY2Fs'@;
put 'XT5bY2RzLWxheW91dCo9ImFsaWduOmNlbnRlciJdLFtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbjpob3Jpem9udGFsLWNlbnRlciJde2FsaWduLXNlbGY6Y2VudGVyfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbjp0b3AiXXttYXJn'@;
put 'aW4tYm90dG9tOmF1dG8haW1wb3J0YW50fVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbjpyaWdodCJde21hcmdpbi1sZWZ0OmF1dG99W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXT5bY2RzLWxheW91dCo9ImFsaWduOmxlZnQiXXttYXJnaW4tcmlnaHQ6YXV0b31bY2Rz'@;
put 'LWxheW91dH49Z3JpZF17ZGlzcGxheTpncmlkO2FsaWduLWl0ZW1zOnN0YXJ0O2FsaWduLWNvbnRlbnQ6c3RhcnQ7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOnJlcGVhdCh2YXIoLS1jZHMtZ2xvYmFsLWxheW91dC1ncmlkLWNvbHMsMTIpLDFmcik7d2lkdGg6MTAwJX1bY2RzLWxheW91dH49Z3Jp'@;
put 'ZF1bY2RzLWxheW91dCo9cm93c117Z3JpZC10ZW1wbGF0ZS1yb3dzOnJlcGVhdCgxMixhdXRvKX1bY2RzLWxheW91dH49Z3JpZF0+W2Nkcy1sYXlvdXQqPXJvd117YWxpZ24tc2VsZjpzdHJldGNofVtjZHMtbGF5b3V0fj1ncmlkXVtjZHMtbGF5b3V0Kj0iYWxpZ246dG9wIl17YWxpZ24tY29u'@;
put 'dGVudDpzdGFydH1bY2RzLWxheW91dH49Z3JpZF1bY2RzLWxheW91dCo9ImFsaWduOnJpZ2h0Il17anVzdGlmeS1jb250ZW50OmVuZH1bY2RzLWxheW91dH49Z3JpZF1bY2RzLWxheW91dCo9ImFsaWduOmxlZnQiXXtqdXN0aWZ5LWNvbnRlbnQ6c3RhcnR9W2Nkcy1sYXlvdXR+PWdyaWRdW2Nk'@;
put 'cy1sYXlvdXQqPSJhbGlnbjpob3Jpem9udGFsLXN0cmV0Y2giXXtqdXN0aWZ5LWl0ZW1zOnN0cmV0Y2g7anVzdGlmeS1jb250ZW50OnN0cmV0Y2h9W2Nkcy1sYXlvdXR+PWdyaWRdW2Nkcy1sYXlvdXQqPSJhbGlnbjpzdHJldGNoIl17YWxpZ24taXRlbXM6c3RyZXRjaDthbGlnbi1jb250ZW50'@;
put 'OnN0cmV0Y2g7anVzdGlmeS1pdGVtczpzdHJldGNoO2p1c3RpZnktY29udGVudDpzdHJldGNofVtjZHMtbGF5b3V0fj1ncmlkXVtjZHMtbGF5b3V0Kj0iYWxpZ246dmVydGljYWwtY2VudGVyIl17YWxpZ24taXRlbXM6Y2VudGVyO2FsaWduLWNvbnRlbnQ6Y2VudGVyfVtjZHMtbGF5b3V0fj1n'@;
put 'cmlkXVtjZHMtbGF5b3V0Kj0iYWxpZ246aG9yaXpvbnRhbC1jZW50ZXIiXXtqdXN0aWZ5LWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfVtjZHMtbGF5b3V0fj1ncmlkXVtjZHMtbGF5b3V0Kj0iYWxpZ246Y2VudGVyIl17YWxpZ24taXRlbXM6Y2VudGVyO2FsaWduLWNvbnRl'@;
put 'bnQ6Y2VudGVyO2p1c3RpZnktaXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpjZW50ZXJ9OjpzbG90dGVkKFtjZHMtbGF5b3V0fj0iZGlzcGxheTpzY3JlZW4tcmVhZGVyLW9ubHkiXSksW2Nkcy1sYXlvdXR+PSJkaXNwbGF5OnNjcmVlbi1yZWFkZXItb25seSJde3Bvc2l0aW9uOmFic29s'@;
put 'dXRlIWltcG9ydGFudDtjbGlwOnJlY3QoMXB4LDFweCwxcHgsMXB4KTtjbGlwLXBhdGg6aW5zZXQoNTAlKTtwYWRkaW5nOjA7Ym9yZGVyOjA7aGVpZ2h0OjFweDt3aWR0aDoxcHg7b3ZlcmZsb3c6aGlkZGVuO3doaXRlLXNwYWNlOm5vd3JhcDt0b3A6MDtsZWZ0OjA7ZGlzcGxheTpibG9jayFp'@;
put 'bXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJnYXA6bm9uZSJde2dhcDowfVtjZHMtbGF5b3V0Kj0iZ2FwOnh4cyJde2dhcDp2YXIoLS3OtDIpfVtjZHMtbGF5b3V0Kj0iZ2FwOnhzIl17Z2FwOnZhcigtLc60Myl9W2Nkcy1sYXlvdXQqPSJnYXA6c20iXXtnYXA6dmFyKC0tzrQ0KX1bY2RzLWxheW91'@;
put 'dCo9ImdhcDptZCJde2dhcDp2YXIoLS3OtDUpfVtjZHMtbGF5b3V0Kj0iZ2FwOmxnIl17Z2FwOnZhcigtLc60Nil9W2Nkcy1sYXlvdXR+PSJwOm5vbmUiXXtwYWRkaW5nOjAhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icDp4eHMiXXtwYWRkaW5nOnZhcigtLc60MikhaW1wb3J0YW50fVtjZHMt'@;
put 'bGF5b3V0fj0icDp4cyJde3BhZGRpbmc6dmFyKC0tzrQzKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwOnNtIl17cGFkZGluZzp2YXIoLS3OtDQpIWltcG9ydGFudH1bY2RzLWxheW91dH49InA6bWQiXXtwYWRkaW5nOnZhcigtLc60NSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibTptZCJd'@;
put 'e21hcmdpbjp2YXIoLS3OtDUpIWltcG9ydGFudH1bY2RzLWxheW91dH49InA6bGciXXtwYWRkaW5nOnZhcigtLc60NikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC15OnhzIl17cGFkZGluZy10b3A6dmFyKC0tzrQzKSFpbXBvcnRhbnQ7cGFkZGluZy1ib3R0b206dmFyKC0tzrQzKSFpbXBv'@;
put 'cnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXg6bGciXXtwYWRkaW5nLWxlZnQ6dmFyKC0tzrQ2KSFpbXBvcnRhbnQ7cGFkZGluZy1yaWdodDp2YXIoLS3OtDYpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteTpsZyJde3BhZGRpbmctdG9wOnZhcigtLc60NikhaW1wb3J0YW50O3BhZGRpbmctYm90'@;
put 'dG9tOnZhcigtLc60NikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1sOm1kIl17cGFkZGluZy1sZWZ0OnZhcigtLc60NSkhaW1wb3J0YW50fUBtZWRpYSAobWluLXdpZHRoOjk5MnB4KXtbY2RzLWxheW91dCo9ImdhcEBtZDpsZyJde2dhcDp2YXIoLS3OtDYpfVtjZHMtbGF5b3V0fj0icEBt'@;
put 'ZDpsZyJde3BhZGRpbmc6dmFyKC0tzrQ2KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtQG1kOnhsIl17bWFyZ2luOnZhcigtLc60NykhaW1wb3J0YW50fX1bY2RzLWxheW91dH49ZmlsbF17d2lkdGg6MTAwJSFpbXBvcnRhbnR9Kiw6YWZ0ZXIsOmJlZm9yZXtib3gtc2l6aW5nOmJvcmRlci1i'@;
put 'b3h9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbjpob3Jpem9udGFsLXN0cmV0Y2giXT46OnNsb3R0ZWQoKiksW2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbjpzdHJldGNoIl0+OjpzbG90dGVkKCopLFtjZHMtbGF5b3V0fj12ZXJ0'@;
put 'aWNhbF1bY2RzLWxheW91dCo9ImFsaWduOnN0cmV0Y2giXT46OnNsb3R0ZWQoKil7ZmxleC1ncm93OjF9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbjpjZW50ZXIiXSksW2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlv'@;
put 'dXQqPSJhbGlnbjp2ZXJ0aWNhbC1jZW50ZXIiXSl7bWFyZ2luLXRvcDphdXRvO21hcmdpbi1ib3R0b206YXV0b31bY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduOmNlbnRlciJdKSxbY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2Rz'@;
put 'LWxheW91dCo9ImFsaWduOmhvcml6b250YWwtY2VudGVyIl0pe2FsaWduLXNlbGY6Y2VudGVyfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ246dG9wIl0pe21hcmdpbi1ib3R0b206YXV0byFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PXZlcnRpY2Fs'@;
put 'XSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbjpib3R0b20iXSl7bWFyZ2luLXRvcDphdXRvIWltcG9ydGFudH1bY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduOnJpZ2h0Il0pe21hcmdpbi1sZWZ0OmF1dG99W2Nkcy1sYXlvdXR+PXZlcnRp'@;
put 'Y2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbjpsZWZ0Il0pLFtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbjpsZWZ0Il17bWFyZ2luLXJpZ2h0OmF1dG99QG1lZGlhIChtaW4td2lkdGg6NTc2cHgpe1tjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90'@;
put 'dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AeHM6Y2VudGVyIl0pLFtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AeHM6dmVydGljYWwtY2VudGVyIl0pe21hcmdpbi10b3A6YXV0bzttYXJnaW4tYm90dG9tOmF1dG99W2Nkcy1sYXlvdXR+PXZlcnRp'@;
put 'Y2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkB4czpjZW50ZXIiXSksW2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkB4czpob3Jpem9udGFsLWNlbnRlciJdKXthbGlnbi1zZWxmOmNlbnRlcn1bY2RzLWxheW91dH49dmVydGljYWxd'@;
put 'IDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHhzOnRvcCJdKXttYXJnaW4tYm90dG9tOmF1dG8haW1wb3J0YW50fVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AeHM6Ym90dG9tIl0pe21hcmdpbi10b3A6YXV0byFpbXBvcnRhbnR9W2Nk'@;
put 'cy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkB4czpyaWdodCJdKXttYXJnaW4tbGVmdDphdXRvfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AeHM6bGVmdCJdKXttYXJnaW4tcmlnaHQ6YXV0b319QG1l'@;
put 'ZGlhIChtaW4td2lkdGg6NzY4cHgpe1tjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25Ac206Y2VudGVyIl0pLFtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25Ac206dmVydGljYWwtY2VudGVyIl0pe21h'@;
put 'cmdpbi10b3A6YXV0bzttYXJnaW4tYm90dG9tOmF1dG99W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBzbTpjZW50ZXIiXSksW2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBzbTpob3Jpem9udGFs'@;
put 'LWNlbnRlciJdKXthbGlnbi1zZWxmOmNlbnRlcn1bY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHNtOnRvcCJdKXttYXJnaW4tYm90dG9tOmF1dG8haW1wb3J0YW50fVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0'@;
put 'Kj0iYWxpZ25Ac206Ym90dG9tIl0pe21hcmdpbi10b3A6YXV0byFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBzbTpyaWdodCJdKXttYXJnaW4tbGVmdDphdXRvfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtj'@;
put 'ZHMtbGF5b3V0Kj0iYWxpZ25Ac206bGVmdCJdKXttYXJnaW4tcmlnaHQ6YXV0b319QG1lZGlhIChtaW4td2lkdGg6OTkycHgpe1tjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6Y2VudGVyIl0pLFtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpz'@;
put 'bG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6dmVydGljYWwtY2VudGVyIl0pe21hcmdpbi10b3A6YXV0bzttYXJnaW4tYm90dG9tOmF1dG99W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBtZDpjZW50ZXIiXSksW2Nkcy1sYXlvdXR+PXZl'@;
put 'cnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBtZDpob3Jpem9udGFsLWNlbnRlciJdKXthbGlnbi1zZWxmOmNlbnRlcn1bY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQG1kOnRvcCJdKXttYXJnaW4tYm90dG9tOmF1dG8haW1w'@;
put 'b3J0YW50fVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6Ym90dG9tIl0pe21hcmdpbi10b3A6YXV0byFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBtZDpyaWdodCJdKXtt'@;
put 'YXJnaW4tbGVmdDphdXRvfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6bGVmdCJdKXttYXJnaW4tcmlnaHQ6YXV0b319QG1lZGlhIChtaW4td2lkdGg6MTIwMHB4KXtbY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2RzLWxh'@;
put 'eW91dCo9ImFsaWduQGxnOmNlbnRlciJdKSxbY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQGxnOnZlcnRpY2FsLWNlbnRlciJdKXttYXJnaW4tdG9wOmF1dG87bWFyZ2luLWJvdHRvbTphdXRvfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90'@;
put 'dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AbGc6Y2VudGVyIl0pLFtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AbGc6aG9yaXpvbnRhbC1jZW50ZXIiXSl7YWxpZ24tc2VsZjpjZW50ZXJ9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQo'@;
put 'W2Nkcy1sYXlvdXQqPSJhbGlnbkBsZzp0b3AiXSl7bWFyZ2luLWJvdHRvbTphdXRvIWltcG9ydGFudH1bY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQGxnOmJvdHRvbSJdKXttYXJnaW4tdG9wOmF1dG8haW1wb3J0YW50fVtjZHMtbGF5b3V0fj12'@;
put 'ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AbGc6cmlnaHQiXSl7bWFyZ2luLWxlZnQ6YXV0b31bY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQGxnOmxlZnQiXSl7bWFyZ2luLXJpZ2h0OmF1dG99fUBtZWRpYSAobWluLXdp'@;
put 'ZHRoOjE0NDBweCl7W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkB4bDpjZW50ZXIiXSksW2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkB4bDp2ZXJ0aWNhbC1jZW50ZXIiXSl7bWFyZ2luLXRvcDph'@;
put 'dXRvO21hcmdpbi1ib3R0b206YXV0b31bY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHhsOmNlbnRlciJdKSxbY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHhsOmhvcml6b250YWwtY2VudGVyIl0p'@;
put 'e2FsaWduLXNlbGY6Y2VudGVyfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AeGw6dG9wIl0pe21hcmdpbi1ib3R0b206YXV0byFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkB4'@;
put 'bDpib3R0b20iXSl7bWFyZ2luLXRvcDphdXRvIWltcG9ydGFudH1bY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHhsOnJpZ2h0Il0pe21hcmdpbi1sZWZ0OmF1dG99W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQq'@;
put 'PSJhbGlnbkB4bDpsZWZ0Il0pe21hcmdpbi1yaWdodDphdXRvfX1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ246Y2VudGVyIl0pLFtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbjp2ZXJ0aWNh'@;
put 'bC1jZW50ZXIiXSl7YWxpZ24tc2VsZjpjZW50ZXJ9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduOmNlbnRlciJdKSxbY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ246aG9yaXpvbnRhbC1jZW50'@;
put 'ZXIiXSl7bWFyZ2luLWxlZnQ6YXV0byFpbXBvcnRhbnQ7bWFyZ2luLXJpZ2h0OmF1dG8haW1wb3J0YW50fVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbjp0b3AiXSl7YWxpZ24tc2VsZjpmbGV4LXN0YXJ0fVtjZHMtbGF5b3V0fj1ob3Jpem9u'@;
put 'dGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbjpib3R0b20iXSl7YWxpZ24tc2VsZjpmbGV4LWVuZH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ246cmlnaHQiXSl7bWFyZ2luLWxlZnQ6YXV0byFpbXBvcnRhbnR9W2Nkcy1sYXlv'@;
put 'dXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduOmxlZnQiXSl7bWFyZ2luLXJpZ2h0OmF1dG8haW1wb3J0YW50fUBtZWRpYSAobWluLXdpZHRoOjU3NnB4KXtbY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AeHM6'@;
put 'Y2VudGVyIl0pLFtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkB4czp2ZXJ0aWNhbC1jZW50ZXIiXSl7YWxpZ24tc2VsZjpjZW50ZXJ9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHhzOmNl'@;
put 'bnRlciJdKSxbY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AeHM6aG9yaXpvbnRhbC1jZW50ZXIiXSl7bWFyZ2luLWxlZnQ6YXV0byFpbXBvcnRhbnQ7bWFyZ2luLXJpZ2h0OmF1dG8haW1wb3J0YW50fVtjZHMtbGF5b3V0fj1ob3Jpem9udGFs'@;
put 'XSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkB4czp0b3AiXSl7YWxpZ24tc2VsZjpmbGV4LXN0YXJ0fVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkB4czpib3R0b20iXSl7YWxpZ24tc2VsZjpmbGV4LWVuZH1bY2RzLWxheW91dH49'@;
put 'aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AeHM6cmlnaHQiXSl7bWFyZ2luLWxlZnQ6YXV0byFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHhzOmxlZnQiXSl7bWFyZ2luLXJpZ2h0OmF1dG8h'@;
put 'aW1wb3J0YW50fX1AbWVkaWEgKG1pbi13aWR0aDo3NjhweCl7W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHNtOmNlbnRlciJdKSxbY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25Ac206dmVy'@;
put 'dGljYWwtY2VudGVyIl0pe2FsaWduLXNlbGY6Y2VudGVyfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBzbTpjZW50ZXIiXSksW2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHNtOmhvcml6'@;
put 'b250YWwtY2VudGVyIl0pe21hcmdpbi1sZWZ0OmF1dG8haW1wb3J0YW50O21hcmdpbi1yaWdodDphdXRvIWltcG9ydGFudH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25Ac206dG9wIl0pe2FsaWduLXNlbGY6ZmxleC1zdGFydH1bY2RzLWxh'@;
put 'eW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25Ac206Ym90dG9tIl0pe2FsaWduLXNlbGY6ZmxleC1lbmR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHNtOnJpZ2h0Il0pe21hcmdpbi1sZWZ0OmF1dG8h'@;
put 'aW1wb3J0YW50fVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBzbTpsZWZ0Il0pe21hcmdpbi1yaWdodDphdXRvIWltcG9ydGFudH19QG1lZGlhIChtaW4td2lkdGg6OTkycHgpe1tjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQo'@;
put 'W2Nkcy1sYXlvdXQqPSJhbGlnbkBtZDpjZW50ZXIiXSksW2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQG1kOnZlcnRpY2FsLWNlbnRlciJdKXthbGlnbi1zZWxmOmNlbnRlcn1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtj'@;
put 'ZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6Y2VudGVyIl0pLFtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBtZDpob3Jpem9udGFsLWNlbnRlciJdKXttYXJnaW4tbGVmdDphdXRvIWltcG9ydGFudDttYXJnaW4tcmlnaHQ6YXV0byFpbXBvcnRhbnR9'@;
put 'W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQG1kOnRvcCJdKXthbGlnbi1zZWxmOmZsZXgtc3RhcnR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQG1kOmJvdHRvbSJdKXthbGlnbi1zZWxm'@;
put 'OmZsZXgtZW5kfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBtZDpyaWdodCJdKXttYXJnaW4tbGVmdDphdXRvIWltcG9ydGFudH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6bGVm'@;
put 'dCJdKXttYXJnaW4tcmlnaHQ6YXV0byFpbXBvcnRhbnR9fUBtZWRpYSAobWluLXdpZHRoOjEyMDBweCl7W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQGxnOmNlbnRlciJdKSxbY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtj'@;
put 'ZHMtbGF5b3V0Kj0iYWxpZ25AbGc6dmVydGljYWwtY2VudGVyIl0pe2FsaWduLXNlbGY6Y2VudGVyfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBsZzpjZW50ZXIiXSksW2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2Rz'@;
put 'LWxheW91dCo9ImFsaWduQGxnOmhvcml6b250YWwtY2VudGVyIl0pe21hcmdpbi1sZWZ0OmF1dG8haW1wb3J0YW50O21hcmdpbi1yaWdodDphdXRvIWltcG9ydGFudH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AbGc6dG9wIl0pe2FsaWdu'@;
put 'LXNlbGY6ZmxleC1zdGFydH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AbGc6Ym90dG9tIl0pe2FsaWduLXNlbGY6ZmxleC1lbmR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQGxnOnJp'@;
put 'Z2h0Il0pe21hcmdpbi1sZWZ0OmF1dG8haW1wb3J0YW50fVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBsZzpsZWZ0Il0pe21hcmdpbi1yaWdodDphdXRvIWltcG9ydGFudH19QG1lZGlhIChtaW4td2lkdGg6MTQ0MHB4KXtbY2RzLWxheW91'@;
put 'dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AeGw6Y2VudGVyIl0pLFtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkB4bDp2ZXJ0aWNhbC1jZW50ZXIiXSl7YWxpZ24tc2VsZjpjZW50ZXJ9W2Nkcy1sYXlvdXR+'@;
put 'PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHhsOmNlbnRlciJdKSxbY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AeGw6aG9yaXpvbnRhbC1jZW50ZXIiXSl7bWFyZ2luLWxlZnQ6YXV0byFpbXBvcnRhbnQ7bWFy'@;
put 'Z2luLXJpZ2h0OmF1dG8haW1wb3J0YW50fVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkB4bDp0b3AiXSl7YWxpZ24tc2VsZjpmbGV4LXN0YXJ0fVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGln'@;
put 'bkB4bDpib3R0b20iXSl7YWxpZ24tc2VsZjpmbGV4LWVuZH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AeGw6cmlnaHQiXSl7bWFyZ2luLWxlZnQ6YXV0byFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChb'@;
put 'Y2RzLWxheW91dCo9ImFsaWduQHhsOmxlZnQiXSl7bWFyZ2luLXJpZ2h0OmF1dG8haW1wb3J0YW50fX1bY2RzLXRleHRde2ZvbnQtZmFtaWx5OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1mb250LWZhbWlseSwgIkNsYXJpdHkgQ2l0eSIsICJBdmVuaXIgTmV4dCIsIHNhbnMtc2VyaWYp'@;
put 'O21hcmdpbi10b3A6MDttYXJnaW4tYm90dG9tOjB9W2Nkcy10ZXh0XVtjZHMtbGF5b3V0fj1ncmlkXTo6YWZ0ZXIsW2Nkcy10ZXh0XVtjZHMtbGF5b3V0fj1ncmlkXTo6YmVmb3JlLFtjZHMtdGV4dF1bY2RzLWxheW91dH49aG9yaXpvbnRhbF06OmFmdGVyLFtjZHMtdGV4dF1bY2RzLWxheW91'@;
put 'dH49aG9yaXpvbnRhbF06OmJlZm9yZSxbY2RzLXRleHRdW2Nkcy1sYXlvdXR+PXZlcnRpY2FsXTo6YWZ0ZXIsW2Nkcy10ZXh0XVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF06OmJlZm9yZXtkaXNwbGF5Om5vbmV9W2Nkcy10ZXh0Kj1kaXNwbGF5XSxbY2RzLXRleHQqPXNlY3Rpb25dLFtjZHMtdGV4'@;
put 'dCo9c3Vic2VjdGlvbl0sW2Nkcy10ZXh0Kj10aXRsZV17Zm9udC1mYW1pbHk6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWhlYWRlci1mb250LWZhbWlseSwgIkNsYXJpdHkgQ2l0eSIsICJBdmVuaXIgTmV4dCIsIHNhbnMtc2VyaWYpO2NvbG9yOnZhcigtLWNkcy1nbG9iYWwtdHlwb2dy'@;
put 'YXBoeS1jb2xvci00MDAsdmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tOTAwLCMyMTMzM2IpKX1bY2RzLXRleHQqPWJvZHldLFtjZHMtdGV4dCo9bWVzc2FnZV0sW2Nkcy10ZXh0Kj1zZWNvbmRhcnlde2NvbG9yOnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1jb2xvci01'@;
put 'MDAsdmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibGFjaywjMDAwKSl9W2Nkcy10ZXh0Kj1pbmxpbmVde3dpZHRoOmF1dG8haW1wb3J0YW50O2Rpc3BsYXk6aW5saW5lLWJsb2NrIWltcG9ydGFudH1bY2RzLXRleHQqPWRpc3BsYXlde2ZvbnQtc2l6ZTp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFw'@;
put 'aHktZGlzcGxheS1mb250LXNpemUsY2FsYyg0MCAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWRpc3BsYXktZm9udC13ZWlnaHQsNTAwKTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9n'@;
put 'cmFwaHktZGlzcGxheS1saW5lLWhlaWdodCwxLjFlbSk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWRpc3BsYXktbGV0dGVyLXNwYWNpbmcsLS4wMTI1ZW0pfVtjZHMtdGV4dCo9ZGlzcGxheV06OmJlZm9yZXtjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7aGVp'@;
put 'Z2h0OjA7d2lkdGg6MDttYXJnaW4tYm90dG9tOmNhbGMoKCh2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdG9wLWdhcC1oZWlnaHQsLjE0NzVlbSkgKyBjYWxjKCh2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktZGlzcGxheS1saW5lLWhlaWdodCwxLjFlbSkgLSAxZW0pLyAyKSkqLTEp'@;
put 'ICsgLjAzN2VtKX1bY2RzLXRleHQqPWRpc3BsYXldOjphZnRlcntjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjA7d2lkdGg6MDttYXJnaW4tdG9wOmNhbGMoKCgoMWVtIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRvcC1nYXAtaGVpZ2h0LC4xNDc1ZW0pIC0gdmFyKC0t'@;
put 'Y2RzLWdsb2JhbC10eXBvZ3JhcGh5LWFzY2VuZGVyLWhlaWdodCwuMTcwM2VtKSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS14LWhlaWdodCwuNTE3ZW0pKSArIGNhbGMoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1kaXNwbGF5LWxpbmUtaGVpZ2h0LDEuMWVtKSAtIDFlbSkv'@;
put 'IDIpKSotMSkgLSAuMDQ0ZW0pfVtjZHMtdGV4dCo9dGl0bGVde2ZvbnQtc2l6ZTp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdGl0bGUtZm9udC1zaXplLGNhbGMoMjQgKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkpO2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1nbG9iYWwt'@;
put 'dHlwb2dyYXBoeS10aXRsZS1mb250LXdlaWdodCw1MDApO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10aXRsZS1saW5lLWhlaWdodCwxLjMzMzMzM2VtKTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdGl0bGUtbGV0dGVyLXNwYWNp'@;
put 'bmcsLS4wMDgzMzMzM2VtKX1bY2RzLXRleHQqPXRpdGxlXTo6YmVmb3Jle2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3aWR0aDowO21hcmdpbi1ib3R0b206Y2FsYygoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCwuMTQ3NWVtKSArIGNhbGMo'@;
put 'KHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10aXRsZS1saW5lLWhlaWdodCwxLjMzMzMzM2VtKSAtIDFlbSkvIDIpKSotMSkgKyAuMDM3ZW0pfVtjZHMtdGV4dCo9dGl0bGVdOjphZnRlcntjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjA7d2lkdGg6MDttYXJnaW4tdG9wOmNh'@;
put 'bGMoKCgoMWVtIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRvcC1nYXAtaGVpZ2h0LC4xNDc1ZW0pIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWFzY2VuZGVyLWhlaWdodCwuMTcwM2VtKSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS14LWhlaWdodCwuNTE3ZW0p'@;
put 'KSArIGNhbGMoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10aXRsZS1saW5lLWhlaWdodCwxLjMzMzMzM2VtKSAtIDFlbSkvIDIpKSotMSkgLSAuMDQ0ZW0pfVtjZHMtdGV4dCo9c2VjdGlvbl17Zm9udC1zaXplOnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1zZWN0aW9uLWZvbnQt'@;
put 'c2l6ZSxjYWxjKDIwICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwyMCkpKTtmb250LXdlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktc2VjdGlvbi1mb250LXdlaWdodCw1MDApO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1zZWN0aW9uLWxp'@;
put 'bmUtaGVpZ2h0LDEuMmVtKTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktc2VjdGlvbi1sZXR0ZXItc3BhY2luZywtLjAxZW0pfVtjZHMtdGV4dCo9c2VjdGlvbl06OmJlZm9yZXtjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjA7d2lkdGg6MDttYXJn'@;
put 'aW4tYm90dG9tOmNhbGMoKCh2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdG9wLWdhcC1oZWlnaHQsLjE0NzVlbSkgKyBjYWxjKCh2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktc2VjdGlvbi1saW5lLWhlaWdodCwxLjJlbSkgLSAxZW0pLyAyKSkqLTEpICsgLjAzN2VtKX1bY2RzLXRl'@;
put 'eHQqPXNlY3Rpb25dOjphZnRlcntjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjA7d2lkdGg6MDttYXJnaW4tdG9wOmNhbGMoKCgoMWVtIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRvcC1nYXAtaGVpZ2h0LC4xNDc1ZW0pIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3Jh'@;
put 'cGh5LWFzY2VuZGVyLWhlaWdodCwuMTcwM2VtKSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS14LWhlaWdodCwuNTE3ZW0pKSArIGNhbGMoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1zZWN0aW9uLWxpbmUtaGVpZ2h0LDEuMmVtKSAtIDFlbSkvIDIpKSotMSkgLSAuMDQ0ZW0p'@;
put 'fVtjZHMtdGV4dCo9c3Vic2VjdGlvbl17Zm9udC1zaXplOnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1zdWJzZWN0aW9uLWZvbnQtc2l6ZSxjYWxjKDE2ICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwyMCkpKTtmb250LXdlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFw'@;
put 'aHktc3Vic2VjdGlvbi1mb250LXdlaWdodCw1MDApO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1zdWJzZWN0aW9uLWxpbmUtaGVpZ2h0LDEuNWVtKTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktc3Vic2VjdGlvbi1sZXR0ZXItc3Bh'@;
put 'Y2luZywtLjAxMjVlbSl9W2Nkcy10ZXh0Kj1zdWJzZWN0aW9uXTo6YmVmb3Jle2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3aWR0aDowO21hcmdpbi1ib3R0b206Y2FsYygoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCwuMTQ3NWVtKSArIGNh'@;
put 'bGMoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1zdWJzZWN0aW9uLWxpbmUtaGVpZ2h0LDEuNWVtKSAtIDFlbSkvIDIpKSotMSkgKyAuMDM3ZW0pfVtjZHMtdGV4dCo9c3Vic2VjdGlvbl06OmFmdGVye2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3aWR0aDowO21hcmdp'@;
put 'bi10b3A6Y2FsYygoKCgxZW0gLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdG9wLWdhcC1oZWlnaHQsLjE0NzVlbSkgLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktYXNjZW5kZXItaGVpZ2h0LC4xNzAzZW0pIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXgtaGVpZ2h0'@;
put 'LC41MTdlbSkpICsgY2FsYygodmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXN1YnNlY3Rpb24tbGluZS1oZWlnaHQsMS41ZW0pIC0gMWVtKS8gMikpKi0xKSAtIC4wNDRlbSl9W2Nkcy10ZXh0Kj1ib2R5XXtmb250LXdlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktYm9keS1m'@;
put 'b250LXdlaWdodCw0MDApO2ZvbnQtc2l6ZTp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktYm9keS1mb250LXNpemUsY2FsYygxNCAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWJvZHktbGV0'@;
put 'dGVyLXNwYWNpbmcsLS4wMDcxNDI4NmVtKTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktYm9keS1saW5lLWhlaWdodCwxLjQyODU3MTRlbSl9W2Nkcy10ZXh0Kj1ib2R5XTo6YmVmb3Jle2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3aWR0aDowO21h'@;
put 'cmdpbi1ib3R0b206Y2FsYygoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCwuMTQ3NWVtKSArIGNhbGMoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1ib2R5LWxpbmUtaGVpZ2h0LDEuNDI4NTcxNGVtKSAtIDFlbSkvIDIpKSotMSkgKyAuMWVtKX1bY2Rz'@;
put 'LXRleHQqPWJvZHldOjphZnRlcntjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjA7d2lkdGg6MDttYXJnaW4tdG9wOmNhbGMoKCgoMWVtIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRvcC1nYXAtaGVpZ2h0LC4xNDc1ZW0pIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3Jh'@;
put 'cGh5LWFzY2VuZGVyLWhlaWdodCwuMTcwM2VtKSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS14LWhlaWdodCwuNTE3ZW0pKSArIGNhbGMoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1ib2R5LWxpbmUtaGVpZ2h0LDEuNDI4NTcxNGVtKSAtIDFlbSkvIDIpKSotMSkgLSAuMDQ0'@;
put 'ZW0pfWJvZHlbY2RzLXRleHQqPWJvZHldOjphZnRlcixib2R5W2Nkcy10ZXh0Kj1ib2R5XTo6YmVmb3Jle2NvbnRlbnQ6bm9uZX1bY2RzLXRleHQqPW1lc3NhZ2Vde2ZvbnQtc2l6ZTp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktbWVzc2FnZS1mb250LXNpemUsY2FsYygxNiAqIDFyZW0g'@;
put 'LyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LW1lc3NhZ2UtZm9udC13ZWlnaHQsY2FsYyg0MDAgKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkpO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwt'@;
put 'dHlwb2dyYXBoeS1tZXNzYWdlLWxpbmUtaGVpZ2h0LDEuNWVtKTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktbWVzc2FnZS1sZXR0ZXItc3BhY2luZywtLjAxMjVlbSl9W2Nkcy10ZXh0Kj1tZXNzYWdlXTo6YmVmb3Jle2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9j'@;
put 'aztoZWlnaHQ6MDt3aWR0aDowO21hcmdpbi1ib3R0b206Y2FsYygoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCwuMTQ3NWVtKSArIGNhbGMoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1tZXNzYWdlLWxpbmUtaGVpZ2h0LDEuNWVtKSAtIDFlbSkvIDIp'@;
put 'KSotMSkgKyAuMDM3ZW0pfVtjZHMtdGV4dCo9bWVzc2FnZV06OmFmdGVye2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3aWR0aDowO21hcmdpbi10b3A6Y2FsYygoKCgxZW0gLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdG9wLWdhcC1oZWlnaHQsLjE0NzVlbSkgLSB2'@;
put 'YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktYXNjZW5kZXItaGVpZ2h0LC4xNzAzZW0pIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXgtaGVpZ2h0LC41MTdlbSkpICsgY2FsYygodmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LW1lc3NhZ2UtbGluZS1oZWlnaHQsMS41ZW0pIC0g'@;
put 'MWVtKS8gMikpKi0xKSAtIC4wNDRlbSl9W2Nkcy10ZXh0Kj1zZWNvbmRhcnlde2ZvbnQtc2l6ZTp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWZvbnQtc2l6ZSxjYWxjKDEzICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwyMCkpKTtmb250LXdlaWdodDp2YXIo'@;
put 'LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWZvbnQtd2VpZ2h0LDQwMCk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXNlY29uZGFyeS1saW5lLWhlaWdodCwxLjIzMDc3ZW0pO2xldHRlci1zcGFjaW5nOnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBo'@;
put 'eS1zZWNvbmRhcnktbGV0dGVyLXNwYWNpbmcsLS4wMDc2OTJlbSl9W2Nkcy10ZXh0Kj1zZWNvbmRhcnldOjpiZWZvcmV7Y29udGVudDoiIjtkaXNwbGF5OmJsb2NrO2hlaWdodDowO3dpZHRoOjA7bWFyZ2luLWJvdHRvbTpjYWxjKCgodmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRvcC1n'@;
put 'YXAtaGVpZ2h0LC4xNDc1ZW0pICsgY2FsYygodmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXNlY29uZGFyeS1saW5lLWhlaWdodCwxLjIzMDc3ZW0pIC0gMWVtKS8gMikpKi0xKSArIC4wMzdlbSl9W2Nkcy10ZXh0Kj1zZWNvbmRhcnldOjphZnRlcntjb250ZW50OiIiO2Rpc3BsYXk6Ymxv'@;
put 'Y2s7aGVpZ2h0OjA7d2lkdGg6MDttYXJnaW4tdG9wOmNhbGMoKCgoMWVtIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRvcC1nYXAtaGVpZ2h0LC4xNDc1ZW0pIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWFzY2VuZGVyLWhlaWdodCwuMTcwM2VtKSAtIHZhcigtLWNkcy1n'@;
put 'bG9iYWwtdHlwb2dyYXBoeS14LWhlaWdodCwuNTE3ZW0pKSArIGNhbGMoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1zZWNvbmRhcnktbGluZS1oZWlnaHQsMS4yMzA3N2VtKSAtIDFlbSkvIDIpKSotMSkgLSAuMDQ0ZW0pfVtjZHMtdGV4dH49bGlua117Y29sb3I6dmFyKC0tY2RzLWds'@;
put 'b2JhbC10eXBvZ3JhcGh5LWxpbmstY29sb3IsdmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTcwMCwjMDA3OWFkKSkhaW1wb3J0YW50O3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmUhaW1wb3J0YW50O2xpbmUtaGVpZ2h0OmluaGVyaXQhaW1wb3J0YW50O2ZvbnQtc2l6ZTppbmhlcml0IWlt'@;
put 'cG9ydGFudH1bY2RzLXRleHR+PWxpbmtdOmZvY3Vze291dGxpbmU6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1vdXRsaW5lLEhpZ2hsaWdodCBzb2xpZCAycHgpO291dGxpbmUtb2Zmc2V0OnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tb3V0bGluZS1vZmZz'@;
put 'ZXQsMXB4KX1bY2RzLXRleHR+PWxpbmtdOmhvdmVye2NvbG9yOnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1saW5rLWNvbG9yLWhvdmVyLHZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS04MDAsIzAwNjA4YSkpIWltcG9ydGFudH1bY2RzLXRleHR+PWxpbmtdOnZpc2l0ZWQ6bm90KFtj'@;
put 'ZHMtdGV4dH49c3RhdGljXSl7Y29sb3I6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWxpbmstY29sb3ItdmlzaXRlZCx2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWxhdmVuZGVyLTYwMCwjM2I0MGNlKSkhaW1wb3J0YW50fVtjZHMtdGV4dH49bGlua106dmlzaXRlZDpub3QoW2Nkcy10ZXh0'@;
put 'fj1zdGF0aWNdKTpob3Zlcntjb2xvcjp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktbGluay1jb2xvci12aXNpdGVkLWhvdmVyLHZhcigtLWNkcy1nbG9iYWwtY29sb3ItbGF2ZW5kZXItNzAwLCMyNDI5YzIpKSFpbXBvcnRhbnR9QG1lZGlhICgtd2Via2l0LW1pbi1kZXZpY2UtcGl4ZWwt'@;
put 'cmF0aW86MCl7W2Nkcy10ZXh0PWxpbmtdOmZvY3Vze291dGxpbmU6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1vdXRsaW5lLXdlYmtpdCw1cHggYXV0byAtd2Via2l0LWZvY3VzLXJpbmctY29sb3IpfX1bY2RzLXRleHR+PWNvZGVde2NvbG9yOnZhcigtLWNkcy1hbGlhcy1z'@;
put 'dGF0dXMtZGFuZ2VyLHZhcigtLWNkcy1nbG9iYWwtY29sb3ItcmVkLTcwMCwjZTAyMjAwKSk7Zm9udC1mYW1pbHk6bW9ub3NwYWNlfVtjZHMtZGl2aWRlcl17ZGlzcGxheTpibG9jaztoZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItd2lkdGgtMTAwLGNhbGMoMSAqIDFyZW0g'@;
put 'LyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSk7b3ZlcmZsb3c6aGlkZGVuO2JveC1zaGFkb3c6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItY29sb3IsdmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tMjAwLCNjYmQ0ZDgpKSAwIDAgMCB2YXIoLS1jZHMtYWxpYXMt'@;
put 'b2JqZWN0LWJvcmRlci13aWR0aC0xMDAsY2FsYygxICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwyMCkpKSBpbnNldH1bY2RzLXRleHR+PWxpZ2h0XXtmb250LXdlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktZm9udC13ZWlnaHQtbGlnaHQsMzAwKSFpbXBvcnRhbnR9'@;
put 'W2Nkcy10ZXh0fj1qdXN0aWZ5XXt0ZXh0LWFsaWduOmp1c3RpZnkhaW1wb3J0YW50fVtjZHMtdGV4dH49bGVmdF17dGV4dC1hbGlnbjpsZWZ0IWltcG9ydGFudH1bY2RzLXRleHR+PXJpZ2h0XXt0ZXh0LWFsaWduOnJpZ2h0IWltcG9ydGFudH1bY2RzLXRleHR+PWNlbnRlcl17dGV4dC1hbGln'@;
put 'bjpjZW50ZXIhaW1wb3J0YW50fVtjZHMtdGV4dH49bGhlXXtwYWRkaW5nOi4wNXB4IDB9W2Nkcy10ZXh0fj1saGVdOjpiZWZvcmV7Y29udGVudDoiIjttYXJnaW4tdG9wOi0uMTI0ZW07ZGlzcGxheTpibG9jaztoZWlnaHQ6MH1bY2RzLXRleHR+PWxoZV06OmFmdGVye2NvbnRlbnQ6IiI7bWFy'@;
put 'Z2luLWJvdHRvbTotLjIyMWVtO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjB9W2Nkcy10ZXh0Kj1oMl0sW2Nkcy10ZXh0Kj1oM117Zm9udC1mYW1pbHk6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWhlYWRlci1mb250LWZhbWlseSwgIkNsYXJpdHkgQ2l0eSIsICJBdmVuaXIgTmV4dCIsIHNh'@;
put 'bnMtc2VyaWYpO2ZvbnQtc2l6ZToxLjRyZW07Zm9udC13ZWlnaHQ6MjAwO2NvbG9yOnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1jb2xvci00MDApO2xpbmUtaGVpZ2h0OjEuNzE0M2VtO2xldHRlci1zcGFjaW5nOi0uMDE3ODU3ZW19W2Nkcy10ZXh0Kj1oMl06OmJlZm9yZXtjb250ZW50'@;
put 'OiIiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjA7d2lkdGg6MDttYXJnaW4tYm90dG9tOmNhbGMoKCh2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdG9wLWdhcC1oZWlnaHQsLjE0NzVlbSkgKyBjYWxjKCgxLjcxNDNlbSAtIDFlbSkvIDIpKSotMSkgKyAuMDM3ZW0pfVtjZHMtdGV4dCo9aDJd'@;
put 'OjphZnRlcntjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjA7d2lkdGg6MDttYXJnaW4tdG9wOmNhbGMoKCgoMWVtIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRvcC1nYXAtaGVpZ2h0LC4xNDc1ZW0pIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWFzY2VuZGVy'@;
put 'LWhlaWdodCwuMTcwM2VtKSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS14LWhlaWdodCwuNTE3ZW0pKSArIGNhbGMoKDEuNzE0M2VtIC0gMWVtKS8gMikpKi0xKSAtIC4wNDRlbSl9W2Nkcy10ZXh0Kj1oM117Zm9udC1zaXplOjEuMXJlbTtsaW5lLWhlaWdodDoxLjA5MDllbTtsZXR0'@;
put 'ZXItc3BhY2luZzotLjAxMzYzNmVtfVtjZHMtdGV4dCo9aDNdOjpiZWZvcmV7Y29udGVudDoiIjtkaXNwbGF5OmJsb2NrO2hlaWdodDowO3dpZHRoOjA7bWFyZ2luLWJvdHRvbTpjYWxjKCgodmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRvcC1nYXAtaGVpZ2h0LC4xNDc1ZW0pICsgY2Fs'@;
put 'YygoMS4wOTA5ZW0gLSAxZW0pLyAyKSkqLTEpICsgLjAzN2VtKX1bY2RzLXRleHQqPWgzXTo6YWZ0ZXJ7Y29udGVudDoiIjtkaXNwbGF5OmJsb2NrO2hlaWdodDowO3dpZHRoOjA7bWFyZ2luLXRvcDpjYWxjKCgoKDFlbSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhl'@;
put 'aWdodCwuMTQ3NWVtKSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1hc2NlbmRlci1oZWlnaHQsLjE3MDNlbSkgLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHkteC1oZWlnaHQsLjUxN2VtKSkgKyBjYWxjKCgxLjA5MDllbSAtIDFlbSkvIDIpKSotMSkgLSAuMDQ0ZW0pfTpob3N0'@;
put 'e2FsbDppbml0aWFsO2Rpc3BsYXk6YmxvY2s7dmlzaWJpbGl0eTppbmhlcml0O2ZvbnQtZmFtaWx5OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1mb250LWZhbWlseSwgIkNsYXJpdHkgQ2l0eSIsICJBdmVuaXIgTmV4dCIsIHNhbnMtc2VyaWYpO2NvbnRhaW46bGF5b3V0O2JveC1zaXpp'@;
put 'bmc6Ym9yZGVyLWJveCFpbXBvcnRhbnQ7LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmUhaW1wb3J0YW50fSosOmFmdGVyLDpiZWZvcmV7Ym94LXNpemluZzppbmhlcml0IWltcG9ydGFudH1zbG90e2ZvbnQtZmFtaWx5OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1mb250LWZhbWlseSwgIkNs'@;
put 'YXJpdHkgQ2l0eSIsICJBdmVuaXIgTmV4dCIsIHNhbnMtc2VyaWYpO2Rpc3BsYXk6Y29udGVudHMhaW1wb3J0YW50fTo6c2xvdHRlZCgqKXtmb250LWZhbWlseTppbmhlcml0O2JveC1zaXppbmc6aW5oZXJpdH06OnNsb3R0ZWQoKik6OnBsYWNlaG9sZGVye2NvbG9yOnZhcigtLWNkcy1nbG9i'@;
put 'YWwtdHlwb2dyYXBoeS1jb2xvci0yMDAsdmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tNjAwLCM0ZjYxNjkpKX06aG9zdChbX2lzLWFuY2hvcl0pLDpob3N0KFtyb2xlPWJ1dHRvbl0pe2N1cnNvcjpwb2ludGVyIWltcG9ydGFudH06aG9zdChbX2lzLWFuY2hvcl0pIDo6c2xv'@;
put 'dHRlZCgqKSw6aG9zdChbcm9sZT1idXR0b25dKSA6OnNsb3R0ZWQoKil7Y3Vyc29yOnBvaW50ZXIhaW1wb3J0YW50fTpob3N0KFtyb2xlPWJ1dHRvbl1bZGlzYWJsZWRdKXtjdXJzb3I6bm90LWFsbG93ZWQhaW1wb3J0YW50fTpob3N0KFtyb2xlPWJ1dHRvbl1bZGlzYWJsZWRdKSA6OnNsb3R0'@;
put 'ZWQoKil7Y3Vyc29yOm5vdC1hbGxvd2VkIWltcG9ydGFudDtwb2ludGVyLWV2ZW50czpub25lfTpob3N0KFtoaWRkZW5dKSxbaGlkZGVuXXtkaXNwbGF5Om5vbmUhaW1wb3J0YW50fTpob3N0KFtoaWRkZW4qPWZhbHNlXSl7ZGlzcGxheTpibG9jayFpbXBvcnRhbnR9Omhvc3QoW3JvbGU9ZGlh'@;
put 'bG9nXVtoaWRkZW5dKSw6aG9zdChbcm9sZT1kaWFsb2ddW2hpZGRlbl0pIDo6c2xvdHRlZCgqKXtkaXNwbGF5OmJsb2NrIWltcG9ydGFudDt2aXNpYmlsaXR5OmhpZGRlbiFpbXBvcnRhbnR9Omhvc3QoW3JvbGU9ZGlhbG9nXVtoaWRkZW4qPWZhbHNlXSksOmhvc3QoW3JvbGU9ZGlhbG9nXVto'@;
put 'aWRkZW4qPWZhbHNlXSkgOjpzbG90dGVkKCope3Zpc2liaWxpdHk6dmlzaWJsZSFpbXBvcnRhbnR9Omhvc3QoW19mb2N1c2VkXSkgLmlucHV0LDpob3N0KFtfZm9jdXNlZF0pIFtmb2N1c2FibGVdLDpob3N0KFt0YWJpbmRleD0iMCJdOmZvY3VzKSw6aG9zdChbdGFiaW5kZXg9IjAiXTpmb2N1'@;
put 'cykgW2ZvY3VzYWJsZV0sW3RhYmluZGV4PSIwIl1bZm9jdXNhYmxlXTpmb2N1c3tvdXRsaW5lOkhpZ2hsaWdodCBzb2xpZCAycHg7b3V0bGluZTo1cHggYXV0byAtd2Via2l0LWZvY3VzLXJpbmctY29sb3I7b3V0bGluZS1vZmZzZXQ6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlv'@;
put 'bi1vdXRsaW5lLW9mZnNldCwxcHgpfWA7ZnVuY3Rpb24gSFooYyl7cmV0dXJuYGNhbGMoKCR7Y30gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSAqIDFyZW0pYH1jbGFzcyBkTWV7Y29uc3RydWN0b3IobCxhKXt0aGlzLmZuPWwsdGhpcy5zdWJzY3JpcHRpb25zPWF9dW5zdWJzY3JpYmUoKXtj'@;
put 'b25zdCBsPXRoaXMuc3Vic2NyaXB0aW9ucy5pbmRleE9mKHRoaXMpOy0xIT09bCYmdGhpcy5zdWJzY3JpcHRpb25zLnNwbGljZShsLDEpfX1jb25zdCBOWj1uZXcgY2xhc3MgaE1le2NvbnN0cnVjdG9yKCl7dGhpcy5zdWJzY3JpcHRpb25zPVtdfXN1YnNjcmliZShsKXtjb25zdCBhPW5ldyBk'@;
put 'TWUobCx0aGlzLnN1YnNjcmlwdGlvbnMpO3JldHVybiB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChhKSxhfWVtaXQobCl7dGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2goYT0+YS5mbihsKSl9dG9FdmVudE9ic2VydmFibGUoKXtyZXR1cm4gdGhpc319O05aLmxpc3RlbmVyPWRvY3VtZW50LmFk'@;
put 'ZEV2ZW50TGlzdGVuZXIoIkNEU19TVEFURV9VUERBVEUiLGM9Pk5aLmVtaXQoYy5kZXRhaWwpKTtjbGFzcyBaZntzdGF0aWMgZ2V0IHN0YXRlKCl7cmV0dXJuIHVzZSgpLHdpbmRvdy5DRFMuX3N0YXRlfXN0YXRpYyBnZXRWYWx1ZShsKXtyZXR1cm4gWmYuc3RhdGVbbF19c3RhdGljIHNldFZh'@;
put 'bHVlKGwsYSl7WmYuc3RhdGVbbF09YX1zdGF0aWMgbG9nKCl7TE0ubG9nKEpTT04uc3RyaW5naWZ5KFpmLnN0YXRlLG51bGwsMikpfX1aZi5zdGF0ZVVwZGF0ZXM9TloudG9FdmVudE9ic2VydmFibGUoKTtjb25zdCBmTWU9KGMsbCk9PiJtZXRob2QiPT09bC5raW5kJiZsLmRlc2NyaXB0b3Im'@;
put 'JiEoInZhbHVlImluIGwuZGVzY3JpcHRvcik/ey4uLmwsZmluaXNoZXIoYSl7YS5jcmVhdGVQcm9wZXJ0eShsLmtleSxjKX19OntraW5kOiJmaWVsZCIsa2V5OlN5bWJvbCgpLHBsYWNlbWVudDoib3duIixkZXNjcmlwdG9yOnt9LG9yaWdpbmFsS2V5Omwua2V5LGluaXRpYWxpemVyKCl7ImZ1'@;
put 'bmN0aW9uIj09dHlwZW9mIGwuaW5pdGlhbGl6ZXImJih0aGlzW2wua2V5XT1sLmluaXRpYWxpemVyLmNhbGwodGhpcykpfSxmaW5pc2hlcihhKXthLmNyZWF0ZVByb3BlcnR5KGwua2V5LGMpfX0scE1lPShjLGwsYSk9PntsLmNvbnN0cnVjdG9yLmNyZWF0ZVByb3BlcnR5KGEsYyl9O2Z1bmN0'@;
put 'aW9uIFlzZShjKXtyZXR1cm4obCxhKT0+dm9pZCAwIT09YT9wTWUoYyxsLGEpOmZNZShjLGwpfWZ1bmN0aW9uIEtzZShjLGwpe3N3aXRjaChsJiZsLnR5cGUpe2Nhc2UgQXJyYXk6Y2FzZSBPYmplY3Q6cmV0dXJue3JlZmxlY3Q6ITEsLi4ubH07Y2FzZSBTdHJpbmc6cmV0dXJue3JlZmxlY3Q6'@;
put 'ITAsYXR0cmlidXRlOlc4KGMpLGNvbnZlcnRlcjp7dG9BdHRyaWJ1dGU6YT0+YXx8bnVsbH0sLi4ubH07Y2FzZSBOdW1iZXI6cmV0dXJue3JlZmxlY3Q6ITAsYXR0cmlidXRlOlc4KGMpLC4uLmx9O2Nhc2UgQm9vbGVhbjpyZXR1cm57cmVmbGVjdDohMCxhdHRyaWJ1dGU6VzgoYyksY29udmVy'@;
put 'dGVyOnt0b0F0dHJpYnV0ZTphPT5hPyIiOm51bGwsZnJvbUF0dHJpYnV0ZTphPT5mdW5jdGlvbiB5TWUoYyl7cmV0dXJuIG51bGwhPWMmJiIiK2MhPSJmYWxzZSJ9KGEpfSwuLi5sfTtjYXNlIERhdGU6cmV0dXJue3JlZmxlY3Q6ITEsY29udmVydGVyOntmcm9tQXR0cmlidXRlOmE9Pm5ldyBE'@;
put 'YXRlKGEpfSwuLi5sfTtkZWZhdWx0OnJldHVybnsuLi5sfX19ZnVuY3Rpb24gaW0oYyl7cmV0dXJuKGwsYSk9PihjPy5yZXF1aXJlZCYmZnVuY3Rpb24gX01lKGMsbCxhKXtjb25zdCBkPWMuZmlyc3RVcGRhdGVkO2MuZmlyc3RVcGRhdGVkPWZ1bmN0aW9uKGgpe2lmKGEmJmEucmVxdWlyZWQm'@;
put 'JlJNKHRoaXNbbF0pKXtjb25zdCBmPWEucmVxdWlyZWRNZXNzYWdlfHxmdW5jdGlvbih2PSJ3YXJuaW5nIixNLEQpe2NvbnN0IFo9RC50b0xvY2FsZUxvd2VyQ2FzZSgpO3JldHVybmAke3NzZSh2KX06ICR7TX0gaXMgcmVxdWlyZWQgdG8gdXNlICR7Wn0gY29tcG9uZW50LiBTZXQgdGhlIEpT'@;
put 'IFByb3BlcnR5IG9yIEhUTUwgQXR0cmlidXRlLlxuXG5gKyhuc2UoKT9gQW5ndWxhcjogPCR7Wn0gWyR7TX1dPSIuLi4iPjwvJHtafT5cbmA6IiIpKyhpc2UoKT9gVnVlOiA8JHtafSA6JHtNfT0iLi4uIj48LyR7Wn0+XG5gOiIiKSsocnNlKCk/YFJlYWN0OiA8JHtmdW5jdGlvbiB5U2UoYyl7'@;
put 'cmV0dXJuIHNzZShmdW5jdGlvbiBiU2UoYyl7cmV0dXJuIGMuc3BsaXQoIi0iKS5tYXAoKGwsYSk9PmE/bC5jaGFyQXQoMCkudG9VcHBlckNhc2UoKStsLnNsaWNlKDEpLnRvTG93ZXJDYXNlKCk6bCkuam9pbigiIil9KGMpKX0oWil9ICR7cmU9TSxyZS5zdGFydHNXaXRoKCJhcmlhIik/Vzgo'@;
put 'cmUpOnJlfT17Li4ufSAvPlxuYDoiIikrYEhUTUw6IDwke1p9ICR7VzgoTSl9PSIuLi4iPjwvJHtafT5cbkphdmFTY3JpcHQ6IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJyR7Wn0nKS4ke019ID0gJy4uLic7XG5cbmA7dmFyIHJlfShhLnJlcXVpcmVkLGwsdGhpcy50YWdOYW1lKTtpZigiZXJy'@;
put 'b3IiPT09YS5yZXF1aXJlZCl0aHJvdyBFcnJvcihmKTtMTS53YXJuKGYsdGhpcyl9ZCYmZC5jYWxsKHRoaXMsaCl9fShsLGEsYyksWXNlKEtzZShhLGMpKShsLGEpKX12YXIgTU1lPUNzZWBAa2V5ZnJhbWVzIGZhZGVJbkFuZE91dHswJSx0b3tvcGFjaXR5OjB9NzUle29wYWNpdHk6MX19Omhv'@;
put 'c3R7LS1jb2xvcjpjdXJyZW50Q29sb3I7ZGlzcGxheTppbmxpbmUtYmxvY2s7aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyxjYWxjKDE2ICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwyMCkpKTt3aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcsY2FsYygxNiAqIDFy'@;
put 'ZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSk7bWluLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcsY2FsYygxNiAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSk7bWluLXdpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyxjYWxjKDE2ICogMXJlbSAv'@;
put 'IHZhcigtLWNkcy1nbG9iYWwtYmFzZSwyMCkpKTttYXJnaW46MDt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7ZmlsbDp2YXIoLS1jb2xvcik7Y29sb3I6dmFyKC0tY29sb3IpO2NvbnRhaW46c3RyaWN0O2N1cnNvcjppbmhlcml0fXN2Z3tkaXNwbGF5OmJsb2NrfTpob3N0KFtzaXplKj14c10pe2hl'@;
put 'aWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUsY2FsYyg4ICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwyMCkpKTt3aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUsY2FsYyg4ICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwyMCkpKTttaW4taGVpZ2h0OnZhcigt'@;
put 'LWNkcy1nbG9iYWwtc3BhY2UtNSxjYWxjKDggKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkpO21pbi13aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUsY2FsYyg4ICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwyMCkpKX06aG9zdChbc2l6ZSo9c21dKXtoZWln'@;
put 'aHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03LGNhbGMoMTYgKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkpO3dpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyxjYWxjKDE2ICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwyMCkpKTttaW4taGVpZ2h0OnZhcigt'@;
put 'LWNkcy1nbG9iYWwtc3BhY2UtNyxjYWxjKDE2ICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwyMCkpKTttaW4td2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03LGNhbGMoMTYgKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkpfTpob3N0KFtzaXplKj1tZF0pe2hl'@;
put 'aWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTksY2FsYygyNCAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSk7d2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05LGNhbGMoMjQgKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkpO21pbi1oZWlnaHQ6dmFy'@;
put 'KC0tY2RzLWdsb2JhbC1zcGFjZS05LGNhbGMoMjQgKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkpO21pbi13aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTksY2FsYygyNCAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSl9Omhvc3QoW3NpemUqPWxnXSl7'@;
put 'aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTEsY2FsYygzNiAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSk7d2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMSxjYWxjKDM2ICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwyMCkpKTttaW4taGVpZ2h0'@;
put 'OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTEsY2FsYygzNiAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSk7bWluLXdpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTEsY2FsYygzNiAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSl9Omhvc3QoW3NpemUq'@;
put 'PXhsXSl7aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTIsY2FsYyg0OCAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSk7d2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMixjYWxjKDQ4ICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwyMCkpKTttaW4t'@;
put 'aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTIsY2FsYyg0OCAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSk7bWluLXdpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTIsY2FsYyg0OCAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSl9Omhvc3Qo'@;
put 'W3NpemUqPXh4bF0pe2hlaWdodDpjYWxjKHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTMsY2FsYyg2NCAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSkgLSB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUsY2FsYyg4ICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwyMCkp'@;
put 'KSk7d2lkdGg6Y2FsYyh2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEzLGNhbGMoNjQgKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkpIC0gdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01LGNhbGMoOCAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSkpO21pbi1oZWln'@;
put 'aHQ6Y2FsYyh2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEzLGNhbGMoNjQgKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkpIC0gdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01LGNhbGMoOCAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSkpO21pbi13aWR0aDpjYWxj'@;
put 'KHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTMsY2FsYyg2NCAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSkgLSB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUsY2FsYyg4ICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwyMCkpKSl9Omhvc3QoW3NpemUqPWZpdF0pe2hl'@;
put 'aWdodDphdXRvO3dpZHRoOmF1dG87Y29udGFpbjpsYXlvdXR9Omhvc3QoW3N0YXR1cz1zdWNjZXNzXSl7LS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLXN1Y2Nlc3MsIHZhcigtLWNkcy1nbG9iYWwtY29sb3ItZ3JlZW4tNzAwLCAjNDI4MTBlKSl9Omhvc3QoW3N0YXR1cz1kYW5nZXJd'@;
put 'KXstLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtZGFuZ2VyLCB2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXJlZC03MDAsICNlMDIyMDApKX06aG9zdChbc3RhdHVzPXdhcm5pbmddKXstLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtd2FybmluZy1kYXJrLCB2YXIoLS1jZHMtZ2xv'@;
put 'YmFsLWNvbG9yLW9jaHJlLTgwMCwgI2EzNjUwMCkpfTpob3N0KFtzdGF0dXM9aW5mb10pey0tY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1pbmZvLCB2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtNzAwLCAjMDA3OWFkKSl9Omhvc3QoW3N0YXR1cz1uZXV0cmFsXSl7LS1jb2xvcjp2'@;
put 'YXIoLS1jZHMtYWxpYXMtc3RhdHVzLW5ldXRyYWwsIHZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTYwMCwgIzRmNjE2OSkpfTpob3N0KFtpbnZlcnNlXSl7LS1jb2xvcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi0yMDAsICNjYmQ0ZDgpfTpob3N0KFtk'@;
put 'aXJlY3Rpb249dXBdKXt0cmFuc2Zvcm06cm90YXRlKDApfTpob3N0KFtkaXJlY3Rpb249ZG93bl0pe3RyYW5zZm9ybTpyb3RhdGUoMTgwZGVnKX06aG9zdChbZGlyZWN0aW9uPXJpZ2h0XSl7dHJhbnNmb3JtOnJvdGF0ZSg5MGRlZyl9Omhvc3QoW2RpcmVjdGlvbj1sZWZ0XSl7dHJhbnNmb3Jt'@;
put 'OnJvdGF0ZSgyNzBkZWcpfTpob3N0KFtmbGlwPWhvcml6b250YWxdKXt0cmFuc2Zvcm06c2NhbGUoLTEpIHJvdGF0ZVgoMTgwZGVnKX06aG9zdChbZmxpcD12ZXJ0aWNhbF0pe3RyYW5zZm9ybTpzY2FsZSgtMSkgcm90YXRlWSgxODBkZWcpfS5hbGVydCwuYmFkZ2V7ZmlsbDp2YXIoLS1iYWRn'@;
put 'ZS1jb2xvcix2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLWRhbmdlcix2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXJlZC03MDAsI2UwMjIwMCkpKX06aG9zdChbYmFkZ2U9c3VjY2Vzc10pey0tYmFkZ2UtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1zdWNjZXNzLCB2YXIoLS1jZHMtZ2xvYmFs'@;
put 'LWNvbG9yLWdyZWVuLTcwMCwgIzQyODEwZSkpfTpob3N0KFtiYWRnZT1kYW5nZXJdKXstLWJhZGdlLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtZGFuZ2VyLCB2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXJlZC03MDAsICNlMDIyMDApKX06aG9zdChbYmFkZ2UqPXdhcm5pbmddKXstLWJh'@;
put 'ZGdlLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtd2FybmluZy1kYXJrLCB2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLW9jaHJlLTgwMCwgI2EzNjUwMCkpfTpob3N0KFtiYWRnZT1pbmhlcml0XSl7LS1iYWRnZS1jb2xvcjpjdXJyZW50Q29sb3J9Omhvc3QoW2JhZGdlPWluZm9dKXstLWJh'@;
put 'ZGdlLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtaW5mbywgdmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTcwMCwgIzAwNzlhZCkpfTpob3N0KFtiYWRnZT1uZXV0cmFsXSl7LS1iYWRnZS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLW5ldXRyYWwsIHZhcigtLWNkcy1nbG9i'@;
put 'YWwtY29sb3ItY29uc3RydWN0aW9uLTYwMCwgIzRmNjE2OSkpfTpob3N0KFtiYWRnZT1pbmhlcml0LXRyaWFuZ2xlXSl7LS1iYWRnZS1jb2xvcjpjdXJyZW50Q29sb3J9Omhvc3QoW2JhZGdlXVtpbnZlcnNlXSl7LS1iYWRnZS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLWRhbmdlciwg'@;
put 'dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1yZWQtNzAwLCAjZTAyMjAwKSl9Omhvc3QoW2JhZGdlPXN1Y2Nlc3NdW2ludmVyc2VdKXstLWJhZGdlLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtc3VjY2VzcywgdmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ncmVlbi03MDAsICM0MjgxMGUpKX06'@;
put 'aG9zdChbYmFkZ2UqPXdhcm5pbmddW2ludmVyc2VdKXstLWJhZGdlLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtd2FybmluZy1kYXJrLCB2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLW9jaHJlLTgwMCwgI2EzNjUwMCkpfTpob3N0KFtiYWRnZSo9aW5oZXJpdF1baW52ZXJzZV0pey0tYmFk'@;
put 'Z2UtY29sb3I6Y3VycmVudENvbG9yfTpob3N0KFtiYWRnZT1pbmZvXVtpbnZlcnNlXSl7LS1iYWRnZS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLWluZm8sIHZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS03MDAsICMwMDc5YWQpKX0uY2RzLWludGVybmFsLWRvdC0xe2FuaW1hdGlv'@;
put 'bjpmYWRlSW5BbmRPdXQgMS44cyBlYXNlLWluIDBzIGluZmluaXRlfS5jZHMtaW50ZXJuYWwtZG90LTJ7YW5pbWF0aW9uOmZhZGVJbkFuZE91dCAxLjhzIGVhc2Utb3V0IC40MjJzIGluZmluaXRlfS5jZHMtaW50ZXJuYWwtZG90LTN7YW5pbWF0aW9uOmZhZGVJbkFuZE91dCAxLjhzIGVhc2Ut'@;
put 'b3V0IC42NzVzIGluZmluaXRlfUBtZWRpYSAocHJlZmVycy1yZWR1Y2VkLW1vdGlvbil7LmNkcy1pbnRlcm5hbC1kb3QtMSwuY2RzLWludGVybmFsLWRvdC0yLC5jZHMtaW50ZXJuYWwtZG90LTN7YW5pbWF0aW9uOm5vbmV9fWA7Y29uc3QgeE1lPVsidW5rbm93biIse291dGxpbmU6JzxjaXJj'@;
put 'bGUgY2xhc3M9ImNkcy1pbnRlcm5hbC1kb3QtMyIgY3g9IjMxLjEiIGN5PSIxOCIgcj0iMi45Ii8+PGNpcmNsZSBjbGFzcz0iY2RzLWludGVybmFsLWRvdC0yIiBjeD0iMTgiIGN5PSIxOCIgcj0iMi45Ii8+PGNpcmNsZSBjbGFzcz0iY2RzLWludGVybmFsLWRvdC0xIiBjeD0iNC45IiBjeT0i'@;
put 'MTgiIHI9IjIuOSIvPid9XTtjbGFzcyBUc3tzdGF0aWMgZ2V0IHJlZ2lzdHJ5KCl7cmV0dXJue3Vua25vd246eE1lWzFdLC4uLlpmLnN0YXRlLmljb25SZWdpc3RyeX19c3RhdGljIGFkZEljb25zKC4uLmwpe1pmLnN0YXRlLmljb25SZWdpc3RyeT17Li4uWmYuc3RhdGUuaWNvblJlZ2lzdHJ5'@;
put 'LC4uLk9iamVjdC5mcm9tRW50cmllcyhsLmZpbHRlcigoW2FdKT0+IVRzLnJlZ2lzdHJ5W2FdKSl9fXN0YXRpYyBhZGRBbGlhc2VzKC4uLmwpe2NvbnN0IGE9bC5maWx0ZXIoKFtkXSk9PlRzLnJlZ2lzdHJ5W2RdKS5mbGF0TWFwKChbZCxoXSk9PmgubWFwKGY9PltmLFRzLnJlZ2lzdHJ5W2Rd'@;
put 'XSkpO1pmLnN0YXRlLmljb25SZWdpc3RyeT17Li4uWmYuc3RhdGUuaWNvblJlZ2lzdHJ5LC4uLk9iamVjdC5mcm9tRW50cmllcyhhKX19c3RhdGljIGdldEljb25OYW1lRnJvbVNoYXBlKGwpe3JldHVybiBsWzBdfX12YXIgZHAsYztmdW5jdGlvbiBrTWUoYyxsKXtsZXQgYT0iIjtzd2l0Y2go'@;
put 'ZnVuY3Rpb24gRU1lKGMpe3N3aXRjaCghMCl7Y2FzZSBSTShjKTpyZXR1cm4gZHAuTmlsU2l6ZVZhbHVlO2Nhc2UgZnVuY3Rpb24gcXNlKGMpe3JldHVyblsieHhzIiwieHMiLCJzbSIsIm1kIiwibGciLCJ4bCIsInh4bCJdLmluZGV4T2YoYyk+LTF9KGMpOnJldHVybiBkcC5WYWxpZFNpemVT'@;
put 'dHJpbmc7Y2FzZSBmdW5jdGlvbiBHb2UoYyl7cmV0dXJuIGdaKGMpJiYhWW9lKGMudHJpbSgpKSYmK2M9PStjfShjKTpyZXR1cm4gZHAuVmFsaWROdW1lcmljU3RyaW5nO2RlZmF1bHQ6cmV0dXJuIGRwLkJhZFNpemVWYWx1ZX19KGZ1bmN0aW9uIFRNZShjKXtyZXR1cm4gUk0oYyk/IiI6ZnVu'@;
put 'Y3Rpb24gX1NlKGMsbCxhPSIiKXtjb25zdCBkPWMuc3BsaXQoIiAiKSxoPSIiPT09YT9kLmZpbHRlcihmPT5mIT09bCk6ZC5tYXAoZj0+Zj09PWw/YTpmKTtyZXR1cm4gaC5sZW5ndGg+MD9oLmpvaW4oIiAiKToiIn0oYywiZml0Iil9KGwpKSl7Y2FzZSBkcC5WYWxpZE51bWVyaWNTdHJpbmc6'@;
put 'cmV0dXJuIGE9SFoocGFyc2VJbnQobCkpLHZvaWQgZnVuY3Rpb24gY01lKGMsLi4ubCl7bC5mb3JFYWNoKChbYSxkXSk9PntjLnN0eWxlW2FdPWR9KX0oYywuLi5mdW5jdGlvbiBBTWUoYyxsKXtyZXR1cm4hSU0oYykmJmMuaW5kZXhPZigiZml0Iik+LTE/W1sid2lkdGgiLCJhdXRvIl0sWyJo'@;
put 'ZWlnaHQiLCJhdXRvIl0sWyJtaW4td2lkdGgiLGxdLFsibWluLWhlaWdodCIsbF1dOltbIndpZHRoIixsXSxbImhlaWdodCIsbF0sWyJtaW4td2lkdGgiLGxdLFsibWluLWhlaWdodCIsbF1dfShsLGEpKTtjYXNlIGRwLlZhbGlkU2l6ZVN0cmluZzpjYXNlIGRwLk5pbFNpemVWYWx1ZTpyZXR1'@;
put 'cm4gdm9pZCBmdW5jdGlvbiB1TWUoYywuLi5sKXtsLmZvckVhY2goYT0+e2Muc3R5bGVbYV09IiJ9KX0oYywid2lkdGgiLCJoZWlnaHQiLCJtaW4td2lkdGgiLCJtaW4taGVpZ2h0Iik7ZGVmYXVsdDpyZXR1cm59fWZ1bmN0aW9uIFZaKGMpe3JldHVybiBjLmJhZGdlJiYoImluaGVyaXQtdHJp'@;
put 'YW5nbGUiPT09Yy5iYWRnZXx8Indhcm5pbmctdHJpYW5nbGUiPT09Yy5iYWRnZSl9KGM9ZHB8fChkcD17fSkpLkJhZFNpemVWYWx1ZT0iYmFkLXZhbHVlIixjLlZhbGlkU2l6ZVN0cmluZz0idmFsdWUtaXMtc3RyaW5nIixjLlZhbGlkTnVtZXJpY1N0cmluZz0idmFsdWUtaXMtbnVtZXJpYyIs'@;
put 'Yy5OaWxTaXplVmFsdWU9InZhbHVlLWlzLW5pbCI7Y2xhc3MgV2YgZXh0ZW5kcyBWTXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5fc2hhcGU9InVua25vd24iLHRoaXMuc29saWQ9ITEsdGhpcy5pbnZlcnNlPSExfXN0YXRpYyBnZXQgc3R5bGVzKCl7cmV0dXJuW3NN'@;
put 'ZSxNTWVdfWdldCBzaGFwZSgpe3JldHVybiB0aGlzLl9zaGFwZX1zZXQgc2hhcGUobCl7aWYoZnVuY3Rpb24gZVNlKGMsbCl7cmV0dXJuIVJNKGMpJiZLb2UoYyxsKX0obCx0aGlzLl9zaGFwZSkpe2NvbnN0IGE9dGhpcy5fc2hhcGU7dGhpcy5fc2hhcGU9bCx0aGlzLnJlcXVlc3RVcGRhdGUo'@;
put 'InNoYXBlIixhKX19Z2V0IHNpemUoKXtyZXR1cm4gdGhpcy5fc2l6ZX1zZXQgc2l6ZShsKXtpZihmdW5jdGlvbiBRQ2UoYyxsKXtyZXR1cm4gZnVuY3Rpb24gSkNlKGMpe3JldHVybiBQb2UoU3RyaW5nLGMpfHxJTShjKX0oYykmJktvZShjLGwpfShsLHRoaXMuX3NpemUpKXtjb25zdCBhPXRo'@;
put 'aXMuX3NpemU7dGhpcy5fc2l6ZT1sLGtNZSh0aGlzLGwpLHRoaXMucmVxdWVzdFVwZGF0ZSgic2l6ZSIsYSl9fXVwZGF0ZWQobCl7aWYobC5oYXMoImlubmVyT2Zmc2V0IikmJnRoaXMuaW5uZXJPZmZzZXQ+MCl7Y29uc3QgYT1IWigtMSp0aGlzLmlubmVyT2Zmc2V0KSxkPWBjYWxjKDEwMCUg'@;
put 'KyAke0haKDIqdGhpcy5pbm5lck9mZnNldCl9KWA7dGhpcy5zdmcuc3R5bGUud2lkdGg9ZCx0aGlzLnN2Zy5zdHlsZS5oZWlnaHQ9ZCx0aGlzLnN2Zy5zdHlsZS5tYXJnaW49YCR7YX0gMCAwICR7YX1gfX1maXJzdFVwZGF0ZWQobCl7aWYoc3VwZXIuZmlyc3RVcGRhdGVkKGwpLHRoaXMuaXND'@;
put 'b25uZWN0ZWQpe2xldCBhPSJ1bmtub3duIjt0aGlzLnN1YnNjcmlwdGlvbj1aZi5zdGF0ZVVwZGF0ZXMuc3Vic2NyaWJlKGQ9PnsiaWNvblJlZ2lzdHJ5Ij09PWQua2V5JiZUcy5yZWdpc3RyeVt0aGlzLnNoYXBlXSYmYSE9PXRoaXMuc2hhcGUmJihhPXRoaXMuc2hhcGUsdGhpcy5yZXF1ZXN0'@;
put 'VXBkYXRlKCJzaGFwZSIpKX0pfX1kaXNjb25uZWN0ZWRDYWxsYmFjaygpe3N1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCksdGhpcy5zdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCl9cmVuZGVyKCl7cmV0dXJuIGdaKFRzLnJlZ2lzdHJ5W3RoaXMuc2hhcGVdKT9uTWVgPHNwYW4gLmlubmVy'@;
put 'SFRNTD0iJHtUcy5yZWdpc3RyeVt0aGlzLnNoYXBlXX0iPjwvc3Bhbj5gOnJNZWA8c3ZnIC5pbm5lckhUTUw9IiR7ZnVuY3Rpb24gSU1lKGMpe2NvbnN0IGw9VHMucmVnaXN0cnlbYy5zaGFwZV0/P1RzLnJlZ2lzdHJ5LnVua25vd247bGV0IGE9Yy5zb2xpZCYmbC5zb2xpZD9sLnNvbGlkOmwu'@;
put 'b3V0bGluZTtyZXR1cm4gYy5iYWRnZSYmIVZaKGMpJiYoYT1jLnNvbGlkP2wuc29saWRCYWRnZWQ/P2E6bC5vdXRsaW5lQmFkZ2VkPz9hKSxWWihjKSYmKGE9Yy5zb2xpZD9sLnNvbGlkQWxlcnRlZD8/YTpsLm91dGxpbmVBbGVydGVkPz9hKSxhfSh0aGlzKStmdW5jdGlvbiBETWUoYyl7bGV0'@;
put 'IGw9IiI7cmV0dXJuIGMuYmFkZ2UmJlZaKGMpP2w9JzxwYXRoIGQ9Ik0yNi44NSAxLjE0TDIxLjEzIDExYTEuMjggMS4yOCAwIDAwMS4xIDJoMTEuNDVhMS4yOCAxLjI4IDAgMDAxLjEtMmwtNS43Mi05Ljg2YTEuMjggMS4yOCAwIDAwLTIuMjEgMHoiIGNsYXNzPSJhbGVydCIgLz4nOmMuYmFk'@;
put 'Z2UmJihsPSc8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJiYWRnZSIgLz4nKSxsfSh0aGlzKX0iIHZpZXdCb3g9IjAgMCAzNiAzNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBhcmlhLWhpZGRlbj0idHJ1ZSI+PC9zdmc+YH19ZnVuY3Rpb24gQk0oYyl7'@;
put 'cmV0dXJuISFjJiYoYyBpbnN0YW5jZW9mIFh0fHwkZShjLmxpZnQpJiYkZShjLnN1YnNjcmliZSkpfVVmKFtpbSh7dHlwZTpTdHJpbmd9KV0sV2YucHJvdG90eXBlLCJzaGFwZSIsbnVsbCksVWYoW2ltKHt0eXBlOlN0cmluZ30pXSxXZi5wcm90b3R5cGUsInNpemUiLG51bGwpLFVmKFtpbSh7'@;
put 'dHlwZTpTdHJpbmd9KV0sV2YucHJvdG90eXBlLCJkaXJlY3Rpb24iLHZvaWQgMCksVWYoW2ltKHt0eXBlOlN0cmluZ30pXSxXZi5wcm90b3R5cGUsImZsaXAiLHZvaWQgMCksVWYoW2ltKHt0eXBlOkJvb2xlYW59KV0sV2YucHJvdG90eXBlLCJzb2xpZCIsdm9pZCAwKSxVZihbaW0oe3R5cGU6'@;
put 'U3RyaW5nfSldLFdmLnByb3RvdHlwZSwic3RhdHVzIix2b2lkIDApLFVmKFtpbSh7dHlwZTpCb29sZWFufSldLFdmLnByb3RvdHlwZSwiaW52ZXJzZSIsdm9pZCAwKSxVZihbaW0oe3R5cGU6U3RyaW5nfSldLFdmLnByb3RvdHlwZSwiYmFkZ2UiLHZvaWQgMCksVWYoW2Z1bmN0aW9uIHdNZShj'@;
put 'KXtyZXR1cm4obCxhKT0+e2NvbnN0IGQ9S3NlKGEsYyk7cmV0dXJuIGQmJihkLnJlZmxlY3Q9ISFjPy5yZWZsZWN0JiZjLnJlZmxlY3QsZC5yZWZsZWN0JiYhYz8uYXR0cmlidXRlJiYoZC5hdHRyaWJ1dGU9Il8iK1c4KGEpKSksWXNlKGQpKGwsYSl9fSh7dHlwZTpOdW1iZXJ9KV0sV2YucHJv'@;
put 'dG90eXBlLCJpbm5lck9mZnNldCIsdm9pZCAwKSxVZihbZnVuY3Rpb24gU01lKGMsbCl7cmV0dXJuKCh7ZmluaXNoZXI6YyxkZXNjcmlwdG9yOmx9KT0+KGEsZCk9Pnt2YXIgaDtpZih2b2lkIDA9PT1kKXtjb25zdCBmPW51bGwhPT0oaD1hLm9yaWdpbmFsS2V5KSYmdm9pZCAwIT09aD9oOmEu'@;
put 'a2V5LHY9bnVsbCE9bD97a2luZDoibWV0aG9kIixwbGFjZW1lbnQ6InByb3RvdHlwZSIsa2V5OmYsZGVzY3JpcHRvcjpsKGEua2V5KX06ey4uLmEsa2V5OmZ9O3JldHVybiBudWxsIT1jJiYodi5maW5pc2hlcj1mdW5jdGlvbihNKXtjKE0sZil9KSx2fXtjb25zdCBmPWEuY29uc3RydWN0b3I7'@;
put 'dm9pZCAwIT09bCYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGEsZCxsKGQpKSxjPy4oZixkKX19KSh7ZGVzY3JpcHRvcjphPT57Y29uc3QgZD17Z2V0KCl7dmFyIGgsZjtyZXR1cm4gbnVsbCE9PShmPW51bGw9PT0oaD10aGlzLnJlbmRlclJvb3QpfHx2b2lkIDA9PT1oP3ZvaWQgMDpoLnF1ZXJ5'@;
put 'U2VsZWN0b3IoYykpJiZ2b2lkIDAhPT1mP2Y6bnVsbH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9O2lmKGwpe2NvbnN0IGg9InN5bWJvbCI9PXR5cGVvZiBhP1N5bWJvbCgpOiJfXyIrYTtkLmdldD1mdW5jdGlvbigpe3ZhciBmLHY7cmV0dXJuIHZvaWQgMD09PXRoaXNbaF0mJih0'@;
put 'aGlzW2hdPW51bGwhPT0odj1udWxsPT09KGY9dGhpcy5yZW5kZXJSb290KXx8dm9pZCAwPT09Zj92b2lkIDA6Zi5xdWVyeVNlbGVjdG9yKGMpKSYmdm9pZCAwIT09dj92Om51bGwpLHRoaXNbaF19fXJldHVybiBkfX0pfSgic3ZnIildLFdmLnByb3RvdHlwZSwic3ZnIix2b2lkIDApLGZ1bmN0'@;
put 'aW9uIHhTZShjLGwpe1FvZSgpJiZlc2UoWyJjdXN0b21FbGVtZW50cyJdKSYmTVNlKGMsbCx3aW5kb3cuY3VzdG9tRWxlbWVudHMpfSgiY2RzLWljb24iLFdmKTtjb25zdCBCWj1jPT5jJiYibnVtYmVyIj09dHlwZW9mIGMubGVuZ3RoJiYiZnVuY3Rpb24iIT10eXBlb2YgYztmdW5jdGlvbiBY'@;
put 'c2UoYyl7cmV0dXJuICRlKGM/LnRoZW4pfWZ1bmN0aW9uIEpzZShjKXtyZXR1cm4gJGUoY1toaV0pfWZ1bmN0aW9uIFFzZShjKXtyZXR1cm4gU3ltYm9sLmFzeW5jSXRlcmF0b3ImJiRlKGM/LltTeW1ib2wuYXN5bmNJdGVyYXRvcl0pfWZ1bmN0aW9uIGVsZShjKXtyZXR1cm4gbmV3IFR5cGVF'@;
put 'cnJvcihgWW91IHByb3ZpZGVkICR7bnVsbCE9PWMmJiJvYmplY3QiPT10eXBlb2YgYz8iYW4gaW52YWxpZCBvYmplY3QiOmAnJHtjfSdgfSB3aGVyZSBhIHN0cmVhbSB3YXMgZXhwZWN0ZWQuIFlvdSBjYW4gcHJvdmlkZSBhbiBPYnNlcnZhYmxlLCBQcm9taXNlLCBSZWFkYWJsZVN0cmVhbSwg'@;
put 'QXJyYXksIEFzeW5jSXRlcmFibGUsIG9yIEl0ZXJhYmxlLmApfWNvbnN0IHRsZT1mdW5jdGlvbiBOTWUoKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZTeW1ib2wuaXRlcmF0b3I/U3ltYm9sLml0ZXJhdG9yOiJAQGl0ZXJhdG9yIn0oKTtmdW5jdGlvbiBubGUoYyl7cmV0dXJu'@;
put 'ICRlKGM/Llt0bGVdKX1mdW5jdGlvbiBybGUoYyl7cmV0dXJuIGZ1bmN0aW9uIHBzZShjLGwsYSl7aWYoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKXRocm93IG5ldyBUeXBlRXJyb3IoIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLiIpO3ZhciBoLGQ9YS5hcHBseShjLGx8fFtd'@;
put 'KSxmPVtdO3JldHVybiBoPU9iamVjdC5jcmVhdGUoKCJmdW5jdGlvbiI9PXR5cGVvZiBBc3luY0l0ZXJhdG9yP0FzeW5jSXRlcmF0b3I6T2JqZWN0KS5wcm90b3R5cGUpLE0oIm5leHQiKSxNKCJ0aHJvdyIpLE0oInJldHVybiIsZnVuY3Rpb24gdihFZSl7cmV0dXJuIGZ1bmN0aW9uKEJlKXty'@;
put 'ZXR1cm4gUHJvbWlzZS5yZXNvbHZlKEJlKS50aGVuKEVlLGNlKX19KSxoW1N5bWJvbC5hc3luY0l0ZXJhdG9yXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSxoO2Z1bmN0aW9uIE0oRWUsQmUpe2RbRWVdJiYoaFtFZV09ZnVuY3Rpb24ocWUpe3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihy'@;
put 'dCxwdCl7Zi5wdXNoKFtFZSxxZSxydCxwdF0pPjF8fEQoRWUscWUpfSl9LEJlJiYoaFtFZV09QmUoaFtFZV0pKSl9ZnVuY3Rpb24gRChFZSxCZSl7dHJ5eyFmdW5jdGlvbiBaKEVlKXtFZS52YWx1ZSBpbnN0YW5jZW9mIHJtP1Byb21pc2UucmVzb2x2ZShFZS52YWx1ZS52KS50aGVuKHJlLGNl'@;
put 'KTpiZShmWzBdWzJdLEVlKX0oZFtFZV0oQmUpKX1jYXRjaChxZSl7YmUoZlswXVszXSxxZSl9fWZ1bmN0aW9uIHJlKEVlKXtEKCJuZXh0IixFZSl9ZnVuY3Rpb24gY2UoRWUpe0QoInRocm93IixFZSl9ZnVuY3Rpb24gYmUoRWUsQmUpe0VlKEJlKSxmLnNoaWZ0KCksZi5sZW5ndGgmJkQoZlsw'@;
put 'XVswXSxmWzBdWzFdKX19KHRoaXMsYXJndW1lbnRzLGZ1bmN0aW9uKigpe2NvbnN0IGE9Yy5nZXRSZWFkZXIoKTt0cnl7Zm9yKDs7KXtjb25zdHt2YWx1ZTpkLGRvbmU6aH09eWllbGQgcm0oYS5yZWFkKCkpO2lmKGgpcmV0dXJuIHlpZWxkIHJtKHZvaWQgMCk7eWllbGQgeWllbGQgcm0oZCl9'@;
put 'fWZpbmFsbHl7YS5yZWxlYXNlTG9jaygpfX0pfWZ1bmN0aW9uIGlsZShjKXtyZXR1cm4gJGUoYz8uZ2V0UmVhZGVyKX1mdW5jdGlvbiBsMShjKXtpZihjIGluc3RhbmNlb2YgWHQpcmV0dXJuIGM7aWYobnVsbCE9Yyl7aWYoSnNlKGMpKXJldHVybiBmdW5jdGlvbiBWTWUoYyl7cmV0dXJuIG5l'@;
put 'dyBYdChsPT57Y29uc3QgYT1jW2hpXSgpO2lmKCRlKGEuc3Vic2NyaWJlKSlyZXR1cm4gYS5zdWJzY3JpYmUobCk7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJvdmlkZWQgb2JqZWN0IGRvZXMgbm90IGNvcnJlY3RseSBpbXBsZW1lbnQgU3ltYm9sLm9ic2VydmFibGUiKX0pfShjKTtpZihCWihj'@;
put 'KSlyZXR1cm4gZnVuY3Rpb24gQk1lKGMpe3JldHVybiBuZXcgWHQobD0+e2ZvcihsZXQgYT0wO2E8Yy5sZW5ndGgmJiFsLmNsb3NlZDthKyspbC5uZXh0KGNbYV0pO2wuY29tcGxldGUoKX0pfShjKTtpZihYc2UoYykpcmV0dXJuIGZ1bmN0aW9uIGpNZShjKXtyZXR1cm4gbmV3IFh0KGw9Pntj'@;
put 'LnRoZW4oYT0+e2wuY2xvc2VkfHwobC5uZXh0KGEpLGwuY29tcGxldGUoKSl9LGE9PmwuZXJyb3IoYSkpLnRoZW4obnVsbCxSaSl9KX0oYyk7aWYoUXNlKGMpKXJldHVybiBhbGUoYyk7aWYobmxlKGMpKXJldHVybiBmdW5jdGlvbiB6TWUoYyl7cmV0dXJuIG5ldyBYdChsPT57Zm9yKGNvbnN0'@;
put 'IGEgb2YgYylpZihsLm5leHQoYSksbC5jbG9zZWQpcmV0dXJuO2wuY29tcGxldGUoKX0pfShjKTtpZihpbGUoYykpcmV0dXJuIGZ1bmN0aW9uIFVNZShjKXtyZXR1cm4gYWxlKHJsZShjKSl9KGMpfXRocm93IGVsZShjKX1mdW5jdGlvbiBhbGUoYyl7cmV0dXJuIG5ldyBYdChsPT57KGZ1bmN0'@;
put 'aW9uIFpNZShjLGwpe3ZhciBhLGQsaCxmO3JldHVybiBmdW5jdGlvbiBoc2UoYyxsLGEsZCl7cmV0dXJuIG5ldyhhfHwoYT1Qcm9taXNlKSkoZnVuY3Rpb24oZix2KXtmdW5jdGlvbiBNKHJlKXt0cnl7WihkLm5leHQocmUpKX1jYXRjaChjZSl7dihjZSl9fWZ1bmN0aW9uIEQocmUpe3RyeXta'@;
put 'KGQudGhyb3cocmUpKX1jYXRjaChjZSl7dihjZSl9fWZ1bmN0aW9uIFoocmUpe3JlLmRvbmU/ZihyZS52YWx1ZSk6ZnVuY3Rpb24gaChmKXtyZXR1cm4gZiBpbnN0YW5jZW9mIGE/ZjpuZXcgYShmdW5jdGlvbih2KXt2KGYpfSl9KHJlLnZhbHVlKS50aGVuKE0sRCl9WigoZD1kLmFwcGx5KGMs'@;
put 'bHx8W10pKS5uZXh0KCkpfSl9KHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXt0cnl7Zm9yKGE9Z3NlKGMpOyEoZD15aWVsZCBhLm5leHQoKSkuZG9uZTspaWYobC5uZXh0KGQudmFsdWUpLGwuY2xvc2VkKXJldHVybn1jYXRjaCh2KXtoPXtlcnJvcjp2fX1maW5hbGx5e3RyeXtkJiYh'@;
put 'ZC5kb25lJiYoZj1hLnJldHVybikmJih5aWVsZCBmLmNhbGwoYSkpfWZpbmFsbHl7aWYoaCl0aHJvdyBoLmVycm9yfX1sLmNvbXBsZXRlKCl9KX0pKGMsbCkuY2F0Y2goYT0+bC5lcnJvcihhKSl9KX1mdW5jdGlvbiBuZyhjLGwsYSxkPTAsaD0hMSl7Y29uc3QgZj1sLnNjaGVkdWxlKGZ1bmN0'@;
put 'aW9uKCl7YSgpLGg/Yy5hZGQodGhpcy5zY2hlZHVsZShudWxsLGQpKTp0aGlzLnVuc3Vic2NyaWJlKCl9LGQpO2lmKGMuYWRkKGYpLCFoKXJldHVybiBmfWZ1bmN0aW9uIG9sZShjLGw9MCl7cmV0dXJuIFZpKChhLGQpPT57YS5zdWJzY3JpYmUoTmkoZCxoPT5uZyhkLGMsKCk9PmQubmV4dCho'@;
put 'KSxsKSwoKT0+bmcoZCxjLCgpPT5kLmNvbXBsZXRlKCksbCksaD0+bmcoZCxjLCgpPT5kLmVycm9yKGgpLGwpKSl9KX1mdW5jdGlvbiBzbGUoYyxsPTApe3JldHVybiBWaSgoYSxkKT0+e2QuYWRkKGMuc2NoZWR1bGUoKCk9PmEuc3Vic2NyaWJlKGQpLGwpKX0pfWZ1bmN0aW9uIGxsZShjLGwp'@;
put 'e2lmKCFjKXRocm93IG5ldyBFcnJvcigiSXRlcmFibGUgY2Fubm90IGJlIG51bGwiKTtyZXR1cm4gbmV3IFh0KGE9PntuZyhhLGwsKCk9Pntjb25zdCBkPWNbU3ltYm9sLmFzeW5jSXRlcmF0b3JdKCk7bmcoYSxsLCgpPT57ZC5uZXh0KCkudGhlbihoPT57aC5kb25lP2EuY29tcGxldGUoKTph'@;
put 'Lm5leHQoaC52YWx1ZSl9KX0sMCwhMCl9KX0pfWZ1bmN0aW9uIFl1KGMsbCl7cmV0dXJuIGw/ZnVuY3Rpb24gcU1lKGMsbCl7aWYobnVsbCE9Yyl7aWYoSnNlKGMpKXJldHVybiBmdW5jdGlvbiBXTWUoYyxsKXtyZXR1cm4gbDEoYykucGlwZShzbGUobCksb2xlKGwpKX0oYyxsKTtpZihCWihj'@;
put 'KSlyZXR1cm4gZnVuY3Rpb24gR01lKGMsbCl7cmV0dXJuIG5ldyBYdChhPT57bGV0IGQ9MDtyZXR1cm4gbC5zY2hlZHVsZShmdW5jdGlvbigpe2Q9PT1jLmxlbmd0aD9hLmNvbXBsZXRlKCk6KGEubmV4dChjW2QrK10pLGEuY2xvc2VkfHx0aGlzLnNjaGVkdWxlKCkpfSl9KX0oYyxsKTtpZihY'@;
put 'c2UoYykpcmV0dXJuIGZ1bmN0aW9uIFlNZShjLGwpe3JldHVybiBsMShjKS5waXBlKHNsZShsKSxvbGUobCkpfShjLGwpO2lmKFFzZShjKSlyZXR1cm4gbGxlKGMsbCk7aWYobmxlKGMpKXJldHVybiBmdW5jdGlvbiAkTWUoYyxsKXtyZXR1cm4gbmV3IFh0KGE9PntsZXQgZDtyZXR1cm4gbmco'@;
put 'YSxsLCgpPT57ZD1jW3RsZV0oKSxuZyhhLGwsKCk9PntsZXQgaCxmO3RyeXsoe3ZhbHVlOmgsZG9uZTpmfT1kLm5leHQoKSl9Y2F0Y2godil7cmV0dXJuIHZvaWQgYS5lcnJvcih2KX1mP2EuY29tcGxldGUoKTphLm5leHQoaCl9LDAsITApfSksKCk9PiRlKGQ/LnJldHVybikmJmQucmV0dXJu'@;
put 'KCl9KX0oYyxsKTtpZihpbGUoYykpcmV0dXJuIGZ1bmN0aW9uIEtNZShjLGwpe3JldHVybiBsbGUocmxlKGMpLGwpfShjLGwpfXRocm93IGVsZShjKX0oYyxsKTpsMShjKX1mdW5jdGlvbiBjbGUoYyl7cmV0dXJuIGMmJiRlKGMuc2NoZWR1bGUpfWZ1bmN0aW9uIGpaKGMpe3JldHVybiBjW2Mu'@;
put 'bGVuZ3RoLTFdfWZ1bmN0aW9uIHVsZShjKXtyZXR1cm4gJGUoalooYykpP2MucG9wKCk6dm9pZCAwfWZ1bmN0aW9uIGpNKGMpe3JldHVybiBjbGUoalooYykpP2MucG9wKCk6dm9pZCAwfWZ1bmN0aW9uIGZvKC4uLmMpe3JldHVybiBZdShjLGpNKGMpKX1jb25zdHtpc0FycmF5OkpNZX09QXJy'@;
put 'YXkse2dldFByb3RvdHlwZU9mOlFNZSxwcm90b3R5cGU6ZXhlLGtleXM6dHhlfT1PYmplY3Q7ZnVuY3Rpb24gZGxlKGMpe2lmKDE9PT1jLmxlbmd0aCl7Y29uc3QgbD1jWzBdO2lmKEpNZShsKSlyZXR1cm57YXJnczpsLGtleXM6bnVsbH07aWYoZnVuY3Rpb24gbnhlKGMpe3JldHVybiBjJiYi'@;
put 'b2JqZWN0Ij09dHlwZW9mIGMmJlFNZShjKT09PWV4ZX0obCkpe2NvbnN0IGE9dHhlKGwpO3JldHVybnthcmdzOmEubWFwKGQ9PmxbZF0pLGtleXM6YX19fXJldHVybnthcmdzOmMsa2V5czpudWxsfX1jb25zdHtpc0FycmF5OnJ4ZX09QXJyYXk7ZnVuY3Rpb24gelooYyl7cmV0dXJuIExyKGw9'@;
put 'PmZ1bmN0aW9uIGl4ZShjLGwpe3JldHVybiByeGUobCk/YyguLi5sKTpjKGwpfShjLGwpKX1mdW5jdGlvbiBobGUoYyxsKXtyZXR1cm4gYy5yZWR1Y2UoKGEsZCxoKT0+KGFbZF09bFtoXSxhKSx7fSl9ZnVuY3Rpb24gcTgoLi4uYyl7Y29uc3QgbD1qTShjKSxhPXVsZShjKSx7YXJnczpkLGtl'@;
put 'eXM6aH09ZGxlKGMpO2lmKDA9PT1kLmxlbmd0aClyZXR1cm4gWXUoW10sbCk7Y29uc3QgZj1uZXcgWHQoZnVuY3Rpb24gYXhlKGMsbCxhPWNuKXtyZXR1cm4gZD0+e2ZsZShsLCgpPT57Y29uc3R7bGVuZ3RoOmh9PWMsZj1uZXcgQXJyYXkoaCk7bGV0IHY9aCxNPWg7Zm9yKGxldCBEPTA7RDxo'@;
put 'O0QrKylmbGUobCwoKT0+e2NvbnN0IFo9WXUoY1tEXSxsKTtsZXQgcmU9ITE7Wi5zdWJzY3JpYmUoTmkoZCxjZT0+e2ZbRF09Y2UscmV8fChyZT0hMCxNLS0pLE18fGQubmV4dChhKGYuc2xpY2UoKSkpfSwoKT0+ey0tdnx8ZC5jb21wbGV0ZSgpfSkpfSxkKX0sZCl9fShkLGwsaD92PT5obGUo'@;
put 'aCx2KTpjbikpO3JldHVybiBhP2YucGlwZSh6WihhKSk6Zn1mdW5jdGlvbiBmbGUoYyxsLGEpe2M/bmcoYSxjLGwpOmwoKX1jb25zdCBSUj10dChjPT5mdW5jdGlvbigpe2ModGhpcyksdGhpcy5uYW1lPSJFbXB0eUVycm9yIix0aGlzLm1lc3NhZ2U9Im5vIGVsZW1lbnRzIGluIHNlcXVlbmNl'@;
put 'In0pO2Z1bmN0aW9uIE4wKGMsbCxhPTEvMCl7cmV0dXJuICRlKGwpP04wKChkLGgpPT5McigoZix2KT0+bChkLGYsaCx2KSkobDEoYyhkLGgpKSksYSk6KCJudW1iZXIiPT10eXBlb2YgbCYmKGE9bCksVmkoKGQsaCk9PmZ1bmN0aW9uIG94ZShjLGwsYSxkLGgsZix2LE0pe2NvbnN0IEQ9W107'@;
put 'bGV0IFo9MCxyZT0wLGNlPSExO2NvbnN0IGJlPSgpPT57Y2UmJiFELmxlbmd0aCYmIVomJmwuY29tcGxldGUoKX0sRWU9cWU9Plo8ZD9CZShxZSk6RC5wdXNoKHFlKSxCZT1xZT0+e2YmJmwubmV4dChxZSksWisrO2xldCBydD0hMTtsMShhKHFlLHJlKyspKS5zdWJzY3JpYmUoTmkobCxwdD0+'@;
put 'e2g/LihwdCksZj9FZShwdCk6bC5uZXh0KHB0KX0sKCk9PntydD0hMH0sdm9pZCAwLCgpPT57aWYocnQpdHJ5e2ZvcihaLS07RC5sZW5ndGgmJlo8ZDspe2NvbnN0IHB0PUQuc2hpZnQoKTt2P25nKGwsdiwoKT0+QmUocHQpKTpCZShwdCl9YmUoKX1jYXRjaChwdCl7bC5lcnJvcihwdCl9fSkp'@;
put 'fTtyZXR1cm4gYy5zdWJzY3JpYmUoTmkobCxFZSwoKT0+e2NlPSEwLGJlKCl9KSksKCk9PntNPy4oKX19KGQsaCxjLGEpKSl9ZnVuY3Rpb24gZXkoYz0xLzApe3JldHVybiBOMChjbixjKX1mdW5jdGlvbiBVWiguLi5jKXtyZXR1cm4gZnVuY3Rpb24gc3hlKCl7cmV0dXJuIGV5KDEpfSgpKFl1'@;
put 'KGMsak0oYykpKX1mdW5jdGlvbiBwbGUoYyl7cmV0dXJuIG5ldyBYdChsPT57bDEoYygpKS5zdWJzY3JpYmUobCl9KX1mdW5jdGlvbiB6TShjLGwpe2NvbnN0IGE9JGUoYyk/YzooKT0+YyxkPWg9PmguZXJyb3IoYSgpKTtyZXR1cm4gbmV3IFh0KGw/aD0+bC5zY2hlZHVsZShkLDAsaCk6ZCl9'@;
put 'Y29uc3QgTTI9bmV3IFh0KGM9PmMuY29tcGxldGUoKSk7ZnVuY3Rpb24gWlooKXtyZXR1cm4gVmkoKGMsbCk9PntsZXQgYT1udWxsO2MuX3JlZkNvdW50Kys7Y29uc3QgZD1OaShsLHZvaWQgMCx2b2lkIDAsdm9pZCAwLCgpPT57aWYoIWN8fGMuX3JlZkNvdW50PD0wfHwwPC0tYy5fcmVmQ291'@;
put 'bnQpcmV0dXJuIHZvaWQoYT1udWxsKTtjb25zdCBoPWMuX2Nvbm5lY3Rpb24sZj1hO2E9bnVsbCxoJiYoIWZ8fGg9PT1mKSYmaC51bnN1YnNjcmliZSgpLGwudW5zdWJzY3JpYmUoKX0pO2Muc3Vic2NyaWJlKGQpLGQuY2xvc2VkfHwoYT1jLmNvbm5lY3QoKSl9KX1jbGFzcyBXWiBleHRlbmRz'@;
put 'IFh0e2NvbnN0cnVjdG9yKGwsYSl7c3VwZXIoKSx0aGlzLnNvdXJjZT1sLHRoaXMuc3ViamVjdEZhY3Rvcnk9YSx0aGlzLl9zdWJqZWN0PW51bGwsdGhpcy5fcmVmQ291bnQ9MCx0aGlzLl9jb25uZWN0aW9uPW51bGwsUXIobCkmJih0aGlzLmxpZnQ9bC5saWZ0KX1fc3Vic2NyaWJlKGwpe3Jl'@;
put 'dHVybiB0aGlzLmdldFN1YmplY3QoKS5zdWJzY3JpYmUobCl9Z2V0U3ViamVjdCgpe2NvbnN0IGw9dGhpcy5fc3ViamVjdDtyZXR1cm4oIWx8fGwuaXNTdG9wcGVkKSYmKHRoaXMuX3N1YmplY3Q9dGhpcy5zdWJqZWN0RmFjdG9yeSgpKSx0aGlzLl9zdWJqZWN0fV90ZWFyZG93bigpe3RoaXMu'@;
put 'X3JlZkNvdW50PTA7Y29uc3R7X2Nvbm5lY3Rpb246bH09dGhpczt0aGlzLl9zdWJqZWN0PXRoaXMuX2Nvbm5lY3Rpb249bnVsbCxsPy51bnN1YnNjcmliZSgpfWNvbm5lY3QoKXtsZXQgbD10aGlzLl9jb25uZWN0aW9uO2lmKCFsKXtsPXRoaXMuX2Nvbm5lY3Rpb249bmV3IHF0O2NvbnN0IGE9'@;
put 'dGhpcy5nZXRTdWJqZWN0KCk7bC5hZGQodGhpcy5zb3VyY2Uuc3Vic2NyaWJlKE5pKGEsdm9pZCAwLCgpPT57dGhpcy5fdGVhcmRvd24oKSxhLmNvbXBsZXRlKCl9LGQ9Pnt0aGlzLl90ZWFyZG93bigpLGEuZXJyb3IoZCl9LCgpPT50aGlzLl90ZWFyZG93bigpKSkpLGwuY2xvc2VkJiYodGhp'@;
put 'cy5fY29ubmVjdGlvbj1udWxsLGw9cXQuRU1QVFkpfXJldHVybiBsfXJlZkNvdW50KCl7cmV0dXJuIFpaKCkodGhpcyl9fWZ1bmN0aW9uIFYxKGMsbCl7cmV0dXJuIFZpKChhLGQpPT57bGV0IGg9bnVsbCxmPTAsdj0hMTtjb25zdCBNPSgpPT52JiYhaCYmZC5jb21wbGV0ZSgpO2Euc3Vic2Ny'@;
put 'aWJlKE5pKGQsRD0+e2g/LnVuc3Vic2NyaWJlKCk7bGV0IFo9MDtjb25zdCByZT1mKys7bDEoYyhELHJlKSkuc3Vic2NyaWJlKGg9TmkoZCxjZT0+ZC5uZXh0KGw/bChELGNlLHJlLForKyk6Y2UpLCgpPT57aD1udWxsLE0oKX0pKX0sKCk9Pnt2PSEwLE0oKX0pKX0pfWZ1bmN0aW9uIFlmKGMp'@;
put 'e3JldHVybiBjPD0wPygpPT5NMjpWaSgobCxhKT0+e2xldCBkPTA7bC5zdWJzY3JpYmUoTmkoYSxoPT57KytkPD1jJiYoYS5uZXh0KGgpLGM8PWQmJmEuY29tcGxldGUoKSl9KSl9KX1mdW5jdGlvbiB4MiguLi5jKXtjb25zdCBsPWpNKGMpO3JldHVybiBWaSgoYSxkKT0+eyhsP1VaKGMsYSxs'@;
put 'KTpVWihjLGEpKS5zdWJzY3JpYmUoZCl9KX1mdW5jdGlvbiAkbChjLGwpe3JldHVybiBWaSgoYSxkKT0+e2xldCBoPTA7YS5zdWJzY3JpYmUoTmkoZCxmPT5jLmNhbGwobCxmLGgrKykmJmQubmV4dChmKSkpfSl9ZnVuY3Rpb24gTFIoYyl7cmV0dXJuIFZpKChsLGEpPT57bGV0IGQ9ITE7bC5z'@;
put 'dWJzY3JpYmUoTmkoYSxoPT57ZD0hMCxhLm5leHQoaCl9LCgpPT57ZHx8YS5uZXh0KGMpLGEuY29tcGxldGUoKX0pKX0pfWZ1bmN0aW9uIGdsZShjPWN4ZSl7cmV0dXJuIFZpKChsLGEpPT57bGV0IGQ9ITE7bC5zdWJzY3JpYmUoTmkoYSxoPT57ZD0hMCxhLm5leHQoaCl9LCgpPT5kP2EuY29t'@;
put 'cGxldGUoKTphLmVycm9yKGMoKSkpKX0pfWZ1bmN0aW9uIGN4ZSgpe3JldHVybiBuZXcgUlJ9ZnVuY3Rpb24gYW0oYyxsKXtjb25zdCBhPWFyZ3VtZW50cy5sZW5ndGg+PTI7cmV0dXJuIGQ9PmQucGlwZShjPyRsKChoLGYpPT5jKGgsZixkKSk6Y24sWWYoMSksYT9MUihsKTpnbGUoKCk9Pm5l'@;
put 'dyBSUikpfWZ1bmN0aW9uIHR5KGMsbCl7cmV0dXJuICRlKGwpP04wKGMsbCwxKTpOMChjLDEpfWZ1bmN0aW9uIEd1KGMsbCxhKXtjb25zdCBkPSRlKGMpfHxsfHxhP3tuZXh0OmMsZXJyb3I6bCxjb21wbGV0ZTphfTpjO3JldHVybiBkP1ZpKChoLGYpPT57dmFyIHY7bnVsbD09PSh2PWQuc3Vi'@;
put 'c2NyaWJlKXx8dm9pZCAwPT09dnx8di5jYWxsKGQpO2xldCBNPSEwO2guc3Vic2NyaWJlKE5pKGYsRD0+e3ZhciBaO251bGw9PT0oWj1kLm5leHQpfHx2b2lkIDA9PT1afHxaLmNhbGwoZCxEKSxmLm5leHQoRCl9LCgpPT57dmFyIEQ7TT0hMSxudWxsPT09KEQ9ZC5jb21wbGV0ZSl8fHZvaWQg'@;
put 'MD09PUR8fEQuY2FsbChkKSxmLmNvbXBsZXRlKCl9LEQ9Pnt2YXIgWjtNPSExLG51bGw9PT0oWj1kLmVycm9yKXx8dm9pZCAwPT09Wnx8Wi5jYWxsKGQsRCksZi5lcnJvcihEKX0sKCk9Pnt2YXIgRCxaO00mJihudWxsPT09KEQ9ZC51bnN1YnNjcmliZSl8fHZvaWQgMD09PUR8fEQuY2FsbChk'@;
put 'KSksbnVsbD09PShaPWQuZmluYWxpemUpfHx2b2lkIDA9PT1afHxaLmNhbGwoZCl9KSl9KTpjbn1mdW5jdGlvbiBYOChjKXtyZXR1cm4gVmkoKGwsYSk9PntsZXQgZixkPW51bGwsaD0hMTtkPWwuc3Vic2NyaWJlKE5pKGEsdm9pZCAwLHZvaWQgMCx2PT57Zj1sMShjKHYsWDgoYykobCkpKSxk'@;
put 'PyhkLnVuc3Vic2NyaWJlKCksZD1udWxsLGYuc3Vic2NyaWJlKGEpKTpoPSEwfSkpLGgmJihkLnVuc3Vic2NyaWJlKCksZD1udWxsLGYuc3Vic2NyaWJlKGEpKX0pfWZ1bmN0aW9uIFlaKGMpe3JldHVybiBjPD0wPygpPT5NMjpWaSgobCxhKT0+e2xldCBkPVtdO2wuc3Vic2NyaWJlKE5pKGEs'@;
put 'aD0+e2QucHVzaChoKSxjPGQubGVuZ3RoJiZkLnNoaWZ0KCl9LCgpPT57Zm9yKGNvbnN0IGggb2YgZClhLm5leHQoaCk7YS5jb21wbGV0ZSgpfSx2b2lkIDAsKCk9PntkPW51bGx9KSl9KX1mdW5jdGlvbiBVTShjKXtyZXR1cm4gVmkoKGwsYSk9Pnt0cnl7bC5zdWJzY3JpYmUoYSl9ZmluYWxs'@;
put 'eXthLmFkZChjKX19KX1mdW5jdGlvbiBWMChjKXtyZXR1cm4gVmkoKGwsYSk9PntsMShjKS5zdWJzY3JpYmUoTmkoYSwoKT0+YS5jb21wbGV0ZSgpLGhuKSksIWEuY2xvc2VkJiZsLnN1YnNjcmliZShhKX0pfWNvbnN0IEtvPSJwcmltYXJ5IixaTT1TeW1ib2woIlJvdXRlVGl0bGUiKTtjbGFz'@;
put 'cyBweGV7Y29uc3RydWN0b3IobCl7dGhpcy5wYXJhbXM9bHx8e319aGFzKGwpe3JldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy5wYXJhbXMsbCl9Z2V0KGwpe2lmKHRoaXMuaGFzKGwpKXtjb25zdCBhPXRoaXMucGFyYW1zW2xdO3JldHVybiBBcnJheS5p'@;
put 'c0FycmF5KGEpP2FbMF06YX1yZXR1cm4gbnVsbH1nZXRBbGwobCl7aWYodGhpcy5oYXMobCkpe2NvbnN0IGE9dGhpcy5wYXJhbXNbbF07cmV0dXJuIEFycmF5LmlzQXJyYXkoYSk/YTpbYV19cmV0dXJuW119Z2V0IGtleXMoKXtyZXR1cm4gT2JqZWN0LmtleXModGhpcy5wYXJhbXMpfX1mdW5j'@;
put 'dGlvbiBueShjKXtyZXR1cm4gbmV3IHB4ZShjKX1mdW5jdGlvbiBneGUoYyxsLGEpe2NvbnN0IGQ9YS5wYXRoLnNwbGl0KCIvIik7aWYoZC5sZW5ndGg+Yy5sZW5ndGh8fCJmdWxsIj09PWEucGF0aE1hdGNoJiYobC5oYXNDaGlsZHJlbigpfHxkLmxlbmd0aDxjLmxlbmd0aCkpcmV0dXJuIG51'@;
put 'bGw7Y29uc3QgaD17fTtmb3IobGV0IGY9MDtmPGQubGVuZ3RoO2YrKyl7Y29uc3Qgdj1kW2ZdLE09Y1tmXTtpZih2LnN0YXJ0c1dpdGgoIjoiKSloW3Yuc3Vic3RyaW5nKDEpXT1NO2Vsc2UgaWYodiE9PU0ucGF0aClyZXR1cm4gbnVsbH1yZXR1cm57Y29uc3VtZWQ6Yy5zbGljZSgwLGQubGVu'@;
put 'Z3RoKSxwb3NQYXJhbXM6aH19ZnVuY3Rpb24gaHAoYyxsKXtjb25zdCBhPWM/R1ooYyk6dm9pZCAwLGQ9bD9HWihsKTp2b2lkIDA7aWYoIWF8fCFkfHxhLmxlbmd0aCE9ZC5sZW5ndGgpcmV0dXJuITE7bGV0IGg7Zm9yKGxldCBmPTA7ZjxhLmxlbmd0aDtmKyspaWYoaD1hW2ZdLCFtbGUoY1to'@;
put 'XSxsW2hdKSlyZXR1cm4hMTtyZXR1cm4hMH1mdW5jdGlvbiBHWihjKXtyZXR1cm5bLi4uT2JqZWN0LmtleXMoYyksLi4uT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhjKV19ZnVuY3Rpb24gbWxlKGMsbCl7aWYoQXJyYXkuaXNBcnJheShjKSYmQXJyYXkuaXNBcnJheShsKSl7aWYoYy5s'@;
put 'ZW5ndGghPT1sLmxlbmd0aClyZXR1cm4hMTtjb25zdCBhPVsuLi5jXS5zb3J0KCksZD1bLi4ubF0uc29ydCgpO3JldHVybiBhLmV2ZXJ5KChoLGYpPT5kW2ZdPT09aCl9cmV0dXJuIGM9PT1sfWZ1bmN0aW9uIHZsZShjKXtyZXR1cm4gYy5sZW5ndGg+MD9jW2MubGVuZ3RoLTFdOm51bGx9ZnVu'@;
put 'Y3Rpb24gb20oYyl7cmV0dXJuIEJNKGMpP2M6X00oYyk/WXUoUHJvbWlzZS5yZXNvbHZlKGMpKTpmbyhjKX1jb25zdCB2eGU9e2V4YWN0OmZ1bmN0aW9uIF9sZShjLGwsYSl7aWYoIUo4KGMuc2VnbWVudHMsbC5zZWdtZW50cyl8fCFPUihjLnNlZ21lbnRzLGwuc2VnbWVudHMsYSl8fGMubnVt'@;
put 'YmVyT2ZDaGlsZHJlbiE9PWwubnVtYmVyT2ZDaGlsZHJlbilyZXR1cm4hMTtmb3IoY29uc3QgZCBpbiBsLmNoaWxkcmVuKWlmKCFjLmNoaWxkcmVuW2RdfHwhX2xlKGMuY2hpbGRyZW5bZF0sbC5jaGlsZHJlbltkXSxhKSlyZXR1cm4hMTtyZXR1cm4hMH0sc3Vic2V0OndsZX0sYmxlPXtleGFj'@;
put 'dDpmdW5jdGlvbiBieGUoYyxsKXtyZXR1cm4gaHAoYyxsKX0sc3Vic2V0OmZ1bmN0aW9uIHl4ZShjLGwpe3JldHVybiBPYmplY3Qua2V5cyhsKS5sZW5ndGg8PU9iamVjdC5rZXlzKGMpLmxlbmd0aCYmT2JqZWN0LmtleXMobCkuZXZlcnkoYT0+bWxlKGNbYV0sbFthXSkpfSxpZ25vcmVkOigp'@;
put 'PT4hMH07ZnVuY3Rpb24geWxlKGMsbCxhKXtyZXR1cm4gdnhlW2EucGF0aHNdKGMucm9vdCxsLnJvb3QsYS5tYXRyaXhQYXJhbXMpJiZibGVbYS5xdWVyeVBhcmFtc10oYy5xdWVyeVBhcmFtcyxsLnF1ZXJ5UGFyYW1zKSYmISgiZXhhY3QiPT09YS5mcmFnbWVudCYmYy5mcmFnbWVudCE9PWwu'@;
put 'ZnJhZ21lbnQpfWZ1bmN0aW9uIHdsZShjLGwsYSl7cmV0dXJuIENsZShjLGwsbC5zZWdtZW50cyxhKX1mdW5jdGlvbiBDbGUoYyxsLGEsZCl7aWYoYy5zZWdtZW50cy5sZW5ndGg+YS5sZW5ndGgpe2NvbnN0IGg9Yy5zZWdtZW50cy5zbGljZSgwLGEubGVuZ3RoKTtyZXR1cm4hKCFKOChoLGEp'@;
put 'fHxsLmhhc0NoaWxkcmVuKCl8fCFPUihoLGEsZCkpfWlmKGMuc2VnbWVudHMubGVuZ3RoPT09YS5sZW5ndGgpe2lmKCFKOChjLnNlZ21lbnRzLGEpfHwhT1IoYy5zZWdtZW50cyxhLGQpKXJldHVybiExO2Zvcihjb25zdCBoIGluIGwuY2hpbGRyZW4paWYoIWMuY2hpbGRyZW5baF18fCF3bGUo'@;
put 'Yy5jaGlsZHJlbltoXSxsLmNoaWxkcmVuW2hdLGQpKXJldHVybiExO3JldHVybiEwfXtjb25zdCBoPWEuc2xpY2UoMCxjLnNlZ21lbnRzLmxlbmd0aCksZj1hLnNsaWNlKGMuc2VnbWVudHMubGVuZ3RoKTtyZXR1cm4hIShKOChjLnNlZ21lbnRzLGgpJiZPUihjLnNlZ21lbnRzLGgsZCkmJmMu'@;
put 'Y2hpbGRyZW5bS29dKSYmQ2xlKGMuY2hpbGRyZW5bS29dLGwsZixkKX19ZnVuY3Rpb24gT1IoYyxsLGEpe3JldHVybiBsLmV2ZXJ5KChkLGgpPT5ibGVbYV0oY1toXS5wYXJhbWV0ZXJzLGQucGFyYW1ldGVycykpfWNsYXNzIHJ5e2NvbnN0cnVjdG9yKGw9bmV3IEtsKFtdLHt9KSxhPXt9LGQ9'@;
put 'bnVsbCl7dGhpcy5yb290PWwsdGhpcy5xdWVyeVBhcmFtcz1hLHRoaXMuZnJhZ21lbnQ9ZH1nZXQgcXVlcnlQYXJhbU1hcCgpe3JldHVybiB0aGlzLl9xdWVyeVBhcmFtTWFwPz89bnkodGhpcy5xdWVyeVBhcmFtcyksdGhpcy5fcXVlcnlQYXJhbU1hcH10b1N0cmluZygpe3JldHVybiBDeGUu'@;
put 'c2VyaWFsaXplKHRoaXMpfX1jbGFzcyBLbHtjb25zdHJ1Y3RvcihsLGEpe3RoaXMuc2VnbWVudHM9bCx0aGlzLmNoaWxkcmVuPWEsdGhpcy5wYXJlbnQ9bnVsbCxPYmplY3QudmFsdWVzKGEpLmZvckVhY2goZD0+ZC5wYXJlbnQ9dGhpcyl9aGFzQ2hpbGRyZW4oKXtyZXR1cm4gdGhpcy5udW1i'@;
put 'ZXJPZkNoaWxkcmVuPjB9Z2V0IG51bWJlck9mQ2hpbGRyZW4oKXtyZXR1cm4gT2JqZWN0LmtleXModGhpcy5jaGlsZHJlbikubGVuZ3RofXRvU3RyaW5nKCl7cmV0dXJuIFBSKHRoaXMpfX1jbGFzcyBXTXtjb25zdHJ1Y3RvcihsLGEpe3RoaXMucGF0aD1sLHRoaXMucGFyYW1ldGVycz1hfWdl'@;
put 'dCBwYXJhbWV0ZXJNYXAoKXtyZXR1cm4gdGhpcy5fcGFyYW1ldGVyTWFwPz89bnkodGhpcy5wYXJhbWV0ZXJzKSx0aGlzLl9wYXJhbWV0ZXJNYXB9dG9TdHJpbmcoKXtyZXR1cm4geGxlKHRoaXMpfX1mdW5jdGlvbiBKOChjLGwpe3JldHVybiBjLmxlbmd0aD09PWwubGVuZ3RoJiZjLmV2ZXJ5'@;
put 'KChhLGQpPT5hLnBhdGg9PT1sW2RdLnBhdGgpfWxldCBpeT0oKCk9PntjbGFzcyBje3N0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6KCk9Pm5ldyAkWixwcm92aWRlZElu'@;
put 'OiJyb290In0pfX1yZXR1cm4gY30pKCk7Y2xhc3MgJFp7cGFyc2UobCl7Y29uc3QgYT1uZXcgTHhlKGwpO3JldHVybiBuZXcgcnkoYS5wYXJzZVJvb3RTZWdtZW50KCksYS5wYXJzZVF1ZXJ5UGFyYW1zKCksYS5wYXJzZUZyYWdtZW50KCkpfXNlcmlhbGl6ZShsKXtjb25zdCBhPWAvJHtZTShs'@;
put 'LnJvb3QsITApfWAsZD1mdW5jdGlvbiB4eGUoYyl7Y29uc3QgbD1PYmplY3QuZW50cmllcyhjKS5tYXAoKFthLGRdKT0+QXJyYXkuaXNBcnJheShkKT9kLm1hcChoPT5gJHtGUihhKX09JHtGUihoKX1gKS5qb2luKCImIik6YCR7RlIoYSl9PSR7RlIoZCl9YCkuZmlsdGVyKGE9PmEpO3JldHVy'@;
put 'biBsLmxlbmd0aD9gPyR7bC5qb2luKCImIil9YDoiIn0obC5xdWVyeVBhcmFtcyksaD0ic3RyaW5nIj09dHlwZW9mIGwuZnJhZ21lbnQ/YCMke2Z1bmN0aW9uIFN4ZShjKXtyZXR1cm4gZW5jb2RlVVJJKGMpfShsLmZyYWdtZW50KX1gOiIiO3JldHVybmAke2F9JHtkfSR7aH1gfX1jb25zdCBD'@;
put 'eGU9bmV3ICRaO2Z1bmN0aW9uIFBSKGMpe3JldHVybiBjLnNlZ21lbnRzLm1hcChsPT54bGUobCkpLmpvaW4oIi8iKX1mdW5jdGlvbiBZTShjLGwpe2lmKCFjLmhhc0NoaWxkcmVuKCkpcmV0dXJuIFBSKGMpO2lmKGwpe2NvbnN0IGE9Yy5jaGlsZHJlbltLb10/WU0oYy5jaGlsZHJlbltLb10s'@;
put 'ITEpOiIiLGQ9W107cmV0dXJuIE9iamVjdC5lbnRyaWVzKGMuY2hpbGRyZW4pLmZvckVhY2goKFtoLGZdKT0+e2ghPT1LbyYmZC5wdXNoKGAke2h9OiR7WU0oZiwhMSl9YCl9KSxkLmxlbmd0aD4wP2Ake2F9KCR7ZC5qb2luKCIvLyIpfSlgOmF9e2NvbnN0IGE9ZnVuY3Rpb24gd3hlKGMsbCl7'@;
put 'bGV0IGE9W107cmV0dXJuIE9iamVjdC5lbnRyaWVzKGMuY2hpbGRyZW4pLmZvckVhY2goKFtkLGhdKT0+e2Q9PT1LbyYmKGE9YS5jb25jYXQobChoLGQpKSl9KSxPYmplY3QuZW50cmllcyhjLmNoaWxkcmVuKS5mb3JFYWNoKChbZCxoXSk9PntkIT09S28mJihhPWEuY29uY2F0KGwoaCxkKSkp'@;
put 'fSksYX0oYywoZCxoKT0+aD09PUtvP1tZTShjLmNoaWxkcmVuW0tvXSwhMSldOltgJHtofToke1lNKGQsITEpfWBdKTtyZXR1cm4gMT09PU9iamVjdC5rZXlzKGMuY2hpbGRyZW4pLmxlbmd0aCYmbnVsbCE9Yy5jaGlsZHJlbltLb10/YCR7UFIoYyl9LyR7YVswXX1gOmAke1BSKGMpfS8oJHth'@;
put 'LmpvaW4oIi8vIil9KWB9fWZ1bmN0aW9uIFNsZShjKXtyZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KGMpLnJlcGxhY2UoLyU0MC9nLCJAIikucmVwbGFjZSgvJTNBL2dpLCI6IikucmVwbGFjZSgvJTI0L2csIiQiKS5yZXBsYWNlKC8lMkMvZ2ksIiwiKX1mdW5jdGlvbiBGUihjKXtyZXR1cm4g'@;
put 'U2xlKGMpLnJlcGxhY2UoLyUzQi9naSwiOyIpfWZ1bmN0aW9uIEtaKGMpe3JldHVybiBTbGUoYykucmVwbGFjZSgvXCgvZywiJTI4IikucmVwbGFjZSgvXCkvZywiJTI5IikucmVwbGFjZSgvJTI2L2dpLCImIil9ZnVuY3Rpb24gSFIoYyl7cmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChjKX1m'@;
put 'dW5jdGlvbiBNbGUoYyl7cmV0dXJuIEhSKGMucmVwbGFjZSgvXCsvZywiJTIwIikpfWZ1bmN0aW9uIHhsZShjKXtyZXR1cm5gJHtLWihjLnBhdGgpfSR7ZnVuY3Rpb24gTXhlKGMpe3JldHVybiBPYmplY3QuZW50cmllcyhjKS5tYXAoKFtsLGFdKT0+YDske0taKGwpfT0ke0taKGEpfWApLmpv'@;
put 'aW4oIiIpfShjLnBhcmFtZXRlcnMpfWB9Y29uc3QgRXhlPS9eW15cLygpPzsjXSsvO2Z1bmN0aW9uIHFaKGMpe2NvbnN0IGw9Yy5tYXRjaChFeGUpO3JldHVybiBsP2xbMF06IiJ9Y29uc3QgVHhlPS9eW15cLygpPzs9I10rLyxreGU9L15bXj0/JiNdKy8sSXhlPS9eW14mI10rLztjbGFzcyBM'@;
put 'eGV7Y29uc3RydWN0b3IobCl7dGhpcy51cmw9bCx0aGlzLnJlbWFpbmluZz1sfXBhcnNlUm9vdFNlZ21lbnQoKXtyZXR1cm4gdGhpcy5jb25zdW1lT3B0aW9uYWwoIi8iKSwiIj09PXRoaXMucmVtYWluaW5nfHx0aGlzLnBlZWtTdGFydHNXaXRoKCI/Iil8fHRoaXMucGVla1N0YXJ0c1dpdGgo'@;
put 'IiMiKT9uZXcgS2woW10se30pOm5ldyBLbChbXSx0aGlzLnBhcnNlQ2hpbGRyZW4oKSl9cGFyc2VRdWVyeVBhcmFtcygpe2NvbnN0IGw9e307aWYodGhpcy5jb25zdW1lT3B0aW9uYWwoIj8iKSlkb3t0aGlzLnBhcnNlUXVlcnlQYXJhbShsKX13aGlsZSh0aGlzLmNvbnN1bWVPcHRpb25hbCgi'@;
put 'JiIpKTtyZXR1cm4gbH1wYXJzZUZyYWdtZW50KCl7cmV0dXJuIHRoaXMuY29uc3VtZU9wdGlvbmFsKCIjIik/ZGVjb2RlVVJJQ29tcG9uZW50KHRoaXMucmVtYWluaW5nKTpudWxsfXBhcnNlQ2hpbGRyZW4oKXtpZigiIj09PXRoaXMucmVtYWluaW5nKXJldHVybnt9O3RoaXMuY29uc3VtZU9w'@;
put 'dGlvbmFsKCIvIik7Y29uc3QgbD1bXTtmb3IodGhpcy5wZWVrU3RhcnRzV2l0aCgiKCIpfHxsLnB1c2godGhpcy5wYXJzZVNlZ21lbnQoKSk7dGhpcy5wZWVrU3RhcnRzV2l0aCgiLyIpJiYhdGhpcy5wZWVrU3RhcnRzV2l0aCgiLy8iKSYmIXRoaXMucGVla1N0YXJ0c1dpdGgoIi8oIik7KXRo'@;
put 'aXMuY2FwdHVyZSgiLyIpLGwucHVzaCh0aGlzLnBhcnNlU2VnbWVudCgpKTtsZXQgYT17fTt0aGlzLnBlZWtTdGFydHNXaXRoKCIvKCIpJiYodGhpcy5jYXB0dXJlKCIvIiksYT10aGlzLnBhcnNlUGFyZW5zKCEwKSk7bGV0IGQ9e307cmV0dXJuIHRoaXMucGVla1N0YXJ0c1dpdGgoIigiKSYm'@;
put 'KGQ9dGhpcy5wYXJzZVBhcmVucyghMSkpLChsLmxlbmd0aD4wfHxPYmplY3Qua2V5cyhhKS5sZW5ndGg+MCkmJihkW0tvXT1uZXcgS2wobCxhKSksZH1wYXJzZVNlZ21lbnQoKXtjb25zdCBsPXFaKHRoaXMucmVtYWluaW5nKTtpZigiIj09PWwmJnRoaXMucGVla1N0YXJ0c1dpdGgoIjsiKSl0'@;
put 'aHJvdyBuZXcgUW4oNDAwOSwhMSk7cmV0dXJuIHRoaXMuY2FwdHVyZShsKSxuZXcgV00oSFIobCksdGhpcy5wYXJzZU1hdHJpeFBhcmFtcygpKX1wYXJzZU1hdHJpeFBhcmFtcygpe2NvbnN0IGw9e307Zm9yKDt0aGlzLmNvbnN1bWVPcHRpb25hbCgiOyIpOyl0aGlzLnBhcnNlUGFyYW0obCk7'@;
put 'cmV0dXJuIGx9cGFyc2VQYXJhbShsKXtjb25zdCBhPWZ1bmN0aW9uIEF4ZShjKXtjb25zdCBsPWMubWF0Y2goVHhlKTtyZXR1cm4gbD9sWzBdOiIifSh0aGlzLnJlbWFpbmluZyk7aWYoIWEpcmV0dXJuO3RoaXMuY2FwdHVyZShhKTtsZXQgZD0iIjtpZih0aGlzLmNvbnN1bWVPcHRpb25hbCgi'@;
put 'PSIpKXtjb25zdCBoPXFaKHRoaXMucmVtYWluaW5nKTtoJiYoZD1oLHRoaXMuY2FwdHVyZShkKSl9bFtIUihhKV09SFIoZCl9cGFyc2VRdWVyeVBhcmFtKGwpe2NvbnN0IGE9ZnVuY3Rpb24gRHhlKGMpe2NvbnN0IGw9Yy5tYXRjaChreGUpO3JldHVybiBsP2xbMF06IiJ9KHRoaXMucmVtYWlu'@;
put 'aW5nKTtpZighYSlyZXR1cm47dGhpcy5jYXB0dXJlKGEpO2xldCBkPSIiO2lmKHRoaXMuY29uc3VtZU9wdGlvbmFsKCI9Iikpe2NvbnN0IHY9ZnVuY3Rpb24gUnhlKGMpe2NvbnN0IGw9Yy5tYXRjaChJeGUpO3JldHVybiBsP2xbMF06IiJ9KHRoaXMucmVtYWluaW5nKTt2JiYoZD12LHRoaXMu'@;
put 'Y2FwdHVyZShkKSl9Y29uc3QgaD1NbGUoYSksZj1NbGUoZCk7aWYobC5oYXNPd25Qcm9wZXJ0eShoKSl7bGV0IHY9bFtoXTtBcnJheS5pc0FycmF5KHYpfHwodj1bdl0sbFtoXT12KSx2LnB1c2goZil9ZWxzZSBsW2hdPWZ9cGFyc2VQYXJlbnMobCl7Y29uc3QgYT17fTtmb3IodGhpcy5jYXB0'@;
put 'dXJlKCIoIik7IXRoaXMuY29uc3VtZU9wdGlvbmFsKCIpIikmJnRoaXMucmVtYWluaW5nLmxlbmd0aD4wOyl7Y29uc3QgZD1xWih0aGlzLnJlbWFpbmluZyksaD10aGlzLnJlbWFpbmluZ1tkLmxlbmd0aF07aWYoIi8iIT09aCYmIikiIT09aCYmIjsiIT09aCl0aHJvdyBuZXcgUW4oNDAxMCwh'@;
put 'MSk7bGV0IGY7ZC5pbmRleE9mKCI6Iik+LTE/KGY9ZC5zbGljZSgwLGQuaW5kZXhPZigiOiIpKSx0aGlzLmNhcHR1cmUoZiksdGhpcy5jYXB0dXJlKCI6IikpOmwmJihmPUtvKTtjb25zdCB2PXRoaXMucGFyc2VDaGlsZHJlbigpO2FbZl09MT09PU9iamVjdC5rZXlzKHYpLmxlbmd0aD92W0tv'@;
put 'XTpuZXcgS2woW10sdiksdGhpcy5jb25zdW1lT3B0aW9uYWwoIi8vIil9cmV0dXJuIGF9cGVla1N0YXJ0c1dpdGgobCl7cmV0dXJuIHRoaXMucmVtYWluaW5nLnN0YXJ0c1dpdGgobCl9Y29uc3VtZU9wdGlvbmFsKGwpe3JldHVybiEhdGhpcy5wZWVrU3RhcnRzV2l0aChsKSYmKHRoaXMucmVt'@;
put 'YWluaW5nPXRoaXMucmVtYWluaW5nLnN1YnN0cmluZyhsLmxlbmd0aCksITApfWNhcHR1cmUobCl7aWYoIXRoaXMuY29uc3VtZU9wdGlvbmFsKGwpKXRocm93IG5ldyBRbig0MDExLCExKX19ZnVuY3Rpb24gRWxlKGMpe3JldHVybiBjLnNlZ21lbnRzLmxlbmd0aD4wP25ldyBLbChbXSx7W0tv'@;
put 'XTpjfSk6Y31mdW5jdGlvbiBUbGUoYyl7Y29uc3QgbD17fTtmb3IoY29uc3RbZCxoXW9mIE9iamVjdC5lbnRyaWVzKGMuY2hpbGRyZW4pKXtjb25zdCBmPVRsZShoKTtpZihkPT09S28mJjA9PT1mLnNlZ21lbnRzLmxlbmd0aCYmZi5oYXNDaGlsZHJlbigpKWZvcihjb25zdFt2LE1db2YgT2Jq'@;
put 'ZWN0LmVudHJpZXMoZi5jaGlsZHJlbikpbFt2XT1NO2Vsc2UoZi5zZWdtZW50cy5sZW5ndGg+MHx8Zi5oYXNDaGlsZHJlbigpKSYmKGxbZF09Zil9cmV0dXJuIGZ1bmN0aW9uIE94ZShjKXtpZigxPT09Yy5udW1iZXJPZkNoaWxkcmVuJiZjLmNoaWxkcmVuW0tvXSl7Y29uc3QgbD1jLmNoaWxk'@;
put 'cmVuW0tvXTtyZXR1cm4gbmV3IEtsKGMuc2VnbWVudHMuY29uY2F0KGwuc2VnbWVudHMpLGwuY2hpbGRyZW4pfXJldHVybiBjfShuZXcgS2woYy5zZWdtZW50cyxsKSl9ZnVuY3Rpb24gYXkoYyl7cmV0dXJuIGMgaW5zdGFuY2VvZiByeX1mdW5jdGlvbiBBbGUoYyl7bGV0IGw7Y29uc3QgaD1F'@;
put 'bGUoZnVuY3Rpb24gYShmKXtjb25zdCB2PXt9O2Zvcihjb25zdCBEIG9mIGYuY2hpbGRyZW4pe2NvbnN0IFo9YShEKTt2W0Qub3V0bGV0XT1afWNvbnN0IE09bmV3IEtsKGYudXJsLHYpO3JldHVybiBmPT09YyYmKGw9TSksTX0oYy5yb290KSk7cmV0dXJuIGw/P2h9ZnVuY3Rpb24ga2xlKGMs'@;
put 'bCxhLGQpe2xldCBoPWM7Zm9yKDtoLnBhcmVudDspaD1oLnBhcmVudDtpZigwPT09bC5sZW5ndGgpcmV0dXJuIFhaKGgsaCxoLGEsZCk7Y29uc3QgZj1mdW5jdGlvbiBGeGUoYyl7aWYoInN0cmluZyI9PXR5cGVvZiBjWzBdJiYxPT09Yy5sZW5ndGgmJiIvIj09PWNbMF0pcmV0dXJuIG5ldyBJ'@;
put 'bGUoITAsMCxjKTtsZXQgbD0wLGE9ITE7Y29uc3QgZD1jLnJlZHVjZSgoaCxmLHYpPT57aWYoIm9iamVjdCI9PXR5cGVvZiBmJiZudWxsIT1mKXtpZihmLm91dGxldHMpe2NvbnN0IE09e307cmV0dXJuIE9iamVjdC5lbnRyaWVzKGYub3V0bGV0cykuZm9yRWFjaCgoW0QsWl0pPT57TVtEXT0i'@;
put 'c3RyaW5nIj09dHlwZW9mIFo/Wi5zcGxpdCgiLyIpOlp9KSxbLi4uaCx7b3V0bGV0czpNfV19aWYoZi5zZWdtZW50UGF0aClyZXR1cm5bLi4uaCxmLnNlZ21lbnRQYXRoXX1yZXR1cm4ic3RyaW5nIiE9dHlwZW9mIGY/Wy4uLmgsZl06MD09PXY/KGYuc3BsaXQoIi8iKS5mb3JFYWNoKChNLEQp'@;
put 'PT57MD09RCYmIi4iPT09TXx8KDA9PUQmJiIiPT09TT9hPSEwOiIuLiI9PT1NP2wrKzoiIiE9TSYmaC5wdXNoKE0pKX0pLGgpOlsuLi5oLGZdfSxbXSk7cmV0dXJuIG5ldyBJbGUoYSxsLGQpfShsKTtpZihmLnRvUm9vdCgpKXJldHVybiBYWihoLGgsbmV3IEtsKFtdLHt9KSxhLGQpO2NvbnN0'@;
put 'IHY9ZnVuY3Rpb24gSHhlKGMsbCxhKXtpZihjLmlzQWJzb2x1dGUpcmV0dXJuIG5ldyBWUihsLCEwLDApO2lmKCFhKXJldHVybiBuZXcgVlIobCwhMSxOYU4pO2lmKG51bGw9PT1hLnBhcmVudClyZXR1cm4gbmV3IFZSKGEsITAsMCk7Y29uc3QgZD1OUihjLmNvbW1hbmRzWzBdKT8wOjE7cmV0'@;
put 'dXJuIGZ1bmN0aW9uIE54ZShjLGwsYSl7bGV0IGQ9YyxoPWwsZj1hO2Zvcig7Zj5oOyl7aWYoZi09aCxkPWQucGFyZW50LCFkKXRocm93IG5ldyBRbig0MDA1LCExKTtoPWQuc2VnbWVudHMubGVuZ3RofXJldHVybiBuZXcgVlIoZCwhMSxoLWYpfShhLGEuc2VnbWVudHMubGVuZ3RoLTErZCxj'@;
put 'Lm51bWJlck9mRG91YmxlRG90cyl9KGYsaCxjKSxNPXYucHJvY2Vzc0NoaWxkcmVuPyRNKHYuc2VnbWVudEdyb3VwLHYuaW5kZXgsZi5jb21tYW5kcyk6UmxlKHYuc2VnbWVudEdyb3VwLHYuaW5kZXgsZi5jb21tYW5kcyk7cmV0dXJuIFhaKGgsdi5zZWdtZW50R3JvdXAsTSxhLGQpfWZ1bmN0'@;
put 'aW9uIE5SKGMpe3JldHVybiJvYmplY3QiPT10eXBlb2YgYyYmbnVsbCE9YyYmIWMub3V0bGV0cyYmIWMuc2VnbWVudFBhdGh9ZnVuY3Rpb24gR00oYyl7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiBjJiZudWxsIT1jJiZjLm91dGxldHN9ZnVuY3Rpb24gWFooYyxsLGEsZCxoKXtsZXQgdixmPXt9'@;
put 'O2QmJk9iamVjdC5lbnRyaWVzKGQpLmZvckVhY2goKFtELFpdKT0+e2ZbRF09QXJyYXkuaXNBcnJheShaKT9aLm1hcChyZT0+YCR7cmV9YCk6YCR7Wn1gfSksdj1jPT09bD9hOkRsZShjLGwsYSk7Y29uc3QgTT1FbGUoVGxlKHYpKTtyZXR1cm4gbmV3IHJ5KE0sZixoKX1mdW5jdGlvbiBEbGUo'@;
put 'YyxsLGEpe2NvbnN0IGQ9e307cmV0dXJuIE9iamVjdC5lbnRyaWVzKGMuY2hpbGRyZW4pLmZvckVhY2goKFtoLGZdKT0+e2RbaF09Zj09PWw/YTpEbGUoZixsLGEpfSksbmV3IEtsKGMuc2VnbWVudHMsZCl9Y2xhc3MgSWxle2NvbnN0cnVjdG9yKGwsYSxkKXtpZih0aGlzLmlzQWJzb2x1dGU9'@;
put 'bCx0aGlzLm51bWJlck9mRG91YmxlRG90cz1hLHRoaXMuY29tbWFuZHM9ZCxsJiZkLmxlbmd0aD4wJiZOUihkWzBdKSl0aHJvdyBuZXcgUW4oNDAwMywhMSk7Y29uc3QgaD1kLmZpbmQoR00pO2lmKGgmJmghPT12bGUoZCkpdGhyb3cgbmV3IFFuKDQwMDQsITEpfXRvUm9vdCgpe3JldHVybiB0'@;
put 'aGlzLmlzQWJzb2x1dGUmJjE9PT10aGlzLmNvbW1hbmRzLmxlbmd0aCYmIi8iPT10aGlzLmNvbW1hbmRzWzBdfX1jbGFzcyBWUntjb25zdHJ1Y3RvcihsLGEsZCl7dGhpcy5zZWdtZW50R3JvdXA9bCx0aGlzLnByb2Nlc3NDaGlsZHJlbj1hLHRoaXMuaW5kZXg9ZH19ZnVuY3Rpb24gUmxlKGMs'@;
put 'bCxhKXtpZihjPz89bmV3IEtsKFtdLHt9KSwwPT09Yy5zZWdtZW50cy5sZW5ndGgmJmMuaGFzQ2hpbGRyZW4oKSlyZXR1cm4gJE0oYyxsLGEpO2NvbnN0IGQ9ZnVuY3Rpb24gQnhlKGMsbCxhKXtsZXQgZD0wLGg9bDtjb25zdCBmPXttYXRjaDohMSxwYXRoSW5kZXg6MCxjb21tYW5kSW5kZXg6'@;
put 'MH07Zm9yKDtoPGMuc2VnbWVudHMubGVuZ3RoOyl7aWYoZD49YS5sZW5ndGgpcmV0dXJuIGY7Y29uc3Qgdj1jLnNlZ21lbnRzW2hdLE09YVtkXTtpZihHTShNKSlicmVhaztjb25zdCBEPWAke019YCxaPWQ8YS5sZW5ndGgtMT9hW2QrMV06bnVsbDtpZihoPjAmJnZvaWQgMD09PUQpYnJlYWs7'@;
put 'aWYoRCYmWiYmIm9iamVjdCI9PXR5cGVvZiBaJiZ2b2lkIDA9PT1aLm91dGxldHMpe2lmKCFPbGUoRCxaLHYpKXJldHVybiBmO2QrPTJ9ZWxzZXtpZighT2xlKEQse30sdikpcmV0dXJuIGY7ZCsrfWgrK31yZXR1cm57bWF0Y2g6ITAscGF0aEluZGV4OmgsY29tbWFuZEluZGV4OmR9fShjLGws'@;
put 'YSksaD1hLnNsaWNlKGQuY29tbWFuZEluZGV4KTtpZihkLm1hdGNoJiZkLnBhdGhJbmRleDxjLnNlZ21lbnRzLmxlbmd0aCl7Y29uc3QgZj1uZXcgS2woYy5zZWdtZW50cy5zbGljZSgwLGQucGF0aEluZGV4KSx7fSk7cmV0dXJuIGYuY2hpbGRyZW5bS29dPW5ldyBLbChjLnNlZ21lbnRzLnNs'@;
put 'aWNlKGQucGF0aEluZGV4KSxjLmNoaWxkcmVuKSwkTShmLDAsaCl9cmV0dXJuIGQubWF0Y2gmJjA9PT1oLmxlbmd0aD9uZXcgS2woYy5zZWdtZW50cyx7fSk6ZC5tYXRjaCYmIWMuaGFzQ2hpbGRyZW4oKT9KWihjLGwsYSk6ZC5tYXRjaD8kTShjLDAsaCk6SlooYyxsLGEpfWZ1bmN0aW9uICRN'@;
put 'KGMsbCxhKXtpZigwPT09YS5sZW5ndGgpcmV0dXJuIG5ldyBLbChjLnNlZ21lbnRzLHt9KTt7Y29uc3QgZD1mdW5jdGlvbiBWeGUoYyl7cmV0dXJuIEdNKGNbMF0pP2NbMF0ub3V0bGV0czp7W0tvXTpjfX0oYSksaD17fTtpZihPYmplY3Qua2V5cyhkKS5zb21lKGY9PmYhPT1LbykmJmMuY2hp'@;
put 'bGRyZW5bS29dJiYxPT09Yy5udW1iZXJPZkNoaWxkcmVuJiYwPT09Yy5jaGlsZHJlbltLb10uc2VnbWVudHMubGVuZ3RoKXtjb25zdCBmPSRNKGMuY2hpbGRyZW5bS29dLGwsYSk7cmV0dXJuIG5ldyBLbChjLnNlZ21lbnRzLGYuY2hpbGRyZW4pfXJldHVybiBPYmplY3QuZW50cmllcyhkKS5m'@;
put 'b3JFYWNoKChbZix2XSk9Pnsic3RyaW5nIj09dHlwZW9mIHYmJih2PVt2XSksbnVsbCE9PXYmJihoW2ZdPVJsZShjLmNoaWxkcmVuW2ZdLGwsdikpfSksT2JqZWN0LmVudHJpZXMoYy5jaGlsZHJlbikuZm9yRWFjaCgoW2Ysdl0pPT57dm9pZCAwPT09ZFtmXSYmKGhbZl09dil9KSxuZXcgS2wo'@;
put 'Yy5zZWdtZW50cyxoKX19ZnVuY3Rpb24gSlooYyxsLGEpe2NvbnN0IGQ9Yy5zZWdtZW50cy5zbGljZSgwLGwpO2xldCBoPTA7Zm9yKDtoPGEubGVuZ3RoOyl7Y29uc3QgZj1hW2hdO2lmKEdNKGYpKXtjb25zdCBEPWp4ZShmLm91dGxldHMpO3JldHVybiBuZXcgS2woZCxEKX1pZigwPT09aCYm'@;
put 'TlIoYVswXSkpe2QucHVzaChuZXcgV00oYy5zZWdtZW50c1tsXS5wYXRoLExsZShhWzBdKSkpLGgrKztjb250aW51ZX1jb25zdCB2PUdNKGYpP2Yub3V0bGV0c1tLb106YCR7Zn1gLE09aDxhLmxlbmd0aC0xP2FbaCsxXTpudWxsO3YmJk0mJk5SKE0pPyhkLnB1c2gobmV3IFdNKHYsTGxlKE0p'@;
put 'KSksaCs9Mik6KGQucHVzaChuZXcgV00odix7fSkpLGgrKyl9cmV0dXJuIG5ldyBLbChkLHt9KX1mdW5jdGlvbiBqeGUoYyl7Y29uc3QgbD17fTtyZXR1cm4gT2JqZWN0LmVudHJpZXMoYykuZm9yRWFjaCgoW2EsZF0pPT57InN0cmluZyI9PXR5cGVvZiBkJiYoZD1bZF0pLG51bGwhPT1kJiYo'@;
put 'bFthXT1KWihuZXcgS2woW10se30pLDAsZCkpfSksbH1mdW5jdGlvbiBMbGUoYyl7Y29uc3QgbD17fTtyZXR1cm4gT2JqZWN0LmVudHJpZXMoYykuZm9yRWFjaCgoW2EsZF0pPT5sW2FdPWAke2R9YCksbH1mdW5jdGlvbiBPbGUoYyxsLGEpe3JldHVybiBjPT1hLnBhdGgmJmhwKGwsYS5wYXJh'@;
put 'bWV0ZXJzKX1jb25zdCBLTT0iaW1wZXJhdGl2ZSI7dmFyIFJzPWZ1bmN0aW9uKGMpe3JldHVybiBjW2MuTmF2aWdhdGlvblN0YXJ0PTBdPSJOYXZpZ2F0aW9uU3RhcnQiLGNbYy5OYXZpZ2F0aW9uRW5kPTFdPSJOYXZpZ2F0aW9uRW5kIixjW2MuTmF2aWdhdGlvbkNhbmNlbD0yXT0iTmF2aWdh'@;
put 'dGlvbkNhbmNlbCIsY1tjLk5hdmlnYXRpb25FcnJvcj0zXT0iTmF2aWdhdGlvbkVycm9yIixjW2MuUm91dGVzUmVjb2duaXplZD00XT0iUm91dGVzUmVjb2duaXplZCIsY1tjLlJlc29sdmVTdGFydD01XT0iUmVzb2x2ZVN0YXJ0IixjW2MuUmVzb2x2ZUVuZD02XT0iUmVzb2x2ZUVuZCIsY1tj'@;
put 'Lkd1YXJkc0NoZWNrU3RhcnQ9N109Ikd1YXJkc0NoZWNrU3RhcnQiLGNbYy5HdWFyZHNDaGVja0VuZD04XT0iR3VhcmRzQ2hlY2tFbmQiLGNbYy5Sb3V0ZUNvbmZpZ0xvYWRTdGFydD05XT0iUm91dGVDb25maWdMb2FkU3RhcnQiLGNbYy5Sb3V0ZUNvbmZpZ0xvYWRFbmQ9MTBdPSJSb3V0ZUNv'@;
put 'bmZpZ0xvYWRFbmQiLGNbYy5DaGlsZEFjdGl2YXRpb25TdGFydD0xMV09IkNoaWxkQWN0aXZhdGlvblN0YXJ0IixjW2MuQ2hpbGRBY3RpdmF0aW9uRW5kPTEyXT0iQ2hpbGRBY3RpdmF0aW9uRW5kIixjW2MuQWN0aXZhdGlvblN0YXJ0PTEzXT0iQWN0aXZhdGlvblN0YXJ0IixjW2MuQWN0aXZh'@;
put 'dGlvbkVuZD0xNF09IkFjdGl2YXRpb25FbmQiLGNbYy5TY3JvbGw9MTVdPSJTY3JvbGwiLGNbYy5OYXZpZ2F0aW9uU2tpcHBlZD0xNl09Ik5hdmlnYXRpb25Ta2lwcGVkIixjfShSc3x8e30pO2NsYXNzIGZwe2NvbnN0cnVjdG9yKGwsYSl7dGhpcy5pZD1sLHRoaXMudXJsPWF9fWNsYXNzIEJS'@;
put 'IGV4dGVuZHMgZnB7Y29uc3RydWN0b3IobCxhLGQ9ImltcGVyYXRpdmUiLGg9bnVsbCl7c3VwZXIobCxhKSx0aGlzLnR5cGU9UnMuTmF2aWdhdGlvblN0YXJ0LHRoaXMubmF2aWdhdGlvblRyaWdnZXI9ZCx0aGlzLnJlc3RvcmVkU3RhdGU9aH10b1N0cmluZygpe3JldHVybmBOYXZpZ2F0aW9u'@;
put 'U3RhcnQoaWQ6ICR7dGhpcy5pZH0sIHVybDogJyR7dGhpcy51cmx9JylgfX1jbGFzcyBwcCBleHRlbmRzIGZwe2NvbnN0cnVjdG9yKGwsYSxkKXtzdXBlcihsLGEpLHRoaXMudXJsQWZ0ZXJSZWRpcmVjdHM9ZCx0aGlzLnR5cGU9UnMuTmF2aWdhdGlvbkVuZH10b1N0cmluZygpe3JldHVybmBO'@;
put 'YXZpZ2F0aW9uRW5kKGlkOiAke3RoaXMuaWR9LCB1cmw6ICcke3RoaXMudXJsfScsIHVybEFmdGVyUmVkaXJlY3RzOiAnJHt0aGlzLnVybEFmdGVyUmVkaXJlY3RzfScpYH19dmFyIHBoPWZ1bmN0aW9uKGMpe3JldHVybiBjW2MuUmVkaXJlY3Q9MF09IlJlZGlyZWN0IixjW2MuU3VwZXJzZWRl'@;
put 'ZEJ5TmV3TmF2aWdhdGlvbj0xXT0iU3VwZXJzZWRlZEJ5TmV3TmF2aWdhdGlvbiIsY1tjLk5vRGF0YUZyb21SZXNvbHZlcj0yXT0iTm9EYXRhRnJvbVJlc29sdmVyIixjW2MuR3VhcmRSZWplY3RlZD0zXT0iR3VhcmRSZWplY3RlZCIsY30ocGh8fHt9KSxqUj1mdW5jdGlvbihjKXtyZXR1cm4g'@;
put 'Y1tjLklnbm9yZWRTYW1lVXJsTmF2aWdhdGlvbj0wXT0iSWdub3JlZFNhbWVVcmxOYXZpZ2F0aW9uIixjW2MuSWdub3JlZEJ5VXJsSGFuZGxpbmdTdHJhdGVneT0xXT0iSWdub3JlZEJ5VXJsSGFuZGxpbmdTdHJhdGVneSIsY30oalJ8fHt9KTtjbGFzcyBveSBleHRlbmRzIGZwe2NvbnN0cnVj'@;
put 'dG9yKGwsYSxkLGgpe3N1cGVyKGwsYSksdGhpcy5yZWFzb249ZCx0aGlzLmNvZGU9aCx0aGlzLnR5cGU9UnMuTmF2aWdhdGlvbkNhbmNlbH10b1N0cmluZygpe3JldHVybmBOYXZpZ2F0aW9uQ2FuY2VsKGlkOiAke3RoaXMuaWR9LCB1cmw6ICcke3RoaXMudXJsfScpYH19Y2xhc3Mgc3kgZXh0'@;
put 'ZW5kcyBmcHtjb25zdHJ1Y3RvcihsLGEsZCxoKXtzdXBlcihsLGEpLHRoaXMucmVhc29uPWQsdGhpcy5jb2RlPWgsdGhpcy50eXBlPVJzLk5hdmlnYXRpb25Ta2lwcGVkfX1jbGFzcyB6UiBleHRlbmRzIGZwe2NvbnN0cnVjdG9yKGwsYSxkLGgpe3N1cGVyKGwsYSksdGhpcy5lcnJvcj1kLHRo'@;
put 'aXMudGFyZ2V0PWgsdGhpcy50eXBlPVJzLk5hdmlnYXRpb25FcnJvcn10b1N0cmluZygpe3JldHVybmBOYXZpZ2F0aW9uRXJyb3IoaWQ6ICR7dGhpcy5pZH0sIHVybDogJyR7dGhpcy51cmx9JywgZXJyb3I6ICR7dGhpcy5lcnJvcn0pYH19Y2xhc3MgUGxlIGV4dGVuZHMgZnB7Y29uc3RydWN0'@;
put 'b3IobCxhLGQsaCl7c3VwZXIobCxhKSx0aGlzLnVybEFmdGVyUmVkaXJlY3RzPWQsdGhpcy5zdGF0ZT1oLHRoaXMudHlwZT1Scy5Sb3V0ZXNSZWNvZ25pemVkfXRvU3RyaW5nKCl7cmV0dXJuYFJvdXRlc1JlY29nbml6ZWQoaWQ6ICR7dGhpcy5pZH0sIHVybDogJyR7dGhpcy51cmx9JywgdXJs'@;
put 'QWZ0ZXJSZWRpcmVjdHM6ICcke3RoaXMudXJsQWZ0ZXJSZWRpcmVjdHN9Jywgc3RhdGU6ICR7dGhpcy5zdGF0ZX0pYH19Y2xhc3MgenhlIGV4dGVuZHMgZnB7Y29uc3RydWN0b3IobCxhLGQsaCl7c3VwZXIobCxhKSx0aGlzLnVybEFmdGVyUmVkaXJlY3RzPWQsdGhpcy5zdGF0ZT1oLHRoaXMu'@;
put 'dHlwZT1Scy5HdWFyZHNDaGVja1N0YXJ0fXRvU3RyaW5nKCl7cmV0dXJuYEd1YXJkc0NoZWNrU3RhcnQoaWQ6ICR7dGhpcy5pZH0sIHVybDogJyR7dGhpcy51cmx9JywgdXJsQWZ0ZXJSZWRpcmVjdHM6ICcke3RoaXMudXJsQWZ0ZXJSZWRpcmVjdHN9Jywgc3RhdGU6ICR7dGhpcy5zdGF0ZX0p'@;
put 'YH19Y2xhc3MgVXhlIGV4dGVuZHMgZnB7Y29uc3RydWN0b3IobCxhLGQsaCxmKXtzdXBlcihsLGEpLHRoaXMudXJsQWZ0ZXJSZWRpcmVjdHM9ZCx0aGlzLnN0YXRlPWgsdGhpcy5zaG91bGRBY3RpdmF0ZT1mLHRoaXMudHlwZT1Scy5HdWFyZHNDaGVja0VuZH10b1N0cmluZygpe3JldHVybmBH'@;
put 'dWFyZHNDaGVja0VuZChpZDogJHt0aGlzLmlkfSwgdXJsOiAnJHt0aGlzLnVybH0nLCB1cmxBZnRlclJlZGlyZWN0czogJyR7dGhpcy51cmxBZnRlclJlZGlyZWN0c30nLCBzdGF0ZTogJHt0aGlzLnN0YXRlfSwgc2hvdWxkQWN0aXZhdGU6ICR7dGhpcy5zaG91bGRBY3RpdmF0ZX0pYH19Y2xh'@;
put 'c3MgWnhlIGV4dGVuZHMgZnB7Y29uc3RydWN0b3IobCxhLGQsaCl7c3VwZXIobCxhKSx0aGlzLnVybEFmdGVyUmVkaXJlY3RzPWQsdGhpcy5zdGF0ZT1oLHRoaXMudHlwZT1Scy5SZXNvbHZlU3RhcnR9dG9TdHJpbmcoKXtyZXR1cm5gUmVzb2x2ZVN0YXJ0KGlkOiAke3RoaXMuaWR9LCB1cmw6'@;
put 'ICcke3RoaXMudXJsfScsIHVybEFmdGVyUmVkaXJlY3RzOiAnJHt0aGlzLnVybEFmdGVyUmVkaXJlY3RzfScsIHN0YXRlOiAke3RoaXMuc3RhdGV9KWB9fWNsYXNzIFd4ZSBleHRlbmRzIGZwe2NvbnN0cnVjdG9yKGwsYSxkLGgpe3N1cGVyKGwsYSksdGhpcy51cmxBZnRlclJlZGlyZWN0cz1k'@;
put 'LHRoaXMuc3RhdGU9aCx0aGlzLnR5cGU9UnMuUmVzb2x2ZUVuZH10b1N0cmluZygpe3JldHVybmBSZXNvbHZlRW5kKGlkOiAke3RoaXMuaWR9LCB1cmw6ICcke3RoaXMudXJsfScsIHVybEFmdGVyUmVkaXJlY3RzOiAnJHt0aGlzLnVybEFmdGVyUmVkaXJlY3RzfScsIHN0YXRlOiAke3RoaXMu'@;
put 'c3RhdGV9KWB9fWNsYXNzIFl4ZXtjb25zdHJ1Y3RvcihsKXt0aGlzLnJvdXRlPWwsdGhpcy50eXBlPVJzLlJvdXRlQ29uZmlnTG9hZFN0YXJ0fXRvU3RyaW5nKCl7cmV0dXJuYFJvdXRlQ29uZmlnTG9hZFN0YXJ0KHBhdGg6ICR7dGhpcy5yb3V0ZS5wYXRofSlgfX1jbGFzcyBHeGV7Y29uc3Ry'@;
put 'dWN0b3IobCl7dGhpcy5yb3V0ZT1sLHRoaXMudHlwZT1Scy5Sb3V0ZUNvbmZpZ0xvYWRFbmR9dG9TdHJpbmcoKXtyZXR1cm5gUm91dGVDb25maWdMb2FkRW5kKHBhdGg6ICR7dGhpcy5yb3V0ZS5wYXRofSlgfX1jbGFzcyAkeGV7Y29uc3RydWN0b3IobCl7dGhpcy5zbmFwc2hvdD1sLHRoaXMu'@;
put 'dHlwZT1Scy5DaGlsZEFjdGl2YXRpb25TdGFydH10b1N0cmluZygpe3JldHVybmBDaGlsZEFjdGl2YXRpb25TdGFydChwYXRoOiAnJHt0aGlzLnNuYXBzaG90LnJvdXRlQ29uZmlnJiZ0aGlzLnNuYXBzaG90LnJvdXRlQ29uZmlnLnBhdGh8fCIifScpYH19Y2xhc3MgS3hle2NvbnN0cnVjdG9y'@;
put 'KGwpe3RoaXMuc25hcHNob3Q9bCx0aGlzLnR5cGU9UnMuQ2hpbGRBY3RpdmF0aW9uRW5kfXRvU3RyaW5nKCl7cmV0dXJuYENoaWxkQWN0aXZhdGlvbkVuZChwYXRoOiAnJHt0aGlzLnNuYXBzaG90LnJvdXRlQ29uZmlnJiZ0aGlzLnNuYXBzaG90LnJvdXRlQ29uZmlnLnBhdGh8fCIifScpYH19'@;
put 'Y2xhc3MgcXhle2NvbnN0cnVjdG9yKGwpe3RoaXMuc25hcHNob3Q9bCx0aGlzLnR5cGU9UnMuQWN0aXZhdGlvblN0YXJ0fXRvU3RyaW5nKCl7cmV0dXJuYEFjdGl2YXRpb25TdGFydChwYXRoOiAnJHt0aGlzLnNuYXBzaG90LnJvdXRlQ29uZmlnJiZ0aGlzLnNuYXBzaG90LnJvdXRlQ29uZmln'@;
put 'LnBhdGh8fCIifScpYH19Y2xhc3MgWHhle2NvbnN0cnVjdG9yKGwpe3RoaXMuc25hcHNob3Q9bCx0aGlzLnR5cGU9UnMuQWN0aXZhdGlvbkVuZH10b1N0cmluZygpe3JldHVybmBBY3RpdmF0aW9uRW5kKHBhdGg6ICcke3RoaXMuc25hcHNob3Qucm91dGVDb25maWcmJnRoaXMuc25hcHNob3Qu'@;
put 'cm91dGVDb25maWcucGF0aHx8IiJ9JylgfX1jbGFzcyBGbGV7Y29uc3RydWN0b3IobCxhLGQpe3RoaXMucm91dGVyRXZlbnQ9bCx0aGlzLnBvc2l0aW9uPWEsdGhpcy5hbmNob3I9ZCx0aGlzLnR5cGU9UnMuU2Nyb2xsfXRvU3RyaW5nKCl7cmV0dXJuYFNjcm9sbChhbmNob3I6ICcke3RoaXMu'@;
put 'YW5jaG9yfScsIHBvc2l0aW9uOiAnJHt0aGlzLnBvc2l0aW9uP2Ake3RoaXMucG9zaXRpb25bMF19LCAke3RoaXMucG9zaXRpb25bMV19YDpudWxsfScpYH19Y2xhc3MgUVp7fWNsYXNzIGVXe2NvbnN0cnVjdG9yKGwpe3RoaXMudXJsPWx9fWNsYXNzIEp4ZXtjb25zdHJ1Y3Rvcigpe3RoaXMu'@;
put 'b3V0bGV0PW51bGwsdGhpcy5yb3V0ZT1udWxsLHRoaXMuaW5qZWN0b3I9bnVsbCx0aGlzLmNoaWxkcmVuPW5ldyBxTSx0aGlzLmF0dGFjaFJlZj1udWxsfX1sZXQgcU09KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuY29udGV4dHM9bmV3IE1hcH1vbkNoaWxkT3V0bGV0Q3JlYXRl'@;
put 'ZChhLGQpe2NvbnN0IGg9dGhpcy5nZXRPckNyZWF0ZUNvbnRleHQoYSk7aC5vdXRsZXQ9ZCx0aGlzLmNvbnRleHRzLnNldChhLGgpfW9uQ2hpbGRPdXRsZXREZXN0cm95ZWQoYSl7Y29uc3QgZD10aGlzLmdldENvbnRleHQoYSk7ZCYmKGQub3V0bGV0PW51bGwsZC5hdHRhY2hSZWY9bnVsbCl9'@;
put 'b25PdXRsZXREZWFjdGl2YXRlZCgpe2NvbnN0IGE9dGhpcy5jb250ZXh0cztyZXR1cm4gdGhpcy5jb250ZXh0cz1uZXcgTWFwLGF9b25PdXRsZXRSZUF0dGFjaGVkKGEpe3RoaXMuY29udGV4dHM9YX1nZXRPckNyZWF0ZUNvbnRleHQoYSl7bGV0IGQ9dGhpcy5nZXRDb250ZXh0KGEpO3JldHVy'@;
put 'biBkfHwoZD1uZXcgSnhlLHRoaXMuY29udGV4dHMuc2V0KGEsZCkpLGR9Z2V0Q29udGV4dChhKXtyZXR1cm4gdGhpcy5jb250ZXh0cy5nZXQoYSl8fG51bGx9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NXByb3Y9'@;
put 'YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pfX1yZXR1cm4gY30pKCk7Y2xhc3MgSGxle2NvbnN0cnVjdG9yKGwpe3RoaXMuX3Jvb3Q9bH1nZXQgcm9vdCgpe3JldHVybiB0aGlzLl9yb290LnZhbHVlfXBhcmVudChsKXtjb25zdCBhPXRoaXMucGF0'@;
put 'aEZyb21Sb290KGwpO3JldHVybiBhLmxlbmd0aD4xP2FbYS5sZW5ndGgtMl06bnVsbH1jaGlsZHJlbihsKXtjb25zdCBhPXRXKGwsdGhpcy5fcm9vdCk7cmV0dXJuIGE/YS5jaGlsZHJlbi5tYXAoZD0+ZC52YWx1ZSk6W119Zmlyc3RDaGlsZChsKXtjb25zdCBhPXRXKGwsdGhpcy5fcm9vdCk7'@;
put 'cmV0dXJuIGEmJmEuY2hpbGRyZW4ubGVuZ3RoPjA/YS5jaGlsZHJlblswXS52YWx1ZTpudWxsfXNpYmxpbmdzKGwpe2NvbnN0IGE9blcobCx0aGlzLl9yb290KTtyZXR1cm4gYS5sZW5ndGg8Mj9bXTphW2EubGVuZ3RoLTJdLmNoaWxkcmVuLm1hcChoPT5oLnZhbHVlKS5maWx0ZXIoaD0+aCE9'@;
put 'PWwpfXBhdGhGcm9tUm9vdChsKXtyZXR1cm4gblcobCx0aGlzLl9yb290KS5tYXAoYT0+YS52YWx1ZSl9fWZ1bmN0aW9uIHRXKGMsbCl7aWYoYz09PWwudmFsdWUpcmV0dXJuIGw7Zm9yKGNvbnN0IGEgb2YgbC5jaGlsZHJlbil7Y29uc3QgZD10VyhjLGEpO2lmKGQpcmV0dXJuIGR9cmV0dXJu'@;
put 'IG51bGx9ZnVuY3Rpb24gblcoYyxsKXtpZihjPT09bC52YWx1ZSlyZXR1cm5bbF07Zm9yKGNvbnN0IGEgb2YgbC5jaGlsZHJlbil7Y29uc3QgZD1uVyhjLGEpO2lmKGQubGVuZ3RoKXJldHVybiBkLnVuc2hpZnQobCksZH1yZXR1cm5bXX1jbGFzcyBHZntjb25zdHJ1Y3RvcihsLGEpe3RoaXMu'@;
put 'dmFsdWU9bCx0aGlzLmNoaWxkcmVuPWF9dG9TdHJpbmcoKXtyZXR1cm5gVHJlZU5vZGUoJHt0aGlzLnZhbHVlfSlgfX1mdW5jdGlvbiBseShjKXtjb25zdCBsPXt9O3JldHVybiBjJiZjLmNoaWxkcmVuLmZvckVhY2goYT0+bFthLnZhbHVlLm91dGxldF09YSksbH1jbGFzcyBObGUgZXh0ZW5k'@;
put 'cyBIbGV7Y29uc3RydWN0b3IobCxhKXtzdXBlcihsKSx0aGlzLnNuYXBzaG90PWEsYVcodGhpcyxsKX10b1N0cmluZygpe3JldHVybiB0aGlzLnNuYXBzaG90LnRvU3RyaW5nKCl9fWZ1bmN0aW9uIFZsZShjKXtjb25zdCBsPWZ1bmN0aW9uIFF4ZShjKXtjb25zdCBmPW5ldyBpVyhbXSx7fSx7'@;
put 'fSwiIix7fSxLbyxjLG51bGwse30pO3JldHVybiBuZXcgQmxlKCIiLG5ldyBHZihmLFtdKSl9KGMpLGE9bmV3IGVpKFtuZXcgV00oIiIse30pXSksZD1uZXcgZWkoe30pLGg9bmV3IGVpKHt9KSxmPW5ldyBlaSh7fSksdj1uZXcgZWkoIiIpLE09bmV3IEN1KGEsZCxmLHYsaCxLbyxjLGwucm9v'@;
put 'dCk7cmV0dXJuIE0uc25hcHNob3Q9bC5yb290LG5ldyBObGUobmV3IEdmKE0sW10pLGwpfWNsYXNzIEN1e2NvbnN0cnVjdG9yKGwsYSxkLGgsZix2LE0sRCl7dGhpcy51cmxTdWJqZWN0PWwsdGhpcy5wYXJhbXNTdWJqZWN0PWEsdGhpcy5xdWVyeVBhcmFtc1N1YmplY3Q9ZCx0aGlzLmZyYWdt'@;
put 'ZW50U3ViamVjdD1oLHRoaXMuZGF0YVN1YmplY3Q9Zix0aGlzLm91dGxldD12LHRoaXMuY29tcG9uZW50PU0sdGhpcy5fZnV0dXJlU25hcHNob3Q9RCx0aGlzLnRpdGxlPXRoaXMuZGF0YVN1YmplY3Q/LnBpcGUoTHIoWj0+WltaTV0pKT8/Zm8odm9pZCAwKSx0aGlzLnVybD1sLHRoaXMucGFy'@;
put 'YW1zPWEsdGhpcy5xdWVyeVBhcmFtcz1kLHRoaXMuZnJhZ21lbnQ9aCx0aGlzLmRhdGE9Zn1nZXQgcm91dGVDb25maWcoKXtyZXR1cm4gdGhpcy5fZnV0dXJlU25hcHNob3Qucm91dGVDb25maWd9Z2V0IHJvb3QoKXtyZXR1cm4gdGhpcy5fcm91dGVyU3RhdGUucm9vdH1nZXQgcGFyZW50KCl7'@;
put 'cmV0dXJuIHRoaXMuX3JvdXRlclN0YXRlLnBhcmVudCh0aGlzKX1nZXQgZmlyc3RDaGlsZCgpe3JldHVybiB0aGlzLl9yb3V0ZXJTdGF0ZS5maXJzdENoaWxkKHRoaXMpfWdldCBjaGlsZHJlbigpe3JldHVybiB0aGlzLl9yb3V0ZXJTdGF0ZS5jaGlsZHJlbih0aGlzKX1nZXQgcGF0aEZyb21S'@;
put 'b290KCl7cmV0dXJuIHRoaXMuX3JvdXRlclN0YXRlLnBhdGhGcm9tUm9vdCh0aGlzKX1nZXQgcGFyYW1NYXAoKXtyZXR1cm4gdGhpcy5fcGFyYW1NYXA/Pz10aGlzLnBhcmFtcy5waXBlKExyKGw9Pm55KGwpKSksdGhpcy5fcGFyYW1NYXB9Z2V0IHF1ZXJ5UGFyYW1NYXAoKXtyZXR1cm4gdGhp'@;
put 'cy5fcXVlcnlQYXJhbU1hcD8/PXRoaXMucXVlcnlQYXJhbXMucGlwZShMcihsPT5ueShsKSkpLHRoaXMuX3F1ZXJ5UGFyYW1NYXB9dG9TdHJpbmcoKXtyZXR1cm4gdGhpcy5zbmFwc2hvdD90aGlzLnNuYXBzaG90LnRvU3RyaW5nKCk6YEZ1dHVyZSgke3RoaXMuX2Z1dHVyZVNuYXBzaG90fSlg'@;
put 'fX1mdW5jdGlvbiByVyhjLGwsYT0iZW1wdHlPbmx5Iil7bGV0IGQ7Y29uc3R7cm91dGVDb25maWc6aH09YztyZXR1cm4gZD1udWxsPT09bHx8ImFsd2F5cyIhPT1hJiYiIiE9PWg/LnBhdGgmJihsLmNvbXBvbmVudHx8bC5yb3V0ZUNvbmZpZz8ubG9hZENvbXBvbmVudCk/e3BhcmFtczp7Li4u'@;
put 'Yy5wYXJhbXN9LGRhdGE6ey4uLmMuZGF0YX0scmVzb2x2ZTp7Li4uYy5kYXRhLC4uLmMuX3Jlc29sdmVkRGF0YT8/e319fTp7cGFyYW1zOnsuLi5sLnBhcmFtcywuLi5jLnBhcmFtc30sZGF0YTp7Li4ubC5kYXRhLC4uLmMuZGF0YX0scmVzb2x2ZTp7Li4uYy5kYXRhLC4uLmwuZGF0YSwuLi5o'@;
put 'Py5kYXRhLC4uLmMuX3Jlc29sdmVkRGF0YX19LGgmJnpsZShoKSYmKGQucmVzb2x2ZVtaTV09aC50aXRsZSksZH1jbGFzcyBpV3tnZXQgdGl0bGUoKXtyZXR1cm4gdGhpcy5kYXRhPy5bWk1dfWNvbnN0cnVjdG9yKGwsYSxkLGgsZix2LE0sRCxaKXt0aGlzLnVybD1sLHRoaXMucGFyYW1zPWEs'@;
put 'dGhpcy5xdWVyeVBhcmFtcz1kLHRoaXMuZnJhZ21lbnQ9aCx0aGlzLmRhdGE9Zix0aGlzLm91dGxldD12LHRoaXMuY29tcG9uZW50PU0sdGhpcy5yb3V0ZUNvbmZpZz1ELHRoaXMuX3Jlc29sdmU9Wn1nZXQgcm9vdCgpe3JldHVybiB0aGlzLl9yb3V0ZXJTdGF0ZS5yb290fWdldCBwYXJlbnQo'@;
put 'KXtyZXR1cm4gdGhpcy5fcm91dGVyU3RhdGUucGFyZW50KHRoaXMpfWdldCBmaXJzdENoaWxkKCl7cmV0dXJuIHRoaXMuX3JvdXRlclN0YXRlLmZpcnN0Q2hpbGQodGhpcyl9Z2V0IGNoaWxkcmVuKCl7cmV0dXJuIHRoaXMuX3JvdXRlclN0YXRlLmNoaWxkcmVuKHRoaXMpfWdldCBwYXRoRnJv'@;
put 'bVJvb3QoKXtyZXR1cm4gdGhpcy5fcm91dGVyU3RhdGUucGF0aEZyb21Sb290KHRoaXMpfWdldCBwYXJhbU1hcCgpe3JldHVybiB0aGlzLl9wYXJhbU1hcD8/PW55KHRoaXMucGFyYW1zKSx0aGlzLl9wYXJhbU1hcH1nZXQgcXVlcnlQYXJhbU1hcCgpe3JldHVybiB0aGlzLl9xdWVyeVBhcmFt'@;
put 'TWFwPz89bnkodGhpcy5xdWVyeVBhcmFtcyksdGhpcy5fcXVlcnlQYXJhbU1hcH10b1N0cmluZygpe3JldHVybmBSb3V0ZSh1cmw6JyR7dGhpcy51cmwubWFwKGQ9PmQudG9TdHJpbmcoKSkuam9pbigiLyIpfScsIHBhdGg6JyR7dGhpcy5yb3V0ZUNvbmZpZz90aGlzLnJvdXRlQ29uZmlnLnBh'@;
put 'dGg6IiJ9JylgfX1jbGFzcyBCbGUgZXh0ZW5kcyBIbGV7Y29uc3RydWN0b3IobCxhKXtzdXBlcihhKSx0aGlzLnVybD1sLGFXKHRoaXMsYSl9dG9TdHJpbmcoKXtyZXR1cm4gamxlKHRoaXMuX3Jvb3QpfX1mdW5jdGlvbiBhVyhjLGwpe2wudmFsdWUuX3JvdXRlclN0YXRlPWMsbC5jaGlsZHJl'@;
put 'bi5mb3JFYWNoKGE9PmFXKGMsYSkpfWZ1bmN0aW9uIGpsZShjKXtjb25zdCBsPWMuY2hpbGRyZW4ubGVuZ3RoPjA/YCB7ICR7Yy5jaGlsZHJlbi5tYXAoamxlKS5qb2luKCIsICIpfSB9IGA6IiI7cmV0dXJuYCR7Yy52YWx1ZX0ke2x9YH1mdW5jdGlvbiBvVyhjKXtpZihjLnNuYXBzaG90KXtj'@;
put 'b25zdCBsPWMuc25hcHNob3QsYT1jLl9mdXR1cmVTbmFwc2hvdDtjLnNuYXBzaG90PWEsaHAobC5xdWVyeVBhcmFtcyxhLnF1ZXJ5UGFyYW1zKXx8Yy5xdWVyeVBhcmFtc1N1YmplY3QubmV4dChhLnF1ZXJ5UGFyYW1zKSxsLmZyYWdtZW50IT09YS5mcmFnbWVudCYmYy5mcmFnbWVudFN1Ympl'@;
put 'Y3QubmV4dChhLmZyYWdtZW50KSxocChsLnBhcmFtcyxhLnBhcmFtcyl8fGMucGFyYW1zU3ViamVjdC5uZXh0KGEucGFyYW1zKSxmdW5jdGlvbiBteGUoYyxsKXtpZihjLmxlbmd0aCE9PWwubGVuZ3RoKXJldHVybiExO2ZvcihsZXQgYT0wO2E8Yy5sZW5ndGg7KythKWlmKCFocChjW2FdLGxb'@;
put 'YV0pKXJldHVybiExO3JldHVybiEwfShsLnVybCxhLnVybCl8fGMudXJsU3ViamVjdC5uZXh0KGEudXJsKSxocChsLmRhdGEsYS5kYXRhKXx8Yy5kYXRhU3ViamVjdC5uZXh0KGEuZGF0YSl9ZWxzZSBjLnNuYXBzaG90PWMuX2Z1dHVyZVNuYXBzaG90LGMuZGF0YVN1YmplY3QubmV4dChjLl9m'@;
put 'dXR1cmVTbmFwc2hvdC5kYXRhKX1mdW5jdGlvbiBzVyhjLGwpe2NvbnN0IGE9aHAoYy5wYXJhbXMsbC5wYXJhbXMpJiZmdW5jdGlvbiBfeGUoYyxsKXtyZXR1cm4gSjgoYyxsKSYmYy5ldmVyeSgoYSxkKT0+aHAoYS5wYXJhbWV0ZXJzLGxbZF0ucGFyYW1ldGVycykpfShjLnVybCxsLnVybCk7'@;
put 'cmV0dXJuIGEmJiEoIWMucGFyZW50IT0hbC5wYXJlbnQpJiYoIWMucGFyZW50fHxzVyhjLnBhcmVudCxsLnBhcmVudCkpfWZ1bmN0aW9uIHpsZShjKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIGMudGl0bGV8fG51bGw9PT1jLnRpdGxlfWxldCByZz0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9y'@;
put 'KCl7dGhpcy5hY3RpdmF0ZWQ9bnVsbCx0aGlzLl9hY3RpdmF0ZWRSb3V0ZT1udWxsLHRoaXMubmFtZT1Lbyx0aGlzLmFjdGl2YXRlRXZlbnRzPW5ldyBLcix0aGlzLmRlYWN0aXZhdGVFdmVudHM9bmV3IEtyLHRoaXMuYXR0YWNoRXZlbnRzPW5ldyBLcix0aGlzLmRldGFjaEV2ZW50cz1uZXcg'@;
put 'S3IsdGhpcy5wYXJlbnRDb250ZXh0cz1maShxTSksdGhpcy5sb2NhdGlvbj1maShEbyksdGhpcy5jaGFuZ2VEZXRlY3Rvcj1maShFcyksdGhpcy5lbnZpcm9ubWVudEluamVjdG9yPWZpKGhjKSx0aGlzLmlucHV0QmluZGVyPWZpKFVSLHtvcHRpb25hbDohMH0pLHRoaXMuc3VwcG9ydHNCaW5k'@;
put 'aW5nVG9Db21wb25lbnRJbnB1dHM9ITB9Z2V0IGFjdGl2YXRlZENvbXBvbmVudFJlZigpe3JldHVybiB0aGlzLmFjdGl2YXRlZH1uZ09uQ2hhbmdlcyhhKXtpZihhLm5hbWUpe2NvbnN0e2ZpcnN0Q2hhbmdlOmQscHJldmlvdXNWYWx1ZTpofT1hLm5hbWU7aWYoZClyZXR1cm47dGhpcy5pc1Ry'@;
put 'YWNrZWRJblBhcmVudENvbnRleHRzKGgpJiYodGhpcy5kZWFjdGl2YXRlKCksdGhpcy5wYXJlbnRDb250ZXh0cy5vbkNoaWxkT3V0bGV0RGVzdHJveWVkKGgpKSx0aGlzLmluaXRpYWxpemVPdXRsZXRXaXRoTmFtZSgpfX1uZ09uRGVzdHJveSgpe3RoaXMuaXNUcmFja2VkSW5QYXJlbnRDb250'@;
put 'ZXh0cyh0aGlzLm5hbWUpJiZ0aGlzLnBhcmVudENvbnRleHRzLm9uQ2hpbGRPdXRsZXREZXN0cm95ZWQodGhpcy5uYW1lKSx0aGlzLmlucHV0QmluZGVyPy51bnN1YnNjcmliZUZyb21Sb3V0ZURhdGEodGhpcyl9aXNUcmFja2VkSW5QYXJlbnRDb250ZXh0cyhhKXtyZXR1cm4gdGhpcy5wYXJl'@;
put 'bnRDb250ZXh0cy5nZXRDb250ZXh0KGEpPy5vdXRsZXQ9PT10aGlzfW5nT25Jbml0KCl7dGhpcy5pbml0aWFsaXplT3V0bGV0V2l0aE5hbWUoKX1pbml0aWFsaXplT3V0bGV0V2l0aE5hbWUoKXtpZih0aGlzLnBhcmVudENvbnRleHRzLm9uQ2hpbGRPdXRsZXRDcmVhdGVkKHRoaXMubmFtZSx0'@;
put 'aGlzKSx0aGlzLmFjdGl2YXRlZClyZXR1cm47Y29uc3QgYT10aGlzLnBhcmVudENvbnRleHRzLmdldENvbnRleHQodGhpcy5uYW1lKTthPy5yb3V0ZSYmKGEuYXR0YWNoUmVmP3RoaXMuYXR0YWNoKGEuYXR0YWNoUmVmLGEucm91dGUpOnRoaXMuYWN0aXZhdGVXaXRoKGEucm91dGUsYS5pbmpl'@;
put 'Y3RvcikpfWdldCBpc0FjdGl2YXRlZCgpe3JldHVybiEhdGhpcy5hY3RpdmF0ZWR9Z2V0IGNvbXBvbmVudCgpe2lmKCF0aGlzLmFjdGl2YXRlZCl0aHJvdyBuZXcgUW4oNDAxMiwhMSk7cmV0dXJuIHRoaXMuYWN0aXZhdGVkLmluc3RhbmNlfWdldCBhY3RpdmF0ZWRSb3V0ZSgpe2lmKCF0aGlz'@;
put 'LmFjdGl2YXRlZCl0aHJvdyBuZXcgUW4oNDAxMiwhMSk7cmV0dXJuIHRoaXMuX2FjdGl2YXRlZFJvdXRlfWdldCBhY3RpdmF0ZWRSb3V0ZURhdGEoKXtyZXR1cm4gdGhpcy5fYWN0aXZhdGVkUm91dGU/dGhpcy5fYWN0aXZhdGVkUm91dGUuc25hcHNob3QuZGF0YTp7fX1kZXRhY2goKXtpZigh'@;
put 'dGhpcy5hY3RpdmF0ZWQpdGhyb3cgbmV3IFFuKDQwMTIsITEpO3RoaXMubG9jYXRpb24uZGV0YWNoKCk7Y29uc3QgYT10aGlzLmFjdGl2YXRlZDtyZXR1cm4gdGhpcy5hY3RpdmF0ZWQ9bnVsbCx0aGlzLl9hY3RpdmF0ZWRSb3V0ZT1udWxsLHRoaXMuZGV0YWNoRXZlbnRzLmVtaXQoYS5pbnN0'@;
put 'YW5jZSksYX1hdHRhY2goYSxkKXt0aGlzLmFjdGl2YXRlZD1hLHRoaXMuX2FjdGl2YXRlZFJvdXRlPWQsdGhpcy5sb2NhdGlvbi5pbnNlcnQoYS5ob3N0VmlldyksdGhpcy5pbnB1dEJpbmRlcj8uYmluZEFjdGl2YXRlZFJvdXRlVG9PdXRsZXRDb21wb25lbnQodGhpcyksdGhpcy5hdHRhY2hF'@;
put 'dmVudHMuZW1pdChhLmluc3RhbmNlKX1kZWFjdGl2YXRlKCl7aWYodGhpcy5hY3RpdmF0ZWQpe2NvbnN0IGE9dGhpcy5jb21wb25lbnQ7dGhpcy5hY3RpdmF0ZWQuZGVzdHJveSgpLHRoaXMuYWN0aXZhdGVkPW51bGwsdGhpcy5fYWN0aXZhdGVkUm91dGU9bnVsbCx0aGlzLmRlYWN0aXZhdGVF'@;
put 'dmVudHMuZW1pdChhKX19YWN0aXZhdGVXaXRoKGEsZCl7aWYodGhpcy5pc0FjdGl2YXRlZCl0aHJvdyBuZXcgUW4oNDAxMywhMSk7dGhpcy5fYWN0aXZhdGVkUm91dGU9YTtjb25zdCBoPXRoaXMubG9jYXRpb24sdj1hLnNuYXBzaG90LmNvbXBvbmVudCxNPXRoaXMucGFyZW50Q29udGV4dHMu'@;
put 'Z2V0T3JDcmVhdGVDb250ZXh0KHRoaXMubmFtZSkuY2hpbGRyZW4sRD1uZXcgbFcoYSxNLGguaW5qZWN0b3IpO3RoaXMuYWN0aXZhdGVkPWguY3JlYXRlQ29tcG9uZW50KHYse2luZGV4OmgubGVuZ3RoLGluamVjdG9yOkQsZW52aXJvbm1lbnRJbmplY3RvcjpkPz90aGlzLmVudmlyb25tZW50'@;
put 'SW5qZWN0b3J9KSx0aGlzLmNoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpLHRoaXMuaW5wdXRCaW5kZXI/LmJpbmRBY3RpdmF0ZWRSb3V0ZVRvT3V0bGV0Q29tcG9uZW50KHRoaXMpLHRoaXMuYWN0aXZhdGVFdmVudHMuZW1pdCh0aGlzLmFjdGl2YXRlZC5pbnN0YW5jZSl9c3RhdGlje3Ro'@;
put 'aXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyJyb3V0ZXItb3V0bGV0Il1dLGlucHV0czp7bmFtZToibmFtZSJ9LG91dHB1dHM6e2FjdGl2YXRlRXZlbnRzOiJhY3RpdmF0ZSIsZGVh'@;
put 'Y3RpdmF0ZUV2ZW50czoiZGVhY3RpdmF0ZSIsYXR0YWNoRXZlbnRzOiJhdHRhY2giLGRldGFjaEV2ZW50czoiZGV0YWNoIn0sZXhwb3J0QXM6WyJvdXRsZXQiXSxzdGFuZGFsb25lOiEwLGZlYXR1cmVzOlt3bF19KX19cmV0dXJuIGN9KSgpO2NsYXNzIGxXe19fbmdPdXRsZXRJbmplY3Rvcihs'@;
put 'KXtyZXR1cm4gbmV3IGxXKHRoaXMucm91dGUsdGhpcy5jaGlsZENvbnRleHRzLGwpfWNvbnN0cnVjdG9yKGwsYSxkKXt0aGlzLnJvdXRlPWwsdGhpcy5jaGlsZENvbnRleHRzPWEsdGhpcy5wYXJlbnQ9ZH1nZXQobCxhKXtyZXR1cm4gbD09PUN1P3RoaXMucm91dGU6bD09PXFNP3RoaXMuY2hp'@;
put 'bGRDb250ZXh0czp0aGlzLnBhcmVudC5nZXQobCxhKX19Y29uc3QgVVI9bmV3IFN0KCIiKTtsZXQgVWxlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLm91dGxldERhdGFTdWJzY3JpcHRpb25zPW5ldyBNYXB9YmluZEFjdGl2YXRlZFJvdXRlVG9PdXRsZXRDb21wb25lbnQoYSl7'@;
put 'dGhpcy51bnN1YnNjcmliZUZyb21Sb3V0ZURhdGEoYSksdGhpcy5zdWJzY3JpYmVUb1JvdXRlRGF0YShhKX11bnN1YnNjcmliZUZyb21Sb3V0ZURhdGEoYSl7dGhpcy5vdXRsZXREYXRhU3Vic2NyaXB0aW9ucy5nZXQoYSk/LnVuc3Vic2NyaWJlKCksdGhpcy5vdXRsZXREYXRhU3Vic2NyaXB0'@;
put 'aW9ucy5kZWxldGUoYSl9c3Vic2NyaWJlVG9Sb3V0ZURhdGEoYSl7Y29uc3R7YWN0aXZhdGVkUm91dGU6ZH09YSxoPXE4KFtkLnF1ZXJ5UGFyYW1zLGQucGFyYW1zLGQuZGF0YV0pLnBpcGUoVjEoKFtmLHYsTV0sRCk9PihNPXsuLi5mLC4uLnYsLi4uTX0sMD09PUQ/Zm8oTSk6UHJvbWlzZS5y'@;
put 'ZXNvbHZlKE0pKSkpLnN1YnNjcmliZShmPT57aWYoIWEuaXNBY3RpdmF0ZWR8fCFhLmFjdGl2YXRlZENvbXBvbmVudFJlZnx8YS5hY3RpdmF0ZWRSb3V0ZSE9PWR8fG51bGw9PT1kLmNvbXBvbmVudClyZXR1cm4gdm9pZCB0aGlzLnVuc3Vic2NyaWJlRnJvbVJvdXRlRGF0YShhKTtjb25zdCB2'@;
put 'PWZ1bmN0aW9uIGhfZShjKXtjb25zdCBsPVZvKGMpO2lmKCFsKXJldHVybiBudWxsO2NvbnN0IGE9bmV3IGs4KGwpO3JldHVybntnZXQgc2VsZWN0b3IoKXtyZXR1cm4gYS5zZWxlY3Rvcn0sZ2V0IHR5cGUoKXtyZXR1cm4gYS5jb21wb25lbnRUeXBlfSxnZXQgaW5wdXRzKCl7cmV0dXJuIGEu'@;
put 'aW5wdXRzfSxnZXQgb3V0cHV0cygpe3JldHVybiBhLm91dHB1dHN9LGdldCBuZ0NvbnRlbnRTZWxlY3RvcnMoKXtyZXR1cm4gYS5uZ0NvbnRlbnRTZWxlY3RvcnN9LGdldCBpc1N0YW5kYWxvbmUoKXtyZXR1cm4gbC5zdGFuZGFsb25lfSxnZXQgaXNTaWduYWwoKXtyZXR1cm4gbC5zaWduYWxz'@;
put 'fX19KGQuY29tcG9uZW50KTtpZih2KWZvcihjb25zdHt0ZW1wbGF0ZU5hbWU6TX1vZiB2LmlucHV0cylhLmFjdGl2YXRlZENvbXBvbmVudFJlZi5zZXRJbnB1dChNLGZbTV0pO2Vsc2UgdGhpcy51bnN1YnNjcmliZUZyb21Sb3V0ZURhdGEoYSl9KTt0aGlzLm91dGxldERhdGFTdWJzY3JpcHRp'@;
put 'b25zLnNldChhLGgpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KX19cmV0dXJuIGN9KSgpO2Z1bmN0aW9uIFhNKGMsbCxhKXtpZihhJiZjLnNo'@;
put 'b3VsZFJldXNlUm91dGUobC52YWx1ZSxhLnZhbHVlLnNuYXBzaG90KSl7Y29uc3QgZD1hLnZhbHVlO2QuX2Z1dHVyZVNuYXBzaG90PWwudmFsdWU7Y29uc3QgaD1mdW5jdGlvbiB0RWUoYyxsLGEpe3JldHVybiBsLmNoaWxkcmVuLm1hcChkPT57Zm9yKGNvbnN0IGggb2YgYS5jaGlsZHJlbilp'@;
put 'ZihjLnNob3VsZFJldXNlUm91dGUoZC52YWx1ZSxoLnZhbHVlLnNuYXBzaG90KSlyZXR1cm4gWE0oYyxkLGgpO3JldHVybiBYTShjLGQpfSl9KGMsbCxhKTtyZXR1cm4gbmV3IEdmKGQsaCl9e2lmKGMuc2hvdWxkQXR0YWNoKGwudmFsdWUpKXtjb25zdCBmPWMucmV0cmlldmUobC52YWx1ZSk7'@;
put 'aWYobnVsbCE9PWYpe2NvbnN0IHY9Zi5yb3V0ZTtyZXR1cm4gdi52YWx1ZS5fZnV0dXJlU25hcHNob3Q9bC52YWx1ZSx2LmNoaWxkcmVuPWwuY2hpbGRyZW4ubWFwKE09PlhNKGMsTSkpLHZ9fWNvbnN0IGQ9ZnVuY3Rpb24gbkVlKGMpe3JldHVybiBuZXcgQ3UobmV3IGVpKGMudXJsKSxuZXcg'@;
put 'ZWkoYy5wYXJhbXMpLG5ldyBlaShjLnF1ZXJ5UGFyYW1zKSxuZXcgZWkoYy5mcmFnbWVudCksbmV3IGVpKGMuZGF0YSksYy5vdXRsZXQsYy5jb21wb25lbnQsYyl9KGwudmFsdWUpLGg9bC5jaGlsZHJlbi5tYXAoZj0+WE0oYyxmKSk7cmV0dXJuIG5ldyBHZihkLGgpfX1jb25zdCBabGU9Im5n'@;
put 'TmF2aWdhdGlvbkNhbmNlbGluZ0Vycm9yIjtmdW5jdGlvbiBXbGUoYyxsKXtjb25zdHtyZWRpcmVjdFRvOmEsbmF2aWdhdGlvbkJlaGF2aW9yT3B0aW9uczpkfT1heShsKT97cmVkaXJlY3RUbzpsLG5hdmlnYXRpb25CZWhhdmlvck9wdGlvbnM6dm9pZCAwfTpsLGg9WWxlKCExLHBoLlJlZGly'@;
put 'ZWN0KTtyZXR1cm4gaC51cmw9YSxoLm5hdmlnYXRpb25CZWhhdmlvck9wdGlvbnM9ZCxofWZ1bmN0aW9uIFlsZShjLGwpe2NvbnN0IGE9bmV3IEVycm9yKGBOYXZpZ2F0aW9uQ2FuY2VsaW5nRXJyb3I6ICR7Y3x8IiJ9YCk7cmV0dXJuIGFbWmxlXT0hMCxhLmNhbmNlbGxhdGlvbkNvZGU9bCxh'@;
put 'fWZ1bmN0aW9uIEdsZShjKXtyZXR1cm4hIWMmJmNbWmxlXX1sZXQgJGxlPSgoKT0+e2NsYXNzIGN7c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJuZy1jb21wb25l'@;
put 'bnQiXV0sc3RhbmRhbG9uZTohMCxmZWF0dXJlczpbcUldLGRlY2xzOjEsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGQsaCl7MSZkJiZHdCgwLCJyb3V0ZXItb3V0bGV0Iil9LGRlcGVuZGVuY2llczpbcmddLGVuY2Fwc3VsYXRpb246Mn0pfX1yZXR1cm4gY30pKCk7ZnVuY3Rpb24gY1coYyl7'@;
put 'Y29uc3QgbD1jLmNoaWxkcmVuJiZjLmNoaWxkcmVuLm1hcChjVyksYT1sP3suLi5jLGNoaWxkcmVuOmx9OnsuLi5jfTtyZXR1cm4hYS5jb21wb25lbnQmJiFhLmxvYWRDb21wb25lbnQmJihsfHxhLmxvYWRDaGlsZHJlbikmJmEub3V0bGV0JiZhLm91dGxldCE9PUtvJiYoYS5jb21wb25lbnQ9'@;
put 'JGxlKSxhfWZ1bmN0aW9uIGdwKGMpe3JldHVybiBjLm91dGxldHx8S299ZnVuY3Rpb24gSk0oYyl7aWYoIWMpcmV0dXJuIG51bGw7aWYoYy5yb3V0ZUNvbmZpZz8uX2luamVjdG9yKXJldHVybiBjLnJvdXRlQ29uZmlnLl9pbmplY3Rvcjtmb3IobGV0IGw9Yy5wYXJlbnQ7bDtsPWwucGFyZW50'@;
put 'KXtjb25zdCBhPWwucm91dGVDb25maWc7aWYoYT8uX2xvYWRlZEluamVjdG9yKXJldHVybiBhLl9sb2FkZWRJbmplY3RvcjtpZihhPy5faW5qZWN0b3IpcmV0dXJuIGEuX2luamVjdG9yfXJldHVybiBudWxsfWNsYXNzIHVFZXtjb25zdHJ1Y3RvcihsLGEsZCxoLGYpe3RoaXMucm91dGVSZXVz'@;
put 'ZVN0cmF0ZWd5PWwsdGhpcy5mdXR1cmVTdGF0ZT1hLHRoaXMuY3VyclN0YXRlPWQsdGhpcy5mb3J3YXJkRXZlbnQ9aCx0aGlzLmlucHV0QmluZGluZ0VuYWJsZWQ9Zn1hY3RpdmF0ZShsKXtjb25zdCBhPXRoaXMuZnV0dXJlU3RhdGUuX3Jvb3QsZD10aGlzLmN1cnJTdGF0ZT90aGlzLmN1cnJT'@;
put 'dGF0ZS5fcm9vdDpudWxsO3RoaXMuZGVhY3RpdmF0ZUNoaWxkUm91dGVzKGEsZCxsKSxvVyh0aGlzLmZ1dHVyZVN0YXRlLnJvb3QpLHRoaXMuYWN0aXZhdGVDaGlsZFJvdXRlcyhhLGQsbCl9ZGVhY3RpdmF0ZUNoaWxkUm91dGVzKGwsYSxkKXtjb25zdCBoPWx5KGEpO2wuY2hpbGRyZW4uZm9y'@;
put 'RWFjaChmPT57Y29uc3Qgdj1mLnZhbHVlLm91dGxldDt0aGlzLmRlYWN0aXZhdGVSb3V0ZXMoZixoW3ZdLGQpLGRlbGV0ZSBoW3ZdfSksT2JqZWN0LnZhbHVlcyhoKS5mb3JFYWNoKGY9Pnt0aGlzLmRlYWN0aXZhdGVSb3V0ZUFuZEl0c0NoaWxkcmVuKGYsZCl9KX1kZWFjdGl2YXRlUm91dGVz'@;
put 'KGwsYSxkKXtjb25zdCBoPWwudmFsdWUsZj1hP2EudmFsdWU6bnVsbDtpZihoPT09ZilpZihoLmNvbXBvbmVudCl7Y29uc3Qgdj1kLmdldENvbnRleHQoaC5vdXRsZXQpO3YmJnRoaXMuZGVhY3RpdmF0ZUNoaWxkUm91dGVzKGwsYSx2LmNoaWxkcmVuKX1lbHNlIHRoaXMuZGVhY3RpdmF0ZUNo'@;
put 'aWxkUm91dGVzKGwsYSxkKTtlbHNlIGYmJnRoaXMuZGVhY3RpdmF0ZVJvdXRlQW5kSXRzQ2hpbGRyZW4oYSxkKX1kZWFjdGl2YXRlUm91dGVBbmRJdHNDaGlsZHJlbihsLGEpe2wudmFsdWUuY29tcG9uZW50JiZ0aGlzLnJvdXRlUmV1c2VTdHJhdGVneS5zaG91bGREZXRhY2gobC52YWx1ZS5z'@;
put 'bmFwc2hvdCk/dGhpcy5kZXRhY2hBbmRTdG9yZVJvdXRlU3VidHJlZShsLGEpOnRoaXMuZGVhY3RpdmF0ZVJvdXRlQW5kT3V0bGV0KGwsYSl9ZGV0YWNoQW5kU3RvcmVSb3V0ZVN1YnRyZWUobCxhKXtjb25zdCBkPWEuZ2V0Q29udGV4dChsLnZhbHVlLm91dGxldCksaD1kJiZsLnZhbHVlLmNv'@;
put 'bXBvbmVudD9kLmNoaWxkcmVuOmEsZj1seShsKTtmb3IoY29uc3QgdiBvZiBPYmplY3QudmFsdWVzKGYpKXRoaXMuZGVhY3RpdmF0ZVJvdXRlQW5kSXRzQ2hpbGRyZW4odixoKTtpZihkJiZkLm91dGxldCl7Y29uc3Qgdj1kLm91dGxldC5kZXRhY2goKSxNPWQuY2hpbGRyZW4ub25PdXRsZXRE'@;
put 'ZWFjdGl2YXRlZCgpO3RoaXMucm91dGVSZXVzZVN0cmF0ZWd5LnN0b3JlKGwudmFsdWUuc25hcHNob3Qse2NvbXBvbmVudFJlZjp2LHJvdXRlOmwsY29udGV4dHM6TX0pfX1kZWFjdGl2YXRlUm91dGVBbmRPdXRsZXQobCxhKXtjb25zdCBkPWEuZ2V0Q29udGV4dChsLnZhbHVlLm91dGxldCks'@;
put 'aD1kJiZsLnZhbHVlLmNvbXBvbmVudD9kLmNoaWxkcmVuOmEsZj1seShsKTtmb3IoY29uc3QgdiBvZiBPYmplY3QudmFsdWVzKGYpKXRoaXMuZGVhY3RpdmF0ZVJvdXRlQW5kSXRzQ2hpbGRyZW4odixoKTtkJiYoZC5vdXRsZXQmJihkLm91dGxldC5kZWFjdGl2YXRlKCksZC5jaGlsZHJlbi5v'@;
put 'bk91dGxldERlYWN0aXZhdGVkKCkpLGQuYXR0YWNoUmVmPW51bGwsZC5yb3V0ZT1udWxsKX1hY3RpdmF0ZUNoaWxkUm91dGVzKGwsYSxkKXtjb25zdCBoPWx5KGEpO2wuY2hpbGRyZW4uZm9yRWFjaChmPT57dGhpcy5hY3RpdmF0ZVJvdXRlcyhmLGhbZi52YWx1ZS5vdXRsZXRdLGQpLHRoaXMu'@;
put 'Zm9yd2FyZEV2ZW50KG5ldyBYeGUoZi52YWx1ZS5zbmFwc2hvdCkpfSksbC5jaGlsZHJlbi5sZW5ndGgmJnRoaXMuZm9yd2FyZEV2ZW50KG5ldyBLeGUobC52YWx1ZS5zbmFwc2hvdCkpfWFjdGl2YXRlUm91dGVzKGwsYSxkKXtjb25zdCBoPWwudmFsdWUsZj1hP2EudmFsdWU6bnVsbDtpZihv'@;
put 'VyhoKSxoPT09ZilpZihoLmNvbXBvbmVudCl7Y29uc3Qgdj1kLmdldE9yQ3JlYXRlQ29udGV4dChoLm91dGxldCk7dGhpcy5hY3RpdmF0ZUNoaWxkUm91dGVzKGwsYSx2LmNoaWxkcmVuKX1lbHNlIHRoaXMuYWN0aXZhdGVDaGlsZFJvdXRlcyhsLGEsZCk7ZWxzZSBpZihoLmNvbXBvbmVudCl7'@;
put 'Y29uc3Qgdj1kLmdldE9yQ3JlYXRlQ29udGV4dChoLm91dGxldCk7aWYodGhpcy5yb3V0ZVJldXNlU3RyYXRlZ3kuc2hvdWxkQXR0YWNoKGguc25hcHNob3QpKXtjb25zdCBNPXRoaXMucm91dGVSZXVzZVN0cmF0ZWd5LnJldHJpZXZlKGguc25hcHNob3QpO3RoaXMucm91dGVSZXVzZVN0cmF0'@;
put 'ZWd5LnN0b3JlKGguc25hcHNob3QsbnVsbCksdi5jaGlsZHJlbi5vbk91dGxldFJlQXR0YWNoZWQoTS5jb250ZXh0cyksdi5hdHRhY2hSZWY9TS5jb21wb25lbnRSZWYsdi5yb3V0ZT1NLnJvdXRlLnZhbHVlLHYub3V0bGV0JiZ2Lm91dGxldC5hdHRhY2goTS5jb21wb25lbnRSZWYsTS5yb3V0'@;
put 'ZS52YWx1ZSksb1coTS5yb3V0ZS52YWx1ZSksdGhpcy5hY3RpdmF0ZUNoaWxkUm91dGVzKGwsbnVsbCx2LmNoaWxkcmVuKX1lbHNle2NvbnN0IE09Sk0oaC5zbmFwc2hvdCk7di5hdHRhY2hSZWY9bnVsbCx2LnJvdXRlPWgsdi5pbmplY3Rvcj1NLHYub3V0bGV0JiZ2Lm91dGxldC5hY3RpdmF0'@;
put 'ZVdpdGgoaCx2LmluamVjdG9yKSx0aGlzLmFjdGl2YXRlQ2hpbGRSb3V0ZXMobCxudWxsLHYuY2hpbGRyZW4pfX1lbHNlIHRoaXMuYWN0aXZhdGVDaGlsZFJvdXRlcyhsLG51bGwsZCl9fWNsYXNzIEtsZXtjb25zdHJ1Y3RvcihsKXt0aGlzLnBhdGg9bCx0aGlzLnJvdXRlPXRoaXMucGF0aFt0'@;
put 'aGlzLnBhdGgubGVuZ3RoLTFdfX1jbGFzcyBaUntjb25zdHJ1Y3RvcihsLGEpe3RoaXMuY29tcG9uZW50PWwsdGhpcy5yb3V0ZT1hfX1mdW5jdGlvbiBkRWUoYyxsLGEpe2NvbnN0IGQ9Yy5fcm9vdDtyZXR1cm4gUU0oZCxsP2wuX3Jvb3Q6bnVsbCxhLFtkLnZhbHVlXSl9ZnVuY3Rpb24gY3ko'@;
put 'YyxsKXtjb25zdCBhPVN5bWJvbCgpLGQ9bC5nZXQoYyxhKTtyZXR1cm4gZD09PWE/ImZ1bmN0aW9uIiE9dHlwZW9mIGN8fGZ1bmN0aW9uIGVvKGMpe3JldHVybiBudWxsIT09UG8oYyl9KGMpP2wuZ2V0KGMpOmM6ZH1mdW5jdGlvbiBRTShjLGwsYSxkLGg9e2NhbkRlYWN0aXZhdGVDaGVja3M6'@;
put 'W10sY2FuQWN0aXZhdGVDaGVja3M6W119KXtjb25zdCBmPWx5KGwpO3JldHVybiBjLmNoaWxkcmVuLmZvckVhY2godj0+eyhmdW5jdGlvbiBmRWUoYyxsLGEsZCxoPXtjYW5EZWFjdGl2YXRlQ2hlY2tzOltdLGNhbkFjdGl2YXRlQ2hlY2tzOltdfSl7Y29uc3QgZj1jLnZhbHVlLHY9bD9sLnZh'@;
put 'bHVlOm51bGwsTT1hP2EuZ2V0Q29udGV4dChjLnZhbHVlLm91dGxldCk6bnVsbDtpZih2JiZmLnJvdXRlQ29uZmlnPT09di5yb3V0ZUNvbmZpZyl7Y29uc3QgRD1mdW5jdGlvbiBwRWUoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBhKXJldHVybiBhKGMsbCk7c3dpdGNoKGEpe2Nhc2Ui'@;
put 'cGF0aFBhcmFtc0NoYW5nZSI6cmV0dXJuIUo4KGMudXJsLGwudXJsKTtjYXNlInBhdGhQYXJhbXNPclF1ZXJ5UGFyYW1zQ2hhbmdlIjpyZXR1cm4hSjgoYy51cmwsbC51cmwpfHwhaHAoYy5xdWVyeVBhcmFtcyxsLnF1ZXJ5UGFyYW1zKTtjYXNlImFsd2F5cyI6cmV0dXJuITA7Y2FzZSJwYXJh'@;
put 'bXNPclF1ZXJ5UGFyYW1zQ2hhbmdlIjpyZXR1cm4hc1coYyxsKXx8IWhwKGMucXVlcnlQYXJhbXMsbC5xdWVyeVBhcmFtcyk7ZGVmYXVsdDpyZXR1cm4hc1coYyxsKX19KHYsZixmLnJvdXRlQ29uZmlnLnJ1bkd1YXJkc0FuZFJlc29sdmVycyk7RD9oLmNhbkFjdGl2YXRlQ2hlY2tzLnB1c2go'@;
put 'bmV3IEtsZShkKSk6KGYuZGF0YT12LmRhdGEsZi5fcmVzb2x2ZWREYXRhPXYuX3Jlc29sdmVkRGF0YSksUU0oYyxsLGYuY29tcG9uZW50P00/TS5jaGlsZHJlbjpudWxsOmEsZCxoKSxEJiZNJiZNLm91dGxldCYmTS5vdXRsZXQuaXNBY3RpdmF0ZWQmJmguY2FuRGVhY3RpdmF0ZUNoZWNrcy5w'@;
put 'dXNoKG5ldyBaUihNLm91dGxldC5jb21wb25lbnQsdikpfWVsc2UgdiYmZXgobCxNLGgpLGguY2FuQWN0aXZhdGVDaGVja3MucHVzaChuZXcgS2xlKGQpKSxRTShjLG51bGwsZi5jb21wb25lbnQ/TT9NLmNoaWxkcmVuOm51bGw6YSxkLGgpfSkodixmW3YudmFsdWUub3V0bGV0XSxhLGQuY29u'@;
put 'Y2F0KFt2LnZhbHVlXSksaCksZGVsZXRlIGZbdi52YWx1ZS5vdXRsZXRdfSksT2JqZWN0LmVudHJpZXMoZikuZm9yRWFjaCgoW3YsTV0pPT5leChNLGEuZ2V0Q29udGV4dCh2KSxoKSksaH1mdW5jdGlvbiBleChjLGwsYSl7Y29uc3QgZD1seShjKSxoPWMudmFsdWU7T2JqZWN0LmVudHJpZXMo'@;
put 'ZCkuZm9yRWFjaCgoW2Ysdl0pPT57ZXgodixoLmNvbXBvbmVudD9sP2wuY2hpbGRyZW4uZ2V0Q29udGV4dChmKTpudWxsOmwsYSl9KSxhLmNhbkRlYWN0aXZhdGVDaGVja3MucHVzaChuZXcgWlIoaC5jb21wb25lbnQmJmwmJmwub3V0bGV0JiZsLm91dGxldC5pc0FjdGl2YXRlZD9sLm91dGxl'@;
put 'dC5jb21wb25lbnQ6bnVsbCxoKSl9ZnVuY3Rpb24gdHgoYyl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIGN9ZnVuY3Rpb24gcWxlKGMpe3JldHVybiBjIGluc3RhbmNlb2YgUlJ8fCJFbXB0eUVycm9yIj09PWM/Lm5hbWV9Y29uc3QgV1I9U3ltYm9sKCJJTklUSUFMX1ZBTFVFIik7ZnVuY3Rp'@;
put 'b24gdXkoKXtyZXR1cm4gVjEoYz0+cTgoYy5tYXAobD0+bC5waXBlKFlmKDEpLHgyKFdSKSkpKS5waXBlKExyKGw9Pntmb3IoY29uc3QgYSBvZiBsKWlmKCEwIT09YSl7aWYoYT09PVdSKXJldHVybiBXUjtpZighMT09PWF8fGEgaW5zdGFuY2VvZiByeSlyZXR1cm4gYX1yZXR1cm4hMH0pLCRs'@;
put 'KGw9PmwhPT1XUiksWWYoMSkpKX1mdW5jdGlvbiBYbGUoYyl7cmV0dXJuIGZ1bmN0aW9uIGZuKC4uLmMpe3JldHVybiBJaShjKX0oR3UobD0+e2lmKGF5KGwpKXRocm93IFdsZSgwLGwpfSksTHIobD0+ITA9PT1sKSl9Y2xhc3MgdVd7Y29uc3RydWN0b3IobCl7dGhpcy5zZWdtZW50R3JvdXA9'@;
put 'bHx8bnVsbH19Y2xhc3MgZFcgZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3RvcihsKXtzdXBlcigpLHRoaXMudXJsVHJlZT1sfX1mdW5jdGlvbiBkeShjKXtyZXR1cm4gek0obmV3IHVXKGMpKX1jbGFzcyBMRWV7Y29uc3RydWN0b3IobCxhKXt0aGlzLnVybFNlcmlhbGl6ZXI9bCx0aGlzLnVybFRy'@;
put 'ZWU9YX1saW5lcmFsaXplU2VnbWVudHMobCxhKXtsZXQgZD1bXSxoPWEucm9vdDtmb3IoOzspe2lmKGQ9ZC5jb25jYXQoaC5zZWdtZW50cyksMD09PWgubnVtYmVyT2ZDaGlsZHJlbilyZXR1cm4gZm8oZCk7aWYoaC5udW1iZXJPZkNoaWxkcmVuPjF8fCFoLmNoaWxkcmVuW0tvXSlyZXR1cm4g'@;
put 'ek0obmV3IFFuKDRlMywhMSkpO2g9aC5jaGlsZHJlbltLb119fWFwcGx5UmVkaXJlY3RDb21tYW5kcyhsLGEsZCl7Y29uc3QgaD10aGlzLmFwcGx5UmVkaXJlY3RDcmVhdGVVcmxUcmVlKGEsdGhpcy51cmxTZXJpYWxpemVyLnBhcnNlKGEpLGwsZCk7aWYoYS5zdGFydHNXaXRoKCIvIikpdGhy'@;
put 'b3cgbmV3IGRXKGgpO3JldHVybiBofWFwcGx5UmVkaXJlY3RDcmVhdGVVcmxUcmVlKGwsYSxkLGgpe2NvbnN0IGY9dGhpcy5jcmVhdGVTZWdtZW50R3JvdXAobCxhLnJvb3QsZCxoKTtyZXR1cm4gbmV3IHJ5KGYsdGhpcy5jcmVhdGVRdWVyeVBhcmFtcyhhLnF1ZXJ5UGFyYW1zLHRoaXMudXJs'@;
put 'VHJlZS5xdWVyeVBhcmFtcyksYS5mcmFnbWVudCl9Y3JlYXRlUXVlcnlQYXJhbXMobCxhKXtjb25zdCBkPXt9O3JldHVybiBPYmplY3QuZW50cmllcyhsKS5mb3JFYWNoKChbaCxmXSk9PntpZigic3RyaW5nIj09dHlwZW9mIGYmJmYuc3RhcnRzV2l0aCgiOiIpKXtjb25zdCBNPWYuc3Vic3Ry'@;
put 'aW5nKDEpO2RbaF09YVtNXX1lbHNlIGRbaF09Zn0pLGR9Y3JlYXRlU2VnbWVudEdyb3VwKGwsYSxkLGgpe2NvbnN0IGY9dGhpcy5jcmVhdGVTZWdtZW50cyhsLGEuc2VnbWVudHMsZCxoKTtsZXQgdj17fTtyZXR1cm4gT2JqZWN0LmVudHJpZXMoYS5jaGlsZHJlbikuZm9yRWFjaCgoW00sRF0p'@;
put 'PT57dltNXT10aGlzLmNyZWF0ZVNlZ21lbnRHcm91cChsLEQsZCxoKX0pLG5ldyBLbChmLHYpfWNyZWF0ZVNlZ21lbnRzKGwsYSxkLGgpe3JldHVybiBhLm1hcChmPT5mLnBhdGguc3RhcnRzV2l0aCgiOiIpP3RoaXMuZmluZFBvc1BhcmFtKGwsZixoKTp0aGlzLmZpbmRPclJldHVybihmLGQp'@;
put 'KX1maW5kUG9zUGFyYW0obCxhLGQpe2NvbnN0IGg9ZFthLnBhdGguc3Vic3RyaW5nKDEpXTtpZighaCl0aHJvdyBuZXcgUW4oNDAwMSwhMSk7cmV0dXJuIGh9ZmluZE9yUmV0dXJuKGwsYSl7bGV0IGQ9MDtmb3IoY29uc3QgaCBvZiBhKXtpZihoLnBhdGg9PT1sLnBhdGgpcmV0dXJuIGEuc3Bs'@;
put 'aWNlKGQpLGg7ZCsrfXJldHVybiBsfX1jb25zdCBoVz17bWF0Y2hlZDohMSxjb25zdW1lZFNlZ21lbnRzOltdLHJlbWFpbmluZ1NlZ21lbnRzOltdLHBhcmFtZXRlcnM6e30scG9zaXRpb25hbFBhcmFtU2VnbWVudHM6e319O2Z1bmN0aW9uIE9FZShjLGwsYSxkLGgpe2NvbnN0IGY9ZlcoYyxs'@;
put 'LGEpO3JldHVybiBmLm1hdGNoZWQ/KGQ9ZnVuY3Rpb24gaUVlKGMsbCl7cmV0dXJuIGMucHJvdmlkZXJzJiYhYy5faW5qZWN0b3ImJihjLl9pbmplY3Rvcj1HNChjLnByb3ZpZGVycyxsLGBSb3V0ZTogJHtjLnBhdGh9YCkpLGMuX2luamVjdG9yPz9sfShsLGQpLGZ1bmN0aW9uIERFZShjLGws'@;
put 'YSxkKXtjb25zdCBoPWwuY2FuTWF0Y2g7cmV0dXJuIGgmJjAhPT1oLmxlbmd0aD9mbyhoLm1hcCh2PT57Y29uc3QgTT1jeSh2LGMpO3JldHVybiBvbShmdW5jdGlvbiBfRWUoYyl7cmV0dXJuIGMmJnR4KGMuY2FuTWF0Y2gpfShNKT9NLmNhbk1hdGNoKGwsYSk6cTAoYywoKT0+TShsLGEpKSl9'@;
put 'KSkucGlwZSh1eSgpLFhsZSgpKTpmbyghMCl9KGQsbCxhKS5waXBlKExyKHY9PiEwPT09dj9mOnsuLi5oV30pKSk6Zm8oZil9ZnVuY3Rpb24gZlcoYyxsLGEpe2lmKCIqKiI9PT1sLnBhdGgpcmV0dXJuIGZ1bmN0aW9uIFBFZShjKXtyZXR1cm57bWF0Y2hlZDohMCxwYXJhbWV0ZXJzOmMubGVu'@;
put 'Z3RoPjA/dmxlKGMpLnBhcmFtZXRlcnM6e30sY29uc3VtZWRTZWdtZW50czpjLHJlbWFpbmluZ1NlZ21lbnRzOltdLHBvc2l0aW9uYWxQYXJhbVNlZ21lbnRzOnt9fX0oYSk7aWYoIiI9PT1sLnBhdGgpcmV0dXJuImZ1bGwiPT09bC5wYXRoTWF0Y2gmJihjLmhhc0NoaWxkcmVuKCl8fGEubGVu'@;
put 'Z3RoPjApP3suLi5oV306e21hdGNoZWQ6ITAsY29uc3VtZWRTZWdtZW50czpbXSxyZW1haW5pbmdTZWdtZW50czphLHBhcmFtZXRlcnM6e30scG9zaXRpb25hbFBhcmFtU2VnbWVudHM6e319O2NvbnN0IGg9KGwubWF0Y2hlcnx8Z3hlKShhLGMsbCk7aWYoIWgpcmV0dXJuey4uLmhXfTtjb25z'@;
put 'dCBmPXt9O09iamVjdC5lbnRyaWVzKGgucG9zUGFyYW1zPz97fSkuZm9yRWFjaCgoW00sRF0pPT57ZltNXT1ELnBhdGh9KTtjb25zdCB2PWguY29uc3VtZWQubGVuZ3RoPjA/ey4uLmYsLi4uaC5jb25zdW1lZFtoLmNvbnN1bWVkLmxlbmd0aC0xXS5wYXJhbWV0ZXJzfTpmO3JldHVybnttYXRj'@;
put 'aGVkOiEwLGNvbnN1bWVkU2VnbWVudHM6aC5jb25zdW1lZCxyZW1haW5pbmdTZWdtZW50czphLnNsaWNlKGguY29uc3VtZWQubGVuZ3RoKSxwYXJhbWV0ZXJzOnYscG9zaXRpb25hbFBhcmFtU2VnbWVudHM6aC5wb3NQYXJhbXM/P3t9fX1mdW5jdGlvbiBKbGUoYyxsLGEsZCl7cmV0dXJuIGEu'@;
put 'bGVuZ3RoPjAmJmZ1bmN0aW9uIE5FZShjLGwsYSl7cmV0dXJuIGEuc29tZShkPT5ZUihjLGwsZCkmJmdwKGQpIT09S28pfShjLGEsZCk/e3NlZ21lbnRHcm91cDpuZXcgS2wobCxIRWUoZCxuZXcgS2woYSxjLmNoaWxkcmVuKSkpLHNsaWNlZFNlZ21lbnRzOltdfTowPT09YS5sZW5ndGgmJmZ1'@;
put 'bmN0aW9uIFZFZShjLGwsYSl7cmV0dXJuIGEuc29tZShkPT5ZUihjLGwsZCkpfShjLGEsZCk/e3NlZ21lbnRHcm91cDpuZXcgS2woYy5zZWdtZW50cyxGRWUoYyxhLGQsYy5jaGlsZHJlbikpLHNsaWNlZFNlZ21lbnRzOmF9OntzZWdtZW50R3JvdXA6bmV3IEtsKGMuc2VnbWVudHMsYy5jaGls'@;
put 'ZHJlbiksc2xpY2VkU2VnbWVudHM6YX19ZnVuY3Rpb24gRkVlKGMsbCxhLGQpe2NvbnN0IGg9e307Zm9yKGNvbnN0IGYgb2YgYSlpZihZUihjLGwsZikmJiFkW2dwKGYpXSl7Y29uc3Qgdj1uZXcgS2woW10se30pO2hbZ3AoZildPXZ9cmV0dXJuey4uLmQsLi4uaH19ZnVuY3Rpb24gSEVlKGMs'@;
put 'bCl7Y29uc3QgYT17fTthW0tvXT1sO2Zvcihjb25zdCBkIG9mIGMpaWYoIiI9PT1kLnBhdGgmJmdwKGQpIT09S28pe2NvbnN0IGg9bmV3IEtsKFtdLHt9KTthW2dwKGQpXT1ofXJldHVybiBhfWZ1bmN0aW9uIFlSKGMsbCxhKXtyZXR1cm4oIShjLmhhc0NoaWxkcmVuKCl8fGwubGVuZ3RoPjAp'@;
put 'fHwiZnVsbCIhPT1hLnBhdGhNYXRjaCkmJiIiPT09YS5wYXRofWNsYXNzIHpFZXt9Y2xhc3MgV0Vle2NvbnN0cnVjdG9yKGwsYSxkLGgsZix2LE0pe3RoaXMuaW5qZWN0b3I9bCx0aGlzLmNvbmZpZ0xvYWRlcj1hLHRoaXMucm9vdENvbXBvbmVudFR5cGU9ZCx0aGlzLmNvbmZpZz1oLHRoaXMu'@;
put 'dXJsVHJlZT1mLHRoaXMucGFyYW1zSW5oZXJpdGFuY2VTdHJhdGVneT12LHRoaXMudXJsU2VyaWFsaXplcj1NLHRoaXMuYXBwbHlSZWRpcmVjdHM9bmV3IExFZSh0aGlzLnVybFNlcmlhbGl6ZXIsdGhpcy51cmxUcmVlKSx0aGlzLmFic29sdXRlUmVkaXJlY3RDb3VudD0wLHRoaXMuYWxsb3dS'@;
put 'ZWRpcmVjdHM9ITB9bm9NYXRjaEVycm9yKGwpe3JldHVybiBuZXcgUW4oNDAwMixgJyR7bC5zZWdtZW50R3JvdXB9J2ApfXJlY29nbml6ZSgpe2NvbnN0IGw9SmxlKHRoaXMudXJsVHJlZS5yb290LFtdLFtdLHRoaXMuY29uZmlnKS5zZWdtZW50R3JvdXA7cmV0dXJuIHRoaXMubWF0Y2gobCku'@;
put 'cGlwZShMcihhPT57Y29uc3QgZD1uZXcgaVcoW10sT2JqZWN0LmZyZWV6ZSh7fSksT2JqZWN0LmZyZWV6ZSh7Li4udGhpcy51cmxUcmVlLnF1ZXJ5UGFyYW1zfSksdGhpcy51cmxUcmVlLmZyYWdtZW50LHt9LEtvLHRoaXMucm9vdENvbXBvbmVudFR5cGUsbnVsbCx7fSksaD1uZXcgR2YoZCxh'@;
put 'KSxmPW5ldyBCbGUoIiIsaCksdj1mdW5jdGlvbiBQeGUoYyxsLGE9bnVsbCxkPW51bGwpe3JldHVybiBrbGUoQWxlKGMpLGwsYSxkKX0oZCxbXSx0aGlzLnVybFRyZWUucXVlcnlQYXJhbXMsdGhpcy51cmxUcmVlLmZyYWdtZW50KTtyZXR1cm4gdi5xdWVyeVBhcmFtcz10aGlzLnVybFRyZWUu'@;
put 'cXVlcnlQYXJhbXMsZi51cmw9dGhpcy51cmxTZXJpYWxpemVyLnNlcmlhbGl6ZSh2KSx0aGlzLmluaGVyaXRQYXJhbXNBbmREYXRhKGYuX3Jvb3QsbnVsbCkse3N0YXRlOmYsdHJlZTp2fX0pKX1tYXRjaChsKXtyZXR1cm4gdGhpcy5wcm9jZXNzU2VnbWVudEdyb3VwKHRoaXMuaW5qZWN0b3Is'@;
put 'dGhpcy5jb25maWcsbCxLbykucGlwZShYOChkPT57aWYoZCBpbnN0YW5jZW9mIGRXKXJldHVybiB0aGlzLnVybFRyZWU9ZC51cmxUcmVlLHRoaXMubWF0Y2goZC51cmxUcmVlLnJvb3QpO3Rocm93IGQgaW5zdGFuY2VvZiB1Vz90aGlzLm5vTWF0Y2hFcnJvcihkKTpkfSkpfWluaGVyaXRQYXJh'@;
put 'bXNBbmREYXRhKGwsYSl7Y29uc3QgZD1sLnZhbHVlLGg9clcoZCxhLHRoaXMucGFyYW1zSW5oZXJpdGFuY2VTdHJhdGVneSk7ZC5wYXJhbXM9T2JqZWN0LmZyZWV6ZShoLnBhcmFtcyksZC5kYXRhPU9iamVjdC5mcmVlemUoaC5kYXRhKSxsLmNoaWxkcmVuLmZvckVhY2goZj0+dGhpcy5pbmhl'@;
put 'cml0UGFyYW1zQW5kRGF0YShmLGQpKX1wcm9jZXNzU2VnbWVudEdyb3VwKGwsYSxkLGgpe3JldHVybiAwPT09ZC5zZWdtZW50cy5sZW5ndGgmJmQuaGFzQ2hpbGRyZW4oKT90aGlzLnByb2Nlc3NDaGlsZHJlbihsLGEsZCk6dGhpcy5wcm9jZXNzU2VnbWVudChsLGEsZCxkLnNlZ21lbnRzLGgs'@;
put 'ITApLnBpcGUoTHIoZj0+ZiBpbnN0YW5jZW9mIEdmP1tmXTpbXSkpfXByb2Nlc3NDaGlsZHJlbihsLGEsZCl7Y29uc3QgaD1bXTtmb3IoY29uc3QgZiBvZiBPYmplY3Qua2V5cyhkLmNoaWxkcmVuKSkicHJpbWFyeSI9PT1mP2gudW5zaGlmdChmKTpoLnB1c2goZik7cmV0dXJuIFl1KGgpLnBp'@;
put 'cGUodHkoZj0+e2NvbnN0IHY9ZC5jaGlsZHJlbltmXSxNPWZ1bmN0aW9uIGxFZShjLGwpe2NvbnN0IGE9Yy5maWx0ZXIoZD0+Z3AoZCk9PT1sKTtyZXR1cm4gYS5wdXNoKC4uLmMuZmlsdGVyKGQ9PmdwKGQpIT09bCkpLGF9KGEsZik7cmV0dXJuIHRoaXMucHJvY2Vzc1NlZ21lbnRHcm91cChs'@;
put 'LE0sdixmKX0pLGZ1bmN0aW9uIGR4ZShjLGwpe3JldHVybiBWaShmdW5jdGlvbiB1eGUoYyxsLGEsZCxoKXtyZXR1cm4oZix2KT0+e2xldCBNPWEsRD1sLFo9MDtmLnN1YnNjcmliZShOaSh2LHJlPT57Y29uc3QgY2U9WisrO0Q9TT9jKEQscmUsY2UpOihNPSEwLHJlKSxkJiZ2Lm5leHQoRCl9'@;
put 'LGgmJigoKT0+e00mJnYubmV4dChEKSx2LmNvbXBsZXRlKCl9KSkpfX0oYyxsLGFyZ3VtZW50cy5sZW5ndGg+PTIsITApKX0oKGYsdik9PihmLnB1c2goLi4udiksZikpLExSKG51bGwpLGZ1bmN0aW9uIGh4ZShjLGwpe2NvbnN0IGE9YXJndW1lbnRzLmxlbmd0aD49MjtyZXR1cm4gZD0+ZC5w'@;
put 'aXBlKGM/JGwoKGgsZik9PmMoaCxmLGQpKTpjbixZWigxKSxhP0xSKGwpOmdsZSgoKT0+bmV3IFJSKSl9KCksTjAoZj0+e2lmKG51bGw9PT1mKXJldHVybiBkeShkKTtjb25zdCB2PVFsZShmKTtyZXR1cm4gZnVuY3Rpb24gWUVlKGMpe2Muc29ydCgobCxhKT0+bC52YWx1ZS5vdXRsZXQ9PT1L'@;
put 'bz8tMTphLnZhbHVlLm91dGxldD09PUtvPzE6bC52YWx1ZS5vdXRsZXQubG9jYWxlQ29tcGFyZShhLnZhbHVlLm91dGxldCkpfSh2KSxmbyh2KX0pKX1wcm9jZXNzU2VnbWVudChsLGEsZCxoLGYsdil7cmV0dXJuIFl1KGEpLnBpcGUodHkoTT0+dGhpcy5wcm9jZXNzU2VnbWVudEFnYWluc3RS'@;
put 'b3V0ZShNLl9pbmplY3Rvcj8/bCxhLE0sZCxoLGYsdikucGlwZShYOChEPT57aWYoRCBpbnN0YW5jZW9mIHVXKXJldHVybiBmbyhudWxsKTt0aHJvdyBEfSkpKSxhbShNPT4hIU0pLFg4KE09PntpZihxbGUoTSkpcmV0dXJuIGZ1bmN0aW9uIGpFZShjLGwsYSl7cmV0dXJuIDA9PT1sLmxlbmd0'@;
put 'aCYmIWMuY2hpbGRyZW5bYV19KGQsaCxmKT9mbyhuZXcgekVlKTpkeShkKTt0aHJvdyBNfSkpfXByb2Nlc3NTZWdtZW50QWdhaW5zdFJvdXRlKGwsYSxkLGgsZix2LE0pe3JldHVybiBmdW5jdGlvbiBCRWUoYyxsLGEsZCl7cmV0dXJuISEoZ3AoYyk9PT1kfHxkIT09S28mJllSKGwsYSxjKSkm'@;
put 'JmZXKGwsYyxhKS5tYXRjaGVkfShkLGgsZix2KT92b2lkIDA9PT1kLnJlZGlyZWN0VG8/dGhpcy5tYXRjaFNlZ21lbnRBZ2FpbnN0Um91dGUobCxoLGQsZix2KTp0aGlzLmFsbG93UmVkaXJlY3RzJiZNP3RoaXMuZXhwYW5kU2VnbWVudEFnYWluc3RSb3V0ZVVzaW5nUmVkaXJlY3QobCxoLGEs'@;
put 'ZCxmLHYpOmR5KGgpOmR5KGgpfWV4cGFuZFNlZ21lbnRBZ2FpbnN0Um91dGVVc2luZ1JlZGlyZWN0KGwsYSxkLGgsZix2KXtjb25zdHttYXRjaGVkOk0sY29uc3VtZWRTZWdtZW50czpELHBvc2l0aW9uYWxQYXJhbVNlZ21lbnRzOloscmVtYWluaW5nU2VnbWVudHM6cmV9PWZXKGEsaCxmKTtp'@;
put 'ZighTSlyZXR1cm4gZHkoYSk7aC5yZWRpcmVjdFRvLnN0YXJ0c1dpdGgoIi8iKSYmKHRoaXMuYWJzb2x1dGVSZWRpcmVjdENvdW50KyssdGhpcy5hYnNvbHV0ZVJlZGlyZWN0Q291bnQ+MzEmJih0aGlzLmFsbG93UmVkaXJlY3RzPSExKSk7Y29uc3QgY2U9dGhpcy5hcHBseVJlZGlyZWN0cy5h'@;
put 'cHBseVJlZGlyZWN0Q29tbWFuZHMoRCxoLnJlZGlyZWN0VG8sWik7cmV0dXJuIHRoaXMuYXBwbHlSZWRpcmVjdHMubGluZXJhbGl6ZVNlZ21lbnRzKGgsY2UpLnBpcGUoTjAoYmU9PnRoaXMucHJvY2Vzc1NlZ21lbnQobCxkLGEsYmUuY29uY2F0KHJlKSx2LCExKSkpfW1hdGNoU2VnbWVudEFn'@;
put 'YWluc3RSb3V0ZShsLGEsZCxoLGYpe2NvbnN0IHY9T0VlKGEsZCxoLGwpO3JldHVybiIqKiI9PT1kLnBhdGgmJihhLmNoaWxkcmVuPXt9KSx2LnBpcGUoVjEoTT0+TS5tYXRjaGVkP3RoaXMuZ2V0Q2hpbGRDb25maWcobD1kLl9pbmplY3Rvcj8/bCxkLGgpLnBpcGUoVjEoKHtyb3V0ZXM6RH0p'@;
put 'PT57Y29uc3QgWj1kLl9sb2FkZWRJbmplY3Rvcj8/bCx7Y29uc3VtZWRTZWdtZW50czpyZSxyZW1haW5pbmdTZWdtZW50czpjZSxwYXJhbWV0ZXJzOmJlfT1NLEVlPW5ldyBpVyhyZSxiZSxPYmplY3QuZnJlZXplKHsuLi50aGlzLnVybFRyZWUucXVlcnlQYXJhbXN9KSx0aGlzLnVybFRyZWUu'@;
put 'ZnJhZ21lbnQsZnVuY3Rpb24gJEVlKGMpe3JldHVybiBjLmRhdGF8fHt9fShkKSxncChkKSxkLmNvbXBvbmVudD8/ZC5fbG9hZGVkQ29tcG9uZW50Pz9udWxsLGQsZnVuY3Rpb24gS0VlKGMpe3JldHVybiBjLnJlc29sdmV8fHt9fShkKSkse3NlZ21lbnRHcm91cDpCZSxzbGljZWRTZWdtZW50'@;
put 'czpxZX09SmxlKGEscmUsY2UsRCk7aWYoMD09PXFlLmxlbmd0aCYmQmUuaGFzQ2hpbGRyZW4oKSlyZXR1cm4gdGhpcy5wcm9jZXNzQ2hpbGRyZW4oWixELEJlKS5waXBlKExyKHB0PT5udWxsPT09cHQ/bnVsbDpuZXcgR2YoRWUscHQpKSk7aWYoMD09PUQubGVuZ3RoJiYwPT09cWUubGVuZ3Ro'@;
put 'KXJldHVybiBmbyhuZXcgR2YoRWUsW10pKTtjb25zdCBydD1ncChkKT09PWY7cmV0dXJuIHRoaXMucHJvY2Vzc1NlZ21lbnQoWixELEJlLHFlLHJ0P0tvOmYsITApLnBpcGUoTHIocHQ9Pm5ldyBHZihFZSxwdCBpbnN0YW5jZW9mIEdmP1twdF06W10pKSl9KSk6ZHkoYSkpKX1nZXRDaGlsZENv'@;
put 'bmZpZyhsLGEsZCl7cmV0dXJuIGEuY2hpbGRyZW4/Zm8oe3JvdXRlczphLmNoaWxkcmVuLGluamVjdG9yOmx9KTphLmxvYWRDaGlsZHJlbj92b2lkIDAhPT1hLl9sb2FkZWRSb3V0ZXM/Zm8oe3JvdXRlczphLl9sb2FkZWRSb3V0ZXMsaW5qZWN0b3I6YS5fbG9hZGVkSW5qZWN0b3J9KTpmdW5j'@;
put 'dGlvbiBrRWUoYyxsLGEsZCl7Y29uc3QgaD1sLmNhbkxvYWQ7cmV0dXJuIHZvaWQgMD09PWh8fDA9PT1oLmxlbmd0aD9mbyghMCk6Zm8oaC5tYXAodj0+e2NvbnN0IE09Y3kodixjKTtyZXR1cm4gb20oZnVuY3Rpb24gbUVlKGMpe3JldHVybiBjJiZ0eChjLmNhbkxvYWQpfShNKT9NLmNhbkxv'@;
put 'YWQobCxhKTpxMChjLCgpPT5NKGwsYSkpKX0pKS5waXBlKHV5KCksWGxlKCkpfShsLGEsZCkucGlwZShOMChoPT5oP3RoaXMuY29uZmlnTG9hZGVyLmxvYWRDaGlsZHJlbihsLGEpLnBpcGUoR3UoZj0+e2EuX2xvYWRlZFJvdXRlcz1mLnJvdXRlcyxhLl9sb2FkZWRJbmplY3Rvcj1mLmluamVj'@;
put 'dG9yfSkpOmZ1bmN0aW9uIFJFZShjKXtyZXR1cm4gek0oWWxlKCExLHBoLkd1YXJkUmVqZWN0ZWQpKX0oKSkpOmZvKHtyb3V0ZXM6W10saW5qZWN0b3I6bH0pfX1mdW5jdGlvbiBHRWUoYyl7Y29uc3QgbD1jLnZhbHVlLnJvdXRlQ29uZmlnO3JldHVybiBsJiYiIj09PWwucGF0aH1mdW5jdGlv'@;
put 'biBRbGUoYyl7Y29uc3QgbD1bXSxhPW5ldyBTZXQ7Zm9yKGNvbnN0IGQgb2YgYyl7aWYoIUdFZShkKSl7bC5wdXNoKGQpO2NvbnRpbnVlfWNvbnN0IGg9bC5maW5kKGY9PmQudmFsdWUucm91dGVDb25maWc9PT1mLnZhbHVlLnJvdXRlQ29uZmlnKTt2b2lkIDAhPT1oPyhoLmNoaWxkcmVuLnB1'@;
put 'c2goLi4uZC5jaGlsZHJlbiksYS5hZGQoaCkpOmwucHVzaChkKX1mb3IoY29uc3QgZCBvZiBhKXtjb25zdCBoPVFsZShkLmNoaWxkcmVuKTtsLnB1c2gobmV3IEdmKGQudmFsdWUsaCkpfXJldHVybiBsLmZpbHRlcihkPT4hYS5oYXMoZCkpfWZ1bmN0aW9uIGVjZShjKXtjb25zdCBsPWMuY2hp'@;
put 'bGRyZW4ubWFwKGE9PmVjZShhKSkuZmxhdCgpO3JldHVybltjLC4uLmxdfWZ1bmN0aW9uIHBXKGMpe3JldHVybiBWMShsPT57Y29uc3QgYT1jKGwpO3JldHVybiBhP1l1KGEpLnBpcGUoTHIoKCk9PmwpKTpmbyhsKX0pfWxldCB0Y2U9KCgpPT57Y2xhc3MgY3tidWlsZFRpdGxlKGEpe2xldCBk'@;
put 'LGg9YS5yb290O2Zvcig7dm9pZCAwIT09aDspZD10aGlzLmdldFJlc29sdmVkVGl0bGVGb3JSb3V0ZShoKT8/ZCxoPWguY2hpbGRyZW4uZmluZChmPT5mLm91dGxldD09PUtvKTtyZXR1cm4gZH1nZXRSZXNvbHZlZFRpdGxlRm9yUm91dGUoYSl7cmV0dXJuIGEuZGF0YVtaTV19c3RhdGlje3Ro'@;
put 'aXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTooKT0+ZmkodFRlKSxwcm92aWRlZEluOiJyb290In0pfX1yZXR1cm4gY30pKCksdFRlPSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyB0Y2V7Y29u'@;
put 'c3RydWN0b3IoYSl7c3VwZXIoKSx0aGlzLnRpdGxlPWF9dXBkYXRlVGl0bGUoYSl7Y29uc3QgZD10aGlzLmJ1aWxkVGl0bGUoYSk7dm9pZCAwIT09ZCYmdGhpcy50aXRsZS5zZXRUaXRsZShkKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKSh4cihJ'@;
put 'Q2UpKX19c3RhdGlje3RoaXMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSl9fXJldHVybiBjfSkoKTtjb25zdCBoeT1uZXcgU3QoIiIse3Byb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6KCk9Pih7fSl9KSxmeT1uZXcgU3QoIiIp'@;
put 'O2xldCBnVz0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5jb21wb25lbnRMb2FkZXJzPW5ldyBXZWFrTWFwLHRoaXMuY2hpbGRyZW5Mb2FkZXJzPW5ldyBXZWFrTWFwLHRoaXMuY29tcGlsZXI9ZmkoS2llKX1sb2FkQ29tcG9uZW50KGEpe2lmKHRoaXMuY29tcG9uZW50TG9hZGVy'@;
put 'cy5nZXQoYSkpcmV0dXJuIHRoaXMuY29tcG9uZW50TG9hZGVycy5nZXQoYSk7aWYoYS5fbG9hZGVkQ29tcG9uZW50KXJldHVybiBmbyhhLl9sb2FkZWRDb21wb25lbnQpO3RoaXMub25Mb2FkU3RhcnRMaXN0ZW5lciYmdGhpcy5vbkxvYWRTdGFydExpc3RlbmVyKGEpO2NvbnN0IGQ9b20oYS5s'@;
put 'b2FkQ29tcG9uZW50KCkpLnBpcGUoTHIobmNlKSxHdShmPT57dGhpcy5vbkxvYWRFbmRMaXN0ZW5lciYmdGhpcy5vbkxvYWRFbmRMaXN0ZW5lcihhKSxhLl9sb2FkZWRDb21wb25lbnQ9Zn0pLFVNKCgpPT57dGhpcy5jb21wb25lbnRMb2FkZXJzLmRlbGV0ZShhKX0pKSxoPW5ldyBXWihkLCgp'@;
put 'PT5uZXcgV24pLnBpcGUoWlooKSk7cmV0dXJuIHRoaXMuY29tcG9uZW50TG9hZGVycy5zZXQoYSxoKSxofWxvYWRDaGlsZHJlbihhLGQpe2lmKHRoaXMuY2hpbGRyZW5Mb2FkZXJzLmdldChkKSlyZXR1cm4gdGhpcy5jaGlsZHJlbkxvYWRlcnMuZ2V0KGQpO2lmKGQuX2xvYWRlZFJvdXRlcyly'@;
put 'ZXR1cm4gZm8oe3JvdXRlczpkLl9sb2FkZWRSb3V0ZXMsaW5qZWN0b3I6ZC5fbG9hZGVkSW5qZWN0b3J9KTt0aGlzLm9uTG9hZFN0YXJ0TGlzdGVuZXImJnRoaXMub25Mb2FkU3RhcnRMaXN0ZW5lcihkKTtjb25zdCBmPWZ1bmN0aW9uIG5UZShjLGwsYSxkKXtyZXR1cm4gb20oYy5sb2FkQ2hp'@;
put 'bGRyZW4oKSkucGlwZShMcihuY2UpLE4wKGg9PmggaW5zdGFuY2VvZiBtY3x8QXJyYXkuaXNBcnJheShoKT9mbyhoKTpZdShsLmNvbXBpbGVNb2R1bGVBc3luYyhoKSkpLExyKGg9PntkJiZkKGMpO2xldCBmLHYsTT0hMTtyZXR1cm4gQXJyYXkuaXNBcnJheShoKT8odj1oLCEwKTooZj1oLmNy'@;
put 'ZWF0ZShhKS5pbmplY3Rvcix2PWYuZ2V0KGZ5LFtdLHtvcHRpb25hbDohMCxzZWxmOiEwfSkuZmxhdCgpKSx7cm91dGVzOnYubWFwKGNXKSxpbmplY3RvcjpmfX0pKX0oZCx0aGlzLmNvbXBpbGVyLGEsdGhpcy5vbkxvYWRFbmRMaXN0ZW5lcikucGlwZShVTSgoKT0+e3RoaXMuY2hpbGRyZW5M'@;
put 'b2FkZXJzLmRlbGV0ZShkKX0pKSx2PW5ldyBXWihmLCgpPT5uZXcgV24pLnBpcGUoWlooKSk7cmV0dXJuIHRoaXMuY2hpbGRyZW5Mb2FkZXJzLnNldChkLHYpLHZ9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NXBy'@;
put 'b3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pfX1yZXR1cm4gY30pKCk7ZnVuY3Rpb24gbmNlKGMpe3JldHVybiBmdW5jdGlvbiByVGUoYyl7cmV0dXJuIGMmJiJvYmplY3QiPT10eXBlb2YgYyYmImRlZmF1bHQiaW4gY30oYyk/Yy5kZWZhdWx0'@;
put 'OmN9bGV0IG1XPSgoKT0+e2NsYXNzIGN7c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTooKT0+ZmkoaVRlKSxwcm92aWRlZEluOiJyb290In0pfX1yZXR1cm4gY30pKCks'@;
put 'aVRlPSgoKT0+e2NsYXNzIGN7c2hvdWxkUHJvY2Vzc1VybChhKXtyZXR1cm4hMH1leHRyYWN0KGEpe3JldHVybiBhfW1lcmdlKGEsZCl7cmV0dXJuIGF9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NXByb3Y9YW4o'@;
put 'e3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pfX1yZXR1cm4gY30pKCk7Y29uc3QgcmNlPW5ldyBTdCgiIiksaWNlPW5ldyBTdCgiIik7ZnVuY3Rpb24gYVRlKGMsbCxhKXtjb25zdCBkPWMuZ2V0KGljZSksaD1jLmdldCh2cyk7cmV0dXJuIGMuZ2V0KFdh'@;
put 'KS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e2lmKCFoLnN0YXJ0Vmlld1RyYW5zaXRpb258fGQuc2tpcE5leHRUcmFuc2l0aW9uKXJldHVybiBkLnNraXBOZXh0VHJhbnNpdGlvbj0hMSxuZXcgUHJvbWlzZShaPT5zZXRUaW1lb3V0KFopKTtsZXQgZjtjb25zdCB2PW5ldyBQcm9taXNlKFo9Pntm'@;
put 'PVp9KSxNPWguc3RhcnRWaWV3VHJhbnNpdGlvbigoKT0+KGYoKSxmdW5jdGlvbiBvVGUoYyl7cmV0dXJuIG5ldyBQcm9taXNlKGw9PntfYihsLHtpbmplY3RvcjpjfSl9KX0oYykpKSx7b25WaWV3VHJhbnNpdGlvbkNyZWF0ZWQ6RH09ZDtyZXR1cm4gRCYmcTAoYywoKT0+RCh7dHJhbnNpdGlv'@;
put 'bjpNLGZyb206bCx0bzphfSkpLHZ9KX1sZXQgR1I9KCgpPT57Y2xhc3MgY3tnZXQgaGFzUmVxdWVzdGVkTmF2aWdhdGlvbigpe3JldHVybiAwIT09dGhpcy5uYXZpZ2F0aW9uSWR9Y29uc3RydWN0b3IoKXt0aGlzLmN1cnJlbnROYXZpZ2F0aW9uPW51bGwsdGhpcy5jdXJyZW50VHJhbnNpdGlv'@;
put 'bj1udWxsLHRoaXMubGFzdFN1Y2Nlc3NmdWxOYXZpZ2F0aW9uPW51bGwsdGhpcy5ldmVudHM9bmV3IFduLHRoaXMudHJhbnNpdGlvbkFib3J0U3ViamVjdD1uZXcgV24sdGhpcy5jb25maWdMb2FkZXI9ZmkoZ1cpLHRoaXMuZW52aXJvbm1lbnRJbmplY3Rvcj1maShoYyksdGhpcy51cmxTZXJp'@;
put 'YWxpemVyPWZpKGl5KSx0aGlzLnJvb3RDb250ZXh0cz1maShxTSksdGhpcy5sb2NhdGlvbj1maShmaCksdGhpcy5pbnB1dEJpbmRpbmdFbmFibGVkPW51bGwhPT1maShVUix7b3B0aW9uYWw6ITB9KSx0aGlzLnRpdGxlU3RyYXRlZ3k9ZmkodGNlKSx0aGlzLm9wdGlvbnM9ZmkoaHkse29wdGlv'@;
put 'bmFsOiEwfSl8fHt9LHRoaXMucGFyYW1zSW5oZXJpdGFuY2VTdHJhdGVneT10aGlzLm9wdGlvbnMucGFyYW1zSW5oZXJpdGFuY2VTdHJhdGVneXx8ImVtcHR5T25seSIsdGhpcy51cmxIYW5kbGluZ1N0cmF0ZWd5PWZpKG1XKSx0aGlzLmNyZWF0ZVZpZXdUcmFuc2l0aW9uPWZpKHJjZSx7b3B0'@;
put 'aW9uYWw6ITB9KSx0aGlzLm5hdmlnYXRpb25JZD0wLHRoaXMuYWZ0ZXJQcmVhY3RpdmF0aW9uPSgpPT5mbyh2b2lkIDApLHRoaXMucm9vdENvbXBvbmVudFR5cGU9bnVsbCx0aGlzLmNvbmZpZ0xvYWRlci5vbkxvYWRFbmRMaXN0ZW5lcj1oPT50aGlzLmV2ZW50cy5uZXh0KG5ldyBHeGUoaCkp'@;
put 'LHRoaXMuY29uZmlnTG9hZGVyLm9uTG9hZFN0YXJ0TGlzdGVuZXI9aD0+dGhpcy5ldmVudHMubmV4dChuZXcgWXhlKGgpKX1jb21wbGV0ZSgpe3RoaXMudHJhbnNpdGlvbnM/LmNvbXBsZXRlKCl9aGFuZGxlTmF2aWdhdGlvblJlcXVlc3QoYSl7Y29uc3QgZD0rK3RoaXMubmF2aWdhdGlvbklk'@;
put 'O3RoaXMudHJhbnNpdGlvbnM/Lm5leHQoey4uLnRoaXMudHJhbnNpdGlvbnMudmFsdWUsLi4uYSxpZDpkfSl9c2V0dXBOYXZpZ2F0aW9ucyhhLGQsaCl7cmV0dXJuIHRoaXMudHJhbnNpdGlvbnM9bmV3IGVpKHtpZDowLGN1cnJlbnRVcmxUcmVlOmQsY3VycmVudFJhd1VybDpkLGV4dHJhY3Rl'@;
put 'ZFVybDp0aGlzLnVybEhhbmRsaW5nU3RyYXRlZ3kuZXh0cmFjdChkKSx1cmxBZnRlclJlZGlyZWN0czp0aGlzLnVybEhhbmRsaW5nU3RyYXRlZ3kuZXh0cmFjdChkKSxyYXdVcmw6ZCxleHRyYXM6e30scmVzb2x2ZTpudWxsLHJlamVjdDpudWxsLHByb21pc2U6UHJvbWlzZS5yZXNvbHZlKCEw'@;
put 'KSxzb3VyY2U6S00scmVzdG9yZWRTdGF0ZTpudWxsLGN1cnJlbnRTbmFwc2hvdDpoLnNuYXBzaG90LHRhcmdldFNuYXBzaG90Om51bGwsY3VycmVudFJvdXRlclN0YXRlOmgsdGFyZ2V0Um91dGVyU3RhdGU6bnVsbCxndWFyZHM6e2NhbkFjdGl2YXRlQ2hlY2tzOltdLGNhbkRlYWN0aXZhdGVD'@;
put 'aGVja3M6W119LGd1YXJkc1Jlc3VsdDpudWxsfSksdGhpcy50cmFuc2l0aW9ucy5waXBlKCRsKGY9PjAhPT1mLmlkKSxMcihmPT4oey4uLmYsZXh0cmFjdGVkVXJsOnRoaXMudXJsSGFuZGxpbmdTdHJhdGVneS5leHRyYWN0KGYucmF3VXJsKX0pKSxWMShmPT57bGV0IHY9ITEsTT0hMTtyZXR1'@;
put 'cm4gZm8oZikucGlwZShWMShEPT57aWYodGhpcy5uYXZpZ2F0aW9uSWQ+Zi5pZClyZXR1cm4gdGhpcy5jYW5jZWxOYXZpZ2F0aW9uVHJhbnNpdGlvbihmLCIiLHBoLlN1cGVyc2VkZWRCeU5ld05hdmlnYXRpb24pLE0yO3RoaXMuY3VycmVudFRyYW5zaXRpb249Zix0aGlzLmN1cnJlbnROYXZp'@;
put 'Z2F0aW9uPXtpZDpELmlkLGluaXRpYWxVcmw6RC5yYXdVcmwsZXh0cmFjdGVkVXJsOkQuZXh0cmFjdGVkVXJsLHRyaWdnZXI6RC5zb3VyY2UsZXh0cmFzOkQuZXh0cmFzLHByZXZpb3VzTmF2aWdhdGlvbjp0aGlzLmxhc3RTdWNjZXNzZnVsTmF2aWdhdGlvbj97Li4udGhpcy5sYXN0U3VjY2Vz'@;
put 'c2Z1bE5hdmlnYXRpb24scHJldmlvdXNOYXZpZ2F0aW9uOm51bGx9Om51bGx9O2NvbnN0IFo9IWEubmF2aWdhdGVkfHx0aGlzLmlzVXBkYXRpbmdJbnRlcm5hbFN0YXRlKCl8fHRoaXMuaXNVcGRhdGVkQnJvd3NlclVybCgpO2lmKCFaJiYicmVsb2FkIiE9PShELmV4dHJhcy5vblNhbWVVcmxO'@;
put 'YXZpZ2F0aW9uPz9hLm9uU2FtZVVybE5hdmlnYXRpb24pKXtjb25zdCBjZT0iIjtyZXR1cm4gdGhpcy5ldmVudHMubmV4dChuZXcgc3koRC5pZCx0aGlzLnVybFNlcmlhbGl6ZXIuc2VyaWFsaXplKEQucmF3VXJsKSxjZSxqUi5JZ25vcmVkU2FtZVVybE5hdmlnYXRpb24pKSxELnJlc29sdmUo'@;
put 'bnVsbCksTTJ9aWYodGhpcy51cmxIYW5kbGluZ1N0cmF0ZWd5LnNob3VsZFByb2Nlc3NVcmwoRC5yYXdVcmwpKXJldHVybiBmbyhEKS5waXBlKFYxKGNlPT57Y29uc3QgYmU9dGhpcy50cmFuc2l0aW9ucz8uZ2V0VmFsdWUoKTtyZXR1cm4gdGhpcy5ldmVudHMubmV4dChuZXcgQlIoY2UuaWQs'@;
put 'dGhpcy51cmxTZXJpYWxpemVyLnNlcmlhbGl6ZShjZS5leHRyYWN0ZWRVcmwpLGNlLnNvdXJjZSxjZS5yZXN0b3JlZFN0YXRlKSksYmUhPT10aGlzLnRyYW5zaXRpb25zPy5nZXRWYWx1ZSgpP00yOlByb21pc2UucmVzb2x2ZShjZSl9KSxmdW5jdGlvbiBxRWUoYyxsLGEsZCxoLGYpe3JldHVy'@;
put 'biBOMCh2PT5mdW5jdGlvbiBVRWUoYyxsLGEsZCxoLGYsdj0iZW1wdHlPbmx5Iil7cmV0dXJuIG5ldyBXRWUoYyxsLGEsZCxoLHYsZikucmVjb2duaXplKCl9KGMsbCxhLGQsdi5leHRyYWN0ZWRVcmwsaCxmKS5waXBlKExyKCh7c3RhdGU6TSx0cmVlOkR9KT0+KHsuLi52LHRhcmdldFNuYXBz'@;
put 'aG90Ok0sdXJsQWZ0ZXJSZWRpcmVjdHM6RH0pKSkpfSh0aGlzLmVudmlyb25tZW50SW5qZWN0b3IsdGhpcy5jb25maWdMb2FkZXIsdGhpcy5yb290Q29tcG9uZW50VHlwZSxhLmNvbmZpZyx0aGlzLnVybFNlcmlhbGl6ZXIsdGhpcy5wYXJhbXNJbmhlcml0YW5jZVN0cmF0ZWd5KSxHdShjZT0+'@;
put 'e2YudGFyZ2V0U25hcHNob3Q9Y2UudGFyZ2V0U25hcHNob3QsZi51cmxBZnRlclJlZGlyZWN0cz1jZS51cmxBZnRlclJlZGlyZWN0cyx0aGlzLmN1cnJlbnROYXZpZ2F0aW9uPXsuLi50aGlzLmN1cnJlbnROYXZpZ2F0aW9uLGZpbmFsVXJsOmNlLnVybEFmdGVyUmVkaXJlY3RzfTtjb25zdCBi'@;
put 'ZT1uZXcgUGxlKGNlLmlkLHRoaXMudXJsU2VyaWFsaXplci5zZXJpYWxpemUoY2UuZXh0cmFjdGVkVXJsKSx0aGlzLnVybFNlcmlhbGl6ZXIuc2VyaWFsaXplKGNlLnVybEFmdGVyUmVkaXJlY3RzKSxjZS50YXJnZXRTbmFwc2hvdCk7dGhpcy5ldmVudHMubmV4dChiZSl9KSk7aWYoWiYmdGhp'@;
put 'cy51cmxIYW5kbGluZ1N0cmF0ZWd5LnNob3VsZFByb2Nlc3NVcmwoRC5jdXJyZW50UmF3VXJsKSl7Y29uc3R7aWQ6Y2UsZXh0cmFjdGVkVXJsOmJlLHNvdXJjZTpFZSxyZXN0b3JlZFN0YXRlOkJlLGV4dHJhczpxZX09RCxydD1uZXcgQlIoY2UsdGhpcy51cmxTZXJpYWxpemVyLnNlcmlhbGl6'@;
put 'ZShiZSksRWUsQmUpO3RoaXMuZXZlbnRzLm5leHQocnQpO2NvbnN0IHB0PVZsZSh0aGlzLnJvb3RDb21wb25lbnRUeXBlKS5zbmFwc2hvdDtyZXR1cm4gdGhpcy5jdXJyZW50VHJhbnNpdGlvbj1mPXsuLi5ELHRhcmdldFNuYXBzaG90OnB0LHVybEFmdGVyUmVkaXJlY3RzOmJlLGV4dHJhczp7'@;
put 'Li4ucWUsc2tpcExvY2F0aW9uQ2hhbmdlOiExLHJlcGxhY2VVcmw6ITF9fSx0aGlzLmN1cnJlbnROYXZpZ2F0aW9uLmZpbmFsVXJsPWJlLGZvKGYpfXtjb25zdCBjZT0iIjtyZXR1cm4gdGhpcy5ldmVudHMubmV4dChuZXcgc3koRC5pZCx0aGlzLnVybFNlcmlhbGl6ZXIuc2VyaWFsaXplKEQu'@;
put 'ZXh0cmFjdGVkVXJsKSxjZSxqUi5JZ25vcmVkQnlVcmxIYW5kbGluZ1N0cmF0ZWd5KSksRC5yZXNvbHZlKG51bGwpLE0yfX0pLEd1KEQ9Pntjb25zdCBaPW5ldyB6eGUoRC5pZCx0aGlzLnVybFNlcmlhbGl6ZXIuc2VyaWFsaXplKEQuZXh0cmFjdGVkVXJsKSx0aGlzLnVybFNlcmlhbGl6ZXIu'@;
put 'c2VyaWFsaXplKEQudXJsQWZ0ZXJSZWRpcmVjdHMpLEQudGFyZ2V0U25hcHNob3QpO3RoaXMuZXZlbnRzLm5leHQoWil9KSxMcihEPT4odGhpcy5jdXJyZW50VHJhbnNpdGlvbj1mPXsuLi5ELGd1YXJkczpkRWUoRC50YXJnZXRTbmFwc2hvdCxELmN1cnJlbnRTbmFwc2hvdCx0aGlzLnJvb3RD'@;
put 'b250ZXh0cyl9LGYpKSxmdW5jdGlvbiB3RWUoYyxsKXtyZXR1cm4gTjAoYT0+e2NvbnN0e3RhcmdldFNuYXBzaG90OmQsY3VycmVudFNuYXBzaG90OmgsZ3VhcmRzOntjYW5BY3RpdmF0ZUNoZWNrczpmLGNhbkRlYWN0aXZhdGVDaGVja3M6dn19PWE7cmV0dXJuIDA9PT12Lmxlbmd0aCYmMD09'@;
put 'PWYubGVuZ3RoP2ZvKHsuLi5hLGd1YXJkc1Jlc3VsdDohMH0pOmZ1bmN0aW9uIENFZShjLGwsYSxkKXtyZXR1cm4gWXUoYykucGlwZShOMChoPT5mdW5jdGlvbiBBRWUoYyxsLGEsZCxoKXtjb25zdCBmPWwmJmwucm91dGVDb25maWc/bC5yb3V0ZUNvbmZpZy5jYW5EZWFjdGl2YXRlOm51bGw7'@;
put 'cmV0dXJuIGYmJjAhPT1mLmxlbmd0aD9mbyhmLm1hcChNPT57Y29uc3QgRD1KTShsKT8/aCxaPWN5KE0sRCk7cmV0dXJuIG9tKGZ1bmN0aW9uIHlFZShjKXtyZXR1cm4gYyYmdHgoYy5jYW5EZWFjdGl2YXRlKX0oWik/Wi5jYW5EZWFjdGl2YXRlKGMsbCxhLGQpOnEwKEQsKCk9PlooYyxsLGEs'@;
put 'ZCkpKS5waXBlKGFtKCkpfSkpLnBpcGUodXkoKSk6Zm8oITApfShoLmNvbXBvbmVudCxoLnJvdXRlLGEsbCxkKSksYW0oaD0+ITAhPT1oLCEwKSl9KHYsZCxoLGMpLnBpcGUoTjAoTT0+TSYmZnVuY3Rpb24gZ0VlKGMpe3JldHVybiJib29sZWFuIj09dHlwZW9mIGN9KE0pP2Z1bmN0aW9uIFNF'@;
put 'ZShjLGwsYSxkKXtyZXR1cm4gWXUobCkucGlwZSh0eShoPT5VWihmdW5jdGlvbiB4RWUoYyxsKXtyZXR1cm4gbnVsbCE9PWMmJmwmJmwobmV3ICR4ZShjKSksZm8oITApfShoLnJvdXRlLnBhcmVudCxkKSxmdW5jdGlvbiBNRWUoYyxsKXtyZXR1cm4gbnVsbCE9PWMmJmwmJmwobmV3IHF4ZShj'@;
put 'KSksZm8oITApfShoLnJvdXRlLGQpLGZ1bmN0aW9uIFRFZShjLGwsYSl7Y29uc3QgZD1sW2wubGVuZ3RoLTFdLGY9bC5zbGljZSgwLGwubGVuZ3RoLTEpLnJldmVyc2UoKS5tYXAodj0+ZnVuY3Rpb24gaEVlKGMpe2NvbnN0IGw9Yy5yb3V0ZUNvbmZpZz9jLnJvdXRlQ29uZmlnLmNhbkFjdGl2'@;
put 'YXRlQ2hpbGQ6bnVsbDtyZXR1cm4gbCYmMCE9PWwubGVuZ3RoP3tub2RlOmMsZ3VhcmRzOmx9Om51bGx9KHYpKS5maWx0ZXIodj0+bnVsbCE9PXYpLm1hcCh2PT5wbGUoKCk9PmZvKHYuZ3VhcmRzLm1hcChEPT57Y29uc3QgWj1KTSh2Lm5vZGUpPz9hLHJlPWN5KEQsWik7cmV0dXJuIG9tKGZ1'@;
put 'bmN0aW9uIGJFZShjKXtyZXR1cm4gYyYmdHgoYy5jYW5BY3RpdmF0ZUNoaWxkKX0ocmUpP3JlLmNhbkFjdGl2YXRlQ2hpbGQoZCxjKTpxMChaLCgpPT5yZShkLGMpKSkucGlwZShhbSgpKX0pKS5waXBlKHV5KCkpKSk7cmV0dXJuIGZvKGYpLnBpcGUodXkoKSl9KGMsaC5wYXRoLGEpLGZ1bmN0'@;
put 'aW9uIEVFZShjLGwsYSl7Y29uc3QgZD1sLnJvdXRlQ29uZmlnP2wucm91dGVDb25maWcuY2FuQWN0aXZhdGU6bnVsbDtpZighZHx8MD09PWQubGVuZ3RoKXJldHVybiBmbyghMCk7Y29uc3QgaD1kLm1hcChmPT5wbGUoKCk9Pntjb25zdCB2PUpNKGwpPz9hLE09Y3koZix2KTtyZXR1cm4gb20o'@;
put 'ZnVuY3Rpb24gdkVlKGMpe3JldHVybiBjJiZ0eChjLmNhbkFjdGl2YXRlKX0oTSk/TS5jYW5BY3RpdmF0ZShsLGMpOnEwKHYsKCk9Pk0obCxjKSkpLnBpcGUoYW0oKSl9KSk7cmV0dXJuIGZvKGgpLnBpcGUodXkoKSl9KGMsaC5yb3V0ZSxhKSkpLGFtKGg9PiEwIT09aCwhMCkpfShkLGYsYyxs'@;
put 'KTpmbyhNKSksTHIoTT0+KHsuLi5hLGd1YXJkc1Jlc3VsdDpNfSkpKX0pfSh0aGlzLmVudmlyb25tZW50SW5qZWN0b3IsRD0+dGhpcy5ldmVudHMubmV4dChEKSksR3UoRD0+e2lmKGYuZ3VhcmRzUmVzdWx0PUQuZ3VhcmRzUmVzdWx0LGF5KEQuZ3VhcmRzUmVzdWx0KSl0aHJvdyBXbGUoMCxE'@;
put 'Lmd1YXJkc1Jlc3VsdCk7Y29uc3QgWj1uZXcgVXhlKEQuaWQsdGhpcy51cmxTZXJpYWxpemVyLnNlcmlhbGl6ZShELmV4dHJhY3RlZFVybCksdGhpcy51cmxTZXJpYWxpemVyLnNlcmlhbGl6ZShELnVybEFmdGVyUmVkaXJlY3RzKSxELnRhcmdldFNuYXBzaG90LCEhRC5ndWFyZHNSZXN1bHQp'@;
put 'O3RoaXMuZXZlbnRzLm5leHQoWil9KSwkbChEPT4hIUQuZ3VhcmRzUmVzdWx0fHwodGhpcy5jYW5jZWxOYXZpZ2F0aW9uVHJhbnNpdGlvbihELCIiLHBoLkd1YXJkUmVqZWN0ZWQpLCExKSkscFcoRD0+e2lmKEQuZ3VhcmRzLmNhbkFjdGl2YXRlQ2hlY2tzLmxlbmd0aClyZXR1cm4gZm8oRCku'@;
put 'cGlwZShHdShaPT57Y29uc3QgcmU9bmV3IFp4ZShaLmlkLHRoaXMudXJsU2VyaWFsaXplci5zZXJpYWxpemUoWi5leHRyYWN0ZWRVcmwpLHRoaXMudXJsU2VyaWFsaXplci5zZXJpYWxpemUoWi51cmxBZnRlclJlZGlyZWN0cyksWi50YXJnZXRTbmFwc2hvdCk7dGhpcy5ldmVudHMubmV4dChy'@;
put 'ZSl9KSxWMShaPT57bGV0IHJlPSExO3JldHVybiBmbyhaKS5waXBlKGZ1bmN0aW9uIFhFZShjLGwpe3JldHVybiBOMChhPT57Y29uc3R7dGFyZ2V0U25hcHNob3Q6ZCxndWFyZHM6e2NhbkFjdGl2YXRlQ2hlY2tzOmh9fT1hO2lmKCFoLmxlbmd0aClyZXR1cm4gZm8oYSk7Y29uc3QgZj1uZXcg'@;
put 'U2V0KGgubWFwKEQ9PkQucm91dGUpKSx2PW5ldyBTZXQ7Zm9yKGNvbnN0IEQgb2YgZilpZighdi5oYXMoRCkpZm9yKGNvbnN0IFogb2YgZWNlKEQpKXYuYWRkKFopO2xldCBNPTA7cmV0dXJuIFl1KHYpLnBpcGUodHkoRD0+Zi5oYXMoRCk/ZnVuY3Rpb24gSkVlKGMsbCxhLGQpe2NvbnN0IGg9'@;
put 'Yy5yb3V0ZUNvbmZpZyxmPWMuX3Jlc29sdmU7cmV0dXJuIHZvaWQgMCE9PWg/LnRpdGxlJiYhemxlKGgpJiYoZltaTV09aC50aXRsZSksZnVuY3Rpb24gUUVlKGMsbCxhLGQpe2NvbnN0IGg9R1ooYyk7aWYoMD09PWgubGVuZ3RoKXJldHVybiBmbyh7fSk7Y29uc3QgZj17fTtyZXR1cm4gWXUo'@;
put 'aCkucGlwZShOMCh2PT5mdW5jdGlvbiBlVGUoYyxsLGEsZCl7Y29uc3QgaD1KTShsKT8/ZCxmPWN5KGMsaCk7cmV0dXJuIG9tKGYucmVzb2x2ZT9mLnJlc29sdmUobCxhKTpxMChoLCgpPT5mKGwsYSkpKX0oY1t2XSxsLGEsZCkucGlwZShhbSgpLEd1KE09PntmW3ZdPU19KSkpLFlaKDEpLGZ1'@;
put 'bmN0aW9uIGZ4ZShjKXtyZXR1cm4gTHIoKCk9PmMpfShmKSxYOCh2PT5xbGUodik/TTI6ek0odikpKX0oZixjLGwsZCkucGlwZShMcih2PT4oYy5fcmVzb2x2ZWREYXRhPXYsYy5kYXRhPXJXKGMsYy5wYXJlbnQsYSkucmVzb2x2ZSxudWxsKSkpfShELGQsYyxsKTooRC5kYXRhPXJXKEQsRC5w'@;
put 'YXJlbnQsYykucmVzb2x2ZSxmbyh2b2lkIDApKSksR3UoKCk9Pk0rKyksWVooMSksTjAoRD0+TT09PXYuc2l6ZT9mbyhhKTpNMikpfSl9KHRoaXMucGFyYW1zSW5oZXJpdGFuY2VTdHJhdGVneSx0aGlzLmVudmlyb25tZW50SW5qZWN0b3IpLEd1KHtuZXh0OigpPT5yZT0hMCxjb21wbGV0ZToo'@;
put 'KT0+e3JlfHx0aGlzLmNhbmNlbE5hdmlnYXRpb25UcmFuc2l0aW9uKFosIiIscGguTm9EYXRhRnJvbVJlc29sdmVyKX19KSl9KSxHdShaPT57Y29uc3QgcmU9bmV3IFd4ZShaLmlkLHRoaXMudXJsU2VyaWFsaXplci5zZXJpYWxpemUoWi5leHRyYWN0ZWRVcmwpLHRoaXMudXJsU2VyaWFsaXpl'@;
put 'ci5zZXJpYWxpemUoWi51cmxBZnRlclJlZGlyZWN0cyksWi50YXJnZXRTbmFwc2hvdCk7dGhpcy5ldmVudHMubmV4dChyZSl9KSl9KSxwVyhEPT57Y29uc3QgWj1yZT0+e2NvbnN0IGNlPVtdO3JlLnJvdXRlQ29uZmlnPy5sb2FkQ29tcG9uZW50JiYhcmUucm91dGVDb25maWcuX2xvYWRlZENv'@;
put 'bXBvbmVudCYmY2UucHVzaCh0aGlzLmNvbmZpZ0xvYWRlci5sb2FkQ29tcG9uZW50KHJlLnJvdXRlQ29uZmlnKS5waXBlKEd1KGJlPT57cmUuY29tcG9uZW50PWJlfSksTHIoKCk9Pnt9KSkpO2Zvcihjb25zdCBiZSBvZiByZS5jaGlsZHJlbiljZS5wdXNoKC4uLlooYmUpKTtyZXR1cm4gY2V9'@;
put 'O3JldHVybiBxOChaKEQudGFyZ2V0U25hcHNob3Qucm9vdCkpLnBpcGUoTFIobnVsbCksWWYoMSkpfSkscFcoKCk9PnRoaXMuYWZ0ZXJQcmVhY3RpdmF0aW9uKCkpLFYxKCgpPT57Y29uc3R7Y3VycmVudFNuYXBzaG90OkQsdGFyZ2V0U25hcHNob3Q6Wn09ZixyZT10aGlzLmNyZWF0ZVZpZXdU'@;
put 'cmFuc2l0aW9uPy4odGhpcy5lbnZpcm9ubWVudEluamVjdG9yLEQucm9vdCxaLnJvb3QpO3JldHVybiByZT9ZdShyZSkucGlwZShMcigoKT0+ZikpOmZvKGYpfSksTHIoRD0+e2NvbnN0IFo9ZnVuY3Rpb24gZUVlKGMsbCxhKXtjb25zdCBkPVhNKGMsbC5fcm9vdCxhP2EuX3Jvb3Q6dm9pZCAw'@;
put 'KTtyZXR1cm4gbmV3IE5sZShkLGwpfShhLnJvdXRlUmV1c2VTdHJhdGVneSxELnRhcmdldFNuYXBzaG90LEQuY3VycmVudFJvdXRlclN0YXRlKTtyZXR1cm4gdGhpcy5jdXJyZW50VHJhbnNpdGlvbj1mPXsuLi5ELHRhcmdldFJvdXRlclN0YXRlOlp9LHRoaXMuY3VycmVudE5hdmlnYXRpb24u'@;
put 'dGFyZ2V0Um91dGVyU3RhdGU9WixmfSksR3UoKCk9Pnt0aGlzLmV2ZW50cy5uZXh0KG5ldyBRWil9KSwoKGMsbCxhLGQpPT5McihoPT4obmV3IHVFZShsLGgudGFyZ2V0Um91dGVyU3RhdGUsaC5jdXJyZW50Um91dGVyU3RhdGUsYSxkKS5hY3RpdmF0ZShjKSxoKSkpKHRoaXMucm9vdENvbnRl'@;
put 'eHRzLGEucm91dGVSZXVzZVN0cmF0ZWd5LEQ9PnRoaXMuZXZlbnRzLm5leHQoRCksdGhpcy5pbnB1dEJpbmRpbmdFbmFibGVkKSxZZigxKSxHdSh7bmV4dDpEPT57dj0hMCx0aGlzLmxhc3RTdWNjZXNzZnVsTmF2aWdhdGlvbj10aGlzLmN1cnJlbnROYXZpZ2F0aW9uLHRoaXMuZXZlbnRzLm5l'@;
put 'eHQobmV3IHBwKEQuaWQsdGhpcy51cmxTZXJpYWxpemVyLnNlcmlhbGl6ZShELmV4dHJhY3RlZFVybCksdGhpcy51cmxTZXJpYWxpemVyLnNlcmlhbGl6ZShELnVybEFmdGVyUmVkaXJlY3RzKSkpLHRoaXMudGl0bGVTdHJhdGVneT8udXBkYXRlVGl0bGUoRC50YXJnZXRSb3V0ZXJTdGF0ZS5z'@;
put 'bmFwc2hvdCksRC5yZXNvbHZlKCEwKX0sY29tcGxldGU6KCk9Pnt2PSEwfX0pLFYwKHRoaXMudHJhbnNpdGlvbkFib3J0U3ViamVjdC5waXBlKEd1KEQ9Pnt0aHJvdyBEfSkpKSxVTSgoKT0+eyF2JiYhTSYmdGhpcy5jYW5jZWxOYXZpZ2F0aW9uVHJhbnNpdGlvbihmLCIiLHBoLlN1cGVyc2Vk'@;
put 'ZWRCeU5ld05hdmlnYXRpb24pLHRoaXMuY3VycmVudFRyYW5zaXRpb24/LmlkPT09Zi5pZCYmKHRoaXMuY3VycmVudE5hdmlnYXRpb249bnVsbCx0aGlzLmN1cnJlbnRUcmFuc2l0aW9uPW51bGwpfSksWDgoRD0+e2lmKE09ITAsR2xlKEQpKXRoaXMuZXZlbnRzLm5leHQobmV3IG95KGYuaWQs'@;
put 'dGhpcy51cmxTZXJpYWxpemVyLnNlcmlhbGl6ZShmLmV4dHJhY3RlZFVybCksRC5tZXNzYWdlLEQuY2FuY2VsbGF0aW9uQ29kZSkpLGZ1bmN0aW9uIHJFZShjKXtyZXR1cm4gR2xlKGMpJiZheShjLnVybCl9KEQpP3RoaXMuZXZlbnRzLm5leHQobmV3IGVXKEQudXJsKSk6Zi5yZXNvbHZlKCEx'@;
put 'KTtlbHNle3RoaXMuZXZlbnRzLm5leHQobmV3IHpSKGYuaWQsdGhpcy51cmxTZXJpYWxpemVyLnNlcmlhbGl6ZShmLmV4dHJhY3RlZFVybCksRCxmLnRhcmdldFNuYXBzaG90Pz92b2lkIDApKTt0cnl7Zi5yZXNvbHZlKGEuZXJyb3JIYW5kbGVyKEQpKX1jYXRjaChaKXt0aGlzLm9wdGlvbnMu'@;
put 'cmVzb2x2ZU5hdmlnYXRpb25Qcm9taXNlT25FcnJvcj9mLnJlc29sdmUoITEpOmYucmVqZWN0KFopfX1yZXR1cm4gTTJ9KSl9KSl9Y2FuY2VsTmF2aWdhdGlvblRyYW5zaXRpb24oYSxkLGgpe2NvbnN0IGY9bmV3IG95KGEuaWQsdGhpcy51cmxTZXJpYWxpemVyLnNlcmlhbGl6ZShhLmV4dHJh'@;
put 'Y3RlZFVybCksZCxoKTt0aGlzLmV2ZW50cy5uZXh0KGYpLGEucmVzb2x2ZSghMSl9aXNVcGRhdGluZ0ludGVybmFsU3RhdGUoKXtyZXR1cm4gdGhpcy5jdXJyZW50VHJhbnNpdGlvbj8uZXh0cmFjdGVkVXJsLnRvU3RyaW5nKCkhPT10aGlzLmN1cnJlbnRUcmFuc2l0aW9uPy5jdXJyZW50VXJs'@;
put 'VHJlZS50b1N0cmluZygpfWlzVXBkYXRlZEJyb3dzZXJVcmwoKXtyZXR1cm4gdGhpcy51cmxIYW5kbGluZ1N0cmF0ZWd5LmV4dHJhY3QodGhpcy51cmxTZXJpYWxpemVyLnBhcnNlKHRoaXMubG9jYXRpb24ucGF0aCghMCkpKS50b1N0cmluZygpIT09dGhpcy5jdXJyZW50VHJhbnNpdGlvbj8u'@;
put 'ZXh0cmFjdGVkVXJsLnRvU3RyaW5nKCkmJiF0aGlzLmN1cnJlbnRUcmFuc2l0aW9uPy5leHRyYXMuc2tpcExvY2F0aW9uQ2hhbmdlfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZh'@;
put 'Y3Rvcnk6Yy5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KX19cmV0dXJuIGN9KSgpO2Z1bmN0aW9uIHNUZShjKXtyZXR1cm4gYyE9PUtNfWxldCBsVGU9KCgpPT57Y2xhc3MgY3tzdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3Ro'@;
put 'aXMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OigpPT5maSh1VGUpLHByb3ZpZGVkSW46InJvb3QifSl9fXJldHVybiBjfSkoKTtjbGFzcyBjVGV7c2hvdWxkRGV0YWNoKGwpe3JldHVybiExfXN0b3JlKGwsYSl7fXNob3VsZEF0dGFjaChsKXtyZXR1cm4hMX1yZXRyaWV2ZShsKXty'@;
put 'ZXR1cm4gbnVsbH1zaG91bGRSZXVzZVJvdXRlKGwsYSl7cmV0dXJuIGwucm91dGVDb25maWc9PT1hLnJvdXRlQ29uZmlnfX1sZXQgdVRlPSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyBjVGV7c3RhdGlje3RoaXMuXHUwMjc1ZmFjPSgoKT0+e2xldCBhO3JldHVybiBmdW5jdGlvbihoKXtyZXR1cm4o'@;
put 'YXx8KGE9WXMoYykpKShofHxjKX19KSgpfXN0YXRpY3t0aGlzLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pfX1yZXR1cm4gY30pKCksYWNlPSgoKT0+e2NsYXNzIGN7c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQp'@;
put 'e3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTooKT0+ZmkoZFRlKSxwcm92aWRlZEluOiJyb290In0pfX1yZXR1cm4gY30pKCksZFRlPSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyBhY2V7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1'@;
put 'bWVudHMpLHRoaXMubG9jYXRpb249ZmkoZmgpLHRoaXMudXJsU2VyaWFsaXplcj1maShpeSksdGhpcy5vcHRpb25zPWZpKGh5LHtvcHRpb25hbDohMH0pfHx7fSx0aGlzLmNhbmNlbGVkTmF2aWdhdGlvblJlc29sdXRpb249dGhpcy5vcHRpb25zLmNhbmNlbGVkTmF2aWdhdGlvblJlc29sdXRp'@;
put 'b258fCJyZXBsYWNlIix0aGlzLnVybEhhbmRsaW5nU3RyYXRlZ3k9ZmkobVcpLHRoaXMudXJsVXBkYXRlU3RyYXRlZ3k9dGhpcy5vcHRpb25zLnVybFVwZGF0ZVN0cmF0ZWd5fHwiZGVmZXJyZWQiLHRoaXMuY3VycmVudFVybFRyZWU9bmV3IHJ5LHRoaXMucmF3VXJsVHJlZT10aGlzLmN1cnJl'@;
put 'bnRVcmxUcmVlLHRoaXMuY3VycmVudFBhZ2VJZD0wLHRoaXMubGFzdFN1Y2Nlc3NmdWxJZD0tMSx0aGlzLnJvdXRlclN0YXRlPVZsZShudWxsKSx0aGlzLnN0YXRlTWVtZW50bz10aGlzLmNyZWF0ZVN0YXRlTWVtZW50bygpfWdldEN1cnJlbnRVcmxUcmVlKCl7cmV0dXJuIHRoaXMuY3VycmVu'@;
put 'dFVybFRyZWV9Z2V0UmF3VXJsVHJlZSgpe3JldHVybiB0aGlzLnJhd1VybFRyZWV9cmVzdG9yZWRTdGF0ZSgpe3JldHVybiB0aGlzLmxvY2F0aW9uLmdldFN0YXRlKCl9Z2V0IGJyb3dzZXJQYWdlSWQoKXtyZXR1cm4iY29tcHV0ZWQiIT09dGhpcy5jYW5jZWxlZE5hdmlnYXRpb25SZXNvbHV0'@;
put 'aW9uP3RoaXMuY3VycmVudFBhZ2VJZDp0aGlzLnJlc3RvcmVkU3RhdGUoKT8uXHUwMjc1cm91dGVyUGFnZUlkPz90aGlzLmN1cnJlbnRQYWdlSWR9Z2V0Um91dGVyU3RhdGUoKXtyZXR1cm4gdGhpcy5yb3V0ZXJTdGF0ZX1jcmVhdGVTdGF0ZU1lbWVudG8oKXtyZXR1cm57cmF3VXJsVHJlZTp0'@;
put 'aGlzLnJhd1VybFRyZWUsY3VycmVudFVybFRyZWU6dGhpcy5jdXJyZW50VXJsVHJlZSxyb3V0ZXJTdGF0ZTp0aGlzLnJvdXRlclN0YXRlfX1yZWdpc3Rlck5vblJvdXRlckN1cnJlbnRFbnRyeUNoYW5nZUxpc3RlbmVyKGEpe3JldHVybiB0aGlzLmxvY2F0aW9uLnN1YnNjcmliZShkPT57InBv'@;
put 'cHN0YXRlIj09PWQudHlwZSYmYShkLnVybCxkLnN0YXRlKX0pfWhhbmRsZVJvdXRlckV2ZW50KGEsZCl7aWYoYSBpbnN0YW5jZW9mIEJSKXRoaXMuc3RhdGVNZW1lbnRvPXRoaXMuY3JlYXRlU3RhdGVNZW1lbnRvKCk7ZWxzZSBpZihhIGluc3RhbmNlb2Ygc3kpdGhpcy5yYXdVcmxUcmVlPWQu'@;
put 'aW5pdGlhbFVybDtlbHNlIGlmKGEgaW5zdGFuY2VvZiBQbGUpe2lmKCJlYWdlciI9PT10aGlzLnVybFVwZGF0ZVN0cmF0ZWd5JiYhZC5leHRyYXMuc2tpcExvY2F0aW9uQ2hhbmdlKXtjb25zdCBoPXRoaXMudXJsSGFuZGxpbmdTdHJhdGVneS5tZXJnZShkLmZpbmFsVXJsLGQuaW5pdGlhbFVy'@;
put 'bCk7dGhpcy5zZXRCcm93c2VyVXJsKGgsZCl9fWVsc2UgYSBpbnN0YW5jZW9mIFFaPyh0aGlzLmN1cnJlbnRVcmxUcmVlPWQuZmluYWxVcmwsdGhpcy5yYXdVcmxUcmVlPXRoaXMudXJsSGFuZGxpbmdTdHJhdGVneS5tZXJnZShkLmZpbmFsVXJsLGQuaW5pdGlhbFVybCksdGhpcy5yb3V0ZXJT'@;
put 'dGF0ZT1kLnRhcmdldFJvdXRlclN0YXRlLCJkZWZlcnJlZCI9PT10aGlzLnVybFVwZGF0ZVN0cmF0ZWd5JiYoZC5leHRyYXMuc2tpcExvY2F0aW9uQ2hhbmdlfHx0aGlzLnNldEJyb3dzZXJVcmwodGhpcy5yYXdVcmxUcmVlLGQpKSk6YSBpbnN0YW5jZW9mIG95JiYoYS5jb2RlPT09cGguR3Vh'@;
put 'cmRSZWplY3RlZHx8YS5jb2RlPT09cGguTm9EYXRhRnJvbVJlc29sdmVyKT90aGlzLnJlc3RvcmVIaXN0b3J5KGQpOmEgaW5zdGFuY2VvZiB6Uj90aGlzLnJlc3RvcmVIaXN0b3J5KGQsITApOmEgaW5zdGFuY2VvZiBwcCYmKHRoaXMubGFzdFN1Y2Nlc3NmdWxJZD1hLmlkLHRoaXMuY3VycmVu'@;
put 'dFBhZ2VJZD10aGlzLmJyb3dzZXJQYWdlSWQpfXNldEJyb3dzZXJVcmwoYSxkKXtjb25zdCBoPXRoaXMudXJsU2VyaWFsaXplci5zZXJpYWxpemUoYSk7aWYodGhpcy5sb2NhdGlvbi5pc0N1cnJlbnRQYXRoRXF1YWxUbyhoKXx8ZC5leHRyYXMucmVwbGFjZVVybCl7Y29uc3Qgdj17Li4uZC5l'@;
put 'eHRyYXMuc3RhdGUsLi4udGhpcy5nZW5lcmF0ZU5nUm91dGVyU3RhdGUoZC5pZCx0aGlzLmJyb3dzZXJQYWdlSWQpfTt0aGlzLmxvY2F0aW9uLnJlcGxhY2VTdGF0ZShoLCIiLHYpfWVsc2V7Y29uc3QgZj17Li4uZC5leHRyYXMuc3RhdGUsLi4udGhpcy5nZW5lcmF0ZU5nUm91dGVyU3RhdGUo'@;
put 'ZC5pZCx0aGlzLmJyb3dzZXJQYWdlSWQrMSl9O3RoaXMubG9jYXRpb24uZ28oaCwiIixmKX19cmVzdG9yZUhpc3RvcnkoYSxkPSExKXtpZigiY29tcHV0ZWQiPT09dGhpcy5jYW5jZWxlZE5hdmlnYXRpb25SZXNvbHV0aW9uKXtjb25zdCBmPXRoaXMuY3VycmVudFBhZ2VJZC10aGlzLmJyb3dz'@;
put 'ZXJQYWdlSWQ7MCE9PWY/dGhpcy5sb2NhdGlvbi5oaXN0b3J5R28oZik6dGhpcy5jdXJyZW50VXJsVHJlZT09PWEuZmluYWxVcmwmJjA9PT1mJiYodGhpcy5yZXNldFN0YXRlKGEpLHRoaXMucmVzZXRVcmxUb0N1cnJlbnRVcmxUcmVlKCkpfWVsc2UicmVwbGFjZSI9PT10aGlzLmNhbmNlbGVk'@;
put 'TmF2aWdhdGlvblJlc29sdXRpb24mJihkJiZ0aGlzLnJlc2V0U3RhdGUoYSksdGhpcy5yZXNldFVybFRvQ3VycmVudFVybFRyZWUoKSl9cmVzZXRTdGF0ZShhKXt0aGlzLnJvdXRlclN0YXRlPXRoaXMuc3RhdGVNZW1lbnRvLnJvdXRlclN0YXRlLHRoaXMuY3VycmVudFVybFRyZWU9dGhpcy5z'@;
put 'dGF0ZU1lbWVudG8uY3VycmVudFVybFRyZWUsdGhpcy5yYXdVcmxUcmVlPXRoaXMudXJsSGFuZGxpbmdTdHJhdGVneS5tZXJnZSh0aGlzLmN1cnJlbnRVcmxUcmVlLGEuZmluYWxVcmw/P3RoaXMucmF3VXJsVHJlZSl9cmVzZXRVcmxUb0N1cnJlbnRVcmxUcmVlKCl7dGhpcy5sb2NhdGlvbi5y'@;
put 'ZXBsYWNlU3RhdGUodGhpcy51cmxTZXJpYWxpemVyLnNlcmlhbGl6ZSh0aGlzLnJhd1VybFRyZWUpLCIiLHRoaXMuZ2VuZXJhdGVOZ1JvdXRlclN0YXRlKHRoaXMubGFzdFN1Y2Nlc3NmdWxJZCx0aGlzLmN1cnJlbnRQYWdlSWQpKX1nZW5lcmF0ZU5nUm91dGVyU3RhdGUoYSxkKXtyZXR1cm4i'@;
put 'Y29tcHV0ZWQiPT09dGhpcy5jYW5jZWxlZE5hdmlnYXRpb25SZXNvbHV0aW9uP3tuYXZpZ2F0aW9uSWQ6YSxcdTAyNzVyb3V0ZXJQYWdlSWQ6ZH06e25hdmlnYXRpb25JZDphfX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9KCgpPT57bGV0IGE7cmV0dXJuIGZ1bmN0aW9uKGgpe3JldHVybihhfHwo'@;
put 'YT1ZcyhjKSkpKGh8fGMpfX0pKCl9c3RhdGlje3RoaXMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSl9fXJldHVybiBjfSkoKTt2YXIgbng9ZnVuY3Rpb24oYyl7cmV0dXJuIGNbYy5DT01QTEVURT0wXT0iQ09NUExFVEUiLGNb'@;
put 'Yy5GQUlMRUQ9MV09IkZBSUxFRCIsY1tjLlJFRElSRUNUSU5HPTJdPSJSRURJUkVDVElORyIsY30obnh8fHt9KTtmdW5jdGlvbiBvY2UoYyxsKXtjLmV2ZW50cy5waXBlKCRsKGE9PmEgaW5zdGFuY2VvZiBwcHx8YSBpbnN0YW5jZW9mIG95fHxhIGluc3RhbmNlb2YgelJ8fGEgaW5zdGFuY2Vv'@;
put 'ZiBzeSksTHIoYT0+YSBpbnN0YW5jZW9mIHBwfHxhIGluc3RhbmNlb2Ygc3k/bnguQ09NUExFVEU6YSBpbnN0YW5jZW9mIG95JiYoYS5jb2RlPT09cGguUmVkaXJlY3R8fGEuY29kZT09PXBoLlN1cGVyc2VkZWRCeU5ld05hdmlnYXRpb24pP254LlJFRElSRUNUSU5HOm54LkZBSUxFRCksJGwo'@;
put 'YT0+YSE9PW54LlJFRElSRUNUSU5HKSxZZigxKSkuc3Vic2NyaWJlKCgpPT57bCgpfSl9ZnVuY3Rpb24gaFRlKGMpe3Rocm93IGN9Y29uc3QgZlRlPXtwYXRoczoiZXhhY3QiLGZyYWdtZW50OiJpZ25vcmVkIixtYXRyaXhQYXJhbXM6Imlnbm9yZWQiLHF1ZXJ5UGFyYW1zOiJleGFjdCJ9LHBU'@;
put 'ZT17cGF0aHM6InN1YnNldCIsZnJhZ21lbnQ6Imlnbm9yZWQiLG1hdHJpeFBhcmFtczoiaWdub3JlZCIscXVlcnlQYXJhbXM6InN1YnNldCJ9O2xldCBMcz0oKCk9PntjbGFzcyBje2dldCBjdXJyZW50VXJsVHJlZSgpe3JldHVybiB0aGlzLnN0YXRlTWFuYWdlci5nZXRDdXJyZW50VXJsVHJl'@;
put 'ZSgpfWdldCByYXdVcmxUcmVlKCl7cmV0dXJuIHRoaXMuc3RhdGVNYW5hZ2VyLmdldFJhd1VybFRyZWUoKX1nZXQgZXZlbnRzKCl7cmV0dXJuIHRoaXMuX2V2ZW50c31nZXQgcm91dGVyU3RhdGUoKXtyZXR1cm4gdGhpcy5zdGF0ZU1hbmFnZXIuZ2V0Um91dGVyU3RhdGUoKX1jb25zdHJ1Y3Rv'@;
put 'cigpe3RoaXMuZGlzcG9zZWQ9ITEsdGhpcy5pc05nWm9uZUVuYWJsZWQ9ITEsdGhpcy5jb25zb2xlPWZpKFZpZSksdGhpcy5zdGF0ZU1hbmFnZXI9ZmkoYWNlKSx0aGlzLm9wdGlvbnM9ZmkoaHkse29wdGlvbmFsOiEwfSl8fHt9LHRoaXMucGVuZGluZ1Rhc2tzPWZpKFBmKSx0aGlzLnVybFVw'@;
put 'ZGF0ZVN0cmF0ZWd5PXRoaXMub3B0aW9ucy51cmxVcGRhdGVTdHJhdGVneXx8ImRlZmVycmVkIix0aGlzLm5hdmlnYXRpb25UcmFuc2l0aW9ucz1maShHUiksdGhpcy51cmxTZXJpYWxpemVyPWZpKGl5KSx0aGlzLmxvY2F0aW9uPWZpKGZoKSx0aGlzLnVybEhhbmRsaW5nU3RyYXRlZ3k9Zmko'@;
put 'bVcpLHRoaXMuX2V2ZW50cz1uZXcgV24sdGhpcy5lcnJvckhhbmRsZXI9dGhpcy5vcHRpb25zLmVycm9ySGFuZGxlcnx8aFRlLHRoaXMubmF2aWdhdGVkPSExLHRoaXMucm91dGVSZXVzZVN0cmF0ZWd5PWZpKGxUZSksdGhpcy5vblNhbWVVcmxOYXZpZ2F0aW9uPXRoaXMub3B0aW9ucy5vblNh'@;
put 'bWVVcmxOYXZpZ2F0aW9ufHwiaWdub3JlIix0aGlzLmNvbmZpZz1maShmeSx7b3B0aW9uYWw6ITB9KT8uZmxhdCgpPz9bXSx0aGlzLmNvbXBvbmVudElucHV0QmluZGluZ0VuYWJsZWQ9ISFmaShVUix7b3B0aW9uYWw6ITB9KSx0aGlzLmV2ZW50c1N1YnNjcmlwdGlvbj1uZXcgcXQsdGhpcy5p'@;
put 'c05nWm9uZUVuYWJsZWQ9ZmkoV2EpaW5zdGFuY2VvZiBXYSYmV2EuaXNJbkFuZ3VsYXJab25lKCksdGhpcy5yZXNldENvbmZpZyh0aGlzLmNvbmZpZyksdGhpcy5uYXZpZ2F0aW9uVHJhbnNpdGlvbnMuc2V0dXBOYXZpZ2F0aW9ucyh0aGlzLHRoaXMuY3VycmVudFVybFRyZWUsdGhpcy5yb3V0'@;
put 'ZXJTdGF0ZSkuc3Vic2NyaWJlKHtlcnJvcjphPT57dGhpcy5jb25zb2xlLndhcm4oYSl9fSksdGhpcy5zdWJzY3JpYmVUb05hdmlnYXRpb25FdmVudHMoKX1zdWJzY3JpYmVUb05hdmlnYXRpb25FdmVudHMoKXtjb25zdCBhPXRoaXMubmF2aWdhdGlvblRyYW5zaXRpb25zLmV2ZW50cy5zdWJz'@;
put 'Y3JpYmUoZD0+e3RyeXtjb25zdCBoPXRoaXMubmF2aWdhdGlvblRyYW5zaXRpb25zLmN1cnJlbnRUcmFuc2l0aW9uLGY9dGhpcy5uYXZpZ2F0aW9uVHJhbnNpdGlvbnMuY3VycmVudE5hdmlnYXRpb247aWYobnVsbCE9PWgmJm51bGwhPT1mKWlmKHRoaXMuc3RhdGVNYW5hZ2VyLmhhbmRsZVJv'@;
put 'dXRlckV2ZW50KGQsZiksZCBpbnN0YW5jZW9mIG95JiZkLmNvZGUhPT1waC5SZWRpcmVjdCYmZC5jb2RlIT09cGguU3VwZXJzZWRlZEJ5TmV3TmF2aWdhdGlvbil0aGlzLm5hdmlnYXRlZD0hMDtlbHNlIGlmKGQgaW5zdGFuY2VvZiBwcCl0aGlzLm5hdmlnYXRlZD0hMDtlbHNlIGlmKGQgaW5z'@;
put 'dGFuY2VvZiBlVyl7Y29uc3Qgdj10aGlzLnVybEhhbmRsaW5nU3RyYXRlZ3kubWVyZ2UoZC51cmwsaC5jdXJyZW50UmF3VXJsKSxNPXtpbmZvOmguZXh0cmFzLmluZm8sc2tpcExvY2F0aW9uQ2hhbmdlOmguZXh0cmFzLnNraXBMb2NhdGlvbkNoYW5nZSxyZXBsYWNlVXJsOiJlYWdlciI9PT10'@;
put 'aGlzLnVybFVwZGF0ZVN0cmF0ZWd5fHxzVGUoaC5zb3VyY2UpfTt0aGlzLnNjaGVkdWxlTmF2aWdhdGlvbih2LEtNLG51bGwsTSx7cmVzb2x2ZTpoLnJlc29sdmUscmVqZWN0OmgucmVqZWN0LHByb21pc2U6aC5wcm9taXNlfSl9KGZ1bmN0aW9uIG1UZShjKXtyZXR1cm4hKGMgaW5zdGFuY2Vv'@;
put 'ZiBRWnx8YyBpbnN0YW5jZW9mIGVXKX0pKGQpJiZ0aGlzLl9ldmVudHMubmV4dChkKX1jYXRjaChoKXt0aGlzLm5hdmlnYXRpb25UcmFuc2l0aW9ucy50cmFuc2l0aW9uQWJvcnRTdWJqZWN0Lm5leHQoaCl9fSk7dGhpcy5ldmVudHNTdWJzY3JpcHRpb24uYWRkKGEpfXJlc2V0Um9vdENvbXBv'@;
put 'bmVudFR5cGUoYSl7dGhpcy5yb3V0ZXJTdGF0ZS5yb290LmNvbXBvbmVudD1hLHRoaXMubmF2aWdhdGlvblRyYW5zaXRpb25zLnJvb3RDb21wb25lbnRUeXBlPWF9aW5pdGlhbE5hdmlnYXRpb24oKXt0aGlzLnNldFVwTG9jYXRpb25DaGFuZ2VMaXN0ZW5lcigpLHRoaXMubmF2aWdhdGlvblRy'@;
put 'YW5zaXRpb25zLmhhc1JlcXVlc3RlZE5hdmlnYXRpb258fHRoaXMubmF2aWdhdGVUb1N5bmNXaXRoQnJvd3Nlcih0aGlzLmxvY2F0aW9uLnBhdGgoITApLEtNLHRoaXMuc3RhdGVNYW5hZ2VyLnJlc3RvcmVkU3RhdGUoKSl9c2V0VXBMb2NhdGlvbkNoYW5nZUxpc3RlbmVyKCl7dGhpcy5ub25S'@;
put 'b3V0ZXJDdXJyZW50RW50cnlDaGFuZ2VTdWJzY3JpcHRpb24/Pz10aGlzLnN0YXRlTWFuYWdlci5yZWdpc3Rlck5vblJvdXRlckN1cnJlbnRFbnRyeUNoYW5nZUxpc3RlbmVyKChhLGQpPT57c2V0VGltZW91dCgoKT0+e3RoaXMubmF2aWdhdGVUb1N5bmNXaXRoQnJvd3NlcihhLCJwb3BzdGF0'@;
put 'ZSIsZCl9LDApfSl9bmF2aWdhdGVUb1N5bmNXaXRoQnJvd3NlcihhLGQsaCl7Y29uc3QgZj17cmVwbGFjZVVybDohMH0sdj1oPy5uYXZpZ2F0aW9uSWQ/aDpudWxsO2lmKGgpe2NvbnN0IEQ9ey4uLmh9O2RlbGV0ZSBELm5hdmlnYXRpb25JZCxkZWxldGUgRC5cdTAyNzVyb3V0ZXJQYWdlSWQs'@;
put 'MCE9PU9iamVjdC5rZXlzKEQpLmxlbmd0aCYmKGYuc3RhdGU9RCl9Y29uc3QgTT10aGlzLnBhcnNlVXJsKGEpO3RoaXMuc2NoZWR1bGVOYXZpZ2F0aW9uKE0sZCx2LGYpfWdldCB1cmwoKXtyZXR1cm4gdGhpcy5zZXJpYWxpemVVcmwodGhpcy5jdXJyZW50VXJsVHJlZSl9Z2V0Q3VycmVudE5h'@;
put 'dmlnYXRpb24oKXtyZXR1cm4gdGhpcy5uYXZpZ2F0aW9uVHJhbnNpdGlvbnMuY3VycmVudE5hdmlnYXRpb259Z2V0IGxhc3RTdWNjZXNzZnVsTmF2aWdhdGlvbigpe3JldHVybiB0aGlzLm5hdmlnYXRpb25UcmFuc2l0aW9ucy5sYXN0U3VjY2Vzc2Z1bE5hdmlnYXRpb259cmVzZXRDb25maWco'@;
put 'YSl7dGhpcy5jb25maWc9YS5tYXAoY1cpLHRoaXMubmF2aWdhdGVkPSExfW5nT25EZXN0cm95KCl7dGhpcy5kaXNwb3NlKCl9ZGlzcG9zZSgpe3RoaXMubmF2aWdhdGlvblRyYW5zaXRpb25zLmNvbXBsZXRlKCksdGhpcy5ub25Sb3V0ZXJDdXJyZW50RW50cnlDaGFuZ2VTdWJzY3JpcHRpb24m'@;
put 'Jih0aGlzLm5vblJvdXRlckN1cnJlbnRFbnRyeUNoYW5nZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMubm9uUm91dGVyQ3VycmVudEVudHJ5Q2hhbmdlU3Vic2NyaXB0aW9uPXZvaWQgMCksdGhpcy5kaXNwb3NlZD0hMCx0aGlzLmV2ZW50c1N1YnNjcmlwdGlvbi51bnN1YnNjcmli'@;
put 'ZSgpfWNyZWF0ZVVybFRyZWUoYSxkPXt9KXtjb25zdHtyZWxhdGl2ZVRvOmgscXVlcnlQYXJhbXM6ZixmcmFnbWVudDp2LHF1ZXJ5UGFyYW1zSGFuZGxpbmc6TSxwcmVzZXJ2ZUZyYWdtZW50OkR9PWQsWj1EP3RoaXMuY3VycmVudFVybFRyZWUuZnJhZ21lbnQ6djtsZXQgY2UscmU9bnVsbDtz'@;
put 'd2l0Y2goTSl7Y2FzZSJtZXJnZSI6cmU9ey4uLnRoaXMuY3VycmVudFVybFRyZWUucXVlcnlQYXJhbXMsLi4uZn07YnJlYWs7Y2FzZSJwcmVzZXJ2ZSI6cmU9dGhpcy5jdXJyZW50VXJsVHJlZS5xdWVyeVBhcmFtczticmVhaztkZWZhdWx0OnJlPWZ8fG51bGx9bnVsbCE9PXJlJiYocmU9dGhp'@;
put 'cy5yZW1vdmVFbXB0eVByb3BzKHJlKSk7dHJ5e2NlPUFsZShoP2guc25hcHNob3Q6dGhpcy5yb3V0ZXJTdGF0ZS5zbmFwc2hvdC5yb290KX1jYXRjaHsoInN0cmluZyIhPXR5cGVvZiBhWzBdfHwhYVswXS5zdGFydHNXaXRoKCIvIikpJiYoYT1bXSksY2U9dGhpcy5jdXJyZW50VXJsVHJlZS5y'@;
put 'b290fXJldHVybiBrbGUoY2UsYSxyZSxaPz9udWxsKX1uYXZpZ2F0ZUJ5VXJsKGEsZD17c2tpcExvY2F0aW9uQ2hhbmdlOiExfSl7Y29uc3QgaD1heShhKT9hOnRoaXMucGFyc2VVcmwoYSksZj10aGlzLnVybEhhbmRsaW5nU3RyYXRlZ3kubWVyZ2UoaCx0aGlzLnJhd1VybFRyZWUpO3JldHVy'@;
put 'biB0aGlzLnNjaGVkdWxlTmF2aWdhdGlvbihmLEtNLG51bGwsZCl9bmF2aWdhdGUoYSxkPXtza2lwTG9jYXRpb25DaGFuZ2U6ITF9KXtyZXR1cm4gZnVuY3Rpb24gZ1RlKGMpe2ZvcihsZXQgbD0wO2w8Yy5sZW5ndGg7bCsrKWlmKG51bGw9PWNbbF0pdGhyb3cgbmV3IFFuKDQwMDgsITEpfShh'@;
put 'KSx0aGlzLm5hdmlnYXRlQnlVcmwodGhpcy5jcmVhdGVVcmxUcmVlKGEsZCksZCl9c2VyaWFsaXplVXJsKGEpe3JldHVybiB0aGlzLnVybFNlcmlhbGl6ZXIuc2VyaWFsaXplKGEpfXBhcnNlVXJsKGEpe3RyeXtyZXR1cm4gdGhpcy51cmxTZXJpYWxpemVyLnBhcnNlKGEpfWNhdGNoe3JldHVy'@;
put 'biB0aGlzLnVybFNlcmlhbGl6ZXIucGFyc2UoIi8iKX19aXNBY3RpdmUoYSxkKXtsZXQgaDtpZihoPSEwPT09ZD97Li4uZlRlfTohMT09PWQ/ey4uLnBUZX06ZCxheShhKSlyZXR1cm4geWxlKHRoaXMuY3VycmVudFVybFRyZWUsYSxoKTtjb25zdCBmPXRoaXMucGFyc2VVcmwoYSk7cmV0dXJu'@;
put 'IHlsZSh0aGlzLmN1cnJlbnRVcmxUcmVlLGYsaCl9cmVtb3ZlRW1wdHlQcm9wcyhhKXtyZXR1cm4gT2JqZWN0LmVudHJpZXMoYSkucmVkdWNlKChkLFtoLGZdKT0+KG51bGwhPWYmJihkW2hdPWYpLGQpLHt9KX1zY2hlZHVsZU5hdmlnYXRpb24oYSxkLGgsZix2KXtpZih0aGlzLmRpc3Bvc2Vk'@;
put 'KXJldHVybiBQcm9taXNlLnJlc29sdmUoITEpO2xldCBNLEQsWjt2PyhNPXYucmVzb2x2ZSxEPXYucmVqZWN0LFo9di5wcm9taXNlKTpaPW5ldyBQcm9taXNlKChjZSxiZSk9PntNPWNlLEQ9YmV9KTtjb25zdCByZT10aGlzLnBlbmRpbmdUYXNrcy5hZGQoKTtyZXR1cm4gb2NlKHRoaXMsKCk9'@;
put 'PntxdWV1ZU1pY3JvdGFzaygoKT0+dGhpcy5wZW5kaW5nVGFza3MucmVtb3ZlKHJlKSl9KSx0aGlzLm5hdmlnYXRpb25UcmFuc2l0aW9ucy5oYW5kbGVOYXZpZ2F0aW9uUmVxdWVzdCh7c291cmNlOmQscmVzdG9yZWRTdGF0ZTpoLGN1cnJlbnRVcmxUcmVlOnRoaXMuY3VycmVudFVybFRyZWUs'@;
put 'Y3VycmVudFJhd1VybDp0aGlzLmN1cnJlbnRVcmxUcmVlLHJhd1VybDphLGV4dHJhczpmLHJlc29sdmU6TSxyZWplY3Q6RCxwcm9taXNlOlosY3VycmVudFNuYXBzaG90OnRoaXMucm91dGVyU3RhdGUuc25hcHNob3QsY3VycmVudFJvdXRlclN0YXRlOnRoaXMucm91dGVyU3RhdGV9KSxaLmNh'@;
put 'dGNoKGNlPT5Qcm9taXNlLnJlamVjdChjZSkpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KX19cmV0dXJuIGN9'@;
put 'KSgpLGMxPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZix2LE0pe3RoaXMucm91dGVyPWEsdGhpcy5yb3V0ZT1kLHRoaXMudGFiSW5kZXhBdHRyaWJ1dGU9aCx0aGlzLnJlbmRlcmVyPWYsdGhpcy5lbD12LHRoaXMubG9jYXRpb25TdHJhdGVneT1NLHRoaXMuaHJlZj1udWxsLHRo'@;
put 'aXMuY29tbWFuZHM9bnVsbCx0aGlzLm9uQ2hhbmdlcz1uZXcgV24sdGhpcy5wcmVzZXJ2ZUZyYWdtZW50PSExLHRoaXMuc2tpcExvY2F0aW9uQ2hhbmdlPSExLHRoaXMucmVwbGFjZVVybD0hMTtjb25zdCBEPXYubmF0aXZlRWxlbWVudC50YWdOYW1lPy50b0xvd2VyQ2FzZSgpO3RoaXMuaXNB'@;
put 'bmNob3JFbGVtZW50PSJhIj09PUR8fCJhcmVhIj09PUQsdGhpcy5pc0FuY2hvckVsZW1lbnQ/dGhpcy5zdWJzY3JpcHRpb249YS5ldmVudHMuc3Vic2NyaWJlKFo9PntaIGluc3RhbmNlb2YgcHAmJnRoaXMudXBkYXRlSHJlZigpfSk6dGhpcy5zZXRUYWJJbmRleElmTm90T25OYXRpdmVFbCgi'@;
put 'MCIpfXNldFRhYkluZGV4SWZOb3RPbk5hdGl2ZUVsKGEpe251bGwhPXRoaXMudGFiSW5kZXhBdHRyaWJ1dGV8fHRoaXMuaXNBbmNob3JFbGVtZW50fHx0aGlzLmFwcGx5QXR0cmlidXRlVmFsdWUoInRhYmluZGV4IixhKX1uZ09uQ2hhbmdlcyhhKXt0aGlzLmlzQW5jaG9yRWxlbWVudCYmdGhp'@;
put 'cy51cGRhdGVIcmVmKCksdGhpcy5vbkNoYW5nZXMubmV4dCh0aGlzKX1zZXQgcm91dGVyTGluayhhKXtudWxsIT1hPyh0aGlzLmNvbW1hbmRzPUFycmF5LmlzQXJyYXkoYSk/YTpbYV0sdGhpcy5zZXRUYWJJbmRleElmTm90T25OYXRpdmVFbCgiMCIpKToodGhpcy5jb21tYW5kcz1udWxsLHRo'@;
put 'aXMuc2V0VGFiSW5kZXhJZk5vdE9uTmF0aXZlRWwobnVsbCkpfW9uQ2xpY2soYSxkLGgsZix2KXtjb25zdCBNPXRoaXMudXJsVHJlZTtyZXR1cm4hIShudWxsPT09TXx8dGhpcy5pc0FuY2hvckVsZW1lbnQmJigwIT09YXx8ZHx8aHx8Znx8dnx8InN0cmluZyI9PXR5cGVvZiB0aGlzLnRhcmdl'@;
put 'dCYmIl9zZWxmIiE9dGhpcy50YXJnZXQpKXx8KHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoTSx7c2tpcExvY2F0aW9uQ2hhbmdlOnRoaXMuc2tpcExvY2F0aW9uQ2hhbmdlLHJlcGxhY2VVcmw6dGhpcy5yZXBsYWNlVXJsLHN0YXRlOnRoaXMuc3RhdGUsaW5mbzp0aGlzLmluZm99KSwhdGhp'@;
put 'cy5pc0FuY2hvckVsZW1lbnQpfW5nT25EZXN0cm95KCl7dGhpcy5zdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCl9dXBkYXRlSHJlZigpe2NvbnN0IGE9dGhpcy51cmxUcmVlO3RoaXMuaHJlZj1udWxsIT09YSYmdGhpcy5sb2NhdGlvblN0cmF0ZWd5P3RoaXMubG9jYXRpb25TdHJhdGVneT8u'@;
put 'cHJlcGFyZUV4dGVybmFsVXJsKHRoaXMucm91dGVyLnNlcmlhbGl6ZVVybChhKSk6bnVsbDtjb25zdCBkPW51bGw9PT10aGlzLmhyZWY/bnVsbDpmdW5jdGlvbiBhRChjLGwsYSl7cmV0dXJuIGZ1bmN0aW9uIGpCKGMsbCl7cmV0dXJuInNyYyI9PT1sJiYoImVtYmVkIj09PWN8fCJmcmFtZSI9'@;
put 'PT1jfHwiaWZyYW1lIj09PWN8fCJtZWRpYSI9PT1jfHwic2NyaXB0Ij09PWMpfHwiaHJlZiI9PT1sJiYoImJhc2UiPT09Y3x8ImxpbmsiPT09Yyk/aUQ6WkN9KGwsYSkoYyl9KHRoaXMuaHJlZix0aGlzLmVsLm5hdGl2ZUVsZW1lbnQudGFnTmFtZS50b0xvd2VyQ2FzZSgpLCJocmVmIik7dGhp'@;
put 'cy5hcHBseUF0dHJpYnV0ZVZhbHVlKCJocmVmIixkKX1hcHBseUF0dHJpYnV0ZVZhbHVlKGEsZCl7Y29uc3QgaD10aGlzLnJlbmRlcmVyLGY9dGhpcy5lbC5uYXRpdmVFbGVtZW50O251bGwhPT1kP2guc2V0QXR0cmlidXRlKGYsYSxkKTpoLnJlbW92ZUF0dHJpYnV0ZShmLGEpfWdldCB1cmxU'@;
put 'cmVlKCl7cmV0dXJuIG51bGw9PT10aGlzLmNvbW1hbmRzP251bGw6dGhpcy5yb3V0ZXIuY3JlYXRlVXJsVHJlZSh0aGlzLmNvbW1hbmRzLHtyZWxhdGl2ZVRvOnZvaWQgMCE9PXRoaXMucmVsYXRpdmVUbz90aGlzLnJlbGF0aXZlVG86dGhpcy5yb3V0ZSxxdWVyeVBhcmFtczp0aGlzLnF1ZXJ5'@;
put 'UGFyYW1zLGZyYWdtZW50OnRoaXMuZnJhZ21lbnQscXVlcnlQYXJhbXNIYW5kbGluZzp0aGlzLnF1ZXJ5UGFyYW1zSGFuZGxpbmcscHJlc2VydmVGcmFnbWVudDp0aGlzLnByZXNlcnZlRnJhZ21lbnR9KX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxj'@;
put 'KShHZShMcyksR2UoQ3UpLElmKCJ0YWJpbmRleCIpLEdlKEVvKSxHZShKaSksR2UoWjgpKX19c3RhdGlje3RoaXMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsInJvdXRlckxpbmsiLCIiXV0saG9zdFZhcnM6MSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZCxoKXsxJmQmJkZ0'@;
put 'KCJjbGljayIsZnVuY3Rpb24odil7cmV0dXJuIGgub25DbGljayh2LmJ1dHRvbix2LmN0cmxLZXksdi5zaGlmdEtleSx2LmFsdEtleSx2Lm1ldGFLZXkpfSksMiZkJiZocigidGFyZ2V0IixoLnRhcmdldCl9LGlucHV0czp7dGFyZ2V0OiJ0YXJnZXQiLHF1ZXJ5UGFyYW1zOiJxdWVyeVBhcmFt'@;
put 'cyIsZnJhZ21lbnQ6ImZyYWdtZW50IixxdWVyeVBhcmFtc0hhbmRsaW5nOiJxdWVyeVBhcmFtc0hhbmRsaW5nIixzdGF0ZToic3RhdGUiLGluZm86ImluZm8iLHJlbGF0aXZlVG86InJlbGF0aXZlVG8iLHByZXNlcnZlRnJhZ21lbnQ6W05uLkhhc0RlY29yYXRvcklucHV0VHJhbnNmb3JtLCJw'@;
put 'cmVzZXJ2ZUZyYWdtZW50IiwicHJlc2VydmVGcmFnbWVudCIsczFdLHNraXBMb2NhdGlvbkNoYW5nZTpbTm4uSGFzRGVjb3JhdG9ySW5wdXRUcmFuc2Zvcm0sInNraXBMb2NhdGlvbkNoYW5nZSIsInNraXBMb2NhdGlvbkNoYW5nZSIsczFdLHJlcGxhY2VVcmw6W05uLkhhc0RlY29yYXRvcklu'@;
put 'cHV0VHJhbnNmb3JtLCJyZXBsYWNlVXJsIiwicmVwbGFjZVVybCIsczFdLHJvdXRlckxpbms6InJvdXRlckxpbmsifSxzdGFuZGFsb25lOiEwLGZlYXR1cmVzOltXbCx3bF19KX19cmV0dXJuIGN9KSgpLHB5PSgoKT0+e2NsYXNzIGN7Z2V0IGlzQWN0aXZlKCl7cmV0dXJuIHRoaXMuX2lzQWN0'@;
put 'aXZlfWNvbnN0cnVjdG9yKGEsZCxoLGYsdil7dGhpcy5yb3V0ZXI9YSx0aGlzLmVsZW1lbnQ9ZCx0aGlzLnJlbmRlcmVyPWgsdGhpcy5jZHI9Zix0aGlzLmxpbms9dix0aGlzLmNsYXNzZXM9W10sdGhpcy5faXNBY3RpdmU9ITEsdGhpcy5yb3V0ZXJMaW5rQWN0aXZlT3B0aW9ucz17ZXhhY3Q6'@;
put 'ITF9LHRoaXMuaXNBY3RpdmVDaGFuZ2U9bmV3IEtyLHRoaXMucm91dGVyRXZlbnRzU3Vic2NyaXB0aW9uPWEuZXZlbnRzLnN1YnNjcmliZShNPT57TSBpbnN0YW5jZW9mIHBwJiZ0aGlzLnVwZGF0ZSgpfSl9bmdBZnRlckNvbnRlbnRJbml0KCl7Zm8odGhpcy5saW5rcy5jaGFuZ2VzLGZvKG51'@;
put 'bGwpKS5waXBlKGV5KCkpLnN1YnNjcmliZShhPT57dGhpcy51cGRhdGUoKSx0aGlzLnN1YnNjcmliZVRvRWFjaExpbmtPbkNoYW5nZXMoKX0pfXN1YnNjcmliZVRvRWFjaExpbmtPbkNoYW5nZXMoKXt0aGlzLmxpbmtJbnB1dENoYW5nZXNTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7Y29u'@;
put 'c3QgYT1bLi4udGhpcy5saW5rcy50b0FycmF5KCksdGhpcy5saW5rXS5maWx0ZXIoZD0+ISFkKS5tYXAoZD0+ZC5vbkNoYW5nZXMpO3RoaXMubGlua0lucHV0Q2hhbmdlc1N1YnNjcmlwdGlvbj1ZdShhKS5waXBlKGV5KCkpLnN1YnNjcmliZShkPT57dGhpcy5faXNBY3RpdmUhPT10aGlzLmlz'@;
put 'TGlua0FjdGl2ZSh0aGlzLnJvdXRlcikoZCkmJnRoaXMudXBkYXRlKCl9KX1zZXQgcm91dGVyTGlua0FjdGl2ZShhKXtjb25zdCBkPUFycmF5LmlzQXJyYXkoYSk/YTphLnNwbGl0KCIgIik7dGhpcy5jbGFzc2VzPWQuZmlsdGVyKGg9PiEhaCl9bmdPbkNoYW5nZXMoYSl7dGhpcy51cGRhdGUo'@;
put 'KX1uZ09uRGVzdHJveSgpe3RoaXMucm91dGVyRXZlbnRzU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksdGhpcy5saW5rSW5wdXRDaGFuZ2VzU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpfXVwZGF0ZSgpeyF0aGlzLmxpbmtzfHwhdGhpcy5yb3V0ZXIubmF2aWdhdGVkfHxxdWV1ZU1pY3Jv'@;
put 'dGFzaygoKT0+e2NvbnN0IGE9dGhpcy5oYXNBY3RpdmVMaW5rcygpO3RoaXMuY2xhc3Nlcy5mb3JFYWNoKGQ9PnthP3RoaXMucmVuZGVyZXIuYWRkQ2xhc3ModGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQsZCk6dGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyh0aGlzLmVsZW1lbnQubmF0aXZl'@;
put 'RWxlbWVudCxkKX0pLGEmJnZvaWQgMCE9PXRoaXMuYXJpYUN1cnJlbnRXaGVuQWN0aXZlP3RoaXMucmVuZGVyZXIuc2V0QXR0cmlidXRlKHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LCJhcmlhLWN1cnJlbnQiLHRoaXMuYXJpYUN1cnJlbnRXaGVuQWN0aXZlLnRvU3RyaW5nKCkpOnRoaXMu'@;
put 'cmVuZGVyZXIucmVtb3ZlQXR0cmlidXRlKHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LCJhcmlhLWN1cnJlbnQiKSx0aGlzLl9pc0FjdGl2ZSE9PWEmJih0aGlzLl9pc0FjdGl2ZT1hLHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpLHRoaXMuaXNBY3RpdmVDaGFuZ2UuZW1pdChhKSl9KX1pc0xp'@;
put 'bmtBY3RpdmUoYSl7Y29uc3QgZD1mdW5jdGlvbiB2VGUoYyl7cmV0dXJuISFjLnBhdGhzfSh0aGlzLnJvdXRlckxpbmtBY3RpdmVPcHRpb25zKT90aGlzLnJvdXRlckxpbmtBY3RpdmVPcHRpb25zOnRoaXMucm91dGVyTGlua0FjdGl2ZU9wdGlvbnMuZXhhY3R8fCExO3JldHVybiBoPT57Y29u'@;
put 'c3QgZj1oLnVybFRyZWU7cmV0dXJuISFmJiZhLmlzQWN0aXZlKGYsZCl9fWhhc0FjdGl2ZUxpbmtzKCl7Y29uc3QgYT10aGlzLmlzTGlua0FjdGl2ZSh0aGlzLnJvdXRlcik7cmV0dXJuIHRoaXMubGluayYmYSh0aGlzLmxpbmspfHx0aGlzLmxpbmtzLnNvbWUoYSl9c3RhdGlje3RoaXMuXHUw'@;
put 'Mjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoR2UoTHMpLEdlKEppKSxHZShFbyksR2UoRXMpLEdlKGMxLDgpKX19c3RhdGlje3RoaXMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsInJvdXRlckxpbmtBY3RpdmUiLCIiXV0sY29udGVudFF1ZXJpZXM6ZnVu'@;
put 'Y3Rpb24oZCxoLGYpe2lmKDEmZCYmYW8oZixjMSw1KSwyJmQpe2xldCB2O0NpKHY9U2koKSkmJihoLmxpbmtzPXYpfX0saW5wdXRzOntyb3V0ZXJMaW5rQWN0aXZlT3B0aW9uczoicm91dGVyTGlua0FjdGl2ZU9wdGlvbnMiLGFyaWFDdXJyZW50V2hlbkFjdGl2ZToiYXJpYUN1cnJlbnRXaGVu'@;
put 'QWN0aXZlIixyb3V0ZXJMaW5rQWN0aXZlOiJyb3V0ZXJMaW5rQWN0aXZlIn0sb3V0cHV0czp7aXNBY3RpdmVDaGFuZ2U6ImlzQWN0aXZlQ2hhbmdlIn0sZXhwb3J0QXM6WyJyb3V0ZXJMaW5rQWN0aXZlIl0sc3RhbmRhbG9uZTohMCxmZWF0dXJlczpbd2xdfSl9fXJldHVybiBjfSkoKTtjbGFz'@;
put 'cyBzY2V7fWxldCBiVGU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmLHYpe3RoaXMucm91dGVyPWEsdGhpcy5pbmplY3Rvcj1oLHRoaXMucHJlbG9hZGluZ1N0cmF0ZWd5PWYsdGhpcy5sb2FkZXI9dn1zZXRVcFByZWxvYWRpbmcoKXt0aGlzLnN1YnNjcmlwdGlvbj10aGlzLnJv'@;
put 'dXRlci5ldmVudHMucGlwZSgkbChhPT5hIGluc3RhbmNlb2YgcHApLHR5KCgpPT50aGlzLnByZWxvYWQoKSkpLnN1YnNjcmliZSgoKT0+e30pfXByZWxvYWQoKXtyZXR1cm4gdGhpcy5wcm9jZXNzUm91dGVzKHRoaXMuaW5qZWN0b3IsdGhpcy5yb3V0ZXIuY29uZmlnKX1uZ09uRGVzdHJveSgp'@;
put 'e3RoaXMuc3Vic2NyaXB0aW9uJiZ0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpfXByb2Nlc3NSb3V0ZXMoYSxkKXtjb25zdCBoPVtdO2Zvcihjb25zdCBmIG9mIGQpe2YucHJvdmlkZXJzJiYhZi5faW5qZWN0b3ImJihmLl9pbmplY3Rvcj1HNChmLnByb3ZpZGVycyxhLGBSb3V0ZTog'@;
put 'JHtmLnBhdGh9YCkpO2NvbnN0IHY9Zi5faW5qZWN0b3I/P2EsTT1mLl9sb2FkZWRJbmplY3Rvcj8/djsoZi5sb2FkQ2hpbGRyZW4mJiFmLl9sb2FkZWRSb3V0ZXMmJnZvaWQgMD09PWYuY2FuTG9hZHx8Zi5sb2FkQ29tcG9uZW50JiYhZi5fbG9hZGVkQ29tcG9uZW50KSYmaC5wdXNoKHRoaXMu'@;
put 'cHJlbG9hZENvbmZpZyh2LGYpKSwoZi5jaGlsZHJlbnx8Zi5fbG9hZGVkUm91dGVzKSYmaC5wdXNoKHRoaXMucHJvY2Vzc1JvdXRlcyhNLGYuY2hpbGRyZW4/P2YuX2xvYWRlZFJvdXRlcykpfXJldHVybiBZdShoKS5waXBlKGV5KCkpfXByZWxvYWRDb25maWcoYSxkKXtyZXR1cm4gdGhpcy5w'@;
put 'cmVsb2FkaW5nU3RyYXRlZ3kucHJlbG9hZChkLCgpPT57bGV0IGg7aD1kLmxvYWRDaGlsZHJlbiYmdm9pZCAwPT09ZC5jYW5Mb2FkP3RoaXMubG9hZGVyLmxvYWRDaGlsZHJlbihhLGQpOmZvKG51bGwpO2NvbnN0IGY9aC5waXBlKE4wKHY9Pm51bGw9PT12P2ZvKHZvaWQgMCk6KGQuX2xvYWRl'@;
put 'ZFJvdXRlcz12LnJvdXRlcyxkLl9sb2FkZWRJbmplY3Rvcj12LmluamVjdG9yLHRoaXMucHJvY2Vzc1JvdXRlcyh2LmluamVjdG9yPz9hLHYucm91dGVzKSkpKTtyZXR1cm4gZC5sb2FkQ29tcG9uZW50JiYhZC5fbG9hZGVkQ29tcG9uZW50P1l1KFtmLHRoaXMubG9hZGVyLmxvYWRDb21wb25l'@;
put 'bnQoZCldKS5waXBlKGV5KCkpOmZ9KX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKSh4cihMcykseHIoS2llKSx4cihoYykseHIoc2NlKSx4cihnVykpfX1zdGF0aWN7dGhpcy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVm'@;
put 'YWMscHJvdmlkZWRJbjoicm9vdCJ9KX19cmV0dXJuIGN9KSgpO2NvbnN0IHZXPW5ldyBTdCgiIik7bGV0IGxjZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYsdj17fSl7dGhpcy51cmxTZXJpYWxpemVyPWEsdGhpcy50cmFuc2l0aW9ucz1kLHRoaXMudmlld3BvcnRTY3JvbGxl'@;
put 'cj1oLHRoaXMuem9uZT1mLHRoaXMub3B0aW9ucz12LHRoaXMubGFzdElkPTAsdGhpcy5sYXN0U291cmNlPSJpbXBlcmF0aXZlIix0aGlzLnJlc3RvcmVkSWQ9MCx0aGlzLnN0b3JlPXt9LHRoaXMuZW52aXJvbm1lbnRJbmplY3Rvcj1maShoYyksdi5zY3JvbGxQb3NpdGlvblJlc3RvcmF0aW9u'@;
put 'fHw9ImRpc2FibGVkIix2LmFuY2hvclNjcm9sbGluZ3x8PSJkaXNhYmxlZCJ9aW5pdCgpeyJkaXNhYmxlZCIhPT10aGlzLm9wdGlvbnMuc2Nyb2xsUG9zaXRpb25SZXN0b3JhdGlvbiYmdGhpcy52aWV3cG9ydFNjcm9sbGVyLnNldEhpc3RvcnlTY3JvbGxSZXN0b3JhdGlvbigibWFudWFsIiks'@;
put 'dGhpcy5yb3V0ZXJFdmVudHNTdWJzY3JpcHRpb249dGhpcy5jcmVhdGVTY3JvbGxFdmVudHMoKSx0aGlzLnNjcm9sbEV2ZW50c1N1YnNjcmlwdGlvbj10aGlzLmNvbnN1bWVTY3JvbGxFdmVudHMoKX1jcmVhdGVTY3JvbGxFdmVudHMoKXtyZXR1cm4gdGhpcy50cmFuc2l0aW9ucy5ldmVudHMu'@;
put 'c3Vic2NyaWJlKGE9PnthIGluc3RhbmNlb2YgQlI/KHRoaXMuc3RvcmVbdGhpcy5sYXN0SWRdPXRoaXMudmlld3BvcnRTY3JvbGxlci5nZXRTY3JvbGxQb3NpdGlvbigpLHRoaXMubGFzdFNvdXJjZT1hLm5hdmlnYXRpb25UcmlnZ2VyLHRoaXMucmVzdG9yZWRJZD1hLnJlc3RvcmVkU3RhdGU/'@;
put 'YS5yZXN0b3JlZFN0YXRlLm5hdmlnYXRpb25JZDowKTphIGluc3RhbmNlb2YgcHA/KHRoaXMubGFzdElkPWEuaWQsdGhpcy5zY2hlZHVsZVNjcm9sbEV2ZW50KGEsdGhpcy51cmxTZXJpYWxpemVyLnBhcnNlKGEudXJsQWZ0ZXJSZWRpcmVjdHMpLmZyYWdtZW50KSk6YSBpbnN0YW5jZW9mIHN5'@;
put 'JiZhLmNvZGU9PT1qUi5JZ25vcmVkU2FtZVVybE5hdmlnYXRpb24mJih0aGlzLmxhc3RTb3VyY2U9dm9pZCAwLHRoaXMucmVzdG9yZWRJZD0wLHRoaXMuc2NoZWR1bGVTY3JvbGxFdmVudChhLHRoaXMudXJsU2VyaWFsaXplci5wYXJzZShhLnVybCkuZnJhZ21lbnQpKX0pfWNvbnN1bWVTY3Jv'@;
put 'bGxFdmVudHMoKXtyZXR1cm4gdGhpcy50cmFuc2l0aW9ucy5ldmVudHMuc3Vic2NyaWJlKGE9PnthIGluc3RhbmNlb2YgRmxlJiYoYS5wb3NpdGlvbj8idG9wIj09PXRoaXMub3B0aW9ucy5zY3JvbGxQb3NpdGlvblJlc3RvcmF0aW9uP3RoaXMudmlld3BvcnRTY3JvbGxlci5zY3JvbGxUb1Bv'@;
put 'c2l0aW9uKFswLDBdKToiZW5hYmxlZCI9PT10aGlzLm9wdGlvbnMuc2Nyb2xsUG9zaXRpb25SZXN0b3JhdGlvbiYmdGhpcy52aWV3cG9ydFNjcm9sbGVyLnNjcm9sbFRvUG9zaXRpb24oYS5wb3NpdGlvbik6YS5hbmNob3ImJiJlbmFibGVkIj09PXRoaXMub3B0aW9ucy5hbmNob3JTY3JvbGxp'@;
put 'bmc/dGhpcy52aWV3cG9ydFNjcm9sbGVyLnNjcm9sbFRvQW5jaG9yKGEuYW5jaG9yKToiZGlzYWJsZWQiIT09dGhpcy5vcHRpb25zLnNjcm9sbFBvc2l0aW9uUmVzdG9yYXRpb24mJnRoaXMudmlld3BvcnRTY3JvbGxlci5zY3JvbGxUb1Bvc2l0aW9uKFswLDBdKSl9KX1zY2hlZHVsZVNjcm9s'@;
put 'bEV2ZW50KGEsZCl7dmFyIGg9dGhpczt0aGlzLnpvbmUucnVuT3V0c2lkZUFuZ3VsYXIoZWUoZnVuY3Rpb24qKCl7eWllbGQgbmV3IFByb21pc2UoZj0+e3NldFRpbWVvdXQoKCk9PntmKCl9KSxfYigoKT0+e2YoKX0se2luamVjdG9yOmguZW52aXJvbm1lbnRJbmplY3Rvcn0pfSksaC56b25l'@;
put 'LnJ1bigoKT0+e2gudHJhbnNpdGlvbnMuZXZlbnRzLm5leHQobmV3IEZsZShhLCJwb3BzdGF0ZSI9PT1oLmxhc3RTb3VyY2U/aC5zdG9yZVtoLnJlc3RvcmVkSWRdOm51bGwsZCkpfSl9KSl9bmdPbkRlc3Ryb3koKXt0aGlzLnJvdXRlckV2ZW50c1N1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUo'@;
put 'KSx0aGlzLnNjcm9sbEV2ZW50c1N1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7IWZ1bmN0aW9uIFNEKCl7dGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIil9KCl9fXN0YXRpY3t0aGlzLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFj'@;
put 'dG9yeTpjLlx1MDI3NWZhY30pfX1yZXR1cm4gY30pKCk7ZnVuY3Rpb24gbXAoYyxsKXtyZXR1cm57XHUwMjc1a2luZDpjLFx1MDI3NXByb3ZpZGVyczpsfX1mdW5jdGlvbiB1Y2UoKXtjb25zdCBjPWZpKERzKTtyZXR1cm4gbD0+e2NvbnN0IGE9Yy5nZXQocTQpO2lmKGwhPT1hLmNvbXBvbmVu'@;
put 'dHNbMF0pcmV0dXJuO2NvbnN0IGQ9Yy5nZXQoTHMpLGg9Yy5nZXQoZGNlKTsxPT09Yy5nZXQoYlcpJiZkLmluaXRpYWxOYXZpZ2F0aW9uKCksYy5nZXQoaGNlLG51bGwscmEuT3B0aW9uYWwpPy5zZXRVcFByZWxvYWRpbmcoKSxjLmdldCh2VyxudWxsLHJhLk9wdGlvbmFsKT8uaW5pdCgpLGQu'@;
put 'cmVzZXRSb290Q29tcG9uZW50VHlwZShhLmNvbXBvbmVudFR5cGVzWzBdKSxoLmNsb3NlZHx8KGgubmV4dCgpLGguY29tcGxldGUoKSxoLnVuc3Vic2NyaWJlKCkpfX1jb25zdCBkY2U9bmV3IFN0KCIiLHtmYWN0b3J5OigpPT5uZXcgV259KSxiVz1uZXcgU3QoIiIse3Byb3ZpZGVkSW46InJv'@;
put 'b3QiLGZhY3Rvcnk6KCk9PjF9KSxoY2U9bmV3IFN0KCIiKTtmdW5jdGlvbiBDVGUoYyl7cmV0dXJuIG1wKDAsW3twcm92aWRlOmhjZSx1c2VFeGlzdGluZzpiVGV9LHtwcm92aWRlOnNjZSx1c2VFeGlzdGluZzpjfV0pfWZ1bmN0aW9uIE1UZShjKXtyZXR1cm4gbXAoOSxbe3Byb3ZpZGU6cmNl'@;
put 'LHVzZVZhbHVlOmFUZX0se3Byb3ZpZGU6aWNlLHVzZVZhbHVlOntza2lwTmV4dFRyYW5zaXRpb246ISFjPy5za2lwSW5pdGlhbFRyYW5zaXRpb24sLi4uY319XSl9Y29uc3QgZmNlPW5ldyBTdCgiUk9VVEVSX0ZPUlJPT1RfR1VBUkQiKSx4VGU9W2ZoLHtwcm92aWRlOml5LHVzZUNsYXNzOiRa'@;
put 'fSxMcyxxTSx7cHJvdmlkZTpDdSx1c2VGYWN0b3J5OmZ1bmN0aW9uIGNjZShjKXtyZXR1cm4gYy5yb3V0ZXJTdGF0ZS5yb290fSxkZXBzOltMc119LGdXLFtdXTtsZXQgemM9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt9c3RhdGljIGZvclJvb3QoYSxkKXtyZXR1cm57bmdNb2R1bGU6'@;
put 'Yyxwcm92aWRlcnM6W3hUZSxbXSx7cHJvdmlkZTpmeSxtdWx0aTohMCx1c2VWYWx1ZTphfSx7cHJvdmlkZTpmY2UsdXNlRmFjdG9yeTprVGUsZGVwczpbW0xzLG5ldyBJMSxuZXcgbGRdXX0se3Byb3ZpZGU6aHksdXNlVmFsdWU6ZHx8e319LGQ/LnVzZUhhc2g/e3Byb3ZpZGU6WjgsdXNlQ2xh'@;
put 'c3M6dl9lfTp7cHJvdmlkZTpaOCx1c2VDbGFzczpCYWV9LHtwcm92aWRlOnZXLHVzZUZhY3Rvcnk6KCk9Pntjb25zdCBjPWZpKFJ3ZSksbD1maShXYSksYT1maShoeSksZD1maShHUiksaD1maShpeSk7cmV0dXJuIGEuc2Nyb2xsT2Zmc2V0JiZjLnNldE9mZnNldChhLnNjcm9sbE9mZnNldCks'@;
put 'bmV3IGxjZShoLGQsYyxsLGEpfX0sZD8ucHJlbG9hZGluZ1N0cmF0ZWd5P0NUZShkLnByZWxvYWRpbmdTdHJhdGVneSkuXHUwMjc1cHJvdmlkZXJzOltdLGQ/LmluaXRpYWxOYXZpZ2F0aW9uP0RUZShkKTpbXSxkPy5iaW5kVG9Db21wb25lbnRJbnB1dHM/bXAoOCxbVWxlLHtwcm92aWRlOlVS'@;
put 'LHVzZUV4aXN0aW5nOlVsZX1dKS5cdTAyNzVwcm92aWRlcnM6W10sZD8uZW5hYmxlVmlld1RyYW5zaXRpb25zP01UZSgpLlx1MDI3NXByb3ZpZGVyczpbXSxbe3Byb3ZpZGU6cGNlLHVzZUZhY3Rvcnk6dWNlfSx7cHJvdmlkZTprVSxtdWx0aTohMCx1c2VFeGlzdGluZzpwY2V9XV19fXN0YXRp'@;
put 'YyBmb3JDaGlsZChhKXtyZXR1cm57bmdNb2R1bGU6Yyxwcm92aWRlcnM6W3twcm92aWRlOmZ5LG11bHRpOiEwLHVzZVZhbHVlOmF9XX19c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoeHIoZmNlLDgpKX19c3RhdGlje3RoaXMuXHUwMjc1bW9kPWtp'@;
put 'KHt0eXBlOmN9KX1zdGF0aWN7dGhpcy5cdTAyNzVpbmo9QXIoe30pfX1yZXR1cm4gY30pKCk7ZnVuY3Rpb24ga1RlKGMpe3JldHVybiJndWFyZGVkIn1mdW5jdGlvbiBEVGUoYyl7cmV0dXJuWyJkaXNhYmxlZCI9PT1jLmluaXRpYWxOYXZpZ2F0aW9uP21wKDMsW3twcm92aWRlOlRVLG11bHRp'@;
put 'OiEwLHVzZUZhY3Rvcnk6KCk9Pntjb25zdCBsPWZpKExzKTtyZXR1cm4oKT0+e2wuc2V0VXBMb2NhdGlvbkNoYW5nZUxpc3RlbmVyKCl9fX0se3Byb3ZpZGU6YlcsdXNlVmFsdWU6Mn1dKS5cdTAyNzVwcm92aWRlcnM6W10sImVuYWJsZWRCbG9ja2luZyI9PT1jLmluaXRpYWxOYXZpZ2F0aW9u'@;
put 'P21wKDIsW3twcm92aWRlOmJXLHVzZVZhbHVlOjB9LHtwcm92aWRlOlRVLG11bHRpOiEwLGRlcHM6W0RzXSx1c2VGYWN0b3J5Omw9Pntjb25zdCBhPWwuZ2V0KGdfZSxQcm9taXNlLnJlc29sdmUoKSk7cmV0dXJuKCk9PmEudGhlbigoKT0+bmV3IFByb21pc2UoZD0+e2NvbnN0IGg9bC5nZXQo'@;
put 'THMpLGY9bC5nZXQoZGNlKTtvY2UoaCwoKT0+e2QoITApfSksbC5nZXQoR1IpLmFmdGVyUHJlYWN0aXZhdGlvbj0oKT0+KGQoITApLGYuY2xvc2VkP2ZvKHZvaWQgMCk6ZiksaC5pbml0aWFsTmF2aWdhdGlvbigpfSkpfX1dKS5cdTAyNzVwcm92aWRlcnM6W11dfWNvbnN0IHBjZT1uZXcgU3Qo'@;
put 'IiIpO3ZhciBneT1mdW5jdGlvbihjKXtyZXR1cm4gYy5saWdodD0ibGlnaHQiLGMuZGFyaz0iZGFyayIsY30oZ3l8fHt9KSxnY2U9eSg1NTE4OCksUlRlPXkoNzg3NTUpO2NvbnN0IHlXPXt1c2Vyc19hbGxvd2VkOjEsdmlld2VyX3Jvd3NfYWxsb3dlZDoxNSxlZGl0b3Jfcm93c19hbGxvd2Vk'@;
put 'OjE1LHN0YWdlX3Jvd3NfYWxsb3dlZDoxLzAsaGlzdG9yeV9yb3dzX2FsbG93ZWQ6MTUsc3VibWl0X3Jvd3NfbGltaXQ6NSx2aWV3Ym94X2xpbWl0OjEsbGluZWFnZV9kYWlseV9saW1pdDozLHRhYmxlc19pbl9saWJyYXJ5X2xpbWl0OjM1LHZpZXdib3g6ITAsZmlsZVVwbG9hZDohMCxlZGl0'@;
put 'UmVjb3JkOiEwLGFkZFJlY29yZDohMH07dmFyIGdoPWZ1bmN0aW9uKGMpe3JldHVybiBjW2Mudmlld2VyX3Jvd3NfYWxsb3dlZD0wXT0idmlld2VyX3Jvd3NfYWxsb3dlZCIsY1tjLmVkaXRvcl9yb3dzX2FsbG93ZWQ9MV09ImVkaXRvcl9yb3dzX2FsbG93ZWQiLGNbYy5zdGFnZV9yb3dzX2Fs'@;
put 'bG93ZWQ9Ml09InN0YWdlX3Jvd3NfYWxsb3dlZCIsY1tjLmhpc3Rvcnlfcm93c19hbGxvd2VkPTNdPSJoaXN0b3J5X3Jvd3NfYWxsb3dlZCIsY1tjLnN1Ym1pdF9yb3dzX2xpbWl0PTRdPSJzdWJtaXRfcm93c19saW1pdCIsY1tjLnRhYmxlc19pbl9saWJyYXJ5X2xpbWl0PTVdPSJ0YWJsZXNf'@;
put 'aW5fbGlicmFyeV9saW1pdCIsY1tjLnZpZXdib3g9Nl09InZpZXdib3giLGNbYy52aWV3Ym94X2xpbWl0PTddPSJ2aWV3Ym94X2xpbWl0IixjW2MubGluZWFnZV9kYWlseV9saW1pdD04XT0ibGluZWFnZV9kYWlseV9saW1pdCIsY1tjLmZpbGVVcGxvYWQ9OV09ImZpbGVVcGxvYWQiLGNbYy5l'@;
put 'ZGl0UmVjb3JkPTEwXT0iZWRpdFJlY29yZCIsY1tjLmFkZFJlY29yZD0xMV09ImFkZFJlY29yZCIsY30oZ2h8fHt9KSxtaD15KDM3MzQpLG1jZT15Lm4obWgpLEIwPXkoMTMyNDcpO2xldCBROD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7fXNldERjQWRhcHRlclNldHRpbmdzKGEpe3Ro'@;
put 'aXMuZGNBZGFwdGVyU2V0dGluZ3M9YX1nZXREY0FkYXB0ZXJTZXR0aW5ncygpe3JldHVybiB0aGlzLmRjQWRhcHRlclNldHRpbmdzfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZh'@;
put 'Y3Rvcnk6Yy5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KX19cmV0dXJuIGN9KSgpLF9XPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLnVzZXJDaGFuZ2U9bmV3IFdufXNldCB1c2VyKGEpe3RoaXMuX3VzZXI9YSx0aGlzLnVzZXJDaGFuZ2UubmV4dChhKX1nZXQgdXNlcigp'@;
put 'e3JldHVybiB0aGlzLl91c2VyfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KX19cmV0dXJuIGN9KSgpO2NsYXNzICRSe2NvbnN0cnVjdG9yKCl7'@;
put 'dGhpcy5kZWZhdWx0U2V0dGluZ3M9e3BlcnNpc3RTZWxlY3RlZFRoZW1lOiEwLHNlbGVjdGVkVGhlbWU6Z3kubGlnaHR9LHRoaXMuc2V0dGluZ3M9bmV3IGVpKHRoaXMuZGVmYXVsdFNldHRpbmdzKSx0aGlzLnJlc3RvcmVBcHBTZXR0aW5ncygpfXJlc3RvcmVBcHBTZXR0aW5ncygpe3RyeXtj'@;
put 'b25zdCBsPWxvY2FsU3RvcmFnZS5nZXRJdGVtKCJhcHAtc2V0dGluZ3MiKTtpZihsKXtjb25zdCBhPUpTT04ucGFyc2UobCk7dGhpcy5zZXRBcHBTZXR0aW5ncyhhKX1lbHNlIGNvbnNvbGUuaW5mbygiTm8gYXBwIHNldHRpbmdzIHN0b3JlZCBpbiB0aGUgbG9jYWxTdG9yYWdlLCB3ZSB3aWxs'@;
put 'IHNldCB0byBkZWZhdWx0IHZhbHVlcy4iKX1jYXRjaChsKXtjb25zb2xlLndhcm4oIkVycm9yIHJlc3RvcmluZyBzZXR0aW5ncyBmcm9tIGxvY2FsIHN0b3JnYWUuIixsKX19c3RvcmVBcHBTZXR0aW5ncygpe2xvY2FsU3RvcmFnZS5zZXRJdGVtKCJhcHAtc2V0dGluZ3MiLEpTT04uc3RyaW5n'@;
put 'aWZ5KHRoaXMuc2V0dGluZ3MudmFsdWUpKX1zZXRBcHBTZXR0aW5ncyhsKXt0aGlzLnNldHRpbmdzLm5leHQoey4uLnRoaXMuc2V0dGluZ3MudmFsdWUsLi4ubH0pLHRoaXMuc3RvcmVBcHBTZXR0aW5ncygpfX1sZXQgdmM9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLmFwcFNl'@;
put 'dHRpbmdzU2VydmljZT1hLHRoaXMub25TaWRlYmFyVG9nZ2xlPW5ldyBLcix0aGlzLm9uU3RhcnR1cERhdGFMb2FkZWQ9bmV3IEtyLHRoaXMub25TaG93QWJvcnRNb2RhbD1uZXcgS3IsdGhpcy5vblJlcXVlc3RzTW9kYWxPcGVuPW5ldyBLcix0aGlzLm9uRGVtb0xpbWl0TW9kYWxTaG93PW5l'@;
put 'dyBLcix0aGlzLnZpZXdMYXN0VXJsPW51bGwsdGhpcy5zaWRlYmFyQ2xvc2VMaW1pdD0xMjgwLHRoaXMuZGFya01vZGU9bmV3IGVpKCExKX10b2dnbGVEYXJrTW9kZShhKXt0aGlzLmRhcmtNb2RlLm5leHQoYSksYT9kb2N1bWVudC5ib2R5LnNldEF0dHJpYnV0ZSgiY2RzLXRoZW1lIiwiZGFy'@;
put 'ayIpOmRvY3VtZW50LmJvZHkuc2V0QXR0cmlidXRlKCJjZHMtdGhlbWUiLCJsaWdodCIpLHRoaXMuYXBwU2V0dGluZ3NTZXJ2aWNlLnNldEFwcFNldHRpbmdzKHtzZWxlY3RlZFRoZW1lOmE/Z3kuZGFyazpneS5saWdodH0pfXNob3dEZW1vTGltaXRNb2RhbChhKXt0aGlzLm9uRGVtb0xpbWl0'@;
put 'TW9kYWxTaG93LmVtaXQoYSl9c2hvd0luZm9Nb2RhbChhPSJJbmZvIixkKXt0aGlzLm9uU2hvd0Fib3J0TW9kYWwuZW1pdCh7bW9kYWxUaXRsZTphLG1lc3NhZ2U6ZCxzYXNTZXJ2aWNlOiIiLGRldGFpbHM6bnVsbH0pfXNob3dBYm9ydE1vZGFsKGEsZCxoLGY9dm9pZCAwKXtofHwoaD1udWxs'@;
put 'KTtsZXQgdj17c2FzU2VydmljZTphLG1lc3NhZ2U6ZCxkZXRhaWxzOmh9O2YmJih2Lm1vZGFsVGl0bGU9ZiksdGhpcy5vblNob3dBYm9ydE1vZGFsLmVtaXQodil9b3BlblJlcXVlc3RzTW9kYWwoKXt0aGlzLm9uUmVxdWVzdHNNb2RhbE9wZW4uZW1pdCghMCl9Y2F0Y2hSZXNwb25zZUVycm9y'@;
put 'KGEsZCl7bGV0IGg9IlNBUyBTZXJ2aWNlIGVycm9yIG9jdXJyZWQiO2lmKGQuZXJyb3Ipe2xldCBmO2g9ZC5lcnJvci5tZXNzYWdlLGQuZXJyb3IuZGV0YWlscyYmZC5lcnJvci5kZXRhaWxzLmxvZyYmKGY9ZC5lcnJvci5kZXRhaWxzLmxvZyksKCFofHxoLnRyaW0oKS5sZW5ndGg8MSkmJiho'@;
put 'PSJTQVMgU2VydmljZSBlcnJvciBvY3VycmVkIiksdGhpcy5zaG93QWJvcnRNb2RhbChhLGgse0xPRzpmfSwiUmVxdWVzdCBlcnJvciIpfWVsc2UgdGhpcy5zaG93QWJvcnRNb2RhbChhLGgpfXRvZ2dsZVNpZGViYXIoKXt0aGlzLm9uU2lkZWJhclRvZ2dsZS5lbWl0KCl9Y2xvc2VTaWRlYmFy'@;
put 'KCl7d2luZG93LmlubmVyV2lkdGg8dGhpcy5zaWRlYmFyQ2xvc2VMaW1pdCYmdGhpcy5vblNpZGViYXJUb2dnbGUuZW1pdCh7b3BlbjohMX0pfW9wZW5TaWRlYmFyKCl7dGhpcy5vblNpZGViYXJUb2dnbGUuZW1pdCh7b3BlbjohMH0pfXN0YXJ0dXBEYXRhTG9hZGVkKCl7dGhpcy5vblN0YXJ0'@;
put 'dXBEYXRhTG9hZGVkLmVtaXQoKX1kaXNwYXRjaEV2ZW50KGEpe2xldCBkOyJmdW5jdGlvbiI9PXR5cGVvZiBFdmVudD9kPW5ldyBFdmVudChhKTooZD1kb2N1bWVudC5jcmVhdGVFdmVudCgiRXZlbnQiKSxkLmluaXRFdmVudChhLCEwLCEwKSksd2luZG93LmRpc3BhdGNoRXZlbnQoZCl9c3Rh'@;
put 'dGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoeHIoJFIpKX19c3RhdGlje3RoaXMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSl9fXJldHVybiBjfSkoKTtjbGFzcyBLUnt9Y2xhc3MgcVJ7'@;
put 'fWNsYXNzIEUye2NvbnN0cnVjdG9yKGwpe3RoaXMubm9ybWFsaXplZE5hbWVzPW5ldyBNYXAsdGhpcy5sYXp5VXBkYXRlPW51bGwsbD8ic3RyaW5nIj09dHlwZW9mIGw/dGhpcy5sYXp5SW5pdD0oKT0+e3RoaXMuaGVhZGVycz1uZXcgTWFwLGwuc3BsaXQoIlxuIikuZm9yRWFjaChhPT57Y29u'@;
put 'c3QgZD1hLmluZGV4T2YoIjoiKTtpZihkPjApe2NvbnN0IGg9YS5zbGljZSgwLGQpLGY9aC50b0xvd2VyQ2FzZSgpLHY9YS5zbGljZShkKzEpLnRyaW0oKTt0aGlzLm1heWJlU2V0Tm9ybWFsaXplZE5hbWUoaCxmKSx0aGlzLmhlYWRlcnMuaGFzKGYpP3RoaXMuaGVhZGVycy5nZXQoZikucHVz'@;
put 'aCh2KTp0aGlzLmhlYWRlcnMuc2V0KGYsW3ZdKX19KX06dHlwZW9mIEhlYWRlcnM8InUiJiZsIGluc3RhbmNlb2YgSGVhZGVycz8odGhpcy5oZWFkZXJzPW5ldyBNYXAsbC5mb3JFYWNoKChhLGQpPT57dGhpcy5zZXRIZWFkZXJFbnRyaWVzKGQsYSl9KSk6dGhpcy5sYXp5SW5pdD0oKT0+e3Ro'@;
put 'aXMuaGVhZGVycz1uZXcgTWFwLE9iamVjdC5lbnRyaWVzKGwpLmZvckVhY2goKFthLGRdKT0+e3RoaXMuc2V0SGVhZGVyRW50cmllcyhhLGQpfSl9OnRoaXMuaGVhZGVycz1uZXcgTWFwfWhhcyhsKXtyZXR1cm4gdGhpcy5pbml0KCksdGhpcy5oZWFkZXJzLmhhcyhsLnRvTG93ZXJDYXNlKCkp'@;
put 'fWdldChsKXt0aGlzLmluaXQoKTtjb25zdCBhPXRoaXMuaGVhZGVycy5nZXQobC50b0xvd2VyQ2FzZSgpKTtyZXR1cm4gYSYmYS5sZW5ndGg+MD9hWzBdOm51bGx9a2V5cygpe3JldHVybiB0aGlzLmluaXQoKSxBcnJheS5mcm9tKHRoaXMubm9ybWFsaXplZE5hbWVzLnZhbHVlcygpKX1nZXRB'@;
put 'bGwobCl7cmV0dXJuIHRoaXMuaW5pdCgpLHRoaXMuaGVhZGVycy5nZXQobC50b0xvd2VyQ2FzZSgpKXx8bnVsbH1hcHBlbmQobCxhKXtyZXR1cm4gdGhpcy5jbG9uZSh7bmFtZTpsLHZhbHVlOmEsb3A6ImEifSl9c2V0KGwsYSl7cmV0dXJuIHRoaXMuY2xvbmUoe25hbWU6bCx2YWx1ZTphLG9w'@;
put 'OiJzIn0pfWRlbGV0ZShsLGEpe3JldHVybiB0aGlzLmNsb25lKHtuYW1lOmwsdmFsdWU6YSxvcDoiZCJ9KX1tYXliZVNldE5vcm1hbGl6ZWROYW1lKGwsYSl7dGhpcy5ub3JtYWxpemVkTmFtZXMuaGFzKGEpfHx0aGlzLm5vcm1hbGl6ZWROYW1lcy5zZXQoYSxsKX1pbml0KCl7dGhpcy5sYXp5'@;
put 'SW5pdCYmKHRoaXMubGF6eUluaXQgaW5zdGFuY2VvZiBFMj90aGlzLmNvcHlGcm9tKHRoaXMubGF6eUluaXQpOnRoaXMubGF6eUluaXQoKSx0aGlzLmxhenlJbml0PW51bGwsdGhpcy5sYXp5VXBkYXRlJiYodGhpcy5sYXp5VXBkYXRlLmZvckVhY2gobD0+dGhpcy5hcHBseVVwZGF0ZShsKSks'@;
put 'dGhpcy5sYXp5VXBkYXRlPW51bGwpKX1jb3B5RnJvbShsKXtsLmluaXQoKSxBcnJheS5mcm9tKGwuaGVhZGVycy5rZXlzKCkpLmZvckVhY2goYT0+e3RoaXMuaGVhZGVycy5zZXQoYSxsLmhlYWRlcnMuZ2V0KGEpKSx0aGlzLm5vcm1hbGl6ZWROYW1lcy5zZXQoYSxsLm5vcm1hbGl6ZWROYW1l'@;
put 'cy5nZXQoYSkpfSl9Y2xvbmUobCl7Y29uc3QgYT1uZXcgRTI7cmV0dXJuIGEubGF6eUluaXQ9dGhpcy5sYXp5SW5pdCYmdGhpcy5sYXp5SW5pdCBpbnN0YW5jZW9mIEUyP3RoaXMubGF6eUluaXQ6dGhpcyxhLmxhenlVcGRhdGU9KHRoaXMubGF6eVVwZGF0ZXx8W10pLmNvbmNhdChbbF0pLGF9'@;
put 'YXBwbHlVcGRhdGUobCl7Y29uc3QgYT1sLm5hbWUudG9Mb3dlckNhc2UoKTtzd2l0Y2gobC5vcCl7Y2FzZSJhIjpjYXNlInMiOmxldCBkPWwudmFsdWU7aWYoInN0cmluZyI9PXR5cGVvZiBkJiYoZD1bZF0pLDA9PT1kLmxlbmd0aClyZXR1cm47dGhpcy5tYXliZVNldE5vcm1hbGl6ZWROYW1l'@;
put 'KGwubmFtZSxhKTtjb25zdCBoPSgiYSI9PT1sLm9wP3RoaXMuaGVhZGVycy5nZXQoYSk6dm9pZCAwKXx8W107aC5wdXNoKC4uLmQpLHRoaXMuaGVhZGVycy5zZXQoYSxoKTticmVhaztjYXNlImQiOmNvbnN0IGY9bC52YWx1ZTtpZihmKXtsZXQgdj10aGlzLmhlYWRlcnMuZ2V0KGEpO2lmKCF2'@;
put 'KXJldHVybjt2PXYuZmlsdGVyKE09Pi0xPT09Zi5pbmRleE9mKE0pKSwwPT09di5sZW5ndGg/KHRoaXMuaGVhZGVycy5kZWxldGUoYSksdGhpcy5ub3JtYWxpemVkTmFtZXMuZGVsZXRlKGEpKTp0aGlzLmhlYWRlcnMuc2V0KGEsdil9ZWxzZSB0aGlzLmhlYWRlcnMuZGVsZXRlKGEpLHRoaXMu'@;
put 'bm9ybWFsaXplZE5hbWVzLmRlbGV0ZShhKX19c2V0SGVhZGVyRW50cmllcyhsLGEpe2NvbnN0IGQ9KEFycmF5LmlzQXJyYXkoYSk/YTpbYV0pLm1hcChmPT5mLnRvU3RyaW5nKCkpLGg9bC50b0xvd2VyQ2FzZSgpO3RoaXMuaGVhZGVycy5zZXQoaCxkKSx0aGlzLm1heWJlU2V0Tm9ybWFsaXpl'@;
put 'ZE5hbWUobCxoKX1mb3JFYWNoKGwpe3RoaXMuaW5pdCgpLEFycmF5LmZyb20odGhpcy5ub3JtYWxpemVkTmFtZXMua2V5cygpKS5mb3JFYWNoKGE9PmwodGhpcy5ub3JtYWxpemVkTmFtZXMuZ2V0KGEpLHRoaXMuaGVhZGVycy5nZXQoYSkpKX19Y2xhc3MgTFRle2VuY29kZUtleShsKXtyZXR1'@;
put 'cm4gdmNlKGwpfWVuY29kZVZhbHVlKGwpe3JldHVybiB2Y2UobCl9ZGVjb2RlS2V5KGwpe3JldHVybiBkZWNvZGVVUklDb21wb25lbnQobCl9ZGVjb2RlVmFsdWUobCl7cmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChsKX19Y29uc3QgUFRlPS8lKFxkW2EtZjAtOV0pL2dpLEZUZT17NDA6IkAi'@;
put 'LCIzQSI6IjoiLDI0OiIkIiwiMkMiOiIsIiwiM0IiOiI7IiwiM0QiOiI9IiwiM0YiOiI/IiwiMkYiOiIvIn07ZnVuY3Rpb24gdmNlKGMpe3JldHVybiBlbmNvZGVVUklDb21wb25lbnQoYykucmVwbGFjZShQVGUsKGwsYSk9PkZUZVthXT8/bCl9ZnVuY3Rpb24gWFIoYyl7cmV0dXJuYCR7Y31g'@;
put 'fWNsYXNzIHNte2NvbnN0cnVjdG9yKGw9e30pe2lmKHRoaXMudXBkYXRlcz1udWxsLHRoaXMuY2xvbmVGcm9tPW51bGwsdGhpcy5lbmNvZGVyPWwuZW5jb2Rlcnx8bmV3IExUZSxsLmZyb21TdHJpbmcpe2lmKGwuZnJvbU9iamVjdCl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBzcGVjaWZ5IGJv'@;
put 'dGggZnJvbVN0cmluZyBhbmQgZnJvbU9iamVjdC4iKTt0aGlzLm1hcD1mdW5jdGlvbiBPVGUoYyxsKXtjb25zdCBhPW5ldyBNYXA7cmV0dXJuIGMubGVuZ3RoPjAmJmMucmVwbGFjZSgvXlw/LywiIikuc3BsaXQoIiYiKS5mb3JFYWNoKGg9Pntjb25zdCBmPWguaW5kZXhPZigiPSIpLFt2LE1d'@;
put 'PS0xPT1mP1tsLmRlY29kZUtleShoKSwiIl06W2wuZGVjb2RlS2V5KGguc2xpY2UoMCxmKSksbC5kZWNvZGVWYWx1ZShoLnNsaWNlKGYrMSkpXSxEPWEuZ2V0KHYpfHxbXTtELnB1c2goTSksYS5zZXQodixEKX0pLGF9KGwuZnJvbVN0cmluZyx0aGlzLmVuY29kZXIpfWVsc2UgbC5mcm9tT2Jq'@;
put 'ZWN0Pyh0aGlzLm1hcD1uZXcgTWFwLE9iamVjdC5rZXlzKGwuZnJvbU9iamVjdCkuZm9yRWFjaChhPT57Y29uc3QgZD1sLmZyb21PYmplY3RbYV0saD1BcnJheS5pc0FycmF5KGQpP2QubWFwKFhSKTpbWFIoZCldO3RoaXMubWFwLnNldChhLGgpfSkpOnRoaXMubWFwPW51bGx9aGFzKGwpe3Jl'@;
put 'dHVybiB0aGlzLmluaXQoKSx0aGlzLm1hcC5oYXMobCl9Z2V0KGwpe3RoaXMuaW5pdCgpO2NvbnN0IGE9dGhpcy5tYXAuZ2V0KGwpO3JldHVybiBhP2FbMF06bnVsbH1nZXRBbGwobCl7cmV0dXJuIHRoaXMuaW5pdCgpLHRoaXMubWFwLmdldChsKXx8bnVsbH1rZXlzKCl7cmV0dXJuIHRoaXMu'@;
put 'aW5pdCgpLEFycmF5LmZyb20odGhpcy5tYXAua2V5cygpKX1hcHBlbmQobCxhKXtyZXR1cm4gdGhpcy5jbG9uZSh7cGFyYW06bCx2YWx1ZTphLG9wOiJhIn0pfWFwcGVuZEFsbChsKXtjb25zdCBhPVtdO3JldHVybiBPYmplY3Qua2V5cyhsKS5mb3JFYWNoKGQ9Pntjb25zdCBoPWxbZF07QXJy'@;
put 'YXkuaXNBcnJheShoKT9oLmZvckVhY2goZj0+e2EucHVzaCh7cGFyYW06ZCx2YWx1ZTpmLG9wOiJhIn0pfSk6YS5wdXNoKHtwYXJhbTpkLHZhbHVlOmgsb3A6ImEifSl9KSx0aGlzLmNsb25lKGEpfXNldChsLGEpe3JldHVybiB0aGlzLmNsb25lKHtwYXJhbTpsLHZhbHVlOmEsb3A6InMifSl9'@;
put 'ZGVsZXRlKGwsYSl7cmV0dXJuIHRoaXMuY2xvbmUoe3BhcmFtOmwsdmFsdWU6YSxvcDoiZCJ9KX10b1N0cmluZygpe3JldHVybiB0aGlzLmluaXQoKSx0aGlzLmtleXMoKS5tYXAobD0+e2NvbnN0IGE9dGhpcy5lbmNvZGVyLmVuY29kZUtleShsKTtyZXR1cm4gdGhpcy5tYXAuZ2V0KGwpLm1h'@;
put 'cChkPT5hKyI9Iit0aGlzLmVuY29kZXIuZW5jb2RlVmFsdWUoZCkpLmpvaW4oIiYiKX0pLmZpbHRlcihsPT4iIiE9PWwpLmpvaW4oIiYiKX1jbG9uZShsKXtjb25zdCBhPW5ldyBzbSh7ZW5jb2Rlcjp0aGlzLmVuY29kZXJ9KTtyZXR1cm4gYS5jbG9uZUZyb209dGhpcy5jbG9uZUZyb218fHRo'@;
put 'aXMsYS51cGRhdGVzPSh0aGlzLnVwZGF0ZXN8fFtdKS5jb25jYXQobCksYX1pbml0KCl7bnVsbD09PXRoaXMubWFwJiYodGhpcy5tYXA9bmV3IE1hcCksbnVsbCE9PXRoaXMuY2xvbmVGcm9tJiYodGhpcy5jbG9uZUZyb20uaW5pdCgpLHRoaXMuY2xvbmVGcm9tLmtleXMoKS5mb3JFYWNoKGw9'@;
put 'PnRoaXMubWFwLnNldChsLHRoaXMuY2xvbmVGcm9tLm1hcC5nZXQobCkpKSx0aGlzLnVwZGF0ZXMuZm9yRWFjaChsPT57c3dpdGNoKGwub3Ape2Nhc2UiYSI6Y2FzZSJzIjpjb25zdCBhPSgiYSI9PT1sLm9wP3RoaXMubWFwLmdldChsLnBhcmFtKTp2b2lkIDApfHxbXTthLnB1c2goWFIobC52'@;
put 'YWx1ZSkpLHRoaXMubWFwLnNldChsLnBhcmFtLGEpO2JyZWFrO2Nhc2UiZCI6aWYodm9pZCAwPT09bC52YWx1ZSl7dGhpcy5tYXAuZGVsZXRlKGwucGFyYW0pO2JyZWFrfXtsZXQgZD10aGlzLm1hcC5nZXQobC5wYXJhbSl8fFtdO2NvbnN0IGg9ZC5pbmRleE9mKFhSKGwudmFsdWUpKTstMSE9'@;
put 'PWgmJmQuc3BsaWNlKGgsMSksZC5sZW5ndGg+MD90aGlzLm1hcC5zZXQobC5wYXJhbSxkKTp0aGlzLm1hcC5kZWxldGUobC5wYXJhbSl9fX0pLHRoaXMuY2xvbmVGcm9tPXRoaXMudXBkYXRlcz1udWxsKX19Y2xhc3MgSFRle2NvbnN0cnVjdG9yKCl7dGhpcy5tYXA9bmV3IE1hcH1zZXQobCxh'@;
put 'KXtyZXR1cm4gdGhpcy5tYXAuc2V0KGwsYSksdGhpc31nZXQobCl7cmV0dXJuIHRoaXMubWFwLmhhcyhsKXx8dGhpcy5tYXAuc2V0KGwsbC5kZWZhdWx0VmFsdWUoKSksdGhpcy5tYXAuZ2V0KGwpfWRlbGV0ZShsKXtyZXR1cm4gdGhpcy5tYXAuZGVsZXRlKGwpLHRoaXN9aGFzKGwpe3JldHVy'@;
put 'biB0aGlzLm1hcC5oYXMobCl9a2V5cygpe3JldHVybiB0aGlzLm1hcC5rZXlzKCl9fWZ1bmN0aW9uIGJjZShjKXtyZXR1cm4gdHlwZW9mIEFycmF5QnVmZmVyPCJ1IiYmYyBpbnN0YW5jZW9mIEFycmF5QnVmZmVyfWZ1bmN0aW9uIHljZShjKXtyZXR1cm4gdHlwZW9mIEJsb2I8InUiJiZjIGlu'@;
put 'c3RhbmNlb2YgQmxvYn1mdW5jdGlvbiBfY2UoYyl7cmV0dXJuIHR5cGVvZiBGb3JtRGF0YTwidSImJmMgaW5zdGFuY2VvZiBGb3JtRGF0YX1jbGFzcyByeHtjb25zdHJ1Y3RvcihsLGEsZCxoKXtsZXQgZjtpZih0aGlzLnVybD1hLHRoaXMuYm9keT1udWxsLHRoaXMucmVwb3J0UHJvZ3Jlc3M9'@;
put 'ITEsdGhpcy53aXRoQ3JlZGVudGlhbHM9ITEsdGhpcy5yZXNwb25zZVR5cGU9Impzb24iLHRoaXMubWV0aG9kPWwudG9VcHBlckNhc2UoKSxmdW5jdGlvbiBOVGUoYyl7c3dpdGNoKGMpe2Nhc2UiREVMRVRFIjpjYXNlIkdFVCI6Y2FzZSJIRUFEIjpjYXNlIk9QVElPTlMiOmNhc2UiSlNPTlAi'@;
put 'OnJldHVybiExO2RlZmF1bHQ6cmV0dXJuITB9fSh0aGlzLm1ldGhvZCl8fGg/KHRoaXMuYm9keT12b2lkIDAhPT1kP2Q6bnVsbCxmPWgpOmY9ZCxmJiYodGhpcy5yZXBvcnRQcm9ncmVzcz0hIWYucmVwb3J0UHJvZ3Jlc3MsdGhpcy53aXRoQ3JlZGVudGlhbHM9ISFmLndpdGhDcmVkZW50aWFs'@;
put 'cyxmLnJlc3BvbnNlVHlwZSYmKHRoaXMucmVzcG9uc2VUeXBlPWYucmVzcG9uc2VUeXBlKSxmLmhlYWRlcnMmJih0aGlzLmhlYWRlcnM9Zi5oZWFkZXJzKSxmLmNvbnRleHQmJih0aGlzLmNvbnRleHQ9Zi5jb250ZXh0KSxmLnBhcmFtcyYmKHRoaXMucGFyYW1zPWYucGFyYW1zKSx0aGlzLnRy'@;
put 'YW5zZmVyQ2FjaGU9Zi50cmFuc2ZlckNhY2hlKSx0aGlzLmhlYWRlcnM/Pz1uZXcgRTIsdGhpcy5jb250ZXh0Pz89bmV3IEhUZSx0aGlzLnBhcmFtcyl7Y29uc3Qgdj10aGlzLnBhcmFtcy50b1N0cmluZygpO2lmKDA9PT12Lmxlbmd0aCl0aGlzLnVybFdpdGhQYXJhbXM9YTtlbHNle2NvbnN0'@;
put 'IE09YS5pbmRleE9mKCI/Iik7dGhpcy51cmxXaXRoUGFyYW1zPWErKC0xPT09TT8iPyI6TTxhLmxlbmd0aC0xPyImIjoiIikrdn19ZWxzZSB0aGlzLnBhcmFtcz1uZXcgc20sdGhpcy51cmxXaXRoUGFyYW1zPWF9c2VyaWFsaXplQm9keSgpe3JldHVybiBudWxsPT09dGhpcy5ib2R5P251bGw6'@;
put 'InN0cmluZyI9PXR5cGVvZiB0aGlzLmJvZHl8fGJjZSh0aGlzLmJvZHkpfHx5Y2UodGhpcy5ib2R5KXx8X2NlKHRoaXMuYm9keSl8fGZ1bmN0aW9uIFZUZShjKXtyZXR1cm4gdHlwZW9mIFVSTFNlYXJjaFBhcmFtczwidSImJmMgaW5zdGFuY2VvZiBVUkxTZWFyY2hQYXJhbXN9KHRoaXMuYm9k'@;
put 'eSk/dGhpcy5ib2R5OnRoaXMuYm9keSBpbnN0YW5jZW9mIHNtP3RoaXMuYm9keS50b1N0cmluZygpOiJvYmplY3QiPT10eXBlb2YgdGhpcy5ib2R5fHwiYm9vbGVhbiI9PXR5cGVvZiB0aGlzLmJvZHl8fEFycmF5LmlzQXJyYXkodGhpcy5ib2R5KT9KU09OLnN0cmluZ2lmeSh0aGlzLmJvZHkp'@;
put 'OnRoaXMuYm9keS50b1N0cmluZygpfWRldGVjdENvbnRlbnRUeXBlSGVhZGVyKCl7cmV0dXJuIG51bGw9PT10aGlzLmJvZHl8fF9jZSh0aGlzLmJvZHkpP251bGw6eWNlKHRoaXMuYm9keSk/dGhpcy5ib2R5LnR5cGV8fG51bGw6YmNlKHRoaXMuYm9keSk/bnVsbDoic3RyaW5nIj09dHlwZW9m'@;
put 'IHRoaXMuYm9keT8idGV4dC9wbGFpbiI6dGhpcy5ib2R5IGluc3RhbmNlb2Ygc20/ImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDtjaGFyc2V0PVVURi04Ijoib2JqZWN0Ij09dHlwZW9mIHRoaXMuYm9keXx8Im51bWJlciI9PXR5cGVvZiB0aGlzLmJvZHl8fCJib29sZWFuIj09'@;
put 'dHlwZW9mIHRoaXMuYm9keT8iYXBwbGljYXRpb24vanNvbiI6bnVsbH1jbG9uZShsPXt9KXtjb25zdCBhPWwubWV0aG9kfHx0aGlzLm1ldGhvZCxkPWwudXJsfHx0aGlzLnVybCxoPWwucmVzcG9uc2VUeXBlfHx0aGlzLnJlc3BvbnNlVHlwZSxmPWwudHJhbnNmZXJDYWNoZT8/dGhpcy50cmFu'@;
put 'c2ZlckNhY2hlLHY9dm9pZCAwIT09bC5ib2R5P2wuYm9keTp0aGlzLmJvZHksTT1sLndpdGhDcmVkZW50aWFscz8/dGhpcy53aXRoQ3JlZGVudGlhbHMsRD1sLnJlcG9ydFByb2dyZXNzPz90aGlzLnJlcG9ydFByb2dyZXNzO2xldCBaPWwuaGVhZGVyc3x8dGhpcy5oZWFkZXJzLHJlPWwucGFy'@;
put 'YW1zfHx0aGlzLnBhcmFtcztjb25zdCBjZT1sLmNvbnRleHQ/P3RoaXMuY29udGV4dDtyZXR1cm4gdm9pZCAwIT09bC5zZXRIZWFkZXJzJiYoWj1PYmplY3Qua2V5cyhsLnNldEhlYWRlcnMpLnJlZHVjZSgoYmUsRWUpPT5iZS5zZXQoRWUsbC5zZXRIZWFkZXJzW0VlXSksWikpLGwuc2V0UGFy'@;
put 'YW1zJiYocmU9T2JqZWN0LmtleXMobC5zZXRQYXJhbXMpLnJlZHVjZSgoYmUsRWUpPT5iZS5zZXQoRWUsbC5zZXRQYXJhbXNbRWVdKSxyZSkpLG5ldyByeChhLGQsdix7cGFyYW1zOnJlLGhlYWRlcnM6Wixjb250ZXh0OmNlLHJlcG9ydFByb2dyZXNzOkQscmVzcG9uc2VUeXBlOmgsd2l0aENy'@;
put 'ZWRlbnRpYWxzOk0sdHJhbnNmZXJDYWNoZTpmfSl9fXZhciBsbT1mdW5jdGlvbihjKXtyZXR1cm4gY1tjLlNlbnQ9MF09IlNlbnQiLGNbYy5VcGxvYWRQcm9ncmVzcz0xXT0iVXBsb2FkUHJvZ3Jlc3MiLGNbYy5SZXNwb25zZUhlYWRlcj0yXT0iUmVzcG9uc2VIZWFkZXIiLGNbYy5Eb3dubG9h'@;
put 'ZFByb2dyZXNzPTNdPSJEb3dubG9hZFByb2dyZXNzIixjW2MuUmVzcG9uc2U9NF09IlJlc3BvbnNlIixjW2MuVXNlcj01XT0iVXNlciIsY30obG18fHt9KTtjbGFzcyB3V3tjb25zdHJ1Y3RvcihsLGE9aXguT2ssZD0iT0siKXt0aGlzLmhlYWRlcnM9bC5oZWFkZXJzfHxuZXcgRTIsdGhpcy5z'@;
put 'dGF0dXM9dm9pZCAwIT09bC5zdGF0dXM/bC5zdGF0dXM6YSx0aGlzLnN0YXR1c1RleHQ9bC5zdGF0dXNUZXh0fHxkLHRoaXMudXJsPWwudXJsfHxudWxsLHRoaXMub2s9dGhpcy5zdGF0dXM+PTIwMCYmdGhpcy5zdGF0dXM8MzAwfX1jbGFzcyBKUiBleHRlbmRzIHdXe2NvbnN0cnVjdG9yKGw9'@;
put 'e30pe3N1cGVyKGwpLHRoaXMudHlwZT1sbS5SZXNwb25zZUhlYWRlcn1jbG9uZShsPXt9KXtyZXR1cm4gbmV3IEpSKHtoZWFkZXJzOmwuaGVhZGVyc3x8dGhpcy5oZWFkZXJzLHN0YXR1czp2b2lkIDAhPT1sLnN0YXR1cz9sLnN0YXR1czp0aGlzLnN0YXR1cyxzdGF0dXNUZXh0Omwuc3RhdHVz'@;
put 'VGV4dHx8dGhpcy5zdGF0dXNUZXh0LHVybDpsLnVybHx8dGhpcy51cmx8fHZvaWQgMH0pfX1jbGFzcyBlNyBleHRlbmRzIHdXe2NvbnN0cnVjdG9yKGw9e30pe3N1cGVyKGwpLHRoaXMudHlwZT1sbS5SZXNwb25zZSx0aGlzLmJvZHk9dm9pZCAwIT09bC5ib2R5P2wuYm9keTpudWxsfWNsb25l'@;
put 'KGw9e30pe3JldHVybiBuZXcgZTcoe2JvZHk6dm9pZCAwIT09bC5ib2R5P2wuYm9keTp0aGlzLmJvZHksaGVhZGVyczpsLmhlYWRlcnN8fHRoaXMuaGVhZGVycyxzdGF0dXM6dm9pZCAwIT09bC5zdGF0dXM/bC5zdGF0dXM6dGhpcy5zdGF0dXMsc3RhdHVzVGV4dDpsLnN0YXR1c1RleHR8fHRo'@;
put 'aXMuc3RhdHVzVGV4dCx1cmw6bC51cmx8fHRoaXMudXJsfHx2b2lkIDB9KX19Y2xhc3MgbXkgZXh0ZW5kcyB3V3tjb25zdHJ1Y3RvcihsKXtzdXBlcihsLDAsIlVua25vd24gRXJyb3IiKSx0aGlzLm5hbWU9Ikh0dHBFcnJvclJlc3BvbnNlIix0aGlzLm9rPSExLHRoaXMubWVzc2FnZT10aGlz'@;
put 'LnN0YXR1cz49MjAwJiZ0aGlzLnN0YXR1czwzMDA/YEh0dHAgZmFpbHVyZSBkdXJpbmcgcGFyc2luZyBmb3IgJHtsLnVybHx8Iih1bmtub3duIHVybCkifWA6YEh0dHAgZmFpbHVyZSByZXNwb25zZSBmb3IgJHtsLnVybHx8Iih1bmtub3duIHVybCkifTogJHtsLnN0YXR1c30gJHtsLnN0YXR1'@;
put 'c1RleHR9YCx0aGlzLmVycm9yPWwuZXJyb3J8fG51bGx9fXZhciBpeD1mdW5jdGlvbihjKXtyZXR1cm4gY1tjLkNvbnRpbnVlPTEwMF09IkNvbnRpbnVlIixjW2MuU3dpdGNoaW5nUHJvdG9jb2xzPTEwMV09IlN3aXRjaGluZ1Byb3RvY29scyIsY1tjLlByb2Nlc3Npbmc9MTAyXT0iUHJvY2Vz'@;
put 'c2luZyIsY1tjLkVhcmx5SGludHM9MTAzXT0iRWFybHlIaW50cyIsY1tjLk9rPTIwMF09Ik9rIixjW2MuQ3JlYXRlZD0yMDFdPSJDcmVhdGVkIixjW2MuQWNjZXB0ZWQ9MjAyXT0iQWNjZXB0ZWQiLGNbYy5Ob25BdXRob3JpdGF0aXZlSW5mb3JtYXRpb249MjAzXT0iTm9uQXV0aG9yaXRhdGl2'@;
put 'ZUluZm9ybWF0aW9uIixjW2MuTm9Db250ZW50PTIwNF09Ik5vQ29udGVudCIsY1tjLlJlc2V0Q29udGVudD0yMDVdPSJSZXNldENvbnRlbnQiLGNbYy5QYXJ0aWFsQ29udGVudD0yMDZdPSJQYXJ0aWFsQ29udGVudCIsY1tjLk11bHRpU3RhdHVzPTIwN109Ik11bHRpU3RhdHVzIixjW2MuQWxy'@;
put 'ZWFkeVJlcG9ydGVkPTIwOF09IkFscmVhZHlSZXBvcnRlZCIsY1tjLkltVXNlZD0yMjZdPSJJbVVzZWQiLGNbYy5NdWx0aXBsZUNob2ljZXM9MzAwXT0iTXVsdGlwbGVDaG9pY2VzIixjW2MuTW92ZWRQZXJtYW5lbnRseT0zMDFdPSJNb3ZlZFBlcm1hbmVudGx5IixjW2MuRm91bmQ9MzAyXT0i'@;
put 'Rm91bmQiLGNbYy5TZWVPdGhlcj0zMDNdPSJTZWVPdGhlciIsY1tjLk5vdE1vZGlmaWVkPTMwNF09Ik5vdE1vZGlmaWVkIixjW2MuVXNlUHJveHk9MzA1XT0iVXNlUHJveHkiLGNbYy5VbnVzZWQ9MzA2XT0iVW51c2VkIixjW2MuVGVtcG9yYXJ5UmVkaXJlY3Q9MzA3XT0iVGVtcG9yYXJ5UmVk'@;
put 'aXJlY3QiLGNbYy5QZXJtYW5lbnRSZWRpcmVjdD0zMDhdPSJQZXJtYW5lbnRSZWRpcmVjdCIsY1tjLkJhZFJlcXVlc3Q9NDAwXT0iQmFkUmVxdWVzdCIsY1tjLlVuYXV0aG9yaXplZD00MDFdPSJVbmF1dGhvcml6ZWQiLGNbYy5QYXltZW50UmVxdWlyZWQ9NDAyXT0iUGF5bWVudFJlcXVpcmVk'@;
put 'IixjW2MuRm9yYmlkZGVuPTQwM109IkZvcmJpZGRlbiIsY1tjLk5vdEZvdW5kPTQwNF09Ik5vdEZvdW5kIixjW2MuTWV0aG9kTm90QWxsb3dlZD00MDVdPSJNZXRob2ROb3RBbGxvd2VkIixjW2MuTm90QWNjZXB0YWJsZT00MDZdPSJOb3RBY2NlcHRhYmxlIixjW2MuUHJveHlBdXRoZW50aWNh'@;
put 'dGlvblJlcXVpcmVkPTQwN109IlByb3h5QXV0aGVudGljYXRpb25SZXF1aXJlZCIsY1tjLlJlcXVlc3RUaW1lb3V0PTQwOF09IlJlcXVlc3RUaW1lb3V0IixjW2MuQ29uZmxpY3Q9NDA5XT0iQ29uZmxpY3QiLGNbYy5Hb25lPTQxMF09IkdvbmUiLGNbYy5MZW5ndGhSZXF1aXJlZD00MTFdPSJM'@;
put 'ZW5ndGhSZXF1aXJlZCIsY1tjLlByZWNvbmRpdGlvbkZhaWxlZD00MTJdPSJQcmVjb25kaXRpb25GYWlsZWQiLGNbYy5QYXlsb2FkVG9vTGFyZ2U9NDEzXT0iUGF5bG9hZFRvb0xhcmdlIixjW2MuVXJpVG9vTG9uZz00MTRdPSJVcmlUb29Mb25nIixjW2MuVW5zdXBwb3J0ZWRNZWRpYVR5cGU9'@;
put 'NDE1XT0iVW5zdXBwb3J0ZWRNZWRpYVR5cGUiLGNbYy5SYW5nZU5vdFNhdGlzZmlhYmxlPTQxNl09IlJhbmdlTm90U2F0aXNmaWFibGUiLGNbYy5FeHBlY3RhdGlvbkZhaWxlZD00MTddPSJFeHBlY3RhdGlvbkZhaWxlZCIsY1tjLkltQVRlYXBvdD00MThdPSJJbUFUZWFwb3QiLGNbYy5NaXNk'@;
put 'aXJlY3RlZFJlcXVlc3Q9NDIxXT0iTWlzZGlyZWN0ZWRSZXF1ZXN0IixjW2MuVW5wcm9jZXNzYWJsZUVudGl0eT00MjJdPSJVbnByb2Nlc3NhYmxlRW50aXR5IixjW2MuTG9ja2VkPTQyM109IkxvY2tlZCIsY1tjLkZhaWxlZERlcGVuZGVuY3k9NDI0XT0iRmFpbGVkRGVwZW5kZW5jeSIsY1tj'@;
put 'LlRvb0Vhcmx5PTQyNV09IlRvb0Vhcmx5IixjW2MuVXBncmFkZVJlcXVpcmVkPTQyNl09IlVwZ3JhZGVSZXF1aXJlZCIsY1tjLlByZWNvbmRpdGlvblJlcXVpcmVkPTQyOF09IlByZWNvbmRpdGlvblJlcXVpcmVkIixjW2MuVG9vTWFueVJlcXVlc3RzPTQyOV09IlRvb01hbnlSZXF1ZXN0cyIs'@;
put 'Y1tjLlJlcXVlc3RIZWFkZXJGaWVsZHNUb29MYXJnZT00MzFdPSJSZXF1ZXN0SGVhZGVyRmllbGRzVG9vTGFyZ2UiLGNbYy5VbmF2YWlsYWJsZUZvckxlZ2FsUmVhc29ucz00NTFdPSJVbmF2YWlsYWJsZUZvckxlZ2FsUmVhc29ucyIsY1tjLkludGVybmFsU2VydmVyRXJyb3I9NTAwXT0iSW50'@;
put 'ZXJuYWxTZXJ2ZXJFcnJvciIsY1tjLk5vdEltcGxlbWVudGVkPTUwMV09Ik5vdEltcGxlbWVudGVkIixjW2MuQmFkR2F0ZXdheT01MDJdPSJCYWRHYXRld2F5IixjW2MuU2VydmljZVVuYXZhaWxhYmxlPTUwM109IlNlcnZpY2VVbmF2YWlsYWJsZSIsY1tjLkdhdGV3YXlUaW1lb3V0PTUwNF09'@;
put 'IkdhdGV3YXlUaW1lb3V0IixjW2MuSHR0cFZlcnNpb25Ob3RTdXBwb3J0ZWQ9NTA1XT0iSHR0cFZlcnNpb25Ob3RTdXBwb3J0ZWQiLGNbYy5WYXJpYW50QWxzb05lZ290aWF0ZXM9NTA2XT0iVmFyaWFudEFsc29OZWdvdGlhdGVzIixjW2MuSW5zdWZmaWNpZW50U3RvcmFnZT01MDddPSJJbnN1'@;
put 'ZmZpY2llbnRTdG9yYWdlIixjW2MuTG9vcERldGVjdGVkPTUwOF09Ikxvb3BEZXRlY3RlZCIsY1tjLk5vdEV4dGVuZGVkPTUxMF09Ik5vdEV4dGVuZGVkIixjW2MuTmV0d29ya0F1dGhlbnRpY2F0aW9uUmVxdWlyZWQ9NTExXT0iTmV0d29ya0F1dGhlbnRpY2F0aW9uUmVxdWlyZWQiLGN9KGl4'@;
put 'fHx7fSk7ZnVuY3Rpb24gQ1coYyxsKXtyZXR1cm57Ym9keTpsLGhlYWRlcnM6Yy5oZWFkZXJzLGNvbnRleHQ6Yy5jb250ZXh0LG9ic2VydmU6Yy5vYnNlcnZlLHBhcmFtczpjLnBhcmFtcyxyZXBvcnRQcm9ncmVzczpjLnJlcG9ydFByb2dyZXNzLHJlc3BvbnNlVHlwZTpjLnJlc3BvbnNlVHlw'@;
put 'ZSx3aXRoQ3JlZGVudGlhbHM6Yy53aXRoQ3JlZGVudGlhbHMsdHJhbnNmZXJDYWNoZTpjLnRyYW5zZmVyQ2FjaGV9fWxldCBTVz0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMuaGFuZGxlcj1hfXJlcXVlc3QoYSxkLGg9e30pe2xldCBmO2lmKGEgaW5zdGFuY2VvZiByeClmPWE7'@;
put 'ZWxzZXtsZXQgRCxaO0Q9aC5oZWFkZXJzIGluc3RhbmNlb2YgRTI/aC5oZWFkZXJzOm5ldyBFMihoLmhlYWRlcnMpLGgucGFyYW1zJiYoWj1oLnBhcmFtcyBpbnN0YW5jZW9mIHNtP2gucGFyYW1zOm5ldyBzbSh7ZnJvbU9iamVjdDpoLnBhcmFtc30pKSxmPW5ldyByeChhLGQsdm9pZCAwIT09'@;
put 'aC5ib2R5P2guYm9keTpudWxsLHtoZWFkZXJzOkQsY29udGV4dDpoLmNvbnRleHQscGFyYW1zOloscmVwb3J0UHJvZ3Jlc3M6aC5yZXBvcnRQcm9ncmVzcyxyZXNwb25zZVR5cGU6aC5yZXNwb25zZVR5cGV8fCJqc29uIix3aXRoQ3JlZGVudGlhbHM6aC53aXRoQ3JlZGVudGlhbHMsdHJhbnNm'@;
put 'ZXJDYWNoZTpoLnRyYW5zZmVyQ2FjaGV9KX1jb25zdCB2PWZvKGYpLnBpcGUodHkoRD0+dGhpcy5oYW5kbGVyLmhhbmRsZShEKSkpO2lmKGEgaW5zdGFuY2VvZiByeHx8ImV2ZW50cyI9PT1oLm9ic2VydmUpcmV0dXJuIHY7Y29uc3QgTT12LnBpcGUoJGwoRD0+RCBpbnN0YW5jZW9mIGU3KSk7'@;
put 'c3dpdGNoKGgub2JzZXJ2ZXx8ImJvZHkiKXtjYXNlImJvZHkiOnN3aXRjaChmLnJlc3BvbnNlVHlwZSl7Y2FzZSJhcnJheWJ1ZmZlciI6cmV0dXJuIE0ucGlwZShMcihEPT57aWYobnVsbCE9PUQuYm9keSYmIShELmJvZHkgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikpdGhyb3cgbmV3IEVycm9y'@;
put 'KCJSZXNwb25zZSBpcyBub3QgYW4gQXJyYXlCdWZmZXIuIik7cmV0dXJuIEQuYm9keX0pKTtjYXNlImJsb2IiOnJldHVybiBNLnBpcGUoTHIoRD0+e2lmKG51bGwhPT1ELmJvZHkmJiEoRC5ib2R5IGluc3RhbmNlb2YgQmxvYikpdGhyb3cgbmV3IEVycm9yKCJSZXNwb25zZSBpcyBub3QgYSBC'@;
put 'bG9iLiIpO3JldHVybiBELmJvZHl9KSk7Y2FzZSJ0ZXh0IjpyZXR1cm4gTS5waXBlKExyKEQ9PntpZihudWxsIT09RC5ib2R5JiYic3RyaW5nIiE9dHlwZW9mIEQuYm9keSl0aHJvdyBuZXcgRXJyb3IoIlJlc3BvbnNlIGlzIG5vdCBhIHN0cmluZy4iKTtyZXR1cm4gRC5ib2R5fSkpO2RlZmF1'@;
put 'bHQ6cmV0dXJuIE0ucGlwZShMcihEPT5ELmJvZHkpKX1jYXNlInJlc3BvbnNlIjpyZXR1cm4gTTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcihgVW5yZWFjaGFibGU6IHVuaGFuZGxlZCBvYnNlcnZlIHR5cGUgJHtoLm9ic2VydmV9fWApfX1kZWxldGUoYSxkPXt9KXtyZXR1cm4gdGhpcy5yZXF1'@;
put 'ZXN0KCJERUxFVEUiLGEsZCl9Z2V0KGEsZD17fSl7cmV0dXJuIHRoaXMucmVxdWVzdCgiR0VUIixhLGQpfWhlYWQoYSxkPXt9KXtyZXR1cm4gdGhpcy5yZXF1ZXN0KCJIRUFEIixhLGQpfWpzb25wKGEsZCl7cmV0dXJuIHRoaXMucmVxdWVzdCgiSlNPTlAiLGEse3BhcmFtczoobmV3IHNtKS5h'@;
put 'cHBlbmQoZCwiSlNPTlBfQ0FMTEJBQ0siKSxvYnNlcnZlOiJib2R5IixyZXNwb25zZVR5cGU6Impzb24ifSl9b3B0aW9ucyhhLGQ9e30pe3JldHVybiB0aGlzLnJlcXVlc3QoIk9QVElPTlMiLGEsZCl9cGF0Y2goYSxkLGg9e30pe3JldHVybiB0aGlzLnJlcXVlc3QoIlBBVENIIixhLENXKGgs'@;
put 'ZCkpfXBvc3QoYSxkLGg9e30pe3JldHVybiB0aGlzLnJlcXVlc3QoIlBPU1QiLGEsQ1coaCxkKSl9cHV0KGEsZCxoPXt9KXtyZXR1cm4gdGhpcy5yZXF1ZXN0KCJQVVQiLGEsQ1coaCxkKSl9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoeHIoS1Ip'@;
put 'KX19c3RhdGlje3RoaXMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSl9fXJldHVybiBjfSkoKTtmdW5jdGlvbiBDY2UoYyxsKXtyZXR1cm4gbChjKX1mdW5jdGlvbiBaVGUoYyxsKXtyZXR1cm4oYSxkKT0+bC5pbnRlcmNlcHQoYSx7aGFuZGxlOmg9PmMoaCxk'@;
put 'KX0pfWNvbnN0IFlUZT1uZXcgU3QoIiIpLGF4PW5ldyBTdCgiIiksU2NlPW5ldyBTdCgiIiksTWNlPW5ldyBTdCgiIik7ZnVuY3Rpb24gR1RlKCl7bGV0IGM9bnVsbDtyZXR1cm4obCxhKT0+e251bGw9PT1jJiYoYz0oZmkoWVRlLHtvcHRpb25hbDohMH0pPz9bXSkucmVkdWNlUmlnaHQoWlRl'@;
put 'LENjZSkpO2NvbnN0IGQ9ZmkoUGYpLGg9ZC5hZGQoKTtyZXR1cm4gYyhsLGEpLnBpcGUoVU0oKCk9PmQucmVtb3ZlKGgpKSl9fWxldCB4Y2U9KCgpPT57Y2xhc3MgYyBleHRlbmRzIEtSe2NvbnN0cnVjdG9yKGEsZCl7c3VwZXIoKSx0aGlzLmJhY2tlbmQ9YSx0aGlzLmluamVjdG9yPWQsdGhp'@;
put 'cy5jaGFpbj1udWxsLHRoaXMucGVuZGluZ1Rhc2tzPWZpKFBmKTtjb25zdCBoPWZpKE1jZSx7b3B0aW9uYWw6ITB9KTt0aGlzLmJhY2tlbmQ9aD8/YX1oYW5kbGUoYSl7aWYobnVsbD09PXRoaXMuY2hhaW4pe2NvbnN0IGg9QXJyYXkuZnJvbShuZXcgU2V0KFsuLi50aGlzLmluamVjdG9yLmdl'@;
put 'dChheCksLi4udGhpcy5pbmplY3Rvci5nZXQoU2NlLFtdKV0pKTt0aGlzLmNoYWluPWgucmVkdWNlUmlnaHQoKGYsdik9PmZ1bmN0aW9uIFdUZShjLGwsYSl7cmV0dXJuKGQsaCk9PnEwKGEsKCk9PmwoZCxmPT5jKGYsaCkpKX0oZix2LHRoaXMuaW5qZWN0b3IpLENjZSl9Y29uc3QgZD10aGlz'@;
put 'LnBlbmRpbmdUYXNrcy5hZGQoKTtyZXR1cm4gdGhpcy5jaGFpbihhLGg9PnRoaXMuYmFja2VuZC5oYW5kbGUoaCkpLnBpcGUoVU0oKCk9PnRoaXMucGVuZGluZ1Rhc2tzLnJlbW92ZShkKSkpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKHhyKHFS'@;
put 'KSx4cihoYykpfX1zdGF0aWN7dGhpcy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KX19cmV0dXJuIGN9KSgpO2NvbnN0IEpUZT0vXlwpXF1cfScsP1xuLztsZXQgVGNlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy54aHJGYWN0b3J5PWF9aGFu'@;
put 'ZGxlKGEpe2lmKCJKU09OUCI9PT1hLm1ldGhvZCl0aHJvdyBuZXcgUW4oLTI4MDAsITEpO2NvbnN0IGQ9dGhpcy54aHJGYWN0b3J5O3JldHVybihkLlx1MDI3NWxvYWRJbXBsP1l1KGQuXHUwMjc1bG9hZEltcGwoKSk6Zm8obnVsbCkpLnBpcGUoVjEoKCk9Pm5ldyBYdChmPT57Y29uc3Qgdj1k'@;
put 'LmJ1aWxkKCk7aWYodi5vcGVuKGEubWV0aG9kLGEudXJsV2l0aFBhcmFtcyksYS53aXRoQ3JlZGVudGlhbHMmJih2LndpdGhDcmVkZW50aWFscz0hMCksYS5oZWFkZXJzLmZvckVhY2goKHFlLHJ0KT0+di5zZXRSZXF1ZXN0SGVhZGVyKHFlLHJ0LmpvaW4oIiwiKSkpLGEuaGVhZGVycy5oYXMo'@;
put 'IkFjY2VwdCIpfHx2LnNldFJlcXVlc3RIZWFkZXIoIkFjY2VwdCIsImFwcGxpY2F0aW9uL2pzb24sIHRleHQvcGxhaW4sICovKiIpLCFhLmhlYWRlcnMuaGFzKCJDb250ZW50LVR5cGUiKSl7Y29uc3QgcWU9YS5kZXRlY3RDb250ZW50VHlwZUhlYWRlcigpO251bGwhPT1xZSYmdi5zZXRSZXF1'@;
put 'ZXN0SGVhZGVyKCJDb250ZW50LVR5cGUiLHFlKX1pZihhLnJlc3BvbnNlVHlwZSl7Y29uc3QgcWU9YS5yZXNwb25zZVR5cGUudG9Mb3dlckNhc2UoKTt2LnJlc3BvbnNlVHlwZT0ianNvbiIhPT1xZT9xZToidGV4dCJ9Y29uc3QgTT1hLnNlcmlhbGl6ZUJvZHkoKTtsZXQgRD1udWxsO2NvbnN0'@;
put 'IFo9KCk9PntpZihudWxsIT09RClyZXR1cm4gRDtjb25zdCBxZT12LnN0YXR1c1RleHR8fCJPSyIscnQ9bmV3IEUyKHYuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCkpLHB0PWZ1bmN0aW9uIFFUZShjKXtyZXR1cm4icmVzcG9uc2VVUkwiaW4gYyYmYy5yZXNwb25zZVVSTD9jLnJlc3BvbnNlVVJM'@;
put 'Oi9eWC1SZXF1ZXN0LVVSTDovbS50ZXN0KGMuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCkpP2MuZ2V0UmVzcG9uc2VIZWFkZXIoIlgtUmVxdWVzdC1VUkwiKTpudWxsfSh2KXx8YS51cmw7cmV0dXJuIEQ9bmV3IEpSKHtoZWFkZXJzOnJ0LHN0YXR1czp2LnN0YXR1cyxzdGF0dXNUZXh0OnFlLHVy'@;
put 'bDpwdH0pLER9LHJlPSgpPT57bGV0e2hlYWRlcnM6cWUsc3RhdHVzOnJ0LHN0YXR1c1RleHQ6cHQsdXJsOmR0fT1aKCksSnQ9bnVsbDtydCE9PWl4Lk5vQ29udGVudCYmKEp0PXR5cGVvZiB2LnJlc3BvbnNlPiJ1Ij92LnJlc3BvbnNlVGV4dDp2LnJlc3BvbnNlKSwwPT09cnQmJihydD1KdD9p'@;
put 'eC5PazowKTtsZXQgdm49cnQ+PTIwMCYmcnQ8MzAwO2lmKCJqc29uIj09PWEucmVzcG9uc2VUeXBlJiYic3RyaW5nIj09dHlwZW9mIEp0KXtjb25zdCBDbj1KdDtKdD1KdC5yZXBsYWNlKEpUZSwiIik7dHJ5e0p0PSIiIT09SnQ/SlNPTi5wYXJzZShKdCk6bnVsbH1jYXRjaCh0bil7SnQ9Q24s'@;
put 'dm4mJih2bj0hMSxKdD17ZXJyb3I6dG4sdGV4dDpKdH0pfX12bj8oZi5uZXh0KG5ldyBlNyh7Ym9keTpKdCxoZWFkZXJzOnFlLHN0YXR1czpydCxzdGF0dXNUZXh0OnB0LHVybDpkdHx8dm9pZCAwfSkpLGYuY29tcGxldGUoKSk6Zi5lcnJvcihuZXcgbXkoe2Vycm9yOkp0LGhlYWRlcnM6cWUs'@;
put 'c3RhdHVzOnJ0LHN0YXR1c1RleHQ6cHQsdXJsOmR0fHx2b2lkIDB9KSl9LGNlPXFlPT57Y29uc3R7dXJsOnJ0fT1aKCkscHQ9bmV3IG15KHtlcnJvcjpxZSxzdGF0dXM6di5zdGF0dXN8fDAsc3RhdHVzVGV4dDp2LnN0YXR1c1RleHR8fCJVbmtub3duIEVycm9yIix1cmw6cnR8fHZvaWQgMH0p'@;
put 'O2YuZXJyb3IocHQpfTtsZXQgYmU9ITE7Y29uc3QgRWU9cWU9PntiZXx8KGYubmV4dChaKCkpLGJlPSEwKTtsZXQgcnQ9e3R5cGU6bG0uRG93bmxvYWRQcm9ncmVzcyxsb2FkZWQ6cWUubG9hZGVkfTtxZS5sZW5ndGhDb21wdXRhYmxlJiYocnQudG90YWw9cWUudG90YWwpLCJ0ZXh0Ij09PWEu'@;
put 'cmVzcG9uc2VUeXBlJiZ2LnJlc3BvbnNlVGV4dCYmKHJ0LnBhcnRpYWxUZXh0PXYucmVzcG9uc2VUZXh0KSxmLm5leHQocnQpfSxCZT1xZT0+e2xldCBydD17dHlwZTpsbS5VcGxvYWRQcm9ncmVzcyxsb2FkZWQ6cWUubG9hZGVkfTtxZS5sZW5ndGhDb21wdXRhYmxlJiYocnQudG90YWw9cWUu'@;
put 'dG90YWwpLGYubmV4dChydCl9O3JldHVybiB2LmFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLHJlKSx2LmFkZEV2ZW50TGlzdGVuZXIoImVycm9yIixjZSksdi5hZGRFdmVudExpc3RlbmVyKCJ0aW1lb3V0IixjZSksdi5hZGRFdmVudExpc3RlbmVyKCJhYm9ydCIsY2UpLGEucmVwb3J0UHJvZ3Jl'@;
put 'c3MmJih2LmFkZEV2ZW50TGlzdGVuZXIoInByb2dyZXNzIixFZSksbnVsbCE9PU0mJnYudXBsb2FkJiZ2LnVwbG9hZC5hZGRFdmVudExpc3RlbmVyKCJwcm9ncmVzcyIsQmUpKSx2LnNlbmQoTSksZi5uZXh0KHt0eXBlOmxtLlNlbnR9KSwoKT0+e3YucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZXJy'@;
put 'b3IiLGNlKSx2LnJlbW92ZUV2ZW50TGlzdGVuZXIoImFib3J0IixjZSksdi5yZW1vdmVFdmVudExpc3RlbmVyKCJsb2FkIixyZSksdi5yZW1vdmVFdmVudExpc3RlbmVyKCJ0aW1lb3V0IixjZSksYS5yZXBvcnRQcm9ncmVzcyYmKHYucmVtb3ZlRXZlbnRMaXN0ZW5lcigicHJvZ3Jlc3MiLEVl'@;
put 'KSxudWxsIT09TSYmdi51cGxvYWQmJnYudXBsb2FkLnJlbW92ZUV2ZW50TGlzdGVuZXIoInByb2dyZXNzIixCZSkpLHYucmVhZHlTdGF0ZSE9PXYuRE9ORSYmdi5hYm9ydCgpfX0pKSl9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoeHIob29lKSl9'@;
put 'fXN0YXRpY3t0aGlzLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pfX1yZXR1cm4gY30pKCk7Y29uc3QgRVc9bmV3IFN0KCIiKSxBY2U9bmV3IFN0KCIiLHtwcm92aWRlZEluOiJyb290IixmYWN0b3J5OigpPT4iWFNSRi1UT0tFTiJ9KSxrY2U9bmV3IFN0KCIi'@;
put 'LHtwcm92aWRlZEluOiJyb290IixmYWN0b3J5OigpPT4iWC1YU1JGLVRPS0VOIn0pO2NsYXNzIERjZXt9bGV0IG5BZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoKXt0aGlzLmRvYz1hLHRoaXMucGxhdGZvcm09ZCx0aGlzLmNvb2tpZU5hbWU9aCx0aGlzLmxhc3RDb29raWVTdHJp'@;
put 'bmc9IiIsdGhpcy5sYXN0VG9rZW49bnVsbCx0aGlzLnBhcnNlQ291bnQ9MH1nZXRUb2tlbigpe2lmKCJzZXJ2ZXIiPT09dGhpcy5wbGF0Zm9ybSlyZXR1cm4gbnVsbDtjb25zdCBhPXRoaXMuZG9jLmNvb2tpZXx8IiI7cmV0dXJuIGEhPT10aGlzLmxhc3RDb29raWVTdHJpbmcmJih0aGlzLnBh'@;
put 'cnNlQ291bnQrKyx0aGlzLmxhc3RUb2tlbj1xYWUoYSx0aGlzLmNvb2tpZU5hbWUpLHRoaXMubGFzdENvb2tpZVN0cmluZz1hKSx0aGlzLmxhc3RUb2tlbn1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKSh4cih2cykseHIoaW8pLHhyKEFjZSkpfX1z'@;
put 'dGF0aWN7dGhpcy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KX19cmV0dXJuIGN9KSgpO2Z1bmN0aW9uIHJBZShjLGwpe2NvbnN0IGE9Yy51cmwudG9Mb3dlckNhc2UoKTtpZighZmkoRVcpfHwiR0VUIj09PWMubWV0aG9kfHwiSEVBRCI9PT1jLm1ldGhvZHx8'@;
put 'YS5zdGFydHNXaXRoKCJodHRwOi8vIil8fGEuc3RhcnRzV2l0aCgiaHR0cHM6Ly8iKSlyZXR1cm4gbChjKTtjb25zdCBkPWZpKERjZSkuZ2V0VG9rZW4oKSxoPWZpKGtjZSk7cmV0dXJuIG51bGwhPWQmJiFjLmhlYWRlcnMuaGFzKGgpJiYoYz1jLmNsb25lKHtoZWFkZXJzOmMuaGVhZGVycy5z'@;
put 'ZXQoaCxkKX0pKSxsKGMpfXZhciBjbT1mdW5jdGlvbihjKXtyZXR1cm4gY1tjLkludGVyY2VwdG9ycz0wXT0iSW50ZXJjZXB0b3JzIixjW2MuTGVnYWN5SW50ZXJjZXB0b3JzPTFdPSJMZWdhY3lJbnRlcmNlcHRvcnMiLGNbYy5DdXN0b21Yc3JmQ29uZmlndXJhdGlvbj0yXT0iQ3VzdG9tWHNy'@;
put 'ZkNvbmZpZ3VyYXRpb24iLGNbYy5Ob1hzcmZQcm90ZWN0aW9uPTNdPSJOb1hzcmZQcm90ZWN0aW9uIixjW2MuSnNvbnBTdXBwb3J0PTRdPSJKc29ucFN1cHBvcnQiLGNbYy5SZXF1ZXN0c01hZGVWaWFQYXJlbnQ9NV09IlJlcXVlc3RzTWFkZVZpYVBhcmVudCIsY1tjLkZldGNoPTZdPSJGZXRj'@;
put 'aCIsY30oY218fHt9KTtmdW5jdGlvbiB0NyhjLGwpe3JldHVybntcdTAyNzVraW5kOmMsXHUwMjc1cHJvdmlkZXJzOmx9fWZ1bmN0aW9uIGlBZSguLi5jKXtjb25zdCBsPVtTVyxUY2UseGNlLHtwcm92aWRlOktSLHVzZUV4aXN0aW5nOnhjZX0se3Byb3ZpZGU6cVIsdXNlRXhpc3Rpbmc6VGNl'@;
put 'fSx7cHJvdmlkZTpheCx1c2VWYWx1ZTpyQWUsbXVsdGk6ITB9LHtwcm92aWRlOkVXLHVzZVZhbHVlOiEwfSx7cHJvdmlkZTpEY2UsdXNlQ2xhc3M6bkFlfV07Zm9yKGNvbnN0IGEgb2YgYylsLnB1c2goLi4uYS5cdTAyNzVwcm92aWRlcnMpO3JldHVybiBmdW5jdGlvbiB5ZihjKXtyZXR1cm57'@;
put 'XHUwMjc1cHJvdmlkZXJzOmN9fShsKX1jb25zdCBJY2U9bmV3IFN0KCIiKTtsZXQgb0FlPSgoKT0+e2NsYXNzIGN7c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NW1vZD1raSh7dHlwZTpjfSl9c3RhdGlje3RoaXMu'@;
put 'XHUwMjc1aW5qPUFyKHtwcm92aWRlcnM6W2lBZSh0NyhjbS5MZWdhY3lJbnRlcmNlcHRvcnMsW3twcm92aWRlOkljZSx1c2VGYWN0b3J5OkdUZX0se3Byb3ZpZGU6YXgsdXNlRXhpc3Rpbmc6SWNlLG11bHRpOiEwfV0pKV19KX19cmV0dXJuIGN9KSgpLFZjZT0oKCk9PntjbGFzcyBje2NvbnN0'@;
put 'cnVjdG9yKGEsZCl7dGhpcy5odHRwPWEsdGhpcy5hcHBTdG9yZVNlcnZpY2U9ZCx0aGlzLnVybD0iIix0aGlzLmRyaXZlVXJsPSIiLHRoaXMuaHR0cE9wdGlvbnM9e3dpdGhDcmVkZW50aWFsczohMH19c2V0dXAoKXtjb25zdCBhPXRoaXMuYXBwU3RvcmVTZXJ2aWNlLmdldERjQWRhcHRlclNl'@;
put 'dHRpbmdzKCk7dGhpcy51cmw9YCR7YT8uc2VydmVyVXJsfHwiIn0vU0FTanNBcGlgLHRoaXMuZHJpdmVVcmw9YCR7dGhpcy51cmx9L2RyaXZlYH1nZXRTZXJ2ZXJJbmZvKCl7cmV0dXJuIHRoaXMuaHR0cC5nZXQoYCR7dGhpcy51cmx9L2luZm9gKX1nZXRGaWxlRnJvbURyaXZlKGEpe3JldHVy'@;
put 'biB0aGlzLmh0dHAuZ2V0KGAke3RoaXMuZHJpdmVVcmx9L2ZpbGUvP19maWxlUGF0aD0ke2F9YCx0aGlzLmh0dHBPcHRpb25zKX1nZXRGb2xkZXJDb250ZW50c0Zyb21Ecml2ZShhKXtyZXR1cm4gdGhpcy5odHRwLmdldChgJHt0aGlzLmRyaXZlVXJsfS9mb2xkZXI/X2ZvbGRlclBhdGg9JHth'@;
put 'fWAsdGhpcy5odHRwT3B0aW9ucyl9Z2V0RmlsZVRyZWVGcm9tRHJpdmUoKXtyZXR1cm4gdGhpcy5odHRwLmdldChgJHt0aGlzLmRyaXZlVXJsfS9maWxldHJlZWAsdGhpcy5odHRwT3B0aW9ucyl9Z2V0RmlsZUZyb21GaWxlVHJlZShhKXtyZXR1cm4gbmV3IFByb21pc2UoKGQsaCk9Pnt0aGlz'@;
put 'LmdldEZpbGVUcmVlRnJvbURyaXZlKCkuc3Vic2NyaWJlKGY9Pntjb25zdCBNPXRoaXMuZmluZEluVHJlZShmLnRyZWUsYSk7ZChNKX0pfSl9ZmluZEluVHJlZShhLGQpe2lmKGEucmVsYXRpdmVQYXRoPT09ZClyZXR1cm4gYTtmb3IobGV0IGggb2YgYS5jaGlsZHJlbil7Y29uc3QgZj10aGlz'@;
put 'LmZpbmRJblRyZWUoaCxkKTtpZihmKXJldHVybiBmfX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKSh4cihTVykseHIoUTgpKX19c3RhdGlje3RoaXMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjLHByb3ZpZGVkSW46'@;
put 'InJvb3QifSl9fXJldHVybiBjfSkoKSxUVz0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCl7dGhpcy5odHRwPWEsdGhpcy5hcHBTdG9yZVNlcnZpY2U9ZCx0aGlzLnZpeWFBcGlzPXtBbmFseXRpY3NfSW5zaWdodHM6e2luc2lnaHRzOiIvaW5zaWdodHMifSxWaXN1YWxpc2F0aW9uOnty'@;
put 'ZXBvcnRzOiIvcmVwb3J0cyIscmVwb3J0SW1hZ2VzOiIvcmVwb3J0SW1hZ2VzIixyZXBvcnRUcmFuc2Zvcm1zOiIvcmVwb3J0VHJhbnNmb3JtcyIsdmlzdWFsQW5hbHl0aWNzOiIvdmlzdWFsQW5hbHl0aWNzIn0sQ29tcHV0ZTp7am9iczoiL2pvYkRlZmluaXRpb25zIixqb2JFeGVjdXRpb246'@;
put 'Ii9qb2JFeGVjdXRpb24iLGNvbnRleHRzOiIvY29tcHV0ZS9jb250ZXh0cyJ9LERlY2lzaW9uX01hbmFnZW1lbnQ6e21vZGVsTWFuYWdlbWVudDoiL21vZGVsTWFuYWdlbWVudCIsbW9kZWxSZXBvc2l0b3J5OiIvbW9kZWxSZXBvc2l0b3J5Iixtb2RlbFB1Ymxpc2g6Ii9tb2RlbFB1Ymxpc2gi'@;
put 'LG1pY3JvYW5hbHl0aWNTY29yZToiL21pY3JvYW5hbHl0aWNTY29yZSIsZGF0YU1pbmluZzoiL2RhdGFNaW5pbmciLGJ1c2luZXNzUnVsZXM6Ii9idXNpbmVzc1J1bGVzIixyZWZlcmVuY2VEYXRhOiIvcmVmZXJlbmNlRGF0YSIsdHJlYXRtZW50RGVmaW5pdGlvbnM6Ii90cmVhdG1lbnREZWZp'@;
put 'bml0aW9ucyIsc3ViamVjdENvbnRhY3RzOiIvc3ViamVjdENvbnRhY3RzIixkZWNpc2lvbnNSdW50aW1lQnVpbGRlcjoiL2RlY2lzaW9uc1J1bnRpbWVCdWlsZGVyIn0sQ29yZV9TZXJ2aWNlczp7Zm9sZGVyczoiL2ZvbGRlcnMiLGZpbGVzOiIvZmlsZXMiLGFubm90YXRpb25zOiIvYW5ub3Rh'@;
put 'dGlvbnMiLGF1dGhvcml6YXRpb246Ii9hdXRob3JpemF0aW9uIixyZWxhdGlvbnNoaXBzOiIvcmVsYXRpb25zaGlwcyIsU0FTTG9nb246Ii9TQVNMb2dvbiJ9LEF1dG9tYXRlZF9NYWNoaW5lX0xlYXJuaW5nOnttbFBpcGVsaW5lQXV0b21hdGlvbjoiL21sUGlwZWxpbmVBdXRvbWF0aW9uIn0s'@;
put 'T3RoZXI6e2lkZW50aXRpZXM6Ii9pZGVudGl0aWVzIn19LHRoaXMuc2VydmVyVXJsPSIifXNldHVwKCl7Y29uc3QgYT10aGlzLmFwcFN0b3JlU2VydmljZS5nZXREY0FkYXB0ZXJTZXR0aW5ncygpO3RoaXMuc2VydmVyVXJsPWE/LnNlcnZlclVybHx8IiJ9Z2V0QWxsQ29sbGVjdGlvbnMoKXty'@;
put 'ZXR1cm4gdGhpcy52aXlhQXBpc31nZXRCeVVybChhKXtyZXR1cm4gdGhpcy5nZXQoYCR7dGhpcy5zZXJ2ZXJVcmx9JHthfWAse3dpdGhDcmVkZW50aWFsczohMH0pfWdldEJ5Q29sbGVjdGlvbihhKXtyZXR1cm4gdGhpcy5nZXQoYCR7dGhpcy5zZXJ2ZXJVcmx9JHthfWAse3dpdGhDcmVkZW50'@;
put 'aWFsczohMH0pfWdldENvbXB1dGVDb250ZXh0cygpe3JldHVybiB0aGlzLmdldChgJHt0aGlzLnNlcnZlclVybH0vY29tcHV0ZS9jb250ZXh0c2Ase3dpdGhDcmVkZW50aWFsczohMH0pfWdldENvbXB1dGVDb250ZXh0QnlJZChhKXtyZXR1cm4gdGhpcy5nZXQoYCR7dGhpcy5zZXJ2ZXJVcmx9'@;
put 'L2NvbXB1dGUvY29udGV4dHMvJHthfWAse3dpdGhDcmVkZW50aWFsczohMH0pfWdldEZvbGRlckJ5UGF0aChhKXtyZXR1cm4gdGhpcy5nZXQoYCR7dGhpcy5zZXJ2ZXJVcmx9L2ZvbGRlcnMvZm9sZGVycy9AaXRlbT9wYXRoPSR7YX1gLHt3aXRoQ3JlZGVudGlhbHM6ITB9KX1nZXRGb2xkZXJN'@;
put 'ZW1iZXJzKGEpe3JldHVybiB0aGlzLmdldChgJHt0aGlzLnNlcnZlclVybH0vZm9sZGVycy9mb2xkZXJzLyR7YX0vbWVtYmVyc2Ase3dpdGhDcmVkZW50aWFsczohMH0pfWdldEFkbWluR3JvdXBzKGE9NWUzKXtyZXR1cm4gdGhpcy5nZXQoYCR7dGhpcy5zZXJ2ZXJVcmx9L2lkZW50aXRpZXMv'@;
put 'Z3JvdXBzP3NvcnRCeT1uYW1lJmxpbWl0PSR7YX1gLHt3aXRoQ3JlZGVudGlhbHM6ITB9KX1nZXRDdXJyZW50VXNlcigpe3JldHVybiB0aGlzLmdldChgJHt0aGlzLnNlcnZlclVybH0vaWRlbnRpdGllcy91c2Vycy9AY3VycmVudFVzZXJgLHt3aXRoQ3JlZGVudGlhbHM6ITB9KX1nZXQoYSxk'@;
put 'KXtyZXR1cm4gdGhpcy5odHRwLmdldChhLGQpLnBpcGUoWDgoaD0+KGNvbnNvbGUubG9nKCJ1cmwiLGEpLGNvbnNvbGUubG9nKCJlcnIuc3RhdHVzIixoLnN0YXR1cyksNDQ5PT09aC5zdGF0dXN8fDQwMT09PWguc3RhdHVzP3RoaXMuaHR0cC5nZXQoYSxkKTp6TSgoKT0+aCkpKSl9c3RhdGlj'@;
put 'e3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoeHIoU1cpLHhyKFE4KSl9fXN0YXRpY3t0aGlzLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pfX1yZXR1cm4gY30pKCksQnM9KCgpPT57Y2xhc3Mg'@;
put 'Y3tjb25zdHJ1Y3RvcihhLGQsaCxmLHYsTSxEKXt0aGlzLmFwcFN0b3JlU2VydmljZT1hLHRoaXMudXNlclNlcnZpY2U9ZCx0aGlzLmV2ZW50U2VydmljZT1oLHRoaXMuc2FzanNTZXJ2aWNlPWYsdGhpcy5zYXNWaXlhU2VydmljZT12LHRoaXMubG9nZ2VyU2VydmljZT1NLHRoaXMucm91dGVy'@;
put 'PUQsdGhpcy5sb2FkU3RhcnR1cFNlcnZpY2VFbWl0dGVyPW5ldyBLcix0aGlzLmluY29ycmVjdFNpdGVJZEVtaXR0ZXI9bmV3IEtyLHRoaXMucmVxdWVzdFNpdGVJZEVtaXR0ZXI9bmV3IEtyLHRoaXMuc2FzanNBZGFwdGVyPW5ldyhtY2UoKSksdGhpcy5hcHBMb2NDaGVja1BlbmRpbmc9ITEs'@;
put 'dGhpcy5zaG91bGRMb2dpbj1uZXcgZWkoITEpLHRoaXMubGljZW5zZV9zaXRlX2lkPW5ldyBlaShudWxsKX1zYXNTZXJ2aWNlSW5pdCgpe2lmKHRoaXMuZGNBZGFwdGVyU2V0dGluZ3M9dGhpcy5hcHBTdG9yZVNlcnZpY2UuZ2V0RGNBZGFwdGVyU2V0dGluZ3MoKSx0aGlzLnNhc2pzU2Vydmlj'@;
put 'ZS5zZXR1cCgpLHRoaXMuc2FzVml5YVNlcnZpY2Uuc2V0dXAoKSx0aGlzLmRjQWRhcHRlclNldHRpbmdzKXtzd2l0Y2godGhpcy5zYXNqc0FkYXB0ZXI9bmV3KG1jZSgpKSh0aGlzLmRjQWRhcHRlclNldHRpbmdzKSx0aGlzLmRjQWRhcHRlclNldHRpbmdzLnNlcnZlclR5cGUpe2Nhc2UgQjAu'@;
put 'WS5TYXNWaXlhOnRoaXMuY2hlY2tWaXlhRGVwbG95KHRoaXMuZGNBZGFwdGVyU2V0dGluZ3MuYXBwTG9jfHwiIik7YnJlYWs7Y2FzZSBCMC5ZLlNhczk6dGhpcy5sb2FkU3RhcnR1cFNlcnZpY2VFbWl0dGVyLmVtaXQoKTticmVhaztjYXNlIEIwLlkuU2FzanM6dGhpcy5jaGVja1Nhc2pzRGVw'@;
put 'bG95KCl9IlJlZGlyZWN0ZWQiPT09dGhpcy5nZXRTYXNqc0NvbmZpZygpLmxvZ2luTWVjaGFuaXNtJiZ0aGlzLnNob3VsZExvZ2luLnN1YnNjcmliZShhPT57YSYmdGhpcy5zYXNqc0FkYXB0ZXIubG9nSW4oKS50aGVuKGQ9Pntjb25zb2xlLmxvZygicmVzIixkKX0pfSl9ZWxzZSB0aGlzLmV2'@;
put 'ZW50U2VydmljZS5zaG93SW5mb01vZGFsKCJFcnJvciIsIkFkYXB0ZXIgc2V0dGluZ3MgKGluZGV4Lmh0bWwpIGFyZSBub3QgcHJlc2VudC4iKX1yZXF1ZXN0KGEsZCxoLGYpe3JldHVybiBmfHwoZj17fSksdGhpcy5sb2dnZXJTZXJ2aWNlLmxvZ1JlcXVlc3REYXRhKGE9InNlcnZpY2VzLyIr'@;
put 'YSxkKSxuZXcgUHJvbWlzZSgodixNKT0+e3RoaXMuc2FzanNBZGFwdGVyLnJlcXVlc3QoYSxkLGgsKCk9Pnt0aGlzLnNob3VsZExvZ2luLm5leHQoITApfSkudGhlbihEPT57Y29uc3QgWj10aGlzLnNhc2pzQWRhcHRlci5nZXRTYXNSZXF1ZXN0cygpLmZpbmQocmU9PnJlLnNlcnZpY2VMaW5r'@;
put 'PT09YSk7aWYoITE9PT1ELmxvZ2luJiYodGhpcy5zaG91bGRMb2dpbi5uZXh0KCEwKSxNKHthZGFwdGVyUmVzcG9uc2U6ITEsbG9nOlo/LmxvZ0ZpbGV9KSksIXRoaXMudXNlclNlcnZpY2UudXNlciYmRC5NRl9HRVRVU0VSJiYodGhpcy51c2VyU2VydmljZS51c2VyPXt1c2VybmFtZTpELk1G'@;
put 'X0dFVFVTRVJ9KSxELlNZU1NJVEUmJih0aGlzLnJlcXVlc3RTaXRlSWRFbWl0dGVyLmVtaXQoRC5TWVNTSVRFKSx0aGlzLmdldExpY2Vuc2VTaXRlSWQoKS5sZW5ndGg+MCYmKHRoaXMuZ2V0TGljZW5zZVNpdGVJZCgpLmluY2x1ZGVzKEQuU1lTU0lURSl8fHRoaXMuaW5jb3JyZWN0U2l0ZUlk'@;
put 'RW1pdHRlci5lbWl0KEQuU1lTU0lURSkpKSw0MDQ9PT1ELnN0YXR1cyYmTSh7YWRhcHRlclJlc3BvbnNlOntNRVNTQUdFOkQuYm9keXx8IlNBUyBSZXNwb25kZWQgd2l0aCBlcnJvciJ9LGxvZzpaPy5sb2dGaWxlfSksdHlwZW9mIEQuc2FzanNBYm9ydDwidSIpe2NvbnN0IHJlPUQsY2U9cmUu'@;
put 'c2FzanNBYm9ydFswXS5NU0csYmU9cmUuc2FzanNBYm9ydFswXS5NQUM7aWYoY2UuaW5jbHVkZXMoIkRhdGFfQ29udHJvbGxlcl9TZXR0aW5ncyhTdG9yZWRQcm9jZXNzKSBub3QgZm91bmQiKSlyZXR1cm4gdGhpcy5ldmVudFNlcnZpY2Uuc3RhcnR1cERhdGFMb2FkZWQoKSx0aGlzLnJvdXRl'@;
put 'ci5uYXZpZ2F0ZUJ5VXJsKCIvZGVwbG95Iiksdm9pZCBNKHthZGFwdGVyUmVzcG9uc2U6e2Vycm9yOmNlfSxsb2c6Wj8ubG9nRmlsZX0pO2Y/LnN1cHByZXNzU3VjY2Vzc0Fib3J0TW9kYWx8fHRoaXMuZXZlbnRTZXJ2aWNlLnNob3dBYm9ydE1vZGFsKGEucmVwbGFjZSgic2VydmljZXMvIiwi'@;
put 'IiksY2Use1NZU1dBUk5JTkdURVhUOnJlLlNZU1dBUk5JTkdURVhULFNZU0VSUk9SVEVYVDpyZS5TWVNFUlJPUlRFWFQsTUFDOmJlfSksTSh7YWRhcHRlclJlc3BvbnNlOntlcnJvcjpjZX0sbG9nOlo/LmxvZ0ZpbGV9KX12KHthZGFwdGVyUmVzcG9uc2U6RCxsb2c6Wj8ubG9nRmlsZX0pfSxE'@;
put 'PT57Y29uc29sZS5lcnJvcihEKTtjb25zdCBaPXRoaXMuc2FzanNBZGFwdGVyLmdldFNhc1JlcXVlc3RzKCkuZmluZChyZT0+cmUuc2VydmljZUxpbms9PT1hKTtpZihELmVycm9yKXtsZXQgY2UscmU9RC5lcnJvci5tZXNzYWdlO0QuZXJyb3IuZGV0YWlscyYmRC5lcnJvci5kZXRhaWxzLmxv'@;
put 'ZyYmKGNlPUQuZXJyb3IuZGV0YWlscy5sb2cpLCghcmV8fHJlLnRyaW0oKS5sZW5ndGg8MSkmJihyZT0iU0FTIFNlcnZpY2UgZXJyb3Igb2N1cnJlZCIpLGY/LnN1cHByZXNzRXJyb3JBYm9ydE1vZGFsfHx0aGlzLmV2ZW50U2VydmljZS5zaG93QWJvcnRNb2RhbChhLHJlLHtMT0c6Y2V9LCJS'@;
put 'ZXF1ZXN0IGVycm9yIiksTSh7YWRhcHRlclJlc3BvbnNlOntlcnJvcjpyZX0sbG9nOlo/LmxvZ0ZpbGV9KX1NKHthZGFwdGVyUmVzcG9uc2U6RCxsb2c6Wj8ubG9nRmlsZX0pfSl9KX11cGxvYWRGaWxlKGEsZCxoKXtyZXR1cm4gbmV3IFByb21pc2UoKGYsdik9Pnt0aGlzLnNhc2pzQWRhcHRl'@;
put 'ci51cGxvYWRGaWxlKGEsZCxoKS50aGVuKE09Pntjb25zdCBEPXRoaXMuc2FzanNBZGFwdGVyLmdldFNhc1JlcXVlc3RzKCkuZmluZChaPT4ic2VydmljZXMvZWRpdG9ycy9sb2FkZmlsZSI9PT1aLnNlcnZpY2VMaW5rKTtmKHthZGFwdGVyUmVzcG9uc2U6TSxsb2c6RD8ubG9nRmlsZX0pfSxN'@;
put 'PT57Y29uc3QgRD10aGlzLnNhc2pzQWRhcHRlci5nZXRTYXNSZXF1ZXN0cygpLmZpbmQoWj0+InNlcnZpY2VzL2VkaXRvcnMvbG9hZGZpbGUiPT09Wi5zZXJ2aWNlTGluayk7dih7cmVzcG9uc2U6TSxsb2c6RD8ubG9nRmlsZX0pfSl9KX1sb2dpbihhLGQpe3ZhciBoPXRoaXM7cmV0dXJuIGVl'@;
put 'KGZ1bmN0aW9uKigpe2NvbnN0IGY9aC5nZXRTZXJ2ZXJUeXBlKCk9PT1CMC5ZLlNhc2pzPyJjbGllbnRJRDEiOnZvaWQgMDtyZXR1cm4gaC5zYXNqc0FkYXB0ZXIubG9nSW4oYSxkLGYpLnRoZW4odj0+KHYuaXNMb2dnZWRJbiYmKGgudXNlclNlcnZpY2UudXNlcj17dXNlcm5hbWU6di51c2Vy'@;
put 'TmFtZX0saC5hcHBMb2NDaGVja1BlbmRpbmcmJihoLmNoZWNrVml5YURlcGxveShoLmRjQWRhcHRlclNldHRpbmdzPy5hcHBMb2N8fCIiKSxoLmFwcExvY0NoZWNrUGVuZGluZz0hMSkpLGguc2hvdWxkTG9naW4ubmV4dCghdi5pc0xvZ2dlZEluKSx2LmlzTG9nZ2VkSW4pLHY9Pihjb25zb2xl'@;
put 'LmVycm9yKHYpLGguc2hvdWxkTG9naW4ubmV4dCghMCksITEpKS5jYXRjaCh2PT4oNDAzPT09diYmY29uc29sZS5lcnJvcigiSW52YWxpZCBob3N0IiksITEpKX0pKCl9cmVsb2FkU3RhcnR1cERhdGEoKXt0aGlzLmxvYWRTdGFydHVwU2VydmljZUVtaXR0ZXIuZW1pdCgpfWdldExpY2Vuc2VT'@;
put 'aXRlSWQoKXtyZXR1cm4gdGhpcy5saWNlbnNlX3NpdGVfaWQudmFsdWV8fFtdfXNldExpY2Vuc2VTaXRlSWQoYSl7dGhpcy5saWNlbnNlX3NpdGVfaWQubmV4dCgib2JqZWN0Ij09dHlwZW9mIGE/YTpbYV0pfWNoZWNrU2FzanNEZXBsb3koKXt2YXIgYT10aGlzO3JldHVybiBlZShmdW5jdGlv'@;
put 'biooKXtjb25zdCBoPWAke2EuZ2V0U2FzanNDb25maWcoKS5hcHBMb2N9L3NlcnZpY2VzL2FkbWluYDthLnNhc2pzU2VydmljZS5nZXRGb2xkZXJDb250ZW50c0Zyb21Ecml2ZShoKS5zdWJzY3JpYmUoZj0+e2YuZmlsZXMuaW5jbHVkZXMoIm1ha2VkYXRhLnNhcyIpPyhhLmV2ZW50U2Vydmlj'@;
put 'ZS5zdGFydHVwRGF0YUxvYWRlZCgpLGEucm91dGVyLm5hdmlnYXRlQnlVcmwoIi9kZXBsb3kiKSk6KGEubG9hZFN0YXJ0dXBTZXJ2aWNlRW1pdHRlci5lbWl0KCksYS5yb3V0ZXIudXJsLmluY2x1ZGVzKCJkZXBsb3kiKSYmYS5yb3V0ZXIubmF2aWdhdGVCeVVybCgiLyIpKX0sZj0+e2YuZXJy'@;
put 'b3IuaW5jbHVkZXMoIlVuYXV0aG9yaXplZCIpPyhhLnNob3VsZExvZ2luLm5leHQoITApLGEuc2hvdWxkTG9naW4uc3Vic2NyaWJlKHY9PnshMT09PXYmJmxvY2F0aW9uLnJlbG9hZCgpfSkpOmYuZXJyb3IuaW5jbHVkZXMoIkZvbGRlciBkb2Vzbid0IGV4aXN0LiIpJiYoY29uc29sZS53YXJu'@;
put 'KCJTQVNqcyBTQVMgc2VydmljZXMgYXJlIG5vdCBwcmVzZW50IG9uIHRoZSBjdXJyZW50IGFwcExvYy4iKSxhLmV2ZW50U2VydmljZS5zdGFydHVwRGF0YUxvYWRlZCgpLGEucm91dGVyLm5hdmlnYXRlQnlVcmwoIi9kZXBsb3kiKSl9KX0pKCl9c2FzanNNYWtlZGF0YUNoZWNraW5nKCl7dmFy'@;
put 'IGE9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKCl7dmFyIGQ9ZWUoZnVuY3Rpb24qKGgsZil7YS5jaGVja2luZ0ludGVydmFsPXNldEludGVydmFsKGVlKGZ1bmN0aW9uKigpe2Euc2FzanNNYWtlZGF0YVN1Y2Nlc3NmdWxsKCkudGhlbih2'@;
put 'PT57diYmKGNsZWFySW50ZXJ2YWwoYS5jaGVja2luZ0ludGVydmFsKSxoKHYpKX0pLmNhdGNoKHY9PntjbGVhckludGVydmFsKGEuY2hlY2tpbmdJbnRlcnZhbCksZih2KX0pfSksMWUzKX0pO3JldHVybiBmdW5jdGlvbihoLGYpe3JldHVybiBkLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KCkp'@;
put 'fSkoKX1zYXNqc01ha2VkYXRhU3VjY2Vzc2Z1bGwoKXt2YXIgYT10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXtyZXR1cm4gbmV3IFByb21pc2UoKGQsaCk9Pntjb25zdCB2PWAke2EuZ2V0U2FzanNDb25maWcoKS5hcHBMb2N9L3NlcnZpY2VzL2FkbWluYDthLnNhc2pzU2VydmljZS5nZXRG'@;
put 'b2xkZXJDb250ZW50c0Zyb21Ecml2ZSh2KS5zdWJzY3JpYmUoTT0+e00uZmlsZXMuaW5jbHVkZXMoIm1ha2VkYXRhLnNhcyIpP2QoITEpOmQoITApfSxNPT57TS5lcnJvci5pbmNsdWRlcygiRm9sZGVyIGRvZXNuJ3QgZXhpc3QuIikmJmgoKX0pfSl9KSgpfWNoZWNrVml5YURlcGxveShhKXt2'@;
put 'YXIgZD10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXtsZXQgdixmPSExO2lmKHR5cGVvZiBkLnNhc2pzQWRhcHRlci5nZXRGb2xkZXI8InUiKXtjb25zdCBNPXlpZWxkIGQuYXBwTG9jQ2hlY2soYSk7Zj1NLmZvdW5kLHY9TS5lcnJvck1lc3NhZ2V9ZWxzZSBmPXlpZWxkIGQuYXBwTG9jQ2hl'@;
put 'Y2tQcmVBeGlvc2RBZGFwdGVyKGEpO2Y/ZC52aXlhTWFrZWRhdGFTdWNjZXNzZnVsbCgpLnRoZW4oTT0+e00/ZC5sb2FkU3RhcnR1cFNlcnZpY2VFbWl0dGVyLmVtaXQoKTooZC5ldmVudFNlcnZpY2Uuc3RhcnR1cERhdGFMb2FkZWQoKSxkLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKCIvZGVwbG95'@;
put 'IikpfSxNPT57Y29uc29sZS5lcnJvcigiRXJyb3Igd2hpbGUgbG9va2luZyBmb3IgdGhlIGZpbGU6IG1ha2VkYXRhLnNhcyIsTSl9KTpkLmV2ZW50U2VydmljZS5zaG93SW5mb01vZGFsKCJFcnJvciIsKHZ8fCJWaXlhIHNlcnZpY2VzIGFyZSBub3QgcHJlc2VudCBvbiB0aGUgY3VycmVudCBh'@;
put 'cHBMb2MsIG9yIEFQSSBub3QgcmVhY2hhYmxlLiBDaGVjayB0aGUgQURBUFRFUiBjb25maWd1cmF0aW9uLiIpK2BcbkFwcExvYzogJHthfWApfSkoKX12aXlhTWFrZWRhdGFTdWNjZXNzZnVsbCgpe3ZhciBhPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe3JldHVybiBuZXcgUHJvbWlzZSgo'@;
put 'ZCxoKT0+e2NvbnN0IGY9YS5nZXRTYXNqc0NvbmZpZygpLHY9YCR7Zi5hcHBMb2N9L3NlcnZpY2VzL2FkbWluYDthLnNhc1ZpeWFTZXJ2aWNlLmdldEZvbGRlckJ5UGF0aCh2KS5zdWJzY3JpYmUoTT0+e2NvbnN0IEQ9TS5pZDtEfHwoY29uc29sZS5lcnJvcihgRm9sZGVyIElEIGlzIG5vdCBw'@;
put 'cmVzZW50LiAke3Z9YCxmKSxkKCExKSksYS5zYXNWaXlhU2VydmljZS5nZXRGb2xkZXJNZW1iZXJzKEQpLnN1YnNjcmliZShaPT57Wi5pdGVtcy5zb21lKHJlPT4ibWFrZWRhdGEiPT09cmUubmFtZSk/ZCghMSk6ZCghMCl9LFo9Pntjb25zb2xlLmVycm9yKCJFcnJvciBnZXR0aW5nIGZvbGRl'@;
put 'ciBjb250ZW50cyIsWiksaCgpfSl9LE09Pntjb25zb2xlLndhcm4oIkVycm9yIGdldHRpbmcgZm9sZGVyIGluZm8iLE0pLGgoTSl9KX0pfSkoKX1hcHBMb2NDaGVjayhhKXt2YXIgZD10aGlzO3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbigpe3ZhciBoPWVlKGZ1bmN0aW9uKihmLHYpe2xl'@;
put 'dCBELE09IiI7dHJ5e0Q9eWllbGQgZC5zYXNqc0FkYXB0ZXIuZ2V0Rm9sZGVyKGEpfWNhdGNoKFopeyJMb2dpblJlcXVpcmVkRXJyb3IiPT09Wi5uYW1lPyhkLmFwcExvY0NoZWNrUGVuZGluZz0hMCxkLnNob3VsZExvZ2luLm5leHQoITApLGYoe2ZvdW5kOiExfSkpOk09Ik5vdEZvdW5kZUVy'@;
put 'cm9yIj09PVoubmFtZT9aLm1lc3NhZ2U6IlZpeWEgc2VydmljZXMgYXJlIG5vdCBwcmVzZW50IG9uIHRoZSBjdXJyZW50IGFwcExvYywgb3IgQVBJIG5vdCByZWFjaGFibGUuIENoZWNrIHRoZSBBREFQVEVSIGNvbmZpZ3VyYXRpb24uIn1pZihNLmxlbmd0aClyZXR1cm4gY29uc29sZS53YXJu'@;
put 'KE0pLGYoe2ZvdW5kOiExLGVycm9yTWVzc2FnZTpNfSk7Zih7Zm91bmQ6ITB9KX0pO3JldHVybiBmdW5jdGlvbihmLHYpe3JldHVybiBoLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KCkpfWFwcExvY0NoZWNrUHJlQXhpb3NkQWRhcHRlcihhKXtyZXR1cm4gbmV3IFByb21pc2UoKGQsaCk9Pnts'@;
put 'ZXQgdj0hMTtyZXR1cm4gZmV0Y2goYC9mb2xkZXJzL2ZvbGRlcnMvQGl0ZW0/cGF0aD0ke2F9YCkudGhlbihNPT4oNDA0PT09TS5zdGF0dXMmJih2PSEwKSxNLnRleHQoKSkpLnRoZW4oTT0+e2lmKHRoaXMuaXNMb2dpblJlcXVpcmVkKE0pKXRoaXMuYXBwTG9jQ2hlY2tQZW5kaW5nPSEwLHRo'@;
put 'aXMuc2hvdWxkTG9naW4ubmV4dCghMCk7ZWxzZXtpZih2KXJldHVybiBjb25zb2xlLndhcm4oIlZpeWEgc2VydmljZXMgYXJlIG5vdCBwcmVzZW50IG9uIHRoZSBjdXJyZW50IGFwcExvYy4iKSx0aGlzLmV2ZW50U2VydmljZS5zdGFydHVwRGF0YUxvYWRlZCgpLHRoaXMucm91dGVyLm5hdmln'@;
put 'YXRlQnlVcmwoIi9kZXBsb3kiKSxkKCExKTtsZXQgRD1udWxsO3RyeXtEPUpTT04ucGFyc2UoTSl9Y2F0Y2h7fWlmKEQmJkQuaHR0cFN0YXR1c0NvZGUmJjQwND09PUQuaHR0cFN0YXR1c0NvZGUpcmV0dXJuIGNvbnNvbGUud2FybigiVml5YSBzZXJ2aWNlcyBhcmUgbm90IHByZXNlbnQgb24g'@;
put 'dGhlIGN1cnJlbnQgYXBwTG9jLiIpLHRoaXMuZXZlbnRTZXJ2aWNlLnN0YXJ0dXBEYXRhTG9hZGVkKCksdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCgiL2RlcGxveSIpLGQoITEpO2QoITApfX0pLmNhdGNoKE09PntkKCExKX0pfSl9aXNMb2dpblJlcXVpcmVkKGEpe3JldHVybi88Zm9ybS4r'@;
put 'YWN0aW9uPSIoLipMb2dvblteIl0qKS4qPi9nbS50ZXN0KGEpfWxvZ291dCgpe3RoaXMuc2FzanNBZGFwdGVyLmxvZ091dCgpLnRoZW4oKCk9Pntsb2NhdGlvbi5yZWxvYWQoKX0pfWdldFNhc2pzQ29uZmlnKCl7cmV0dXJuIHRoaXMuc2FzanNBZGFwdGVyLmdldFNhc2pzQ29uZmlnKCl9Z2V0'@;
put 'U2FzUmVxdWVzdHMoKXtyZXR1cm4gdGhpcy5zYXNqc0FkYXB0ZXIuZ2V0U2FzUmVxdWVzdHMoKX1zZXREZWJ1Z1N0YXRlKGEpe3RoaXMuc2FzanNBZGFwdGVyLnNldERlYnVnU3RhdGUoYSl9Z2V0U2FzanNJbnN0YW5jZSgpe3JldHVybiB0aGlzLnNhc2pzQWRhcHRlcn1nZXRTZXJ2ZXJUeXBl'@;
put 'KCl7Y29uc3QgYT10aGlzLnNhc2pzQWRhcHRlci5nZXRTYXNqc0NvbmZpZygpO3JldHVybiBhLnNlcnZlclR5cGU/YS5zZXJ2ZXJUeXBlOiJTQVNWSVlBIn1nZXRFeGVjdXRpb25QYXRoKCl7Y29uc3QgYT10aGlzLnNhc2pzQWRhcHRlci5nZXRTYXNqc0NvbmZpZygpO3N3aXRjaChhLnNlcnZl'@;
put 'clR5cGUpe2Nhc2UgQjAuWS5TYXNWaXlhOnJldHVybiBhLnBhdGhTQVNWaXlhO2Nhc2UgQjAuWS5TYXM5OnJldHVybiBhLnBhdGhTQVM5O2Nhc2UgQjAuWS5TYXNqczpyZXR1cm4gYS5wYXRoU0FTSlN9fWdldEZpbGVDb250ZW50KGEsZCl7cmV0dXJuIHRoaXMuc2FzanNBZGFwdGVyLmdldEZp'@;
put 'bGVDb250ZW50KGEsZCl9dXBkYXRlRmlsZUNvbnRlbnQoYSxkLGgpe3JldHVybiB0aGlzLnNhc2pzQWRhcHRlci51cGRhdGVGaWxlQ29udGVudChhLGQsaCl9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoeHIoUTgpLHhyKF9XKSx4cih2YykseHIo'@;
put 'VmNlKSx4cihUVykseHIoU2QpLHhyKExzKSl9fXN0YXRpY3t0aGlzLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pfX1yZXR1cm4gY30pKCksU2Q9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLmluamVjdG9yPWF9'@;
put 'bG9nKGEsZCl7dGhpcy5pbmplY3RTYXNTZXJ2aWNlKCksdGhpcy5zYXNqc0NvbmZpZz8uZGVidWcmJihkP2NvbnNvbGUubG9nKGEsZCk6Y29uc29sZS5sb2coYSkpfWVycm9yKGEsZCl7Y29uc29sZS5lcnJvcihhLGQpfWxvZ1JlcXVlc3REYXRhKGEsZCl7aWYodGhpcy5sb2coIi0tLSBBZGFw'@;
put 'dGVyIFJlcXVlc3QgSW5wdXQgLS0tIiksdGhpcy5sb2coYSksZCl7Zm9yKGxldCBoIG9mIE9iamVjdC5rZXlzKGQpKXRoaXMubG9nKGgsZFtoXSk7dGhpcy5sb2coIi0tLS0tLSIpfWVsc2UgdGhpcy5sb2coIm5vIGRhdGEgc2VudCIpfWluamVjdFNhc1NlcnZpY2UoKXtpZighdGhpcy5zYXNq'@;
put 'c0NvbmZpZyl7Y29uc3QgYT10aGlzLmluamVjdG9yLmdldChCcyk7dGhpcy5zYXNqc0NvbmZpZz1hLmdldFNhc2pzQ29uZmlnKCl9fXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKHhyKERzKSl9fXN0YXRpY3t0aGlzLlx1MDI3NXByb3Y9YW4oe3Rv'@;
put 'a2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pfX1yZXR1cm4gY30pKCk7Y29uc3QgQmNlPWZ1bmN0aW9uIHBBZShjLGwpe3JldHVybiBjPT09bHx8YyE9YyYmbCE9bH0sZUw9ZnVuY3Rpb24gZ0FlKGMsbCl7Zm9yKHZhciBhPWMubGVuZ3RoO2EtLTspaWYoQmNl'@;
put 'KGNbYV1bMF0sbCkpcmV0dXJuIGE7cmV0dXJuLTF9O3ZhciB2QWU9QXJyYXkucHJvdG90eXBlLnNwbGljZTtmdW5jdGlvbiB2eShjKXt2YXIgbD0tMSxhPW51bGw9PWM/MDpjLmxlbmd0aDtmb3IodGhpcy5jbGVhcigpOysrbDxhOyl7dmFyIGQ9Y1tsXTt0aGlzLnNldChkWzBdLGRbMV0pfX12'@;
put 'eS5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24gaEFlKCl7dGhpcy5fX2RhdGFfXz1bXSx0aGlzLnNpemU9MH0sdnkucHJvdG90eXBlLmRlbGV0ZT1mdW5jdGlvbiBiQWUoYyl7dmFyIGw9dGhpcy5fX2RhdGFfXyxhPWVMKGwsYyk7cmV0dXJuIShhPDB8fChhPT1sLmxlbmd0aC0xP2wucG9wKCk6'@;
put 'dkFlLmNhbGwobCxhLDEpLC0tdGhpcy5zaXplLDApKX0sdnkucHJvdG90eXBlLmdldD1mdW5jdGlvbiBfQWUoYyl7dmFyIGw9dGhpcy5fX2RhdGFfXyxhPWVMKGwsYyk7cmV0dXJuIGE8MD92b2lkIDA6bFthXVsxXX0sdnkucHJvdG90eXBlLmhhcz1mdW5jdGlvbiBDQWUoYyl7cmV0dXJuIGVM'@;
put 'KHRoaXMuX19kYXRhX18sYyk+LTF9LHZ5LnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24gTUFlKGMsbCl7dmFyIGE9dGhpcy5fX2RhdGFfXyxkPWVMKGEsYyk7cmV0dXJuIGQ8MD8oKyt0aGlzLnNpemUsYS5wdXNoKFtjLGxdKSk6YVtkXVsxXT1sLHRoaXN9O2NvbnN0IHRMPXZ5LGpjZT0ib2JqZWN0'@;
put 'Ij09dHlwZW9mIGdsb2JhbCYmZ2xvYmFsJiZnbG9iYWwuT2JqZWN0PT09T2JqZWN0JiZnbG9iYWw7dmFyIFBBZT0ib2JqZWN0Ij09dHlwZW9mIHNlbGYmJnNlbGYmJnNlbGYuT2JqZWN0PT09T2JqZWN0JiZzZWxmO2NvbnN0IHZwPWpjZXx8UEFlfHxGdW5jdGlvbigicmV0dXJuIHRoaXMiKSgp'@;
put 'LHVtPXZwLlN5bWJvbDt2YXIgemNlPU9iamVjdC5wcm90b3R5cGUsTkFlPXpjZS5oYXNPd25Qcm9wZXJ0eSxWQWU9emNlLnRvU3RyaW5nLG94PXVtP3VtLnRvU3RyaW5nVGFnOnZvaWQgMDt2YXIgVUFlPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7dmFyIFVjZT11bT91bS50b1N0cmluZ1Rh'@;
put 'Zzp2b2lkIDA7Y29uc3QgYnk9ZnVuY3Rpb24gJEFlKGMpe3JldHVybiBudWxsPT1jP3ZvaWQgMD09PWM/IltvYmplY3QgVW5kZWZpbmVkXSI6IltvYmplY3QgTnVsbF0iOlVjZSYmVWNlIGluIE9iamVjdChjKT9mdW5jdGlvbiBCQWUoYyl7dmFyIGw9TkFlLmNhbGwoYyxveCksYT1jW294XTt0'@;
put 'cnl7Y1tveF09dm9pZCAwO3ZhciBkPSEwfWNhdGNoe312YXIgaD1WQWUuY2FsbChjKTtyZXR1cm4gZCYmKGw/Y1tveF09YTpkZWxldGUgY1tveF0pLGh9KGMpOmZ1bmN0aW9uIFpBZShjKXtyZXR1cm4gVUFlLmNhbGwoYyl9KGMpfSxzeD1mdW5jdGlvbiBLQWUoYyl7dmFyIGw9dHlwZW9mIGM7'@;
put 'cmV0dXJuIG51bGwhPWMmJigib2JqZWN0Ij09bHx8ImZ1bmN0aW9uIj09bCl9LFpjZT1mdW5jdGlvbiBla2UoYyl7aWYoIXN4KGMpKXJldHVybiExO3ZhciBsPWJ5KGMpO3JldHVybiJbb2JqZWN0IEZ1bmN0aW9uXSI9PWx8fCJbb2JqZWN0IEdlbmVyYXRvckZ1bmN0aW9uXSI9PWx8fCJbb2Jq'@;
put 'ZWN0IEFzeW5jRnVuY3Rpb25dIj09bHx8IltvYmplY3QgUHJveHldIj09bH0sQVc9dnBbIl9fY29yZS1qc19zaGFyZWRfXyJdO3ZhciBXY2U9ZnVuY3Rpb24oKXt2YXIgYz0vW14uXSskLy5leGVjKEFXJiZBVy5rZXlzJiZBVy5rZXlzLklFX1BST1RPfHwiIik7cmV0dXJuIGM/IlN5bWJvbChz'@;
put 'cmMpXzEuIitjOiIifSgpO3ZhciBha2U9RnVuY3Rpb24ucHJvdG90eXBlLnRvU3RyaW5nO2NvbnN0IG43PWZ1bmN0aW9uIG9rZShjKXtpZihudWxsIT1jKXt0cnl7cmV0dXJuIGFrZS5jYWxsKGMpfWNhdGNoe310cnl7cmV0dXJuIGMrIiJ9Y2F0Y2h7fX1yZXR1cm4iIn07dmFyIGxrZT0vXlxb'@;
put 'b2JqZWN0IC4rP0NvbnN0cnVjdG9yXF0kLyxma2U9UmVnRXhwKCJeIitGdW5jdGlvbi5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5KS5yZXBsYWNlKC9bXFxeJC4qKz8oKVtcXXt9fF0vZywiXFwkJiIpLnJlcGxhY2UoL2hhc093blByb3Bl'@;
put 'cnR5fChmdW5jdGlvbikuKj8oPz1cXFwoKXwgZm9yIC4rPyg/PVxcXF0pL2csIiQxLio/IikrIiQiKTtjb25zdCBna2U9ZnVuY3Rpb24gcGtlKGMpe3JldHVybiEoIXN4KGMpfHxmdW5jdGlvbiBua2UoYyl7cmV0dXJuISFXY2UmJldjZSBpbiBjfShjKSkmJihaY2UoYyk/ZmtlOmxrZSkudGVz'@;
put 'dChuNyhjKSl9LHI3PWZ1bmN0aW9uIGJrZShjLGwpe3ZhciBhPWZ1bmN0aW9uIG1rZShjLGwpe3JldHVybiBjPy5bbF19KGMsbCk7cmV0dXJuIGdrZShhKT9hOnZvaWQgMH0sbHg9cjcodnAsIk1hcCIpLGN4PXI3KE9iamVjdCwiY3JlYXRlIik7dmFyIFRrZT1PYmplY3QucHJvdG90eXBlLmhh'@;
put 'c093blByb3BlcnR5O3ZhciBJa2U9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtmdW5jdGlvbiB5eShjKXt2YXIgbD0tMSxhPW51bGw9PWM/MDpjLmxlbmd0aDtmb3IodGhpcy5jbGVhcigpOysrbDxhOyl7dmFyIGQ9Y1tsXTt0aGlzLnNldChkWzBdLGRbMV0pfX15eS5wcm90b3R5'@;
put 'cGUuY2xlYXI9ZnVuY3Rpb24gd2tlKCl7dGhpcy5fX2RhdGFfXz1jeD9jeChudWxsKTp7fSx0aGlzLnNpemU9MH0seXkucHJvdG90eXBlLmRlbGV0ZT1mdW5jdGlvbiBTa2UoYyl7dmFyIGw9dGhpcy5oYXMoYykmJmRlbGV0ZSB0aGlzLl9fZGF0YV9fW2NdO3JldHVybiB0aGlzLnNpemUtPWw/'@;
put 'MTowLGx9LHl5LnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24gQWtlKGMpe3ZhciBsPXRoaXMuX19kYXRhX187aWYoY3gpe3ZhciBhPWxbY107cmV0dXJuIl9fbG9kYXNoX2hhc2hfdW5kZWZpbmVkX18iPT09YT92b2lkIDA6YX1yZXR1cm4gVGtlLmNhbGwobCxjKT9sW2NdOnZvaWQgMH0seXkucHJv'@;
put 'dG90eXBlLmhhcz1mdW5jdGlvbiBSa2UoYyl7dmFyIGw9dGhpcy5fX2RhdGFfXztyZXR1cm4gY3g/dm9pZCAwIT09bFtjXTpJa2UuY2FsbChsLGMpfSx5eS5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uIFBrZShjLGwpe3ZhciBhPXRoaXMuX19kYXRhX187cmV0dXJuIHRoaXMuc2l6ZSs9dGhpcy5o'@;
put 'YXMoYyk/MDoxLGFbY109Y3gmJnZvaWQgMD09PWw/Il9fbG9kYXNoX2hhc2hfdW5kZWZpbmVkX18iOmwsdGhpc307Y29uc3QgWWNlPXl5LG5MPWZ1bmN0aW9uIGprZShjLGwpe3ZhciBhPWMuX19kYXRhX187cmV0dXJuIGZ1bmN0aW9uIFZrZShjKXt2YXIgbD10eXBlb2YgYztyZXR1cm4ic3Ry'@;
put 'aW5nIj09bHx8Im51bWJlciI9PWx8fCJzeW1ib2wiPT1sfHwiYm9vbGVhbiI9PWw/Il9fcHJvdG9fXyIhPT1jOm51bGw9PT1jfShsKT9hWyJzdHJpbmciPT10eXBlb2YgbD8ic3RyaW5nIjoiaGFzaCJdOmEubWFwfTtmdW5jdGlvbiBfeShjKXt2YXIgbD0tMSxhPW51bGw9PWM/MDpjLmxlbmd0'@;
put 'aDtmb3IodGhpcy5jbGVhcigpOysrbDxhOyl7dmFyIGQ9Y1tsXTt0aGlzLnNldChkWzBdLGRbMV0pfX1feS5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24gSGtlKCl7dGhpcy5zaXplPTAsdGhpcy5fX2RhdGFfXz17aGFzaDpuZXcgWWNlLG1hcDpuZXcobHh8fHRMKSxzdHJpbmc6bmV3IFljZX19'@;
put 'LF95LnByb3RvdHlwZS5kZWxldGU9ZnVuY3Rpb24gemtlKGMpe3ZhciBsPW5MKHRoaXMsYykuZGVsZXRlKGMpO3JldHVybiB0aGlzLnNpemUtPWw/MTowLGx9LF95LnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24gWmtlKGMpe3JldHVybiBuTCh0aGlzLGMpLmdldChjKX0sX3kucHJvdG90eXBlLmhh'@;
put 'cz1mdW5jdGlvbiBZa2UoYyl7cmV0dXJuIG5MKHRoaXMsYykuaGFzKGMpfSxfeS5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uICRrZShjLGwpe3ZhciBhPW5MKHRoaXMsYyksZD1hLnNpemU7cmV0dXJuIGEuc2V0KGMsbCksdGhpcy5zaXplKz1hLnNpemU9PWQ/MDoxLHRoaXN9O2NvbnN0IGtXPV95'@;
put 'O2Z1bmN0aW9uIHd5KGMpe3ZhciBsPXRoaXMuX19kYXRhX189bmV3IHRMKGMpO3RoaXMuc2l6ZT1sLnNpemV9d3kucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uIEVBZSgpe3RoaXMuX19kYXRhX189bmV3IHRMLHRoaXMuc2l6ZT0wfSx3eS5wcm90b3R5cGUuZGVsZXRlPWZ1bmN0aW9uIEFBZShj'@;
put 'KXt2YXIgbD10aGlzLl9fZGF0YV9fLGE9bC5kZWxldGUoYyk7cmV0dXJuIHRoaXMuc2l6ZT1sLnNpemUsYX0sd3kucHJvdG90eXBlLmdldD1mdW5jdGlvbiBEQWUoYyl7cmV0dXJuIHRoaXMuX19kYXRhX18uZ2V0KGMpfSx3eS5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uIFJBZShjKXtyZXR1cm4g'@;
put 'dGhpcy5fX2RhdGFfXy5oYXMoYyl9LHd5LnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24gWGtlKGMsbCl7dmFyIGE9dGhpcy5fX2RhdGFfXztpZihhIGluc3RhbmNlb2YgdEwpe3ZhciBkPWEuX19kYXRhX187aWYoIWx4fHxkLmxlbmd0aDwxOTkpcmV0dXJuIGQucHVzaChbYyxsXSksdGhpcy5zaXpl'@;
put 'PSsrYS5zaXplLHRoaXM7YT10aGlzLl9fZGF0YV9fPW5ldyBrVyhkKX1yZXR1cm4gYS5zZXQoYyxsKSx0aGlzLnNpemU9YS5zaXplLHRoaXN9O2NvbnN0IFFrZT13eTt2YXIgbkRlPWZ1bmN0aW9uKCl7dHJ5e3ZhciBjPXI3KE9iamVjdCwiZGVmaW5lUHJvcGVydHkiKTtyZXR1cm4gYyh7fSwi'@;
put 'Iix7fSksY31jYXRjaHt9fSgpO2NvbnN0IEdjZT1uRGUsJGNlPWZ1bmN0aW9uIHJEZShjLGwsYSl7Il9fcHJvdG9fXyI9PWwmJkdjZT9HY2UoYyxsLHtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCx2YWx1ZTphLHdyaXRhYmxlOiEwfSk6Y1tsXT1hfTt2YXIgYURlPU9iamVjdC5wcm90'@;
put 'b3R5cGUuaGFzT3duUHJvcGVydHk7Y29uc3QgS2NlPWZ1bmN0aW9uIG9EZShjLGwsYSl7dmFyIGQ9Y1tsXTsoIWFEZS5jYWxsKGMsbCl8fCFCY2UoZCxhKXx8dm9pZCAwPT09YSYmIShsIGluIGMpKSYmJGNlKGMsbCxhKX0sckw9ZnVuY3Rpb24gc0RlKGMsbCxhLGQpe3ZhciBoPSFhO2F8fChh'@;
put 'PXt9KTtmb3IodmFyIGY9LTEsdj1sLmxlbmd0aDsrK2Y8djspe3ZhciBNPWxbZl0sRD1kP2QoYVtNXSxjW01dLE0sYSxjKTp2b2lkIDA7dm9pZCAwPT09RCYmKEQ9Y1tNXSksaD8kY2UoYSxNLEQpOktjZShhLE0sRCl9cmV0dXJuIGF9LEN5PWZ1bmN0aW9uIHVEZShjKXtyZXR1cm4gbnVsbCE9'@;
put 'YyYmIm9iamVjdCI9PXR5cGVvZiBjfSxxY2U9ZnVuY3Rpb24gaERlKGMpe3JldHVybiBDeShjKSYmIltvYmplY3QgQXJndW1lbnRzXSI9PWJ5KGMpfTt2YXIgWGNlPU9iamVjdC5wcm90b3R5cGUsZkRlPVhjZS5oYXNPd25Qcm9wZXJ0eSxwRGU9WGNlLnByb3BlcnR5SXNFbnVtZXJhYmxlLGdE'@;
put 'ZT1xY2UoZnVuY3Rpb24oKXtyZXR1cm4gYXJndW1lbnRzfSgpKT9xY2U6ZnVuY3Rpb24oYyl7cmV0dXJuIEN5KGMpJiZmRGUuY2FsbChjLCJjYWxsZWUiKSYmIXBEZS5jYWxsKGMsImNhbGxlZSIpfTtjb25zdCBtRGU9Z0RlLFN5PUFycmF5LmlzQXJyYXk7dmFyIEpjZT0ib2JqZWN0Ij09dHlw'@;
put 'ZW9mIGV4cG9ydHMmJmV4cG9ydHMmJiFleHBvcnRzLm5vZGVUeXBlJiZleHBvcnRzLFFjZT1KY2UmJiJvYmplY3QiPT10eXBlb2YgbW9kdWxlJiZtb2R1bGUmJiFtb2R1bGUubm9kZVR5cGUmJm1vZHVsZSxldWU9UWNlJiZRY2UuZXhwb3J0cz09PUpjZT92cC5CdWZmZXI6dm9pZCAwO2NvbnN0'@;
put 'IHR1ZT0oZXVlP2V1ZS5pc0J1ZmZlcjp2b2lkIDApfHxmdW5jdGlvbiBiRGUoKXtyZXR1cm4hMX07dmFyIE1EZT0vXig/OjB8WzEtOV1cZCopJC87Y29uc3QgRURlPWZ1bmN0aW9uIHhEZShjLGwpe3ZhciBhPXR5cGVvZiBjO3JldHVybiEhKGw9bD8/OTAwNzE5OTI1NDc0MDk5MSkmJigibnVt'@;
put 'YmVyIj09YXx8InN5bWJvbCIhPWEmJk1EZS50ZXN0KGMpKSYmYz4tMSYmYyUxPT0wJiZjPGx9LG51ZT1mdW5jdGlvbiBBRGUoYyl7cmV0dXJuIm51bWJlciI9PXR5cGVvZiBjJiZjPi0xJiZjJTE9PTAmJmM8PTkwMDcxOTkyNTQ3NDA5OTF9O3ZhciBiYz17fTtiY1siW29iamVjdCBGbG9hdDMy'@;
put 'QXJyYXldIl09YmNbIltvYmplY3QgRmxvYXQ2NEFycmF5XSJdPWJjWyJbb2JqZWN0IEludDhBcnJheV0iXT1iY1siW29iamVjdCBJbnQxNkFycmF5XSJdPWJjWyJbb2JqZWN0IEludDMyQXJyYXldIl09YmNbIltvYmplY3QgVWludDhBcnJheV0iXT1iY1siW29iamVjdCBVaW50OENsYW1wZWRB'@;
put 'cnJheV0iXT1iY1siW29iamVjdCBVaW50MTZBcnJheV0iXT1iY1siW29iamVjdCBVaW50MzJBcnJheV0iXT0hMCxiY1siW29iamVjdCBBcmd1bWVudHNdIl09YmNbIltvYmplY3QgQXJyYXldIl09YmNbIltvYmplY3QgQXJyYXlCdWZmZXJdIl09YmNbIltvYmplY3QgQm9vbGVhbl0iXT1iY1si'@;
put 'W29iamVjdCBEYXRhVmlld10iXT1iY1siW29iamVjdCBEYXRlXSJdPWJjWyJbb2JqZWN0IEVycm9yXSJdPWJjWyJbb2JqZWN0IEZ1bmN0aW9uXSJdPWJjWyJbb2JqZWN0IE1hcF0iXT1iY1siW29iamVjdCBOdW1iZXJdIl09YmNbIltvYmplY3QgT2JqZWN0XSJdPWJjWyJbb2JqZWN0IFJlZ0V4'@;
put 'cF0iXT1iY1siW29iamVjdCBTZXRdIl09YmNbIltvYmplY3QgU3RyaW5nXSJdPWJjWyJbb2JqZWN0IFdlYWtNYXBdIl09ITE7Y29uc3QgRFc9ZnVuY3Rpb24gdEllKGMpe3JldHVybiBmdW5jdGlvbihsKXtyZXR1cm4gYyhsKX19O3ZhciBydWU9Im9iamVjdCI9PXR5cGVvZiBleHBvcnRzJiZl'@;
put 'eHBvcnRzJiYhZXhwb3J0cy5ub2RlVHlwZSYmZXhwb3J0cyx1eD1ydWUmJiJvYmplY3QiPT10eXBlb2YgbW9kdWxlJiZtb2R1bGUmJiFtb2R1bGUubm9kZVR5cGUmJm1vZHVsZSxJVz11eCYmdXguZXhwb3J0cz09PXJ1ZSYmamNlLnByb2Nlc3M7Y29uc3QgTXk9ZnVuY3Rpb24oKXt0cnl7cmV0'@;
put 'dXJuIHV4JiZ1eC5yZXF1aXJlJiZ1eC5yZXF1aXJlKCJ1dGlsIikudHlwZXN8fElXJiZJVy5iaW5kaW5nJiZJVy5iaW5kaW5nKCJ1dGlsIil9Y2F0Y2h7fX0oKTt2YXIgaXVlPU15JiZNeS5pc1R5cGVkQXJyYXk7Y29uc3QgYUllPWl1ZT9EVyhpdWUpOmZ1bmN0aW9uIFFEZShjKXtyZXR1cm4g'@;
put 'Q3koYykmJm51ZShjLmxlbmd0aCkmJiEhYmNbYnkoYyldfTt2YXIgc0llPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7Y29uc3QgYXVlPWZ1bmN0aW9uIGxJZShjLGwpe3ZhciBhPVN5KGMpLGQ9IWEmJm1EZShjKSxoPSFhJiYhZCYmdHVlKGMpLGY9IWEmJiFkJiYhaCYmYUllKGMp'@;
put 'LHY9YXx8ZHx8aHx8ZixNPXY/ZnVuY3Rpb24gbERlKGMsbCl7Zm9yKHZhciBhPS0xLGQ9QXJyYXkoYyk7KythPGM7KWRbYV09bChhKTtyZXR1cm4gZH0oYy5sZW5ndGgsU3RyaW5nKTpbXSxEPU0ubGVuZ3RoO2Zvcih2YXIgWiBpbiBjKShsfHxzSWUuY2FsbChjLFopKSYmKCF2fHwhKCJsZW5n'@;
put 'dGgiPT1afHxoJiYoIm9mZnNldCI9PVp8fCJwYXJlbnQiPT1aKXx8ZiYmKCJidWZmZXIiPT1afHwiYnl0ZUxlbmd0aCI9PVp8fCJieXRlT2Zmc2V0Ij09Wil8fEVEZShaLEQpKSkmJk0ucHVzaChaKTtyZXR1cm4gTX07dmFyIGNJZT1PYmplY3QucHJvdG90eXBlO2NvbnN0IFJXPWZ1bmN0aW9u'@;
put 'IHVJZShjKXt2YXIgbD1jJiZjLmNvbnN0cnVjdG9yO3JldHVybiBjPT09KCJmdW5jdGlvbiI9PXR5cGVvZiBsJiZsLnByb3RvdHlwZXx8Y0llKX0sb3VlPWZ1bmN0aW9uIGRJZShjLGwpe3JldHVybiBmdW5jdGlvbihhKXtyZXR1cm4gYyhsKGEpKX19LGZJZT1vdWUoT2JqZWN0LmtleXMsT2Jq'@;
put 'ZWN0KTt2YXIgZ0llPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7Y29uc3Qgc3VlPWZ1bmN0aW9uIGJJZShjKXtyZXR1cm4gbnVsbCE9YyYmbnVlKGMubGVuZ3RoKSYmIVpjZShjKX0sTFc9ZnVuY3Rpb24geUllKGMpe3JldHVybiBzdWUoYyk/YXVlKGMpOmZ1bmN0aW9uIG1JZShj'@;
put 'KXtpZighUlcoYykpcmV0dXJuIGZJZShjKTt2YXIgbD1bXTtmb3IodmFyIGEgaW4gT2JqZWN0KGMpKWdJZS5jYWxsKGMsYSkmJiJjb25zdHJ1Y3RvciIhPWEmJmwucHVzaChhKTtyZXR1cm4gbH0oYyl9O3ZhciB4SWU9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtjb25zdCBUSWU9'@;
put 'ZnVuY3Rpb24gRUllKGMpe2lmKCFzeChjKSlyZXR1cm4gZnVuY3Rpb24gQ0llKGMpe3ZhciBsPVtdO2lmKG51bGwhPWMpZm9yKHZhciBhIGluIE9iamVjdChjKSlsLnB1c2goYSk7cmV0dXJuIGx9KGMpO3ZhciBsPVJXKGMpLGE9W107Zm9yKHZhciBkIGluIGMpImNvbnN0cnVjdG9yIj09ZCYm'@;
put 'KGx8fCF4SWUuY2FsbChjLGQpKXx8YS5wdXNoKGQpO3JldHVybiBhfSxPVz1mdW5jdGlvbiBBSWUoYyl7cmV0dXJuIHN1ZShjKT9hdWUoYywhMCk6VEllKGMpfTt2YXIgbHVlPSJvYmplY3QiPT10eXBlb2YgZXhwb3J0cyYmZXhwb3J0cyYmIWV4cG9ydHMubm9kZVR5cGUmJmV4cG9ydHMsY3Vl'@;
put 'PWx1ZSYmIm9iamVjdCI9PXR5cGVvZiBtb2R1bGUmJm1vZHVsZSYmIW1vZHVsZS5ub2RlVHlwZSYmbW9kdWxlLHV1ZT1jdWUmJmN1ZS5leHBvcnRzPT09bHVlP3ZwLkJ1ZmZlcjp2b2lkIDAsZHVlPXV1ZT91dWUuYWxsb2NVbnNhZmU6dm9pZCAwO2NvbnN0IGh1ZT1mdW5jdGlvbiBOSWUoKXty'@;
put 'ZXR1cm5bXX07dmFyIEJJZT1PYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLGZ1ZT1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzLGpJZT1mdWU/ZnVuY3Rpb24oYyl7cmV0dXJuIG51bGw9PWM/W106KGM9T2JqZWN0KGMpLGZ1bmN0aW9uIEZJZShjLGwpe2Zvcih2YXIg'@;
put 'YT0tMSxkPW51bGw9PWM/MDpjLmxlbmd0aCxoPTAsZj1bXTsrK2E8ZDspe3ZhciB2PWNbYV07bCh2LGEsYykmJihmW2grK109dil9cmV0dXJuIGZ9KGZ1ZShjKSxmdW5jdGlvbihsKXtyZXR1cm4gQkllLmNhbGwoYyxsKX0pKX06aHVlO2NvbnN0IFBXPWpJZSxwdWU9ZnVuY3Rpb24gWkllKGMs'@;
put 'bCl7Zm9yKHZhciBhPS0xLGQ9bC5sZW5ndGgsaD1jLmxlbmd0aDsrK2E8ZDspY1toK2FdPWxbYV07cmV0dXJuIGN9LGd1ZT1vdWUoT2JqZWN0LmdldFByb3RvdHlwZU9mLE9iamVjdCk7dmFyIEdJZT1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzP2Z1bmN0aW9uKGMpe2Zvcih2YXIgbD1b'@;
put 'XTtjOylwdWUobCxQVyhjKSksYz1ndWUoYyk7cmV0dXJuIGx9Omh1ZTtjb25zdCBtdWU9R0llLHZ1ZT1mdW5jdGlvbiBxSWUoYyxsLGEpe3ZhciBkPWwoYyk7cmV0dXJuIFN5KGMpP2Q6cHVlKGQsYShjKSl9LEpJZT1mdW5jdGlvbiBYSWUoYyl7cmV0dXJuIHZ1ZShjLExXLFBXKX0sZVJlPWZ1'@;
put 'bmN0aW9uIFFJZShjKXtyZXR1cm4gdnVlKGMsT1csbXVlKX0sRlc9cjcodnAsIkRhdGFWaWV3IiksSFc9cjcodnAsIlByb21pc2UiKSxOVz1yNyh2cCwiU2V0IiksVlc9cjcodnAsIldlYWtNYXAiKTt2YXIgYnVlPSJbb2JqZWN0IE1hcF0iLHl1ZT0iW29iamVjdCBQcm9taXNlXSIsX3VlPSJb'@;
put 'b2JqZWN0IFNldF0iLHd1ZT0iW29iamVjdCBXZWFrTWFwXSIsQ3VlPSJbb2JqZWN0IERhdGFWaWV3XSIsb1JlPW43KEZXKSxzUmU9bjcobHgpLGxSZT1uNyhIVyksY1JlPW43KE5XKSx1UmU9bjcoVlcpLGk3PWJ5OyhGVyYmaTcobmV3IEZXKG5ldyBBcnJheUJ1ZmZlcigxKSkpIT1DdWV8fGx4'@;
put 'JiZpNyhuZXcgbHgpIT1idWV8fEhXJiZpNyhIVy5yZXNvbHZlKCkpIT15dWV8fE5XJiZpNyhuZXcgTlcpIT1fdWV8fFZXJiZpNyhuZXcgVlcpIT13dWUpJiYoaTc9ZnVuY3Rpb24oYyl7dmFyIGw9YnkoYyksYT0iW29iamVjdCBPYmplY3RdIj09bD9jLmNvbnN0cnVjdG9yOnZvaWQgMCxkPWE/'@;
put 'bjcoYSk6IiI7aWYoZClzd2l0Y2goZCl7Y2FzZSBvUmU6cmV0dXJuIEN1ZTtjYXNlIHNSZTpyZXR1cm4gYnVlO2Nhc2UgbFJlOnJldHVybiB5dWU7Y2FzZSBjUmU6cmV0dXJuIF91ZTtjYXNlIHVSZTpyZXR1cm4gd3VlfXJldHVybiBsfSk7Y29uc3QgQlc9aTc7dmFyIGhSZT1PYmplY3QucHJv'@;
put 'dG90eXBlLmhhc093blByb3BlcnR5O2NvbnN0IFN1ZT12cC5VaW50OEFycmF5LGpXPWZ1bmN0aW9uIG1SZShjKXt2YXIgbD1uZXcgYy5jb25zdHJ1Y3RvcihjLmJ5dGVMZW5ndGgpO3JldHVybiBuZXcgU3VlKGwpLnNldChuZXcgU3VlKGMpKSxsfTt2YXIgeVJlPS9cdyokLzt2YXIgTXVlPXVt'@;
put 'P3VtLnByb3RvdHlwZTp2b2lkIDAseHVlPU11ZT9NdWUudmFsdWVPZjp2b2lkIDA7Y29uc3QgWVJlPWZ1bmN0aW9uIFdSZShjLGwsYSl7dmFyIGQ9Yy5jb25zdHJ1Y3Rvcjtzd2l0Y2gobCl7Y2FzZSJbb2JqZWN0IEFycmF5QnVmZmVyXSI6cmV0dXJuIGpXKGMpO2Nhc2UiW29iamVjdCBCb29s'@;
put 'ZWFuXSI6Y2FzZSJbb2JqZWN0IERhdGVdIjpyZXR1cm4gbmV3IGQoK2MpO2Nhc2UiW29iamVjdCBEYXRhVmlld10iOnJldHVybiBmdW5jdGlvbiB2UmUoYyxsKXt2YXIgYT1sP2pXKGMuYnVmZmVyKTpjLmJ1ZmZlcjtyZXR1cm4gbmV3IGMuY29uc3RydWN0b3IoYSxjLmJ5dGVPZmZzZXQsYy5i'@;
put 'eXRlTGVuZ3RoKX0oYyxhKTtjYXNlIltvYmplY3QgRmxvYXQzMkFycmF5XSI6Y2FzZSJbb2JqZWN0IEZsb2F0NjRBcnJheV0iOmNhc2UiW29iamVjdCBJbnQ4QXJyYXldIjpjYXNlIltvYmplY3QgSW50MTZBcnJheV0iOmNhc2UiW29iamVjdCBJbnQzMkFycmF5XSI6Y2FzZSJbb2JqZWN0IFVp'@;
put 'bnQ4QXJyYXldIjpjYXNlIltvYmplY3QgVWludDhDbGFtcGVkQXJyYXldIjpjYXNlIltvYmplY3QgVWludDE2QXJyYXldIjpjYXNlIltvYmplY3QgVWludDMyQXJyYXldIjpyZXR1cm4gZnVuY3Rpb24gTVJlKGMsbCl7dmFyIGE9bD9qVyhjLmJ1ZmZlcik6Yy5idWZmZXI7cmV0dXJuIG5ldyBj'@;
put 'LmNvbnN0cnVjdG9yKGEsYy5ieXRlT2Zmc2V0LGMubGVuZ3RoKX0oYyxhKTtjYXNlIltvYmplY3QgTWFwXSI6Y2FzZSJbb2JqZWN0IFNldF0iOnJldHVybiBuZXcgZDtjYXNlIltvYmplY3QgTnVtYmVyXSI6Y2FzZSJbb2JqZWN0IFN0cmluZ10iOnJldHVybiBuZXcgZChjKTtjYXNlIltvYmpl'@;
put 'Y3QgUmVnRXhwXSI6cmV0dXJuIGZ1bmN0aW9uIF9SZShjKXt2YXIgbD1uZXcgYy5jb25zdHJ1Y3RvcihjLnNvdXJjZSx5UmUuZXhlYyhjKSk7cmV0dXJuIGwubGFzdEluZGV4PWMubGFzdEluZGV4LGx9KGMpO2Nhc2UiW29iamVjdCBTeW1ib2xdIjpyZXR1cm4gZnVuY3Rpb24gQ1JlKGMpe3Jl'@;
put 'dHVybiB4dWU/T2JqZWN0KHh1ZS5jYWxsKGMpKTp7fX0oYyl9fTt2YXIgRXVlPU9iamVjdC5jcmVhdGUsR1JlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gYygpe31yZXR1cm4gZnVuY3Rpb24obCl7aWYoIXN4KGwpKXJldHVybnt9O2lmKEV1ZSlyZXR1cm4gRXVlKGwpO2MucHJvdG90eXBlPWw7dmFy'@;
put 'IGE9bmV3IGM7cmV0dXJuIGMucHJvdG90eXBlPXZvaWQgMCxhfX0oKTtjb25zdCAkUmU9R1JlO3ZhciBUdWU9TXkmJk15LmlzTWFwO2NvbnN0IHRMZT1UdWU/RFcoVHVlKTpmdW5jdGlvbiBKUmUoYyl7cmV0dXJuIEN5KGMpJiYiW29iamVjdCBNYXBdIj09QlcoYyl9O3ZhciBBdWU9TXkmJk15'@;
put 'LmlzU2V0O2NvbnN0IG9MZT1BdWU/RFcoQXVlKTpmdW5jdGlvbiByTGUoYyl7cmV0dXJuIEN5KGMpJiYiW29iamVjdCBTZXRdIj09QlcoYyl9O3ZhciBrdWU9IltvYmplY3QgQXJndW1lbnRzXSIsRHVlPSJbb2JqZWN0IEZ1bmN0aW9uXSIsSXVlPSJbb2JqZWN0IE9iamVjdF0iLG9jPXt9O29j'@;
put 'W2t1ZV09b2NbIltvYmplY3QgQXJyYXldIl09b2NbIltvYmplY3QgQXJyYXlCdWZmZXJdIl09b2NbIltvYmplY3QgRGF0YVZpZXddIl09b2NbIltvYmplY3QgQm9vbGVhbl0iXT1vY1siW29iamVjdCBEYXRlXSJdPW9jWyJbb2JqZWN0IEZsb2F0MzJBcnJheV0iXT1vY1siW29iamVjdCBGbG9h'@;
put 'dDY0QXJyYXldIl09b2NbIltvYmplY3QgSW50OEFycmF5XSJdPW9jWyJbb2JqZWN0IEludDE2QXJyYXldIl09b2NbIltvYmplY3QgSW50MzJBcnJheV0iXT1vY1siW29iamVjdCBNYXBdIl09b2NbIltvYmplY3QgTnVtYmVyXSJdPW9jW0l1ZV09b2NbIltvYmplY3QgUmVnRXhwXSJdPW9jWyJb'@;
put 'b2JqZWN0IFNldF0iXT1vY1siW29iamVjdCBTdHJpbmddIl09b2NbIltvYmplY3QgU3ltYm9sXSJdPW9jWyJbb2JqZWN0IFVpbnQ4QXJyYXldIl09b2NbIltvYmplY3QgVWludDhDbGFtcGVkQXJyYXldIl09b2NbIltvYmplY3QgVWludDE2QXJyYXldIl09b2NbIltvYmplY3QgVWludDMyQXJy'@;
put 'YXldIl09ITAsb2NbIltvYmplY3QgRXJyb3JdIl09b2NbRHVlXT1vY1siW29iamVjdCBXZWFrTWFwXSJdPSExO2NvbnN0IExMZT1mdW5jdGlvbiBpTChjLGwsYSxkLGgsZil7dmFyIHYsTT0xJmwsRD0yJmwsWj00Jmw7aWYoYSYmKHY9aD9hKGMsZCxoLGYpOmEoYykpLHZvaWQgMCE9PXYpcmV0'@;
put 'dXJuIHY7aWYoIXN4KGMpKXJldHVybiBjO3ZhciByZT1TeShjKTtpZihyZSl7aWYodj1mdW5jdGlvbiBmUmUoYyl7dmFyIGw9Yy5sZW5ndGgsYT1uZXcgYy5jb25zdHJ1Y3RvcihsKTtyZXR1cm4gbCYmInN0cmluZyI9PXR5cGVvZiBjWzBdJiZoUmUuY2FsbChjLCJpbmRleCIpJiYoYS5pbmRl'@;
put 'eD1jLmluZGV4LGEuaW5wdXQ9Yy5pbnB1dCksYX0oYyksIU0pcmV0dXJuIGZ1bmN0aW9uIE9JZShjLGwpe3ZhciBhPS0xLGQ9Yy5sZW5ndGg7Zm9yKGx8fChsPUFycmF5KGQpKTsrK2E8ZDspbFthXT1jW2FdO3JldHVybiBsfShjLHYpfWVsc2V7dmFyIGNlPUJXKGMpLGJlPWNlPT1EdWV8fCJb'@;
put 'b2JqZWN0IEdlbmVyYXRvckZ1bmN0aW9uXSI9PWNlO2lmKHR1ZShjKSlyZXR1cm4gZnVuY3Rpb24gUkllKGMsbCl7aWYobClyZXR1cm4gYy5zbGljZSgpO3ZhciBhPWMubGVuZ3RoLGQ9ZHVlP2R1ZShhKTpuZXcgYy5jb25zdHJ1Y3RvcihhKTtyZXR1cm4gYy5jb3B5KGQpLGR9KGMsTSk7aWYo'@;
put 'Y2U9PUl1ZXx8Y2U9PWt1ZXx8YmUmJiFoKXtpZih2PUR8fGJlP3t9OmZ1bmN0aW9uIEtSZShjKXtyZXR1cm4iZnVuY3Rpb24iIT10eXBlb2YgYy5jb25zdHJ1Y3Rvcnx8UlcoYyk/e306JFJlKGd1ZShjKSl9KGMpLCFNKXJldHVybiBEP2Z1bmN0aW9uICRJZShjLGwpe3JldHVybiByTChjLG11'@;
put 'ZShjKSxsKX0oYyxmdW5jdGlvbiBrSWUoYyxsKXtyZXR1cm4gYyYmckwobCxPVyhsKSxjKX0odixjKSk6ZnVuY3Rpb24gekllKGMsbCl7cmV0dXJuIHJMKGMsUFcoYyksbCl9KGMsZnVuY3Rpb24gX0llKGMsbCl7cmV0dXJuIGMmJnJMKGwsTFcobCksYyl9KHYsYykpfWVsc2V7aWYoIW9jW2Nl'@;
put 'XSlyZXR1cm4gaD9jOnt9O3Y9WVJlKGMsY2UsTSl9fWZ8fChmPW5ldyBRa2UpO3ZhciBFZT1mLmdldChjKTtpZihFZSlyZXR1cm4gRWU7Zi5zZXQoYyx2KSxvTGUoYyk/Yy5mb3JFYWNoKGZ1bmN0aW9uKHJ0KXt2LmFkZChpTChydCxsLGEscnQsYyxmKSl9KTp0TGUoYykmJmMuZm9yRWFjaChm'@;
put 'dW5jdGlvbihydCxwdCl7di5zZXQocHQsaUwocnQsbCxhLHB0LGMsZikpfSk7dmFyIHFlPXJlP3ZvaWQgMDooWj9EP2VSZTpKSWU6RD9PVzpMVykoYyk7cmV0dXJuIGZ1bmN0aW9uIGVEZShjLGwpe2Zvcih2YXIgYT0tMSxkPW51bGw9PWM/MDpjLmxlbmd0aDsrK2E8ZCYmITEhPT1sKGNbYV0s'@;
put 'YSxjKTspO30ocWV8fGMsZnVuY3Rpb24ocnQscHQpe3FlJiYocnQ9Y1twdD1ydF0pLEtjZSh2LHB0LGlMKHJ0LGwsYSxwdCxjLGYpKX0pLHZ9LGFMPWZ1bmN0aW9uIEZMZShjKXtyZXR1cm4gTExlKGMsNSl9O3ZhciBITGU9eSg3ODg1NSk7bGV0IFN1PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0'@;
put 'b3IoYSl7dGhpcy5zYXNTZXJ2aWNlPWEsdGhpcy5zaG93bkxpYnJhcmllcz01MCx0aGlzLmxvYWRNb3JlQ291bnQ9NTAsdGhpcy5pc01pY3Jvc29mdD0hMSx0aGlzLmlzTWljcm9zb2Z0PXRoaXMuaXNJRW9yRURHRSgpLGNvbnNvbGUubG9nKCJJcyBJRSBvciBFZGdlPyIsdGhpcy5pc01pY3Jv'@;
put 'c29mdCl9Y29udmVydEpzRGF0ZVRvU2FzRGF0ZShhLGQ9ImRheXMiKXtsZXQgaCxmPTA7aD1hIGluc3RhbmNlb2YgRGF0ZT9hOm5ldyBEYXRlKGEpLGY9bmV3IERhdGUoRGF0ZS5VVEMoaC5nZXRGdWxsWWVhcigpLGguZ2V0TW9udGgoKSxoLmdldERhdGUoKSxoLmdldEhvdXJzKCksaC5nZXRN'@;
put 'aW51dGVzKCksaC5nZXRTZWNvbmRzKCkpKS52YWx1ZU9mKCk7Y29uc3QgRD1mKzMxNTYxOTJlNTtzd2l0Y2goZCl7Y2FzZSJkYXlzIjp7bGV0IFo9RC84NjRlNTtyZXR1cm4gWj1NYXRoLmFicyhaKSxaPU1hdGguZmxvb3IoWiksWn1jYXNlInNlY29uZHMiOnJldHVybiBELzFlM31yZXR1cm4g'@;
put 'MH1jb252ZXJ0U2FzRGF5c1RvSnNEYXRlKGEsZD0iZGF5cyIpe2lmKCJudW1iZXIiIT10eXBlb2YgYSYmKGE9cGFyc2VGbG9hdChhKSksInNlY29uZHMiPT09ZCl7bGV0IE09MWUzKmEtMzE1NjE5MmU1O3JldHVybiBNKz02MCpuZXcgRGF0ZShNKS5nZXRUaW1lem9uZU9mZnNldCgpKjFlMyxu'@;
put 'ZXcgRGF0ZShNKX1yZXR1cm4gbmV3IERhdGUoODY0ZTUqYS0zMTU2MTkyZTUpfXRyZWVPbkZpbHRlcihhLGQpe2xldCBoPWEuc2VhcmNoU3RyaW5nP2Euc2VhcmNoU3RyaW5nOiIiLGY9ZC5zcGxpdCgiLiIpWzBdLHY9ZC5zcGxpdCgiLiIpWzFdLE09ZisiQWxsIjthW2ZdJiYoYVtNXXx8KGFb'@;
put 'TV09dGhpcy5kZWVwQ2xvbmUoYVtmXSkpLGFbZl09dGhpcy5kZWVwQ2xvbmUoYVtNXSksaC5sZW5ndGg+MCYmKGFbZl09YVtmXS5maWx0ZXIodj9EPT5EW3ZdLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoaC50b0xvd2VyQ2FzZSgpKTpEPT5ELnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoaC50b0xv'@;
put 'd2VyQ2FzZSgpKSkpKX1saWJyYXJ5T25GaWx0ZXIoYSxkLGgpe2QubGVuZ3RoPjA/YS5mb3JFYWNoKGY9PntmW2hdLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoZC50b0xvd2VyQ2FzZSgpKT8oZi5oaWRkZW49ITEsZi5pbkZvcmVncm91bmQ9ITApOihmLmhpZGRlbj0hMCxmLmluRm9yZWdyb3Vu'@;
put 'ZD0hMSl9KToodGhpcy5yZXNldEFycmF5RmlsdGVyKGEpLHRoaXMuZGlzcGxheUxpYnJhcmllcyhhKSl9ZGlzcGxheUxpYnJhcmllcyhhLGQpe2Q/dGhpcy5zaG93bkxpYnJhcmllcys9dGhpcy5sb2FkTW9yZUNvdW50Oih0aGlzLnNob3duTGlicmFyaWVzPTUwLHRoaXMucmVzZXRMaWJyYXJ5'@;
put 'Rm9yZWdyb3VuZChhKSk7Zm9yKGxldCBoPTA7aDxhLmxlbmd0aCYmaCE9PXRoaXMuc2hvd25MaWJyYXJpZXM7aCsrKWFbaF0uaW5Gb3JlZ3JvdW5kPSEwfXJlc2V0TGlicmFyeUZvcmVncm91bmQoYSl7Zm9yKGxldCBkPTA7ZDxhLmxlbmd0aDtkKyspYVtkXS5pbkZvcmVncm91bmQ9ITF9bWV0'@;
put 'YU9iamVjdE9uRmlsdGVyKGEsZCxoKXtkLmxlbmd0aD4wPyh0aGlzLnJlc2V0QXJyYXlGaWx0ZXIoYSksYS5mb3JFYWNoKGY9PntmW2hdLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoZC50b0xvd2VyQ2FzZSgpKXx8KGYuaGlkZGVuPSEwKX0pKTp0aGlzLnJlc2V0QXJyYXlGaWx0ZXIoYSl9cmVz'@;
put 'ZXRBcnJheUZpbHRlcihhKXthLmZvckVhY2goZD0+e2QuaGlkZGVuPSExLGQuaW5Gb3JlZ3JvdW5kJiZkZWxldGUgZC5pbkZvcmVncm91bmR9KX1pc0lFb3JFREdFKCl7dmFyIGE9d2luZG93Lm5hdmlnYXRvci51c2VyQWdlbnQ7cmV0dXJuIGEuaW5kZXhPZigiTVNJRSAiKT4wfHwoYS5pbmRl'@;
put 'eE9mKCJUcmlkZW50LyIpPjA/KGEuaW5kZXhPZigicnY6IiksITApOmEuaW5kZXhPZigiRWRnZS8iKT4wKX1jb252ZXJ0T2JqZWN0c1RvQXJyYXkoYSxkPSExKXtyZXR1cm4gZCYmKGE9dGhpcy5kZWVwQ2xvbmUoYSkpLGEubWFwKGg9Pk9iamVjdC5rZXlzKGgpLm1hcChmPT5oW2ZdKSl9YWRk'@;
put 'TGVhZGluZ1plcm8oYSl7cmV0dXJuInN0cmluZyIhPXR5cGVvZiBhJiYoYT1hLnRvU3RyaW5nKCkpLGEubGVuZ3RoPDI/IjAiK2E6YX1kZWxldGVLZXlzQW5kSGFzaChhLGQsaD0hMCl7Y29uc3QgZj1oP3RoaXMuZGVlcENsb25lKGEpOmE7Zm9yKGxldCB2IG9mIGQpZGVsZXRlIGZbdl07cmV0'@;
put 'dXJuIEhMZShKU09OLnN0cmluZ2lmeShmKSkudG9TdHJpbmcoKX1kb3dubG9hZFRleHRGaWxlKGEsZCl7Y29uc3QgaD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIik7aC5zZXRBdHRyaWJ1dGUoImhyZWYiLCJkYXRhOnRleHQvcGxhaW47Y2hhcnNldD11dGYtOCwiK2VuY29kZVVSSUNvbXBv'@;
put 'bmVudChkKSksaC5zZXRBdHRyaWJ1dGUoImRvd25sb2FkIixhKyIudHh0IiksaC5zdHlsZS5kaXNwbGF5PSJub25lIixkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGgpLGguY2xpY2soKSxkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGgpfWNvbnZlcnRBcnJheVZhbHVlcyhhLGQpe2lmKGEu'@;
put 'bGVuZ3RoPDEpcmV0dXJuW107c3dpdGNoKGQpe2Nhc2UibnVtYmVyIjpyZXR1cm4gYS5tYXAoaD0+MSpoKTtjYXNlInN0cmluZyI6cmV0dXJuIGEudG9TdHJpbmcoKS5zcGxpdCgiLCIpfX1pc1N0cmVhbWluZ1ZpeWEoKXtyZXR1cm4iU0FTVklZQSI9PT10aGlzLnNhc1NlcnZpY2UuZ2V0U2Vy'@;
put 'dmVyVHlwZSgpJiYhKCFsb2NhdGlvbi5zZWFyY2gudG9Mb3dlckNhc2UoKS5pbmNsdWRlcygiP19maWxlPSIpfHwhbG9jYXRpb24ucGF0aG5hbWUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcygiL3Nhc2pvYmV4ZWN1dGlvbiIpKX1kZWJvdW5jZUNhbGwoYSxkKXtjbGVhclRpbWVvdXQodGhpcy5k'@;
put 'ZWJvdW5jZVRpbWVvdXQpLHRoaXMuZGVib3VuY2VUaW1lb3V0PXNldFRpbWVvdXQoZCxhKX1kZWVwQ2xvbmUoYSl7cmV0dXJuIGFMKGEpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKHhyKEJzKSl9fXN0YXRpY3t0aGlzLlx1MDI3NXByb3Y9YW4o'@;
put 'e3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pfX1yZXR1cm4gY30pKCksdTE9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmLHYsTSl7dGhpcy5sb2dnZXJTZXJ2aWNlPWEsdGhpcy5hcHBTdG9yZVNlcnZpY2U9ZCx0aGlzLmV2ZW50U2Vydmlj'@;
put 'ZT1oLHRoaXMuc2FzU2VydmljZT1mLHRoaXMuaGVscGVyU2VydmljZT12LHRoaXMucm91dGVyPU0sdGhpcy51c2VyQ291bnRMaW1pdGF0aW9uPSExLHRoaXMubGljZW5zZUtleURhdGE9bnVsbCx0aGlzLl9saWNlbmNlU3RhdGU9eVcsdGhpcy5hbGxGZWF0dXJlc09uPXt2aWV3ZXJfcm93c19h'@;
put 'bGxvd2VkOjEvMCxlZGl0b3Jfcm93c19hbGxvd2VkOjEvMCxzdGFnZV9yb3dzX2FsbG93ZWQ6MS8wLGhpc3Rvcnlfcm93c19hbGxvd2VkOjEvMCxzdWJtaXRfcm93c19saW1pdDoxLzAsdGFibGVzX2luX2xpYnJhcnlfbGltaXQ6MS8wLHZpZXdib3hfbGltaXQ6MS8wLGxpbmVhZ2VfZGFpbHlf'@;
put 'bGltaXQ6MS8wLHZpZXdib3g6ITAsZmlsZVVwbG9hZDohMCxlZGl0UmVjb3JkOiEwLGFkZFJlY29yZDohMH0sdGhpcy5mcmVlVGllckxpY2VuY2VEYXRhPXtkZW1vOiEwLGhvdF9saWNlbnNlX2tleTp0aGlzLmFwcFN0b3JlU2VydmljZS5nZXREY0FkYXB0ZXJTZXR0aW5ncygpPy5ob3RMaWNl'@;
put 'bmNlS2V5LHVzZXJzX2FsbG93ZWQ6dGhpcy5fbGljZW5jZVN0YXRlLnVzZXJzX2FsbG93ZWR8fDEsdmFsaWRfdW50aWw6T28oKS5hZGQoMSwieWVhciIpLmZvcm1hdCgiWVlZWS1NTS1ERCIpLHNpdGVfaWQ6IiIsc2l0ZV9pZF9tdWx0aXBsZTpbXX0sdGhpcy5pc0FwcEFjdGl2YXRlZD1uZXcg'@;
put 'ZWkobnVsbCksdGhpcy5pc0FwcE92ZXJDYXBhY2l0eT1uZXcgZWkoITEpLHRoaXMuY3VycmVudFVzZXJDYW5SZWdpc3Rlcj1uZXcgZWkoITEpLHRoaXMuYXBwTG9ja2VkPW5ldyBlaSghMSksdGhpcy5saWNlbnNlRXhwaXJlc0luRGF5cz1uZXcgZWkobnVsbCksdGhpcy5pc0FwcEZyZWVUaWVy'@;
put 'PW5ldyBlaSghMSksdGhpcy5saWNlbmNlUHJvYmxlbT1uZXcgZWkobnVsbCksdGhpcy5ob3RfbGljZW5zZV9rZXk9bmV3IGVpKHZvaWQgMCksdGhpcy5saWNlbmNlU3RhdGU9bmV3IGVpKHRoaXMuX2xpY2VuY2VTdGF0ZSksdGhpcy5zYXNTZXJ2aWNlLmluY29ycmVjdFNpdGVJZEVtaXR0ZXIu'@;
put 'c3Vic2NyaWJlKEQ9PntpZihudWxsIT09dGhpcy5pc0FwcEFjdGl2YXRlZC52YWx1ZSYmIXRoaXMuaXNBcHBGcmVlVGllci52YWx1ZSl7Y29uc3QgWj1gL2xpY2Vuc2luZy9rZXk/ZXJyb3I9bWlzc21hdGNoJm1pc3NtYXRjaElkPSR7RH0mZm9yY2U9dHJ1ZWA7dGhpcy5saWNlbmNlUHJvYmxl'@;
put 'bS5uZXh0KFopLHRoaXMuZGVhY3RpdmF0ZUFwcChaKX19KX1hY3RpdmF0aW9uKGEpe3ZhciBkPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe2QuZnJlZVRpZXJMaWNlbmNlRGF0YS5ob3RfbGljZW5zZV9rZXk9ZC5hcHBTdG9yZVNlcnZpY2UuZ2V0RGNBZGFwdGVyU2V0dGluZ3MoKT8uaG90'@;
put 'TGljZW5jZUtleSx5aWVsZCBkLnNldFN0YXJ0dXBzZXJ2aWNlUnVsZXMoYSkseWllbGQgZC5saWNlbnNpbmcoYS5nbG9idmFycyxhLlNZU1NJVEUpfSkoKX1zZXRTdGFydHVwc2VydmljZVJ1bGVzKGEpe3RoaXMuX2xpY2VuY2VTdGF0ZS5lZGl0UmVjb3JkPSJZRVMiIT09YS5nbG9idmFyc1sw'@;
put 'XS5EQ19SRVNUUklDVF9FRElUUkVDT1JEfWxpY2Vuc2luZyhhLGQpe3ZhciBoPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe2lmKCFhfHwhYVswXSl7Y29uc3Qgdj0nRXJyb3IgZ2V0dGluZyAiR2xvYnZhcnMiIGZyb20gc3RhcnR1cHNlcnZpY2UgcmVzcG9uc2UuJztyZXR1cm4gY29uc29s'@;
put 'ZS5lcnJvcih2KSxoLmlzQXBwQWN0aXZhdGVkLm5leHQoITEpLHZvaWQgaC5yb3V0ZXIubmF2aWdhdGVCeVVybChgL2xpY2Vuc2luZy9rZXk/ZXJyb3I9aW52YWxpZCZkZXRhaWxzPSR7YnRvYSh2KX1gKX1sZXQgZj1hWzBdO3JldHVybiB2b2lkIDA9PT1mLkxJQ0VOQ0VfS0VZfHx2b2lkIDA9'@;
put 'PT1mLkFDVElWQVRJT05fS0VZfHxudWxsPT1mLlJFR0lTVEVSQ09VTlR8fG51bGw9PWYuSVNSRUdJU1RFUkVEPyhjb25zb2xlLmVycm9yKCJTb21lIG9mIGdsb2J2YXJzIGFyZSBub3QgcHJlc2VudCIpLGguaXNBcHBBY3RpdmF0ZWQubmV4dCghMSksdm9pZCBoLmV2ZW50U2VydmljZS5zaG93'@;
put 'SW5mb01vZGFsKCJFcnJvciIsIlNvbWUgb2YgdGhlIGdsb2J2YXJzIGFyZSBub3QgcHJlc2VudCBpbiB0aGUgc3RhcnR1cHNlcnZpY2UiKSk6Zi5MSUNFTkNFX0tFWSYmZi5BQ1RJVkFUSU9OX0tFWT8oaC5saWNlbmNlS2V5PWYuTElDRU5DRV9LRVksaC5hY3RpdmF0aW9uS2V5PWYuQUNUSVZB'@;
put 'VElPTl9LRVksdm9pZCh5aWVsZCBoLmRlY3J5cHRMaWNlbnNlS2V5KGYuTElDRU5DRV9LRVksZi5BQ1RJVkFUSU9OX0tFWSkudGhlbihmdW5jdGlvbigpe3ZhciB2PWVlKGZ1bmN0aW9uKihNKXt5aWVsZCBoLmFwcGxpY2F0aW9uQWN0aXZhdGlvbihNLGYsZCl9KTtyZXR1cm4gZnVuY3Rpb24o'@;
put 'TSl7cmV0dXJuIHYuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0oKSxmdW5jdGlvbigpe3ZhciB2PWVlKGZ1bmN0aW9uKihNKXtjb25zdCBEPWBFcnJvciBkZWNyeXB0aW5nIGxpY2Vuc2Uga2V5LiAke019YDtjb25zb2xlLmVycm9yKEQpO2NvbnN0IFo9YC9saWNlbnNpbmcva2V5P2Vycm9yPWlu'@;
put 'dmFsaWQmZGV0YWlscz0ke2J0b2EoRCl9JmZvcmNlPXRydWVgO2gubGljZW5jZVByb2JsZW0ubmV4dChaKSxoLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKFopLHNldFRpbWVvdXQoKCk9PmguYXBwbGljYXRpb25BY3RpdmF0aW9uKGguZnJlZVRpZXJMaWNlbmNlRGF0YSxmLGQsITApKX0pO3JldHVy'@;
put 'biBmdW5jdGlvbihNKXtyZXR1cm4gdi5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSgpKSkpOnlpZWxkIGguYXBwbGljYXRpb25BY3RpdmF0aW9uKGguZnJlZVRpZXJMaWNlbmNlRGF0YSxmLGQpfSkoKX1hcHBsaWNhdGlvbkFjdGl2YXRpb24oYSxkLGgsZil7Znx8KGY9ITEpLHRoaXMuc2V0U2l0'@;
put 'ZUlkKGEpLCFhLmRlbW8mJmQmJmgmJnRoaXMuaGFuZGxlU2l0ZUlkTWlzc21hdGNoKGEsZCxoLGYpO2xldCB2PXZvaWQgMCE9PWEuaG90X2xpY2Vuc2Vfa2V5P2EuaG90X2xpY2Vuc2Vfa2V5OnRoaXMuaG90X2xpY2Vuc2Vfa2V5LnZhbHVlO3Z8fCh2PXRoaXMuYXBwU3RvcmVTZXJ2aWNlLmdl'@;
put 'dERjQWRhcHRlclNldHRpbmdzKCk/LmhvdExpY2VuY2VLZXkpLHRoaXMuaG90X2xpY2Vuc2Vfa2V5Lm5leHQodiksdGhpcy51c2VyQ291bnRMaW1pdGF0aW9uJiZ0aGlzLmhhbmRsZVVzZXJzQWxsb3dlZChhKSx0aGlzLmxpY2Vuc2VLZXlEYXRhPXRoaXMuaGVscGVyU2VydmljZS5kZWVwQ2xv'@;
put 'bmUoYSksd2luZG93LmFwcGluZm8oKTtjb25zdHtleHBpcnlfZGF0ZTpNLGRheXNUb0V4cGlyeTpEfT10aGlzLmNhbGN1bGF0ZUV4cGlyeShhKTtpZih3aW5kb3cubGljZW5zZUV4cGlyZXNJbj1ELHRoaXMubGljZW5zZUV4cGlyZXNJbkRheXMubmV4dChEKSxEPD0wKXJldHVybiBjb25zb2xl'@;
put 'LmVycm9yKCJMaWNlbnNlIGtleSBoYXMgZXhwaXJlZCIpLHZvaWQoZCYmaCYmdGhpcy5oYW5kbGVFeHBpcnkoTSxkLGgsZikpO3RoaXMuaXNBcHBGcmVlVGllci5uZXh0KCEhYS5kZW1vKSxkJiZ0aGlzLmhhbmRsZVVzZXJSZWdpc3RyYXRpb24oYSxkLGYpLHRoaXMuZGVjb2RlTGljZW5jZUZl'@;
put 'YXR1cmVzKGEpLHRoaXMubGljZW5jZVN0YXRlLm5leHQodGhpcy5fbGljZW5jZVN0YXRlKX1kZWNvZGVMaWNlbmNlRmVhdHVyZXMoYSl7aWYoIWEuZmVhdHVyZXMpe2lmKGEuZGVtbylyZXR1cm47cmV0dXJuIHZvaWQodGhpcy5fbGljZW5jZVN0YXRlPXRoaXMuYWxsRmVhdHVyZXNPbil9Y29u'@;
put 'c3QgZD1hLmZlYXR1cmVzLnNwbGl0KCIsIik7dGhpcy5fbGljZW5jZVN0YXRlPXsuLi50aGlzLl9saWNlbmNlU3RhdGUsdmlld2VyX3Jvd3NfYWxsb3dlZDp0aGlzLnBhcnNlRmVhdHVyZVZhbHVlKGRbZ2gudmlld2VyX3Jvd3NfYWxsb3dlZF0pLGVkaXRvcl9yb3dzX2FsbG93ZWQ6dGhpcy5w'@;
put 'YXJzZUZlYXR1cmVWYWx1ZShkW2doLmVkaXRvcl9yb3dzX2FsbG93ZWRdKSxzdGFnZV9yb3dzX2FsbG93ZWQ6dGhpcy5wYXJzZUZlYXR1cmVWYWx1ZShkW2doLnN0YWdlX3Jvd3NfYWxsb3dlZF0pLGhpc3Rvcnlfcm93c19hbGxvd2VkOnRoaXMucGFyc2VGZWF0dXJlVmFsdWUoZFtnaC5oaXN0'@;
put 'b3J5X3Jvd3NfYWxsb3dlZF0pLHN1Ym1pdF9yb3dzX2xpbWl0OnRoaXMucGFyc2VGZWF0dXJlVmFsdWUoZFtnaC5zdWJtaXRfcm93c19saW1pdF0pLHRhYmxlc19pbl9saWJyYXJ5X2xpbWl0OnRoaXMucGFyc2VGZWF0dXJlVmFsdWUoZFtnaC50YWJsZXNfaW5fbGlicmFyeV9saW1pdF0pLHZp'@;
put 'ZXdib3hfbGltaXQ6dGhpcy5wYXJzZUZlYXR1cmVWYWx1ZShkW2doLnZpZXdib3hfbGltaXRdKSxsaW5lYWdlX2RhaWx5X2xpbWl0OnRoaXMucGFyc2VGZWF0dXJlVmFsdWUoZFtnaC5saW5lYWdlX2RhaWx5X2xpbWl0XSksdmlld2JveDp0aGlzLnBhcnNlRmVhdHVyZVRvZ2dsZShkW2doLnZp'@;
put 'ZXdib3hdKSxmaWxlVXBsb2FkOnRoaXMucGFyc2VGZWF0dXJlVG9nZ2xlKGRbZ2guZmlsZVVwbG9hZF0pLGVkaXRSZWNvcmQ6dGhpcy5wYXJzZUZlYXR1cmVUb2dnbGUoZFtnaC5lZGl0UmVjb3JkXSksYWRkUmVjb3JkOnRoaXMucGFyc2VGZWF0dXJlVG9nZ2xlKGRbZ2guYWRkUmVjb3JkXSl9'@;
put 'LHRoaXMubG9nZ2VyU2VydmljZS5sb2coIkxpY2VuY2Ugc3RhdGU6Iix0aGlzLl9saWNlbmNlU3RhdGUpfXBhcnNlRmVhdHVyZVZhbHVlKGEpe3JldHVybiItIj09PWE/MS8wOnBhcnNlSW50KGEpfXBhcnNlRmVhdHVyZVRvZ2dsZShhKXtyZXR1cm4hIXBhcnNlSW50KGEpfWRlY3J5cHRMaWNl'@;
put 'bnNlS2V5KGEsZCl7dmFyIGg9dGhpcztyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oKXt2YXIgZj1lZShmdW5jdGlvbioodixNKXtpZighd2luZG93LmNyeXB0b3x8IXdpbmRvdy5jcnlwdG8uc3VidGxlKXRyeXtsZXQgYmU9YXRvYihhLnNwbGl0KCIiKS5yZXZlcnNlKCkuam9pbigiIikp'@;
put 'O3YoSlNPTi5wYXJzZShiZSkpfWNhdGNoKGJlKXtNKCJFcnJvciBwYXJzaW5nIGh0dHAgbGljZW5zZSBrZXkgZGF0YS4gIitiZSl9bGV0IFosRD15aWVsZCBoLmJhc2U2NFRvQXJyYXlCdWZmZXIoYSkuY2F0Y2goYmU9PntNKGJlKX0pO2NvbnN0IHJlPXlpZWxkIGguYmFzZTY0VG9BcnJheUJ1'@;
put 'ZmZlcihkKS5jYXRjaChiZT0+e00oYmUpfSk7aWYoIXJlKXJldHVybiB2b2lkIE0oIk1pc3NpbmcgYWN0aXZhdGlvbiBrZXkiKTtsZXQgY2U7Wj1yZTt0cnl7Y2U9eWllbGQgd2luZG93LmNyeXB0by5zdWJ0bGUuaW1wb3J0S2V5KCJwa2NzOCIsWix7bmFtZToiUlNBLU9BRVAiLGhhc2g6IlNI'@;
put 'QS0yNTYifSwhMCxbImRlY3J5cHQiXSl9Y2F0Y2goYmUpe00oIlVuYWJsZSB0byBpbXBvcnQgZGVjcnlwdGlvbiBrZXk6ICIrYmUpfWlmKGNlKWlmKEQpdHJ5e3dpbmRvdy5jcnlwdG8uc3VidGxlLmRlY3J5cHQoe25hbWU6IlJTQS1PQUVQIixoYXNoOntuYW1lOiJTSEEtMjU2In19LGNlLEQp'@;
put 'LnRoZW4oYmU9PntsZXQgRWU9KG5ldyBSVGUuVGV4dERlY29kZXIpLmRlY29kZShiZSk7dHJ5e3YoSlNPTi5wYXJzZShFZSkpfWNhdGNoKEJlKXtNKCJFcnJvciBwYXJzaW5nIGxpY2Vuc2Uga2V5IGRhdGEuICIrQmUpfX0sYmU9PntNKGJlKX0pfWNhdGNoKGJlKXtNKGJlKX1lbHNlIE0oIkxp'@;
put 'Y2Vuc2Uga2V5IGJ5dGVzIG1pc3NpbmciKTtlbHNlIE0oIlVuYWJsZSB0byBpbXBvcnQgZGVjcnlwdGlvbiBrZXkiKX0pO3JldHVybiBmdW5jdGlvbih2LE0pe3JldHVybiBmLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KCkpfWdldEhvdExpY2Vuc2VLZXkoKXtyZXR1cm4gdGhpcy5ob3RfbGlj'@;
put 'ZW5zZV9rZXkudmFsdWV9Z2V0TGljZW5zZUtleURhdGEoKXtyZXR1cm4gdGhpcy5saWNlbnNlS2V5RGF0YX1kZWFjdGl2YXRlQXBwKGEpe3RoaXMuX2xpY2VuY2VTdGF0ZT15Vyx0aGlzLmFwcGxpY2F0aW9uQWN0aXZhdGlvbih0aGlzLmZyZWVUaWVyTGljZW5jZURhdGEpLGEmJnRoaXMucm91'@;
put 'dGVyLm5hdmlnYXRlQnlVcmwoYSl9Y2hlY2tMaW5lYWdlTGltaXQoYSl7aWYodGhpcy5saWNlbmNlU3RhdGUudmFsdWUubGluZWFnZV9kYWlseV9saW1pdD09PTEvMClyZXR1cm4hMTtjb25zdCBkPWxvY2FsU3RvcmFnZS5nZXRJdGVtKCJsaW5lYWdlX3JlbmRlcnMiKSxoPU9vKCkudmFsdWVP'@;
put 'ZigpO2lmKCFkKXJldHVybiBhfHx0aGlzLnNldExpbmVhZ2VSZW5kZXIoaCwxKSwhMTtjb25zdCBmPXBhcnNlSW50KGQuc3BsaXQoIiwiKVswXSksdj1wYXJzZUludChkLnNwbGl0KCIsIilbMV0pO3JldHVybiBPbyhmKS5pc1NhbWUoT28oKSwiZGF5Iik/dj49dGhpcy5saWNlbmNlU3RhdGUu'@;
put 'dmFsdWUubGluZWFnZV9kYWlseV9saW1pdHx8KGF8fHRoaXMuc2V0TGluZWFnZVJlbmRlcihoLHYrMSksITEpOihhfHx0aGlzLnNldExpbmVhZ2VSZW5kZXIoaCwxKSwhMSl9c2V0TGluZWFnZVJlbmRlcihhLGQpe2xvY2FsU3RvcmFnZS5zZXRJdGVtKCJsaW5lYWdlX3JlbmRlcnMiLGAke2F9'@;
put 'LCR7ZH1gKX1iYXNlNjRUb0FycmF5QnVmZmVyKGEpe3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbigpe3ZhciBkPWVlKGZ1bmN0aW9uKihoLGYpe2goZ2NlLkQoYSkpfSk7cmV0dXJuIGZ1bmN0aW9uKGgsZil7cmV0dXJuIGQuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0oKSl9YXJyYXlCdWZm'@;
put 'ZXJUb0Jhc2U2NChhKXtyZXR1cm4gbmV3IFByb21pc2UoKGQsaCk9PntkKGdjZS5sKGEpKX0pfXNldFNpdGVJZChhKXthLnNpdGVfaWRfbXVsdGlwbGU/dGhpcy5zYXNTZXJ2aWNlLnNldExpY2Vuc2VTaXRlSWQoYS5zaXRlX2lkX211bHRpcGxlKTphLnNpdGVfaWQmJnRoaXMuc2FzU2Vydmlj'@;
put 'ZS5zZXRMaWNlbnNlU2l0ZUlkKGEuc2l0ZV9pZCl9aGFuZGxlU2l0ZUlkTWlzc21hdGNoKGEsZCxoLGYpe2xldCB2PSExLE09ITE7aWYoKCFhLnNpdGVfaWR8fGEuc2l0ZV9pZCE9PWgpJiYodj0hMCksKCFhLnNpdGVfaWRfbXVsdGlwbGV8fCFhLnNpdGVfaWRfbXVsdGlwbGUuaW5jbHVkZXMo'@;
put 'aCkpJiYoTT0hMCksdiYmTSlyZXR1cm4gY29uc29sZS5lcnJvcigiVGhlIGtleSBwcm92aWRlZCBpcyBmb3IgZGlmZmVyZW50IG9yZ2FuaXphdGlvbi4iKSx2b2lkIHNldFRpbWVvdXQoKCk9Pntjb25zdCBEPSIvbGljZW5zaW5nL2tleT9lcnJvcj1taXNzbWF0Y2gmZm9yY2U9dHJ1ZSI7dGhp'@;
put 'cy5saWNlbmNlUHJvYmxlbS5uZXh0KEQpLHRoaXMuX2xpY2VuY2VTdGF0ZT15Vyx0aGlzLmFwcGxpY2F0aW9uQWN0aXZhdGlvbih0aGlzLmZyZWVUaWVyTGljZW5jZURhdGEsZCxoLCEwKSxmfHx0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKEQpfSl9Y2FsY3VsYXRlRXhwaXJ5KGEpe2xldCBk'@;
put 'PU9vKGEudmFsaWRfdW50aWwsIllZWVktTU0tREQiKS5zdGFydE9mKCJkYXkiKSxoPU9vKCkuc3RhcnRPZigiZGF5IiksZj1kLmRpZmYoaCwiZGF5cyIpO3JldHVybntleHBpcnlfZGF0ZTpkLGRheXNUb0V4cGlyeTpmfX1oYW5kbGVFeHBpcnkoYSxkLGgsZil7c2V0VGltZW91dCgoKT0+e2Nv'@;
put 'bnN0IHY9YC9saWNlbnNpbmcva2V5P2ZvcmNlPXRydWUmZXJyb3I9ZXhwaXJlZCZkZXRhaWxzPSR7YnRvYSgiRXhwaXJ5IGRhdGU6ICIrYS5mb3JtYXQoIkREL01NL1lZWVkiKSl9YDt0aGlzLmxpY2VuY2VQcm9ibGVtLm5leHQodiksdGhpcy5hcHBsaWNhdGlvbkFjdGl2YXRpb24odGhpcy5m'@;
put 'cmVlVGllckxpY2VuY2VEYXRhLGQsaCwhMCksZnx8dGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCh2KX0pfWhhbmRsZVVzZXJzQWxsb3dlZChhKXthLmRlbW8mJnZvaWQgMCE9PXRoaXMuX2xpY2VuY2VTdGF0ZS51c2Vyc19hbGxvd2VkJiYoYS51c2Vyc19hbGxvd2VkPWEudXNlcnNfYWxsb3dl'@;
put 'ZD4wP2EudXNlcnNfYWxsb3dlZDp0aGlzLl9saWNlbmNlU3RhdGUudXNlcnNfYWxsb3dlZCksdGhpcy5fbGljZW5jZVN0YXRlLnVzZXJzX2FsbG93ZWQ9YS51c2Vyc19hbGxvd2VkfWhhbmRsZVVzZXJSZWdpc3RyYXRpb24oYSxkLGgpe2lmKHRoaXMudXNlckNvdW50TGltaXRhdGlvbiYmKGQu'@;
put 'UkVHSVNURVJDT1VOVD5hLnVzZXJzX2FsbG93ZWQ/KGNvbnNvbGUud2FybigiQXBwIGhhcyBtb3JlIHVzZXJzIHJlZ2lzdGVyZWQgdGhlbiBsaWNlbnNlZC4iKSx0aGlzLmlzQXBwT3ZlckNhcGFjaXR5Lm5leHQoITApKTpkLlJFR0lTVEVSQ09VTlQ9PT1hLnVzZXJzX2FsbG93ZWQmJmNvbnNv'@;
put 'bGUud2FybigiQXBwIGhhcyBoaXQgbGltaXQgb2YgdXNlcnMgcmVnaXN0ZXJlZC4iKSksMSE9PWQuSVNSRUdJU1RFUkVEKXJldHVybiBkLlJFR0lTVEVSQ09VTlQ8YS51c2Vyc19hbGxvd2VkfHwhdGhpcy51c2VyQ291bnRMaW1pdGF0aW9uPyhjb25zb2xlLmxvZygiVXNlciBjYW4gcmVnaXN0'@;
put 'ZXIiKSx0aGlzLmN1cnJlbnRVc2VyQ2FuUmVnaXN0ZXIubmV4dCghMCksdGhpcy5pc0FwcEFjdGl2YXRlZC5uZXh0KCExKSx2b2lkKGh8fHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoIi9saWNlbnNpbmcvcmVnaXN0ZXIiKSkpOih0aGlzLmN1cnJlbnRVc2VyQ2FuUmVnaXN0ZXIubmV4dCgh'@;
put 'MSksdGhpcy5pc0FwcEFjdGl2YXRlZC5uZXh0KCExKSx2b2lkKGh8fHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoIi9saWNlbnNpbmcvbGltaXQiKSkpO3RoaXMuaXNBcHBBY3RpdmF0ZWQubmV4dCghMCl9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8'@;
put 'YykoeHIoU2QpLHhyKFE4KSx4cih2YykseHIoQnMpLHhyKFN1KSx4cihMcykpfX1zdGF0aWN7dGhpcy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KX19cmV0dXJuIGN9KSgpLG9MPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3Io'@;
put 'YSxkLGgsZix2LE0sRCl7dGhpcy5saWNlbmNlU2VydmljZT1hLHRoaXMuZXZlbnRTZXJ2aWNlPWQsdGhpcy5zYXNTZXJ2aWNlPWgsdGhpcy5sb2dnZXJTZXJ2aWNlPWYsdGhpcy5hcHBTZXR0aW5nc1NlcnZpY2U9dix0aGlzLnJvdXRlcj1NLHRoaXMuYXBwU3RvcmVTZXJ2aWNlPUQsdGhpcy5z'@;
put 'eXNzaXRlPW5ldyBlaShudWxsKSx0aGlzLmVudmlyb25tZW50SW5mbz17fSx0aGlzLnN1YnNjcmliZSgpLHRoaXMucm91dGVyLmV2ZW50cy5zdWJzY3JpYmUocmU9PntyZSBpbnN0YW5jZW9mIHBwJiYiL2RlcGxveSI9PT1yZS51cmwmJnRoaXMuZXZlbnRTZXJ2aWNlLnN0YXJ0dXBEYXRhTG9h'@;
put 'ZGVkKCl9KTtjb25zdCBaPXRoaXMuYXBwU2V0dGluZ3NTZXJ2aWNlLnNldHRpbmdzLnZhbHVlO1oucGVyc2lzdFNlbGVjdGVkVGhlbWUmJnRoaXMuZXZlbnRTZXJ2aWNlLnRvZ2dsZURhcmtNb2RlKFouc2VsZWN0ZWRUaGVtZSE9PWd5LmxpZ2h0JiZaLnNlbGVjdGVkVGhlbWU9PT1neS5kYXJr'@;
put 'KX1zYXNTZXJ2aWNlSW5pdCgpe3RoaXMuc2FzU2VydmljZS5zYXNTZXJ2aWNlSW5pdCgpfXN1YnNjcmliZSgpe3RoaXMuc2FzU2VydmljZS5sb2FkU3RhcnR1cFNlcnZpY2VFbWl0dGVyLnN1YnNjcmliZSgoKT0+e3RoaXMuc3RhcnRVcERhdGEoKX0pLHRoaXMuc2FzU2VydmljZS5yZXF1ZXN0'@;
put 'U2l0ZUlkRW1pdHRlci5zdWJzY3JpYmUoYT0+e3RoaXMucGF0Y2hTeXNzaXRlKGEpfSl9Z2V0RW52aXJvbm1lbnRJbmZvKCl7cmV0dXJuIHRoaXMuZW52aXJvbm1lbnRJbmZvfXBhdGNoU3lzc2l0ZShhKXtsZXQgZD10aGlzLnN5c3NpdGUuZ2V0VmFsdWUoKTtkJiYoZC5pbmNsdWRlcyhhKXx8'@;
put 'KGQucHVzaChhKSx0aGlzLnN5c3NpdGUubmV4dChkKSkpfXN0YXJ0VXBEYXRhKCl7dmFyIGE9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7bGV0IGQ9ITE7eWllbGQgYS5zYXNTZXJ2aWNlLnJlcXVlc3QoInB1YmxpYy9zdGFydHVwc2VydmljZSIsbnVsbCkudGhlbihmdW5jdGlvbigpe3Zh'@;
put 'ciBoPWVlKGZ1bmN0aW9uKihmKXthLnN5c3NpdGUubmV4dChbZi5hZGFwdGVyUmVzcG9uc2UuU1lTU0lURV0pO2xldCB2PVtdO2lmKCghZi5hZGFwdGVyUmVzcG9uc2UuZ2xvYnZhcnN8fGYuYWRhcHRlclJlc3BvbnNlLmdsb2J2YXJzJiYhZi5hZGFwdGVyUmVzcG9uc2UuZ2xvYnZhcnNbMF0p'@;
put 'JiZ2LnB1c2goIkdsb2J2YXJzIiksZi5hZGFwdGVyUmVzcG9uc2Uuc2FzZGF0YXNldHN8fHYucHVzaCgiU2FzZGF0YXNldHMiKSxmLmFkYXB0ZXJSZXNwb25zZS5zYXNsaWJzfHx2LnB1c2goIlNhc2xpYnMiKSxmLmFkYXB0ZXJSZXNwb25zZS54bG1hcHN8fHYucHVzaCgiWExNYXBzIiksdi5s'@;
put 'ZW5ndGg+MClyZXR1cm4gZD0hMCxhLmV2ZW50U2VydmljZS5zaG93SW5mb01vZGFsKCJFcnJvciIsYCR7di5qb2luKCIsICIpfSBhcmUgbm90IHByZXNlbnQgaW4gdGhlIHN0YXJ0dXBzZXJ2aWNlYCksdm9pZCBhLmxpY2VuY2VTZXJ2aWNlLmlzQXBwQWN0aXZhdGVkLm5leHQoITEpO2NvbnN0'@;
put 'IE09YS5hcHBTdG9yZVNlcnZpY2UuZ2V0RGNBZGFwdGVyU2V0dGluZ3MoKTthLmVudmlyb25tZW50SW5mbz17U1lTU0lURTpmLmFkYXB0ZXJSZXNwb25zZS5TWVNTSVRFLFNZU1NDUEw6Zi5hZGFwdGVyUmVzcG9uc2UuU1lTU0NQTCxTWVNUQ1BJUEhPU1ROQU1FOmYuYWRhcHRlclJlc3BvbnNl'@;
put 'LlNZU1RDUElQSE9TVE5BTUUsU1lTVkxPTkc6Zi5hZGFwdGVyUmVzcG9uc2UuU1lTVkxPTkcsTUVNU0laRTpmLmFkYXB0ZXJSZXNwb25zZS5NRU1TSVpFLFNZU1BST0NFU1NNT0RFOmYuYWRhcHRlclJlc3BvbnNlLlNZU1BST0NFU1NNT0RFLFNZU0hPU1ROQU1FOmYuYWRhcHRlclJlc3BvbnNl'@;
put 'LlNZU0hPU1ROQU1FLFNZU1VTRVJJRDpmLmFkYXB0ZXJSZXNwb25zZS5TWVNVU0VSSUQsU1lTSE9TVElORk9MT05HOmYuYWRhcHRlclJlc3BvbnNlLlNZU0hPU1RJTkZPTE9ORyxTWVNFTkNPRElORzpmLmFkYXB0ZXJSZXNwb25zZS5TWVNFTkNPRElORyxBVVRPRVhFQzpmLmFkYXB0ZXJSZXNw'@;
put 'b25zZS5BVVRPRVhFQyxJU0FETUlOOmYuYWRhcHRlclJlc3BvbnNlLmdsb2J2YXJzWzBdLklTQURNSU4sRENfQURNSU5fR1JPVVA6Zi5hZGFwdGVyUmVzcG9uc2UuZ2xvYnZhcnNbMF0uRENfQURNSU5fR1JPVVAsQVBQX0xPQzpNPy5hcHBMb2N9O2xldCByZSxjZSxEPWYuYWRhcHRlclJlc3Bv'@;
put 'bnNlLnNhc2RhdGFzZXRzLFo9e307Zm9yKGxldCBxZSBvZiBEKVpbcWUuTElCUkVGXXx8KFpbcWUuTElCUkVGXT1bXSksWltxZS5MSUJSRUZdLnB1c2gocWUuRFNOKTtsZXQgYmU9SlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShaKSksRWU9W107Zm9yKGxldCBxZSBvZiBPYmplY3Qua2V5cyhi'@;
put 'ZSkpRWUucHVzaCh7TElCUkFSWVJFRjpxZSx0YWJsZXM6YmVbcWVdfSk7bGV0IEJlPUVlO3JlPVosY2U9T2JqZWN0LmtleXMoWiksdm9pZCAwIT09cmUmJihLbi5lZGl0b3IubGlic0FuZFRhYmxlcz1yZSksS24ueGxtYXBzPWYuYWRhcHRlclJlc3BvbnNlLnhsbWFwcy5tYXAocWU9Pih7aWQ6'@;
put 'cWVbMF0sZGVzY3JpcHRpb246cWVbMV0sdGFyZ2V0RFM6cWVbMl19KSksS24uZWRpdG9yLnRyZWVOb2RlTGlicmFyaWVzPUJlLEtuLmVkaXRvci5saWJyYXJpZXM9Y2UsS24uZWRpdG9yLnN0YXJ0dXBTZXQ9ITAsS24uZGNMaWI9Zi5hZGFwdGVyUmVzcG9uc2UuZ2xvYnZhcnNbMF0uRENMSUIs'@;
put 'eWllbGQgYS5saWNlbmNlU2VydmljZS5hY3RpdmF0aW9uKGYuYWRhcHRlclJlc3BvbnNlKX0pO3JldHVybiBmdW5jdGlvbihmKXtyZXR1cm4gaC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSgpKS5jYXRjaChoPT57ZD0hMCxhLmV2ZW50U2VydmljZS5zaG93SW5mb01vZGFsKCJFcnJvciIsIlRo'@;
put 'ZXJlIGlzIGFuIGlzc3VlIHdpdGggc3RhcnR1cHNlcnZpY2UgcmVzcG9uc2UiKSxhLmxpY2VuY2VTZXJ2aWNlLmlzQXBwQWN0aXZhdGVkLm5leHQoITEpfSksYS5sb2dnZXJTZXJ2aWNlLmxvZygiQWN0aXZhdGVkOiIsYS5saWNlbmNlU2VydmljZS5pc0FwcEFjdGl2YXRlZC52YWx1ZSksZHx8'@;
put 'KGEuZXZlbnRTZXJ2aWNlLnN0YXJ0dXBEYXRhTG9hZGVkKCksYS5saWNlbmNlU2VydmljZS5pc0FwcEFjdGl2YXRlZC52YWx1ZT9hLnJvdXRlci51cmwuaW5jbHVkZXMoImxpY2Vuc2luZyIpJiZhLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKCIvaG9tZSIpOiFhLnJvdXRlci51cmwuaW5jbHVkZXMo'@;
put 'ImRlcGxveSIpJiYhYS5yb3V0ZXIudXJsLmluY2x1ZGVzKCJsaWNlbnNpbmciKSYmYS5yb3V0ZXIubmF2aWdhdGVCeVVybCgiL2xpY2Vuc2luZy9rZXk/ZXJyb3I9bWlzc2luZyZmb3JjZT10cnVlIikpfSkoKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhk'@;
put 'fHxjKSh4cih1MSkseHIodmMpLHhyKEJzKSx4cihTZCkseHIoJFIpLHhyKExzKSx4cihROCkpfX1zdGF0aWN7dGhpcy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KX19cmV0dXJuIGN9KSgpLFJ1ZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCl7dGhp'@;
put 'cy5fcmVuZGVyZXI9YSx0aGlzLl9lbGVtZW50UmVmPWQsdGhpcy5vbkNoYW5nZT1oPT57fSx0aGlzLm9uVG91Y2hlZD0oKT0+e319c2V0UHJvcGVydHkoYSxkKXt0aGlzLl9yZW5kZXJlci5zZXRQcm9wZXJ0eSh0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsYSxkKX1yZWdpc3Rlck9u'@;
put 'VG91Y2hlZChhKXt0aGlzLm9uVG91Y2hlZD1hfXJlZ2lzdGVyT25DaGFuZ2UoYSl7dGhpcy5vbkNoYW5nZT1hfXNldERpc2FibGVkU3RhdGUoYSl7dGhpcy5zZXRQcm9wZXJ0eSgiZGlzYWJsZWQiLGEpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMp'@;
put 'KEdlKEVvKSxHZShKaSkpfX1zdGF0aWN7dGhpcy5cdTAyNzVkaXI9RXIoe3R5cGU6Y30pfX1yZXR1cm4gY30pKCksYTc9KCgpPT57Y2xhc3MgYyBleHRlbmRzIFJ1ZXtzdGF0aWN7dGhpcy5cdTAyNzVmYWM9KCgpPT57bGV0IGE7cmV0dXJuIGZ1bmN0aW9uKGgpe3JldHVybihhfHwoYT1Zcyhj'@;
put 'KSkpKGh8fGMpfX0pKCl9c3RhdGlje3RoaXMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsZmVhdHVyZXM6W3dhXX0pfX1yZXR1cm4gY30pKCk7Y29uc3QgYnA9bmV3IFN0KCIiKSxWTGU9e3Byb3ZpZGU6YnAsdXNlRXhpc3Rpbmc6Q3MoKCk9Pk1kKSxtdWx0aTohMH07bGV0IE1kPSgoKT0+e2NsYXNz'@;
put 'IGMgZXh0ZW5kcyBhN3t3cml0ZVZhbHVlKGEpe3RoaXMuc2V0UHJvcGVydHkoImNoZWNrZWQiLGEpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz0oKCk9PntsZXQgYTtyZXR1cm4gZnVuY3Rpb24oaCl7cmV0dXJuKGF8fChhPVlzKGMpKSkoaHx8Yyl9fSkoKX1zdGF0aWN7dGhpcy5cdTAyNzVkaXI9'@;
put 'RXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siaW5wdXQiLCJ0eXBlIiwiY2hlY2tib3giLCJmb3JtQ29udHJvbE5hbWUiLCIiXSxbImlucHV0IiwidHlwZSIsImNoZWNrYm94IiwiZm9ybUNvbnRyb2wiLCIiXSxbImlucHV0IiwidHlwZSIsImNoZWNrYm94IiwibmdNb2RlbCIsIiJdXSxob3N0Qmlu'@;
put 'ZGluZ3M6ZnVuY3Rpb24oZCxoKXsxJmQmJkZ0KCJjaGFuZ2UiLGZ1bmN0aW9uKHYpe3JldHVybiBoLm9uQ2hhbmdlKHYudGFyZ2V0LmNoZWNrZWQpfSkoImJsdXIiLGZ1bmN0aW9uKCl7cmV0dXJuIGgub25Ub3VjaGVkKCl9KX0sZmVhdHVyZXM6W2RhKFtWTGVdKSx3YV19KX19cmV0dXJuIGN9'@;
put 'KSgpO2NvbnN0IEJMZT17cHJvdmlkZTpicCx1c2VFeGlzdGluZzpDcygoKT0+cWwpLG11bHRpOiEwfSx6TGU9bmV3IFN0KCIiKTtsZXQgcWw9KCgpPT57Y2xhc3MgYyBleHRlbmRzIFJ1ZXtjb25zdHJ1Y3RvcihhLGQsaCl7c3VwZXIoYSxkKSx0aGlzLl9jb21wb3NpdGlvbk1vZGU9aCx0aGlz'@;
put 'Ll9jb21wb3Npbmc9ITEsbnVsbD09dGhpcy5fY29tcG9zaXRpb25Nb2RlJiYodGhpcy5fY29tcG9zaXRpb25Nb2RlPSFmdW5jdGlvbiBqTGUoKXtjb25zdCBjPXRtKCk/dG0oKS5nZXRVc2VyQWdlbnQoKToiIjtyZXR1cm4vYW5kcm9pZCAoXGQrKS8udGVzdChjLnRvTG93ZXJDYXNlKCkpfSgp'@;
put 'KX13cml0ZVZhbHVlKGEpe3RoaXMuc2V0UHJvcGVydHkoInZhbHVlIixhPz8iIil9X2hhbmRsZUlucHV0KGEpeyghdGhpcy5fY29tcG9zaXRpb25Nb2RlfHx0aGlzLl9jb21wb3NpdGlvbk1vZGUmJiF0aGlzLl9jb21wb3NpbmcpJiZ0aGlzLm9uQ2hhbmdlKGEpfV9jb21wb3NpdGlvblN0YXJ0'@;
put 'KCl7dGhpcy5fY29tcG9zaW5nPSEwfV9jb21wb3NpdGlvbkVuZChhKXt0aGlzLl9jb21wb3Npbmc9ITEsdGhpcy5fY29tcG9zaXRpb25Nb2RlJiZ0aGlzLm9uQ2hhbmdlKGEpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKEdlKEVvKSxHZShKaSks'@;
put 'R2UoekxlLDgpKX19c3RhdGlje3RoaXMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbImlucHV0IiwiZm9ybUNvbnRyb2xOYW1lIiwiIiwzLCJ0eXBlIiwiY2hlY2tib3giXSxbInRleHRhcmVhIiwiZm9ybUNvbnRyb2xOYW1lIiwiIl0sWyJpbnB1dCIsImZvcm1Db250cm9sIiwi'@;
put 'IiwzLCJ0eXBlIiwiY2hlY2tib3giXSxbInRleHRhcmVhIiwiZm9ybUNvbnRyb2wiLCIiXSxbImlucHV0IiwibmdNb2RlbCIsIiIsMywidHlwZSIsImNoZWNrYm94Il0sWyJ0ZXh0YXJlYSIsIm5nTW9kZWwiLCIiXSxbIiIsIm5nRGVmYXVsdENvbnRyb2wiLCIiXV0saG9zdEJpbmRpbmdzOmZ1'@;
put 'bmN0aW9uKGQsaCl7MSZkJiZGdCgiaW5wdXQiLGZ1bmN0aW9uKHYpe3JldHVybiBoLl9oYW5kbGVJbnB1dCh2LnRhcmdldC52YWx1ZSl9KSgiYmx1ciIsZnVuY3Rpb24oKXtyZXR1cm4gaC5vblRvdWNoZWQoKX0pKCJjb21wb3NpdGlvbnN0YXJ0IixmdW5jdGlvbigpe3JldHVybiBoLl9jb21w'@;
put 'b3NpdGlvblN0YXJ0KCl9KSgiY29tcG9zaXRpb25lbmQiLGZ1bmN0aW9uKHYpe3JldHVybiBoLl9jb21wb3NpdGlvbkVuZCh2LnRhcmdldC52YWx1ZSl9KX0sZmVhdHVyZXM6W2RhKFtCTGVdKSx3YV19KX19cmV0dXJuIGN9KSgpO2NvbnN0IGgwPW5ldyBTdCgiIiksaG09bmV3IFN0KCIiKTtm'@;
put 'dW5jdGlvbiBGdWUoYyl7cmV0dXJuIGZ1bmN0aW9uIGRtKGMpe3JldHVybiBudWxsPT1jfHwoInN0cmluZyI9PXR5cGVvZiBjfHxBcnJheS5pc0FycmF5KGMpKSYmMD09PWMubGVuZ3RofShjLnZhbHVlKT97cmVxdWlyZWQ6ITB9Om51bGx9ZnVuY3Rpb24gSHVlKGMpe3JldHVybiEwPT09Yy52'@;
put 'YWx1ZT9udWxsOntyZXF1aXJlZDohMH19ZnVuY3Rpb24gc0woYyl7cmV0dXJuIG51bGx9ZnVuY3Rpb24genVlKGMpe3JldHVybiBudWxsIT1jfWZ1bmN0aW9uIFV1ZShjKXtyZXR1cm4gX00oYyk/WXUoYyk6Y31mdW5jdGlvbiBadWUoYyl7bGV0IGw9e307cmV0dXJuIGMuZm9yRWFjaChhPT57'@;
put 'bD1udWxsIT1hP3suLi5sLC4uLmF9Omx9KSwwPT09T2JqZWN0LmtleXMobCkubGVuZ3RoP251bGw6bH1mdW5jdGlvbiBXdWUoYyxsKXtyZXR1cm4gbC5tYXAoYT0+YShjKSl9ZnVuY3Rpb24gWXVlKGMpe3JldHVybiBjLm1hcChsPT5mdW5jdGlvbiBaTGUoYyl7cmV0dXJuIWMudmFsaWRhdGV9'@;
put 'KGwpP2w6YT0+bC52YWxpZGF0ZShhKSl9ZnVuY3Rpb24gVVcoYyl7cmV0dXJuIG51bGwhPWM/ZnVuY3Rpb24gR3VlKGMpe2lmKCFjKXJldHVybiBudWxsO2NvbnN0IGw9Yy5maWx0ZXIoenVlKTtyZXR1cm4gMD09bC5sZW5ndGg/bnVsbDpmdW5jdGlvbihhKXtyZXR1cm4gWnVlKFd1ZShhLGwp'@;
put 'KX19KFl1ZShjKSk6bnVsbH1mdW5jdGlvbiBaVyhjKXtyZXR1cm4gbnVsbCE9Yz9mdW5jdGlvbiAkdWUoYyl7aWYoIWMpcmV0dXJuIG51bGw7Y29uc3QgbD1jLmZpbHRlcih6dWUpO3JldHVybiAwPT1sLmxlbmd0aD9udWxsOmZ1bmN0aW9uKGEpe3JldHVybiBmdW5jdGlvbiBOTGUoLi4uYyl7'@;
put 'Y29uc3QgbD11bGUoYykse2FyZ3M6YSxrZXlzOmR9PWRsZShjKSxoPW5ldyBYdChmPT57Y29uc3R7bGVuZ3RoOnZ9PWE7aWYoIXYpcmV0dXJuIHZvaWQgZi5jb21wbGV0ZSgpO2NvbnN0IE09bmV3IEFycmF5KHYpO2xldCBEPXYsWj12O2ZvcihsZXQgcmU9MDtyZTx2O3JlKyspe2xldCBjZT0h'@;
put 'MTtsMShhW3JlXSkuc3Vic2NyaWJlKE5pKGYsYmU9PntjZXx8KGNlPSEwLFotLSksTVtyZV09YmV9LCgpPT5ELS0sdm9pZCAwLCgpPT57KCFEfHwhY2UpJiYoWnx8Zi5uZXh0KGQ/aGxlKGQsTSk6TSksZi5jb21wbGV0ZSgpKX0pKX19KTtyZXR1cm4gbD9oLnBpcGUoeloobCkpOmh9KFd1ZShh'@;
put 'LGwpLm1hcChVdWUpKS5waXBlKExyKFp1ZSkpfX0oWXVlKGMpKTpudWxsfWZ1bmN0aW9uIEt1ZShjLGwpe3JldHVybiBudWxsPT09Yz9bbF06QXJyYXkuaXNBcnJheShjKT9bLi4uYyxsXTpbYyxsXX1mdW5jdGlvbiBXVyhjKXtyZXR1cm4gYz9BcnJheS5pc0FycmF5KGMpP2M6W2NdOltdfWZ1'@;
put 'bmN0aW9uIGxMKGMsbCl7cmV0dXJuIEFycmF5LmlzQXJyYXkoYyk/Yy5pbmNsdWRlcyhsKTpjPT09bH1mdW5jdGlvbiBKdWUoYyxsKXtjb25zdCBhPVdXKGwpO3JldHVybiBXVyhjKS5mb3JFYWNoKGg9PntsTChhLGgpfHxhLnB1c2goaCl9KSxhfWZ1bmN0aW9uIFF1ZShjLGwpe3JldHVybiBX'@;
put 'VyhsKS5maWx0ZXIoYT0+IWxMKGMsYSkpfWNsYXNzIGUwZXtjb25zdHJ1Y3Rvcigpe3RoaXMuX3Jhd1ZhbGlkYXRvcnM9W10sdGhpcy5fcmF3QXN5bmNWYWxpZGF0b3JzPVtdLHRoaXMuX29uRGVzdHJveUNhbGxiYWNrcz1bXX1nZXQgdmFsdWUoKXtyZXR1cm4gdGhpcy5jb250cm9sP3RoaXMu'@;
put 'Y29udHJvbC52YWx1ZTpudWxsfWdldCB2YWxpZCgpe3JldHVybiB0aGlzLmNvbnRyb2w/dGhpcy5jb250cm9sLnZhbGlkOm51bGx9Z2V0IGludmFsaWQoKXtyZXR1cm4gdGhpcy5jb250cm9sP3RoaXMuY29udHJvbC5pbnZhbGlkOm51bGx9Z2V0IHBlbmRpbmcoKXtyZXR1cm4gdGhpcy5jb250'@;
put 'cm9sP3RoaXMuY29udHJvbC5wZW5kaW5nOm51bGx9Z2V0IGRpc2FibGVkKCl7cmV0dXJuIHRoaXMuY29udHJvbD90aGlzLmNvbnRyb2wuZGlzYWJsZWQ6bnVsbH1nZXQgZW5hYmxlZCgpe3JldHVybiB0aGlzLmNvbnRyb2w/dGhpcy5jb250cm9sLmVuYWJsZWQ6bnVsbH1nZXQgZXJyb3JzKCl7'@;
put 'cmV0dXJuIHRoaXMuY29udHJvbD90aGlzLmNvbnRyb2wuZXJyb3JzOm51bGx9Z2V0IHByaXN0aW5lKCl7cmV0dXJuIHRoaXMuY29udHJvbD90aGlzLmNvbnRyb2wucHJpc3RpbmU6bnVsbH1nZXQgZGlydHkoKXtyZXR1cm4gdGhpcy5jb250cm9sP3RoaXMuY29udHJvbC5kaXJ0eTpudWxsfWdl'@;
put 'dCB0b3VjaGVkKCl7cmV0dXJuIHRoaXMuY29udHJvbD90aGlzLmNvbnRyb2wudG91Y2hlZDpudWxsfWdldCBzdGF0dXMoKXtyZXR1cm4gdGhpcy5jb250cm9sP3RoaXMuY29udHJvbC5zdGF0dXM6bnVsbH1nZXQgdW50b3VjaGVkKCl7cmV0dXJuIHRoaXMuY29udHJvbD90aGlzLmNvbnRyb2wu'@;
put 'dW50b3VjaGVkOm51bGx9Z2V0IHN0YXR1c0NoYW5nZXMoKXtyZXR1cm4gdGhpcy5jb250cm9sP3RoaXMuY29udHJvbC5zdGF0dXNDaGFuZ2VzOm51bGx9Z2V0IHZhbHVlQ2hhbmdlcygpe3JldHVybiB0aGlzLmNvbnRyb2w/dGhpcy5jb250cm9sLnZhbHVlQ2hhbmdlczpudWxsfWdldCBwYXRo'@;
put 'KCl7cmV0dXJuIG51bGx9X3NldFZhbGlkYXRvcnMobCl7dGhpcy5fcmF3VmFsaWRhdG9ycz1sfHxbXSx0aGlzLl9jb21wb3NlZFZhbGlkYXRvckZuPVVXKHRoaXMuX3Jhd1ZhbGlkYXRvcnMpfV9zZXRBc3luY1ZhbGlkYXRvcnMobCl7dGhpcy5fcmF3QXN5bmNWYWxpZGF0b3JzPWx8fFtdLHRo'@;
put 'aXMuX2NvbXBvc2VkQXN5bmNWYWxpZGF0b3JGbj1aVyh0aGlzLl9yYXdBc3luY1ZhbGlkYXRvcnMpfWdldCB2YWxpZGF0b3IoKXtyZXR1cm4gdGhpcy5fY29tcG9zZWRWYWxpZGF0b3JGbnx8bnVsbH1nZXQgYXN5bmNWYWxpZGF0b3IoKXtyZXR1cm4gdGhpcy5fY29tcG9zZWRBc3luY1ZhbGlk'@;
put 'YXRvckZufHxudWxsfV9yZWdpc3Rlck9uRGVzdHJveShsKXt0aGlzLl9vbkRlc3Ryb3lDYWxsYmFja3MucHVzaChsKX1faW52b2tlT25EZXN0cm95Q2FsbGJhY2tzKCl7dGhpcy5fb25EZXN0cm95Q2FsbGJhY2tzLmZvckVhY2gobD0+bCgpKSx0aGlzLl9vbkRlc3Ryb3lDYWxsYmFja3M9W119'@;
put 'cmVzZXQobD12b2lkIDApe3RoaXMuY29udHJvbCYmdGhpcy5jb250cm9sLnJlc2V0KGwpfWhhc0Vycm9yKGwsYSl7cmV0dXJuISF0aGlzLmNvbnRyb2wmJnRoaXMuY29udHJvbC5oYXNFcnJvcihsLGEpfWdldEVycm9yKGwsYSl7cmV0dXJuIHRoaXMuY29udHJvbD90aGlzLmNvbnRyb2wuZ2V0'@;
put 'RXJyb3IobCxhKTpudWxsfX1jbGFzcyBCMSBleHRlbmRzIGUwZXtnZXQgZm9ybURpcmVjdGl2ZSgpe3JldHVybiBudWxsfWdldCBwYXRoKCl7cmV0dXJuIG51bGx9fWNsYXNzIGQxIGV4dGVuZHMgZTBle2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLl9wYXJlbnQ9bnVs'@;
put 'bCx0aGlzLm5hbWU9bnVsbCx0aGlzLnZhbHVlQWNjZXNzb3I9bnVsbH19Y2xhc3MgdDBle2NvbnN0cnVjdG9yKGwpe3RoaXMuX2NkPWx9Z2V0IGlzVG91Y2hlZCgpe3JldHVybiEhdGhpcy5fY2Q/LmNvbnRyb2w/LnRvdWNoZWR9Z2V0IGlzVW50b3VjaGVkKCl7cmV0dXJuISF0aGlzLl9jZD8u'@;
put 'Y29udHJvbD8udW50b3VjaGVkfWdldCBpc1ByaXN0aW5lKCl7cmV0dXJuISF0aGlzLl9jZD8uY29udHJvbD8ucHJpc3RpbmV9Z2V0IGlzRGlydHkoKXtyZXR1cm4hIXRoaXMuX2NkPy5jb250cm9sPy5kaXJ0eX1nZXQgaXNWYWxpZCgpe3JldHVybiEhdGhpcy5fY2Q/LmNvbnRyb2w/LnZhbGlk'@;
put 'fWdldCBpc0ludmFsaWQoKXtyZXR1cm4hIXRoaXMuX2NkPy5jb250cm9sPy5pbnZhbGlkfWdldCBpc1BlbmRpbmcoKXtyZXR1cm4hIXRoaXMuX2NkPy5jb250cm9sPy5wZW5kaW5nfWdldCBpc1N1Ym1pdHRlZCgpe3JldHVybiEhdGhpcy5fY2Q/LnN1Ym1pdHRlZH19bGV0IG5sPSgoKT0+e2Ns'@;
put 'YXNzIGMgZXh0ZW5kcyB0MGV7Y29uc3RydWN0b3IoYSl7c3VwZXIoYSl9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoR2UoZDEsMikpfX1zdGF0aWN7dGhpcy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwiZm9ybUNvbnRyb2xO'@;
put 'YW1lIiwiIl0sWyIiLCJuZ01vZGVsIiwiIl0sWyIiLCJmb3JtQ29udHJvbCIsIiJdXSxob3N0VmFyczoxNCxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZCxoKXsyJmQmJlRyKCJuZy11bnRvdWNoZWQiLGguaXNVbnRvdWNoZWQpKCJuZy10b3VjaGVkIixoLmlzVG91Y2hlZCkoIm5nLXByaXN0aW5l'@;
put 'IixoLmlzUHJpc3RpbmUpKCJuZy1kaXJ0eSIsaC5pc0RpcnR5KSgibmctdmFsaWQiLGguaXNWYWxpZCkoIm5nLWludmFsaWQiLGguaXNJbnZhbGlkKSgibmctcGVuZGluZyIsaC5pc1BlbmRpbmcpfSxmZWF0dXJlczpbd2FdfSl9fXJldHVybiBjfSkoKSxvNz0oKCk9PntjbGFzcyBjIGV4dGVu'@;
put 'ZHMgdDBle2NvbnN0cnVjdG9yKGEpe3N1cGVyKGEpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKEdlKEIxLDEwKSl9fXN0YXRpY3t0aGlzLlx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJmb3JtR3JvdXBOYW1lIiwiIl0sWyIi'@;
put 'LCJmb3JtQXJyYXlOYW1lIiwiIl0sWyIiLCJuZ01vZGVsR3JvdXAiLCIiXSxbIiIsImZvcm1Hcm91cCIsIiJdLFsiZm9ybSIsMywibmdOb0Zvcm0iLCIiXSxbIiIsIm5nRm9ybSIsIiJdXSxob3N0VmFyczoxNixob3N0QmluZGluZ3M6ZnVuY3Rpb24oZCxoKXsyJmQmJlRyKCJuZy11bnRvdWNo'@;
put 'ZWQiLGguaXNVbnRvdWNoZWQpKCJuZy10b3VjaGVkIixoLmlzVG91Y2hlZCkoIm5nLXByaXN0aW5lIixoLmlzUHJpc3RpbmUpKCJuZy1kaXJ0eSIsaC5pc0RpcnR5KSgibmctdmFsaWQiLGguaXNWYWxpZCkoIm5nLWludmFsaWQiLGguaXNJbnZhbGlkKSgibmctcGVuZGluZyIsaC5pc1BlbmRp'@;
put 'bmcpKCJuZy1zdWJtaXR0ZWQiLGguaXNTdWJtaXR0ZWQpfSxmZWF0dXJlczpbd2FdfSl9fXJldHVybiBjfSkoKTtjb25zdCBkeD0iVkFMSUQiLHVMPSJJTlZBTElEIix4eT0iUEVORElORyIsaHg9IkRJU0FCTEVEIjtmdW5jdGlvbiAkVyhjKXtyZXR1cm4oZEwoYyk/Yy52YWxpZGF0b3JzOmMp'@;
put 'fHxudWxsfWZ1bmN0aW9uIEtXKGMsbCl7cmV0dXJuKGRMKGwpP2wuYXN5bmNWYWxpZGF0b3JzOmMpfHxudWxsfWZ1bmN0aW9uIGRMKGMpe3JldHVybiBudWxsIT1jJiYhQXJyYXkuaXNBcnJheShjKSYmIm9iamVjdCI9PXR5cGVvZiBjfWNsYXNzIHFXe2NvbnN0cnVjdG9yKGwsYSl7dGhpcy5f'@;
put 'cGVuZGluZ0RpcnR5PSExLHRoaXMuX2hhc093blBlbmRpbmdBc3luY1ZhbGlkYXRvcj0hMSx0aGlzLl9wZW5kaW5nVG91Y2hlZD0hMSx0aGlzLl9vbkNvbGxlY3Rpb25DaGFuZ2U9KCk9Pnt9LHRoaXMuX3BhcmVudD1udWxsLHRoaXMucHJpc3RpbmU9ITAsdGhpcy50b3VjaGVkPSExLHRoaXMu'@;
put 'X29uRGlzYWJsZWRDaGFuZ2U9W10sdGhpcy5fYXNzaWduVmFsaWRhdG9ycyhsKSx0aGlzLl9hc3NpZ25Bc3luY1ZhbGlkYXRvcnMoYSl9Z2V0IHZhbGlkYXRvcigpe3JldHVybiB0aGlzLl9jb21wb3NlZFZhbGlkYXRvckZufXNldCB2YWxpZGF0b3IobCl7dGhpcy5fcmF3VmFsaWRhdG9ycz10'@;
put 'aGlzLl9jb21wb3NlZFZhbGlkYXRvckZuPWx9Z2V0IGFzeW5jVmFsaWRhdG9yKCl7cmV0dXJuIHRoaXMuX2NvbXBvc2VkQXN5bmNWYWxpZGF0b3JGbn1zZXQgYXN5bmNWYWxpZGF0b3IobCl7dGhpcy5fcmF3QXN5bmNWYWxpZGF0b3JzPXRoaXMuX2NvbXBvc2VkQXN5bmNWYWxpZGF0b3JGbj1s'@;
put 'fWdldCBwYXJlbnQoKXtyZXR1cm4gdGhpcy5fcGFyZW50fWdldCB2YWxpZCgpe3JldHVybiB0aGlzLnN0YXR1cz09PWR4fWdldCBpbnZhbGlkKCl7cmV0dXJuIHRoaXMuc3RhdHVzPT09dUx9Z2V0IHBlbmRpbmcoKXtyZXR1cm4gdGhpcy5zdGF0dXM9PXh5fWdldCBkaXNhYmxlZCgpe3JldHVy'@;
put 'biB0aGlzLnN0YXR1cz09PWh4fWdldCBlbmFibGVkKCl7cmV0dXJuIHRoaXMuc3RhdHVzIT09aHh9Z2V0IGRpcnR5KCl7cmV0dXJuIXRoaXMucHJpc3RpbmV9Z2V0IHVudG91Y2hlZCgpe3JldHVybiF0aGlzLnRvdWNoZWR9Z2V0IHVwZGF0ZU9uKCl7cmV0dXJuIHRoaXMuX3VwZGF0ZU9uP3Ro'@;
put 'aXMuX3VwZGF0ZU9uOnRoaXMucGFyZW50P3RoaXMucGFyZW50LnVwZGF0ZU9uOiJjaGFuZ2UifXNldFZhbGlkYXRvcnMobCl7dGhpcy5fYXNzaWduVmFsaWRhdG9ycyhsKX1zZXRBc3luY1ZhbGlkYXRvcnMobCl7dGhpcy5fYXNzaWduQXN5bmNWYWxpZGF0b3JzKGwpfWFkZFZhbGlkYXRvcnMo'@;
put 'bCl7dGhpcy5zZXRWYWxpZGF0b3JzKEp1ZShsLHRoaXMuX3Jhd1ZhbGlkYXRvcnMpKX1hZGRBc3luY1ZhbGlkYXRvcnMobCl7dGhpcy5zZXRBc3luY1ZhbGlkYXRvcnMoSnVlKGwsdGhpcy5fcmF3QXN5bmNWYWxpZGF0b3JzKSl9cmVtb3ZlVmFsaWRhdG9ycyhsKXt0aGlzLnNldFZhbGlkYXRv'@;
put 'cnMoUXVlKGwsdGhpcy5fcmF3VmFsaWRhdG9ycykpfXJlbW92ZUFzeW5jVmFsaWRhdG9ycyhsKXt0aGlzLnNldEFzeW5jVmFsaWRhdG9ycyhRdWUobCx0aGlzLl9yYXdBc3luY1ZhbGlkYXRvcnMpKX1oYXNWYWxpZGF0b3IobCl7cmV0dXJuIGxMKHRoaXMuX3Jhd1ZhbGlkYXRvcnMsbCl9aGFz'@;
put 'QXN5bmNWYWxpZGF0b3IobCl7cmV0dXJuIGxMKHRoaXMuX3Jhd0FzeW5jVmFsaWRhdG9ycyxsKX1jbGVhclZhbGlkYXRvcnMoKXt0aGlzLnZhbGlkYXRvcj1udWxsfWNsZWFyQXN5bmNWYWxpZGF0b3JzKCl7dGhpcy5hc3luY1ZhbGlkYXRvcj1udWxsfW1hcmtBc1RvdWNoZWQobD17fSl7dGhp'@;
put 'cy50b3VjaGVkPSEwLHRoaXMuX3BhcmVudCYmIWwub25seVNlbGYmJnRoaXMuX3BhcmVudC5tYXJrQXNUb3VjaGVkKGwpfW1hcmtBbGxBc1RvdWNoZWQoKXt0aGlzLm1hcmtBc1RvdWNoZWQoe29ubHlTZWxmOiEwfSksdGhpcy5fZm9yRWFjaENoaWxkKGw9PmwubWFya0FsbEFzVG91Y2hlZCgp'@;
put 'KX1tYXJrQXNVbnRvdWNoZWQobD17fSl7dGhpcy50b3VjaGVkPSExLHRoaXMuX3BlbmRpbmdUb3VjaGVkPSExLHRoaXMuX2ZvckVhY2hDaGlsZChhPT57YS5tYXJrQXNVbnRvdWNoZWQoe29ubHlTZWxmOiEwfSl9KSx0aGlzLl9wYXJlbnQmJiFsLm9ubHlTZWxmJiZ0aGlzLl9wYXJlbnQuX3Vw'@;
put 'ZGF0ZVRvdWNoZWQobCl9bWFya0FzRGlydHkobD17fSl7dGhpcy5wcmlzdGluZT0hMSx0aGlzLl9wYXJlbnQmJiFsLm9ubHlTZWxmJiZ0aGlzLl9wYXJlbnQubWFya0FzRGlydHkobCl9bWFya0FzUHJpc3RpbmUobD17fSl7dGhpcy5wcmlzdGluZT0hMCx0aGlzLl9wZW5kaW5nRGlydHk9ITEs'@;
put 'dGhpcy5fZm9yRWFjaENoaWxkKGE9PnthLm1hcmtBc1ByaXN0aW5lKHtvbmx5U2VsZjohMH0pfSksdGhpcy5fcGFyZW50JiYhbC5vbmx5U2VsZiYmdGhpcy5fcGFyZW50Ll91cGRhdGVQcmlzdGluZShsKX1tYXJrQXNQZW5kaW5nKGw9e30pe3RoaXMuc3RhdHVzPXh5LCExIT09bC5lbWl0RXZl'@;
put 'bnQmJnRoaXMuc3RhdHVzQ2hhbmdlcy5lbWl0KHRoaXMuc3RhdHVzKSx0aGlzLl9wYXJlbnQmJiFsLm9ubHlTZWxmJiZ0aGlzLl9wYXJlbnQubWFya0FzUGVuZGluZyhsKX1kaXNhYmxlKGw9e30pe2NvbnN0IGE9dGhpcy5fcGFyZW50TWFya2VkRGlydHkobC5vbmx5U2VsZik7dGhpcy5zdGF0'@;
put 'dXM9aHgsdGhpcy5lcnJvcnM9bnVsbCx0aGlzLl9mb3JFYWNoQ2hpbGQoZD0+e2QuZGlzYWJsZSh7Li4ubCxvbmx5U2VsZjohMH0pfSksdGhpcy5fdXBkYXRlVmFsdWUoKSwhMSE9PWwuZW1pdEV2ZW50JiYodGhpcy52YWx1ZUNoYW5nZXMuZW1pdCh0aGlzLnZhbHVlKSx0aGlzLnN0YXR1c0No'@;
put 'YW5nZXMuZW1pdCh0aGlzLnN0YXR1cykpLHRoaXMuX3VwZGF0ZUFuY2VzdG9ycyh7Li4ubCxza2lwUHJpc3RpbmVDaGVjazphfSksdGhpcy5fb25EaXNhYmxlZENoYW5nZS5mb3JFYWNoKGQ9PmQoITApKX1lbmFibGUobD17fSl7Y29uc3QgYT10aGlzLl9wYXJlbnRNYXJrZWREaXJ0eShsLm9u'@;
put 'bHlTZWxmKTt0aGlzLnN0YXR1cz1keCx0aGlzLl9mb3JFYWNoQ2hpbGQoZD0+e2QuZW5hYmxlKHsuLi5sLG9ubHlTZWxmOiEwfSl9KSx0aGlzLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe29ubHlTZWxmOiEwLGVtaXRFdmVudDpsLmVtaXRFdmVudH0pLHRoaXMuX3VwZGF0ZUFuY2VzdG9ycyh7'@;
put 'Li4ubCxza2lwUHJpc3RpbmVDaGVjazphfSksdGhpcy5fb25EaXNhYmxlZENoYW5nZS5mb3JFYWNoKGQ9PmQoITEpKX1fdXBkYXRlQW5jZXN0b3JzKGwpe3RoaXMuX3BhcmVudCYmIWwub25seVNlbGYmJih0aGlzLl9wYXJlbnQudXBkYXRlVmFsdWVBbmRWYWxpZGl0eShsKSxsLnNraXBQcmlz'@;
put 'dGluZUNoZWNrfHx0aGlzLl9wYXJlbnQuX3VwZGF0ZVByaXN0aW5lKCksdGhpcy5fcGFyZW50Ll91cGRhdGVUb3VjaGVkKCkpfXNldFBhcmVudChsKXt0aGlzLl9wYXJlbnQ9bH1nZXRSYXdWYWx1ZSgpe3JldHVybiB0aGlzLnZhbHVlfXVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkobD17fSl7dGhp'@;
put 'cy5fc2V0SW5pdGlhbFN0YXR1cygpLHRoaXMuX3VwZGF0ZVZhbHVlKCksdGhpcy5lbmFibGVkJiYodGhpcy5fY2FuY2VsRXhpc3RpbmdTdWJzY3JpcHRpb24oKSx0aGlzLmVycm9ycz10aGlzLl9ydW5WYWxpZGF0b3IoKSx0aGlzLnN0YXR1cz10aGlzLl9jYWxjdWxhdGVTdGF0dXMoKSwodGhp'@;
put 'cy5zdGF0dXM9PT1keHx8dGhpcy5zdGF0dXM9PT14eSkmJnRoaXMuX3J1bkFzeW5jVmFsaWRhdG9yKGwuZW1pdEV2ZW50KSksITEhPT1sLmVtaXRFdmVudCYmKHRoaXMudmFsdWVDaGFuZ2VzLmVtaXQodGhpcy52YWx1ZSksdGhpcy5zdGF0dXNDaGFuZ2VzLmVtaXQodGhpcy5zdGF0dXMpKSx0'@;
put 'aGlzLl9wYXJlbnQmJiFsLm9ubHlTZWxmJiZ0aGlzLl9wYXJlbnQudXBkYXRlVmFsdWVBbmRWYWxpZGl0eShsKX1fdXBkYXRlVHJlZVZhbGlkaXR5KGw9e2VtaXRFdmVudDohMH0pe3RoaXMuX2ZvckVhY2hDaGlsZChhPT5hLl91cGRhdGVUcmVlVmFsaWRpdHkobCkpLHRoaXMudXBkYXRlVmFs'@;
put 'dWVBbmRWYWxpZGl0eSh7b25seVNlbGY6ITAsZW1pdEV2ZW50OmwuZW1pdEV2ZW50fSl9X3NldEluaXRpYWxTdGF0dXMoKXt0aGlzLnN0YXR1cz10aGlzLl9hbGxDb250cm9sc0Rpc2FibGVkKCk/aHg6ZHh9X3J1blZhbGlkYXRvcigpe3JldHVybiB0aGlzLnZhbGlkYXRvcj90aGlzLnZhbGlk'@;
put 'YXRvcih0aGlzKTpudWxsfV9ydW5Bc3luY1ZhbGlkYXRvcihsKXtpZih0aGlzLmFzeW5jVmFsaWRhdG9yKXt0aGlzLnN0YXR1cz14eSx0aGlzLl9oYXNPd25QZW5kaW5nQXN5bmNWYWxpZGF0b3I9ITA7Y29uc3QgYT1VdWUodGhpcy5hc3luY1ZhbGlkYXRvcih0aGlzKSk7dGhpcy5fYXN5bmNW'@;
put 'YWxpZGF0aW9uU3Vic2NyaXB0aW9uPWEuc3Vic2NyaWJlKGQ9Pnt0aGlzLl9oYXNPd25QZW5kaW5nQXN5bmNWYWxpZGF0b3I9ITEsdGhpcy5zZXRFcnJvcnMoZCx7ZW1pdEV2ZW50Omx9KX0pfX1fY2FuY2VsRXhpc3RpbmdTdWJzY3JpcHRpb24oKXt0aGlzLl9hc3luY1ZhbGlkYXRpb25TdWJz'@;
put 'Y3JpcHRpb24mJih0aGlzLl9hc3luY1ZhbGlkYXRpb25TdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSx0aGlzLl9oYXNPd25QZW5kaW5nQXN5bmNWYWxpZGF0b3I9ITEpfXNldEVycm9ycyhsLGE9e30pe3RoaXMuZXJyb3JzPWwsdGhpcy5fdXBkYXRlQ29udHJvbHNFcnJvcnMoITEhPT1hLmVt'@;
put 'aXRFdmVudCl9Z2V0KGwpe2xldCBhPWw7cmV0dXJuIG51bGw9PWF8fChBcnJheS5pc0FycmF5KGEpfHwoYT1hLnNwbGl0KCIuIikpLDA9PT1hLmxlbmd0aCk/bnVsbDphLnJlZHVjZSgoZCxoKT0+ZCYmZC5fZmluZChoKSx0aGlzKX1nZXRFcnJvcihsLGEpe2NvbnN0IGQ9YT90aGlzLmdldChh'@;
put 'KTp0aGlzO3JldHVybiBkJiZkLmVycm9ycz9kLmVycm9yc1tsXTpudWxsfWhhc0Vycm9yKGwsYSl7cmV0dXJuISF0aGlzLmdldEVycm9yKGwsYSl9Z2V0IHJvb3QoKXtsZXQgbD10aGlzO2Zvcig7bC5fcGFyZW50OylsPWwuX3BhcmVudDtyZXR1cm4gbH1fdXBkYXRlQ29udHJvbHNFcnJvcnMo'@;
put 'bCl7dGhpcy5zdGF0dXM9dGhpcy5fY2FsY3VsYXRlU3RhdHVzKCksbCYmdGhpcy5zdGF0dXNDaGFuZ2VzLmVtaXQodGhpcy5zdGF0dXMpLHRoaXMuX3BhcmVudCYmdGhpcy5fcGFyZW50Ll91cGRhdGVDb250cm9sc0Vycm9ycyhsKX1faW5pdE9ic2VydmFibGVzKCl7dGhpcy52YWx1ZUNoYW5n'@;
put 'ZXM9bmV3IEtyLHRoaXMuc3RhdHVzQ2hhbmdlcz1uZXcgS3J9X2NhbGN1bGF0ZVN0YXR1cygpe3JldHVybiB0aGlzLl9hbGxDb250cm9sc0Rpc2FibGVkKCk/aHg6dGhpcy5lcnJvcnM/dUw6dGhpcy5faGFzT3duUGVuZGluZ0FzeW5jVmFsaWRhdG9yfHx0aGlzLl9hbnlDb250cm9sc0hhdmVT'@;
put 'dGF0dXMoeHkpP3h5OnRoaXMuX2FueUNvbnRyb2xzSGF2ZVN0YXR1cyh1TCk/dUw6ZHh9X2FueUNvbnRyb2xzSGF2ZVN0YXR1cyhsKXtyZXR1cm4gdGhpcy5fYW55Q29udHJvbHMoYT0+YS5zdGF0dXM9PT1sKX1fYW55Q29udHJvbHNEaXJ0eSgpe3JldHVybiB0aGlzLl9hbnlDb250cm9scyhs'@;
put 'PT5sLmRpcnR5KX1fYW55Q29udHJvbHNUb3VjaGVkKCl7cmV0dXJuIHRoaXMuX2FueUNvbnRyb2xzKGw9PmwudG91Y2hlZCl9X3VwZGF0ZVByaXN0aW5lKGw9e30pe3RoaXMucHJpc3RpbmU9IXRoaXMuX2FueUNvbnRyb2xzRGlydHkoKSx0aGlzLl9wYXJlbnQmJiFsLm9ubHlTZWxmJiZ0aGlz'@;
put 'Ll9wYXJlbnQuX3VwZGF0ZVByaXN0aW5lKGwpfV91cGRhdGVUb3VjaGVkKGw9e30pe3RoaXMudG91Y2hlZD10aGlzLl9hbnlDb250cm9sc1RvdWNoZWQoKSx0aGlzLl9wYXJlbnQmJiFsLm9ubHlTZWxmJiZ0aGlzLl9wYXJlbnQuX3VwZGF0ZVRvdWNoZWQobCl9X3JlZ2lzdGVyT25Db2xsZWN0'@;
put 'aW9uQ2hhbmdlKGwpe3RoaXMuX29uQ29sbGVjdGlvbkNoYW5nZT1sfV9zZXRVcGRhdGVTdHJhdGVneShsKXtkTChsKSYmbnVsbCE9bC51cGRhdGVPbiYmKHRoaXMuX3VwZGF0ZU9uPWwudXBkYXRlT24pfV9wYXJlbnRNYXJrZWREaXJ0eShsKXtyZXR1cm4hbCYmISghdGhpcy5fcGFyZW50fHwh'@;
put 'dGhpcy5fcGFyZW50LmRpcnR5KSYmIXRoaXMuX3BhcmVudC5fYW55Q29udHJvbHNEaXJ0eSgpfV9maW5kKGwpe3JldHVybiBudWxsfV9hc3NpZ25WYWxpZGF0b3JzKGwpe3RoaXMuX3Jhd1ZhbGlkYXRvcnM9QXJyYXkuaXNBcnJheShsKT9sLnNsaWNlKCk6bCx0aGlzLl9jb21wb3NlZFZhbGlk'@;
put 'YXRvckZuPWZ1bmN0aW9uICRMZShjKXtyZXR1cm4gQXJyYXkuaXNBcnJheShjKT9VVyhjKTpjfHxudWxsfSh0aGlzLl9yYXdWYWxpZGF0b3JzKX1fYXNzaWduQXN5bmNWYWxpZGF0b3JzKGwpe3RoaXMuX3Jhd0FzeW5jVmFsaWRhdG9ycz1BcnJheS5pc0FycmF5KGwpP2wuc2xpY2UoKTpsLHRo'@;
put 'aXMuX2NvbXBvc2VkQXN5bmNWYWxpZGF0b3JGbj1mdW5jdGlvbiBLTGUoYyl7cmV0dXJuIEFycmF5LmlzQXJyYXkoYyk/WlcoYyk6Y3x8bnVsbH0odGhpcy5fcmF3QXN5bmNWYWxpZGF0b3JzKX19Y2xhc3MgaEwgZXh0ZW5kcyBxV3tjb25zdHJ1Y3RvcihsLGEsZCl7c3VwZXIoJFcoYSksS1co'@;
put 'ZCxhKSksdGhpcy5jb250cm9scz1sLHRoaXMuX2luaXRPYnNlcnZhYmxlcygpLHRoaXMuX3NldFVwZGF0ZVN0cmF0ZWd5KGEpLHRoaXMuX3NldFVwQ29udHJvbHMoKSx0aGlzLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe29ubHlTZWxmOiEwLGVtaXRFdmVudDohIXRoaXMuYXN5bmNWYWxpZGF0'@;
put 'b3J9KX1yZWdpc3RlckNvbnRyb2wobCxhKXtyZXR1cm4gdGhpcy5jb250cm9sc1tsXT90aGlzLmNvbnRyb2xzW2xdOih0aGlzLmNvbnRyb2xzW2xdPWEsYS5zZXRQYXJlbnQodGhpcyksYS5fcmVnaXN0ZXJPbkNvbGxlY3Rpb25DaGFuZ2UodGhpcy5fb25Db2xsZWN0aW9uQ2hhbmdlKSxhKX1h'@;
put 'ZGRDb250cm9sKGwsYSxkPXt9KXt0aGlzLnJlZ2lzdGVyQ29udHJvbChsLGEpLHRoaXMudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7ZW1pdEV2ZW50OmQuZW1pdEV2ZW50fSksdGhpcy5fb25Db2xsZWN0aW9uQ2hhbmdlKCl9cmVtb3ZlQ29udHJvbChsLGE9e30pe3RoaXMuY29udHJvbHNbbF0m'@;
put 'JnRoaXMuY29udHJvbHNbbF0uX3JlZ2lzdGVyT25Db2xsZWN0aW9uQ2hhbmdlKCgpPT57fSksZGVsZXRlIHRoaXMuY29udHJvbHNbbF0sdGhpcy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHtlbWl0RXZlbnQ6YS5lbWl0RXZlbnR9KSx0aGlzLl9vbkNvbGxlY3Rpb25DaGFuZ2UoKX1zZXRDb250'@;
put 'cm9sKGwsYSxkPXt9KXt0aGlzLmNvbnRyb2xzW2xdJiZ0aGlzLmNvbnRyb2xzW2xdLl9yZWdpc3Rlck9uQ29sbGVjdGlvbkNoYW5nZSgoKT0+e30pLGRlbGV0ZSB0aGlzLmNvbnRyb2xzW2xdLGEmJnRoaXMucmVnaXN0ZXJDb250cm9sKGwsYSksdGhpcy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5'@;
put 'KHtlbWl0RXZlbnQ6ZC5lbWl0RXZlbnR9KSx0aGlzLl9vbkNvbGxlY3Rpb25DaGFuZ2UoKX1jb250YWlucyhsKXtyZXR1cm4gdGhpcy5jb250cm9scy5oYXNPd25Qcm9wZXJ0eShsKSYmdGhpcy5jb250cm9sc1tsXS5lbmFibGVkfXNldFZhbHVlKGwsYT17fSl7KGZ1bmN0aW9uIGkwZShjLGws'@;
put 'YSl7Yy5fZm9yRWFjaENoaWxkKChkLGgpPT57aWYodm9pZCAwPT09YVtoXSl0aHJvdyBuZXcgUW4oMTAwMiwiIil9KX0pKHRoaXMsMCxsKSxPYmplY3Qua2V5cyhsKS5mb3JFYWNoKGQ9PnsoZnVuY3Rpb24gcjBlKGMsbCxhKXtjb25zdCBkPWMuY29udHJvbHM7aWYoIShsP09iamVjdC5rZXlz'@;
put 'KGQpOmQpLmxlbmd0aCl0aHJvdyBuZXcgUW4oMWUzLCIiKTtpZighZFthXSl0aHJvdyBuZXcgUW4oMTAwMSwiIil9KSh0aGlzLCEwLGQpLHRoaXMuY29udHJvbHNbZF0uc2V0VmFsdWUobFtkXSx7b25seVNlbGY6ITAsZW1pdEV2ZW50OmEuZW1pdEV2ZW50fSl9KSx0aGlzLnVwZGF0ZVZhbHVl'@;
put 'QW5kVmFsaWRpdHkoYSl9cGF0Y2hWYWx1ZShsLGE9e30pe251bGwhPWwmJihPYmplY3Qua2V5cyhsKS5mb3JFYWNoKGQ9Pntjb25zdCBoPXRoaXMuY29udHJvbHNbZF07aCYmaC5wYXRjaFZhbHVlKGxbZF0se29ubHlTZWxmOiEwLGVtaXRFdmVudDphLmVtaXRFdmVudH0pfSksdGhpcy51cGRh'@;
put 'dGVWYWx1ZUFuZFZhbGlkaXR5KGEpKX1yZXNldChsPXt9LGE9e30pe3RoaXMuX2ZvckVhY2hDaGlsZCgoZCxoKT0+e2QucmVzZXQobD9sW2hdOm51bGwse29ubHlTZWxmOiEwLGVtaXRFdmVudDphLmVtaXRFdmVudH0pfSksdGhpcy5fdXBkYXRlUHJpc3RpbmUoYSksdGhpcy5fdXBkYXRlVG91'@;
put 'Y2hlZChhKSx0aGlzLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoYSl9Z2V0UmF3VmFsdWUoKXtyZXR1cm4gdGhpcy5fcmVkdWNlQ2hpbGRyZW4oe30sKGwsYSxkKT0+KGxbZF09YS5nZXRSYXdWYWx1ZSgpLGwpKX1fc3luY1BlbmRpbmdDb250cm9scygpe2xldCBsPXRoaXMuX3JlZHVjZUNoaWxk'@;
put 'cmVuKCExLChhLGQpPT4hIWQuX3N5bmNQZW5kaW5nQ29udHJvbHMoKXx8YSk7cmV0dXJuIGwmJnRoaXMudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7b25seVNlbGY6ITB9KSxsfV9mb3JFYWNoQ2hpbGQobCl7T2JqZWN0LmtleXModGhpcy5jb250cm9scykuZm9yRWFjaChhPT57Y29uc3QgZD10'@;
put 'aGlzLmNvbnRyb2xzW2FdO2QmJmwoZCxhKX0pfV9zZXRVcENvbnRyb2xzKCl7dGhpcy5fZm9yRWFjaENoaWxkKGw9PntsLnNldFBhcmVudCh0aGlzKSxsLl9yZWdpc3Rlck9uQ29sbGVjdGlvbkNoYW5nZSh0aGlzLl9vbkNvbGxlY3Rpb25DaGFuZ2UpfSl9X3VwZGF0ZVZhbHVlKCl7dGhpcy52'@;
put 'YWx1ZT10aGlzLl9yZWR1Y2VWYWx1ZSgpfV9hbnlDb250cm9scyhsKXtmb3IoY29uc3RbYSxkXW9mIE9iamVjdC5lbnRyaWVzKHRoaXMuY29udHJvbHMpKWlmKHRoaXMuY29udGFpbnMoYSkmJmwoZCkpcmV0dXJuITA7cmV0dXJuITF9X3JlZHVjZVZhbHVlKCl7cmV0dXJuIHRoaXMuX3JlZHVj'@;
put 'ZUNoaWxkcmVuKHt9LChhLGQsaCk9PigoZC5lbmFibGVkfHx0aGlzLmRpc2FibGVkKSYmKGFbaF09ZC52YWx1ZSksYSkpfV9yZWR1Y2VDaGlsZHJlbihsLGEpe2xldCBkPWw7cmV0dXJuIHRoaXMuX2ZvckVhY2hDaGlsZCgoaCxmKT0+e2Q9YShkLGgsZil9KSxkfV9hbGxDb250cm9sc0Rpc2Fi'@;
put 'bGVkKCl7Zm9yKGNvbnN0IGwgb2YgT2JqZWN0LmtleXModGhpcy5jb250cm9scykpaWYodGhpcy5jb250cm9sc1tsXS5lbmFibGVkKXJldHVybiExO3JldHVybiBPYmplY3Qua2V5cyh0aGlzLmNvbnRyb2xzKS5sZW5ndGg+MHx8dGhpcy5kaXNhYmxlZH1fZmluZChsKXtyZXR1cm4gdGhpcy5j'@;
put 'b250cm9scy5oYXNPd25Qcm9wZXJ0eShsKT90aGlzLmNvbnRyb2xzW2xdOm51bGx9fWNvbnN0IHM3PW5ldyBTdCgiQ2FsbFNldERpc2FibGVkU3RhdGUiLHtwcm92aWRlZEluOiJyb290IixmYWN0b3J5OigpPT5meH0pLGZ4PSJhbHdheXMiO2Z1bmN0aW9uIHB4KGMsbCxhPWZ4KXtYVyhjLGwp'@;
put 'LGwudmFsdWVBY2Nlc3Nvci53cml0ZVZhbHVlKGMudmFsdWUpLChjLmRpc2FibGVkfHwiYWx3YXlzIj09PWEpJiZsLnZhbHVlQWNjZXNzb3Iuc2V0RGlzYWJsZWRTdGF0ZT8uKGMuZGlzYWJsZWQpLGZ1bmN0aW9uIEpMZShjLGwpe2wudmFsdWVBY2Nlc3Nvci5yZWdpc3Rlck9uQ2hhbmdlKGE9'@;
put 'PntjLl9wZW5kaW5nVmFsdWU9YSxjLl9wZW5kaW5nQ2hhbmdlPSEwLGMuX3BlbmRpbmdEaXJ0eT0hMCwiY2hhbmdlIj09PWMudXBkYXRlT24mJmEwZShjLGwpfSl9KGMsbCksZnVuY3Rpb24gZU9lKGMsbCl7Y29uc3QgYT0oZCxoKT0+e2wudmFsdWVBY2Nlc3Nvci53cml0ZVZhbHVlKGQpLGgm'@;
put 'Jmwudmlld1RvTW9kZWxVcGRhdGUoZCl9O2MucmVnaXN0ZXJPbkNoYW5nZShhKSxsLl9yZWdpc3Rlck9uRGVzdHJveSgoKT0+e2MuX3VucmVnaXN0ZXJPbkNoYW5nZShhKX0pfShjLGwpLGZ1bmN0aW9uIFFMZShjLGwpe2wudmFsdWVBY2Nlc3Nvci5yZWdpc3Rlck9uVG91Y2hlZCgoKT0+e2Mu'@;
put 'X3BlbmRpbmdUb3VjaGVkPSEwLCJibHVyIj09PWMudXBkYXRlT24mJmMuX3BlbmRpbmdDaGFuZ2UmJmEwZShjLGwpLCJzdWJtaXQiIT09Yy51cGRhdGVPbiYmYy5tYXJrQXNUb3VjaGVkKCl9KX0oYyxsKSxmdW5jdGlvbiBYTGUoYyxsKXtpZihsLnZhbHVlQWNjZXNzb3Iuc2V0RGlzYWJsZWRT'@;
put 'dGF0ZSl7Y29uc3QgYT1kPT57bC52YWx1ZUFjY2Vzc29yLnNldERpc2FibGVkU3RhdGUoZCl9O2MucmVnaXN0ZXJPbkRpc2FibGVkQ2hhbmdlKGEpLGwuX3JlZ2lzdGVyT25EZXN0cm95KCgpPT57Yy5fdW5yZWdpc3Rlck9uRGlzYWJsZWRDaGFuZ2UoYSl9KX19KGMsbCl9ZnVuY3Rpb24gZ0wo'@;
put 'YyxsKXtjLmZvckVhY2goYT0+e2EucmVnaXN0ZXJPblZhbGlkYXRvckNoYW5nZSYmYS5yZWdpc3Rlck9uVmFsaWRhdG9yQ2hhbmdlKGwpfSl9ZnVuY3Rpb24gWFcoYyxsKXtjb25zdCBhPWZ1bmN0aW9uIHF1ZShjKXtyZXR1cm4gYy5fcmF3VmFsaWRhdG9yc30oYyk7bnVsbCE9PWwudmFsaWRh'@;
put 'dG9yP2Muc2V0VmFsaWRhdG9ycyhLdWUoYSxsLnZhbGlkYXRvcikpOiJmdW5jdGlvbiI9PXR5cGVvZiBhJiZjLnNldFZhbGlkYXRvcnMoW2FdKTtjb25zdCBkPWZ1bmN0aW9uIFh1ZShjKXtyZXR1cm4gYy5fcmF3QXN5bmNWYWxpZGF0b3JzfShjKTtudWxsIT09bC5hc3luY1ZhbGlkYXRvcj9j'@;
put 'LnNldEFzeW5jVmFsaWRhdG9ycyhLdWUoZCxsLmFzeW5jVmFsaWRhdG9yKSk6ImZ1bmN0aW9uIj09dHlwZW9mIGQmJmMuc2V0QXN5bmNWYWxpZGF0b3JzKFtkXSk7Y29uc3QgaD0oKT0+Yy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7Z0wobC5fcmF3VmFsaWRhdG9ycyxoKSxnTChsLl9yYXdB'@;
put 'c3luY1ZhbGlkYXRvcnMsaCl9ZnVuY3Rpb24gYTBlKGMsbCl7Yy5fcGVuZGluZ0RpcnR5JiZjLm1hcmtBc0RpcnR5KCksYy5zZXRWYWx1ZShjLl9wZW5kaW5nVmFsdWUse2VtaXRNb2RlbFRvVmlld0NoYW5nZTohMX0pLGwudmlld1RvTW9kZWxVcGRhdGUoYy5fcGVuZGluZ1ZhbHVlKSxjLl9w'@;
put 'ZW5kaW5nQ2hhbmdlPSExfWNvbnN0IGFPZT17cHJvdmlkZTpCMSx1c2VFeGlzdGluZzpDcygoKT0+eXApfSxneD1Qcm9taXNlLnJlc29sdmUoKTtsZXQgeXA9KCgpPT57Y2xhc3MgYyBleHRlbmRzIEIxe2NvbnN0cnVjdG9yKGEsZCxoKXtzdXBlcigpLHRoaXMuY2FsbFNldERpc2FibGVkU3Rh'@;
put 'dGU9aCx0aGlzLnN1Ym1pdHRlZD0hMSx0aGlzLl9kaXJlY3RpdmVzPW5ldyBTZXQsdGhpcy5uZ1N1Ym1pdD1uZXcgS3IsdGhpcy5mb3JtPW5ldyBoTCh7fSxVVyhhKSxaVyhkKSl9bmdBZnRlclZpZXdJbml0KCl7dGhpcy5fc2V0VXBkYXRlU3RyYXRlZ3koKX1nZXQgZm9ybURpcmVjdGl2ZSgp'@;
put 'e3JldHVybiB0aGlzfWdldCBjb250cm9sKCl7cmV0dXJuIHRoaXMuZm9ybX1nZXQgcGF0aCgpe3JldHVybltdfWdldCBjb250cm9scygpe3JldHVybiB0aGlzLmZvcm0uY29udHJvbHN9YWRkQ29udHJvbChhKXtneC50aGVuKCgpPT57Y29uc3QgZD10aGlzLl9maW5kQ29udGFpbmVyKGEucGF0'@;
put 'aCk7YS5jb250cm9sPWQucmVnaXN0ZXJDb250cm9sKGEubmFtZSxhLmNvbnRyb2wpLHB4KGEuY29udHJvbCxhLHRoaXMuY2FsbFNldERpc2FibGVkU3RhdGUpLGEuY29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHtlbWl0RXZlbnQ6ITF9KSx0aGlzLl9kaXJlY3RpdmVzLmFkZChhKX0p'@;
put 'fWdldENvbnRyb2woYSl7cmV0dXJuIHRoaXMuZm9ybS5nZXQoYS5wYXRoKX1yZW1vdmVDb250cm9sKGEpe2d4LnRoZW4oKCk9Pntjb25zdCBkPXRoaXMuX2ZpbmRDb250YWluZXIoYS5wYXRoKTtkJiZkLnJlbW92ZUNvbnRyb2woYS5uYW1lKSx0aGlzLl9kaXJlY3RpdmVzLmRlbGV0ZShhKX0p'@;
put 'fWFkZEZvcm1Hcm91cChhKXtneC50aGVuKCgpPT57Y29uc3QgZD10aGlzLl9maW5kQ29udGFpbmVyKGEucGF0aCksaD1uZXcgaEwoe30pOyhmdW5jdGlvbiBvMGUoYyxsKXtYVyhjLGwpfSkoaCxhKSxkLnJlZ2lzdGVyQ29udHJvbChhLm5hbWUsaCksaC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5'@;
put 'KHtlbWl0RXZlbnQ6ITF9KX0pfXJlbW92ZUZvcm1Hcm91cChhKXtneC50aGVuKCgpPT57Y29uc3QgZD10aGlzLl9maW5kQ29udGFpbmVyKGEucGF0aCk7ZCYmZC5yZW1vdmVDb250cm9sKGEubmFtZSl9KX1nZXRGb3JtR3JvdXAoYSl7cmV0dXJuIHRoaXMuZm9ybS5nZXQoYS5wYXRoKX11cGRh'@;
put 'dGVNb2RlbChhLGQpe2d4LnRoZW4oKCk9Pnt0aGlzLmZvcm0uZ2V0KGEucGF0aCkuc2V0VmFsdWUoZCl9KX1zZXRWYWx1ZShhKXt0aGlzLmNvbnRyb2wuc2V0VmFsdWUoYSl9b25TdWJtaXQoYSl7cmV0dXJuIHRoaXMuc3VibWl0dGVkPSEwLGZ1bmN0aW9uIHMwZShjLGwpe2MuX3N5bmNQZW5k'@;
put 'aW5nQ29udHJvbHMoKSxsLmZvckVhY2goYT0+e2NvbnN0IGQ9YS5jb250cm9sOyJzdWJtaXQiPT09ZC51cGRhdGVPbiYmZC5fcGVuZGluZ0NoYW5nZSYmKGEudmlld1RvTW9kZWxVcGRhdGUoZC5fcGVuZGluZ1ZhbHVlKSxkLl9wZW5kaW5nQ2hhbmdlPSExKX0pfSh0aGlzLmZvcm0sdGhpcy5f'@;
put 'ZGlyZWN0aXZlcyksdGhpcy5uZ1N1Ym1pdC5lbWl0KGEpLCJkaWFsb2ciPT09YT8udGFyZ2V0Py5tZXRob2R9b25SZXNldCgpe3RoaXMucmVzZXRGb3JtKCl9cmVzZXRGb3JtKGE9dm9pZCAwKXt0aGlzLmZvcm0ucmVzZXQoYSksdGhpcy5zdWJtaXR0ZWQ9ITF9X3NldFVwZGF0ZVN0cmF0ZWd5'@;
put 'KCl7dGhpcy5vcHRpb25zJiZudWxsIT10aGlzLm9wdGlvbnMudXBkYXRlT24mJih0aGlzLmZvcm0uX3VwZGF0ZU9uPXRoaXMub3B0aW9ucy51cGRhdGVPbil9X2ZpbmRDb250YWluZXIoYSl7cmV0dXJuIGEucG9wKCksYS5sZW5ndGg/dGhpcy5mb3JtLmdldChhKTp0aGlzLmZvcm19c3RhdGlj'@;
put 'e3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoR2UoaDAsMTApLEdlKGhtLDEwKSxHZShzNyw4KSl9fXN0YXRpY3t0aGlzLlx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyJmb3JtIiwzLCJuZ05vRm9ybSIsIiIsMywiZm9ybUdyb3VwIiwiIl0sWyJu'@;
put 'Zy1mb3JtIl0sWyIiLCJuZ0Zvcm0iLCIiXV0saG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGQsaCl7MSZkJiZGdCgic3VibWl0IixmdW5jdGlvbih2KXtyZXR1cm4gaC5vblN1Ym1pdCh2KX0pKCJyZXNldCIsZnVuY3Rpb24oKXtyZXR1cm4gaC5vblJlc2V0KCl9KX0saW5wdXRzOntvcHRpb25zOltO'@;
put 'bi5Ob25lLCJuZ0Zvcm1PcHRpb25zIiwib3B0aW9ucyJdfSxvdXRwdXRzOntuZ1N1Ym1pdDoibmdTdWJtaXQifSxleHBvcnRBczpbIm5nRm9ybSJdLGZlYXR1cmVzOltkYShbYU9lXSksd2FdfSl9fXJldHVybiBjfSkoKTtmdW5jdGlvbiBsMGUoYyxsKXtjb25zdCBhPWMuaW5kZXhPZihsKTth'@;
put 'Pi0xJiZjLnNwbGljZShhLDEpfWZ1bmN0aW9uIGMwZShjKXtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIGMmJm51bGwhPT1jJiYyPT09T2JqZWN0LmtleXMoYykubGVuZ3RoJiYidmFsdWUiaW4gYyYmImRpc2FibGVkImluIGN9Y29uc3QgdFk9Y2xhc3MgZXh0ZW5kcyBxV3tjb25zdHJ1Y3Rvcihs'@;
put 'PW51bGwsYSxkKXtzdXBlcigkVyhhKSxLVyhkLGEpKSx0aGlzLmRlZmF1bHRWYWx1ZT1udWxsLHRoaXMuX29uQ2hhbmdlPVtdLHRoaXMuX3BlbmRpbmdDaGFuZ2U9ITEsdGhpcy5fYXBwbHlGb3JtU3RhdGUobCksdGhpcy5fc2V0VXBkYXRlU3RyYXRlZ3koYSksdGhpcy5faW5pdE9ic2VydmFi'@;
put 'bGVzKCksdGhpcy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHtvbmx5U2VsZjohMCxlbWl0RXZlbnQ6ISF0aGlzLmFzeW5jVmFsaWRhdG9yfSksZEwoYSkmJihhLm5vbk51bGxhYmxlfHxhLmluaXRpYWxWYWx1ZUlzRGVmYXVsdCkmJih0aGlzLmRlZmF1bHRWYWx1ZT1jMGUobCk/bC52YWx1ZTps'@;
put 'KX1zZXRWYWx1ZShsLGE9e30pe3RoaXMudmFsdWU9dGhpcy5fcGVuZGluZ1ZhbHVlPWwsdGhpcy5fb25DaGFuZ2UubGVuZ3RoJiYhMSE9PWEuZW1pdE1vZGVsVG9WaWV3Q2hhbmdlJiZ0aGlzLl9vbkNoYW5nZS5mb3JFYWNoKGQ9PmQodGhpcy52YWx1ZSwhMSE9PWEuZW1pdFZpZXdUb01vZGVs'@;
put 'Q2hhbmdlKSksdGhpcy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KGEpfXBhdGNoVmFsdWUobCxhPXt9KXt0aGlzLnNldFZhbHVlKGwsYSl9cmVzZXQobD10aGlzLmRlZmF1bHRWYWx1ZSxhPXt9KXt0aGlzLl9hcHBseUZvcm1TdGF0ZShsKSx0aGlzLm1hcmtBc1ByaXN0aW5lKGEpLHRoaXMubWFy'@;
put 'a0FzVW50b3VjaGVkKGEpLHRoaXMuc2V0VmFsdWUodGhpcy52YWx1ZSxhKSx0aGlzLl9wZW5kaW5nQ2hhbmdlPSExfV91cGRhdGVWYWx1ZSgpe31fYW55Q29udHJvbHMobCl7cmV0dXJuITF9X2FsbENvbnRyb2xzRGlzYWJsZWQoKXtyZXR1cm4gdGhpcy5kaXNhYmxlZH1yZWdpc3Rlck9uQ2hh'@;
put 'bmdlKGwpe3RoaXMuX29uQ2hhbmdlLnB1c2gobCl9X3VucmVnaXN0ZXJPbkNoYW5nZShsKXtsMGUodGhpcy5fb25DaGFuZ2UsbCl9cmVnaXN0ZXJPbkRpc2FibGVkQ2hhbmdlKGwpe3RoaXMuX29uRGlzYWJsZWRDaGFuZ2UucHVzaChsKX1fdW5yZWdpc3Rlck9uRGlzYWJsZWRDaGFuZ2UobCl7'@;
put 'bDBlKHRoaXMuX29uRGlzYWJsZWRDaGFuZ2UsbCl9X2ZvckVhY2hDaGlsZChsKXt9X3N5bmNQZW5kaW5nQ29udHJvbHMoKXtyZXR1cm4hKCJzdWJtaXQiIT09dGhpcy51cGRhdGVPbnx8KHRoaXMuX3BlbmRpbmdEaXJ0eSYmdGhpcy5tYXJrQXNEaXJ0eSgpLHRoaXMuX3BlbmRpbmdUb3VjaGVk'@;
put 'JiZ0aGlzLm1hcmtBc1RvdWNoZWQoKSwhdGhpcy5fcGVuZGluZ0NoYW5nZSl8fCh0aGlzLnNldFZhbHVlKHRoaXMuX3BlbmRpbmdWYWx1ZSx7b25seVNlbGY6ITAsZW1pdE1vZGVsVG9WaWV3Q2hhbmdlOiExfSksMCkpfV9hcHBseUZvcm1TdGF0ZShsKXtjMGUobCk/KHRoaXMudmFsdWU9dGhp'@;
put 'cy5fcGVuZGluZ1ZhbHVlPWwudmFsdWUsbC5kaXNhYmxlZD90aGlzLmRpc2FibGUoe29ubHlTZWxmOiEwLGVtaXRFdmVudDohMX0pOnRoaXMuZW5hYmxlKHtvbmx5U2VsZjohMCxlbWl0RXZlbnQ6ITF9KSk6dGhpcy52YWx1ZT10aGlzLl9wZW5kaW5nVmFsdWU9bH19LGxPZT17cHJvdmlkZTpk'@;
put 'MSx1c2VFeGlzdGluZzpDcygoKT0+JHMpfSxkMGU9UHJvbWlzZS5yZXNvbHZlKCk7bGV0ICRzPSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyBkMXtjb25zdHJ1Y3RvcihhLGQsaCxmLHYsTSl7c3VwZXIoKSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZj12LHRoaXMuY2FsbFNldERpc2FibGVkU3RhdGU9'@;
put 'TSx0aGlzLmNvbnRyb2w9bmV3IHRZLHRoaXMuX3JlZ2lzdGVyZWQ9ITEsdGhpcy5uYW1lPSIiLHRoaXMudXBkYXRlPW5ldyBLcix0aGlzLl9wYXJlbnQ9YSx0aGlzLl9zZXRWYWxpZGF0b3JzKGQpLHRoaXMuX3NldEFzeW5jVmFsaWRhdG9ycyhoKSx0aGlzLnZhbHVlQWNjZXNzb3I9ZnVuY3Rp'@;
put 'b24gZVkoYyxsKXtpZighbClyZXR1cm4gbnVsbDtsZXQgYSxkLGg7cmV0dXJuIEFycmF5LmlzQXJyYXkobCksbC5mb3JFYWNoKGY9PntmLmNvbnN0cnVjdG9yPT09cWw/YT1mOmZ1bmN0aW9uIHJPZShjKXtyZXR1cm4gT2JqZWN0LmdldFByb3RvdHlwZU9mKGMuY29uc3RydWN0b3IpPT09YTd9'@;
put 'KGYpP2Q9ZjpoPWZ9KSxofHxkfHxhfHxudWxsfSgwLGYpfW5nT25DaGFuZ2VzKGEpe2lmKHRoaXMuX2NoZWNrRm9yRXJyb3JzKCksIXRoaXMuX3JlZ2lzdGVyZWR8fCJuYW1lImluIGEpe2lmKHRoaXMuX3JlZ2lzdGVyZWQmJih0aGlzLl9jaGVja05hbWUoKSx0aGlzLmZvcm1EaXJlY3RpdmUp'@;
put 'KXtjb25zdCBkPWEubmFtZS5wcmV2aW91c1ZhbHVlO3RoaXMuZm9ybURpcmVjdGl2ZS5yZW1vdmVDb250cm9sKHtuYW1lOmQscGF0aDp0aGlzLl9nZXRQYXRoKGQpfSl9dGhpcy5fc2V0VXBDb250cm9sKCl9ImlzRGlzYWJsZWQiaW4gYSYmdGhpcy5fdXBkYXRlRGlzYWJsZWQoYSksZnVuY3Rp'@;
put 'b24gUVcoYyxsKXtpZighYy5oYXNPd25Qcm9wZXJ0eSgibW9kZWwiKSlyZXR1cm4hMTtjb25zdCBhPWMubW9kZWw7cmV0dXJuISFhLmlzRmlyc3RDaGFuZ2UoKXx8IU9iamVjdC5pcyhsLGEuY3VycmVudFZhbHVlKX0oYSx0aGlzLnZpZXdNb2RlbCkmJih0aGlzLl91cGRhdGVWYWx1ZSh0aGlz'@;
put 'Lm1vZGVsKSx0aGlzLnZpZXdNb2RlbD10aGlzLm1vZGVsKX1uZ09uRGVzdHJveSgpe3RoaXMuZm9ybURpcmVjdGl2ZSYmdGhpcy5mb3JtRGlyZWN0aXZlLnJlbW92ZUNvbnRyb2wodGhpcyl9Z2V0IHBhdGgoKXtyZXR1cm4gdGhpcy5fZ2V0UGF0aCh0aGlzLm5hbWUpfWdldCBmb3JtRGlyZWN0'@;
put 'aXZlKCl7cmV0dXJuIHRoaXMuX3BhcmVudD90aGlzLl9wYXJlbnQuZm9ybURpcmVjdGl2ZTpudWxsfXZpZXdUb01vZGVsVXBkYXRlKGEpe3RoaXMudmlld01vZGVsPWEsdGhpcy51cGRhdGUuZW1pdChhKX1fc2V0VXBDb250cm9sKCl7dGhpcy5fc2V0VXBkYXRlU3RyYXRlZ3koKSx0aGlzLl9p'@;
put 'c1N0YW5kYWxvbmUoKT90aGlzLl9zZXRVcFN0YW5kYWxvbmUoKTp0aGlzLmZvcm1EaXJlY3RpdmUuYWRkQ29udHJvbCh0aGlzKSx0aGlzLl9yZWdpc3RlcmVkPSEwfV9zZXRVcGRhdGVTdHJhdGVneSgpe3RoaXMub3B0aW9ucyYmbnVsbCE9dGhpcy5vcHRpb25zLnVwZGF0ZU9uJiYodGhpcy5j'@;
put 'b250cm9sLl91cGRhdGVPbj10aGlzLm9wdGlvbnMudXBkYXRlT24pfV9pc1N0YW5kYWxvbmUoKXtyZXR1cm4hdGhpcy5fcGFyZW50fHwhKCF0aGlzLm9wdGlvbnN8fCF0aGlzLm9wdGlvbnMuc3RhbmRhbG9uZSl9X3NldFVwU3RhbmRhbG9uZSgpe3B4KHRoaXMuY29udHJvbCx0aGlzLHRoaXMu'@;
put 'Y2FsbFNldERpc2FibGVkU3RhdGUpLHRoaXMuY29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHtlbWl0RXZlbnQ6ITF9KX1fY2hlY2tGb3JFcnJvcnMoKXt0aGlzLl9pc1N0YW5kYWxvbmUoKXx8dGhpcy5fY2hlY2tQYXJlbnRUeXBlKCksdGhpcy5fY2hlY2tOYW1lKCl9X2NoZWNrUGFy'@;
put 'ZW50VHlwZSgpe31fY2hlY2tOYW1lKCl7dGhpcy5vcHRpb25zJiZ0aGlzLm9wdGlvbnMubmFtZSYmKHRoaXMubmFtZT10aGlzLm9wdGlvbnMubmFtZSksdGhpcy5faXNTdGFuZGFsb25lKCl9X3VwZGF0ZVZhbHVlKGEpe2QwZS50aGVuKCgpPT57dGhpcy5jb250cm9sLnNldFZhbHVlKGEse2Vt'@;
put 'aXRWaWV3VG9Nb2RlbENoYW5nZTohMX0pLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmPy5tYXJrRm9yQ2hlY2soKX0pfV91cGRhdGVEaXNhYmxlZChhKXtjb25zdCBkPWEuaXNEaXNhYmxlZC5jdXJyZW50VmFsdWUsaD0wIT09ZCYmczEoZCk7ZDBlLnRoZW4oKCk9PntoJiYhdGhpcy5jb250cm9s'@;
put 'LmRpc2FibGVkP3RoaXMuY29udHJvbC5kaXNhYmxlKCk6IWgmJnRoaXMuY29udHJvbC5kaXNhYmxlZCYmdGhpcy5jb250cm9sLmVuYWJsZSgpLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmPy5tYXJrRm9yQ2hlY2soKX0pfV9nZXRQYXRoKGEpe3JldHVybiB0aGlzLl9wYXJlbnQ/ZnVuY3Rpb24g'@;
put 'ZkwoYyxsKXtyZXR1cm5bLi4ubC5wYXRoLGNdfShhLHRoaXMuX3BhcmVudCk6W2FdfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKEdlKEIxLDkpLEdlKGgwLDEwKSxHZShobSwxMCksR2UoYnAsMTApLEdlKEVzLDgpLEdlKHM3LDgpKX19c3RhdGlj'@;
put 'e3RoaXMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsIm5nTW9kZWwiLCIiLDMsImZvcm1Db250cm9sTmFtZSIsIiIsMywiZm9ybUNvbnRyb2wiLCIiXV0saW5wdXRzOntuYW1lOiJuYW1lIixpc0Rpc2FibGVkOltObi5Ob25lLCJkaXNhYmxlZCIsImlzRGlzYWJsZWQiXSxt'@;
put 'b2RlbDpbTm4uTm9uZSwibmdNb2RlbCIsIm1vZGVsIl0sb3B0aW9uczpbTm4uTm9uZSwibmdNb2RlbE9wdGlvbnMiLCJvcHRpb25zIl19LG91dHB1dHM6e3VwZGF0ZToibmdNb2RlbENoYW5nZSJ9LGV4cG9ydEFzOlsibmdNb2RlbCJdLGZlYXR1cmVzOltkYShbbE9lXSksd2Esd2xdfSl9fXJl'@;
put 'dHVybiBjfSkoKSxsNz0oKCk9PntjbGFzcyBje3N0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siZm9ybSIsMywibmdOb0Zvcm0iLCIiLDMsIm5nTmF0aXZlVmFsaWRh'@;
put 'dGUiLCIiXV0saG9zdEF0dHJzOlsibm92YWxpZGF0ZSIsIiJdfSl9fXJldHVybiBjfSkoKTtjb25zdCBjT2U9e3Byb3ZpZGU6YnAsdXNlRXhpc3Rpbmc6Q3MoKCk9PnZMKSxtdWx0aTohMH07bGV0IHZMPSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyBhN3t3cml0ZVZhbHVlKGEpe3RoaXMuc2V0UHJv'@;
put 'cGVydHkoInZhbHVlIixhPz8iIil9cmVnaXN0ZXJPbkNoYW5nZShhKXt0aGlzLm9uQ2hhbmdlPWQ9PnthKCIiPT1kP251bGw6cGFyc2VGbG9hdChkKSl9fXN0YXRpY3t0aGlzLlx1MDI3NWZhYz0oKCk9PntsZXQgYTtyZXR1cm4gZnVuY3Rpb24oaCl7cmV0dXJuKGF8fChhPVlzKGMpKSkoaHx8'@;
put 'Yyl9fSkoKX1zdGF0aWN7dGhpcy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siaW5wdXQiLCJ0eXBlIiwibnVtYmVyIiwiZm9ybUNvbnRyb2xOYW1lIiwiIl0sWyJpbnB1dCIsInR5cGUiLCJudW1iZXIiLCJmb3JtQ29udHJvbCIsIiJdLFsiaW5wdXQiLCJ0eXBlIiwibnVtYmVy'@;
put 'IiwibmdNb2RlbCIsIiJdXSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZCxoKXsxJmQmJkZ0KCJpbnB1dCIsZnVuY3Rpb24odil7cmV0dXJuIGgub25DaGFuZ2Uodi50YXJnZXQudmFsdWUpfSkoImJsdXIiLGZ1bmN0aW9uKCl7cmV0dXJuIGgub25Ub3VjaGVkKCl9KX0sZmVhdHVyZXM6W2RhKFtj'@;
put 'T2VdKSx3YV19KX19cmV0dXJuIGN9KSgpO2NvbnN0IHVPZT17cHJvdmlkZTpicCx1c2VFeGlzdGluZzpDcygoKT0+YkwpLG11bHRpOiEwfTtsZXQgZE9lPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLl9hY2Nlc3NvcnM9W119YWRkKGEsZCl7dGhpcy5fYWNjZXNzb3JzLnB1c2go'@;
put 'W2EsZF0pfXJlbW92ZShhKXtmb3IobGV0IGQ9dGhpcy5fYWNjZXNzb3JzLmxlbmd0aC0xO2Q+PTA7LS1kKWlmKHRoaXMuX2FjY2Vzc29yc1tkXVsxXT09PWEpcmV0dXJuIHZvaWQgdGhpcy5fYWNjZXNzb3JzLnNwbGljZShkLDEpfXNlbGVjdChhKXt0aGlzLl9hY2Nlc3NvcnMuZm9yRWFjaChk'@;
put 'PT57dGhpcy5faXNTYW1lR3JvdXAoZCxhKSYmZFsxXSE9PWEmJmRbMV0uZmlyZVVuY2hlY2soYS52YWx1ZSl9KX1faXNTYW1lR3JvdXAoYSxkKXtyZXR1cm4hIWFbMF0uY29udHJvbCYmYVswXS5fcGFyZW50PT09ZC5fY29udHJvbC5fcGFyZW50JiZhWzFdLm5hbWU9PT1kLm5hbWV9c3RhdGlj'@;
put 'e3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pfX1yZXR1cm4gY30pKCksYkw9KCgpPT57Y2xhc3MgYyBleHRlbmRzIGE3e2Nv'@;
put 'bnN0cnVjdG9yKGEsZCxoLGYpe3N1cGVyKGEsZCksdGhpcy5fcmVnaXN0cnk9aCx0aGlzLl9pbmplY3Rvcj1mLHRoaXMuc2V0RGlzYWJsZWRTdGF0ZUZpcmVkPSExLHRoaXMub25DaGFuZ2U9KCk9Pnt9LHRoaXMuY2FsbFNldERpc2FibGVkU3RhdGU9Zmkoczcse29wdGlvbmFsOiEwfSk/P2Z4'@;
put 'fW5nT25Jbml0KCl7dGhpcy5fY29udHJvbD10aGlzLl9pbmplY3Rvci5nZXQoZDEpLHRoaXMuX2NoZWNrTmFtZSgpLHRoaXMuX3JlZ2lzdHJ5LmFkZCh0aGlzLl9jb250cm9sLHRoaXMpfW5nT25EZXN0cm95KCl7dGhpcy5fcmVnaXN0cnkucmVtb3ZlKHRoaXMpfXdyaXRlVmFsdWUoYSl7dGhp'@;
put 'cy5fc3RhdGU9YT09PXRoaXMudmFsdWUsdGhpcy5zZXRQcm9wZXJ0eSgiY2hlY2tlZCIsdGhpcy5fc3RhdGUpfXJlZ2lzdGVyT25DaGFuZ2UoYSl7dGhpcy5fZm49YSx0aGlzLm9uQ2hhbmdlPSgpPT57YSh0aGlzLnZhbHVlKSx0aGlzLl9yZWdpc3RyeS5zZWxlY3QodGhpcyl9fXNldERpc2Fi'@;
put 'bGVkU3RhdGUoYSl7KHRoaXMuc2V0RGlzYWJsZWRTdGF0ZUZpcmVkfHxhfHwid2hlbkRpc2FibGVkRm9yTGVnYWN5Q29kZSI9PT10aGlzLmNhbGxTZXREaXNhYmxlZFN0YXRlKSYmdGhpcy5zZXRQcm9wZXJ0eSgiZGlzYWJsZWQiLGEpLHRoaXMuc2V0RGlzYWJsZWRTdGF0ZUZpcmVkPSEwfWZp'@;
put 'cmVVbmNoZWNrKGEpe3RoaXMud3JpdGVWYWx1ZShhKX1fY2hlY2tOYW1lKCl7IXRoaXMubmFtZSYmdGhpcy5mb3JtQ29udHJvbE5hbWUmJih0aGlzLm5hbWU9dGhpcy5mb3JtQ29udHJvbE5hbWUpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKEdl'@;
put 'KEVvKSxHZShKaSksR2UoZE9lKSxHZShEcykpfX1zdGF0aWN7dGhpcy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siaW5wdXQiLCJ0eXBlIiwicmFkaW8iLCJmb3JtQ29udHJvbE5hbWUiLCIiXSxbImlucHV0IiwidHlwZSIsInJhZGlvIiwiZm9ybUNvbnRyb2wiLCIiXSxbImlu'@;
put 'cHV0IiwidHlwZSIsInJhZGlvIiwibmdNb2RlbCIsIiJdXSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZCxoKXsxJmQmJkZ0KCJjaGFuZ2UiLGZ1bmN0aW9uKCl7cmV0dXJuIGgub25DaGFuZ2UoKX0pKCJibHVyIixmdW5jdGlvbigpe3JldHVybiBoLm9uVG91Y2hlZCgpfSl9LGlucHV0czp7bmFt'@;
put 'ZToibmFtZSIsZm9ybUNvbnRyb2xOYW1lOiJmb3JtQ29udHJvbE5hbWUiLHZhbHVlOiJ2YWx1ZSJ9LGZlYXR1cmVzOltkYShbdU9lXSksd2FdfSl9fXJldHVybiBjfSkoKTtjb25zdCByWT1uZXcgU3QoIiIpLGJPZT17cHJvdmlkZTpicCx1c2VFeGlzdGluZzpDcygoKT0+VDIpLG11bHRpOiEw'@;
put 'fTtmdW5jdGlvbiBtMGUoYyxsKXtyZXR1cm4gbnVsbD09Yz9gJHtsfWA6KGwmJiJvYmplY3QiPT10eXBlb2YgbCYmKGw9Ik9iamVjdCIpLGAke2N9OiAke2x9YC5zbGljZSgwLDUwKSl9bGV0IFQyPSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyBhN3tjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3Vt'@;
put 'ZW50cyksdGhpcy5fb3B0aW9uTWFwPW5ldyBNYXAsdGhpcy5faWRDb3VudGVyPTAsdGhpcy5fY29tcGFyZVdpdGg9T2JqZWN0LmlzfXNldCBjb21wYXJlV2l0aChhKXt0aGlzLl9jb21wYXJlV2l0aD1hfXdyaXRlVmFsdWUoYSl7dGhpcy52YWx1ZT1hO2NvbnN0IGg9bTBlKHRoaXMuX2dldE9w'@;
put 'dGlvbklkKGEpLGEpO3RoaXMuc2V0UHJvcGVydHkoInZhbHVlIixoKX1yZWdpc3Rlck9uQ2hhbmdlKGEpe3RoaXMub25DaGFuZ2U9ZD0+e3RoaXMudmFsdWU9dGhpcy5fZ2V0T3B0aW9uVmFsdWUoZCksYSh0aGlzLnZhbHVlKX19X3JlZ2lzdGVyT3B0aW9uKCl7cmV0dXJuKHRoaXMuX2lkQ291'@;
put 'bnRlcisrKS50b1N0cmluZygpfV9nZXRPcHRpb25JZChhKXtmb3IoY29uc3QgZCBvZiB0aGlzLl9vcHRpb25NYXAua2V5cygpKWlmKHRoaXMuX2NvbXBhcmVXaXRoKHRoaXMuX29wdGlvbk1hcC5nZXQoZCksYSkpcmV0dXJuIGQ7cmV0dXJuIG51bGx9X2dldE9wdGlvblZhbHVlKGEpe2NvbnN0'@;
put 'IGQ9ZnVuY3Rpb24geU9lKGMpe3JldHVybiBjLnNwbGl0KCI6IilbMF19KGEpO3JldHVybiB0aGlzLl9vcHRpb25NYXAuaGFzKGQpP3RoaXMuX29wdGlvbk1hcC5nZXQoZCk6YX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9KCgpPT57bGV0IGE7cmV0dXJuIGZ1bmN0aW9uKGgpe3JldHVybihhfHwo'@;
put 'YT1ZcyhjKSkpKGh8fGMpfX0pKCl9c3RhdGlje3RoaXMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbInNlbGVjdCIsImZvcm1Db250cm9sTmFtZSIsIiIsMywibXVsdGlwbGUiLCIiXSxbInNlbGVjdCIsImZvcm1Db250cm9sIiwiIiwzLCJtdWx0aXBsZSIsIiJdLFsic2VsZWN0'@;
put 'IiwibmdNb2RlbCIsIiIsMywibXVsdGlwbGUiLCIiXV0saG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGQsaCl7MSZkJiZGdCgiY2hhbmdlIixmdW5jdGlvbih2KXtyZXR1cm4gaC5vbkNoYW5nZSh2LnRhcmdldC52YWx1ZSl9KSgiYmx1ciIsZnVuY3Rpb24oKXtyZXR1cm4gaC5vblRvdWNoZWQoKX0p'@;
put 'fSxpbnB1dHM6e2NvbXBhcmVXaXRoOiJjb21wYXJlV2l0aCJ9LGZlYXR1cmVzOltkYShbYk9lXSksd2FdfSl9fXJldHVybiBjfSkoKSxBMj0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoKXt0aGlzLl9lbGVtZW50PWEsdGhpcy5fcmVuZGVyZXI9ZCx0aGlzLl9zZWxlY3Q9aCx0aGlz'@;
put 'Ll9zZWxlY3QmJih0aGlzLmlkPXRoaXMuX3NlbGVjdC5fcmVnaXN0ZXJPcHRpb24oKSl9c2V0IG5nVmFsdWUoYSl7bnVsbCE9dGhpcy5fc2VsZWN0JiYodGhpcy5fc2VsZWN0Ll9vcHRpb25NYXAuc2V0KHRoaXMuaWQsYSksdGhpcy5fc2V0RWxlbWVudFZhbHVlKG0wZSh0aGlzLmlkLGEpKSx0'@;
put 'aGlzLl9zZWxlY3Qud3JpdGVWYWx1ZSh0aGlzLl9zZWxlY3QudmFsdWUpKX1zZXQgdmFsdWUoYSl7dGhpcy5fc2V0RWxlbWVudFZhbHVlKGEpLHRoaXMuX3NlbGVjdCYmdGhpcy5fc2VsZWN0LndyaXRlVmFsdWUodGhpcy5fc2VsZWN0LnZhbHVlKX1fc2V0RWxlbWVudFZhbHVlKGEpe3RoaXMu'@;
put 'X3JlbmRlcmVyLnNldFByb3BlcnR5KHRoaXMuX2VsZW1lbnQubmF0aXZlRWxlbWVudCwidmFsdWUiLGEpfW5nT25EZXN0cm95KCl7dGhpcy5fc2VsZWN0JiYodGhpcy5fc2VsZWN0Ll9vcHRpb25NYXAuZGVsZXRlKHRoaXMuaWQpLHRoaXMuX3NlbGVjdC53cml0ZVZhbHVlKHRoaXMuX3NlbGVj'@;
put 'dC52YWx1ZSkpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKEdlKEppKSxHZShFbyksR2UoVDIsOSkpfX1zdGF0aWN7dGhpcy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxlY3RvcnM6W1sib3B0aW9uIl1dLGlucHV0czp7bmdWYWx1ZToibmdWYWx1'@;
put 'ZSIsdmFsdWU6InZhbHVlIn19KX19cmV0dXJuIGN9KSgpO2NvbnN0IF9PZT17cHJvdmlkZTpicCx1c2VFeGlzdGluZzpDcygoKT0+bXgpLG11bHRpOiEwfTtmdW5jdGlvbiB2MGUoYyxsKXtyZXR1cm4gbnVsbD09Yz9gJHtsfWA6KCJzdHJpbmciPT10eXBlb2YgbCYmKGw9YCcke2x9J2ApLGwm'@;
put 'JiJvYmplY3QiPT10eXBlb2YgbCYmKGw9Ik9iamVjdCIpLGAke2N9OiAke2x9YC5zbGljZSgwLDUwKSl9bGV0IG14PSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyBhN3tjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5fb3B0aW9uTWFwPW5ldyBNYXAsdGhpcy5faWRDb3VudGVy'@;
put 'PTAsdGhpcy5fY29tcGFyZVdpdGg9T2JqZWN0LmlzfXNldCBjb21wYXJlV2l0aChhKXt0aGlzLl9jb21wYXJlV2l0aD1hfXdyaXRlVmFsdWUoYSl7bGV0IGQ7aWYodGhpcy52YWx1ZT1hLEFycmF5LmlzQXJyYXkoYSkpe2NvbnN0IGg9YS5tYXAoZj0+dGhpcy5fZ2V0T3B0aW9uSWQoZikpO2Q9'@;
put 'KGYsdik9PntmLl9zZXRTZWxlY3RlZChoLmluZGV4T2Yodi50b1N0cmluZygpKT4tMSl9fWVsc2UgZD0oaCxmKT0+e2guX3NldFNlbGVjdGVkKCExKX07dGhpcy5fb3B0aW9uTWFwLmZvckVhY2goZCl9cmVnaXN0ZXJPbkNoYW5nZShhKXt0aGlzLm9uQ2hhbmdlPWQ9Pntjb25zdCBoPVtdLGY9'@;
put 'ZC5zZWxlY3RlZE9wdGlvbnM7aWYodm9pZCAwIT09Zil7Y29uc3Qgdj1mO2ZvcihsZXQgTT0wO008di5sZW5ndGg7TSsrKXtjb25zdCBaPXRoaXMuX2dldE9wdGlvblZhbHVlKHZbTV0udmFsdWUpO2gucHVzaChaKX19ZWxzZXtjb25zdCB2PWQub3B0aW9ucztmb3IobGV0IE09MDtNPHYubGVu'@;
put 'Z3RoO00rKyl7Y29uc3QgRD12W01dO2lmKEQuc2VsZWN0ZWQpe2NvbnN0IFo9dGhpcy5fZ2V0T3B0aW9uVmFsdWUoRC52YWx1ZSk7aC5wdXNoKFopfX19dGhpcy52YWx1ZT1oLGEoaCl9fV9yZWdpc3Rlck9wdGlvbihhKXtjb25zdCBkPSh0aGlzLl9pZENvdW50ZXIrKykudG9TdHJpbmcoKTty'@;
put 'ZXR1cm4gdGhpcy5fb3B0aW9uTWFwLnNldChkLGEpLGR9X2dldE9wdGlvbklkKGEpe2Zvcihjb25zdCBkIG9mIHRoaXMuX29wdGlvbk1hcC5rZXlzKCkpaWYodGhpcy5fY29tcGFyZVdpdGgodGhpcy5fb3B0aW9uTWFwLmdldChkKS5fdmFsdWUsYSkpcmV0dXJuIGQ7cmV0dXJuIG51bGx9X2dl'@;
put 'dE9wdGlvblZhbHVlKGEpe2NvbnN0IGQ9ZnVuY3Rpb24gd09lKGMpe3JldHVybiBjLnNwbGl0KCI6IilbMF19KGEpO3JldHVybiB0aGlzLl9vcHRpb25NYXAuaGFzKGQpP3RoaXMuX29wdGlvbk1hcC5nZXQoZCkuX3ZhbHVlOmF9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPSgoKT0+e2xldCBhO3Jl'@;
put 'dHVybiBmdW5jdGlvbihoKXtyZXR1cm4oYXx8KGE9WXMoYykpKShofHxjKX19KSgpfXN0YXRpY3t0aGlzLlx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyJzZWxlY3QiLCJtdWx0aXBsZSIsIiIsImZvcm1Db250cm9sTmFtZSIsIiJdLFsic2VsZWN0IiwibXVsdGlwbGUiLCIiLCJm'@;
put 'b3JtQ29udHJvbCIsIiJdLFsic2VsZWN0IiwibXVsdGlwbGUiLCIiLCJuZ01vZGVsIiwiIl1dLGhvc3RCaW5kaW5nczpmdW5jdGlvbihkLGgpezEmZCYmRnQoImNoYW5nZSIsZnVuY3Rpb24odil7cmV0dXJuIGgub25DaGFuZ2Uodi50YXJnZXQpfSkoImJsdXIiLGZ1bmN0aW9uKCl7cmV0dXJu'@;
put 'IGgub25Ub3VjaGVkKCl9KX0saW5wdXRzOntjb21wYXJlV2l0aDoiY29tcGFyZVdpdGgifSxmZWF0dXJlczpbZGEoW19PZV0pLHdhXX0pfX1yZXR1cm4gY30pKCksazI9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCl7dGhpcy5fZWxlbWVudD1hLHRoaXMuX3JlbmRlcmVyPWQsdGhp'@;
put 'cy5fc2VsZWN0PWgsdGhpcy5fc2VsZWN0JiYodGhpcy5pZD10aGlzLl9zZWxlY3QuX3JlZ2lzdGVyT3B0aW9uKHRoaXMpKX1zZXQgbmdWYWx1ZShhKXtudWxsIT10aGlzLl9zZWxlY3QmJih0aGlzLl92YWx1ZT1hLHRoaXMuX3NldEVsZW1lbnRWYWx1ZSh2MGUodGhpcy5pZCxhKSksdGhpcy5f'@;
put 'c2VsZWN0LndyaXRlVmFsdWUodGhpcy5fc2VsZWN0LnZhbHVlKSl9c2V0IHZhbHVlKGEpe3RoaXMuX3NlbGVjdD8odGhpcy5fdmFsdWU9YSx0aGlzLl9zZXRFbGVtZW50VmFsdWUodjBlKHRoaXMuaWQsYSkpLHRoaXMuX3NlbGVjdC53cml0ZVZhbHVlKHRoaXMuX3NlbGVjdC52YWx1ZSkpOnRo'@;
put 'aXMuX3NldEVsZW1lbnRWYWx1ZShhKX1fc2V0RWxlbWVudFZhbHVlKGEpe3RoaXMuX3JlbmRlcmVyLnNldFByb3BlcnR5KHRoaXMuX2VsZW1lbnQubmF0aXZlRWxlbWVudCwidmFsdWUiLGEpfV9zZXRTZWxlY3RlZChhKXt0aGlzLl9yZW5kZXJlci5zZXRQcm9wZXJ0eSh0aGlzLl9lbGVtZW50'@;
put 'Lm5hdGl2ZUVsZW1lbnQsInNlbGVjdGVkIixhKX1uZ09uRGVzdHJveSgpe3RoaXMuX3NlbGVjdCYmKHRoaXMuX3NlbGVjdC5fb3B0aW9uTWFwLmRlbGV0ZSh0aGlzLmlkKSx0aGlzLl9zZWxlY3Qud3JpdGVWYWx1ZSh0aGlzLl9zZWxlY3QudmFsdWUpKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9'@;
put 'ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShHZShKaSksR2UoRW8pLEdlKG14LDkpKX19c3RhdGlje3RoaXMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbIm9wdGlvbiJdXSxpbnB1dHM6e25nVmFsdWU6Im5nVmFsdWUiLHZhbHVlOiJ2YWx1ZSJ9fSl9fXJldHVybiBjfSko'@;
put 'KSxjNz0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5fdmFsaWRhdG9yPXNMfW5nT25DaGFuZ2VzKGEpe2lmKHRoaXMuaW5wdXROYW1lIGluIGEpe2NvbnN0IGQ9dGhpcy5ub3JtYWxpemVJbnB1dChhW3RoaXMuaW5wdXROYW1lXS5jdXJyZW50VmFsdWUpO3RoaXMuX2VuYWJsZWQ9'@;
put 'dGhpcy5lbmFibGVkKGQpLHRoaXMuX3ZhbGlkYXRvcj10aGlzLl9lbmFibGVkP3RoaXMuY3JlYXRlVmFsaWRhdG9yKGQpOnNMLHRoaXMuX29uQ2hhbmdlJiZ0aGlzLl9vbkNoYW5nZSgpfX12YWxpZGF0ZShhKXtyZXR1cm4gdGhpcy5fdmFsaWRhdG9yKGEpfXJlZ2lzdGVyT25WYWxpZGF0b3JD'@;
put 'aGFuZ2UoYSl7dGhpcy5fb25DaGFuZ2U9YX1lbmFibGVkKGEpe3JldHVybiBudWxsIT1hfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxmZWF0dXJlczpbd2xdfSl9fXJldHVybiBjfSko'@;
put 'KTtjb25zdCBNT2U9e3Byb3ZpZGU6aDAsdXNlRXhpc3Rpbmc6Q3MoKCk9PmFZKSxtdWx0aTohMH0seE9lPXtwcm92aWRlOmgwLHVzZUV4aXN0aW5nOkNzKCgpPT5vWSksbXVsdGk6ITB9O2xldCBhWT0oKCk9PntjbGFzcyBjIGV4dGVuZHMgYzd7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1'@;
put 'bWVudHMpLHRoaXMuaW5wdXROYW1lPSJyZXF1aXJlZCIsdGhpcy5ub3JtYWxpemVJbnB1dD1zMSx0aGlzLmNyZWF0ZVZhbGlkYXRvcj1hPT5GdWV9ZW5hYmxlZChhKXtyZXR1cm4gYX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9KCgpPT57bGV0IGE7cmV0dXJuIGZ1bmN0aW9uKGgpe3JldHVybihh'@;
put 'fHwoYT1ZcyhjKSkpKGh8fGMpfX0pKCl9c3RhdGlje3RoaXMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsInJlcXVpcmVkIiwiIiwiZm9ybUNvbnRyb2xOYW1lIiwiIiwzLCJ0eXBlIiwiY2hlY2tib3giXSxbIiIsInJlcXVpcmVkIiwiIiwiZm9ybUNvbnRyb2wiLCIiLDMs'@;
put 'InR5cGUiLCJjaGVja2JveCJdLFsiIiwicmVxdWlyZWQiLCIiLCJuZ01vZGVsIiwiIiwzLCJ0eXBlIiwiY2hlY2tib3giXV0saG9zdFZhcnM6MSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZCxoKXsyJmQmJmhyKCJyZXF1aXJlZCIsaC5fZW5hYmxlZD8iIjpudWxsKX0saW5wdXRzOntyZXF1aXJl'@;
put 'ZDoicmVxdWlyZWQifSxmZWF0dXJlczpbZGEoW01PZV0pLHdhXX0pfX1yZXR1cm4gY30pKCksb1k9KCgpPT57Y2xhc3MgYyBleHRlbmRzIGFZe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmNyZWF0ZVZhbGlkYXRvcj1hPT5IdWV9c3RhdGlje3RoaXMuXHUwMjc1ZmFj'@;
put 'PSgoKT0+e2xldCBhO3JldHVybiBmdW5jdGlvbihoKXtyZXR1cm4oYXx8KGE9WXMoYykpKShofHxjKX19KSgpfXN0YXRpY3t0aGlzLlx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyJpbnB1dCIsInR5cGUiLCJjaGVja2JveCIsInJlcXVpcmVkIiwiIiwiZm9ybUNvbnRyb2xOYW1l'@;
put 'IiwiIl0sWyJpbnB1dCIsInR5cGUiLCJjaGVja2JveCIsInJlcXVpcmVkIiwiIiwiZm9ybUNvbnRyb2wiLCIiXSxbImlucHV0IiwidHlwZSIsImNoZWNrYm94IiwicmVxdWlyZWQiLCIiLCJuZ01vZGVsIiwiIl1dLGhvc3RWYXJzOjEsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGQsaCl7MiZkJiZo'@;
put 'cigicmVxdWlyZWQiLGguX2VuYWJsZWQ/IiI6bnVsbCl9LGZlYXR1cmVzOltkYShbeE9lXSksd2FdfSl9fXJldHVybiBjfSkoKSxFMGU9KCgpPT57Y2xhc3MgY3tzdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1bW9k'@;
put 'PWtpKHt0eXBlOmN9KX1zdGF0aWN7dGhpcy5cdTAyNzVpbmo9QXIoe30pfX1yZXR1cm4gY30pKCksUmM9KCgpPT57Y2xhc3MgY3tzdGF0aWMgd2l0aENvbmZpZyhhKXtyZXR1cm57bmdNb2R1bGU6Yyxwcm92aWRlcnM6W3twcm92aWRlOnM3LHVzZVZhbHVlOmEuY2FsbFNldERpc2FibGVkU3Rh'@;
put 'dGU/P2Z4fV19fXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVtb2Q9a2koe3R5cGU6Y30pfXN0YXRpY3t0aGlzLlx1MDI3NWluaj1Bcih7aW1wb3J0czpbRTBlXX0pfX1yZXR1cm4gY30pKCksSU9lPSgoKT0+e2Ns'@;
put 'YXNzIGN7c3RhdGljIHdpdGhDb25maWcoYSl7cmV0dXJue25nTW9kdWxlOmMscHJvdmlkZXJzOlt7cHJvdmlkZTpyWSx1c2VWYWx1ZTphLndhcm5Pbk5nTW9kZWxXaXRoRm9ybUNvbnRyb2w/PyJhbHdheXMifSx7cHJvdmlkZTpzNyx1c2VWYWx1ZTphLmNhbGxTZXREaXNhYmxlZFN0YXRlPz9m'@;
put 'eH1dfX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1bW9kPWtpKHt0eXBlOmN9KX1zdGF0aWN7dGhpcy5cdTAyNzVpbmo9QXIoe2ltcG9ydHM6W0UwZV19KX19cmV0dXJuIGN9KSgpO2NvbnN0IEV5PVsiYW5nbGUi'@;
put 'LHtvdXRsaW5lOic8cGF0aCBkPSJNMjkuNTIsMjIuNTIsMTgsMTAuNiw2LjQ4LDIyLjUyYTEuNywxLjcsMCwwLDAsMi40NSwyLjM2TDE4LDE1LjQ5bDkuMDgsOS4zOWExLjcsMS43LDAsMCwwLDIuNDUtMi4zNloiLz4nfV0sdmg9WyJleGNsYW1hdGlvbi1jaXJjbGUiLHtvdXRsaW5lOic8cGF0'@;
put 'aCBkPSJNMTggMTkuOEMxOC41NSAxOS44IDE5IDE5LjM1IDE5IDE4LjhWMTNDMTkgMTIuNDUgMTguNTUgMTIgMTggMTJDMTcuNDUgMTIgMTcgMTIuNDUgMTcgMTNWMTguOEMxNyAxOS4zNSAxNy40NSAxOS44IDE4IDE5LjhaTTE4Ljg1IDIxLjk1QzE4LjczIDIxLjg0IDE4LjYgMjEuNzUgMTgu'@;
put 'NDYgMjEuNjlDMTguMTcgMjEuNTcgMTcuODMgMjEuNTcgMTcuNTQgMjEuNjlDMTcuNCAyMS43NSAxNy4yNyAyMS44NCAxNy4xNSAyMS45NUMxNi45MyAyMi4xOCAxNi44IDIyLjQ4IDE2LjggMjIuOEMxNi44IDIzLjEyIDE2LjkzIDIzLjQyIDE3LjE1IDIzLjY1QzE3LjI3IDIzLjc2IDE3LjQg'@;
put 'MjMuODUgMTcuNTQgMjMuOTFDMTcuNjkgMjMuOTcgMTcuODQgMjQgMTggMjRDMTguMTYgMjQgMTguMzEgMjMuOTcgMTguNDYgMjMuOTFDMTguNiAyMy44NSAxOC43MyAyMy43NiAxOC44NSAyMy42NUMxOS4wNyAyMy40MiAxOS4yIDIzLjEyIDE5LjIgMjIuOEMxOS4yIDIyLjY0IDE5LjE3IDIy'@;
put 'LjQ5IDE5LjExIDIyLjM0QzE5LjA1IDIyLjIgMTguOTYgMjIuMDYgMTguODUgMjEuOTVaTTE4IDZDMTEuMzggNiA2IDExLjM4IDYgMThDNiAyNC42MiAxMS4zOCAzMCAxOCAzMEMyNC42MiAzMCAzMCAyNC42MiAzMCAxOEMzMCAxMS4zOCAyNC42MiA2IDE4IDZaTTE4IDI4QzEyLjQ5IDI4IDgg'@;
put 'MjMuNTEgOCAxOEM4IDEyLjQ5IDEyLjQ5IDggMTggOEMyMy41MSA4IDI4IDEyLjQ5IDI4IDE4QzI4IDIzLjUxIDIzLjUxIDI4IDE4IDI4WiIvPicsc29saWQ6JzxwYXRoIGQ9Ik0xOCA2QzExLjM4IDYgNiAxMS4zOCA2IDE4QzYgMjQuNjIgMTEuMzggMzAgMTggMzBDMjQuNjIgMzAgMzAgMjQu'@;
put 'NjIgMzAgMThDMzAgMTEuMzggMjQuNjIgNiAxOCA2Wk0xNi44IDEyLjY1QzE2LjggMTEuOTkgMTcuMzQgMTEuNDUgMTggMTEuNDVDMTguNjYgMTEuNDUgMTkuMiAxMS45OSAxOS4yIDEyLjY1VjE4LjQ1QzE5LjIgMTkuMTEgMTguNjYgMTkuNjUgMTggMTkuNjVDMTcuMzQgMTkuNjUgMTYuOCAx'@;
put 'OS4xMSAxNi44IDE4LjQ1VjEyLjY1Wk0xOC45OCAyNC4xNUMxOC44NCAyNC4yOCAxOC42OSAyNC4zOCAxOC41MyAyNC40NUMxOC4zNSAyNC41MiAxOC4xOCAyNC41NiAxOCAyNC41NkMxNy44MiAyNC41NiAxNy42NCAyNC41MyAxNy40NiAyNC40NUMxNy4zMSAyNC4zOCAxNy4xNiAyNC4yOSAx'@;
put 'NyAyNC4xNEMxNi43NCAyMy44NyAxNi41OSAyMy41MiAxNi41OSAyMy4xNUMxNi41OSAyMi43OCAxNi43MyAyMi40NCAxNyAyMi4xNUMxNy4xNCAyMi4wMiAxNy4yOSAyMS45MiAxNy40NSAyMS44NUMxNy42MiAyMS43OCAxNy44IDIxLjc0IDE3Ljk5IDIxLjc0QzE4LjE4IDIxLjc0IDE4LjM2'@;
put 'IDIxLjc4IDE4LjUzIDIxLjg1QzE4LjY4IDIxLjkyIDE4LjgzIDIyLjAyIDE4Ljk4IDIyLjE1QzE5LjEgMjIuMjcgMTkuMjEgMjIuNDMgMTkuMjggMjIuNjFDMTkuMzUgMjIuNzkgMTkuMzkgMjIuOTYgMTkuMzkgMjMuMTRDMTkuMzkgMjMuNSAxOS4yNSAyMy44NSAxOC45NyAyNC4xNEwxOC45'@;
put 'OCAyNC4xNVoiLz4nfV0sYmg9WyJjaGVjay1jaXJjbGUiLHtvdXRsaW5lOic8cGF0aCBkPSJNMjIuNjEgMTQuMjJMMTYuMjUgMjAuNThMMTIuNzEgMTcuMDRDMTIuMzIgMTYuNjUgMTEuNjkgMTYuNjUgMTEuMyAxNy4wNEMxMC45MSAxNy40MyAxMC45MSAxOC4wNiAxMS4zIDE4LjQ1TDE2LjI1'@;
put 'IDIzLjRMMjQuMDMgMTUuNjJDMjQuNDIgMTUuMjMgMjQuNDIgMTQuNiAyNC4wMyAxNC4yMUMyMy42NCAxMy44MiAyMy4wMSAxMy44MiAyMi42MiAxNC4yMUwyMi42MSAxNC4yMlpNMTggNkMxMS4zOCA2IDYgMTEuMzggNiAxOEM2IDI0LjYyIDExLjM4IDMwIDE4IDMwQzI0LjYyIDMwIDMwIDI0'@;
put 'LjYyIDMwIDE4QzMwIDExLjM4IDI0LjYyIDYgMTggNlpNMTggMjhDMTIuNDkgMjggOCAyMy41MSA4IDE4QzggMTIuNDkgMTIuNDkgOCAxOCA4QzIzLjUxIDggMjggMTIuNDkgMjggMThDMjggMjMuNTEgMjMuNTEgMjggMTggMjhaIi8+Jyxzb2xpZDonPHBhdGggZD0iTTE4IDZDMTEuMzggNiA2'@;
put 'IDExLjM4IDYgMThDNiAyNC42MiAxMS4zOCAzMCAxOCAzMEMyNC42MiAzMCAzMCAyNC42MiAzMCAxOEMzMCAxMS4zOCAyNC42MiA2IDE4IDZaTTI0LjE2IDE1Ljc4TDE2LjI0IDIzLjdMMTEuMTUgMTguNjFDMTAuNjggMTguMTQgMTAuNjggMTcuMzggMTEuMTUgMTYuOTFDMTEuNjIgMTYuNDQg'@;
put 'MTIuMzggMTYuNDQgMTIuODUgMTYuOTFMMTYuMjQgMjAuM0wyMi40NiAxNC4wOEMyMi45MyAxMy42MSAyMy42OSAxMy42MSAyNC4xNiAxNC4wOEMyNC42MyAxNC41NSAyNC42MyAxNS4zMSAyNC4xNiAxNS43OFoiLz4nfV0sVDBlPVsiZWxsaXBzaXMtaG9yaXpvbnRhbCIse291dGxpbmU6Jzxw'@;
put 'YXRoIGQ9Ik03LjggMTguMUM3LjggMTkuNzU2OCA2LjUwMTYzIDIxLjEgNC45IDIxLjFDMy4yOTgzNyAyMS4xIDIgMTkuNzU2OCAyIDE4LjFDMiAxNi40NDMxIDMuMjk4MzcgMTUuMSA0LjkgMTUuMUM2LjUwMTYzIDE1LjEgNy44IDE2LjQ0MzEgNy44IDE4LjFaIi8+PHBhdGggZD0iTTE4IDIx'@;
put 'LjFDMTkuNjAxNiAyMS4xIDIwLjkgMTkuNzU2OCAyMC45IDE4LjFDMjAuOSAxNi40NDMxIDE5LjYwMTYgMTUuMSAxOCAxNS4xQzE2LjM5ODQgMTUuMSAxNS4xIDE2LjQ0MzEgMTUuMSAxOC4xQzE1LjEgMTkuNzU2OCAxNi4zOTg0IDIxLjEgMTggMjEuMVoiLz48cGF0aCBkPSJNMzEuMSAyMS4x'@;
put 'QzMyLjcwMTYgMjEuMSAzNCAxOS43NTY4IDM0IDE4LjFDMzQgMTYuNDQzMSAzMi43MDE2IDE1LjEgMzEuMSAxNS4xQzI5LjQ5ODQgMTUuMSAyOC4yIDE2LjQ0MzEgMjguMiAxOC4xQzI4LjIgMTkuNzU2OCAyOS40OTg0IDIxLjEgMzEuMSAyMS4xWiIvPicsb3V0bGluZUJhZGdlZDonPHBhdGgg'@;
put 'ZD0iTTQuOSAyMS4xQzYuNTAxNjMgMjEuMSA3LjggMTkuNzU2OCA3LjggMTguMUM3LjggMTYuNDQzMSA2LjUwMTYzIDE1LjEgNC45IDE1LjFDMy4yOTgzNyAxNS4xIDIgMTYuNDQzMSAyIDE4LjFDMiAxOS43NTY4IDMuMjk4MzcgMjEuMSA0LjkgMjEuMVoiLz48cGF0aCBkPSJNMTggMjEuMUMx'@;
put 'OS42MDE2IDIxLjEgMjAuOSAxOS43NTY4IDIwLjkgMTguMUMyMC45IDE2LjQ0MzEgMTkuNjAxNiAxNS4xIDE4IDE1LjFDMTYuMzk4NCAxNS4xIDE1LjEgMTYuNDQzMSAxNS4xIDE4LjFDMTUuMSAxOS43NTY4IDE2LjM5ODQgMjEuMSAxOCAyMS4xWiIvPjxwYXRoIGQ9Ik0zNCAxOC4xQzM0IDE5'@;
put 'Ljc1NjggMzIuNzAxNiAyMS4xIDMxLjEgMjEuMUMyOS40OTg0IDIxLjEgMjguMiAxOS43NTY4IDI4LjIgMTguMUMyOC4yIDE2LjQ0MzEgMjkuNDk4NCAxNS4xIDMxLjEgMTUuMUMzMi43MDE2IDE1LjEgMzQgMTYuNDQzMSAzNCAxOC4xWiIvPjxwYXRoIGQ9Ik0zMCAxMUMzMi43NjE0IDExIDM1'@;
put 'IDguNzYxNDIgMzUgNkMzNSAzLjIzODU4IDMyLjc2MTQgMSAzMCAxQzI3LjIzODYgMSAyNSAzLjIzODU4IDI1IDZDMjUgOC43NjE0MiAyNy4yMzg2IDExIDMwIDExWiIvPid9XSx2eD1bIndpbmRvdy1jbG9zZSIse291dGxpbmU6JzxwYXRoIGQ9Ik0xOS40MSAxOC4wMDAzTDI2LjcgMTAuNzEw'@;
put 'M0MyNy4wMzk4IDEwLjMxMzUgMjcuMDE2OSA5LjcyMjA3IDI2LjY0NzYgOS4zNTI3QzI2LjI3ODIgOC45ODMzMyAyNS42ODY4IDguOTYwNDkgMjUuMjkgOS4zMDAyNkwxOCAxNi41OTAzTDEwLjcxIDkuMjkwMjZDMTAuMzEzMiA4Ljk1MDQ5IDkuNzIxODEgOC45NzMzMyA5LjM1MjQ0IDkuMzQy'@;
put 'N0M4Ljk4MzA3IDkuNzEyMDcgOC45NjAyMyAxMC4zMDM1IDkuMzAwMDEgMTAuNzAwM0wxNi41OSAxOC4wMDAzTDkuMjkwMDEgMjUuMjkwM0M5LjAwNDYzIDI1LjUzNDcgOC44ODAzMiAyNS45MTg0IDguOTY4MTkgMjYuMjgzN0M5LjA1NjA3IDI2LjY0OSA5LjM0MTI5IDI2LjkzNDIgOS43MDY1'@;
put 'OSAyNy4wMjIxQzEwLjA3MTkgMjcuMTA5OSAxMC40NTU2IDI2Ljk4NTYgMTAuNyAyNi43MDAzTDE4IDE5LjQxMDNMMjUuMjkgMjYuNzAwM0MyNS42ODY4IDI3LjA0IDI2LjI3ODIgMjcuMDE3MiAyNi42NDc2IDI2LjY0NzhDMjcuMDE2OSAyNi4yNzg1IDI3LjAzOTggMjUuNjg3IDI2LjcgMjUu'@;
put 'MjkwM0wxOS40MSAxOC4wMDAzWiIvPid9XSxST2U9WyJpbmZvLWNpcmNsZSIse291dGxpbmU6JzxwYXRoIGQ9Ik0yMSAyM0gxOVYxNUgxNkMxNS40NSAxNSAxNSAxNS40NSAxNSAxNkMxNSAxNi41NSAxNS40NSAxNyAxNiAxN0gxN1YyM0gxNUMxNC40NSAyMyAxNCAyMy40NSAxNCAyNEMxNCAy'@;
put 'NC41NSAxNC40NSAyNSAxNSAyNUgyMUMyMS41NSAyNSAyMiAyNC41NSAyMiAyNEMyMiAyMy40NSAyMS41NSAyMyAyMSAyM1pNMTcuOTMgMTMuM0MxOC43IDEzLjMgMTkuMzMgMTIuNjcgMTkuMzMgMTEuOUMxOS4zMyAxMS4xMyAxOC43IDEwLjUgMTcuOTMgMTAuNUMxNy4xNiAxMC41IDE2LjUz'@;
put 'IDExLjEzIDE2LjUzIDExLjlDMTYuNTMgMTIuNjcgMTcuMTYgMTMuMyAxNy45MyAxMy4zWk0xOCA2QzExLjM4IDYgNiAxMS4zOCA2IDE4QzYgMjQuNjIgMTEuMzggMzAgMTggMzBDMjQuNjIgMzAgMzAgMjQuNjIgMzAgMThDMzAgMTEuMzggMjQuNjIgNiAxOCA2Wk0xOCAyOEMxMi40OSAyOCA4'@;
put 'IDIzLjUxIDggMThDOCAxMi40OSAxMi40OSA4IDE4IDhDMjMuNTEgOCAyOCAxMi40OSAyOCAxOEMyOCAyMy41MSAyMy41MSAyOCAxOCAyOFoiLz4nLHNvbGlkOic8cGF0aCBkPSJNMTggNkMxMS4zOCA2IDYgMTEuMzggNiAxOEM2IDI0LjYyIDExLjM4IDMwIDE4IDMwQzI0LjYyIDMwIDMwIDI0'@;
put 'LjYyIDMwIDE4QzMwIDExLjM4IDI0LjYyIDYgMTggNlpNMTcuOTMgMTAuM0MxOC44MSAxMC4zIDE5LjUzIDExLjAyIDE5LjUzIDExLjlDMTkuNTMgMTIuNzggMTguODEgMTMuNSAxNy45MyAxMy41QzE3LjA1IDEzLjUgMTYuMzMgMTIuNzggMTYuMzMgMTEuOUMxNi4zMyAxMS4wMiAxNy4wNSAx'@;
put 'MC4zIDE3LjkzIDEwLjNaTTIxIDI1LjJIMTVDMTQuMzQgMjUuMiAxMy44IDI0LjY2IDEzLjggMjRDMTMuOCAyMy4zNCAxNC4zNCAyMi44IDE1IDIyLjhIMTYuOFYxNy4ySDE2QzE1LjM0IDE3LjIgMTQuOCAxNi42NiAxNC44IDE2QzE0LjggMTUuMzQgMTUuMzQgMTQuOCAxNiAxNC44SDE5LjJW'@;
put 'MjIuOEgyMUMyMS42NiAyMi44IDIyLjIgMjMuMzQgMjIuMiAyNEMyMi4yIDI0LjY2IDIxLjY2IDI1LjIgMjEgMjUuMloiLz4nfV0sQTBlPVsidGltZXMiLHtvdXRsaW5lOic8cGF0aCBkPSJNMTkuNDY5NiAxNy45NzMyTDI3Ljc1OTYgOS43MDU0MkMyOC4wOTk0IDkuMzA5NzIgMjguMDc2NSA4'@;
put 'LjcxOTg3IDI3LjcwNzEgOC4zNTE0OEMyNy4zMzc4IDcuOTgzMSAyNi43NDYzIDcuOTYwMzIgMjYuMzQ5NiA4LjI5OTE5TDE4LjA1OTYgMTYuNTY3TDkuNzY5NTggOC4yODkyMkM5LjM3NzQ1IDcuODk4MTQgOC43NDE3IDcuODk4MTQgOC4zNDk1OCA4LjI4OTIyQzcuOTU3NDUgOC42ODAyOSA3'@;
put 'Ljk1NzQ1IDkuMzE0MzQgOC4zNDk1OCA5LjcwNTQyTDE2LjY0OTYgMTcuOTczMkw4LjM0OTU4IDI2LjI0MUM4LjA2NDIgMjYuNDg0OCA3LjkzOTg5IDI2Ljg2NzUgOC4wMjc3NyAyNy4yMzE4QzguMTE1NjQgMjcuNTk2MSA4LjQwMDg2IDI3Ljg4MDYgOC43NjYxNiAyNy45NjgyQzkuMTMxNDYg'@;
put 'MjguMDU1OSA5LjUxNTE5IDI3LjkzMTkgOS43NTk1OCAyNy42NDczTDE4LjA1OTYgMTkuMzc5NUwyNi4zNDk2IDI3LjY0NzNDMjYuNzQ2MyAyNy45ODYxIDI3LjMzNzggMjcuOTYzNCAyNy43MDcxIDI3LjU5NUMyOC4wNzY1IDI3LjIyNjYgMjguMDk5NCAyNi42MzY3IDI3Ljc1OTYgMjYuMjQx'@;
put 'TDE5LjQ2OTYgMTcuOTczMloiLz4nfV0sazBlPVsiYW5nbGUtZG91YmxlIix7b3V0bGluZTonPHBhdGggZD0iTTI4LjM0OTEgMTcuODk5NkMyOC41Mzg0IDE4LjA4MzcgMjguNzk0NSAxOC4xODYzIDI5LjA2MSAxOC4xODQ4QzI5LjQ2NCAxOC4xODMxIDI5LjgyNjggMTcuOTQ1MSAyOS45ODIx'@;
put 'IDE3LjU4MDVDMzAuMTM3NCAxNy4yMTU4IDMwLjA1NSAxNi43OTU1IDI5Ljc3MjkgMTYuNTEzM0wxOC4wMzE4IDVMNi4zMDA2NyAxNi41MTMzQzUuOTU5OTkgMTYuOTAzNCA1Ljk4Mjg5IDE3LjQ4NDkgNi4zNTMyNSAxNy44NDgxQzYuNzIzNiAxOC4yMTEyIDcuMzE2NiAxOC4yMzM3IDcuNzE0'@;
put 'NDIgMTcuODk5NkwxOC4wMzE4IDcuNzgyNDZMMjguMzQ5MSAxNy44OTk2WiIvPjxwYXRoIGQ9Ik0yOC4zNDkxIDI4LjcxNDlDMjguNTM4NCAyOC44OTg5IDI4Ljc5NDUgMjkuMDAxNSAyOS4wNjEgMjlDMjkuNDY0IDI4Ljk5ODQgMjkuODI2OCAyOC43NjAzIDI5Ljk4MjEgMjguMzk1N0MzMC4x'@;
put 'Mzc0IDI4LjAzMTEgMzAuMDU1IDI3LjYxMDcgMjkuNzcyOSAyNy4zMjg1TDE4LjAzMTggMTUuODE1Mkw2LjMwMDY3IDI3LjMyODVDNS45NTk5OSAyNy43MTg2IDUuOTgyODkgMjguMzAwMSA2LjM1MzI1IDI4LjY2MzNDNi43MjM2IDI5LjAyNjUgNy4zMTY2IDI5LjA0ODkgNy43MTQ0MiAyOC43'@;
put 'MTQ5TDE4LjAzMTggMTguNTk3N0wyOC4zNDkxIDI4LjcxNDlaIi8+J31dLExPZT1bImV2ZW50Iix7b3V0bGluZTonPHBhdGggZD0iTTE2LjE3IDI1Ljg2TDEwLjgxIDIwLjVDMTAuNjQ2MiAyMC4zMDg3IDEwLjU2MDYgMjAuMDYyNiAxMC41NzAzIDE5LjgxMDlDMTAuNTggMTkuNTU5MyAxMC42'@;
put 'ODQ0IDE5LjMyMDUgMTAuODYyNCAxOS4xNDI0QzExLjA0MDUgMTguOTY0MyAxMS4yNzkzIDE4Ljg2IDExLjUzMSAxOC44NTAzQzExLjc4MjYgMTguODQwNiAxMi4wMjg3IDE4LjkyNjIgMTIuMjIgMTkuMDlMMTYuMTcgMjNMMjQuODEgMTQuMzZDMjUuMDAxMyAxNC4xOTYyIDI1LjI0NzQgMTQu'@;
put 'MTEwNiAyNS40OTkxIDE0LjEyMDNDMjUuNzUwNyAxNC4xMyAyNS45ODk1IDE0LjIzNDMgMjYuMTY3NiAxNC40MTI0QzI2LjM0NTcgMTQuNTkwNSAyNi40NSAxNC44MjkzIDI2LjQ1OTcgMTUuMDgwOUMyNi40Njk0IDE1LjMzMjYgMjYuMzgzOCAxNS41Nzg3IDI2LjIyIDE1Ljc3TDE2LjE3IDI1'@;
put 'Ljg2WiIvPjxwYXRoIGQ9Ik0zMi4yNSA2SDI5VjhIMzJWMzBINC4wMDAwMVY4SDcuMDAwMDFWNkgzLjc1MDAxQzMuNTE2MjUgNi4wMDM5MSAzLjI4NTU1IDYuMDUzODMgMy4wNzEwOCA2LjE0NjkxQzIuODU2NjEgNi4yMzk5OSAyLjY2MjU4IDYuMzc0NDEgMi41MDAwNyA2LjU0MjQ5QzIuMzM3'@;
put 'NTcgNi43MTA1NyAyLjIwOTc2IDYuOTA5MDIgMi4xMjM5NiA3LjEyNjVDMi4wMzgxNiA3LjM0Mzk4IDEuOTk2MDQgNy41NzYyNCAyLjAwMDAxIDcuODFWMzAuMTlDMS45OTYwNCAzMC40MjM4IDIuMDM4MTYgMzAuNjU2IDIuMTIzOTYgMzAuODczNUMyLjIwOTc2IDMxLjA5MSAyLjMzNzU3IDMx'@;
put 'LjI4OTQgMi41MDAwNyAzMS40NTc1QzIuNjYyNTggMzEuNjI1NiAyLjg1NjYxIDMxLjc2IDMuMDcxMDggMzEuODUzMUMzLjI4NTU1IDMxLjk0NjIgMy41MTYyNSAzMS45OTYxIDMuNzUwMDEgMzJIMzIuMjVDMzIuNDgzOCAzMS45OTYxIDMyLjcxNDUgMzEuOTQ2MiAzMi45Mjg5IDMxLjg1MzFD'@;
put 'MzMuMTQzNCAzMS43NiAzMy4zMzc0IDMxLjYyNTYgMzMuNSAzMS40NTc1QzMzLjY2MjUgMzEuMjg5NCAzMy43OTAzIDMxLjA5MSAzMy44NzYxIDMwLjg3MzVDMzMuOTYxOSAzMC42NTYgMzQuMDA0IDMwLjQyMzggMzQgMzAuMTlWNy44MUMzNC4wMDQgNy41NzYyNCAzMy45NjE5IDcuMzQzOTgg'@;
put 'MzMuODc2MSA3LjEyNjVDMzMuNzkwMyA2LjkwOTAyIDMzLjY2MjUgNi43MTA1NyAzMy41IDYuNTQyNDlDMzMuMzM3NCA2LjM3NDQxIDMzLjE0MzQgNi4yMzk5OSAzMi45Mjg5IDYuMTQ2OTFDMzIuNzE0NSA2LjA1MzgzIDMyLjQ4MzggNi4wMDM5MSAzMi4yNSA2WiIvPjxwYXRoIGQ9Ik0xMCAx'@;
put 'MEMxMC4yNjUyIDEwIDEwLjUxOTYgOS44OTQ2NCAxMC43MDcxIDkuNzA3MTFDMTAuODk0NyA5LjUxOTU3IDExIDkuMjY1MjIgMTEgOVYzQzExIDIuNzM0NzggMTAuODk0NyAyLjQ4MDQzIDEwLjcwNzEgMi4yOTI4OUMxMC41MTk2IDIuMTA1MzYgMTAuMjY1MiAyIDEwIDJDOS43MzQ4IDIgOS40'@;
put 'ODA0NCAyLjEwNTM2IDkuMjkyOTEgMi4yOTI4OUM5LjEwNTM3IDIuNDgwNDMgOS4wMDAwMSAyLjczNDc4IDkuMDAwMDEgM1Y5QzkuMDAwMDEgOS4yNjUyMiA5LjEwNTM3IDkuNTE5NTcgOS4yOTI5MSA5LjcwNzExQzkuNDgwNDQgOS44OTQ2NCA5LjczNDggMTAgMTAgMTBaIi8+PHBhdGggZD0i'@;
put 'TTI2IDEwQzI2LjI2NTIgMTAgMjYuNTE5NiA5Ljg5NDY0IDI2LjcwNzEgOS43MDcxMUMyNi44OTQ3IDkuNTE5NTcgMjcgOS4yNjUyMiAyNyA5VjNDMjcgMi43MzQ3OCAyNi44OTQ3IDIuNDgwNDMgMjYuNzA3MSAyLjI5Mjg5QzI2LjUxOTYgMi4xMDUzNiAyNi4yNjUyIDIgMjYgMkMyNS43MzQ4'@;
put 'IDIgMjUuNDgwNCAyLjEwNTM2IDI1LjI5MjkgMi4yOTI4OUMyNS4xMDU0IDIuNDgwNDMgMjUgMi43MzQ3OCAyNSAzVjlDMjUgOS4yNjUyMiAyNS4xMDU0IDkuNTE5NTcgMjUuMjkyOSA5LjcwNzExQzI1LjQ4MDQgOS44OTQ2NCAyNS43MzQ4IDEwIDI2IDEwWiIvPjxwYXRoIGQ9Ik0yMyA2SDEz'@;
put 'VjhIMjNWNloiLz4nLG91dGxpbmVBbGVydGVkOic8cGF0aCBkPSJNMjYuOTAzOSAxLjY0NjIxTDIxLjIyMjIgMTEuMTE1OUMyMC45NTI2IDExLjQ5ODQgMjAuOTI4MSAxMS45OTQ5IDIxLjE1ODggMTIuNDAwNUMyMS4zODk2IDEyLjgwNiAyMS44MzYzIDEzLjA1MTkgMjIuMzE0OCAxMy4wMzY3'@;
put 'SDMzLjY4ODFDMzQuMTY2NiAxMy4wNTE5IDM0LjYxMzQgMTIuODA2IDM0Ljg0NDEgMTIuNDAwNUMzNS4wNzQ4IDExLjk5NDkgMzUuMDUwMyAxMS40OTg0IDM0Ljc4MDggMTEuMTE1OUwyOS4wOTkxIDEuNjQ2MjFDMjguODcxMSAxLjI2OTEzIDI4LjQ1MzIgMS4wMzczNSAyOC4wMDE1IDEuMDM3'@;
put 'MzVDMjcuNTQ5NyAxLjAzNzM1IDI3LjEzMTkgMS4yNjkxMyAyNi45MDM5IDEuNjQ2MjFaIi8+PHBhdGggZD0iTTMyIDE1LjAzNjdIMzMuNjYzN0MzMy43NzY0IDE1LjAzODkgMzMuODg4NiAxNS4wMzU0IDM0IDE1LjAyNjNWMzAuMTlDMzQuMDA0IDMwLjQyMzggMzMuOTYxOSAzMC42NTYgMzMu'@;
put 'ODc2MSAzMC44NzM1QzMzLjc5MDMgMzEuMDkxIDMzLjY2MjUgMzEuMjg5NCAzMy41IDMxLjQ1NzVDMzMuMzM3NCAzMS42MjU2IDMzLjE0MzQgMzEuNzYgMzIuOTI4OSAzMS44NTMxQzMyLjcxNDUgMzEuOTQ2MiAzMi40ODM4IDMxLjk5NjEgMzIuMjUgMzJIMy43NTAwMUMzLjUxNjI1IDMxLjk5'@;
put 'NjEgMy4yODU1NSAzMS45NDYyIDMuMDcxMDggMzEuODUzMUMyLjg1NjYxIDMxLjc2IDIuNjYyNTggMzEuNjI1NiAyLjUwMDA3IDMxLjQ1NzVDMi4zMzc1NyAzMS4yODk0IDIuMjA5NzYgMzEuMDkxIDIuMTIzOTYgMzAuODczNUMyLjAzODE2IDMwLjY1NiAxLjk5NjA0IDMwLjQyMzggMi4wMDAw'@;
put 'MSAzMC4xOVY3LjgxQzEuOTk2MDQgNy41NzYyNCAyLjAzODE2IDcuMzQzOTggMi4xMjM5NiA3LjEyNjVDMi4yMDk3NiA2LjkwOTAyIDIuMzM3NTcgNi43MTA1NyAyLjUwMDA3IDYuNTQyNDlDMi42NjI1OCA2LjM3NDQxIDIuODU2NjEgNi4yMzk5OSAzLjA3MTA4IDYuMTQ2OTFDMy4yODU1NSA2'@;
put 'LjA1MzgzIDMuNTE2MjUgNi4wMDM5MSAzLjc1MDAxIDZINy4wMDAwMVY4SDQuMDAwMDFWMzBIMzJWMTUuMDM2N1oiLz48cGF0aCBkPSJNMjQuMTMzMyAxNS4wMzY3SDI2LjQ1N0MyNi40NTgzIDE1LjA1MTQgMjYuNDU5MiAxNS4wNjYxIDI2LjQ1OTcgMTUuMDgwOUMyNi40Njk0IDE1LjMzMjYg'@;
put 'MjYuMzgzOCAxNS41Nzg3IDI2LjIyIDE1Ljc3TDE2LjE3IDI1Ljg2TDEwLjgxIDIwLjVDMTAuNjQ2MiAyMC4zMDg3IDEwLjU2MDYgMjAuMDYyNiAxMC41NzAzIDE5LjgxMDlDMTAuNTggMTkuNTU5MyAxMC42ODQ0IDE5LjMyMDUgMTAuODYyNCAxOS4xNDI0QzExLjA0MDUgMTguOTY0MyAxMS4y'@;
put 'NzkzIDE4Ljg2IDExLjUzMSAxOC44NTAzQzExLjc4MjYgMTguODQwNiAxMi4wMjg3IDE4LjkyNjIgMTIuMjIgMTkuMDlMMTYuMTcgMjNMMjQuMTMzMyAxNS4wMzY3WiIvPjxwYXRoIGQ9Ik0yMS45NTk0IDZMMjAuNzU5NCA4SDEzVjZIMjEuOTU5NFoiLz48cGF0aCBkPSJNMTAuNzA3MSA5Ljcw'@;
put 'NzExQzEwLjUxOTYgOS44OTQ2NCAxMC4yNjUyIDEwIDEwIDEwQzkuNzM0OCAxMCA5LjQ4MDQ0IDkuODk0NjQgOS4yOTI5MSA5LjcwNzExQzkuMTA1MzcgOS41MTk1NyA5LjAwMDAxIDkuMjY1MjIgOS4wMDAwMSA5VjNDOS4wMDAwMSAyLjczNDc4IDkuMTA1MzcgMi40ODA0MyA5LjI5MjkxIDIu'@;
put 'MjkyODlDOS40ODA0NCAyLjEwNTM2IDkuNzM0OCAyIDEwIDJDMTAuMjY1MiAyIDEwLjUxOTYgMi4xMDUzNiAxMC43MDcxIDIuMjkyODlDMTAuODk0NyAyLjQ4MDQzIDExIDIuNzM0NzggMTEgM1Y5QzExIDkuMjY1MjIgMTAuODk0NyA5LjUxOTU3IDEwLjcwNzEgOS43MDcxMVoiLz4nLG91dGxp'@;
put 'bmVCYWRnZWQ6JzxwYXRoIGQ9Ik0xMC44MSAyMC41TDE2LjE3IDI1Ljg2TDI2LjIyIDE1LjgxQzI2LjM4MzggMTUuNjE4NyAyNi40Njk0IDE1LjM3MjYgMjYuNDU5NyAxNS4xMjA5QzI2LjQ1IDE0Ljg2OTMgMjYuMzQ1NyAxNC42MzA1IDI2LjE2NzYgMTQuNDUyNEMyNS45ODk1IDE0LjI3NDMg'@;
put 'MjUuNzUwNyAxNC4xNyAyNS40OTkxIDE0LjE2MDNDMjUuMjQ3NCAxNC4xNTA2IDI1LjAwMTMgMTQuMjM2MiAyNC44MSAxNC40TDE2LjE3IDIzTDEyLjIzIDE5LjA2QzEyLjAzODcgMTguODk2MiAxMS43OTI2IDE4LjgxMDYgMTEuNTQxIDE4LjgyMDNDMTEuMjg5MyAxOC44MyAxMS4wNTA1IDE4'@;
put 'LjkzNDMgMTAuODcyNCAxOS4xMTI0QzEwLjY5NDQgMTkuMjkwNSAxMC41OSAxOS41MjkzIDEwLjU4MDMgMTkuNzgwOUMxMC41NzA2IDIwLjAzMjYgMTAuNjU2MiAyMC4yNzg3IDEwLjgyIDIwLjQ3TDEwLjgxIDIwLjVaIi8+PHBhdGggZD0iTTEwIDEwQzEwLjI2NTIgMTAgMTAuNTE5NiA5Ljg5'@;
put 'NDY0IDEwLjcwNzEgOS43MDcxMUMxMC44OTQ3IDkuNTE5NTcgMTEgOS4yNjUyMiAxMSA5VjNDMTEgMi43MzQ3OCAxMC44OTQ3IDIuNDgwNDMgMTAuNzA3MSAyLjI5Mjg5QzEwLjUxOTYgMi4xMDUzNiAxMC4yNjUyIDIgMTAgMkM5LjczNDggMiA5LjQ4MDQ0IDIuMTA1MzYgOS4yOTI5MSAyLjI5'@;
put 'Mjg5QzkuMTA1MzcgMi40ODA0MyA5LjAwMDAxIDIuNzM0NzggOS4wMDAwMSAzVjlDOS4wMDAwMSA5LjI2NTIyIDkuMTA1MzcgOS41MTk1NyA5LjI5MjkxIDkuNzA3MTFDOS40ODA0NCA5Ljg5NDY0IDkuNzM0OCAxMCAxMCAxMFoiLz48cGF0aCBkPSJNMzIgMTMuMjJWMzBINC4wMDAwMVY4SDcu'@;
put 'MDAwMDFWNkgzLjc1MDAxQzMuNTE2MjUgNi4wMDM5MSAzLjI4NTU1IDYuMDUzODMgMy4wNzEwOCA2LjE0NjkxQzIuODU2NjEgNi4yMzk5OSAyLjY2MjU4IDYuMzc0NDEgMi41MDAwNyA2LjU0MjQ5QzIuMzM3NTcgNi43MTA1NyAyLjIwOTc2IDYuOTA5MDIgMi4xMjM5NiA3LjEyNjVDMi4wMzgx'@;
put 'NiA3LjM0Mzk4IDEuOTk2MDQgNy41NzYyNCAyLjAwMDAxIDcuODFWMzAuMTlDMS45OTYwNCAzMC40MjM4IDIuMDM4MTYgMzAuNjU2IDIuMTIzOTYgMzAuODczNUMyLjIwOTc2IDMxLjA5MSAyLjMzNzU3IDMxLjI4OTQgMi41MDAwNyAzMS40NTc1QzIuNjYyNTggMzEuNjI1NiAyLjg1NjYxIDMx'@;
put 'Ljc2IDMuMDcxMDggMzEuODUzMUMzLjI4NTU1IDMxLjk0NjIgMy41MTYyNSAzMS45OTYxIDMuNzUwMDEgMzJIMzIuMjVDMzIuNDgzOCAzMS45OTYxIDMyLjcxNDUgMzEuOTQ2MiAzMi45Mjg5IDMxLjg1MzFDMzMuMTQzNCAzMS43NiAzMy4zMzc0IDMxLjYyNTYgMzMuNSAzMS40NTc1QzMzLjY2'@;
put 'MjUgMzEuMjg5NCAzMy43OTAzIDMxLjA5MSAzMy44NzYxIDMwLjg3MzVDMzMuOTYxOSAzMC42NTYgMzQuMDA0IDMwLjQyMzggMzQgMzAuMTlWMTIuMzRDMzMuMzgwMiAxMi43MyAzMi43MDYzIDEzLjAyNjYgMzIgMTMuMjJaIi8+PHBhdGggZD0iTTIyLjUgNkgxM1Y4SDIyLjc4QzIyLjU5Njgg'@;
put 'Ny4zNDkwMyAyMi41MDI2IDYuNjc2MjUgMjIuNSA2WiIvPjxwYXRoIGQ9Ik0zMCAxMUMzMi43NjE0IDExIDM1IDguNzYxNDIgMzUgNkMzNSAzLjIzODU4IDMyLjc2MTQgMSAzMCAxQzI3LjIzODYgMSAyNSAzLjIzODU4IDI1IDZDMjUgOC43NjE0MiAyNy4yMzg2IDExIDMwIDExWiIvPicsc29s'@;
put 'aWQ6JzxwYXRoIGQ9Ik0xMCAxMEMxMC4yNjUyIDEwIDEwLjUxOTYgOS44OTQ2NCAxMC43MDcxIDkuNzA3MTFDMTAuODk0NyA5LjUxOTU3IDExIDkuMjY1MjIgMTEgOVYzQzExIDIuNzM0NzggMTAuODk0NyAyLjQ4MDQzIDEwLjcwNzEgMi4yOTI4OUMxMC41MTk2IDIuMTA1MzYgMTAuMjY1MiAy'@;
put 'IDEwIDJDOS43MzQ4IDIgOS40ODA0NCAyLjEwNTM2IDkuMjkyOTEgMi4yOTI4OUM5LjEwNTM3IDIuNDgwNDMgOS4wMDAwMSAyLjczNDc4IDkuMDAwMDEgM1Y5QzkuMDAwMDEgOS4yNjUyMiA5LjEwNTM3IDkuNTE5NTcgOS4yOTI5MSA5LjcwNzExQzkuNDgwNDQgOS44OTQ2NCA5LjczNDggMTAg'@;
put 'MTAgMTBaIi8+PHBhdGggZD0iTTI2IDEwQzI2LjI2NTIgMTAgMjYuNTE5NiA5Ljg5NDY0IDI2LjcwNzEgOS43MDcxMUMyNi44OTQ3IDkuNTE5NTcgMjcgOS4yNjUyMiAyNyA5VjNDMjcgMi43MzQ3OCAyNi44OTQ3IDIuNDgwNDMgMjYuNzA3MSAyLjI5Mjg5QzI2LjUxOTYgMi4xMDUzNiAyNi4y'@;
put 'NjUyIDIgMjYgMkMyNS43MzQ4IDIgMjUuNDgwNCAyLjEwNTM2IDI1LjI5MjkgMi4yOTI4OUMyNS4xMDU0IDIuNDgwNDMgMjUgMi43MzQ3OCAyNSAzVjlDMjUgOS4yNjUyMiAyNS4xMDU0IDkuNTE5NTcgMjUuMjkyOSA5LjcwNzExQzI1LjQ4MDQgOS44OTQ2NCAyNS43MzQ4IDEwIDI2IDEwWiIv'@;
put 'PjxwYXRoIGQ9Ik0zMi4yNSA2SDI4LjI1VjlDMjguMjUgOS41ODM0OCAyOC4wMTgyIDEwLjE0MzEgMjcuNjA1NiAxMC41NTU2QzI3LjE5MzEgMTAuOTY4MiAyNi42MzM1IDExLjIgMjYuMDUgMTEuMkMyNS40NjY1IDExLjIgMjQuOTA3IDEwLjk2ODIgMjQuNDk0NCAxMC41NTU2QzI0LjA4MTgg'@;
put 'MTAuMTQzMSAyMy44NSA5LjU4MzQ4IDIzLjg1IDlWNkgxMi4yVjlDMTIuMiA5LjU4MzQ4IDExLjk2ODIgMTAuMTQzMSAxMS41NTU2IDEwLjU1NTZDMTEuMTQzMSAxMC45NjgyIDEwLjU4MzUgMTEuMiAxMCAxMS4yQzkuNDE2NTQgMTEuMiA4Ljg1Njk2IDEwLjk2ODIgOC40NDQzOCAxMC41NTU2'@;
put 'QzguMDMxOCAxMC4xNDMxIDcuODAwMDEgOS41ODM0OCA3LjgwMDAxIDlWNkgzLjgwMDAxQzMuNTYyMDQgNS45OTcyOSAzLjMyNTkzIDYuMDQyMzMgMy4xMDU2NyA2LjEzMjQ2QzIuODg1NCA2LjIyMjU5IDIuNjg1NDUgNi4zNTU5NyAyLjUxNzYzIDYuNTI0NzNDMi4zNDk4MSA2LjY5MzQ4IDIu'@;
put 'MjE3NTMgNi44OTQxNyAyLjEyODYzIDcuMTE0OTNDMi4wMzk3MiA3LjMzNTY5IDEuOTk1OTkgNy41NzIwNCAyLjAwMDAxIDcuODFWMzAuMTlDMS45OTYwNCAzMC40MjM4IDIuMDM4MTYgMzAuNjU2IDIuMTIzOTYgMzAuODczNUMyLjIwOTc2IDMxLjA5MSAyLjMzNzU3IDMxLjI4OTQgMi41MDAw'@;
put 'NyAzMS40NTc1QzIuNjYyNTggMzEuNjI1NiAyLjg1NjYxIDMxLjc2IDMuMDcxMDggMzEuODUzMUMzLjI4NTU1IDMxLjk0NjIgMy41MTYyNSAzMS45OTYxIDMuNzUwMDEgMzJIMzIuMjVDMzIuNDgzOCAzMS45OTYxIDMyLjcxNDUgMzEuOTQ2MiAzMi45Mjg5IDMxLjg1MzFDMzMuMTQzNCAzMS43'@;
put 'NiAzMy4zMzc0IDMxLjYyNTYgMzMuNSAzMS40NTc1QzMzLjY2MjUgMzEuMjg5NCAzMy43OTAzIDMxLjA5MSAzMy44NzYxIDMwLjg3MzVDMzMuOTYxOSAzMC42NTYgMzQuMDA0IDMwLjQyMzggMzQgMzAuMTlWNy44MUMzNC4wMDQgNy41NzYyNCAzMy45NjE5IDcuMzQzOTggMzMuODc2MSA3LjEy'@;
put 'NjVDMzMuNzkwMyA2LjkwOTAyIDMzLjY2MjUgNi43MTA1NyAzMy41IDYuNTQyNDlDMzMuMzM3NCA2LjM3NDQxIDMzLjE0MzQgNi4yMzk5OSAzMi45Mjg5IDYuMTQ2OTFDMzIuNzE0NSA2LjA1MzgzIDMyLjQ4MzggNi4wMDM5MSAzMi4yNSA2Wk0yNS45NCAxNi41OEwxNi4yNyAyNi4yNUwxMSAy'@;
put 'MC45NEMxMC43NjY1IDIwLjY4MzIgMTAuNjQwMSAyMC4zNDY5IDEwLjY0NjUgMTkuOTk5OUMxMC42NTI5IDE5LjY1MjkgMTAuNzkxOCAxOS4zMjE1IDExLjAzNDYgMTkuMDczNUMxMS4yNzc1IDE4LjgyNTUgMTEuNjA1OSAxOC42Nzk4IDExLjk1MjcgMTguNjY2MUMxMi4yOTk1IDE4LjY1MjUg'@;
put 'MTIuNjM4NCAxOC43NzE5IDEyLjkgMTlMMTYuMjggMjIuMzhMMjQgMTQuNjZDMjQuMTI2NyAxNC41MzMzIDI0LjI3NzIgMTQuNDMyNyAyNC40NDI4IDE0LjM2NDJDMjQuNjA4MyAxNC4yOTU2IDI0Ljc4NTggMTQuMjYwMyAyNC45NjUgMTQuMjYwM0MyNS4xNDQyIDE0LjI2MDMgMjUuMzIxNyAx'@;
put 'NC4yOTU2IDI1LjQ4NzMgMTQuMzY0MkMyNS42NTI4IDE0LjQzMjcgMjUuODAzMyAxNC41MzMzIDI1LjkzIDE0LjY2QzI2LjA1NjcgMTQuNzg2NyAyNi4xNTczIDE0LjkzNzIgMjYuMjI1OCAxNS4xMDI3QzI2LjI5NDQgMTUuMjY4MyAyNi4zMjk3IDE1LjQ0NTggMjYuMzI5NyAxNS42MjVDMjYu'@;
put 'MzI5NyAxNS44MDQyIDI2LjI5NDQgMTUuOTgxNyAyNi4yMjU4IDE2LjE0NzNDMjYuMTU3MyAxNi4zMTI4IDI2LjA1NjcgMTYuNDYzMyAyNS45MyAxNi41OUwyNS45NCAxNi41OFoiLz4nLHNvbGlkQWxlcnRlZDonPHBhdGggZD0iTTI2LjkwMzkgMS42NDYyMUwyMS4yMjIyIDExLjExNTlDMjAu'@;
put 'OTUyNiAxMS40OTg0IDIwLjkyODEgMTEuOTk0OSAyMS4xNTg4IDEyLjQwMDVDMjEuMzg5NiAxMi44MDYgMjEuODM2MyAxMy4wNTE5IDIyLjMxNDggMTMuMDM2N0gzMy42ODgxQzM0LjE2NjYgMTMuMDUxOSAzNC42MTM0IDEyLjgwNiAzNC44NDQxIDEyLjQwMDVDMzUuMDc0OCAxMS45OTQ5IDM1'@;
put 'LjA1MDMgMTEuNDk4NCAzNC43ODA4IDExLjExNTlMMjkuMDk5MSAxLjY0NjIxQzI4Ljg3MTEgMS4yNjkxMyAyOC40NTMyIDEuMDM3MzUgMjguMDAxNSAxLjAzNzM1QzI3LjU0OTcgMS4wMzczNSAyNy4xMzE5IDEuMjY5MTMgMjYuOTAzOSAxLjY0NjIxWiIvPjxwYXRoIGQ9Ik0yMS45NTk0IDZI'@;
put 'MTIuMlY5QzEyLjIgOS41ODM0OCAxMS45NjgyIDEwLjE0MzEgMTEuNTU1NiAxMC41NTU2QzExLjE0MzEgMTAuOTY4MiAxMC41ODM1IDExLjIgMTAgMTEuMkM5LjQxNjU0IDExLjIgOC44NTY5NiAxMC45NjgyIDguNDQ0MzggMTAuNTU1NkM4LjAzMTggMTAuMTQzMSA3LjgwMDAxIDkuNTgzNDgg'@;
put 'Ny44MDAwMSA5VjZIMy44MDAwMUMzLjU2MjA0IDUuOTk3MjkgMy4zMjU5MyA2LjA0MjMzIDMuMTA1NjcgNi4xMzI0NkMyLjg4NTQgNi4yMjI1OSAyLjY4NTQ1IDYuMzU1OTcgMi41MTc2MyA2LjUyNDczQzIuMzQ5ODEgNi42OTM0OCAyLjIxNzUzIDYuODk0MTcgMi4xMjg2MyA3LjExNDkzQzIu'@;
put 'MDM5NzIgNy4zMzU2OSAxLjk5NTk5IDcuNTcyMDQgMi4wMDAwMSA3LjgxVjMwLjE5QzEuOTk2MDQgMzAuNDIzOCAyLjAzODE2IDMwLjY1NiAyLjEyMzk2IDMwLjg3MzVDMi4yMDk3NiAzMS4wOTEgMi4zMzc1NyAzMS4yODk0IDIuNTAwMDcgMzEuNDU3NUMyLjY2MjU4IDMxLjYyNTYgMi44NTY2'@;
put 'MSAzMS43NiAzLjA3MTA4IDMxLjg1MzFDMy4yODU1NSAzMS45NDYyIDMuNTE2MjUgMzEuOTk2MSAzLjc1MDAxIDMySDMyLjI1QzMyLjQ4MzggMzEuOTk2MSAzMi43MTQ1IDMxLjk0NjIgMzIuOTI4OSAzMS44NTMxQzMzLjE0MzQgMzEuNzYgMzMuMzM3NCAzMS42MjU2IDMzLjUgMzEuNDU3NUMz'@;
put 'My42NjI1IDMxLjI4OTQgMzMuNzkwMyAzMS4wOTEgMzMuODc2MSAzMC44NzM1QzMzLjk2MTkgMzAuNjU2IDM0LjAwNCAzMC40MjM4IDM0IDMwLjE5VjE1LjAyNjNDMzMuODg4NiAxNS4wMzU0IDMzLjc3NjQgMTUuMDM4OSAzMy42NjM3IDE1LjAzNjdIMjYuMTk2NEMyNi4yMDY4IDE1LjA1ODQg'@;
put 'MjYuMjE2NiAxNS4wODA0IDI2LjIyNTggMTUuMTAyN0MyNi4yOTQ0IDE1LjI2ODMgMjYuMzI5NyAxNS40NDU4IDI2LjMyOTcgMTUuNjI1QzI2LjMyOTcgMTUuODA0MiAyNi4yOTQ0IDE1Ljk4MTcgMjYuMjI1OCAxNi4xNDczQzI2LjE1NzMgMTYuMzEyOCAyNi4wNTY3IDE2LjQ2MzMgMjUuOTMg'@;
put 'MTYuNTlMMTYuMjcgMjYuMjVMMTEgMjAuOTRDMTAuNzY2NSAyMC42ODMyIDEwLjY0MDEgMjAuMzQ2OSAxMC42NDY1IDE5Ljk5OTlDMTAuNjUyOSAxOS42NTI5IDEwLjc5MTggMTkuMzIxNSAxMS4wMzQ2IDE5LjA3MzVDMTEuMjc3NSAxOC44MjU1IDExLjYwNTkgMTguNjc5OCAxMS45NTI3IDE4'@;
put 'LjY2NjFDMTIuMjk5NSAxOC42NTI1IDEyLjYzODQgMTguNzcxOSAxMi45IDE5TDE2LjI4IDIyLjM4TDIzLjYyMzMgMTUuMDM2N0gyMi4zMzk1QzIxLjE1NzcgMTUuMDYwNCAyMC4wMjMzIDE0LjQ0ODkgMTkuNDIwNiAxMy4zODkzQzE4LjgyMDQgMTIuMzM0MiAxOC44NzAzIDExLjA0MjMgMTku'@;
put 'NTM2MiAxMC4wMzg3TDIxLjk1OTQgNloiLz48cGF0aCBkPSJNMTAgMTBDMTAuMjY1MiAxMCAxMC41MTk2IDkuODk0NjQgMTAuNzA3MSA5LjcwNzExQzEwLjg5NDcgOS41MTk1NyAxMSA5LjI2NTIyIDExIDlWM0MxMSAyLjczNDc4IDEwLjg5NDcgMi40ODA0MyAxMC43MDcxIDIuMjkyODlDMTAu'@;
put 'NTE5NiAyLjEwNTM2IDEwLjI2NTIgMiAxMCAyQzkuNzM0OCAyIDkuNDgwNDQgMi4xMDUzNiA5LjI5MjkxIDIuMjkyODlDOS4xMDUzNyAyLjQ4MDQzIDkuMDAwMDEgMi43MzQ3OCA5LjAwMDAxIDNWOUM5LjAwMDAxIDkuMjY1MjIgOS4xMDUzNyA5LjUxOTU3IDkuMjkyOTEgOS43MDcxMUM5LjQ4'@;
put 'MDQ0IDkuODk0NjQgOS43MzQ4IDEwIDEwIDEwWiIvPicsc29saWRCYWRnZWQ6JzxwYXRoIGQ9Ik0xMCAxMEMxMC4yNjUyIDEwIDEwLjUxOTYgOS44OTQ2NCAxMC43MDcxIDkuNzA3MTFDMTAuODk0NyA5LjUxOTU3IDExIDkuMjY1MjIgMTEgOVYzQzExIDIuNzM0NzggMTAuODk0NyAyLjQ4MDQz'@;
put 'IDEwLjcwNzEgMi4yOTI4OUMxMC41MTk2IDIuMTA1MzYgMTAuMjY1MiAyIDEwIDJDOS43MzQ4IDIgOS40ODA0NCAyLjEwNTM2IDkuMjkyOTEgMi4yOTI4OUM5LjEwNTM3IDIuNDgwNDMgOS4wMDAwMSAyLjczNDc4IDkuMDAwMDEgM1Y5QzkuMDAwMDEgOS4yNjUyMiA5LjEwNTM3IDkuNTE5NTcg'@;
put 'OS4yOTI5MSA5LjcwNzExQzkuNDgwNDQgOS44OTQ2NCA5LjczNDggMTAgMTAgMTBaIi8+PHBhdGggZD0iTTMwIDEzLjVDMjguMDEwOSAxMy41IDI2LjEwMzIgMTIuNzA5OCAyNC42OTY3IDExLjMwMzNDMjMuMjkwMiA5Ljg5Njc4IDIyLjUgNy45ODkxMiAyMi41IDZIMTIuMlY5QzEyLjIgOS41'@;
put 'ODM0OCAxMS45NjgyIDEwLjE0MzEgMTEuNTU1NiAxMC41NTU2QzExLjE0MzEgMTAuOTY4MiAxMC41ODM1IDExLjIgMTAgMTEuMkM5LjQxNjU0IDExLjIgOC44NTY5NiAxMC45NjgyIDguNDQ0MzggMTAuNTU1NkM4LjAzMTggMTAuMTQzMSA3LjgwMDAxIDkuNTgzNDggNy44MDAwMSA5VjZIMy44'@;
put 'MDAwMUMzLjU2MjA0IDUuOTk3MjkgMy4zMjU5MyA2LjA0MjMzIDMuMTA1NjcgNi4xMzI0NkMyLjg4NTQgNi4yMjI1OSAyLjY4NTQ1IDYuMzU1OTcgMi41MTc2MyA2LjUyNDczQzIuMzQ5ODEgNi42OTM0OCAyLjIxNzUzIDYuODk0MTcgMi4xMjg2MyA3LjExNDkzQzIuMDM5NzIgNy4zMzU2OSAx'@;
put 'Ljk5NTk5IDcuNTcyMDQgMi4wMDAwMSA3LjgxVjMwLjE5QzEuOTk2MDQgMzAuNDIzOCAyLjAzODE2IDMwLjY1NiAyLjEyMzk2IDMwLjg3MzVDMi4yMDk3NiAzMS4wOTEgMi4zMzc1NyAzMS4yODk0IDIuNTAwMDcgMzEuNDU3NUMyLjY2MjU4IDMxLjYyNTYgMi44NTY2MSAzMS43NiAzLjA3MTA4'@;
put 'IDMxLjg1MzFDMy4yODU1NSAzMS45NDYyIDMuNTE2MjUgMzEuOTk2MSAzLjc1MDAxIDMySDMyLjI1QzMyLjQ4MzggMzEuOTk2MSAzMi43MTQ1IDMxLjk0NjIgMzIuOTI4OSAzMS44NTMxQzMzLjE0MzQgMzEuNzYgMzMuMzM3NCAzMS42MjU2IDMzLjUgMzEuNDU3NUMzMy42NjI1IDMxLjI4OTQg'@;
put 'MzMuNzkwMyAzMS4wOTEgMzMuODc2MSAzMC44NzM1QzMzLjk2MTkgMzAuNjU2IDM0LjAwNCAzMC40MjM4IDM0IDMwLjE5VjEyLjM0QzMyLjgwNDEgMTMuMDk5MSAzMS40MTY1IDEzLjUwMTUgMzAgMTMuNVpNMjUuOTQgMTYuNThMMTYuMjcgMjYuMjVMMTEgMjAuOTRDMTAuNzY2NSAyMC42ODMy'@;
put 'IDEwLjY0MDEgMjAuMzQ2OSAxMC42NDY1IDE5Ljk5OTlDMTAuNjUyOSAxOS42NTI5IDEwLjc5MTggMTkuMzIxNSAxMS4wMzQ2IDE5LjA3MzVDMTEuMjc3NSAxOC44MjU1IDExLjYwNTkgMTguNjc5OCAxMS45NTI3IDE4LjY2NjFDMTIuMjk5NSAxOC42NTI1IDEyLjYzODQgMTguNzcxOSAxMi45'@;
put 'IDE5TDE2LjI4IDIyLjM4TDI0IDE0LjY2QzI0LjEyNjcgMTQuNTMzMyAyNC4yNzcyIDE0LjQzMjcgMjQuNDQyOCAxNC4zNjQyQzI0LjYwODMgMTQuMjk1NiAyNC43ODU4IDE0LjI2MDMgMjQuOTY1IDE0LjI2MDNDMjUuMTQ0MiAxNC4yNjAzIDI1LjMyMTcgMTQuMjk1NiAyNS40ODczIDE0LjM2'@;
put 'NDJDMjUuNjUyOCAxNC40MzI3IDI1LjgwMzMgMTQuNTMzMyAyNS45MyAxNC42NkMyNi4wNTY3IDE0Ljc4NjcgMjYuMTU3MyAxNC45MzcyIDI2LjIyNTggMTUuMTAyN0MyNi4yOTQ0IDE1LjI2ODMgMjYuMzI5NyAxNS40NDU4IDI2LjMyOTcgMTUuNjI1QzI2LjMyOTcgMTUuODA0MiAyNi4yOTQ0'@;
put 'IDE1Ljk4MTcgMjYuMjI1OCAxNi4xNDczQzI2LjE1NzMgMTYuMzEyOCAyNi4wNTY3IDE2LjQ2MzMgMjUuOTMgMTYuNTlMMjUuOTQgMTYuNThaIi8+PHBhdGggZD0iTTMwIDExQzMyLjc2MTQgMTEgMzUgOC43NjE0MiAzNSA2QzM1IDMuMjM4NTggMzIuNzYxNCAxIDMwIDFDMjcuMjM4NiAxIDI1'@;
put 'IDMuMjM4NTggMjUgNkMyNSA4Ljc2MTQyIDI3LjIzODYgMTEgMzAgMTFaIi8+J31dLE9PZT1bImNhbGVuZGFyIix7b3V0bGluZTonPHBhdGggZD0iTTIyIDIwSDIwVjIySDIyVjIwWk0yMCAyNkgyMlYyNEgyMFYyNlpNMjggMjRIMjZWMjZIMjhWMjRaTTI4IDIwSDI2VjIySDI4VjIwWk0yNyAx'@;
put 'MkMyNy41NSAxMiAyOCAxMS41NSAyOCAxMVY1QzI4IDQuNDUgMjcuNTUgNCAyNyA0QzI2LjQ1IDQgMjYgNC40NSAyNiA1VjExQzI2IDExLjU1IDI2LjQ1IDEyIDI3IDEyWk0yMiAxNkgyMFYxOEgyMlYxNlpNMjggMTZIMjZWMThIMjhWMTZaTTI0IDhIMTJWMTBIMjRWOFpNMTAgMTZIOFYxOEgx'@;
put 'MFYxNlpNMTAgMjBIOFYyMkgxMFYyMFpNMTAgMjRIOFYyNkgxMFYyNFpNMzMuNSA4LjU0QzMzLjE3IDguMiAzMi43MiA4LjAxIDMyLjI1IDhIMzBWMTBIMzJWMzBINFYxMEg2VjhIMy43NUMzLjI4IDggMi44MyA4LjIgMi41IDguNTRDMi4xNyA4Ljg4IDIgOS4zNCAyIDkuODFWMzAuMTlDMiAz'@;
put 'MC42NiAyLjE3IDMxLjEyIDIuNSAzMS40NkMyLjgzIDMxLjggMy4yOCAzMS45OSAzLjc1IDMySDMyLjI1QzMyLjcyIDMyIDMzLjE3IDMxLjggMzMuNSAzMS40NkMzMy44MyAzMS4xMiAzNC4wMSAzMC42NiAzNCAzMC4xOVY5LjgxQzM0IDkuMzQgMzMuODMgOC44OCAzMy41IDguNTRaTTE0IDI2'@;
put 'SDE2VjI0SDE0VjI2Wk0xNiAyMEgxNFYyMkgxNlYyMFpNMTYgMTZIMTRWMThIMTZWMTZaTTkgMTJDOS41NSAxMiAxMCAxMS41NSAxMCAxMVY1QzEwIDQuNDUgOS41NSA0IDkgNEM4LjQ1IDQgOCA0LjQ1IDggNVYxMUM4IDExLjU1IDguNDUgMTIgOSAxMloiLz4nLG91dGxpbmVBbGVydGVkOic8'@;
put 'cGF0aCBkPSJNMjYuOTAzOSAxLjY0NjIxTDIxLjIyMjIgMTEuMTE1OUMyMC45NTI2IDExLjQ5ODQgMjAuOTI4MSAxMS45OTQ5IDIxLjE1ODggMTIuNDAwNUMyMS4zODk2IDEyLjgwNiAyMS44MzYzIDEzLjA1MTkgMjIuMzE0OCAxMy4wMzY3SDMzLjY4ODFDMzQuMTY2NiAxMy4wNTE5IDM0LjYx'@;
put 'MzQgMTIuODA2IDM0Ljg0NDEgMTIuNDAwNUMzNS4wNzQ4IDExLjk5NDkgMzUuMDUwMyAxMS40OTg0IDM0Ljc4MDggMTEuMTE1OUwyOS4wOTkxIDEuNjQ2MjFDMjguODcxMSAxLjI2OTEzIDI4LjQ1MzIgMS4wMzczNSAyOC4wMDE1IDEuMDM3MzVDMjcuNTQ5NyAxLjAzNzM1IDI3LjEzMTkgMS4y'@;
put 'NjkxMyAyNi45MDM5IDEuNjQ2MjFaIi8+PHBhdGggZD0iTTMyIDE1LjAzNjdIMzMuNjYzN0MzMy43NzYzIDE1LjAzODkgMzMuODg4NiAxNS4wMzU0IDM0IDE1LjAyNjNWMzAuMTlDMzQuMDEgMzAuNjYgMzMuODMgMzEuMTIgMzMuNSAzMS40NkMzMy4xNyAzMS44IDMyLjcyIDMyIDMyLjI1IDMy'@;
put 'SDMuNzVDMy4yOCAzMS45OSAyLjgzIDMxLjggMi41IDMxLjQ2QzIuMTcgMzEuMTIgMiAzMC42NiAyIDMwLjE5VjkuODFDMiA5LjM0IDIuMTcgOC44OCAyLjUgOC41NEMyLjgzIDguMiAzLjI4IDggMy43NSA4SDZWMTBINFYzMEgzMlYxNS4wMzY3WiIvPjxwYXRoIGQ9Ik0yMC43NTk0IDhMMTku'@;
put 'NTU5NCAxMEgxMlY4SDIwLjc1OTRaIi8+PHBhdGggZD0iTTIwIDIwSDIyVjIySDIwVjIwWiIvPjxwYXRoIGQ9Ik0yMiAyNkgyMFYyNEgyMlYyNloiLz48cGF0aCBkPSJNMjYgMjZWMjRIMjhWMjZIMjZaIi8+PHBhdGggZD0iTTI2IDIyVjIwSDI4VjIySDI2WiIvPjxwYXRoIGQ9Ik0yMCAxNkgy'@;
put 'MlYxOEgyMFYxNloiLz48cGF0aCBkPSJNMjYgMThWMTZIMjhWMThIMjZaIi8+PHBhdGggZD0iTTggMTZIMTBWMThIOFYxNloiLz48cGF0aCBkPSJNOCAyMEgxMFYyMkg4VjIwWiIvPjxwYXRoIGQ9Ik04IDI0SDEwVjI2SDhWMjRaIi8+PHBhdGggZD0iTTE2IDI2SDE0VjI0SDE2VjI2WiIvPjxw'@;
put 'YXRoIGQ9Ik0xNCAyMEgxNlYyMkgxNFYyMFoiLz48cGF0aCBkPSJNMTQgMTZIMTZWMThIMTRWMTZaIi8+PHBhdGggZD0iTTEwIDExQzEwIDExLjU1IDkuNTUgMTIgOSAxMkM4LjQ1IDEyIDggMTEuNTUgOCAxMVY1QzggNC40NSA4LjQ1IDQgOSA0QzkuNTUgNCAxMCA0LjQ1IDEwIDVWMTFaIi8+'@;
put 'JyxvdXRsaW5lQmFkZ2VkOic8cGF0aCBkPSJNMzAgMTFDMzIuNzYxNCAxMSAzNSA4Ljc2MTQyIDM1IDZDMzUgMy4yMzg1OCAzMi43NjE0IDEgMzAgMUMyNy4yMzg2IDEgMjUgMy4yMzg1OCAyNSA2QzI1IDguNzYxNDIgMjcuMjM4NiAxMSAzMCAxMVoiLz48cGF0aCBkPSJNMjMuMjg5OSA4QzIz'@;
put 'LjQ1OTQgOC41Njk2MyAyMy42OTk1IDkuMTA4ODcgMjQgOS42MDc1OVYxMEgxMlY4SDIzLjI4OTlaIi8+PHBhdGggZD0iTTM0IDExLjc0NTNDMzMuMzk2IDEyLjE2NjYgMzIuNzIyNCAxMi40OTUxIDMyIDEyLjcxMDFWMzBINFYxMEg2VjhIMy43NUMzLjI4IDggMi44MyA4LjIgMi41IDguNTRD'@;
put 'Mi4xNyA4Ljg4IDIgOS4zNCAyIDkuODFWMzAuMTlDMiAzMC42NiAyLjE3IDMxLjEyIDIuNSAzMS40NkMyLjgzIDMxLjggMy4yOCAzMS45OSAzLjc1IDMySDMyLjI1QzMyLjcyIDMyIDMzLjE3IDMxLjggMzMuNSAzMS40NkMzMy44MyAzMS4xMiAzNC4wMSAzMC42NiAzNCAzMC4xOVYxMS43NDUz'@;
put 'WiIvPjxwYXRoIGQ9Ik0yMCAyMEgyMlYyMkgyMFYyMFoiLz48cGF0aCBkPSJNMjIgMjZIMjBWMjRIMjJWMjZaIi8+PHBhdGggZD0iTTI2IDI2VjI0SDI4VjI2SDI2WiIvPjxwYXRoIGQ9Ik0yNiAyMlYyMEgyOFYyMkgyNloiLz48cGF0aCBkPSJNMjAgMTZIMjJWMThIMjBWMTZaIi8+PHBhdGgg'@;
put 'ZD0iTTI2IDE4VjE2SDI4VjE4SDI2WiIvPjxwYXRoIGQ9Ik04IDE2SDEwVjE4SDhWMTZaIi8+PHBhdGggZD0iTTggMjBIMTBWMjJIOFYyMFoiLz48cGF0aCBkPSJNOCAyNEgxMFYyNkg4VjI0WiIvPjxwYXRoIGQ9Ik0xNiAyNkgxNFYyNEgxNlYyNloiLz48cGF0aCBkPSJNMTQgMjBIMTZWMjJI'@;
put 'MTRWMjBaIi8+PHBhdGggZD0iTTE0IDE2SDE2VjE4SDE0VjE2WiIvPjxwYXRoIGQ9Ik0xMCAxMUMxMCAxMS41NSA5LjU1IDEyIDkgMTJDOC40NSAxMiA4IDExLjU1IDggMTFWNUM4IDQuNDUgOC40NSA0IDkgNEM5LjU1IDQgMTAgNC40NSAxMCA1VjExWiIvPicsc29saWQ6JzxwYXRoIGQ9Ik0y'@;
put 'NyAxMkMyNy41NSAxMiAyOCAxMS41NSAyOCAxMVY1QzI4IDQuNDUgMjcuNTUgNCAyNyA0QzI2LjQ1IDQgMjYgNC40NSAyNiA1VjExQzI2IDExLjU1IDI2LjQ1IDEyIDI3IDEyWk0zMy41IDguNTRDMzMuMTcgOC4yIDMyLjcyIDguMDEgMzIuMjUgOEgyOS4yVjExQzI5LjIgMTIuMjEgMjguMjEg'@;
put 'MTMuMiAyNyAxMy4yQzI1Ljc5IDEzLjIgMjQuOCAxMi4yMSAyNC44IDExVjhIMTEuMlYxMUMxMS4yIDEyLjIxIDEwLjIxIDEzLjIgOSAxMy4yQzcuNzkgMTMuMiA2LjggMTIuMjEgNi44IDExVjhIMy43NUMzLjI4IDggMi44MyA4LjIgMi41IDguNTRDMi4xNyA4Ljg4IDIgOS4zNCAyIDkuODFW'@;
put 'MzAuMTlDMiAzMC42NiAyLjE3IDMxLjEyIDIuNSAzMS40NkMyLjgzIDMxLjggMy4yOCAzMS45OSAzLjc1IDMySDMyLjI1QzMyLjcyIDMyIDMzLjE3IDMxLjggMzMuNSAzMS40NkMzMy44MyAzMS4xMiAzNC4wMSAzMC42NiAzNCAzMC4xOVY5LjgxQzM0IDkuMzQgMzMuODMgOC44OCAzMy41IDgu'@;
put 'NTRaTTEwLjEgMjYuMUg3LjlWMjMuOUgxMC4xVjI2LjFaTTEwLjEgMjIuMUg3LjlWMTkuOUgxMC4xVjIyLjFaTTEwLjEgMTguMUg3LjlWMTUuOUgxMC4xVjE4LjFaTTE2LjEgMjYuMUgxMy45VjIzLjlIMTYuMVYyNi4xWk0xNi4xIDIyLjFIMTMuOVYxOS45SDE2LjFWMjIuMVpNMTYuMSAxOC4x'@;
put 'SDEzLjlWMTUuOUgxNi4xVjE4LjFaTTIyLjEgMjYuMUgxOS45VjIzLjlIMjIuMVYyNi4xWk0yMi4xIDIyLjFIMTkuOVYxOS45SDIyLjFWMjIuMVpNMjIuMSAxOC4xSDE5LjlWMTUuOUgyMi4xVjE4LjFaTTI4LjEgMjYuMUgyNS45VjIzLjlIMjguMVYyNi4xWk0yOC4xIDIyLjFIMjUuOVYxOS45'@;
put 'SDI4LjFWMjIuMVpNMjguMSAxOC4xSDI1LjlWMTUuOUgyOC4xVjE4LjFaTTkgMTJDOS41NSAxMiAxMCAxMS41NSAxMCAxMVY1QzEwIDQuNDUgOS41NSA0IDkgNEM4LjQ1IDQgOCA0LjQ1IDggNVYxMUM4IDExLjU1IDguNDUgMTIgOSAxMloiLz4nLHNvbGlkQWxlcnRlZDonPHBhdGggZD0iTTI2'@;
put 'LjkwMzkgMS42NDYyMUwyMS4yMjIyIDExLjExNTlDMjAuOTUyNiAxMS40OTg0IDIwLjkyODEgMTEuOTk0OSAyMS4xNTg4IDEyLjQwMDVDMjEuMzg5NiAxMi44MDYgMjEuODM2MyAxMy4wNTE5IDIyLjMxNDggMTMuMDM2N0gzMy42ODgxQzM0LjE2NjYgMTMuMDUxOSAzNC42MTM0IDEyLjgwNiAz'@;
put 'NC44NDQxIDEyLjQwMDVDMzUuMDc0OCAxMS45OTQ5IDM1LjA1MDMgMTEuNDk4NCAzNC43ODA4IDExLjExNTlMMjkuMDk5MSAxLjY0NjIxQzI4Ljg3MTEgMS4yNjkxMyAyOC40NTMyIDEuMDM3MzUgMjguMDAxNSAxLjAzNzM1QzI3LjU0OTcgMS4wMzczNSAyNy4xMzE5IDEuMjY5MTMgMjYuOTAz'@;
put 'OSAxLjY0NjIxWiIvPjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNMjAuNzU5NCA4TDE5LjUzNjIgMTAuMDM4N0MxOC44NzAzIDExLjA0MjMgMTguODIwNCAxMi4zMzQyIDE5LjQyMDYgMTMuMzg5M0MyMC4wMjMzIDE0LjQ0ODkgMjEuMTU3NyAxNS4w'@;
put 'NjA0IDIyLjMzOTUgMTUuMDM2N0gzMy42NjM3QzMzLjc3NjMgMTUuMDM4OSAzMy44ODg2IDE1LjAzNTQgMzQgMTUuMDI2M1YzMC4xOUMzNC4wMSAzMC42NiAzMy44MyAzMS4xMiAzMy41IDMxLjQ2QzMzLjE3IDMxLjggMzIuNzIgMzIgMzIuMjUgMzJIMy43NUMzLjI4IDMxLjk5IDIuODMgMzEu'@;
put 'OCAyLjUgMzEuNDZDMi4xNyAzMS4xMiAyIDMwLjY2IDIgMzAuMTlWOS44MUMyIDkuMzQgMi4xNyA4Ljg4IDIuNSA4LjU0QzIuODMgOC4yIDMuMjggOCAzLjc1IDhINi44VjExQzYuOCAxMi4yMSA3Ljc5IDEzLjIgOSAxMy4yQzEwLjIxIDEzLjIgMTEuMiAxMi4yMSAxMS4yIDExVjhIMjAuNzU5'@;
put 'NFpNNy45IDIzLjlWMjYuMUgxMC4xVjIzLjlINy45Wk03LjkgMTkuOVYyMi4xSDEwLjFWMTkuOUg3LjlaTTcuOSAxNS45VjE4LjFIMTAuMVYxNS45SDcuOVpNMTMuOSAyNi4xSDE2LjFWMjMuOUgxMy45VjI2LjFaTTEzLjkgMjIuMUgxNi4xVjE5LjlIMTMuOVYyMi4xWk0xMy45IDE4LjFIMTYu'@;
put 'MVYxNS45SDEzLjlWMTguMVpNMTkuOSAyNi4xSDIyLjFWMjMuOUgxOS45VjI2LjFaTTE5LjkgMjIuMUgyMi4xVjE5LjlIMTkuOVYyMi4xWk0xOS45IDE4LjFIMjIuMVYxNS45SDE5LjlWMTguMVpNMjUuOSAyMy45VjI2LjFIMjguMVYyMy45SDI1LjlaTTI1LjkgMTkuOVYyMi4xSDI4LjFWMTku'@;
put 'OUgyNS45Wk0yNS45IDE1LjlWMTguMUgyOC4xVjE1LjlIMjUuOVoiLz48cGF0aCBkPSJNMTAgMTFDMTAgMTEuNTUgOS41NSAxMiA5IDEyQzguNDUgMTIgOCAxMS41NSA4IDExVjVDOCA0LjQ1IDguNDUgNCA5IDRDOS41NSA0IDEwIDQuNDUgMTAgNVYxMVoiLz4nLHNvbGlkQmFkZ2VkOic8cGF0'@;
put 'aCBkPSJNMzAgMTFDMzIuNzYxNCAxMSAzNSA4Ljc2MTQyIDM1IDZDMzUgMy4yMzg1OCAzMi43NjE0IDEgMzAgMUMyNy4yMzg2IDEgMjUgMy4yMzg1OCAyNSA2QzI1IDguNzYxNDIgMjcuMjM4NiAxMSAzMCAxMVoiLz48cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9k'@;
put 'ZCIgZD0iTTM0IDExLjc0NTNDMzIuODY2MiAxMi41MzYyIDMxLjQ4NzIgMTMgMzAgMTNDMjkuNDA2MyAxMyAyOC44Mjk5IDEyLjkyNjEgMjguMjc5NCAxMi43ODdDMjcuOTE4MyAxMy4wNDY3IDI3LjQ3NjIgMTMuMiAyNyAxMy4yQzI1Ljc5IDEzLjIgMjQuOCAxMi4yMSAyNC44IDExVjEwLjY4'@;
put 'NjJDMjQuMTEyNiA5LjkyMzkzIDIzLjU5MDQgOS4wMDk3IDIzLjI4OTkgOEgxMS4yVjExQzExLjIgMTIuMjEgMTAuMjEgMTMuMiA5IDEzLjJDNy43OSAxMy4yIDYuOCAxMi4yMSA2LjggMTFWOEgzLjc1QzMuMjggOCAyLjgzIDguMiAyLjUgOC41NEMyLjE3IDguODggMiA5LjM0IDIgOS44MVYz'@;
put 'MC4xOUMyIDMwLjY2IDIuMTcgMzEuMTIgMi41IDMxLjQ2QzIuODMgMzEuOCAzLjI4IDMxLjk5IDMuNzUgMzJIMzIuMjVDMzIuNzIgMzIgMzMuMTcgMzEuOCAzMy41IDMxLjQ2QzMzLjgzIDMxLjEyIDM0LjAxIDMwLjY2IDM0IDMwLjE5VjExLjc0NTNaTTcuOSAyMy45VjI2LjFIMTAuMVYyMy45'@;
put 'SDcuOVpNNy45IDE5LjlWMjIuMUgxMC4xVjE5LjlINy45Wk03LjkgMTUuOVYxOC4xSDEwLjFWMTUuOUg3LjlaTTEzLjkgMjYuMUgxNi4xVjIzLjlIMTMuOVYyNi4xWk0xMy45IDIyLjFIMTYuMVYxOS45SDEzLjlWMjIuMVpNMTMuOSAxOC4xSDE2LjFWMTUuOUgxMy45VjE4LjFaTTE5LjkgMjYu'@;
put 'MUgyMi4xVjIzLjlIMTkuOVYyNi4xWk0xOS45IDIyLjFIMjIuMVYxOS45SDE5LjlWMjIuMVpNMTkuOSAxOC4xSDIyLjFWMTUuOUgxOS45VjE4LjFaTTI1LjkgMjMuOVYyNi4xSDI4LjFWMjMuOUgyNS45Wk0yNS45IDE5LjlWMjIuMUgyOC4xVjE5LjlIMjUuOVpNMjUuOSAxNS45VjE4LjFIMjgu'@;
put 'MVYxNS45SDI1LjlaIi8+PHBhdGggZD0iTTEwIDExQzEwIDExLjU1IDkuNTUgMTIgOSAxMkM4LjQ1IDEyIDggMTEuNTUgOCAxMVY1QzggNC40NSA4LjQ1IDQgOSA0QzkuNTUgNCAxMCA0LjQ1IDEwIDVWMTFaIi8+J31dLFBPZT1bImZvbGRlci1vcGVuIix7b3V0bGluZTonPHBhdGggZD0iTTMz'@;
put 'LjI2IDEzQzMzLjg0IDEyLjk5IDM0LjM4IDEzLjI2IDM0LjcxIDEzLjc0QzM1IDE0LjE2IDM1LjA4IDE0LjY5IDM0LjkyIDE1LjE4TDMwLjczIDMwLjI4QzMwLjYgMzAuNzIgMzAuMTkgMzEuMDIgMjkuNzMgMzFINC40MUMzLjY2IDMxLjAyIDMuMDMgMzAuNDQgMyAyOS42OVY3QzMgNS45IDMu'@;
put 'OSA1IDUgNUgxMS40OUMxMi4xMyA1IDEyLjczIDUuMyAxMy4xMSA1LjgyTDE1LjQyIDlIMjkuMzlDMzAuNDkgOSAzMS4zOSA5LjkgMzEuMzkgMTFIMTQuOTFDMTQuNTkgMTEgMTQuMjkgMTAuODUgMTQuMSAxMC41OUwxMS40OSA3SDVWMjVMNy45MiAxNC42NkM3LjkyIDE0LjY2IDcuOTIgMTQu'@;
put 'NTcgNy45MiAxNC41MkM4LjMyIDEzLjYzIDkuMTkgMTMuMDQgMTAuMTcgMTNIMzMuMjZaTTUuOSAyOUgyOC45NEwzMi44OCAxNC45NUgxMC4xNkMxMC4wMSAxNC45OCA5Ljg3IDE1LjA3IDkuNzggMTUuMTlMNS45IDI5WiIvPicsb3V0bGluZUFsZXJ0ZWQ6JzxwYXRoIGQ9Ik0yNy45MDQxIDEu'@;
put 'NjQ2MjFMMjIuMjIyNCAxMS4xMTU5QzIxLjk1MjkgMTEuNDk4NCAyMS45Mjg0IDExLjk5NDkgMjIuMTU5MSAxMi40MDA1QzIyLjM4OTggMTIuODA2IDIyLjgzNjYgMTMuMDUxOSAyMy4zMTUgMTMuMDM2N0gzNC42ODg0QzM1LjE2NjkgMTMuMDUxOSAzNS42MTM2IDEyLjgwNiAzNS44NDQzIDEy'@;
put 'LjQwMDVDMzYuMDc1IDExLjk5NDkgMzYuMDUwNiAxMS40OTg0IDM1Ljc4MSAxMS4xMTU5TDMwLjA5OTMgMS42NDYyMUMyOS44NzEzIDEuMjY5MTMgMjkuNDUzNSAxLjAzNzM1IDI5LjAwMTcgMS4wMzczNUMyOC41NSAxLjAzNzM1IDI4LjEzMjEgMS4yNjkxMyAyNy45MDQxIDEuNjQ2MjFaIi8+'@;
put 'PHBhdGggZD0iTTIwLjEwNTggMTFIMTQuOTEwMkMxNC41OTAyIDExIDE0LjI5MDIgMTAuODUgMTQuMTAwMiAxMC41OUwxMS40OTAyIDdINS4wMDAyNFYyNUw3LjkyMDI0IDE0LjY2VjE0LjUyQzguMzIwMjQgMTMuNjMgOS4xOTAyNCAxMy4wNCAxMC4xNzAyIDEzSDIwLjIzMjdDMjAuMjg2MSAx'@;
put 'My4xMzI2IDIwLjM0ODggMTMuMjYyNyAyMC40MjA4IDEzLjM4OTNDMjAuODgxNSAxNC4xOTkxIDIxLjY1MjcgMTQuNzQ3MiAyMi41MTgzIDE0Ljk1SDEwLjE2MDJDMTAuMDEwMiAxNC45OCA5Ljg3MDI0IDE1LjA3IDkuNzgwMjQgMTUuMTlMNS45MDAyNCAyOUgyOC45NDAyTDMyLjg1NTkgMTUu'@;
put 'MDM2N0gzNC42NjM5QzM0Ljc2MzYgMTUuMDM4NyAzNC44NjMgMTUuMDM2MiAzNC45NjE3IDE1LjAyOTJDMzQuOTUwMyAxNS4wNzk4IDM0LjkzNjUgMTUuMTMwMSAzNC45MjAyIDE1LjE4TDMwLjczMDIgMzAuMjhDMzAuNjAwMiAzMC43MiAzMC4xOTAyIDMxLjAyIDI5LjczMDIgMzFINC40MTAy'@;
put 'NEMzLjY2MDI0IDMxLjAyIDMuMDMwMjQgMzAuNDQgMy4wMDAyNCAyOS42OVY3QzMuMDAwMjQgNS45IDMuOTAwMjQgNSA1LjAwMDI0IDVIMTEuNDkwMkMxMi4xMzAyIDUgMTIuNzMwMiA1LjMgMTMuMTEwMiA1LjgyTDE1LjQyMDIgOUgyMS4xNTk3TDIwLjUzNjQgMTAuMDM4N0MyMC4zMzc4IDEw'@;
put 'LjMzODEgMjAuMTkzOSAxMC42NjMyIDIwLjEwNTggMTFaIi8+JyxvdXRsaW5lQmFkZ2VkOic8cGF0aCBkPSJNMzEgMTFDMzMuNzYxNCAxMSAzNiA4Ljc2MTQyIDM2IDZDMzYgMy4yMzg1OCAzMy43NjE0IDEgMzEgMUMyOC4yMzg2IDEgMjYgMy4yMzg1OCAyNiA2QzI2IDguNzYxNDIgMjguMjM4'@;
put 'NiAxMSAzMSAxMVoiLz48cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZD0iTTI2LjEwMSAxMUgxNC45MUMxNC41OSAxMSAxNC4yOSAxMC44NSAxNC4xIDEwLjU5TDExLjQ5IDdINVYyNUw3LjkyIDE0LjY2VjE0LjUyQzguMzIgMTMuNjMgOS4xOSAxMy4wNCAx'@;
put 'MC4xNyAxM0gzMy4yNkMzMy44NCAxMi45OSAzNC4zOCAxMy4yNiAzNC43MSAxMy43NEMzNSAxNC4xNiAzNS4wOCAxNC42OSAzNC45MiAxNS4xOEwzMC43MyAzMC4yOEMzMC42IDMwLjcyIDMwLjE5IDMxLjAyIDI5LjczIDMxSDQuNDFDMy42NiAzMS4wMiAzLjAzIDMwLjQ0IDMgMjkuNjlWN0Mz'@;
put 'IDUuOSAzLjkgNSA1IDVIMTEuNDlDMTIuMTMgNSAxMi43MyA1LjMgMTMuMTEgNS44MkwxNS40MiA5SDI0LjY3MzZDMjUuMDI5NyA5Ljc0OTYgMjUuNTE1MSAxMC40MjU5IDI2LjEwMSAxMVpNMjguOTQgMjlINS45TDkuNzggMTUuMTlDOS44NyAxNS4wNyAxMC4wMSAxNC45OCAxMC4xNiAxNC45'@;
put 'NUgzMi44OEwyOC45NCAyOVoiLz4nLHNvbGlkOic8cGF0aCBkPSJNMzQuNzA1OCAxMy43NEMzNC4zNzQ0IDEzLjI2NDMgMzMuODIyMyAxMi45ODYgMzMuMjM3OSAxM0gxMC4yNTgzQzkuMjY5NTIgMTMuMDQxNCA4LjM4ODU4IDEzLjYyOTMgNy45ODA2IDE0LjUyQzcuOTc3MjkgMTQuNTY2NiA3'@;
put 'Ljk3NzI5IDE0LjYxMzQgNy45ODA2IDE0LjY2TDUuMDI0NjMgMjVWNy4wMDAwMUgxMS41OTQ2TDE0LjIzNjcgMTAuNTlDMTQuNDI3OSAxMC44NDg0IDE0LjczMjcgMTEuMDAwOCAxNS4wNTY3IDExSDMxLjM0NDlDMzEuMzQ0OSA5Ljg5NTQ0IDMwLjQzODQgOS4wMDAwMSAyOS4zMjAzIDkuMDAw'@;
put 'MDFIMTUuNTczTDEzLjIzNDUgNS44MjAwMUMxMi44NTIyIDUuMzAzMTggMTIuMjQyNiA0Ljk5ODM1IDExLjU5NDYgNS4wMDAwMUg1LjAyNDYzQzMuOTA2NDYgNS4wMDAwMSAzIDUuODk1NDQgMyA3LjAwMDAxVjI5LjY5QzMuMDMyODkgMzAuNDM4OSAzLjY2ODkxIDMxLjAyMjYgNC40MjczNyAz'@;
put 'MUgyOS42NjQ0QzMwLjEyOTMgMzEuMDE4MyAzMC41NDY5IDMwLjcyMTMgMzAuNjc2OCAzMC4yOEwzNC45MTg0IDE1LjE4QzM1LjA3ODggMTQuNjkzNSAzNS4wMDAxIDE0LjE2MSAzNC43MDU4IDEzLjc0WiIvPicsc29saWRBbGVydGVkOic8cGF0aCBkPSJNMjcuOTA0MSAxLjY0NjIxTDIyLjIy'@;
put 'MjQgMTEuMTE1OUMyMS45NTI5IDExLjQ5ODQgMjEuOTI4NCAxMS45OTQ5IDIyLjE1OTEgMTIuNDAwNUMyMi4zODk4IDEyLjgwNiAyMi44MzY2IDEzLjA1MTkgMjMuMzE1IDEzLjAzNjdIMzQuNjg4NEMzNS4xNjY5IDEzLjA1MTkgMzUuNjEzNiAxMi44MDYgMzUuODQ0MyAxMi40MDA1QzM2LjA3'@;
put 'NSAxMS45OTQ5IDM2LjA1MDYgMTEuNDk4NCAzNS43ODEgMTEuMTE1OUwzMC4wOTkzIDEuNjQ2MjFDMjkuODcxMyAxLjI2OTEzIDI5LjQ1MzUgMS4wMzczNSAyOS4wMDE3IDEuMDM3MzVDMjguNTUgMS4wMzczNSAyOC4xMzIxIDEuMjY5MTMgMjcuOTA0MSAxLjY0NjIxWiIvPjxwYXRoIGQ9Ik0y'@;
put 'MC4yMzI1IDEzQzIwLjI4NTggMTMuMTMyNiAyMC4zNDg1IDEzLjI2MjcgMjAuNDIwNiAxMy4zODkzQzIxLjAyMzMgMTQuNDQ4OSAyMi4xNTc3IDE1LjA2MDQgMjMuMzM5NSAxNS4wMzY3SDM0LjY2MzdDMzQuNzYyOSAxNS4wMzg3IDM0Ljg2MTggMTUuMDM2MiAzNC45NjAxIDE1LjAyOTNDMzQu'@;
put 'OTQ4NyAxNS4wNzk5IDM0LjkzNDggMTUuMTMwMiAzNC45MTg0IDE1LjE4TDMwLjY3NjggMzAuMjhDMzAuNTQ2OSAzMC43MjEzIDMwLjEyOTMgMzEuMDE4MyAyOS42NjQ0IDMxSDQuNDI3MzdDMy42Njg5MSAzMS4wMjI2IDMuMDMyODkgMzAuNDM4OSAzIDI5LjY5VjcuMDAwMDFDMyA1Ljg5NTQ0'@;
put 'IDMuOTA2NDYgNS4wMDAwMSA1LjAyNDYzIDUuMDAwMDFIMTEuNTk0NkMxMi4yNDI2IDQuOTk4MzUgMTIuODUyMiA1LjMwMzE4IDEzLjIzNDUgNS44MjAwMUwxNS41NzMgOS4wMDAwMUgyMS4xNTk0TDIwLjUzNjIgMTAuMDM4N0MyMC4zMzc1IDEwLjMzODEgMjAuMTkzNyAxMC42NjMyIDIwLjEw'@;
put 'NTYgMTFIMTUuMDU2N0MxNC43MzI3IDExLjAwMDggMTQuNDI3OSAxMC44NDg0IDE0LjIzNjcgMTAuNTlMMTEuNTk0NiA3LjAwMDAxSDUuMDI0NjNWMjVMNy45ODA2IDE0LjY2QzcuOTc3MjkgMTQuNjEzNCA3Ljk3NzI5IDE0LjU2NjYgNy45ODA2IDE0LjUyQzguMzg4NTggMTMuNjI5MyA5LjI2'@;
put 'OTUyIDEzLjA0MTQgMTAuMjU4MyAxM0gyMC4yMzI1WiIvPicsc29saWRCYWRnZWQ6JzxwYXRoIGQ9Ik0zMSAxMUMzMy43NjE0IDExIDM2IDguNzYxNDIgMzYgNkMzNiAzLjIzODU4IDMzLjc2MTQgMSAzMSAxQzI4LjIzODYgMSAyNiAzLjIzODU4IDI2IDZDMjYgOC43NjE0MiAyOC4yMzg2IDEx'@;
put 'IDMxIDExWiIvPjxwYXRoIGQ9Ik0yNC42NzM2IDkuMDAwMDFDMjUuMDI5NyA5Ljc0OTYxIDI1LjUxNTEgMTAuNDI1OSAyNi4xMDEgMTFIMTUuMDU2N0MxNC43MzI3IDExLjAwMDggMTQuNDI3OSAxMC44NDg0IDE0LjIzNjcgMTAuNTlMMTEuNTk0NiA3LjAwMDAxSDUuMDI0NjNWMjVMNy45ODA2'@;
put 'IDE0LjY2QzcuOTc3MjkgMTQuNjEzNCA3Ljk3NzI5IDE0LjU2NjYgNy45ODA2IDE0LjUyQzguMzg4NTggMTMuNjI5MyA5LjI2OTUyIDEzLjA0MTQgMTAuMjU4MyAxM0gzMy4yMzc5QzMzLjgyMjMgMTIuOTg2IDM0LjM3NDQgMTMuMjY0MyAzNC43MDU4IDEzLjc0QzM1LjAwMDEgMTQuMTYxIDM1'@;
put 'LjA3ODggMTQuNjkzNSAzNC45MTg0IDE1LjE4TDMwLjY3NjggMzAuMjhDMzAuNTQ2OSAzMC43MjEzIDMwLjEyOTMgMzEuMDE4MyAyOS42NjQ0IDMxSDQuNDI3MzdDMy42Njg5MSAzMS4wMjI2IDMuMDMyODkgMzAuNDM4OSAzIDI5LjY5VjcuMDAwMDFDMyA1Ljg5NTQ0IDMuOTA2NDYgNS4wMDAw'@;
put 'MSA1LjAyNDYzIDUuMDAwMDFIMTEuNTk0NkMxMi4yNDI2IDQuOTk4MzUgMTIuODUyMiA1LjMwMzE4IDEzLjIzNDUgNS44MjAwMUwxNS41NzMgOS4wMDAwMUgyNC42NzM2WiIvPid9XSxGT2U9WyJtaW51cyIse291dGxpbmU6JzxwYXRoIGQ9Ik0yNiAxN0gxMEM5LjQ0NzcyIDE3IDkgMTcuNDQ3'@;
put 'NyA5IDE4QzkgMTguNTUyMyA5LjQ0NzcyIDE5IDEwIDE5SDI2QzI2LjU1MjMgMTkgMjcgMTguNTUyMyAyNyAxOEMyNyAxNy40NDc3IDI2LjU1MjMgMTcgMjYgMTdaIi8+J31dLEhPZT1bInBsdXMiLHtvdXRsaW5lOic8cGF0aCBkPSJNMjkuOTk5OSAxN0gxOC45OTk5VjZDMTguOTk5OSA1LjQ0'@;
put 'NzcyIDE4LjU1MjIgNSAxNy45OTk5IDVDMTcuNDQ3NiA1IDE2Ljk5OTkgNS40NDc3MiAxNi45OTk5IDZWMTdINS45OTk5MkM1LjQ0NzY0IDE3IDQuOTk5OTIgMTcuNDQ3NyA0Ljk5OTkyIDE4QzQuOTg5OTQgMTguMjYzIDUuMDk0MjcgMTguNTE3NCA1LjI4NiAxOC42OTc2QzUuNDc3NzMgMTgu'@;
put 'ODc3OCA1LjczODA5IDE4Ljk2NjIgNS45OTk5MiAxOC45NEgxNi45OTk5VjMwQzE2Ljk5OTkgMzAuNTUyMyAxNy40NDc2IDMxIDE3Ljk5OTkgMzFDMTguNTUyMiAzMSAxOC45OTk5IDMwLjU1MjMgMTguOTk5OSAzMFYxOUgyOS45OTk5QzMwLjU1MjIgMTkgMzAuOTk5OSAxOC41NTIzIDMwLjk5'@;
put 'OTkgMThDMzAuOTk5OSAxNy40NDc3IDMwLjU1MjIgMTcgMjkuOTk5OSAxN1oiLz4nfV0sTk9lPVsiZXllLWhpZGUiLHtvdXRsaW5lOic8cGF0aCBkPSJNMjQuNTQ5NSAyMC40MzAxQzI0LjgyOTQgMTkuNjcwMSAyNC45ODkzIDE4Ljg2MDEgMjQuOTg5MyAxOC4wMDAxQzI0Ljk4OTMgMTQuMTQw'@;
put 'MSAyMS44NTA4IDExLjAwMDEgMTcuOTkyNiAxMS4wMDAxQzE3LjEzMyAxMS4wMDAxIDE2LjMyMzMgMTEuMTYwMSAxNS41NjM3IDExLjQ0MDFMMTcuMjAyOSAxMy4wODAxQzE3LjQ2MjggMTMuMDQwMSAxNy43MjI3IDEzLjAwMDEgMTcuOTkyNiAxMy4wMDAxQzIwLjc1MTMgMTMuMDAwMSAyMi45'@;
put 'OTAyIDE1LjI0MDEgMjIuOTkwMiAxOC4wMDAxQzIyLjk5MDIgMTguMjcwMSAyMi45NTAyIDE4LjUzMDEgMjIuOTEwMyAxOC43OTAxTDI0LjU0OTUgMjAuNDMwMVpNMTcuOTkyNiA5LjAwMDA2QzIzLjk4OTggOS4wMDAwNiAyOS4zOTcyIDEyLjUyMDEgMzEuODk2IDE4LjAwMDFDMzAuODk2NSAy'@;
put 'MC4xOTAxIDI5LjQyNzIgMjIuMDYwMSAyNy42NDggMjMuNTMwMUwyOS4wNjc0IDI0Ljk1MDFDMzEuMTI2NCAyMy4yMjAxIDMyLjgwNTYgMjAuOTkwMSAzMy45MTUxIDE4LjM5MDFDMzQuMDI1IDE4LjE0MDEgMzQuMDI1IDE3Ljg2MDEgMzMuOTE1MSAxNy42MTAxQzMxLjE4NjQgMTEuMTYwMSAy'@;
put 'NC45MzkzIDcuMDAwMDYgMTguMDAyNiA3LjAwMDA2QzE1Ljk3MzUgNy4wMDAwNiAxNC4wMDQ0IDcuMzcwMDYgMTIuMTY1MyA4LjAzMDA2TDEzLjc0NDYgOS42MTAwNkMxNS4xMDM5IDkuMjEwMDYgMTYuNTMzMiA5LjAwMDA2IDE4LjAwMjYgOS4wMDAwNkgxNy45OTI2Wk0zLjcwOTI2IDIuMjkw'@;
put 'MDZDMy4zMTk0NCAxLjkwMDA2IDIuNjc5NzQgMS45MDAwNiAyLjI4OTkyIDIuMjkwMDZDMS45MDAxIDIuNjgwMDYgMS45MDAxIDMuMzIwMDYgMi4yODk5MiAzLjcxMDA2TDguNDc3MDIgOS45MDAwNkM1LjcwODMyIDExLjc0MDEgMy40NDkzOCAxNC4zODAxIDIuMDgwMDIgMTcuNjEwMUMxLjk3'@;
put 'MDA3IDE3Ljg2MDEgMS45NzAwNyAxOC4xNDAxIDIuMDgwMDIgMTguMzkwMUM0LjgwODc0IDI0Ljg0MDEgMTEuMDU1OCAyOS4wMDAxIDE3Ljk5MjYgMjkuMDAwMUMyMC43NDEzIDI5LjAwMDEgMjMuMzcgMjguMzQwMSAyNS43MTg5IDI3LjE1MDFMMzIuMjc1OSAzMy43MTAxQzMyLjQ3NTggMzMu'@;
put 'OTEwMSAzMi43MjU3IDM0LjAwMDEgMzIuOTg1NSAzNC4wMDAxQzMzLjI0NTQgMzQuMDAwMSAzMy40OTUzIDMzLjkwMDEgMzMuNjk1MiAzMy43MTAxQzM0LjA4NSAzMy4zMjAxIDM0LjA4NSAzMi42OTAxIDMzLjY5NTIgMzIuMzAwMUwzLjcwOTI2IDIuMjkwMDZaTTEzLjgzNDUgMTUuMjUwMUwy'@;
put 'MC43NDEzIDIyLjE2MDFDMTkuOTUxNiAyMi42ODAxIDE5LjAxMjEgMjMuMDAwMSAxNy45OTI2IDIzLjAwMDFDMTUuMjMzOSAyMy4wMDAxIDEyLjk5NDkgMjAuNzYwMSAxMi45OTQ5IDE4LjAwMDFDMTIuOTk0OSAxNi45ODAxIDEzLjMwNDggMTYuMDQwMSAxMy44MzQ1IDE1LjI1MDFaTTE3Ljk5'@;
put 'MjYgMjcuMDAwMUMxMS45OTU0IDI3LjAwMDEgNi41ODc5MSAyMy40ODAxIDQuMDg5MDggMTguMDAwMUM1LjM2ODQ4IDE1LjE5MDEgNy40Mjc1MSAxMi45MTAxIDkuOTI2MzQgMTEuMzQwMUwxMi40MDUyIDEzLjgyMDFDMTEuNTI1NiAxNC45OTAxIDEwLjk5NTggMTYuNDMwMSAxMC45OTU4IDE4'@;
put 'LjAwMDFDMTAuOTk1OCAyMS44NjAxIDE0LjEzNDQgMjUuMDAwMSAxNy45OTI2IDI1LjAwMDFDMTkuNTYxOCAyNS4wMDAxIDIxLjAwMTIgMjQuNDcwMSAyMi4xNzA2IDIzLjU5MDFMMjQuMjI5NiAyNS42NTAxQzIyLjMxMDUgMjYuNTIwMSAyMC4xOTE1IDI3LjAwMDEgMTcuOTkyNiAyNy4wMDAx'@;
put 'WiIvPicsc29saWQ6JzxwYXRoIGQ9Ik0xNy45OTI2IDkuMDAwMDZDMjMuOTg5OCA5LjAwMDA2IDI5LjM5NzIgMTIuNTIwMSAzMS44OTYgMTguMDAwMUMzMC44OTY1IDIwLjE5MDEgMjkuNDI3MiAyMi4wNjAxIDI3LjY0OCAyMy41MzAxTDI5LjA2NzQgMjQuOTUwMUMzMS4xMjY0IDIzLjIyMDEg'@;
put 'MzIuODA1NiAyMC45OTAxIDMzLjkxNTEgMTguMzkwMUMzNC4wMjUgMTguMTQwMSAzNC4wMjUgMTcuODYwMSAzMy45MTUxIDE3LjYxMDFDMzEuMTg2NCAxMS4xNjAxIDI0LjkzOTMgNy4wMDAwNiAxOC4wMDI2IDcuMDAwMDZDMTUuOTczNSA3LjAwMDA2IDE0LjAwNDQgNy4zNzAwNiAxMi4xNjUz'@;
put 'IDguMDMwMDZMMTMuNzQ0NiA5LjYxMDA2QzE1LjEwMzkgOS4yMTAwNiAxNi41MzMyIDkuMDAwMDYgMTguMDAyNiA5LjAwMDA2SDE3Ljk5MjZaTTMuNzA5MjYgMi4yOTAwNkMzLjMxOTQ0IDEuOTAwMDYgMi42Nzk3NCAxLjkwMDA2IDIuMjg5OTIgMi4yOTAwNkMxLjkwMDEgMi42ODAwNiAxLjkw'@;
put 'MDEgMy4zMjAwNiAyLjI4OTkyIDMuNzEwMDZMOC40NzcwMiA5LjkwMDA2QzUuNzA4MzIgMTEuNzQwMSAzLjQ0OTM4IDE0LjM4MDEgMi4wODAwMiAxNy42MTAxQzEuOTcwMDcgMTcuODYwMSAxLjk3MDA3IDE4LjE0MDEgMi4wODAwMiAxOC4zOTAxQzQuODA4NzQgMjQuODQwMSAxMS4wNTU4IDI5'@;
put 'LjAwMDEgMTcuOTkyNiAyOS4wMDAxQzIwLjc0MTMgMjkuMDAwMSAyMy4zNyAyOC4zNDAxIDI1LjcxODkgMjcuMTUwMUwzMi4yNzU5IDMzLjcxMDFDMzIuNDc1OCAzMy45MTAxIDMyLjcyNTcgMzQuMDAwMSAzMi45ODU1IDM0LjAwMDFDMzMuMjQ1NCAzNC4wMDAxIDMzLjQ5NTMgMzMuOTAwMSAz'@;
put 'My42OTUyIDMzLjcxMDFDMzQuMDg1IDMzLjMyMDEgMzQuMDg1IDMyLjY5MDEgMzMuNjk1MiAzMi4zMDAxTDMuNzA5MjYgMi4yOTAwNlpNMTcuOTkyNiAyNy4wMDAxQzExLjk5NTQgMjcuMDAwMSA2LjU4NzkxIDIzLjQ4MDEgNC4wODkwOCAxOC4wMDAxQzUuMzY4NDggMTUuMTkwMSA3LjQyNzUx'@;
put 'IDEyLjkxMDEgOS45MjYzNCAxMS4zNDAxTDEyLjQwNTIgMTMuODIwMUMxMS41MjU2IDE0Ljk5MDEgMTAuOTk1OCAxNi40MzAxIDEwLjk5NTggMTguMDAwMUMxMC45OTU4IDIxLjg2MDEgMTQuMTM0NCAyNS4wMDAxIDE3Ljk5MjYgMjUuMDAwMUMxOS41NjE4IDI1LjAwMDEgMjEuMDAxMiAyNC40'@;
put 'NzAxIDIyLjE3MDYgMjMuNTkwMUwyNC4yMjk2IDI1LjY1MDFDMjIuMzEwNSAyNi41MjAxIDIwLjE5MTUgMjcuMDAwMSAxNy45OTI2IDI3LjAwMDFaTTE1LjU2MzcgMTEuNDQwMUwyNC41NDk1IDIwLjQzMDFDMjQuODI5NCAxOS42NzAxIDI0Ljk4OTMgMTguODYwMSAyNC45ODkzIDE4LjAwMDFD'@;
put 'MjQuOTg5MyAxNC4xNDAxIDIxLjg1MDggMTEuMDAwMSAxNy45OTI2IDExLjAwMDFDMTcuMTMzIDExLjAwMDEgMTYuMzIzMyAxMS4xNjAxIDE1LjU2MzcgMTEuNDQwMVoiLz4nfV0sVk9lPVsiZXllIix7b3V0bGluZTonPHBhdGggZD0iTTE3Ljk5NzYgMTFDMTQuMTM4MiAxMSAxMC45OTg3IDE0'@;
put 'LjE0IDEwLjk5ODcgMThDMTAuOTk4NyAyMS44NiAxNC4xMzgyIDI1IDE3Ljk5NzYgMjVDMjEuODU3IDI1IDI0Ljk5NjUgMjEuODYgMjQuOTk2NSAxOEMyNC45OTY1IDE0LjE0IDIxLjg1NyAxMSAxNy45OTc2IDExWk0xNy45OTc2IDIzQzE1LjIzOCAyMyAxMi45OTgzIDIwLjc2IDEyLjk5ODMg'@;
put 'MThDMTIuOTk4MyAxNS4yNCAxNS4yMzggMTMgMTcuOTk3NiAxM0MyMC43NTcxIDEzIDIyLjk5NjggMTUuMjQgMjIuOTk2OCAxOEMyMi45OTY4IDIwLjc2IDIwLjc1NzEgMjMgMTcuOTk3NiAyM1pNMzMuOTE1MSAxNy42MUMzMS4xODU1IDExLjE3IDI0LjkzNjUgNyAxNy45OTc2IDdDMTEuMDU4'@;
put 'NiA3IDQuODA5NjIgMTEuMTcgMi4wODAwNSAxNy42MUMxLjk3MDA2IDE3Ljg2IDEuOTcwMDYgMTguMTQgMi4wODAwNSAxOC4zOUM0LjgwOTYyIDI0Ljg0IDExLjA1ODYgMjkgMTcuOTk3NiAyOUMyNC45MzY1IDI5IDMxLjE4NTUgMjQuODMgMzMuOTE1MSAxOC4zOUMzNC4wMjUxIDE4LjE0IDM0'@;
put 'LjAyNTEgMTcuODYgMzMuOTE1MSAxNy42MVpNMTcuOTk3NiAyN0MxMS45OTg1IDI3IDYuNTg5MzQgMjMuNDggNC4wODk3MyAxOEM2LjU4OTM0IDEyLjUyIDExLjk5ODUgOSAxNy45OTc2IDlDMjMuOTk2NiA5IDI5LjQwNTggMTIuNTIgMzEuOTA1NCAxOEMyOS40MDU4IDIzLjQ4IDIzLjk5NjYg'@;
put 'MjcgMTcuOTk3NiAyN1oiLz4nLHNvbGlkOic8cGF0aCBkPSJNMTcuOTk3NiAxMUMxNC4xMzgyIDExIDEwLjk5ODcgMTQuMTQgMTAuOTk4NyAxOEMxMC45OTg3IDIxLjg2IDE0LjEzODIgMjUgMTcuOTk3NiAyNUMyMS44NTcgMjUgMjQuOTk2NSAyMS44NiAyNC45OTY1IDE4QzI0Ljk5NjUgMTQu'@;
put 'MTQgMjEuODU3IDExIDE3Ljk5NzYgMTFaTTMzLjkxNTEgMTcuNjFDMzEuMTg1NSAxMS4xNyAyNC45MzY1IDcgMTcuOTk3NiA3QzExLjA1ODYgNyA0LjgwOTYyIDExLjE3IDIuMDgwMDUgMTcuNjFDMS45NzAwNiAxNy44NiAxLjk3MDA2IDE4LjE0IDIuMDgwMDUgMTguMzlDNC44MDk2MiAyNC44'@;
put 'NCAxMS4wNTg2IDI5IDE3Ljk5NzYgMjlDMjQuOTM2NSAyOSAzMS4xODU1IDI0LjgzIDMzLjkxNTEgMTguMzlDMzQuMDI1MSAxOC4xNCAzNC4wMjUxIDE3Ljg2IDMzLjkxNTEgMTcuNjFaTTE3Ljk5NzYgMjdDMTEuOTk4NSAyNyA2LjU4OTM0IDIzLjQ4IDQuMDg5NzMgMThDNi41ODkzNCAxMi41'@;
put 'MiAxMS45OTg1IDkgMTcuOTk3NiA5QzIzLjk5NjYgOSAyOS40MDU4IDEyLjUyIDMxLjkwNTQgMThDMjkuNDA1OCAyMy40OCAyMy45OTY2IDI3IDE3Ljk5NzYgMjdaIi8+J31dLEJPZT1bImVsbGlwc2lzLXZlcnRpY2FsIix7b3V0bGluZTonPHBhdGggZD0iTTIxLjEwMDEgNC45QzIxLjEwMDEg'@;
put 'Ni41MDE2MyAxOS43NTcgNy44IDE4LjEwMDEgNy44QzE2LjQ0MzIgNy44IDE1LjEwMDEgNi41MDE2MyAxNS4xMDAxIDQuOUMxNS4xMDAxIDMuMjk4MzcgMTYuNDQzMiAyIDE4LjEwMDEgMkMxOS43NTcgMiAyMS4xMDAxIDMuMjk4MzcgMjEuMTAwMSA0LjlaIi8+PHBhdGggZD0iTTE4LjEwMDEg'@;
put 'MjAuOUMxOS43NTcgMjAuOSAyMS4xMDAxIDE5LjYwMTYgMjEuMTAwMSAxOEMyMS4xMDAxIDE2LjM5ODQgMTkuNzU3IDE1LjEgMTguMTAwMSAxNS4xQzE2LjQ0MzIgMTUuMSAxNS4xMDAxIDE2LjM5ODQgMTUuMTAwMSAxOEMxNS4xMDAxIDE5LjYwMTYgMTYuNDQzMiAyMC45IDE4LjEwMDEgMjAu'@;
put 'OVoiLz48cGF0aCBkPSJNMTguMTAwMSAzNEMxOS43NTcgMzQgMjEuMTAwMSAzMi43MDE2IDIxLjEwMDEgMzEuMUMyMS4xMDAxIDI5LjQ5ODQgMTkuNzU3IDI4LjIgMTguMTAwMSAyOC4yQzE2LjQ0MzIgMjguMiAxNS4xMDAxIDI5LjQ5ODQgMTUuMTAwMSAzMS4xQzE1LjEwMDEgMzIuNzAxNiAx'@;
put 'Ni40NDMyIDM0IDE4LjEwMDEgMzRaIi8+JyxvdXRsaW5lQmFkZ2VkOic8cGF0aCBkPSJNMjEuMTAwMSA0LjlDMjEuMTAwMSA2LjUwMTYzIDE5Ljc1NyA3LjggMTguMTAwMSA3LjhDMTYuNDQzMiA3LjggMTUuMTAwMSA2LjUwMTYzIDE1LjEwMDEgNC45QzE1LjEwMDEgMy4yOTgzNyAxNi40NDMy'@;
put 'IDIgMTguMTAwMSAyQzE5Ljc1NyAyIDIxLjEwMDEgMy4yOTgzNyAyMS4xMDAxIDQuOVoiLz48cGF0aCBkPSJNMTguMTAwMSAyMC45QzE5Ljc1NyAyMC45IDIxLjEwMDEgMTkuNjAxNiAyMS4xMDAxIDE4QzIxLjEwMDEgMTYuMzk4NCAxOS43NTcgMTUuMSAxOC4xMDAxIDE1LjFDMTYuNDQzMiAx'@;
put 'NS4xIDE1LjEwMDEgMTYuMzk4NCAxNS4xMDAxIDE4QzE1LjEwMDEgMTkuNjAxNiAxNi40NDMyIDIwLjkgMTguMTAwMSAyMC45WiIvPjxwYXRoIGQ9Ik0xOC4xMDAxIDM0QzE5Ljc1NyAzNCAyMS4xMDAxIDMyLjcwMTYgMjEuMTAwMSAzMS4xQzIxLjEwMDEgMjkuNDk4NCAxOS43NTcgMjguMiAx'@;
put 'OC4xMDAxIDI4LjJDMTYuNDQzMiAyOC4yIDE1LjEwMDEgMjkuNDk4NCAxNS4xMDAxIDMxLjFDMTUuMTAwMSAzMi43MDE2IDE2LjQ0MzIgMzQgMTguMTAwMSAzNFoiLz48cGF0aCBkPSJNMzAgMTFDMzIuNzYxNCAxMSAzNSA4Ljc2MTQyIDM1IDZDMzUgMy4yMzg1OCAzMi43NjE0IDEgMzAgMUMy'@;
put 'Ny4yMzg2IDEgMjUgMy4yMzg1OCAyNSA2QzI1IDguNzYxNDIgMjcuMjM4NiAxMSAzMCAxMVoiLz4nfV0sak9lPVsidmlldy1jb2x1bW5zIix7b3V0bGluZTonPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0zMSA1SDVDMy44OTU0MyA1IDMgNS44OTU0'@;
put 'MyAzIDdWMjlDMyAzMC4xMDQ2IDMuODk1NDMgMzEgNSAzMUgzMUMzMi4xMDQ2IDMxIDMzIDMwLjEwNDYgMzMgMjlWN0MzMyA1Ljg5NTQzIDMyLjEwNDYgNSAzMSA1Wk0xMyAyOUg1VjdIMTNWMjlaTTE1IDI5SDIzVjdIMTVWMjlaIi8+J31dLHpPZT1bImFycm93Iix7b3V0bGluZTonPHBhdGgg'@;
put 'ZD0iTTI3LjY1MDQgMTUuNjM0MUwxNy45OTUxIDZMOC4zMzk4MSAxNS42MzQxQzguMDI4NjkgMTUuODcxNyA3Ljg4NDMyIDE2LjI2OTUgNy45NzAzIDE2LjY1MjFDOC4wNTYyOSAxNy4wMzQ3IDguMzU2ODUgMTcuMzMxOSA4LjczOTUyIDE3LjQxMjdDOS4xMjIxOSAxNy40OTM1IDkuNTE2Njcg'@;
put 'MTcuMzQzIDkuNzQ5MTIgMTcuMDI3NkwxNi45OTU2IDkuODE5NTVWMjguOTk3NUMxNi45OTU2IDI5LjU1MTIgMTcuNDQzMSAzMCAxNy45OTUxIDMwQzE4LjU0NzEgMzAgMTguOTk0NiAyOS41NTEyIDE4Ljk5NDYgMjguOTk3NVY5LjgxOTU1TDI2LjI0MTEgMTcuMDI3NkMyNi42MzMgMTcuNDE3'@;
put 'OSAyNy4yNjYyIDE3LjQxNTcgMjcuNjU1NCAxNy4wMjI2QzI4LjA0NDUgMTYuNjI5NSAyOC4wNDIzIDE1Ljk5NDMgMjcuNjUwNCAxNS42MDRWMTUuNjM0MVoiLz4nfV0sVU9lPVsic3RlcC1mb3J3YXJkLTIiLHtvdXRsaW5lOic8cGF0aCBkPSJNNy4wODg5MyA2LjUyMDAzQzYuOTI2NDMgNi42'@;
put 'NzY0NSA2Ljc5NzM0IDYuODYzMTUgNi43MDkyMSA3LjA2OTIxQzYuNjIxMDggNy4yNzUyNiA2LjU3NTY4IDcuNDk2NTIgNi41NzU2OCA3LjcyMDAzQzYuNTc1NjggNy45NDM1MyA2LjYyMTA4IDguMTY0NzkgNi43MDkyMSA4LjM3MDg1QzYuNzk3MzQgOC41NzY5IDYuOTI2NDMgOC43NjM2MSA3'@;
put 'LjA4ODkzIDguOTIwMDNMMTYuNjg3MiAxOEw3LjEyOTY0IDI3LjA4QzYuODI5NzcgMjcuMzk5MSA2LjY2NTU0IDI3LjgxODggNi42NzA2NSAyOC4yNTNDNi42NzU3NiAyOC42ODcyIDYuODQ5ODIgMjkuMTAzMSA3LjE1NzEyIDI5LjQxNTJDNy40NjQ0MiAyOS43Mjc0IDcuODgxNjYgMjkuOTEy'@;
put 'MSA4LjMyMzIzIDI5LjkzMTZDOC43NjQ4IDI5Ljk1MTEgOS4xOTcyMSAyOS44MDM4IDkuNTMxNzYgMjkuNTJMMjEuNjY0NSAxOEw5LjUzMTc2IDYuNDcwMDNDOS4zNjg1MSA2LjMxNDgyIDkuMTc1NTkgNi4xOTI5MyA4Ljk2NDEzIDYuMTExMzdDOC43NTI2NyA2LjAyOTgyIDguNTI2ODYgNS45'@;
put 'OTAyMiA4LjI5OTc0IDUuOTk0ODdDOC4wNzI2MiA1Ljk5OTUyIDcuODQ4NjkgNi4wNDgzMiA3LjY0MDg3IDYuMTM4NDZDNy40MzMwNSA2LjIyODU5IDcuMjQ1NDYgNi4zNTgyOCA3LjA4ODkzIDYuNTIwMDNaIi8+PHBhdGggZD0iTTI2Ljg0NTMgNUMyNi4zODY0IDUgMjUuOTQ2MyA1LjE3OTEx'@;
put 'IDI1LjYyMTggNS40OTc5MkMyNS4yOTczIDUuODE2NzMgMjUuMTE1IDYuMjQ5MTMgMjUuMTE1IDYuN1YyOS4zQzI1LjExNSAyOS43NTA5IDI1LjI5NzMgMzAuMTgzMyAyNS42MjE4IDMwLjUwMjFDMjUuOTQ2MyAzMC44MjA5IDI2LjM4NjQgMzEgMjYuODQ1MyAzMUMyNy4zMDQzIDMxIDI3Ljc0'@;
put 'NDQgMzAuODIwOSAyOC4wNjg5IDMwLjUwMjFDMjguMzkzNCAzMC4xODMzIDI4LjU3NTcgMjkuNzUwOSAyOC41NzU3IDI5LjNWNi43QzI4LjU3NTcgNi4yNDkxMyAyOC4zOTM0IDUuODE2NzMgMjguMDY4OSA1LjQ5NzkyQzI3Ljc0NDQgNS4xNzkxMSAyNy4zMDQzIDUgMjYuODQ1MyA1WiIvPid9'@;
put 'XSxaT2U9WyJmaWx0ZXItZ3JpZC1jaXJjbGUiLHtvdXRsaW5lOic8cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZD0iTTE4IDJDOS4xNjM0NCAyIDIgOS4xNjM0NCAyIDE4QzIgMjYuODM2NiA5LjE2MzQ0IDM0IDE4IDM0QzI2LjgzNjYgMzQgMzQgMjYuODM2'@;
put 'NiAzNCAxOEMzNCAxMy43NTY1IDMyLjMxNDMgOS42ODY4NyAyOS4zMTM3IDYuNjg2MjlDMjYuMzEzMSAzLjY4NTcxIDIyLjI0MzUgMiAxOCAyWk0xOCAzMkMxMC4yNjggMzIgNCAyNS43MzIgNCAxOEM0IDEwLjI2OCAxMC4yNjggNCAxOCA0QzI1LjczMiA0IDMyIDEwLjI2OCAzMiAxOEMzMiAy'@;
put 'MS43MTMgMzAuNTI1IDI1LjI3NCAyNy44OTk1IDI3Ljg5OTVDMjUuMjc0IDMwLjUyNSAyMS43MTMgMzIgMTggMzJaTTE3IDI2Ljg2TDE1IDI1Ljg2VjIwLjY4TDguNDIgMTRDOC4xNTY3OSAxMy43MzMgOC4wMDY0IDEzLjM3NDkgOCAxM1YxMkM4IDExLjQ0NzcgOC40NDc3MiAxMSA5IDExSDI3'@;
put 'QzI3LjU1MjMgMTEgMjggMTEuNDQ3NyAyOCAxMlYxM0MyNy45OTM2IDEzLjM3NDkgMjcuODQzMiAxMy43MzMgMjcuNTggMTRMMjEgMjAuNjhWMjlMMTkgMjhMMTkuMDMgMjAuMjdDMTkuMDMxMSAyMC4wMDc3IDE5LjEzNTMgMTkuNzU2MyAxOS4zMiAxOS41N0wyNS43OSAxM0gxMC4yM0wxNi43'@;
put 'MSAxOS41N0MxNi44OTQ3IDE5Ljc1NjMgMTYuOTk4OSAyMC4wMDc3IDE3IDIwLjI3VjI2Ljg2WiIvPicsc29saWQ6JzxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNMTggMkM5LjE2MzQ0IDIgMiA5LjE2MzQ0IDIgMThDMiAyNi44MzY2IDkuMTYzNDQg'@;
put 'MzQgMTggMzRDMjYuODM2NiAzNCAzNCAyNi44MzY2IDM0IDE4QzM0IDEzLjc1NjUgMzIuMzE0MyA5LjY4Njg3IDI5LjMxMzcgNi42ODYyOUMyNi4zMTMxIDMuNjg1NzEgMjIuMjQzNSAyIDE4IDJaTTE4IDMyQzEwLjI2OCAzMiA0IDI1LjczMiA0IDE4QzQgMTAuMjY4IDEwLjI2OCA0IDE4IDRD'@;
put 'MjUuNzMyIDQgMzIgMTAuMjY4IDMyIDE4QzMyIDIxLjcxMyAzMC41MjUgMjUuMjc0IDI3Ljg5OTUgMjcuODk5NUMyNS4yNzQgMzAuNTI1IDIxLjcxMyAzMiAxOCAzMlpNOCAxMi4xMlYxMUgyNy45OFYxMi4xNEMyNy45NzgxIDEyLjI3MTkgMjcuOTI0MiAxMi4zOTc3IDI3LjgzIDEyLjQ5TDIw'@;
put 'LjcxIDE5Ljc0QzIwLjYwODEgMTkuODI5OSAyMC41NDM4IDE5Ljk1NDggMjAuNTMgMjAuMDlWMjguNDhDMjAuNTMwMyAyOC42NTI4IDIwLjQ0MTUgMjguODEzNCAyMC4yOTUgMjguOTA1QzIwLjE0ODUgMjguOTk2NiAxOS45NjUxIDI5LjAwNiAxOS44MSAyOC45M0wxNS44NiAyNy41MkMxNS42'@;
put 'ODgzIDI3LjQzNTkgMTUuNTc5NiAyNy4yNjEyIDE1LjU4IDI3LjA3VjIwLjE4QzE1LjU3ODEgMjAuMDQ4MSAxNS41MjQyIDE5LjkyMjMgMTUuNDMgMTkuODNMOC4xNSAxMi40N0M4LjA1NTc5IDEyLjM3NzcgOC4wMDE4OCAxMi4yNTE5IDggMTIuMTJaIi8+J31dLFdPZT1bImZpbHRlci1ncmlk'@;
put 'Iix7b3V0bGluZTonPHBhdGggZD0iTTE1IDIzLjg2TDE3IDI0Ljg2VjE4LjI3QzE2Ljk5ODkgMTguMDA3NyAxNi44OTQ3IDE3Ljc1NjMgMTYuNzEgMTcuNTdMMTAuMjMgMTFIMjUuNzlMMTkuMzIgMTcuNTdDMTkuMTM1MyAxNy43NTYzIDE5LjAzMTEgMTguMDA3NyAxOS4wMyAxOC4yN0wxOSAy'@;
put 'NkwyMSAyN1YxOC42OEwyNy41OCAxMkMyNy44NDMyIDExLjczMyAyNy45OTM2IDExLjM3NDkgMjggMTFWMTBDMjggOS40NDc3MiAyNy41NTIzIDkgMjcgOUg5QzguNDQ3NzIgOSA4IDkuNDQ3NzIgOCAxMFYxMUM4LjAwNjQgMTEuMzc0OSA4LjE1Njc5IDExLjczMyA4LjQyIDEyTDE1IDE4LjY4'@;
put 'VjIzLjg2WiIvPicsc29saWQ6JzxwYXRoIGQ9Ik04IDlWMTAuMTIxMkM4LjAwMTg4IDEwLjI1MzIgOC4wNTU4NSAxMC4zNzkxIDguMTUwMTUgMTAuNDcxNkwxNS40Mzc0IDE3LjgzOTNDMTUuNTMxNyAxNy45MzE3IDE1LjU4NTcgMTguMDU3NyAxNS41ODc2IDE4LjE4OTdWMjUuMDg3QzE1LjU4'@;
put 'NzIgMjUuMjc4NCAxNS42OTYgMjUuNDUzMiAxNS44Njc5IDI1LjUzNzVMMTkuODIxOCAyNi45NDg5QzE5Ljk3NzEgMjcuMDI1IDIwLjE2MDcgMjcuMDE1NiAyMC4zMDczIDI2LjkyMzlDMjAuNDUzOSAyNi44MzIzIDIwLjU0MjkgMjYuNjcxNCAyMC41NDI1IDI2LjQ5ODVWMTguMDk5NkMyMC41'@;
put 'NTY0IDE3Ljk2NDMgMjAuNjIwNyAxNy44MzkyIDIwLjcyMjcgMTcuNzQ5MkwyNy44NDk4IDEwLjQ5MTZDMjcuOTQ0MiAxMC4zOTkyIDI3Ljk5ODEgMTAuMjczMiAyOCAxMC4xNDEyVjlIOFoiLz4nfV0sc1k9WyJlcnJvci1zdGFuZGFyZCIse291dGxpbmU6JzxwYXRoIGQ9Ik0xOCAyMi42MUMx'@;
put 'Ny40NDc3IDIyLjYxIDE3IDIyLjE2MjMgMTcgMjEuNjFWOS42MUMxNyA5LjA1NzcyIDE3LjQ0NzcgOC42MSAxOCA4LjYxQzE4LjU1MjMgOC42MSAxOSA5LjA1NzcyIDE5IDkuNjFWMjEuNjFDMTkgMjIuMTYyMyAxOC41NTIzIDIyLjYxIDE4IDIyLjYxWiIvPjxwYXRoIGQ9Ik0xOS4zMyAyNi4w'@;
put 'NkMxOS4zMyAyNi43OTQ1IDE4LjczNDUgMjcuMzkgMTggMjcuMzlDMTcuMjY1NSAyNy4zOSAxNi42NyAyNi43OTQ1IDE2LjY3IDI2LjA2QzE2LjY3IDI1LjMyNTUgMTcuMjY1NSAyNC43MyAxOCAyNC43M0MxOC43MzQ1IDI0LjczIDE5LjMzIDI1LjMyNTUgMTkuMzMgMjYuMDZaIi8+PHBhdGgg'@;
put 'ZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0yIDE4QzIgMjYuODM2NiA5LjE2MzQ0IDM0IDE4IDM0QzIyLjI0MzUgMzQgMjYuMzEzMSAzMi4zMTQzIDI5LjMxMzcgMjkuMzEzN0MzMi4zMTQzIDI2LjMxMzEgMzQgMjIuMjQzNSAzNCAxOEMzNCA5LjE2MzQ0IDI2'@;
put 'LjgzNjYgMiAxOCAyQzkuMTYzNDQgMiAyIDkuMTYzNDQgMiAxOFpNNCAxOEM0IDEwLjI2OCAxMC4yNjggNCAxOCA0QzI1LjczMiA0IDMyIDEwLjI2OCAzMiAxOEMzMiAyNS43MzIgMjUuNzMyIDMyIDE4IDMyQzEwLjI2OCAzMiA0IDI1LjczMiA0IDE4WiIvPicsc29saWQ6JzxwYXRoIGQ9Ik0x'@;
put 'OCAyQzkuMTYgMiAyIDkuMTYgMiAxOEMyIDI2Ljg0IDkuMTYgMzQgMTggMzRDMjIuMjQgMzQgMjYuMzEgMzIuMzEgMjkuMzEgMjkuMzFDMzIuMzEgMjYuMzEgMzQgMjIuMjQgMzQgMThDMzQgOS4xNiAyNi44NCAyIDE4IDJaTTE3IDkuNjFDMTcgOS4wNiAxNy40NSA4LjYxIDE4IDguNjFDMTgu'@;
put 'NTUgOC42MSAxOSA5LjA2IDE5IDkuNjFWMjEuNjFDMTkgMjIuMTYgMTguNTUgMjIuNjEgMTggMjIuNjFDMTcuNDUgMjIuNjEgMTcgMjIuMTYgMTcgMjEuNjFWOS42MVpNMTggMjcuMjZDMTcuMzQgMjcuMjYgMTYuOCAyNi43MiAxNi44IDI2LjA2QzE2LjggMjUuNCAxNy4zNCAyNC44NiAxOCAy'@;
put 'NC44NkMxOC42NiAyNC44NiAxOS4yIDI1LjQgMTkuMiAyNi4wNkMxOS4yIDI2LjcyIDE4LjY2IDI3LjI2IDE4IDI3LjI2WiIvPid9XSxZT2U9WyJoZWxwIix7b3V0bGluZTonPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0yIDE4QzIgOS4xNjM0NCA5'@;
put 'LjE2MzQ0IDIgMTggMkMyMi4yNDM1IDIgMjYuMzEzMSAzLjY4NTcxIDI5LjMxMzcgNi42ODYyOUMzMi4zMTQzIDkuNjg2ODcgMzQgMTMuNzU2NSAzNCAxOEMzNCAyNi44MzY2IDI2LjgzNjYgMzQgMTggMzRDOS4xNjM0NCAzNCAyIDI2LjgzNjYgMiAxOFpNNCAxOEM0IDI1LjczMiAxMC4yNjgg'@;
put 'MzIgMTggMzJDMjEuNzEzIDMyIDI1LjI3NCAzMC41MjUgMjcuODk5NSAyNy44OTk1QzMwLjUyNSAyNS4yNzQgMzIgMjEuNzEzIDMyIDE4QzMyIDEwLjI2OCAyNS43MzIgNCAxOCA0QzEwLjI2OCA0IDQgMTAuMjY4IDQgMThaTTE4LjI5IDguOTJDMTYuMDk2MSA4Ljg4Mzc0IDEzLjk5OTggOS44'@;
put 'MjU2IDEyLjU3IDExLjQ5QzEyLjM3MTggMTEuNjczNyAxMi4yNTYzIDExLjkyOTggMTIuMjUgMTIuMkMxMi4yNDk5IDEyLjQ0OTMgMTIuMzUwOSAxMi42ODggMTIuNTMgMTIuODYxNEMxMi43MDkxIDEzLjAzNDggMTIuOTUwOCAxMy4xMjgxIDEzLjIgMTMuMTJDMTMuNDY0MiAxMy4xMTM1IDEz'@;
put 'LjcxNjggMTMuMDEwMyAxMy45MSAxMi44M0MxNC45OTE2IDExLjU2MjUgMTYuNTczNyAxMC44MzE3IDE4LjI0IDEwLjgzQzIwLjYgMTAuODMgMjIuMDcgMTIuMzUgMjIuMDcgMTQuMjRWMTQuMjlDMjIuMDcgMTYuNSAyMC4zMSAxNy43MyAxNy41MyAxNy45NEMxNy4zMDIzIDE3Ljk0ODggMTcu'@;
put 'MDg5MiAxOC4wNTQyIDE2Ljk0NDEgMTguMjI5OUMxNi43OTkgMTguNDA1NiAxNi43MzU3IDE4LjYzNDggMTYuNzcgMTguODZWMjEuNjFDMTYuODIxNSAyMi4xMjI5IDE3LjI1NDUgMjIuNTEyNiAxNy43NyAyMi41MUgxNy44OEMxOC4zOTI5IDIyLjQ1ODUgMTguNzgyNiAyMi4wMjU1IDE4Ljc4'@;
put 'IDIxLjUxVjE5LjQ1QzIxLjc4IDE5LjAzIDI0LjIxIDE3LjQ1IDI0LjIxIDE0LjE3VjE0LjEyQzI0LjE4IDExLjEyIDIxLjg0IDguOTIgMTguMjkgOC45MlpNMTkuMDMgMjYuMkMxOS4wMyAyNi44OTA0IDE4LjQ3MDQgMjcuNDUgMTcuNzggMjcuNDVDMTcuMDg5NiAyNy40NSAxNi41MyAyNi44'@;
put 'OTA0IDE2LjUzIDI2LjJDMTYuNTMgMjUuNTA5NiAxNy4wODk2IDI0Ljk1IDE3Ljc4IDI0Ljk1QzE4LjQ3MDQgMjQuOTUgMTkuMDMgMjUuNTA5NiAxOS4wMyAyNi4yWiIvPicsb3V0bGluZUJhZGdlZDonPHBhdGggZD0iTTMzLjAwMTMgMTIuNzY4OUMzMi4zOTU5IDEzLjA0NjIgMzEuNzU1OSAx'@;
put 'My4yNDA2IDMxLjA5ODYgMTMuMzQ2N0MzMy4yNjM2IDE5LjUxMDggMzAuODc2MyAyNi4zNTI4IDI1LjM0NjUgMjkuODMyQzE5LjgxNjcgMzMuMzExMiAxMi42MTU0IDMyLjUwMiA3Ljk5NTY5IDI3Ljg4MjJDMy4zNzU5NyAyMy4yNjI1IDIuNTY2NzQgMTYuMDYxMyA2LjA0NTkyIDEwLjUzMTVD'@;
put 'OS41MjUwOSA1LjAwMTYyIDE2LjM2NzEgMi42MTQyOSAyMi41MzEyIDQuNzc5MzhDMjIuNjM3NSA0LjEyMjA1IDIyLjgzMTggMy40ODIwNCAyMy4xMDkgMi44NzY2M0MxNi4wNjQ5IDAuNDQwOTQ2IDguMjcxOTkgMy4xOTIwNSA0LjMxODIzIDkuNTEwMjlDMC4zNjQ0NzYgMTUuODI4NSAxLjI5'@;
put 'NzM2IDI0LjAzOTkgNi41Njc2NyAyOS4zMTAzQzExLjgzOCAzNC41ODA2IDIwLjA0OTQgMzUuNTEzNSAyNi4zNjc2IDMxLjU1OTdDMzIuNjg1OSAyNy42MDU5IDM1LjQzNyAxOS44MTMxIDMzLjAwMTMgMTIuNzY4OVoiLz48cGF0aCBkPSJNMTcuNzE5NiAyNy4zNTMzQzE4LjQwNzMgMjcuMzUz'@;
put 'MyAxOC45NjQ4IDI2Ljc5NTggMTguOTY0OCAyNi4xMDgxQzE4Ljk2NDggMjUuNDIwMyAxOC40MDczIDI0Ljg2MjggMTcuNzE5NiAyNC44NjI4QzE3LjAzMTggMjQuODYyOCAxNi40NzQzIDI1LjQyMDMgMTYuNDc0MyAyNi4xMDgxQzE2LjQ3NDMgMjYuNzk1OCAxNy4wMzE4IDI3LjM1MzMgMTcu'@;
put 'NzE5NiAyNy4zNTMzWiIvPjxwYXRoIGQ9Ik0yNC4wOTUzIDE0LjA3MzlWMTQuMTIzOEMyNC4wOTUzIDE3LjM5MTMgMjEuNjc0NSAxOC45MzU0IDE4LjcyNTcgMTkuMzgzN1YyMS40MzU5QzE4LjcyODMgMjEuOTQ5NCAxOC4zNDAxIDIyLjM4MDcgMTcuODI5MSAyMi40MzIxSDE3LjcxOTZDMTcu'@;
put 'MjA2IDIyLjQzNDcgMTYuNzc0NyAyMi4wNDY1IDE2LjcyMzMgMjEuNTM1NVYxOC43OTU5QzE2LjY4OTEgMTguNTcxNiAxNi43NTIyIDE4LjM0MzIgMTYuODk2OCAxOC4xNjgyQzE3LjA0MTMgMTcuOTkzMiAxNy4yNTM3IDE3Ljg4ODIgMTcuNDgwNSAxNy44Nzk0QzIwLjI0OTkgMTcuNjcwMiAy'@;
put 'Mi4wMDMyIDE2LjQ0NDkgMjIuMDAzMiAxNC4yNDMzVjE0LjE5MzVDMjIuMDAzMiAxMi4zMTA3IDIwLjUzODggMTAuNzk2NCAxOC4xODc4IDEwLjc5NjRDMTYuNTI3OCAxMC43OTgyIDE0Ljk1MTcgMTEuNTI2MSAxMy44NzQyIDEyLjc4ODhDMTMuNjgxNyAxMi45Njg0IDEzLjQzMDEgMTMuMDcx'@;
put 'MiAxMy4xNjY5IDEzLjA3NzdDMTIuOTE4NyAxMy4wODU4IDEyLjY3NzggMTIuOTkyOSAxMi40OTk0IDEyLjgyMDFDMTIuMzIxIDEyLjY0NzMgMTIuMjIwNCAxMi40MDk2IDEyLjIyMDUgMTIuMTYxMkMxMi4yMjY4IDExLjg5MjEgMTIuMzQxOCAxMS42MzY5IDEyLjUzOTMgMTEuNDUzOUMxMy45'@;
put 'NjM3IDkuNzk1ODUgMTYuMDUyIDguODU3NTcgMTguMjM3NiA4Ljg5MzY5QzIxLjc2NDEgOC44OTM2OSAyNC4wOTUzIDExLjA4NTMgMjQuMDk1MyAxNC4wNzM5WiIvPjxwYXRoIGQ9Ik0zMCAxMUMzMi43NjE0IDExIDM1IDguNzYxNDIgMzUgNkMzNSAzLjIzODU4IDMyLjc2MTQgMSAzMCAxQzI3'@;
put 'LjIzODYgMSAyNSAzLjIzODU4IDI1IDZDMjUgOC43NjE0MiAyNy4yMzg2IDExIDMwIDExWiIvPicsc29saWQ6JzxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNMTggMkM5LjE2MzQ0IDIgMiA5LjE2MzQ0IDIgMThDMiAyNi44MzY2IDkuMTYzNDQgMzQg'@;
put 'MTggMzRDMjYuODM2NiAzNCAzNCAyNi44MzY2IDM0IDE4QzM0IDEzLjc1NjUgMzIuMzE0MyA5LjY4Njg3IDI5LjMxMzcgNi42ODYyOUMyNi4zMTMxIDMuNjg1NzEgMjIuMjQzNSAyIDE4IDJaTTE3Ljc4IDI3Ljg1QzE3LjExMjYgMjcuODUgMTYuNTExIDI3LjQ0OCAxNi4yNTU2IDI2LjgzMTRD'@;
put 'MTYuMDAwMiAyNi4yMTQ5IDE2LjE0MTQgMjUuNTA1MiAxNi42MTMzIDI1LjAzMzNDMTcuMDg1MiAyNC41NjE0IDE3Ljc5NDkgMjQuNDIwMiAxOC40MTE0IDI0LjY3NTZDMTkuMDI4IDI0LjkzMSAxOS40MyAyNS41MzI2IDE5LjQzIDI2LjJDMTkuNDMgMjcuMTExMyAxOC42OTEzIDI3Ljg1IDE3'@;
put 'Ljc4IDI3Ljg1Wk0xOS4xNSAyMS41MVYxOS43OUMyMi42MSAxOS4yIDI0LjU4IDE3LjE2IDI0LjU4IDE0LjExQzI0LjU4IDEwLjgxIDIyIDguNTEgMTguMyA4LjUxQzE2LjAwMDUgOC40NzQ1MiAxMy44MDMzIDkuNDU5NTYgMTIuMyAxMS4yQzEyLjAzMDQgMTEuNDYzNiAxMS44NzU5IDExLjgy'@;
put 'MyAxMS44NyAxMi4yQzExLjg4MyAxMi43NTE2IDEyLjIyOCAxMy4yNDA2IDEyLjc0MzIgMTMuNDM4QzEzLjI1ODUgMTMuNjM1MyAxMy44NDE5IDEzLjUwMTggMTQuMjIgMTMuMUMxNS4yMDkyIDExLjkwNjkgMTYuNjcwNCAxMS4yMDU2IDE4LjIyIDExLjE4QzIwLjI0IDExLjE4IDIxLjY1IDEy'@;
put 'LjQyIDIxLjY1IDE0LjI1QzIxLjY1IDE2LjggMTkuMDQgMTcuMzggMTcuNDcgMTcuNUMxNy4xNDQ4IDE3LjUxNzUgMTYuODQwOSAxNy42Njc0IDE2LjYyOTMgMTcuOTE1QzE2LjQxNzYgMTguMTYyNSAxNi4zMTY3IDE4LjQ4NiAxNi4zNSAxOC44MVYyMS41N0MxNi4zNjA0IDIxLjkyNzIgMTYu'@;
put 'NTEzMSAyMi4yNjU1IDE2Ljc3NDEgMjIuNTA5NkMxNy4wMzUxIDIyLjc1MzcgMTcuMzgyOSAyMi44ODM1IDE3Ljc0IDIyLjg3SDE3Ljg1QzE4LjU3NTMgMjIuODMyOSAxOS4xNDU2IDIyLjIzNjIgMTkuMTUgMjEuNTFaIi8+Jyxzb2xpZEJhZGdlZDonPHBhdGggZmlsbC1ydWxlPSJldmVub2Rk'@;
put 'IiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0zMy4wMDEzIDEyLjc2ODlDMzAuMTY1OSAxNC4wNjg4IDI2LjgyMTIgMTMuNDY3OSAyNC42MTU2IDExLjI2MjNDMjIuNDEwMSA5LjA1Njc0IDIxLjgwOTEgNS43MTIgMjMuMTA5IDIuODc2NjNDMTYuMDY0OSAwLjQ0MDk0NiA4LjI3MTk5IDMuMTky'@;
put 'MDUgNC4zMTgyMyA5LjUxMDI5QzAuMzY0NDc2IDE1LjgyODUgMS4yOTczNiAyNC4wMzk5IDYuNTY3NjcgMjkuMzEwM0MxMS44MzggMzQuNTgwNiAyMC4wNDk0IDM1LjUxMzUgMjYuMzY3NiAzMS41NTk3QzMyLjY4NTkgMjcuNjA1OSAzNS40MzcgMTkuODEzMSAzMy4wMDEzIDEyLjc2ODlaTTE3'@;
put 'LjcxOTYgMjcuNzEyQzE3LjA1NDcgMjcuNzEyIDE2LjQ1NTQgMjcuMzExNSAxNi4yMDA5IDI2LjY5NzNDMTUuOTQ2NSAyNi4wODMgMTYuMDg3MiAyNS4zNzYgMTYuNTU3MyAyNC45MDU5QzE3LjAyNzQgMjQuNDM1OCAxNy43MzQ0IDI0LjI5NTIgMTguMzQ4NiAyNC41NDk2QzE4Ljk2MjggMjQu'@;
put 'ODA0IDE5LjM2MzMgMjUuNDAzNCAxOS4zNjMzIDI2LjA2ODJDMTkuMzc0IDI2LjUxMSAxOS4yMDU2IDI2LjkzOTQgMTguODk2MiAyNy4yNTY0QzE4LjU4NjcgMjcuNTczMyAxOC4xNjI1IDI3Ljc1MTkgMTcuNzE5NiAyNy43NTE4VjI3LjcxMlpNMTkuMDg0NCAyMS4zOTZWMTkuNzIyNEMyMi41'@;
put 'MzEyIDE5LjEzNDcgMjQuNDkzNyAxNy4xMDI0IDI0LjQ5MzcgMTQuMDI0MUMyNC40OTM3IDEwLjczNjcgMjEuOTIzNSA4LjQ0NTQgMTguMjM3NiA4LjQ0NTRDMTUuOTQ2OCA4LjQxMDA2IDEzLjc1OCA5LjM5MTM2IDEyLjI2MDQgMTEuMTI1MkMxMS45OTE4IDExLjM4NzggMTEuODM3OSAxMS43'@;
put 'NDU4IDExLjgzMiAxMi4xMjE0QzExLjg0NSAxMi42NzA5IDEyLjE4ODYgMTMuMTU4MSAxMi43MDE5IDEzLjM1NDdDMTMuMjE1MiAxMy41NTEyIDEzLjc5NjQgMTMuNDE4MiAxNC4xNzMxIDEzLjAxOEMxNS4xNTg2IDExLjgyOTQgMTYuNjE0MSAxMS4xMzA3IDE4LjE1NzkgMTEuMTA1M0MyMC4x'@;
put 'NzAyIDExLjEwNTMgMjEuNTc0OSAxMi4zNDA2IDIxLjU3NDkgMTQuMTYzNkMyMS41NzQ5IDE2LjcwMzkgMTguOTc0OCAxNy4yODE3IDE3LjQxMDcgMTcuNDAxM0MxNy4wODY3IDE3LjQxODYgMTYuNzg0IDE3LjU2ODEgMTYuNTczMiAxNy44MTQ3QzE2LjM2MjMgMTguMDYxMyAxNi4yNjE4IDE4'@;
put 'LjM4MzUgMTYuMjk1IDE4LjcwNjNWMjEuNDU1OEMxNi4zMDU0IDIxLjgxMTcgMTYuNDU3NSAyMi4xNDg3IDE2LjcxNzUgMjIuMzkxOUMxNi45Nzc1IDIyLjYzNTEgMTcuMzIzOSAyMi43NjQzIDE3LjY3OTcgMjIuNzUwOUgxNy43ODkzQzE4LjUxMTggMjIuNzEzOSAxOS4wOCAyMi4xMTk1IDE5'@;
put 'LjA4NDQgMjEuMzk2WiIvPjxwYXRoIGQ9Ik0zMCAxMUMzMi43NjE0IDExIDM1IDguNzYxNDIgMzUgNkMzNSAzLjIzODU4IDMyLjc2MTQgMSAzMCAxQzI3LjIzODYgMSAyNSAzLjIzODU4IDI1IDZDMjUgOC43NjE0MiAyNy4yMzg2IDExIDMwIDExWiIvPid9XSxHT2U9WyJpbmZvLXN0YW5kYXJk'@;
put 'Iix7b3V0bGluZTonPHBhdGggZD0iTTIgMThDMiAyNi44NCA5LjE2IDM0IDE4IDM0QzIyLjI0IDM0IDI2LjMxIDMyLjMxIDI5LjMxIDI5LjMxQzMyLjMxIDI2LjMxIDM0IDIyLjI0IDM0IDE4QzM0IDkuMTYgMjYuODQgMiAxOCAyQzkuMTYgMiAyIDkuMTYgMiAxOFpNNCAxOEM0IDEwLjI3IDEw'@;
put 'LjI3IDQgMTggNEMyNS43MyA0IDMyIDEwLjI3IDMyIDE4QzMyIDI1LjczIDI1LjczIDMyIDE4IDMyQzEwLjI3IDMyIDQgMjUuNzMgNCAxOFpNMjEgMjVIMTlWMTRIMTZDMTUuNDUgMTQgMTUgMTQuNDUgMTUgMTVDMTUgMTUuNTUgMTUuNDUgMTYgMTYgMTZIMTdWMjVIMTVDMTQuNDUgMjUgMTQg'@;
put 'MjUuNDUgMTQgMjZDMTQgMjYuNTUgMTQuNDUgMjcgMTUgMjdIMjFDMjEuNTUgMjcgMjIgMjYuNTUgMjIgMjZDMjIgMjUuNDUgMjEuNTUgMjUgMjEgMjVaTTE5LjM3IDEwLjQ1QzE5LjM3IDExLjIyIDE4Ljc0IDExLjg1IDE3Ljk3IDExLjg1QzE3LjIgMTEuODUgMTYuNTcgMTEuMjIgMTYuNTcg'@;
put 'MTAuNDVDMTYuNTcgOS42OCAxNy4yIDkuMDUgMTcuOTcgOS4wNUMxOC43NCA5LjA1IDE5LjM3IDkuNjggMTkuMzcgMTAuNDVaIi8+Jyxzb2xpZDonPHBhdGggZD0iTTE4IDJDOS4xNiAyIDIgOS4xNiAyIDE4QzIgMjYuODQgOS4xNiAzNCAxOCAzNEMyMi4yNCAzNCAyNi4zMSAzMi4zMSAyOS4z'@;
put 'MSAyOS4zMUMzMi4zMSAyNi4zMSAzNCAyMi4yNCAzNCAxOEMzNCA5LjE2IDI2Ljg0IDIgMTggMlpNMTcuOTcgOC44NUMxOC44NSA4Ljg1IDE5LjU3IDkuNTcgMTkuNTcgMTAuNDVDMTkuNTcgMTEuMzMgMTguODUgMTIuMDUgMTcuOTcgMTIuMDVDMTcuMDkgMTIuMDUgMTYuMzcgMTEuMzMgMTYu'@;
put 'MzcgMTAuNDVDMTYuMzcgOS41NyAxNy4wOSA4Ljg1IDE3Ljk3IDguODVaTTIxIDI3LjJIMTVDMTQuMzQgMjcuMiAxMy44IDI2LjY2IDEzLjggMjZDMTMuOCAyNS4zNCAxNC4zNCAyNC44IDE1IDI0LjhIMTYuOFYxNi4ySDE2QzE1LjM0IDE2LjIgMTQuOCAxNS42NiAxNC44IDE1QzE0LjggMTQu'@;
put 'MzQgMTUuMzQgMTMuOCAxNiAxMy44SDE5LjJWMjQuOEgyMUMyMS42NiAyNC44IDIyLjIgMjUuMzQgMjIuMiAyNkMyMi4yIDI2LjY2IDIxLjY2IDI3LjIgMjEgMjcuMloiLz4nfV0sJE9lPVsibm90ZSIse291dGxpbmU6JzxwYXRoIGQ9Ik0yOCwzMEg2VjhIMTkuMjJsMi0ySDZBMiwyLDAsMCww'@;
put 'LDQsOFYzMGEyLDIsMCwwLDAsMiwySDI4YTIsMiwwLDAsMCwyLTJWMTVsLTIsMloiLz48cGF0aCBkPSJNMzMuNTMsNS44NCwzMC4xNiwyLjQ3YTEuNjEsMS42MSwwLDAsMC0yLjI4LDBMMTQuMTcsMTYuMjZsLTEuMTEsNC44MUExLjYxLDEuNjEsMCwwLDAsMTQuNjMsMjMsMS42OSwxLjY5LDAs'@;
put 'MCwwLDE1LDIzbDQuODUtMS4wN0wzMy41Myw4LjEyQTEuNjEsMS42MSwwLDAsMCwzMy41Myw1Ljg0Wk0xOC44MSwyMC4wOGwtMy42Ni44MUwxNiwxNy4yNiwyNi4zMiw2Ljg3bDIuODIsMi44MlpNMzAuMjcsOC41NiwyNy40NSw1Ljc0LDI5LDQuMTYsMzEuODQsN1oiLz4nLHNvbGlkOic8cGF0'@;
put 'aCBkPSJNMzMsNi40LDI5LjMsMi43YTEuNzEsMS43MSwwLDAsMC0yLjM2LDBMMjMuNjUsNkg2QTIsMiwwLDAsMCw0LDhWMzBhMiwyLDAsMCwwLDIsMkgyOGEyLDIsMCwwLDAsMi0yVjExLjc2bDMtM0ExLjY3LDEuNjcsMCwwLDAsMzMsNi40Wk0xOC44MywyMC4xM2wtNC4xOS45MywxLTQuMTUs'@;
put 'OS41NS05LjU3LDMuMjMsMy4yM1pNMjkuNSw5LjQzLDI2LjI3LDYuMmwxLjg1LTEuODUsMy4yMywzLjIzWiIvPid9XSxsWT1bInN1Y2Nlc3Mtc3RhbmRhcmQiLHtvdXRsaW5lOic8cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZD0iTTE4IDJDOS4xNjM0NCAy'@;
put 'IDIgOS4xNjM0NCAyIDE4QzIgMjYuODM2NiA5LjE2MzQ0IDM0IDE4IDM0QzI2LjgzNjYgMzQgMzQgMjYuODM2NiAzNCAxOEMzNCAxMy43NTY1IDMyLjMxNDMgOS42ODY4NyAyOS4zMTM3IDYuNjg2MjlDMjYuMzEzMSAzLjY4NTcxIDIyLjI0MzUgMiAxOCAyWk0xOCAzMkMxMC4yNjggMzIgNCAy'@;
put 'NS43MzIgNCAxOEM0IDEwLjI2OCAxMC4yNjggNCAxOCA0QzI1LjczMiA0IDMyIDEwLjI2OCAzMiAxOEMzMiAyMS43MTMgMzAuNTI1IDI1LjI3NCAyNy44OTk1IDI3Ljg5OTVDMjUuMjc0IDMwLjUyNSAyMS43MTMgMzIgMTggMzJaTTI2LjU5IDEyLjFDMjYuOTggMTEuNzEyMyAyNy42MSAxMS43'@;
put 'MTIzIDI4IDEyLjFDMjguMTg5MyAxMi4yODc4IDI4LjI5NTggMTIuNTQzNCAyOC4yOTU4IDEyLjgxQzI4LjI5NTggMTMuMDc2NiAyOC4xODkzIDEzLjMzMjIgMjggMTMuNTJMMTUuNDkgMjZMOCAxOC41M0M3LjYxODkyIDE4LjExODUgNy42NDM1NSAxNy40NzYxIDguMDU1IDE3LjA5NUM4LjQ2'@;
put 'NjQ1IDE2LjcxMzkgOS4xMDg5MiAxNi43Mzg1IDkuNDkgMTcuMTVMMTUuNDkgMjMuMTVMMjYuNTkgMTIuMVoiLz4nLHNvbGlkOic8cGF0aCBkPSJNMjkuMzEgNi42OUMyNi4zMSAzLjY5IDIyLjI0IDIgMTggMkM5LjE2IDIgMiA5LjE2IDIgMThDMiAyNi44NCA5LjE2IDM0IDE4IDM0QzI2Ljg0'@;
put 'IDM0IDM0IDI2Ljg0IDM0IDE4QzM0IDEzLjc2IDMyLjMxIDkuNjkgMjkuMzEgNi42OVpNMjguMTQgMTMuNjRMMTUuNjMgMjYuMTJMMTUuNDkgMjYuMjZMMTUuMzUgMjYuMTJMNy44NSAxOC42NEM3LjM5IDE4LjE1IDcuNDIgMTcuMzggNy45MiAxNi45MkM4LjE1IDE2LjcxIDguNDQgMTYuNiA4'@;
put 'Ljc1IDE2LjZDOS4wOSAxNi42IDkuNDEgMTYuNzQgOS42NCAxNi45OEwxNS41IDIyLjg0TDI2LjQ2IDExLjkzQzI2LjY5IDExLjcgMjYuOTkgMTEuNTggMjcuMzEgMTEuNThDMjcuNjMgMTEuNTggMjcuOTMgMTEuNyAyOC4xNiAxMS45M0MyOC4zOSAxMi4xNSAyOC41MSAxMi40NiAyOC41MSAx'@;
put 'Mi43OEMyOC41MSAxMy4xIDI4LjM4IDEzLjQxIDI4LjE2IDEzLjYzTDI4LjE0IDEzLjY0WiIvPid9XSxLT2U9WyJ3YXJuaW5nLXN0YW5kYXJkIix7b3V0bGluZTonPHBhdGggZD0iTTE4LjAwMDEgMjIuOTkzMkMxOC41NTAxIDIyLjk5MzIgMTkuMDAwMSAyMi41NDM0IDE5LjAwMDEgMjEuOTkz'@;
put 'NlYxMC45OTc1QzE5LjAwMDEgMTAuNDQ3NyAxOC41NTAxIDkuOTk3ODYgMTguMDAwMSA5Ljk5Nzg2QzE3LjQ1MDEgOS45OTc4NiAxNy4wMDAxIDEwLjQ0NzcgMTcuMDAwMSAxMC45OTc1VjIxLjk5MzZDMTcuMDAwMSAyMi41NDM0IDE3LjQ1MDEgMjIuOTkzMiAxOC4wMDAxIDIyLjk5MzJaTTMz'@;
put 'LjU2MDEgMjcuMjExN0wyMC43ODAxIDUuNTc5NDRDMjAuMjAwMSA0LjU4OTc5IDE5LjE2MDEgNCAxOC4wMDAxIDRDMTYuODQwMSA0IDE1LjgwMDEgNC41ODk3OSAxNS4yMjAxIDUuNTc5NDRMMi40NDAxIDI3LjIxMTdDMS44NTAxIDI4LjIxMTQgMS44NTAxIDI5LjQwMDkgMi40MzAxIDMwLjQw'@;
put 'MDZDMy4wMTAxIDMxLjQwMDIgNC4wNjAxIDMyIDUuMjIwMSAzMkgzMC43NzAxQzMxLjk0MDEgMzIgMzIuOTgwMSAzMS40MDAyIDMzLjU2MDEgMzAuNDAwNkMzNC4xNDAxIDI5LjQwMDkgMzQuMTQwMSAyOC4yMTE0IDMzLjU1MDEgMjcuMjExN0gzMy41NjAxWk0zMS44MTAxIDI5LjQwMDlDMzEu'@;
put 'NzEwMSAyOS41ODA5IDMxLjQwMDEgMjkuOTkwNyAzMC43ODAxIDI5Ljk5MDdINS4yMzAxQzQuNjEwMSAyOS45OTA3IDQuMzAwMSAyOS41ODA5IDQuMjAwMSAyOS40MDA5QzQuMTAwMSAyOS4yMjEgMy44OTAxIDI4Ljc1MTIgNC4yMDAxIDI4LjIzMTNMMTYuOTgwMSA2LjU4OTA4QzE3LjI5MDEg'@;
put 'Ni4wNjkyNiAxNy44MDAxIDYuMDA5MjggMTguMDAwMSA2LjAwOTI4QzE4LjIwMDEgNi4wMDkyOCAxOC43MTAxIDYuMDY5MjYgMTkuMDIwMSA2LjU4OTA4TDMxLjc5MDEgMjguMjIxM0MzMi4xMDAxIDI4Ljc1MTIgMzEuOTAwMSAyOS4yMjEgMzEuNzkwMSAyOS4zOTA5TDMxLjgxMDEgMjkuNDAw'@;
put 'OVpNMTguMDEwMSAyNS4wMDI1QzE3LjI4MDEgMjUuMDAyNSAxNi42ODAxIDI1LjYwMjMgMTYuNjgwMSAyNi4zMzJDMTYuNjgwMSAyNy4wNjE4IDE3LjI4MDEgMjcuNjYxNSAxOC4wMTAxIDI3LjY2MTVDMTguNzQwMSAyNy42NjE1IDE5LjM0MDEgMjcuMDYxOCAxOS4zNDAxIDI2LjMzMkMxOS4z'@;
put 'NDAxIDI1LjYwMjMgMTguNzQwMSAyNS4wMDI1IDE4LjAxMDEgMjUuMDAyNVoiLz4nLHNvbGlkOic8cGF0aCBkPSJNMzMuNTYwMSAyNy4yMkwyMC43ODAxIDUuNThDMjAuMjAwMSA0LjU5IDE5LjE2MDEgNCAxOC4wMDAxIDRDMTYuODQwMSA0IDE1LjgwMDEgNC41OSAxNS4yMjAxIDUuNThMMi40'@;
put 'NDAwNiAyNy4yMkMxLjg1MDA2IDI4LjIyIDEuODUwMDYgMjkuNDEgMi40NDAwNiAzMC40MUMzLjAyMDA2IDMxLjQxIDQuMDcwMDYgMzIuMDEgNS4yMzAwNiAzMi4wMUgzMC43ODAxQzMxLjk1MDEgMzIuMDEgMzIuOTkwMSAzMS40MSAzMy41NzAxIDMwLjQxQzM0LjE1MDEgMjkuNDEgMzQuMTUw'@;
put 'MSAyOC4yMiAzMy41NjAxIDI3LjIyWk0xNi45MDAxIDExQzE2LjkwMDEgMTAuMzkgMTcuMzkwMSA5LjkgMTguMDAwMSA5LjlDMTguNjEwMSA5LjkgMTkuMTAwMSAxMC4zOSAxOS4xMDAxIDExVjIyQzE5LjEwMDEgMjIuNjEgMTguNjEwMSAyMy4xIDE4LjAwMDEgMjMuMUMxNy4zOTAxIDIzLjEg'@;
put 'MTYuOTAwMSAyMi42MSAxNi45MDAxIDIyVjExWk0xOC4wMDAxIDI3Ljc2QzE3LjIxMDEgMjcuNzYgMTYuNTcwMSAyNy4xMiAxNi41NzAxIDI2LjMzQzE2LjU3MDEgMjUuNTQgMTcuMjEwMSAyNC45IDE4LjAwMDEgMjQuOUMxOC43OTAxIDI0LjkgMTkuNDMwMSAyNS41NCAxOS40MzAxIDI2LjMz'@;
put 'QzE5LjQzMDEgMjcuMTIgMTguNzkwMSAyNy43NiAxOC4wMDAxIDI3Ljc2WiIvPid9XSxxT2U9WyJjaXJjbGUiLHtvdXRsaW5lOic8cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZD0iTTQgMThDNCAxMC4yNjggMTAuMjY4IDQgMTggNEMyNS43MzIgNCAzMiAx'@;
put 'MC4yNjggMzIgMThDMzIgMjUuNzMyIDI1LjczMiAzMiAxOCAzMkMxMC4yNjggMzIgNCAyNS43MzIgNCAxOFpNNiAxOEM2IDI0LjYyNzQgMTEuMzcyNiAzMCAxOCAzMEMyMS4xODI2IDMwIDI0LjIzNDggMjguNzM1NyAyNi40ODUzIDI2LjQ4NTNDMjguNzM1NyAyNC4yMzQ4IDMwIDIxLjE4MjYg'@;
put 'MzAgMThDMzAgMTEuMzcyNiAyNC42Mjc0IDYgMTggNkMxMS4zNzI2IDYgNiAxMS4zNzI2IDYgMThaIi8+Jyxzb2xpZDonPHBhdGggZD0iTTE4IDRDMTAuMjY4IDQgNCAxMC4yNjggNCAxOEM0IDI1LjczMiAxMC4yNjggMzIgMTggMzJDMjUuNzMyIDMyIDMyIDI1LjczMiAzMiAxOEMzMiAxMC4y'@;
put 'NjggMjUuNzMyIDQgMTggNFoiLz4nfV0sWE9lPVsiZG90LWNpcmNsZSIse291dGxpbmU6JzxwYXRoIGQ9Ik0xOCAxMUMxOS4zODQ1IDExIDIwLjczNzkgMTEuNDEwNSAyMS44ODkgMTIuMTc5N0MyMy4wNDAxIDEyLjk0ODkgMjMuOTM3NCAxNC4wNDIxIDI0LjQ2NzIgMTUuMzIxMkMyNC45OTcg'@;
put 'MTYuNjAwMyAyNS4xMzU2IDE4LjAwNzggMjQuODY1NSAxOS4zNjU2QzI0LjU5NTQgMjAuNzIzNSAyMy45Mjg3IDIxLjk3MDggMjIuOTQ5OCAyMi45NDk4QzIxLjk3MDggMjMuOTI4NyAyMC43MjM1IDI0LjU5NTQgMTkuMzY1NiAyNC44NjU1QzE4LjAwNzggMjUuMTM1NiAxNi42MDAzIDI0Ljk5'@;
put 'NyAxNS4zMjEyIDI0LjQ2NzJDMTQuMDQyMSAyMy45Mzc0IDEyLjk0ODkgMjMuMDQwMSAxMi4xNzk3IDIxLjg4OUMxMS40MTA1IDIwLjczNzkgMTEgMTkuMzg0NSAxMSAxOEMxMSAxNi4xNDM1IDExLjczNzUgMTQuMzYzIDEzLjA1MDMgMTMuMDUwM0MxNC4zNjMgMTEuNzM3NSAxNi4xNDM1IDEx'@;
put 'IDE4IDExWiIvPjxwYXRoIGQ9Ik0xOCAzNEMxNC44MzU1IDM0IDExLjc0MjEgMzMuMDYxNiA5LjExMDg4IDMxLjMwMzVDNi40Nzk3IDI5LjU0NTQgNC40Mjg5NCAyNy4wNDY2IDMuMjE3OTMgMjQuMTIyOUMyLjAwNjkzIDIxLjE5OTMgMS42OTAwOCAxNy45ODIzIDIuMzA3NDQgMTQuODc4NkMy'@;
put 'LjkyNDgxIDExLjc3NDkgNC40NDg2NiA4LjkyMzk0IDYuNjg2MyA2LjY4NjNDOC45MjM5NCA0LjQ0ODY2IDExLjc3NDkgMi45MjQ4MSAxNC44Nzg2IDIuMzA3NDRDMTcuOTgyMyAxLjY5MDA4IDIxLjE5OTMgMi4wMDY5MyAyNC4xMjI5IDMuMjE3OTNDMjcuMDQ2NiA0LjQyODk0IDI5LjU0NTQg'@;
put 'Ni40Nzk3IDMxLjMwMzUgOS4xMTA4OEMzMy4wNjE2IDExLjc0MjEgMzQgMTQuODM1NSAzNCAxOEMzNCAyMi4yNDM1IDMyLjMxNDMgMjYuMzEzMSAyOS4zMTM3IDI5LjMxMzdDMjYuMzEzMSAzMi4zMTQzIDIyLjI0MzUgMzQgMTggMzRaTTE4IDQuMDAwMDFDMTUuMjMxMSA0LjAwMDAxIDEyLjUy'@;
put 'NDMgNC44MjEwOSAxMC4yMjIgNi4zNTk0M0M3LjkxOTc0IDcuODk3NzcgNi4xMjUzMiAxMC4wODQzIDUuMDY1NjkgMTIuNjQyNEM0LjAwNjA3IDE1LjIwMDYgMy43Mjg4MiAxOC4wMTU1IDQuMjY5MDEgMjAuNzMxM0M0LjgwOTIxIDIzLjQ0NyA2LjE0MjU4IDI1Ljk0MTYgOC4xMDA1MSAyNy44'@;
put 'OTk1QzEwLjA1ODQgMjkuODU3NCAxMi41NTMgMzEuMTkwOCAxNS4yNjg3IDMxLjczMUMxNy45ODQ1IDMyLjI3MTIgMjAuNzk5NCAzMS45OTM5IDIzLjM1NzYgMzAuOTM0M0MyNS45MTU3IDI5Ljg3NDcgMjguMTAyMiAyOC4wODAzIDI5LjY0MDYgMjUuNzc4QzMxLjE3ODkgMjMuNDc1NyAzMiAy'@;
put 'MC43Njg5IDMyIDE4QzMyIDE0LjI4NyAzMC41MjUgMTAuNzI2IDI3Ljg5OTUgOC4xMDA1MUMyNS4yNzQgNS40NzUgMjEuNzEzIDQuMDAwMDEgMTggNC4wMDAwMVoiLz4nfV07ZnVuY3Rpb24gSk9lKGMsbCl7cmV0dXJuIGM9PT1sfWNsYXNzIGVQZSBleHRlbmRzIHF0e2NvbnN0cnVjdG9yKGws'@;
put 'YSl7c3VwZXIoKX1zY2hlZHVsZShsLGE9MCl7cmV0dXJuIHRoaXN9fWNvbnN0IHdMPXtzZXRJbnRlcnZhbChjLGwsLi4uYSl7Y29uc3R7ZGVsZWdhdGU6ZH09d0w7cmV0dXJuIGQ/LnNldEludGVydmFsP2Quc2V0SW50ZXJ2YWwoYyxsLC4uLmEpOnNldEludGVydmFsKGMsbCwuLi5hKX0sY2xl'@;
put 'YXJJbnRlcnZhbChjKXtjb25zdHtkZWxlZ2F0ZTpsfT13TDtyZXR1cm4obD8uY2xlYXJJbnRlcnZhbHx8Y2xlYXJJbnRlcnZhbCkoYyl9LGRlbGVnYXRlOnZvaWQgMH07Y2xhc3MgdVkgZXh0ZW5kcyBlUGV7Y29uc3RydWN0b3IobCxhKXtzdXBlcihsLGEpLHRoaXMuc2NoZWR1bGVyPWwsdGhp'@;
put 'cy53b3JrPWEsdGhpcy5wZW5kaW5nPSExfXNjaGVkdWxlKGwsYT0wKXt2YXIgZDtpZih0aGlzLmNsb3NlZClyZXR1cm4gdGhpczt0aGlzLnN0YXRlPWw7Y29uc3QgaD10aGlzLmlkLGY9dGhpcy5zY2hlZHVsZXI7cmV0dXJuIG51bGwhPWgmJih0aGlzLmlkPXRoaXMucmVjeWNsZUFzeW5jSWQo'@;
put 'ZixoLGEpKSx0aGlzLnBlbmRpbmc9ITAsdGhpcy5kZWxheT1hLHRoaXMuaWQ9bnVsbCE9PShkPXRoaXMuaWQpJiZ2b2lkIDAhPT1kP2Q6dGhpcy5yZXF1ZXN0QXN5bmNJZChmLHRoaXMuaWQsYSksdGhpc31yZXF1ZXN0QXN5bmNJZChsLGEsZD0wKXtyZXR1cm4gd0wuc2V0SW50ZXJ2YWwobC5m'@;
put 'bHVzaC5iaW5kKGwsdGhpcyksZCl9cmVjeWNsZUFzeW5jSWQobCxhLGQ9MCl7aWYobnVsbCE9ZCYmdGhpcy5kZWxheT09PWQmJiExPT09dGhpcy5wZW5kaW5nKXJldHVybiBhO251bGwhPWEmJndMLmNsZWFySW50ZXJ2YWwoYSl9ZXhlY3V0ZShsLGEpe2lmKHRoaXMuY2xvc2VkKXJldHVybiBu'@;
put 'ZXcgRXJyb3IoImV4ZWN1dGluZyBhIGNhbmNlbGxlZCBhY3Rpb24iKTt0aGlzLnBlbmRpbmc9ITE7Y29uc3QgZD10aGlzLl9leGVjdXRlKGwsYSk7aWYoZClyZXR1cm4gZDshMT09PXRoaXMucGVuZGluZyYmbnVsbCE9dGhpcy5pZCYmKHRoaXMuaWQ9dGhpcy5yZWN5Y2xlQXN5bmNJZCh0aGlz'@;
put 'LnNjaGVkdWxlcix0aGlzLmlkLG51bGwpKX1fZXhlY3V0ZShsLGEpe2xldCBoLGQ9ITE7dHJ5e3RoaXMud29yayhsKX1jYXRjaChmKXtkPSEwLGg9Znx8bmV3IEVycm9yKCJTY2hlZHVsZWQgYWN0aW9uIHRocmV3IGZhbHN5IGVycm9yIil9aWYoZClyZXR1cm4gdGhpcy51bnN1YnNjcmliZSgp'@;
put 'LGh9dW5zdWJzY3JpYmUoKXtpZighdGhpcy5jbG9zZWQpe2NvbnN0e2lkOmwsc2NoZWR1bGVyOmF9PXRoaXMse2FjdGlvbnM6ZH09YTt0aGlzLndvcms9dGhpcy5zdGF0ZT10aGlzLnNjaGVkdWxlcj1udWxsLHRoaXMucGVuZGluZz0hMSx1dChkLHRoaXMpLG51bGwhPWwmJih0aGlzLmlkPXRo'@;
put 'aXMucmVjeWNsZUFzeW5jSWQoYSxsLG51bGwpKSx0aGlzLmRlbGF5PW51bGwsc3VwZXIudW5zdWJzY3JpYmUoKX19fWNvbnN0IGRZPXtub3c6KCk9PihkWS5kZWxlZ2F0ZXx8RGF0ZSkubm93KCksZGVsZWdhdGU6dm9pZCAwfTtjbGFzcyBieHtjb25zdHJ1Y3RvcihsLGE9Yngubm93KXt0aGlz'@;
put 'LnNjaGVkdWxlckFjdGlvbkN0b3I9bCx0aGlzLm5vdz1hfXNjaGVkdWxlKGwsYT0wLGQpe3JldHVybiBuZXcgdGhpcy5zY2hlZHVsZXJBY3Rpb25DdG9yKHRoaXMsbCkuc2NoZWR1bGUoZCxhKX19Yngubm93PWRZLm5vdztjbGFzcyBoWSBleHRlbmRzIGJ4e2NvbnN0cnVjdG9yKGwsYT1ieC5u'@;
put 'b3cpe3N1cGVyKGwsYSksdGhpcy5hY3Rpb25zPVtdLHRoaXMuX2FjdGl2ZT0hMX1mbHVzaChsKXtjb25zdHthY3Rpb25zOmF9PXRoaXM7aWYodGhpcy5fYWN0aXZlKXJldHVybiB2b2lkIGEucHVzaChsKTtsZXQgZDt0aGlzLl9hY3RpdmU9ITA7ZG97aWYoZD1sLmV4ZWN1dGUobC5zdGF0ZSxs'@;
put 'LmRlbGF5KSlicmVha313aGlsZShsPWEuc2hpZnQoKSk7aWYodGhpcy5fYWN0aXZlPSExLGQpe2Zvcig7bD1hLnNoaWZ0KCk7KWwudW5zdWJzY3JpYmUoKTt0aHJvdyBkfX19Y29uc3QgQ0w9bmV3IGhZKHVZKSx0UGU9Q0w7ZnVuY3Rpb24gZm0oYyxsPUNMKXtyZXR1cm4gVmkoKGEsZCk9Pnts'@;
put 'ZXQgaD1udWxsLGY9bnVsbCx2PW51bGw7Y29uc3QgTT0oKT0+e2lmKGgpe2gudW5zdWJzY3JpYmUoKSxoPW51bGw7Y29uc3QgWj1mO2Y9bnVsbCxkLm5leHQoWil9fTtmdW5jdGlvbiBEKCl7Y29uc3QgWj12K2MscmU9bC5ub3coKTtpZihyZTxaKXJldHVybiBoPXRoaXMuc2NoZWR1bGUodm9p'@;
put 'ZCAwLFotcmUpLHZvaWQgZC5hZGQoaCk7TSgpfWEuc3Vic2NyaWJlKE5pKGQsWj0+e2Y9Wix2PWwubm93KCksaHx8KGg9bC5zY2hlZHVsZShELGMpLGQuYWRkKGgpKX0sKCk9PntNKCksZC5jb21wbGV0ZSgpfSx2b2lkIDAsKCk9PntmPWg9bnVsbH0pKX0pfWNvbnN0IG5QZT1bImFkZExpc3Rl'@;
put 'bmVyIiwicmVtb3ZlTGlzdGVuZXIiXSxyUGU9WyJhZGRFdmVudExpc3RlbmVyIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciJdLGlQZT1bIm9uIiwib2ZmIl07ZnVuY3Rpb24geGQoYyxsLGEsZCl7aWYoJGUoYSkmJihkPWEsYT12b2lkIDApLGQpcmV0dXJuIHhkKGMsbCxhKS5waXBlKHpaKGQpKTtj'@;
put 'b25zdFtoLGZdPWZ1bmN0aW9uIHNQZShjKXtyZXR1cm4gJGUoYy5hZGRFdmVudExpc3RlbmVyKSYmJGUoYy5yZW1vdmVFdmVudExpc3RlbmVyKX0oYyk/clBlLm1hcCh2PT5NPT5jW3ZdKGwsTSxhKSk6ZnVuY3Rpb24gYVBlKGMpe3JldHVybiAkZShjLmFkZExpc3RlbmVyKSYmJGUoYy5yZW1v'@;
put 'dmVMaXN0ZW5lcil9KGMpP25QZS5tYXAoRDBlKGMsbCkpOmZ1bmN0aW9uIG9QZShjKXtyZXR1cm4gJGUoYy5vbikmJiRlKGMub2ZmKX0oYyk/aVBlLm1hcChEMGUoYyxsKSk6W107aWYoIWgmJkJaKGMpKXJldHVybiBOMCh2PT54ZCh2LGwsYSkpKGwxKGMpKTtpZighaCl0aHJvdyBuZXcgVHlw'@;
put 'ZUVycm9yKCJJbnZhbGlkIGV2ZW50IHRhcmdldCIpO3JldHVybiBuZXcgWHQodj0+e2NvbnN0IE09KC4uLkQpPT52Lm5leHQoMTxELmxlbmd0aD9EOkRbMF0pO3JldHVybiBoKE0pLCgpPT5mKE0pfSl9ZnVuY3Rpb24gRDBlKGMsbCl7cmV0dXJuIGE9PmQ9PmNbYV0obCxkKX1jbGFzcyB5eCBl'@;
put 'eHRlbmRzIFdue2NvbnN0cnVjdG9yKGw9MS8wLGE9MS8wLGQ9ZFkpe3N1cGVyKCksdGhpcy5fYnVmZmVyU2l6ZT1sLHRoaXMuX3dpbmRvd1RpbWU9YSx0aGlzLl90aW1lc3RhbXBQcm92aWRlcj1kLHRoaXMuX2J1ZmZlcj1bXSx0aGlzLl9pbmZpbml0ZVRpbWVXaW5kb3c9ITAsdGhpcy5faW5m'@;
put 'aW5pdGVUaW1lV2luZG93PWE9PT0xLzAsdGhpcy5fYnVmZmVyU2l6ZT1NYXRoLm1heCgxLGwpLHRoaXMuX3dpbmRvd1RpbWU9TWF0aC5tYXgoMSxhKX1uZXh0KGwpe2NvbnN0e2lzU3RvcHBlZDphLF9idWZmZXI6ZCxfaW5maW5pdGVUaW1lV2luZG93OmgsX3RpbWVzdGFtcFByb3ZpZGVyOmYs'@;
put 'X3dpbmRvd1RpbWU6dn09dGhpczthfHwoZC5wdXNoKGwpLCFoJiZkLnB1c2goZi5ub3coKSt2KSksdGhpcy5fdHJpbUJ1ZmZlcigpLHN1cGVyLm5leHQobCl9X3N1YnNjcmliZShsKXt0aGlzLl90aHJvd0lmQ2xvc2VkKCksdGhpcy5fdHJpbUJ1ZmZlcigpO2NvbnN0IGE9dGhpcy5faW5uZXJT'@;
put 'dWJzY3JpYmUobCkse19pbmZpbml0ZVRpbWVXaW5kb3c6ZCxfYnVmZmVyOmh9PXRoaXMsZj1oLnNsaWNlKCk7Zm9yKGxldCB2PTA7djxmLmxlbmd0aCYmIWwuY2xvc2VkO3YrPWQ/MToyKWwubmV4dChmW3ZdKTtyZXR1cm4gdGhpcy5fY2hlY2tGaW5hbGl6ZWRTdGF0dXNlcyhsKSxhfV90cmlt'@;
put 'QnVmZmVyKCl7Y29uc3R7X2J1ZmZlclNpemU6bCxfdGltZXN0YW1wUHJvdmlkZXI6YSxfYnVmZmVyOmQsX2luZmluaXRlVGltZVdpbmRvdzpofT10aGlzLGY9KGg/MToyKSpsO2lmKGw8MS8wJiZmPGQubGVuZ3RoJiZkLnNwbGljZSgwLGQubGVuZ3RoLWYpLCFoKXtjb25zdCB2PWEubm93KCk7'@;
put 'bGV0IE09MDtmb3IobGV0IEQ9MTtEPGQubGVuZ3RoJiZkW0RdPD12O0QrPTIpTT1EO00mJmQuc3BsaWNlKDAsTSsxKX19fWZ1bmN0aW9uIGZZKGMsbCwuLi5hKXtpZighMD09PWwpcmV0dXJuIHZvaWQgYygpO2lmKCExPT09bClyZXR1cm47Y29uc3QgZD1uZXcgaHQoe25leHQ6KCk9PntkLnVu'@;
put 'c3Vic2NyaWJlKCksYygpfX0pO3JldHVybiBsMShsKC4uLmEpKS5zdWJzY3JpYmUoZCl9ZnVuY3Rpb24gSTBlKGMsbCxhKXtsZXQgZCxoPSExO3JldHVybiBjJiYib2JqZWN0Ij09dHlwZW9mIGM/KHtidWZmZXJTaXplOmQ9MS8wLHdpbmRvd1RpbWU6bD0xLzAscmVmQ291bnQ6aD0hMSxzY2hl'@;
put 'ZHVsZXI6YX09Yyk6ZD1jPz8xLzAsZnVuY3Rpb24gbFBlKGM9e30pe2NvbnN0e2Nvbm5lY3RvcjpsPSgoKT0+bmV3IFduKSxyZXNldE9uRXJyb3I6YT0hMCxyZXNldE9uQ29tcGxldGU6ZD0hMCxyZXNldE9uUmVmQ291bnRaZXJvOmg9ITB9PWM7cmV0dXJuIGY9PntsZXQgdixNLEQsWj0wLHJl'@;
put 'PSExLGNlPSExO2NvbnN0IGJlPSgpPT57TT8udW5zdWJzY3JpYmUoKSxNPXZvaWQgMH0sRWU9KCk9PntiZSgpLHY9RD12b2lkIDAscmU9Y2U9ITF9LEJlPSgpPT57Y29uc3QgcWU9djtFZSgpLHFlPy51bnN1YnNjcmliZSgpfTtyZXR1cm4gVmkoKHFlLHJ0KT0+e1orKywhY2UmJiFyZSYmYmUo'@;
put 'KTtjb25zdCBwdD1EPUQ/P2woKTtydC5hZGQoKCk9PntaLS0sMD09PVomJiFjZSYmIXJlJiYoTT1mWShCZSxoKSl9KSxwdC5zdWJzY3JpYmUocnQpLCF2JiZaPjAmJih2PW5ldyBodCh7bmV4dDpkdD0+cHQubmV4dChkdCksZXJyb3I6ZHQ9PntjZT0hMCxiZSgpLE09ZlkoRWUsYSxkdCkscHQu'@;
put 'ZXJyb3IoZHQpfSxjb21wbGV0ZTooKT0+e3JlPSEwLGJlKCksTT1mWShFZSxkKSxwdC5jb21wbGV0ZSgpfX0pLGwxKHFlKS5zdWJzY3JpYmUodikpfSkoZil9fSh7Y29ubmVjdG9yOigpPT5uZXcgeXgoZCxsLGEpLHJlc2V0T25FcnJvcjohMCxyZXNldE9uQ29tcGxldGU6ITEscmVzZXRPblJl'@;
put 'ZkNvdW50WmVybzpofSl9ZnVuY3Rpb24gX3goLi4uYyl7Y29uc3QgbD1qTShjKSxhPWZ1bmN0aW9uIFhNZShjLGwpe3JldHVybiJudW1iZXIiPT10eXBlb2YgalooYyk/Yy5wb3AoKTpsfShjLDEvMCksZD1jO3JldHVybiBkLmxlbmd0aD8xPT09ZC5sZW5ndGg/bDEoZFswXSk6ZXkoYSkoWXUo'@;
put 'ZCxsKSk6TTJ9dmFyIEFvPWZ1bmN0aW9uKGMpe3JldHVybiBjW2MuU3RhdGU9MF09IlN0YXRlIixjW2MuVHJhbnNpdGlvbj0xXT0iVHJhbnNpdGlvbiIsY1tjLlNlcXVlbmNlPTJdPSJTZXF1ZW5jZSIsY1tjLkdyb3VwPTNdPSJHcm91cCIsY1tjLkFuaW1hdGU9NF09IkFuaW1hdGUiLGNbYy5L'@;
put 'ZXlmcmFtZXM9NV09IktleWZyYW1lcyIsY1tjLlN0eWxlPTZdPSJTdHlsZSIsY1tjLlRyaWdnZXI9N109IlRyaWdnZXIiLGNbYy5SZWZlcmVuY2U9OF09IlJlZmVyZW5jZSIsY1tjLkFuaW1hdGVDaGlsZD05XT0iQW5pbWF0ZUNoaWxkIixjW2MuQW5pbWF0ZVJlZj0xMF09IkFuaW1hdGVSZWYi'@;
put 'LGNbYy5RdWVyeT0xMV09IlF1ZXJ5IixjW2MuU3RhZ2dlcj0xMl09IlN0YWdnZXIiLGN9KEFvfHx7fSk7Y29uc3QgaWc9IioiO2Z1bmN0aW9uIHloKGMsbCl7cmV0dXJue3R5cGU6QW8uVHJpZ2dlcixuYW1lOmMsZGVmaW5pdGlvbnM6bCxvcHRpb25zOnt9fX1mdW5jdGlvbiBNMChjLGw9bnVs'@;
put 'bCl7cmV0dXJue3R5cGU6QW8uQW5pbWF0ZSxzdHlsZXM6bCx0aW1pbmdzOmN9fWZ1bmN0aW9uIHVzKGMpe3JldHVybnt0eXBlOkFvLlN0eWxlLHN0eWxlczpjLG9mZnNldDpudWxsfX1mdW5jdGlvbiBTTChjLGwsYSl7cmV0dXJue3R5cGU6QW8uU3RhdGUsbmFtZTpjLHN0eWxlczpsLG9wdGlv'@;
put 'bnM6YX19ZnVuY3Rpb24gdVBlKGMpe3JldHVybnt0eXBlOkFvLktleWZyYW1lcyxzdGVwczpjfX1mdW5jdGlvbiBpdShjLGwsYT1udWxsKXtyZXR1cm57dHlwZTpBby5UcmFuc2l0aW9uLGV4cHI6YyxhbmltYXRpb246bCxvcHRpb25zOmF9fWNsYXNzIHd4e2NvbnN0cnVjdG9yKGw9MCxhPTAp'@;
put 'e3RoaXMuX29uRG9uZUZucz1bXSx0aGlzLl9vblN0YXJ0Rm5zPVtdLHRoaXMuX29uRGVzdHJveUZucz1bXSx0aGlzLl9vcmlnaW5hbE9uRG9uZUZucz1bXSx0aGlzLl9vcmlnaW5hbE9uU3RhcnRGbnM9W10sdGhpcy5fc3RhcnRlZD0hMSx0aGlzLl9kZXN0cm95ZWQ9ITEsdGhpcy5fZmluaXNo'@;
put 'ZWQ9ITEsdGhpcy5fcG9zaXRpb249MCx0aGlzLnBhcmVudFBsYXllcj1udWxsLHRoaXMudG90YWxUaW1lPWwrYX1fb25GaW5pc2goKXt0aGlzLl9maW5pc2hlZHx8KHRoaXMuX2ZpbmlzaGVkPSEwLHRoaXMuX29uRG9uZUZucy5mb3JFYWNoKGw9PmwoKSksdGhpcy5fb25Eb25lRm5zPVtdKX1v'@;
put 'blN0YXJ0KGwpe3RoaXMuX29yaWdpbmFsT25TdGFydEZucy5wdXNoKGwpLHRoaXMuX29uU3RhcnRGbnMucHVzaChsKX1vbkRvbmUobCl7dGhpcy5fb3JpZ2luYWxPbkRvbmVGbnMucHVzaChsKSx0aGlzLl9vbkRvbmVGbnMucHVzaChsKX1vbkRlc3Ryb3kobCl7dGhpcy5fb25EZXN0cm95Rm5z'@;
put 'LnB1c2gobCl9aGFzU3RhcnRlZCgpe3JldHVybiB0aGlzLl9zdGFydGVkfWluaXQoKXt9cGxheSgpe3RoaXMuaGFzU3RhcnRlZCgpfHwodGhpcy5fb25TdGFydCgpLHRoaXMudHJpZ2dlck1pY3JvdGFzaygpKSx0aGlzLl9zdGFydGVkPSEwfXRyaWdnZXJNaWNyb3Rhc2soKXtxdWV1ZU1pY3Jv'@;
put 'dGFzaygoKT0+dGhpcy5fb25GaW5pc2goKSl9X29uU3RhcnQoKXt0aGlzLl9vblN0YXJ0Rm5zLmZvckVhY2gobD0+bCgpKSx0aGlzLl9vblN0YXJ0Rm5zPVtdfXBhdXNlKCl7fXJlc3RhcnQoKXt9ZmluaXNoKCl7dGhpcy5fb25GaW5pc2goKX1kZXN0cm95KCl7dGhpcy5fZGVzdHJveWVkfHwo'@;
put 'dGhpcy5fZGVzdHJveWVkPSEwLHRoaXMuaGFzU3RhcnRlZCgpfHx0aGlzLl9vblN0YXJ0KCksdGhpcy5maW5pc2goKSx0aGlzLl9vbkRlc3Ryb3lGbnMuZm9yRWFjaChsPT5sKCkpLHRoaXMuX29uRGVzdHJveUZucz1bXSl9cmVzZXQoKXt0aGlzLl9zdGFydGVkPSExLHRoaXMuX2ZpbmlzaGVk'@;
put 'PSExLHRoaXMuX29uU3RhcnRGbnM9dGhpcy5fb3JpZ2luYWxPblN0YXJ0Rm5zLHRoaXMuX29uRG9uZUZucz10aGlzLl9vcmlnaW5hbE9uRG9uZUZuc31zZXRQb3NpdGlvbihsKXt0aGlzLl9wb3NpdGlvbj10aGlzLnRvdGFsVGltZT9sKnRoaXMudG90YWxUaW1lOjF9Z2V0UG9zaXRpb24oKXty'@;
put 'ZXR1cm4gdGhpcy50b3RhbFRpbWU/dGhpcy5fcG9zaXRpb24vdGhpcy50b3RhbFRpbWU6MX10cmlnZ2VyQ2FsbGJhY2sobCl7Y29uc3QgYT0ic3RhcnQiPT1sP3RoaXMuX29uU3RhcnRGbnM6dGhpcy5fb25Eb25lRm5zO2EuZm9yRWFjaChkPT5kKCkpLGEubGVuZ3RoPTB9fWNsYXNzIFIwZXtj'@;
put 'b25zdHJ1Y3RvcihsKXt0aGlzLl9vbkRvbmVGbnM9W10sdGhpcy5fb25TdGFydEZucz1bXSx0aGlzLl9maW5pc2hlZD0hMSx0aGlzLl9zdGFydGVkPSExLHRoaXMuX2Rlc3Ryb3llZD0hMSx0aGlzLl9vbkRlc3Ryb3lGbnM9W10sdGhpcy5wYXJlbnRQbGF5ZXI9bnVsbCx0aGlzLnRvdGFsVGlt'@;
put 'ZT0wLHRoaXMucGxheWVycz1sO2xldCBhPTAsZD0wLGg9MDtjb25zdCBmPXRoaXMucGxheWVycy5sZW5ndGg7MD09Zj9xdWV1ZU1pY3JvdGFzaygoKT0+dGhpcy5fb25GaW5pc2goKSk6dGhpcy5wbGF5ZXJzLmZvckVhY2godj0+e3Yub25Eb25lKCgpPT57KythPT1mJiZ0aGlzLl9vbkZpbmlz'@;
put 'aCgpfSksdi5vbkRlc3Ryb3koKCk9PnsrK2Q9PWYmJnRoaXMuX29uRGVzdHJveSgpfSksdi5vblN0YXJ0KCgpPT57KytoPT1mJiZ0aGlzLl9vblN0YXJ0KCl9KX0pLHRoaXMudG90YWxUaW1lPXRoaXMucGxheWVycy5yZWR1Y2UoKHYsTSk9Pk1hdGgubWF4KHYsTS50b3RhbFRpbWUpLDApfV9v'@;
put 'bkZpbmlzaCgpe3RoaXMuX2ZpbmlzaGVkfHwodGhpcy5fZmluaXNoZWQ9ITAsdGhpcy5fb25Eb25lRm5zLmZvckVhY2gobD0+bCgpKSx0aGlzLl9vbkRvbmVGbnM9W10pfWluaXQoKXt0aGlzLnBsYXllcnMuZm9yRWFjaChsPT5sLmluaXQoKSl9b25TdGFydChsKXt0aGlzLl9vblN0YXJ0Rm5z'@;
put 'LnB1c2gobCl9X29uU3RhcnQoKXt0aGlzLmhhc1N0YXJ0ZWQoKXx8KHRoaXMuX3N0YXJ0ZWQ9ITAsdGhpcy5fb25TdGFydEZucy5mb3JFYWNoKGw9PmwoKSksdGhpcy5fb25TdGFydEZucz1bXSl9b25Eb25lKGwpe3RoaXMuX29uRG9uZUZucy5wdXNoKGwpfW9uRGVzdHJveShsKXt0aGlzLl9v'@;
put 'bkRlc3Ryb3lGbnMucHVzaChsKX1oYXNTdGFydGVkKCl7cmV0dXJuIHRoaXMuX3N0YXJ0ZWR9cGxheSgpe3RoaXMucGFyZW50UGxheWVyfHx0aGlzLmluaXQoKSx0aGlzLl9vblN0YXJ0KCksdGhpcy5wbGF5ZXJzLmZvckVhY2gobD0+bC5wbGF5KCkpfXBhdXNlKCl7dGhpcy5wbGF5ZXJzLmZv'@;
put 'ckVhY2gobD0+bC5wYXVzZSgpKX1yZXN0YXJ0KCl7dGhpcy5wbGF5ZXJzLmZvckVhY2gobD0+bC5yZXN0YXJ0KCkpfWZpbmlzaCgpe3RoaXMuX29uRmluaXNoKCksdGhpcy5wbGF5ZXJzLmZvckVhY2gobD0+bC5maW5pc2goKSl9ZGVzdHJveSgpe3RoaXMuX29uRGVzdHJveSgpfV9vbkRlc3Ry'@;
put 'b3koKXt0aGlzLl9kZXN0cm95ZWR8fCh0aGlzLl9kZXN0cm95ZWQ9ITAsdGhpcy5fb25GaW5pc2goKSx0aGlzLnBsYXllcnMuZm9yRWFjaChsPT5sLmRlc3Ryb3koKSksdGhpcy5fb25EZXN0cm95Rm5zLmZvckVhY2gobD0+bCgpKSx0aGlzLl9vbkRlc3Ryb3lGbnM9W10pfXJlc2V0KCl7dGhp'@;
put 'cy5wbGF5ZXJzLmZvckVhY2gobD0+bC5yZXNldCgpKSx0aGlzLl9kZXN0cm95ZWQ9ITEsdGhpcy5fZmluaXNoZWQ9ITEsdGhpcy5fc3RhcnRlZD0hMX1zZXRQb3NpdGlvbihsKXtjb25zdCBhPWwqdGhpcy50b3RhbFRpbWU7dGhpcy5wbGF5ZXJzLmZvckVhY2goZD0+e2NvbnN0IGg9ZC50b3Rh'@;
put 'bFRpbWU/TWF0aC5taW4oMSxhL2QudG90YWxUaW1lKToxO2Quc2V0UG9zaXRpb24oaCl9KX1nZXRQb3NpdGlvbigpe2NvbnN0IGw9dGhpcy5wbGF5ZXJzLnJlZHVjZSgoYSxkKT0+bnVsbD09PWF8fGQudG90YWxUaW1lPmEudG90YWxUaW1lP2Q6YSxudWxsKTtyZXR1cm4gbnVsbCE9bD9sLmdl'@;
put 'dFBvc2l0aW9uKCk6MH1iZWZvcmVEZXN0cm95KCl7dGhpcy5wbGF5ZXJzLmZvckVhY2gobD0+e2wuYmVmb3JlRGVzdHJveSYmbC5iZWZvcmVEZXN0cm95KCl9KX10cmlnZ2VyQ2FsbGJhY2sobCl7Y29uc3QgYT0ic3RhcnQiPT1sP3RoaXMuX29uU3RhcnRGbnM6dGhpcy5fb25Eb25lRm5zO2Eu'@;
put 'Zm9yRWFjaChkPT5kKCkpLGEubGVuZ3RoPTB9fWxldCBnWTt0cnl7Z1k9dHlwZW9mIEludGw8InUiJiZJbnRsLnY4QnJlYWtJdGVyYXRvcn1jYXRjaHtnWT0hMX1sZXQgU3gsQ3g9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLl9wbGF0Zm9ybUlkPWEsdGhpcy5pc0Jyb3dzZXI9'@;
put 'dGhpcy5fcGxhdGZvcm1JZD90bCh0aGlzLl9wbGF0Zm9ybUlkKToib2JqZWN0Ij09dHlwZW9mIGRvY3VtZW50JiYhIWRvY3VtZW50LHRoaXMuRURHRT10aGlzLmlzQnJvd3NlciYmLyhlZGdlKS9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCksdGhpcy5UUklERU5UPXRoaXMuaXNCcm93c2Vy'@;
put 'JiYvKG1zaWV8dHJpZGVudCkvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpLHRoaXMuQkxJTks9dGhpcy5pc0Jyb3dzZXImJiEoIXdpbmRvdy5jaHJvbWUmJiFnWSkmJnR5cGVvZiBDU1M8InUiJiYhdGhpcy5FREdFJiYhdGhpcy5UUklERU5ULHRoaXMuV0VCS0lUPXRoaXMuaXNCcm93c2Vy'@;
put 'JiYvQXBwbGVXZWJLaXQvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpJiYhdGhpcy5CTElOSyYmIXRoaXMuRURHRSYmIXRoaXMuVFJJREVOVCx0aGlzLklPUz10aGlzLmlzQnJvd3NlciYmL2lQYWR8aVBob25lfGlQb2QvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkmJiEoIk1TU3RyZWFt'@;
put 'ImluIHdpbmRvdyksdGhpcy5GSVJFRk9YPXRoaXMuaXNCcm93c2VyJiYvKGZpcmVmb3h8bWluZWZpZWxkKS9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCksdGhpcy5BTkRST0lEPXRoaXMuaXNCcm93c2VyJiYvYW5kcm9pZC9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkmJiF0aGlzLlRS'@;
put 'SURFTlQsdGhpcy5TQUZBUkk9dGhpcy5pc0Jyb3dzZXImJi9zYWZhcmkvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpJiZ0aGlzLldFQktJVH1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKSh4cihpbykpfX1zdGF0aWN7dGhpcy5cdTAyNzVwcm92'@;
put 'PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KX19cmV0dXJuIGN9KSgpO2Z1bmN0aW9uIEF5KGMpe3JldHVybiBmdW5jdGlvbiBnUGUoKXtpZihudWxsPT1TeCYmdHlwZW9mIHdpbmRvdzwidSIpdHJ5e3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJ0'@;
put 'ZXN0IixudWxsLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSwicGFzc2l2ZSIse2dldDooKT0+U3g9ITB9KSl9ZmluYWxseXtTeD1TeHx8ITF9cmV0dXJuIFN4fSgpP2M6ISFjLmNhcHR1cmV9dmFyIF9wPWZ1bmN0aW9uKGMpe3JldHVybiBjW2MuTk9STUFMPTBdPSJOT1JNQUwiLGNbYy5ORUdB'@;
put 'VEVEPTFdPSJORUdBVEVEIixjW2MuSU5WRVJURUQ9Ml09IklOVkVSVEVEIixjfShfcHx8e30pO2xldCBNTCx1NyxtWTtmdW5jdGlvbiBNeCgpe2lmKCJvYmplY3QiIT10eXBlb2YgZG9jdW1lbnR8fCFkb2N1bWVudClyZXR1cm4gX3AuTk9STUFMO2lmKG51bGw9PU1MKXtjb25zdCBjPWRvY3Vt'@;
put 'ZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLGw9Yy5zdHlsZTtjLmRpcj0icnRsIixsLndpZHRoPSIxcHgiLGwub3ZlcmZsb3c9ImF1dG8iLGwudmlzaWJpbGl0eT0iaGlkZGVuIixsLnBvaW50ZXJFdmVudHM9Im5vbmUiLGwucG9zaXRpb249ImFic29sdXRlIjtjb25zdCBhPWRvY3VtZW50LmNy'@;
put 'ZWF0ZUVsZW1lbnQoImRpdiIpLGQ9YS5zdHlsZTtkLndpZHRoPSIycHgiLGQuaGVpZ2h0PSIxcHgiLGMuYXBwZW5kQ2hpbGQoYSksZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChjKSxNTD1fcC5OT1JNQUwsMD09PWMuc2Nyb2xsTGVmdCYmKGMuc2Nyb2xsTGVmdD0xLE1MPTA9PT1jLnNjcm9s'@;
put 'bExlZnQ/X3AuTkVHQVRFRDpfcC5JTlZFUlRFRCksYy5yZW1vdmUoKX1yZXR1cm4gTUx9ZnVuY3Rpb24gTzBlKGMpe2lmKGZ1bmN0aW9uIHZQZSgpe2lmKG51bGw9PW1ZKXtjb25zdCBjPXR5cGVvZiBkb2N1bWVudDwidSI/ZG9jdW1lbnQuaGVhZDpudWxsO21ZPSEoIWN8fCFjLmNyZWF0ZVNo'@;
put 'YWRvd1Jvb3QmJiFjLmF0dGFjaFNoYWRvdyl9cmV0dXJuIG1ZfSgpKXtjb25zdCBsPWMuZ2V0Um9vdE5vZGU/Yy5nZXRSb290Tm9kZSgpOm51bGw7aWYodHlwZW9mIFNoYWRvd1Jvb3Q8InUiJiZTaGFkb3dSb290JiZsIGluc3RhbmNlb2YgU2hhZG93Um9vdClyZXR1cm4gbH1yZXR1cm4gbnVs'@;
put 'bH1mdW5jdGlvbiB4TChjKXtyZXR1cm4gYy5jb21wb3NlZFBhdGg/Yy5jb21wb3NlZFBhdGgoKVswXTpjLnRhcmdldH1sZXQgalBlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5fcGxhdGZvcm09YX1pc0Rpc2FibGVkKGEpe3JldHVybiBhLmhhc0F0dHJpYnV0ZSgiZGlzYWJs'@;
put 'ZWQiKX1pc1Zpc2libGUoYSl7cmV0dXJuIGZ1bmN0aW9uIFVQZShjKXtyZXR1cm4hIShjLm9mZnNldFdpZHRofHxjLm9mZnNldEhlaWdodHx8ImZ1bmN0aW9uIj09dHlwZW9mIGMuZ2V0Q2xpZW50UmVjdHMmJmMuZ2V0Q2xpZW50UmVjdHMoKS5sZW5ndGgpfShhKSYmInZpc2libGUiPT09Z2V0'@;
put 'Q29tcHV0ZWRTdHlsZShhKS52aXNpYmlsaXR5fWlzVGFiYmFibGUoYSl7aWYoIXRoaXMuX3BsYXRmb3JtLmlzQnJvd3NlcilyZXR1cm4hMTtjb25zdCBkPWZ1bmN0aW9uIHpQZShjKXt0cnl7cmV0dXJuIGMuZnJhbWVFbGVtZW50fWNhdGNoe3JldHVybiBudWxsfX0oZnVuY3Rpb24gWFBlKGMp'@;
put 'e3JldHVybiBjLm93bmVyRG9jdW1lbnQmJmMub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlld3x8d2luZG93fShhKSk7aWYoZCYmKC0xPT09TjBlKGQpfHwhdGhpcy5pc1Zpc2libGUoZCkpKXJldHVybiExO2xldCBoPWEubm9kZU5hbWUudG9Mb3dlckNhc2UoKSxmPU4wZShhKTtyZXR1cm4gYS5o'@;
put 'YXNBdHRyaWJ1dGUoImNvbnRlbnRlZGl0YWJsZSIpPy0xIT09ZjohKCJpZnJhbWUiPT09aHx8Im9iamVjdCI9PT1ofHx0aGlzLl9wbGF0Zm9ybS5XRUJLSVQmJnRoaXMuX3BsYXRmb3JtLklPUyYmIWZ1bmN0aW9uIEtQZShjKXtsZXQgbD1jLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCksYT0iaW5w'@;
put 'dXQiPT09bCYmYy50eXBlO3JldHVybiJ0ZXh0Ij09PWF8fCJwYXNzd29yZCI9PT1hfHwic2VsZWN0Ij09PWx8fCJ0ZXh0YXJlYSI9PT1sfShhKSkmJigiYXVkaW8iPT09aD8hIWEuaGFzQXR0cmlidXRlKCJjb250cm9scyIpJiYtMSE9PWY6InZpZGVvIj09PWg/LTEhPT1mJiYobnVsbCE9PWZ8'@;
put 'fHRoaXMuX3BsYXRmb3JtLkZJUkVGT1h8fGEuaGFzQXR0cmlidXRlKCJjb250cm9scyIpKTphLnRhYkluZGV4Pj0wKX1pc0ZvY3VzYWJsZShhLGQpe3JldHVybiBmdW5jdGlvbiBxUGUoYyl7cmV0dXJuIWZ1bmN0aW9uIFdQZShjKXtyZXR1cm4gZnVuY3Rpb24gR1BlKGMpe3JldHVybiJpbnB1'@;
put 'dCI9PWMubm9kZU5hbWUudG9Mb3dlckNhc2UoKX0oYykmJiJoaWRkZW4iPT1jLnR5cGV9KGMpJiYoZnVuY3Rpb24gWlBlKGMpe2xldCBsPWMubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtyZXR1cm4iaW5wdXQiPT09bHx8InNlbGVjdCI9PT1sfHwiYnV0dG9uIj09PWx8fCJ0ZXh0YXJlYSI9PT1s'@;
put 'fShjKXx8ZnVuY3Rpb24gWVBlKGMpe3JldHVybiBmdW5jdGlvbiAkUGUoYyl7cmV0dXJuImEiPT1jLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCl9KGMpJiZjLmhhc0F0dHJpYnV0ZSgiaHJlZiIpfShjKXx8Yy5oYXNBdHRyaWJ1dGUoImNvbnRlbnRlZGl0YWJsZSIpfHxIMGUoYykpfShhKSYmIXRo'@;
put 'aXMuaXNEaXNhYmxlZChhKSYmKGQ/Lmlnbm9yZVZpc2liaWxpdHl8fHRoaXMuaXNWaXNpYmxlKGEpKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKSh4cihDeCkpfX1zdGF0aWN7dGhpcy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5c'@;
put 'dTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KX19cmV0dXJuIGN9KSgpO2Z1bmN0aW9uIEgwZShjKXtpZighYy5oYXNBdHRyaWJ1dGUoInRhYmluZGV4Iil8fHZvaWQgMD09PWMudGFiSW5kZXgpcmV0dXJuITE7bGV0IGw9Yy5nZXRBdHRyaWJ1dGUoInRhYmluZGV4Iik7cmV0dXJuISghbHx8'@;
put 'aXNOYU4ocGFyc2VJbnQobCwxMCkpKX1mdW5jdGlvbiBOMGUoYyl7aWYoIUgwZShjKSlyZXR1cm4gbnVsbDtjb25zdCBsPXBhcnNlSW50KGMuZ2V0QXR0cmlidXRlKCJ0YWJpbmRleCIpfHwiIiwxMCk7cmV0dXJuIGlzTmFOKGwpPy0xOmx9Y2xhc3MgVjBle2dldCBlbmFibGVkKCl7cmV0dXJu'@;
put 'IHRoaXMuX2VuYWJsZWR9c2V0IGVuYWJsZWQobCl7dGhpcy5fZW5hYmxlZD1sLHRoaXMuX3N0YXJ0QW5jaG9yJiZ0aGlzLl9lbmRBbmNob3ImJih0aGlzLl90b2dnbGVBbmNob3JUYWJJbmRleChsLHRoaXMuX3N0YXJ0QW5jaG9yKSx0aGlzLl90b2dnbGVBbmNob3JUYWJJbmRleChsLHRoaXMu'@;
put 'X2VuZEFuY2hvcikpfWNvbnN0cnVjdG9yKGwsYSxkLGgsZj0hMSl7dGhpcy5fZWxlbWVudD1sLHRoaXMuX2NoZWNrZXI9YSx0aGlzLl9uZ1pvbmU9ZCx0aGlzLl9kb2N1bWVudD1oLHRoaXMuX2hhc0F0dGFjaGVkPSExLHRoaXMuc3RhcnRBbmNob3JMaXN0ZW5lcj0oKT0+dGhpcy5mb2N1c0xh'@;
put 'c3RUYWJiYWJsZUVsZW1lbnQoKSx0aGlzLmVuZEFuY2hvckxpc3RlbmVyPSgpPT50aGlzLmZvY3VzRmlyc3RUYWJiYWJsZUVsZW1lbnQoKSx0aGlzLl9lbmFibGVkPSEwLGZ8fHRoaXMuYXR0YWNoQW5jaG9ycygpfWRlc3Ryb3koKXtjb25zdCBsPXRoaXMuX3N0YXJ0QW5jaG9yLGE9dGhpcy5f'@;
put 'ZW5kQW5jaG9yO2wmJihsLnJlbW92ZUV2ZW50TGlzdGVuZXIoImZvY3VzIix0aGlzLnN0YXJ0QW5jaG9yTGlzdGVuZXIpLGwucmVtb3ZlKCkpLGEmJihhLnJlbW92ZUV2ZW50TGlzdGVuZXIoImZvY3VzIix0aGlzLmVuZEFuY2hvckxpc3RlbmVyKSxhLnJlbW92ZSgpKSx0aGlzLl9zdGFydEFu'@;
put 'Y2hvcj10aGlzLl9lbmRBbmNob3I9bnVsbCx0aGlzLl9oYXNBdHRhY2hlZD0hMX1hdHRhY2hBbmNob3JzKCl7cmV0dXJuISF0aGlzLl9oYXNBdHRhY2hlZHx8KHRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e3RoaXMuX3N0YXJ0QW5jaG9yfHwodGhpcy5fc3RhcnRBbmNob3I9'@;
put 'dGhpcy5fY3JlYXRlQW5jaG9yKCksdGhpcy5fc3RhcnRBbmNob3IuYWRkRXZlbnRMaXN0ZW5lcigiZm9jdXMiLHRoaXMuc3RhcnRBbmNob3JMaXN0ZW5lcikpLHRoaXMuX2VuZEFuY2hvcnx8KHRoaXMuX2VuZEFuY2hvcj10aGlzLl9jcmVhdGVBbmNob3IoKSx0aGlzLl9lbmRBbmNob3IuYWRk'@;
put 'RXZlbnRMaXN0ZW5lcigiZm9jdXMiLHRoaXMuZW5kQW5jaG9yTGlzdGVuZXIpKX0pLHRoaXMuX2VsZW1lbnQucGFyZW50Tm9kZSYmKHRoaXMuX2VsZW1lbnQucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodGhpcy5fc3RhcnRBbmNob3IsdGhpcy5fZWxlbWVudCksdGhpcy5fZWxlbWVudC5wYXJl'@;
put 'bnROb2RlLmluc2VydEJlZm9yZSh0aGlzLl9lbmRBbmNob3IsdGhpcy5fZWxlbWVudC5uZXh0U2libGluZyksdGhpcy5faGFzQXR0YWNoZWQ9ITApLHRoaXMuX2hhc0F0dGFjaGVkKX1mb2N1c0luaXRpYWxFbGVtZW50V2hlblJlYWR5KGwpe3JldHVybiBuZXcgUHJvbWlzZShhPT57dGhpcy5f'@;
put 'ZXhlY3V0ZU9uU3RhYmxlKCgpPT5hKHRoaXMuZm9jdXNJbml0aWFsRWxlbWVudChsKSkpfSl9Zm9jdXNGaXJzdFRhYmJhYmxlRWxlbWVudFdoZW5SZWFkeShsKXtyZXR1cm4gbmV3IFByb21pc2UoYT0+e3RoaXMuX2V4ZWN1dGVPblN0YWJsZSgoKT0+YSh0aGlzLmZvY3VzRmlyc3RUYWJiYWJs'@;
put 'ZUVsZW1lbnQobCkpKX0pfWZvY3VzTGFzdFRhYmJhYmxlRWxlbWVudFdoZW5SZWFkeShsKXtyZXR1cm4gbmV3IFByb21pc2UoYT0+e3RoaXMuX2V4ZWN1dGVPblN0YWJsZSgoKT0+YSh0aGlzLmZvY3VzTGFzdFRhYmJhYmxlRWxlbWVudChsKSkpfSl9X2dldFJlZ2lvbkJvdW5kYXJ5KGwpe2Nv'@;
put 'bnN0IGE9dGhpcy5fZWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKGBbY2RrLWZvY3VzLXJlZ2lvbi0ke2x9XSwgW2Nka0ZvY3VzUmVnaW9uJHtsfV0sIFtjZGstZm9jdXMtJHtsfV1gKTtyZXR1cm4ic3RhcnQiPT1sP2EubGVuZ3RoP2FbMF06dGhpcy5fZ2V0Rmlyc3RUYWJiYWJsZUVsZW1lbnQo'@;
put 'dGhpcy5fZWxlbWVudCk6YS5sZW5ndGg/YVthLmxlbmd0aC0xXTp0aGlzLl9nZXRMYXN0VGFiYmFibGVFbGVtZW50KHRoaXMuX2VsZW1lbnQpfWZvY3VzSW5pdGlhbEVsZW1lbnQobCl7Y29uc3QgYT10aGlzLl9lbGVtZW50LnF1ZXJ5U2VsZWN0b3IoIltjZGstZm9jdXMtaW5pdGlhbF0sIFtj'@;
put 'ZGtGb2N1c0luaXRpYWxdIik7aWYoYSl7aWYoIXRoaXMuX2NoZWNrZXIuaXNGb2N1c2FibGUoYSkpe2NvbnN0IGQ9dGhpcy5fZ2V0Rmlyc3RUYWJiYWJsZUVsZW1lbnQoYSk7cmV0dXJuIGQ/LmZvY3VzKGwpLCEhZH1yZXR1cm4gYS5mb2N1cyhsKSwhMH1yZXR1cm4gdGhpcy5mb2N1c0ZpcnN0'@;
put 'VGFiYmFibGVFbGVtZW50KGwpfWZvY3VzRmlyc3RUYWJiYWJsZUVsZW1lbnQobCl7Y29uc3QgYT10aGlzLl9nZXRSZWdpb25Cb3VuZGFyeSgic3RhcnQiKTtyZXR1cm4gYSYmYS5mb2N1cyhsKSwhIWF9Zm9jdXNMYXN0VGFiYmFibGVFbGVtZW50KGwpe2NvbnN0IGE9dGhpcy5fZ2V0UmVnaW9u'@;
put 'Qm91bmRhcnkoImVuZCIpO3JldHVybiBhJiZhLmZvY3VzKGwpLCEhYX1oYXNBdHRhY2hlZCgpe3JldHVybiB0aGlzLl9oYXNBdHRhY2hlZH1fZ2V0Rmlyc3RUYWJiYWJsZUVsZW1lbnQobCl7aWYodGhpcy5fY2hlY2tlci5pc0ZvY3VzYWJsZShsKSYmdGhpcy5fY2hlY2tlci5pc1RhYmJhYmxl'@;
put 'KGwpKXJldHVybiBsO2NvbnN0IGE9bC5jaGlsZHJlbjtmb3IobGV0IGQ9MDtkPGEubGVuZ3RoO2QrKyl7Y29uc3QgaD1hW2RdLm5vZGVUeXBlPT09dGhpcy5fZG9jdW1lbnQuRUxFTUVOVF9OT0RFP3RoaXMuX2dldEZpcnN0VGFiYmFibGVFbGVtZW50KGFbZF0pOm51bGw7aWYoaClyZXR1cm4g'@;
put 'aH1yZXR1cm4gbnVsbH1fZ2V0TGFzdFRhYmJhYmxlRWxlbWVudChsKXtpZih0aGlzLl9jaGVja2VyLmlzRm9jdXNhYmxlKGwpJiZ0aGlzLl9jaGVja2VyLmlzVGFiYmFibGUobCkpcmV0dXJuIGw7Y29uc3QgYT1sLmNoaWxkcmVuO2ZvcihsZXQgZD1hLmxlbmd0aC0xO2Q+PTA7ZC0tKXtjb25z'@;
put 'dCBoPWFbZF0ubm9kZVR5cGU9PT10aGlzLl9kb2N1bWVudC5FTEVNRU5UX05PREU/dGhpcy5fZ2V0TGFzdFRhYmJhYmxlRWxlbWVudChhW2RdKTpudWxsO2lmKGgpcmV0dXJuIGh9cmV0dXJuIG51bGx9X2NyZWF0ZUFuY2hvcigpe2NvbnN0IGw9dGhpcy5fZG9jdW1lbnQuY3JlYXRlRWxlbWVu'@;
put 'dCgiZGl2Iik7cmV0dXJuIHRoaXMuX3RvZ2dsZUFuY2hvclRhYkluZGV4KHRoaXMuX2VuYWJsZWQsbCksbC5jbGFzc0xpc3QuYWRkKCJjZGstdmlzdWFsbHktaGlkZGVuIiksbC5jbGFzc0xpc3QuYWRkKCJjZGstZm9jdXMtdHJhcC1hbmNob3IiKSxsLnNldEF0dHJpYnV0ZSgiYXJpYS1oaWRk'@;
put 'ZW4iLCJ0cnVlIiksbH1fdG9nZ2xlQW5jaG9yVGFiSW5kZXgobCxhKXtsP2Euc2V0QXR0cmlidXRlKCJ0YWJpbmRleCIsIjAiKTphLnJlbW92ZUF0dHJpYnV0ZSgidGFiaW5kZXgiKX10b2dnbGVBbmNob3JzKGwpe3RoaXMuX3N0YXJ0QW5jaG9yJiZ0aGlzLl9lbmRBbmNob3ImJih0aGlzLl90'@;
put 'b2dnbGVBbmNob3JUYWJJbmRleChsLHRoaXMuX3N0YXJ0QW5jaG9yKSx0aGlzLl90b2dnbGVBbmNob3JUYWJJbmRleChsLHRoaXMuX2VuZEFuY2hvcikpfV9leGVjdXRlT25TdGFibGUobCl7dGhpcy5fbmdab25lLmlzU3RhYmxlP2woKTp0aGlzLl9uZ1pvbmUub25TdGFibGUucGlwZShZZigx'@;
put 'KSkuc3Vic2NyaWJlKGwpfX1sZXQgdlk9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCl7dGhpcy5fY2hlY2tlcj1hLHRoaXMuX25nWm9uZT1kLHRoaXMuX2RvY3VtZW50PWh9Y3JlYXRlKGEsZD0hMSl7cmV0dXJuIG5ldyBWMGUoYSx0aGlzLl9jaGVja2VyLHRoaXMuX25nWm9uZSx0'@;
put 'aGlzLl9kb2N1bWVudCxkKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKSh4cihqUGUpLHhyKFdhKSx4cih2cykpfX1zdGF0aWN7dGhpcy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9'@;
put 'KX19cmV0dXJuIGN9KSgpLEIwZT0oKCk9PntjbGFzcyBje2dldCBlbmFibGVkKCl7cmV0dXJuIHRoaXMuZm9jdXNUcmFwPy5lbmFibGVkfHwhMX1zZXQgZW5hYmxlZChhKXt0aGlzLmZvY3VzVHJhcCYmKHRoaXMuZm9jdXNUcmFwLmVuYWJsZWQ9YSl9Y29uc3RydWN0b3IoYSxkLGgpe3RoaXMu'@;
put 'X2VsZW1lbnRSZWY9YSx0aGlzLl9mb2N1c1RyYXBGYWN0b3J5PWQsdGhpcy5fcHJldmlvdXNseUZvY3VzZWRFbGVtZW50PW51bGwsZmkoQ3gpLmlzQnJvd3NlciYmKHRoaXMuZm9jdXNUcmFwPXRoaXMuX2ZvY3VzVHJhcEZhY3RvcnkuY3JlYXRlKHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxl'@;
put 'bWVudCwhMCkpfW5nT25EZXN0cm95KCl7dGhpcy5mb2N1c1RyYXA/LmRlc3Ryb3koKSx0aGlzLl9wcmV2aW91c2x5Rm9jdXNlZEVsZW1lbnQmJih0aGlzLl9wcmV2aW91c2x5Rm9jdXNlZEVsZW1lbnQuZm9jdXMoKSx0aGlzLl9wcmV2aW91c2x5Rm9jdXNlZEVsZW1lbnQ9bnVsbCl9bmdBZnRl'@;
put 'ckNvbnRlbnRJbml0KCl7dGhpcy5mb2N1c1RyYXA/LmF0dGFjaEFuY2hvcnMoKSx0aGlzLmF1dG9DYXB0dXJlJiZ0aGlzLl9jYXB0dXJlRm9jdXMoKX1uZ0RvQ2hlY2soKXt0aGlzLmZvY3VzVHJhcCYmIXRoaXMuZm9jdXNUcmFwLmhhc0F0dGFjaGVkKCkmJnRoaXMuZm9jdXNUcmFwLmF0dGFj'@;
put 'aEFuY2hvcnMoKX1uZ09uQ2hhbmdlcyhhKXtjb25zdCBkPWEuYXV0b0NhcHR1cmU7ZCYmIWQuZmlyc3RDaGFuZ2UmJnRoaXMuYXV0b0NhcHR1cmUmJnRoaXMuZm9jdXNUcmFwPy5oYXNBdHRhY2hlZCgpJiZ0aGlzLl9jYXB0dXJlRm9jdXMoKX1fY2FwdHVyZUZvY3VzKCl7dGhpcy5fcHJldmlv'@;
put 'dXNseUZvY3VzZWRFbGVtZW50PWZ1bmN0aW9uIGJQZSgpe2xldCBjPXR5cGVvZiBkb2N1bWVudDwidSImJmRvY3VtZW50P2RvY3VtZW50LmFjdGl2ZUVsZW1lbnQ6bnVsbDtmb3IoO2MmJmMuc2hhZG93Um9vdDspe2NvbnN0IGw9Yy5zaGFkb3dSb290LmFjdGl2ZUVsZW1lbnQ7aWYobD09PWMp'@;
put 'YnJlYWs7Yz1sfXJldHVybiBjfSgpLHRoaXMuZm9jdXNUcmFwPy5mb2N1c0luaXRpYWxFbGVtZW50V2hlblJlYWR5KCl9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoR2UoSmkpLEdlKHZZKSxHZSh2cykpfX1zdGF0aWN7dGhpcy5cdTAyNzVkaXI9'@;
put 'RXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwiY2RrVHJhcEZvY3VzIiwiIl1dLGlucHV0czp7ZW5hYmxlZDpbTm4uSGFzRGVjb3JhdG9ySW5wdXRUcmFuc2Zvcm0sImNka1RyYXBGb2N1cyIsImVuYWJsZWQiLHMxXSxhdXRvQ2FwdHVyZTpbTm4uSGFzRGVjb3JhdG9ySW5wdXRUcmFuc2Zvcm0s'@;
put 'ImNka1RyYXBGb2N1c0F1dG9DYXB0dXJlIiwiYXV0b0NhcHR1cmUiLHMxXX0sZXhwb3J0QXM6WyJjZGtUcmFwRm9jdXMiXSxzdGFuZGFsb25lOiEwLGZlYXR1cmVzOltXbCx3bF19KX19cmV0dXJuIGN9KSgpO2Z1bmN0aW9uIGQ3KGMsbD0wKXtyZXR1cm4gZnVuY3Rpb24gckZlKGMpe3JldHVy'@;
put 'biFpc05hTihwYXJzZUZsb2F0KGMpKSYmIWlzTmFOKE51bWJlcihjKSl9KGMpP051bWJlcihjKTpsfWZ1bmN0aW9uIEVkKGMpe3JldHVybiBjIGluc3RhbmNlb2YgSmk/Yy5uYXRpdmVFbGVtZW50OmN9Y29uc3QgeHg9e3NjaGVkdWxlKGMpe2xldCBsPXJlcXVlc3RBbmltYXRpb25GcmFtZSxh'@;
put 'PWNhbmNlbEFuaW1hdGlvbkZyYW1lO2NvbnN0e2RlbGVnYXRlOmR9PXh4O2QmJihsPWQucmVxdWVzdEFuaW1hdGlvbkZyYW1lLGE9ZC5jYW5jZWxBbmltYXRpb25GcmFtZSk7Y29uc3QgaD1sKGY9PnthPXZvaWQgMCxjKGYpfSk7cmV0dXJuIG5ldyBxdCgoKT0+YT8uKGgpKX0scmVxdWVzdEFu'@;
put 'aW1hdGlvbkZyYW1lKC4uLmMpe2NvbnN0e2RlbGVnYXRlOmx9PXh4O3JldHVybihsPy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWV8fHJlcXVlc3RBbmltYXRpb25GcmFtZSkoLi4uYyl9LGNhbmNlbEFuaW1hdGlvbkZyYW1lKC4uLmMpe2NvbnN0e2RlbGVnYXRlOmx9PXh4O3JldHVybihsPy5jYW5j'@;
put 'ZWxBbmltYXRpb25GcmFtZXx8Y2FuY2VsQW5pbWF0aW9uRnJhbWUpKC4uLmMpfSxkZWxlZ2F0ZTp2b2lkIDB9LGowZT1uZXcgY2xhc3Mgb0ZlIGV4dGVuZHMgaFl7Zmx1c2gobCl7bGV0IGE7dGhpcy5fYWN0aXZlPSEwLGw/YT1sLmlkOihhPXRoaXMuX3NjaGVkdWxlZCx0aGlzLl9zY2hlZHVs'@;
put 'ZWQ9dm9pZCAwKTtjb25zdHthY3Rpb25zOmR9PXRoaXM7bGV0IGg7bD1sfHxkLnNoaWZ0KCk7ZG97aWYoaD1sLmV4ZWN1dGUobC5zdGF0ZSxsLmRlbGF5KSlicmVha313aGlsZSgobD1kWzBdKSYmbC5pZD09PWEmJmQuc2hpZnQoKSk7aWYodGhpcy5fYWN0aXZlPSExLGgpe2Zvcig7KGw9ZFsw'@;
put 'XSkmJmwuaWQ9PT1hJiZkLnNoaWZ0KCk7KWwudW5zdWJzY3JpYmUoKTt0aHJvdyBofX19KGNsYXNzIGFGZSBleHRlbmRzIHVZe2NvbnN0cnVjdG9yKGwsYSl7c3VwZXIobCxhKSx0aGlzLnNjaGVkdWxlcj1sLHRoaXMud29yaz1hfXJlcXVlc3RBc3luY0lkKGwsYSxkPTApe3JldHVybiBudWxs'@;
put 'IT09ZCYmZD4wP3N1cGVyLnJlcXVlc3RBc3luY0lkKGwsYSxkKToobC5hY3Rpb25zLnB1c2godGhpcyksbC5fc2NoZWR1bGVkfHwobC5fc2NoZWR1bGVkPXh4LnJlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+bC5mbHVzaCh2b2lkIDApKSkpfXJlY3ljbGVBc3luY0lkKGwsYSxkPTApe3ZhciBo'@;
put 'O2lmKG51bGwhPWQ/ZD4wOnRoaXMuZGVsYXk+MClyZXR1cm4gc3VwZXIucmVjeWNsZUFzeW5jSWQobCxhLGQpO2NvbnN0e2FjdGlvbnM6Zn09bDtudWxsIT1hJiZhPT09bC5fc2NoZWR1bGVkJiYobnVsbD09PShoPWZbZi5sZW5ndGgtMV0pfHx2b2lkIDA9PT1oP3ZvaWQgMDpoLmlkKSE9PWEm'@;
put 'Jih4eC5jYW5jZWxBbmltYXRpb25GcmFtZShhKSxsLl9zY2hlZHVsZWQ9dm9pZCAwKX19KTtsZXQgYlksc0ZlPTE7Y29uc3QgRUw9e307ZnVuY3Rpb24gejBlKGMpe3JldHVybiBjIGluIEVMJiYoZGVsZXRlIEVMW2NdLCEwKX1jb25zdCBsRmU9e3NldEltbWVkaWF0ZShjKXtjb25zdCBsPXNG'@;
put 'ZSsrO3JldHVybiBFTFtsXT0hMCxiWXx8KGJZPVByb21pc2UucmVzb2x2ZSgpKSxiWS50aGVuKCgpPT56MGUobCkmJmMoKSksbH0sY2xlYXJJbW1lZGlhdGUoYyl7ejBlKGMpfX0se3NldEltbWVkaWF0ZTpjRmUsY2xlYXJJbW1lZGlhdGU6dUZlfT1sRmUsVEw9e3NldEltbWVkaWF0ZSguLi5j'@;
put 'KXtjb25zdHtkZWxlZ2F0ZTpsfT1UTDtyZXR1cm4obD8uc2V0SW1tZWRpYXRlfHxjRmUpKC4uLmMpfSxjbGVhckltbWVkaWF0ZShjKXtjb25zdHtkZWxlZ2F0ZTpsfT1UTDtyZXR1cm4obD8uY2xlYXJJbW1lZGlhdGV8fHVGZSkoYyl9LGRlbGVnYXRlOnZvaWQgMH0sZkZlPW5ldyBjbGFzcyBo'@;
put 'RmUgZXh0ZW5kcyBoWXtmbHVzaChsKXt0aGlzLl9hY3RpdmU9ITA7Y29uc3QgYT10aGlzLl9zY2hlZHVsZWQ7dGhpcy5fc2NoZWR1bGVkPXZvaWQgMDtjb25zdHthY3Rpb25zOmR9PXRoaXM7bGV0IGg7bD1sfHxkLnNoaWZ0KCk7ZG97aWYoaD1sLmV4ZWN1dGUobC5zdGF0ZSxsLmRlbGF5KSli'@;
put 'cmVha313aGlsZSgobD1kWzBdKSYmbC5pZD09PWEmJmQuc2hpZnQoKSk7aWYodGhpcy5fYWN0aXZlPSExLGgpe2Zvcig7KGw9ZFswXSkmJmwuaWQ9PT1hJiZkLnNoaWZ0KCk7KWwudW5zdWJzY3JpYmUoKTt0aHJvdyBofX19KGNsYXNzIGRGZSBleHRlbmRzIHVZe2NvbnN0cnVjdG9yKGwsYSl7'@;
put 'c3VwZXIobCxhKSx0aGlzLnNjaGVkdWxlcj1sLHRoaXMud29yaz1hfXJlcXVlc3RBc3luY0lkKGwsYSxkPTApe3JldHVybiBudWxsIT09ZCYmZD4wP3N1cGVyLnJlcXVlc3RBc3luY0lkKGwsYSxkKToobC5hY3Rpb25zLnB1c2godGhpcyksbC5fc2NoZWR1bGVkfHwobC5fc2NoZWR1bGVkPVRM'@;
put 'LnNldEltbWVkaWF0ZShsLmZsdXNoLmJpbmQobCx2b2lkIDApKSkpfXJlY3ljbGVBc3luY0lkKGwsYSxkPTApe3ZhciBoO2lmKG51bGwhPWQ/ZD4wOnRoaXMuZGVsYXk+MClyZXR1cm4gc3VwZXIucmVjeWNsZUFzeW5jSWQobCxhLGQpO2NvbnN0e2FjdGlvbnM6Zn09bDtudWxsIT1hJiYobnVs'@;
put 'bD09PShoPWZbZi5sZW5ndGgtMV0pfHx2b2lkIDA9PT1oP3ZvaWQgMDpoLmlkKSE9PWEmJihUTC5jbGVhckltbWVkaWF0ZShhKSxsLl9zY2hlZHVsZWQ9PT1hJiYobC5fc2NoZWR1bGVkPXZvaWQgMCkpfX0pO2Z1bmN0aW9uIFUwZShjPTAsbCxhPXRQZSl7bGV0IGQ9LTE7cmV0dXJuIG51bGwh'@;
put 'PWwmJihjbGUobCk/YT1sOmQ9bCksbmV3IFh0KGg9PntsZXQgZj1mdW5jdGlvbiBnRmUoYyl7cmV0dXJuIGMgaW5zdGFuY2VvZiBEYXRlJiYhaXNOYU4oYyl9KGMpPytjLWEubm93KCk6YztmPDAmJihmPTApO2xldCB2PTA7cmV0dXJuIGEuc2NoZWR1bGUoZnVuY3Rpb24oKXtoLmNsb3NlZHx8'@;
put 'KGgubmV4dCh2KyspLDA8PWQ/dGhpcy5zY2hlZHVsZSh2b2lkIDAsZCk6aC5jb21wbGV0ZSgpKX0sZil9KX1mdW5jdGlvbiB5WShjLGw9Q0wpe3JldHVybiBmdW5jdGlvbiBwRmUoYyl7cmV0dXJuIFZpKChsLGEpPT57bGV0IGQ9ITEsaD1udWxsLGY9bnVsbCx2PSExO2NvbnN0IE09KCk9Pntp'@;
put 'ZihmPy51bnN1YnNjcmliZSgpLGY9bnVsbCxkKXtkPSExO2NvbnN0IFo9aDtoPW51bGwsYS5uZXh0KFopfXYmJmEuY29tcGxldGUoKX0sRD0oKT0+e2Y9bnVsbCx2JiZhLmNvbXBsZXRlKCl9O2wuc3Vic2NyaWJlKE5pKGEsWj0+e2Q9ITAsaD1aLGZ8fGwxKGMoWikpLnN1YnNjcmliZShmPU5p'@;
put 'KGEsTSxEKSl9LCgpPT57dj0hMCwoIWR8fCFmfHxmLmNsb3NlZCkmJmEuY29tcGxldGUoKX0pKX0pfSgoKT0+VTBlKGMsbCkpfWNvbnN0IHZGZT1uZXcgU3QoImNkay1kaXItZG9jIix7cHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTpmdW5jdGlvbiBiRmUoKXtyZXR1cm4gZmkodnMpfX0pLHlG'@;
put 'ZT0vXihhcnxja2J8ZHZ8aGV8aXd8ZmF8bnFvfHBzfHNkfHVnfHVyfHlpfC4qWy1fXShBZGxtfEFyYWJ8SGVicnxOa29vfFJvaGd8VGhhYSkpKD8hLipbLV9dKExhdG58Q3lybCkoJHwtfF8pKSgkfC18XykvaTtsZXQgcG09KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLnZhbHVl'@;
put 'PSJsdHIiLHRoaXMuY2hhbmdlPW5ldyBLcixhJiYodGhpcy52YWx1ZT1mdW5jdGlvbiBfRmUoYyl7Y29uc3QgbD1jPy50b0xvd2VyQ2FzZSgpfHwiIjtyZXR1cm4iYXV0byI9PT1sJiZ0eXBlb2YgbmF2aWdhdG9yPCJ1IiYmbmF2aWdhdG9yPy5sYW5ndWFnZT95RmUudGVzdChuYXZpZ2F0b3Iu'@;
put 'bGFuZ3VhZ2UpPyJydGwiOiJsdHIiOiJydGwiPT09bD8icnRsIjoibHRyIn0oKGEuYm9keT9hLmJvZHkuZGlyOm51bGwpfHwoYS5kb2N1bWVudEVsZW1lbnQ/YS5kb2N1bWVudEVsZW1lbnQuZGlyOm51bGwpfHwibHRyIikpfW5nT25EZXN0cm95KCl7dGhpcy5jaGFuZ2UuY29tcGxldGUoKX1z'@;
put 'dGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKSh4cih2RmUsOCkpfX1zdGF0aWN7dGhpcy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KX19cmV0dXJuIGN9KSgpO2NsYXNzIHdGZXt9Y2xh'@;
put 'c3MgU0ZlIGV4dGVuZHMgd0Zle2NvbnN0cnVjdG9yKGwpe3N1cGVyKCksdGhpcy5fZGF0YT1sfWNvbm5lY3QoKXtyZXR1cm4gQk0odGhpcy5fZGF0YSk/dGhpcy5fZGF0YTpmbyh0aGlzLl9kYXRhKX1kaXNjb25uZWN0KCl7fX12YXIgZ209ZnVuY3Rpb24oYyl7cmV0dXJuIGNbYy5SRVBMQUNF'@;
put 'RD0wXT0iUkVQTEFDRUQiLGNbYy5JTlNFUlRFRD0xXT0iSU5TRVJURUQiLGNbYy5NT1ZFRD0yXT0iTU9WRUQiLGNbYy5SRU1PVkVEPTNdPSJSRU1PVkVEIixjfShnbXx8e30pO2NvbnN0IF9ZPW5ldyBTdCgiX1ZpZXdSZXBlYXRlciIpO2NsYXNzIFowZXtjb25zdHJ1Y3Rvcigpe3RoaXMudmll'@;
put 'd0NhY2hlU2l6ZT0yMCx0aGlzLl92aWV3Q2FjaGU9W119YXBwbHlDaGFuZ2VzKGwsYSxkLGgsZil7bC5mb3JFYWNoT3BlcmF0aW9uKCh2LE0sRCk9PntsZXQgWixyZTtudWxsPT12LnByZXZpb3VzSW5kZXg/KFo9dGhpcy5faW5zZXJ0VmlldygoKT0+ZCh2LE0sRCksRCxhLGgodikpLHJlPVo/'@;
put 'Z20uSU5TRVJURUQ6Z20uUkVQTEFDRUQpOm51bGw9PUQ/KHRoaXMuX2RldGFjaEFuZENhY2hlVmlldyhNLGEpLHJlPWdtLlJFTU9WRUQpOihaPXRoaXMuX21vdmVWaWV3KE0sRCxhLGgodikpLHJlPWdtLk1PVkVEKSxmJiZmKHtjb250ZXh0Olo/LmNvbnRleHQsb3BlcmF0aW9uOnJlLHJlY29y'@;
put 'ZDp2fSl9KX1kZXRhY2goKXtmb3IoY29uc3QgbCBvZiB0aGlzLl92aWV3Q2FjaGUpbC5kZXN0cm95KCk7dGhpcy5fdmlld0NhY2hlPVtdfV9pbnNlcnRWaWV3KGwsYSxkLGgpe2NvbnN0IGY9dGhpcy5faW5zZXJ0Vmlld0Zyb21DYWNoZShhLGQpO2lmKGYpcmV0dXJuIHZvaWQoZi5jb250ZXh0'@;
put 'LiRpbXBsaWNpdD1oKTtjb25zdCB2PWwoKTtyZXR1cm4gZC5jcmVhdGVFbWJlZGRlZFZpZXcodi50ZW1wbGF0ZVJlZix2LmNvbnRleHQsdi5pbmRleCl9X2RldGFjaEFuZENhY2hlVmlldyhsLGEpe2NvbnN0IGQ9YS5kZXRhY2gobCk7dGhpcy5fbWF5YmVDYWNoZVZpZXcoZCxhKX1fbW92ZVZp'@;
put 'ZXcobCxhLGQsaCl7Y29uc3QgZj1kLmdldChsKTtyZXR1cm4gZC5tb3ZlKGYsYSksZi5jb250ZXh0LiRpbXBsaWNpdD1oLGZ9X21heWJlQ2FjaGVWaWV3KGwsYSl7aWYodGhpcy5fdmlld0NhY2hlLmxlbmd0aDx0aGlzLnZpZXdDYWNoZVNpemUpdGhpcy5fdmlld0NhY2hlLnB1c2gobCk7ZWxz'@;
put 'ZXtjb25zdCBkPWEuaW5kZXhPZihsKTstMT09PWQ/bC5kZXN0cm95KCk6YS5yZW1vdmUoZCl9fV9pbnNlcnRWaWV3RnJvbUNhY2hlKGwsYSl7Y29uc3QgZD10aGlzLl92aWV3Q2FjaGUucG9wKCk7cmV0dXJuIGQmJmEuaW5zZXJ0KGQsbCksZHx8bnVsbH19Y29uc3QgTUZlPVsiY29udGVudFdy'@;
put 'YXBwZXIiXSx4RmU9WyIqIl0sVzBlPW5ldyBTdCgiVklSVFVBTF9TQ1JPTExfU1RSQVRFR1kiKTtjbGFzcyBFRmV7Y29uc3RydWN0b3IobCxhLGQpe3RoaXMuX3Njcm9sbGVkSW5kZXhDaGFuZ2U9bmV3IFduLHRoaXMuc2Nyb2xsZWRJbmRleENoYW5nZT10aGlzLl9zY3JvbGxlZEluZGV4Q2hh'@;
put 'bmdlLnBpcGUoZnVuY3Rpb24gY1koYyxsPWNuKXtyZXR1cm4gYz1jPz9KT2UsVmkoKGEsZCk9PntsZXQgaCxmPSEwO2Euc3Vic2NyaWJlKE5pKGQsdj0+e2NvbnN0IE09bCh2KTsoZnx8IWMoaCxNKSkmJihmPSExLGg9TSxkLm5leHQodikpfSkpfSl9KCkpLHRoaXMuX3ZpZXdwb3J0PW51bGws'@;
put 'dGhpcy5faXRlbVNpemU9bCx0aGlzLl9taW5CdWZmZXJQeD1hLHRoaXMuX21heEJ1ZmZlclB4PWR9YXR0YWNoKGwpe3RoaXMuX3ZpZXdwb3J0PWwsdGhpcy5fdXBkYXRlVG90YWxDb250ZW50U2l6ZSgpLHRoaXMuX3VwZGF0ZVJlbmRlcmVkUmFuZ2UoKX1kZXRhY2goKXt0aGlzLl9zY3JvbGxl'@;
put 'ZEluZGV4Q2hhbmdlLmNvbXBsZXRlKCksdGhpcy5fdmlld3BvcnQ9bnVsbH11cGRhdGVJdGVtQW5kQnVmZmVyU2l6ZShsLGEsZCl7dGhpcy5faXRlbVNpemU9bCx0aGlzLl9taW5CdWZmZXJQeD1hLHRoaXMuX21heEJ1ZmZlclB4PWQsdGhpcy5fdXBkYXRlVG90YWxDb250ZW50U2l6ZSgpLHRo'@;
put 'aXMuX3VwZGF0ZVJlbmRlcmVkUmFuZ2UoKX1vbkNvbnRlbnRTY3JvbGxlZCgpe3RoaXMuX3VwZGF0ZVJlbmRlcmVkUmFuZ2UoKX1vbkRhdGFMZW5ndGhDaGFuZ2VkKCl7dGhpcy5fdXBkYXRlVG90YWxDb250ZW50U2l6ZSgpLHRoaXMuX3VwZGF0ZVJlbmRlcmVkUmFuZ2UoKX1vbkNvbnRlbnRS'@;
put 'ZW5kZXJlZCgpe31vblJlbmRlcmVkT2Zmc2V0Q2hhbmdlZCgpe31zY3JvbGxUb0luZGV4KGwsYSl7dGhpcy5fdmlld3BvcnQmJnRoaXMuX3ZpZXdwb3J0LnNjcm9sbFRvT2Zmc2V0KGwqdGhpcy5faXRlbVNpemUsYSl9X3VwZGF0ZVRvdGFsQ29udGVudFNpemUoKXt0aGlzLl92aWV3cG9ydCYm'@;
put 'dGhpcy5fdmlld3BvcnQuc2V0VG90YWxDb250ZW50U2l6ZSh0aGlzLl92aWV3cG9ydC5nZXREYXRhTGVuZ3RoKCkqdGhpcy5faXRlbVNpemUpfV91cGRhdGVSZW5kZXJlZFJhbmdlKCl7aWYoIXRoaXMuX3ZpZXdwb3J0KXJldHVybjtjb25zdCBsPXRoaXMuX3ZpZXdwb3J0LmdldFJlbmRlcmVk'@;
put 'UmFuZ2UoKSxhPXtzdGFydDpsLnN0YXJ0LGVuZDpsLmVuZH0sZD10aGlzLl92aWV3cG9ydC5nZXRWaWV3cG9ydFNpemUoKSxoPXRoaXMuX3ZpZXdwb3J0LmdldERhdGFMZW5ndGgoKTtsZXQgZj10aGlzLl92aWV3cG9ydC5tZWFzdXJlU2Nyb2xsT2Zmc2V0KCksdj10aGlzLl9pdGVtU2l6ZT4w'@;
put 'P2YvdGhpcy5faXRlbVNpemU6MDtpZihhLmVuZD5oKXtjb25zdCBEPU1hdGguY2VpbChkL3RoaXMuX2l0ZW1TaXplKSxaPU1hdGgubWF4KDAsTWF0aC5taW4odixoLUQpKTt2IT1aJiYodj1aLGY9Wip0aGlzLl9pdGVtU2l6ZSxhLnN0YXJ0PU1hdGguZmxvb3IodikpLGEuZW5kPU1hdGgubWF4'@;
put 'KDAsTWF0aC5taW4oaCxhLnN0YXJ0K0QpKX1jb25zdCBNPWYtYS5zdGFydCp0aGlzLl9pdGVtU2l6ZTtpZihNPHRoaXMuX21pbkJ1ZmZlclB4JiYwIT1hLnN0YXJ0KXtjb25zdCBEPU1hdGguY2VpbCgodGhpcy5fbWF4QnVmZmVyUHgtTSkvdGhpcy5faXRlbVNpemUpO2Euc3RhcnQ9TWF0aC5t'@;
put 'YXgoMCxhLnN0YXJ0LUQpLGEuZW5kPU1hdGgubWluKGgsTWF0aC5jZWlsKHYrKGQrdGhpcy5fbWluQnVmZmVyUHgpL3RoaXMuX2l0ZW1TaXplKSl9ZWxzZXtjb25zdCBEPWEuZW5kKnRoaXMuX2l0ZW1TaXplLShmK2QpO2lmKEQ8dGhpcy5fbWluQnVmZmVyUHgmJmEuZW5kIT1oKXtjb25zdCBa'@;
put 'PU1hdGguY2VpbCgodGhpcy5fbWF4QnVmZmVyUHgtRCkvdGhpcy5faXRlbVNpemUpO1o+MCYmKGEuZW5kPU1hdGgubWluKGgsYS5lbmQrWiksYS5zdGFydD1NYXRoLm1heCgwLE1hdGguZmxvb3Iodi10aGlzLl9taW5CdWZmZXJQeC90aGlzLl9pdGVtU2l6ZSkpKX19dGhpcy5fdmlld3BvcnQu'@;
put 'c2V0UmVuZGVyZWRSYW5nZShhKSx0aGlzLl92aWV3cG9ydC5zZXRSZW5kZXJlZENvbnRlbnRPZmZzZXQodGhpcy5faXRlbVNpemUqYS5zdGFydCksdGhpcy5fc2Nyb2xsZWRJbmRleENoYW5nZS5uZXh0KE1hdGguZmxvb3IodikpfX1sZXQga3k9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcihh'@;
put 'LGQsaCl7dGhpcy5fbmdab25lPWEsdGhpcy5fcGxhdGZvcm09ZCx0aGlzLl9zY3JvbGxlZD1uZXcgV24sdGhpcy5fZ2xvYmFsU3Vic2NyaXB0aW9uPW51bGwsdGhpcy5fc2Nyb2xsZWRDb3VudD0wLHRoaXMuc2Nyb2xsQ29udGFpbmVycz1uZXcgTWFwLHRoaXMuX2RvY3VtZW50PWh9cmVnaXN0'@;
put 'ZXIoYSl7dGhpcy5zY3JvbGxDb250YWluZXJzLmhhcyhhKXx8dGhpcy5zY3JvbGxDb250YWluZXJzLnNldChhLGEuZWxlbWVudFNjcm9sbGVkKCkuc3Vic2NyaWJlKCgpPT50aGlzLl9zY3JvbGxlZC5uZXh0KGEpKSl9ZGVyZWdpc3RlcihhKXtjb25zdCBkPXRoaXMuc2Nyb2xsQ29udGFpbmVy'@;
put 'cy5nZXQoYSk7ZCYmKGQudW5zdWJzY3JpYmUoKSx0aGlzLnNjcm9sbENvbnRhaW5lcnMuZGVsZXRlKGEpKX1zY3JvbGxlZChhPTIwKXtyZXR1cm4gdGhpcy5fcGxhdGZvcm0uaXNCcm93c2VyP25ldyBYdChkPT57dGhpcy5fZ2xvYmFsU3Vic2NyaXB0aW9ufHx0aGlzLl9hZGRHbG9iYWxMaXN0'@;
put 'ZW5lcigpO2NvbnN0IGg9YT4wP3RoaXMuX3Njcm9sbGVkLnBpcGUoeVkoYSkpLnN1YnNjcmliZShkKTp0aGlzLl9zY3JvbGxlZC5zdWJzY3JpYmUoZCk7cmV0dXJuIHRoaXMuX3Njcm9sbGVkQ291bnQrKywoKT0+e2gudW5zdWJzY3JpYmUoKSx0aGlzLl9zY3JvbGxlZENvdW50LS0sdGhpcy5f'@;
put 'c2Nyb2xsZWRDb3VudHx8dGhpcy5fcmVtb3ZlR2xvYmFsTGlzdGVuZXIoKX19KTpmbygpfW5nT25EZXN0cm95KCl7dGhpcy5fcmVtb3ZlR2xvYmFsTGlzdGVuZXIoKSx0aGlzLnNjcm9sbENvbnRhaW5lcnMuZm9yRWFjaCgoYSxkKT0+dGhpcy5kZXJlZ2lzdGVyKGQpKSx0aGlzLl9zY3JvbGxl'@;
put 'ZC5jb21wbGV0ZSgpfWFuY2VzdG9yU2Nyb2xsZWQoYSxkKXtjb25zdCBoPXRoaXMuZ2V0QW5jZXN0b3JTY3JvbGxDb250YWluZXJzKGEpO3JldHVybiB0aGlzLnNjcm9sbGVkKGQpLnBpcGUoJGwoZj0+IWZ8fGguaW5kZXhPZihmKT4tMSkpfWdldEFuY2VzdG9yU2Nyb2xsQ29udGFpbmVycyhh'@;
put 'KXtjb25zdCBkPVtdO3JldHVybiB0aGlzLnNjcm9sbENvbnRhaW5lcnMuZm9yRWFjaCgoaCxmKT0+e3RoaXMuX3Njcm9sbGFibGVDb250YWluc0VsZW1lbnQoZixhKSYmZC5wdXNoKGYpfSksZH1fZ2V0V2luZG93KCl7cmV0dXJuIHRoaXMuX2RvY3VtZW50LmRlZmF1bHRWaWV3fHx3aW5kb3d9'@;
put 'X3Njcm9sbGFibGVDb250YWluc0VsZW1lbnQoYSxkKXtsZXQgaD1FZChkKSxmPWEuZ2V0RWxlbWVudFJlZigpLm5hdGl2ZUVsZW1lbnQ7ZG97aWYoaD09ZilyZXR1cm4hMH13aGlsZShoPWgucGFyZW50RWxlbWVudCk7cmV0dXJuITF9X2FkZEdsb2JhbExpc3RlbmVyKCl7dGhpcy5fZ2xvYmFs'@;
put 'U3Vic2NyaXB0aW9uPXRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+eGQodGhpcy5fZ2V0V2luZG93KCkuZG9jdW1lbnQsInNjcm9sbCIpLnN1YnNjcmliZSgoKT0+dGhpcy5fc2Nyb2xsZWQubmV4dCgpKSl9X3JlbW92ZUdsb2JhbExpc3RlbmVyKCl7dGhpcy5fZ2xvYmFsU3Vi'@;
put 'c2NyaXB0aW9uJiYodGhpcy5fZ2xvYmFsU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksdGhpcy5fZ2xvYmFsU3Vic2NyaXB0aW9uPW51bGwpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKHhyKFdhKSx4cihDeCkseHIodnMsOCkpfX1zdGF0aWN7'@;
put 'dGhpcy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KX19cmV0dXJuIGN9KSgpLFkwZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYpe3RoaXMuZWxlbWVudFJlZj1hLHRoaXMuc2Nyb2xsRGlzcGF0Y2hlcj1kLHRo'@;
put 'aXMubmdab25lPWgsdGhpcy5kaXI9Zix0aGlzLl9kZXN0cm95ZWQ9bmV3IFduLHRoaXMuX2VsZW1lbnRTY3JvbGxlZD1uZXcgWHQodj0+dGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PnhkKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCJzY3JvbGwiKS5waXBlKFYwKHRo'@;
put 'aXMuX2Rlc3Ryb3llZCkpLnN1YnNjcmliZSh2KSkpfW5nT25Jbml0KCl7dGhpcy5zY3JvbGxEaXNwYXRjaGVyLnJlZ2lzdGVyKHRoaXMpfW5nT25EZXN0cm95KCl7dGhpcy5zY3JvbGxEaXNwYXRjaGVyLmRlcmVnaXN0ZXIodGhpcyksdGhpcy5fZGVzdHJveWVkLm5leHQoKSx0aGlzLl9kZXN0'@;
put 'cm95ZWQuY29tcGxldGUoKX1lbGVtZW50U2Nyb2xsZWQoKXtyZXR1cm4gdGhpcy5fZWxlbWVudFNjcm9sbGVkfWdldEVsZW1lbnRSZWYoKXtyZXR1cm4gdGhpcy5lbGVtZW50UmVmfXNjcm9sbFRvKGEpe2NvbnN0IGQ9dGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsaD10aGlzLmRpciYm'@;
put 'InJ0bCI9PXRoaXMuZGlyLnZhbHVlO251bGw9PWEubGVmdCYmKGEubGVmdD1oP2EuZW5kOmEuc3RhcnQpLG51bGw9PWEucmlnaHQmJihhLnJpZ2h0PWg/YS5zdGFydDphLmVuZCksbnVsbCE9YS5ib3R0b20mJihhLnRvcD1kLnNjcm9sbEhlaWdodC1kLmNsaWVudEhlaWdodC1hLmJvdHRvbSks'@;
put 'aCYmTXgoKSE9X3AuTk9STUFMPyhudWxsIT1hLmxlZnQmJihhLnJpZ2h0PWQuc2Nyb2xsV2lkdGgtZC5jbGllbnRXaWR0aC1hLmxlZnQpLE14KCk9PV9wLklOVkVSVEVEP2EubGVmdD1hLnJpZ2h0Ok14KCk9PV9wLk5FR0FURUQmJihhLmxlZnQ9YS5yaWdodD8tYS5yaWdodDphLnJpZ2h0KSk6'@;
put 'bnVsbCE9YS5yaWdodCYmKGEubGVmdD1kLnNjcm9sbFdpZHRoLWQuY2xpZW50V2lkdGgtYS5yaWdodCksdGhpcy5fYXBwbHlTY3JvbGxUb09wdGlvbnMoYSl9X2FwcGx5U2Nyb2xsVG9PcHRpb25zKGEpe2NvbnN0IGQ9dGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7IWZ1bmN0aW9uIG1Q'@;
put 'ZSgpe2lmKG51bGw9PXU3KXtpZigib2JqZWN0IiE9dHlwZW9mIGRvY3VtZW50fHwhZG9jdW1lbnR8fCJmdW5jdGlvbiIhPXR5cGVvZiBFbGVtZW50fHwhRWxlbWVudClyZXR1cm4gdTc9ITEsdTc7aWYoInNjcm9sbEJlaGF2aW9yImluIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZSl1'@;
put 'Nz0hMDtlbHNle2NvbnN0IGM9RWxlbWVudC5wcm90b3R5cGUuc2Nyb2xsVG87dTc9ISFjJiYhL1x7XHMqXFtuYXRpdmUgY29kZVxdXHMqXH0vLnRlc3QoYy50b1N0cmluZygpKX19cmV0dXJuIHU3fSgpPyhudWxsIT1hLnRvcCYmKGQuc2Nyb2xsVG9wPWEudG9wKSxudWxsIT1hLmxlZnQmJihk'@;
put 'LnNjcm9sbExlZnQ9YS5sZWZ0KSk6ZC5zY3JvbGxUbyhhKX1tZWFzdXJlU2Nyb2xsT2Zmc2V0KGEpe2NvbnN0IGQ9ImxlZnQiLGg9InJpZ2h0IixmPXRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O2lmKCJ0b3AiPT1hKXJldHVybiBmLnNjcm9sbFRvcDtpZigiYm90dG9tIj09YSlyZXR1'@;
put 'cm4gZi5zY3JvbGxIZWlnaHQtZi5jbGllbnRIZWlnaHQtZi5zY3JvbGxUb3A7Y29uc3Qgdj10aGlzLmRpciYmInJ0bCI9PXRoaXMuZGlyLnZhbHVlO3JldHVybiJzdGFydCI9PWE/YT12P2g6ZDoiZW5kIj09YSYmKGE9dj9kOmgpLHYmJk14KCk9PV9wLklOVkVSVEVEP2E9PWQ/Zi5zY3JvbGxX'@;
put 'aWR0aC1mLmNsaWVudFdpZHRoLWYuc2Nyb2xsTGVmdDpmLnNjcm9sbExlZnQ6diYmTXgoKT09X3AuTkVHQVRFRD9hPT1kP2Yuc2Nyb2xsTGVmdCtmLnNjcm9sbFdpZHRoLWYuY2xpZW50V2lkdGg6LWYuc2Nyb2xsTGVmdDphPT1kP2Yuc2Nyb2xsTGVmdDpmLnNjcm9sbFdpZHRoLWYuY2xpZW50'@;
put 'V2lkdGgtZi5zY3JvbGxMZWZ0fXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKEdlKEppKSxHZShreSksR2UoV2EpLEdlKHBtLDgpKX19c3RhdGlje3RoaXMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsImNkay1zY3JvbGxhYmxl'@;
put 'IiwiIl0sWyIiLCJjZGtTY3JvbGxhYmxlIiwiIl1dLHN0YW5kYWxvbmU6ITB9KX19cmV0dXJuIGN9KSgpLEFMPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgpe3RoaXMuX3BsYXRmb3JtPWEsdGhpcy5fY2hhbmdlPW5ldyBXbix0aGlzLl9jaGFuZ2VMaXN0ZW5lcj1mPT57dGhpcy5f'@;
put 'Y2hhbmdlLm5leHQoZil9LHRoaXMuX2RvY3VtZW50PWgsZC5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e2lmKGEuaXNCcm93c2VyKXtjb25zdCBmPXRoaXMuX2dldFdpbmRvdygpO2YuYWRkRXZlbnRMaXN0ZW5lcigicmVzaXplIix0aGlzLl9jaGFuZ2VMaXN0ZW5lciksZi5hZGRFdmVudExpc3Rl'@;
put 'bmVyKCJvcmllbnRhdGlvbmNoYW5nZSIsdGhpcy5fY2hhbmdlTGlzdGVuZXIpfXRoaXMuY2hhbmdlKCkuc3Vic2NyaWJlKCgpPT50aGlzLl92aWV3cG9ydFNpemU9bnVsbCl9KX1uZ09uRGVzdHJveSgpe2lmKHRoaXMuX3BsYXRmb3JtLmlzQnJvd3Nlcil7Y29uc3QgYT10aGlzLl9nZXRXaW5k'@;
put 'b3coKTthLnJlbW92ZUV2ZW50TGlzdGVuZXIoInJlc2l6ZSIsdGhpcy5fY2hhbmdlTGlzdGVuZXIpLGEucmVtb3ZlRXZlbnRMaXN0ZW5lcigib3JpZW50YXRpb25jaGFuZ2UiLHRoaXMuX2NoYW5nZUxpc3RlbmVyKX10aGlzLl9jaGFuZ2UuY29tcGxldGUoKX1nZXRWaWV3cG9ydFNpemUoKXt0'@;
put 'aGlzLl92aWV3cG9ydFNpemV8fHRoaXMuX3VwZGF0ZVZpZXdwb3J0U2l6ZSgpO2NvbnN0IGE9e3dpZHRoOnRoaXMuX3ZpZXdwb3J0U2l6ZS53aWR0aCxoZWlnaHQ6dGhpcy5fdmlld3BvcnRTaXplLmhlaWdodH07cmV0dXJuIHRoaXMuX3BsYXRmb3JtLmlzQnJvd3Nlcnx8KHRoaXMuX3ZpZXdw'@;
put 'b3J0U2l6ZT1udWxsKSxhfWdldFZpZXdwb3J0UmVjdCgpe2NvbnN0IGE9dGhpcy5nZXRWaWV3cG9ydFNjcm9sbFBvc2l0aW9uKCkse3dpZHRoOmQsaGVpZ2h0Omh9PXRoaXMuZ2V0Vmlld3BvcnRTaXplKCk7cmV0dXJue3RvcDphLnRvcCxsZWZ0OmEubGVmdCxib3R0b206YS50b3AraCxyaWdo'@;
put 'dDphLmxlZnQrZCxoZWlnaHQ6aCx3aWR0aDpkfX1nZXRWaWV3cG9ydFNjcm9sbFBvc2l0aW9uKCl7aWYoIXRoaXMuX3BsYXRmb3JtLmlzQnJvd3NlcilyZXR1cm57dG9wOjAsbGVmdDowfTtjb25zdCBhPXRoaXMuX2RvY3VtZW50LGQ9dGhpcy5fZ2V0V2luZG93KCksaD1hLmRvY3VtZW50RWxl'@;
put 'bWVudCxmPWguZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cmV0dXJue3RvcDotZi50b3B8fGEuYm9keS5zY3JvbGxUb3B8fGQuc2Nyb2xsWXx8aC5zY3JvbGxUb3B8fDAsbGVmdDotZi5sZWZ0fHxhLmJvZHkuc2Nyb2xsTGVmdHx8ZC5zY3JvbGxYfHxoLnNjcm9sbExlZnR8fDB9fWNoYW5nZShh'@;
put 'PTIwKXtyZXR1cm4gYT4wP3RoaXMuX2NoYW5nZS5waXBlKHlZKGEpKTp0aGlzLl9jaGFuZ2V9X2dldFdpbmRvdygpe3JldHVybiB0aGlzLl9kb2N1bWVudC5kZWZhdWx0Vmlld3x8d2luZG93fV91cGRhdGVWaWV3cG9ydFNpemUoKXtjb25zdCBhPXRoaXMuX2dldFdpbmRvdygpO3RoaXMuX3Zp'@;
put 'ZXdwb3J0U2l6ZT10aGlzLl9wbGF0Zm9ybS5pc0Jyb3dzZXI/e3dpZHRoOmEuaW5uZXJXaWR0aCxoZWlnaHQ6YS5pbm5lckhlaWdodH06e3dpZHRoOjAsaGVpZ2h0OjB9fXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKHhyKEN4KSx4cihXYSkseHIo'@;
put 'dnMsOCkpfX1zdGF0aWN7dGhpcy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KX19cmV0dXJuIGN9KSgpO2NvbnN0IEcwZT1uZXcgU3QoIlZJUlRVQUxfU0NST0xMQUJMRSIpO2xldCAkMGU9KCgpPT57Y2xhc3MgYyBleHRlbmRz'@;
put 'IFkwZXtjb25zdHJ1Y3RvcihhLGQsaCxmKXtzdXBlcihhLGQsaCxmKX1tZWFzdXJlVmlld3BvcnRTaXplKGEpe2NvbnN0IGQ9dGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7cmV0dXJuImhvcml6b250YWwiPT09YT9kLmNsaWVudFdpZHRoOmQuY2xpZW50SGVpZ2h0fXN0YXRpY3t0aGlz'@;
put 'Llx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKEdlKEppKSxHZShreSksR2UoV2EpLEdlKHBtLDgpKX19c3RhdGlje3RoaXMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsZmVhdHVyZXM6W3dhXX0pfX1yZXR1cm4gY30pKCk7Y29uc3QgREZlPXR5cGVvZiByZXF1ZXN0QW5pbWF0'@;
put 'aW9uRnJhbWU8InUiP2owZTpmRmU7bGV0IER5PSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyAkMGV7Z2V0IG9yaWVudGF0aW9uKCl7cmV0dXJuIHRoaXMuX29yaWVudGF0aW9ufXNldCBvcmllbnRhdGlvbihhKXt0aGlzLl9vcmllbnRhdGlvbiE9PWEmJih0aGlzLl9vcmllbnRhdGlvbj1hLHRoaXMu'@;
put 'X2NhbGN1bGF0ZVNwYWNlclNpemUoKSl9Y29uc3RydWN0b3IoYSxkLGgsZix2LE0sRCxaKXtzdXBlcihhLE0saCx2KSx0aGlzLmVsZW1lbnRSZWY9YSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZj1kLHRoaXMuX3Njcm9sbFN0cmF0ZWd5PWYsdGhpcy5zY3JvbGxhYmxlPVosdGhpcy5fcGxhdGZv'@;
put 'cm09ZmkoQ3gpLHRoaXMuX2RldGFjaGVkU3ViamVjdD1uZXcgV24sdGhpcy5fcmVuZGVyZWRSYW5nZVN1YmplY3Q9bmV3IFduLHRoaXMuX29yaWVudGF0aW9uPSJ2ZXJ0aWNhbCIsdGhpcy5hcHBlbmRPbmx5PSExLHRoaXMuc2Nyb2xsZWRJbmRleENoYW5nZT1uZXcgWHQocmU9PnRoaXMuX3Nj'@;
put 'cm9sbFN0cmF0ZWd5LnNjcm9sbGVkSW5kZXhDaGFuZ2Uuc3Vic2NyaWJlKGNlPT5Qcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT50aGlzLm5nWm9uZS5ydW4oKCk9PnJlLm5leHQoY2UpKSkpKSx0aGlzLnJlbmRlcmVkUmFuZ2VTdHJlYW09dGhpcy5fcmVuZGVyZWRSYW5nZVN1YmplY3QsdGhp'@;
put 'cy5fdG90YWxDb250ZW50U2l6ZT0wLHRoaXMuX3RvdGFsQ29udGVudFdpZHRoPSIiLHRoaXMuX3RvdGFsQ29udGVudEhlaWdodD0iIix0aGlzLl9yZW5kZXJlZFJhbmdlPXtzdGFydDowLGVuZDowfSx0aGlzLl9kYXRhTGVuZ3RoPTAsdGhpcy5fdmlld3BvcnRTaXplPTAsdGhpcy5fcmVuZGVy'@;
put 'ZWRDb250ZW50T2Zmc2V0PTAsdGhpcy5fcmVuZGVyZWRDb250ZW50T2Zmc2V0TmVlZHNSZXdyaXRlPSExLHRoaXMuX2lzQ2hhbmdlRGV0ZWN0aW9uUGVuZGluZz0hMSx0aGlzLl9ydW5BZnRlckNoYW5nZURldGVjdGlvbj1bXSx0aGlzLl92aWV3cG9ydENoYW5nZXM9cXQuRU1QVFksdGhpcy5f'@;
put 'dmlld3BvcnRDaGFuZ2VzPUQuY2hhbmdlKCkuc3Vic2NyaWJlKCgpPT57dGhpcy5jaGVja1ZpZXdwb3J0U2l6ZSgpfSksdGhpcy5zY3JvbGxhYmxlfHwodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LmFkZCgiY2RrLXZpcnR1YWwtc2Nyb2xsYWJsZSIpLHRoaXMuc2Ny'@;
put 'b2xsYWJsZT10aGlzKX1uZ09uSW5pdCgpe3RoaXMuX3BsYXRmb3JtLmlzQnJvd3NlciYmKHRoaXMuc2Nyb2xsYWJsZT09PXRoaXMmJnN1cGVyLm5nT25Jbml0KCksdGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PlByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9Pnt0aGlzLl9tZWFz'@;
put 'dXJlVmlld3BvcnRTaXplKCksdGhpcy5fc2Nyb2xsU3RyYXRlZ3kuYXR0YWNoKHRoaXMpLHRoaXMuc2Nyb2xsYWJsZS5lbGVtZW50U2Nyb2xsZWQoKS5waXBlKHgyKG51bGwpLHlZKDAsREZlKSxWMCh0aGlzLl9kZXN0cm95ZWQpKS5zdWJzY3JpYmUoKCk9PnRoaXMuX3Njcm9sbFN0cmF0ZWd5'@;
put 'Lm9uQ29udGVudFNjcm9sbGVkKCkpLHRoaXMuX21hcmtDaGFuZ2VEZXRlY3Rpb25OZWVkZWQoKX0pKSl9bmdPbkRlc3Ryb3koKXt0aGlzLmRldGFjaCgpLHRoaXMuX3Njcm9sbFN0cmF0ZWd5LmRldGFjaCgpLHRoaXMuX3JlbmRlcmVkUmFuZ2VTdWJqZWN0LmNvbXBsZXRlKCksdGhpcy5fZGV0'@;
put 'YWNoZWRTdWJqZWN0LmNvbXBsZXRlKCksdGhpcy5fdmlld3BvcnRDaGFuZ2VzLnVuc3Vic2NyaWJlKCksc3VwZXIubmdPbkRlc3Ryb3koKX1hdHRhY2goYSl7dGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9Pnt0aGlzLl9mb3JPZj1hLHRoaXMuX2Zvck9mLmRhdGFTdHJlYW0ucGlw'@;
put 'ZShWMCh0aGlzLl9kZXRhY2hlZFN1YmplY3QpKS5zdWJzY3JpYmUoZD0+e2NvbnN0IGg9ZC5sZW5ndGg7aCE9PXRoaXMuX2RhdGFMZW5ndGgmJih0aGlzLl9kYXRhTGVuZ3RoPWgsdGhpcy5fc2Nyb2xsU3RyYXRlZ3kub25EYXRhTGVuZ3RoQ2hhbmdlZCgpKSx0aGlzLl9kb0NoYW5nZURldGVj'@;
put 'dGlvbigpfSl9KX1kZXRhY2goKXt0aGlzLl9mb3JPZj1udWxsLHRoaXMuX2RldGFjaGVkU3ViamVjdC5uZXh0KCl9Z2V0RGF0YUxlbmd0aCgpe3JldHVybiB0aGlzLl9kYXRhTGVuZ3RofWdldFZpZXdwb3J0U2l6ZSgpe3JldHVybiB0aGlzLl92aWV3cG9ydFNpemV9Z2V0UmVuZGVyZWRSYW5n'@;
put 'ZSgpe3JldHVybiB0aGlzLl9yZW5kZXJlZFJhbmdlfW1lYXN1cmVCb3VuZGluZ0NsaWVudFJlY3RXaXRoU2Nyb2xsT2Zmc2V0KGEpe3JldHVybiB0aGlzLmdldEVsZW1lbnRSZWYoKS5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpW2FdfXNldFRvdGFsQ29udGVudFNpemUo'@;
put 'YSl7dGhpcy5fdG90YWxDb250ZW50U2l6ZSE9PWEmJih0aGlzLl90b3RhbENvbnRlbnRTaXplPWEsdGhpcy5fY2FsY3VsYXRlU3BhY2VyU2l6ZSgpLHRoaXMuX21hcmtDaGFuZ2VEZXRlY3Rpb25OZWVkZWQoKSl9c2V0UmVuZGVyZWRSYW5nZShhKXsoZnVuY3Rpb24ga0ZlKGMsbCl7cmV0dXJu'@;
put 'IGMuc3RhcnQ9PWwuc3RhcnQmJmMuZW5kPT1sLmVuZH0pKHRoaXMuX3JlbmRlcmVkUmFuZ2UsYSl8fCh0aGlzLmFwcGVuZE9ubHkmJihhPXtzdGFydDowLGVuZDpNYXRoLm1heCh0aGlzLl9yZW5kZXJlZFJhbmdlLmVuZCxhLmVuZCl9KSx0aGlzLl9yZW5kZXJlZFJhbmdlU3ViamVjdC5uZXh0'@;
put 'KHRoaXMuX3JlbmRlcmVkUmFuZ2U9YSksdGhpcy5fbWFya0NoYW5nZURldGVjdGlvbk5lZWRlZCgoKT0+dGhpcy5fc2Nyb2xsU3RyYXRlZ3kub25Db250ZW50UmVuZGVyZWQoKSkpfWdldE9mZnNldFRvUmVuZGVyZWRDb250ZW50U3RhcnQoKXtyZXR1cm4gdGhpcy5fcmVuZGVyZWRDb250ZW50'@;
put 'T2Zmc2V0TmVlZHNSZXdyaXRlP251bGw6dGhpcy5fcmVuZGVyZWRDb250ZW50T2Zmc2V0fXNldFJlbmRlcmVkQ29udGVudE9mZnNldChhLGQ9InRvLXN0YXJ0Iil7YT10aGlzLmFwcGVuZE9ubHkmJiJ0by1zdGFydCI9PT1kPzA6YTtjb25zdCBmPSJob3Jpem9udGFsIj09dGhpcy5vcmllbnRh'@;
put 'dGlvbix2PWY/IlgiOiJZIjtsZXQgRD1gdHJhbnNsYXRlJHt2fSgke051bWJlcigoZiYmdGhpcy5kaXImJiJydGwiPT10aGlzLmRpci52YWx1ZT8tMToxKSphKX1weClgO3RoaXMuX3JlbmRlcmVkQ29udGVudE9mZnNldD1hLCJ0by1lbmQiPT09ZCYmKEQrPWAgdHJhbnNsYXRlJHt2fSgtMTAw'@;
put 'JSlgLHRoaXMuX3JlbmRlcmVkQ29udGVudE9mZnNldE5lZWRzUmV3cml0ZT0hMCksdGhpcy5fcmVuZGVyZWRDb250ZW50VHJhbnNmb3JtIT1EJiYodGhpcy5fcmVuZGVyZWRDb250ZW50VHJhbnNmb3JtPUQsdGhpcy5fbWFya0NoYW5nZURldGVjdGlvbk5lZWRlZCgoKT0+e3RoaXMuX3JlbmRl'@;
put 'cmVkQ29udGVudE9mZnNldE5lZWRzUmV3cml0ZT8odGhpcy5fcmVuZGVyZWRDb250ZW50T2Zmc2V0LT10aGlzLm1lYXN1cmVSZW5kZXJlZENvbnRlbnRTaXplKCksdGhpcy5fcmVuZGVyZWRDb250ZW50T2Zmc2V0TmVlZHNSZXdyaXRlPSExLHRoaXMuc2V0UmVuZGVyZWRDb250ZW50T2Zmc2V0'@;
put 'KHRoaXMuX3JlbmRlcmVkQ29udGVudE9mZnNldCkpOnRoaXMuX3Njcm9sbFN0cmF0ZWd5Lm9uUmVuZGVyZWRPZmZzZXRDaGFuZ2VkKCl9KSl9c2Nyb2xsVG9PZmZzZXQoYSxkPSJhdXRvIil7Y29uc3QgaD17YmVoYXZpb3I6ZH07Imhvcml6b250YWwiPT09dGhpcy5vcmllbnRhdGlvbj9oLnN0'@;
put 'YXJ0PWE6aC50b3A9YSx0aGlzLnNjcm9sbGFibGUuc2Nyb2xsVG8oaCl9c2Nyb2xsVG9JbmRleChhLGQ9ImF1dG8iKXt0aGlzLl9zY3JvbGxTdHJhdGVneS5zY3JvbGxUb0luZGV4KGEsZCl9bWVhc3VyZVNjcm9sbE9mZnNldChhKXtsZXQgZDtyZXR1cm4gZD10aGlzLnNjcm9sbGFibGU9PXRo'@;
put 'aXM/aD0+c3VwZXIubWVhc3VyZVNjcm9sbE9mZnNldChoKTpoPT50aGlzLnNjcm9sbGFibGUubWVhc3VyZVNjcm9sbE9mZnNldChoKSxNYXRoLm1heCgwLGQoYT8/KCJob3Jpem9udGFsIj09PXRoaXMub3JpZW50YXRpb24/InN0YXJ0IjoidG9wIikpLXRoaXMubWVhc3VyZVZpZXdwb3J0T2Zm'@;
put 'c2V0KCkpfW1lYXN1cmVWaWV3cG9ydE9mZnNldChhKXtsZXQgZDtjb25zdCBoPSJsZWZ0IixmPSJyaWdodCIsdj0icnRsIj09dGhpcy5kaXI/LnZhbHVlO2Q9InN0YXJ0Ij09YT92P2Y6aDoiZW5kIj09YT92P2g6ZjphfHwoImhvcml6b250YWwiPT09dGhpcy5vcmllbnRhdGlvbj8ibGVmdCI6'@;
put 'InRvcCIpO2NvbnN0IE09dGhpcy5zY3JvbGxhYmxlLm1lYXN1cmVCb3VuZGluZ0NsaWVudFJlY3RXaXRoU2Nyb2xsT2Zmc2V0KGQpO3JldHVybiB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVtkXS1NfW1lYXN1cmVSZW5kZXJlZENvbnRlbnRT'@;
put 'aXplKCl7Y29uc3QgYT10aGlzLl9jb250ZW50V3JhcHBlci5uYXRpdmVFbGVtZW50O3JldHVybiJob3Jpem9udGFsIj09PXRoaXMub3JpZW50YXRpb24/YS5vZmZzZXRXaWR0aDphLm9mZnNldEhlaWdodH1tZWFzdXJlUmFuZ2VTaXplKGEpe3JldHVybiB0aGlzLl9mb3JPZj90aGlzLl9mb3JP'@;
put 'Zi5tZWFzdXJlUmFuZ2VTaXplKGEsdGhpcy5vcmllbnRhdGlvbik6MH1jaGVja1ZpZXdwb3J0U2l6ZSgpe3RoaXMuX21lYXN1cmVWaWV3cG9ydFNpemUoKSx0aGlzLl9zY3JvbGxTdHJhdGVneS5vbkRhdGFMZW5ndGhDaGFuZ2VkKCl9X21lYXN1cmVWaWV3cG9ydFNpemUoKXt0aGlzLl92aWV3'@;
put 'cG9ydFNpemU9dGhpcy5zY3JvbGxhYmxlLm1lYXN1cmVWaWV3cG9ydFNpemUodGhpcy5vcmllbnRhdGlvbil9X21hcmtDaGFuZ2VEZXRlY3Rpb25OZWVkZWQoYSl7YSYmdGhpcy5fcnVuQWZ0ZXJDaGFuZ2VEZXRlY3Rpb24ucHVzaChhKSx0aGlzLl9pc0NoYW5nZURldGVjdGlvblBlbmRpbmd8'@;
put 'fCh0aGlzLl9pc0NoYW5nZURldGVjdGlvblBlbmRpbmc9ITAsdGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PlByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9Pnt0aGlzLl9kb0NoYW5nZURldGVjdGlvbigpfSkpKX1fZG9DaGFuZ2VEZXRlY3Rpb24oKXt0aGlzLl9pc0NoYW5nZURl'@;
put 'dGVjdGlvblBlbmRpbmc9ITEsdGhpcy5fY29udGVudFdyYXBwZXIubmF0aXZlRWxlbWVudC5zdHlsZS50cmFuc2Zvcm09dGhpcy5fcmVuZGVyZWRDb250ZW50VHJhbnNmb3JtLHRoaXMubmdab25lLnJ1bigoKT0+dGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCkpO2NvbnN0'@;
put 'IGE9dGhpcy5fcnVuQWZ0ZXJDaGFuZ2VEZXRlY3Rpb247dGhpcy5fcnVuQWZ0ZXJDaGFuZ2VEZXRlY3Rpb249W107Zm9yKGNvbnN0IGQgb2YgYSlkKCl9X2NhbGN1bGF0ZVNwYWNlclNpemUoKXt0aGlzLl90b3RhbENvbnRlbnRIZWlnaHQ9Imhvcml6b250YWwiPT09dGhpcy5vcmllbnRhdGlv'@;
put 'bj8iIjpgJHt0aGlzLl90b3RhbENvbnRlbnRTaXplfXB4YCx0aGlzLl90b3RhbENvbnRlbnRXaWR0aD0iaG9yaXpvbnRhbCI9PT10aGlzLm9yaWVudGF0aW9uP2Ake3RoaXMuX3RvdGFsQ29udGVudFNpemV9cHhgOiIifXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4g'@;
put 'bmV3KGR8fGMpKEdlKEppKSxHZShFcyksR2UoV2EpLEdlKFcwZSw4KSxHZShwbSw4KSxHZShreSksR2UoQUwpLEdlKEcwZSw4KSl9fXN0YXRpY3t0aGlzLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjZGstdmlydHVhbC1zY3JvbGwtdmlld3BvcnQiXV0sdmlld1F1ZXJ5OmZ1'@;
put 'bmN0aW9uKGQsaCl7aWYoMSZkJiZxYShNRmUsNyksMiZkKXtsZXQgZjtDaShmPVNpKCkpJiYoaC5fY29udGVudFdyYXBwZXI9Zi5maXJzdCl9fSxob3N0QXR0cnM6WzEsImNkay12aXJ0dWFsLXNjcm9sbC12aWV3cG9ydCJdLGhvc3RWYXJzOjQsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGQsaCl7'@;
put 'MiZkJiZUcigiY2RrLXZpcnR1YWwtc2Nyb2xsLW9yaWVudGF0aW9uLWhvcml6b250YWwiLCJob3Jpem9udGFsIj09PWgub3JpZW50YXRpb24pKCJjZGstdmlydHVhbC1zY3JvbGwtb3JpZW50YXRpb24tdmVydGljYWwiLCJob3Jpem9udGFsIiE9PWgub3JpZW50YXRpb24pfSxpbnB1dHM6e29y'@;
put 'aWVudGF0aW9uOiJvcmllbnRhdGlvbiIsYXBwZW5kT25seTpbTm4uSGFzRGVjb3JhdG9ySW5wdXRUcmFuc2Zvcm0sImFwcGVuZE9ubHkiLCJhcHBlbmRPbmx5IixzMV19LG91dHB1dHM6e3Njcm9sbGVkSW5kZXhDaGFuZ2U6InNjcm9sbGVkSW5kZXhDaGFuZ2UifSxzdGFuZGFsb25lOiEwLGZl'@;
put 'YXR1cmVzOltkYShbe3Byb3ZpZGU6WTBlLHVzZUZhY3Rvcnk6KGEsZCk9PmF8fGQsZGVwczpbW25ldyBJMSxuZXcgYzUoRzBlKV0sY119XSksV2wsd2EscUldLG5nQ29udGVudFNlbGVjdG9yczp4RmUsZGVjbHM6NCx2YXJzOjQsY29uc3RzOltbImNvbnRlbnRXcmFwcGVyIiwiIl0sWzEsImNk'@;
put 'ay12aXJ0dWFsLXNjcm9sbC1jb250ZW50LXdyYXBwZXIiXSxbMSwiY2RrLXZpcnR1YWwtc2Nyb2xsLXNwYWNlciJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihkLGgpezEmZCYmKHNhKCksZGUoMCwiZGl2IiwxLDApLFlyKDIpLGhlKCksR3QoMywiZGl2IiwyKSksMiZkJiYoZmUoMyksX2QoIndpZHRo'@;
put 'IixoLl90b3RhbENvbnRlbnRXaWR0aCkoImhlaWdodCIsaC5fdG90YWxDb250ZW50SGVpZ2h0KSl9LHN0eWxlczpbImNkay12aXJ0dWFsLXNjcm9sbC12aWV3cG9ydHtkaXNwbGF5OmJsb2NrO3Bvc2l0aW9uOnJlbGF0aXZlO3RyYW5zZm9ybTp0cmFuc2xhdGVaKDApfS5jZGstdmlydHVhbC1z'@;
put 'Y3JvbGxhYmxle292ZXJmbG93OmF1dG87d2lsbC1jaGFuZ2U6c2Nyb2xsLXBvc2l0aW9uO2NvbnRhaW46c3RyaWN0Oy13ZWJraXQtb3ZlcmZsb3ctc2Nyb2xsaW5nOnRvdWNofS5jZGstdmlydHVhbC1zY3JvbGwtY29udGVudC13cmFwcGVye3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2xlZnQ6'@;
put 'MDtjb250YWluOmNvbnRlbnR9W2Rpcj1ydGxdIC5jZGstdmlydHVhbC1zY3JvbGwtY29udGVudC13cmFwcGVye3JpZ2h0OjA7bGVmdDphdXRvfS5jZGstdmlydHVhbC1zY3JvbGwtb3JpZW50YXRpb24taG9yaXpvbnRhbCAuY2RrLXZpcnR1YWwtc2Nyb2xsLWNvbnRlbnQtd3JhcHBlcnttaW4t'@;
put 'aGVpZ2h0OjEwMCV9LmNkay12aXJ0dWFsLXNjcm9sbC1vcmllbnRhdGlvbi1ob3Jpem9udGFsIC5jZGstdmlydHVhbC1zY3JvbGwtY29udGVudC13cmFwcGVyPmRsOm5vdChbY2RrVmlydHVhbEZvcl0pLC5jZGstdmlydHVhbC1zY3JvbGwtb3JpZW50YXRpb24taG9yaXpvbnRhbCAuY2RrLXZp'@;
put 'cnR1YWwtc2Nyb2xsLWNvbnRlbnQtd3JhcHBlcj5vbDpub3QoW2Nka1ZpcnR1YWxGb3JdKSwuY2RrLXZpcnR1YWwtc2Nyb2xsLW9yaWVudGF0aW9uLWhvcml6b250YWwgLmNkay12aXJ0dWFsLXNjcm9sbC1jb250ZW50LXdyYXBwZXI+dGFibGU6bm90KFtjZGtWaXJ0dWFsRm9yXSksLmNkay12'@;
put 'aXJ0dWFsLXNjcm9sbC1vcmllbnRhdGlvbi1ob3Jpem9udGFsIC5jZGstdmlydHVhbC1zY3JvbGwtY29udGVudC13cmFwcGVyPnVsOm5vdChbY2RrVmlydHVhbEZvcl0pe3BhZGRpbmctbGVmdDowO3BhZGRpbmctcmlnaHQ6MDttYXJnaW4tbGVmdDowO21hcmdpbi1yaWdodDowO2JvcmRlci1s'@;
put 'ZWZ0LXdpZHRoOjA7Ym9yZGVyLXJpZ2h0LXdpZHRoOjA7b3V0bGluZTpub25lfS5jZGstdmlydHVhbC1zY3JvbGwtb3JpZW50YXRpb24tdmVydGljYWwgLmNkay12aXJ0dWFsLXNjcm9sbC1jb250ZW50LXdyYXBwZXJ7bWluLXdpZHRoOjEwMCV9LmNkay12aXJ0dWFsLXNjcm9sbC1vcmllbnRh'@;
put 'dGlvbi12ZXJ0aWNhbCAuY2RrLXZpcnR1YWwtc2Nyb2xsLWNvbnRlbnQtd3JhcHBlcj5kbDpub3QoW2Nka1ZpcnR1YWxGb3JdKSwuY2RrLXZpcnR1YWwtc2Nyb2xsLW9yaWVudGF0aW9uLXZlcnRpY2FsIC5jZGstdmlydHVhbC1zY3JvbGwtY29udGVudC13cmFwcGVyPm9sOm5vdChbY2RrVmly'@;
put 'dHVhbEZvcl0pLC5jZGstdmlydHVhbC1zY3JvbGwtb3JpZW50YXRpb24tdmVydGljYWwgLmNkay12aXJ0dWFsLXNjcm9sbC1jb250ZW50LXdyYXBwZXI+dGFibGU6bm90KFtjZGtWaXJ0dWFsRm9yXSksLmNkay12aXJ0dWFsLXNjcm9sbC1vcmllbnRhdGlvbi12ZXJ0aWNhbCAuY2RrLXZpcnR1'@;
put 'YWwtc2Nyb2xsLWNvbnRlbnQtd3JhcHBlcj51bDpub3QoW2Nka1ZpcnR1YWxGb3JdKXtwYWRkaW5nLXRvcDowO3BhZGRpbmctYm90dG9tOjA7bWFyZ2luLXRvcDowO21hcmdpbi1ib3R0b206MDtib3JkZXItdG9wLXdpZHRoOjA7Ym9yZGVyLWJvdHRvbS13aWR0aDowO291dGxpbmU6bm9uZX0u'@;
put 'Y2RrLXZpcnR1YWwtc2Nyb2xsLXNwYWNlcntoZWlnaHQ6MXB4O3RyYW5zZm9ybS1vcmlnaW46MCAwO2ZsZXg6MCAwIGF1dG99W2Rpcj1ydGxdIC5jZGstdmlydHVhbC1zY3JvbGwtc3BhY2Vye3RyYW5zZm9ybS1vcmlnaW46MTAwJSAwfSJdLGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rp'@;
put 'b246MH0pfX1yZXR1cm4gY30pKCk7ZnVuY3Rpb24gSzBlKGMsbCxhKXtpZighYS5nZXRCb3VuZGluZ0NsaWVudFJlY3QpcmV0dXJuIDA7Y29uc3QgaD1hLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3JldHVybiJob3Jpem9udGFsIj09PWM/InN0YXJ0Ij09PWw/aC5sZWZ0OmgucmlnaHQ6InN0'@;
put 'YXJ0Ij09PWw/aC50b3A6aC5ib3R0b219bGV0IGtMPSgoKT0+e2NsYXNzIGN7Z2V0IGNka1ZpcnR1YWxGb3JPZigpe3JldHVybiB0aGlzLl9jZGtWaXJ0dWFsRm9yT2Z9c2V0IGNka1ZpcnR1YWxGb3JPZihhKXt0aGlzLl9jZGtWaXJ0dWFsRm9yT2Y9YSxmdW5jdGlvbiBDRmUoYyl7cmV0dXJu'@;
put 'IGMmJiJmdW5jdGlvbiI9PXR5cGVvZiBjLmNvbm5lY3QmJiEoYyBpbnN0YW5jZW9mIFdaKX0oYSk/dGhpcy5fZGF0YVNvdXJjZUNoYW5nZXMubmV4dChhKTp0aGlzLl9kYXRhU291cmNlQ2hhbmdlcy5uZXh0KG5ldyBTRmUoQk0oYSk/YTpBcnJheS5mcm9tKGF8fFtdKSkpfWdldCBjZGtWaXJ0'@;
put 'dWFsRm9yVHJhY2tCeSgpe3JldHVybiB0aGlzLl9jZGtWaXJ0dWFsRm9yVHJhY2tCeX1zZXQgY2RrVmlydHVhbEZvclRyYWNrQnkoYSl7dGhpcy5fbmVlZHNVcGRhdGU9ITAsdGhpcy5fY2RrVmlydHVhbEZvclRyYWNrQnk9YT8oZCxoKT0+YShkKyh0aGlzLl9yZW5kZXJlZFJhbmdlP3RoaXMu'@;
put 'X3JlbmRlcmVkUmFuZ2Uuc3RhcnQ6MCksaCk6dm9pZCAwfXNldCBjZGtWaXJ0dWFsRm9yVGVtcGxhdGUoYSl7YSYmKHRoaXMuX25lZWRzVXBkYXRlPSEwLHRoaXMuX3RlbXBsYXRlPWEpfWdldCBjZGtWaXJ0dWFsRm9yVGVtcGxhdGVDYWNoZVNpemUoKXtyZXR1cm4gdGhpcy5fdmlld1JlcGVh'@;
put 'dGVyLnZpZXdDYWNoZVNpemV9c2V0IGNka1ZpcnR1YWxGb3JUZW1wbGF0ZUNhY2hlU2l6ZShhKXt0aGlzLl92aWV3UmVwZWF0ZXIudmlld0NhY2hlU2l6ZT1kNyhhKX1jb25zdHJ1Y3RvcihhLGQsaCxmLHYsTSl7dGhpcy5fdmlld0NvbnRhaW5lclJlZj1hLHRoaXMuX3RlbXBsYXRlPWQsdGhp'@;
put 'cy5fZGlmZmVycz1oLHRoaXMuX3ZpZXdSZXBlYXRlcj1mLHRoaXMuX3ZpZXdwb3J0PXYsdGhpcy52aWV3Q2hhbmdlPW5ldyBXbix0aGlzLl9kYXRhU291cmNlQ2hhbmdlcz1uZXcgV24sdGhpcy5kYXRhU3RyZWFtPXRoaXMuX2RhdGFTb3VyY2VDaGFuZ2VzLnBpcGUoeDIobnVsbCksZnVuY3Rp'@;
put 'b24gbUZlKCl7cmV0dXJuIFZpKChjLGwpPT57bGV0IGEsZD0hMTtjLnN1YnNjcmliZShOaShsLGg9Pntjb25zdCBmPWE7YT1oLGQmJmwubmV4dChbZixoXSksZD0hMH0pKX0pfSgpLFYxKChbRCxaXSk9PnRoaXMuX2NoYW5nZURhdGFTb3VyY2UoRCxaKSksSTBlKDEpKSx0aGlzLl9kaWZmZXI9'@;
put 'bnVsbCx0aGlzLl9uZWVkc1VwZGF0ZT0hMSx0aGlzLl9kZXN0cm95ZWQ9bmV3IFduLHRoaXMuZGF0YVN0cmVhbS5zdWJzY3JpYmUoRD0+e3RoaXMuX2RhdGE9RCx0aGlzLl9vblJlbmRlcmVkRGF0YUNoYW5nZSgpfSksdGhpcy5fdmlld3BvcnQucmVuZGVyZWRSYW5nZVN0cmVhbS5waXBlKFYw'@;
put 'KHRoaXMuX2Rlc3Ryb3llZCkpLnN1YnNjcmliZShEPT57dGhpcy5fcmVuZGVyZWRSYW5nZT1ELHRoaXMudmlld0NoYW5nZS5vYnNlcnZlcnMubGVuZ3RoJiZNLnJ1bigoKT0+dGhpcy52aWV3Q2hhbmdlLm5leHQodGhpcy5fcmVuZGVyZWRSYW5nZSkpLHRoaXMuX29uUmVuZGVyZWREYXRhQ2hh'@;
put 'bmdlKCl9KSx0aGlzLl92aWV3cG9ydC5hdHRhY2godGhpcyl9bWVhc3VyZVJhbmdlU2l6ZShhLGQpe2lmKGEuc3RhcnQ+PWEuZW5kKXJldHVybiAwO2NvbnN0IGg9YS5zdGFydC10aGlzLl9yZW5kZXJlZFJhbmdlLnN0YXJ0LGY9YS5lbmQtYS5zdGFydDtsZXQgdixNO2ZvcihsZXQgRD0wO0Q8'@;
put 'ZjtEKyspe2NvbnN0IFo9dGhpcy5fdmlld0NvbnRhaW5lclJlZi5nZXQoRCtoKTtpZihaJiZaLnJvb3ROb2Rlcy5sZW5ndGgpe3Y9TT1aLnJvb3ROb2Rlc1swXTticmVha319Zm9yKGxldCBEPWYtMTtEPi0xO0QtLSl7Y29uc3QgWj10aGlzLl92aWV3Q29udGFpbmVyUmVmLmdldChEK2gpO2lm'@;
put 'KFomJloucm9vdE5vZGVzLmxlbmd0aCl7TT1aLnJvb3ROb2Rlc1taLnJvb3ROb2Rlcy5sZW5ndGgtMV07YnJlYWt9fXJldHVybiB2JiZNP0swZShkLCJlbmQiLE0pLUswZShkLCJzdGFydCIsdik6MH1uZ0RvQ2hlY2soKXtpZih0aGlzLl9kaWZmZXImJnRoaXMuX25lZWRzVXBkYXRlKXtjb25z'@;
put 'dCBhPXRoaXMuX2RpZmZlci5kaWZmKHRoaXMuX3JlbmRlcmVkSXRlbXMpO2E/dGhpcy5fYXBwbHlDaGFuZ2VzKGEpOnRoaXMuX3VwZGF0ZUNvbnRleHQoKSx0aGlzLl9uZWVkc1VwZGF0ZT0hMX19bmdPbkRlc3Ryb3koKXt0aGlzLl92aWV3cG9ydC5kZXRhY2goKSx0aGlzLl9kYXRhU291cmNl'@;
put 'Q2hhbmdlcy5uZXh0KHZvaWQgMCksdGhpcy5fZGF0YVNvdXJjZUNoYW5nZXMuY29tcGxldGUoKSx0aGlzLnZpZXdDaGFuZ2UuY29tcGxldGUoKSx0aGlzLl9kZXN0cm95ZWQubmV4dCgpLHRoaXMuX2Rlc3Ryb3llZC5jb21wbGV0ZSgpLHRoaXMuX3ZpZXdSZXBlYXRlci5kZXRhY2goKX1fb25S'@;
put 'ZW5kZXJlZERhdGFDaGFuZ2UoKXt0aGlzLl9yZW5kZXJlZFJhbmdlJiYodGhpcy5fcmVuZGVyZWRJdGVtcz10aGlzLl9kYXRhLnNsaWNlKHRoaXMuX3JlbmRlcmVkUmFuZ2Uuc3RhcnQsdGhpcy5fcmVuZGVyZWRSYW5nZS5lbmQpLHRoaXMuX2RpZmZlcnx8KHRoaXMuX2RpZmZlcj10aGlzLl9k'@;
put 'aWZmZXJzLmZpbmQodGhpcy5fcmVuZGVyZWRJdGVtcykuY3JlYXRlKChhLGQpPT50aGlzLmNka1ZpcnR1YWxGb3JUcmFja0J5P3RoaXMuY2RrVmlydHVhbEZvclRyYWNrQnkoYSxkKTpkKSksdGhpcy5fbmVlZHNVcGRhdGU9ITApfV9jaGFuZ2VEYXRhU291cmNlKGEsZCl7cmV0dXJuIGEmJmEu'@;
put 'ZGlzY29ubmVjdCh0aGlzKSx0aGlzLl9uZWVkc1VwZGF0ZT0hMCxkP2QuY29ubmVjdCh0aGlzKTpmbygpfV91cGRhdGVDb250ZXh0KCl7Y29uc3QgYT10aGlzLl9kYXRhLmxlbmd0aDtsZXQgZD10aGlzLl92aWV3Q29udGFpbmVyUmVmLmxlbmd0aDtmb3IoO2QtLTspe2NvbnN0IGg9dGhpcy5f'@;
put 'dmlld0NvbnRhaW5lclJlZi5nZXQoZCk7aC5jb250ZXh0LmluZGV4PXRoaXMuX3JlbmRlcmVkUmFuZ2Uuc3RhcnQrZCxoLmNvbnRleHQuY291bnQ9YSx0aGlzLl91cGRhdGVDb21wdXRlZENvbnRleHRQcm9wZXJ0aWVzKGguY29udGV4dCksaC5kZXRlY3RDaGFuZ2VzKCl9fV9hcHBseUNoYW5n'@;
put 'ZXMoYSl7dGhpcy5fdmlld1JlcGVhdGVyLmFwcGx5Q2hhbmdlcyhhLHRoaXMuX3ZpZXdDb250YWluZXJSZWYsKGYsdixNKT0+dGhpcy5fZ2V0RW1iZWRkZWRWaWV3QXJncyhmLE0pLGY9PmYuaXRlbSksYS5mb3JFYWNoSWRlbnRpdHlDaGFuZ2UoZj0+e3RoaXMuX3ZpZXdDb250YWluZXJSZWYu'@;
put 'Z2V0KGYuY3VycmVudEluZGV4KS5jb250ZXh0LiRpbXBsaWNpdD1mLml0ZW19KTtjb25zdCBkPXRoaXMuX2RhdGEubGVuZ3RoO2xldCBoPXRoaXMuX3ZpZXdDb250YWluZXJSZWYubGVuZ3RoO2Zvcig7aC0tOyl7Y29uc3QgZj10aGlzLl92aWV3Q29udGFpbmVyUmVmLmdldChoKTtmLmNvbnRl'@;
put 'eHQuaW5kZXg9dGhpcy5fcmVuZGVyZWRSYW5nZS5zdGFydCtoLGYuY29udGV4dC5jb3VudD1kLHRoaXMuX3VwZGF0ZUNvbXB1dGVkQ29udGV4dFByb3BlcnRpZXMoZi5jb250ZXh0KX19X3VwZGF0ZUNvbXB1dGVkQ29udGV4dFByb3BlcnRpZXMoYSl7YS5maXJzdD0wPT09YS5pbmRleCxhLmxh'@;
put 'c3Q9YS5pbmRleD09PWEuY291bnQtMSxhLmV2ZW49YS5pbmRleCUyPT0wLGEub2RkPSFhLmV2ZW59X2dldEVtYmVkZGVkVmlld0FyZ3MoYSxkKXtyZXR1cm57dGVtcGxhdGVSZWY6dGhpcy5fdGVtcGxhdGUsY29udGV4dDp7JGltcGxpY2l0OmEuaXRlbSxjZGtWaXJ0dWFsRm9yT2Y6dGhpcy5f'@;
put 'Y2RrVmlydHVhbEZvck9mLGluZGV4Oi0xLGNvdW50Oi0xLGZpcnN0OiExLGxhc3Q6ITEsb2RkOiExLGV2ZW46ITF9LGluZGV4OmR9fXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKEdlKERvKSxHZShTbCksR2UoZW0pLEdlKF9ZKSxHZShEeSw0KSxH'@;
put 'ZShXYSkpfX1zdGF0aWN7dGhpcy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwiY2RrVmlydHVhbEZvciIsIiIsImNka1ZpcnR1YWxGb3JPZiIsIiJdXSxpbnB1dHM6e2Nka1ZpcnR1YWxGb3JPZjoiY2RrVmlydHVhbEZvck9mIixjZGtWaXJ0dWFsRm9yVHJhY2tCeToiY2Rr'@;
put 'VmlydHVhbEZvclRyYWNrQnkiLGNka1ZpcnR1YWxGb3JUZW1wbGF0ZToiY2RrVmlydHVhbEZvclRlbXBsYXRlIixjZGtWaXJ0dWFsRm9yVGVtcGxhdGVDYWNoZVNpemU6ImNka1ZpcnR1YWxGb3JUZW1wbGF0ZUNhY2hlU2l6ZSJ9LHN0YW5kYWxvbmU6ITAsZmVhdHVyZXM6W2RhKFt7cHJvdmlk'@;
put 'ZTpfWSx1c2VDbGFzczpaMGV9XSldfSl9fXJldHVybiBjfSkoKSxJRmU9KCgpPT57Y2xhc3MgY3tzdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1bW9kPWtpKHt0eXBlOmN9KX1zdGF0aWN7dGhpcy5cdTAyNzVpbmo9'@;
put 'QXIoe30pfX1yZXR1cm4gY30pKCk7ZnVuY3Rpb24gd1koYyxsLGEpe2ZvcihsZXQgZCBpbiBsKWlmKGwuaGFzT3duUHJvcGVydHkoZCkpe2NvbnN0IGg9bFtkXTtoP2Muc2V0UHJvcGVydHkoZCxoLGE/LmhhcyhkKT8iaW1wb3J0YW50IjoiIik6Yy5yZW1vdmVQcm9wZXJ0eShkKX1yZXR1cm4g'@;
put 'Y31mdW5jdGlvbiBJeShjLGwpe2NvbnN0IGE9bD8iIjoibm9uZSI7d1koYy5zdHlsZSx7InRvdWNoLWFjdGlvbiI6bD8iIjoibm9uZSIsIi13ZWJraXQtdXNlci1kcmFnIjpsPyIiOiJub25lIiwiLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yIjpsPyIiOiJ0cmFuc3BhcmVudCIsInVzZXIt'@;
put 'c2VsZWN0IjphLCItbXMtdXNlci1zZWxlY3QiOmEsIi13ZWJraXQtdXNlci1zZWxlY3QiOmEsIi1tb3otdXNlci1zZWxlY3QiOmF9KX1mdW5jdGlvbiBxMGUoYyxsLGEpe3dZKGMuc3R5bGUse3Bvc2l0aW9uOmw/IiI6ImZpeGVkIix0b3A6bD8iIjoiMCIsb3BhY2l0eTpsPyIiOiIwIixsZWZ0'@;
put 'Omw/IiI6Ii05OTllbSJ9LGEpfWZ1bmN0aW9uIERMKGMsbCl7cmV0dXJuIGwmJiJub25lIiE9bD9jKyIgIitsOmN9ZnVuY3Rpb24gWDBlKGMsbCl7Yy5zdHlsZS53aWR0aD1gJHtsLndpZHRofXB4YCxjLnN0eWxlLmhlaWdodD1gJHtsLmhlaWdodH1weGAsYy5zdHlsZS50cmFuc2Zvcm09SUwo'@;
put 'bC5sZWZ0LGwudG9wKX1mdW5jdGlvbiBJTChjLGwpe3JldHVybmB0cmFuc2xhdGUzZCgke01hdGgucm91bmQoYyl9cHgsICR7TWF0aC5yb3VuZChsKX1weCwgMClgfWZ1bmN0aW9uIENZKGMpe2NvbnN0IGw9Yy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtyZXR1cm57dG9wOmwudG9wLHJpZ2h0'@;
put 'OmwucmlnaHQsYm90dG9tOmwuYm90dG9tLGxlZnQ6bC5sZWZ0LHdpZHRoOmwud2lkdGgsaGVpZ2h0OmwuaGVpZ2h0LHg6bC54LHk6bC55fX1mdW5jdGlvbiBTWShjLGwsYSl7Y29uc3R7dG9wOmQsYm90dG9tOmgsbGVmdDpmLHJpZ2h0OnZ9PWM7cmV0dXJuIGE+PWQmJmE8PWgmJmw+PWYmJmw8'@;
put 'PXZ9ZnVuY3Rpb24gRXgoYyxsLGEpe2MudG9wKz1sLGMuYm90dG9tPWMudG9wK2MuaGVpZ2h0LGMubGVmdCs9YSxjLnJpZ2h0PWMubGVmdCtjLndpZHRofWZ1bmN0aW9uIEowZShjLGwsYSxkKXtjb25zdHt0b3A6aCxyaWdodDpmLGJvdHRvbTp2LGxlZnQ6TSx3aWR0aDpELGhlaWdodDpafT1j'@;
put 'LHJlPUQqbCxjZT1aKmw7cmV0dXJuIGQ+aC1jZSYmZDx2K2NlJiZhPk0tcmUmJmE8ZityZX1jbGFzcyBRMGV7Y29uc3RydWN0b3IobCl7dGhpcy5fZG9jdW1lbnQ9bCx0aGlzLnBvc2l0aW9ucz1uZXcgTWFwfWNsZWFyKCl7dGhpcy5wb3NpdGlvbnMuY2xlYXIoKX1jYWNoZShsKXt0aGlzLmNs'@;
put 'ZWFyKCksdGhpcy5wb3NpdGlvbnMuc2V0KHRoaXMuX2RvY3VtZW50LHtzY3JvbGxQb3NpdGlvbjp0aGlzLmdldFZpZXdwb3J0U2Nyb2xsUG9zaXRpb24oKX0pLGwuZm9yRWFjaChhPT57dGhpcy5wb3NpdGlvbnMuc2V0KGEse3Njcm9sbFBvc2l0aW9uOnt0b3A6YS5zY3JvbGxUb3AsbGVmdDph'@;
put 'LnNjcm9sbExlZnR9LGNsaWVudFJlY3Q6Q1koYSl9KX0pfWhhbmRsZVNjcm9sbChsKXtjb25zdCBhPXhMKGwpLGQ9dGhpcy5wb3NpdGlvbnMuZ2V0KGEpO2lmKCFkKXJldHVybiBudWxsO2NvbnN0IGg9ZC5zY3JvbGxQb3NpdGlvbjtsZXQgZix2O2lmKGE9PT10aGlzLl9kb2N1bWVudCl7Y29u'@;
put 'c3QgWj10aGlzLmdldFZpZXdwb3J0U2Nyb2xsUG9zaXRpb24oKTtmPVoudG9wLHY9Wi5sZWZ0fWVsc2UgZj1hLnNjcm9sbFRvcCx2PWEuc2Nyb2xsTGVmdDtjb25zdCBNPWgudG9wLWYsRD1oLmxlZnQtdjtyZXR1cm4gdGhpcy5wb3NpdGlvbnMuZm9yRWFjaCgoWixyZSk9PntaLmNsaWVudFJl'@;
put 'Y3QmJmEhPT1yZSYmYS5jb250YWlucyhyZSkmJkV4KFouY2xpZW50UmVjdCxNLEQpfSksaC50b3A9ZixoLmxlZnQ9dix7dG9wOk0sbGVmdDpEfX1nZXRWaWV3cG9ydFNjcm9sbFBvc2l0aW9uKCl7cmV0dXJue3RvcDp3aW5kb3cuc2Nyb2xsWSxsZWZ0OndpbmRvdy5zY3JvbGxYfX19ZnVuY3Rp'@;
put 'b24gZTFlKGMpe2NvbnN0IGw9Yy5jbG9uZU5vZGUoITApLGE9bC5xdWVyeVNlbGVjdG9yQWxsKCJbaWRdIiksZD1jLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7bC5yZW1vdmVBdHRyaWJ1dGUoImlkIik7Zm9yKGxldCBoPTA7aDxhLmxlbmd0aDtoKyspYVtoXS5yZW1vdmVBdHRyaWJ1dGUoImlk'@;
put 'Iik7cmV0dXJuImNhbnZhcyI9PT1kP3IxZShjLGwpOigiaW5wdXQiPT09ZHx8InNlbGVjdCI9PT1kfHwidGV4dGFyZWEiPT09ZCkmJm4xZShjLGwpLHQxZSgiY2FudmFzIixjLGwscjFlKSx0MWUoImlucHV0LCB0ZXh0YXJlYSwgc2VsZWN0IixjLGwsbjFlKSxsfWZ1bmN0aW9uIHQxZShjLGws'@;
put 'YSxkKXtjb25zdCBoPWwucXVlcnlTZWxlY3RvckFsbChjKTtpZihoLmxlbmd0aCl7Y29uc3QgZj1hLnF1ZXJ5U2VsZWN0b3JBbGwoYyk7Zm9yKGxldCB2PTA7djxoLmxlbmd0aDt2KyspZChoW3ZdLGZbdl0pfX1sZXQgTEZlPTA7ZnVuY3Rpb24gbjFlKGMsbCl7ImZpbGUiIT09bC50eXBlJiYo'@;
put 'bC52YWx1ZT1jLnZhbHVlKSwicmFkaW8iPT09bC50eXBlJiZsLm5hbWUmJihsLm5hbWU9YG1hdC1jbG9uZS0ke2wubmFtZX0tJHtMRmUrK31gKX1mdW5jdGlvbiByMWUoYyxsKXtjb25zdCBhPWwuZ2V0Q29udGV4dCgiMmQiKTtpZihhKXRyeXthLmRyYXdJbWFnZShjLDAsMCl9Y2F0Y2h7fX1m'@;
put 'dW5jdGlvbiBpMWUoYyxsKXtjb25zdCBhPWMucm9vdE5vZGVzO2lmKDE9PT1hLmxlbmd0aCYmYVswXS5ub2RlVHlwZT09PWwuRUxFTUVOVF9OT0RFKXJldHVybiBhWzBdO2NvbnN0IGQ9bC5jcmVhdGVFbGVtZW50KCJkaXYiKTtyZXR1cm4gYS5mb3JFYWNoKGg9PmQuYXBwZW5kQ2hpbGQoaCkp'@;
put 'LGR9ZnVuY3Rpb24gYTFlKGMpe2NvbnN0IGw9Yy50b0xvd2VyQ2FzZSgpLmluZGV4T2YoIm1zIik+LTE/MToxZTM7cmV0dXJuIHBhcnNlRmxvYXQoYykqbH1mdW5jdGlvbiBNWShjLGwpe3JldHVybiBjLmdldFByb3BlcnR5VmFsdWUobCkuc3BsaXQoIiwiKS5tYXAoZD0+ZC50cmltKCkpfWNv'@;
put 'bnN0IFBGZT1uZXcgU2V0KFsicG9zaXRpb24iXSk7Y2xhc3MgRkZle2NvbnN0cnVjdG9yKGwsYSxkLGgsZix2LE0sRCxaKXt0aGlzLl9kb2N1bWVudD1sLHRoaXMuX3Jvb3RFbGVtZW50PWEsdGhpcy5fZGlyZWN0aW9uPWQsdGhpcy5faW5pdGlhbERvbVJlY3Q9aCx0aGlzLl9wcmV2aWV3VGVt'@;
put 'cGxhdGU9Zix0aGlzLl9wcmV2aWV3Q2xhc3M9dix0aGlzLl9waWNrdXBQb3NpdGlvbk9uUGFnZT1NLHRoaXMuX2luaXRpYWxUcmFuc2Zvcm09RCx0aGlzLl96SW5kZXg9Wn1hdHRhY2gobCl7dGhpcy5fcHJldmlldz10aGlzLl9jcmVhdGVQcmV2aWV3KCksbC5hcHBlbmRDaGlsZCh0aGlzLl9w'@;
put 'cmV2aWV3KSwic2hvd1BvcG92ZXIiaW4gdGhpcy5fcHJldmlldyYmdGhpcy5fcHJldmlldy5zaG93UG9wb3ZlcigpfWRlc3Ryb3koKXt0aGlzLl9wcmV2aWV3LnJlbW92ZSgpLHRoaXMuX3ByZXZpZXdFbWJlZGRlZFZpZXc/LmRlc3Ryb3koKSx0aGlzLl9wcmV2aWV3PXRoaXMuX3ByZXZpZXdF'@;
put 'bWJlZGRlZFZpZXc9bnVsbH1zZXRUcmFuc2Zvcm0obCl7dGhpcy5fcHJldmlldy5zdHlsZS50cmFuc2Zvcm09bH1nZXRCb3VuZGluZ0NsaWVudFJlY3QoKXtyZXR1cm4gdGhpcy5fcHJldmlldy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKX1hZGRDbGFzcyhsKXt0aGlzLl9wcmV2aWV3LmNsYXNz'@;
put 'TGlzdC5hZGQobCl9Z2V0VHJhbnNpdGlvbkR1cmF0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uIE9GZShjKXtjb25zdCBsPWdldENvbXB1dGVkU3R5bGUoYyksYT1NWShsLCJ0cmFuc2l0aW9uLXByb3BlcnR5IiksZD1hLmZpbmQoTT0+InRyYW5zZm9ybSI9PT1NfHwiYWxsIj09PU0pO2lmKCFkKXJl'@;
put 'dHVybiAwO2NvbnN0IGg9YS5pbmRleE9mKGQpLGY9TVkobCwidHJhbnNpdGlvbi1kdXJhdGlvbiIpLHY9TVkobCwidHJhbnNpdGlvbi1kZWxheSIpO3JldHVybiBhMWUoZltoXSkrYTFlKHZbaF0pfSh0aGlzLl9wcmV2aWV3KX1hZGRFdmVudExpc3RlbmVyKGwsYSl7dGhpcy5fcHJldmlldy5h'@;
put 'ZGRFdmVudExpc3RlbmVyKGwsYSl9cmVtb3ZlRXZlbnRMaXN0ZW5lcihsLGEpe3RoaXMuX3ByZXZpZXcucmVtb3ZlRXZlbnRMaXN0ZW5lcihsLGEpfV9jcmVhdGVQcmV2aWV3KCl7Y29uc3QgbD10aGlzLl9wcmV2aWV3VGVtcGxhdGUsYT10aGlzLl9wcmV2aWV3Q2xhc3MsZD1sP2wudGVtcGxh'@;
put 'dGU6bnVsbDtsZXQgaDtpZihkJiZsKXtjb25zdCBmPWwubWF0Y2hTaXplP3RoaXMuX2luaXRpYWxEb21SZWN0Om51bGwsdj1sLnZpZXdDb250YWluZXIuY3JlYXRlRW1iZWRkZWRWaWV3KGQsbC5jb250ZXh0KTt2LmRldGVjdENoYW5nZXMoKSxoPWkxZSh2LHRoaXMuX2RvY3VtZW50KSx0aGlz'@;
put 'Ll9wcmV2aWV3RW1iZWRkZWRWaWV3PXYsbC5tYXRjaFNpemU/WDBlKGgsZik6aC5zdHlsZS50cmFuc2Zvcm09SUwodGhpcy5fcGlja3VwUG9zaXRpb25PblBhZ2UueCx0aGlzLl9waWNrdXBQb3NpdGlvbk9uUGFnZS55KX1lbHNlIGg9ZTFlKHRoaXMuX3Jvb3RFbGVtZW50KSxYMGUoaCx0aGlz'@;
put 'Ll9pbml0aWFsRG9tUmVjdCksdGhpcy5faW5pdGlhbFRyYW5zZm9ybSYmKGguc3R5bGUudHJhbnNmb3JtPXRoaXMuX2luaXRpYWxUcmFuc2Zvcm0pO3JldHVybiB3WShoLnN0eWxlLHsicG9pbnRlci1ldmVudHMiOiJub25lIixtYXJnaW46IjAiLHBvc2l0aW9uOiJmaXhlZCIsdG9wOiIwIixs'@;
put 'ZWZ0OiIwIiwiei1pbmRleCI6dGhpcy5fekluZGV4KyIifSxQRmUpLEl5KGgsITEpLGguY2xhc3NMaXN0LmFkZCgiY2RrLWRyYWctcHJldmlldyIpLGguc2V0QXR0cmlidXRlKCJwb3BvdmVyIiwibWFudWFsIiksaC5zZXRBdHRyaWJ1dGUoImRpciIsdGhpcy5fZGlyZWN0aW9uKSxhJiYoQXJy'@;
put 'YXkuaXNBcnJheShhKT9hLmZvckVhY2goZj0+aC5jbGFzc0xpc3QuYWRkKGYpKTpoLmNsYXNzTGlzdC5hZGQoYSkpLGh9fWNvbnN0IG8xZT1BeSh7cGFzc2l2ZTohMH0pLFJMPUF5KHtwYXNzaXZlOiExfSksczFlPUF5KHtwYXNzaXZlOiExLGNhcHR1cmU6ITB9KSxsMWU9bmV3IFNldChbInBv'@;
put 'c2l0aW9uIl0pO2NsYXNzIE5GZXtnZXQgZGlzYWJsZWQoKXtyZXR1cm4gdGhpcy5fZGlzYWJsZWR8fCEoIXRoaXMuX2Ryb3BDb250YWluZXJ8fCF0aGlzLl9kcm9wQ29udGFpbmVyLmRpc2FibGVkKX1zZXQgZGlzYWJsZWQobCl7bCE9PXRoaXMuX2Rpc2FibGVkJiYodGhpcy5fZGlzYWJsZWQ9'@;
put 'bCx0aGlzLl90b2dnbGVOYXRpdmVEcmFnSW50ZXJhY3Rpb25zKCksdGhpcy5faGFuZGxlcy5mb3JFYWNoKGE9Pkl5KGEsbCkpKX1jb25zdHJ1Y3RvcihsLGEsZCxoLGYsdil7dGhpcy5fY29uZmlnPWEsdGhpcy5fZG9jdW1lbnQ9ZCx0aGlzLl9uZ1pvbmU9aCx0aGlzLl92aWV3cG9ydFJ1bGVy'@;
put 'PWYsdGhpcy5fZHJhZ0Ryb3BSZWdpc3RyeT12LHRoaXMuX3Bhc3NpdmVUcmFuc2Zvcm09e3g6MCx5OjB9LHRoaXMuX2FjdGl2ZVRyYW5zZm9ybT17eDowLHk6MH0sdGhpcy5faGFzU3RhcnRlZERyYWdnaW5nPSExLHRoaXMuX21vdmVFdmVudHM9bmV3IFduLHRoaXMuX3BvaW50ZXJNb3ZlU3Vi'@;
put 'c2NyaXB0aW9uPXF0LkVNUFRZLHRoaXMuX3BvaW50ZXJVcFN1YnNjcmlwdGlvbj1xdC5FTVBUWSx0aGlzLl9zY3JvbGxTdWJzY3JpcHRpb249cXQuRU1QVFksdGhpcy5fcmVzaXplU3Vic2NyaXB0aW9uPXF0LkVNUFRZLHRoaXMuX2JvdW5kYXJ5RWxlbWVudD1udWxsLHRoaXMuX25hdGl2ZUlu'@;
put 'dGVyYWN0aW9uc0VuYWJsZWQ9ITAsdGhpcy5faGFuZGxlcz1bXSx0aGlzLl9kaXNhYmxlZEhhbmRsZXM9bmV3IFNldCx0aGlzLl9kaXJlY3Rpb249Imx0ciIsdGhpcy5kcmFnU3RhcnREZWxheT0wLHRoaXMuX2Rpc2FibGVkPSExLHRoaXMuYmVmb3JlU3RhcnRlZD1uZXcgV24sdGhpcy5zdGFy'@;
put 'dGVkPW5ldyBXbix0aGlzLnJlbGVhc2VkPW5ldyBXbix0aGlzLmVuZGVkPW5ldyBXbix0aGlzLmVudGVyZWQ9bmV3IFduLHRoaXMuZXhpdGVkPW5ldyBXbix0aGlzLmRyb3BwZWQ9bmV3IFduLHRoaXMubW92ZWQ9dGhpcy5fbW92ZUV2ZW50cyx0aGlzLl9wb2ludGVyRG93bj1NPT57aWYodGhp'@;
put 'cy5iZWZvcmVTdGFydGVkLm5leHQoKSx0aGlzLl9oYW5kbGVzLmxlbmd0aCl7Y29uc3QgRD10aGlzLl9nZXRUYXJnZXRIYW5kbGUoTSk7RCYmIXRoaXMuX2Rpc2FibGVkSGFuZGxlcy5oYXMoRCkmJiF0aGlzLmRpc2FibGVkJiZ0aGlzLl9pbml0aWFsaXplRHJhZ1NlcXVlbmNlKEQsTSl9ZWxz'@;
put 'ZSB0aGlzLmRpc2FibGVkfHx0aGlzLl9pbml0aWFsaXplRHJhZ1NlcXVlbmNlKHRoaXMuX3Jvb3RFbGVtZW50LE0pfSx0aGlzLl9wb2ludGVyTW92ZT1NPT57Y29uc3QgRD10aGlzLl9nZXRQb2ludGVyUG9zaXRpb25PblBhZ2UoTSk7aWYoIXRoaXMuX2hhc1N0YXJ0ZWREcmFnZ2luZyl7aWYo'@;
put 'TWF0aC5hYnMoRC54LXRoaXMuX3BpY2t1cFBvc2l0aW9uT25QYWdlLngpK01hdGguYWJzKEQueS10aGlzLl9waWNrdXBQb3NpdGlvbk9uUGFnZS55KT49dGhpcy5fY29uZmlnLmRyYWdTdGFydFRocmVzaG9sZCl7Y29uc3QgRWU9RGF0ZS5ub3coKT49dGhpcy5fZHJhZ1N0YXJ0VGltZSt0aGlz'@;
put 'Ll9nZXREcmFnU3RhcnREZWxheShNKSxCZT10aGlzLl9kcm9wQ29udGFpbmVyO2lmKCFFZSlyZXR1cm4gdm9pZCB0aGlzLl9lbmREcmFnU2VxdWVuY2UoTSk7KCFCZXx8IUJlLmlzRHJhZ2dpbmcoKSYmIUJlLmlzUmVjZWl2aW5nKCkpJiYoTS5jYW5jZWxhYmxlJiZNLnByZXZlbnREZWZhdWx0'@;
put 'KCksdGhpcy5faGFzU3RhcnRlZERyYWdnaW5nPSEwLHRoaXMuX25nWm9uZS5ydW4oKCk9PnRoaXMuX3N0YXJ0RHJhZ1NlcXVlbmNlKE0pKSl9cmV0dXJufU0uY2FuY2VsYWJsZSYmTS5wcmV2ZW50RGVmYXVsdCgpO2NvbnN0IFo9dGhpcy5fZ2V0Q29uc3RyYWluZWRQb2ludGVyUG9zaXRpb24o'@;
put 'RCk7aWYodGhpcy5faGFzTW92ZWQ9ITAsdGhpcy5fbGFzdEtub3duUG9pbnRlclBvc2l0aW9uPUQsdGhpcy5fdXBkYXRlUG9pbnRlckRpcmVjdGlvbkRlbHRhKFopLHRoaXMuX2Ryb3BDb250YWluZXIpdGhpcy5fdXBkYXRlQWN0aXZlRHJvcENvbnRhaW5lcihaLEQpO2Vsc2V7Y29uc3QgcmU9'@;
put 'dGhpcy5jb25zdHJhaW5Qb3NpdGlvbj90aGlzLl9pbml0aWFsRG9tUmVjdDp0aGlzLl9waWNrdXBQb3NpdGlvbk9uUGFnZSxjZT10aGlzLl9hY3RpdmVUcmFuc2Zvcm07Y2UueD1aLngtcmUueCt0aGlzLl9wYXNzaXZlVHJhbnNmb3JtLngsY2UueT1aLnktcmUueSt0aGlzLl9wYXNzaXZlVHJh'@;
put 'bnNmb3JtLnksdGhpcy5fYXBwbHlSb290RWxlbWVudFRyYW5zZm9ybShjZS54LGNlLnkpfXRoaXMuX21vdmVFdmVudHMub2JzZXJ2ZXJzLmxlbmd0aCYmdGhpcy5fbmdab25lLnJ1bigoKT0+e3RoaXMuX21vdmVFdmVudHMubmV4dCh7c291cmNlOnRoaXMscG9pbnRlclBvc2l0aW9uOlosZXZl'@;
put 'bnQ6TSxkaXN0YW5jZTp0aGlzLl9nZXREcmFnRGlzdGFuY2UoWiksZGVsdGE6dGhpcy5fcG9pbnRlckRpcmVjdGlvbkRlbHRhfSl9KX0sdGhpcy5fcG9pbnRlclVwPU09Pnt0aGlzLl9lbmREcmFnU2VxdWVuY2UoTSl9LHRoaXMuX25hdGl2ZURyYWdTdGFydD1NPT57aWYodGhpcy5faGFuZGxl'@;
put 'cy5sZW5ndGgpe2NvbnN0IEQ9dGhpcy5fZ2V0VGFyZ2V0SGFuZGxlKE0pO0QmJiF0aGlzLl9kaXNhYmxlZEhhbmRsZXMuaGFzKEQpJiYhdGhpcy5kaXNhYmxlZCYmTS5wcmV2ZW50RGVmYXVsdCgpfWVsc2UgdGhpcy5kaXNhYmxlZHx8TS5wcmV2ZW50RGVmYXVsdCgpfSx0aGlzLndpdGhSb290'@;
put 'RWxlbWVudChsKS53aXRoUGFyZW50KGEucGFyZW50RHJhZ1JlZnx8bnVsbCksdGhpcy5fcGFyZW50UG9zaXRpb25zPW5ldyBRMGUoZCksdi5yZWdpc3RlckRyYWdJdGVtKHRoaXMpfWdldFBsYWNlaG9sZGVyRWxlbWVudCgpe3JldHVybiB0aGlzLl9wbGFjZWhvbGRlcn1nZXRSb290RWxlbWVu'@;
put 'dCgpe3JldHVybiB0aGlzLl9yb290RWxlbWVudH1nZXRWaXNpYmxlRWxlbWVudCgpe3JldHVybiB0aGlzLmlzRHJhZ2dpbmcoKT90aGlzLmdldFBsYWNlaG9sZGVyRWxlbWVudCgpOnRoaXMuZ2V0Um9vdEVsZW1lbnQoKX13aXRoSGFuZGxlcyhsKXt0aGlzLl9oYW5kbGVzPWwubWFwKGQ9PkVk'@;
put 'KGQpKSx0aGlzLl9oYW5kbGVzLmZvckVhY2goZD0+SXkoZCx0aGlzLmRpc2FibGVkKSksdGhpcy5fdG9nZ2xlTmF0aXZlRHJhZ0ludGVyYWN0aW9ucygpO2NvbnN0IGE9bmV3IFNldDtyZXR1cm4gdGhpcy5fZGlzYWJsZWRIYW5kbGVzLmZvckVhY2goZD0+e3RoaXMuX2hhbmRsZXMuaW5kZXhP'@;
put 'ZihkKT4tMSYmYS5hZGQoZCl9KSx0aGlzLl9kaXNhYmxlZEhhbmRsZXM9YSx0aGlzfXdpdGhQcmV2aWV3VGVtcGxhdGUobCl7cmV0dXJuIHRoaXMuX3ByZXZpZXdUZW1wbGF0ZT1sLHRoaXN9d2l0aFBsYWNlaG9sZGVyVGVtcGxhdGUobCl7cmV0dXJuIHRoaXMuX3BsYWNlaG9sZGVyVGVtcGxh'@;
put 'dGU9bCx0aGlzfXdpdGhSb290RWxlbWVudChsKXtjb25zdCBhPUVkKGwpO3JldHVybiBhIT09dGhpcy5fcm9vdEVsZW1lbnQmJih0aGlzLl9yb290RWxlbWVudCYmdGhpcy5fcmVtb3ZlUm9vdEVsZW1lbnRMaXN0ZW5lcnModGhpcy5fcm9vdEVsZW1lbnQpLHRoaXMuX25nWm9uZS5ydW5PdXRz'@;
put 'aWRlQW5ndWxhcigoKT0+e2EuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIix0aGlzLl9wb2ludGVyRG93bixSTCksYS5hZGRFdmVudExpc3RlbmVyKCJ0b3VjaHN0YXJ0Iix0aGlzLl9wb2ludGVyRG93bixvMWUpLGEuYWRkRXZlbnRMaXN0ZW5lcigiZHJhZ3N0YXJ0Iix0aGlzLl9uYXRp'@;
put 'dmVEcmFnU3RhcnQsUkwpfSksdGhpcy5faW5pdGlhbFRyYW5zZm9ybT12b2lkIDAsdGhpcy5fcm9vdEVsZW1lbnQ9YSksdHlwZW9mIFNWR0VsZW1lbnQ8InUiJiZ0aGlzLl9yb290RWxlbWVudCBpbnN0YW5jZW9mIFNWR0VsZW1lbnQmJih0aGlzLl9vd25lclNWR0VsZW1lbnQ9dGhpcy5fcm9v'@;
put 'dEVsZW1lbnQub3duZXJTVkdFbGVtZW50KSx0aGlzfXdpdGhCb3VuZGFyeUVsZW1lbnQobCl7cmV0dXJuIHRoaXMuX2JvdW5kYXJ5RWxlbWVudD1sP0VkKGwpOm51bGwsdGhpcy5fcmVzaXplU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksbCYmKHRoaXMuX3Jlc2l6ZVN1YnNjcmlwdGlvbj10'@;
put 'aGlzLl92aWV3cG9ydFJ1bGVyLmNoYW5nZSgxMCkuc3Vic2NyaWJlKCgpPT50aGlzLl9jb250YWluSW5zaWRlQm91bmRhcnlPblJlc2l6ZSgpKSksdGhpc313aXRoUGFyZW50KGwpe3JldHVybiB0aGlzLl9wYXJlbnREcmFnUmVmPWwsdGhpc31kaXNwb3NlKCl7dGhpcy5fcmVtb3ZlUm9vdEVs'@;
put 'ZW1lbnRMaXN0ZW5lcnModGhpcy5fcm9vdEVsZW1lbnQpLHRoaXMuaXNEcmFnZ2luZygpJiZ0aGlzLl9yb290RWxlbWVudD8ucmVtb3ZlKCksdGhpcy5fYW5jaG9yPy5yZW1vdmUoKSx0aGlzLl9kZXN0cm95UHJldmlldygpLHRoaXMuX2Rlc3Ryb3lQbGFjZWhvbGRlcigpLHRoaXMuX2RyYWdE'@;
put 'cm9wUmVnaXN0cnkucmVtb3ZlRHJhZ0l0ZW0odGhpcyksdGhpcy5fcmVtb3ZlTGlzdGVuZXJzKCksdGhpcy5iZWZvcmVTdGFydGVkLmNvbXBsZXRlKCksdGhpcy5zdGFydGVkLmNvbXBsZXRlKCksdGhpcy5yZWxlYXNlZC5jb21wbGV0ZSgpLHRoaXMuZW5kZWQuY29tcGxldGUoKSx0aGlzLmVu'@;
put 'dGVyZWQuY29tcGxldGUoKSx0aGlzLmV4aXRlZC5jb21wbGV0ZSgpLHRoaXMuZHJvcHBlZC5jb21wbGV0ZSgpLHRoaXMuX21vdmVFdmVudHMuY29tcGxldGUoKSx0aGlzLl9oYW5kbGVzPVtdLHRoaXMuX2Rpc2FibGVkSGFuZGxlcy5jbGVhcigpLHRoaXMuX2Ryb3BDb250YWluZXI9dm9pZCAw'@;
put 'LHRoaXMuX3Jlc2l6ZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMuX3BhcmVudFBvc2l0aW9ucy5jbGVhcigpLHRoaXMuX2JvdW5kYXJ5RWxlbWVudD10aGlzLl9yb290RWxlbWVudD10aGlzLl9vd25lclNWR0VsZW1lbnQ9dGhpcy5fcGxhY2Vob2xkZXJUZW1wbGF0ZT10aGlzLl9w'@;
put 'cmV2aWV3VGVtcGxhdGU9dGhpcy5fYW5jaG9yPXRoaXMuX3BhcmVudERyYWdSZWY9bnVsbH1pc0RyYWdnaW5nKCl7cmV0dXJuIHRoaXMuX2hhc1N0YXJ0ZWREcmFnZ2luZyYmdGhpcy5fZHJhZ0Ryb3BSZWdpc3RyeS5pc0RyYWdnaW5nKHRoaXMpfXJlc2V0KCl7dGhpcy5fcm9vdEVsZW1lbnQu'@;
put 'c3R5bGUudHJhbnNmb3JtPXRoaXMuX2luaXRpYWxUcmFuc2Zvcm18fCIiLHRoaXMuX2FjdGl2ZVRyYW5zZm9ybT17eDowLHk6MH0sdGhpcy5fcGFzc2l2ZVRyYW5zZm9ybT17eDowLHk6MH19ZGlzYWJsZUhhbmRsZShsKXshdGhpcy5fZGlzYWJsZWRIYW5kbGVzLmhhcyhsKSYmdGhpcy5faGFu'@;
put 'ZGxlcy5pbmRleE9mKGwpPi0xJiYodGhpcy5fZGlzYWJsZWRIYW5kbGVzLmFkZChsKSxJeShsLCEwKSl9ZW5hYmxlSGFuZGxlKGwpe3RoaXMuX2Rpc2FibGVkSGFuZGxlcy5oYXMobCkmJih0aGlzLl9kaXNhYmxlZEhhbmRsZXMuZGVsZXRlKGwpLEl5KGwsdGhpcy5kaXNhYmxlZCkpfXdpdGhE'@;
put 'aXJlY3Rpb24obCl7cmV0dXJuIHRoaXMuX2RpcmVjdGlvbj1sLHRoaXN9X3dpdGhEcm9wQ29udGFpbmVyKGwpe3RoaXMuX2Ryb3BDb250YWluZXI9bH1nZXRGcmVlRHJhZ1Bvc2l0aW9uKCl7Y29uc3QgbD10aGlzLmlzRHJhZ2dpbmcoKT90aGlzLl9hY3RpdmVUcmFuc2Zvcm06dGhpcy5fcGFz'@;
put 'c2l2ZVRyYW5zZm9ybTtyZXR1cm57eDpsLngseTpsLnl9fXNldEZyZWVEcmFnUG9zaXRpb24obCl7cmV0dXJuIHRoaXMuX2FjdGl2ZVRyYW5zZm9ybT17eDowLHk6MH0sdGhpcy5fcGFzc2l2ZVRyYW5zZm9ybS54PWwueCx0aGlzLl9wYXNzaXZlVHJhbnNmb3JtLnk9bC55LHRoaXMuX2Ryb3BD'@;
put 'b250YWluZXJ8fHRoaXMuX2FwcGx5Um9vdEVsZW1lbnRUcmFuc2Zvcm0obC54LGwueSksdGhpc313aXRoUHJldmlld0NvbnRhaW5lcihsKXtyZXR1cm4gdGhpcy5fcHJldmlld0NvbnRhaW5lcj1sLHRoaXN9X3NvcnRGcm9tTGFzdFBvaW50ZXJQb3NpdGlvbigpe2NvbnN0IGw9dGhpcy5fbGFz'@;
put 'dEtub3duUG9pbnRlclBvc2l0aW9uO2wmJnRoaXMuX2Ryb3BDb250YWluZXImJnRoaXMuX3VwZGF0ZUFjdGl2ZURyb3BDb250YWluZXIodGhpcy5fZ2V0Q29uc3RyYWluZWRQb2ludGVyUG9zaXRpb24obCksbCl9X3JlbW92ZUxpc3RlbmVycygpe3RoaXMuX3BvaW50ZXJNb3ZlU3Vic2NyaXB0'@;
put 'aW9uLnVuc3Vic2NyaWJlKCksdGhpcy5fcG9pbnRlclVwU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksdGhpcy5fc2Nyb2xsU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksdGhpcy5fZ2V0U2hhZG93Um9vdCgpPy5yZW1vdmVFdmVudExpc3RlbmVyKCJzZWxlY3RzdGFydCIsdTFlLHMxZSl9'@;
put 'X2Rlc3Ryb3lQcmV2aWV3KCl7dGhpcy5fcHJldmlldz8uZGVzdHJveSgpLHRoaXMuX3ByZXZpZXc9bnVsbH1fZGVzdHJveVBsYWNlaG9sZGVyKCl7dGhpcy5fcGxhY2Vob2xkZXI/LnJlbW92ZSgpLHRoaXMuX3BsYWNlaG9sZGVyUmVmPy5kZXN0cm95KCksdGhpcy5fcGxhY2Vob2xkZXI9dGhp'@;
put 'cy5fcGxhY2Vob2xkZXJSZWY9bnVsbH1fZW5kRHJhZ1NlcXVlbmNlKGwpe2lmKHRoaXMuX2RyYWdEcm9wUmVnaXN0cnkuaXNEcmFnZ2luZyh0aGlzKSYmKHRoaXMuX3JlbW92ZUxpc3RlbmVycygpLHRoaXMuX2RyYWdEcm9wUmVnaXN0cnkuc3RvcERyYWdnaW5nKHRoaXMpLHRoaXMuX3RvZ2ds'@;
put 'ZU5hdGl2ZURyYWdJbnRlcmFjdGlvbnMoKSx0aGlzLl9oYW5kbGVzJiYodGhpcy5fcm9vdEVsZW1lbnQuc3R5bGUud2Via2l0VGFwSGlnaGxpZ2h0Q29sb3I9dGhpcy5fcm9vdEVsZW1lbnRUYXBIaWdobGlnaHQpLHRoaXMuX2hhc1N0YXJ0ZWREcmFnZ2luZykpaWYodGhpcy5yZWxlYXNlZC5u'@;
put 'ZXh0KHtzb3VyY2U6dGhpcyxldmVudDpsfSksdGhpcy5fZHJvcENvbnRhaW5lcil0aGlzLl9kcm9wQ29udGFpbmVyLl9zdG9wU2Nyb2xsaW5nKCksdGhpcy5fYW5pbWF0ZVByZXZpZXdUb1BsYWNlaG9sZGVyKCkudGhlbigoKT0+e3RoaXMuX2NsZWFudXBEcmFnQXJ0aWZhY3RzKGwpLHRoaXMu'@;
put 'X2NsZWFudXBDYWNoZWREaW1lbnNpb25zKCksdGhpcy5fZHJhZ0Ryb3BSZWdpc3RyeS5zdG9wRHJhZ2dpbmcodGhpcyl9KTtlbHNle3RoaXMuX3Bhc3NpdmVUcmFuc2Zvcm0ueD10aGlzLl9hY3RpdmVUcmFuc2Zvcm0ueDtjb25zdCBhPXRoaXMuX2dldFBvaW50ZXJQb3NpdGlvbk9uUGFnZShs'@;
put 'KTt0aGlzLl9wYXNzaXZlVHJhbnNmb3JtLnk9dGhpcy5fYWN0aXZlVHJhbnNmb3JtLnksdGhpcy5fbmdab25lLnJ1bigoKT0+e3RoaXMuZW5kZWQubmV4dCh7c291cmNlOnRoaXMsZGlzdGFuY2U6dGhpcy5fZ2V0RHJhZ0Rpc3RhbmNlKGEpLGRyb3BQb2ludDphLGV2ZW50Omx9KX0pLHRoaXMu'@;
put 'X2NsZWFudXBDYWNoZWREaW1lbnNpb25zKCksdGhpcy5fZHJhZ0Ryb3BSZWdpc3RyeS5zdG9wRHJhZ2dpbmcodGhpcyl9fV9zdGFydERyYWdTZXF1ZW5jZShsKXtUeChsKSYmKHRoaXMuX2xhc3RUb3VjaEV2ZW50VGltZT1EYXRlLm5vdygpKSx0aGlzLl90b2dnbGVOYXRpdmVEcmFnSW50ZXJh'@;
put 'Y3Rpb25zKCk7Y29uc3QgYT10aGlzLl9nZXRTaGFkb3dSb290KCksZD10aGlzLl9kcm9wQ29udGFpbmVyO2lmKGEmJnRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e2EuYWRkRXZlbnRMaXN0ZW5lcigic2VsZWN0c3RhcnQiLHUxZSxzMWUpfSksZCl7Y29uc3QgaD10aGlzLl9y'@;
put 'b290RWxlbWVudCxmPWgucGFyZW50Tm9kZSx2PXRoaXMuX3BsYWNlaG9sZGVyPXRoaXMuX2NyZWF0ZVBsYWNlaG9sZGVyRWxlbWVudCgpLE09dGhpcy5fYW5jaG9yPXRoaXMuX2FuY2hvcnx8dGhpcy5fZG9jdW1lbnQuY3JlYXRlQ29tbWVudCgiIik7Zi5pbnNlcnRCZWZvcmUoTSxoKSx0aGlz'@;
put 'Ll9pbml0aWFsVHJhbnNmb3JtPWguc3R5bGUudHJhbnNmb3JtfHwiIix0aGlzLl9wcmV2aWV3PW5ldyBGRmUodGhpcy5fZG9jdW1lbnQsdGhpcy5fcm9vdEVsZW1lbnQsdGhpcy5fZGlyZWN0aW9uLHRoaXMuX2luaXRpYWxEb21SZWN0LHRoaXMuX3ByZXZpZXdUZW1wbGF0ZXx8bnVsbCx0aGlz'@;
put 'LnByZXZpZXdDbGFzc3x8bnVsbCx0aGlzLl9waWNrdXBQb3NpdGlvbk9uUGFnZSx0aGlzLl9pbml0aWFsVHJhbnNmb3JtLHRoaXMuX2NvbmZpZy56SW5kZXh8fDFlMyksdGhpcy5fcHJldmlldy5hdHRhY2godGhpcy5fZ2V0UHJldmlld0luc2VydGlvblBvaW50KGYsYSkpLHEwZShoLCExLGwx'@;
put 'ZSksdGhpcy5fZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChmLnJlcGxhY2VDaGlsZCh2LGgpKSx0aGlzLnN0YXJ0ZWQubmV4dCh7c291cmNlOnRoaXMsZXZlbnQ6bH0pLGQuc3RhcnQoKSx0aGlzLl9pbml0aWFsQ29udGFpbmVyPWQsdGhpcy5faW5pdGlhbEluZGV4PWQuZ2V0SXRlbUluZGV4'@;
put 'KHRoaXMpfWVsc2UgdGhpcy5zdGFydGVkLm5leHQoe3NvdXJjZTp0aGlzLGV2ZW50Omx9KSx0aGlzLl9pbml0aWFsQ29udGFpbmVyPXRoaXMuX2luaXRpYWxJbmRleD12b2lkIDA7dGhpcy5fcGFyZW50UG9zaXRpb25zLmNhY2hlKGQ/ZC5nZXRTY3JvbGxhYmxlUGFyZW50cygpOltdKX1faW5p'@;
put 'dGlhbGl6ZURyYWdTZXF1ZW5jZShsLGEpe3RoaXMuX3BhcmVudERyYWdSZWYmJmEuc3RvcFByb3BhZ2F0aW9uKCk7Y29uc3QgZD10aGlzLmlzRHJhZ2dpbmcoKSxoPVR4KGEpLGY9IWgmJjAhPT1hLmJ1dHRvbix2PXRoaXMuX3Jvb3RFbGVtZW50LE09eEwoYSksRD0haCYmdGhpcy5fbGFzdFRv'@;
put 'dWNoRXZlbnRUaW1lJiZ0aGlzLl9sYXN0VG91Y2hFdmVudFRpbWUrODAwPkRhdGUubm93KCksWj1oP2Z1bmN0aW9uIFFQZShjKXtjb25zdCBsPWMudG91Y2hlcyYmYy50b3VjaGVzWzBdfHxjLmNoYW5nZWRUb3VjaGVzJiZjLmNoYW5nZWRUb3VjaGVzWzBdO3JldHVybiEoIWx8fC0xIT09bC5p'@;
put 'ZGVudGlmaWVyfHxudWxsIT1sLnJhZGl1c1gmJjEhPT1sLnJhZGl1c1h8fG51bGwhPWwucmFkaXVzWSYmMSE9PWwucmFkaXVzWSl9KGEpOmZ1bmN0aW9uIEpQZShjKXtyZXR1cm4gMD09PWMuYnV0dG9uc3x8MD09PWMuZGV0YWlsfShhKTtpZihNJiZNLmRyYWdnYWJsZSYmIm1vdXNlZG93biI9'@;
put 'PT1hLnR5cGUmJmEucHJldmVudERlZmF1bHQoKSxkfHxmfHxEfHxaKXJldHVybjtpZih0aGlzLl9oYW5kbGVzLmxlbmd0aCl7Y29uc3QgYmU9di5zdHlsZTt0aGlzLl9yb290RWxlbWVudFRhcEhpZ2hsaWdodD1iZS53ZWJraXRUYXBIaWdobGlnaHRDb2xvcnx8IiIsYmUud2Via2l0VGFwSGln'@;
put 'aGxpZ2h0Q29sb3I9InRyYW5zcGFyZW50In10aGlzLl9oYXNTdGFydGVkRHJhZ2dpbmc9dGhpcy5faGFzTW92ZWQ9ITEsdGhpcy5fcmVtb3ZlTGlzdGVuZXJzKCksdGhpcy5faW5pdGlhbERvbVJlY3Q9dGhpcy5fcm9vdEVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksdGhpcy5fcG9p'@;
put 'bnRlck1vdmVTdWJzY3JpcHRpb249dGhpcy5fZHJhZ0Ryb3BSZWdpc3RyeS5wb2ludGVyTW92ZS5zdWJzY3JpYmUodGhpcy5fcG9pbnRlck1vdmUpLHRoaXMuX3BvaW50ZXJVcFN1YnNjcmlwdGlvbj10aGlzLl9kcmFnRHJvcFJlZ2lzdHJ5LnBvaW50ZXJVcC5zdWJzY3JpYmUodGhpcy5fcG9p'@;
put 'bnRlclVwKSx0aGlzLl9zY3JvbGxTdWJzY3JpcHRpb249dGhpcy5fZHJhZ0Ryb3BSZWdpc3RyeS5zY3JvbGxlZCh0aGlzLl9nZXRTaGFkb3dSb290KCkpLnN1YnNjcmliZShiZT0+dGhpcy5fdXBkYXRlT25TY3JvbGwoYmUpKSx0aGlzLl9ib3VuZGFyeUVsZW1lbnQmJih0aGlzLl9ib3VuZGFy'@;
put 'eVJlY3Q9Q1kodGhpcy5fYm91bmRhcnlFbGVtZW50KSk7Y29uc3QgcmU9dGhpcy5fcHJldmlld1RlbXBsYXRlO3RoaXMuX3BpY2t1cFBvc2l0aW9uSW5FbGVtZW50PXJlJiZyZS50ZW1wbGF0ZSYmIXJlLm1hdGNoU2l6ZT97eDowLHk6MH06dGhpcy5fZ2V0UG9pbnRlclBvc2l0aW9uSW5FbGVt'@;
put 'ZW50KHRoaXMuX2luaXRpYWxEb21SZWN0LGwsYSk7Y29uc3QgY2U9dGhpcy5fcGlja3VwUG9zaXRpb25PblBhZ2U9dGhpcy5fbGFzdEtub3duUG9pbnRlclBvc2l0aW9uPXRoaXMuX2dldFBvaW50ZXJQb3NpdGlvbk9uUGFnZShhKTt0aGlzLl9wb2ludGVyRGlyZWN0aW9uRGVsdGE9e3g6MCx5'@;
put 'OjB9LHRoaXMuX3BvaW50ZXJQb3NpdGlvbkF0TGFzdERpcmVjdGlvbkNoYW5nZT17eDpjZS54LHk6Y2UueX0sdGhpcy5fZHJhZ1N0YXJ0VGltZT1EYXRlLm5vdygpLHRoaXMuX2RyYWdEcm9wUmVnaXN0cnkuc3RhcnREcmFnZ2luZyh0aGlzLGEpfV9jbGVhbnVwRHJhZ0FydGlmYWN0cyhsKXtx'@;
put 'MGUodGhpcy5fcm9vdEVsZW1lbnQsITAsbDFlKSx0aGlzLl9hbmNob3IucGFyZW50Tm9kZS5yZXBsYWNlQ2hpbGQodGhpcy5fcm9vdEVsZW1lbnQsdGhpcy5fYW5jaG9yKSx0aGlzLl9kZXN0cm95UHJldmlldygpLHRoaXMuX2Rlc3Ryb3lQbGFjZWhvbGRlcigpLHRoaXMuX2luaXRpYWxEb21S'@;
put 'ZWN0PXRoaXMuX2JvdW5kYXJ5UmVjdD10aGlzLl9wcmV2aWV3UmVjdD10aGlzLl9pbml0aWFsVHJhbnNmb3JtPXZvaWQgMCx0aGlzLl9uZ1pvbmUucnVuKCgpPT57Y29uc3QgYT10aGlzLl9kcm9wQ29udGFpbmVyLGQ9YS5nZXRJdGVtSW5kZXgodGhpcyksaD10aGlzLl9nZXRQb2ludGVyUG9z'@;
put 'aXRpb25PblBhZ2UobCksZj10aGlzLl9nZXREcmFnRGlzdGFuY2UoaCksdj1hLl9pc092ZXJDb250YWluZXIoaC54LGgueSk7dGhpcy5lbmRlZC5uZXh0KHtzb3VyY2U6dGhpcyxkaXN0YW5jZTpmLGRyb3BQb2ludDpoLGV2ZW50Omx9KSx0aGlzLmRyb3BwZWQubmV4dCh7aXRlbTp0aGlzLGN1'@;
put 'cnJlbnRJbmRleDpkLHByZXZpb3VzSW5kZXg6dGhpcy5faW5pdGlhbEluZGV4LGNvbnRhaW5lcjphLHByZXZpb3VzQ29udGFpbmVyOnRoaXMuX2luaXRpYWxDb250YWluZXIsaXNQb2ludGVyT3ZlckNvbnRhaW5lcjp2LGRpc3RhbmNlOmYsZHJvcFBvaW50OmgsZXZlbnQ6bH0pLGEuZHJvcCh0'@;
put 'aGlzLGQsdGhpcy5faW5pdGlhbEluZGV4LHRoaXMuX2luaXRpYWxDb250YWluZXIsdixmLGgsbCksdGhpcy5fZHJvcENvbnRhaW5lcj10aGlzLl9pbml0aWFsQ29udGFpbmVyfSl9X3VwZGF0ZUFjdGl2ZURyb3BDb250YWluZXIoe3g6bCx5OmF9LHt4OmQseTpofSl7bGV0IGY9dGhpcy5faW5p'@;
put 'dGlhbENvbnRhaW5lci5fZ2V0U2libGluZ0NvbnRhaW5lckZyb21Qb3NpdGlvbih0aGlzLGwsYSk7IWYmJnRoaXMuX2Ryb3BDb250YWluZXIhPT10aGlzLl9pbml0aWFsQ29udGFpbmVyJiZ0aGlzLl9pbml0aWFsQ29udGFpbmVyLl9pc092ZXJDb250YWluZXIobCxhKSYmKGY9dGhpcy5faW5p'@;
put 'dGlhbENvbnRhaW5lciksZiYmZiE9PXRoaXMuX2Ryb3BDb250YWluZXImJnRoaXMuX25nWm9uZS5ydW4oKCk9Pnt0aGlzLmV4aXRlZC5uZXh0KHtpdGVtOnRoaXMsY29udGFpbmVyOnRoaXMuX2Ryb3BDb250YWluZXJ9KSx0aGlzLl9kcm9wQ29udGFpbmVyLmV4aXQodGhpcyksdGhpcy5fZHJv'@;
put 'cENvbnRhaW5lcj1mLHRoaXMuX2Ryb3BDb250YWluZXIuZW50ZXIodGhpcyxsLGEsZj09PXRoaXMuX2luaXRpYWxDb250YWluZXImJmYuc29ydGluZ0Rpc2FibGVkP3RoaXMuX2luaXRpYWxJbmRleDp2b2lkIDApLHRoaXMuZW50ZXJlZC5uZXh0KHtpdGVtOnRoaXMsY29udGFpbmVyOmYsY3Vy'@;
put 'cmVudEluZGV4OmYuZ2V0SXRlbUluZGV4KHRoaXMpfSl9KSx0aGlzLmlzRHJhZ2dpbmcoKSYmKHRoaXMuX2Ryb3BDb250YWluZXIuX3N0YXJ0U2Nyb2xsaW5nSWZOZWNlc3NhcnkoZCxoKSx0aGlzLl9kcm9wQ29udGFpbmVyLl9zb3J0SXRlbSh0aGlzLGwsYSx0aGlzLl9wb2ludGVyRGlyZWN0'@;
put 'aW9uRGVsdGEpLHRoaXMuY29uc3RyYWluUG9zaXRpb24/dGhpcy5fYXBwbHlQcmV2aWV3VHJhbnNmb3JtKGwsYSk6dGhpcy5fYXBwbHlQcmV2aWV3VHJhbnNmb3JtKGwtdGhpcy5fcGlja3VwUG9zaXRpb25JbkVsZW1lbnQueCxhLXRoaXMuX3BpY2t1cFBvc2l0aW9uSW5FbGVtZW50LnkpKX1f'@;
put 'YW5pbWF0ZVByZXZpZXdUb1BsYWNlaG9sZGVyKCl7aWYoIXRoaXMuX2hhc01vdmVkKXJldHVybiBQcm9taXNlLnJlc29sdmUoKTtjb25zdCBsPXRoaXMuX3BsYWNlaG9sZGVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3RoaXMuX3ByZXZpZXcuYWRkQ2xhc3MoImNkay1kcmFnLWFuaW1hdGlu'@;
put 'ZyIpLHRoaXMuX2FwcGx5UHJldmlld1RyYW5zZm9ybShsLmxlZnQsbC50b3ApO2NvbnN0IGE9dGhpcy5fcHJldmlldy5nZXRUcmFuc2l0aW9uRHVyYXRpb24oKTtyZXR1cm4gMD09PWE/UHJvbWlzZS5yZXNvbHZlKCk6dGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT5uZXcgUHJv'@;
put 'bWlzZShkPT57Y29uc3QgaD12PT57KCF2fHx4TCh2KT09PXRoaXMuX3ByZXZpZXcmJiJ0cmFuc2Zvcm0iPT09di5wcm9wZXJ0eU5hbWUpJiYodGhpcy5fcHJldmlldz8ucmVtb3ZlRXZlbnRMaXN0ZW5lcigidHJhbnNpdGlvbmVuZCIsaCksZCgpLGNsZWFyVGltZW91dChmKSl9LGY9c2V0VGlt'@;
put 'ZW91dChoLDEuNSphKTt0aGlzLl9wcmV2aWV3LmFkZEV2ZW50TGlzdGVuZXIoInRyYW5zaXRpb25lbmQiLGgpfSkpfV9jcmVhdGVQbGFjZWhvbGRlckVsZW1lbnQoKXtjb25zdCBsPXRoaXMuX3BsYWNlaG9sZGVyVGVtcGxhdGUsYT1sP2wudGVtcGxhdGU6bnVsbDtsZXQgZDtyZXR1cm4gYT8o'@;
put 'dGhpcy5fcGxhY2Vob2xkZXJSZWY9bC52aWV3Q29udGFpbmVyLmNyZWF0ZUVtYmVkZGVkVmlldyhhLGwuY29udGV4dCksdGhpcy5fcGxhY2Vob2xkZXJSZWYuZGV0ZWN0Q2hhbmdlcygpLGQ9aTFlKHRoaXMuX3BsYWNlaG9sZGVyUmVmLHRoaXMuX2RvY3VtZW50KSk6ZD1lMWUodGhpcy5fcm9v'@;
put 'dEVsZW1lbnQpLGQuc3R5bGUucG9pbnRlckV2ZW50cz0ibm9uZSIsZC5jbGFzc0xpc3QuYWRkKCJjZGstZHJhZy1wbGFjZWhvbGRlciIpLGR9X2dldFBvaW50ZXJQb3NpdGlvbkluRWxlbWVudChsLGEsZCl7Y29uc3QgaD1hPT09dGhpcy5fcm9vdEVsZW1lbnQ/bnVsbDphLGY9aD9oLmdldEJv'@;
put 'dW5kaW5nQ2xpZW50UmVjdCgpOmwsdj1UeChkKT9kLnRhcmdldFRvdWNoZXNbMF06ZCxNPXRoaXMuX2dldFZpZXdwb3J0U2Nyb2xsUG9zaXRpb24oKTtyZXR1cm57eDpmLmxlZnQtbC5sZWZ0Kyh2LnBhZ2VYLWYubGVmdC1NLmxlZnQpLHk6Zi50b3AtbC50b3ArKHYucGFnZVktZi50b3AtTS50'@;
put 'b3ApfX1fZ2V0UG9pbnRlclBvc2l0aW9uT25QYWdlKGwpe2NvbnN0IGE9dGhpcy5fZ2V0Vmlld3BvcnRTY3JvbGxQb3NpdGlvbigpLGQ9VHgobCk/bC50b3VjaGVzWzBdfHxsLmNoYW5nZWRUb3VjaGVzWzBdfHx7cGFnZVg6MCxwYWdlWTowfTpsLGg9ZC5wYWdlWC1hLmxlZnQsZj1kLnBhZ2VZ'@;
put 'LWEudG9wO2lmKHRoaXMuX293bmVyU1ZHRWxlbWVudCl7Y29uc3Qgdj10aGlzLl9vd25lclNWR0VsZW1lbnQuZ2V0U2NyZWVuQ1RNKCk7aWYodil7Y29uc3QgTT10aGlzLl9vd25lclNWR0VsZW1lbnQuY3JlYXRlU1ZHUG9pbnQoKTtyZXR1cm4gTS54PWgsTS55PWYsTS5tYXRyaXhUcmFuc2Zv'@;
put 'cm0odi5pbnZlcnNlKCkpfX1yZXR1cm57eDpoLHk6Zn19X2dldENvbnN0cmFpbmVkUG9pbnRlclBvc2l0aW9uKGwpe2NvbnN0IGE9dGhpcy5fZHJvcENvbnRhaW5lcj90aGlzLl9kcm9wQ29udGFpbmVyLmxvY2tBeGlzOm51bGw7bGV0e3g6ZCx5Omh9PXRoaXMuY29uc3RyYWluUG9zaXRpb24/'@;
put 'dGhpcy5jb25zdHJhaW5Qb3NpdGlvbihsLHRoaXMsdGhpcy5faW5pdGlhbERvbVJlY3QsdGhpcy5fcGlja3VwUG9zaXRpb25JbkVsZW1lbnQpOmw7aWYoIngiPT09dGhpcy5sb2NrQXhpc3x8IngiPT09YT9oPXRoaXMuX3BpY2t1cFBvc2l0aW9uT25QYWdlLnktKHRoaXMuY29uc3RyYWluUG9z'@;
put 'aXRpb24/dGhpcy5fcGlja3VwUG9zaXRpb25JbkVsZW1lbnQueTowKTooInkiPT09dGhpcy5sb2NrQXhpc3x8InkiPT09YSkmJihkPXRoaXMuX3BpY2t1cFBvc2l0aW9uT25QYWdlLngtKHRoaXMuY29uc3RyYWluUG9zaXRpb24/dGhpcy5fcGlja3VwUG9zaXRpb25JbkVsZW1lbnQueDowKSks'@;
put 'dGhpcy5fYm91bmRhcnlSZWN0KXtjb25zdHt4OmYseTp2fT10aGlzLmNvbnN0cmFpblBvc2l0aW9uP3t4OjAseTowfTp0aGlzLl9waWNrdXBQb3NpdGlvbkluRWxlbWVudCxNPXRoaXMuX2JvdW5kYXJ5UmVjdCx7d2lkdGg6RCxoZWlnaHQ6Wn09dGhpcy5fZ2V0UHJldmlld1JlY3QoKSxyZT1N'@;
put 'LnRvcCt2LGNlPU0uYm90dG9tLShaLXYpO2Q9YzFlKGQsTS5sZWZ0K2YsTS5yaWdodC0oRC1mKSksaD1jMWUoaCxyZSxjZSl9cmV0dXJue3g6ZCx5Omh9fV91cGRhdGVQb2ludGVyRGlyZWN0aW9uRGVsdGEobCl7Y29uc3R7eDphLHk6ZH09bCxoPXRoaXMuX3BvaW50ZXJEaXJlY3Rpb25EZWx0'@;
put 'YSxmPXRoaXMuX3BvaW50ZXJQb3NpdGlvbkF0TGFzdERpcmVjdGlvbkNoYW5nZSx2PU1hdGguYWJzKGEtZi54KSxNPU1hdGguYWJzKGQtZi55KTtyZXR1cm4gdj50aGlzLl9jb25maWcucG9pbnRlckRpcmVjdGlvbkNoYW5nZVRocmVzaG9sZCYmKGgueD1hPmYueD8xOi0xLGYueD1hKSxNPnRo'@;
put 'aXMuX2NvbmZpZy5wb2ludGVyRGlyZWN0aW9uQ2hhbmdlVGhyZXNob2xkJiYoaC55PWQ+Zi55PzE6LTEsZi55PWQpLGh9X3RvZ2dsZU5hdGl2ZURyYWdJbnRlcmFjdGlvbnMoKXtpZighdGhpcy5fcm9vdEVsZW1lbnR8fCF0aGlzLl9oYW5kbGVzKXJldHVybjtjb25zdCBsPXRoaXMuX2hhbmRs'@;
put 'ZXMubGVuZ3RoPjB8fCF0aGlzLmlzRHJhZ2dpbmcoKTtsIT09dGhpcy5fbmF0aXZlSW50ZXJhY3Rpb25zRW5hYmxlZCYmKHRoaXMuX25hdGl2ZUludGVyYWN0aW9uc0VuYWJsZWQ9bCxJeSh0aGlzLl9yb290RWxlbWVudCxsKSl9X3JlbW92ZVJvb3RFbGVtZW50TGlzdGVuZXJzKGwpe2wucmVt'@;
put 'b3ZlRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIix0aGlzLl9wb2ludGVyRG93bixSTCksbC5yZW1vdmVFdmVudExpc3RlbmVyKCJ0b3VjaHN0YXJ0Iix0aGlzLl9wb2ludGVyRG93bixvMWUpLGwucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZHJhZ3N0YXJ0Iix0aGlzLl9uYXRpdmVEcmFnU3RhcnQs'@;
put 'UkwpfV9hcHBseVJvb3RFbGVtZW50VHJhbnNmb3JtKGwsYSl7Y29uc3QgZD1JTChsLGEpLGg9dGhpcy5fcm9vdEVsZW1lbnQuc3R5bGU7bnVsbD09dGhpcy5faW5pdGlhbFRyYW5zZm9ybSYmKHRoaXMuX2luaXRpYWxUcmFuc2Zvcm09aC50cmFuc2Zvcm0mJiJub25lIiE9aC50cmFuc2Zvcm0/'@;
put 'aC50cmFuc2Zvcm06IiIpLGgudHJhbnNmb3JtPURMKGQsdGhpcy5faW5pdGlhbFRyYW5zZm9ybSl9X2FwcGx5UHJldmlld1RyYW5zZm9ybShsLGEpe2NvbnN0IGQ9dGhpcy5fcHJldmlld1RlbXBsYXRlPy50ZW1wbGF0ZT92b2lkIDA6dGhpcy5faW5pdGlhbFRyYW5zZm9ybSxoPUlMKGwsYSk7'@;
put 'dGhpcy5fcHJldmlldy5zZXRUcmFuc2Zvcm0oREwoaCxkKSl9X2dldERyYWdEaXN0YW5jZShsKXtjb25zdCBhPXRoaXMuX3BpY2t1cFBvc2l0aW9uT25QYWdlO3JldHVybiBhP3t4OmwueC1hLngseTpsLnktYS55fTp7eDowLHk6MH19X2NsZWFudXBDYWNoZWREaW1lbnNpb25zKCl7dGhpcy5f'@;
put 'Ym91bmRhcnlSZWN0PXRoaXMuX3ByZXZpZXdSZWN0PXZvaWQgMCx0aGlzLl9wYXJlbnRQb3NpdGlvbnMuY2xlYXIoKX1fY29udGFpbkluc2lkZUJvdW5kYXJ5T25SZXNpemUoKXtsZXR7eDpsLHk6YX09dGhpcy5fcGFzc2l2ZVRyYW5zZm9ybTtpZigwPT09bCYmMD09PWF8fHRoaXMuaXNEcmFn'@;
put 'Z2luZygpfHwhdGhpcy5fYm91bmRhcnlFbGVtZW50KXJldHVybjtjb25zdCBkPXRoaXMuX3Jvb3RFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGg9dGhpcy5fYm91bmRhcnlFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2lmKDA9PT1oLndpZHRoJiYwPT09aC5oZWlnaHR8'@;
put 'fDA9PT1kLndpZHRoJiYwPT09ZC5oZWlnaHQpcmV0dXJuO2NvbnN0IGY9aC5sZWZ0LWQubGVmdCx2PWQucmlnaHQtaC5yaWdodCxNPWgudG9wLWQudG9wLEQ9ZC5ib3R0b20taC5ib3R0b207aC53aWR0aD5kLndpZHRoPyhmPjAmJihsKz1mKSx2PjAmJihsLT12KSk6bD0wLGguaGVpZ2h0PmQu'@;
put 'aGVpZ2h0PyhNPjAmJihhKz1NKSxEPjAmJihhLT1EKSk6YT0wLChsIT09dGhpcy5fcGFzc2l2ZVRyYW5zZm9ybS54fHxhIT09dGhpcy5fcGFzc2l2ZVRyYW5zZm9ybS55KSYmdGhpcy5zZXRGcmVlRHJhZ1Bvc2l0aW9uKHt5OmEseDpsfSl9X2dldERyYWdTdGFydERlbGF5KGwpe2NvbnN0IGE9'@;
put 'dGhpcy5kcmFnU3RhcnREZWxheTtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIGE/YTpUeChsKT9hLnRvdWNoOmE/YS5tb3VzZTowfV91cGRhdGVPblNjcm9sbChsKXtjb25zdCBhPXRoaXMuX3BhcmVudFBvc2l0aW9ucy5oYW5kbGVTY3JvbGwobCk7aWYoYSl7Y29uc3QgZD14TChsKTt0aGlzLl9i'@;
put 'b3VuZGFyeVJlY3QmJmQhPT10aGlzLl9ib3VuZGFyeUVsZW1lbnQmJmQuY29udGFpbnModGhpcy5fYm91bmRhcnlFbGVtZW50KSYmRXgodGhpcy5fYm91bmRhcnlSZWN0LGEudG9wLGEubGVmdCksdGhpcy5fcGlja3VwUG9zaXRpb25PblBhZ2UueCs9YS5sZWZ0LHRoaXMuX3BpY2t1cFBvc2l0'@;
put 'aW9uT25QYWdlLnkrPWEudG9wLHRoaXMuX2Ryb3BDb250YWluZXJ8fCh0aGlzLl9hY3RpdmVUcmFuc2Zvcm0ueC09YS5sZWZ0LHRoaXMuX2FjdGl2ZVRyYW5zZm9ybS55LT1hLnRvcCx0aGlzLl9hcHBseVJvb3RFbGVtZW50VHJhbnNmb3JtKHRoaXMuX2FjdGl2ZVRyYW5zZm9ybS54LHRoaXMu'@;
put 'X2FjdGl2ZVRyYW5zZm9ybS55KSl9fV9nZXRWaWV3cG9ydFNjcm9sbFBvc2l0aW9uKCl7cmV0dXJuIHRoaXMuX3BhcmVudFBvc2l0aW9ucy5wb3NpdGlvbnMuZ2V0KHRoaXMuX2RvY3VtZW50KT8uc2Nyb2xsUG9zaXRpb258fHRoaXMuX3BhcmVudFBvc2l0aW9ucy5nZXRWaWV3cG9ydFNjcm9s'@;
put 'bFBvc2l0aW9uKCl9X2dldFNoYWRvd1Jvb3QoKXtyZXR1cm4gdm9pZCAwPT09dGhpcy5fY2FjaGVkU2hhZG93Um9vdCYmKHRoaXMuX2NhY2hlZFNoYWRvd1Jvb3Q9TzBlKHRoaXMuX3Jvb3RFbGVtZW50KSksdGhpcy5fY2FjaGVkU2hhZG93Um9vdH1fZ2V0UHJldmlld0luc2VydGlvblBvaW50'@;
put 'KGwsYSl7Y29uc3QgZD10aGlzLl9wcmV2aWV3Q29udGFpbmVyfHwiZ2xvYmFsIjtpZigicGFyZW50Ij09PWQpcmV0dXJuIGw7aWYoImdsb2JhbCI9PT1kKXtjb25zdCBoPXRoaXMuX2RvY3VtZW50O3JldHVybiBhfHxoLmZ1bGxzY3JlZW5FbGVtZW50fHxoLndlYmtpdEZ1bGxzY3JlZW5FbGVt'@;
put 'ZW50fHxoLm1vekZ1bGxTY3JlZW5FbGVtZW50fHxoLm1zRnVsbHNjcmVlbkVsZW1lbnR8fGguYm9keX1yZXR1cm4gRWQoZCl9X2dldFByZXZpZXdSZWN0KCl7cmV0dXJuKCF0aGlzLl9wcmV2aWV3UmVjdHx8IXRoaXMuX3ByZXZpZXdSZWN0LndpZHRoJiYhdGhpcy5fcHJldmlld1JlY3QuaGVp'@;
put 'Z2h0KSYmKHRoaXMuX3ByZXZpZXdSZWN0PXRoaXMuX3ByZXZpZXc/dGhpcy5fcHJldmlldy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTp0aGlzLl9pbml0aWFsRG9tUmVjdCksdGhpcy5fcHJldmlld1JlY3R9X2dldFRhcmdldEhhbmRsZShsKXtyZXR1cm4gdGhpcy5faGFuZGxlcy5maW5kKGE9'@;
put 'PmwudGFyZ2V0JiYobC50YXJnZXQ9PT1hfHxhLmNvbnRhaW5zKGwudGFyZ2V0KSkpfX1mdW5jdGlvbiBjMWUoYyxsLGEpe3JldHVybiBNYXRoLm1heChsLE1hdGgubWluKGEsYykpfWZ1bmN0aW9uIFR4KGMpe3JldHVybiJ0Ij09PWMudHlwZVswXX1mdW5jdGlvbiB1MWUoYyl7Yy5wcmV2ZW50'@;
put 'RGVmYXVsdCgpfWZ1bmN0aW9uIGQxZShjLGwsYSl7Y29uc3QgZD1BeChsLGMubGVuZ3RoLTEpLGg9QXgoYSxjLmxlbmd0aC0xKTtpZihkPT09aClyZXR1cm47Y29uc3QgZj1jW2RdLHY9aDxkPy0xOjE7Zm9yKGxldCBNPWQ7TSE9PWg7TSs9diljW01dPWNbTSt2XTtjW2hdPWZ9ZnVuY3Rpb24g'@;
put 'QXgoYyxsKXtyZXR1cm4gTWF0aC5tYXgoMCxNYXRoLm1pbihsLGMpKX1jbGFzcyBCRmV7Y29uc3RydWN0b3IobCxhKXt0aGlzLl9lbGVtZW50PWwsdGhpcy5fZHJhZ0Ryb3BSZWdpc3RyeT1hLHRoaXMuX2l0ZW1Qb3NpdGlvbnM9W10sdGhpcy5vcmllbnRhdGlvbj0idmVydGljYWwiLHRoaXMu'@;
put 'X3ByZXZpb3VzU3dhcD17ZHJhZzpudWxsLGRlbHRhOjAsb3ZlcmxhcHM6ITF9fXN0YXJ0KGwpe3RoaXMud2l0aEl0ZW1zKGwpfXNvcnQobCxhLGQsaCl7Y29uc3QgZj10aGlzLl9pdGVtUG9zaXRpb25zLHY9dGhpcy5fZ2V0SXRlbUluZGV4RnJvbVBvaW50ZXJQb3NpdGlvbihsLGEsZCxoKTtp'@;
put 'ZigtMT09PXYmJmYubGVuZ3RoPjApcmV0dXJuIG51bGw7Y29uc3QgTT0iaG9yaXpvbnRhbCI9PT10aGlzLm9yaWVudGF0aW9uLEQ9Zi5maW5kSW5kZXgocnQ9PnJ0LmRyYWc9PT1sKSxaPWZbdl0sY2U9Wi5jbGllbnRSZWN0LGJlPUQ+dj8xOi0xLEVlPXRoaXMuX2dldEl0ZW1PZmZzZXRQeChm'@;
put 'W0RdLmNsaWVudFJlY3QsY2UsYmUpLEJlPXRoaXMuX2dldFNpYmxpbmdPZmZzZXRQeChELGYsYmUpLHFlPWYuc2xpY2UoKTtyZXR1cm4gZDFlKGYsRCx2KSxmLmZvckVhY2goKHJ0LHB0KT0+e2lmKHFlW3B0XT09PXJ0KXJldHVybjtjb25zdCBkdD1ydC5kcmFnPT09bCxKdD1kdD9FZTpCZSx2'@;
put 'bj1kdD9sLmdldFBsYWNlaG9sZGVyRWxlbWVudCgpOnJ0LmRyYWcuZ2V0Um9vdEVsZW1lbnQoKTtydC5vZmZzZXQrPUp0LE0/KHZuLnN0eWxlLnRyYW5zZm9ybT1ETChgdHJhbnNsYXRlM2QoJHtNYXRoLnJvdW5kKHJ0Lm9mZnNldCl9cHgsIDAsIDApYCxydC5pbml0aWFsVHJhbnNmb3JtKSxF'@;
put 'eChydC5jbGllbnRSZWN0LDAsSnQpKToodm4uc3R5bGUudHJhbnNmb3JtPURMKGB0cmFuc2xhdGUzZCgwLCAke01hdGgucm91bmQocnQub2Zmc2V0KX1weCwgMClgLHJ0LmluaXRpYWxUcmFuc2Zvcm0pLEV4KHJ0LmNsaWVudFJlY3QsSnQsMCkpfSksdGhpcy5fcHJldmlvdXNTd2FwLm92ZXJs'@;
put 'YXBzPVNZKGNlLGEsZCksdGhpcy5fcHJldmlvdXNTd2FwLmRyYWc9Wi5kcmFnLHRoaXMuX3ByZXZpb3VzU3dhcC5kZWx0YT1NP2gueDpoLnkse3ByZXZpb3VzSW5kZXg6RCxjdXJyZW50SW5kZXg6dn19ZW50ZXIobCxhLGQsaCl7Y29uc3QgZj1udWxsPT1ofHxoPDA/dGhpcy5fZ2V0SXRlbUlu'@;
put 'ZGV4RnJvbVBvaW50ZXJQb3NpdGlvbihsLGEsZCk6aCx2PXRoaXMuX2FjdGl2ZURyYWdnYWJsZXMsTT12LmluZGV4T2YobCksRD1sLmdldFBsYWNlaG9sZGVyRWxlbWVudCgpO2xldCBaPXZbZl07aWYoWj09PWwmJihaPXZbZisxXSksIVomJihudWxsPT1mfHwtMT09PWZ8fGY8di5sZW5ndGgt'@;
put 'MSkmJnRoaXMuX3Nob3VsZEVudGVyQXNGaXJzdENoaWxkKGEsZCkmJihaPXZbMF0pLE0+LTEmJnYuc3BsaWNlKE0sMSksWiYmIXRoaXMuX2RyYWdEcm9wUmVnaXN0cnkuaXNEcmFnZ2luZyhaKSl7Y29uc3QgcmU9Wi5nZXRSb290RWxlbWVudCgpO3JlLnBhcmVudEVsZW1lbnQuaW5zZXJ0QmVm'@;
put 'b3JlKEQscmUpLHYuc3BsaWNlKGYsMCxsKX1lbHNlIEVkKHRoaXMuX2VsZW1lbnQpLmFwcGVuZENoaWxkKEQpLHYucHVzaChsKTtELnN0eWxlLnRyYW5zZm9ybT0iIix0aGlzLl9jYWNoZUl0ZW1Qb3NpdGlvbnMoKX13aXRoSXRlbXMobCl7dGhpcy5fYWN0aXZlRHJhZ2dhYmxlcz1sLnNsaWNl'@;
put 'KCksdGhpcy5fY2FjaGVJdGVtUG9zaXRpb25zKCl9d2l0aFNvcnRQcmVkaWNhdGUobCl7dGhpcy5fc29ydFByZWRpY2F0ZT1sfXJlc2V0KCl7dGhpcy5fYWN0aXZlRHJhZ2dhYmxlcy5mb3JFYWNoKGw9Pntjb25zdCBhPWwuZ2V0Um9vdEVsZW1lbnQoKTtpZihhKXtjb25zdCBkPXRoaXMuX2l0'@;
put 'ZW1Qb3NpdGlvbnMuZmluZChoPT5oLmRyYWc9PT1sKT8uaW5pdGlhbFRyYW5zZm9ybTthLnN0eWxlLnRyYW5zZm9ybT1kfHwiIn19KSx0aGlzLl9pdGVtUG9zaXRpb25zPVtdLHRoaXMuX2FjdGl2ZURyYWdnYWJsZXM9W10sdGhpcy5fcHJldmlvdXNTd2FwLmRyYWc9bnVsbCx0aGlzLl9wcmV2'@;
put 'aW91c1N3YXAuZGVsdGE9MCx0aGlzLl9wcmV2aW91c1N3YXAub3ZlcmxhcHM9ITF9Z2V0QWN0aXZlSXRlbXNTbmFwc2hvdCgpe3JldHVybiB0aGlzLl9hY3RpdmVEcmFnZ2FibGVzfWdldEl0ZW1JbmRleChsKXtyZXR1cm4oImhvcml6b250YWwiPT09dGhpcy5vcmllbnRhdGlvbiYmInJ0bCI9'@;
put 'PT10aGlzLmRpcmVjdGlvbj90aGlzLl9pdGVtUG9zaXRpb25zLnNsaWNlKCkucmV2ZXJzZSgpOnRoaXMuX2l0ZW1Qb3NpdGlvbnMpLmZpbmRJbmRleChkPT5kLmRyYWc9PT1sKX11cGRhdGVPblNjcm9sbChsLGEpe3RoaXMuX2l0ZW1Qb3NpdGlvbnMuZm9yRWFjaCgoe2NsaWVudFJlY3Q6ZH0p'@;
put 'PT57RXgoZCxsLGEpfSksdGhpcy5faXRlbVBvc2l0aW9ucy5mb3JFYWNoKCh7ZHJhZzpkfSk9Pnt0aGlzLl9kcmFnRHJvcFJlZ2lzdHJ5LmlzRHJhZ2dpbmcoZCkmJmQuX3NvcnRGcm9tTGFzdFBvaW50ZXJQb3NpdGlvbigpfSl9X2NhY2hlSXRlbVBvc2l0aW9ucygpe2NvbnN0IGw9Imhvcml6'@;
put 'b250YWwiPT09dGhpcy5vcmllbnRhdGlvbjt0aGlzLl9pdGVtUG9zaXRpb25zPXRoaXMuX2FjdGl2ZURyYWdnYWJsZXMubWFwKGE9Pntjb25zdCBkPWEuZ2V0VmlzaWJsZUVsZW1lbnQoKTtyZXR1cm57ZHJhZzphLG9mZnNldDowLGluaXRpYWxUcmFuc2Zvcm06ZC5zdHlsZS50cmFuc2Zvcm18'@;
put 'fCIiLGNsaWVudFJlY3Q6Q1koZCl9fSkuc29ydCgoYSxkKT0+bD9hLmNsaWVudFJlY3QubGVmdC1kLmNsaWVudFJlY3QubGVmdDphLmNsaWVudFJlY3QudG9wLWQuY2xpZW50UmVjdC50b3ApfV9nZXRJdGVtT2Zmc2V0UHgobCxhLGQpe2NvbnN0IGg9Imhvcml6b250YWwiPT09dGhpcy5vcmll'@;
put 'bnRhdGlvbjtsZXQgZj1oP2EubGVmdC1sLmxlZnQ6YS50b3AtbC50b3A7cmV0dXJuLTE9PT1kJiYoZis9aD9hLndpZHRoLWwud2lkdGg6YS5oZWlnaHQtbC5oZWlnaHQpLGZ9X2dldFNpYmxpbmdPZmZzZXRQeChsLGEsZCl7Y29uc3QgaD0iaG9yaXpvbnRhbCI9PT10aGlzLm9yaWVudGF0aW9u'@;
put 'LGY9YVtsXS5jbGllbnRSZWN0LHY9YVtsKy0xKmRdO2xldCBNPWZbaD8id2lkdGgiOiJoZWlnaHQiXSpkO2lmKHYpe2NvbnN0IEQ9aD8ibGVmdCI6InRvcCIsWj1oPyJyaWdodCI6ImJvdHRvbSI7LTE9PT1kP00tPXYuY2xpZW50UmVjdFtEXS1mW1pdOk0rPWZbRF0tdi5jbGllbnRSZWN0W1pd'@;
put 'fXJldHVybiBNfV9zaG91bGRFbnRlckFzRmlyc3RDaGlsZChsLGEpe2lmKCF0aGlzLl9hY3RpdmVEcmFnZ2FibGVzLmxlbmd0aClyZXR1cm4hMTtjb25zdCBkPXRoaXMuX2l0ZW1Qb3NpdGlvbnMsaD0iaG9yaXpvbnRhbCI9PT10aGlzLm9yaWVudGF0aW9uO2lmKGRbMF0uZHJhZyE9PXRoaXMu'@;
put 'X2FjdGl2ZURyYWdnYWJsZXNbMF0pe2NvbnN0IHY9ZFtkLmxlbmd0aC0xXS5jbGllbnRSZWN0O3JldHVybiBoP2w+PXYucmlnaHQ6YT49di5ib3R0b219e2NvbnN0IHY9ZFswXS5jbGllbnRSZWN0O3JldHVybiBoP2w8PXYubGVmdDphPD12LnRvcH19X2dldEl0ZW1JbmRleEZyb21Qb2ludGVy'@;
put 'UG9zaXRpb24obCxhLGQsaCl7Y29uc3QgZj0iaG9yaXpvbnRhbCI9PT10aGlzLm9yaWVudGF0aW9uLHY9dGhpcy5faXRlbVBvc2l0aW9ucy5maW5kSW5kZXgoKHtkcmFnOk0sY2xpZW50UmVjdDpEfSk9Pk0hPT1sJiYoKCFofHxNIT09dGhpcy5fcHJldmlvdXNTd2FwLmRyYWd8fCF0aGlzLl9w'@;
put 'cmV2aW91c1N3YXAub3ZlcmxhcHN8fChmP2gueDpoLnkpIT09dGhpcy5fcHJldmlvdXNTd2FwLmRlbHRhKSYmKGY/YT49TWF0aC5mbG9vcihELmxlZnQpJiZhPE1hdGguZmxvb3IoRC5yaWdodCk6ZD49TWF0aC5mbG9vcihELnRvcCkmJmQ8TWF0aC5mbG9vcihELmJvdHRvbSkpKSk7cmV0dXJu'@;
put 'LTEhPT12JiZ0aGlzLl9zb3J0UHJlZGljYXRlKHYsbCk/djotMX19dmFyIEQyPWZ1bmN0aW9uKGMpe3JldHVybiBjW2MuTk9ORT0wXT0iTk9ORSIsY1tjLlVQPTFdPSJVUCIsY1tjLkRPV049Ml09IkRPV04iLGN9KEQyfHx7fSksajE9ZnVuY3Rpb24oYyl7cmV0dXJuIGNbYy5OT05FPTBdPSJO'@;
put 'T05FIixjW2MuTEVGVD0xXT0iTEVGVCIsY1tjLlJJR0hUPTJdPSJSSUdIVCIsY30oajF8fHt9KTtjbGFzcyBqRmV7Y29uc3RydWN0b3IobCxhLGQsaCxmKXt0aGlzLl9kcmFnRHJvcFJlZ2lzdHJ5PWEsdGhpcy5fbmdab25lPWgsdGhpcy5fdmlld3BvcnRSdWxlcj1mLHRoaXMuZGlzYWJsZWQ9'@;
put 'ITEsdGhpcy5zb3J0aW5nRGlzYWJsZWQ9ITEsdGhpcy5hdXRvU2Nyb2xsRGlzYWJsZWQ9ITEsdGhpcy5hdXRvU2Nyb2xsU3RlcD0yLHRoaXMuZW50ZXJQcmVkaWNhdGU9KCk9PiEwLHRoaXMuc29ydFByZWRpY2F0ZT0oKT0+ITAsdGhpcy5iZWZvcmVTdGFydGVkPW5ldyBXbix0aGlzLmVudGVy'@;
put 'ZWQ9bmV3IFduLHRoaXMuZXhpdGVkPW5ldyBXbix0aGlzLmRyb3BwZWQ9bmV3IFduLHRoaXMuc29ydGVkPW5ldyBXbix0aGlzLnJlY2VpdmluZ1N0YXJ0ZWQ9bmV3IFduLHRoaXMucmVjZWl2aW5nU3RvcHBlZD1uZXcgV24sdGhpcy5faXNEcmFnZ2luZz0hMSx0aGlzLl9kcmFnZ2FibGVzPVtd'@;
put 'LHRoaXMuX3NpYmxpbmdzPVtdLHRoaXMuX2FjdGl2ZVNpYmxpbmdzPW5ldyBTZXQsdGhpcy5fdmlld3BvcnRTY3JvbGxTdWJzY3JpcHRpb249cXQuRU1QVFksdGhpcy5fdmVydGljYWxTY3JvbGxEaXJlY3Rpb249RDIuTk9ORSx0aGlzLl9ob3Jpem9udGFsU2Nyb2xsRGlyZWN0aW9uPWoxLk5P'@;
put 'TkUsdGhpcy5fc3RvcFNjcm9sbFRpbWVycz1uZXcgV24sdGhpcy5fY2FjaGVkU2hhZG93Um9vdD1udWxsLHRoaXMuX3N0YXJ0U2Nyb2xsSW50ZXJ2YWw9KCk9Pnt0aGlzLl9zdG9wU2Nyb2xsaW5nKCksZnVuY3Rpb24gUkZlKGM9MCxsPUNMKXtyZXR1cm4gYzwwJiYoYz0wKSxVMGUoYyxjLGwp'@;
put 'fSgwLGowZSkucGlwZShWMCh0aGlzLl9zdG9wU2Nyb2xsVGltZXJzKSkuc3Vic2NyaWJlKCgpPT57Y29uc3Qgdj10aGlzLl9zY3JvbGxOb2RlLE09dGhpcy5hdXRvU2Nyb2xsU3RlcDt0aGlzLl92ZXJ0aWNhbFNjcm9sbERpcmVjdGlvbj09PUQyLlVQP3Yuc2Nyb2xsQnkoMCwtTSk6dGhpcy5f'@;
put 'dmVydGljYWxTY3JvbGxEaXJlY3Rpb249PT1EMi5ET1dOJiZ2LnNjcm9sbEJ5KDAsTSksdGhpcy5faG9yaXpvbnRhbFNjcm9sbERpcmVjdGlvbj09PWoxLkxFRlQ/di5zY3JvbGxCeSgtTSwwKTp0aGlzLl9ob3Jpem9udGFsU2Nyb2xsRGlyZWN0aW9uPT09ajEuUklHSFQmJnYuc2Nyb2xsQnko'@;
put 'TSwwKX0pfSx0aGlzLmVsZW1lbnQ9RWQobCksdGhpcy5fZG9jdW1lbnQ9ZCx0aGlzLndpdGhTY3JvbGxhYmxlUGFyZW50cyhbdGhpcy5lbGVtZW50XSksYS5yZWdpc3RlckRyb3BDb250YWluZXIodGhpcyksdGhpcy5fcGFyZW50UG9zaXRpb25zPW5ldyBRMGUoZCksdGhpcy5fc29ydFN0cmF0'@;
put 'ZWd5PW5ldyBCRmUodGhpcy5lbGVtZW50LGEpLHRoaXMuX3NvcnRTdHJhdGVneS53aXRoU29ydFByZWRpY2F0ZSgodixNKT0+dGhpcy5zb3J0UHJlZGljYXRlKHYsTSx0aGlzKSl9ZGlzcG9zZSgpe3RoaXMuX3N0b3BTY3JvbGxpbmcoKSx0aGlzLl9zdG9wU2Nyb2xsVGltZXJzLmNvbXBsZXRl'@;
put 'KCksdGhpcy5fdmlld3BvcnRTY3JvbGxTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSx0aGlzLmJlZm9yZVN0YXJ0ZWQuY29tcGxldGUoKSx0aGlzLmVudGVyZWQuY29tcGxldGUoKSx0aGlzLmV4aXRlZC5jb21wbGV0ZSgpLHRoaXMuZHJvcHBlZC5jb21wbGV0ZSgpLHRoaXMuc29ydGVkLmNv'@;
put 'bXBsZXRlKCksdGhpcy5yZWNlaXZpbmdTdGFydGVkLmNvbXBsZXRlKCksdGhpcy5yZWNlaXZpbmdTdG9wcGVkLmNvbXBsZXRlKCksdGhpcy5fYWN0aXZlU2libGluZ3MuY2xlYXIoKSx0aGlzLl9zY3JvbGxOb2RlPW51bGwsdGhpcy5fcGFyZW50UG9zaXRpb25zLmNsZWFyKCksdGhpcy5fZHJh'@;
put 'Z0Ryb3BSZWdpc3RyeS5yZW1vdmVEcm9wQ29udGFpbmVyKHRoaXMpfWlzRHJhZ2dpbmcoKXtyZXR1cm4gdGhpcy5faXNEcmFnZ2luZ31zdGFydCgpe3RoaXMuX2RyYWdnaW5nU3RhcnRlZCgpLHRoaXMuX25vdGlmeVJlY2VpdmluZ1NpYmxpbmdzKCl9ZW50ZXIobCxhLGQsaCl7dGhpcy5fZHJh'@;
put 'Z2dpbmdTdGFydGVkKCksbnVsbD09aCYmdGhpcy5zb3J0aW5nRGlzYWJsZWQmJihoPXRoaXMuX2RyYWdnYWJsZXMuaW5kZXhPZihsKSksdGhpcy5fc29ydFN0cmF0ZWd5LmVudGVyKGwsYSxkLGgpLHRoaXMuX2NhY2hlUGFyZW50UG9zaXRpb25zKCksdGhpcy5fbm90aWZ5UmVjZWl2aW5nU2li'@;
put 'bGluZ3MoKSx0aGlzLmVudGVyZWQubmV4dCh7aXRlbTpsLGNvbnRhaW5lcjp0aGlzLGN1cnJlbnRJbmRleDp0aGlzLmdldEl0ZW1JbmRleChsKX0pfWV4aXQobCl7dGhpcy5fcmVzZXQoKSx0aGlzLmV4aXRlZC5uZXh0KHtpdGVtOmwsY29udGFpbmVyOnRoaXN9KX1kcm9wKGwsYSxkLGgsZix2'@;
put 'LE0sRD17fSl7dGhpcy5fcmVzZXQoKSx0aGlzLmRyb3BwZWQubmV4dCh7aXRlbTpsLGN1cnJlbnRJbmRleDphLHByZXZpb3VzSW5kZXg6ZCxjb250YWluZXI6dGhpcyxwcmV2aW91c0NvbnRhaW5lcjpoLGlzUG9pbnRlck92ZXJDb250YWluZXI6ZixkaXN0YW5jZTp2LGRyb3BQb2ludDpNLGV2'@;
put 'ZW50OkR9KX13aXRoSXRlbXMobCl7Y29uc3QgYT10aGlzLl9kcmFnZ2FibGVzO3JldHVybiB0aGlzLl9kcmFnZ2FibGVzPWwsbC5mb3JFYWNoKGQ9PmQuX3dpdGhEcm9wQ29udGFpbmVyKHRoaXMpKSx0aGlzLmlzRHJhZ2dpbmcoKSYmKGEuZmlsdGVyKGg9PmguaXNEcmFnZ2luZygpKS5ldmVy'@;
put 'eShoPT4tMT09PWwuaW5kZXhPZihoKSk/dGhpcy5fcmVzZXQoKTp0aGlzLl9zb3J0U3RyYXRlZ3kud2l0aEl0ZW1zKHRoaXMuX2RyYWdnYWJsZXMpKSx0aGlzfXdpdGhEaXJlY3Rpb24obCl7cmV0dXJuIHRoaXMuX3NvcnRTdHJhdGVneS5kaXJlY3Rpb249bCx0aGlzfWNvbm5lY3RlZFRvKGwp'@;
put 'e3JldHVybiB0aGlzLl9zaWJsaW5ncz1sLnNsaWNlKCksdGhpc313aXRoT3JpZW50YXRpb24obCl7cmV0dXJuIHRoaXMuX3NvcnRTdHJhdGVneS5vcmllbnRhdGlvbj1sLHRoaXN9d2l0aFNjcm9sbGFibGVQYXJlbnRzKGwpe2NvbnN0IGE9RWQodGhpcy5lbGVtZW50KTtyZXR1cm4gdGhpcy5f'@;
put 'c2Nyb2xsYWJsZUVsZW1lbnRzPS0xPT09bC5pbmRleE9mKGEpP1thLC4uLmxdOmwuc2xpY2UoKSx0aGlzfWdldFNjcm9sbGFibGVQYXJlbnRzKCl7cmV0dXJuIHRoaXMuX3Njcm9sbGFibGVFbGVtZW50c31nZXRJdGVtSW5kZXgobCl7cmV0dXJuIHRoaXMuX2lzRHJhZ2dpbmc/dGhpcy5fc29y'@;
put 'dFN0cmF0ZWd5LmdldEl0ZW1JbmRleChsKTp0aGlzLl9kcmFnZ2FibGVzLmluZGV4T2YobCl9aXNSZWNlaXZpbmcoKXtyZXR1cm4gdGhpcy5fYWN0aXZlU2libGluZ3Muc2l6ZT4wfV9zb3J0SXRlbShsLGEsZCxoKXtpZih0aGlzLnNvcnRpbmdEaXNhYmxlZHx8IXRoaXMuX2RvbVJlY3R8fCFK'@;
put 'MGUodGhpcy5fZG9tUmVjdCwuMDUsYSxkKSlyZXR1cm47Y29uc3QgZj10aGlzLl9zb3J0U3RyYXRlZ3kuc29ydChsLGEsZCxoKTtmJiZ0aGlzLnNvcnRlZC5uZXh0KHtwcmV2aW91c0luZGV4OmYucHJldmlvdXNJbmRleCxjdXJyZW50SW5kZXg6Zi5jdXJyZW50SW5kZXgsY29udGFpbmVyOnRo'@;
put 'aXMsaXRlbTpsfSl9X3N0YXJ0U2Nyb2xsaW5nSWZOZWNlc3NhcnkobCxhKXtpZih0aGlzLmF1dG9TY3JvbGxEaXNhYmxlZClyZXR1cm47bGV0IGQsaD1EMi5OT05FLGY9ajEuTk9ORTtpZih0aGlzLl9wYXJlbnRQb3NpdGlvbnMucG9zaXRpb25zLmZvckVhY2goKHYsTSk9PntNPT09dGhpcy5f'@;
put 'ZG9jdW1lbnR8fCF2LmNsaWVudFJlY3R8fGR8fEowZSh2LmNsaWVudFJlY3QsLjA1LGwsYSkmJihbaCxmXT1mdW5jdGlvbiB6RmUoYyxsLGEsZCxoKXtjb25zdCBmPXAxZShsLGgpLHY9ZzFlKGwsZCk7bGV0IE09RDIuTk9ORSxEPWoxLk5PTkU7aWYoZil7Y29uc3QgWj1jLnNjcm9sbFRvcDtm'@;
put 'PT09RDIuVVA/Wj4wJiYoTT1EMi5VUCk6Yy5zY3JvbGxIZWlnaHQtWj5jLmNsaWVudEhlaWdodCYmKE09RDIuRE9XTil9aWYodil7Y29uc3QgWj1jLnNjcm9sbExlZnQ7InJ0bCI9PT1hP3Y9PT1qMS5SSUdIVD9aPDAmJihEPWoxLlJJR0hUKTpjLnNjcm9sbFdpZHRoK1o+Yy5jbGllbnRXaWR0'@;
put 'aCYmKEQ9ajEuTEVGVCk6dj09PWoxLkxFRlQ/Wj4wJiYoRD1qMS5MRUZUKTpjLnNjcm9sbFdpZHRoLVo+Yy5jbGllbnRXaWR0aCYmKEQ9ajEuUklHSFQpfXJldHVybltNLERdfShNLHYuY2xpZW50UmVjdCx0aGlzLl9zb3J0U3RyYXRlZ3kuZGlyZWN0aW9uLGwsYSksKGh8fGYpJiYoZD1NKSl9'@;
put 'KSwhaCYmIWYpe2NvbnN0e3dpZHRoOnYsaGVpZ2h0Ok19PXRoaXMuX3ZpZXdwb3J0UnVsZXIuZ2V0Vmlld3BvcnRTaXplKCksRD17d2lkdGg6dixoZWlnaHQ6TSx0b3A6MCxyaWdodDp2LGJvdHRvbTpNLGxlZnQ6MH07aD1wMWUoRCxhKSxmPWcxZShELGwpLGQ9d2luZG93fWQmJihoIT09dGhp'@;
put 'cy5fdmVydGljYWxTY3JvbGxEaXJlY3Rpb258fGYhPT10aGlzLl9ob3Jpem9udGFsU2Nyb2xsRGlyZWN0aW9ufHxkIT09dGhpcy5fc2Nyb2xsTm9kZSkmJih0aGlzLl92ZXJ0aWNhbFNjcm9sbERpcmVjdGlvbj1oLHRoaXMuX2hvcml6b250YWxTY3JvbGxEaXJlY3Rpb249Zix0aGlzLl9zY3Jv'@;
put 'bGxOb2RlPWQsKGh8fGYpJiZkP3RoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcih0aGlzLl9zdGFydFNjcm9sbEludGVydmFsKTp0aGlzLl9zdG9wU2Nyb2xsaW5nKCkpfV9zdG9wU2Nyb2xsaW5nKCl7dGhpcy5fc3RvcFNjcm9sbFRpbWVycy5uZXh0KCl9X2RyYWdnaW5nU3RhcnRlZCgp'@;
put 'e2NvbnN0IGw9RWQodGhpcy5lbGVtZW50KS5zdHlsZTt0aGlzLmJlZm9yZVN0YXJ0ZWQubmV4dCgpLHRoaXMuX2lzRHJhZ2dpbmc9ITAsdGhpcy5faW5pdGlhbFNjcm9sbFNuYXA9bC5tc1Njcm9sbFNuYXBUeXBlfHxsLnNjcm9sbFNuYXBUeXBlfHwiIixsLnNjcm9sbFNuYXBUeXBlPWwubXNT'@;
put 'Y3JvbGxTbmFwVHlwZT0ibm9uZSIsdGhpcy5fc29ydFN0cmF0ZWd5LnN0YXJ0KHRoaXMuX2RyYWdnYWJsZXMpLHRoaXMuX2NhY2hlUGFyZW50UG9zaXRpb25zKCksdGhpcy5fdmlld3BvcnRTY3JvbGxTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSx0aGlzLl9saXN0ZW5Ub1Njcm9sbEV2ZW50'@;
put 'cygpfV9jYWNoZVBhcmVudFBvc2l0aW9ucygpe2NvbnN0IGw9RWQodGhpcy5lbGVtZW50KTt0aGlzLl9wYXJlbnRQb3NpdGlvbnMuY2FjaGUodGhpcy5fc2Nyb2xsYWJsZUVsZW1lbnRzKSx0aGlzLl9kb21SZWN0PXRoaXMuX3BhcmVudFBvc2l0aW9ucy5wb3NpdGlvbnMuZ2V0KGwpLmNsaWVu'@;
put 'dFJlY3R9X3Jlc2V0KCl7dGhpcy5faXNEcmFnZ2luZz0hMTtjb25zdCBsPUVkKHRoaXMuZWxlbWVudCkuc3R5bGU7bC5zY3JvbGxTbmFwVHlwZT1sLm1zU2Nyb2xsU25hcFR5cGU9dGhpcy5faW5pdGlhbFNjcm9sbFNuYXAsdGhpcy5fc2libGluZ3MuZm9yRWFjaChhPT5hLl9zdG9wUmVjZWl2'@;
put 'aW5nKHRoaXMpKSx0aGlzLl9zb3J0U3RyYXRlZ3kucmVzZXQoKSx0aGlzLl9zdG9wU2Nyb2xsaW5nKCksdGhpcy5fdmlld3BvcnRTY3JvbGxTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSx0aGlzLl9wYXJlbnRQb3NpdGlvbnMuY2xlYXIoKX1faXNPdmVyQ29udGFpbmVyKGwsYSl7cmV0dXJu'@;
put 'IG51bGwhPXRoaXMuX2RvbVJlY3QmJlNZKHRoaXMuX2RvbVJlY3QsbCxhKX1fZ2V0U2libGluZ0NvbnRhaW5lckZyb21Qb3NpdGlvbihsLGEsZCl7cmV0dXJuIHRoaXMuX3NpYmxpbmdzLmZpbmQoaD0+aC5fY2FuUmVjZWl2ZShsLGEsZCkpfV9jYW5SZWNlaXZlKGwsYSxkKXtpZighdGhpcy5f'@;
put 'ZG9tUmVjdHx8IVNZKHRoaXMuX2RvbVJlY3QsYSxkKXx8IXRoaXMuZW50ZXJQcmVkaWNhdGUobCx0aGlzKSlyZXR1cm4hMTtjb25zdCBoPXRoaXMuX2dldFNoYWRvd1Jvb3QoKS5lbGVtZW50RnJvbVBvaW50KGEsZCk7aWYoIWgpcmV0dXJuITE7Y29uc3QgZj1FZCh0aGlzLmVsZW1lbnQpO3Jl'@;
put 'dHVybiBoPT09Znx8Zi5jb250YWlucyhoKX1fc3RhcnRSZWNlaXZpbmcobCxhKXtjb25zdCBkPXRoaXMuX2FjdGl2ZVNpYmxpbmdzOyFkLmhhcyhsKSYmYS5ldmVyeShoPT50aGlzLmVudGVyUHJlZGljYXRlKGgsdGhpcyl8fHRoaXMuX2RyYWdnYWJsZXMuaW5kZXhPZihoKT4tMSkmJihkLmFk'@;
put 'ZChsKSx0aGlzLl9jYWNoZVBhcmVudFBvc2l0aW9ucygpLHRoaXMuX2xpc3RlblRvU2Nyb2xsRXZlbnRzKCksdGhpcy5yZWNlaXZpbmdTdGFydGVkLm5leHQoe2luaXRpYXRvcjpsLHJlY2VpdmVyOnRoaXMsaXRlbXM6YX0pKX1fc3RvcFJlY2VpdmluZyhsKXt0aGlzLl9hY3RpdmVTaWJsaW5n'@;
put 'cy5kZWxldGUobCksdGhpcy5fdmlld3BvcnRTY3JvbGxTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSx0aGlzLnJlY2VpdmluZ1N0b3BwZWQubmV4dCh7aW5pdGlhdG9yOmwscmVjZWl2ZXI6dGhpc30pfV9saXN0ZW5Ub1Njcm9sbEV2ZW50cygpe3RoaXMuX3ZpZXdwb3J0U2Nyb2xsU3Vic2Ny'@;
put 'aXB0aW9uPXRoaXMuX2RyYWdEcm9wUmVnaXN0cnkuc2Nyb2xsZWQodGhpcy5fZ2V0U2hhZG93Um9vdCgpKS5zdWJzY3JpYmUobD0+e2lmKHRoaXMuaXNEcmFnZ2luZygpKXtjb25zdCBhPXRoaXMuX3BhcmVudFBvc2l0aW9ucy5oYW5kbGVTY3JvbGwobCk7YSYmdGhpcy5fc29ydFN0cmF0ZWd5'@;
put 'LnVwZGF0ZU9uU2Nyb2xsKGEudG9wLGEubGVmdCl9ZWxzZSB0aGlzLmlzUmVjZWl2aW5nKCkmJnRoaXMuX2NhY2hlUGFyZW50UG9zaXRpb25zKCl9KX1fZ2V0U2hhZG93Um9vdCgpe2lmKCF0aGlzLl9jYWNoZWRTaGFkb3dSb290KXtjb25zdCBsPU8wZShFZCh0aGlzLmVsZW1lbnQpKTt0aGlz'@;
put 'Ll9jYWNoZWRTaGFkb3dSb290PWx8fHRoaXMuX2RvY3VtZW50fXJldHVybiB0aGlzLl9jYWNoZWRTaGFkb3dSb290fV9ub3RpZnlSZWNlaXZpbmdTaWJsaW5ncygpe2NvbnN0IGw9dGhpcy5fc29ydFN0cmF0ZWd5LmdldEFjdGl2ZUl0ZW1zU25hcHNob3QoKS5maWx0ZXIoYT0+YS5pc0RyYWdn'@;
put 'aW5nKCkpO3RoaXMuX3NpYmxpbmdzLmZvckVhY2goYT0+YS5fc3RhcnRSZWNlaXZpbmcodGhpcyxsKSl9fWZ1bmN0aW9uIHAxZShjLGwpe2NvbnN0e3RvcDphLGJvdHRvbTpkLGhlaWdodDpofT1jLGY9LjA1Kmg7cmV0dXJuIGw+PWEtZiYmbDw9YStmP0QyLlVQOmw+PWQtZiYmbDw9ZCtmP0Qy'@;
put 'LkRPV046RDIuTk9ORX1mdW5jdGlvbiBnMWUoYyxsKXtjb25zdHtsZWZ0OmEscmlnaHQ6ZCx3aWR0aDpofT1jLGY9LjA1Kmg7cmV0dXJuIGw+PWEtZiYmbDw9YStmP2oxLkxFRlQ6bD49ZC1mJiZsPD1kK2Y/ajEuUklHSFQ6ajEuTk9ORX1jb25zdCBMTD1BeSh7cGFzc2l2ZTohMSxjYXB0dXJl'@;
put 'OiEwfSksT0w9bmV3IFNldDtsZXQgVUZlPSgoKT0+e2NsYXNzIGN7c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJuZy1jb21wb25lbnQiXV0saG9zdEF0dHJzOlsi'@;
put 'Y2RrLWRyYWctcmVzZXRzLWNvbnRhaW5lciIsIiJdLHN0YW5kYWxvbmU6ITAsZmVhdHVyZXM6W3FJXSxkZWNsczowLHZhcnM6MCx0ZW1wbGF0ZTpmdW5jdGlvbihkLGgpe30sc3R5bGVzOlsiQGxheWVyIGNkay1yZXNldHN7LmNkay1kcmFnLXByZXZpZXd7YmFja2dyb3VuZDpub25lO2JvcmRl'@;
put 'cjpub25lO3BhZGRpbmc6MDtjb2xvcjppbmhlcml0fX0iXSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KX19cmV0dXJuIGN9KSgpLFpGZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCl7dGhpcy5fbmdab25lPWEsdGhpcy5fYXBwUmVmPWZpKHE0KSx0aGlzLl9lbnZp'@;
put 'cm9ubWVudEluamVjdG9yPWZpKGhjKSx0aGlzLl9kcm9wSW5zdGFuY2VzPW5ldyBTZXQsdGhpcy5fZHJhZ0luc3RhbmNlcz1uZXcgU2V0LHRoaXMuX2FjdGl2ZURyYWdJbnN0YW5jZXM9W10sdGhpcy5fZ2xvYmFsTGlzdGVuZXJzPW5ldyBNYXAsdGhpcy5fZHJhZ2dpbmdQcmVkaWNhdGU9aD0+'@;
put 'aC5pc0RyYWdnaW5nKCksdGhpcy5wb2ludGVyTW92ZT1uZXcgV24sdGhpcy5wb2ludGVyVXA9bmV3IFduLHRoaXMuc2Nyb2xsPW5ldyBXbix0aGlzLl9wcmV2ZW50RGVmYXVsdFdoaWxlRHJhZ2dpbmc9aD0+e3RoaXMuX2FjdGl2ZURyYWdJbnN0YW5jZXMubGVuZ3RoPjAmJmgucHJldmVudERl'@;
put 'ZmF1bHQoKX0sdGhpcy5fcGVyc2lzdGVudFRvdWNobW92ZUxpc3RlbmVyPWg9Pnt0aGlzLl9hY3RpdmVEcmFnSW5zdGFuY2VzLmxlbmd0aD4wJiYodGhpcy5fYWN0aXZlRHJhZ0luc3RhbmNlcy5zb21lKHRoaXMuX2RyYWdnaW5nUHJlZGljYXRlKSYmaC5wcmV2ZW50RGVmYXVsdCgpLHRoaXMu'@;
put 'cG9pbnRlck1vdmUubmV4dChoKSl9LHRoaXMuX2RvY3VtZW50PWR9cmVnaXN0ZXJEcm9wQ29udGFpbmVyKGEpe3RoaXMuX2Ryb3BJbnN0YW5jZXMuaGFzKGEpfHx0aGlzLl9kcm9wSW5zdGFuY2VzLmFkZChhKX1yZWdpc3RlckRyYWdJdGVtKGEpe3RoaXMuX2RyYWdJbnN0YW5jZXMuYWRkKGEp'@;
put 'LDE9PT10aGlzLl9kcmFnSW5zdGFuY2VzLnNpemUmJnRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e3RoaXMuX2RvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoInRvdWNobW92ZSIsdGhpcy5fcGVyc2lzdGVudFRvdWNobW92ZUxpc3RlbmVyLExMKX0pfXJlbW92ZURyb3BDb250'@;
put 'YWluZXIoYSl7dGhpcy5fZHJvcEluc3RhbmNlcy5kZWxldGUoYSl9cmVtb3ZlRHJhZ0l0ZW0oYSl7dGhpcy5fZHJhZ0luc3RhbmNlcy5kZWxldGUoYSksdGhpcy5zdG9wRHJhZ2dpbmcoYSksMD09PXRoaXMuX2RyYWdJbnN0YW5jZXMuc2l6ZSYmdGhpcy5fZG9jdW1lbnQucmVtb3ZlRXZlbnRM'@;
put 'aXN0ZW5lcigidG91Y2htb3ZlIix0aGlzLl9wZXJzaXN0ZW50VG91Y2htb3ZlTGlzdGVuZXIsTEwpfXN0YXJ0RHJhZ2dpbmcoYSxkKXtpZighKHRoaXMuX2FjdGl2ZURyYWdJbnN0YW5jZXMuaW5kZXhPZihhKT4tMSkmJih0aGlzLl9sb2FkUmVzZXRzKCksdGhpcy5fYWN0aXZlRHJhZ0luc3Rh'@;
put 'bmNlcy5wdXNoKGEpLDE9PT10aGlzLl9hY3RpdmVEcmFnSW5zdGFuY2VzLmxlbmd0aCkpe2NvbnN0IGg9ZC50eXBlLnN0YXJ0c1dpdGgoInRvdWNoIik7dGhpcy5fZ2xvYmFsTGlzdGVuZXJzLnNldChoPyJ0b3VjaGVuZCI6Im1vdXNldXAiLHtoYW5kbGVyOmY9PnRoaXMucG9pbnRlclVwLm5l'@;
put 'eHQoZiksb3B0aW9uczohMH0pLnNldCgic2Nyb2xsIix7aGFuZGxlcjpmPT50aGlzLnNjcm9sbC5uZXh0KGYpLG9wdGlvbnM6ITB9KS5zZXQoInNlbGVjdHN0YXJ0Iix7aGFuZGxlcjp0aGlzLl9wcmV2ZW50RGVmYXVsdFdoaWxlRHJhZ2dpbmcsb3B0aW9uczpMTH0pLGh8fHRoaXMuX2dsb2Jh'@;
put 'bExpc3RlbmVycy5zZXQoIm1vdXNlbW92ZSIse2hhbmRsZXI6Zj0+dGhpcy5wb2ludGVyTW92ZS5uZXh0KGYpLG9wdGlvbnM6TEx9KSx0aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9Pnt0aGlzLl9nbG9iYWxMaXN0ZW5lcnMuZm9yRWFjaCgoZix2KT0+e3RoaXMuX2RvY3VtZW50'@;
put 'LmFkZEV2ZW50TGlzdGVuZXIodixmLmhhbmRsZXIsZi5vcHRpb25zKX0pfSl9fXN0b3BEcmFnZ2luZyhhKXtjb25zdCBkPXRoaXMuX2FjdGl2ZURyYWdJbnN0YW5jZXMuaW5kZXhPZihhKTtkPi0xJiYodGhpcy5fYWN0aXZlRHJhZ0luc3RhbmNlcy5zcGxpY2UoZCwxKSwwPT09dGhpcy5fYWN0'@;
put 'aXZlRHJhZ0luc3RhbmNlcy5sZW5ndGgmJnRoaXMuX2NsZWFyR2xvYmFsTGlzdGVuZXJzKCkpfWlzRHJhZ2dpbmcoYSl7cmV0dXJuIHRoaXMuX2FjdGl2ZURyYWdJbnN0YW5jZXMuaW5kZXhPZihhKT4tMX1zY3JvbGxlZChhKXtjb25zdCBkPVt0aGlzLnNjcm9sbF07cmV0dXJuIGEmJmEhPT10'@;
put 'aGlzLl9kb2N1bWVudCYmZC5wdXNoKG5ldyBYdChoPT50aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9Pntjb25zdCB2PU09Pnt0aGlzLl9hY3RpdmVEcmFnSW5zdGFuY2VzLmxlbmd0aCYmaC5uZXh0KE0pfTtyZXR1cm4gYS5hZGRFdmVudExpc3RlbmVyKCJzY3JvbGwiLHYsITAp'@;
put 'LCgpPT57YS5yZW1vdmVFdmVudExpc3RlbmVyKCJzY3JvbGwiLHYsITApfX0pKSksX3goLi4uZCl9bmdPbkRlc3Ryb3koKXt0aGlzLl9kcmFnSW5zdGFuY2VzLmZvckVhY2goYT0+dGhpcy5yZW1vdmVEcmFnSXRlbShhKSksdGhpcy5fZHJvcEluc3RhbmNlcy5mb3JFYWNoKGE9PnRoaXMucmVt'@;
put 'b3ZlRHJvcENvbnRhaW5lcihhKSksdGhpcy5fY2xlYXJHbG9iYWxMaXN0ZW5lcnMoKSx0aGlzLnBvaW50ZXJNb3ZlLmNvbXBsZXRlKCksdGhpcy5wb2ludGVyVXAuY29tcGxldGUoKX1fY2xlYXJHbG9iYWxMaXN0ZW5lcnMoKXt0aGlzLl9nbG9iYWxMaXN0ZW5lcnMuZm9yRWFjaCgoYSxkKT0+'@;
put 'e3RoaXMuX2RvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoZCxhLmhhbmRsZXIsYS5vcHRpb25zKX0pLHRoaXMuX2dsb2JhbExpc3RlbmVycy5jbGVhcigpfV9sb2FkUmVzZXRzKCl7aWYoIU9MLmhhcyh0aGlzLl9hcHBSZWYpKXtPTC5hZGQodGhpcy5fYXBwUmVmKTtjb25zdCBhPWZ1bmN0'@;
put 'aW9uIGRfZShjLGwpe2NvbnN0IGE9Vm8oYyksZD1sLmVsZW1lbnRJbmplY3Rvcnx8SDMoKTtyZXR1cm4gbmV3IGs4KGEpLmNyZWF0ZShkLGwucHJvamVjdGFibGVOb2RlcyxsLmhvc3RFbGVtZW50LGwuZW52aXJvbm1lbnRJbmplY3Rvcil9KFVGZSx7ZW52aXJvbm1lbnRJbmplY3Rvcjp0aGlz'@;
put 'Ll9lbnZpcm9ubWVudEluamVjdG9yfSk7dGhpcy5fYXBwUmVmLm9uRGVzdHJveSgoKT0+e09MLmRlbGV0ZSh0aGlzLl9hcHBSZWYpLDA9PT1PTC5zaXplJiZhLmRlc3Ryb3koKX0pfX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKSh4cihXYSkseHIo'@;
put 'dnMpKX19c3RhdGlje3RoaXMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSl9fXJldHVybiBjfSkoKTtjb25zdCBXRmU9e2RyYWdTdGFydFRocmVzaG9sZDo1LHBvaW50ZXJEaXJlY3Rpb25DaGFuZ2VUaHJlc2hvbGQ6NX07bGV0'@;
put 'IFBMPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZil7dGhpcy5fZG9jdW1lbnQ9YSx0aGlzLl9uZ1pvbmU9ZCx0aGlzLl92aWV3cG9ydFJ1bGVyPWgsdGhpcy5fZHJhZ0Ryb3BSZWdpc3RyeT1mfWNyZWF0ZURyYWcoYSxkPVdGZSl7cmV0dXJuIG5ldyBORmUoYSxkLHRoaXMuX2Rv'@;
put 'Y3VtZW50LHRoaXMuX25nWm9uZSx0aGlzLl92aWV3cG9ydFJ1bGVyLHRoaXMuX2RyYWdEcm9wUmVnaXN0cnkpfWNyZWF0ZURyb3BMaXN0KGEpe3JldHVybiBuZXcgakZlKGEsdGhpcy5fZHJhZ0Ryb3BSZWdpc3RyeSx0aGlzLl9kb2N1bWVudCx0aGlzLl9uZ1pvbmUsdGhpcy5fdmlld3BvcnRS'@;
put 'dWxlcil9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoeHIodnMpLHhyKFdhKSx4cihBTCkseHIoWkZlKSl9fXN0YXRpY3t0aGlzLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pfX1y'@;
put 'ZXR1cm4gY30pKCk7Y29uc3Qga3g9bmV3IFN0KCJDREtfRFJBR19QQVJFTlQiKSxtMWU9bmV3IFN0KCJDZGtEcmFnSGFuZGxlIik7bGV0IHYxZT0oKCk9PntjbGFzcyBje2dldCBkaXNhYmxlZCgpe3JldHVybiB0aGlzLl9kaXNhYmxlZH1zZXQgZGlzYWJsZWQoYSl7dGhpcy5fZGlzYWJsZWQ9'@;
put 'YSx0aGlzLl9zdGF0ZUNoYW5nZXMubmV4dCh0aGlzKX1jb25zdHJ1Y3RvcihhLGQpe3RoaXMuZWxlbWVudD1hLHRoaXMuX3BhcmVudERyYWc9ZCx0aGlzLl9zdGF0ZUNoYW5nZXM9bmV3IFduLHRoaXMuX2Rpc2FibGVkPSExLGQ/Ll9hZGRIYW5kbGUodGhpcyl9bmdPbkRlc3Ryb3koKXt0aGlz'@;
put 'Ll9wYXJlbnREcmFnPy5fcmVtb3ZlSGFuZGxlKHRoaXMpLHRoaXMuX3N0YXRlQ2hhbmdlcy5jb21wbGV0ZSgpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKEdlKEppKSxHZShreCwxMikpfX1zdGF0aWN7dGhpcy5cdTAyNzVkaXI9RXIoe3R5cGU6'@;
put 'YyxzZWxlY3RvcnM6W1siIiwiY2RrRHJhZ0hhbmRsZSIsIiJdXSxob3N0QXR0cnM6WzEsImNkay1kcmFnLWhhbmRsZSJdLGlucHV0czp7ZGlzYWJsZWQ6W05uLkhhc0RlY29yYXRvcklucHV0VHJhbnNmb3JtLCJjZGtEcmFnSGFuZGxlRGlzYWJsZWQiLCJkaXNhYmxlZCIsczFdfSxzdGFuZGFs'@;
put 'b25lOiEwLGZlYXR1cmVzOltkYShbe3Byb3ZpZGU6bTFlLHVzZUV4aXN0aW5nOmN9XSksV2xdfSl9fXJldHVybiBjfSkoKTtjb25zdCB4WT1uZXcgU3QoIkNES19EUkFHX0NPTkZJRyIpLEVZPW5ldyBTdCgiQ2RrRHJvcExpc3QiKTtsZXQgVFk9KCgpPT57Y2xhc3MgY3tzdGF0aWN7dGhpcy5f'@;
put 'ZHJhZ0luc3RhbmNlcz1bXX1nZXQgZGlzYWJsZWQoKXtyZXR1cm4gdGhpcy5fZGlzYWJsZWR8fHRoaXMuZHJvcENvbnRhaW5lciYmdGhpcy5kcm9wQ29udGFpbmVyLmRpc2FibGVkfXNldCBkaXNhYmxlZChhKXt0aGlzLl9kaXNhYmxlZD1hLHRoaXMuX2RyYWdSZWYuZGlzYWJsZWQ9dGhpcy5f'@;
put 'ZGlzYWJsZWR9Y29uc3RydWN0b3IoYSxkLGgsZix2LE0sRCxaLHJlLGNlLGJlKXt0aGlzLmVsZW1lbnQ9YSx0aGlzLmRyb3BDb250YWluZXI9ZCx0aGlzLl9uZ1pvbmU9Zix0aGlzLl92aWV3Q29udGFpbmVyUmVmPXYsdGhpcy5fZGlyPUQsdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWY9cmUsdGhp'@;
put 'cy5fc2VsZkhhbmRsZT1jZSx0aGlzLl9wYXJlbnREcmFnPWJlLHRoaXMuX2Rlc3Ryb3llZD1uZXcgV24sdGhpcy5faGFuZGxlcz1uZXcgZWkoW10pLHRoaXMuc3RhcnRlZD1uZXcgS3IsdGhpcy5yZWxlYXNlZD1uZXcgS3IsdGhpcy5lbmRlZD1uZXcgS3IsdGhpcy5lbnRlcmVkPW5ldyBLcix0'@;
put 'aGlzLmV4aXRlZD1uZXcgS3IsdGhpcy5kcm9wcGVkPW5ldyBLcix0aGlzLm1vdmVkPW5ldyBYdChFZT0+e2NvbnN0IEJlPXRoaXMuX2RyYWdSZWYubW92ZWQucGlwZShMcihxZT0+KHtzb3VyY2U6dGhpcyxwb2ludGVyUG9zaXRpb246cWUucG9pbnRlclBvc2l0aW9uLGV2ZW50OnFlLmV2ZW50'@;
put 'LGRlbHRhOnFlLmRlbHRhLGRpc3RhbmNlOnFlLmRpc3RhbmNlfSkpKS5zdWJzY3JpYmUoRWUpO3JldHVybigpPT57QmUudW5zdWJzY3JpYmUoKX19KSx0aGlzLl9kcmFnUmVmPVouY3JlYXRlRHJhZyhhLHtkcmFnU3RhcnRUaHJlc2hvbGQ6TSYmbnVsbCE9TS5kcmFnU3RhcnRUaHJlc2hvbGQ/'@;
put 'TS5kcmFnU3RhcnRUaHJlc2hvbGQ6NSxwb2ludGVyRGlyZWN0aW9uQ2hhbmdlVGhyZXNob2xkOk0mJm51bGwhPU0ucG9pbnRlckRpcmVjdGlvbkNoYW5nZVRocmVzaG9sZD9NLnBvaW50ZXJEaXJlY3Rpb25DaGFuZ2VUaHJlc2hvbGQ6NSx6SW5kZXg6TT8uekluZGV4fSksdGhpcy5fZHJhZ1Jl'@;
put 'Zi5kYXRhPXRoaXMsYy5fZHJhZ0luc3RhbmNlcy5wdXNoKHRoaXMpLE0mJnRoaXMuX2Fzc2lnbkRlZmF1bHRzKE0pLGQmJih0aGlzLl9kcmFnUmVmLl93aXRoRHJvcENvbnRhaW5lcihkLl9kcm9wTGlzdFJlZiksZC5hZGRJdGVtKHRoaXMpKSx0aGlzLl9zeW5jSW5wdXRzKHRoaXMuX2RyYWdS'@;
put 'ZWYpLHRoaXMuX2hhbmRsZUV2ZW50cyh0aGlzLl9kcmFnUmVmKX1nZXRQbGFjZWhvbGRlckVsZW1lbnQoKXtyZXR1cm4gdGhpcy5fZHJhZ1JlZi5nZXRQbGFjZWhvbGRlckVsZW1lbnQoKX1nZXRSb290RWxlbWVudCgpe3JldHVybiB0aGlzLl9kcmFnUmVmLmdldFJvb3RFbGVtZW50KCl9cmVz'@;
put 'ZXQoKXt0aGlzLl9kcmFnUmVmLnJlc2V0KCl9Z2V0RnJlZURyYWdQb3NpdGlvbigpe3JldHVybiB0aGlzLl9kcmFnUmVmLmdldEZyZWVEcmFnUG9zaXRpb24oKX1zZXRGcmVlRHJhZ1Bvc2l0aW9uKGEpe3RoaXMuX2RyYWdSZWYuc2V0RnJlZURyYWdQb3NpdGlvbihhKX1uZ0FmdGVyVmlld0lu'@;
put 'aXQoKXt0aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9Pnt0aGlzLl9uZ1pvbmUub25TdGFibGUucGlwZShZZigxKSxWMCh0aGlzLl9kZXN0cm95ZWQpKS5zdWJzY3JpYmUoKCk9Pnt0aGlzLl91cGRhdGVSb290RWxlbWVudCgpLHRoaXMuX3NldHVwSGFuZGxlc0xpc3RlbmVyKCks'@;
put 'dGhpcy5mcmVlRHJhZ1Bvc2l0aW9uJiZ0aGlzLl9kcmFnUmVmLnNldEZyZWVEcmFnUG9zaXRpb24odGhpcy5mcmVlRHJhZ1Bvc2l0aW9uKX0pfSl9bmdPbkNoYW5nZXMoYSl7Y29uc3QgZD1hLnJvb3RFbGVtZW50U2VsZWN0b3IsaD1hLmZyZWVEcmFnUG9zaXRpb247ZCYmIWQuZmlyc3RDaGFu'@;
put 'Z2UmJnRoaXMuX3VwZGF0ZVJvb3RFbGVtZW50KCksaCYmIWguZmlyc3RDaGFuZ2UmJnRoaXMuZnJlZURyYWdQb3NpdGlvbiYmdGhpcy5fZHJhZ1JlZi5zZXRGcmVlRHJhZ1Bvc2l0aW9uKHRoaXMuZnJlZURyYWdQb3NpdGlvbil9bmdPbkRlc3Ryb3koKXt0aGlzLmRyb3BDb250YWluZXImJnRo'@;
put 'aXMuZHJvcENvbnRhaW5lci5yZW1vdmVJdGVtKHRoaXMpO2NvbnN0IGE9Yy5fZHJhZ0luc3RhbmNlcy5pbmRleE9mKHRoaXMpO2E+LTEmJmMuX2RyYWdJbnN0YW5jZXMuc3BsaWNlKGEsMSksdGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57dGhpcy5faGFuZGxlcy5jb21wbGV0'@;
put 'ZSgpLHRoaXMuX2Rlc3Ryb3llZC5uZXh0KCksdGhpcy5fZGVzdHJveWVkLmNvbXBsZXRlKCksdGhpcy5fZHJhZ1JlZi5kaXNwb3NlKCl9KX1fYWRkSGFuZGxlKGEpe2NvbnN0IGQ9dGhpcy5faGFuZGxlcy5nZXRWYWx1ZSgpO2QucHVzaChhKSx0aGlzLl9oYW5kbGVzLm5leHQoZCl9X3JlbW92'@;
put 'ZUhhbmRsZShhKXtjb25zdCBkPXRoaXMuX2hhbmRsZXMuZ2V0VmFsdWUoKSxoPWQuaW5kZXhPZihhKTtoPi0xJiYoZC5zcGxpY2UoaCwxKSx0aGlzLl9oYW5kbGVzLm5leHQoZCkpfV9zZXRQcmV2aWV3VGVtcGxhdGUoYSl7dGhpcy5fcHJldmlld1RlbXBsYXRlPWF9X3Jlc2V0UHJldmlld1Rl'@;
put 'bXBsYXRlKGEpe2E9PT10aGlzLl9wcmV2aWV3VGVtcGxhdGUmJih0aGlzLl9wcmV2aWV3VGVtcGxhdGU9bnVsbCl9X3NldFBsYWNlaG9sZGVyVGVtcGxhdGUoYSl7dGhpcy5fcGxhY2Vob2xkZXJUZW1wbGF0ZT1hfV9yZXNldFBsYWNlaG9sZGVyVGVtcGxhdGUoYSl7YT09PXRoaXMuX3BsYWNl'@;
put 'aG9sZGVyVGVtcGxhdGUmJih0aGlzLl9wbGFjZWhvbGRlclRlbXBsYXRlPW51bGwpfV91cGRhdGVSb290RWxlbWVudCgpe2NvbnN0IGE9dGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQ7bGV0IGQ9YTt0aGlzLnJvb3RFbGVtZW50U2VsZWN0b3ImJihkPXZvaWQgMCE9PWEuY2xvc2VzdD9hLmNs'@;
put 'b3Nlc3QodGhpcy5yb290RWxlbWVudFNlbGVjdG9yKTphLnBhcmVudEVsZW1lbnQ/LmNsb3Nlc3QodGhpcy5yb290RWxlbWVudFNlbGVjdG9yKSksdGhpcy5fZHJhZ1JlZi53aXRoUm9vdEVsZW1lbnQoZHx8YSl9X2dldEJvdW5kYXJ5RWxlbWVudCgpe2NvbnN0IGE9dGhpcy5ib3VuZGFyeUVs'@;
put 'ZW1lbnQ7cmV0dXJuIGE/InN0cmluZyI9PXR5cGVvZiBhP3RoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LmNsb3Nlc3QoYSk6RWQoYSk6bnVsbH1fc3luY0lucHV0cyhhKXthLmJlZm9yZVN0YXJ0ZWQuc3Vic2NyaWJlKCgpPT57aWYoIWEuaXNEcmFnZ2luZygpKXtjb25zdCBkPXRoaXMuX2Rp'@;
put 'cixoPXRoaXMuZHJhZ1N0YXJ0RGVsYXksZj10aGlzLl9wbGFjZWhvbGRlclRlbXBsYXRlP3t0ZW1wbGF0ZTp0aGlzLl9wbGFjZWhvbGRlclRlbXBsYXRlLnRlbXBsYXRlUmVmLGNvbnRleHQ6dGhpcy5fcGxhY2Vob2xkZXJUZW1wbGF0ZS5kYXRhLHZpZXdDb250YWluZXI6dGhpcy5fdmlld0Nv'@;
put 'bnRhaW5lclJlZn06bnVsbCx2PXRoaXMuX3ByZXZpZXdUZW1wbGF0ZT97dGVtcGxhdGU6dGhpcy5fcHJldmlld1RlbXBsYXRlLnRlbXBsYXRlUmVmLGNvbnRleHQ6dGhpcy5fcHJldmlld1RlbXBsYXRlLmRhdGEsbWF0Y2hTaXplOnRoaXMuX3ByZXZpZXdUZW1wbGF0ZS5tYXRjaFNpemUsdmll'@;
put 'd0NvbnRhaW5lcjp0aGlzLl92aWV3Q29udGFpbmVyUmVmfTpudWxsO2EuZGlzYWJsZWQ9dGhpcy5kaXNhYmxlZCxhLmxvY2tBeGlzPXRoaXMubG9ja0F4aXMsYS5kcmFnU3RhcnREZWxheT0ib2JqZWN0Ij09dHlwZW9mIGgmJmg/aDpkNyhoKSxhLmNvbnN0cmFpblBvc2l0aW9uPXRoaXMuY29u'@;
put 'c3RyYWluUG9zaXRpb24sYS5wcmV2aWV3Q2xhc3M9dGhpcy5wcmV2aWV3Q2xhc3MsYS53aXRoQm91bmRhcnlFbGVtZW50KHRoaXMuX2dldEJvdW5kYXJ5RWxlbWVudCgpKS53aXRoUGxhY2Vob2xkZXJUZW1wbGF0ZShmKS53aXRoUHJldmlld1RlbXBsYXRlKHYpLndpdGhQcmV2aWV3Q29udGFp'@;
put 'bmVyKHRoaXMucHJldmlld0NvbnRhaW5lcnx8Imdsb2JhbCIpLGQmJmEud2l0aERpcmVjdGlvbihkLnZhbHVlKX19KSxhLmJlZm9yZVN0YXJ0ZWQucGlwZShZZigxKSkuc3Vic2NyaWJlKCgpPT57aWYodGhpcy5fcGFyZW50RHJhZylyZXR1cm4gdm9pZCBhLndpdGhQYXJlbnQodGhpcy5fcGFy'@;
put 'ZW50RHJhZy5fZHJhZ1JlZik7bGV0IGQ9dGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQucGFyZW50RWxlbWVudDtmb3IoO2Q7KXtpZihkLmNsYXNzTGlzdC5jb250YWlucygiY2RrLWRyYWciKSl7YS53aXRoUGFyZW50KGMuX2RyYWdJbnN0YW5jZXMuZmluZChoPT5oLmVsZW1lbnQubmF0aXZl'@;
put 'RWxlbWVudD09PWQpPy5fZHJhZ1JlZnx8bnVsbCk7YnJlYWt9ZD1kLnBhcmVudEVsZW1lbnR9fSl9X2hhbmRsZUV2ZW50cyhhKXthLnN0YXJ0ZWQuc3Vic2NyaWJlKGQ9Pnt0aGlzLnN0YXJ0ZWQuZW1pdCh7c291cmNlOnRoaXMsZXZlbnQ6ZC5ldmVudH0pLHRoaXMuX2NoYW5nZURldGVjdG9y'@;
put 'UmVmLm1hcmtGb3JDaGVjaygpfSksYS5yZWxlYXNlZC5zdWJzY3JpYmUoZD0+e3RoaXMucmVsZWFzZWQuZW1pdCh7c291cmNlOnRoaXMsZXZlbnQ6ZC5ldmVudH0pfSksYS5lbmRlZC5zdWJzY3JpYmUoZD0+e3RoaXMuZW5kZWQuZW1pdCh7c291cmNlOnRoaXMsZGlzdGFuY2U6ZC5kaXN0YW5j'@;
put 'ZSxkcm9wUG9pbnQ6ZC5kcm9wUG9pbnQsZXZlbnQ6ZC5ldmVudH0pLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpfSksYS5lbnRlcmVkLnN1YnNjcmliZShkPT57dGhpcy5lbnRlcmVkLmVtaXQoe2NvbnRhaW5lcjpkLmNvbnRhaW5lci5kYXRhLGl0ZW06dGhpcyxjdXJy'@;
put 'ZW50SW5kZXg6ZC5jdXJyZW50SW5kZXh9KX0pLGEuZXhpdGVkLnN1YnNjcmliZShkPT57dGhpcy5leGl0ZWQuZW1pdCh7Y29udGFpbmVyOmQuY29udGFpbmVyLmRhdGEsaXRlbTp0aGlzfSl9KSxhLmRyb3BwZWQuc3Vic2NyaWJlKGQ9Pnt0aGlzLmRyb3BwZWQuZW1pdCh7cHJldmlvdXNJbmRl'@;
put 'eDpkLnByZXZpb3VzSW5kZXgsY3VycmVudEluZGV4OmQuY3VycmVudEluZGV4LHByZXZpb3VzQ29udGFpbmVyOmQucHJldmlvdXNDb250YWluZXIuZGF0YSxjb250YWluZXI6ZC5jb250YWluZXIuZGF0YSxpc1BvaW50ZXJPdmVyQ29udGFpbmVyOmQuaXNQb2ludGVyT3ZlckNvbnRhaW5lcixp'@;
put 'dGVtOnRoaXMsZGlzdGFuY2U6ZC5kaXN0YW5jZSxkcm9wUG9pbnQ6ZC5kcm9wUG9pbnQsZXZlbnQ6ZC5ldmVudH0pfSl9X2Fzc2lnbkRlZmF1bHRzKGEpe2NvbnN0e2xvY2tBeGlzOmQsZHJhZ1N0YXJ0RGVsYXk6aCxjb25zdHJhaW5Qb3NpdGlvbjpmLHByZXZpZXdDbGFzczp2LGJvdW5kYXJ5'@;
put 'RWxlbWVudDpNLGRyYWdnaW5nRGlzYWJsZWQ6RCxyb290RWxlbWVudFNlbGVjdG9yOloscHJldmlld0NvbnRhaW5lcjpyZX09YTt0aGlzLmRpc2FibGVkPUQ/PyExLHRoaXMuZHJhZ1N0YXJ0RGVsYXk9aHx8MCxkJiYodGhpcy5sb2NrQXhpcz1kKSxmJiYodGhpcy5jb25zdHJhaW5Qb3NpdGlv'@;
put 'bj1mKSx2JiYodGhpcy5wcmV2aWV3Q2xhc3M9diksTSYmKHRoaXMuYm91bmRhcnlFbGVtZW50PU0pLFomJih0aGlzLnJvb3RFbGVtZW50U2VsZWN0b3I9WikscmUmJih0aGlzLnByZXZpZXdDb250YWluZXI9cmUpfV9zZXR1cEhhbmRsZXNMaXN0ZW5lcigpe3RoaXMuX2hhbmRsZXMucGlwZShH'@;
put 'dShhPT57Y29uc3QgZD1hLm1hcChoPT5oLmVsZW1lbnQpO3RoaXMuX3NlbGZIYW5kbGUmJnRoaXMucm9vdEVsZW1lbnRTZWxlY3RvciYmZC5wdXNoKHRoaXMuZWxlbWVudCksdGhpcy5fZHJhZ1JlZi53aXRoSGFuZGxlcyhkKX0pLFYxKGE9Pl94KC4uLmEubWFwKGQ9PmQuX3N0YXRlQ2hhbmdl'@;
put 'cy5waXBlKHgyKGQpKSkpKSxWMCh0aGlzLl9kZXN0cm95ZWQpKS5zdWJzY3JpYmUoYT0+e2NvbnN0IGQ9dGhpcy5fZHJhZ1JlZixoPWEuZWxlbWVudC5uYXRpdmVFbGVtZW50O2EuZGlzYWJsZWQ/ZC5kaXNhYmxlSGFuZGxlKGgpOmQuZW5hYmxlSGFuZGxlKGgpfSl9c3RhdGlje3RoaXMuXHUw'@;
put 'Mjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoR2UoSmkpLEdlKEVZLDEyKSxHZSh2cyksR2UoV2EpLEdlKERvKSxHZSh4WSw4KSxHZShwbSw4KSxHZShQTCksR2UoRXMpLEdlKG0xZSwxMCksR2Uoa3gsMTIpKX19c3RhdGlje3RoaXMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2Vs'@;
put 'ZWN0b3JzOltbIiIsImNka0RyYWciLCIiXV0saG9zdEF0dHJzOlsxLCJjZGstZHJhZyJdLGhvc3RWYXJzOjQsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGQsaCl7MiZkJiZUcigiY2RrLWRyYWctZGlzYWJsZWQiLGguZGlzYWJsZWQpKCJjZGstZHJhZy1kcmFnZ2luZyIsaC5fZHJhZ1JlZi5pc0Ry'@;
put 'YWdnaW5nKCkpfSxpbnB1dHM6e2RhdGE6W05uLk5vbmUsImNka0RyYWdEYXRhIiwiZGF0YSJdLGxvY2tBeGlzOltObi5Ob25lLCJjZGtEcmFnTG9ja0F4aXMiLCJsb2NrQXhpcyJdLHJvb3RFbGVtZW50U2VsZWN0b3I6W05uLk5vbmUsImNka0RyYWdSb290RWxlbWVudCIsInJvb3RFbGVtZW50'@;
put 'U2VsZWN0b3IiXSxib3VuZGFyeUVsZW1lbnQ6W05uLk5vbmUsImNka0RyYWdCb3VuZGFyeSIsImJvdW5kYXJ5RWxlbWVudCJdLGRyYWdTdGFydERlbGF5OltObi5Ob25lLCJjZGtEcmFnU3RhcnREZWxheSIsImRyYWdTdGFydERlbGF5Il0sZnJlZURyYWdQb3NpdGlvbjpbTm4uTm9uZSwiY2Rr'@;
put 'RHJhZ0ZyZWVEcmFnUG9zaXRpb24iLCJmcmVlRHJhZ1Bvc2l0aW9uIl0sZGlzYWJsZWQ6W05uLkhhc0RlY29yYXRvcklucHV0VHJhbnNmb3JtLCJjZGtEcmFnRGlzYWJsZWQiLCJkaXNhYmxlZCIsczFdLGNvbnN0cmFpblBvc2l0aW9uOltObi5Ob25lLCJjZGtEcmFnQ29uc3RyYWluUG9zaXRp'@;
put 'b24iLCJjb25zdHJhaW5Qb3NpdGlvbiJdLHByZXZpZXdDbGFzczpbTm4uTm9uZSwiY2RrRHJhZ1ByZXZpZXdDbGFzcyIsInByZXZpZXdDbGFzcyJdLHByZXZpZXdDb250YWluZXI6W05uLk5vbmUsImNka0RyYWdQcmV2aWV3Q29udGFpbmVyIiwicHJldmlld0NvbnRhaW5lciJdfSxvdXRwdXRz'@;
put 'OntzdGFydGVkOiJjZGtEcmFnU3RhcnRlZCIscmVsZWFzZWQ6ImNka0RyYWdSZWxlYXNlZCIsZW5kZWQ6ImNka0RyYWdFbmRlZCIsZW50ZXJlZDoiY2RrRHJhZ0VudGVyZWQiLGV4aXRlZDoiY2RrRHJhZ0V4aXRlZCIsZHJvcHBlZDoiY2RrRHJhZ0Ryb3BwZWQiLG1vdmVkOiJjZGtEcmFnTW92'@;
put 'ZWQifSxleHBvcnRBczpbImNka0RyYWciXSxzdGFuZGFsb25lOiEwLGZlYXR1cmVzOltkYShbe3Byb3ZpZGU6a3gsdXNlRXhpc3Rpbmc6Y31dKSxXbCx3bF19KX19cmV0dXJuIGN9KSgpO2NvbnN0IEFZPW5ldyBTdCgiQ2RrRHJvcExpc3RHcm91cCIpO2xldCBiMWU9KCgpPT57Y2xhc3MgY3tj'@;
put 'b25zdHJ1Y3Rvcigpe3RoaXMuX2l0ZW1zPW5ldyBTZXQsdGhpcy5kaXNhYmxlZD0hMX1uZ09uRGVzdHJveSgpe3RoaXMuX2l0ZW1zLmNsZWFyKCl9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NWRpcj1Fcih7dHlw'@;
put 'ZTpjLHNlbGVjdG9yczpbWyIiLCJjZGtEcm9wTGlzdEdyb3VwIiwiIl1dLGlucHV0czp7ZGlzYWJsZWQ6W05uLkhhc0RlY29yYXRvcklucHV0VHJhbnNmb3JtLCJjZGtEcm9wTGlzdEdyb3VwRGlzYWJsZWQiLCJkaXNhYmxlZCIsczFdfSxleHBvcnRBczpbImNka0Ryb3BMaXN0R3JvdXAiXSxz'@;
put 'dGFuZGFsb25lOiEwLGZlYXR1cmVzOltkYShbe3Byb3ZpZGU6QVksdXNlRXhpc3Rpbmc6Y31dKSxXbF19KX19cmV0dXJuIGN9KSgpLEdGZT0wLHkxZT0oKCk9PntjbGFzcyBje3N0YXRpY3t0aGlzLl9kcm9wTGlzdHM9W119Z2V0IGRpc2FibGVkKCl7cmV0dXJuIHRoaXMuX2Rpc2FibGVkfHwh'@;
put 'IXRoaXMuX2dyb3VwJiZ0aGlzLl9ncm91cC5kaXNhYmxlZH1zZXQgZGlzYWJsZWQoYSl7dGhpcy5fZHJvcExpc3RSZWYuZGlzYWJsZWQ9dGhpcy5fZGlzYWJsZWQ9YX1jb25zdHJ1Y3RvcihhLGQsaCxmLHYsTSxEKXt0aGlzLmVsZW1lbnQ9YSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZj1oLHRo'@;
put 'aXMuX3Njcm9sbERpc3BhdGNoZXI9Zix0aGlzLl9kaXI9dix0aGlzLl9ncm91cD1NLHRoaXMuX2Rlc3Ryb3llZD1uZXcgV24sdGhpcy5jb25uZWN0ZWRUbz1bXSx0aGlzLmlkPSJjZGstZHJvcC1saXN0LSIrR0ZlKyssdGhpcy5lbnRlclByZWRpY2F0ZT0oKT0+ITAsdGhpcy5zb3J0UHJlZGlj'@;
put 'YXRlPSgpPT4hMCx0aGlzLmRyb3BwZWQ9bmV3IEtyLHRoaXMuZW50ZXJlZD1uZXcgS3IsdGhpcy5leGl0ZWQ9bmV3IEtyLHRoaXMuc29ydGVkPW5ldyBLcix0aGlzLl91bnNvcnRlZEl0ZW1zPW5ldyBTZXQsdGhpcy5fZHJvcExpc3RSZWY9ZC5jcmVhdGVEcm9wTGlzdChhKSx0aGlzLl9kcm9w'@;
put 'TGlzdFJlZi5kYXRhPXRoaXMsRCYmdGhpcy5fYXNzaWduRGVmYXVsdHMoRCksdGhpcy5fZHJvcExpc3RSZWYuZW50ZXJQcmVkaWNhdGU9KFoscmUpPT50aGlzLmVudGVyUHJlZGljYXRlKFouZGF0YSxyZS5kYXRhKSx0aGlzLl9kcm9wTGlzdFJlZi5zb3J0UHJlZGljYXRlPShaLHJlLGNlKT0+'@;
put 'dGhpcy5zb3J0UHJlZGljYXRlKFoscmUuZGF0YSxjZS5kYXRhKSx0aGlzLl9zZXR1cElucHV0U3luY1N1YnNjcmlwdGlvbih0aGlzLl9kcm9wTGlzdFJlZiksdGhpcy5faGFuZGxlRXZlbnRzKHRoaXMuX2Ryb3BMaXN0UmVmKSxjLl9kcm9wTGlzdHMucHVzaCh0aGlzKSxNJiZNLl9pdGVtcy5h'@;
put 'ZGQodGhpcyl9YWRkSXRlbShhKXt0aGlzLl91bnNvcnRlZEl0ZW1zLmFkZChhKSx0aGlzLl9kcm9wTGlzdFJlZi5pc0RyYWdnaW5nKCkmJnRoaXMuX3N5bmNJdGVtc1dpdGhSZWYoKX1yZW1vdmVJdGVtKGEpe3RoaXMuX3Vuc29ydGVkSXRlbXMuZGVsZXRlKGEpLHRoaXMuX2Ryb3BMaXN0UmVm'@;
put 'LmlzRHJhZ2dpbmcoKSYmdGhpcy5fc3luY0l0ZW1zV2l0aFJlZigpfWdldFNvcnRlZEl0ZW1zKCl7cmV0dXJuIEFycmF5LmZyb20odGhpcy5fdW5zb3J0ZWRJdGVtcykuc29ydCgoYSxkKT0+YS5fZHJhZ1JlZi5nZXRWaXNpYmxlRWxlbWVudCgpLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKGQu'@;
put 'X2RyYWdSZWYuZ2V0VmlzaWJsZUVsZW1lbnQoKSkmTm9kZS5ET0NVTUVOVF9QT1NJVElPTl9GT0xMT1dJTkc/LTE6MSl9bmdPbkRlc3Ryb3koKXtjb25zdCBhPWMuX2Ryb3BMaXN0cy5pbmRleE9mKHRoaXMpO2E+LTEmJmMuX2Ryb3BMaXN0cy5zcGxpY2UoYSwxKSx0aGlzLl9ncm91cCYmdGhp'@;
put 'cy5fZ3JvdXAuX2l0ZW1zLmRlbGV0ZSh0aGlzKSx0aGlzLl91bnNvcnRlZEl0ZW1zLmNsZWFyKCksdGhpcy5fZHJvcExpc3RSZWYuZGlzcG9zZSgpLHRoaXMuX2Rlc3Ryb3llZC5uZXh0KCksdGhpcy5fZGVzdHJveWVkLmNvbXBsZXRlKCl9X3NldHVwSW5wdXRTeW5jU3Vic2NyaXB0aW9uKGEp'@;
put 'e3RoaXMuX2RpciYmdGhpcy5fZGlyLmNoYW5nZS5waXBlKHgyKHRoaXMuX2Rpci52YWx1ZSksVjAodGhpcy5fZGVzdHJveWVkKSkuc3Vic2NyaWJlKGQ9PmEud2l0aERpcmVjdGlvbihkKSksYS5iZWZvcmVTdGFydGVkLnN1YnNjcmliZSgoKT0+e2NvbnN0IGQ9ZnVuY3Rpb24gaUZlKGMpe3Jl'@;
put 'dHVybiBBcnJheS5pc0FycmF5KGMpP2M6W2NdfSh0aGlzLmNvbm5lY3RlZFRvKS5tYXAoaD0+InN0cmluZyI9PXR5cGVvZiBoP2MuX2Ryb3BMaXN0cy5maW5kKHY9PnYuaWQ9PT1oKTpoKTtpZih0aGlzLl9ncm91cCYmdGhpcy5fZ3JvdXAuX2l0ZW1zLmZvckVhY2goaD0+ey0xPT09ZC5pbmRl'@;
put 'eE9mKGgpJiZkLnB1c2goaCl9KSwhdGhpcy5fc2Nyb2xsYWJsZVBhcmVudHNSZXNvbHZlZCl7Y29uc3QgaD10aGlzLl9zY3JvbGxEaXNwYXRjaGVyLmdldEFuY2VzdG9yU2Nyb2xsQ29udGFpbmVycyh0aGlzLmVsZW1lbnQpLm1hcChmPT5mLmdldEVsZW1lbnRSZWYoKS5uYXRpdmVFbGVtZW50'@;
put 'KTt0aGlzLl9kcm9wTGlzdFJlZi53aXRoU2Nyb2xsYWJsZVBhcmVudHMoaCksdGhpcy5fc2Nyb2xsYWJsZVBhcmVudHNSZXNvbHZlZD0hMH1hLmRpc2FibGVkPXRoaXMuZGlzYWJsZWQsYS5sb2NrQXhpcz10aGlzLmxvY2tBeGlzLGEuc29ydGluZ0Rpc2FibGVkPXRoaXMuc29ydGluZ0Rpc2Fi'@;
put 'bGVkLGEuYXV0b1Njcm9sbERpc2FibGVkPXRoaXMuYXV0b1Njcm9sbERpc2FibGVkLGEuYXV0b1Njcm9sbFN0ZXA9ZDcodGhpcy5hdXRvU2Nyb2xsU3RlcCwyKSxhLmNvbm5lY3RlZFRvKGQuZmlsdGVyKGg9PmgmJmghPT10aGlzKS5tYXAoaD0+aC5fZHJvcExpc3RSZWYpKS53aXRoT3JpZW50'@;
put 'YXRpb24odGhpcy5vcmllbnRhdGlvbil9KX1faGFuZGxlRXZlbnRzKGEpe2EuYmVmb3JlU3RhcnRlZC5zdWJzY3JpYmUoKCk9Pnt0aGlzLl9zeW5jSXRlbXNXaXRoUmVmKCksdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCl9KSxhLmVudGVyZWQuc3Vic2NyaWJlKGQ9Pnt0'@;
put 'aGlzLmVudGVyZWQuZW1pdCh7Y29udGFpbmVyOnRoaXMsaXRlbTpkLml0ZW0uZGF0YSxjdXJyZW50SW5kZXg6ZC5jdXJyZW50SW5kZXh9KX0pLGEuZXhpdGVkLnN1YnNjcmliZShkPT57dGhpcy5leGl0ZWQuZW1pdCh7Y29udGFpbmVyOnRoaXMsaXRlbTpkLml0ZW0uZGF0YX0pLHRoaXMuX2No'@;
put 'YW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpfSksYS5zb3J0ZWQuc3Vic2NyaWJlKGQ9Pnt0aGlzLnNvcnRlZC5lbWl0KHtwcmV2aW91c0luZGV4OmQucHJldmlvdXNJbmRleCxjdXJyZW50SW5kZXg6ZC5jdXJyZW50SW5kZXgsY29udGFpbmVyOnRoaXMsaXRlbTpkLml0ZW0uZGF0YX0p'@;
put 'fSksYS5kcm9wcGVkLnN1YnNjcmliZShkPT57dGhpcy5kcm9wcGVkLmVtaXQoe3ByZXZpb3VzSW5kZXg6ZC5wcmV2aW91c0luZGV4LGN1cnJlbnRJbmRleDpkLmN1cnJlbnRJbmRleCxwcmV2aW91c0NvbnRhaW5lcjpkLnByZXZpb3VzQ29udGFpbmVyLmRhdGEsY29udGFpbmVyOmQuY29udGFp'@;
put 'bmVyLmRhdGEsaXRlbTpkLml0ZW0uZGF0YSxpc1BvaW50ZXJPdmVyQ29udGFpbmVyOmQuaXNQb2ludGVyT3ZlckNvbnRhaW5lcixkaXN0YW5jZTpkLmRpc3RhbmNlLGRyb3BQb2ludDpkLmRyb3BQb2ludCxldmVudDpkLmV2ZW50fSksdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNo'@;
put 'ZWNrKCl9KSxfeChhLnJlY2VpdmluZ1N0YXJ0ZWQsYS5yZWNlaXZpbmdTdG9wcGVkKS5zdWJzY3JpYmUoKCk9PnRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpKX1fYXNzaWduRGVmYXVsdHMoYSl7Y29uc3R7bG9ja0F4aXM6ZCxkcmFnZ2luZ0Rpc2FibGVkOmgsc29ydGlu'@;
put 'Z0Rpc2FibGVkOmYsbGlzdEF1dG9TY3JvbGxEaXNhYmxlZDp2LGxpc3RPcmllbnRhdGlvbjpNfT1hO3RoaXMuZGlzYWJsZWQ9aD8/ITEsdGhpcy5zb3J0aW5nRGlzYWJsZWQ9Zj8/ITEsdGhpcy5hdXRvU2Nyb2xsRGlzYWJsZWQ9dj8/ITEsdGhpcy5vcmllbnRhdGlvbj1NfHwidmVydGljYWwi'@;
put 'LGQmJih0aGlzLmxvY2tBeGlzPWQpfV9zeW5jSXRlbXNXaXRoUmVmKCl7dGhpcy5fZHJvcExpc3RSZWYud2l0aEl0ZW1zKHRoaXMuZ2V0U29ydGVkSXRlbXMoKS5tYXAoYT0+YS5fZHJhZ1JlZikpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKEdl'@;
put 'KEppKSxHZShQTCksR2UoRXMpLEdlKGt5KSxHZShwbSw4KSxHZShBWSwxMiksR2UoeFksOCkpfX1zdGF0aWN7dGhpcy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwiY2RrRHJvcExpc3QiLCIiXSxbImNkay1kcm9wLWxpc3QiXV0saG9zdEF0dHJzOlsxLCJjZGstZHJvcC1s'@;
put 'aXN0Il0saG9zdFZhcnM6Nyxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZCxoKXsyJmQmJihocigiaWQiLGguaWQpLFRyKCJjZGstZHJvcC1saXN0LWRpc2FibGVkIixoLmRpc2FibGVkKSgiY2RrLWRyb3AtbGlzdC1kcmFnZ2luZyIsaC5fZHJvcExpc3RSZWYuaXNEcmFnZ2luZygpKSgiY2RrLWRy'@;
put 'b3AtbGlzdC1yZWNlaXZpbmciLGguX2Ryb3BMaXN0UmVmLmlzUmVjZWl2aW5nKCkpKX0saW5wdXRzOntjb25uZWN0ZWRUbzpbTm4uTm9uZSwiY2RrRHJvcExpc3RDb25uZWN0ZWRUbyIsImNvbm5lY3RlZFRvIl0sZGF0YTpbTm4uTm9uZSwiY2RrRHJvcExpc3REYXRhIiwiZGF0YSJdLG9yaWVu'@;
put 'dGF0aW9uOltObi5Ob25lLCJjZGtEcm9wTGlzdE9yaWVudGF0aW9uIiwib3JpZW50YXRpb24iXSxpZDoiaWQiLGxvY2tBeGlzOltObi5Ob25lLCJjZGtEcm9wTGlzdExvY2tBeGlzIiwibG9ja0F4aXMiXSxkaXNhYmxlZDpbTm4uSGFzRGVjb3JhdG9ySW5wdXRUcmFuc2Zvcm0sImNka0Ryb3BM'@;
put 'aXN0RGlzYWJsZWQiLCJkaXNhYmxlZCIsczFdLHNvcnRpbmdEaXNhYmxlZDpbTm4uSGFzRGVjb3JhdG9ySW5wdXRUcmFuc2Zvcm0sImNka0Ryb3BMaXN0U29ydGluZ0Rpc2FibGVkIiwic29ydGluZ0Rpc2FibGVkIixzMV0sZW50ZXJQcmVkaWNhdGU6W05uLk5vbmUsImNka0Ryb3BMaXN0RW50'@;
put 'ZXJQcmVkaWNhdGUiLCJlbnRlclByZWRpY2F0ZSJdLHNvcnRQcmVkaWNhdGU6W05uLk5vbmUsImNka0Ryb3BMaXN0U29ydFByZWRpY2F0ZSIsInNvcnRQcmVkaWNhdGUiXSxhdXRvU2Nyb2xsRGlzYWJsZWQ6W05uLkhhc0RlY29yYXRvcklucHV0VHJhbnNmb3JtLCJjZGtEcm9wTGlzdEF1dG9T'@;
put 'Y3JvbGxEaXNhYmxlZCIsImF1dG9TY3JvbGxEaXNhYmxlZCIsczFdLGF1dG9TY3JvbGxTdGVwOltObi5Ob25lLCJjZGtEcm9wTGlzdEF1dG9TY3JvbGxTdGVwIiwiYXV0b1Njcm9sbFN0ZXAiXX0sb3V0cHV0czp7ZHJvcHBlZDoiY2RrRHJvcExpc3REcm9wcGVkIixlbnRlcmVkOiJjZGtEcm9w'@;
put 'TGlzdEVudGVyZWQiLGV4aXRlZDoiY2RrRHJvcExpc3RFeGl0ZWQiLHNvcnRlZDoiY2RrRHJvcExpc3RTb3J0ZWQifSxleHBvcnRBczpbImNka0Ryb3BMaXN0Il0sc3RhbmRhbG9uZTohMCxmZWF0dXJlczpbZGEoW3twcm92aWRlOkFZLHVzZVZhbHVlOnZvaWQgMH0se3Byb3ZpZGU6RVksdXNl'@;
put 'RXhpc3Rpbmc6Y31dKSxXbF19KX19cmV0dXJuIGN9KSgpLF8xZT0oKCk9PntjbGFzcyBje3N0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVtb2Q9a2koe3R5cGU6Y30pfXN0YXRpY3t0aGlzLlx1MDI3NWluaj1Bcih7'@;
put 'cHJvdmlkZXJzOltQTF0saW1wb3J0czpbSUZlXX0pfX1yZXR1cm4gY30pKCk7Y29uc3QgeW89WyIqIl0sWEZlPVtbWyJjbHItYWNjb3JkaW9uLXRpdGxlIl0sWyJjbHItc3RlcC10aXRsZSJdXSxbWyJjbHItYWNjb3JkaW9uLWRlc2NyaXB0aW9uIl0sWyJjbHItc3RlcC1kZXNjcmlwdGlvbiJd'@;
put 'XSwiKiJdLEpGZT1bImNsci1hY2NvcmRpb24tdGl0bGUsIGNsci1zdGVwLXRpdGxlIiwiY2xyLWFjY29yZGlvbi1kZXNjcmlwdGlvbiwgY2xyLXN0ZXAtZGVzY3JpcHRpb24iLCIqIl07ZnVuY3Rpb24gUUZlKGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiZGl2Iiw5KSxGdCgiQHRv'@;
put 'Z2dsZS5kb25lIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9UmUoKS4kaW1wbGljaXQ7cmV0dXJuIEN0KFJlKCkuY29sbGFwc2VQYW5lbE9uQW5pbWF0aW9uRG9uZShoKSl9KSxkZSgxLCJkaXYiLDEwKSxZcigyLDIpLGhlKCkoKX0yJmMmJk1lKCJAdG9nZ2xlIix2b2lkIDApfWZ1bmN0aW9u'@;
put 'IGVIZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO3NpKDApLGRlKDEsImRpdiIsMikoMiwiZGl2IiwzKSgzLCJidXR0b24iLDQsMCksZWwoNSwiYXN5bmMiKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KFJlKCkudG9nZ2xlUGFuZWwoKSl9KSxkZSg2LCJzcGFuIiw1'@;
put 'KSxHdCg3LCJjZHMtaWNvbiIsNiksaGUoKSxZcig4KSxZcig5LDEpLGhlKCkoKSxkZSgxMCwiZGl2Iiw3KSxndCgxMSxRRmUsMywxLCJkaXYiLDgpLGhlKCkoKSxsaSgpfWlmKDImYyl7bGV0IGE7Y29uc3QgZD1sLiRpbXBsaWNpdCxoPVJlKCk7ZmUoKSxNZSgibmdDbGFzcyIsaC5nZXRQYW5l'@;
put 'bFN0YXRlQ2xhc3NlcyhkKSksZmUoKSxocigicm9sZSIsaC5oZWFkaW5nRW5hYmxlZHx8aC5leHBsaWNpdEhlYWRpbmdMZXZlbD8iaGVhZGluZyI6bnVsbCkoImFyaWEtbGV2ZWwiLGguaGVhZGluZ0VuYWJsZWR8fGguZXhwbGljaXRIZWFkaW5nTGV2ZWw/aC5oZWFkaW5nTGV2ZWw6bnVsbCks'@;
put 'ZmUoKSxUcigiY2xyLWFjY29yZGlvbi1oZWFkZXItaGFzLWRlc2NyaXB0aW9uIiwobnVsbD09KGE9RGMoNSwxNCxoLmFjY29yZGlvbkRlc2NyaXB0aW9uLmNoYW5nZXMpKT9udWxsOmEubGVuZ3RoKXx8aC5hY2NvcmRpb25EZXNjcmlwdGlvbi5sZW5ndGgpLE1lKCJpZCIsaC5nZXRBY2NvcmRp'@;
put 'b25IZWFkZXJJZChkLnRlbXBsYXRlSWQpKSgiZGlzYWJsZWQiLGQuZGlzYWJsZWQpLGhyKCJhcmlhLWNvbnRyb2xzIiwhZC5kaXNhYmxlZCYmZC5vcGVuP2guZ2V0QWNjb3JkaW9uQ29udGVudElkKGQudGVtcGxhdGVJZCk6bnVsbCkoImFyaWEtZXhwYW5kZWQiLGQub3BlbiksZmUoNyksTWUo'@;
put 'IkBza2lwSW5pdGlhbFJlbmRlciIsdm9pZCAwKSgiaWQiLGguZ2V0QWNjb3JkaW9uQ29udGVudElkKGQudGVtcGxhdGVJZCkpLGhyKCJhcmlhLWhpZGRlbiIsIWQub3BlbikoImFyaWEtbGFiZWxsZWRieSIsaC5nZXRBY2NvcmRpb25IZWFkZXJJZChkLnRlbXBsYXRlSWQpKSxmZSgpLE1lKCJu'@;
put 'Z0lmIixkLm9wZW4pfX1jb25zdCBDSGU9WyJjbHJMb2FkaW5nIiwiIl07ZnVuY3Rpb24gU0hlKGMsbCl7MSZjJiYoc2koMCksR3QoMSwic3BhbiIsMyksbGkoKSksMiZjJiYoZmUoKSxNZSgiQHNwaW5uZXIiLHZvaWQgMCkpfWZ1bmN0aW9uIE1IZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1Mbigp'@;
put 'O3NpKDApLGRlKDEsInNwYW4iLDQpLEZ0KCJAdmFsaWRhdGVkLmRvbmUiLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1SZSgpO3JldHVybiBDdChoLmxvYWRpbmdTdGF0ZUNoYW5nZShoLmJ1dHRvblN0YXRlLkRFRkFVTFQpKX0pLGhlKCksbGkoKX0yJmMmJihmZSgpLE1lKCJAdmFsaWRhdGVk'@;
put 'Iix2b2lkIDApKX1mdW5jdGlvbiB4SGUoYyxsKXsxJmMmJihkZSgwLCJzcGFuIiw1KSxZcigxKSxoZSgpKSwyJmMmJk1lKCJAZGVmYXVsdEJ1dHRvbiIsdm9pZCAwKX1mdW5jdGlvbiBFSGUoYyxsKXtpZigxJmMmJihzaSgwKSxkZSgxLCJidXR0b24iLDEpLEd0KDIsImNkcy1pY29uIiwyKSxo'@;
put 'ZSgpLGxpKCkpLDImYyl7Y29uc3QgYT1SZSgpO2ZlKCksaHIoImFyaWEtbGFiZWwiLGEuc2lnbnBvc3RUcmlnZ2VyQXJpYUxhYmVsfHxhLmNvbW1vblN0cmluZ3Mua2V5cy5zaWducG9zdFRvZ2dsZSksZmUoKSxocigidGl0bGUiLGEuY29tbW9uU3RyaW5ncy5rZXlzLmluZm8pfX1jb25zdCBU'@;
put 'SGU9W1tbImNsci1zaWducG9zdC10aXRsZSJdXSwiKiJdLEFIZT1bImNsci1zaWducG9zdC10aXRsZSIsIioiXSxrSGU9W1tbIiIsImNsckNoZWNrYm94IiwiIl0sWyIiLCJjbHJUb2dnbGUiLCIiXV0sW1sibGFiZWwiXV1dLERIZT1bIltjbHJDaGVja2JveF0sW2NsclRvZ2dsZV0iLCJsYWJl'@;
put 'bCJdO2Z1bmN0aW9uIElIZShjLGwpezEmYyYmR3QoMCwibGFiZWwiKX1jb25zdCBSSGU9W1tbImxhYmVsIl1dLFtbImNsci1jaGVja2JveC13cmFwcGVyIl0sWyJjbHItdG9nZ2xlLXdyYXBwZXIiXV0sW1siY2xyLWNvbnRyb2wtaGVscGVyIl1dLFtbImNsci1jb250cm9sLWVycm9yIl1dLFtb'@;
put 'ImNsci1jb250cm9sLXN1Y2Nlc3MiXV1dLExIZT1bImxhYmVsIiwiY2xyLWNoZWNrYm94LXdyYXBwZXIsY2xyLXRvZ2dsZS13cmFwcGVyIiwiY2xyLWNvbnRyb2wtaGVscGVyIiwiY2xyLWNvbnRyb2wtZXJyb3IiLCJjbHItY29udHJvbC1zdWNjZXNzIl07ZnVuY3Rpb24gT0hlKGMsbCl7MSZj'@;
put 'JiZHdCgwLCJsYWJlbCIpfWZ1bmN0aW9uIFBIZShjLGwpezEmYyYmKGRlKDAsImRpdiIsMyksWXIoMSwyKSxoZSgpKX1mdW5jdGlvbiBGSGUoYyxsKXsxJmMmJkd0KDAsImNkcy1pY29uIiw2KX1mdW5jdGlvbiBISGUoYyxsKXsxJmMmJkd0KDAsImNkcy1pY29uIiw3KX1mdW5jdGlvbiBOSGUo'@;
put 'YyxsKXsxJmMmJllyKDAsMyxbIipuZ0lmIiwic2hvd0ludmFsaWQiXSl9ZnVuY3Rpb24gVkhlKGMsbCl7MSZjJiZZcigwLDQsWyIqbmdJZiIsInNob3dWYWxpZCJdKX1mdW5jdGlvbiBCSGUoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiLDMpLGd0KDEsRkhlLDEsMCwiY2RzLWljb24iLDQpKDIs'@;
put 'SEhlLDEsMCwiY2RzLWljb24iLDUpKDMsTkhlLDEsMCwibmctY29udGVudCIsMCkoNCxWSGUsMSwwLCJuZy1jb250ZW50IiwwKSxoZSgpKSwyJmMpe2NvbnN0IGE9UmUoKTtmZSgpLE1lKCJuZ0lmIixhLnNob3dJbnZhbGlkKSxmZSgpLE1lKCJuZ0lmIixhLnNob3dWYWxpZCksZmUoKSxNZSgi'@;
put 'bmdJZiIsYS5zaG93SW52YWxpZCksZmUoKSxNZSgibmdJZiIsYS5zaG93VmFsaWQpfX1jb25zdCBqSGU9WyJjbHJLZXlGb2N1cyIsIiJdLFlIZT1bW1sibGFiZWwiXV0sW1siIiwiY2xySW5wdXRQcmVmaXgiLCIiXV0sW1siIiwiY2xySW5wdXQiLCIiXV0sW1siIiwiY2xySW5wdXRTdWZmaXgi'@;
put 'LCIiXV0sW1siY2xyLWNvbnRyb2wtaGVscGVyIl1dLFtbImNsci1jb250cm9sLWVycm9yIl1dLFtbImNsci1jb250cm9sLXN1Y2Nlc3MiXV1dLEdIZT1bImxhYmVsIiwiW2NscklucHV0UHJlZml4XSIsIltjbHJJbnB1dF0iLCJbY2xySW5wdXRTdWZmaXhdIiwiY2xyLWNvbnRyb2wtaGVscGVy'@;
put 'IiwiY2xyLWNvbnRyb2wtZXJyb3IiLCJjbHItY29udHJvbC1zdWNjZXNzIl07ZnVuY3Rpb24gJEhlKGMsbCl7MSZjJiZHdCgwLCJsYWJlbCIpfWZ1bmN0aW9uIEtIZShjLGwpezEmYyYmR3QoMCwiY2RzLWljb24iLDYpfWZ1bmN0aW9uIHFIZShjLGwpezEmYyYmR3QoMCwiY2RzLWljb24iLDcp'@;
put 'fWZ1bmN0aW9uIFhIZShjLGwpezEmYyYmWXIoMCw0LFsiKm5nSWYiLCJzaG93SGVscGVyIl0pfWZ1bmN0aW9uIEpIZShjLGwpezEmYyYmWXIoMCw1LFsiKm5nSWYiLCJzaG93SW52YWxpZCJdKX1mdW5jdGlvbiBRSGUoYyxsKXsxJmMmJllyKDAsNixbIipuZ0lmIiwic2hvd1ZhbGlkIl0pfWZ1'@;
put 'bmN0aW9uIGxOZShjLGwpezEmYyYmWXIoMCl9Y29uc3QgY05lPVsidGFiQ29udGVudFByb2plY3RlZFJlZiJdO2Z1bmN0aW9uIHVOZShjLGwpe2lmKDEmYyYmKGRlKDAsInNlY3Rpb24iLDEpLFlyKDEpLGhlKCkpLDImYyl7Y29uc3QgYT1SZSgpO1RyKCJhY3RpdmUiLGEuYWN0aXZlKSxNZSgi'@;
put 'aWQiLGEudGFiQ29udGVudElkKSgiaGlkZGVuIiwhYS5hY3RpdmUpLGhyKCJhcmlhLWxhYmVsbGVkYnkiLGEuYXJpYUxhYmVsbGVkQnkpKCJhcmlhLWhpZGRlbiIsIWEuYWN0aXZlKX19Y29uc3QgZE5lPVsidGFiQ29udGVudFZpZXdDb250YWluZXIiXSxoTmU9W1tbImNsci10YWJzLWFjdGlv'@;
put 'bnMiXV1dLGZOZT1bImNsci10YWJzLWFjdGlvbnMiXTtmdW5jdGlvbiBwTmUoYyxsKXtpZigxJmMmJihzaSgwKSxkZSgxLCJsaSIsNSksRmwoMiw2KSxoZSgpLGxpKCkpLDImYyl7Y29uc3QgYT1SZSgpLiRpbXBsaWNpdDtmZSgyKSxNZSgibmdUZW1wbGF0ZU91dGxldCIsYS50ZW1wbGF0ZVJl'@;
put 'ZkNvbnRhaW5lci50ZW1wbGF0ZSl9fWZ1bmN0aW9uIGdOZShjLGwpe2lmKDEmYyYmKHNpKDApLGd0KDEscE5lLDMsMSwibmctY29udGFpbmVyIiw0KSxsaSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQsZD1SZSgpO2ZlKCksTWUoIm5nSWYiLGEudGFic0lkPT09ZC50YWJzSWQmJiFhLmlu'@;
put 'T3ZlcmZsb3cpfX1mdW5jdGlvbiBtTmUoYyxsKXsxJmMmJkZsKDAsNiksMiZjJiZNZSgibmdUZW1wbGF0ZU91dGxldCIsUmUoKS4kaW1wbGljaXQudGVtcGxhdGVSZWZDb250YWluZXIudGVtcGxhdGUpfWZ1bmN0aW9uIHZOZShjLGwpe2lmKDEmYyYmKHNpKDApLGd0KDEsbU5lLDEsMSwibmct'@;
put 'Y29udGFpbmVyIiwxMyksbGkoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0LGQ9UmUoMyk7ZmUoKSxNZSgibmdJZiIsYS50YWJzSWQ9PT1kLnRhYnNJZCYmYS5pbk92ZXJmbG93KX19ZnVuY3Rpb24gYk5lKGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiY2xyLXRhYi1vdmVyZmxv'@;
put 'dy1jb250ZW50IiwxMiksRnQoImtleWRvd24uZXNjYXBlIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChSZSgyKS5jbG9zZU9uRXNjYXBlS2V5KCkpfSwwLCQzKSgiY2xpY2siLGZ1bmN0aW9uKGgpe3d0KGEpLFJlKCk7Y29uc3QgZj1oYSg0KTtyZXR1cm4gQ3QoUmUoKS5jbG9zZU9uT3V0'@;
put 'c2lkZUNsaWNrKGgsZikpfSwhMSwkMykoImZvY3Vzb3V0IixmdW5jdGlvbihoKXtyZXR1cm4gd3QoYSksQ3QoUmUoMikuY2xvc2VPbkZvY3VzT3V0KGgpKX0pLGd0KDEsdk5lLDIsMSwibmctY29udGFpbmVyIiwzKSxoZSgpfWlmKDImYyl7Y29uc3QgYT1SZSgyKTtmZSgpLE1lKCJuZ0Zvck9m'@;
put 'IixhLnRhYkxpbmtEaXJlY3RpdmVzKX19ZnVuY3Rpb24geU5lKGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7c2koMCksZGUoMSwiZGl2Iiw3KSgyLCJsaSIsOCkoMywiYnV0dG9uIiw5LDEpLEZ0KCJtb3VzZWRvd24iLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KFJlKCkuX21vdXNlZG93'@;
put 'bj0hMCl9KSgiZm9jdXMiLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KFJlKCkub3Blbk92ZXJmbG93T25Gb2N1cygpKX0pKCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoUmUoKS50b2dnbGVPdmVyZmxvd09uQ2xpY2soKSl9KSxHdCg1LCJjZHMtaWNvbiIsMTApLGhlKCko'@;
put 'KSxndCg2LGJOZSwyLDEsImNsci10YWItb3ZlcmZsb3ctY29udGVudCIsMTEpLGhlKCksbGkoKX1pZigyJmMpe2NvbnN0IGE9UmUoKTtmZSgpLFRyKCJvcGVuIixhLnRvZ2dsZVNlcnZpY2Uub3BlbiksZmUoMiksVHIoImFjdGl2ZSIsYS5hY3RpdmVUYWJJbk92ZXJmbG93KSgib3BlbiIsYS50'@;
put 'b2dnbGVTZXJ2aWNlLm9wZW4pLGhyKCJ0YWJpbmRleCIsYS5hY3RpdmVUYWJJbk92ZXJmbG93JiYhYS50b2dnbGVTZXJ2aWNlLm9wZW4/MDotMSkoInRpdGxlIixhLmNvbW1vblN0cmluZ3Mua2V5cy5tb3JlKSxmZSgyKSxocigic3RhdHVzIixhLnRvZ2dsZVNlcnZpY2Uub3Blbj8iaW5mbyI6'@;
put 'bnVsbCkoInRpdGxlIixhLmNvbW1vblN0cmluZ3Mua2V5cy5tb3JlKSxmZSgpLE1lKCJuZ0lmIixhLnRvZ2dsZVNlcnZpY2Uub3Blbil9fWZ1bmN0aW9uIF9OZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImJ1dHRvbiIsMyksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3'@;
put 'dChhKSxDdChSZSgpLnRvZ2dsZUJ5QnV0dG9uKCkpfSksR3QoMSwiY2RzLWljb24iLDQpLGhlKCl9aWYoMiZjKXtjb25zdCBhPVJlKCk7VHIoIm9uLWNvbGxhcHNlIixhLmNvbGxhcHNlZCksaHIoImFyaWEtY29udHJvbHMiLGEuY29udGVudElkKSgiYXJpYS1leHBhbmRlZCIsYS5hcmlhRXhw'@;
put 'YW5kZWQpKCJhcmlhLWxhYmVsIixhLnRvZ2dsZUxhYmVsfHxhLmNvbW1vblN0cmluZ3Mua2V5cy52ZXJ0aWNhbE5hdlRvZ2dsZSksZmUoKSxocigiZGlyZWN0aW9uIixhLmNvbGxhcHNlZD8icmlnaHQiOiJsZWZ0Iil9fWZ1bmN0aW9uIHdOZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2Rl'@;
put 'KDAsImJ1dHRvbiIsNSksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChSZSgpLmNvbGxhcHNlZD0hMSl9KSxoZSgpfWlmKDImYyl7Y29uc3QgYT1SZSgpO2hyKCJhcmlhLWNvbnRyb2xzIixhLmNvbnRlbnRJZCkoImFyaWEtbGFiZWwiLGEudG9nZ2xlTGFiZWx8fGEuY29t'@;
put 'bW9uU3RyaW5ncy5rZXlzLnZlcnRpY2FsTmF2VG9nZ2xlKX19Y29uc3QgTU5lPVsiY2xyVmVydGljYWxOYXZMaW5rIiwiIl0seE5lPVtbWyIiLCJjbHJWZXJ0aWNhbE5hdkljb24iLCIiXV0sIioiXSxFTmU9WyJbY2xyVmVydGljYWxOYXZJY29uXSIsIioiXTtmdW5jdGlvbiBUTmUoYyxsKXtp'@;
put 'ZigxJmMmJihkZSgwLCJ0aCIsNCkoMSwic3BhbiIpLExlKDIpLGhlKCkoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O2ZlKCksaHIoImFyaWEtbGFiZWwiLGEuZGF5KSxmZSgpLHdyKGEubmFycm93KX19ZnVuY3Rpb24gQU5lKGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwidGQi'@;
put 'LDcpKDEsImNsci1kYXkiLDgpLEZ0KCJzZWxlY3REYXkiLGZ1bmN0aW9uKGgpe3JldHVybiB3dChhKSxDdChSZSgyKS5zZXRTZWxlY3RlZERheShoKSl9KSxoZSgpKCl9aWYoMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O2ZlKCksTWUoImNsckRheVZpZXciLGEpfX1mdW5jdGlvbiBrTmUoYyxs'@;
put 'KXtpZigxJmMmJihkZSgwLCJ0ciIsNSksZ3QoMSxBTmUsMiwxLCJ0ZCIsNiksaGUoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O2ZlKCksTWUoIm5nRm9yT2YiLGEpfX1mdW5jdGlvbiBETmUoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJidXR0b24iLDEwKSxGdCgiY2xpY2si'@;
put 'LGZ1bmN0aW9uKCl7Y29uc3QgaD13dChhKS5pbmRleDtyZXR1cm4gQ3QoUmUoKS5jaGFuZ2VNb250aChoKSl9KSgibW91c2VlbnRlciIsZnVuY3Rpb24oKXtjb25zdCBoPXd0KGEpLmluZGV4O3JldHVybiBDdChSZSgpLm9uSG92ZXIoaCkpfSksTGUoMSksaGUoKX1pZigyJmMpe2NvbnN0IGE9'@;
put 'bC4kaW1wbGljaXQsZD1sLmluZGV4LGg9UmUoKTtUcigiaXMtc2VsZWN0ZWQiLGguaXNTZWxlY3RlZChkKSkoImlzLXN0YXJ0LXJhbmdlIixoLmdldElzUmFuZ2VTdGFydE1vbnRoKGQpKSgiaXMtZW5kLXJhbmdlIixoLmdldElzUmFuZ2VFbmRNb250aChkKSkoImluLXJhbmdlIixoLmlzSW5S'@;
put 'YW5nZShkKSkoImlzLXRvZGF5IixoLmNhbGVuZGFyWWVhcj09PWguY3VycmVudENhbGVuZGFyWWVhciYmZD09PWguY3VycmVudENhbGVuZGFyTW9udGgpLGhyKCJ0YWJpbmRleCIsaC5nZXRUYWJJbmRleChkKSksZmUoKSxEcigiICIsYSwiICIpfX1mdW5jdGlvbiBJTmUoYyxsKXtpZigxJmMp'@;
put 'e2NvbnN0IGE9TG4oKTtkZSgwLCJidXR0b24iLDEwKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7Y29uc3QgaD13dChhKS4kaW1wbGljaXQ7cmV0dXJuIEN0KFJlKCkuY2hhbmdlWWVhcihoKSl9KSgibW91c2VlbnRlciIsZnVuY3Rpb24oKXtjb25zdCBoPXd0KGEpLiRpbXBsaWNpdDtyZXR1cm4g'@;
put 'Q3QoUmUoKS5vbkhvdmVyKGgpKX0pLExlKDEpLGhlKCl9aWYoMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0LGQ9UmUoKTtUcigiaXMtc2VsZWN0ZWQiLGE9PT1kLnNlbGVjdGVkU3RhcnRZZWFyfHxhPT09ZC5zZWxlY3RlZEVuZFllYXIpKCJpcy1zdGFydC1yYW5nZSIsZC5nZXRJc1JhbmdlU3Rh'@;
put 'cnRZZWFyKGEpKSgiaXMtZW5kLXJhbmdlIixkLmdldElzUmFuZ2VFbmRZZWFyKGEpKSgiaW4tcmFuZ2UiLGQuaXNJblJhbmdlKGEpKSgiaXMtdG9kYXkiLGQuaXNDdXJyZW50Q2FsZW5kYXJZZWFyKGEpKSxocigidGFiaW5kZXgiLGQuZ2V0VGFiSW5kZXgoYSkpLGZlKCksRHIoIiAiLGEsIiAi'@;
put 'KX19ZnVuY3Rpb24gUk5lKGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7c2koMCksZGUoMSwiYSIsNiksRnQoImtleXVwLmVudGVyIixmdW5jdGlvbigpe2NvbnN0IGg9d3QoYSkuJGltcGxpY2l0O3JldHVybiBDdChSZSgyKS5vblJhbmdlT3B0aW9uU2VsZWN0KGgpKX0pKCJjbGljayIsZnVu'@;
put 'Y3Rpb24oKXtjb25zdCBoPXd0KGEpLiRpbXBsaWNpdDtyZXR1cm4gQ3QoUmUoMikub25SYW5nZU9wdGlvblNlbGVjdChoKSl9KSxMZSgyKSxoZSgpLGxpKCl9aWYoMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O2ZlKCksaHIoImFyaWEtbGFiZWwiLG51bGw9PWE/bnVsbDphLmxhYmVsKSxmZSgp'@;
put 'LERyKCIgIixhLmxhYmVsLCIgIil9fWZ1bmN0aW9uIExOZShjLGwpezEmYyYmRmwoMCl9ZnVuY3Rpb24gT05lKGMsbCl7aWYoMSZjJiYoc2koMCksZGUoMSwiY2xyLXZlcnRpY2FsLW5hdiIsMiksZ3QoMixSTmUsMywyLCJuZy1jb250YWluZXIiLDMpLGhlKCksZGUoMywiZGl2Iiw0KSxndCg0'@;
put 'LExOZSwxLDAsIm5nLWNvbnRhaW5lciIsNSksaGUoKSxsaSgpKSwyJmMpe2NvbnN0IGE9UmUoKSxkPWhhKDIpO2ZlKDIpLE1lKCJuZ0Zvck9mIixhLmRhdGVSYW5nZU9wdGlvbnMpLGZlKDIpLE1lKCJuZ1RlbXBsYXRlT3V0bGV0IixkKX19ZnVuY3Rpb24gUE5lKGMsbCl7MSZjJiZHdCgwLCJj'@;
put 'bHItbW9udGhwaWNrZXIiKX1mdW5jdGlvbiBGTmUoYyxsKXsxJmMmJkd0KDAsImNsci15ZWFycGlja2VyIil9ZnVuY3Rpb24gSE5lKGMsbCl7MSZjJiZHdCgwLCJjbHItZGF5cGlja2VyIil9ZnVuY3Rpb24gTk5lKGMsbCl7MSZjJiZHdCgwLCJjbHItZGF0ZXBpY2tlci1hY3Rpb25zIil9ZnVu'@;
put 'Y3Rpb24gVk5lKGMsbCl7aWYoMSZjJiZndCgwLFBOZSwxLDAsImNsci1tb250aHBpY2tlciIsNykoMSxGTmUsMSwwLCJjbHIteWVhcnBpY2tlciIsNykoMixITmUsMSwwLCJjbHItZGF5cGlja2VyIiw3KSgzLE5OZSwxLDAsImNsci1kYXRlcGlja2VyLWFjdGlvbnMiLDcpLDImYyl7Y29uc3Qg'@;
put 'YT1SZSgpO01lKCJuZ0lmIixhLmlzTW9udGhWaWV3KSxmZSgpLE1lKCJuZ0lmIixhLmlzWWVhclZpZXcpLGZlKCksTWUoIm5nSWYiLGEuaXNEYXlWaWV3KSxmZSgpLE1lKCJuZ0lmIixhLmhhc0FjdGlvbkJ1dHRvbnMpfX1jb25zdCBCTmU9WyJhY3Rpb25CdXR0b24iXSxqTmU9W1tbImxhYmVs'@;
put 'Il1dLFtbIiIsImNsckRhdGUiLCIiXV0sW1siIiwiY2xyU3RhcnREYXRlIiwiIl1dLFtbIiIsImNsckVuZERhdGUiLCIiXV0sW1siY2xyLWNvbnRyb2wtaGVscGVyIl1dLFtbImNsci1jb250cm9sLWVycm9yIl1dLFtbImNsci1jb250cm9sLXN1Y2Nlc3MiXV1dLHpOZT1bImxhYmVsIiwiW2Ns'@;
put 'ckRhdGVdIiwiW2NsclN0YXJ0RGF0ZV0iLCJbY2xyRW5kRGF0ZV0iLCJjbHItY29udHJvbC1oZWxwZXIiLCJjbHItY29udHJvbC1lcnJvciIsImNsci1jb250cm9sLXN1Y2Nlc3MiXTtmdW5jdGlvbiBVTmUoYyxsKXsxJmMmJkd0KDAsImxhYmVsIil9ZnVuY3Rpb24gWk5lKGMsbCl7MSZjJiYo'@;
put 'c2koMCksWXIoMSwyKSxkZSgyLCJzcGFuIiw5KSxMZSgzLCItIiksaGUoKSxZcig0LDMpLGxpKCkpfWZ1bmN0aW9uIFdOZShjLGwpezEmYyYmKGRlKDAsImJ1dHRvbiIsMTAsMCksR3QoMiwiY2RzLWljb24iLDExKSxoZSgpKSwyJmMmJk1lKCJkaXNhYmxlZCIsUmUoKS5pc0lucHV0RGF0ZURp'@;
put 'c2FibGVkKX1mdW5jdGlvbiBZTmUoYyxsKXsxJmMmJkd0KDAsImNsci1kYXRlcGlja2VyLXZpZXctbWFuYWdlciIsMTIpfWZ1bmN0aW9uIEdOZShjLGwpezEmYyYmR3QoMCwiY2RzLWljb24iLDEzKX1mdW5jdGlvbiAkTmUoYyxsKXsxJmMmJkd0KDAsImNkcy1pY29uIiwxNCl9ZnVuY3Rpb24g'@;
put 'S05lKGMsbCl7MSZjJiZZcigwLDQsWyIqbmdJZiIsInNob3dIZWxwZXIiXSl9ZnVuY3Rpb24gcU5lKGMsbCl7MSZjJiZZcigwLDUsWyIqbmdJZiIsInNob3dJbnZhbGlkIl0pfWZ1bmN0aW9uIFhOZShjLGwpezEmYyYmWXIoMCw2LFsiKm5nSWYiLCJzaG93VmFsaWQiXSl9Y29uc3QgdFZlPVtb'@;
put 'WyJsYWJlbCJdXSxbWyIiLCJjbHJOdW1iZXJJbnB1dCIsIiJdXSxbWyJjbHItY29udHJvbC1oZWxwZXIiXV0sW1siY2xyLWNvbnRyb2wtZXJyb3IiXV0sW1siY2xyLWNvbnRyb2wtc3VjY2VzcyJdXV0sblZlPVsibGFiZWwiLCJbY2xyTnVtYmVySW5wdXRdIiwiY2xyLWNvbnRyb2wtaGVscGVy'@;
put 'IiwiY2xyLWNvbnRyb2wtZXJyb3IiLCJjbHItY29udHJvbC1zdWNjZXNzIl07ZnVuY3Rpb24gclZlKGMsbCl7MSZjJiZHdCgwLCJsYWJlbCIpfWZ1bmN0aW9uIGlWZShjLGwpezEmYyYmR3QoMCwiY2RzLWljb24iLDExKX1mdW5jdGlvbiBhVmUoYyxsKXsxJmMmJkd0KDAsImNkcy1pY29uIiwx'@;
put 'Mil9ZnVuY3Rpb24gb1ZlKGMsbCl7MSZjJiZZcigwLDIsWyIqbmdJZiIsInNob3dIZWxwZXIiXSl9ZnVuY3Rpb24gc1ZlKGMsbCl7MSZjJiZZcigwLDMsWyIqbmdJZiIsInNob3dJbnZhbGlkIl0pfWZ1bmN0aW9uIGxWZShjLGwpezEmYyYmWXIoMCw0LFsiKm5nSWYiLCJzaG93VmFsaWQiXSl9'@;
put 'Y29uc3QgY1ZlPVtbWyIiLCJjbHJSYWRpbyIsIiJdXSxbWyJsYWJlbCJdXV0sdVZlPVsiW2NsclJhZGlvXSIsImxhYmVsIl07ZnVuY3Rpb24gZFZlKGMsbCl7MSZjJiZHdCgwLCJsYWJlbCIpfWNvbnN0IGhWZT1bW1sibGFiZWwiXV0sW1siY2xyLXJhZGlvLXdyYXBwZXIiXV0sW1siY2xyLWNv'@;
put 'bnRyb2wtaGVscGVyIl1dLFtbImNsci1jb250cm9sLWVycm9yIl1dLFtbImNsci1jb250cm9sLXN1Y2Nlc3MiXV1dLGZWZT1bImxhYmVsIiwiY2xyLXJhZGlvLXdyYXBwZXIiLCJjbHItY29udHJvbC1oZWxwZXIiLCJjbHItY29udHJvbC1lcnJvciIsImNsci1jb250cm9sLXN1Y2Nlc3MiXTtm'@;
put 'dW5jdGlvbiBwVmUoYyxsKXsxJmMmJkd0KDAsImxhYmVsIil9ZnVuY3Rpb24gZ1ZlKGMsbCl7MSZjJiYoZGUoMCwiZGl2IiwzKSxZcigxLDIpLGhlKCkpfWZ1bmN0aW9uIG1WZShjLGwpezEmYyYmR3QoMCwiY2RzLWljb24iLDYpfWZ1bmN0aW9uIHZWZShjLGwpezEmYyYmR3QoMCwiY2RzLWlj'@;
put 'b24iLDcpfWZ1bmN0aW9uIGJWZShjLGwpezEmYyYmWXIoMCwzLFsiKm5nSWYiLCJzaG93SW52YWxpZCJdKX1mdW5jdGlvbiB5VmUoYyxsKXsxJmMmJllyKDAsNCxbIipuZ0lmIiwic2hvd1ZhbGlkIl0pfWZ1bmN0aW9uIF9WZShjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIsMyksZ3QoMSxtVmUs'@;
put 'MSwwLCJjZHMtaWNvbiIsNCkoMix2VmUsMSwwLCJjZHMtaWNvbiIsNSkoMyxiVmUsMSwwLCJuZy1jb250ZW50IiwwKSg0LHlWZSwxLDAsIm5nLWNvbnRlbnQiLDApLGhlKCkpLDImYyl7Y29uc3QgYT1SZSgpO2ZlKCksTWUoIm5nSWYiLGEuc2hvd0ludmFsaWQpLGZlKCksTWUoIm5nSWYiLGEu'@;
put 'c2hvd1ZhbGlkKSxmZSgpLE1lKCJuZ0lmIixhLnNob3dJbnZhbGlkKSxmZSgpLE1lKCJuZ0lmIixhLnNob3dWYWxpZCl9fWNvbnN0IHdWZT1bW1sibGFiZWwiXV0sW1siIiwiY2xyU2VsZWN0IiwiIl1dLFtbImNsci1jb250cm9sLWhlbHBlciJdXSxbWyJjbHItY29udHJvbC1lcnJvciJdXSxb'@;
put 'WyJjbHItY29udHJvbC1zdWNjZXNzIl1dXSxDVmU9WyJsYWJlbCIsIltjbHJTZWxlY3RdIiwiY2xyLWNvbnRyb2wtaGVscGVyIiwiY2xyLWNvbnRyb2wtZXJyb3IiLCJjbHItY29udHJvbC1zdWNjZXNzIl07ZnVuY3Rpb24gU1ZlKGMsbCl7MSZjJiZHdCgwLCJsYWJlbCIpfWZ1bmN0aW9uIE1W'@;
put 'ZShjLGwpezEmYyYmR3QoMCwiY2RzLWljb24iLDUpfWZ1bmN0aW9uIHhWZShjLGwpezEmYyYmR3QoMCwiY2RzLWljb24iLDYpfWZ1bmN0aW9uIEVWZShjLGwpezEmYyYmWXIoMCwyLFsiKm5nSWYiLCJzaG93SGVscGVyIl0pfWZ1bmN0aW9uIFRWZShjLGwpezEmYyYmWXIoMCwzLFsiKm5nSWYi'@;
put 'LCJzaG93SW52YWxpZCJdKX1mdW5jdGlvbiBBVmUoYyxsKXsxJmMmJllyKDAsNCxbIipuZ0lmIiwic2hvd1ZhbGlkIl0pfWNvbnN0IGtWZT1bW1sibGFiZWwiXV0sW1siIiwiY2xyVGV4dGFyZWEiLCIiXV0sW1siY2xyLWNvbnRyb2wtaGVscGVyIl1dLFtbImNsci1jb250cm9sLWVycm9yIl1d'@;
put 'LFtbImNsci1jb250cm9sLXN1Y2Nlc3MiXV1dLERWZT1bImxhYmVsIiwiW2NsclRleHRhcmVhXSIsImNsci1jb250cm9sLWhlbHBlciIsImNsci1jb250cm9sLWVycm9yIiwiY2xyLWNvbnRyb2wtc3VjY2VzcyJdO2Z1bmN0aW9uIElWZShjLGwpezEmYyYmR3QoMCwibGFiZWwiKX1mdW5jdGlv'@;
put 'biBSVmUoYyxsKXsxJmMmJkd0KDAsImNkcy1pY29uIiw1KX1mdW5jdGlvbiBMVmUoYyxsKXsxJmMmJkd0KDAsImNkcy1pY29uIiw2KX1mdW5jdGlvbiBPVmUoYyxsKXsxJmMmJllyKDAsMixbIipuZ0lmIiwic2hvd0hlbHBlciJdKX1mdW5jdGlvbiBQVmUoYyxsKXsxJmMmJllyKDAsMyxbIipu'@;
put 'Z0lmIiwic2hvd0ludmFsaWQiXSl9ZnVuY3Rpb24gRlZlKGMsbCl7MSZjJiZZcigwLDQsWyIqbmdJZiIsInNob3dWYWxpZCJdKX1jb25zdCBIVmU9WyJhbmNob3IiXTtmdW5jdGlvbiBOVmUoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiLDQpKDEsImRpdiIsNSkoMiwiYnV0dG9uIiw2KSxHdCgz'@;
put 'LCJjZHMtaWNvbiIsNyksaGUoKSgpLFlyKDQpLGhlKCkpLDImYyl7Y29uc3QgYT1SZSgpO01lKCJpZCIsYS5wb3BvdmVySWQpLGhyKCJhcmlhLWxhYmVsIixhLmNvbW1vblN0cmluZ3Mua2V5cy5kYXRhZ3JpZEZpbHRlckRpYWxvZ0FyaWFMYWJlbCksZmUoMyksaHIoInRpdGxlIixhLmNvbW1v'@;
put 'blN0cmluZ3Mua2V5cy5jbG9zZSl9fWNvbnN0IFZWZT1bImlucHV0X2xvdyJdLEJWZT1bImlucHV0Il0salZlPVsiY29sdW1uUG9ydGFsIl07ZnVuY3Rpb24gelZlKGMsbCl7MSZjJiZZcigwKX1jb25zdCBVVmU9WyJyZXNpemVUcmFja2VyIl0sWlZlPVsiY29sdW1uSGFuZGxlIl0sV1ZlPVtb'@;
put 'WyJjbHItZGctZmlsdGVyIl0sWyJjbHItZGctc3RyaW5nLWZpbHRlciJdLFsiY2xyLWRnLW51bWVyaWMtZmlsdGVyIl1dLCIqIl0sWVZlPVsiY2xyLWRnLWZpbHRlciwgY2xyLWRnLXN0cmluZy1maWx0ZXIsIGNsci1kZy1udW1lcmljLWZpbHRlciIsIioiXTtmdW5jdGlvbiBHVmUoYyxsKXsx'@;
put 'JmMmJkZsKDApfWZ1bmN0aW9uICRWZShjLGwpezEmYyYmR3QoMCwiY2RzLWljb24iLDEwKSwyJmMmJmhyKCJkaXJlY3Rpb24iLFJlKDIpLnNvcnREaXJlY3Rpb24pfWZ1bmN0aW9uIEtWZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImJ1dHRvbiIsNyksRnQoImNsaWNrIixmdW5j'@;
put 'dGlvbigpe3JldHVybiB3dChhKSxDdChSZSgpLnNvcnQoKSl9KSxndCgxLEdWZSwxLDAsIm5nLWNvbnRhaW5lciIsOCkoMiwkVmUsMSwxLCJjZHMtaWNvbiIsOSksaGUoKX1pZigyJmMpe2NvbnN0IGE9UmUoKSxkPWhhKDYpO2ZlKCksTWUoIm5nVGVtcGxhdGVPdXRsZXQiLGQpLGZlKCksTWUo'@;
put 'Im5nSWYiLGEuc29ydERpcmVjdGlvbil9fWZ1bmN0aW9uIHFWZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImNsci1kZy1zdHJpbmctZmlsdGVyIiwxMSksZ2koImNsckZpbHRlclZhbHVlQ2hhbmdlIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPVJlKCk7cmV0dXJuIG1pKGYu'@;
put 'ZmlsdGVyVmFsdWUsaCl8fChmLmZpbHRlclZhbHVlPWgpLEN0KGgpfSksaGUoKX1pZigyJmMpe2NvbnN0IGE9UmUoKTtNZSgiY2xyRmlsdGVyUGxhY2Vob2xkZXIiLGEuZmlsdGVyU3RyaW5nUGxhY2Vob2xkZXIpKCJjbHJEZ1N0cmluZ0ZpbHRlciIsYS5yZWdpc3RlcmVkKSxwaSgiY2xyRmls'@;
put 'dGVyVmFsdWUiLGEuZmlsdGVyVmFsdWUpfX1mdW5jdGlvbiBYVmUoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJjbHItZGctbnVtZXJpYy1maWx0ZXIiLDEyKSxnaSgiY2xyRmlsdGVyVmFsdWVDaGFuZ2UiLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9UmUoKTtyZXR1cm4gbWko'@;
put 'Zi5maWx0ZXJWYWx1ZSxoKXx8KGYuZmlsdGVyVmFsdWU9aCksQ3QoaCl9KSxoZSgpfWlmKDImYyl7Y29uc3QgYT1SZSgpO01lKCJjbHJGaWx0ZXJNYXhQbGFjZWhvbGRlciIsYS5maWx0ZXJOdW1iZXJNYXhQbGFjZWhvbGRlcikoImNsckZpbHRlck1pblBsYWNlaG9sZGVyIixhLmZpbHRlck51'@;
put 'bWJlck1pblBsYWNlaG9sZGVyKSgiY2xyRGdOdW1lcmljRmlsdGVyIixhLnJlZ2lzdGVyZWQpLHBpKCJjbHJGaWx0ZXJWYWx1ZSIsYS5maWx0ZXJWYWx1ZSl9fWZ1bmN0aW9uIEpWZShjLGwpezEmYyYmWXIoMCwxKX1mdW5jdGlvbiBRVmUoYyxsKXsxJmMmJkZsKDApfWZ1bmN0aW9uIGVCZShj'@;
put 'LGwpe2lmKDEmYyYmKGRlKDAsInNwYW4iLDEzKSxndCgxLFFWZSwxLDAsIm5nLWNvbnRhaW5lciIsOCksaGUoKSksMiZjKXtSZSgpO2NvbnN0IGE9aGEoNik7ZmUoKSxNZSgibmdUZW1wbGF0ZU91dGxldCIsYSl9fWZ1bmN0aW9uIHRCZShjLGwpezEmYyYmR3QoMCwiY2xyLWRnLWNvbHVtbi1z'@;
put 'ZXBhcmF0b3IiKX1mdW5jdGlvbiBuQmUoYyxsKXsxJmMmJkd0KDAsImRpdiIsNCl9ZnVuY3Rpb24gckJlKGMsbCl7MSZjJiZZcigwLDAsWyIqbmdJZiIsImVtcHR5RGF0YWdyaWQiXSl9Y29uc3QgaUJlPVsiY2VsbFBvcnRhbCJdO2Z1bmN0aW9uIGFCZShjLGwpezEmYyYmWXIoMCl9Y29uc3Qg'@;
put 'b0JlPVsicm93UG9ydGFsIl07ZnVuY3Rpb24gc0JlKGMsbCl7MSZjJiZZcigwKX1jb25zdCBsQmU9WyJkZXRhaWxCdXR0b24iXSxjQmU9WyJzdGlja3lDZWxscyJdLHVCZT1bInNjcm9sbGFibGVDZWxscyJdLGRCZT1bImNhbGN1bGF0ZWRDZWxscyJdLGhCZT1bW1siY2xyLWRnLXJvdy1kZXRh'@;
put 'aWwiXV0sW1siY2xyLWRnLWNlbGwiXV0sW1siY2xyLWRnLWFjdGlvbi1vdmVyZmxvdyJdXV0sZkJlPVsiY2xyLWRnLXJvdy1kZXRhaWwiLCJjbHItZGctY2VsbCIsImNsci1kZy1hY3Rpb24tb3ZlcmZsb3ciXSxwQmU9Yz0+KHsiaXMtcmVwbGFjZWQiOmN9KSx3MWU9Yz0+KHsiY2xyLWZvcm0t'@;
put 'Y29udHJvbC1kaXNhYmxlZCI6Y30pO2Z1bmN0aW9uIGdCZShjLGwpe31mdW5jdGlvbiBtQmUoYyxsKXtpZigxJmMmJihkZSgwLCJjbHItZXhwYW5kYWJsZS1hbmltYXRpb24iLDEwKSxndCgxLGdCZSwwLDAsIm5nLXRlbXBsYXRlIiwxMSksaGUoKSksMiZjKXtjb25zdCBhPVJlKDIpLGQ9aGEo'@;
put 'Nik7TWUoImNsckV4cGFuZFRyaWdnZXIiLGEuZXhwYW5kQW5pbWF0aW9uVHJpZ2dlciksZmUoKSxNZSgibmdUZW1wbGF0ZU91dGxldCIsZCl9fWZ1bmN0aW9uIHZCZShjLGwpe31mdW5jdGlvbiBiQmUoYyxsKXsxJmMmJmd0KDAsdkJlLDAsMCwibmctdGVtcGxhdGUiLDExKSwyJmMmJihSZSgy'@;
put 'KSxNZSgibmdUZW1wbGF0ZU91dGxldCIsaGEoNikpKX1mdW5jdGlvbiB5QmUoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJkaXYiLDkpLEZ0KCJtb3VzZWRvd24iLGZ1bmN0aW9uKGgpe3JldHVybiB3dChhKSxDdChSZSgpLmNsZWFyUmFuZ2VzKGgpKX0pKCJjbGljayIsZnVuY3Rp'@;
put 'b24oaCl7d3QoYSk7Y29uc3QgZj1SZSgpO3JldHVybiBDdChmLnNlbGVjdFJvdyghZi5zZWxlY3RlZCxoKSl9KSxndCgxLG1CZSwyLDIsImNsci1leHBhbmRhYmxlLWFuaW1hdGlvbiIsNykoMixiQmUsMSwxLG51bGwsOCksaGUoKX1pZigyJmMpe2NvbnN0IGE9UmUoKTtmZSgpLE1lKCJuZ0lm'@;
put 'IixhLmV4cGFuZC5leHBhbmRhYmxlKSxmZSgpLE1lKCJuZ0lmIiwhYS5leHBhbmQuZXhwYW5kYWJsZSl9fWZ1bmN0aW9uIF9CZShjLGwpe31mdW5jdGlvbiB3QmUoYyxsKXtpZigxJmMmJihkZSgwLCJjbHItZXhwYW5kYWJsZS1hbmltYXRpb24iLDEwKSxndCgxLF9CZSwwLDAsIm5nLXRlbXBs'@;
put 'YXRlIiwxMSksaGUoKSksMiZjKXtjb25zdCBhPVJlKCksZD1oYSg2KTtNZSgiY2xyRXhwYW5kVHJpZ2dlciIsYS5leHBhbmRBbmltYXRpb25UcmlnZ2VyKSxmZSgpLE1lKCJuZ1RlbXBsYXRlT3V0bGV0IixkKX19ZnVuY3Rpb24gQ0JlKGMsbCl7fWZ1bmN0aW9uIFNCZShjLGwpezEmYyYmZ3Qo'@;
put 'MCxDQmUsMCwwLCJuZy10ZW1wbGF0ZSIsMTEpLDImYyYmKFJlKCksTWUoIm5nVGVtcGxhdGVPdXRsZXQiLGhhKDYpKSl9ZnVuY3Rpb24gTUJlKGMsbCl7MSZjJiZZcigwKX1mdW5jdGlvbiB4QmUoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJkaXYiLDIxKSgxLCJkaXYiLDIyKSgy'@;
put 'LCJpbnB1dCIsMjMpLEZ0KCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXtyZXR1cm4gd3QoYSksQ3QoUmUoMikudG9nZ2xlKGgpKX0pLGhlKCksZGUoMywibGFiZWwiLDI0KSxGdCgiY2xpY2siLGZ1bmN0aW9uKGgpe3JldHVybiB3dChhKSxDdChSZSgyKS5jbGVhclJhbmdlcyhoKSl9KSxk'@;
put 'ZSg0LCJzcGFuIiwyNSksTGUoNSksaGUoKSgpKCkoKX1pZigyJmMpe2NvbnN0IGE9UmUoMik7TWUoIm5nQ2xhc3MiLHNwKDcsdzFlLCFhLmNsckRnU2VsZWN0YWJsZSkpLGZlKDIpLE1lKCJuZ01vZGVsIixhLnNlbGVjdGVkKSgiaWQiLGEuY2hlY2tib3hJZCkoImRpc2FibGVkIiwhYS5jbHJE'@;
put 'Z1NlbGVjdGFibGV8fG51bGwpLGhyKCJhcmlhLWRpc2FibGVkIiwhYS5jbHJEZ1NlbGVjdGFibGV8fG51bGwpLGZlKCksTWUoImZvciIsYS5jaGVja2JveElkKSxmZSgyKSx3cihhLmNsckRnUm93U2VsZWN0aW9uTGFiZWx8fGEuY29tbW9uU3RyaW5ncy5rZXlzLnNlbGVjdCl9fWZ1bmN0aW9u'@;
put 'IEVCZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImRpdiIsMjEpKDEsImNsci1yYWRpby13cmFwcGVyIikoMiwiaW5wdXQiLDI2KSxnaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1SZSgyKTtyZXR1cm4gbWkoZi5zZWxlY3Rpb24uY3VycmVudFNp'@;
put 'bmdsZSxoKXx8KGYuc2VsZWN0aW9uLmN1cnJlbnRTaW5nbGU9aCksQ3QoaCl9KSxoZSgpLGRlKDMsImxhYmVsIiwyNykoNCwic3BhbiIsMjUpLExlKDUpLGhlKCkoKSgpKCl9aWYoMiZjKXtjb25zdCBhPVJlKDIpO01lKCJuZ0NsYXNzIixzcCgxMCx3MWUsIWEuY2xyRGdTZWxlY3RhYmxlKSks'@;
put 'ZmUoMiksTWUoImlkIixhLnJhZGlvSWQpKCJuYW1lIixhLnNlbGVjdGlvbi5pZCsiLXJhZGlvIikoInZhbHVlIixhLml0ZW0pLHBpKCJuZ01vZGVsIixhLnNlbGVjdGlvbi5jdXJyZW50U2luZ2xlKSxNZSgiY2hlY2tlZCIsYS5zZWxlY3Rpb24uY3VycmVudFNpbmdsZT09PWEuaXRlbSkoImRp'@;
put 'c2FibGVkIiwhYS5jbHJEZ1NlbGVjdGFibGV8fG51bGwpLGhyKCJhcmlhLWRpc2FibGVkIiwhYS5jbHJEZ1NlbGVjdGFibGV8fG51bGwpLGZlKCksTWUoImZvciIsYS5yYWRpb0lkKSxmZSgyKSx3cihhLmNsckRnUm93U2VsZWN0aW9uTGFiZWx8fGEuY29tbW9uU3RyaW5ncy5rZXlzLnNlbGVj'@;
put 'dCl9fWZ1bmN0aW9uIFRCZShjLGwpezEmYyYmKGRlKDAsImRpdiIsMjgpLFlyKDEsMiksaGUoKSl9ZnVuY3Rpb24gQUJlKGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiYnV0dG9uIiwzMiksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChSZSg0KS50b2dnbGVF'@;
put 'eHBhbmQoKSl9KSxHdCgxLCJjZHMtaWNvbiIsMzMpLGhlKCl9aWYoMiZjKXtjb25zdCBhPVJlKDQpO2hyKCJhcmlhLWV4cGFuZGVkIixhLmV4cGFuZC5leHBhbmRlZCkoImFyaWEtbGFiZWwiLGEuZXhwYW5kLmV4cGFuZGVkP2EuY2xyRGdEZXRhaWxDbG9zZUxhYmVsOmEuY2xyRGdEZXRhaWxP'@;
put 'cGVuTGFiZWwpKCJhcmlhLWNvbnRyb2xzIixhLmV4cGFuZC5oYXNFeHBhbmRUZW1wbGF0ZSYmIWEuZXhwYW5kLmV4cGFuZGVkP251bGw6YS5leHBhbmRhYmxlSWQpLGZlKCksaHIoImRpcmVjdGlvbiIsYS5leHBhbmQuZXhwYW5kZWQ/ImRvd24iOiJyaWdodCIpKCJ0aXRsZSIsYS5leHBhbmQu'@;
put 'ZXhwYW5kZWQ/YS5jb21tb25TdHJpbmdzLmtleXMuY29sbGFwc2U6YS5jb21tb25TdHJpbmdzLmtleXMuZXhwYW5kKX19ZnVuY3Rpb24ga0JlKGMsbCl7aWYoMSZjJiYoZGUoMCwiY2xyLXNwaW5uZXIiLDM0KSxMZSgxKSxoZSgpKSwyJmMpe2NvbnN0IGE9UmUoNCk7ZmUoKSx3cihhLmNvbW1v'@;
put 'blN0cmluZ3Mua2V5cy5sb2FkaW5nKX19ZnVuY3Rpb24gREJlKGMsbCl7aWYoMSZjJiYoc2koMCksZ3QoMSxBQmUsMiw1LCJidXR0b24iLDMwKSgyLGtCZSwyLDEsImNsci1zcGlubmVyIiwzMSksbGkoKSksMiZjKXtjb25zdCBhPVJlKDMpO2ZlKCksTWUoIm5nSWYiLCFhLmV4cGFuZC5sb2Fk'@;
put 'aW5nKSxmZSgpLE1lKCJuZ0lmIixhLmV4cGFuZC5sb2FkaW5nKX19ZnVuY3Rpb24gSUJlKGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2IiwyOSksZ3QoMSxEQmUsMywyLCJuZy1jb250YWluZXIiLDgpLGhlKCkpLDImYyl7Y29uc3QgYT1SZSgyKTtmZSgpLE1lKCJuZ0lmIixhLmV4cGFuZC5leHBh'@;
put 'bmRhYmxlKX19ZnVuY3Rpb24gUkJlKGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiYnV0dG9uIiwzNyw1KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1oYSgxKSxmPVJlKDMpO3JldHVybiBDdChmLmRldGFpbFNlcnZpY2UudG9nZ2xlKGYuaXRlbSxoKSl9KSxH'@;
put 'dCgyLCJjZHMtaWNvbiIsMzgpLGhlKCl9aWYoMiZjKXtjb25zdCBhPVJlKDMpO1RyKCJpcy1vcGVuIixhLmRldGFpbFNlcnZpY2UuaXNSb3dPcGVuKGEuaXRlbSkpLE1lKCJkaXNhYmxlZCIsYS5kZXRhaWxEaXNhYmxlZCksaHIoImFyaWEtbGFiZWwiLGEuZGV0YWlsU2VydmljZS5pc1Jvd09w'@;
put 'ZW4oYS5pdGVtKT9hLmNsckRnRGV0YWlsQ2xvc2VMYWJlbDphLmNsckRnRGV0YWlsT3BlbkxhYmVsKSgiYXJpYS1leHBhbmRlZCIsYS5kZXRhaWxTZXJ2aWNlLmlzUm93T3BlbihhLml0ZW0pKSgiYXJpYS1jb250cm9scyIsYS5kZXRhaWxTZXJ2aWNlLmlkKSxmZSgyKSxocigiZGlyZWN0aW9u'@;
put 'IixhLmRldGFpbFNlcnZpY2UuaXNSb3dPcGVuKGEuaXRlbSk/ImxlZnQiOiJyaWdodCIpKCJ0aXRsZSIsYS5kZXRhaWxTZXJ2aWNlLmlzUm93T3BlbihhLml0ZW0pP2EuY29tbW9uU3RyaW5ncy5rZXlzLmNsb3NlOmEuY29tbW9uU3RyaW5ncy5rZXlzLm9wZW4pfX1mdW5jdGlvbiBMQmUoYyxs'@;
put 'KXtpZigxJmMmJihkZSgwLCJkaXYiLDM1KSxndCgxLFJCZSwzLDgsImJ1dHRvbiIsMzYpLGhlKCkpLDImYyl7Y29uc3QgYT1SZSgyKTtmZSgpLE1lKCJuZ0lmIiwhYS5kZXRhaWxIaWRkZW4pfX1mdW5jdGlvbiBPQmUoYyxsKXt9ZnVuY3Rpb24gUEJlKGMsbCl7MSZjJiZndCgwLE9CZSwwLDAs'@;
put 'Im5nLXRlbXBsYXRlIiwxMSksMiZjJiYoUmUoMiksTWUoIm5nVGVtcGxhdGVPdXRsZXQiLGhhKDQpKSl9ZnVuY3Rpb24gRkJlKGMsbCl7fWZ1bmN0aW9uIEhCZShjLGwpezEmYyYmZ3QoMCxGQmUsMCwwLCJuZy10ZW1wbGF0ZSIsMTEpLDImYyYmKFJlKDIpLE1lKCJuZ1RlbXBsYXRlT3V0bGV0'@;
put 'IixoYSg0KSkpfWZ1bmN0aW9uIE5CZShjLGwpezEmYyYmR3QoMCwiY2xyLWRnLWNlbGwiLDM5KX1mdW5jdGlvbiBWQmUoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiLDEyKSgxLCJkaXYiLDEzKSxzaSgyLG51bGwsMyksZ3QoNCx4QmUsNiw5LCJkaXYiLDE0KSg1LEVCZSw2LDEyLCJkaXYiLDE0'@;
put 'KSg2LFRCZSwyLDAsImRpdiIsMTUpKDcsSUJlLDIsMSwiZGl2IiwxNikoOCxMQmUsMiwxLCJkaXYiLDE3KSxsaSgpLGhlKCksZGUoOSwiZGl2IiwxOCkoMTAsImRpdiIsMTkpLFlyKDExLDEpLEZsKDEyLG51bGwsNCksaGUoKSxndCgxNCxQQmUsMSwxLG51bGwsOCkoMTUsSEJlLDEsMSxudWxs'@;
put 'LDgpLGhlKCksZ3QoMTYsTkJlLDEsMCwiY2xyLWRnLWNlbGwiLDIwKSxoZSgpKSwyJmMpe2NvbnN0IGE9UmUoKTtUcigiZGF0YWdyaWQtcm93LWRldGFpbC1vcGVuIixhLmRldGFpbFNlcnZpY2UuaXNSb3dPcGVuKGEuaXRlbSkpLE1lKCJpZCIsYS5pZCksZmUoNCksTWUoIm5nSWYiLGEuc2Vs'@;
put 'ZWN0aW9uLnNlbGVjdGlvblR5cGU9PT1hLlNFTEVDVElPTl9UWVBFLk11bHRpKSxmZSgpLE1lKCJuZ0lmIixhLnNlbGVjdGlvbi5zZWxlY3Rpb25UeXBlPT09YS5TRUxFQ1RJT05fVFlQRS5TaW5nbGUpLGZlKCksTWUoIm5nSWYiLGEucm93QWN0aW9uU2VydmljZS5oYXNBY3Rpb25hYmxlUm93'@;
put 'KSxmZSgpLE1lKCJuZ0lmIixhLmdsb2JhbEV4cGFuZGFibGUuaGFzRXhwYW5kYWJsZVJvdyksZmUoKSxNZSgibmdJZiIsYS5kZXRhaWxTZXJ2aWNlLmVuYWJsZWQpLGZlKCksTWUoIm5nQ2xhc3MiLHNwKDEyLHBCZSxhLnJlcGxhY2VkJiZhLmV4cGFuZGVkKSksZmUoNSksTWUoIm5nSWYiLGEu'@;
put 'cmVwbGFjZWQmJiFhLmV4cGFuZC5sb2FkaW5nKSxmZSgpLE1lKCJuZ0lmIiwhYS5yZXBsYWNlZCYmIWEuZXhwYW5kLmxvYWRpbmcpLGZlKCksTWUoIm5nSWYiLGEuc2tlbGV0b25Mb2FkaW5nKX19Y29uc3QgQkJlPVsiZGF0YWdyaWQiXSxqQmU9WyJkYXRhZ3JpZFRhYmxlIl0sekJlPVsic2Ny'@;
put 'b2xsYWJsZUNvbHVtbnMiXSxVQmU9WyJwcm9qZWN0ZWREaXNwbGF5Q29sdW1ucyJdLFpCZT1bInByb2plY3RlZENhbGN1bGF0aW9uQ29sdW1ucyJdLFdCZT1bImRpc3BsYXllZFJvd3MiXSxZQmU9WyJjYWxjdWxhdGlvblJvd3MiXSxHQmU9WyJzZWxlY3RBbGxDaGVja2JveCJdLCRCZT1bW1si'@;
put 'Y2xyLWRnLWFjdGlvbi1iYXIiXV0sW1siY2xyLWRnLXBsYWNlaG9sZGVyIl1dLFtbImNsci1kZy1mb290ZXIiXV0sW1siIiwiY2xySWZEZXRhaWwiLCIiXSxbImNsci1kZy1kZXRhaWwiXV1dLEtCZT1bImNsci1kZy1hY3Rpb24tYmFyIiwiY2xyLWRnLXBsYWNlaG9sZGVyIiwiY2xyLWRnLWZv'@;
put 'b3RlciIsIltjbHJJZkRldGFpbF0sY2xyLWRnLWRldGFpbCJdO2Z1bmN0aW9uIHFCZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImRpdiIsMzApKDEsImlucHV0IiwzMSw2KSxnaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1SZSgyKTtyZXR1cm4g'@;
put 'bWkoZi5hbGxTZWxlY3RlZCxoKXx8KGYuYWxsU2VsZWN0ZWQ9aCksQ3QoaCl9KSxoZSgpLGRlKDMsImxhYmVsIiwzMikoNCwic3BhbiIsMzMpLExlKDUpLGhlKCkoKSgpfWlmKDImYyl7Y29uc3QgYT1SZSgyKTtmZSgpLE1lKCJpZCIsYS5zZWxlY3RBbGxJZCkscGkoIm5nTW9kZWwiLGEuYWxs'@;
put 'U2VsZWN0ZWQpLGhyKCJhcmlhLWxhYmVsIixhLmNvbW1vblN0cmluZ3Mua2V5cy5zZWxlY3RBbGwpLGZlKDIpLE1lKCJmb3IiLGEuc2VsZWN0QWxsSWQpLGZlKDIpLHdyKGEuY29tbW9uU3RyaW5ncy5rZXlzLnNlbGVjdEFsbCl9fWZ1bmN0aW9uIFhCZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1M'@;
put 'bigpO2RlKDAsImRpdiIsMjcpLEZ0KCJrZXlkb3duLnNwYWNlIixmdW5jdGlvbihoKXtyZXR1cm4gd3QoYSksQ3QoUmUoKS50b2dnbGVBbGxTZWxlY3RlZChoKSl9KSxndCgxLHFCZSw2LDUsImRpdiIsMjgpLEd0KDIsImRpdiIsMjkpLGhlKCl9aWYoMiZjKXtjb25zdCBhPVJlKCk7ZmUoKSxN'@;
put 'ZSgibmdJZiIsIWEudmlydHVhbFNjcm9sbHx8YS5jdXN0b21TZWxlY3RBbGxFbmFibGVkKX19ZnVuY3Rpb24gSkJlKGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2IiwzNCkoMSwiZGl2IiwzMyksTGUoMiksaGUoKSxHdCgzLCJkaXYiLDI5KSxoZSgpKSwyJmMpe2NvbnN0IGE9UmUoKTtmZSgyKSx3'@;
put 'cihhLmNsckRnU2luZ2xlU2VsZWN0aW9uQXJpYUxhYmVsKX19ZnVuY3Rpb24gUUJlKGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2IiwzNSkoMSwiZGl2IiwzMyksTGUoMiksaGUoKSxHdCgzLCJkaXYiLDI5KSxoZSgpKSwyJmMpe2NvbnN0IGE9UmUoKTtmZSgyKSx3cihhLmNsckRnU2luZ2xlQWN0'@;
put 'aW9uYWJsZUFyaWFMYWJlbCl9fWZ1bmN0aW9uIGVqZShjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIsMzYpKDEsImRpdiIsMzMpLExlKDIpLGhlKCksR3QoMywiZGl2IiwyOSksaGUoKSksMiZjKXtjb25zdCBhPVJlKCk7ZmUoMiksd3IoYS5jbHJEZXRhaWxFeHBhbmRhYmxlQXJpYUxhYmVsKX19'@;
put 'ZnVuY3Rpb24gdGplKGMsbCl7aWYoMSZjJiYoZGUoMCwiY2xyLWRnLXJvdyIsMzcpKDEsImNsci1kZy1jZWxsIiksR3QoMiwiY2xyLXNwaW5uZXIiLDM4KSxkZSgzLCJzcGFuIiksTGUoNCksaGUoKSgpKCkpLDImYyl7Y29uc3QgYT1SZSgpO2ZlKDQpLHdyKGEuY29tbW9uU3RyaW5ncy5rZXlz'@;
put 'LmxvYWRpbmcpfX1mdW5jdGlvbiBuamUoYyxsKXtpZigxJmMmJihkZSgwLCJjbHItZGctcm93IiwzNykoMSwiY2xyLWRnLWNlbGwiKSxHdCgyLCJjbHItc3Bpbm5lciIsMzgpLGRlKDMsInNwYW4iKSxMZSg0KSxoZSgpKCkoKSksMiZjKXtjb25zdCBhPVJlKCk7ZmUoNCksd3IoYS5jb21tb25T'@;
put 'dHJpbmdzLmtleXMubG9hZGluZyl9fWZ1bmN0aW9uIHJqZShjLGwpezEmYyYmR3QoMCwiY2xyLWRnLXBsYWNlaG9sZGVyIil9ZnVuY3Rpb24gaWplKGMsbCl7MSZjJiYoZGUoMCwiZGl2IiwzOSkoMSwiY2xyLXNwaW5uZXIiLDM4KSxMZSgyLCJMb2FkaW5nIiksaGUoKSgpKX1jb25zdCBvamU9'@;
put 'WyJhbGxTZWxlY3RlZCJdO2Z1bmN0aW9uIHNqZShjLGwpe31mdW5jdGlvbiBsamUoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJsaSIpKDEsImNsci1jaGVja2JveC13cmFwcGVyIikoMiwiaW5wdXQiLDEzKSxGdCgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7Y29uc3QgZj13'@;
put 'dChhKS4kaW1wbGljaXQ7cmV0dXJuIEN0KFJlKDIpLnRvZ2dsZUNvbHVtblN0YXRlKGYsIWgpKX0pLGhlKCksZGUoMywibGFiZWwiKSxndCg0LHNqZSwwLDAsIm5nLXRlbXBsYXRlIiwxNCksaGUoKSgpKCl9aWYoMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0LGQ9UmUoMik7ZmUoMiksTWUoImRp'@;
put 'c2FibGVkIixkLmhhc09ubHlPbmVWaXNpYmxlQ29sdW1uJiYhYS5oaWRkZW4pKCJuZ01vZGVsIiwhYS5oaWRkZW4pLGZlKDIpLE1lKCJuZ1RlbXBsYXRlT3V0bGV0IixhLnRpdGxlVGVtcGxhdGVSZWYpfX1mdW5jdGlvbiBjamUoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJkaXYi'@;
put 'LDMpKDEsImRpdiIsNCkoMiwiZGl2Iiw1LDApLExlKDQpLGhlKCksZGUoNSwiaDIiKSxMZSg2KSxoZSgpLGRlKDcsImJ1dHRvbiIsNiksR3QoOCwiY2RzLWljb24iLDcpLGRlKDksInNwYW4iLDgpLExlKDEwKSxoZSgpKCkoKSxkZSgxMSwidWwiLDkpLGd0KDEyLGxqZSw1LDMsImxpIiwxMCks'@;
put 'aGUoKSxkZSgxMywiZGl2IiwxMSkoMTQsImNsci1kZy1jb2x1bW4tdG9nZ2xlLWJ1dHRvbiIsMTIpLEZ0KCJjbHJBbGxTZWxlY3RlZCIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoUmUoKS5hbGxDb2x1bW5zU2VsZWN0ZWQoKSl9KSxoZSgpKCkoKX1pZigyJmMpe2NvbnN0IGE9UmUoKTtN'@;
put 'ZSgiaWQiLGEucG9wb3ZlcklkKSxocigiYXJpYS1sYWJlbCIsYS5jb21tb25TdHJpbmdzLmtleXMuc2hvd0NvbHVtbnNNZW51RGVzY3JpcHRpb24pLGZlKDQpLHdyKGEuY29tbW9uU3RyaW5ncy5rZXlzLmFsbENvbHVtbnNTZWxlY3RlZCksZmUoMiksd3IoYS5jb21tb25TdHJpbmdzLmtleXMu'@;
put 'c2hvd0NvbHVtbnMpLGZlKCksaHIoImFyaWEtbGFiZWwiLGEuY29tbW9uU3RyaW5ncy5rZXlzLmNsb3NlKSxmZSgpLGhyKCJ0aXRsZSIsYS5jb21tb25TdHJpbmdzLmtleXMuY2xvc2UpLGZlKDIpLHdyKGEuY29tbW9uU3RyaW5ncy5rZXlzLmNsb3NlKSxmZSgyKSxNZSgibmdGb3JPZiIsYS5o'@;
put 'aWRlYWJsZUNvbHVtblN0YXRlcykoIm5nRm9yVHJhY2tCeSIsYS50cmFja0J5Rm4pfX1jb25zdCBDMWU9WyJ0aXRsZSJdLGRqZT1bW1siY2xyLWRnLXBhZ2luYXRpb24iXV0sIioiXSxoamU9WyJjbHItZGctcGFnaW5hdGlvbiIsIioiXTtmdW5jdGlvbiBmamUoYyxsKXtpZigxJmMmJihzaSgw'@;
put 'KSxkZSgxLCJkaXYiLDEpKDIsImNsci1jaGVja2JveC13cmFwcGVyIiwyKSxHdCgzLCJpbnB1dCIsMyksZGUoNCwibGFiZWwiKSxMZSg1KSxoZSgpLGRlKDYsInNwYW4iLDQpLExlKDcpLGhlKCkoKSgpLGxpKCkpLDImYyl7Y29uc3QgYT1SZSgpO2ZlKDUpLHdyKGEuc2VsZWN0aW9uLmN1cnJl'@;
put 'bnQubGVuZ3RoKSxmZSgyKSx3cihhLmNvbW1vblN0cmluZ3Mua2V5cy5zZWxlY3RlZFJvd3MpfX1mdW5jdGlvbiBwamUoYyxsKXsxJmMmJkd0KDAsImNsci1kZy1jb2x1bW4tdG9nZ2xlIil9ZnVuY3Rpb24gZ2plKGMsbCl7aWYoMSZjJiYoc2koMCksZ3QoMSxwamUsMSwwLCJjbHItZGctY29s'@;
put 'dW1uLXRvZ2dsZSIsMCksZGUoMiwiZGl2Iiw1KSxZcigzLDEpLGhlKCksbGkoKSksMiZjKXtjb25zdCBhPVJlKCk7ZmUoKSxNZSgibmdJZiIsYS5oYXNIaWRlYWJsZUNvbHVtbnMpfX1mdW5jdGlvbiBtamUoYyxsKXtpZigxJmMmJihkZSgwLCJvcHRpb24iLDQpLExlKDEpLGhlKCkpLDImYyl7'@;
put 'Y29uc3QgYT1sLiRpbXBsaWNpdDtNZSgibmdWYWx1ZSIsYSksZmUoKSx3cihhKX19Y29uc3QgdmplPVsiY3VycmVudFBhZ2VJbnB1dCJdLGJqZT1bIioiLFtbImNsci1kZy1wYWdlLXNpemUiXV1dLHlqZT1bIioiLCJjbHItZGctcGFnZS1zaXplIl07ZnVuY3Rpb24gX2plKGMsbCl7MSZjJiYo'@;
put 'ZGUoMCwiZGl2Iiw2KSxZcigxLDEpLGhlKCkpfWZ1bmN0aW9uIHdqZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImlucHV0IiwxOCwxKSxGdCgia2V5ZG93bi5lbnRlciIsZnVuY3Rpb24oaCl7cmV0dXJuIHd0KGEpLEN0KFJlKDMpLnVwZGF0ZUN1cnJlbnRQYWdlKGgpKX0pKCJi'@;
put 'bHVyIixmdW5jdGlvbihoKXtyZXR1cm4gd3QoYSksQ3QoUmUoMykudmVyaWZ5Q3VycmVudFBhZ2UoaCkpfSksaGUoKX1pZigyJmMpe2NvbnN0IGE9UmUoMyk7TWUoInNpemUiLGEucGFnZS5sYXN0LnRvU3RyaW5nKCkubGVuZ3RoKSgidmFsdWUiLGEucGFnZS5jdXJyZW50KSxocigiYXJpYS1s'@;
put 'YWJlbCIsYS5jb21tb25TdHJpbmdzLmtleXMuY3VycmVudFBhZ2UpfX1mdW5jdGlvbiBDamUoYyxsKXtpZigxJmMmJihkZSgwLCJzcGFuIiksTGUoMSksaGUoKSksMiZjKXtjb25zdCBhPVJlKDMpO2ZlKCksd3IoYS5wYWdlLmN1cnJlbnQpfX1mdW5jdGlvbiBTamUoYyxsKXtpZigxJmMpe2Nv'@;
put 'bnN0IGE9TG4oKTtkZSgwLCJkaXYiLDcpKDEsImJ1dHRvbiIsOCksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChSZSgyKS5wYWdlLmN1cnJlbnQ9MSl9KSxkZSgyLCJzcGFuIiw5KSxMZSgzKSxoZSgpLEd0KDQsImNkcy1pY29uIiwxMCksaGUoKSxkZSg1LCJidXR0b24i'@;
put 'LDExKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1SZSgyKTtyZXR1cm4gQ3QoaC5wYWdlLmN1cnJlbnQ9aC5wYWdlLmN1cnJlbnQtMSl9KSxkZSg2LCJzcGFuIiw5KSxMZSg3KSxoZSgpLEd0KDgsImNkcy1pY29uIiwxMiksaGUoKSxndCg5LHdqZSwyLDMsImlucHV0Iiwx'@;
put 'MykoMTAsQ2plLDIsMSwibmctdGVtcGxhdGUiLG51bGwsMCxJYyksTGUoMTIsIiBceGEwL1x4YTAiKSxkZSgxMywic3BhbiIpLExlKDE0KSxoZSgpLGRlKDE1LCJidXR0b24iLDE0KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1SZSgyKTtyZXR1cm4gQ3QoaC5wYWdlLmN1'@;
put 'cnJlbnQ9aC5wYWdlLmN1cnJlbnQrMSl9KSxkZSgxNiwic3BhbiIsOSksTGUoMTcpLGhlKCksR3QoMTgsImNkcy1pY29uIiwxNSksaGUoKSxkZSgxOSwiYnV0dG9uIiwxNiksRnQoImNsaWNrIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9UmUoMik7cmV0dXJuIEN0KGgucGFnZS5jdXJyZW50'@;
put 'PWgucGFnZS5sYXN0KX0pLGRlKDIwLCJzcGFuIiw5KSxMZSgyMSksaGUoKSxHdCgyMiwiY2RzLWljb24iLDE3KSxoZSgpKCl9aWYoMiZjKXtjb25zdCBhPWhhKDExKSxkPVJlKDIpO2ZlKCksTWUoImRpc2FibGVkIixkLnBhZ2UuY3VycmVudDw9MSksaHIoImFyaWEtbGFiZWwiLGQuY29tbW9u'@;
put 'U3RyaW5ncy5rZXlzLmZpcnN0UGFnZSksZmUoMiksd3IoZC5jb21tb25TdHJpbmdzLmtleXMuZmlyc3RQYWdlKSxmZSgyKSxNZSgiZGlzYWJsZWQiLGQucGFnZS5jdXJyZW50PD0xKSxocigiYXJpYS1sYWJlbCIsZC5jb21tb25TdHJpbmdzLmtleXMucHJldmlvdXNQYWdlKSxmZSgyKSx3cihk'@;
put 'LmNvbW1vblN0cmluZ3Mua2V5cy5wcmV2aW91c1BhZ2UpLGZlKDIpLE1lKCJuZ0lmIiwhZC5kaXNhYmxlQ3VycmVudFBhZ2VJbnB1dCkoIm5nSWZFbHNlIixhKSxmZSg0KSxocigiYXJpYS1sYWJlbCIsZC5jb21tb25TdHJpbmdzLmtleXMudG90YWxQYWdlcyksZmUoKSx3cihkLnBhZ2UubGFz'@;
put 'dCksZmUoKSxNZSgiZGlzYWJsZWQiLGQucGFnZS5jdXJyZW50Pj1kLnBhZ2UubGFzdCksaHIoImFyaWEtbGFiZWwiLGQuY29tbW9uU3RyaW5ncy5rZXlzLm5leHRQYWdlKSxmZSgyKSx3cihkLmNvbW1vblN0cmluZ3Mua2V5cy5uZXh0UGFnZSksZmUoMiksTWUoImRpc2FibGVkIixkLnBhZ2Uu'@;
put 'Y3VycmVudD49ZC5wYWdlLmxhc3QpLGhyKCJhcmlhLWxhYmVsIixkLmNvbW1vblN0cmluZ3Mua2V5cy5sYXN0UGFnZSksZmUoMiksd3IoZC5jb21tb25TdHJpbmdzLmtleXMubGFzdFBhZ2UpfX1mdW5jdGlvbiBNamUoYyxsKXtpZigxJmMmJihzaSgwKSxndCgxLF9qZSwyLDAsImRpdiIsMyks'@;
put 'ZGUoMiwiZGl2Iiw0KSxZcigzKSxoZSgpLGd0KDQsU2plLDIzLDE2LCJkaXYiLDUpLGxpKCkpLDImYyl7Y29uc3QgYT1SZSgpO2ZlKCksTWUoIm5nSWYiLGEuX3BhZ2VTaXplQ29tcG9uZW50KSxmZSgzKSxNZSgibmdJZiIsYS5wYWdlLmxhc3Q+MSl9fWZ1bmN0aW9uIHhqZShjLGwpe2lmKDEm'@;
put 'Yyl7Y29uc3QgYT1MbigpO3NpKDApLGRlKDEsImRpdiIsMTkpLExlKDIpLGhlKCksZGUoMywiZGl2Iiw3KSg0LCJidXR0b24iLDExKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1SZSgpO3JldHVybiBDdChoLnBhZ2UuY3VycmVudD1oLnBhZ2UuY3VycmVudC0xKX0pLGRl'@;
put 'KDUsInNwYW4iLDkpLExlKDYpLGhlKCksR3QoNywiY2RzLWljb24iLDEyKSxoZSgpLGRlKDgsInNwYW4iKSxMZSg5KSxoZSgpLGRlKDEwLCJidXR0b24iLDE0KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1SZSgpO3JldHVybiBDdChoLnBhZ2UuY3VycmVudD1oLnBhZ2Uu'@;
put 'Y3VycmVudCsxKX0pLGRlKDExLCJzcGFuIiw5KSxMZSgxMiksaGUoKSxHdCgxMywiY2RzLWljb24iLDE1KSxoZSgpKCksbGkoKX1pZigyJmMpe2NvbnN0IGE9UmUoKTtmZSgyKSxWZigiICIsYS5wYWdlLmZpcnN0SXRlbSsxLCItIixhLnBhZ2UubGFzdEl0ZW0rMSwiIC8gIixhLnBhZ2UudG90'@;
put 'YWxJdGVtcywiICIpLGZlKDIpLE1lKCJkaXNhYmxlZCIsYS5wYWdlLmN1cnJlbnQ8PTEpLGhyKCJhcmlhLWxhYmVsIixhLmNvbW1vblN0cmluZ3Mua2V5cy5wcmV2aW91c1BhZ2UpLGZlKDIpLHdyKGEuY29tbW9uU3RyaW5ncy5rZXlzLnByZXZpb3VzUGFnZSksZmUoMyksd3IoYS5wYWdlLmN1'@;
put 'cnJlbnQpLGZlKCksTWUoImRpc2FibGVkIixhLnBhZ2UuY3VycmVudD49YS5wYWdlLmxhc3QpLGhyKCJhcmlhLWxhYmVsIixhLmNvbW1vblN0cmluZ3Mua2V5cy5uZXh0UGFnZSksZmUoMiksd3IoYS5jb21tb25TdHJpbmdzLmtleXMubmV4dFBhZ2UpfX1jb25zdCBramU9W1tbImNsci1zdGFj'@;
put 'ay1sYWJlbCJdXSwiKiIsW1siY2xyLXN0YWNrLWJsb2NrIl1dXSxEamU9WyJjbHItc3RhY2stbGFiZWwiLCIqIiwiY2xyLXN0YWNrLWJsb2NrIl07ZnVuY3Rpb24gSWplKGMsbCl7MSZjJiZHdCgwLCJjZHMtaWNvbiIsNyksMiZjJiZocigiZGlyZWN0aW9uIixSZSgpLmNhcmV0RGlyZWN0aW9u'@;
put 'KX1mdW5jdGlvbiBSamUoYyxsKXtpZigxJmMmJihkZSgwLCJzcGFuIiw4KSxMZSgxKSxoZSgpKSwyJmMpe2NvbnN0IGE9UmUoKTtmZSgpLHdyKGEuY29tbW9uU3RyaW5ncy5rZXlzLnN0YWNrVmlld0NoYW5nZWQpfX1mdW5jdGlvbiBMamUoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiLDkpLFly'@;
put 'KDEsMiksaGUoKSksMiZjKXtjb25zdCBhPVJlKCk7X2QoImhlaWdodCIsYS5leHBhbmRlZD8iYXV0byI6MCksaHIoImlkIixhLmdldFN0YWNrQ2hpbGRyZW5JZCgpKSgiYXJpYS1sYWJlbGxlZGJ5IixhLmxhYmVsbGVkQnlJZCl9fWNvbnN0IE9qZT1bW1siY2xyLXN0YWNrLWhlYWRlciJdXSwi'@;
put 'KiJdLFBqZT1bImNsci1zdGFjay1oZWFkZXIiLCIqIl07ZnVuY3Rpb24gTmplKGMsbCl7MSZjJiZGbCgwKX1mdW5jdGlvbiBWamUoYyxsKXtpZigxJmMmJihzaSgwKSxndCgxLE5qZSwxLDAsIm5nLWNvbnRhaW5lciIsMiksbGkoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0LGQ9UmUoMik7'@;
put 'ZmUoKSxNZSgibmdUZW1wbGF0ZU91dGxldCIsZC5mZWF0dXJlc1NlcnZpY2UucmVjdXJzaW9uLnRlbXBsYXRlKSgibmdUZW1wbGF0ZU91dGxldENvbnRleHQiLGQuZ2V0Q29udGV4dChhKSl9fWZ1bmN0aW9uIEJqZShjLGwpe2lmKDEmYyYmKHNpKDApLGd0KDEsVmplLDIsMiwibmctY29udGFp'@;
put 'bmVyIiwxKSxsaSgpKSwyJmMpe2NvbnN0IGE9UmUoKTtmZSgpLE1lKCJuZ0Zvck9mIiwobnVsbD09YS5wYXJlbnQ/bnVsbDphLnBhcmVudC5jaGlsZHJlbil8fGEuY2hpbGRyZW4pfX1jb25zdCBqamU9WyJjb250ZW50Q29udGFpbmVyIl0semplPVtbWyJjbHItdHJlZS1ub2RlIl1dLFtbIiIs'@;
put 'ImNscklmRXhwYW5kZWQiLCIiXV0sIioiXSxVamU9WyJjbHItdHJlZS1ub2RlIiwiW2NscklmRXhwYW5kZWRdIiwiKiJdO2Z1bmN0aW9uIFpqZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImJ1dHRvbiIsOSksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChS'@;
put 'ZSgpLmV4cGFuZFNlcnZpY2UudG9nZ2xlKCkpfSkoImZvY3VzIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChSZSgpLmZvY3VzVHJlZU5vZGUoKSl9KSxHdCgxLCJjZHMtaWNvbiIsMTApLGhlKCl9aWYoMiZjKXtjb25zdCBhPVJlKCk7TWUoImRpc2FibGVkIixhLmRpc2FibGVkKSxmZSgp'@;
put 'LGhyKCJkaXJlY3Rpb24iLGEuZXhwYW5kU2VydmljZS5leHBhbmRlZD8iZG93biI6InJpZ2h0Iil9fWZ1bmN0aW9uIFdqZShjLGwpezEmYyYmKGRlKDAsImRpdiIsMTEpLEd0KDEsInNwYW4iLDEyKSxoZSgpKX1mdW5jdGlvbiBZamUoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJk'@;
put 'aXYiLDEzKSgxLCJpbnB1dCIsMTQpLEZ0KCJjaGFuZ2UiLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1SZSgpO3JldHVybiBDdChoLl9tb2RlbC50b2dnbGVTZWxlY3Rpb24oaC5mZWF0dXJlc1NlcnZpY2UuZWFnZXIpKX0pKCJmb2N1cyIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoUmUo'@;
put 'KS5mb2N1c1RyZWVOb2RlKCkpfSksaGUoKSxkZSgyLCJsYWJlbCIsMTUpLEZsKDMsMTYpLGhlKCkoKX1pZigyJmMpe2NvbnN0IGE9UmUoKSxkPWhhKDcpO2ZlKCksTWUoImlkIixhLm5vZGVJZCsiLWNoZWNrIikoImRpc2FibGVkIixhLmRpc2FibGVkKSgiY2hlY2tlZCIsYS5fbW9kZWwuc2Vs'@;
put 'ZWN0ZWQudmFsdWU9PT1hLlNUQVRFUy5TRUxFQ1RFRCkoImluZGV0ZXJtaW5hdGUiLGEuX21vZGVsLnNlbGVjdGVkLnZhbHVlPT09YS5TVEFURVMuSU5ERVRFUk1JTkFURSksZmUoKSxNZSgiZm9yIixhLm5vZGVJZCsiLWNoZWNrIiksZmUoKSxNZSgibmdUZW1wbGF0ZU91dGxldCIsZCl9fWZ1'@;
put 'bmN0aW9uIEdqZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImRpdiIsMTcpLEZ0KCJtb3VzZXVwIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChSZSgpLmZvY3VzVHJlZU5vZGUoKSl9KSxGbCgxLDE2KSxoZSgpfWlmKDImYyl7UmUoKTtjb25zdCBhPWhhKDcpO2ZlKCksTWUo'@;
put 'Im5nVGVtcGxhdGVPdXRsZXQiLGEpfX1mdW5jdGlvbiAkamUoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiLDE5KSgxLCJzcGFuIiksTGUoMiksaGUoKSgpKSwyJmMpe2NvbnN0IGE9UmUoMik7ZmUoMiksRHIoIiAiLGEuYXJpYVNlbGVjdGVkP2EuY29tbW9uU3RyaW5ncy5rZXlzLnNlbGVjdGVk'@;
put 'VHJlZU5vZGU6YS5jb21tb25TdHJpbmdzLmtleXMudW5zZWxlY3RlZFRyZWVOb2RlLCIiKX19ZnVuY3Rpb24gS2plKGMsbCl7aWYoMSZjJiYoWXIoMCwyKSxndCgxLCRqZSwzLDEsImRpdiIsMTgpKSwyJmMpe2NvbnN0IGE9UmUoKTtmZSgpLE1lKCJuZ0lmIixhLmZlYXR1cmVzU2VydmljZS5z'@;
put 'ZWxlY3RhYmxlfHxhLmFyaWFTZWxlY3RlZCl9fWZ1bmN0aW9uIHFqZShjLGwpezEmYyYmR3QoMCwiY2xyLXJlY3Vyc2l2ZS1jaGlsZHJlbiIsMSksMiZjJiZNZSgiY2hpbGRyZW4iLFJlKCkuZmVhdHVyZXNTZXJ2aWNlLnJlY3Vyc2lvbi5yb290KX1mdW5jdGlvbiBYamUoYyxsKXtpZigxJmMp'@;
put 'e2NvbnN0IGE9TG4oKTtkZSgwLCJidXR0b24iLDQpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoUmUoMikuY2xvc2UoKSl9KSxHdCgxLCJjZHMtaWNvbiIsNSksaGUoKX0yJmMmJmhyKCJhcmlhLWxhYmVsIixSZSgyKS5jbHJDbG9zZUJ1dHRvbkFyaWFMYWJlbCl9ZnVu'@;
put 'Y3Rpb24gSmplKGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2IiwxKSgxLCJkaXYiLDIpLFlyKDIpLGhlKCksZ3QoMyxYamUsMiwxLCJidXR0b24iLDMpLGhlKCkpLDImYyl7Y29uc3QgYT1SZSgpO1RyKCJhbGVydC1zbSIsYS5pc1NtYWxsKSgiYWxlcnQtbGlnaHR3ZWlnaHQiLGEuaXNMaWdodHdl'@;
put 'aWdodCkoImFsZXJ0LWFwcC1sZXZlbCIsYS5pc0FwcExldmVsKSxNZSgibmdDbGFzcyIsYS5hbGVydENsYXNzKSxmZSgzKSxNZSgibmdJZiIsYS5jbG9zYWJsZSl9fWZ1bmN0aW9uIFFqZShjLGwpezEmYyYmR3QoMCwiY2xyLXNwaW5uZXIiLDMpfWZ1bmN0aW9uIGV6ZShjLGwpe2lmKDEmYyYm'@;
put 'R3QoMCwiY2RzLWljb24iLDQpLDImYyl7Y29uc3QgYT1SZSgpO2hyKCJzaGFwZSIsYS5pY29uU2VydmljZS5hbGVydEljb25TaGFwZSkoImFyaWEtbGFiZWwiLGEuaWNvblNlcnZpY2UuYWxlcnRJY29uVGl0bGUpfX1jb25zdCB0emU9W1tbImNsci1hbGVydCJdXV0sbnplPVsiY2xyLWFsZXJ0'@;
put 'Il07ZnVuY3Rpb24gcnplKGMsbCl7MSZjJiZHdCgwLCJjbHItYWxlcnRzLXBhZ2VyIiwyKSwyJmMmJk1lKCJjbHJDdXJyZW50QWxlcnRJbmRleCIsUmUoKS5jdXJyZW50QWxlcnRJbmRleCl9Y29uc3QgaXplPVsiY2xySW50ZXJuYWxNb2RhbENvbnRlbnRUZW1wbGF0ZSJdLFMxZT1bImJvZHki'@;
put 'XSxhemU9W1tbIiIsOCwibGVhZGluZy1idXR0b24iXV0sW1siIiw4LCJtb2RhbC10aXRsZSJdXSxbWyIiLDgsIm1vZGFsLWJvZHkiXV0sW1siIiw4LCJtb2RhbC1mb290ZXIiXV1dLG96ZT1bIi5sZWFkaW5nLWJ1dHRvbiIsIi5tb2RhbC10aXRsZSIsIi5tb2RhbC1ib2R5IiwiLm1vZGFsLWZv'@;
put 'b3RlciJdO2Z1bmN0aW9uIHN6ZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImJ1dHRvbiIsMTQpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoUmUoMykuY2xvc2UoKSl9KSxHdCgxLCJjZHMtaWNvbiIsMTUpLGhlKCl9aWYoMiZjKXtjb25zdCBhPVJlKDMp'@;
put 'O2hyKCJhcmlhLWxhYmVsIixhLmNsb3NlQnV0dG9uQXJpYUxhYmVsfHxhLmNvbW1vblN0cmluZ3Mua2V5cy5jbG9zZSl9fWZ1bmN0aW9uIGx6ZShjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIsOCkoMSwiZGl2Iiw5KSgyLCJkaXYiLDEwKSxZcigzKSxkZSg0LCJkaXYiLDExLDApLFlyKDYsMSks'@;
put 'aGUoKSxndCg3LHN6ZSwyLDEsImJ1dHRvbiIsMTIpLGhlKCksZGUoOCwiZGl2IiwxMywxKSxZcigxMCwyKSxoZSgpLFlyKDExLDMpLGhlKCkoKSksMiZjKXtjb25zdCBhPVJlKDIpO2ZlKDQpLE1lKCJpZCIsYS5tb2RhbElkKSxmZSgzKSxNZSgibmdJZiIsYS5jbG9zYWJsZSl9fWZ1bmN0aW9u'@;
put 'IGN6ZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImRpdiIsNCkoMSwiZGl2Iiw1KSxGdCgiQGZhZGVNb3ZlLmRvbmUiLGZ1bmN0aW9uKGgpe3JldHVybiB3dChhKSxDdChSZSgpLmZhZGVEb25lKGgpKX0pLGRlKDIsImRpdiIsNiksTGUoMyksaGUoKSxndCg0LGx6ZSwxMiwyLCJk'@;
put 'aXYiLDcpLGRlKDUsImRpdiIsNiksTGUoNiksaGUoKSgpKCl9aWYoMiZjKXtjb25zdCBhPVJlKCk7VHIoIm1vZGFsLWZ1bGwtc2NyZWVuIiwiZnVsbC1zY3JlZW4iPT1hLnNpemUpLGZlKCksVHIoIm1vZGFsLXNtIiwic20iPT1hLnNpemUpKCJtb2RhbC1sZyIsImxnIj09YS5zaXplKSgibW9k'@;
put 'YWwteGwiLCJ4bCI9PWEuc2l6ZSksTWUoImNka1RyYXBGb2N1c0F1dG9DYXB0dXJlIiwhMCkoIkBmYWRlTW92ZSIsYS5mYWRlTW92ZSksaHIoImFyaWEtaGlkZGVuIiwhYS5fb3BlbikoImFyaWEtbGFiZWxsZWRieSIsYS5sYWJlbGxlZEJ5fHxhLm1vZGFsSWQpLGZlKDIpLHdyKGEuY29tbW9u'@;
put 'U3RyaW5ncy5rZXlzLm1vZGFsQ29udGVudFN0YXJ0KSxmZSgpLE1lKCJuZ0lmIiwhYS5tb2RhbENvbnRlbnRUZW1wbGF0ZSkoIm5nSWZFbHNlIixhLm1vZGFsQ29udGVudFRlbXBsYXRlKSxmZSgyKSx3cihhLmNvbW1vblN0cmluZ3Mua2V5cy5tb2RhbENvbnRlbnRFbmQpfX1mdW5jdGlvbiB1'@;
put 'emUoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJkaXYiLDE2KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KFJlKCkuYmFja2Ryb3BDbGljaygpKX0pLGhlKCl9MiZjJiZNZSgiQGZhZGUiLHZvaWQgMCl9bGV0IEhsPSgoKT0+e2NsYXNzIGN7fXJldHVybiBj'@;
put 'Llx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItaWNvbiJdXX0pLGN9KSgpLHJzPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxj'@;
put 'Llx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjZHMtaWNvbiJdXX0pLGN9KSgpLEFzPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD1raSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9QXIoe2lt'@;
put 'cG9ydHM6W1JhXX0pLGN9KSgpO2NsYXNzIER4e312YXIgejE9ZnVuY3Rpb24oYyl7cmV0dXJuIGNbYy5ERUZBVUxUPTBdPSJERUZBVUxUIixjW2MuTE9BRElORz0xXT0iTE9BRElORyIsY1tjLlNVQ0NFU1M9Ml09IlNVQ0NFU1MiLGNbYy5FUlJPUj0zXT0iRVJST1IiLGN9KHoxfHx7fSk7bGV0'@;
put 'IGowPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5saXN0ZW5lcj1hLHRoaXMuX2xvYWRpbmdTdGF0ZT16MS5ERUZBVUxUfWdldCBsb2FkaW5nU3RhdGUoKXtyZXR1cm4gdGhpcy5fbG9hZGluZ1N0YXRlfXNldCBsb2FkaW5nU3RhdGUoYSl7ITA9PT1hP2E9ejEuTE9BRElORzph'@;
put 'fHwoYT16MS5ERUZBVUxUKSxhIT09dGhpcy5fbG9hZGluZ1N0YXRlJiYodGhpcy5fbG9hZGluZ1N0YXRlPWEsdGhpcy5saXN0ZW5lciYmdGhpcy5saXN0ZW5lci5sb2FkaW5nU3RhdGVDaGFuZ2UoYSkpfW5nT25EZXN0cm95KCl7dGhpcy5sb2FkaW5nU3RhdGU9ejEuREVGQVVMVH19cmV0dXJu'@;
put 'IGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2UoRHgsOCkpfSxjLlx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJjbHJMb2FkaW5nIiwiIl1dLGlucHV0czp7bG9hZGluZ1N0YXRlOltObi5Ob25lLCJjbHJMb2FkaW5nIiwibG9hZGluZ1N0YXRl'@;
put 'Il19fSksY30pKCksVTE9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuZXhwYW5kYWJsZT0wLHRoaXMuaGFzRXhwYW5kVGVtcGxhdGU9ITEsdGhpcy5fbG9hZGluZz0hMSx0aGlzLl9leHBhbmRlZD0hMSx0aGlzLl9leHBhbmRDaGFuZ2U9bmV3IFdufWdldCBsb2FkaW5nKCl7cmV0'@;
put 'dXJuIHRoaXMuX2xvYWRpbmd9c2V0IGxvYWRpbmcoYSl7KGE9ISFhKSE9PXRoaXMuX2xvYWRpbmcmJih0aGlzLl9sb2FkaW5nPWEpfWdldCBleHBhbmRlZCgpe3JldHVybiB0aGlzLl9leHBhbmRlZH1zZXQgZXhwYW5kZWQoYSl7KGE9ISFhKSE9PXRoaXMuX2V4cGFuZGVkJiYodGhpcy5fZXhw'@;
put 'YW5kZWQ9YSx0aGlzLl9leHBhbmRDaGFuZ2UubmV4dChhKSl9Z2V0IGV4cGFuZENoYW5nZSgpe3JldHVybiB0aGlzLl9leHBhbmRDaGFuZ2UuYXNPYnNlcnZhYmxlKCl9dG9nZ2xlKCl7dGhpcy5leHBhbmRlZD0hdGhpcy5fZXhwYW5kZWR9bG9hZGluZ1N0YXRlQ2hhbmdlKGEpe3RoaXMubG9h'@;
put 'ZGluZz1hPT09ejEuTE9BRElOR319cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCksQnplPTA7ZnVuY3Rpb24gTXUoKXtyZXR1cm4iY2xyLWlkLSIrQnplKyt9'@;
put 'bGV0IE0xZT0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWFjY29yZGlvbi1kZXNjcmlwdGlvbiJdLFsiY2xyLXN0ZXAtZGVzY3JpcHRpb24iXV0saG9z'@;
put 'dFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJlRyKCJjbHItYWNjb3JkaW9uLWRlc2NyaXB0aW9uIiwhMCl9LG5nQ29udGVudFNlbGVjdG9yczp5byxkZWNsczoxLHZhcnM6MCx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKHNhKCksWXIoMCkpfSxlbmNhcHN1bGF0'@;
put 'aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSxjfSkoKTtjb25zdCAkZj0iMC4ycyBlYXNlLWluLW91dCIsanplPVt5aCgic2tpcEluaXRpYWxSZW5kZXIiLFtpdSgiOmVudGVyIixbXSldKSx5aCgidG9nZ2xlIixbaXUoInZvaWQgPT4gKiIsW3VzKHtkaXNwbGF5OiJibG9jayIsaGVpZ2h0OjB9'@;
put 'KSxNMCgkZix1cyh7aGVpZ2h0OiIqIn0pKV0pXSldLGtZPSh5aCgic2tpcEluaXRpYWxSZW5kZXIiLFtpdSgiOmVudGVyIixbXSldKSx5aCgidG9nZ2xlIixbaXUoInZvaWQgPT4gKiIsW3VzKHtkaXNwbGF5OiJibG9jayIsaGVpZ2h0OjB9KSxNMCgkZix1cyh7aGVpZ2h0OiIqIn0pKV0pLGl1'@;
put 'KCIqID0+IHZvaWQiLFt1cyh7ZGlzcGxheToiYmxvY2sifSksTTAoJGYsdXMoe2hlaWdodDowLGRpc3BsYXk6Im5vbmUifSkpXSldKSx7b3BlbjoiT3BlbiIsY2xvc2U6IkNsb3NlIixzaG93OiJTaG93IixoaWRlOiJIaWRlIixhcHBseToiQXBwbHkiLGNhbmNlbDoiQ2FuY2VsIixleHBhbmQ6'@;
put 'IkV4cGFuZCIsY29sbGFwc2U6IkNvbGxhcHNlIixtb3JlOiJNb3JlIixzZWxlY3Q6IlNlbGVjdCIsc2VsZWN0QWxsOiJTZWxlY3QgQWxsIixwcmV2aW91czoiUHJldmlvdXMiLG5leHQ6Ik5leHQiLGN1cnJlbnQ6Ikp1bXAgdG8gY3VycmVudCIsaW5mbzoiSW5mbyIsc3VjY2VzczoiU3VjY2Vz'@;
put 'cyIsd2FybmluZzoiV2FybmluZyIsZGFuZ2VyOiJFcnJvciIsbmV1dHJhbDoiTmV1dHJhbCIsdW5rbm93bjoiVW5rbm93biIscm93QWN0aW9uczoiQXZhaWxhYmxlIGFjdGlvbnMiLHBpY2tDb2x1bW5zOiJNYW5hZ2UgQ29sdW1ucyIsc2hvd0NvbHVtbnM6IlNob3cgQ29sdW1ucyIsc29ydENv'@;
put 'bHVtbjoiU29ydCBDb2x1bW4iLGZpcnN0UGFnZToiRmlyc3QgUGFnZSIsbGFzdFBhZ2U6Ikxhc3QgUGFnZSIsbmV4dFBhZ2U6Ik5leHQgUGFnZSIscHJldmlvdXNQYWdlOiJQcmV2aW91cyBQYWdlIixjdXJyZW50UGFnZToiQ3VycmVudCBQYWdlIix0b3RhbFBhZ2VzOiJUb3RhbCBQYWdlcyIs'@;
put 'ZmlsdGVySXRlbXM6IkZpbHRlciBpdGVtcyIsbWluVmFsdWU6Ik1pbiB2YWx1ZSIsbWF4VmFsdWU6Ik1heCB2YWx1ZSIsbW9kYWxDb250ZW50U3RhcnQ6IkJlZ2lubmluZyBvZiBNb2RhbCBDb250ZW50Iixtb2RhbENvbnRlbnRFbmQ6IkVuZCBvZiBNb2RhbCBDb250ZW50IixzaWRlUGFuZWxQ'@;
put 'aW46IlBpbiBTaWRlIFBhbmVsIixzaG93Q29sdW1uc01lbnVEZXNjcmlwdGlvbjoiU2hvdyBvciBoaWRlIGNvbHVtbnMgbWVudSIsYWxsQ29sdW1uc1NlbGVjdGVkOiJBbGwgY29sdW1ucyBzZWxlY3RlZCIsc2lnbnBvc3RUb2dnbGU6IlNpZ25wb3N0IFRvZ2dsZSIsc2lnbnBvc3RDbG9zZToi'@;
put 'Q2xvc2UiLGxvYWRpbmc6IkxvYWRpbmciLGRldGFpbFBhbmVTdGFydDoiU3RhcnQgb2Ygcm93IGRldGFpbHMiLGRldGFpbFBhbmVFbmQ6IkVuZCBvZiByb3cgZGV0YWlscyIsc2luZ2xlU2VsZWN0aW9uQXJpYUxhYmVsOiJTaW5nbGUgc2VsZWN0aW9uIGhlYWRlciIsc2luZ2xlQWN0aW9uYWJs'@;
put 'ZUFyaWFMYWJlbDoiU2luZ2xlIGFjdGlvbmFibGUgaGVhZGVyIixkZXRhaWxFeHBhbmRhYmxlQXJpYUxhYmVsOiJUb2dnbGUgbW9yZSByb3cgY29udGVudCIsZGF0YWdyaWRGaWx0ZXJBcmlhTGFiZWw6IntDT0xVTU59IGZpbHRlciIsZGF0YWdyaWRGaWx0ZXJMYWJlbDoie0NPTFVNTn0gZmls'@;
put 'dGVyIixkYXRhZ3JpZEZpbHRlckRpYWxvZ0FyaWFMYWJlbDoiRmlsdGVyIGRpYWxvZyIsY29sdW1uU2VwYXJhdG9yQXJpYUxhYmVsOiJDb2x1bW4gcmVzaXplIGhhbmRsZSIsY29sdW1uU2VwYXJhdG9yRGVzY3JpcHRpb246IlVzZSBsZWZ0IG9yIHJpZ2h0IGtleSB0byByZXNpemUgdGhlIGNv'@;
put 'bHVtbiIsZnJvbUxhYmVsOiJGcm9tIix0b0xhYmVsOiJUbyIsYWxlcnRDbG9zZUJ1dHRvbkFyaWFMYWJlbDoiQ2xvc2UgYWxlcnQiLGFsZXJ0TmV4dEFsZXJ0QXJpYUxhYmVsOiJOZXh0IGFsZXJ0IG1lc3NhZ2UsIHtDVVJSRU5UfSBvZiB7Q09VTlR9IixhbGVydFByZXZpb3VzQWxlcnRBcmlh'@;
put 'TGFiZWw6IlByZXZpb3VzIGFsZXJ0IG1lc3NhZ2UsIHtDVVJSRU5UfSBvZiB7Q09VTlR9IixkYXRlcGlja2VyRGlhbG9nTGFiZWw6IkNob29zZSBkYXRlIixkYXRlcGlja2VyVG9nZ2xlQ2hvb3NlRGF0ZUxhYmVsOiJDaG9vc2UgZGF0ZSIsZGF0ZXBpY2tlclRvZ2dsZUNoYW5nZURhdGVMYWJl'@;
put 'bDoiQ2hhbmdlIGRhdGUsIHtTRUxFQ1RFRF9EQVRFfSIsZGF0ZXBpY2tlclByZXZpb3VzTW9udGg6IlByZXZpb3VzIG1vbnRoIixkYXRlcGlja2VyQ3VycmVudE1vbnRoOiJDdXJyZW50IG1vbnRoIixkYXRlcGlja2VyTmV4dE1vbnRoOiJOZXh0IG1vbnRoIixkYXRlcGlja2VyUHJldmlvdXNE'@;
put 'ZWNhZGU6IlByZXZpb3VzIGRlY2FkZSIsZGF0ZXBpY2tlck5leHREZWNhZGU6Ik5leHQgZGVjYWRlIixkYXRlcGlja2VyQ3VycmVudERlY2FkZToiQ3VycmVudCBkZWNhZGUiLGRhdGVwaWNrZXJTZWxlY3RNb250aFRleHQ6IlNlbGVjdCBtb250aCwgdGhlIGN1cnJlbnQgbW9udGggaXMge0NB'@;
put 'TEVOREFSX01PTlRIfSIsZGF0ZXBpY2tlclNlbGVjdFllYXJUZXh0OiJTZWxlY3QgeWVhciwgdGhlIGN1cnJlbnQgeWVhciBpcyB7Q0FMRU5EQVJfWUVBUn0iLGRhdGVwaWNrZXJTZWxlY3RlZExhYmVsOiJ7RlVMTF9EQVRFfSAtIFNlbGVjdGVkIixzdGFja1ZpZXdDaGFuZ2VkOiJWYWx1ZSBj'@;
put 'aGFuZ2VkLiIscmVzcG9uc2l2ZU5hdlRvZ2dsZU9wZW46Ik9wZW4gbmF2aWdhdGlvbiBtZW51IixyZXNwb25zaXZlTmF2VG9nZ2xlQ2xvc2U6IkNsb3NlIG5hdmlnYXRpb24gbWVudSIscmVzcG9uc2l2ZU5hdk92ZXJmbG93T3BlbjoiT3BlbiBuYXZpZ2F0aW9uIG92ZXJmbG93IG1lbnUiLHJl'@;
put 'c3BvbnNpdmVOYXZPdmVyZmxvd0Nsb3NlOiJDbG9zZSBuYXZpZ2F0aW9uIG92ZXJmbG93IG1lbnUiLHZlcnRpY2FsTmF2VG9nZ2xlOiJUb2dnbGUgdmVydGljYWwgbmF2aWdhdGlvbiIsdGltZWxpbmVTdGVwTm90U3RhcnRlZDoiTm90IHN0YXJ0ZWQiLHRpbWVsaW5lU3RlcEN1cnJlbnQ6IkN1'@;
put 'cnJlbnQiLHRpbWVsaW5lU3RlcFN1Y2Nlc3M6IkNvbXBsZXRlZCIsdGltZWxpbmVTdGVwRXJyb3I6IkVycm9yIix0aW1lbGluZVN0ZXBQcm9jZXNzaW5nOiJJbiBwcm9ncmVzcyIsY29tYm9ib3hEZWxldGU6IkRlbGV0ZSBzZWxlY3RlZCBvcHRpb24iLGNvbWJvYm94U2VhcmNoaW5nOidTZWFy'@;
put 'Y2hpbmcgZm9yIG1hdGNoZXMgZm9yICJ7SU5QVVR9IicsY29tYm9ib3hTZWxlY3Rpb246IlNlbGVjdGlvbiIsY29tYm9ib3hTZWxlY3RlZDoiU2VsZWN0ZWQiLGNvbWJvYm94Tm9SZXN1bHRzOiJObyByZXN1bHRzIixjb21ib2JveE9wZW46IlNob3cgb3B0aW9ucyIsZGF0YWdyaWRFeHBhbmRh'@;
put 'YmxlQmVnaW5uaW5nT2Y6IkJlZ2lubmluZyBvZiIsZGF0YWdyaWRFeHBhbmRhYmxlRW5kT2Y6IkVuZCBvZiIsZGF0YWdyaWRFeHBhbmRhYmxlUm93Q29udGVudDoiRXhwYW5kYWJsZSByb3cgY29udGVudCIsZGF0YWdyaWRFeHBhbmRhYmxlUm93c0hlbHBlclRleHQ6IlNjcmVlbiByZWFkZXIg'@;
put 'dGFibGUgY29tbWFuZHMgbWF5IG5vdCB3b3JrIGZvciB2aWV3aW5nIGV4cGFuZGVkIGNvbnRlbnQsIHBsZWFzZSB1c2UgeW91ciBzY3JlZW4gcmVhZGVyJ3MgYnJvd3NlIG1vZGUgdG8gcmVhZCB0aGUgY29udGVudCBleHBvc2VkIGJ5IHRoaXMgYnV0dG9uIix3aXphcmRTdGVwOiJTdGVwIix3'@;
put 'aXphcmRTdGVwU3VjY2VzczoiQ29tcGxldGVkIix3aXphcmRTdGVwRXJyb3I6IkVycm9yIix3aXphcmRTdGVwbmF2QXJpYUxhYmVsOiJXaXphcmQgc3RlcHMiLHBhc3N3b3JkSGlkZToiSGlkZSBwYXNzd29yZCBmb3Ige0xBQkVMfSIscGFzc3dvcmRTaG93OiJTaG93IHBhc3N3b3JkIGZvciB7'@;
put 'TEFCRUx9IixzZWxlY3RlZFJvd3M6IlNlbGVjdGVkIHJvd3MiLHN0ZXBDb21wbGV0ZToiU3RlcCB7U1RFUH0gY29tcGxldGUiLHN0ZXBFcnJvcjoiRXJyb3IgaW4gc3RlcCB7U1RFUH0iLGJyb3dzZToiQnJvd3NlIixmaWxlQ291bnQ6IntDT1VOVH0gZmlsZXMiLGNsZWFyRmlsZToiQ2xlYXIg'@;
put 'e0ZJTEV9IixjbGVhckZpbGVzOiJDbGVhciB7Q09VTlR9IGZpbGVzIixzZWxlY3RlZFRyZWVOb2RlOiJzZWxlY3RlZCIsdW5zZWxlY3RlZFRyZWVOb2RlOiJ1bnNlbGVjdGVkIixicmVhZGNydW1ic0xhYmVsOiJicmVhZGNydW1icyIsZXhwYW5kQnJlYWRjcnVtYnNMYWJlbDoiRXhwYW5kIGJy'@;
put 'ZWFkY3J1bWJzIn0pO2xldCBpcz0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5fc3RyaW5ncz1rWX1nZXQga2V5cygpe3JldHVybiB0aGlzLl9zdHJpbmdzfWxvY2FsaXplKGEpe3RoaXMuX3N0cmluZ3M9ey4uLnRoaXMuX3N0cmluZ3MsLi4uYX19cGFyc2UoYSxkPXt9KXtjb25z'@;
put 'dCBoPU9iamVjdC5rZXlzKGQpO2xldCBmPWE7cmV0dXJuIGgubGVuZ3RoJiZoLmZvckVhY2godj0+e2Y9Zi5yZXBsYWNlKGB7JHt2fX1gLGRbdl0pfSksZn19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1hbih7dG9rZW46Yyxm'@;
put 'YWN0b3J5OmMuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSksY30pKCk7dmFyIEtmPWZ1bmN0aW9uKGMpe3JldHVybiBjLkluYWN0aXZlPSJpbmFjdGl2ZSIsYy5FcnJvcj0iZXJyb3IiLGMuQ29tcGxldGU9ImNvbXBsZXRlIixjfShLZnx8e30pLEl4PWZ1bmN0aW9uKGMpe3JldHVybiBj'@;
put 'LkRlZmF1bHQ9ImRlZmF1bHQiLGMuTXVsdGk9Im11bHRpIixjfShJeHx8e30pO2xldCBVemU9MDtjbGFzcyBaemV7Y29uc3RydWN0b3IobCxhKXt0aGlzLmlkPWwsdGhpcy5hY2NvcmRpb25JZD1hLHRoaXMuc3RhdHVzPUtmLkluYWN0aXZlLHRoaXMuaW5kZXg9bnVsbCx0aGlzLmRpc2FibGVk'@;
put 'PSExLHRoaXMub3Blbj0hMSx0aGlzLnRlbXBsYXRlSWQ9YCR7dGhpcy5pZH0tJHt0aGlzLmFjY29yZGlvbklkfWB9fWNsYXNzIHgxZXtjb25zdHJ1Y3Rvcigpe3RoaXMuc3RyYXRlZ3k9SXguRGVmYXVsdCx0aGlzLmFjY29yZGlvbkNvdW50PVV6ZSsrLHRoaXMuX3BhbmVscz17fX1nZXQgcGFu'@;
put 'ZWxzKCl7cmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuX3BhbmVscykubWFwKGw9PnRoaXMuX3BhbmVsc1tsXSl9c2V0U3RyYXRlZ3kobCl7dGhpcy5zdHJhdGVneT1sfXVwZGF0ZVBhbmVsT3JkZXIobCl7bC5mb3JFYWNoKChhLGQpPT50aGlzLl9wYW5lbHNbYV0uaW5kZXg9ZCksdGhpcy5yZW1v'@;
put 'dmVPbGRQYW5lbHMobCl9YWRkUGFuZWwobCxhPSExKXt0aGlzLl9wYW5lbHNbbF09bmV3IFp6ZShsLHRoaXMuYWNjb3JkaW9uQ291bnQpLHRoaXMuX3BhbmVsc1tsXS5vcGVuPWF9dG9nZ2xlUGFuZWwobCxhKXtjb25zdCBoPXZvaWQgMCE9PWE/YTohdGhpcy5fcGFuZWxzW2xdLm9wZW47aCYm'@;
put 'dGhpcy5zdHJhdGVneT09PUl4LkRlZmF1bHQmJnRoaXMuY2xvc2VBbGxQYW5lbHMoKSx0aGlzLl9wYW5lbHNbbF0ub3Blbj1ofWRpc2FibGVQYW5lbChsLGEpe3RoaXMuX3BhbmVsc1tsXS5kaXNhYmxlZD1hfWNsb3NlQWxsUGFuZWxzKCl7dGhpcy5wYW5lbHMuZm9yRWFjaChsPT50aGlzLl9w'@;
put 'YW5lbHNbbC5pZF0ub3Blbj0hMSl9cmVtb3ZlT2xkUGFuZWxzKGwpe3RoaXMucGFuZWxzLmZpbHRlcihhPT52b2lkIDA9PT1sLmZpbmQoZD0+ZD09PWEuaWQpKS5mb3JFYWNoKGE9PmRlbGV0ZSB0aGlzLl9wYW5lbHNbYS5pZF0pfX1sZXQgUng9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigp'@;
put 'e3RoaXMuYWNjb3JkaW9uPW5ldyB4MWUsdGhpcy5fcGFuZWxzQ2hhbmdlcz1uZXcgZWkodGhpcy5hY2NvcmRpb24ucGFuZWxzKX1nZXRQYW5lbENoYW5nZXMoYSl7cmV0dXJuIHRoaXMuX3BhbmVsc0NoYW5nZXMucGlwZShMcihkPT5kLmZpbmQoaD0+aC5pZD09PWEpKSl9c2V0U3RyYXRlZ3ko'@;
put 'YSl7dGhpcy5hY2NvcmRpb24uc2V0U3RyYXRlZ3koYSl9YWRkUGFuZWwoYSxkPSExKXt0aGlzLmFjY29yZGlvbi5hZGRQYW5lbChhLGQpLHRoaXMuZW1pdFVwZGF0ZWRQYW5lbHMoKX10b2dnbGVQYW5lbChhLGQpe3RoaXMuYWNjb3JkaW9uLnRvZ2dsZVBhbmVsKGEsZCksdGhpcy5lbWl0VXBk'@;
put 'YXRlZFBhbmVscygpfWRpc2FibGVQYW5lbChhLGQpe3RoaXMuYWNjb3JkaW9uLmRpc2FibGVQYW5lbChhLGQpLHRoaXMuZW1pdFVwZGF0ZWRQYW5lbHMoKX11cGRhdGVQYW5lbE9yZGVyKGEpe3RoaXMuYWNjb3JkaW9uLnVwZGF0ZVBhbmVsT3JkZXIoYSksdGhpcy5lbWl0VXBkYXRlZFBhbmVs'@;
put 'cygpfWVtaXRVcGRhdGVkUGFuZWxzKCl7dGhpcy5fcGFuZWxzQ2hhbmdlcy5uZXh0KHRoaXMuYWNjb3JkaW9uLnBhbmVscyl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZh'@;
put 'Y30pLGN9KSgpLEZMPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZix2KXt0aGlzLnBhcmVudD1hLHRoaXMuY29tbW9uU3RyaW5ncz1kLHRoaXMuYWNjb3JkaW9uU2VydmljZT1oLHRoaXMuaWZFeHBhbmRTZXJ2aWNlPWYsdGhpcy5jZHI9dix0aGlzLmRpc2FibGVkPSExLHRoaXMu'@;
put 'cGFuZWxPcGVuPSExLHRoaXMuaGVhZGluZ0VuYWJsZWQ9ITEsdGhpcy5wYW5lbE9wZW5DaGFuZ2U9bmV3IEtyLHRoaXMuX2lkPU11KCl9Z2V0IGlkKCl7cmV0dXJuIHRoaXMuX2lkfXNldCBpZChhKXt0aGlzLl9pZD1hfWdldCBwYW5lbE51bWJlcigpe3JldHVybiB0aGlzLl9wYW5lbEluZGV4'@;
put 'KzF9Z2V0IGhlYWRpbmdMZXZlbCgpe3JldHVybiB0aGlzLmV4cGxpY2l0SGVhZGluZ0xldmVsP3RoaXMuZXhwbGljaXRIZWFkaW5nTGV2ZWw6dGhpcy5wYXJlbnQ/NDozfW5nT25Jbml0KCl7dGhpcy5wYW5lbD10aGlzLmFjY29yZGlvblNlcnZpY2UuZ2V0UGFuZWxDaGFuZ2VzKHRoaXMuaWQp'@;
put 'LnBpcGUoR3UoYT0+dGhpcy5lbWl0UGFuZWxDaGFuZ2UoYSkpKSx0aGlzLmFjY29yZGlvblNlcnZpY2UuYWRkUGFuZWwodGhpcy5pZCx0aGlzLnBhbmVsT3BlbiksdGhpcy5hY2NvcmRpb25TZXJ2aWNlLnRvZ2dsZVBhbmVsKHRoaXMuaWQsdGhpcy5wYW5lbE9wZW4pLHRoaXMuYWNjb3JkaW9u'@;
put 'U2VydmljZS5kaXNhYmxlUGFuZWwodGhpcy5pZCx0aGlzLmRpc2FibGVkKX1uZ09uQ2hhbmdlcyhhKXt0aGlzLnBhbmVsJiZhLnBhbmVsT3BlbiYmYS5wYW5lbE9wZW4uY3VycmVudFZhbHVlIT09YS5wYW5lbE9wZW4ucHJldmlvdXNWYWx1ZSYmdGhpcy5hY2NvcmRpb25TZXJ2aWNlLnRvZ2ds'@;
put 'ZVBhbmVsKHRoaXMuaWQsYS5wYW5lbE9wZW4uY3VycmVudFZhbHVlKSx0aGlzLnBhbmVsJiZhLmRpc2FibGVkJiZhLmRpc2FibGVkLmN1cnJlbnRWYWx1ZSE9PWEuZGlzYWJsZWQucHJldmlvdXNWYWx1ZSYmdGhpcy5hY2NvcmRpb25TZXJ2aWNlLmRpc2FibGVQYW5lbCh0aGlzLmlkLGEuZGlz'@;
put 'YWJsZWQuY3VycmVudFZhbHVlKX10b2dnbGVQYW5lbCgpe3RoaXMuYWNjb3JkaW9uU2VydmljZS50b2dnbGVQYW5lbCh0aGlzLmlkKX1jb2xsYXBzZVBhbmVsT25BbmltYXRpb25Eb25lKGEpe2Eub3Blbnx8KHRoaXMuaWZFeHBhbmRTZXJ2aWNlLmV4cGFuZGVkPSExKX1nZXRQYW5lbFN0YXRl'@;
put 'Q2xhc3NlcyhhKXtyZXR1cm5gY2xyLWFjY29yZGlvbi1wYW5lbC0ke2Euc3RhdHVzfSAke2Eub3Blbj8iY2xyLWFjY29yZGlvbi1wYW5lbC1vcGVuIjoiIn1gfWdldEFjY29yZGlvbkNvbnRlbnRJZChhKXtyZXR1cm5gY2xyLWFjY29yZGlvbi1jb250ZW50LSR7YX0nYH1nZXRBY2NvcmRpb25I'@;
put 'ZWFkZXJJZChhKXtyZXR1cm5gY2xyLWFjY29yZGlvbi1oZWFkZXItJHthfWB9c3RlcENvbXBsZXRlVGV4dChhKXtyZXR1cm4gdGhpcy5jb21tb25TdHJpbmdzLnBhcnNlKHRoaXMuY29tbW9uU3RyaW5ncy5rZXlzLnN0ZXBDb21wbGV0ZSx7U1RFUDphLnRvU3RyaW5nKCl9KX1zdGVwRXJyb3JU'@;
put 'ZXh0KGEpe3JldHVybiB0aGlzLmNvbW1vblN0cmluZ3MucGFyc2UodGhpcy5jb21tb25TdHJpbmdzLmtleXMuc3RlcEVycm9yLHtTVEVQOmEudG9TdHJpbmcoKX0pfWVtaXRQYW5lbENoYW5nZShhKXthLmluZGV4IT09dGhpcy5fcGFuZWxJbmRleCYmKHRoaXMuX3BhbmVsSW5kZXg9YS5pbmRl'@;
put 'eCx0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCkpLGEub3BlbiE9PXRoaXMucGFuZWxPcGVuJiYodGhpcy5wYW5lbE9wZW5DaGFuZ2UuZW1pdChhLm9wZW4pLHRoaXMucGFuZWxPcGVuPWEub3BlbiksYS5vcGVuJiYodGhpcy5pZkV4cGFuZFNlcnZpY2UuZXhwYW5kZWQ9ITApfX1yZXR1cm4gYy5c'@;
put 'dTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZShjLDEyKSxHZShpcyksR2UoUngpLEdlKFUxKSxHZShFcykpfSxjLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItYWNjb3JkaW9uLXBhbmVsIl1dLGNvbnRlbnRRdWVyaWVzOmZ1bmN0aW9uKGEsZCxo'@;
put 'KXtpZigxJmEmJmFvKGgsTTFlLDQpLDImYSl7bGV0IGY7Q2koZj1TaSgpKSYmKGQuYWNjb3JkaW9uRGVzY3JpcHRpb249Zil9fSxob3N0VmFyczo0LGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmVHIoImNsci1hY2NvcmRpb24tcGFuZWwiLCEwKSgiY2xyLWFjY29yZGlvbi1wYW5l'@;
put 'bC1kaXNhYmxlZCIsZC5kaXNhYmxlZCl9LGlucHV0czp7ZGlzYWJsZWQ6W05uLk5vbmUsImNsckFjY29yZGlvblBhbmVsRGlzYWJsZWQiLCJkaXNhYmxlZCJdLHBhbmVsT3BlbjpbTm4uTm9uZSwiY2xyQWNjb3JkaW9uUGFuZWxPcGVuIiwicGFuZWxPcGVuIl0saGVhZGluZ0VuYWJsZWQ6W05u'@;
put 'Lk5vbmUsImNsckFjY29yZGlvblBhbmVsSGVhZGluZ0VuYWJsZWQiLCJoZWFkaW5nRW5hYmxlZCJdLGV4cGxpY2l0SGVhZGluZ0xldmVsOltObi5Ob25lLCJjbHJBY2NvcmRpb25QYW5lbEhlYWRpbmdMZXZlbCIsImV4cGxpY2l0SGVhZGluZ0xldmVsIl19LG91dHB1dHM6e3BhbmVsT3BlbkNo'@;
put 'YW5nZToiY2xyQWNjb3JkaW9uUGFuZWxPcGVuQ2hhbmdlIn0sZmVhdHVyZXM6W2RhKFtVMV0pLHdsXSxuZ0NvbnRlbnRTZWxlY3RvcnM6SkZlLGRlY2xzOjIsdmFyczozLGNvbnN0czpbWyJoZWFkZXJCdXR0b24iLCIiXSxbNCwibmdJZiJdLFszLCJuZ0NsYXNzIl0sWzEsImNsci1hY2NvcmRp'@;
put 'b24taGVhZGVyIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJjbHItYWNjb3JkaW9uLWhlYWRlci1idXR0b24iLDMsImNsaWNrIiwiaWQiLCJkaXNhYmxlZCJdLFsxLCJjbHItYWNjb3JkaW9uLXN0YXR1cyJdLFsic2hhcGUiLCJhbmdsZSIsImRpcmVjdGlvbiIsInJpZ2h0IiwxLCJjbHItYWNjb3Jk'@;
put 'aW9uLWFuZ2xlIl0sWyJyb2xlIiwicmVnaW9uIiwxLCJjbHItYWNjb3JkaW9uLWNvbnRlbnQtcmVnaW9uIiwzLCJpZCJdLFsiY2xhc3MiLCJjbHItYWNjb3JkaW9uLWNvbnRlbnQiLDQsIm5nSWYiXSxbMSwiY2xyLWFjY29yZGlvbi1jb250ZW50Il0sWzEsImNsci1hY2NvcmRpb24taW5uZXIt'@;
put 'Y29udGVudCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKHNhKFhGZSksZ3QoMCxlSGUsMTIsMTYsIm5nLWNvbnRhaW5lciIsMSksZWwoMSwiYXN5bmMiKSksMiZhJiZNZSgibmdJZiIsRGMoMSwxLGQucGFuZWwpKX0sZGVwZW5kZW5jaWVzOlt3dSxiYSxycyxFTV0sZW5jYXBzdWxh'@;
put 'dGlvbjoyLGRhdGE6e2FuaW1hdGlvbjpqemV9LGNoYW5nZURldGVjdGlvbjowfSksY30pKCksRTFlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5hY2NvcmRpb25TZXJ2aWNlPWEsdGhpcy5tdWx0aVBhbmVsPSExLHRoaXMuc3Vic2NyaXB0aW9ucz1bXX1uZ09uSW5pdCgpe3Ro'@;
put 'aXMuc2V0QWNjb3JkaW9uU3RyYXRlZ3koKX1uZ09uQ2hhbmdlcyhhKXthLm11bHRpUGFuZWwuY3VycmVudFZhbHVlIT09YS5tdWx0aVBhbmVsLnByZXZpb3VzVmFsdWUmJnRoaXMuc2V0QWNjb3JkaW9uU3RyYXRlZ3koKX1uZ0FmdGVyVmlld0luaXQoKXt0aGlzLnN1YnNjcmlwdGlvbnMucHVz'@;
put 'aCh0aGlzLmxpc3RlbkZvckRPTUNoYW5nZXMoKSl9bmdPbkRlc3Ryb3koKXt0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChhPT5hLnVuc3Vic2NyaWJlKCkpfXNldEFjY29yZGlvblN0cmF0ZWd5KCl7dGhpcy5hY2NvcmRpb25TZXJ2aWNlLnNldFN0cmF0ZWd5KHRoaXMubXVsdGlQYW5lbD9J'@;
put 'eC5NdWx0aTpJeC5EZWZhdWx0KX1saXN0ZW5Gb3JET01DaGFuZ2VzKCl7cmV0dXJuIHRoaXMucGFuZWxzLmNoYW5nZXMucGlwZSh4Mih0aGlzLnBhbmVscykpLnN1YnNjcmliZShhPT50aGlzLmFjY29yZGlvblNlcnZpY2UudXBkYXRlUGFuZWxPcmRlcihhLnRvQXJyYXkoKS5tYXAoZD0+ZC5p'@;
put 'ZCkpKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2UoUngpKX0sYy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWFjY29yZGlvbiJdXSxjb250ZW50UXVlcmllczpmdW5jdGlvbihhLGQsaCl7aWYoMSZhJiZhbyhoLEZMLDQp'@;
put 'LDImYSl7bGV0IGY7Q2koZj1TaSgpKSYmKGQucGFuZWxzPWYpfX0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJlRyKCJjbHItYWNjb3JkaW9uIiwhMCl9LGlucHV0czp7bXVsdGlQYW5lbDpbTm4uTm9uZSwiY2xyQWNjb3JkaW9uTXVsdGlQYW5lbCIsIm11bHRp'@;
put 'UGFuZWwiXX0sZmVhdHVyZXM6W2RhKFtSeF0pLHdsXSxuZ0NvbnRlbnRTZWxlY3RvcnM6eW8sZGVjbHM6MSx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihzYSgpLFlyKDApKX0sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksY30pKCksVDFlPSgoKT0+e2Ns'@;
put 'YXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItYWNjb3JkaW9uLWNvbnRlbnQiXSxbImNsci1zdGVwLWNvbnRlbnQiXV0sbmdDb250ZW50U2VsZWN0b3JzOnlvLGRlY2xz'@;
put 'OjEsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoc2EoKSxZcigwKSl9LGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLGN9KSgpLEExZT0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5c'@;
put 'dTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWFjY29yZGlvbi10aXRsZSJdLFsiY2xyLXN0ZXAtdGl0bGUiXV0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJlRyKCJjbHItYWNjb3JkaW9uLXRpdGxlIiwhMCl9LG5nQ29udGVudFNlbGVjdG9y'@;
put 'czp5byxkZWNsczoxLHZhcnM6MCx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKHNhKCksWXIoMCkpfSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSxjfSkoKSxSeT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5kaXNhYmxlQ2hvY29sYXRlQ2hlY2s9ITEs'@;
put 'dGhpcy5fY2hvY29sYXRlPW5ldyBXbn1nZXQgY2hvY29sYXRlKCl7cmV0dXJuIHRoaXMuX2Nob2NvbGF0ZS5hc09ic2VydmFibGUoKX1uZ0FmdGVyVmlld0NoZWNrZWQoKXt0aGlzLmRpc2FibGVDaG9jb2xhdGVDaGVja3x8dGhpcy5fY2hvY29sYXRlLm5leHQoKX19cmV0dXJuIGMuXHUwMjc1'@;
put 'ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1ZGlyPUVyKHt0eXBlOmN9KSxjfSkoKSxMeT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCl7dGhpcy5zdWJzY3JpcHRpb249ZC5jaG9jb2xhdGUuc3Vic2NyaWJlKCgpPT57dGhpcy5sYXRlc3RGbGF2b3IhPT10'@;
put 'aGlzLmZsYXZvciYmKGQuZGlzYWJsZUNob2NvbGF0ZUNoZWNrPSEwLGEuZGV0ZWN0Q2hhbmdlcygpLGQuZGlzYWJsZUNob2NvbGF0ZUNoZWNrPSExKX0pfW5nQWZ0ZXJDb250ZW50Q2hlY2tlZCgpe3RoaXMubGF0ZXN0Rmxhdm9yPXRoaXMuZmxhdm9yfW5nT25EZXN0cm95KCl7dGhpcy5zdWJz'@;
put 'Y3JpcHRpb24udW5zdWJzY3JpYmUoKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2UoRXMpLEdlKFJ5KSl9LGMuXHUwMjc1ZGlyPUVyKHt0eXBlOmN9KSxjfSkoKSxEWT0oKCk9PntjbGFzcyBjIGV4dGVuZHMgUnl7fXJldHVybiBjLlx1MDI3NWZh'@;
put 'Yz0oKCk9PntsZXQgbDtyZXR1cm4gZnVuY3Rpb24oZCl7cmV0dXJuKGx8fChsPVlzKGMpKSkoZHx8Yyl9fSkoKSxjLlx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItYWNjb3JkaW9uIl1dLGZlYXR1cmVzOlt3YV19KSxjfSkoKSxrMWU9KCgpPT57Y2xhc3MgYyBleHRlbmRz'@;
put 'IEx5e2NvbnN0cnVjdG9yKGEsZCxoKXtpZighZCl0aHJvdyBuZXcgRXJyb3IoImNsci1hY2NvcmRpb24tcGFuZWwgc2hvdWxkIG9ubHkgYmUgdXNlZCBpbnNpZGUgb2YgY2xyLWFjY29yZGlvbiIpO3N1cGVyKGEsZCksdGhpcy5leHBhbmQ9aH1nZXQgZmxhdm9yKCl7cmV0dXJuIHRoaXMuZXhw'@;
put 'YW5kLmV4cGFuZGVkfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZShFcyksR2UoRFksOCksR2UoVTEpKX0sYy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWFjY29yZGlvbi1wYW5lbCJdXSxmZWF0dXJlczpbd2FdfSksY30p'@;
put 'KCksRDFlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXtUcy5hZGRJY29ucyhFeSx2aCxiaCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD1raSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9QXIoe2ltcG9ydHM6W1JhLEFzXX0p'@;
put 'LGN9KSgpLEt6ZT0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9a2koe3R5cGU6Y30pLGMuXHUwMjc1aW5qPUFyKHtpbXBvcnRzOltSYSxBcyxEMWUsRDFlXX0pLGN9KSgpO3ZhciBnYT1mdW5jdGlvbihj'@;
put 'KXtyZXR1cm4gYy5BcnJvd0xlZnQ9IkFycm93TGVmdCIsYy5BcnJvd1VwPSJBcnJvd1VwIixjLkFycm93UmlnaHQ9IkFycm93UmlnaHQiLGMuQXJyb3dEb3duPSJBcnJvd0Rvd24iLGMuQmFja3NwYWNlPSJCYWNrc3BhY2UiLGMuVGFiPSJUYWIiLGMuRW50ZXI9IkVudGVyIixjLkVzY2FwZT0i'@;
put 'RXNjYXBlIixjLlNwYWNlPSJTcGFjZSIsYy5TcGFjZWJhcj0iICIsYy5Ib21lPSJIb21lIixjLkVuZD0iRW5kIixjLlBhZ2VEb3duPSJQYWdlRG93biIsYy5QYWdlVXA9IlBhZ2VVcCIsY30oZ2F8fHt9KSxoNz1mdW5jdGlvbihjKXtyZXR1cm4gYy5BcnJvd1VwPSJVcCIsYy5BcnJvd0Rvd249'@;
put 'IkRvd24iLGMuQXJyb3dSaWdodD0iUmlnaHQiLGMuQXJyb3dMZWZ0PSJMZWZ0IixjLlNwYWNlPSJTcGFjZWJhciIsYy5Fc2NhcGU9IkVzYyIsY30oaDd8fHt9KTtmdW5jdGlvbiBJMihjKXtyZXR1cm4gYz09PWdhLkFycm93VXB8fGM9PT1oNy5BcnJvd1VwP2dhLkFycm93VXA6Yz09PWdhLkFy'@;
put 'cm93RG93bnx8Yz09PWg3LkFycm93RG93bj9nYS5BcnJvd0Rvd246Yz09PWdhLkFycm93UmlnaHR8fGM9PT1oNy5BcnJvd1JpZ2h0P2dhLkFycm93UmlnaHQ6Yz09PWdhLkFycm93TGVmdHx8Yz09PWg3LkFycm93TGVmdD9nYS5BcnJvd0xlZnQ6Yz09PWdhLlNwYWNlfHxjPT09aDcuU3BhY2U/'@;
put 'Z2EuU3BhY2U6Yz09PWdhLkVzY2FwZXx8Yz09PWg3LkVzY2FwZT9nYS5Fc2NhcGU6Y31mdW5jdGlvbiBSWShjKXtjb25zdCBsPUkyKGMua2V5KTsobD09PWdhLkFycm93VXB8fGw9PT1nYS5BcnJvd0Rvd258fGw9PT1nYS5BcnJvd0xlZnR8fGw9PT1nYS5BcnJvd1JpZ2h0KSYmYy5wcmV2ZW50'@;
put 'RGVmYXVsdCgpfWxldCBzYz0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5fb3Blbj0hMSx0aGlzLl9vcGVuQ2hhbmdlPW5ldyBXbix0aGlzLl9vcGVuRXZlbnRDaGFuZ2U9bmV3IFduLHRoaXMuX3BvcG92ZXJBbGlnbmVkPW5ldyBXbix0aGlzLl9wb3BvdmVyVmlzaWJsZT1uZXcg'@;
put 'V259Z2V0IG9wZW5DaGFuZ2UoKXtyZXR1cm4gdGhpcy5fb3BlbkNoYW5nZS5hc09ic2VydmFibGUoKX1nZXQgcG9wb3ZlclZpc2libGUoKXtyZXR1cm4gdGhpcy5fcG9wb3ZlclZpc2libGUuYXNPYnNlcnZhYmxlKCl9Z2V0IG9wZW5FdmVudCgpe3JldHVybiB0aGlzLl9vcGVuRXZlbnR9c2V0'@;
put 'IG9wZW5FdmVudChhKXt0aGlzLl9vcGVuRXZlbnQ9YSx0aGlzLl9vcGVuRXZlbnRDaGFuZ2UubmV4dChhKX1nZXQgb3Blbigpe3JldHVybiB0aGlzLl9vcGVufXNldCBvcGVuKGEpe3RoaXMuX29wZW4hPT0oYT0hIWEpJiYodGhpcy5fb3Blbj1hLHRoaXMuX29wZW5DaGFuZ2UubmV4dChhKSl9'@;
put 'Z2V0IG9yaWdpbmFsRXZlbnQoKXtyZXR1cm4gdGhpcy5fb3BlbkV2ZW50fWdldCBwb3BvdmVyQWxpZ25lZCgpe3JldHVybiB0aGlzLl9wb3BvdmVyQWxpZ25lZC5hc09ic2VydmFibGUoKX1nZXRFdmVudENoYW5nZSgpe3JldHVybiB0aGlzLl9vcGVuRXZlbnRDaGFuZ2UuYXNPYnNlcnZhYmxl'@;
put 'KCl9dG9nZ2xlV2l0aEV2ZW50KGEpe1JZKGEpLHRoaXMub3BlbkV2ZW50PWEsdGhpcy5vcGVuPSF0aGlzLm9wZW59cG9wb3ZlclZpc2libGVFbWl0KGEpe3RoaXMuX3BvcG92ZXJWaXNpYmxlLm5leHQoYSl9cG9wb3ZlckFsaWduZWRFbWl0KGEpe3RoaXMuX3BvcG92ZXJBbGlnbmVkLm5leHQo'@;
put 'YSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpLE94PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgpe3RoaXMucmVuZGVyZXI9YSx0aGlzLnNt'@;
put 'YXJ0T3BlblNlcnZpY2U9ZCx0aGlzLmRvY3VtZW50PWgsdGhpcy5vdXRzaWRlQ2xpY2tDbG9zZT0hMCx0aGlzLnNjcm9sbFRvQ2xvc2U9ITAsdGhpcy5zdWJzY3JpcHRpb25zPVtdLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKGQub3BlbkNoYW5nZS5zdWJzY3JpYmUoZj0+e2Y/KHRoaXMuYWRk'@;
put 'RXNjYXBlTGlzdGVuZXIoKSx0aGlzLmFkZENsaWNrTGlzdGVuZXIoKSx0aGlzLmFkZFNjcm9sbExpc3RlbmVyKCkpOnRoaXMucmVtb3ZlQWxsRXZlbnRMaXN0ZW5lcnMoKX0pLGQuZ2V0RXZlbnRDaGFuZ2UoKS5zdWJzY3JpYmUoZj0+e3RoaXMuaWdub3JlZEV2ZW50PWZ9KSl9bmdPbkRlc3Ry'@;
put 'b3koKXt0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChhPT5hLnVuc3Vic2NyaWJlKCkpLHRoaXMucmVtb3ZlQWxsRXZlbnRMaXN0ZW5lcnMoKX1hZGRTY3JvbGxMaXN0ZW5lcigpe3RoaXMuc2Nyb2xsVG9DbG9zZSYmKHRoaXMuZG9jdW1lbnRTY3JvbGxlcj14ZCh0aGlzLmRvY3VtZW50LCJz'@;
put 'Y3JvbGwiLHtjYXB0dXJlOiEwfSksdGhpcy5zY3JvbGxTdWJzY3JpcHRpb249dGhpcy5kb2N1bWVudFNjcm9sbGVyLnBpcGUoJGwodGhpcy50ZXN0Rm9yU21hcnRQb3BvdmVyQ29udGVudENvbnRhaW5lcikpLnN1YnNjcmliZSgoKT0+e3RoaXMuc21hcnRPcGVuU2VydmljZS5vcGVuPSExLHRo'@;
put 'aXMuc2V0QW5jaG9yRm9jdXMoKX0pKX1yZW1vdmVTY3JvbGxMaXN0ZW5lcigpe3RoaXMuZG9jdW1lbnRTY3JvbGxlciYmKHRoaXMuc2Nyb2xsU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksZGVsZXRlIHRoaXMuZG9jdW1lbnRTY3JvbGxlcil9YWRkQ2xpY2tMaXN0ZW5lcigpe3RoaXMub3V0'@;
put 'c2lkZUNsaWNrQ2xvc2UmJih0aGlzLmRvY3VtZW50Q2xpY2tMaXN0ZW5lcj10aGlzLnJlbmRlcmVyLmxpc3Rlbih0aGlzLmRvY3VtZW50LCJjbGljayIsYT0+e2E9PT10aGlzLmlnbm9yZWRFdmVudD9kZWxldGUgdGhpcy5pZ25vcmVkRXZlbnQ6KHRoaXMuc21hcnRPcGVuU2VydmljZS5vcGVu'@;
put 'PSExLGEudGFyZ2V0LmZvY3VzKCkpfSkpfXJlbW92ZUNsaWNrTGlzdGVuZXIoKXt0aGlzLm91dHNpZGVDbGlja0Nsb3NlJiYoZGVsZXRlIHRoaXMuaWdub3JlZEV2ZW50LHRoaXMuZG9jdW1lbnRDbGlja0xpc3RlbmVyJiYodGhpcy5kb2N1bWVudENsaWNrTGlzdGVuZXIoKSxkZWxldGUgdGhp'@;
put 'cy5kb2N1bWVudENsaWNrTGlzdGVuZXIpKX1hZGRFc2NhcGVMaXN0ZW5lcigpe3RoaXMuZXNjYXBlTGlzdGVuZXI9dGhpcy5yZW5kZXJlci5saXN0ZW4odGhpcy5kb2N1bWVudCwia2V5ZG93bi5lc2NhcGUiLCgpPT57dGhpcy5zbWFydE9wZW5TZXJ2aWNlLm9wZW49ITEsdGhpcy5zZXRBbmNo'@;
put 'b3JGb2N1cygpfSl9cmVtb3ZlRXNjYXBlTGlzdGVuZXIoKXt0aGlzLmVzY2FwZUxpc3RlbmVyJiYodGhpcy5lc2NhcGVMaXN0ZW5lcigpLGRlbGV0ZSB0aGlzLmVzY2FwZUxpc3RlbmVyKX1zZXRDbG9zZUZvY3VzKCl7dGhpcy5jbG9zZUJ1dHRvblJlZi5uYXRpdmVFbGVtZW50LmZvY3VzKCl9'@;
put 'c2V0QW5jaG9yRm9jdXMoKXt0aGlzLmFuY2hvckJ1dHRvblJlZi5uYXRpdmVFbGVtZW50LmZvY3VzKCl9dGVzdEZvclNtYXJ0UG9wb3ZlckNvbnRlbnRDb250YWluZXIoYSl7bGV0IGQ9YS50YXJnZXQ7Zm9yKDtkLmNsYXNzTGlzdCYmImJvZHkiIT09ZC5wYXJlbnRFbGVtZW50LmxvY2FsTmFt'@;
put 'ZTspZD1kLnBhcmVudEVsZW1lbnQ7cmV0dXJuISFkLmNsYXNzTGlzdCYmIWQuY2xhc3NMaXN0LmNvbnRhaW5zKCJjbHItcG9wb3Zlci1jb250ZW50Iil9cmVtb3ZlQWxsRXZlbnRMaXN0ZW5lcnMoKXt0aGlzLnJlbW92ZVNjcm9sbExpc3RlbmVyKCksdGhpcy5yZW1vdmVDbGlja0xpc3RlbmVy'@;
put 'KCksdGhpcy5yZW1vdmVFc2NhcGVMaXN0ZW5lcigpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh4cihFbykseHIoc2MpLHhyKHZzKSl9LGMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCksUHg9KCgpPT57'@;
put 'Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQpe2EuYW5jaG9yQnV0dG9uUmVmPWR9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKE94KSxHZShKaSkpfSxjLlx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJjbHJQb3BvdmVyQW5jaG9y'@;
put 'IiwiIl1dLGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiZUcigiY2xyLWFuY2hvciIsITApfX0pLGN9KSgpLEwxZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoKXt0aGlzLmVsZW1lbnRSZWY9YSx0aGlzLnNtYXJ0RXZlbnRzU2VydmljZT1kLHRoaXMu'@;
put 'c21hcnRPcGVuU2VydmljZT1oLHRoaXMuY2xvc2VDaGFuZ2U9bmV3IEtyLHRoaXMuc3Vic2NyaXB0aW9ucz1bXSx0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChoLm9wZW5DaGFuZ2UucGlwZSgkbChmPT4hZikpLnN1YnNjcmliZSgoKT0+e3RoaXMuY2xvc2VDaGFuZ2UubmV4dCgpfSkpfWhhbmRs'@;
put 'ZUNsaWNrKGEpe3RoaXMuc21hcnRPcGVuU2VydmljZS50b2dnbGVXaXRoRXZlbnQoYSksdGhpcy5zbWFydEV2ZW50c1NlcnZpY2Uuc2V0QW5jaG9yRm9jdXMoKX1uZ0FmdGVyVmlld0luaXQoKXt0aGlzLnNtYXJ0RXZlbnRzU2VydmljZS5jbG9zZUJ1dHRvblJlZj10aGlzLmVsZW1lbnRSZWYs'@;
put 'dGhpcy5zbWFydEV2ZW50c1NlcnZpY2Uuc2V0Q2xvc2VGb2N1cygpfW5nT25EZXN0cm95KCl7dGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2goYT0+YS51bnN1YnNjcmliZSgpKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2UoSmkpLEdlKE94KSxH'@;
put 'ZShzYykpfSxjLlx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJjbHJQb3BvdmVyQ2xvc2VCdXR0b24iLCIiXV0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsxJmEmJkZ0KCJjbGljayIsZnVuY3Rpb24oZil7cmV0dXJuIGQuaGFuZGxlQ2xpY2soZil9'@;
put 'KSwyJmEmJlRyKCJjbHItc21hcnQtY2xvc2UtYnV0dG9uIiwhMCl9LG91dHB1dHM6e2Nsb3NlQ2hhbmdlOiJjbHJQb3BvdmVyT25DbG9zZUNoYW5nZSJ9fSksY30pKCk7dmFyIGgxPWZ1bmN0aW9uKGMpe3JldHVybiBjW2MuVkVSVElDQUw9MF09IlZFUlRJQ0FMIixjW2MuSE9SSVpPTlRBTD0x'@;
put 'XT0iSE9SSVpPTlRBTCIsY30oaDF8fHt9KSxPcz1mdW5jdGlvbihjKXtyZXR1cm4gY1tjLlNUQVJUPTBdPSJTVEFSVCIsY1tjLkNFTlRFUj0uNV09IkNFTlRFUiIsY1tjLkVORD0xXT0iRU5EIixjfShPc3x8e30pLEZ4PWZ1bmN0aW9uKGMpe3JldHVybiBjW2MuQk9UVE9NPTBdPSJCT1RUT00i'@;
put 'LGNbYy5MRUZUPTFdPSJMRUZUIixjW2MuUklHSFQ9Ml09IlJJR0hUIixjW2MuVE9QPTNdPSJUT1AiLGN9KEZ4fHx7fSk7Y29uc3QgbW09Yz0+KHsuLi5jLHNpZGU6LTEqYy5zaWRlfSksYWc9KGMsbCk9Pntjb25zdCBhPWMuY29udGVudCsobD8uNTotLjUpO3JldHVybiBhPDB8fGE+MT9jOnsu'@;
put 'Li5jLGNvbnRlbnQ6YX19O2Z1bmN0aW9uIE95KGMsbCxhKXtyZXR1cm4gZD0+bChjKGQpLGEpfWZ1bmN0aW9uIF9oKGMsbCxhKXtsZXQgZD1sLmxlZnQsaD1sLnRvcDtzd2l0Y2goYy5heGlzK2Muc2lkZSl7Y2FzZS0xOmQrPU8xZShjLGwsYSksaC09YS5oZWlnaHQ7YnJlYWs7Y2FzZSAxOmQr'@;
put 'PU8xZShjLGwsYSksaCs9bC5oZWlnaHQ7YnJlYWs7Y2FzZSAwOmQtPWEud2lkdGgsaCs9UDFlKGMsbCxhKTticmVhaztjYXNlIDI6ZCs9bC53aWR0aCxoKz1QMWUoYyxsLGEpfXJldHVybnt4T2Zmc2V0OmQseU9mZnNldDpofX1mdW5jdGlvbiBPMWUoYyxsLGEpe2xldCBkPTA7c3dpdGNoKGMu'@;
put 'YW5jaG9yKXtjYXNlIE9zLlNUQVJUOmJyZWFrO2Nhc2UgT3MuQ0VOVEVSOmQrPWwud2lkdGgvMjticmVhaztjYXNlIE9zLkVORDpkKz1sLndpZHRofXN3aXRjaChjLmNvbnRlbnQpe2Nhc2UgT3MuU1RBUlQ6YnJlYWs7Y2FzZSBPcy5DRU5URVI6ZC09YS53aWR0aC8yO2JyZWFrO2Nhc2UgT3Mu'@;
put 'RU5EOmQtPWEud2lkdGh9cmV0dXJuIGR9ZnVuY3Rpb24gUDFlKGMsbCxhKXtsZXQgZD0wO3N3aXRjaChjLmFuY2hvcil7Y2FzZSBPcy5TVEFSVDpicmVhaztjYXNlIE9zLkNFTlRFUjpkKz1sLmhlaWdodC8yO2JyZWFrO2Nhc2UgT3MuRU5EOmQrPWwuaGVpZ2h0fXN3aXRjaChjLmNvbnRlbnQp'@;
put 'e2Nhc2UgT3MuU1RBUlQ6YnJlYWs7Y2FzZSBPcy5DRU5URVI6ZC09YS5oZWlnaHQvMjticmVhaztjYXNlIE9zLkVORDpkLT1hLmhlaWdodH1yZXR1cm4gZH1sZXQgRjFlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkKXt0aGlzLmV2ZW50U2VydmljZT1hLHRoaXMucGxhdGZvcm1JZD1k'@;
put 'LHRoaXMuX3Nob3VsZFJlYWxpZ249bmV3IFduLHRoaXMuc2hvdWxkUmVhbGlnbj10aGlzLl9zaG91bGRSZWFsaWduLmFzT2JzZXJ2YWJsZSgpfXJlYWxpZ24oKXt0aGlzLl9zaG91bGRSZWFsaWduLm5leHQoKX1hbGlnbkNvbnRlbnQoYSl7aWYoIXRsKHRoaXMucGxhdGZvcm1JZCkpcmV0dXJu'@;
put 'e3hPZmZzZXQ6MCx5T2Zmc2V0OjB9O3RoaXMuY3VycmVudEFuY2hvckNvb3Jkcz10aGlzLmV2ZW50U2VydmljZS5hbmNob3JCdXR0b25SZWYubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSx0aGlzLmN1cnJlbnRDb250ZW50Q29vcmRzPWEuZ2V0Qm91bmRpbmdDbGllbnRS'@;
put 'ZWN0KCksdGhpcy5jb250ZW50T2Zmc2V0cz1faCh0aGlzLnBvc2l0aW9uLHRoaXMuY3VycmVudEFuY2hvckNvb3Jkcyx0aGlzLmN1cnJlbnRDb250ZW50Q29vcmRzKTtjb25zdCBkPWZ1bmN0aW9uIFh6ZShjLGwpe2NvbnN0IGE9W10sZF9ib3R0b209Yy55T2Zmc2V0K2wuaGVpZ2h0LGRfbGVm'@;
put 'dD1jLnhPZmZzZXQsZF9yaWdodD1jLnhPZmZzZXQrbC53aWR0aDtyZXR1cm4gYy55T2Zmc2V0Pj0wfHxhLnB1c2goRnguVE9QKSxkX2xlZnQ+PTB8fGEucHVzaChGeC5MRUZUKSxkX2JvdHRvbTw9KHdpbmRvdy5pbm5lckhlaWdodHx8ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhl'@;
put 'aWdodCl8fGEucHVzaChGeC5CT1RUT00pLGRfcmlnaHQ8PSh3aW5kb3cuaW5uZXJXaWR0aHx8ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoKXx8YS5wdXNoKEZ4LlJJR0hUKSxhfSh0aGlzLmNvbnRlbnRPZmZzZXRzLHRoaXMuY3VycmVudENvbnRlbnRDb29yZHMpLGg9ZC5y'@;
put 'ZWR1Y2UoKGYsdik9PmYrdiwwKTtyZXR1cm4gMT09PWQubGVuZ3RoJiZ0aGlzLnBvc2l0aW9uLmF4aXM9PT1oMS5WRVJUSUNBTD90aGlzLmhhbmRsZVZlcnRpY2FsQXhpc09uZVZpb2xhdGlvbihoKToxPT09ZC5sZW5ndGgmJnRoaXMucG9zaXRpb24uYXhpcz09PWgxLkhPUklaT05UQUw/dGhp'@;
put 'cy5oYW5kbGVIb3Jpem9udGFsQXhpc09uZVZpb2xhdGlvbihoKToyPT09ZC5sZW5ndGgmJnRoaXMucG9zaXRpb24uYXhpcz09PWgxLlZFUlRJQ0FMP3RoaXMuaGFuZGxlVmVydGljYWxBeGlzVHdvVmlvbGF0aW9ucyhoKToyPT09ZC5sZW5ndGgmJnRoaXMucG9zaXRpb24uYXhpcz09PWgxLkhP'@;
put 'UklaT05UQUwmJnRoaXMuaGFuZGxlSG9yaXpvbnRhbEF4aXNUd29WaW9sYXRpb25zKGgpLHRoaXMuY3VycmVudENvbnRlbnRDb29yZHMudG9wPDAmJih0aGlzLmNvbnRlbnRPZmZzZXRzLnlPZmZzZXQrPU1hdGguYWJzKHRoaXMuY3VycmVudENvbnRlbnRDb29yZHMudG9wKSksdGhpcy5jb250'@;
put 'ZW50T2Zmc2V0cy55T2Zmc2V0K3RoaXMuY3VycmVudEFuY2hvckNvb3Jkcy55PDAmJih0aGlzLmNvbnRlbnRPZmZzZXRzLnlPZmZzZXQ9MC10aGlzLmN1cnJlbnRDb250ZW50Q29vcmRzLnRvcCksdGhpcy5jb250ZW50T2Zmc2V0c31oYW5kbGVWZXJ0aWNhbEF4aXNPbmVWaW9sYXRpb24oYSl7'@;
put 'c3dpdGNoKGEpe2Nhc2UgMDpjYXNlIDM6dGhpcy5jb250ZW50T2Zmc2V0cz1faChtbSh0aGlzLnBvc2l0aW9uKSx0aGlzLmN1cnJlbnRBbmNob3JDb29yZHMsdGhpcy5jdXJyZW50Q29udGVudENvb3Jkcyk7YnJlYWs7Y2FzZSAxOnRoaXMuY29udGVudE9mZnNldHM9X2godGhpcy5wb3NpdGlv'@;
put 'bix0aGlzLmN1cnJlbnRBbmNob3JDb29yZHMsdGhpcy5jdXJyZW50Q29udGVudENvb3JkcyksdGhpcy5jb250ZW50T2Zmc2V0cy54T2Zmc2V0PDAmJih0aGlzLmNvbnRlbnRPZmZzZXRzLnhPZmZzZXQ9MTApO2JyZWFrO2Nhc2UgMjp0aGlzLmNvbnRlbnRPZmZzZXRzPV9oKGFnKHRoaXMucG9z'@;
put 'aXRpb24sITApLHRoaXMuY3VycmVudEFuY2hvckNvb3Jkcyx0aGlzLmN1cnJlbnRDb250ZW50Q29vcmRzKX19aGFuZGxlVmVydGljYWxBeGlzVHdvVmlvbGF0aW9ucyhhKXtzd2l0Y2goYSl7Y2FzZSA1Ontjb25zdCBkPU95KG1tLGFnLCEwKTt0aGlzLmNvbnRlbnRPZmZzZXRzPV9oKGQodGhp'@;
put 'cy5wb3NpdGlvbiksdGhpcy5jdXJyZW50QW5jaG9yQ29vcmRzLHRoaXMuY3VycmVudENvbnRlbnRDb29yZHMpO2JyZWFrfWNhc2UgNDp7Y29uc3QgZD1PeShtbSxhZywhMSk7dGhpcy5jb250ZW50T2Zmc2V0cz1faChkKHRoaXMucG9zaXRpb24pLHRoaXMuY3VycmVudEFuY2hvckNvb3Jkcyx0'@;
put 'aGlzLmN1cnJlbnRDb250ZW50Q29vcmRzKTticmVha31jYXNlIDM6ZGVmYXVsdDpicmVhaztjYXNlIDI6e2NvbnN0IGQ9T3kobW0sYWcsITApO3RoaXMuY29udGVudE9mZnNldHM9X2goZCh0aGlzLnBvc2l0aW9uKSx0aGlzLmN1cnJlbnRBbmNob3JDb29yZHMsdGhpcy5jdXJyZW50Q29udGVu'@;
put 'dENvb3Jkcyk7YnJlYWt9Y2FzZSAxOntjb25zdCBkPU95KG1tLGFnLCExKTt0aGlzLmNvbnRlbnRPZmZzZXRzPV9oKGQodGhpcy5wb3NpdGlvbiksdGhpcy5jdXJyZW50QW5jaG9yQ29vcmRzLHRoaXMuY3VycmVudENvbnRlbnRDb29yZHMpO2JyZWFrfX19aGFuZGxlSG9yaXpvbnRhbEF4aXNP'@;
put 'bmVWaW9sYXRpb24oYSl7c3dpdGNoKGEpe2Nhc2UgMTpjYXNlIDI6dGhpcy5jb250ZW50T2Zmc2V0cz1faChtbSh0aGlzLnBvc2l0aW9uKSx0aGlzLmN1cnJlbnRBbmNob3JDb29yZHMsdGhpcy5jdXJyZW50Q29udGVudENvb3Jkcyk7YnJlYWs7Y2FzZSAwOnRoaXMuY29udGVudE9mZnNldHM9'@;
put 'X2goYWcodGhpcy5wb3NpdGlvbiwhMCksdGhpcy5jdXJyZW50QW5jaG9yQ29vcmRzLHRoaXMuY3VycmVudENvbnRlbnRDb29yZHMpO2JyZWFrO2Nhc2UgMzp0aGlzLmNvbnRlbnRPZmZzZXRzPV9oKGFnKHRoaXMucG9zaXRpb24pLHRoaXMuY3VycmVudEFuY2hvckNvb3Jkcyx0aGlzLmN1cnJl'@;
put 'bnRDb250ZW50Q29vcmRzKX19aGFuZGxlSG9yaXpvbnRhbEF4aXNUd29WaW9sYXRpb25zKGEpe3N3aXRjaChhKXtjYXNlIDU6Y2FzZSA0Ontjb25zdCBkPU95KG1tLGFnLCExKTt0aGlzLmNvbnRlbnRPZmZzZXRzPV9oKGQodGhpcy5wb3NpdGlvbiksdGhpcy5jdXJyZW50QW5jaG9yQ29vcmRz'@;
put 'LHRoaXMuY3VycmVudENvbnRlbnRDb29yZHMpO2JyZWFrfWNhc2UgMzpkZWZhdWx0OmJyZWFrO2Nhc2UgMjpjYXNlIDE6e2NvbnN0IGQ9T3kobW0sYWcsITApO3RoaXMuY29udGVudE9mZnNldHM9X2goZCh0aGlzLnBvc2l0aW9uKSx0aGlzLmN1cnJlbnRBbmNob3JDb29yZHMsdGhpcy5jdXJy'@;
put 'ZW50Q29udGVudENvb3Jkcyk7YnJlYWt9fX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoeHIoT3gpLHhyKGlvKSl9LGMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCksSHg9KCgpPT57Y2xhc3MgY3tjb25z'@;
put 'dHJ1Y3RvcihhLGQsaCxmLHYsTSxEKXt0aGlzLmRvY3VtZW50PWEsdGhpcy5jb250YWluZXI9ZCx0aGlzLnRlbXBsYXRlPWgsdGhpcy5yZW5kZXJlcj1mLHRoaXMuc21hcnRQb3NpdGlvblNlcnZpY2U9dix0aGlzLnNtYXJ0RXZlbnRzU2VydmljZT1NLHRoaXMuc21hcnRPcGVuU2VydmljZT1E'@;
put 'LHRoaXMuc3Vic2NyaXB0aW9ucz1bXSx0aGlzLnJlbW92ZUNsaWNrTGlzdGVuZXJGbj1udWxsLHRoaXMuc2hvdWxkUmVhbGlnbj0hMSx0aGlzLnByZXZpb3VzQ29udGVudEhlaWdodD1udWxsLHRoaXMuY2hlY2tDb2xsZWN0b3I9bmV3IEtyfXNldCBvcGVuKGEpe3RoaXMuc21hcnRPcGVuU2Vy'@;
put 'dmljZS5vcGVuPSEhYX1zZXQgY29udGVudEF0KGEpe3RoaXMuc21hcnRQb3NpdGlvblNlcnZpY2UucG9zaXRpb249YX1zZXQgb3V0c2lkZUNsaWNrQ2xvc2UoYSl7dGhpcy5zbWFydEV2ZW50c1NlcnZpY2Uub3V0c2lkZUNsaWNrQ2xvc2U9ISFhfXNldCBzY3JvbGxUb0Nsb3NlKGEpe3RoaXMu'@;
put 'c21hcnRFdmVudHNTZXJ2aWNlLnNjcm9sbFRvQ2xvc2U9ISFhfW5nQWZ0ZXJDb250ZW50Q2hlY2tlZCgpe2lmKHRoaXMuc21hcnRPcGVuU2VydmljZS5vcGVuJiZ0aGlzLnZpZXcpe2NvbnN0IGE9dGhpcy52aWV3LnJvb3ROb2Rlc1swXS5vZmZzZXRIZWlnaHQ7KHRoaXMuc2hvdWxkUmVhbGln'@;
put 'bnx8bnVsbCE9PXRoaXMucHJldmlvdXNDb250ZW50SGVpZ2h0JiZ0aGlzLnByZXZpb3VzQ29udGVudEhlaWdodCE9PWEpJiYodGhpcy5wcmV2aW91c0NvbnRlbnRIZWlnaHQ9YSx0aGlzLmNoZWNrQ29sbGVjdG9yLmVtaXQoKSl9fW5nQWZ0ZXJWaWV3SW5pdCgpe3RoaXMuc3Vic2NyaXB0aW9u'@;
put 'cy5wdXNoKHRoaXMuc21hcnRPcGVuU2VydmljZS5vcGVuQ2hhbmdlLnN1YnNjcmliZShhPT57YT90aGlzLmFkZENvbnRlbnQoKTp0aGlzLnJlbW92ZUNvbnRlbnQoKX0pLHRoaXMuc21hcnRQb3NpdGlvblNlcnZpY2Uuc2hvdWxkUmVhbGlnbi5zdWJzY3JpYmUoKCk9Pnt0aGlzLnNob3VsZFJl'@;
put 'YWxpZ249ITB9KSx0aGlzLmNoZWNrQ29sbGVjdG9yLnBpcGUoZm0oMCkpLnN1YnNjcmliZSgoKT0+e3RoaXMuYWxpZ25Db250ZW50KCksdGhpcy5zaG91bGRSZWFsaWduPSExLHRoaXMudmlldyYmKHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy52aWV3LnJvb3ROb2Rlc1swXSwib3BhY2l0'@;
put 'eSIsIjEiKSx0aGlzLnNtYXJ0T3BlblNlcnZpY2UucG9wb3ZlclZpc2libGVFbWl0KCEwKSl9KSl9bmdPbkRlc3Ryb3koKXt0aGlzLnJlbW92ZUNvbnRlbnQoKSx0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChhPT5hLnVuc3Vic2NyaWJlKCkpfWFkZENvbnRlbnQoKXt0aGlzLnZpZXc9dGhp'@;
put 'cy5jb250YWluZXIuY3JlYXRlRW1iZWRkZWRWaWV3KHRoaXMudGVtcGxhdGUpO2NvbnN0W2FdPXRoaXMudmlldy5yb290Tm9kZXM7dGhpcy5zbWFydEV2ZW50c1NlcnZpY2UuY29udGVudFJlZj1hLHRoaXMucmVuZGVyZXIuYWRkQ2xhc3MoYSwiY2xyLXBvcG92ZXItY29udGVudCIpLHRoaXMu'@;
put 'cmVuZGVyZXIuc2V0U3R5bGUoYSwidG9wIiwiMHB4IiksdGhpcy5yZW5kZXJlci5zZXRTdHlsZShhLCJsZWZ0IiwiMHB4IiksdGhpcy5yZW5kZXJlci5zZXRTdHlsZShhLCJvcGFjaXR5IiwiMCIpLHRoaXMucmVtb3ZlQ2xpY2tMaXN0ZW5lckZuPXRoaXMucmVuZGVyZXIubGlzdGVuKGEsImNs'@;
put 'aWNrIixkPT57dGhpcy5zbWFydE9wZW5TZXJ2aWNlLm9wZW5FdmVudD1kfSksdGhpcy52aWV3LnJvb3ROb2Rlcy5mb3JFYWNoKGQ9Pnt0aGlzLnJlbmRlcmVyLmFwcGVuZENoaWxkKHRoaXMuZG9jdW1lbnQuYm9keSxkKX0pLHRoaXMuc2hvdWxkUmVhbGlnbj0hMH1yZW1vdmVDb250ZW50KCl7'@;
put 'dGhpcy52aWV3JiYodGhpcy5yZW1vdmVDbGlja0xpc3RlbmVyRm4mJih0aGlzLnJlbW92ZUNsaWNrTGlzdGVuZXJGbigpLHRoaXMucmVtb3ZlQ2xpY2tMaXN0ZW5lckZuPW51bGwpLHRoaXMudmlldy5yb290Tm9kZXMuZm9yRWFjaChhPT50aGlzLnJlbmRlcmVyLnJlbW92ZUNoaWxkKHRoaXMu'@;
put 'ZG9jdW1lbnQuYm9keSxhKSksdGhpcy5jb250YWluZXIuY2xlYXIoKSxkZWxldGUgdGhpcy52aWV3LHRoaXMuc21hcnRPcGVuU2VydmljZS5wb3BvdmVyVmlzaWJsZUVtaXQoITEpKX1hbGlnbkNvbnRlbnQoKXtpZighdGhpcy52aWV3KXJldHVybjtjb25zdCBhPXRoaXMuc21hcnRQb3NpdGlv'@;
put 'blNlcnZpY2UuYWxpZ25Db250ZW50KHRoaXMudmlldy5yb290Tm9kZXNbMF0pO3RoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy52aWV3LnJvb3ROb2Rlc1swXSwidG9wIixgJHthLnlPZmZzZXR9cHhgKSx0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMudmlldy5yb290Tm9kZXNbMF0sImxl'@;
put 'ZnQiLGAke2EueE9mZnNldH1weGApLHRoaXMuc21hcnRPcGVuU2VydmljZS5wb3BvdmVyQWxpZ25lZEVtaXQodGhpcy52aWV3LnJvb3ROb2Rlc1swXSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKHZzKSxHZShEbyksR2UoU2wpLEdlKEVvKSxH'@;
put 'ZShGMWUpLEdlKE94KSxHZShzYykpfSxjLlx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJjbHJQb3BvdmVyQ29udGVudCIsIiJdXSxpbnB1dHM6e29wZW46W05uLk5vbmUsImNsclBvcG92ZXJDb250ZW50Iiwib3BlbiJdLGNvbnRlbnRBdDpbTm4uTm9uZSwiY2xyUG9wb3Zl'@;
put 'ckNvbnRlbnRBdCIsImNvbnRlbnRBdCJdLG91dHNpZGVDbGlja0Nsb3NlOltObi5Ob25lLCJjbHJQb3BvdmVyQ29udGVudE91dHNpZGVDbGlja1RvQ2xvc2UiLCJvdXRzaWRlQ2xpY2tDbG9zZSJdLHNjcm9sbFRvQ2xvc2U6W05uLk5vbmUsImNsclBvcG92ZXJDb250ZW50U2Nyb2xsVG9DbG9z'@;
put 'ZSIsInNjcm9sbFRvQ2xvc2UiXX19KSxjfSkoKSxOeD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMuc21hcnRPcGVuU2VydmljZT1hLHRoaXMub3BlbkNsb3NlQ2hhbmdlPW5ldyBLcix0aGlzLnN1YnNjcmlwdGlvbnM9W10sdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goYS5vcGVu'@;
put 'Q2hhbmdlLnN1YnNjcmliZShkPT57dGhpcy5vcGVuQ2xvc2VDaGFuZ2UubmV4dChkKX0pKX1oYW5kbGVDbGljayhhKXt0aGlzLnNtYXJ0T3BlblNlcnZpY2UudG9nZ2xlV2l0aEV2ZW50KGEpfW5nT25EZXN0cm95KCl7dGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2goYT0+YS51bnN1YnNjcmli'@;
put 'ZSgpKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2Uoc2MpKX0sYy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwiY2xyUG9wb3Zlck9wZW5DbG9zZUJ1dHRvbiIsIiJdXSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlv'@;
put 'bihhLGQpezEmYSYmRnQoImNsaWNrIixmdW5jdGlvbihmKXtyZXR1cm4gZC5oYW5kbGVDbGljayhmKX0pLDImYSYmVHIoImNsci1zbWFydC1vcGVuLWNsb3NlIiwhMCl9LG91dHB1dHM6e29wZW5DbG9zZUNoYW5nZToiY2xyUG9wb3Zlck9wZW5DbG9zZUNoYW5nZSJ9fSksY30pKCksVng9KCgp'@;
put 'PT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPWtpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1Bcih7fSksY30pKCk7dmFyIHdoPWZ1bmN0aW9uKGMpe3JldHVybiBjLlVQPSJ1cCIsYy5ET1dOPSJkb3duIixjLkxF'@;
put 'RlQ9ImxlZnQiLGMuUklHSFQ9InJpZ2h0IixjfSh3aHx8e30pO2xldCB3cD1jbGFzc3tjb25zdHJ1Y3RvcihsKXt0aGlzLnJlbmRlcmVyPWwsdGhpcy5fdW5saXN0ZW5GdW5jcz1bXX1nZXQgY3VycmVudCgpe3JldHVybiB0aGlzLl9jdXJyZW50fXJlc2V0KGwpe3RoaXMuX2N1cnJlbnQ9bH1s'@;
put 'aXN0ZW5Ub0Fycm93S2V5cyhsKXt0aGlzLl91bmxpc3RlbkZ1bmNzLnB1c2godGhpcy5yZW5kZXJlci5saXN0ZW4obCwia2V5ZG93bi5hcnJvd3VwIiwoKT0+IXRoaXMubW92ZSh3aC5VUCkpKSx0aGlzLl91bmxpc3RlbkZ1bmNzLnB1c2godGhpcy5yZW5kZXJlci5saXN0ZW4obCwia2V5ZG93'@;
put 'bi5hcnJvd2Rvd24iLCgpPT4hdGhpcy5tb3ZlKHdoLkRPV04pKSksdGhpcy5fdW5saXN0ZW5GdW5jcy5wdXNoKHRoaXMucmVuZGVyZXIubGlzdGVuKGwsImtleWRvd24uYXJyb3dsZWZ0IiwoKT0+IXRoaXMubW92ZSh3aC5MRUZUKSkpLHRoaXMuX3VubGlzdGVuRnVuY3MucHVzaCh0aGlzLnJl'@;
put 'bmRlcmVyLmxpc3RlbihsLCJrZXlkb3duLmFycm93cmlnaHQiLCgpPT4hdGhpcy5tb3ZlKHdoLlJJR0hUKSkpfXJlZ2lzdGVyQ29udGFpbmVyKGwsYT0iMCIpe3RoaXMucmVuZGVyZXIuc2V0QXR0cmlidXRlKGwsInRhYmluZGV4IixhKSx0aGlzLmxpc3RlblRvQXJyb3dLZXlzKGwpLHRoaXMu'@;
put 'X3VubGlzdGVuRnVuY3MucHVzaCh0aGlzLnJlbmRlcmVyLmxpc3RlbihsLCJrZXlkb3duLnNwYWNlIiwoKT0+IXRoaXMuYWN0aXZhdGVDdXJyZW50KCkpKSx0aGlzLl91bmxpc3RlbkZ1bmNzLnB1c2godGhpcy5yZW5kZXJlci5saXN0ZW4obCwia2V5ZG93bi5lbnRlciIsKCk9PiF0aGlzLmFj'@;
put 'dGl2YXRlQ3VycmVudCgpKSl9bW92ZVRvKGwpe3ZvaWQgMCE9PWwmJih0aGlzLmN1cnJlbnQmJnRoaXMuY3VycmVudC5ibHVyKCksbC5mb2N1cygpLHRoaXMuX2N1cnJlbnQ9bCl9bW92ZShsKXtsZXQgYT0hMTtpZih0aGlzLmN1cnJlbnQpe2NvbnN0IGQ9dGhpcy5jdXJyZW50W2xdO2QmJihC'@;
put 'TShkKT9kOmZvKGQpKS5zdWJzY3JpYmUoZj0+e2YmJih0aGlzLm1vdmVUbyhmKSxhPSEwKX0pfXJldHVybiBhfWFjdGl2YXRlQ3VycmVudCgpe3JldHVybiEoIXRoaXMuY3VycmVudHx8IXRoaXMuY3VycmVudC5hY3RpdmF0ZXx8KHRoaXMuY3VycmVudC5hY3RpdmF0ZSgpLDApKX1kZXRhY2hM'@;
put 'aXN0ZW5lcnMoKXt0aGlzLl91bmxpc3RlbkZ1bmNzLmZvckVhY2gobD0+bCgpKX19O3dwLlx1MDI3NWZhYz1mdW5jdGlvbihsKXtyZXR1cm4gbmV3KGx8fHdwKSh4cihFbykpfSx3cC5cdTAyNzVwcm92PWFuKHt0b2tlbjp3cCxmYWN0b3J5OndwLlx1MDI3NWZhY30pO2NvbnN0IFYxZT17cHJv'@;
put 'dmlkZTp3cCx1c2VGYWN0b3J5OmZ1bmN0aW9uIEp6ZShjLGwpe3JldHVybiBjfHxuZXcgd3AobCl9LGRlcHM6W1tuZXcgSTEsbmV3IGxkLHdwXSxFb119O3ZhciBSMj1mdW5jdGlvbihjKXtyZXR1cm4gY1tjLkJFRk9SRT0tMV09IkJFRk9SRSIsY1tjLkFGVEVSPTFdPSJBRlRFUiIsY30oUjJ8'@;
put 'fHt9KTtjbGFzcyBUZHt9VGRbInRvcC1yaWdodCJdPXtheGlzOmgxLlZFUlRJQ0FMLHNpZGU6UjIuQkVGT1JFLGFuY2hvcjpPcy5FTkQsY29udGVudDpPcy5FTkR9LFRkWyJ0b3AtbGVmdCJdPXtheGlzOmgxLlZFUlRJQ0FMLHNpZGU6UjIuQkVGT1JFLGFuY2hvcjpPcy5TVEFSVCxjb250ZW50'@;
put 'Ok9zLlNUQVJUfSxUZFsiYm90dG9tLXJpZ2h0Il09e2F4aXM6aDEuVkVSVElDQUwsc2lkZTpSMi5BRlRFUixhbmNob3I6T3MuRU5ELGNvbnRlbnQ6T3MuRU5EfSxUZFsiYm90dG9tLWxlZnQiXT17YXhpczpoMS5WRVJUSUNBTCxzaWRlOlIyLkFGVEVSLGFuY2hvcjpPcy5TVEFSVCxjb250ZW50'@;
put 'Ok9zLlNUQVJUfSxUZFsicmlnaHQtdG9wIl09e2F4aXM6aDEuSE9SSVpPTlRBTCxzaWRlOlIyLkFGVEVSLGFuY2hvcjpPcy5DRU5URVIsY29udGVudDpPcy5FTkR9LFRkWyJyaWdodC1ib3R0b20iXT17YXhpczpoMS5IT1JJWk9OVEFMLHNpZGU6UjIuQUZURVIsYW5jaG9yOk9zLlNUQVJULGNv'@;
put 'bnRlbnQ6T3MuU1RBUlR9LFRkWyJsZWZ0LXRvcCJdPXtheGlzOmgxLkhPUklaT05UQUwsc2lkZTpSMi5CRUZPUkUsYW5jaG9yOk9zLkNFTlRFUixjb250ZW50Ok9zLkVORH0sVGRbImxlZnQtYm90dG9tIl09e2F4aXM6aDEuSE9SSVpPTlRBTCxzaWRlOlIyLkJFRk9SRSxhbmNob3I6T3MuU1RB'@;
put 'UlQsY29udGVudDpPcy5TVEFSVH07Y29uc3QgTkw9bmV3IFN0KCJQT1BPVkVSX0hPU1RfQU5DSE9SIik7bGV0IFF6ZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMudG9nZ2xlU2VydmljZT1hLHRoaXMubGFzdE9wZW5DaGFuZ2U9bnVsbH1uZ09uSW5pdCgpe3RoaXMuc3Vic2Ny'@;
put 'aXB0aW9uPXRoaXMudG9nZ2xlU2VydmljZS5vcGVuQ2hhbmdlLnN1YnNjcmliZShhPT57dGhpcy5sYXN0T3BlbkNoYW5nZT1hfSl9bmdPbkRlc3Ryb3koKXt0aGlzLnN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKX1vbkVzY2FwZUtleShhKXtudWxsIT09dGhpcy5sYXN0T3BlbkNoYW5nZSYm'@;
put 'KCExPT09dGhpcy5sYXN0T3BlbkNoYW5nZSYmYS5zdG9wUHJvcGFnYXRpb24oKSx0aGlzLmxhc3RPcGVuQ2hhbmdlPW51bGwpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZShzYykpfSxjLlx1MDI3NWRpcj1Fcih7dHlwZTpjLGhvc3RCaW5kaW5n'@;
put 'czpmdW5jdGlvbihhLGQpezEmYSYmRnQoImtleXVwLmVzY2FwZSIsZnVuY3Rpb24oZil7cmV0dXJuIGQub25Fc2NhcGVLZXkoZil9KX0sc3RhbmRhbG9uZTohMH0pLGN9KSgpLG9nPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMp'@;
put 'fSxjLlx1MDI3NWRpcj1Fcih7dHlwZTpjLHN0YW5kYWxvbmU6ITAsZmVhdHVyZXM6W2RhKFtzYyxPeCxGMWUse3Byb3ZpZGU6TkwsdXNlRXhpc3Rpbmc6Sml9XSksdmQoW1F6ZV0pXX0pLGN9KSgpO2NsYXNzIE9Ze3N0YXRpYyBsaW5rUGFyZW50KGwsYSxkKXtsLmZvckVhY2goaD0+aFtkXT1h'@;
put 'KX1zdGF0aWMgbGlua1ZlcnRpY2FsKGwsYT0hMCl7bC5mb3JFYWNoKChkLGgpPT57aD4wJiYoZC51cD1sW2gtMV0pLGg8bC5sZW5ndGgtMSYmKGQuZG93bj1sW2grMV0pfSksYSYmbC5sZW5ndGg+MSYmKGxbMF0udXA9bFtsLmxlbmd0aC0xXSxsW2wubGVuZ3RoLTFdLmRvd249bFswXSl9fWxl'@;
put 'dCB2bT0oKCk9PntjbGFzcyBje3VzZXJEZWZpbmVkV2lkdGgoYSl7Y29uc3QgZD1hLmNsb25lTm9kZSghMCk7ZC5pZCYmKGQuaWQ9ZC5pZCsiLWNsb25lIiksZC5jbGFzc0xpc3QuYWRkKCJkYXRhZ3JpZC1jZWxsLXdpZHRoLXplcm8iKSxkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGQpO2Nv'@;
put 'bnN0IGg9dGhpcy5jbGllbnRSZWN0KGQpLndpZHRoO3JldHVybiBkLnJlbW92ZSgpLGh9c2Nyb2xsQmFyV2lkdGgoYSl7cmV0dXJuIGEub2Zmc2V0V2lkdGgtYS5jbGllbnRXaWR0aH1zY3JvbGxXaWR0aChhKXtyZXR1cm4gYS5zY3JvbGxXaWR0aHx8MH1jb21wdXRlZEhlaWdodChhKXtyZXR1'@;
put 'cm4gcGFyc2VJbnQoZ2V0Q29tcHV0ZWRTdHlsZShhKS5nZXRQcm9wZXJ0eVZhbHVlKCJoZWlnaHQiKSwxMCl9Y2xpZW50UmVjdChhKXtjb25zdCBkPWEuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cmV0dXJue3RvcDpwYXJzZUludChkLnRvcCwxMCksYm90dG9tOnBhcnNlSW50KGQuYm90dG9t'@;
put 'LDEwKSxsZWZ0OnBhcnNlSW50KGQubGVmdCwxMCkscmlnaHQ6cGFyc2VJbnQoZC5yaWdodCwxMCksd2lkdGg6cGFyc2VJbnQoZC53aWR0aCwxMCksaGVpZ2h0OnBhcnNlSW50KGQuaGVpZ2h0LDEwKX19bWluV2lkdGgoYSl7cmV0dXJuIHBhcnNlSW50KGdldENvbXB1dGVkU3R5bGUoYSkuZ2V0'@;
put 'UHJvcGVydHlWYWx1ZSgibWluLXdpZHRoIiksMTApfWZvY3VzKGEpe2EuZm9jdXMoKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCksVkw9KCgpPT57Y2xh'@;
put 'c3MgY3tjb25zdHJ1Y3RvcihhLGQsaCl7dGhpcy5lbGVtZW50PWEsdGhpcy5kb21BZGFwdGVyPWQsdGhpcy5yZW5kZXJlcj1oLHRoaXMuY2xyRXhwYW5kVHJpZ2dlcj0hMSx0aGlzLnN0YXJ0SGVpZ2h0PTB9Z2V0IGV4cGFuZEFuaW1hdGlvbigpe3JldHVybnt2YWx1ZTp0aGlzLmNsckV4cGFu'@;
put 'ZFRyaWdnZXIscGFyYW1zOntzdGFydEhlaWdodDp0aGlzLnN0YXJ0SGVpZ2h0fX19YW5pbWF0aW9uU3RhcnQoYSl7InZvaWQiIT09YS5mcm9tU3RhdGUmJnRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQsIm92ZXJmbG93IiwiaGlkZGVuIil9YW5pbWF0'@;
put 'aW9uRG9uZShhKXsidm9pZCIhPT1hLmZyb21TdGF0ZSYmKHRoaXMucmVuZGVyZXIucmVtb3ZlU3R5bGUodGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQsIm92ZXJmbG93IiksdGhpcy51cGRhdGVTdGFydEhlaWdodCgpKX11cGRhdGVTdGFydEhlaWdodCgpe3RoaXMuc3RhcnRIZWlnaHQ9dGhp'@;
put 'cy5kb21BZGFwdGVyLmNvbXB1dGVkSGVpZ2h0KHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50KXx8MH19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2UoSmkpLEdlKHZtKSxHZShFbykpfSxjLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpb'@;
put 'WyJjbHItZXhwYW5kYWJsZS1hbmltYXRpb24iXV0saG9zdFZhcnM6MSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsxJmEmJmRVKCJAZXhwYW5kQW5pbWF0aW9uLnN0YXJ0IixmdW5jdGlvbihmKXtyZXR1cm4gZC5hbmltYXRpb25TdGFydChmKX0pKCJAZXhwYW5kQW5pbWF0aW9uLmRvbmUi'@;
put 'LGZ1bmN0aW9uKGYpe3JldHVybiBkLmFuaW1hdGlvbkRvbmUoZil9KSwyJmEmJmxVKCJAZXhwYW5kQW5pbWF0aW9uIixkLmV4cGFuZEFuaW1hdGlvbil9LGlucHV0czp7Y2xyRXhwYW5kVHJpZ2dlcjoiY2xyRXhwYW5kVHJpZ2dlciJ9LGZlYXR1cmVzOltkYShbdm1dKV0sbmdDb250ZW50U2Vs'@;
put 'ZWN0b3JzOnlvLGRlY2xzOjEsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoc2EoKSxZcigwKSl9LGVuY2Fwc3VsYXRpb246MixkYXRhOnthbmltYXRpb246W3loKCJleHBhbmRBbmltYXRpb24iLFtpdSgidHJ1ZSA8PT4gZmFsc2UiLFt1cyh7aGVpZ2h0OiJ7e3N0YXJ0SGVp'@;
put 'Z2h0fX1weCJ9KSxNMCgiMC4ycyBlYXNlLWluLW91dCIsdXMoe2hlaWdodDoiKiJ9KSldKV0pXX19KSxjfSkoKSxQWT0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9a2koe3R5cGU6Y30pLGMuXHUwMjc1'@;
put 'aW5qPUFyKHtpbXBvcnRzOltSYV19KSxjfSkoKSxlVWU9MDtjb25zdCBGeT1uZXcgU3QoIklGX0FDVElWRV9JRCIpLG5VZT17cHJvdmlkZTpGeSx1c2VGYWN0b3J5OmZ1bmN0aW9uIHRVZSgpe3JldHVybisrZVVlfX07bGV0IGY3PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLl9j'@;
put 'dXJyZW50Q2hhbmdlPW5ldyBXbn1nZXQgY3VycmVudENoYW5nZSgpe3JldHVybiB0aGlzLl9jdXJyZW50Q2hhbmdlLmFzT2JzZXJ2YWJsZSgpfWdldCBjdXJyZW50KCl7cmV0dXJuIHRoaXMuX2N1cnJlbnR9c2V0IGN1cnJlbnQoYSl7dGhpcy5fY3VycmVudCE9PWEmJih0aGlzLl9jdXJyZW50'@;
put 'PWEsdGhpcy5fY3VycmVudENoYW5nZS5uZXh0KGEpKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCksSHk9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcihh'@;
put 'LGQsaCxmKXt0aGlzLmlmQWN0aXZlU2VydmljZT1hLHRoaXMuaWQ9ZCx0aGlzLnRlbXBsYXRlPWgsdGhpcy5jb250YWluZXI9Zix0aGlzLmFjdGl2ZUNoYW5nZT1uZXcgS3IoITEpLHRoaXMud2FzQWN0aXZlPSExLHRoaXMuY2hlY2tBbmRVcGRhdGVWaWV3KGEuY3VycmVudCksdGhpcy5zdWJz'@;
put 'Y3JpcHRpb249YS5jdXJyZW50Q2hhbmdlLnN1YnNjcmliZSh2PT57dGhpcy5jaGVja0FuZFVwZGF0ZVZpZXcodil9KX1nZXQgYWN0aXZlKCl7cmV0dXJuIHRoaXMuaWZBY3RpdmVTZXJ2aWNlLmN1cnJlbnQ9PT10aGlzLmlkfXNldCBhY3RpdmUoYSl7YSYmKHRoaXMuaWZBY3RpdmVTZXJ2aWNl'@;
put 'LmN1cnJlbnQ9dGhpcy5pZCl9bmdPbkRlc3Ryb3koKXt0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpfXVwZGF0ZVZpZXcoYSl7YT90aGlzLmNvbnRhaW5lci5jcmVhdGVFbWJlZGRlZFZpZXcodGhpcy50ZW1wbGF0ZSk6dGhpcy5jb250YWluZXIuY2xlYXIoKX1jaGVja0FuZFVwZGF0'@;
put 'ZVZpZXcoYSl7Y29uc3QgZD1hPT09dGhpcy5pZDtkIT09dGhpcy53YXNBY3RpdmUmJih0aGlzLnVwZGF0ZVZpZXcoZCksdGhpcy5hY3RpdmVDaGFuZ2UuZW1pdChkKSx0aGlzLndhc0FjdGl2ZT1kKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2Uo'@;
put 'ZjcpLEdlKEZ5KSxHZShTbCksR2UoRG8pKX0sYy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwiY2xySWZBY3RpdmUiLCIiXV0saW5wdXRzOnthY3RpdmU6W05uLk5vbmUsImNscklmQWN0aXZlIiwiYWN0aXZlIl19LG91dHB1dHM6e2FjdGl2ZUNoYW5nZToiY2xySWZBY3Rp'@;
put 'dmVDaGFuZ2UifX0pLGN9KSgpLEwyPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgpe3RoaXMudG9nZ2xlU2VydmljZT1hLHRoaXMudGVtcGxhdGU9ZCx0aGlzLmNvbnRhaW5lcj1oLHRoaXMub3BlbkNoYW5nZT1uZXcgS3IoITEpLHRoaXMuc3Vic2NyaXB0aW9uPWEub3BlbkNoYW5n'@;
put 'ZS5zdWJzY3JpYmUoZj0+e3RoaXMudXBkYXRlVmlldyhmKSx0aGlzLm9wZW5DaGFuZ2UuZW1pdChmKX0pfWdldCBvcGVuKCl7cmV0dXJuIHRoaXMudG9nZ2xlU2VydmljZS5vcGVufXNldCBvcGVuKGEpe3RoaXMudG9nZ2xlU2VydmljZS5vcGVuPWF9bmdPbkRlc3Ryb3koKXt0aGlzLnN1YnNj'@;
put 'cmlwdGlvbi51bnN1YnNjcmliZSgpfXVwZGF0ZVZpZXcoYSl7YT90aGlzLmNvbnRhaW5lci5jcmVhdGVFbWJlZGRlZFZpZXcodGhpcy50ZW1wbGF0ZSk6dGhpcy5jb250YWluZXIuY2xlYXIoKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2Uoc2Mp'@;
put 'LEdlKFNsKSxHZShEbykpfSxjLlx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJjbHJJZk9wZW4iLCIiXV0saW5wdXRzOntvcGVuOltObi5Ob25lLCJjbHJJZk9wZW4iLCJvcGVuIl19LG91dHB1dHM6e29wZW5DaGFuZ2U6ImNscklmT3BlbkNoYW5nZSJ9fSksY30pKCksQjFl'@;
put 'PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZix2KXt0aGlzLnRlbXBsYXRlPWEsdGhpcy5jb250YWluZXI9ZCx0aGlzLmVsPWgsdGhpcy5yZW5kZXJlcj1mLHRoaXMuZXhwYW5kPXYsdGhpcy5leHBhbmRlZENoYW5nZT1uZXcgS3IoITApLHRoaXMuX2V4cGFuZGVkPSExLHRoaXMu'@;
put 'X3N1YnNjcmlwdGlvbnM9W10sdGhpcy5fc3Vic2NyaXB0aW9ucy5wdXNoKHYuZXhwYW5kQ2hhbmdlLnN1YnNjcmliZSgoKT0+e3RoaXMudXBkYXRlVmlldygpLHRoaXMuZXhwYW5kZWRDaGFuZ2UuZW1pdCh2LmV4cGFuZGVkKX0pKSx2Lmhhc0V4cGFuZFRlbXBsYXRlPSEhYX1nZXQgZXhwYW5k'@;
put 'ZWQoKXtyZXR1cm4gdGhpcy5fZXhwYW5kZWR9c2V0IGV4cGFuZGVkKGEpeyJib29sZWFuIj09dHlwZW9mIGEmJih0aGlzLmV4cGFuZC5leHBhbmRlZD1hLHRoaXMuX2V4cGFuZGVkPWEpfW5nT25Jbml0KCl7dGhpcy5leHBhbmQuZXhwYW5kYWJsZSsrLHRoaXMudXBkYXRlVmlldygpfW5nT25E'@;
put 'ZXN0cm95KCl7dGhpcy5leHBhbmQuZXhwYW5kYWJsZS0tLHRoaXMuX3N1YnNjcmlwdGlvbnMuZm9yRWFjaChhPT5hLnVuc3Vic2NyaWJlKCkpfXVwZGF0ZVZpZXcoKXtpZighdGhpcy5leHBhbmQuZXhwYW5kZWR8fDA9PT10aGlzLmNvbnRhaW5lci5sZW5ndGgpaWYodGhpcy50ZW1wbGF0ZSl0'@;
put 'aGlzLmV4cGFuZC5leHBhbmRlZD90aGlzLmNvbnRhaW5lci5jcmVhdGVFbWJlZGRlZFZpZXcodGhpcy50ZW1wbGF0ZSk6dGhpcy5jb250YWluZXIuY2xlYXIoKTtlbHNlIHRyeXt0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMuZWwubmF0aXZlRWxlbWVudCwiZGlzcGxheSIsdGhpcy5leHBh'@;
put 'bmQuZXhwYW5kZWQ/bnVsbDoibm9uZSIpfWNhdGNoe319fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKFNsLDgpLEdlKERvKSxHZShKaSksR2UoRW8pLEdlKFUxKSl9LGMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsImNscklm'@;
put 'RXhwYW5kZWQiLCIiXV0saW5wdXRzOntleHBhbmRlZDpbTm4uTm9uZSwiY2xySWZFeHBhbmRlZCIsImV4cGFuZGVkIl19LG91dHB1dHM6e2V4cGFuZGVkQ2hhbmdlOiJjbHJJZkV4cGFuZGVkQ2hhbmdlIn19KSxjfSkoKSxPMj0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVu'@;
put 'Y3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9a2koe3R5cGU6Y30pLGMuXHUwMjc1aW5qPUFyKHtpbXBvcnRzOltSYV19KSxjfSkoKTtjb25zdCByVWU9e3Byb3ZpZGU6bmV3IFN0KCJGT0NVU19PTl9WSUVXX0lOSVQiKSx1c2VWYWx1ZTohMH07bGV0IEJMPSgoKT0+e2Ns'@;
put 'YXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD1raSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9QXIoe3Byb3ZpZGVyczpbclVlXSxpbXBvcnRzOltSYV19KSxjfSkoKSxhVWU9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUw'@;
put 'Mjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPWtpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1Bcih7aW1wb3J0czpbUmEsQXMsVnhdfSksY30pKCksUDI9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQpe3RoaXMuZWw9YSx0aGlzLnJlbmRlcmVyPWQs'@;
put 'dGhpcy5jbHJMb2FkaW5nQ2hhbmdlPW5ldyBLcighMSksdGhpcy5idXR0b25TdGF0ZT16MSx0aGlzLnN0YXRlPXoxLkRFRkFVTFR9bG9hZGluZ1N0YXRlQ2hhbmdlKGEpe2lmKGEhPT10aGlzLnN0YXRlKXtzd2l0Y2godGhpcy5zdGF0ZT1hLGEpe2Nhc2UgejEuREVGQVVMVDp0aGlzLnJlbmRl'@;
put 'cmVyLnJlbW92ZVN0eWxlKHRoaXMuZWwubmF0aXZlRWxlbWVudCwid2lkdGgiKSx0aGlzLnJlbmRlcmVyLnJlbW92ZVN0eWxlKHRoaXMuZWwubmF0aXZlRWxlbWVudCwidHJhbnNmb3JtIiksdGhpcy5kaXNhYmxlZHx8dGhpcy5yZW5kZXJlci5yZW1vdmVBdHRyaWJ1dGUodGhpcy5lbC5uYXRp'@;
put 'dmVFbGVtZW50LCJkaXNhYmxlZCIpO2JyZWFrO2Nhc2UgejEuTE9BRElORzp0aGlzLnNldEV4cGxpY2l0QnV0dG9uV2lkdGgoKSx0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMuZWwubmF0aXZlRWxlbWVudCwidHJhbnNmb3JtIiwidHJhbnNsYXRleigwKSIpLHRoaXMucmVuZGVyZXIuc2V0'@;
put 'QXR0cmlidXRlKHRoaXMuZWwubmF0aXZlRWxlbWVudCwiZGlzYWJsZWQiLCIiKTticmVhaztjYXNlIHoxLlNVQ0NFU1M6dGhpcy5zZXRFeHBsaWNpdEJ1dHRvbldpZHRoKCk7YnJlYWs7Y2FzZSB6MS5FUlJPUjp0aGlzLmxvYWRpbmdTdGF0ZUNoYW5nZSh6MS5ERUZBVUxUKX10aGlzLmNsckxv'@;
put 'YWRpbmdDaGFuZ2UuZW1pdChhKX19c2V0RXhwbGljaXRCdXR0b25XaWR0aCgpe2lmKHRoaXMuZWwubmF0aXZlRWxlbWVudCYmdGhpcy5lbC5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCl7Y29uc3QgYT10aGlzLmVsLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRS'@;
put 'ZWN0KCksZD1NYXRoLm1heCg0MixhLndpZHRoKTt0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMuZWwubmF0aXZlRWxlbWVudCwid2lkdGgiLGAke2R9cHhgKX19fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKEppKSxHZShFbykpfSxjLlx1MDI3'@;
put 'NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJidXR0b24iLCJjbHJMb2FkaW5nIiwiIl1dLGhvc3RWYXJzOjEsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiZocigiZGlzYWJsZWQiLGQuZGlzYWJsZWQ/IiI6bnVsbCl9LGlucHV0czp7ZGlzYWJsZWQ6ImRpc2FibGVkIn0sb3V0'@;
put 'cHV0czp7Y2xyTG9hZGluZ0NoYW5nZToiY2xyTG9hZGluZ0NoYW5nZSJ9LGZlYXR1cmVzOltkYShbe3Byb3ZpZGU6RHgsdXNlRXhpc3Rpbmc6Y31dKV0sYXR0cnM6Q0hlLG5nQ29udGVudFNlbGVjdG9yczp5byxkZWNsczo0LHZhcnM6NSxjb25zdHM6W1szLCJuZ1N3aXRjaCJdLFs0LCJuZ1N3'@;
put 'aXRjaENhc2UiXSxbImNsYXNzIiwiY2xyLWxvYWRpbmctYnRuLWNvbnRlbnQiLDQsIm5nU3dpdGNoQ2FzZSJdLFsxLCJzcGlubmVyIiwic3Bpbm5lci1pbmxpbmUiXSxbMSwic3Bpbm5lciIsInNwaW5uZXItaW5saW5lIiwic3Bpbm5lci1jaGVjayJdLFsxLCJjbHItbG9hZGluZy1idG4tY29u'@;
put 'dGVudCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKHNhKCksZGUoMCwic3BhbiIsMCksZ3QoMSxTSGUsMiwxLCJuZy1jb250YWluZXIiLDEpKDIsTUhlLDIsMSwibmctY29udGFpbmVyIiwxKSgzLHhIZSwyLDEsInNwYW4iLDIpLGhlKCkpLDImYSYmKE1lKCJAcGFyZW50Iix2b2lk'@;
put 'IDApKCJuZ1N3aXRjaCIsZC5zdGF0ZSksZmUoKSxNZSgibmdTd2l0Y2hDYXNlIixkLmJ1dHRvblN0YXRlLkxPQURJTkcpLGZlKCksTWUoIm5nU3dpdGNoQ2FzZSIsZC5idXR0b25TdGF0ZS5TVUNDRVNTKSxmZSgpLE1lKCJuZ1N3aXRjaENhc2UiLGQuYnV0dG9uU3RhdGUuREVGQVVMVCkpfSxk'@;
put 'ZXBlbmRlbmNpZXM6W1MyLGNwXSxlbmNhcHN1bGF0aW9uOjIsZGF0YTp7YW5pbWF0aW9uOlt5aCgicGFyZW50IixbaXUoIjplbnRlciIsW10pXSkseWgoImRlZmF1bHRCdXR0b24iLFtpdSgiOmVudGVyIixbdXMoe29wYWNpdHk6MH0pLE0wKCIyMDBtcyAxMDBtcyBlYXNlLWluIix1cyh7b3Bh'@;
put 'Y2l0eToxfSkpXSksaXUoIjpsZWF2ZSIsW3VzKHtvcGFjaXR5OjB9KV0pXSkseWgoInNwaW5uZXIiLFtpdSgiOmVudGVyIixbdXMoe29wYWNpdHk6MH0pLE0wKCIyMDBtcyAxMDBtcyBlYXNlLWluIix1cyh7b3BhY2l0eToxfSkpXSksaXUoIjpsZWF2ZSIsW3VzKHtvcGFjaXR5OjF9KSxNMCgi'@;
put 'MTAwbXMgZWFzZS1vdXQiLHVzKHtvcGFjaXR5OjB9KSldKV0pLHloKCJ2YWxpZGF0ZWQiLFtpdSgiOmVudGVyIixbTTAoIjYwMG1zIix1UGUoW3VzKHt0cmFuc2Zvcm06InNjYWxlKDAsMCkiLG9mZnNldDowfSksdXMoe29wYWNpdHk6MSxvZmZzZXQ6LjJ9KSx1cyh7dHJhbnNmb3JtOiJzY2Fs'@;
put 'ZSgxLjIsMS4yKSIsb2Zmc2V0Oi40fSksdXMoe3RyYW5zZm9ybToic2NhbGUoLjksLjkpIixvZmZzZXQ6LjZ9KSx1cyh7dHJhbnNmb3JtOiJzY2FsZSgxLDEpIixvZmZzZXQ6MX0pXSkpXSksaXUoIjpsZWF2ZSIsW3VzKHtvcGFjaXR5OjF9KSxNMCgiMTAwbXMgZWFzZS1vdXQiLHVzKHtvcGFj'@;
put 'aXR5OjB9KSldKV0pXX19KSxjfSkoKSxzVWU9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPWtpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1Bcih7aW1wb3J0czpbUmFdfSksY30pKCksbFVlPSgoKT0+e2Ns'@;
put 'YXNzIGN7Y29uc3RydWN0b3IoKXtUcy5hZGRJY29ucyhUMGUpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9a2koe3R5cGU6Y30pLGMuXHUwMjc1aW5qPUFyKHtpbXBvcnRzOltzVWUsYVVlXX0pLGN9KSgpLGNVZT0oKCk9Pntj'@;
put 'bGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1sibmctY29tcG9uZW50Il1dLGRlY2xzOjAsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7fSxlbmNhcHN1bGF0aW9uOjJ9'@;
put 'KSxjfSkoKSxCeD0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9a2koe3R5cGU6Y30pLGMuXHUwMjc1aW5qPUFyKHt9KSxjfSkoKSx1VWU9MCxDaD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhp'@;
put 'cy5faWQ9ImNsci1mb3JtLWNvbnRyb2wtIisgKyt1VWUsdGhpcy5faWRDaGFuZ2U9bmV3IGVpKHRoaXMuX2lkKX1nZXQgaWQoKXtyZXR1cm4gdGhpcy5faWR9c2V0IGlkKGEpe3RoaXMuX2lkPWEsdGhpcy5faWRDaGFuZ2UubmV4dChhKX1nZXQgaWRDaGFuZ2UoKXtyZXR1cm4gdGhpcy5faWRD'@;
put 'aGFuZ2UuYXNPYnNlcnZhYmxlKCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpLGRVZT0wLHA3PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlz'@;
put 'Ll9pZD0iY2xyLWZvcm0tY29udGFpbmVyLSIrICsrZFVlLHRoaXMuX2lkQ2hhbmdlPW5ldyBlaSh0aGlzLl9pZCl9Z2V0IGlkKCl7cmV0dXJuIHRoaXMuX2lkfXNldCBpZChhKXt0aGlzLl9pZD1hLHRoaXMuX2lkQ2hhbmdlLm5leHQoYSl9Z2V0IGlkQ2hhbmdlKCl7cmV0dXJuIHRoaXMuX2lk'@;
put 'Q2hhbmdlLmFzT2JzZXJ2YWJsZSgpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKTtsZXQgRlk9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQpe3Ro'@;
put 'aXMuY29udHJvbElkU2VydmljZT1hLHRoaXMuY29udGFpbmVySWRTZXJ2aWNlPWQsdGhpcy5jb250cm9sSWRTdWZmaXg9ImFic3RyYWN0In1nZXQgaWQoKXtyZXR1cm4gdGhpcy5jb250YWluZXJJZFNlcnZpY2U/YCR7dGhpcy5jb250YWluZXJJZFNlcnZpY2UuaWR9LSR7dGhpcy5jb250cm9s'@;
put 'SWRTdWZmaXh9YDp0aGlzLmNvbnRyb2xJZFNlcnZpY2U/YCR7dGhpcy5jb250cm9sSWRTZXJ2aWNlLmlkfS0ke3RoaXMuY29udHJvbElkU3VmZml4fWA6bnVsbH19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2UoQ2gsOCksR2UocDcsOCkpfSxjLlx1'@;
put 'MDI3NWRpcj1Fcih7dHlwZTpjfSksY30pKCksaFVlPSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyBGWXtjb25zdHJ1Y3RvcihhLGQpe3N1cGVyKGEsZCksdGhpcy5jb250cm9sSWRTZXJ2aWNlPWEsdGhpcy5jb250YWluZXJJZFNlcnZpY2U9ZCx0aGlzLmNvbnRyb2xJZFN1ZmZpeD0iZXJyb3IifX1y'@;
put 'ZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZShDaCw4KSxHZShwNyw4KSl9LGMuXHUwMjc1Y21wPVZyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1jb250cm9sLWVycm9yIl1dLGhvc3RWYXJzOjUsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZh'@;
put 'JiYoaHIoImlkIixkLmlkKSxUcigiY2xyLXN1YnRleHQiLCEwKSgiZXJyb3IiLCEwKSl9LGZlYXR1cmVzOlt3YV0sbmdDb250ZW50U2VsZWN0b3JzOnlvLGRlY2xzOjEsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoc2EoKSxZcigwKSl9LGVuY2Fwc3VsYXRpb246Mn0pLGN9'@;
put 'KSgpLGpMPSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyBGWXtjb25zdHJ1Y3RvcihhLGQpe3N1cGVyKGEsZCksdGhpcy5jb250cm9sSWRTZXJ2aWNlPWEsdGhpcy5jb250YWluZXJJZFNlcnZpY2U9ZCx0aGlzLmNvbnRyb2xJZFN1ZmZpeD0iaGVscGVyIn19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0'@;
put 'aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2UoQ2gsOCksR2UocDcsOCkpfSxjLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItY29udHJvbC1oZWxwZXIiXV0saG9zdFZhcnM6Myxob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJihocigiaWQiLGQuaWQpLFRyKCJj'@;
put 'bHItc3VidGV4dCIsITApKX0sZmVhdHVyZXM6W3dhXSxuZ0NvbnRlbnRTZWxlY3RvcnM6eW8sZGVjbHM6MSx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihzYSgpLFlyKDApKX0sZW5jYXBzdWxhdGlvbjoyfSksY30pKCksZjE9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigp'@;
put 'e3RoaXMuX2FkZGl0aW9uYWxDb250cm9scz1bXSx0aGlzLl9jb250cm9sQ2hhbmdlcz1uZXcgV24sdGhpcy5fYWRkaXRpb25hbENvbnRyb2xzQ2hhbmdlcz1uZXcgV24sdGhpcy5faGVscGVycz1uZXcgV259Z2V0IGNvbnRyb2woKXtyZXR1cm4gdGhpcy5fY29udHJvbH1nZXQgY29udHJvbENo'@;
put 'YW5nZXMoKXtyZXR1cm4gdGhpcy5fY29udHJvbENoYW5nZXMuYXNPYnNlcnZhYmxlKCl9Z2V0IGFkZGl0aW9uYWxDb250cm9scygpe3JldHVybiB0aGlzLl9hZGRpdGlvbmFsQ29udHJvbHN9Z2V0IGFkZGl0aW9uYWxDb250cm9sc0NoYW5nZXMoKXtyZXR1cm4gdGhpcy5fYWRkaXRpb25hbENv'@;
put 'bnRyb2xzQ2hhbmdlcy5hc09ic2VydmFibGUoKX1nZXQgaGFzQWRkaXRpb25hbENvbnRyb2xzKCl7cmV0dXJuISF0aGlzLl9hZGRpdGlvbmFsQ29udHJvbHM/Lmxlbmd0aH1nZXQgaGVscGVyc0NoYW5nZSgpe3JldHVybiB0aGlzLl9oZWxwZXJzLmFzT2JzZXJ2YWJsZSgpfXNldENvbnRyb2wo'@;
put 'YSl7dGhpcy5fY29udHJvbD1hLHRoaXMuX2NvbnRyb2xDaGFuZ2VzLm5leHQoYSl9YWRkQWRkaXRpb25hbENvbnRyb2woYSl7dGhpcy5fYWRkaXRpb25hbENvbnRyb2xzLnB1c2goYSksdGhpcy5fYWRkaXRpb25hbENvbnRyb2xzQ2hhbmdlcy5uZXh0KHRoaXMuX2FkZGl0aW9uYWxDb250cm9s'@;
put 'cyl9c2V0SGVscGVycyhhKXt0aGlzLl9oZWxwZXJzLm5leHQoYSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpO3ZhciBBZD1mdW5jdGlvbihjKXtyZXR1'@;
put 'cm4gYy5OT05FPSJOT05FIixjLlZBTElEPSJWQUxJRCIsYy5JTlZBTElEPSJJTlZBTElEIixjfShBZHx8e30pO2xldCBrZD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMudHJpZ2dlclN0YXR1c0NoYW5nZVN1YmplY3Q9bmV3IFduLHRoaXMuc3RhdHVzQ2hhbmdlcz10aGlzLmdl'@;
put 'dFN0YXR1c0NoYW5nZXMoYSkucGlwZShJMGUoMSkpfXRyaWdnZXJTdGF0dXNDaGFuZ2UoKXt0aGlzLnRyaWdnZXJTdGF0dXNDaGFuZ2VTdWJqZWN0Lm5leHQoKX1nZXRTdGF0dXNDaGFuZ2VzKGEpe3JldHVybiBxOChbYS5jb250cm9sQ2hhbmdlcyxhLmFkZGl0aW9uYWxDb250cm9sc0NoYW5n'@;
put 'ZXMucGlwZSh4MihbXSkpXSkucGlwZShWMSgoW2QsaF0pPT57aWYoZCl7Y29uc3QgZj1bZCwuLi5oXTtyZXR1cm4gX3gocTgoZi5tYXAodj0+di5zdGF0dXNDaGFuZ2VzKSksdGhpcy50cmlnZ2VyU3RhdHVzQ2hhbmdlU3ViamVjdC5waXBlKExyKCgpPT5mLm1hcCh2PT52LnN0YXR1cykpKSl9'@;
put 'cmV0dXJuIE0yfSksTHIoZD0+ZC5pbmNsdWRlcyhBZC5JTlZBTElEKT9BZC5JTlZBTElEOmQuaW5jbHVkZXMoQWQuVkFMSUQpP0FkLlZBTElEOkFkLk5PTkUpLHgyKEFkLk5PTkUpKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoeHIoZjEpKX0sYy5c'@;
put 'dTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKTtjbGFzcyB6THt9ZnVuY3Rpb24gWjFlKGMpe3JldHVybltjLHtwcm92aWRlOnpMLHVzZUV4aXN0aW5nOmN9XX1mdW5jdGlvbiBXMWUoYyxsLGEpe3JldHVybiBYdC5jcmVhdGUoZD0+e2woZCk7Y29uc3Qg'@;
put 'aD1jLnN1YnNjcmliZShkKTtyZXR1cm4oKT0+e2gudW5zdWJzY3JpYmUoKSxhJiZhKGQpfX0pfWxldCBVTD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYsdil7dGhpcy5yZW5kZXJlcj1hLHRoaXMucGFyZW50PWQsdGhpcy50b2dnbGVTZXJ2aWNlPWgsdGhpcy5mb2N1c1NlcnZp'@;
put 'Y2U9Zix0aGlzLnBsYXRmb3JtSWQ9dix0aGlzLmlkPU11KCksdGhpcy5mb2N1c0JhY2tPblRyaWdnZXJXaGVuQ2xvc2VkPSExLHRoaXMuX3VubGlzdGVuRnVuY3M9W10sdGhpcy5yZXNldENoaWxkcmVuKCksdGhpcy5tb3ZlVG9GaXJzdEl0ZW1XaGVuT3BlbigpLGR8fHRoaXMuaGFuZGxlUm9v'@;
put 'dEZvY3VzKCl9Z2V0IHRyaWdnZXIoKXtyZXR1cm4gdGhpcy5fdHJpZ2dlcn1zZXQgdHJpZ2dlcihhKXt0aGlzLl90cmlnZ2VyPWEsdGhpcy5wYXJlbnQ/dGhpcy5fdW5saXN0ZW5GdW5jcy5wdXNoKHRoaXMucmVuZGVyZXIubGlzdGVuKGEsImtleWRvd24uYXJyb3dyaWdodCIsZD0+dGhpcy50'@;
put 'b2dnbGVTZXJ2aWNlLnRvZ2dsZVdpdGhFdmVudChkKSkpOih0aGlzLl91bmxpc3RlbkZ1bmNzLnB1c2godGhpcy5yZW5kZXJlci5saXN0ZW4oYSwia2V5ZG93bi5hcnJvd3VwIixkPT50aGlzLnRvZ2dsZVNlcnZpY2UudG9nZ2xlV2l0aEV2ZW50KGQpKSksdGhpcy5fdW5saXN0ZW5GdW5jcy5w'@;
put 'dXNoKHRoaXMucmVuZGVyZXIubGlzdGVuKGEsImtleWRvd24uYXJyb3dkb3duIixkPT50aGlzLnRvZ2dsZVNlcnZpY2UudG9nZ2xlV2l0aEV2ZW50KGQpKSksdGhpcy5mb2N1c1NlcnZpY2UubGlzdGVuVG9BcnJvd0tleXMoYSkpfWdldCBjb250YWluZXIoKXtyZXR1cm4gdGhpcy5fY29udGFp'@;
put 'bmVyfXNldCBjb250YWluZXIoYSl7dGhpcy5fY29udGFpbmVyPWEsdGhpcy5fdW5saXN0ZW5GdW5jcy5wdXNoKHRoaXMucmVuZGVyZXIubGlzdGVuKGEsImtleWRvd24udGFiIixkPT50aGlzLnRvZ2dsZVNlcnZpY2UudG9nZ2xlV2l0aEV2ZW50KGQpKSksdGhpcy5wYXJlbnQ/dGhpcy5fdW5s'@;
put 'aXN0ZW5GdW5jcy5wdXNoKHRoaXMucmVuZGVyZXIubGlzdGVuKGEsImtleWRvd24uZXNjYXBlIixkPT57dGhpcy5mb2N1c1NlcnZpY2UubW92ZSh3aC5MRUZUKSxkLnN0b3BQcm9wYWdhdGlvbigpfSkpOih0aGlzLmZvY3VzU2VydmljZS5yZWdpc3RlckNvbnRhaW5lcihhKSx0aGlzLl91bmxp'@;
put 'c3RlbkZ1bmNzLnB1c2godGhpcy5yZW5kZXJlci5saXN0ZW4oYSwia2V5ZG93bi5lc2NhcGUiLGQ9PnRoaXMudG9nZ2xlU2VydmljZS50b2dnbGVXaXRoRXZlbnQoZCkpKSx0aGlzLl91bmxpc3RlbkZ1bmNzLnB1c2godGhpcy5yZW5kZXJlci5saXN0ZW4oYSwiYmx1ciIsZD0+e3RoaXMuY2hp'@;
put 'bGRyZW4ucGlwZShZZigxKSkuc3Vic2NyaWJlKGY9PmYuZm9yRWFjaCh2PT52LmJsdXIoKSkpO2NvbnN0IGg9ZC5yZWxhdGVkVGFyZ2V0fHxkb2N1bWVudC5hY3RpdmVFbGVtZW50O2gmJnRsKHRoaXMucGxhdGZvcm1JZCkmJihhLmNvbnRhaW5zKGgpfHxoPT09dGhpcy50cmlnZ2VyKXx8KHRo'@;
put 'aXMuZm9jdXNCYWNrT25UcmlnZ2VyV2hlbkNsb3NlZD0hMSx0aGlzLnRvZ2dsZVNlcnZpY2Uub3Blbj0hMSl9KSkpfW5nT25EZXN0cm95KCl7dGhpcy5fdW5saXN0ZW5GdW5jcy5mb3JFYWNoKGE9PmEoKSksdGhpcy5mb2N1c1NlcnZpY2UuZGV0YWNoTGlzdGVuZXJzKCl9bW92ZVRvRmlyc3RJ'@;
put 'dGVtV2hlbk9wZW4oKXtjb25zdCBhPXRoaXMudG9nZ2xlU2VydmljZS5vcGVuQ2hhbmdlLnN1YnNjcmliZShkPT57ZCYmdGhpcy50b2dnbGVTZXJ2aWNlLm9yaWdpbmFsRXZlbnQmJnNldFRpbWVvdXQoKCk9Pnt0aGlzLmZvY3VzU2VydmljZS5tb3ZlVG8odGhpcyksdGhpcy5mb2N1c1NlcnZp'@;
put 'Y2UubW92ZSh0aGlzLnBhcmVudD93aC5SSUdIVDp3aC5ET1dOKX0pfSk7dGhpcy5fdW5saXN0ZW5GdW5jcy5wdXNoKCgpPT5hLnVuc3Vic2NyaWJlKCkpfWhhbmRsZVJvb3RGb2N1cygpe2NvbnN0IGE9dGhpcy50b2dnbGVTZXJ2aWNlLm9wZW5DaGFuZ2Uuc3Vic2NyaWJlKGQ9PntkfHwodGhp'@;
put 'cy5mb2N1c1NlcnZpY2UucmVzZXQodGhpcyksdGhpcy5mb2N1c0JhY2tPblRyaWdnZXJXaGVuQ2xvc2VkJiZ0aGlzLmZvY3VzKCkpLHRoaXMuZm9jdXNCYWNrT25UcmlnZ2VyV2hlbkNsb3NlZD1kfSk7dGhpcy5fdW5saXN0ZW5GdW5jcy5wdXNoKCgpPT5hLnVuc3Vic2NyaWJlKCkpfWZvY3Vz'@;
put 'KCl7dGhpcy50cmlnZ2VyJiZ0bCh0aGlzLnBsYXRmb3JtSWQpJiZ0aGlzLnRyaWdnZXIuZm9jdXMoKX1ibHVyKCl7dGhpcy50cmlnZ2VyJiZ0bCh0aGlzLnBsYXRmb3JtSWQpJiZ0aGlzLnRyaWdnZXIuYmx1cigpfWFjdGl2YXRlKCl7dGwodGhpcy5wbGF0Zm9ybUlkKSYmdGhpcy50cmlnZ2Vy'@;
put 'LmNsaWNrKCl9cmVzZXRDaGlsZHJlbigpe3RoaXMuY2hpbGRyZW49bmV3IHl4KDEpLHRoaXMucGFyZW50P3RoaXMucmlnaHQ9dGhpcy5vcGVuQW5kR2V0Q2hpbGRyZW4oKS5waXBlKExyKGE9PmFbMF0pKToodGhpcy5kb3duPXRoaXMub3BlbkFuZEdldENoaWxkcmVuKCkucGlwZShMcihhPT5h'@;
put 'WzBdKSksdGhpcy51cD10aGlzLm9wZW5BbmRHZXRDaGlsZHJlbigpLnBpcGUoTHIoYT0+YVthLmxlbmd0aC0xXSkpKX1hZGRDaGlsZHJlbihhKXtPWS5saW5rVmVydGljYWwoYSksdGhpcy5wYXJlbnQmJk9ZLmxpbmtQYXJlbnQoYSx0aGlzLmNsb3NlQW5kR2V0VGhpcygpLHdoLkxFRlQpLHRo'@;
put 'aXMuY2hpbGRyZW4ubmV4dChhKX1vcGVuQW5kR2V0Q2hpbGRyZW4oKXtyZXR1cm4gVzFlKHRoaXMuY2hpbGRyZW4sKCk9PnRoaXMudG9nZ2xlU2VydmljZS5vcGVuPSEwKX1jbG9zZUFuZEdldFRoaXMoKXtyZXR1cm4gVzFlKGZvKHRoaXMpLCgpPT50aGlzLnRvZ2dsZVNlcnZpY2Uub3Blbj0h'@;
put 'MSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHhyKEVvKSx4cihjLDEyKSx4cihzYykseHIod3ApLHhyKGlvKSl9LGMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCk7Y29uc3QgZlVlPVoxZShVTCk7bGV0'@;
put 'IGp4PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLl9jaGFuZ2VzPW5ldyBXbn1nZXQgY2hhbmdlcygpe3JldHVybiB0aGlzLl9jaGFuZ2VzLmFzT2JzZXJ2YWJsZSgpfWNsb3NlTWVudXMoKXt0aGlzLl9jaGFuZ2VzLm5leHQoITEpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rp'@;
put 'b24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKTtjb25zdCBnVWU9e3Byb3ZpZGU6angsdXNlRmFjdG9yeTpmdW5jdGlvbiBwVWUoYyl7cmV0dXJuIGN8fG5ldyBqeH0sZGVwczpbW25ldyBJMSxuZXcgbGQs'@;
put 'anhdXX07bGV0IHNnPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZix2KXt0aGlzLnBhcmVudD1hLHRoaXMudG9nZ2xlU2VydmljZT1kLHRoaXMuZm9jdXNIYW5kbGVyPWgsdGhpcy5pc01lbnVDbG9zYWJsZT0hMCx0aGlzLnN1YnNjcmlwdGlvbnM9W10sdGhpcy5zdWJzY3JpcHRp'@;
put 'b25zLnB1c2godi5jaGFuZ2VzLnN1YnNjcmliZShNPT5kLm9wZW49TSkpLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKGQub3BlbkNoYW5nZS5zdWJzY3JpYmUoKCk9PmYubWFya0ZvckNoZWNrKCkpKX1uZ09uRGVzdHJveSgpe3RoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKGE9PmEudW5zdWJz'@;
put 'Y3JpYmUoKSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKGMsMTIpLEdlKHNjKSxHZShVTCksR2UoRXMpLEdlKGp4KSl9LGMuXHUwMjc1Y21wPVZyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1kcm9wZG93biJdXSxob3N0VmFyczo0LGhvc3RC'@;
put 'aW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmVHIoImRyb3Bkb3duIiwhMCkoIm9wZW4iLGQudG9nZ2xlU2VydmljZS5vcGVuKX0saW5wdXRzOntpc01lbnVDbG9zYWJsZTpbTm4uTm9uZSwiY2xyQ2xvc2VNZW51T25JdGVtQ2xpY2siLCJpc01lbnVDbG9zYWJsZSJdfSxmZWF0dXJlczpbZGEo'@;
put 'W2dVZSxWMWUsZlVlXSksdmQoW29nXSldLG5nQ29udGVudFNlbGVjdG9yczp5byxkZWNsczoxLHZhcnM6MCx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKHNhKCksWXIoMCkpfSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKTt2YXIgQWk9ZnVuY3Rpb24oYyl7cmV0dXJuIGNbYy5SSUdIVF9D'@;
put 'RU5URVI9MF09IlJJR0hUX0NFTlRFUiIsY1tjLlJJR0hUX1RPUD0xXT0iUklHSFRfVE9QIixjW2MuUklHSFRfQk9UVE9NPTJdPSJSSUdIVF9CT1RUT00iLGNbYy5UT1BfQ0VOVEVSPTNdPSJUT1BfQ0VOVEVSIixjW2MuVE9QX1JJR0hUPTRdPSJUT1BfUklHSFQiLGNbYy5UT1BfTEVGVD01XT0i'@;
put 'VE9QX0xFRlQiLGNbYy5CT1RUT01fQ0VOVEVSPTZdPSJCT1RUT01fQ0VOVEVSIixjW2MuQk9UVE9NX1JJR0hUPTddPSJCT1RUT01fUklHSFQiLGNbYy5CT1RUT01fTEVGVD04XT0iQk9UVE9NX0xFRlQiLGNbYy5MRUZUX0NFTlRFUj05XT0iTEVGVF9DRU5URVIiLGNbYy5MRUZUX1RPUD0xMF09'@;
put 'IkxFRlRfVE9QIixjW2MuTEVGVF9CT1RUT009MTFdPSJMRUZUX0JPVFRPTSIsY30oQWl8fHt9KTtjbGFzcyBiVWV7Y29uc3RydWN0b3IobCl7dGhpcy5lbGVtZW50PWwsdGhpcy5ib3VuZE9uU2Nyb2xsTGlzdGVuZXI9dGhpcy5lbWl0U2Nyb2xsRXZlbnQuYmluZCh0aGlzKSx0aGlzLnNjcm9s'@;
put 'bGFibGVFbGVtZW50cz1bXSxsLnN0eWxlLnBvc2l0aW9uPSJhYnNvbHV0ZSIsbC5zdHlsZS50b3A9MCxsLnN0eWxlLmJvdHRvbT0iYXV0byIsbC5zdHlsZS5sZWZ0PTAsbC5zdHlsZS5yaWdodD0iYXV0byJ9YW5jaG9yKGwsYSxkLHtvZmZzZXRYOmg9MCxvZmZzZXRZOmY9MCx1c2VBbmNob3JQ'@;
put 'YXJlbnQ6dj0hMX09e30pe3RoaXMuYWRkU2Nyb2xsRXZlbnRMaXN0ZW5lcnMobCksdiYmKGw9bC5wYXJlbnROb2RlKSxsLnN0eWxlLnBvc2l0aW9uPSJzdGF0aWMiO2NvbnN0IE09bC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxEPXRoaXMuZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3Qo'@;
put 'KTtsZXQgWj1NLmxlZnQtRC5sZWZ0K2gscmU9TS50b3AtRC50b3ArZjtzd2l0Y2goYSl7Y2FzZSBBaS5MRUZUX1RPUDpjYXNlIEFpLlRPUF9MRUZUOmJyZWFrO2Nhc2UgQWkuVE9QX0NFTlRFUjpaKz1NLndpZHRoLzI7YnJlYWs7Y2FzZSBBaS5UT1BfUklHSFQ6Y2FzZSBBaS5SSUdIVF9UT1A6'@;
put 'Wis9TS53aWR0aDticmVhaztjYXNlIEFpLkxFRlRfQk9UVE9NOmNhc2UgQWkuQk9UVE9NX0xFRlQ6cmUrPU0uaGVpZ2h0O2JyZWFrO2Nhc2UgQWkuQk9UVE9NX0NFTlRFUjpyZSs9TS5oZWlnaHQsWis9TS53aWR0aC8yO2JyZWFrO2Nhc2UgQWkuQk9UVE9NX1JJR0hUOmNhc2UgQWkuUklHSFRf'@;
put 'Qk9UVE9NOnJlKz1NLmhlaWdodCxaKz1NLndpZHRoO2JyZWFrO2Nhc2UgQWkuTEVGVF9DRU5URVI6cmUrPU0uaGVpZ2h0LzI7YnJlYWs7Y2FzZSBBaS5SSUdIVF9DRU5URVI6cmUrPU0uaGVpZ2h0LzIsWis9TS53aWR0aH1zd2l0Y2goZCl7Y2FzZSBBaS5MRUZUX1RPUDpjYXNlIEFpLlRPUF9M'@;
put 'RUZUOmJyZWFrO2Nhc2UgQWkuVE9QX0NFTlRFUjpaLT1ELndpZHRoLzI7YnJlYWs7Y2FzZSBBaS5UT1BfUklHSFQ6Y2FzZSBBaS5SSUdIVF9UT1A6Wi09RC53aWR0aDticmVhaztjYXNlIEFpLkxFRlRfQk9UVE9NOmNhc2UgQWkuQk9UVE9NX0xFRlQ6cmUtPUQuaGVpZ2h0O2JyZWFrO2Nhc2Ug'@;
put 'QWkuQk9UVE9NX0NFTlRFUjpyZS09RC5oZWlnaHQsWi09RC53aWR0aC8yO2JyZWFrO2Nhc2UgQWkuQk9UVE9NX1JJR0hUOmNhc2UgQWkuUklHSFRfQk9UVE9NOnJlLT1ELmhlaWdodCxaLT1ELndpZHRoO2JyZWFrO2Nhc2UgQWkuTEVGVF9DRU5URVI6cmUtPUQuaGVpZ2h0LzI7YnJlYWs7Y2Fz'@;
put 'ZSBBaS5SSUdIVF9DRU5URVI6cmUtPUQuaGVpZ2h0LzIsWi09RC53aWR0aH1jb25zdCBjZT1nZXRDb21wdXRlZFN0eWxlKHRoaXMuZWxlbWVudCksYmU9cGFyc2VJbnQoY2UubWFyZ2luTGVmdCwxMCksRWU9cGFyc2VJbnQoY2UubWFyZ2luUmlnaHQsMTApLEJlPXBhcnNlSW50KGNlLm1hcmdp'@;
put 'blRvcCwxMCkscWU9cGFyc2VJbnQoY2UubWFyZ2luQm90dG9tLDEwKTtzd2l0Y2goYSl7Y2FzZSBBaS5MRUZUX1RPUDpjYXNlIEFpLlRPUF9MRUZUOmNhc2UgQWkuVE9QX1JJR0hUOmNhc2UgQWkuUklHSFRfVE9QOihkPT09QWkuQk9UVE9NX1JJR0hUfHxkPT09QWkuUklHSFRfQk9UVE9NKSYm'@;
put 'KHJlLT1xZSxaLT1FZSksKGQ9PT1BaS5CT1RUT01fTEVGVHx8ZD09PUFpLkxFRlRfQk9UVE9NKSYmKHJlLT1CZSxaKz1iZSksKGQ9PT1BaS5UT1BfTEVGVHx8ZD09PUFpLkxFRlRfVE9QKSYmKHJlKz1CZSxaKz1iZSksKGQ9PT1BaS5UT1BfUklHSFR8fGQ9PT1BaS5SSUdIVF9UT1ApJiYocmUr'@;
put 'PUJlLFotPUVlKTticmVhaztjYXNlIEFpLkxFRlRfQk9UVE9NOmNhc2UgQWkuQk9UVE9NX0xFRlQ6Y2FzZSBBaS5CT1RUT01fUklHSFQ6Y2FzZSBBaS5SSUdIVF9CT1RUT006KGQ9PT1BaS5CT1RUT01fTEVGVHx8ZD09PUFpLkxFRlRfQk9UVE9NKSYmKHJlLT1xZSxaKz1iZSksKGQ9PT1BaS5C'@;
put 'T1RUT01fUklHSFR8fGQ9PT1BaS5SSUdIVF9CT1RUT00pJiYocmUtPXFlLFotPUVlKSwoZD09PUFpLlRPUF9MRUZUfHxkPT09QWkuTEVGVF9UT1ApJiYocmUrPUJlLForPWJlKSwoZD09PUFpLlRPUF9SSUdIVHx8ZD09PUFpLlJJR0hUX1RPUCkmJihyZSs9QmUsWi09RWUpO2JyZWFrO2Nhc2Ug'@;
put 'QWkuVE9QX0NFTlRFUjpyZS09cWUsWis9YmUsWi09RWU7YnJlYWs7Y2FzZSBBaS5CT1RUT01fQ0VOVEVSOnJlKz1CZSxaKz1iZSxaLT1FZTticmVhaztjYXNlIEFpLkxFRlRfQ0VOVEVSOnJlKz1CZSxyZS09cWUsWi09RWU7YnJlYWs7Y2FzZSBBaS5SSUdIVF9DRU5URVI6cmUrPUJlLHJlLT1x'@;
put 'ZSxaKz1iZX1yZXR1cm4gdGhpcy5lbGVtZW50LnN0eWxlLnRyYW5zZm9ybT1gdHJhbnNsYXRlWCgke01hdGgucm91bmQoWil9cHgpIHRyYW5zbGF0ZVkoJHtNYXRoLnJvdW5kKHJlKX1weClgLHRoaXMuX3Njcm9sbC5hc09ic2VydmFibGUoKX1yZWxlYXNlKCl7dGhpcy5lbGVtZW50LnN0eWxl'@;
put 'LnRyYW5zZm9ybT0iIix0aGlzLnJlbW92ZVNjcm9sbEV2ZW50TGlzdGVuZXJzKCl9aXNQb3NpdGlvbmVkKGwpe2NvbnN0IGE9Z2V0Q29tcHV0ZWRTdHlsZShsKS5wb3NpdGlvbjtyZXR1cm4icmVsYXRpdmUiPT09YXx8ImFic29sdXRlIj09PWF8fCJmaXhlZCI9PT1hfWVtaXRTY3JvbGxFdmVu'@;
put 'dCgpe3RoaXMuX3Njcm9sbC5uZXh0KCl9YWRkU2Nyb2xsRXZlbnRMaXN0ZW5lcnMobCl7dGhpcy5fc2Nyb2xsPW5ldyBXbjtjb25zdCBhPWw7bGV0IGQ9bDtmb3IoO2QmJmQhPT1kb2N1bWVudCYmKHRoaXMuc2Nyb2xscyhkKSYmKGQuYWRkRXZlbnRMaXN0ZW5lcigic2Nyb2xsIix0aGlzLmJv'@;
put 'dW5kT25TY3JvbGxMaXN0ZW5lciksdGhpcy5zY3JvbGxhYmxlRWxlbWVudHMucHVzaChkKSksZD09PWF8fCF0aGlzLmlzUG9zaXRpb25lZChkKSk7KWQ9ZC5wYXJlbnROb2RlfXJlbW92ZVNjcm9sbEV2ZW50TGlzdGVuZXJzKCl7Zm9yKGNvbnN0IGwgb2YgdGhpcy5zY3JvbGxhYmxlRWxlbWVu'@;
put 'dHMpbC5yZW1vdmVFdmVudExpc3RlbmVyKCJzY3JvbGwiLHRoaXMuYm91bmRPblNjcm9sbExpc3RlbmVyKTt0aGlzLnNjcm9sbGFibGVFbGVtZW50cy5sZW5ndGg9MCx0aGlzLl9zY3JvbGwmJih0aGlzLl9zY3JvbGwuY29tcGxldGUoKSxkZWxldGUgdGhpcy5fc2Nyb2xsKX1zY3JvbGxzKGwp'@;
put 'e2NvbnN0IGE9Z2V0Q29tcHV0ZWRTdHlsZShsKTtyZXR1cm4ic2Nyb2xsIj09PWEub3ZlcmZsb3dYfHwiYXV0byI9PT1hLm92ZXJmbG93WHx8InNjcm9sbCI9PT1hLm92ZXJmbG93WXx8ImF1dG8iPT09YS5vdmVyZmxvd1l9fWNvbnN0IEsxZT0iaXMtb2ZmLXNjcmVlbiI7bGV0IEhZPSgoKT0+'@;
put 'e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkKXt0aGlzLnBhcmVudEhvc3Q9ZCx0aGlzLmNsb3NlT25PdXRzaWRlQ2xpY2s9ITEsdGhpcy5wb3BvdmVyT3B0aW9ucz17fSx0aGlzLnVwZGF0ZUFuY2hvcj0hMSx0aGlzLmRvY3VtZW50RVNDTGlzdGVuZXI9bnVsbCx0aGlzLmNsb3NlT25PdXRzaWRl'@;
put 'Q2xpY2tDYWxsYmFjaz1oPT57dGhpcy5hbmNob3JFbGVtLmNvbnRhaW5zKGgudGFyZ2V0KXx8KHRoaXMudG9nZ2xlU2VydmljZS5vcGVuPSExKX0sdGhpcy5lbD1hLmdldChKaSksdGhpcy50b2dnbGVTZXJ2aWNlPWEuZ2V0KHNjKSx0aGlzLnJlbmRlcmVyPWEuZ2V0KEVvKSx0aGlzLm5nWm9u'@;
put 'ZT1hLmdldChXYSksdGhpcy5yZWY9YS5nZXQoRXMpLHRoaXMuYW5jaG9yRWxlbT1kLm5hdGl2ZUVsZW1lbnQsdGhpcy5wb3BvdmVySW5zdGFuY2U9bmV3IGJVZSh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQpLHRoaXMuc3Vic2NyaXB0aW9uPXRoaXMudG9nZ2xlU2VydmljZS5vcGVuQ2hhbmdlLnBp'@;
put 'cGUoeDIodGhpcy50b2dnbGVTZXJ2aWNlLm9wZW4pKS5zdWJzY3JpYmUoaD0+e2g/KHRoaXMuYW5jaG9yKCksdGhpcy5hdHRhY2hFU0NMaXN0ZW5lcigpLHRoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3ModGhpcy5lbC5uYXRpdmVFbGVtZW50LEsxZSkpOih0aGlzLnJlbGVhc2UoKSx0aGlzLmRl'@;
put 'dGFjaEVTQ0xpc3RlbmVyKCksdGhpcy5yZW5kZXJlci5hZGRDbGFzcyh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsSzFlKSl9KSx0aGlzLnRvZ2dsZVNlcnZpY2Uub3BlbiYmKHRoaXMuYW5jaG9yKCksdGhpcy5hdHRhY2hFU0NMaXN0ZW5lcigpKX1uZ0FmdGVyVmlld0NoZWNrZWQoKXt0aGlzLnVw'@;
put 'ZGF0ZUFuY2hvciYmKHRoaXMudXBkYXRlQW5jaG9yPSExLHRoaXMucG9wb3Zlckluc3RhbmNlLmFuY2hvcih0aGlzLmFuY2hvckVsZW0sdGhpcy5hbmNob3JQb2ludCx0aGlzLnBvcG92ZXJQb2ludCx0aGlzLnBvcG92ZXJPcHRpb25zKS5zdWJzY3JpYmUoKCk9Pnt0aGlzLnRvZ2dsZVNlcnZp'@;
put 'Y2Uub3Blbj0hMX0pLHRoaXMuYXR0YWNoT3V0c2lkZUNsaWNrTGlzdGVuZXIoKSl9bmdPbkRlc3Ryb3koKXt0aGlzLnJlbGVhc2UoKSx0aGlzLmRldGFjaEVTQ0xpc3RlbmVyKCksdGhpcy5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKX1hbmNob3IoKXt0aGlzLnVwZGF0ZUFuY2hvcj0hMH1y'@;
put 'ZWxlYXNlKCl7dGhpcy5kZXRhY2hPdXRzaWRlQ2xpY2tMaXN0ZW5lcigpLHRoaXMucG9wb3Zlckluc3RhbmNlLnJlbGVhc2UoKX1hdHRhY2hFU0NMaXN0ZW5lcigpe3RoaXMucG9wb3Zlck9wdGlvbnMuaWdub3JlR2xvYmFsRVNDTGlzdGVuZXJ8fHRoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1'@;
put 'bGFyKCgpPT57dGhpcy5kb2N1bWVudEVTQ0xpc3RlbmVyPXRoaXMucmVuZGVyZXIubGlzdGVuKCJkb2N1bWVudCIsImtleWRvd24iLGE9PnthJiZhLmtleSYmSTIoYS5rZXkpPT09Z2EuRXNjYXBlJiZ0aGlzLm5nWm9uZS5ydW4oKCk9Pnt0aGlzLnRvZ2dsZVNlcnZpY2Uub3Blbj0hMSx0aGlz'@;
put 'LnJlZi5tYXJrRm9yQ2hlY2soKX0pfSl9KX1kZXRhY2hFU0NMaXN0ZW5lcigpe3RoaXMuZG9jdW1lbnRFU0NMaXN0ZW5lciYmKHRoaXMuZG9jdW1lbnRFU0NMaXN0ZW5lcigpLHRoaXMuZG9jdW1lbnRFU0NMaXN0ZW5lcj1udWxsKX1hdHRhY2hPdXRzaWRlQ2xpY2tMaXN0ZW5lcigpe3RoaXMu'@;
put 'Y2xvc2VPbk91dHNpZGVDbGljayYmdGhpcy50b2dnbGVTZXJ2aWNlLm9wZW4mJmRvY3VtZW50JiZkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyJiZkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsdGhpcy5jbG9zZU9uT3V0c2lkZUNsaWNrQ2FsbGJhY2ssITApfWRldGFjaE91dHNp'@;
put 'ZGVDbGlja0xpc3RlbmVyKCl7dGhpcy5jbG9zZU9uT3V0c2lkZUNsaWNrJiZkb2N1bWVudCYmZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lciYmZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigiY2xpY2siLHRoaXMuY2xvc2VPbk91dHNpZGVDbGlja0NhbGxiYWNrLCEwKX19cmV0dXJu'@;
put 'IGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2UoRHMpLEdlKEppLDQpKX0sYy5cdTAyNzVkaXI9RXIoe3R5cGU6Y30pLGN9KSgpLGc3PSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyBIWXtjb25zdHJ1Y3RvcihhLGQsaCxmKXtpZighZCl0aHJvdyBuZXcgRXJyb3IoImNs'@;
put 'ci1kcm9wZG93bi1tZW51IHNob3VsZCBvbmx5IGJlIHVzZWQgaW5zaWRlIG9mIGEgY2xyLWRyb3Bkb3duIik7c3VwZXIoYSxkKSxoPyh0aGlzLmFuY2hvclBvaW50PUFpLlJJR0hUX1RPUCx0aGlzLnBvcG92ZXJQb2ludD1BaS5MRUZUX1RPUCk6KHRoaXMuYW5jaG9yUG9pbnQ9QWkuQk9UVE9N'@;
put 'X0xFRlQsdGhpcy5wb3BvdmVyUG9pbnQ9QWkuTEVGVF9UT1ApLHRoaXMucG9wb3Zlck9wdGlvbnMuYWxsb3dNdWx0aXBsZU9wZW49ITAsdGhpcy5wb3BvdmVyT3B0aW9ucy5pZ25vcmVHbG9iYWxFU0NMaXN0ZW5lcj0hMCx0aGlzLmNsb3NlT25PdXRzaWRlQ2xpY2s9ITAsdGhpcy5mb2N1c0hh'@;
put 'bmRsZXI9Zn1zZXQgcG9zaXRpb24oYSl7c3dpdGNoKGEpe2Nhc2UidG9wLXJpZ2h0Ijp0aGlzLmFuY2hvclBvaW50PUFpLlRPUF9SSUdIVCx0aGlzLnBvcG92ZXJQb2ludD1BaS5SSUdIVF9CT1RUT007YnJlYWs7Y2FzZSJ0b3AtbGVmdCI6dGhpcy5hbmNob3JQb2ludD1BaS5UT1BfTEVGVCx0'@;
put 'aGlzLnBvcG92ZXJQb2ludD1BaS5MRUZUX0JPVFRPTTticmVhaztjYXNlImJvdHRvbS1yaWdodCI6dGhpcy5hbmNob3JQb2ludD1BaS5CT1RUT01fUklHSFQsdGhpcy5wb3BvdmVyUG9pbnQ9QWkuUklHSFRfVE9QO2JyZWFrO2Nhc2UiYm90dG9tLWxlZnQiOmRlZmF1bHQ6dGhpcy5hbmNob3JQ'@;
put 'b2ludD1BaS5CT1RUT01fTEVGVCx0aGlzLnBvcG92ZXJQb2ludD1BaS5MRUZUX1RPUDticmVhaztjYXNlInJpZ2h0LXRvcCI6dGhpcy5hbmNob3JQb2ludD1BaS5SSUdIVF9UT1AsdGhpcy5wb3BvdmVyUG9pbnQ9QWkuTEVGVF9UT1A7YnJlYWs7Y2FzZSJyaWdodC1ib3R0b20iOnRoaXMuYW5j'@;
put 'aG9yUG9pbnQ9QWkuUklHSFRfQk9UVE9NLHRoaXMucG9wb3ZlclBvaW50PUFpLkxFRlRfQk9UVE9NO2JyZWFrO2Nhc2UibGVmdC10b3AiOnRoaXMuYW5jaG9yUG9pbnQ9QWkuTEVGVF9UT1AsdGhpcy5wb3BvdmVyUG9pbnQ9QWkuUklHSFRfVE9QO2JyZWFrO2Nhc2UibGVmdC1ib3R0b20iOnRo'@;
put 'aXMuYW5jaG9yUG9pbnQ9QWkuTEVGVF9CT1RUT00sdGhpcy5wb3BvdmVyUG9pbnQ9QWkuUklHSFRfQk9UVE9NfX1uZ0FmdGVyQ29udGVudEluaXQoKXt0aGlzLmZvY3VzSGFuZGxlci5jb250YWluZXI9dGhpcy5lbC5uYXRpdmVFbGVtZW50LHRoaXMuaXRlbXMuY2hhbmdlcy5zdWJzY3JpYmUo'@;
put 'KCk9PnRoaXMuZm9jdXNIYW5kbGVyLmFkZENoaWxkcmVuKHRoaXMuaXRlbXMudG9BcnJheSgpKSksdGhpcy5pdGVtcy5ub3RpZnlPbkNoYW5nZXMoKX1uZ09uRGVzdHJveSgpe3N1cGVyLm5nT25EZXN0cm95KCksdGhpcy5mb2N1c0hhbmRsZXIucmVzZXRDaGlsZHJlbigpfX1yZXR1cm4gYy5c'@;
put 'dTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZShEcyksR2UoTkwsOCksR2UoYywxMiksR2UoVUwpKX0sYy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWRyb3Bkb3duLW1lbnUiXV0sY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24oYSxkLGgpe2lmKDEm'@;
put 'YSYmYW8oaCx6TCw0KSwyJmEpe2xldCBmO0NpKGY9U2koKSkmJihkLml0ZW1zPWYpfX0saG9zdFZhcnM6Myxob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJihocigicm9sZSIsIm1lbnUiKSxUcigiZHJvcGRvd24tbWVudSIsITApKX0saW5wdXRzOntwb3NpdGlvbjpbTm4uTm9uZSwi'@;
put 'Y2xyUG9zaXRpb24iLCJwb3NpdGlvbiJdfSxmZWF0dXJlczpbd2FdLG5nQ29udGVudFNlbGVjdG9yczp5byxkZWNsczoxLHZhcnM6MCx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKHNhKCksWXIoMCkpfSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxtNz0oKCk9PntjbGFzcyBje2NvbnN0'@;
put 'cnVjdG9yKGEsZCxoLGYpe3RoaXMudG9nZ2xlU2VydmljZT1kLHRoaXMuaXNSb290TGV2ZWxUb2dnbGU9ITAsYS5wYXJlbnQmJih0aGlzLmlzUm9vdExldmVsVG9nZ2xlPSExKSxmLnRyaWdnZXI9aC5uYXRpdmVFbGVtZW50fWdldCBhY3RpdmUoKXtyZXR1cm4gdGhpcy50b2dnbGVTZXJ2aWNl'@;
put 'Lm9wZW59b25Ecm9wZG93blRyaWdnZXJDbGljayhhKXt0aGlzLnRvZ2dsZVNlcnZpY2UudG9nZ2xlV2l0aEV2ZW50KGEpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZShzZyksR2Uoc2MpLEdlKEppKSxHZShVTCkpfSxjLlx1MDI3NWRpcj1Fcih7'@;
put 'dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJjbHJEcm9wZG93blRyaWdnZXIiLCIiXSxbIiIsImNsckRyb3Bkb3duVG9nZ2xlIiwiIl1dLGhvc3RWYXJzOjEwLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezEmYSYmRnQoImNsaWNrIixmdW5jdGlvbihmKXtyZXR1cm4gZC5vbkRyb3Bkb3duVHJp'@;
put 'Z2dlckNsaWNrKGYpfSksMiZhJiYoaHIoImFyaWEtaGFzcG9wdXAiLCJtZW51IikoImFyaWEtZXhwYW5kZWQiLGQuYWN0aXZlKSxUcigiZHJvcGRvd24tdG9nZ2xlIixkLmlzUm9vdExldmVsVG9nZ2xlKSgiZHJvcGRvd24taXRlbSIsIWQuaXNSb290TGV2ZWxUb2dnbGUpKCJleHBhbmRhYmxl'@;
put 'IiwhZC5pc1Jvb3RMZXZlbFRvZ2dsZSkoImFjdGl2ZSIsZC5hY3RpdmUpKX19KSxjfSkoKTtjb25zdCB5VWU9W3twcm92aWRlOnpMLHVzZUNsYXNzOigoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgpe3RoaXMuZWw9YSx0aGlzLnJlbmRlcmVyPWQsdGhpcy5wbGF0Zm9ybUlkPWgsdGhp'@;
put 'cy5pZD1NdSgpLHRoaXMuZGlzYWJsZWQ9ITEsZC5zZXRBdHRyaWJ1dGUoYS5uYXRpdmVFbGVtZW50LCJpZCIsdGhpcy5pZCksZC5zZXRBdHRyaWJ1dGUoYS5uYXRpdmVFbGVtZW50LCJ0YWJpbmRleCIsIi0xIil9Zm9jdXMoKXt0bCh0aGlzLnBsYXRmb3JtSWQpJiYodGhpcy5yZW5kZXJlci5z'@;
put 'ZXRBdHRyaWJ1dGUodGhpcy5lbC5uYXRpdmVFbGVtZW50LCJ0YWJpbmRleCIsIjAiKSx0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKSx0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsSW50b1ZpZXcoe2JlaGF2aW9yOiJzbW9vdGgiLGJsb2NrOiJuZWFyZXN0IixpbmxpbmU6Im5lYXJl'@;
put 'c3QifSkpfWJsdXIoKXt0bCh0aGlzLnBsYXRmb3JtSWQpJiYodGhpcy5yZW5kZXJlci5zZXRBdHRyaWJ1dGUodGhpcy5lbC5uYXRpdmVFbGVtZW50LCJ0YWJpbmRleCIsIi0xIiksdGhpcy5lbC5uYXRpdmVFbGVtZW50LmJsdXIoKSl9YWN0aXZhdGUoKXt0bCh0aGlzLnBsYXRmb3JtSWQpJiZ0'@;
put 'aGlzLmVsLm5hdGl2ZUVsZW1lbnQuY2xpY2soKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoeHIoSmkpLHhyKEVvKSx4cihpbykpfSxjLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpfV07bGV0IFZ5PSgo'@;
put 'KT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgpe3RoaXMuZHJvcGRvd249YSx0aGlzLl9kcm9wZG93blNlcnZpY2U9ZCx0aGlzLmZvY3VzYWJsZUl0ZW09aH1nZXQgZGlzYWJsZWQoKXtyZXR1cm4gdGhpcy5mb2N1c2FibGVJdGVtLmRpc2FibGVkfXNldCBkaXNhYmxlZChhKXt0aGlzLmZv'@;
put 'Y3VzYWJsZUl0ZW0uZGlzYWJsZWQ9ISFhfHwiIj09PWF9Z2V0IGRyb3Bkb3duSXRlbUlkKCl7cmV0dXJuIHRoaXMuZm9jdXNhYmxlSXRlbS5pZH1zZXQgZHJvcGRvd25JdGVtSWQoYSl7dGhpcy5mb2N1c2FibGVJdGVtLmlkPWF9b25Ecm9wZG93bkl0ZW1DbGljaygpe2lmKHRoaXMuZHJvcGRv'@;
put 'd24uaXNNZW51Q2xvc2FibGUmJiF0aGlzLmRpc2FibGVkJiZ0aGlzLmRyb3Bkb3duLnRvZ2dsZVNlcnZpY2Uub3Blbil7Y29uc3QgYT10aGlzLmZpbmRSb290RHJvcGRvd24oKTthLmZvY3VzSGFuZGxlci5mb2N1cygpLGEuZm9jdXNIYW5kbGVyLmZvY3VzQmFja09uVHJpZ2dlcldoZW5DbG9z'@;
put 'ZWQ9ITF9c2V0VGltZW91dCgoKT0+e3RoaXMuZHJvcGRvd24uaXNNZW51Q2xvc2FibGUmJiF0aGlzLmRpc2FibGVkJiZ0aGlzLl9kcm9wZG93blNlcnZpY2UuY2xvc2VNZW51cygpfSl9b25TcGFjZUtleWRvd24oYSl7dGhpcy5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb25JZkRpc2FibGVkKGEp'@;
put 'fW9uRW50ZXJLZXlkb3duKGEpe3RoaXMuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uSWZEaXNhYmxlZChhKX1zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb25JZkRpc2FibGVkKGEpe3RoaXMuZGlzYWJsZWQmJihhLnByZXZlbnREZWZhdWx0KCksYS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKSl9'@;
put 'ZmluZFJvb3REcm9wZG93bigpe2xldCBhPXRoaXMuZHJvcGRvd247Zm9yKDthLnBhcmVudDspYT1hLnBhcmVudDtyZXR1cm4gYX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2Uoc2cpLEdlKGp4KSxHZSh6TCkpfSxjLlx1MDI3NWRpcj1Fcih7dHlw'@;
put 'ZTpjLHNlbGVjdG9yczpbWyIiLCJjbHJEcm9wZG93bkl0ZW0iLCIiXV0saG9zdFZhcnM6Nyxob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsxJmEmJkZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZC5vbkRyb3Bkb3duSXRlbUNsaWNrKCl9KSgia2V5ZG93bi5zcGFjZSIsZnVuY3Rpb24o'@;
put 'Zil7cmV0dXJuIGQub25TcGFjZUtleWRvd24oZil9KSgia2V5ZG93bi5lbnRlciIsZnVuY3Rpb24oZil7cmV0dXJuIGQub25FbnRlcktleWRvd24oZil9KSwyJmEmJihocigicm9sZSIsIm1lbnVpdGVtIikoImFyaWEtZGlzYWJsZWQiLGQuZGlzYWJsZWQpKCJpZCIsZC5kcm9wZG93bkl0ZW1J'@;
put 'ZCksVHIoImRpc2FibGVkIixkLmRpc2FibGVkKSgiZHJvcGRvd24taXRlbSIsITApKX0saW5wdXRzOntkaXNhYmxlZDpbTm4uTm9uZSwiY2xyRGlzYWJsZWQiLCJkaXNhYmxlZCJdLGRyb3Bkb3duSXRlbUlkOltObi5Ob25lLCJpZCIsImRyb3Bkb3duSXRlbUlkIl19LGZlYXR1cmVzOltkYShb'@;
put 'eVVlXSldfSksY30pKCksTlk9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPWtpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1Bcih7aW1wb3J0czpbUmEsTzIsQXNdfSksY30pKCksVlk9KCgpPT57Y2xhc3Mg'@;
put 'Y3tzZXQgdHJpZ2dlckVsKGEpe3RoaXMuX3RyaWdnZXJFbD1hfWZvY3VzVHJpZ2dlcigpe3RoaXMuX3RyaWdnZXJFbCYmdGhpcy5fdHJpZ2dlckVsLmZvY3VzKCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9YW4oe3Rva2Vu'@;
put 'OmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpLEJZPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLl9pZD1uZXcgV259Z2V0IGlkKCl7cmV0dXJuIHRoaXMuX2lkLmFzT2JzZXJ2YWJsZSgpfXNldElkKGEpe3RoaXMuX2lkLm5leHQoYSl9fXJldHVybiBjLlx1MDI3NWZhYz1m'@;
put 'dW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpLFpMPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZix2LE0pe3RoaXMudG9nZ2xlU2VydmljZT1hLHRoaXMuZWw9ZCx0aGlzLnNpZ25w'@;
put 'b3N0SWRTZXJ2aWNlPWgsdGhpcy5zaWducG9zdEZvY3VzTWFuYWdlcj1mLHRoaXMucGxhdGZvcm1JZD1NLHRoaXMuYXJpYUV4cGFuZGVkPSExLHRoaXMuc3Vic2NyaXB0aW9ucz1bXSx0aGlzLmRvY3VtZW50PXZ9bmdPbkluaXQoKXt0aGlzLnNpZ25wb3N0Rm9jdXNNYW5hZ2VyLnRyaWdnZXJF'@;
put 'bD10aGlzLmVsLm5hdGl2ZUVsZW1lbnQsdGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy50b2dnbGVTZXJ2aWNlLm9wZW5DaGFuZ2Uuc3Vic2NyaWJlKGE9Pnt0aGlzLmFyaWFFeHBhbmRlZD1hO2NvbnN0IGQ9dGhpcy5pc09wZW47dGhpcy5pc09wZW49YSwhdGhpcy5pc09wZW4mJmQmJnRo'@;
put 'aXMuZm9jdXNPbkNsb3NlKCl9KSx0aGlzLnNpZ25wb3N0SWRTZXJ2aWNlLmlkLnN1YnNjcmliZShhPT50aGlzLmFyaWFDb250cm9sPWEpKX1uZ09uRGVzdHJveSgpe3RoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKGE9PmEudW5zdWJzY3JpYmUoKSl9b25TaWducG9zdFRyaWdnZXJDbGljayhh'@;
put 'KXt0aGlzLnRvZ2dsZVNlcnZpY2UudG9nZ2xlV2l0aEV2ZW50KGEpfWZvY3VzT25DbG9zZSgpe3RsKHRoaXMucGxhdGZvcm1JZCkmJiF0aGlzLmlzT3BlbiYmdGhpcy5kb2N1bWVudC5hY3RpdmVFbGVtZW50PT09dGhpcy5kb2N1bWVudC5ib2R5JiZ0aGlzLnNpZ25wb3N0Rm9jdXNNYW5hZ2Vy'@;
put 'LmZvY3VzVHJpZ2dlcigpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZShzYyksR2UoSmkpLEdlKEJZKSxHZShWWSksR2UodnMpLEdlKGlvKSl9LGMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsImNsclNpZ25wb3N0VHJpZ2dl'@;
put 'ciIsIiJdXSxob3N0QXR0cnM6WzEsInNpZ25wb3N0LXRyaWdnZXIiXSxob3N0VmFyczo0LGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezEmYSYmRnQoImNsaWNrIixmdW5jdGlvbihmKXtyZXR1cm4gZC5vblNpZ25wb3N0VHJpZ2dlckNsaWNrKGYpfSksMiZhJiYoaHIoImFyaWEtZXhwYW5k'@;
put 'ZWQiLGQuYXJpYUV4cGFuZGVkKSgiYXJpYS1jb250cm9scyIsZC5hcmlhQ29udHJvbCksVHIoImFjdGl2ZSIsZC5pc09wZW4pKX19KSxjfSkoKSxXTD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMuY29tbW9uU3RyaW5ncz1hLHRoaXMudXNlQ3VzdG9tVHJpZ2dlcj0hMX1zZXQg'@;
put 'Y3VzdG9tVHJpZ2dlcihhKXt0aGlzLnVzZUN1c3RvbVRyaWdnZXI9ISFhfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZShpcykpfSxjLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItc2lnbnBvc3QiXV0sY29udGVudFF1ZXJp'@;
put 'ZXM6ZnVuY3Rpb24oYSxkLGgpe2lmKDEmYSYmYW8oaCxaTCw1KSwyJmEpe2xldCBmO0NpKGY9U2koKSkmJihkLmN1c3RvbVRyaWdnZXI9Zi5maXJzdCl9fSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmVHIoInNpZ25wb3N0IiwhMCl9LGlucHV0czp7c2lnbnBv'@;
put 'c3RUcmlnZ2VyQXJpYUxhYmVsOltObi5Ob25lLCJjbHJTaWducG9zdFRyaWdnZXJBcmlhTGFiZWwiLCJzaWducG9zdFRyaWdnZXJBcmlhTGFiZWwiXX0sZmVhdHVyZXM6W2RhKFtWWSxCWV0pLHZkKFtvZ10pXSxuZ0NvbnRlbnRTZWxlY3RvcnM6eW8sZGVjbHM6Mix2YXJzOjEsY29uc3RzOltb'@;
put 'NCwibmdJZiJdLFsidHlwZSIsImJ1dHRvbiIsImNsclNpZ25wb3N0VHJpZ2dlciIsIiIsMSwic2lnbnBvc3QtYWN0aW9uIiwiYnRuIiwiYnRuLXNtIiwiYnRuLWljb24iLCJidG4tbGluayJdLFsic2hhcGUiLCJpbmZvLWNpcmNsZSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKHNh'@;
put 'KCksZ3QoMCxFSGUsMywyLCJuZy1jb250YWluZXIiLDApLFlyKDEpKSwyJmEmJk1lKCJuZ0lmIiwhZC51c2VDdXN0b21UcmlnZ2VyKX0sZGVwZW5kZW5jaWVzOltiYSxycyxaTF0sZW5jYXBzdWxhdGlvbjoyfSksY30pKCk7Y29uc3QgX1VlPXsidG9wLWxlZnQiOnthbmNob3JQb2ludDpBaS5U'@;
put 'T1BfQ0VOVEVSLHBvcG92ZXJQb2ludDpBaS5CT1RUT01fUklHSFQsb2Zmc2V0WTotMTYsb2Zmc2V0WDowfSwidG9wLW1pZGRsZSI6e2FuY2hvclBvaW50OkFpLlRPUF9DRU5URVIscG9wb3ZlclBvaW50OkFpLkJPVFRPTV9DRU5URVIsb2Zmc2V0WTotMTYsb2Zmc2V0WDowfSwidG9wLXJpZ2h0'@;
put 'Ijp7YW5jaG9yUG9pbnQ6QWkuVE9QX0NFTlRFUixwb3BvdmVyUG9pbnQ6QWkuQk9UVE9NX0xFRlQsb2Zmc2V0WTotMTYsb2Zmc2V0WDowfSwicmlnaHQtdG9wIjp7YW5jaG9yUG9pbnQ6QWkuUklHSFRfQ0VOVEVSLHBvcG92ZXJQb2ludDpBaS5MRUZUX0JPVFRPTSxvZmZzZXRZOjAsb2Zmc2V0'@;
put 'WDoxNn0sInJpZ2h0LW1pZGRsZSI6e2FuY2hvclBvaW50OkFpLlJJR0hUX0NFTlRFUixwb3BvdmVyUG9pbnQ6QWkuTEVGVF9DRU5URVIsb2Zmc2V0WTowLG9mZnNldFg6MTZ9LCJyaWdodC1ib3R0b20iOnthbmNob3JQb2ludDpBaS5SSUdIVF9DRU5URVIscG9wb3ZlclBvaW50OkFpLkxFRlRf'@;
put 'VE9QLG9mZnNldFk6MCxvZmZzZXRYOjE2fSwiYm90dG9tLXJpZ2h0Ijp7YW5jaG9yUG9pbnQ6QWkuQk9UVE9NX0NFTlRFUixwb3BvdmVyUG9pbnQ6QWkuVE9QX0xFRlQsb2Zmc2V0WToxNixvZmZzZXRYOjB9LCJib3R0b20tbWlkZGxlIjp7YW5jaG9yUG9pbnQ6QWkuQk9UVE9NX0NFTlRFUixw'@;
put 'b3BvdmVyUG9pbnQ6QWkuVE9QX0NFTlRFUixvZmZzZXRZOjE2LG9mZnNldFg6MH0sImJvdHRvbS1sZWZ0Ijp7YW5jaG9yUG9pbnQ6QWkuQk9UVE9NX0NFTlRFUixwb3BvdmVyUG9pbnQ6QWkuVE9QX1JJR0hULG9mZnNldFk6MTYsb2Zmc2V0WDowfSwibGVmdC1ib3R0b20iOnthbmNob3JQb2lu'@;
put 'dDpBaS5MRUZUX0NFTlRFUixwb3BvdmVyUG9pbnQ6QWkuUklHSFRfVE9QLG9mZnNldFk6MCxvZmZzZXRYOi0xNn0sImxlZnQtbWlkZGxlIjp7YW5jaG9yUG9pbnQ6QWkuTEVGVF9DRU5URVIscG9wb3ZlclBvaW50OkFpLlJJR0hUX0NFTlRFUixvZmZzZXRZOjAsb2Zmc2V0WDotMTZ9LCJsZWZ0'@;
put 'LXRvcCI6e2FuY2hvclBvaW50OkFpLkxFRlRfQ0VOVEVSLHBvcG92ZXJQb2ludDpBaS5SSUdIVF9CT1RUT00sb2Zmc2V0WTowLG9mZnNldFg6LTE2fSxkZWZhdWx0OnthbmNob3JQb2ludDpBaS5SSUdIVF9DRU5URVIscG9wb3ZlclBvaW50OkFpLkxFRlRfQ0VOVEVSLG9mZnNldFk6MCxvZmZz'@;
put 'ZXRYOjE2fX0sd1VlPVsidG9wLWxlZnQiLCJ0b3AtbWlkZGxlIiwidG9wLXJpZ2h0IiwicmlnaHQtdG9wIiwicmlnaHQtbWlkZGxlIiwicmlnaHQtYm90dG9tIiwiYm90dG9tLXJpZ2h0IiwiYm90dG9tLW1pZGRsZSIsImJvdHRvbS1sZWZ0IiwibGVmdC1ib3R0b20iLCJsZWZ0LW1pZGRsZSIs'@;
put 'ImxlZnQtdG9wIl07bGV0IHExZT0oKCk9PntjbGFzcyBjIGV4dGVuZHMgSFl7Y29uc3RydWN0b3IoYSxkLGgsZix2LE0sRCl7aWYoc3VwZXIoYSxkKSx0aGlzLmNvbW1vblN0cmluZ3M9aCx0aGlzLnNpZ25wb3N0Rm9jdXNNYW5hZ2VyPXYsdGhpcy5wbGF0Zm9ybUlkPU0sdGhpcy5zaWducG9z'@;
put 'dENvbnRlbnRJZD1NdSgpLCFkKXRocm93IG5ldyBFcnJvcigiY2xyLXNpZ25wb3N0LWNvbnRlbnQgc2hvdWxkIG9ubHkgYmUgdXNlZCBpbnNpZGUgb2YgYSBjbHItc2lnbnBvc3QiKTt0aGlzLnBvc2l0aW9uPSJyaWdodC1taWRkbGUiLHRoaXMuY2xvc2VPbk91dHNpZGVDbGljaz0hMCxmLnNl'@;
put 'dElkKHRoaXMuc2lnbnBvc3RDb250ZW50SWQpLHRoaXMuZG9jdW1lbnQ9RH1nZXQgcG9zaXRpb24oKXtyZXR1cm4gdGhpcy5fcG9zaXRpb259c2V0IHBvc2l0aW9uKGEpe3RoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3ModGhpcy5lbC5uYXRpdmVFbGVtZW50LHRoaXMucG9zaXRpb24pLHRoaXMu'@;
put 'X3Bvc2l0aW9uPWEmJndVZS5pbmRleE9mKGEpPi0xP2E6InJpZ2h0LW1pZGRsZSIsdGhpcy5yZW5kZXJlci5hZGRDbGFzcyh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsdGhpcy5wb3NpdGlvbik7Y29uc3QgZD1fVWVbdGhpcy5wb3NpdGlvbl07dGhpcy5hbmNob3JQb2ludD1kLmFuY2hvclBvaW50'@;
put 'LHRoaXMucG9wb3ZlclBvaW50PWQucG9wb3ZlclBvaW50LHRoaXMucG9wb3Zlck9wdGlvbnMub2Zmc2V0WT1kLm9mZnNldFksdGhpcy5wb3BvdmVyT3B0aW9ucy5vZmZzZXRYPWQub2Zmc2V0WH1jbG9zZSgpe3RoaXMudG9nZ2xlU2VydmljZS5vcGVuPSExfW5nT25EZXN0cm95KCl7c3VwZXIu'@;
put 'bmdPbkRlc3Ryb3koKSx0bCh0aGlzLnBsYXRmb3JtSWQpJiZ0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuY29udGFpbnModGhpcy5kb2N1bWVudC5hY3RpdmVFbGVtZW50KSYmdGhpcy5zaWducG9zdEZvY3VzTWFuYWdlci5mb2N1c1RyaWdnZXIoKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9u'@;
put 'KGEpe3JldHVybiBuZXcoYXx8YykoR2UoRHMpLEdlKE5MLDgpLEdlKGlzKSxHZShCWSksR2UoVlkpLEdlKGlvKSxHZSh2cykpfSxjLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItc2lnbnBvc3QtY29udGVudCJdXSxob3N0VmFyczozLGhvc3RCaW5kaW5nczpmdW5jdGlv'@;
put 'bihhLGQpezImYSYmKG9wKCJpZCIsZC5zaWducG9zdENvbnRlbnRJZCksVHIoInNpZ25wb3N0LWNvbnRlbnQiLCEwKSl9LGlucHV0czp7c2lnbnBvc3RDbG9zZUFyaWFMYWJlbDpbTm4uTm9uZSwiY2xyU2lnbnBvc3RDbG9zZUFyaWFMYWJlbCIsInNpZ25wb3N0Q2xvc2VBcmlhTGFiZWwiXSxw'@;
put 'b3NpdGlvbjpbTm4uTm9uZSwiY2xyUG9zaXRpb24iLCJwb3NpdGlvbiJdfSxmZWF0dXJlczpbd2FdLG5nQ29udGVudFNlbGVjdG9yczpBSGUsZGVjbHM6OCx2YXJzOjMsY29uc3RzOltbMSwic2lnbnBvc3Qtd3JhcCJdLFsxLCJwb3BvdmVyLXBvaW50ZXIiXSxbMSwic2lnbnBvc3QtY29udGVu'@;
put 'dC1oZWFkZXIiXSxbInR5cGUiLCJidXR0b24iLDEsInNpZ25wb3N0LWFjdGlvbiIsImNsb3NlIiwzLCJjbGljayJdLFsic2hhcGUiLCJ3aW5kb3ctY2xvc2UiXSxbInRhYmluZGV4IiwiMCIsMSwic2lnbnBvc3QtY29udGVudC1ib2R5Il1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYo'@;
put 'c2EoVEhlKSxkZSgwLCJkaXYiLDApLEd0KDEsImRpdiIsMSksZGUoMiwiZGl2IiwyKSxZcigzKSxkZSg0LCJidXR0b24iLDMpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZC5jbG9zZSgpfSksR3QoNSwiY2RzLWljb24iLDQpLGhlKCkoKSxkZSg2LCJkaXYiLDUpLFlyKDcsMSksaGUo'@;
put 'KSgpKSwyJmEmJihmZSg0KSxocigiYXJpYS1sYWJlbCIsZC5zaWducG9zdENsb3NlQXJpYUxhYmVsfHxkLmNvbW1vblN0cmluZ3Mua2V5cy5zaWducG9zdENsb3NlKSgiYXJpYS1jb250cm9scyIsZC5zaWducG9zdENvbnRlbnRJZCksZmUoKSxocigidGl0bGUiLGQuY29tbW9uU3RyaW5ncy5r'@;
put 'ZXlzLmNsb3NlKSl9LGRlcGVuZGVuY2llczpbcnNdLGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpLENVZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7VHMuYWRkSWNvbnModngsUk9lKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1'@;
put 'bW9kPWtpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1Bcih7aW1wb3J0czpbUmEsQXMsQkwsTzJdfSksY30pKCksalk9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuX2lkPW5ldyBXbn1nZXQgaWQoKXtyZXR1cm4gdGhpcy5faWQuYXNPYnNlcnZhYmxlKCl9dXBkYXRlSWQoYSl7dGhp'@;
put 'cy5faWQubmV4dChhKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCkselk9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLnRvZ2dsZVNlcnZp'@;
put 'Y2U9YX1vbk1vdXNlRW50ZXJUcmlnZ2VyKCl7dGhpcy5tb3VzZU92ZXJUcmlnZ2VyPSEwLHRoaXMudG9nZ2xlU2VydmljZS5vcGVuPSEwfW9uTW91c2VMZWF2ZVRyaWdnZXIoKXt0aGlzLm1vdXNlT3ZlclRyaWdnZXI9ITEsdGhpcy5oaWRlSWZNb3VzZU91dCgpfW9uTW91c2VFbnRlckNvbnRl'@;
put 'bnQoKXt0aGlzLm1vdXNlT3ZlckNvbnRlbnQ9ITB9b25Nb3VzZUxlYXZlQ29udGVudCgpe3RoaXMubW91c2VPdmVyQ29udGVudD0hMSx0aGlzLmhpZGVJZk1vdXNlT3V0KCl9aGlkZUlmTW91c2VPdXQoKXtzZXRUaW1lb3V0KCgpPT57IXRoaXMubW91c2VPdmVyVHJpZ2dlciYmIXRoaXMubW91'@;
put 'c2VPdmVyQ29udGVudCYmKHRoaXMudG9nZ2xlU2VydmljZS5vcGVuPSExKX0sMCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHhyKHNjKSl9LGMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCksdjc9KCgp'@;
put 'PT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1Y21wPVZyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci10b29sdGlwIl1dLGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiZUcigidG9vbHRp'@;
put 'cCIsITApfSxmZWF0dXJlczpbZGEoW2pZLHpZXSksdmQoW29nXSldLG5nQ29udGVudFNlbGVjdG9yczp5byxkZWNsczoxLHZhcnM6MCx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKHNhKCksWXIoMCkpfSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKTtjb25zdCBNVWU9WyJib3R0b20tbGVm'@;
put 'dCIsImJvdHRvbS1yaWdodCIsInRvcC1sZWZ0IiwidG9wLXJpZ2h0IiwicmlnaHQiLCJsZWZ0Il0seFVlPVsieHMiLCJzbSIsIm1kIiwibGciXTtsZXQgYjc9KCgpPT57Y2xhc3MgYyBleHRlbmRzIEhZe2NvbnN0cnVjdG9yKGEsZCxoLGYpe2lmKHN1cGVyKGEsZCksdGhpcy50b29sdGlwSWRT'@;
put 'ZXJ2aWNlPWgsdGhpcy50b29sdGlwTW91c2VTZXJ2aWNlPWYsIWQpdGhyb3cgbmV3IEVycm9yKCJjbHItdG9vbHRpcC1jb250ZW50IHNob3VsZCBvbmx5IGJlIHVzZWQgaW5zaWRlIG9mIGEgY2xyLXRvb2x0aXAiKTt0aGlzLmlkPU11KCl9Z2V0IGlkKCl7cmV0dXJuIHRoaXMuX2lkfXNldCBp'@;
put 'ZChhKXtjb25zdCBkPWF8fCIiO3RoaXMuX2lkPWQsdGhpcy50b29sdGlwSWRTZXJ2aWNlLnVwZGF0ZUlkKGQpfWdldCBwb3NpdGlvbigpe3JldHVybiB0aGlzLl9wb3NpdGlvbn1zZXQgcG9zaXRpb24oYSl7Y29uc3QgZD10aGlzLl9wb3NpdGlvbixoPU1VZS5pbmNsdWRlcyhhKT9hOiJyaWdo'@;
put 'dCI7c3dpdGNoKHRoaXMuX3Bvc2l0aW9uPWgsdGhpcy51cGRhdGVDc3NDbGFzcyh7b2xkQ2xhc3M6YHRvb2x0aXAtJHtkfWAsbmV3Q2xhc3M6YHRvb2x0aXAtJHtofWB9KSxoKXtjYXNlInRvcC1yaWdodCI6dGhpcy5hbmNob3JQb2ludD1BaS5UT1BfQ0VOVEVSLHRoaXMucG9wb3ZlclBvaW50'@;
put 'PUFpLkxFRlRfQk9UVE9NO2JyZWFrO2Nhc2UidG9wLWxlZnQiOnRoaXMuYW5jaG9yUG9pbnQ9QWkuVE9QX0NFTlRFUix0aGlzLnBvcG92ZXJQb2ludD1BaS5SSUdIVF9CT1RUT007YnJlYWs7Y2FzZSJib3R0b20tcmlnaHQiOnRoaXMuYW5jaG9yUG9pbnQ9QWkuQk9UVE9NX0NFTlRFUix0aGlz'@;
put 'LnBvcG92ZXJQb2ludD1BaS5MRUZUX1RPUDticmVhaztjYXNlImJvdHRvbS1sZWZ0Ijp0aGlzLmFuY2hvclBvaW50PUFpLkJPVFRPTV9DRU5URVIsdGhpcy5wb3BvdmVyUG9pbnQ9QWkuUklHSFRfVE9QO2JyZWFrO2Nhc2UicmlnaHQiOnRoaXMuYW5jaG9yUG9pbnQ9QWkuUklHSFRfQ0VOVEVS'@;
put 'LHRoaXMucG9wb3ZlclBvaW50PUFpLkxFRlRfVE9QO2JyZWFrO2Nhc2UibGVmdCI6dGhpcy5hbmNob3JQb2ludD1BaS5MRUZUX0NFTlRFUix0aGlzLnBvcG92ZXJQb2ludD1BaS5SSUdIVF9UT1A7YnJlYWs7ZGVmYXVsdDohZnVuY3Rpb24gU1VlKGMpe3Rocm93IG5ldyBFcnJvcihgVW5oYW5k'@;
put 'bGVkIHZhbHVlOiAke2N9YCl9KGgpfX1nZXQgc2l6ZSgpe3JldHVybiB0aGlzLl9zaXplfXNldCBzaXplKGEpe2NvbnN0IGQ9dGhpcy5fc2l6ZSxoPXhVZS5pbmNsdWRlcyhhKT9hOiJzbSI7dGhpcy5fc2l6ZT1oLHRoaXMudXBkYXRlQ3NzQ2xhc3Moe29sZENsYXNzOmB0b29sdGlwLSR7ZH1g'@;
put 'LG5ld0NsYXNzOmB0b29sdGlwLSR7aH1gfSl9bmdPbkluaXQoKXt0aGlzLnNpemU9dGhpcy5zaXplfHwic20iLHRoaXMucG9zaXRpb249dGhpcy5wb3NpdGlvbnx8InJpZ2h0In1vbk1vdXNlRW50ZXIoKXt0aGlzLnRvb2x0aXBNb3VzZVNlcnZpY2Uub25Nb3VzZUVudGVyQ29udGVudCgpfW9u'@;
put 'TW91c2VMZWF2ZSgpe3RoaXMudG9vbHRpcE1vdXNlU2VydmljZS5vbk1vdXNlTGVhdmVDb250ZW50KCl9dXBkYXRlQ3NzQ2xhc3Moe29sZENsYXNzOmEsbmV3Q2xhc3M6ZH0pe3RoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3ModGhpcy5lbC5uYXRpdmVFbGVtZW50LGEpLHRoaXMucmVuZGVyZXIu'@;
put 'YWRkQ2xhc3ModGhpcy5lbC5uYXRpdmVFbGVtZW50LGQpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZShEcyksR2UoTkwsOCksR2UoalkpLEdlKHpZKSl9LGMuXHUwMjc1Y21wPVZyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci10b29sdGlwLWNv'@;
put 'bnRlbnQiXV0saG9zdFZhcnM6Nixob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsxJmEmJkZ0KCJtb3VzZWVudGVyIixmdW5jdGlvbigpe3JldHVybiBkLm9uTW91c2VFbnRlcigpfSkoIm1vdXNlbGVhdmUiLGZ1bmN0aW9uKCl7cmV0dXJuIGQub25Nb3VzZUxlYXZlKCl9KSwyJmEmJihvcCgi'@;
put 'aWQiLGQuaWQpLGhyKCJyb2xlIiwidG9vbHRpcCIpLF9kKCJvcGFjaXR5IiwxKSxUcigidG9vbHRpcC1jb250ZW50IiwhMCkpfSxpbnB1dHM6e2lkOiJpZCIscG9zaXRpb246W05uLk5vbmUsImNsclBvc2l0aW9uIiwicG9zaXRpb24iXSxzaXplOltObi5Ob25lLCJjbHJTaXplIiwic2l6ZSJd'@;
put 'fSxmZWF0dXJlczpbd2FdLG5nQ29udGVudFNlbGVjdG9yczp5byxkZWNsczoxLHZhcnM6MCx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKHNhKCksWXIoMCkpfSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSx5Nz0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoKXt0aGlzLnRvZ2ds'@;
put 'ZVNlcnZpY2U9YSx0aGlzLnRvb2x0aXBNb3VzZVNlcnZpY2U9aCx0aGlzLnN1YnM9W10sdGhpcy5zdWJzLnB1c2goZC5pZC5zdWJzY3JpYmUoZj0+dGhpcy5hcmlhRGVzY3JpYmVkQnk9ZikpfW5nT25EZXN0cm95KCl7dGhpcy5zdWJzLmZvckVhY2goYT0+YS51bnN1YnNjcmliZSgpKX1zaG93'@;
put 'VG9vbHRpcCgpe3RoaXMudG9nZ2xlU2VydmljZS5vcGVuPSEwfWhpZGVUb29sdGlwKCl7dGhpcy50b2dnbGVTZXJ2aWNlLm9wZW49ITF9b25Nb3VzZUVudGVyKCl7dGhpcy50b29sdGlwTW91c2VTZXJ2aWNlLm9uTW91c2VFbnRlclRyaWdnZXIoKX1vbk1vdXNlTGVhdmUoKXt0aGlzLnRvb2x0'@;
put 'aXBNb3VzZVNlcnZpY2Uub25Nb3VzZUxlYXZlVHJpZ2dlcigpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZShzYyksR2UoalkpLEdlKHpZKSl9LGMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsImNsclRvb2x0aXBUcmlnZ2Vy'@;
put 'IiwiIl1dLGhvc3RBdHRyczpbInRhYmluZGV4IiwiMCJdLGhvc3RWYXJzOjQsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MSZhJiZGdCgiZm9jdXMiLGZ1bmN0aW9uKCl7cmV0dXJuIGQuc2hvd1Rvb2x0aXAoKX0pKCJibHVyIixmdW5jdGlvbigpe3JldHVybiBkLmhpZGVUb29sdGlwKCl9'@;
put 'KSgibW91c2VlbnRlciIsZnVuY3Rpb24oKXtyZXR1cm4gZC5vbk1vdXNlRW50ZXIoKX0pKCJtb3VzZWxlYXZlIixmdW5jdGlvbigpe3JldHVybiBkLm9uTW91c2VMZWF2ZSgpfSksMiZhJiYoaHIoImFyaWEtZGVzY3JpYmVkYnkiLGQuYXJpYURlc2NyaWJlZEJ5KSgicm9sZSIsImJ1dHRvbiIp'@;
put 'LFRyKCJ0b29sdGlwLXRyaWdnZXIiLCEwKSl9fSksY30pKCksRVVlPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD1raSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9QXIoe2ltcG9ydHM6W1JhLE8yLEFzXX0p'@;
put 'LGN9KSgpLFRVZT0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9a2koe3R5cGU6Y30pLGMuXHUwMjc1aW5qPUFyKHtpbXBvcnRzOltOWSxDVWUsRVVlXX0pLGN9KSgpO3ZhciBfNz1mdW5jdGlvbihjKXty'@;
put 'ZXR1cm4gYy5WRVJUSUNBTD0idmVydGljYWwiLGMuSE9SSVpPTlRBTD0iaG9yaXpvbnRhbCIsYy5DT01QQUNUPSJjb21wYWN0IixjfShfN3x8e30pO2xldCBDcD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5taW5MYWJlbFNpemU9MSx0aGlzLm1heExhYmVsU2l6ZT0xMix0aGlz'@;
put 'LmxheW91dD1fNy5IT1JJWk9OVEFMLHRoaXMubGF5b3V0VmFsdWVzPU9iamVjdC5rZXlzKF83KS5tYXAoYT0+XzdbYV0pLHRoaXMuX2xhYmVsU2l6ZT0yfWdldCBsYWJlbFNpemUoKXtyZXR1cm4gdGhpcy5fbGFiZWxTaXplfXNldCBsYWJlbFNpemUoYSl7dGhpcy5sYWJlbFNpemVJc1ZhbGlk'@;
put 'KGEpJiYodGhpcy5fbGFiZWxTaXplPWEpfWdldCBsYXlvdXRDbGFzcygpe3JldHVybmBjbHItZm9ybS0ke3RoaXMubGF5b3V0fWB9aXNWZXJ0aWNhbCgpe3JldHVybiB0aGlzLmxheW91dD09PV83LlZFUlRJQ0FMfWlzSG9yaXpvbnRhbCgpe3JldHVybiB0aGlzLmxheW91dD09PV83LkhPUkla'@;
put 'T05UQUx9aXNDb21wYWN0KCl7cmV0dXJuIHRoaXMubGF5b3V0PT09XzcuQ09NUEFDVH1pc1ZhbGlkKGEpe3JldHVybiB0aGlzLmxheW91dFZhbHVlcy5pbmRleE9mKGEpPi0xfWxhYmVsU2l6ZUlzVmFsaWQoYSl7cmV0dXJuIE51bWJlci5pc0ludGVnZXIoYSkmJmE+PXRoaXMubWluTGFiZWxT'@;
put 'aXplJiZhPD10aGlzLm1heExhYmVsU2l6ZX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCksZHM9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxm'@;
put 'LHYpe3RoaXMuY29udHJvbElkU2VydmljZT1hLHRoaXMubGF5b3V0U2VydmljZT1kLHRoaXMubmdDb250cm9sU2VydmljZT1oLHRoaXMucmVuZGVyZXI9Zix0aGlzLmVsPXYsdGhpcy5lbmFibGVHcmlkPSEwLHRoaXMuc3Vic2NyaXB0aW9ucz1bXX1nZXQgbGFiZWxUZXh0KCl7cmV0dXJuIHRo'@;
put 'aXMuZWwubmF0aXZlRWxlbWVudCYmdGhpcy5lbC5uYXRpdmVFbGVtZW50LnRleHRDb250ZW50fW5nT25Jbml0KCl7dGhpcy5pZEF0dHI9dGhpcy5pZElucHV0LCh0aGlzLmNvbnRyb2xJZFNlcnZpY2V8fHRoaXMubmdDb250cm9sU2VydmljZSkmJnRoaXMucmVuZGVyZXIuYWRkQ2xhc3ModGhp'@;
put 'cy5lbC5uYXRpdmVFbGVtZW50LCJjbHItY29udHJvbC1sYWJlbCIpLHRoaXMuZW5hYmxlR3JpZCYmdGhpcy5sYXlvdXRTZXJ2aWNlJiYhdGhpcy5sYXlvdXRTZXJ2aWNlLmlzVmVydGljYWwoKSYmdGhpcy5lbC5uYXRpdmVFbGVtZW50JiZ0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuY2xhc3NOYW1l'@;
put 'LmluZGV4T2YoImNsci1jb2wiKTwwJiYodGhpcy5yZW5kZXJlci5hZGRDbGFzcyh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsImNsci1jb2wtMTIiKSx0aGlzLnJlbmRlcmVyLmFkZENsYXNzKHRoaXMuZWwubmF0aXZlRWxlbWVudCxgY2xyLWNvbC1tZC0ke3RoaXMubGF5b3V0U2VydmljZS5sYWJl'@;
put 'bFNpemV9YCkpLHRoaXMuY29udHJvbElkU2VydmljZSYmIXRoaXMuZm9yQXR0ciYmdGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5jb250cm9sSWRTZXJ2aWNlLmlkQ2hhbmdlLnN1YnNjcmliZShhPT57dGhpcy5mb3JBdHRyPWEsdGhpcy5pZEF0dHI9dGhpcy5pZElucHV0fHxgJHthfS1s'@;
put 'YWJlbGB9KSl9bmdPbkRlc3Ryb3koKXt0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChhPT5hLnVuc3Vic2NyaWJlKCkpfWRpc2FibGVHcmlkKCl7dGhpcy5lbmFibGVHcmlkPSExfW9uQ2xpY2soYSl7dGhpcy5wcmV2ZW50RGVmYXVsdE9uU2lnbnBvc3RUYXJnZXQoYSl9cHJldmVudERlZmF1'@;
put 'bHRPblNpZ25wb3N0VGFyZ2V0KGEpe3RoaXMuc2lnbnBvc3QmJnRoaXMuc2lnbnBvc3QubmF0aXZlRWxlbWVudCYmdGhpcy5zaWducG9zdC5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKGEudGFyZ2V0KSYmYS5wcmV2ZW50RGVmYXVsdCgpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7'@;
put 'cmV0dXJuIG5ldyhhfHxjKShHZShDaCw4KSxHZShDcCw4KSxHZShmMSw4KSxHZShFbyksR2UoSmkpKX0sYy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxlY3RvcnM6W1sibGFiZWwiXV0sY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24oYSxkLGgpe2lmKDEmYSYmYW8oaCxXTCw1LEppKSwyJmEpe2xl'@;
put 'dCBmO0NpKGY9U2koKSkmJihkLnNpZ25wb3N0PWYuZmlyc3QpfX0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsxJmEmJkZ0KCJjbGljayIsZnVuY3Rpb24oZil7cmV0dXJuIGQub25DbGljayhmKX0pLDImYSYmaHIoImlkIixkLmlkQXR0cikoImZvciIsZC5mb3JBdHRy'@;
put 'KX0saW5wdXRzOntpZElucHV0OltObi5Ob25lLCJpZCIsImlkSW5wdXQiXSxmb3JBdHRyOltObi5Ob25lLCJmb3IiLCJmb3JBdHRyIl19fSksY30pKCksQVVlPSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyBGWXtjb25zdHJ1Y3RvcihhLGQpe3N1cGVyKGEsZCksdGhpcy5jb250cm9sSWRTZXJ2aWNl'@;
put 'PWEsdGhpcy5jb250YWluZXJJZFNlcnZpY2U9ZCx0aGlzLmNvbnRyb2xJZFN1ZmZpeD0ic3VjY2VzcyJ9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKENoLDgpLEdlKHA3LDgpKX0sYy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1si'@;
put 'Y2xyLWNvbnRyb2wtc3VjY2VzcyJdXSxob3N0VmFyczo1LGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmKGhyKCJpZCIsZC5pZCksVHIoImNsci1zdWJ0ZXh0IiwhMCkoInN1Y2Nlc3MiLCEwKSl9LGZlYXR1cmVzOlt3YV0sbmdDb250ZW50U2VsZWN0b3JzOnlvLGRlY2xzOjEsdmFy'@;
put 'czowLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoc2EoKSxZcigwKSl9LGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpLERkPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5sYXlvdXRTZXJ2aWNlPWEsdGhpcy5jbGFzc05hbWU9IiJ9Y29udHJvbENsYXNzKGE9QWQuTk9ORSxk'@;
put 'PSExLGg9IiIpe2NvbnN0IGY9W3RoaXMuY2xhc3NOYW1lLGhdO3N3aXRjaChhKXtjYXNlIEFkLlZBTElEOmYucHVzaCgiY2xyLXN1Y2Nlc3MiKTticmVhaztjYXNlIEFkLklOVkFMSUQ6Zi5wdXNoKCJjbHItZXJyb3IiKX1yZXR1cm4gZCYmdGhpcy5sYXlvdXRTZXJ2aWNlJiYtMT09PXRoaXMu'@;
put 'Y2xhc3NOYW1lLmluZGV4T2YoImNsci1jb2wiKSYmZi5wdXNoKGBjbHItY29sLW1kLSR7dGhpcy5sYXlvdXRTZXJ2aWNlLm1heExhYmVsU2l6ZS10aGlzLmxheW91dFNlcnZpY2UubGFiZWxTaXplfSBjbHItY29sLTEyYCksZi5qb2luKCIgIikudHJpbSgpfWluaXRDb250cm9sQ2xhc3MoYSxk'@;
put 'KXtkJiZkLmNsYXNzTmFtZSYmKHRoaXMuY2xhc3NOYW1lPWQuY2xhc3NOYW1lLGQuY2xhc3NOYW1lLnNwbGl0KCIgIikuZm9yRWFjaChmPT57Zi5zdGFydHNXaXRoKCJjbHItY29sIikmJmEucmVtb3ZlQ2xhc3MoZCxmKX0pKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVy'@;
put 'biBuZXcoYXx8YykoeHIoQ3AsOCkpfSxjLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpLHc3PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZil7dGhpcy5pZkNvbnRyb2xTdGF0ZVNlcnZpY2U9YSx0aGlzLmxheW91dFNlcnZpY2U9ZCx0'@;
put 'aGlzLmNvbnRyb2xDbGFzc1NlcnZpY2U9aCx0aGlzLm5nQ29udHJvbFNlcnZpY2U9Zix0aGlzLnN1YnNjcmlwdGlvbnM9W10sdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goYS5zdGF0dXNDaGFuZ2VzLnN1YnNjcmliZSh2PT57dGhpcy5zdGF0ZT12LHNldFRpbWVvdXQoKCk9Pnt0aGlzLnVwZGF0'@;
put 'ZUhlbHBlcnMoKX0pfSkpLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKGYuY29udHJvbENoYW5nZXMuc3Vic2NyaWJlKHY9Pnt0aGlzLmNvbnRyb2w9dn0pLGYuYWRkaXRpb25hbENvbnRyb2xzQ2hhbmdlcy5zdWJzY3JpYmUodj0+e3RoaXMuYWRkaXRpb25hbENvbnRyb2xzPXZ9KSl9Z2V0IHNo'@;
put 'b3dIZWxwZXIoKXtyZXR1cm4hIXRoaXMuY29udHJvbEhlbHBlckNvbXBvbmVudH1nZXQgc2hvd1ZhbGlkKCl7cmV0dXJuIHRoaXMudG91Y2hlZCYmdGhpcy5zdGF0ZT09PUFkLlZBTElEJiZ0aGlzLnN1Y2Nlc3NNZXNzYWdlUHJlc2VudH1nZXQgc2hvd0ludmFsaWQoKXtyZXR1cm4gdGhpcy50'@;
put 'b3VjaGVkJiZ0aGlzLnN0YXRlPT09QWQuSU5WQUxJRCYmdGhpcy5lcnJvck1lc3NhZ2VQcmVzZW50fWdldCBzdWNjZXNzTWVzc2FnZVByZXNlbnQoKXtyZXR1cm4hIXRoaXMuY29udHJvbFN1Y2Nlc3NDb21wb25lbnR9Z2V0IGVycm9yTWVzc2FnZVByZXNlbnQoKXtyZXR1cm4hIXRoaXMuY29u'@;
put 'dHJvbEVycm9yQ29tcG9uZW50fWdldCB0b3VjaGVkKCl7cmV0dXJuISghdGhpcy5jb250cm9sPy50b3VjaGVkJiYhdGhpcy5hZGRpdGlvbmFsQ29udHJvbHM/LnNvbWUoYT0+YS50b3VjaGVkKSl9bmdBZnRlckNvbnRlbnRJbml0KCl7dGhpcy51cGRhdGVIZWxwZXJzKCl9bmdPbkRlc3Ryb3ko'@;
put 'KXt0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChhPT5hLnVuc3Vic2NyaWJlKCkpfWNvbnRyb2xDbGFzcygpe3JldHVybiB0aGlzLmNvbnRyb2xDbGFzc1NlcnZpY2UuY29udHJvbENsYXNzKCF0aGlzLmNvbnRyb2xTdWNjZXNzQ29tcG9uZW50JiZ0aGlzLnN0YXRlPT09QWQuVkFMSUR8fCF0'@;
put 'aGlzLnRvdWNoZWQ/QWQuTk9ORTp0aGlzLnN0YXRlLHRoaXMuYWRkR3JpZCgpKX1hZGRHcmlkKCl7cmV0dXJuIHRoaXMubGF5b3V0U2VydmljZSYmIXRoaXMubGF5b3V0U2VydmljZS5pc1ZlcnRpY2FsKCl9dXBkYXRlSGVscGVycygpe3RoaXMubmdDb250cm9sU2VydmljZSYmdGhpcy5uZ0Nv'@;
put 'bnRyb2xTZXJ2aWNlLnNldEhlbHBlcnMoe3Nob3c6dGhpcy5zaG93SW52YWxpZHx8dGhpcy5zaG93SGVscGVyfHx0aGlzLnNob3dWYWxpZCxzaG93SW52YWxpZDp0aGlzLnNob3dJbnZhbGlkLHNob3dIZWxwZXI6dGhpcy5zaG93SGVscGVyLHNob3dWYWxpZDp0aGlzLnNob3dWYWxpZH0pfX1y'@;
put 'ZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZShrZCksR2UoQ3AsOCksR2UoRGQpLEdlKGYxKSl9LGMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24oYSxkLGgpe2lmKDEmYSYmKGFvKGgsZHMsNSksYW8oaCxBVWUsNSks'@;
put 'YW8oaCxoVWUsNSksYW8oaCxqTCw1KSksMiZhKXtsZXQgZjtDaShmPVNpKCkpJiYoZC5sYWJlbD1mLmZpcnN0KSxDaShmPVNpKCkpJiYoZC5jb250cm9sU3VjY2Vzc0NvbXBvbmVudD1mLmZpcnN0KSxDaShmPVNpKCkpJiYoZC5jb250cm9sRXJyb3JDb21wb25lbnQ9Zi5maXJzdCksQ2koZj1T'@;
put 'aSgpKSYmKGQuY29udHJvbEhlbHBlckNvbXBvbmVudD1mLmZpcnN0KX19fSksY30pKCk7Y2xhc3MgWUx7Y29uc3RydWN0b3IobCxhLGQ9MCl7aWYodGhpcy5pbmplY3Rvcj1hLmluamVjdG9yLCF0aGlzLmluamVjdG9yLmdldChsLG51bGwpKXtjb25zdCBoPXRoaXMuaW5qZWN0b3IuZ2V0KFc1'@;
put 'KSxmPXRoaXMuaW5qZWN0b3IuZ2V0KEppKTthLmNyZWF0ZUNvbXBvbmVudChoLnJlc29sdmVDb21wb25lbnRGYWN0b3J5KGNVZSkpO2NvbnN0IHY9aC5yZXNvbHZlQ29tcG9uZW50RmFjdG9yeShsKSxNPVtdO01bZF09W2YubmF0aXZlRWxlbWVudF07Y29uc3QgRD1hLmNyZWF0ZUNvbXBvbmVu'@;
put 'dCh2LHZvaWQgMCx2b2lkIDAsTSk7YS5yZW1vdmUoMCksdGhpcy5pbmplY3Rvcj1ELmluamVjdG9yfX1nZXQobCxhKXtyZXR1cm4gdGhpcy5pbmplY3Rvci5nZXQobCxhKX19bGV0IFVZPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLl90b3VjaGVkPW5ldyBXbn1nZXQgdG91Y2hl'@;
put 'ZENoYW5nZSgpe3JldHVybiB0aGlzLl90b3VjaGVkLmFzT2JzZXJ2YWJsZSgpfW1hcmtBc1RvdWNoZWQoKXt0aGlzLl90b3VjaGVkLm5leHQoKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5'@;
put 'OmMuXHUwMjc1ZmFjfSksY30pKCk7dmFyIFpZPWZ1bmN0aW9uKGMpe3JldHVybiBjLkZPUk09ImZvcm0iLGMuTU9ERUw9Im1vZGVsIixjfShaWXx8e30pO2xldCBDNz0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYsdixNKXt0aGlzLnZjcj1hLHRoaXMud3JhcHBlclR5cGU9ZCx0'@;
put 'aGlzLl9uZ0NvbnRyb2w9Zix0aGlzLnJlbmRlcmVyPXYsdGhpcy5lbD1NLHRoaXMuaW5kZXg9MCx0aGlzLnN1YnNjcmlwdGlvbnM9W10sdGhpcy5hZGRpdGlvbmFsRGlmZmVyPW5ldyBNYXAsaCYmKHRoaXMubmdDb250cm9sU2VydmljZT1oLmdldChmMSxudWxsKSx0aGlzLmlmQ29udHJvbFN0'@;
put 'YXRlU2VydmljZT1oLmdldChrZCxudWxsKSx0aGlzLmNvbnRyb2xDbGFzc1NlcnZpY2U9aC5nZXQoRGQsbnVsbCksdGhpcy5tYXJrQ29udHJvbFNlcnZpY2U9aC5nZXQoVVksbnVsbCksdGhpcy5kaWZmZXJzPWguZ2V0KHdNLG51bGwpKSx0aGlzLmNvbnRyb2xDbGFzc1NlcnZpY2UmJnRoaXMu'@;
put 'Y29udHJvbENsYXNzU2VydmljZS5pbml0Q29udHJvbENsYXNzKHYsTS5uYXRpdmVFbGVtZW50KSx0aGlzLm1hcmtDb250cm9sU2VydmljZSYmdGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5tYXJrQ29udHJvbFNlcnZpY2UudG91Y2hlZENoYW5nZS5zdWJzY3JpYmUoKCk9Pnt0aGlzLm1h'@;
put 'cmtBc1RvdWNoZWQoKX0pKSx0aGlzLm5nQ29udHJvbFNlcnZpY2UmJnRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMubmdDb250cm9sU2VydmljZS5oZWxwZXJzQ2hhbmdlLnN1YnNjcmliZShEPT57dGhpcy5zZXRBcmlhRGVzY3JpYmVkQnkoRCl9KSl9Z2V0IGlkKCl7cmV0dXJuIHRoaXMu'@;
put 'X2lkfXNldCBpZChhKXt0aGlzLl9pZD1hLHRoaXMuY29udHJvbElkU2VydmljZSYmKHRoaXMuY29udHJvbElkU2VydmljZS5pZD1hKX1nZXQgaGFzQWRkaXRpb25hbENvbnRyb2xzKCl7cmV0dXJuIHRoaXMuYWRkaXRpb25hbERpZmZlci5zaXplPjB9bmdPbkluaXQoKXt0aGlzLl9jb250YWlu'@;
put 'ZXJJbmplY3Rvcj1uZXcgWUwodGhpcy53cmFwcGVyVHlwZSx0aGlzLnZjcix0aGlzLmluZGV4KSx0aGlzLmNvbnRyb2xJZFNlcnZpY2U9dGhpcy5fY29udGFpbmVySW5qZWN0b3IuZ2V0KENoKSx0aGlzLmNvbnRhaW5lcklkU2VydmljZT10aGlzLl9jb250YWluZXJJbmplY3Rvci5nZXQocDcs'@;
put 'bnVsbCksdGhpcy5faWQ/dGhpcy5jb250cm9sSWRTZXJ2aWNlLmlkPXRoaXMuX2lkOnRoaXMuX2lkPXRoaXMuY29udHJvbElkU2VydmljZS5pZCx0aGlzLm5nQ29udHJvbFNlcnZpY2UmJnRoaXMuX25nQ29udHJvbCYmKHRoaXMubmdDb250cm9sU2VydmljZS5jb250cm9sPyh0aGlzLm5nQ29u'@;
put 'dHJvbD10aGlzLm5nQ29udHJvbFNlcnZpY2UuY29udHJvbCx0aGlzLm5nQ29udHJvbFNlcnZpY2UuYWRkQWRkaXRpb25hbENvbnRyb2wodGhpcy5fbmdDb250cm9sKSx0aGlzLmFkZGl0aW9uYWxEaWZmZXIuc2V0KHRoaXMuX25nQ29udHJvbCx0aGlzLmRpZmZlcnMuZmluZCh0aGlzLl9uZ0Nv'@;
put 'bnRyb2wpLmNyZWF0ZSgpKSk6KHRoaXMubmdDb250cm9sPXRoaXMuX25nQ29udHJvbCx0aGlzLm5nQ29udHJvbFNlcnZpY2Uuc2V0Q29udHJvbCh0aGlzLm5nQ29udHJvbCksdGhpcy5kaWZmZXI9dGhpcy5kaWZmZXJzLmZpbmQodGhpcy5fbmdDb250cm9sKS5jcmVhdGUoKSkpfW5nRG9DaGVj'@;
put 'aygpe2lmKHRoaXMudHJpZ2dlckRvQ2hlY2sodGhpcy5kaWZmZXIsdGhpcy5uZ0NvbnRyb2wpLHRoaXMuaGFzQWRkaXRpb25hbENvbnRyb2xzKWZvcihjb25zdFthLGRdb2YgdGhpcy5hZGRpdGlvbmFsRGlmZmVyKXRoaXMudHJpZ2dlckRvQ2hlY2soZCxhKX1uZ09uRGVzdHJveSgpe3RoaXMu'@;
put 'c3Vic2NyaXB0aW9ucy5mb3JFYWNoKGE9PmE/LnVuc3Vic2NyaWJlKCkpfXRyaWdnZXJWYWxpZGF0aW9uKCl7dGhpcy5pZkNvbnRyb2xTdGF0ZVNlcnZpY2UmJnRoaXMuaWZDb250cm9sU3RhdGVTZXJ2aWNlLnRyaWdnZXJTdGF0dXNDaGFuZ2UoKX1nZXRQcm92aWRlckZyb21Db250YWluZXIo'@;
put 'YSxkKXt0cnl7cmV0dXJuIHRoaXMuX2NvbnRhaW5lckluamVjdG9yLmdldChhLGQpfWNhdGNoe3JldHVybiBkfX10cmlnZ2VyRG9DaGVjayhhLGQpe2lmKGEpe2NvbnN0IGg9YS5kaWZmKGQpO2gmJmguZm9yRWFjaENoYW5nZWRJdGVtKGY9PnsoZi5rZXk9PT1aWS5GT1JNfHxmLmtleT09PVpZ'@;
put 'Lk1PREVMKSYmZi5jdXJyZW50VmFsdWUhPT1mLnByZXZpb3VzVmFsdWUmJnRoaXMudHJpZ2dlclZhbGlkYXRpb24oKX0pfX1tYXJrQXNUb3VjaGVkKCl7dGhpcy5uZ0NvbnRyb2wmJih0aGlzLm5nQ29udHJvbC5jb250cm9sLm1hcmtBc1RvdWNoZWQoKSx0aGlzLm5nQ29udHJvbC5jb250cm9s'@;
put 'LnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKSksdGhpcy5uZ0NvbnRyb2xTZXJ2aWNlJiZ0aGlzLm5nQ29udHJvbFNlcnZpY2UuaGFzQWRkaXRpb25hbENvbnRyb2xzJiZ0aGlzLm5nQ29udHJvbFNlcnZpY2UuYWRkaXRpb25hbENvbnRyb2xzPy5mb3JFYWNoKGE9PnthLmNvbnRyb2wubWFya0Fz'@;
put 'VG91Y2hlZCgpLGEuY29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCl9KX1zZXRBcmlhRGVzY3JpYmVkQnkoYSl7aWYoYS5zaG93KXtjb25zdCBkPXRoaXMuZ2V0QXJpYURlc2NyaWJlZEJ5SWQoYSk7aWYobnVsbCE9PWQpcmV0dXJuIHZvaWQgdGhpcy5yZW5kZXJlci5zZXRBdHRyaWJ1'@;
put 'dGUodGhpcy5lbC5uYXRpdmVFbGVtZW50LCJhcmlhLWRlc2NyaWJlZGJ5IixkKX10aGlzLnJlbmRlcmVyLnJlbW92ZUF0dHJpYnV0ZSh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsImFyaWEtZGVzY3JpYmVkYnkiKX1nZXRBcmlhRGVzY3JpYmVkQnlJZChhKXtjb25zdCBkPXRoaXMuY29udGFpbmVy'@;
put 'SWRTZXJ2aWNlPy5pZHx8dGhpcy5jb250cm9sSWRTZXJ2aWNlPy5pZDtpZighZClyZXR1cm4gbnVsbDtjb25zdCBoPVtgJHtkfS1oZWxwZXJgXTtyZXR1cm4gYS5zaG93SW52YWxpZD9oLnB1c2goYCR7ZH0tZXJyb3JgKTphLnNob3dWYWxpZCYmaC5wdXNoKGAke2R9LXN1Y2Nlc3NgKSxoLmpv'@;
put 'aW4oIiAiKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2UoRG8pLEdlKGo2KSxHZShEcyksR2UoZDEpLEdlKEVvKSxHZShKaSkpfSxjLlx1MDI3NWRpcj1Fcih7dHlwZTpjLGhvc3RWYXJzOjEsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MSZh'@;
put 'JiZGdCgiYmx1ciIsZnVuY3Rpb24oKXtyZXR1cm4gZC50cmlnZ2VyVmFsaWRhdGlvbigpfSksMiZhJiZvcCgiaWQiLGQuaWQpfSxpbnB1dHM6e2lkOiJpZCJ9fSksY30pKCksUTFlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkKXt0aGlzLmxheW91dFNlcnZpY2U9YSx0aGlzLm1hcmtD'@;
put 'b250cm9sU2VydmljZT1kfXNldCBsYWJlbFNpemUoYSl7Y29uc3QgZD1wYXJzZUludChhLDEwKXx8Mjt0aGlzLmxheW91dFNlcnZpY2UubGFiZWxTaXplPWR9b25Gb3JtU3VibWl0KCl7dGhpcy5tYXJrQXNUb3VjaGVkKCl9bWFya0FzVG91Y2hlZCgpe3RoaXMubWFya0NvbnRyb2xTZXJ2aWNl'@;
put 'Lm1hcmtBc1RvdWNoZWQoKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2UoQ3ApLEdlKFVZKSl9LGMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsImNsckZvcm0iLCIiXV0sY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24oYSxkLGgp'@;
put 'e2lmKDEmYSYmYW8oaCxkcyw1KSwyJmEpe2xldCBmO0NpKGY9U2koKSkmJihkLmxhYmVscz1mKX19LGhvc3RWYXJzOjYsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MSZhJiZGdCgic3VibWl0IixmdW5jdGlvbigpe3JldHVybiBkLm9uRm9ybVN1Ym1pdCgpfSksMiZhJiZUcigiY2xyLWZv'@;
put 'cm0iLCEwKSgiY2xyLWZvcm0taG9yaXpvbnRhbCIsZC5sYXlvdXRTZXJ2aWNlLmlzSG9yaXpvbnRhbCgpKSgiY2xyLWZvcm0tY29tcGFjdCIsZC5sYXlvdXRTZXJ2aWNlLmlzQ29tcGFjdCgpKX0saW5wdXRzOntsYWJlbFNpemU6W05uLk5vbmUsImNsckxhYmVsU2l6ZSIsImxhYmVsU2l6ZSJd'@;
put 'fSxmZWF0dXJlczpbZGEoW0NwLFVZXSldfSksY30pKCksYXU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe1RzLmFkZEljb25zKHZoLGJoKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPWtpKHt0eXBlOmN9KSxjLlx1MDI3'@;
put 'NWluaj1Bcih7aW1wb3J0czpbUmEsQXNdfSksY30pKCk7Y29uc3QgV1k9bmV3IFN0KCJJU19UT0dHTEUiKSxSVWU9e3Byb3ZpZGU6V1ksdXNlRmFjdG9yeTpmdW5jdGlvbiBJVWUoKXtyZXR1cm4gbmV3IGVpKCExKX19O2xldCBTaD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMu'@;
put 'dG9nZ2xlPSExLHRoaXMuc3Vic2NyaXB0aW9ucz1bXSx0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChhLnN1YnNjcmliZShkPT57dGhpcy50b2dnbGU9ZH0pKX1uZ09uSW5pdCgpe3RoaXMubGFiZWwmJnRoaXMubGFiZWwuZGlzYWJsZUdyaWQoKX1uZ09uRGVzdHJveSgpe3RoaXMuc3Vic2NyaXB0'@;
put 'aW9ucy5mb3JFYWNoKGE9PmEudW5zdWJzY3JpYmUoKSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKFdZKSl9LGMuXHUwMjc1Y21wPVZyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1jaGVja2JveC13cmFwcGVyIl0sWyJjbHItdG9nZ2xlLXdy'@;
put 'YXBwZXIiXV0sY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24oYSxkLGgpe2lmKDEmYSYmKGFvKGgsZHMsNyksYW8oaCxJZCw3KSksMiZhKXtsZXQgZjtDaShmPVNpKCkpJiYoZC5sYWJlbD1mLmZpcnN0KSxDaShmPVNpKCkpJiYoZC5jaGVja2JveD1mLmZpcnN0KX19LGhvc3RWYXJzOjYsaG9zdEJp'@;
put 'bmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiZUcigiY2xyLWNoZWNrYm94LXdyYXBwZXIiLCFkLnRvZ2dsZSkoImNsci1jaGVja2JveC13cmFwcGVyLWRpc2FibGVkIixudWxsPT1kLmNoZWNrYm94P251bGw6ZC5jaGVja2JveC5jb250cm9sRGlzYWJsZWQpKCJjbHItdG9nZ2xlLXdyYXBwZXIi'@;
put 'LGQudG9nZ2xlKX0sZmVhdHVyZXM6W2RhKFtDaCxSVWVdKV0sbmdDb250ZW50U2VsZWN0b3JzOkRIZSxkZWNsczozLHZhcnM6MSxjb25zdHM6W1s0LCJuZ0lmIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoc2Eoa0hlKSxZcigwKSxZcigxLDEpLGd0KDIsSUhlLDEsMCwibGFiZWwi'@;
put 'LDApKSwyJmEmJihmZSgyKSxNZSgibmdJZiIsIWQubGFiZWwpKX0sZGVwZW5kZW5jaWVzOltiYSxkc10sZW5jYXBzdWxhdGlvbjoyfSksY30pKCksSWQ9KCgpPT57Y2xhc3MgYyBleHRlbmRzIEM3e2NvbnN0cnVjdG9yKGEsZCxoLGYsdixNKXtzdXBlcihhLFNoLGQsaCxmLHYpLHRoaXMuY29u'@;
put 'dHJvbD1oLHRoaXMudG9nZ2xlPU19Z2V0IGNvbnRyb2xEaXNhYmxlZCgpe3JldHVybiB0aGlzLmNvbnRyb2w/LmRpc2FibGVkfW5nT25Jbml0KCl7c3VwZXIubmdPbkluaXQoKTtjb25zdCBhPXRoaXMuZ2V0UHJvdmlkZXJGcm9tQ29udGFpbmVyKFdZLG51bGwpO2EmJm51bGwhPT10aGlzLnRv'@;
put 'Z2dsZSYmYS5uZXh0KCEwKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2UoRG8pLEdlKERzKSxHZShkMSwxMCksR2UoRW8pLEdlKEppKSxJZigiY2xyVG9nZ2xlIikpfSxjLlx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJjbHJD'@;
put 'aGVja2JveCIsIiJdLFsiIiwiY2xyVG9nZ2xlIiwiIl1dLGhvc3RWYXJzOjEsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiZocigicm9sZSIsbnVsbCE9PWQudG9nZ2xlPyJzd2l0Y2giOm51bGwpfSxmZWF0dXJlczpbd2FdfSksY30pKCksQnk9KCgpPT57Y2xhc3MgYyBleHRlbmRz'@;
put 'IHc3e2NvbnN0cnVjdG9yKGEsZCxoLGYpe3N1cGVyKGYsYSxkLGgpLHRoaXMubGF5b3V0U2VydmljZT1hLHRoaXMuY29udHJvbENsYXNzU2VydmljZT1kLHRoaXMubmdDb250cm9sU2VydmljZT1oLHRoaXMuaWZDb250cm9sU3RhdGVTZXJ2aWNlPWYsdGhpcy5pbmxpbmU9ITF9Z2V0IGNscklu'@;
put 'bGluZSgpe3JldHVybiB0aGlzLmlubGluZX1zZXQgY2xySW5saW5lKGEpe3RoaXMuaW5saW5lPSJzdHJpbmciPT10eXBlb2YgYT8iZmFsc2UiIT09YTohIWF9Z2V0IGFsbENoZWNrYm94ZXNEaXNhYmxlZCgpe3JldHVybiB0aGlzLmNvbnRyb2w/LmRpc2FibGVkJiYoIXRoaXMuYWRkaXRpb25h'@;
put 'bENvbnRyb2xzPy5sZW5ndGh8fHRoaXMuYWRkaXRpb25hbENvbnRyb2xzLmV2ZXJ5KGE9PmEuZGlzYWJsZWQpKX1uZ0FmdGVyQ29udGVudEluaXQoKXt0aGlzLnNldEFyaWFSb2xlcygpfXNldEFyaWFSb2xlcygpe3RoaXMucm9sZT10aGlzLmNoZWNrYm94ZXMubGVuZ3RoPyJncm91cCI6bnVs'@;
put 'bH19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2UoQ3AsOCksR2UoRGQpLEdlKGYxKSxHZShrZCkpfSxjLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItY2hlY2tib3gtY29udGFpbmVyIl0sWyJjbHItdG9nZ2xlLWNvbnRhaW5l'@;
put 'ciJdXSxjb250ZW50UXVlcmllczpmdW5jdGlvbihhLGQsaCl7aWYoMSZhJiZhbyhoLElkLDUpLDImYSl7bGV0IGY7Q2koZj1TaSgpKSYmKGQuY2hlY2tib3hlcz1mKX19LGhvc3RWYXJzOjcsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiYoaHIoInJvbGUiLGQucm9sZSksVHIoImNs'@;
put 'ci1mb3JtLWNvbnRyb2wiLCEwKSgiY2xyLWZvcm0tY29udHJvbC1kaXNhYmxlZCIsZC5hbGxDaGVja2JveGVzRGlzYWJsZWQpKCJjbHItcm93IixkLmFkZEdyaWQoKSkpfSxpbnB1dHM6e2NscklubGluZToiY2xySW5saW5lIn0sZmVhdHVyZXM6W2RhKFtrZCxmMSxEZCxwN10pLHdhXSxuZ0Nv'@;
put 'bnRlbnRTZWxlY3RvcnM6TEhlLGRlY2xzOjYsdmFyczo2LGNvbnN0czpbWzQsIm5nSWYiXSxbMSwiY2xyLWNvbnRyb2wtY29udGFpbmVyIiwzLCJuZ0NsYXNzIl0sWyJjbGFzcyIsImNsci1zdWJ0ZXh0LXdyYXBwZXIiLDQsIm5nSWYiXSxbMSwiY2xyLXN1YnRleHQtd3JhcHBlciJdLFsiY2xh'@;
put 'c3MiLCJjbHItdmFsaWRhdGUtaWNvbiIsInNoYXBlIiwiZXhjbGFtYXRpb24tY2lyY2xlIiwic3RhdHVzIiwiZGFuZ2VyIiwiYXJpYS1oaWRkZW4iLCJ0cnVlIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImNsci12YWxpZGF0ZS1pY29uIiwic2hhcGUiLCJjaGVjay1jaXJjbGUiLCJzdGF0dXMiLCJz'@;
put 'dWNjZXNzIiwiYXJpYS1oaWRkZW4iLCJ0cnVlIiw0LCJuZ0lmIl0sWyJzaGFwZSIsImV4Y2xhbWF0aW9uLWNpcmNsZSIsInN0YXR1cyIsImRhbmdlciIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsMSwiY2xyLXZhbGlkYXRlLWljb24iXSxbInNoYXBlIiwiY2hlY2stY2lyY2xlIiwic3RhdHVzIiwi'@;
put 'c3VjY2VzcyIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsMSwiY2xyLXZhbGlkYXRlLWljb24iXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihzYShSSGUpLFlyKDApLGd0KDEsT0hlLDEsMCwibGFiZWwiLDApLGRlKDIsImRpdiIsMSksWXIoMywxKSxndCg0LFBIZSwyLDAsImRpdiIsMiko'@;
put 'NSxCSGUsNSw0LCJkaXYiLDIpLGhlKCkpLDImYSYmKGZlKCksTWUoIm5nSWYiLCFkLmxhYmVsJiZkLmFkZEdyaWQoKSksZmUoKSxUcigiY2xyLWNvbnRyb2wtaW5saW5lIixkLmNscklubGluZSksTWUoIm5nQ2xhc3MiLGQuY29udHJvbENsYXNzKCkpLGZlKDIpLE1lKCJuZ0lmIixkLnNob3dI'@;
put 'ZWxwZXIpLGZlKCksTWUoIm5nSWYiLGQuc2hvd0ludmFsaWR8fGQuc2hvd1ZhbGlkKSl9LGRlcGVuZGVuY2llczpbd3UsYmEscnMsZHNdLGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpLExVZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7VHMuYWRkSWNvbnModmgsYmgpfX1yZXR1cm4gYy5c'@;
put 'dTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9a2koe3R5cGU6Y30pLGMuXHUwMjc1aW5qPUFyKHtpbXBvcnRzOltSYSxBcyxhdSxCeCxhdV19KSxjfSkoKTtmdW5jdGlvbiBxZihjKXtyZXR1cm4gbnVsbCE9PWMmJigic3RyaW5nIj09dHlwZW9mIGM/'@;
put 'Yy5sZW5ndGg+PTA6ImJvb2xlYW4iPT10eXBlb2YgYyYmYyl9bGV0IFJkPSgoKT0+e2NsYXNzIGN7Z2V0IHNwaW5uZXJDbGFzcygpe3JldHVybiEwfWdldCBpbmxpbmVDbGFzcygpe3JldHVybiB0aGlzLl9pbmxpbmV9c2V0IGNscklubGluZShhKXt0aGlzLl9pbmxpbmU9cWYoYSl9Z2V0IGlu'@;
put 'dmVyc2VDbGFzcygpe3JldHVybiB0aGlzLl9pbnZlcnNlfXNldCBjbHJJbnZlcnNlKGEpe3RoaXMuX2ludmVyc2U9cWYoYSl9Z2V0IHNtYWxsQ2xhc3MoKXtyZXR1cm4gdGhpcy5fc21hbGx9c2V0IGNsclNtYWxsKGEpe3RoaXMuX3NtYWxsPXFmKGEpfWdldCBtZWRpdW1DbGFzcygpe3JldHVy'@;
put 'biF0aGlzLl9zbWFsbCYmdGhpcy5fbWVkaXVtfXNldCBjbHJNZWRpdW0oYSl7dGhpcy5fbWVkaXVtPXFmKGEpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLXNwaW5uZXIiXV0s'@;
put 'aG9zdFZhcnM6MTEsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiYoaHIoImFyaWEtYnVzeSIsITApLFRyKCJzcGlubmVyIixkLnNwaW5uZXJDbGFzcykoInNwaW5uZXItaW5saW5lIixkLmlubGluZUNsYXNzKSgic3Bpbm5lci1pbnZlcnNlIixkLmludmVyc2VDbGFzcykoInNwaW5u'@;
put 'ZXItc20iLGQuc21hbGxDbGFzcykoInNwaW5uZXItbWQiLGQubWVkaXVtQ2xhc3MpKX0saW5wdXRzOntjbHJJbmxpbmU6ImNscklubGluZSIsY2xySW52ZXJzZToiY2xySW52ZXJzZSIsY2xyU21hbGw6ImNsclNtYWxsIixjbHJNZWRpdW06ImNsck1lZGl1bSJ9LG5nQ29udGVudFNlbGVjdG9y'@;
put 'czp5byxkZWNsczoxLHZhcnM6MCx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKHNhKCksWXIoMCkpfSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxqeT0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9'@;
put 'a2koe3R5cGU6Y30pLGMuXHUwMjc1aW5qPUFyKHtpbXBvcnRzOltSYV19KSxjfSkoKTt2YXIgYm09ZnVuY3Rpb24oYyl7cmV0dXJuIGMuVkVSVElDQUw9InZlcnRpY2FsIixjLkhPUklaT05UQUw9Imhvcml6b250YWwiLGMuQk9USD0iYm90aCIsY30oYm18fHt9KTtsZXQgZWRlPSgoKT0+e2Ns'@;
put 'YXNzIGN7Y29uc3RydWN0b3IoYSxkKXt0aGlzLmVsZW1lbnRSZWY9YSx0aGlzLnBsYXRmb3JtSWQ9ZH1nZXQgbmF0aXZlRWxlbWVudCgpe3JldHVybiB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudH1mb2N1cygpe3RsKHRoaXMucGxhdGZvcm1JZCkmJnRoaXMuZWxlbWVudFJlZi5uYXRp'@;
put 'dmVFbGVtZW50LmZvY3VzKCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKEppKSxHZShpbykpfSxjLlx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJjbHJLZXlGb2N1c0l0ZW0iLCIiXV19KSxjfSkoKSx6eT0oKCk9PntjbGFz'@;
put 'cyBje2NvbnN0cnVjdG9yKGEpe3RoaXMuZWxlbWVudFJlZj1hLHRoaXMuZGlyZWN0aW9uPWJtLlZFUlRJQ0FMLHRoaXMuZm9jdXNPbkxvYWQ9ITEsdGhpcy5zdWJzY3JpcHRpb25zPVtdLHRoaXMuZm9jdXNDaGFuZ2U9bmV3IEtyLHRoaXMuX2N1cnJlbnQ9MH1nZXQgZm9jdXNhYmxlSXRlbXMo'@;
put 'KXtyZXR1cm4gdGhpcy5fZm9jdXNhYmxlSXRlbXM/dGhpcy5fZm9jdXNhYmxlSXRlbXM6dGhpcy5jbHJLZXlGb2N1c0l0ZW1zP3RoaXMuY2xyS2V5Rm9jdXNJdGVtcy50b0FycmF5KCk6W119c2V0IGZvY3VzYWJsZUl0ZW1zKGEpe0FycmF5LmlzQXJyYXkoYSkmJmEubGVuZ3RoJiYodGhpcy5f'@;
put 'Zm9jdXNhYmxlSXRlbXM9YSx0aGlzLmluaXRpYWxpemVGb2N1cygpKX1nZXQgbmF0aXZlRWxlbWVudCgpe3JldHVybiB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudH1nZXQgY3VycmVudCgpe3JldHVybiB0aGlzLl9jdXJyZW50fXNldCBjdXJyZW50KGEpe3RoaXMuX2N1cnJlbnQhPT1h'@;
put 'JiYodGhpcy5fY3VycmVudD1hKX1nZXQgY3VycmVudEl0ZW0oKXtyZXR1cm4gdGhpcy5mb2N1c2FibGVJdGVtc1t0aGlzLl9jdXJyZW50XX1nZXQgY3VycmVudEl0ZW1FbGVtZW50KCl7cmV0dXJuIHRoaXMuY3VycmVudEl0ZW0ubmF0aXZlRWxlbWVudD90aGlzLmN1cnJlbnRJdGVtLm5hdGl2'@;
put 'ZUVsZW1lbnQ6dGhpcy5jdXJyZW50SXRlbX1uZ0FmdGVyQ29udGVudEluaXQoKXt0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCh0aGlzLmxpc3RlbkZvckl0ZW1VcGRhdGVzKCkpLHRoaXMuaW5pdGlhbGl6ZUZvY3VzKCl9bmdPbkRlc3Ryb3koKXt0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChh'@;
put 'PT5hLnVuc3Vic2NyaWJlKCkpfWhhbmRsZUtleWJvYXJkRXZlbnQoYSl7aWYodGhpcy5jdXJyZW50SXRlbUVsZW1lbnQhPT1hLnRhcmdldCl7Y29uc3QgZD10aGlzLmdldEl0ZW1Qb3NpdGlvbihhLnRhcmdldCk7dGhpcy5wb3NpdGlvbkluUmFuZ2UoZCkmJih0aGlzLmN1cnJlbnQ9ZCl9dGhp'@;
put 'cy5wcmV2S2V5UHJlc3NlZChhKSYmdGhpcy5jdXJyZW50Rm9jdXNJc05vdEZpcnN0SXRlbSgpP3RoaXMubW92ZVRvKHRoaXMuY3VycmVudC0xKTp0aGlzLm5leHRLZXlQcmVzc2VkKGEpJiZ0aGlzLmN1cnJlbnRGb2N1c0lzTm90TGFzdEl0ZW0oKT90aGlzLm1vdmVUbyh0aGlzLmN1cnJlbnQr'@;
put 'MSk6YS5jb2RlPT09Z2EuSG9tZT90aGlzLm1vdmVUbygwKTphLmNvZGU9PT1nYS5FbmQmJnRoaXMubW92ZVRvKHRoaXMuZm9jdXNhYmxlSXRlbXMubGVuZ3RoLTEpLFJZKGEpfXNldENsaWNrZWRJdGVtQ3VycmVudChhKXtjb25zdCBkPXRoaXMuZ2V0SXRlbVBvc2l0aW9uKGEudGFyZ2V0KTtk'@;
put 'Pi0xJiZ0aGlzLm1vdmVUbyhkKX1mb2N1c0N1cnJlbnQoKXt0aGlzLmN1cnJlbnRJdGVtLmZvY3VzKCksdGhpcy5mb2N1c0NoYW5nZS5uZXh0KHRoaXMuX2N1cnJlbnQpfW1vdmVUbyhhKXt0aGlzLnBvc2l0aW9uSW5SYW5nZShhKSYmKHRoaXMuY3VycmVudD1hLHRoaXMuZm9jdXNDdXJyZW50'@;
put 'KCkpfXBvc2l0aW9uSW5SYW5nZShhKXtyZXR1cm4gYT49MCYmYTx0aGlzLmZvY3VzYWJsZUl0ZW1zLmxlbmd0aH1jdXJyZW50Rm9jdXNJc05vdEZpcnN0SXRlbSgpe3JldHVybiB0aGlzLl9jdXJyZW50LTE+PTB9Y3VycmVudEZvY3VzSXNOb3RMYXN0SXRlbSgpe3JldHVybiB0aGlzLl9jdXJy'@;
put 'ZW50KzE8dGhpcy5mb2N1c2FibGVJdGVtcy5sZW5ndGh9aW5pdGlhbGl6ZUZvY3VzKCl7dGhpcy5mb2N1c2FibGVJdGVtcyYmdGhpcy5mb2N1c2FibGVJdGVtcy5sZW5ndGgmJih0aGlzLl9jdXJyZW50Pj10aGlzLmZvY3VzYWJsZUl0ZW1zLmxlbmd0aCYmKHRoaXMuX2N1cnJlbnQ9dGhpcy5m'@;
put 'b2N1c2FibGVJdGVtcy5sZW5ndGgtMSksdGhpcy5mb2N1c09uTG9hZCYmKHRoaXMuY3VycmVudEl0ZW0uZm9jdXMoKSx0aGlzLmZvY3VzQ2hhbmdlLmVtaXQoKSkpfW5leHRLZXlQcmVzc2VkKGEpe2NvbnN0IGQ9STIoYS5rZXkpO3N3aXRjaCh0aGlzLmRpcmVjdGlvbil7Y2FzZSBibS5WRVJU'@;
put 'SUNBTDpyZXR1cm4gZD09PWdhLkFycm93RG93bjtjYXNlIGJtLkhPUklaT05UQUw6cmV0dXJuIGQ9PT1nYS5BcnJvd1JpZ2h0O2Nhc2UgYm0uQk9USDpyZXR1cm4gZD09PWdhLkFycm93RG93bnx8ZD09PWdhLkFycm93UmlnaHQ7ZGVmYXVsdDpyZXR1cm4hMX19cHJldktleVByZXNzZWQoYSl7'@;
put 'Y29uc3QgZD1JMihhLmtleSk7c3dpdGNoKHRoaXMuZGlyZWN0aW9uKXtjYXNlIGJtLlZFUlRJQ0FMOnJldHVybiBkPT09Z2EuQXJyb3dVcDtjYXNlIGJtLkhPUklaT05UQUw6cmV0dXJuIGQ9PT1nYS5BcnJvd0xlZnQ7Y2FzZSBibS5CT1RIOnJldHVybiBkPT09Z2EuQXJyb3dVcHx8ZD09PWdh'@;
put 'LkFycm93TGVmdDtkZWZhdWx0OnJldHVybiExfX1nZXRJdGVtUG9zaXRpb24oYSl7cmV0dXJuIHRoaXMuX2ZvY3VzYWJsZUl0ZW1zP3RoaXMuZm9jdXNhYmxlSXRlbXMuaW5kZXhPZihhKTp0aGlzLmZvY3VzYWJsZUl0ZW1zLm1hcChkPT5kLm5hdGl2ZUVsZW1lbnQpLmluZGV4T2YoYSl9bGlz'@;
put 'dGVuRm9ySXRlbVVwZGF0ZXMoKXtyZXR1cm4gdGhpcy5jbHJLZXlGb2N1c0l0ZW1zLmNoYW5nZXMuc3Vic2NyaWJlKCgpPT57dGhpcy5pbml0aWFsaXplRm9jdXMoKX0pfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZShKaSkpfSxjLlx1MDI3NWNt'@;
put 'cD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJjbHJLZXlGb2N1cyIsIiJdXSxjb250ZW50UXVlcmllczpmdW5jdGlvbihhLGQsaCl7aWYoMSZhJiZhbyhoLGVkZSw1KSwyJmEpe2xldCBmO0NpKGY9U2koKSkmJihkLmNscktleUZvY3VzSXRlbXM9Zil9fSxob3N0QmluZGluZ3M6ZnVuY3Rp'@;
put 'b24oYSxkKXsxJmEmJkZ0KCJrZXlkb3duIixmdW5jdGlvbihmKXtyZXR1cm4gZC5oYW5kbGVLZXlib2FyZEV2ZW50KGYpfSkoImNsaWNrIixmdW5jdGlvbihmKXtyZXR1cm4gZC5zZXRDbGlja2VkSXRlbUN1cnJlbnQoZil9KX0saW5wdXRzOntkaXJlY3Rpb246W05uLk5vbmUsImNsckRpcmVj'@;
put 'dGlvbiIsImRpcmVjdGlvbiJdLGZvY3VzT25Mb2FkOltObi5Ob25lLCJjbHJGb2N1c09uTG9hZCIsImZvY3VzT25Mb2FkIl0sZm9jdXNhYmxlSXRlbXM6W05uLk5vbmUsImNscktleUZvY3VzIiwiZm9jdXNhYmxlSXRlbXMiXX0sb3V0cHV0czp7Zm9jdXNDaGFuZ2U6ImNsckZvY3VzQ2hhbmdl'@;
put 'In0sYXR0cnM6akhlLG5nQ29udGVudFNlbGVjdG9yczp5byxkZWNsczoxLHZhcnM6MCx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKHNhKCksWXIoMCkpfSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxZWT0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7'@;
put 'cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9a2koe3R5cGU6Y30pLGMuXHUwMjc1aW5qPUFyKHtpbXBvcnRzOltSYV19KSxjfSkoKTtjbGFzcyBPVWV7Y29udGFpbnNJdGVtKGwpe3JldHVybiEhdGhpcy5tb2RlbCYmdGhpcy5tb2RlbC5pbmNsdWRlcyhsKX1zZWxlY3QobCl7dGhpcy5h'@;
put 'ZGRJdGVtKGwpfXVuc2VsZWN0KGwpe3RoaXMucmVtb3ZlSXRlbShsKX1pc0VtcHR5KCl7cmV0dXJuISh0aGlzLm1vZGVsJiZ0aGlzLm1vZGVsLmxlbmd0aD4wKX1wb3AoKXtsZXQgbDtyZXR1cm4gdGhpcy5tb2RlbCYmdGhpcy5tb2RlbC5sZW5ndGg+MCYmKGw9dGhpcy5tb2RlbFt0aGlzLm1v'@;
put 'ZGVsLmxlbmd0aC0xXSx0aGlzLnJlbW92ZUl0ZW0obCkpLGx9dG9TdHJpbmcobCxhPS0xKXtsZXQgZD0iIjtyZXR1cm4gdGhpcy5tb2RlbCYmKGE+LTE/dGhpcy5tb2RlbFthXSYmKGQrPWwmJnRoaXMubW9kZWxbYV1bbF0/dGhpcy5tb2RlbFthXVtsXTp0aGlzLm1vZGVsW2FdLnRvU3RyaW5n'@;
put 'KCkpOnRoaXMubW9kZWwuZm9yRWFjaChoPT57ZCs9bCYmaFtsXT9oW2xdOmgudG9TdHJpbmcoKSxkKz0iICJ9KSksZC50cmltKCl9YWRkSXRlbShsKXt0aGlzLmNvbnRhaW5zSXRlbShsKXx8KHRoaXMubW9kZWw9dGhpcy5tb2RlbHx8W10sdGhpcy5tb2RlbC5wdXNoKGwpKX1yZW1vdmVJdGVt'@;
put 'KGwpe2lmKG51bGw9PXRoaXMubW9kZWwpcmV0dXJuO2NvbnN0IGE9dGhpcy5tb2RlbC5pbmRleE9mKGwpO2E+LTEmJnRoaXMubW9kZWwuc3BsaWNlKGEsMSksMD09PXRoaXMubW9kZWwubGVuZ3RoJiYodGhpcy5tb2RlbD1udWxsKX19Y2xhc3MgUFVle2NvbnRhaW5zSXRlbShsKXtyZXR1cm4g'@;
put 'dGhpcy5tb2RlbD09PWx9c2VsZWN0KGwpe3RoaXMubW9kZWw9bH11bnNlbGVjdChsKXt0aGlzLmNvbnRhaW5zSXRlbShsKSYmKHRoaXMubW9kZWw9bnVsbCl9aXNFbXB0eSgpe3JldHVybiF0aGlzLm1vZGVsfXBvcCgpe2NvbnN0IGw9dGhpcy5tb2RlbDtyZXR1cm4gdGhpcy5tb2RlbD1udWxs'@;
put 'LGx9dG9TdHJpbmcobCl7cmV0dXJuIHRoaXMubW9kZWw/bCYmdGhpcy5tb2RlbFtsXT90aGlzLm1vZGVsW2xdOnRoaXMubW9kZWwudG9TdHJpbmcoKToiIn19Y2xhc3MgRlVlIGV4dGVuZHMgUFVle2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLl9mb2N1c0NoYW5nZWQ9'@;
put 'bmV3IGVpKG51bGwpfWdldCBmb2N1c0NoYW5nZWQoKXtyZXR1cm4gdGhpcy5fZm9jdXNDaGFuZ2VkLmFzT2JzZXJ2YWJsZSgpfXNlbGVjdChsKXt0aGlzLm1vZGVsIT09bCYmKHRoaXMubW9kZWw9bCx0aGlzLl9mb2N1c0NoYW5nZWQubmV4dChsKSl9fWxldCBIVWU9KCgpPT57Y2xhc3MgY3tj'@;
put 'b25zdHJ1Y3Rvcigpe3RoaXMubG9hZGluZz0hMSx0aGlzLnNob3dBbGxPcHRpb25zPSEwLHRoaXMuX2N1cnJlbnRJbnB1dD0iIix0aGlzLl9pbnB1dENoYW5nZWQ9bmV3IGVpKCIiKSx0aGlzLl9zZWxlY3Rpb25DaGFuZ2VkPW5ldyB5eCgxKSx0aGlzLmlucHV0Q2hhbmdlZD10aGlzLl9pbnB1'@;
put 'dENoYW5nZWQuYXNPYnNlcnZhYmxlKCl9Z2V0IGN1cnJlbnRJbnB1dCgpe3JldHVybiB0aGlzLl9jdXJyZW50SW5wdXR9c2V0IGN1cnJlbnRJbnB1dChhKXsiIj09PWEmJiF0aGlzLm11bHRpc2VsZWN0YWJsZSYmdGhpcy5zZXRTZWxlY3Rpb25WYWx1ZShudWxsKSx0aGlzLl9jdXJyZW50SW5w'@;
put 'dXQ9YSx0aGlzLl9pbnB1dENoYW5nZWQubmV4dChhKX1nZXQgc2VsZWN0aW9uQ2hhbmdlZCgpe3JldHVybiB0aGlzLl9zZWxlY3Rpb25DaGFuZ2VkLmFzT2JzZXJ2YWJsZSgpfWdldCBtdWx0aXNlbGVjdGFibGUoKXtyZXR1cm4gdGhpcy5zZWxlY3Rpb25Nb2RlbCBpbnN0YW5jZW9mIE9VZX1z'@;
put 'ZWxlY3QoYSl7bnVsbD09YXx8dGhpcy5zZWxlY3Rpb25Nb2RlbC5jb250YWluc0l0ZW0oYSl8fCh0aGlzLnNlbGVjdGlvbk1vZGVsLnNlbGVjdChhKSx0aGlzLl9zZWxlY3Rpb25DaGFuZ2VkLm5leHQodGhpcy5zZWxlY3Rpb25Nb2RlbCkpfXRvZ2dsZShhKXtudWxsIT1hJiYodGhpcy5zZWxl'@;
put 'Y3Rpb25Nb2RlbC5jb250YWluc0l0ZW0oYSk/dGhpcy5zZWxlY3Rpb25Nb2RlbC51bnNlbGVjdChhKTp0aGlzLnNlbGVjdGlvbk1vZGVsLnNlbGVjdChhKSx0aGlzLl9zZWxlY3Rpb25DaGFuZ2VkLm5leHQodGhpcy5zZWxlY3Rpb25Nb2RlbCkpfXVuc2VsZWN0KGEpe251bGw9PWF8fCF0aGlz'@;
put 'LnNlbGVjdGlvbk1vZGVsLmNvbnRhaW5zSXRlbShhKXx8KHRoaXMuc2VsZWN0aW9uTW9kZWwudW5zZWxlY3QoYSksdGhpcy5fc2VsZWN0aW9uQ2hhbmdlZC5uZXh0KHRoaXMuc2VsZWN0aW9uTW9kZWwpKX1zZXRTZWxlY3Rpb25WYWx1ZShhKXshdGhpcy5zZWxlY3Rpb25Nb2RlbHx8dGhpcy5z'@;
put 'ZWxlY3Rpb25Nb2RlbC5tb2RlbD09PWF8fCF0aGlzLnNlbGVjdGlvbk1vZGVsLm1vZGVsJiYhYXx8KHRoaXMuc2VsZWN0aW9uTW9kZWwubW9kZWw9YSx0aGlzLl9zZWxlY3Rpb25DaGFuZ2VkLm5leHQodGhpcy5zZWxlY3Rpb25Nb2RlbCkpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24o'@;
put 'YSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKTtaMWUoKCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmKXt0aGlzLnRvZ2dsZVNlcnZpY2U9ZCx0aGlzLnNlbGVjdGlvblNlcnZpY2U9aCx0aGlzLnBs'@;
put 'YXRmb3JtSWQ9Zix0aGlzLnBzZXVkb0ZvY3VzPW5ldyBGVWUsdGhpcy5vcHRpb25EYXRhPVtdLHRoaXMuaGFuZGxlRm9jdXNTdWJzY3JpcHRpb24oKSx0aGlzLnJlbmRlcmVyPWEuY3JlYXRlUmVuZGVyZXIobnVsbCxudWxsKX1nZXQgdHJpZ2dlcigpe3JldHVybiB0aGlzLl90cmlnZ2VyfXNl'@;
put 'dCB0cmlnZ2VyKGEpe3RoaXMuX3RyaWdnZXI9YSx0aGlzLmFkZEZvY3VzT25CbHVyTGlzdGVuZXIoYSl9Z2V0IGxpc3Rib3goKXtyZXR1cm4gdGhpcy5fbGlzdGJveH1zZXQgbGlzdGJveChhKXt0aGlzLl9saXN0Ym94PWEsdGhpcy5hZGRGb2N1c09uQmx1ckxpc3RlbmVyKGEpfWdldCB0ZXh0'@;
put 'SW5wdXQoKXtyZXR1cm4gdGhpcy5fdGV4dElucHV0fXNldCB0ZXh0SW5wdXQoYSl7dGhpcy5fdGV4dElucHV0PWEsdGhpcy5yZW5kZXJlci5saXN0ZW4oYSwia2V5ZG93biIsZD0+IXRoaXMuaGFuZGxlVGV4dElucHV0KGQpKSx0aGlzLmFkZEZvY3VzT25CbHVyTGlzdGVuZXIoYSl9Zm9jdXNJ'@;
put 'bnB1dCgpe3RoaXMudGV4dElucHV0JiZ0bCh0aGlzLnBsYXRmb3JtSWQpJiZ0aGlzLnRleHRJbnB1dC5mb2N1cygpfWZvY3VzRmlyc3RBY3RpdmUoKXtpZih0aGlzLm9wdGlvbkRhdGEubGVuZ3RoPjApaWYodGhpcy5zZWxlY3Rpb25TZXJ2aWNlLnNlbGVjdGlvbk1vZGVsLmlzRW1wdHkoKSl0'@;
put 'aGlzLnBzZXVkb0ZvY3VzLnNlbGVjdCh0aGlzLm9wdGlvbkRhdGFbMF0pO2Vsc2V7bGV0IGE7YT10aGlzLnNlbGVjdGlvblNlcnZpY2UubXVsdGlzZWxlY3RhYmxlP3RoaXMuc2VsZWN0aW9uU2VydmljZS5zZWxlY3Rpb25Nb2RlbC5tb2RlbFswXTp0aGlzLnNlbGVjdGlvblNlcnZpY2Uuc2Vs'@;
put 'ZWN0aW9uTW9kZWwubW9kZWw7Y29uc3QgZD10aGlzLm9wdGlvbkRhdGEuZmluZChoPT5oLnZhbHVlPT09YSk7dGhpcy5wc2V1ZG9Gb2N1cy5zZWxlY3QoZHx8dGhpcy5vcHRpb25EYXRhWzBdKSx0aGlzLnNjcm9sbEludG9TZWxlY3RlZE1vZGVsKCJhdXRvIil9fWFkZE9wdGlvblZhbHVlcyhh'@;
put 'KXt0aGlzLm9wdGlvbkRhdGE9YX1oYW5kbGVGb2N1c1N1YnNjcmlwdGlvbigpe3RoaXMudG9nZ2xlU2VydmljZS5vcGVuQ2hhbmdlLnN1YnNjcmliZShhPT57YXx8KHRoaXMucHNldWRvRm9jdXMubW9kZWw9bnVsbCl9KX1tb3ZlRm9jdXNUbyhhKXtsZXQgZD10aGlzLm9wdGlvbkRhdGEuZmlu'@;
put 'ZEluZGV4KGg9PmguZXF1YWxzKHRoaXMucHNldWRvRm9jdXMubW9kZWwpKTthPT09d2guVVA/LTE9PT1kfHwwPT09ZD9kPXRoaXMub3B0aW9uRGF0YS5sZW5ndGgtMTpkLS06YT09PXdoLkRPV04mJigtMT09PWR8fGQ9PT10aGlzLm9wdGlvbkRhdGEubGVuZ3RoLTE/ZD0wOmQrKyksdGhpcy5w'@;
put 'c2V1ZG9Gb2N1cy5zZWxlY3QodGhpcy5vcHRpb25EYXRhW2RdKSx0aGlzLnNjcm9sbEludG9TZWxlY3RlZE1vZGVsKCl9b3BlbkFuZE1vdmVUbyhhKXt0aGlzLnRvZ2dsZVNlcnZpY2Uub3Blbj90aGlzLm1vdmVGb2N1c1RvKGEpOih0aGlzLnRvZ2dsZVNlcnZpY2Uub3BlbkNoYW5nZS5waXBl'@;
put 'KFlmKDEpKS5zdWJzY3JpYmUoZD0+e2QmJnRoaXMubW92ZUZvY3VzVG8oYSl9KSx0aGlzLnRvZ2dsZVNlcnZpY2Uub3Blbj0hMCl9aGFuZGxlVGV4dElucHV0KGEpe2xldCBkPSExO2NvbnN0IGg9STIoYS5rZXkpO2lmKGEpc3dpdGNoKGgpe2Nhc2UgZ2EuRW50ZXI6dGhpcy50b2dnbGVTZXJ2'@;
put 'aWNlLm9wZW4mJnRoaXMucHNldWRvRm9jdXMubW9kZWwmJih0aGlzLnNlbGVjdGlvblNlcnZpY2UubXVsdGlzZWxlY3RhYmxlP3RoaXMuc2VsZWN0aW9uU2VydmljZS50b2dnbGUodGhpcy5wc2V1ZG9Gb2N1cy5tb2RlbC52YWx1ZSk6dGhpcy5zZWxlY3Rpb25TZXJ2aWNlLnNlbGVjdCh0aGlz'@;
put 'LnBzZXVkb0ZvY3VzLm1vZGVsLnZhbHVlKSxkPSEwKTticmVhaztjYXNlIGdhLlNwYWNlOnRoaXMudG9nZ2xlU2VydmljZS5vcGVufHwodGhpcy50b2dnbGVTZXJ2aWNlLm9wZW49ITAsZD0hMCk7YnJlYWs7Y2FzZSBnYS5BcnJvd1VwOnRoaXMucHJldmVudFZpZXdwb3J0U2Nyb2xsaW5nKGEp'@;
put 'LHRoaXMub3BlbkFuZE1vdmVUbyh3aC5VUCksZD0hMDticmVhaztjYXNlIGdhLkFycm93RG93bjp0aGlzLnByZXZlbnRWaWV3cG9ydFNjcm9sbGluZyhhKSx0aGlzLm9wZW5BbmRNb3ZlVG8od2guRE9XTiksZD0hMDticmVhaztkZWZhdWx0OmEua2V5IT09Z2EuVGFiJiYoIXRoaXMuc2VsZWN0'@;
put 'aW9uU2VydmljZS5tdWx0aXNlbGVjdGFibGV8fGEua2V5IT09Z2EuQmFja3NwYWNlKSYmYS5rZXkhPT1nYS5Fc2NhcGUmJiF0aGlzLnRvZ2dsZVNlcnZpY2Uub3BlbiYmKHRoaXMudG9nZ2xlU2VydmljZS5vcGVuPSEwKX1yZXR1cm4gZH1zY3JvbGxJbnRvU2VsZWN0ZWRNb2RlbChhPSJzbW9v'@;
put 'dGgiKXt0aGlzLnBzZXVkb0ZvY3VzLm1vZGVsJiZ0aGlzLnBzZXVkb0ZvY3VzLm1vZGVsLmVsJiZ0aGlzLnBzZXVkb0ZvY3VzLm1vZGVsLmVsLnNjcm9sbEludG9WaWV3KHtiZWhhdmlvcjphLGJsb2NrOiJjZW50ZXIiLGlubGluZToibmVhcmVzdCJ9KX1wcmV2ZW50Vmlld3BvcnRTY3JvbGxp'@;
put 'bmcoYSl7YS5wcmV2ZW50RGVmYXVsdCgpLGEuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCl9YWRkRm9jdXNPbkJsdXJMaXN0ZW5lcihhKXt0bCh0aGlzLnBsYXRmb3JtSWQpJiZ0aGlzLnJlbmRlcmVyLmxpc3RlbihhLCJibHVyIixkPT57dGhpcy5mb2N1c091dE9mQ29tcG9uZW50KGQpJiYo'@;
put 'dGhpcy50b2dnbGVTZXJ2aWNlLm9wZW49ITEsdGhpcy5jb21wb25lbnRDZFJlZiYmdGhpcy5jb21wb25lbnRDZFJlZi5kZXRlY3RDaGFuZ2VzKCkpfSl9Zm9jdXNPdXRPZkNvbXBvbmVudChhKXtjb25zdCBkPWEucmVsYXRlZFRhcmdldHx8ZG9jdW1lbnQuYWN0aXZlRWxlbWVudDtyZXR1cm4h'@;
put 'KHRoaXMudGV4dElucHV0LmNvbnRhaW5zKGQpfHx0aGlzLnRyaWdnZXIuY29udGFpbnMoZCl8fHRoaXMubGlzdGJveC5jb250YWlucyhkKSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHhyKHg4KSx4cihzYykseHIoSFVlKSx4cihpbykpfSxjLlx1'@;
put 'MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpKTtsZXQgTlVlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXtUcy5hZGRJY29ucyh2aCxiaCxFeSx2eCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1'@;
put 'MDI3NW1vZD1raSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9QXIoe2ltcG9ydHM6W1JhLFJjLEFzLFlZLGF1LE8yLFZ4LGp5LGF1LE8yXX0pLGN9KSgpLEdMPSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyB3N3t9cmV0dXJuIGMuXHUwMjc1ZmFjPSgoKT0+e2xldCBsO3JldHVybiBmdW5jdGlvbihkKXty'@;
put 'ZXR1cm4obHx8KGw9WXMoYykpKShkfHxjKX19KSgpLGMuXHUwMjc1Y21wPVZyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1pbnB1dC1jb250YWluZXIiXV0saG9zdFZhcnM6Nixob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJlRyKCJjbHItZm9ybS1jb250cm9sIiwhMCkoImNsci1m'@;
put 'b3JtLWNvbnRyb2wtZGlzYWJsZWQiLG51bGw9PWQuY29udHJvbD9udWxsOmQuY29udHJvbC5kaXNhYmxlZCkoImNsci1yb3ciLGQuYWRkR3JpZCgpKX0sZmVhdHVyZXM6W2RhKFtrZCxmMSxDaCxEZF0pLHdhXSxuZ0NvbnRlbnRTZWxlY3RvcnM6R0hlLGRlY2xzOjEzLHZhcnM6Nyxjb25zdHM6'@;
put 'W1s0LCJuZ0lmIl0sWzEsImNsci1jb250cm9sLWNvbnRhaW5lciIsMywibmdDbGFzcyJdLFsxLCJjbHItaW5wdXQtd3JhcHBlciJdLFsxLCJjbHItaW5wdXQtZ3JvdXAiXSxbImNsYXNzIiwiY2xyLXZhbGlkYXRlLWljb24iLCJzaGFwZSIsImV4Y2xhbWF0aW9uLWNpcmNsZSIsInN0YXR1cyIs'@;
put 'ImRhbmdlciIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsNCwibmdJZiJdLFsiY2xhc3MiLCJjbHItdmFsaWRhdGUtaWNvbiIsInNoYXBlIiwiY2hlY2stY2lyY2xlIiwic3RhdHVzIiwic3VjY2VzcyIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsNCwibmdJZiJdLFsic2hhcGUiLCJleGNsYW1hdGlvbi1j'@;
put 'aXJjbGUiLCJzdGF0dXMiLCJkYW5nZXIiLCJhcmlhLWhpZGRlbiIsInRydWUiLDEsImNsci12YWxpZGF0ZS1pY29uIl0sWyJzaGFwZSIsImNoZWNrLWNpcmNsZSIsInN0YXR1cyIsInN1Y2Nlc3MiLCJhcmlhLWhpZGRlbiIsInRydWUiLDEsImNsci12YWxpZGF0ZS1pY29uIl1dLHRlbXBsYXRl'@;
put 'OmZ1bmN0aW9uKGEsZCl7MSZhJiYoc2EoWUhlKSxZcigwKSxndCgxLCRIZSwxLDAsImxhYmVsIiwwKSxkZSgyLCJkaXYiLDEpKDMsImRpdiIsMikoNCwiZGl2IiwzKSxZcig1LDEpLFlyKDYsMiksWXIoNywzKSxoZSgpLGd0KDgsS0hlLDEsMCwiY2RzLWljb24iLDQpKDkscUhlLDEsMCwiY2Rz'@;
put 'LWljb24iLDUpLGhlKCksZ3QoMTAsWEhlLDEsMCwibmctY29udGVudCIsMCkoMTEsSkhlLDEsMCwibmctY29udGVudCIsMCkoMTIsUUhlLDEsMCwibmctY29udGVudCIsMCksaGUoKSksMiZhJiYoZmUoKSxNZSgibmdJZiIsIWQubGFiZWwmJmQuYWRkR3JpZCgpKSxmZSgpLE1lKCJuZ0NsYXNz'@;
put 'IixkLmNvbnRyb2xDbGFzcygpKSxmZSg2KSxNZSgibmdJZiIsZC5zaG93SW52YWxpZCksZmUoKSxNZSgibmdJZiIsZC5zaG93VmFsaWQpLGZlKCksTWUoIm5nSWYiLGQuc2hvd0hlbHBlciksZmUoKSxNZSgibmdJZiIsZC5zaG93SW52YWxpZCksZmUoKSxNZSgibmdJZiIsZC5zaG93VmFsaWQp'@;
put 'KX0sZGVwZW5kZW5jaWVzOlt3dSxiYSxycyxkc10sZW5jYXBzdWxhdGlvbjoyfSksY30pKCksWjE9KCgpPT57Y2xhc3MgYyBleHRlbmRzIEM3e2NvbnN0cnVjdG9yKGEsZCxoLGYsdil7c3VwZXIoYSxHTCxkLGgsZix2KSx0aGlzLmluZGV4PTEsIm51bWJlciI9PT10aGlzLmVsLm5hdGl2ZUVs'@;
put 'ZW1lbnQuZ2V0QXR0cmlidXRlKCJ0eXBlIikmJmNvbnNvbGUud2FybignV2FybmluZzogSW5wdXRzIG9mIHR5cGUgIm51bWJlciIgc2hvdWxkIHV0aWxpemUgdGhlIG51bWJlci1pbnB1dCBjb21wb25lbnQgZm9yIHByb3BlciBoYW5kbGluZy5cblxuICBFeGFtcGxlIHVzYWdlOlxuICA8Y2xy'@;
put 'LW51bWJlci1pbnB1dC1jb250YWluZXI+XG4gICAgPGxhYmVsPk51bWJlciBJbnB1dDwvbGFiZWw+XG4gICAgPGlucHV0IGNsck51bWJlcklucHV0IHR5cGU9Im51bWJlciIvPlxuICA8L2Nsci1udW1iZXItaW5wdXQtY29udGFpbmVyPlxuICAgICAgJyl9fXJldHVybiBjLlx1MDI3NWZhYz1m'@;
put 'dW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKERvKSxHZShEcyksR2UoZDEsMTApLEdlKEVvKSxHZShKaSkpfSxjLlx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJjbHJJbnB1dCIsIiJdXSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYm'@;
put 'VHIoImNsci1pbnB1dCIsITApfSxmZWF0dXJlczpbd2FdfSksY30pKCksdGRlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXtUcy5hZGRJY29ucyh2aCxiaCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD1raSh7dHlwZTpj'@;
put 'fSksYy5cdTAyNzVpbmo9QXIoe2ltcG9ydHM6W1JhLFJjLEFzLGF1LGF1XX0pLGN9KSgpLFV5PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLl9mb2N1c2VkPW5ldyBlaSghMSl9Z2V0IGZvY3VzQ2hhbmdlKCl7cmV0dXJuIHRoaXMuX2ZvY3VzZWQuYXNPYnNlcnZhYmxlKCl9c2V0'@;
put 'IGZvY3VzZWQoYSl7dGhpcy5fZm9jdXNlZC5uZXh0KGEpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSxWVWU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rv'@;
put 'cigpe1RzLmFkZEljb25zKHZoLGJoKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPWtpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1Bcih7aW1wb3J0czpbUmEsdGRlLEFzXX0pLGN9KSgpLEJVZT0oKCk9PntjbGFzcyBje31yZXR1'@;
put 'cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9a2koe3R5cGU6Y30pLGMuXHUwMjc1aW5qPUFyKHtpbXBvcnRzOltSYSxBcyxCeCx6Y119KSxjfSkoKSxqVWU9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEp'@;
put 'e3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPWtpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1Bcih7aW1wb3J0czpbUmEsQXNdfSksY30pKCksR1VlPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD1r'@;
put 'aSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9QXIoe2ltcG9ydHM6W1JhLEFzLE5ZXX0pLGN9KSgpLGlkZT0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1sibmctY29t'@;
put 'cG9uZW50Il1dLHZpZXdRdWVyeTpmdW5jdGlvbihhLGQpe2lmKDEmYSYmcWEoU2wsNSksMiZhKXtsZXQgaDtDaShoPVNpKCkpJiYoZC50ZW1wbGF0ZT1oLmZpcnN0KX19LG5nQ29udGVudFNlbGVjdG9yczp5byxkZWNsczoxLHZhcnM6MCx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKHNh'@;
put 'KCksZ3QoMCxsTmUsMSwwLCJuZy10ZW1wbGF0ZSIpKX0sZW5jYXBzdWxhdGlvbjoyfSksY30pKCksJFVlPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD1raSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9QXIo'@;
put 'e2ltcG9ydHM6W1JhXX0pLGN9KSgpLHltPSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyBSeXt9cmV0dXJuIGMuXHUwMjc1ZmFjPSgoKT0+e2xldCBsO3JldHVybiBmdW5jdGlvbihkKXtyZXR1cm4obHx8KGw9WXMoYykpKShkfHxjKX19KSgpLGMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3Jz'@;
put 'OltbImNsci10YWJzIl1dLGZlYXR1cmVzOlt3YV19KSxjfSkoKSxTNz0oKCk9PntjbGFzcyBjIGV4dGVuZHMgTHl7Y29uc3RydWN0b3IoYSxkLGgsZil7aWYoIWQpdGhyb3cgbmV3IEVycm9yKCJjbHJUYWJMaW5rIGFuZCBjbHItdGFiLWNvbnRlbnQgc2hvdWxkIG9ubHkgYmUgdXNlZCBpbnNp'@;
put 'ZGUgb2YgYSBjbHItdGFicyIpO3N1cGVyKGEsZCksdGhpcy5pZkFjdGl2ZT1mLHRoaXMuaWQ9aH1nZXQgZmxhdm9yKCl7cmV0dXJuIHRoaXMuaWZBY3RpdmUuY3VycmVudD09PXRoaXMuaWR9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKEVzKSxH'@;
put 'ZSh5bSw4KSxHZShGeSksR2UoZjcpKX0sYy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwiY2xyVGFiTGluayIsIiJdLFsiY2xyLXRhYi1jb250ZW50Il1dLGZlYXR1cmVzOlt3YV19KSxjfSkoKTt2YXIgTTc9ZnVuY3Rpb24oYyl7cmV0dXJuIGMuSE9SSVpPTlRBTD0iaG9y'@;
put 'aXpvbnRhbCIsYy5WRVJUSUNBTD0idmVydGljYWwiLGN9KE03fHx7fSk7bGV0IHp4PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLmxheW91dD1NNy5IT1JJWk9OVEFMLHRoaXMuX2NoaWxkcmVuPVtdfWdldCBjaGlsZHJlbigpe3JldHVybiB0aGlzLl9jaGlsZHJlbn1nZXQgYWN0'@;
put 'aXZlVGFiKCl7cmV0dXJuIHRoaXMuY2hpbGRyZW4uZmluZChhPT5hLmFjdGl2ZSl9Z2V0IG92ZXJmbG93VGFicygpe3JldHVybiB0aGlzLmxheW91dD09PU03LlZFUlRJQ0FMP1tdOnRoaXMuY2hpbGRyZW4uZmlsdGVyKGE9PiEwPT09YS50YWJMaW5rLmluT3ZlcmZsb3cpfXJlZ2lzdGVyKGEp'@;
put 'e3RoaXMuX2NoaWxkcmVuLnB1c2goYSl9dW5yZWdpc3RlcihhKXtjb25zdCBkPXRoaXMuY2hpbGRyZW4uaW5kZXhPZihhKTtkPi0xJiZ0aGlzLmNoaWxkcmVuLnNwbGljZShkLDEpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwcm92'@;
put 'PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSxLVWU9MCxfbT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoKXt0aGlzLmlmQWN0aXZlU2VydmljZT1hLHRoaXMuaWQ9ZCx0aGlzLnRhYnNTZXJ2aWNlPWgsdGhpcy50YWJDb250ZW50SWR8fCh0aGlzLnRhYkNv'@;
put 'bnRlbnRJZD0iY2xyLXRhYi1jb250ZW50LSIrS1VlKyspfWdldCBhY3RpdmUoKXtyZXR1cm4gdGhpcy5pZkFjdGl2ZVNlcnZpY2UuY3VycmVudD09PXRoaXMuaWR9Z2V0IGFyaWFMYWJlbGxlZEJ5KCl7cmV0dXJuIHRoaXMudGFic1NlcnZpY2UuY2hpbGRyZW4uZmluZChhPT5hLnRhYkxpbmsu'@;
put 'aWQ9PT10aGlzLmlkKT8udGFiTGluaz8udGFiTGlua0lkfXNldCB0ZW1wbGF0ZVJlZihhKXt0aGlzLnZpZXdSZWY9dGhpcy50YWJzU2VydmljZS50YWJDb250ZW50Vmlld0NvbnRhaW5lci5jcmVhdGVFbWJlZGRlZFZpZXcoYSl9bmdPbkRlc3Ryb3koKXtjb25zdCBhPXRoaXMudGFic1NlcnZp'@;
put 'Y2UudGFiQ29udGVudFZpZXdDb250YWluZXIuaW5kZXhPZih0aGlzLnZpZXdSZWYpO2E+LTEmJnRoaXMudGFic1NlcnZpY2UudGFiQ29udGVudFZpZXdDb250YWluZXIucmVtb3ZlKGEpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZShmNyksR2Uo'@;
put 'RnkpLEdlKHp4KSl9LGMuXHUwMjc1Y21wPVZyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci10YWItY29udGVudCJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24oYSxkKXtpZigxJmEmJnFhKGNOZSw3KSwyJmEpe2xldCBoO0NpKGg9U2koKSkmJihkLnRlbXBsYXRlUmVmPWguZmlyc3QpfX0saW5wdXRz'@;
put 'Ont0YWJDb250ZW50SWQ6W05uLk5vbmUsImlkIiwidGFiQ29udGVudElkIl19LG5nQ29udGVudFNlbGVjdG9yczp5byxkZWNsczoyLHZhcnM6MCxjb25zdHM6W1sidGFiQ29udGVudFByb2plY3RlZFJlZiIsIiJdLFsicm9sZSIsInRhYnBhbmVsIiwxLCJ0YWItY29udGVudCIsMywiaWQiLCJo'@;
put 'aWRkZW4iXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihzYSgpLGd0KDAsdU5lLDIsNiwibmctdGVtcGxhdGUiLG51bGwsMCxJYykpfSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxxVWU9MDtjb25zdCAkWT1uZXcgU3QoIlRBQlNfSUQiKSxKVWU9e3Byb3ZpZGU6JFksdXNlRmFjdG9y'@;
put 'eTpmdW5jdGlvbiBYVWUoKXtyZXR1cm4iY2xyLXRhYnMtIitxVWUrK319O2xldCBRVWU9MCx3bT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYsdixNLEQpe3RoaXMuaWZBY3RpdmVTZXJ2aWNlPWEsdGhpcy5pZD1kLHRoaXMuZWw9aCx0aGlzLnRhYnNTZXJ2aWNlPU0sdGhpcy50'@;
put 'YWJzSWQ9RCx0aGlzLnRhYkxpbmtJZHx8KHRoaXMudGFiTGlua0lkPSJjbHItdGFiLWxpbmstIitRVWUrKyk7Y29uc3QgWj1mLnJlc29sdmVDb21wb25lbnRGYWN0b3J5KGlkZSk7dGhpcy50ZW1wbGF0ZVJlZkNvbnRhaW5lcj12LmNyZWF0ZUNvbXBvbmVudChaLHZvaWQgMCx2b2lkIDAsW1to'@;
put 'Lm5hdGl2ZUVsZW1lbnRdXSkuaW5zdGFuY2V9Z2V0IGluT3ZlcmZsb3coKXtyZXR1cm4gdGhpcy5faW5PdmVyZmxvdyYmdGhpcy50YWJzU2VydmljZS5sYXlvdXQhPT1NNy5WRVJUSUNBTH1zZXQgaW5PdmVyZmxvdyhhKXt0aGlzLl9pbk92ZXJmbG93PWF9Z2V0IGFkZExpbmtDbGFzc2VzKCl7'@;
put 'cmV0dXJuIXRoaXMuaW5PdmVyZmxvd31nZXQgYXJpYUNvbnRyb2xzKCl7cmV0dXJuIHRoaXMudGFic1NlcnZpY2UuY2hpbGRyZW4uZmluZChhPT5hLnRhYkxpbms9PT10aGlzKT8udGFiQ29udGVudD8udGFiQ29udGVudElkfWdldCBhY3RpdmUoKXtyZXR1cm4gdGhpcy5pZkFjdGl2ZVNlcnZp'@;
put 'Y2UuY3VycmVudD09PXRoaXMuaWR9Z2V0IHRhYmluZGV4KCl7cmV0dXJuIHRoaXMuYWN0aXZlPzA6LTF9YWN0aXZhdGUoKXt0aGlzLmlmQWN0aXZlU2VydmljZS5jdXJyZW50PXRoaXMuaWR9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKGY3KSxH'@;
put 'ZShGeSksR2UoSmkpLEdlKFc1KSxHZShEbyksR2UoengpLEdlKCRZKSl9LGMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsImNsclRhYkxpbmsiLCIiXV0saG9zdEF0dHJzOlsicm9sZSIsInRhYiIsInR5cGUiLCJidXR0b24iXSxob3N0VmFyczoxMixob3N0QmluZGluZ3M6'@;
put 'ZnVuY3Rpb24oYSxkKXsxJmEmJkZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZC5hY3RpdmF0ZSgpfSksMiZhJiYob3AoImlkIixkLnRhYkxpbmtJZCksaHIoImFyaWEtY29udHJvbHMiLGQuYXJpYUNvbnRyb2xzKSgiYXJpYS1zZWxlY3RlZCIsZC5hY3RpdmUpKCJ0YWJpbmRleCIsZC50'@;
put 'YWJpbmRleCksVHIoImJ0biIsITApKCJidG4tbGluayIsZC5hZGRMaW5rQ2xhc3NlcykoIm5hdi1saW5rIixkLmFkZExpbmtDbGFzc2VzKSgiYWN0aXZlIixkLmFjdGl2ZSkpfSxpbnB1dHM6e3RhYkxpbmtJZDpbTm4uTm9uZSwiaWQiLCJ0YWJMaW5rSWQiXSxpbk92ZXJmbG93OltObi5Ob25l'@;
put 'LCJjbHJUYWJMaW5rSW5PdmVyZmxvdyIsImluT3ZlcmZsb3ciXX19KSxjfSkoKSxDbT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoKXt0aGlzLmlmQWN0aXZlU2VydmljZT1hLHRoaXMuaWQ9ZCx0aGlzLnRhYnNTZXJ2aWNlPWgsaC5yZWdpc3Rlcih0aGlzKX1nZXQgYWN0aXZlKCl7'@;
put 'cmV0dXJuIHRoaXMuaWZBY3RpdmVTZXJ2aWNlLmN1cnJlbnQ9PT10aGlzLmlkfW5nT25EZXN0cm95KCl7dGhpcy50YWJzU2VydmljZS51bnJlZ2lzdGVyKHRoaXMpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZShmNyksR2UoRnkpLEdlKHp4KSl9'@;
put 'LGMuXHUwMjc1Y21wPVZyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci10YWIiXV0sY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24oYSxkLGgpe2lmKDEmYSYmKGFvKGgsd20sNyksYW8oaCxfbSw3KSksMiZhKXtsZXQgZjtDaShmPVNpKCkpJiYoZC50YWJMaW5rPWYuZmlyc3QpLENpKGY9U2koKSkm'@;
put 'JihkLnRhYkNvbnRlbnQ9Zi5maXJzdCl9fSxmZWF0dXJlczpbZGEoW25VZV0pXSxuZ0NvbnRlbnRTZWxlY3RvcnM6eW8sZGVjbHM6MSx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihzYSgpLFlyKDApKX0sZW5jYXBzdWxhdGlvbjoyfSksY30pKCksYWRlPSgoKT0+e2NsYXNz'@;
put 'IGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJjbHJUYWJBY3Rpb24iLCIiXV0saG9zdEF0dHJzOlsidGFiaW5kZXgiLCIwIl19KSxjfSkoKSxLWT0oKCk9PntjbGFzcyBje31y'@;
put 'ZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLXRhYi1vdmVyZmxvdy1jb250ZW50Il1dLGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiZUcigiZHJvcGRv'@;
put 'd24tbWVudSIsITApfSxuZ0NvbnRlbnRTZWxlY3RvcnM6eW8sZGVjbHM6MSx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihzYSgpLFlyKDApKX0sZW5jYXBzdWxhdGlvbjoyfSksY30pKCkseDc9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmLHYpe3RoaXMuaWZB'@;
put 'Y3RpdmVTZXJ2aWNlPWEsdGhpcy50b2dnbGVTZXJ2aWNlPWQsdGhpcy50YWJzU2VydmljZT1oLHRoaXMudGFic0lkPWYsdGhpcy5jb21tb25TdHJpbmdzPXYsdGhpcy50YWJMaW5rRWxlbWVudHM9W10sdGhpcy5fbW91c2Vkb3duPSExLHRoaXMuc3Vic2NyaXB0aW9ucz1bXSx0aGlzLl90YWJM'@;
put 'aW5rRGlyZWN0aXZlcz1bXX1nZXQgbGF5b3V0KCl7cmV0dXJuIHRoaXMudGFic1NlcnZpY2UubGF5b3V0fXNldCBsYXlvdXQoYSl7T2JqZWN0LmtleXMoTTcpLm1hcChkPT5NN1tkXSkuaW5kZXhPZihhKT49MCYmKHRoaXMudGFic1NlcnZpY2UubGF5b3V0PWEpfWdldCB0YWJMaW5rRGlyZWN0'@;
put 'aXZlcygpe3JldHVybiB0aGlzLl90YWJMaW5rRGlyZWN0aXZlc31nZXQgYWN0aXZlVGFiSW5PdmVyZmxvdygpe3JldHVybiB0aGlzLnRhYnNTZXJ2aWNlLm92ZXJmbG93VGFicy5pbmRleE9mKHRoaXMudGFic1NlcnZpY2UuYWN0aXZlVGFiKT4tMX1nZXQgYWN0aXZlVGFiUG9zaXRpb24oKXty'@;
put 'ZXR1cm4gdGhpcy5fdGFiTGlua0RpcmVjdGl2ZXMuZmluZEluZGV4KGE9PmEuYWN0aXZlKX1nZXQgaXNDdXJyZW50SW5PdmVyZmxvdygpe3JldHVybiB0aGlzLmtleUZvY3VzLmN1cnJlbnQ+PXRoaXMub3ZlcmZsb3dQb3NpdGlvbn1nZXQgaXNWZXJ0aWNhbCgpe3JldHVybiB0aGlzLmxheW91'@;
put 'dD09PU03LlZFUlRJQ0FMfXNldCB0YWJPdmVyZmxvd0VsKGEpe3RoaXMuX3RhYk92ZXJmbG93RWw9YSYmYS5uYXRpdmVFbGVtZW50LHRoaXMudG9nZ2xlU2VydmljZS5vcGVuJiZhJiZ0aGlzLmtleUZvY3VzLmZvY3VzQ3VycmVudCgpfWdldCBvdmVyZmxvd1Bvc2l0aW9uKCl7cmV0dXJuIHRo'@;
put 'aXMuX3RhYkxpbmtEaXJlY3RpdmVzLmZpbHRlcihhPT4hYS5pbk92ZXJmbG93KS5sZW5ndGh9c2V0IHRhYkNvbnRlbnRWaWV3Q29udGFpbmVyKGEpe3RoaXMudGFic1NlcnZpY2UudGFiQ29udGVudFZpZXdDb250YWluZXI9YX1uZ0FmdGVyQ29udGVudEluaXQoKXt0aGlzLnN1YnNjcmlwdGlv'@;
put 'bnMucHVzaCh0aGlzLmxpc3RlbkZvclRhYkxpbmtDaGFuZ2VzKCkpLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMubGlzdGVkRm9yVGFic0FjdGlvbnNDaGFuZ2VzKCkpLHR5cGVvZiB0aGlzLmlmQWN0aXZlU2VydmljZS5jdXJyZW50PiJ1IiYmdGhpcy50YWJMaW5rRGlyZWN0aXZlc1sw'@;
put 'XSYmdGhpcy50YWJMaW5rRGlyZWN0aXZlc1swXS5hY3RpdmF0ZSgpLHRoaXMua2V5Rm9jdXMuY3VycmVudD10aGlzLmFjdGl2ZVRhYlBvc2l0aW9ufW5nT25EZXN0cm95KCl7dGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2goYT0+e2EudW5zdWJzY3JpYmUoKX0pfXRvZ2dsZU92ZXJmbG93T25Q'@;
put 'b3NpdGlvbihhKXt0aGlzLnRvZ2dsZVNlcnZpY2Uub3Blbj1hPj10aGlzLm92ZXJmbG93UG9zaXRpb259cmVzZXRLZXlGb2N1c0N1cnJlbnRUb0FjdGl2ZShhKXshdGhpcy5rZXlGb2N1cy5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKGEucmVsYXRlZFRhcmdldCkmJnRoaXMua2V5Rm9jdXMuY3Vy'@;
put 'cmVudCE9PXRoaXMuYWN0aXZlVGFiUG9zaXRpb24mJih0aGlzLmtleUZvY3VzLmN1cnJlbnQ9dGhpcy5hY3RpdmVUYWJQb3NpdGlvbil9dG9nZ2xlT3ZlcmZsb3dPbkNsaWNrKCl7dGhpcy5rZXlGb2N1cy5tb3ZlVG8odGhpcy5pc0N1cnJlbnRJbk92ZXJmbG93JiZ0aGlzLnRvZ2dsZVNlcnZp'@;
put 'Y2Uub3Blbj90aGlzLm92ZXJmbG93UG9zaXRpb24tMTp0aGlzLm92ZXJmbG93UG9zaXRpb24pLHRoaXMuX21vdXNlZG93bj0hMX1vcGVuT3ZlcmZsb3dPbkZvY3VzKCl7IXRoaXMuX21vdXNlZG93biYmIXRoaXMudG9nZ2xlU2VydmljZS5vcGVuJiZ0aGlzLmtleUZvY3VzLm1vdmVUbyh0aGlz'@;
put 'LmFjdGl2ZVRhYlBvc2l0aW9uKX1jbG9zZU9uRm9jdXNPdXQoYSl7IXRoaXMuX3RhYk92ZXJmbG93RWwuY29udGFpbnMoYS5yZWxhdGVkVGFyZ2V0KSYmdGhpcy50b2dnbGVTZXJ2aWNlLm9wZW4mJiF0aGlzLl9tb3VzZWRvd24mJih0aGlzLnRvZ2dsZVNlcnZpY2Uub3Blbj0hMSx0aGlzLnRh'@;
put 'YkxpbmtFbGVtZW50c1t0aGlzLmFjdGl2ZVRhYlBvc2l0aW9uXT09PWEucmVsYXRlZFRhcmdldCYmKHRoaXMua2V5Rm9jdXMuY3VycmVudD10aGlzLmFjdGl2ZVRhYlBvc2l0aW9uKSl9Y2xvc2VPbkVzY2FwZUtleSgpe3RoaXMua2V5Rm9jdXMubW92ZVRvKHRoaXMub3ZlcmZsb3dQb3NpdGlv'@;
put 'bi0xKX1jbG9zZU9uT3V0c2lkZUNsaWNrKGEsZCl7Y29uc3QgaD10aGlzLnRhYnNBY3Rpb25zLnNvbWUoZj0+Zi5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKGEudGFyZ2V0KSk7YS50YXJnZXQ9PT1kfHxkLmNvbnRhaW5zKGEudGFyZ2V0KXx8aHx8IXRoaXMuX3RhYk92ZXJmbG93RWwuY29udGFp'@;
put 'bnMoYS50YXJnZXQpJiZ0aGlzLmlzQ3VycmVudEluT3ZlcmZsb3cmJnRoaXMua2V5Rm9jdXMubW92ZVRvKHRoaXMub3ZlcmZsb3dQb3NpdGlvbi0xKX1zZXRUYWJMaW5rRWxlbWVudHMoKXt0aGlzLl90YWJMaW5rRGlyZWN0aXZlcz10aGlzLnRhYnMubWFwKGE9PmEudGFiTGluayksdGhpcy50'@;
put 'YWJMaW5rRWxlbWVudHM9dGhpcy5fdGFiTGlua0RpcmVjdGl2ZXMubWFwKGE9PmEuZWwubmF0aXZlRWxlbWVudCksdGhpcy50YWJzQWN0aW9ucyYmdGhpcy50YWJzQWN0aW9ucyYmdGhpcy50YWJMaW5rRWxlbWVudHMucHVzaCguLi50aGlzLnRhYnNBY3Rpb25zLm1hcChhPT5hLm5hdGl2ZUVs'@;
put 'ZW1lbnQpKX1saXN0ZW5Gb3JUYWJMaW5rQ2hhbmdlcygpe3JldHVybiB0aGlzLnRhYnMuY2hhbmdlcy5waXBlKHgyKHRoaXMudGFicy5tYXAoYT0+YS50YWJMaW5rKSkpLnN1YnNjcmliZSgoKT0+dGhpcy5zZXRUYWJMaW5rRWxlbWVudHMoKSl9bGlzdGVkRm9yVGFic0FjdGlvbnNDaGFuZ2Vz'@;
put 'KCl7cmV0dXJuIHRoaXMudGFic0FjdGlvbnMuY2hhbmdlcy5zdWJzY3JpYmUoKCk9PnRoaXMuc2V0VGFiTGlua0VsZW1lbnRzKCkpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZShmNyksR2Uoc2MpLEdlKHp4KSxHZSgkWSksR2UoaXMpKX0sYy5c'@;
put 'dTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLXRhYnMiXV0sY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24oYSxkLGgpe2lmKDEmYSYmKGFvKGgsYWRlLDUsSmkpLGFvKGgsQ20sNCkpLDImYSl7bGV0IGY7Q2koZj1TaSgpKSYmKGQudGFic0FjdGlvbnM9ZiksQ2koZj1TaSgpKSYm'@;
put 'KGQudGFicz1mKX19LHZpZXdRdWVyeTpmdW5jdGlvbihhLGQpe2lmKDEmYSYmKHFhKHp5LDcpLHFhKEtZLDUsSmkpLHFhKGROZSw3LERvKSksMiZhKXtsZXQgaDtDaShoPVNpKCkpJiYoZC5rZXlGb2N1cz1oLmZpcnN0KSxDaShoPVNpKCkpJiYoZC50YWJPdmVyZmxvd0VsPWguZmlyc3QpLENp'@;
put 'KGg9U2koKSkmJihkLnRhYkNvbnRlbnRWaWV3Q29udGFpbmVyPWguZmlyc3QpfX0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJlRyKCJ0YWJzLXZlcnRpY2FsIixkLmlzVmVydGljYWwpfSxpbnB1dHM6e2xheW91dDpbTm4uTm9uZSwiY2xyTGF5b3V0IiwibGF5'@;
put 'b3V0Il19LGZlYXR1cmVzOltkYShbZjcsengsSlVlXSksdmQoW29nXSldLG5nQ29udGVudFNlbGVjdG9yczpmTmUsZGVjbHM6Nix2YXJzOjMsY29uc3RzOltbInRhYkNvbnRlbnRWaWV3Q29udGFpbmVyIiwiIl0sWyJ0YWJPdmVyZmxvd1RyaWdnZXIiLCIiXSxbInJvbGUiLCJ0YWJsaXN0Iiwi'@;
put 'Y2xyRGlyZWN0aW9uIiwiYm90aCIsMSwibmF2IiwzLCJjbHJGb2N1c0NoYW5nZSIsImZvY3Vzb3V0IiwiY2xyS2V5Rm9jdXMiXSxbNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzQsIm5nSWYiXSxbInJvbGUiLCJwcmVzZW50YXRpb24iLDEsIm5hdi1pdGVtIl0sWzMsIm5nVGVtcGxhdGVPdXRsZXQi'@;
put 'XSxbInJvbGUiLCJwcmVzZW50YXRpb24iLDEsInRhYnMtb3ZlcmZsb3ciLCJib3R0b20tcmlnaHQiXSxbInJvbGUiLCJhcHBsaWNhdGlvbiIsMSwibmF2LWl0ZW0iXSxbInR5cGUiLCJidXR0b24iLCJhcmlhLWhpZGRlbiIsInRydWUiLDEsImJ0biIsImJ0bi1saW5rIiwibmF2LWxpbmsiLCJk'@;
put 'cm9wZG93bi10b2dnbGUiLDMsIm1vdXNlZG93biIsImZvY3VzIiwiY2xpY2siXSxbInNoYXBlIiwiZWxsaXBzaXMtaG9yaXpvbnRhbCJdLFszLCJrZXlkb3duLmVzY2FwZSIsImNsaWNrIiwiZm9jdXNvdXQiLDQsIm5nSWYiXSxbMywia2V5ZG93bi5lc2NhcGUiLCJjbGljayIsImZvY3Vzb3V0'@;
put 'Il0sWzMsIm5nVGVtcGxhdGVPdXRsZXQiLDQsIm5nSWYiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXtpZigxJmEpe2NvbnN0IGg9TG4oKTtzYShoTmUpLGRlKDAsInVsIiwyKSxGdCgiY2xyRm9jdXNDaGFuZ2UiLGZ1bmN0aW9uKHYpe3JldHVybiB3dChoKSxDdChkLnRvZ2dsZU92ZXJmbG93'@;
put 'T25Qb3NpdGlvbih2KSl9KSgiZm9jdXNvdXQiLGZ1bmN0aW9uKHYpe3JldHVybiB3dChoKSxDdChkLnJlc2V0S2V5Rm9jdXNDdXJyZW50VG9BY3RpdmUodikpfSksZ3QoMSxnTmUsMiwxLCJuZy1jb250YWluZXIiLDMpKDIseU5lLDcsMTEsIm5nLWNvbnRhaW5lciIsNCksWXIoMyksaGUoKSxG'@;
put 'bCg0LG51bGwsMCl9MiZhJiYoTWUoImNscktleUZvY3VzIixkLnRhYkxpbmtFbGVtZW50cyksZmUoKSxNZSgibmdGb3JPZiIsZC50YWJMaW5rRGlyZWN0aXZlcyksZmUoKSxNZSgibmdJZiIsZC50YWJzU2VydmljZS5vdmVyZmxvd1RhYnMubGVuZ3RoPjApKX0sZGVwZW5kZW5jaWVzOltucyxi'@;
put 'YSxOMSxycyx6eSxLWV0sZW5jYXBzdWxhdGlvbjoyfSksY30pKCksZVplPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXtUcy5hZGRJY29ucyhUMGUpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9a2koe3R5cGU6Y30pLGMu'@;
put 'XHUwMjc1aW5qPUFyKHtpbXBvcnRzOltSYSxPMixBcywkVWUsWVksTzJdfSksY30pKCkscVk9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMubmF2R3JvdXBDb3VudD0wfXJlZ2lzdGVyTmF2R3JvdXAoKXt0aGlzLm5hdkdyb3VwQ291bnQrK311bnJlZ2lzdGVyTmF2R3JvdXAoKXt0'@;
put 'aGlzLm5hdkdyb3VwQ291bnQtLX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCksWFk9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuX2ljb25z'@;
put 'PTB9Z2V0IGhhc0ljb25zKCl7cmV0dXJuIHRoaXMuX2ljb25zPjB9cmVnaXN0ZXJJY29uKCl7dGhpcy5faWNvbnMrK311bnJlZ2lzdGVySWNvbigpe3RoaXMuX2ljb25zLS19fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9YW4o'@;
put 'e3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpLEpZPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLl9hbmltYXRlT25Db2xsYXBzZWQ9bmV3IFduLHRoaXMuX2NvbGxhcHNlZENoYW5nZWQ9bmV3IFduLHRoaXMuX2NvbGxhcHNlZD0hMSx0aGlzLl9jb2xsYXBzaWJs'@;
put 'ZT0hMX1nZXQgYW5pbWF0ZU9uQ29sbGFwc2VkKCl7cmV0dXJuIHRoaXMuX2FuaW1hdGVPbkNvbGxhcHNlZC5hc09ic2VydmFibGUoKX1nZXQgY29sbGFwc2VkQ2hhbmdlZCgpe3JldHVybiB0aGlzLl9jb2xsYXBzZWRDaGFuZ2VkLmFzT2JzZXJ2YWJsZSgpfWdldCBjb2xsYXBzZWQoKXtyZXR1'@;
put 'cm4gdGhpcy5fY29sbGFwc2VkfXNldCBjb2xsYXBzZWQoYSl7YT0hIWEsdGhpcy5jb2xsYXBzaWJsZSYmdGhpcy5fY29sbGFwc2VkIT09YSYmdGhpcy51cGRhdGVDb2xsYXBzZUJlaGF2aW9yKGEpfWdldCBjb2xsYXBzaWJsZSgpe3JldHVybiB0aGlzLl9jb2xsYXBzaWJsZX1zZXQgY29sbGFw'@;
put 'c2libGUoYSl7dGhpcy5fY29sbGFwc2libGUhPT0oYT0hIWEpJiYoIWEmJnRoaXMuY29sbGFwc2VkJiZ0aGlzLnVwZGF0ZUNvbGxhcHNlQmVoYXZpb3IoITEpLHRoaXMuX2NvbGxhcHNpYmxlPWEpfXVwZGF0ZUNvbGxhcHNlQmVoYXZpb3IoYSl7dGhpcy5fYW5pbWF0ZU9uQ29sbGFwc2VkLm5l'@;
put 'eHQoYSksdGhpcy5fY29sbGFwc2VkPWEsdGhpcy5fY29sbGFwc2VkQ2hhbmdlZC5uZXh0KGEpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSxRWT0oKCk9'@;
put 'PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYpe3RoaXMuX25hdlNlcnZpY2U9YSx0aGlzLl9uYXZJY29uU2VydmljZT1kLHRoaXMuX25hdkdyb3VwUmVnaXN0cmF0aW9uU2VydmljZT1oLHRoaXMuY29tbW9uU3RyaW5ncz1mLHRoaXMuY29udGVudElkPU11KCksdGhpcy5fY29sbGFwc2Vk'@;
put 'Q2hhbmdlZD1uZXcgS3IoITApLHRoaXMuX3N1Yj1hLmNvbGxhcHNlZENoYW5nZWQuc3Vic2NyaWJlKHY9Pnt0aGlzLl9jb2xsYXBzZWRDaGFuZ2VkLmVtaXQodil9KX1nZXQgY29sbGFwc2libGUoKXtyZXR1cm4gdGhpcy5fbmF2U2VydmljZS5jb2xsYXBzaWJsZX1zZXQgY29sbGFwc2libGUo'@;
put 'YSl7dGhpcy5fbmF2U2VydmljZS5jb2xsYXBzaWJsZT1hfWdldCBjb2xsYXBzZWQoKXtyZXR1cm4gdGhpcy5fbmF2U2VydmljZS5jb2xsYXBzZWR9c2V0IGNvbGxhcHNlZChhKXt0aGlzLl9uYXZTZXJ2aWNlLmNvbGxhcHNlZD1hfWdldCBoYXNOYXZHcm91cHMoKXtyZXR1cm4gdGhpcy5fbmF2'@;
put 'R3JvdXBSZWdpc3RyYXRpb25TZXJ2aWNlLm5hdkdyb3VwQ291bnQ+MH1nZXQgaGFzSWNvbnMoKXtyZXR1cm4gdGhpcy5fbmF2SWNvblNlcnZpY2UuaGFzSWNvbnN9Z2V0IGFyaWFFeHBhbmRlZCgpe3JldHVybiB0aGlzLmNvbGxhcHNpYmxlP3RoaXMuY29sbGFwc2VkPyJmYWxzZSI6InRydWUi'@;
put 'Om51bGx9bmdPbkRlc3Ryb3koKXt0aGlzLl9zdWIudW5zdWJzY3JpYmUoKX10b2dnbGVCeUJ1dHRvbigpe3RoaXMuY29sbGFwc2VkPSF0aGlzLmNvbGxhcHNlZH19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2UoSlkpLEdlKFhZKSxHZShxWSksR2Uo'@;
put 'aXMpKX0sYy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLXZlcnRpY2FsLW5hdiJdXSxob3N0QXR0cnM6WzEsImNsci12ZXJ0aWNhbC1uYXYiXSxob3N0VmFyczo2LGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmVHIoImlzLWNvbGxhcHNlZCIsZC5jb2xsYXBz'@;
put 'ZWQpKCJoYXMtbmF2LWdyb3VwcyIsZC5oYXNOYXZHcm91cHMpKCJoYXMtaWNvbnMiLGQuaGFzSWNvbnMpfSxpbnB1dHM6e3RvZ2dsZUxhYmVsOltObi5Ob25lLCJjbHJWZXJ0aWNhbE5hdlRvZ2dsZUxhYmVsIiwidG9nZ2xlTGFiZWwiXSxjb2xsYXBzaWJsZTpbTm4uTm9uZSwiY2xyVmVydGlj'@;
put 'YWxOYXZDb2xsYXBzaWJsZSIsImNvbGxhcHNpYmxlIl0sY29sbGFwc2VkOltObi5Ob25lLCJjbHJWZXJ0aWNhbE5hdkNvbGxhcHNlZCIsImNvbGxhcHNlZCJdfSxvdXRwdXRzOntfY29sbGFwc2VkQ2hhbmdlZDoiY2xyVmVydGljYWxOYXZDb2xsYXBzZWRDaGFuZ2UifSxmZWF0dXJlczpbZGEo'@;
put 'W0pZLFhZLHFZXSldLG5nQ29udGVudFNlbGVjdG9yczp5byxkZWNsczo0LHZhcnM6Myxjb25zdHM6W1sidHlwZSIsImJ1dHRvbiIsImNsYXNzIiwibmF2LXRyaWdnZXIiLDMsIm9uLWNvbGxhcHNlIiwiY2xpY2siLDQsIm5nSWYiXSxbMSwibmF2LWNvbnRlbnQiLDMsImlkIl0sWyJ0eXBlIiwi'@;
put 'YnV0dG9uIiwiY2xhc3MiLCJuYXYtYnRuIiwiYXJpYS1oaWRkZW4iLCJ0cnVlIiwidGFiaW5kZXgiLCItMSIsMywiY2xpY2siLDQsIm5nSWYiXSxbInR5cGUiLCJidXR0b24iLDEsIm5hdi10cmlnZ2VyIiwzLCJjbGljayJdLFsic2hhcGUiLCJhbmdsZS1kb3VibGUiLDEsIm5hdi10cmlnZ2Vy'@;
put 'LWljb24iXSxbInR5cGUiLCJidXR0b24iLCJhcmlhLWhpZGRlbiIsInRydWUiLCJ0YWJpbmRleCIsIi0xIiwxLCJuYXYtYnRuIiwzLCJjbGljayJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKHNhKCksZ3QoMCxfTmUsMiw2LCJidXR0b24iLDApLGRlKDEsImRpdiIsMSksWXIoMiks'@;
put 'Z3QoMyx3TmUsMSwyLCJidXR0b24iLDIpLGhlKCkpLDImYSYmKE1lKCJuZ0lmIixkLmNvbGxhcHNpYmxlKSxmZSgpLE1lKCJpZCIsZC5jb250ZW50SWQpLGZlKDIpLE1lKCJuZ0lmIixkLmNvbGxhcHNpYmxlJiZkLmNvbGxhcHNlZCkpfSxkZXBlbmRlbmNpZXM6W2JhLHJzXSxlbmNhcHN1bGF0'@;
put 'aW9uOjJ9KSxjfSkoKSxlRz0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5fZXhwYW5kQ2hhbmdlPW5ldyBXbn1nZXQgZXhwYW5kQ2hhbmdlKCl7cmV0dXJuIHRoaXMuX2V4cGFuZENoYW5nZS5hc09ic2VydmFibGUoKX1leHBhbmQoKXt0aGlzLl9leHBhbmRDaGFuZ2UubmV4dCgh'@;
put 'MCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpLHRHPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgpe3RoaXMuZGVzdHJveSQ9bmV3IFduLGgm'@;
put 'JnhkKGEubmF0aXZlRWxlbWVudCwiY2xpY2siKS5waXBlKFYwKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKCk9PntoLmV4cGFuZCgpLGQubWFya0ZvckNoZWNrKCl9KX1uZ09uRGVzdHJveSgpe3RoaXMuZGVzdHJveSQubmV4dCgpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7'@;
put 'cmV0dXJuIG5ldyhhfHxjKShHZShKaSksR2UoRXMpLEdlKGVHLDgpKX0sYy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwiY2xyVmVydGljYWxOYXZMaW5rIiwiIl1dLGhvc3RBdHRyczpbMSwibmF2LWxpbmsiXSxhdHRyczpNTmUsbmdDb250ZW50U2VsZWN0b3JzOkVOZSxk'@;
put 'ZWNsczozLHZhcnM6MCxjb25zdHM6W1sxLCJuYXYtdGV4dCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKHNhKHhOZSksWXIoMCksZGUoMSwic3BhbiIsMCksWXIoMiwxKSxoZSgpKX0sZW5jYXBzdWxhdGlvbjoyfSksY30pKCksb2RlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3Io'@;
put 'KXtUcy5hZGRJY29ucyhFeSxrMGUpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9a2koe3R5cGU6Y30pLGMuXHUwMjc1aW5qPUFyKHtpbXBvcnRzOltSYSxBcyxPMixCTCxPMixBcyxCTF19KSxjfSkoKSxpWmU9KCgpPT57Y2xh'@;
put 'c3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPWtpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1Bcih7aW1wb3J0czpbalVlLEdVZSxlWmUsb2RlLEJVZV19KSxjfSkoKSxaeT0oKCk9PntjbGFzcyBjIGV4dGVuZHMgQjBle2Nv'@;
put 'bnN0cnVjdG9yKGEsZCxoKXtzdXBlcihhLGQsaCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKEppKSxHZSh2WSksR2UodnMsOCkpfSxjLlx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJjZGtUcmFwRm9jdXMiLCIiXV0sZmVh'@;
put 'dHVyZXM6W3dhXX0pLGN9KSgpLEtMPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD1raSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9QXIoe30pLGN9KSgpO2NvbnN0IG9aZT0vZCsuK20rLit5Ky9pLHNaZT0v'@;
put 'bSsuK2QrLit5Ky9pLGxaZT0vZCt8bSt8eSsvaSxjWmU9L1xkKy9nLHVaZT0vTW9iaS9pLGRaZT0vXHUyMDBmL2csbkc9IllZWVkiLHFMPXtuYW1lOiJMSVRUTEVfRU5ESUFOIixmb3JtYXQ6WyJERCIsIk1NIixuR119LGFHPXtuYW1lOiJNSURETEVfRU5ESUFOIixmb3JtYXQ6WyJNTSIsIkRE'@;
put 'IixuR119LGhaZT17bmFtZToiQklHX0VORElBTiIsZm9ybWF0OltuRywiTU0iLCJERCJdfTtmdW5jdGlvbiBsZGUoYyxsKXtyZXR1cm4gbmV3IERhdGUoYyxsKzEsMCkuZ2V0RGF0ZSgpfWNsYXNzIHZaZXtjb25zdHJ1Y3RvcihsLGE9ITEsZD0hMSxoPSExLGY9ITEsdj0hMSxNPSExLEQ9ITEp'@;
put 'e3RoaXMuZGF5TW9kZWw9bCx0aGlzLmlzVG9kYXlzRGF0ZT1hLHRoaXMuaXNFeGNsdWRlZD1kLHRoaXMuaXNEaXNhYmxlZD1oLHRoaXMuaXNTZWxlY3RlZD1mLHRoaXMuaXNGb2N1c2FibGU9dix0aGlzLmlzUmFuZ2VTdGFydERheT1NLHRoaXMuaXNSYW5nZUVuZERheT1EfWdldCB0YWJJbmRl'@;
put 'eCgpe3JldHVybiB0aGlzLmlzRm9jdXNhYmxlPzA6LTF9fWNsYXNzIExke2NvbnN0cnVjdG9yKGwsYSxkKXt0aGlzLnllYXI9bCx0aGlzLm1vbnRoPWEsdGhpcy5kYXRlPWR9aXNFcXVhbChsKXtyZXR1cm4hIWwmJnRoaXMueWVhcj09PWwueWVhciYmdGhpcy5tb250aD09PWwubW9udGgmJnRo'@;
put 'aXMuZGF0ZT09PWwuZGF0ZX10b0RhdGUoKXtyZXR1cm4gbmV3IERhdGUodGhpcy55ZWFyLHRoaXMubW9udGgsdGhpcy5kYXRlKX1pbmNyZW1lbnRCeShsKXtjb25zdCBhPW5ldyBEYXRlKHRoaXMueWVhcix0aGlzLm1vbnRoLHRoaXMuZGF0ZStsKTtyZXR1cm4gbmV3IExkKGEuZ2V0RnVsbFll'@;
put 'YXIoKSxhLmdldE1vbnRoKCksYS5nZXREYXRlKCkpfWNsb25lKCl7cmV0dXJuIG5ldyBMZCh0aGlzLnllYXIsdGhpcy5tb250aCx0aGlzLmRhdGUpfXRvQ29tcGFyaXNvblN0cmluZygpe3JldHVybmAke3RoaXMueWVhcn0ke3RoaXMucGFkKHRoaXMubW9udGgpfSR7dGhpcy5wYWQodGhpcy5k'@;
put 'YXRlKX1gfXRvRGF0ZVN0cmluZygpe3JldHVybiB0aGlzLnRvRGF0ZSgpLnRvTG9jYWxlRGF0ZVN0cmluZyh2b2lkIDAse3dlZWtkYXk6ImxvbmciLG1vbnRoOiJsb25nIixkYXk6Im51bWVyaWMiLHllYXI6Im51bWVyaWMifSl9aXNCZWZvcmUobCxhPSExKXtyZXR1cm4gYT90aGlzLnRvRGF0'@;
put 'ZSgpLmdldFRpbWUoKTw9bD8udG9EYXRlKCkuZ2V0VGltZSgpOnRoaXMudG9EYXRlKCkuZ2V0VGltZSgpPGw/LnRvRGF0ZSgpLmdldFRpbWUoKX1pc0FmdGVyKGwsYT0hMSl7cmV0dXJuIGE/dGhpcy50b0RhdGUoKS5nZXRUaW1lKCk+PWw/LnRvRGF0ZSgpLmdldFRpbWUoKTp0aGlzLnRvRGF0'@;
put 'ZSgpLmdldFRpbWUoKT5sPy50b0RhdGUoKS5nZXRUaW1lKCl9cGFkKGwpe3JldHVybiBsPDEwP2AwJHtsfWA6YCR7bH1gfX1jbGFzcyBiWmV7Y29uc3RydWN0b3IobCxhLGQsaCxmLHYsTSl7dGhpcy5jYWxlbmRhcj1sLHRoaXMuc2VsZWN0ZWREYXk9YSx0aGlzLnNlbGVjdGVkRW5kRGF5PWQs'@;
put 'dGhpcy5mb2N1c2FibGVEYXk9aCx0aGlzLnRvZGF5PWYsdGhpcy5maXJzdERheU9mV2Vlaz12LHRoaXMuZXhjbHVkZWREYXRlcz1NLHRoaXMuY3Vyck1vbnRoRGF5Vmlld3M9W10sdGhpcy5pbml0aWFsaXplQ2FsZW5kYXJWaWV3KCl9Z2V0IGNhbGVuZGFyVmlldygpe3JldHVybiB0aGlzLl9j'@;
put 'YWxlbmRhclZpZXd9dXBkYXRlRm9jdXNhYmxlRGF5KGwpe3RoaXMuc2V0Rm9jdXNhYmxlRmxhZyh0aGlzLmZvY3VzYWJsZURheSwhMSksdGhpcy5zZXRGb2N1c2FibGVGbGFnKGwsITApLHRoaXMuZm9jdXNhYmxlRGF5PWx9dXBkYXRlU2VsZWN0ZWREYXkobCl7dGhpcy5zZXRTZWxlY3RlZERh'@;
put 'eSh0aGlzLnNlbGVjdGVkRGF5LCExKSx0aGlzLnNlbGVjdGVkRGF5PWwsdGhpcy5zZXRTZWxlY3RlZERheShsLCEwKX11cGRhdGVTZWxlY3RlZEVuZERheShsKXt0aGlzLnNldFNlbGVjdGVkRGF5KHRoaXMuc2VsZWN0ZWRFbmREYXksITEpLHRoaXMuc2VsZWN0ZWRFbmREYXk9bCx0aGlzLnNl'@;
put 'dFNlbGVjdGVkRGF5KGwsITApfWluaXRpYWxpemVDYWxlbmRhclZpZXcoKXtjb25zdCBsPXRoaXMuY2FsZW5kYXIucHJldmlvdXNNb250aCgpLGE9dGhpcy5jYWxlbmRhci5uZXh0TW9udGgoKSxkPXRoaXMubnVtRGF5c0Zyb21QcmV2TW9udGhJbkNhbFZpZXcodGhpcy5jYWxlbmRhci55ZWFy'@;
put 'LHRoaXMuY2FsZW5kYXIubW9udGgpLGg9NDItKHRoaXMuY2FsZW5kYXIuZGF5cy5sZW5ndGgrZCk7bGV0IGY9W10sdj1bXTtkPjAmJihmPXRoaXMuZ2VuZXJhdGVEYXlWaWV3TW9kZWxzKGwuZGF5cy5zbGljZSgtMSpkKSwhMCwhMSkpLHRoaXMuY3Vyck1vbnRoRGF5Vmlld3M9dGhpcy5nZW5l'@;
put 'cmF0ZURheVZpZXdNb2RlbHModGhpcy5jYWxlbmRhci5kYXlzLCExLCEwKSxoPjAmJih2PXRoaXMuZ2VuZXJhdGVEYXlWaWV3TW9kZWxzKGEuZGF5cy5zbGljZSgwLGgpLCEwLCExKSksdGhpcy5fY2FsZW5kYXJWaWV3PXRoaXMuZ2VuZXJhdGVDYWxlbmRhclZpZXcoZix0aGlzLmN1cnJNb250'@;
put 'aERheVZpZXdzLHYpLHRoaXMuaW5pdGlhbGl6ZVNlbGVjdGVkRGF5KCksdGhpcy5pbml0aWFsaXplRm9jdXNhYmxlRGF5KCl9aXNEYXRlRXhjbHVkZWQobCl7Y29uc3R7bWluRGF0ZTphLG1heERhdGU6ZH09dGhpcy5leGNsdWRlZERhdGVzLGg9YS50b0NvbXBhcmlzb25TdHJpbmcoKSxmPWQu'@;
put 'dG9Db21wYXJpc29uU3RyaW5nKCksdj1sLnRvQ29tcGFyaXNvblN0cmluZygpO3JldHVybiEodj49aCYmdjw9Zil9Z2VuZXJhdGVEYXlWaWV3TW9kZWxzKGwsYSxkKXtjb25zdCBoPWwubWFwKGY9Pm5ldyB2WmUoZiwhMSxhLHRoaXMuaXNEYXRlRXhjbHVkZWQoZiksITEsITEpKTtyZXR1cm4g'@;
put 'ZCYmdGhpcy5jYWxlbmRhci5pc0RheUluQ2FsZW5kYXIodGhpcy50b2RheSkmJihoW3RoaXMudG9kYXkuZGF0ZS0xXS5pc1RvZGF5c0RhdGU9ITApLGh9bnVtRGF5c0Zyb21QcmV2TW9udGhJbkNhbFZpZXcobCxhKXtjb25zdCBkPWZ1bmN0aW9uIHBaZShjLGwsYSl7cmV0dXJuIG5ldyBEYXRl'@;
put 'KGMsbCxhKS5nZXREYXkoKX0obCxhLDEpO3JldHVybiBkPj10aGlzLmZpcnN0RGF5T2ZXZWVrP2QtdGhpcy5maXJzdERheU9mV2Vlazo3K2QtdGhpcy5maXJzdERheU9mV2Vla31pc0RheUluQ2FsZW5kYXJWaWV3KGwpe3JldHVybiEhdGhpcy5jYWxlbmRhci5pc0RheUluQ2FsZW5kYXIobCl9'@;
put 'Z2VuZXJhdGVDYWxlbmRhclZpZXcobCxhLGQpe2NvbnN0IGg9Wy4uLmwsLi4uYSwuLi5kXSxmPVtdO2ZvcihsZXQgdj0wO3Y8Njt2KyspZlt2XT1oLnNsaWNlKDcqdiw3Kih2KzEpKTtyZXR1cm4gZn1pbml0aWFsaXplU2VsZWN0ZWREYXkoKXt0aGlzLnNldFNlbGVjdGVkRGF5KHRoaXMuc2Vs'@;
put 'ZWN0ZWREYXksITApLHRoaXMuc2V0U2VsZWN0ZWREYXkodGhpcy5zZWxlY3RlZEVuZERheSwhMCl9aW5pdGlhbGl6ZUZvY3VzYWJsZURheSgpe3RoaXMuZm9jdXNhYmxlRGF5JiZ0aGlzLmlzRGF5SW5DYWxlbmRhclZpZXcodGhpcy5mb2N1c2FibGVEYXkpP3RoaXMuc2V0Rm9jdXNhYmxlRmxh'@;
put 'Zyh0aGlzLmZvY3VzYWJsZURheSwhMCk6dGhpcy5zZWxlY3RlZERheSYmdGhpcy5pc0RheUluQ2FsZW5kYXJWaWV3KHRoaXMuc2VsZWN0ZWREYXkpPyh0aGlzLnNldEZvY3VzYWJsZUZsYWcodGhpcy5zZWxlY3RlZERheSwhMCksdGhpcy5mb2N1c2FibGVEYXk9dGhpcy5zZWxlY3RlZERheS5j'@;
put 'bG9uZSgpKTp0aGlzLnNlbGVjdGVkRW5kRGF5JiZ0aGlzLmlzRGF5SW5DYWxlbmRhclZpZXcodGhpcy5zZWxlY3RlZEVuZERheSk/KHRoaXMuc2V0Rm9jdXNhYmxlRmxhZyh0aGlzLnNlbGVjdGVkRW5kRGF5LCEwKSx0aGlzLmZvY3VzYWJsZURheT10aGlzLnNlbGVjdGVkRW5kRGF5LmNsb25l'@;
put 'KCkpOnRoaXMuaXNEYXlJbkNhbGVuZGFyVmlldyh0aGlzLnRvZGF5KT8odGhpcy5zZXRGb2N1c2FibGVGbGFnKHRoaXMudG9kYXksITApLHRoaXMuZm9jdXNhYmxlRGF5PXRoaXMudG9kYXkuY2xvbmUoKSk6KHRoaXMuZm9jdXNhYmxlRGF5PW5ldyBMZCh0aGlzLmNhbGVuZGFyLnllYXIsdGhp'@;
put 'cy5jYWxlbmRhci5tb250aCwxNSksdGhpcy5zZXRGb2N1c2FibGVGbGFnKHRoaXMuZm9jdXNhYmxlRGF5LCEwKSl9c2V0Rm9jdXNhYmxlRmxhZyhsLGEpe2wmJih0aGlzLmN1cnJNb250aERheVZpZXdzW2wuZGF0ZS0xXS5pc0ZvY3VzYWJsZT1hKX1zZXRTZWxlY3RlZERheShsLGEpe2wmJnRo'@;
put 'aXMuaXNEYXlJbkNhbGVuZGFyVmlldyhsKSYmKHRoaXMuY3Vyck1vbnRoRGF5Vmlld3NbbD8uZGF0ZS0xXS5pc1NlbGVjdGVkPWEpfX1sZXQgWng9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLmxvY2FsZT1hLHRoaXMuX2ZpcnN0RGF5T2ZXZWVrPTAsdGhpcy5pbml0aWFsaXpl'@;
put 'TG9jYWxlRGF0YSgpfWdldCBmaXJzdERheU9mV2Vlaygpe3JldHVybiB0aGlzLl9maXJzdERheU9mV2Vla31nZXQgbG9jYWxlRGF5cygpe3JldHVybiB0aGlzLl9sb2NhbGVEYXlzfWdldCBsb2NhbGVEYXlzTmFycm93KCl7cmV0dXJuIHRoaXMuX2xvY2FsZURheXMubWFwKGE9PmEubmFycm93'@;
put 'KX1nZXQgbG9jYWxlTW9udGhzQWJicmV2aWF0ZWQoKXtyZXR1cm4gdGhpcy5fbG9jYWxlTW9udGhzQWJicmV2aWF0ZWR9Z2V0IGxvY2FsZU1vbnRoc1dpZGUoKXtyZXR1cm4gdGhpcy5fbG9jYWxlTW9udGhzV2lkZX1nZXQgbG9jYWxlRGF0ZUZvcm1hdCgpe3JldHVybiB0aGlzLl9sb2NhbGVE'@;
put 'YXRlRm9ybWF0fWluaXRpYWxpemVMb2NhbGVEYXRhKCl7dGhpcy5pbml0aWFsaXplRmlyc3REYXlPZldlZWsoKSx0aGlzLmluaXRpYWxpemVMb2NhbGVEYXRlRm9ybWF0KCksdGhpcy5pbml0aWFsaXplTG9jYWxlTW9udGhzQWJicmV2aWF0ZWQoKSx0aGlzLmluaXRpYWxpemVMb2NhbGVNb250'@;
put 'aHNXaWRlKCksdGhpcy5pbml0aWFsaXplTG9jYWxlRGF5cygpfWluaXRpYWxpemVMb2NhbGVEYXlzKCl7Y29uc3QgYT1bXSxkPWpVKHRoaXMubG9jYWxlLGQwLlN0YW5kYWxvbmUsZGwuV2lkZSkuc2xpY2UoKSxoPWpVKHRoaXMubG9jYWxlLGQwLlN0YW5kYWxvbmUsZGwuTmFycm93KS5zbGlj'@;
put 'ZSgpLGY9dGhpcy5maXJzdERheU9mV2Vlaztmb3IobGV0IHY9MDt2PDc7disrKWEucHVzaCh7ZGF5OmRbdl0sbmFycm93Omhbdl19KTtpZihmPjApe2NvbnN0IHY9YS5zcGxpY2UoMCxmKTthLnB1c2goLi4udil9dGhpcy5fbG9jYWxlRGF5cz1hfWluaXRpYWxpemVMb2NhbGVNb250aHNBYmJy'@;
put 'ZXZpYXRlZCgpe3RoaXMuX2xvY2FsZU1vbnRoc0FiYnJldmlhdGVkPXpVKHRoaXMubG9jYWxlLGQwLlN0YW5kYWxvbmUsZGwuQWJicmV2aWF0ZWQpLnNsaWNlKCl9aW5pdGlhbGl6ZUxvY2FsZU1vbnRoc1dpZGUoKXt0aGlzLl9sb2NhbGVNb250aHNXaWRlPXpVKHRoaXMubG9jYWxlLGQwLlN0'@;
put 'YW5kYWxvbmUsZGwuV2lkZSkuc2xpY2UoKX1pbml0aWFsaXplRmlyc3REYXlPZldlZWsoKXt0aGlzLl9maXJzdERheU9mV2Vlaz1mdW5jdGlvbiB4X2UoYyl7cmV0dXJuIG8xKGMpW2VjLkZpcnN0RGF5T2ZXZWVrXX0odGhpcy5sb2NhbGUpfWluaXRpYWxpemVMb2NhbGVEYXRlRm9ybWF0KCl7'@;
put 'dGhpcy5fbG9jYWxlRGF0ZUZvcm1hdD1mdW5jdGlvbiBNTShjLGwpe3JldHVybiBDMihvMShjKVtlYy5EYXRlRm9ybWF0XSxsKX0odGhpcy5sb2NhbGUsQ2QuU2hvcnQpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh4cihCZikpfSxjLlx1MDI3NXBy'@;
put 'b3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpO2NsYXNzIE9ke2NvbnN0cnVjdG9yKGwsYSl7dGhpcy55ZWFyPWwsdGhpcy5tb250aD1hLHRoaXMuaW5pdGlhbGl6ZURheXNJbkNhbGVuZGFyKCl9aXNFcXVhbChsKXtyZXR1cm4hIWwmJnRoaXMueWVhcj09PWwueWVh'@;
put 'ciYmdGhpcy5tb250aD09PWwubW9udGh9aXNEYXlJbkNhbGVuZGFyKGwpe3JldHVybiEhbCYmdGhpcy55ZWFyPT09bC55ZWFyJiZ0aGlzLm1vbnRoPT09bC5tb250aH1wcmV2aW91c01vbnRoKCl7cmV0dXJuIDA9PT10aGlzLm1vbnRoP25ldyBPZCh0aGlzLnllYXItMSwxMSk6bmV3IE9kKHRo'@;
put 'aXMueWVhcix0aGlzLm1vbnRoLTEpfW5leHRNb250aCgpe3JldHVybiAxMT09PXRoaXMubW9udGg/bmV3IE9kKHRoaXMueWVhcisxLDApOm5ldyBPZCh0aGlzLnllYXIsdGhpcy5tb250aCsxKX1wcmV2aW91c1llYXIoKXtyZXR1cm4gbmV3IE9kKHRoaXMueWVhci0xLHRoaXMubW9udGgpfW5l'@;
put 'eHRZZWFyKCl7cmV0dXJuIG5ldyBPZCh0aGlzLnllYXIrMSx0aGlzLm1vbnRoKX1pbml0aWFsaXplRGF5c0luQ2FsZW5kYXIoKXtjb25zdCBsPWxkZSh0aGlzLnllYXIsdGhpcy5tb250aCk7dGhpcy5kYXlzPUFycmF5KGwpLmZpbGwobnVsbCkubWFwKChhLGQpPT5uZXcgTGQodGhpcy55ZWFy'@;
put 'LHRoaXMubW9udGgsZCsxKSl9fWxldCBNaD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5pc1JhbmdlUGlja2VyPSExLHRoaXMuaGFzQWN0aW9uQnV0dG9ucz0hMSx0aGlzLl90b2RheXNGdWxsRGF0ZT1uZXcgRGF0ZSx0aGlzLl9zZWxlY3RlZERheUNoYW5nZT1uZXcgV24sdGhp'@;
put 'cy5fc2VsZWN0ZWRFbmREYXlDaGFuZ2U9bmV3IFduLHRoaXMuX2Rpc3BsYXllZENhbGVuZGFyQ2hhbmdlPW5ldyBXbix0aGlzLl9mb2N1c09uQ2FsZW5kYXJDaGFuZ2U9bmV3IFduLHRoaXMuX3JlZnJlc2hDYWxlbmRhclZpZXc9bmV3IFduLHRoaXMuX2ZvY3VzZWREYXlDaGFuZ2U9bmV3IFdu'@;
put 'fWdldCB0b2RheSgpe3JldHVybiB0aGlzLl90b2RheX1nZXQgZGlzcGxheWVkQ2FsZW5kYXIoKXtyZXR1cm4gdGhpcy5fZGlzcGxheWVkQ2FsZW5kYXJ9Z2V0IHNlbGVjdGVkRGF5Q2hhbmdlKCl7cmV0dXJuIHRoaXMuX3NlbGVjdGVkRGF5Q2hhbmdlLmFzT2JzZXJ2YWJsZSgpfWdldCBzZWxl'@;
put 'Y3RlZEVuZERheUNoYW5nZSgpe3JldHVybiB0aGlzLl9zZWxlY3RlZEVuZERheUNoYW5nZS5hc09ic2VydmFibGUoKX1nZXQgZGlzcGxheWVkQ2FsZW5kYXJDaGFuZ2UoKXtyZXR1cm4gdGhpcy5fZGlzcGxheWVkQ2FsZW5kYXJDaGFuZ2UuYXNPYnNlcnZhYmxlKCl9Z2V0IGZvY3VzT25DYWxl'@;
put 'bmRhckNoYW5nZSgpe3JldHVybiB0aGlzLl9mb2N1c09uQ2FsZW5kYXJDaGFuZ2UuYXNPYnNlcnZhYmxlKCl9Z2V0IGZvY3VzZWREYXlDaGFuZ2UoKXtyZXR1cm4gdGhpcy5fZm9jdXNlZERheUNoYW5nZS5hc09ic2VydmFibGUoKS5waXBlKEd1KGE9PnRoaXMuZm9jdXNlZERheT1hKSl9Z2V0'@;
put 'IHJlZnJlc2hDYWxlbmRhclZpZXcoKXtyZXR1cm4gdGhpcy5fcmVmcmVzaENhbGVuZGFyVmlldy5hc09ic2VydmFibGUoKX1ub3RpZnlTZWxlY3RlZERheUNoYW5nZWQoYSx7ZW1pdEV2ZW50OmR9PXtlbWl0RXZlbnQ6ITB9KXtpZih0aGlzLmlzUmFuZ2VQaWNrZXIpe2NvbnN0e3N0YXJ0RGF0'@;
put 'ZTpoLGVuZERhdGU6Zn09YTtoJiZmPyh0aGlzLnNldFNlbGVjdGVkRGF5KGgsZCksdGhpcy5zZXRTZWxlY3RlZEVuZERheShmLGQpKToobnVsbCE9PWYmJnRoaXMuc2V0U2VsZWN0ZWRFbmREYXkoZixkKSxudWxsIT09aCYmdGhpcy5zZXRTZWxlY3RlZERheShoLGQpKX1lbHNlIHRoaXMuc2V0'@;
put 'U2VsZWN0ZWREYXkoYSxkKTt0aGlzLl9yZWZyZXNoQ2FsZW5kYXJWaWV3Lm5leHQoKX1pbml0aWFsaXplQ2FsZW5kYXIoKXt0aGlzLmZvY3VzZWREYXk9bnVsbCx0aGlzLmluaXRpYWxpemVUb2RheXNEYXRlKCksdGhpcy5fZGlzcGxheWVkQ2FsZW5kYXI9dGhpcy5zZWxlY3RlZERheT9uZXcg'@;
put 'T2QodGhpcy5zZWxlY3RlZERheS55ZWFyLHRoaXMuc2VsZWN0ZWREYXkubW9udGgpOm5ldyBPZCh0aGlzLnRvZGF5LnllYXIsdGhpcy50b2RheS5tb250aCl9Y2hhbmdlTW9udGgoYSl7dGhpcy5zZXREaXNwbGF5ZWRDYWxlbmRhcihuZXcgT2QodGhpcy5fZGlzcGxheWVkQ2FsZW5kYXIueWVh'@;
put 'cixhKSl9Y2hhbmdlWWVhcihhKXt0aGlzLnNldERpc3BsYXllZENhbGVuZGFyKG5ldyBPZChhLHRoaXMuX2Rpc3BsYXllZENhbGVuZGFyLm1vbnRoKSl9bW92ZVRvTmV4dE1vbnRoKCl7dGhpcy5zZXREaXNwbGF5ZWRDYWxlbmRhcih0aGlzLl9kaXNwbGF5ZWRDYWxlbmRhci5uZXh0TW9udGgo'@;
put 'KSl9bW92ZVRvUHJldmlvdXNNb250aCgpe3RoaXMuc2V0RGlzcGxheWVkQ2FsZW5kYXIodGhpcy5fZGlzcGxheWVkQ2FsZW5kYXIucHJldmlvdXNNb250aCgpKX1tb3ZlVG9OZXh0WWVhcigpe3RoaXMuc2V0RGlzcGxheWVkQ2FsZW5kYXIodGhpcy5fZGlzcGxheWVkQ2FsZW5kYXIubmV4dFll'@;
put 'YXIoKSl9bW92ZVRvUHJldmlvdXNZZWFyKCl7dGhpcy5zZXREaXNwbGF5ZWRDYWxlbmRhcih0aGlzLl9kaXNwbGF5ZWRDYWxlbmRhci5wcmV2aW91c1llYXIoKSl9bW92ZVRvQ3VycmVudE1vbnRoKCl7dGhpcy5kaXNwbGF5ZWRDYWxlbmRhci5pc0RheUluQ2FsZW5kYXIodGhpcy50b2RheSl8'@;
put 'fHRoaXMuc2V0RGlzcGxheWVkQ2FsZW5kYXIobmV3IE9kKHRoaXMudG9kYXkueWVhcix0aGlzLnRvZGF5Lm1vbnRoKSksdGhpcy5fZm9jdXNPbkNhbGVuZGFyQ2hhbmdlLm5leHQoKX1tb3ZlVG9TcGVjaWZpY01vbnRoKGEpe3RoaXMuZGlzcGxheWVkQ2FsZW5kYXIuaXNEYXlJbkNhbGVuZGFy'@;
put 'KGEpfHx0aGlzLnNldERpc3BsYXllZENhbGVuZGFyKG5ldyBPZChhLnllYXIsYS5tb250aCkpfWluY3JlbWVudEZvY3VzRGF5KGEpe3RoaXMuaG92ZXJlZERheT10aGlzLmZvY3VzZWREYXk9dGhpcy5mb2N1c2VkRGF5LmluY3JlbWVudEJ5KGEpLHRoaXMuX2Rpc3BsYXllZENhbGVuZGFyLmlz'@;
put 'RGF5SW5DYWxlbmRhcih0aGlzLmZvY3VzZWREYXkpP3RoaXMuX2ZvY3VzZWREYXlDaGFuZ2UubmV4dCh0aGlzLmZvY3VzZWREYXkpOnRoaXMuc2V0RGlzcGxheWVkQ2FsZW5kYXIobmV3IE9kKHRoaXMuZm9jdXNlZERheS55ZWFyLHRoaXMuZm9jdXNlZERheS5tb250aCkpLHRoaXMuX2ZvY3Vz'@;
put 'T25DYWxlbmRhckNoYW5nZS5uZXh0KCl9cmVzZXRTZWxlY3RlZERheSgpe3RoaXMuc2VsZWN0ZWREYXk9dGhpcy5wZXJzaXN0ZWREYXRlLHRoaXMuc2VsZWN0ZWRFbmREYXk9dGhpcy5wZXJzaXN0ZWRFbmREYXRlfWNvbnZlcnREYXRlVG9EYXlNb2RlbChhKXtyZXR1cm4gbmV3IExkKGEuZ2V0'@;
put 'RnVsbFllYXIoKSxhLmdldE1vbnRoKCksYS5nZXREYXRlKCkpfXNldFNlbGVjdGVkRGF5KGEsZCl7dGhpcy5zZWxlY3RlZERheT1hLGQmJnRoaXMuX3NlbGVjdGVkRGF5Q2hhbmdlLm5leHQoYSl9c2V0U2VsZWN0ZWRFbmREYXkoYSxkKXt0aGlzLnNlbGVjdGVkRW5kRGF5PWEsZCYmdGhpcy5f'@;
put 'c2VsZWN0ZWRFbmREYXlDaGFuZ2UubmV4dChhKX1zZXREaXNwbGF5ZWRDYWxlbmRhcihhKXt0aGlzLl9kaXNwbGF5ZWRDYWxlbmRhci5pc0VxdWFsKGEpfHwodGhpcy5fZGlzcGxheWVkQ2FsZW5kYXI9YSx0aGlzLl9kaXNwbGF5ZWRDYWxlbmRhckNoYW5nZS5uZXh0KCkpfWluaXRpYWxpemVU'@;
put 'b2RheXNEYXRlKCl7dGhpcy5fdG9kYXlzRnVsbERhdGU9bmV3IERhdGUsdGhpcy5fdG9kYXk9bmV3IExkKHRoaXMuX3RvZGF5c0Z1bGxEYXRlLmdldEZ1bGxZZWFyKCksdGhpcy5fdG9kYXlzRnVsbERhdGUuZ2V0TW9udGgoKSx0aGlzLl90b2RheXNGdWxsRGF0ZS5nZXREYXRlKCkpfX1yZXR1'@;
put 'cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSxTbT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCl7dGhpcy5fbmdab25lPWEsdGhpcy5wbGF0Zm9ybUlkPWR9'@;
put 'Zm9jdXNDZWxsKGEpe3RoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e3RoaXMubmdab25lSXNTdGFibGVJbkJyb3dzZXIoKS5zdWJzY3JpYmUoKCk9Pntjb25zdCBkPWEubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCdbdGFiaW5kZXg9IjAiXScpO2QmJmQuZm9jdXMoKX0p'@;
put 'fSl9Zm9jdXNJbnB1dChhKXt0aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PnRoaXMubmdab25lSXNTdGFibGVJbkJyb3dzZXIoKS5zdWJzY3JpYmUoKCk9PmEuZm9jdXMoKSkpfWVsZW1lbnRJc0ZvY3VzZWQoYSl7cmV0dXJuIHRsKHRoaXMucGxhdGZvcm1JZCkmJmRvY3VtZW50'@;
put 'LmFjdGl2ZUVsZW1lbnQ9PT1hfW5nWm9uZUlzU3RhYmxlSW5Ccm93c2VyKCl7cmV0dXJuIHRoaXMuX25nWm9uZS5vblN0YWJsZS5hc09ic2VydmFibGUoKS5waXBlKGFtKCksJGwoKCk9PnRsKHRoaXMucGxhdGZvcm1JZCkpKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVy'@;
put 'biBuZXcoYXx8YykoeHIoV2EpLHhyKGlvKSl9LGMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCksY2c9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLmRpc2FibGVkRGF0ZXM9e21pbkRhdGU6bmV3IExkKDAsMCwxKSxtYXhEYXRlOm5l'@;
put 'dyBMZCg5OTk5LDExLDMxKX0sdGhpcy5jbGRyTG9jYWxlRGF0ZUZvcm1hdD0iZGQvTU0veSIsdGhpcy5sb2NhbGVEaXNwbGF5Rm9ybWF0PXFMLHRoaXMuZGVsaW1pdGVycz1bIi8iLCIvIl0sdGhpcy5jbGRyTG9jYWxlRGF0ZUZvcm1hdD1hLmxvY2FsZURhdGVGb3JtYXQsdGhpcy5pbml0aWFs'@;
put 'aXplTG9jYWxlRGlzcGxheUZvcm1hdCgpfWdldCBwbGFjZWhvbGRlclRleHQoKXtjb25zdCBhPXRoaXMubG9jYWxlRGlzcGxheUZvcm1hdC5mb3JtYXQ7cmV0dXJuIGFbMF0rdGhpcy5kZWxpbWl0ZXJzWzBdK2FbMV0rdGhpcy5kZWxpbWl0ZXJzWzFdK2FbMl19c2V0TWluRGF0ZShhKXtpZihh'@;
put 'KXtjb25zdFtkLGgsZl09YS5zcGxpdCgiLSIpLm1hcCh2PT5wYXJzZUludCh2LDEwKSk7dGhpcy5kaXNhYmxlZERhdGVzLm1pbkRhdGU9bmV3IExkKGQsaC0xLGYpfWVsc2UgdGhpcy5kaXNhYmxlZERhdGVzLm1pbkRhdGU9bmV3IExkKDAsMCwxKX1zZXRNYXhEYXRlKGEpe2lmKGEpe2NvbnN0'@;
put 'W2QsaCxmXT1hLnNwbGl0KCItIikubWFwKHY9PnBhcnNlSW50KHYsMTApKTt0aGlzLmRpc2FibGVkRGF0ZXMubWF4RGF0ZT1uZXcgTGQoZCxoLTEsZil9ZWxzZSB0aGlzLmRpc2FibGVkRGF0ZXMubWF4RGF0ZT1uZXcgTGQoOTk5OSwxMSwzMSl9c2V0UmFuZ2VPcHRpb25zKGEpe2NvbnN0IGQ9'@;
put 'dGhpcy52YWxpZGF0ZURhdGVSYW5nZU9wdGlvbnMoYSk7dGhpcy5kYXRlUmFuZ2VPcHRpb25zPWR8fFtdfWdldFJhbmdlT3B0aW9ucygpe3JldHVybiB0aGlzLmRhdGVSYW5nZU9wdGlvbnN9dG9Mb2NhbGVEaXNwbGF5Rm9ybWF0U3RyaW5nKGEpe2lmKGEpe2lmKGlzTmFOKGEuZ2V0VGltZSgp'@;
put 'KSlyZXR1cm4iIjtjb25zdCBkPWEuZ2V0RGF0ZSgpLGg9YS5nZXRNb250aCgpKzEsZj1kPjk/ZC50b1N0cmluZygpOiIwIitkLHY9aD45P2gudG9TdHJpbmcoKToiMCIraDtyZXR1cm4gdGhpcy5sb2NhbGVEaXNwbGF5Rm9ybWF0PT09cUw/Zit0aGlzLmRlbGltaXRlcnNbMF0rdit0aGlzLmRl'@;
put 'bGltaXRlcnNbMV0rYS5nZXRGdWxsWWVhcigpOnRoaXMubG9jYWxlRGlzcGxheUZvcm1hdD09PWFHP3YrdGhpcy5kZWxpbWl0ZXJzWzBdK2YrdGhpcy5kZWxpbWl0ZXJzWzFdK2EuZ2V0RnVsbFllYXIoKTphLmdldEZ1bGxZZWFyKCkrdGhpcy5kZWxpbWl0ZXJzWzBdK3YrdGhpcy5kZWxpbWl0'@;
put 'ZXJzWzFdK2Z9cmV0dXJuIiJ9Z2V0RGF0ZVZhbHVlRnJvbURhdGVTdHJpbmcoYSl7aWYoIWF8fCJzdHJpbmciIT10eXBlb2YgYSlyZXR1cm4gbnVsbDtjb25zdCBkPWEubWF0Y2goY1plKTtpZighZHx8MyE9PWQubGVuZ3RoKXJldHVybiBudWxsO2NvbnN0W2gsZix2XT1kO3JldHVybiB0aGlz'@;
put 'LmxvY2FsZURpc3BsYXlGb3JtYXQ9PT1xTD90aGlzLnZhbGlkYXRlQW5kR2V0RGF0ZSh2LGYsaCk6dGhpcy5sb2NhbGVEaXNwbGF5Rm9ybWF0PT09YUc/dGhpcy52YWxpZGF0ZUFuZEdldERhdGUodixoLGYpOnRoaXMudmFsaWRhdGVBbmRHZXREYXRlKGgsZix2KX12YWxpZGF0ZURhdGVSYW5n'@;
put 'ZU9wdGlvbnMoYSl7Y29uc3QgZD1bXTtyZXR1cm4gYT8uZm9yRWFjaChoPT57MiE9PWg/LnZhbHVlPy5sZW5ndGh8fCJbb2JqZWN0IERhdGVdIiE9PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChoPy52YWx1ZVswXSl8fCJbb2JqZWN0IERhdGVdIiE9PU9iamVjdC5wcm90b3R5cGUu'@;
put 'dG9TdHJpbmcuY2FsbChoPy52YWx1ZVsxXSl8fGQucHVzaChoKX0pLGR9aW5pdGlhbGl6ZUxvY2FsZURpc3BsYXlGb3JtYXQoKXtjb25zdCBhPXRoaXMuY2xkckxvY2FsZURhdGVGb3JtYXQudG9Mb2NhbGVMb3dlckNhc2UoKTt0aGlzLmxvY2FsZURpc3BsYXlGb3JtYXQ9b1plLnRlc3QoYSk/'@;
put 'cUw6c1plLnRlc3QoYSk/YUc6aFplLHRoaXMuZXh0cmFjdERlbGltaXRlcnMoKX1leHRyYWN0RGVsaW1pdGVycygpe2lmKHRoaXMuY2xkckxvY2FsZURhdGVGb3JtYXQpe2NvbnN0IGQ9dGhpcy5jbGRyTG9jYWxlRGF0ZUZvcm1hdC5yZXBsYWNlKGRaZSwiIikuc3BsaXQobFplKTtkJiY0PT09'@;
put 'ZC5sZW5ndGg/dGhpcy5kZWxpbWl0ZXJzPVtkWzFdLGRbMl1dOmNvbnNvbGUuZXJyb3IoIlVuZXhwZWN0ZWQgZGF0ZSBmb3JtYXQgcmVjZWl2ZWQuIERlbGltaXRlcnMgZXh0cmFjdGVkOiAiLGQpfX1pc1ZhbGlkTW9udGgoYSl7cmV0dXJuIGE+LTEmJmE8MTJ9aXNWYWxpZERhdGUoYSxkLGgp'@;
put 'e3JldHVybiBoPjAmJmg8PWxkZShhLGQpfXZhbGlkYXRlQW5kR2V0RGF0ZShhLGQsaCl7Y29uc3QgZj0rYSx2PStkLTEsTT0raDtpZighdGhpcy5pc1ZhbGlkTW9udGgodil8fCF0aGlzLmlzVmFsaWREYXRlKGYsdixNKSlyZXR1cm4gbnVsbDtjb25zdCBEPWZ1bmN0aW9uIGdaZShjKXtpZihj'@;
put 'Pjk5OTl8fGM+MTAwJiZjPDk5OXx8YzwxMClyZXR1cm4tMTtpZihjPjk5OSlyZXR1cm4gYztjb25zdCBsPShuZXcgRGF0ZSkuZ2V0RnVsbFllYXIoKTtsZXQgZD1jKzEwMCpNYXRoLmZsb29yKGwvMTAwKTtyZXR1cm4gZD5sKzIwJiYoZC09MTAwKSxkfShmKTtyZXR1cm4tMSE9PUQ/bmV3IERh'@;
put 'dGUoRCx2LE0pOm51bGx9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHhyKFp4KSl9LGMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCksWXk9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuX3Rv'@;
put 'dWNoZWRDaGFuZ2U9bmV3IFduLHRoaXMuX2RpcnR5Q2hhbmdlPW5ldyBXbn1nZXQgdG91Y2hlZENoYW5nZSgpe3JldHVybiB0aGlzLl90b3VjaGVkQ2hhbmdlLmFzT2JzZXJ2YWJsZSgpfWdldCBkaXJ0eUNoYW5nZSgpe3JldHVybiB0aGlzLl9kaXJ0eUNoYW5nZS5hc09ic2VydmFibGUoKX1t'@;
put 'YXJrQXNUb3VjaGVkKCl7dGhpcy5fdG91Y2hlZENoYW5nZS5uZXh0KCl9bWFya0FzRGlydHkoKXt0aGlzLl9kaXJ0eUNoYW5nZS5uZXh0KCl9c2V0RGlzYWJsZWQoYSl7dGhpcy5kaXNhYmxlZD1hfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5c'@;
put 'dTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSxjZGU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQpe3RoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZT1hLHRoaXMuY29tbW9uU3RyaW5ncz1kLHRoaXMub25TZWxlY3REYXk9bmV3IEtyfWdldCBk'@;
put 'YXlWaWV3KCl7cmV0dXJuIHRoaXMuX2RheVZpZXd9c2V0IGRheVZpZXcoYSl7dGhpcy5fZGF5Vmlldz1hfWdldCBkYXlTdHJpbmcoKXtyZXR1cm4gdGhpcy5kYXlWaWV3LmlzU2VsZWN0ZWQ/dGhpcy5jb21tb25TdHJpbmdzLnBhcnNlKHRoaXMuY29tbW9uU3RyaW5ncy5rZXlzLmRhdGVwaWNr'@;
put 'ZXJTZWxlY3RlZExhYmVsLHtGVUxMX0RBVEU6dGhpcy5fZGF5Vmlldy5kYXlNb2RlbC50b0RhdGVTdHJpbmcoKX0pOnRoaXMuX2RheVZpZXcuZGF5TW9kZWwudG9EYXRlU3RyaW5nKCl9Z2V0IGlzUmFuZ2VTdGFydERheSgpe3JldHVybiB0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UuaXNS'@;
put 'YW5nZVBpY2tlciYmdGhpcy5kYXlWaWV3Py5kYXlNb2RlbD8udG9Db21wYXJpc29uU3RyaW5nKCk9PT10aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWREYXk/LnRvQ29tcGFyaXNvblN0cmluZygpfWdldCBpc1JhbmdlRW5kRGF5KCl7cmV0dXJuIHRoaXMuX2RhdGVOYXZpZ2F0'@;
put 'aW9uU2VydmljZS5pc1JhbmdlUGlja2VyJiZ0aGlzLmRheVZpZXc/LmRheU1vZGVsPy50b0NvbXBhcmlzb25TdHJpbmcoKT09PXRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZEVuZERheT8udG9Db21wYXJpc29uU3RyaW5nKCl9aG92ZXJMaXN0ZW5lcigpe3RoaXMuZGF5Vmll'@;
put 'dy5pc0Rpc2FibGVkfHwodGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmhvdmVyZWREYXk9dGhpcy5kYXlWaWV3LmRheU1vZGVsKX1vbkRheVZpZXdGb2N1cygpe3RoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5mb2N1c2VkRGF5PXRoaXMuZGF5Vmlldy5kYXlNb2RlbH1zZWxlY3REYXko'@;
put 'KXt0aGlzLmRheVZpZXcuaXNEaXNhYmxlZHx8dGhpcy5vblNlbGVjdERheS5lbWl0KHRoaXMuZGF5Vmlldy5kYXlNb2RlbCl9aXNJblJhbmdlKCl7cmV0dXJuISF0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UuaXNSYW5nZVBpY2tlciYmKHRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5z'@;
put 'ZWxlY3RlZERheSYmdGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRW5kRGF5P3RoaXMuX2RheVZpZXcuZGF5TW9kZWw/LmlzQWZ0ZXIodGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRGF5KSYmdGhpcy5fZGF5Vmlldy5kYXlNb2RlbD8uaXNCZWZvcmUodGhp'@;
put 'cy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRW5kRGF5KTohKCF0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWREYXl8fHRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZEVuZERheSkmJnRoaXMuX2RheVZpZXcuZGF5TW9kZWw/LmlzQWZ0ZXIodGhp'@;
put 'cy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRGF5KSYmdGhpcy5fZGF5Vmlldy5kYXlNb2RlbD8uaXNCZWZvcmUodGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmhvdmVyZWREYXksITApKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyko'@;
put 'R2UoTWgpLEdlKGlzKSl9LGMuXHUwMjc1Y21wPVZyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1kYXkiXV0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsxJmEmJkZ0KCJtb3VzZWVudGVyIixmdW5jdGlvbigpe3JldHVybiBkLmhvdmVyTGlzdGVuZXIoKX0pLDImYSYm'@;
put 'VHIoImRheSIsITApfSxpbnB1dHM6e2RheVZpZXc6W05uLk5vbmUsImNsckRheVZpZXciLCJkYXlWaWV3Il19LG91dHB1dHM6e29uU2VsZWN0RGF5OiJzZWxlY3REYXkifSxkZWNsczoyLHZhcnM6MTksY29uc3RzOltbInR5cGUiLCJidXR0b24iLDEsImRheS1idG4iLDMsImNsaWNrIiwiZm9j'@;
put 'dXMiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihkZSgwLCJidXR0b24iLDApLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZC5zZWxlY3REYXkoKX0pKCJmb2N1cyIsZnVuY3Rpb24oKXtyZXR1cm4gZC5vbkRheVZpZXdGb2N1cygpfSksTGUoMSksaGUoKSksMiZhJiYoVHIo'@;
put 'ImlzLXRvZGF5IixkLmRheVZpZXcuaXNUb2RheXNEYXRlKSgiaXMtZXhjbHVkZWQiLGQuZGF5Vmlldy5pc0V4Y2x1ZGVkKSgiaXMtZGlzYWJsZWQiLGQuZGF5Vmlldy5pc0Rpc2FibGVkKSgiaXMtc2VsZWN0ZWQiLGQuZGF5Vmlldy5pc1NlbGVjdGVkKSgiaW4tcmFuZ2UiLGQuaXNJblJhbmdl'@;
put 'KCkpKCJpcy1zdGFydC1yYW5nZSIsZC5pc1JhbmdlU3RhcnREYXkpKCJpcy1lbmQtcmFuZ2UiLGQuaXNSYW5nZUVuZERheSksaHIoInRhYmluZGV4IixkLmRheVZpZXcudGFiSW5kZXgpKCJhcmlhLWN1cnJlbnQiLGQuZGF5Vmlldy5pc1RvZGF5c0RhdGU/ImRhdGUiOiJmYWxzZSIpKCJhcmlh'@;
put 'LWxhYmVsIixkLmRheVN0cmluZykoImFyaWEtc2VsZWN0ZWQiLGQuZGF5Vmlldy5pc1NlbGVjdGVkKSxmZSgpLERyKCIgIixkLmRheVZpZXcuZGF5TW9kZWwuZGF0ZSwiICIpKX0sZW5jYXBzdWxhdGlvbjoyfSksY30pKCksdWRlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZix2'@;
put 'LE0sRCl7dGhpcy5fbG9jYWxlSGVscGVyU2VydmljZT1hLHRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZT1kLHRoaXMuX2RhdGVwaWNrZXJGb2N1c1NlcnZpY2U9aCx0aGlzLl9kYXRlSU9TZXJ2aWNlPWYsdGhpcy5fZWxSZWY9dix0aGlzLl9kYXRlRm9ybUNvbnRyb2xTZXJ2aWNlPU0sdGhp'@;
put 'cy5fdG9nZ2xlU2VydmljZT1ELHRoaXMuX3N1YnM9W10sdGhpcy5nZW5lcmF0ZUNhbGVuZGFyVmlldygpLHRoaXMuaW5pdGlhbGl6ZVN1YnNjcmlwdGlvbnMoKX1nZXQgbG9jYWxlRGF5cygpe3JldHVybiB0aGlzLl9sb2NhbGVIZWxwZXJTZXJ2aWNlLmxvY2FsZURheXN9Z2V0IGNhbGVuZGFy'@;
put 'KCl7cmV0dXJuIHRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5kaXNwbGF5ZWRDYWxlbmRhcn1nZXQgc2VsZWN0ZWREYXkoKXtyZXR1cm4gdGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRGF5fWdldCBzZWxlY3RlZEVuZERheSgpe3JldHVybiB0aGlzLl9kYXRlTmF2aWdh'@;
put 'dGlvblNlcnZpY2Uuc2VsZWN0ZWRFbmREYXl9Z2V0IGZvY3VzZWREYXkoKXtyZXR1cm4gdGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmZvY3VzZWREYXl9Z2V0IHRvZGF5KCl7cmV0dXJuIHRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS50b2RheX1uZ0FmdGVyVmlld0luaXQoKXt0aGlz'@;
put 'Ll9kYXRlcGlja2VyRm9jdXNTZXJ2aWNlLmZvY3VzQ2VsbCh0aGlzLl9lbFJlZil9bmdPbkRlc3Ryb3koKXt0aGlzLl9zdWJzLmZvckVhY2goYT0+YS51bnN1YnNjcmliZSgpKX1vbktleURvd24oYSl7aWYoYSYmdGhpcy5mb2N1c2VkRGF5KXN3aXRjaChJMihhLmtleSkpe2Nhc2UgZ2EuQXJy'@;
put 'b3dVcDphLnByZXZlbnREZWZhdWx0KCksdGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmluY3JlbWVudEZvY3VzRGF5KC03KTticmVhaztjYXNlIGdhLkFycm93RG93bjphLnByZXZlbnREZWZhdWx0KCksdGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmluY3JlbWVudEZvY3VzRGF5KDcp'@;
put 'O2JyZWFrO2Nhc2UgZ2EuQXJyb3dMZWZ0OmEucHJldmVudERlZmF1bHQoKSx0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UuaW5jcmVtZW50Rm9jdXNEYXkoLTEpO2JyZWFrO2Nhc2UgZ2EuQXJyb3dSaWdodDphLnByZXZlbnREZWZhdWx0KCksdGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNl'@;
put 'LmluY3JlbWVudEZvY3VzRGF5KDEpfX1zZXRTZWxlY3RlZERheShhKXtjb25zdCBkPXRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5oYXNBY3Rpb25CdXR0b25zLGg9dGhpcy51cGRhdGVDYWxlbmRhclZpZXdNb2RhbChhKTt0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2Uubm90aWZ5U2Vs'@;
put 'ZWN0ZWREYXlDaGFuZ2VkKGgse2VtaXRFdmVudDohZH0pLGR8fCh0aGlzLl9kYXRlRm9ybUNvbnRyb2xTZXJ2aWNlLm1hcmtBc0RpcnR5KCksdGhpcy52YWxpZGF0ZUFuZENsb3NlRGF0ZVBpY2tlcigpKX1pbml0aWFsaXplU3Vic2NyaXB0aW9ucygpe3RoaXMuX3N1YnMucHVzaCh0aGlzLl9k'@;
put 'YXRlTmF2aWdhdGlvblNlcnZpY2UuZGlzcGxheWVkQ2FsZW5kYXJDaGFuZ2Uuc3Vic2NyaWJlKCgpPT57dGhpcy5nZW5lcmF0ZUNhbGVuZGFyVmlldygpfSkpLHRoaXMuX3N1YnMucHVzaCh0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UuZm9jdXNlZERheUNoYW5nZS5zdWJzY3JpYmUoYT0+'@;
put 'e3RoaXMuY2FsZW5kYXJWaWV3TW9kZWwudXBkYXRlRm9jdXNhYmxlRGF5KGEpfSkpLHRoaXMuX3N1YnMucHVzaCh0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UuZm9jdXNPbkNhbGVuZGFyQ2hhbmdlLnN1YnNjcmliZSgoKT0+e3RoaXMuX2RhdGVwaWNrZXJGb2N1c1NlcnZpY2UuZm9jdXND'@;
put 'ZWxsKHRoaXMuX2VsUmVmKX0pKSx0aGlzLl9zdWJzLnB1c2godGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnJlZnJlc2hDYWxlbmRhclZpZXcuc3Vic2NyaWJlKCgpPT57dGhpcy5yZWZyZXNoQ2FsZW5kYXJWaWV3TW9kYWwoKX0pKX12YWxpZGF0ZUFuZENsb3NlRGF0ZVBpY2tlcigpeyh0'@;
put 'aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UuaXNSYW5nZVBpY2tlciYmdGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRGF5JiZ0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWRFbmREYXl8fCF0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UuaXNSYW5nZVBp'@;
put 'Y2tlciYmdGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRGF5KSYmKHRoaXMuX3RvZ2dsZVNlcnZpY2Uub3Blbj0hMSl9dXBkYXRlQ2FsZW5kYXJWaWV3TW9kYWwoYSl7Y29uc3QgZD10aGlzLmNhbGVuZGFyVmlld01vZGVsLnNlbGVjdGVkRGF5fHxudWxsLGg9dGhpcy5fZGF0'@;
put 'ZU5hdmlnYXRpb25TZXJ2aWNlLmlzUmFuZ2VQaWNrZXI7bGV0IGY9dGhpcy5jYWxlbmRhclZpZXdNb2RlbC5zZWxlY3RlZEVuZERheXx8bnVsbDtyZXR1cm4gaD8hZHx8ZCYmZnx8ZCYmYT8uaXNCZWZvcmUoZCk/KHRoaXMuY2FsZW5kYXJWaWV3TW9kZWwudXBkYXRlU2VsZWN0ZWREYXkoYSks'@;
put 'ZiYmKGY9dm9pZCAwLHRoaXMuY2FsZW5kYXJWaWV3TW9kZWwudXBkYXRlU2VsZWN0ZWRFbmREYXkoZikpKTp0aGlzLmNhbGVuZGFyVmlld01vZGVsLnVwZGF0ZVNlbGVjdGVkRW5kRGF5KGEpOnRoaXMuY2FsZW5kYXJWaWV3TW9kZWwudXBkYXRlU2VsZWN0ZWREYXkoYSksaD97c3RhcnREYXRl'@;
put 'OnRoaXMuY2FsZW5kYXJWaWV3TW9kZWwuc2VsZWN0ZWREYXksZW5kRGF0ZTp0aGlzLmNhbGVuZGFyVmlld01vZGVsLnNlbGVjdGVkRW5kRGF5fTp0aGlzLmNhbGVuZGFyVmlld01vZGVsLnNlbGVjdGVkRGF5fXJlZnJlc2hDYWxlbmRhclZpZXdNb2RhbCgpe3RoaXMuY2FsZW5kYXJWaWV3TW9k'@;
put 'ZWwudXBkYXRlU2VsZWN0ZWREYXkodGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRGF5KSx0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UuaXNSYW5nZVBpY2tlciYmdGhpcy5jYWxlbmRhclZpZXdNb2RlbC51cGRhdGVTZWxlY3RlZEVuZERheSh0aGlzLl9kYXRlTmF2aWdh'@;
put 'dGlvblNlcnZpY2Uuc2VsZWN0ZWRFbmREYXkpfWdlbmVyYXRlQ2FsZW5kYXJWaWV3KCl7dGhpcy5jYWxlbmRhclZpZXdNb2RlbD1uZXcgYlplKHRoaXMuY2FsZW5kYXIsdGhpcy5zZWxlY3RlZERheSx0aGlzLnNlbGVjdGVkRW5kRGF5LHRoaXMuZm9jdXNlZERheSx0aGlzLnRvZGF5LHRoaXMu'@;
put 'X2xvY2FsZUhlbHBlclNlcnZpY2UuZmlyc3REYXlPZldlZWssdGhpcy5fZGF0ZUlPU2VydmljZS5kaXNhYmxlZERhdGVzKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2UoWngpLEdlKE1oKSxHZShTbSksR2UoY2cpLEdlKEppKSxHZShZeSksR2Uo'@;
put 'c2MpKX0sYy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWNhbGVuZGFyIl1dLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezEmYSYmRnQoImtleWRvd24iLGZ1bmN0aW9uKGYpe3JldHVybiBkLm9uS2V5RG93bihmKX0pfSxkZWNsczo0LHZhcnM6Mixjb25zdHM6W1si'@;
put 'cm9sZSIsInByZXNlbnRhdGlvbiIsMSwiY2FsZW5kYXItdGFibGUiXSxbMSwiY2FsZW5kYXItcm93Iiwid2Vla2RheXMiXSxbImNsYXNzIiwiY2FsZW5kYXItY2VsbCB3ZWVrZGF5Iiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbImNsYXNzIiwiY2FsZW5kYXItcm93Iiw0LCJuZ0ZvciIsIm5nRm9y'@;
put 'T2YiXSxbMSwiY2FsZW5kYXItY2VsbCIsIndlZWtkYXkiXSxbMSwiY2FsZW5kYXItcm93Il0sWyJjbGFzcyIsImNhbGVuZGFyLWNlbGwiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsxLCJjYWxlbmRhci1jZWxsIl0sWzMsInNlbGVjdERheSIsImNsckRheVZpZXciXV0sdGVtcGxhdGU6ZnVuY3Rp'@;
put 'b24oYSxkKXsxJmEmJihkZSgwLCJ0YWJsZSIsMCkoMSwidHIiLDEpLGd0KDIsVE5lLDMsMiwidGgiLDIpLGhlKCksZ3QoMyxrTmUsMiwxLCJ0ciIsMyksaGUoKSksMiZhJiYoZmUoMiksTWUoIm5nRm9yT2YiLGQubG9jYWxlRGF5cyksZmUoKSxNZSgibmdGb3JPZiIsZC5jYWxlbmRhclZpZXdN'@;
put 'b2RlbC5jYWxlbmRhclZpZXcpKX0sZGVwZW5kZW5jaWVzOltucyxjZGVdLGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpLFhMPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5fZG9jdW1lbnQ9YSx0aGlzLl9pc1VzZXJBZ2VudE1vYmlsZT0hMSxhJiYodGhpcy5faXNVc2VyQWdlbnRN'@;
put 'b2JpbGU9dVplLnRlc3QoYS5kZWZhdWx0Vmlldy5uYXZpZ2F0b3IudXNlckFnZW50KSx0aGlzLl9pbm5lcldpZHRoPWEuZGVmYXVsdFZpZXcuaW5uZXJXaWR0aCl9Z2V0IGlzRW5hYmxlZCgpe3JldHVybiEodGhpcy5fZG9jdW1lbnQmJnRoaXMuX2lubmVyV2lkdGg8NzY4JiZ0aGlzLl9pc1Vz'@;
put 'ZXJBZ2VudE1vYmlsZSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHhyKHZzKSl9LGMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCksb0c9KCgpPT57Y2xhc3MgYyBleHRlbmRzIEM3e2NvbnN0cnVjdG9y'@;
put 'KGEsZCxoLGYsdixNLEQsWixyZSxjZSxiZSxFZSxCZSl7c3VwZXIoYSxZeCxkLHYsZixoKSx0aGlzLmVsPWgsdGhpcy5yZW5kZXJlcj1mLHRoaXMuY29udHJvbD12LHRoaXMuY29udGFpbmVyPU0sdGhpcy5kYXRlSU9TZXJ2aWNlPUQsdGhpcy5kYXRlTmF2aWdhdGlvblNlcnZpY2U9Wix0aGlz'@;
put 'LmRhdGVwaWNrZXJFbmFibGVkU2VydmljZT1yZSx0aGlzLmRhdGVGb3JtQ29udHJvbFNlcnZpY2U9Y2UsdGhpcy5wbGF0Zm9ybUlkPWJlLHRoaXMuZm9jdXNTZXJ2aWNlPUVlLHRoaXMuZGF0ZXBpY2tlckZvY3VzU2VydmljZT1CZSx0aGlzLmluZGV4PTF9Z2V0IGRpc2FibGVkKCl7cmV0dXJu'@;
put 'IHRoaXMuZGF0ZUZvcm1Db250cm9sU2VydmljZT90aGlzLmRhdGVGb3JtQ29udHJvbFNlcnZpY2UuZGlzYWJsZWR8fCEhdGhpcy5jb250cm9sPy5jb250cm9sPy5kaXNhYmxlZDpudWxsfXNldCBkaXNhYmxlZChhKXt0aGlzLmRhdGVGb3JtQ29udHJvbFNlcnZpY2UmJnRoaXMuZGF0ZUZvcm1D'@;
put 'b250cm9sU2VydmljZS5zZXREaXNhYmxlZChxZihhKSl9Z2V0IHBsYWNlaG9sZGVyVGV4dCgpe3JldHVybiB0aGlzLnBsYWNlaG9sZGVyP3RoaXMucGxhY2Vob2xkZXI6dGhpcy5kYXRlSU9TZXJ2aWNlLnBsYWNlaG9sZGVyVGV4dH1nZXQgaW5wdXRUeXBlKCl7cmV0dXJuIHRsKHRoaXMucGxh'@;
put 'dGZvcm1JZCkmJnRoaXMudXNpbmdOYXRpdmVEYXRlcGlja2VyKCk/ImRhdGUiOiJ0ZXh0In1uZ09uSW5pdCgpe3N1cGVyLm5nT25Jbml0KCksdGhpcy5wb3B1bGF0ZVNlcnZpY2VzRnJvbUNvbnRhaW5lckNvbXBvbmVudCgpLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMubGlzdGVuRm9y'@;
put 'VXNlclNlbGVjdGVkRGF5Q2hhbmdlcygpLHRoaXMubGlzdGVuRm9yQ29udHJvbFZhbHVlQ2hhbmdlcygpLHRoaXMubGlzdGVuRm9yVG91Y2hDaGFuZ2VzKCksdGhpcy5saXN0ZW5Gb3JEaXJ0eUNoYW5nZXMoKSx0aGlzLmxpc3RlbkZvcklucHV0UmVmb2N1cygpKX1uZ0FmdGVyVmlld0luaXQo'@;
put 'KXt0aGlzLnByb2Nlc3NJbml0aWFsSW5wdXRzKCl9c2V0Rm9jdXNTdGF0ZXMoKXt0aGlzLnNldEZvY3VzKCEwKX10cmlnZ2VyVmFsaWRhdGlvbigpe3N1cGVyLnRyaWdnZXJWYWxpZGF0aW9uKCksdGhpcy5zZXRGb2N1cyghMSl9b25WYWx1ZUNoYW5nZShhKXtjb25zdCBkPXRoaXMuZGF0ZUlP'@;
put 'U2VydmljZS5nZXREYXRlVmFsdWVGcm9tRGF0ZVN0cmluZyhhLnZhbHVlKTtpZih0aGlzLnVzaW5nQ2xhcml0eURhdGVwaWNrZXIoKSYmZCl0aGlzLnVwZGF0ZURhdGUoZCwhMCk7ZWxzZSBpZih0aGlzLnVzaW5nTmF0aXZlRGF0ZXBpY2tlcigpKXtjb25zdFtoLGYsdl09YS52YWx1ZS5zcGxp'@;
put 'dCgiLSIpO3RoaXMudXBkYXRlRGF0ZShuZXcgRGF0ZSgraCwrZi0xLCt2KSwhMCl9ZWxzZSB0aGlzLmVtaXREYXRlT3V0cHV0KG51bGwpfWRhdGVwaWNrZXJIYXNGb3JtQ29udHJvbCgpe3JldHVybiEhdGhpcy5jb250cm9sfXNldERhdGUoYSl7InN0cmluZyI9PXR5cGVvZiBhJiYoYT1uZXcg'@;
put 'RGF0ZShhKSksdGhpcy5wcmV2aW91c0RhdGVDaGFuZ2UhPT1hJiZ0aGlzLnVwZGF0ZURhdGUoYSksdGhpcy5pbml0aWFsQ2xyRGF0ZUlucHV0VmFsdWV8fCh0aGlzLmluaXRpYWxDbHJEYXRlSW5wdXRWYWx1ZT1hKX11c2luZ0NsYXJpdHlEYXRlcGlja2VyKCl7cmV0dXJuIHRoaXMuZGF0ZXBp'@;
put 'Y2tlckVuYWJsZWRTZXJ2aWNlLmlzRW5hYmxlZH11c2luZ05hdGl2ZURhdGVwaWNrZXIoKXtyZXR1cm4hdGhpcy5kYXRlcGlja2VyRW5hYmxlZFNlcnZpY2UuaXNFbmFibGVkfXNldEZvY3VzKGEpe3RoaXMuZm9jdXNTZXJ2aWNlJiYodGhpcy5mb2N1c1NlcnZpY2UuZm9jdXNlZD1hKX1wb3B1'@;
put 'bGF0ZVNlcnZpY2VzRnJvbUNvbnRhaW5lckNvbXBvbmVudCgpe3RoaXMuY29udGFpbmVyfHwodGhpcy5kYXRlSU9TZXJ2aWNlPXRoaXMuZ2V0UHJvdmlkZXJGcm9tQ29udGFpbmVyKGNnKSx0aGlzLmRhdGVOYXZpZ2F0aW9uU2VydmljZT10aGlzLmdldFByb3ZpZGVyRnJvbUNvbnRhaW5lcihN'@;
put 'aCksdGhpcy5kYXRlcGlja2VyRW5hYmxlZFNlcnZpY2U9dGhpcy5nZXRQcm92aWRlckZyb21Db250YWluZXIoWEwpLHRoaXMuZGF0ZUZvcm1Db250cm9sU2VydmljZT10aGlzLmdldFByb3ZpZGVyRnJvbUNvbnRhaW5lcihZeSkpfXByb2Nlc3NJbml0aWFsSW5wdXRzKCl7dGhpcy5kYXRlcGlj'@;
put 'a2VySGFzRm9ybUNvbnRyb2woKT90aGlzLnVwZGF0ZURhdGUodGhpcy5kYXRlSU9TZXJ2aWNlLmdldERhdGVWYWx1ZUZyb21EYXRlU3RyaW5nKHRoaXMuY29udHJvbC52YWx1ZSkpOnRoaXMudXBkYXRlRGF0ZSh0aGlzLmluaXRpYWxDbHJEYXRlSW5wdXRWYWx1ZSl9dXBkYXRlRGF0ZShhLGQ9'@;
put 'ITEpe2NvbnN0IGg9dGhpcy5nZXRWYWxpZERhdGVWYWx1ZUZyb21EYXRlKGEpO2lmKGQ/dGhpcy5lbWl0RGF0ZU91dHB1dChoKTp0aGlzLnByZXZpb3VzRGF0ZUNoYW5nZT1oLHRoaXMuZGF0ZU5hdmlnYXRpb25TZXJ2aWNlKXtjb25zdCBmPWg/bmV3IExkKGguZ2V0RnVsbFllYXIoKSxoLmdl'@;
put 'dE1vbnRoKCksaC5nZXREYXRlKCkpOm51bGw7dGhpcy51cGRhdGVEYXlNb2RlbChmKX10aGlzLnVwZGF0ZUlucHV0KGgpfXVwZGF0ZUlucHV0KGEpe2lmKGEpe2NvbnN0IGQ9dGhpcy5kYXRlSU9TZXJ2aWNlLnRvTG9jYWxlRGlzcGxheUZvcm1hdFN0cmluZyhhKTt0aGlzLnVzaW5nTmF0aXZl'@;
put 'RGF0ZXBpY2tlcigpPyhhLnNldE1pbnV0ZXMoYS5nZXRNaW51dGVzKCktYS5nZXRUaW1lem9uZU9mZnNldCgpKSx0aGlzLnJlbmRlcmVyLnNldFByb3BlcnR5KHRoaXMuZWwubmF0aXZlRWxlbWVudCwidmFsdWVBc0RhdGUiLGEpKTp0aGlzLmRhdGVwaWNrZXJIYXNGb3JtQ29udHJvbCgpJiZk'@;
put 'IT09dGhpcy5jb250cm9sLnZhbHVlP3RoaXMuY29udHJvbC5jb250cm9sLnNldFZhbHVlKGQpOnRoaXMucmVuZGVyZXIuc2V0UHJvcGVydHkodGhpcy5lbC5uYXRpdmVFbGVtZW50LCJ2YWx1ZSIsZCksdGhpcy52YWxpZGF0ZURhdGVSYW5nZSgpfWVsc2UgdGhpcy5yZW5kZXJlci5zZXRQcm9w'@;
put 'ZXJ0eSh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsInZhbHVlIiwiIil9Z2V0VmFsaWREYXRlVmFsdWVGcm9tRGF0ZShhKXtpZih0aGlzLmRhdGVJT1NlcnZpY2Upe2NvbnN0IGQ9dGhpcy5kYXRlSU9TZXJ2aWNlLnRvTG9jYWxlRGlzcGxheUZvcm1hdFN0cmluZyhhKTtyZXR1cm4gdGhpcy5kYXRl'@;
put 'SU9TZXJ2aWNlLmdldERhdGVWYWx1ZUZyb21EYXRlU3RyaW5nKGQpfXJldHVybiBudWxsfWVtaXREYXRlT3V0cHV0KGEpeyFmdW5jdGlvbiBtWmUoYyxsKXtyZXR1cm4gYyBpbnN0YW5jZW9mIERhdGUmJmwgaW5zdGFuY2VvZiBEYXRlJiZjLmdldEZ1bGxZZWFyKCk9PT1sLmdldEZ1bGxZZWFy'@;
put 'KCkmJmMuZ2V0TW9udGgoKT09PWwuZ2V0TW9udGgoKSYmYy5nZXREYXRlKCk9PT1sLmdldERhdGUoKX0oYSx0aGlzLnByZXZpb3VzRGF0ZUNoYW5nZSk/KHRoaXMuZGF0ZUNoYW5nZS5lbWl0KGEpLHRoaXMucHJldmlvdXNEYXRlQ2hhbmdlPWEpOiFhJiZ0aGlzLnByZXZpb3VzRGF0ZUNoYW5n'@;
put 'ZSYmKHRoaXMuZGF0ZUNoYW5nZS5lbWl0KG51bGwpLHRoaXMucHJldmlvdXNEYXRlQ2hhbmdlPW51bGwpfWxpc3RlbkZvckNvbnRyb2xWYWx1ZUNoYW5nZXMoKXtyZXR1cm4gdGhpcy5kYXRlcGlja2VySGFzRm9ybUNvbnRyb2woKT90aGlzLmNvbnRyb2wudmFsdWVDaGFuZ2VzLnBpcGUoJGwo'@;
put 'KCk9PiF0aGlzLmRhdGVwaWNrZXJGb2N1c1NlcnZpY2UuZWxlbWVudElzRm9jdXNlZCh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQpKSkuc3Vic2NyaWJlKGE9PnRoaXMudXBkYXRlRGF0ZSh0aGlzLmRhdGVJT1NlcnZpY2UuZ2V0RGF0ZVZhbHVlRnJvbURhdGVTdHJpbmcoYSkpKTpudWxsfWxpc3Rl'@;
put 'bkZvclVzZXJTZWxlY3RlZERheUNoYW5nZXMoKXtyZXR1cm4gdGhpcy51c2VyU2VsZWN0ZWREYXlDaGFuZ2Uuc3Vic2NyaWJlKGE9PnRoaXMudXBkYXRlRGF0ZShhPy50b0RhdGUoKSwhMCkpfWxpc3RlbkZvclRvdWNoQ2hhbmdlcygpe3JldHVybiB0aGlzLmRhdGVGb3JtQ29udHJvbFNlcnZp'@;
put 'Y2UudG91Y2hlZENoYW5nZS5waXBlKCRsKCgpPT50aGlzLmRhdGVwaWNrZXJIYXNGb3JtQ29udHJvbCgpKSkuc3Vic2NyaWJlKCgpPT50aGlzLmNvbnRyb2wuY29udHJvbC5tYXJrQXNUb3VjaGVkKCkpfWxpc3RlbkZvckRpcnR5Q2hhbmdlcygpe3JldHVybiB0aGlzLmRhdGVGb3JtQ29udHJv'@;
put 'bFNlcnZpY2UuZGlydHlDaGFuZ2UucGlwZSgkbCgoKT0+dGhpcy5kYXRlcGlja2VySGFzRm9ybUNvbnRyb2woKSkpLnN1YnNjcmliZSgoKT0+dGhpcy5jb250cm9sLmNvbnRyb2wubWFya0FzRGlydHkoKSl9bGlzdGVuRm9ySW5wdXRSZWZvY3VzKCl7cmV0dXJuIHRoaXMuZGF0ZU5hdmlnYXRp'@;
put 'b25TZXJ2aWNlLnNlbGVjdGVkRGF5Q2hhbmdlLnBpcGUoJGwoYT0+ISFhJiYhdGhpcy5kYXRlTmF2aWdhdGlvblNlcnZpY2UuaXNSYW5nZVBpY2tlcikpLnN1YnNjcmliZSgoKT0+dGhpcy5kYXRlcGlja2VyRm9jdXNTZXJ2aWNlLmZvY3VzSW5wdXQodGhpcy5lbC5uYXRpdmVFbGVtZW50KSl9'@;
put 'dmFsaWRhdGVEYXRlUmFuZ2UoKXtpZih0aGlzLmRhdGVOYXZpZ2F0aW9uU2VydmljZS5pc1JhbmdlUGlja2VyKXtjb25zdCBhPXRoaXMubmdDb250cm9sU2VydmljZT8uY29udHJvbCxkPXRoaXMubmdDb250cm9sU2VydmljZT8uYWRkaXRpb25hbENvbnRyb2xzO3RoaXMuZGF0ZU5hdmlnYXRp'@;
put 'b25TZXJ2aWNlLnNlbGVjdGVkRGF5Py5pc0JlZm9yZSh0aGlzLmRhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZEVuZERheSwhMCkmJihhPy5oYXNFcnJvcigicmFuZ2UiKXx8ZD8uc29tZShmPT5mLmhhc0Vycm9yKCJyYW5nZSIpKSkmJihhLmNvbnRyb2w/LnVwZGF0ZVZhbHVlQW5kVmFs'@;
put 'aWRpdHkoe2VtaXRFdmVudDohMX0pLGQuZm9yRWFjaChmPT57Zj8uY29udHJvbD8udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7ZW1pdEV2ZW50OiExfSl9KSl9fX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZShEbyksR2UoRHMpLEdlKEppKSxHZShF'@;
put 'byksR2UoZDEsMTApLEdlKENzKCgpPT5ZeCksOCksR2UoY2csOCksR2UoTWgsOCksR2UoWEwsOCksR2UoWXksOCksR2UoaW8pLEdlKFV5LDgpLEdlKFNtKSl9LGMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsaG9zdFZhcnM6Myxob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsxJmEmJkZ0KCJmb2N1'@;
put 'cyIsZnVuY3Rpb24oKXtyZXR1cm4gZC5zZXRGb2N1c1N0YXRlcygpfSkoImJsdXIiLGZ1bmN0aW9uKCl7cmV0dXJuIGQudHJpZ2dlclZhbGlkYXRpb24oKX0pKCJjaGFuZ2UiLGZ1bmN0aW9uKGYpe3JldHVybiBkLm9uVmFsdWVDaGFuZ2UoZi50YXJnZXQpfSksMiZhJiYob3AoImRpc2FibGVk'@;
put 'IixkLmRpc2FibGVkKSxocigicGxhY2Vob2xkZXIiLGQucGxhY2Vob2xkZXJUZXh0KSgidHlwZSIsZC5pbnB1dFR5cGUpKX0saW5wdXRzOntwbGFjZWhvbGRlcjoicGxhY2Vob2xkZXIiLGRpc2FibGVkOiJkaXNhYmxlZCJ9LGZlYXR1cmVzOlt3YV19KSxjfSkoKSxkZGU9KCgpPT57Y2xhc3Mg'@;
put 'YyBleHRlbmRzIG9He2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmRhdGVDaGFuZ2U9bmV3IEtyKCExKSx0aGlzLmlucHV0V2lkdGg9MTN9c2V0IGRhdGUoYSl7dGhpcy5zZXREYXRlKGEpfWdldCBpbnB1dFNpemUoKXtyZXR1cm4gdGhpcy5pbnB1dFdpZHRofWdldCB1'@;
put 'c2VyU2VsZWN0ZWREYXlDaGFuZ2UoKXtyZXR1cm4gdGhpcy5kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWRFbmREYXlDaGFuZ2V9dHJpZ2dlckNvbnRyb2xJbnB1dFZhbGlkYXRpb24oKXt0aGlzLmRhdGVwaWNrZXJIYXNGb3JtQ29udHJvbCgpJiYodGhpcy5jb250cm9sLmNvbnRyb2w/'@;
put 'LnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe2VtaXRFdmVudDohMX0pLHRoaXMuY29udHJvbC5jb250cm9sPy5zZXRFcnJvcnModGhpcy5jb250cm9sLmNvbnRyb2wuZXJyb3JzKSl9dXBkYXRlRGF5TW9kZWwoYSl7dGhpcy5kYXRlTmF2aWdhdGlvblNlcnZpY2UucGVyc2lzdGVkRW5kRGF0ZT10'@;
put 'aGlzLmRhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZEVuZERheT1hfX1yZXR1cm4gYy5cdTAyNzVmYWM9KCgpPT57bGV0IGw7cmV0dXJuIGZ1bmN0aW9uKGQpe3JldHVybihsfHwobD1ZcyhjKSkpKGR8fGMpfX0pKCksYy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwi'@;
put 'Y2xyRW5kRGF0ZSIsIiJdXSxob3N0VmFyczozLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmKGhyKCJzaXplIixkLmlucHV0U2l6ZSksVHIoImNsci1pbnB1dCIsITApKX0saW5wdXRzOntpbnB1dFdpZHRoOiJpbnB1dFdpZHRoIixkYXRlOltObi5Ob25lLCJjbHJFbmREYXRlIiwi'@;
put 'ZGF0ZSJdfSxvdXRwdXRzOntkYXRlQ2hhbmdlOiJjbHJFbmREYXRlQ2hhbmdlIn0sZmVhdHVyZXM6W2RhKFtTbV0pLHdhXX0pLGN9KSgpLEpMPSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyBvR3tjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5kYXRlQ2hhbmdlPW5ldyBLcigh'@;
put 'MSl9c2V0IGRhdGUoYSl7dGhpcy5zZXREYXRlKGEpfXNldCBtaW4oYSl7dGhpcy5kYXRlSU9TZXJ2aWNlLnNldE1pbkRhdGUoYSksdGhpcy50cmlnZ2VyQ29udHJvbFZhbGlkYXRpb24oKX1zZXQgbWF4KGEpe3RoaXMuZGF0ZUlPU2VydmljZS5zZXRNYXhEYXRlKGEpLHRoaXMudHJpZ2dlckNv'@;
put 'bnRyb2xWYWxpZGF0aW9uKCl9Z2V0IHVzZXJTZWxlY3RlZERheUNoYW5nZSgpe3JldHVybiB0aGlzLmRhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZERheUNoYW5nZX11cGRhdGVEYXlNb2RlbChhKXt0aGlzLmRhdGVOYXZpZ2F0aW9uU2VydmljZS5wZXJzaXN0ZWREYXRlPXRoaXMuZGF0'@;
put 'ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRGF5PWF9dHJpZ2dlckNvbnRyb2xWYWxpZGF0aW9uKCl7dGhpcy5kYXRlcGlja2VySGFzRm9ybUNvbnRyb2woKSYmKHRoaXMuY29udHJvbC5jb250cm9sPy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHtlbWl0RXZlbnQ6ITF9KSx0aGlzLmNvbnRy'@;
put 'b2wuY29udHJvbD8uc2V0RXJyb3JzKHRoaXMuY29udHJvbC5jb250cm9sLmVycm9ycykpfX1yZXR1cm4gYy5cdTAyNzVmYWM9KCgpPT57bGV0IGw7cmV0dXJuIGZ1bmN0aW9uKGQpe3JldHVybihsfHwobD1ZcyhjKSkpKGR8fGMpfX0pKCksYy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxlY3Rv'@;
put 'cnM6W1siIiwiY2xyRGF0ZSIsIiJdXSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmVHIoImNsci1pbnB1dCIsITApfSxpbnB1dHM6e2RhdGU6W05uLk5vbmUsImNsckRhdGUiLCJkYXRlIl0sbWluOiJtaW4iLG1heDoibWF4In0sb3V0cHV0czp7ZGF0ZUNoYW5n'@;
put 'ZToiY2xyRGF0ZUNoYW5nZSJ9LGZlYXR1cmVzOltkYShbU21dKSx3YV19KSxjfSkoKSxoZGU9KCgpPT57Y2xhc3MgYyBleHRlbmRzIG9He2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmRhdGVDaGFuZ2U9bmV3IEtyKCExKSx0aGlzLmlucHV0V2lkdGg9MTN9c2V0IGRh'@;
put 'dGUoYSl7dGhpcy5zZXREYXRlKGEpfWdldCBpbnB1dFNpemUoKXtyZXR1cm4gdGhpcy5pbnB1dFdpZHRofWdldCB1c2VyU2VsZWN0ZWREYXlDaGFuZ2UoKXtyZXR1cm4gdGhpcy5kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWREYXlDaGFuZ2V9dHJpZ2dlckNvbnRyb2xJbnB1dFZhbGlk'@;
put 'YXRpb24oKXt0aGlzLmRhdGVwaWNrZXJIYXNGb3JtQ29udHJvbCgpJiYodGhpcy5jb250cm9sLmNvbnRyb2w/LnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe2VtaXRFdmVudDohMX0pLHRoaXMuY29udHJvbC5jb250cm9sPy5zZXRFcnJvcnModGhpcy5jb250cm9sLmNvbnRyb2wuZXJyb3JzKSl9'@;
put 'dXBkYXRlRGF5TW9kZWwoYSl7dGhpcy5kYXRlTmF2aWdhdGlvblNlcnZpY2UucGVyc2lzdGVkRGF0ZT10aGlzLmRhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZERheT1hfX1yZXR1cm4gYy5cdTAyNzVmYWM9KCgpPT57bGV0IGw7cmV0dXJuIGZ1bmN0aW9uKGQpe3JldHVybihsfHwobD1Z'@;
put 'cyhjKSkpKGR8fGMpfX0pKCksYy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwiY2xyU3RhcnREYXRlIiwiIl1dLGhvc3RWYXJzOjUsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiYoaHIoInNpemUiLGQuaW5wdXRTaXplKSxfZCgidGV4dC1hbGlnbiIsInJpZ2h0'@;
put 'IiksVHIoImNsci1pbnB1dCIsITApKX0saW5wdXRzOntpbnB1dFdpZHRoOiJpbnB1dFdpZHRoIixkYXRlOltObi5Ob25lLCJjbHJTdGFydERhdGUiLCJkYXRlIl19LG91dHB1dHM6e2RhdGVDaGFuZ2U6ImNsclN0YXJ0RGF0ZUNoYW5nZSJ9LGZlYXR1cmVzOltkYShbU21dKSx3YV19KSxjfSko'@;
put 'KSxHeT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5wb3NpdGlvbj1UZFsiYm90dG9tLWxlZnQiXSx0aGlzLl9jdXJyZW50Vmlldz0iREFZVklFVyJ9Z2V0IGlzRGF5Vmlldygpe3JldHVybiJEQVlWSUVXIj09PXRoaXMuX2N1cnJlbnRWaWV3fWdldCBpc1llYXJWaWV3KCl7cmV0'@;
put 'dXJuIllFQVJWSUVXIj09PXRoaXMuX2N1cnJlbnRWaWV3fWdldCBpc01vbnRoVmlldygpe3JldHVybiJNT05USFZJRVciPT09dGhpcy5fY3VycmVudFZpZXd9Y2hhbmdlVG9Nb250aFZpZXcoKXt0aGlzLl9jdXJyZW50Vmlldz0iTU9OVEhWSUVXIn1jaGFuZ2VUb1llYXJWaWV3KCl7dGhpcy5f'@;
put 'Y3VycmVudFZpZXc9IllFQVJWSUVXIn1jaGFuZ2VUb0RheVZpZXcoKXt0aGlzLl9jdXJyZW50Vmlldz0iREFZVklFVyJ9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30p'@;
put 'LGN9KSgpLGZkZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYsdixNKXt0aGlzLl9sb2NhbGVIZWxwZXJTZXJ2aWNlPWEsdGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlPWQsdGhpcy5fZGF0ZXBpY2tlckZvY3VzU2VydmljZT1oLHRoaXMuX2VsUmVmPWYsdGhpcy5fdmlld01h'@;
put 'bmFnZXJTZXJ2aWNlPXYsdGhpcy5jb21tb25TdHJpbmdzPU0sdGhpcy5fZm9jdXNlZE1vbnRoSW5kZXg9dGhpcy5jYWxlbmRhck1vbnRoSW5kZXh9Z2V0IG1vbnRoTmFtZXMoKXtyZXR1cm4gdGhpcy5fbG9jYWxlSGVscGVyU2VydmljZS5sb2NhbGVNb250aHNXaWRlfWdldCBjYWxlbmRhck1v'@;
put 'bnRoSW5kZXgoKXtyZXR1cm4gdGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmRpc3BsYXllZENhbGVuZGFyLm1vbnRofWdldCBjYWxlbmRhckVuZE1vbnRoSW5kZXgoKXtyZXR1cm4gdGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRW5kRGF5Py5tb250aH1nZXQgeWVhckF0'@;
put 'dHJTdHJpbmcoKXtyZXR1cm4gdGhpcy5jb21tb25TdHJpbmdzLnBhcnNlKHRoaXMuY29tbW9uU3RyaW5ncy5rZXlzLmRhdGVwaWNrZXJTZWxlY3RZZWFyVGV4dCx7Q0FMRU5EQVJfWUVBUjp0aGlzLmNhbGVuZGFyWWVhci50b1N0cmluZygpfSl9Z2V0IGNhbGVuZGFyWWVhcigpe3JldHVybiB0'@;
put 'aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UuZGlzcGxheWVkQ2FsZW5kYXIueWVhcn1nZXQgY3VycmVudENhbGVuZGFyWWVhcigpe3JldHVybihuZXcgRGF0ZSkuZ2V0RnVsbFllYXIoKX1nZXQgY3VycmVudENhbGVuZGFyTW9udGgoKXtyZXR1cm4obmV3IERhdGUpLmdldE1vbnRoKCl9Z2V0'@;
put 'SXNSYW5nZVN0YXJ0TW9udGgoYSl7cmV0dXJuIHRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5pc1JhbmdlUGlja2VyJiZ0aGlzLmNhbGVuZGFyWWVhcj09PXRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZERheT8ueWVhciYmYT09PXRoaXMuX2RhdGVOYXZpZ2F0aW9uU2Vy'@;
put 'dmljZS5zZWxlY3RlZERheT8ubW9udGh9Z2V0SXNSYW5nZUVuZE1vbnRoKGEpe3JldHVybiB0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UuaXNSYW5nZVBpY2tlciYmdGhpcy5jYWxlbmRhclllYXI9PT10aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWRFbmREYXk/LnllYXIm'@;
put 'JmE9PT10aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWRFbmREYXk/Lm1vbnRofWNoYW5nZVRvWWVhclZpZXcoKXt0aGlzLl92aWV3TWFuYWdlclNlcnZpY2UuY2hhbmdlVG9ZZWFyVmlldygpfW5nQWZ0ZXJWaWV3SW5pdCgpe3RoaXMuX2RhdGVwaWNrZXJGb2N1c1NlcnZpY2Uu'@;
put 'Zm9jdXNDZWxsKHRoaXMuX2VsUmVmKX1vbktleURvd24oYSl7aWYoYSl7Y29uc3QgZD1JMihhLmtleSk7ZD09PWdhLkFycm93VXAmJnRoaXMuX2ZvY3VzZWRNb250aEluZGV4PjE/KGEucHJldmVudERlZmF1bHQoKSx0aGlzLl9mb2N1c2VkTW9udGhJbmRleC09Mix0aGlzLl9kYXRlcGlja2Vy'@;
put 'Rm9jdXNTZXJ2aWNlLmZvY3VzQ2VsbCh0aGlzLl9lbFJlZikpOmQ9PT1nYS5BcnJvd0Rvd24mJnRoaXMuX2ZvY3VzZWRNb250aEluZGV4PDEwPyhhLnByZXZlbnREZWZhdWx0KCksdGhpcy5fZm9jdXNlZE1vbnRoSW5kZXgrPTIsdGhpcy5fZGF0ZXBpY2tlckZvY3VzU2VydmljZS5mb2N1c0Nl'@;
put 'bGwodGhpcy5fZWxSZWYpKTpkPT09Z2EuQXJyb3dSaWdodCYmdGhpcy5fZm9jdXNlZE1vbnRoSW5kZXg8MTE/KGEucHJldmVudERlZmF1bHQoKSx0aGlzLl9mb2N1c2VkTW9udGhJbmRleCsrLHRoaXMuX2RhdGVwaWNrZXJGb2N1c1NlcnZpY2UuZm9jdXNDZWxsKHRoaXMuX2VsUmVmKSk6ZD09'@;
put 'PWdhLkFycm93TGVmdCYmdGhpcy5fZm9jdXNlZE1vbnRoSW5kZXg+MCYmKGEucHJldmVudERlZmF1bHQoKSx0aGlzLl9mb2N1c2VkTW9udGhJbmRleC0tLHRoaXMuX2RhdGVwaWNrZXJGb2N1c1NlcnZpY2UuZm9jdXNDZWxsKHRoaXMuX2VsUmVmKSl9fWlzU2VsZWN0ZWQoYSl7cmV0dXJuIHRo'@;
put 'aXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZERheT8ueWVhcj09PXRoaXMuY2FsZW5kYXJZZWFyJiZhPT09dGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRGF5Py5tb250aHx8dGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRW5kRGF5Py55ZWFy'@;
put 'PT09dGhpcy5jYWxlbmRhclllYXImJmE9PT10aGlzLmNhbGVuZGFyRW5kTW9udGhJbmRleH1vbkhvdmVyKGEpe3RoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5ob3ZlcmVkTW9udGg9YX1jaGFuZ2VNb250aChhKXt0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UuY2hhbmdlTW9udGgoYSks'@;
put 'dGhpcy5fdmlld01hbmFnZXJTZXJ2aWNlLmNoYW5nZVRvRGF5VmlldygpfWdldFRhYkluZGV4KGEpe3JldHVybiBhPT09dGhpcy5fZm9jdXNlZE1vbnRoSW5kZXg/MDotMX1uZXh0WWVhcigpe3RoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5tb3ZlVG9OZXh0WWVhcigpfXByZXZpb3VzWWVh'@;
put 'cigpe3RoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5tb3ZlVG9QcmV2aW91c1llYXIoKX1jdXJyZW50WWVhcigpe3RoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5tb3ZlVG9DdXJyZW50TW9udGgoKX1pc0luUmFuZ2UoYSl7cmV0dXJuISF0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2Uu'@;
put 'aXNSYW5nZVBpY2tlciYmKHRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZERheSYmdGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRW5kRGF5P3RoaXMuY2FsZW5kYXJZZWFyPT09dGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRGF5LnllYXIm'@;
put 'JmE+dGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRGF5Lm1vbnRoJiZ0aGlzLmNhbGVuZGFyWWVhcj09PXRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZEVuZERheS55ZWFyJiZhPHRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZEVuZERheS5t'@;
put 'b250aHx8dGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRGF5LnllYXIhPT10aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWRFbmREYXkueWVhciYmdGhpcy5jYWxlbmRhclllYXI9PT10aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWREYXkueWVh'@;
put 'ciYmYT50aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWREYXkubW9udGh8fHRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZERheS55ZWFyIT09dGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRW5kRGF5LnllYXImJnRoaXMuY2FsZW5kYXJZZWFy'@;
put 'PT09dGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRW5kRGF5LnllYXImJmE8dGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRW5kRGF5Lm1vbnRofHx0aGlzLmNhbGVuZGFyWWVhcj50aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWREYXkueWVh'@;
put 'ciYmdGhpcy5jYWxlbmRhclllYXI8dGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRW5kRGF5LnllYXI6ISghdGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRGF5fHx0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWRFbmREYXkpJiYodGhpcy5j'@;
put 'YWxlbmRhclllYXI9PT10aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWREYXkueWVhciYmYT50aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWREYXkubW9udGgmJmE8dGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmhvdmVyZWRNb250aHx8dGhpcy5jYWxlbmRh'@;
put 'clllYXI+dGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRGF5LnllYXImJmE8dGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmhvdmVyZWRNb250aCkpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZShaeCksR2UoTWgpLEdlKFNt'@;
put 'KSxHZShKaSksR2UoR3kpLEdlKGlzKSl9LGMuXHUwMjc1Y21wPVZyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1tb250aHBpY2tlciJdXSxob3N0QXR0cnM6WyJyb2xlIiwiYXBwbGljYXRpb24iXSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezEmYSYmRnQoImtleWRv'@;
put 'd24iLGZ1bmN0aW9uKGYpe3JldHVybiBkLm9uS2V5RG93bihmKX0pLDImYSYmVHIoIm1vbnRocGlja2VyIiwhMCl9LGRlY2xzOjEzLHZhcnM6MTAsY29uc3RzOltbMSwiY2FsZW5kYXItaGVhZGVyIiwiaW4tbW9udGhwaWNrZXIiXSxbMSwieWVhci12aWV3LXN3aXRjaGVyIl0sWyJ0eXBlIiwi'@;
put 'YnV0dG9uIiwxLCJjYWxlbmRhci1idG4iLCJ5ZWFycGlja2VyLXRyaWdnZXIiLDMsImNsaWNrIl0sWzEsImNhbGVuZGFyLXN3aXRjaGVycyJdLFsidHlwZSIsImJ1dHRvbiIsMSwiY2FsZW5kYXItYnRuIiwic3dpdGNoZXIiLDMsImNsaWNrIl0sWyJzaGFwZSIsImFuZ2xlIiwiZGlyZWN0aW9u'@;
put 'IiwibGVmdCJdLFsic2hhcGUiLCJldmVudCJdLFsic2hhcGUiLCJhbmdsZSIsImRpcmVjdGlvbiIsInJpZ2h0Il0sWzEsIm1vbnRocyJdLFsidHlwZSIsImJ1dHRvbiIsImNsYXNzIiwiY2FsZW5kYXItYnRuIG1vbnRoIiwzLCJpcy1zZWxlY3RlZCIsImlzLXN0YXJ0LXJhbmdlIiwiaXMtZW5k'@;
put 'LXJhbmdlIiwiaW4tcmFuZ2UiLCJpcy10b2RheSIsImNsaWNrIiwibW91c2VlbnRlciIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJjYWxlbmRhci1idG4iLCJtb250aCIsMywiY2xpY2siLCJtb3VzZWVudGVyIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZh'@;
put 'JiYoZGUoMCwiZGl2IiwwKSgxLCJkaXYiLDEpKDIsImJ1dHRvbiIsMiksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBkLmNoYW5nZVRvWWVhclZpZXcoKX0pLExlKDMpLGhlKCkoKSxkZSg0LCJkaXYiLDMpKDUsImJ1dHRvbiIsNCksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBk'@;
put 'LnByZXZpb3VzWWVhcigpfSksR3QoNiwiY2RzLWljb24iLDUpLGhlKCksZGUoNywiYnV0dG9uIiw0KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGQuY3VycmVudFllYXIoKX0pLEd0KDgsImNkcy1pY29uIiw2KSxoZSgpLGRlKDksImJ1dHRvbiIsNCksRnQoImNsaWNrIixmdW5jdGlv'@;
put 'bigpe3JldHVybiBkLm5leHRZZWFyKCl9KSxHdCgxMCwiY2RzLWljb24iLDcpLGhlKCkoKSgpLGRlKDExLCJkaXYiLDgpLGd0KDEyLEROZSwyLDEyLCJidXR0b24iLDkpLGhlKCkpLDImYSYmKGZlKDIpLGhyKCJhcmlhLWxhYmVsIixkLnllYXJBdHRyU3RyaW5nKSgidGl0bGUiLGQueWVhckF0'@;
put 'dHJTdHJpbmcpLGZlKCksRHIoIiAiLGQuY2FsZW5kYXJZZWFyLCIgIiksZmUoMiksaHIoImFyaWEtbGFiZWwiLGQuY29tbW9uU3RyaW5ncy5rZXlzLmRhdGVwaWNrZXJQcmV2aW91c01vbnRoKSxmZSgpLGhyKCJ0aXRsZSIsZC5jb21tb25TdHJpbmdzLmtleXMuZGF0ZXBpY2tlclByZXZpb3Vz'@;
put 'TW9udGgpLGZlKCksaHIoImFyaWEtbGFiZWwiLGQuY29tbW9uU3RyaW5ncy5rZXlzLmRhdGVwaWNrZXJDdXJyZW50TW9udGgpLGZlKCksaHIoInRpdGxlIixkLmNvbW1vblN0cmluZ3Mua2V5cy5kYXRlcGlja2VyQ3VycmVudE1vbnRoKSxmZSgpLGhyKCJhcmlhLWxhYmVsIixkLmNvbW1vblN0'@;
put 'cmluZ3Mua2V5cy5kYXRlcGlja2VyTmV4dE1vbnRoKSxmZSgpLGhyKCJ0aXRsZSIsZC5jb21tb25TdHJpbmdzLmtleXMuZGF0ZXBpY2tlck5leHRNb250aCksZmUoMiksTWUoIm5nRm9yT2YiLGQubW9udGhOYW1lcykpfSxkZXBlbmRlbmNpZXM6W25zLHJzXSxlbmNhcHN1bGF0aW9uOjJ9KSxj'@;
put 'fSkoKTtjbGFzcyBXeHtjb25zdHJ1Y3RvcihsKXt0aGlzLnllYXI9bCx0aGlzLnllYXJSYW5nZT1bXSx0aGlzLmdlbmVyYXRlWWVhclJhbmdlKCl9Z2V0IG1pZGRsZVllYXIoKXtyZXR1cm4gdGhpcy55ZWFyUmFuZ2VbTWF0aC5mbG9vcih0aGlzLnllYXJSYW5nZS5sZW5ndGgvMildfW5leHRE'@;
put 'ZWNhZGUoKXtyZXR1cm4gbmV3IFd4KHRoaXMueWVhcisxMCl9cHJldmlvdXNEZWNhZGUoKXtyZXR1cm4gbmV3IFd4KHRoaXMueWVhci0xMCl9Y3VycmVudERlY2FkZSgpe3JldHVybiBuZXcgV3goKG5ldyBEYXRlKS5nZXRGdWxsWWVhcigpKX1pblJhbmdlKGwpe3JldHVybiB0aGlzLnllYXJS'@;
put 'YW5nZS5pbmRleE9mKGwpPi0xfWdlbmVyYXRlWWVhclJhbmdlKCl7Y29uc3QgYT10aGlzLnllYXItdGhpcy55ZWFyJTEwO3RoaXMueWVhclJhbmdlPXRoaXMuZ2VuZXJhdGVSYW5nZShhLGErMTApfWdlbmVyYXRlUmFuZ2UobCxhKXtyZXR1cm4gQXJyYXkuZnJvbSh7bGVuZ3RoOmEtbH0sKGQs'@;
put 'aCk9PmgrbCl9fWxldCBnZGU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmLHYpe3RoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZT1hLHRoaXMuX3ZpZXdNYW5hZ2VyU2VydmljZT1kLHRoaXMuX2RhdGVwaWNrZXJGb2N1c1NlcnZpY2U9aCx0aGlzLl9lbFJlZj1mLHRoaXMuY29t'@;
put 'bW9uU3RyaW5ncz12LHRoaXMueWVhclJhbmdlTW9kZWw9bmV3IFd4KHRoaXMuY2FsZW5kYXJZZWFyKSx0aGlzLl9mb2N1c2VkWWVhcj10aGlzLmNhbGVuZGFyWWVhcn1nZXQgc2VsZWN0ZWRTdGFydFllYXIoKXtyZXR1cm4gdGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRGF5'@;
put 'Py55ZWFyfWdldCBzZWxlY3RlZEVuZFllYXIoKXtyZXR1cm4gdGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRW5kRGF5Py55ZWFyfWdldCBjYWxlbmRhclllYXIoKXtyZXR1cm4gdGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmRpc3BsYXllZENhbGVuZGFyLnllYXJ9aXND'@;
put 'dXJyZW50Q2FsZW5kYXJZZWFyKGEpe3JldHVybiBhPT09KG5ldyBEYXRlKS5nZXRGdWxsWWVhcigpfWdldElzUmFuZ2VTdGFydFllYXIoYSl7cmV0dXJuIHRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5pc1JhbmdlUGlja2VyJiZhPT09dGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNl'@;
put 'bGVjdGVkRGF5Py55ZWFyfWdldElzUmFuZ2VFbmRZZWFyKGEpe3JldHVybiB0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UuaXNSYW5nZVBpY2tlciYmYT09PXRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZEVuZERheT8ueWVhcn1uZ0FmdGVyVmlld0luaXQoKXt0aGlzLl9k'@;
put 'YXRlcGlja2VyRm9jdXNTZXJ2aWNlLmZvY3VzQ2VsbCh0aGlzLl9lbFJlZil9b25LZXlEb3duKGEpe2lmKGEpe2NvbnN0IGQ9STIoYS5rZXkpO2Q9PT1nYS5BcnJvd1VwPyhhLnByZXZlbnREZWZhdWx0KCksdGhpcy5pbmNyZW1lbnRGb2N1c1llYXJCeSgtMikpOmQ9PT1nYS5BcnJvd0Rvd24/'@;
put 'KGEucHJldmVudERlZmF1bHQoKSx0aGlzLmluY3JlbWVudEZvY3VzWWVhckJ5KDIpKTpkPT09Z2EuQXJyb3dSaWdodD8oYS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuaW5jcmVtZW50Rm9jdXNZZWFyQnkoMSkpOmQ9PT1nYS5BcnJvd0xlZnQmJihhLnByZXZlbnREZWZhdWx0KCksdGhpcy5pbmNy'@;
put 'ZW1lbnRGb2N1c1llYXJCeSgtMSkpfX1jaGFuZ2VZZWFyKGEpe3RoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5jaGFuZ2VZZWFyKGEpLHRoaXMuX3ZpZXdNYW5hZ2VyU2VydmljZS5jaGFuZ2VUb0RheVZpZXcoKX1vbkhvdmVyKGEpe3RoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5ob3Zl'@;
put 'cmVkWWVhcj1hfXByZXZpb3VzRGVjYWRlKCl7dGhpcy55ZWFyUmFuZ2VNb2RlbD10aGlzLnllYXJSYW5nZU1vZGVsLnByZXZpb3VzRGVjYWRlKCl9Y3VycmVudERlY2FkZSgpe3RoaXMueWVhclJhbmdlTW9kZWwuaW5SYW5nZSh0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UudG9kYXkueWVh'@;
put 'cil8fCh0aGlzLnllYXJSYW5nZU1vZGVsPXRoaXMueWVhclJhbmdlTW9kZWwuY3VycmVudERlY2FkZSgpKSx0aGlzLl9kYXRlcGlja2VyRm9jdXNTZXJ2aWNlLmZvY3VzQ2VsbCh0aGlzLl9lbFJlZil9bmV4dERlY2FkZSgpe3RoaXMueWVhclJhbmdlTW9kZWw9dGhpcy55ZWFyUmFuZ2VNb2Rl'@;
put 'bC5uZXh0RGVjYWRlKCl9Z2V0VGFiSW5kZXgoYSl7cmV0dXJuIHRoaXMueWVhclJhbmdlTW9kZWwuaW5SYW5nZSh0aGlzLl9mb2N1c2VkWWVhcil8fCh0aGlzLl9mb2N1c2VkWWVhcj10aGlzLnllYXJSYW5nZU1vZGVsLmluUmFuZ2UodGhpcy5jYWxlbmRhclllYXIpP3RoaXMuY2FsZW5kYXJZ'@;
put 'ZWFyOnRoaXMueWVhclJhbmdlTW9kZWwuaW5SYW5nZSh0aGlzLnNlbGVjdGVkRW5kWWVhcik/dGhpcy5zZWxlY3RlZEVuZFllYXI6dGhpcy55ZWFyUmFuZ2VNb2RlbC5taWRkbGVZZWFyKSx0aGlzLl9mb2N1c2VkWWVhcj09PWE/MDotMX1pc0luUmFuZ2UoYSl7cmV0dXJuISF0aGlzLl9kYXRl'@;
put 'TmF2aWdhdGlvblNlcnZpY2UuaXNSYW5nZVBpY2tlciYmKHRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZERheT8ueWVhciYmdGhpcy5zZWxlY3RlZEVuZFllYXI/YT50aGlzLnNlbGVjdGVkU3RhcnRZZWFyJiZhPHRoaXMuc2VsZWN0ZWRFbmRZZWFyOiEoIXRoaXMuX2RhdGVO'@;
put 'YXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZERheT8ueWVhcnx8dGhpcy5zZWxlY3RlZEVuZFllYXIpJiZhPnRoaXMuc2VsZWN0ZWRTdGFydFllYXImJmE8dGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmhvdmVyZWRZZWFyKX1jaGFuZ2VUb0RheVZpZXcoKXt0aGlzLl92aWV3TWFuYWdlclNl'@;
put 'cnZpY2UuY2hhbmdlVG9EYXlWaWV3KCl9aW5jcmVtZW50Rm9jdXNZZWFyQnkoYSl7dGhpcy5fZm9jdXNlZFllYXI9dGhpcy5fZm9jdXNlZFllYXIrYSx0aGlzLnllYXJSYW5nZU1vZGVsLmluUmFuZ2UodGhpcy5fZm9jdXNlZFllYXIpfHwodGhpcy55ZWFyUmFuZ2VNb2RlbD1hPjA/dGhpcy55'@;
put 'ZWFyUmFuZ2VNb2RlbC5uZXh0RGVjYWRlKCk6dGhpcy55ZWFyUmFuZ2VNb2RlbC5wcmV2aW91c0RlY2FkZSgpKSx0aGlzLl9kYXRlcGlja2VyRm9jdXNTZXJ2aWNlLmZvY3VzQ2VsbCh0aGlzLl9lbFJlZil9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMp'@;
put 'KEdlKE1oKSxHZShHeSksR2UoU20pLEdlKEppKSxHZShpcykpfSxjLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHIteWVhcnBpY2tlciJdXSxob3N0QXR0cnM6WyJyb2xlIiwiYXBwbGljYXRpb24iXSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezEm'@;
put 'YSYmRnQoImtleWRvd24iLGZ1bmN0aW9uKGYpe3JldHVybiBkLm9uS2V5RG93bihmKX0pLDImYSYmVHIoInllYXJwaWNrZXIiLCEwKX0sZGVjbHM6MTMsdmFyczo5LGNvbnN0czpbWzEsImNhbGVuZGFyLWhlYWRlciJdLFsxLCJjYWxlbmRhci1waWNrZXJzIl0sWyJ0eXBlIiwiYnV0dG9uIiwx'@;
put 'LCJjYWxlbmRhci1idG4iLCJ5ZWFycGlja2VyLXRyaWdnZXIiLCJ5ZWFyLXJhbmdlIiwzLCJjbGljayJdLFsxLCJ5ZWFyLXN3aXRjaGVycyJdLFsidHlwZSIsImJ1dHRvbiIsMSwiY2FsZW5kYXItYnRuIiwic3dpdGNoZXIiLDMsImNsaWNrIl0sWyJzaGFwZSIsImFuZ2xlIiwiZGlyZWN0aW9u'@;
put 'IiwibGVmdCJdLFsic2hhcGUiLCJldmVudCJdLFsic2hhcGUiLCJhbmdsZSIsImRpcmVjdGlvbiIsInJpZ2h0Il0sWzEsInllYXJzIl0sWyJ0eXBlIiwiYnV0dG9uIiwiY2xhc3MiLCJjYWxlbmRhci1idG4geWVhciIsMywiaXMtc2VsZWN0ZWQiLCJpcy1zdGFydC1yYW5nZSIsImlzLWVuZC1y'@;
put 'YW5nZSIsImluLXJhbmdlIiwiaXMtdG9kYXkiLCJjbGljayIsIm1vdXNlZW50ZXIiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsidHlwZSIsImJ1dHRvbiIsMSwiY2FsZW5kYXItYnRuIiwieWVhciIsMywiY2xpY2siLCJtb3VzZWVudGVyIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYo'@;
put 'ZGUoMCwiZGl2IiwwKSgxLCJkaXYiLDEpKDIsImJ1dHRvbiIsMiksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBkLmNoYW5nZVRvRGF5VmlldygpfSksTGUoMyksaGUoKSgpLGRlKDQsImRpdiIsMykoNSwiYnV0dG9uIiw0KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGQucHJl'@;
put 'dmlvdXNEZWNhZGUoKX0pLEd0KDYsImNkcy1pY29uIiw1KSxoZSgpLGRlKDcsImJ1dHRvbiIsNCksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBkLmN1cnJlbnREZWNhZGUoKX0pLEd0KDgsImNkcy1pY29uIiw2KSxoZSgpLGRlKDksImJ1dHRvbiIsNCksRnQoImNsaWNrIixmdW5jdGlv'@;
put 'bigpe3JldHVybiBkLm5leHREZWNhZGUoKX0pLEd0KDEwLCJjZHMtaWNvbiIsNyksaGUoKSgpKCksZGUoMTEsImRpdiIsOCksZ3QoMTIsSU5lLDIsMTIsImJ1dHRvbiIsOSksaGUoKSksMiZhJiYoZmUoMyksVXUoIiAiLGQueWVhclJhbmdlTW9kZWwueWVhclJhbmdlWzBdLCIgLSAiLGQueWVh'@;
put 'clJhbmdlTW9kZWwueWVhclJhbmdlW2QueWVhclJhbmdlTW9kZWwueWVhclJhbmdlLmxlbmd0aC0xXSwiICIpLGZlKDIpLGhyKCJhcmlhLWxhYmVsIixkLmNvbW1vblN0cmluZ3Mua2V5cy5kYXRlcGlja2VyUHJldmlvdXNEZWNhZGUpLGZlKCksaHIoInRpdGxlIixkLmNvbW1vblN0cmluZ3Mu'@;
put 'a2V5cy5kYXRlcGlja2VyUHJldmlvdXNEZWNhZGUpLGZlKCksaHIoImFyaWEtbGFiZWwiLGQuY29tbW9uU3RyaW5ncy5rZXlzLmRhdGVwaWNrZXJDdXJyZW50RGVjYWRlKSxmZSgpLGhyKCJ0aXRsZSIsZC5jb21tb25TdHJpbmdzLmtleXMuZGF0ZXBpY2tlckN1cnJlbnREZWNhZGUpLGZlKCks'@;
put 'aHIoImFyaWEtbGFiZWwiLGQuY29tbW9uU3RyaW5ncy5rZXlzLmRhdGVwaWNrZXJOZXh0RGVjYWRlKSxmZSgpLGhyKCJ0aXRsZSIsZC5jb21tb25TdHJpbmdzLmtleXMuZGF0ZXBpY2tlck5leHREZWNhZGUpLGZlKDIpLE1lKCJuZ0Zvck9mIixkLnllYXJSYW5nZU1vZGVsLnllYXJSYW5nZSkp'@;
put 'fSxkZXBlbmRlbmNpZXM6W25zLHJzXSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxtZGU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmKXt0aGlzLl92aWV3TWFuYWdlclNlcnZpY2U9YSx0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2U9ZCx0aGlzLl9sb2NhbGVIZWxwZXJTZXJ2'@;
put 'aWNlPWgsdGhpcy5jb21tb25TdHJpbmdzPWZ9Z2V0IG1vbnRoQXR0clN0cmluZygpe3JldHVybiB0aGlzLmNvbW1vblN0cmluZ3MucGFyc2UodGhpcy5jb21tb25TdHJpbmdzLmtleXMuZGF0ZXBpY2tlclNlbGVjdE1vbnRoVGV4dCx7Q0FMRU5EQVJfTU9OVEg6dGhpcy5jYWxlbmRhck1vbnRo'@;
put 'fSl9Z2V0IHllYXJBdHRyU3RyaW5nKCl7cmV0dXJuIHRoaXMuY29tbW9uU3RyaW5ncy5wYXJzZSh0aGlzLmNvbW1vblN0cmluZ3Mua2V5cy5kYXRlcGlja2VyU2VsZWN0WWVhclRleHQse0NBTEVOREFSX1lFQVI6dGhpcy5jYWxlbmRhclllYXIudG9TdHJpbmcoKX0pfWdldCBjYWxlbmRhck1v'@;
put 'bnRoKCl7cmV0dXJuIHRoaXMuX2xvY2FsZUhlbHBlclNlcnZpY2UubG9jYWxlTW9udGhzQWJicmV2aWF0ZWRbdGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmRpc3BsYXllZENhbGVuZGFyLm1vbnRoXX1nZXQgY2FsZW5kYXJZZWFyKCl7cmV0dXJuIHRoaXMuX2RhdGVOYXZpZ2F0aW9uU2Vy'@;
put 'dmljZS5kaXNwbGF5ZWRDYWxlbmRhci55ZWFyfWNoYW5nZVRvTW9udGhWaWV3KCl7dGhpcy5fdmlld01hbmFnZXJTZXJ2aWNlLmNoYW5nZVRvTW9udGhWaWV3KCl9Y2hhbmdlVG9ZZWFyVmlldygpe3RoaXMuX3ZpZXdNYW5hZ2VyU2VydmljZS5jaGFuZ2VUb1llYXJWaWV3KCl9bmV4dE1vbnRo'@;
put 'KCl7dGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLm1vdmVUb05leHRNb250aCgpfXByZXZpb3VzTW9udGgoKXt0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UubW92ZVRvUHJldmlvdXNNb250aCgpfWN1cnJlbnRNb250aCgpe3RoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5tb3ZlVG9D'@;
put 'dXJyZW50TW9udGgoKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2UoR3kpLEdlKE1oKSxHZShaeCksR2UoaXMpKX0sYy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWRheXBpY2tlciJdXSxob3N0QXR0cnM6WyJyb2xlIiwi'@;
put 'YXBwbGljYXRpb24iXSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmVHIoImRheXBpY2tlciIsITApfSxkZWNsczoxOCx2YXJzOjE0LGNvbnN0czpbWzEsImNsci1zci1vbmx5Il0sWzEsImNhbGVuZGFyLWhlYWRlciJdLFsxLCJjYWxlbmRhci1waWNrZXJzIl0s'@;
put 'WyJ0eXBlIiwiYnV0dG9uIiwxLCJjYWxlbmRhci1idG4iLCJtb250aHBpY2tlci10cmlnZ2VyIiwzLCJjbGljayJdLFsidHlwZSIsImJ1dHRvbiIsMSwiY2FsZW5kYXItYnRuIiwieWVhcnBpY2tlci10cmlnZ2VyIiwzLCJjbGljayJdLFsxLCJjYWxlbmRhci1zd2l0Y2hlcnMiXSxbInR5cGUi'@;
put 'LCJidXR0b24iLDEsImNhbGVuZGFyLWJ0biIsInN3aXRjaGVyIiwzLCJjbGljayJdLFsic2hhcGUiLCJhbmdsZSIsImRpcmVjdGlvbiIsImxlZnQiXSxbInNoYXBlIiwiZXZlbnQiXSxbInNoYXBlIiwiYW5nbGUiLCJkaXJlY3Rpb24iLCJyaWdodCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQp'@;
put 'ezEmYSYmKGRlKDAsImRpdiIsMCksTGUoMSksaGUoKSxkZSgyLCJkaXYiLDEpKDMsImRpdiIsMikoNCwiYnV0dG9uIiwzKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGQuY2hhbmdlVG9Nb250aFZpZXcoKX0pLExlKDUpLGhlKCksZGUoNiwiYnV0dG9uIiw0KSxGdCgiY2xpY2siLGZ1'@;
put 'bmN0aW9uKCl7cmV0dXJuIGQuY2hhbmdlVG9ZZWFyVmlldygpfSksTGUoNyksaGUoKSgpLGRlKDgsImRpdiIsNSkoOSwiYnV0dG9uIiw2KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGQucHJldmlvdXNNb250aCgpfSksR3QoMTAsImNkcy1pY29uIiw3KSxoZSgpLGRlKDExLCJidXR0'@;
put 'b24iLDYpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZC5jdXJyZW50TW9udGgoKX0pLEd0KDEyLCJjZHMtaWNvbiIsOCksaGUoKSxkZSgxMywiYnV0dG9uIiw2KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGQubmV4dE1vbnRoKCl9KSxHdCgxNCwiY2RzLWljb24iLDkpLGhl'@;
put 'KCkoKSgpLEd0KDE1LCJjbHItY2FsZW5kYXIiKSxkZSgxNiwiZGl2IiwwKSxMZSgxNyksaGUoKSksMiZhJiYoZmUoKSx3cihkLmNvbW1vblN0cmluZ3Mua2V5cy5tb2RhbENvbnRlbnRTdGFydCksZmUoMyksaHIoImFyaWEtbGFiZWwiLGQubW9udGhBdHRyU3RyaW5nKSgidGl0bGUiLGQubW9u'@;
put 'dGhBdHRyU3RyaW5nKSxmZSgpLERyKCIgIixkLmNhbGVuZGFyTW9udGgsIiAiKSxmZSgpLGhyKCJhcmlhLWxhYmVsIixkLnllYXJBdHRyU3RyaW5nKSgidGl0bGUiLGQueWVhckF0dHJTdHJpbmcpLGZlKCksRHIoIiAiLGQuY2FsZW5kYXJZZWFyLCIgIiksZmUoMiksaHIoImFyaWEtbGFiZWwi'@;
put 'LGQuY29tbW9uU3RyaW5ncy5rZXlzLmRhdGVwaWNrZXJQcmV2aW91c01vbnRoKSxmZSgpLGhyKCJ0aXRsZSIsZC5jb21tb25TdHJpbmdzLmtleXMuZGF0ZXBpY2tlclByZXZpb3VzTW9udGgpLGZlKCksaHIoImFyaWEtbGFiZWwiLGQuY29tbW9uU3RyaW5ncy5rZXlzLmRhdGVwaWNrZXJDdXJy'@;
put 'ZW50TW9udGgpLGZlKCksaHIoInRpdGxlIixkLmNvbW1vblN0cmluZ3Mua2V5cy5kYXRlcGlja2VyQ3VycmVudE1vbnRoKSxmZSgpLGhyKCJhcmlhLWxhYmVsIixkLmNvbW1vblN0cmluZ3Mua2V5cy5kYXRlcGlja2VyTmV4dE1vbnRoKSxmZSgpLGhyKCJ0aXRsZSIsZC5jb21tb25TdHJpbmdz'@;
put 'LmtleXMuZGF0ZXBpY2tlck5leHRNb250aCksZmUoMyksd3IoZC5jb21tb25TdHJpbmdzLmtleXMubW9kYWxDb250ZW50RW5kKSl9LGRlcGVuZGVuY2llczpbcnMsdWRlXSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSx2ZGU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmKXt0aGlz'@;
put 'LmNvbW1vblN0cmluZ3M9YSx0aGlzLnRvZ2dsZVNlcnZpY2U9ZCx0aGlzLmRhdGVOYXZpZ2F0aW9uU2VydmljZT1oLHRoaXMuZGF0ZUZvcm1Db250cm9sU2VydmljZT1mfWFwcGx5KCl7dGhpcy5kYXRlTmF2aWdhdGlvblNlcnZpY2UuaXNSYW5nZVBpY2tlciYmdGhpcy5kYXRlTmF2aWdhdGlv'@;
put 'blNlcnZpY2Uuc2VsZWN0ZWREYXkmJnRoaXMuZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRW5kRGF5Pyh0aGlzLmRhdGVOYXZpZ2F0aW9uU2VydmljZS5ub3RpZnlTZWxlY3RlZERheUNoYW5nZWQoe3N0YXJ0RGF0ZTp0aGlzLmRhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZERh'@;
put 'eSxlbmREYXRlOnRoaXMuZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRW5kRGF5fSksdGhpcy5kYXRlRm9ybUNvbnRyb2xTZXJ2aWNlLm1hcmtBc0RpcnR5KCkpOiF0aGlzLmRhdGVOYXZpZ2F0aW9uU2VydmljZS5pc1JhbmdlUGlja2VyJiZ0aGlzLmRhdGVOYXZpZ2F0aW9uU2Vydmlj'@;
put 'ZS5zZWxlY3RlZERheSYmKHRoaXMuZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLm5vdGlmeVNlbGVjdGVkRGF5Q2hhbmdlZCh0aGlzLmRhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZERheSksdGhpcy5kYXRlRm9ybUNvbnRyb2xTZXJ2aWNlLm1hcmtBc0RpcnR5KCkpLHRoaXMudG9nZ2xlU2Vy'@;
put 'dmljZS5vcGVuPSExfWNhbmNlbCgpe3RoaXMuZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnJlc2V0U2VsZWN0ZWREYXkoKSx0aGlzLnRvZ2dsZVNlcnZpY2Uub3Blbj0hMX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2UoaXMpLEdlKHNjKSxHZShNaCks'@;
put 'R2UoWXkpKX0sYy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWRhdGVwaWNrZXItYWN0aW9ucyJdXSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmVHIoImRhdGVwaWNrZXItYWN0aW9ucyIsITApfSxkZWNsczo0LHZhcnM6Mixjb25zdHM6'@;
put 'W1sxLCJidG4iLCJidG4tb3V0bGluZSIsMywiY2xpY2siXSxbMSwiYnRuIiwiYnRuLXByaW1hcnkiLDMsImNsaWNrIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoZGUoMCwiYnV0dG9uIiwwKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGQuY2FuY2VsKCl9KSxMZSgxKSxo'@;
put 'ZSgpLGRlKDIsImJ1dHRvbiIsMSksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBkLmFwcGx5KCl9KSxMZSgzKSxoZSgpKSwyJmEmJihmZSgpLHdyKGQuY29tbW9uU3RyaW5ncy5rZXlzLmNhbmNlbCksZmUoMiksd3IoZC5jb21tb25TdHJpbmdzLmtleXMuYXBwbHkpKX0sZW5jYXBzdWxh'@;
put 'dGlvbjoyfSksY30pKCksYmRlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZil7dGhpcy5jb21tb25TdHJpbmdzPWEsdGhpcy52aWV3TWFuYWdlclNlcnZpY2U9ZCx0aGlzLmRhdGVOYXZpZ2F0aW9uU2VydmljZT1oLHRoaXMuZGF0ZUlPU2VydmljZT1mfWdldCBpc01vbnRoVmll'@;
put 'dygpe3JldHVybiB0aGlzLnZpZXdNYW5hZ2VyU2VydmljZS5pc01vbnRoVmlld31nZXQgaXNZZWFyVmlldygpe3JldHVybiB0aGlzLnZpZXdNYW5hZ2VyU2VydmljZS5pc1llYXJWaWV3fWdldCBpc0RheVZpZXcoKXtyZXR1cm4gdGhpcy52aWV3TWFuYWdlclNlcnZpY2UuaXNEYXlWaWV3fWdl'@;
put 'dCBoYXNSYW5nZU9wdGlvbnMoKXtyZXR1cm4hIXRoaXMuZGF0ZU5hdmlnYXRpb25TZXJ2aWNlPy5pc1JhbmdlUGlja2VyJiYhIXRoaXMuZGF0ZVJhbmdlT3B0aW9ucz8ubGVuZ3RofWdldCBoYXNBY3Rpb25CdXR0b25zKCl7cmV0dXJuIHRoaXMuZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmhhc0Fj'@;
put 'dGlvbkJ1dHRvbnN9Z2V0IGRhdGVSYW5nZU9wdGlvbnMoKXtyZXR1cm4gdGhpcy5kYXRlSU9TZXJ2aWNlLmdldFJhbmdlT3B0aW9ucygpfW9uUmFuZ2VPcHRpb25TZWxlY3QoYSl7Y29uc3QgZD10aGlzLmRhdGVOYXZpZ2F0aW9uU2VydmljZS5jb252ZXJ0RGF0ZVRvRGF5TW9kZWwoYT8udmFs'@;
put 'dWVbMF0pLGg9dGhpcy5kYXRlTmF2aWdhdGlvblNlcnZpY2UuY29udmVydERhdGVUb0RheU1vZGVsKGE/LnZhbHVlWzFdKTt0aGlzLmRhdGVOYXZpZ2F0aW9uU2VydmljZS5ub3RpZnlTZWxlY3RlZERheUNoYW5nZWQoe3N0YXJ0RGF0ZTpkLGVuZERhdGU6aH0se2VtaXRFdmVudDohdGhpcy5o'@;
put 'YXNBY3Rpb25CdXR0b25zfSksdGhpcy5kYXRlTmF2aWdhdGlvblNlcnZpY2UubW92ZVRvU3BlY2lmaWNNb250aChkKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2UoaXMpLEdlKEd5KSxHZShNaCksR2UoY2cpKX0sYy5cdTAyNzVjbXA9VnIoe3R5'@;
put 'cGU6YyxzZWxlY3RvcnM6W1siY2xyLWRhdGVwaWNrZXItdmlldy1tYW5hZ2VyIl1dLGhvc3RBdHRyczpbInJvbGUiLCJkaWFsb2ciXSxob3N0VmFyczo4LGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmKGhyKCJhcmlhLW1vZGFsIiwhMCkoImFyaWEtbGFiZWwiLGQuY29tbW9uU3Ry'@;
put 'aW5ncy5rZXlzLmRhdGVwaWNrZXJEaWFsb2dMYWJlbCksVHIoImRhdGVwaWNrZXIiLCEwKSgiaGFzLXJhbmdlLW9wdGlvbiIsZC5oYXNSYW5nZU9wdGlvbnMpKCJoYXMtYWN0aW9uLWJ1dHRvbnMiLGQuaGFzQWN0aW9uQnV0dG9ucykpfSxmZWF0dXJlczpbZGEoW1NtXSldLGRlY2xzOjMsdmFy'@;
put 'czoyLGNvbnN0czpbWyJjYWxlbmRhclZpZXciLCIiXSxbNCwibmdJZiIsIm5nSWZFbHNlIl0sWzEsImNsci1kYXRlLXJhbmdlLXBpY2tlci1uYXYiXSxbNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzEsImRhdGVwaWNrZXItdmlldy1tYW5hZ2VyIl0sWzQsIm5nVGVtcGxhdGVPdXRsZXQiXSxbImNs'@;
put 'clZlcnRpY2FsTmF2TGluayIsIiIsImhyZWYiLCJqYXZhc2NyaXB0OnZvaWQoMCkiLCJ0YWJpbmRleCIsIjAiLDMsImtleXVwLmVudGVyIiwiY2xpY2siXSxbNCwibmdJZiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpe2lmKDEmYSYmZ3QoMCxPTmUsNSwyLCJuZy1jb250YWluZXIiLDEpKDEs'@;
put 'Vk5lLDQsNCwibmctdGVtcGxhdGUiLG51bGwsMCxJYyksMiZhKXtjb25zdCBoPWhhKDIpO01lKCJuZ0lmIixkLmhhc1JhbmdlT3B0aW9ucykoIm5nSWZFbHNlIixoKX19LGRlcGVuZGVuY2llczpbbnMsYmEsTjEsUVksdEcsZmRlLGdkZSxtZGUsdmRlXSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSko'@;
put 'KSxZeD0oKCk9PntjbGFzcyBjIGV4dGVuZHMgdzd7Y29uc3RydWN0b3IoYSxkLGgsZix2LE0sRCxaLHJlLGNlLGJlLEVlLEJlLHFlKXtpZihzdXBlcihxZSxFZSxiZSxCZSksdGhpcy5yZW5kZXJlcj1hLHRoaXMuZWxlbT1kLHRoaXMudG9nZ2xlU2VydmljZT1oLHRoaXMuZGF0ZU5hdmlnYXRp'@;
put 'b25TZXJ2aWNlPWYsdGhpcy5kYXRlcGlja2VyRW5hYmxlZFNlcnZpY2U9dix0aGlzLmRhdGVGb3JtQ29udHJvbFNlcnZpY2U9TSx0aGlzLmRhdGVJT1NlcnZpY2U9RCx0aGlzLmNvbW1vblN0cmluZ3M9Wix0aGlzLnZpZXdNYW5hZ2VyU2VydmljZT1jZSx0aGlzLmNvbnRyb2xDbGFzc1NlcnZp'@;
put 'Y2U9YmUsdGhpcy5sYXlvdXRTZXJ2aWNlPUVlLHRoaXMubmdDb250cm9sU2VydmljZT1CZSx0aGlzLmlmQ29udHJvbFN0YXRlU2VydmljZT1xZSx0aGlzLmZvY3VzPSExLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHJlLmZvY3VzQ2hhbmdlLnN1YnNjcmliZShydD0+e3RoaXMuZm9jdXM9cnR9'@;
put 'KSksdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goaC5vcGVuQ2hhbmdlLnN1YnNjcmliZSgoKT0+e00ubWFya0FzVG91Y2hlZCgpfSkpLGYpe2NvbnN0IHJ0PWQubmF0aXZlRWxlbWVudC50YWdOYW1lLnRvTG93ZXJDYXNlKCk7Zi5oYXNBY3Rpb25CdXR0b25zPWYuaXNSYW5nZVBpY2tlcj0iY2xy'@;
put 'LWRhdGUtcmFuZ2UtY29udGFpbmVyIj09PXJ0fX1zZXQgc2hvd0FjdGlvbkJ1dHRvbnMoYSl7dGhpcy5kYXRlTmF2aWdhdGlvblNlcnZpY2UuaXNSYW5nZVBpY2tlciYmIWE/Y29uc29sZS5lcnJvcigiRXJyb3IhIFRoZSBkYXRlIHJhbmdlIHBpY2tlciByZXF1aXJlcyBhY3Rpb24gYnV0dG9u'@;
put 'cywgW3Nob3dBY3Rpb25CdXR0b25zXSBjYW5ub3QgYmUgdHVybmVkIG9mZi4iKTp0aGlzLmRhdGVOYXZpZ2F0aW9uU2VydmljZS5oYXNBY3Rpb25CdXR0b25zPWF9c2V0IGNsclBvc2l0aW9uKGEpe2EmJlRkW2FdJiYodGhpcy52aWV3TWFuYWdlclNlcnZpY2UucG9zaXRpb249VGRbYV0pfXNl'@;
put 'dCByYW5nZU9wdGlvbnMoYSl7dGhpcy5kYXRlSU9TZXJ2aWNlLnNldFJhbmdlT3B0aW9ucyhhKX1zZXQgbWluKGEpe3RoaXMuZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmlzUmFuZ2VQaWNrZXI/KHRoaXMuZGF0ZUlPU2VydmljZS5zZXRNaW5EYXRlKGEpLHRoaXMuY2xyU3RhcnREYXRlSW5wdXQ/'@;
put 'LnRyaWdnZXJDb250cm9sSW5wdXRWYWxpZGF0aW9uKCksdGhpcy5jbHJFbmREYXRlSW5wdXQ/LnRyaWdnZXJDb250cm9sSW5wdXRWYWxpZGF0aW9uKCkpOmNvbnNvbGUuZXJyb3IoIkVycm9yISBUaGUgZGF0ZSBjb250YWluZXIgW21pbl0gaW5wdXQgb25seSB3b3JrcyBmb3IgZGF0ZSByYW5n'@;
put 'ZSBwaWNrZXJzLiBVc2UgdGhlIG5hdGl2ZSBgbWluYCBhdHRyaWJ1dGUvcHJvcGVydHkgZm9yIHNpbmdsZS1kYXRlIGlucHV0cy4iKX1zZXQgbWF4KGEpe3RoaXMuZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmlzUmFuZ2VQaWNrZXI/KHRoaXMuZGF0ZUlPU2VydmljZS5zZXRNYXhEYXRlKGEpLHRo'@;
put 'aXMuY2xyU3RhcnREYXRlSW5wdXQ/LnRyaWdnZXJDb250cm9sSW5wdXRWYWxpZGF0aW9uKCksdGhpcy5jbHJFbmREYXRlSW5wdXQ/LnRyaWdnZXJDb250cm9sSW5wdXRWYWxpZGF0aW9uKCkpOmNvbnNvbGUuZXJyb3IoIkVycm9yISBUaGUgZGF0ZSBjb250YWluZXIgW21heF0gaW5wdXQgb25s'@;
put 'eSB3b3JrcyBmb3IgZGF0ZSByYW5nZSBwaWNrZXJzLiBVc2UgdGhlIG5hdGl2ZSBgbWF4YCBhdHRyaWJ1dGUvcHJvcGVydHkgZm9yIHNpbmdsZS1kYXRlIGlucHV0cy4iKX1zZXQgYWN0aW9uQnV0dG9uKGEpe3RoaXMudG9nZ2xlQnV0dG9uPWF9Z2V0IHBvcG92ZXJQb3NpdGlvbigpe3JldHVy'@;
put 'biB0aGlzLnZpZXdNYW5hZ2VyU2VydmljZS5wb3NpdGlvbn1nZXQgb3Blbigpe3JldHVybiB0aGlzLnRvZ2dsZVNlcnZpY2Uub3Blbn1nZXQgaXNFbmFibGVkKCl7cmV0dXJuIHRoaXMuZGF0ZXBpY2tlckVuYWJsZWRTZXJ2aWNlLmlzRW5hYmxlZH1nZXQgaXNJbnB1dERhdGVEaXNhYmxlZCgp'@;
put 'e3JldHVybiB0aGlzLmNvbnRyb2wmJnRoaXMuY29udHJvbC5kaXNhYmxlZHx8dGhpcy5kYXRlRm9ybUNvbnRyb2xTZXJ2aWNlJiZ0aGlzLmRhdGVGb3JtQ29udHJvbFNlcnZpY2UuZGlzYWJsZWR9Z2V0IGlzUmFuZ2VQaWNrZXIoKXtyZXR1cm4gdGhpcy5kYXRlTmF2aWdhdGlvblNlcnZpY2Uu'@;
put 'aXNSYW5nZVBpY2tlcn1uZ0FmdGVyVmlld0luaXQoKXt0aGlzLmRhdGVSYW5nZVN0cnVjdHVyYWxDaGVja3MoKSx0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCh0aGlzLnRvZ2dsZVNlcnZpY2Uub3BlbkNoYW5nZS5zdWJzY3JpYmUoYT0+e2E/dGhpcy5pbml0aWFsaXplQ2FsZW5kYXIoKToodGhp'@;
put 'cy50b2dnbGVCdXR0b24ubmF0aXZlRWxlbWVudC5mb2N1cygpLHRoaXMuZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnJlc2V0U2VsZWN0ZWREYXkoKSl9KSksdGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5saXN0ZW5Gb3JEYXRlQ2hhbmdlcygpKX1nZXRUb2dnbGVCdXR0b25MYWJlbChhKXtp'@;
put 'ZihhKXtjb25zdCBkPXRoaXMuZGF0ZUlPU2VydmljZS50b0xvY2FsZURpc3BsYXlGb3JtYXRTdHJpbmcoYS50b0RhdGUoKSk7cmV0dXJuIHRoaXMuY29tbW9uU3RyaW5ncy5wYXJzZSh0aGlzLmNvbW1vblN0cmluZ3Mua2V5cy5kYXRlcGlja2VyVG9nZ2xlQ2hhbmdlRGF0ZUxhYmVsLHtTRUxF'@;
put 'Q1RFRF9EQVRFOmR9KX1yZXR1cm4gdGhpcy5jb21tb25TdHJpbmdzLmtleXMuZGF0ZXBpY2tlclRvZ2dsZUNob29zZURhdGVMYWJlbH1saXN0ZW5Gb3JEYXRlQ2hhbmdlcygpe3JldHVybiB0aGlzLmRhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZERheUNoYW5nZS5waXBlKHgyKHRoaXMu'@;
put 'ZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRGF5KSkuc3Vic2NyaWJlKGE9PntpZih0aGlzLmlzRW5hYmxlZCl7Y29uc3QgZD10aGlzLmdldFRvZ2dsZUJ1dHRvbkxhYmVsKGEpLGg9dGhpcy50b2dnbGVCdXR0b24ubmF0aXZlRWxlbWVudDt0aGlzLnJlbmRlcmVyLnNldEF0dHJpYnV0'@;
put 'ZShoLCJhcmlhLWxhYmVsIixkKSx0aGlzLnJlbmRlcmVyLnNldEF0dHJpYnV0ZShoLCJ0aXRsZSIsZCl9fSl9aW5pdGlhbGl6ZUNhbGVuZGFyKCl7dGhpcy5kYXRlTmF2aWdhdGlvblNlcnZpY2UuaW5pdGlhbGl6ZUNhbGVuZGFyKCl9ZGF0ZVJhbmdlU3RydWN0dXJhbENoZWNrcygpe3RoaXMu'@;
put 'ZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmlzUmFuZ2VQaWNrZXImJih0aGlzLmNsckRhdGVJbnB1dCYmY29uc29sZS5lcnJvcigiRXJyb3IhIGNsci1kYXRlLXJhbmdlLWNvbnRhaW5lciBtdXN0IGNvbnRhaW4gY2xyU3RhcnREYXRlIGFuZCBjbHJFbmREYXRlIGlucHV0cyIpLHRoaXMuY2xyU3Rh'@;
put 'cnREYXRlSW5wdXR8fGNvbnNvbGUuZXJyb3IoIkVycm9yISBjbHItZGF0ZS1yYW5nZS1jb250YWluZXIgbXVzdCBjb250YWluIGNsclN0YXJ0RGF0ZSBpbnB1dCIpLHRoaXMuY2xyRW5kRGF0ZUlucHV0fHxjb25zb2xlLmVycm9yKCJFcnJvciEgY2xyLWRhdGUtcmFuZ2UtY29udGFpbmVyIG11'@;
put 'c3QgY29udGFpbiBjbHJFbmREYXRlIGlucHV0IikpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZShFbyksR2UoSmkpLEdlKHNjKSxHZShNaCksR2UoWEwpLEdlKFl5KSxHZShjZyksR2UoaXMpLEdlKFV5KSxHZShHeSksR2UoRGQpLEdlKENwLDgp'@;
put 'LEdlKGYxKSxHZShrZCkpfSxjLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItZGF0ZS1jb250YWluZXIiXSxbImNsci1kYXRlLXJhbmdlLWNvbnRhaW5lciJdXSxjb250ZW50UXVlcmllczpmdW5jdGlvbihhLGQsaCl7aWYoMSZhJiYoYW8oaCxKTCw1KSxhbyhoLGhkZSw1'@;
put 'KSxhbyhoLGRkZSw1KSksMiZhKXtsZXQgZjtDaShmPVNpKCkpJiYoZC5jbHJEYXRlSW5wdXQ9Zi5maXJzdCksQ2koZj1TaSgpKSYmKGQuY2xyU3RhcnREYXRlSW5wdXQ9Zi5maXJzdCksQ2koZj1TaSgpKSYmKGQuY2xyRW5kRGF0ZUlucHV0PWYuZmlyc3QpfX0sdmlld1F1ZXJ5OmZ1bmN0aW9u'@;
put 'KGEsZCl7aWYoMSZhJiZxYShCTmUsNSksMiZhKXtsZXQgaDtDaShoPVNpKCkpJiYoZC5hY3Rpb25CdXR0b249aC5maXJzdCl9fSxob3N0VmFyczo4LGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmVHIoImNsci1kYXRlLWNvbnRhaW5lciIsITApKCJjbHItZm9ybS1jb250cm9sLWRp'@;
put 'c2FibGVkIixkLmlzSW5wdXREYXRlRGlzYWJsZWQpKCJjbHItZm9ybS1jb250cm9sIiwhMCkoImNsci1yb3ciLGQuYWRkR3JpZCgpKX0saW5wdXRzOntzaG93QWN0aW9uQnV0dG9uczoic2hvd0FjdGlvbkJ1dHRvbnMiLGNsclBvc2l0aW9uOiJjbHJQb3NpdGlvbiIscmFuZ2VPcHRpb25zOiJy'@;
put 'YW5nZU9wdGlvbnMiLG1pbjoibWluIixtYXg6Im1heCJ9LGZlYXR1cmVzOltkYShbQ2gsWngsRGQsVXksZjEsY2csTWgsWEwsWXksR3ksa2RdKSx2ZChbb2ddKSx3YV0sbmdDb250ZW50U2VsZWN0b3JzOnpOZSxkZWNsczoxNCx2YXJzOjE1LGNvbnN0czpbWyJhY3Rpb25CdXR0b24iLCIiXSxb'@;
put 'NCwibmdJZiJdLFsxLCJjbHItY29udHJvbC1jb250YWluZXIiLDMsIm5nQ2xhc3MiXSxbImNsclBvcG92ZXJBbmNob3IiLCIiLDEsImNsci1pbnB1dC13cmFwcGVyIl0sWzEsImNsci1pbnB1dC1ncm91cCJdLFsidHlwZSIsImJ1dHRvbiIsImNsclBvcG92ZXJPcGVuQ2xvc2VCdXR0b24iLCIi'@;
put 'LCJjbGFzcyIsImNsci1pbnB1dC1ncm91cC1pY29uLWFjdGlvbiIsMywiZGlzYWJsZWQiLDQsIm5nSWYiXSxbImNka1RyYXBGb2N1cyIsIiIsNCwiY2xyUG9wb3ZlckNvbnRlbnQiLCJjbHJQb3BvdmVyQ29udGVudEF0IiwiY2xyUG9wb3ZlckNvbnRlbnRPdXRzaWRlQ2xpY2tUb0Nsb3NlIiwi'@;
put 'Y2xyUG9wb3ZlckNvbnRlbnRTY3JvbGxUb0Nsb3NlIl0sWyJjbGFzcyIsImNsci12YWxpZGF0ZS1pY29uIiwic2hhcGUiLCJleGNsYW1hdGlvbi1jaXJjbGUiLCJzdGF0dXMiLCJkYW5nZXIiLCJhcmlhLWhpZGRlbiIsInRydWUiLDQsIm5nSWYiXSxbImNsYXNzIiwiY2xyLXZhbGlkYXRlLWlj'@;
put 'b24iLCJzaGFwZSIsImNoZWNrLWNpcmNsZSIsInN0YXR1cyIsInN1Y2Nlc3MiLCJhcmlhLWhpZGRlbiIsInRydWUiLDQsIm5nSWYiXSxbMSwiZGF0ZS1yYW5nZS1zZXBhcmF0b3IiXSxbInR5cGUiLCJidXR0b24iLCJjbHJQb3BvdmVyT3BlbkNsb3NlQnV0dG9uIiwiIiwxLCJjbHItaW5wdXQt'@;
put 'Z3JvdXAtaWNvbi1hY3Rpb24iLDMsImRpc2FibGVkIl0sWyJzdGF0dXMiLCJpbmZvIiwic2hhcGUiLCJjYWxlbmRhciJdLFsiY2RrVHJhcEZvY3VzIiwiIl0sWyJzaGFwZSIsImV4Y2xhbWF0aW9uLWNpcmNsZSIsInN0YXR1cyIsImRhbmdlciIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsMSwiY2xy'@;
put 'LXZhbGlkYXRlLWljb24iXSxbInNoYXBlIiwiY2hlY2stY2lyY2xlIiwic3RhdHVzIiwic3VjY2VzcyIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsMSwiY2xyLXZhbGlkYXRlLWljb24iXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihzYShqTmUpLFlyKDApLGd0KDEsVU5lLDEsMCwibGFi'@;
put 'ZWwiLDEpLGRlKDIsImRpdiIsMikoMywiZGl2IiwzKSg0LCJkaXYiLDQpLGd0KDUsWk5lLDUsMCwibmctY29udGFpbmVyIiwxKSxZcig2LDEpLGd0KDcsV05lLDMsMSwiYnV0dG9uIiw1KSg4LFlOZSwxLDAsImNsci1kYXRlcGlja2VyLXZpZXctbWFuYWdlciIsNiksaGUoKSxndCg5LEdOZSwx'@;
put 'LDAsImNkcy1pY29uIiw3KSgxMCwkTmUsMSwwLCJjZHMtaWNvbiIsOCksaGUoKSxndCgxMSxLTmUsMSwwLCJuZy1jb250ZW50IiwxKSgxMixxTmUsMSwwLCJuZy1jb250ZW50IiwxKSgxMyxYTmUsMSwwLCJuZy1jb250ZW50IiwxKSxoZSgpKSwyJmEmJihmZSgpLE1lKCJuZ0lmIiwhZC5sYWJl'@;
put 'bCYmZC5hZGRHcmlkKCkpLGZlKCksTWUoIm5nQ2xhc3MiLGQuY29udHJvbENsYXNzKCkpLGZlKDIpLFRyKCJjbHItZm9jdXMiLGQuZm9jdXMpLGZlKCksTWUoIm5nSWYiLGQuaXNSYW5nZVBpY2tlciksZmUoMiksTWUoIm5nSWYiLGQuaXNFbmFibGVkKSxmZSgpLE1lKCJjbHJQb3BvdmVyQ29u'@;
put 'dGVudCIsZC5vcGVuKSgiY2xyUG9wb3ZlckNvbnRlbnRBdCIsZC5wb3BvdmVyUG9zaXRpb24pKCJjbHJQb3BvdmVyQ29udGVudE91dHNpZGVDbGlja1RvQ2xvc2UiLCEwKSgiY2xyUG9wb3ZlckNvbnRlbnRTY3JvbGxUb0Nsb3NlIiwhMCksZmUoKSxNZSgibmdJZiIsZC5zaG93SW52YWxpZCks'@;
put 'ZmUoKSxNZSgibmdJZiIsZC5zaG93VmFsaWQpLGZlKCksTWUoIm5nSWYiLGQuc2hvd0hlbHBlciksZmUoKSxNZSgibmdJZiIsZC5zaG93SW52YWxpZCksZmUoKSxNZSgibmdJZiIsZC5zaG93VmFsaWQpKX0sZGVwZW5kZW5jaWVzOlt3dSxiYSxaeSxQeCxOeCxIeCxycyxkcyxiZGVdLGVuY2Fw'@;
put 'c3VsYXRpb246Mn0pLGN9KSgpLHNHPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5kYXRlSU9TZXJ2aWNlPWF9dmFsaWRhdGUoYSl7aWYodGhpcy5kYXRlSU9TZXJ2aWNlKXtjb25zdCBkPXRoaXMuZGF0ZUlPU2VydmljZS5nZXREYXRlVmFsdWVGcm9tRGF0ZVN0cmluZyhhLnZh'@;
put 'bHVlKSxoPXRoaXMuZGF0ZUlPU2VydmljZS5kaXNhYmxlZERhdGVzLm1pbkRhdGUudG9EYXRlKCksZj10aGlzLmRhdGVJT1NlcnZpY2UuZGlzYWJsZWREYXRlcy5tYXhEYXRlLnRvRGF0ZSgpO2lmKGQmJmQ8aClyZXR1cm57bWluOnttaW46aC50b0xvY2FsZURhdGVTdHJpbmcoKSxhY3R1YWw6'@;
put 'ZC50b0xvY2FsZURhdGVTdHJpbmcoKX19O2lmKGQmJmQ+ZilyZXR1cm57bWF4OnttYXg6Zi50b0xvY2FsZURhdGVTdHJpbmcoKSxhY3R1YWw6ZC50b0xvY2FsZURhdGVTdHJpbmcoKX19fXJldHVybiBudWxsfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxj'@;
put 'KShHZShjZyw4KSl9LGMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsImNsckRhdGUiLCIiXSxbIiIsImNsclN0YXJ0RGF0ZSIsIiJdLFsiIiwiY2xyRW5kRGF0ZSIsIiJdXSxmZWF0dXJlczpbZGEoW3twcm92aWRlOmgwLHVzZUV4aXN0aW5nOmMsbXVsdGk6ITB9XSldfSks'@;
put 'Y30pKCkseVplPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXtUcy5hZGRJY29ucyh2aCxiaCxFeSxMT2UsT09lKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPWtpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1Bcih7aW1wb3J0'@;
put 'czpbUmEsS0wsQngsTzIsVngsQXMsYXUsb2RlXX0pLGN9KSgpO25ldyBTdCgiQ2xyRmlsZU1lc3NhZ2VzVGVtcGxhdGVDb250ZXh0Iik7bGV0IHdaZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7VHMuYWRkSWNvbnMoUE9lKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3Jl'@;
put 'dHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPWtpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1Bcih7aW1wb3J0czpbUmEsQXMsYXUsYXVdfSksY30pKCkseWRlPSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyB3N3tjb25zdHJ1Y3RvcihhLGQsaCxmLHYpe3N1cGVyKHYsZCxhLGgpLHRoaXMuaWZDb250'@;
put 'cm9sU3RhdGVTZXJ2aWNlPXYsdGhpcy5mb2N1cz0hMSx0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChmLmZvY3VzQ2hhbmdlLnN1YnNjcmliZShNPT50aGlzLmZvY3VzPU0pKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2UoRGQpLEdlKENwLDgpLEdl'@;
put 'KGYxKSxHZShVeSksR2Uoa2QpKX0sYy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLW51bWJlci1pbnB1dC1jb250YWluZXIiXV0sY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24oYSxkLGgpe2lmKDEmYSYmYW8oaCxfZGUsNSksMiZhKXtsZXQgZjtDaShmPVNpKCkpJiYoZC5p'@;
put 'bnB1dD1mLmZpcnN0KX19LGhvc3RWYXJzOjgsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiZUcigiY2xyLWZvcm0tY29udHJvbCIsITApKCJjbHItZm9ybS1jb250cm9sLWRpc2FibGVkIixudWxsPT1kLmNvbnRyb2w/bnVsbDpkLmNvbnRyb2wuZGlzYWJsZWQpKCJjbHItZm9ybS1j'@;
put 'b250cm9sLXJlYWRvbmx5IixkLmlucHV0LnJlYWRvbmx5KSgiY2xyLXJvdyIsZC5hZGRHcmlkKCkpfSxmZWF0dXJlczpbZGEoW1V5LGtkLGYxLENoLERkXSksd2FdLG5nQ29udGVudFNlbGVjdG9yczpuVmUsZGVjbHM6MTcsdmFyczoxMSxjb25zdHM6W1s0LCJuZ0lmIl0sWzEsImNsci1jb250'@;
put 'cm9sLWNvbnRhaW5lciIsMywibmdDbGFzcyJdLFsxLCJjbHItbnVtYmVyLWlucHV0LXdyYXBwZXIiXSxbMSwiY2xyLWlucHV0LWdyb3VwIl0sWzEsImNsci1pbnB1dC1ncm91cC1hY3Rpb25zIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJjbHItaW5wdXQtZ3JvdXAtaWNvbi1hY3Rpb24iLDMsImNs'@;
put 'aWNrIiwiZGlzYWJsZWQiXSxbInNoYXBlIiwibWludXMiLCJzaXplIiwic20iXSxbMSwiY2xyLW51bWJlci1pbnB1dC1zZXBhcmF0b3IiXSxbInNoYXBlIiwicGx1cyIsInNpemUiLCJzbSJdLFsiY2xhc3MiLCJjbHItdmFsaWRhdGUtaWNvbiIsInNoYXBlIiwiZXhjbGFtYXRpb24tY2lyY2xl'@;
put 'Iiwic3RhdHVzIiwiZGFuZ2VyIiwiYXJpYS1oaWRkZW4iLCJ0cnVlIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImNsci12YWxpZGF0ZS1pY29uIiwic2hhcGUiLCJjaGVjay1jaXJjbGUiLCJzdGF0dXMiLCJzdWNjZXNzIiwiYXJpYS1oaWRkZW4iLCJ0cnVlIiw0LCJuZ0lmIl0sWyJzaGFwZSIsImV4'@;
put 'Y2xhbWF0aW9uLWNpcmNsZSIsInN0YXR1cyIsImRhbmdlciIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsMSwiY2xyLXZhbGlkYXRlLWljb24iXSxbInNoYXBlIiwiY2hlY2stY2lyY2xlIiwic3RhdHVzIiwic3VjY2VzcyIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsMSwiY2xyLXZhbGlkYXRlLWljb24i'@;
put 'XV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihzYSh0VmUpLFlyKDApLGd0KDEsclZlLDEsMCwibGFiZWwiLDApLGRlKDIsImRpdiIsMSkoMywiZGl2IiwyKSg0LCJkaXYiLDMpLFlyKDUsMSksZGUoNiwiZGl2Iiw0KSg3LCJidXR0b24iLDUpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXty'@;
put 'ZXR1cm4gZC5pbnB1dC5zdGVwRG93bigpfSksR3QoOCwiY2RzLWljb24iLDYpLGhlKCksR3QoOSwiZGl2Iiw3KSxkZSgxMCwiYnV0dG9uIiw1KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGQuaW5wdXQuc3RlcFVwKCl9KSxHdCgxMSwiY2RzLWljb24iLDgpLGhlKCkoKSgpLGd0KDEy'@;
put 'LGlWZSwxLDAsImNkcy1pY29uIiw5KSgxMyxhVmUsMSwwLCJjZHMtaWNvbiIsMTApLGhlKCksZ3QoMTQsb1ZlLDEsMCwibmctY29udGVudCIsMCkoMTUsc1ZlLDEsMCwibmctY29udGVudCIsMCkoMTYsbFZlLDEsMCwibmctY29udGVudCIsMCksaGUoKSksMiZhJiYoZmUoKSxNZSgibmdJZiIs'@;
put 'IWQubGFiZWwmJmQuYWRkR3JpZCgpKSxmZSgpLE1lKCJuZ0NsYXNzIixkLmNvbnRyb2xDbGFzcygpKSxmZSgyKSxUcigiY2xyLWZvY3VzIixkLmZvY3VzKSxmZSgzKSxNZSgiZGlzYWJsZWQiLG51bGw9PWQuY29udHJvbD9udWxsOmQuY29udHJvbC5kaXNhYmxlZCksZmUoMyksTWUoImRpc2Fi'@;
put 'bGVkIixudWxsPT1kLmNvbnRyb2w/bnVsbDpkLmNvbnRyb2wuZGlzYWJsZWQpLGZlKDIpLE1lKCJuZ0lmIixkLnNob3dJbnZhbGlkKSxmZSgpLE1lKCJuZ0lmIixkLnNob3dWYWxpZCksZmUoKSxNZSgibmdJZiIsZC5zaG93SGVscGVyKSxmZSgpLE1lKCJuZ0lmIixkLnNob3dJbnZhbGlkKSxm'@;
put 'ZSgpLE1lKCJuZ0lmIixkLnNob3dWYWxpZCkpfSxkZXBlbmRlbmNpZXM6W3d1LGJhLHJzLGRzXSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxfZGU9KCgpPT57Y2xhc3MgYyBleHRlbmRzIEM3e2NvbnN0cnVjdG9yKGEsZCxoLGYsdixNKXtpZihzdXBlcihkLHlkZSxoLGYsdixNKSx0aGlzLmZv'@;
put 'Y3VzU2VydmljZT1hLHRoaXMuY29udHJvbD1mLHRoaXMuZWw9TSx0aGlzLmluZGV4PTEsIWEpdGhyb3cgbmV3IEVycm9yKCJjbHJOdW1iZXJJbnB1dCByZXF1aXJlcyBiZWluZyB3cmFwcGVkIGluIDxjbHItbnVtYmVyLWlucHV0LWNvbnRhaW5lcj4iKX1nZXQgcmVhZG9ubHkoKXtyZXR1cm4g'@;
put 'bnVsbCE9PXRoaXMuZWwubmF0aXZlRWxlbWVudC5nZXRBdHRyaWJ1dGUoInJlYWRvbmx5Iil9dHJpZ2dlckZvY3VzKCl7IXRoaXMucmVhZG9ubHkmJnRoaXMuZm9jdXNTZXJ2aWNlJiYodGhpcy5mb2N1c1NlcnZpY2UuZm9jdXNlZD0hMCl9dHJpZ2dlclZhbGlkYXRpb24oKXt0aGlzLnJlYWRv'@;
put 'bmx5fHwoc3VwZXIudHJpZ2dlclZhbGlkYXRpb24oKSx0aGlzLmZvY3VzU2VydmljZSYmKHRoaXMuZm9jdXNTZXJ2aWNlLmZvY3VzZWQ9ITEpKX1zdGVwVXAoKXt0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuc3RlcFVwKCksdGhpcy5lbC5uYXRpdmVFbGVtZW50LmRpc3BhdGNoRXZlbnQobmV3IEV2'@;
put 'ZW50KCJpbnB1dCIse2J1YmJsZXM6ITAsY2FuY2VsYWJsZTohMH0pKSx0aGlzLmNvbnRyb2wuY29udHJvbC5tYXJrQWxsQXNUb3VjaGVkKCl9c3RlcERvd24oKXt0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuc3RlcERvd24oKSx0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuZGlzcGF0Y2hFdmVudChuZXcg'@;
put 'RXZlbnQoImlucHV0Iix7YnViYmxlczohMCxjYW5jZWxhYmxlOiEwfSkpLHRoaXMuY29udHJvbC5jb250cm9sLm1hcmtBbGxBc1RvdWNoZWQoKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2UoVXksOCksR2UoRG8pLEdlKERzKSxHZShkMSwxMCks'@;
put 'R2UoRW8pLEdlKEppKSl9LGMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbImlucHV0IiwidHlwZSIsIm51bWJlciIsImNsck51bWJlcklucHV0IiwiIl1dLGhvc3RWYXJzOjQsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MSZhJiZGdCgiZm9jdXMiLGZ1bmN0aW9uKCl7cmV0'@;
put 'dXJuIGQudHJpZ2dlckZvY3VzKCl9KSgiYmx1ciIsZnVuY3Rpb24oKXtyZXR1cm4gZC50cmlnZ2VyVmFsaWRhdGlvbigpfSksMiZhJiZUcigiY2xyLWlucHV0IiwhMCkoImNsci1udW1iZXItaW5wdXQiLCEwKX0sZmVhdHVyZXM6W3dhXX0pLGN9KSgpLENaZT0oKCk9PntjbGFzcyBje2NvbnN0'@;
put 'cnVjdG9yKCl7VHMuYWRkSWNvbnModmgsYmgsRk9lLEhPZSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD1raSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9QXIoe2ltcG9ydHM6W1JhLFJjLEFzLGF1LGF1XX0pLGN9KSgpO25ldyBT'@;
put 'dCh2b2lkIDApO2xldCB4WmU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe1RzLmFkZEljb25zKE5PZSxWT2UsdmgsYmgpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9a2koe3R5cGU6Y30pLGMuXHUwMjc1aW5qPUFyKHtp'@;
put 'bXBvcnRzOltSYSxSYyxBcyxhdSxhdV19KSxjfSkoKSxsRz0oKCk9PntjbGFzcyBje25nT25Jbml0KCl7dGhpcy5sYWJlbCYmdGhpcy5sYWJlbC5kaXNhYmxlR3JpZCgpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVjbXA9VnIoe3R5'@;
put 'cGU6YyxzZWxlY3RvcnM6W1siY2xyLXJhZGlvLXdyYXBwZXIiXV0sY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24oYSxkLGgpe2lmKDEmYSYmYW8oaCxkcyw3KSwyJmEpe2xldCBmO0NpKGY9U2koKSkmJihkLmxhYmVsPWYuZmlyc3QpfX0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24o'@;
put 'YSxkKXsyJmEmJlRyKCJjbHItcmFkaW8td3JhcHBlciIsITApfSxmZWF0dXJlczpbZGEoW0NoXSldLG5nQ29udGVudFNlbGVjdG9yczp1VmUsZGVjbHM6Myx2YXJzOjEsY29uc3RzOltbNCwibmdJZiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKHNhKGNWZSksWXIoMCksWXIoMSwx'@;
put 'KSxndCgyLGRWZSwxLDAsImxhYmVsIiwwKSksMiZhJiYoZmUoMiksTWUoIm5nSWYiLCFkLmxhYmVsKSl9LGRlcGVuZGVuY2llczpbYmEsZHNdLGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpLGNHPSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyBDN3tjb25zdHJ1Y3RvcihhLGQsaCxmLHYpe3N1cGVyKGEs'@;
put 'bEcsZCxoLGYsdil9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKERvKSxHZShEcyksR2UoZDEsMTApLEdlKEVvKSxHZShKaSkpfSxjLlx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJjbHJSYWRpbyIsIiJdXSxmZWF0dXJlczpb'@;
put 'd2FdfSksY30pKCksRVplPSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyB3N3tjb25zdHJ1Y3RvcihhLGQsaCxmKXtzdXBlcihmLGEsZCxoKSx0aGlzLmxheW91dFNlcnZpY2U9YSx0aGlzLmNvbnRyb2xDbGFzc1NlcnZpY2U9ZCx0aGlzLm5nQ29udHJvbFNlcnZpY2U9aCx0aGlzLmlmQ29udHJvbFN0'@;
put 'YXRlU2VydmljZT1mLHRoaXMuaW5saW5lPSExLHRoaXMuX2dlbmVyYXRlZElkPU11KCl9Z2V0IGNscklubGluZSgpe3JldHVybiB0aGlzLmlubGluZX1zZXQgY2xySW5saW5lKGEpe3RoaXMuaW5saW5lPSJzdHJpbmciPT10eXBlb2YgYT8iZmFsc2UiIT09YTohIWF9bmdBZnRlckNvbnRlbnRJ'@;
put 'bml0KCl7dGhpcy5zZXRBcmlhUm9sZXMoKSx0aGlzLnNldEFyaWFMYWJlbGxlZEJ5KCl9c2V0QXJpYVJvbGVzKCl7dGhpcy5yb2xlPXRoaXMucmFkaW9zLmxlbmd0aD8icmFkaW9ncm91cCI6bnVsbH1zZXRBcmlhTGFiZWxsZWRCeSgpe2NvbnN0IGE9dGhpcy5ncm91cExhYmVsPy5uYXRpdmVF'@;
put 'bGVtZW50LmdldEF0dHJpYnV0ZSgiaWQiKTthP3RoaXMuYXJpYUxhYmVsbGVkQnk9dGhpcy5yYWRpb3MubGVuZ3RoP2E6bnVsbDoodGhpcy5ncm91cExhYmVsPy5uYXRpdmVFbGVtZW50LnNldEF0dHJpYnV0ZSgiaWQiLHRoaXMuX2dlbmVyYXRlZElkKSx0aGlzLmFyaWFMYWJlbGxlZEJ5PXRo'@;
put 'aXMucmFkaW9zLmxlbmd0aD90aGlzLl9nZW5lcmF0ZWRJZDpudWxsKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2UoQ3AsOCksR2UoRGQpLEdlKGYxKSxHZShrZCkpfSxjLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItcmFk'@;
put 'aW8tY29udGFpbmVyIl1dLGNvbnRlbnRRdWVyaWVzOmZ1bmN0aW9uKGEsZCxoKXtpZigxJmEmJihhbyhoLGRzLDcsSmkpLGFvKGgsY0csNSkpLDImYSl7bGV0IGY7Q2koZj1TaSgpKSYmKGQuZ3JvdXBMYWJlbD1mLmZpcnN0KSxDaShmPVNpKCkpJiYoZC5yYWRpb3M9Zil9fSxob3N0VmFyczo4'@;
put 'LGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmKGhyKCJyb2xlIixkLnJvbGUpKCJhcmlhLWxhYmVsbGVkYnkiLGQuYXJpYUxhYmVsbGVkQnkpLFRyKCJjbHItZm9ybS1jb250cm9sIiwhMCkoImNsci1mb3JtLWNvbnRyb2wtZGlzYWJsZWQiLG51bGw9PWQuY29udHJvbD9udWxsOmQu'@;
put 'Y29udHJvbC5kaXNhYmxlZCkoImNsci1yb3ciLGQuYWRkR3JpZCgpKSl9LGlucHV0czp7Y2xySW5saW5lOiJjbHJJbmxpbmUifSxmZWF0dXJlczpbZGEoW2YxLGtkLERkLHA3XSksd2FdLG5nQ29udGVudFNlbGVjdG9yczpmVmUsZGVjbHM6Nix2YXJzOjYsY29uc3RzOltbNCwibmdJZiJdLFsx'@;
put 'LCJjbHItY29udHJvbC1jb250YWluZXIiLDMsIm5nQ2xhc3MiXSxbImNsYXNzIiwiY2xyLXN1YnRleHQtd3JhcHBlciIsNCwibmdJZiJdLFsxLCJjbHItc3VidGV4dC13cmFwcGVyIl0sWyJjbGFzcyIsImNsci12YWxpZGF0ZS1pY29uIiwic2hhcGUiLCJleGNsYW1hdGlvbi1jaXJjbGUiLCJz'@;
put 'dGF0dXMiLCJkYW5nZXIiLCJhcmlhLWhpZGRlbiIsInRydWUiLDQsIm5nSWYiXSxbImNsYXNzIiwiY2xyLXZhbGlkYXRlLWljb24iLCJzaGFwZSIsImNoZWNrLWNpcmNsZSIsInN0YXR1cyIsInN1Y2Nlc3MiLCJhcmlhLWhpZGRlbiIsInRydWUiLDQsIm5nSWYiXSxbInNoYXBlIiwiZXhjbGFt'@;
put 'YXRpb24tY2lyY2xlIiwic3RhdHVzIiwiZGFuZ2VyIiwiYXJpYS1oaWRkZW4iLCJ0cnVlIiwxLCJjbHItdmFsaWRhdGUtaWNvbiJdLFsic2hhcGUiLCJjaGVjay1jaXJjbGUiLCJzdGF0dXMiLCJzdWNjZXNzIiwiYXJpYS1oaWRkZW4iLCJ0cnVlIiwxLCJjbHItdmFsaWRhdGUtaWNvbiJdXSx0'@;
put 'ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKHNhKGhWZSksWXIoMCksZ3QoMSxwVmUsMSwwLCJsYWJlbCIsMCksZGUoMiwiZGl2IiwxKSxZcigzLDEpLGd0KDQsZ1ZlLDIsMCwiZGl2IiwyKSg1LF9WZSw1LDQsImRpdiIsMiksaGUoKSksMiZhJiYoZmUoKSxNZSgibmdJZiIsIWQubGFiZWwm'@;
put 'JmQuYWRkR3JpZCgpKSxmZSgpLFRyKCJjbHItY29udHJvbC1pbmxpbmUiLGQuY2xySW5saW5lKSxNZSgibmdDbGFzcyIsZC5jb250cm9sQ2xhc3MoKSksZmUoMiksTWUoIm5nSWYiLGQuc2hvd0hlbHBlciksZmUoKSxNZSgibmdJZiIsZC5zaG93VmFsaWR8fGQuc2hvd0ludmFsaWQpKX0sZGVw'@;
put 'ZW5kZW5jaWVzOlt3dSxiYSxkcyxyc10sZW5jYXBzdWxhdGlvbjoyfSksY30pKCksVFplPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXtUcy5hZGRJY29ucyh2aCxiaCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD1raSh7'@;
put 'dHlwZTpjfSksYy5cdTAyNzVpbmo9QXIoe2ltcG9ydHM6W1JhLGF1LEJ4LEFzLGF1XX0pLGN9KSgpLEFaZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7VHMuYWRkSWNvbnModmgsYmgpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAy'@;
put 'NzVtb2Q9a2koe3R5cGU6Y30pLGMuXHUwMjc1aW5qPUFyKHtpbXBvcnRzOltSYSxhdSxCeCxBcyxhdV19KSxjfSkoKSwkeT0oKCk9PntjbGFzcyBjIGV4dGVuZHMgdzd7Y29uc3RydWN0b3IoYSxkLGgsZil7c3VwZXIoZixhLGQsaCksdGhpcy5sYXlvdXRTZXJ2aWNlPWEsdGhpcy5jb250cm9s'@;
put 'Q2xhc3NTZXJ2aWNlPWQsdGhpcy5uZ0NvbnRyb2xTZXJ2aWNlPWgsdGhpcy5pZkNvbnRyb2xTdGF0ZVNlcnZpY2U9Zix0aGlzLm11bHRpPSExfW5nT25Jbml0KCl7dGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5uZ0NvbnRyb2xTZXJ2aWNlLmNvbnRyb2xDaGFuZ2VzLnN1YnNjcmliZShh'@;
put 'PT57YSYmKHRoaXMubXVsdGk9YS52YWx1ZUFjY2Vzc29yIGluc3RhbmNlb2YgbXgsdGhpcy5jb250cm9sPWEpfSkpfXdyYXBwZXJDbGFzcygpe3JldHVybiB0aGlzLm11bHRpPyJjbHItbXVsdGlzZWxlY3Qtd3JhcHBlciI6ImNsci1zZWxlY3Qtd3JhcHBlciJ9fXJldHVybiBjLlx1MDI3NWZh'@;
put 'Yz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKENwLDgpLEdlKERkKSxHZShmMSksR2Uoa2QpKX0sYy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLXNlbGVjdC1jb250YWluZXIiXV0sY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24oYSxkLGgpe2lmKDEmYSYmYW8o'@;
put 'aCxteCw1KSwyJmEpe2xldCBmO0NpKGY9U2koKSkmJihkLm11bHRpcGxlPWYuZmlyc3QpfX0saG9zdFZhcnM6Nixob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJlRyKCJjbHItZm9ybS1jb250cm9sIiwhMCkoImNsci1mb3JtLWNvbnRyb2wtZGlzYWJsZWQiLG51bGw9PWQuY29udHJv'@;
put 'bD9udWxsOmQuY29udHJvbC5kaXNhYmxlZCkoImNsci1yb3ciLGQuYWRkR3JpZCgpKX0sZmVhdHVyZXM6W2RhKFtrZCxmMSxDaCxEZF0pLHdhXSxuZ0NvbnRlbnRTZWxlY3RvcnM6Q1ZlLGRlY2xzOjEwLHZhcnM6OCxjb25zdHM6W1s0LCJuZ0lmIl0sWzEsImNsci1jb250cm9sLWNvbnRhaW5l'@;
put 'ciIsMywibmdDbGFzcyJdLFszLCJuZ0NsYXNzIl0sWyJjbGFzcyIsImNsci12YWxpZGF0ZS1pY29uIiwic2hhcGUiLCJleGNsYW1hdGlvbi1jaXJjbGUiLCJzdGF0dXMiLCJkYW5nZXIiLCJhcmlhLWhpZGRlbiIsInRydWUiLDQsIm5nSWYiXSxbImNsYXNzIiwiY2xyLXZhbGlkYXRlLWljb24i'@;
put 'LCJzaGFwZSIsImNoZWNrLWNpcmNsZSIsInN0YXR1cyIsInN1Y2Nlc3MiLCJhcmlhLWhpZGRlbiIsInRydWUiLDQsIm5nSWYiXSxbInNoYXBlIiwiZXhjbGFtYXRpb24tY2lyY2xlIiwic3RhdHVzIiwiZGFuZ2VyIiwiYXJpYS1oaWRkZW4iLCJ0cnVlIiwxLCJjbHItdmFsaWRhdGUtaWNvbiJd'@;
put 'LFsic2hhcGUiLCJjaGVjay1jaXJjbGUiLCJzdGF0dXMiLCJzdWNjZXNzIiwiYXJpYS1oaWRkZW4iLCJ0cnVlIiwxLCJjbHItdmFsaWRhdGUtaWNvbiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKHNhKHdWZSksWXIoMCksZ3QoMSxTVmUsMSwwLCJsYWJlbCIsMCksZGUoMiwiZGl2'@;
put 'IiwxKSgzLCJkaXYiLDIpLFlyKDQsMSksZ3QoNSxNVmUsMSwwLCJjZHMtaWNvbiIsMykoNix4VmUsMSwwLCJjZHMtaWNvbiIsNCksaGUoKSxndCg3LEVWZSwxLDAsIm5nLWNvbnRlbnQiLDApKDgsVFZlLDEsMCwibmctY29udGVudCIsMCkoOSxBVmUsMSwwLCJuZy1jb250ZW50IiwwKSxoZSgp'@;
put 'KSwyJmEmJihmZSgpLE1lKCJuZ0lmIiwhZC5sYWJlbCYmZC5hZGRHcmlkKCkpLGZlKCksTWUoIm5nQ2xhc3MiLGQuY29udHJvbENsYXNzKCkpLGZlKCksTWUoIm5nQ2xhc3MiLGQud3JhcHBlckNsYXNzKCkpLGZlKDIpLE1lKCJuZ0lmIixkLnNob3dJbnZhbGlkKSxmZSgpLE1lKCJuZ0lmIixk'@;
put 'LnNob3dWYWxpZCksZmUoKSxNZSgibmdJZiIsZC5zaG93SGVscGVyKSxmZSgpLE1lKCJuZ0lmIixkLnNob3dJbnZhbGlkKSxmZSgpLE1lKCJuZ0lmIixkLnNob3dWYWxpZCkpfSxkZXBlbmRlbmNpZXM6W3d1LGJhLHJzLGRzXSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxFNz0oKCk9PntjbGFz'@;
put 'cyBjIGV4dGVuZHMgQzd7Y29uc3RydWN0b3IoYSxkLGgsZix2KXtzdXBlcihhLCR5LGQsaCxmLHYpLHRoaXMuaW5kZXg9MX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2UoRG8pLEdlKERzKSxHZShkMSwxMCksR2UoRW8pLEdlKEppKSl9LGMuXHUw'@;
put 'Mjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsImNsclNlbGVjdCIsIiJdXSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmVHIoImNsci1zZWxlY3QiLCEwKX0sZmVhdHVyZXM6W3dhXX0pLGN9KSgpLGtaZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9y'@;
put 'KCl7VHMuYWRkSWNvbnModmgsYmgpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9a2koe3R5cGU6Y30pLGMuXHUwMjc1aW5qPUFyKHtpbXBvcnRzOltSYSxSYyxBcyxhdSxhdV19KSxjfSkoKSx3ZGU9KCgpPT57Y2xhc3MgYyBl'@;
put 'eHRlbmRzIHc3e31yZXR1cm4gYy5cdTAyNzVmYWM9KCgpPT57bGV0IGw7cmV0dXJuIGZ1bmN0aW9uKGQpe3JldHVybihsfHwobD1ZcyhjKSkpKGR8fGMpfX0pKCksYy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLXRleHRhcmVhLWNvbnRhaW5lciJdXSxob3N0VmFyczo2'@;
put 'LGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmVHIoImNsci1mb3JtLWNvbnRyb2wiLCEwKSgiY2xyLWZvcm0tY29udHJvbC1kaXNhYmxlZCIsbnVsbD09ZC5jb250cm9sP251bGw6ZC5jb250cm9sLmRpc2FibGVkKSgiY2xyLXJvdyIsZC5hZGRHcmlkKCkpfSxmZWF0dXJlczpbZGEo'@;
put 'W2tkLGYxLENoLERkXSksd2FdLG5nQ29udGVudFNlbGVjdG9yczpEVmUsZGVjbHM6MTAsdmFyczo3LGNvbnN0czpbWzQsIm5nSWYiXSxbMSwiY2xyLWNvbnRyb2wtY29udGFpbmVyIiwzLCJuZ0NsYXNzIl0sWzEsImNsci10ZXh0YXJlYS13cmFwcGVyIl0sWyJjbGFzcyIsImNsci12YWxpZGF0'@;
put 'ZS1pY29uIiwic2hhcGUiLCJleGNsYW1hdGlvbi1jaXJjbGUiLCJzdGF0dXMiLCJkYW5nZXIiLCJhcmlhLWhpZGRlbiIsInRydWUiLDQsIm5nSWYiXSxbImNsYXNzIiwiY2xyLXZhbGlkYXRlLWljb24iLCJzaGFwZSIsImNoZWNrLWNpcmNsZSIsInN0YXR1cyIsInN1Y2Nlc3MiLCJhcmlhLWhp'@;
put 'ZGRlbiIsInRydWUiLDQsIm5nSWYiXSxbInNoYXBlIiwiZXhjbGFtYXRpb24tY2lyY2xlIiwic3RhdHVzIiwiZGFuZ2VyIiwiYXJpYS1oaWRkZW4iLCJ0cnVlIiwxLCJjbHItdmFsaWRhdGUtaWNvbiJdLFsic2hhcGUiLCJjaGVjay1jaXJjbGUiLCJzdGF0dXMiLCJzdWNjZXNzIiwiYXJpYS1o'@;
put 'aWRkZW4iLCJ0cnVlIiwxLCJjbHItdmFsaWRhdGUtaWNvbiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKHNhKGtWZSksWXIoMCksZ3QoMSxJVmUsMSwwLCJsYWJlbCIsMCksZGUoMiwiZGl2IiwxKSgzLCJkaXYiLDIpLFlyKDQsMSksZ3QoNSxSVmUsMSwwLCJjZHMtaWNvbiIsMyko'@;
put 'NixMVmUsMSwwLCJjZHMtaWNvbiIsNCksaGUoKSxndCg3LE9WZSwxLDAsIm5nLWNvbnRlbnQiLDApKDgsUFZlLDEsMCwibmctY29udGVudCIsMCkoOSxGVmUsMSwwLCJuZy1jb250ZW50IiwwKSxoZSgpKSwyJmEmJihmZSgpLE1lKCJuZ0lmIiwhZC5sYWJlbCYmZC5hZGRHcmlkKCkpLGZlKCks'@;
put 'TWUoIm5nQ2xhc3MiLGQuY29udHJvbENsYXNzKCkpLGZlKDMpLE1lKCJuZ0lmIixkLnNob3dJbnZhbGlkKSxmZSgpLE1lKCJuZ0lmIixkLnNob3dWYWxpZCksZmUoKSxNZSgibmdJZiIsZC5zaG93SGVscGVyKSxmZSgpLE1lKCJuZ0lmIixkLnNob3dJbnZhbGlkKSxmZSgpLE1lKCJuZ0lmIixk'@;
put 'LnNob3dWYWxpZCkpfSxkZXBlbmRlbmNpZXM6W3d1LGJhLHJzLGRzXSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxRTD0oKCk9PntjbGFzcyBjIGV4dGVuZHMgQzd7Y29uc3RydWN0b3IoYSxkLGgsZix2KXtzdXBlcihhLHdkZSxkLGgsZix2KSx0aGlzLmluZGV4PTF9fXJldHVybiBjLlx1MDI3'@;
put 'NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKERvKSxHZShEcyksR2UoZDEsMTApLEdlKEVvKSxHZShKaSkpfSxjLlx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJjbHJUZXh0YXJlYSIsIiJdXSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihh'@;
put 'LGQpezImYSYmVHIoImNsci10ZXh0YXJlYSIsITApfSxmZWF0dXJlczpbd2FdfSksY30pKCksRFplPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXtUcy5hZGRJY29ucyh2aCxiaCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1v'@;
put 'ZD1raSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9QXIoe2ltcG9ydHM6W1JhLFJjLEFzLGF1LGF1XX0pLGN9KSgpLENkZT0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9a2koe3R5cGU6Y30pLGMuXHUwMjc1'@;
put 'aW5qPUFyKHtpbXBvcnRzOltSYSxhdSxMVWUsTlVlLHlaZSx3WmUsdGRlLHhaZSxUWmUsa1plLERaZSxBWmUsVlVlLENaZV19KSxjfSkoKSxTZGU9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPWtpKHt0'@;
put 'eXBlOmN9KSxjLlx1MDI3NWluaj1Bcih7aW1wb3J0czpbUmFdfSksY30pKCksSVplPSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyBUWXtjb25zdHJ1Y3RvcihhLGQsaCxmLHYsTSxELFoscmUpe3N1cGVyKGEsZCxoLGYsdixNLEQsWixyZSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXty'@;
put 'ZXR1cm4gbmV3KGF8fGMpKEdlKEppKSxHZShFWSw4KSxHZSh2cyw4KSxHZShXYSksR2UoRG8pLEdlKHhZLDgpLEdlKHBtKSxHZShQTCksR2UoRXMpKX0sYy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwiY2RrRHJhZyIsIiJdXSxmZWF0dXJlczpbd2FdfSksY30pKCksUlpl'@;
put 'PSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD1raSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9QXIoe30pLGN9KSgpLExaZT0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7'@;
put 'cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9a2koe3R5cGU6Y30pLGMuXHUwMjc1aW5qPUFyKHtpbXBvcnRzOltSYV19KSxjfSkoKTtjbGFzcyBlT3t9bGV0IEd4PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLm5iQ2hhbmdlcz0wLHRoaXMuX2NoYW5nZT1uZXcgV259Z2V0'@;
put 'IGNoYW5nZSgpe3JldHVybiB0aGlzLl9jaGFuZ2UuYXNPYnNlcnZhYmxlKCl9Y2hhbmdlU3RhcnQoKXt0aGlzLm5iQ2hhbmdlcysrfWNoYW5nZURvbmUoKXswPT0tLXRoaXMubmJDaGFuZ2VzJiZ0aGlzLl9jaGFuZ2UubmV4dCgpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0'@;
put 'dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSxNbT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMuc3RhdGVEZWJvdW5jZXI9YSx0aGlzLmFjdGl2YXRlZD0hMSx0aGlzLl9zaXplPTAsdGhpcy5fY3VycmVu'@;
put 'dD0xLHRoaXMuX2NoYW5nZT1uZXcgV24sdGhpcy5wcmV2ZW50RW1pdD0hMSx0aGlzLl9zaXplQ2hhbmdlPW5ldyBXbn1nZXQgc2l6ZSgpe3JldHVybiB0aGlzLl9zaXplfXNldCBzaXplKGEpe2NvbnN0IGQ9dGhpcy5fc2l6ZTthIT09ZCYmKHRoaXMucHJldmVudEVtaXR8fHRoaXMuc3RhdGVE'@;
put 'ZWJvdW5jZXIuY2hhbmdlU3RhcnQoKSx0aGlzLl9zaXplPWEsdGhpcy5fY3VycmVudD0wPT09YT8xOk1hdGguZmxvb3IoZC9hKih0aGlzLl9jdXJyZW50LTEpKSsxLHRoaXMucHJldmVudEVtaXR8fCh0aGlzLl9jaGFuZ2UubmV4dCh0aGlzLl9jdXJyZW50KSx0aGlzLl9zaXplQ2hhbmdlLm5l'@;
put 'eHQodGhpcy5fc2l6ZSksdGhpcy5zdGF0ZURlYm91bmNlci5jaGFuZ2VEb25lKCkpKSx0aGlzLnByZXZlbnRFbWl0PSExfWdldCB0b3RhbEl0ZW1zKCl7cmV0dXJuIHRoaXMuX3RvdGFsSXRlbXN8fDB9c2V0IHRvdGFsSXRlbXMoYSl7dGhpcy5fdG90YWxJdGVtcz1hLHRoaXMuY3VycmVudD50'@;
put 'aGlzLmxhc3QmJih0aGlzLmN1cnJlbnQ9dGhpcy5sYXN0KX1nZXQgbGFzdCgpe3JldHVybiB0aGlzLl9sYXN0P3RoaXMuX2xhc3Q6dGhpcy5zaXplPjAmJnRoaXMudG90YWxJdGVtcz9NYXRoLmNlaWwodGhpcy50b3RhbEl0ZW1zL3RoaXMuc2l6ZSk6MX1zZXQgbGFzdChhKXt0aGlzLl9sYXN0'@;
put 'PWF9Z2V0IGNoYW5nZSgpe3JldHVybiB0aGlzLl9jaGFuZ2UuYXNPYnNlcnZhYmxlKCl9Z2V0IHNpemVDaGFuZ2UoKXtyZXR1cm4gdGhpcy5fc2l6ZUNoYW5nZS5hc09ic2VydmFibGUoKX1nZXQgY3VycmVudCgpe3JldHVybiB0aGlzLl9jdXJyZW50fXNldCBjdXJyZW50KGEpe2EhPT10aGlz'@;
put 'Ll9jdXJyZW50JiYodGhpcy5zdGF0ZURlYm91bmNlci5jaGFuZ2VTdGFydCgpLHRoaXMuX2N1cnJlbnQ9YSx0aGlzLl9jaGFuZ2UubmV4dChhKSx0aGlzLnN0YXRlRGVib3VuY2VyLmNoYW5nZURvbmUoKSl9Z2V0IGZpcnN0SXRlbSgpe3JldHVybiAwPT09dGhpcy5fdG90YWxJdGVtcz8tMTow'@;
put 'PT09dGhpcy5zaXplPzA6KHRoaXMuY3VycmVudC0xKSp0aGlzLnNpemV9Z2V0IGxhc3RJdGVtKCl7aWYoMD09PXRoaXMuX3RvdGFsSXRlbXMpcmV0dXJuLTE7aWYoMD09PXRoaXMuc2l6ZSlyZXR1cm4gdGhpcy50b3RhbEl0ZW1zLTE7bGV0IGE9dGhpcy5jdXJyZW50KnRoaXMuc2l6ZS0xO3Jl'@;
put 'dHVybiB0aGlzLnRvdGFsSXRlbXMmJihhPU1hdGgubWluKGEsdGhpcy50b3RhbEl0ZW1zLTEpKSxhfXByZXZpb3VzKCl7dGhpcy5jdXJyZW50PjEmJnRoaXMuY3VycmVudC0tfW5leHQoKXt0aGlzLmN1cnJlbnQ8dGhpcy5sYXN0JiZ0aGlzLmN1cnJlbnQrK31yZXNldFBhZ2VTaXplKGE9ITEp'@;
put 'e3RoaXMucHJldmVudEVtaXQ9YSx0aGlzLnNpemU9MH19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoeHIoR3gpKX0sYy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSx1Zz0oKCk9PntjbGFzcyBje2NvbnN0'@;
put 'cnVjdG9yKGEsZCl7dGhpcy5fcGFnZT1hLHRoaXMuc3RhdGVEZWJvdW5jZXI9ZCx0aGlzLl9jaGFuZ2U9bmV3IFduLHRoaXMuX2FsbD1bXX1nZXQgY2hhbmdlKCl7cmV0dXJuIHRoaXMuX2NoYW5nZS5hc09ic2VydmFibGUoKX1oYXNBY3RpdmVGaWx0ZXJzKCl7Zm9yKGNvbnN0e2ZpbHRlcjph'@;
put 'fW9mIHRoaXMuX2FsbClpZihhJiZhLmlzQWN0aXZlKCkpcmV0dXJuITA7cmV0dXJuITF9Z2V0QWN0aXZlRmlsdGVycygpe2NvbnN0IGE9W107Zm9yKGNvbnN0e2ZpbHRlcjpkfW9mIHRoaXMuX2FsbClkJiZkLmlzQWN0aXZlKCkmJmEucHVzaChkKTtyZXR1cm4gYX1hZGQoYSl7Y29uc3QgZD1h'@;
put 'LmNoYW5nZXMuc3Vic2NyaWJlKCgpPT50aGlzLnJlc2V0UGFnZUFuZEVtaXRGaWx0ZXJDaGFuZ2UoW2FdKSk7bGV0IGg9ITE7Y29uc3QgZj1uZXcgdE8oYSwoKT0+e2lmKGgpcmV0dXJuO2QudW5zdWJzY3JpYmUoKTtjb25zdCB2PXRoaXMuX2FsbC5maW5kSW5kZXgoTT0+TS5maWx0ZXI9PT1h'@;
put 'KTt2Pj0wJiZ0aGlzLl9hbGwuc3BsaWNlKHYsMSksYS5pc0FjdGl2ZSgpJiZ0aGlzLnJlc2V0UGFnZUFuZEVtaXRGaWx0ZXJDaGFuZ2UoW10pLGg9ITB9KTtyZXR1cm4gdGhpcy5fYWxsLnB1c2goZiksYS5pc0FjdGl2ZSgpJiZ0aGlzLnJlc2V0UGFnZUFuZEVtaXRGaWx0ZXJDaGFuZ2UoW2Fd'@;
put 'KSxmfWFjY2VwdHMoYSl7Zm9yKGNvbnN0e2ZpbHRlcjpkfW9mIHRoaXMuX2FsbClpZihkJiZkLmlzQWN0aXZlKCkmJiFkLmFjY2VwdHMoYSkpcmV0dXJuITE7cmV0dXJuITB9cmVzZXRQYWdlQW5kRW1pdEZpbHRlckNoYW5nZShhKXt0aGlzLnN0YXRlRGVib3VuY2VyLmNoYW5nZVN0YXJ0KCks'@;
put 'dGhpcy5fcGFnZS5jdXJyZW50PTEsdGhpcy5fY2hhbmdlLm5leHQoYSksdGhpcy5zdGF0ZURlYm91bmNlci5jaGFuZ2VEb25lKCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHhyKE1tKSx4cihHeCkpfSxjLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMs'@;
put 'ZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpO2NsYXNzIHRPe2NvbnN0cnVjdG9yKGwsYSl7dGhpcy5maWx0ZXI9bCx0aGlzLnVucmVnaXN0ZXI9YX19bGV0IG5PPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5maWx0ZXJzPWF9Z2V0IGZpbHRlcigpe3JldHVybiB0aGlzLnJl'@;
put 'Z2lzdGVyZWQmJnRoaXMucmVnaXN0ZXJlZC5maWx0ZXJ9bmdPbkRlc3Ryb3koKXt0aGlzLmRlbGV0ZUZpbHRlcigpfXNldEZpbHRlcihhKXt0aGlzLmRlbGV0ZUZpbHRlcigpLGEgaW5zdGFuY2VvZiB0Tz90aGlzLnJlZ2lzdGVyZWQ9YTphJiYodGhpcy5yZWdpc3RlcmVkPXRoaXMuZmlsdGVy'@;
put 'cy5hZGQoYSkpfWRlbGV0ZUZpbHRlcigpe3RoaXMucmVnaXN0ZXJlZCYmKHRoaXMucmVnaXN0ZXJlZC51bnJlZ2lzdGVyKCksZGVsZXRlIHRoaXMucmVnaXN0ZXJlZCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKHVnKSl9LGMuXHUwMjc1ZGly'@;
put 'PUVyKHt0eXBlOmN9KSxjfSkoKTtjbGFzcyBNZGV7Y29uc3RydWN0b3IobCl7dGhpcy51dGlscz1sfWtleVVwKGwpe2NvbnN0IGE9dGhpcy51dGlscy5jcmVhdGVOZXh0Q2VsbENvb3JkcyhsKTtpZigwPT09bC55KXJldHVybiBhO2EueT1sLnktMTtjb25zdCBkPXRoaXMudXRpbHMuaXNBY3Rp'@;
put 'b25DZWxsKGwpO3JldHVybiB0aGlzLnV0aWxzLmlzU2luZ2xlQ2VsbEV4cGFuZGVkUm93KGEueSkmJiFkJiZ0aGlzLnV0aWxzLmlzRGV0YWlsc1JvdyhhLnkpP2EueD0wOnRoaXMudXRpbHMuaXNEZXRhaWxzUm93KGEueSkmJihkP2EueT1hLnktMTphLng9YS54LXRoaXMudXRpbHMuYWN0aW9u'@;
put 'Q2VsbENvdW50KGwueSkpLGF9a2V5RG93bihsKXtjb25zdCBhPXRoaXMudXRpbHMuY3JlYXRlTmV4dENlbGxDb29yZHMobCk7aWYobC55Pj0odGhpcy51dGlscy5yb3dzP3RoaXMudXRpbHMucm93cy5sZW5ndGgtMTowKSlyZXR1cm4gYTtjb25zdCBoPXRoaXMudXRpbHMuaXNBY3Rpb25DZWxs'@;
put 'KGwpO3JldHVybiBhLnk9bC55KzEsIWgmJnRoaXMudXRpbHMuaXNSb3dSZXBsYWNlZChhLnkpJiYoYS55PWEueSsxLGEueD10aGlzLnV0aWxzLmlzU2luZ2xlQ2VsbEV4cGFuZGVkUm93KGEueSk/MDphLngtdGhpcy51dGlscy5hY3Rpb25DZWxsQ291bnQobC55KSksYX1rZXlMZWZ0KGwpe2Nv'@;
put 'bnN0IGE9dGhpcy51dGlscy5jcmVhdGVOZXh0Q2VsbENvb3JkcyhsKTtyZXR1cm4gMD09PWwueHx8KGEueD1sLngtMSksYX1rZXlSaWdodChsKXtjb25zdCBhPXRoaXMudXRpbHMuY3JlYXRlTmV4dENlbGxDb29yZHMobCksZD10aGlzLnV0aWxzLnJvd3M/Lmxlbmd0aC0xP3RoaXMudXRpbHMu'@;
put 'Z2V0Q2VsbHNGb3JSb3coMCkubGVuZ3RoLTE6MDtyZXR1cm4gYS54PWwueDxkP2EueCsxOmEueCxhfWtleUVuZChsLGEpe2NvbnN0IGQ9dGhpcy51dGlscy5jcmVhdGVOZXh0Q2VsbENvb3JkcyhsKSxoPXRoaXMudXRpbHMucm93cz90aGlzLnV0aWxzLnJvd3MubGVuZ3RoLTE6MDtyZXR1cm4g'@;
put 'ZC54PWg/dGhpcy51dGlscy5nZXRDZWxsc0ZvclJvdygwKS5sZW5ndGgtMTowLGEmJihkLnk9aCx0aGlzLnV0aWxzLmlzRGV0YWlsc1JvdyhkLnkpJiYoZC54PXRoaXMudXRpbHMuZ2V0Q2VsbHNGb3JSb3coZC55KS5sZW5ndGgtMSkpLGR9a2V5SG9tZShsLGEpe2NvbnN0IGQ9dGhpcy51dGls'@;
put 'cy5jcmVhdGVOZXh0Q2VsbENvb3JkcyhsKTtyZXR1cm4gZC54PTAsYSYmKGQueT0wKSxkfWtleVBhZ2VVcChsKXtjb25zdCBhPXRoaXMudXRpbHMuY3JlYXRlTmV4dENlbGxDb29yZHMobCksZD10aGlzLnV0aWxzLml0ZW1zUGVyUGFnZTtyZXR1cm4gYS55PWwueS1kPjA/bC55LWQrMToxLHRo'@;
put 'aXMudXRpbHMuaXNBY3Rpb25DZWxsKGwpP3RoaXMudXRpbHMuaXNEZXRhaWxzUm93KGEueSkmJihhLnk9YS55LTEpOnRoaXMudXRpbHMuaXNEZXRhaWxzUm93KGEueSk/YS54PXRoaXMudXRpbHMuaXNTaW5nbGVDZWxsRXhwYW5kZWRSb3coYS55KT8wOmEueC10aGlzLnV0aWxzLmFjdGlvbkNl'@;
put 'bGxDb3VudChsLnkpOnRoaXMudXRpbHMuaXNSb3dSZXBsYWNlZChhLnkpJiYoYS55PWEueSsxLGEueD10aGlzLnV0aWxzLmlzU2luZ2xlQ2VsbEV4cGFuZGVkUm93KGEueSk/MDphLngtdGhpcy51dGlscy5hY3Rpb25DZWxsQ291bnQobC55KSksYX1rZXlQYWdlRG93bihsKXtjb25zdCBhPXRo'@;
put 'aXMudXRpbHMuY3JlYXRlTmV4dENlbGxDb29yZHMobCksZD10aGlzLnV0aWxzLnJvd3M/dGhpcy51dGlscy5yb3dzLmxlbmd0aC0xOjAsaD10aGlzLnV0aWxzLml0ZW1zUGVyUGFnZTtyZXR1cm4gYS55PWwueStoPj1kP2Q6bC55K2gsdGhpcy51dGlscy5pc0FjdGlvbkNlbGwobCkmJnRoaXMu'@;
put 'dXRpbHMuaXNEZXRhaWxzUm93KGEueSk/YS55PWEueS0xOnRoaXMudXRpbHMuaXNEZXRhaWxzUm93KGEueSkmJnRoaXMudXRpbHMuaXNTaW5nbGVDZWxsRXhwYW5kZWRSb3coYS55KT9hLng9MDp0aGlzLnV0aWxzLmlzRGV0YWlsc1JvdyhhLnkpP2EueD1hLngtdGhpcy51dGlscy5hY3Rpb25D'@;
put 'ZWxsQ291bnQobC55KTp0aGlzLnV0aWxzLmlzUm93UmVwbGFjZWQoYS55KSYmKGEueT1hLnkrMSxhLng9dGhpcy51dGlscy5pc1NpbmdsZUNlbGxFeHBhbmRlZFJvdyhhLnkpPzA6YS54LXRoaXMudXRpbHMuYWN0aW9uQ2VsbENvdW50KGwueSkpLGF9fWNsYXNzIHhkZSBleHRlbmRzIE1kZXtj'@;
put 'b25zdHJ1Y3RvcihsKXtzdXBlcihsKX1rZXlVcChsKXtjb25zdCBhPXRoaXMudXRpbHMuY3JlYXRlTmV4dENlbGxDb29yZHMobCk7aWYoMD09PWwueSlyZXR1cm4gYTtpZihhLnk9bC55LTEsdGhpcy51dGlscy5pc0FjdGlvbkNlbGwobCkpdGhpcy51dGlscy5pc0RldGFpbHNSb3coYS55KSYm'@;
put 'YS55PjAmJihhLnk9YS55LTEpO2Vsc2Ugc3dpdGNoKHRoaXMudXRpbHMuaXNSb3dSZXBsYWNlZChsLnkpJiYoYS55PWEueS0xKSwhMCl7Y2FzZSB0aGlzLnV0aWxzLmlzRGV0YWlsc1JvdyhhLnkpOmEueD0wO2JyZWFrO2Nhc2UhMT09PXRoaXMudXRpbHMuaXNEZXRhaWxzUm93KGwueSk6YS54'@;
put 'PWwueDticmVhaztkZWZhdWx0OmEueD10aGlzLnV0aWxzLmFjdGlvbkNlbGxDb3VudChhLnkpfXJldHVybiBhfWtleURvd24obCl7Y29uc3QgYT10aGlzLnV0aWxzLmNyZWF0ZU5leHRDZWxsQ29vcmRzKGwpLGQ9dGhpcy51dGlscy5yb3dzP3RoaXMudXRpbHMucm93cy5sZW5ndGgtMTowO3Jl'@;
put 'dHVybiBsLnk+PWR8fChhLnk9bC55KzEsdGhpcy51dGlscy5pc0FjdGlvbkNlbGwobCk/YS55PWEueTxkP2EueSsxOmEueToodGhpcy51dGlscy5pc1Jvd1JlcGxhY2VkKGEueSkmJihhLnk9YS55KzEpLGEueD10aGlzLnV0aWxzLmlzRGV0YWlsc1JvdyhhLnkpPzA6dGhpcy51dGlscy5hY3Rp'@;
put 'b25DZWxsQ291bnQoYS55KSkpLGF9a2V5TGVmdChsKXtjb25zdCBhPXRoaXMudXRpbHMuY3JlYXRlTmV4dENlbGxDb29yZHMobCk7cmV0dXJuIHRoaXMudXRpbHMuaXNEZXRhaWxzUm93KGwueSl8fHRoaXMudXRpbHMuaXNSb3dSZXBsYWNlZChsLnkpPygwIT09bC54P2EueD1sLngtMTp0aGlz'@;
put 'LnV0aWxzLmlzQWN0aW9uQ2VsbChsKXx8KGEueT1sLnktMSxhLng9dGhpcy51dGlscy5hY3Rpb25DZWxsQ291bnQoYS55KS0xKSxhKTpzdXBlci5rZXlMZWZ0KGwpfWtleVJpZ2h0KGwpe2NvbnN0IGE9dGhpcy51dGlscy5jcmVhdGVOZXh0Q2VsbENvb3JkcyhsKTtpZighdGhpcy51dGlscy5p'@;
put 'c0RldGFpbHNSb3cobC55KSYmIXRoaXMudXRpbHMuaXNSb3dSZXBsYWNlZChsLnkpKXJldHVybiBzdXBlci5rZXlSaWdodChsKTtjb25zdCBkPXRoaXMudXRpbHMucm93cz8ubGVuZ3RoLTE/dGhpcy51dGlscy5nZXRDZWxsc0ZvclJvdygwKS5sZW5ndGgtMTowO3JldHVybiBsLng+PWR8fCh0'@;
put 'aGlzLnV0aWxzLmlzQWN0aW9uQ2VsbChsKSYmbC54PT09dGhpcy51dGlscy5hY3Rpb25DZWxsQ291bnQobC54KS0xJiZ0aGlzLnV0aWxzLmlzUm93UmVwbGFjZWQobC55KSYmIXRoaXMudXRpbHMuaXNEZXRhaWxzUm93KGwueSk/KGEueT1sLnkrMSxhLng9MCk6YS54PWwueCsxKSxhfWtleUVu'@;
put 'ZChsLGEpe2NvbnN0IGQ9dGhpcy51dGlscy5jcmVhdGVOZXh0Q2VsbENvb3JkcyhsKTtyZXR1cm4hdGhpcy51dGlscy5pc0RldGFpbHNSb3cobC55KSYmIXRoaXMudXRpbHMuaXNSb3dSZXBsYWNlZChsLnkpfHxhP3N1cGVyLmtleUVuZChsLGEpOihkLng9dGhpcy51dGlscy5nZXRDZWxsc0Zv'@;
put 'clJvdyhsLnkpLmxlbmd0aC0xLGQpfWtleUhvbWUobCxhKXtjb25zdCBkPXRoaXMudXRpbHMuY3JlYXRlTmV4dENlbGxDb29yZHMobCk7cmV0dXJuIHRoaXMudXRpbHMuaXNEZXRhaWxzUm93KGwueSl8fHRoaXMudXRpbHMuaXNSb3dSZXBsYWNlZChsLnkpPyhkLng9MCxkLnk9bC55LTEsYSYm'@;
put 'KGQueT0wKSxkKTpzdXBlci5rZXlIb21lKGwsYSl9a2V5UGFnZVVwKGwpe2NvbnN0IGE9dGhpcy51dGlscy5jcmVhdGVOZXh0Q2VsbENvb3JkcyhsKSxkPXRoaXMudXRpbHMuaXRlbXNQZXJQYWdlO3JldHVybiBhLnk9bC55LWQ+MD9sLnktZCsxOjEsdGhpcy51dGlscy5pc0FjdGlvbkNlbGwo'@;
put 'bCk/dGhpcy51dGlscy5pc0RldGFpbHNSb3coYS55KSYmKGEueT1hLnktMSk6dGhpcy51dGlscy5pc1Jvd1JlcGxhY2VkKGEueSk/dGhpcy51dGlscy5pc0RldGFpbHNSb3coYS55KXx8KGEueT1hLnkrMSxhLng9MCk6dGhpcy51dGlscy5pc0RldGFpbHNSb3cobC55KT90aGlzLnV0aWxzLmlz'@;
put 'RGV0YWlsc1JvdyhsLnkpJiYodGhpcy51dGlscy5pc0RldGFpbHNSb3coYS55KXx8KGEueD10aGlzLnV0aWxzLmFjdGlvbkNlbGxDb3VudChhLnkpKSk6dGhpcy51dGlscy5pc0RldGFpbHNSb3coYS55KSYmKGEueD0wKSxhfWtleVBhZ2VEb3duKGwpe2NvbnN0IGE9dGhpcy51dGlscy5jcmVh'@;
put 'dGVOZXh0Q2VsbENvb3JkcyhsKSxkPXRoaXMudXRpbHMucm93cz90aGlzLnV0aWxzLnJvd3MubGVuZ3RoLTE6MCxoPXRoaXMudXRpbHMuaXRlbXNQZXJQYWdlO3JldHVybiBhLnk9bC55K2g+PWQ/ZDpsLnkraCx0aGlzLnV0aWxzLmlzQWN0aW9uQ2VsbChsKT90aGlzLnV0aWxzLmlzRGV0YWls'@;
put 'c1JvdyhhLnkpJiYoYS55PWEueS0xKTp0aGlzLnV0aWxzLmlzUm93UmVwbGFjZWQoYS55KT9hLnk8ZCYmIXRoaXMudXRpbHMuaXNEZXRhaWxzUm93KGEueSkmJihhLnk9YS55KzEpOnRoaXMudXRpbHMuaXNEZXRhaWxzUm93KGwueSkmJiF0aGlzLnV0aWxzLmlzRGV0YWlsc1JvdyhhLnkpP2Eu'@;
put 'eD1sLngrdGhpcy51dGlscy5hY3Rpb25DZWxsQ291bnQoYS55KTp0aGlzLnV0aWxzLmlzRGV0YWlsc1JvdyhhLnkpJiYoYS54PTApLGF9fWNsYXNzIE9aZSBleHRlbmRzIHhkZXtjb25zdHJ1Y3RvcihsKXtzdXBlcihsKX1rZXlVcChsKXtjb25zdCBhPXRoaXMudXRpbHMuY3JlYXRlTmV4dENl'@;
put 'bGxDb29yZHMobCk7aWYoMD09PWwueSlyZXR1cm4gYTtpZihhLnk9bC55LTEsdGhpcy51dGlscy5pc1NpbmdsZUNlbGxFeHBhbmRlZFJvdyhhLnkpKXJldHVybiBzdXBlci5rZXlVcChsKTtjb25zdCBkPXRoaXMudXRpbHMuaXNBY3Rpb25DZWxsKGwpO3JldHVybiBkJiZ0aGlzLnV0aWxzLmlz'@;
put 'RGV0YWlsc1JvdyhhLnkpP2EueT1hLnktMTp0aGlzLnV0aWxzLmlzUm93UmVwbGFjZWQoYS55KT8oYS55PWEueS0xLHRoaXMudXRpbHMuaXNEZXRhaWxzUm93KGEueSl8fChhLng9bC54K3RoaXMudXRpbHMuYWN0aW9uQ2VsbENvdW50KGEueSkpKTp0aGlzLnV0aWxzLmlzRGV0YWlsc1Jvdyhs'@;
put 'LnkpJiYhdGhpcy51dGlscy5pc0RldGFpbHNSb3coYS55KT9hLng9bC54K3RoaXMudXRpbHMuYWN0aW9uQ2VsbENvdW50KGEueSk6IWQmJnRoaXMudXRpbHMuaXNEZXRhaWxzUm93KGEueSkmJihhLng9bC54LXRoaXMudXRpbHMuYWN0aW9uQ2VsbENvdW50KGwueSkpLGF9a2V5RG93bihsKXtj'@;
put 'b25zdCBhPXRoaXMudXRpbHMuY3JlYXRlTmV4dENlbGxDb29yZHMobCksZD10aGlzLnV0aWxzLnJvd3M/dGhpcy51dGlscy5yb3dzLmxlbmd0aC0xOjAsaD1kP3RoaXMudXRpbHMuZ2V0Q2VsbHNGb3JSb3coMCkubGVuZ3RoLTE6MDtyZXR1cm4gbC55Pj1kP2E6KGEueT1sLnkrMSx0aGlzLnV0'@;
put 'aWxzLmlzU2luZ2xlQ2VsbEV4cGFuZGVkUm93KGEueSk/c3VwZXIua2V5RG93bihsKToodGhpcy51dGlscy5pc0FjdGlvbkNlbGwobCl8fHRoaXMudXRpbHMuaXNSb3dSZXBsYWNlZChhLnkpP2EueT1hLnk8ZD9hLnkrMTphLnktMTphLng9dGhpcy51dGlscy5nZXRDZWxsc0ZvclJvdyhsLnkp'@;
put 'Lmxlbmd0aD5oP2wueC10aGlzLnV0aWxzLmFjdGlvbkNlbGxDb3VudChsLnkpOmwueCt0aGlzLnV0aWxzLmFjdGlvbkNlbGxDb3VudChhLnkpLGEpKX1rZXlMZWZ0KGwpe3JldHVybiBzdXBlci5rZXlMZWZ0KGwpfWtleVJpZ2h0KGwpe3JldHVybiBzdXBlci5rZXlSaWdodChsKX1rZXlFbmQo'@;
put 'bCxhKXtyZXR1cm4gc3VwZXIua2V5RW5kKGwsYSl9a2V5SG9tZShsLGEpe3JldHVybiBzdXBlci5rZXlIb21lKGwsYSl9a2V5UGFnZVVwKGwpe2NvbnN0IGE9dGhpcy51dGlscy5jcmVhdGVOZXh0Q2VsbENvb3JkcyhsKSxkPXRoaXMudXRpbHMuaXRlbXNQZXJQYWdlO3JldHVybiBhLnk9bC55'@;
put 'LWQ+MD9sLnktZCsxOjEsdGhpcy51dGlscy5pc1NpbmdsZUNlbGxFeHBhbmRlZFJvdyhhLnkpP3N1cGVyLmtleVBhZ2VVcChsKToodGhpcy51dGlscy5pc0FjdGlvbkNlbGwobCk/dGhpcy51dGlscy5pc0RldGFpbHNSb3coYS55KSYmKGEueT1hLnktMSk6dGhpcy51dGlscy5pc1Jvd1JlcGxh'@;
put 'Y2VkKGEueSk/dGhpcy51dGlscy5pc0RldGFpbHNSb3coYS55KXx8KGEueT1hLnkrMSxhLng9bC54K3RoaXMudXRpbHMuYWN0aW9uQ2VsbENvdW50KGEueSkpOnRoaXMudXRpbHMuaXNEZXRhaWxzUm93KGwueSkmJiF0aGlzLnV0aWxzLmlzRGV0YWlsc1JvdyhhLnkpP2EueD1sLngrdGhpcy51'@;
put 'dGlscy5hY3Rpb25DZWxsQ291bnQoYS55KTp0aGlzLnV0aWxzLmlzRGV0YWlsc1JvdyhhLnkpJiYoYS54PWwueC10aGlzLnV0aWxzLmFjdGlvbkNlbGxDb3VudChsLnkpKSxhKX1rZXlQYWdlRG93bihsKXtjb25zdCBhPXRoaXMudXRpbHMuY3JlYXRlTmV4dENlbGxDb29yZHMobCksZD10aGlz'@;
put 'LnV0aWxzLnJvd3M/dGhpcy51dGlscy5yb3dzLmxlbmd0aC0xOjAsaD10aGlzLnV0aWxzLml0ZW1zUGVyUGFnZTtyZXR1cm4gYS55PWwueStoPj1kP2Q6bC55K2gsdGhpcy51dGlscy5pc1NpbmdsZUNlbGxFeHBhbmRlZFJvdyhhLnkpP3N1cGVyLmtleVBhZ2VEb3duKGwpOih0aGlzLnV0aWxz'@;
put 'LmlzQWN0aW9uQ2VsbChsKT90aGlzLnV0aWxzLmlzRGV0YWlsc1JvdyhhLnkpJiYoYS55PWEueS0xKTp0aGlzLnV0aWxzLmlzUm93UmVwbGFjZWQoYS55KSYmIXRoaXMudXRpbHMuaXNEZXRhaWxzUm93KGEueSk/YS55PGQmJihhLnk9YS55KzEsYS54PWwueCt0aGlzLnV0aWxzLmFjdGlvbkNl'@;
put 'bGxDb3VudChhLnkpKTp0aGlzLnV0aWxzLmlzRGV0YWlsc1JvdyhsLnkpJiYhdGhpcy51dGlscy5pc0RldGFpbHNSb3coYS55KT9hLng9bC54K3RoaXMudXRpbHMuYWN0aW9uQ2VsbENvdW50KGEueSk6dGhpcy51dGlscy5pc0RldGFpbHNSb3coYS55KSYmKGEueD1sLngtdGhpcy51dGlscy5h'@;
put 'Y3Rpb25DZWxsQ291bnQobC55KSksYSl9fWNsYXNzIFBaZXtjb25zdHJ1Y3RvcihsLGEpe3RoaXMuaG9zdD1sLHRoaXMuY29uZmlnPWF9Z2V0IGdyaWQoKXtyZXR1cm4gdGhpcy5ob3N0Py5xdWVyeVNlbGVjdG9yKHRoaXMuY29uZmlnLmtleUdyaWQpfWdldCByb3dzKCl7cmV0dXJuIHRoaXMu'@;
put 'aG9zdD8ucXVlcnlTZWxlY3RvckFsbCh0aGlzLmNvbmZpZy5rZXlHcmlkUm93cyl9Z2V0IGNlbGxzKCl7cmV0dXJuIHRoaXMuaG9zdD8ucXVlcnlTZWxlY3RvckFsbCh0aGlzLmNvbmZpZy5rZXlHcmlkQ2VsbHMpfWdldCBjdXJyZW50Q2VsbENvb3JkaW5hdGVzKCl7Y29uc3QgbD10aGlzLmNl'@;
put 'bGxzP0FycmF5LmZyb20odGhpcy5jZWxscykuZmluZChoPT4iMCI9PT1oLmdldEF0dHJpYnV0ZSgidGFiaW5kZXgiKSk6bnVsbCxhPWw/bC5jbG9zZXN0KHRoaXMuY29uZmlnLmtleUdyaWRSb3dzKTpudWxsO3JldHVybnt4OmEmJmw/QXJyYXkuZnJvbShhLnF1ZXJ5U2VsZWN0b3JBbGwodGhp'@;
put 'cy5jb25maWcua2V5R3JpZENlbGxzKSkuaW5kZXhPZihsKTowLHk6YSYmbCYmdGhpcy5yb3dzP0FycmF5LmZyb20odGhpcy5yb3dzKS5pbmRleE9mKGEpOjB9fWdldCBpdGVtc1BlclBhZ2UoKXtyZXR1cm4gTWF0aC5mbG9vcih0aGlzLmhvc3Q/LnF1ZXJ5U2VsZWN0b3IoIi5kYXRhZ3JpZCIp'@;
put 'LmNsaWVudEhlaWdodC90aGlzLnJvd3NbMF0uY2xpZW50SGVpZ2h0KS0xfHwwfWdldE5leHRJdGVtQ29vcmRpbmF0ZShsKXtjb25zdCBhPXRoaXMuY3VycmVudENlbGxDb29yZGluYXRlcyxkPXRoaXMuZ2V0TmF2U3RyYXRlZ3koYSk7c3dpdGNoKGwua2V5KXtjYXNlIGdhLkFycm93VXA6cmV0'@;
put 'dXJuIGQua2V5VXAoYSk7Y2FzZSBnYS5BcnJvd0Rvd246cmV0dXJuIGQua2V5RG93bihhKTtjYXNlInJ0bCI9PT10aGlzLmhvc3QuZGlyP2dhLkFycm93UmlnaHQ6Z2EuQXJyb3dMZWZ0OnJldHVybiBkLmtleUxlZnQoYSk7Y2FzZSJydGwiPT09dGhpcy5ob3N0LmRpcj9nYS5BcnJvd0xlZnQ6'@;
put 'Z2EuQXJyb3dSaWdodDpyZXR1cm4gZC5rZXlSaWdodChhKTtjYXNlIGdhLkhvbWU6cmV0dXJuIGQua2V5SG9tZShhLGwuY3RybEtleSk7Y2FzZSBnYS5FbmQ6cmV0dXJuIGQua2V5RW5kKGEsbC5jdHJsS2V5KTtjYXNlIGdhLlBhZ2VVcDpyZXR1cm4gZC5rZXlQYWdlVXAoYSk7Y2FzZSBnYS5Q'@;
put 'YWdlRG93bjpyZXR1cm4gZC5rZXlQYWdlRG93bihhKTtkZWZhdWx0OnJldHVybiBhfX1nZXRDZWxsc0ZvclJvdyhsKXtyZXR1cm4gdGhpcy5yb3dzW2xdLnF1ZXJ5U2VsZWN0b3JBbGwodGhpcy5jb25maWcua2V5R3JpZENlbGxzKX1pc0V4cGFuZGVkUm93KGwpe2NvbnN0IGE9dGhpcy5yb3dz'@;
put 'W2xdLnF1ZXJ5U2VsZWN0b3IoIi5kYXRhZ3JpZC1yb3ctZGV0YWlsIik7cmV0dXJuISFhJiYibm9uZSIhPT1hLnN0eWxlLmRpc3BsYXl9aXNEZXRhaWxzUm93KGwpe3JldHVybiB0aGlzLnJvd3NbbF0uY2xhc3NMaXN0LmNvbnRhaW5zKCJkYXRhZ3JpZC1yb3ctZGV0YWlsIil9aXNSb3dSZXBs'@;
put 'YWNlZChsKXtyZXR1cm4hIXRoaXMucm93c1tsXS5jbG9zZXN0KCJjbHItZGctcm93LmRhdGFncmlkLXJvdy1yZXBsYWNlZCIpfWlzU2luZ2xlQ2VsbEV4cGFuZGVkUm93KGwpe3JldHVybiAxPT09dGhpcy5yb3dzW2xdPy5xdWVyeVNlbGVjdG9yQWxsKHRoaXMuY29uZmlnLmtleUdyaWRDZWxs'@;
put 'cykubGVuZ3RofWFjdGlvbkNlbGxDb3VudChsKXtyZXR1cm4gdGhpcy5hY3Rpb25DZWxsc0FzQXJyYXkobCkubGVuZ3RofWFjdGlvbkNlbGxzQXNBcnJheShsKXtyZXR1cm4gQXJyYXkuZnJvbSh0aGlzLnJvd3NbbF0ucXVlcnlTZWxlY3RvckFsbCgiLmRhdGFncmlkLXJvdy1zdGlja3kgLmRh'@;
put 'dGFncmlkLWNlbGwsIC5kYXRhZ3JpZC1yb3ctc3RpY2t5IC5kYXRhZ3JpZC1jb2x1bW4iKSl9aXNBY3Rpb25DZWxsKGwpe3JldHVybiEhdGhpcy5hY3Rpb25DZWxsc0FzQXJyYXkobC55KVtsLnhdfWNyZWF0ZU5leHRDZWxsQ29vcmRzKGwpe3JldHVybnt4OmwueCx5OmwueX19Z2V0TmF2U3Ry'@;
put 'YXRlZ3kobCl7c3dpdGNoKCEwKXtjYXNlIHRoaXMuaXNTaW5nbGVDZWxsRXhwYW5kZWRSb3cobC55KTpyZXR1cm4gbmV3IHhkZSh0aGlzKTtjYXNlIHRoaXMuaXNEZXRhaWxzUm93KGwueSk6Y2FzZSB0aGlzLmlzRXhwYW5kZWRSb3cobC55KTpyZXR1cm4gbmV3IE9aZSh0aGlzKTtkZWZhdWx0'@;
put 'OnJldHVybiBuZXcgTWRlKHRoaXMpfX19Y29uc3QgRWRlPVsiYVtocmVmXSIsImFyZWFbaHJlZl0iLCJpbnB1dDpub3QoW2Rpc2FibGVkXSkiLCJidXR0b246bm90KFtkaXNhYmxlZF0pIiwic2VsZWN0Om5vdChbZGlzYWJsZWRdKSIsInRleHRhcmVhOm5vdChbZGlzYWJsZWRdKSIsImlmcmFt'@;
put 'ZSIsIm9iamVjdCIsImVtYmVkIiwiW2NvbnRlbnRlZGl0YWJsZT10cnVlXSIsIltyb2xlPWJ1dHRvbl06bm90KFtkaXNhYmxlZF0pIl07ZnVuY3Rpb24gSFplKGMpe2NvbnN0IGw9RWRlLmpvaW4oIiwiKTtyZXR1cm4gYy5tYXRjaGVzKGwpfWxldCByTz0oKCk9PntjbGFzcyBje2NvbnN0cnVj'@;
put 'dG9yKGEpe3RoaXMuem9uZT1hLHRoaXMuc2tpcEl0ZW1Gb2N1cz0hMSx0aGlzLmxpc3RlbmVyc0FkZGVkPSExLHRoaXMuZGVzdHJveSQ9bmV3IFduLHRoaXMuX2FjdGl2ZUNlbGw9bnVsbCx0aGlzLmNvbmZpZz17a2V5R3JpZFJvd3M6J1tyb2xlPXJvd106bm90KC5kYXRhZ3JpZC1wbGFjZWhv'@;
put 'bGRlcik6bm90KFtzdHlsZSo9ImRpc3BsYXk6IG5vbmUiXSknLGtleUdyaWRDZWxsczoiW3JvbGU9Z3JpZGNlbGxdOm5vdCguZGF0YWdyaWQtaGlkZGVuLWNvbHVtbik6bm90KC5kYXRhZ3JpZC1wbGFjZWhvbGRlci1jb250ZW50KSwgW3JvbGU9Y29sdW1uaGVhZGVyXTpub3QoLmRhdGFncmlk'@;
put 'LWhpZGRlbi1jb2x1bW4pOm5vdCguZGF0YWdyaWQtcGxhY2Vob2xkZXItY29udGVudCksIC5kYXRhZ3JpZC1kZXRhaWwtY2FyZXQiLGtleUdyaWQ6Iltyb2xlPWdyaWRdIn19bmdPbkRlc3Ryb3koKXt0aGlzLmRlc3Ryb3kkLm5leHQoKSx0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCl9YWRkTGlz'@;
put 'dGVuZXJzKCl7dGhpcy5saXN0ZW5lcnNBZGRlZHx8KHRoaXMuem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e3hkKHRoaXMua2V5TmF2VXRpbHMuZ3JpZCwibW91c2Vkb3duIikucGlwZShWMCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKGE9PntpZigxPT09YS5idXR0b25zJiYhYS5jdHJs'@;
put 'S2V5KXtjb25zdCBkPXRoaXMua2V5TmF2VXRpbHMuY2VsbHM/QXJyYXkuZnJvbSh0aGlzLmtleU5hdlV0aWxzLmNlbGxzKS5maW5kKGg9Pmg9PT1hLnRhcmdldHx8aD09PWEudGFyZ2V0LmNsb3Nlc3QodGhpcy5jb25maWcua2V5R3JpZENlbGxzKSk6bnVsbDtkJiZ0aGlzLnNldEFjdGl2ZUNl'@;
put 'bGwoZCx7a2VlcEZvY3VzOkhaZShhLnRhcmdldCl9KX19KSx4ZCh0aGlzLmtleU5hdlV0aWxzLmdyaWQsIndoZWVsIikucGlwZShWMCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKCgpPT57dGhpcy5yZW1vdmVBY3RpdmVDZWxsKCl9KSx4ZCh0aGlzLmtleU5hdlV0aWxzLmdyaWQsImZvY3Vz'@;
put 'b3V0IikucGlwZShmbSgwKSxWMCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKCgpPT57dGhpcy5rZXlOYXZVdGlscy5ncmlkLmNvbnRhaW5zKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpfHx0aGlzLnJlbW92ZUFjdGl2ZUNlbGwoKX0pLHhkKHRoaXMua2V5TmF2VXRpbHMuZ3JpZCwia2V5ZG93'@;
put 'biIpLnBpcGUoVjAodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZShhPT57aWYoKCFhLnRhcmdldC5jbGFzc0xpc3QuY29udGFpbnMoImRyYWctaGFuZGxlIil8fGEua2V5IT09Z2EuQXJyb3dMZWZ0JiZhLmtleSE9PWdhLkFycm93UmlnaHQpJiYoYS5rZXk9PT1nYS5BcnJvd1VwfHxhLmtleT09'@;
put 'PWdhLkFycm93RG93bnx8YS5rZXk9PT1nYS5BcnJvd0xlZnR8fGEua2V5PT09Z2EuQXJyb3dSaWdodHx8YS5rZXk9PT1nYS5FbmR8fGEua2V5PT09Z2EuSG9tZXx8YS5rZXk9PT1nYS5QYWdlVXB8fGEua2V5PT09Z2EuUGFnZURvd24pKXtjb25zdCBkPXRoaXMua2V5TmF2VXRpbHMuZ2V0TmV4'@;
put 'dEl0ZW1Db29yZGluYXRlKGEpLGg9dGhpcy5rZXlOYXZVdGlscy5yb3dzP0FycmF5LmZyb20odGhpcy5rZXlOYXZVdGlscy5nZXRDZWxsc0ZvclJvdyhkLnkpKVtkLnhdOm51bGw7aCYmdGhpcy5zZXRBY3RpdmVDZWxsKGgpLGEucHJldmVudERlZmF1bHQoKX19KX0pLHRoaXMubGlzdGVuZXJz'@;
put 'QWRkZWQ9ITApfWluaXRpYWxpemVLZXlHcmlkKGEpe3RoaXMua2V5TmF2VXRpbHM9bmV3IFBaZShhLHRoaXMuY29uZmlnKSx0aGlzLmFkZExpc3RlbmVycygpLHRoaXMucmVzZXRLZXlHcmlkKCl9cmVzZXRLZXlHcmlkKCl7dGhpcy5rZXlOYXZVdGlscy5jZWxscz8uZm9yRWFjaChkPT5kLnNl'@;
put 'dEF0dHJpYnV0ZSgidGFiaW5kZXgiLCItMSIpKSwodGhpcy5rZXlOYXZVdGlscy5jZWxscz90aGlzLmtleU5hdlV0aWxzLmNlbGxzWzBdOm51bGwpPy5zZXRBdHRyaWJ1dGUoInRhYmluZGV4IiwiMCIpfXJlbW92ZUFjdGl2ZUNlbGwoKXt0aGlzLl9hY3RpdmVDZWxsPW51bGx9Z2V0QWN0aXZl'@;
put 'Q2VsbCgpe3JldHVybiB0aGlzLl9hY3RpdmVDZWxsfXNldEFjdGl2ZUNlbGwoYSx7a2VlcEZvY3VzOmR9PXtrZWVwRm9jdXM6ITF9KXtjb25zdCBoPXRoaXMua2V5TmF2VXRpbHMuY2VsbHM/QXJyYXkuZnJvbSh0aGlzLmtleU5hdlV0aWxzLmNlbGxzKS5maW5kKGY9PiIwIj09PWYuZ2V0QXR0'@;
put 'cmlidXRlKCJ0YWJpbmRleCIpKTpudWxsO2lmKGgmJmguc2V0QXR0cmlidXRlKCJ0YWJpbmRleCIsIi0xIiksYS5zZXRBdHRyaWJ1dGUoInRhYmluZGV4IiwiMCIpLHRoaXMuX2FjdGl2ZUNlbGw9YSwhdGhpcy5za2lwSXRlbUZvY3VzJiYhZCl7bGV0IGY7aWYoImNvbHVtbmhlYWRlciI9PT1h'@;
put 'LmdldEF0dHJpYnV0ZSgicm9sZSIpKWY9YTtlbHNle2NvbnN0IHY9ZnVuY3Rpb24gRlplKGMpe2NvbnN0IGE9Wy4uLkVkZSwnW3RhYmluZGV4PSIwIl06bm90KFtkaXNhYmxlZF0pJ10uam9pbigiLCIpO3JldHVybiBBcnJheS5mcm9tKGMucXVlcnlTZWxlY3RvckFsbChhKSl9KGEpO2Y9di5s'@;
put 'ZW5ndGg/dlswXTphfWYuZm9jdXMoKX19fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHhyKFdhKSl9LGMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCksJHg9KCgpPT57Y2xhc3MgYyBleHRlbmRzIG5Pe2Nv'@;
put 'bnN0cnVjdG9yKGEsZCxoLGYsdixNKXtzdXBlcihhKSx0aGlzLmNvbW1vblN0cmluZ3M9ZCx0aGlzLnNtYXJ0VG9nZ2xlU2VydmljZT1oLHRoaXMucGxhdGZvcm1JZD1mLHRoaXMuZWxlbWVudFJlZj12LHRoaXMua2V5TmF2aWdhdGlvbj1NLHRoaXMub3BlbkNoYW5nZT1uZXcgS3IoITEpLHRo'@;
put 'aXMuYXJpYUV4cGFuZGVkPSExLHRoaXMucG9wb3ZlcklkPU11KCksdGhpcy5zbWFydFBvc2l0aW9uPXtheGlzOmgxLlZFUlRJQ0FMLHNpZGU6UjIuQUZURVIsYW5jaG9yOk9zLkVORCxjb250ZW50Ok9zLkVORH0sdGhpcy5fb3Blbj0hMSx0aGlzLnN1YnM9W10sdGhpcy5zdWJzLnB1c2goaC5v'@;
put 'cGVuQ2hhbmdlLnN1YnNjcmliZShEPT57dGhpcy5vcGVuPUQsdGhpcy5hcmlhRXhwYW5kZWQ9RH0pKX1nZXQgb3Blbigpe3JldHVybiB0aGlzLl9vcGVufXNldCBvcGVuKGEpe3RoaXMub3BlbiE9PShhPSEhYSkmJih0aGlzLnNtYXJ0VG9nZ2xlU2VydmljZS5vcGVuPWEsdGhpcy5vcGVuQ2hh'@;
put 'bmdlLmVtaXQoYSksIWEmJnRsKHRoaXMucGxhdGZvcm1JZCkmJnRoaXMuYW5jaG9yLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKSx0aGlzLmtleU5hdmlnYXRpb24mJih0aGlzLmtleU5hdmlnYXRpb24uc2tpcEl0ZW1Gb2N1cz1hKSx0aGlzLl9vcGVuPWEpfXNldCBjdXN0b21GaWx0ZXIoYSl7dGhp'@;
put 'cy5zZXRGaWx0ZXIoYSl9Z2V0IGFjdGl2ZSgpe3JldHVybiEhdGhpcy5maWx0ZXImJnRoaXMuZmlsdGVyLmlzQWN0aXZlKCl9bmdPbkNoYW5nZXMoKXtzZXRUaW1lb3V0KCgpPT57dGhpcy5zZXRUb2dnbGVCdXR0b25BcmlhTGFiZWwoKX0pfW5nT25EZXN0cm95KCl7c3VwZXIubmdPbkRlc3Ry'@;
put 'b3koKSx0aGlzLnN1YnMuZm9yRWFjaChhPT5hLnVuc3Vic2NyaWJlKCkpfXNldFRvZ2dsZUJ1dHRvbkFyaWFMYWJlbCgpe2NvbnN0IGg9dGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ/LmNsb3Nlc3QoImNsci1kZy1jb2x1bW4iKT8ucXVlcnlTZWxlY3RvcigiLmRhdGFncmlkLWNvbHVt'@;
put 'bi10aXRsZSIpPy50ZXh0Q29udGVudC50cmltKCkudG9Mb2NhbGVMb3dlckNhc2UoKTt0aGlzLnRvZ2dsZUJ1dHRvbkFyaWFMYWJlbD10aGlzLmNvbW1vblN0cmluZ3MucGFyc2UodGhpcy5jb21tb25TdHJpbmdzLmtleXMuZGF0YWdyaWRGaWx0ZXJBcmlhTGFiZWwse0NPTFVNTjpofHwiIn0p'@;
put 'fX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZSh1ZyksR2UoaXMpLEdlKHNjKSxHZShpbyksR2UoSmkpLEdlKHJPLDgpKX0sYy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWRnLWZpbHRlciJdXSx2aWV3UXVlcnk6ZnVuY3Rp'@;
put 'b24oYSxkKXtpZigxJmEmJnFhKEhWZSw1LEppKSwyJmEpe2xldCBoO0NpKGg9U2koKSkmJihkLmFuY2hvcj1oLmZpcnN0KX19LGlucHV0czp7b3BlbjpbTm4uTm9uZSwiY2xyRGdGaWx0ZXJPcGVuIiwib3BlbiJdLGN1c3RvbUZpbHRlcjpbTm4uTm9uZSwiY2xyRGdGaWx0ZXIiLCJjdXN0b21G'@;
put 'aWx0ZXIiXX0sb3V0cHV0czp7b3BlbkNoYW5nZToiY2xyRGdGaWx0ZXJPcGVuQ2hhbmdlIn0sZmVhdHVyZXM6W2RhKFt7cHJvdmlkZTplTyx1c2VFeGlzdGluZzpjfV0pLHdhLHdsXSxuZ0NvbnRlbnRTZWxlY3RvcnM6eW8sZGVjbHM6NCx2YXJzOjEzLGNvbnN0czpbWyJhbmNob3IiLCIiXSxb'@;
put 'InR5cGUiLCJidXR0b24iLCJjbHJQb3BvdmVyQW5jaG9yIiwiIiwiY2xyUG9wb3Zlck9wZW5DbG9zZUJ1dHRvbiIsIiIsMSwiZGF0YWdyaWQtZmlsdGVyLXRvZ2dsZSJdLFsic29saWQiLCIiXSxbImNsYXNzIiwiZGF0YWdyaWQtZmlsdGVyIiwiY2RrVHJhcEZvY3VzIiwiIiwicm9sZSIsImRp'@;
put 'YWxvZyIsMywiaWQiLDQsImNsclBvcG92ZXJDb250ZW50IiwiY2xyUG9wb3ZlckNvbnRlbnRBdCIsImNsclBvcG92ZXJDb250ZW50T3V0c2lkZUNsaWNrVG9DbG9zZSIsImNsclBvcG92ZXJDb250ZW50U2Nyb2xsVG9DbG9zZSJdLFsiY2RrVHJhcEZvY3VzIiwiIiwicm9sZSIsImRpYWxvZyIs'@;
put 'MSwiZGF0YWdyaWQtZmlsdGVyIiwzLCJpZCJdLFsxLCJkYXRhZ3JpZC1maWx0ZXItY2xvc2Utd3JhcHBlciJdLFsidHlwZSIsImJ1dHRvbiIsImNsclBvcG92ZXJDbG9zZUJ1dHRvbiIsIiIsMSwiY2xvc2UiXSxbInNoYXBlIiwid2luZG93LWNsb3NlIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEs'@;
put 'ZCl7MSZhJiYoc2EoKSxkZSgwLCJidXR0b24iLDEsMCksR3QoMiwiY2RzLWljb24iLDIpLGhlKCksZ3QoMyxOVmUsNSwzLCJkaXYiLDMpKSwyJmEmJihUcigiZGF0YWdyaWQtZmlsdGVyLW9wZW4iLGQub3BlbikoImRhdGFncmlkLWZpbHRlcmVkIixkLmFjdGl2ZSksaHIoImFyaWEtbGFiZWwi'@;
put 'LGQudG9nZ2xlQnV0dG9uQXJpYUxhYmVsKSgiYXJpYS1leHBhbmRlZCIsZC5hcmlhRXhwYW5kZWQpKCJhcmlhLWNvbnRyb2xzIixkLnBvcG92ZXJJZCksZmUoMiksaHIoInN0YXR1cyIsZC5hY3RpdmU/ImluZm8iOm51bGwpKCJzaGFwZSIsZC5hY3RpdmU/ImZpbHRlci1ncmlkLWNpcmNsZSI6'@;
put 'ImZpbHRlci1ncmlkIiksZmUoKSxNZSgiY2xyUG9wb3ZlckNvbnRlbnQiLGQub3BlbikoImNsclBvcG92ZXJDb250ZW50QXQiLGQuc21hcnRQb3NpdGlvbikoImNsclBvcG92ZXJDb250ZW50T3V0c2lkZUNsaWNrVG9DbG9zZSIsITApKCJjbHJQb3BvdmVyQ29udGVudFNjcm9sbFRvQ2xvc2Ui'@;
put 'LCEwKSl9LGRlcGVuZGVuY2llczpbWnkscnMsUHgsTDFlLE54LEh4XSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKTtjbGFzcyB1R3tjb25zdHJ1Y3RvcihsKXt0aGlzLnByb3A9bCxsLmluZGV4T2YoIi4iKT49MCYmKHRoaXMuc3BsaXRQcm9wPWwuc3BsaXQoIi4iKSl9Z2V0UHJvcFZhbHVlKGwp'@;
put 'e2lmKHRoaXMuc3BsaXRQcm9wKXtsZXQgYT1sO2Zvcihjb25zdCBkIG9mIHRoaXMuc3BsaXRQcm9wKXtpZihudWxsPT09YXx8dHlwZW9mIGE+InUifHx0eXBlb2YgYVtkXT4idSIpcmV0dXJuO2E9YVtkXX1yZXR1cm4gYX1yZXR1cm4gbFt0aGlzLnByb3BdfX1jbGFzcyBpT3tjb25zdHJ1Y3Rv'@;
put 'cihsLGE9ITEpe3RoaXMucHJvcD1sLHRoaXMuZXhhY3Q9YSx0aGlzLm5lc3RlZFByb3A9bmV3IHVHKGwpfWFjY2VwdHMobCxhLGQpe2NvbnN0IGg9dGhpcy5uZXN0ZWRQcm9wLmdldFByb3BWYWx1ZShsKTtyZXR1cm4hKHZvaWQgMD09PWh8fG51bGwhPT1hJiYoIm51bWJlciIhPXR5cGVvZiBo'@;
put 'fHxoPGEpfHxudWxsIT09ZCYmKCJudW1iZXIiIT10eXBlb2YgaHx8aD5kKSl9fWNsYXNzIFQ3e2NvbnN0cnVjdG9yKGwpe3RoaXMuZmlsdGVyRm49bCx0aGlzLl9jaGFuZ2VzPW5ldyBXbix0aGlzLl9sb3c9bnVsbCx0aGlzLl9oaWdoPW51bGx9Z2V0IGNoYW5nZXMoKXtyZXR1cm4gdGhpcy5f'@;
put 'Y2hhbmdlcy5hc09ic2VydmFibGUoKX1nZXQgdmFsdWUoKXtyZXR1cm5bdGhpcy5fbG93LHRoaXMuX2hpZ2hdfXNldCB2YWx1ZShsKXtjb25zdCBhPWxbMF0sZD1sWzFdOyhhIT09dGhpcy5fbG93fHxkIT09dGhpcy5faGlnaCkmJih0aGlzLl9sb3c9YSx0aGlzLl9oaWdoPWQsdGhpcy5fY2hh'@;
put 'bmdlcy5uZXh0KFt0aGlzLl9sb3csdGhpcy5faGlnaF0pKX1nZXQgbG93KCl7cmV0dXJuIHRoaXMuX2xvd31zZXQgbG93KGwpe2whPT10aGlzLl9sb3cmJih0aGlzLl9sb3c9bCx0aGlzLl9jaGFuZ2VzLm5leHQoW3RoaXMuX2xvdyx0aGlzLl9oaWdoXSkpfWdldCBoaWdoKCl7cmV0dXJuIHRo'@;
put 'aXMuX2hpZ2h9c2V0IGhpZ2gobCl7bCE9PXRoaXMuX2hpZ2gmJih0aGlzLl9oaWdoPWwsdGhpcy5fY2hhbmdlcy5uZXh0KFt0aGlzLl9sb3csdGhpcy5faGlnaF0pKX1nZXQgc3RhdGUoKXtyZXR1cm4gdGhpcy5maWx0ZXJGbiBpbnN0YW5jZW9mIGlPP3twcm9wZXJ0eTp0aGlzLmZpbHRlckZu'@;
put 'LnByb3AsbG93OnRoaXMuX2xvdyxoaWdoOnRoaXMuX2hpZ2h9OnRoaXN9aXNBY3RpdmUoKXtyZXR1cm4gbnVsbCE9PXRoaXMuX2xvd3x8bnVsbCE9PXRoaXMuaGlnaH1hY2NlcHRzKGwpe3JldHVybiB0aGlzLmZpbHRlckZuLmFjY2VwdHMobCx0aGlzLl9sb3csdGhpcy5faGlnaCl9ZXF1YWxz'@;
put 'KGwpe3JldHVybiBsIGluc3RhbmNlb2YgVDcmJihsLmZpbHRlckZuIGluc3RhbmNlb2YgaU8/dGhpcy5maWx0ZXJGbiBpbnN0YW5jZW9mIGlPJiZsLmZpbHRlckZuLnByb3A9PT10aGlzLmZpbHRlckZuLnByb3AmJmwubG93PT09dGhpcy5fbG93JiZsLmhpZ2g9PT10aGlzLl9oaWdoOmw9PT10'@;
put 'aGlzKX19bGV0IFRkZT0oKCk9PntjbGFzcyBjIGV4dGVuZHMgbk97Y29uc3RydWN0b3IoYSxkLGgsZix2KXtzdXBlcihhKSx0aGlzLmRvbUFkYXB0ZXI9ZCx0aGlzLmNvbW1vblN0cmluZ3M9aCx0aGlzLnBvcG92ZXJUb2dnbGVTZXJ2aWNlPWYsdGhpcy5uZ1pvbmU9dix0aGlzLmZpbHRlclZh'@;
put 'bHVlQ2hhbmdlPW5ldyBLcix0aGlzLm9wZW49ITEsdGhpcy5zdWJzY3JpcHRpb25zPVtdfWdldCB2YWx1ZSgpe3JldHVyblt0aGlzLmZpbHRlci5sb3csdGhpcy5maWx0ZXIuaGlnaF19c2V0IHZhbHVlKGEpe3RoaXMuZmlsdGVyJiZBcnJheS5pc0FycmF5KGEpP2EmJihhWzBdIT09dGhpcy5m'@;
put 'aWx0ZXIubG93fHxhWzFdIT09dGhpcy5maWx0ZXIuaGlnaCkmJih0aGlzLmZpbHRlci5sb3c9Im51bWJlciI9PXR5cGVvZiBhWzBdP2FbMF06bnVsbCx0aGlzLmZpbHRlci5oaWdoPSJudW1iZXIiPT10eXBlb2YgYVsxXT9hWzFdOm51bGwsdGhpcy5maWx0ZXJWYWx1ZUNoYW5nZS5lbWl0KGEp'@;
put 'KTp0aGlzLmluaXRGaWx0ZXJWYWx1ZXM9YX1zZXQgY3VzdG9tTnVtZXJpY0ZpbHRlcihhKXt0aGlzLnNldEZpbHRlcihhIGluc3RhbmNlb2YgdE8/YTpuZXcgVDcoYSkpLHRoaXMuaW5pdEZpbHRlclZhbHVlcyYmKHRoaXMudmFsdWU9dGhpcy5pbml0RmlsdGVyVmFsdWVzLGRlbGV0ZSB0aGlz'@;
put 'LmluaXRGaWx0ZXJWYWx1ZXMpfWdldCBtYXhQbGFjZWhvbGRlclZhbHVlKCl7cmV0dXJuIHRoaXMubWF4UGxhY2Vob2xkZXJ8fHRoaXMuY29tbW9uU3RyaW5ncy5rZXlzLm1heFZhbHVlfWdldCBtaW5QbGFjZWhvbGRlclZhbHVlKCl7cmV0dXJuIHRoaXMubWluUGxhY2Vob2xkZXJ8fHRoaXMu'@;
put 'Y29tbW9uU3RyaW5ncy5rZXlzLm1pblZhbHVlfWdldCBmcm9tTGFiZWxWYWx1ZSgpe3JldHVybiB0aGlzLmZyb21MYWJlbHx8dGhpcy5jb21tb25TdHJpbmdzLmtleXMuZnJvbUxhYmVsfWdldCB0b0xhYmVsVmFsdWUoKXtyZXR1cm4gdGhpcy50b0xhYmVsfHx0aGlzLmNvbW1vblN0cmluZ3Mu'@;
put 'a2V5cy50b0xhYmVsfWdldCBsb3coKXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIHRoaXMuZmlsdGVyLmxvdyYmaXNGaW5pdGUodGhpcy5maWx0ZXIubG93KT90aGlzLmZpbHRlci5sb3c6bnVsbH1zZXQgbG93KGEpeyJudW1iZXIiPT10eXBlb2YgYSYmYSE9PXRoaXMuZmlsdGVyLmxvdz8odGhp'@;
put 'cy5maWx0ZXIubG93PWEsdGhpcy5maWx0ZXJWYWx1ZUNoYW5nZS5lbWl0KFt0aGlzLmZpbHRlci5sb3csdGhpcy5maWx0ZXIuaGlnaF0pKToibnVtYmVyIiE9dHlwZW9mIGEmJih0aGlzLmZpbHRlci5sb3c9bnVsbCx0aGlzLmZpbHRlclZhbHVlQ2hhbmdlLmVtaXQoW3RoaXMuZmlsdGVyLmxv'@;
put 'dyx0aGlzLmZpbHRlci5oaWdoXSkpfWdldCBoaWdoKCl7cmV0dXJuIm51bWJlciI9PXR5cGVvZiB0aGlzLmZpbHRlci5oaWdoJiZpc0Zpbml0ZSh0aGlzLmZpbHRlci5oaWdoKT90aGlzLmZpbHRlci5oaWdoOm51bGx9c2V0IGhpZ2goYSl7Im51bWJlciI9PXR5cGVvZiBhJiZhIT09dGhpcy5m'@;
put 'aWx0ZXIuaGlnaD8odGhpcy5maWx0ZXIuaGlnaD1hLHRoaXMuZmlsdGVyVmFsdWVDaGFuZ2UuZW1pdChbdGhpcy5maWx0ZXIubG93LHRoaXMuZmlsdGVyLmhpZ2hdKSk6Im51bWJlciIhPXR5cGVvZiBhJiYodGhpcy5maWx0ZXIuaGlnaD1udWxsLHRoaXMuZmlsdGVyVmFsdWVDaGFuZ2UuZW1p'@;
put 'dChbdGhpcy5maWx0ZXIubG93LHRoaXMuZmlsdGVyLmhpZ2hdKSl9bmdBZnRlclZpZXdJbml0KCl7dGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5wb3BvdmVyVG9nZ2xlU2VydmljZS5vcGVuQ2hhbmdlLnN1YnNjcmliZShhPT57dGhpcy5vcGVuPWEsdGhpcy5uZ1pvbmUucnVuT3V0c2lk'@;
put 'ZUFuZ3VsYXIoKCk9PntyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9Pnt0aGlzLmRvbUFkYXB0ZXIuZm9jdXModGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50KX0pfSl9KSl9bmdPbkRlc3Ryb3koKXtzdXBlci5uZ09uRGVzdHJveSgpLHRoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKGE9PnthLnVu'@;
put 'c3Vic2NyaWJlKCl9KX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2UodWcpLEdlKHZtKSxHZShpcyksR2Uoc2MpLEdlKFdhKSl9LGMuXHUwMjc1Y21wPVZyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1kZy1udW1lcmljLWZpbHRlciJdXSx2aWV3'@;
put 'UXVlcnk6ZnVuY3Rpb24oYSxkKXtpZigxJmEmJihxYShWVmUsNSkscWEoJHgsNSkpLDImYSl7bGV0IGg7Q2koaD1TaSgpKSYmKGQuaW5wdXQ9aC5maXJzdCksQ2koaD1TaSgpKSYmKGQuZmlsdGVyQ29udGFpbmVyPWguZmlyc3QpfX0saW5wdXRzOnttaW5QbGFjZWhvbGRlcjpbTm4uTm9uZSwi'@;
put 'Y2xyRmlsdGVyTWluUGxhY2Vob2xkZXIiLCJtaW5QbGFjZWhvbGRlciJdLG1heFBsYWNlaG9sZGVyOltObi5Ob25lLCJjbHJGaWx0ZXJNYXhQbGFjZWhvbGRlciIsIm1heFBsYWNlaG9sZGVyIl0sZnJvbUxhYmVsOltObi5Ob25lLCJjbHJGaWx0ZXJGcm9tTGFiZWwiLCJmcm9tTGFiZWwiXSx0'@;
put 'b0xhYmVsOltObi5Ob25lLCJjbHJGaWx0ZXJUb0xhYmVsIiwidG9MYWJlbCJdLHZhbHVlOltObi5Ob25lLCJjbHJGaWx0ZXJWYWx1ZSIsInZhbHVlIl0sY3VzdG9tTnVtZXJpY0ZpbHRlcjpbTm4uTm9uZSwiY2xyRGdOdW1lcmljRmlsdGVyIiwiY3VzdG9tTnVtZXJpY0ZpbHRlciJdfSxvdXRw'@;
put 'dXRzOntmaWx0ZXJWYWx1ZUNoYW5nZToiY2xyRmlsdGVyVmFsdWVDaGFuZ2UifSxmZWF0dXJlczpbZGEoW3twcm92aWRlOmVPLHVzZUV4aXN0aW5nOmN9XSksd2FdLGRlY2xzOjEyLHZhcnM6MTAsY29uc3RzOltbImlucHV0X2xvdyIsIiJdLFsiaW5wdXRfaGlnaCIsIiJdLFszLCJjbHJEZ0Zp'@;
put 'bHRlck9wZW5DaGFuZ2UiLCJjbHJEZ0ZpbHRlciIsImNsckRnRmlsdGVyT3BlbiJdLFsxLCJkYXRhZ3JpZC1udW1lcmljLWZpbHRlci1mb3JtIl0sWzEsImNsci1jb250cm9sLWxhYmVsIl0sWyJjbHJOdW1iZXJJbnB1dCIsIiIsInR5cGUiLCJudW1iZXIiLCJhdXRvY29tcGxldGUiLCJvZmYi'@;
put 'LCJuYW1lIiwibG93IiwxLCJkYXRhZ3JpZC1udW1lcmljLWZpbHRlci1pbnB1dCIsMywibmdNb2RlbENoYW5nZSIsIm5nTW9kZWwiLCJwbGFjZWhvbGRlciJdLFsiY2xyTnVtYmVySW5wdXQiLCIiLCJ0eXBlIiwibnVtYmVyIiwiYXV0b2NvbXBsZXRlIiwib2ZmIiwibmFtZSIsImhpZ2giLDEs'@;
put 'ImRhdGFncmlkLW51bWVyaWMtZmlsdGVyLWlucHV0IiwzLCJuZ01vZGVsQ2hhbmdlIiwibmdNb2RlbCIsInBsYWNlaG9sZGVyIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7aWYoMSZhKXtjb25zdCBoPUxuKCk7ZGUoMCwiY2xyLWRnLWZpbHRlciIsMiksZ2koImNsckRnRmlsdGVyT3BlbkNo'@;
put 'YW5nZSIsZnVuY3Rpb24odil7cmV0dXJuIHd0KGgpLG1pKGQub3Blbix2KXx8KGQub3Blbj12KSxDdCh2KX0pLGRlKDEsImRpdiIsMykoMiwiY2xyLW51bWJlci1pbnB1dC1jb250YWluZXIiKSgzLCJsYWJlbCIsNCksTGUoNCksaGUoKSxkZSg1LCJpbnB1dCIsNSwwKSxnaSgibmdNb2RlbENo'@;
put 'YW5nZSIsZnVuY3Rpb24odil7cmV0dXJuIHd0KGgpLG1pKGQubG93LHYpfHwoZC5sb3c9diksQ3Qodil9KSxoZSgpKCksZGUoNywiY2xyLW51bWJlci1pbnB1dC1jb250YWluZXIiKSg4LCJsYWJlbCIsNCksTGUoOSksaGUoKSxkZSgxMCwiaW5wdXQiLDYsMSksZ2koIm5nTW9kZWxDaGFuZ2Ui'@;
put 'LGZ1bmN0aW9uKHYpe3JldHVybiB3dChoKSxtaShkLmhpZ2gsdil8fChkLmhpZ2g9diksQ3Qodil9KSxoZSgpKCkoKSgpfTImYSYmKE1lKCJjbHJEZ0ZpbHRlciIsZC5yZWdpc3RlcmVkKSxwaSgiY2xyRGdGaWx0ZXJPcGVuIixkLm9wZW4pLGZlKDQpLHdyKGQuZnJvbUxhYmVsVmFsdWUpLGZl'@;
put 'KCkscGkoIm5nTW9kZWwiLGQubG93KSxNZSgicGxhY2Vob2xkZXIiLGQubWluUGxhY2Vob2xkZXJWYWx1ZSksaHIoImFyaWEtbGFiZWwiLGQubWluUGxhY2Vob2xkZXJWYWx1ZSksZmUoNCksd3IoZC50b0xhYmVsVmFsdWUpLGZlKCkscGkoIm5nTW9kZWwiLGQuaGlnaCksTWUoInBsYWNlaG9s'@;
put 'ZGVyIixkLm1heFBsYWNlaG9sZGVyVmFsdWUpLGhyKCJhcmlhLWxhYmVsIixkLm1heFBsYWNlaG9sZGVyVmFsdWUpKX0sZGVwZW5kZW5jaWVzOltkcyxfZGUseWRlLHFsLHZMLG5sLCRzLCR4XSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKTtjbGFzcyBhT3tjb25zdHJ1Y3RvcihsLGE9ITEpe3Ro'@;
put 'aXMucHJvcD1sLHRoaXMuZXhhY3Q9YSx0aGlzLm5lc3RlZFByb3A9bmV3IHVHKGwpfWFjY2VwdHMobCxhKXtjb25zdCBkPXRoaXMubmVzdGVkUHJvcC5nZXRQcm9wVmFsdWUobCk7cmV0dXJuISh0eXBlb2YgZD4idSIpJiYodGhpcy5leGFjdD8oIiIrZCkudG9Mb3dlckNhc2UoKT09PWE6KCIi'@;
put 'K2QpLnRvTG93ZXJDYXNlKCkuaW5kZXhPZihhKT49MCl9fWNsYXNzIEE3e2NvbnN0cnVjdG9yKGwpe3RoaXMuZmlsdGVyRm49bCx0aGlzLl9jaGFuZ2VzPW5ldyBXbix0aGlzLl9sb3dlckNhc2VWYWx1ZT0iIix0aGlzLl9yYXdWYWx1ZT0iIn1nZXQgY2hhbmdlcygpe3JldHVybiB0aGlzLl9j'@;
put 'aGFuZ2VzLmFzT2JzZXJ2YWJsZSgpfWdldCBsb3dlckNhc2VWYWx1ZSgpe3JldHVybiB0aGlzLl9sb3dlckNhc2VWYWx1ZX1nZXQgc3RhdGUoKXtyZXR1cm4gdGhpcy5maWx0ZXJGbiBpbnN0YW5jZW9mIGFPP3twcm9wZXJ0eTp0aGlzLmZpbHRlckZuLnByb3AsdmFsdWU6dGhpcy52YWx1ZX06'@;
put 'dGhpc31nZXQgdmFsdWUoKXtyZXR1cm4gdGhpcy5fcmF3VmFsdWV9c2V0IHZhbHVlKGwpe2x8fChsPSIiKSxsIT09dGhpcy5fcmF3VmFsdWUmJih0aGlzLl9yYXdWYWx1ZT1sLHRoaXMuX2xvd2VyQ2FzZVZhbHVlPWwudG9Mb3dlckNhc2UoKS50cmltKCksdGhpcy5fY2hhbmdlcy5uZXh0KGwp'@;
put 'KX1pc0FjdGl2ZSgpe3JldHVybiEhdGhpcy52YWx1ZX1hY2NlcHRzKGwpe3JldHVybiB0aGlzLmZpbHRlckZuLmFjY2VwdHMobCx0aGlzLmxvd2VyQ2FzZVZhbHVlKX1lcXVhbHMobCl7cmV0dXJuIGwgaW5zdGFuY2VvZiBBNyYmKGwuZmlsdGVyRm4gaW5zdGFuY2VvZiBhTz90aGlzLmZpbHRl'@;
put 'ckZuIGluc3RhbmNlb2YgYU8mJmwuZmlsdGVyRm4ucHJvcD09PXRoaXMuZmlsdGVyRm4ucHJvcCYmbC52YWx1ZT09PXRoaXMudmFsdWU6bD09PXRoaXMpfX1sZXQgZEc9KCgpPT57Y2xhc3MgYyBleHRlbmRzIG5Pe2NvbnN0cnVjdG9yKGEsZCxoLGYsdixNLEQpe3N1cGVyKGEpLHRoaXMuZG9t'@;
put 'QWRhcHRlcj1kLHRoaXMuY29tbW9uU3RyaW5ncz1oLHRoaXMuc21hcnRUb2dnbGVTZXJ2aWNlPWYsdGhpcy5lbGVtZW50UmVmPXYsdGhpcy5jZHI9TSx0aGlzLm5nWm9uZT1ELHRoaXMuZmlsdGVyVmFsdWVDaGFuZ2U9bmV3IEtyLHRoaXMub3Blbj0hMSx0aGlzLmxhYmVsVmFsdWU9IiIsdGhp'@;
put 'cy5zdWJzPVtdfXNldCBjdXN0b21TdHJpbmdGaWx0ZXIoYSl7dGhpcy5zZXRGaWx0ZXIoYSBpbnN0YW5jZW9mIHRPP2E6bmV3IEE3KGEpKSx0aGlzLmluaXRGaWx0ZXJWYWx1ZSYmKHRoaXMudmFsdWU9dGhpcy5pbml0RmlsdGVyVmFsdWUsZGVsZXRlIHRoaXMuaW5pdEZpbHRlclZhbHVlKX1n'@;
put 'ZXQgdmFsdWUoKXtyZXR1cm4gdGhpcy5maWx0ZXIudmFsdWV9c2V0IHZhbHVlKGEpe3RoaXMuZmlsdGVyJiYic3RyaW5nIj09dHlwZW9mIGE/KGF8fChhPSIiKSxhIT09dGhpcy5maWx0ZXIudmFsdWUmJih0aGlzLmZpbHRlci52YWx1ZT1hLHRoaXMuZmlsdGVyVmFsdWVDaGFuZ2UuZW1pdChh'@;
put 'KSkpOnRoaXMuaW5pdEZpbHRlclZhbHVlPWF9Z2V0IHBsYWNlaG9sZGVyVmFsdWUoKXtyZXR1cm4gdGhpcy5wbGFjZWhvbGRlcnx8dGhpcy5jb21tb25TdHJpbmdzLmtleXMuZmlsdGVySXRlbXN9bmdBZnRlclZpZXdJbml0KCl7dGhpcy5zdWJzLnB1c2godGhpcy5zbWFydFRvZ2dsZVNlcnZp'@;
put 'Y2Uub3BlbkNoYW5nZS5zdWJzY3JpYmUoYT0+e3RoaXMub3Blbj1hLHRoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57cmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT57dGhpcy5kb21BZGFwdGVyLmZvY3VzKHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudCl9KX0pfSkpfW5nT25DaGFu'@;
put 'Z2VzKCl7c2V0VGltZW91dCgoKT0+e3RoaXMuc2V0RmlsdGVyTGFiZWwoKSx0aGlzLmNkci5tYXJrRm9yQ2hlY2soKX0pfW5nT25EZXN0cm95KCl7c3VwZXIubmdPbkRlc3Ryb3koKSx0aGlzLnN1YnMuZm9yRWFjaChhPT5hLnVuc3Vic2NyaWJlKCkpfXNldEZpbHRlckxhYmVsKCl7aWYodGhp'@;
put 'cy5sYWJlbClyZXR1cm4gdm9pZCh0aGlzLmxhYmVsVmFsdWU9dGhpcy5sYWJlbCk7Y29uc3QgZD10aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudD8uY2xvc2VzdCgiY2xyLWRnLWNvbHVtbiIpPy5xdWVyeVNlbGVjdG9yKCIuZGF0YWdyaWQtY29sdW1uLXRpdGxlIik7dGhpcy5sYWJlbFZh'@;
put 'bHVlPXRoaXMuY29tbW9uU3RyaW5ncy5wYXJzZSh0aGlzLmNvbW1vblN0cmluZ3Mua2V5cy5kYXRhZ3JpZEZpbHRlckxhYmVsLHtDT0xVTU46ZD8udGV4dENvbnRlbnQudHJpbSgpfHwiIn0pfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZSh1Zyks'@;
put 'R2Uodm0pLEdlKGlzKSxHZShzYyksR2UoSmkpLEdlKEVzKSxHZShXYSkpfSxjLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItZGctc3RyaW5nLWZpbHRlciJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24oYSxkKXtpZigxJmEmJihxYShCVmUsNSkscWEoJHgsNSkpLDImYSl7bGV0'@;
put 'IGg7Q2koaD1TaSgpKSYmKGQuaW5wdXQ9aC5maXJzdCksQ2koaD1TaSgpKSYmKGQuZmlsdGVyQ29udGFpbmVyPWguZmlyc3QpfX0saW5wdXRzOntwbGFjZWhvbGRlcjpbTm4uTm9uZSwiY2xyRmlsdGVyUGxhY2Vob2xkZXIiLCJwbGFjZWhvbGRlciJdLGxhYmVsOltObi5Ob25lLCJjbHJGaWx0'@;
put 'ZXJMYWJlbCIsImxhYmVsIl0sY3VzdG9tU3RyaW5nRmlsdGVyOltObi5Ob25lLCJjbHJEZ1N0cmluZ0ZpbHRlciIsImN1c3RvbVN0cmluZ0ZpbHRlciJdLHZhbHVlOltObi5Ob25lLCJjbHJGaWx0ZXJWYWx1ZSIsInZhbHVlIl19LG91dHB1dHM6e2ZpbHRlclZhbHVlQ2hhbmdlOiJjbHJGaWx0'@;
put 'ZXJWYWx1ZUNoYW5nZSJ9LGZlYXR1cmVzOltkYShbe3Byb3ZpZGU6ZU8sdXNlRXhpc3Rpbmc6Y31dKSx3YSx3bF0sZGVjbHM6Nix2YXJzOjYsY29uc3RzOltbImlucHV0IiwiIl0sWzMsImNsckRnRmlsdGVyT3BlbkNoYW5nZSIsImNsckRnRmlsdGVyIiwiY2xyRGdGaWx0ZXJPcGVuIl0sWyJ0'@;
put 'eXBlIiwidGV4dCIsImF1dG9jb21wbGV0ZSIsIm9mZiIsIm5hbWUiLCJzZWFyY2giLCJjbHJJbnB1dCIsIiIsMywibmdNb2RlbENoYW5nZSIsIm5nTW9kZWwiLCJwbGFjZWhvbGRlciJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpe2lmKDEmYSl7Y29uc3QgaD1MbigpO2RlKDAsImNsci1kZy1m'@;
put 'aWx0ZXIiLDEpLGdpKCJjbHJEZ0ZpbHRlck9wZW5DaGFuZ2UiLGZ1bmN0aW9uKHYpe3JldHVybiB3dChoKSxtaShkLm9wZW4sdil8fChkLm9wZW49diksQ3Qodil9KSxkZSgxLCJjbHItaW5wdXQtY29udGFpbmVyIikoMiwibGFiZWwiKSxMZSgzKSxoZSgpLGRlKDQsImlucHV0IiwyLDApLGdp'@;
put 'KCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbih2KXtyZXR1cm4gd3QoaCksbWkoZC52YWx1ZSx2KXx8KGQudmFsdWU9diksQ3Qodil9KSxoZSgpKCkoKX0yJmEmJihNZSgiY2xyRGdGaWx0ZXIiLGQucmVnaXN0ZXJlZCkscGkoImNsckRnRmlsdGVyT3BlbiIsZC5vcGVuKSxmZSgzKSx3cihkLmxh'@;
put 'YmVsVmFsdWUpLGZlKCkscGkoIm5nTW9kZWwiLGQudmFsdWUpLE1lKCJwbGFjZWhvbGRlciIsZC5wbGFjZWhvbGRlclZhbHVlKSxocigiYXJpYS1sYWJlbCIsZC5wbGFjZWhvbGRlclZhbHVlKSl9LGRlcGVuZGVuY2llczpbZHMsWjEsR0wscWwsbmwsJHMsJHhdLGVuY2Fwc3VsYXRpb246Mn0p'@;
put 'LGN9KSgpLHhtPSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyBSeXt9cmV0dXJuIGMuXHUwMjc1ZmFjPSgoKT0+e2xldCBsO3JldHVybiBmdW5jdGlvbihkKXtyZXR1cm4obHx8KGw9WXMoYykpKShkfHxjKX19KSgpLGMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1kYXRhZ3Jp'@;
put 'ZCJdXSxmZWF0dXJlczpbd2FdfSksY30pKCksS3k9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuYWN0aW9uYWJsZUNvdW50PTB9Z2V0IGhhc0FjdGlvbmFibGVSb3coKXtyZXR1cm4gdGhpcy5hY3Rpb25hYmxlQ291bnQ+MH1yZWdpc3Rlcigpe3RoaXMuYWN0aW9uYWJsZUNvdW50'@;
put 'Kyt9dW5yZWdpc3Rlcigpe3RoaXMuYWN0aW9uYWJsZUNvdW50LS19fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpLGs3PSgoKT0+e2NsYXNzIGMgZXh0ZW5k'@;
put 'cyBMeXtjb25zdHJ1Y3RvcihhLGQsaCl7aWYoIWQpdGhyb3cgbmV3IEVycm9yKCJjbHItZGctcm93IHNob3VsZCBvbmx5IGJlIHVzZWQgaW5zaWRlIG9mIGEgY2xyLWRhdGFncmlkIik7c3VwZXIoYSxkKSx0aGlzLnJvd0FjdGlvbnM9aH1nZXQgZmxhdm9yKCl7cmV0dXJuIHRoaXMucm93QWN0'@;
put 'aW9ucy5oYXNBY3Rpb25hYmxlUm93fX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZShFcyksR2UoeG0sOCksR2UoS3kpKX0sYy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWRhdGFncmlkIl0sWyJjbHItZGctcm93Il1dLGZl'@;
put 'YXR1cmVzOlt3YV19KSxjfSkoKSxBZGU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLnBsYXRmb3JtSWQ9YSx0aGlzLm1vZGFsU3RhY2s9W10sdGhpcy5rZXlVcEV2ZW50TGlzdGVuZXI9dGhpcy5vbktleVVwLmJpbmQodGhpcyl9dHJhY2tNb2RhbE9wZW4oYSl7ITE9PT10aGlz'@;
put 'Lm1vZGFsU3RhY2suaW5jbHVkZXMoYSkmJnRoaXMubW9kYWxTdGFjay51bnNoaWZ0KGEpLHRsKHRoaXMucGxhdGZvcm1JZCkmJmRvY3VtZW50LmJvZHkuYWRkRXZlbnRMaXN0ZW5lcigia2V5dXAiLHRoaXMua2V5VXBFdmVudExpc3RlbmVyKX10cmFja01vZGFsQ2xvc2UoYSl7Y29uc3QgZD10'@;
put 'aGlzLm1vZGFsU3RhY2suaW5kZXhPZihhKTtkPi0xJiZ0aGlzLm1vZGFsU3RhY2suc3BsaWNlKGQsMSksMD09PXRoaXMubW9kYWxTdGFjay5sZW5ndGgmJnRsKHRoaXMucGxhdGZvcm1JZCkmJmRvY3VtZW50LmJvZHkucmVtb3ZlRXZlbnRMaXN0ZW5lcigia2V5dXAiLHRoaXMua2V5VXBFdmVu'@;
put 'dExpc3RlbmVyKX1vbktleVVwKGEpe3RoaXMubW9kYWxTdGFjay5sZW5ndGgmJkkyKGEua2V5KT09PWdhLkVzY2FwZSYmKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQuYmx1cigpLHRoaXMubW9kYWxTdGFja1swXS5jbG9zZSgpKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVy'@;
put 'biBuZXcoYXx8YykoeHIoaW8pKX0sYy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KSxjfSkoKSxYZj0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMubW9kYWxTdGFja1NlcnZpY2U9YSx0aGlzLnByZXZlbnRTY3Jv'@;
put 'bGw9ITEsdGhpcy50b2dnbGVTdGF0ZT0hMSx0aGlzLl9lbmFibGVkPSExLHRoaXMuX3N0YXRlPW5ldyBlaSh0aGlzLnRvZ2dsZVN0YXRlKX1nZXQgZW5hYmxlZCgpe3JldHVybiB0aGlzLl9lbmFibGVkfXNldCBlbmFibGVkKGEpe3RoaXMuX2VuYWJsZWQ9YX1nZXQgcHJldmVudEZvY3VzU2Ny'@;
put 'b2xsKCl7cmV0dXJuIHRoaXMucHJldmVudFNjcm9sbH1zZXQgcHJldmVudEZvY3VzU2Nyb2xsKGEpe3RoaXMucHJldmVudFNjcm9sbD1hfWdldCBzdGF0ZSgpe3JldHVybiB0aGlzLmNhY2hlfWdldCBzdGF0ZUNoYW5nZSgpe3JldHVybiB0aGlzLl9zdGF0ZS5hc09ic2VydmFibGUoKX1nZXQg'@;
put 'aXNPcGVuKCl7cmV0dXJuITA9PT10aGlzLnRvZ2dsZVN0YXRlfW9wZW4oYSxkKXt0aGlzLmNhY2hlPWEsdGhpcy5idXR0b249ZCx0aGlzLnRvZ2dsZVN0YXRlPSEwLHRoaXMuX3N0YXRlLm5leHQodGhpcy50b2dnbGVTdGF0ZSksdGhpcy5tb2RhbFN0YWNrU2VydmljZS50cmFja01vZGFsT3Bl'@;
put 'bih0aGlzKX1jbG9zZSgpe3RoaXMudG9nZ2xlU3RhdGU9ITEsdGhpcy5yZXR1cm5Gb2N1cygpLHRoaXMuX3N0YXRlLm5leHQodGhpcy50b2dnbGVTdGF0ZSksdGhpcy5tb2RhbFN0YWNrU2VydmljZS50cmFja01vZGFsQ2xvc2UodGhpcyl9cmV0dXJuRm9jdXMoKXt0aGlzLmJ1dHRvbiYmKHRo'@;
put 'aXMuYnV0dG9uLmZvY3VzKHtwcmV2ZW50U2Nyb2xsOnRoaXMucHJldmVudEZvY3VzU2Nyb2xsfSksdGhpcy5idXR0b249bnVsbCl9dG9nZ2xlKGEsZCl7dGhpcy5pc1Jvd09wZW4oYSl8fCFhP3RoaXMuY2xvc2UoKTp0aGlzLm9wZW4oYSxkKX1pc1Jvd09wZW4oYSl7cmV0dXJuISghdGhpcy50'@;
put 'b2dnbGVTdGF0ZXx8dGhpcy5jYWNoZSE9PWEpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh4cihBZGUpKX0sYy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSxxeT0oKCk9PntjbGFzcyBje2NvbnN0cnVj'@;
put 'dG9yKGEpe3RoaXMuZGV0YWlsU2VydmljZT1hLHRoaXMuZXhwYW5kYWJsZUNvdW50PTB9Z2V0IGhhc0V4cGFuZGFibGVSb3coKXtyZXR1cm4hdGhpcy5kZXRhaWxTZXJ2aWNlLmVuYWJsZWQmJnRoaXMuZXhwYW5kYWJsZUNvdW50PjB9cmVnaXN0ZXIoKXt0aGlzLmV4cGFuZGFibGVDb3VudCsr'@;
put 'fXVucmVnaXN0ZXIoKXt0aGlzLmV4cGFuZGFibGVDb3VudC0tfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh4cihYZikpfSxjLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpLEQ3PSgoKT0+e2NsYXNzIGMg'@;
put 'ZXh0ZW5kcyBMeXtjb25zdHJ1Y3RvcihhLGQsaCl7aWYoIWQpdGhyb3cgbmV3IEVycm9yKCJjbHItZGctcm93IHNob3VsZCBvbmx5IGJlIHVzZWQgaW5zaWRlIG9mIGEgY2xyLWRhdGFncmlkIik7c3VwZXIoYSxkKSx0aGlzLmV4cGFuZGFibGVDb3VudD1ofWdldCBmbGF2b3IoKXtyZXR1cm4g'@;
put 'dGhpcy5leHBhbmRhYmxlQ291bnQuaGFzRXhwYW5kYWJsZVJvd319cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2UoRXMpLEdlKHhtLDgpLEdlKHF5KSl9LGMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1kYXRhZ3JpZCJdLFsi'@;
put 'Y2xyLWRnLXJvdyJdXSxmZWF0dXJlczpbd2FdfSksY30pKCk7Y2xhc3Mgb097Y29uc3RydWN0b3IobCl7dGhpcy5wcm9wPWwsdGhpcy5uZXN0ZWRQcm9wPW5ldyB1RyhsKX1jb21wYXJlKGwsYSl7bGV0IGQ9dGhpcy5uZXN0ZWRQcm9wLmdldFByb3BWYWx1ZShsKSxoPXRoaXMubmVzdGVkUHJv'@;
put 'cC5nZXRQcm9wVmFsdWUoYSk7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBkJiYoZD1kLnRvTG93ZXJDYXNlKCkpLCJzdHJpbmciPT10eXBlb2YgaCYmKGg9aC50b0xvd2VyQ2FzZSgpKSx0eXBlb2YgZD4idSJ8fG51bGw9PT1kP3R5cGVvZiBoPiJ1Inx8bnVsbD09PWg/MDoxOnR5cGVvZiBoPiJ1'@;
put 'Inx8bnVsbD09PWh8fGQ8aD8tMTpkPmg/MTowfX12YXIgeGg9ZnVuY3Rpb24oYyl7cmV0dXJuIGNbYy5VTlNPUlRFRD0wXT0iVU5TT1JURUQiLGNbYy5BU0M9MV09IkFTQyIsY1tjLkRFU0M9LTFdPSJERVNDIixjfSh4aHx8e30pO2NvbnN0IFh5PSJkYXRhZ3JpZC1maXhlZC13aWR0aCIsS3g9'@;
put 'ImRhdGFncmlkLWhpZGRlbi1jb2x1bW4iO2xldCBoRz0oKCk9PntjbGFzcyBje25nQWZ0ZXJWaWV3SW5pdCgpe3RoaXMuY29sdW1uVmlldz10aGlzLnRlbXBsYXRlUmVmLmNyZWF0ZUVtYmVkZGVkVmlldyhudWxsKX1uZ09uRGVzdHJveSgpe3RoaXMuY29sdW1uVmlldy5kZXN0cm95KCl9fXJl'@;
put 'dHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJkZy13cmFwcGVkLWNvbHVtbiJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24oYSxkKXtpZigxJmEmJnFhKGpWZSw1KSwyJmEpe2xldCBoO0NpKGg9U2ko'@;
put 'KSkmJihkLnRlbXBsYXRlUmVmPWguZmlyc3QpfX0sbmdDb250ZW50U2VsZWN0b3JzOnlvLGRlY2xzOjIsdmFyczowLGNvbnN0czpbWyJjb2x1bW5Qb3J0YWwiLCIiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihzYSgpLGd0KDAselZlLDEsMCwibmctdGVtcGxhdGUiLG51bGwsMCxJ'@;
put 'YykpfSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxzTz0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMuc3RhdGVEZWJvdW5jZXI9YSx0aGlzLl9yZXZlcnNlPSExLHRoaXMuX2NoYW5nZT1uZXcgV259Z2V0IGNvbXBhcmF0b3IoKXtyZXR1cm4gdGhpcy5fY29tcGFyYXRvcn1zZXQg'@;
put 'Y29tcGFyYXRvcihhKXt0aGlzLnN0YXRlRGVib3VuY2VyLmNoYW5nZVN0YXJ0KCksdGhpcy5fY29tcGFyYXRvcj1hLHRoaXMuZW1pdENoYW5nZSgpLHRoaXMuc3RhdGVEZWJvdW5jZXIuY2hhbmdlRG9uZSgpfWdldCByZXZlcnNlKCl7cmV0dXJuIHRoaXMuX3JldmVyc2V9c2V0IHJldmVyc2Uo'@;
put 'YSl7dGhpcy5zdGF0ZURlYm91bmNlci5jaGFuZ2VTdGFydCgpLHRoaXMuX3JldmVyc2U9YSx0aGlzLmVtaXRDaGFuZ2UoKSx0aGlzLnN0YXRlRGVib3VuY2VyLmNoYW5nZURvbmUoKX1nZXQgY2hhbmdlKCl7cmV0dXJuIHRoaXMuX2NoYW5nZS5hc09ic2VydmFibGUoKX10b2dnbGUoYSxkKXt0'@;
put 'aGlzLnN0YXRlRGVib3VuY2VyLmNoYW5nZVN0YXJ0KCksdGhpcy5jb21wYXJhdG9yPT09YT90aGlzLl9yZXZlcnNlPXR5cGVvZiBkPCJ1IiYmZHx8IXRoaXMuX3JldmVyc2U6KHRoaXMuX2NvbXBhcmF0b3I9YSx0aGlzLl9yZXZlcnNlPXR5cGVvZiBkPCJ1IiYmZCksdGhpcy5lbWl0Q2hhbmdl'@;
put 'KCksdGhpcy5zdGF0ZURlYm91bmNlci5jaGFuZ2VEb25lKCl9Y2xlYXIoKXt0aGlzLmNvbXBhcmF0b3I9bnVsbH1jb21wYXJlKGEsZCl7cmV0dXJuKHRoaXMucmV2ZXJzZT8tMToxKSp0aGlzLmNvbXBhcmF0b3IuY29tcGFyZShhLGQpfWVtaXRDaGFuZ2UoKXt0aGlzLl9jaGFuZ2UubmV4dCh0'@;
put 'aGlzKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoeHIoR3gpKX0sYy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKTt2YXIgSmY9ZnVuY3Rpb24oYyl7cmV0dXJuIGNbYy5BTElHTl9DT0xVTU5TPTBdPSJB'@;
put 'TElHTl9DT0xVTU5TIixjW2MuQ0FMQ1VMQVRFX01PREVfT049MV09IkNBTENVTEFURV9NT0RFX09OIixjW2MuQ0FMQ1VMQVRFX01PREVfT0ZGPTJdPSJDQUxDVUxBVEVfTU9ERV9PRkYiLGNbYy5DTEVBUl9XSURUSFM9M109IkNMRUFSX1dJRFRIUyIsY1tjLkNPTVBVVEVfQ09MVU1OX1dJRFRI'@;
put 'Uz00XT0iQ09NUFVURV9DT0xVTU5fV0lEVEhTIixjfShKZnx8e30pO2xldCBJNz0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5fcmVuZGVyU3RlcD1uZXcgV24sdGhpcy5hbHJlYWR5U2l6ZWQ9ITF9Z2V0IHJlbmRlclN0ZXAoKXtyZXR1cm4gdGhpcy5fcmVuZGVyU3RlcC5hc09i'@;
put 'c2VydmFibGUoKX1maWx0ZXJSZW5kZXJTdGVwcyhhKXtyZXR1cm4gdGhpcy5yZW5kZXJTdGVwLnBpcGUoJGwoZD0+YT09PWQpKX1yZXNpemUoKXt0aGlzLl9yZW5kZXJTdGVwLm5leHQoSmYuQ0FMQ1VMQVRFX01PREVfT04pLHRoaXMuYWxyZWFkeVNpemVkJiZ0aGlzLl9yZW5kZXJTdGVwLm5l'@;
put 'eHQoSmYuQ0xFQVJfV0lEVEhTKSx0aGlzLl9yZW5kZXJTdGVwLm5leHQoSmYuQ09NUFVURV9DT0xVTU5fV0lEVEhTKSx0aGlzLl9yZW5kZXJTdGVwLm5leHQoSmYuQUxJR05fQ09MVU1OUyksdGhpcy5hbHJlYWR5U2l6ZWQ9ITAsdGhpcy5fcmVuZGVyU3RlcC5uZXh0KEpmLkNBTENVTEFURV9N'@;
put 'T0RFX09GRil9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpLGZHPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgpe3RoaXMuZWw9YSx0aGlzLmRv'@;
put 'bUFkYXB0ZXI9ZCx0aGlzLm9yZ2FuaXplcj1oLHRoaXMuX3Jlc2l6ZWRCeT0wfWdldCByZXNpemVkQnkoKXtyZXR1cm4gdGhpcy5fcmVzaXplZEJ5fWdldCBtaW5Db2x1bW5XaWR0aCgpe3JldHVybiB0aGlzLmRvbUFkYXB0ZXIubWluV2lkdGgodGhpcy5lbC5uYXRpdmVFbGVtZW50KXx8OTZ9'@;
put 'Z2V0IG1heFJlc2l6ZVJhbmdlKCl7cmV0dXJuIHRoaXMud2lkdGhCZWZvcmVSZXNpemUtdGhpcy5taW5Db2x1bW5XaWR0aH1nZXQgd2lkdGhBZnRlclJlc2l6ZSgpe3JldHVybiB0aGlzLndpZHRoQmVmb3JlUmVzaXplK3RoaXMuX3Jlc2l6ZWRCeX1zdGFydFJlc2l6ZSgpe3RoaXMuX3Jlc2l6'@;
put 'ZWRCeT0wLHRoaXMuaXNXaXRoaW5NYXhSZXNpemVSYW5nZT0hMCx0aGlzLndpZHRoQmVmb3JlUmVzaXplPXRoaXMuZG9tQWRhcHRlci5jbGllbnRSZWN0KHRoaXMuZWwubmF0aXZlRWxlbWVudCkud2lkdGh9ZW5kUmVzaXplKCl7dGhpcy5vcmdhbml6ZXIucmVzaXplKCl9Y2FsY3VsYXRlUmVz'@;
put 'aXplKGEpe2E8LXRoaXMubWF4UmVzaXplUmFuZ2U/KHRoaXMuX3Jlc2l6ZWRCeT0tdGhpcy5tYXhSZXNpemVSYW5nZSx0aGlzLmlzV2l0aGluTWF4UmVzaXplUmFuZ2U9ITEpOih0aGlzLl9yZXNpemVkQnk9YSx0aGlzLmlzV2l0aGluTWF4UmVzaXplUmFuZ2U9ITApfX1yZXR1cm4gYy5cdTAy'@;
put 'NzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh4cihKaSkseHIodm0pLHhyKEk3KSl9LGMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCkscEc9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLnBsYXRmb3JtSWQ9YX1nZXQg'@;
put 'dGFibGVSZWYoKXtyZXR1cm4gdGhpcy5fdGFibGVSZWZ9c2V0IHRhYmxlUmVmKGEpe3RoaXMuX3RhYmxlUmVmPWF9c2V0IHRhYmxlKGEpe3RsKHRoaXMucGxhdGZvcm1JZCkmJmEubmF0aXZlRWxlbWVudCYmKHRoaXMudGFibGVSZWY9YS5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoIi5k'@;
put 'YXRhZ3JpZC10YWJsZSIpKX1nZXRDb2x1bW5EcmFnSGVpZ2h0KCl7cmV0dXJuIHRoaXMudGFibGVSZWY/YCR7dGhpcy50YWJsZVJlZi5jbGllbnRIZWlnaHR9cHhgOm51bGx9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHhyKGlvKSl9LGMuXHUwMjc1'@;
put 'cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCksRGRlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZix2LE0pe3RoaXMuY29sdW1uUmVzaXplclNlcnZpY2U9YSx0aGlzLnJlbmRlcmVyPWQsdGhpcy5uZ1pvbmU9aCx0aGlzLnRhYmxlU2l6ZVNlcnZp'@;
put 'Y2U9Zix0aGlzLmNvbW1vblN0cmluZz12LHRoaXMuZG9jdW1lbnQ9TSx0aGlzLmNvbHVtblNlcGFyYXRvcklkPU11KCksdGhpcy5yZXNpemVTdGFydGVkT25LZXlEb3duPSExLHRoaXMudW5saXN0ZW5lcnM9W119Z2V0IGRlc2NyaXB0aW9uSWQoKXtyZXR1cm5gJHt0aGlzLmNvbHVtblNlcGFy'@;
put 'YXRvcklkfS1hcmlhLWRlc2NyaWJlZGJ5YH1nZXQgcmVzaXplVHJhY2tlckVsKCl7cmV0dXJuIHRoaXMucmVzaXplVHJhY2tlclJlZi5uYXRpdmVFbGVtZW50fWdldCBjb2x1bW5IYW5kbGVFbCgpe3JldHVybiB0aGlzLmNvbHVtbkhhbmRsZVJlZi5uYXRpdmVFbGVtZW50fW5nQWZ0ZXJWaWV3'@;
put 'SW5pdCgpe3RoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57dGhpcy51bmxpc3RlbmVycy5wdXNoKHRoaXMucmVuZGVyZXIubGlzdGVuKHRoaXMuY29sdW1uSGFuZGxlRWwsImtleWRvd24iLGE9Pnt0aGlzLnNob3dUcmFja2VyT25GaXJzdEtleURvd24oYSksdGhpcy5tb3ZlVHJh'@;
put 'Y2tlck9uS2V5RG93bihhKX0pKSx0aGlzLnVubGlzdGVuZXJzLnB1c2godGhpcy5yZW5kZXJlci5saXN0ZW4odGhpcy5jb2x1bW5IYW5kbGVFbCwia2V5dXAiLGE9Pnt0aGlzLmhpZGVUcmFja2VyT25LZXlVcChhKX0pKX0pfW5nT25EZXN0cm95KCl7dGhpcy51bmxpc3RlbmVycy5mb3JFYWNo'@;
put 'KGE9PmEoKSl9c2hvd1RyYWNrZXIoKXt0aGlzLmNvbHVtblJlc2l6ZXJTZXJ2aWNlLnN0YXJ0UmVzaXplKCk7Y29uc3QgYT10aGlzLnRhYmxlU2l6ZVNlcnZpY2UuZ2V0Q29sdW1uRHJhZ0hlaWdodCgpO3RoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5yZXNpemVUcmFja2VyRWwsImhlaWdo'@;
put 'dCIsYSksdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLnJlc2l6ZVRyYWNrZXJFbCwiZGlzcGxheSIsImJsb2NrIil9bW92ZVRyYWNrZXIoYSl7dGhpcy5jb2x1bW5SZXNpemVyU2VydmljZS5jYWxjdWxhdGVSZXNpemUoYSksdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLnJlc2l6ZVRy'@;
put 'YWNrZXJFbCwidHJhbnNmb3JtIixgdHJhbnNsYXRlWCgke3RoaXMuY29sdW1uUmVzaXplclNlcnZpY2UucmVzaXplZEJ5fXB4KWApLHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5kb2N1bWVudC5ib2R5LCJjdXJzb3IiLCJjb2wtcmVzaXplIiksdGhpcy5yZWRGbGFnVHJhY2tlcigpfWhp'@;
put 'ZGVUcmFja2VyKCl7dGhpcy5jb2x1bW5SZXNpemVyU2VydmljZS5lbmRSZXNpemUoKSx0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMucmVzaXplVHJhY2tlckVsLCJkaXNwbGF5Iiwibm9uZSIpLHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5yZXNpemVUcmFja2VyRWwsInRyYW5zZm9y'@;
put 'bSIsInRyYW5zbGF0ZVgoMHB4KSIpLHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5jb2x1bW5IYW5kbGVFbCwidHJhbnNmb3JtIiwidHJhbnNsYXRlWCgwcHgpIiksdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLmRvY3VtZW50LmJvZHksImN1cnNvciIsImF1dG8iKX1zaG93VHJhY2tl'@;
put 'ck9uRmlyc3RLZXlEb3duKGEpeyF0aGlzLnJlc2l6ZVN0YXJ0ZWRPbktleURvd24mJih0aGlzLmlzQXJyb3dMZWZ0S2V5RXZlbnQoYSl8fHRoaXMuaXNBcnJvd1JpZ2h0S2V5RXZlbnQoYSkpJiYodGhpcy5yZXNpemVTdGFydGVkT25LZXlEb3duPSEwLHRoaXMucmVuZGVyZXIuYWRkQ2xhc3Mo'@;
put 'dGhpcy5yZXNpemVUcmFja2VyRWwsIm9uLWFycm93LWtleS1yZXNpemUiKSx0aGlzLnNob3dUcmFja2VyKCkpfW1vdmVUcmFja2VyT25LZXlEb3duKGEpe3RoaXMuaXNBcnJvd0xlZnRLZXlFdmVudChhKT8oYS5zdG9wUHJvcGFnYXRpb24oKSx0aGlzLm1vdmVUcmFja2VyKHRoaXMuY29sdW1u'@;
put 'UmVzaXplclNlcnZpY2UucmVzaXplZEJ5LTEyKSk6dGhpcy5pc0Fycm93UmlnaHRLZXlFdmVudChhKSYmKGEuc3RvcFByb3BhZ2F0aW9uKCksdGhpcy5tb3ZlVHJhY2tlcih0aGlzLmNvbHVtblJlc2l6ZXJTZXJ2aWNlLnJlc2l6ZWRCeSsxMikpfWhpZGVUcmFja2VyT25LZXlVcChhKXt0aGlz'@;
put 'LnJlc2l6ZVN0YXJ0ZWRPbktleURvd24mJih0aGlzLmlzQXJyb3dMZWZ0S2V5RXZlbnQoYSl8fHRoaXMuaXNBcnJvd1JpZ2h0S2V5RXZlbnQoYSkpJiYodGhpcy5yZXNpemVTdGFydGVkT25LZXlEb3duPSExLHRoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3ModGhpcy5yZXNpemVUcmFja2VyRWws'@;
put 'Im9uLWFycm93LWtleS1yZXNpemUiKSx0aGlzLmhpZGVUcmFja2VyKCksdGhpcy5jb2x1bW5IYW5kbGVFbC5mb2N1cygpKX1yZWRGbGFnVHJhY2tlcigpe3RoaXMuaXNXaXRoaW5NYXhSZXNpemVSYW5nZSE9PXRoaXMuY29sdW1uUmVzaXplclNlcnZpY2UuaXNXaXRoaW5NYXhSZXNpemVSYW5n'@;
put 'ZSYmKHRoaXMuaXNXaXRoaW5NYXhSZXNpemVSYW5nZT10aGlzLmNvbHVtblJlc2l6ZXJTZXJ2aWNlLmlzV2l0aGluTWF4UmVzaXplUmFuZ2UsdGhpcy5pc1dpdGhpbk1heFJlc2l6ZVJhbmdlP3RoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3ModGhpcy5yZXNpemVUcmFja2VyRWwsImV4Y2VlZGVk'@;
put 'LW1heCIpOnRoaXMucmVuZGVyZXIuYWRkQ2xhc3ModGhpcy5yZXNpemVUcmFja2VyRWwsImV4Y2VlZGVkLW1heCIpKX1pc0Fycm93TGVmdEtleUV2ZW50KGEpe3JldHVybiBJMihhLmtleSk9PT1nYS5BcnJvd0xlZnR9aXNBcnJvd1JpZ2h0S2V5RXZlbnQoYSl7cmV0dXJuIEkyKGEua2V5KT09'@;
put 'PWdhLkFycm93UmlnaHR9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKGZHKSxHZShFbyksR2UoV2EpLEdlKHBHKSxHZShpcyksR2UodnMpKX0sYy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWRnLWNvbHVtbi1zZXBhcmF0'@;
put 'b3IiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGEsZCl7aWYoMSZhJiYocWEoVVZlLDUpLHFhKFpWZSw1KSksMiZhKXtsZXQgaDtDaShoPVNpKCkpJiYoZC5yZXNpemVUcmFja2VyUmVmPWguZmlyc3QpLENpKGg9U2koKSkmJihkLmNvbHVtbkhhbmRsZVJlZj1oLmZpcnN0KX19LGhvc3RWYXJzOjIs'@;
put 'aG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiZUcigiZGF0YWdyaWQtY29sdW1uLXNlcGFyYXRvciIsITApfSxkZWNsczo2LHZhcnM6NCxjb25zdHM6W1siY29sdW1uSGFuZGxlIiwiIl0sWyJyZXNpemVUcmFja2VyIiwiIl0sWyJ0eXBlIiwiYnV0dG9uIiwiY2RrRHJhZyIsIiIsImNk'@;
put 'a0RyYWdMb2NrQXhpcyIsIngiLDEsImRhdGFncmlkLWNvbHVtbi1oYW5kbGUiLDMsImNka0RyYWdTdGFydGVkIiwiY2RrRHJhZ01vdmVkIiwiY2RrRHJhZ0VuZGVkIl0sWzEsImNsci1zci1vbmx5Il0sWzEsImRhdGFncmlkLWNvbHVtbi1yZXNpemUtdHJhY2tlciJdXSx0ZW1wbGF0ZTpmdW5j'@;
put 'dGlvbihhLGQpe2lmKDEmYSl7Y29uc3QgaD1MbigpO2RlKDAsImJ1dHRvbiIsMiwwKSxGdCgiY2RrRHJhZ1N0YXJ0ZWQiLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGgpLEN0KGQuc2hvd1RyYWNrZXIoKSl9KSgiY2RrRHJhZ01vdmVkIixmdW5jdGlvbih2KXtyZXR1cm4gd3QoaCksQ3QoZC5tb3Zl'@;
put 'VHJhY2tlcih2LmRpc3RhbmNlLngpKX0pKCJjZGtEcmFnRW5kZWQiLGZ1bmN0aW9uKHYpe3JldHVybiB3dChoKSxkLmhpZGVUcmFja2VyKCksQ3Qodi5zb3VyY2UuX2RyYWdSZWYucmVzZXQoKSl9KSxoZSgpLGRlKDIsInNwYW4iLDMpLExlKDMpLGhlKCksR3QoNCwiZGl2Iiw0LDEpfTImYSYm'@;
put 'KGhyKCJhcmlhLWxhYmVsIixkLmNvbW1vblN0cmluZy5rZXlzLmNvbHVtblNlcGFyYXRvckFyaWFMYWJlbCkoImFyaWEtZGVzY3JpYmVkYnkiLGQuZGVzY3JpcHRpb25JZCksZmUoMiksaHIoImlkIixkLmRlc2NyaXB0aW9uSWQpLGZlKCksRHIoIiAiLGQuY29tbW9uU3RyaW5nLmtleXMuY29s'@;
put 'dW1uU2VwYXJhdG9yRGVzY3JpcHRpb24sIiAiKSl9LGRlcGVuZGVuY2llczpbSVplXSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxSNz0oKCk9PntjbGFzcyBjIGV4dGVuZHMgbk97Y29uc3RydWN0b3IoYSxkLGgsZix2LE0pe3N1cGVyKGgpLHRoaXMuZWw9YSx0aGlzLl9zb3J0PWQsdGhpcy52'@;
put 'Y3I9Zix0aGlzLmRldGFpbFNlcnZpY2U9dix0aGlzLmNoYW5nZURldGVjdG9yUmVmPU0sdGhpcy5zb3J0T3JkZXJDaGFuZ2U9bmV3IEtyLHRoaXMuZmlsdGVyVmFsdWVDaGFuZ2U9bmV3IEtyLHRoaXMuY3VzdG9tRmlsdGVyPSExLHRoaXMuX2NvbFR5cGU9InN0cmluZyIsdGhpcy5fc29ydE9y'@;
put 'ZGVyPXhoLlVOU09SVEVELHRoaXMuc3Vic2NyaXB0aW9ucz1bXSx0aGlzLl9zaG93U2VwYXJhdG9yPSEwLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMubGlzdGVuRm9yU29ydGluZ0NoYW5nZXMoKSksdGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5saXN0ZW5Gb3JEZXRhaWxQYW5l'@;
put 'Q2hhbmdlcygpKX1nZXQgaXNIaWRkZW4oKXtyZXR1cm4gdGhpcy5lbC5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5jb250YWlucyhLeCl9Z2V0IHNob3dTZXBhcmF0b3IoKXtyZXR1cm4gdGhpcy5fc2hvd1NlcGFyYXRvcn1zZXQgc2hvd1NlcGFyYXRvcihhKXt0aGlzLl9zaG93U2VwYXJhdG9y'@;
put 'PWEsdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKX1nZXQgY29sVHlwZSgpe3JldHVybiB0aGlzLl9jb2xUeXBlfXNldCBjb2xUeXBlKGEpe3RoaXMuX2NvbFR5cGU9YX1nZXQgZmllbGQoKXtyZXR1cm4gdGhpcy5fZmllbGR9c2V0IGZpZWxkKGEpeyJzdHJpbmciPT10eXBl'@;
put 'b2YgYSYmKHRoaXMuX2ZpZWxkPWEsdGhpcy5fc29ydEJ5fHwodGhpcy5fc29ydEJ5PW5ldyBvTyhhKSkpfWdldCBzb3J0QnkoKXtyZXR1cm4gdGhpcy5fc29ydEJ5fXNldCBzb3J0QnkoYSl7InN0cmluZyI9PXR5cGVvZiBhP3RoaXMuX3NvcnRCeT1uZXcgb08oYSk6YT90aGlzLl9zb3J0Qnk9'@;
put 'YTp0aGlzLmZpZWxkP3RoaXMuX3NvcnRCeT1uZXcgb08odGhpcy5maWVsZCk6ZGVsZXRlIHRoaXMuX3NvcnRCeX1nZXQgc29ydE9yZGVyKCl7cmV0dXJuIHRoaXMuX3NvcnRPcmRlcn1zZXQgc29ydE9yZGVyKGEpe2lmKCEodHlwZW9mIGE+InUiKSYmdGhpcy5fc29ydE9yZGVyIT09YSlzd2l0'@;
put 'Y2goYSl7Y2FzZSB4aC5BU0M6dGhpcy5zb3J0KCExKTticmVhaztjYXNlIHhoLkRFU0M6dGhpcy5zb3J0KCEwKTticmVhaztkZWZhdWx0OnRoaXMuX3NvcnQuY2xlYXIoKX19c2V0IHVwZGF0ZUZpbHRlclZhbHVlKGEpe3RoaXMuZmlsdGVyP3RoaXMuZmlsdGVyIGluc3RhbmNlb2YgQTc/KCgh'@;
put 'YXx8InN0cmluZyIhPXR5cGVvZiBhKSYmKGE9IiIpLGEhPT10aGlzLmZpbHRlci52YWx1ZSYmKHRoaXMuZmlsdGVyLnZhbHVlPWEpKTp0aGlzLmZpbHRlciBpbnN0YW5jZW9mIFQ3JiYoKCFhfHwhKGEgaW5zdGFuY2VvZiBBcnJheSkpJiYoYT1bbnVsbCxudWxsXSksMj09PWEubGVuZ3RoJiYo'@;
put 'YVswXSE9PXRoaXMuZmlsdGVyLnZhbHVlWzBdfHxhWzFdIT09dGhpcy5maWx0ZXIudmFsdWVbMV0pJiYodGhpcy5maWx0ZXIudmFsdWU9YSkpOnRoaXMuaW5pdEZpbHRlclZhbHVlPWF9c2V0IHByb2plY3RlZEZpbHRlcihhKXthJiYodGhpcy5kZWxldGVGaWx0ZXIoKSx0aGlzLmN1c3RvbUZp'@;
put 'bHRlcj0hMCl9Z2V0IHNvcnRhYmxlKCl7cmV0dXJuISF0aGlzLl9zb3J0Qnl9Z2V0IGFyaWFTb3J0KCl7c3dpdGNoKHRoaXMuX3NvcnRPcmRlcil7Y2FzZSB4aC5BU0M6cmV0dXJuImFzY2VuZGluZyI7Y2FzZSB4aC5ERVNDOnJldHVybiJkZXNjZW5kaW5nIjtkZWZhdWx0OnJldHVybiJub25l'@;
put 'In19Z2V0IHNvcnREaXJlY3Rpb24oKXtyZXR1cm4gdGhpcy5fc29ydERpcmVjdGlvbn1nZXQgZmlsdGVyVmFsdWUoKXtyZXR1cm4gdGhpcy5maWx0ZXIgaW5zdGFuY2VvZiBBN3x8dGhpcy5maWx0ZXIgaW5zdGFuY2VvZiBUNz90aGlzLmZpbHRlci52YWx1ZTpudWxsfXNldCBmaWx0ZXJWYWx1'@;
put 'ZShhKXsodGhpcy5maWx0ZXIgaW5zdGFuY2VvZiBBN3x8dGhpcy5maWx0ZXIgaW5zdGFuY2VvZiBUNykmJih0aGlzLnVwZGF0ZUZpbHRlclZhbHVlPWEsdGhpcy5maWx0ZXJWYWx1ZUNoYW5nZS5lbWl0KHRoaXMuZmlsdGVyLnZhbHVlKSl9Z2V0IF92aWV3KCl7cmV0dXJuIHRoaXMud3JhcHBl'@;
put 'ZEluamVjdG9yLmdldChoRyx0aGlzLnZjcikuY29sdW1uVmlld31uZ09uSW5pdCgpe3RoaXMud3JhcHBlZEluamVjdG9yPW5ldyBZTChoRyx0aGlzLnZjcil9bmdPbkNoYW5nZXMoYSl7YS5jb2xUeXBlJiZhLmNvbFR5cGUuY3VycmVudFZhbHVlJiZhLmNvbFR5cGUuY3VycmVudFZhbHVlIT09'@;
put 'YS5jb2xUeXBlLnByZXZpb3VzVmFsdWUmJiF0aGlzLmN1c3RvbUZpbHRlciYmIXRoaXMuZmlsdGVyJiZ0aGlzLmNvbFR5cGUmJnRoaXMuZmllbGQmJnRoaXMuc2V0dXBEZWZhdWx0RmlsdGVyKHRoaXMuZmllbGQsdGhpcy5jb2xUeXBlKSxhLmZpZWxkJiZhLmZpZWxkLmN1cnJlbnRWYWx1ZSYm'@;
put 'YS5maWVsZC5jdXJyZW50VmFsdWUhPT1hLmZpZWxkLnByZXZpb3VzVmFsdWUmJiF0aGlzLmN1c3RvbUZpbHRlciYmdGhpcy5jb2xUeXBlJiZ0aGlzLnNldHVwRGVmYXVsdEZpbHRlcih0aGlzLmZpZWxkLHRoaXMuY29sVHlwZSl9bmdPbkRlc3Ryb3koKXtzdXBlci5uZ09uRGVzdHJveSgpLHRo'@;
put 'aXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKGE9PmEudW5zdWJzY3JpYmUoKSl9c29ydChhKXt0aGlzLnNvcnRhYmxlJiYodGhpcy5fc29ydC50b2dnbGUodGhpcy5fc29ydEJ5LGEpLHRoaXMuX3NvcnRPcmRlcj10aGlzLl9zb3J0LnJldmVyc2U/eGguREVTQzp4aC5BU0MsdGhpcy5fc29ydERp'@;
put 'cmVjdGlvbj10aGlzLl9zb3J0T3JkZXI9PT14aC5ERVNDPyJkb3duIjoidXAiLHRoaXMuc29ydE9yZGVyQ2hhbmdlLmVtaXQodGhpcy5fc29ydE9yZGVyKSl9bGlzdGVuRm9yRGV0YWlsUGFuZUNoYW5nZXMoKXtyZXR1cm4gdGhpcy5kZXRhaWxTZXJ2aWNlLnN0YXRlQ2hhbmdlLnN1YnNjcmli'@;
put 'ZShhPT57dGhpcy5zaG93U2VwYXJhdG9yIT09IWEmJih0aGlzLnNob3dTZXBhcmF0b3I9IWEpfSl9bGlzdGVuRm9yU29ydGluZ0NoYW5nZXMoKXtyZXR1cm4gdGhpcy5fc29ydC5jaGFuZ2Uuc3Vic2NyaWJlKGE9Pnt0aGlzLmNoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpLHRoaXMu'@;
put 'c29ydE9yZGVyIT09eGguVU5TT1JURUQmJmEuY29tcGFyYXRvciE9PXRoaXMuX3NvcnRCeSYmKHRoaXMuX3NvcnRPcmRlcj14aC5VTlNPUlRFRCx0aGlzLnNvcnRPcmRlckNoYW5nZS5lbWl0KHRoaXMuX3NvcnRPcmRlciksdGhpcy5fc29ydERpcmVjdGlvbj1udWxsKX0pfXNldHVwRGVmYXVs'@;
put 'dEZpbHRlcihhLGQpeyJudW1iZXIiPT09ZD90aGlzLnNldEZpbHRlcihuZXcgVDcobmV3IGlPKGEpKSk6InN0cmluZyI9PT1kJiZ0aGlzLnNldEZpbHRlcihuZXcgQTcobmV3IGFPKGEpKSksdGhpcy5maWx0ZXImJnRoaXMuaW5pdEZpbHRlclZhbHVlJiYodGhpcy51cGRhdGVGaWx0ZXJWYWx1'@;
put 'ZT10aGlzLmluaXRGaWx0ZXJWYWx1ZSxkZWxldGUgdGhpcy5pbml0RmlsdGVyVmFsdWUpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZShKaSksR2Uoc08pLEdlKHVnKSxHZShEbyksR2UoWGYpLEdlKEVzKSl9LGMuXHUwMjc1Y21wPVZyKHt0eXBl'@;
put 'OmMsc2VsZWN0b3JzOltbImNsci1kZy1jb2x1bW4iXV0sY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24oYSxkLGgpe2lmKDEmYSYmYW8oaCxlTyw1KSwyJmEpe2xldCBmO0NpKGY9U2koKSkmJihkLnByb2plY3RlZEZpbHRlcj1mLmZpcnN0KX19LGhvc3RBdHRyczpbInJvbGUiLCJjb2x1bW5oZWFk'@;
put 'ZXIiXSxob3N0VmFyczozLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmKGhyKCJhcmlhLXNvcnQiLGQuYXJpYVNvcnQpLFRyKCJkYXRhZ3JpZC1jb2x1bW4iLCEwKSl9LGlucHV0czp7ZmlsdGVyU3RyaW5nUGxhY2Vob2xkZXI6W05uLk5vbmUsImNsckZpbHRlclN0cmluZ1BsYWNl'@;
put 'aG9sZGVyIiwiZmlsdGVyU3RyaW5nUGxhY2Vob2xkZXIiXSxmaWx0ZXJOdW1iZXJNYXhQbGFjZWhvbGRlcjpbTm4uTm9uZSwiY2xyRmlsdGVyTnVtYmVyTWF4UGxhY2Vob2xkZXIiLCJmaWx0ZXJOdW1iZXJNYXhQbGFjZWhvbGRlciJdLGZpbHRlck51bWJlck1pblBsYWNlaG9sZGVyOltObi5O'@;
put 'b25lLCJjbHJGaWx0ZXJOdW1iZXJNaW5QbGFjZWhvbGRlciIsImZpbHRlck51bWJlck1pblBsYWNlaG9sZGVyIl0sY29sVHlwZTpbTm4uTm9uZSwiY2xyRGdDb2xUeXBlIiwiY29sVHlwZSJdLGZpZWxkOltObi5Ob25lLCJjbHJEZ0ZpZWxkIiwiZmllbGQiXSxzb3J0Qnk6W05uLk5vbmUsImNs'@;
put 'ckRnU29ydEJ5Iiwic29ydEJ5Il0sc29ydE9yZGVyOltObi5Ob25lLCJjbHJEZ1NvcnRPcmRlciIsInNvcnRPcmRlciJdLHVwZGF0ZUZpbHRlclZhbHVlOltObi5Ob25lLCJjbHJGaWx0ZXJWYWx1ZSIsInVwZGF0ZUZpbHRlclZhbHVlIl19LG91dHB1dHM6e3NvcnRPcmRlckNoYW5nZToiY2xy'@;
put 'RGdTb3J0T3JkZXJDaGFuZ2UiLGZpbHRlclZhbHVlQ2hhbmdlOiJjbHJGaWx0ZXJWYWx1ZUNoYW5nZSJ9LGZlYXR1cmVzOlt2ZChbb2ddKSx3YSx3bF0sbmdDb250ZW50U2VsZWN0b3JzOllWZSxkZWNsczo5LHZhcnM6NSxjb25zdHM6W1siY29sdW1uVGl0bGUiLCIiXSxbMSwiZGF0YWdyaWQt'@;
put 'Y29sdW1uLWZsZXgiXSxbImNsYXNzIiwiZGF0YWdyaWQtY29sdW1uLXRpdGxlIiwidHlwZSIsImJ1dHRvbiIsMywiY2xpY2siLDQsIm5nSWYiXSxbMywiY2xyRmlsdGVyUGxhY2Vob2xkZXIiLCJjbHJEZ1N0cmluZ0ZpbHRlciIsImNsckZpbHRlclZhbHVlIiwiY2xyRmlsdGVyVmFsdWVDaGFu'@;
put 'Z2UiLDQsIm5nSWYiXSxbMywiY2xyRmlsdGVyTWF4UGxhY2Vob2xkZXIiLCJjbHJGaWx0ZXJNaW5QbGFjZWhvbGRlciIsImNsckRnTnVtZXJpY0ZpbHRlciIsImNsckZpbHRlclZhbHVlIiwiY2xyRmlsdGVyVmFsdWVDaGFuZ2UiLDQsIm5nSWYiXSxbImNsYXNzIiwiZGF0YWdyaWQtY29sdW1u'@;
put 'LXRpdGxlIiw0LCJuZ0lmIl0sWzQsIm5nSWYiXSxbInR5cGUiLCJidXR0b24iLDEsImRhdGFncmlkLWNvbHVtbi10aXRsZSIsMywiY2xpY2siXSxbNCwibmdUZW1wbGF0ZU91dGxldCJdLFsic2hhcGUiLCJhcnJvdyIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsImNsYXNzIiwic29ydC1pY29uIiw0'@;
put 'LCJuZ0lmIl0sWyJzaGFwZSIsImFycm93IiwiYXJpYS1oaWRkZW4iLCJ0cnVlIiwxLCJzb3J0LWljb24iXSxbMywiY2xyRmlsdGVyVmFsdWVDaGFuZ2UiLCJjbHJGaWx0ZXJQbGFjZWhvbGRlciIsImNsckRnU3RyaW5nRmlsdGVyIiwiY2xyRmlsdGVyVmFsdWUiXSxbMywiY2xyRmlsdGVyVmFs'@;
put 'dWVDaGFuZ2UiLCJjbHJGaWx0ZXJNYXhQbGFjZWhvbGRlciIsImNsckZpbHRlck1pblBsYWNlaG9sZGVyIiwiY2xyRGdOdW1lcmljRmlsdGVyIiwiY2xyRmlsdGVyVmFsdWUiXSxbMSwiZGF0YWdyaWQtY29sdW1uLXRpdGxlIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoc2EoV1Zl'@;
put 'KSxkZSgwLCJkaXYiLDEpLGd0KDEsS1ZlLDMsMiwiYnV0dG9uIiwyKSxZcigyKSxndCgzLHFWZSwxLDMsImNsci1kZy1zdHJpbmctZmlsdGVyIiwzKSg0LFhWZSwxLDQsImNsci1kZy1udW1lcmljLWZpbHRlciIsNCkoNSxKVmUsMSwwLCJuZy10ZW1wbGF0ZSIsbnVsbCwwLEljKSg3LGVCZSwy'@;
put 'LDEsInNwYW4iLDUpKDgsdEJlLDEsMCwiY2xyLWRnLWNvbHVtbi1zZXBhcmF0b3IiLDYpLGhlKCkpLDImYSYmKGZlKCksTWUoIm5nSWYiLGQuc29ydGFibGUpLGZlKDIpLE1lKCJuZ0lmIixkLmZpZWxkJiYhZC5jdXN0b21GaWx0ZXImJiJzdHJpbmciPT1kLmNvbFR5cGUpLGZlKCksTWUoIm5n'@;
put 'SWYiLGQuZmllbGQmJiFkLmN1c3RvbUZpbHRlciYmIm51bWJlciI9PWQuY29sVHlwZSksZmUoMyksTWUoIm5nSWYiLCFkLnNvcnRhYmxlKSxmZSgpLE1lKCJuZ0lmIixkLnNob3dTZXBhcmF0b3IpKX0sZGVwZW5kZW5jaWVzOltiYSxOMSxycyxEZGUsVGRlLGRHXSxlbmNhcHN1bGF0aW9uOjIs'@;
put 'Y2hhbmdlRGV0ZWN0aW9uOjB9KSxjfSkoKSxkZz0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoKXt0aGlzLl9maWx0ZXJzPWEsdGhpcy5fc29ydD1kLHRoaXMuX3BhZ2U9aCx0aGlzLmxvYWRpbmc9ITEsdGhpcy5fc21hcnQ9ITEsdGhpcy5fZGlzcGxheWVkPVtdLHRoaXMuX2NoYW5n'@;
put 'ZT1uZXcgV24sdGhpcy5fYWxsQ2hhbmdlcz1uZXcgV24sdGhpcy50cmFja0J5PWY9PmZ9Z2V0IHNtYXJ0KCl7cmV0dXJuIHRoaXMuX3NtYXJ0fWdldCBhbGwoKXtyZXR1cm4gdGhpcy5fYWxsfXNldCBhbGwoYSl7dGhpcy5fYWxsPWEsdGhpcy5lbWl0QWxsQ2hhbmdlcyhhKSx0aGlzLnNtYXJ0'@;
put 'P3RoaXMuX2ZpbHRlckl0ZW1zKCk6KHRoaXMuX2Rpc3BsYXllZD1hLHRoaXMuZW1pdENoYW5nZSgpKX1nZXQgZGlzcGxheWVkKCl7cmV0dXJuIHRoaXMuX2Rpc3BsYXllZH1nZXQgY2hhbmdlKCl7cmV0dXJuIHRoaXMuX2NoYW5nZS5hc09ic2VydmFibGUoKX1nZXQgYWxsQ2hhbmdlcygpe3Jl'@;
put 'dHVybiB0aGlzLl9hbGxDaGFuZ2VzLmFzT2JzZXJ2YWJsZSgpfWdldCB1bmluaXRpYWxpemVkKCl7cmV0dXJuIXRoaXMuX2FsbH1kZXN0cm95KCl7dGhpcy5fZmlsdGVyc1N1YiYmdGhpcy5fZmlsdGVyc1N1Yi51bnN1YnNjcmliZSgpLHRoaXMuX3NvcnRTdWImJnRoaXMuX3NvcnRTdWIudW5z'@;
put 'dWJzY3JpYmUoKSx0aGlzLl9wYWdlU3ViJiZ0aGlzLl9wYWdlU3ViLnVuc3Vic2NyaWJlKCl9c21hcnRlbkRvd24oKXt0aGlzLl9zbWFydD0hMSx0aGlzLmRlc3Ryb3koKX1zbWFydGVuVXAoKXt0aGlzLl9zbWFydD0hMCx0aGlzLl9maWx0ZXJzU3ViPXRoaXMuX2ZpbHRlcnMuY2hhbmdlLnN1'@;
put 'YnNjcmliZSgoKT0+dGhpcy5fZmlsdGVySXRlbXMoKSksdGhpcy5fc29ydFN1Yj10aGlzLl9zb3J0LmNoYW5nZS5zdWJzY3JpYmUoKCk9Pnt0aGlzLl9zb3J0LmNvbXBhcmF0b3I/dGhpcy5fc29ydEl0ZW1zKCk6dGhpcy5fZmlsdGVySXRlbXMoKX0pLHRoaXMuX3BhZ2VTdWI9dGhpcy5fcGFn'@;
put 'ZS5jaGFuZ2Uuc3Vic2NyaWJlKCgpPT50aGlzLl9jaGFuZ2VQYWdlKCkpfXJlZnJlc2goKXt0aGlzLnNtYXJ0JiZ0aGlzLl9maWx0ZXJJdGVtcygpfWVtaXRDaGFuZ2UoKXt0aGlzLl9jaGFuZ2UubmV4dCh0aGlzLmRpc3BsYXllZCl9ZW1pdEFsbENoYW5nZXMoYSl7dGhpcy5fYWxsQ2hhbmdl'@;
put 'cy5uZXh0KGEpfV9maWx0ZXJJdGVtcygpe3RoaXMudW5pbml0aWFsaXplZHx8KHRoaXMuX2ZpbHRlcmVkPXRoaXMuX2ZpbHRlcnMuaGFzQWN0aXZlRmlsdGVycygpP3RoaXMuX2FsbC5maWx0ZXIoYT0+dGhpcy5fZmlsdGVycy5hY2NlcHRzKGEpKTp0aGlzLl9hbGwuc2xpY2UoKSx0aGlzLl9w'@;
put 'YWdlLnRvdGFsSXRlbXM9dGhpcy5fZmlsdGVyZWQubGVuZ3RoLHRoaXMuX3NvcnRJdGVtcygpKX1fc29ydEl0ZW1zKCl7dGhpcy51bmluaXRpYWxpemVkfHwodGhpcy5fc29ydC5jb21wYXJhdG9yJiZ0aGlzLl9maWx0ZXJlZC5zb3J0KChhLGQpPT50aGlzLl9zb3J0LmNvbXBhcmUoYSxkKSks'@;
put 'dGhpcy5fY2hhbmdlUGFnZSgpKX1fY2hhbmdlUGFnZSgpe3RoaXMudW5pbml0aWFsaXplZHx8dGhpcy5fcGFnZS5hY3RpdmF0ZWQmJjA9PT10aGlzLl9wYWdlLnNpemV8fCh0aGlzLl9kaXNwbGF5ZWQ9dGhpcy5fcGFnZS5zaXplPjA/dGhpcy5fZmlsdGVyZWQuc2xpY2UodGhpcy5fcGFnZS5m'@;
put 'aXJzdEl0ZW0sdGhpcy5fcGFnZS5sYXN0SXRlbSsxKTp0aGlzLl9maWx0ZXJlZCx0aGlzLmVtaXRDaGFuZ2UoKSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHhyKHVnKSx4cihzTykseHIoTW0pKX0sYy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZh'@;
put 'Y3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSxKeT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYpe3RoaXMudGVtcGxhdGU9YSx0aGlzLmRpZmZlcnM9ZCx0aGlzLml0ZW1zPWgsdGhpcy5kaWZmZXI9bnVsbCx0aGlzLnN1YnNjcmlwdGlvbnM9W10saC5zbWFydGVuVXAoKSx0aGlz'@;
put 'Lml0ZXJhYmxlUHJveHk9bmV3IG5zKGYsYSxkKSx0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChoLmNoYW5nZS5zdWJzY3JpYmUodj0+e3RoaXMuaXRlcmFibGVQcm94eS5uZ0Zvck9mPXYsdGhpcy5pdGVyYWJsZVByb3h5Lm5nRG9DaGVjaygpfSkpfXNldCByYXdJdGVtcyhhKXt0aGlzLl9yYXdJ'@;
put 'dGVtcz1hfHxbXX1zZXQgdHJhY2tCeShhKXt0aGlzLml0ZXJhYmxlUHJveHkubmdGb3JUcmFja0J5PWF9c3RhdGljIG5nVGVtcGxhdGVDb250ZXh0R3VhcmQoYSxkKXtyZXR1cm4hMH1uZ0RvQ2hlY2soKXt0aGlzLmRpZmZlcnx8KHRoaXMuZGlmZmVyPXRoaXMuZGlmZmVycy5maW5kKHRoaXMu'@;
put 'X3Jhd0l0ZW1zKS5jcmVhdGUodGhpcy5pdGVyYWJsZVByb3h5Lm5nRm9yVHJhY2tCeSkpLHRoaXMuZGlmZmVyJiZ0aGlzLmRpZmZlci5kaWZmKHRoaXMuX3Jhd0l0ZW1zKSYmKHRoaXMuaXRlbXMuYWxsPXRoaXMuX3Jhd0l0ZW1zKX1uZ09uRGVzdHJveSgpe3RoaXMuc3Vic2NyaXB0aW9ucy5m'@;
put 'b3JFYWNoKGE9PmEudW5zdWJzY3JpYmUoKSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKFNsKSxHZShlbSksR2UoZGcpLEdlKERvKSl9LGMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsImNsckRnSXRlbXMiLCIiLCJjbHJE'@;
put 'Z0l0ZW1zT2YiLCIiXV0saW5wdXRzOntyYXdJdGVtczpbTm4uTm9uZSwiY2xyRGdJdGVtc09mIiwicmF3SXRlbXMiXSx0cmFja0J5OltObi5Ob25lLCJjbHJEZ0l0ZW1zVHJhY2tCeSIsInRyYWNrQnkiXX19KSxjfSkoKSxnRz0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMuaXRl'@;
put 'bXM9YX1nZXQgZW1wdHlEYXRhZ3JpZCgpe3JldHVybiEodGhpcy5pdGVtcy5sb2FkaW5nfHx0aGlzLml0ZW1zLmRpc3BsYXllZCYmMCE9PXRoaXMuaXRlbXMuZGlzcGxheWVkLmxlbmd0aCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKGRnKSl9'@;
put 'LGMuXHUwMjc1Y21wPVZyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1kZy1wbGFjZWhvbGRlciJdXSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmVHIoImRhdGFncmlkLXBsYWNlaG9sZGVyLWNvbnRhaW5lciIsITApfSxuZ0NvbnRlbnRTZWxlY3RvcnM6eW8s'@;
put 'ZGVjbHM6NCx2YXJzOjQsY29uc3RzOltbMSwiZGF0YWdyaWQtcGxhY2Vob2xkZXIiXSxbImNsYXNzIiwiZGF0YWdyaWQtcGxhY2Vob2xkZXItaW1hZ2UiLDQsIm5nSWYiXSxbMSwiZGF0YWdyaWQtcGxhY2Vob2xkZXItY29udGVudCJdLFs0LCJuZ0lmIl0sWzEsImRhdGFncmlkLXBsYWNlaG9s'@;
put 'ZGVyLWltYWdlIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoc2EoKSxkZSgwLCJkaXYiLDApLGd0KDEsbkJlLDEsMCwiZGl2IiwxKSxkZSgyLCJzcGFuIiwyKSxndCgzLHJCZSwxLDAsIm5nLWNvbnRlbnQiLDMpLGhlKCkoKSksMiZhJiYoVHIoImRhdGFncmlkLWVtcHR5IixkLmVt'@;
put 'cHR5RGF0YWdyaWQpLGZlKCksTWUoIm5nSWYiLGQuZW1wdHlEYXRhZ3JpZCksZmUoMiksTWUoIm5nSWYiLGQuZW1wdHlEYXRhZ3JpZCkpfSxkZXBlbmRlbmNpZXM6W2JhXSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxtRz0oKCk9PntjbGFzcyBje25nQWZ0ZXJWaWV3SW5pdCgpe3RoaXMuY2Vs'@;
put 'bFZpZXc9dGhpcy50ZW1wbGF0ZVJlZi5jcmVhdGVFbWJlZGRlZFZpZXcobnVsbCl9bmdPbkRlc3Ryb3koKXt0aGlzLmNlbGxWaWV3LmRlc3Ryb3koKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1Y21wPVZyKHt0eXBlOmMsc2VsZWN0'@;
put 'b3JzOltbImRnLXdyYXBwZWQtY2VsbCJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24oYSxkKXtpZigxJmEmJnFhKGlCZSw1KSwyJmEpe2xldCBoO0NpKGg9U2koKSkmJihkLnRlbXBsYXRlUmVmPWguZmlyc3QpfX0sbmdDb250ZW50U2VsZWN0b3JzOnlvLGRlY2xzOjIsdmFyczowLGNvbnN0czpbWyJj'@;
put 'ZWxsUG9ydGFsIiwiIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoc2EoKSxndCgwLGFCZSwxLDAsIm5nLXRlbXBsYXRlIixudWxsLDAsSWMpKX0sZW5jYXBzdWxhdGlvbjoyfSksY30pKCksUWY9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLnZjcj1hfWdldCBfdmll'@;
put 'dygpe3JldHVybiB0aGlzLndyYXBwZWRJbmplY3Rvci5nZXQobUcsdGhpcy52Y3IpLmNlbGxWaWV3fW5nT25Jbml0KCl7dGhpcy53cmFwcGVkSW5qZWN0b3I9bmV3IFlMKG1HLHRoaXMudmNyKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2UoRG8p'@;
put 'KX0sYy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWRnLWNlbGwiXV0sY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24oYSxkLGgpe2lmKDEmYSYmYW8oaCxXTCw0KSwyJmEpe2xldCBmO0NpKGY9U2koKSkmJihkLnNpZ25wb3N0PWYpfX0saG9zdEF0dHJzOlsicm9sZSIsImdy'@;
put 'aWRjZWxsIl0saG9zdFZhcnM6NCxob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJlRyKCJkYXRhZ3JpZC1jZWxsIiwhMCkoImRhdGFncmlkLXNpZ25wb3N0LXRyaWdnZXIiLGQuc2lnbnBvc3QubGVuZ3RoPjApfSxuZ0NvbnRlbnRTZWxlY3RvcnM6eW8sZGVjbHM6MSx2YXJzOjAsdGVt'@;
put 'cGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihzYSgpLFlyKDApKX0sZW5jYXBzdWxhdGlvbjoyfSksY30pKCksSWRlPTAscXg9KCgpPT57Y2xhc3MgYyBleHRlbmRzIFUxe2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLmV4cGFuZGFibGVJZD0iIix0aGlzLl9yZXBsYWNlPW5ldyBlaSghMSks'@;
put 'dGhpcy5fYW5pbWF0ZT1uZXcgV24sSWRlKyssdGhpcy5leHBhbmRhYmxlSWQ9ImNsci1kZy1leHBhbmRhYmxlLXJvdy0iK0lkZX1nZXQgZXhwYW5kZWQoKXtyZXR1cm4gdGhpcy5fZXhwYW5kZWR9c2V0IGV4cGFuZGVkKGEpeyhhPSEhYSkhPT10aGlzLl9leHBhbmRlZCYmKHRoaXMuX2V4cGFu'@;
put 'ZGVkPWEsdGhpcy5fYW5pbWF0ZS5uZXh0KCksdGhpcy5fZXhwYW5kQ2hhbmdlLm5leHQoYSkpfWdldCByZXBsYWNlKCl7cmV0dXJuIHRoaXMuX3JlcGxhY2UuYXNPYnNlcnZhYmxlKCl9Z2V0IGFuaW1hdGUoKXtyZXR1cm4gdGhpcy5fYW5pbWF0ZS5hc09ic2VydmFibGUoKX1sb2FkaW5nU3Rh'@;
put 'dGVDaGFuZ2UoYSl7c3VwZXIubG9hZGluZ1N0YXRlQ2hhbmdlKGEpLGEhPT16MS5MT0FESU5HJiZ0aGlzLl9hbmltYXRlLm5leHQoKX1zZXRSZXBsYWNlKGEpe3RoaXMuX3JlcGxhY2UubmV4dChhKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMu'@;
put 'XHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCk7dmFyIFF5PWZ1bmN0aW9uKGMpe3JldHVybiBjW2MuRElTUExBWT0wXT0iRElTUExBWSIsY1tjLkNBTENVTEFURT0xXT0iQ0FMQ1VMQVRFIixjfShReXx8e30pLHBsPWZ1bmN0aW9uKGMpe3JldHVybiBj'@;
put 'W2MuTm9uZT0wXT0iTm9uZSIsY1tjLlNpbmdsZT0xXT0iU2luZ2xlIixjW2MuTXVsdGk9Ml09Ik11bHRpIixjfShwbHx8e30pO2xldCB2Rz0oKCk9PntjbGFzcyBje25nQWZ0ZXJWaWV3SW5pdCgpe3RoaXMucm93Vmlldz10aGlzLnRlbXBsYXRlUmVmLmNyZWF0ZUVtYmVkZGVkVmlldyhudWxs'@;
put 'KX1uZ09uRGVzdHJveSgpe3RoaXMucm93Vmlldy5kZXN0cm95KCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJkZy13cmFwcGVkLXJvdyJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24oYSxk'@;
put 'KXtpZigxJmEmJnFhKG9CZSw1KSwyJmEpe2xldCBoO0NpKGg9U2koKSkmJihkLnRlbXBsYXRlUmVmPWguZmlyc3QpfX0sbmdDb250ZW50U2VsZWN0b3JzOnlvLGRlY2xzOjIsdmFyczowLGNvbnN0czpbWyJyb3dQb3J0YWwiLCIiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihzYSgp'@;
put 'LGd0KDAsc0JlLDEsMCwibmctdGVtcGxhdGUiLG51bGwsMCxJYykpfSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxWWmU9MCxlXz0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCl7dGhpcy5faXRlbXM9YSx0aGlzLnByZXNlcnZlU2VsZWN0aW9uPSExLHRoaXMuc2hpZnRQcmVzc2VkPSEx'@;
put 'LHRoaXMucm93U2VsZWN0aW9uTW9kZT0hMSx0aGlzLnByZXZTZWxlY3Rpb25SZWZzPVtdLHRoaXMubG9ja2VkUmVmcz1bXSx0aGlzLnZhbHVlQ29sbGVjdG9yPW5ldyBXbix0aGlzLl9zZWxlY3Rpb25UeXBlPXBsLk5vbmUsdGhpcy5fY2hhbmdlPW5ldyBXbix0aGlzLnN1YnNjcmlwdGlvbnM9'@;
put 'W10sdGhpcy5pZD0iY2xyLWRnLXNlbGVjdGlvbiIrVlplKyssdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goZC5jaGFuZ2Uuc3Vic2NyaWJlKCgpPT57IXRoaXMuX3NlbGVjdGFibGV8fHRoaXMucHJlc2VydmVTZWxlY3Rpb258fHRoaXMuY2xlYXJTZWxlY3Rpb24oKX0pKSx0aGlzLnN1YnNjcmlw'@;
put 'dGlvbnMucHVzaChhLmFsbENoYW5nZXMuc3Vic2NyaWJlKGg9Pntjb25zdCBmPVtdO3N3aXRjaCh0aGlzLnNlbGVjdGlvblR5cGUpe2Nhc2UgcGwuTm9uZTpicmVhaztjYXNlIHBsLlNpbmdsZTp7bGV0IHYsTT0hMTt0aGlzLmN1cnJlbnRTaW5nbGUmJiF0aGlzLnByZXZTaW5nbGVTZWxlY3Rp'@;
put 'b25SZWYmJih0aGlzLnByZXZTaW5nbGVTZWxlY3Rpb25SZWY9YS50cmFja0J5KHRoaXMuY3VycmVudFNpbmdsZSkpLGguZm9yRWFjaChEPT57Y29uc3QgWj1hLnRyYWNrQnkoRCk7dGhpcy5wcmV2U2luZ2xlU2VsZWN0aW9uUmVmPT09WiYmKHY9RCxNPSEwKSx0aGlzLmxvY2tlZFJlZnMuaW5k'@;
put 'ZXhPZihaKT4tMSYmZi5wdXNoKFopfSksYS5zbWFydCYmIXYmJihNPSEwKSxzZXRUaW1lb3V0KCgpPT57TSYmKHRoaXMuY3VycmVudFNpbmdsZT12KX0sMCk7YnJlYWt9Y2FzZSBwbC5NdWx0aTp7bGV0IHY9dGhpcy5jdXJyZW50LnNsaWNlKCksTT0hMTt0aGlzLmN1cnJlbnQubGVuZ3RoPjAm'@;
put 'JnRoaXMucHJldlNlbGVjdGlvblJlZnMubGVuZ3RoIT09dGhpcy5jdXJyZW50Lmxlbmd0aCYmKHRoaXMucHJldlNlbGVjdGlvblJlZnM9W10sdGhpcy5jdXJyZW50LmZvckVhY2goRD0+e3RoaXMucHJldlNlbGVjdGlvblJlZnMucHVzaChhLnRyYWNrQnkoRCkpfSkpLGguZm9yRWFjaChEPT57'@;
put 'Y29uc3QgWj1hLnRyYWNrQnkoRCk7dGhpcy5sb2NrZWRSZWZzLmluZGV4T2YoWik+LTEmJmYucHVzaChaKX0pLHYubGVuZ3RoPjAmJihoLmZvckVhY2goRD0+e2NvbnN0IFo9YS50cmFja0J5KEQpLHJlPXRoaXMucHJldlNlbGVjdGlvblJlZnMuaW5kZXhPZihaKTtyZT4tMSYmKHZbcmVdPUQs'@;
put 'TT0hMCl9KSxhLnNtYXJ0JiYodj12LmZpbHRlcihEPT5oLmluZGV4T2YoRCk+LTEpLHRoaXMuY3VycmVudC5sZW5ndGghPT12Lmxlbmd0aCYmKE09ITApKSxzZXRUaW1lb3V0KCgpPT57TSYmKHRoaXMuY3VycmVudD12KX0sMCkpO2JyZWFrfX10aGlzLmxvY2tlZFJlZnM9Zn0pKSx0aGlzLnN1'@;
put 'YnNjcmlwdGlvbnMucHVzaCh0aGlzLnZhbHVlQ29sbGVjdG9yLnBpcGUoZm0oMCkpLnN1YnNjcmliZSgoKT0+dGhpcy5lbWl0Q2hhbmdlKCkpKX1nZXQgc2VsZWN0aW9uVHlwZSgpe3JldHVybiB0aGlzLl9zZWxlY3Rpb25UeXBlfXNldCBzZWxlY3Rpb25UeXBlKGEpe2EhPT10aGlzLnNlbGVj'@;
put 'dGlvblR5cGUmJih0aGlzLl9zZWxlY3Rpb25UeXBlPWEsYT09PXBsLk5vbmU/ZGVsZXRlIHRoaXMuY3VycmVudDp0aGlzLnVwZGF0ZUN1cnJlbnQoW10sITEpKX1nZXQgY3VycmVudCgpe3JldHVybiB0aGlzLl9jdXJyZW50fXNldCBjdXJyZW50KGEpe3RoaXMudXBkYXRlQ3VycmVudChhLCEw'@;
put 'KX1nZXQgY3VycmVudFNpbmdsZSgpe3JldHVybiB0aGlzLl9jdXJyZW50U2luZ2xlfXNldCBjdXJyZW50U2luZ2xlKGEpe2EhPT10aGlzLl9jdXJyZW50U2luZ2xlJiYodGhpcy5fY3VycmVudFNpbmdsZT1hLGEmJih0aGlzLnByZXZTaW5nbGVTZWxlY3Rpb25SZWY9dGhpcy5faXRlbXMudHJh'@;
put 'Y2tCeShhKSksdGhpcy5lbWl0Q2hhbmdlKCkpfWdldCBjaGFuZ2UoKXtyZXR1cm4gdGhpcy5fY2hhbmdlLmFzT2JzZXJ2YWJsZSgpfWdldCBfc2VsZWN0YWJsZSgpe3JldHVybiB0aGlzLl9zZWxlY3Rpb25UeXBlPT09cGwuTXVsdGl8fHRoaXMuX3NlbGVjdGlvblR5cGU9PT1wbC5TaW5nbGV9'@;
put 'Y2xlYXJTZWxlY3Rpb24oKXt0aGlzLl9jdXJyZW50PVtdLHRoaXMucHJldlNlbGVjdGlvblJlZnM9W10sdGhpcy5wcmV2U2luZ2xlU2VsZWN0aW9uUmVmPW51bGwsdGhpcy5fY3VycmVudFNpbmdsZT1udWxsLHRoaXMuZW1pdENoYW5nZSgpfWRlc3Ryb3koKXt0aGlzLnN1YnNjcmlwdGlvbnMu'@;
put 'Zm9yRWFjaChhPT5hLnVuc3Vic2NyaWJlKCkpfXVwZGF0ZUN1cnJlbnQoYSxkKXt0aGlzLl9jdXJyZW50PWEsZCYmdGhpcy52YWx1ZUNvbGxlY3Rvci5uZXh0KGEpfWlzU2VsZWN0ZWQoYSl7cmV0dXJuIHRoaXMuX3NlbGVjdGlvblR5cGU9PT1wbC5TaW5nbGU/dGhpcy5jdXJyZW50U2luZ2xl'@;
put 'PT09YTp0aGlzLl9zZWxlY3Rpb25UeXBlPT09cGwuTXVsdGkmJnRoaXMuY3VycmVudC5pbmRleE9mKGEpPj0wfXNldFNlbGVjdGVkKGEsZCl7Y29uc3QgaD10aGlzLmN1cnJlbnQ/dGhpcy5jdXJyZW50LmluZGV4T2YoYSk6LTE7c3dpdGNoKHRoaXMuX3NlbGVjdGlvblR5cGUpe2Nhc2UgcGwu'@;
put 'Tm9uZTpjYXNlIHBsLlNpbmdsZTpicmVhaztjYXNlIHBsLk11bHRpOmg+PTAmJiFkP3RoaXMuZGVzZWxlY3RJdGVtKGgpOmg8MCYmZCYmdGhpcy5zZWxlY3RJdGVtKGEpfX1pc0FsbFNlbGVjdGVkKCl7aWYodGhpcy5fc2VsZWN0aW9uVHlwZSE9PXBsLk11bHRpfHwhdGhpcy5faXRlbXMuZGlz'@;
put 'cGxheWVkKXJldHVybiExO2NvbnN0IGE9dGhpcy5faXRlbXMuZGlzcGxheWVkLmZpbHRlcihmPT4hMT09PXRoaXMuaXNMb2NrZWQoZikpO3JldHVybiEoYS5sZW5ndGg8MSkmJmEuZmlsdGVyKGY9PnRoaXMuY3VycmVudC5pbmRleE9mKGYpPi0xKS5sZW5ndGg9PT1hLmxlbmd0aH1sb2NrSXRl'@;
put 'bShhLGQpe2lmKHRoaXMuY2FuSXRCZUxvY2tlZCgpKXtjb25zdCBoPXRoaXMuX2l0ZW1zLnRyYWNrQnkoYSk7ITA9PT1kP3RoaXMubG9ja2VkUmVmcy5wdXNoKGgpOnRoaXMubG9ja2VkUmVmcz10aGlzLmxvY2tlZFJlZnMuZmlsdGVyKGY9PmghPT1mKX19aXNMb2NrZWQoYSl7aWYodGhpcy5j'@;
put 'YW5JdEJlTG9ja2VkKCkpe2NvbnN0IGQ9dGhpcy5faXRlbXMudHJhY2tCeShhKTtyZXR1cm4gdGhpcy5sb2NrZWRSZWZzLmluZGV4T2YoZCk+LTF9cmV0dXJuITF9dG9nZ2xlQWxsKCl7dGhpcy5fc2VsZWN0aW9uVHlwZT09PXBsLk5vbmV8fHRoaXMuX3NlbGVjdGlvblR5cGU9PT1wbC5TaW5n'@;
put 'bGV8fCh0aGlzLmlzQWxsU2VsZWN0ZWQoKT90aGlzLl9pdGVtcy5kaXNwbGF5ZWQuZm9yRWFjaChhPT57Y29uc3QgZD10aGlzLmN1cnJlbnQuaW5kZXhPZihhKTtkPi0xJiYhMT09PXRoaXMuaXNMb2NrZWQoYSkmJnRoaXMuZGVzZWxlY3RJdGVtKGQpfSk6dGhpcy5faXRlbXMuZGlzcGxheWVk'@;
put 'LmZvckVhY2goYT0+e3RoaXMuY3VycmVudC5pbmRleE9mKGEpPDAmJiExPT09dGhpcy5pc0xvY2tlZChhKSYmdGhpcy5zZWxlY3RJdGVtKGEpfSkpfXNlbGVjdEl0ZW0oYSl7dGhpcy5jdXJyZW50PXRoaXMuY3VycmVudC5jb25jYXQoYSksdGhpcy5wcmV2U2VsZWN0aW9uUmVmcy5wdXNoKHRo'@;
put 'aXMuX2l0ZW1zLnRyYWNrQnkoYSkpfWRlc2VsZWN0SXRlbShhKXtpZih0aGlzLmN1cnJlbnQ9dGhpcy5jdXJyZW50LnNsaWNlKDAsYSkuY29uY2F0KHRoaXMuY3VycmVudC5zbGljZShhKzEpKSxhPHRoaXMucHJldlNlbGVjdGlvblJlZnMubGVuZ3RoKXtjb25zdCBkPXRoaXMucHJldlNlbGVj'@;
put 'dGlvblJlZnMuc3BsaWNlKGEsMSk7dGhpcy5sb2NrZWRSZWZzPXRoaXMubG9ja2VkUmVmcy5maWx0ZXIoaD0+aCE9PWRbMF0pfX1jYW5JdEJlTG9ja2VkKCl7cmV0dXJuIHRoaXMuX3NlbGVjdGlvblR5cGUhPT1wbC5Ob25lfWVtaXRDaGFuZ2UoKXt0aGlzLl9zZWxlY3Rpb25UeXBlPT09cGwu'@;
put 'U2luZ2xlP3RoaXMuX2NoYW5nZS5uZXh0KHRoaXMuY3VycmVudFNpbmdsZSk6dGhpcy5fc2VsZWN0aW9uVHlwZT09PXBsLk11bHRpJiZ0aGlzLl9jaGFuZ2UubmV4dCh0aGlzLmN1cnJlbnQpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh4cihkZyks'@;
put 'eHIodWcpKX0sYy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSxiRz0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMuX3ZpZXc9bmV3IGVpKFF5LkRJU1BMQVkpLHRoaXMuc3Vic2NyaXB0aW9ucz1bXSx0aGlzLnN1YnNjcmlwdGlvbnMu'@;
put 'cHVzaChhLmZpbHRlclJlbmRlclN0ZXBzKEpmLkNBTENVTEFURV9NT0RFX09OKS5zdWJzY3JpYmUoKCk9PnRoaXMuX3ZpZXcubmV4dChReS5DQUxDVUxBVEUpKSksdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goYS5maWx0ZXJSZW5kZXJTdGVwcyhKZi5DQUxDVUxBVEVfTU9ERV9PRkYpLnN1YnNj'@;
put 'cmliZSgoKT0+dGhpcy5fdmlldy5uZXh0KFF5LkRJU1BMQVkpKSl9Z2V0IHZpZXcoKXtyZXR1cm4gdGhpcy5fdmlldy5hc09ic2VydmFibGUoKX1uZ09uRGVzdHJveSgpe3RoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKGE9PmEudW5zdWJzY3JpYmUoKSl9fXJldHVybiBjLlx1MDI3NWZhYz1m'@;
put 'dW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHhyKEk3KSl9LGMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCkseUc9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLnNlbGVjdGlvbj1hfW9uU2VsZWN0aW9uQ2VsbENsaWNrKGEpe3Ro'@;
put 'aXMuc2VsZWN0aW9uLnJvd1NlbGVjdGlvbk1vZGV8fCJMQUJFTCIhPT1hLnRhcmdldC50YWdOYW1lJiYiSU5QVVQiIT09YS50YXJnZXQudGFnTmFtZSYmYS50YXJnZXQucXVlcnlTZWxlY3RvcigiaW5wdXQiKT8uY2xpY2soKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVy'@;
put 'biBuZXcoYXx8YykoR2UoZV8pKX0sYy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siIiw4LCJkYXRhZ3JpZC1zZWxlY3QiXV0saG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MSZhJiZGdCgiY2xpY2siLGZ1bmN0aW9uKGYpe3JldHVybiBkLm9uU2VsZWN0aW9uQ2VsbENsaWNr'@;
put 'KGYpfSl9fSksY30pKCksU3A9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCl7dGhpcy5lbD1hLHRoaXMucmVuZGVyZXI9ZCx0aGlzLnN1YnNjcmlwdGlvbnM9W10sdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goaC5maWx0ZXJSZW5kZXJTdGVwcyhKZi5DTEVBUl9XSURUSFMpLnN1YnNj'@;
put 'cmliZSgoKT0+dGhpcy5jbGVhcldpZHRoKCkpKX1uZ09uRGVzdHJveSgpe3RoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKGE9PmEudW5zdWJzY3JpYmUoKSksdGhpcy5zdGF0ZVN1YnNjcmlwdGlvbiYmdGhpcy5zdGF0ZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpfXJlc2V0U3RhdGUoYSl7'@;
put 'dGhpcy5zZXRXaWR0aChhKSx0aGlzLnNldEhpZGRlbihhKX1zZXRXaWR0aChhKXthLnN0cmljdFdpZHRoP3RoaXMucmVuZGVyZXIuYWRkQ2xhc3ModGhpcy5lbC5uYXRpdmVFbGVtZW50LFh5KTp0aGlzLnJlbmRlcmVyLnJlbW92ZUNsYXNzKHRoaXMuZWwubmF0aXZlRWxlbWVudCxYeSksdGhp'@;
put 'cy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsIndpZHRoIixhLndpZHRoKyJweCIpfXNldEhpZGRlbihhKXthLmhpZGRlbj90aGlzLnJlbmRlcmVyLmFkZENsYXNzKHRoaXMuZWwubmF0aXZlRWxlbWVudCxLeCk6dGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyh0aGlz'@;
put 'LmVsLm5hdGl2ZUVsZW1lbnQsS3gpfWNsZWFyV2lkdGgoKXt0aGlzLnJlbmRlcmVyLnJlbW92ZUNsYXNzKHRoaXMuZWwubmF0aXZlRWxlbWVudCxYeSksdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsIndpZHRoIixudWxsKX19cmV0dXJuIGMuXHUwMjc1ZmFj'@;
put 'PWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2UoSmkpLEdlKEVvKSxHZShJNykpfSxjLlx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItZGctY2VsbCJdXX0pLGN9KSgpLGxPPTAsRW09KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmLHYsTSxELFoscmUs'@;
put 'Y2UsYmUsRWUpe3RoaXMuc2VsZWN0aW9uPWEsdGhpcy5yb3dBY3Rpb25TZXJ2aWNlPWQsdGhpcy5nbG9iYWxFeHBhbmRhYmxlPWgsdGhpcy5leHBhbmQ9Zix0aGlzLmRldGFpbFNlcnZpY2U9dix0aGlzLmRpc3BsYXlNb2RlPU0sdGhpcy52Y3I9RCx0aGlzLmNvbW1vblN0cmluZ3M9Y2UsdGhp'@;
put 'cy5pdGVtcz1iZSx0aGlzLmRvY3VtZW50PUVlLHRoaXMuc2VsZWN0ZWRDaGFuZ2VkPW5ldyBLcighMSksdGhpcy5leHBhbmRlZENoYW5nZT1uZXcgS3IoITEpLHRoaXMuZGV0YWlsRGlzYWJsZWQ9ITEsdGhpcy5kZXRhaWxIaWRkZW49ITEsdGhpcy5za2VsZXRvbkxvYWRpbmc9ITEsdGhpcy5k'@;
put 'aXNwbGF5Q2VsbHM9ITEsdGhpcy5leHBhbmRBbmltYXRpb25UcmlnZ2VyPSExLHRoaXMuU0VMRUNUSU9OX1RZUEU9cGwsdGhpcy5pdGVtQ2hhbmdlcz1uZXcgeXgoMSksdGhpcy5fc2VsZWN0ZWQ9ITEsdGhpcy5fZGV0YWlsT3BlbkxhYmVsPSIiLHRoaXMuX2RldGFpbENsb3NlTGFiZWw9IiIs'@;
put 'dGhpcy5fcm93U2VsZWN0aW9uTGFiZWw9IiIsdGhpcy5zdWJzY3JpcHRpb25zPVtdLHRoaXMuX3NlbGVjdGFibGU9ITAsbE8rKyx0aGlzLmlkPSJjbHItZGctcm93IitsTyx0aGlzLnJhZGlvSWQ9ImNsci1kZy1yb3ctcmQiK2xPLHRoaXMuY2hlY2tib3hJZD0iY2xyLWRnLXJvdy1jYiIrbE8s'@;
put 'dGhpcy5leHBhbmRhYmxlSWQ9Zi5leHBhbmRhYmxlSWQsdGhpcy5zdWJzY3JpcHRpb25zLnB1c2gocTgoZi5yZXBsYWNlLGYuZXhwYW5kQ2hhbmdlKS5zdWJzY3JpYmUoKFtCZSxxZV0pPT57QmUmJnFlPyh0aGlzLnJlcGxhY2VkPSEwLFouYWRkQ2xhc3MocmUubmF0aXZlRWxlbWVudCwiZGF0'@;
put 'YWdyaWQtcm93LXJlcGxhY2VkIikpOih0aGlzLnJlcGxhY2VkPSExLFoucmVtb3ZlQ2xhc3MocmUubmF0aXZlRWxlbWVudCwiZGF0YWdyaWQtcm93LXJlcGxhY2VkIikpfSkpfWdldCBpdGVtKCl7cmV0dXJuIHRoaXMuX2l0ZW19c2V0IGl0ZW0oYSl7dGhpcy5faXRlbT1hLHRoaXMuaXRlbUNo'@;
put 'YW5nZXMubmV4dChhKSx0aGlzLmNsckRnU2VsZWN0YWJsZT10aGlzLl9zZWxlY3RhYmxlfWdldCBjbHJEZ1NlbGVjdGFibGUoKXtyZXR1cm4hdGhpcy5zZWxlY3Rpb24uaXNMb2NrZWQodGhpcy5pdGVtKX1zZXQgY2xyRGdTZWxlY3RhYmxlKGEpe3RoaXMuaXRlbSYmdGhpcy5zZWxlY3Rpb24u'@;
put 'bG9ja0l0ZW0odGhpcy5pdGVtLCJmYWxzZSI9PT1hfHwhMT09PWEpLHRoaXMuX3NlbGVjdGFibGU9YX1nZXQgc2VsZWN0ZWQoKXtyZXR1cm4gdGhpcy5zZWxlY3Rpb24uc2VsZWN0aW9uVHlwZT09PXBsLk5vbmU/dGhpcy5fc2VsZWN0ZWQ6dGhpcy5zZWxlY3Rpb24uaXNTZWxlY3RlZCh0aGlz'@;
put 'Lml0ZW0pfXNldCBzZWxlY3RlZChhKXt0aGlzLnNlbGVjdGlvbi5zZWxlY3Rpb25UeXBlPT09cGwuTm9uZT90aGlzLl9zZWxlY3RlZD1hOihhJiZ0aGlzLnNlbGVjdGlvbi5zZWxlY3Rpb25UeXBlPT09cGwuTXVsdGk/dGhpcy5yYW5nZVNlbGVjdCgpOnRoaXMuc2VsZWN0aW9uLnJhbmdlU3Rh'@;
put 'cnQ9bnVsbCx0aGlzLnNlbGVjdGlvbi5zZXRTZWxlY3RlZCh0aGlzLml0ZW0sYSkpfWdldCBleHBhbmRlZCgpe3JldHVybiB0aGlzLmV4cGFuZC5leHBhbmRlZH1zZXQgZXhwYW5kZWQoYSl7dGhpcy5leHBhbmQuZXhwYW5kZWQ9YX1nZXQgY2xyRGdEZXRhaWxPcGVuTGFiZWwoKXtyZXR1cm4g'@;
put 'dGhpcy5fZGV0YWlsT3BlbkxhYmVsP3RoaXMuX2RldGFpbE9wZW5MYWJlbDp0aGlzLmNvbW1vblN0cmluZ3Mua2V5cy5vcGVufXNldCBjbHJEZ0RldGFpbE9wZW5MYWJlbChhKXt0aGlzLl9kZXRhaWxPcGVuTGFiZWw9YX1nZXQgY2xyRGdEZXRhaWxDbG9zZUxhYmVsKCl7cmV0dXJuIHRoaXMu'@;
put 'X2RldGFpbENsb3NlTGFiZWw/dGhpcy5fZGV0YWlsQ2xvc2VMYWJlbDp0aGlzLmNvbW1vblN0cmluZ3Mua2V5cy5jbG9zZX1zZXQgY2xyRGdEZXRhaWxDbG9zZUxhYmVsKGEpe3RoaXMuX2RldGFpbENsb3NlTGFiZWw9YX1nZXQgY2xyRGdSb3dTZWxlY3Rpb25MYWJlbCgpe3JldHVybiB0aGlz'@;
put 'Ll9yb3dTZWxlY3Rpb25MYWJlbD90aGlzLl9yb3dTZWxlY3Rpb25MYWJlbDp0aGlzLmNvbW1vblN0cmluZ3Mua2V5cy5zZWxlY3R9c2V0IGNsckRnUm93U2VsZWN0aW9uTGFiZWwoYSl7dGhpcy5fcm93U2VsZWN0aW9uTGFiZWw9YX1nZXQgX3ZpZXcoKXtyZXR1cm4gdGhpcy53cmFwcGVkSW5q'@;
put 'ZWN0b3IuZ2V0KHZHLHRoaXMudmNyKS5yb3dWaWV3fW5nT25Jbml0KCl7dGhpcy53cmFwcGVkSW5qZWN0b3I9bmV3IFlMKHZHLHRoaXMudmNyKSx0aGlzLnNlbGVjdGlvbi5sb2NrSXRlbSh0aGlzLml0ZW0sITE9PT10aGlzLmNsckRnU2VsZWN0YWJsZSl9bmdBZnRlckNvbnRlbnRJbml0KCl7'@;
put 'dGhpcy5kZ0NlbGxzLmNoYW5nZXMuc3Vic2NyaWJlKCgpPT57dGhpcy5kZ0NlbGxzLmZvckVhY2goYT0+e2EuX3ZpZXcuZGVzdHJveWVkfHx0aGlzLl9zY3JvbGxhYmxlQ2VsbHMuaW5zZXJ0KGEuX3ZpZXcpfSl9KX1uZ0FmdGVyVmlld0luaXQoKXt0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCh0'@;
put 'aGlzLmRpc3BsYXlNb2RlLnZpZXcuc3Vic2NyaWJlKGE9Pntmb3IobGV0IGQ9dGhpcy5fc2Nyb2xsYWJsZUNlbGxzLmxlbmd0aDtkPjA7ZC0tKXRoaXMuX3Njcm9sbGFibGVDZWxscy5kZXRhY2goKTtmb3IobGV0IGQ9dGhpcy5fY2FsY3VsYXRlZENlbGxzLmxlbmd0aDtkPjA7ZC0tKXRoaXMu'@;
put 'X2NhbGN1bGF0ZWRDZWxscy5kZXRhY2goKTthPT09UXkuQ0FMQ1VMQVRFPyh0aGlzLmRpc3BsYXlDZWxscz0hMSx0aGlzLmRnQ2VsbHMuZm9yRWFjaChkPT57ZC5fdmlldy5kZXN0cm95ZWR8fHRoaXMuX2NhbGN1bGF0ZWRDZWxscy5pbnNlcnQoZC5fdmlldyl9KSk6KHRoaXMuZGlzcGxheUNl'@;
put 'bGxzPSEwLHRoaXMuZGdDZWxscy5mb3JFYWNoKGQ9PntkLl92aWV3LmRlc3Ryb3llZHx8dGhpcy5fc2Nyb2xsYWJsZUNlbGxzLmluc2VydChkLl92aWV3KX0pKX0pLHRoaXMuZXhwYW5kLmFuaW1hdGUuc3Vic2NyaWJlKCgpPT57dGhpcy5leHBhbmRBbmltYXRpb25UcmlnZ2VyPSF0aGlzLmV4'@;
put 'cGFuZEFuaW1hdGlvblRyaWdnZXJ9KSl9bmdPbkRlc3Ryb3koKXt0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChhPT5hLnVuc3Vic2NyaWJlKCkpfXRvZ2dsZShhPSF0aGlzLnNlbGVjdGVkKXthIT09dGhpcy5zZWxlY3RlZCYmKHRoaXMuc2VsZWN0ZWQ9YSx0aGlzLnNlbGVjdGVkQ2hhbmdl'@;
put 'ZC5lbWl0KGEpKX10b2dnbGVFeHBhbmQoKXt0aGlzLmV4cGFuZC5leHBhbmRhYmxlJiYodGhpcy5leHBhbmRBbmltYXRpb24udXBkYXRlU3RhcnRIZWlnaHQoKSx0aGlzLmV4cGFuZGVkPSF0aGlzLmV4cGFuZGVkLHRoaXMuZXhwYW5kZWRDaGFuZ2UuZW1pdCh0aGlzLmV4cGFuZGVkKSl9Y2xl'@;
put 'YXJSYW5nZXMoYSl7YS5zaGlmdEtleSYmKHRoaXMuZG9jdW1lbnQuZ2V0U2VsZWN0aW9uKCkucmVtb3ZlQWxsUmFuZ2VzKCksLTEhPT13aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudC5pbmRleE9mKCJGaXJlZm94IikmJihhLnByZXZlbnREZWZhdWx0KCksdGhpcy50b2dnbGUoITApKSl9c2Vs'@;
put 'ZWN0Um93KGE9IXRoaXMuc2VsZWN0ZWQsZCl7IkxBQkVMIiE9PWQudGFyZ2V0LnRhZ05hbWUmJih0aGlzLnNlbGVjdGlvbi5zZWxlY3Rpb25UeXBlPT09dGhpcy5TRUxFQ1RJT05fVFlQRS5TaW5nbGU/dGhpcy5zZWxlY3Rpb24uY3VycmVudFNpbmdsZT10aGlzLml0ZW06dGhpcy50b2dnbGUo'@;
put 'YSkpfXJhbmdlU2VsZWN0KCl7Y29uc3QgYT10aGlzLml0ZW1zLmRpc3BsYXllZDtpZighYSlyZXR1cm47Y29uc3QgZD1hLmluZGV4T2YodGhpcy5zZWxlY3Rpb24ucmFuZ2VTdGFydCk7aWYodGhpcy5zZWxlY3Rpb24ucmFuZ2VTdGFydCYmdGhpcy5zZWxlY3Rpb24uY3VycmVudC5pbmNsdWRl'@;
put 'cyh0aGlzLnNlbGVjdGlvbi5yYW5nZVN0YXJ0KSYmdGhpcy5zZWxlY3Rpb24uc2hpZnRQcmVzc2VkJiYtMSE9PWQpe2NvbnN0IGg9YS5pbmRleE9mKHRoaXMuaXRlbSksZj1uZXcgU2V0KHRoaXMuc2VsZWN0aW9uLmN1cnJlbnQuY29uY2F0KGEuc2xpY2UoTWF0aC5taW4oZCxoKSxNYXRoLm1h'@;
put 'eChkLGgpKzEpKSk7dGhpcy5zZWxlY3Rpb24uY2xlYXJTZWxlY3Rpb24oKSx0aGlzLnNlbGVjdGlvbi5jdXJyZW50LnB1c2goLi4uZil9ZWxzZSB0aGlzLnNlbGVjdGlvbi5yYW5nZVN0YXJ0PXRoaXMuaXRlbX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8'@;
put 'YykoR2UoZV8pLEdlKEt5KSxHZShxeSksR2UocXgpLEdlKFhmKSxHZShiRyksR2UoRG8pLEdlKEVvKSxHZShKaSksR2UoaXMpLEdlKGRnKSxHZSh2cykpfSxjLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItZGctcm93Il1dLGNvbnRlbnRRdWVyaWVzOmZ1bmN0aW9uKGEs'@;
put 'ZCxoKXtpZigxJmEmJmFvKGgsUWYsNCksMiZhKXtsZXQgZjtDaShmPVNpKCkpJiYoZC5kZ0NlbGxzPWYpfX0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGEsZCl7aWYoMSZhJiYocWEoVkwsNSkscWEobEJlLDUpLHFhKGNCZSw1LERvKSxxYSh1QmUsNSxEbykscWEoZEJlLDUsRG8pKSwyJmEpe2xldCBo'@;
put 'O0NpKGg9U2koKSkmJihkLmV4cGFuZEFuaW1hdGlvbj1oLmZpcnN0KSxDaShoPVNpKCkpJiYoZC5kZXRhaWxCdXR0b249aC5maXJzdCksQ2koaD1TaSgpKSYmKGQuX3N0aWNreUNlbGxzPWguZmlyc3QpLENpKGg9U2koKSkmJihkLl9zY3JvbGxhYmxlQ2VsbHM9aC5maXJzdCksQ2koaD1TaSgp'@;
put 'KSYmKGQuX2NhbGN1bGF0ZWRDZWxscz1oLmZpcnN0KX19LGhvc3RBdHRyczpbInJvbGUiLCJyb3dncm91cCJdLGhvc3RWYXJzOjcsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiYoaHIoImFyaWEtb3ducyIsZC5pZCksVHIoImRhdGFncmlkLXJvdyIsITApKCJkYXRhZ3JpZC1yb3ct'@;
put 'c2tlbGV0b24iLGQuc2tlbGV0b25Mb2FkaW5nKSgiZGF0YWdyaWQtc2VsZWN0ZWQiLGQuc2VsZWN0ZWQpKX0saW5wdXRzOntkZXRhaWxEaXNhYmxlZDpbTm4uTm9uZSwiY2xyRGdEZXRhaWxEaXNhYmxlZCIsImRldGFpbERpc2FibGVkIl0sZGV0YWlsSGlkZGVuOltObi5Ob25lLCJjbHJEZ0Rl'@;
put 'dGFpbEhpZGRlbiIsImRldGFpbEhpZGRlbiJdLHNrZWxldG9uTG9hZGluZzpbTm4uTm9uZSwiY2xyRGdTa2VsZXRvbkxvYWRpbmciLCJza2VsZXRvbkxvYWRpbmciXSxpdGVtOltObi5Ob25lLCJjbHJEZ0l0ZW0iLCJpdGVtIl0sY2xyRGdTZWxlY3RhYmxlOiJjbHJEZ1NlbGVjdGFibGUiLHNl'@;
put 'bGVjdGVkOltObi5Ob25lLCJjbHJEZ1NlbGVjdGVkIiwic2VsZWN0ZWQiXSxleHBhbmRlZDpbTm4uTm9uZSwiY2xyRGdFeHBhbmRlZCIsImV4cGFuZGVkIl0sY2xyRGdEZXRhaWxPcGVuTGFiZWw6ImNsckRnRGV0YWlsT3BlbkxhYmVsIixjbHJEZ0RldGFpbENsb3NlTGFiZWw6ImNsckRnRGV0'@;
put 'YWlsQ2xvc2VMYWJlbCIsY2xyRGdSb3dTZWxlY3Rpb25MYWJlbDoiY2xyRGdSb3dTZWxlY3Rpb25MYWJlbCJ9LG91dHB1dHM6e3NlbGVjdGVkQ2hhbmdlZDoiY2xyRGdTZWxlY3RlZENoYW5nZSIsZXhwYW5kZWRDaGFuZ2U6ImNsckRnRXhwYW5kZWRDaGFuZ2UifSxmZWF0dXJlczpbZGEoW3F4'@;
put 'LHtwcm92aWRlOlUxLHVzZUV4aXN0aW5nOnF4fSx7cHJvdmlkZTpEeCx1c2VFeGlzdGluZzpxeH1dKV0sbmdDb250ZW50U2VsZWN0b3JzOmZCZSxkZWNsczo5LHZhcnM6Myxjb25zdHM6W1siZGV0YWlsIiwiIl0sWyJyb3dDb250ZW50IiwiIl0sWyJjYWxjdWxhdGVkQ2VsbHMiLCIiXSxbInN0'@;
put 'aWNreUNlbGxzIiwiIl0sWyJzY3JvbGxhYmxlQ2VsbHMiLCIiXSxbImRldGFpbEJ1dHRvbiIsIiJdLFsiY2xhc3MiLCJkYXRhZ3JpZC1yb3ctY2xpY2thYmxlIiwzLCJtb3VzZWRvd24iLCJjbGljayIsNCwibmdJZiJdLFszLCJjbHJFeHBhbmRUcmlnZ2VyIiw0LCJuZ0lmIl0sWzQsIm5nSWYi'@;
put 'XSxbMSwiZGF0YWdyaWQtcm93LWNsaWNrYWJsZSIsMywibW91c2Vkb3duIiwiY2xpY2siXSxbMywiY2xyRXhwYW5kVHJpZ2dlciJdLFszLCJuZ1RlbXBsYXRlT3V0bGV0Il0sWyJyb2xlIiwicm93IiwxLCJkYXRhZ3JpZC1yb3ctbWFzdGVyIiwiZGF0YWdyaWQtcm93LWZsZXgiLDMsImlkIl0s'@;
put 'WzEsImRhdGFncmlkLXJvdy1zdGlja3kiXSxbImNsYXNzIiwiZGF0YWdyaWQtc2VsZWN0IGRhdGFncmlkLWZpeGVkLWNvbHVtbiBkYXRhZ3JpZC1jZWxsIiwicm9sZSIsImdyaWRjZWxsIiwzLCJuZ0NsYXNzIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImRhdGFncmlkLXJvdy1hY3Rpb25zIGRhdGFn'@;
put 'cmlkLWZpeGVkLWNvbHVtbiBkYXRhZ3JpZC1jZWxsIiwicm9sZSIsImdyaWRjZWxsIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImRhdGFncmlkLWV4cGFuZGFibGUtY2FyZXQgZGF0YWdyaWQtZml4ZWQtY29sdW1uIGRhdGFncmlkLWNlbGwiLCJyb2xlIiwiZ3JpZGNlbGwiLDQsIm5nSWYiXSxbImNs'@;
put 'YXNzIiwiZGF0YWdyaWQtZGV0YWlsLWNhcmV0IGRhdGFncmlkLWZpeGVkLWNvbHVtbiBkYXRhZ3JpZC1jZWxsIiwicm9sZSIsImdyaWRjZWxsIiw0LCJuZ0lmIl0sWzEsImRhdGFncmlkLXJvdy1zY3JvbGxhYmxlIiwzLCJuZ0NsYXNzIl0sWzEsImRhdGFncmlkLXNjcm9sbGluZy1jZWxscyJd'@;
put 'LFsiY2xhc3MiLCJza2VsZXRvbi1sb2FkaW5nIiw0LCJuZ0lmIl0sWyJyb2xlIiwiZ3JpZGNlbGwiLDEsImRhdGFncmlkLXNlbGVjdCIsImRhdGFncmlkLWZpeGVkLWNvbHVtbiIsImRhdGFncmlkLWNlbGwiLDMsIm5nQ2xhc3MiXSxbMSwiY2xyLWNoZWNrYm94LXdyYXBwZXIiXSxbInRhYmlu'@;
put 'ZGV4IiwiLTEiLCJ0eXBlIiwiY2hlY2tib3giLDMsIm5nTW9kZWxDaGFuZ2UiLCJuZ01vZGVsIiwiaWQiLCJkaXNhYmxlZCJdLFsxLCJjbHItY29udHJvbC1sYWJlbCIsImNsci1jb2wtbnVsbCIsMywiY2xpY2siLCJmb3IiXSxbMSwiY2xyLXNyLW9ubHkiXSxbInRhYmluZGV4IiwiLTEiLCJ0'@;
put 'eXBlIiwicmFkaW8iLCJjbHJSYWRpbyIsIiIsMywibmdNb2RlbENoYW5nZSIsImlkIiwibmFtZSIsInZhbHVlIiwibmdNb2RlbCIsImNoZWNrZWQiLCJkaXNhYmxlZCJdLFsxLCJjbHItY29udHJvbC1sYWJlbCIsImNsci1jb2wtbnVsbCIsMywiZm9yIl0sWyJyb2xlIiwiZ3JpZGNlbGwiLDEs'@;
put 'ImRhdGFncmlkLXJvdy1hY3Rpb25zIiwiZGF0YWdyaWQtZml4ZWQtY29sdW1uIiwiZGF0YWdyaWQtY2VsbCJdLFsicm9sZSIsImdyaWRjZWxsIiwxLCJkYXRhZ3JpZC1leHBhbmRhYmxlLWNhcmV0IiwiZGF0YWdyaWQtZml4ZWQtY29sdW1uIiwiZGF0YWdyaWQtY2VsbCJdLFsidGFiaW5kZXgi'@;
put 'LCItMSIsInR5cGUiLCJidXR0b24iLCJjbGFzcyIsImRhdGFncmlkLWV4cGFuZGFibGUtY2FyZXQtYnV0dG9uIiwzLCJjbGljayIsNCwibmdJZiJdLFsiY2xyU21hbGwiLCIiLDQsIm5nSWYiXSxbInRhYmluZGV4IiwiLTEiLCJ0eXBlIiwiYnV0dG9uIiwxLCJkYXRhZ3JpZC1leHBhbmRhYmxl'@;
put 'LWNhcmV0LWJ1dHRvbiIsMywiY2xpY2siXSxbInNoYXBlIiwiYW5nbGUiLDEsImRhdGFncmlkLWV4cGFuZGFibGUtY2FyZXQtaWNvbiJdLFsiY2xyU21hbGwiLCIiXSxbInJvbGUiLCJncmlkY2VsbCIsMSwiZGF0YWdyaWQtZGV0YWlsLWNhcmV0IiwiZGF0YWdyaWQtZml4ZWQtY29sdW1uIiwi'@;
put 'ZGF0YWdyaWQtY2VsbCJdLFsidGFiaW5kZXgiLCItMSIsInR5cGUiLCJidXR0b24iLCJjbGFzcyIsImRhdGFncmlkLWRldGFpbC1jYXJldC1idXR0b24iLCJhcmlhLWhhc3BvcHVwIiwiZGlhbG9nIiwzLCJkaXNhYmxlZCIsImlzLW9wZW4iLCJjbGljayIsNCwibmdJZiJdLFsidGFiaW5kZXgi'@;
put 'LCItMSIsInR5cGUiLCJidXR0b24iLCJhcmlhLWhhc3BvcHVwIiwiZGlhbG9nIiwxLCJkYXRhZ3JpZC1kZXRhaWwtY2FyZXQtYnV0dG9uIiwzLCJjbGljayIsImRpc2FibGVkIl0sWyJzaGFwZSIsImFuZ2xlLWRvdWJsZSIsMSwiZGF0YWdyaWQtZGV0YWlsLWNhcmV0LWljb24iXSxbMSwic2tl'@;
put 'bGV0b24tbG9hZGluZyJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKHNhKGhCZSksZ3QoMCx5QmUsMywyLCJkaXYiLDYpKDEsd0JlLDIsMiwiY2xyLWV4cGFuZGFibGUtYW5pbWF0aW9uIiw3KSgyLFNCZSwxLDEsbnVsbCw4KSgzLE1CZSwxLDAsIm5nLXRlbXBsYXRlIixudWxsLDAs'@;
put 'SWMpKDUsVkJlLDE3LDE0LCJuZy10ZW1wbGF0ZSIsbnVsbCwxLEljKSxGbCg3LG51bGwsMikpLDImYSYmKE1lKCJuZ0lmIixkLnNlbGVjdGlvbi5yb3dTZWxlY3Rpb25Nb2RlKSxmZSgpLE1lKCJuZ0lmIiwhZC5zZWxlY3Rpb24ucm93U2VsZWN0aW9uTW9kZSYmZC5leHBhbmQuZXhwYW5kYWJs'@;
put 'ZSksZmUoKSxNZSgibmdJZiIsIWQuc2VsZWN0aW9uLnJvd1NlbGVjdGlvbk1vZGUmJiFkLmV4cGFuZC5leHBhbmRhYmxlKSl9LGRlcGVuZGVuY2llczpbd3UsYmEsTjEscnMsZHMsY0csbEcscWwsTWQsYkwsbmwsJHMsVkwsUmQsUWYseUcsU3BdLGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpO3Zh'@;
put 'ciBXMT1mdW5jdGlvbihjKXtyZXR1cm4gY1tjLldJRFRIPTBdPSJXSURUSCIsY1tjLkhJRERFTj0xXT0iSElEREVOIixjW2MuSU5JVElBTElaRT0yXT0iSU5JVElBTElaRSIsY30oVzF8fHt9KTtjb25zdCBCWmU9T2JqZWN0LmtleXMoVzEpLm1hcChjPT5XMVtjXSkuZmlsdGVyKGM9PmM9PT1w'@;
put 'YXJzZUludChjLDEwKSYmYyE9PVcxLklOSVRJQUxJWkUpO2xldCBoZz0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5jb2x1bW5zPVtdLHRoaXMuY29sdW1uc1N0YXRlQ2hhbmdlPW5ldyBlaShudWxsKSx0aGlzLl9jYWNoZT1bXX1nZXQgY29sdW1uU3RhdGVzKCl7cmV0dXJuIHRo'@;
put 'aXMuY29sdW1ucy5tYXAoYT0+YS52YWx1ZSl9Z2V0IGhhc0hpZGVhYmxlQ29sdW1ucygpe3JldHVybiB0aGlzLmNvbHVtblN0YXRlcy5maWx0ZXIoYT0+YS5oaWRlYWJsZSkubGVuZ3RoPjB9Z2V0IHZpc2libGVDb2x1bW5zKCl7cmV0dXJuIHRoaXMuY29sdW1uU3RhdGVzLmZpbHRlcihhPT4h'@;
put 'YS5oaWRkZW4pfWNhY2hlKCl7dGhpcy5fY2FjaGU9dGhpcy5jb2x1bW5zLm1hcChhPT57Y29uc3QgZD17Li4uYS52YWx1ZX07cmV0dXJuIGRlbGV0ZSBkLmNoYW5nZXMsZH0pfWhhc0NhY2hlKCl7cmV0dXJuISF0aGlzLl9jYWNoZS5sZW5ndGh9cmVzZXRUb0xhc3RDYWNoZSgpe3RoaXMuX2Nh'@;
put 'Y2hlLmZvckVhY2goKGEsZCk9Pntjb25zdCBoPXsuLi5hLGNoYW5nZXM6QlplfTt0aGlzLmNvbHVtbnNbZF0ubmV4dChoKSx0aGlzLmNvbHVtbnNTdGF0ZUNoYW5nZS5uZXh0KGgpfSksdGhpcy5fY2FjaGU9W119ZW1pdFN0YXRlQ2hhbmdlQXQoYSxkKXt0aGlzLmNvbHVtbnNbYV0mJnRoaXMu'@;
put 'ZW1pdFN0YXRlQ2hhbmdlKHRoaXMuY29sdW1uc1thXSxkKX1lbWl0U3RhdGVDaGFuZ2UoYSxkKXtjb25zdCBoPXsuLi5hLnZhbHVlLC4uLmR9O2EubmV4dChoKSx0aGlzLmNvbHVtbnNTdGF0ZUNoYW5nZS5uZXh0KGgpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5l'@;
put 'dyhhfHxjKX0sYy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKTtjb25zdCBqWmU9e2l0ZW1TaXplOjMyLG1pbkJ1ZmZlclB4OjIwMCxtYXhCdWZmZXJQeDo0MDB9O2xldCBSZGU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmLHYsTSxE'@;
put 'LFoscmUsY2UsYmUsRWUsQmUpe3RoaXMuY2hhbmdlRGV0ZWN0b3JSZWY9YSx0aGlzLml0ZXJhYmxlRGlmZmVycz1kLHRoaXMuaXRlbXM9aCx0aGlzLm5nWm9uZT1mLHRoaXMucmVuZGVyZXIyPXYsdGhpcy50ZW1wbGF0ZVJlZj1NLHRoaXMudmlld0NvbnRhaW5lclJlZj1ELHRoaXMuZGlyZWN0'@;
put 'aW9uYWxpdHk9Wix0aGlzLnNjcm9sbERpc3BhdGNoZXI9cmUsdGhpcy52aWV3cG9ydFJ1bGVyPWNlLHRoaXMuZGF0YWdyaWQ9YmUsdGhpcy5jb2x1bW5zU2VydmljZT1FZSx0aGlzLmluamVjdG9yPUJlLHRoaXMucmVuZGVyZWRSYW5nZUNoYW5nZT1uZXcgS3IsdGhpcy5wZXJzaXN0SXRlbXM9'@;
put 'ITAsdGhpcy5fY2RrRml4ZWRTaXplVmlydHVhbFNjcm9sbElucHV0cz17Li4ualplfSx0aGlzLnN1YnNjcmlwdGlvbnM9W10sdGhpcy50b3BJbmRleD0wLHRoaXMubXV0YXRpb25DaGFuZ2VzPW5ldyBNdXRhdGlvbk9ic2VydmVyKHFlPT57cWUuZm9yRWFjaChydD0+e3J0LnRhcmdldC5jbGFz'@;
put 'c0xpc3QuY29udGFpbnMoImRhdGFncmlkLWNvbXBhY3QiKSYmdGhpcy5pdGVtU2l6ZT4yNCYmKHRoaXMuaXRlbVNpemU9MjQpfSl9KSx0aGlzLnZpZXdSZXBlYXRlcj1uZXcgWjBlLHRoaXMuY2RrVmlydHVhbEZvcklucHV0cz17Y2RrVmlydHVhbEZvclRyYWNrQnk6cWU9PnFlfSxoLnNtYXJ0'@;
put 'ZW5VcCgpLGJlLmRldGFpbFNlcnZpY2UucHJldmVudEZvY3VzU2Nyb2xsPSEwLHRoaXMuZGF0YWdyaWRFbGVtZW50UmVmPWJlLmVsLHRoaXMuY2RrVmlydHVhbEZvclRlbXBsYXRlQ2FjaGVTaXplPTIwLHRoaXMubXV0YXRpb25DaGFuZ2VzLm9ic2VydmUodGhpcy5kYXRhZ3JpZEVsZW1lbnRS'@;
put 'ZWYubmF0aXZlRWxlbWVudCx7YXR0cmlidXRlRmlsdGVyOlsiY2xhc3MiXSxhdHRyaWJ1dGVPbGRWYWx1ZTohMH0pLHRoaXMudmlydHVhbFNjcm9sbFN0cmF0ZWd5PW5ldyBFRmUodGhpcy5fY2RrRml4ZWRTaXplVmlydHVhbFNjcm9sbElucHV0cy5pdGVtU2l6ZSx0aGlzLl9jZGtGaXhlZFNp'@;
put 'emVWaXJ0dWFsU2Nyb2xsSW5wdXRzLm1pbkJ1ZmZlclB4LHRoaXMuX2Nka0ZpeGVkU2l6ZVZpcnR1YWxTY3JvbGxJbnB1dHMubWF4QnVmZmVyUHgpfWdldCBjZGtWaXJ0dWFsRm9yT2YoKXtyZXR1cm4gdGhpcy5jZGtWaXJ0dWFsRm9ySW5wdXRzLmNka1ZpcnR1YWxGb3JPZn1zZXQgY2RrVmly'@;
put 'dHVhbEZvck9mKGEpe3RoaXMuY2RrVmlydHVhbEZvcklucHV0cy5jZGtWaXJ0dWFsRm9yT2Y9YSx0aGlzLml0ZW1zLmFsbD1hLHRoaXMudXBkYXRlQ2RrVmlydHVhbEZvcklucHV0cygpfWdldCBjZGtWaXJ0dWFsRm9yVHJhY2tCeSgpe3JldHVybiB0aGlzLmNka1ZpcnR1YWxGb3JJbnB1dHMu'@;
put 'Y2RrVmlydHVhbEZvclRyYWNrQnl9c2V0IGNka1ZpcnR1YWxGb3JUcmFja0J5KGEpe3RoaXMuY2RrVmlydHVhbEZvcklucHV0cy5jZGtWaXJ0dWFsRm9yVHJhY2tCeT1hLHRoaXMudXBkYXRlQ2RrVmlydHVhbEZvcklucHV0cygpfWdldCBjZGtWaXJ0dWFsRm9yVGVtcGxhdGUoKXtyZXR1cm4g'@;
put 'dGhpcz8uY2RrVmlydHVhbEZvcklucHV0cz8uY2RrVmlydHVhbEZvclRlbXBsYXRlfXNldCBjZGtWaXJ0dWFsRm9yVGVtcGxhdGUoYSl7dGhpcy5jZGtWaXJ0dWFsRm9ySW5wdXRzLmNka1ZpcnR1YWxGb3JUZW1wbGF0ZT1hLHRoaXMudXBkYXRlQ2RrVmlydHVhbEZvcklucHV0cygpfWdldCBj'@;
put 'ZGtWaXJ0dWFsRm9yVGVtcGxhdGVDYWNoZVNpemUoKXtyZXR1cm4gdGhpcy5jZGtWaXJ0dWFsRm9ySW5wdXRzLmNka1ZpcnR1YWxGb3JUZW1wbGF0ZUNhY2hlU2l6ZX1zZXQgY2RrVmlydHVhbEZvclRlbXBsYXRlQ2FjaGVTaXplKGEpe3RoaXMuY2RrVmlydHVhbEZvcklucHV0cy5jZGtWaXJ0'@;
put 'dWFsRm9yVGVtcGxhdGVDYWNoZVNpemU9ZDcoYSksdGhpcy51cGRhdGVDZGtWaXJ0dWFsRm9ySW5wdXRzKCl9Z2V0IGl0ZW1TaXplKCl7cmV0dXJuIHRoaXMuX2Nka0ZpeGVkU2l6ZVZpcnR1YWxTY3JvbGxJbnB1dHMuaXRlbVNpemV9c2V0IGl0ZW1TaXplKGEpe3RoaXMuX2Nka0ZpeGVkU2l6'@;
put 'ZVZpcnR1YWxTY3JvbGxJbnB1dHMuaXRlbVNpemU9ZDcoYSksdGhpcy51cGRhdGVGaXhlZFNpemVWaXJ0dWFsU2Nyb2xsSW5wdXRzKCl9Z2V0IG1pbkJ1ZmZlclB4KCl7cmV0dXJuIHRoaXMuX2Nka0ZpeGVkU2l6ZVZpcnR1YWxTY3JvbGxJbnB1dHMubWluQnVmZmVyUHh9c2V0IG1pbkJ1ZmZl'@;
put 'clB4KGEpe3RoaXMuX2Nka0ZpeGVkU2l6ZVZpcnR1YWxTY3JvbGxJbnB1dHMubWluQnVmZmVyUHg9ZDcoYSksdGhpcy51cGRhdGVGaXhlZFNpemVWaXJ0dWFsU2Nyb2xsSW5wdXRzKCl9Z2V0IG1heEJ1ZmZlclB4KCl7cmV0dXJuIHRoaXMuX2Nka0ZpeGVkU2l6ZVZpcnR1YWxTY3JvbGxJbnB1'@;
put 'dHMubWF4QnVmZmVyUHh9c2V0IG1heEJ1ZmZlclB4KGEpe3RoaXMuX2Nka0ZpeGVkU2l6ZVZpcnR1YWxTY3JvbGxJbnB1dHMubWF4QnVmZmVyUHg9ZDcoYSksdGhpcy51cGRhdGVGaXhlZFNpemVWaXJ0dWFsU2Nyb2xsSW5wdXRzKCl9c2V0IGRhdGFSYW5nZShhKXthJiYodGhpcy5pdGVtcy5z'@;
put 'bWFydCYmdGhpcy5pdGVtcy5zbWFydGVuRG93bigpLHRoaXMudG90YWxJdGVtcz1hLnRvdGFsLHRoaXMudXBkYXRlRGF0YVJhbmdlKGEuc2tpcCxhLmRhdGEpKX1nZXQgdG90YWxJdGVtcygpe3JldHVybiB0aGlzLl90b3RhbEl0ZW1zfXNldCB0b3RhbEl0ZW1zKGEpe3RoaXMuX3RvdGFsSXRl'@;
put 'bXM9YX1uZ0FmdGVyVmlld0luaXQoKXt0aGlzLmluamVjdG9yLnJ1bkluQ29udGV4dCgoKT0+e3RoaXMudmlydHVhbFNjcm9sbFZpZXdwb3J0PXRoaXMuY3JlYXRlVmlydHVhbFNjcm9sbFZpZXdwb3J0Rm9yRGF0YWdyaWQodGhpcy5jaGFuZ2VEZXRlY3RvclJlZix0aGlzLm5nWm9uZSx0aGlz'@;
put 'LnJlbmRlcmVyMix0aGlzLmRpcmVjdGlvbmFsaXR5LHRoaXMuc2Nyb2xsRGlzcGF0Y2hlcix0aGlzLnZpZXdwb3J0UnVsZXIsdGhpcy5kYXRhZ3JpZEVsZW1lbnRSZWYsdGhpcy52aXJ0dWFsU2Nyb2xsU3RyYXRlZ3kpLHRoaXMuY2RrVmlydHVhbEZvcj1mdW5jdGlvbiBVWmUoYyxsLGEsZCxo'@;
put 'LGYpe2lmKCtOaWUubWFqb3I8MTkpcmV0dXJuIG5ldyBrTChjLGwsYSxkLGgsZik7e2NvbnN0IHY9RHMuY3JlYXRlKHtwYXJlbnQ6ZmkoaGMpLHByb3ZpZGVyczpbe3Byb3ZpZGU6RHksdXNlVmFsdWU6aH1dfSk7cmV0dXJuIERzLmNyZWF0ZSh7cGFyZW50OnYscHJvdmlkZXJzOlt7cHJvdmlk'@;
put 'ZTpEbyx1c2VWYWx1ZTpjfSx7cHJvdmlkZTpTbCx1c2VWYWx1ZTpsfSx7cHJvdmlkZTplbSx1c2VWYWx1ZTphfSx7cHJvdmlkZTpfWSx1c2VWYWx1ZTpkfSx7cHJvdmlkZTpXYSx1c2VWYWx1ZTpmfSx7cHJvdmlkZTprTCx1c2VDbGFzczprTH1dfSkuZ2V0KGtMKX19KHRoaXMudmlld0NvbnRh'@;
put 'aW5lclJlZix0aGlzLnRlbXBsYXRlUmVmLHRoaXMuaXRlcmFibGVEaWZmZXJzLHRoaXMudmlld1JlcGVhdGVyLHRoaXMudmlydHVhbFNjcm9sbFZpZXdwb3J0LHRoaXMubmdab25lKSx0aGlzLnZpcnR1YWxTY3JvbGxWaWV3cG9ydC5uZ09uSW5pdCgpfSksdGhpcy5ncmlkUm9sZUVsZW1lbnQ9'@;
put 'dGhpcy5kYXRhZ3JpZEVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCdbcm9sZT0iZ3JpZCJdJyksdGhpcy51cGRhdGVDZGtWaXJ0dWFsRm9ySW5wdXRzKCksdGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5pdGVtcy5jaGFuZ2Uuc3Vic2NyaWJlKGE9Pnt0aGlzLml0'@;
put 'ZW1zLnNtYXJ0JiYodGhpcy5jZGtWaXJ0dWFsRm9yLmNka1ZpcnR1YWxGb3JPZj1hKX0pLHRoaXMuY2RrVmlydHVhbEZvci5kYXRhU3RyZWFtLnN1YnNjcmliZShhPT57dGhpcy51cGRhdGVBcmlhUm93Q291bnQoYS5sZW5ndGgpfSksdGhpcy52aXJ0dWFsU2Nyb2xsVmlld3BvcnQuc2Nyb2xs'@;
put 'ZWRJbmRleENoYW5nZS5zdWJzY3JpYmUoYT0+e3RoaXMudG9wSW5kZXg9YX0pLHRoaXMudmlydHVhbFNjcm9sbFZpZXdwb3J0LnJlbmRlcmVkUmFuZ2VTdHJlYW0uc3Vic2NyaWJlKGE9Pnt0aGlzLnJlbmRlcmVkUmFuZ2VDaGFuZ2UuZW1pdChhKX0pLHRoaXMuZGF0YWdyaWQucmVmcmVzaC5z'@;
put 'dWJzY3JpYmUoYT0+e2EuZmlsdGVycyYmdGhpcy5zY3JvbGxUb0luZGV4KDApfSksdGhpcy5jb2x1bW5zU2VydmljZS5jb2x1bW5zU3RhdGVDaGFuZ2Uuc3Vic2NyaWJlKCgpPT57dGhpcy52aWV3UmVwZWF0ZXIuZGV0YWNoKCl9KSl9bmdEb0NoZWNrKCl7dGhpcy5jZGtWaXJ0dWFsRm9yPy5u'@;
put 'Z0RvQ2hlY2soKSx0aGlzLnVwZGF0ZUFyaWFSb3dJbmRleGVzKCl9bmdPbkRlc3Ryb3koKXt0aGlzLmNka1ZpcnR1YWxGb3I/Lm5nT25EZXN0cm95KCksdGhpcy52aXJ0dWFsU2Nyb2xsVmlld3BvcnQ/Lm5nT25EZXN0cm95KCksdGhpcy5tdXRhdGlvbkNoYW5nZXM/LmRpc2Nvbm5lY3QoKSx0'@;
put 'aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChhPT57YS51bnN1YnNjcmliZSgpfSl9c2Nyb2xsVXAoYSxkPSJhdXRvIil7dGhpcy5zY3JvbGxUb0luZGV4KHRoaXMudG9wSW5kZXgtYSxkKX1zY3JvbGxEb3duKGEsZD0iYXV0byIpe3RoaXMuc2Nyb2xsVG9JbmRleCh0aGlzLnRvcEluZGV4K2Es'@;
put 'ZCl9c2Nyb2xsVG9JbmRleChhLGQ9ImF1dG8iKXt0aGlzLnZpcnR1YWxTY3JvbGxWaWV3cG9ydD8uc2Nyb2xsVG9JbmRleChhLGQpfXVwZGF0ZURhdGFSYW5nZShhLGQpe2xldCBoPXRoaXMuY2RrVmlydHVhbEZvck9mOyghdGhpcy5wZXJzaXN0SXRlbXN8fCFofHxoPy5sZW5ndGghPT10aGlz'@;
put 'LnRvdGFsSXRlbXMpJiYoaD1BcnJheSh0aGlzLnRvdGFsSXRlbXMpKSxoLnNwbGljZShhLGQubGVuZ3RoLC4uLmQpLHRoaXMuY2RrVmlydHVhbEZvck9mPUFycmF5LmZyb20oaCl9dXBkYXRlQ2RrVmlydHVhbEZvcklucHV0cygpe2lmKHRoaXMuY2RrVmlydHVhbEZvcilmb3IoY29uc3QgYSBv'@;
put 'ZiBPYmplY3Qua2V5cyh0aGlzLmNka1ZpcnR1YWxGb3JJbnB1dHMpKXRoaXMuY2RrVmlydHVhbEZvclthXSE9PXRoaXMuY2RrVmlydHVhbEZvcklucHV0c1thXSYmKHRoaXMuY2RrVmlydHVhbEZvclthXT10aGlzLmNka1ZpcnR1YWxGb3JJbnB1dHNbYV0pfXVwZGF0ZUZpeGVkU2l6ZVZpcnR1'@;
put 'YWxTY3JvbGxJbnB1dHMoKXt0aGlzLnZpcnR1YWxTY3JvbGxTdHJhdGVneSYmdGhpcy52aXJ0dWFsU2Nyb2xsU3RyYXRlZ3kudXBkYXRlSXRlbUFuZEJ1ZmZlclNpemUodGhpcy5fY2RrRml4ZWRTaXplVmlydHVhbFNjcm9sbElucHV0cy5pdGVtU2l6ZSx0aGlzLl9jZGtGaXhlZFNpemVWaXJ0'@;
put 'dWFsU2Nyb2xsSW5wdXRzLm1pbkJ1ZmZlclB4LHRoaXMuX2Nka0ZpeGVkU2l6ZVZpcnR1YWxTY3JvbGxJbnB1dHMubWF4QnVmZmVyUHgpfXVwZGF0ZUFyaWFSb3dDb3VudChhKXt0aGlzLmdyaWRSb2xlRWxlbWVudD8uc2V0QXR0cmlidXRlKCJhcmlhLXJvd2NvdW50IixhLnRvU3RyaW5nKCkp'@;
put 'fXVwZGF0ZUFyaWFSb3dJbmRleGVzKCl7Zm9yKGxldCBhPTA7YTx0aGlzLnZpZXdDb250YWluZXJSZWYubGVuZ3RoO2ErKyl7Y29uc3QgZD10aGlzLnZpZXdDb250YWluZXJSZWYuZ2V0KGEpO2Qucm9vdE5vZGVzLmZpbmQoTT0+IkNMUi1ERy1ST1ciPT09TS50YWdOYW1lKT8ucXVlcnlTZWxl'@;
put 'Y3RvcignW3JvbGU9InJvdyJdJyk/LnNldEF0dHJpYnV0ZSgiYXJpYS1yb3dpbmRleCIsKGQuY29udGV4dC5pbmRleCsxKS50b1N0cmluZygpKX19Y3JlYXRlVmlydHVhbFNjcm9sbFZpZXdwb3J0Rm9yRGF0YWdyaWQoYSxkLGgsZix2LE0sRCxaKXtjb25zdCByZT1ELm5hdGl2ZUVsZW1lbnQu'@;
put 'cXVlcnlTZWxlY3RvcigiLmRhdGFncmlkIiksY2U9RC5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoIi5kYXRhZ3JpZC10YWJsZSIpLGJlPUQubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCIuZGF0YWdyaWQtcm93cyIpO2xldCBCZT0wLHFlPTA7ZnVuY3Rpb24gcnQoKXtiZS5zdHls'@;
put 'ZS50cmFuc2Zvcm09YHRyYW5zbGF0ZVkoJHtCZX1weClgLGJlLnN0eWxlLmhlaWdodD1xZS1CZSsicHgifWNvbnN0IHB0PWZ1bmN0aW9uIHpaZShjLGwsYSxkLGgsZix2LE0sRCl7cmV0dXJuK05pZS5tYWpvcjwxOT9uZXcgRHkoYyxsLGEsaCxmLHYsTSxEKTpEcy5jcmVhdGUoe3BhcmVudDpm'@;
put 'aShoYykscHJvdmlkZXJzOlt7cHJvdmlkZTpKaSx1c2VWYWx1ZTpjfSx7cHJvdmlkZTpFcyx1c2VWYWx1ZTpsfSx7cHJvdmlkZTpXYSx1c2VWYWx1ZTphfSx7cHJvdmlkZTpFbyx1c2VWYWx1ZTpkfSx7cHJvdmlkZTpXMGUsdXNlVmFsdWU6aH0se3Byb3ZpZGU6cG0sdXNlVmFsdWU6Zn0se3By'@;
put 'b3ZpZGU6a3ksdXNlVmFsdWU6dn0se3Byb3ZpZGU6QUwsdXNlVmFsdWU6TX0se3Byb3ZpZGU6JDBlLHVzZVZhbHVlOkR9LHtwcm92aWRlOkR5LHVzZUNsYXNzOkR5fV19KS5nZXQoRHkpfSh7bmF0aXZlRWxlbWVudDpyZX0sYSxkLGgsWixmLHYsTSxudWxsKTtyZXR1cm4gcHQuX2NvbnRlbnRX'@;
put 'cmFwcGVyPXtuYXRpdmVFbGVtZW50OntzdHlsZTp7c2V0IHRyYW5zZm9ybShkdCl7QmU9dm9pZCAwPT09ZHQ/MDorL3RyYW5zbGF0ZVlcKChbMC05XSspcHhcKS8uZXhlYyhkdCk/LlsxXSxydCgpfX19fSxwdC5zZXRUb3RhbENvbnRlbnRTaXplPWR0PT57cWU9ZHQsY2Uuc3R5bGUuaGVpZ2h0'@;
put 'PWAke3FlfXB4YCxydCgpfSxwdH19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2UoRXMpLEdlKGVtKSxHZShkZyksR2UoV2EpLEdlKEVvKSxHZShTbCksR2UoRG8pLEdlKHBtKSxHZShreSksR2UoQUwpLEdlKENzKCgpPT5BbSkpLEdlKGhnKSxHZSho'@;
put 'YykpfSxjLlx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJjbHJWaXJ0dWFsU2Nyb2xsIiwiIl0sWyIiLCJDbHJWaXJ0dWFsU2Nyb2xsIiwiIl1dLGlucHV0czp7cGVyc2lzdEl0ZW1zOltObi5Ob25lLCJjbHJWaXJ0dWFsUGVyc2lzdEl0ZW1zIiwicGVyc2lzdEl0ZW1zIl0s'@;
put 'Y2RrVmlydHVhbEZvck9mOltObi5Ob25lLCJjbHJWaXJ0dWFsUm93c09mIiwiY2RrVmlydHVhbEZvck9mIl0sY2RrVmlydHVhbEZvclRyYWNrQnk6W05uLk5vbmUsImNsclZpcnR1YWxSb3dzVHJhY2tCeSIsImNka1ZpcnR1YWxGb3JUcmFja0J5Il0sY2RrVmlydHVhbEZvclRlbXBsYXRlOltO'@;
put 'bi5Ob25lLCJjbHJWaXJ0dWFsUm93c1RlbXBsYXRlIiwiY2RrVmlydHVhbEZvclRlbXBsYXRlIl0sY2RrVmlydHVhbEZvclRlbXBsYXRlQ2FjaGVTaXplOltObi5Ob25lLCJjbHJWaXJ0dWFsUm93c1RlbXBsYXRlQ2FjaGVTaXplIiwiY2RrVmlydHVhbEZvclRlbXBsYXRlQ2FjaGVTaXplIl0s'@;
put 'aXRlbVNpemU6W05uLk5vbmUsImNsclZpcnR1YWxSb3dzSXRlbVNpemUiLCJpdGVtU2l6ZSJdLG1pbkJ1ZmZlclB4OltObi5Ob25lLCJjbHJWaXJ0dWFsUm93c01pbkJ1ZmZlclB4IiwibWluQnVmZmVyUHgiXSxtYXhCdWZmZXJQeDpbTm4uTm9uZSwiY2xyVmlydHVhbFJvd3NNYXhCdWZmZXJQ'@;
put 'eCIsIm1heEJ1ZmZlclB4Il0sZGF0YVJhbmdlOltObi5Ob25lLCJjbHJWaXJ0dWFsRGF0YVJhbmdlIiwiZGF0YVJhbmdlIl19LG91dHB1dHM6e3JlbmRlcmVkUmFuZ2VDaGFuZ2U6InJlbmRlcmVkUmFuZ2VDaGFuZ2UifSxmZWF0dXJlczpbZGEoW2RnXSldfSksY30pKCksTGRlPSgoKT0+e2Ns'@;
put 'YXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZil7dGhpcy5maWx0ZXJzPWEsdGhpcy5zb3J0PWQsdGhpcy5wYWdlPWgsdGhpcy5kZWJvdW5jZXI9Zix0aGlzLmNoYW5nZT10aGlzLmRlYm91bmNlci5jaGFuZ2UucGlwZShMcigoKT0+dGhpcy5zdGF0ZSkpfWdldCBzdGF0ZSgpe2NvbnN0IGE9e307'@;
put 'dGhpcy5wYWdlLnNpemU+MCYmKGEucGFnZT17ZnJvbTp0aGlzLnBhZ2UuZmlyc3RJdGVtLHRvOnRoaXMucGFnZS5sYXN0SXRlbSxzaXplOnRoaXMucGFnZS5zaXplLGN1cnJlbnQ6dGhpcy5wYWdlLmN1cnJlbnR9KSx0aGlzLnNvcnQuY29tcGFyYXRvciYmKGEuc29ydD10aGlzLnNvcnQuY29t'@;
put 'cGFyYXRvciBpbnN0YW5jZW9mIG9PP3tieTp0aGlzLnNvcnQuY29tcGFyYXRvci5wcm9wLHJldmVyc2U6dGhpcy5zb3J0LnJldmVyc2V9OntieTp0aGlzLnNvcnQuY29tcGFyYXRvcixyZXZlcnNlOnRoaXMuc29ydC5yZXZlcnNlfSk7Y29uc3QgZD10aGlzLmZpbHRlcnMuZ2V0QWN0aXZlRmls'@;
put 'dGVycygpO2lmKGQubGVuZ3RoPjApe2EuZmlsdGVycz1bXTtmb3IoY29uc3QgaCBvZiBkKWEuZmlsdGVycy5wdXNoKGguc3RhdGU/aC5zdGF0ZTpoKX1yZXR1cm4gYX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoeHIodWcpLHhyKHNPKSx4cihNbSks'@;
put 'eHIoR3gpKX0sYy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSxUbT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMuY29sdW1uc1NlcnZpY2U9YSx0aGlzLnN1YnNjcmlwdGlvbnM9W119bmdBZnRlckNvbnRlbnRJbml0KCl7dGhpcy5z'@;
put 'ZXRDZWxsc1N0YXRlKCksdGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5jZWxscy5jaGFuZ2VzLnN1YnNjcmliZSgoKT0+e3RoaXMuc2V0Q2VsbHNTdGF0ZSgpfSkpfW5nT25EZXN0cm95KCl7dGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2goYT0+YS51bnN1YnNjcmliZSgpKX1zZXRDZWxs'@;
put 'c1N0YXRlKCl7dGhpcy5jZWxscy5sZW5ndGg9PT10aGlzLmNvbHVtbnNTZXJ2aWNlLmNvbHVtbnMubGVuZ3RoJiZ0aGlzLmNlbGxzLmZvckVhY2goKGEsZCk9Pnt0aGlzLmNvbHVtbnNTZXJ2aWNlLmNvbHVtbnNbZF0mJmEucmVzZXRTdGF0ZSh0aGlzLmNvbHVtbnNTZXJ2aWNlLmNvbHVtbnNb'@;
put 'ZF0udmFsdWUpfSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKGhnKSl9LGMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1kZy1yb3ciXSxbImNsci1kZy1yb3ctZGV0YWlsIl1dLGNvbnRlbnRRdWVyaWVzOmZ1bmN0aW9u'@;
put 'KGEsZCxoKXtpZigxJmEmJihhbyhoLGMsNSksYW8oaCxTcCw0KSksMiZhKXtsZXQgZjtDaShmPVNpKCkpJiYoZC5leHBhbmRhYmxlUm93PWYuZmlyc3QpLENpKGY9U2koKSkmJihkLmNlbGxzPWYpfX19KSxjfSkoKSxBbT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYsdixNLEQs'@;
put 'WixyZSxjZSxiZSxFZSxCZSxxZSxydCl7dGhpcy5vcmdhbml6ZXI9YSx0aGlzLml0ZW1zPWQsdGhpcy5leHBhbmRhYmxlUm93cz1oLHRoaXMuc2VsZWN0aW9uPWYsdGhpcy5yb3dBY3Rpb25TZXJ2aWNlPXYsdGhpcy5zdGF0ZVByb3ZpZGVyPU0sdGhpcy5kaXNwbGF5TW9kZT1ELHRoaXMucmVu'@;
put 'ZGVyZXI9Wix0aGlzLmRldGFpbFNlcnZpY2U9cmUsdGhpcy5kb2N1bWVudD1jZSx0aGlzLmVsPWJlLHRoaXMucGFnZT1FZSx0aGlzLmNvbW1vblN0cmluZ3M9QmUsdGhpcy5rZXlOYXZpZ2F0aW9uPXFlLHRoaXMuem9uZT1ydCx0aGlzLmNsckRnU2luZ2xlU2VsZWN0aW9uQXJpYUxhYmVsPXRo'@;
put 'aXMuY29tbW9uU3RyaW5ncy5rZXlzLnNpbmdsZVNlbGVjdGlvbkFyaWFMYWJlbCx0aGlzLmNsckRnU2luZ2xlQWN0aW9uYWJsZUFyaWFMYWJlbD10aGlzLmNvbW1vblN0cmluZ3Mua2V5cy5zaW5nbGVBY3Rpb25hYmxlQXJpYUxhYmVsLHRoaXMuY2xyRGV0YWlsRXhwYW5kYWJsZUFyaWFMYWJl'@;
put 'bD10aGlzLmNvbW1vblN0cmluZ3Mua2V5cy5kZXRhaWxFeHBhbmRhYmxlQXJpYUxhYmVsLHRoaXMuY2xyRGdEaXNhYmxlUGFnZUZvY3VzPSExLHRoaXMuc2VsZWN0ZWRDaGFuZ2VkPW5ldyBLcighMSksdGhpcy5zaW5nbGVTZWxlY3RlZENoYW5nZWQ9bmV3IEtyKCExKSx0aGlzLnJlZnJlc2g9'@;
put 'bmV3IEtyKCExKSx0aGlzLmN1c3RvbVNlbGVjdEFsbEVuYWJsZWQ9ITEsdGhpcy5jdXN0b21TZWxlY3RBbGw9bmV3IEtyLHRoaXMuU0VMRUNUSU9OX1RZUEU9cGwsdGhpcy5fc3Vic2NyaXB0aW9ucz1bXTtjb25zdCBwdD1NdSgpO3RoaXMuc2VsZWN0QWxsSWQ9ImNsci1kZy1zZWxlY3QtYWxs'@;
put 'LSIrcHQscmUuaWQ9cHR9Z2V0IGxvYWRpbmcoKXtyZXR1cm4gdGhpcy5pdGVtcy5sb2FkaW5nfXNldCBsb2FkaW5nKGEpe3RoaXMuaXRlbXMubG9hZGluZz1hfXNldCBzZWxlY3RlZChhKXt0aGlzLnNlbGVjdGlvbi5zZWxlY3Rpb25UeXBlPWE/cGwuTXVsdGk6cGwuTm9uZSx0aGlzLnNlbGVj'@;
put 'dGlvbi51cGRhdGVDdXJyZW50KGEsITEpfXNldCBzaW5nbGVTZWxlY3RlZChhKXt0aGlzLnNlbGVjdGlvbi5zZWxlY3Rpb25UeXBlPXBsLlNpbmdsZSxhP3RoaXMuc2VsZWN0aW9uLmN1cnJlbnRTaW5nbGU9YTp0aGlzLnNlbGVjdGlvbi5jdXJyZW50U2luZ2xlJiYodGhpcy5zZWxlY3Rpb24u'@;
put 'Y3VycmVudFNpbmdsZT1udWxsKX1zZXQgY2xyRGdQcmVzZXJ2ZVNlbGVjdGlvbihhKXt0aGlzLnNlbGVjdGlvbi5wcmVzZXJ2ZVNlbGVjdGlvbj1hfXNldCByb3dTZWxlY3Rpb25Nb2RlKGEpe3RoaXMuc2VsZWN0aW9uLnJvd1NlbGVjdGlvbk1vZGU9YX1zZXQgdHJhY2tCeShhKXt0aGlzLml0'@;
put 'ZW1zLnRyYWNrQnk9YX1nZXQgYWxsU2VsZWN0ZWQoKXtyZXR1cm4gdGhpcy5zZWxlY3Rpb24uaXNBbGxTZWxlY3RlZCgpfXNldCBhbGxTZWxlY3RlZChhKXt0aGlzLmN1c3RvbVNlbGVjdEFsbEVuYWJsZWQ/dGhpcy5jdXN0b21TZWxlY3RBbGwuZW1pdChhKTp0aGlzLnNlbGVjdGlvbi50b2dn'@;
put 'bGVBbGwoKX1uZ0FmdGVyQ29udGVudEluaXQoKXt0aGlzLml0ZW1zLnNtYXJ0fHwodGhpcy5pdGVtcy5hbGw9dGhpcy5yb3dzLm1hcChkPT5kLml0ZW0pKTtjb25zdCBhPXRoaXMucm93cy5jaGFuZ2VzLnBpcGUoVjEoZD0+X3goZm8oZC5tYXAoaD0+aC5pdGVtKSkscTgoZC5tYXAoaD0+aC5p'@;
put 'dGVtQ2hhbmdlcykpLnBpcGUoZm0oMCkpKSkpO3RoaXMuX3N1YnNjcmlwdGlvbnMucHVzaChhLnN1YnNjcmliZShkPT57dGhpcy5pdGVtcy5zbWFydHx8KHRoaXMuaXRlbXMuYWxsPWQpfSksdGhpcy5yb3dzLmNoYW5nZXMuc3Vic2NyaWJlKCgpPT57Zm9yKGxldCBkPXRoaXMuX2Rpc3BsYXll'@;
put 'ZFJvd3MubGVuZ3RoLTE7ZD49MDtkLS0pdGhpcy5fZGlzcGxheWVkUm93cy5nZXQoZCkuZGVzdHJveWVkJiZ0aGlzLl9kaXNwbGF5ZWRSb3dzLnJlbW92ZShkKTtpZih0aGlzLnJvd3MuZm9yRWFjaChkPT57dGhpcy5fZGlzcGxheWVkUm93cy5pbnNlcnQoZC5fdmlldyl9KSx0aGlzLnVwZGF0'@;
put 'ZURldGFpbFN0YXRlKCksdGhpcy52aXJ0dWFsU2Nyb2xsKXtjb25zdCBkPXRoaXMua2V5TmF2aWdhdGlvbi5nZXRBY3RpdmVDZWxsKCk7ZCYmdGhpcy56b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57c2V0VGltZW91dCgoKT0+dGhpcy5rZXlOYXZpZ2F0aW9uLnNldEFjdGl2ZUNlbGwoZCkp'@;
put 'fSl9fSkpfW5nQWZ0ZXJWaWV3SW5pdCgpe3RoaXMua2V5TmF2aWdhdGlvbi5pbml0aWFsaXplS2V5R3JpZCh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQpLHRoaXMudXBkYXRlRGV0YWlsU3RhdGUoKSx0aGlzLnJlZnJlc2guZW1pdCh0aGlzLnN0YXRlUHJvdmlkZXIuc3RhdGUpLHRoaXMuX3N1YnNj'@;
put 'cmlwdGlvbnMucHVzaCh0aGlzLnN0YXRlUHJvdmlkZXIuY2hhbmdlLnN1YnNjcmliZShhPT50aGlzLnJlZnJlc2guZW1pdChhKSksdGhpcy5zZWxlY3Rpb24uY2hhbmdlLnN1YnNjcmliZShhPT57dGhpcy5zZWxlY3Rpb24uc2VsZWN0aW9uVHlwZT09PXBsLlNpbmdsZT90aGlzLnNpbmdsZVNl'@;
put 'bGVjdGVkQ2hhbmdlZC5lbWl0KGEpOnRoaXMuc2VsZWN0aW9uLnNlbGVjdGlvblR5cGU9PT1wbC5NdWx0aSYmdGhpcy5zZWxlY3RlZENoYW5nZWQuZW1pdChhKX0pLHRoaXMucGFnZS5jaGFuZ2Uuc3Vic2NyaWJlKCgpPT57dGhpcy5rZXlOYXZpZ2F0aW9uLnJlc2V0S2V5R3JpZCgpLHRoaXMu'@;
put 'Y2xyRGdEaXNhYmxlUGFnZUZvY3VzfHx0aGlzLmRhdGFncmlkVGFibGUubmF0aXZlRWxlbWVudC5mb2N1cygpfSksdGhpcy5kaXNwbGF5TW9kZS52aWV3LnN1YnNjcmliZShhPT57Zm9yKGxldCBkPXRoaXMuX3Byb2plY3RlZERpc3BsYXlDb2x1bW5zLmxlbmd0aDtkPjA7ZC0tKXRoaXMuX3By'@;
put 'b2plY3RlZERpc3BsYXlDb2x1bW5zLmRldGFjaCgpO2ZvcihsZXQgZD10aGlzLl9wcm9qZWN0ZWRDYWxjdWxhdGlvbkNvbHVtbnMubGVuZ3RoO2Q+MDtkLS0pdGhpcy5fcHJvamVjdGVkQ2FsY3VsYXRpb25Db2x1bW5zLmRldGFjaCgpO2ZvcihsZXQgZD10aGlzLl9jYWxjdWxhdGlvblJvd3Mu'@;
put 'bGVuZ3RoO2Q+MDtkLS0pdGhpcy5fY2FsY3VsYXRpb25Sb3dzLmRldGFjaCgpO2ZvcihsZXQgZD10aGlzLl9kaXNwbGF5ZWRSb3dzLmxlbmd0aDtkPjA7ZC0tKXRoaXMuX2Rpc3BsYXllZFJvd3MuZGV0YWNoKCk7YT09PVF5LkRJU1BMQVk/KHRoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3ModGhp'@;
put 'cy5lbC5uYXRpdmVFbGVtZW50LCJkYXRhZ3JpZC1jYWxjdWxhdGUtbW9kZSIpLHRoaXMuY29sdW1ucy5mb3JFYWNoKGQ9Pnt0aGlzLl9wcm9qZWN0ZWREaXNwbGF5Q29sdW1ucy5pbnNlcnQoZC5fdmlldyl9KSx0aGlzLnJvd3MuZm9yRWFjaChkPT57dGhpcy5fZGlzcGxheWVkUm93cy5pbnNl'@;
put 'cnQoZC5fdmlldyl9KSk6KHRoaXMucmVuZGVyZXIuYWRkQ2xhc3ModGhpcy5lbC5uYXRpdmVFbGVtZW50LCJkYXRhZ3JpZC1jYWxjdWxhdGUtbW9kZSIpLHRoaXMuY29sdW1ucy5mb3JFYWNoKGQ9Pnt0aGlzLl9wcm9qZWN0ZWRDYWxjdWxhdGlvbkNvbHVtbnMuaW5zZXJ0KGQuX3ZpZXcpfSks'@;
put 'dGhpcy5yb3dzLmZvckVhY2goZD0+e3RoaXMuX2NhbGN1bGF0aW9uUm93cy5pbnNlcnQoZC5fdmlldyl9KSl9KSksdGhpcy56b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57dGhpcy5fc3Vic2NyaXB0aW9ucy5wdXNoKHhkKHRoaXMuZG9jdW1lbnQuYm9keSwia2V5ZG93biIpLnN1YnNjcmli'@;
put 'ZShhPT57IlNoaWZ0Ij09PWEua2V5JiYodGhpcy5zZWxlY3Rpb24uc2hpZnRQcmVzc2VkPSEwKX0pLHhkKHRoaXMuZG9jdW1lbnQuYm9keSwia2V5dXAiKS5zdWJzY3JpYmUoYT0+eyJTaGlmdCI9PT1hLmtleSYmKHRoaXMuc2VsZWN0aW9uLnNoaWZ0UHJlc3NlZD0hMSl9KSl9KX1uZ09uRGVz'@;
put 'dHJveSgpe3RoaXMuX3N1YnNjcmlwdGlvbnMuZm9yRWFjaChhPT5hLnVuc3Vic2NyaWJlKCkpfXRvZ2dsZUFsbFNlbGVjdGVkKGEpe2EucHJldmVudERlZmF1bHQoKSx0aGlzLnNlbGVjdEFsbENoZWNrYm94Py5uYXRpdmVFbGVtZW50LmNsaWNrKCl9cmVzaXplKCl7dGhpcy5vcmdhbml6ZXIu'@;
put 'cmVzaXplKCl9dXBkYXRlRGV0YWlsU3RhdGUoKXtpZih0aGlzLmRldGFpbFNlcnZpY2Uuc3RhdGUmJnRoaXMuZGV0YWlsU2VydmljZS5pc09wZW4pe2NvbnN0IGE9dGhpcy5yb3dzLmZpbmQoZD0+dGhpcy5pdGVtcy50cmFja0J5KGQuaXRlbSk9PT10aGlzLml0ZW1zLnRyYWNrQnkodGhpcy5k'@;
put 'ZXRhaWxTZXJ2aWNlLnN0YXRlKSk7YT90aGlzLmRldGFpbFNlcnZpY2Uub3BlbihhLml0ZW0sYS5kZXRhaWxCdXR0b24ubmF0aXZlRWxlbWVudCk6dGhpcy52aXJ0dWFsU2Nyb2xsfHxzZXRUaW1lb3V0KCgpPT57dGhpcy5kZXRhaWxTZXJ2aWNlLmNsb3NlKCl9KX19ZGF0YUNoYW5nZWQoKXt0'@;
put 'aGlzLml0ZW1zLnJlZnJlc2goKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2UoSTcpLEdlKGRnKSxHZShxeSksR2UoZV8pLEdlKEt5KSxHZShMZGUpLEdlKGJHKSxHZShFbyksR2UoWGYpLEdlKHZzKSxHZShKaSksR2UoTW0pLEdlKGlzKSxHZShy'@;
put 'TyksR2UoV2EpKX0sYy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWRhdGFncmlkIl1dLGNvbnRlbnRRdWVyaWVzOmZ1bmN0aW9uKGEsZCxoKXtpZigxJmEmJihhbyhoLFJkZSw1KSxhbyhoLEp5LDUpLGFvKGgsZ0csNSksYW8oaCxSNyw0KSxhbyhoLEVtLDQpKSwyJmEp'@;
put 'e2xldCBmO0NpKGY9U2koKSkmJihkLnZpcnR1YWxTY3JvbGw9Zi5maXJzdCksQ2koZj1TaSgpKSYmKGQuaXRlcmF0b3I9Zi5maXJzdCksQ2koZj1TaSgpKSYmKGQucGxhY2Vob2xkZXI9Zi5maXJzdCksQ2koZj1TaSgpKSYmKGQuY29sdW1ucz1mKSxDaShmPVNpKCkpJiYoZC5yb3dzPWYpfX0s'@;
put 'dmlld1F1ZXJ5OmZ1bmN0aW9uKGEsZCl7aWYoMSZhJiYocWEoQkJlLDUsSmkpLHFhKGpCZSw1LEppKSxxYSh6QmUsNSxEbykscWEoVUJlLDUsRG8pLHFhKFpCZSw1LERvKSxxYShXQmUsNSxEbykscWEoWUJlLDUsRG8pLHFhKEdCZSw1KSksMiZhKXtsZXQgaDtDaShoPVNpKCkpJiYoZC5kYXRh'@;
put 'Z3JpZD1oLmZpcnN0KSxDaShoPVNpKCkpJiYoZC5kYXRhZ3JpZFRhYmxlPWguZmlyc3QpLENpKGg9U2koKSkmJihkLnNjcm9sbGFibGVDb2x1bW5zPWguZmlyc3QpLENpKGg9U2koKSkmJihkLl9wcm9qZWN0ZWREaXNwbGF5Q29sdW1ucz1oLmZpcnN0KSxDaShoPVNpKCkpJiYoZC5fcHJvamVj'@;
put 'dGVkQ2FsY3VsYXRpb25Db2x1bW5zPWguZmlyc3QpLENpKGg9U2koKSkmJihkLl9kaXNwbGF5ZWRSb3dzPWguZmlyc3QpLENpKGg9U2koKSkmJihkLl9jYWxjdWxhdGlvblJvd3M9aC5maXJzdCksQ2koaD1TaSgpKSYmKGQuc2VsZWN0QWxsQ2hlY2tib3g9aC5maXJzdCl9fSxob3N0VmFyczo0'@;
put 'LGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmVHIoImRhdGFncmlkLWhvc3QiLCEwKSgiZGF0YWdyaWQtZGV0YWlsLW9wZW4iLGQuZGV0YWlsU2VydmljZS5pc09wZW4pfSxpbnB1dHM6e2xvYWRpbmdNb3JlSXRlbXM6W05uLk5vbmUsImNsckxvYWRpbmdNb3JlSXRlbXMiLCJsb2Fk'@;
put 'aW5nTW9yZUl0ZW1zIl0sY2xyRGdTaW5nbGVTZWxlY3Rpb25BcmlhTGFiZWw6ImNsckRnU2luZ2xlU2VsZWN0aW9uQXJpYUxhYmVsIixjbHJEZ1NpbmdsZUFjdGlvbmFibGVBcmlhTGFiZWw6ImNsckRnU2luZ2xlQWN0aW9uYWJsZUFyaWFMYWJlbCIsY2xyRGV0YWlsRXhwYW5kYWJsZUFyaWFM'@;
put 'YWJlbDoiY2xyRGV0YWlsRXhwYW5kYWJsZUFyaWFMYWJlbCIsY2xyRGdEaXNhYmxlUGFnZUZvY3VzOiJjbHJEZ0Rpc2FibGVQYWdlRm9jdXMiLGN1c3RvbVNlbGVjdEFsbEVuYWJsZWQ6W05uLk5vbmUsImNsckRnQ3VzdG9tU2VsZWN0QWxsRW5hYmxlZCIsImN1c3RvbVNlbGVjdEFsbEVuYWJs'@;
put 'ZWQiXSxsb2FkaW5nOltObi5Ob25lLCJjbHJEZ0xvYWRpbmciLCJsb2FkaW5nIl0sc2VsZWN0ZWQ6W05uLk5vbmUsImNsckRnU2VsZWN0ZWQiLCJzZWxlY3RlZCJdLHNpbmdsZVNlbGVjdGVkOltObi5Ob25lLCJjbHJEZ1NpbmdsZVNlbGVjdGVkIiwic2luZ2xlU2VsZWN0ZWQiXSxjbHJEZ1By'@;
put 'ZXNlcnZlU2VsZWN0aW9uOiJjbHJEZ1ByZXNlcnZlU2VsZWN0aW9uIixyb3dTZWxlY3Rpb25Nb2RlOltObi5Ob25lLCJjbHJEZ1Jvd1NlbGVjdGlvbiIsInJvd1NlbGVjdGlvbk1vZGUiXSx0cmFja0J5OltObi5Ob25lLCJjbHJEZ0l0ZW1zVHJhY2tCeSIsInRyYWNrQnkiXX0sb3V0cHV0czp7'@;
put 'c2VsZWN0ZWRDaGFuZ2VkOiJjbHJEZ1NlbGVjdGVkQ2hhbmdlIixzaW5nbGVTZWxlY3RlZENoYW5nZWQ6ImNsckRnU2luZ2xlU2VsZWN0ZWRDaGFuZ2UiLHJlZnJlc2g6ImNsckRnUmVmcmVzaCIsY3VzdG9tU2VsZWN0QWxsOiJjbHJEZ0N1c3RvbVNlbGVjdEFsbCJ9LGZlYXR1cmVzOltkYShb'@;
put 'ZV8sc08sdWcsTW0sZGcsSTcsS3kscXksR3gsWGYsTGRlLHBHLGhnLGJHLHJPXSldLG5nQ29udGVudFNlbGVjdG9yczpLQmUsZGVjbHM6MzUsdmFyczo5LGNvbnN0czpbWyJkYXRhZ3JpZCIsIiJdLFsiZGF0YWdyaWRUYWJsZSIsIiJdLFsicHJvamVjdGVkRGlzcGxheUNvbHVtbnMiLCIiXSxb'@;
put 'ImRpc3BsYXllZFJvd3MiLCIiXSxbInByb2plY3RlZENhbGN1bGF0aW9uQ29sdW1ucyIsIiJdLFsiY2FsY3VsYXRpb25Sb3dzIiwiIl0sWyJzZWxlY3RBbGxDaGVja2JveCIsIiJdLFsxLCJkYXRhZ3JpZC1vdXRlci13cmFwcGVyIl0sWzEsImRhdGFncmlkLWlubmVyLXdyYXBwZXIiXSxbMSwi'@;
put 'ZGF0YWdyaWQiXSxbMSwiZGF0YWdyaWQtdGFibGUtd3JhcHBlciJdLFsicm9sZSIsImdyaWQiLCJ0YWJpbmRleCIsIi0xIiwxLCJkYXRhZ3JpZC10YWJsZSJdLFsicm9sZSIsInJvd2dyb3VwIiwxLCJkYXRhZ3JpZC1oZWFkZXIiXSxbInJvbGUiLCJyb3ciLDEsImRhdGFncmlkLXJvdyJdLFsx'@;
put 'LCJkYXRhZ3JpZC1yb3ctbWFzdGVyIiwiZGF0YWdyaWQtcm93LWZsZXgiXSxbMSwiZGF0YWdyaWQtcm93LXN0aWNreSJdLFsicm9sZSIsImNvbHVtbmhlYWRlciIsImNsYXNzIiwiZGF0YWdyaWQtY29sdW1uIGRhdGFncmlkLXNlbGVjdCBkYXRhZ3JpZC1maXhlZC1jb2x1bW4iLDMsImtleWRv'@;
put 'd24uc3BhY2UiLDQsIm5nSWYiXSxbInJvbGUiLCJjb2x1bW5oZWFkZXIiLCJjbGFzcyIsImRhdGFncmlkLWNvbHVtbiBkYXRhZ3JpZC1zZWxlY3QgZGF0YWdyaWQtZml4ZWQtY29sdW1uIiw0LCJuZ0lmIl0sWyJyb2xlIiwiY29sdW1uaGVhZGVyIiwiY2xhc3MiLCJkYXRhZ3JpZC1jb2x1bW4g'@;
put 'ZGF0YWdyaWQtcm93LWFjdGlvbnMgZGF0YWdyaWQtZml4ZWQtY29sdW1uIiw0LCJuZ0lmIl0sWyJyb2xlIiwiY29sdW1uaGVhZGVyIiwiY2xhc3MiLCJkYXRhZ3JpZC1jb2x1bW4gZGF0YWdyaWQtZXhwYW5kYWJsZS1jYXJldCBkYXRhZ3JpZC1maXhlZC1jb2x1bW4iLDQsIm5nSWYiXSxbMSwi'@;
put 'ZGF0YWdyaWQtcm93LXNjcm9sbGFibGUiXSxbInJvbGUiLCJwcmVzZW50YXRpb24iLDEsImRhdGFncmlkLXJvd3MiXSxbImNsYXNzIiwiZGF0YWdyaWQtcm93LWxvYWRpbmciLDQsIm5nSWYiXSxbNCwibmdJZiJdLFsiY2xhc3MiLCJkYXRhZ3JpZC1zcGlubmVyIiw0LCJuZ0lmIl0sWzEsImRh'@;
put 'dGFncmlkLWNhbGN1bGF0aW9uLXRhYmxlIl0sWzEsImRhdGFncmlkLWNhbGN1bGF0aW9uLWhlYWRlciJdLFsicm9sZSIsImNvbHVtbmhlYWRlciIsMSwiZGF0YWdyaWQtY29sdW1uIiwiZGF0YWdyaWQtc2VsZWN0IiwiZGF0YWdyaWQtZml4ZWQtY29sdW1uIiwzLCJrZXlkb3duLnNwYWNlIl0s'@;
put 'WyJjbGFzcyIsImNsci1jaGVja2JveC13cmFwcGVyIiw0LCJuZ0lmIl0sWzEsImRhdGFncmlkLWNvbHVtbi1zZXBhcmF0b3IiXSxbMSwiY2xyLWNoZWNrYm94LXdyYXBwZXIiXSxbInR5cGUiLCJjaGVja2JveCIsInRhYmluZGV4IiwiLTEiLDMsIm5nTW9kZWxDaGFuZ2UiLCJpZCIsIm5nTW9k'@;
put 'ZWwiXSxbMSwiY2xyLWNvbnRyb2wtbGFiZWwiLCJjbHItY29sLW51bGwiLDMsImZvciJdLFsxLCJjbHItc3Itb25seSJdLFsicm9sZSIsImNvbHVtbmhlYWRlciIsMSwiZGF0YWdyaWQtY29sdW1uIiwiZGF0YWdyaWQtc2VsZWN0IiwiZGF0YWdyaWQtZml4ZWQtY29sdW1uIl0sWyJyb2xlIiwi'@;
put 'Y29sdW1uaGVhZGVyIiwxLCJkYXRhZ3JpZC1jb2x1bW4iLCJkYXRhZ3JpZC1yb3ctYWN0aW9ucyIsImRhdGFncmlkLWZpeGVkLWNvbHVtbiJdLFsicm9sZSIsImNvbHVtbmhlYWRlciIsMSwiZGF0YWdyaWQtY29sdW1uIiwiZGF0YWdyaWQtZXhwYW5kYWJsZS1jYXJldCIsImRhdGFncmlkLWZp'@;
put 'eGVkLWNvbHVtbiJdLFsxLCJkYXRhZ3JpZC1yb3ctbG9hZGluZyJdLFsiY2xyTWVkaXVtIiwiIl0sWzEsImRhdGFncmlkLXNwaW5uZXIiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihzYSgkQmUpLFlyKDApLGRlKDEsImRpdiIsNykoMiwiZGl2Iiw4KSgzLCJkaXYiLDksMCkoNSwi'@;
put 'ZGl2IiwxMCkoNiwiZGl2IiwxMSwxKSg4LCJkaXYiLDEyKSg5LCJkaXYiLDEzKSgxMCwiZGl2IiwxNCkoMTEsImRpdiIsMTUpLGd0KDEyLFhCZSwzLDEsImRpdiIsMTYpKDEzLEpCZSw0LDEsImRpdiIsMTcpKDE0LFFCZSw0LDEsImRpdiIsMTgpKDE1LGVqZSw0LDEsImRpdiIsMTkpLGhlKCks'@;
put 'ZGUoMTYsImRpdiIsMjApLEZsKDE3LG51bGwsMiksaGUoKSgpKCkoKSxkZSgxOSwiZGl2IiwyMSksZ3QoMjAsdGplLDUsMSwiY2xyLWRnLXJvdyIsMjIpLEZsKDIxLG51bGwsMyksZ3QoMjMsbmplLDUsMSwiY2xyLWRnLXJvdyIsMjIpLFlyKDI0LDEpLGd0KDI1LHJqZSwxLDAsImNsci1kZy1w'@;
put 'bGFjZWhvbGRlciIsMjMpLGhlKCkoKSgpKCksWXIoMjYsMiksZ3QoMjcsaWplLDMsMCwiZGl2IiwyNCksaGUoKSxZcigyOCwzKSxoZSgpLGRlKDI5LCJkaXYiLDI1KSgzMCwiZGl2IiwyNiksRmwoMzEsbnVsbCw0KSxoZSgpLEZsKDMzLG51bGwsNSksaGUoKSksMiZhJiYoZmUoMyksaHIoImFy'@;
put 'aWEtaGlkZGVuIiwhIWQuZGV0YWlsU2VydmljZS5pc09wZW58fG51bGwpLGZlKDkpLE1lKCJuZ0lmIixkLnNlbGVjdGlvbi5zZWxlY3Rpb25UeXBlPT09ZC5TRUxFQ1RJT05fVFlQRS5NdWx0aSksZmUoKSxNZSgibmdJZiIsZC5zZWxlY3Rpb24uc2VsZWN0aW9uVHlwZT09PWQuU0VMRUNUSU9O'@;
put 'X1RZUEUuU2luZ2xlKSxmZSgpLE1lKCJuZ0lmIixkLnJvd0FjdGlvblNlcnZpY2UuaGFzQWN0aW9uYWJsZVJvdyksZmUoKSxNZSgibmdJZiIsZC5leHBhbmRhYmxlUm93cy5oYXNFeHBhbmRhYmxlUm93fHxkLmRldGFpbFNlcnZpY2UuZW5hYmxlZCksZmUoNSksTWUoIm5nSWYiLGQubG9hZGlu'@;
put 'Z01vcmVJdGVtcyksZmUoMyksTWUoIm5nSWYiLGQubG9hZGluZ01vcmVJdGVtcyksZmUoMiksTWUoIm5nSWYiLCFkLnBsYWNlaG9sZGVyKSxmZSgyKSxNZSgibmdJZiIsZC5sb2FkaW5nKSl9LGRlcGVuZGVuY2llczpbYmEsZHMsTWQsbmwsJHMsUmQsUWYsZ0csRW0seUcsU3AsVG0sazcsRDdd'@;
put 'LGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpO2NvbnN0IEdaZT1jPT5jO2xldCBPZGU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQpe3RoaXMuY29tbW9uU3RyaW5ncz1hLHRoaXMuY29sdW1uc1NlcnZpY2U9ZCx0aGlzLmFsbFNlbGVjdGVkPW5ldyBLcn1nZXQgY2xyQWxsU2VsZWN0ZWQo'@;
put 'KXtyZXR1cm4gdGhpcy5hbGxTZWxlY3RlZC5hc09ic2VydmFibGUoKX1nZXQgYWxsSGlkZWFibGVzVmlzaWJsZSgpe3JldHVybiAwPT09dGhpcy5oaWRlYWJsZUNvbHVtbnMoKS5maWx0ZXIoYT0+YS52YWx1ZS5oaWRkZW4pLmxlbmd0aH1zZWxlY3RBbGwoKXt0aGlzLmhpZGVhYmxlQ29sdW1u'@;
put 'cygpLmZvckVhY2goYT0+dGhpcy5jb2x1bW5zU2VydmljZS5lbWl0U3RhdGVDaGFuZ2UoYSx7aGlkZGVuOiExLGNoYW5nZXM6W1cxLkhJRERFTl19KSksdGhpcy5hbGxTZWxlY3RlZC5uZXh0KCEwKX1oaWRlYWJsZUNvbHVtbnMoKXtyZXR1cm4gdGhpcy5jb2x1bW5zU2VydmljZS5jb2x1bW5z'@;
put 'LmZpbHRlcihhPT5hLnZhbHVlLmhpZGVhYmxlKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2UoaXMpLEdlKGhnKSl9LGMuXHUwMjc1Y21wPVZyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1kZy1jb2x1bW4tdG9nZ2xlLWJ1dHRvbiJdXSxvdXRw'@;
put 'dXRzOntjbHJBbGxTZWxlY3RlZDoiY2xyQWxsU2VsZWN0ZWQifSxkZWNsczoyLHZhcnM6Mixjb25zdHM6W1sidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLWxpbmsiLCJzd2l0Y2gtYnV0dG9uIiwzLCJjbGljayIsImRpc2FibGVkIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEs'@;
put 'ZCl7MSZhJiYoZGUoMCwiYnV0dG9uIiwwKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGQuc2VsZWN0QWxsKCl9KSxMZSgxKSxoZSgpKSwyJmEmJihNZSgiZGlzYWJsZWQiLGQuYWxsSGlkZWFibGVzVmlzaWJsZSksZmUoKSxEcigiICIsZC5jb21tb25TdHJpbmdzLmtleXMuc2VsZWN0'@;
put 'QWxsLCIgIikpfSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxQZGU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCl7dGhpcy5jb21tb25TdHJpbmdzPWEsdGhpcy5jb2x1bW5zU2VydmljZT1kLHRoaXMucG9wb3ZlcklkPU11KCksdGhpcy5vcGVuU3RhdGU9ITEsdGhpcy5zbWFydFBv'@;
put 'c2l0aW9uPXtheGlzOmgxLlZFUlRJQ0FMLHNpZGU6UjIuQkVGT1JFLGFuY2hvcjpPcy5TVEFSVCxjb250ZW50Ok9zLlNUQVJUfSx0aGlzLnRyYWNrQnlGbj1HWmUsdGhpcy5zdWJzY3JpcHRpb249aC5vcGVuQ2hhbmdlLnN1YnNjcmliZShmPT50aGlzLm9wZW5TdGF0ZT1mKX1nZXQgYWxsQ29s'@;
put 'dW1uc1Zpc2libGUoKXtyZXR1cm4gdGhpcy5fYWxsQ29sdW1uc1Zpc2libGV9c2V0IGFsbENvbHVtbnNWaXNpYmxlKGEpe3RoaXMuX2FsbENvbHVtbnNWaXNpYmxlPWF9Z2V0IGhpZGVhYmxlQ29sdW1uU3RhdGVzKCl7cmV0dXJuIHRoaXMuY29sdW1uc1NlcnZpY2UuY29sdW1ucy5maWx0ZXIo'@;
put 'ZD0+ZC52YWx1ZS5oaWRlYWJsZSkubWFwKGQ9PmQudmFsdWUpfWdldCBoYXNPbmx5T25lVmlzaWJsZUNvbHVtbigpe3JldHVybiB0aGlzLmNvbHVtbnNTZXJ2aWNlLmNvbHVtbnMubGVuZ3RoLXRoaXMuaGlkZWFibGVDb2x1bW5TdGF0ZXMubGVuZ3RoPT0wJiYxPT09dGhpcy5oaWRlYWJsZUNv'@;
put 'bHVtblN0YXRlcy5maWx0ZXIoZD0+IWQuaGlkZGVuKS5sZW5ndGh9bmdPbkRlc3Ryb3koKXt0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpfXRvZ2dsZUNvbHVtblN0YXRlKGEsZCl7Y29uc3QgaD10aGlzLmNvbHVtbnNTZXJ2aWNlLmNvbHVtbnMuZmlsdGVyKGY9PmYudmFsdWU9PT1h'@;
put 'KVswXTt0aGlzLmNvbHVtbnNTZXJ2aWNlLmVtaXRTdGF0ZUNoYW5nZShoLHtoaWRkZW46ZCxjaGFuZ2VzOltXMS5ISURERU5dfSl9dG9nZ2xlU3dpdGNoUGFuZWwoKXt0aGlzLm9wZW5TdGF0ZT0hdGhpcy5vcGVuU3RhdGV9YWxsQ29sdW1uc1NlbGVjdGVkKCl7dGhpcy5hbGxTZWxlY3RlZEVs'@;
put 'ZW1lbnQubmF0aXZlRWxlbWVudC5mb2N1cygpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZShpcyksR2UoaGcpLEdlKHNjKSl9LGMuXHUwMjc1Y21wPVZyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1kZy1jb2x1bW4tdG9nZ2xlIl1dLHZpZXdR'@;
put 'dWVyeTpmdW5jdGlvbihhLGQpe2lmKDEmYSYmcWEob2plLDUsSmkpLDImYSl7bGV0IGg7Q2koaD1TaSgpKSYmKGQuYWxsU2VsZWN0ZWRFbGVtZW50PWguZmlyc3QpfX0saG9zdFZhcnM6NCxob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJlRyKCJjb2x1bW4tc3dpdGNoLXdyYXBwZXIi'@;
put 'LCEwKSgiYWN0aXZlIixkLm9wZW5TdGF0ZSl9LGZlYXR1cmVzOlt2ZChbb2ddKV0sZGVjbHM6Myx2YXJzOjgsY29uc3RzOltbImFsbFNlbGVjdGVkIiwiIl0sWyJyb2xlIiwiYnV0dG9uIiwidHlwZSIsImJ1dHRvbiIsImNsclBvcG92ZXJBbmNob3IiLCIiLCJjbHJQb3BvdmVyT3BlbkNsb3Nl'@;
put 'QnV0dG9uIiwiIiwxLCJidG4iLCJidG4tc20iLCJjb2x1bW4tdG9nZ2xlLS1hY3Rpb24iXSxbImNsYXNzIiwiY29sdW1uLXN3aXRjaCIsInJvbGUiLCJkaWFsb2ciLCJjZGtUcmFwRm9jdXMiLCIiLDMsImlkIiw0LCJjbHJQb3BvdmVyQ29udGVudCIsImNsclBvcG92ZXJDb250ZW50QXQiLCJj'@;
put 'bHJQb3BvdmVyQ29udGVudE91dHNpZGVDbGlja1RvQ2xvc2UiLCJjbHJQb3BvdmVyQ29udGVudFNjcm9sbFRvQ2xvc2UiXSxbInJvbGUiLCJkaWFsb2ciLCJjZGtUcmFwRm9jdXMiLCIiLDEsImNvbHVtbi1zd2l0Y2giLDMsImlkIl0sWzEsInN3aXRjaC1oZWFkZXIiXSxbInRhYmluZGV4Iiwi'@;
put 'LTEiLDEsImNsci1zci1vbmx5Il0sWyJjbHJQb3BvdmVyQ2xvc2VCdXR0b24iLCIiLCJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tc20iLCJidG4tbGluayIsInRvZ2dsZS1zd2l0Y2gtY2xvc2UtYnV0dG9uIl0sWyJzaGFwZSIsIndpbmRvdy1jbG9zZSIsImFyaWEtaGlkZGVuIiwidHJ1'@;
put 'ZSJdLFsxLCJjbHItc3Itb25seSJdLFsxLCJzd2l0Y2gtY29udGVudCIsImxpc3QtdW5zdHlsZWQiXSxbNCwibmdGb3IiLCJuZ0Zvck9mIiwibmdGb3JUcmFja0J5Il0sWzEsInN3aXRjaC1mb290ZXIiXSxbMywiY2xyQWxsU2VsZWN0ZWQiXSxbImNsckNoZWNrYm94IiwiIiwidHlwZSIsImNo'@;
put 'ZWNrYm94IiwzLCJuZ01vZGVsQ2hhbmdlIiwiZGlzYWJsZWQiLCJuZ01vZGVsIl0sWzMsIm5nVGVtcGxhdGVPdXRsZXQiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihkZSgwLCJidXR0b24iLDEpLExlKDEpLGhlKCksZ3QoMixjamUsMTUsOSwiZGl2IiwyKSksMiZhJiYoaHIoImFy'@;
put 'aWEtY29udHJvbHMiLGQucG9wb3ZlcklkKSgiYXJpYS1leHBhbmRlZCIsZC5vcGVuU3RhdGUpKCJhcmlhLWhhc3BvcHVwIiwibWVudSIpLGZlKCksRHIoIiAiLGQuY29tbW9uU3RyaW5ncy5rZXlzLnBpY2tDb2x1bW5zLCIgIiksZmUoKSxNZSgiY2xyUG9wb3ZlckNvbnRlbnQiLGQub3BlblN0'@;
put 'YXRlKSgiY2xyUG9wb3ZlckNvbnRlbnRBdCIsZC5zbWFydFBvc2l0aW9uKSgiY2xyUG9wb3ZlckNvbnRlbnRPdXRzaWRlQ2xpY2tUb0Nsb3NlIiwhMCkoImNsclBvcG92ZXJDb250ZW50U2Nyb2xsVG9DbG9zZSIsITApKX0sZGVwZW5kZW5jaWVzOltucyxOMSxaeSxycyxkcyxJZCxTaCxNZCxu'@;
put 'bCwkcyxQeCxMMWUsTngsSHgsT2RlXSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxIZGU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLmV4cGFuZGFibGVSb3dzQ291bnQ9YSxhJiZhLnJlZ2lzdGVyKCl9bmdPbkRlc3Ryb3koKXt0aGlzLmV4cGFuZGFibGVSb3dzQ291bnQmJnRo'@;
put 'aXMuZXhwYW5kYWJsZVJvd3NDb3VudC51bnJlZ2lzdGVyKCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKHF5LDgpKX0sYy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwiY2xySWZFeHBhbmRlZCIsIiJdXX0pLGN9KSgpLGNP'@;
put 'PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZil7dGhpcy5zZWxlY3Rpb249YSx0aGlzLmRldGFpbFNlcnZpY2U9ZCx0aGlzLmNvbHVtbnNTZXJ2aWNlPWgsdGhpcy5jb21tb25TdHJpbmdzPWYsdGhpcy5TRUxFQ1RJT05fVFlQRT1wbH1nZXQgaGFzSGlkZWFibGVDb2x1bW5zKCl7'@;
put 'cmV0dXJuIHRoaXMuY29sdW1uc1NlcnZpY2UuaGFzSGlkZWFibGVDb2x1bW5zfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZShlXyksR2UoWGYpLEdlKGhnKSxHZShpcykpfSxjLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHIt'@;
put 'ZGctZm9vdGVyIl1dLGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiZUcigiZGF0YWdyaWQtZm9vdGVyIiwhMCl9LG5nQ29udGVudFNlbGVjdG9yczpoamUsZGVjbHM6Myx2YXJzOjIsY29uc3RzOltbNCwibmdJZiJdLFsxLCJjbHItZm9ybS1jb250cm9sLWRpc2Fi'@;
put 'bGVkIl0sWzEsImRhdGFncmlkLWZvb3Rlci1zZWxlY3QiXSxbImNsckNoZWNrYm94IiwiIiwidHlwZSIsImNoZWNrYm94IiwiY2hlY2tlZCIsImNoZWNrZWQiLCJkaXNhYmxlZCIsIiJdLFsxLCJjbHItc3Itb25seSJdLFsxLCJkYXRhZ3JpZC1mb290ZXItZGVzY3JpcHRpb24iXV0sdGVtcGxh'@;
put 'dGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihzYShkamUpLGd0KDAsZmplLDgsMiwibmctY29udGFpbmVyIiwwKSgxLGdqZSw0LDEsIm5nLWNvbnRhaW5lciIsMCksWXIoMikpLDImYSYmKE1lKCJuZ0lmIixkLnNlbGVjdGlvbi5zZWxlY3Rpb25UeXBlPT09ZC5TRUxFQ1RJT05fVFlQRS5NdWx0aSYm'@;
put 'ZC5zZWxlY3Rpb24uY3VycmVudC5sZW5ndGg+MCksZmUoKSxNZSgibmdJZiIsIWQuZGV0YWlsU2VydmljZS5pc09wZW4pKX0sZGVwZW5kZW5jaWVzOltiYSxkcyxJZCxTaCxQZGVdLGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpO2NvbnN0IF9HPW5ldyBTdCgiQ09MVU1OX1NUQVRFIiksWFplPXtw'@;
put 'cm92aWRlOl9HLHVzZUZhY3Rvcnk6ZnVuY3Rpb24gcVplKCl7cmV0dXJuIG5ldyBlaSh7Y2hhbmdlczpbXX0pfX07bGV0IFh4PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5wYWdlPWEsdGhpcy5wYWdlU2l6ZU9wdGlvbnNJZD1NdSgpfW5nT25Jbml0KCl7KCF0aGlzLnBhZ2VT'@;
put 'aXplT3B0aW9uc3x8MD09PXRoaXMucGFnZVNpemVPcHRpb25zLmxlbmd0aCkmJih0aGlzLnBhZ2VTaXplT3B0aW9ucz1bdGhpcy5wYWdlLnNpemVdKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2UoTW0pKX0sYy5cdTAyNzVjbXA9VnIoe3R5cGU6'@;
put 'YyxzZWxlY3RvcnM6W1siY2xyLWRnLXBhZ2Utc2l6ZSJdXSxpbnB1dHM6e3BhZ2VTaXplT3B0aW9uczpbTm4uTm9uZSwiY2xyUGFnZVNpemVPcHRpb25zIiwicGFnZVNpemVPcHRpb25zIl0scGFnZVNpemVPcHRpb25zSWQ6W05uLk5vbmUsImNsclBhZ2VTaXplT3B0aW9uc0lkIiwicGFnZVNp'@;
put 'emVPcHRpb25zSWQiXX0sbmdDb250ZW50U2VsZWN0b3JzOnlvLGRlY2xzOjUsdmFyczo2LGNvbnN0czpbWzMsImZvciJdLFsxLCJjbHItc2VsZWN0LXdyYXBwZXIiXSxbMywibmdNb2RlbENoYW5nZSIsImlkIiwibmdNb2RlbCJdLFszLCJuZ1ZhbHVlIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxb'@;
put 'MywibmdWYWx1ZSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKHNhKCksZGUoMCwibGFiZWwiLDApLFlyKDEpLGhlKCksZGUoMiwiZGl2IiwxKSgzLCJzZWxlY3QiLDIpLGdpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihmKXtyZXR1cm4gbWkoZC5wYWdlLnNpemUsZil8fChkLnBh'@;
put 'Z2Uuc2l6ZT1mKSxmfSksZ3QoNCxtamUsMiwyLCJvcHRpb24iLDMpLGhlKCkoKSksMiZhJiYoTWUoImZvciIsZC5wYWdlU2l6ZU9wdGlvbnNJZCksZmUoMyksVHIoImNsci1wYWdlLXNpemUtc2VsZWN0IiwhMCksTWUoImlkIixkLnBhZ2VTaXplT3B0aW9uc0lkKSxwaSgibmdNb2RlbCIsZC5w'@;
put 'YWdlLnNpemUpLGZlKCksTWUoIm5nRm9yT2YiLGQucGFnZVNpemVPcHRpb25zKSl9LGRlcGVuZGVuY2llczpbbnMsZHMsQTIsazIsVDIsbmwsJHNdLGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpLHVPPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgpe3RoaXMucGFnZT1hLHRoaXMuY29t'@;
put 'bW9uU3RyaW5ncz1kLHRoaXMuZGV0YWlsU2VydmljZT1oLHRoaXMuY3VycmVudENoYW5nZWQ9bmV3IEtyKCExKSxhLmFjdGl2YXRlZD0hMH1nZXQgcGFnZVNpemUoKXtyZXR1cm4gdGhpcy5wYWdlLnNpemV9c2V0IHBhZ2VTaXplKGEpeyJudW1iZXIiPT10eXBlb2YgYSYmKHRoaXMucGFnZS5z'@;
put 'aXplPWEpfWdldCB0b3RhbEl0ZW1zKCl7cmV0dXJuIHRoaXMucGFnZS50b3RhbEl0ZW1zfXNldCB0b3RhbEl0ZW1zKGEpeyJudW1iZXIiPT10eXBlb2YgYSYmKHRoaXMucGFnZS50b3RhbEl0ZW1zPWEpfWdldCBsYXN0UGFnZSgpe3JldHVybiB0aGlzLnBhZ2UubGFzdH1zZXQgbGFzdFBhZ2Uo'@;
put 'YSl7Im51bWJlciI9PXR5cGVvZiBhJiYodGhpcy5wYWdlLmxhc3Q9YSl9Z2V0IGN1cnJlbnRQYWdlKCl7cmV0dXJuIHRoaXMucGFnZS5jdXJyZW50fXNldCBjdXJyZW50UGFnZShhKXsibnVtYmVyIj09dHlwZW9mIGEmJih0aGlzLnBhZ2UuY3VycmVudD1hKX1nZXQgZmlyc3RJdGVtKCl7cmV0'@;
put 'dXJuIHRoaXMucGFnZS5maXJzdEl0ZW19Z2V0IGxhc3RJdGVtKCl7cmV0dXJuIHRoaXMucGFnZS5sYXN0SXRlbX1nZXQgbWlkZGxlUGFnZXMoKXtjb25zdCBhPVtdO3JldHVybiB0aGlzLnBhZ2UuY3VycmVudD4xJiZhLnB1c2godGhpcy5wYWdlLmN1cnJlbnQtMSksYS5wdXNoKHRoaXMucGFn'@;
put 'ZS5jdXJyZW50KSx0aGlzLnBhZ2UuY3VycmVudDx0aGlzLnBhZ2UubGFzdCYmYS5wdXNoKHRoaXMucGFnZS5jdXJyZW50KzEpLGF9bmdPbkluaXQoKXt0aGlzLnBhZ2Uuc2l6ZXx8KHRoaXMucGFnZS5zaXplPTEwKSx0aGlzLl9wYWdlU3Vic2NyaXB0aW9uPXRoaXMucGFnZS5jaGFuZ2Uuc3Vi'@;
put 'c2NyaWJlKGE9PnRoaXMuY3VycmVudENoYW5nZWQuZW1pdChhKSl9bmdPbkRlc3Ryb3koKXt0aGlzLnBhZ2UucmVzZXRQYWdlU2l6ZSghMCksdGhpcy5fcGFnZVN1YnNjcmlwdGlvbiYmdGhpcy5fcGFnZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpfXByZXZpb3VzKCl7dGhpcy5wYWdlLnBy'@;
put 'ZXZpb3VzKCl9bmV4dCgpe3RoaXMucGFnZS5uZXh0KCl9dmVyaWZ5Q3VycmVudFBhZ2UoYSl7cGFyc2VJbnQoYS50YXJnZXQudmFsdWUsMTApIT09dGhpcy5wYWdlLmN1cnJlbnQmJihhLnRhcmdldC52YWx1ZT10aGlzLnBhZ2UuY3VycmVudCl9dXBkYXRlQ3VycmVudFBhZ2UoYSl7Y29uc3Qg'@;
put 'ZD1wYXJzZUludChhLnRhcmdldC52YWx1ZSwxMCk7aXNOYU4oZCl8fCh0aGlzLnBhZ2UuY3VycmVudD1kPDE/MTpkPnRoaXMucGFnZS5sYXN0P3RoaXMucGFnZS5sYXN0OmQpLHRoaXMuY3VycmVudFBhZ2VJbnB1dFJlZi5uYXRpdmVFbGVtZW50LnZhbHVlPXRoaXMucGFnZS5jdXJyZW50LnRv'@;
put 'U3RyaW5nKCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKE1tKSxHZShpcyksR2UoWGYpKX0sYy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWRnLXBhZ2luYXRpb24iXV0sY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24oYSxk'@;
put 'LGgpe2lmKDEmYSYmYW8oaCxYeCw1KSwyJmEpe2xldCBmO0NpKGY9U2koKSkmJihkLl9wYWdlU2l6ZUNvbXBvbmVudD1mLmZpcnN0KX19LHZpZXdRdWVyeTpmdW5jdGlvbihhLGQpe2lmKDEmYSYmcWEodmplLDUpLDImYSl7bGV0IGg7Q2koaD1TaSgpKSYmKGQuY3VycmVudFBhZ2VJbnB1dFJl'@;
put 'Zj1oLmZpcnN0KX19LGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiZUcigicGFnaW5hdGlvbiIsITApfSxpbnB1dHM6e2Rpc2FibGVDdXJyZW50UGFnZUlucHV0OltObi5Ob25lLCJjbHJEZ1BhZ2VJbnB1dERpc2FibGVkIiwiZGlzYWJsZUN1cnJlbnRQYWdlSW5w'@;
put 'dXQiXSxwYWdlU2l6ZTpbTm4uTm9uZSwiY2xyRGdQYWdlU2l6ZSIsInBhZ2VTaXplIl0sdG90YWxJdGVtczpbTm4uTm9uZSwiY2xyRGdUb3RhbEl0ZW1zIiwidG90YWxJdGVtcyJdLGxhc3RQYWdlOltObi5Ob25lLCJjbHJEZ0xhc3RQYWdlIiwibGFzdFBhZ2UiXSxjdXJyZW50UGFnZTpbTm4u'@;
put 'Tm9uZSwiY2xyRGdQYWdlIiwiY3VycmVudFBhZ2UiXX0sb3V0cHV0czp7Y3VycmVudENoYW5nZWQ6ImNsckRnUGFnZUNoYW5nZSJ9LG5nQ29udGVudFNlbGVjdG9yczp5amUsZGVjbHM6Mix2YXJzOjIsY29uc3RzOltbInJlYWRPbmx5IiwiIl0sWyJjdXJyZW50UGFnZUlucHV0IiwiIl0sWzQs'@;
put 'Im5nSWYiXSxbImNsYXNzIiwicGFnaW5hdGlvbi1zaXplIiw0LCJuZ0lmIl0sWzEsInBhZ2luYXRpb24tZGVzY3JpcHRpb24iXSxbImNsYXNzIiwicGFnaW5hdGlvbi1saXN0Iiw0LCJuZ0lmIl0sWzEsInBhZ2luYXRpb24tc2l6ZSJdLFsxLCJwYWdpbmF0aW9uLWxpc3QiXSxbInR5cGUiLCJi'@;
put 'dXR0b24iLDEsInBhZ2luYXRpb24tZmlyc3QiLDMsImNsaWNrIiwiZGlzYWJsZWQiXSxbMSwiY2xyLXNyLW9ubHkiXSxbInNoYXBlIiwic3RlcC1mb3J3YXJkLTIiLCJkaXJlY3Rpb24iLCJkb3duIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJwYWdpbmF0aW9uLXByZXZpb3VzIiwzLCJjbGljayIs'@;
put 'ImRpc2FibGVkIl0sWyJzaGFwZSIsImFuZ2xlIiwiZGlyZWN0aW9uIiwibGVmdCJdLFsidHlwZSIsInRleHQiLCJjbGFzcyIsInBhZ2luYXRpb24tY3VycmVudCBjbHItaW5wdXQiLDMsInNpemUiLCJ2YWx1ZSIsImtleWRvd24uZW50ZXIiLCJibHVyIiw0LCJuZ0lmIiwibmdJZkVsc2UiXSxb'@;
put 'InR5cGUiLCJidXR0b24iLDEsInBhZ2luYXRpb24tbmV4dCIsMywiY2xpY2siLCJkaXNhYmxlZCJdLFsic2hhcGUiLCJhbmdsZSIsImRpcmVjdGlvbiIsInJpZ2h0Il0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJwYWdpbmF0aW9uLWxhc3QiLDMsImNsaWNrIiwiZGlzYWJsZWQiXSxbInNoYXBlIiwi'@;
put 'c3RlcC1mb3J3YXJkLTIiLCJkaXJlY3Rpb24iLCJ1cCJdLFsidHlwZSIsInRleHQiLDEsInBhZ2luYXRpb24tY3VycmVudCIsImNsci1pbnB1dCIsMywia2V5ZG93bi5lbnRlciIsImJsdXIiLCJzaXplIiwidmFsdWUiXSxbMSwicGFnaW5hdGlvbi1kZXNjcmlwdGlvbi1jb21wYWN0Il1dLHRl'@;
put 'bXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoc2EoYmplKSxndCgwLE1qZSw1LDIsIm5nLWNvbnRhaW5lciIsMikoMSx4amUsMTQsMTAsIm5nLWNvbnRhaW5lciIsMikpLDImYSYmKE1lKCJuZ0lmIiwhZC5kZXRhaWxTZXJ2aWNlLmlzT3BlbiksZmUoKSxNZSgibmdJZiIsZC5kZXRhaWxTZXJ2'@;
put 'aWNlLmlzT3BlbikpfSxkZXBlbmRlbmNpZXM6W2JhLHJzXSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxMNz0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYsdixNLEQpe3RoaXMuZWw9YSx0aGlzLnJlbmRlcmVyPWQsdGhpcy5kb21BZGFwdGVyPWYsdGhpcy5jb2x1bW5SZXNpemVy'@;
put 'U2VydmljZT12LHRoaXMuY29sdW1uc1NlcnZpY2U9TSx0aGlzLmNvbHVtblN0YXRlPUQsdGhpcy5yZXNpemVFbWl0dGVyPW5ldyBLcix0aGlzLndpZHRoU2V0PSExLHRoaXMuYXV0b1NldD0hMSx0aGlzLnN1YnNjcmlwdGlvbnM9W10sdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goaC5maWx0ZXJS'@;
put 'ZW5kZXJTdGVwcyhKZi5DTEVBUl9XSURUSFMpLnN1YnNjcmliZSgoKT0+dGhpcy5jbGVhcldpZHRoKCkpKX1uZ09uRGVzdHJveSgpe3RoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKGE9PmEudW5zdWJzY3JpYmUoKSl9Z2V0Q29sdW1uV2lkdGhTdGF0ZSgpe2NvbnN0IGE9dGhpcy5kZXRlY3RT'@;
put 'dHJpY3RXaWR0aCgpO3JldHVybnt3aWR0aDp0aGlzLmNvbXB1dGVXaWR0aChhKSxzdHJpY3RXaWR0aDphfX1zZXRDb2x1bW5TdGF0ZShhKXt0aGlzLmNvbHVtbnNTZXJ2aWNlLmNvbHVtbnNbYV09dGhpcy5jb2x1bW5TdGF0ZX1zZXRXaWR0aChhKXthLnN0cmljdFdpZHRoPyh0aGlzLmNvbHVt'@;
put 'blJlc2l6ZXJTZXJ2aWNlLnJlc2l6ZWRCeSYmKHRoaXMucmVzaXplRW1pdHRlci5lbWl0KGEud2lkdGgpLHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5lbC5uYXRpdmVFbGVtZW50LCJ3aWR0aCIsYS53aWR0aCsicHgiKSx0aGlzLndpZHRoU2V0PSExKSx0aGlzLnJlbmRlcmVyLmFkZENs'@;
put 'YXNzKHRoaXMuZWwubmF0aXZlRWxlbWVudCxYeSksdGhpcy5hdXRvU2V0PSExKToodGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsWHkpLHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5lbC5uYXRpdmVFbGVtZW50LCJ3aWR0aCIsYS53aWR0aCsicHgi'@;
put 'KSx0aGlzLndpZHRoU2V0PSEwLHRoaXMuYXV0b1NldD0hMCl9c2V0SGlkZGVuKGEpe2EuaGlkZGVuP3RoaXMucmVuZGVyZXIuYWRkQ2xhc3ModGhpcy5lbC5uYXRpdmVFbGVtZW50LEt4KTp0aGlzLnJlbmRlcmVyLnJlbW92ZUNsYXNzKHRoaXMuZWwubmF0aXZlRWxlbWVudCxLeCl9Y2xlYXJX'@;
put 'aWR0aCgpe3RoaXMud2lkdGhTZXQmJiF0aGlzLmNvbHVtblJlc2l6ZXJTZXJ2aWNlLnJlc2l6ZWRCeSYmdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsIndpZHRoIixudWxsKSx0aGlzLmF1dG9TZXQmJnRoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3ModGhpcy5l'@;
put 'bC5uYXRpdmVFbGVtZW50LFh5KX1kZXRlY3RTdHJpY3RXaWR0aCgpe3JldHVybiB0aGlzLmNvbHVtblJlc2l6ZXJTZXJ2aWNlLnJlc2l6ZWRCeT90aGlzLmNvbHVtblJlc2l6ZXJTZXJ2aWNlLndpZHRoQWZ0ZXJSZXNpemU6dGhpcy5hdXRvU2V0PzA6dGhpcy5kb21BZGFwdGVyLnVzZXJEZWZp'@;
put 'bmVkV2lkdGgodGhpcy5lbC5uYXRpdmVFbGVtZW50KX1jb21wdXRlV2lkdGgoYSl7bGV0IGQ9YTtyZXR1cm4gZHx8KGQ9dGhpcy5kb21BZGFwdGVyLnNjcm9sbFdpZHRoKHRoaXMuZWwubmF0aXZlRWxlbWVudCkpLGR9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3'@;
put 'KGF8fGMpKEdlKEppKSxHZShFbyksR2UoSTcpLEdlKHZtKSxHZShmRyksR2UoaGcpLEdlKF9HKSl9LGMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1kZy1jb2x1bW4iXV0sb3V0cHV0czp7cmVzaXplRW1pdHRlcjoiY2xyRGdDb2x1bW5SZXNpemUifSxmZWF0dXJlczpb'@;
put 'ZGEoW2ZHLFhaZV0pXX0pLGN9KSgpLHRXZT0oKCk9PntjbGFzcyBje3VzZXJEZWZpbmVkV2lkdGgoYSl7cmV0dXJuIDB9c2Nyb2xsQmFyV2lkdGgoYSl7cmV0dXJuIDB9c2Nyb2xsV2lkdGgoYSl7cmV0dXJuIDB9Y29tcHV0ZWRIZWlnaHQoYSl7cmV0dXJuIDB9Y2xpZW50UmVjdChhKXtyZXR1'@;
put 'cm57dG9wOjAsYm90dG9tOjAsbGVmdDowLHJpZ2h0OjAsd2lkdGg6MCxoZWlnaHQ6MH19bWluV2lkdGgoYSl7cmV0dXJuIDB9Zm9jdXMoYSl7fX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6'@;
put 'Yy5cdTAyNzVmYWN9KSxjfSkoKTtjb25zdCBuV2U9Yz0+dGwoYyk/bmV3IHZtOm5ldyB0V2U7bGV0IHRfPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZix2LE0sRCxaLHJlLGNlLGJlLEVlKXt0aGlzLmRhdGFncmlkPWEsdGhpcy5vcmdhbml6ZXI9ZCx0aGlzLml0ZW1zPWgsdGhp'@;
put 'cy5wYWdlPWYsdGhpcy5lbD12LHRoaXMucmVuZGVyZXI9TSx0aGlzLnRhYmxlU2l6ZVNlcnZpY2U9Wix0aGlzLmNvbHVtbnNTZXJ2aWNlPXJlLHRoaXMubmdab25lPWNlLHRoaXMua2V5TmF2aWdhdGlvbj1iZSx0aGlzLmNoYW5nZURldGVjdG9yUmVmPUVlLHRoaXMuX2hlaWdodFNldD0hMSx0'@;
put 'aGlzLnNob3VsZFN0YWJpbGl6ZUNvbHVtbnM9ITAsdGhpcy5zdWJzY3JpcHRpb25zPVtdLHRoaXMuaW50ZXJzZWN0aW9uT2JzZXJ2ZXI9bnVsbCx0aGlzLmNvbHVtbnNTaXplc1N0YWJsZT0hMSx0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChkLmZpbHRlclJlbmRlclN0ZXBzKEpmLkNPTVBVVEVf'@;
put 'Q09MVU1OX1dJRFRIUykuc3Vic2NyaWJlKCgpPT50aGlzLmNvbXB1dGVIZWFkZXJzV2lkdGgoKSkpLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKGYuc2l6ZUNoYW5nZS5zdWJzY3JpYmUoKCk9Pnt0aGlzLl9oZWlnaHRTZXQmJnRoaXMucmVzZXREYXRhZ3JpZEhlaWdodCgpfSkpLHRoaXMuc3Vi'@;
put 'c2NyaXB0aW9ucy5wdXNoKEQuc3RhdGVDaGFuZ2Uuc3Vic2NyaWJlKEJlPT50aGlzLnRvZ2dsZURldGFpbFBhbmUoQmUpKSksdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goaC5jaGFuZ2Uuc3Vic2NyaWJlKCgpPT50aGlzLnNob3VsZFN0YWJpbGl6ZUNvbHVtbnM9ITApKX1uZ09uSW5pdCgpe3Ro'@;
put 'aXMuY29sdW1uc1NlcnZpY2UuY29sdW1uc1N0YXRlQ2hhbmdlLnN1YnNjcmliZShhPT50aGlzLmNvbHVtblN0YXRlQ2hhbmdlZChhKSksbnVsbD09PXRoaXMuZWwubmF0aXZlRWxlbWVudC5vZmZzZXRQYXJlbnQmJih0aGlzLmludGVyc2VjdGlvbk9ic2VydmVyPW5ldyBJbnRlcnNlY3Rpb25P'@;
put 'YnNlcnZlcigoW2FdKT0+eyh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQub2Zmc2V0UGFyZW50fHxhLmlzSW50ZXJzZWN0aW5nKSYmdGhpcy5jb2x1bW5zU2l6ZXNTdGFibGUmJih0aGlzLmNvbHVtbnNTaXplc1N0YWJsZT0hMSx0aGlzLmNoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpLHRo'@;
put 'aXMuaW50ZXJzZWN0aW9uT2JzZXJ2ZXIuZGlzY29ubmVjdCgpKX0pLHRoaXMuaW50ZXJzZWN0aW9uT2JzZXJ2ZXIub2JzZXJ2ZSh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQpKX1uZ0FmdGVyQ29udGVudEluaXQoKXt0aGlzLnNldHVwQ29sdW1ucygpLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRo'@;
put 'aXMuaGVhZGVycy5jaGFuZ2VzLnN1YnNjcmliZSgoKT0+e3RoaXMuc2V0dXBDb2x1bW5zKCksdGhpcy5jb2x1bW5zU2l6ZXNTdGFibGU9ITEsdGhpcy5zdGFiaWxpemVDb2x1bW5zKCl9KSl9bmdBZnRlclZpZXdJbml0KCl7dGhpcy50YWJsZVNpemVTZXJ2aWNlLnRhYmxlPXRoaXMuZWx9bmdB'@;
put 'ZnRlclZpZXdDaGVja2VkKCl7dGhpcy5zaG91bGRTdGFiaWxpemVDb2x1bW5zJiZ0aGlzLnN0YWJpbGl6ZUNvbHVtbnMoKSx0aGlzLnNob3VsZENvbXB1dGVIZWlnaHQoKSYmdGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PntzZXRUaW1lb3V0KCgpPT57dGhpcy5jb21wdXRlRGF0'@;
put 'YWdyaWRIZWlnaHQoKX0pfSl9bmdPbkRlc3Ryb3koKXt0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChhPT5hLnVuc3Vic2NyaWJlKCkpLHRoaXMuaW50ZXJzZWN0aW9uT2JzZXJ2ZXI/LmRpc2Nvbm5lY3QoKX10b2dnbGVEZXRhaWxQYW5lKGEpe3RoaXMuaGVhZGVycyYmKGEmJiF0aGlzLmNv'@;
put 'bHVtbnNTZXJ2aWNlLmhhc0NhY2hlKCk/KHRoaXMuY29sdW1uc1NlcnZpY2UuY2FjaGUoKSx0aGlzLmNvbHVtbnNTZXJ2aWNlLnZpc2libGVDb2x1bW5zLmZvckVhY2goKGQsaCk9PntoPjAmJnRoaXMuY29sdW1uc1NlcnZpY2UuZW1pdFN0YXRlQ2hhbmdlQXQoZC5jb2x1bW5JbmRleCx7Y2hh'@;
put 'bmdlczpbVzEuSElEREVOXSxoaWRkZW46YX0pfSkpOmF8fHRoaXMuY29sdW1uc1NlcnZpY2UucmVzZXRUb0xhc3RDYWNoZSgpKX1zZXR1cENvbHVtbnMoKXt0aGlzLmhlYWRlcnMuZm9yRWFjaCgoYSxkKT0+YS5zZXRDb2x1bW5TdGF0ZShkKSksdGhpcy5jb2x1bW5zU2VydmljZS5jb2x1bW5z'@;
put 'LnNwbGljZSh0aGlzLmhlYWRlcnMubGVuZ3RoKSx0aGlzLmNvbHVtbnNTZXJ2aWNlLmNvbHVtbnMuZm9yRWFjaCgoYSxkKT0+e3RoaXMuY29sdW1uc1NlcnZpY2UuZW1pdFN0YXRlQ2hhbmdlKGEse2NoYW5nZXM6W1cxLklOSVRJQUxJWkVdLGNvbHVtbkluZGV4OmR9KX0pfXNob3VsZENvbXB1'@;
put 'dGVIZWlnaHQoKXtyZXR1cm4hdGhpcy5faGVpZ2h0U2V0JiZ0aGlzLnBhZ2Uuc2l6ZT4wJiZ0aGlzLml0ZW1zLmRpc3BsYXllZC5sZW5ndGg9PT10aGlzLnBhZ2Uuc2l6ZX1jb21wdXRlRGF0YWdyaWRIZWlnaHQoKXtjb25zdCBhPXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHRoaXMuZWwubmF0'@;
put 'aXZlRWxlbWVudCkuaGVpZ2h0O3RoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5lbC5uYXRpdmVFbGVtZW50LCJoZWlnaHQiLGEpLHRoaXMuX2hlaWdodFNldD0hMH1yZXNldERhdGFncmlkSGVpZ2h0KCl7dGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsImhl'@;
put 'aWdodCIsIiIpLHRoaXMuX2hlaWdodFNldD0hMX1jb21wdXRlSGVhZGVyc1dpZHRoKCl7Y29uc3QgYT10aGlzLmhlYWRlcnMubGVuZ3RoLGQ9dGhpcy5oZWFkZXJzLm1hcChmPT5mLmdldENvbHVtbldpZHRoU3RhdGUoKSk7bGV0IGg9ITA7dGhpcy5oZWFkZXJzLmZvckVhY2goKGYsdik9Pntj'@;
put 'b25zdCBNPXtjaGFuZ2VzOltXMS5XSURUSF0sLi4uZFt2XX07TS5zdHJpY3RXaWR0aHx8KGg9ITEpLGE9PT12KzEmJmgmJihNLnN0cmljdFdpZHRoPTApLHRoaXMuY29sdW1uc1NlcnZpY2UuZW1pdFN0YXRlQ2hhbmdlQXQodixNKX0pfWNvbHVtblN0YXRlQ2hhbmdlZChhKXtpZighdGhpcy5o'@;
put 'ZWFkZXJzfHxudWxsPT1hLmNvbHVtbkluZGV4KXJldHVybjtjb25zdCBkPWEuY29sdW1uSW5kZXg7YS5jaGFuZ2VzJiZhLmNoYW5nZXMubGVuZ3RoJiZhLmNoYW5nZXMuZm9yRWFjaChoPT57c3dpdGNoKGgpe2Nhc2UgVzEuV0lEVEg6dGhpcy5oZWFkZXJzLmdldChkKS5zZXRXaWR0aChhKSx0'@;
put 'aGlzLnJvd3MuZm9yRWFjaChmPT57Zj8uY2VsbHMubGVuZ3RoPT09dGhpcy5jb2x1bW5zU2VydmljZS5jb2x1bW5zLmxlbmd0aCYmKGYuY2VsbHMuZ2V0KGQpLnNldFdpZHRoKGEpLGYuZXhwYW5kYWJsZVJvdz8uY2VsbHMuZ2V0KGQpPy5zZXRXaWR0aChhKSl9KTticmVhaztjYXNlIFcxLkhJ'@;
put 'RERFTjp0aGlzLmhlYWRlcnMuZ2V0KGQpLnNldEhpZGRlbihhKSx0aGlzLnJvd3MuZm9yRWFjaChmPT57Zi5jZWxscyYmZi5jZWxscy5sZW5ndGgmJihmLmNlbGxzLmdldChkKS5zZXRIaWRkZW4oYSksZi5leHBhbmRhYmxlUm93Py5jZWxscy5nZXQoZCk/LnNldEhpZGRlbihhKSl9KSx0aGlz'@;
put 'LnVwZGF0ZUNvbHVtblNlcGFyYXRvcnNWaXNpYmlsaXR5KCksdGhpcy5rZXlOYXZpZ2F0aW9uLnJlc2V0S2V5R3JpZCgpO2JyZWFrO2Nhc2UgVzEuSU5JVElBTElaRTphLmhpZGVhYmxlJiZhLmhpZGRlbiYmKHRoaXMuaGVhZGVycy5nZXQoZCkuc2V0SGlkZGVuKGEpLHRoaXMucm93cy5mb3JF'@;
put 'YWNoKGY9PntmLnNldENlbGxzU3RhdGUoKSxmLmV4cGFuZGFibGVSb3c/LnNldENlbGxzU3RhdGUoKX0pKX19KX1zdGFiaWxpemVDb2x1bW5zKCl7dGhpcy5jb2x1bW5zU2l6ZXNTdGFibGV8fHRoaXMuaXRlbXMuZGlzcGxheWVkLmxlbmd0aD4wJiYodGhpcy5vcmdhbml6ZXIucmVzaXplKCks'@;
put 'dGhpcy5jb2x1bW5zU2l6ZXNTdGFibGU9ITApfXVwZGF0ZUNvbHVtblNlcGFyYXRvcnNWaXNpYmlsaXR5KCl7Y29uc3QgYT10aGlzLmRhdGFncmlkLmNvbHVtbnMuZmlsdGVyKGQ9PiFkLmlzSGlkZGVuKTthLmZvckVhY2goKGQsaCk9PntoPT09YS5sZW5ndGgtMT9kLnNob3dTZXBhcmF0b3I9'@;
put 'ITE6ZC5zaG93U2VwYXJhdG9yfHwoZC5zaG93U2VwYXJhdG9yPSEwKX0pfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZShBbSksR2UoSTcpLEdlKGRnKSxHZShNbSksR2UoSmkpLEdlKEVvKSxHZShYZiksR2UocEcpLEdlKGhnKSxHZShXYSksR2Uo'@;
put 'ck8pLEdlKEVzKSl9LGMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1kYXRhZ3JpZCJdXSxjb250ZW50UXVlcmllczpmdW5jdGlvbihhLGQsaCl7aWYoMSZhJiYoYW8oaCxMNyw0KSxhbyhoLFRtLDQpKSwyJmEpe2xldCBmO0NpKGY9U2koKSkmJihkLmhlYWRlcnM9Ziks'@;
put 'Q2koZj1TaSgpKSYmKGQucm93cz1mKX19LGZlYXR1cmVzOltkYShbe3Byb3ZpZGU6dm0sdXNlRmFjdG9yeTpuV2UsZGVwczpbaW9dfV0pXX0pLGN9KSgpLHJXZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7VHMuYWRkSWNvbnMoQk9lLGpPZSx2eCx6T2UsQTBlLFVPZSxrMGUsWk9lLFdP'@;
put 'ZSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD1raSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9QXIoe2ltcG9ydHM6W1JhLFJaZSxLTCxBcyxDZGUsUmMsUFksTzIsTFplLFNkZSxqeSxWeCxZWV19KSxjfSkoKSxOZGU9KCgpPT57'@;
put 'Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1zdGFjay1jb250ZW50Il1dfSksY30pKCksd0c9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuX2dlbmVy'@;
put 'YXRlZElkPW51bGwsdGhpcy5faWQ9bnVsbH1nZXQgaWQoKXtyZXR1cm4gdGhpcy5faWR9c2V0IGlkKGEpe3RoaXMuX2lkPSJzdHJpbmciPT10eXBlb2YgYSYmIiIhPT1hP2E6dGhpcy5fZ2VuZXJhdGVkSWQrIiJ9bmdPbkluaXQoKXt0aGlzLl9nZW5lcmF0ZWRJZD0iY2xyLXN0YWNrLWxhYmVs'@;
put 'LSIrTXUoKSx0aGlzLmlkfHwodGhpcy5faWQ9dGhpcy5fZ2VuZXJhdGVkSWQrIiIpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLXN0YWNrLWxhYmVsIl1dLGhvc3RWYXJzOjEs'@;
put 'aG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiZocigiaWQiLGQuaWQpfSxpbnB1dHM6e2lkOiJpZCJ9LG5nQ29udGVudFNlbGVjdG9yczp5byxkZWNsczoxLHZhcnM6MCx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKHNhKCksWXIoMCkpfSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSko'@;
put 'KSxWZGU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQpe3RoaXMucGFyZW50PWEsdGhpcy5jb21tb25TdHJpbmdzPWQsdGhpcy5leHBhbmRlZD0hMSx0aGlzLmV4cGFuZGFibGU9ITEsdGhpcy5leHBhbmRlZENoYW5nZT1uZXcgS3IoITEpLHRoaXMuZm9jdXNlZD0hMSx0aGlzLnVuaXF1'@;
put 'ZUlkPU11KCksdGhpcy5fY2hhbmdlZENoaWxkcmVuPTAsdGhpcy5fZnVsbHlJbml0aWFsaXplZD0hMSx0aGlzLl9jaGFuZ2VkPSExLGEmJmEuYWRkQ2hpbGQoKX1zZXQgc2V0Q2hhbmdlZFZhbHVlKGEpe3RoaXMuX2NoYW5nZWQ9YSx0aGlzLnBhcmVudCYmdGhpcy5fZnVsbHlJbml0aWFsaXpl'@;
put 'ZCYmKGE/dGhpcy5wYXJlbnQuX2NoYW5nZWRDaGlsZHJlbisrOnRoaXMucGFyZW50Ll9jaGFuZ2VkQ2hpbGRyZW4tLSl9Z2V0IGdldENoYW5nZWRWYWx1ZSgpe3JldHVybiB0aGlzLl9jaGFuZ2VkfHx0aGlzLl9jaGFuZ2VkQ2hpbGRyZW4+MCYmIXRoaXMuZXhwYW5kZWR9Z2V0IG9uU3RhY2tM'@;
put 'YWJlbEZvY3VzKCl7cmV0dXJuIHRoaXMuZXhwYW5kYWJsZSYmIXRoaXMuZXhwYW5kZWQmJnRoaXMuZm9jdXNlZH1nZXQgbGFiZWxsZWRCeUlkKCl7cmV0dXJuIHRoaXMuc3RhY2tCbG9ja1RpdGxlLmlkfWdldCBoZWFkaW5nTGV2ZWwoKXtyZXR1cm4gdGhpcy5hcmlhTGV2ZWw/dGhpcy5hcmlh'@;
put 'TGV2ZWwrIiI6dGhpcy5wYXJlbnQ/IjQiOiIzIn1nZXQgY2FyZXREaXJlY3Rpb24oKXtyZXR1cm4gdGhpcy5leHBhbmRlZD8iZG93biI6InJpZ2h0In1nZXQgcm9sZSgpe3JldHVybiB0aGlzLmV4cGFuZGFibGU/ImJ1dHRvbiI6bnVsbH1nZXQgdGFiSW5kZXgoKXtyZXR1cm4gdGhpcy5leHBh'@;
put 'bmRhYmxlPyIwIjpudWxsfWdldCBhcmlhRXhwYW5kZWQoKXtyZXR1cm4gdGhpcy5leHBhbmRhYmxlP3RoaXMuZXhwYW5kZWQ/InRydWUiOiJmYWxzZSI6bnVsbH1uZ09uSW5pdCgpe3RoaXMuX2Z1bGx5SW5pdGlhbGl6ZWQ9ITB9YWRkQ2hpbGQoKXt0aGlzLmV4cGFuZGFibGU9ITB9dG9nZ2xl'@;
put 'RXhwYW5kKGEpe0JkZShhKXx8dGhpcy5leHBhbmRhYmxlJiYodGhpcy5leHBhbmRlZD0hdGhpcy5leHBhbmRlZCx0aGlzLmV4cGFuZGVkQ2hhbmdlLmVtaXQodGhpcy5leHBhbmRlZCkpfWdldFN0YWNrQ2hpbGRyZW5JZCgpe3JldHVybiB0aGlzLmV4cGFuZGVkP2BjbHItc3RhY2stY2hpbGRy'@;
put 'ZW4tJHt0aGlzLnVuaXF1ZUlkfWA6bnVsbH1wcmV2ZW50RGVmYXVsdElmTm90SW5wdXRFdmVudChhKXtCZGUoYSl8fGEucHJldmVudERlZmF1bHQoKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2UoYywxMiksR2UoaXMpKX0sYy5cdTAyNzVjbXA9'@;
put 'VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLXN0YWNrLWJsb2NrIl1dLGNvbnRlbnRRdWVyaWVzOmZ1bmN0aW9uKGEsZCxoKXtpZigxJmEmJmFvKGgsd0csNSksMiZhKXtsZXQgZjtDaShmPVNpKCkpJiYoZC5zdGFja0Jsb2NrVGl0bGU9Zi5maXJzdCl9fSxob3N0VmFyczoxMixob3N0Qmlu'@;
put 'ZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJihocigicm9sZSIsImhlYWRpbmciKSgiYXJpYS1sZXZlbCIsZC5oZWFkaW5nTGV2ZWwpLFRyKCJzdGFjay1ibG9jayIsITApKCJzdGFjay1ibG9jay1leHBhbmRlZCIsZC5leHBhbmRlZCkoInN0YWNrLWJsb2NrLWV4cGFuZGFibGUiLGQuZXhwYW5k'@;
put 'YWJsZSkoInN0YWNrLWJsb2NrLWNoYW5nZWQiLGQuZ2V0Q2hhbmdlZFZhbHVlKSgib24tZm9jdXMiLGQub25TdGFja0xhYmVsRm9jdXMpKX0saW5wdXRzOntleHBhbmRlZDpbTm4uTm9uZSwiY2xyU2JFeHBhbmRlZCIsImV4cGFuZGVkIl0sZXhwYW5kYWJsZTpbTm4uTm9uZSwiY2xyU2JFeHBh'@;
put 'bmRhYmxlIiwiZXhwYW5kYWJsZSJdLGFyaWFMZXZlbDpbTm4uTm9uZSwiY2xyU3RhY2tWaWV3TGV2ZWwiLCJhcmlhTGV2ZWwiXSxzZXRDaGFuZ2VkVmFsdWU6W05uLk5vbmUsImNsclNiTm90aWZ5Q2hhbmdlIiwic2V0Q2hhbmdlZFZhbHVlIl19LG91dHB1dHM6e2V4cGFuZGVkQ2hhbmdlOiJj'@;
put 'bHJTYkV4cGFuZGVkQ2hhbmdlIn0sbmdDb250ZW50U2VsZWN0b3JzOkRqZSxkZWNsczo5LHZhcnM6OSxjb25zdHM6W1sxLCJzdGFjay1ibG9jay1sYWJlbCIsMywiY2xpY2siLCJrZXl1cC5lbnRlciIsImtleXVwLnNwYWNlIiwia2V5ZG93bi5zcGFjZSIsImZvY3VzIiwiYmx1ciIsImlkIl0s'@;
put 'WyJzaGFwZSIsImFuZ2xlIiwiY2xhc3MiLCJzdGFjay1ibG9jay1jYXJldCIsNCwibmdJZiJdLFsiY2xhc3MiLCJjbHItc3Itb25seSIsNCwibmdJZiJdLFsxLCJzdGFjay12aWV3LWtleSJdLFsxLCJzdGFjay1ibG9jay1jb250ZW50Il0sWzEsInN0YWNrLWNoaWxkcmVuIiwzLCJjbHJFeHBh'@;
put 'bmRUcmlnZ2VyIl0sWyJyb2xlIiwicmVnaW9uIiwzLCJoZWlnaHQiLDQsIm5nSWYiXSxbInNoYXBlIiwiYW5nbGUiLDEsInN0YWNrLWJsb2NrLWNhcmV0Il0sWzEsImNsci1zci1vbmx5Il0sWyJyb2xlIiwicmVnaW9uIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoc2Eoa2plKSxk'@;
put 'ZSgwLCJkaXYiLDApLEZ0KCJjbGljayIsZnVuY3Rpb24oZil7cmV0dXJuIGQudG9nZ2xlRXhwYW5kKGYpfSkoImtleXVwLmVudGVyIixmdW5jdGlvbihmKXtyZXR1cm4gZC50b2dnbGVFeHBhbmQoZil9KSgia2V5dXAuc3BhY2UiLGZ1bmN0aW9uKGYpe3JldHVybiBkLnRvZ2dsZUV4cGFuZChm'@;
put 'KX0pKCJrZXlkb3duLnNwYWNlIixmdW5jdGlvbihmKXtyZXR1cm4gZC5wcmV2ZW50RGVmYXVsdElmTm90SW5wdXRFdmVudChmKX0pKCJmb2N1cyIsZnVuY3Rpb24oKXtyZXR1cm4gZC5mb2N1c2VkPSEwfSkoImJsdXIiLGZ1bmN0aW9uKCl7cmV0dXJuIGQuZm9jdXNlZD0hMX0pLGd0KDEsSWpl'@;
put 'LDEsMSwiY2RzLWljb24iLDEpKDIsUmplLDIsMSwic3BhbiIsMiksZGUoMywiZGl2IiwzKSxZcig0KSxoZSgpLGRlKDUsImRpdiIsNCksWXIoNiwxKSxoZSgpKCksZGUoNywiY2xyLWV4cGFuZGFibGUtYW5pbWF0aW9uIiw1KSxndCg4LExqZSwyLDQsImRpdiIsNiksaGUoKSksMiZhJiYoTWUo'@;
put 'ImlkIixkLnVuaXF1ZUlkKSxocigicm9sZSIsZC5yb2xlKSgidGFiaW5kZXgiLGQudGFiSW5kZXgpKCJhcmlhLWV4cGFuZGVkIixkLmFyaWFFeHBhbmRlZCkoImFyaWEtY29udHJvbHMiLGQuZ2V0U3RhY2tDaGlsZHJlbklkKCkpLGZlKCksTWUoIm5nSWYiLGQuZXhwYW5kYWJsZSksZmUoKSxN'@;
put 'ZSgibmdJZiIsZC5nZXRDaGFuZ2VkVmFsdWUpLGZlKDUpLE1lKCJjbHJFeHBhbmRUcmlnZ2VyIixkLmV4cGFuZGVkKSxmZSgpLE1lKCJuZ0lmIixkLmV4cGFuZGVkKSl9LGRlcGVuZGVuY2llczpbYmEscnMsVkxdLGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpO2Z1bmN0aW9uIEJkZShjKXtjb25z'@;
put 'dCBsPWM/LnRhcmdldDtyZXR1cm4hIWw/LnRhZ05hbWUmJlsiSU5QVVQiLCJURVhUQVJFQSIsIkJVVFRPTiIsIkEiLCJTRUxFQ1QiLCJPUFRJT04iXS5pbmNsdWRlcyhsLnRhZ05hbWUpfWxldCBDRz0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJu'@;
put 'IG5ldyhhfHxjKX0sYy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLXN0YWNrLXZpZXciXV0sbmdDb250ZW50U2VsZWN0b3JzOlBqZSxkZWNsczozLHZhcnM6MCxjb25zdHM6W1sxLCJzdGFjay12aWV3Il1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoc2EoT2pl'@;
put 'KSxZcigwKSxkZSgxLCJkaXYiLDApLFlyKDIsMSksaGUoKSl9LGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpLGFXZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7VHMuYWRkSWNvbnMoRXkpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAy'@;
put 'NzVtb2Q9a2koe3R5cGU6Y30pLGMuXHUwMjc1aW5qPUFyKHtpbXBvcnRzOltSYSxSYyxBcyxTZGVdfSksY30pKCksTzc9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuc2VsZWN0YWJsZT0hMSx0aGlzLmVhZ2VyPSEwLHRoaXMuY2hpbGRyZW5GZXRjaGVkPW5ldyBXbn19cmV0dXJu'@;
put 'IGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCk7Y29uc3QgamRlPXtwcm92aWRlOk83LHVzZUZhY3Rvcnk6ZnVuY3Rpb24gb1dlKGMpe3JldHVybiBjfHxuZXcgTzd9LGRl'@;
put 'cHM6W1tuZXcgSTEsbmV3IGxkLE83XV19O2xldCB6ZGU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQpe3RoaXMuZmVhdHVyZXNTZXJ2aWNlPWEsdGhpcy5leHBhbmRTZXJ2aWNlPWQsZCYmKHRoaXMuc3Vic2NyaXB0aW9uPWQuZXhwYW5kQ2hhbmdlLnN1YnNjcmliZShoPT57IWgmJnRo'@;
put 'aXMucGFyZW50JiYhYS5lYWdlciYmYS5yZWN1cnNpb24mJnRoaXMucGFyZW50LmNsZWFyQ2hpbGRyZW4oKX0pKX1uZ0FmdGVyQ29udGVudEluaXQoKXt0aGlzLnNldEFyaWFSb2xlcygpfXNob3VsZFJlbmRlcigpe3JldHVybiB0aGlzLmZlYXR1cmVzU2VydmljZS5yZWN1cnNpb24mJih0aGlz'@;
put 'LmZlYXR1cmVzU2VydmljZS5lYWdlcnx8IXRoaXMuZXhwYW5kU2VydmljZXx8dGhpcy5leHBhbmRTZXJ2aWNlLmV4cGFuZGVkKX1nZXRDb250ZXh0KGEpe3JldHVybnskaW1wbGljaXQ6YS5tb2RlbCxjbHJNb2RlbDphfX1uZ09uRGVzdHJveSgpe3RoaXMuc3Vic2NyaXB0aW9uJiZ0aGlzLnN1'@;
put 'YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpfXNldEFyaWFSb2xlcygpe3RoaXMucm9sZT10aGlzLnBhcmVudD8iZ3JvdXAiOm51bGx9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKE83KSxHZShVMSw4KSl9LGMuXHUwMjc1Y21wPVZyKHt0eXBlOmMs'@;
put 'c2VsZWN0b3JzOltbImNsci1yZWN1cnNpdmUtY2hpbGRyZW4iXV0saG9zdFZhcnM6MSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJmhyKCJyb2xlIixkLnJvbGUpfSxpbnB1dHM6e3BhcmVudDoicGFyZW50IixjaGlsZHJlbjoiY2hpbGRyZW4ifSxkZWNsczoxLHZhcnM6MSxjb25z'@;
put 'dHM6W1s0LCJuZ0lmIl0sWzQsIm5nRm9yIiwibmdGb3JPZiJdLFs0LCJuZ1RlbXBsYXRlT3V0bGV0IiwibmdUZW1wbGF0ZU91dGxldENvbnRleHQiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJmd0KDAsQmplLDIsMSwibmctY29udGFpbmVyIiwwKSwyJmEmJk1lKCJuZ0lmIixkLnNo'@;
put 'b3VsZFJlbmRlcigpKX0sZGVwZW5kZW5jaWVzOltucyxiYSxOMV0sZW5jYXBzdWxhdGlvbjoyfSksY30pKCk7dmFyICR1PWZ1bmN0aW9uKGMpe3JldHVybiBjW2MuVU5TRUxFQ1RFRD0wXT0iVU5TRUxFQ1RFRCIsY1tjLlNFTEVDVEVEPTFdPSJTRUxFQ1RFRCIsY1tjLklOREVURVJNSU5BVEU9'@;
put 'Ml09IklOREVURVJNSU5BVEUiLGN9KCR1fHx7fSk7Y2xhc3MgVWRle2NvbnN0cnVjdG9yKCl7dGhpcy5sb2FkaW5nJD1uZXcgZWkoITEpLHRoaXMuc2VsZWN0ZWQ9bmV3IGVpKCR1LlVOU0VMRUNURUQpLHRoaXMuX2xvYWRpbmc9ITF9Z2V0IGxvYWRpbmcoKXtyZXR1cm4gdGhpcy5fbG9hZGlu'@;
put 'Z31zZXQgbG9hZGluZyhsKXt0aGlzLl9sb2FkaW5nPWwsdGhpcy5sb2FkaW5nJC5uZXh0KGwpfWdldCBkaXNhYmxlZCgpe3JldHVybiEoIXRoaXMuX2Rpc2FibGVkJiYhdGhpcy5wYXJlbnQ/LmRpc2FibGVkKX1zZXQgZGlzYWJsZWQobCl7dGhpcy5fZGlzYWJsZWQ9bH1kZXN0cm95KCl7dGhp'@;
put 'cy5zZWxlY3RlZC5jb21wbGV0ZSgpfXNldFNlbGVjdGVkKGwsYSxkKXtsIT09dGhpcy5zZWxlY3RlZC52YWx1ZSYmKHRoaXMuc2VsZWN0ZWQubmV4dChsKSxkJiZsIT09JHUuSU5ERVRFUk1JTkFURSYmdGhpcy5jaGlsZHJlbiYmdGhpcy5jaGlsZHJlbi5mb3JFYWNoKGg9PntoLmRpc2FibGVk'@;
put 'fHxoLnNldFNlbGVjdGVkKGwsITEsITApfSksYSYmdGhpcy5wYXJlbnQmJnRoaXMucGFyZW50Ll91cGRhdGVTZWxlY3Rpb25Gcm9tQ2hpbGRyZW4oKSl9dG9nZ2xlU2VsZWN0aW9uKGwpe3RoaXMuZGlzYWJsZWR8fHRoaXMuc2V0U2VsZWN0ZWQodGhpcy5zZWxlY3RlZC52YWx1ZT09PSR1LlNF'@;
put 'TEVDVEVEPyR1LlVOU0VMRUNURUQ6JHUuU0VMRUNURUQsITAsbCl9X3VwZGF0ZVNlbGVjdGlvbkZyb21DaGlsZHJlbigpe2NvbnN0IGw9dGhpcy5jb21wdXRlU2VsZWN0aW9uU3RhdGVGcm9tQ2hpbGRyZW4oKTtsIT09dGhpcy5zZWxlY3RlZC52YWx1ZSYmKHRoaXMuc2VsZWN0ZWQubmV4dChs'@;
put 'KSx0aGlzLnBhcmVudCYmdGhpcy5wYXJlbnQuX3VwZGF0ZVNlbGVjdGlvbkZyb21DaGlsZHJlbigpKX1jb21wdXRlU2VsZWN0aW9uU3RhdGVGcm9tQ2hpbGRyZW4oKXtsZXQgbD0hMSxhPSExO2Zvcihjb25zdCBkIG9mIHRoaXMuY2hpbGRyZW4pc3dpdGNoKGQuc2VsZWN0ZWQudmFsdWUpe2Nh'@;
put 'c2UgJHUuSU5ERVRFUk1JTkFURTppZihkLmRpc2FibGVkKWNvbnRpbnVlO3JldHVybiAkdS5JTkRFVEVSTUlOQVRFO2Nhc2UgJHUuU0VMRUNURUQ6aWYobD0hMCxhKXJldHVybiAkdS5JTkRFVEVSTUlOQVRFO2JyZWFrO2RlZmF1bHQ6aWYoYT0hMCxsKXJldHVybiAkdS5JTkRFVEVSTUlOQVRF'@;
put 'fXJldHVybiBsP2E/JHUuVU5TRUxFQ1RFRDokdS5TRUxFQ1RFRDokdS5VTlNFTEVDVEVEfX1jbGFzcyBkTyBleHRlbmRzIFVkZXtjb25zdHJ1Y3RvcihsLGEsZCxoKXtzdXBlcigpLHRoaXMuZ2V0Q2hpbGRyZW49ZCx0aGlzLmZlYXR1cmVzU2VydmljZT1oLHRoaXMuY2hpbGRyZW5GZXRjaGVk'@;
put 'PSExLHRoaXMuX2NoaWxkcmVuPVtdLHRoaXMubW9kZWw9bCx0aGlzLnBhcmVudD1hfWdldCBjaGlsZHJlbigpe3JldHVybiB0aGlzLmZldGNoQ2hpbGRyZW4oKSx0aGlzLl9jaGlsZHJlbn1zZXQgY2hpbGRyZW4obCl7dGhpcy5fY2hpbGRyZW49bH1kZXN0cm95KCl7dGhpcy5zdWJzY3JpcHRp'@;
put 'b24mJnRoaXMuc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksc3VwZXIuZGVzdHJveSgpfWNsZWFyQ2hpbGRyZW4oKXt0aGlzLl9jaGlsZHJlbi5mb3JFYWNoKGw9PmwuZGVzdHJveSgpKSxkZWxldGUgdGhpcy5fY2hpbGRyZW4sdGhpcy5jaGlsZHJlbkZldGNoZWQ9ITF9ZmV0Y2hDaGlsZHJl'@;
put 'bigpe2lmKHRoaXMuY2hpbGRyZW5GZXRjaGVkKXJldHVybjtjb25zdCBsPXRoaXMuZ2V0Q2hpbGRyZW4odGhpcy5tb2RlbCk7IWZ1bmN0aW9uIHNXZShjKXtyZXR1cm4gYyYmImZ1bmN0aW9uIj09dHlwZW9mIGMudGhlbn0obCk/Qk0obCk/KHRoaXMubG9hZGluZz0hMCx0aGlzLnN1YnNjcmlw'@;
put 'dGlvbj1sLnN1YnNjcmliZShhPT57dGhpcy5fY2hpbGRyZW49dGhpcy53cmFwQ2hpbGRyZW4oYSksdGhpcy5sb2FkaW5nPSExfSkpOnRoaXMuX2NoaWxkcmVuPWw/dGhpcy53cmFwQ2hpbGRyZW4obCk6W106KHRoaXMubG9hZGluZz0hMCxsLnRoZW4oYT0+e3RoaXMuX2NoaWxkcmVuPXRoaXMu'@;
put 'd3JhcENoaWxkcmVuKGEpLHRoaXMubG9hZGluZz0hMX0pKSx0aGlzLmNoaWxkcmVuRmV0Y2hlZD0hMCx0aGlzLmZlYXR1cmVzU2VydmljZSYmdGhpcy5mZWF0dXJlc1NlcnZpY2UuY2hpbGRyZW5GZXRjaGVkLm5leHQoKX13cmFwQ2hpbGRyZW4obCl7cmV0dXJuIGwubWFwKGE9Pm5ldyBkTyhh'@;
put 'LHRoaXMsdGhpcy5nZXRDaGlsZHJlbix0aGlzLmZlYXR1cmVzU2VydmljZSkpfX1sZXQgWmRlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgpe3RoaXMudGVtcGxhdGU9YSx0aGlzLmZlYXR1cmVzU2VydmljZT1kLHRoaXMuY2RyPWh9bmdPbkNoYW5nZXMoKXtsZXQgYTthPUFycmF5'@;
put 'LmlzQXJyYXkodGhpcy5ub2Rlcyk/dGhpcy5ub2Rlcy5tYXAoZD0+bmV3IGRPKGQsbnVsbCx0aGlzLmdldENoaWxkcmVuLHRoaXMuZmVhdHVyZXNTZXJ2aWNlKSk6W25ldyBkTyh0aGlzLm5vZGVzLG51bGwsdGhpcy5nZXRDaGlsZHJlbix0aGlzLmZlYXR1cmVzU2VydmljZSldLHRoaXMuY2hp'@;
put 'bGRyZW5GZXRjaFN1YnNjcmlwdGlvbnx8KHRoaXMuY2hpbGRyZW5GZXRjaFN1YnNjcmlwdGlvbj10aGlzLmZlYXR1cmVzU2VydmljZS5jaGlsZHJlbkZldGNoZWQucGlwZShmbSgwKSkuc3Vic2NyaWJlKCgpPT57dGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpfSkpLHRoaXMuZmVhdHVyZXNTZXJ2'@;
put 'aWNlLnJlY3Vyc2lvbj17dGVtcGxhdGU6dGhpcy50ZW1wbGF0ZSxyb290OmF9fW5nT25EZXN0cm95KCl7dGhpcy5jaGlsZHJlbkZldGNoU3Vic2NyaXB0aW9uJiZ0aGlzLmNoaWxkcmVuRmV0Y2hTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9u'@;
put 'KGEpe3JldHVybiBuZXcoYXx8YykoR2UoU2wpLEdlKE83KSxHZShFcykpfSxjLlx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJjbHJSZWN1cnNpdmVGb3IiLCIiLCJjbHJSZWN1cnNpdmVGb3JPZiIsIiJdXSxpbnB1dHM6e25vZGVzOltObi5Ob25lLCJjbHJSZWN1cnNpdmVG'@;
put 'b3JPZiIsIm5vZGVzIl0sZ2V0Q2hpbGRyZW46W05uLk5vbmUsImNsclJlY3Vyc2l2ZUZvckdldENoaWxkcmVuIiwiZ2V0Q2hpbGRyZW4iXX0sZmVhdHVyZXM6W3dsXX0pLGN9KSgpLFNHPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLl9mb2N1c1JlcXVlc3Q9bmV3IFduLHRoaXMu'@;
put 'X2ZvY3VzQ2hhbmdlPW5ldyBXbn1nZXQgZm9jdXNSZXF1ZXN0KCl7cmV0dXJuIHRoaXMuX2ZvY3VzUmVxdWVzdC5hc09ic2VydmFibGUoKX1nZXQgZm9jdXNDaGFuZ2UoKXtyZXR1cm4gdGhpcy5fZm9jdXNDaGFuZ2UuYXNPYnNlcnZhYmxlKCl9Zm9jdXNOb2RlKGEpe2EmJnRoaXMuX2ZvY3Vz'@;
put 'UmVxdWVzdC5uZXh0KGEubm9kZUlkKX1icm9hZGNhc3RGb2N1c2VkTm9kZShhKXt0aGlzLmZvY3VzZWROb2RlSWQhPT1hJiYodGhpcy5mb2N1c2VkTm9kZUlkPWEsdGhpcy5fZm9jdXNDaGFuZ2UubmV4dChhKSl9Zm9jdXNQYXJlbnQoYSl7YSYmdGhpcy5mb2N1c05vZGUoYS5wYXJlbnQpfWZv'@;
put 'Y3VzRmlyc3RWaXNpYmxlTm9kZSgpe3RoaXMuZm9jdXNOb2RlKHRoaXMucm9vdE5vZGVNb2RlbHMmJnRoaXMucm9vdE5vZGVNb2RlbHNbMF0pfWZvY3VzTGFzdFZpc2libGVOb2RlKCl7dGhpcy5mb2N1c05vZGUodGhpcy5maW5kTGFzdFZpc2libGVJblRyZWUoKSl9Zm9jdXNOb2RlQWJvdmUo'@;
put 'YSl7dGhpcy5mb2N1c05vZGUodGhpcy5maW5kTm9kZUFib3ZlKGEpKX1mb2N1c05vZGVCZWxvdyhhKXt0aGlzLmZvY3VzTm9kZSh0aGlzLmZpbmROb2RlQmVsb3coYSkpfWZvY3VzTm9kZVN0YXJ0c1dpdGgoYSxkKXt0aGlzLmZvY3VzTm9kZSh0aGlzLmZpbmRDbG9zZXN0Tm9kZVN0YXJ0c1dp'@;
put 'dGgoYSxkKSl9ZmluZFNpYmxpbmdzKGEpe3JldHVybiBhLnBhcmVudD9hLnBhcmVudC5jaGlsZHJlbjp0aGlzLnJvb3ROb2RlTW9kZWxzfWZpbmRMYXN0VmlzaWJsZUluTm9kZShhKXtpZighYSlyZXR1cm4gbnVsbDtpZihhLmV4cGFuZGVkJiZhLmNoaWxkcmVuLmxlbmd0aD4wKXtjb25zdCBk'@;
put 'PWEuY2hpbGRyZW47cmV0dXJuIHRoaXMuZmluZExhc3RWaXNpYmxlSW5Ob2RlKGRbZC5sZW5ndGgtMV0pfXJldHVybiBhfWZpbmROZXh0Rm9jdXNhYmxlKGEpe2lmKCFhKXJldHVybiBudWxsO2NvbnN0IGQ9dGhpcy5maW5kU2libGluZ3MoYSksaD1kLmluZGV4T2YoYSk7cmV0dXJuIGg8ZC5s'@;
put 'ZW5ndGgtMT9kW2grMV06aD09PWQubGVuZ3RoLTE/dGhpcy5maW5kTmV4dEZvY3VzYWJsZShhLnBhcmVudCk6bnVsbH1maW5kTGFzdFZpc2libGVJblRyZWUoKXtyZXR1cm4gdGhpcy5maW5kTGFzdFZpc2libGVJbk5vZGUodGhpcy5yb290Tm9kZU1vZGVscyYmdGhpcy5yb290Tm9kZU1vZGVs'@;
put 'cy5sZW5ndGgmJnRoaXMucm9vdE5vZGVNb2RlbHNbdGhpcy5yb290Tm9kZU1vZGVscy5sZW5ndGgtMV0pfWZpbmROb2RlQWJvdmUoYSl7aWYoIWEpcmV0dXJuIG51bGw7Y29uc3QgZD10aGlzLmZpbmRTaWJsaW5ncyhhKSxoPWQuaW5kZXhPZihhKTtyZXR1cm4gMD09PWg/YS5wYXJlbnQ6aD4w'@;
put 'P3RoaXMuZmluZExhc3RWaXNpYmxlSW5Ob2RlKGRbaC0xXSk6bnVsbH1maW5kTm9kZUJlbG93KGEpe3JldHVybiBhP2EuZXhwYW5kZWQmJmEuY2hpbGRyZW4ubGVuZ3RoPjA/YS5jaGlsZHJlblswXTp0aGlzLmZpbmROZXh0Rm9jdXNhYmxlKGEpOm51bGx9ZmluZERlc2NlbmRlbnROb2RlU3Rh'@;
put 'cnRzV2l0aChhLGQpe2lmKGQuZXhwYW5kZWQmJmQuY2hpbGRyZW4ubGVuZ3RoPjApZm9yKGNvbnN0IGggb2YgZC5jaGlsZHJlbil7Y29uc3QgZj10aGlzLmZpbmROb2RlU3RhcnRzV2l0aChhLGgpO2lmKGYpcmV0dXJuIGZ9cmV0dXJuIG51bGx9ZmluZFNpYmxpbmdOb2RlU3RhcnRzV2l0aChh'@;
put 'LGQpe2NvbnN0IGg9dGhpcy5maW5kU2libGluZ3MoZCk7Zm9yKGxldCB2PWguaW5kZXhPZihkKSsxO3Y8aC5sZW5ndGg7disrKXtjb25zdCBEPXRoaXMuZmluZE5vZGVTdGFydHNXaXRoKGEsaFt2XSk7aWYoRClyZXR1cm4gRH1yZXR1cm4gbnVsbH1maW5kUm9vdE5vZGVTdGFydHNXaXRoKGEs'@;
put 'ZCl7Zm9yKGNvbnN0IGggb2YgdGhpcy5yb290Tm9kZU1vZGVscyl7aWYoZC5wYXJlbnQmJmQucGFyZW50PT09aCljb250aW51ZTtjb25zdCBmPXRoaXMuZmluZE5vZGVTdGFydHNXaXRoKGEsaCk7aWYoZilyZXR1cm4gZn1yZXR1cm4gbnVsbH1maW5kTm9kZVN0YXJ0c1dpdGgoYSxkKXtyZXR1'@;
put 'cm4gZD9kLnRleHRDb250ZW50LnN0YXJ0c1dpdGgoYSk/ZDp0aGlzLmZpbmREZXNjZW5kZW50Tm9kZVN0YXJ0c1dpdGgoYSxkKTpudWxsfWZpbmRDbG9zZXN0Tm9kZVN0YXJ0c1dpdGgoYSxkKXtpZighZClyZXR1cm4gbnVsbDtjb25zdCBoPXRoaXMuZmluZERlc2NlbmRlbnROb2RlU3RhcnRz'@;
put 'V2l0aChhLGQpO2lmKGgpcmV0dXJuIGg7Y29uc3QgZj10aGlzLmZpbmRTaWJsaW5nTm9kZVN0YXJ0c1dpdGgoYSxkKTtyZXR1cm4gZnx8KHRoaXMuZmluZFJvb3ROb2RlU3RhcnRzV2l0aChhLGQpfHx0aGlzLmZpbmROb2RlU3RhcnRzV2l0aChhLGQucGFyZW50KSl9fXJldHVybiBjLlx1MDI3'@;
put 'NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpO2NsYXNzIGxXZSBleHRlbmRzIFVkZXtjb25zdHJ1Y3RvcihsKXtzdXBlcigpLHRoaXMucGFyZW50PWwsbCYmbC5fYWRkQ2hpbGQodGhp'@;
put 'cyksdGhpcy5jaGlsZHJlbj1bXX1kZXN0cm95KCl7dGhpcy5wYXJlbnQmJnRoaXMucGFyZW50Ll9yZW1vdmVDaGlsZCh0aGlzKSxzdXBlci5kZXN0cm95KCl9X2FkZENoaWxkKGwpe3RoaXMuY2hpbGRyZW4ucHVzaChsKX1fcmVtb3ZlQ2hpbGQobCl7Y29uc3QgYT10aGlzLmNoaWxkcmVuLmlu'@;
put 'ZGV4T2YobCk7YT4tMSYmdGhpcy5jaGlsZHJlbi5zcGxpY2UoYSwxKX19bGV0IGZnPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5lbD1hfWdldCBhY3RpdmUoKXtyZXR1cm4gdGhpcy5lbC5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5jb250YWlucygiYWN0aXZlIil9YWN0aXZh'@;
put 'dGUoKXt0aGlzLmVsLm5hdGl2ZUVsZW1lbnQmJnRoaXMuZWwubmF0aXZlRWxlbWVudC5jbGljayYmdGhpcy5lbC5uYXRpdmVFbGVtZW50LmNsaWNrKCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKEppKSl9LGMuXHUwMjc1ZGlyPUVyKHt0eXBl'@;
put 'OmMsc2VsZWN0b3JzOltbIiIsOCwiY2xyLXRyZWVub2RlLWxpbmsiXV19KSxjfSkoKSxQZD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYsdixNLEQsWil7dGhpcy5wbGF0Zm9ybUlkPWEsdGhpcy5mZWF0dXJlc1NlcnZpY2U9aCx0aGlzLmV4cGFuZFNlcnZpY2U9Zix0aGlzLmNv'@;
put 'bW1vblN0cmluZ3M9dix0aGlzLmZvY3VzTWFuYWdlcj1NLHRoaXMuZWxlbWVudFJlZj1ELHRoaXMuc2VsZWN0ZWRDaGFuZ2U9bmV3IEtyKCExKSx0aGlzLmV4cGFuZGVkQ2hhbmdlPW5ldyBLcix0aGlzLlNUQVRFUz0kdSx0aGlzLmlzTW9kZWxMb2FkaW5nPSExLHRoaXMubm9kZUlkPU11KCks'@;
put 'dGhpcy5jb250ZW50Q29udGFpbmVyVGFiaW5kZXg9LTEsdGhpcy5za2lwRW1pdENoYW5nZT0hMSx0aGlzLnR5cGVBaGVhZEtleUJ1ZmZlcj0iIix0aGlzLnR5cGVBaGVhZEtleUV2ZW50PW5ldyBXbix0aGlzLnN1YnNjcmlwdGlvbnM9W10sdGhpcy5fbW9kZWw9aC5yZWN1cnNpb24/Wi52aWV3'@;
put 'P1oudmlldy5jb250ZXh0LmNsck1vZGVsOlouX2xWaWV3WzhdLmNsck1vZGVsOm5ldyBsV2UoZD9kLl9tb2RlbDpudWxsKSx0aGlzLl9tb2RlbC5ub2RlSWQ9dGhpcy5ub2RlSWR9Z2V0IGRpc2FibGVkKCl7cmV0dXJuIHRoaXMuX21vZGVsLmRpc2FibGVkfXNldCBkaXNhYmxlZChhKXt0aGlz'@;
put 'Ll9tb2RlbC5kaXNhYmxlZD1hfWdldCBzZWxlY3RlZCgpe3JldHVybiB0aGlzLl9tb2RlbC5zZWxlY3RlZC52YWx1ZX1zZXQgc2VsZWN0ZWQoYSl7dGhpcy5mZWF0dXJlc1NlcnZpY2Uuc2VsZWN0YWJsZT0hMCwobnVsbD09PWF8fHR5cGVvZiBhPiJ1IikmJihhPSR1LlVOU0VMRUNURUQpLCJi'@;
put 'b29sZWFuIj09dHlwZW9mIGEmJihhPWE/JHUuU0VMRUNURUQ6JHUuVU5TRUxFQ1RFRCksdGhpcy5za2lwRW1pdENoYW5nZT0hMCx0aGlzLl9tb2RlbC5zZXRTZWxlY3RlZChhLHRoaXMuZmVhdHVyZXNTZXJ2aWNlLmVhZ2VyLHRoaXMuZmVhdHVyZXNTZXJ2aWNlLmVhZ2VyKSx0aGlzLnNraXBF'@;
put 'bWl0Q2hhbmdlPSExfWdldCBleHBhbmRlZCgpe3JldHVybiB0aGlzLmV4cGFuZFNlcnZpY2UuZXhwYW5kZWR9c2V0IGV4cGFuZGVkKGEpe3RoaXMuZXhwYW5kU2VydmljZS5leHBhbmRlZD1hfXNldCBjbHJGb3JUeXBlQWhlYWQoYSl7dGhpcy5fbW9kZWwudGV4dENvbnRlbnQ9V2RlKGF8fHRo'@;
put 'aXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnRleHRDb250ZW50KX1nZXQgYXJpYVNlbGVjdGVkKCl7cmV0dXJuIHRoaXMuaXNTZWxlY3RhYmxlKCk/dGhpcy5fbW9kZWwuc2VsZWN0ZWQudmFsdWU9PT0kdS5TRUxFQ1RFRDohIXRoaXMudHJlZU5vZGVMaW5rPy5hY3RpdmV8fG51bGx9Z2V0'@;
put 'IHRyZWVOb2RlTGluaygpe3JldHVybiB0aGlzLnRyZWVOb2RlTGlua0xpc3QmJnRoaXMudHJlZU5vZGVMaW5rTGlzdC5maXJzdH1nZXQgaXNQYXJlbnQoKXtyZXR1cm4gdGhpcy5fbW9kZWwuY2hpbGRyZW4mJnRoaXMuX21vZGVsLmNoaWxkcmVuLmxlbmd0aD4wfW5nT25Jbml0KCl7dGhpcy5f'@;
put 'bW9kZWwuZXhwYW5kZWQ9dGhpcy5leHBhbmRlZCx0aGlzLl9tb2RlbC5kaXNhYmxlZD10aGlzLmRpc2FibGVkLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMuX21vZGVsLnNlbGVjdGVkLnBpcGUoJGwoKCk9PiF0aGlzLnNraXBFbWl0Q2hhbmdlKSkuc3Vic2NyaWJlKGE9Pnt0aGlzLnNl'@;
put 'bGVjdGVkQ2hhbmdlLmVtaXQoYSl9KSksdGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5leHBhbmRTZXJ2aWNlLmV4cGFuZENoYW5nZS5zdWJzY3JpYmUoYT0+e3RoaXMuZXhwYW5kZWRDaGFuZ2UuZW1pdChhKSx0aGlzLl9tb2RlbC5leHBhbmRlZD1hfSkpLHRoaXMuc3Vic2NyaXB0aW9u'@;
put 'cy5wdXNoKHRoaXMuZm9jdXNNYW5hZ2VyLmZvY3VzUmVxdWVzdC5zdWJzY3JpYmUoYT0+e3RoaXMubm9kZUlkPT09YSYmdGhpcy5mb2N1c1RyZWVOb2RlKCl9KSx0aGlzLmZvY3VzTWFuYWdlci5mb2N1c0NoYW5nZS5zdWJzY3JpYmUoYT0+e3RoaXMuY2hlY2tUYWJJbmRleChhKX0pKSx0aGlz'@;
put 'LnN1YnNjcmlwdGlvbnMucHVzaCh0aGlzLl9tb2RlbC5sb2FkaW5nJC5waXBlKGZtKDApKS5zdWJzY3JpYmUoYT0+dGhpcy5pc01vZGVsTG9hZGluZz1hKSl9bmdBZnRlckNvbnRlbnRJbml0KCl7dGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy50eXBlQWhlYWRLZXlFdmVudC5waXBlKGZt'@;
put 'KDIwMCkpLnN1YnNjcmliZShhPT57dGhpcy5mb2N1c01hbmFnZXIuZm9jdXNOb2RlU3RhcnRzV2l0aChhLHRoaXMuX21vZGVsKSx0aGlzLnR5cGVBaGVhZEtleUJ1ZmZlcj0iIn0pKX1uZ0FmdGVyVmlld0luaXQoKXt0aGlzLl9tb2RlbC50ZXh0Q29udGVudHx8KHRoaXMuX21vZGVsLnRleHRD'@;
put 'b250ZW50PVdkZSh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC50ZXh0Q29udGVudCkpfW5nT25EZXN0cm95KCl7dGhpcy5fbW9kZWwuZGVzdHJveSgpLHRoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKGE9PmEudW5zdWJzY3JpYmUoKSl9aXNFeHBhbmRhYmxlKCl7cmV0dXJuIHR5cGVv'@;
put 'ZiB0aGlzLmV4cGFuZGFibGU8InUiP3RoaXMuZXhwYW5kYWJsZTohIXRoaXMuZXhwYW5kU2VydmljZS5leHBhbmRhYmxlfHx0aGlzLmlzUGFyZW50fWlzU2VsZWN0YWJsZSgpe3JldHVybiB0aGlzLmZlYXR1cmVzU2VydmljZS5zZWxlY3RhYmxlfWZvY3VzVHJlZU5vZGUoKXtjb25zdCBhPXRo'@;
put 'aXMuY29udGVudENvbnRhaW5lci5uYXRpdmVFbGVtZW50O3RsKHRoaXMucGxhdGZvcm1JZCkmJmRvY3VtZW50LmFjdGl2ZUVsZW1lbnQhPT1hJiYodGhpcy5zZXRUYWJJbmRleCgwKSxhLmZvY3VzKCksYS5zY3JvbGxJbnRvVmlldyh7YmxvY2s6Im5lYXJlc3QiLGlubGluZToibmVhcmVzdCJ9'@;
put 'KSl9YnJvYWRjYXN0Rm9jdXNPbkNvbnRhaW5lcigpe3RoaXMuZm9jdXNNYW5hZ2VyLmJyb2FkY2FzdEZvY3VzZWROb2RlKHRoaXMubm9kZUlkKX1vbktleURvd24oYSl7c3dpdGNoKFJZKGEpLEkyKGEua2V5KSl7Y2FzZSBnYS5BcnJvd1VwOnRoaXMuZm9jdXNNYW5hZ2VyLmZvY3VzTm9kZUFi'@;
put 'b3ZlKHRoaXMuX21vZGVsKTticmVhaztjYXNlIGdhLkFycm93RG93bjp0aGlzLmZvY3VzTWFuYWdlci5mb2N1c05vZGVCZWxvdyh0aGlzLl9tb2RlbCk7YnJlYWs7Y2FzZSBnYS5BcnJvd1JpZ2h0OnRoaXMuZXhwYW5kT3JGb2N1c0ZpcnN0Q2hpbGQoKTticmVhaztjYXNlIGdhLkFycm93TGVm'@;
put 'dDp0aGlzLmNvbGxhcHNlT3JGb2N1c1BhcmVudCgpO2JyZWFrO2Nhc2UgZ2EuSG9tZTphLnByZXZlbnREZWZhdWx0KCksdGhpcy5mb2N1c01hbmFnZXIuZm9jdXNGaXJzdFZpc2libGVOb2RlKCk7YnJlYWs7Y2FzZSBnYS5FbmQ6YS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuZm9jdXNNYW5hZ2Vy'@;
put 'LmZvY3VzTGFzdFZpc2libGVOb2RlKCk7YnJlYWs7Y2FzZSBnYS5FbnRlcjp0aGlzLnRvZ2dsZUV4cGFuZE9yVHJpZ2dlckRlZmF1bHQoKTticmVhaztjYXNlIGdhLlNwYWNlOmNhc2UgZ2EuU3BhY2ViYXI6YS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMudG9nZ2xlRXhwYW5kT3JUcmlnZ2VyRGVm'@;
put 'YXVsdCgpO2JyZWFrO2RlZmF1bHQ6aWYodGhpcy5fbW9kZWwudGV4dENvbnRlbnQmJmZ1bmN0aW9uIHF6ZShjKXtjb25zdCBsPWMua2V5O3JldHVybiBsLnRvTG93ZXJDYXNlKCkhPT1sLnRvVXBwZXJDYXNlKCl8fGw+PSIwIiYmbDw9IjkifShhKSlyZXR1cm4gdGhpcy50eXBlQWhlYWRLZXlC'@;
put 'dWZmZXIrPWEua2V5LHZvaWQgdGhpcy50eXBlQWhlYWRLZXlFdmVudC5uZXh0KHRoaXMudHlwZUFoZWFkS2V5QnVmZmVyKX10aGlzLnR5cGVBaGVhZEtleUJ1ZmZlcj0iIn1zZXRUYWJJbmRleChhKXt0aGlzLmNvbnRlbnRDb250YWluZXJUYWJpbmRleD1hLHRoaXMuY29udGVudENvbnRhaW5l'@;
put 'ci5uYXRpdmVFbGVtZW50LnNldEF0dHJpYnV0ZSgidGFiaW5kZXgiLGEudG9TdHJpbmcoKSl9Y2hlY2tUYWJJbmRleChhKXt0bCh0aGlzLnBsYXRmb3JtSWQpJiZ0aGlzLm5vZGVJZCE9PWEmJi0xIT09dGhpcy5jb250ZW50Q29udGFpbmVyVGFiaW5kZXgmJnRoaXMuc2V0VGFiSW5kZXgoLTEp'@;
put 'fXRvZ2dsZUV4cGFuZE9yVHJpZ2dlckRlZmF1bHQoKXt0aGlzLmRpc2FibGVkfHwodGhpcy5pc0V4cGFuZGFibGUoKSYmIXRoaXMuaXNTZWxlY3RhYmxlKCk/dGhpcy5leHBhbmRTZXJ2aWNlLmV4cGFuZGVkPSF0aGlzLmV4cGFuZGVkOnRoaXMudHJpZ2dlckRlZmF1bHRBY3Rpb24oKSl9ZXhw'@;
put 'YW5kT3JGb2N1c0ZpcnN0Q2hpbGQoKXt0aGlzLmRpc2FibGVkfHwodGhpcy5leHBhbmRlZD90aGlzLmlzUGFyZW50JiZ0aGlzLmZvY3VzTWFuYWdlci5mb2N1c05vZGVCZWxvdyh0aGlzLl9tb2RlbCk6dGhpcy5pc0V4cGFuZGFibGUoKSYmKHRoaXMuZXhwYW5kU2VydmljZS5leHBhbmRlZD0h'@;
put 'MCkpfWNvbGxhcHNlT3JGb2N1c1BhcmVudCgpe3RoaXMuZGlzYWJsZWR8fCh0aGlzLmV4cGFuZGVkP3RoaXMuZXhwYW5kU2VydmljZS5leHBhbmRlZD0hMTp0aGlzLmZvY3VzTWFuYWdlci5mb2N1c1BhcmVudCh0aGlzLl9tb2RlbCkpfXRyaWdnZXJEZWZhdWx0QWN0aW9uKCl7dGhpcy50cmVl'@;
put 'Tm9kZUxpbms/dGhpcy50cmVlTm9kZUxpbmsuYWN0aXZhdGUoKTp0aGlzLmlzU2VsZWN0YWJsZSgpJiZ0aGlzLl9tb2RlbC50b2dnbGVTZWxlY3Rpb24odGhpcy5mZWF0dXJlc1NlcnZpY2UuZWFnZXIpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShH'@;
put 'ZShpbyksR2UoYywxMiksR2UoTzcpLEdlKFUxKSxHZShpcyksR2UoU0cpLEdlKEppKSxHZShEcykpfSxjLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItdHJlZS1ub2RlIl1dLGNvbnRlbnRRdWVyaWVzOmZ1bmN0aW9uKGEsZCxoKXtpZigxJmEmJmFvKGgsZmcsNCksMiZh'@;
put 'KXtsZXQgZjtDaShmPVNpKCkpJiYoZC50cmVlTm9kZUxpbmtMaXN0PWYpfX0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGEsZCl7aWYoMSZhJiZxYShqamUsNyxKaSksMiZhKXtsZXQgaDtDaShoPVNpKCkpJiYoZC5jb250ZW50Q29udGFpbmVyPWguZmlyc3QpfX0saG9zdFZhcnM6NCxob3N0QmluZGlu'@;
put 'Z3M6ZnVuY3Rpb24oYSxkKXsyJmEmJlRyKCJjbHItdHJlZS1ub2RlIiwhMCkoImRpc2FibGVkIixkLl9tb2RlbC5kaXNhYmxlZCl9LGlucHV0czp7ZXhwYW5kYWJsZTpbTm4uTm9uZSwiY2xyRXhwYW5kYWJsZSIsImV4cGFuZGFibGUiXSxkaXNhYmxlZDpbTm4uTm9uZSwiY2xyRGlzYWJsZWQi'@;
put 'LCJkaXNhYmxlZCJdLHNlbGVjdGVkOltObi5Ob25lLCJjbHJTZWxlY3RlZCIsInNlbGVjdGVkIl0sZXhwYW5kZWQ6W05uLk5vbmUsImNsckV4cGFuZGVkIiwiZXhwYW5kZWQiXSxjbHJGb3JUeXBlQWhlYWQ6ImNsckZvclR5cGVBaGVhZCJ9LG91dHB1dHM6e3NlbGVjdGVkQ2hhbmdlOiJjbHJT'@;
put 'ZWxlY3RlZENoYW5nZSIsZXhwYW5kZWRDaGFuZ2U6ImNsckV4cGFuZGVkQ2hhbmdlIn0sZmVhdHVyZXM6W2RhKFtqZGUsVTEse3Byb3ZpZGU6RHgsdXNlRXhpc3Rpbmc6VTF9XSldLG5nQ29udGVudFNlbGVjdG9yczpVamUsZGVjbHM6MTIsdmFyczoxMixjb25zdHM6W1siY29udGVudENvbnRh'@;
put 'aW5lciIsIiJdLFsidHJlZW5vZGVDb250ZW50IiwiIl0sWyJyb2xlIiwidHJlZWl0ZW0iLCJ0YWJpbmRleCIsIi0xIiwxLCJjbHItdHJlZS1ub2RlLWNvbnRlbnQtY29udGFpbmVyIiwzLCJrZXlkb3duIiwiZm9jdXMiXSxbImFyaWEtaGlkZGVuIiwidHJ1ZSIsInR5cGUiLCJidXR0b24iLCJ0'@;
put 'YWJpbmRleCIsIi0xIiwiY2xhc3MiLCJjbHItdHJlZW5vZGUtY2FyZXQiLDMsImRpc2FibGVkIiwiY2xpY2siLCJmb2N1cyIsNCwibmdJZiJdLFsiY2xhc3MiLCJjbHItdHJlZW5vZGUtc3Bpbm5lci1jb250YWluZXIiLDQsIm5nSWYiXSxbImNsYXNzIiwiY2xyLWNoZWNrYm94LXdyYXBwZXIg'@;
put 'Y2xyLXRyZWVub2RlLWNoZWNrYm94Iiw0LCJuZ0lmIl0sWyJjbGFzcyIsImNsci10cmVlbm9kZS1jb250ZW50IiwzLCJtb3VzZXVwIiw0LCJuZ0lmIl0sWzEsImNsci10cmVlbm9kZS1jaGlsZHJlbiJdLFszLCJwYXJlbnQiXSxbImFyaWEtaGlkZGVuIiwidHJ1ZSIsInR5cGUiLCJidXR0b24i'@;
put 'LCJ0YWJpbmRleCIsIi0xIiwxLCJjbHItdHJlZW5vZGUtY2FyZXQiLDMsImNsaWNrIiwiZm9jdXMiLCJkaXNhYmxlZCJdLFsic2hhcGUiLCJhbmdsZSIsMSwiY2xyLXRyZWVub2RlLWNhcmV0LWljb24iXSxbMSwiY2xyLXRyZWVub2RlLXNwaW5uZXItY29udGFpbmVyIl0sWzEsImNsci10cmVl'@;
put 'bm9kZS1zcGlubmVyIiwic3Bpbm5lciJdLFsxLCJjbHItY2hlY2tib3gtd3JhcHBlciIsImNsci10cmVlbm9kZS1jaGVja2JveCJdLFsiYXJpYS1oaWRkZW4iLCJ0cnVlIiwidHlwZSIsImNoZWNrYm94IiwidGFiaW5kZXgiLCItMSIsMSwiY2xyLWNoZWNrYm94IiwzLCJjaGFuZ2UiLCJmb2N1'@;
put 'cyIsImlkIiwiZGlzYWJsZWQiLCJjaGVja2VkIiwiaW5kZXRlcm1pbmF0ZSJdLFsxLCJjbHItY29udHJvbC1sYWJlbCIsMywiZm9yIl0sWzMsIm5nVGVtcGxhdGVPdXRsZXQiXSxbMSwiY2xyLXRyZWVub2RlLWNvbnRlbnQiLDMsIm1vdXNldXAiXSxbImNsYXNzIiwiY2xyLXNyLW9ubHkiLDQs'@;
put 'Im5nSWYiXSxbMSwiY2xyLXNyLW9ubHkiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXtpZigxJmEpe2NvbnN0IGg9TG4oKTtzYSh6amUpLGRlKDAsImRpdiIsMiwwKSxGdCgia2V5ZG93biIsZnVuY3Rpb24odil7cmV0dXJuIHd0KGgpLEN0KGQub25LZXlEb3duKHYpKX0pKCJmb2N1cyIsZnVu'@;
put 'Y3Rpb24oKXtyZXR1cm4gd3QoaCksQ3QoZC5icm9hZGNhc3RGb2N1c09uQ29udGFpbmVyKCkpfSksZ3QoMixaamUsMiwyLCJidXR0b24iLDMpKDMsV2plLDIsMCwiZGl2Iiw0KSg0LFlqZSw0LDYsImRpdiIsNSkoNSxHamUsMiwxLCJkaXYiLDYpKDYsS2plLDIsMSwibmctdGVtcGxhdGUiLG51'@;
put 'bGwsMSxJYyksaGUoKSxkZSg4LCJkaXYiLDcpLFlyKDkpLFlyKDEwLDEpLEd0KDExLCJjbHItcmVjdXJzaXZlLWNoaWxkcmVuIiw4KSxoZSgpfTImYSYmKFRyKCJjbHItZm9ybS1jb250cm9sLWRpc2FibGVkIixkLmRpc2FibGVkKSxocigiYXJpYS1kaXNhYmxlZCIsZC5kaXNhYmxlZCkoImFy'@;
put 'aWEtZXhwYW5kZWQiLGQuaXNFeHBhbmRhYmxlKCk/ZC5leHBhbmRlZDpudWxsKSgiYXJpYS1zZWxlY3RlZCIsZC5hcmlhU2VsZWN0ZWQpLGZlKDIpLE1lKCJuZ0lmIixkLmlzRXhwYW5kYWJsZSgpJiYhZC5pc01vZGVsTG9hZGluZyYmIWQuZXhwYW5kU2VydmljZS5sb2FkaW5nKSxmZSgpLE1l'@;
put 'KCJuZ0lmIixkLmV4cGFuZFNlcnZpY2UubG9hZGluZ3x8ZC5pc01vZGVsTG9hZGluZyksZmUoKSxNZSgibmdJZiIsZC5mZWF0dXJlc1NlcnZpY2Uuc2VsZWN0YWJsZSksZmUoKSxNZSgibmdJZiIsIWQuZmVhdHVyZXNTZXJ2aWNlLnNlbGVjdGFibGUpLGZlKDMpLE1lKCJAdG9nZ2xlQ2hpbGRy'@;
put 'ZW5BbmltIixkLmV4cGFuZFNlcnZpY2UuZXhwYW5kZWQ/ImV4cGFuZGVkIjoiY29sbGFwc2VkIiksaHIoInJvbGUiLGQuaXNFeHBhbmRhYmxlKCkmJiFkLmZlYXR1cmVzU2VydmljZS5yZWN1cnNpb24/Imdyb3VwIjpudWxsKSxmZSgzKSxNZSgicGFyZW50IixkLl9tb2RlbCkpfSxkZXBlbmRl'@;
put 'bmNpZXM6W2JhLE4xLHJzLHpkZV0sZW5jYXBzdWxhdGlvbjoyLGRhdGE6e2FuaW1hdGlvbjpbeWgoInRvZ2dsZUNoaWxkcmVuQW5pbSIsW2l1KCJjb2xsYXBzZWQgPT4gZXhwYW5kZWQiLFt1cyh7aGVpZ2h0OjB9KSxNMCgyMDAsdXMoe2hlaWdodDoiKiJ9KSldKSxpdSgiZXhwYW5kZWQgPT4g'@;
put 'Y29sbGFwc2VkIixbdXMoe2hlaWdodDoiKiJ9KSxNMCgyMDAsdXMoe2hlaWdodDowfSkpXSksU0woImV4cGFuZGVkIix1cyh7aGVpZ2h0OiIqIiwib3ZlcmZsb3cteSI6InZpc2libGUifSkpLFNMKCJjb2xsYXBzZWQiLHVzKHtoZWlnaHQ6MH0pKV0pXX19KSxjfSkoKTtmdW5jdGlvbiBXZGUo'@;
put 'Yyl7cmV0dXJuIGMudG9Mb2NhbGVMb3dlckNhc2UoKS50cmltKCl9bGV0IEVoPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZix2KXt0aGlzLmZlYXR1cmVzU2VydmljZT1hLHRoaXMuZm9jdXNNYW5hZ2VyU2VydmljZT1kLHRoaXMucmVuZGVyZXI9aCx0aGlzLmVsPWYsdGhpcy5z'@;
put 'dWJzY3JpcHRpb25zPVtdLHRoaXMuX2lzTXVsdGlTZWxlY3RhYmxlPSExO2NvbnN0IE09di5ydW5PdXRzaWRlQW5ndWxhcigoKT0+eGQoZi5uYXRpdmVFbGVtZW50LCJmb2N1c2luIikuc3Vic2NyaWJlKEQ9PntELnRhcmdldD09PWYubmF0aXZlRWxlbWVudCYmKGQuZm9jdXNGaXJzdFZpc2li'@;
put 'bGVOb2RlKCksaC5yZW1vdmVBdHRyaWJ1dGUoZi5uYXRpdmVFbGVtZW50LCJ0YWJpbmRleCIpKX0pKTt0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChNKX1zZXQgbGF6eShhKXt0aGlzLmZlYXR1cmVzU2VydmljZS5lYWdlcj0hYX1nZXQgaXNNdWx0aVNlbGVjdGFibGUoKXtyZXR1cm4gdGhpcy5f'@;
put 'aXNNdWx0aVNlbGVjdGFibGV9bmdBZnRlckNvbnRlbnRJbml0KCl7dGhpcy5zZXRSb290Tm9kZXMoKSx0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCh0aGlzLnJvb3ROb2Rlcy5jaGFuZ2VzLnN1YnNjcmliZSgoKT0+e3RoaXMuc2V0TXVsdGlTZWxlY3RhYmxlKCksdGhpcy5zZXRSb290Tm9kZXMo'@;
put 'KX0pKX1uZ09uRGVzdHJveSgpe3RoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKGE9PmEudW5zdWJzY3JpYmUoKSl9c2V0TXVsdGlTZWxlY3RhYmxlKCl7dGhpcy5mZWF0dXJlc1NlcnZpY2Uuc2VsZWN0YWJsZSYmdGhpcy5yb290Tm9kZXMubGVuZ3RoPjA/KHRoaXMuX2lzTXVsdGlTZWxlY3Rh'@;
put 'YmxlPSEwLHRoaXMucmVuZGVyZXIuc2V0QXR0cmlidXRlKHRoaXMuZWwubmF0aXZlRWxlbWVudCwiYXJpYS1tdWx0aXNlbGVjdGFibGUiLCJ0cnVlIikpOih0aGlzLl9pc011bHRpU2VsZWN0YWJsZT0hMSx0aGlzLnJlbmRlcmVyLnJlbW92ZUF0dHJpYnV0ZSh0aGlzLmVsLm5hdGl2ZUVsZW1l'@;
put 'bnQsImFyaWEtbXVsdGlzZWxlY3RhYmxlIikpfXNldFJvb3ROb2Rlcygpe3RoaXMuZm9jdXNNYW5hZ2VyU2VydmljZS5yb290Tm9kZU1vZGVscz10aGlzLnJvb3ROb2Rlcy5tYXAoYT0+YS5fbW9kZWwpLmZpbHRlcihhPT4hYS5wYXJlbnQpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24o'@;
put 'YSl7cmV0dXJuIG5ldyhhfHxjKShHZShPNyksR2UoU0cpLEdlKEVvKSxHZShKaSksR2UoV2EpKX0sYy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLXRyZWUiXV0sY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24oYSxkLGgpe2lmKDEmYSYmYW8oaCxQZCw0KSwyJmEpe2xldCBm'@;
put 'O0NpKGY9U2koKSkmJihkLnJvb3ROb2Rlcz1mKX19LGhvc3RBdHRyczpbInRhYmluZGV4IiwiMCJdLGhvc3RWYXJzOjEsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiZocigicm9sZSIsInRyZWUiKX0saW5wdXRzOntsYXp5OltObi5Ob25lLCJjbHJMYXp5IiwibGF6eSJdfSxmZWF0'@;
put 'dXJlczpbZGEoW2pkZSxTR10pXSxuZ0NvbnRlbnRTZWxlY3RvcnM6eW8sZGVjbHM6Mix2YXJzOjEsY29uc3RzOltbMywiY2hpbGRyZW4iLDQsIm5nSWYiXSxbMywiY2hpbGRyZW4iXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihzYSgpLFlyKDApLGd0KDEscWplLDEsMSwiY2xyLXJl'@;
put 'Y3Vyc2l2ZS1jaGlsZHJlbiIsMCkpLDImYSYmKGZlKCksTWUoIm5nSWYiLGQuZmVhdHVyZXNTZXJ2aWNlLnJlY3Vyc2lvbikpfSxkZXBlbmRlbmNpZXM6W2JhLHpkZV0sZW5jYXBzdWxhdGlvbjoyfSksY30pKCksZFdlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXtUcy5hZGRJY29ucyhF'@;
put 'eSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD1raSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9QXIoe2ltcG9ydHM6W1JhLEFzLFBZXX0pLGN9KSgpLGhXZT0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rp'@;
put 'b24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9a2koe3R5cGU6Y30pLGMuXHUwMjc1aW5qPUFyKHtpbXBvcnRzOltyV2UsYVdlLGRXZV19KSxjfSkoKTtjb25zdCBmV2U9WyJpbmZvIiwid2FybmluZyIsImRhbmdlciIsInN1Y2Nlc3MiLCJuZXV0cmFsIiwidW5rbm93biIsImxv'@;
put 'YWRpbmciXTtsZXQgTUc9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLmNvbW1vblN0cmluZ3M9YSx0aGlzLmRlZmF1bHRJY29uU2hhcGU9ImluZm8tc3RhbmRhcmQiLHRoaXMuX2FsZXJ0SWNvblNoYXBlPSIiLHRoaXMuX2FsZXJ0VHlwZT0iaW5mbyJ9Z2V0IGFsZXJ0VHlwZSgp'@;
put 'e3JldHVybiB0aGlzLl9hbGVydFR5cGV9c2V0IGFsZXJ0VHlwZShhKXtmV2UuaW5kZXhPZihhKT4tMSYmKHRoaXMuX2FsZXJ0VHlwZT1hKX1nZXQgYWxlcnRJY29uU2hhcGUoKXtyZXR1cm4iIj09PXRoaXMuX2FsZXJ0SWNvblNoYXBlP3RoaXMuaWNvbkluZm9Gcm9tVHlwZSh0aGlzLl9hbGVy'@;
put 'dFR5cGUpLnNoYXBlOnRoaXMuX2FsZXJ0SWNvblNoYXBlfXNldCBhbGVydEljb25TaGFwZShhKXthP2EhPT10aGlzLl9hbGVydEljb25TaGFwZSYmKHRoaXMuX2FsZXJ0SWNvblNoYXBlPWEpOnRoaXMuX2FsZXJ0SWNvblNoYXBlPSIifWdldCBhbGVydEljb25UaXRsZSgpe3JldHVybiB0aGlz'@;
put 'Lmljb25JbmZvRnJvbVR5cGUodGhpcy5fYWxlcnRUeXBlKS50aXRsZX1pY29uSW5mb0Zyb21UeXBlKGEpe2NvbnN0IGQ9e3NoYXBlOiIiLGNzc0NsYXNzOiIiLHRpdGxlOiIifTtzd2l0Y2goYSl7Y2FzZSJ3YXJuaW5nIjpkLnNoYXBlPSJ3YXJuaW5nLXN0YW5kYXJkIixkLmNzc0NsYXNzPSJh'@;
put 'bGVydC13YXJuaW5nIixkLnRpdGxlPXRoaXMuY29tbW9uU3RyaW5ncy5rZXlzLndhcm5pbmc7YnJlYWs7Y2FzZSJkYW5nZXIiOmQuc2hhcGU9ImVycm9yLXN0YW5kYXJkIixkLmNzc0NsYXNzPSJhbGVydC1kYW5nZXIiLGQudGl0bGU9dGhpcy5jb21tb25TdHJpbmdzLmtleXMuZGFuZ2VyO2Jy'@;
put 'ZWFrO2Nhc2Uic3VjY2VzcyI6ZC5zaGFwZT0ic3VjY2Vzcy1zdGFuZGFyZCIsZC5jc3NDbGFzcz0iYWxlcnQtc3VjY2VzcyIsZC50aXRsZT10aGlzLmNvbW1vblN0cmluZ3Mua2V5cy5zdWNjZXNzO2JyZWFrO2Nhc2UibmV1dHJhbCI6ZC5zaGFwZT0ibm90ZSIsZC5jc3NDbGFzcz0iYWxlcnQt'@;
put 'bmV1dHJhbCIsZC50aXRsZT10aGlzLmNvbW1vblN0cmluZ3Mua2V5cy5uZXV0cmFsO2JyZWFrO2Nhc2UidW5rbm93biI6ZC5zaGFwZT0iaGVscCIsZC5jc3NDbGFzcz0iYWxlcnQtbmV1dHJhbCIsZC50aXRsZT10aGlzLmNvbW1vblN0cmluZ3Mua2V5cy51bmtub3duO2JyZWFrO2Nhc2UibG9h'@;
put 'ZGluZyI6ZC5zaGFwZT0ibG9hZGluZyIsZC5jc3NDbGFzcz0iYWxlcnQtbmV1dHJhbCIsZC50aXRsZT10aGlzLmNvbW1vblN0cmluZ3Mua2V5cy51bmtub3duO2JyZWFrO2RlZmF1bHQ6ZC5zaGFwZT10aGlzLmRlZmF1bHRJY29uU2hhcGUsZC5jc3NDbGFzcz0iYWxlcnQtaW5mbyIsZC50aXRs'@;
put 'ZT10aGlzLmNvbW1vblN0cmluZ3Mua2V5cy5pbmZvfXJldHVybiBkfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh4cihpcykpfSxjLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpLGhPPSgoKT0+e2NsYXNz'@;
put 'IGN7Y29uc3RydWN0b3IoKXt0aGlzLl9jaGFuZ2U9bmV3IFdufWdldCBjaGFuZ2VzKCl7cmV0dXJuIHRoaXMuX2NoYW5nZS5hc09ic2VydmFibGUoKX1nZXQgY3VycmVudCgpe3JldHVybiB0aGlzLl9jdXJyZW50fXNldCBjdXJyZW50KGEpe2EhPT10aGlzLl9jdXJyZW50JiYodGhpcy5fY3Vy'@;
put 'cmVudD1hLHRoaXMuX2NoYW5nZS5uZXh0KGEpKX1nZXQgYWN0aXZlQWxlcnRzKCl7cmV0dXJuIHRoaXMuYWxsQWxlcnRzJiZ0aGlzLmFsbEFsZXJ0cy5maWx0ZXIoYT0+IWEuX2Nsb3NlZCl9Z2V0IGN1cnJlbnRBbGVydCgpe3JldHVybiB0aGlzLmFjdGl2ZUFsZXJ0cyYmdGhpcy5hY3RpdmVB'@;
put 'bGVydHNbdGhpcy5jdXJyZW50XX1zZXQgY3VycmVudEFsZXJ0KGEpe3RoaXMuY3VycmVudD10aGlzLmFjdGl2ZUFsZXJ0cy5pbmRleE9mKGEpfWdldCBjb3VudCgpe3JldHVybiB0aGlzLmFjdGl2ZUFsZXJ0cyYmdGhpcy5hY3RpdmVBbGVydHMubGVuZ3RofHwwfW1hbmFnZShhKXt0aGlzLnN1'@;
put 'YnNjcmlwdGlvbiYmdGhpcy5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSx0aGlzLmFsbEFsZXJ0cz1hLHRoaXMuY3VycmVudD0ibnVtYmVyIj09dHlwZW9mIHRoaXMuX2N1cnJlbnQ/dGhpcy5fY3VycmVudDowLHRoaXMuX2NoYW5nZS5uZXh0KHRoaXMuY3VycmVudCksdGhpcy5zdWJzY3Jp'@;
put 'cHRpb249dGhpcy5hbGxBbGVydHMuY2hhbmdlcy5zdWJzY3JpYmUoKCk9Pnt0aGlzLmN1cnJlbnQ+PXRoaXMuYWxsQWxlcnRzLmxlbmd0aCYmKHRoaXMuY3VycmVudD1NYXRoLm1heCgwLHRoaXMuYWxsQWxlcnRzLmxlbmd0aC0xKSl9KX1uZXh0KCl7dGhpcy5fY3VycmVudD10aGlzLmN1cnJl'@;
put 'bnQ9PT10aGlzLmFjdGl2ZUFsZXJ0cy5sZW5ndGgtMT8wOnRoaXMuY3VycmVudCsxLHRoaXMuX2NoYW5nZS5uZXh0KHRoaXMuX2N1cnJlbnQpfXByZXZpb3VzKCl7MCE9PXRoaXMuYWN0aXZlQWxlcnRzLmxlbmd0aCYmKHRoaXMuX2N1cnJlbnQ9MD09PXRoaXMuY3VycmVudD90aGlzLmFjdGl2'@;
put 'ZUFsZXJ0cy5sZW5ndGgtMTp0aGlzLmN1cnJlbnQtMSx0aGlzLl9jaGFuZ2UubmV4dCh0aGlzLl9jdXJyZW50KSl9b3BlbigpezAhPT10aGlzLmFjdGl2ZUFsZXJ0cy5sZW5ndGgmJih0aGlzLmN1cnJlbnRBbGVydHx8KHRoaXMuX2N1cnJlbnQ9MCksdGhpcy5fY2hhbmdlLm5leHQodGhpcy5f'@;
put 'Y3VycmVudCkpfWNsb3NlKGEpezAhPT10aGlzLmFjdGl2ZUFsZXJ0cy5sZW5ndGgmJihhJiYodGhpcy5fY3VycmVudD1NYXRoLm1heCgwLHRoaXMuY3VycmVudC0xKSksdGhpcy5fY2hhbmdlLm5leHQodGhpcy5fY3VycmVudCkpfWRlc3Ryb3koKXt0aGlzLnN1YnNjcmlwdGlvbiYmdGhpcy5z'@;
put 'dWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCksSng9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxm'@;
put 'LHYsTSl7dGhpcy5pY29uU2VydmljZT1hLHRoaXMuY2RyPWQsdGhpcy5tdWx0aUFsZXJ0U2VydmljZT1oLHRoaXMuY29tbW9uU3RyaW5ncz1mLHRoaXMucmVuZGVyZXI9dix0aGlzLmhvc3RFbGVtZW50PU0sdGhpcy5pc1NtYWxsPSExLHRoaXMuY2xvc2FibGU9ITAsdGhpcy5pc0FwcExldmVs'@;
put 'PSExLHRoaXMuY2xyQ2xvc2VCdXR0b25BcmlhTGFiZWw9dGhpcy5jb21tb25TdHJpbmdzLmtleXMuYWxlcnRDbG9zZUJ1dHRvbkFyaWFMYWJlbCx0aGlzLl9jbG9zZWRDaGFuZ2VkPW5ldyBLcighMSksdGhpcy5fY2xvc2VkPSExLHRoaXMuc3Vic2NyaXB0aW9ucz1bXSx0aGlzLl9pc0xpZ2h0'@;
put 'd2VpZ2h0PSExfWdldCBpc0xpZ2h0d2VpZ2h0KCl7cmV0dXJuIHRoaXMuX2lzTGlnaHR3ZWlnaHR9c2V0IGlzTGlnaHR3ZWlnaHQoYSl7dGhpcy5faXNMaWdodHdlaWdodD1hLHRoaXMuY29uZmlnQWxlcnRUeXBlKHRoaXMuX29yaWdBbGVydFR5cGUpfWdldCBhbGVydFR5cGUoKXtyZXR1cm4g'@;
put 'dGhpcy5pY29uU2VydmljZS5hbGVydFR5cGV9c2V0IGFsZXJ0VHlwZShhKXt0aGlzLl9vcmlnQWxlcnRUeXBlPWEsdGhpcy5jb25maWdBbGVydFR5cGUoYSl9c2V0IGFsZXJ0SWNvblNoYXBlKGEpe3RoaXMuaWNvblNlcnZpY2UuYWxlcnRJY29uU2hhcGU9YX1zZXQgY2xvc2VkKGEpe2EmJiF0'@;
put 'aGlzLl9jbG9zZWQ/dGhpcy5jbG9zZSgpOiFhJiZ0aGlzLl9jbG9zZWQmJnRoaXMub3BlbigpfWdldCBhbGVydENsYXNzKCl7cmV0dXJuIHRoaXMuaWNvblNlcnZpY2UuaWNvbkluZm9Gcm9tVHlwZSh0aGlzLmljb25TZXJ2aWNlLmFsZXJ0VHlwZSkuY3NzQ2xhc3N9Z2V0IGhpZGRlbigpe3Jl'@;
put 'dHVybiB0aGlzLl9oaWRkZW59c2V0IGhpZGRlbihhKXthIT09dGhpcy5faGlkZGVuJiYodGhpcy5faGlkZGVuPWEsdGhpcy5faGlkZGVuP3RoaXMucmVuZGVyZXIuYWRkQ2xhc3ModGhpcy5ob3N0RWxlbWVudC5uYXRpdmVFbGVtZW50LCJhbGVydC1oaWRkZW4iKTp0aGlzLnJlbmRlcmVyLnJl'@;
put 'bW92ZUNsYXNzKHRoaXMuaG9zdEVsZW1lbnQubmF0aXZlRWxlbWVudCwiYWxlcnQtaGlkZGVuIiksdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpKX1uZ09uSW5pdCgpe3RoaXMubXVsdGlBbGVydFNlcnZpY2UmJnRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMubXVsdGlBbGVydFNlcnZpY2Uu'@;
put 'Y2hhbmdlcy5zdWJzY3JpYmUoKCk9Pnt0aGlzLmhpZGRlbj10aGlzLm11bHRpQWxlcnRTZXJ2aWNlLmN1cnJlbnRBbGVydCE9PXRoaXN9KSl9bmdPbkRlc3Ryb3koKXt0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChhPT5hLnVuc3Vic2NyaWJlKCkpfWNvbmZpZ0FsZXJ0VHlwZShhKXt0aGlz'@;
put 'Lmljb25TZXJ2aWNlLmFsZXJ0VHlwZT1hfW9wZW4oKXt0aGlzLl9jbG9zZWQ9ITEsdGhpcy5tdWx0aUFsZXJ0U2VydmljZSYmdGhpcy5tdWx0aUFsZXJ0U2VydmljZS5vcGVuKCksdGhpcy5fY2xvc2VkQ2hhbmdlZC5lbWl0KCExKX1jbG9zZSgpe2lmKCF0aGlzLmNsb3NhYmxlKXJldHVybjtj'@;
put 'b25zdCBhPXRoaXMubXVsdGlBbGVydFNlcnZpY2U/LmN1cnJlbnRBbGVydD09PXRoaXM7dGhpcy5fY2xvc2VkPSEwLHRoaXMubXVsdGlBbGVydFNlcnZpY2U/LmFjdGl2ZUFsZXJ0cyYmdGhpcy5tdWx0aUFsZXJ0U2VydmljZS5jbG9zZShhKSx0aGlzLl9jbG9zZWRDaGFuZ2VkLmVtaXQoITAp'@;
put 'fX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZShNRyksR2UoRXMpLEdlKGhPLDgpLEdlKGlzKSxHZShFbyksR2UoSmkpKX0sYy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWFsZXJ0Il1dLGlucHV0czp7aXNTbWFsbDpbTm4u'@;
put 'Tm9uZSwiY2xyQWxlcnRTaXplU21hbGwiLCJpc1NtYWxsIl0sY2xvc2FibGU6W05uLk5vbmUsImNsckFsZXJ0Q2xvc2FibGUiLCJjbG9zYWJsZSJdLGlzQXBwTGV2ZWw6W05uLk5vbmUsImNsckFsZXJ0QXBwTGV2ZWwiLCJpc0FwcExldmVsIl0sY2xyQ2xvc2VCdXR0b25BcmlhTGFiZWw6ImNs'@;
put 'ckNsb3NlQnV0dG9uQXJpYUxhYmVsIixpc0xpZ2h0d2VpZ2h0OltObi5Ob25lLCJjbHJBbGVydExpZ2h0d2VpZ2h0IiwiaXNMaWdodHdlaWdodCJdLGFsZXJ0VHlwZTpbTm4uTm9uZSwiY2xyQWxlcnRUeXBlIiwiYWxlcnRUeXBlIl0sYWxlcnRJY29uU2hhcGU6W05uLk5vbmUsImNsckFsZXJ0'@;
put 'SWNvbiIsImFsZXJ0SWNvblNoYXBlIl0sY2xvc2VkOltObi5Ob25lLCJjbHJBbGVydENsb3NlZCIsImNsb3NlZCJdfSxvdXRwdXRzOntfY2xvc2VkQ2hhbmdlZDoiY2xyQWxlcnRDbG9zZWRDaGFuZ2UifSxmZWF0dXJlczpbZGEoW01HXSldLG5nQ29udGVudFNlbGVjdG9yczp5byxkZWNsczox'@;
put 'LHZhcnM6MSxjb25zdHM6W1siY2xhc3MiLCJhbGVydCIsMywibmdDbGFzcyIsImFsZXJ0LXNtIiwiYWxlcnQtbGlnaHR3ZWlnaHQiLCJhbGVydC1hcHAtbGV2ZWwiLDQsIm5nSWYiXSxbMSwiYWxlcnQiLDMsIm5nQ2xhc3MiXSxbMSwiYWxlcnQtaXRlbXMiXSxbInR5cGUiLCJidXR0b24iLCJj'@;
put 'bGFzcyIsImNsb3NlIiwzLCJjbGljayIsNCwibmdJZiJdLFsidHlwZSIsImJ1dHRvbiIsMSwiY2xvc2UiLDMsImNsaWNrIl0sWyJzaGFwZSIsIndpbmRvdy1jbG9zZSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKHNhKCksZ3QoMCxKamUsNCw4LCJkaXYiLDApKSwyJmEmJk1lKCJu'@;
put 'Z0lmIiwhZC5fY2xvc2VkKX0sZGVwZW5kZW5jaWVzOlt3dSxiYSxyc10sZW5jYXBzdWxhdGlvbjoyfSksY30pKCksWWRlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5pY29uU2VydmljZT1hfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxj'@;
put 'KShHZShNRykpfSxjLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItYWxlcnQtaXRlbSJdXSxob3N0QXR0cnM6WzEsImFsZXJ0LWl0ZW0iXSxuZ0NvbnRlbnRTZWxlY3RvcnM6eW8sZGVjbHM6NCx2YXJzOjIsY29uc3RzOltbMSwiYWxlcnQtaWNvbi13cmFwcGVyIl0sWyJj'@;
put 'bGFzcyIsImFsZXJ0LXNwaW5uZXIiLCJjbHJJbmxpbmUiLCIiLDQsIm5nSWYiXSxbImNsYXNzIiwiYWxlcnQtaWNvbiIsInJvbGUiLCJpbWciLDQsIm5nSWYiXSxbImNscklubGluZSIsIiIsMSwiYWxlcnQtc3Bpbm5lciJdLFsicm9sZSIsImltZyIsMSwiYWxlcnQtaWNvbiJdXSx0ZW1wbGF0'@;
put 'ZTpmdW5jdGlvbihhLGQpezEmYSYmKHNhKCksZGUoMCwiZGl2IiwwKSxndCgxLFFqZSwxLDAsImNsci1zcGlubmVyIiwxKSgyLGV6ZSwxLDIsImNkcy1pY29uIiwyKSxoZSgpLFlyKDMpKSwyJmEmJihmZSgpLE1lKCJuZ0lmIiwibG9hZGluZyI9PT1kLmljb25TZXJ2aWNlLmFsZXJ0SWNvblNo'@;
put 'YXBlKSxmZSgpLE1lKCJuZ0lmIiwibG9hZGluZyIhPT1kLmljb25TZXJ2aWNlLmFsZXJ0SWNvblNoYXBlKSl9LGRlcGVuZGVuY2llczpbYmEscnMsUmRdLGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpLFF4PSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1'@;
put 'cm4gbmV3KGF8fGMpfSxjLlx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLDgsImFsZXJ0LXRleHQiXV19KSxjfSkoKSxHZGU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQpe3RoaXMubXVsdGlBbGVydFNlcnZpY2U9YSx0aGlzLmNvbW1vblN0cmluZ3M9ZCx0aGlzLmN1'@;
put 'cnJlbnRBbGVydENoYW5nZT1uZXcgS3IoITEpLHRoaXMuY3VycmVudEFsZXJ0SW5kZXhDaGFuZ2U9bmV3IEtyfWdldCBjdXJyZW50QWxlcnQoKXtyZXR1cm4gdGhpcy5tdWx0aUFsZXJ0U2VydmljZS5jdXJyZW50QWxlcnR9c2V0IGN1cnJlbnRBbGVydChhKXthJiYodGhpcy5tdWx0aUFsZXJ0'@;
put 'U2VydmljZS5jdXJyZW50QWxlcnQ9YSl9Z2V0IGN1cnJlbnRBbGVydEluZGV4KCl7cmV0dXJuIHRoaXMubXVsdGlBbGVydFNlcnZpY2UuY3VycmVudH1zZXQgY3VycmVudEFsZXJ0SW5kZXgoYSl7dGhpcy5tdWx0aUFsZXJ0U2VydmljZS5jdXJyZW50PWF9Z2V0IHByZXZpb3VzQWxlcnRBcmlh'@;
put 'TGFiZWwoKXtjb25zdCBhPXRoaXMuY3VycmVudEFsZXJ0SW5kZXgrMTtyZXR1cm4gdGhpcy5jb21tb25TdHJpbmdzLnBhcnNlKHRoaXMuY29tbW9uU3RyaW5ncy5rZXlzLmFsZXJ0UHJldmlvdXNBbGVydEFyaWFMYWJlbCx7Q1VSUkVOVDooMT09PWE/dGhpcy5tdWx0aUFsZXJ0U2VydmljZS5j'@;
put 'b3VudDphLTEpLnRvU3RyaW5nKCksQ09VTlQ6dGhpcy5tdWx0aUFsZXJ0U2VydmljZS5jb3VudC50b1N0cmluZygpfSl9Z2V0IG5leHRBbGVydEFyaWFMYWJlbCgpe2NvbnN0IGE9dGhpcy5jdXJyZW50QWxlcnRJbmRleCsxO3JldHVybiB0aGlzLmNvbW1vblN0cmluZ3MucGFyc2UodGhpcy5j'@;
put 'b21tb25TdHJpbmdzLmtleXMuYWxlcnROZXh0QWxlcnRBcmlhTGFiZWwse0NVUlJFTlQ6KGE9PT10aGlzLm11bHRpQWxlcnRTZXJ2aWNlLmNvdW50PzE6YSsxKS50b1N0cmluZygpLENPVU5UOnRoaXMubXVsdGlBbGVydFNlcnZpY2UuY291bnQudG9TdHJpbmcoKX0pfW5nT25Jbml0KCl7dGhp'@;
put 'cy5tdWx0aUFsZXJ0U2VydmljZUNoYW5nZXM9dGhpcy5tdWx0aUFsZXJ0U2VydmljZS5jaGFuZ2VzLnN1YnNjcmliZShhPT57dGhpcy5jdXJyZW50QWxlcnRJbmRleENoYW5nZS5lbWl0KGEpLHRoaXMuY3VycmVudEFsZXJ0Q2hhbmdlLmVtaXQodGhpcy5tdWx0aUFsZXJ0U2VydmljZS5hY3Rp'@;
put 'dmVBbGVydHNbYV0pfSl9bmdPbkRlc3Ryb3koKXt0aGlzLm11bHRpQWxlcnRTZXJ2aWNlQ2hhbmdlcy51bnN1YnNjcmliZSgpfXBhZ2VVcCgpe3RoaXMubXVsdGlBbGVydFNlcnZpY2UubmV4dCgpfXBhZ2VEb3duKCl7dGhpcy5tdWx0aUFsZXJ0U2VydmljZS5wcmV2aW91cygpfX1yZXR1cm4g'@;
put 'Yy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZShoTyksR2UoaXMpKX0sYy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWFsZXJ0cy1wYWdlciJdXSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmVHIoImFsZXJ0'@;
put 'cy1wYWdlciIsITApfSxpbnB1dHM6e2N1cnJlbnRBbGVydDpbTm4uTm9uZSwiY2xyQ3VycmVudEFsZXJ0IiwiY3VycmVudEFsZXJ0Il0sY3VycmVudEFsZXJ0SW5kZXg6W05uLk5vbmUsImNsckN1cnJlbnRBbGVydEluZGV4IiwiY3VycmVudEFsZXJ0SW5kZXgiXX0sb3V0cHV0czp7Y3VycmVu'@;
put 'dEFsZXJ0Q2hhbmdlOiJjbHJDdXJyZW50QWxlcnRDaGFuZ2UiLGN1cnJlbnRBbGVydEluZGV4Q2hhbmdlOiJjbHJDdXJyZW50QWxlcnRJbmRleENoYW5nZSJ9LGRlY2xzOjksdmFyczo2LGNvbnN0czpbWzEsImFsZXJ0cy1wYWdlci1jb250cm9sIl0sWzEsImFsZXJ0cy1wYWdlLWRvd24iXSxb'@;
put 'InR5cGUiLCJidXR0b24iLDEsImFsZXJ0cy1wYWdlci1idXR0b24iLDMsImNsaWNrIl0sWyJzaGFwZSIsImFuZ2xlIiwiZGlyZWN0aW9uIiwibGVmdCJdLFsxLCJhbGVydHMtcGFnZXItdGV4dCJdLFsxLCJhbGVydHMtcGFnZS11cCJdLFsic2hhcGUiLCJhbmdsZSIsImRpcmVjdGlvbiIsInJp'@;
put 'Z2h0Il1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoZGUoMCwiZGl2IiwwKSgxLCJkaXYiLDEpKDIsImJ1dHRvbiIsMiksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBkLnBhZ2VEb3duKCl9KSxHdCgzLCJjZHMtaWNvbiIsMyksaGUoKSgpLGRlKDQsImRpdiIsNCksTGUoNSks'@;
put 'aGUoKSxkZSg2LCJkaXYiLDUpKDcsImJ1dHRvbiIsMiksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBkLnBhZ2VVcCgpfSksR3QoOCwiY2RzLWljb24iLDYpLGhlKCkoKSgpKSwyJmEmJihmZSgyKSxocigiYXJpYS1sYWJlbCIsZC5wcmV2aW91c0FsZXJ0QXJpYUxhYmVsKSxmZSgpLGhy'@;
put 'KCJ0aXRsZSIsZC5jb21tb25TdHJpbmdzLmtleXMucHJldmlvdXMpLGZlKDIpLFV1KCIiLGQubXVsdGlBbGVydFNlcnZpY2UuY3VycmVudCsxLCIgLyAiLGQubXVsdGlBbGVydFNlcnZpY2UuY291bnQsIiIpLGZlKDIpLGhyKCJhcmlhLWxhYmVsIixkLm5leHRBbGVydEFyaWFMYWJlbCksZmUo'@;
put 'KSxocigidGl0bGUiLGQuY29tbW9uU3RyaW5ncy5rZXlzLm5leHQpKX0sZGVwZW5kZW5jaWVzOltyc10sZW5jYXBzdWxhdGlvbjoyfSksY30pKCksJGRlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5tdWx0aUFsZXJ0U2VydmljZT1hLHRoaXMuY3VycmVudEFsZXJ0Q2hhbmdl'@;
put 'PW5ldyBLcighMSksdGhpcy5jdXJyZW50QWxlcnRJbmRleENoYW5nZT1uZXcgS3IoITEpLHRoaXMuc3Vic2NyaXB0aW9ucz1bXX1zZXQgYWxsQWxlcnRzKGEpe3RoaXMubXVsdGlBbGVydFNlcnZpY2UubWFuYWdlKGEpfXNldCBfaW5wdXRDdXJyZW50SW5kZXgoYSl7TnVtYmVyLmlzSW50ZWdl'@;
put 'cihhKSYmYT49MCYmKHRoaXMubXVsdGlBbGVydFNlcnZpY2UuY3VycmVudD1hKX1nZXQgY3VycmVudEFsZXJ0SW5kZXgoKXtyZXR1cm4gdGhpcy5tdWx0aUFsZXJ0U2VydmljZS5jdXJyZW50fXNldCBjdXJyZW50QWxlcnRJbmRleChhKXt0aGlzLm11bHRpQWxlcnRTZXJ2aWNlLmN1cnJlbnQ9'@;
put 'YX1nZXQgY3VycmVudEFsZXJ0KCl7cmV0dXJuIHRoaXMubXVsdGlBbGVydFNlcnZpY2UuY3VycmVudEFsZXJ0fXNldCBjdXJyZW50QWxlcnQoYSl7YSYmKHRoaXMubXVsdGlBbGVydFNlcnZpY2UuY3VycmVudEFsZXJ0PWEpfWdldCBhbGVydHMoKXtyZXR1cm4gdGhpcy5hbGxBbGVydHMuZmls'@;
put 'dGVyKGE9PiExPT09YS5oaWRkZW4pfWdldCBjdXJyZW50QWxlcnRUeXBlKCl7cmV0dXJuIHRoaXMubXVsdGlBbGVydFNlcnZpY2UuY3VycmVudEFsZXJ0P3RoaXMubXVsdGlBbGVydFNlcnZpY2UuY3VycmVudEFsZXJ0LmFsZXJ0VHlwZToiIn1uZ0FmdGVyQ29udGVudEluaXQoKXt0aGlzLnN1'@;
put 'YnNjcmlwdGlvbnMucHVzaCh0aGlzLm11bHRpQWxlcnRTZXJ2aWNlLmNoYW5nZXMuc3Vic2NyaWJlKGE9Pnt0aGlzLmN1cnJlbnRBbGVydEluZGV4Q2hhbmdlLm5leHQoYSksdGhpcy5jdXJyZW50QWxlcnRDaGFuZ2UubmV4dCh0aGlzLm11bHRpQWxlcnRTZXJ2aWNlLmN1cnJlbnRBbGVydCl9'@;
put 'KSl9bmdPbkRlc3Ryb3koKXt0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChhPT5hLnVuc3Vic2NyaWJlKCkpLHRoaXMubXVsdGlBbGVydFNlcnZpY2UuZGVzdHJveSgpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZShoTykpfSxjLlx1MDI3NWNt'@;
put 'cD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItYWxlcnRzIl1dLGNvbnRlbnRRdWVyaWVzOmZ1bmN0aW9uKGEsZCxoKXtpZigxJmEmJmFvKGgsSngsNCksMiZhKXtsZXQgZjtDaShmPVNpKCkpJiYoZC5hbGxBbGVydHM9Zil9fSxob3N0VmFyczoxMixob3N0QmluZGluZ3M6ZnVuY3Rpb24o'@;
put 'YSxkKXsyJmEmJlRyKCJhbGVydHMiLCEwKSgiYWxlcnQtZGFuZ2VyIiwiZGFuZ2VyIj09ZC5jdXJyZW50QWxlcnRUeXBlKSgiYWxlcnQtaW5mbyIsImluZm8iPT1kLmN1cnJlbnRBbGVydFR5cGUpKCJhbGVydC1zdWNjZXNzIiwic3VjY2VzcyI9PWQuY3VycmVudEFsZXJ0VHlwZSkoImFsZXJ0'@;
put 'LXdhcm5pbmciLCJ3YXJuaW5nIj09ZC5jdXJyZW50QWxlcnRUeXBlKSgiYWxlcnQtbmV1dHJhbCIsIm5ldXRyYWwiPT1kLmN1cnJlbnRBbGVydFR5cGUpfSxpbnB1dHM6e19pbnB1dEN1cnJlbnRJbmRleDpbTm4uTm9uZSwiY2xyQ3VycmVudEFsZXJ0SW5kZXgiLCJfaW5wdXRDdXJyZW50SW5k'@;
put 'ZXgiXSxjdXJyZW50QWxlcnQ6W05uLk5vbmUsImNsckN1cnJlbnRBbGVydCIsImN1cnJlbnRBbGVydCJdfSxvdXRwdXRzOntjdXJyZW50QWxlcnRDaGFuZ2U6ImNsckN1cnJlbnRBbGVydENoYW5nZSIsY3VycmVudEFsZXJ0SW5kZXhDaGFuZ2U6ImNsckN1cnJlbnRBbGVydEluZGV4Q2hhbmdl'@;
put 'In0sZmVhdHVyZXM6W2RhKFtoT10pXSxuZ0NvbnRlbnRTZWxlY3RvcnM6bnplLGRlY2xzOjMsdmFyczoxLGNvbnN0czpbWzEsImFsZXJ0cy13cmFwcGVyIl0sWzMsImNsckN1cnJlbnRBbGVydEluZGV4Iiw0LCJuZ0lmIl0sWzMsImNsckN1cnJlbnRBbGVydEluZGV4Il1dLHRlbXBsYXRlOmZ1'@;
put 'bmN0aW9uKGEsZCl7MSZhJiYoc2EodHplKSxkZSgwLCJkaXYiLDApLGd0KDEscnplLDEsMSwiY2xyLWFsZXJ0cy1wYWdlciIsMSksWXIoMiksaGUoKSksMiZhJiYoZmUoKSxNZSgibmdJZiIsZC5tdWx0aUFsZXJ0U2VydmljZS5jb3VudD4xKSl9LGRlcGVuZGVuY2llczpbYmEsR2RlXSxzdHls'@;
put 'ZXM6WyJbX25naG9zdC0lQ09NUCVde2Rpc3BsYXk6YmxvY2t9Il19KSxjfSkoKSxLZGU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe1RzLmFkZEljb25zKHNZLFlPZSxHT2UsJE9lLGxZLEtPZSx2eCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMp'@;
put 'fSxjLlx1MDI3NW1vZD1raSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9QXIoe2ltcG9ydHM6W1JhLEFzLE5ZLGp5XX0pLGN9KSgpLHBXZT0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9a2koe3R5cGU6Y30p'@;
put 'LGMuXHUwMjc1aW5qPUFyKHtpbXBvcnRzOltLZGVdfSksY30pKCkscWRlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5fZG9jdW1lbnQ9YX1zdG9wU2Nyb2xsaW5nKCl7dGhpcy5fZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QuYWRkKCJuby1zY3JvbGxpbmciKX1yZXN1bWVTY3Jv'@;
put 'bGxpbmcoKXt0aGlzLl9kb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5jb250YWlucygibm8tc2Nyb2xsaW5nIikmJnRoaXMuX2RvY3VtZW50LmJvZHkuY2xhc3NMaXN0LnJlbW92ZSgibm8tc2Nyb2xsaW5nIil9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMp'@;
put 'KHhyKHZzKSl9LGMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCksWGRlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLmZhZGVNb3ZlPSJmYWRlRG93biIsdGhpcy5iYWNrZHJvcD0hMH19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9u'@;
put 'KGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSksY30pKCksb3U9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmKXt0aGlzLl9zY3JvbGxpbmdTZXJ2aWNlPWEsdGhpcy5jb21t'@;
put 'b25TdHJpbmdzPWQsdGhpcy5tb2RhbFN0YWNrU2VydmljZT1oLHRoaXMuY29uZmlndXJhdGlvbj1mLHRoaXMubW9kYWxJZD1NdSgpLHRoaXMuX29wZW49ITEsdGhpcy5fb3BlbkNoYW5nZWQ9bmV3IEtyKCExKSx0aGlzLmNsb3NhYmxlPSEwLHRoaXMuY2xvc2VCdXR0b25BcmlhTGFiZWw9dGhp'@;
put 'cy5jb21tb25TdHJpbmdzLmtleXMuY2xvc2UsdGhpcy5zaXplPSJtZCIsdGhpcy5zdGF0aWNCYWNrZHJvcD0hMCx0aGlzLnNraXBBbmltYXRpb249ITEsdGhpcy5zdG9wQ2xvc2U9ITEsdGhpcy5hbHRDbG9zZT1uZXcgS3IoITEpLHRoaXMuYnlwYXNzU2Nyb2xsU2VydmljZT0hMX1nZXQgZmFk'@;
put 'ZU1vdmUoKXtyZXR1cm4gdGhpcy5za2lwQW5pbWF0aW9uPyIiOnRoaXMuY29uZmlndXJhdGlvbi5mYWRlTW92ZX1zZXQgZmFkZU1vdmUoYSl7dGhpcy5jb25maWd1cmF0aW9uLmZhZGVNb3ZlPWF9Z2V0IGJhY2tkcm9wKCl7cmV0dXJuIHRoaXMuY29uZmlndXJhdGlvbi5iYWNrZHJvcH1uZ09u'@;
put 'Q2hhbmdlcyhhKXshdGhpcy5ieXBhc3NTY3JvbGxTZXJ2aWNlJiZhJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYSwiX29wZW4iKSYmKGEuX29wZW4uY3VycmVudFZhbHVlPyh0aGlzLl9zY3JvbGxpbmdTZXJ2aWNlLnN0b3BTY3JvbGxpbmcoKSx0aGlzLm1vZGFsU3Rh'@;
put 'Y2tTZXJ2aWNlLnRyYWNrTW9kYWxPcGVuKHRoaXMpKTp0aGlzLl9zY3JvbGxpbmdTZXJ2aWNlLnJlc3VtZVNjcm9sbGluZygpKX1uZ09uRGVzdHJveSgpe3RoaXMuX3Njcm9sbGluZ1NlcnZpY2UucmVzdW1lU2Nyb2xsaW5nKCl9b3Blbigpe3RoaXMuX29wZW58fCh0aGlzLl9vcGVuPSEwLHRo'@;
put 'aXMuX29wZW5DaGFuZ2VkLmVtaXQoITApLHRoaXMubW9kYWxTdGFja1NlcnZpY2UudHJhY2tNb2RhbE9wZW4odGhpcykpfWJhY2tkcm9wQ2xpY2soKXt0aGlzLnN0YXRpY0JhY2tkcm9wP3RoaXMudGl0bGUubmF0aXZlRWxlbWVudC5mb2N1cygpOnRoaXMuY2xvc2UoKX1jbG9zZSgpe3RoaXMu'@;
put 'c3RvcENsb3NlP3RoaXMuYWx0Q2xvc2UuZW1pdCghMSk6IXRoaXMuY2xvc2FibGV8fCF0aGlzLl9vcGVufHwodGhpcy5fb3Blbj0hMSl9ZmFkZURvbmUoYSl7InZvaWQiPT09YS50b1N0YXRlJiYodGhpcy5fb3BlbkNoYW5nZWQuZW1pdCghMSksdGhpcy5tb2RhbFN0YWNrU2VydmljZS50cmFj'@;
put 'a01vZGFsQ2xvc2UodGhpcykpfXNjcm9sbFRvcCgpe3RoaXMuYm9keUVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5zY3JvbGxUbygwLDApfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZShxZGUpLEdlKGlzKSxHZShBZGUpLEdlKFhkZSkpfSxjLlx1'@;
put 'MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItbW9kYWwiXV0sY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24oYSxkLGgpe2lmKDEmYSYmYW8oaCxpemUsNSksMiZhKXtsZXQgZjtDaShmPVNpKCkpJiYoZC5tb2RhbENvbnRlbnRUZW1wbGF0ZT1mLmZpcnN0KX19LHZpZXdRdWVyeTpm'@;
put 'dW5jdGlvbihhLGQpe2lmKDEmYSYmKHFhKEMxZSw1KSxxYShTMWUsNSkpLDImYSl7bGV0IGg7Q2koaD1TaSgpKSYmKGQudGl0bGU9aC5maXJzdCksQ2koaD1TaSgpKSYmKGQuYm9keUVsZW1lbnRSZWY9aC5maXJzdCl9fSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezIm'@;
put 'YSYmVHIoIm9wZW4iLGQuX29wZW4pfSxpbnB1dHM6e19vcGVuOltObi5Ob25lLCJjbHJNb2RhbE9wZW4iLCJfb3BlbiJdLGNsb3NhYmxlOltObi5Ob25lLCJjbHJNb2RhbENsb3NhYmxlIiwiY2xvc2FibGUiXSxjbG9zZUJ1dHRvbkFyaWFMYWJlbDpbTm4uTm9uZSwiY2xyTW9kYWxDbG9zZUJ1'@;
put 'dHRvbkFyaWFMYWJlbCIsImNsb3NlQnV0dG9uQXJpYUxhYmVsIl0sc2l6ZTpbTm4uTm9uZSwiY2xyTW9kYWxTaXplIiwic2l6ZSJdLHN0YXRpY0JhY2tkcm9wOltObi5Ob25lLCJjbHJNb2RhbFN0YXRpY0JhY2tkcm9wIiwic3RhdGljQmFja2Ryb3AiXSxza2lwQW5pbWF0aW9uOltObi5Ob25l'@;
put 'LCJjbHJNb2RhbFNraXBBbmltYXRpb24iLCJza2lwQW5pbWF0aW9uIl0sc3RvcENsb3NlOltObi5Ob25lLCJjbHJNb2RhbFByZXZlbnRDbG9zZSIsInN0b3BDbG9zZSJdLGxhYmVsbGVkQnk6W05uLk5vbmUsImNsck1vZGFsTGFiZWxsZWRCeUlkIiwibGFiZWxsZWRCeSJdLGJ5cGFzc1Njcm9s'@;
put 'bFNlcnZpY2U6W05uLk5vbmUsImNsck1vZGFsT3ZlcnJpZGVTY3JvbGxTZXJ2aWNlIiwiYnlwYXNzU2Nyb2xsU2VydmljZSJdfSxvdXRwdXRzOntfb3BlbkNoYW5nZWQ6ImNsck1vZGFsT3BlbkNoYW5nZSIsYWx0Q2xvc2U6ImNsck1vZGFsQWx0ZXJuYXRlQ2xvc2UifSxmZWF0dXJlczpbZGEo'@;
put 'W10sW3FkZV0pLHdsXSxuZ0NvbnRlbnRTZWxlY3RvcnM6b3plLGRlY2xzOjIsdmFyczoyLGNvbnN0czpbWyJ0aXRsZSIsIiJdLFsiYm9keSIsIiJdLFsiY2xhc3MiLCJtb2RhbCIsMywibW9kYWwtZnVsbC1zY3JlZW4iLDQsIm5nSWYiXSxbImNsYXNzIiwibW9kYWwtYmFja2Ryb3AiLCJhcmlh'@;
put 'LWhpZGRlbiIsInRydWUiLDMsImNsaWNrIiw0LCJuZ0lmIl0sWzEsIm1vZGFsIl0sWyJjZGtUcmFwRm9jdXMiLCIiLCJyb2xlIiwiZGlhbG9nIiwiYXJpYS1tb2RhbCIsInRydWUiLDEsIm1vZGFsLWRpYWxvZyIsMywiY2RrVHJhcEZvY3VzQXV0b0NhcHR1cmUiXSxbMSwiY2xyLXNyLW9ubHki'@;
put 'XSxbImNsYXNzIiwibW9kYWwtY29udGVudC13cmFwcGVyIiw0LCJuZ0lmIiwibmdJZkVsc2UiXSxbMSwibW9kYWwtY29udGVudC13cmFwcGVyIl0sWzEsIm1vZGFsLWNvbnRlbnQiXSxbMSwibW9kYWwtaGVhZGVyLS1hY2Nlc3NpYmxlIl0sWyJjZGtGb2N1c0luaXRpYWwiLCIiLCJ0YWJpbmRl'@;
put 'eCIsIi0xIiwxLCJtb2RhbC10aXRsZS13cmFwcGVyIiwzLCJpZCJdLFsidHlwZSIsImJ1dHRvbiIsImNsYXNzIiwiY2xvc2UiLDMsImNsaWNrIiw0LCJuZ0lmIl0sWzEsIm1vZGFsLWJvZHktd3JhcHBlciJdLFsidHlwZSIsImJ1dHRvbiIsMSwiY2xvc2UiLDMsImNsaWNrIl0sWyJzaGFwZSIs'@;
put 'IndpbmRvdy1jbG9zZSJdLFsiYXJpYS1oaWRkZW4iLCJ0cnVlIiwxLCJtb2RhbC1iYWNrZHJvcCIsMywiY2xpY2siXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihzYShhemUpLGd0KDAsY3plLDcsMTYsImRpdiIsMikoMSx1emUsMSwxLCJkaXYiLDMpKSwyJmEmJihNZSgibmdJZiIs'@;
put 'ZC5fb3BlbiksZmUoKSxNZSgibmdJZiIsZC5iYWNrZHJvcCkpfSxkZXBlbmRlbmNpZXM6W2JhLFp5LHJzXSxlbmNhcHN1bGF0aW9uOjIsZGF0YTp7YW5pbWF0aW9uOlt5aCgiZmFkZU1vdmUiLFtpdSgiKiA9PiBmYWRlRG93biIsW3VzKHtvcGFjaXR5OjAsdHJhbnNmb3JtOiJ0cmFuc2xhdGUo'@;
put 'MCwgLTI1JSkifSksTTAoIjAuMnMgZWFzZS1pbi1vdXQiKV0pLGl1KCJmYWRlRG93biA9PiAqIixbTTAoIjAuMnMgZWFzZS1pbi1vdXQiLHVzKHtvcGFjaXR5OjAsdHJhbnNmb3JtOiJ0cmFuc2xhdGUoMCwgLTI1JSkifSkpXSksaXUoIiogPT4gZmFkZUxlZnQiLFt1cyh7b3BhY2l0eTowLHRy'@;
put 'YW5zZm9ybToidHJhbnNsYXRlKDI1JSwgMCkifSksTTAoIjAuMnMgZWFzZS1pbi1vdXQiKV0pLGl1KCJmYWRlTGVmdCA9PiAqIixbTTAoIjAuMnMgZWFzZS1pbi1vdXQiLHVzKHtvcGFjaXR5OjAsdHJhbnNmb3JtOiJ0cmFuc2xhdGUoMjUlLCAwKSJ9KSldKV0pLHloKCJmYWRlIixbaXUoInZv'@;
put 'aWQgPT4gKiIsW3VzKHtvcGFjaXR5OjB9KSxNMCgiMC4ycyBlYXNlLWluLW91dCIsdXMoe29wYWNpdHk6Ljg1fSkpXSksaXUoIiogPT4gdm9pZCIsW00wKCIwLjJzIGVhc2UtaW4tb3V0Iix1cyh7b3BhY2l0eTowfSkpXSldKV19fSksY30pKCksS3U9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rv'@;
put 'cihhLGQsaCl7dGhpcy5yZW5kZXJlcj1hLHRoaXMuaG9zdD1kLHRoaXMudGFiaW5kZXg9IjAiLHRoaXMudW5saXN0ZW5lcnM9W10saC5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e3RoaXMub2JzZXJ2ZXI9bmV3IFJlc2l6ZU9ic2VydmVyKCgpPT50aGlzLmFkZE9yUmVtb3ZlVGFiSW5kZXgoKSks'@;
put 'dGhpcy5vYnNlcnZlci5vYnNlcnZlKGQubmF0aXZlRWxlbWVudCksdGhpcy51bmxpc3RlbmVycy5wdXNoKGEubGlzdGVuKGQubmF0aXZlRWxlbWVudCwibW91c2V1cCIsKCk9Pnt0aGlzLmFkZE9yUmVtb3ZlVGFiSW5kZXgoKX0pLGEubGlzdGVuKGQubmF0aXZlRWxlbWVudCwibW91c2Vkb3du'@;
put 'IiwoKT0+e3RoaXMucmVtb3ZlVGFiSW5kZXgoKX0pKX0pfW5nT25EZXN0cm95KCl7Zm9yKDt0aGlzLnVubGlzdGVuZXJzLmxlbmd0aDspdGhpcy51bmxpc3RlbmVycy5wb3AoKSgpO3RoaXMub2JzZXJ2ZXIuZGlzY29ubmVjdCgpLHRoaXMub2JzZXJ2ZXI9bnVsbH1hZGRUYWJJbmRleCgpe3Ro'@;
put 'aXMucmVuZGVyZXIuc2V0QXR0cmlidXRlKHRoaXMuaG9zdC5uYXRpdmVFbGVtZW50LCJ0YWJpbmRleCIsdGhpcy50YWJpbmRleCl9cmVtb3ZlVGFiSW5kZXgoKXt0aGlzLnJlbmRlcmVyLnJlbW92ZUF0dHJpYnV0ZSh0aGlzLmhvc3QubmF0aXZlRWxlbWVudCwidGFiaW5kZXgiKX1hZGRPclJl'@;
put 'bW92ZVRhYkluZGV4KCl7Y29uc3QgYT10aGlzLmhvc3QubmF0aXZlRWxlbWVudC5wYXJlbnRFbGVtZW50O2EmJmEuY2xpZW50SGVpZ2h0PGEuc2Nyb2xsSGVpZ2h0P3RoaXMuYWRkVGFiSW5kZXgoKTp0aGlzLnJlbW92ZVRhYkluZGV4KCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihh'@;
put 'KXtyZXR1cm4gbmV3KGF8fGMpKEdlKEVvKSxHZShKaSksR2UoV2EpKX0sYy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siIiw4LCJtb2RhbC1ib2R5Il1dfSksY30pKCksZk89KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe1RzLmFkZEljb25zKHZ4KX19cmV0dXJuIGMuXHUw'@;
put 'Mjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPWtpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1Bcih7aW1wb3J0czpbUmEsS0wsQXMsQXNdfSksY30pKCksZ1dlPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4g'@;
put 'bmV3KGF8fGMpfSxjLlx1MDI3NW1vZD1raSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9QXIoe2ltcG9ydHM6W1JhLEtMLEFzLGZPLGZPLEFzXX0pLGN9KSgpLG1XZT0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVt'@;
put 'b2Q9a2koe3R5cGU6Y30pLGMuXHUwMjc1aW5qPUFyKHtpbXBvcnRzOltSYV19KSxjfSkoKSxiV2U9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe1RzLmFkZEljb25zKHFPZSxYT2Usc1ksbFkpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5c'@;
put 'dTAyNzVtb2Q9a2koe3R5cGU6Y30pLGMuXHUwMjc1aW5qPUFyKHtpbXBvcnRzOltSYSxBcyxqeSxBcyxqeV19KSxjfSkoKSxTV2U9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe1RzLmFkZEljb25zKHNZLGxZKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXco'@;
put 'YXx8Yyl9LGMuXHUwMjc1bW9kPWtpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1Bcih7aW1wb3J0czpbUmEsZk8sS2RlXX0pLGN9KSgpLHowPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD1raSh7dHlwZTpj'@;
put 'fSksYy5cdTAyNzVpbmo9QXIoe2ltcG9ydHM6W3BXZSxoV2UsQXMsZk8sUFksTzIsQkwsbFVlLENkZSxpWmUsVFVlLFNXZSxnV2UsS3plLGp5LG1XZSxWeCxiV2VdfSksY30pKCksTVdlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkKXt0aGlzLnNhc1NlcnZpY2U9YSx0aGlzLmxvZ2dl'@;
put 'clNlcnZpY2U9ZCx0aGlzLl9zdWJzY3JpcHRpb249bmV3IHF0LHRoaXMubG9hZGluZz0hMSx0aGlzLmFsZXJ0Q2xvc2VkPSEwLHRoaXMuZGF0YT17dXNlcjpudWxsLHBhc3M6bnVsbH19bmdPbkluaXQoKXsiUmVkaXJlY3RlZCIhPT10aGlzLnNhc1NlcnZpY2UuZ2V0U2FzanNDb25maWcoKS5s'@;
put 'b2dpbk1lY2hhbmlzbSYmKHRoaXMuX3N1YnNjcmlwdGlvbj10aGlzLnNhc1NlcnZpY2Uuc2hvdWxkTG9naW4uc3Vic2NyaWJlKGQ9Pnt0aGlzLmlzQWN0aXZlPWQ7bGV0IGg9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiYm9keSIpO2gmJihkP2guY2xhc3NMaXN0LmFkZCgic2hvdWxkLWxvZ2lu'@;
put 'Iik6aC5jbGFzc0xpc3QucmVtb3ZlKCJzaG91bGQtbG9naW4iKSl9KSl9bmdPbkRlc3Ryb3koKXt0aGlzLl9zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKX1zdWJtaXQoKXt0aGlzLmxvYWRpbmd8fCh0aGlzLmxvYWRpbmc9ITAsdGhpcy5kYXRhLnVzZXImJnRoaXMuZGF0YS5wYXNzJiZ0aGlz'@;
put 'LnNhc1NlcnZpY2UubG9naW4odGhpcy5kYXRhLnVzZXIsdGhpcy5kYXRhLnBhc3MpLnRoZW4oYT0+e3RoaXMubG9hZGluZz0hMSxhfHwodGhpcy5lcnJvck1zZz0iVXNlcm5hbWUgb3IgcGFzc3dvcmQgaW52YWxpZCIsdGhpcy5hbGVydENsb3NlZD0hMSl9LGE9Pnt0aGlzLmxvZ2dlclNlcnZp'@;
put 'Y2UubG9nKGEpLHRoaXMubG9hZGluZz0hMSx0aGlzLmVycm9yTXNnPWEsdGhpcy5hbGVydENsb3NlZD0hMX0pKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShHZShCcyksR2UoU2QpKX19c3RhdGlje3RoaXMuXHUwMjc1Y21wPVZyKHt0eXBlOmMs'@;
put 'c2VsZWN0b3JzOltbImFwcC1sb2dpbiJdXSxkZWNsczoyMCx2YXJzOjksY29uc3RzOltbMSwibG9naW4tc2lkZWJhci13cmFwcGVyIl0sWzEsImxvZ2luLXNpZGViYXIiLCJzaWRlQmFyUHJvcHMiXSxbInNyYyIsIi9TQVNKb2JFeGVjdXRpb24/X0ZJTEU9L1B1YmxpYy9hcHAvZGNwbGFjZWhv'@;
put 'bGRlci9zZXJ2aWNlcy93ZWIvaW1hZ2VzL2RhdGFjb250cm9sbGVyLnN2ZyIsImFsdCIsImRhdGFjb250cm9sbGVyIGxvZ28iLDEsImxvZ2luLWxvZ28iXSxbMSwibG9naW4iLDMsIm5nU3VibWl0Il0sWzEsInRpdGxlIl0sWzEsIndlbGNvbWUiXSxbMSwiaGludCJdLFsxLCJsb2dpbi1ncm91'@;
put 'cCJdLFsiY2xySW5wdXQiLCIiLCJuYW1lIiwidXNlciIsInR5cGUiLCJ0ZXh0IiwicGxhY2Vob2xkZXIiLCJVc2VybmFtZSIsMSwidXNlcm5hbWUiLDMsIm5nTW9kZWxDaGFuZ2UiLCJuZ01vZGVsIl0sWyJjbHJJbnB1dCIsIiIsIm5hbWUiLCJwYXNzIiwidHlwZSIsInBhc3N3b3JkIiwicGxh'@;
put 'Y2Vob2xkZXIiLCJQYXNzd29yZCIsMSwicGFzc3dvcmQiLDMsIm5nTW9kZWxDaGFuZ2UiLCJuZ01vZGVsIl0sWzMsImNsckFsZXJ0Q2xvc2VkQ2hhbmdlIiwiY2xyQWxlcnRUeXBlIiwiY2xyQWxlcnRDbG9zZWQiXSxbImNsci1hbGVydC1pdGVtIiwiIiwxLCJhbGVydC1pdGVtIl0sWzEsImFs'@;
put 'ZXJ0LXRleHQiXSxbInR5cGUiLCJzdWJtaXQiLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1zdWNjZXNzIiwzLCJjbHJMb2FkaW5nIiwiZGlzYWJsZWQiXSxbMSwib3ZlcmxheSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihkLGgpezEmZCYmKGRlKDAsImRpdiIsMCkoMSwiZGl2IiwxKSxHdCgyLCJpbWci'@;
put 'LDIpLGRlKDMsImZvcm0iLDMpLEZ0KCJuZ1N1Ym1pdCIsZnVuY3Rpb24oKXtyZXR1cm4gaC5zdWJtaXQoKX0pLGRlKDQsImxhYmVsIiw0KSg1LCJoMyIsNSksTGUoNiwiV2VsY29tZSB0byIpLGhlKCksTGUoNywiIERhdGEgQ29udHJvbGxlciAiKSxkZSg4LCJoNCIsNiksTGUoOSwiQ2FwdHVy'@;
put 'ZSwgUmV2aWV3LCBhbmQgQXBwcm92ZSIpLGhlKCkoKSxkZSgxMCwiZGl2Iiw3KSgxMSwiaW5wdXQiLDgpLGdpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbih2KXtyZXR1cm4gbWkoaC5kYXRhLnVzZXIsdil8fChoLmRhdGEudXNlcj12KSx2fSksaGUoKSxkZSgxMiwiaW5wdXQiLDkpLGdpKCJu'@;
put 'Z01vZGVsQ2hhbmdlIixmdW5jdGlvbih2KXtyZXR1cm4gbWkoaC5kYXRhLnBhc3Msdil8fChoLmRhdGEucGFzcz12KSx2fSksaGUoKSxkZSgxMywiY2xyLWFsZXJ0IiwxMCksZ2koImNsckFsZXJ0Q2xvc2VkQ2hhbmdlIixmdW5jdGlvbih2KXtyZXR1cm4gbWkoaC5hbGVydENsb3NlZCx2KXx8'@;
put 'KGguYWxlcnRDbG9zZWQ9diksdn0pLGRlKDE0LCJkaXYiLDExKSgxNSwic3BhbiIsMTIpLExlKDE2KSxoZSgpKCkoKSxkZSgxNywiYnV0dG9uIiwxMyksTGUoMTgsIiBMb2cgaW4gIiksaGUoKSgpKCkoKSxHdCgxOSwiZGl2IiwxNCksaGUoKSksMiZkJiYoVHIoImFjdGl2ZSIsaC5pc0FjdGl2'@;
put 'ZSksZmUoMTEpLHBpKCJuZ01vZGVsIixoLmRhdGEudXNlciksZmUoKSxwaSgibmdNb2RlbCIsaC5kYXRhLnBhc3MpLGZlKCksTWUoImNsckFsZXJ0VHlwZSIsImFsZXJ0LWRhbmdlciIpLHBpKCJjbHJBbGVydENsb3NlZCIsaC5hbGVydENsb3NlZCksZmUoMyksd3IoaC5lcnJvck1zZyksZmUo'@;
put 'KSxNZSgiY2xyTG9hZGluZyIsaC5sb2FkaW5nKSgiZGlzYWJsZWQiLGgubG9hZGluZykpfSxkZXBlbmRlbmNpZXM6W2w3LHFsLG5sLG83LCRzLHlwLEp4LFF4LGowLFAyLGRzLFoxXSxlbmNhcHN1bGF0aW9uOjJ9KX19cmV0dXJuIGN9KSgpO2Z1bmN0aW9uIHhXZShjLGwpezEmYyYmKGRlKDAs'@;
put 'InNwYW4iLDEwKSxMZSgxLCJsb2FkaW5nIiksaGUoKSl9ZnVuY3Rpb24gRVdlKGMsbCl7MSZjJiYoZGUoMCwic3BhbiIsMTEpLExlKDEsImxvYWRlZCIpLGhlKCkpfWZ1bmN0aW9uIFRXZShjLGwpezEmYyYmKGRlKDAsInNwYW4iLDEyKSxMZSgxLCJmYWlsZWQiKSxoZSgpKX1mdW5jdGlvbiBB'@;
put 'V2UoYyxsKXtpZigxJmMmJihkZSgwLCJwIikoMSwiY29kZSIpLExlKDIpLGhlKCksTGUoMywiIFx4YTAgIiksZ3QoNCx4V2UsMiwwLCJzcGFuIiw3KSg1LEVXZSwyLDAsInNwYW4iLDgpKDYsVFdlLDIsMCwic3BhbiIsOSksaGUoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O2ZlKDIpLHdy'@;
put 'KGEucHJvZ3JhbSksZmUoMiksTWUoIm5nSWYiLGEucnVubmluZyksZmUoKSxNZSgibmdJZiIsIWEucnVubmluZyYmYS5zdWNjZXNzZnVsKSxmZSgpLE1lKCJuZ0lmIiwhYS5ydW5uaW5nJiYhYS5zdWNjZXNzZnVsKX19ZnVuY3Rpb24ga1dlKGMsbCl7aWYoMSZjJiYoZGUoMCwiY2xyLXNpZ25w'@;
put 'b3N0LWNvbnRlbnQiLDUpLGd0KDEsQVdlLDcsNCwicCIsNiksaGUoKSksMiZjKXtjb25zdCBhPVJlKCk7TWUoImNsclBvc2l0aW9uIiwiYm90dG9tLW1pZGRsZSIpLGZlKCksTWUoIm5nRm9yT2YiLGEucmVxdWVzdHMpfX1sZXQgRFdlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlz'@;
put 'LmxvYWRpbmc9ITEsdGhpcy5yZXF1ZXN0cz1bXSx0aGlzLl9sb2FkaW5nU3ViPW5ldyBxdH1uZ09uSW5pdCgpe31uZ09uRGVzdHJveSgpe3RoaXMuX2xvYWRpbmdTdWIudW5zdWJzY3JpYmUoKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3Rh'@;
put 'dGlje3RoaXMuXHUwMjc1Y21wPVZyKHt0eXBlOmMsc2VsZWN0b3JzOltbImFwcC1sb2FkaW5nLWluZGljYXRvciJdXSxkZWNsczo2LHZhcnM6Nixjb25zdHM6W1sxLCJsb2FkaW5nLWluZGljYXRvciJdLFsiY2xyU2lnbnBvc3RUcmlnZ2VyIiwiIiwxLCJzcGlubmVyIiwic3Bpbm5lci1zbSIs'@;
put 'InNwaW5uZXItaW52ZXJzZSJdLFsiY2xyU2lnbnBvc3RUcmlnZ2VyIiwiIiwic2hhcGUiLCJjaGVjayIsInNpemUiLCIyMCIsMSwiaXMtaW5mbyJdLFsiY2xyU2lnbnBvc3RUcmlnZ2VyIiwiIiwic2hhcGUiLCJlcnJvciIsInNpemUiLCIyNCIsMSwiaXMtZXJyb3IiXSxbMywiY2xyUG9zaXRp'@;
put 'b24iLDQsImNscklmT3BlbiJdLFszLCJjbHJQb3NpdGlvbiJdLFs0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbImNsYXNzIiwicnVubmluZyIsNCwibmdJZiJdLFsiY2xhc3MiLCJzdWNjZXNzIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImZhaWwiLDQsIm5nSWYiXSxbMSwicnVubmluZyJdLFsxLCJzdWNj'@;
put 'ZXNzIl0sWzEsImZhaWwiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZCxoKXsxJmQmJihkZSgwLCJkaXYiLDApKDEsImNsci1zaWducG9zdCIpLEd0KDIsInNwYW4iLDEpKDMsImNsci1pY29uIiwyKSg0LCJjbHItaWNvbiIsMyksZ3QoNSxrV2UsMiwyLCJjbHItc2lnbnBvc3QtY29udGVudCIsNCks'@;
put 'aGUoKSgpKSwyJmQmJihmZSgyKSxfZCgiZGlzcGxheSIsaC5sb2FkaW5nPyJpbmxpbmUtYmxvY2siOiJub25lIiksZmUoKSxfZCgiZGlzcGxheSIsIWgubG9hZGluZyYmaC5yZXF1ZXN0cy5sZW5ndGg+MCYmaC5yZXF1ZXN0c1swXS5zdWNjZXNzZnVsPyJpbmxpbmUtYmxvY2siOiJub25lIiks'@;
put 'ZmUoKSxfZCgiZGlzcGxheSIsIWgubG9hZGluZyYmaC5yZXF1ZXN0cy5sZW5ndGg+MCYmIWgucmVxdWVzdHNbMF0uc3VjY2Vzc2Z1bD8iaW5saW5lLWJsb2NrIjoibm9uZSIpKX0sZGVwZW5kZW5jaWVzOltucyxiYSxIbCxMMixXTCxxMWUsWkxdLGVuY2Fwc3VsYXRpb246Mn0pfX1yZXR1cm4g'@;
put 'Y30pKCk7ZnVuY3Rpb24gSVdlKGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiY2RzLWljb24iLDEyKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KFJlKCkudG9nZ2xlRGFya01vZGUoITApKX0pLGhlKCl9fWZ1bmN0aW9uIFJXZShjLGwpe2lmKDEmYyl7Y29u'@;
put 'c3QgYT1MbigpO2RlKDAsImNkcy1pY29uIiwxMyksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChSZSgpLnRvZ2dsZURhcmtNb2RlKCExKSl9KSxoZSgpfX1mdW5jdGlvbiBMV2UoYyxsKXtpZigxJmMmJihkZSgwLCJzcGFuIiksR3QoMSwiaW1nIiwxNCksaGUoKSksMiZj'@;
put 'KXtjb25zdCBhPVJlKCk7ZmUoKSxmTSgic3JjIixhLmdldFBpY3R1cmVVcmwoKSxaQyl9fWZ1bmN0aW9uIE9XZShjLGwpe2lmKDEmYyYmKGRlKDAsInNwYW4iLDE1KSxMZSgxKSxoZSgpKSwyJmMpe2NvbnN0IGE9UmUoKTtUcigiaGlkZGVuIiwwPT09YS5mYWlsZWRSZXFzLmxlbmd0aCksZmUo'@;
put 'KSx3cihhLmZhaWxlZFJlcXMubGVuZ3RoKX19ZnVuY3Rpb24gUFdlKGMsbCl7aWYoMSZjJiYoZGUoMCwic3BhbiIsMTYpLExlKDEpLGhlKCkpLDImYyl7Y29uc3QgYT1SZSgpO1RyKCJoaWRkZW4iLDA9PT1hLmRlYnVnTG9ncy5sZW5ndGgpLGZlKCksd3IoYS5kZWJ1Z0xvZ3MubGVuZ3RoKX19'@;
put 'ZnVuY3Rpb24gRldlKGMsbCl7MSZjJiZHdCgwLCJjbHItaWNvbiIsMTcpfWZ1bmN0aW9uIEhXZShjLGwpezEmYyYmKHNpKDApLGRlKDEsImEiLDI4KSgyLCJzcGFuIiwyOSksTGUoMywiRG9jdW1lbnRhdGlvbiIpLGhlKCkoKSxsaSgpKX1mdW5jdGlvbiBOV2UoYyxsKXtpZigxJmMpe2NvbnN0'@;
put 'IGE9TG4oKTtkZSgwLCJjbHItZHJvcGRvd24tbWVudSIsMTgpKDEsImRpdiIsMTksMCkoMywiY2xyLXRvZ2dsZS1jb250YWluZXIiLDIwKSxGdCgiY2xpY2siLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9aGEoMik7cmV0dXJuIEN0KFJlKCkub25EZWJ1Z1Jvd0NsaWNrKGgsZikpfSksZGUo'@;
put 'NCwiY2xyLXRvZ2dsZS13cmFwcGVyIikoNSwiaW5wdXQiLDIxKSxnaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1SZSgpO3JldHVybiBtaShmLnNhc2pzQ29uZmlnLmRlYnVnLGgpfHwoZi5zYXNqc0NvbmZpZy5kZWJ1Zz1oKSxDdChoKX0pLEZ0KCJuZ01vZGVs'@;
put 'Q2hhbmdlIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChSZSgpLm9uRGVidWdNb2RlQ2hhbmdlKCkpfSksaGUoKSxkZSg2LCJsYWJlbCIpLExlKDcsIkRlYnVnIE1vZGUiKSxoZSgpKCkoKSgpLGRlKDgsImEiLDIyKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KFJl'@;
put 'KCkub3BlblJlcXVlc3RzTW9kYWwoKSl9KSxkZSg5LCJzcGFuIiksTGUoMTAsIlNBUyBSZXF1ZXN0cyIpLGhlKCkoKSxndCgxMSxIV2UsNCwwLCJuZy1jb250YWluZXIiLDcpLEd0KDEyLCJkaXYiLDIzKSxkZSgxMywiYSIsMjQpKDE0LCJzcGFuIiksTGUoMTUsIlN5c3RlbSIpLGhlKCkoKSxk'@;
put 'ZSgxNiwiYSIsMjUpLEZ0KCJjbGljayIsZnVuY3Rpb24oaCl7cmV0dXJuIHd0KGEpLEN0KFJlKCkubG9nb3V0KGgpKX0pLGRlKDE3LCJzcGFuIiksTGUoMTgsIkxvZyBPdXQiKSxoZSgpLEd0KDE5LCJjbHItaWNvbiIsMjYpLGhlKCksZGUoMjAsImRpdiIsMjcpKDIxLCJzcGFuIiksTGUoMjIp'@;
put 'LGhlKCkoKSgpfWlmKDImYyl7Y29uc3QgYT1SZSgpO2ZlKDUpLHBpKCJuZ01vZGVsIixhLnNhc2pzQ29uZmlnLmRlYnVnKSxmZSg2KSxNZSgibmdJZiIsIWEuaXNEZXBsb3lQYWdlKSxmZSgxMSksRHIoInYiLGEuY29tbWl0VmVyLCIiKX19bGV0IFZXZT0oKCk9PntjbGFzcyBje2NvbnN0cnVj'@;
put 'dG9yKGEsZCxoLGYpe3RoaXMudXNlclNlcnZpY2U9YSx0aGlzLnNhc1NlcnZpY2U9ZCx0aGlzLmV2ZW50U2VydmljZT1oLHRoaXMucm91dGVyPWYsdGhpcy51c2VyTmFtZT0iTm90IGxvZ2dlZCBpbiIsdGhpcy5yZXFTdWI9bmV3IHF0LHRoaXMudXNlclN1Yj1uZXcgcXQsdGhpcy5hcHBMb2dz'@;
put 'PVtdLHRoaXMuZGVidWdMb2dzPVtdLHRoaXMuZmFpbGVkUmVxcz1bXSx0aGlzLnNhc0Vycm9ycz1bXSx0aGlzLmlzVml5YT0hMSx0aGlzLnNhc2pzQ29uZmlnPW5ldyBtaC5TQVNqc0NvbmZpZyx0aGlzLnJlcXVlc3RzQ291bnQ9MCx0aGlzLmNvbW1pdFZlcj0iIix0aGlzLmRhcmtNb2RlPXRo'@;
put 'aXMuZXZlbnRTZXJ2aWNlLmRhcmtNb2RlfW5nT25Jbml0KCl7dGhpcy51c2VyU3ViPXRoaXMudXNlclNlcnZpY2UudXNlckNoYW5nZS5zdWJzY3JpYmUoYT0+e3RoaXMudXNlck5hbWU9YS51c2VybmFtZX0pLHRoaXMuc2FzanNDb25maWc9dGhpcy5zYXNTZXJ2aWNlLmdldFNhc2pzQ29uZmln'@;
put 'KCksIlNBU1ZJWUEiPT09dGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJUeXBlJiYodGhpcy5pc1ZpeWE9ITApLHRoaXMuY29tbWl0VmVyPSJ2Ny4wLjAiLnJlcGxhY2UoInYiLCIiKSsiLmc4YzYwNDczIn1uZ09uRGVzdHJveSgpe3RoaXMucmVxU3ViLnVuc3Vic2NyaWJlKCksdGhpcy51c2VyU3Vi'@;
put 'LnVuc3Vic2NyaWJlKCl9dG9nZ2xlRGFya01vZGUoYSl7dGhpcy5ldmVudFNlcnZpY2UudG9nZ2xlRGFya01vZGUoYSl9b3BlblJlcXVlc3RzTW9kYWwoKXt0aGlzLmV2ZW50U2VydmljZS5vcGVuUmVxdWVzdHNNb2RhbCgpfW9uRGVidWdNb2RlQ2hhbmdlKGEpe3RoaXMuc2FzanNDb25maWcm'@;
put 'JnRoaXMuc2FzU2VydmljZS5zZXREZWJ1Z1N0YXRlKHRoaXMuc2FzanNDb25maWcuZGVidWcpfW9uRGVidWdSb3dDbGljayhhLGQpe2Euc3RvcFByb3BhZ2F0aW9uKCksS24udXNlckRyb3Bkb3duQ29uZmlnLmNsb3NlT25EZWJ1Z0NsaWNrJiZzZXRUaW1lb3V0KCgpPT57ZC5jbGljaygpfSwz'@;
put 'MDApfWxvZ291dChhKXthLnByZXZlbnREZWZhdWx0KCk7dHJ5e3RoaXMuc2FzU2VydmljZS5sb2dvdXQoKX1jYXRjaChkKXtjb25zb2xlLmVycm9yKGQpfX1nZXRQaWN0dXJlVXJsKCl7cmV0dXJuYCR7dGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJVcmx9L2lkZW50aXRpZXMvdXNlcnMvJHt0aGlz'@;
put 'LnVzZXJOYW1lfS9hdmF0YXIvY29udGVudGB9Z2V0IGlzRGVwbG95UGFnZSgpe3JldHVybiB0aGlzLnJvdXRlci51cmwuaW5jbHVkZXMoImRlcGxveSIpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKEdlKF9XKSxHZShCcyksR2UodmMpLEdlKExz'@;
put 'KSl9fXN0YXRpY3t0aGlzLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAtaGVhZGVyLWFjdGlvbnMiXV0sZGVjbHM6MTQsdmFyczo3LGNvbnN0czpbWyJkcm9wZG93bkl0ZW1EZWJ1ZyIsIiJdLFsxLCJoZWFkZXItYWN0aW9ucyJdLFsxLCJkLWZsZXgiLCJjbHItYWxpZ24t'@;
put 'aXRlbXMtY2VudGVyIl0sWyJzaXplIiwibWQiLCJjbGFzcyIsInRoZW1lLXRvZ2dsZS1pY29uIGN1cnNvci1wb2ludGVyIiwic2hhcGUiLCJtb29uIiwiaW52ZXJzZSIsImZhbHNlIiwic29saWQiLCJmYWxzZSIsMywiY2xpY2siLDQsIm5nSWYiXSxbInNpemUiLCJtZCIsImNsYXNzIiwidGhl'@;
put 'bWUtdG9nZ2xlLWljb24gY3Vyc29yLXBvaW50ZXIiLCJzaGFwZSIsInN1biIsImludmVyc2UiLCJmYWxzZSIsInNvbGlkIiwiZmFsc2UiLDMsImNsaWNrIiw0LCJuZ0lmIl0sWzEsImFwcC1uYXYtZHJvcGRvd24iXSxbImNsckRyb3Bkb3duVG9nZ2xlIiwiIiwxLCJuYXYtdGV4dCIsImNvbG9y'@;
put 'LXdoaXRlIiwidXNlci1uYXYtdG9nZ2xlIl0sWzQsIm5nSWYiXSxbImNsYXNzIiwiYmFkZ2UgYmFkZ2UtZGFuZ2VyIiwzLCJoaWRkZW4iLDQsIm5nSWYiXSxbImNsYXNzIiwiYmFkZ2UgYmFkZ2UtaW5mbyIsMywiaGlkZGVuIiw0LCJuZ0lmIl0sWyJzaGFwZSIsImNhcmV0IGRvd24iLDQsIm5n'@;
put 'SWYiXSxbImNsclBvc2l0aW9uIiwiYm90dG9tLXJpZ2h0Iiw0LCJjbHJJZk9wZW4iXSxbInNpemUiLCJtZCIsInNoYXBlIiwibW9vbiIsImludmVyc2UiLCJmYWxzZSIsInNvbGlkIiwiZmFsc2UiLDEsInRoZW1lLXRvZ2dsZS1pY29uIiwiY3Vyc29yLXBvaW50ZXIiLDMsImNsaWNrIl0sWyJz'@;
put 'aXplIiwibWQiLCJzaGFwZSIsInN1biIsImludmVyc2UiLCJmYWxzZSIsInNvbGlkIiwiZmFsc2UiLDEsInRoZW1lLXRvZ2dsZS1pY29uIiwiY3Vyc29yLXBvaW50ZXIiLDMsImNsaWNrIl0sWyJhbHQiLCJwcm9maWxlIHBpY3R1cmUiLDEsImF2YXRhci1pbWciLDMsInNyYyJdLFsxLCJiYWRn'@;
put 'ZSIsImJhZGdlLWRhbmdlciJdLFsxLCJiYWRnZSIsImJhZGdlLWluZm8iXSxbInNoYXBlIiwiY2FyZXQgZG93biJdLFsiY2xyUG9zaXRpb24iLCJib3R0b20tcmlnaHQiXSxbImNsckRyb3Bkb3duSXRlbSIsIiIsMSwiZGVidWctc3dpdGNoLWl0ZW0iXSxbMSwidG9nZ2xlLXN3aXRjaCIsMywi'@;
put 'Y2xpY2siXSxbImlkIiwiZGVidWctdG9nZ2xlMSIsInR5cGUiLCJjaGVja2JveCIsImNsclRvZ2dsZSIsIiIsMywibmdNb2RlbENoYW5nZSIsIm5nTW9kZWwiXSxbImNsckRyb3Bkb3duSXRlbSIsIiIsMywiY2xpY2siXSxbMSwic2VwYXJhdG9yIl0sWyJocmVmIiwiLi4uIiwicm91dGVyTGlu'@;
put 'ayIsIi9zeXN0ZW0iLCJjbHJEcm9wZG93bkl0ZW0iLCIiXSxbImhyZWYiLCIuLi4iLCJjbHJEcm9wZG93bkl0ZW0iLCIiLDMsImNsaWNrIl0sWyJzaGFwZSIsImxvZ291dCIsMSwiY2xyLWxvZ291dCJdLFsxLCJjb3B5UmlnaHQiXSxbInRhcmdldCIsIl9ibGFuayIsImhyZWYiLCJodHRwczov'@;
put 'L2RvY3MuZGF0YWNvbnRyb2xsZXIuaW8iLCJjbHJEcm9wZG93bkl0ZW0iLCIiXSxbMSwiZHJvcGRvd24tdGV4dCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihkLGgpezEmZCYmKGRlKDAsImRpdiIsMSkoMSwiZGl2IiwyKSxndCgyLElXZSwxLDAsImNkcy1pY29uIiwzKSgzLFJXZSwxLDAsImNkcy1p'@;
put 'Y29uIiw0KSxoZSgpLEd0KDQsImFwcC1sb2FkaW5nLWluZGljYXRvciIpLGRlKDUsImNsci1kcm9wZG93biIsNSkoNiwiYnV0dG9uIiw2KSg3LCJzcGFuIiksTGUoOCksaGUoKSxndCg5LExXZSwyLDEsInNwYW4iLDcpKDEwLE9XZSwyLDMsInNwYW4iLDgpKDExLFBXZSwyLDMsInNwYW4iLDkp'@;
put 'KDEyLEZXZSwxLDAsImNsci1pY29uIiwxMCksaGUoKSxndCgxMyxOV2UsMjMsMywiY2xyLWRyb3Bkb3duLW1lbnUiLDExKSxoZSgpKCkpLDImZCYmKGZlKDIpLE1lKCJuZ0lmIiwhaC5kYXJrTW9kZS52YWx1ZSksZmUoKSxNZSgibmdJZiIsISFoLmRhcmtNb2RlLnZhbHVlKSxmZSg1KSx3ciho'@;
put 'LnVzZXJOYW1lKSxmZSgpLE1lKCJuZ0lmIiwiTm90IGxvZ2dlZCBpbiIhPT1oLnVzZXJOYW1lJiZoLmlzVml5YSksZmUoKSxNZSgibmdJZiIsIWguc2FzanNDb25maWcuZGVidWcpLGZlKCksTWUoIm5nSWYiLGguc2FzanNDb25maWcuZGVidWcpLGZlKCksTWUoIm5nSWYiLCFoLmlzVml5YSkp'@;
put 'fSxkZXBlbmRlbmNpZXM6W2JhLE1kLG5sLCRzLGMxLEhsLHJzLEwyLGRzLElkLEJ5LFNoLHNnLGc3LG03LFZ5LERXZV0sZW5jYXBzdWxhdGlvbjoyfSl9fXJldHVybiBjfSkoKSxkaGU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuYWxlcnRzPW5ldyBXbn1zdGF0aWN7dGhpcy5c'@;
put 'dTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSl9fXJldHVybiBjfSkoKTtmdW5jdGlvbiBCV2UoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJjbHItYWxlcnQi'@;
put 'LDIpLGdpKCJjbHJBbGVydENsb3NlZENoYW5nZSIsZnVuY3Rpb24oaCl7Y29uc3QgZj13dChhKS4kaW1wbGljaXQ7cmV0dXJuIG1pKGYuY2xvc2VkLGgpfHwoZi5jbG9zZWQ9aCksQ3QoaCl9KSxGdCgiY2xyQWxlcnRDbG9zZWRDaGFuZ2UiLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KFJl'@;
put 'KDIpLm9uQWxlcnRDbG9zZSgpKX0pLGRlKDEsImRpdiIsMykoMiwic3BhbiIsNCksTGUoMyksaGUoKSgpKCl9aWYoMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O01lKCJjbHJBbGVydFR5cGUiLGEudHlwZSkoImNsckFsZXJ0QXBwTGV2ZWwiLCEwKSxwaSgiY2xyQWxlcnRDbG9zZWQiLGEuY2xv'@;
put 'c2VkKSxmZSgzKSxEcigiICIsYS5tZXNzYWdlLCIgIil9fWZ1bmN0aW9uIGpXZShjLGwpe2lmKDEmYyYmKGRlKDAsImNsci1hbGVydHMiKSxndCgxLEJXZSw0LDQsImNsci1hbGVydCIsMSksaGUoKSksMiZjKXtjb25zdCBhPVJlKCk7ZmUoKSxNZSgibmdGb3JPZiIsYS5hbGVydHMpfX1sZXQg'@;
put 'eldlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5fYWxlcnRzU2VydmljZT1hLHRoaXMuYWxlcnRzPVtdLHRoaXMuaGFzT3BlbkFsZXJ0PSExLHRoaXMuYWxlcnRzU3ViPW5ldyBxdH1uZ09uSW5pdCgpe3RoaXMuYWxlcnRzU3ViPXRoaXMuX2FsZXJ0c1NlcnZpY2UuYWxlcnRz'@;
put 'LnN1YnNjcmliZShhPT57dGhpcy5hbGVydHMucHVzaChhKSx0aGlzLmhhc09wZW5BbGVydD0hMCxhLmVyciYmY29uc29sZS5lcnJvcihhLmVycil9KX1vbkFsZXJ0Q2xvc2UoKXt0aGlzLmhhc09wZW5BbGVydD10aGlzLmFsZXJ0cy5zb21lKGE9PiFhLmNsb3NlZCl9c3RhdGlje3RoaXMuXHUw'@;
put 'Mjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoR2UoZGhlKSl9fXN0YXRpY3t0aGlzLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAtYWxlcnRzIl1dLGRlY2xzOjEsdmFyczoxLGNvbnN0czpbWzQsIm5nSWYiXSxbMywiY2xyQWxlcnRUeXBlIiwiY2xyQWxl'@;
put 'cnRBcHBMZXZlbCIsImNsckFsZXJ0Q2xvc2VkIiwiY2xyQWxlcnRDbG9zZWRDaGFuZ2UiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFszLCJjbHJBbGVydENsb3NlZENoYW5nZSIsImNsckFsZXJ0VHlwZSIsImNsckFsZXJ0QXBwTGV2ZWwiLCJjbHJBbGVydENsb3NlZCJdLFsxLCJhbGVydC1pdGVt'@;
put 'Il0sWzEsImFsZXJ0LXRleHQiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZCxoKXsxJmQmJmd0KDAsaldlLDIsMSwiY2xyLWFsZXJ0cyIsMCksMiZkJiZNZSgibmdJZiIsaC5oYXNPcGVuQWxlcnQpfSxkZXBlbmRlbmNpZXM6W25zLGJhLEp4LCRkZSxReF0sZW5jYXBzdWxhdGlvbjoyfSl9fXJldHVy'@;
put 'biBjfSkoKSxwTz0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5jbGFzc2VzPSIifW5nT25Jbml0KCl7fXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1si'@;
put 'Y29udGFjdC1saW5rIl1dLGlucHV0czp7Y2xhc3NlczoiY2xhc3NlcyJ9LGRlY2xzOjIsdmFyczozLGNvbnN0czpbWyJocmVmIiwibWFpbHRvOnN1cHBvcnRAZGF0YWNvbnRyb2xsZXIuaW8/c3ViamVjdD1MaWNlbmNlIiwzLCJuZ0NsYXNzIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGQsaCl7MSZk'@;
put 'JiYoZGUoMCwiYSIsMCksTGUoMSwic3VwcG9ydEBkYXRhY29udHJvbGxlci5pbyIpLGhlKCkpLDImZCYmKFRyKCJ1bnNldCIsIiIhPT1oLmNsYXNzZXMpLE1lKCJuZ0NsYXNzIixoLmNsYXNzZXMpKX0sZGVwZW5kZW5jaWVzOlt3dV0sZW5jYXBzdWxhdGlvbjoyfSl9fXJldHVybiBjfSkoKSxo'@;
put 'aGU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMub3B0aW9uc1N1YmplY3QkPW5ldyBXbix0aGlzLnJlc3VsdENoYW5nZSQ9bmV3IFdufW9wZW4oYSl7cmV0dXJuIHRoaXMub3B0aW9uc1N1YmplY3QkLm5leHQoe29wZW46ITAsLi4uYX0pLHRoaXMucmVzdWx0Q2hhbmdlJD1uZXcg'@;
put 'V24sdGhpcy5yZXN1bHRDaGFuZ2UkLmFzT2JzZXJ2YWJsZSgpfWNsb3NlKGEpe3RoaXMub3B0aW9uc1N1YmplY3QkLm5leHQoe29wZW46ITF9KSx0aGlzLnJlc3VsdENoYW5nZSQubmV4dCh7cGFzc3dvcmQ6YX0pLHRoaXMucmVzdWx0Q2hhbmdlJC5jb21wbGV0ZSgpfXN0YXRpY3t0aGlzLlx1'@;
put 'MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KX19cmV0dXJuIGN9KSgpO2Z1bmN0aW9uIFVXZShjLGwpezEmYyYmKGRlKDAsInAiLDEzKSxM'@;
put 'ZSgxLCIgU29ycnkgdGhhdCBkaWRuJ3Qgd29yaywgdHJ5IGFnYWluLiAiKSxoZSgpKX1mdW5jdGlvbiBaV2UoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJkaXYiLDIpKDEsImNsci1tb2RhbCIsMykoMiwiaDMiLDQpLExlKDMsIiBQYXNzd29yZCBQcm90ZWN0ZWQgRmlsZSAiKSxo'@;
put 'ZSgpLGRlKDQsImRpdiIsNSkoNSwicCIsNiksTGUoNiwiUGxlYXNlIGVudGVyIHBhc3N3b3JkOiIpLGhlKCksZGUoNywiaW5wdXQiLDcsMCksZ2koIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9UmUoKTtyZXR1cm4gbWkoZi5wYXNzd29yZElucHV0LGgpfHwoZi5w'@;
put 'YXNzd29yZElucHV0PWgpLEN0KGgpfSksaGUoKSgpLGRlKDksImRpdiIsOCkoMTAsImRpdiIpLGd0KDExLFVXZSwyLDAsInAiLDkpLGhlKCksZGUoMTIsImRpdiIsMTApKDEzLCJidXR0b24iLDExKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KFJlKCkuY2xvc2UoKSl9'@;
put 'KSxMZSgxNCwiIENhbmNlbCAiKSxoZSgpLGRlKDE1LCJidXR0b24iLDEyKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1oYSg4KTtyZXR1cm4gQ3QoUmUoKS5jbG9zZShoLnZhbHVlKSl9KSxMZSgxNiwiIFVubG9jayAiKSxoZSgpKCkoKSgpKCl9aWYoMiZjKXtjb25zdCBh'@;
put 'PWwubmdJZixkPWhhKDgpLGg9UmUoKTtmZSgpLE1lKCJjbHJNb2RhbE9wZW4iLGEub3BlbikoImNsck1vZGFsU2l6ZSIsIm1kIikoImNsck1vZGFsQ2xvc2FibGUiLCExKSxmZSg2KSxwaSgibmdNb2RlbCIsaC5wYXNzd29yZElucHV0KSxmZSg0KSxNZSgibmdJZiIsYS5lcnJvciksZmUoNCks'@;
put 'TWUoImRpc2FibGVkIixkLnZhbHVlLmxlbmd0aDwxKX19bGV0IFdXZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMuZXhjZWxQYXNzd29yZE1vZGFsU2VydmljZT1hLHRoaXMub3B0aW9ucyQ9dGhpcy5leGNlbFBhc3N3b3JkTW9kYWxTZXJ2aWNlLm9wdGlvbnNTdWJqZWN0JCx0'@;
put 'aGlzLmZpbGVVbmxvY2tFcnJvcj0hMSx0aGlzLnBhc3N3b3JkSW5wdXQ9IiJ9Y2xvc2UoYSl7dGhpcy5wYXNzd29yZElucHV0PSIiLHRoaXMuZXhjZWxQYXNzd29yZE1vZGFsU2VydmljZS5jbG9zZShhKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxj'@;
put 'KShHZShoaGUpKX19c3RhdGlje3RoaXMuXHUwMjc1Y21wPVZyKHt0eXBlOmMsc2VsZWN0b3JzOltbImFwcC1leGNlbC1wYXNzd29yZC1tb2RhbCJdXSxkZWNsczoyLHZhcnM6Myxjb25zdHM6W1siZmlsZVBhc3N3b3JkSW5wdXQiLCIiXSxbImNsYXNzIiwiZXhjZWwtcGFzc3dvcmQtcm9vdCIs'@;
put 'NCwibmdJZiJdLFsxLCJleGNlbC1wYXNzd29yZC1yb290Il0sWzMsImNsck1vZGFsT3BlbiIsImNsck1vZGFsU2l6ZSIsImNsck1vZGFsQ2xvc2FibGUiXSxbMSwibW9kYWwtdGl0bGUiLCJjZW50ZXIiLCJ0ZXh0LWNlbnRlciIsImNvbG9yLWRhcmtlci1ncmF5Il0sWzEsIm1vZGFsLWJvZHki'@;
put 'LCJkLWZsZXgiLCJjbHItanVzdGlmeS1jb250ZW50LWNlbnRlciJdLFsxLCJtLTAiXSxbImRhdGEtbHBpZ25vcmUiLCJ0cnVlIiwiYXV0b2NvbXBsZXRlIiwib2ZmIiwiaWQiLCJmaWxlUGFzc3dvcmRJbnB1dCIsInR5cGUiLCJ0ZXh0IiwxLCJjbHItaW5wdXQiLCJkaXNhYmxlLXBhc3N3b3Jk'@;
put 'LW1hbmFnZXIiLDMsIm5nTW9kZWxDaGFuZ2UiLCJuZ01vZGVsIl0sWzEsIm1vZGFsLWZvb3RlciJdLFsiY2xhc3MiLCJtLTAgY29sb3ItcmVkIiw0LCJuZ0lmIl0sWzEsImJ1dHRvbnMiXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1vdXRsaW5lIiwzLCJjbGljayJd'@;
put 'LFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLXN1Y2Nlc3Mtb3V0bGluZSIsMywiY2xpY2siLCJkaXNhYmxlZCJdLFsxLCJtLTAiLCJjb2xvci1yZWQiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZCxoKXsxJmQmJihndCgwLFpXZSwxNyw2LCJkaXYiLDEpLGVsKDEsImFzeW5j'@;
put 'IikpLDImZCYmTWUoIm5nSWYiLERjKDEsMSxoLm9wdGlvbnMkKSl9LGRlcGVuZGVuY2llczpbYmEscWwsbmwsJHMsb3UsS3UsRU1dLGVuY2Fwc3VsYXRpb246Mn0pfX1yZXR1cm4gY30pKCksdEU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuZmlsZU92ZXI9ITEsdGhpcy5maWxl'@;
put 'RHJvcHBlZD1uZXcgS3IsdGhpcy5maWxlRHJhZ2dlZE92ZXI9bmV3IEtyfW9uRHJhZ092ZXIoYSl7YS5wcmV2ZW50RGVmYXVsdCgpLGEuc3RvcFByb3BhZ2F0aW9uKCksdGhpcy5jb250YWluc0ZpbGVzKGEpJiYhdGhpcy5maWxlT3ZlciYmKHRoaXMuZmlsZU92ZXI9ITAsdGhpcy5maWxlRHJh'@;
put 'Z2dlZE92ZXIuZW1pdCgpKX1vbkRyYWdMZWF2ZShhKXthLnByZXZlbnREZWZhdWx0KCksYS5zdG9wUHJvcGFnYXRpb24oKSx0aGlzLmZpbGVPdmVyPSExfW9uZHJvcChhKXthLnByZXZlbnREZWZhdWx0KCksYS5zdG9wUHJvcGFnYXRpb24oKSx0aGlzLmZpbGVPdmVyPSExO2NvbnN0IGQ9YS5k'@;
put 'YXRhVHJhbnNmZXIuZmlsZXM7ZC5sZW5ndGg+MCYmdGhpcy5maWxlRHJvcHBlZC5lbWl0KGQpfWNvbnRhaW5zRmlsZXMoYSl7aWYoYSYmYS5kYXRhVHJhbnNmZXImJmEuZGF0YVRyYW5zZmVyLnR5cGVzKWZvcihsZXQgZD0wO2Q8YS5kYXRhVHJhbnNmZXIudHlwZXMubGVuZ3RoO2QrKylpZigi'@;
put 'RmlsZXMiPT1hLmRhdGFUcmFuc2Zlci50eXBlc1tkXSlyZXR1cm4hMH1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsImFwcERyYWdOZHJvcCIsIiJdXSxob3N0'@;
put 'VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihkLGgpezEmZCYmRnQoImRyYWdvdmVyIixmdW5jdGlvbih2KXtyZXR1cm4gaC5vbkRyYWdPdmVyKHYpfSkoImRyYWdsZWF2ZSIsZnVuY3Rpb24odil7cmV0dXJuIGgub25EcmFnTGVhdmUodil9KSgiZHJvcCIsZnVuY3Rpb24odil7cmV0dXJu'@;
put 'IGgub25kcm9wKHYpfSksMiZkJiZUcigiZmlsZW92ZXIiLGguZmlsZU92ZXIpfSxvdXRwdXRzOntmaWxlRHJvcHBlZDoiZmlsZURyb3BwZWQiLGZpbGVEcmFnZ2VkT3ZlcjoiZmlsZURyYWdnZWRPdmVyIn19KX19cmV0dXJuIGN9KSgpO2NvbnN0IGZoZT0oKT0+W107ZnVuY3Rpb24gWVdlKGMs'@;
put 'bCl7MSZjJiYoZGUoMCwicCIsNiksTGUoMSwiTm8gcmVxdWVzdHMgbWFkZSIpLGhlKCkpfWZ1bmN0aW9uIEdXZShjLGwpezEmYyYmKGRlKDAsInNwYW4iKSxHdCgxLCJjbHItaWNvbiIsMTMpLGhlKCkpfWZ1bmN0aW9uICRXZShjLGwpezEmYyYmKGRlKDAsInNwYW4iKSxHdCgxLCJjbHItaWNv'@;
put 'biIsMTQpLGhlKCkpfWZ1bmN0aW9uIEtXZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImNsci10cmVlLW5vZGUiLDIyKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7Y29uc3QgaD13dChhKS4kaW1wbGljaXQsZj1SZSgzKS5pbmRleDtyZXR1cm4gQ3QoUmUoMikuZ29Ub0xvZ0xpbmUo'@;
put 'aCwicmVxdWVzdF8iK2YsImVycm9yIikpfSksZGUoMSwiYnV0dG9uIiwyMyksTGUoMiksaGUoKSgpfWlmKDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtmZSgyKSxEcigiICIsYSwiICIpfX1mdW5jdGlvbiBxV2UoYyxsKXtpZigxJmMmJihkZSgwLCJjbHItdHJlZS1ub2RlIiwxOSksR3QoMSwi'@;
put 'Y2xyLWljb24iLDIwKSxMZSgyKSxndCgzLEtXZSwzLDEsImNsci10cmVlLW5vZGUiLDIxKSxoZSgpKSwyJmMpe2NvbnN0IGE9UmUoMikuJGltcGxpY2l0O2ZlKDIpLERyKCIgRXJyb3JzICgiLGEubG9nRXJyb3JzLmxlbmd0aCwiKSAiKSxmZSgpLE1lKCJuZ0Zvck9mIixhLmxvZ0Vycm9yc3x8'@;
put 'R3MoMixmaGUpKX19ZnVuY3Rpb24gWFdlKGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiY2xyLXRyZWUtbm9kZSIsMjIpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtjb25zdCBoPXd0KGEpLiRpbXBsaWNpdCxmPVJlKDMpLmluZGV4O3JldHVybiBDdChSZSgyKS5nb1RvTG9nTGluZSho'@;
put 'LCJyZXF1ZXN0XyIrZiwid2FybmluZyIpKX0pLGRlKDEsImJ1dHRvbiIsMjMpLExlKDIpLGhlKCkoKX1pZigyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7ZmUoMiksRHIoIiAiLGEsIiAiKX19ZnVuY3Rpb24gSldlKGMsbCl7aWYoMSZjJiYoZGUoMCwiY2xyLXRyZWUtbm9kZSIsMTkpLEd0KDEs'@;
put 'ImNsci1pY29uIiwyNCksTGUoMiksZ3QoMyxYV2UsMywxLCJjbHItdHJlZS1ub2RlIiwyMSksaGUoKSksMiZjKXtjb25zdCBhPVJlKDIpLiRpbXBsaWNpdDtmZSgyKSxEcigiIFdhcm5pbmdzICgiLGEubG9nV2FybmluZ3MubGVuZ3RoLCIpICIpLGZlKCksTWUoIm5nRm9yT2YiLGEubG9nV2Fy'@;
put 'bmluZ3N8fEdzKDIsZmhlKSl9fWZ1bmN0aW9uIFFXZShjLGwpezEmYyYmR3QoMCwiZGl2IiwyNSksMiZjJiZNZSgiaW5uZXJIVE1MIixSZSgyKS4kaW1wbGljaXQubG9nRmlsZSxWNCl9ZnVuY3Rpb24gZVllKGMsbCl7MSZjJiZHdCgwLCJkaXYiLDI2KSwyJmMmJk1lKCJ0ZXh0Q29udGVudCIs'@;
put 'UmUoMikuJGltcGxpY2l0LmxvZ0ZpbGUpfWZ1bmN0aW9uIHRZZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImJ1dHRvbiIsMjcpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPVJlKDIpLiRpbXBsaWNpdDtyZXR1cm4gQ3QoUmUoMikuZG93bmxvYWRMb2coaC5s'@;
put 'b2dGaWxlKSl9KSxMZSgxLCIgRG93bmxvYWQgIiksaGUoKX19ZnVuY3Rpb24gblllKGMsbCl7aWYoMSZjJiYoZGUoMCwiY2xyLXRhYi1jb250ZW50IikoMSwiY2xyLXRyZWUiKSxndCgyLHFXZSw0LDMsImNsci10cmVlLW5vZGUiLDE1KSgzLEpXZSw0LDMsImNsci10cmVlLW5vZGUiLDE1KSxo'@;
put 'ZSgpLGd0KDQsUVdlLDEsMSwiZGl2IiwxNikoNSxlWWUsMSwxLCJkaXYiLDE3KSg2LHRZZSwyLDAsImJ1dHRvbiIsMTgpLGhlKCkpLDImYyl7Y29uc3QgYT1SZSgpLiRpbXBsaWNpdCxkPVJlKDIpO2ZlKDIpLE1lKCJuZ0lmIixhLmxvZ0Vycm9ycyksZmUoKSxNZSgibmdJZiIsYS5sb2dXYXJu'@;
put 'aW5ncyksZmUoKSxNZSgibmdJZiIsIlNBU1ZJWUEiIT09ZC5zZXJ2ZXJUeXBlKSxmZSgpLE1lKCJuZ0lmIiwiU0FTVklZQSI9PT1kLnNlcnZlclR5cGUpLGZlKCksTWUoIm5nSWYiLChudWxsPT1hLmxvZ0ZpbGU/bnVsbDphLmxvZ0ZpbGUubGVuZ3RoKT4wKX19ZnVuY3Rpb24gclllKGMsbCl7'@;
put 'aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiYnV0dG9uIiwyNyksRnQoImNsaWNrIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9UmUoMikuJGltcGxpY2l0O3JldHVybiBDdChSZSgyKS5kb3dubG9hZFNvdXJjZUNvZGUoaC5zb3VyY2VDb2RlKSl9KSxMZSgxLCIgRG93bmxvYWQgIiksaGUo'@;
put 'KX19ZnVuY3Rpb24gaVllKGMsbCl7aWYoMSZjJiYoZGUoMCwiY2xyLXRhYi1jb250ZW50IikoMSwiZGl2IiwyOCksTGUoMiksaGUoKSxndCgzLHJZZSwyLDAsImJ1dHRvbiIsMTgpLGhlKCkpLDImYyl7Y29uc3QgYT1SZSgpLiRpbXBsaWNpdDtmZSgyKSx3cihhLnNvdXJjZUNvZGUpLGZlKCks'@;
put 'TWUoIm5nSWYiLChudWxsPT1hLnNvdXJjZUNvZGU/bnVsbDphLnNvdXJjZUNvZGUubGVuZ3RoKT4wKX19ZnVuY3Rpb24gYVllKGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiYnV0dG9uIiwyNyksRnQoImNsaWNrIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9UmUoMikuJGltcGxp'@;
put 'Y2l0O3JldHVybiBDdChSZSgyKS5kb3dubG9hZEdlbmVyYXRlZENvZGUoaC5nZW5lcmF0ZWRDb2RlKSl9KSxMZSgxLCIgRG93bmxvYWQgIiksaGUoKX19ZnVuY3Rpb24gb1llKGMsbCl7aWYoMSZjJiYoZGUoMCwiY2xyLXRhYi1jb250ZW50IikoMSwiZGl2IiwyOCksTGUoMiksaGUoKSxndCgz'@;
put 'LGFZZSwyLDAsImJ1dHRvbiIsMTgpLGhlKCkpLDImYyl7Y29uc3QgYT1SZSgpLiRpbXBsaWNpdDtmZSgyKSxEcigiICIsYS5nZW5lcmF0ZWRDb2RlLCIgIiksZmUoKSxNZSgibmdJZiIsKG51bGw9PWEuZ2VuZXJhdGVkQ29kZT9udWxsOmEuZ2VuZXJhdGVkQ29kZS5sZW5ndGgpPjApfX1mdW5j'@;
put 'dGlvbiBzWWUoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJkaXYiLDM0KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7Y29uc3QgaD13dChhKS4kaW1wbGljaXQ7cmV0dXJuIEN0KFJlKDMpLiRpbXBsaWNpdC5zZWxlY3RlZFRhYmxlPWgua2V5KX0pLExlKDEpLGhlKCl9aWYoMiZjKXtj'@;
put 'b25zdCBhPWwuJGltcGxpY2l0O1RyKCJzZWxlY3RlZCIsUmUoMykuJGltcGxpY2l0LnNlbGVjdGVkVGFibGU9PT1hLmtleSksZmUoKSxEcigiICIsYS5rZXksIiAiKX19ZnVuY3Rpb24gbFllKGMsbCl7aWYoMSZjJiYoZGUoMCwiY2xyLWRyb3Bkb3duLW1lbnUiKSxndCgxLHNZZSwyLDMsImRp'@;
put 'diIsMzMpLGVsKDIsImtleXZhbHVlIiksaGUoKSksMiZjKXtjb25zdCBhPVJlKDIpLiRpbXBsaWNpdDtmZSgpLE1lKCJuZ0Zvck9mIixEYygyLDEsYS5TQVNXT1JLKSl9fWZ1bmN0aW9uIGNZZShjLGwpe2lmKDEmYyYmKGRlKDAsInAiLDM4KSgxLCJzdHJvbmciKSxMZSgyKSxoZSgpKCkpLDIm'@;
put 'Yyl7Y29uc3QgYT1SZSgzKS4kaW1wbGljaXQ7ZmUoMiksRHIoIiIsYS5zZWxlY3RlZFRhYmxlLCIgKGZpcnN0IDEwIHJvd3MpICIpfX1mdW5jdGlvbiB1WWUoYyxsKXtpZigxJmMmJihkZSgwLCJ0aCIpLExlKDEpLGhlKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtmZSgpLERyKCIgIixh'@;
put 'LmtleSwiICIpfX1mdW5jdGlvbiBkWWUoYyxsKXtpZigxJmMmJihkZSgwLCJ0ZCIpLExlKDEpLGhlKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdCxkPVJlKCkuJGltcGxpY2l0O2ZlKCksRHIoIiAiLGRbYS5rZXldLCIgIil9fWZ1bmN0aW9uIGhZZShjLGwpe2lmKDEmYyYmKGRlKDAsInRy'@;
put 'IiksZ3QoMSxkWWUsMiwxLCJ0ZCIsNDApLGVsKDIsImtleXZhbHVlIiksaGUoKSksMiZjKXtjb25zdCBhPVJlKDQpLiRpbXBsaWNpdDtmZSgpLE1lKCJuZ0Zvck9mIixEYygyLDEsYS5TQVNXT1JLW2Euc2VsZWN0ZWRUYWJsZV0uZmlyc3QxMHJvd3NbMF0pKX19ZnVuY3Rpb24gZlllKGMsbCl7'@;
put 'aWYoMSZjJiYoZGUoMCwidGFibGUiLDM5KSgxLCJ0aGVhZCIpKDIsInRyIiksZ3QoMyx1WWUsMiwxLCJ0aCIsNDApLGVsKDQsImtleXZhbHVlIiksaGUoKSgpLGRlKDUsInRib2R5IiksZ3QoNixoWWUsMywzLCJ0ciIsNDApLGhlKCkoKSksMiZjKXtjb25zdCBhPVJlKDMpLiRpbXBsaWNpdDtm'@;
put 'ZSgzKSxNZSgibmdGb3JPZiIsRGMoNCwyLGEuU0FTV09SS1thLnNlbGVjdGVkVGFibGVdLmZpcnN0MTByb3dzWzBdKSksZmUoMyksTWUoIm5nRm9yT2YiLGEuU0FTV09SS1thLnNlbGVjdGVkVGFibGVdLmZpcnN0MTByb3dzKX19ZnVuY3Rpb24gcFllKGMsbCl7aWYoMSZjJiYoZGUoMCwiY2xy'@;
put 'LXRhYi1jb250ZW50IiksZ3QoMSxjWWUsMywxLCJwIiwzNSksZGUoMiwiZGl2IiwzNiksZ3QoMyxmWWUsNyw0LCJ0YWJsZSIsMzcpLGhlKCkoKSksMiZjKXtjb25zdCBhPVJlKDIpLiRpbXBsaWNpdDtmZSgpLE1lKCJuZ0lmIixhLnNlbGVjdGVkVGFibGUpLGZlKDIpLE1lKCJuZ0lmIixhLnNl'@;
put 'bGVjdGVkVGFibGUpfX1mdW5jdGlvbiBnWWUoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJjbHItdGFiIikoMSwiY2xyLWRyb3Bkb3duIiwyOSkoMiwiYnV0dG9uIiwzMCksTGUoMywiIFNBUyBXb3JrIFRhYmxlcyAiKSxHdCg0LCJjbHItaWNvbiIsMzEpLGhlKCksZ3QoNSxsWWUs'@;
put 'MywzLCJjbHItZHJvcGRvd24tbWVudSIsMzIpLGhlKCksZ3QoNixwWWUsNCwyLCJuZy10ZW1wbGF0ZSIsMTIpLGdpKCJjbHJJZkFjdGl2ZUNoYW5nZSIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1SZSgzKTtyZXR1cm4gbWkoZi50YWJsZXNBY3RpdmUsaCl8fChmLnRhYmxlc0FjdGl2ZT1o'@;
put 'KSxDdChoKX0pLGhlKCl9aWYoMiZjKXtjb25zdCBhPVJlKDMpO2ZlKCksTWUoImNsckNsb3NlTWVudU9uSXRlbUNsaWNrIiwhMCksZmUoNSkscGkoImNscklmQWN0aXZlIixhLnRhYmxlc0FjdGl2ZSl9fWZ1bmN0aW9uIG1ZZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImNsci1z'@;
put 'dGFjay1ibG9jayIsOCkoMSwiY2xyLXN0YWNrLWxhYmVsIiksTGUoMiksZGUoMywic3BhbiIsOSksZ3QoNCxHV2UsMiwwLCJzcGFuIiw1KSg1LCRXZSwyLDAsInNwYW4iLDUpLGhlKCkoKSxkZSg2LCJjbHItc3RhY2stY29udGVudCIpLExlKDcpLGhlKCksZGUoOCwiY2xyLXN0YWNrLWJsb2Nr'@;
put 'IiwxMCkoOSwiY2xyLXN0YWNrLWNvbnRlbnQiKSgxMCwiY2xyLXRhYnMiKSgxMSwiY2xyLXRhYiIpKDEyLCJidXR0b24iLDExKSxMZSgxMywiU0FTIExvZyIpLGhlKCksZ3QoMTQsblllLDcsNSwibmctdGVtcGxhdGUiLDEyKSxnaSgiY2xySWZBY3RpdmVDaGFuZ2UiLGZ1bmN0aW9uKGgpe3d0'@;
put 'KGEpO2NvbnN0IGY9UmUoMik7cmV0dXJuIG1pKGYuc2FzTG9nQWN0aXZlLGgpfHwoZi5zYXNMb2dBY3RpdmU9aCksQ3QoaCl9KSxoZSgpLGRlKDE1LCJjbHItdGFiIikoMTYsImJ1dHRvbiIsMTEpLExlKDE3LCJTQVMgU291cmNlIENvZGUiKSxoZSgpLGd0KDE4LGlZZSw0LDIsIm5nLXRlbXBs'@;
put 'YXRlIiwxMiksZ2koImNscklmQWN0aXZlQ2hhbmdlIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPVJlKDIpO3JldHVybiBtaShmLnNhc1NvdXJjZUNvZGVBY3RpdmUsaCl8fChmLnNhc1NvdXJjZUNvZGVBY3RpdmU9aCksQ3QoaCl9KSxoZSgpLGRlKDE5LCJjbHItdGFiIikoMjAsImJ1dHRv'@;
put 'biIsMTEpLExlKDIxLCJTQVMgR2VuZXJhdGVkIENvZGUiKSxoZSgpLGd0KDIyLG9ZZSw0LDIsIm5nLXRlbXBsYXRlIiwxMiksZ2koImNscklmQWN0aXZlQ2hhbmdlIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPVJlKDIpO3JldHVybiBtaShmLnNhc0dlbmVyYXRlZENvZGVBY3RpdmUsaCl8'@;
put 'fChmLnNhc0dlbmVyYXRlZENvZGVBY3RpdmU9aCksQ3QoaCl9KSxoZSgpLGd0KDIzLGdZZSw3LDIsImNsci10YWIiLDUpLGhlKCkoKSgpKCl9aWYoMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0LGQ9bC5pbmRleCxoPVJlKDIpO01lKCJpZCIsInJlcXVlc3RfIitkKSgiY2xyU3RhY2tWaWV3TGV2'@;
put 'ZWwiLDEpLGZlKDIpLERyKCIgIixhLnNlcnZpY2VMaW5rLCIgIiksZmUoMiksTWUoIm5nSWYiLChudWxsPT1hLmxvZ1dhcm5pbmdzP251bGw6YS5sb2dXYXJuaW5ncy5sZW5ndGgpPjApLGZlKCksTWUoIm5nSWYiLChudWxsPT1hLmxvZ0Vycm9ycz9udWxsOmEubG9nRXJyb3JzLmxlbmd0aCk+'@;
put 'MCksZmUoMiksd3IoYS5wYXJzZWRUaW1lc3RhbXApLGZlKDcpLHBpKCJjbHJJZkFjdGl2ZSIsaC5zYXNMb2dBY3RpdmUpLGZlKDQpLHBpKCJjbHJJZkFjdGl2ZSIsaC5zYXNTb3VyY2VDb2RlQWN0aXZlKSxmZSg0KSxwaSgiY2xySWZBY3RpdmUiLGguc2FzR2VuZXJhdGVkQ29kZUFjdGl2ZSks'@;
put 'ZmUoKSxNZSgibmdJZiIsYS5TQVNXT1JLKX19ZnVuY3Rpb24gdlllKGMsbCl7aWYoMSZjJiYoZGUoMCwiY2xyLXN0YWNrLXZpZXciKSxndCgxLG1ZZSwyNCwxMCwiY2xyLXN0YWNrLWJsb2NrIiw3KSxoZSgpKSwyJmMpe2NvbnN0IGE9UmUoKTtmZSgpLE1lKCJuZ0Zvck9mIixhLnNhc2pzUmVx'@;
put 'dWVzdHMpfX1sZXQgYlllPSgoKT0+e2NsYXNzIGN7Z2V0IG9wZW5lZCgpe3JldHVybiB0aGlzLl9vcGVuZWR9c2V0IG9wZW5lZChhKXt0aGlzLl9vcGVuZWQ9YSxhJiZ0aGlzLm1vZGFsT3BlbmVkKCksdGhpcy5sb2dnZXJTZXJ2aWNlLmxvZyh0aGlzLnNhc2pzUmVxdWVzdHMpfWNvbnN0cnVj'@;
put 'dG9yKGEsZCxoKXt0aGlzLnNhc1NlcnZpY2U9YSx0aGlzLmxvZ2dlclNlcnZpY2U9ZCx0aGlzLmhlbHBlclNlcnZpY2U9aCx0aGlzLl9vcGVuZWQ9ITEsdGhpcy5vcGVuZWRDaGFuZ2U9bmV3IEtyLHRoaXMuc2FzTG9nQWN0aXZlPSEwLHRoaXMuc2FzU291cmNlQ29kZUFjdGl2ZT0hMSx0aGlz'@;
put 'LnNhc0dlbmVyYXRlZENvZGVBY3RpdmU9ITEsdGhpcy50YWJsZXNBY3RpdmU9ITEsdGhpcy5zYXNqc0NvbmZpZz10aGlzLnNhc1NlcnZpY2UuZ2V0U2FzanNDb25maWcoKSx0aGlzLnNhc2pzUmVxdWVzdHM9W10sdGhpcy5zYXNqc0NvbmZpZz10aGlzLnNhc1NlcnZpY2UuZ2V0U2FzanNDb25m'@;
put 'aWcoKSx0aGlzLnNlcnZlclR5cGU9dGhpcy5zYXNTZXJ2aWNlLmdldFNlcnZlclR5cGUoKX1uZ09uSW5pdCgpe31wYXJzZUxvZ1RpbWVzdGFtcChhKXtyZXR1cm5gJHt0aGlzLmZvcm1hdFRpbWVzdGFtcChhKX0gJHt0aGlzLnRpbWVzdGFtcEZyb21Ob3coYSl9YH1jdXRBcHBMb2MoYSl7cmV0'@;
put 'dXJuIGEucmVwbGFjZSh0aGlzLnNhc2pzQ29uZmlnLmFwcExvYysiLyIsIiIpfWZvcm1hdFRpbWVzdGFtcChhKXtyZXR1cm4gT28oYSkuZm9ybWF0KCk/T28oYSkuZm9ybWF0KCJkZGRkLCBNTU1NIERvIFlZWVksIGg6bW06c3MgYSIpOmF9dGltZXN0YW1wRnJvbU5vdyhhKXtyZXR1cm4gT28o'@;
put 'YSkuZm9ybWF0KCk/YCAoJHtPbyhhKS5mcm9tTm93KCl9KWA6IiJ9bW9kYWxPcGVuQ2hhbmdlKGEpe3RoaXMub3BlbmVkPWEsdGhpcy5vcGVuZWRDaGFuZ2UuZW1pdCh0aGlzLm9wZW5lZCl9bW9kYWxPcGVuZWQoKXt0aGlzLnNhc2pzUmVxdWVzdHM9dGhpcy5zYXNTZXJ2aWNlLmdldFNhc1Jl'@;
put 'cXVlc3RzKCk7Zm9yKGxldCBhIG9mIHRoaXMuc2FzanNSZXF1ZXN0cyl0aGlzLnBhcnNlRXJyb3JzQW5kV2FybmluZ3MoYSksYS5zZXJ2aWNlTGluaz10aGlzLmN1dEFwcExvYyhhLnNlcnZpY2VMaW5rKSxhLnBhcnNlZFRpbWVzdGFtcD10aGlzLnBhcnNlTG9nVGltZXN0YW1wKGEudGltZXN0'@;
put 'YW1wKX1nb1RvTG9nTGluZShhLGQsaCl7Y29uc3QgZj1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKGAjJHtkfSAubG9nLXdyYXBwZXIuc2FzbG9nYCk7aWYoZilpZigiU0FTVklZQSI9PT10aGlzLnNlcnZlclR5cGUpe2NvbnN0IE09KGYudGV4dENvbnRlbnR8fCIiKS5zcGxpdCgiXG4iKTtsZXQg'@;
put 'RD0tMTtmb3IobGV0IGJlPTA7YmU8TS5sZW5ndGg7YmUrKylpZihNW2JlXS5pbmNsdWRlcyhhKSl7RD1iZTticmVha31pZigtMT09PUQpcmV0dXJuO2NvbnN0IFo9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7Wi5jbGFzc05hbWU9InRlbXAtbGluZS1oZWlnaHQtY2FsYyIsWi50ZXh0'@;
put 'Q29udGVudD0iWCIsZi5hcHBlbmRDaGlsZChaKTtjb25zdCByZT1aLmNsaWVudEhlaWdodDtmLnJlbW92ZUNoaWxkKFopLGYuc2Nyb2xsVG9wPXJlKkQ7Y29uc3QgY2U9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7Y2UuY2xhc3NOYW1lPSJsaW5lLWhpZ2hsaWdodC1vdmVybGF5ICIr'@;
put 'KCJlcnJvciI9PT1oPyJlcnJvci1oaWdobGlnaHQiOiJ3YXJuaW5nLWhpZ2hsaWdodCIpLGNlLmNsYXNzTGlzdC5hZGQoInRlbXAtaGVpZ2h0LXNldHRlciIpLGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgiLS1saW5lLWhlaWdodCIsYCR7cmV9cHhgKSxjZS5j'@;
put 'bGFzc0xpc3QuYWRkKCJsaW5lLXBvc2l0aW9uLXNldHRlciIpLGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgiLS1saW5lLXRvcCIscmUqRCsicHgiKSxmLmFwcGVuZENoaWxkKGNlKSxzZXRUaW1lb3V0KCgpPT57Zi5jb250YWlucyhjZSkmJmYucmVtb3ZlQ2hp'@;
put 'bGQoY2UpfSwzZTMpfWVsc2V7Y29uc3Qgdj1kb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKGAjJHtkfSAubG9nLXdyYXBwZXIuc2FzbG9nIGZvbnRgKTtmb3IobGV0IE0gb2YgQXJyYXkuZnJvbSh2KSlpZihNLnRleHRDb250ZW50Py5pbmNsdWRlcyhhKSl7Zi5zY3JvbGxUb3A9TS5vZmZzZXRU'@;
put 'b3AtZi5vZmZzZXRUb3AsTS5jbGFzc0xpc3QuYWRkKCJoaWdobGlnaHRlZC1saW5lIiksc2V0VGltZW91dCgoKT0+e00uY2xhc3NMaXN0LnJlbW92ZSgiaGlnaGxpZ2h0ZWQtbGluZSIpfSwzZTMpO2JyZWFrfX19cGFyc2VFcnJvcnNBbmRXYXJuaW5ncyhhKXt2YXIgZD10aGlzO3JldHVybiBl'@;
put 'ZShmdW5jdGlvbiooKXtpZighYXx8IWEubG9nRmlsZXx8InN0cmluZyIhPXR5cGVvZiBhLmxvZ0ZpbGV8fHZvaWQgMCE9PWEubG9nRXJyb3JzfHx2b2lkIDAhPT1hLmxvZ1dhcm5pbmdzKXJldHVybjtsZXQgaD1bXSxmPVtdLHY9YS5sb2dGaWxlLnNwbGl0KCJcbiIpLE09Wy4uLnZdO2Zvcihs'@;
put 'ZXQgRD0wO0Q8di5sZW5ndGg7RCsrKXtpZigvPC4qPkVSUk9SL2dtLnRlc3QodltEXSkpe2xldCBaPXZbRF0uc3Vic3RyaW5nKHZbRF0uaW5kZXhPZigiRSIpLHZbRF0ubGVuZ3RoLTEpO2gucHVzaChaKX1lbHNlL15FUlJPUi9nbS50ZXN0KHZbRF0pJiYoaC5wdXNoKHZbRF0pLCJTQVNWSVlB'@;
put 'IiE9PWQuc2VydmVyVHlwZSYmKHZbRF09Jzxmb250IGNsYXNzPSJlcnJvci1saW5lIj4nK3ZbRF0rIjwvZm9udD4iKSk7aWYoLzwuKj5XQVJOSU5HL2dtLnRlc3QodltEXSkpe2xldCBaPXZbRF0uc3Vic3RyaW5nKHZbRF0uaW5kZXhPZigiVyIpLHZbRF0ubGVuZ3RoLTEpO2YucHVzaChaKX1l'@;
put 'bHNlL15XQVJOSU5HL2dtLnRlc3QodltEXSkmJihmLnB1c2godltEXSksIlNBU1ZJWUEiIT09ZC5zZXJ2ZXJUeXBlJiYodltEXT0nPGZvbnQgY2xhc3M9Indhcm5pbmctbGluZSI+Jyt2W0RdKyI8L2ZvbnQ+IikpfWQubG9nZ2VyU2VydmljZS5sb2coZiksIlNBU1ZJWUEiPT09ZC5zZXJ2ZXJU'@;
put 'eXBlJiYoYS5vcmlnaW5hbExvZ0ZpbGU9TS5qb2luKCJcbiIpLGEubG9nRmlsZUxpbmVNYXA9e30saC5mb3JFYWNoKEQ9Pntmb3IobGV0IFo9MDtaPE0ubGVuZ3RoO1orKylpZihNW1pdLmluY2x1ZGVzKEQpKXthLmxvZ0ZpbGVMaW5lTWFwLmVycm9yc3x8KGEubG9nRmlsZUxpbmVNYXAuZXJy'@;
put 'b3JzPXt9KSxhLmxvZ0ZpbGVMaW5lTWFwLmVycm9yc1tEXT1aO2JyZWFrfX0pLGYuZm9yRWFjaChEPT57Zm9yKGxldCBaPTA7WjxNLmxlbmd0aDtaKyspaWYoTVtaXS5pbmNsdWRlcyhEKSl7YS5sb2dGaWxlTGluZU1hcC53YXJuaW5nc3x8KGEubG9nRmlsZUxpbmVNYXAud2FybmluZ3M9e30p'@;
put 'LGEubG9nRmlsZUxpbmVNYXAud2FybmluZ3NbRF09WjticmVha319KSksYS5sb2dGaWxlPXYuam9pbigiXG4iKSxhLmxvZ0Vycm9ycz1oLGEubG9nV2FybmluZ3M9Zn0pKCl9ZG93bmxvYWRMb2coYSl7Y29uc3QgZD0obmV3IERhdGUpLnZhbHVlT2YoKTt0aGlzLmhlbHBlclNlcnZpY2UuZG93'@;
put 'bmxvYWRUZXh0RmlsZShgbG9nRmlsZS0ke2R9YCxhKX1kb3dubG9hZFNvdXJjZUNvZGUoYSl7Y29uc3QgZD0obmV3IERhdGUpLnZhbHVlT2YoKTt0aGlzLmhlbHBlclNlcnZpY2UuZG93bmxvYWRUZXh0RmlsZShgc291cmNlQ29kZS0ke2R9YCxhKX1kb3dubG9hZEdlbmVyYXRlZENvZGUoYSl7'@;
put 'Y29uc3QgZD0obmV3IERhdGUpLnZhbHVlT2YoKTt0aGlzLmhlbHBlclNlcnZpY2UuZG93bmxvYWRUZXh0RmlsZShgZ2VuZXJhdGVkQ29kZS0ke2R9YCxhKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShHZShCcyksR2UoU2QpLEdlKFN1KSl9fXN0'@;
put 'YXRpY3t0aGlzLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAtcmVxdWVzdHMtbW9kYWwiXV0saW5wdXRzOntvcGVuZWQ6Im9wZW5lZCJ9LG91dHB1dHM6e29wZW5lZENoYW5nZToib3BlbmVkQ2hhbmdlIn0sZGVjbHM6OCx2YXJzOjQsY29uc3RzOltbImNsck1vZGFsU2l6'@;
put 'ZSIsInhsIiwxLCJyZXF1ZXN0cy1tb2RhbCIsMywiY2xyTW9kYWxPcGVuQ2hhbmdlIiwiY2xyTW9kYWxPcGVuIl0sWzEsIm1vZGFsLXRpdGxlIl0sWzEsIm10LTAiLCJkLWlubGluZS1ibG9jayJdLFsxLCJtb2RhbC1ib2R5IiwiaC03MHZoIl0sWyJjbGFzcyIsIm5vLXJlcXMiLDQsIm5nSWYi'@;
put 'XSxbNCwibmdJZiJdLFsxLCJuby1yZXFzIl0sWzMsImlkIiwiY2xyU3RhY2tWaWV3TGV2ZWwiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFszLCJpZCIsImNsclN0YWNrVmlld0xldmVsIl0sWzEsIm1sLTEwIl0sWzEsImNvbnRlbnQiXSxbImNsclRhYkxpbmsiLCIiXSxbMywiY2xySWZBY3RpdmVD'@;
put 'aGFuZ2UiLCJjbHJJZkFjdGl2ZSJdLFsic2hhcGUiLCJleGNsYW1hdGlvbi1jaXJjbGUiLDEsIm1iLTUiLCJjb2xvci1ncmVlbiJdLFsic2hhcGUiLCJleGNsYW1hdGlvbi10cmlhbmdsZSIsMSwibWItNSIsImNvbG9yLXJlZCJdLFsiY2xhc3MiLCJlcnItbGlua3MiLDQsIm5nSWYiXSxbImNs'@;
put 'YXNzIiwibG9nLXdyYXBwZXIgc2FzbG9nIiwzLCJpbm5lckhUTUwiLDQsIm5nSWYiXSxbImNsYXNzIiwibG9nLXdyYXBwZXIgc2FzbG9nIHZpeWEiLDMsInRleHRDb250ZW50Iiw0LCJuZ0lmIl0sWyJ0eXBlIiwiYnV0dG9uIiwiY2xhc3MiLCJidG4gYnRuLWxpbmsiLDMsImNsaWNrIiw0LCJu'@;
put 'Z0lmIl0sWzEsImVyci1saW5rcyJdLFsic2hhcGUiLCJleGNsYW1hdGlvbi10cmlhbmdsZSIsMSwiY29sb3ItcmVkIl0sWzMsImNsaWNrIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMywiY2xpY2siXSxbMSwiY2xyLXRyZWVub2RlLWxpbmsiXSxbInNoYXBlIiwiZXhjbGFtYXRpb24tY2lyY2xl'@;
put 'IiwxLCJjb2xvci1ncmVlbiJdLFsxLCJsb2ctd3JhcHBlciIsInNhc2xvZyIsMywiaW5uZXJIVE1MIl0sWzEsImxvZy13cmFwcGVyIiwic2FzbG9nIiwidml5YSIsMywidGV4dENvbnRlbnQiXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1saW5rIiwzLCJjbGljayJdLFsxLCJsb2ct'@;
put 'd3JhcHBlciJdLFsiY2xyVGFiTGluayIsIiIsMSwid29yay10YWJsZXMtZHJvcGRvd24iLDMsImNsckNsb3NlTWVudU9uSXRlbUNsaWNrIl0sWyJjbHJEcm9wZG93blRyaWdnZXIiLCIiXSxbInNoYXBlIiwiY2FyZXQgZG93biJdLFs0LCJjbHJJZk9wZW4iXSxbImNsYXNzIiwiZHJvcGRvd24t'@;
put 'aXRlbSIsImNsckRyb3Bkb3duSXRlbSIsIiIsMywic2VsZWN0ZWQiLCJjbGljayIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWyJjbHJEcm9wZG93bkl0ZW0iLCIiLDEsImRyb3Bkb3duLWl0ZW0iLDMsImNsaWNrIl0sWyJjbGFzcyIsIm10LTEwIiw0LCJuZ0lmIl0sWzEsIm1pbi1oLTUwdmgiXSxb'@;
put 'ImNsYXNzIiwidGFibGUgbXQtMTAiLDQsIm5nSWYiXSxbMSwibXQtMTAiXSxbMSwidGFibGUiLCJtdC0xMCJdLFs0LCJuZ0ZvciIsIm5nRm9yT2YiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZCxoKXsxJmQmJihkZSgwLCJjbHItbW9kYWwiLDApLEZ0KCJjbHJNb2RhbE9wZW5DaGFuZ2UiLGZ1bmN0'@;
put 'aW9uKHYpe3JldHVybiBoLm1vZGFsT3BlbkNoYW5nZSh2KX0pLGRlKDEsImgzIiwxKSxMZSgyLCIgUmVxdWVzdCBIaXN0b3J5ICIpLGRlKDMsInAiLDIpLExlKDQpLGhlKCkoKSxkZSg1LCJkaXYiLDMpLGd0KDYsWVdlLDIsMCwicCIsNCkoNyx2WWUsMiwxLCJjbHItc3RhY2stdmlldyIsNSks'@;
put 'aGUoKSgpKSwyJmQmJihNZSgiY2xyTW9kYWxPcGVuIixoLm9wZW5lZCksZmUoNCksRHIoIkFwcCBMb2NhdGlvbjogIixoLnNhc2pzQ29uZmlnLmFwcExvYywiIiksZmUoMiksTWUoIm5nSWYiLChudWxsPT1oLnNhc2pzUmVxdWVzdHM/bnVsbDpoLnNhc2pzUmVxdWVzdHMubGVuZ3RoKTwxKSxm'@;
put 'ZSgpLE1lKCJuZ0lmIixoLm9wZW5lZCYmKG51bGw9PWguc2FzanNSZXF1ZXN0cz9udWxsOmguc2FzanNSZXF1ZXN0cy5sZW5ndGgpPjApKX0sZGVwZW5kZW5jaWVzOltucyxiYSxDRyxWZGUsd0csTmRlLEVoLFBkLGZnLEhsLG91LEt1LEh5LEwyLF9tLENtLHg3LHdtLHltLFM3LHNnLGc3LG03'@;
put 'LFZ5LHdSXSxlbmNhcHN1bGF0aW9uOjJ9KX19cmV0dXJuIGN9KSgpO2NsYXNzIHlZZXtjb25zdHJ1Y3Rvcigpe3RoaXMuc2FzU2VydmljZT1udWxsLHRoaXMubWVzc2FnZT0iIix0aGlzLmRldGFpbHM9bmV3IHBoZX19Y2xhc3MgcGhle31mdW5jdGlvbiBfWWUoYyxsKXtpZigxJmMmJihkZSgw'@;
put 'LCJwIiw4KSxMZSgxLCIgU0FTIFNlcnZpY2U6ICIpLGRlKDIsInN0cm9uZyIpLExlKDMpLGhlKCkoKSksMiZjKXtjb25zdCBhPVJlKCk7ZmUoMyksd3IoYS5kYXRhLnNhc1NlcnZpY2UpfX1mdW5jdGlvbiB3WWUoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiLDkpKDEsInAiKSgyLCJzdHJvbmci'@;
put 'KSxMZSgzLCJTWVNXQVJOSU5HVEVYVDoiKSxoZSgpLExlKDQpLGhlKCksZGUoNSwicCIpKDYsInN0cm9uZyIpLExlKDcsIlNZU0VSUk9SVEVYVDoiKSxoZSgpLExlKDgpLGhlKCksZGUoOSwicCIpKDEwLCJzdHJvbmciKSxMZSgxMSwiTUFDOiIpLGhlKCksTGUoMTIpLGhlKCkoKSksMiZjKXtj'@;
put 'b25zdCBhPVJlKCk7ZmUoNCksRHIoIiAiLGEuZGF0YS5kZXRhaWxzLlNZU1dBUk5JTkdURVhULCIiKSxmZSg0KSxEcigiICIsYS5kYXRhLmRldGFpbHMuU1lTRVJST1JURVhULCIiKSxmZSg0KSxEcigiICIsYS5kYXRhLmRldGFpbHMuTUFDLCIiKX19ZnVuY3Rpb24gQ1llKGMsbCl7aWYoMSZj'@;
put 'KXtjb25zdCBhPUxuKCk7ZGUoMCwiYnV0dG9uIiwxMCksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChSZSgpLm9wZW5Db25maWd1cmF0b3IoKSl9KSxMZSgxLCIgT3BlbiBjb25maWd1cmF0b3IgIiksaGUoKX19ZnVuY3Rpb24gU1llKGMsbCl7aWYoMSZjKXtjb25zdCBh'@;
put 'PUxuKCk7ZGUoMCwiYnV0dG9uIiwxMCksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChSZSgpLm9wZW5SZXF1ZXN0c01vZGFsKCkpfSksTGUoMSwiIE9wZW4gcmVxdWVzdHMgbW9kYWwgIiksaGUoKX19ZnVuY3Rpb24gTVllKGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7'@;
put 'ZGUoMCwiYnV0dG9uIiwxMCksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChSZSgpLmRvd25sb2FkTG9nKCkpfSksTGUoMSwiIERvd25sb2FkIGxvZyAiKSxoZSgpfX1mdW5jdGlvbiB4WWUoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJidXR0b24iLDEwKSxG'@;
put 'dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KFJlKCkuY2xvc2VBYm9ydE1vZGFsKCkpfSksTGUoMSwiIENsb3NlICIpLGhlKCl9fWZ1bmN0aW9uIEVZZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImJ1dHRvbiIsMTApLEZ0KCJjbGljayIsZnVuY3Rpb24oKXty'@;
put 'ZXR1cm4gd3QoYSksQ3QoUmUoKS5yZWxvYWQoKSl9KSxMZSgxLCIgUmVsb2FkICIpLGhlKCl9fWxldCBUWWU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmKXt0aGlzLmhlbHBlclNlcnZpY2U9YSx0aGlzLmV2ZW50U2VydmljZT1kLHRoaXMuc2FzU2VydmljZT1oLHRoaXMucm91'@;
put 'dGVyPWYsdGhpcy5vbkNvbmZpcm1Nb2RhbENsaWNrPW5ldyBLcix0aGlzLmRhdGE9bmV3IHlZZSx0aGlzLmZvcmNlUmVsb2FkPSExLHRoaXMubW9kYWxFbmFibGVkPSEwLHRoaXMuZGVmYXVsdERhdGE9e21vZGFsVGl0bGU6IkFib3J0IE1lc3NhZ2UiLHNhc1NlcnZpY2U6bnVsbCxtZXNzYWdl'@;
put 'OiIiLGRldGFpbHM6bmV3IHBoZX19bmdPbkluaXQoKXtsZXQgYT17Li4udGhpcy5kZWZhdWx0RGF0YSwuLi50aGlzLmRhdGF9O3RoaXMuZGF0YT1hfXNob3dDb25maWd1cmF0b3JCdXR0b24oYSl7Y29uc3QgZD10aGlzLnNhc1NlcnZpY2UuZ2V0U2FzanNDb25maWcoKTtyZXR1cm4gYT8uaW5j'@;
put 'bHVkZXMoInN0YXJ0dXBzZXJ2aWNlIikmJmQuc2VydmVyVHlwZT09PUIwLlkuU2FzOX1jbG9zZUFib3J0TW9kYWwoKXt0aGlzLm9uQ29uZmlybU1vZGFsQ2xpY2suZW1pdCgpfW9wZW5Db25maWd1cmF0b3IoKXt0aGlzLmV2ZW50U2VydmljZS5zdGFydHVwRGF0YUxvYWRlZCgpLHRoaXMucm91'@;
put 'dGVyLm5hdmlnYXRlQnlVcmwoIi9kZXBsb3kiKSx0aGlzLmNsb3NlQWJvcnRNb2RhbCgpfWRvd25sb2FkTG9nKCl7dGhpcy5oZWxwZXJTZXJ2aWNlLmRvd25sb2FkVGV4dEZpbGUoYCR7dGhpcy5kYXRhLnNhc1NlcnZpY2V9LUxPR2AsdGhpcy5kYXRhLmRldGFpbHM/LkxPR3x8IkVycm9yIHBh'@;
put 'cnNpbmcgdGhlIGxvZyIpfW9wZW5SZXF1ZXN0c01vZGFsKCl7dGhpcy5ldmVudFNlcnZpY2Uub3BlblJlcXVlc3RzTW9kYWwoKX1yZWxvYWQoKXtsb2NhdGlvbi5yZWxvYWQoKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShHZShTdSksR2UodmMp'@;
put 'LEdlKEJzKSxHZShMcykpfX1zdGF0aWN7dGhpcy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siYXBwLWluZm8tbW9kYWwiXV0saW5wdXRzOntkYXRhOiJkYXRhIixmb3JjZVJlbG9hZDoiZm9yY2VSZWxvYWQifSxvdXRwdXRzOntvbkNvbmZpcm1Nb2RhbENsaWNrOiJvbkNvbmZp'@;
put 'cm1Nb2RhbENsaWNrIn0sZGVjbHM6MTMsdmFyczoxMixjb25zdHM6W1siYXBwRHJhZ05kcm9wIiwiIiwxLCJjbHItYWJvcnQtbW9kYWwiLDMsImNsck1vZGFsT3BlbkNoYW5nZSIsImNsck1vZGFsT3BlbiIsImNsck1vZGFsU2l6ZSIsImNsck1vZGFsQ2xvc2FibGUiXSxbMSwibW9kYWwtdGl0'@;
put 'bGUiXSxbImNsYXNzIiwic2FzU2VydmljZSBtdC0wIiw0LCJuZ0lmIl0sWzEsIm1vZGFsLWJvZHkiXSxbMSwiYWJvcnRNc2ciLDMsImlubmVySFRNTCJdLFsiY2xhc3MiLCJzeXN0ZXh0Iiw0LCJuZ0lmIl0sWzEsIm1vZGFsLWZvb3RlciJdLFsidHlwZSIsImJ1dHRvbiIsImNsYXNzIiwiYnRu'@;
put 'IGJ0bi1wcmltYXJ5IiwzLCJjbGljayIsNCwibmdJZiJdLFsxLCJzYXNTZXJ2aWNlIiwibXQtMCJdLFsxLCJzeXN0ZXh0Il0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tcHJpbWFyeSIsMywiY2xpY2siXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZCxoKXsxJmQmJihkZSgwLCJjbHItbW9k'@;
put 'YWwiLDApLGdpKCJjbHJNb2RhbE9wZW5DaGFuZ2UiLGZ1bmN0aW9uKHYpe3JldHVybiBtaShoLm1vZGFsRW5hYmxlZCx2KXx8KGgubW9kYWxFbmFibGVkPXYpLHZ9KSxkZSgxLCJoMyIsMSksTGUoMiksZ3QoMyxfWWUsNCwxLCJwIiwyKSxoZSgpLGRlKDQsImRpdiIsMyksR3QoNSwiZGl2Iiw0'@;
put 'KSxndCg2LHdZZSwxMywzLCJkaXYiLDUpLGhlKCksZGUoNywiZGl2Iiw2KSxndCg4LENZZSwyLDAsImJ1dHRvbiIsNykoOSxTWWUsMiwwLCJidXR0b24iLDcpKDEwLE1ZZSwyLDAsImJ1dHRvbiIsNykoMTEseFllLDIsMCwiYnV0dG9uIiw3KSgxMixFWWUsMiwwLCJidXR0b24iLDcpLGhlKCko'@;
put 'KSksMiZkJiYocGkoImNsck1vZGFsT3BlbiIsaC5tb2RhbEVuYWJsZWQpLE1lKCJjbHJNb2RhbFNpemUiLCJ4bCIpKCJjbHJNb2RhbENsb3NhYmxlIiwhaC5mb3JjZVJlbG9hZCksZmUoMiksRHIoIiAiLGguZGF0YS5tb2RhbFRpdGxlLCIgIiksZmUoKSxNZSgibmdJZiIsaC5kYXRhLnNhc1Nl'@;
put 'cnZpY2UmJmguZGF0YS5zYXNTZXJ2aWNlLmxlbmd0aD4wKSxmZSgyKSxNZSgiaW5uZXJIVE1MIixoLmRhdGEubWVzc2FnZSxWNCksZmUoKSxNZSgibmdJZiIsbnVsbCE9PWguZGF0YS5kZXRhaWxzKSxmZSgyKSxNZSgibmdJZiIsaC5zaG93Q29uZmlndXJhdG9yQnV0dG9uKGguZGF0YS5zYXNT'@;
put 'ZXJ2aWNlKSksZmUoKSxNZSgibmdJZiIsbnVsbCE9PWguZGF0YS5kZXRhaWxzKSxmZSgpLE1lKCJuZ0lmIiwobnVsbD09aC5kYXRhLmRldGFpbHM/bnVsbDpoLmRhdGEuZGV0YWlscy5MT0cpJiYobnVsbD09aC5kYXRhLmRldGFpbHN8fG51bGw9PWguZGF0YS5kZXRhaWxzLkxPRz9udWxsOmgu'@;
put 'ZGF0YS5kZXRhaWxzLkxPRy50cmltKCkubGVuZ3RoKT4wKSxmZSgpLE1lKCJuZ0lmIiwhaC5mb3JjZVJlbG9hZCksZmUoKSxNZSgibmdJZiIsaC5mb3JjZVJlbG9hZCkpfSxkZXBlbmRlbmNpZXM6W2JhLG91LEt1LHRFXSxlbmNhcHN1bGF0aW9uOjJ9KX19cmV0dXJuIGN9KSgpO2NvbnN0IEFZ'@;
put 'ZT0oKT0+WyIvIl0sZ2hlPSgpPT5bIi92aWV3Il0sbWhlPSgpPT5bIi9ob21lIl0sRUc9KCk9PlsiL3Jldmlldy9zdWJtaXR0ZWQiXSxrWWU9KCk9PlsiL3Jldmlldy9hcHByb3ZlIl0sRFllPSgpPT5bIi9yZXZpZXcvaGlzdG9yeSJdO2Z1bmN0aW9uIElZZShjLGwpezEmYyYmKHNpKDApLGRl'@;
put 'KDEsImRpdiIsMTcpKDIsImRpdiIsMTgpKDMsImRpdiIsMTkpLEd0KDQsImNkcy1pY29uIiwyMCksaGUoKSxkZSg1LCJkaXYiLDIxKSxMZSg2LCIgRGF0YSBDb250cm9sbGVyIChGUkVFIFRpZXIpIC0gdG8gdXBncmFkZSBjb250YWN0ICIpLEd0KDcsImNvbnRhY3QtbGluayIsMjIpLGhlKCko'@;
put 'KSgpLGRlKDgsImEiLDIzKSxMZSg5LCJVcGRhdGUgTGljZW5jZSBLZXkiKSxoZSgpLGxpKCkpfWZ1bmN0aW9uIFJZZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO3NpKDApLGRlKDEsImRpdiIsMTcpKDIsImRpdiIsMTgpKDMsImRpdiIsMTkpLEd0KDQsImNkcy1pY29uIiwyMCksaGUoKSxk'@;
put 'ZSg1LCJkaXYiLDIxKSxMZSg2LCIgRGF0YSBDb250cm9sbGVyIChGUkVFIFRpZXIpIC0gUHJvYmxlbSB3aXRoIGxpY2VuY2UgIiksaGUoKSgpKCksZGUoNywiYSIsMjQpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPVJlKDMpO3JldHVybiBDdChoLmxpY2VuY2VQcm9ibGVt'@;
put 'RGV0YWlscyhoLmxpY2VuY2VQcm9ibGVtLnZhbHVlKSl9KSxMZSg4LCJNb3JlIGRldGFpbHMiKSxoZSgpLGxpKCl9fWZ1bmN0aW9uIExZZShjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIsMTYpLGd0KDEsSVllLDEwLDAsIm5nLWNvbnRhaW5lciIsMSkoMixSWWUsOSwwLCJuZy1jb250YWluZXIi'@;
put 'LDEpLGhlKCkpLDImYyl7Y29uc3QgYT1SZSgyKTtmZSgpLE1lKCJuZ0lmIixudWxsPT09YS5saWNlbmNlUHJvYmxlbS52YWx1ZSksZmUoKSxNZSgibmdJZiIsbnVsbCE9PWEubGljZW5jZVByb2JsZW0udmFsdWUpfX1mdW5jdGlvbiBPWWUoYyxsKXsxJmMmJihkZSgwLCJhIiwyMyksTGUoMSwi'@;
put 'VXBkYXRlIExpY2VuY2UgS2V5IiksaGUoKSl9ZnVuY3Rpb24gUFllKGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2IiwyNSkoMSwiZGl2IiwxNykoMiwiZGl2IiwxOCkoMywiZGl2IiwxOSksR3QoNCwiY2RzLWljb24iLDIwKSxoZSgpLGRlKDUsImRpdiIsMjEpLExlKDYpLEd0KDcsImNvbnRhY3Qt'@;
put 'bGluayIsMjIpLExlKDgpLGhlKCkoKSgpLGd0KDksT1llLDIsMCwiYSIsMjYpLGhlKCkpLDImYyl7Y29uc3QgYT1SZSgyKTtmZSg2KSxVdSgiIFRoaXMgbGljZW5zZSBrZXkgd2lsbCBleHBpcmUgaW4gIixhLmxpY2Vuc2VFeHBpcmluZ0RheXMsIiAiLDE9PT1hLmxpY2Vuc2VFeHBpcmluZ0Rh'@;
put 'eXM/ImRheSI6ImRheXMiLCIuIFBsZWFzZSBjb250YWN0ICIpLGZlKDIpLERyKCIgb3IgeW91ciByZXNlbGxlciB0byBhcnJhbmdlIGFkZGl0aW9uYWwgbGljZW5jZSBmb3Igc2l0ZSBpZCAiLGEuc3lzc2l0ZS5nZXRWYWx1ZSgpLCIuICIpLGZlKCksTWUoIm5nSWYiLCFhLmZyZWVUaWVyQmFu'@;
put 'bmVyKX19ZnVuY3Rpb24gRlllKGMsbCl7MSZjJiYoZGUoMCwiYSIsMjMpLExlKDEsIlVwZGF0ZSBMaWNlbmNlIEtleSIpLGhlKCkpfWZ1bmN0aW9uIEhZZShjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIsMjUpKDEsImRpdiIsMTcpKDIsImRpdiIsMTgpKDMsImRpdiIsMTkpLEd0KDQsImNkcy1p'@;
put 'Y29uIiwyMCksaGUoKSxkZSg1LCJkaXYiLDIxKSxMZSg2LCIgVGhlIHJlZ2lzdGVyZWQgbnVtYmVyIG9mIHVzZXJzIGV4Y2VlZHMgdGhlIGxpbWl0IHNwZWNpZmllZCBmb3IgeW91ciBsaWNlbnNlLiBQbGVhc2UgY29udGFjdCAiKSxHdCg3LCJjb250YWN0LWxpbmsiLDIyKSxMZSg4KSxoZSgp'@;
put 'KCkoKSxndCg5LEZZZSwyLDAsImEiLDI2KSxoZSgpKSwyJmMpe2NvbnN0IGE9UmUoMik7ZmUoOCksRHIoIiBvciB5b3VyIHJlc2VsbGVyIHRvIGFycmFuZ2UgYWRkaXRpb25hbCBsaWNlbmNlIGZvciBzaXRlIGlkICIsYS5zeXNzaXRlLmdldFZhbHVlKCksIi4gIiksZmUoKSxNZSgibmdJZiIs'@;
put 'IWEubGljZW5zZUV4cGlyaW5nRGF5cyYmIWEuZnJlZVRpZXJCYW5uZXIpfX1mdW5jdGlvbiBOWWUoYyxsKXtpZigxJmMmJihzaSgwKSxndCgxLExZZSwzLDIsImRpdiIsMTQpKDIsUFllLDEwLDQsImRpdiIsMTUpKDMsSFllLDEwLDIsImRpdiIsMTUpLGxpKCkpLDImYyl7Y29uc3QgYT1SZSgp'@;
put 'O2ZlKCksTWUoIm5nSWYiLGEuZnJlZVRpZXJCYW5uZXImJighYS5saWNlbnNlRXhwaXJpbmdEYXlzfHxhLmxpY2Vuc2VFeHBpcmluZ0RheXM8MCkpLGZlKCksTWUoIm5nSWYiLGEubGljZW5zZUV4cGlyaW5nRGF5cyYmIWEuZnJlZVRpZXJCYW5uZXIpLGZlKCksTWUoIm5nSWYiLGEuYXBwT3Zl'@;
put 'ckNhcGFjaXR5KX19ZnVuY3Rpb24gVlllKGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiZGl2IiwyNyksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChSZSgpLnRvZ2dsZVNpZGViYXIoKSl9KSxHdCgxLCJjbHItaWNvbiIsMjgpLGhlKCl9fWZ1bmN0aW9uIEJZ'@;
put 'ZShjLGwpezEmYyYmKGRlKDAsImEiLDI5KSxHdCgxLCJpbWciLDMwKSgyLCJpbWciLDMxKSxoZSgpKSwyJmMmJk1lKCJyb3V0ZXJMaW5rIixHcygxLEFZZSkpfWZ1bmN0aW9uIGpZZShjLGwpezEmYyYmKGRlKDAsImEiKSxHdCgxLCJzcGFuIiwzMiksaGUoKSl9ZnVuY3Rpb24gelllKGMsbCl7'@;
put 'MSZjJiYoZGUoMCwiY2xyLWRyb3Bkb3duLW1lbnUiLDQwKSgxLCJhIiw0MSksTGUoMiwiVklFVyIpLGhlKCksZGUoMywiYSIsNDEpLExlKDQsIkxPQUQiKSxoZSgpLGRlKDUsImEiLDQxKSxMZSg2LCJSRVZJRVciKSxoZSgpKCkpLDImYyYmKGZlKCksTWUoInJvdXRlckxpbmsiLEdzKDMsZ2hl'@;
put 'KSksZmUoMiksTWUoInJvdXRlckxpbmsiLEdzKDQsbWhlKSksZmUoMiksTWUoInJvdXRlckxpbmsiLEdzKDUsRUcpKSl9ZnVuY3Rpb24gVVllKGMsbCl7aWYoMSZjJiYoc2koMCksZGUoMSwiZGl2IiwzMykoMiwiY2xyLWRyb3Bkb3duIikoMywiYnV0dG9uIiwzNCksTGUoNCwiIE1lbnUgIiks'@;
put 'aGUoKSxndCg1LHpZZSw3LDYsImNsci1kcm9wZG93bi1tZW51IiwzNSksaGUoKSgpLGRlKDYsImRpdiIsMzYpKDcsImEiLDM3KSxMZSg4LCJWSUVXIiksaGUoKSxkZSg5LCJhIiwzOCksTGUoMTAsIkxPQUQiKSxoZSgpLGRlKDExLCJhIiwzOSksTGUoMTIsIlJFVklFVyIpLGhlKCkoKSxsaSgp'@;
put 'KSwyJmMpe2NvbnN0IGE9UmUoKTtmZSg3KSxNZSgicm91dGVyTGluayIsR3MoNyxnaGUpKSxmZSgyKSxUcigiYWN0aXZlIixhLnJvdXRlci51cmwuaW5jbHVkZXMoImVkaXRvciIpfHxhLnJvdXRlci51cmwuaW5jbHVkZXMoImVkaXQtcmVjb3JkIil8fGEucm91dGVyLnVybC5pbmNsdWRlcygi'@;
put 'aG9tZSIpKSxNZSgicm91dGVyTGluayIsR3MoOCxtaGUpKSxmZSgyKSxUcigiYWN0aXZlIixhLnJvdXRlci51cmwuaW5jbHVkZXMoInN1Ym1pdHRlZCIpfHxhLnJvdXRlci51cmwuaW5jbHVkZXMoImFwcHJvdmUiKXx8YS5yb3V0ZXIudXJsLmluY2x1ZGVzKCJoaXN0b3J5IikpLE1lKCJyb3V0'@;
put 'ZXJMaW5rIixHcyg5LEVHKSl9fWZ1bmN0aW9uIFpZZShjLGwpe2lmKDEmYyYmKGRlKDAsIm5hdiIsNDIpKDEsInVsIiw0MykoMiwibGkiLDQ0KSgzLCJhIiwzNyksTGUoNCwiU1VCTUlUIiksaGUoKSgpLGRlKDUsImxpIiw0NCkoNiwiYSIsMzcpLExlKDcsIkFQUFJPVkUiKSxoZSgpKCksZGUo'@;
put 'OCwibGkiLDQ0KSg5LCJhIiwzNyksTGUoMTAsIkhJU1RPUlkiKSxoZSgpKCkoKSgpKSwyJmMpe2NvbnN0IGE9UmUoKTtmZSgzKSxNZSgicm91dGVyTGluayIsR3MoNSxFRykpLGZlKDMpLFRyKCJhY3RpdmUiLGEucm91dGVyLnVybC5pbmNsdWRlcygiYXBwcm92ZSIpKSxNZSgicm91dGVyTGlu'@;
put 'ayIsR3MoNixrWWUpKSxmZSgzKSxNZSgicm91dGVyTGluayIsR3MoNyxEWWUpKX19ZnVuY3Rpb24gV1llKGMsbCl7MSZjJiZHdCgwLCJhcHAtYWxlcnRzIil9ZnVuY3Rpb24gWVllKGMsbCl7MSZjJiZHdCgwLCJyb3V0ZXItb3V0bGV0Iil9ZnVuY3Rpb24gR1llKGMsbCl7MSZjJiZHdCgwLCJh'@;
put 'cHAtYWxlcnRzIil9ZnVuY3Rpb24gJFllKGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiYXBwLWluZm8tbW9kYWwiLDQ1KSxGdCgib25Db25maXJtTW9kYWxDbGljayIsZnVuY3Rpb24oKXtjb25zdCBoPXd0KGEpLiRpbXBsaWNpdDtyZXR1cm4gQ3QoUmUoKS5jbG9zZUFib3J0TW9k'@;
put 'YWwoaC5pZCkpfSksaGUoKX1pZigyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQsZD1SZSgpO01lKCJkYXRhIixhKSgiZm9yY2VSZWxvYWQiLCFkLnN0YXJ0dXBEYXRhTG9hZGVkJiYxPT09ZC5zYXNqc0Fib3J0cy5sZW5ndGgpfX1mdW5jdGlvbiBLWWUoYyxsKXsxJmMmJihkZSgwLCJkaXYiLDQ5'@;
put 'KSxHdCgxLCJkaXYiLDUwKSgyLCJkaXYiLDUxKSgzLCJkaXYiLDUyKSxoZSgpKX1mdW5jdGlvbiBxWWUoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiLDQ2KSxHdCgxLCJpbWciLDQ3KSxndCgyLEtZZSw0LDAsImRpdiIsNDgpLGhlKCkpLDImYyl7Y29uc3QgYT1SZSgpO2ZlKDIpLE1lKCJuZ0lm'@;
put 'IixudWxsPT09YS5hcHBBY3RpdmUpfX1Ucy5hZGRJY29ucyhbIm1vb24iLHtvdXRsaW5lOic8cGF0aCBkPSJNMTguMTEgMzIuMDAwM0MxMC4zMyAzMi4wMDAzIDQgMjUuNzIwMyA0IDE3Ljk5MDNDNCAxMC4yNjAzIDEwLjAzIDQuMjAwMyAxNy43MyA0LjAwMDNDMTguMTUgMy45OTAzIDE4LjUy'@;
put 'IDQuMjMwMyAxOC42OCA0LjYxMDNDMTguODQgNC45OTAzIDE4Ljc1IDUuNDMwMyAxOC40NiA1LjcyMDNDMTYuNjkgNy40NTAzIDE1LjcxIDkuNzYwMyAxNS43MSAxMi4yMTAzQzE1LjcxIDE3LjI0MDMgMTkuODMgMjEuMzMwMyAyNC45MSAyMS4zMzAzQzI2LjkgMjEuMzMwMyAyOC44IDIwLjcw'@;
put 'MDMgMzAuNDEgMTkuNTEwM0MzMC43NCAxOS4yNzAzIDMxLjE5IDE5LjI1MDMgMzEuNTMgMTkuNDYwM0MzMS44OCAxOS42ODAzIDMyLjA2IDIwLjA4MDMgMzEuOTkgMjAuNDkwM0MzMC43OCAyNy4xNjAzIDI0Ljk0IDMyLjAwMDMgMTguMTEgMzIuMDAwM1pNMTUuNDMgNi4yOTAzQzkuOTkgNy40'@;
put 'ODAzIDYgMTIuMjQwMyA2IDE3Ljk5MDNDNiAyNC42MTAzIDExLjQzIDMwLjAwMDMgMTguMTEgMzAuMDAwM0MyMy4xNiAzMC4wMDAzIDI3LjU4IDI2LjkyMDMgMjkuMzcgMjIuNDAwM0MyNy45NyAyMy4wMTAzIDI2LjQ2IDIzLjMyMDMgMjQuOTEgMjMuMzIwM0MxOC43NCAyMy4zMjAzIDEzLjcx'@;
put 'IDE4LjMzMDMgMTMuNzEgMTIuMjAwM0MxMy43MSAxMC4wNzAzIDE0LjMxIDguMDMwMyAxNS40MyA2LjI4MDNWNi4yOTAzWiIvPicsc29saWQ6JzxwYXRoIGQ9Ik0xOC4xMSAzMi4wMDAzQzEwLjMzIDMyLjAwMDMgNCAyNS43MjAzIDQgMTcuOTkwM0M0IDEwLjI2MDMgMTAuMDMgNC4yMDAzIDE3'@;
put 'LjczIDQuMDAwM0MxOC4xNSAzLjk5MDMgMTguNTIgNC4yMzAzIDE4LjY4IDQuNjEwM0MxOC44NCA0Ljk5MDMgMTguNzUgNS40MzAzIDE4LjQ2IDUuNzIwM0MxNi42OSA3LjQ1MDMgMTUuNzEgOS43NjAzIDE1LjcxIDEyLjIxMDNDMTUuNzEgMTcuMjQwMyAxOS44MyAyMS4zMzAzIDI0LjkxIDIx'@;
put 'LjMzMDNDMjYuOSAyMS4zMzAzIDI4LjggMjAuNzAwMyAzMC40MSAxOS41MTAzQzMwLjc0IDE5LjI3MDMgMzEuMTkgMTkuMjUwMyAzMS41MyAxOS40NjAzQzMxLjg4IDE5LjY4MDMgMzIuMDYgMjAuMDgwMyAzMS45OSAyMC40OTAzQzMwLjc4IDI3LjE2MDMgMjQuOTQgMzIuMDAwMyAxOC4xMSAz'@;
put 'Mi4wMDAzWiIvPid9XSxbInN1biIse291dGxpbmU6JzxwYXRoIGQ9Ik04LjgxIDEwLjIyQzkuMDEgMTAuNDIgOS4yNiAxMC41MSA5LjUyIDEwLjUxQzkuNzggMTAuNTEgMTAuMDMgMTAuNDEgMTAuMjMgMTAuMjJDMTAuNjIgOS44MyAxMC42MiA5LjIgMTAuMjMgOC44MUw4LjExIDYuNjlDNy43'@;
put 'MiA2LjMgNy4wOSA2LjMgNi43IDYuNjlDNi4zMSA3LjA4IDYuMzEgNy43MSA2LjcgOC4xTDguODIgMTAuMjJIOC44MVpNNyAxOEM3IDE3LjQ1IDYuNTUgMTcgNiAxN0gzQzIuNDUgMTcgMiAxNy40NSAyIDE4QzIgMTguNTUgMi40NSAxOSAzIDE5SDZDNi41NSAxOSA3IDE4LjU1IDcgMThaTTE4'@;
put 'IDdDMTguNTUgNyAxOSA2LjU1IDE5IDZWM0MxOSAyLjQ1IDE4LjU1IDIgMTggMkMxNy40NSAyIDE3IDIuNDUgMTcgM1Y2QzE3IDYuNTUgMTcuNDUgNyAxOCA3Wk0yNi40OSAxMC41MUMyNi43NSAxMC41MSAyNyAxMC40MSAyNy4yIDEwLjIyTDI5LjMyIDguMUMyOS43MSA3LjcxIDI5LjcxIDcu'@;
put 'MDggMjkuMzIgNi42OUMyOC45MyA2LjMgMjguMyA2LjMgMjcuOTEgNi42OUwyNS43OSA4LjgxQzI1LjQgOS4yIDI1LjQgOS44MyAyNS43OSAxMC4yMkMyNS45OSAxMC40MiAyNi4yNCAxMC41MSAyNi41IDEwLjUxSDI2LjQ5Wk04LjgxIDI1Ljc4TDYuNjkgMjcuOUM2LjMgMjguMjkgNi4zIDI4'@;
put 'LjkyIDYuNjkgMjkuMzFDNi44OSAyOS41MSA3LjE0IDI5LjYgNy40IDI5LjZDNy42NiAyOS42IDcuOTEgMjkuNSA4LjExIDI5LjMxTDEwLjIzIDI3LjE5QzEwLjYyIDI2LjggMTAuNjIgMjYuMTcgMTAuMjMgMjUuNzhDOS44NCAyNS4zOSA5LjIxIDI1LjM5IDguODIgMjUuNzhIOC44MVpNMzMg'@;
put 'MTdIMzBDMjkuNDUgMTcgMjkgMTcuNDUgMjkgMThDMjkgMTguNTUgMjkuNDUgMTkgMzAgMTlIMzNDMzMuNTUgMTkgMzQgMTguNTUgMzQgMThDMzQgMTcuNDUgMzMuNTUgMTcgMzMgMTdaTTE4IDlDMTMuMDQgOSA5IDEzLjA0IDkgMThDOSAyMi45NiAxMy4wNCAyNyAxOCAyN0MyMi45NiAyNyAy'@;
put 'NyAyMi45NiAyNyAxOEMyNyAxMy4wNCAyMi45NiA5IDE4IDlaTTE4IDI1QzE0LjE0IDI1IDExIDIxLjg2IDExIDE4QzExIDE0LjE0IDE0LjE0IDExIDE4IDExQzIxLjg2IDExIDI1IDE0LjE0IDI1IDE4QzI1IDIxLjg2IDIxLjg2IDI1IDE4IDI1Wk0yNy4xOSAyNS43OEMyNi44IDI1LjM5IDI2'@;
put 'LjE3IDI1LjM5IDI1Ljc4IDI1Ljc4QzI1LjM5IDI2LjE3IDI1LjM5IDI2LjggMjUuNzggMjcuMTlMMjcuOSAyOS4zMUMyOC4xIDI5LjUxIDI4LjM1IDI5LjYgMjguNjEgMjkuNkMyOC44NyAyOS42IDI5LjEyIDI5LjUgMjkuMzIgMjkuMzFDMjkuNzEgMjguOTIgMjkuNzEgMjguMjkgMjkuMzIg'@;
put 'MjcuOUwyNy4yIDI1Ljc4SDI3LjE5Wk0xOCAyOUMxNy40NSAyOSAxNyAyOS40NSAxNyAzMFYzM0MxNyAzMy41NSAxNy40NSAzNCAxOCAzNEMxOC41NSAzNCAxOSAzMy41NSAxOSAzM1YzMEMxOSAyOS40NSAxOC41NSAyOSAxOCAyOVoiLz4nLHNvbGlkOic8cGF0aCBkPSJNOC44MSAyNS43OEw2'@;
put 'LjY5IDI3LjlDNi4zIDI4LjI5IDYuMyAyOC45MiA2LjY5IDI5LjMxQzYuODkgMjkuNTEgNy4xNCAyOS42IDcuNCAyOS42QzcuNjYgMjkuNiA3LjkxIDI5LjUgOC4xMSAyOS4zMUwxMC4yMyAyNy4xOUMxMC42MiAyNi44IDEwLjYyIDI2LjE3IDEwLjIzIDI1Ljc4QzkuODQgMjUuMzkgOS4yMSAy'@;
put 'NS4zOSA4LjgyIDI1Ljc4SDguODFaTTcgMThDNyAxNy40NSA2LjU1IDE3IDYgMTdIM0MyLjQ1IDE3IDIgMTcuNDUgMiAxOEMyIDE4LjU1IDIuNDUgMTkgMyAxOUg2QzYuNTUgMTkgNyAxOC41NSA3IDE4Wk04LjgxIDEwLjIyQzkuMDEgMTAuNDIgOS4yNiAxMC41MSA5LjUyIDEwLjUxQzkuNzgg'@;
put 'MTAuNTEgMTAuMDMgMTAuNDEgMTAuMjMgMTAuMjJDMTAuNjIgOS44MyAxMC42MiA5LjIgMTAuMjMgOC44MUw4LjExIDYuNjlDNy43MiA2LjMgNy4wOSA2LjMgNi43IDYuNjlDNi4zMSA3LjA4IDYuMzEgNy43MSA2LjcgOC4xTDguODIgMTAuMjJIOC44MVpNMjYuNDkgMTAuNTFDMjYuNzUgMTAu'@;
put 'NTEgMjcgMTAuNDEgMjcuMiAxMC4yMkwyOS4zMiA4LjFDMjkuNzEgNy43MSAyOS43MSA3LjA4IDI5LjMyIDYuNjlDMjguOTMgNi4zIDI4LjMgNi4zIDI3LjkxIDYuNjlMMjUuNzkgOC44MUMyNS40IDkuMiAyNS40IDkuODMgMjUuNzkgMTAuMjJDMjUuOTkgMTAuNDIgMjYuMjQgMTAuNTEgMjYu'@;
put 'NSAxMC41MUgyNi40OVpNMTggN0MxOC41NSA3IDE5IDYuNTUgMTkgNlYzQzE5IDIuNDUgMTguNTUgMiAxOCAyQzE3LjQ1IDIgMTcgMi40NSAxNyAzVjZDMTcgNi41NSAxNy40NSA3IDE4IDdaTTE4IDI5QzE3LjQ1IDI5IDE3IDI5LjQ1IDE3IDMwVjMzQzE3IDMzLjU1IDE3LjQ1IDM0IDE4IDM0'@;
put 'QzE4LjU1IDM0IDE5IDMzLjU1IDE5IDMzVjMwQzE5IDI5LjQ1IDE4LjU1IDI5IDE4IDI5Wk0zMyAxN0gzMEMyOS40NSAxNyAyOSAxNy40NSAyOSAxOEMyOSAxOC41NSAyOS40NSAxOSAzMCAxOUgzM0MzMy41NSAxOSAzNCAxOC41NSAzNCAxOEMzNCAxNy40NSAzMy41NSAxNyAzMyAxN1pNMjcu'@;
put 'MTkgMjUuNzhDMjYuOCAyNS4zOSAyNi4xNyAyNS4zOSAyNS43OCAyNS43OEMyNS4zOSAyNi4xNyAyNS4zOSAyNi44IDI1Ljc4IDI3LjE5TDI3LjkgMjkuMzFDMjguMSAyOS41MSAyOC4zNSAyOS42IDI4LjYxIDI5LjZDMjguODcgMjkuNiAyOS4xMiAyOS41IDI5LjMyIDI5LjMxQzI5LjcxIDI4'@;
put 'LjkyIDI5LjcxIDI4LjI5IDI5LjMyIDI3LjlMMjcuMiAyNS43OEgyNy4xOVpNMTggOUMxMy4wNCA5IDkgMTMuMDQgOSAxOEM5IDIyLjk2IDEzLjA0IDI3IDE4IDI3QzIyLjk2IDI3IDI3IDIyLjk2IDI3IDE4QzI3IDEzLjA0IDIyLjk2IDkgMTggOVoiLz4nfV0sWyJleGNsYW1hdGlvbi10cmlh'@;
put 'bmdsZSIse291dGxpbmU6JzxwYXRoIGQ9Ik0xNy45OTQzIDIwLjhDMTguNTQ0IDIwLjggMTguOTkzOCAyMC4zNSAxOC45OTM4IDE5LjhWMTRDMTguOTkzOCAxMy40NSAxOC41NDQgMTMgMTcuOTk0MyAxM0MxNy40NDQ1IDEzIDE2Ljk5NDcgMTMuNDUgMTYuOTk0NyAxNFYxOS44QzE2Ljk5NDcg'@;
put 'MjAuMzUgMTcuNDQ0NSAyMC44IDE3Ljk5NDMgMjAuOFpNMTguODQzOSAyMi45NUMxOC43MjM5IDIyLjg0IDE4LjU5NCAyMi43NSAxOC40NTQxIDIyLjY5QzE4LjE2NDIgMjIuNTcgMTcuODI0MyAyMi41NyAxNy41MzQ1IDIyLjY5QzE3LjM5NDUgMjIuNzUgMTcuMjY0NiAyMi44NCAxNy4xNDQ2'@;
put 'IDIyLjk1QzE2LjkyNDcgMjMuMTggMTYuNzk0OCAyMy40OCAxNi43OTQ4IDIzLjhDMTYuNzk0OCAyNC4xMiAxNi45MjQ3IDI0LjQyIDE3LjE0NDYgMjQuNjVDMTcuMjY0NiAyNC43NiAxNy4zOTQ1IDI0Ljg1IDE3LjUzNDUgMjQuOTFDMTcuNjg0NCAyNC45NyAxNy44MzQzIDI1IDE3Ljk5NDMg'@;
put 'MjVDMTguMTU0MiAyNSAxOC4zMDQxIDI0Ljk3IDE4LjQ1NDEgMjQuOTFDMTguNTk0IDI0Ljg1IDE4LjcyMzkgMjQuNzYgMTguODQzOSAyNC42NUMxOS4wNjM4IDI0LjQyIDE5LjE5MzcgMjQuMTIgMTkuMTkzNyAyMy44QzE5LjE5MzcgMjMuNjQgMTkuMTYzNyAyMy40OSAxOS4xMDM4IDIzLjM0'@;
put 'QzE5LjA0MzggMjMuMiAxOC45NTM4IDIzLjA2IDE4Ljg0MzkgMjIuOTVaTTMwLjU5ODYgMjUuNDNMMjAuNjYzMSA3LjU3QzIwLjExMzMgNi41OSAxOS4xMjM4IDYgMTcuOTk0MyA2QzE2Ljg2NDggNiAxNS44NzUyIDYuNTkgMTUuMzI1NCA3LjU3TDUuMzg5ODggMjUuNDNDNC44NTAxMiAyNi4z'@;
put 'OSA0Ljg3MDExIDI3LjUzIDUuNDE5ODcgMjguNDhDNS45Njk2MiAyOS40MyA2Ljk1OTE4IDMwIDguMDU4NjkgMzBIMjcuOTI5OEMyOS4wMjkzIDMwIDMwLjAwODkgMjkuNDMgMzAuNTY4NiAyOC40OEMzMS4xMjg0IDI3LjUzIDMxLjEzODQgMjYuMzkgMzAuNTk4NiAyNS40M1pNMjguODQ5NCAy'@;
put 'Ny40N0MyOC43NTk1IDI3LjYzIDI4LjQ3OTYgMjggMjcuOTM5OCAyOEg4LjA1ODY5QzcuNTA4OTQgMjggNy4yMzkwNiAyNy42MyA3LjE0OTEgMjcuNDdDNy4wNTkxNCAyNy4zMSA2Ljg2OTIyIDI2Ljg5IDcuMTQ5MSAyNi40MUwxNy4wNjQ3IDguNTVDMTcuMzM0NiA4LjA2IDE3LjgwNDMgOCAx'@;
put 'Ny45ODQzIDhDMTguMTY0MiA4IDE4LjYzNCA4LjA1IDE4LjkwMzkgOC41NUwyOC44Mzk0IDI2LjQxQzI5LjEwOTMgMjYuODkgMjguOTE5NCAyNy4zMSAyOC44Mjk0IDI3LjQ3SDI4Ljg0OTRaIi8+Jyxzb2xpZDonPHBhdGggZD0iTTMwLjU5ODYgMjUuNDNMMjAuNjYzMSA3LjU3QzIwLjExMzMg'@;
put 'Ni41OSAxOS4xMjM4IDYgMTcuOTk0MyA2QzE2Ljg2NDggNiAxNS44NzUyIDYuNTkgMTUuMzI1NCA3LjU3TDUuMzg5ODggMjUuNDNDNC44NTAxMiAyNi4zOSA0Ljg3MDExIDI3LjUzIDUuNDE5ODcgMjguNDhDNS45Njk2MiAyOS40MyA2Ljk1OTE4IDMwIDguMDU4NjkgMzBIMjcuOTI5OEMyOS4w'@;
put 'MjkzIDMwIDMwLjAwODkgMjkuNDMgMzAuNTY4NiAyOC40OEMzMS4xMjg0IDI3LjUzIDMxLjEzODQgMjYuMzkgMzAuNTk4NiAyNS40M1pNMTYuNzk0OCAxMy41QzE2Ljc5NDggMTIuODQgMTcuMzM0NiAxMi4zIDE3Ljk5NDMgMTIuM0MxOC42NTQgMTIuMyAxOS4xOTM3IDEyLjg0IDE5LjE5Mzcg'@;
put 'MTMuNVYxOS4zQzE5LjE5MzcgMTkuOTYgMTguNjU0IDIwLjUgMTcuOTk0MyAyMC41QzE3LjMzNDYgMjAuNSAxNi43OTQ4IDE5Ljk2IDE2Ljc5NDggMTkuM1YxMy41Wk0xOC45NzM4IDI1QzE4LjgzMzkgMjUuMTMgMTguNjg0IDI1LjIzIDE4LjUyNCAyNS4zQzE4LjM0NDEgMjUuMzcgMTguMTc0'@;
put 'MiAyNS40MSAxNy45OTQzIDI1LjQxQzE3LjgxNDMgMjUuNDEgMTcuNjM0NCAyNS4zOCAxNy40NTQ1IDI1LjNDMTcuMzA0NiAyNS4yMyAxNy4xNTQ2IDI1LjEzIDE2Ljk5NDcgMjQuOTlDMTYuNzM0OCAyNC43MiAxNi41ODQ5IDI0LjM3IDE2LjU4NDkgMjRDMTYuNTg0OSAyMy42MyAxNi43MjQ4'@;
put 'IDIzLjI5IDE2Ljk5NDcgMjNDMTcuMTM0NiAyMi44NyAxNy4yODQ2IDIyLjc3IDE3LjQ0NDUgMjIuN0MxNy42MTQ0IDIyLjYzIDE3Ljc5NDMgMjIuNTkgMTcuOTg0MyAyMi41OUMxOC4xNzQyIDIyLjU5IDE4LjM1NDEgMjIuNjMgMTguNTI0IDIyLjdDMTguNjc0IDIyLjc3IDE4LjgyMzkgMjIu'@;
put 'ODcgMTguOTczOCAyM0MxOS4wOTM4IDIzLjEyIDE5LjIwMzcgMjMuMjggMTkuMjczNyAyMy40NkMxOS4zNDM3IDIzLjY0IDE5LjM4MzYgMjMuODEgMTkuMzgzNiAyMy45OUMxOS4zODM2IDI0LjM1IDE5LjI0MzcgMjQuNyAxOC45NjM4IDI0Ljk5TDE4Ljk3MzggMjVaIi8+J31dLFsidGFibGUi'@;
put 'LHtvdXRsaW5lOic8cGF0aCBkPSJNMzMgMThDMzMuNTUgMTggMzQgMTcuNTUgMzQgMTdDMzQgMTYuNDUgMzMuNTUgMTYgMzMgMTZIMjhWOEgzM0MzMy41NSA4IDM0IDcuNTUgMzQgN0MzNCA2LjQ1IDMzLjU1IDYgMzMgNkg4VjNDOCAyLjQ1IDcuNTUgMiA3IDJDNi40NSAyIDYgMi40NSA2IDNW'@;
put 'NkgzQzIuNDUgNiAyIDYuNDUgMiA3QzIgNy41NSAyLjQ1IDggMyA4SDZWMzNDNiAzMy41NSA2LjQ1IDM0IDcgMzRDNy41NSAzNCA4IDMzLjU1IDggMzNWMjhIMTZWMzNDMTYgMzMuNTUgMTYuNDUgMzQgMTcgMzRDMTcuNTUgMzQgMTggMzMuNTUgMTggMzNWMjhIMjZWMzNDMjYgMzMuNTUgMjYu'@;
put 'NDUgMzQgMjcgMzRDMjcuNTUgMzQgMjggMzMuNTUgMjggMzNWMjhIMzNDMzMuNTUgMjggMzQgMjcuNTUgMzQgMjdDMzQgMjYuNDUgMzMuNTUgMjYgMzMgMjZIMjhWMThIMzNaTTE2IDI2SDhWMThIMTZWMjZaTTE2IDE2SDhWOEgxNlYxNlpNMjYgMjZIMThWMThIMjZWMjZaTTI2IDE2SDE4VjhI'@;
put 'MjZWMTZaIi8+J31dLFsidHJhc2giLHtvdXRsaW5lOic8cGF0aCBkPSJNMjcuOTggMzFDMjggMzEuMjUgMjcuOTIgMzEuNDkgMjcuNzYgMzEuNjhDMjcuNiAzMS44NyAyNy4zNyAzMS45OCAyNy4xMiAzMkg4Ljg1QzguNiAzMS45OCA4LjM3IDMxLjg3IDguMjEgMzEuNjhDOC4wNSAzMS40OSA3'@;
put 'Ljk3IDMxLjI1IDcuOTkgMzFWMTEuMDNINS45N1YzMUM1Ljk1IDMxLjc4IDYuMjQgMzIuNTMgNi43OCAzMy4wOUM3LjMyIDMzLjY1IDguMDYgMzMuOTggOC44NSAzNEgyNy4xMkMyNy45IDMzLjk4IDI4LjY1IDMzLjY2IDI5LjE5IDMzLjA5QzI5LjczIDMyLjUyIDMwLjAyIDMxLjc3IDMwIDMx'@;
put 'VjExLjAzSDI3Ljk4VjMxWk0xMyAxMi45OFYyNy45OEgxNS4wMlYxMi45OEgxM1pNMTUgNEgyMVY2SDIzVjRDMjMgMi45IDIyLjEgMiAyMSAySDE1QzEzLjkgMiAxMyAyLjkgMTMgNFY2SDE1VjRaTTMwLjk5IDYuOThINS4wMUM0LjQ1IDYuOTggNCA3LjQzIDQgNy45OEM0IDguNTMgNC40NSA4'@;
put 'Ljk4IDUuMDEgOC45OEgzMC45OUMzMS41NSA4Ljk4IDMyIDguNTMgMzIgNy45OEMzMiA3LjQzIDMxLjU1IDYuOTggMzAuOTkgNi45OFpNMjAuOTggMTIuOThWMjcuOThIMjNWMTIuOThIMjAuOThaIi8+Jyxzb2xpZDonPHBhdGggZD0iTTE1IDRIMjFWNkgyM1Y0QzIzIDIuOSAyMi4xIDIgMjEg'@;
put 'MkgxNUMxMy45IDIgMTMgMi45IDEzIDRWNkgxNVY0Wk0zMC45OSA2Ljk4SDUuMDFDNC40NSA2Ljk4IDQgNy40MyA0IDcuOThDNCA4LjUzIDQuNDUgOC45OCA1LjAxIDguOThIMzAuOTlDMzEuNTUgOC45OCAzMiA4LjUzIDMyIDcuOThDMzIgNy40MyAzMS41NSA2Ljk4IDMwLjk5IDYuOThaTTUu'@;
put 'OTcgMTEuMDNWMzFDNS45NSAzMS43OCA2LjI0IDMyLjUzIDYuNzggMzMuMDlDNy4zMiAzMy42NSA4LjA2IDMzLjk4IDguODUgMzRIMjcuMTJDMjcuOSAzMy45OCAyOC42NSAzMy42NiAyOS4xOSAzMy4wOUMyOS43MyAzMi41MiAzMC4wMiAzMS43NyAzMCAzMVYxMS4wM0g1Ljk3Wk0yMC43OSAy'@;
put 'OC44MlYxNUgyMy4yMVYyOUgyMC43OVYyOC44MlpNMTIuODEgMjguODJWMTVIMTUuMjNWMjlIMTIuODFWMjguODJaIi8+J31dLFsicHJvY2Vzcy1vbi12bSIse291dGxpbmU6JzxwYXRoIGQ9Ik0xMiAxNC41MDAxVjI0LjUwMDFDMTIgMjUuMDUwMSAxMi40NSAyNS41MDAxIDEzIDI1LjUwMDFI'@;
put 'MjNDMjMuNTUgMjUuNTAwMSAyNCAyNS4wNTAxIDI0IDI0LjUwMDFWMTQuNTAwMUMyNCAxMy45NTAxIDIzLjU1IDEzLjUwMDEgMjMgMTMuNTAwMUgxM0MxMi40NSAxMy41MDAxIDEyIDEzLjk1MDEgMTIgMTQuNTAwMVpNMTQgMTUuNTAwMUgyMlYyMy41MDAxSDE0VjE1LjUwMDFaTTUuMjYgMjIu'@;
put 'MjgwMUM1LjgxIDIyLjIwMDEgNi4xOSAyMS43MDAxIDYuMTEgMjEuMTUwMUM2LjAzIDIwLjYxMDEgNiAyMC4wNTAxIDYgMTkuNDkwMUM2IDEzLjQxMDEgMTAuNTUgOC4zOTAwNiAxNi40NyA3LjYxMDA2TDE2LjI5IDcuNzkwMDZDMTUuOSA4LjE4MDA2IDE1LjkgOC44MTAwNiAxNi4yOSA5LjIw'@;
put 'MDA2QzE2LjQ5IDkuNDAwMDYgMTYuNzQgOS40OTAwNiAxNyA5LjQ5MDA2QzE3LjI2IDkuNDkwMDYgMTcuNTEgOS4zOTAwNiAxNy43MSA5LjIwMDA2TDIwLjQyIDYuNDkwMDZMMTcuNzEgMy43OTAwNkMxNy4zMiAzLjQwMDA2IDE2LjY5IDMuNDAwMDYgMTYuMyAzLjc5MDA2QzE1LjkxIDQuMTgw'@;
put 'MDYgMTUuOTEgNC44MTAwNiAxNi4zIDUuMjAwMDZMMTYuNjYgNS41NjAwNkM5LjU2IDYuMjUwMDYgNCAxMi4yMzAxIDQgMTkuNTAwMUM0IDIwLjE1MDEgNC4wNCAyMC44MDAxIDQuMTMgMjEuNDMwMUM0LjIgMjEuOTMwMSA0LjYzIDIyLjI5MDEgNS4xMiAyMi4yOTAxQzUuMTYgMjIuMjkwMSA1'@;
put 'LjIxIDIyLjI5MDEgNS4yNiAyMi4yOTAxVjIyLjI4MDFaTTIzLjY3IDMwLjA3MDFDMjEuOTQgMzEuMDAwMSAxOS45OCAzMS40OTAxIDE4IDMxLjQ5MDFDMTQuMyAzMS40OTAxIDEwLjgzIDI5Ljc2MDEgOC41NyAyNi45MDAxTDguODMgMjYuOTQwMUM5LjM4IDI3LjA0MDEgOS44OSAyNi42NjAx'@;
put 'IDkuOTggMjYuMTIwMUMxMC4wNyAyNS41ODAxIDkuNyAyNS4wNjAxIDkuMTYgMjQuOTcwMUw1LjM4IDI0LjM0MDFMNC43NSAyOC4xMjAxQzQuNjYgMjguNjYwMSA1LjAzIDI5LjE4MDEgNS41NyAyOS4yNzAxQzUuNjMgMjkuMjcwMSA1LjY4IDI5LjI4MDEgNS43NCAyOS4yODAxQzYuMjIgMjku'@;
put 'MjgwMSA2LjY0IDI4LjkzMDEgNi43MyAyOC40NTAxTDYuODIgMjcuOTIwMUM5LjQ1IDMxLjQwMDEgMTMuNTkgMzMuNTAwMSAxOCAzMy41MDAxQzIwLjMxIDMzLjUwMDEgMjIuNiAzMi45MzAxIDI0LjYyIDMxLjg0MDFDMjUuMTEgMzEuNTgwMSAyNS4yOSAzMC45NzAxIDI1LjAzIDMwLjQ5MDFD'@;
put 'MjQuNzcgMzAuMDAwMSAyNC4xNiAyOS44MjAxIDIzLjY4IDMwLjA4MDFMMjMuNjcgMzAuMDcwMVpNMzAuMDkgMjYuODMwMUwyOS45IDI2Ljg2MDFDMzEuMjYgMjQuNjYwMSAzMiAyMi4xMjAxIDMyIDE5LjQ5MDFDMzIgMTMuOTAwMSAyOC42OCA4Ljg1MDA2IDIzLjU1IDYuNjMwMDZDMjMuMDQg'@;
put 'Ni40MTAwNiAyMi40NiA2LjY0MDA2IDIyLjI0IDcuMTUwMDZDMjIuMDIgNy42NjAwNiAyMi4yNSA4LjI1MDA2IDIyLjc2IDguNDYwMDZDMjcuMTYgMTAuMzYwMSAzMC4wMSAxNC42OTAxIDMwLjAxIDE5LjQ4MDFDMzAuMDEgMjEuODAwMSAyOS4zNCAyNC4wNDAxIDI4LjEgMjUuOTYwMUwyNy45'@;
put 'OSAyNS4zMjAxQzI3LjkgMjQuNzgwMSAyNy4zOSAyNC40MDAxIDI2Ljg0IDI0LjUwMDFDMjYuMyAyNC41OTAxIDI1LjkzIDI1LjEwMDEgMjYuMDIgMjUuNjUwMUwyNi42NCAyOS40MzAxTDMwLjQyIDI4LjgxMDFDMzAuOTYgMjguNzIwMSAzMS4zMyAyOC4yMTAxIDMxLjI0IDI3LjY2MDFDMzEu'@;
put 'MTUgMjcuMTIwMSAzMC42NCAyNi43NDAxIDMwLjA5IDI2Ljg0MDFWMjYuODMwMVoiLz4nfV0pO2xldCBYWWU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmLHYsTSxELFoscmUpe3RoaXMuYXBwU2VydmljZT1hLHRoaXMubGljZW5jZVNlcnZpY2U9ZCx0aGlzLnJvdXRlcj1oLHRo'@;
put 'aXMucm91dGU9Zix0aGlzLmxvY2F0aW9uPXYsdGhpcy5ldmVudFNlcnZpY2U9TSx0aGlzLmFwcFN0b3JlU2VydmljZT1ELHRoaXMuY2RyPVosdGhpcy5lbGVtZW50UmVmPXJlLHRoaXMubGljZW5zZUV4cGlyaW5nRGF5cz1udWxsLHRoaXMuc2FzanNBYm9ydHM9W10sdGhpcy5lZGl0b3JBY3Rp'@;
put 'dmU9ITEsdGhpcy5hcHByb3ZlQWN0aXZlPSExLHRoaXMuZnJlZVRpZXJCYW5uZXI9dGhpcy5saWNlbmNlU2VydmljZS5pc0FwcEZyZWVUaWVyLnZhbHVlLHRoaXMubGljZW5jZVByb2JsZW09dGhpcy5saWNlbmNlU2VydmljZS5saWNlbmNlUHJvYmxlbSx0aGlzLmFwcE92ZXJDYXBhY2l0eT0h'@;
put 'MSx0aGlzLmFwcEFjdGl2ZT1udWxsLHRoaXMucmVxdWVzdHNNb2RhbD0hMSx0aGlzLnNob3dSZWdpc3RyYXRpb249ITAsdGhpcy5zdGFydHVwRGF0YUxvYWRlZD0hMSx0aGlzLmRlbW9MaW1pdE5vdGljZT17b3BlbjohMSxmZWF0dXJlTmFtZToiIn0sdGhpcy5zeXNzaXRlPXRoaXMuYXBwU2Vy'@;
put 'dmljZS5zeXNzaXRlLHRoaXMubGljZW5jZVN0YXRlPXRoaXMubGljZW5jZVNlcnZpY2UubGljZW5jZVN0YXRlLHRoaXMucGFyc2VEY0FkYXB0ZXJTZXR0aW5ncygpLHdpbmRvdy5hcHBpbmZvPSgpPT57Y29uc29sZS50YWJsZSh7IkFkYXB0ZXIgdmVyc2lvbiI6IjQuMTIuMSIsIkFwcCB2ZXJz'@;
put 'aW9uIjoidjcuMC4wIi5yZXBsYWNlKCJ2IiwiIiksIkJ1aWxkIHRpbWVzdGFtcCI6T28ocGFyc2VJbnQoIjE3NDk2NDk1NzgwODkiKSkuZm9ybWF0KCJERC1NTU0tWVlZWSBISDpNTSIpLCIuLi4iOiIuLi4ifSl9LHRoaXMuc3Vic2NyaWJlVG9MaWNlbnNlRXZlbnRzKCksdGhpcy5jb21taXRW'@;
put 'ZXI9InY3LjAuMCIucmVwbGFjZSgidiIsIiIpKyIuZzhjNjA0NzMiLGguZXZlbnRzLnN1YnNjcmliZShjZT0+e2lmKHRoaXMucm91dGVVcmw9dGhpcy5yb3V0ZXIudXJsLHR5cGVvZiB0aGlzLnJvdXRlVXJsPCJ1IiYmdGhpcy5yb3V0ZVVybC5sZW5ndGg+NCl7bGV0IGJlPXRoaXMucm91dGVV'@;
put 'cmwuc3BsaXQoIi8iKVsxXTsiZWRpdG9yIj09PWJlPyh0aGlzLmVyclRvcD0hMCx0aGlzLmVkaXRvckFjdGl2ZT0hMCx0aGlzLmFwcHJvdmVBY3RpdmU9ITEpOiJob21lIj09PWJlPyh0aGlzLmVyclRvcD0hMSx0aGlzLmVkaXRvckFjdGl2ZT0hMCx0aGlzLmFwcHJvdmVBY3RpdmU9ITEpOih0'@;
put 'aGlzLmVyclRvcD0hMCx0aGlzLmVkaXRvckFjdGl2ZT0hMSksS24ucm9vdFBhcmFtPWJlfXR5cGVvZiB0aGlzLnJvdXRlVXJsPCJ1IiYmdGhpcy5yb3V0ZVVybC5sZW5ndGg+NiYmKHRoaXMuYXBwcm92ZUFjdGl2ZT0hIXRoaXMucm91dGVVcmwuaW5jbHVkZXMoImFwcHJvdmVEZXQiKXx8ISF0'@;
put 'aGlzLnJvdXRlVXJsLmluY2x1ZGVzKCJ0b2FwcHJvdmUiKSl9KSx0aGlzLnN1YnNjcmliZVRvU2hvd0Fib3J0TW9kYWwoKSx0aGlzLnN1YnNjcmliZVRvUmVxdWVzdHNNb2RhbCgpLHRoaXMuc3Vic2NyaWJlVG9TdGFydHVwRGF0YSgpLHRoaXMuc3Vic2NyaWJlVG9BcHBBY3RpdmUoKSx0aGlz'@;
put 'LnN1YnNjcmliZVRvRGVtb0xpbWl0TW9kYWwoKSx3aW5kb3cuZnJhbWVFbGVtZW50JiYod2luZG93LmZyYW1lRWxlbWVudC5zZXRBdHRyaWJ1dGUoInN0eWxlIiwiaGVpZ2h0OjEwMCU7d2lkdGg6MTAwJTtwb3NpdGlvbjphYnNvbHV0ZSIpLHdpbmRvdy5mcmFtZUVsZW1lbnQuc2V0QXR0cmli'@;
put 'dXRlKCJhbGxvd2Z1bGxzY3JlZW4iLCIiKSx3aW5kb3cuZnJhbWVFbGVtZW50LnNldEF0dHJpYnV0ZSgiZnJhbWVib3JkZXIiLCIwIiksd2luZG93LmZyYW1lRWxlbWVudC5zZXRBdHRyaWJ1dGUoIm1hcmdpbmhlaWdodCIsIjAiKSx3aW5kb3cuZnJhbWVFbGVtZW50LnNldEF0dHJpYnV0ZSgi'@;
put 'bWFyZ2lud2lkdGgiLCIwIiksd2luZG93LmZyYW1lRWxlbWVudC5zZXRBdHRyaWJ1dGUoInNjcm9sbGluZyIsImF1dG8iKSx3aW5kb3cuZm9jdXMoKSl9cGFyc2VEY0FkYXB0ZXJTZXR0aW5ncygpe2NvbnN0IGE9ZG9jdW1lbnQucXVlcnlTZWxlY3Rvcigic2FzanMiKTtpZighYSlyZXR1cm4g'@;
put 'dGhpcy5saWNlbmNlU2VydmljZS5kZWFjdGl2YXRlQXBwKCksdm9pZCBzZXRUaW1lb3V0KCgpPT57dGhpcy5ldmVudFNlcnZpY2Uuc2hvd0Fib3J0TW9kYWwobnVsbCwiUGxlYXNlIG1ha2Ugc3VyZSAnU0FTSlMnIHRhZyB3aXRoIGNvbmZpZyBhdHRyaWJ1dGVzIGlzIGFkZGVkIHRvIGluZGV4'@;
put 'Lmh0bWwiLG51bGwsIlNBU2pzIENvbmZpZyBub3QgZm91bmQiKX0pO2NvbnN0IGQ9Zj0+YS5nZXRBdHRyaWJ1dGUoZil8fHZvaWQgMCxoPXtzZXJ2ZXJVcmw6ZCgic2VydmVyVXJsIil8fCIiLGFwcExvYzpkKCJhcHBMb2MiKXx8IiIsc2VydmVyVHlwZTpkKCJzZXJ2ZXJUeXBlIiksbG9naW5N'@;
put 'ZWNoYW5pc206ZCgibG9naW5NZWNoYW5pc20iKXx8IiIsYWRtaW5Hcm91cDpkKCJhZG1pbkdyb3VwIil8fCIiLGRjUGF0aDpkKCJkY1BhdGgiKXx8IiIsZGVidWc6InRydWUiPT09ZCgiZGVidWciKXx8ITEsdXNlQ29tcHV0ZUFwaTp0aGlzLnBhcnNlQ29tcHV0ZUFwaShkKCJ1c2VDb21wdXRl'@;
put 'QXBpIikpLGNvbnRleHROYW1lOmQoImNvbnRleHROYW1lIil8fCIiLGhvdExpY2VuY2VLZXk6ZCgiaG90TGljZW5jZUtleSIpfHwiIn07dGhpcy5kY0FkYXB0ZXJTZXR0aW5ncz1oLHRoaXMuYXBwU3RvcmVTZXJ2aWNlLnNldERjQWRhcHRlclNldHRpbmdzKGgpLHRoaXMuYXBwU2VydmljZS5z'@;
put 'YXNTZXJ2aWNlSW5pdCgpfWxpY2VuY2VQcm9ibGVtRGV0YWlscyhhKXt0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKGEpfXBhcnNlQ29tcHV0ZUFwaShhKXtyZXR1cm4gdm9pZCAwPT09YXx8InVuZGVmaW5lZCI9PT1hfHwibnVsbCI9PT1hP251bGw6InRydWUiPT09YXx8ITF9c3Vic2NyaWJl'@;
put 'VG9EZW1vTGltaXRNb2RhbCgpe3RoaXMuZXZlbnRTZXJ2aWNlLm9uRGVtb0xpbWl0TW9kYWxTaG93LnN1YnNjcmliZShhPT57dGhpcy5kZW1vTGltaXROb3RpY2U9e29wZW46ITAsZmVhdHVyZU5hbWU6YX19KX1zdWJzY3JpYmVUb0xpY2Vuc2VFdmVudHMoKXt0aGlzLmxpY2VuY2VTZXJ2aWNl'@;
put 'LmlzQXBwRnJlZVRpZXIuc3Vic2NyaWJlKGE9Pnt0aGlzLmZyZWVUaWVyQmFubmVyPWF9KSx0aGlzLmxpY2VuY2VTZXJ2aWNlLmxpY2Vuc2VFeHBpcmVzSW5EYXlzLnN1YnNjcmliZShhPT57YSYmYTw9MTQmJih0aGlzLmxpY2Vuc2VFeHBpcmluZ0RheXM9YSl9KSx0aGlzLmxpY2VuY2VTZXJ2'@;
put 'aWNlLmlzQXBwT3ZlckNhcGFjaXR5LnN1YnNjcmliZShhPT57dGhpcy5hcHBPdmVyQ2FwYWNpdHk9YX0pfXN1YnNjcmliZVRvQXBwQWN0aXZlKCl7dGhpcy5saWNlbmNlU2VydmljZS5pc0FwcEFjdGl2YXRlZC5zdWJzY3JpYmUoYT0+e3RoaXMuYXBwQWN0aXZlPWF9KX1zdWJzY3JpYmVUb1No'@;
put 'b3dBYm9ydE1vZGFsKCl7dGhpcy5ldmVudFNlcnZpY2Uub25TaG93QWJvcnRNb2RhbC5zdWJzY3JpYmUoYT0+e2EuaWQ9dGhpcy5zYXNqc0Fib3J0cy5sZW5ndGgrMSx0aGlzLnNhc2pzQWJvcnRzLnB1c2goYSksdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpfSl9c3Vic2NyaWJlVG9TdGFydHVw'@;
put 'RGF0YSgpe3RoaXMuZXZlbnRTZXJ2aWNlLm9uU3RhcnR1cERhdGFMb2FkZWQuc3Vic2NyaWJlKCgpPT57dGhpcy5zdGFydHVwRGF0YUxvYWRlZD0hMH0pfXN1YnNjcmliZVRvUmVxdWVzdHNNb2RhbCgpe3RoaXMuZXZlbnRTZXJ2aWNlLm9uUmVxdWVzdHNNb2RhbE9wZW4uc3Vic2NyaWJlKGE9'@;
put 'Pnt0aGlzLnJlcXVlc3RzTW9kYWw9ITB9KX1jbG9zZUFib3J0TW9kYWwoYSl7bGV0IGQ9dGhpcy5zYXNqc0Fib3J0cy5maW5kSW5kZXgoaD0+aC5pZD09PWEpO3RoaXMuc2FzanNBYm9ydHMuc3BsaWNlKGQsMSl9dG9nZ2xlU2lkZWJhcigpe3RoaXMuZXZlbnRTZXJ2aWNlLnRvZ2dsZVNpZGVi'@;
put 'YXIoKX1pc01haW5Sb3V0ZShhKXtyZXR1cm4gdGhpcy5yb3V0ZXIudXJsLmluY2x1ZGVzKGEpfW9wZW5MaWNlbmNpbmdQYWdlKCl7dGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCgiL2xpY2Vuc2luZy91cGRhdGUiKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5l'@;
put 'dyhkfHxjKShHZShvTCksR2UodTEpLEdlKExzKSxHZShDdSksR2UoZmgpLEdlKHZjKSxHZShROCksR2UoRXMpLEdlKEppKSl9fXN0YXRpY3t0aGlzLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJteS1hcHAiXV0sZGVjbHM6MjYsdmFyczoxNyxjb25zdHM6W1sxLCJtYWluLWNv'@;
put 'bnRhaW5lciJdLFs0LCJuZ0lmIl0sWzEsImFwcC1oZWFkZXIiXSxbInR5cGUiLCJidXR0b24iLCJjbGFzcyIsImN1cnNvci1wb2ludGVyIHNlbGVjdC1ub25lIG1sLTEwIGQtZmxleCBjbHItanVzdGlmeS1jb250ZW50LWNlbnRlciBjbHItYWxpZ24taXRlbXMtY2VudGVyIiwzLCJjbGljayIs'@;
put 'NCwibmdJZiJdLFsxLCJsb2dvIiwiZC1mbGV4IiwiY2xyLWFsaWduLWl0ZW1zLWNlbnRlciJdLFsiaHJlZiIsIiMiLCJjbGFzcyIsIm5hdi1saW5rIiwzLCJyb3V0ZXJMaW5rIiw0LCJuZ0lmIl0sWyJjbGFzcyIsInN1Ym5hdiIsNCwibmdJZiJdLFszLCJvcGVuZWRDaGFuZ2UiLCJvcGVuZWQi'@;
put 'XSxbMywiZGF0YSIsImZvcmNlUmVsb2FkIiwib25Db25maXJtTW9kYWxDbGljayIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWyJhcHBEcmFnTmRyb3AiLCIiLDEsInBvc2l0aW9uLXJlbGF0aXZlIiwzLCJjbHJNb2RhbE9wZW5DaGFuZ2UiLCJjbHJNb2RhbE9wZW4iLCJjbHJNb2RhbENsb3NhYmxl'@;
put 'IiwiY2xyTW9kYWxTaXplIl0sWzEsIm1vZGFsLXRpdGxlIl0sWyJzaXplIiwiMjAiLCJzaGFwZSIsImxvY2siXSxbMSwibW9kYWwtYm9keSJdLFsiY2xhc3MiLCJhcHAtbG9hZGluZyIsNCwibmdJZiJdLFsiY2xhc3MiLCJhbGVydCBhbGVydC1hcHAtbGV2ZWwgYWxlcnQtd2FybmluZyIsImlk'@;
put 'IiwiZGVtby1iYW5uZXIiLCJyb2xlIiwiYWxlcnQiLDQsIm5nSWYiXSxbImNsYXNzIiwiYWxlcnQgYWxlcnQtYXBwLWxldmVsIGFsZXJ0LWRhbmdlciIsImlkIiwiZGVtby1iYW5uZXIiLCJyb2xlIiwiYWxlcnQiLDQsIm5nSWYiXSxbImlkIiwiZGVtby1iYW5uZXIiLCJyb2xlIiwiYWxlcnQi'@;
put 'LDEsImFsZXJ0IiwiYWxlcnQtYXBwLWxldmVsIiwiYWxlcnQtd2FybmluZyJdLFsxLCJhbGVydC1pdGVtcyJdLFsxLCJhbGVydC1pdGVtIiwic3RhdGljIl0sWzEsImFsZXJ0LWljb24td3JhcHBlciJdLFsic2hhcGUiLCJ3YXJuaW5nLXN0YW5kYXJkIiwxLCJhbGVydC1pY29uIl0sWzEsImFs'@;
put 'ZXJ0LXRleHQiXSxbImNsYXNzZXMiLCJjb2xvci13aGl0ZSJdLFsicm91dGVyTGluayIsIi9saWNlbnNpbmcvdXBkYXRlIiwxLCJ1cGRhdGUta2V5Il0sWzEsInVwZGF0ZS1rZXkiLCJjdXJzb3ItcG9pbnRlciIsMywiY2xpY2siXSxbImlkIiwiZGVtby1iYW5uZXIiLCJyb2xlIiwiYWxlcnQi'@;
put 'LDEsImFsZXJ0IiwiYWxlcnQtYXBwLWxldmVsIiwiYWxlcnQtZGFuZ2VyIl0sWyJyb3V0ZXJMaW5rIiwiL2xpY2Vuc2luZy91cGRhdGUiLCJjbGFzcyIsInVwZGF0ZS1rZXkiLDQsIm5nSWYiXSxbInR5cGUiLCJidXR0b24iLDEsImN1cnNvci1wb2ludGVyIiwic2VsZWN0LW5vbmUiLCJtbC0x'@;
put 'MCIsImQtZmxleCIsImNsci1qdXN0aWZ5LWNvbnRlbnQtY2VudGVyIiwiY2xyLWFsaWduLWl0ZW1zLWNlbnRlciIsMywiY2xpY2siXSxbInNpemUiLCIyNCIsInNoYXBlIiwidHJlZS12aWV3Il0sWyJocmVmIiwiIyIsMSwibmF2LWxpbmsiLDMsInJvdXRlckxpbmsiXSxbInNyYyIsIi9TQVNK'@;
put 'b2JFeGVjdXRpb24/X0ZJTEU9L1B1YmxpYy9hcHAvZGNwbGFjZWhvbGRlci9zZXJ2aWNlcy93ZWIvaW1hZ2VzL2RjLWxvZ28uc3ZnIiwiYWx0IiwiZGF0YWNvbnRyb2xsZXIgbG9nbyB3aXRob3V0IHRleHQiLDEsIndpdGhvdXQtdGV4dCIsImQtYmxvY2siLCJkLW1kLW5vbmUiXSxbInNyYyIs'@;
put 'Ii9TQVNKb2JFeGVjdXRpb24/X0ZJTEU9L1B1YmxpYy9hcHAvZGNwbGFjZWhvbGRlci9zZXJ2aWNlcy93ZWIvaW1hZ2VzL2RhdGFjb250cm9sbGVyLnN2ZyIsImFsdCIsImRhdGFjb250cm9sbGVyIGxvZ28iLDEsIndpdGgtdGV4dCIsImQtbm9uZSIsImQtbWQtYmxvY2siXSxbMSwiY2xyLWlj'@;
put 'b24iLCJoZWFkZXItbG9nbyIsIm1sLTEwIl0sWzEsImhlYWRlci1uYXYiLCJkLWZsZXgiLCJkLXNtLW5vbmUiXSxbImNsckRyb3Bkb3duVHJpZ2dlciIsIiIsImFyaWEtbGFiZWwiLCJ0b2dnbGUgc2V0dGluZ3MgbWVudSIsMSwibmF2LWljb24iLCJjb2xvci13aGl0ZS1pIl0sWyJjbHJQb3Np'@;
put 'dGlvbiIsImJvdHRvbS1sZWZ0Iiw0LCJjbHJJZk9wZW4iXSxbMSwiaGVhZGVyLW5hdiIsImQtbm9uZSIsImQtc20tZmxleCJdLFsicm91dGVyTGlua0FjdGl2ZSIsImFjdGl2ZSIsMSwibmF2LWxpbmsiLCJuYXYtdGV4dCIsMywicm91dGVyTGluayJdLFsxLCJuYXYtbGluayIsIm5hdi10ZXh0'@;
put 'IiwzLCJyb3V0ZXJMaW5rIl0sWzEsIm5hdi1saW5rIiwibmF2LXRleHQiLCJjdXJzb3ItcG9pbnRlciIsMywicm91dGVyTGluayJdLFsiY2xyUG9zaXRpb24iLCJib3R0b20tbGVmdCJdLFsiY2xyRHJvcGRvd25JdGVtIiwiIiwzLCJyb3V0ZXJMaW5rIl0sWzEsInN1Ym5hdiJdLFsxLCJuYXYi'@;
put 'XSxbMSwibmF2LWl0ZW0iXSxbMywib25Db25maXJtTW9kYWxDbGljayIsImRhdGEiLCJmb3JjZVJlbG9hZCJdLFsxLCJhcHAtbG9hZGluZyJdLFsic3JjIiwiL1NBU0pvYkV4ZWN1dGlvbj9fRklMRT0vUHVibGljL2FwcC9kY3BsYWNlaG9sZGVyL3NlcnZpY2VzL3dlYi9pbWFnZXMvZGF0YWNv'@;
put 'bnRyb2xsZXIuc3ZnIiwiYWx0IiwiZGF0YWNvbnRyb2xsZXIgbG9nbyIsMSwibG9hZGluZy1sb2dvIl0sWyJjbGFzcyIsInNsaWRlciIsNCwibmdJZiJdLFsxLCJzbGlkZXIiXSxbMSwibGluZSJdLFsxLCJzdWJsaW5lIiwiaW5jIl0sWzEsInN1YmxpbmUiLCJkZWMiXV0sdGVtcGxhdGU6ZnVu'@;
put 'Y3Rpb24oZCxoKXsxJmQmJihkZSgwLCJkaXYiLDApLGd0KDEsTlllLDQsMywibmctY29udGFpbmVyIiwxKSxkZSgyLCJoZWFkZXIiLDIpLGd0KDMsVlllLDIsMCwiZGl2IiwzKSxkZSg0LCJkaXYiLDQpLGd0KDUsQlllLDMsMiwiYSIsNSkoNixqWWUsMiwwLCJhIiwxKSxoZSgpLGd0KDcsVVll'@;
put 'LDEzLDEwLCJuZy1jb250YWluZXIiLDEpLEd0KDgsImFwcC1oZWFkZXItYWN0aW9ucyIpLGhlKCksZ3QoOSxaWWUsMTEsOCwibmF2Iiw2KSgxMCxXWWUsMSwwLCJhcHAtYWxlcnRzIiwxKSxkZSgxMSwiYXBwLXJlcXVlc3RzLW1vZGFsIiw3KSxnaSgib3BlbmVkQ2hhbmdlIixmdW5jdGlvbih2'@;
put 'KXtyZXR1cm4gbWkoaC5yZXF1ZXN0c01vZGFsLHYpfHwoaC5yZXF1ZXN0c01vZGFsPXYpLHZ9KSxoZSgpLEd0KDEyLCJhcHAtZXhjZWwtcGFzc3dvcmQtbW9kYWwiKSxndCgxMyxZWWUsMSwwLCJyb3V0ZXItb3V0bGV0IiwxKSxHdCgxNCwiYXBwLWxvZ2luIiksZ3QoMTUsR1llLDEsMCwiYXBw'@;
put 'LWFsZXJ0cyIsMSkoMTYsJFllLDEsMiwiYXBwLWluZm8tbW9kYWwiLDgpLGRlKDE3LCJjbHItbW9kYWwiLDkpLGdpKCJjbHJNb2RhbE9wZW5DaGFuZ2UiLGZ1bmN0aW9uKHYpe3JldHVybiBtaShoLmRlbW9MaW1pdE5vdGljZS5vcGVuLHYpfHwoaC5kZW1vTGltaXROb3RpY2Uub3Blbj12KSx2'@;
put 'fSksZGUoMTgsImgzIiwxMCksTGUoMTkpLEd0KDIwLCJjbHItaWNvbiIsMTEpLGhlKCksZGUoMjEsImRpdiIsMTIpLExlKDIyLCIgQ29udGFjdCAiKSxHdCgyMywiY29udGFjdC1saW5rIiksTGUoMjQpLGhlKCkoKSgpLGd0KDI1LHFZZSwzLDEsImRpdiIsMTMpKSwyJmQmJihmZSgpLE1lKCJu'@;
put 'Z0lmIiwhaC5yb3V0ZXIudXJsLmluY2x1ZGVzKCJsaWNlbnNpbmciKSksZmUoMiksTWUoIm5nSWYiLGguaXNNYWluUm91dGUoInZpZXciKXx8aC5pc01haW5Sb3V0ZSgiaG9tZSIpJiYhaC5yb3V0ZXIudXJsLmluY2x1ZGVzKCJsaWNlbnNpbmciKSksZmUoMiksTWUoIm5nSWYiLCFoLnJvdXRl'@;
put 'ci51cmwuaW5jbHVkZXMoImRlcGxveSIpKSxmZSgpLE1lKCJuZ0lmIixoLnJvdXRlci51cmwuaW5jbHVkZXMoImRlcGxveSIpKSxmZSgpLE1lKCJuZ0lmIiwhaC5yb3V0ZXIudXJsLmluY2x1ZGVzKCJkZXBsb3kiKSYmIWgucm91dGVyLnVybC5pbmNsdWRlcygibGljZW5zaW5nIikpLGZlKDIp'@;
put 'LE1lKCJuZ0lmIixoLnJvdXRlci51cmwuaW5jbHVkZXMoInN1Ym1pdHRlZCIpfHxoLnJvdXRlci51cmwuaW5jbHVkZXMoImFwcHJvdmUiKXx8aC5yb3V0ZXIudXJsLmluY2x1ZGVzKCJoaXN0b3J5IikpLGZlKCksTWUoIm5nSWYiLCFoLmVyclRvcCksZmUoKSxwaSgib3BlbmVkIixoLnJlcXVl'@;
put 'c3RzTW9kYWwpLGZlKDIpLE1lKCJuZ0lmIixoLnN0YXJ0dXBEYXRhTG9hZGVkKSxmZSgyKSxNZSgibmdJZiIsaC5lcnJUb3ApLGZlKCksTWUoIm5nRm9yT2YiLGguc2FzanNBYm9ydHMpLGZlKCkscGkoImNsck1vZGFsT3BlbiIsaC5kZW1vTGltaXROb3RpY2Uub3BlbiksTWUoImNsck1vZGFs'@;
put 'Q2xvc2FibGUiLCEwKSgiY2xyTW9kYWxTaXplIiwibGciKSxmZSgyKSxEcigiIExvY2tlZCBGZWF0dXJlICgiLGguZGVtb0xpbWl0Tm90aWNlLmZlYXR1cmVOYW1lLCIpICIpLGZlKDUpLERyKCIgd2l0aCB5b3VyIHNpdGUgaWQgKCIsaC5zeXNzaXRlLnZhbHVlLCIpIHRvIGFjdGl2YXRlISAi'@;
put 'KSxmZSgpLE1lKCJuZ0lmIiwhaC5zdGFydHVwRGF0YUxvYWRlZCkpfSxkZXBlbmRlbmNpZXM6W25zLGJhLHJnLGMxLHB5LE1XZSxWV2UseldlLHBPLFdXZSxReCxIbCxycyxvdSxLdSxMMixzZyxnNyxtNyxWeSx0RSxiWWUsVFllXSxlbmNhcHN1bGF0aW9uOjJ9KX19cmV0dXJuIGN9KSgpO2Z1'@;
put 'bmN0aW9uIHZoZShjKXtyZXR1cm4gbmV3IFFuKDNlMywhMSl9ZnVuY3Rpb24gRG0oYyl7c3dpdGNoKGMubGVuZ3RoKXtjYXNlIDA6cmV0dXJuIG5ldyB3eDtjYXNlIDE6cmV0dXJuIGNbMF07ZGVmYXVsdDpyZXR1cm4gbmV3IFIwZShjKX19ZnVuY3Rpb24gYmhlKGMsbCxhPW5ldyBNYXAsZD1u'@;
put 'ZXcgTWFwKXtjb25zdCBoPVtdLGY9W107bGV0IHY9LTEsTT1udWxsO2lmKGwuZm9yRWFjaChEPT57Y29uc3QgWj1ELmdldCgib2Zmc2V0IikscmU9Wj09dixjZT1yZSYmTXx8bmV3IE1hcDtELmZvckVhY2goKGJlLEVlKT0+e2xldCBCZT1FZSxxZT1iZTtpZigib2Zmc2V0IiE9PUVlKXN3aXRj'@;
put 'aChCZT1jLm5vcm1hbGl6ZVByb3BlcnR5TmFtZShCZSxoKSxxZSl7Y2FzZSIhIjpxZT1hLmdldChFZSk7YnJlYWs7Y2FzZSBpZzpxZT1kLmdldChFZSk7YnJlYWs7ZGVmYXVsdDpxZT1jLm5vcm1hbGl6ZVN0eWxlVmFsdWUoRWUsQmUscWUsaCl9Y2Uuc2V0KEJlLHFlKX0pLHJlfHxmLnB1c2go'@;
put 'Y2UpLE09Y2Usdj1afSksaC5sZW5ndGgpdGhyb3cgZnVuY3Rpb24gX0dlKGMpe3JldHVybiBuZXcgUW4oMzUwMiwhMSl9KCk7cmV0dXJuIGZ9ZnVuY3Rpb24gVEcoYyxsLGEsZCl7c3dpdGNoKGwpe2Nhc2Uic3RhcnQiOmMub25TdGFydCgoKT0+ZChhJiZBRyhhLCJzdGFydCIsYykpKTticmVh'@;
put 'aztjYXNlImRvbmUiOmMub25Eb25lKCgpPT5kKGEmJkFHKGEsImRvbmUiLGMpKSk7YnJlYWs7Y2FzZSJkZXN0cm95IjpjLm9uRGVzdHJveSgoKT0+ZChhJiZBRyhhLCJkZXN0cm95IixjKSkpfX1mdW5jdGlvbiBBRyhjLGwsYSl7Y29uc3QgZj1rRyhjLmVsZW1lbnQsYy50cmlnZ2VyTmFtZSxj'@;
put 'LmZyb21TdGF0ZSxjLnRvU3RhdGUsbHx8Yy5waGFzZU5hbWUsYS50b3RhbFRpbWU/P2MudG90YWxUaW1lLCEhYS5kaXNhYmxlZCksdj1jLl9kYXRhO3JldHVybiBudWxsIT12JiYoZi5fZGF0YT12KSxmfWZ1bmN0aW9uIGtHKGMsbCxhLGQsaD0iIixmPTAsdil7cmV0dXJue2VsZW1lbnQ6Yyx0'@;
put 'cmlnZ2VyTmFtZTpsLGZyb21TdGF0ZTphLHRvU3RhdGU6ZCxwaGFzZU5hbWU6aCx0b3RhbFRpbWU6ZixkaXNhYmxlZDohIXZ9fWZ1bmN0aW9uIFRoKGMsbCxhKXtsZXQgZD1jLmdldChsKTtyZXR1cm4gZHx8Yy5zZXQobCxkPWEpLGR9ZnVuY3Rpb24geWhlKGMpe2NvbnN0IGw9Yy5pbmRleE9m'@;
put 'KCI6Iik7cmV0dXJuW2Muc3Vic3RyaW5nKDEsbCksYy5zbGljZShsKzEpXX1jb25zdCBSR2U9dHlwZW9mIGRvY3VtZW50PiJ1Ij9udWxsOmRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtmdW5jdGlvbiBERyhjKXtjb25zdCBsPWMucGFyZW50Tm9kZXx8Yy5ob3N0fHxudWxsO3JldHVybiBsPT09'@;
put 'UkdlP251bGw6bH1sZXQgUDc9bnVsbCxfaGU9ITE7ZnVuY3Rpb24gd2hlKGMsbCl7Zm9yKDtsOyl7aWYobD09PWMpcmV0dXJuITA7bD1ERyhsKX1yZXR1cm4hMX1mdW5jdGlvbiBDaGUoYyxsLGEpe2lmKGEpcmV0dXJuIEFycmF5LmZyb20oYy5xdWVyeVNlbGVjdG9yQWxsKGwpKTtjb25zdCBk'@;
put 'PWMucXVlcnlTZWxlY3RvcihsKTtyZXR1cm4gZD9bZF06W119bGV0IElHPSgoKT0+e2NsYXNzIGN7dmFsaWRhdGVTdHlsZVByb3BlcnR5KGEpe3JldHVybiBmdW5jdGlvbiBPR2UoYyl7UDd8fChQNz1mdW5jdGlvbiBQR2UoKXtyZXR1cm4gdHlwZW9mIGRvY3VtZW50PCJ1Ij9kb2N1bWVudC5i'@;
put 'b2R5Om51bGx9KCl8fHt9LF9oZT0hIVA3LnN0eWxlJiYiV2Via2l0QXBwZWFyYW5jZSJpbiBQNy5zdHlsZSk7bGV0IGw9ITA7cmV0dXJuIFA3LnN0eWxlJiYhZnVuY3Rpb24gTEdlKGMpe3JldHVybiJlYmtpdCI9PWMuc3Vic3RyaW5nKDEsNil9KGMpJiYobD1jIGluIFA3LnN0eWxlLCFsJiZf'@;
put 'aGUmJihsPSJXZWJraXQiK2MuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkrYy5zbGljZSgxKWluIFA3LnN0eWxlKSksbH0oYSl9bWF0Y2hlc0VsZW1lbnQoYSxkKXtyZXR1cm4hMX1jb250YWluc0VsZW1lbnQoYSxkKXtyZXR1cm4gd2hlKGEsZCl9Z2V0UGFyZW50RWxlbWVudChhKXtyZXR1cm4g'@;
put 'REcoYSl9cXVlcnkoYSxkLGgpe3JldHVybiBDaGUoYSxkLGgpfWNvbXB1dGVTdHlsZShhLGQsaCl7cmV0dXJuIGh8fCIifWFuaW1hdGUoYSxkLGgsZix2LE09W10sRCl7cmV0dXJuIG5ldyB3eChoLGYpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMp'@;
put 'fX1zdGF0aWN7dGhpcy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KX19cmV0dXJuIGN9KSgpO2NsYXNzIFJHe3N0YXRpY3t0aGlzLk5PT1A9bmV3IElHfX1jbGFzcyBMR3t9Y29uc3QgSEdlPTFlMyxPRz0ibmctZW50ZXIiLGdPPSJuZy1sZWF2ZSIsbU89Im5n'@;
put 'LXRyaWdnZXIiLHZPPSIubmctdHJpZ2dlciIsTWhlPSJuZy1hbmltYXRpbmciLFBHPSIubmctYW5pbWF0aW5nIjtmdW5jdGlvbiBwZyhjKXtpZigibnVtYmVyIj09dHlwZW9mIGMpcmV0dXJuIGM7Y29uc3QgbD1jLm1hdGNoKC9eKC0/W1wuXGRdKykobT9zKS8pO3JldHVybiFsfHxsLmxlbmd0'@;
put 'aDwyPzA6RkcocGFyc2VGbG9hdChsWzFdKSxsWzJdKX1mdW5jdGlvbiBGRyhjLGwpe3JldHVybiJzIj09PWw/YypIR2U6Y31mdW5jdGlvbiBiTyhjLGwsYSl7cmV0dXJuIGMuaGFzT3duUHJvcGVydHkoImR1cmF0aW9uIik/YzpmdW5jdGlvbiBWR2UoYyxsLGEpe2xldCBoLGY9MCx2PSIiO2lm'@;
put 'KCJzdHJpbmciPT10eXBlb2YgYyl7Y29uc3QgTT1jLm1hdGNoKC9eKC0/W1wuXGRdKykobT9zKSg/OlxzKygtP1tcLlxkXSspKG0/cykpPyg/OlxzKyhbLWEtel0rKD86XCguKz9cKSk/KSk/JC9pKTtpZihudWxsPT09TSlyZXR1cm4gbC5wdXNoKHZoZSgpKSx7ZHVyYXRpb246MCxkZWxheTow'@;
put 'LGVhc2luZzoiIn07aD1GRyhwYXJzZUZsb2F0KE1bMV0pLE1bMl0pO2NvbnN0IEQ9TVszXTtudWxsIT1EJiYoZj1GRyhwYXJzZUZsb2F0KEQpLE1bNF0pKTtjb25zdCBaPU1bNV07WiYmKHY9Wil9ZWxzZSBoPWM7aWYoIWEpe2xldCBNPSExLEQ9bC5sZW5ndGg7aDwwJiYobC5wdXNoKGZ1bmN0'@;
put 'aW9uIEpZZSgpe3JldHVybiBuZXcgUW4oMzEwMCwhMSl9KCkpLE09ITApLGY8MCYmKGwucHVzaChmdW5jdGlvbiBRWWUoKXtyZXR1cm4gbmV3IFFuKDMxMDEsITEpfSgpKSxNPSEwKSxNJiZsLnNwbGljZShELDAsdmhlKCkpfXJldHVybntkdXJhdGlvbjpoLGRlbGF5OmYsZWFzaW5nOnZ9fShj'@;
put 'LGwsYSl9ZnVuY3Rpb24gTXAoYyxsLGEpe2wuZm9yRWFjaCgoZCxoKT0+e2NvbnN0IGY9TkcoaCk7YSYmIWEuaGFzKGgpJiZhLnNldChoLGMuc3R5bGVbZl0pLGMuc3R5bGVbZl09ZH0pfWZ1bmN0aW9uIEY3KGMsbCl7bC5mb3JFYWNoKChhLGQpPT57Y29uc3QgaD1ORyhkKTtjLnN0eWxlW2hd'@;
put 'PSIifSl9ZnVuY3Rpb24gbkUoYyl7cmV0dXJuIEFycmF5LmlzQXJyYXkoYyk/MT09Yy5sZW5ndGg/Y1swXTpmdW5jdGlvbiBjUGUoYyxsPW51bGwpe3JldHVybnt0eXBlOkFvLlNlcXVlbmNlLHN0ZXBzOmMsb3B0aW9uczpsfX0oYyk6Y31jb25zdCBIRz1uZXcgUmVnRXhwKCJ7e1xccyooLis/'@;
put 'KVxccyp9fSIsImciKTtmdW5jdGlvbiBFaGUoYyl7bGV0IGw9W107aWYoInN0cmluZyI9PXR5cGVvZiBjKXtsZXQgYTtmb3IoO2E9SEcuZXhlYyhjKTspbC5wdXNoKGFbMV0pO0hHLmxhc3RJbmRleD0wfXJldHVybiBsfWZ1bmN0aW9uIHJFKGMsbCxhKXtjb25zdCBkPWAke2N9YCxoPWQucmVw'@;
put 'bGFjZShIRywoZix2KT0+e2xldCBNPWxbdl07cmV0dXJuIG51bGw9PU0mJihhLnB1c2goZnVuY3Rpb24gdEdlKGMpe3JldHVybiBuZXcgUW4oMzAwMywhMSl9KCkpLE09IiIpLE0udG9TdHJpbmcoKX0pO3JldHVybiBoPT1kP2M6aH1jb25zdCB6R2U9Ly0rKFthLXowLTldKS9nO2Z1bmN0aW9u'@;
put 'IE5HKGMpe3JldHVybiBjLnJlcGxhY2UoekdlLCguLi5sKT0+bFsxXS50b1VwcGVyQ2FzZSgpKX1mdW5jdGlvbiBBaChjLGwsYSl7c3dpdGNoKGwudHlwZSl7Y2FzZSBBby5UcmlnZ2VyOnJldHVybiBjLnZpc2l0VHJpZ2dlcihsLGEpO2Nhc2UgQW8uU3RhdGU6cmV0dXJuIGMudmlzaXRTdGF0'@;
put 'ZShsLGEpO2Nhc2UgQW8uVHJhbnNpdGlvbjpyZXR1cm4gYy52aXNpdFRyYW5zaXRpb24obCxhKTtjYXNlIEFvLlNlcXVlbmNlOnJldHVybiBjLnZpc2l0U2VxdWVuY2UobCxhKTtjYXNlIEFvLkdyb3VwOnJldHVybiBjLnZpc2l0R3JvdXAobCxhKTtjYXNlIEFvLkFuaW1hdGU6cmV0dXJuIGMu'@;
put 'dmlzaXRBbmltYXRlKGwsYSk7Y2FzZSBBby5LZXlmcmFtZXM6cmV0dXJuIGMudmlzaXRLZXlmcmFtZXMobCxhKTtjYXNlIEFvLlN0eWxlOnJldHVybiBjLnZpc2l0U3R5bGUobCxhKTtjYXNlIEFvLlJlZmVyZW5jZTpyZXR1cm4gYy52aXNpdFJlZmVyZW5jZShsLGEpO2Nhc2UgQW8uQW5pbWF0'@;
put 'ZUNoaWxkOnJldHVybiBjLnZpc2l0QW5pbWF0ZUNoaWxkKGwsYSk7Y2FzZSBBby5BbmltYXRlUmVmOnJldHVybiBjLnZpc2l0QW5pbWF0ZVJlZihsLGEpO2Nhc2UgQW8uUXVlcnk6cmV0dXJuIGMudmlzaXRRdWVyeShsLGEpO2Nhc2UgQW8uU3RhZ2dlcjpyZXR1cm4gYy52aXNpdFN0YWdnZXIo'@;
put 'bCxhKTtkZWZhdWx0OnRocm93IGZ1bmN0aW9uIG5HZShjKXtyZXR1cm4gbmV3IFFuKDMwMDQsITEpfSgpfX1mdW5jdGlvbiBWRyhjLGwpe3JldHVybiB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShjKVtsXX1jb25zdCBXR2U9bmV3IFNldChbIndpZHRoIiwiaGVpZ2h0IiwibWluV2lkdGgiLCJt'@;
put 'aW5IZWlnaHQiLCJtYXhXaWR0aCIsIm1heEhlaWdodCIsImxlZnQiLCJ0b3AiLCJib3R0b20iLCJyaWdodCIsImZvbnRTaXplIiwib3V0bGluZVdpZHRoIiwib3V0bGluZU9mZnNldCIsInBhZGRpbmdUb3AiLCJwYWRkaW5nTGVmdCIsInBhZGRpbmdCb3R0b20iLCJwYWRkaW5nUmlnaHQiLCJt'@;
put 'YXJnaW5Ub3AiLCJtYXJnaW5MZWZ0IiwibWFyZ2luQm90dG9tIiwibWFyZ2luUmlnaHQiLCJib3JkZXJSYWRpdXMiLCJib3JkZXJXaWR0aCIsImJvcmRlclRvcFdpZHRoIiwiYm9yZGVyTGVmdFdpZHRoIiwiYm9yZGVyUmlnaHRXaWR0aCIsImJvcmRlckJvdHRvbVdpZHRoIiwidGV4dEluZGVu'@;
put 'dCIsInBlcnNwZWN0aXZlIl0pO2NsYXNzIFRoZSBleHRlbmRzIExHe25vcm1hbGl6ZVByb3BlcnR5TmFtZShsLGEpe3JldHVybiBORyhsKX1ub3JtYWxpemVTdHlsZVZhbHVlKGwsYSxkLGgpe2xldCBmPSIiO2NvbnN0IHY9ZC50b1N0cmluZygpLnRyaW0oKTtpZihXR2UuaGFzKGEpJiYwIT09'@;
put 'ZCYmIjAiIT09ZClpZigibnVtYmVyIj09dHlwZW9mIGQpZj0icHgiO2Vsc2V7Y29uc3QgTT1kLm1hdGNoKC9eWystXT9bXGRcLl0rKFthLXpdKikkLyk7TSYmMD09TVsxXS5sZW5ndGgmJmgucHVzaChmdW5jdGlvbiByR2UoYyxsKXtyZXR1cm4gbmV3IFFuKDMwMDUsITEpfSgpKX1yZXR1cm4g'@;
put 'ditmfX1jb25zdCB5Tz0iKiI7Y29uc3QgX089bmV3IFNldChbInRydWUiLCIxIl0pLHdPPW5ldyBTZXQoWyJmYWxzZSIsIjAiXSk7ZnVuY3Rpb24gQWhlKGMsbCl7Y29uc3QgYT1fTy5oYXMoYyl8fHdPLmhhcyhjKSxkPV9PLmhhcyhsKXx8d08uaGFzKGwpO3JldHVybihoLGYpPT57bGV0IHY9'@;
put 'Yz09eU98fGM9PWgsTT1sPT15T3x8bD09ZjtyZXR1cm4hdiYmYSYmImJvb2xlYW4iPT10eXBlb2YgaCYmKHY9aD9fTy5oYXMoYyk6d08uaGFzKGMpKSwhTSYmZCYmImJvb2xlYW4iPT10eXBlb2YgZiYmKE09Zj9fTy5oYXMobCk6d08uaGFzKGwpKSx2JiZNfX1jb25zdCBLR2U9bmV3IFJlZ0V4'@;
put 'cCgicyo6c2VsZnMqLD8iLCJnIik7ZnVuY3Rpb24gQkcoYyxsLGEsZCl7cmV0dXJuIG5ldyBxR2UoYykuYnVpbGQobCxhLGQpfWNsYXNzIHFHZXtjb25zdHJ1Y3RvcihsKXt0aGlzLl9kcml2ZXI9bH1idWlsZChsLGEsZCl7Y29uc3QgaD1uZXcgUUdlKGEpO3JldHVybiB0aGlzLl9yZXNldENv'@;
put 'bnRleHRTdHlsZVRpbWluZ1N0YXRlKGgpLEFoKHRoaXMsbkUobCksaCl9X3Jlc2V0Q29udGV4dFN0eWxlVGltaW5nU3RhdGUobCl7bC5jdXJyZW50UXVlcnlTZWxlY3Rvcj0iIixsLmNvbGxlY3RlZFN0eWxlcz1uZXcgTWFwLGwuY29sbGVjdGVkU3R5bGVzLnNldCgiIixuZXcgTWFwKSxsLmN1'@;
put 'cnJlbnRUaW1lPTB9dmlzaXRUcmlnZ2VyKGwsYSl7bGV0IGQ9YS5xdWVyeUNvdW50PTAsaD1hLmRlcENvdW50PTA7Y29uc3QgZj1bXSx2PVtdO3JldHVybiJAIj09bC5uYW1lLmNoYXJBdCgwKSYmYS5lcnJvcnMucHVzaChmdW5jdGlvbiBpR2UoKXtyZXR1cm4gbmV3IFFuKDMwMDYsITEpfSgp'@;
put 'KSxsLmRlZmluaXRpb25zLmZvckVhY2goTT0+e2lmKHRoaXMuX3Jlc2V0Q29udGV4dFN0eWxlVGltaW5nU3RhdGUoYSksTS50eXBlPT1Bby5TdGF0ZSl7Y29uc3QgRD1NLFo9RC5uYW1lO1oudG9TdHJpbmcoKS5zcGxpdCgvXHMqLFxzKi8pLmZvckVhY2gocmU9PntELm5hbWU9cmUsZi5wdXNo'@;
put 'KHRoaXMudmlzaXRTdGF0ZShELGEpKX0pLEQubmFtZT1afWVsc2UgaWYoTS50eXBlPT1Bby5UcmFuc2l0aW9uKXtjb25zdCBEPXRoaXMudmlzaXRUcmFuc2l0aW9uKE0sYSk7ZCs9RC5xdWVyeUNvdW50LGgrPUQuZGVwQ291bnQsdi5wdXNoKEQpfWVsc2UgYS5lcnJvcnMucHVzaChmdW5jdGlv'@;
put 'biBhR2UoKXtyZXR1cm4gbmV3IFFuKDMwMDcsITEpfSgpKX0pLHt0eXBlOkFvLlRyaWdnZXIsbmFtZTpsLm5hbWUsc3RhdGVzOmYsdHJhbnNpdGlvbnM6dixxdWVyeUNvdW50OmQsZGVwQ291bnQ6aCxvcHRpb25zOm51bGx9fXZpc2l0U3RhdGUobCxhKXtjb25zdCBkPXRoaXMudmlzaXRTdHls'@;
put 'ZShsLnN0eWxlcyxhKSxoPWwub3B0aW9ucyYmbC5vcHRpb25zLnBhcmFtc3x8bnVsbDtpZihkLmNvbnRhaW5zRHluYW1pY1N0eWxlcyl7Y29uc3QgZj1uZXcgU2V0LHY9aHx8e307ZC5zdHlsZXMuZm9yRWFjaChNPT57TSBpbnN0YW5jZW9mIE1hcCYmTS5mb3JFYWNoKEQ9PntFaGUoRCkuZm9y'@;
put 'RWFjaChaPT57di5oYXNPd25Qcm9wZXJ0eShaKXx8Zi5hZGQoWil9KX0pfSksZi5zaXplJiZhLmVycm9ycy5wdXNoKGZ1bmN0aW9uIG9HZShjLGwpe3JldHVybiBuZXcgUW4oMzAwOCwhMSl9KDAsZi52YWx1ZXMoKSkpfXJldHVybnt0eXBlOkFvLlN0YXRlLG5hbWU6bC5uYW1lLHN0eWxlOmQs'@;
put 'b3B0aW9uczpoP3twYXJhbXM6aH06bnVsbH19dmlzaXRUcmFuc2l0aW9uKGwsYSl7YS5xdWVyeUNvdW50PTAsYS5kZXBDb3VudD0wO2NvbnN0IGQ9QWgodGhpcyxuRShsLmFuaW1hdGlvbiksYSksaD1mdW5jdGlvbiBZR2UoYyxsKXtjb25zdCBhPVtdO3JldHVybiJzdHJpbmciPT10eXBlb2Yg'@;
put 'Yz9jLnNwbGl0KC9ccyosXHMqLykuZm9yRWFjaChkPT5mdW5jdGlvbiBHR2UoYyxsLGEpe2lmKCI6Ij09Y1swXSl7Y29uc3QgRD1mdW5jdGlvbiAkR2UoYyxsKXtzd2l0Y2goYyl7Y2FzZSI6ZW50ZXIiOnJldHVybiJ2b2lkID0+ICoiO2Nhc2UiOmxlYXZlIjpyZXR1cm4iKiA9PiB2b2lkIjtj'@;
put 'YXNlIjppbmNyZW1lbnQiOnJldHVybihhLGQpPT5wYXJzZUZsb2F0KGQpPnBhcnNlRmxvYXQoYSk7Y2FzZSI6ZGVjcmVtZW50IjpyZXR1cm4oYSxkKT0+cGFyc2VGbG9hdChkKTxwYXJzZUZsb2F0KGEpO2RlZmF1bHQ6cmV0dXJuIGwucHVzaChmdW5jdGlvbiBtR2UoYyl7cmV0dXJuIG5ldyBR'@;
put 'bigzMDE2LCExKX0oKSksIiogPT4gKiJ9fShjLGEpO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBEKXJldHVybiB2b2lkIGwucHVzaChEKTtjPUR9Y29uc3QgZD1jLm1hdGNoKC9eKFwqfFstXHddKylccyooPD9bPS1dPilccyooXCp8Wy1cd10rKSQvKTtpZihudWxsPT1kfHxkLmxlbmd0aDw0KXJl'@;
put 'dHVybiBhLnB1c2goZnVuY3Rpb24gZ0dlKGMpe3JldHVybiBuZXcgUW4oMzAxNSwhMSl9KCkpLGw7Y29uc3QgaD1kWzFdLGY9ZFsyXSx2PWRbM107bC5wdXNoKEFoZShoLHYpKSwiPCI9PWZbMF0mJihoIT15T3x8diE9eU8pJiZsLnB1c2goQWhlKHYsaCkpfShkLGEsbCkpOmEucHVzaChjKSxh'@;
put 'fShsLmV4cHIsYS5lcnJvcnMpO3JldHVybnt0eXBlOkFvLlRyYW5zaXRpb24sbWF0Y2hlcnM6aCxhbmltYXRpb246ZCxxdWVyeUNvdW50OmEucXVlcnlDb3VudCxkZXBDb3VudDphLmRlcENvdW50LG9wdGlvbnM6SDcobC5vcHRpb25zKX19dmlzaXRTZXF1ZW5jZShsLGEpe3JldHVybnt0eXBl'@;
put 'OkFvLlNlcXVlbmNlLHN0ZXBzOmwuc3RlcHMubWFwKGQ9PkFoKHRoaXMsZCxhKSksb3B0aW9uczpINyhsLm9wdGlvbnMpfX12aXNpdEdyb3VwKGwsYSl7Y29uc3QgZD1hLmN1cnJlbnRUaW1lO2xldCBoPTA7Y29uc3QgZj1sLnN0ZXBzLm1hcCh2PT57YS5jdXJyZW50VGltZT1kO2NvbnN0IE09'@;
put 'QWgodGhpcyx2LGEpO3JldHVybiBoPU1hdGgubWF4KGgsYS5jdXJyZW50VGltZSksTX0pO3JldHVybiBhLmN1cnJlbnRUaW1lPWgse3R5cGU6QW8uR3JvdXAsc3RlcHM6ZixvcHRpb25zOkg3KGwub3B0aW9ucyl9fXZpc2l0QW5pbWF0ZShsLGEpe2NvbnN0IGQ9ZnVuY3Rpb24gdCRlKGMsbCl7'@;
put 'aWYoYy5oYXNPd25Qcm9wZXJ0eSgiZHVyYXRpb24iKSlyZXR1cm4gYztpZigibnVtYmVyIj09dHlwZW9mIGMpcmV0dXJuIGpHKGJPKGMsbCkuZHVyYXRpb24sMCwiIik7Y29uc3QgYT1jO2lmKGEuc3BsaXQoL1xzKy8pLnNvbWUoZj0+InsiPT1mLmNoYXJBdCgwKSYmInsiPT1mLmNoYXJBdCgx'@;
put 'KSkpe2NvbnN0IGY9akcoMCwwLCIiKTtyZXR1cm4gZi5keW5hbWljPSEwLGYuc3RyVmFsdWU9YSxmfWNvbnN0IGg9Yk8oYSxsKTtyZXR1cm4gakcoaC5kdXJhdGlvbixoLmRlbGF5LGguZWFzaW5nKX0obC50aW1pbmdzLGEuZXJyb3JzKTthLmN1cnJlbnRBbmltYXRlVGltaW5ncz1kO2xldCBo'@;
put 'LGY9bC5zdHlsZXM/bC5zdHlsZXM6dXMoe30pO2lmKGYudHlwZT09QW8uS2V5ZnJhbWVzKWg9dGhpcy52aXNpdEtleWZyYW1lcyhmLGEpO2Vsc2V7bGV0IHY9bC5zdHlsZXMsTT0hMTtpZighdil7TT0hMDtjb25zdCBaPXt9O2QuZWFzaW5nJiYoWi5lYXNpbmc9ZC5lYXNpbmcpLHY9dXMoWil9'@;
put 'YS5jdXJyZW50VGltZSs9ZC5kdXJhdGlvbitkLmRlbGF5O2NvbnN0IEQ9dGhpcy52aXNpdFN0eWxlKHYsYSk7RC5pc0VtcHR5U3RlcD1NLGg9RH1yZXR1cm4gYS5jdXJyZW50QW5pbWF0ZVRpbWluZ3M9bnVsbCx7dHlwZTpBby5BbmltYXRlLHRpbWluZ3M6ZCxzdHlsZTpoLG9wdGlvbnM6bnVs'@;
put 'bH19dmlzaXRTdHlsZShsLGEpe2NvbnN0IGQ9dGhpcy5fbWFrZVN0eWxlQXN0KGwsYSk7cmV0dXJuIHRoaXMuX3ZhbGlkYXRlU3R5bGVBc3QoZCxhKSxkfV9tYWtlU3R5bGVBc3QobCxhKXtjb25zdCBkPVtdLGg9QXJyYXkuaXNBcnJheShsLnN0eWxlcyk/bC5zdHlsZXM6W2wuc3R5bGVzXTtm'@;
put 'b3IobGV0IE0gb2YgaCkic3RyaW5nIj09dHlwZW9mIE0/TT09PWlnP2QucHVzaChNKTphLmVycm9ycy5wdXNoKG5ldyBRbigzMDAyLCExKSk6ZC5wdXNoKG5ldyBNYXAoT2JqZWN0LmVudHJpZXMoTSkpKTtsZXQgZj0hMSx2PW51bGw7cmV0dXJuIGQuZm9yRWFjaChNPT57aWYoTSBpbnN0YW5j'@;
put 'ZW9mIE1hcCYmKE0uaGFzKCJlYXNpbmciKSYmKHY9TS5nZXQoImVhc2luZyIpLE0uZGVsZXRlKCJlYXNpbmciKSksIWYpKWZvcihsZXQgRCBvZiBNLnZhbHVlcygpKWlmKEQudG9TdHJpbmcoKS5pbmRleE9mKCJ7eyIpPj0wKXtmPSEwO2JyZWFrfX0pLHt0eXBlOkFvLlN0eWxlLHN0eWxlczpk'@;
put 'LGVhc2luZzp2LG9mZnNldDpsLm9mZnNldCxjb250YWluc0R5bmFtaWNTdHlsZXM6ZixvcHRpb25zOm51bGx9fV92YWxpZGF0ZVN0eWxlQXN0KGwsYSl7Y29uc3QgZD1hLmN1cnJlbnRBbmltYXRlVGltaW5ncztsZXQgaD1hLmN1cnJlbnRUaW1lLGY9YS5jdXJyZW50VGltZTtkJiZmPjAmJihm'@;
put 'LT1kLmR1cmF0aW9uK2QuZGVsYXkpLGwuc3R5bGVzLmZvckVhY2godj0+eyJzdHJpbmciIT10eXBlb2YgdiYmdi5mb3JFYWNoKChNLEQpPT57Y29uc3QgWj1hLmNvbGxlY3RlZFN0eWxlcy5nZXQoYS5jdXJyZW50UXVlcnlTZWxlY3RvcikscmU9Wi5nZXQoRCk7bGV0IGNlPSEwO3JlJiYoZiE9'@;
put 'aCYmZj49cmUuc3RhcnRUaW1lJiZoPD1yZS5lbmRUaW1lJiYoYS5lcnJvcnMucHVzaChmdW5jdGlvbiBsR2UoYyxsLGEsZCxoKXtyZXR1cm4gbmV3IFFuKDMwMTAsITEpfSgpKSxjZT0hMSksZj1yZS5zdGFydFRpbWUpLGNlJiZaLnNldChELHtzdGFydFRpbWU6ZixlbmRUaW1lOmh9KSxhLm9w'@;
put 'dGlvbnMmJmZ1bmN0aW9uIGpHZShjLGwsYSl7Y29uc3QgZD1sLnBhcmFtc3x8e30saD1FaGUoYyk7aC5sZW5ndGgmJmguZm9yRWFjaChmPT57ZC5oYXNPd25Qcm9wZXJ0eShmKXx8YS5wdXNoKGZ1bmN0aW9uIGVHZShjKXtyZXR1cm4gbmV3IFFuKDMwMDEsITEpfSgpKX0pfShNLGEub3B0aW9u'@;
put 'cyxhLmVycm9ycyl9KX0pfXZpc2l0S2V5ZnJhbWVzKGwsYSl7Y29uc3QgZD17dHlwZTpBby5LZXlmcmFtZXMsc3R5bGVzOltdLG9wdGlvbnM6bnVsbH07aWYoIWEuY3VycmVudEFuaW1hdGVUaW1pbmdzKXJldHVybiBhLmVycm9ycy5wdXNoKGZ1bmN0aW9uIGNHZSgpe3JldHVybiBuZXcgUW4o'@;
put 'MzAxMSwhMSl9KCkpLGQ7bGV0IGY9MDtjb25zdCB2PVtdO2xldCBNPSExLEQ9ITEsWj0wO2NvbnN0IHJlPWwuc3RlcHMubWFwKHB0PT57Y29uc3QgZHQ9dGhpcy5fbWFrZVN0eWxlQXN0KHB0LGEpO2xldCBKdD1udWxsIT1kdC5vZmZzZXQ/ZHQub2Zmc2V0OmZ1bmN0aW9uIGUkZShjKXtpZigi'@;
put 'c3RyaW5nIj09dHlwZW9mIGMpcmV0dXJuIG51bGw7bGV0IGw9bnVsbDtpZihBcnJheS5pc0FycmF5KGMpKWMuZm9yRWFjaChhPT57aWYoYSBpbnN0YW5jZW9mIE1hcCYmYS5oYXMoIm9mZnNldCIpKXtjb25zdCBkPWE7bD1wYXJzZUZsb2F0KGQuZ2V0KCJvZmZzZXQiKSksZC5kZWxldGUoIm9m'@;
put 'ZnNldCIpfX0pO2Vsc2UgaWYoYyBpbnN0YW5jZW9mIE1hcCYmYy5oYXMoIm9mZnNldCIpKXtjb25zdCBhPWM7bD1wYXJzZUZsb2F0KGEuZ2V0KCJvZmZzZXQiKSksYS5kZWxldGUoIm9mZnNldCIpfXJldHVybiBsfShkdC5zdHlsZXMpLHZuPTA7cmV0dXJuIG51bGwhPUp0JiYoZisrLHZuPWR0'@;
put 'Lm9mZnNldD1KdCksRD1EfHx2bjwwfHx2bj4xLE09TXx8dm48WixaPXZuLHYucHVzaCh2biksZHR9KTtEJiZhLmVycm9ycy5wdXNoKGZ1bmN0aW9uIHVHZSgpe3JldHVybiBuZXcgUW4oMzAxMiwhMSl9KCkpLE0mJmEuZXJyb3JzLnB1c2goZnVuY3Rpb24gZEdlKCl7cmV0dXJuIG5ldyBRbigz'@;
put 'MjAwLCExKX0oKSk7Y29uc3QgY2U9bC5zdGVwcy5sZW5ndGg7bGV0IGJlPTA7Zj4wJiZmPGNlP2EuZXJyb3JzLnB1c2goZnVuY3Rpb24gaEdlKCl7cmV0dXJuIG5ldyBRbigzMjAyLCExKX0oKSk6MD09ZiYmKGJlPTEvKGNlLTEpKTtjb25zdCBFZT1jZS0xLEJlPWEuY3VycmVudFRpbWUscWU9'@;
put 'YS5jdXJyZW50QW5pbWF0ZVRpbWluZ3MscnQ9cWUuZHVyYXRpb247cmV0dXJuIHJlLmZvckVhY2goKHB0LGR0KT0+e2NvbnN0IEp0PWJlPjA/ZHQ9PUVlPzE6YmUqZHQ6dltkdF0sdm49SnQqcnQ7YS5jdXJyZW50VGltZT1CZStxZS5kZWxheSt2bixxZS5kdXJhdGlvbj12bix0aGlzLl92YWxp'@;
put 'ZGF0ZVN0eWxlQXN0KHB0LGEpLHB0Lm9mZnNldD1KdCxkLnN0eWxlcy5wdXNoKHB0KX0pLGR9dmlzaXRSZWZlcmVuY2UobCxhKXtyZXR1cm57dHlwZTpBby5SZWZlcmVuY2UsYW5pbWF0aW9uOkFoKHRoaXMsbkUobC5hbmltYXRpb24pLGEpLG9wdGlvbnM6SDcobC5vcHRpb25zKX19dmlzaXRB'@;
put 'bmltYXRlQ2hpbGQobCxhKXtyZXR1cm4gYS5kZXBDb3VudCsrLHt0eXBlOkFvLkFuaW1hdGVDaGlsZCxvcHRpb25zOkg3KGwub3B0aW9ucyl9fXZpc2l0QW5pbWF0ZVJlZihsLGEpe3JldHVybnt0eXBlOkFvLkFuaW1hdGVSZWYsYW5pbWF0aW9uOnRoaXMudmlzaXRSZWZlcmVuY2UobC5hbmlt'@;
put 'YXRpb24sYSksb3B0aW9uczpINyhsLm9wdGlvbnMpfX12aXNpdFF1ZXJ5KGwsYSl7Y29uc3QgZD1hLmN1cnJlbnRRdWVyeVNlbGVjdG9yLGg9bC5vcHRpb25zfHx7fTthLnF1ZXJ5Q291bnQrKyxhLmN1cnJlbnRRdWVyeT1sO2NvbnN0W2Ysdl09ZnVuY3Rpb24gWEdlKGMpe2NvbnN0IGw9ISFj'@;
put 'LnNwbGl0KC9ccyosXHMqLykuZmluZChhPT4iOnNlbGYiPT1hKTtyZXR1cm4gbCYmKGM9Yy5yZXBsYWNlKEtHZSwiIikpLGM9Yy5yZXBsYWNlKC9AXCovZyx2TykucmVwbGFjZSgvQFx3Ky9nLGE9PnZPKyItIithLnNsaWNlKDEpKS5yZXBsYWNlKC86YW5pbWF0aW5nL2csUEcpLFtjLGxdfShs'@;
put 'LnNlbGVjdG9yKTthLmN1cnJlbnRRdWVyeVNlbGVjdG9yPWQubGVuZ3RoP2QrIiAiK2Y6ZixUaChhLmNvbGxlY3RlZFN0eWxlcyxhLmN1cnJlbnRRdWVyeVNlbGVjdG9yLG5ldyBNYXApO2NvbnN0IE09QWgodGhpcyxuRShsLmFuaW1hdGlvbiksYSk7cmV0dXJuIGEuY3VycmVudFF1ZXJ5PW51'@;
put 'bGwsYS5jdXJyZW50UXVlcnlTZWxlY3Rvcj1kLHt0eXBlOkFvLlF1ZXJ5LHNlbGVjdG9yOmYsbGltaXQ6aC5saW1pdHx8MCxvcHRpb25hbDohIWgub3B0aW9uYWwsaW5jbHVkZVNlbGY6dixhbmltYXRpb246TSxvcmlnaW5hbFNlbGVjdG9yOmwuc2VsZWN0b3Isb3B0aW9uczpINyhsLm9wdGlv'@;
put 'bnMpfX12aXNpdFN0YWdnZXIobCxhKXthLmN1cnJlbnRRdWVyeXx8YS5lcnJvcnMucHVzaChmdW5jdGlvbiBmR2UoKXtyZXR1cm4gbmV3IFFuKDMwMTMsITEpfSgpKTtjb25zdCBkPSJmdWxsIj09PWwudGltaW5ncz97ZHVyYXRpb246MCxkZWxheTowLGVhc2luZzoiZnVsbCJ9OmJPKGwudGlt'@;
put 'aW5ncyxhLmVycm9ycywhMCk7cmV0dXJue3R5cGU6QW8uU3RhZ2dlcixhbmltYXRpb246QWgodGhpcyxuRShsLmFuaW1hdGlvbiksYSksdGltaW5nczpkLG9wdGlvbnM6bnVsbH19fWNsYXNzIFFHZXtjb25zdHJ1Y3RvcihsKXt0aGlzLmVycm9ycz1sLHRoaXMucXVlcnlDb3VudD0wLHRoaXMu'@;
put 'ZGVwQ291bnQ9MCx0aGlzLmN1cnJlbnRUcmFuc2l0aW9uPW51bGwsdGhpcy5jdXJyZW50UXVlcnk9bnVsbCx0aGlzLmN1cnJlbnRRdWVyeVNlbGVjdG9yPW51bGwsdGhpcy5jdXJyZW50QW5pbWF0ZVRpbWluZ3M9bnVsbCx0aGlzLmN1cnJlbnRUaW1lPTAsdGhpcy5jb2xsZWN0ZWRTdHlsZXM9'@;
put 'bmV3IE1hcCx0aGlzLm9wdGlvbnM9bnVsbCx0aGlzLnVuc3VwcG9ydGVkQ1NTUHJvcGVydGllc0ZvdW5kPW5ldyBTZXR9fWZ1bmN0aW9uIEg3KGMpe3JldHVybiBjPyhjPXsuLi5jfSkucGFyYW1zJiYoYy5wYXJhbXM9ZnVuY3Rpb24gSkdlKGMpe3JldHVybiBjP3suLi5jfTpudWxsfShjLnBh'@;
put 'cmFtcykpOmM9e30sY31mdW5jdGlvbiBqRyhjLGwsYSl7cmV0dXJue2R1cmF0aW9uOmMsZGVsYXk6bCxlYXNpbmc6YX19ZnVuY3Rpb24gekcoYyxsLGEsZCxoLGYsdj1udWxsLE09ITEpe3JldHVybnt0eXBlOjEsZWxlbWVudDpjLGtleWZyYW1lczpsLHByZVN0eWxlUHJvcHM6YSxwb3N0U3R5'@;
put 'bGVQcm9wczpkLGR1cmF0aW9uOmgsZGVsYXk6Zix0b3RhbFRpbWU6aCtmLGVhc2luZzp2LHN1YlRpbWVsaW5lOk19fWNsYXNzIENPe2NvbnN0cnVjdG9yKCl7dGhpcy5fbWFwPW5ldyBNYXB9Z2V0KGwpe3JldHVybiB0aGlzLl9tYXAuZ2V0KGwpfHxbXX1hcHBlbmQobCxhKXtsZXQgZD10aGlz'@;
put 'Ll9tYXAuZ2V0KGwpO2R8fHRoaXMuX21hcC5zZXQobCxkPVtdKSxkLnB1c2goLi4uYSl9aGFzKGwpe3JldHVybiB0aGlzLl9tYXAuaGFzKGwpfWNsZWFyKCl7dGhpcy5fbWFwLmNsZWFyKCl9fWNvbnN0IGkkZT1uZXcgUmVnRXhwKCI6ZW50ZXIiLCJnIiksbyRlPW5ldyBSZWdFeHAoIjpsZWF2'@;
put 'ZSIsImciKTtmdW5jdGlvbiBVRyhjLGwsYSxkLGgsZj1uZXcgTWFwLHY9bmV3IE1hcCxNLEQsWj1bXSl7cmV0dXJuKG5ldyBzJGUpLmJ1aWxkS2V5ZnJhbWVzKGMsbCxhLGQsaCxmLHYsTSxELFopfWNsYXNzIHMkZXtidWlsZEtleWZyYW1lcyhsLGEsZCxoLGYsdixNLEQsWixyZT1bXSl7Wj1a'@;
put 'fHxuZXcgQ087Y29uc3QgY2U9bmV3IFpHKGwsYSxaLGgsZixyZSxbXSk7Y2Uub3B0aW9ucz1EO2NvbnN0IGJlPUQuZGVsYXk/cGcoRC5kZWxheSk6MDtjZS5jdXJyZW50VGltZWxpbmUuZGVsYXlOZXh0U3RlcChiZSksY2UuY3VycmVudFRpbWVsaW5lLnNldFN0eWxlcyhbdl0sbnVsbCxjZS5l'@;
put 'cnJvcnMsRCksQWgodGhpcyxkLGNlKTtjb25zdCBFZT1jZS50aW1lbGluZXMuZmlsdGVyKEJlPT5CZS5jb250YWluc0FuaW1hdGlvbigpKTtpZihFZS5sZW5ndGgmJk0uc2l6ZSl7bGV0IEJlO2ZvcihsZXQgcWU9RWUubGVuZ3RoLTE7cWU+PTA7cWUtLSl7Y29uc3QgcnQ9RWVbcWVdO2lmKHJ0'@;
put 'LmVsZW1lbnQ9PT1hKXtCZT1ydDticmVha319QmUmJiFCZS5hbGxvd09ubHlUaW1lbGluZVN0eWxlcygpJiZCZS5zZXRTdHlsZXMoW01dLG51bGwsY2UuZXJyb3JzLEQpfXJldHVybiBFZS5sZW5ndGg/RWUubWFwKEJlPT5CZS5idWlsZEtleWZyYW1lcygpKTpbekcoYSxbXSxbXSxbXSwwLGJl'@;
put 'LCIiLCExKV19dmlzaXRUcmlnZ2VyKGwsYSl7fXZpc2l0U3RhdGUobCxhKXt9dmlzaXRUcmFuc2l0aW9uKGwsYSl7fXZpc2l0QW5pbWF0ZUNoaWxkKGwsYSl7Y29uc3QgZD1hLnN1Ykluc3RydWN0aW9ucy5nZXQoYS5lbGVtZW50KTtpZihkKXtjb25zdCBoPWEuY3JlYXRlU3ViQ29udGV4dChs'@;
put 'Lm9wdGlvbnMpLGY9YS5jdXJyZW50VGltZWxpbmUuY3VycmVudFRpbWUsdj10aGlzLl92aXNpdFN1Ykluc3RydWN0aW9ucyhkLGgsaC5vcHRpb25zKTtmIT12JiZhLnRyYW5zZm9ybUludG9OZXdUaW1lbGluZSh2KX1hLnByZXZpb3VzTm9kZT1sfXZpc2l0QW5pbWF0ZVJlZihsLGEpe2NvbnN0'@;
put 'IGQ9YS5jcmVhdGVTdWJDb250ZXh0KGwub3B0aW9ucyk7ZC50cmFuc2Zvcm1JbnRvTmV3VGltZWxpbmUoKSx0aGlzLl9hcHBseUFuaW1hdGlvblJlZkRlbGF5cyhbbC5vcHRpb25zLGwuYW5pbWF0aW9uLm9wdGlvbnNdLGEsZCksdGhpcy52aXNpdFJlZmVyZW5jZShsLmFuaW1hdGlvbixkKSxh'@;
put 'LnRyYW5zZm9ybUludG9OZXdUaW1lbGluZShkLmN1cnJlbnRUaW1lbGluZS5jdXJyZW50VGltZSksYS5wcmV2aW91c05vZGU9bH1fYXBwbHlBbmltYXRpb25SZWZEZWxheXMobCxhLGQpe2Zvcihjb25zdCBoIG9mIGwpe2NvbnN0IGY9aD8uZGVsYXk7aWYoZil7Y29uc3Qgdj0ibnVtYmVyIj09'@;
put 'dHlwZW9mIGY/ZjpwZyhyRShmLGg/LnBhcmFtcz8/e30sYS5lcnJvcnMpKTtkLmRlbGF5TmV4dFN0ZXAodil9fX1fdmlzaXRTdWJJbnN0cnVjdGlvbnMobCxhLGQpe2xldCBmPWEuY3VycmVudFRpbWVsaW5lLmN1cnJlbnRUaW1lO2NvbnN0IHY9bnVsbCE9ZC5kdXJhdGlvbj9wZyhkLmR1cmF0'@;
put 'aW9uKTpudWxsLE09bnVsbCE9ZC5kZWxheT9wZyhkLmRlbGF5KTpudWxsO3JldHVybiAwIT09diYmbC5mb3JFYWNoKEQ9Pntjb25zdCBaPWEuYXBwZW5kSW5zdHJ1Y3Rpb25Ub1RpbWVsaW5lKEQsdixNKTtmPU1hdGgubWF4KGYsWi5kdXJhdGlvbitaLmRlbGF5KX0pLGZ9dmlzaXRSZWZlcmVu'@;
put 'Y2UobCxhKXthLnVwZGF0ZU9wdGlvbnMobC5vcHRpb25zLCEwKSxBaCh0aGlzLGwuYW5pbWF0aW9uLGEpLGEucHJldmlvdXNOb2RlPWx9dmlzaXRTZXF1ZW5jZShsLGEpe2NvbnN0IGQ9YS5zdWJDb250ZXh0Q291bnQ7bGV0IGg9YTtjb25zdCBmPWwub3B0aW9ucztpZihmJiYoZi5wYXJhbXN8'@;
put 'fGYuZGVsYXkpJiYoaD1hLmNyZWF0ZVN1YkNvbnRleHQoZiksaC50cmFuc2Zvcm1JbnRvTmV3VGltZWxpbmUoKSxudWxsIT1mLmRlbGF5KSl7aC5wcmV2aW91c05vZGUudHlwZT09QW8uU3R5bGUmJihoLmN1cnJlbnRUaW1lbGluZS5zbmFwc2hvdEN1cnJlbnRTdHlsZXMoKSxoLnByZXZpb3Vz'@;
put 'Tm9kZT1TTyk7Y29uc3Qgdj1wZyhmLmRlbGF5KTtoLmRlbGF5TmV4dFN0ZXAodil9bC5zdGVwcy5sZW5ndGgmJihsLnN0ZXBzLmZvckVhY2godj0+QWgodGhpcyx2LGgpKSxoLmN1cnJlbnRUaW1lbGluZS5hcHBseVN0eWxlc1RvS2V5ZnJhbWUoKSxoLnN1YkNvbnRleHRDb3VudD5kJiZoLnRy'@;
put 'YW5zZm9ybUludG9OZXdUaW1lbGluZSgpKSxhLnByZXZpb3VzTm9kZT1sfXZpc2l0R3JvdXAobCxhKXtjb25zdCBkPVtdO2xldCBoPWEuY3VycmVudFRpbWVsaW5lLmN1cnJlbnRUaW1lO2NvbnN0IGY9bC5vcHRpb25zJiZsLm9wdGlvbnMuZGVsYXk/cGcobC5vcHRpb25zLmRlbGF5KTowO2wu'@;
put 'c3RlcHMuZm9yRWFjaCh2PT57Y29uc3QgTT1hLmNyZWF0ZVN1YkNvbnRleHQobC5vcHRpb25zKTtmJiZNLmRlbGF5TmV4dFN0ZXAoZiksQWgodGhpcyx2LE0pLGg9TWF0aC5tYXgoaCxNLmN1cnJlbnRUaW1lbGluZS5jdXJyZW50VGltZSksZC5wdXNoKE0uY3VycmVudFRpbWVsaW5lKX0pLGQu'@;
put 'Zm9yRWFjaCh2PT5hLmN1cnJlbnRUaW1lbGluZS5tZXJnZVRpbWVsaW5lQ29sbGVjdGVkU3R5bGVzKHYpKSxhLnRyYW5zZm9ybUludG9OZXdUaW1lbGluZShoKSxhLnByZXZpb3VzTm9kZT1sfV92aXNpdFRpbWluZyhsLGEpe2lmKGwuZHluYW1pYyl7Y29uc3QgZD1sLnN0clZhbHVlO3JldHVy'@;
put 'biBiTyhhLnBhcmFtcz9yRShkLGEucGFyYW1zLGEuZXJyb3JzKTpkLGEuZXJyb3JzKX1yZXR1cm57ZHVyYXRpb246bC5kdXJhdGlvbixkZWxheTpsLmRlbGF5LGVhc2luZzpsLmVhc2luZ319dmlzaXRBbmltYXRlKGwsYSl7Y29uc3QgZD1hLmN1cnJlbnRBbmltYXRlVGltaW5ncz10aGlzLl92'@;
put 'aXNpdFRpbWluZyhsLnRpbWluZ3MsYSksaD1hLmN1cnJlbnRUaW1lbGluZTtkLmRlbGF5JiYoYS5pbmNyZW1lbnRUaW1lKGQuZGVsYXkpLGguc25hcHNob3RDdXJyZW50U3R5bGVzKCkpO2NvbnN0IGY9bC5zdHlsZTtmLnR5cGU9PUFvLktleWZyYW1lcz90aGlzLnZpc2l0S2V5ZnJhbWVzKGYs'@;
put 'YSk6KGEuaW5jcmVtZW50VGltZShkLmR1cmF0aW9uKSx0aGlzLnZpc2l0U3R5bGUoZixhKSxoLmFwcGx5U3R5bGVzVG9LZXlmcmFtZSgpKSxhLmN1cnJlbnRBbmltYXRlVGltaW5ncz1udWxsLGEucHJldmlvdXNOb2RlPWx9dmlzaXRTdHlsZShsLGEpe2NvbnN0IGQ9YS5jdXJyZW50VGltZWxp'@;
put 'bmUsaD1hLmN1cnJlbnRBbmltYXRlVGltaW5nczshaCYmZC5oYXNDdXJyZW50U3R5bGVQcm9wZXJ0aWVzKCkmJmQuZm9yd2FyZEZyYW1lKCk7Y29uc3QgZj1oJiZoLmVhc2luZ3x8bC5lYXNpbmc7bC5pc0VtcHR5U3RlcD9kLmFwcGx5RW1wdHlTdGVwKGYpOmQuc2V0U3R5bGVzKGwuc3R5bGVz'@;
put 'LGYsYS5lcnJvcnMsYS5vcHRpb25zKSxhLnByZXZpb3VzTm9kZT1sfXZpc2l0S2V5ZnJhbWVzKGwsYSl7Y29uc3QgZD1hLmN1cnJlbnRBbmltYXRlVGltaW5ncyxoPWEuY3VycmVudFRpbWVsaW5lLmR1cmF0aW9uLGY9ZC5kdXJhdGlvbixNPWEuY3JlYXRlU3ViQ29udGV4dCgpLmN1cnJlbnRU'@;
put 'aW1lbGluZTtNLmVhc2luZz1kLmVhc2luZyxsLnN0eWxlcy5mb3JFYWNoKEQ9PntNLmZvcndhcmRUaW1lKChELm9mZnNldHx8MCkqZiksTS5zZXRTdHlsZXMoRC5zdHlsZXMsRC5lYXNpbmcsYS5lcnJvcnMsYS5vcHRpb25zKSxNLmFwcGx5U3R5bGVzVG9LZXlmcmFtZSgpfSksYS5jdXJyZW50'@;
put 'VGltZWxpbmUubWVyZ2VUaW1lbGluZUNvbGxlY3RlZFN0eWxlcyhNKSxhLnRyYW5zZm9ybUludG9OZXdUaW1lbGluZShoK2YpLGEucHJldmlvdXNOb2RlPWx9dmlzaXRRdWVyeShsLGEpe2NvbnN0IGQ9YS5jdXJyZW50VGltZWxpbmUuY3VycmVudFRpbWUsaD1sLm9wdGlvbnN8fHt9LGY9aC5k'@;
put 'ZWxheT9wZyhoLmRlbGF5KTowO2YmJihhLnByZXZpb3VzTm9kZS50eXBlPT09QW8uU3R5bGV8fDA9PWQmJmEuY3VycmVudFRpbWVsaW5lLmhhc0N1cnJlbnRTdHlsZVByb3BlcnRpZXMoKSkmJihhLmN1cnJlbnRUaW1lbGluZS5zbmFwc2hvdEN1cnJlbnRTdHlsZXMoKSxhLnByZXZpb3VzTm9k'@;
put 'ZT1TTyk7bGV0IHY9ZDtjb25zdCBNPWEuaW52b2tlUXVlcnkobC5zZWxlY3RvcixsLm9yaWdpbmFsU2VsZWN0b3IsbC5saW1pdCxsLmluY2x1ZGVTZWxmLCEhaC5vcHRpb25hbCxhLmVycm9ycyk7YS5jdXJyZW50UXVlcnlUb3RhbD1NLmxlbmd0aDtsZXQgRD1udWxsO00uZm9yRWFjaCgoWixy'@;
put 'ZSk9PnthLmN1cnJlbnRRdWVyeUluZGV4PXJlO2NvbnN0IGNlPWEuY3JlYXRlU3ViQ29udGV4dChsLm9wdGlvbnMsWik7ZiYmY2UuZGVsYXlOZXh0U3RlcChmKSxaPT09YS5lbGVtZW50JiYoRD1jZS5jdXJyZW50VGltZWxpbmUpLEFoKHRoaXMsbC5hbmltYXRpb24sY2UpLGNlLmN1cnJlbnRU'@;
put 'aW1lbGluZS5hcHBseVN0eWxlc1RvS2V5ZnJhbWUoKSx2PU1hdGgubWF4KHYsY2UuY3VycmVudFRpbWVsaW5lLmN1cnJlbnRUaW1lKX0pLGEuY3VycmVudFF1ZXJ5SW5kZXg9MCxhLmN1cnJlbnRRdWVyeVRvdGFsPTAsYS50cmFuc2Zvcm1JbnRvTmV3VGltZWxpbmUodiksRCYmKGEuY3VycmVu'@;
put 'dFRpbWVsaW5lLm1lcmdlVGltZWxpbmVDb2xsZWN0ZWRTdHlsZXMoRCksYS5jdXJyZW50VGltZWxpbmUuc25hcHNob3RDdXJyZW50U3R5bGVzKCkpLGEucHJldmlvdXNOb2RlPWx9dmlzaXRTdGFnZ2VyKGwsYSl7Y29uc3QgZD1hLnBhcmVudENvbnRleHQsaD1hLmN1cnJlbnRUaW1lbGluZSxm'@;
put 'PWwudGltaW5ncyx2PU1hdGguYWJzKGYuZHVyYXRpb24pLE09diooYS5jdXJyZW50UXVlcnlUb3RhbC0xKTtsZXQgRD12KmEuY3VycmVudFF1ZXJ5SW5kZXg7c3dpdGNoKGYuZHVyYXRpb248MD8icmV2ZXJzZSI6Zi5lYXNpbmcpe2Nhc2UicmV2ZXJzZSI6RD1NLUQ7YnJlYWs7Y2FzZSJmdWxs'@;
put 'IjpEPWQuY3VycmVudFN0YWdnZXJUaW1lfWNvbnN0IHJlPWEuY3VycmVudFRpbWVsaW5lO0QmJnJlLmRlbGF5TmV4dFN0ZXAoRCk7Y29uc3QgY2U9cmUuY3VycmVudFRpbWU7QWgodGhpcyxsLmFuaW1hdGlvbixhKSxhLnByZXZpb3VzTm9kZT1sLGQuY3VycmVudFN0YWdnZXJUaW1lPWguY3Vy'@;
put 'cmVudFRpbWUtY2UrKGguc3RhcnRUaW1lLWQuY3VycmVudFRpbWVsaW5lLnN0YXJ0VGltZSl9fWNvbnN0IFNPPXt9O2NsYXNzIFpHe2NvbnN0cnVjdG9yKGwsYSxkLGgsZix2LE0sRCl7dGhpcy5fZHJpdmVyPWwsdGhpcy5lbGVtZW50PWEsdGhpcy5zdWJJbnN0cnVjdGlvbnM9ZCx0aGlzLl9l'@;
put 'bnRlckNsYXNzTmFtZT1oLHRoaXMuX2xlYXZlQ2xhc3NOYW1lPWYsdGhpcy5lcnJvcnM9dix0aGlzLnRpbWVsaW5lcz1NLHRoaXMucGFyZW50Q29udGV4dD1udWxsLHRoaXMuY3VycmVudEFuaW1hdGVUaW1pbmdzPW51bGwsdGhpcy5wcmV2aW91c05vZGU9U08sdGhpcy5zdWJDb250ZXh0Q291'@;
put 'bnQ9MCx0aGlzLm9wdGlvbnM9e30sdGhpcy5jdXJyZW50UXVlcnlJbmRleD0wLHRoaXMuY3VycmVudFF1ZXJ5VG90YWw9MCx0aGlzLmN1cnJlbnRTdGFnZ2VyVGltZT0wLHRoaXMuY3VycmVudFRpbWVsaW5lPUR8fG5ldyBNTyh0aGlzLl9kcml2ZXIsYSwwKSxNLnB1c2godGhpcy5jdXJyZW50'@;
put 'VGltZWxpbmUpfWdldCBwYXJhbXMoKXtyZXR1cm4gdGhpcy5vcHRpb25zLnBhcmFtc311cGRhdGVPcHRpb25zKGwsYSl7aWYoIWwpcmV0dXJuO2NvbnN0IGQ9bDtsZXQgaD10aGlzLm9wdGlvbnM7bnVsbCE9ZC5kdXJhdGlvbiYmKGguZHVyYXRpb249cGcoZC5kdXJhdGlvbikpLG51bGwhPWQu'@;
put 'ZGVsYXkmJihoLmRlbGF5PXBnKGQuZGVsYXkpKTtjb25zdCBmPWQucGFyYW1zO2lmKGYpe2xldCB2PWgucGFyYW1zO3Z8fCh2PXRoaXMub3B0aW9ucy5wYXJhbXM9e30pLE9iamVjdC5rZXlzKGYpLmZvckVhY2goTT0+eyghYXx8IXYuaGFzT3duUHJvcGVydHkoTSkpJiYodltNXT1yRShmW01d'@;
put 'LHYsdGhpcy5lcnJvcnMpKX0pfX1fY29weU9wdGlvbnMoKXtjb25zdCBsPXt9O2lmKHRoaXMub3B0aW9ucyl7Y29uc3QgYT10aGlzLm9wdGlvbnMucGFyYW1zO2lmKGEpe2NvbnN0IGQ9bC5wYXJhbXM9e307T2JqZWN0LmtleXMoYSkuZm9yRWFjaChoPT57ZFtoXT1hW2hdfSl9fXJldHVybiBs'@;
put 'fWNyZWF0ZVN1YkNvbnRleHQobD1udWxsLGEsZCl7Y29uc3QgaD1hfHx0aGlzLmVsZW1lbnQsZj1uZXcgWkcodGhpcy5fZHJpdmVyLGgsdGhpcy5zdWJJbnN0cnVjdGlvbnMsdGhpcy5fZW50ZXJDbGFzc05hbWUsdGhpcy5fbGVhdmVDbGFzc05hbWUsdGhpcy5lcnJvcnMsdGhpcy50aW1lbGlu'@;
put 'ZXMsdGhpcy5jdXJyZW50VGltZWxpbmUuZm9yayhoLGR8fDApKTtyZXR1cm4gZi5wcmV2aW91c05vZGU9dGhpcy5wcmV2aW91c05vZGUsZi5jdXJyZW50QW5pbWF0ZVRpbWluZ3M9dGhpcy5jdXJyZW50QW5pbWF0ZVRpbWluZ3MsZi5vcHRpb25zPXRoaXMuX2NvcHlPcHRpb25zKCksZi51cGRh'@;
put 'dGVPcHRpb25zKGwpLGYuY3VycmVudFF1ZXJ5SW5kZXg9dGhpcy5jdXJyZW50UXVlcnlJbmRleCxmLmN1cnJlbnRRdWVyeVRvdGFsPXRoaXMuY3VycmVudFF1ZXJ5VG90YWwsZi5wYXJlbnRDb250ZXh0PXRoaXMsdGhpcy5zdWJDb250ZXh0Q291bnQrKyxmfXRyYW5zZm9ybUludG9OZXdUaW1l'@;
put 'bGluZShsKXtyZXR1cm4gdGhpcy5wcmV2aW91c05vZGU9U08sdGhpcy5jdXJyZW50VGltZWxpbmU9dGhpcy5jdXJyZW50VGltZWxpbmUuZm9yayh0aGlzLmVsZW1lbnQsbCksdGhpcy50aW1lbGluZXMucHVzaCh0aGlzLmN1cnJlbnRUaW1lbGluZSksdGhpcy5jdXJyZW50VGltZWxpbmV9YXBw'@;
put 'ZW5kSW5zdHJ1Y3Rpb25Ub1RpbWVsaW5lKGwsYSxkKXtjb25zdCBoPXtkdXJhdGlvbjphPz9sLmR1cmF0aW9uLGRlbGF5OnRoaXMuY3VycmVudFRpbWVsaW5lLmN1cnJlbnRUaW1lKyhkPz8wKStsLmRlbGF5LGVhc2luZzoiIn0sZj1uZXcgbCRlKHRoaXMuX2RyaXZlcixsLmVsZW1lbnQsbC5r'@;
put 'ZXlmcmFtZXMsbC5wcmVTdHlsZVByb3BzLGwucG9zdFN0eWxlUHJvcHMsaCxsLnN0cmV0Y2hTdGFydGluZ0tleWZyYW1lKTtyZXR1cm4gdGhpcy50aW1lbGluZXMucHVzaChmKSxofWluY3JlbWVudFRpbWUobCl7dGhpcy5jdXJyZW50VGltZWxpbmUuZm9yd2FyZFRpbWUodGhpcy5jdXJyZW50'@;
put 'VGltZWxpbmUuZHVyYXRpb24rbCl9ZGVsYXlOZXh0U3RlcChsKXtsPjAmJnRoaXMuY3VycmVudFRpbWVsaW5lLmRlbGF5TmV4dFN0ZXAobCl9aW52b2tlUXVlcnkobCxhLGQsaCxmLHYpe2xldCBNPVtdO2lmKGgmJk0ucHVzaCh0aGlzLmVsZW1lbnQpLGwubGVuZ3RoPjApe2w9KGw9bC5yZXBs'@;
put 'YWNlKGkkZSwiLiIrdGhpcy5fZW50ZXJDbGFzc05hbWUpKS5yZXBsYWNlKG8kZSwiLiIrdGhpcy5fbGVhdmVDbGFzc05hbWUpO2xldCBaPXRoaXMuX2RyaXZlci5xdWVyeSh0aGlzLmVsZW1lbnQsbCwxIT1kKTswIT09ZCYmKFo9ZDwwP1ouc2xpY2UoWi5sZW5ndGgrZCxaLmxlbmd0aCk6Wi5z'@;
put 'bGljZSgwLGQpKSxNLnB1c2goLi4uWil9cmV0dXJuIWYmJjA9PU0ubGVuZ3RoJiZ2LnB1c2goZnVuY3Rpb24gcEdlKGMpe3JldHVybiBuZXcgUW4oMzAxNCwhMSl9KCkpLE19fWNsYXNzIE1Pe2NvbnN0cnVjdG9yKGwsYSxkLGgpe3RoaXMuX2RyaXZlcj1sLHRoaXMuZWxlbWVudD1hLHRoaXMu'@;
put 'c3RhcnRUaW1lPWQsdGhpcy5fZWxlbWVudFRpbWVsaW5lU3R5bGVzTG9va3VwPWgsdGhpcy5kdXJhdGlvbj0wLHRoaXMuZWFzaW5nPW51bGwsdGhpcy5fcHJldmlvdXNLZXlmcmFtZT1uZXcgTWFwLHRoaXMuX2N1cnJlbnRLZXlmcmFtZT1uZXcgTWFwLHRoaXMuX2tleWZyYW1lcz1uZXcgTWFw'@;
put 'LHRoaXMuX3N0eWxlU3VtbWFyeT1uZXcgTWFwLHRoaXMuX2xvY2FsVGltZWxpbmVTdHlsZXM9bmV3IE1hcCx0aGlzLl9wZW5kaW5nU3R5bGVzPW5ldyBNYXAsdGhpcy5fYmFja0ZpbGw9bmV3IE1hcCx0aGlzLl9jdXJyZW50RW1wdHlTdGVwS2V5ZnJhbWU9bnVsbCx0aGlzLl9lbGVtZW50VGlt'@;
put 'ZWxpbmVTdHlsZXNMb29rdXB8fCh0aGlzLl9lbGVtZW50VGltZWxpbmVTdHlsZXNMb29rdXA9bmV3IE1hcCksdGhpcy5fZ2xvYmFsVGltZWxpbmVTdHlsZXM9dGhpcy5fZWxlbWVudFRpbWVsaW5lU3R5bGVzTG9va3VwLmdldChhKSx0aGlzLl9nbG9iYWxUaW1lbGluZVN0eWxlc3x8KHRoaXMu'@;
put 'X2dsb2JhbFRpbWVsaW5lU3R5bGVzPXRoaXMuX2xvY2FsVGltZWxpbmVTdHlsZXMsdGhpcy5fZWxlbWVudFRpbWVsaW5lU3R5bGVzTG9va3VwLnNldChhLHRoaXMuX2xvY2FsVGltZWxpbmVTdHlsZXMpKSx0aGlzLl9sb2FkS2V5ZnJhbWUoKX1jb250YWluc0FuaW1hdGlvbigpe3N3aXRjaCh0'@;
put 'aGlzLl9rZXlmcmFtZXMuc2l6ZSl7Y2FzZSAwOnJldHVybiExO2Nhc2UgMTpyZXR1cm4gdGhpcy5oYXNDdXJyZW50U3R5bGVQcm9wZXJ0aWVzKCk7ZGVmYXVsdDpyZXR1cm4hMH19aGFzQ3VycmVudFN0eWxlUHJvcGVydGllcygpe3JldHVybiB0aGlzLl9jdXJyZW50S2V5ZnJhbWUuc2l6ZT4w'@;
put 'fWdldCBjdXJyZW50VGltZSgpe3JldHVybiB0aGlzLnN0YXJ0VGltZSt0aGlzLmR1cmF0aW9ufWRlbGF5TmV4dFN0ZXAobCl7Y29uc3QgYT0xPT09dGhpcy5fa2V5ZnJhbWVzLnNpemUmJnRoaXMuX3BlbmRpbmdTdHlsZXMuc2l6ZTt0aGlzLmR1cmF0aW9ufHxhPyh0aGlzLmZvcndhcmRUaW1l'@;
put 'KHRoaXMuY3VycmVudFRpbWUrbCksYSYmdGhpcy5zbmFwc2hvdEN1cnJlbnRTdHlsZXMoKSk6dGhpcy5zdGFydFRpbWUrPWx9Zm9yayhsLGEpe3JldHVybiB0aGlzLmFwcGx5U3R5bGVzVG9LZXlmcmFtZSgpLG5ldyBNTyh0aGlzLl9kcml2ZXIsbCxhfHx0aGlzLmN1cnJlbnRUaW1lLHRoaXMu'@;
put 'X2VsZW1lbnRUaW1lbGluZVN0eWxlc0xvb2t1cCl9X2xvYWRLZXlmcmFtZSgpe3RoaXMuX2N1cnJlbnRLZXlmcmFtZSYmKHRoaXMuX3ByZXZpb3VzS2V5ZnJhbWU9dGhpcy5fY3VycmVudEtleWZyYW1lKSx0aGlzLl9jdXJyZW50S2V5ZnJhbWU9dGhpcy5fa2V5ZnJhbWVzLmdldCh0aGlzLmR1'@;
put 'cmF0aW9uKSx0aGlzLl9jdXJyZW50S2V5ZnJhbWV8fCh0aGlzLl9jdXJyZW50S2V5ZnJhbWU9bmV3IE1hcCx0aGlzLl9rZXlmcmFtZXMuc2V0KHRoaXMuZHVyYXRpb24sdGhpcy5fY3VycmVudEtleWZyYW1lKSl9Zm9yd2FyZEZyYW1lKCl7dGhpcy5kdXJhdGlvbis9MSx0aGlzLl9sb2FkS2V5'@;
put 'ZnJhbWUoKX1mb3J3YXJkVGltZShsKXt0aGlzLmFwcGx5U3R5bGVzVG9LZXlmcmFtZSgpLHRoaXMuZHVyYXRpb249bCx0aGlzLl9sb2FkS2V5ZnJhbWUoKX1fdXBkYXRlU3R5bGUobCxhKXt0aGlzLl9sb2NhbFRpbWVsaW5lU3R5bGVzLnNldChsLGEpLHRoaXMuX2dsb2JhbFRpbWVsaW5lU3R5'@;
put 'bGVzLnNldChsLGEpLHRoaXMuX3N0eWxlU3VtbWFyeS5zZXQobCx7dGltZTp0aGlzLmN1cnJlbnRUaW1lLHZhbHVlOmF9KX1hbGxvd09ubHlUaW1lbGluZVN0eWxlcygpe3JldHVybiB0aGlzLl9jdXJyZW50RW1wdHlTdGVwS2V5ZnJhbWUhPT10aGlzLl9jdXJyZW50S2V5ZnJhbWV9YXBwbHlF'@;
put 'bXB0eVN0ZXAobCl7bCYmdGhpcy5fcHJldmlvdXNLZXlmcmFtZS5zZXQoImVhc2luZyIsbCk7Zm9yKGxldFthLGRdb2YgdGhpcy5fZ2xvYmFsVGltZWxpbmVTdHlsZXMpdGhpcy5fYmFja0ZpbGwuc2V0KGEsZHx8aWcpLHRoaXMuX2N1cnJlbnRLZXlmcmFtZS5zZXQoYSxpZyk7dGhpcy5fY3Vy'@;
put 'cmVudEVtcHR5U3RlcEtleWZyYW1lPXRoaXMuX2N1cnJlbnRLZXlmcmFtZX1zZXRTdHlsZXMobCxhLGQsaCl7YSYmdGhpcy5fcHJldmlvdXNLZXlmcmFtZS5zZXQoImVhc2luZyIsYSk7Y29uc3QgZj1oJiZoLnBhcmFtc3x8e30sdj1mdW5jdGlvbiBjJGUoYyxsKXtjb25zdCBhPW5ldyBNYXA7'@;
put 'bGV0IGQ7cmV0dXJuIGMuZm9yRWFjaChoPT57aWYoIioiPT09aCl7ZD8/PWwua2V5cygpO2ZvcihsZXQgZiBvZiBkKWEuc2V0KGYsaWcpfWVsc2UgZm9yKGxldFtmLHZdb2YgaClhLnNldChmLHYpfSksYX0obCx0aGlzLl9nbG9iYWxUaW1lbGluZVN0eWxlcyk7Zm9yKGxldFtNLERdb2Ygdil7'@;
put 'Y29uc3QgWj1yRShELGYsZCk7dGhpcy5fcGVuZGluZ1N0eWxlcy5zZXQoTSxaKSx0aGlzLl9sb2NhbFRpbWVsaW5lU3R5bGVzLmhhcyhNKXx8dGhpcy5fYmFja0ZpbGwuc2V0KE0sdGhpcy5fZ2xvYmFsVGltZWxpbmVTdHlsZXMuZ2V0KE0pPz9pZyksdGhpcy5fdXBkYXRlU3R5bGUoTSxaKX19'@;
put 'YXBwbHlTdHlsZXNUb0tleWZyYW1lKCl7MCE9dGhpcy5fcGVuZGluZ1N0eWxlcy5zaXplJiYodGhpcy5fcGVuZGluZ1N0eWxlcy5mb3JFYWNoKChsLGEpPT57dGhpcy5fY3VycmVudEtleWZyYW1lLnNldChhLGwpfSksdGhpcy5fcGVuZGluZ1N0eWxlcy5jbGVhcigpLHRoaXMuX2xvY2FsVGlt'@;
put 'ZWxpbmVTdHlsZXMuZm9yRWFjaCgobCxhKT0+e3RoaXMuX2N1cnJlbnRLZXlmcmFtZS5oYXMoYSl8fHRoaXMuX2N1cnJlbnRLZXlmcmFtZS5zZXQoYSxsKX0pKX1zbmFwc2hvdEN1cnJlbnRTdHlsZXMoKXtmb3IobGV0W2wsYV1vZiB0aGlzLl9sb2NhbFRpbWVsaW5lU3R5bGVzKXRoaXMuX3Bl'@;
put 'bmRpbmdTdHlsZXMuc2V0KGwsYSksdGhpcy5fdXBkYXRlU3R5bGUobCxhKX1nZXRGaW5hbEtleWZyYW1lKCl7cmV0dXJuIHRoaXMuX2tleWZyYW1lcy5nZXQodGhpcy5kdXJhdGlvbil9Z2V0IHByb3BlcnRpZXMoKXtjb25zdCBsPVtdO2ZvcihsZXQgYSBpbiB0aGlzLl9jdXJyZW50S2V5ZnJh'@;
put 'bWUpbC5wdXNoKGEpO3JldHVybiBsfW1lcmdlVGltZWxpbmVDb2xsZWN0ZWRTdHlsZXMobCl7bC5fc3R5bGVTdW1tYXJ5LmZvckVhY2goKGEsZCk9Pntjb25zdCBoPXRoaXMuX3N0eWxlU3VtbWFyeS5nZXQoZCk7KCFofHxhLnRpbWU+aC50aW1lKSYmdGhpcy5fdXBkYXRlU3R5bGUoZCxhLnZh'@;
put 'bHVlKX0pfWJ1aWxkS2V5ZnJhbWVzKCl7dGhpcy5hcHBseVN0eWxlc1RvS2V5ZnJhbWUoKTtjb25zdCBsPW5ldyBTZXQsYT1uZXcgU2V0LGQ9MT09PXRoaXMuX2tleWZyYW1lcy5zaXplJiYwPT09dGhpcy5kdXJhdGlvbjtsZXQgaD1bXTt0aGlzLl9rZXlmcmFtZXMuZm9yRWFjaCgoTSxEKT0+'@;
put 'e2NvbnN0IFo9bmV3IE1hcChbLi4udGhpcy5fYmFja0ZpbGwsLi4uTV0pO1ouZm9yRWFjaCgocmUsY2UpPT57IiEiPT09cmU/bC5hZGQoY2UpOnJlPT09aWcmJmEuYWRkKGNlKX0pLGR8fFouc2V0KCJvZmZzZXQiLEQvdGhpcy5kdXJhdGlvbiksaC5wdXNoKFopfSk7Y29uc3QgZj1bLi4ubC52'@;
put 'YWx1ZXMoKV0sdj1bLi4uYS52YWx1ZXMoKV07aWYoZCl7Y29uc3QgTT1oWzBdLEQ9bmV3IE1hcChNKTtNLnNldCgib2Zmc2V0IiwwKSxELnNldCgib2Zmc2V0IiwxKSxoPVtNLERdfXJldHVybiB6Ryh0aGlzLmVsZW1lbnQsaCxmLHYsdGhpcy5kdXJhdGlvbix0aGlzLnN0YXJ0VGltZSx0aGlz'@;
put 'LmVhc2luZywhMSl9fWNsYXNzIGwkZSBleHRlbmRzIE1Pe2NvbnN0cnVjdG9yKGwsYSxkLGgsZix2LE09ITEpe3N1cGVyKGwsYSx2LmRlbGF5KSx0aGlzLmtleWZyYW1lcz1kLHRoaXMucHJlU3R5bGVQcm9wcz1oLHRoaXMucG9zdFN0eWxlUHJvcHM9Zix0aGlzLl9zdHJldGNoU3RhcnRpbmdL'@;
put 'ZXlmcmFtZT1NLHRoaXMudGltaW5ncz17ZHVyYXRpb246di5kdXJhdGlvbixkZWxheTp2LmRlbGF5LGVhc2luZzp2LmVhc2luZ319Y29udGFpbnNBbmltYXRpb24oKXtyZXR1cm4gdGhpcy5rZXlmcmFtZXMubGVuZ3RoPjF9YnVpbGRLZXlmcmFtZXMoKXtsZXQgbD10aGlzLmtleWZyYW1lcyx7'@;
put 'ZGVsYXk6YSxkdXJhdGlvbjpkLGVhc2luZzpofT10aGlzLnRpbWluZ3M7aWYodGhpcy5fc3RyZXRjaFN0YXJ0aW5nS2V5ZnJhbWUmJmEpe2NvbnN0IGY9W10sdj1kK2EsTT1hL3YsRD1uZXcgTWFwKGxbMF0pO0Quc2V0KCJvZmZzZXQiLDApLGYucHVzaChEKTtjb25zdCBaPW5ldyBNYXAobFsw'@;
put 'XSk7Wi5zZXQoIm9mZnNldCIsSWhlKE0pKSxmLnB1c2goWik7Y29uc3QgcmU9bC5sZW5ndGgtMTtmb3IobGV0IGNlPTE7Y2U8PXJlO2NlKyspe2xldCBiZT1uZXcgTWFwKGxbY2VdKTtjb25zdCBFZT1iZS5nZXQoIm9mZnNldCIpO2JlLnNldCgib2Zmc2V0IixJaGUoKGErRWUqZCkvdikpLGYu'@;
put 'cHVzaChiZSl9ZD12LGE9MCxoPSIiLGw9Zn1yZXR1cm4gekcodGhpcy5lbGVtZW50LGwsdGhpcy5wcmVTdHlsZVByb3BzLHRoaXMucG9zdFN0eWxlUHJvcHMsZCxhLGgsITApfX1mdW5jdGlvbiBJaGUoYyxsPTMpe2NvbnN0IGE9TWF0aC5wb3coMTAsbC0xKTtyZXR1cm4gTWF0aC5yb3VuZChj'@;
put 'KmEpL2F9ZnVuY3Rpb24gUmhlKGMsbCxhLGQsaCxmLHYsTSxELFoscmUsY2UsYmUpe3JldHVybnt0eXBlOjAsZWxlbWVudDpjLHRyaWdnZXJOYW1lOmwsaXNSZW1vdmFsVHJhbnNpdGlvbjpoLGZyb21TdGF0ZTphLGZyb21TdHlsZXM6Zix0b1N0YXRlOmQsdG9TdHlsZXM6dix0aW1lbGluZXM6'@;
put 'TSxxdWVyaWVkRWxlbWVudHM6RCxwcmVTdHlsZVByb3BzOloscG9zdFN0eWxlUHJvcHM6cmUsdG90YWxUaW1lOmNlLGVycm9yczpiZX19Y29uc3QgV0c9e307Y2xhc3MgTGhle2NvbnN0cnVjdG9yKGwsYSxkKXt0aGlzLl90cmlnZ2VyTmFtZT1sLHRoaXMuYXN0PWEsdGhpcy5fc3RhdGVTdHls'@;
put 'ZXM9ZH1tYXRjaChsLGEsZCxoKXtyZXR1cm4gZnVuY3Rpb24gdSRlKGMsbCxhLGQsaCl7cmV0dXJuIGMuc29tZShmPT5mKGwsYSxkLGgpKX0odGhpcy5hc3QubWF0Y2hlcnMsbCxhLGQsaCl9YnVpbGRTdHlsZXMobCxhLGQpe2xldCBoPXRoaXMuX3N0YXRlU3R5bGVzLmdldCgiKiIpO3JldHVy'@;
put 'biB2b2lkIDAhPT1sJiYoaD10aGlzLl9zdGF0ZVN0eWxlcy5nZXQobD8udG9TdHJpbmcoKSl8fGgpLGg/aC5idWlsZFN0eWxlcyhhLGQpOm5ldyBNYXB9YnVpbGQobCxhLGQsaCxmLHYsTSxELFoscmUpe2NvbnN0IGNlPVtdLGJlPXRoaXMuYXN0Lm9wdGlvbnMmJnRoaXMuYXN0Lm9wdGlvbnMu'@;
put 'cGFyYW1zfHxXRyxCZT10aGlzLmJ1aWxkU3R5bGVzKGQsTSYmTS5wYXJhbXN8fFdHLGNlKSxxZT1EJiZELnBhcmFtc3x8V0cscnQ9dGhpcy5idWlsZFN0eWxlcyhoLHFlLGNlKSxwdD1uZXcgU2V0LGR0PW5ldyBNYXAsSnQ9bmV3IE1hcCx2bj0idm9pZCI9PT1oLENuPXtwYXJhbXM6T2hlKHFl'@;
put 'LGJlKSxkZWxheTp0aGlzLmFzdC5vcHRpb25zPy5kZWxheX0sdG49cmU/W106VUcobCxhLHRoaXMuYXN0LmFuaW1hdGlvbixmLHYsQmUscnQsQ24sWixjZSk7bGV0IE1uPTA7cmV0dXJuIHRuLmZvckVhY2goQ3I9PntNbj1NYXRoLm1heChDci5kdXJhdGlvbitDci5kZWxheSxNbil9KSxjZS5s'@;
put 'ZW5ndGg/UmhlKGEsdGhpcy5fdHJpZ2dlck5hbWUsZCxoLHZuLEJlLHJ0LFtdLFtdLGR0LEp0LE1uLGNlKToodG4uZm9yRWFjaChDcj0+e2NvbnN0IEdyPUNyLmVsZW1lbnQsbXI9VGgoZHQsR3IsbmV3IFNldCk7Q3IucHJlU3R5bGVQcm9wcy5mb3JFYWNoKGFpPT5tci5hZGQoYWkpKTtjb25z'@;
put 'dCBHbj1UaChKdCxHcixuZXcgU2V0KTtDci5wb3N0U3R5bGVQcm9wcy5mb3JFYWNoKGFpPT5Hbi5hZGQoYWkpKSxHciE9PWEmJnB0LmFkZChHcil9KSxSaGUoYSx0aGlzLl90cmlnZ2VyTmFtZSxkLGgsdm4sQmUscnQsdG4sWy4uLnB0LnZhbHVlcygpXSxkdCxKdCxNbikpfX1mdW5jdGlvbiBP'@;
put 'aGUoYyxsKXtjb25zdCBhPXsuLi5sfTtyZXR1cm4gT2JqZWN0LmVudHJpZXMoYykuZm9yRWFjaCgoW2QsaF0pPT57bnVsbCE9aCYmKGFbZF09aCl9KSxhfWNsYXNzIGQkZXtjb25zdHJ1Y3RvcihsLGEsZCl7dGhpcy5zdHlsZXM9bCx0aGlzLmRlZmF1bHRQYXJhbXM9YSx0aGlzLm5vcm1hbGl6'@;
put 'ZXI9ZH1idWlsZFN0eWxlcyhsLGEpe2NvbnN0IGQ9bmV3IE1hcCxoPU9oZShsLHRoaXMuZGVmYXVsdFBhcmFtcyk7cmV0dXJuIHRoaXMuc3R5bGVzLnN0eWxlcy5mb3JFYWNoKGY9Pnsic3RyaW5nIiE9dHlwZW9mIGYmJmYuZm9yRWFjaCgodixNKT0+e3YmJih2PXJFKHYsaCxhKSk7Y29uc3Qg'@;
put 'RD10aGlzLm5vcm1hbGl6ZXIubm9ybWFsaXplUHJvcGVydHlOYW1lKE0sYSk7dj10aGlzLm5vcm1hbGl6ZXIubm9ybWFsaXplU3R5bGVWYWx1ZShNLEQsdixhKSxkLnNldChNLHYpfSl9KSxkfX1jbGFzcyBmJGV7Y29uc3RydWN0b3IobCxhLGQpe3RoaXMubmFtZT1sLHRoaXMuYXN0PWEsdGhp'@;
put 'cy5fbm9ybWFsaXplcj1kLHRoaXMudHJhbnNpdGlvbkZhY3Rvcmllcz1bXSx0aGlzLnN0YXRlcz1uZXcgTWFwLGEuc3RhdGVzLmZvckVhY2goaD0+e3RoaXMuc3RhdGVzLnNldChoLm5hbWUsbmV3IGQkZShoLnN0eWxlLGgub3B0aW9ucyYmaC5vcHRpb25zLnBhcmFtc3x8e30sZCkpfSksUGhl'@;
put 'KHRoaXMuc3RhdGVzLCJ0cnVlIiwiMSIpLFBoZSh0aGlzLnN0YXRlcywiZmFsc2UiLCIwIiksYS50cmFuc2l0aW9ucy5mb3JFYWNoKGg9Pnt0aGlzLnRyYW5zaXRpb25GYWN0b3JpZXMucHVzaChuZXcgTGhlKGwsaCx0aGlzLnN0YXRlcykpfSksdGhpcy5mYWxsYmFja1RyYW5zaXRpb249ZnVu'@;
put 'Y3Rpb24gcCRlKGMsbCxhKXtyZXR1cm4gbmV3IExoZShjLHt0eXBlOkFvLlRyYW5zaXRpb24sYW5pbWF0aW9uOnt0eXBlOkFvLlNlcXVlbmNlLHN0ZXBzOltdLG9wdGlvbnM6bnVsbH0sbWF0Y2hlcnM6Wyh2LE0pPT4hMF0sb3B0aW9uczpudWxsLHF1ZXJ5Q291bnQ6MCxkZXBDb3VudDowfSxs'@;
put 'KX0obCx0aGlzLnN0YXRlcyl9Z2V0IGNvbnRhaW5zUXVlcmllcygpe3JldHVybiB0aGlzLmFzdC5xdWVyeUNvdW50PjB9bWF0Y2hUcmFuc2l0aW9uKGwsYSxkLGgpe3JldHVybiB0aGlzLnRyYW5zaXRpb25GYWN0b3JpZXMuZmluZCh2PT52Lm1hdGNoKGwsYSxkLGgpKXx8bnVsbH1tYXRjaFN0'@;
put 'eWxlcyhsLGEsZCl7cmV0dXJuIHRoaXMuZmFsbGJhY2tUcmFuc2l0aW9uLmJ1aWxkU3R5bGVzKGwsYSxkKX19ZnVuY3Rpb24gUGhlKGMsbCxhKXtjLmhhcyhsKT9jLmhhcyhhKXx8Yy5zZXQoYSxjLmdldChsKSk6Yy5oYXMoYSkmJmMuc2V0KGwsYy5nZXQoYSkpfWNvbnN0IGckZT1uZXcgQ087'@;
put 'Y2xhc3MgbSRle2NvbnN0cnVjdG9yKGwsYSxkKXt0aGlzLmJvZHlOb2RlPWwsdGhpcy5fZHJpdmVyPWEsdGhpcy5fbm9ybWFsaXplcj1kLHRoaXMuX2FuaW1hdGlvbnM9bmV3IE1hcCx0aGlzLl9wbGF5ZXJzQnlJZD1uZXcgTWFwLHRoaXMucGxheWVycz1bXX1yZWdpc3RlcihsLGEpe2NvbnN0'@;
put 'IGQ9W10sZj1CRyh0aGlzLl9kcml2ZXIsYSxkLFtdKTtpZihkLmxlbmd0aCl0aHJvdyBmdW5jdGlvbiB3R2UoYyl7cmV0dXJuIG5ldyBRbigzNTAzLCExKX0oKTt0aGlzLl9hbmltYXRpb25zLnNldChsLGYpfV9idWlsZFBsYXllcihsLGEsZCl7Y29uc3QgaD1sLmVsZW1lbnQsZj1iaGUodGhp'@;
put 'cy5fbm9ybWFsaXplcixsLmtleWZyYW1lcyxhLGQpO3JldHVybiB0aGlzLl9kcml2ZXIuYW5pbWF0ZShoLGYsbC5kdXJhdGlvbixsLmRlbGF5LGwuZWFzaW5nLFtdLCEwKX1jcmVhdGUobCxhLGQ9e30pe2NvbnN0IGg9W10sZj10aGlzLl9hbmltYXRpb25zLmdldChsKTtsZXQgdjtjb25zdCBN'@;
put 'PW5ldyBNYXA7aWYoZj8odj1VRyh0aGlzLl9kcml2ZXIsYSxmLE9HLGdPLG5ldyBNYXAsbmV3IE1hcCxkLGckZSxoKSx2LmZvckVhY2gocmU9Pntjb25zdCBjZT1UaChNLHJlLmVsZW1lbnQsbmV3IE1hcCk7cmUucG9zdFN0eWxlUHJvcHMuZm9yRWFjaChiZT0+Y2Uuc2V0KGJlLG51bGwpKX0p'@;
put 'KTooaC5wdXNoKGZ1bmN0aW9uIENHZSgpe3JldHVybiBuZXcgUW4oMzMwMCwhMSl9KCkpLHY9W10pLGgubGVuZ3RoKXRocm93IGZ1bmN0aW9uIFNHZShjKXtyZXR1cm4gbmV3IFFuKDM1MDQsITEpfSgpO00uZm9yRWFjaCgocmUsY2UpPT57cmUuZm9yRWFjaCgoYmUsRWUpPT57cmUuc2V0KEVl'@;
put 'LHRoaXMuX2RyaXZlci5jb21wdXRlU3R5bGUoY2UsRWUsaWcpKX0pfSk7Y29uc3QgWj1EbSh2Lm1hcChyZT0+e2NvbnN0IGNlPU0uZ2V0KHJlLmVsZW1lbnQpO3JldHVybiB0aGlzLl9idWlsZFBsYXllcihyZSxuZXcgTWFwLGNlKX0pKTtyZXR1cm4gdGhpcy5fcGxheWVyc0J5SWQuc2V0KGws'@;
put 'WiksWi5vbkRlc3Ryb3koKCk9PnRoaXMuZGVzdHJveShsKSksdGhpcy5wbGF5ZXJzLnB1c2goWiksWn1kZXN0cm95KGwpe2NvbnN0IGE9dGhpcy5fZ2V0UGxheWVyKGwpO2EuZGVzdHJveSgpLHRoaXMuX3BsYXllcnNCeUlkLmRlbGV0ZShsKTtjb25zdCBkPXRoaXMucGxheWVycy5pbmRleE9m'@;
put 'KGEpO2Q+PTAmJnRoaXMucGxheWVycy5zcGxpY2UoZCwxKX1fZ2V0UGxheWVyKGwpe2NvbnN0IGE9dGhpcy5fcGxheWVyc0J5SWQuZ2V0KGwpO2lmKCFhKXRocm93IGZ1bmN0aW9uIE1HZShjKXtyZXR1cm4gbmV3IFFuKDMzMDEsITEpfSgpO3JldHVybiBhfWxpc3RlbihsLGEsZCxoKXtjb25z'@;
put 'dCBmPWtHKGEsIiIsIiIsIiIpO3JldHVybiBURyh0aGlzLl9nZXRQbGF5ZXIobCksZCxmLGgpLCgpPT57fX1jb21tYW5kKGwsYSxkLGgpe2lmKCJyZWdpc3RlciI9PWQpcmV0dXJuIHZvaWQgdGhpcy5yZWdpc3RlcihsLGhbMF0pO2lmKCJjcmVhdGUiPT1kKXJldHVybiB2b2lkIHRoaXMuY3Jl'@;
put 'YXRlKGwsYSxoWzBdfHx7fSk7Y29uc3QgZj10aGlzLl9nZXRQbGF5ZXIobCk7c3dpdGNoKGQpe2Nhc2UicGxheSI6Zi5wbGF5KCk7YnJlYWs7Y2FzZSJwYXVzZSI6Zi5wYXVzZSgpO2JyZWFrO2Nhc2UicmVzZXQiOmYucmVzZXQoKTticmVhaztjYXNlInJlc3RhcnQiOmYucmVzdGFydCgpO2Jy'@;
put 'ZWFrO2Nhc2UiZmluaXNoIjpmLmZpbmlzaCgpO2JyZWFrO2Nhc2UiaW5pdCI6Zi5pbml0KCk7YnJlYWs7Y2FzZSJzZXRQb3NpdGlvbiI6Zi5zZXRQb3NpdGlvbihwYXJzZUZsb2F0KGhbMF0pKTticmVhaztjYXNlImRlc3Ryb3kiOnRoaXMuZGVzdHJveShsKX19fWNvbnN0IEZoZT0ibmctYW5p'@;
put 'bWF0ZS1xdWV1ZWQiLFlHPSJuZy1hbmltYXRlLWRpc2FibGVkIix3JGU9W10sSGhlPXtuYW1lc3BhY2VJZDoiIixzZXRGb3JSZW1vdmFsOiExLHNldEZvck1vdmU6ITEsaGFzQW5pbWF0aW9uOiExLHJlbW92ZWRCZWZvcmVRdWVyaWVkOiExfSxDJGU9e25hbWVzcGFjZUlkOiIiLHNldEZvck1v'@;
put 'dmU6ITEsc2V0Rm9yUmVtb3ZhbDohMSxoYXNBbmltYXRpb246ITEscmVtb3ZlZEJlZm9yZVF1ZXJpZWQ6ITB9LGUzPSJfX25nX3JlbW92ZWQiO2NsYXNzIEdHe2dldCBwYXJhbXMoKXtyZXR1cm4gdGhpcy5vcHRpb25zLnBhcmFtc31jb25zdHJ1Y3RvcihsLGE9IiIpe3RoaXMubmFtZXNwYWNl'@;
put 'SWQ9YTtjb25zdCBkPWwmJmwuaGFzT3duUHJvcGVydHkoInZhbHVlIik7aWYodGhpcy52YWx1ZT1mdW5jdGlvbiBFJGUoYyl7cmV0dXJuIGM/P251bGx9KGQ/bC52YWx1ZTpsKSxkKXtjb25zdHt2YWx1ZTpmLC4uLnZ9PWw7dGhpcy5vcHRpb25zPXZ9ZWxzZSB0aGlzLm9wdGlvbnM9e307dGhp'@;
put 'cy5vcHRpb25zLnBhcmFtc3x8KHRoaXMub3B0aW9ucy5wYXJhbXM9e30pfWFic29yYk9wdGlvbnMobCl7Y29uc3QgYT1sLnBhcmFtcztpZihhKXtjb25zdCBkPXRoaXMub3B0aW9ucy5wYXJhbXM7T2JqZWN0LmtleXMoYSkuZm9yRWFjaChoPT57bnVsbD09ZFtoXSYmKGRbaF09YVtoXSl9KX19'@;
put 'fWNvbnN0IGlFPSJ2b2lkIiwkRz1uZXcgR0coaUUpO2NsYXNzIFMkZXtjb25zdHJ1Y3RvcihsLGEsZCl7dGhpcy5pZD1sLHRoaXMuaG9zdEVsZW1lbnQ9YSx0aGlzLl9lbmdpbmU9ZCx0aGlzLnBsYXllcnM9W10sdGhpcy5fdHJpZ2dlcnM9bmV3IE1hcCx0aGlzLl9xdWV1ZT1bXSx0aGlzLl9l'@;
put 'bGVtZW50TGlzdGVuZXJzPW5ldyBNYXAsdGhpcy5faG9zdENsYXNzTmFtZT0ibmctdG5zLSIrbCxGMihhLHRoaXMuX2hvc3RDbGFzc05hbWUpfWxpc3RlbihsLGEsZCxoKXtpZighdGhpcy5fdHJpZ2dlcnMuaGFzKGEpKXRocm93IGZ1bmN0aW9uIHhHZShjLGwpe3JldHVybiBuZXcgUW4oMzMw'@;
put 'MiwhMSl9KCk7aWYobnVsbD09ZHx8MD09ZC5sZW5ndGgpdGhyb3cgZnVuY3Rpb24gRUdlKGMpe3JldHVybiBuZXcgUW4oMzMwMywhMSl9KCk7aWYoIWZ1bmN0aW9uIFQkZShjKXtyZXR1cm4ic3RhcnQiPT1jfHwiZG9uZSI9PWN9KGQpKXRocm93IGZ1bmN0aW9uIFRHZShjLGwpe3JldHVybiBu'@;
put 'ZXcgUW4oMzQwMCwhMSl9KCk7Y29uc3QgZj1UaCh0aGlzLl9lbGVtZW50TGlzdGVuZXJzLGwsW10pLHY9e25hbWU6YSxwaGFzZTpkLGNhbGxiYWNrOmh9O2YucHVzaCh2KTtjb25zdCBNPVRoKHRoaXMuX2VuZ2luZS5zdGF0ZXNCeUVsZW1lbnQsbCxuZXcgTWFwKTtyZXR1cm4gTS5oYXMoYSl8'@;
put 'fChGMihsLG1PKSxGMihsLG1PKyItIithKSxNLnNldChhLCRHKSksKCk9Pnt0aGlzLl9lbmdpbmUuYWZ0ZXJGbHVzaCgoKT0+e2NvbnN0IEQ9Zi5pbmRleE9mKHYpO0Q+PTAmJmYuc3BsaWNlKEQsMSksdGhpcy5fdHJpZ2dlcnMuaGFzKGEpfHxNLmRlbGV0ZShhKX0pfX1yZWdpc3RlcihsLGEp'@;
put 'e3JldHVybiF0aGlzLl90cmlnZ2Vycy5oYXMobCkmJih0aGlzLl90cmlnZ2Vycy5zZXQobCxhKSwhMCl9X2dldFRyaWdnZXIobCl7Y29uc3QgYT10aGlzLl90cmlnZ2Vycy5nZXQobCk7aWYoIWEpdGhyb3cgZnVuY3Rpb24gQUdlKGMpe3JldHVybiBuZXcgUW4oMzQwMSwhMSl9KCk7cmV0dXJu'@;
put 'IGF9dHJpZ2dlcihsLGEsZCxoPSEwKXtjb25zdCBmPXRoaXMuX2dldFRyaWdnZXIoYSksdj1uZXcgS0codGhpcy5pZCxhLGwpO2xldCBNPXRoaXMuX2VuZ2luZS5zdGF0ZXNCeUVsZW1lbnQuZ2V0KGwpO018fChGMihsLG1PKSxGMihsLG1PKyItIithKSx0aGlzLl9lbmdpbmUuc3RhdGVzQnlF'@;
put 'bGVtZW50LnNldChsLE09bmV3IE1hcCkpO2xldCBEPU0uZ2V0KGEpO2NvbnN0IFo9bmV3IEdHKGQsdGhpcy5pZCk7aWYoIShkJiZkLmhhc093blByb3BlcnR5KCJ2YWx1ZSIpKSYmRCYmWi5hYnNvcmJPcHRpb25zKEQub3B0aW9ucyksTS5zZXQoYSxaKSxEfHwoRD0kRyksWi52YWx1ZSE9PWlF'@;
put 'JiZELnZhbHVlPT09Wi52YWx1ZSl7aWYoIWZ1bmN0aW9uIEQkZShjLGwpe2NvbnN0IGE9T2JqZWN0LmtleXMoYyksZD1PYmplY3Qua2V5cyhsKTtpZihhLmxlbmd0aCE9ZC5sZW5ndGgpcmV0dXJuITE7Zm9yKGxldCBoPTA7aDxhLmxlbmd0aDtoKyspe2NvbnN0IGY9YVtoXTtpZighbC5oYXNP'@;
put 'd25Qcm9wZXJ0eShmKXx8Y1tmXSE9PWxbZl0pcmV0dXJuITF9cmV0dXJuITB9KEQucGFyYW1zLFoucGFyYW1zKSl7Y29uc3QgcWU9W10scnQ9Zi5tYXRjaFN0eWxlcyhELnZhbHVlLEQucGFyYW1zLHFlKSxwdD1mLm1hdGNoU3R5bGVzKFoudmFsdWUsWi5wYXJhbXMscWUpO3FlLmxlbmd0aD90'@;
put 'aGlzLl9lbmdpbmUucmVwb3J0RXJyb3IocWUpOnRoaXMuX2VuZ2luZS5hZnRlckZsdXNoKCgpPT57RjcobCxydCksTXAobCxwdCl9KX1yZXR1cm59Y29uc3QgYmU9VGgodGhpcy5fZW5naW5lLnBsYXllcnNCeUVsZW1lbnQsbCxbXSk7YmUuZm9yRWFjaChxZT0+e3FlLm5hbWVzcGFjZUlkPT10'@;
put 'aGlzLmlkJiZxZS50cmlnZ2VyTmFtZT09YSYmcWUucXVldWVkJiZxZS5kZXN0cm95KCl9KTtsZXQgRWU9Zi5tYXRjaFRyYW5zaXRpb24oRC52YWx1ZSxaLnZhbHVlLGwsWi5wYXJhbXMpLEJlPSExO2lmKCFFZSl7aWYoIWgpcmV0dXJuO0VlPWYuZmFsbGJhY2tUcmFuc2l0aW9uLEJlPSEwfXJl'@;
put 'dHVybiB0aGlzLl9lbmdpbmUudG90YWxRdWV1ZWRQbGF5ZXJzKyssdGhpcy5fcXVldWUucHVzaCh7ZWxlbWVudDpsLHRyaWdnZXJOYW1lOmEsdHJhbnNpdGlvbjpFZSxmcm9tU3RhdGU6RCx0b1N0YXRlOloscGxheWVyOnYsaXNGYWxsYmFja1RyYW5zaXRpb246QmV9KSxCZXx8KEYyKGwsRmhl'@;
put 'KSx2Lm9uU3RhcnQoKCk9PntpXyhsLEZoZSl9KSksdi5vbkRvbmUoKCk9PntsZXQgcWU9dGhpcy5wbGF5ZXJzLmluZGV4T2Yodik7cWU+PTAmJnRoaXMucGxheWVycy5zcGxpY2UocWUsMSk7Y29uc3QgcnQ9dGhpcy5fZW5naW5lLnBsYXllcnNCeUVsZW1lbnQuZ2V0KGwpO2lmKHJ0KXtsZXQg'@;
put 'cHQ9cnQuaW5kZXhPZih2KTtwdD49MCYmcnQuc3BsaWNlKHB0LDEpfX0pLHRoaXMucGxheWVycy5wdXNoKHYpLGJlLnB1c2godiksdn1kZXJlZ2lzdGVyKGwpe3RoaXMuX3RyaWdnZXJzLmRlbGV0ZShsKSx0aGlzLl9lbmdpbmUuc3RhdGVzQnlFbGVtZW50LmZvckVhY2goYT0+YS5kZWxldGUo'@;
put 'bCkpLHRoaXMuX2VsZW1lbnRMaXN0ZW5lcnMuZm9yRWFjaCgoYSxkKT0+e3RoaXMuX2VsZW1lbnRMaXN0ZW5lcnMuc2V0KGQsYS5maWx0ZXIoaD0+aC5uYW1lIT1sKSl9KX1jbGVhckVsZW1lbnRDYWNoZShsKXt0aGlzLl9lbmdpbmUuc3RhdGVzQnlFbGVtZW50LmRlbGV0ZShsKSx0aGlzLl9l'@;
put 'bGVtZW50TGlzdGVuZXJzLmRlbGV0ZShsKTtjb25zdCBhPXRoaXMuX2VuZ2luZS5wbGF5ZXJzQnlFbGVtZW50LmdldChsKTthJiYoYS5mb3JFYWNoKGQ9PmQuZGVzdHJveSgpKSx0aGlzLl9lbmdpbmUucGxheWVyc0J5RWxlbWVudC5kZWxldGUobCkpfV9zaWduYWxSZW1vdmFsRm9ySW5uZXJU'@;
put 'cmlnZ2VycyhsLGEpe2NvbnN0IGQ9dGhpcy5fZW5naW5lLmRyaXZlci5xdWVyeShsLHZPLCEwKTtkLmZvckVhY2goaD0+e2lmKGhbZTNdKXJldHVybjtjb25zdCBmPXRoaXMuX2VuZ2luZS5mZXRjaE5hbWVzcGFjZXNCeUVsZW1lbnQoaCk7Zi5zaXplP2YuZm9yRWFjaCh2PT52LnRyaWdnZXJM'@;
put 'ZWF2ZUFuaW1hdGlvbihoLGEsITEsITApKTp0aGlzLmNsZWFyRWxlbWVudENhY2hlKGgpfSksdGhpcy5fZW5naW5lLmFmdGVyRmx1c2hBbmltYXRpb25zRG9uZSgoKT0+ZC5mb3JFYWNoKGg9PnRoaXMuY2xlYXJFbGVtZW50Q2FjaGUoaCkpKX10cmlnZ2VyTGVhdmVBbmltYXRpb24obCxhLGQs'@;
put 'aCl7Y29uc3QgZj10aGlzLl9lbmdpbmUuc3RhdGVzQnlFbGVtZW50LmdldChsKSx2PW5ldyBNYXA7aWYoZil7Y29uc3QgTT1bXTtpZihmLmZvckVhY2goKEQsWik9PntpZih2LnNldChaLEQudmFsdWUpLHRoaXMuX3RyaWdnZXJzLmhhcyhaKSl7Y29uc3QgcmU9dGhpcy50cmlnZ2VyKGwsWixp'@;
put 'RSxoKTtyZSYmTS5wdXNoKHJlKX19KSxNLmxlbmd0aClyZXR1cm4gdGhpcy5fZW5naW5lLm1hcmtFbGVtZW50QXNSZW1vdmVkKHRoaXMuaWQsbCwhMCxhLHYpLGQmJkRtKE0pLm9uRG9uZSgoKT0+dGhpcy5fZW5naW5lLnByb2Nlc3NMZWF2ZU5vZGUobCkpLCEwfXJldHVybiExfXByZXBhcmVM'@;
put 'ZWF2ZUFuaW1hdGlvbkxpc3RlbmVycyhsKXtjb25zdCBhPXRoaXMuX2VsZW1lbnRMaXN0ZW5lcnMuZ2V0KGwpLGQ9dGhpcy5fZW5naW5lLnN0YXRlc0J5RWxlbWVudC5nZXQobCk7aWYoYSYmZCl7Y29uc3QgaD1uZXcgU2V0O2EuZm9yRWFjaChmPT57Y29uc3Qgdj1mLm5hbWU7aWYoaC5oYXMo'@;
put 'dikpcmV0dXJuO2guYWRkKHYpO2NvbnN0IEQ9dGhpcy5fdHJpZ2dlcnMuZ2V0KHYpLmZhbGxiYWNrVHJhbnNpdGlvbixaPWQuZ2V0KHYpfHwkRyxyZT1uZXcgR0coaUUpLGNlPW5ldyBLRyh0aGlzLmlkLHYsbCk7dGhpcy5fZW5naW5lLnRvdGFsUXVldWVkUGxheWVycysrLHRoaXMuX3F1ZXVl'@;
put 'LnB1c2goe2VsZW1lbnQ6bCx0cmlnZ2VyTmFtZTp2LHRyYW5zaXRpb246RCxmcm9tU3RhdGU6Wix0b1N0YXRlOnJlLHBsYXllcjpjZSxpc0ZhbGxiYWNrVHJhbnNpdGlvbjohMH0pfSl9fXJlbW92ZU5vZGUobCxhKXtjb25zdCBkPXRoaXMuX2VuZ2luZTtpZihsLmNoaWxkRWxlbWVudENvdW50'@;
put 'JiZ0aGlzLl9zaWduYWxSZW1vdmFsRm9ySW5uZXJUcmlnZ2VycyhsLGEpLHRoaXMudHJpZ2dlckxlYXZlQW5pbWF0aW9uKGwsYSwhMCkpcmV0dXJuO2xldCBoPSExO2lmKGQudG90YWxBbmltYXRpb25zKXtjb25zdCBmPWQucGxheWVycy5sZW5ndGg/ZC5wbGF5ZXJzQnlRdWVyaWVkRWxlbWVu'@;
put 'dC5nZXQobCk6W107aWYoZiYmZi5sZW5ndGgpaD0hMDtlbHNle2xldCB2PWw7Zm9yKDt2PXYucGFyZW50Tm9kZTspaWYoZC5zdGF0ZXNCeUVsZW1lbnQuZ2V0KHYpKXtoPSEwO2JyZWFrfX19aWYodGhpcy5wcmVwYXJlTGVhdmVBbmltYXRpb25MaXN0ZW5lcnMobCksaClkLm1hcmtFbGVtZW50'@;
put 'QXNSZW1vdmVkKHRoaXMuaWQsbCwhMSxhKTtlbHNle2NvbnN0IGY9bFtlM107KCFmfHxmPT09SGhlKSYmKGQuYWZ0ZXJGbHVzaCgoKT0+dGhpcy5jbGVhckVsZW1lbnRDYWNoZShsKSksZC5kZXN0cm95SW5uZXJBbmltYXRpb25zKGwpLGQuX29uUmVtb3ZhbENvbXBsZXRlKGwsYSkpfX1pbnNl'@;
put 'cnROb2RlKGwsYSl7RjIobCx0aGlzLl9ob3N0Q2xhc3NOYW1lKX1kcmFpblF1ZXVlZFRyYW5zaXRpb25zKGwpe2NvbnN0IGE9W107cmV0dXJuIHRoaXMuX3F1ZXVlLmZvckVhY2goZD0+e2NvbnN0IGg9ZC5wbGF5ZXI7aWYoaC5kZXN0cm95ZWQpcmV0dXJuO2NvbnN0IGY9ZC5lbGVtZW50LHY9'@;
put 'dGhpcy5fZWxlbWVudExpc3RlbmVycy5nZXQoZik7diYmdi5mb3JFYWNoKE09PntpZihNLm5hbWU9PWQudHJpZ2dlck5hbWUpe2NvbnN0IEQ9a0coZixkLnRyaWdnZXJOYW1lLGQuZnJvbVN0YXRlLnZhbHVlLGQudG9TdGF0ZS52YWx1ZSk7RC5fZGF0YT1sLFRHKGQucGxheWVyLE0ucGhhc2Us'@;
put 'RCxNLmNhbGxiYWNrKX19KSxoLm1hcmtlZEZvckRlc3Ryb3k/dGhpcy5fZW5naW5lLmFmdGVyRmx1c2goKCk9PntoLmRlc3Ryb3koKX0pOmEucHVzaChkKX0pLHRoaXMuX3F1ZXVlPVtdLGEuc29ydCgoZCxoKT0+e2NvbnN0IGY9ZC50cmFuc2l0aW9uLmFzdC5kZXBDb3VudCx2PWgudHJhbnNp'@;
put 'dGlvbi5hc3QuZGVwQ291bnQ7cmV0dXJuIDA9PWZ8fDA9PXY/Zi12OnRoaXMuX2VuZ2luZS5kcml2ZXIuY29udGFpbnNFbGVtZW50KGQuZWxlbWVudCxoLmVsZW1lbnQpPzE6LTF9KX1kZXN0cm95KGwpe3RoaXMucGxheWVycy5mb3JFYWNoKGE9PmEuZGVzdHJveSgpKSx0aGlzLl9zaWduYWxS'@;
put 'ZW1vdmFsRm9ySW5uZXJUcmlnZ2Vycyh0aGlzLmhvc3RFbGVtZW50LGwpfX1jbGFzcyBNJGV7X29uUmVtb3ZhbENvbXBsZXRlKGwsYSl7dGhpcy5vblJlbW92YWxDb21wbGV0ZShsLGEpfWNvbnN0cnVjdG9yKGwsYSxkLGgpe3RoaXMuYm9keU5vZGU9bCx0aGlzLmRyaXZlcj1hLHRoaXMuX25v'@;
put 'cm1hbGl6ZXI9ZCx0aGlzLnNjaGVkdWxlcj1oLHRoaXMucGxheWVycz1bXSx0aGlzLm5ld0hvc3RFbGVtZW50cz1uZXcgTWFwLHRoaXMucGxheWVyc0J5RWxlbWVudD1uZXcgTWFwLHRoaXMucGxheWVyc0J5UXVlcmllZEVsZW1lbnQ9bmV3IE1hcCx0aGlzLnN0YXRlc0J5RWxlbWVudD1uZXcg'@;
put 'TWFwLHRoaXMuZGlzYWJsZWROb2Rlcz1uZXcgU2V0LHRoaXMudG90YWxBbmltYXRpb25zPTAsdGhpcy50b3RhbFF1ZXVlZFBsYXllcnM9MCx0aGlzLl9uYW1lc3BhY2VMb29rdXA9e30sdGhpcy5fbmFtZXNwYWNlTGlzdD1bXSx0aGlzLl9mbHVzaEZucz1bXSx0aGlzLl93aGVuUXVpZXRGbnM9'@;
put 'W10sdGhpcy5uYW1lc3BhY2VzQnlIb3N0RWxlbWVudD1uZXcgTWFwLHRoaXMuY29sbGVjdGVkRW50ZXJFbGVtZW50cz1bXSx0aGlzLmNvbGxlY3RlZExlYXZlRWxlbWVudHM9W10sdGhpcy5vblJlbW92YWxDb21wbGV0ZT0oZix2KT0+e319Z2V0IHF1ZXVlZFBsYXllcnMoKXtjb25zdCBsPVtd'@;
put 'O3JldHVybiB0aGlzLl9uYW1lc3BhY2VMaXN0LmZvckVhY2goYT0+e2EucGxheWVycy5mb3JFYWNoKGQ9PntkLnF1ZXVlZCYmbC5wdXNoKGQpfSl9KSxsfWNyZWF0ZU5hbWVzcGFjZShsLGEpe2NvbnN0IGQ9bmV3IFMkZShsLGEsdGhpcyk7cmV0dXJuIHRoaXMuYm9keU5vZGUmJnRoaXMuZHJp'@;
put 'dmVyLmNvbnRhaW5zRWxlbWVudCh0aGlzLmJvZHlOb2RlLGEpP3RoaXMuX2JhbGFuY2VOYW1lc3BhY2VMaXN0KGQsYSk6KHRoaXMubmV3SG9zdEVsZW1lbnRzLnNldChhLGQpLHRoaXMuY29sbGVjdEVudGVyRWxlbWVudChhKSksdGhpcy5fbmFtZXNwYWNlTG9va3VwW2xdPWR9X2JhbGFuY2VO'@;
put 'YW1lc3BhY2VMaXN0KGwsYSl7Y29uc3QgZD10aGlzLl9uYW1lc3BhY2VMaXN0LGg9dGhpcy5uYW1lc3BhY2VzQnlIb3N0RWxlbWVudDtpZihkLmxlbmd0aC0xPj0wKXtsZXQgdj0hMSxNPXRoaXMuZHJpdmVyLmdldFBhcmVudEVsZW1lbnQoYSk7Zm9yKDtNOyl7Y29uc3QgRD1oLmdldChNKTtp'@;
put 'ZihEKXtjb25zdCBaPWQuaW5kZXhPZihEKTtkLnNwbGljZShaKzEsMCxsKSx2PSEwO2JyZWFrfU09dGhpcy5kcml2ZXIuZ2V0UGFyZW50RWxlbWVudChNKX12fHxkLnVuc2hpZnQobCl9ZWxzZSBkLnB1c2gobCk7cmV0dXJuIGguc2V0KGEsbCksbH1yZWdpc3RlcihsLGEpe2xldCBkPXRoaXMu'@;
put 'X25hbWVzcGFjZUxvb2t1cFtsXTtyZXR1cm4gZHx8KGQ9dGhpcy5jcmVhdGVOYW1lc3BhY2UobCxhKSksZH1yZWdpc3RlclRyaWdnZXIobCxhLGQpe2xldCBoPXRoaXMuX25hbWVzcGFjZUxvb2t1cFtsXTtoJiZoLnJlZ2lzdGVyKGEsZCkmJnRoaXMudG90YWxBbmltYXRpb25zKyt9ZGVzdHJv'@;
put 'eShsLGEpe2wmJih0aGlzLmFmdGVyRmx1c2goKCk9Pnt9KSx0aGlzLmFmdGVyRmx1c2hBbmltYXRpb25zRG9uZSgoKT0+e2NvbnN0IGQ9dGhpcy5fZmV0Y2hOYW1lc3BhY2UobCk7dGhpcy5uYW1lc3BhY2VzQnlIb3N0RWxlbWVudC5kZWxldGUoZC5ob3N0RWxlbWVudCk7Y29uc3QgaD10aGlz'@;
put 'Ll9uYW1lc3BhY2VMaXN0LmluZGV4T2YoZCk7aD49MCYmdGhpcy5fbmFtZXNwYWNlTGlzdC5zcGxpY2UoaCwxKSxkLmRlc3Ryb3koYSksZGVsZXRlIHRoaXMuX25hbWVzcGFjZUxvb2t1cFtsXX0pKX1fZmV0Y2hOYW1lc3BhY2UobCl7cmV0dXJuIHRoaXMuX25hbWVzcGFjZUxvb2t1cFtsXX1m'@;
put 'ZXRjaE5hbWVzcGFjZXNCeUVsZW1lbnQobCl7Y29uc3QgYT1uZXcgU2V0LGQ9dGhpcy5zdGF0ZXNCeUVsZW1lbnQuZ2V0KGwpO2lmKGQpZm9yKGxldCBoIG9mIGQudmFsdWVzKCkpaWYoaC5uYW1lc3BhY2VJZCl7Y29uc3QgZj10aGlzLl9mZXRjaE5hbWVzcGFjZShoLm5hbWVzcGFjZUlkKTtm'@;
put 'JiZhLmFkZChmKX1yZXR1cm4gYX10cmlnZ2VyKGwsYSxkLGgpe2lmKHhPKGEpKXtjb25zdCBmPXRoaXMuX2ZldGNoTmFtZXNwYWNlKGwpO2lmKGYpcmV0dXJuIGYudHJpZ2dlcihhLGQsaCksITB9cmV0dXJuITF9aW5zZXJ0Tm9kZShsLGEsZCxoKXtpZigheE8oYSkpcmV0dXJuO2NvbnN0IGY9'@;
put 'YVtlM107aWYoZiYmZi5zZXRGb3JSZW1vdmFsKXtmLnNldEZvclJlbW92YWw9ITEsZi5zZXRGb3JNb3ZlPSEwO2NvbnN0IHY9dGhpcy5jb2xsZWN0ZWRMZWF2ZUVsZW1lbnRzLmluZGV4T2YoYSk7dj49MCYmdGhpcy5jb2xsZWN0ZWRMZWF2ZUVsZW1lbnRzLnNwbGljZSh2LDEpfWlmKGwpe2Nv'@;
put 'bnN0IHY9dGhpcy5fZmV0Y2hOYW1lc3BhY2UobCk7diYmdi5pbnNlcnROb2RlKGEsZCl9aCYmdGhpcy5jb2xsZWN0RW50ZXJFbGVtZW50KGEpfWNvbGxlY3RFbnRlckVsZW1lbnQobCl7dGhpcy5jb2xsZWN0ZWRFbnRlckVsZW1lbnRzLnB1c2gobCl9bWFya0VsZW1lbnRBc0Rpc2FibGVkKGws'@;
put 'YSl7YT90aGlzLmRpc2FibGVkTm9kZXMuaGFzKGwpfHwodGhpcy5kaXNhYmxlZE5vZGVzLmFkZChsKSxGMihsLFlHKSk6dGhpcy5kaXNhYmxlZE5vZGVzLmhhcyhsKSYmKHRoaXMuZGlzYWJsZWROb2Rlcy5kZWxldGUobCksaV8obCxZRykpfXJlbW92ZU5vZGUobCxhLGQpe2lmKHhPKGEpKXt0'@;
put 'aGlzLnNjaGVkdWxlcj8ubm90aWZ5KCk7Y29uc3QgaD1sP3RoaXMuX2ZldGNoTmFtZXNwYWNlKGwpOm51bGw7aD9oLnJlbW92ZU5vZGUoYSxkKTp0aGlzLm1hcmtFbGVtZW50QXNSZW1vdmVkKGwsYSwhMSxkKTtjb25zdCBmPXRoaXMubmFtZXNwYWNlc0J5SG9zdEVsZW1lbnQuZ2V0KGEpO2Ym'@;
put 'JmYuaWQhPT1sJiZmLnJlbW92ZU5vZGUoYSxkKX1lbHNlIHRoaXMuX29uUmVtb3ZhbENvbXBsZXRlKGEsZCl9bWFya0VsZW1lbnRBc1JlbW92ZWQobCxhLGQsaCxmKXt0aGlzLmNvbGxlY3RlZExlYXZlRWxlbWVudHMucHVzaChhKSxhW2UzXT17bmFtZXNwYWNlSWQ6bCxzZXRGb3JSZW1vdmFs'@;
put 'OmgsaGFzQW5pbWF0aW9uOmQscmVtb3ZlZEJlZm9yZVF1ZXJpZWQ6ITEscHJldmlvdXNUcmlnZ2Vyc1ZhbHVlczpmfX1saXN0ZW4obCxhLGQsaCxmKXtyZXR1cm4geE8oYSk/dGhpcy5fZmV0Y2hOYW1lc3BhY2UobCkubGlzdGVuKGEsZCxoLGYpOigpPT57fX1fYnVpbGRJbnN0cnVjdGlvbihs'@;
put 'LGEsZCxoLGYpe3JldHVybiBsLnRyYW5zaXRpb24uYnVpbGQodGhpcy5kcml2ZXIsbC5lbGVtZW50LGwuZnJvbVN0YXRlLnZhbHVlLGwudG9TdGF0ZS52YWx1ZSxkLGgsbC5mcm9tU3RhdGUub3B0aW9ucyxsLnRvU3RhdGUub3B0aW9ucyxhLGYpfWRlc3Ryb3lJbm5lckFuaW1hdGlvbnMobCl7'@;
put 'bGV0IGE9dGhpcy5kcml2ZXIucXVlcnkobCx2TywhMCk7YS5mb3JFYWNoKGQ9PnRoaXMuZGVzdHJveUFjdGl2ZUFuaW1hdGlvbnNGb3JFbGVtZW50KGQpKSwwIT10aGlzLnBsYXllcnNCeVF1ZXJpZWRFbGVtZW50LnNpemUmJihhPXRoaXMuZHJpdmVyLnF1ZXJ5KGwsUEcsITApLGEuZm9yRWFj'@;
put 'aChkPT50aGlzLmZpbmlzaEFjdGl2ZVF1ZXJpZWRBbmltYXRpb25PbkVsZW1lbnQoZCkpKX1kZXN0cm95QWN0aXZlQW5pbWF0aW9uc0ZvckVsZW1lbnQobCl7Y29uc3QgYT10aGlzLnBsYXllcnNCeUVsZW1lbnQuZ2V0KGwpO2EmJmEuZm9yRWFjaChkPT57ZC5xdWV1ZWQ/ZC5tYXJrZWRGb3JE'@;
put 'ZXN0cm95PSEwOmQuZGVzdHJveSgpfSl9ZmluaXNoQWN0aXZlUXVlcmllZEFuaW1hdGlvbk9uRWxlbWVudChsKXtjb25zdCBhPXRoaXMucGxheWVyc0J5UXVlcmllZEVsZW1lbnQuZ2V0KGwpO2EmJmEuZm9yRWFjaChkPT5kLmZpbmlzaCgpKX13aGVuUmVuZGVyaW5nRG9uZSgpe3JldHVybiBu'@;
put 'ZXcgUHJvbWlzZShsPT57aWYodGhpcy5wbGF5ZXJzLmxlbmd0aClyZXR1cm4gRG0odGhpcy5wbGF5ZXJzKS5vbkRvbmUoKCk9PmwoKSk7bCgpfSl9cHJvY2Vzc0xlYXZlTm9kZShsKXtjb25zdCBhPWxbZTNdO2lmKGEmJmEuc2V0Rm9yUmVtb3ZhbCl7aWYobFtlM109SGhlLGEubmFtZXNwYWNl'@;
put 'SWQpe3RoaXMuZGVzdHJveUlubmVyQW5pbWF0aW9ucyhsKTtjb25zdCBkPXRoaXMuX2ZldGNoTmFtZXNwYWNlKGEubmFtZXNwYWNlSWQpO2QmJmQuY2xlYXJFbGVtZW50Q2FjaGUobCl9dGhpcy5fb25SZW1vdmFsQ29tcGxldGUobCxhLnNldEZvclJlbW92YWwpfWwuY2xhc3NMaXN0Py5jb250'@;
put 'YWlucyhZRykmJnRoaXMubWFya0VsZW1lbnRBc0Rpc2FibGVkKGwsITEpLHRoaXMuZHJpdmVyLnF1ZXJ5KGwsIi5uZy1hbmltYXRlLWRpc2FibGVkIiwhMCkuZm9yRWFjaChkPT57dGhpcy5tYXJrRWxlbWVudEFzRGlzYWJsZWQoZCwhMSl9KX1mbHVzaChsPS0xKXtsZXQgYT1bXTtpZih0aGlz'@;
put 'Lm5ld0hvc3RFbGVtZW50cy5zaXplJiYodGhpcy5uZXdIb3N0RWxlbWVudHMuZm9yRWFjaCgoZCxoKT0+dGhpcy5fYmFsYW5jZU5hbWVzcGFjZUxpc3QoZCxoKSksdGhpcy5uZXdIb3N0RWxlbWVudHMuY2xlYXIoKSksdGhpcy50b3RhbEFuaW1hdGlvbnMmJnRoaXMuY29sbGVjdGVkRW50ZXJF'@;
put 'bGVtZW50cy5sZW5ndGgpZm9yKGxldCBkPTA7ZDx0aGlzLmNvbGxlY3RlZEVudGVyRWxlbWVudHMubGVuZ3RoO2QrKylGMih0aGlzLmNvbGxlY3RlZEVudGVyRWxlbWVudHNbZF0sIm5nLXN0YXItaW5zZXJ0ZWQiKTtpZih0aGlzLl9uYW1lc3BhY2VMaXN0Lmxlbmd0aCYmKHRoaXMudG90YWxR'@;
put 'dWV1ZWRQbGF5ZXJzfHx0aGlzLmNvbGxlY3RlZExlYXZlRWxlbWVudHMubGVuZ3RoKSl7Y29uc3QgZD1bXTt0cnl7YT10aGlzLl9mbHVzaEFuaW1hdGlvbnMoZCxsKX1maW5hbGx5e2ZvcihsZXQgaD0wO2g8ZC5sZW5ndGg7aCsrKWRbaF0oKX19ZWxzZSBmb3IobGV0IGQ9MDtkPHRoaXMuY29s'@;
put 'bGVjdGVkTGVhdmVFbGVtZW50cy5sZW5ndGg7ZCsrKXRoaXMucHJvY2Vzc0xlYXZlTm9kZSh0aGlzLmNvbGxlY3RlZExlYXZlRWxlbWVudHNbZF0pO2lmKHRoaXMudG90YWxRdWV1ZWRQbGF5ZXJzPTAsdGhpcy5jb2xsZWN0ZWRFbnRlckVsZW1lbnRzLmxlbmd0aD0wLHRoaXMuY29sbGVjdGVk'@;
put 'TGVhdmVFbGVtZW50cy5sZW5ndGg9MCx0aGlzLl9mbHVzaEZucy5mb3JFYWNoKGQ9PmQoKSksdGhpcy5fZmx1c2hGbnM9W10sdGhpcy5fd2hlblF1aWV0Rm5zLmxlbmd0aCl7Y29uc3QgZD10aGlzLl93aGVuUXVpZXRGbnM7dGhpcy5fd2hlblF1aWV0Rm5zPVtdLGEubGVuZ3RoP0RtKGEpLm9u'@;
put 'RG9uZSgoKT0+e2QuZm9yRWFjaChoPT5oKCkpfSk6ZC5mb3JFYWNoKGg9PmgoKSl9fXJlcG9ydEVycm9yKGwpe3Rocm93IGZ1bmN0aW9uIGtHZShjKXtyZXR1cm4gbmV3IFFuKDM0MDIsITEpfSgpfV9mbHVzaEFuaW1hdGlvbnMobCxhKXtjb25zdCBkPW5ldyBDTyxoPVtdLGY9bmV3IE1hcCx2'@;
put 'PVtdLE09bmV3IE1hcCxEPW5ldyBNYXAsWj1uZXcgTWFwLHJlPW5ldyBTZXQ7dGhpcy5kaXNhYmxlZE5vZGVzLmZvckVhY2goSm49PntyZS5hZGQoSm4pO2NvbnN0IElyPXRoaXMuZHJpdmVyLnF1ZXJ5KEpuLCIubmctYW5pbWF0ZS1xdWV1ZWQiLCEwKTtmb3IobGV0ICRyPTA7JHI8SXIubGVu'@;
put 'Z3RoOyRyKyspcmUuYWRkKElyWyRyXSl9KTtjb25zdCBjZT10aGlzLmJvZHlOb2RlLGJlPUFycmF5LmZyb20odGhpcy5zdGF0ZXNCeUVsZW1lbnQua2V5cygpKSxFZT1CaGUoYmUsdGhpcy5jb2xsZWN0ZWRFbnRlckVsZW1lbnRzKSxCZT1uZXcgTWFwO2xldCBxZT0wO0VlLmZvckVhY2goKEpu'@;
put 'LElyKT0+e2NvbnN0ICRyPU9HK3FlKys7QmUuc2V0KElyLCRyKSxKbi5mb3JFYWNoKHdpPT5GMih3aSwkcikpfSk7Y29uc3QgcnQ9W10scHQ9bmV3IFNldCxkdD1uZXcgU2V0O2ZvcihsZXQgSm49MDtKbjx0aGlzLmNvbGxlY3RlZExlYXZlRWxlbWVudHMubGVuZ3RoO0puKyspe2NvbnN0IEly'@;
put 'PXRoaXMuY29sbGVjdGVkTGVhdmVFbGVtZW50c1tKbl0sJHI9SXJbZTNdOyRyJiYkci5zZXRGb3JSZW1vdmFsJiYocnQucHVzaChJcikscHQuYWRkKElyKSwkci5oYXNBbmltYXRpb24/dGhpcy5kcml2ZXIucXVlcnkoSXIsIi5uZy1zdGFyLWluc2VydGVkIiwhMCkuZm9yRWFjaCh3aT0+cHQu'@;
put 'YWRkKHdpKSk6ZHQuYWRkKElyKSl9Y29uc3QgSnQ9bmV3IE1hcCx2bj1CaGUoYmUsQXJyYXkuZnJvbShwdCkpO3ZuLmZvckVhY2goKEpuLElyKT0+e2NvbnN0ICRyPWdPK3FlKys7SnQuc2V0KElyLCRyKSxKbi5mb3JFYWNoKHdpPT5GMih3aSwkcikpfSksbC5wdXNoKCgpPT57RWUuZm9yRWFj'@;
put 'aCgoSm4sSXIpPT57Y29uc3QgJHI9QmUuZ2V0KElyKTtKbi5mb3JFYWNoKHdpPT5pXyh3aSwkcikpfSksdm4uZm9yRWFjaCgoSm4sSXIpPT57Y29uc3QgJHI9SnQuZ2V0KElyKTtKbi5mb3JFYWNoKHdpPT5pXyh3aSwkcikpfSkscnQuZm9yRWFjaChKbj0+e3RoaXMucHJvY2Vzc0xlYXZlTm9k'@;
put 'ZShKbil9KX0pO2NvbnN0IENuPVtdLHRuPVtdO2ZvcihsZXQgSm49dGhpcy5fbmFtZXNwYWNlTGlzdC5sZW5ndGgtMTtKbj49MDtKbi0tKXRoaXMuX25hbWVzcGFjZUxpc3RbSm5dLmRyYWluUXVldWVkVHJhbnNpdGlvbnMoYSkuZm9yRWFjaCgkcj0+e2NvbnN0IHdpPSRyLnBsYXllcixlYT0k'@;
put 'ci5lbGVtZW50O2lmKENuLnB1c2god2kpLHRoaXMuY29sbGVjdGVkRW50ZXJFbGVtZW50cy5sZW5ndGgpe2NvbnN0IGFyPWVhW2UzXTtpZihhciYmYXIuc2V0Rm9yTW92ZSl7aWYoYXIucHJldmlvdXNUcmlnZ2Vyc1ZhbHVlcyYmYXIucHJldmlvdXNUcmlnZ2Vyc1ZhbHVlcy5oYXMoJHIudHJp'@;
put 'Z2dlck5hbWUpKXtjb25zdCBIcj1hci5wcmV2aW91c1RyaWdnZXJzVmFsdWVzLmdldCgkci50cmlnZ2VyTmFtZSkscXI9dGhpcy5zdGF0ZXNCeUVsZW1lbnQuZ2V0KCRyLmVsZW1lbnQpO2lmKHFyJiZxci5oYXMoJHIudHJpZ2dlck5hbWUpKXtjb25zdCBvbj1xci5nZXQoJHIudHJpZ2dlck5h'@;
put 'bWUpO29uLnZhbHVlPUhyLHFyLnNldCgkci50cmlnZ2VyTmFtZSxvbil9fXJldHVybiB2b2lkIHdpLmRlc3Ryb3koKX19Y29uc3QgZmE9IWNlfHwhdGhpcy5kcml2ZXIuY29udGFpbnNFbGVtZW50KGNlLGVhKSx2dD1KdC5nZXQoZWEpLE50PUJlLmdldChlYSksSHQ9dGhpcy5fYnVpbGRJbnN0'@;
put 'cnVjdGlvbigkcixkLE50LHZ0LGZhKTtpZihIdC5lcnJvcnMmJkh0LmVycm9ycy5sZW5ndGgpcmV0dXJuIHZvaWQgdG4ucHVzaChIdCk7aWYoZmEpcmV0dXJuIHdpLm9uU3RhcnQoKCk9PkY3KGVhLEh0LmZyb21TdHlsZXMpKSx3aS5vbkRlc3Ryb3koKCk9Pk1wKGVhLEh0LnRvU3R5bGVzKSks'@;
put 'dm9pZCBoLnB1c2god2kpO2lmKCRyLmlzRmFsbGJhY2tUcmFuc2l0aW9uKXJldHVybiB3aS5vblN0YXJ0KCgpPT5GNyhlYSxIdC5mcm9tU3R5bGVzKSksd2kub25EZXN0cm95KCgpPT5NcChlYSxIdC50b1N0eWxlcykpLHZvaWQgaC5wdXNoKHdpKTtjb25zdCBIbj1bXTtIdC50aW1lbGluZXMu'@;
put 'Zm9yRWFjaChhcj0+e2FyLnN0cmV0Y2hTdGFydGluZ0tleWZyYW1lPSEwLHRoaXMuZGlzYWJsZWROb2Rlcy5oYXMoYXIuZWxlbWVudCl8fEhuLnB1c2goYXIpfSksSHQudGltZWxpbmVzPUhuLGQuYXBwZW5kKGVhLEh0LnRpbWVsaW5lcyksdi5wdXNoKHtpbnN0cnVjdGlvbjpIdCxwbGF5ZXI6'@;
put 'd2ksZWxlbWVudDplYX0pLEh0LnF1ZXJpZWRFbGVtZW50cy5mb3JFYWNoKGFyPT5UaChNLGFyLFtdKS5wdXNoKHdpKSksSHQucHJlU3R5bGVQcm9wcy5mb3JFYWNoKChhcixIcik9PntpZihhci5zaXplKXtsZXQgcXI9RC5nZXQoSHIpO3FyfHxELnNldChIcixxcj1uZXcgU2V0KSxhci5mb3JF'@;
put 'YWNoKChvbix5bik9PnFyLmFkZCh5bikpfX0pLEh0LnBvc3RTdHlsZVByb3BzLmZvckVhY2goKGFyLEhyKT0+e2xldCBxcj1aLmdldChIcik7cXJ8fFouc2V0KEhyLHFyPW5ldyBTZXQpLGFyLmZvckVhY2goKG9uLHluKT0+cXIuYWRkKHluKSl9KX0pO2lmKHRuLmxlbmd0aCl7Y29uc3QgSm49'@;
put 'W107dG4uZm9yRWFjaChJcj0+e0puLnB1c2goZnVuY3Rpb24gREdlKGMsbCl7cmV0dXJuIG5ldyBRbigzNTA1LCExKX0oKSl9KSxDbi5mb3JFYWNoKElyPT5Jci5kZXN0cm95KCkpLHRoaXMucmVwb3J0RXJyb3IoSm4pfWNvbnN0IE1uPW5ldyBNYXAsQ3I9bmV3IE1hcDt2LmZvckVhY2goSm49'@;
put 'Pntjb25zdCBJcj1Kbi5lbGVtZW50O2QuaGFzKElyKSYmKENyLnNldChJcixJciksdGhpcy5fYmVmb3JlQW5pbWF0aW9uQnVpbGQoSm4ucGxheWVyLm5hbWVzcGFjZUlkLEpuLmluc3RydWN0aW9uLE1uKSl9KSxoLmZvckVhY2goSm49Pntjb25zdCBJcj1Kbi5lbGVtZW50O3RoaXMuX2dldFBy'@;
put 'ZXZpb3VzUGxheWVycyhJciwhMSxKbi5uYW1lc3BhY2VJZCxKbi50cmlnZ2VyTmFtZSxudWxsKS5mb3JFYWNoKHdpPT57VGgoTW4sSXIsW10pLnB1c2god2kpLHdpLmRlc3Ryb3koKX0pfSk7Y29uc3QgR3I9cnQuZmlsdGVyKEpuPT56aGUoSm4sRCxaKSksbXI9bmV3IE1hcDtWaGUobXIsdGhp'@;
put 'cy5kcml2ZXIsZHQsWixpZykuZm9yRWFjaChKbj0+e3poZShKbixELFopJiZHci5wdXNoKEpuKX0pO2NvbnN0IGFpPW5ldyBNYXA7RWUuZm9yRWFjaCgoSm4sSXIpPT57VmhlKGFpLHRoaXMuZHJpdmVyLG5ldyBTZXQoSm4pLEQsIiEiKX0pLEdyLmZvckVhY2goSm49Pntjb25zdCBJcj1tci5n'@;
put 'ZXQoSm4pLCRyPWFpLmdldChKbik7bXIuc2V0KEpuLG5ldyBNYXAoWy4uLklyPy5lbnRyaWVzKCk/P1tdLC4uLiRyPy5lbnRyaWVzKCk/P1tdXSkpfSk7Y29uc3QgX2k9W10sT249W10senI9e307di5mb3JFYWNoKEpuPT57Y29uc3R7ZWxlbWVudDpJcixwbGF5ZXI6JHIsaW5zdHJ1Y3Rpb246'@;
put 'd2l9PUpuO2lmKGQuaGFzKElyKSl7aWYocmUuaGFzKElyKSlyZXR1cm4gJHIub25EZXN0cm95KCgpPT5NcChJcix3aS50b1N0eWxlcykpLCRyLmRpc2FibGVkPSEwLCRyLm92ZXJyaWRlVG90YWxUaW1lKHdpLnRvdGFsVGltZSksdm9pZCBoLnB1c2goJHIpO2xldCBlYT16cjtpZihDci5zaXpl'@;
put 'PjEpe2xldCB2dD1Jcjtjb25zdCBOdD1bXTtmb3IoO3Z0PXZ0LnBhcmVudE5vZGU7KXtjb25zdCBIdD1Dci5nZXQodnQpO2lmKEh0KXtlYT1IdDticmVha31OdC5wdXNoKHZ0KX1OdC5mb3JFYWNoKEh0PT5Dci5zZXQoSHQsZWEpKX1jb25zdCBmYT10aGlzLl9idWlsZEFuaW1hdGlvbigkci5u'@;
put 'YW1lc3BhY2VJZCx3aSxNbixmLGFpLG1yKTtpZigkci5zZXRSZWFsUGxheWVyKGZhKSxlYT09PXpyKV9pLnB1c2goJHIpO2Vsc2V7Y29uc3QgdnQ9dGhpcy5wbGF5ZXJzQnlFbGVtZW50LmdldChlYSk7dnQmJnZ0Lmxlbmd0aCYmKCRyLnBhcmVudFBsYXllcj1EbSh2dCkpLGgucHVzaCgkcil9'@;
put 'fWVsc2UgRjcoSXIsd2kuZnJvbVN0eWxlcyksJHIub25EZXN0cm95KCgpPT5NcChJcix3aS50b1N0eWxlcykpLE9uLnB1c2goJHIpLHJlLmhhcyhJcikmJmgucHVzaCgkcil9KSxPbi5mb3JFYWNoKEpuPT57Y29uc3QgSXI9Zi5nZXQoSm4uZWxlbWVudCk7aWYoSXImJklyLmxlbmd0aCl7Y29u'@;
put 'c3QgJHI9RG0oSXIpO0puLnNldFJlYWxQbGF5ZXIoJHIpfX0pLGguZm9yRWFjaChKbj0+e0puLnBhcmVudFBsYXllcj9Kbi5zeW5jUGxheWVyRXZlbnRzKEpuLnBhcmVudFBsYXllcik6Sm4uZGVzdHJveSgpfSk7Zm9yKGxldCBKbj0wO0puPHJ0Lmxlbmd0aDtKbisrKXtjb25zdCBJcj1ydFtK'@;
put 'bl0sJHI9SXJbZTNdO2lmKGlfKElyLGdPKSwkciYmJHIuaGFzQW5pbWF0aW9uKWNvbnRpbnVlO2xldCB3aT1bXTtpZihNLnNpemUpe2xldCBmYT1NLmdldChJcik7ZmEmJmZhLmxlbmd0aCYmd2kucHVzaCguLi5mYSk7bGV0IHZ0PXRoaXMuZHJpdmVyLnF1ZXJ5KElyLFBHLCEwKTtmb3IobGV0'@;
put 'IE50PTA7TnQ8dnQubGVuZ3RoO050Kyspe2xldCBIdD1NLmdldCh2dFtOdF0pO0h0JiZIdC5sZW5ndGgmJndpLnB1c2goLi4uSHQpfX1jb25zdCBlYT13aS5maWx0ZXIoZmE9PiFmYS5kZXN0cm95ZWQpO2VhLmxlbmd0aD9BJGUodGhpcyxJcixlYSk6dGhpcy5wcm9jZXNzTGVhdmVOb2RlKEly'@;
put 'KX1yZXR1cm4gcnQubGVuZ3RoPTAsX2kuZm9yRWFjaChKbj0+e3RoaXMucGxheWVycy5wdXNoKEpuKSxKbi5vbkRvbmUoKCk9PntKbi5kZXN0cm95KCk7Y29uc3QgSXI9dGhpcy5wbGF5ZXJzLmluZGV4T2YoSm4pO3RoaXMucGxheWVycy5zcGxpY2UoSXIsMSl9KSxKbi5wbGF5KCl9KSxfaX1h'@;
put 'ZnRlckZsdXNoKGwpe3RoaXMuX2ZsdXNoRm5zLnB1c2gobCl9YWZ0ZXJGbHVzaEFuaW1hdGlvbnNEb25lKGwpe3RoaXMuX3doZW5RdWlldEZucy5wdXNoKGwpfV9nZXRQcmV2aW91c1BsYXllcnMobCxhLGQsaCxmKXtsZXQgdj1bXTtpZihhKXtjb25zdCBNPXRoaXMucGxheWVyc0J5UXVlcmll'@;
put 'ZEVsZW1lbnQuZ2V0KGwpO00mJih2PU0pfWVsc2V7Y29uc3QgTT10aGlzLnBsYXllcnNCeUVsZW1lbnQuZ2V0KGwpO2lmKE0pe2NvbnN0IEQ9IWZ8fGY9PWlFO00uZm9yRWFjaChaPT57Wi5xdWV1ZWR8fCFEJiZaLnRyaWdnZXJOYW1lIT1ofHx2LnB1c2goWil9KX19cmV0dXJuKGR8fGgpJiYo'@;
put 'dj12LmZpbHRlcihNPT4hKGQmJmQhPU0ubmFtZXNwYWNlSWR8fGgmJmghPU0udHJpZ2dlck5hbWUpKSksdn1fYmVmb3JlQW5pbWF0aW9uQnVpbGQobCxhLGQpe2NvbnN0IGY9YS5lbGVtZW50LHY9YS5pc1JlbW92YWxUcmFuc2l0aW9uP3ZvaWQgMDpsLE09YS5pc1JlbW92YWxUcmFuc2l0aW9u'@;
put 'P3ZvaWQgMDphLnRyaWdnZXJOYW1lO2Zvcihjb25zdCBEIG9mIGEudGltZWxpbmVzKXtjb25zdCBaPUQuZWxlbWVudCxyZT1aIT09ZixjZT1UaChkLFosW10pO3RoaXMuX2dldFByZXZpb3VzUGxheWVycyhaLHJlLHYsTSxhLnRvU3RhdGUpLmZvckVhY2goRWU9Pntjb25zdCBCZT1FZS5nZXRS'@;
put 'ZWFsUGxheWVyKCk7QmUuYmVmb3JlRGVzdHJveSYmQmUuYmVmb3JlRGVzdHJveSgpLEVlLmRlc3Ryb3koKSxjZS5wdXNoKEVlKX0pfUY3KGYsYS5mcm9tU3R5bGVzKX1fYnVpbGRBbmltYXRpb24obCxhLGQsaCxmLHYpe2NvbnN0IE09YS50cmlnZ2VyTmFtZSxEPWEuZWxlbWVudCxaPVtdLHJl'@;
put 'PW5ldyBTZXQsY2U9bmV3IFNldCxiZT1hLnRpbWVsaW5lcy5tYXAoQmU9Pntjb25zdCBxZT1CZS5lbGVtZW50O3JlLmFkZChxZSk7Y29uc3QgcnQ9cWVbZTNdO2lmKHJ0JiZydC5yZW1vdmVkQmVmb3JlUXVlcmllZClyZXR1cm4gbmV3IHd4KEJlLmR1cmF0aW9uLEJlLmRlbGF5KTtjb25zdCBw'@;
put 'dD1xZSE9PUQsZHQ9ZnVuY3Rpb24gayRlKGMpe2NvbnN0IGw9W107cmV0dXJuIGpoZShjLGwpLGx9KChkLmdldChxZSl8fHckZSkubWFwKE1uPT5Nbi5nZXRSZWFsUGxheWVyKCkpKS5maWx0ZXIoTW49PiEhTW4uZWxlbWVudCYmTW4uZWxlbWVudD09PXFlKSxKdD1mLmdldChxZSksdm49di5n'@;
put 'ZXQocWUpLENuPWJoZSh0aGlzLl9ub3JtYWxpemVyLEJlLmtleWZyYW1lcyxKdCx2biksdG49dGhpcy5fYnVpbGRQbGF5ZXIoQmUsQ24sZHQpO2lmKEJlLnN1YlRpbWVsaW5lJiZoJiZjZS5hZGQocWUpLHB0KXtjb25zdCBNbj1uZXcgS0cobCxNLHFlKTtNbi5zZXRSZWFsUGxheWVyKHRuKSxa'@;
put 'LnB1c2goTW4pfXJldHVybiB0bn0pO1ouZm9yRWFjaChCZT0+e1RoKHRoaXMucGxheWVyc0J5UXVlcmllZEVsZW1lbnQsQmUuZWxlbWVudCxbXSkucHVzaChCZSksQmUub25Eb25lKCgpPT5mdW5jdGlvbiB4JGUoYyxsLGEpe2xldCBkPWMuZ2V0KGwpO2lmKGQpe2lmKGQubGVuZ3RoKXtjb25z'@;
put 'dCBoPWQuaW5kZXhPZihhKTtkLnNwbGljZShoLDEpfTA9PWQubGVuZ3RoJiZjLmRlbGV0ZShsKX1yZXR1cm4gZH0odGhpcy5wbGF5ZXJzQnlRdWVyaWVkRWxlbWVudCxCZS5lbGVtZW50LEJlKSl9KSxyZS5mb3JFYWNoKEJlPT5GMihCZSxNaGUpKTtjb25zdCBFZT1EbShiZSk7cmV0dXJuIEVl'@;
put 'Lm9uRGVzdHJveSgoKT0+e3JlLmZvckVhY2goQmU9PmlfKEJlLE1oZSkpLE1wKEQsYS50b1N0eWxlcyl9KSxjZS5mb3JFYWNoKEJlPT57VGgoaCxCZSxbXSkucHVzaChFZSl9KSxFZX1fYnVpbGRQbGF5ZXIobCxhLGQpe3JldHVybiBhLmxlbmd0aD4wP3RoaXMuZHJpdmVyLmFuaW1hdGUobC5l'@;
put 'bGVtZW50LGEsbC5kdXJhdGlvbixsLmRlbGF5LGwuZWFzaW5nLGQpOm5ldyB3eChsLmR1cmF0aW9uLGwuZGVsYXkpfX1jbGFzcyBLR3tjb25zdHJ1Y3RvcihsLGEsZCl7dGhpcy5uYW1lc3BhY2VJZD1sLHRoaXMudHJpZ2dlck5hbWU9YSx0aGlzLmVsZW1lbnQ9ZCx0aGlzLl9wbGF5ZXI9bmV3'@;
put 'IHd4LHRoaXMuX2NvbnRhaW5zUmVhbFBsYXllcj0hMSx0aGlzLl9xdWV1ZWRDYWxsYmFja3M9bmV3IE1hcCx0aGlzLmRlc3Ryb3llZD0hMSx0aGlzLnBhcmVudFBsYXllcj1udWxsLHRoaXMubWFya2VkRm9yRGVzdHJveT0hMSx0aGlzLmRpc2FibGVkPSExLHRoaXMucXVldWVkPSEwLHRoaXMu'@;
put 'dG90YWxUaW1lPTB9c2V0UmVhbFBsYXllcihsKXt0aGlzLl9jb250YWluc1JlYWxQbGF5ZXJ8fCh0aGlzLl9wbGF5ZXI9bCx0aGlzLl9xdWV1ZWRDYWxsYmFja3MuZm9yRWFjaCgoYSxkKT0+e2EuZm9yRWFjaChoPT5URyhsLGQsdm9pZCAwLGgpKX0pLHRoaXMuX3F1ZXVlZENhbGxiYWNrcy5j'@;
put 'bGVhcigpLHRoaXMuX2NvbnRhaW5zUmVhbFBsYXllcj0hMCx0aGlzLm92ZXJyaWRlVG90YWxUaW1lKGwudG90YWxUaW1lKSx0aGlzLnF1ZXVlZD0hMSl9Z2V0UmVhbFBsYXllcigpe3JldHVybiB0aGlzLl9wbGF5ZXJ9b3ZlcnJpZGVUb3RhbFRpbWUobCl7dGhpcy50b3RhbFRpbWU9bH1zeW5j'@;
put 'UGxheWVyRXZlbnRzKGwpe2NvbnN0IGE9dGhpcy5fcGxheWVyO2EudHJpZ2dlckNhbGxiYWNrJiZsLm9uU3RhcnQoKCk9PmEudHJpZ2dlckNhbGxiYWNrKCJzdGFydCIpKSxsLm9uRG9uZSgoKT0+dGhpcy5maW5pc2goKSksbC5vbkRlc3Ryb3koKCk9PnRoaXMuZGVzdHJveSgpKX1fcXVldWVF'@;
put 'dmVudChsLGEpe1RoKHRoaXMuX3F1ZXVlZENhbGxiYWNrcyxsLFtdKS5wdXNoKGEpfW9uRG9uZShsKXt0aGlzLnF1ZXVlZCYmdGhpcy5fcXVldWVFdmVudCgiZG9uZSIsbCksdGhpcy5fcGxheWVyLm9uRG9uZShsKX1vblN0YXJ0KGwpe3RoaXMucXVldWVkJiZ0aGlzLl9xdWV1ZUV2ZW50KCJz'@;
put 'dGFydCIsbCksdGhpcy5fcGxheWVyLm9uU3RhcnQobCl9b25EZXN0cm95KGwpe3RoaXMucXVldWVkJiZ0aGlzLl9xdWV1ZUV2ZW50KCJkZXN0cm95IixsKSx0aGlzLl9wbGF5ZXIub25EZXN0cm95KGwpfWluaXQoKXt0aGlzLl9wbGF5ZXIuaW5pdCgpfWhhc1N0YXJ0ZWQoKXtyZXR1cm4hdGhp'@;
put 'cy5xdWV1ZWQmJnRoaXMuX3BsYXllci5oYXNTdGFydGVkKCl9cGxheSgpeyF0aGlzLnF1ZXVlZCYmdGhpcy5fcGxheWVyLnBsYXkoKX1wYXVzZSgpeyF0aGlzLnF1ZXVlZCYmdGhpcy5fcGxheWVyLnBhdXNlKCl9cmVzdGFydCgpeyF0aGlzLnF1ZXVlZCYmdGhpcy5fcGxheWVyLnJlc3RhcnQo'@;
put 'KX1maW5pc2goKXt0aGlzLl9wbGF5ZXIuZmluaXNoKCl9ZGVzdHJveSgpe3RoaXMuZGVzdHJveWVkPSEwLHRoaXMuX3BsYXllci5kZXN0cm95KCl9cmVzZXQoKXshdGhpcy5xdWV1ZWQmJnRoaXMuX3BsYXllci5yZXNldCgpfXNldFBvc2l0aW9uKGwpe3RoaXMucXVldWVkfHx0aGlzLl9wbGF5'@;
put 'ZXIuc2V0UG9zaXRpb24obCl9Z2V0UG9zaXRpb24oKXtyZXR1cm4gdGhpcy5xdWV1ZWQ/MDp0aGlzLl9wbGF5ZXIuZ2V0UG9zaXRpb24oKX10cmlnZ2VyQ2FsbGJhY2sobCl7Y29uc3QgYT10aGlzLl9wbGF5ZXI7YS50cmlnZ2VyQ2FsbGJhY2smJmEudHJpZ2dlckNhbGxiYWNrKGwpfX1mdW5j'@;
put 'dGlvbiB4TyhjKXtyZXR1cm4gYyYmMT09PWMubm9kZVR5cGV9ZnVuY3Rpb24gTmhlKGMsbCl7Y29uc3QgYT1jLnN0eWxlLmRpc3BsYXk7cmV0dXJuIGMuc3R5bGUuZGlzcGxheT1sPz8ibm9uZSIsYX1mdW5jdGlvbiBWaGUoYyxsLGEsZCxoKXtjb25zdCBmPVtdO2EuZm9yRWFjaChEPT5mLnB1'@;
put 'c2goTmhlKEQpKSk7Y29uc3Qgdj1bXTtkLmZvckVhY2goKEQsWik9Pntjb25zdCByZT1uZXcgTWFwO0QuZm9yRWFjaChjZT0+e2NvbnN0IGJlPWwuY29tcHV0ZVN0eWxlKFosY2UsaCk7cmUuc2V0KGNlLGJlKSwoIWJlfHwwPT1iZS5sZW5ndGgpJiYoWltlM109QyRlLHYucHVzaChaKSl9KSxj'@;
put 'LnNldChaLHJlKX0pO2xldCBNPTA7cmV0dXJuIGEuZm9yRWFjaChEPT5OaGUoRCxmW00rK10pKSx2fWZ1bmN0aW9uIEJoZShjLGwpe2NvbnN0IGE9bmV3IE1hcDtpZihjLmZvckVhY2goTT0+YS5zZXQoTSxbXSkpLDA9PWwubGVuZ3RoKXJldHVybiBhO2NvbnN0IGg9bmV3IFNldChsKSxmPW5l'@;
put 'dyBNYXA7ZnVuY3Rpb24gdihNKXtpZighTSlyZXR1cm4gMTtsZXQgRD1mLmdldChNKTtpZihEKXJldHVybiBEO2NvbnN0IFo9TS5wYXJlbnROb2RlO3JldHVybiBEPWEuaGFzKFopP1o6aC5oYXMoWik/MTp2KFopLGYuc2V0KE0sRCksRH1yZXR1cm4gbC5mb3JFYWNoKE09Pntjb25zdCBEPXYo'@;
put 'TSk7MSE9PUQmJmEuZ2V0KEQpLnB1c2goTSl9KSxhfWZ1bmN0aW9uIEYyKGMsbCl7Yy5jbGFzc0xpc3Q/LmFkZChsKX1mdW5jdGlvbiBpXyhjLGwpe2MuY2xhc3NMaXN0Py5yZW1vdmUobCl9ZnVuY3Rpb24gQSRlKGMsbCxhKXtEbShhKS5vbkRvbmUoKCk9PmMucHJvY2Vzc0xlYXZlTm9kZShs'@;
put 'KSl9ZnVuY3Rpb24gamhlKGMsbCl7Zm9yKGxldCBhPTA7YTxjLmxlbmd0aDthKyspe2NvbnN0IGQ9Y1thXTtkIGluc3RhbmNlb2YgUjBlP2poZShkLnBsYXllcnMsbCk6bC5wdXNoKGQpfX1mdW5jdGlvbiB6aGUoYyxsLGEpe2NvbnN0IGQ9YS5nZXQoYyk7aWYoIWQpcmV0dXJuITE7bGV0IGg9'@;
put 'bC5nZXQoYyk7cmV0dXJuIGg/ZC5mb3JFYWNoKGY9PmguYWRkKGYpKTpsLnNldChjLGQpLGEuZGVsZXRlKGMpLCEwfWNsYXNzIGFFe2NvbnN0cnVjdG9yKGwsYSxkLGgpe3RoaXMuX2RyaXZlcj1hLHRoaXMuX25vcm1hbGl6ZXI9ZCx0aGlzLl90cmlnZ2VyQ2FjaGU9e30sdGhpcy5vblJlbW92'@;
put 'YWxDb21wbGV0ZT0oZix2KT0+e30sdGhpcy5fdHJhbnNpdGlvbkVuZ2luZT1uZXcgTSRlKGwuYm9keSxhLGQsaCksdGhpcy5fdGltZWxpbmVFbmdpbmU9bmV3IG0kZShsLmJvZHksYSxkKSx0aGlzLl90cmFuc2l0aW9uRW5naW5lLm9uUmVtb3ZhbENvbXBsZXRlPShmLHYpPT50aGlzLm9uUmVt'@;
put 'b3ZhbENvbXBsZXRlKGYsdil9cmVnaXN0ZXJUcmlnZ2VyKGwsYSxkLGgsZil7Y29uc3Qgdj1sKyItIitoO2xldCBNPXRoaXMuX3RyaWdnZXJDYWNoZVt2XTtpZighTSl7Y29uc3QgRD1bXSxyZT1CRyh0aGlzLl9kcml2ZXIsZixELFtdKTtpZihELmxlbmd0aCl0aHJvdyBmdW5jdGlvbiB5R2Uo'@;
put 'YyxsKXtyZXR1cm4gbmV3IFFuKDM0MDQsITEpfSgpO009ZnVuY3Rpb24gaCRlKGMsbCxhKXtyZXR1cm4gbmV3IGYkZShjLGwsYSl9KGgscmUsdGhpcy5fbm9ybWFsaXplciksdGhpcy5fdHJpZ2dlckNhY2hlW3ZdPU19dGhpcy5fdHJhbnNpdGlvbkVuZ2luZS5yZWdpc3RlclRyaWdnZXIoYSxo'@;
put 'LE0pfXJlZ2lzdGVyKGwsYSl7dGhpcy5fdHJhbnNpdGlvbkVuZ2luZS5yZWdpc3RlcihsLGEpfWRlc3Ryb3kobCxhKXt0aGlzLl90cmFuc2l0aW9uRW5naW5lLmRlc3Ryb3kobCxhKX1vbkluc2VydChsLGEsZCxoKXt0aGlzLl90cmFuc2l0aW9uRW5naW5lLmluc2VydE5vZGUobCxhLGQsaCl9'@;
put 'b25SZW1vdmUobCxhLGQpe3RoaXMuX3RyYW5zaXRpb25FbmdpbmUucmVtb3ZlTm9kZShsLGEsZCl9ZGlzYWJsZUFuaW1hdGlvbnMobCxhKXt0aGlzLl90cmFuc2l0aW9uRW5naW5lLm1hcmtFbGVtZW50QXNEaXNhYmxlZChsLGEpfXByb2Nlc3MobCxhLGQsaCl7aWYoIkAiPT1kLmNoYXJBdCgw'@;
put 'KSl7Y29uc3RbZix2XT15aGUoZCk7dGhpcy5fdGltZWxpbmVFbmdpbmUuY29tbWFuZChmLGEsdixoKX1lbHNlIHRoaXMuX3RyYW5zaXRpb25FbmdpbmUudHJpZ2dlcihsLGEsZCxoKX1saXN0ZW4obCxhLGQsaCxmKXtpZigiQCI9PWQuY2hhckF0KDApKXtjb25zdFt2LE1dPXloZShkKTtyZXR1'@;
put 'cm4gdGhpcy5fdGltZWxpbmVFbmdpbmUubGlzdGVuKHYsYSxNLGYpfXJldHVybiB0aGlzLl90cmFuc2l0aW9uRW5naW5lLmxpc3RlbihsLGEsZCxoLGYpfWZsdXNoKGw9LTEpe3RoaXMuX3RyYW5zaXRpb25FbmdpbmUuZmx1c2gobCl9Z2V0IHBsYXllcnMoKXtyZXR1cm5bLi4udGhpcy5fdHJh'@;
put 'bnNpdGlvbkVuZ2luZS5wbGF5ZXJzLC4uLnRoaXMuX3RpbWVsaW5lRW5naW5lLnBsYXllcnNdfXdoZW5SZW5kZXJpbmdEb25lKCl7cmV0dXJuIHRoaXMuX3RyYW5zaXRpb25FbmdpbmUud2hlblJlbmRlcmluZ0RvbmUoKX1hZnRlckZsdXNoQW5pbWF0aW9uc0RvbmUobCl7dGhpcy5fdHJhbnNp'@;
put 'dGlvbkVuZ2luZS5hZnRlckZsdXNoQW5pbWF0aW9uc0RvbmUobCl9fWNsYXNzIG9Fe3N0YXRpY3t0aGlzLmluaXRpYWxTdHlsZXNCeUVsZW1lbnQ9bmV3IFdlYWtNYXB9Y29uc3RydWN0b3IobCxhLGQpe3RoaXMuX2VsZW1lbnQ9bCx0aGlzLl9zdGFydFN0eWxlcz1hLHRoaXMuX2VuZFN0eWxl'@;
put 'cz1kLHRoaXMuX3N0YXRlPTA7bGV0IGg9b0UuaW5pdGlhbFN0eWxlc0J5RWxlbWVudC5nZXQobCk7aHx8b0UuaW5pdGlhbFN0eWxlc0J5RWxlbWVudC5zZXQobCxoPW5ldyBNYXApLHRoaXMuX2luaXRpYWxTdHlsZXM9aH1zdGFydCgpe3RoaXMuX3N0YXRlPDEmJih0aGlzLl9zdGFydFN0eWxl'@;
put 'cyYmTXAodGhpcy5fZWxlbWVudCx0aGlzLl9zdGFydFN0eWxlcyx0aGlzLl9pbml0aWFsU3R5bGVzKSx0aGlzLl9zdGF0ZT0xKX1maW5pc2goKXt0aGlzLnN0YXJ0KCksdGhpcy5fc3RhdGU8MiYmKE1wKHRoaXMuX2VsZW1lbnQsdGhpcy5faW5pdGlhbFN0eWxlcyksdGhpcy5fZW5kU3R5bGVz'@;
put 'JiYoTXAodGhpcy5fZWxlbWVudCx0aGlzLl9lbmRTdHlsZXMpLHRoaXMuX2VuZFN0eWxlcz1udWxsKSx0aGlzLl9zdGF0ZT0xKX1kZXN0cm95KCl7dGhpcy5maW5pc2goKSx0aGlzLl9zdGF0ZTwzJiYob0UuaW5pdGlhbFN0eWxlc0J5RWxlbWVudC5kZWxldGUodGhpcy5fZWxlbWVudCksdGhp'@;
put 'cy5fc3RhcnRTdHlsZXMmJihGNyh0aGlzLl9lbGVtZW50LHRoaXMuX3N0YXJ0U3R5bGVzKSx0aGlzLl9lbmRTdHlsZXM9bnVsbCksdGhpcy5fZW5kU3R5bGVzJiYoRjcodGhpcy5fZWxlbWVudCx0aGlzLl9lbmRTdHlsZXMpLHRoaXMuX2VuZFN0eWxlcz1udWxsKSxNcCh0aGlzLl9lbGVtZW50'@;
put 'LHRoaXMuX2luaXRpYWxTdHlsZXMpLHRoaXMuX3N0YXRlPTMpfX1mdW5jdGlvbiBxRyhjKXtsZXQgbD1udWxsO3JldHVybiBjLmZvckVhY2goKGEsZCk9PnsoZnVuY3Rpb24gUiRlKGMpe3JldHVybiJkaXNwbGF5Ij09PWN8fCJwb3NpdGlvbiI9PT1jfSkoZCkmJihsPWx8fG5ldyBNYXAsbC5z'@;
put 'ZXQoZCxhKSl9KSxsfWNsYXNzIFVoZXtjb25zdHJ1Y3RvcihsLGEsZCxoKXt0aGlzLmVsZW1lbnQ9bCx0aGlzLmtleWZyYW1lcz1hLHRoaXMub3B0aW9ucz1kLHRoaXMuX3NwZWNpYWxTdHlsZXM9aCx0aGlzLl9vbkRvbmVGbnM9W10sdGhpcy5fb25TdGFydEZucz1bXSx0aGlzLl9vbkRlc3Ry'@;
put 'b3lGbnM9W10sdGhpcy5faW5pdGlhbGl6ZWQ9ITEsdGhpcy5fZmluaXNoZWQ9ITEsdGhpcy5fc3RhcnRlZD0hMSx0aGlzLl9kZXN0cm95ZWQ9ITEsdGhpcy5fb3JpZ2luYWxPbkRvbmVGbnM9W10sdGhpcy5fb3JpZ2luYWxPblN0YXJ0Rm5zPVtdLHRoaXMudGltZT0wLHRoaXMucGFyZW50UGxh'@;
put 'eWVyPW51bGwsdGhpcy5jdXJyZW50U25hcHNob3Q9bmV3IE1hcCx0aGlzLl9kdXJhdGlvbj1kLmR1cmF0aW9uLHRoaXMuX2RlbGF5PWQuZGVsYXl8fDAsdGhpcy50aW1lPXRoaXMuX2R1cmF0aW9uK3RoaXMuX2RlbGF5fV9vbkZpbmlzaCgpe3RoaXMuX2ZpbmlzaGVkfHwodGhpcy5fZmluaXNo'@;
put 'ZWQ9ITAsdGhpcy5fb25Eb25lRm5zLmZvckVhY2gobD0+bCgpKSx0aGlzLl9vbkRvbmVGbnM9W10pfWluaXQoKXt0aGlzLl9idWlsZFBsYXllcigpLHRoaXMuX3ByZXBhcmVQbGF5ZXJCZWZvcmVTdGFydCgpfV9idWlsZFBsYXllcigpe2lmKHRoaXMuX2luaXRpYWxpemVkKXJldHVybjt0aGlz'@;
put 'Ll9pbml0aWFsaXplZD0hMDtjb25zdCBsPXRoaXMua2V5ZnJhbWVzO3RoaXMuZG9tUGxheWVyPXRoaXMuX3RyaWdnZXJXZWJBbmltYXRpb24odGhpcy5lbGVtZW50LGwsdGhpcy5vcHRpb25zKSx0aGlzLl9maW5hbEtleWZyYW1lPWwubGVuZ3RoP2xbbC5sZW5ndGgtMV06bmV3IE1hcDtjb25z'@;
put 'dCBhPSgpPT50aGlzLl9vbkZpbmlzaCgpO3RoaXMuZG9tUGxheWVyLmFkZEV2ZW50TGlzdGVuZXIoImZpbmlzaCIsYSksdGhpcy5vbkRlc3Ryb3koKCk9Pnt0aGlzLmRvbVBsYXllci5yZW1vdmVFdmVudExpc3RlbmVyKCJmaW5pc2giLGEpfSl9X3ByZXBhcmVQbGF5ZXJCZWZvcmVTdGFydCgp'@;
put 'e3RoaXMuX2RlbGF5P3RoaXMuX3Jlc2V0RG9tUGxheWVyU3RhdGUoKTp0aGlzLmRvbVBsYXllci5wYXVzZSgpfV9jb252ZXJ0S2V5ZnJhbWVzVG9PYmplY3QobCl7Y29uc3QgYT1bXTtyZXR1cm4gbC5mb3JFYWNoKGQ9PnthLnB1c2goT2JqZWN0LmZyb21FbnRyaWVzKGQpKX0pLGF9X3RyaWdn'@;
put 'ZXJXZWJBbmltYXRpb24obCxhLGQpe3JldHVybiBsLmFuaW1hdGUodGhpcy5fY29udmVydEtleWZyYW1lc1RvT2JqZWN0KGEpLGQpfW9uU3RhcnQobCl7dGhpcy5fb3JpZ2luYWxPblN0YXJ0Rm5zLnB1c2gobCksdGhpcy5fb25TdGFydEZucy5wdXNoKGwpfW9uRG9uZShsKXt0aGlzLl9vcmln'@;
put 'aW5hbE9uRG9uZUZucy5wdXNoKGwpLHRoaXMuX29uRG9uZUZucy5wdXNoKGwpfW9uRGVzdHJveShsKXt0aGlzLl9vbkRlc3Ryb3lGbnMucHVzaChsKX1wbGF5KCl7dGhpcy5fYnVpbGRQbGF5ZXIoKSx0aGlzLmhhc1N0YXJ0ZWQoKXx8KHRoaXMuX29uU3RhcnRGbnMuZm9yRWFjaChsPT5sKCkp'@;
put 'LHRoaXMuX29uU3RhcnRGbnM9W10sdGhpcy5fc3RhcnRlZD0hMCx0aGlzLl9zcGVjaWFsU3R5bGVzJiZ0aGlzLl9zcGVjaWFsU3R5bGVzLnN0YXJ0KCkpLHRoaXMuZG9tUGxheWVyLnBsYXkoKX1wYXVzZSgpe3RoaXMuaW5pdCgpLHRoaXMuZG9tUGxheWVyLnBhdXNlKCl9ZmluaXNoKCl7dGhp'@;
put 'cy5pbml0KCksdGhpcy5fc3BlY2lhbFN0eWxlcyYmdGhpcy5fc3BlY2lhbFN0eWxlcy5maW5pc2goKSx0aGlzLl9vbkZpbmlzaCgpLHRoaXMuZG9tUGxheWVyLmZpbmlzaCgpfXJlc2V0KCl7dGhpcy5fcmVzZXREb21QbGF5ZXJTdGF0ZSgpLHRoaXMuX2Rlc3Ryb3llZD0hMSx0aGlzLl9maW5p'@;
put 'c2hlZD0hMSx0aGlzLl9zdGFydGVkPSExLHRoaXMuX29uU3RhcnRGbnM9dGhpcy5fb3JpZ2luYWxPblN0YXJ0Rm5zLHRoaXMuX29uRG9uZUZucz10aGlzLl9vcmlnaW5hbE9uRG9uZUZuc31fcmVzZXREb21QbGF5ZXJTdGF0ZSgpe3RoaXMuZG9tUGxheWVyJiZ0aGlzLmRvbVBsYXllci5jYW5j'@;
put 'ZWwoKX1yZXN0YXJ0KCl7dGhpcy5yZXNldCgpLHRoaXMucGxheSgpfWhhc1N0YXJ0ZWQoKXtyZXR1cm4gdGhpcy5fc3RhcnRlZH1kZXN0cm95KCl7dGhpcy5fZGVzdHJveWVkfHwodGhpcy5fZGVzdHJveWVkPSEwLHRoaXMuX3Jlc2V0RG9tUGxheWVyU3RhdGUoKSx0aGlzLl9vbkZpbmlzaCgp'@;
put 'LHRoaXMuX3NwZWNpYWxTdHlsZXMmJnRoaXMuX3NwZWNpYWxTdHlsZXMuZGVzdHJveSgpLHRoaXMuX29uRGVzdHJveUZucy5mb3JFYWNoKGw9PmwoKSksdGhpcy5fb25EZXN0cm95Rm5zPVtdKX1zZXRQb3NpdGlvbihsKXt2b2lkIDA9PT10aGlzLmRvbVBsYXllciYmdGhpcy5pbml0KCksdGhp'@;
put 'cy5kb21QbGF5ZXIuY3VycmVudFRpbWU9bCp0aGlzLnRpbWV9Z2V0UG9zaXRpb24oKXtyZXR1cm4rKHRoaXMuZG9tUGxheWVyLmN1cnJlbnRUaW1lPz8wKS90aGlzLnRpbWV9Z2V0IHRvdGFsVGltZSgpe3JldHVybiB0aGlzLl9kZWxheSt0aGlzLl9kdXJhdGlvbn1iZWZvcmVEZXN0cm95KCl7'@;
put 'Y29uc3QgbD1uZXcgTWFwO3RoaXMuaGFzU3RhcnRlZCgpJiZ0aGlzLl9maW5hbEtleWZyYW1lLmZvckVhY2goKGQsaCk9Pnsib2Zmc2V0IiE9PWgmJmwuc2V0KGgsdGhpcy5fZmluaXNoZWQ/ZDpWRyh0aGlzLmVsZW1lbnQsaCkpfSksdGhpcy5jdXJyZW50U25hcHNob3Q9bH10cmlnZ2VyQ2Fs'@;
put 'bGJhY2sobCl7Y29uc3QgYT0ic3RhcnQiPT09bD90aGlzLl9vblN0YXJ0Rm5zOnRoaXMuX29uRG9uZUZuczthLmZvckVhY2goZD0+ZCgpKSxhLmxlbmd0aD0wfX1jbGFzcyBaaGV7dmFsaWRhdGVTdHlsZVByb3BlcnR5KGwpe3JldHVybiEwfXZhbGlkYXRlQW5pbWF0YWJsZVN0eWxlUHJvcGVy'@;
put 'dHkobCl7cmV0dXJuITB9bWF0Y2hlc0VsZW1lbnQobCxhKXtyZXR1cm4hMX1jb250YWluc0VsZW1lbnQobCxhKXtyZXR1cm4gd2hlKGwsYSl9Z2V0UGFyZW50RWxlbWVudChsKXtyZXR1cm4gREcobCl9cXVlcnkobCxhLGQpe3JldHVybiBDaGUobCxhLGQpfWNvbXB1dGVTdHlsZShsLGEsZCl7'@;
put 'cmV0dXJuIFZHKGwsYSl9YW5pbWF0ZShsLGEsZCxoLGYsdj1bXSl7Y29uc3QgRD17ZHVyYXRpb246ZCxkZWxheTpoLGZpbGw6MD09aD8iYm90aCI6ImZvcndhcmRzIn07ZiYmKEQuZWFzaW5nPWYpO2NvbnN0IFo9bmV3IE1hcCxyZT12LmZpbHRlcihFZT0+RWUgaW5zdGFuY2VvZiBVaGUpOyhm'@;
put 'dW5jdGlvbiBVR2UoYyxsKXtyZXR1cm4gMD09PWN8fDA9PT1sfSkoZCxoKSYmcmUuZm9yRWFjaChFZT0+e0VlLmN1cnJlbnRTbmFwc2hvdC5mb3JFYWNoKChCZSxxZSk9Plouc2V0KHFlLEJlKSl9KTtsZXQgY2U9ZnVuY3Rpb24gQkdlKGMpe3JldHVybiBjLmxlbmd0aD9jWzBdaW5zdGFuY2Vv'@;
put 'ZiBNYXA/YzpjLm1hcChsPT5uZXcgTWFwKE9iamVjdC5lbnRyaWVzKGwpKSk6W119KGEpLm1hcChFZT0+bmV3IE1hcChFZSkpO2NlPWZ1bmN0aW9uIFpHZShjLGwsYSl7aWYoYS5zaXplJiZsLmxlbmd0aCl7bGV0IGQ9bFswXSxoPVtdO2lmKGEuZm9yRWFjaCgoZix2KT0+e2QuaGFzKHYpfHxo'@;
put 'LnB1c2godiksZC5zZXQodixmKX0pLGgubGVuZ3RoKWZvcihsZXQgZj0xO2Y8bC5sZW5ndGg7ZisrKXtsZXQgdj1sW2ZdO2guZm9yRWFjaChNPT52LnNldChNLFZHKGMsTSkpKX19cmV0dXJuIGx9KGwsY2UsWik7Y29uc3QgYmU9ZnVuY3Rpb24gSSRlKGMsbCl7bGV0IGE9bnVsbCxkPW51bGw7'@;
put 'cmV0dXJuIEFycmF5LmlzQXJyYXkobCkmJmwubGVuZ3RoPyhhPXFHKGxbMF0pLGwubGVuZ3RoPjEmJihkPXFHKGxbbC5sZW5ndGgtMV0pKSk6bCBpbnN0YW5jZW9mIE1hcCYmKGE9cUcobCkpLGF8fGQ/bmV3IG9FKGMsYSxkKTpudWxsfShsLGNlKTtyZXR1cm4gbmV3IFVoZShsLGNlLEQsYmUp'@;
put 'fX1jb25zdCBXaGU9IkAuZGlzYWJsZWQiO2NsYXNzIFloZXtjb25zdHJ1Y3RvcihsLGEsZCxoKXt0aGlzLm5hbWVzcGFjZUlkPWwsdGhpcy5kZWxlZ2F0ZT1hLHRoaXMuZW5naW5lPWQsdGhpcy5fb25EZXN0cm95PWgsdGhpcy5cdTAyNzV0eXBlPTB9Z2V0IGRhdGEoKXtyZXR1cm4gdGhpcy5k'@;
put 'ZWxlZ2F0ZS5kYXRhfWRlc3Ryb3lOb2RlKGwpe3RoaXMuZGVsZWdhdGUuZGVzdHJveU5vZGU/LihsKX1kZXN0cm95KCl7dGhpcy5lbmdpbmUuZGVzdHJveSh0aGlzLm5hbWVzcGFjZUlkLHRoaXMuZGVsZWdhdGUpLHRoaXMuZW5naW5lLmFmdGVyRmx1c2hBbmltYXRpb25zRG9uZSgoKT0+e3F1'@;
put 'ZXVlTWljcm90YXNrKCgpPT57dGhpcy5kZWxlZ2F0ZS5kZXN0cm95KCl9KX0pLHRoaXMuX29uRGVzdHJveT8uKCl9Y3JlYXRlRWxlbWVudChsLGEpe3JldHVybiB0aGlzLmRlbGVnYXRlLmNyZWF0ZUVsZW1lbnQobCxhKX1jcmVhdGVDb21tZW50KGwpe3JldHVybiB0aGlzLmRlbGVnYXRlLmNy'@;
put 'ZWF0ZUNvbW1lbnQobCl9Y3JlYXRlVGV4dChsKXtyZXR1cm4gdGhpcy5kZWxlZ2F0ZS5jcmVhdGVUZXh0KGwpfWFwcGVuZENoaWxkKGwsYSl7dGhpcy5kZWxlZ2F0ZS5hcHBlbmRDaGlsZChsLGEpLHRoaXMuZW5naW5lLm9uSW5zZXJ0KHRoaXMubmFtZXNwYWNlSWQsYSxsLCExKX1pbnNlcnRC'@;
put 'ZWZvcmUobCxhLGQsaD0hMCl7dGhpcy5kZWxlZ2F0ZS5pbnNlcnRCZWZvcmUobCxhLGQpLHRoaXMuZW5naW5lLm9uSW5zZXJ0KHRoaXMubmFtZXNwYWNlSWQsYSxsLGgpfXJlbW92ZUNoaWxkKGwsYSxkKXt0aGlzLmVuZ2luZS5vblJlbW92ZSh0aGlzLm5hbWVzcGFjZUlkLGEsdGhpcy5kZWxl'@;
put 'Z2F0ZSl9c2VsZWN0Um9vdEVsZW1lbnQobCxhKXtyZXR1cm4gdGhpcy5kZWxlZ2F0ZS5zZWxlY3RSb290RWxlbWVudChsLGEpfXBhcmVudE5vZGUobCl7cmV0dXJuIHRoaXMuZGVsZWdhdGUucGFyZW50Tm9kZShsKX1uZXh0U2libGluZyhsKXtyZXR1cm4gdGhpcy5kZWxlZ2F0ZS5uZXh0U2li'@;
put 'bGluZyhsKX1zZXRBdHRyaWJ1dGUobCxhLGQsaCl7dGhpcy5kZWxlZ2F0ZS5zZXRBdHRyaWJ1dGUobCxhLGQsaCl9cmVtb3ZlQXR0cmlidXRlKGwsYSxkKXt0aGlzLmRlbGVnYXRlLnJlbW92ZUF0dHJpYnV0ZShsLGEsZCl9YWRkQ2xhc3MobCxhKXt0aGlzLmRlbGVnYXRlLmFkZENsYXNzKGws'@;
put 'YSl9cmVtb3ZlQ2xhc3MobCxhKXt0aGlzLmRlbGVnYXRlLnJlbW92ZUNsYXNzKGwsYSl9c2V0U3R5bGUobCxhLGQsaCl7dGhpcy5kZWxlZ2F0ZS5zZXRTdHlsZShsLGEsZCxoKX1yZW1vdmVTdHlsZShsLGEsZCl7dGhpcy5kZWxlZ2F0ZS5yZW1vdmVTdHlsZShsLGEsZCl9c2V0UHJvcGVydHko'@;
put 'bCxhLGQpeyJAIj09YS5jaGFyQXQoMCkmJmE9PVdoZT90aGlzLmRpc2FibGVBbmltYXRpb25zKGwsISFkKTp0aGlzLmRlbGVnYXRlLnNldFByb3BlcnR5KGwsYSxkKX1zZXRWYWx1ZShsLGEpe3RoaXMuZGVsZWdhdGUuc2V0VmFsdWUobCxhKX1saXN0ZW4obCxhLGQpe3JldHVybiB0aGlzLmRl'@;
put 'bGVnYXRlLmxpc3RlbihsLGEsZCl9ZGlzYWJsZUFuaW1hdGlvbnMobCxhKXt0aGlzLmVuZ2luZS5kaXNhYmxlQW5pbWF0aW9ucyhsLGEpfX1jbGFzcyBMJGUgZXh0ZW5kcyBZaGV7Y29uc3RydWN0b3IobCxhLGQsaCxmKXtzdXBlcihhLGQsaCxmKSx0aGlzLmZhY3Rvcnk9bCx0aGlzLm5hbWVz'@;
put 'cGFjZUlkPWF9c2V0UHJvcGVydHkobCxhLGQpeyJAIj09YS5jaGFyQXQoMCk/Ii4iPT1hLmNoYXJBdCgxKSYmYT09V2hlP3RoaXMuZGlzYWJsZUFuaW1hdGlvbnMobCxkPXZvaWQgMD09PWR8fCEhZCk6dGhpcy5lbmdpbmUucHJvY2Vzcyh0aGlzLm5hbWVzcGFjZUlkLGwsYS5zbGljZSgxKSxk'@;
put 'KTp0aGlzLmRlbGVnYXRlLnNldFByb3BlcnR5KGwsYSxkKX1saXN0ZW4obCxhLGQpe2lmKCJAIj09YS5jaGFyQXQoMCkpe2NvbnN0IGg9ZnVuY3Rpb24gTyRlKGMpe3N3aXRjaChjKXtjYXNlImJvZHkiOnJldHVybiBkb2N1bWVudC5ib2R5O2Nhc2UiZG9jdW1lbnQiOnJldHVybiBkb2N1bWVu'@;
put 'dDtjYXNlIndpbmRvdyI6cmV0dXJuIHdpbmRvdztkZWZhdWx0OnJldHVybiBjfX0obCk7bGV0IGY9YS5zbGljZSgxKSx2PSIiO3JldHVybiJAIiE9Zi5jaGFyQXQoMCkmJihbZix2XT1mdW5jdGlvbiBQJGUoYyl7Y29uc3QgbD1jLmluZGV4T2YoIi4iKTtyZXR1cm5bYy5zdWJzdHJpbmcoMCxs'@;
put 'KSxjLnNsaWNlKGwrMSldfShmKSksdGhpcy5lbmdpbmUubGlzdGVuKHRoaXMubmFtZXNwYWNlSWQsaCxmLHYsTT0+e3RoaXMuZmFjdG9yeS5zY2hlZHVsZUxpc3RlbmVyQ2FsbGJhY2soTS5fZGF0YXx8LTEsZCxNKX0pfXJldHVybiB0aGlzLmRlbGVnYXRlLmxpc3RlbihsLGEsZCl9fWNsYXNz'@;
put 'IEYkZXtjb25zdHJ1Y3RvcihsLGEsZCl7dGhpcy5kZWxlZ2F0ZT1sLHRoaXMuZW5naW5lPWEsdGhpcy5fem9uZT1kLHRoaXMuX2N1cnJlbnRJZD0wLHRoaXMuX21pY3JvdGFza0lkPTEsdGhpcy5fYW5pbWF0aW9uQ2FsbGJhY2tzQnVmZmVyPVtdLHRoaXMuX3JlbmRlcmVyQ2FjaGU9bmV3IE1h'@;
put 'cCx0aGlzLl9jZFJlY3VyRGVwdGg9MCxhLm9uUmVtb3ZhbENvbXBsZXRlPShoLGYpPT57Y29uc3Qgdj1mPy5wYXJlbnROb2RlKGgpO3YmJmYucmVtb3ZlQ2hpbGQodixoKX19Y3JlYXRlUmVuZGVyZXIobCxhKXtjb25zdCBoPXRoaXMuZGVsZWdhdGUuY3JlYXRlUmVuZGVyZXIobCxhKTtpZigh'@;
put 'bHx8IWE/LmRhdGE/LmFuaW1hdGlvbil7Y29uc3QgWj10aGlzLl9yZW5kZXJlckNhY2hlO2xldCByZT1aLmdldChoKTtyZXR1cm4gcmV8fChyZT1uZXcgWWhlKCIiLGgsdGhpcy5lbmdpbmUsKCk9PlouZGVsZXRlKGgpKSxaLnNldChoLHJlKSkscmV9Y29uc3QgZj1hLmlkLHY9YS5pZCsiLSIr'@;
put 'dGhpcy5fY3VycmVudElkO3RoaXMuX2N1cnJlbnRJZCsrLHRoaXMuZW5naW5lLnJlZ2lzdGVyKHYsbCk7Y29uc3QgTT1aPT57QXJyYXkuaXNBcnJheShaKT9aLmZvckVhY2goTSk6dGhpcy5lbmdpbmUucmVnaXN0ZXJUcmlnZ2VyKGYsdixsLFoubmFtZSxaKX07cmV0dXJuIGEuZGF0YS5hbmlt'@;
put 'YXRpb24uZm9yRWFjaChNKSxuZXcgTCRlKHRoaXMsdixoLHRoaXMuZW5naW5lKX1iZWdpbigpe3RoaXMuX2NkUmVjdXJEZXB0aCsrLHRoaXMuZGVsZWdhdGUuYmVnaW4mJnRoaXMuZGVsZWdhdGUuYmVnaW4oKX1fc2NoZWR1bGVDb3VudFRhc2soKXtxdWV1ZU1pY3JvdGFzaygoKT0+e3RoaXMu'@;
put 'X21pY3JvdGFza0lkKyt9KX1zY2hlZHVsZUxpc3RlbmVyQ2FsbGJhY2sobCxhLGQpe2lmKGw+PTAmJmw8dGhpcy5fbWljcm90YXNrSWQpcmV0dXJuIHZvaWQgdGhpcy5fem9uZS5ydW4oKCk9PmEoZCkpO2NvbnN0IGg9dGhpcy5fYW5pbWF0aW9uQ2FsbGJhY2tzQnVmZmVyOzA9PWgubGVuZ3Ro'@;
put 'JiZxdWV1ZU1pY3JvdGFzaygoKT0+e3RoaXMuX3pvbmUucnVuKCgpPT57aC5mb3JFYWNoKGY9Pntjb25zdFt2LE1dPWY7dihNKX0pLHRoaXMuX2FuaW1hdGlvbkNhbGxiYWNrc0J1ZmZlcj1bXX0pfSksaC5wdXNoKFthLGRdKX1lbmQoKXt0aGlzLl9jZFJlY3VyRGVwdGgtLSwwPT10aGlzLl9j'@;
put 'ZFJlY3VyRGVwdGgmJnRoaXMuX3pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9Pnt0aGlzLl9zY2hlZHVsZUNvdW50VGFzaygpLHRoaXMuZW5naW5lLmZsdXNoKHRoaXMuX21pY3JvdGFza0lkKX0pLHRoaXMuZGVsZWdhdGUuZW5kJiZ0aGlzLmRlbGVnYXRlLmVuZCgpfXdoZW5SZW5kZXJpbmdE'@;
put 'b25lKCl7cmV0dXJuIHRoaXMuZW5naW5lLndoZW5SZW5kZXJpbmdEb25lKCl9fWxldCBIJGU9KCgpPT57Y2xhc3MgYyBleHRlbmRzIGFFe2NvbnN0cnVjdG9yKGEsZCxoKXtzdXBlcihhLGQsaCxmaShiYix7b3B0aW9uYWw6ITB9KSl9bmdPbkRlc3Ryb3koKXt0aGlzLmZsdXNoKCl9c3RhdGlj'@;
put 'e3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoeHIodnMpLHhyKFJHKSx4cihMRykpfX1zdGF0aWN7dGhpcy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KX19cmV0dXJuIGN9KSgpO2NvbnN0IEdoZT1be3Byb3ZpZGU6TEcsdXNl'@;
put 'RmFjdG9yeTpmdW5jdGlvbiBOJGUoKXtyZXR1cm4gbmV3IFRoZX19LHtwcm92aWRlOmFFLHVzZUNsYXNzOkgkZX0se3Byb3ZpZGU6eDgsdXNlRmFjdG9yeTpmdW5jdGlvbiBWJGUoYyxsLGEpe3JldHVybiBuZXcgRiRlKGMsbCxhKX0sZGVwczpbY1osYUUsV2FdfV0sWEc9W3twcm92aWRlOlJH'@;
put 'LHVzZUZhY3Rvcnk6KCk9Pm5ldyBaaGV9LHtwcm92aWRlOkZrLHVzZVZhbHVlOiJCcm93c2VyQW5pbWF0aW9ucyJ9LC4uLkdoZV0sJGhlPVt7cHJvdmlkZTpSRyx1c2VDbGFzczpJR30se3Byb3ZpZGU6RmssdXNlVmFsdWU6Ik5vb3BBbmltYXRpb25zIn0sLi4uR2hlXTtsZXQgQiRlPSgoKT0+'@;
put 'e2NsYXNzIGN7c3RhdGljIHdpdGhDb25maWcoYSl7cmV0dXJue25nTW9kdWxlOmMscHJvdmlkZXJzOmEuZGlzYWJsZUFuaW1hdGlvbnM/JGhlOlhHfX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1bW9kPWtpKHt0'@;
put 'eXBlOmN9KX1zdGF0aWN7dGhpcy5cdTAyNzVpbmo9QXIoe3Byb3ZpZGVyczpYRyxpbXBvcnRzOltUb2VdfSl9fXJldHVybiBjfSkoKSxqJGU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe31uZ09uSW5pdCgpe31zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5l'@;
put 'dyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1Y21wPVZyKHt0eXBlOmMsc2VsZWN0b3JzOltbImFwcC1ub3QtZm91bmQiXV0saG9zdEF0dHJzOlsxLCJjb250ZW50LWNvbnRhaW5lciJdLGRlY2xzOjMsdmFyczowLGNvbnN0czpbWzEsImNvbnRlbnQtYXJlYSJdXSx0ZW1wbGF0ZTpmdW5jdGlv'@;
put 'bihkLGgpezEmZCYmKGRlKDAsImRpdiIsMCkoMSwicCIpLExlKDIsIjQwNCAtIE5vdCBGb3VuZCIpLGhlKCkoKSl9LGVuY2Fwc3VsYXRpb246Mn0pfX1yZXR1cm4gY30pKCksS2hlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt9ZG93bmxvYWRGaWxlKGEsZCxoPSJ0eHQiKXtsZXQgZj1u'@;
put 'ZXcgQmxvYihbYV0se3R5cGU6InRleHQvcGxhaW4ifSk7aWYobmF2aWdhdG9yLmFwcFZlcnNpb24udG9TdHJpbmcoKS5pbmRleE9mKCIuTkVUIik+MCl3aW5kb3cubmF2aWdhdG9yLm1zU2F2ZUJsb2IoZixgJHtkfS4ke2h9YCk7ZWxzZXtsZXQgdj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJh'@;
put 'Iik7di5ocmVmPSJkYXRhOnRleHQvcGxhaW4sIitlbmNvZGVVUklDb21wb25lbnQoYSksdi5kb3dubG9hZD1gJHtkfS4ke2h9YCxkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHYpLHYuY2xpY2soKSxkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKHYpfX1yZWFkRmlsZShhKXtyZXR1cm4gbmV3'@;
put 'IFByb21pc2UoKGQsaCk9PntsZXQgZj1uZXcgRmlsZVJlYWRlcjtmLm9ubG9hZD0oKT0+e2YucmVzdWx0JiZkKEpTT04ucGFyc2UoZi5yZXN1bHQudG9TdHJpbmcoKSkpfSxmLnJlYWRBc1RleHQoYSl9KX1jbGVhclVwbG9hZElucHV0KGEpe2EudGFyZ2V0LnZhbHVlPSIifXN0YXRpY3t0aGlz'@;
put 'Llx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KX19cmV0dXJuIGN9KSgpO3ZhciBnZz15KDU5NDgpO2NvbnN0IEpHPWZ1bmN0aW9uIFUk'@;
put 'ZShjKXtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGN8fEN5KGMpJiYiW29iamVjdCBTeW1ib2xdIj09YnkoYyl9O3ZhciBaJGU9L1wufFxbKD86W15bXF1dKnwoWyInXSkoPzooPyFcMSlbXlxcXXxcXC4pKj9cMSlcXS8sVyRlPS9eXHcqJC87ZnVuY3Rpb24gUUcoYyxsKXtpZigiZnVuY3Rpb24i'@;
put 'IT10eXBlb2YgY3x8bnVsbCE9bCYmImZ1bmN0aW9uIiE9dHlwZW9mIGwpdGhyb3cgbmV3IFR5cGVFcnJvcigiRXhwZWN0ZWQgYSBmdW5jdGlvbiIpO3ZhciBhPWZ1bmN0aW9uKCl7dmFyIGQ9YXJndW1lbnRzLGg9bD9sLmFwcGx5KHRoaXMsZCk6ZFswXSxmPWEuY2FjaGU7aWYoZi5oYXMoaCkp'@;
put 'cmV0dXJuIGYuZ2V0KGgpO3ZhciB2PWMuYXBwbHkodGhpcyxkKTtyZXR1cm4gYS5jYWNoZT1mLnNldChoLHYpfHxmLHZ9O3JldHVybiBhLmNhY2hlPW5ldyhRRy5DYWNoZXx8a1cpLGF9UUcuQ2FjaGU9a1c7Y29uc3QgSyRlPVFHO3ZhciBRJGU9L1teLltcXV0rfFxbKD86KC0/XGQrKD86XC5c'@;
put 'ZCspPyl8KFsiJ10pKCg/Oig/IVwyKVteXFxdfFxcLikqPylcMilcXXwoPz0oPzpcLnxcW1xdKSg/OlwufFxbXF18JCkpL2csZUtlPS9cXChcXCk/L2csdEtlPWZ1bmN0aW9uIFgkZShjKXt2YXIgbD1LJGUoYyxmdW5jdGlvbihkKXtyZXR1cm4gNTAwPT09YS5zaXplJiZhLmNsZWFyKCksZH0p'@;
put 'LGE9bC5jYWNoZTtyZXR1cm4gbH0oZnVuY3Rpb24oYyl7dmFyIGw9W107cmV0dXJuIDQ2PT09Yy5jaGFyQ29kZUF0KDApJiZsLnB1c2goIiIpLGMucmVwbGFjZShRJGUsZnVuY3Rpb24oYSxkLGgsZil7bC5wdXNoKGg/Zi5yZXBsYWNlKGVLZSwiJDEiKTpkfHxhKX0pLGx9KTtjb25zdCBuS2U9'@;
put 'dEtlO3ZhciBxaGU9dW0/dW0ucHJvdG90eXBlOnZvaWQgMCxYaGU9cWhlP3FoZS50b1N0cmluZzp2b2lkIDA7Y29uc3Qgb0tlPWZ1bmN0aW9uIEpoZShjKXtpZigic3RyaW5nIj09dHlwZW9mIGMpcmV0dXJuIGM7aWYoU3koYykpcmV0dXJuIGZ1bmN0aW9uIHJLZShjLGwpe2Zvcih2YXIgYT0t'@;
put 'MSxkPW51bGw9PWM/MDpjLmxlbmd0aCxoPUFycmF5KGQpOysrYTxkOyloW2FdPWwoY1thXSxhLGMpO3JldHVybiBofShjLEpoZSkrIiI7aWYoSkcoYykpcmV0dXJuIFhoZT9YaGUuY2FsbChjKToiIjt2YXIgbD1jKyIiO3JldHVybiIwIj09bCYmMS9jPT0tMS8wPyItMCI6bH0sdUtlPWZ1bmN0'@;
put 'aW9uIGNLZShjLGwpe3JldHVybiBTeShjKT9jOmZ1bmN0aW9uIFkkZShjLGwpe2lmKFN5KGMpKXJldHVybiExO3ZhciBhPXR5cGVvZiBjO3JldHVybiEoIm51bWJlciIhPWEmJiJzeW1ib2wiIT1hJiYiYm9vbGVhbiIhPWEmJm51bGwhPWMmJiFKRyhjKSl8fFckZS50ZXN0KGMpfHwhWiRlLnRl'@;
put 'c3QoYyl8fG51bGwhPWwmJmMgaW4gT2JqZWN0KGwpfShjLGwpP1tjXTpuS2UoZnVuY3Rpb24gc0tlKGMpe3JldHVybiBudWxsPT1jPyIiOm9LZShjKX0oYykpfSxmS2U9ZnVuY3Rpb24gaEtlKGMpe2lmKCJzdHJpbmciPT10eXBlb2YgY3x8SkcoYykpcmV0dXJuIGM7dmFyIGw9YysiIjtyZXR1'@;
put 'cm4iMCI9PWwmJjEvYz09LTEvMD8iLTAiOmx9LHljPWZ1bmN0aW9uIG1LZShjLGwsYSl7dmFyIGQ9bnVsbD09Yz92b2lkIDA6ZnVuY3Rpb24gcEtlKGMsbCl7Zm9yKHZhciBhPTAsZD0obD11S2UobCxjKSkubGVuZ3RoO251bGwhPWMmJmE8ZDspYz1jW2ZLZShsW2ErK10pXTtyZXR1cm4gYSYm'@;
put 'YT09ZD9jOnZvaWQgMH0oYyxsKTtyZXR1cm4gdm9pZCAwPT09ZD9hOmR9O2xldCBraD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoKXt0aGlzLnNhc1NlcnZpY2U9YSx0aGlzLmhlbHBlclNlcnZpY2U9ZCx0aGlzLmxvZ2dlclNlcnZpY2U9aCx0aGlzLnJlc3BvbnNlPW5ldyBXbix0'@;
put 'aGlzLmNoYW5nZWRUYWJsZT1uZXcgV24sdGhpcy5kZXRhaWxzPW5ldyBXbix0aGlzLmRpZmZzPW5ldyBXbix0aGlzLmNvbHVtbnM9bmV3IFduLHRoaXMudmFsdWVzPW5ldyBXbix0aGlzLmZpbHRlcj1uZXcgV24sdGhpcy5xdWVyeT1uZXcgV24sdGhpcy5zdWJtaXR0RGV0YWlsPW5ldyBXbix0'@;
put 'aGlzLnJlbW92ZVF1ZXJ5PW5ldyBXbix0aGlzLnNldFN1Ym1pdD1uZXcgV24sdGhpcy5zZXRTdWJtaXRMaXN0PW5ldyBXbn1jYWxsU2VydmljZShhLGQsaCxmKXt2YXIgdj10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXtjb25zdCBNPXt9O3JldHVybiBNW2RdPVthXSx7ZGF0YTooeWllbGQg'@;
put 'di5zYXNTZXJ2aWNlLnJlcXVlc3QoaCxNKSkuYWRhcHRlclJlc3BvbnNlLGxpYmRzOmZ9fSkoKX11cGRhdGVUYWJsZShhLGQsaCxmLHYsTSxEKXt2YXIgWj10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXtsZXQgcmU9e2pzZGF0YTpkfTtpZih2KXtsZXQgYmU9Wi5wYXJzZUZvcm1hdHModik7'@;
put 'cmUuJGpzZGF0YT17Zm9ybWF0czpiZX19cmV0dXJuIHJlW2hdPVthXSx5aWVsZCBaLnNhc1NlcnZpY2UucmVxdWVzdChmLHJlLEQse3N1cHByZXNzRXJyb3JBYm9ydE1vZGFsOk0sc3VwcHJlc3NTdWNjZXNzQWJvcnRNb2RhbDpNfSl9KSgpfWdldEFwcHJvdmFscyhhLGQsaCl7dmFyIGY9dGhp'@;
put 'cztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7bGV0IHY9e307cmV0dXJuIHZbZF09W2FdLCh5aWVsZCBmLnNhc1NlcnZpY2UucmVxdWVzdChoLHYpKS5hZGFwdGVyUmVzcG9uc2V9KSgpfXNlbmREZXRhaWxzKGEsZCxoKXt2YXIgZj10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXtsZXQgdj1PYmpl'@;
put 'Y3QuYXNzaWduKHtzdWI6ITB9LGEpO2Yuc3VibWl0dERldGFpbC5uZXh0KHtkYXRhOmhbZF0sdmlld0RhdGE6dn0pfSkoKX1nZXRTdWJtaXR0cygpe3ZhciBhPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe3JldHVybih5aWVsZCBhLnNhc1NlcnZpY2UucmVxdWVzdCgiZWRpdG9ycy9nZXRz'@;
put 'dWJtaXRzIixudWxsKSkuYWRhcHRlclJlc3BvbnNlfSkoKX12aWV3TGlicygpe3ZhciBhPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe3JldHVybih5aWVsZCBhLnNhc1NlcnZpY2UucmVxdWVzdCgicHVibGljL3ZpZXdsaWJzIixudWxsKSkuYWRhcHRlclJlc3BvbnNlfSkoKX1yZWZyZXNo'@;
put 'TGliSW5mbyhhKXt2YXIgZD10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXtjb25zdCBoPXtsaWIycmVmcmVzaDpbe2xpYnJlZjphfV19O3JldHVybih5aWVsZCBkLnNhc1NlcnZpY2UucmVxdWVzdCgicHVibGljL3JlZnJlc2hsaWJpbmZvIixoKSkuYWRhcHRlclJlc3BvbnNlfSkoKX12aWV3'@;
put 'VGFibGVzKGEpe3ZhciBkPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe2xldCBoPXtTQVNDb250cm9sVGFibGU6W3tNUExJQjphfV19O3JldHVybih5aWVsZCBkLnNhc1NlcnZpY2UucmVxdWVzdCgicHVibGljL3ZpZXd0YWJsZXMiLGgpKS5hZGFwdGVyUmVzcG9uc2V9KSgpfXZpZXdEYXRh'@;
put 'KGEsZCl7dmFyIGg9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7bGV0IGY9e1NBU0NvbnRyb2xUYWJsZTpbe0xJQkRTOmEsRklMVEVSX1JLOmR9XX07cmV0dXJuKHlpZWxkIGguc2FzU2VydmljZS5yZXF1ZXN0KCJwdWJsaWMvdmlld2RhdGEiLGYpKS5hZGFwdGVyUmVzcG9uc2V9KSgpfXZp'@;
put 'ZXdEYXRhU2VhcmNoKGEpe3ZhciBkPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKihoLGY9ITEsdixNKXtsZXQgWj17U0FTQ29udHJvbFRhYmxlOlt7U0VBUkNIVFlQRTpoLmxlbmd0aD4wP2Y/Ik5VTSI6IkNIQVIiOiJOT05FIixTRUFSQ0hWQUw6aCxMSUJEUzp2LEZJTFRFUl9SSzpNfV19O3Jl'@;
put 'dHVybih5aWVsZCBkLnNhc1NlcnZpY2UucmVxdWVzdCgicHVibGljL3ZpZXdkYXRhIixaKSkuYWRhcHRlclJlc3BvbnNlfSkuYXBwbHkodGhpcyxhcmd1bWVudHMpfWdldFhMTWFwUnVsZXMoYSl7dmFyIGQ9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7Y29uc3QgaD17Z2V0eGxtYXBzX2lu'@;
put 'Olt7WExNQVBfSUQ6YX1dfTtyZXR1cm4oeWllbGQgZC5zYXNTZXJ2aWNlLnJlcXVlc3QoImVkaXRvcnMvZ2V0eGxtYXBzIixoKSkuYWRhcHRlclJlc3BvbnNlfSkoKX1zaG93RGlmZnMoYSxkLGgpe3ZhciBmPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe2xldCB2PXt9O3JldHVybiB2W2Rd'@;
put 'PVthXSwoeWllbGQgZi5zYXNTZXJ2aWNlLnJlcXVlc3QoaCx2LHt1c2VDb21wdXRlQXBpOm51bGx9KSkuYWRhcHRlclJlc3BvbnNlfSkoKX1yZWplY3RpbmcoYSxkLGgpe3ZhciBmPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe2xldCB2PXt9O3JldHVybiB2W2RdPVthXSwoeWllbGQgZi5z'@;
put 'YXNTZXJ2aWNlLnJlcXVlc3QoaCx2LHt1c2VDb21wdXRlQXBpOm51bGx9KSkuYWRhcHRlclJlc3BvbnNlfSkoKX1hcHByb3ZlVGFibGUoYSxkLGgpe3ZhciBmPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe2xldCB2PXt9O3JldHVybiB2W2RdPVthXSwoeWllbGQgZi5zYXNTZXJ2aWNlLnJl'@;
put 'cXVlc3QoaCx2KSkuYWRhcHRlclJlc3BvbnNlfSkoKX1nZXRIaXN0b3J5KGEsZCxoKXt2YXIgZj10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXtsZXQgdj17fTtyZXR1cm4gdltkXT1bYV0sKHlpZWxkIGYuc2FzU2VydmljZS5yZXF1ZXN0KGgsdikpLmFkYXB0ZXJSZXNwb25zZX0pKCl9c2V0'@;
put 'UXVlcnlWYXJpYWJsZXMoYSxkKXt0aGlzLmNvbHVtbnMubmV4dCh7ZGF0YTp7Y29sczpkfSxsaWJkczphfSl9Z2V0Q2hhbmdlSW5mbyhhKXt2YXIgZD10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXtsZXQgZj17U0FTQ29udHJvbFRhYmxlOlt7VEFCTEU6YX1dfTtyZXR1cm4oeWllbGQgZC5z'@;
put 'YXNTZXJ2aWNlLnJlcXVlc3QoInB1YmxpYy9nZXRjaGFuZ2VpbmZvIixmKSkuYWRhcHRlclJlc3BvbnNlfSkoKX1nZXRRdWVyeVZhbHVlcyhhLGQsaCxmLHYpe3ZhciBNPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe2xldCBEPXtpd2FudDpbe2xpYmRzOmQsY29sOmEsLi4uZiYme1NUQVJU'@;
put 'Uk9XOmZ9LC4uLnYmJntST1dTOnZ9fV19O3JldHVybiBoLmxlbmd0aD4wJiYoRC5GSUxURVJRVUVSWT1oKSwoeWllbGQgTS5zYXNTZXJ2aWNlLnJlcXVlc3QoInB1YmxpYy9nZXRjb2x2YWxzIixEKS5jYXRjaChaPT57dGhyb3cgWn0pKS5hZGFwdGVyUmVzcG9uc2V9KSgpfXNhdmVRdWVyeShh'@;
put 'LGQpe3ZhciBoPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe2xldCBmPXtpd2FudDpbe2ZpbHRlcl90YWJsZTphfV0sZmlsdGVycXVlcnk6ZH07Y29uc3Qgdj15aWVsZCBoLnNhc1NlcnZpY2UucmVxdWVzdCgicHVibGljL3ZhbGlkYXRlZmlsdGVyIixmKTtyZXR1cm4gaC5maWx0ZXIubmV4'@;
put 'dCh2KSx2LmFkYXB0ZXJSZXNwb25zZX0pKCl9b3BlblRhYmxlKGEpe3ZhciBkPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe2xldCBoPXtpd2FudDpbe3RhYmxlX2lkOmF9XX07cmV0dXJuKHlpZWxkIGQuc2FzU2VydmljZS5yZXF1ZXN0KCJhdWRpdG9ycy9nZXRzdGFnZXRhYmxlIixoKSku'@;
put 'YWRhcHRlclJlc3BvbnNlfSkoKX1jaGVja09wZXJhdG9yKGEsZCxoKXtsZXQgZjtzd2l0Y2goYSl7Y2FzZSJCRVRXRUVOIjpkIGluc3RhbmNlb2YgQXJyYXkmJigiIiE9PWRbMF0mJiIiIT09ZFsxXT9mPWRbMF0rIiBBTkQgIitkWzFdOiIiIT09ZFswXSYmIiI9PT1kWzFdPyhkWzFdPSIuIixm'@;
put 'PWRbMF0rIiBBTkQgIitkWzFdKToiIj09PWRbMF0mJiIiIT09ZFsxXT8oZFswXT0iLiIsZj1kWzBdKyIgQU5EICIrZFsxXSk6KGRbMF09Ii4iLGRbMV09Ii4iLGY9ZFswXSsiIEFORCAiK2RbMV0pKTticmVhaztjYXNlIklOIjpjYXNlIk5PVCBJTiI6bGV0IE09W107aWYodHlwZW9mIGQ8InUi'@;
put 'KWZvcihsZXQgRD0wO0Q8ZC5sZW5ndGg7RCsrKSEwPT09ZFtEXS5jaGVja2VkJiYoImNoYXIiPT09aD8oInN0cmluZyI9PXR5cGVvZiBkW0RdLnZhbCYmKGRbRF0udmFsPWRbRF0udmFsLnJlcGxhY2UoIiciLCInJyIpKSxNLnB1c2goIiciK2RbRF0udmFsKyInIikpOihudWxsPT09ZFtEXS52'@;
put 'YWwmJihkW0RdLnZhbD0iLiIpLE0ucHVzaChkW0RdLnZhbCkpKTtkPSIoIitNKyIpIjticmVhaztjYXNlIkNPTlRBSU5TIjphPSI/IjticmVhaztjYXNlIk5PVCBFUVVBTCI6YT0ibmUifXJldHVybiJudW0iPT09aCYmbnVsbD09PWQmJihkPSIuIiksIlBsZWFzZSBzZWxlY3QgdmFsdWUiPT09'@;
put 'ZCYmKGQ9IiIpLC0xIT09WyI9IiwiPiIsIjwiLCI8PSIsIj49IiwibmUiXS5pbmRleE9mKGEpJiYibnVtIj09PWgmJiIiPT09ZCYmKGQ9Ii4iKSwiQkVUV0VFTiI9PT1hP3t2YWx1ZTpmLG9wZXJhdG9yOmF9Ont2YWx1ZTpkLG9wZXJhdG9yOmF9fXdoZXJlQ2xhdXNlQ3JlYXRvcihhLGQsaCl7'@;
put 'bGV0IEQsY2UsZj0iIixaPSIiLHJlPVtdO2ZvcihsZXQgRWU9MDtFZTxhLnF1ZXJ5T2JqLmxlbmd0aDtFZSsrKXtsZXQgQmU9IiIscWU9YS5xdWVyeU9ialtFZV07Zm9yKGxldCBydD0wO3J0PHFlLmVsZW1lbnRzLmxlbmd0aDtydCsrKXtsZXQgZHQscHQ9cWUuZWxlbWVudHNbcnRdO0Q9cnQ8'@;
put 'cWUuZWxlbWVudHMubGVuZ3RoLTE/cWUuY2xhdXNlTG9naWM6IiI7Zm9yKGxldCBDcj0wO0NyPHB0LnZhbHVlcy5sZW5ndGg7Q3IrKyl7aWYoInN0cmluZyI9PXR5cGVvZiBwdC52YWx1ZSYmIm51bWJlciI9PXR5cGVvZiBwdC52YWx1ZXNbQ3JdLmZvcm1hdHRlZClwdC52YWx1ZT09PUpTT04u'@;
put 'c3RyaW5naWZ5KHB0LnZhbHVlc1tDcl0uZm9ybWF0dGVkKSYmKGR0PXB0LnZhbHVlc1tDcl0udW5mb3JtYXR0ZWQpO2Vsc2V7bGV0IG1yPSJudW1iZXIiIT10eXBlb2YgcHQudmFsdWVzW0NyXS5mb3JtYXR0ZWQmJm51bGwhPT1wdC52YWx1ZXNbQ3JdLmZvcm1hdHRlZD9wdC52YWx1ZXNbQ3Jd'@;
put 'LmZvcm1hdHRlZC50cmltKCk6cHQudmFsdWVzW0NyXS5mb3JtYXR0ZWQ7cHQudmFsdWU9PT1tciYmKGR0PXB0LnZhbHVlc1tDcl0udW5mb3JtYXR0ZWQpfSJQbGVhc2Ugc2VsZWN0IHZhbHVlIj09PXB0LnZhbHVlJiYtMSE9PVsiPSIsIj4iLCI8IiwiPD0iLCI+PSIsIm5lIl0uaW5kZXhPZihw'@;
put 'dC5vcGVyYXRvcikmJihkdD0iIiksKCJDT05UQUlOUyI9PT1wdC5vcGVyYXRvcnx8IkxJS0UiPT09cHQub3BlcmF0b3J8fCJCRUdJTlNfV0lUSCI9PT1wdC5vcGVyYXRvcikmJihkdD1wdC52YWx1ZSl9aWYoZHR8fChkdD1wdC52YWx1ZSkscHQudmFsdWUgaW5zdGFuY2VvZiBBcnJheSYmIkJF'@;
put 'VFdFRU4iPT09cHQub3BlcmF0b3Ipe2R0PVtdLGR0LnB1c2gocHQudmFsdWVbMF0pLGR0LnB1c2gocHQudmFsdWVbMV0pO2ZvcihsZXQgQ3I9MDtDcjxwdC52YWx1ZXMubGVuZ3RoO0NyKyspZHRbMF09PT1wdC52YWx1ZXNbQ3JdLmZvcm1hdHRlZCYmKGR0WzBdPXB0LnZhbHVlc1tDcl0udW5m'@;
put 'b3JtYXR0ZWQpLGR0WzFdPT09cHQudmFsdWVzW0NyXS5mb3JtYXR0ZWQmJihkdFsxXT1wdC52YWx1ZXNbQ3JdLnVuZm9ybWF0dGVkKX1pZihwdC52YWx1ZSBpbnN0YW5jZW9mIEFycmF5JiYoIklOIj09PXB0Lm9wZXJhdG9yfHwiTk9UIElOIj09PXB0Lm9wZXJhdG9yKSl7ZHQ9W10sZHQ9cHQu'@;
put 'dmFsdWU7Zm9yKGxldCBDcj0wO0NyPHB0LnZhbHVlcy5sZW5ndGg7Q3IrKylkdFtDcl0mJmR0W0NyXS52YWw9PT1wdC52YWx1ZXNbQ3JdLmZvcm1hdHRlZCYmKGR0W0NyXS52YWw9cHQudmFsdWVzW0NyXS51bmZvcm1hdHRlZCl9bGV0IEp0PXB0LnR5cGU7Y29uc3Qgdm49cHQudmFsdWVWYXJp'@;
put 'YWJsZTtsZXQgTW4sQ249bnVsbD09PXB0LnZhcmlhYmxlPyIiOnB0LnZhcmlhYmxlLHRuPW51bGw9PT1wdC5vcGVyYXRvcj8iIjpwdC5vcGVyYXRvcjtNbj10aGlzLmNoZWNrT3BlcmF0b3IodG4sZHQsSnQpLnZhbHVlLCJzdHJpbmciPT10eXBlb2YgTW4mJiIoIiE9PU1uWzBdJiYoTW49TW4u'@;
put 'cmVwbGFjZSgiJyIsIicnIikpLHRuPXRoaXMuY2hlY2tPcGVyYXRvcih0bixNbixKdCkub3BlcmF0b3IsImNoYXIiPT09SnQmJiJJTiIhPT10biYmIk5PVCBJTiIhPT10bj8odHlwZW9mIE1uPiJ1IiYmKE1uPSIiKSxNbj12bj8iICIrTW4rIiAiOiIgJyIrTW4rIicgIixCZT1CZSsiICIrQ24r'@;
put 'IiAiK3RuK01uK0QpOigibnVtIj09PUp0JiZ0eXBlb2YgTW4+InUiJiYoTW49Ii4iKSxNbj10eXBlb2YgTW4+InUiPyIiOiIgIitNbisiICIsQmU9QmUrIiAiK0NuKyIgIit0bitNbitEKX1yZS5wdXNoKEJlKX1aPSIiO2ZvcihsZXQgRWU9MDtFZTxyZS5sZW5ndGg7RWUrKyljZT1FZTxyZS5s'@;
put 'ZW5ndGgtMT9kOiIiLFo9MT09PXJlLmxlbmd0aD9yZVswXTpaKyIgKCIrcmVbRWVdKyIpICIrY2U7cmV0dXJuIGY9Wi5zdWJzdHIoMSkuc2xpY2UoMCwtMSksWj0iV0hFUkUiK1orIjsiLHRoaXMucXVlcnkubmV4dCh7d2hlcmVDbGF1c2U6WixzdHJpbmc6ZixvYmo6YSxsaWJkczpofSkse3do'@;
put 'ZXJlQ2xhdXNlOlosc3RyaW5nOmZ9fWNyZWF0ZUZpbHRlclF1ZXJ5VGFibGUoYSl7Y29uc3QgZD1bXTtyZXR1cm4gYS5maWx0ZXJHcm91cHMuZm9yRWFjaCgoaCxmKT0+e2guZmlsdGVyQ2xhdXNlcy5mb3JFYWNoKHY9PntsZXQgTT0iIjsiQkVUV0VFTiI9PT12Lm9wZXJhdG9yP009YCR7di52'@;
put 'YWx1ZVswXX0gQU5EICR7di52YWx1ZVsxXX1gOiJJTiI9PT12Lm9wZXJhdG9yfHwiTk9UIElOIj09PXYub3BlcmF0b3I/KHYudmFsdWUuZm9yRWFjaChEPT57aWYoRC5jaGVja2VkKXtjb25zdCBaPUQudmFsOyJzdHJpbmciIT10eXBlb2YgWnx8KDAsZ2cuaXNTcGVjaWFsTWlzc2luZykoWikm'@;
put 'JiJjaGFyIiE9PXYudHlwZT9NLmxlbmd0aD4wP00rPWAsJHtafWA6TT1gKCR7Wn1gOk0ubGVuZ3RoPjA/TSs9YCwnJHtaLnJlcGxhY2UoLycvZywiJyciKX0nYDpNPWAoJyR7Wi5yZXBsYWNlKC8nL2csIicnIil9J2B9fSksTS5sZW5ndGg+MCYmKE0rPSIpIikpOiIiPT09di52YWx1ZT9NPSJj'@;
put 'aGFyIj09PXYudHlwZT8iJyAnIjoiLiI6ImNoYXIiPT09di50eXBlJiYhdi52YWx1ZVZhcmlhYmxlJiYoTT1gJyR7di52YWx1ZS5yZXBsYWNlKC8nL2csIicnIil9J2ApLGQucHVzaCh7R1JPVVBfTE9HSUM6YS5ncm91cExvZ2ljLFNVQkdST1VQX0xPR0lDOmguY2xhdXNlTG9naWN8fCJBTkQi'@;
put 'LFNVQkdST1VQX0lEOmYsVkFSSUFCTEVfTk06di52YXJpYWJsZSxPUEVSQVRPUl9OTTp2Lm9wZXJhdG9yLFJBV19WQUxVRTpNfHx2LnZhbHVlfSl9KX0pLGR9aW5pdGlhbGl6ZUdsb2JhbEZpbHRlckNsYXVzZShhLGQpe2NvbnN0IGg9e3F1ZXJ5T2JqOltdLGNsYXVzZUxvZ2ljOltdLGdyb3Vw'@;
put 'TG9naWM6eWMoS24sYSkuZmlsdGVyLnF1ZXJ5WzBdLkdST1VQX0xPR0lDfTt5YyhLbixhKS5maWx0ZXIuY2xhdXNlcz10aGlzLmhlbHBlclNlcnZpY2UuZGVlcENsb25lKGgpLHljKEtuLGEpLmZpbHRlci5ncm91cExvZ2ljPXljKEtuLGEpLmZpbHRlci5xdWVyeVswXS5HUk9VUF9MT0dJQzts'@;
put 'ZXQgZj0iIix2PXtlbGVtZW50czpbXX0sTT0wO3ljKEtuLGEpLmZpbHRlci5xdWVyeS5mb3JFYWNoKEQ9Pntjb25zdCBaPXt9O2ZvcihsZXQgcmU9MDtyZTxkLmxlbmd0aDtyZSsrKWlmKGRbcmVdLk5BTUU9PT1ELlZBUklBQkxFX05NKXtpZihmPUQuU1VCR1JPVVBfTE9HSUMsWi5kZHR5cGU9'@;
put 'ZFtyZV0uRERUWVBFLFoudHlwZT1kW3JlXS5UWVBFLFoub3BlcmF0b3JzPSJudW0iPT09ZFtyZV0uVFlQRT9Lbi5vcGVyYXRvcnMubnVtT3BlcmF0b3JzOktuLm9wZXJhdG9ycy5jaGFyT3BlcmF0b3JzLFoubG9naWM9bnVsbCxaLm9wZXJhdG9yPUQuT1BFUkFUT1JfTk0sWi52YXJpYWJsZT1E'@;
put 'LlZBUklBQkxFX05NLCJjaGFyIj09PWRbcmVdLlRZUEUpaWYoIklOIj09PUQuT1BFUkFUT1JfTk18fCJOT1QgSU4iPT09RC5PUEVSQVRPUl9OTSl7Y29uc3QgY2U9W10sRWU9RC5SQVdfVkFMVUUuc2xpY2UoMSwtMSkuc3BsaXQoIicsJyIpOzE9PT1FZS5sZW5ndGg/Y2UucHVzaCh7Y2hlY2tl'@;
put 'ZDohMCx2YWw6RWVbMF0uc2xpY2UoMSwtMSkucmVwbGFjZSgvJycvZywiJyIpfSk6RWUuZm9yRWFjaCgoQmUscWUpPT57Y2UucHVzaCgwPT09cWU/e2NoZWNrZWQ6ITAsdmFsOkJlLnNsaWNlKDEpLnJlcGxhY2UoLycnL2csIiciKX06cWU9PT1FZS5sZW5ndGgtMT97Y2hlY2tlZDohMCx2YWw6'@;
put 'QmUuc2xpY2UoMCwtMSkucmVwbGFjZSgvJycvZywiJyIpfTp7Y2hlY2tlZDohMCx2YWw6QmUucmVwbGFjZSgvJycvZywiJyIpfSl9KSxaLnZhbHVlPXRoaXMuaGVscGVyU2VydmljZS5kZWVwQ2xvbmUoY2UpfWVsc2UgWi52YWx1ZT1ELlJBV19WQUxVRS5zbGljZSgxLC0xKS5yZXBsYWNlKC8n'@;
put 'Jy9nLCInIik7ZWxzZSBpZigiSU4iPT09RC5PUEVSQVRPUl9OTXx8Ik5PVCBJTiI9PT1ELk9QRVJBVE9SX05NKXtjb25zdCBjZT1bXTtELlJBV19WQUxVRS5zbGljZSgxLC0xKS5zcGxpdCgiLCIpLmZvckVhY2goKEJlLHFlKT0+e2NlLnB1c2goe2NoZWNrZWQ6ITAsdmFsOkJlfSl9KSxaLnZh'@;
put 'bHVlPXRoaXMuaGVscGVyU2VydmljZS5kZWVwQ2xvbmUoY2UpfWVsc2UgaWYoIkJFVFdFRU4iPT09RC5PUEVSQVRPUl9OTSl7Y29uc3QgY2U9RC5SQVdfVkFMVUUuc3BsaXQoIiBBTkQgIik7Wi52YWx1ZT1jZX1lbHNlIFoudmFsdWU9RC5SQVdfVkFMVUU7Wi52YWx1ZXM9W10sTT09PUQuU1VC'@;
put 'R1JPVVBfSUR8fCh5YyhLbixhKS5maWx0ZXIuY2xhdXNlcy5xdWVyeU9iai5wdXNoKHRoaXMuaGVscGVyU2VydmljZS5kZWVwQ2xvbmUodikpLHljKEtuLGEpLmZpbHRlci5jbGF1c2VzLnF1ZXJ5T2JqW01dLmNsYXVzZUxvZ2ljPWYseWMoS24sYSkuZmlsdGVyLmNsYXVzZXMucXVlcnlPYmpb'@;
put 'TV0uaW52YWxpZENsYXVzZT0hMSxNKyssdi5lbGVtZW50cz1bXSksdi5lbGVtZW50cy5wdXNoKHRoaXMuaGVscGVyU2VydmljZS5kZWVwQ2xvbmUoWikpO2JyZWFrfX0pLHYuZWxlbWVudHMubGVuZ3RoPjAmJih5YyhLbixhKS5maWx0ZXIuY2xhdXNlcy5xdWVyeU9iai5wdXNoKHRoaXMuaGVs'@;
put 'cGVyU2VydmljZS5kZWVwQ2xvbmUodikpLHljKEtuLGEpLmZpbHRlci5jbGF1c2VzLnF1ZXJ5T2JqW01dLmNsYXVzZUxvZ2ljPWYseWMoS24sYSkuZmlsdGVyLmNsYXVzZXMucXVlcnlPYmpbTV0uaW52YWxpZENsYXVzZT0hMSkseWMoS24sYSkuZmlsdGVyLnF1ZXJ5PVtdfXJlbW92ZUNsYXVz'@;
put 'ZSgpe3ZhciBhPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe3JldHVybiBhLnJlbW92ZVF1ZXJ5Lm5leHQoITApLCEwfSkoKX1zcGVjQ29udmVyc2lvbihhKXtsZXQgZD17fSxoPVtdO2lmKGg9YS5tYXAoZnVuY3Rpb24oZil7cmV0dXJuIGYuTkFNRS50b1VwcGVyQ2FzZSgpfSksYSBpbnN0'@;
put 'YW5jZW9mIEFycmF5KWZvcihsZXQgZj0wO2Y8aC5sZW5ndGg7ZisrKWRbaFtmXV09MT09PWFbZl0uVFlQRT97Y29sVHlwZToibnVtIixjb2xMZW5ndGg6YVtmXS5MRU5HVEh9Ontjb2xUeXBlOiJzdHJpbmciLGNvbExlbmd0aDphW2ZdLkxFTkdUSH07cmV0dXJuIGR9c2V0U3VibWl0UmVhZHko'@;
put 'KXt0aGlzLnNldFN1Ym1pdC5uZXh0KCEwKX1wYXJzZUZvcm1hdHMoYSl7Y29uc3QgZD17fSxoPWEudmFycztmb3IobGV0IGYgb2YgT2JqZWN0LmtleXMoaCkpe2NvbnN0IHY9aFtmXS50eXBlLE09aFtmXS5sZW5ndGg7Im51bSI9PT12P2RbZl09ImJlc3QuIjoiY2hhciI9PT12JiYoZFtmXT1g'@;
put 'JGNoYXIke019LmApfXJldHVybiBkfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKHhyKEJzKSx4cihTdSkseHIoU2QpKX19c3RhdGlje3RoaXMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSl9fXJldHVybiBjfSko'@;
put 'KTtmdW5jdGlvbiB2S2UoYyxsKXsxJmMmJihzaSgwKSxkZSgxLCJzcGFuIiwyMSksTGUoMiwiIExvYWRpbmcuLi4gIiksaGUoKSxkZSgzLCJwIiksTGUoNCwiRGVwbG95aW5nLi4uIiksaGUoKSxsaSgpKX1mdW5jdGlvbiBiS2UoYyxsKXsxJmMmJkd0KDAsImNsci1pY29uIiwzMil9ZnVuY3Rp'@;
put 'b24geUtlKGMsbCl7MSZjJiZHdCgwLCJjbHItaWNvbiIsMzMpfWZ1bmN0aW9uIF9LZShjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIsMzApLGd0KDEsYktlLDEsMCwiY2xyLWljb24iLDMxKSgyLHlLZSwxLDAsImNsci1pY29uIiwyNyksZGUoMywicCIpLExlKDQsIkRlcGxveSBTQVMgSm9icyIp'@;
put 'LGhlKCkoKSksMiZjKXtjb25zdCBhPVJlKDMpO2ZlKCksTWUoIm5nSWYiLCEwPT09YS5hdXRvRGVwbG95U3RhdHVzLmRlcGxveVNlcnZpY2VQYWNrKSxmZSgpLE1lKCJuZ0lmIiwhIWEuYXV0b0RlcGxveVN0YXR1cy5kZXBsb3lTZXJ2aWNlUGFjayl9fWZ1bmN0aW9uIHdLZShjLGwpezEmYyYm'@;
put 'R3QoMCwiY2xyLWljb24iLDMyKX1mdW5jdGlvbiBDS2UoYyxsKXsxJmMmJkd0KDAsImNsci1pY29uIiwzMyl9ZnVuY3Rpb24gU0tlKGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2IiwzMCksZ3QoMSx3S2UsMSwwLCJjbHItaWNvbiIsMzEpKDIsQ0tlLDEsMCwiY2xyLWljb24iLDI3KSxkZSgzLCJw'@;
put 'IiksTGUoNCwiQ3JlYXRlIGRhdGFiYXNlIiksaGUoKSgpKSwyJmMpe2NvbnN0IGE9UmUoMyk7ZmUoKSxNZSgibmdJZiIsYS5hdXRvRGVwbG95U3RhdHVzLnJ1bk1ha2VEYXRhKSxmZSgpLE1lKCJuZ0lmIiwhMT09PWEuYXV0b0RlcGxveVN0YXR1cy5ydW5NYWtlRGF0YSl9fWZ1bmN0aW9uIE1L'@;
put 'ZShjLGwpezEmYyYmR3QoMCwiY2xyLWljb24iLDMzKX1mdW5jdGlvbiB4S2UoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtzaSgwKSxkZSgxLCJwIiwyMiksTGUoMiwiRG9uZSIpLGhlKCksR3QoMywiaHIiLDIzKSxndCg0LF9LZSw1LDIsImRpdiIsMjQpKDUsU0tlLDUsMiwiZGl2IiwyNCks'@;
put 'R3QoNiwiaHIiLDIzKSxkZSg3LCJkaXYiLDI1KSg4LCJidXR0b24iLDI2KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KFJlKDIpLm5hdmlnYXRlVG9Ib21lKCkpfSksZ3QoOSxNS2UsMSwwLCJjbHItaWNvbiIsMjcpLExlKDEwLCIgTEFVTkNIICIpLGhlKCksZGUoMTEs'@;
put 'ImJ1dHRvbiIsMjgpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPVJlKDIpO3JldHVybiBDdChoLmRvd25sb2FkRmlsZShoLm1ha2VEYXRhUmVzcG9uc2UsImNyZWF0ZS1kYXRhYmFzZS1sb2ciLCJ0eHQiKSl9KSxMZSgxMiwiIERvd25sb2FkIGxvZyAiKSxoZSgpKCksR3Qo'@;
put 'MTMsImhyIiwyMyksZGUoMTQsImRpdiIsMjUpKDE1LCJidXR0b24iLDI5KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1SZSgyKTtyZXR1cm4gaC5hdXRvZGVwbG95aW5nPSExLEN0KGguYXV0b2RlcGxveURvbmU9ITEpfSksTGUoMTYsIiBDbG9zZSAiKSxoZSgpLGRlKDE3'@;
put 'LCJidXR0b24iLDI5KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KFJlKDIpLm9wZW5TYXNSZXF1ZXN0c01vZGFsKCkpfSksTGUoMTgsIiBTQVMgUmVxdWVzdHMgIiksaGUoKSgpLGxpKCl9aWYoMiZjKXtjb25zdCBhPVJlKDIpO2ZlKDQpLE1lKCJuZ0lmIixudWxsIT09'@;
put 'YS5hdXRvRGVwbG95U3RhdHVzLmRlcGxveVNlcnZpY2VQYWNrKSxmZSgpLE1lKCJuZ0lmIixudWxsIT09YS5hdXRvRGVwbG95U3RhdHVzLnJ1bk1ha2VEYXRhKSxmZSg0KSxNZSgibmdJZiIsITE9PT1hLmF1dG9EZXBsb3lTdGF0dXMuZGVwbG95U2VydmljZVBhY2t8fCExPT09YS5hdXRvRGVw'@;
put 'bG95U3RhdHVzLnJ1bk1ha2VEYXRhKX19ZnVuY3Rpb24gRUtlKGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2IiwxOSkoMSwiZGl2IiwyMCksZ3QoMix2S2UsNSwwLCJuZy1jb250YWluZXIiLDEyKSgzLHhLZSwxOSwzLCJuZy1jb250YWluZXIiLDEyKSxoZSgpKCkpLDImYyl7Y29uc3QgYT1SZSgp'@;
put 'O2ZlKDIpLE1lKCJuZ0lmIiwhYS5hdXRvZGVwbG95RG9uZSksZmUoKSxNZSgibmdJZiIsYS5hdXRvZGVwbG95RG9uZSl9fWZ1bmN0aW9uIFRLZShjLGwpe2lmKDEmYyYmKGRlKDAsIm9wdGlvbiIsMzYpLExlKDEpLGhlKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtNZSgidmFsdWUiLGEu'@;
put 'aWQpLGZlKCksRHIoIiAiLGEubmFtZSwiICIpfX1mdW5jdGlvbiBBS2UoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJzZWxlY3QiLDM0KSxnaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1SZSgpO3JldHVybiBtaShmLnNlbGVjdGVkQWRtaW5Hcm91'@;
put 'cCxoKXx8KGYuc2VsZWN0ZWRBZG1pbkdyb3VwPWgpLEN0KGgpfSksZ3QoMSxUS2UsMiwyLCJvcHRpb24iLDM1KSxoZSgpfWlmKDImYyl7Y29uc3QgYT1SZSgpO3BpKCJuZ01vZGVsIixhLnNlbGVjdGVkQWRtaW5Hcm91cCksZmUoKSxNZSgibmdGb3JPZiIsYS5hZG1pbkdyb3Vwcyl9fWZ1bmN0'@;
put 'aW9uIGtLZShjLGwpezEmYyYmR3QoMCwiY2xyLXNwaW5uZXIiLDM3KX1mdW5jdGlvbiBES2UoYyxsKXtpZigxJmMmJihkZSgwLCJvcHRpb24iLDM2KSxMZSgxKSxoZSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7TWUoInZhbHVlIixhLmlkKSxmZSgpLERyKCIgIixhLm5hbWUsIiAiKX19'@;
put 'ZnVuY3Rpb24gSUtlKGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwic2VsZWN0IiwzNCksRnQoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe3JldHVybiB3dChhKSxDdChSZSgpLm9uQ29tcHV0ZUNvbnRleHRDaGFuZ2UoaCkpfSksZ2koIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9u'@;
put 'KGgpe3d0KGEpO2NvbnN0IGY9UmUoKTtyZXR1cm4gbWkoZi5zZWxlY3RlZENvbXB1dGVDb250ZXh0LGgpfHwoZi5zZWxlY3RlZENvbXB1dGVDb250ZXh0PWgpLEN0KGgpfSksZ3QoMSxES2UsMiwyLCJvcHRpb24iLDM1KSxoZSgpfWlmKDImYyl7Y29uc3QgYT1SZSgpO3BpKCJuZ01vZGVsIixh'@;
put 'LnNlbGVjdGVkQ29tcHV0ZUNvbnRleHQpLGZlKCksTWUoIm5nRm9yT2YiLGEuY29tcHV0ZUNvbnRleHRzKX19ZnVuY3Rpb24gUktlKGMsbCl7MSZjJiZHdCgwLCJjbHItc3Bpbm5lciIsMzcpfWZ1bmN0aW9uIExLZShjLGwpe2lmKDEmYyYmKHNpKDApLGRlKDEsImxhYmVsIiwyKSxMZSgyLCJS'@;
put 'dW5uaW5nIGFzIHVzZXI6IiksaGUoKSxkZSgzLCJkaXYiLDMpKDQsImRpdiIsNCkoNSwicCIsNSksTGUoNiksaGUoKSgpKCksbGkoKSksMiZjKXtjb25zdCBhPVJlKCk7ZmUoNiksd3IoYS5ydW5uaW5nQXNVc2VyKX19bGV0IE9LZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYs'@;
put 'dixNKXt0aGlzLmV2ZW50U2VydmljZT1hLHRoaXMuZGVwbG95U2VydmljZT1kLHRoaXMuc2FzU2VydmljZT1oLHRoaXMuc2FzVml5YVNlcnZpY2U9Zix0aGlzLmxvZ2dlclNlcnZpY2U9dix0aGlzLmhlbHBlclNlcnZpY2U9TSx0aGlzLnNhc0pzQ29uZmlnPW5ldyBtaC5TQVNqc0NvbmZpZyx0'@;
put 'aGlzLmFwcExvYz0iIix0aGlzLmRjUGF0aD0iIix0aGlzLnNlbGVjdGVkQWRtaW5Hcm91cD0iIix0aGlzLm9uTmF2aWdhdGVUb0hvbWU9bmV3IEtyLHRoaXMuc2VsZWN0ZWRDb21wdXRlQ29udGV4dD0iIix0aGlzLm1ha2VEYXRhUmVzcG9uc2U9IiIsdGhpcy5qc29uRmlsZT1udWxsLHRoaXMu'@;
put 'YXV0b2RlcGxveWluZz0hMSx0aGlzLmF1dG9kZXBsb3lEb25lPSExLHRoaXMucmVjcmVhdGVEYXRhYmFzZU1vZGFsPSExLHRoaXMuaXNTdWJtaXR0aW5nSnNvbj0hMSx0aGlzLmlzSnNvblN1Ym1pdHRlZD0hMSx0aGlzLnJlY3JlYXRlRGF0YWJhc2U9ITAsdGhpcy5jcmVhdGVEYXRhYmFzZUxv'@;
put 'YWRpbmc9ITEsdGhpcy5hZG1pbkdyb3Vwc0xvYWRpbmc9ITEsdGhpcy5jdXJyZW50VXNlckluZm9Mb2FkaW5nPSExLHRoaXMuY29tcHV0ZUNvbnRleHRzTG9hZGluZz0hMSx0aGlzLmFkbWluR3JvdXBzPVtdLHRoaXMuY3VycmVudFVzZXJJbmZvPW51bGwsdGhpcy5jb21wdXRlQ29udGV4dHM9'@;
put 'W10sdGhpcy5hdXRvRGVwbG95U3RhdHVzPXtkZXBsb3lTZXJ2aWNlUGFjazpudWxsLHJ1bk1ha2VEYXRhOm51bGx9fW5nT25Jbml0KCl7dGhpcy5sb2FkRGF0YSgpfWxvYWREYXRhKCl7dmFyIGE9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7eWllbGQgYS5nZXRBZG1pbkdyb3VwcygpLHlp'@;
put 'ZWxkIGEuZ2V0Q29tcHV0ZUNvbnRleHRzKCkseWllbGQgYS5nZXRDdXJyZW50VXNlcigpLHNldFRpbWVvdXQoKCk9PnthLnNlbGVjdGVkQ29tcHV0ZUNvbnRleHQmJmEub25Db21wdXRlQ29udGV4dENoYW5nZShhLnNlbGVjdGVkQ29tcHV0ZUNvbnRleHQpfSw1MDApfSkoKX1nZXRDb21wdXRl'@;
put 'Q29udGV4dHMoKXt2YXIgYT10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXtyZXR1cm4gbmV3IFByb21pc2UoKGQsaCk9PnthLmNvbXB1dGVDb250ZXh0c0xvYWRpbmc9ITAsYS5zYXNWaXlhU2VydmljZS5nZXRDb21wdXRlQ29udGV4dHMoKS5zdWJzY3JpYmUoZj0+e2EuY29tcHV0ZUNvbnRl'@;
put 'eHRzTG9hZGluZz0hMTtjb25zdCB2PWYuaXRlbXMuZmluZChNPT4iU0FTIEpvYiBFeGVjdXRpb24gY29tcHV0ZSBjb250ZXh0Ij09PU0ubmFtZSk7diYmKGEuc2VsZWN0ZWRDb21wdXRlQ29udGV4dD12LmlkKSxhLmNvbXB1dGVDb250ZXh0cz1mLml0ZW1zLGQoKX0sZj0+e2goZil9KX0pfSko'@;
put 'KX1nZXRDdXJyZW50VXNlcigpe3ZhciBhPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe3JldHVybiBuZXcgUHJvbWlzZSgoZCxoKT0+e2EuY3VycmVudFVzZXJJbmZvTG9hZGluZz0hMCxhLnNhc1ZpeWFTZXJ2aWNlLmdldEN1cnJlbnRVc2VyKCkuc3Vic2NyaWJlKGY9PnthLmN1cnJlbnRV'@;
put 'c2VySW5mb0xvYWRpbmc9ITEsYS5jdXJyZW50VXNlckluZm89ZixhLmRjUGF0aD1gL2V4cG9ydC92aXlhL2hvbWVzLyR7Zi5pZH1gLGQoKX0sZj0+e2NvbnNvbGUuZXJyb3IoIkVycm9yIHdoaWxlIGdldHRpbmcgY3VycmVudCB1c2VyIixmKSxoKGYpfSl9KX0pKCl9Z2V0QWRtaW5Hcm91cHMo'@;
put 'KXt2YXIgYT10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXtyZXR1cm4gbmV3IFByb21pc2UoKGQsaCk9PnthLmFkbWluR3JvdXBzTG9hZGluZz0hMCxhLnNhc1ZpeWFTZXJ2aWNlLmdldEFkbWluR3JvdXBzKCkuc3Vic2NyaWJlKGY9PnthLmFkbWluR3JvdXBzTG9hZGluZz0hMSxhLmFkbWlu'@;
put 'R3JvdXBzPWYuaXRlbXMubWFwKHY9Pih7aWQ6di5pZCxuYW1lOnYubmFtZX0pKSxkKCl9KX0pfSkoKX1vbkNvbXB1dGVDb250ZXh0Q2hhbmdlKGEpe3ZhciBkPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe2Quc2FzVml5YVNlcnZpY2UuZ2V0Q29tcHV0ZUNvbnRleHRCeUlkKGEpLnN1YnNj'@;
put 'cmliZShoPT57ZC5ydW5uaW5nQXNVc2VyPWguYXR0cmlidXRlcyYmaC5hdHRyaWJ1dGVzLnJ1blNlcnZlckFzP2guYXR0cmlidXRlcy5ydW5TZXJ2ZXJBczpkLmN1cnJlbnRVc2VySW5mbz8uaWR8fCJ1bmtub3duIn0pfSkoKX1nZXRDb21wdXRlQ29udGV4dE5hbWUoYSl7cmV0dXJuIHRoaXMu'@;
put 'Y29tcHV0ZUNvbnRleHRzLmZpbmQoZD0+ZC5pZD09PWEpPy5uYW1lfHx2b2lkIDB9ZXhlY3V0ZUpzb24oKXt2YXIgYT10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXthLmlzU3VibWl0dGluZ0pzb249ITA7dHJ5e3lpZWxkIGEuc2FzSnMuZGVwbG95U2VydmljZVBhY2soYS5qc29uRmlsZSxh'@;
put 'LmRjQWRhcHRlclNldHRpbmdzPy5hcHBMb2Msdm9pZCAwLHZvaWQgMCwhMCksYS5hdXRvRGVwbG95U3RhdHVzLmRlcGxveVNlcnZpY2VQYWNrPSEwLGEuaXNKc29uU3VibWl0dGVkPSEwfWNhdGNoKGQpe2xldCBoPSIiO3JldHVybiBoPSJzdHJpbmciIT10eXBlb2YgZC5tZXNzYWdlP0pTT04u'@;
put 'c3RyaW5naWZ5KGQpLnJlcGxhY2UoL1xcL2dtLCIiKTpkLm1lc3NhZ2UsYS5hdXRvRGVwbG95U3RhdHVzLmRlcGxveVNlcnZpY2VQYWNrPSExLGEuZXZlbnRTZXJ2aWNlLnNob3dJbmZvTW9kYWwoIkRlcGxveSBlcnJvciIsYEV4Y2VwdGlvbjogXG4gJHsiIiE9PWg/aDpkfWApLGEuYXV0b2Rl'@;
put 'cGxveWluZz0hMSx2b2lkKGEuYXV0b2RlcGxveURvbmU9ITEpfWEuaXNTdWJtaXR0aW5nSnNvbj0hMX0pKCl9cnVuQXV0b0RlcGxveSgpe3ZhciBhPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKihkPSExKXthLmF1dG9kZXBsb3lpbmc9ITAsZCYmYS5leGVjdXRlSnNvbigpLGEucmVjcmVhdGVE'@;
put 'YXRhYmFzZT9hLmNyZWF0ZURhdGFiYXNlKCk6YS5hdXRvZGVwbG95RG9uZT0hMH0pLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1jcmVhdGVEYXRhYmFzZSgpe2xldCBhPXtmcm9tanM6W3tBRE1JTjp0aGlzLnNlbGVjdGVkQWRtaW5Hcm91cCxEQ1BBVEg6dGhpcy5kY1BhdGh9XX0sZD10aGlzLnNh'@;
put 'c0pzQ29uZmlnLmNvbnRleHROYW1lO2lmKHRoaXMuc2VsZWN0ZWRDb21wdXRlQ29udGV4dC5sZW5ndGgmJnRoaXMuY29tcHV0ZUNvbnRleHRzLmxlbmd0aCl7Y29uc3QgZj10aGlzLmdldENvbXB1dGVDb250ZXh0TmFtZSh0aGlzLnNlbGVjdGVkQ29tcHV0ZUNvbnRleHQpO2YmJihkPWYpfXRo'@;
put 'aXMuc2FzSnMucmVxdWVzdCgic2VydmljZXMvYWRtaW4vbWFrZWRhdGEiLGEse3VzZUNvbXB1dGVBcGk6bnVsbCxjb250ZXh0TmFtZTpkLGRlYnVnOiEwfSwoKT0+e3RoaXMuc2FzU2VydmljZS5zaG91bGRMb2dpbi5uZXh0KCEwKX0pLnRoZW4oZj0+e3RoaXMuYXV0b2RlcGxveURvbmU9ITA7'@;
put 'dHJ5e3RoaXMubWFrZURhdGFSZXNwb25zZT1KU09OLnN0cmluZ2lmeShmKX1jYXRjaHt0aGlzLm1ha2VEYXRhUmVzcG9uc2U9Zn10aGlzLmF1dG9EZXBsb3lTdGF0dXMucnVuTWFrZURhdGE9ISEoZi5yZXN1bHQmJmYucmVzdWx0Lmxlbmd0aD4wKSx0eXBlb2YgZi5zYXNqc0Fib3J0PCJ1IiYm'@;
put 'dGhpcy5ldmVudFNlcnZpY2Uuc2hvd0Fib3J0TW9kYWwoIm1ha2VkYXRhIixmLnNhc2pzQWJvcnRbMF0uTVNHLHtTWVNXQVJOSU5HVEVYVDpmLlNZU1dBUk5JTkdURVhULFNZU0VSUk9SVEVYVDpmLlNZU0VSUk9SVEVYVCxNQUM6Zi5zYXNqc0Fib3J0WzBdLk1BQ30pLHRoaXMuaGVscGVyU2Vy'@;
put 'dmljZS5pc1N0cmVhbWluZ1ZpeWEoKSYmdGhpcy51cGRhdGVJbmRleEh0bWxDb21wdXRlQ29udGV4dCgpfSkuY2F0Y2goZj0+e3RoaXMuZXZlbnRTZXJ2aWNlLnNob3dBYm9ydE1vZGFsKCJtYWtlZGF0YSIsSlNPTi5zdHJpbmdpZnkoZikpLHRoaXMuYXV0b0RlcGxveVN0YXR1cy5ydW5NYWtl'@;
put 'RGF0YT0hMSx0aGlzLmF1dG9kZXBsb3lEb25lPSEwO3RyeXt0aGlzLm1ha2VEYXRhUmVzcG9uc2U9SlNPTi5zdHJpbmdpZnkoZil9Y2F0Y2h7dGhpcy5tYWtlRGF0YVJlc3BvbnNlPWZ9fSl9dXBkYXRlSW5kZXhIdG1sQ29tcHV0ZUNvbnRleHQoKXt2YXIgYT10aGlzO3JldHVybiBlZShmdW5j'@;
put 'dGlvbiooKXtjb25zdCBkPWxvY2F0aW9uLnNlYXJjaC5zcGxpdCgiLyIpLnBvcCgpLGg9ZD8uaW5jbHVkZXMoIi4iKT9kOnZvaWQgMDtpZighaClyZXR1cm4gdm9pZCBhLmV2ZW50U2VydmljZS5zaG93QWJvcnRNb2RhbChudWxsLCJXZSBjb3VsZCBub3QgZmlndXJlIG91dCB0aGUgZmlsZSBu'@;
put 'YW1lIG9mIGBpbmRleC5odG1sYCBiYXNlZCBvbiB0aGUgdXJsLiIpO2NvbnN0IGY9eWllbGQgYS5zYXNTZXJ2aWNlLmdldEZpbGVDb250ZW50KGAke2EuYXBwTG9jfS9zZXJ2aWNlc2AsaCk7aWYoIWYpcmV0dXJuIHZvaWQgYS5sb2dnZXJTZXJ2aWNlLmVycm9yKGBGYWlsZWQgdG8gZ2V0ICR7'@;
put 'aH0gYXQgJHthLmFwcExvY30vc2VydmljZXNgKTtjb25zdCB2PWEuZ2V0Q29tcHV0ZUNvbnRleHROYW1lKGEuc2VsZWN0ZWRDb21wdXRlQ29udGV4dCk7aWYoIXYpcmV0dXJuIHZvaWQgYS5sb2dnZXJTZXJ2aWNlLmVycm9yKGBDb21wdXRlIGNvbnRleHQgbmFtZSBub3QgZm91bmQgZm9yIElE'@;
put 'OiAke2Euc2VsZWN0ZWRDb21wdXRlQ29udGV4dH0gfCBMaXN0OiAke0pTT04uc3RyaW5naWZ5KGEuY29tcHV0ZUNvbnRleHRzKX1gKTtjb25zdCBNPWYucmVwbGFjZSgvY29udGV4dG5hbWU9IlteIl0qIi9nLGBjb250ZXh0bmFtZT0iJHt2fSJgKTt5aWVsZCBhLnNhc1NlcnZpY2UudXBkYXRl'@;
put 'RmlsZUNvbnRlbnQoYCR7YS5hcHBMb2N9L3NlcnZpY2VzYCxoLE0pLmNhdGNoKEQ9PnthLmxvZ2dlclNlcnZpY2UuZXJyb3IoYEZhaWxlZCB0byB1cGRhdGUgRGF0YUNvbnRyb2xsZXIuaHRtbDogJHtEfWApfSl9KSgpfWRvd25sb2FkRmlsZShhLGQsaD0idHh0Iil7dGhpcy5kZXBsb3lTZXJ2'@;
put 'aWNlLmRvd25sb2FkRmlsZShhLGQsaCl9b25Kc29uRmlsZUNoYW5nZShhKXt2YXIgZD10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXtsZXQgaD1hLnRhcmdldC5maWxlc1swXTtkLmpzb25GaWxlPXlpZWxkIGQuZGVwbG95U2VydmljZS5yZWFkRmlsZShoKX0pKCl9cmVjcmVhdGVEYXRhYmFz'@;
put 'ZUNsaWNrZWQoYSl7ITA9PT1hLnRhcmdldC5jaGVja2VkJiYodGhpcy5yZWNyZWF0ZURhdGFiYXNlTW9kYWw9ITApfWNsZWFyVXBsb2FkSW5wdXQoYSl7dGhpcy5kZXBsb3lTZXJ2aWNlLmNsZWFyVXBsb2FkSW5wdXQoYSl9b3BlblNhc1JlcXVlc3RzTW9kYWwoKXt0aGlzLmV2ZW50U2Vydmlj'@;
put 'ZS5vcGVuUmVxdWVzdHNNb2RhbCgpfW5hdmlnYXRlVG9Ib21lKCl7dGhpcy5vbk5hdmlnYXRlVG9Ib21lLmVtaXQoKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShHZSh2YyksR2UoS2hlKSxHZShCcyksR2UoVFcpLEdlKFNkKSxHZShTdSkpfX1z'@;
put 'dGF0aWN7dGhpcy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siYXBwLWF1dG9tYXRpYy1kZXBsb3kiXV0saW5wdXRzOntzYXNKczoic2FzSnMiLHNhc0pzQ29uZmlnOiJzYXNKc0NvbmZpZyIsZGNBZGFwdGVyU2V0dGluZ3M6ImRjQWRhcHRlclNldHRpbmdzIixhcHBMb2M6ImFw'@;
put 'cExvYyIsZGNQYXRoOiJkY1BhdGgiLHNlbGVjdGVkQWRtaW5Hcm91cDoic2VsZWN0ZWRBZG1pbkdyb3VwIn0sb3V0cHV0czp7b25OYXZpZ2F0ZVRvSG9tZToib25OYXZpZ2F0ZVRvSG9tZSJ9LGRlY2xzOjQ0LHZhcnM6MTEsY29uc3RzOltbImNsYXNzIiwiYXV0by1kZXBsb3kiLDQsIm5nSWYi'@;
put 'XSxbMSwidGV4dC1jZW50ZXIiLCJteS0xNSJdLFsiZm9yIiwiZGNsb2MiLDEsIm10LTIwIiwiY2xyLWNvbnRyb2wtbGFiZWwiXSxbMSwibWItMTAiLCJjbHItY29udHJvbC1jb250YWluZXIiXSxbMSwiY2xyLWlucHV0LXdyYXBwZXIiXSxbMSwibXQtMCJdLFsxLCJtYi0xMCIsImNsci1jb250'@;
put 'cm9sLWNvbnRhaW5lciIsImRjLWxvYy1pbnB1dC13cmFwcGVyIl0sWzEsImNsci1pbnB1dC13cmFwcGVyIiwic21hbGwtbXQiXSxbImNscklucHV0IiwiIiwibmFtZSIsImRjbG9jIiwzLCJuZ01vZGVsQ2hhbmdlIiwibmdNb2RlbCJdLFsiY2xyU2VsZWN0IiwiIiwibmFtZSIsIm9wdGlvbnMi'@;
put 'LDMsIm5nTW9kZWwiLCJuZ01vZGVsQ2hhbmdlIiw0LCJuZ0lmIl0sWyJjbHJJbmxpbmUiLCIiLCJjbGFzcyIsInNwaW5uZXItc20iLDQsIm5nSWYiXSxbImZvciIsImNvbXB1dGVDb250ZXh0IiwxLCJtdC0yMCIsImNsci1jb250cm9sLWxhYmVsIl0sWzQsIm5nSWYiXSxbMSwiYnRuLWF1dG9k'@;
put 'ZXBsb3kiLCJidG4iLCJidG4tcHJpbWFyeSIsImQtaW5saW5lLWJsb2NrIiwibXItMTAiLDMsImNsaWNrIl0sWzMsImNsck1vZGFsT3BlbkNoYW5nZSIsImNsck1vZGFsT3BlbiIsImNsck1vZGFsQ2xvc2FibGUiXSxbMSwibW9kYWwtdGl0bGUiXSxbMSwibW9kYWwtYm9keSJdLFsxLCJtb2Rh'@;
put 'bC1mb290ZXIiXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1wcmltYXJ5IiwzLCJjbGljayJdLFsxLCJhdXRvLWRlcGxveSJdLFsxLCJzcGlubmVyLWJveCJdLFsxLCJzcGlubmVyIiwic3Bpbm5lci1tZCJdLFsxLCJtLTAiLCJhbGlnbi1zZWxmLXN0YXJ0Il0sWzEs'@;
put 'InctMTAwIl0sWyJjbGFzcyIsImRlcGxveS1zdGF0dXMtcm93Iiw0LCJuZ0lmIl0sWzEsImJ1dHRvbnMiXSxbMSwiYnRuIiwiYnRuLXByaW1hcnkiLCJtdC0xNSIsIm1yLTAiLDMsImNsaWNrIl0sWyJjbGFzcyIsImRlcGxveS1lcnJvciIsInNoYXBlIiwidGltZXMtY2lyY2xlIiw0LCJuZ0lm'@;
put 'Il0sWzEsImJ0biIsImJ0bi1wcmltYXJ5LW91dGxpbmUiLCJtdC0xNSIsIm1yLTAiLDMsImNsaWNrIl0sWzEsImJ0biIsImJ0bi1wcmltYXJ5LW91dGxpbmUiLCJtdC0xNSIsIm1yLTAiLCJhbGlnbi1zZWxmLWVuZCIsMywiY2xpY2siXSxbMSwiZGVwbG95LXN0YXR1cy1yb3ciXSxbImNsYXNz'@;
put 'IiwiZGVwbG95LXN1Y2Nlc3MiLCJzaGFwZSIsInN1Y2Nlc3Mtc3RhbmRhcmQiLDQsIm5nSWYiXSxbInNoYXBlIiwic3VjY2Vzcy1zdGFuZGFyZCIsMSwiZGVwbG95LXN1Y2Nlc3MiXSxbInNoYXBlIiwidGltZXMtY2lyY2xlIiwxLCJkZXBsb3ktZXJyb3IiXSxbImNsclNlbGVjdCIsIiIsIm5h'@;
put 'bWUiLCJvcHRpb25zIiwzLCJuZ01vZGVsQ2hhbmdlIiwibmdNb2RlbCJdLFszLCJ2YWx1ZSIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzMsInZhbHVlIl0sWyJjbHJJbmxpbmUiLCIiLDEsInNwaW5uZXItc20iXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZCxoKXsxJmQmJihndCgwLEVLZSw0LDIsImRp'@;
put 'diIsMCksZGUoMSwiaDQiLDEpLExlKDIsIlZpeWEgRGVwbG95IiksaGUoKSxHdCgzLCJociIpLGRlKDQsImxhYmVsIiwyKSxMZSg1LCJBcHAgTG9jIiksaGUoKSxkZSg2LCJkaXYiLDMpKDcsImRpdiIsNCkoOCwicCIsNSksTGUoOSksaGUoKSgpKCksZGUoMTAsImxhYmVsIiwyKSxMZSgxMSwi'@;
put 'REMgTG9jIiksaGUoKSxkZSgxMiwiZGl2Iiw2KSgxMywiZGl2Iiw3KSgxNCwiaW5wdXQiLDgpLGdpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbih2KXtyZXR1cm4gbWkoaC5kY1BhdGgsdil8fChoLmRjUGF0aD12KSx2fSksaGUoKSgpKCksZGUoMTUsImxhYmVsIiwyKSxMZSgxNiwiU0FTIEFk'@;
put 'bWluIGdyb3VwIiksaGUoKSxkZSgxNywiZGl2IiwzKSgxOCwiZGl2Iiw3KSxndCgxOSxBS2UsMiwyLCJzZWxlY3QiLDkpKDIwLGtLZSwxLDAsImNsci1zcGlubmVyIiwxMCksaGUoKSgpLGRlKDIxLCJsYWJlbCIsMTEpLExlKDIyLCJDb21wdXRlIENvbnRleHQiKSxoZSgpLGRlKDIzLCJkaXYi'@;
put 'LDMpKDI0LCJkaXYiLDcpLGd0KDI1LElLZSwyLDIsInNlbGVjdCIsOSkoMjYsUktlLDEsMCwiY2xyLXNwaW5uZXIiLDEwKSxoZSgpKCksZ3QoMjcsTEtlLDcsMSwibmctY29udGFpbmVyIiwxMiksR3QoMjgsImhyIiksZGUoMjksImJ1dHRvbiIsMTMpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXty'@;
put 'ZXR1cm4gaC5ydW5BdXRvRGVwbG95KCl9KSxMZSgzMCwiIERlcGxveVxuIiksaGUoKSxkZSgzMSwiY2xyLW1vZGFsIiwxNCksZ2koImNsck1vZGFsT3BlbkNoYW5nZSIsZnVuY3Rpb24odil7cmV0dXJuIG1pKGgucmVjcmVhdGVEYXRhYmFzZU1vZGFsLHYpfHwoaC5yZWNyZWF0ZURhdGFiYXNl'@;
put 'TW9kYWw9diksdn0pLGRlKDMyLCJoMyIsMTUpLExlKDMzLCJXYXJuaW5nIiksaGUoKSxkZSgzNCwiZGl2IiwxNiksTGUoMzUsIiBUaGlzIGFjdGlvbiB3aWxsIHJlY3JlYXRlIHRoZSBkYXRhYmFzZSAoaWYgaXQgZXhpc3RzKS4gRm9yIGFuIGluaXRpYWwgZGVwbG95bWVudCwgdGhpcyBpcyBl'@;
put 'eHBlY3RlZC4gSWYgdGhpcyBpcyBhIHJlLWRlcGxveW1lbnQsIHlvdSB3aWxsIGxvc2UgYW55IGV4aXN0aW5nIHRhYmxlcyBpbiAiKSxkZSgzNiwic3Ryb25nIiksTGUoMzcpLGhlKCksTGUoMzgsIi4gIiksaGUoKSxkZSgzOSwiZGl2IiwxNykoNDAsImJ1dHRvbiIsMTgpLEZ0KCJjbGljayIs'@;
put 'ZnVuY3Rpb24oKXtyZXR1cm4gaC5yZWNyZWF0ZURhdGFiYXNlTW9kYWw9ITEsaC5yZWNyZWF0ZURhdGFiYXNlPSExfSksTGUoNDEsIiBDYW5jZWwgIiksaGUoKSxkZSg0MiwiYnV0dG9uIiwxOCksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBoLnJlY3JlYXRlRGF0YWJhc2VNb2RhbD0h'@;
put 'MSxoLnJlY3JlYXRlRGF0YWJhc2U9ITB9KSxMZSg0MywiIE9rICIpLGhlKCkoKSgpKSwyJmQmJihNZSgibmdJZiIsaC5hdXRvZGVwbG95aW5nKSxmZSg5KSx3cihoLmFwcExvYyksZmUoNSkscGkoIm5nTW9kZWwiLGguZGNQYXRoKSxmZSg1KSxNZSgibmdJZiIsIWguYWRtaW5Hcm91cHNMb2Fk'@;
put 'aW5nKSxmZSgpLE1lKCJuZ0lmIixoLmFkbWluR3JvdXBzTG9hZGluZyksZmUoNSksTWUoIm5nSWYiLCFoLmNvbXB1dGVDb250ZXh0c0xvYWRpbmcpLGZlKCksTWUoIm5nSWYiLGguY29tcHV0ZUNvbnRleHRzTG9hZGluZyksZmUoKSxNZSgibmdJZiIsaC5ydW5uaW5nQXNVc2VyKSxmZSg0KSxw'@;
put 'aSgiY2xyTW9kYWxPcGVuIixoLnJlY3JlYXRlRGF0YWJhc2VNb2RhbCksTWUoImNsck1vZGFsQ2xvc2FibGUiLCExKSxmZSg2KSx3cihoLmRjUGF0aCkpfSxkZXBlbmRlbmNpZXM6W25zLGJhLEEyLGsyLHFsLFQyLG5sLCRzLEhsLG91LEt1LGRzLFoxLEU3LFJkXSxlbmNhcHN1bGF0aW9uOjJ9'@;
put 'KX19cmV0dXJuIGN9KSgpO2NvbnN0IGUkPSgpPT4oe3N0YW5kYWxvbmU6ITB9KTtmdW5jdGlvbiBQS2UoYyxsKXsxJmMmJihkZSgwLCJkaXYiLDYpKDEsInAiLDcpLExlKDIsIlBsZWFzZSBsb2cgaW4gZmlyc3QiKSxoZSgpLGRlKDMsImxhYmVsIiw4KSxMZSg0LCJVc2VybmFtZSIpLGhlKCks'@;
put 'ZGUoNSwiZGl2Iiw5KSg2LCJkaXYiLDEwKSxHdCg3LCJpbnB1dCIsMTEpLGhlKCkoKSxkZSg4LCJsYWJlbCIsMTIpLExlKDksIlBhc3N3b3JkIiksaGUoKSxkZSgxMCwiZGl2Iiw5KSgxMSwiZGl2IiwxMCksR3QoMTIsImlucHV0IiwxMyksaGUoKSgpLGRlKDEzLCJidXR0b24iLDE0KSxMZSgx'@;
put 'NCwiTG9nIGluIiksaGUoKSgpKX1mdW5jdGlvbiBGS2UoYyxsKXtpZigxJmMmJihkZSgwLCJvcHRpb24iLDM2KSxMZSgxKSxoZSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7TWUoInZhbHVlIixhLmlkKSxmZSgpLERyKCIgIixhLm5hbWUsIiAiKX19ZnVuY3Rpb24gSEtlKGMsbCl7aWYo'@;
put 'MSZjJiYoZGUoMCwic3BhbiIpLExlKDEpLGhlKCkpLDImYyl7Y29uc3QgYT1SZSgpLiRpbXBsaWNpdDtmZSgpLERyKCIoICIsYS5hdHRyaWJ1dGVzLnN5c1VzZXJJZCwiICkiKX19ZnVuY3Rpb24gTktlKGMsbCl7aWYoMSZjJiYoZGUoMCwib3B0aW9uIiwzNiksTGUoMSksZ3QoMixIS2UsMiwx'@;
put 'LCJzcGFuIiw1KSxlbCgzLCJqc29uIiksaGUoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O01lKCJ2YWx1ZSIsYS5uYW1lKSxmZSgpLERyKCIgIixhLm5hbWUsIiAiKSxmZSgpLE1lKCJuZ0lmIiwie30iIT1EYygzLDMsYS5hdHRyaWJ1dGVzKSl9fWZ1bmN0aW9uIFZLZShjLGwpezEmYyYm'@;
put 'KGRlKDAsInNwYW4iKSxMZSgxLCJKU09OIFN1Ym1pdHRlZCBTdWNjZXNzZnVsbHkiKSxoZSgpKX1mdW5jdGlvbiBCS2UoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJidXR0b24iLDM3KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KFJlKDIpLmRvd25sb2Fk'@;
put 'U2FzUHJlY29kZUZpbGUoKSl9KSxHdCgxLCJjbHItaWNvbiIsMzgpLGhlKCl9fWZ1bmN0aW9uIGpLZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO3NpKDApLGRlKDEsInAiLDM5KSxMZSgyLCJGaWxlIGV4ZWN1dGUgY29tcGxldGVkIiksaGUoKSxHdCgzLCJociIpLGRlKDQsImRpdiIpKDUs'@;
put 'ImJ1dHRvbiIsNDApLEZ0KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPVJlKDIpO3JldHVybiBDdChoLmRvd25sb2FkRmlsZShoLmpvYkxvZywiZXhlY3V0ZS1zY3JpcHQtbG9nIiwidHh0IikpfSksTGUoNiwiIERvd25sb2FkIGxvZyAiKSxoZSgpKCksbGkoKX19ZnVuY3Rpb24g'@;
put 'ektlKGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2Iiw0NCksTGUoMSksaGUoKSksMiZjKXtjb25zdCBhPVJlKDMpO2ZlKCksRHIoIiAiLGEubWFrZURhdGFSZXNwb25zZSwiICIpfX1mdW5jdGlvbiBVS2UoYyxsKXsxJmMmJihzaSgwKSxkZSgxLCJzcGFuIiwyNSksTGUoMiwiIFZhbGlkYXRpbmcg'@;
put 'ZGVwbG95Li4uICIpLGhlKCksZGUoMywic3BhbiIpLExlKDQsIiBWYWxpZGF0aW5nIGRlcGxveS4uLiAiKSxoZSgpLGxpKCkpfWZ1bmN0aW9uIFpLZShjLGwpezEmYyYmKHNpKDApLEd0KDEsImNsci1pY29uIiw0NiksZGUoMiwic3BhbiIpLExlKDMsIiBWYWxpZGF0aW9uIGZhaWxlZCAiKSxo'@;
put 'ZSgpLGxpKCkpfWZ1bmN0aW9uIFdLZShjLGwpezEmYyYmKHNpKDApLEd0KDEsImNsci1pY29uIiw0NyksZGUoMiwic3BhbiIpLExlKDMsIiBWYWxpZGF0aW9uIHN1Y2NlZWRlZCAiKSxoZSgpLGxpKCkpfWZ1bmN0aW9uIFlLZShjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIsNDUpLGd0KDEsVUtl'@;
put 'LDUsMCwibmctY29udGFpbmVyIiw1KSgyLFpLZSw0LDAsIm5nLWNvbnRhaW5lciIsNSkoMyxXS2UsNCwwLCJuZy1jb250YWluZXIiLDUpLGhlKCkpLDImYyl7Y29uc3QgYT1SZSgzKTtmZSgpLE1lKCJuZ0lmIixhLmlzVmFsaWRhdGluZyksZmUoKSxNZSgibmdJZiIsIWEuaXNWYWxpZGF0aW5n'@;
put 'JiYiZXJyb3IiPT09YS52YWxpZGF0aW9uU3RhdGUpLGZlKCksTWUoIm5nSWYiLCFhLmlzVmFsaWRhdGluZyYmInN1Y2Nlc3MiPT09YS52YWxpZGF0aW9uU3RhdGUpfX1mdW5jdGlvbiBHS2UoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtzaSgwKSxkZSgxLCJwIiwzOSksTGUoMiwiQ3JlYXRl'@;
put 'IERhdGFiYXNlIENvbXBsZXRlZCIpLGhlKCksR3QoMywiaHIiKSxndCg0LHpLZSwyLDEsImRpdiIsNDEpLGRlKDUsImJ1dHRvbiIsNDIpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoUmUoMikubmF2aWdhdGVUb0hvbWUoKSl9KSxMZSg2LCIgTGV0J3MgZ2V0IHN0YXJ0'@;
put 'ZWQgIiksaGUoKSxkZSg3LCJidXR0b24iLDQyKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1SZSgyKTtyZXR1cm4gQ3QoaC5kb3dubG9hZEZpbGUoaC5tYWtlRGF0YVJlc3BvbnNlLCJjcmVhdGUtZGF0YWJhc2UtbG9nIiwidHh0IikpfSksTGUoOCwiIERvd25sb2FkIGxv'@;
put 'ZyAiKSxoZSgpLGRlKDksImJ1dHRvbiIsNDIpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoUmUoMikudmFsaWRhdGVEZXBsb3koKSl9KSxMZSgxMCwiIFZhbGlkYXRlICIpLGhlKCksZ3QoMTEsWUtlLDQsMywiZGl2Iiw0MyksbGkoKX1pZigyJmMpe2NvbnN0IGE9UmUo'@;
put 'Mik7ZmUoNCksTWUoIm5nSWYiLGEubWFrZURhdGFSZXNwb25zZS5sZW5ndGg+MCksZmUoNyksTWUoIm5nSWYiLCJub25lIiE9PWEudmFsaWRhdGlvblN0YXRlfHxhLmlzVmFsaWRhdGluZyl9fWZ1bmN0aW9uICRLZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO3NpKDApLGRlKDEsImZvcm0i'@;
put 'KSgyLCJkaXYiLDE1KSgzLCJsYWJlbCIsMTYpLExlKDQsIkFkbWluIGdyb3VwIiksaGUoKSxkZSg1LCJkaXYiLDE3KSg2LCJkaXYiLDE4KSg3LCJzZWxlY3QiLDE5KSxnaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1SZSgpO3JldHVybiBtaShmLnNlbGVjdGVk'@;
put 'QWRtaW5Hcm91cCxoKXx8KGYuc2VsZWN0ZWRBZG1pbkdyb3VwPWgpLEN0KGgpfSksZ3QoOCxGS2UsMiwyLCJvcHRpb24iLDIwKSxoZSgpKCkoKSgpLGRlKDksImRpdiIsMTUpKDEwLCJkaXYiKSgxMSwibGFiZWwiLDE2KSxMZSgxMiwiQ29udGV4dCIpLGhlKCksZGUoMTMsImRpdiIsMTcpKDE0'@;
put 'LCJkaXYiLDE4KSgxNSwic2VsZWN0IiwyMSksZ2koIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9UmUoKTtyZXR1cm4gbWkoZi5zZWxlY3RlZENvbnRleHQsaCl8fChmLnNlbGVjdGVkQ29udGV4dD1oKSxDdChoKX0pLGd0KDE2LE5LZSw0LDUsIm9wdGlvbiIsMjAp'@;
put 'LGhlKCkoKSgpLGRlKDE3LCJidXR0b24iLDIyKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KFJlKCkuZXhlY3V0YWJsZUNvbnRleHQoKSl9KSxHdCgxOCwiY2xyLWljb24iLDIzKSxoZSgpKCksZGUoMTksImRpdiIsMjQpKDIwLCJzcGFuIiwyNSksTGUoMjEsIiBMb2Fk'@;
put 'aW5nIGNvbnRleHRzLi4uICIpLGhlKCksZGUoMjIsInNwYW4iKSxMZSgyMywiIExvYWRpbmcgY29udGV4dHMuLi4gIiksaGUoKSgpLGRlKDI0LCJsYWJlbCIsMjYpLExlKDI1LCJEQyBMb2MiKSxoZSgpLGRlKDI2LCJkaXYiLDkpKDI3LCJkaXYiLDEwKSgyOCwiaW5wdXQiLDI3KSxnaSgibmdN'@;
put 'b2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1SZSgpO3JldHVybiBtaShmLmRjUGF0aCxoKXx8KGYuZGNQYXRoPWgpLEN0KGgpfSksRnQoImZvY3Vzb3V0IixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChSZSgpLnNhdmVEY1BhdGgoKSl9KSxoZSgpKCkoKSxkZSgyOSwi'@;
put 'cCIsMjgpLExlKDMwLCIgU2VsZWN0IEpTT04gZmlsZSB0byB1cGxvYWQgKGpzb24gYnVpbGQgZmlsZSBwcmVsb2FkZWQpOiAiKSxoZSgpLGRlKDMxLCJkaXYiLDI5KSgzMiwiaW5wdXQiLDMwKSxGdCgiY2xpY2siLGZ1bmN0aW9uKGgpe3JldHVybiB3dChhKSxDdChSZSgpLmNsZWFyVXBsb2Fk'@;
put 'SW5wdXQoaCkpfSkoImNoYW5nZSIsZnVuY3Rpb24oaCl7cmV0dXJuIHd0KGEpLEN0KFJlKCkub25Kc29uRmlsZUNoYW5nZShoKSl9KSxoZSgpKCksZGUoMzMsImRpdiIsMzEpKDM0LCJidXR0b24iLDMyKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KFJlKCkuZXhlY3V0'@;
put 'ZUpzb24oKSl9KSxMZSgzNSwiIFNVQk1JVCBKU09OICIpLGhlKCksZ3QoMzYsVktlLDIsMCwic3BhbiIsNSksaGUoKSxkZSgzNywicCIsMjgpLExlKDM4LCJTZWxlY3QgU0FTIGZpbGUgdG8gdXBsb2FkOiIpLGhlKCksZGUoMzksImRpdiIsMjkpKDQwLCJpbnB1dCIsMzApLEZ0KCJjbGljayIs'@;
put 'ZnVuY3Rpb24oaCl7cmV0dXJuIHd0KGEpLEN0KFJlKCkuY2xlYXJVcGxvYWRJbnB1dChoKSl9KSgiY2hhbmdlIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPVJlKCk7cmV0dXJuIGYub25TYXNGaWxlQ2hhbmdlKGgpLEN0KGYuZG93bmxvYWRGaWxlQnRuPSEwKX0pLGhlKCksZ3QoNDEsQktl'@;
put 'LDIsMCwiYnV0dG9uIiwzMyksaGUoKSxkZSg0MiwiZGl2IiwzMSkoNDMsImJ1dHRvbiIsMzQpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoUmUoKS5leGVjdXRlU0FTKCkpfSksTGUoNDQsIiBTVUJNSVQgIiksaGUoKSgpKCksZ3QoNDUsaktlLDcsMCwibmctY29udGFp'@;
put 'bmVyIiw1KSxkZSg0NiwiYnV0dG9uIiwzNSksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChSZSgpLmNyZWF0ZURhdGFiYXNlKCkpfSksTGUoNDcsIiBDcmVhdGUgRGF0YWJhc2UgIiksaGUoKSxndCg0OCxHS2UsMTIsMiwibmctY29udGFpbmVyIiw1KSxoZSgpLGxpKCl9'@;
put 'aWYoMiZjKXtjb25zdCBhPVJlKCk7ZmUoNykscGkoIm5nTW9kZWwiLGEuc2VsZWN0ZWRBZG1pbkdyb3VwKSxNZSgibmdNb2RlbE9wdGlvbnMiLEdzKDE5LGUkKSksZmUoKSxNZSgibmdGb3JPZiIsYS5hZG1pbkdyb3VwcyksZmUoMiksVHIoImhpZGRlbiIsYS5jb250ZXh0c0xvYWRpbmcpLGZl'@;
put 'KDUpLHBpKCJuZ01vZGVsIixhLnNlbGVjdGVkQ29udGV4dCksTWUoIm5nTW9kZWxPcHRpb25zIixHcygyMCxlJCkpLGZlKCksTWUoIm5nRm9yT2YiLGEuYWxsQ29udGV4dHMpLGZlKDMpLFRyKCJoaWRkZW4iLCFhLmNvbnRleHRzTG9hZGluZyksZmUoOSkscGkoIm5nTW9kZWwiLGEuZGNQYXRo'@;
put 'KSxNZSgibmdNb2RlbE9wdGlvbnMiLEdzKDIxLGUkKSksZmUoNiksTWUoImNsckxvYWRpbmciLGEuaXNTdWJtaXR0aW5nSnNvbiksZmUoMiksTWUoIm5nSWYiLGEuaXNKc29uU3VibWl0dGVkKSxmZSg1KSxNZSgibmdJZiIsYS5kb3dubG9hZEZpbGVCdG4pLGZlKDIpLE1lKCJjbHJMb2FkaW5n'@;
put 'IixhLmV4ZWN1dGluZ1NjcmlwdCksZmUoMiksTWUoIm5nSWYiLGEuam9iTG9nLmxlbmd0aD4wKSxmZSgpLE1lKCJjbHJMb2FkaW5nIixhLmNyZWF0ZURhdGFiYXNlTG9hZGluZyksZmUoMiksTWUoIm5nSWYiLGEubWFrZURhdGFSZXNwb25zZS5sZW5ndGg+MCl9fWxldCBLS2U9KCgpPT57Y2xh'@;
put 'c3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmKXt0aGlzLnNhc1NlcnZpY2U9YSx0aGlzLmV2ZW50U2VydmljZT1kLHRoaXMubG9nZ2VyU2VydmljZT1oLHRoaXMuZGVwbG95U2VydmljZT1mLHRoaXMuc2FzSnNDb25maWc9bmV3IG1oLlNBU2pzQ29uZmlnLHRoaXMub25OYXZpZ2F0ZVRvSG9tZT1u'@;
put 'ZXcgS3IsdGhpcy5uZWVkc0xvZ2luPSExLHRoaXMuYWRtaW5Hcm91cHM9W10sdGhpcy5hbGxDb250ZXh0cz1bXSx0aGlzLmFwcExvYz0iIix0aGlzLmRjUGF0aD0iIix0aGlzLnNlbGVjdGVkQWRtaW5Hcm91cD0iIix0aGlzLnNlbGVjdGVkQ29udGV4dD0iIix0aGlzLmpvYkxvZz0iIix0aGlz'@;
put 'Lm1ha2VEYXRhUmVzcG9uc2U9IiIsdGhpcy5saW5lc09mQ29kZT1bXSx0aGlzLmZpbGVOYW1lPSIiLHRoaXMucHJlbG9hZGVkRmlsZT0hMCx0aGlzLmV4ZWN1dGVTQVNFbmFibGVkPSExLHRoaXMuY29udGV4dHNMb2FkaW5nPSExLHRoaXMuY3JlYXRlRGF0YWJhc2VMb2FkaW5nPSExLHRoaXMu'@;
put 'ZXhlY3V0aW5nU2NyaXB0PSExLHRoaXMuZG93bmxvYWRGaWxlQnRuPSExLHRoaXMuaXNWYWxpZGF0aW5nPSExLHRoaXMuanNvbkZpbGU9bnVsbCx0aGlzLmlzU3VibWl0dGluZ0pzb249ITEsdGhpcy5pc0pzb25TdWJtaXR0ZWQ9ITEsdGhpcy52YWxpZGF0aW9uU3RhdGU9Im5vbmUifW5nT25J'@;
put 'bml0KCl7fWV4ZWN1dGFibGVDb250ZXh0KCl7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe30pKCl9Y2xlYXJVcGxvYWRJbnB1dChhKXt0aGlzLmRlcGxveVNlcnZpY2UuY2xlYXJVcGxvYWRJbnB1dChhKX1vblNhc0ZpbGVDaGFuZ2UoYSl7dGhpcy5wcmVsb2FkZWRGaWxlPSExO2xldCBkPWEudGFy'@;
put 'Z2V0LmZpbGVzWzBdO3RoaXMuZmlsZU5hbWU9ZC5uYW1lO2xldCBoPW5ldyBGaWxlUmVhZGVyO2gub25sb2FkPSgpPT57aC5yZXN1bHQmJih0aGlzLmxpbmVzT2ZDb2RlPWgucmVzdWx0LnNwbGl0KCJcbiIpLHRoaXMubGluZXNPZkNvZGU9dGhpcy5saW5lc09mQ29kZS5maWx0ZXIoZj0+IiIh'@;
put 'PT1mJiZudWxsIT09ZiksdGhpcy5leGVjdXRlU0FTRW5hYmxlZD0hMCx0aGlzLmFkZFByZWNvZGVMaW5lcygpKX0saC5yZWFkQXNUZXh0KGQpfW9uSnNvbkZpbGVDaGFuZ2UoYSl7dmFyIGQ9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7bGV0IGg9YS50YXJnZXQuZmlsZXNbMF07ZC5qc29u'@;
put 'RmlsZT15aWVsZCBkLmRlcGxveVNlcnZpY2UucmVhZEZpbGUoaCl9KSgpfWFkZFByZWNvZGVMaW5lcygpe3RoaXMubGluZXNPZkNvZGUudW5zaGlmdChgJWxldCBjb250ZXh0PSR7dGhpcy5zZWxlY3RlZENvbnRleHR9O2AsYCVsZXQgYXBwTG9jPSR7dGhpcy5hcHBMb2N9O2AsYCVsZXQgYWRt'@;
put 'aW49JHt0aGlzLnNlbGVjdGVkQWRtaW5Hcm91cH07YCxgJWxldCBkY3BhdGg9JHt0aGlzLmRjUGF0aH07YCl9ZG93bmxvYWRTYXNQcmVjb2RlRmlsZSgpe2xldCBhPXRoaXMubGluZXNPZkNvZGUuam9pbigiXG4iKSxkPXRoaXMuZmlsZU5hbWUuc3BsaXQoIi4iKVswXTt0aGlzLmRvd25sb2Fk'@;
put 'RmlsZShhLGQsInNhcyIpfWRvd25sb2FkRmlsZShhLGQsaD0idHh0Iil7dGhpcy5kZXBsb3lTZXJ2aWNlLmRvd25sb2FkRmlsZShhLGQsaCl9c2F2ZURjUGF0aCgpe2xvY2FsU3RvcmFnZS5zZXRJdGVtKCJkZXBsb3lfZGNfbG9jIix0aGlzLmRjUGF0aCl9ZXhlY3V0ZUpzb24oKXt2YXIgYT10'@;
put 'aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXthLmlzU3VibWl0dGluZ0pzb249ITA7dHJ5e3lpZWxkIGEuc2FzSnMuZGVwbG95U2VydmljZVBhY2soYS5qc29uRmlsZSxhLmRjQWRhcHRlclNldHRpbmdzPy5hcHBMb2N8fCIiLHZvaWQgMCx2b2lkIDAsITApLGEuaXNKc29uU3VibWl0dGVkPSEw'@;
put 'fWNhdGNoKGQpe2xldCBoPSIiO3JldHVybiBoPSJzdHJpbmciIT10eXBlb2YgZC5tZXNzYWdlP0pTT04uc3RyaW5naWZ5KGQpLnJlcGxhY2UoL1xcL2dtLCIiKTpkLm1lc3NhZ2Usdm9pZCBhLmV2ZW50U2VydmljZS5zaG93SW5mb01vZGFsKCJEZXBsb3kgZXJyb3IiLGBFeGNlcHRpb246IFxu'@;
put 'ICR7IiIhPT1oP2g6ZH1gKX1hLmlzU3VibWl0dGluZ0pzb249ITF9KSgpfWV4ZWN1dGVTQVMoKXt2YXIgYT10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXthLmV4ZWN1dGluZ1NjcmlwdD0hMCxhLmpvYkxvZz0iIixhLm1ha2VEYXRhUmVzcG9uc2U9IiI7dHJ5e2xldCBkPXlpZWxkIGEuc2Fz'@;
put 'SnMuZXhlY3V0ZVNjcmlwdCh7ZmlsZU5hbWU6YS5maWxlTmFtZSxsaW5lc09mQ29kZTphLmxpbmVzT2ZDb2RlLGNvbnRleHROYW1lOmEuc2VsZWN0ZWRDb250ZXh0fSk7YS5sb2dnZXJTZXJ2aWNlLmxvZyhkKSwic3RyaW5nIj09dHlwZW9mIGQubG9nJiYoZC5sb2c9SlNPTi5wYXJzZShkLmxv'@;
put 'ZykpLCJlcnJvciI9PT1kLmpvYlN0YXR1cz9hbGVydCgiRXJyb3IhIik6YS5qb2JMb2c9ZC5sb2cuaXRlbXM/ZC5sb2cuaXRlbXMubWFwKGg9PmgubGluZSkuam9pbigiXG4iKTpKU09OLnN0cmluZ2lmeShkLmxvZyksYS5leGVjdXRpbmdTY3JpcHQ9ITF9Y2F0Y2h7YS5leGVjdXRpbmdTY3Jp'@;
put 'cHQ9ITF9fSkoKX1jcmVhdGVEYXRhYmFzZShhPSEwKXtpZihhKXtsZXQgZj10aGlzLnNhc1NlcnZpY2UuZ2V0U2FzanNDb25maWcoKS5zZXJ2ZXJVcmwrIi9TQVNKb2JFeGVjdXRpb24vP19wcm9ncmFtPSIrdGhpcy5kY0FkYXB0ZXJTZXR0aW5ncz8uYXBwTG9jfHwiL2FkbWluL21ha2VkYXRh'@;
put 'JkFETUlOPSIrdGhpcy5zZWxlY3RlZEFkbWluR3JvdXArIiZEQ1BBVEg9Iit0aGlzLmRjUGF0aCsiJl9kZWJ1Zz0xMzEiO3dpbmRvdy5vcGVuKGYsIl9ibGFuayIpfWVsc2UgdGhpcy5jcmVhdGVEYXRhYmFzZUxvYWRpbmc9ITAsdGhpcy5zYXNKcy5yZXF1ZXN0KCJzZXJ2aWNlcy9hZG1pbi9t'@;
put 'YWtlZGF0YSIse2Zyb21qczpbe0FETUlOOnRoaXMuc2VsZWN0ZWRBZG1pbkdyb3VwLERDUEFUSDp0aGlzLmRjUGF0aH1dfSx7dXNlQ29tcHV0ZUFwaTpudWxsLGNvbnRleHROYW1lOnRoaXMuc2FzSnNDb25maWcuY29udGV4dE5hbWUsZGVidWc6ITB9LCgpPT57dGhpcy5zYXNTZXJ2aWNlLnNo'@;
put 'b3VsZExvZ2luLm5leHQoITApfSkudGhlbihmPT57dHJ5e3RoaXMubWFrZURhdGFSZXNwb25zZT1KU09OLnN0cmluZ2lmeShmKX1jYXRjaHt0aGlzLm1ha2VEYXRhUmVzcG9uc2U9Zn10aGlzLmNyZWF0ZURhdGFiYXNlTG9hZGluZz0hMX0pLmNhdGNoKGY9Pnt0aGlzLmNyZWF0ZURhdGFiYXNl'@;
put 'TG9hZGluZz0hMTt0cnl7dGhpcy5tYWtlRGF0YVJlc3BvbnNlPUpTT04uc3RyaW5naWZ5KGYpfWNhdGNoe3RoaXMubWFrZURhdGFSZXNwb25zZT1mfX0pfW5hdmlnYXRlVG9Ib21lKCl7dGhpcy5vbk5hdmlnYXRlVG9Ib21lLmVtaXQoKX12YWxpZGF0ZURlcGxveSgpe3RoaXMuaXNWYWxpZGF0'@;
put 'aW5nPSEwLHRoaXMuc2FzU2VydmljZS5yZXF1ZXN0KCJwdWJsaWMvc3RhcnR1cHNlcnZpY2UiLG51bGwpLnRoZW4oYT0+e3RoaXMubG9nZ2VyU2VydmljZS5sb2coYS5hZGFwdGVyUmVzcG9uc2UpLHRoaXMudmFsaWRhdGlvblN0YXRlPWEuYWRhcHRlclJlc3BvbnNlLnNhc2xpYnM/InN1Y2Nl'@;
put 'c3MiOiJlcnJvciIsdGhpcy5pc1ZhbGlkYXRpbmc9ITF9KS5jYXRjaChhPT57dGhpcy5pc1ZhbGlkYXRpbmc9ITEsdGhpcy52YWxpZGF0aW9uU3RhdGU9ImVycm9yIn0pfWRlbGV0ZUtleXMoKXtsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSgiZGVwbG95X2RjX2xvYyIpfXN0YXRpY3t0aGlzLlx1'@;
put 'MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKEdlKEJzKSxHZSh2YyksR2UoU2QpLEdlKEtoZSkpfX1zdGF0aWN7dGhpcy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siYXBwLW1hbnVhbC1kZXBsb3kiXV0saW5wdXRzOntzYXNKczoic2FzSnMiLHNhc0pzQ29u'@;
put 'ZmlnOiJzYXNKc0NvbmZpZyIsZGNBZGFwdGVyU2V0dGluZ3M6ImRjQWRhcHRlclNldHRpbmdzIn0sb3V0cHV0czp7b25OYXZpZ2F0ZVRvSG9tZToib25OYXZpZ2F0ZVRvSG9tZSJ9LGRlY2xzOjksdmFyczozLGNvbnN0czpbWzEsImNhcmQtaGVhZGVyIiwicG9zaXRpb24tcmVsYXRpdmUiXSxb'@;
put 'MSwiZC1pbmxpbmUtYmxvY2siLCJtbC0xMCIsIm1iLTEwIiwibXQtMCJdLFsxLCJidG4iLCJidG4tcHJpbWFyeSIsImNsZWFyLW1lbW9yeS1idXR0b24iLCJwb3NpdGlvbi1hYnNvbHV0ZSIsMywiY2xpY2siXSxbMSwiY2FyZC1ibG9jayJdLFsiaWQiLCJsb2dpbkZvcm0iLCJjbGFzcyIsImQt'@;
put 'bm9uZSIsNCwibmdJZiJdLFs0LCJuZ0lmIl0sWyJpZCIsImxvZ2luRm9ybSIsMSwiZC1ub25lIl0sWzEsIm1iLTEwIl0sWyJmb3IiLCJ1c2VybmFtZSIsMSwiY2xyLWNvbnRyb2wtbGFiZWwiXSxbMSwibWItMTAiLCJjbHItY29udHJvbC1jb250YWluZXIiXSxbMSwiY2xyLWlucHV0LXdyYXBw'@;
put 'ZXIiXSxbInR5cGUiLCJ0ZXh0IiwiaWQiLCJ1c2VybmFtZSIsMSwiY2xyLWlucHV0Il0sWyJmb3IiLCJwYXNzd29yZCIsMSwiY2xyLWNvbnRyb2wtbGFiZWwiXSxbInR5cGUiLCJwYXNzd29yZCIsImlkIiwicGFzc3dvcmQiLDEsImNsci1pbnB1dCJdLFsiaWQiLCJsb2dpbkJ0biIsMSwiYnRu'@;
put 'IiwiYnRuLXByaW1hcnkiLCJkLW5vbmUiXSxbMSwiY2xyLWZvcm0tY29udHJvbCJdLFsiZm9yIiwic2VsZWN0LWZ1bGwiLDEsImNsci1jb250cm9sLWxhYmVsIl0sWzEsImNsci1jb250cm9sLWNvbnRhaW5lciJdLFsxLCJjbHItc2VsZWN0LXdyYXBwZXIiXSxbIm5hbWUiLCJzZWxlY3RlZEFk'@;
put 'bWluR3JvdXAiLCJpZCIsImFkbWluR3JvdXBzU2VsZWN0IiwxLCJjbHItc2VsZWN0IiwzLCJuZ01vZGVsQ2hhbmdlIiwibmdNb2RlbCIsIm5nTW9kZWxPcHRpb25zIl0sWzMsInZhbHVlIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbIm5hbWUiLCJzZWxlY3RlZENvbnRleHQiLDEsImNsci1zZWxl'@;
put 'Y3QiLDMsIm5nTW9kZWxDaGFuZ2UiLCJuZ01vZGVsIiwibmdNb2RlbE9wdGlvbnMiXSxbInR5cGUiLCJidXR0b24iLCJpZCIsImNvbnRleHRzLWJ0biIsMSwiYnRuIiwiYnRuLWljb24iLDMsImNsaWNrIl0sWyJzaGFwZSIsInBsYXkiXSxbMSwiZC1mbGV4Il0sWzEsInNwaW5uZXIiLCJzcGlu'@;
put 'bmVyLWlubGluZSIsIm1yLTEwIl0sWyJmb3IiLCJkY2xvYyIsMSwibXQtMjAiLCJjbHItY29udHJvbC1sYWJlbCJdLFsibmFtZSIsImRjUGF0aCIsInR5cGUiLCJ0ZXh0IiwiaWQiLCJkY2xvYyIsMSwiY2xyLWlucHV0IiwzLCJuZ01vZGVsQ2hhbmdlIiwiZm9jdXNvdXQiLCJuZ01vZGVsIiwi'@;
put 'bmdNb2RlbE9wdGlvbnMiXSxbMSwibXQtMTAiXSxbMSwiZC1mbGV4IiwiZmxleC1jb2x1bW4iXSxbInR5cGUiLCJmaWxlIiwzLCJjbGljayIsImNoYW5nZSJdLFsxLCJtdC0yMCIsImQtZmxleCIsImFsaWduLWl0ZW1zLWNlbnRlciJdLFsiaWQiLCIiLDEsIm10LTAiLDMsImNsaWNrIiwiY2xy'@;
put 'TG9hZGluZyJdLFsiY2xhc3MiLCJidG4gYnRuLXNtIGJ0bi1pY29uIG1pbi13LTAgdy00MCIsMywiY2xpY2siLDQsIm5nSWYiXSxbImlkIiwiZGVwbG95IiwxLCJtdC0wIiwzLCJjbGljayIsImNsckxvYWRpbmciXSxbMSwiYnRuIiwiYnRuLXByaW1hcnkiLCJtdC0xMCIsMywiY2xpY2siLCJj'@;
put 'bHJMb2FkaW5nIl0sWzMsInZhbHVlIl0sWzEsImJ0biIsImJ0bi1zbSIsImJ0bi1pY29uIiwibWluLXctMCIsInctNDAiLDMsImNsaWNrIl0sWyJzaGFwZSIsImRvd25sb2FkIl0sWzEsIm1iLTAiLCJtdC0xMCJdLFsxLCJidG4iLCJidG4tcHJpbWFyeSIsIm10LTAiLCJtci0yMCIsMywiY2xp'@;
put 'Y2siXSxbImNsYXNzIiwibG9nLXdyYXBwZXIiLDQsIm5nSWYiXSxbMSwiYnRuIiwiYnRuLXByaW1hcnkiLCJtdC0xNSIsMywiY2xpY2siXSxbImNsYXNzIiwidmFsaWRhdGlvbi1iYXIiLDQsIm5nSWYiXSxbMSwibG9nLXdyYXBwZXIiXSxbMSwidmFsaWRhdGlvbi1iYXIiXSxbInNoYXBlIiwi'@;
put 'ZXhjbGFtYXRpb24tY2lyY2xlIiwxLCJpcy1lcnJvciJdLFsic2hhcGUiLCJjaGVjay1jaXJjbGUiLDEsImlzLXN1Y2Nlc3MiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZCxoKXsxJmQmJihkZSgwLCJkaXYiLDApLExlKDEsIiBDb25maWd1cmF0b3IgIiksZGUoMiwicCIsMSksTGUoMyksaGUoKSxk'@;
put 'ZSg0LCJidXR0b24iLDIpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gaC5kZWxldGVLZXlzKCl9KSxMZSg1LCIgQ2xlYXIgbWVtb3J5ICIpLGhlKCkoKSxkZSg2LCJkaXYiLDMpLGd0KDcsUEtlLDE1LDAsImRpdiIsNCkoOCwkS2UsNDksMjIsIm5nLWNvbnRhaW5lciIsNSksaGUoKSks'@;
put 'MiZkJiYoZmUoMyksRHIoIkFwcCBMb2NhdGlvbjogIixoLmFwcExvYywiIiksZmUoNCksTWUoIm5nSWYiLGgubmVlZHNMb2dpbiksZmUoKSxNZSgibmdJZiIsIWgubmVlZHNMb2dpbikpfSxkZXBlbmRlbmNpZXM6W25zLGJhLGw3LEEyLGsyLHFsLFQyLG5sLG83LCRzLHlwLEhsLGowLFAyLGRz'@;
put 'LGVaXSxlbmNhcHN1bGF0aW9uOjJ9KX19cmV0dXJuIGN9KSgpO2Z1bmN0aW9uIHFLZShjLGwpezEmYyYmKGRlKDAsImRpdiIsMTUpLEd0KDEsInByb2dyZXNzIiksaGUoKSl9ZnVuY3Rpb24gWEtlKGMsbCl7aWYoMSZjJiYoZGUoMCwib3B0aW9uIiwxNiksTGUoMSksaGUoKSksMiZjKXtjb25z'@;
put 'dCBhPWwuJGltcGxpY2l0O01lKCJ2YWx1ZSIsYS5HUk9VUE5BTUUpLGZlKCksVXUoIiAiLGEuR1JPVVBOQU1FLCIgLSAiLGEuR1JPVVBERVNDLCIgIil9fWxldCBKS2U9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCl7dGhpcy5zYXNTZXJ2aWNlPWEsdGhpcy5zYXNqc1NlcnZpY2U9'@;
put 'ZCx0aGlzLmxvY2F0aW9uPWgsdGhpcy5zYXNKc0NvbmZpZz1uZXcgbWguU0FTanNDb25maWcsdGhpcy5vbk5hdmlnYXRlVG9Ib21lPW5ldyBLcix0aGlzLmRjRGlyZWN0b3J5PSIiLHRoaXMuZGNBZG1pbkdyb3VwPSJEQ0RFRkFVTFQiLHRoaXMuTUVUQVBFUlNPTj0ibi9hIix0aGlzLk1FVEFV'@;
put 'U0VSPSJuL2EiLHRoaXMuU1lTVVNFUklEPSJuL2EiLHRoaXMuU1lTSE9TVE5BTUU9Im4vYSIsdGhpcy5TWVNWTE9ORz0ibi9hIix0aGlzLmRjQWRtaW5Hcm91cExpc3Q9W10sdGhpcy5sb2FkaW5nPSExLHRoaXMuc2hvd0xvZ291dD0hMSx0aGlzLnRtcERpcmVjdG9yaWVzPXtsaW51eDoiL3Rt'@;
put 'cC9EYXRhQ29udHJvbGxlciIsd2luZG93czoiQzpcXERhdGFDb250cm9sbGVyIn19bmdPbkluaXQoKXt0aGlzLmdldFVzZXJHcm91cHMoKSx0aGlzLmdldFNlcnZlckluZm8oKX1nZXRTZXJ2ZXJJbmZvKCl7dGhpcy5zYXNqc1NlcnZpY2UuZ2V0U2VydmVySW5mbygpLnN1YnNjcmliZShhPT57'@;
put 'ImRlc2t0b3AiIT09YS5tb2RlJiYodGhpcy5zaG93TG9nb3V0PSEwKX0pfWdldFVzZXJHcm91cHMoKXt0aGlzLmxvYWRpbmc9ITAsdGhpcy5zYXNTZXJ2aWNlLnJlcXVlc3QoInVzZXJuYXYvdXNlcmdyb3Vwc2J5bWVtYmVyIixudWxsKS50aGVuKGE9Pnt0aGlzLk1FVEFQRVJTT049YS5hZGFw'@;
put 'dGVyUmVzcG9uc2UuTUZfR0VUVVNFUix0aGlzLlNZU1VTRVJJRD1hLmFkYXB0ZXJSZXNwb25zZS5TWVNVU0VSSUQsdGhpcy5TWVNIT1NUTkFNRT1hLmFkYXB0ZXJSZXNwb25zZS5TWVNIT1NUTkFNRSx0aGlzLlNZU1ZMT05HPWEuYWRhcHRlclJlc3BvbnNlLlNZU1ZMT05HLHRoaXMuZGNEaXJl'@;
put 'Y3Rvcnk9dGhpcy50bXBEaXJlY3Rvcmllc1tbIkwiLCJIIiwiQSIsIlMiXS5pbmNsdWRlcyhhLmFkYXB0ZXJSZXNwb25zZS5TWVNTQ1BMLnN1YnN0cmluZygwLDEpKT8ibGludXgiOiJ3aW5kb3dzIl0sdGhpcy5kY0FkbWluR3JvdXBMaXN0PWEuYWRhcHRlclJlc3BvbnNlLmdyb3Vwcyx0aGlz'@;
put 'LmRjQWRtaW5Hcm91cD10aGlzLmRjQWRtaW5Hcm91cExpc3RbMF0uR1JPVVBOQU1FLHRoaXMubG9hZGluZz0hMX0sYT0+e3RoaXMubG9hZGluZz0hMX0pfW1ha2VEYXRhKCl7bGV0IGQ9dGhpcy5zYXNTZXJ2aWNlLmdldEV4ZWN1dGlvblBhdGgoKTtjb25zdCBoPXRoaXMuc2FzSnNDb25maWcu'@;
put 'YXBwTG9jO2xldCBmPXRoaXMuc2FzSnNDb25maWcuc2VydmVyVXJsLHY9dGhpcy5kY0RpcmVjdG9yeTt0aGlzLnNhc0pzQ29uZmlnLnNlcnZlclR5cGU9PT1CMC5ZLlNhc2pzP3RoaXMuc2FzU2VydmljZS5zYXNqc01ha2VkYXRhQ2hlY2tpbmcoKS50aGVuKEQ9PntEJiYodGhpcy5sb2NhdGlv'@;
put 'bi5yZXBsYWNlU3RhdGUoIi8iKSxsb2NhdGlvbi5yZWxvYWQoKSl9KTp0aGlzLnNhc0pzQ29uZmlnLnNlcnZlclR5cGU9PT1CMC5ZLlNhczkmJihmPSIiLGQ9d2luZG93LmxvY2F0aW9uLm9yaWdpbitkKyIvIix2PWVuY29kZVVSSUNvbXBvbmVudCh0aGlzLmRjRGlyZWN0b3J5KSksd2luZG93'@;
put 'Lm9wZW4oYCR7Znx8IiJ9JHtkfT9fcHJvZ3JhbT0ke2h9L3NlcnZpY2VzL2FkbWluL21ha2VkYXRhJmFkbWluPSR7dGhpcy5kY0FkbWluR3JvdXB9JnBhdGg9JHt2fSBgLCJfYmxhbmsiKX1sb2dvdXQoKXt0aGlzLnNhc1NlcnZpY2UubG9nb3V0KCl9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1'@;
put 'bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoR2UoQnMpLEdlKFZjZSksR2UoZmgpKX19c3RhdGlje3RoaXMuXHUwMjc1Y21wPVZyKHt0eXBlOmMsc2VsZWN0b3JzOltbImFwcC1zYXNqcy1jb25maWd1cmF0b3IiXV0saW5wdXRzOntzYXNKczoic2FzSnMiLHNhc0pzQ29uZmlnOiJzYXNKc0Nv'@;
put 'bmZpZyIsZGNBZGFwdGVyU2V0dGluZ3M6ImRjQWRhcHRlclNldHRpbmdzIn0sb3V0cHV0czp7b25OYXZpZ2F0ZVRvSG9tZToib25OYXZpZ2F0ZVRvSG9tZSJ9LGRlY2xzOjQ0LHZhcnM6MTAsY29uc3RzOltbImNsYXNzIiwidGhpblByb2dyZXNzIHByb2dyZXNTdGF0aWMgcHJvZ3Jlc3MgbG9v'@;
put 'cCIsNCwibmdJZiJdLFsxLCJ0ZXh0LWNlbnRlciIsIm15LTE1Il0sWzEsImxpZ2h0Il0sWzEsIm0tMCJdLFsxLCJtLTAiLCJtdC0xMCJdLFsxLCJtdC0yMCIsImNsci1jb250cm9sLWxhYmVsIl0sWzEsIm1iLTEwIiwiY2xyLWNvbnRyb2wtY29udGFpbmVyIl0sWzEsImNsci1pbnB1dC13cmFw'@;
put 'cGVyIl0sWyJwbGFjZWhvbGRlciIsIlR5cGUgaW4gZGlyZWN0b3J5IiwxLCJjbHItaW5wdXQiLDMsIm5nTW9kZWxDaGFuZ2UiLCJuZ01vZGVsIl0sWzEsIm1iLTEwIiwibXQtMCIsInctNTB2dyJdLFsiY2xyU2VsZWN0IiwiIiwzLCJuZ01vZGVsQ2hhbmdlIiwibmdNb2RlbCJdLFszLCJ2YWx1'@;
put 'ZSIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzEsImNsci1mbGV4Il0sWzEsImJ0biIsImJ0bi1zdWNjZXNzIiwibXQtMTUiLCJ0ZXh0LWNlbnRlciIsMywiY2xpY2siXSxbMSwiY2FyZC10ZXh0IiwicGItMTAiXSxbMSwidGhpblByb2dyZXNzIiwicHJvZ3Jlc1N0YXRpYyIsInByb2dyZXNzIiwi'@;
put 'bG9vcCJdLFszLCJ2YWx1ZSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihkLGgpezEmZCYmKGd0KDAscUtlLDIsMCwiZGl2IiwwKSxkZSgxLCJoNCIsMSksTGUoMiwiU2FzanMgRGVwbG95IiksaGUoKSxHdCgzLCJociIsMiksZGUoNCwicCIsMyksTGUoNSwiIFRvIGNvbmZpZ3VyZSBEYXRhIENvbnRy'@;
put 'b2xsZXIgZm9yIFNBU1x4YTksIHBsZWFzZSBwcm92aWRlIHRoZSBmb2xsb3dpbmcgZGV0YWlsczpcbiIpLGhlKCksZGUoNiwicCIsNCksTGUoNywiIFBsZWFzZSBzcGVjaWZ5IGEgcGh5c2ljYWwgZGlyZWN0b3J5IChvbiB0aGUgIiksZGUoOCwic3Ryb25nIiksTGUoOSksaGUoKSxMZSgxMCwi'@;
put 'IGNvbXB1dGUgc2VydmVyKSBiZWxvdywgdG8gd2hpY2ggdXNlciAiKSxkZSgxMSwic3Ryb25nIiksTGUoMTIpLGhlKCksTGUoMTMsIiBjYW4gd3JpdGUsIG9uIGJlaGFsZiBvZiBEYXRhIENvbnRyb2xsZXIuXG4iKSxoZSgpLGRlKDE0LCJsYWJlbCIsNSksTGUoMTUsIkRDIFN0YWdpbmcgRGly'@;
put 'ZWN0b3J5IiksaGUoKSxkZSgxNiwiZGl2Iiw2KSgxNywiZGl2Iiw3KSgxOCwiaW5wdXQiLDgpLGdpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbih2KXtyZXR1cm4gbWkoaC5kY0RpcmVjdG9yeSx2KXx8KGguZGNEaXJlY3Rvcnk9diksdn0pLGhlKCkoKSgpLGRlKDE5LCJwIiw0KSxMZSgyMCwi'@;
put 'IEJlbG93IGFyZSB0aGUgbGlzdCBvZiBncm91cHMgdG8gd2hpY2ggeW91IGJlbG9uZy4gVGhlIGdyb3VwIHlvdSBzZWxlY3Qgd2lsbCBiZWNvbWUgdGhlIERhdGEgQ29udHJvbGxlciBBZG1pbiBHcm91cCwgYW5kIGV2ZXJ5b25lIGluIGl0IHdpbGwgaGF2ZSB1bnJlc3RyaWN0ZWQgYWNjZXNz'@;
put 'IHRvIERhdGEgQ29udHJvbGxlci5cbiIpLGhlKCksZGUoMjEsImxhYmVsIiw1KSxMZSgyMiwiRGF0YSBDb250cm9sbGVyIEFkbWluIGdyb3VwIiksaGUoKSxkZSgyMywiY2xyLXNlbGVjdC1jb250YWluZXIiLDkpKDI0LCJzZWxlY3QiLDEwKSxnaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24o'@;
put 'dil7cmV0dXJuIG1pKGguZGNBZG1pbkdyb3VwLHYpfHwoaC5kY0FkbWluR3JvdXA9diksdn0pLGd0KDI1LFhLZSwyLDMsIm9wdGlvbiIsMTEpLGhlKCkoKSxkZSgyNiwicCIsNCksTGUoMjcsIiBOb3csIGNyZWF0ZSB0aGUgdGFyZ2V0IGRpcmVjdG9yeSBhbmQgZGVwbG95IHRoZSBjb250cm9s'@;
put 'IGxpYnJhcnkgdXNpbmcgdGhlIGFkbWluIGdyb3VwIHNlbGVjdGVkIGFib3ZlOlxuIiksaGUoKSxkZSgyOCwiZGl2IiwxMikoMjksImJ1dHRvbiIsMTMpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gaC5tYWtlRGF0YSgpfSksTGUoMzAsIiBTVUJNSVQgIiksaGUoKSgpLEd0KDMxLCJo'@;
put 'ciIsMiksZGUoMzIsImRpdiIsMTQpKDMzLCJwIiksTGUoMzQsIllvdSBhcmUgY29ubmVjdGVkIHdpdGggdGhlIGZvbGxvd2luZyBjcmVkZW50aWFsczoiKSxoZSgpLGRlKDM1LCJ1bCIpKDM2LCJsaSIpLExlKDM3KSxoZSgpLGRlKDM4LCJsaSIpLExlKDM5KSxoZSgpLGRlKDQwLCJsaSIpLExl'@;
put 'KDQxKSxoZSgpLGRlKDQyLCJsaSIpLExlKDQzKSxoZSgpKCkoKSksMiZkJiYoTWUoIm5nSWYiLGgubG9hZGluZyksZmUoOSksRHIoIiAiLGguU1lTSE9TVE5BTUUsIiIpLGZlKDMpLHdyKGguU1lTVVNFUklEKSxmZSg2KSxwaSgibmdNb2RlbCIsaC5kY0RpcmVjdG9yeSksZmUoNikscGkoIm5n'@;
put 'TW9kZWwiLGguZGNBZG1pbkdyb3VwKSxmZSgpLE1lKCJuZ0Zvck9mIixoLmRjQWRtaW5Hcm91cExpc3QpLGZlKDEyKSxEcigiTUVUQVBFUlNPTjogIixoLk1FVEFQRVJTT04sIiIpLGZlKDIpLERyKCJTWVNVU0VSSUQ6ICIsaC5TWVNVU0VSSUQsIiIpLGZlKDIpLERyKCJTWVNIT1NUTkFNRTog'@;
put 'IixoLlNZU0hPU1ROQU1FLCIiKSxmZSgyKSxEcigiU1lTVkxPTkc6ICIsaC5TWVNWTE9ORywiIikpfSxkZXBlbmRlbmNpZXM6W25zLGJhLEEyLGsyLHFsLFQyLG5sLCRzLGRzLEU3LCR5XSxlbmNhcHN1bGF0aW9uOjJ9KX19cmV0dXJuIGN9KSgpO2Z1bmN0aW9uIFFLZShjLGwpe2lmKDEmYyl7'@;
put 'Y29uc3QgYT1MbigpO2RlKDAsImRpdiIsNCkoMSwiZGl2Iiw1KSxMZSgyLCJUZXJtcyBhbmQgQ29uZGl0aW9ucyIpLGhlKCksZGUoMywiZGl2Iiw2KSg0LCJkaXYiLDcpKDUsInAiLDgpLExlKDYsIiBUaGUgRGVtbyB2ZXJzaW9uIG9mIERhdGEgQ29udHJvbGxlciBpcyBmcmVlIGZvciBFVkFM'@;
put 'VUFUSU9OIHB1cnBvc2VzIG9ubHkuIEJlZm9yZSBwcm9jZWVkaW5nIHdpdGggY29uZmlndXJhdGlvbiwgcGxlYXNlIGNvbmZpcm0gdGhhdCB5b3UgaGF2ZSByZWFkLCB1bmRlcnN0b29kLCBhbmQgYWdyZWVkIHRvIHRoZSAiKSxkZSg3LCJhIiw5KSxMZSg4LCJEYXRhIENvbnRyb2xsZXIgZm9y'@;
put 'IFNBU1x4YTkgRXZhbHVhdGlvbiBBZ3JlZW1lbnQiKSxoZSgpLExlKDksIi4gIiksaGUoKSgpLEd0KDEwLCJociIsMTApLGRlKDExLCJjbHItY2hlY2tib3gtd3JhcHBlciIpKDEyLCJpbnB1dCIsMTEpLEZ0KCJjaGFuZ2UiLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KFJlKCkudGVybXNB'@;
put 'Z3JlZUNoYW5nZSgpKX0pLGhlKCksZGUoMTMsImxhYmVsIiksTGUoMTQsIkkgaGF2ZSByZWFkIGFuZCBhZ3JlZSB0byB0aGUgdGVybXMgb2YgdGhlICIpLGRlKDE1LCJhIiw5KSxMZSgxNiwiRGF0YSBDb250cm9sbGVyIGZvciBTQVNceGE5IEV2YWx1YXRpb24gQWdyZWVtZW50IiksaGUoKSgp'@;
put 'KCkoKSgpfX1mdW5jdGlvbiBlcWUoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJkaXYiLDE2KSgxLCJhcHAtYXV0b21hdGljLWRlcGxveSIsMTcpLEZ0KCJvbk5hdmlnYXRlVG9Ib21lIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChSZSgzKS5vbk5hdmlnYXRlVG9Ib21lKCkp'@;
put 'fSksaGUoKSgpfWlmKDImYyl7Y29uc3QgYT1SZSgzKTtmZSgpLE1lKCJzYXNKcyIsYS5zYXNKcykoInNhc0pzQ29uZmlnIixhLnNhc0pzQ29uZmlnKSgiZGNBZGFwdGVyU2V0dGluZ3MiLGEuZGNBZGFwdGVyU2V0dGluZ3MpKCJhcHBMb2MiLGEuYXBwTG9jKSgiZGNQYXRoIixhLmRjUGF0aCko'@;
put 'InNlbGVjdGVkQWRtaW5Hcm91cCIsYS5zZWxlY3RlZEFkbWluR3JvdXApfX1mdW5jdGlvbiB0cWUoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJkaXYiLDE4KSgxLCJhcHAtbWFudWFsLWRlcGxveSIsMTkpLEZ0KCJvbk5hdmlnYXRlVG9Ib21lIixmdW5jdGlvbigpe3JldHVybiB3'@;
put 'dChhKSxDdChSZSgzKS5vbk5hdmlnYXRlVG9Ib21lKCkpfSksaGUoKSgpfWlmKDImYyl7Y29uc3QgYT1SZSgzKTtmZSgpLE1lKCJzYXNKcyIsYS5zYXNKcykoInNhc0pzQ29uZmlnIixhLnNhc0pzQ29uZmlnKSgiZGNBZGFwdGVyU2V0dGluZ3MiLGEuZGNBZGFwdGVyU2V0dGluZ3MpfX1mdW5j'@;
put 'dGlvbiBucWUoYyxsKXtpZigxJmMmJihzaSgwKSxndCgxLGVxZSwyLDYsImRpdiIsMTQpKDIsdHFlLDIsMywiZGl2IiwxNSksbGkoKSksMiZjKXtjb25zdCBhPVJlKDIpO2ZlKCksTWUoIm5nSWYiLGEuYXV0b2RlcGxveSksZmUoKSxNZSgibmdJZiIsIWEuYXV0b2RlcGxveSl9fWZ1bmN0aW9u'@;
put 'IHJxZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO3NpKDApLGRlKDEsImRpdiIsMTYpKDIsImFwcC1zYXNqcy1jb25maWd1cmF0b3IiLDE5KSxGdCgib25OYXZpZ2F0ZVRvSG9tZSIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoUmUoMikub25OYXZpZ2F0ZVRvSG9tZSgpKX0pLGhlKCko'@;
put 'KSxsaSgpfWlmKDImYyl7Y29uc3QgYT1SZSgyKTtmZSgyKSxNZSgic2FzSnMiLGEuc2FzSnMpKCJzYXNKc0NvbmZpZyIsYS5zYXNKc0NvbmZpZykoImRjQWRhcHRlclNldHRpbmdzIixhLmRjQWRhcHRlclNldHRpbmdzKX19ZnVuY3Rpb24gaXFlKGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7'@;
put 'c2koMCksZGUoMSwiZGl2IiwxNikoMiwiYXBwLXNhc2pzLWNvbmZpZ3VyYXRvciIsMTkpLEZ0KCJvbk5hdmlnYXRlVG9Ib21lIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChSZSgyKS5vbk5hdmlnYXRlVG9Ib21lKCkpfSksaGUoKSgpLGxpKCl9aWYoMiZjKXtjb25zdCBhPVJlKDIpO2Zl'@;
put 'KDIpLE1lKCJzYXNKcyIsYS5zYXNKcykoInNhc0pzQ29uZmlnIixhLnNhc0pzQ29uZmlnKSgiZGNBZGFwdGVyU2V0dGluZ3MiLGEuZGNBZGFwdGVyU2V0dGluZ3MpfX1mdW5jdGlvbiBhcWUoYyxsKXtpZigxJmMmJihzaSgwLDEyKSxndCgxLG5xZSwzLDIsIm5nLWNvbnRhaW5lciIsMTMpKDIs'@;
put 'cnFlLDMsMywibmctY29udGFpbmVyIiwxMykoMyxpcWUsMywzLCJuZy1jb250YWluZXIiLDEzKSxsaSgpKSwyJmMpe2NvbnN0IGE9UmUoKTtNZSgibmdTd2l0Y2giLCEwKSxmZSgpLE1lKCJuZ1N3aXRjaENhc2UiLGEuc2FzSnNDb25maWcuc2VydmVyVHlwZT09PWEuU2VydmVyVHlwZS5TYXNW'@;
put 'aXlhKSxmZSgpLE1lKCJuZ1N3aXRjaENhc2UiLGEuc2FzSnNDb25maWcuc2VydmVyVHlwZT09PWEuU2VydmVyVHlwZS5TYXNqcyksZmUoKSxNZSgibmdTd2l0Y2hDYXNlIixhLnNhc0pzQ29uZmlnLnNlcnZlclR5cGU9PT1hLlNlcnZlclR5cGUuU2FzOSl9fWxldCBRaGU9KCgpPT57Y2xhc3Mg'@;
put 'Y3tjb25zdHJ1Y3RvcihhLGQsaCxmKXt0aGlzLmFwcFN0b3JlU2VydmljZT1hLHRoaXMuc2FzU2VydmljZT1kLHRoaXMubG9nZ2VyU2VydmljZT1oLHRoaXMucm91dGVyPWYsdGhpcy5zdGVwPTAsdGhpcy5hZG1pbkdyb3Vwcz1bXSx0aGlzLmNsaWVudF9pZD0iIix0aGlzLmNsaWVudF9zZWNy'@;
put 'ZXQ9IiIsdGhpcy5hcHBMb2M9IiIsdGhpcy5kY1BhdGg9IiIsdGhpcy5zZWxlY3RlZEFkbWluR3JvdXA9IiIsdGhpcy5hdXRvZGVwbG95PSEwLHRoaXMuanNvbkZpbGU9bnVsbCx0aGlzLnNhc0pzQ29uZmlnPW5ldyBtaC5TQVNqc0NvbmZpZyx0aGlzLlNlcnZlclR5cGU9QjAuWSx0aGlzLmRj'@;
put 'QWRhcHRlclNldHRpbmdzPXRoaXMuYXBwU3RvcmVTZXJ2aWNlLmdldERjQWRhcHRlclNldHRpbmdzKCksdGhpcy5yb3V0ZXIudXJsLmluY2x1ZGVzKCJtYW51YWxkZXBsb3kiKSYmKHRoaXMuYXV0b2RlcGxveT0hMSksdGhpcy5zYXNKcz10aGlzLnNhc1NlcnZpY2UuZ2V0U2FzanNJbnN0YW5j'@;
put 'ZSgpLHRoaXMuc2FzSnNDb25maWc9dGhpcy5zYXNTZXJ2aWNlLmdldFNhc2pzQ29uZmlnKCksdGhpcy5hcHBMb2M9dGhpcy5kY0FkYXB0ZXJTZXR0aW5ncz8uYXBwTG9jfHwiIix0aGlzLmNsaWVudF9pZD1sb2NhbFN0b3JhZ2UuZ2V0SXRlbSgiZGVwbG95X2NsaWVudF9pZCIpfHwiIix0aGlz'@;
put 'LmNsaWVudF9zZWNyZXQ9bG9jYWxTdG9yYWdlLmdldEl0ZW0oImRlcGxveV9zZWNyZXRfa2V5Iil8fCIiLHRoaXMuZGNQYXRoPWxvY2FsU3RvcmFnZS5nZXRJdGVtKCJkZXBsb3lfZGNfbG9jIil8fCIifW5nT25Jbml0KCl7dGhpcy5zZXREZXBsb3lEZWZhdWx0cygpfXNldERlcGxveURlZmF1'@;
put 'bHRzKCl7dGhpcy5kY1BhdGg9dGhpcy5kY0FkYXB0ZXJTZXR0aW5ncz8uZGNQYXRofHwiIix0aGlzLnNlbGVjdGVkQWRtaW5Hcm91cD10aGlzLmRjQWRhcHRlclNldHRpbmdzPy5hZG1pbkdyb3VwfHwiIix0aGlzLnNlbGVjdGVkQWRtaW5Hcm91cHx8KHRoaXMuc2VsZWN0ZWRBZG1pbkdyb3Vw'@;
put 'PSJTQVNBZG1pbmlzdHJhdG9ycyIpfXRlcm1zQWdyZWVDaGFuZ2UoKXt0aGlzLmF1dG9kZXBsb3l8fHRoaXMuZ2V0QWRtaW5Hcm91cHMoKSx0aGlzLnN0ZXArK31nZXRBZG1pbkdyb3Vwcygpe2ZldGNoKHRoaXMuc2FzSnNDb25maWcuc2VydmVyVXJsKyIvaWRlbnRpdGllcy9ncm91cHM/c29y'@;
put 'dEJ5PW5hbWUmbGltaXQ9NTAwMCIse2hlYWRlcnM6e0FjY2VwdDoiYXBwbGljYXRpb24vanNvbiJ9fSkudGhlbihhPT5hLnRleHQoKSkudGhlbihhPT57bGV0IGQ7dHJ5e2Q9SlNPTi5wYXJzZShhKX1jYXRjaChoKXtjb25zb2xlLmVycm9yKGgpfWQmJih0aGlzLmFkbWluR3JvdXBzPWQuaXRl'@;
put 'bXMsdGhpcy5zZWxlY3RlZEFkbWluR3JvdXA9dGhpcy5hZG1pbkdyb3Vwc1swXS5pZCl9KX1vbk5hdmlnYXRlVG9Ib21lKCl7d2luZG93Lm9wZW4obG9jYXRpb24uaHJlZi5zcGxpdCgiIyIpWzBdLCJfYmxhbmsiKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5l'@;
put 'dyhkfHxjKShHZShROCksR2UoQnMpLEdlKFNkKSxHZShMcykpfX1zdGF0aWN7dGhpcy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siYXBwLWRlcGxveSJdXSxob3N0QXR0cnM6WzEsImNvbnRlbnQtY29udGFpbmVyIl0sZGVjbHM6NCx2YXJzOjIsY29uc3RzOltbMSwiY29udGVu'@;
put 'dC1hcmVhIiwicG9zaXRpb24tcmVsYXRpdmUiXSxbMSwiY2xyLXJvdyJdLFsiaWQiLCJUQ1MiLCJjbGFzcyIsImNhcmQiLDQsIm5nSWYiXSxbMywibmdTd2l0Y2giLDQsIm5nSWYiXSxbImlkIiwiVENTIiwxLCJjYXJkIl0sWzEsImNhcmQtaGVhZGVyIl0sWzEsImNhcmQtYmxvY2siXSxbMSwi'@;
put 'Y2FyZC10ZXh0Il0sWzEsIm10LTAiXSxbImhyZWYiLCJodHRwczovL2RvY3MuZGF0YWNvbnRyb2xsZXIuaW8vZXZhbHVhdGlvbi1saWNlbmNlLWFncmVlbWVudCIsInRhcmdldCIsIl9ibGFuayJdLFsxLCJsaWdodCJdLFsiY2xyQ2hlY2tib3giLCIiLCJ0eXBlIiwiY2hlY2tib3giLDMsImNo'@;
put 'YW5nZSJdLFszLCJuZ1N3aXRjaCJdLFs0LCJuZ1N3aXRjaENhc2UiXSxbImNsYXNzIiwiYXV0b2RlcGxveS1zZWN0aW9uIGNhcmQiLDQsIm5nSWYiXSxbImlkIiwibWFpbmJvZHkiLCJjbGFzcyIsImNhcmQiLDQsIm5nSWYiXSxbMSwiYXV0b2RlcGxveS1zZWN0aW9uIiwiY2FyZCJdLFszLCJv'@;
put 'bk5hdmlnYXRlVG9Ib21lIiwic2FzSnMiLCJzYXNKc0NvbmZpZyIsImRjQWRhcHRlclNldHRpbmdzIiwiYXBwTG9jIiwiZGNQYXRoIiwic2VsZWN0ZWRBZG1pbkdyb3VwIl0sWyJpZCIsIm1haW5ib2R5IiwxLCJjYXJkIl0sWzMsIm9uTmF2aWdhdGVUb0hvbWUiLCJzYXNKcyIsInNhc0pzQ29u'@;
put 'ZmlnIiwiZGNBZGFwdGVyU2V0dGluZ3MiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZCxoKXsxJmQmJihkZSgwLCJkaXYiLDApKDEsImRpdiIsMSksZ3QoMixRS2UsMTcsMCwiZGl2IiwyKSxoZSgpLGd0KDMsYXFlLDQsNCwibmctY29udGFpbmVyIiwzKSxoZSgpKSwyJmQmJihmZSgyKSxNZSgibmdJ'@;
put 'ZiIsMD09PWguc3RlcCksZmUoKSxNZSgibmdJZiIsaC5zdGVwPjApKX0sZGVwZW5kZW5jaWVzOltiYSxTMixjcCxkcyxJZCxTaCxPS2UsS0tlLEpLZV0sZW5jYXBzdWxhdGlvbjoyfSl9fXJldHVybiBjfSkoKTtjb25zdCBvcWU9W3twYXRoOiIiLGNvbXBvbmVudDpRaGV9LHtwYXRoOiJtYW51'@;
put 'YWxkZXBsb3kiLGNvbXBvbmVudDpRaGV9XTtsZXQgc3FlPSgoKT0+e2NsYXNzIGN7c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NW1vZD1raSh7dHlwZTpjfSl9c3RhdGlje3RoaXMuXHUwMjc1aW5qPUFyKHtpbXBv'@;
put 'cnRzOlt6Yy5mb3JDaGlsZChvcWUpLHpjXX0pfX1yZXR1cm4gY30pKCksbHFlPSgoKT0+e2NsYXNzIGN7c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NW1vZD1raSh7dHlwZTpjfSl9c3RhdGlje3RoaXMuXHUwMjc1'@;
put 'aW5qPUFyKHtpbXBvcnRzOltSYSxSYyx6MCxzcWVdfSl9fXJldHVybiBjfSkoKTt5KDQ5NTM3KSx5KDc3NTI1KSx5KDU3NzIpLHkoNjk4NzUpLHkoMTYwOTMpLHkoOTU2MDgpLHkoMTY0OTMpLHkoNjE5MzQpLHkoMTAxMDEpLHkoMjY4ODkpLHkoNDMyODcpLHkoNjU3NDUpLHkoMjk3MDgpLHko'@;
put 'NjUxMTcpLHkoMTAzNjMpO2NvbnN0e2VudHJpZXM6ZTJlLHNldFByb3RvdHlwZU9mOnQyZSxpc0Zyb3plbjpjcWUsZ2V0UHJvdG90eXBlT2Y6dXFlLGdldE93blByb3BlcnR5RGVzY3JpcHRvcjpkcWV9PU9iamVjdDtsZXR7ZnJlZXplOlkxLHNlYWw6SDIsY3JlYXRlOm4yZX09T2JqZWN0LHth'@;
put 'cHBseTp0JCxjb25zdHJ1Y3Q6biR9PXR5cGVvZiBSZWZsZWN0PCJ1IiYmUmVmbGVjdDtZMXx8KFkxPWZ1bmN0aW9uKGwpe3JldHVybiBsfSksSDJ8fChIMj1mdW5jdGlvbihsKXtyZXR1cm4gbH0pLHQkfHwodCQ9ZnVuY3Rpb24obCxhLGQpe3JldHVybiBsLmFwcGx5KGEsZCl9KSxuJHx8KG4k'@;
put 'PWZ1bmN0aW9uKGwsYSl7cmV0dXJuIG5ldyBsKC4uLmEpfSk7Y29uc3QgVE89JDEoQXJyYXkucHJvdG90eXBlLmZvckVhY2gpLGhxZT0kMShBcnJheS5wcm90b3R5cGUubGFzdEluZGV4T2YpLHIyZT0kMShBcnJheS5wcm90b3R5cGUucG9wKSxzRT0kMShBcnJheS5wcm90b3R5cGUucHVzaCks'@;
put 'ZnFlPSQxKEFycmF5LnByb3RvdHlwZS5zcGxpY2UpLEFPPSQxKFN0cmluZy5wcm90b3R5cGUudG9Mb3dlckNhc2UpLHIkPSQxKFN0cmluZy5wcm90b3R5cGUudG9TdHJpbmcpLGkyZT0kMShTdHJpbmcucHJvdG90eXBlLm1hdGNoKSxsRT0kMShTdHJpbmcucHJvdG90eXBlLnJlcGxhY2UpLHBx'@;
put 'ZT0kMShTdHJpbmcucHJvdG90eXBlLmluZGV4T2YpLGdxZT0kMShTdHJpbmcucHJvdG90eXBlLnRyaW0pLHQzPSQxKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkpLEcxPSQxKFJlZ0V4cC5wcm90b3R5cGUudGVzdCksY0U9ZnVuY3Rpb24gbXFlKGMpe3JldHVybiBmdW5jdGlvbigp'@;
put 'e2Zvcih2YXIgbD1hcmd1bWVudHMubGVuZ3RoLGE9bmV3IEFycmF5KGwpLGQ9MDtkPGw7ZCsrKWFbZF09YXJndW1lbnRzW2RdO3JldHVybiBuJChjLGEpfX0oVHlwZUVycm9yKTtmdW5jdGlvbiAkMShjKXtyZXR1cm4gZnVuY3Rpb24obCl7bCBpbnN0YW5jZW9mIFJlZ0V4cCYmKGwubGFzdElu'@;
put 'ZGV4PTApO2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGE+MT9hLTE6MCksaD0xO2g8YTtoKyspZFtoLTFdPWFyZ3VtZW50c1toXTtyZXR1cm4gdCQoYyxsLGQpfX1mdW5jdGlvbiBicyhjLGwpe2xldCBhPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1l'@;
put 'bnRzWzJdP2FyZ3VtZW50c1syXTpBTzt0MmUmJnQyZShjLG51bGwpO2xldCBkPWwubGVuZ3RoO2Zvcig7ZC0tOyl7bGV0IGg9bFtkXTtpZigic3RyaW5nIj09dHlwZW9mIGgpe2NvbnN0IGY9YShoKTtmIT09aCYmKGNxZShsKXx8KGxbZF09ZiksaD1mKX1jW2hdPSEwfXJldHVybiBjfWZ1bmN0'@;
put 'aW9uIHZxZShjKXtmb3IobGV0IGw9MDtsPGMubGVuZ3RoO2wrKyl0MyhjLGwpfHwoY1tsXT1udWxsKTtyZXR1cm4gY31mdW5jdGlvbiBtZyhjKXtjb25zdCBsPW4yZShudWxsKTtmb3IoY29uc3RbYSxkXW9mIGUyZShjKSl0MyhjLGEpJiYobFthXT1BcnJheS5pc0FycmF5KGQpP3ZxZShkKTpk'@;
put 'JiYib2JqZWN0Ij09dHlwZW9mIGQmJmQuY29uc3RydWN0b3I9PT1PYmplY3Q/bWcoZCk6ZCk7cmV0dXJuIGx9ZnVuY3Rpb24gdUUoYyxsKXtmb3IoO251bGwhPT1jOyl7Y29uc3QgZD1kcWUoYyxsKTtpZihkKXtpZihkLmdldClyZXR1cm4gJDEoZC5nZXQpO2lmKCJmdW5jdGlvbiI9PXR5cGVv'@;
put 'ZiBkLnZhbHVlKXJldHVybiAkMShkLnZhbHVlKX1jPXVxZShjKX1yZXR1cm4gZnVuY3Rpb24gYSgpe3JldHVybiBudWxsfX1jb25zdCBhMmU9WTEoWyJhIiwiYWJiciIsImFjcm9ueW0iLCJhZGRyZXNzIiwiYXJlYSIsImFydGljbGUiLCJhc2lkZSIsImF1ZGlvIiwiYiIsImJkaSIsImJkbyIs'@;
put 'ImJpZyIsImJsaW5rIiwiYmxvY2txdW90ZSIsImJvZHkiLCJiciIsImJ1dHRvbiIsImNhbnZhcyIsImNhcHRpb24iLCJjZW50ZXIiLCJjaXRlIiwiY29kZSIsImNvbCIsImNvbGdyb3VwIiwiY29udGVudCIsImRhdGEiLCJkYXRhbGlzdCIsImRkIiwiZGVjb3JhdG9yIiwiZGVsIiwiZGV0YWls'@;
put 'cyIsImRmbiIsImRpYWxvZyIsImRpciIsImRpdiIsImRsIiwiZHQiLCJlbGVtZW50IiwiZW0iLCJmaWVsZHNldCIsImZpZ2NhcHRpb24iLCJmaWd1cmUiLCJmb250IiwiZm9vdGVyIiwiZm9ybSIsImgxIiwiaDIiLCJoMyIsImg0IiwiaDUiLCJoNiIsImhlYWQiLCJoZWFkZXIiLCJoZ3JvdXAi'@;
put 'LCJociIsImh0bWwiLCJpIiwiaW1nIiwiaW5wdXQiLCJpbnMiLCJrYmQiLCJsYWJlbCIsImxlZ2VuZCIsImxpIiwibWFpbiIsIm1hcCIsIm1hcmsiLCJtYXJxdWVlIiwibWVudSIsIm1lbnVpdGVtIiwibWV0ZXIiLCJuYXYiLCJub2JyIiwib2wiLCJvcHRncm91cCIsIm9wdGlvbiIsIm91dHB1'@;
put 'dCIsInAiLCJwaWN0dXJlIiwicHJlIiwicHJvZ3Jlc3MiLCJxIiwicnAiLCJydCIsInJ1YnkiLCJzIiwic2FtcCIsInNlY3Rpb24iLCJzZWxlY3QiLCJzaGFkb3ciLCJzbWFsbCIsInNvdXJjZSIsInNwYWNlciIsInNwYW4iLCJzdHJpa2UiLCJzdHJvbmciLCJzdHlsZSIsInN1YiIsInN1bW1h'@;
put 'cnkiLCJzdXAiLCJ0YWJsZSIsInRib2R5IiwidGQiLCJ0ZW1wbGF0ZSIsInRleHRhcmVhIiwidGZvb3QiLCJ0aCIsInRoZWFkIiwidGltZSIsInRyIiwidHJhY2siLCJ0dCIsInUiLCJ1bCIsInZhciIsInZpZGVvIiwid2JyIl0pLGkkPVkxKFsic3ZnIiwiYSIsImFsdGdseXBoIiwiYWx0Z2x5'@;
put 'cGhkZWYiLCJhbHRnbHlwaGl0ZW0iLCJhbmltYXRlY29sb3IiLCJhbmltYXRlbW90aW9uIiwiYW5pbWF0ZXRyYW5zZm9ybSIsImNpcmNsZSIsImNsaXBwYXRoIiwiZGVmcyIsImRlc2MiLCJlbGxpcHNlIiwiZmlsdGVyIiwiZm9udCIsImciLCJnbHlwaCIsImdseXBocmVmIiwiaGtlcm4iLCJp'@;
put 'bWFnZSIsImxpbmUiLCJsaW5lYXJncmFkaWVudCIsIm1hcmtlciIsIm1hc2siLCJtZXRhZGF0YSIsIm1wYXRoIiwicGF0aCIsInBhdHRlcm4iLCJwb2x5Z29uIiwicG9seWxpbmUiLCJyYWRpYWxncmFkaWVudCIsInJlY3QiLCJzdG9wIiwic3R5bGUiLCJzd2l0Y2giLCJzeW1ib2wiLCJ0ZXh0'@;
put 'IiwidGV4dHBhdGgiLCJ0aXRsZSIsInRyZWYiLCJ0c3BhbiIsInZpZXciLCJ2a2VybiJdKSxhJD1ZMShbImZlQmxlbmQiLCJmZUNvbG9yTWF0cml4IiwiZmVDb21wb25lbnRUcmFuc2ZlciIsImZlQ29tcG9zaXRlIiwiZmVDb252b2x2ZU1hdHJpeCIsImZlRGlmZnVzZUxpZ2h0aW5nIiwiZmVE'@;
put 'aXNwbGFjZW1lbnRNYXAiLCJmZURpc3RhbnRMaWdodCIsImZlRHJvcFNoYWRvdyIsImZlRmxvb2QiLCJmZUZ1bmNBIiwiZmVGdW5jQiIsImZlRnVuY0ciLCJmZUZ1bmNSIiwiZmVHYXVzc2lhbkJsdXIiLCJmZUltYWdlIiwiZmVNZXJnZSIsImZlTWVyZ2VOb2RlIiwiZmVNb3JwaG9sb2d5Iiwi'@;
put 'ZmVPZmZzZXQiLCJmZVBvaW50TGlnaHQiLCJmZVNwZWN1bGFyTGlnaHRpbmciLCJmZVNwb3RMaWdodCIsImZlVGlsZSIsImZlVHVyYnVsZW5jZSJdKSxicWU9WTEoWyJhbmltYXRlIiwiY29sb3ItcHJvZmlsZSIsImN1cnNvciIsImRpc2NhcmQiLCJmb250LWZhY2UiLCJmb250LWZhY2UtZm9y'@;
put 'bWF0IiwiZm9udC1mYWNlLW5hbWUiLCJmb250LWZhY2Utc3JjIiwiZm9udC1mYWNlLXVyaSIsImZvcmVpZ25vYmplY3QiLCJoYXRjaCIsImhhdGNocGF0aCIsIm1lc2giLCJtZXNoZ3JhZGllbnQiLCJtZXNocGF0Y2giLCJtZXNocm93IiwibWlzc2luZy1nbHlwaCIsInNjcmlwdCIsInNldCIs'@;
put 'InNvbGlkY29sb3IiLCJ1bmtub3duIiwidXNlIl0pLG8kPVkxKFsibWF0aCIsIm1lbmNsb3NlIiwibWVycm9yIiwibWZlbmNlZCIsIm1mcmFjIiwibWdseXBoIiwibWkiLCJtbGFiZWxlZHRyIiwibW11bHRpc2NyaXB0cyIsIm1uIiwibW8iLCJtb3ZlciIsIm1wYWRkZWQiLCJtcGhhbnRvbSIs'@;
put 'Im1yb290IiwibXJvdyIsIm1zIiwibXNwYWNlIiwibXNxcnQiLCJtc3R5bGUiLCJtc3ViIiwibXN1cCIsIm1zdWJzdXAiLCJtdGFibGUiLCJtdGQiLCJtdGV4dCIsIm10ciIsIm11bmRlciIsIm11bmRlcm92ZXIiLCJtcHJlc2NyaXB0cyJdKSx5cWU9WTEoWyJtYWN0aW9uIiwibWFsaWduZ3Jv'@;
put 'dXAiLCJtYWxpZ25tYXJrIiwibWxvbmdkaXYiLCJtc2NhcnJpZXMiLCJtc2NhcnJ5IiwibXNncm91cCIsIm1zdGFjayIsIm1zbGluZSIsIm1zcm93Iiwic2VtYW50aWNzIiwiYW5ub3RhdGlvbiIsImFubm90YXRpb24teG1sIiwibXByZXNjcmlwdHMiLCJub25lIl0pLG8yZT1ZMShbIiN0ZXh0'@;
put 'Il0pLHMyZT1ZMShbImFjY2VwdCIsImFjdGlvbiIsImFsaWduIiwiYWx0IiwiYXV0b2NhcGl0YWxpemUiLCJhdXRvY29tcGxldGUiLCJhdXRvcGljdHVyZWlucGljdHVyZSIsImF1dG9wbGF5IiwiYmFja2dyb3VuZCIsImJnY29sb3IiLCJib3JkZXIiLCJjYXB0dXJlIiwiY2VsbHBhZGRpbmci'@;
put 'LCJjZWxsc3BhY2luZyIsImNoZWNrZWQiLCJjaXRlIiwiY2xhc3MiLCJjbGVhciIsImNvbG9yIiwiY29scyIsImNvbHNwYW4iLCJjb250cm9scyIsImNvbnRyb2xzbGlzdCIsImNvb3JkcyIsImNyb3Nzb3JpZ2luIiwiZGF0ZXRpbWUiLCJkZWNvZGluZyIsImRlZmF1bHQiLCJkaXIiLCJkaXNh'@;
put 'YmxlZCIsImRpc2FibGVwaWN0dXJlaW5waWN0dXJlIiwiZGlzYWJsZXJlbW90ZXBsYXliYWNrIiwiZG93bmxvYWQiLCJkcmFnZ2FibGUiLCJlbmN0eXBlIiwiZW50ZXJrZXloaW50IiwiZmFjZSIsImZvciIsImhlYWRlcnMiLCJoZWlnaHQiLCJoaWRkZW4iLCJoaWdoIiwiaHJlZiIsImhyZWZs'@;
put 'YW5nIiwiaWQiLCJpbnB1dG1vZGUiLCJpbnRlZ3JpdHkiLCJpc21hcCIsImtpbmQiLCJsYWJlbCIsImxhbmciLCJsaXN0IiwibG9hZGluZyIsImxvb3AiLCJsb3ciLCJtYXgiLCJtYXhsZW5ndGgiLCJtZWRpYSIsIm1ldGhvZCIsIm1pbiIsIm1pbmxlbmd0aCIsIm11bHRpcGxlIiwibXV0ZWQi'@;
put 'LCJuYW1lIiwibm9uY2UiLCJub3NoYWRlIiwibm92YWxpZGF0ZSIsIm5vd3JhcCIsIm9wZW4iLCJvcHRpbXVtIiwicGF0dGVybiIsInBsYWNlaG9sZGVyIiwicGxheXNpbmxpbmUiLCJwb3BvdmVyIiwicG9wb3ZlcnRhcmdldCIsInBvcG92ZXJ0YXJnZXRhY3Rpb24iLCJwb3N0ZXIiLCJwcmVs'@;
put 'b2FkIiwicHViZGF0ZSIsInJhZGlvZ3JvdXAiLCJyZWFkb25seSIsInJlbCIsInJlcXVpcmVkIiwicmV2IiwicmV2ZXJzZWQiLCJyb2xlIiwicm93cyIsInJvd3NwYW4iLCJzcGVsbGNoZWNrIiwic2NvcGUiLCJzZWxlY3RlZCIsInNoYXBlIiwic2l6ZSIsInNpemVzIiwic3BhbiIsInNyY2xh'@;
put 'bmciLCJzdGFydCIsInNyYyIsInNyY3NldCIsInN0ZXAiLCJzdHlsZSIsInN1bW1hcnkiLCJ0YWJpbmRleCIsInRpdGxlIiwidHJhbnNsYXRlIiwidHlwZSIsInVzZW1hcCIsInZhbGlnbiIsInZhbHVlIiwid2lkdGgiLCJ3cmFwIiwieG1sbnMiLCJzbG90Il0pLHMkPVkxKFsiYWNjZW50LWhl'@;
put 'aWdodCIsImFjY3VtdWxhdGUiLCJhZGRpdGl2ZSIsImFsaWdubWVudC1iYXNlbGluZSIsImFtcGxpdHVkZSIsImFzY2VudCIsImF0dHJpYnV0ZW5hbWUiLCJhdHRyaWJ1dGV0eXBlIiwiYXppbXV0aCIsImJhc2VmcmVxdWVuY3kiLCJiYXNlbGluZS1zaGlmdCIsImJlZ2luIiwiYmlhcyIsImJ5'@;
put 'IiwiY2xhc3MiLCJjbGlwIiwiY2xpcHBhdGh1bml0cyIsImNsaXAtcGF0aCIsImNsaXAtcnVsZSIsImNvbG9yIiwiY29sb3ItaW50ZXJwb2xhdGlvbiIsImNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycyIsImNvbG9yLXByb2ZpbGUiLCJjb2xvci1yZW5kZXJpbmciLCJjeCIsImN5IiwiZCIs'@;
put 'ImR4IiwiZHkiLCJkaWZmdXNlY29uc3RhbnQiLCJkaXJlY3Rpb24iLCJkaXNwbGF5IiwiZGl2aXNvciIsImR1ciIsImVkZ2Vtb2RlIiwiZWxldmF0aW9uIiwiZW5kIiwiZXhwb25lbnQiLCJmaWxsIiwiZmlsbC1vcGFjaXR5IiwiZmlsbC1ydWxlIiwiZmlsdGVyIiwiZmlsdGVydW5pdHMiLCJm'@;
put 'bG9vZC1jb2xvciIsImZsb29kLW9wYWNpdHkiLCJmb250LWZhbWlseSIsImZvbnQtc2l6ZSIsImZvbnQtc2l6ZS1hZGp1c3QiLCJmb250LXN0cmV0Y2giLCJmb250LXN0eWxlIiwiZm9udC12YXJpYW50IiwiZm9udC13ZWlnaHQiLCJmeCIsImZ5IiwiZzEiLCJnMiIsImdseXBoLW5hbWUiLCJn'@;
put 'bHlwaHJlZiIsImdyYWRpZW50dW5pdHMiLCJncmFkaWVudHRyYW5zZm9ybSIsImhlaWdodCIsImhyZWYiLCJpZCIsImltYWdlLXJlbmRlcmluZyIsImluIiwiaW4yIiwiaW50ZXJjZXB0IiwiayIsImsxIiwiazIiLCJrMyIsIms0Iiwia2VybmluZyIsImtleXBvaW50cyIsImtleXNwbGluZXMi'@;
put 'LCJrZXl0aW1lcyIsImxhbmciLCJsZW5ndGhhZGp1c3QiLCJsZXR0ZXItc3BhY2luZyIsImtlcm5lbG1hdHJpeCIsImtlcm5lbHVuaXRsZW5ndGgiLCJsaWdodGluZy1jb2xvciIsImxvY2FsIiwibWFya2VyLWVuZCIsIm1hcmtlci1taWQiLCJtYXJrZXItc3RhcnQiLCJtYXJrZXJoZWlnaHQi'@;
put 'LCJtYXJrZXJ1bml0cyIsIm1hcmtlcndpZHRoIiwibWFza2NvbnRlbnR1bml0cyIsIm1hc2t1bml0cyIsIm1heCIsIm1hc2siLCJtZWRpYSIsIm1ldGhvZCIsIm1vZGUiLCJtaW4iLCJuYW1lIiwibnVtb2N0YXZlcyIsIm9mZnNldCIsIm9wZXJhdG9yIiwib3BhY2l0eSIsIm9yZGVyIiwib3Jp'@;
put 'ZW50Iiwib3JpZW50YXRpb24iLCJvcmlnaW4iLCJvdmVyZmxvdyIsInBhaW50LW9yZGVyIiwicGF0aCIsInBhdGhsZW5ndGgiLCJwYXR0ZXJuY29udGVudHVuaXRzIiwicGF0dGVybnRyYW5zZm9ybSIsInBhdHRlcm51bml0cyIsInBvaW50cyIsInByZXNlcnZlYWxwaGEiLCJwcmVzZXJ2ZWFz'@;
put 'cGVjdHJhdGlvIiwicHJpbWl0aXZldW5pdHMiLCJyIiwicngiLCJyeSIsInJhZGl1cyIsInJlZngiLCJyZWZ5IiwicmVwZWF0Y291bnQiLCJyZXBlYXRkdXIiLCJyZXN0YXJ0IiwicmVzdWx0Iiwicm90YXRlIiwic2NhbGUiLCJzZWVkIiwic2hhcGUtcmVuZGVyaW5nIiwic2xvcGUiLCJzcGVj'@;
put 'dWxhcmNvbnN0YW50Iiwic3BlY3VsYXJleHBvbmVudCIsInNwcmVhZG1ldGhvZCIsInN0YXJ0b2Zmc2V0Iiwic3RkZGV2aWF0aW9uIiwic3RpdGNodGlsZXMiLCJzdG9wLWNvbG9yIiwic3RvcC1vcGFjaXR5Iiwic3Ryb2tlLWRhc2hhcnJheSIsInN0cm9rZS1kYXNob2Zmc2V0Iiwic3Ryb2tl'@;
put 'LWxpbmVjYXAiLCJzdHJva2UtbGluZWpvaW4iLCJzdHJva2UtbWl0ZXJsaW1pdCIsInN0cm9rZS1vcGFjaXR5Iiwic3Ryb2tlIiwic3Ryb2tlLXdpZHRoIiwic3R5bGUiLCJzdXJmYWNlc2NhbGUiLCJzeXN0ZW1sYW5ndWFnZSIsInRhYmluZGV4IiwidGFibGV2YWx1ZXMiLCJ0YXJnZXR4Iiwi'@;
put 'dGFyZ2V0eSIsInRyYW5zZm9ybSIsInRyYW5zZm9ybS1vcmlnaW4iLCJ0ZXh0LWFuY2hvciIsInRleHQtZGVjb3JhdGlvbiIsInRleHQtcmVuZGVyaW5nIiwidGV4dGxlbmd0aCIsInR5cGUiLCJ1MSIsInUyIiwidW5pY29kZSIsInZhbHVlcyIsInZpZXdib3giLCJ2aXNpYmlsaXR5IiwidmVy'@;
put 'c2lvbiIsInZlcnQtYWR2LXkiLCJ2ZXJ0LW9yaWdpbi14IiwidmVydC1vcmlnaW4teSIsIndpZHRoIiwid29yZC1zcGFjaW5nIiwid3JhcCIsIndyaXRpbmctbW9kZSIsInhjaGFubmVsc2VsZWN0b3IiLCJ5Y2hhbm5lbHNlbGVjdG9yIiwieCIsIngxIiwieDIiLCJ4bWxucyIsInkiLCJ5MSIs'@;
put 'InkyIiwieiIsInpvb21hbmRwYW4iXSksbDJlPVkxKFsiYWNjZW50IiwiYWNjZW50dW5kZXIiLCJhbGlnbiIsImJldmVsbGVkIiwiY2xvc2UiLCJjb2x1bW5zYWxpZ24iLCJjb2x1bW5saW5lcyIsImNvbHVtbnNwYW4iLCJkZW5vbWFsaWduIiwiZGVwdGgiLCJkaXIiLCJkaXNwbGF5IiwiZGlz'@;
put 'cGxheXN0eWxlIiwiZW5jb2RpbmciLCJmZW5jZSIsImZyYW1lIiwiaGVpZ2h0IiwiaHJlZiIsImlkIiwibGFyZ2VvcCIsImxlbmd0aCIsImxpbmV0aGlja25lc3MiLCJsc3BhY2UiLCJscXVvdGUiLCJtYXRoYmFja2dyb3VuZCIsIm1hdGhjb2xvciIsIm1hdGhzaXplIiwibWF0aHZhcmlhbnQi'@;
put 'LCJtYXhzaXplIiwibWluc2l6ZSIsIm1vdmFibGVsaW1pdHMiLCJub3RhdGlvbiIsIm51bWFsaWduIiwib3BlbiIsInJvd2FsaWduIiwicm93bGluZXMiLCJyb3dzcGFjaW5nIiwicm93c3BhbiIsInJzcGFjZSIsInJxdW90ZSIsInNjcmlwdGxldmVsIiwic2NyaXB0bWluc2l6ZSIsInNjcmlw'@;
put 'dHNpemVtdWx0aXBsaWVyIiwic2VsZWN0aW9uIiwic2VwYXJhdG9yIiwic2VwYXJhdG9ycyIsInN0cmV0Y2h5Iiwic3Vic2NyaXB0c2hpZnQiLCJzdXBzY3JpcHRzaGlmdCIsInN5bW1ldHJpYyIsInZvZmZzZXQiLCJ3aWR0aCIsInhtbG5zIl0pLGtPPVkxKFsieGxpbms6aHJlZiIsInhtbDpp'@;
put 'ZCIsInhsaW5rOnRpdGxlIiwieG1sOnNwYWNlIiwieG1sbnM6eGxpbmsiXSksX3FlPUgyKC9ce1x7W1x3XFddKnxbXHdcV10qXH1cfS9nbSksd3FlPUgyKC88JVtcd1xXXSp8W1x3XFddKiU+L2dtKSxDcWU9SDIoL1wkXHtbXHdcV10qL2dtKSxTcWU9SDIoL15kYXRhLVtcLVx3Llx1MDBCNy1c'@;
put 'dUZGRkZdKyQvKSxNcWU9SDIoL15hcmlhLVtcLVx3XSskLyksYzJlPUgyKC9eKD86KD86KD86ZnxodCl0cHM/fG1haWx0b3x0ZWx8Y2FsbHRvfHNtc3xjaWR8eG1wcHxtYXRyaXgpOnxbXmEtel18W2EteisuXC1dKyg/OlteYS16Ky5cLTpdfCQpKS9pKSx4cWU9SDIoL14oPzpcdytzY3JpcHR8'@;
put 'ZGF0YSk6L2kpLEVxZT1IMigvW1x1MDAwMC1cdTAwMjBcdTAwQTBcdTE2ODBcdTE4MEVcdTIwMDAtXHUyMDI5XHUyMDVGXHUzMDAwXS9nKSx1MmU9SDIoL15odG1sJC9pKSxUcWU9SDIoL15bYS16XVsuXHddKigtWy5cd10rKSskL2kpO3ZhciBkMmU9T2JqZWN0LmZyZWV6ZSh7X19wcm90b19f'@;
put 'Om51bGwsQVJJQV9BVFRSOk1xZSxBVFRSX1dISVRFU1BBQ0U6RXFlLENVU1RPTV9FTEVNRU5UOlRxZSxEQVRBX0FUVFI6U3FlLERPQ1RZUEVfTkFNRTp1MmUsRVJCX0VYUFI6d3FlLElTX0FMTE9XRURfVVJJOmMyZSxJU19TQ1JJUFRfT1JfREFUQTp4cWUsTVVTVEFDSEVfRVhQUjpfcWUsVE1Q'@;
put 'TElUX0VYUFI6Q3FlfSk7dmFyIERxZT1mdW5jdGlvbiBmMmUoKXtsZXQgYz1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06dHlwZW9mIHdpbmRvdz4idSI/bnVsbDp3aW5kb3c7Y29uc3QgbD1jbz0+ZjJlKGNvKTtpZihsLnZlcnNpb249IjMu'@;
put 'Mi42IixsLnJlbW92ZWQ9W10sIWN8fCFjLmRvY3VtZW50fHw5IT09Yy5kb2N1bWVudC5ub2RlVHlwZXx8IWMuRWxlbWVudClyZXR1cm4gbC5pc1N1cHBvcnRlZD0hMSxsO2xldHtkb2N1bWVudDphfT1jO2NvbnN0IGQ9YSxoPWQuY3VycmVudFNjcmlwdCx7RG9jdW1lbnRGcmFnbWVudDpmLEhU'@;
put 'TUxUZW1wbGF0ZUVsZW1lbnQ6dixOb2RlOk0sRWxlbWVudDpELE5vZGVGaWx0ZXI6WixOYW1lZE5vZGVNYXA6cmU9Yy5OYW1lZE5vZGVNYXB8fGMuTW96TmFtZWRBdHRyTWFwLEhUTUxGb3JtRWxlbWVudDpjZSxET01QYXJzZXI6YmUsdHJ1c3RlZFR5cGVzOkVlfT1jLEJlPUQucHJvdG90eXBl'@;
put 'LHFlPXVFKEJlLCJjbG9uZU5vZGUiKSxydD11RShCZSwicmVtb3ZlIikscHQ9dUUoQmUsIm5leHRTaWJsaW5nIiksZHQ9dUUoQmUsImNoaWxkTm9kZXMiKSxKdD11RShCZSwicGFyZW50Tm9kZSIpO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiB2KXtjb25zdCBjbz1hLmNyZWF0ZUVsZW1lbnQoInRl'@;
put 'bXBsYXRlIik7Y28uY29udGVudCYmY28uY29udGVudC5vd25lckRvY3VtZW50JiYoYT1jby5jb250ZW50Lm93bmVyRG9jdW1lbnQpfWxldCB2bixDbj0iIjtjb25zdHtpbXBsZW1lbnRhdGlvbjp0bixjcmVhdGVOb2RlSXRlcmF0b3I6TW4sY3JlYXRlRG9jdW1lbnRGcmFnbWVudDpDcixnZXRF'@;
put 'bGVtZW50c0J5VGFnTmFtZTpHcn09YSx7aW1wb3J0Tm9kZTptcn09ZDtsZXQgR249e2FmdGVyU2FuaXRpemVBdHRyaWJ1dGVzOltdLGFmdGVyU2FuaXRpemVFbGVtZW50czpbXSxhZnRlclNhbml0aXplU2hhZG93RE9NOltdLGJlZm9yZVNhbml0aXplQXR0cmlidXRlczpbXSxiZWZvcmVTYW5p'@;
put 'dGl6ZUVsZW1lbnRzOltdLGJlZm9yZVNhbml0aXplU2hhZG93RE9NOltdLHVwb25TYW5pdGl6ZUF0dHJpYnV0ZTpbXSx1cG9uU2FuaXRpemVFbGVtZW50OltdLHVwb25TYW5pdGl6ZVNoYWRvd05vZGU6W119O2wuaXNTdXBwb3J0ZWQ9ImZ1bmN0aW9uIj09dHlwZW9mIGUyZSYmImZ1bmN0aW9u'@;
put 'Ij09dHlwZW9mIEp0JiZ0biYmdm9pZCAwIT09dG4uY3JlYXRlSFRNTERvY3VtZW50O2NvbnN0e01VU1RBQ0hFX0VYUFI6YWksRVJCX0VYUFI6X2ksVE1QTElUX0VYUFI6T24sREFUQV9BVFRSOnpyLEFSSUFfQVRUUjpKbixJU19TQ1JJUFRfT1JfREFUQTpJcixBVFRSX1dISVRFU1BBQ0U6JHIs'@;
put 'Q1VTVE9NX0VMRU1FTlQ6d2l9PWQyZTtsZXR7SVNfQUxMT1dFRF9VUkk6ZWF9PWQyZSxmYT1udWxsO2NvbnN0IHZ0PWJzKHt9LFsuLi5hMmUsLi4uaSQsLi4uYSQsLi4ubyQsLi4ubzJlXSk7bGV0IE50PW51bGw7Y29uc3QgSHQ9YnMoe30sWy4uLnMyZSwuLi5zJCwuLi5sMmUsLi4ua09dKTts'@;
put 'ZXQgSG49T2JqZWN0LnNlYWwobjJlKG51bGwse3RhZ05hbWVDaGVjazp7d3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiExLGVudW1lcmFibGU6ITAsdmFsdWU6bnVsbH0sYXR0cmlidXRlTmFtZUNoZWNrOnt3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITEsZW51bWVyYWJsZTohMCx2YWx1ZTpu'@;
put 'dWxsfSxhbGxvd0N1c3RvbWl6ZWRCdWlsdEluRWxlbWVudHM6e3dyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMSxlbnVtZXJhYmxlOiEwLHZhbHVlOiExfX0pKSx0cj1udWxsLGFyPW51bGwsSHI9ITAscXI9ITAsb249ITEseW49ITAscG49ITEscHI9ITAsJG49ITEsZHI9ITEsVXI9ITEsWm49'@;
put 'ITEsc3I9ITEsTnI9ITEsTXI9ITAsWnI9ITEsQmE9ITAsSW89ITEsWm89e30scHM9bnVsbDtjb25zdCBNbz1icyh7fSxbImFubm90YXRpb24teG1sIiwiYXVkaW8iLCJjb2xncm91cCIsImRlc2MiLCJmb3JlaWdub2JqZWN0IiwiaGVhZCIsImlmcmFtZSIsIm1hdGgiLCJtaSIsIm1uIiwibW8i'@;
put 'LCJtcyIsIm10ZXh0Iiwibm9lbWJlZCIsIm5vZnJhbWVzIiwibm9zY3JpcHQiLCJwbGFpbnRleHQiLCJzY3JpcHQiLCJzdHlsZSIsInN2ZyIsInRlbXBsYXRlIiwidGhlYWQiLCJ0aXRsZSIsInZpZGVvIiwieG1wIl0pO2xldCBocz1udWxsO2NvbnN0IG5jPWJzKHt9LFsiYXVkaW8iLCJ2aWRl'@;
put 'byIsImltZyIsInNvdXJjZSIsImltYWdlIiwidHJhY2siXSk7bGV0IFFvPW51bGw7Y29uc3QgTTM9YnMoe30sWyJhbHQiLCJjbGFzcyIsImZvciIsImlkIiwibGFiZWwiLCJuYW1lIiwicGF0dGVybiIsInBsYWNlaG9sZGVyIiwicm9sZSIsInN1bW1hcnkiLCJ0aXRsZSIsInZhbHVlIiwic3R5'@;
put 'bGUiLCJ4bWxucyJdKSxhZD0iaHR0cDovL3d3dy53My5vcmcvMTk5OC9NYXRoL01hdGhNTCIsVXM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIixKYz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCI7bGV0IHFzPUpjLEJsPSExLGVzPW51bGw7Y29uc3QgRTE9YnMoe30sW2FkLFVz'@;
put 'LEpjXSxyJCk7bGV0IHgzPWJzKHt9LFsibWkiLCJtbyIsIm1uIiwibXMiLCJtdGV4dCJdKSxRZz1icyh7fSxbImFubm90YXRpb24teG1sIl0pO2NvbnN0IGQ0PWJzKHt9LFsidGl0bGUiLCJzdHlsZSIsImZvbnQiLCJhIiwic2NyaXB0Il0pO2xldCBhdj1udWxsO2NvbnN0IFZBPVsiYXBwbGlj'@;
put 'YXRpb24veGh0bWwreG1sIiwidGV4dC9odG1sIl07bGV0ICRhPW51bGwseDY9bnVsbDtjb25zdCBXdGU9YS5jcmVhdGVFbGVtZW50KCJmb3JtIiksWk49ZnVuY3Rpb24oZ3Ipe3JldHVybiBnciBpbnN0YW5jZW9mIFJlZ0V4cHx8Z3IgaW5zdGFuY2VvZiBGdW5jdGlvbn0sQkE9ZnVuY3Rpb24o'@;
put 'KXtsZXQgZ3I9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnt9O2lmKCF4Nnx8eDYhPT1ncil7aWYoKCFncnx8Im9iamVjdCIhPXR5cGVvZiBncikmJihncj17fSksZ3I9bWcoZ3IpLGF2PS0xPT09VkEuaW5kZXhPZihnci5QQVJTRVJfTUVE'@;
put 'SUFfVFlQRSk/InRleHQvaHRtbCI6Z3IuUEFSU0VSX01FRElBX1RZUEUsJGE9ImFwcGxpY2F0aW9uL3hodG1sK3htbCI9PT1hdj9yJDpBTyxmYT10MyhnciwiQUxMT1dFRF9UQUdTIik/YnMoe30sZ3IuQUxMT1dFRF9UQUdTLCRhKTp2dCxOdD10MyhnciwiQUxMT1dFRF9BVFRSIik/YnMoe30s'@;
put 'Z3IuQUxMT1dFRF9BVFRSLCRhKTpIdCxlcz10MyhnciwiQUxMT1dFRF9OQU1FU1BBQ0VTIik/YnMoe30sZ3IuQUxMT1dFRF9OQU1FU1BBQ0VTLHIkKTpFMSxRbz10MyhnciwiQUREX1VSSV9TQUZFX0FUVFIiKT9icyhtZyhNMyksZ3IuQUREX1VSSV9TQUZFX0FUVFIsJGEpOk0zLGhzPXQzKGdy'@;
put 'LCJBRERfREFUQV9VUklfVEFHUyIpP2JzKG1nKG5jKSxnci5BRERfREFUQV9VUklfVEFHUywkYSk6bmMscHM9dDMoZ3IsIkZPUkJJRF9DT05URU5UUyIpP2JzKHt9LGdyLkZPUkJJRF9DT05URU5UUywkYSk6TW8sdHI9dDMoZ3IsIkZPUkJJRF9UQUdTIik/YnMoe30sZ3IuRk9SQklEX1RBR1Ms'@;
put 'JGEpOm1nKHt9KSxhcj10MyhnciwiRk9SQklEX0FUVFIiKT9icyh7fSxnci5GT1JCSURfQVRUUiwkYSk6bWcoe30pLFpvPSEhdDMoZ3IsIlVTRV9QUk9GSUxFUyIpJiZnci5VU0VfUFJPRklMRVMsSHI9ITEhPT1nci5BTExPV19BUklBX0FUVFIscXI9ITEhPT1nci5BTExPV19EQVRBX0FUVFIs'@;
put 'b249Z3IuQUxMT1dfVU5LTk9XTl9QUk9UT0NPTFN8fCExLHluPSExIT09Z3IuQUxMT1dfU0VMRl9DTE9TRV9JTl9BVFRSLHBuPWdyLlNBRkVfRk9SX1RFTVBMQVRFU3x8ITEscHI9ITEhPT1nci5TQUZFX0ZPUl9YTUwsJG49Z3IuV0hPTEVfRE9DVU1FTlR8fCExLFpuPWdyLlJFVFVSTl9ET018'@;
put 'fCExLHNyPWdyLlJFVFVSTl9ET01fRlJBR01FTlR8fCExLE5yPWdyLlJFVFVSTl9UUlVTVEVEX1RZUEV8fCExLFVyPWdyLkZPUkNFX0JPRFl8fCExLE1yPSExIT09Z3IuU0FOSVRJWkVfRE9NLFpyPWdyLlNBTklUSVpFX05BTUVEX1BST1BTfHwhMSxCYT0hMSE9PWdyLktFRVBfQ09OVEVOVCxJ'@;
put 'bz1nci5JTl9QTEFDRXx8ITEsZWE9Z3IuQUxMT1dFRF9VUklfUkVHRVhQfHxjMmUscXM9Z3IuTkFNRVNQQUNFfHxKYyx4Mz1nci5NQVRITUxfVEVYVF9JTlRFR1JBVElPTl9QT0lOVFN8fHgzLFFnPWdyLkhUTUxfSU5URUdSQVRJT05fUE9JTlRTfHxRZyxIbj1nci5DVVNUT01fRUxFTUVOVF9I'@;
put 'QU5ETElOR3x8e30sZ3IuQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcmJlpOKGdyLkNVU1RPTV9FTEVNRU5UX0hBTkRMSU5HLnRhZ05hbWVDaGVjaykmJihIbi50YWdOYW1lQ2hlY2s9Z3IuQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcudGFnTmFtZUNoZWNrKSxnci5DVVNUT01fRUxFTUVOVF9IQU5E'@;
put 'TElORyYmWk4oZ3IuQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcuYXR0cmlidXRlTmFtZUNoZWNrKSYmKEhuLmF0dHJpYnV0ZU5hbWVDaGVjaz1nci5DVVNUT01fRUxFTUVOVF9IQU5ETElORy5hdHRyaWJ1dGVOYW1lQ2hlY2spLGdyLkNVU1RPTV9FTEVNRU5UX0hBTkRMSU5HJiYiYm9vbGVhbiI9'@;
put 'PXR5cGVvZiBnci5DVVNUT01fRUxFTUVOVF9IQU5ETElORy5hbGxvd0N1c3RvbWl6ZWRCdWlsdEluRWxlbWVudHMmJihIbi5hbGxvd0N1c3RvbWl6ZWRCdWlsdEluRWxlbWVudHM9Z3IuQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcuYWxsb3dDdXN0b21pemVkQnVpbHRJbkVsZW1lbnRzKSxwbiYm'@;
put 'KHFyPSExKSxzciYmKFpuPSEwKSxabyYmKGZhPWJzKHt9LG8yZSksTnQ9W10sITA9PT1aby5odG1sJiYoYnMoZmEsYTJlKSxicyhOdCxzMmUpKSwhMD09PVpvLnN2ZyYmKGJzKGZhLGkkKSxicyhOdCxzJCksYnMoTnQsa08pKSwhMD09PVpvLnN2Z0ZpbHRlcnMmJihicyhmYSxhJCksYnMoTnQs'@;
put 'cyQpLGJzKE50LGtPKSksITA9PT1aby5tYXRoTWwmJihicyhmYSxvJCksYnMoTnQsbDJlKSxicyhOdCxrTykpKSxnci5BRERfVEFHUyYmKGZhPT09dnQmJihmYT1tZyhmYSkpLGJzKGZhLGdyLkFERF9UQUdTLCRhKSksZ3IuQUREX0FUVFImJihOdD09PUh0JiYoTnQ9bWcoTnQpKSxicyhOdCxn'@;
put 'ci5BRERfQVRUUiwkYSkpLGdyLkFERF9VUklfU0FGRV9BVFRSJiZicyhRbyxnci5BRERfVVJJX1NBRkVfQVRUUiwkYSksZ3IuRk9SQklEX0NPTlRFTlRTJiYocHM9PT1NbyYmKHBzPW1nKHBzKSksYnMocHMsZ3IuRk9SQklEX0NPTlRFTlRTLCRhKSksQmEmJihmYVsiI3RleHQiXT0hMCksJG4m'@;
put 'JmJzKGZhLFsiaHRtbCIsImhlYWQiLCJib2R5Il0pLGZhLnRhYmxlJiYoYnMoZmEsWyJ0Ym9keSJdKSxkZWxldGUgdHIudGJvZHkpLGdyLlRSVVNURURfVFlQRVNfUE9MSUNZKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgZ3IuVFJVU1RFRF9UWVBFU19QT0xJQ1kuY3JlYXRlSFRNTCl0aHJvdyBj'@;
put 'RSgnVFJVU1RFRF9UWVBFU19QT0xJQ1kgY29uZmlndXJhdGlvbiBvcHRpb24gbXVzdCBwcm92aWRlIGEgImNyZWF0ZUhUTUwiIGhvb2suJyk7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGdyLlRSVVNURURfVFlQRVNfUE9MSUNZLmNyZWF0ZVNjcmlwdFVSTCl0aHJvdyBjRSgnVFJVU1RFRF9UWVBF'@;
put 'U19QT0xJQ1kgY29uZmlndXJhdGlvbiBvcHRpb24gbXVzdCBwcm92aWRlIGEgImNyZWF0ZVNjcmlwdFVSTCIgaG9vay4nKTt2bj1nci5UUlVTVEVEX1RZUEVTX1BPTElDWSxDbj12bi5jcmVhdGVIVE1MKCIiKX1lbHNlIHZvaWQgMD09PXZuJiYodm49ZnVuY3Rpb24obCxhKXtpZigib2JqZWN0'@;
put 'IiE9dHlwZW9mIGx8fCJmdW5jdGlvbiIhPXR5cGVvZiBsLmNyZWF0ZVBvbGljeSlyZXR1cm4gbnVsbDtsZXQgZD1udWxsO2NvbnN0IGg9ImRhdGEtdHQtcG9saWN5LXN1ZmZpeCI7YSYmYS5oYXNBdHRyaWJ1dGUoaCkmJihkPWEuZ2V0QXR0cmlidXRlKGgpKTtjb25zdCBmPSJkb21wdXJpZnki'@;
put 'KyhkPyIjIitkOiIiKTt0cnl7cmV0dXJuIGwuY3JlYXRlUG9saWN5KGYse2NyZWF0ZUhUTUw6dj0+dixjcmVhdGVTY3JpcHRVUkw6dj0+dn0pfWNhdGNoe3JldHVybiBjb25zb2xlLndhcm4oIlRydXN0ZWRUeXBlcyBwb2xpY3kgIitmKyIgY291bGQgbm90IGJlIGNyZWF0ZWQuIiksbnVsbH19'@;
put 'KEVlLGgpKSxudWxsIT09dm4mJiJzdHJpbmciPT10eXBlb2YgQ24mJihDbj12bi5jcmVhdGVIVE1MKCIiKSk7WTEmJlkxKGdyKSx4Nj1ncn19LFdOPWJzKHt9LFsuLi5pJCwuLi5hJCwuLi5icWVdKSxZTj1icyh7fSxbLi4ubyQsLi4ueXFlXSksWXQ9ZnVuY3Rpb24oZ3Ipe3NFKGwucmVtb3Zl'@;
put 'ZCx7ZWxlbWVudDpncn0pO3RyeXtKdChncikucmVtb3ZlQ2hpbGQoZ3IpfWNhdGNoe3J0KGdyKX19LHYwPWZ1bmN0aW9uKGdyLFFpKXt0cnl7c0UobC5yZW1vdmVkLHthdHRyaWJ1dGU6UWkuZ2V0QXR0cmlidXRlTm9kZShnciksZnJvbTpRaX0pfWNhdGNoe3NFKGwucmVtb3ZlZCx7YXR0cmli'@;
put 'dXRlOm51bGwsZnJvbTpRaX0pfWlmKFFpLnJlbW92ZUF0dHJpYnV0ZShnciksImlzIj09PWdyKWlmKFpufHxzcil0cnl7WXQoUWkpfWNhdGNoe31lbHNlIHRyeXtRaS5zZXRBdHRyaWJ1dGUoZ3IsIiIpfWNhdGNoe319LFpzPWZ1bmN0aW9uKGdyKXtsZXQgUWk9bnVsbCxYYT1udWxsO2lmKFVy'@;
put 'KWdyPSI8cmVtb3ZlPjwvcmVtb3ZlPiIrZ3I7ZWxzZXtjb25zdCBSdT1pMmUoZ3IsL15bXHJcblx0IF0rLyk7WGE9UnUmJlJ1WzBdfSJhcHBsaWNhdGlvbi94aHRtbCt4bWwiPT09YXYmJnFzPT09SmMmJihncj0nPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiPjxo'@;
put 'ZWFkPjwvaGVhZD48Ym9keT4nK2dyKyI8L2JvZHk+PC9odG1sPiIpO2NvbnN0IGRjPXZuP3ZuLmNyZWF0ZUhUTUwoZ3IpOmdyO2lmKHFzPT09SmMpdHJ5e1FpPShuZXcgYmUpLnBhcnNlRnJvbVN0cmluZyhkYyxhdil9Y2F0Y2h7fWlmKCFRaXx8IVFpLmRvY3VtZW50RWxlbWVudCl7UWk9dG4u'@;
put 'Y3JlYXRlRG9jdW1lbnQocXMsInRlbXBsYXRlIixudWxsKTt0cnl7UWkuZG9jdW1lbnRFbGVtZW50LmlubmVySFRNTD1CbD9DbjpkY31jYXRjaHt9fWNvbnN0IEEwPVFpLmJvZHl8fFFpLmRvY3VtZW50RWxlbWVudDtyZXR1cm4gZ3ImJlhhJiZBMC5pbnNlcnRCZWZvcmUoYS5jcmVhdGVUZXh0'@;
put 'Tm9kZShYYSksQTAuY2hpbGROb2Rlc1swXXx8bnVsbCkscXM9PT1KYz9Hci5jYWxsKFFpLCRuPyJodG1sIjoiYm9keSIpWzBdOiRuP1FpLmRvY3VtZW50RWxlbWVudDpBMH0sR049ZnVuY3Rpb24oZ3Ipe3JldHVybiBNbi5jYWxsKGdyLm93bmVyRG9jdW1lbnR8fGdyLGdyLFouU0hPV19FTEVN'@;
put 'RU5UfFouU0hPV19DT01NRU5UfFouU0hPV19URVhUfFouU0hPV19QUk9DRVNTSU5HX0lOU1RSVUNUSU9OfFouU0hPV19DREFUQV9TRUNUSU9OLG51bGwpfSxFNj1mdW5jdGlvbihncil7cmV0dXJuIGdyIGluc3RhbmNlb2YgY2UmJigic3RyaW5nIiE9dHlwZW9mIGdyLm5vZGVOYW1lfHwic3Ry'@;
put 'aW5nIiE9dHlwZW9mIGdyLnRleHRDb250ZW50fHwiZnVuY3Rpb24iIT10eXBlb2YgZ3IucmVtb3ZlQ2hpbGR8fCEoZ3IuYXR0cmlidXRlcyBpbnN0YW5jZW9mIHJlKXx8ImZ1bmN0aW9uIiE9dHlwZW9mIGdyLnJlbW92ZUF0dHJpYnV0ZXx8ImZ1bmN0aW9uIiE9dHlwZW9mIGdyLnNldEF0dHJp'@;
put 'YnV0ZXx8InN0cmluZyIhPXR5cGVvZiBnci5uYW1lc3BhY2VVUkl8fCJmdW5jdGlvbiIhPXR5cGVvZiBnci5pbnNlcnRCZWZvcmV8fCJmdW5jdGlvbiIhPXR5cGVvZiBnci5oYXNDaGlsZE5vZGVzKX0sZTU9ZnVuY3Rpb24oZ3Ipe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBNJiZnciBpbnN0'@;
put 'YW5jZW9mIE19O2Z1bmN0aW9uIEUzKGNvLGdyLFFpKXtUTyhjbyxYYT0+e1hhLmNhbGwobCxncixRaSx4Nil9KX1jb25zdCAkTj1mdW5jdGlvbihncil7bGV0IFFpPW51bGw7aWYoRTMoR24uYmVmb3JlU2FuaXRpemVFbGVtZW50cyxncixudWxsKSxFNihncikpcmV0dXJuIFl0KGdyKSwhMDtj'@;
put 'b25zdCBYYT0kYShnci5ub2RlTmFtZSk7aWYoRTMoR24udXBvblNhbml0aXplRWxlbWVudCxncix7dGFnTmFtZTpYYSxhbGxvd2VkVGFnczpmYX0pLHByJiZnci5oYXNDaGlsZE5vZGVzKCkmJiFlNShnci5maXJzdEVsZW1lbnRDaGlsZCkmJkcxKC88Wy9cdyFdL2csZ3IuaW5uZXJIVE1MKSYm'@;
put 'RzEoLzxbL1x3IV0vZyxnci50ZXh0Q29udGVudCl8fDc9PT1nci5ub2RlVHlwZXx8cHImJjg9PT1nci5ub2RlVHlwZSYmRzEoLzxbL1x3XS9nLGdyLmRhdGEpKXJldHVybiBZdChnciksITA7aWYoIWZhW1hhXXx8dHJbWGFdKXtpZighdHJbWGFdJiZxTihYYSkmJihIbi50YWdOYW1lQ2hlY2sg'@;
put 'aW5zdGFuY2VvZiBSZWdFeHAmJkcxKEhuLnRhZ05hbWVDaGVjayxYYSl8fEhuLnRhZ05hbWVDaGVjayBpbnN0YW5jZW9mIEZ1bmN0aW9uJiZIbi50YWdOYW1lQ2hlY2soWGEpKSlyZXR1cm4hMTtpZihCYSYmIXBzW1hhXSl7Y29uc3QgZGM9SnQoZ3IpfHxnci5wYXJlbnROb2RlLEEwPWR0KGdy'@;
put 'KXx8Z3IuY2hpbGROb2RlcztpZihBMCYmZGMpZm9yKGxldCBUMT1BMC5sZW5ndGgtMTtUMT49MDstLVQxKXtjb25zdCBaaD1xZShBMFtUMV0sITApO1poLl9fcmVtb3ZhbENvdW50PShnci5fX3JlbW92YWxDb3VudHx8MCkrMSxkYy5pbnNlcnRCZWZvcmUoWmgscHQoZ3IpKX19cmV0dXJuIFl0'@;
put 'KGdyKSwhMH1yZXR1cm4gZ3IgaW5zdGFuY2VvZiBEJiYhZnVuY3Rpb24oZ3Ipe2xldCBRaT1KdChncik7KCFRaXx8IVFpLnRhZ05hbWUpJiYoUWk9e25hbWVzcGFjZVVSSTpxcyx0YWdOYW1lOiJ0ZW1wbGF0ZSJ9KTtjb25zdCBYYT1BTyhnci50YWdOYW1lKSxkYz1BTyhRaS50YWdOYW1lKTty'@;
put 'ZXR1cm4hIWVzW2dyLm5hbWVzcGFjZVVSSV0mJihnci5uYW1lc3BhY2VVUkk9PT1Vcz9RaS5uYW1lc3BhY2VVUkk9PT1KYz8ic3ZnIj09PVhhOlFpLm5hbWVzcGFjZVVSST09PWFkPyJzdmciPT09WGEmJigiYW5ub3RhdGlvbi14bWwiPT09ZGN8fHgzW2RjXSk6ISFXTltYYV06Z3IubmFtZXNw'@;
put 'YWNlVVJJPT09YWQ/UWkubmFtZXNwYWNlVVJJPT09SmM/Im1hdGgiPT09WGE6UWkubmFtZXNwYWNlVVJJPT09VXM/Im1hdGgiPT09WGEmJlFnW2RjXTohIVlOW1hhXTpnci5uYW1lc3BhY2VVUkk9PT1KYz8hKFFpLm5hbWVzcGFjZVVSST09PVVzJiYhUWdbZGNdfHxRaS5uYW1lc3BhY2VVUkk9'@;
put 'PT1hZCYmIXgzW2RjXSkmJiFZTltYYV0mJihkNFtYYV18fCFXTltYYV0pOiEoImFwcGxpY2F0aW9uL3hodG1sK3htbCIhPT1hdnx8IWVzW2dyLm5hbWVzcGFjZVVSSV0pKX0oZ3IpfHwoIm5vc2NyaXB0Ij09PVhhfHwibm9lbWJlZCI9PT1YYXx8Im5vZnJhbWVzIj09PVhhKSYmRzEoLzxcL25v'@;
put 'KHNjcmlwdHxlbWJlZHxmcmFtZXMpL2ksZ3IuaW5uZXJIVE1MKT8oWXQoZ3IpLCEwKToocG4mJjM9PT1nci5ub2RlVHlwZSYmKFFpPWdyLnRleHRDb250ZW50LFRPKFthaSxfaSxPbl0sZGM9PntRaT1sRShRaSxkYywiICIpfSksZ3IudGV4dENvbnRlbnQhPT1RaSYmKHNFKGwucmVtb3ZlZCx7'@;
put 'ZWxlbWVudDpnci5jbG9uZU5vZGUoKX0pLGdyLnRleHRDb250ZW50PVFpKSksRTMoR24uYWZ0ZXJTYW5pdGl6ZUVsZW1lbnRzLGdyLG51bGwpLCExKX0sS049ZnVuY3Rpb24oZ3IsUWksWGEpe2lmKE1yJiYoImlkIj09PVFpfHwibmFtZSI9PT1RaSkmJihYYSBpbiBhfHxYYSBpbiBXdGUpKXJl'@;
put 'dHVybiExO2lmKCghcXJ8fGFyW1FpXXx8IUcxKHpyLFFpKSkmJighSHJ8fCFHMShKbixRaSkpKWlmKCFOdFtRaV18fGFyW1FpXSl7aWYoIShxTihncikmJihIbi50YWdOYW1lQ2hlY2sgaW5zdGFuY2VvZiBSZWdFeHAmJkcxKEhuLnRhZ05hbWVDaGVjayxncil8fEhuLnRhZ05hbWVDaGVjayBp'@;
put 'bnN0YW5jZW9mIEZ1bmN0aW9uJiZIbi50YWdOYW1lQ2hlY2soZ3IpKSYmKEhuLmF0dHJpYnV0ZU5hbWVDaGVjayBpbnN0YW5jZW9mIFJlZ0V4cCYmRzEoSG4uYXR0cmlidXRlTmFtZUNoZWNrLFFpKXx8SG4uYXR0cmlidXRlTmFtZUNoZWNrIGluc3RhbmNlb2YgRnVuY3Rpb24mJkhuLmF0dHJp'@;
put 'YnV0ZU5hbWVDaGVjayhRaSkpfHwiaXMiPT09UWkmJkhuLmFsbG93Q3VzdG9taXplZEJ1aWx0SW5FbGVtZW50cyYmKEhuLnRhZ05hbWVDaGVjayBpbnN0YW5jZW9mIFJlZ0V4cCYmRzEoSG4udGFnTmFtZUNoZWNrLFhhKXx8SG4udGFnTmFtZUNoZWNrIGluc3RhbmNlb2YgRnVuY3Rpb24mJkhu'@;
put 'LnRhZ05hbWVDaGVjayhYYSkpKSlyZXR1cm4hMX1lbHNlIGlmKCFRb1tRaV0mJiFHMShlYSxsRShYYSwkciwiIikpJiYoInNyYyIhPT1RaSYmInhsaW5rOmhyZWYiIT09UWkmJiJocmVmIiE9PVFpfHwic2NyaXB0Ij09PWdyfHwwIT09cHFlKFhhLCJkYXRhOiIpfHwhaHNbZ3JdKSYmKCFvbnx8'@;
put 'RzEoSXIsbEUoWGEsJHIsIiIpKSkmJlhhKXJldHVybiExO3JldHVybiEwfSxxTj1mdW5jdGlvbihncil7cmV0dXJuImFubm90YXRpb24teG1sIiE9PWdyJiZpMmUoZ3Isd2kpfSxYTj1mdW5jdGlvbihncil7RTMoR24uYmVmb3JlU2FuaXRpemVBdHRyaWJ1dGVzLGdyLG51bGwpO2NvbnN0e2F0'@;
put 'dHJpYnV0ZXM6UWl9PWdyO2lmKCFRaXx8RTYoZ3IpKXJldHVybjtjb25zdCBYYT17YXR0ck5hbWU6IiIsYXR0clZhbHVlOiIiLGtlZXBBdHRyOiEwLGFsbG93ZWRBdHRyaWJ1dGVzOk50LGZvcmNlS2VlcEF0dHI6dm9pZCAwfTtsZXQgZGM9UWkubGVuZ3RoO2Zvcig7ZGMtLTspe2NvbnN0IEEw'@;
put 'PVFpW2RjXSx7bmFtZTpSdSxuYW1lc3BhY2VVUkk6VDEsdmFsdWU6Wmh9PUEwLHN2PSRhKFJ1KSx6QT1aaDtsZXQgazA9InZhbHVlIj09PVJ1P3pBOmdxZSh6QSk7aWYoWGEuYXR0ck5hbWU9c3YsWGEuYXR0clZhbHVlPWswLFhhLmtlZXBBdHRyPSEwLFhhLmZvcmNlS2VlcEF0dHI9dm9pZCAw'@;
put 'LEUzKEduLnVwb25TYW5pdGl6ZUF0dHJpYnV0ZSxncixYYSksazA9WGEuYXR0clZhbHVlLFpyJiYoImlkIj09PXN2fHwibmFtZSI9PT1zdikmJih2MChSdSxnciksazA9InVzZXItY29udGVudC0iK2swKSxwciYmRzEoLygoLS0hP3xdKT4pfDxcLyhzdHlsZXx0aXRsZSkvaSxrMCkpe3YwKFJ1'@;
put 'LGdyKTtjb250aW51ZX1pZihYYS5mb3JjZUtlZXBBdHRyKWNvbnRpbnVlO2lmKCFYYS5rZWVwQXR0cil7djAoUnUsZ3IpO2NvbnRpbnVlfWlmKCF5biYmRzEoL1wvPi9pLGswKSl7djAoUnUsZ3IpO2NvbnRpbnVlfXBuJiZUTyhbYWksX2ksT25dLEpOPT57azA9bEUoazAsSk4sIiAiKX0pO2Nv'@;
put 'bnN0IGt3PSRhKGdyLm5vZGVOYW1lKTtpZihLTihrdyxzdixrMCkpe2lmKHZuJiYib2JqZWN0Ij09dHlwZW9mIEVlJiYiZnVuY3Rpb24iPT10eXBlb2YgRWUuZ2V0QXR0cmlidXRlVHlwZSYmIVQxKXN3aXRjaChFZS5nZXRBdHRyaWJ1dGVUeXBlKGt3LHN2KSl7Y2FzZSJUcnVzdGVkSFRNTCI6'@;
put 'azA9dm4uY3JlYXRlSFRNTChrMCk7YnJlYWs7Y2FzZSJUcnVzdGVkU2NyaXB0VVJMIjprMD12bi5jcmVhdGVTY3JpcHRVUkwoazApfWlmKGswIT09ekEpdHJ5e1QxP2dyLnNldEF0dHJpYnV0ZU5TKFQxLFJ1LGswKTpnci5zZXRBdHRyaWJ1dGUoUnUsazApLEU2KGdyKT9ZdChncik6cjJlKGwu'@;
put 'cmVtb3ZlZCl9Y2F0Y2h7djAoUnUsZ3IpfX1lbHNlIHYwKFJ1LGdyKX1FMyhHbi5hZnRlclNhbml0aXplQXR0cmlidXRlcyxncixudWxsKX0sb3Y9ZnVuY3Rpb24gY28oZ3Ipe2xldCBRaT1udWxsO2NvbnN0IFhhPUdOKGdyKTtmb3IoRTMoR24uYmVmb3JlU2FuaXRpemVTaGFkb3dET00sZ3Is'@;
put 'bnVsbCk7UWk9WGEubmV4dE5vZGUoKTspRTMoR24udXBvblNhbml0aXplU2hhZG93Tm9kZSxRaSxudWxsKSwkTihRaSksWE4oUWkpLFFpLmNvbnRlbnQgaW5zdGFuY2VvZiBmJiZjbyhRaS5jb250ZW50KTtFMyhHbi5hZnRlclNhbml0aXplU2hhZG93RE9NLGdyLG51bGwpfTtyZXR1cm4gbC5z'@;
put 'YW5pdGl6ZT1mdW5jdGlvbihjbyl7bGV0IGdyPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp7fSxRaT1udWxsLFhhPW51bGwsZGM9bnVsbCxBMD1udWxsO2lmKEJsPSFjbyxCbCYmKGNvPSJceDNjIS0tXHgzZSIpLCJzdHJpbmciIT10eXBl'@;
put 'b2YgY28mJiFlNShjbykpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBjby50b1N0cmluZyl0aHJvdyBjRSgidG9TdHJpbmcgaXMgbm90IGEgZnVuY3Rpb24iKTtpZigic3RyaW5nIiE9dHlwZW9mKGNvPWNvLnRvU3RyaW5nKCkpKXRocm93IGNFKCJkaXJ0eSBpcyBub3QgYSBzdHJpbmcsIGFib3J0'@;
put 'aW5nIil9aWYoIWwuaXNTdXBwb3J0ZWQpcmV0dXJuIGNvO2lmKGRyfHxCQShnciksbC5yZW1vdmVkPVtdLCJzdHJpbmciPT10eXBlb2YgY28mJihJbz0hMSksSW8pe2lmKGNvLm5vZGVOYW1lKXtjb25zdCBaaD0kYShjby5ub2RlTmFtZSk7aWYoIWZhW1poXXx8dHJbWmhdKXRocm93IGNFKCJy'@;
put 'b290IG5vZGUgaXMgZm9yYmlkZGVuIGFuZCBjYW5ub3QgYmUgc2FuaXRpemVkIGluLXBsYWNlIil9fWVsc2UgaWYoY28gaW5zdGFuY2VvZiBNKVFpPVpzKCJceDNjIS0tLS1ceDNlIiksWGE9UWkub3duZXJEb2N1bWVudC5pbXBvcnROb2RlKGNvLCEwKSwxPT09WGEubm9kZVR5cGUmJiJCT0RZ'@;
put 'Ij09PVhhLm5vZGVOYW1lfHwiSFRNTCI9PT1YYS5ub2RlTmFtZT9RaT1YYTpRaS5hcHBlbmRDaGlsZChYYSk7ZWxzZXtpZighWm4mJiFwbiYmISRuJiYtMT09PWNvLmluZGV4T2YoIjwiKSlyZXR1cm4gdm4mJk5yP3ZuLmNyZWF0ZUhUTUwoY28pOmNvO2lmKFFpPVpzKGNvKSwhUWkpcmV0dXJu'@;
put 'IFpuP251bGw6TnI/Q246IiJ9UWkmJlVyJiZZdChRaS5maXJzdENoaWxkKTtjb25zdCBSdT1HTihJbz9jbzpRaSk7Zm9yKDtkYz1SdS5uZXh0Tm9kZSgpOykkTihkYyksWE4oZGMpLGRjLmNvbnRlbnQgaW5zdGFuY2VvZiBmJiZvdihkYy5jb250ZW50KTtpZihJbylyZXR1cm4gY287aWYoWm4p'@;
put 'e2lmKHNyKWZvcihBMD1Dci5jYWxsKFFpLm93bmVyRG9jdW1lbnQpO1FpLmZpcnN0Q2hpbGQ7KUEwLmFwcGVuZENoaWxkKFFpLmZpcnN0Q2hpbGQpO2Vsc2UgQTA9UWk7cmV0dXJuKE50LnNoYWRvd3Jvb3R8fE50LnNoYWRvd3Jvb3Rtb2RlKSYmKEEwPW1yLmNhbGwoZCxBMCwhMCkpLEEwfWxl'@;
put 'dCBUMT0kbj9RaS5vdXRlckhUTUw6UWkuaW5uZXJIVE1MO3JldHVybiAkbiYmZmFbIiFkb2N0eXBlIl0mJlFpLm93bmVyRG9jdW1lbnQmJlFpLm93bmVyRG9jdW1lbnQuZG9jdHlwZSYmUWkub3duZXJEb2N1bWVudC5kb2N0eXBlLm5hbWUmJkcxKHUyZSxRaS5vd25lckRvY3VtZW50LmRvY3R5'@;
put 'cGUubmFtZSkmJihUMT0iPCFET0NUWVBFICIrUWkub3duZXJEb2N1bWVudC5kb2N0eXBlLm5hbWUrIj5cbiIrVDEpLHBuJiZUTyhbYWksX2ksT25dLFpoPT57VDE9bEUoVDEsWmgsIiAiKX0pLHZuJiZOcj92bi5jcmVhdGVIVE1MKFQxKTpUMX0sbC5zZXRDb25maWc9ZnVuY3Rpb24oKXtCQShh'@;
put 'cmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06e30pLGRyPSEwfSxsLmNsZWFyQ29uZmlnPWZ1bmN0aW9uKCl7eDY9bnVsbCxkcj0hMX0sbC5pc1ZhbGlkQXR0cmlidXRlPWZ1bmN0aW9uKGNvLGdyLFFpKXt4Nnx8QkEoe30pO2NvbnN0IFhhPSRh'@;
put 'KGNvKSxkYz0kYShncik7cmV0dXJuIEtOKFhhLGRjLFFpKX0sbC5hZGRIb29rPWZ1bmN0aW9uKGNvLGdyKXsiZnVuY3Rpb24iPT10eXBlb2YgZ3ImJnNFKEduW2NvXSxncil9LGwucmVtb3ZlSG9vaz1mdW5jdGlvbihjbyxncil7aWYodm9pZCAwIT09Z3Ipe2NvbnN0IFFpPWhxZShHbltjb10s'@;
put 'Z3IpO3JldHVybi0xPT09UWk/dm9pZCAwOmZxZShHbltjb10sUWksMSlbMF19cmV0dXJuIHIyZShHbltjb10pfSxsLnJlbW92ZUhvb2tzPWZ1bmN0aW9uKGNvKXtHbltjb109W119LGwucmVtb3ZlQWxsSG9va3M9ZnVuY3Rpb24oKXtHbj17YWZ0ZXJTYW5pdGl6ZUF0dHJpYnV0ZXM6W10sYWZ0'@;
put 'ZXJTYW5pdGl6ZUVsZW1lbnRzOltdLGFmdGVyU2FuaXRpemVTaGFkb3dET006W10sYmVmb3JlU2FuaXRpemVBdHRyaWJ1dGVzOltdLGJlZm9yZVNhbml0aXplRWxlbWVudHM6W10sYmVmb3JlU2FuaXRpemVTaGFkb3dET006W10sdXBvblNhbml0aXplQXR0cmlidXRlOltdLHVwb25TYW5pdGl6'@;
put 'ZUVsZW1lbnQ6W10sdXBvblNhbml0aXplU2hhZG93Tm9kZTpbXX19LGx9KCk7ZnVuY3Rpb24gcDJlKGMpe2NvbnN0IGw9Yy5sZW5ndGg7bGV0IGE9MDtmb3IoO2E8bDspY1thXT1bY1thXV0sYSs9MX1mdW5jdGlvbiBsJChjLGwpe2NvbnN0IGE9bC5sZW5ndGg7bGV0IGQ9MDtmb3IoO2Q8YTsp'@;
put 'Yy5wdXNoKGxbZF0pLGQrPTF9ZnVuY3Rpb24gaEUoYyl7Y29uc3QgbD1bXTtpZighY3x8MD09PWMubGVuZ3RofHwhY1swXXx8MD09PWNbMF0ubGVuZ3RoKXJldHVybiBsO2NvbnN0IGE9Yy5sZW5ndGgsZD1jWzBdLmxlbmd0aDtmb3IobGV0IGg9MDtoPGE7aCsrKWZvcihsZXQgZj0wO2Y8ZDtm'@;
put 'KyspbFtmXXx8KGxbZl09W10pLGxbZl1baF09Y1toXVtmXTtyZXR1cm4gbH1mdW5jdGlvbiBxdShjLGwsYSxkKXtsZXQgaD0tMSxmPWMsdj1hO0FycmF5LmlzQXJyYXkoYyl8fChmPUFycmF5LmZyb20oYykpO2NvbnN0IE09Zi5sZW5ndGg7Zm9yKGQmJk0mJihoKz0xLHY9ZltoXSksaCs9MTto'@;
put 'PE07KXY9bCh2LGZbaF0saCxmKSxoKz0xO3JldHVybiB2fWZ1bmN0aW9uIEltKGMsbCl7bGV0IGE9MCxkPWM7QXJyYXkuaXNBcnJheShjKXx8KGQ9QXJyYXkuZnJvbShjKSk7Y29uc3QgaD1kLmxlbmd0aCxmPVtdO2xldCB2PS0xO2Zvcig7YTxoOyl7Y29uc3QgTT1kW2FdO2woTSxhLGQpJiYo'@;
put 'dis9MSxmW3ZdPU0pLGErPTF9cmV0dXJuIGZ9ZnVuY3Rpb24geXMoYyxsKXtsZXQgYT0wLGQ9YztBcnJheS5pc0FycmF5KGMpfHwoZD1BcnJheS5mcm9tKGMpKTtjb25zdCBoPWQubGVuZ3RoLGY9W107bGV0IHY9LTE7Zm9yKDthPGg7KXYrPTEsZlt2XT1sKGRbYV0sYSxkKSxhKz0xO3JldHVy'@;
put 'biBmfWZ1bmN0aW9uIFluKGMsbCl7bGV0IGE9MCxkPWM7QXJyYXkuaXNBcnJheShjKXx8KGQ9QXJyYXkuZnJvbShjKSk7Y29uc3QgaD1kLmxlbmd0aDtmb3IoO2E8aCYmITEhPT1sKGRbYV0sYSxkKTspYSs9MTtyZXR1cm4gY31mdW5jdGlvbiBnMmUoYyl7cmV0dXJuIHF1KGMsKGwsYSk9Pmwr'@;
put 'YSwwKX1mdW5jdGlvbiBJcWUoYyl7cmV0dXJuIHF1KGMsKGwsYSk9Pmw+YT9sOmEsQXJyYXkuaXNBcnJheShjKT9jWzBdOnZvaWQgMCl9ZnVuY3Rpb24gUnFlKGMpe3JldHVybiBxdShjLChsLGEpPT5sPGE/bDphLEFycmF5LmlzQXJyYXkoYyk/Y1swXTp2b2lkIDApfWZ1bmN0aW9uIExxZShj'@;
put 'KXtyZXR1cm4gYy5sZW5ndGg/ZzJlKGMpL2MubGVuZ3RoOjB9ZnVuY3Rpb24gbTJlKGMpe3JldHVybiBxdShjLChsLGEpPT5sLmNvbmNhdChBcnJheS5pc0FycmF5KGEpP20yZShhKTphKSxbXSl9ZnVuY3Rpb24gdjJlKGMpe2NvbnN0IGw9W107cmV0dXJuIFluKGMsYT0+ey0xPT09bC5pbmRl'@;
put 'eE9mKGEpJiZsLnB1c2goYSl9KSxsfWZ1bmN0aW9uIGMkKCl7Zm9yKHZhciBjPWFyZ3VtZW50cy5sZW5ndGgsbD1uZXcgQXJyYXkoYyksYT0wO2E8YzthKyspbFthXT1hcmd1bWVudHNbYV07Y29uc3RbZCwuLi5oXT1bLi4ubF07bGV0IGY9ZDtyZXR1cm4gWW4oaCx2PT57Zj1mLmZpbHRlcihN'@;
put 'PT4hdi5pbmNsdWRlcyhNKSl9KSxmfWZ1bmN0aW9uIE9xZSgpe2Zvcih2YXIgYz1hcmd1bWVudHMubGVuZ3RoLGw9bmV3IEFycmF5KGMpLGE9MDthPGM7YSsrKWxbYV09YXJndW1lbnRzW2FdO2NvbnN0W2QsLi4uaF09Wy4uLmxdO2xldCBmPWQ7cmV0dXJuIFluKGgsdj0+e2Y9Zi5maWx0ZXIo'@;
put 'TT0+di5pbmNsdWRlcyhNKSl9KSxmfWZ1bmN0aW9uIFBxZSgpe2Zvcih2YXIgYz1hcmd1bWVudHMubGVuZ3RoLGw9bmV3IEFycmF5KGMpLGE9MDthPGM7YSsrKWxbYV09YXJndW1lbnRzW2FdO2NvbnN0W2QsLi4uaF09Wy4uLmxdLGY9bmV3IFNldChkKTtyZXR1cm4gWW4oaCx2PT57WW4odixN'@;
put 'PT57Zi5oYXMoTSl8fGYuYWRkKE0pfSl9KSxBcnJheS5mcm9tKGYpfWZ1bmN0aW9uIHUkKGMpe3JldHVybiBjLnNwbGl0KGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXToiICIpfWZ1bmN0aW9uIGdsKGMpe2Zvcih2YXIgbD1hcmd1bWVudHMu'@;
put 'bGVuZ3RoLGE9bmV3IEFycmF5KGw+MT9sLTE6MCksZD0xO2Q8bDtkKyspYVtkLTFdPWFyZ3VtZW50c1tkXTtyZXR1cm4gcXUoYywoZix2LE0pPT5mK3YucmVwbGFjZSgvXHI/XG5ccyovZywiIikrKGFbTV0/YVtNXToiIiksIiIpLnRyaW0oKX1mdW5jdGlvbiBsYyhjKXtsZXQgbDtzd2l0Y2go'@;
put 'dHlwZW9mIGMpe2Nhc2Uic3RyaW5nIjpjYXNlIm51bWJlciI6bD1gJHtjfWA7YnJlYWs7Y2FzZSJvYmplY3QiOmw9bnVsbD09PWM/IiI6Yy50b1N0cmluZygpO2JyZWFrO2Nhc2UidW5kZWZpbmVkIjpsPSIiO2JyZWFrO2RlZmF1bHQ6bD1jLnRvU3RyaW5nKCl9cmV0dXJuIGx9ZnVuY3Rpb24g'@;
put 'UGEoYyl7cmV0dXJuIHR5cGVvZiBjPCJ1In1mdW5jdGlvbiBfYyhjKXtyZXR1cm4gdHlwZW9mIGM+InUifWZ1bmN0aW9uIFVjKGMpe3JldHVybiBudWxsPT09Y3x8IiI9PT1jfHxfYyhjKX1mdW5jdGlvbiBiMmUoYyl7cmV0dXJuIltvYmplY3QgUmVnRXhwXSI9PT1PYmplY3QucHJvdG90eXBl'@;
put 'LnRvU3RyaW5nLmNhbGwoYyl9Y29uc3QgZkU9Imxlbmd0aCIscEU9Yz0+cGFyc2VJbnQoYywxNikseTJlPWM9PnBhcnNlSW50KGMsMTApLERPPShjLGwsYSk9PmMuc3Vic3RyKGwsYSksZ0U9Yz0+Yy5jb2RlUG9pbnRBdCgwKS02NSxkJD1jPT5gJHtjfWAucmVwbGFjZSgvXC0vZywiIiksRnFl'@;
put 'PWM9PnBFKERPKGQkKGMpLHBFKCIxMiIpLGdFKCJGIikpKS8ocEUoRE8oZCQoYyksZ0UoIkIiKSx+fiFbXVtmRV0pKXx8OSksSHFlPSgpPT50eXBlb2YgbG9jYXRpb248InUiJiYvXihbYS16MC05XC1dK1wuKT9ceDY4XHg2MVx4NkVceDY0XHg3M1x4NkZceDZFXHg3NFx4NjFceDYyXHg2Q1x4'@;
put 'NjVceDJFXHg2M1x4NkZceDZEJC9pLnRlc3QobG9jYXRpb24uaG9zdCk7bGV0IF8yZT0hMTtjb25zdCB3MmU9e2ludmFsaWQ6KCk9PmdsYAogICAgVGhlIGxpY2Vuc2Uga2V5IGZvciBIYW5kc29udGFibGUgaXMgaW52YWxpZC5ceDIwCiAgICBJZiB5b3UgbmVlZCBhbnkgaGVscCwgY29udGFj'@;
put 'dCB1cyBhdCBzdXBwb3J0QGhhbmRzb250YWJsZS5jb20uYCxleHBpcmVkOmM9PntsZXR7a2V5VmFsaWRpdHlEYXRlOmwsaG90VmVyc2lvbjphfT1jO3JldHVybiBnbGAKICAgIFRoZSBsaWNlbnNlIGtleSBmb3IgSGFuZHNvbnRhYmxlIGV4cGlyZWQgb24gJHtsfSwgYW5kIGlzIG5vdCB2YWxp'@;
put 'ZCBmb3IgdGhlIGluc3RhbGxlZFx4MjAKICAgIHZlcnNpb24gJHthfS4gUmVuZXcgeW91ciBsaWNlbnNlIGtleSBhdCBoYW5kc29udGFibGUuY29tIG9yIGRvd25ncmFkZSB0byBhIHZlcnNpb24gcmVsZWFzZWQgcHJpb3JceDIwCiAgICB0byAke2x9LiBJZiB5b3UgbmVlZCBhbnkgaGVscCwg'@;
put 'Y29udGFjdCB1cyBhdCBzYWxlc0BoYW5kc29udGFibGUuY29tLmB9LG1pc3Npbmc6KCk9PmdsYAogICAgVGhlIGxpY2Vuc2Uga2V5IGZvciBIYW5kc29udGFibGUgaXMgbWlzc2luZy4gVXNlIHlvdXIgcHVyY2hhc2VkIGtleSB0byBhY3RpdmF0ZSB0aGUgcHJvZHVjdC5ceDIwCiAgICBBbHRl'@;
put 'cm5hdGl2ZWx5LCB5b3UgY2FuIGFjdGl2YXRlIEhhbmRzb250YWJsZSB0byB1c2UgZm9yIG5vbi1jb21tZXJjaWFsIHB1cnBvc2VzIGJ5XHgyMAogICAgcGFzc2luZyB0aGUga2V5OiAnbm9uLWNvbW1lcmNpYWwtYW5kLWV2YWx1YXRpb24nLiBJZiB5b3UgbmVlZCBhbnkgaGVscCwgY29udGFj'@;
put 'dFx4MjAKICAgIHVzIGF0IHN1cHBvcnRAaGFuZHNvbnRhYmxlLmNvbS5gLG5vbl9jb21tZXJjaWFsOigpPT4iIn0sQzJlPXtpbnZhbGlkOigpPT5nbGAKICAgIFRoZSBsaWNlbnNlIGtleSBmb3IgSGFuZHNvbnRhYmxlIGlzIGludmFsaWQuXHgyMAogICAgPGEgaHJlZj0iaHR0cHM6Ly9oYW5k'@;
put 'c29udGFibGUuY29tL2RvY3MvdHV0b3JpYWwtbGljZW5zZS1rZXkuaHRtbCIgdGFyZ2V0PSJfYmxhbmsiPlJlYWQgbW9yZTwvYT4gb24gaG93IHRvXHgyMAogICAgaW5zdGFsbCBpdCBwcm9wZXJseSBvciBjb250YWN0IHVzIGF0IDxhIGhyZWY9Im1haWx0bzpzdXBwb3J0QGhhbmRzb250YWJs'@;
put 'ZS5jb20iPnN1cHBvcnRAaGFuZHNvbnRhYmxlLmNvbTwvYT4uYCxleHBpcmVkOmM9PntsZXR7a2V5VmFsaWRpdHlEYXRlOmwsaG90VmVyc2lvbjphfT1jO3JldHVybiBnbGAKICAgIFRoZSBsaWNlbnNlIGtleSBmb3IgSGFuZHNvbnRhYmxlIGV4cGlyZWQgb24gJHtsfSwgYW5kIGlzIG5vdCB2'@;
put 'YWxpZCBmb3IgdGhlIGluc3RhbGxlZFx4MjAKICAgIHZlcnNpb24gJHthfS4gPGEgaHJlZj0iaHR0cHM6Ly9oYW5kc29udGFibGUuY29tL3ByaWNpbmciIHRhcmdldD0iX2JsYW5rIj5SZW5ldzwvYT4geW91clx4MjAKICAgIGxpY2Vuc2Uga2V5IG9yIGRvd25ncmFkZSB0byBhIHZlcnNpb24g'@;
put 'cmVsZWFzZWQgcHJpb3IgdG8gJHtsfS4gSWYgeW91IG5lZWQgYW55XHgyMAogICAgaGVscCwgY29udGFjdCB1cyBhdCA8YSBocmVmPSJtYWlsdG86c2FsZXNAaGFuZHNvbnRhYmxlLmNvbSI+c2FsZXNAaGFuZHNvbnRhYmxlLmNvbTwvYT4uYH0sbWlzc2luZzooKT0+Z2xgCiAgICBUaGUgbGlj'@;
put 'ZW5zZSBrZXkgZm9yIEhhbmRzb250YWJsZSBpcyBtaXNzaW5nLiBVc2UgeW91ciBwdXJjaGFzZWQga2V5IHRvIGFjdGl2YXRlIHRoZSBwcm9kdWN0Llx4MjAKICAgIEFsdGVybmF0aXZlbHksIHlvdSBjYW4gYWN0aXZhdGUgSGFuZHNvbnRhYmxlIHRvIHVzZSBmb3Igbm9uLWNvbW1lcmNpYWwg'@;
put 'cHVycG9zZXMgYnlceDIwCiAgICBwYXNzaW5nIHRoZSBrZXk6ICdub24tY29tbWVyY2lhbC1hbmQtZXZhbHVhdGlvbicuXHgyMAogICAgPGEgaHJlZj0iaHR0cHM6Ly9oYW5kc29udGFibGUuY29tL2RvY3MvdHV0b3JpYWwtbGljZW5zZS1rZXkuaHRtbCIgdGFyZ2V0PSJfYmxhbmsiPlJlYWQg'@;
put 'bW9yZTwvYT4gYWJvdXQgaXQgaW5ceDIwCiAgICB0aGUgZG9jdW1lbnRhdGlvbiBvciBjb250YWN0IHVzIGF0IDxhIGhyZWY9Im1haWx0bzpzdXBwb3J0QGhhbmRzb250YWJsZS5jb20iPnN1cHBvcnRAaGFuZHNvbnRhYmxlLmNvbTwvYT4uYCxub25fY29tbWVyY2lhbDooKT0+IiJ9O2Z1bmN0'@;
put 'aW9uIFMyZShjLGwpe2NvbnN0IGE9IVVjKGMpLGQ9InN0cmluZyI9PXR5cGVvZiBjJiYibm9uLWNvbW1lcmNpYWwtYW5kLWV2YWx1YXRpb24iPT09Yy50b0xvd2VyQ2FzZSgpLGg9IjE1LjMuMCI7bGV0IGYsdj0iaW52YWxpZCIsTT0iaW52YWxpZCI7Y29uc3QgRD1mdW5jdGlvbiBOcWUoYyl7'@;
put 'bGV0IGw9W11bZkVdLGE9bDtpZihjW2ZFXSE9PWdFKCJaIikpcmV0dXJuITE7Zm9yKGxldCBkPSIiLGg9IkI8SDRQKyIuc3BsaXQoIiIpLGY9Z0UoaC5zaGlmdCgpKTtmO2Y9Z0UoaC5zaGlmdCgpfHwiQSIpKS0tZjwiIltmRV0/YXw9KHkyZShgJHt5MmUocEUoZCkrKHBFKERPKGMsTWF0aC5h'@;
put 'YnMoZiksMikpK1tdKS5wYWRTdGFydCgyLCIwIikpfWApJTk3fHwyKT4+MTpkPURPKGMsZixmPzE9PT1oW2ZFXT85Ojg6Nik7cmV0dXJuIGE9PT1sfShjPWQkKGN8fCIiKSk7aWYoYXx8ZHx8RClpZihEKXtjb25zdCBaPU9vKCIyOS8wNC8yMDI1IiwiREQvTU0vWVlZWSIpLHJlPU1hdGguZmxv'@;
put 'b3IoWi50b0RhdGUoKS5nZXRUaW1lKCkvODY0ZTUpLGNlPUZxZShjKTtmPU9vKDg2NGU1KihjZSsxKSwieCIpLmZvcm1hdCgiTU1NTSBERCwgWVlZWSIpLHJlPmNlPyh2PSJleHBpcmVkIixNPSJleHBpcmVkIik6KHY9InZhbGlkIixNPSJ2YWxpZCIpfWVsc2UgZD8odj0ibm9uX2NvbW1lcmNp'@;
put 'YWwiLE09InZhbGlkIik6KHY9ImludmFsaWQiLE09ImludmFsaWQiKTtlbHNlIHY9Im1pc3NpbmciLE09Im1pc3NpbmciO2lmKEhxZSgpJiYodj0idmFsaWQiLE09InZhbGlkIiksIV8yZSYmInZhbGlkIiE9PXYmJih3MmVbdl0oe2tleVZhbGlkaXR5RGF0ZTpmLGhvdFZlcnNpb246aH0pJiZj'@;
put 'b25zb2xlWyJub25fY29tbWVyY2lhbCI9PT12PyJpbmZvIjoid2FybiJdKHcyZVt2XSh7a2V5VmFsaWRpdHlEYXRlOmYsaG90VmVyc2lvbjpofSkpLF8yZT0hMCksInZhbGlkIiE9PU0mJmwucGFyZW50Tm9kZSYmQzJlW01dKHtrZXlWYWxpZGl0eURhdGU6Zixob3RWZXJzaW9uOmh9KSl7Y29u'@;
put 'c3QgcmU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7cmUuY2xhc3NOYW1lPSJoYW5kc29udGFibGUgaG90LWRpc3BsYXktbGljZW5zZS1pbmZvIixyZS5pbm5lckhUTUw9QzJlW01dKHtrZXlWYWxpZGl0eURhdGU6Zixob3RWZXJzaW9uOmh9KSxsLnBhcmVudE5vZGUuaW5zZXJ0QmVm'@;
put 'b3JlKHJlLGwubmV4dFNpYmxpbmcpfX1mdW5jdGlvbiBwMShjKXtyZXR1cm4gY1swXS50b1VwcGVyQ2FzZSgpK2Muc3Vic3RyKDEpfWZ1bmN0aW9uIFZxZSgpe2NvbnN0IGM9W107Zm9yKHZhciBsPWFyZ3VtZW50cy5sZW5ndGgsYT1uZXcgQXJyYXkobCksZD0wO2Q8bDtkKyspYVtkXT1hcmd1'@;
put 'bWVudHNbZF07bGV0IGg9YS5sZW5ndGg7Zm9yKDtoOyl7aC09MTtjb25zdCBmPWxjKGFbaF0pLnRvTG93ZXJDYXNlKCk7LTE9PT1jLmluZGV4T2YoZikmJmMucHVzaChmKX1yZXR1cm4gMT09PWMubGVuZ3RofWZ1bmN0aW9uIGgkKCl7ZnVuY3Rpb24gYygpe3JldHVybiBNYXRoLmZsb29yKDY1'@;
put 'NTM2KigxK01hdGgucmFuZG9tKCkpKS50b1N0cmluZygxNikuc3Vic3RyaW5nKDEpfXJldHVybiBjKCkrYygpK2MoKStjKCl9ZnVuY3Rpb24gZiQoYyl7cmV0dXJuL14oWzAtOV1bMC05XT8lJCl8KF4xMDAlJCkvLnRlc3QoYyl9ZnVuY3Rpb24gcCQoYyl7bGV0IGw9YXJndW1lbnRzLmxlbmd0'@;
put 'aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnt9O3JldHVybmAke2N9YC5yZXBsYWNlKC8oPzpcXCk/XFsoW15bXF1dKyldL2csKGEsZCk9PiJcXCI9PT1hLmNoYXJBdCgwKT9hLnN1YnN0cigxLGEubGVuZ3RoLTEpOnZvaWQgMD09PWxbZF0/IiI6bFtkXSl9ZnVuY3Rp'@;
put 'b24gZyQoYyl7cmV0dXJuIElPKGAke2N9YCx7QUxMT1dFRF9UQUdTOltdfSl9ZnVuY3Rpb24gSU8oYyxsKXtyZXR1cm4gRHFlLnNhbml0aXplKGMsbCl9Y29uc3QgTjc9Yz0+WyJ0YWJpbmRleCIsY10sS3FlPSgpPT5bInJvbGUiLCJjaGVja2JveCJdLG1FPWM9PlsiYXJpYS1sYWJlbCIsY10s'@;
put 'Vjc9KCk9PlsiYXJpYS1oaWRkZW4iLCJ0cnVlIl0sRTJlPWM9PlsiYXJpYS1oYXNwb3B1cCIsY10sVDJlPWM9PlsiYXJpYS1yb3djb3VudCIsY10sUk89Yz0+WyJhcmlhLWNvbGNvdW50IixjXSxBMmU9Yz0+WyJhcmlhLXJvd2luZGV4IixjXSx2JD1jPT5bImFyaWEtY29saW5kZXgiLGNdLE4y'@;
put 'PWM9PlsiYXJpYS1leHBhbmRlZCIsY10sazJlPSgpPT5bImFyaWEtcmVhZG9ubHkiLCJ0cnVlIl0sRDJlPSgpPT5bImFyaWEtaW52YWxpZCIsInRydWUiXSxJMmU9Yz0+WyJhcmlhLWNoZWNrZWQiLGNdLHJYZT1jPT5bImFyaWEtY29udHJvbHMiLGNdLGFYZT1jPT5bImFyaWEtbGl2ZSIsY10s'@;
put 'b1hlPWM9PlsiYXJpYS1yZWxldmFudCIsY10sc1hlPWM9PlsiYXJpYS1zZXRzaXplIixjXSxsWGU9Yz0+WyJhcmlhLXBvc2luc2V0IixjXTtmdW5jdGlvbiBSMmUoYyl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOjAsYT0tMSxk'@;
put 'PW51bGwsaD1jO2Zvcig7bnVsbCE9PWg7KXtpZihhPT09bCl7ZD1oO2JyZWFrfWguaG9zdCYmaC5ub2RlVHlwZT09PU5vZGUuRE9DVU1FTlRfRlJBR01FTlRfTk9ERT9oPWguaG9zdDooYSs9MSxoPWgucGFyZW50Tm9kZSl9cmV0dXJuIGR9ZnVuY3Rpb24gdkUoYyxsKXtjb25zdCBhPWMuY2xv'@;
put 'c2VzdCgiLmhhbmRzb250YWJsZSIpO3JldHVybiEhYSYmKGEucGFyZW50Tm9kZT09PWx8fGE9PT1sKX1mdW5jdGlvbiBMMmUoYyl7cmV0dXJuIE9iamVjdC5nZXRQcm90b3R5cGVPZihjLnBhcmVudCkmJmMuZnJhbWVFbGVtZW50fWZ1bmN0aW9uIEI3KGMpe3JldHVybiBMMmUoYykmJmMucGFy'@;
put 'ZW50fWZ1bmN0aW9uIGNYZShjKXtyZXR1cm4hIU9iamVjdC5nZXRQcm90b3R5cGVPZihjLnBhcmVudCl9ZnVuY3Rpb24gUm0oYyl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOltdLGE9YXJndW1lbnRzLmxlbmd0aD4yP2FyZ3Vt'@;
put 'ZW50c1syXTp2b2lkIDA7Y29uc3R7RUxFTUVOVF9OT0RFOmQsRE9DVU1FTlRfRlJBR01FTlRfTk9ERTpofT1Ob2RlO2xldCBmPWM7Zm9yKDtudWxsIT1mJiZmIT09YTspe2NvbnN0e25vZGVUeXBlOnYsbm9kZU5hbWU6TX09ZjtpZih2PT09ZCYmKGwuaW5jbHVkZXMoTSl8fGwuaW5jbHVkZXMo'@;
put 'ZikpKXJldHVybiBmO2NvbnN0e2hvc3Q6RH09ZjtmPUQmJnY9PT1oP0Q6Zi5wYXJlbnROb2RlfXJldHVybiBudWxsfWZ1bmN0aW9uIGJFKGMsbCxhKXtjb25zdCBkPVtdO2xldCBoPWM7Zm9yKDtoJiYoaD1SbShoLGwsYSksaCYmKCFhfHxhLmNvbnRhaW5zKGgpKSk7KWQucHVzaChoKSxoPWgu'@;
put 'aG9zdCYmaC5ub2RlVHlwZT09PU5vZGUuRE9DVU1FTlRfRlJBR01FTlRfTk9ERT9oLmhvc3Q6aC5wYXJlbnROb2RlO2NvbnN0IGY9ZC5sZW5ndGg7cmV0dXJuIGY/ZFtmLTFdOm51bGx9ZnVuY3Rpb24gTzJlKGMsbCl7Y29uc3QgYT17ZWxlbWVudDp2b2lkIDAsY2xhc3NOYW1lczpbXX07bGV0'@;
put 'IGQ9Yztmb3IoO251bGwhPT1kJiZkIT09Yy5vd25lckRvY3VtZW50LmRvY3VtZW50RWxlbWVudCYmIWEuZWxlbWVudDspe2lmKCJzdHJpbmciPT10eXBlb2YgbCYmZC5jbGFzc0xpc3QuY29udGFpbnMobCkpYS5lbGVtZW50PWQsYS5jbGFzc05hbWVzLnB1c2gobCk7ZWxzZSBpZihsIGluc3Rh'@;
put 'bmNlb2YgUmVnRXhwKXtjb25zdCBoPUFycmF5LmZyb20oZC5jbGFzc0xpc3QpLmZpbHRlcihmPT5sLnRlc3QoZikpO2gubGVuZ3RoJiYoYS5lbGVtZW50PWQsYS5jbGFzc05hbWVzLnB1c2goLi4uaCkpfWQ9ZC5wYXJlbnRFbGVtZW50fXJldHVybiBhfWZ1bmN0aW9uIExtKGMsbCl7bGV0IGE9'@;
put 'Yy5wYXJlbnROb2RlLGQ9W107Zm9yKCJzdHJpbmciPT10eXBlb2YgbD9kPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGMuZGVmYXVsdFZpZXc/Yy5xdWVyeVNlbGVjdG9yQWxsKGwpOmMub3duZXJEb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKGwpLDApOmQucHVzaChsKTtudWxsIT09YTsp'@;
put 'e2lmKGQuaW5kZXhPZihhKT4tMSlyZXR1cm4hMDthPWEucGFyZW50Tm9kZX1yZXR1cm4hMX1mdW5jdGlvbiBQMmUoYyl7bGV0IGw9MCxhPWM7aWYoYS5wcmV2aW91c1NpYmxpbmcpZm9yKDthPWEucHJldmlvdXNTaWJsaW5nOylsKz0xO3JldHVybiBsfWZ1bmN0aW9uIE9tKGMsbCxhKXtjb25z'@;
put 'dCBkPWEucGFyZW50RWxlbWVudC5xdWVyeVNlbGVjdG9yKGAuaHRfY2xvbmVfJHtjfWApO3JldHVybiBkP2QuY29udGFpbnMobCk6bnVsbH1mdW5jdGlvbiBGMmUoYyl7cmV0dXJuIGMmJmMubGVuZ3RoP2MuZmlsdGVyKGw9PiEhbCk6W119ZnVuY3Rpb24gSDJlKGMsbCl7aWYoIWN8fCFjLmxl'@;
put 'bmd0aClyZXR1cm4gbD97cmVnZXhGcmVlOltdLHJlZ2V4ZXM6W119OltdO2NvbnN0IGE9W10sZD1bXTtyZXR1cm4gZC5wdXNoKC4uLmMuZmlsdGVyKGg9Pntjb25zdCBmPWggaW5zdGFuY2VvZiBSZWdFeHA7cmV0dXJuIGYmJmwmJmEucHVzaChoKSwhZn0pKSxsP3tyZWdleEZyZWU6ZCxyZWdl'@;
put 'eGVzOmF9OmR9ZnVuY3Rpb24gcG8oYyxsKXtyZXR1cm4gdm9pZCAwIT09Yy5jbGFzc0xpc3QmJiJzdHJpbmciPT10eXBlb2YgbCYmIiIhPT1sJiZjLmNsYXNzTGlzdC5jb250YWlucyhsKX1mdW5jdGlvbiBUaShjLGwpeyJzdHJpbmciPT10eXBlb2YgbCYmKGw9bC5zcGxpdCgiICIpKSwobD1G'@;
put 'MmUobCkpLmxlbmd0aD4wJiZjLmNsYXNzTGlzdC5hZGQoLi4ubCl9ZnVuY3Rpb24gbG8oYyxsKXsic3RyaW5nIj09dHlwZW9mIGw/bD1sLnNwbGl0KCIgIik6bCBpbnN0YW5jZW9mIFJlZ0V4cCYmKGw9W2xdKTtsZXR7cmVnZXhGcmVlOmEscmVnZXhlczpkfT1IMmUobCwhMCk7YT1GMmUoYSks'@;
put 'YS5sZW5ndGg+MCYmYy5jbGFzc0xpc3QucmVtb3ZlKC4uLmEpLGQuZm9yRWFjaChoPT57Yy5jbGFzc0xpc3QuZm9yRWFjaChmPT57aC50ZXN0KGYpJiZjLmNsYXNzTGlzdC5yZW1vdmUoZil9KX0pfWZ1bmN0aW9uIHZvKGMpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJn'@;
put 'dW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpbXSxhPWFyZ3VtZW50cy5sZW5ndGg+Mj9hcmd1bWVudHNbMl06dm9pZCAwO0FycmF5LmlzQXJyYXkobCl8fChsPVtbbCxhXV0pLGwuZm9yRWFjaChkPT57QXJyYXkuaXNBcnJheShkKSYmIiIhPT1kWzBdJiZjLnNldEF0dHJpYnV0ZSguLi5kKX0pfWZ1'@;
put 'bmN0aW9uIGo3KGMpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpbXTsic3RyaW5nIj09dHlwZW9mIGw/bD1sLnNwbGl0KCIgIik6bCBpbnN0YW5jZW9mIFJlZ0V4cCYmKGw9W2xdKTtjb25zdHtyZWdleEZyZWU6YSxyZWdleGVz'@;
put 'OmR9PUgyZShsLCEwKTthLmZvckVhY2goaD0+eyIiIT09aCYmYy5yZW1vdmVBdHRyaWJ1dGUoaCl9KSxkLmZvckVhY2goaD0+e2MuZ2V0QXR0cmlidXRlTmFtZXMoKS5mb3JFYWNoKGY9PntoLnRlc3QoZikmJmMucmVtb3ZlQXR0cmlidXRlKGYpfSl9KX1mdW5jdGlvbiB5JChjKXtpZigzPT09'@;
put 'Yy5ub2RlVHlwZSljLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoYyk7ZWxzZSBpZihbIlRBQkxFIiwiVEhFQUQiLCJUQk9EWSIsIlRGT09UIiwiVFIiXS5pbmRleE9mKGMubm9kZU5hbWUpPi0xKXtjb25zdCBsPWMuY2hpbGROb2Rlcztmb3IobGV0IGE9bC5sZW5ndGgtMTthPj0wO2EtLSl5JChs'@;
put 'W2FdKX19ZnVuY3Rpb24geHAoYyl7bGV0IGw7Zm9yKDtsPWMubGFzdENoaWxkOyljLnJlbW92ZUNoaWxkKGwpfWNvbnN0IE4yZT0vKDwoLiopPnwmKC4qKTspLztmdW5jdGlvbiB6NyhjLGwpe2xldCBhPSEoYXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0pfHxhcmd1'@;
put 'bWVudHNbMl07TjJlLnRlc3QobCk/Yy5pbm5lckhUTUw9YT9JTyhsKTpsOlBtKGMsbCl9ZnVuY3Rpb24gUG0oYyxsKXtjb25zdCBhPWMuZmlyc3RDaGlsZDthJiYzPT09YS5ub2RlVHlwZSYmbnVsbD09PWEubmV4dFNpYmxpbmc/YS50ZXh0Q29udGVudD1sOih4cChjKSxjLmFwcGVuZENoaWxk'@;
put 'KGMub3duZXJEb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShsKSkpfWZ1bmN0aW9uIFU3KGMpe2NvbnN0IGw9Yy5vd25lckRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxhPWMub3duZXJEb2N1bWVudC5kZWZhdWx0VmlldztsZXQgZD1jO2Zvcig7ZCE9PWw7KXtpZihudWxsPT09ZClyZXR1cm4hMTtp'@;
put 'ZihkLm5vZGVUeXBlPT09Tm9kZS5ET0NVTUVOVF9GUkFHTUVOVF9OT0RFKXtpZihkLmhvc3Qpe2lmKGQuaG9zdC5pbXBsKXJldHVybiBVNyhkLmhvc3QuaW1wbCk7aWYoZC5ob3N0KXJldHVybiBVNyhkLmhvc3QpO3Rocm93IG5ldyBFcnJvcigiTG9zdCBpbiBXZWIgQ29tcG9uZW50cyB3b3Js'@;
put 'ZCIpfXJldHVybiExfWlmKCJub25lIj09PWEuZ2V0Q29tcHV0ZWRTdHlsZShkKS5kaXNwbGF5KXJldHVybiExO2Q9ZC5wYXJlbnROb2RlfXJldHVybiEwfWZ1bmN0aW9uIFYyZShjKXtjb25zdCBhPWMub3duZXJEb2N1bWVudC5kZWZhdWx0VmlldztsZXQgZD1jO2Zvcig7ZC5wYXJlbnROb2Rl'@;
put 'Oyl7aWYoIjBweCI9PT1kLnN0eWxlLmhlaWdodHx8IjAiPT09ZC5zdHlsZS5oZWlnaHQpcmV0dXJuImhpZGRlbiI9PT1hLmdldENvbXB1dGVkU3R5bGUoZCkub3ZlcmZsb3c7ZD1kLnBhcmVudE5vZGV9cmV0dXJuITF9ZnVuY3Rpb24gVTAoYyl7Y29uc3QgbD1jLm93bmVyRG9jdW1lbnQsYT1s'@;
put 'LmRlZmF1bHRWaWV3LGQ9bC5kb2N1bWVudEVsZW1lbnQ7bGV0IGYsdixNLGg9Yztmb3IoZj1oLm9mZnNldExlZnQsdj1oLm9mZnNldFRvcCxNPWg7KGg9aC5vZmZzZXRQYXJlbnQpJiZoIT09bC5ib2R5JiYib2Zmc2V0TGVmdCJpbiBoOylmKz1oLm9mZnNldExlZnQsdis9aC5vZmZzZXRUb3As'@;
put 'TT1oO3JldHVybiBNJiYiZml4ZWQiPT09TS5zdHlsZS5wb3NpdGlvbiYmKGYrPWEucGFnZVhPZmZzZXR8fGQuc2Nyb2xsTGVmdCx2Kz1hLnBhZ2VZT2Zmc2V0fHxkLnNjcm9sbFRvcCkse2xlZnQ6Zix0b3A6dn19ZnVuY3Rpb24gXyQoKXtyZXR1cm4oYXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lk'@;
put 'IDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOndpbmRvdykuc2Nyb2xsWX1mdW5jdGlvbiBMTygpe3JldHVybihhcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06d2luZG93KS5zY3JvbGxYfWZ1bmN0aW9uIE9PKGMpe2xldCBsPWFyZ3Vt'@;
put 'ZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp3aW5kb3c7cmV0dXJuIGM9PT1sP18kKGwpOmMuc2Nyb2xsVG9wfWZ1bmN0aW9uIHckKGMpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp3'@;
put 'aW5kb3c7cmV0dXJuIGM9PT1sP0xPKGwpOmMuc2Nyb2xsTGVmdH1mdW5jdGlvbiB5RShjKXtsZXQgbD1jLm93bmVyRG9jdW1lbnQsYT1sP2wuZGVmYXVsdFZpZXc6dm9pZCAwO2x8fChsPWMuZG9jdW1lbnQ/Yy5kb2N1bWVudDpjLGE9bC5kZWZhdWx0Vmlldyk7Y29uc3QgZD1bImF1dG8iLCJz'@;
put 'Y3JvbGwiXTtsZXQgaD1jLnBhcmVudE5vZGU7Zm9yKDtoJiZoLnN0eWxlJiZsLmJvZHkhPT1oOyl7bGV0e292ZXJmbG93OmYsb3ZlcmZsb3dYOnYsb3ZlcmZsb3dZOk19PWguc3R5bGU7aWYoW2YsdixNXS5pbmNsdWRlcygic2Nyb2xsIikpcmV0dXJuIGg7aWYoKHtvdmVyZmxvdzpmLG92ZXJm'@;
put 'bG93WDp2LG92ZXJmbG93WTpNfT1hLmdldENvbXB1dGVkU3R5bGUoaCkpLGQuaW5jbHVkZXMoZil8fGQuaW5jbHVkZXModil8fGQuaW5jbHVkZXMoTSl8fGguY2xpZW50SGVpZ2h0PD1oLnNjcm9sbEhlaWdodCsxJiYoZC5pbmNsdWRlcyhNKXx8ZC5pbmNsdWRlcyhmKSl8fGguY2xpZW50V2lk'@;
put 'dGg8PWguc2Nyb2xsV2lkdGgrMSYmKGQuaW5jbHVkZXModil8fGQuaW5jbHVkZXMoZikpKXJldHVybiBoO2g9aC5wYXJlbnROb2RlfXJldHVybiBhfWZ1bmN0aW9uIEIyZShjKXtyZXR1cm4gYy5zY3JvbGxIZWlnaHQtYy5jbGllbnRIZWlnaHR9ZnVuY3Rpb24gajJlKGMpe3JldHVybiBjLnNj'@;
put 'cm9sbFdpZHRoLWMuY2xpZW50V2lkdGh9ZnVuY3Rpb24gYV8oYyl7Y29uc3QgbD1jLm93bmVyRG9jdW1lbnQsYT1sLmRlZmF1bHRWaWV3O2xldCBkPWMucGFyZW50Tm9kZTtmb3IoO2QmJmQuc3R5bGUmJmwuYm9keSE9PWQ7KXtpZigidmlzaWJsZSIhPT1kLnN0eWxlLm92ZXJmbG93JiYiIiE9'@;
put 'PWQuc3R5bGUub3ZlcmZsb3cpcmV0dXJuIGQ7Y29uc3QgaD1hLmdldENvbXB1dGVkU3R5bGUoZCksZj1bInNjcm9sbCIsImhpZGRlbiIsImF1dG8iXSx2PWguZ2V0UHJvcGVydHlWYWx1ZSgib3ZlcmZsb3ciKSxNPWguZ2V0UHJvcGVydHlWYWx1ZSgib3ZlcmZsb3cteSIpLEQ9aC5nZXRQcm9w'@;
put 'ZXJ0eVZhbHVlKCJvdmVyZmxvdy14Iik7aWYoZi5pbmNsdWRlcyh2KXx8Zi5pbmNsdWRlcyhNKXx8Zi5pbmNsdWRlcyhEKSlyZXR1cm4gZDtkPWQucGFyZW50Tm9kZX1yZXR1cm4gYX1mdW5jdGlvbiBfRShjLGwpe2xldCBhPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRz'@;
put 'WzJdP2FyZ3VtZW50c1syXTp3aW5kb3c7aWYoIWMpcmV0dXJuO2lmKGM9PT1hKXJldHVybiJ3aWR0aCI9PT1sP2Ake2EuaW5uZXJXaWR0aH1weGA6ImhlaWdodCI9PT1sP2Ake2EuaW5uZXJIZWlnaHR9cHhgOnZvaWQgMDtjb25zdCBkPWMuc3R5bGVbbF07aWYoIiIhPT1kJiZ2b2lkIDAhPT1k'@;
put 'KXJldHVybiBkO2NvbnN0IGg9YS5nZXRDb21wdXRlZFN0eWxlKGMpO3JldHVybiIiIT09aFtsXSYmdm9pZCAwIT09aFtsXT9oW2xdOnZvaWQgMH1mdW5jdGlvbiB1WGUoYyxsKXtjb25zdHtzZWxlY3RvclRleHQ6YX09bDtsZXQgZD0hMTtyZXR1cm4gbC50eXBlPT09Q1NTUnVsZS5TVFlMRV9S'@;
put 'VUxFJiZhJiYoYy5tc01hdGNoZXNTZWxlY3Rvcj9kPWMubXNNYXRjaGVzU2VsZWN0b3IoYSk6Yy5tYXRjaGVzJiYoZD1jLm1hdGNoZXMoYSkpKSxkfWZ1bmN0aW9uIHN1KGMpe3JldHVybiBjLm9mZnNldFdpZHRofWZ1bmN0aW9uIHh1KGMpe3JldHVybiBjLm9mZnNldEhlaWdodH1mdW5jdGlv'@;
put 'biBvXyhjKXtyZXR1cm4gYy5jbGllbnRIZWlnaHR8fGMuaW5uZXJIZWlnaHR9ZnVuY3Rpb24gQyQoYyl7cmV0dXJuIGMuY2xpZW50V2lkdGh8fGMuaW5uZXJXaWR0aH1mdW5jdGlvbiBkWGUoYyxsLGEpe2MuYWRkRXZlbnRMaXN0ZW5lcihsLGEsITEpfWZ1bmN0aW9uIGhYZShjLGwsYSl7Yy5y'@;
put 'ZW1vdmVFdmVudExpc3RlbmVyKGwsYSwhMSl9ZnVuY3Rpb24gUyQoYyl7cmV0dXJuIGMuc2VsZWN0aW9uU3RhcnQ/Yy5zZWxlY3Rpb25TdGFydDowfWZ1bmN0aW9uIHoyZShjKXtyZXR1cm4gYy5zZWxlY3Rpb25FbmQ/Yy5zZWxlY3Rpb25FbmQ6MH1mdW5jdGlvbiBmWGUoKXtsZXQgYz1hcmd1'@;
put 'bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06d2luZG93O2NvbnN0IGw9Yy5kb2N1bWVudDtsZXQgYT0iIjtyZXR1cm4gYy5nZXRTZWxlY3Rpb24/YT1jLmdldFNlbGVjdGlvbigpLnRvU3RyaW5nKCk6bC5zZWxlY3Rpb24mJiJDb250cm9sIiE9PWwu'@;
put 'c2VsZWN0aW9uLnR5cGUmJihhPWwuc2VsZWN0aW9uLmNyZWF0ZVJhbmdlKCkudGV4dCksYX1mdW5jdGlvbiBNJCgpe2xldCBjPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp3aW5kb3c7Yy5nZXRTZWxlY3Rpb24mJihjLmdldFNlbGVjdGlv'@;
put 'bigpLmVtcHR5P2MuZ2V0U2VsZWN0aW9uKCkuZW1wdHkoKTpjLmdldFNlbGVjdGlvbigpLnJlbW92ZUFsbFJhbmdlcyYmYy5nZXRTZWxlY3Rpb24oKS5yZW1vdmVBbGxSYW5nZXMoKSl9ZnVuY3Rpb24gd0UoYyxsLGEpe2lmKHZvaWQgMD09PWEmJihhPWwpLGMuc2V0U2VsZWN0aW9uUmFuZ2Up'@;
put 'e2MuZm9jdXMoKTt0cnl7Yy5zZXRTZWxlY3Rpb25SYW5nZShsLGEpfWNhdGNoe2NvbnN0IGg9Yy5wYXJlbnROb2RlLGY9aC5zdHlsZS5kaXNwbGF5O2guc3R5bGUuZGlzcGxheT0iYmxvY2siLGMuc2V0U2VsZWN0aW9uUmFuZ2UobCxhKSxoLnN0eWxlLmRpc3BsYXk9Zn19fWxldCB4JCxsXztm'@;
put 'dW5jdGlvbiBmMCgpe2xldCBjPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTpkb2N1bWVudDtyZXR1cm4gdm9pZCAwPT09eCQmJih4JD1mdW5jdGlvbiBwWGUoKXtsZXQgYz1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50'@;
put 'c1swXT9hcmd1bWVudHNbMF06ZG9jdW1lbnQ7Y29uc3QgbD1jLmNyZWF0ZUVsZW1lbnQoImRpdiIpO2wuc3R5bGUuaGVpZ2h0PSIyMDBweCIsbC5zdHlsZS53aWR0aD0iMTAwJSI7Y29uc3QgYT1jLmNyZWF0ZUVsZW1lbnQoImRpdiIpO2Euc3R5bGUuYm94U2l6aW5nPSJjb250ZW50LWJveCIs'@;
put 'YS5zdHlsZS5oZWlnaHQ9IjE1MHB4IixhLnN0eWxlLmxlZnQ9IjBweCIsYS5zdHlsZS5vdmVyZmxvdz0iaGlkZGVuIixhLnN0eWxlLnBvc2l0aW9uPSJhYnNvbHV0ZSIsYS5zdHlsZS50b3A9IjBweCIsYS5zdHlsZS53aWR0aD0iMjAwcHgiLGEuc3R5bGUudmlzaWJpbGl0eT0iaGlkZGVuIixh'@;
put 'LmFwcGVuZENoaWxkKGwpLChjLmJvZHl8fGMuZG9jdW1lbnRFbGVtZW50KS5hcHBlbmRDaGlsZChhKTtjb25zdCBkPWwub2Zmc2V0V2lkdGg7YS5zdHlsZS5vdmVyZmxvdz0ic2Nyb2xsIjtsZXQgaD1sLm9mZnNldFdpZHRoO3JldHVybiBkPT09aCYmKGg9YS5jbGllbnRXaWR0aCksKGMuYm9k'@;
put 'eXx8Yy5kb2N1bWVudEVsZW1lbnQpLnJlbW92ZUNoaWxkKGEpLGQtaH0oYykpLHgkfWZ1bmN0aW9uIEUkKGMpe3JldHVybiBjIGluc3RhbmNlb2YgV2luZG93P2MuZG9jdW1lbnQuYm9keS5zY3JvbGxIZWlnaHQ+Yy5pbm5lckhlaWdodDpjLm9mZnNldFdpZHRoIT09Yy5jbGllbnRXaWR0aH1m'@;
put 'dW5jdGlvbiBUJChjKXtyZXR1cm4gYyBpbnN0YW5jZW9mIFdpbmRvdz9jLmRvY3VtZW50LmJvZHkuc2Nyb2xsV2lkdGg+Yy5pbm5lcldpZHRoOmMub2Zmc2V0SGVpZ2h0IT09Yy5jbGllbnRIZWlnaHR9ZnVuY3Rpb24gUE8oYyxsLGEpe2Muc3R5bGUudHJhbnNmb3JtPWB0cmFuc2xhdGUzZCgk'@;
put 'e2x9LCR7YX0sMClgfWZ1bmN0aW9uIGdYZShjKXtsZXQgbDtyZXR1cm4gYy5zdHlsZS50cmFuc2Zvcm0mJiIiIT09KGw9Yy5zdHlsZS50cmFuc2Zvcm0pP1sidHJhbnNmb3JtIixsXTotMX1mdW5jdGlvbiBDRShjKXtjLnN0eWxlLnRyYW5zZm9ybSYmIiIhPT1jLnN0eWxlLnRyYW5zZm9ybSYm'@;
put 'KGMuc3R5bGUudHJhbnNmb3JtPSIiKX1mdW5jdGlvbiBTRShjKXtyZXR1cm4gYyYmKFsiSU5QVVQiLCJTRUxFQ1QiLCJURVhUQVJFQSJdLmluZGV4T2YoYy5ub2RlTmFtZSk+LTF8fCJ0cnVlIj09PWMuY29udGVudEVkaXRhYmxlKX1mdW5jdGlvbiBGTyhjKXtyZXR1cm4gU0UoYykmJiExPT09'@;
put 'Yy5oYXNBdHRyaWJ1dGUoImRhdGEtaG90LWlucHV0Iil9ZnVuY3Rpb24gbVhlKGMpe0ZPKGMub3duZXJEb2N1bWVudC5hY3RpdmVFbGVtZW50KXx8Yy5zZWxlY3QoKX1mdW5jdGlvbiBBJChjKXtyZXR1cm4hYy5wYXJlbnROb2RlfWZ1bmN0aW9uIFUyZShjLGwpe25ldyBJbnRlcnNlY3Rpb25P'@;
put 'YnNlcnZlcigoZCxoKT0+e2QuZm9yRWFjaChmPT57Zi5pc0ludGVyc2VjdGluZyYmbnVsbCE9PWMub2Zmc2V0UGFyZW50JiYobCgpLGgudW5vYnNlcnZlKGMpKX0pfSx7cm9vdDpjLm93bmVyRG9jdW1lbnQuYm9keX0pLm9ic2VydmUoYyl9ZnVuY3Rpb24gayQoYyl7bGV0IGw9IShhcmd1bWVu'@;
put 'dHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSl8fGFyZ3VtZW50c1sxXSxhPSEoYXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0pfHxhcmd1bWVudHNbMl07Y29uc3QgZD1jLm93bmVyRG9jdW1lbnQsaD1kLmNyZWF0ZVJhbmdlKCksZj1kLmRlZmF1bHRW'@;
put 'aWV3LmdldFNlbGVjdGlvbigpO3ZvKGMsImNvbnRlbnRlZGl0YWJsZSIsITApLGEmJnZvKGMsLi4uVjcoKSksbCYmVGkoYywiaW52aXNpYmxlU2VsZWN0aW9uIiksaC5zZWxlY3ROb2RlQ29udGVudHMoYyksZi5yZW1vdmVBbGxSYW5nZXMoKSxmLmFkZFJhbmdlKGgpfWZ1bmN0aW9uIEQkKGMp'@;
put 'e2xldCBsPSEoYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0pfHxhcmd1bWVudHNbMV07Y29uc3QgYT1jLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcuZ2V0U2VsZWN0aW9uKCk7Yy5oYXNBdHRyaWJ1dGUoImFyaWEtaGlkZGVuIikmJmMucmVtb3ZlQXR0cmlidXRl'@;
put 'KCJhcmlhLWhpZGRlbiIpLGEucmVtb3ZlQWxsUmFuZ2VzKCksbCYmbG8oYywiaW52aXNpYmxlU2VsZWN0aW9uIiksYy5yZW1vdmVBdHRyaWJ1dGUoImNvbnRlbnRlZGl0YWJsZSIpfWZ1bmN0aW9uIFoyZShjLGwpe2xldCBhPSEoYXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVu'@;
put 'dHNbMl0pfHxhcmd1bWVudHNbMl07ayQoYyxhKSxsKCksRCQoYyxhKX1mdW5jdGlvbiBFcChjKXt2YXIgbDtjb25zdCBhPW51bGw9PWN8fG51bGw9PT0obD1jLm93bmVyRG9jdW1lbnQpfHx2b2lkIDA9PT1sP3ZvaWQgMDpsLmRlZmF1bHRWaWV3LkVsZW1lbnQ7cmV0dXJuISEoYSYmbnVsbCE9'@;
put 'PWEmJmMgaW5zdGFuY2VvZiBhKX1mdW5jdGlvbiBtbChjKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgY31mdW5jdGlvbiBXMmUoYyl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOjIwMCxhPTA7Y29uc3QgZD17bGFzdENhbGxU'@;
put 'aHJvdHRsZWQ6ITB9O2xldCBoPW51bGw7cmV0dXJuIGZ1bmN0aW9uIGYoKXtmb3IodmFyIHY9YXJndW1lbnRzLmxlbmd0aCxNPW5ldyBBcnJheSh2KSxEPTA7RDx2O0QrKylNW0RdPWFyZ3VtZW50c1tEXTtjb25zdCBaPURhdGUubm93KCk7bGV0IHJlPSExO2QubGFzdENhbGxUaHJvdHRsZWQ9'@;
put 'ITAsYXx8KGE9WixyZT0hMCk7Y29uc3QgY2U9bC0oWi1hKTtyZXR1cm4gcmU/KGQubGFzdENhbGxUaHJvdHRsZWQ9ITEsYy5hcHBseSh0aGlzLE0pKTooaCYmY2xlYXJUaW1lb3V0KGgpLGg9c2V0VGltZW91dCgoKT0+e2QubGFzdENhbGxUaHJvdHRsZWQ9ITEsYy5hcHBseSh0aGlzLE0pLGE9'@;
put 'MCxoPXZvaWQgMH0sY2UpKSxkfX1mdW5jdGlvbiB2WGUoYyl7bGV0IGE9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOjEwO2NvbnN0IGQ9VzJlKGMsYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRz'@;
put 'WzFdOjIwMCk7bGV0IGg9YTtmdW5jdGlvbiB2KCl7Zm9yKHZhciBNPWFyZ3VtZW50cy5sZW5ndGgsRD1uZXcgQXJyYXkoTSksWj0wO1o8TTtaKyspRFtaXT1hcmd1bWVudHNbWl07cmV0dXJuIGg/KGgtPTEsYy5hcHBseSh0aGlzLEQpKTpkLmFwcGx5KHRoaXMsRCl9cmV0dXJuIHYuY2xlYXJI'@;
put 'aXRzPWZ1bmN0aW9uIGYoKXtoPWF9LHZ9ZnVuY3Rpb24gTUUoYyl7bGV0IGQsbD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06MjAwLGE9bnVsbDtyZXR1cm4gZnVuY3Rpb24gaCgpe2Zvcih2YXIgZj1hcmd1bWVudHMubGVuZ3RoLHY9bmV3'@;
put 'IEFycmF5KGYpLE09MDtNPGY7TSsrKXZbTV09YXJndW1lbnRzW01dO3JldHVybiBhJiZjbGVhclRpbWVvdXQoYSksYT1zZXRUaW1lb3V0KCgpPT57ZD1jLmFwcGx5KHRoaXMsdil9LGwpLGR9fWZ1bmN0aW9uIGJYZSgpe2Zvcih2YXIgYz1hcmd1bWVudHMubGVuZ3RoLGw9bmV3IEFycmF5KGMp'@;
put 'LGE9MDthPGM7YSsrKWxbYV09YXJndW1lbnRzW2FdO2NvbnN0W2QsLi4uaF09bDtyZXR1cm4gZnVuY3Rpb24oKXtmb3IodmFyIHY9YXJndW1lbnRzLmxlbmd0aCxNPW5ldyBBcnJheSh2KSxEPTA7RDx2O0QrKylNW0RdPWFyZ3VtZW50c1tEXTtyZXR1cm4gcXUoaCwoWixyZSk9PnJlKFopLGQu'@;
put 'YXBwbHkodGhpcyxNKSl9fWZ1bmN0aW9uIEkkKGMpe2Zvcih2YXIgbD1hcmd1bWVudHMubGVuZ3RoLGE9bmV3IEFycmF5KGw+MT9sLTE6MCksZD0xO2Q8bDtkKyspYVtkLTFdPWFyZ3VtZW50c1tkXTtyZXR1cm4gZnVuY3Rpb24oKXtmb3IodmFyIGY9YXJndW1lbnRzLmxlbmd0aCx2PW5ldyBB'@;
put 'cnJheShmKSxNPTA7TTxmO00rKyl2W01dPWFyZ3VtZW50c1tNXTtyZXR1cm4gYy5hcHBseSh0aGlzLGEuY29uY2F0KHYpKX19ZnVuY3Rpb24gWTJlKGMpe2NvbnN0IGw9Yy5sZW5ndGg7cmV0dXJuIGZ1bmN0aW9uIGEoZCl7cmV0dXJuIGZ1bmN0aW9uKCl7Zm9yKHZhciBmPWFyZ3VtZW50cy5s'@;
put 'ZW5ndGgsdj1uZXcgQXJyYXkoZiksTT0wO008ZjtNKyspdltNXT1hcmd1bWVudHNbTV07Y29uc3QgRD1kLmNvbmNhdCh2KTtsZXQgWjtyZXR1cm4gWj1ELmxlbmd0aD49bD9jLmFwcGx5KHRoaXMsRCk6YShEKSxafX0oW10pfWZ1bmN0aW9uIHlYZShjKXtjb25zdCBsPWMubGVuZ3RoO3JldHVy'@;
put 'biBmdW5jdGlvbiBhKGQpe3JldHVybiBmdW5jdGlvbigpe2Zvcih2YXIgZj1hcmd1bWVudHMubGVuZ3RoLHY9bmV3IEFycmF5KGYpLE09MDtNPGY7TSsrKXZbTV09YXJndW1lbnRzW01dO2NvbnN0IEQ9ZC5jb25jYXQodi5yZXZlcnNlKCkpO2xldCBaO3JldHVybiBaPUQubGVuZ3RoPj1sP2Mu'@;
put 'YXBwbHkodGhpcyxEKTphKEQpLFp9fShbXSl9ZnVuY3Rpb24gSE8oYyxsLGEsZCxoLGYsdixNKXtyZXR1cm4gUGEoTSk/Yy5jYWxsKGwsYSxkLGgsZix2LE0pOlBhKHYpP2MuY2FsbChsLGEsZCxoLGYsdik6UGEoZik/Yy5jYWxsKGwsYSxkLGgsZik6UGEoaCk/Yy5jYWxsKGwsYSxkLGgpOlBh'@;
put 'KGQpP2MuY2FsbChsLGEsZCk6UGEoYSk/Yy5jYWxsKGwsYSk6Yy5jYWxsKGwpfWZ1bmN0aW9uIHNfKGMpe2xldCBsO3JldHVybiBBcnJheS5pc0FycmF5KGMpP2w9Yy5sZW5ndGg/bmV3IEFycmF5KGMubGVuZ3RoKS5maWxsKG51bGwpOltdOihsPXt9LFhvKGMsKGEsZCk9PnsiX19jaGlsZHJl'@;
put 'biIhPT1kJiYobFtkXT1hJiYib2JqZWN0Ij09dHlwZW9mIGEmJiFBcnJheS5pc0FycmF5KGEpP3NfKGEpOkFycmF5LmlzQXJyYXkoYSk/YS5sZW5ndGgmJiJvYmplY3QiPT10eXBlb2YgYVswXSYmIUFycmF5LmlzQXJyYXkoYVswXSk/W3NfKGFbMF0pXTpbXTpudWxsKX0pKSxsfWZ1bmN0aW9u'@;
put 'IEcyZShjLGwpe3JldHVybiBsLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1sLGMucHJvdG90eXBlPW5ldyBsLGMucHJvdG90eXBlLmNvbnN0cnVjdG9yPWMsY31mdW5jdGlvbiBFdShjLGwsYSl7Y29uc3QgZD1BcnJheS5pc0FycmF5KGEpO3JldHVybiBYbyhsLChoLGYpPT57KCExPT09ZHx8YS5p'@;
put 'bmNsdWRlcyhmKSkmJihjW2ZdPWgpfSksY31mdW5jdGlvbiB4RShjLGwpe1hvKGwsKGEsZCk9PntsW2RdJiYib2JqZWN0Ij09dHlwZW9mIGxbZF0/KGNbZF18fChjW2RdPUFycmF5LmlzQXJyYXkobFtkXSk/W106IltvYmplY3QgRGF0ZV0iPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5j'@;
put 'YWxsKGxbZF0pP2xbZF06e30pLHhFKGNbZF0sbFtkXSkpOmNbZF09bFtkXX0pfWZ1bmN0aW9uIGcxKGMpe3JldHVybiJvYmplY3QiPT10eXBlb2YgYz9KU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGMpKTpjfWZ1bmN0aW9uIG4zKGMpe2NvbnN0IGw9e307cmV0dXJuIFhvKGMsKGEsZCk9Pnts'@;
put 'W2RdPWF9KSxsfWZ1bmN0aW9uIFRsKGMpe2MuTUlYSU5TfHwoYy5NSVhJTlM9W10pO2Zvcih2YXIgbD1hcmd1bWVudHMubGVuZ3RoLGE9bmV3IEFycmF5KGw+MT9sLTE6MCksZD0xO2Q8bDtkKyspYVtkLTFdPWFyZ3VtZW50c1tkXTtyZXR1cm4gWW4oYSxoPT57Yy5NSVhJTlMucHVzaChoLk1J'@;
put 'WElOX05BTUUpLFhvKGgsKGYsdik9PntpZih2b2lkIDAhPT1jLnByb3RvdHlwZVt2XSl0aHJvdyBuZXcgRXJyb3IoYE1peGluIGNvbmZsaWN0LiBQcm9wZXJ0eSAnJHt2fScgYWxyZWFkeSBleGlzdCBhbmQgY2Fubm90IGJlIG92ZXJ3cml0dGVuLmApO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBm'@;
put 'KWMucHJvdG90eXBlW3ZdPWY7ZWxzZXtjb25zdCBEPWZ1bmN0aW9uKHJlKXtjb25zdCBjZT1gXyR7cmV9YDtyZXR1cm4gZnVuY3Rpb24oYmUpe3RoaXNbY2VdPWJlfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KGMucHJvdG90eXBlLHYse2dldDpmdW5jdGlvbihyZSxjZSl7Y29uc3QgYmU9YF8k'@;
put 'e3JlfWA7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHZvaWQgMD09PXRoaXNbYmVdJiYodGhpc1tiZV09KEJlPT57bGV0IHFlPUJlO3JldHVybihBcnJheS5pc0FycmF5KHFlKXx8cW8ocWUpKSYmKHFlPWcxKHFlKSkscWV9KShjZSkpLHRoaXNbYmVdfX0odixmKSxzZXQ6RCh2KSxjb25maWd1'@;
put 'cmFibGU6ITB9KX19KX0pLGN9ZnVuY3Rpb24gTk8oYyxsKXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkoYyk9PT1KU09OLnN0cmluZ2lmeShsKX1mdW5jdGlvbiBxbyhjKXtyZXR1cm4iW29iamVjdCBPYmplY3RdIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChjKX1mdW5jdGlvbiBU'@;
put 'cChjLGwsYSxkKXtkLnZhbHVlPWEsZC53cml0YWJsZT0hMSE9PWQud3JpdGFibGUsZC5lbnVtZXJhYmxlPSExIT09ZC5lbnVtZXJhYmxlLGQuY29uZmlndXJhYmxlPSExIT09ZC5jb25maWd1cmFibGUsT2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCxkKX1mdW5jdGlvbiBYbyhjLGwpe2Zvcihj'@;
put 'b25zdCBhIGluIGMpaWYoKCFjLmhhc093blByb3BlcnR5fHxjLmhhc093blByb3BlcnR5JiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYyxhKSkmJiExPT09bChjW2FdLGEsYykpYnJlYWs7cmV0dXJuIGN9ZnVuY3Rpb24gJDJlKGMsbCl7Y29uc3QgYT1sLnNwbGl0KCIu'@;
put 'Iik7bGV0IGQ9YztyZXR1cm4gWG8oYSxoPT57aWYoZD1kW2hdLHZvaWQgMD09PWQpcmV0dXJuIGQ9dm9pZCAwLCExfSksZH1mdW5jdGlvbiBWTyhjLGwsYSl7aWYoInN0cmluZyIhPXR5cGVvZiBsKXJldHVybjtjb25zdCBkPWwuc3BsaXQoIi4iKTtsZXQgaD1jO2QuZm9yRWFjaCgoZix2KT0+'@;
put 'eyJfX3Byb3RvX18iPT09Znx8ImNvbnN0cnVjdG9yIj09PWZ8fCJwcm90b3R5cGUiPT09Znx8KHYhPT1kLmxlbmd0aC0xPyhUdShoLGYpfHwoaFtmXT17fSksaD1oW2ZdKTpoW2ZdPWEpfSl9ZnVuY3Rpb24gQk8oYyl7aWYoIXFvKGMpKXJldHVybiAwO2NvbnN0IGw9ZnVuY3Rpb24oYSl7bGV0'@;
put 'IGQ9MDtyZXR1cm4gcW8oYSk/WG8oYSwoaCxmKT0+eyJfX2NoaWxkcmVuIiE9PWYmJihkKz1sKGgpKX0pOmQrPTEsZH07cmV0dXJuIGwoYyl9ZnVuY3Rpb24gRmQoYyl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOiJ2YWx1ZSI7'@;
put 'Y29uc3QgYT1gXyR7bH1gLGQ9e190b3VjaGVkOiExLFthXTpjLGlzVG91Y2hlZCgpe3JldHVybiB0aGlzLl90b3VjaGVkfX07cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShkLGwse2dldCgpe3JldHVybiB0aGlzW2FdfSxzZXQoaCl7dGhpcy5fdG91Y2hlZD0hMCx0aGlzW2FdPWh9LGVu'@;
put 'dW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksZH1mdW5jdGlvbiBUdShjLGwpe3JldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYyxsKX1mdW5jdGlvbiBFRShjKXtyZXR1cm4gd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZShjKX1mdW5jdGlvbiBURShj'@;
put 'KXt3aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWUoYyl9ZnVuY3Rpb24gUiQoKXtyZXR1cm4ib250b3VjaHN0YXJ0ImluIHdpbmRvd31mdW5jdGlvbiBLMmUoKXtyZXR1cm4gdHlwZW9mIHdpbmRvdzwidSJ9ZnVuY3Rpb24gcTJlKGMpe3JldHVybiBsX3x8KGxfPSJvYmplY3QiPT10eXBlb2Yg'@;
put 'SW50bD9uZXcgSW50bC5Db2xsYXRvcihjLGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp7fSkuY29tcGFyZToiZnVuY3Rpb24iPT10eXBlb2YgU3RyaW5nLnByb3RvdHlwZS5sb2NhbGVDb21wYXJlPyhhLGQpPT5gJHthfWAubG9jYWxlQ29t'@;
put 'cGFyZShkKTooYSxkKT0+YT09PWQ/MDphPmQ/LTE6MSxsXyl9eSg5NTQ5Myk7Y29uc3QgVjI9Yz0+e2NvbnN0IGw9e3ZhbHVlOiExLHRlc3Q6KGEsZCk9PntsLnZhbHVlPWMoYSxkKX19O3JldHVybiBsfSxiZz17Y2hyb21lOlYyKChjLGwpPT4vQ2hyb21lLy50ZXN0KGMpJiYvR29vZ2xlLy50'@;
put 'ZXN0KGwpKSxjaHJvbWVXZWJLaXQ6VjIoYz0+L0NyaU9TLy50ZXN0KGMpKSxlZGdlOlYyKGM9Pi9FZGdlLy50ZXN0KGMpKSxlZGdlV2ViS2l0OlYyKGM9Pi9FZGdpT1MvLnRlc3QoYykpLGZpcmVmb3g6VjIoYz0+L0ZpcmVmb3gvLnRlc3QoYykpLGZpcmVmb3hXZWJLaXQ6VjIoYz0+L0Z4aU9T'@;
put 'Ly50ZXN0KGMpKSxtb2JpbGU6VjIoYz0+L0FuZHJvaWR8d2ViT1N8aVBob25lfGlQYWR8aVBvZHxCbGFja0JlcnJ5fElFTW9iaWxlfE9wZXJhIE1pbmkvaS50ZXN0KGMpKSxzYWZhcmk6VjIoKGMsbCk9Pi9TYWZhcmkvLnRlc3QoYykmJi9BcHBsZSBDb21wdXRlci8udGVzdChsKSl9LGNfPXtt'@;
put 'YWM6VjIoYz0+L15NYWMvLnRlc3QoYykpLHdpbjpWMihjPT4vXldpbi8udGVzdChjKSksbGludXg6VjIoYz0+L15MaW51eC8udGVzdChjKSksaW9zOlYyKGM9Pi9pUGhvbmV8aVBhZHxpUG9kL2kudGVzdChjKSl9O2Z1bmN0aW9uIFgyZSgpe2xldHt1c2VyQWdlbnQ6Yz1uYXZpZ2F0b3IudXNl'@;
put 'ckFnZW50LHZlbmRvcjpsPW5hdmlnYXRvci52ZW5kb3J9PWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp7fTtYbyhiZyxhPT57bGV0e3Rlc3Q6ZH09YTtkKGMsbCl9KX1mdW5jdGlvbiBKMmUoKXtsZXR7cGxhdGZvcm06Yz1uYXZpZ2F0b3Iu'@;
put 'cGxhdGZvcm19PWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp7fTtYbyhjXyxsPT57bGV0e3Rlc3Q6YX09bDthKGMpfSl9ZnVuY3Rpb24gTCQoKXtyZXR1cm4gYmcuY2hyb21lLnZhbHVlfWZ1bmN0aW9uIFEyZSgpe3JldHVybiBiZy5jaHJv'@;
put 'bWVXZWJLaXQudmFsdWV9ZnVuY3Rpb24gak8oKXtyZXR1cm4gYmcuZmlyZWZveC52YWx1ZX1mdW5jdGlvbiBlZmUoKXtyZXR1cm4gYmcuZmlyZWZveFdlYktpdC52YWx1ZX1mdW5jdGlvbiBBRSgpe3JldHVybiBiZy5zYWZhcmkudmFsdWV9ZnVuY3Rpb24gdGZlKCl7cmV0dXJuIGJnLmVkZ2Uu'@;
put 'dmFsdWV9ZnVuY3Rpb24gX1hlKCl7cmV0dXJuIGJnLmVkZ2VXZWJLaXQudmFsdWV9ZnVuY3Rpb24gQXAoKXtyZXR1cm4gYmcubW9iaWxlLnZhbHVlfWZ1bmN0aW9uIE8kKCl7cmV0dXJuIGNfLmlvcy52YWx1ZX1mdW5jdGlvbiBQJCgpe2xldHttYXhUb3VjaFBvaW50czpjfT1hcmd1bWVudHMu'@;
put 'bGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06bmF2aWdhdG9yO3JldHVybiBjPjImJmNfLm1hYy52YWx1ZX1mdW5jdGlvbiBGJCgpe3JldHVybiBjXy53aW4udmFsdWV9ZnVuY3Rpb24gek8oKXtyZXR1cm4gY18ubWFjLnZhbHVlfWZ1bmN0aW9uIHdYZSgpe3Jl'@;
put 'dHVybiBjXy5saW51eC52YWx1ZX1LMmUoKSYmKFgyZSgpLEoyZSgpKTtjb25zdCBZYT17QUxUOjE4LEFSUk9XX0RPV046NDAsQVJST1dfTEVGVDozNyxBUlJPV19SSUdIVDozOSxBUlJPV19VUDozOCxBVURJT19ET1dOOmpPKCk/MTgyOjE3NCxBVURJT19NVVRFOmpPKCk/MTgxOjE3MyxBVURJ'@;
put 'T19VUDpqTygpPzE4MzoxNzUsQkFDS1NQQUNFOjgsQ0FQU19MT0NLOjIwLENPTU1BOjE4OCxDT01NQU5EX0xFRlQ6OTEsQ09NTUFORF9SSUdIVDo5MyxDT01NQU5EX0ZJUkVGT1g6MjI0LENPTlRST0w6MTcsREVMRVRFOjQ2LEVORDozNSxFTlRFUjoxMyxFU0NBUEU6MjcsRjE6MTEyLEYyOjEx'@;
put 'MyxGMzoxMTQsRjQ6MTE1LEY1OjExNixGNjoxMTcsRjc6MTE4LEY4OjExOSxGOToxMjAsRjEwOjEyMSxGMTE6MTIyLEYxMjoxMjMsRjEzOjEyNCxGMTQ6MTI1LEYxNToxMjYsRjE2OjEyNyxGMTc6MTI4LEYxODoxMjksRjE5OjEzMCxIT01FOjM2LElOU0VSVDo0NSxNRURJQV9ORVhUOjE3NixN'@;
put 'RURJQV9QTEFZX1BBVVNFOjE3OSxNRURJQV9QUkVWOjE3NyxNRURJQV9TVE9QOjE3OCxOVUxMOjAsTlVNX0xPQ0s6MTQ0LFBBR0VfRE9XTjozNCxQQUdFX1VQOjMzLFBBVVNFOjE5LFBFUklPRDoxOTAsU0NST0xMX0xPQ0s6MTQ1LFNISUZUOjE2LFNQQUNFOjMyLFRBQjo5LEE6NjUsQzo2NyxE'@;
put 'OjY4LEY6NzAsTDo3NixPOjc5LFA6ODAsUzo4MyxWOjg2LFg6ODgsWTo4OSxaOjkwfSxDWGU9W1lhLkFMVCxZYS5BUlJPV19ET1dOLFlhLkFSUk9XX0xFRlQsWWEuQVJST1dfUklHSFQsWWEuQVJST1dfVVAsWWEuQVVESU9fRE9XTixZYS5BVURJT19NVVRFLFlhLkFVRElPX1VQLFlhLkJBQ0tT'@;
put 'UEFDRSxZYS5DQVBTX0xPQ0ssWWEuREVMRVRFLFlhLkVORCxZYS5FTlRFUixZYS5FU0NBUEUsWWEuRjEsWWEuRjIsWWEuRjMsWWEuRjQsWWEuRjUsWWEuRjYsWWEuRjcsWWEuRjgsWWEuRjksWWEuRjEwLFlhLkYxMSxZYS5GMTIsWWEuRjEzLFlhLkYxNCxZYS5GMTUsWWEuRjE2LFlhLkYxNyxZ'@;
put 'YS5GMTgsWWEuRjE5LFlhLkhPTUUsWWEuSU5TRVJULFlhLk1FRElBX05FWFQsWWEuTUVESUFfUExBWV9QQVVTRSxZYS5NRURJQV9QUkVWLFlhLk1FRElBX1NUT1AsWWEuTlVMTCxZYS5OVU1fTE9DSyxZYS5QQUdFX0RPV04sWWEuUEFHRV9VUCxZYS5QQVVTRSxZYS5TQ1JPTExfTE9DSyxZYS5T'@;
put 'SElGVCxZYS5UQUJdO2Z1bmN0aW9uIG5mZShjKXtyZXR1cm4gMzI9PT1jfHxjPj00OCYmYzw9NTd8fGM+PTk2JiZjPD0xMTF8fGM+PTE4NiYmYzw9MTkyfHxjPj0yMTkmJmM8PTIyMnx8Yz49MjI2fHxjPj02NSYmYzw9OTB9ZnVuY3Rpb24gSCQoYyl7cmV0dXJuIENYZS5pbmNsdWRlcyhjKX1m'@;
put 'dW5jdGlvbiBTWGUoYyl7Y29uc3QgbD1bXTtyZXR1cm4gek8oKT9sLnB1c2goWWEuQ09NTUFORF9MRUZULFlhLkNPTU1BTkRfUklHSFQsWWEuQ09NTUFORF9GSVJFRk9YKTpsLnB1c2goWWEuQ09OVFJPTCksbC5pbmNsdWRlcyhjKX1mdW5jdGlvbiByZmUoYyl7cmV0dXJuW1lhLkNPTlRST0ws'@;
put 'WWEuQ09NTUFORF9MRUZULFlhLkNPTU1BTkRfUklHSFQsWWEuQ09NTUFORF9GSVJFRk9YXS5pbmNsdWRlcyhjKX1mdW5jdGlvbiB1XyhjLGwpe2NvbnN0IGE9bC5zcGxpdCgifCIpO2xldCBkPSExO3JldHVybiBZbihhLGg9PntpZihjPT09WWFbaF0pcmV0dXJuIGQ9ITAsITF9KSxkfWZ1bmN0'@;
put 'aW9uIEIyKGMpe2MuaXNJbW1lZGlhdGVQcm9wYWdhdGlvbkVuYWJsZWQ9ITEsYy5jYW5jZWxCdWJibGU9ITB9ZnVuY3Rpb24gRm0oYyl7cmV0dXJuITE9PT1jLmlzSW1tZWRpYXRlUHJvcGFnYXRpb25FbmFibGVkfWZ1bmN0aW9uIEhtKGMpe3JldHVybiAyPT09Yy5idXR0b259ZnVuY3Rpb24g'@;
put 'VU8oYyl7cmV0dXJuIDA9PT1jLmJ1dHRvbn1mdW5jdGlvbiBpZmUoYyl7cmV0dXJuIGMgaW5zdGFuY2VvZiBUb3VjaEV2ZW50fWZ1bmN0aW9uIGFmZShjLGwpe2NvbnN0IGE9e3g6Yy5vZmZzZXRYLHk6Yy5vZmZzZXRZfTtsZXQgZD1jLnRhcmdldDtpZighRXAobCl8fGQhPT1sJiZkLmNvbnRh'@;
put 'aW5zKGwpKXJldHVybiBhO2Zvcig7ZCE9PWw7KWEueCs9ZC5vZmZzZXRMZWZ0LGEueSs9ZC5vZmZzZXRUb3AsZD1kLm9mZnNldFBhcmVudDtyZXR1cm4gYX1mdW5jdGlvbiBpbCgpe1BhKGNvbnNvbGUpJiZjb25zb2xlLndhcm4oLi4uYXJndW1lbnRzKX1mdW5jdGlvbiBOJCgpe1BhKGNvbnNv'@;
put 'bGUpJiZjb25zb2xlLmVycm9yKC4uLmFyZ3VtZW50cyl9Y29uc3QgWjc9WyJhZnRlckNlbGxNZXRhUmVzZXQiLCJhZnRlckNoYW5nZSIsImFmdGVyQ29udGV4dE1lbnVEZWZhdWx0T3B0aW9ucyIsImJlZm9yZUNvbnRleHRNZW51U2V0SXRlbXMiLCJhZnRlckRyb3Bkb3duTWVudURlZmF1bHRP'@;
put 'cHRpb25zIiwiYmVmb3JlRHJvcGRvd25NZW51U2V0SXRlbXMiLCJhZnRlckNvbnRleHRNZW51SGlkZSIsImJlZm9yZUNvbnRleHRNZW51U2hvdyIsImFmdGVyQ29udGV4dE1lbnVTaG93IiwiYWZ0ZXJDb3B5TGltaXQiLCJiZWZvcmVDcmVhdGVDb2wiLCJhZnRlckNvbHVtblNlcXVlbmNlQ2hh'@;
put 'bmdlIiwiYWZ0ZXJDcmVhdGVDb2wiLCJiZWZvcmVDcmVhdGVSb3ciLCJhZnRlckNyZWF0ZVJvdyIsImFmdGVyRGVzZWxlY3QiLCJhZnRlckRlc3Ryb3kiLCJhZnRlckRvY3VtZW50S2V5RG93biIsImFmdGVyRHJhd1NlbGVjdGlvbiIsImJlZm9yZVJlbW92ZUNlbGxDbGFzc05hbWVzIiwiYmVm'@;
put 'b3JlQ29tcG9zaXRpb25TdGFydCIsImFmdGVyR2V0Q2VsbE1ldGEiLCJhZnRlckdldENvbEhlYWRlciIsImFmdGVyR2V0Um93SGVhZGVyIiwiYWZ0ZXJJbml0IiwiYWZ0ZXJMb2FkRGF0YSIsImFmdGVyVXBkYXRlRGF0YSIsImFmdGVyTW9tZW50dW1TY3JvbGwiLCJhZnRlck9uQ2VsbENvcm5l'@;
put 'ck1vdXNlRG93biIsImFmdGVyT25DZWxsQ29ybmVyRGJsQ2xpY2siLCJhZnRlck9uQ2VsbE1vdXNlRG93biIsImFmdGVyT25DZWxsTW91c2VVcCIsImFmdGVyT25DZWxsQ29udGV4dE1lbnUiLCJhZnRlck9uQ2VsbE1vdXNlT3ZlciIsImFmdGVyT25DZWxsTW91c2VPdXQiLCJhZnRlclJlbW92'@;
put 'ZUNvbCIsImFmdGVyUmVtb3ZlUm93IiwiYmVmb3JlUmVuZGVyZXIiLCJhZnRlclJlbmRlcmVyIiwiYWZ0ZXJSb3dTZXF1ZW5jZUNoYW5nZSIsImJlZm9yZVZpZXdwb3J0U2Nyb2xsVmVydGljYWxseSIsImJlZm9yZVZpZXdwb3J0U2Nyb2xsSG9yaXpvbnRhbGx5IiwiYmVmb3JlVmlld3BvcnRT'@;
put 'Y3JvbGwiLCJhZnRlclNjcm9sbEhvcml6b250YWxseSIsImFmdGVyU2Nyb2xsVmVydGljYWxseSIsImFmdGVyU2Nyb2xsIiwiYWZ0ZXJTZWxlY3Rpb24iLCJhZnRlclNlbGVjdGlvbkJ5UHJvcCIsImFmdGVyU2VsZWN0aW9uRW5kIiwiYWZ0ZXJTZWxlY3Rpb25FbmRCeVByb3AiLCJhZnRlclNl'@;
put 'bGVjdGlvbkZvY3VzU2V0IiwiYmVmb3JlU2VsZWN0Q29sdW1ucyIsImFmdGVyU2VsZWN0Q29sdW1ucyIsImJlZm9yZVNlbGVjdFJvd3MiLCJhZnRlclNlbGVjdFJvd3MiLCJhZnRlclNldENlbGxNZXRhIiwiYWZ0ZXJSZW1vdmVDZWxsTWV0YSIsImFmdGVyU2V0RGF0YUF0Q2VsbCIsImFmdGVy'@;
put 'U2V0RGF0YUF0Um93UHJvcCIsImFmdGVyU2V0U291cmNlRGF0YUF0Q2VsbCIsImFmdGVyU2V0VGhlbWUiLCJhZnRlclVwZGF0ZVNldHRpbmdzIiwiYWZ0ZXJWYWxpZGF0ZSIsImJlZm9yZUxhbmd1YWdlQ2hhbmdlIiwiYWZ0ZXJMYW5ndWFnZUNoYW5nZSIsImJlZm9yZUF1dG9maWxsIiwiYWZ0'@;
put 'ZXJBdXRvZmlsbCIsImJlZm9yZUNlbGxBbGlnbm1lbnQiLCJiZWZvcmVDaGFuZ2UiLCJiZWZvcmVDaGFuZ2VSZW5kZXIiLCJiZWZvcmVEcmF3Qm9yZGVycyIsImJlZm9yZUdldENlbGxNZXRhIiwiYmVmb3JlUmVtb3ZlQ2VsbE1ldGEiLCJiZWZvcmVJbml0IiwiYmVmb3JlSW5pdFdhbGtvbnRh'@;
put 'YmxlIiwiYmVmb3JlTG9hZERhdGEiLCJiZWZvcmVVcGRhdGVEYXRhIiwiYmVmb3JlS2V5RG93biIsImJlZm9yZU9uQ2VsbE1vdXNlRG93biIsImJlZm9yZU9uQ2VsbE1vdXNlVXAiLCJiZWZvcmVPbkNlbGxDb250ZXh0TWVudSIsImJlZm9yZU9uQ2VsbE1vdXNlT3ZlciIsImJlZm9yZU9uQ2Vs'@;
put 'bE1vdXNlT3V0IiwiYmVmb3JlUmVtb3ZlQ29sIiwiYmVmb3JlUmVtb3ZlUm93IiwiYmVmb3JlVmlld1JlbmRlciIsImFmdGVyVmlld1JlbmRlciIsImJlZm9yZVJlbmRlciIsImFmdGVyUmVuZGVyIiwiYmVmb3JlUm93V3JhcCIsImJlZm9yZUNvbHVtbldyYXAiLCJiZWZvcmVTZXRDZWxsTWV0'@;
put 'YSIsImJlZm9yZVNlbGVjdGlvbkZvY3VzU2V0IiwiYmVmb3JlU2V0UmFuZ2VTdGFydE9ubHkiLCJiZWZvcmVTZXRSYW5nZVN0YXJ0IiwiYmVmb3JlU2V0UmFuZ2VFbmQiLCJiZWZvcmVTZWxlY3Rpb25IaWdobGlnaHRTZXQiLCJiZWZvcmVUb3VjaFNjcm9sbCIsImJlZm9yZVZhbGlkYXRlIiwi'@;
put 'YmVmb3JlVmFsdWVSZW5kZXIiLCJjb25zdHJ1Y3QiLCJpbml0IiwibW9kaWZ5Q29sSGVhZGVyIiwibW9kaWZ5Q29sV2lkdGgiLCJtb2RpZnlGaWx0ZXJzTXVsdGlTZWxlY3RWYWx1ZSIsIm1vZGlmeUZvY3VzZWRFbGVtZW50IiwibW9kaWZ5Um93SGVhZGVyIiwibW9kaWZ5Um93SGVpZ2h0Iiwi'@;
put 'bW9kaWZ5Um93SGVpZ2h0QnlPdmVybGF5TmFtZSIsIm1vZGlmeURhdGEiLCJtb2RpZnlTb3VyY2VEYXRhIiwibW9kaWZ5Um93RGF0YSIsIm1vZGlmeUdldENlbGxDb29yZHMiLCJtb2RpZnlHZXRDb29yZHNFbGVtZW50IiwibW9kaWZ5Rm9jdXNPblRhYk5hdmlnYXRpb24iLCJiZWZvcmVIaWdo'@;
put 'bGlnaHRpbmdSb3dIZWFkZXIiLCJiZWZvcmVIaWdobGlnaHRpbmdDb2x1bW5IZWFkZXIiLCJwZXJzaXN0ZW50U3RhdGVMb2FkIiwicGVyc2lzdGVudFN0YXRlUmVzZXQiLCJwZXJzaXN0ZW50U3RhdGVTYXZlIiwiYmVmb3JlQ29sdW1uU29ydCIsImFmdGVyQ29sdW1uU29ydCIsIm1vZGlmeUF1'@;
put 'dG9maWxsUmFuZ2UiLCJtb2RpZnlDb3B5YWJsZVJhbmdlIiwiYmVmb3JlQ3V0IiwiYWZ0ZXJDdXQiLCJiZWZvcmVDb3B5IiwiYWZ0ZXJDb3B5IiwiYmVmb3JlUGFzdGUiLCJhZnRlclBhc3RlIiwiYmVmb3JlQ29sdW1uRnJlZXplIiwiYWZ0ZXJDb2x1bW5GcmVlemUiLCJiZWZvcmVDb2x1bW5N'@;
put 'b3ZlIiwiYWZ0ZXJDb2x1bW5Nb3ZlIiwiYmVmb3JlQ29sdW1uVW5mcmVlemUiLCJhZnRlckNvbHVtblVuZnJlZXplIiwiYmVmb3JlUm93TW92ZSIsImFmdGVyUm93TW92ZSIsImJlZm9yZUNvbHVtblJlc2l6ZSIsImFmdGVyQ29sdW1uUmVzaXplIiwiYmVmb3JlUm93UmVzaXplIiwiYWZ0ZXJS'@;
put 'b3dSZXNpemUiLCJhZnRlckdldENvbHVtbkhlYWRlclJlbmRlcmVycyIsImFmdGVyR2V0Um93SGVhZGVyUmVuZGVyZXJzIiwiYmVmb3JlU3RyZXRjaGluZ0NvbHVtbldpZHRoIiwiYmVmb3JlRmlsdGVyIiwiYWZ0ZXJGaWx0ZXIiLCJhZnRlckZvcm11bGFzVmFsdWVzVXBkYXRlIiwiYWZ0ZXJO'@;
put 'YW1lZEV4cHJlc3Npb25BZGRlZCIsImFmdGVyTmFtZWRFeHByZXNzaW9uUmVtb3ZlZCIsImFmdGVyU2hlZXRBZGRlZCIsImFmdGVyU2hlZXRSZW5hbWVkIiwiYWZ0ZXJTaGVldFJlbW92ZWQiLCJtb2RpZnlDb2x1bW5IZWFkZXJIZWlnaHQiLCJtb2RpZnlDb2x1bW5IZWFkZXJWYWx1ZSIsImJl'@;
put 'Zm9yZVVuZG8iLCJiZWZvcmVVbmRvU3RhY2tDaGFuZ2UiLCJhZnRlclVuZG8iLCJhZnRlclVuZG9TdGFja0NoYW5nZSIsImJlZm9yZVJlZG8iLCJiZWZvcmVSZWRvU3RhY2tDaGFuZ2UiLCJhZnRlclJlZG8iLCJhZnRlclJlZG9TdGFja0NoYW5nZSIsIm1vZGlmeVJvd0hlYWRlcldpZHRoIiwi'@;
put 'bW9kaWZ5VHJhbnNmb3JtRm9jdXMiLCJtb2RpZnlUcmFuc2Zvcm1TdGFydCIsIm1vZGlmeVRyYW5zZm9ybUVuZCIsImFmdGVyTW9kaWZ5VHJhbnNmb3JtRm9jdXMiLCJhZnRlck1vZGlmeVRyYW5zZm9ybVN0YXJ0IiwiYWZ0ZXJNb2RpZnlUcmFuc2Zvcm1FbmQiLCJhZnRlclZpZXdwb3J0Um93'@;
put 'Q2FsY3VsYXRvck92ZXJyaWRlIiwiYWZ0ZXJWaWV3cG9ydENvbHVtbkNhbGN1bGF0b3JPdmVycmlkZSIsImFmdGVyUGx1Z2luc0luaXRpYWxpemVkIiwiYmVmb3JlSGlkZVJvd3MiLCJhZnRlckhpZGVSb3dzIiwiYmVmb3JlVW5oaWRlUm93cyIsImFmdGVyVW5oaWRlUm93cyIsImJlZm9yZUhp'@;
put 'ZGVDb2x1bW5zIiwiYWZ0ZXJIaWRlQ29sdW1ucyIsImJlZm9yZVVuaGlkZUNvbHVtbnMiLCJhZnRlclVuaGlkZUNvbHVtbnMiLCJiZWZvcmVUcmltUm93IiwiYWZ0ZXJUcmltUm93IiwiYmVmb3JlVW50cmltUm93IiwiYWZ0ZXJVbnRyaW1Sb3ciLCJiZWZvcmVEcm9wZG93bk1lbnVTaG93Iiwi'@;
put 'YWZ0ZXJEcm9wZG93bk1lbnVTaG93IiwiYWZ0ZXJEcm9wZG93bk1lbnVIaWRlIiwiYmVmb3JlQWRkQ2hpbGQiLCJhZnRlckFkZENoaWxkIiwiYmVmb3JlRGV0YWNoQ2hpbGQiLCJhZnRlckRldGFjaENoaWxkIiwiYmVmb3JlQmVnaW5FZGl0aW5nIiwiYWZ0ZXJCZWdpbkVkaXRpbmciLCJiZWZv'@;
put 'cmVNZXJnZUNlbGxzIiwiYWZ0ZXJNZXJnZUNlbGxzIiwiYmVmb3JlVW5tZXJnZUNlbGxzIiwiYWZ0ZXJVbm1lcmdlQ2VsbHMiLCJhZnRlckxpc3RlbiIsImFmdGVyVW5saXN0ZW4iLCJhZnRlclJlZnJlc2hEaW1lbnNpb25zIiwiYmVmb3JlUmVmcmVzaERpbWVuc2lvbnMiLCJiZWZvcmVDb2x1'@;
put 'bW5Db2xsYXBzZSIsImFmdGVyQ29sdW1uQ29sbGFwc2UiLCJiZWZvcmVDb2x1bW5FeHBhbmQiLCJhZnRlckNvbHVtbkV4cGFuZCIsIm1vZGlmeUF1dG9Db2x1bW5TaXplU2VlZCJdLFYkPW5ldyBNYXAoW1sibW9kaWZ5Um93IiwiOC4wLjAiXSxbIm1vZGlmeUNvbCIsIjguMC4wIl0sWyJ1bm1v'@;
put 'ZGlmeVJvdyIsIjguMC4wIl0sWyJ1bm1vZGlmeUNvbCIsIjguMC4wIl0sWyJza2lwTGVuZ3RoQ2FjaGUiLCI4LjAuMCJdLFsiaGlkZGVuQ29sdW1uIiwiOC4wLjAiXSxbImhpZGRlblJvdyIsIjguMC4wIl1dKSxCJD1uZXcgTWFwKFtbXV0pO2Z1bmN0aW9uIGokKGMsbCxhKXtvZmUoYyxsKSxs'@;
put 'LnNldChjLGEpfWZ1bmN0aW9uIG9mZShjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9ZnVuY3Rpb24gc2ZlKGMsbCxhKXtyZXR1cm4gYy5zZXQoWk8oYyxs'@;
put 'KSxhKSxhfWZ1bmN0aW9uIFowKGMsbCl7cmV0dXJuIGMuZ2V0KFpPKGMsbCkpfWZ1bmN0aW9uIFpPKGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVs'@;
put 'ZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX15KDIzMDEyKSx5KDgxMjYwKTt2YXIgRGg9bmV3IFdlYWtNYXAsZF89bmV3IFdlYWtNYXAseiQ9bmV3IFdlYWtNYXAsVSQ9bmV3IFdlYWtTZXQ7Y2xhc3MgbGZle2NvbnN0cnVjdG9yKCl7KGZ1bmN0aW9uIE1YZShjLGwpe29m'@;
put 'ZShjLGwpLGwuYWRkKGMpfSkodGhpcyxVJCksaiQodGhpcyxEaCxuZXcgTWFwKSxqJCh0aGlzLGRfLG5ldyBNYXApLGokKHRoaXMseiQsbmV3IFNldCksWjcuZm9yRWFjaChsPT5aTyhVJCx0aGlzLGNmZSkuY2FsbCh0aGlzLGwpKX1nZXRIb29rcyhsKXt2YXIgYTtyZXR1cm4gbnVsbCE9PShh'@;
put 'PVowKERoLHRoaXMpLmdldChsKSkmJnZvaWQgMCE9PWE/YTpbXX1hZGQobCxhKXtsZXQgZD1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06e307WjAoRGgsdGhpcykuaGFzKGwpfHwoWk8oVSQsdGhpcyxjZmUpLmNhbGwodGhpcyxsKSxaNy5w'@;
put 'dXNoKGwpKTtjb25zdCBoPVowKERoLHRoaXMpLmdldChsKTtpZihoLmZpbmQoWj0+Wi5jYWxsYmFjaz09PWEpKXJldHVybjtjb25zdCBmPU51bWJlci5pc0ludGVnZXIoZC5vcmRlckluZGV4KT9kLm9yZGVySW5kZXg6MCx2PSEhZC5ydW5PbmNlLE09ISFkLmluaXRpYWxIb29rO2xldCBEPSEx'@;
put 'O2lmKE0pe2NvbnN0IFo9aC5maW5kKHJlPT5yZS5pbml0aWFsSG9vayk7WiYmKFouY2FsbGJhY2s9YSxEPSEwKX1pZighRCl7aC5wdXNoKHtjYWxsYmFjazphLG9yZGVySW5kZXg6ZixydW5PbmNlOnYsaW5pdGlhbEhvb2s6TSxza2lwOiExfSk7bGV0IFo9WjAoeiQsdGhpcykuaGFzKGwpOyFa'@;
put 'JiYwIT09ZiYmKFo9ITAsWjAoeiQsdGhpcykuYWRkKGwpKSxaJiZoLmxlbmd0aD4xJiZaMChEaCx0aGlzKS5zZXQobCxoLnRvU29ydGVkKChyZSxjZSk9PnJlLm9yZGVySW5kZXgtY2Uub3JkZXJJbmRleCkpfX1oYXMobCl7cmV0dXJuIFowKERoLHRoaXMpLmhhcyhsKSYmWjAoRGgsdGhpcyku'@;
put 'Z2V0KGwpLmxlbmd0aD4wfXJlbW92ZShsLGEpe2lmKCFaMChEaCx0aGlzKS5oYXMobCkpcmV0dXJuITE7Y29uc3QgZD1aMChEaCx0aGlzKS5nZXQobCksaD1kLmZpbmQoZj0+Zi5jYWxsYmFjaz09PWEpO2lmKGgpe2xldCBmPVowKGRfLHRoaXMpLmdldChsKTtyZXR1cm4gaC5za2lwPSEwLGYr'@;
put 'PTEsZj4xMDAmJihaMChEaCx0aGlzKS5zZXQobCxkLmZpbHRlcih2PT4hdi5za2lwKSksZj0wKSxaMChkXyx0aGlzKS5zZXQobCxmKSwhMH1yZXR1cm4hMX1kZXN0cm95KCl7WjAoRGgsdGhpcykuY2xlYXIoKSxaMChkXyx0aGlzKS5jbGVhcigpLHNmZShEaCx0aGlzLG51bGwpLHNmZShkXyx0'@;
put 'aGlzLG51bGwpfX1mdW5jdGlvbiBjZmUoYyl7WjAoRGgsdGhpcykuc2V0KGMsW10pLFowKGRfLHRoaXMpLnNldChjLDApfWNvbnN0IGtYZT1nbGBUaGUgcGx1Z2luIGhvb2sgIltob29rTmFtZV0iIHdhcyByZW1vdmVkIGluIEhhbmRzb250YWJsZSBbcmVtb3ZlZEluVmVyc2lvbl0uXHgyMAog'@;
put 'IFBsZWFzZSBjb25zdWx0IHJlbGVhc2Ugbm90ZXMgaHR0cHM6Ly9naXRodWIuY29tL2hhbmRzb250YWJsZS9oYW5kc29udGFibGUvcmVsZWFzZXMvdGFnL1tyZW1vdmVkSW5WZXJzaW9uXSB0b1x4MjAKICBsZWFybiBhYm91dCB0aGUgbWlncmF0aW9uIHBhdGguYDtjbGFzcyBTYXtjb25zdHJ1'@;
put 'Y3RvcigpeyFmdW5jdGlvbiBFWGUoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIFRYZShjKXt2YXIgbD1mdW5jdGlvbiBBWGUoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNh'@;
put 'bGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmlu'@;
put 'ZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfSh0aGlzLCJnbG9iYWxCdWNrZXQiLG5ldyBsZmUpfXN0'@;
put 'YXRpYyBnZXRTaW5nbGV0b24oKXtyZXR1cm4gZnVuY3Rpb24gSVhlKCl7cmV0dXJuIERYZX0oKX1nZXRCdWNrZXQoKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06bnVsbDtyZXR1cm4gbD8obC5wbHVnaW5Ib29rQnVja2V0fHwo'@;
put 'bC5wbHVnaW5Ib29rQnVja2V0PW5ldyBsZmUpLGwucGx1Z2luSG9va0J1Y2tldCk6dGhpcy5nbG9iYWxCdWNrZXR9YWRkKGwsYSl7bGV0IGQ9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOm51bGwsaD1hcmd1bWVudHMubGVuZ3RoPjM/YXJn'@;
put 'dW1lbnRzWzNdOnZvaWQgMDtyZXR1cm4gQXJyYXkuaXNBcnJheShhKT9ZbihhLGY9PnRoaXMuYWRkKGwsZixkKSk6KFYkLmhhcyhsKSYmaWwocCQoa1hlLHtob29rTmFtZTpsLHJlbW92ZWRJblZlcnNpb246ViQuZ2V0KGwpfSkpLEIkLmhhcyhsKSYmaWwoQiQuZ2V0KGwpKSx0aGlzLmdldEJ1'@;
put 'Y2tldChkKS5hZGQobCxhLHtvcmRlckluZGV4OmgscnVuT25jZTohMX0pKSx0aGlzfW9uY2UobCxhKXtsZXQgZD1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06bnVsbCxoPWFyZ3VtZW50cy5sZW5ndGg+Mz9hcmd1bWVudHNbM106dm9pZCAw'@;
put 'O3JldHVybiBBcnJheS5pc0FycmF5KGEpP1luKGEsZj0+dGhpcy5vbmNlKGwsZixkKSk6dGhpcy5nZXRCdWNrZXQoZCkuYWRkKGwsYSx7b3JkZXJJbmRleDpoLHJ1bk9uY2U6ITB9KSx0aGlzfWFkZEFzRml4ZWQobCxhKXtsZXQgZD1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3Vt'@;
put 'ZW50c1syXT9hcmd1bWVudHNbMl06bnVsbDtyZXR1cm4gQXJyYXkuaXNBcnJheShhKT9ZbihhLGg9PnRoaXMuYWRkQXNGaXhlZChsLGgsZCkpOnRoaXMuZ2V0QnVja2V0KGQpLmFkZChsLGEse2luaXRpYWxIb29rOiEwfSksdGhpc31yZW1vdmUobCxhKXtyZXR1cm4gdGhpcy5nZXRCdWNrZXQo'@;
put 'YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOm51bGwpLnJlbW92ZShsLGEpfWhhcyhsKXtyZXR1cm4gdGhpcy5nZXRCdWNrZXQoYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOm51bGwpLmhh'@;
put 'cyhsKX1ydW4obCxhLGQsaCxmLHYsTSxEKXt7Y29uc3QgWj10aGlzLmdldEJ1Y2tldCgpLmdldEhvb2tzKGEpLHJlPVo/Wi5sZW5ndGg6MDtsZXQgY2U9MDtpZihyZSlmb3IoO2NlPHJlOyl7aWYoIVpbY2VdfHxaW2NlXS5za2lwKXtjZSs9MTtjb250aW51ZX1jb25zdCBiZT1ITyhaW2NlXS5j'@;
put 'YWxsYmFjayxsLGQsaCxmLHYsTSxEKTt2b2lkIDAhPT1iZSYmKGQ9YmUpLFpbY2VdJiZaW2NlXS5ydW5PbmNlJiZ0aGlzLnJlbW92ZShhLFpbY2VdLmNhbGxiYWNrKSxjZSs9MX19e2NvbnN0IFo9dGhpcy5nZXRCdWNrZXQobCkuZ2V0SG9va3MoYSkscmU9Wj9aLmxlbmd0aDowO2xldCBjZT0w'@;
put 'O2lmKHJlKWZvcig7Y2U8cmU7KXtpZighWltjZV18fFpbY2VdLnNraXApe2NlKz0xO2NvbnRpbnVlfWNvbnN0IGJlPUhPKFpbY2VdLmNhbGxiYWNrLGwsZCxoLGYsdixNLEQpO3ZvaWQgMCE9PWJlJiYoZD1iZSksWltjZV0mJlpbY2VdLnJ1bk9uY2UmJnRoaXMucmVtb3ZlKGEsWltjZV0uY2Fs'@;
put 'bGJhY2ssbCksY2UrPTF9fXJldHVybiBkfWRlc3Ryb3koKXt0aGlzLmdldEJ1Y2tldChhcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06bnVsbCkuZGVzdHJveSgpfXJlZ2lzdGVyKGwpe3RoaXMuaXNSZWdpc3RlcmVkKGwpfHxaNy5wdXNoKGwp'@;
put 'fWRlcmVnaXN0ZXIobCl7dGhpcy5pc1JlZ2lzdGVyZWQobCkmJlo3LnNwbGljZShaNy5pbmRleE9mKGwpLDEpfWlzRGVwcmVjYXRlZChsKXtyZXR1cm4gQiQuaGFzKGwpfHxWJC5oYXMobCl9aXNSZWdpc3RlcmVkKGwpe3JldHVybiBaNy5pbmRleE9mKGwpPj0wfWdldFJlZ2lzdGVyZWQoKXty'@;
put 'ZXR1cm4gWjd9fWNvbnN0IERYZT1uZXcgU2EsWiQ9bmV3IE1hcDtmdW5jdGlvbiByMygpe2xldCBjPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXToiY29tbW9uIjtaJC5oYXMoYyl8fFokLnNldChjLG5ldyBNYXApO2NvbnN0IGw9WiQuZ2V0'@;
put 'KGMpO3JldHVybntyZWdpc3RlcjpmdW5jdGlvbiBhKE0sRCl7bC5zZXQoTSxEKX0sZ2V0SXRlbTpmdW5jdGlvbiBkKE0pe3JldHVybiBsLmdldChNKX0saGFzSXRlbTpmdW5jdGlvbiBoKE0pe3JldHVybiBsLmhhcyhNKX0sZ2V0TmFtZXM6ZnVuY3Rpb24gZigpe3JldHVyblsuLi5sLmtleXMo'@;
put 'KV19LGdldFZhbHVlczpmdW5jdGlvbiB2KCl7cmV0dXJuWy4uLmwudmFsdWVzKCldfX19Y29uc3QgVyQ9bmV3IFdlYWtNYXAse3JlZ2lzdGVyOlJYZSxnZXRJdGVtOnVmZSxoYXNJdGVtOmRmZSxnZXROYW1lczpMWGV9PXIzKCJlZGl0b3JzIik7ZnVuY3Rpb24gT1hlKGMpe2NvbnN0IGw9e30s'@;
put 'YT1jO3RoaXMuZ2V0Q29uc3RydWN0b3I9ZnVuY3Rpb24oKXtyZXR1cm4gY30sdGhpcy5nZXRJbnN0YW5jZT1mdW5jdGlvbihkKXtyZXR1cm4gZC5ndWlkIGluIGx8fChsW2QuZ3VpZF09bmV3IGEoZCkpLGxbZC5ndWlkXX0sU2EuZ2V0U2luZ2xldG9uKCkuYWRkKCJhZnRlckRlc3Ryb3kiLGZ1'@;
put 'bmN0aW9uKCl7bFt0aGlzLmd1aWRdPW51bGx9KX1mdW5jdGlvbiBoZmUoYyxsKXtsZXQgYTtpZigiZnVuY3Rpb24iPT10eXBlb2YgYylXJC5nZXQoYyl8fEhkKG51bGwsYyksYT1XJC5nZXQoYyk7ZWxzZXtpZigic3RyaW5nIiE9dHlwZW9mIGMpdGhyb3cgRXJyb3IoJ09ubHkgc3RyaW5ncyBh'@;
put 'bmQgZnVuY3Rpb25zIGNhbiBiZSBwYXNzZWQgYXMgImVkaXRvciIgcGFyYW1ldGVyJyk7YT11ZmUoYyl9aWYoIWEpdGhyb3cgRXJyb3IoYE5vIGVkaXRvciByZWdpc3RlcmVkIHVuZGVyIG5hbWUgIiR7Y30iYCk7cmV0dXJuIGEuZ2V0SW5zdGFuY2UobCl9ZnVuY3Rpb24gV08oYyl7aWYoImZ1'@;
put 'bmN0aW9uIj09dHlwZW9mIGMpcmV0dXJuIGM7aWYoIWRmZShjKSl0aHJvdyBFcnJvcihgTm8gcmVnaXN0ZXJlZCBlZGl0b3IgZm91bmQgdW5kZXIgIiR7Y30iIG5hbWVgKTtyZXR1cm4gdWZlKGMpLmdldENvbnN0cnVjdG9yKCl9ZnVuY3Rpb24gSGQoYyxsKXtjJiYic3RyaW5nIiE9dHlwZW9m'@;
put 'IGMmJihjPShsPWMpLkVESVRPUl9UWVBFKTtjb25zdCBhPW5ldyBPWGUobCk7InN0cmluZyI9PXR5cGVvZiBjJiZSWGUoYyxhKSxXJC5zZXQobCxhKX1sZXQgWU89MDtjb25zdCBqMj1jbGFzcyBOWGV7Y29uc3RydWN0b3IoKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFy'@;
put 'Z3VtZW50c1swXT9hcmd1bWVudHNbMF06bnVsbDsoZnVuY3Rpb24gUFhlKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBGWGUoYyl7dmFyIGw9ZnVuY3Rpb24gSFhlKGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYo'@;
put 'dm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmlu'@;
put 'ZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY30pKHRoaXMsImNv'@;
put 'bnRleHQiLHZvaWQgMCksdGhpcy5jb250ZXh0PWx8fHRoaXMsdGhpcy5jb250ZXh0LmV2ZW50TGlzdGVuZXJzfHwodGhpcy5jb250ZXh0LmV2ZW50TGlzdGVuZXJzPVtdKX1hZGRFdmVudExpc3RlbmVyKGwsYSxkKXtsZXQgaD1hcmd1bWVudHMubGVuZ3RoPjMmJnZvaWQgMCE9PWFyZ3VtZW50'@;
put 'c1szXSYmYXJndW1lbnRzWzNdO2Z1bmN0aW9uIGYodil7ZC5jYWxsKHRoaXMsZnVuY3Rpb24gVlhlKGMpe2NvbnN0IGw9Yy5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb247cmV0dXJuIGMuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uPWZ1bmN0aW9uKCl7bC5hcHBseSh0aGlzKSxCMih0aGlzKX0s'@;
put 'Y30odikpfXJldHVybiB0aGlzLmNvbnRleHQuZXZlbnRMaXN0ZW5lcnMucHVzaCh7ZWxlbWVudDpsLGV2ZW50OmEsY2FsbGJhY2s6ZCxjYWxsYmFja1Byb3h5OmYsb3B0aW9uczpoLGV2ZW50TWFuYWdlcjp0aGlzfSksbC5hZGRFdmVudExpc3RlbmVyKGEsZixoKSxZTys9MSwoKT0+e3RoaXMu'@;
put 'cmVtb3ZlRXZlbnRMaXN0ZW5lcihsLGEsZCl9fXJlbW92ZUV2ZW50TGlzdGVuZXIobCxhLGQpe2xldCB2LGg9YXJndW1lbnRzLmxlbmd0aD4zJiZ2b2lkIDAhPT1hcmd1bWVudHNbM10mJmFyZ3VtZW50c1szXSxmPXRoaXMuY29udGV4dC5ldmVudExpc3RlbmVycy5sZW5ndGg7Zm9yKDtmOylp'@;
put 'ZihmLT0xLHY9dGhpcy5jb250ZXh0LmV2ZW50TGlzdGVuZXJzW2ZdLHYuZXZlbnQ9PT1hJiZ2LmVsZW1lbnQ9PT1sKXtpZihkJiZkIT09di5jYWxsYmFja3x8aCYmdi5ldmVudE1hbmFnZXIhPT10aGlzKWNvbnRpbnVlO3RoaXMuY29udGV4dC5ldmVudExpc3RlbmVycy5zcGxpY2UoZiwxKSx2'@;
put 'LmVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcih2LmV2ZW50LHYuY2FsbGJhY2tQcm94eSx2Lm9wdGlvbnMpLFlPLT0xfX1jbGVhckV2ZW50cygpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdJiZhcmd1bWVudHNbMF07aWYoIXRoaXMuY29udGV4dCly'@;
put 'ZXR1cm47bGV0IGE9dGhpcy5jb250ZXh0LmV2ZW50TGlzdGVuZXJzLmxlbmd0aDtmb3IoO2E7KXthLT0xO2NvbnN0IGQ9dGhpcy5jb250ZXh0LmV2ZW50TGlzdGVuZXJzW2FdO2wmJmQuZXZlbnRNYW5hZ2VyIT09dGhpc3x8KHRoaXMuY29udGV4dC5ldmVudExpc3RlbmVycy5zcGxpY2UoYSwx'@;
put 'KSxkLmVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihkLmV2ZW50LGQuY2FsbGJhY2tQcm94eSxkLm9wdGlvbnMpLFlPLT0xKX19Y2xlYXIoKXt0aGlzLmNsZWFyRXZlbnRzKCl9ZGVzdHJveSgpe3RoaXMuY2xlYXJFdmVudHMoKSx0aGlzLmNvbnRleHQ9bnVsbH1kZXN0cm95V2l0aE93bkV2'@;
put 'ZW50c09ubHkoKXt0aGlzLmNsZWFyRXZlbnRzKCEwKSx0aGlzLmNvbnRleHQ9bnVsbH1maXJlRXZlbnQobCxhKXtsZXQgZD1sLmRvY3VtZW50LGg9bDtkfHwoZD1sLm93bmVyRG9jdW1lbnQ/bC5vd25lckRvY3VtZW50OmwsaD1kLmRlZmF1bHRWaWV3KTtjb25zdCBmPXtidWJibGVzOiEwLGNh'@;
put 'bmNlbGFibGU6Im1vdXNlbW92ZSIhPT1hLHZpZXc6aCxkZXRhaWw6MCxzY3JlZW5YOjAsc2NyZWVuWTowLGNsaWVudFg6MSxjbGllbnRZOjEsY3RybEtleTohMSxhbHRLZXk6ITEsc2hpZnRLZXk6ITEsbWV0YUtleTohMSxidXR0b246MCxyZWxhdGVkVGFyZ2V0OnZvaWQgMH07bGV0IHY7ZC5j'@;
put 'cmVhdGVFdmVudD8odj1kLmNyZWF0ZUV2ZW50KCJNb3VzZUV2ZW50cyIpLHYuaW5pdE1vdXNlRXZlbnQoYSxmLmJ1YmJsZXMsZi5jYW5jZWxhYmxlLGYudmlldyxmLmRldGFpbCxmLnNjcmVlblgsZi5zY3JlZW5ZLGYuY2xpZW50WCxmLmNsaWVudFksZi5jdHJsS2V5LGYuYWx0S2V5LGYuc2hp'@;
put 'ZnRLZXksZi5tZXRhS2V5LGYuYnV0dG9uLGYucmVsYXRlZFRhcmdldHx8ZC5ib2R5LnBhcmVudE5vZGUpKTp2PWQuY3JlYXRlRXZlbnRPYmplY3QoKSxsLmRpc3BhdGNoRXZlbnQ/bC5kaXNwYXRjaEV2ZW50KHYpOmwuZmlyZUV2ZW50KGBvbiR7YX1gLHYpfX07ZnVuY3Rpb24gVzcoYyxsLGEp'@;
put 'e3JldHVybihsPWZ1bmN0aW9uIFVYZShjKXt2YXIgbD1mdW5jdGlvbiBaWGUoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmpl'@;
put 'Y3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2Yg'@;
put 'bD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWZ1bmN0aW9uIFkkKGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSly'@;
put 'ZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX12YXIgR089bmV3IFdlYWtTZXQ7Y2xhc3MgRyR7Y29uc3RydWN0b3IobCxhLGQpeyhmdW5jdGlvbiBqWGUoYyxsKXso'@;
put 'ZnVuY3Rpb24gelhlKGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX0pKGMsbCksbC5hZGQoYyl9KSh0aGlzLEdPKSxXNyh0aGlzLCJob3QiLHZvaWQgMCks'@;
put 'VzcodGhpcywidGFibGVNZXRhIix2b2lkIDApLFc3KHRoaXMsInNlbGVjdGlvbiIsdm9pZCAwKSxXNyh0aGlzLCJldmVudE1hbmFnZXIiLHZvaWQgMCksVzcodGhpcywiZGVzdHJveWVkIiwhMSksVzcodGhpcywiYWN0aXZlRWRpdG9yIix2b2lkIDApLFc3KHRoaXMsImNlbGxQcm9wZXJ0aWVz'@;
put 'Iix2b2lkIDApLHRoaXMuaG90PWwsdGhpcy50YWJsZU1ldGE9YSx0aGlzLnNlbGVjdGlvbj1kLHRoaXMuZXZlbnRNYW5hZ2VyPW5ldyBqMihsKSx0aGlzLmhvdC5hZGRIb29rKCJhZnRlckRvY3VtZW50S2V5RG93biIsaD0+WSQoR08sdGhpcyxmZmUpLmNhbGwodGhpcyxoKSksdGhpcy5ob3Qu'@;
put 'YWRkSG9vaygiYmVmb3JlQ29tcG9zaXRpb25TdGFydCIsaD0+WSQoR08sdGhpcyxmZmUpLmNhbGwodGhpcyxoKSksdGhpcy5ob3Qudmlldy5fd3QudXBkYXRlKCJvbkNlbGxEYmxDbGljayIsKGgsZix2KT0+WSQoR08sdGhpcyxXWGUpLmNhbGwodGhpcyxoLGYsdikpfWdldEFjdGl2ZUVkaXRv'@;
put 'cigpe3JldHVybiB0aGlzLmFjdGl2ZUVkaXRvcn1wcmVwYXJlRWRpdG9yKCl7dmFyIGw7aWYodGhpcy5hY3RpdmVFZGl0b3ImJnRoaXMuYWN0aXZlRWRpdG9yLmlzV2FpdGluZygpKXJldHVybiB2b2lkIHRoaXMuY2xvc2VFZGl0b3IoITEsITEsWj0+e1omJnRoaXMucHJlcGFyZUVkaXRvcigp'@;
put 'fSk7Y29uc3QgYT1udWxsPT09KGw9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSl8fHZvaWQgMD09PWw/dm9pZCAwOmwuaGlnaGxpZ2h0O2lmKCFhfHxhLmlzSGVhZGVyKCkpcmV0dXJuO2NvbnN0e3JvdzpkLGNvbDpofT1hLGY9dGhpcy5ob3QucnVuSG9va3MoIm1vZGlmeUdldENl'@;
put 'bGxDb29yZHMiLGQsaCwhMSwibWV0YSIpO2xldCB2PWQsTT1oO2lmKEFycmF5LmlzQXJyYXkoZikmJihbdixNXT1mKSx0aGlzLmNlbGxQcm9wZXJ0aWVzPXRoaXMuaG90LmdldENlbGxNZXRhKHYsTSksIXRoaXMuaXNDZWxsRWRpdGFibGUoKSlyZXR1cm4gdm9pZCB0aGlzLmNsZWFyQWN0aXZl'@;
put 'RWRpdG9yKCk7Y29uc3QgRD10aGlzLmhvdC5nZXRDZWxsKGQsaCwhMCk7aWYoRCl7Y29uc3QgWj10aGlzLmhvdC5nZXRDZWxsRWRpdG9yKHRoaXMuY2VsbFByb3BlcnRpZXMpLHJlPXRoaXMuaG90LmNvbFRvUHJvcChNKSxjZT10aGlzLmhvdC5nZXRTb3VyY2VEYXRhQXRDZWxsKHRoaXMuaG90'@;
put 'LnRvUGh5c2ljYWxSb3codiksTSk7dGhpcy5hY3RpdmVFZGl0b3I9aGZlKFosdGhpcy5ob3QpLHRoaXMuYWN0aXZlRWRpdG9yLnByZXBhcmUoZCxoLHJlLEQsY2UsdGhpcy5jZWxsUHJvcGVydGllcyl9fWlzRWRpdG9yT3BlbmVkKCl7cmV0dXJuIHRoaXMuYWN0aXZlRWRpdG9yJiZ0aGlzLmFj'@;
put 'dGl2ZUVkaXRvci5pc09wZW5lZCgpfW9wZW5FZGl0b3IobCxhKXtsZXQgZD1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXSYmYXJndW1lbnRzWzJdO2lmKCF0aGlzLmlzQ2VsbEVkaXRhYmxlKCkpcmV0dXJuIHZvaWQgdGhpcy5jbGVhckFjdGl2ZUVkaXRvcigpO2Nv'@;
put 'bnN0IGg9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKTtsZXQgZj10aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlQmVnaW5FZGl0aW5nIixoLmhpZ2hsaWdodC5yb3csaC5oaWdobGlnaHQuY29sLGwsYSxkKTthIGluc3RhbmNlb2YgTW91c2VFdmVudCYmImJvb2xlYW4iIT10eXBlb2Yg'@;
put 'ZiYmKGY9MD09PXRoaXMuaG90LnNlbGVjdGlvbi5nZXRMYXllckxldmVsKCkmJmguaXNTaW5nbGUoKSksITEhPT1mPyh0aGlzLmFjdGl2ZUVkaXRvcnx8KHRoaXMuaG90LnNjcm9sbFRvRm9jdXNlZENlbGwoKSx0aGlzLnByZXBhcmVFZGl0b3IoKSksdGhpcy5hY3RpdmVFZGl0b3ImJihkJiZ0'@;
put 'aGlzLmFjdGl2ZUVkaXRvci5lbmFibGVGdWxsRWRpdE1vZGUoKSx0aGlzLmFjdGl2ZUVkaXRvci5iZWdpbkVkaXRpbmcobCxhKSkpOnRoaXMuY2xlYXJBY3RpdmVFZGl0b3IoKX1jbG9zZUVkaXRvcihsLGEsZCl7dGhpcy5hY3RpdmVFZGl0b3I/dGhpcy5hY3RpdmVFZGl0b3IuZmluaXNoRWRp'@;
put 'dGluZyhsLGEsZCk6ZCYmZCghMSl9Y2xvc2VFZGl0b3JBbmRTYXZlQ2hhbmdlcyhsKXt0aGlzLmNsb3NlRWRpdG9yKCExLGwpfWNsb3NlRWRpdG9yQW5kUmVzdG9yZU9yaWdpbmFsVmFsdWUobCl7dGhpcy5jbG9zZUVkaXRvcighMCxsKX1jbGVhckFjdGl2ZUVkaXRvcigpe3RoaXMuYWN0aXZl'@;
put 'RWRpdG9yPXZvaWQgMH1pc0NlbGxFZGl0YWJsZSgpe2NvbnN0IGw9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKTtpZighbClyZXR1cm4hMTtjb25zdCBhPXRoaXMuaG90LmdldENlbGxFZGl0b3IodGhpcy5jZWxsUHJvcGVydGllcykse3JvdzpkLGNvbDpofT1sLmhpZ2hsaWdodCx7'@;
put 'cm93SW5kZXhNYXBwZXI6Zixjb2x1bW5JbmRleE1hcHBlcjp2fT10aGlzLmhvdCxNPWYuaXNIaWRkZW4odGhpcy5ob3QudG9QaHlzaWNhbFJvdyhkKSl8fHYuaXNIaWRkZW4odGhpcy5ob3QudG9QaHlzaWNhbENvbHVtbihoKSk7cmV0dXJuISh0aGlzLmNlbGxQcm9wZXJ0aWVzLnJlYWRPbmx5'@;
put 'fHwhYXx8TSl9bW92ZVNlbGVjdGlvbkFmdGVyRW50ZXIobCl7Y29uc3QgYT17Li4uImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMudGFibGVNZXRhLmVudGVyTW92ZXM/dGhpcy50YWJsZU1ldGEuZW50ZXJNb3ZlcyhsKTp0aGlzLnRhYmxlTWV0YS5lbnRlck1vdmVzfTtsLnNoaWZ0S2V5JiYoYS5y'@;
put 'b3c9LWEucm93LGEuY29sPS1hLmNvbCksdGhpcy5ob3Quc2VsZWN0aW9uLmlzTXVsdGlwbGUoKT90aGlzLnNlbGVjdGlvbi50cmFuc2Zvcm1Gb2N1cyhhLnJvdyxhLmNvbCk6dGhpcy5zZWxlY3Rpb24udHJhbnNmb3JtU3RhcnQoYS5yb3csYS5jb2wsITApfWRlc3Ryb3koKXt0aGlzLmRlc3Ry'@;
put 'b3llZD0hMCx0aGlzLmV2ZW50TWFuYWdlci5kZXN0cm95KCl9fWZ1bmN0aW9uIGZmZShjKXtjb25zdCBsPXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCk7aWYoIXRoaXMuaG90LmlzTGlzdGVuaW5nKCl8fCFsfHxsLmhpZ2hsaWdodC5pc0hlYWRlcigpfHxGbShjKSlyZXR1cm47Y29u'@;
put 'c3R7a2V5Q29kZTphfT1jLGQ9KGMuY3RybEtleXx8Yy5tZXRhS2V5KSYmIWMuYWx0S2V5OyghdGhpcy5hY3RpdmVFZGl0b3J8fHRoaXMuYWN0aXZlRWRpdG9yJiYhdGhpcy5hY3RpdmVFZGl0b3IuaXNXYWl0aW5nKCkpJiYhSCQoYSkmJiFyZmUoYSkmJiFkJiYhdGhpcy5pc0VkaXRvck9wZW5l'@;
put 'ZCgpJiZ0aGlzLm9wZW5FZGl0b3IoIiIsYyl9ZnVuY3Rpb24gV1hlKGMsbCl7bC5pc0NlbGwoKSYmdGhpcy5vcGVuRWRpdG9yKG51bGwsYywhMCl9Y29uc3QgcGZlPW5ldyBXZWFrTWFwO0ckLmdldEluc3RhbmNlPWZ1bmN0aW9uKGMsbCxhKXtsZXQgZD1wZmUuZ2V0KGMpO3JldHVybiBkfHwo'@;
put 'ZD1uZXcgRyQoYyxsLGEpLHBmZS5zZXQoYyxkKSksZH07Y29uc3QgWVhlPUckO2Z1bmN0aW9uIGtFKGMsbCxhKXtnZmUoYyxsKSxsLnNldChjLGEpfWZ1bmN0aW9uIGdmZShjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHBy'@;
put 'aXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9ZnVuY3Rpb24gY2MoYyxsKXtyZXR1cm4gYy5nZXQoeWcoYyxsKSl9ZnVuY3Rpb24gREUoYyxsLGEpe3JldHVybiBjLnNldCh5ZyhjLGwpLGEpLGF9ZnVuY3Rpb24geWcoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9'@;
put 'PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfWNvbnN0IGhfPU9iamVjdC5mcmVlemUoe0NFTEw6ImNlbGwiLE1JWEVEOiJtaXhlZCJ9KTt2'@;
put 'YXIgWHU9bmV3IFdlYWtNYXAsJE89bmV3IFdlYWtNYXAsS089bmV3IFdlYWtNYXAscU89bmV3IFdlYWtNYXAsWE89bmV3IFdlYWtNYXAsTm09bmV3IFdlYWtTZXQ7Y2xhc3MgJFhle2NvbnN0cnVjdG9yKGwpe3ZhciBhPXRoaXM7KGZ1bmN0aW9uIEdYZShjLGwpe2dmZShjLGwpLGwuYWRkKGMp'@;
put 'fSkodGhpcyxObSksa0UodGhpcyxYdSx2b2lkIDApLGtFKHRoaXMsJE8sdm9pZCAwKSxrRSh0aGlzLEtPLDEpLGtFKHRoaXMscU8sbnVsbCksa0UodGhpcyxYTyxuZXcgTWFwKTtjb25zdCBkPWwuZ2V0U2V0dGluZ3MoKTtERShYdSx0aGlzLGwpLERFKCRPLHRoaXMsZC5pbWVGYXN0RWRpdD9o'@;
put 'Xy5NSVhFRDpoXy5DRUxMKSxjYyhYdSx0aGlzKS5hZGRIb29rKCJhZnRlclVwZGF0ZVNldHRpbmdzIixmdW5jdGlvbigpe2Zvcih2YXIgaD1hcmd1bWVudHMubGVuZ3RoLGY9bmV3IEFycmF5KGgpLHY9MDt2PGg7disrKWZbdl09YXJndW1lbnRzW3ZdO3JldHVybiB5ZyhObSxhLHFYZSkuY2Fs'@;
put 'bChhLC4uLmYpfSksY2MoWHUsdGhpcykuYWRkSG9vaygiYWZ0ZXJTZWxlY3Rpb24iLGZ1bmN0aW9uKCl7Zm9yKHZhciBoPWFyZ3VtZW50cy5sZW5ndGgsZj1uZXcgQXJyYXkoaCksdj0wO3Y8aDt2KyspZlt2XT1hcmd1bWVudHNbdl07cmV0dXJuIHlnKE5tLGEsbWZlKS5jYWxsKGEsLi4uZil9'@;
put 'KSxjYyhYdSx0aGlzKS5hZGRIb29rKCJhZnRlclNlbGVjdGlvbkZvY3VzU2V0IixmdW5jdGlvbigpe2Zvcih2YXIgaD1hcmd1bWVudHMubGVuZ3RoLGY9bmV3IEFycmF5KGgpLHY9MDt2PGg7disrKWZbdl09YXJndW1lbnRzW3ZdO3JldHVybiB5ZyhObSxhLG1mZSkuY2FsbChhLC4uLmYpfSks'@;
put 'Y2MoWHUsdGhpcykuYWRkSG9vaygiYWZ0ZXJTZWxlY3Rpb25FbmQiLGZ1bmN0aW9uKCl7Zm9yKHZhciBoPWFyZ3VtZW50cy5sZW5ndGgsZj1uZXcgQXJyYXkoaCksdj0wO3Y8aDt2KyspZlt2XT1hcmd1bWVudHNbdl07cmV0dXJuIHlnKE5tLGEsS1hlKS5jYWxsKGEsLi4uZil9KX1nZXRGb2N1'@;
put 'c01vZGUoKXtyZXR1cm4gY2MoJE8sdGhpcyl9c2V0Rm9jdXNNb2RlKGwpe09iamVjdC52YWx1ZXMoaF8pLmluY2x1ZGVzKGwpP0RFKCRPLHRoaXMsbCk6aWwoYCIke2x9IiBpcyBub3QgYSB2YWxpZCBmb2N1cyBtb2RlLmApfWdldFJlZm9jdXNEZWxheSgpe3JldHVybiBjYyhLTyx0aGlzKX1z'@;
put 'ZXRSZWZvY3VzRGVsYXkobCl7REUoS08sdGhpcyxsKX1zZXRSZWZvY3VzRWxlbWVudEdldHRlcihsKXtERShxTyx0aGlzLGwpfWdldFJlZm9jdXNFbGVtZW50KCl7dmFyIGw7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIGNjKHFPLHRoaXMpP2NjKHFPLHRoaXMpLmNhbGwodGhpcyk6bnVsbD09'@;
put 'PShsPWNjKFh1LHRoaXMpLmdldEFjdGl2ZUVkaXRvcigpKXx8dm9pZCAwPT09bD92b2lkIDA6bC5URVhUQVJFQX1mb2N1c09uSGlnaGxpZ2h0ZWRDZWxsKGwpe2NvbnN0IGE9ZD0+e3ZhciBoLGY7Y29uc3Qgdj1udWxsPT09KGg9Y2MoWHUsdGhpcykuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSl8'@;
put 'fHZvaWQgMD09PWg/dm9pZCAwOmguaGlnaGxpZ2h0O2lmKCF2KXJldHVybjtsZXQgTT1jYyhYdSx0aGlzKS5ydW5Ib29rcygibW9kaWZ5Rm9jdXNlZEVsZW1lbnQiLHYucm93LHYuY29sLGQpO0VwKE0pfHwoTT1kKSxNJiYobnVsbD09PShmPWNjKFh1LHRoaXMpLmdldEFjdGl2ZUVkaXRvcigp'@;
put 'KXx8dm9pZCAwPT09Znx8IWYuaXNPcGVuZWQoKSkmJk0uZm9jdXMoe3ByZXZlbnRTY3JvbGw6ITB9KX07bD9hKGwpOnlnKE5tLHRoaXMsJCQpLmNhbGwodGhpcyxkPT5hKGQpKX1yZWZvY3VzVG9FZGl0b3JUZXh0YXJlYSgpe3ZhciBsO2xldCBhPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAw'@;
put 'IT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTpjYyhLTyx0aGlzKTt2YXIgZCxoOyFjYyhYdSx0aGlzKS5nZXRTZXR0aW5ncygpLmltZUZhc3RFZGl0fHxudWxsIT09KGw9Y2MoWHUsdGhpcykuZ2V0QWN0aXZlRWRpdG9yKCkpJiZ2b2lkIDAhPT1sJiZsLmlzT3BlbmVkKCl8fChudWxsPT09'@;
put 'KGQ9Y2MoWHUsdGhpcykuZ2V0QWN0aXZlRWRpdG9yKCkpfHx2b2lkIDA9PT1kfHxudWxsPT09KGg9ZC5yZWZyZXNoVmFsdWUpfHx2b2lkIDA9PT1ofHxoLmNhbGwoZCksY2MoWE8sdGhpcykuaGFzKGEpfHxjYyhYTyx0aGlzKS5zZXQoYSxNRSgoKT0+e3ZhciBmO2NjKFh1LHRoaXMpLmlzRGVz'@;
put 'dHJveWVkfHxudWxsPT09KGY9dGhpcy5nZXRSZWZvY3VzRWxlbWVudCgpKXx8dm9pZCAwPT09Znx8Zi5zZWxlY3QoKX0sYSkpLGNjKFhPLHRoaXMpLmdldChhKSgpKX19ZnVuY3Rpb24gJCQoYyl7dmFyIGw7Y29uc3QgYT1udWxsPT09KGw9Y2MoWHUsdGhpcykuZ2V0U2VsZWN0ZWRSYW5nZUxh'@;
put 'c3QoKSl8fHZvaWQgMD09PWw/dm9pZCAwOmwuaGlnaGxpZ2h0O2lmKCFhfHwhY2MoWHUsdGhpcykuc2VsZWN0aW9uLmlzQ2VsbFZpc2libGUoYSkpcmV0dXJuIHZvaWQgYyhudWxsKTtjb25zdCBkPWNjKFh1LHRoaXMpLmdldENlbGwoYS5yb3csYS5jb2wsITApO251bGw9PT1kP2NjKFh1LHRo'@;
put 'aXMpLmFkZEhvb2tPbmNlKCJhZnRlclNjcm9sbCIsKCk9PntjKGNjKFh1LHRoaXMpLmdldENlbGwoYS5yb3csYS5jb2wsITApKX0pOmMoZCl9ZnVuY3Rpb24gbWZlKCl7eWcoTm0sdGhpcywkJCkuY2FsbCh0aGlzLGM9Pntjb25zdHthY3RpdmVFbGVtZW50Omx9PWNjKFh1LHRoaXMpLnJvb3RE'@;
put 'b2N1bWVudDtsJiZGTyhsKSYmbC5ibHVyKCksdGhpcy5mb2N1c09uSGlnaGxpZ2h0ZWRDZWxsKGMpfSl9ZnVuY3Rpb24gS1hlKCl7eWcoTm0sdGhpcywkJCkuY2FsbCh0aGlzLGM9Pnt0aGlzLmdldEZvY3VzTW9kZSgpPT09aF8uTUlYRUQmJiJURCI9PT1jPy5ub2RlTmFtZSYmdGhpcy5yZWZv'@;
put 'Y3VzVG9FZGl0b3JUZXh0YXJlYSgpfSl9ZnVuY3Rpb24gcVhlKGMpeyJib29sZWFuIj09dHlwZW9mIGMuaW1lRmFzdEVkaXQmJnRoaXMuc2V0Rm9jdXNNb2RlKGMuaW1lRmFzdEVkaXQ/aF8uTUlYRUQ6aF8uQ0VMTCl9eSgxNjIyOSkseSg0NDIxMyk7Y29uc3QgdmZlPXsiJm5ic3A7IjoiICIs'@;
put 'IiZhbXA7IjoiJiIsIiZsdDsiOiI8IiwiJmd0OyI6Ij4ifSxYWGU9bmV3IFJlZ0V4cChPYmplY3Qua2V5cyh2ZmUpLm1hcChjPT5gKCR7Y30pYCkuam9pbigifCIpLCJnaSIpO2Z1bmN0aW9uIEskKGMpe2NvbnN0IGw9Yy5oYXNDb2xIZWFkZXJzKCksYT1jLmhhc1Jvd0hlYWRlcnMoKSxkPVts'@;
put 'Py0xOjAsYT8tMTowLGMuY291bnRSb3dzKCktMSxjLmNvdW50Q29scygpLTFdLGg9Yy5nZXREYXRhKC4uLmQpLGY9aC5sZW5ndGgsdj1mPjA/aFswXS5sZW5ndGg6MCxNPVsiPHRhYmxlPiIsIjwvdGFibGU+Il0sRD1sP1siPHRoZWFkPiIsIjwvdGhlYWQ+Il06W10sWj1bIjx0Ym9keT4iLCI8'@;
put 'L3Rib2R5PiJdLHJlPWE/MTowLGNlPWw/MTowO2ZvcihsZXQgYmU9MDtiZTxmO2JlKz0xKXtjb25zdCBFZT1sJiYwPT09YmUsQmU9W107Zm9yKGxldCBydD0wO3J0PHY7cnQrPTEpe2NvbnN0IHB0PSFFZSYmYSYmMD09PXJ0O2xldCBkdD0iIjtpZihFZSlkdD1gPHRoPiR7Yy5nZXRDb2xIZWFk'@;
put 'ZXIocnQtcmUpfTwvdGg+YDtlbHNlIGlmKHB0KWR0PWA8dGg+JHtjLmdldFJvd0hlYWRlcihiZS1jZSl9PC90aD5gO2Vsc2V7Y29uc3QgSnQ9aFtiZV1bcnRdLHtoaWRkZW46dm4scm93c3BhbjpDbixjb2xzcGFuOnRufT1jLmdldENlbGxNZXRhKGJlLWNlLHJ0LXJlKTtpZighdm4pe2NvbnN0'@;
put 'IE1uPVtdO2lmKENuJiZNbi5wdXNoKGByb3dzcGFuPSIke0NufSJgKSx0biYmTW4ucHVzaChgY29sc3Bhbj0iJHt0bn0iYCksVWMoSnQpKWR0PWA8dGQgJHtNbi5qb2luKCIgIil9PjwvdGQ+YDtlbHNle2NvbnN0IENyPUp0LnRvU3RyaW5nKCkucmVwbGFjZSgvPC9nLCImbHQ7IikucmVwbGFj'@;
put 'ZSgvPi9nLCImZ3Q7IikucmVwbGFjZSgvKDxicihccyp8XC8pPihcclxufFxuKT98XHJcbnxcbikvZywiPGJyPlxyXG4iKS5yZXBsYWNlKC9ceDIwL2dpLCImbmJzcDsiKS5yZXBsYWNlKC9cdC9naSwiJiM5OyIpO2R0PWA8dGQgJHtNbi5qb2luKCIgIil9PiR7Q3J9PC90ZD5gfX19QmUucHVz'@;
put 'aChkdCl9Y29uc3QgcWU9WyI8dHI+IiwuLi5CZSwiPC90cj4iXS5qb2luKCIiKTtFZT9ELnNwbGljZSgxLDAscWUpOlouc3BsaWNlKC0xLDAscWUpfXJldHVybiBNLnNwbGljZSgxLDAsRC5qb2luKCIiKSxaLmpvaW4oIiIpKSxNLmpvaW4oIiIpfWZ1bmN0aW9uIHEkKGMpe2NvbnN0IGw9Yy5s'@;
put 'ZW5ndGgsYT1bIjx0YWJsZT4iXTtmb3IobGV0IGQ9MDtkPGw7ZCs9MSl7Y29uc3QgaD1jW2RdLGY9aC5sZW5ndGgsdj1bXTswPT09ZCYmYS5wdXNoKCI8dGJvZHk+Iik7Zm9yKGxldCBNPTA7TTxmO00rPTEpe2NvbnN0IEQ9aFtNXSxaPVVjKEQpPyIiOkQudG9TdHJpbmcoKS5yZXBsYWNlKC8m'@;
put 'L2csIiZhbXA7IikucmVwbGFjZSgvPC9nLCImbHQ7IikucmVwbGFjZSgvPi9nLCImZ3Q7IikucmVwbGFjZSgvKDxicihccyp8XC8pPihcclxufFxuKT98XHJcbnxcbikvZywiPGJyPlxyXG4iKS5yZXBsYWNlKC9ceDIwezIsfS9naSxyZT0+YDxzcGFuIHN0eWxlPSJtc28tc3BhY2VydW46IHll'@;
put 'cyI+JHsiJm5ic3A7Ii5yZXBlYXQocmUubGVuZ3RoLTEpfSA8L3NwYW4+YCkucmVwbGFjZSgvXHQvZ2ksIiYjOTsiKTt2LnB1c2goYDx0ZD4ke1p9PC90ZD5gKX1hLnB1c2goIjx0cj4iLC4uLnYsIjwvdHI+IiksZCsxPT09bCYmYS5wdXNoKCI8L3Rib2R5PiIpfXJldHVybiBhLnB1c2goIjwv'@;
put 'dGFibGU+IiksYS5qb2luKCIiKX1mdW5jdGlvbiBiZmUoYyl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOmRvY3VtZW50O2NvbnN0IGE9e30sZD1sLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSxoPWwuY3JlYXRlRWxlbWVudCgi'@;
put 'ZGl2Iik7ZC5hcHBlbmRDaGlsZChoKTtsZXQgZj1jO2lmKCJzdHJpbmciPT10eXBlb2YgZil7Y29uc3QgSnQ9Zi5yZXBsYWNlKC88dGRcYltePl0qPz4oW1xzXFNdKj8pPFwvXHMqdGQ+L2csdm49Pntjb25zdCBDbj12bi5tYXRjaCgvPHRkXGJbXj5dKj8+L2cpWzBdO3JldHVybmAke0NufSR7'@;
put 'dm4uc3Vic3RyaW5nKENuLmxlbmd0aCx2bi5sYXN0SW5kZXhPZigiPCIpKS50cmltKCkucmVwbGFjZUFsbCgvXG5ccysvZywiICIpLnJlcGxhY2VBbGwoLzxwLio/Pi9nLCJcbiIpLnJlcGxhY2UoIlxuIiwiIikucmVwbGFjZUFsbCgvPFwvKC4qKT5ccyskL2dtLCI8LyQxPiIpLnJlcGxhY2Uo'@;
put 'Lyg8KD8hYnIpKFtePl0rKT4pL2dpLCIiKS5yZXBsYWNlQWxsKC9eJm5ic3A7JC9nbSwiIil9PC90ZD5gfSk7aC5pbnNlcnRBZGphY2VudEhUTUwoImFmdGVyYmVnaW4iLGAke0p0fWApLGY9aC5xdWVyeVNlbGVjdG9yKCJ0YWJsZSIpfWlmKCFmfHwhZnVuY3Rpb24gSlhlKGMpe3JldHVybiJU'@;
put 'QUJMRSI9PT0oYyYmYy5ub2RlTmFtZXx8IiIpfShmKSlyZXR1cm47Y29uc3Qgdj1oLnF1ZXJ5U2VsZWN0b3IoJ21ldGFbbmFtZSQ9ImVuZXJhdG9yIl0nKSxNPW51bGwhPT1mLnF1ZXJ5U2VsZWN0b3IoInRib2R5IHRoIiksRD1mLnF1ZXJ5U2VsZWN0b3IoInRyIiksWj1EP0FycmF5LmZyb20o'@;
put 'RC5jZWxscykucmVkdWNlKChKdCx2bik9Pkp0K3ZuLmNvbFNwYW4sMCktKE0/MTowKTowLHJlPWYudEZvb3QmJkFycmF5LmZyb20oZi50Rm9vdC5yb3dzKXx8W10sY2U9W107bGV0IGJlPSExLEVlPTAsQmU9MDtpZihmLnRIZWFkKXtjb25zdCBKdD1BcnJheS5mcm9tKGYudEhlYWQucm93cyku'@;
put 'ZmlsdGVyKHZuPT57Y29uc3QgQ249bnVsbCE9PXZuLnF1ZXJ5U2VsZWN0b3IoInRkIik7cmV0dXJuIENuJiZjZS5wdXNoKHZuKSwhQ259KTtFZT1KdC5sZW5ndGgsYmU9RWU+MCxFZT4xP2EubmVzdGVkSGVhZGVycz1BcnJheS5mcm9tKEp0KS5yZWR1Y2UoKHZuLENuKT0+e2NvbnN0IHRuPUFy'@;
put 'cmF5LmZyb20oQ24uY2VsbHMpLnJlZHVjZSgoTW4sQ3IsR3IpPT57aWYoTSYmMD09PUdyKXJldHVybiBNbjtjb25zdHtjb2xTcGFuOm1yLGlubmVySFRNTDpHbn09Q3I7cmV0dXJuIE1uLnB1c2gobXI+MT97bGFiZWw6R24sY29sc3Bhbjptcn06R24pLE1ufSxbXSk7cmV0dXJuIHZuLnB1c2go'@;
put 'dG4pLHZufSxbXSk6YmUmJihhLmNvbEhlYWRlcnM9QXJyYXkuZnJvbShKdFswXS5jaGlsZHJlbikucmVkdWNlKCh2bixDbix0bik9PihNJiYwPT09dG58fHZuLnB1c2goQ24uaW5uZXJIVE1MKSx2biksW10pKX1jZS5sZW5ndGgmJihhLmZpeGVkUm93c1RvcD1jZS5sZW5ndGgpLHJlLmxlbmd0'@;
put 'aCYmKGEuZml4ZWRSb3dzQm90dG9tPXJlLmxlbmd0aCk7Y29uc3QgcWU9Wy4uLmNlLC4uLkFycmF5LmZyb20oZi50Qm9kaWVzKS5yZWR1Y2UoKEp0LHZuKT0+KEp0LnB1c2goLi4uQXJyYXkuZnJvbSh2bi5yb3dzKSksSnQpLFtdKSwuLi5yZV07QmU9cWUubGVuZ3RoO2NvbnN0IHJ0PW5ldyBB'@;
put 'cnJheShCZSk7Zm9yKGxldCBKdD0wO0p0PEJlO0p0KyspcnRbSnRdPW5ldyBBcnJheShaKTtjb25zdCBwdD1bXSxkdD1bXTtmb3IobGV0IEp0PTA7SnQ8QmU7SnQrKyl7Y29uc3QgQ249QXJyYXkuZnJvbShxZVtKdF0uY2VsbHMpLHRuPUNuLmxlbmd0aDtmb3IobGV0IE1uPTA7TW48dG47TW4r'@;
put 'Kyl7Y29uc3QgQ3I9Q25bTW5dLHtub2RlTmFtZTpHcixpbm5lckhUTUw6bXIscm93U3BhbjpHbixjb2xTcGFuOmFpfT1DcixfaT1ydFtKdF0uZmluZEluZGV4KE9uPT52b2lkIDA9PT1Pbik7aWYoIlREIj09PUdyKXtpZihHbj4xfHxhaT4xKXtmb3IobGV0IElyPUp0O0lyPEp0K0duO0lyKysp'@;
put 'aWYoSXI8QmUpZm9yKGxldCAkcj1faTskcjxfaSthaTskcisrKXJ0W0lyXVskcl09bnVsbDtjb25zdCB6cj1Dci5nZXRBdHRyaWJ1dGUoInN0eWxlIik7enImJnpyLmluY2x1ZGVzKCJtc28taWdub3JlOmNvbHNwYW4iKXx8cHQucHVzaCh7Y29sOl9pLHJvdzpKdCxyb3dzcGFuOkduLGNvbHNw'@;
put 'YW46YWl9KX1sZXQgT249IiI7T249diYmL2V4Y2VsL2dpLnRlc3Qodi5jb250ZW50KT9tci5yZXBsYWNlKC9bXHJcbl1bXHgyMF17MCwyfS9nLCIgIikucmVwbGFjZSgvPGJyKFxzKnxcLyk+W1xyXG5dP1tceDIwXXswLDN9L2dpbSwiXHJcbiIpOm1yLnJlcGxhY2UoLzxicihccyp8XC8pPltc'@;
put 'clxuXT8vZ2ltLCJcclxuIikscnRbSnRdW19pXT1Pbi5yZXBsYWNlKFhYZSx6cj0+dmZlW3pyXSl9ZWxzZSBkdC5wdXNoKG1yKX19cmV0dXJuIHB0Lmxlbmd0aCYmKGEubWVyZ2VDZWxscz1wdCksZHQubGVuZ3RoJiYoYS5yb3dIZWFkZXJzPWR0KSxydC5sZW5ndGgmJihhLmRhdGE9cnQpLGF9'@;
put 'ZnVuY3Rpb24gbTEoYyl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOltdO2NvbnN0IGE9dHlwZW9mIGM7aWYoIm51bWJlciI9PT1hKXJldHVybiFpc05hTihjKSYmaXNGaW5pdGUoYyk7aWYoInN0cmluZyI9PT1hKXtpZigwPT09'@;
put 'Yy5sZW5ndGgpcmV0dXJuITE7aWYoMT09PWMubGVuZ3RoKXJldHVybi9cZC8udGVzdChjKTtjb25zdCBkPUFycmF5LmZyb20obmV3IFNldChbIi4iLC4uLmxdKSkubWFwKGg9PmBcXCR7aH1gKS5qb2luKCJ8Iik7cmV0dXJuIG5ldyBSZWdFeHAoYF5bKy1dPygoKCR7ZH0pP1xcZCsoKCR7ZH0p'@;
put 'XFxkKyk/KGVbKy1dP1xcZCspPyl8KDB4W2EtZlxcZF0rKSkkYCwiaSIpLnRlc3QoYy50cmltKCkpfXJldHVybiJvYmplY3QiPT09YSYmISghY3x8Im51bWJlciIhPXR5cGVvZiBjLnZhbHVlT2YoKXx8YyBpbnN0YW5jZW9mIERhdGUpfWZ1bmN0aW9uIHlmZShjKXtyZXR1cm4gbTEoYyxbIiwi'@;
put 'XSl9ZnVuY3Rpb24gR2EoYyxsLGEpe2xldCBkPS0xO2ZvcigiZnVuY3Rpb24iPT10eXBlb2YgbD8oYT1sLGw9Yyk6ZD1jLTE7KytkPD1sJiYhMSE9PWEoZCk7KTt9ZnVuY3Rpb24gWCQoYyxsLGEpe2xldCBkPWMrMTtmb3IoImZ1bmN0aW9uIj09dHlwZW9mIGwmJihhPWwsbD0wKTstLWQ+PWwm'@;
put 'JiExIT09YShkKTspO31mdW5jdGlvbiBKJChjLGwpe3JldHVybiBsPXBhcnNlSW50KGwudG9TdHJpbmcoKS5yZXBsYWNlKCIlIiwiIiksMTApLGw9aXNOYU4obCk/MDpsLHBhcnNlSW50KGMqbC8xMDAsMTApfWZ1bmN0aW9uIGtzKGMsbCxhKXtyZXR1cm4gTWF0aC5taW4oYyxsKT09PWM/bDpN'@;
put 'YXRoLm1heChjLGEpPT09Yz9hOmN9Y29uc3QgX2ZlPW5ldyBNYXAoW1siYXNjIixbLTEsMV1dLFsiZGVzYyIsWzEsLTFdXV0pLGVKZT1jPT5gVGhlIHByaW9yaXR5ICcke2N9JyBpcyBhbHJlYWR5IGRlY2xhcmVkIGluIGEgbWFwLmAsdEplPWM9PmBUaGUgcHJpb3JpdHkgJyR7Y30nIGlzIG5v'@;
put 'dCBhIG51bWJlci5gLHJKZT1jPT5gVGhlIGlkICcke2N9JyBpcyBhbHJlYWR5IGRlY2xhcmVkIGluIGEgbWFwLmA7ZnVuY3Rpb24gSk8oKXtsZXR7ZXJyb3JJZEV4aXN0czpjfT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06e307Y29uc3Qg'@;
put 'bD1uZXcgTWFwO2Z1bmN0aW9uIE0oKXtyZXR1cm5bLi4ubF19ZnVuY3Rpb24gRChaKXtyZXR1cm4gbC5oYXMoWil9cmV0dXJuIGM9bWwoYyk/YzpySmUse2FkZEl0ZW06ZnVuY3Rpb24gYShaLHJlKXtpZihEKFopKXRocm93IG5ldyBFcnJvcihjKFopKTtsLnNldChaLHJlKX0sY2xlYXI6ZnVu'@;
put 'Y3Rpb24gaCgpe2wuY2xlYXIoKX0sZ2V0SWQ6ZnVuY3Rpb24gZihaKXtjb25zdFtyZV09TSgpLmZpbmQoY2U9PntsZXRbYmUsRWVdPWNlO3JldHVybiBaPT09RWUmJmJlfSl8fFtudWxsXTtyZXR1cm4gcmV9LGdldEl0ZW06ZnVuY3Rpb24gdihaKXtyZXR1cm4gbC5nZXQoWil9LGdldEl0ZW1z'@;
put 'Ok0saGFzSXRlbTpELHJlbW92ZUl0ZW06ZnVuY3Rpb24gZChaKXtyZXR1cm4gbC5kZWxldGUoWil9fX1jb25zdCBpSmU9Yz0+YCcke2N9JyB2YWx1ZSBpcyBhbHJlYWR5IGRlY2xhcmVkIGluIGEgdW5pcXVlIHNldC5gLGVLPWM9PmBUaGVyZSBpcyBhbHJlYWR5IHJlZ2lzdGVyZWQgIiR7Y30i'@;
put 'IHBsdWdpbi5gLHdmZT1mdW5jdGlvbiBuSmUoKXtsZXR7ZXJyb3JQcmlvcml0eUV4aXN0czpjLGVycm9yUHJpb3JpdHlOYU46bH09YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnt9O2NvbnN0IGE9bmV3IE1hcDtyZXR1cm4gYz1tbChjKT9j'@;
put 'OmVKZSxsPW1sKGwpP2w6dEplLHthZGRJdGVtOmZ1bmN0aW9uIGQoZix2KXtpZighbTEoZikpdGhyb3cgbmV3IEVycm9yKGwoZikpO2lmKGEuaGFzKGYpKXRocm93IG5ldyBFcnJvcihjKGYpKTthLnNldChmLHYpfSxnZXRJdGVtczpmdW5jdGlvbiBoKCl7bGV0IGY9YXJndW1lbnRzLmxlbmd0'@;
put 'aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOiJhc2MiO2NvbnN0W3YsTV09X2ZlLmdldChmKXx8X2ZlLmdldCgiYXNjIik7cmV0dXJuWy4uLmFdLnNvcnQoKEQsWik9PkRbMF08WlswXT92Ok0pLm1hcChEPT5EWzFdKX19fSh7ZXJyb3JQcmlvcml0eUV4aXN0czpjPT5g'@;
put 'VGhlcmUgaXMgYWxyZWFkeSByZWdpc3RlcmVkIHBsdWdpbiBvbiBwcmlvcml0eSAiJHtjfSIuYCxlcnJvclByaW9yaXR5TmFOOmM9PmBUaGUgcHJpb3JpdHkgIiR7Y30iIGlzIG5vdCBhIG51bWJlci5gfSksQ2ZlPWZ1bmN0aW9uIGFKZSgpe2xldHtlcnJvckl0ZW1FeGlzdHM6Y309YXJndW1l'@;
put 'bnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnt9O2NvbnN0IGw9bmV3IFNldDtyZXR1cm4gYz1tbChjKT9jOmlKZSx7YWRkSXRlbTpmdW5jdGlvbiBhKGYpe2lmKGwuaGFzKGYpKXRocm93IG5ldyBFcnJvcihjKGYpKTtsLmFkZChmKX0sY2xlYXI6ZnVu'@;
put 'Y3Rpb24gaCgpe2wuY2xlYXIoKX0sZ2V0SXRlbXM6ZnVuY3Rpb24gZCgpe3JldHVyblsuLi5sXX19fSh7ZXJyb3JJdGVtRXhpc3RzOmVLfSksdEs9Sk8oe2Vycm9ySWRFeGlzdHM6ZUt9KTtmdW5jdGlvbiBuSygpe3JldHVyblsuLi53ZmUuZ2V0SXRlbXMoKSwuLi5DZmUuZ2V0SXRlbXMoKV19'@;
put 'ZnVuY3Rpb24gSUUoYyl7Y29uc3QgbD1wMShjKTtyZXR1cm4gdEsuZ2V0SXRlbShsKX1mdW5jdGlvbiBQcyhjLGwsYSl7W2MsbCxhXT1mdW5jdGlvbiBsSmUoYyxsLGEpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBjJiYoYz0obD1jKS5QTFVHSU5fS0VZLGE9bC5QTFVHSU5fUFJJT1JJVFkp'@;
put 'LFtjLGwsYV19KGMsbCxhKSx2b2lkIDA9PT1JRShjKSYmZnVuY3Rpb24gc0plKGMsbCxhKXtjb25zdCBkPXAxKGMpO2lmKHRLLmhhc0l0ZW0oZCkpdGhyb3cgbmV3IEVycm9yKGVLKGQpKTt2b2lkIDA9PT1hP0NmZS5hZGRJdGVtKGQpOndmZS5hZGRJdGVtKGEsZCksdEsuYWRkSXRlbShkLGwp'@;
put 'fShjLGwsYSl9Y29uc3R7cmVnaXN0ZXI6Y0plLGdldEl0ZW06dUplLGhhc0l0ZW06U2ZlLGdldE5hbWVzOmRKZX09cjMoInJlbmRlcmVycyIpO2Z1bmN0aW9uIFFPKGMpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjKXJldHVybiBjO2lmKCFTZmUoYykpdGhyb3cgRXJyb3IoYE5vIHJlZ2lzdGVy'@;
put 'ZWQgcmVuZGVyZXIgZm91bmQgdW5kZXIgIiR7Y30iIG5hbWVgKTtyZXR1cm4gdUplKGMpfWZ1bmN0aW9uIEloKGMsbCl7InN0cmluZyIhPXR5cGVvZiBjJiYoYz0obD1jKS5SRU5ERVJFUl9UWVBFKSxjSmUoYyxsKX1jb25zdHtyZWdpc3RlcjpoSmUsZ2V0SXRlbTpmSmUsaGFzSXRlbTpNZmUs'@;
put 'Z2V0TmFtZXM6cEplfT1yMygidmFsaWRhdG9ycyIpO2Z1bmN0aW9uIHJLKGMpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjKXJldHVybiBjO2lmKCFNZmUoYykpdGhyb3cgRXJyb3IoYE5vIHJlZ2lzdGVyZWQgdmFsaWRhdG9yIGZvdW5kIHVuZGVyICIke2N9IiBuYW1lYCk7cmV0dXJuIGZKZShj'@;
put 'KX1mdW5jdGlvbiBZNyhjLGwpeyJzdHJpbmciIT10eXBlb2YgYyYmKGM9KGw9YykuVkFMSURBVE9SX1RZUEUpLGhKZShjLGwpfWZ1bmN0aW9uIGtwKGMsbCxhKXsoZnVuY3Rpb24gZ0plKGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhl'@;
put 'IHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX0pKGMsbCksbC5zZXQoYyxhKX1mdW5jdGlvbiBRYShjLGwpe3JldHVybiBjLmdldCh4ZmUoYyxsKSl9ZnVuY3Rpb24gVm0oYyxsLGEpe3JldHVybiBjLnNldCh4ZmUoYyxsKSxhKSxhfWZ1bmN0aW9uIHhmZShjLGws'@;
put 'YSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9dmFyIHoyPW5ldyBXZWFrTWFwLGlLPW5l'@;
put 'dyBXZWFrTWFwLHgwPW5ldyBXZWFrTWFwLGZfPW5ldyBXZWFrTWFwLGVQPW5ldyBXZWFrTWFwLGkzPW5ldyBXZWFrTWFwLGFLPW5ldyBXZWFrTWFwLFJFPW5ldyBXZWFrTWFwLEc3PW5ldyBXZWFrTWFwLERwPW5ldyBXZWFrTWFwO2NvbnN0IEVmZT1jbGFzcyBtSmV7Y29uc3RydWN0b3IobCxh'@;
put 'LGQsaCxmLHYpe2xldCBNPWFyZ3VtZW50cy5sZW5ndGg+NiYmdm9pZCAwIT09YXJndW1lbnRzWzZdP2FyZ3VtZW50c1s2XTpudWxsO2twKHRoaXMsejIsdm9pZCAwKSxrcCh0aGlzLGlLLHZvaWQgMCksa3AodGhpcyx4MCx2b2lkIDApLGtwKHRoaXMsZl8sdm9pZCAwKSxrcCh0aGlzLGVQLHZv'@;
put 'aWQgMCksa3AodGhpcyxpMyx2b2lkIDApLGtwKHRoaXMsYUssdm9pZCAwKSxrcCh0aGlzLFJFLHZvaWQgMCksa3AodGhpcyxHNyxbbnVsbCxudWxsXSksa3AodGhpcyxEcCxbbnVsbCxudWxsXSksVm0oejIsdGhpcyxkKSxWbShpSyx0aGlzLGEpLFZtKHgwLHRoaXMsZiksVm0oZl8sdGhpcyx2'@;
put 'KSxWbShlUCx0aGlzLE0pLFZtKGkzLHRoaXMsaCksVm0oYUssdGhpcyxsKSx0aGlzLnJlZ2lzdGVyRXZlbnRzKCl9cmVnaXN0ZXJFdmVudHMoKXtRYShpMyx0aGlzKS5hZGRFdmVudExpc3RlbmVyKFFhKHgwLHRoaXMpLmhvbGRlciwiY29udGV4dG1lbnUiLGQ9PnRoaXMub25Db250ZXh0TWVu'@;
put 'dShkKSksUWEoaTMsdGhpcykuYWRkRXZlbnRMaXN0ZW5lcihRYSh4MCx0aGlzKS5UQUJMRSwibW91c2VvdmVyIixkPT50aGlzLm9uTW91c2VPdmVyKGQpKSxRYShpMyx0aGlzKS5hZGRFdmVudExpc3RlbmVyKFFhKHgwLHRoaXMpLlRBQkxFLCJtb3VzZW91dCIsZD0+dGhpcy5vbk1vdXNlT3V0'@;
put 'KGQpKTtjb25zdCBsPSgpPT57UWEoaTMsdGhpcykuYWRkRXZlbnRMaXN0ZW5lcihRYSh4MCx0aGlzKS5ob2xkZXIsInRvdWNoc3RhcnQiLGQ9PnRoaXMub25Ub3VjaFN0YXJ0KGQpKSxRYShpMyx0aGlzKS5hZGRFdmVudExpc3RlbmVyKFFhKHgwLHRoaXMpLmhvbGRlciwidG91Y2hlbmQiLGQ9'@;
put 'PnRoaXMub25Ub3VjaEVuZChkKSksdGhpcy5tb21lbnR1bVNjcm9sbGluZ3x8KHRoaXMubW9tZW50dW1TY3JvbGxpbmc9e30pLFFhKGkzLHRoaXMpLmFkZEV2ZW50TGlzdGVuZXIoUWEoeDAsdGhpcykuaG9sZGVyLCJzY3JvbGwiLCgpPT57Y2xlYXJUaW1lb3V0KHRoaXMubW9tZW50dW1TY3Jv'@;
put 'bGxpbmcuX3RpbWVvdXQpLHRoaXMubW9tZW50dW1TY3JvbGxpbmcub25nb2luZ3x8UWEoejIsdGhpcykuZ2V0U2V0dGluZygib25CZWZvcmVUb3VjaFNjcm9sbCIpLHRoaXMubW9tZW50dW1TY3JvbGxpbmcub25nb2luZz0hMCx0aGlzLm1vbWVudHVtU2Nyb2xsaW5nLl90aW1lb3V0PXNldFRp'@;
put 'bWVvdXQoKCk9Pnt0aGlzLnRvdWNoQXBwbGllZHx8KHRoaXMubW9tZW50dW1TY3JvbGxpbmcub25nb2luZz0hMSxRYSh6Mix0aGlzKS5nZXRTZXR0aW5nKCJvbkFmdGVyTW9tZW50dW1TY3JvbGwiKSl9LDIwMCl9KX07QXAoKT9sKCk6KFIkKCkmJmwoKSwoKCk9PntRYShpMyx0aGlzKS5hZGRF'@;
put 'dmVudExpc3RlbmVyKFFhKHgwLHRoaXMpLmhvbGRlciwibW91c2V1cCIsZD0+dGhpcy5vbk1vdXNlVXAoZCkpLFFhKGkzLHRoaXMpLmFkZEV2ZW50TGlzdGVuZXIoUWEoeDAsdGhpcykuaG9sZGVyLCJtb3VzZWRvd24iLGQ9PnRoaXMub25Nb3VzZURvd24oZCkpfSkoKSl9c2VsZWN0ZWRDZWxs'@;
put 'V2FzVG91Y2hlZChsKXtjb25zdCBkPXRoaXMucGFyZW50Q2VsbChsKS5jb29yZHM7aWYoUWEoUkUsdGhpcykmJmQpe2NvbnN0W2gsZl09W2Qucm93LFFhKFJFLHRoaXMpLmZyb20ucm93XSxbdixNXT1bZC5jb2wsUWEoUkUsdGhpcykuZnJvbS5jb2xdO3JldHVybiBoPT09ZiYmdj09PU19cmV0'@;
put 'dXJuITF9cGFyZW50Q2VsbChsKXtjb25zdCBhPXt9LGg9YkUobCxbIlREIiwiVEgiXSxRYSh4MCx0aGlzKS5UQUJMRSk7cmV0dXJuIGg/KGEuY29vcmRzPVFhKHgwLHRoaXMpLmdldENvb3JkcyhoKSxhLlREPWgpOnBvKGwsInd0Qm9yZGVyIikmJnBvKGwsImN1cnJlbnQiKT8oYS5jb29yZHM9'@;
put 'UWEoZl8sdGhpcykuZ2V0Rm9jdXNTZWxlY3Rpb24oKS5jZWxsUmFuZ2UuaGlnaGxpZ2h0LGEuVEQ9UWEoeDAsdGhpcykuZ2V0Q2VsbChhLmNvb3JkcykpOnBvKGwsInd0Qm9yZGVyIikmJnBvKGwsImFyZWEiKSYmUWEoZl8sdGhpcykuZ2V0QXJlYVNlbGVjdGlvbigpLmNlbGxSYW5nZSYmKGEu'@;
put 'Y29vcmRzPVFhKGZfLHRoaXMpLmdldEFyZWFTZWxlY3Rpb24oKS5jZWxsUmFuZ2UudG8sYS5URD1RYSh4MCx0aGlzKS5nZXRDZWxsKGEuY29vcmRzKSksYX1vbk1vdXNlRG93bihsKXtjb25zdCBhPVFhKGlLLHRoaXMpLnJvb3REb2N1bWVudC5hY3RpdmVFbGVtZW50LGQ9SSQoUjJlLGwudGFy'@;
put 'Z2V0KSxoPWwudGFyZ2V0O2lmKCFbIlREIiwiVEgiXS5pbmNsdWRlcyhhLm5vZGVOYW1lKSYmKGg9PT1hfHxkKDApPT09YXx8ZCgxKT09PWEpKXJldHVybjtjb25zdCBmPXRoaXMucGFyZW50Q2VsbChoKTtwbyhoLCJjb3JuZXIiKT9RYSh6Mix0aGlzKS5nZXRTZXR0aW5nKCJvbkNlbGxDb3Ju'@;
put 'ZXJNb3VzZURvd24iLGwsaCk6Zi5URCYmUWEoejIsdGhpcykuaGFzKCJvbkNlbGxNb3VzZURvd24iKSYmdGhpcy5jYWxsTGlzdGVuZXIoIm9uQ2VsbE1vdXNlRG93biIsbCxmLmNvb3JkcyxmLlREKSwoMD09PWwuYnV0dG9ufHx0aGlzLnRvdWNoQXBwbGllZCkmJmYuVEQmJihRYShEcCx0aGlz'@;
put 'KVswXT1mLlRELGNsZWFyVGltZW91dChRYShHNyx0aGlzKVswXSksUWEoRzcsdGhpcylbMF09c2V0VGltZW91dCgoKT0+e1FhKERwLHRoaXMpWzBdPW51bGx9LDFlMykpfW9uQ29udGV4dE1lbnUobCl7aWYoUWEoejIsdGhpcykuaGFzKCJvbkNlbGxDb250ZXh0TWVudSIpKXtjb25zdCBhPXRo'@;
put 'aXMucGFyZW50Q2VsbChsLnRhcmdldCk7YS5URCYmdGhpcy5jYWxsTGlzdGVuZXIoIm9uQ2VsbENvbnRleHRNZW51IixsLGEuY29vcmRzLGEuVEQpfX1vbk1vdXNlT3ZlcihsKXtpZighUWEoejIsdGhpcykuaGFzKCJvbkNlbGxNb3VzZU92ZXIiKSlyZXR1cm47Y29uc3QgYT1RYSh4MCx0aGlz'@;
put 'KS5UQUJMRSxkPWJFKGwudGFyZ2V0LFsiVEQiLCJUSCJdLGEpLGg9UWEoZVAsdGhpcyl8fHRoaXM7ZCYmZCE9PWgubGFzdE1vdXNlT3ZlciYmTG0oZCxhKSYmKGgubGFzdE1vdXNlT3Zlcj1kLHRoaXMuY2FsbExpc3RlbmVyKCJvbkNlbGxNb3VzZU92ZXIiLGwsUWEoeDAsdGhpcykuZ2V0Q29v'@;
put 'cmRzKGQpLGQpKX1vbk1vdXNlT3V0KGwpe2lmKCFRYSh6Mix0aGlzKS5oYXMoIm9uQ2VsbE1vdXNlT3V0IikpcmV0dXJuO2NvbnN0IGE9UWEoeDAsdGhpcykuVEFCTEUsZD1iRShsLnRhcmdldCxbIlREIiwiVEgiXSxhKSxoPWJFKGwucmVsYXRlZFRhcmdldCxbIlREIiwiVEgiXSxhKSxmPVFh'@;
put 'KGVQLHRoaXMpfHx0aGlzO2QmJmQhPT1oJiZMbShkLGEpJiYodGhpcy5jYWxsTGlzdGVuZXIoIm9uQ2VsbE1vdXNlT3V0IixsLFFhKHgwLHRoaXMpLmdldENvb3JkcyhkKSxkKSxudWxsPT09aCYmKGYubGFzdE1vdXNlT3Zlcj1udWxsKSl9b25Nb3VzZVVwKGwpe2NvbnN0IGE9dGhpcy5wYXJl'@;
put 'bnRDZWxsKGwudGFyZ2V0KTthLlREJiZRYSh6Mix0aGlzKS5oYXMoIm9uQ2VsbE1vdXNlVXAiKSYmdGhpcy5jYWxsTGlzdGVuZXIoIm9uQ2VsbE1vdXNlVXAiLGwsYS5jb29yZHMsYS5URCksKDA9PT1sLmJ1dHRvbnx8dGhpcy50b3VjaEFwcGxpZWQpJiYoYS5URD09PVFhKERwLHRoaXMpWzBd'@;
put 'JiZhLlREPT09UWEoRHAsdGhpcylbMV0/KHBvKGwudGFyZ2V0LCJjb3JuZXIiKT90aGlzLmNhbGxMaXN0ZW5lcigib25DZWxsQ29ybmVyRGJsQ2xpY2siLGwsYS5jb29yZHMsYS5URCk6dGhpcy5jYWxsTGlzdGVuZXIoIm9uQ2VsbERibENsaWNrIixsLGEuY29vcmRzLGEuVEQpLFFhKERwLHRo'@;
put 'aXMpWzBdPW51bGwsUWEoRHAsdGhpcylbMV09bnVsbCk6YS5URD09PVFhKERwLHRoaXMpWzBdJiYoUWEoRHAsdGhpcylbMV09YS5URCxjbGVhclRpbWVvdXQoUWEoRzcsdGhpcylbMV0pLFFhKEc3LHRoaXMpWzFdPXNldFRpbWVvdXQoKCk9PntRYShEcCx0aGlzKVsxXT1udWxsfSw1MDApKSl9'@;
put 'b25Ub3VjaFN0YXJ0KGwpe1ZtKFJFLHRoaXMsUWEoZl8sdGhpcykuZ2V0Rm9jdXNTZWxlY3Rpb24oKS5jZWxsUmFuZ2UpLHRoaXMudG91Y2hBcHBsaWVkPSEwLHRoaXMub25Nb3VzZURvd24obCl9b25Ub3VjaEVuZChsKXt2YXIgYTtjb25zdCBkPWwudGFyZ2V0LGg9bnVsbD09PShhPXRoaXMu'@;
put 'cGFyZW50Q2VsbChkKSl8fHZvaWQgMD09PWE/dm9pZCAwOmEuY29vcmRzLGY9UGEoaCkmJmgucm93Pj0wJiZoLmNvbD49MDtpZihsLmNhbmNlbGFibGUmJmYmJlFhKHoyLHRoaXMpLmdldFNldHRpbmcoImlzRGF0YVZpZXdJbnN0YW5jZSIpKXtjb25zdCBNPVsiQSIsIkJVVFRPTiIsIklOUFVU'@;
put 'Il07TyQoKSYmKFEyZSgpfHxlZmUoKSkmJnRoaXMuc2VsZWN0ZWRDZWxsV2FzVG91Y2hlZChkKSYmIU0uaW5jbHVkZXMoZC50YWdOYW1lKT9sLnByZXZlbnREZWZhdWx0KCk6dGhpcy5zZWxlY3RlZENlbGxXYXNUb3VjaGVkKGQpfHxsLnByZXZlbnREZWZhdWx0KCl9dGhpcy5vbk1vdXNlVXAo'@;
put 'bCksdGhpcy50b3VjaEFwcGxpZWQ9ITF9Y2FsbExpc3RlbmVyKGwsYSxkLGgpe2NvbnN0IGY9UWEoejIsdGhpcykuZ2V0U2V0dGluZ1B1cmUobCk7ZiYmZihhLGQsaCxRYShhSyx0aGlzKS5jYWxsKHRoaXMpKX1kZXN0cm95KCl7Y2xlYXJUaW1lb3V0KFFhKEc3LHRoaXMpWzBdKSxjbGVhclRp'@;
put 'bWVvdXQoUWEoRzcsdGhpcylbMV0pLFFhKGkzLHRoaXMpLmRlc3Ryb3koKX19O2Z1bmN0aW9uIG9LKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiB2SmUoYyl7dmFyIGw9ZnVuY3Rpb24gYkplKGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50'@;
put 'b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0'@;
put 'cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xd'@;
put 'PWEsY31jb25zdCBfSmU9Y2xhc3MgeUple2NvbnN0cnVjdG9yKGwsYSxkKXtvSyh0aGlzLCJvZmZzZXQiLHZvaWQgMCksb0sodGhpcywidG90YWwiLHZvaWQgMCksb0sodGhpcywiY291bnRUSCIsdm9pZCAwKSx0aGlzLm9mZnNldD1sLHRoaXMudG90YWw9YSx0aGlzLmNvdW50VEg9ZH1vZmZz'@;
put 'ZXR0ZWQobCl7cmV0dXJuIGwrdGhpcy5vZmZzZXR9dW5PZmZzZXR0ZWQobCl7cmV0dXJuIGwtdGhpcy5vZmZzZXR9cmVuZGVyZWRUb1NvdXJjZShsKXtyZXR1cm4gdGhpcy5vZmZzZXR0ZWQobCl9c291cmNlVG9SZW5kZXJlZChsKXtyZXR1cm4gdGhpcy51bk9mZnNldHRlZChsKX1vZmZzZXR0'@;
put 'ZWRUSChsKXtyZXR1cm4gbC10aGlzLmNvdW50VEh9dW5PZmZzZXR0ZWRUSChsKXtyZXR1cm4gbCt0aGlzLmNvdW50VEh9dmlzaWJsZVJvd0hlYWRlZENvbHVtblRvU291cmNlQ29sdW1uKGwpe3JldHVybiB0aGlzLnJlbmRlcmVkVG9Tb3VyY2UodGhpcy5vZmZzZXR0ZWRUSChsKSl9c291cmNl'@;
put 'Q29sdW1uVG9WaXNpYmxlUm93SGVhZGVkQ29sdW1uKGwpe3JldHVybiB0aGlzLnVuT2Zmc2V0dGVkVEgodGhpcy5zb3VyY2VUb1JlbmRlcmVkKGwpKX19O2Z1bmN0aW9uIHNLKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiB3SmUoYyl7dmFyIGw9ZnVuY3Rpb24gQ0plKGMsbCl7aWYoIm9iamVj'@;
put 'dCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBt'@;
put 'dXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVy'@;
put 'YWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jb25zdCBNSmU9Y2xhc3MgU0ple2NvbnN0cnVjdG9yKGwsYSxkKXtzSyh0aGlzLCJvZmZzZXQiLHZvaWQgMCksc0sodGhpcywidG90YWwiLHZvaWQgMCksc0sodGhpcywiY291bnRUSCIsdm9pZCAwKSx0aGlz'@;
put 'Lm9mZnNldD1sLHRoaXMudG90YWw9YSx0aGlzLmNvdW50VEg9ZH1vZmZzZXR0ZWQobCl7cmV0dXJuIGwrdGhpcy5vZmZzZXR9dW5PZmZzZXR0ZWQobCl7cmV0dXJuIGwtdGhpcy5vZmZzZXR9cmVuZGVyZWRUb1NvdXJjZShsKXtyZXR1cm4gdGhpcy5vZmZzZXR0ZWQobCl9c291cmNlVG9SZW5k'@;
put 'ZXJlZChsKXtyZXR1cm4gdGhpcy51bk9mZnNldHRlZChsKX1vZmZzZXR0ZWRUSChsKXtyZXR1cm4gbC10aGlzLmNvdW50VEh9dW5PZmZzZXR0ZWRUSChsKXtyZXR1cm4gbCt0aGlzLmNvdW50VEh9dmlzaWJsZUNvbEhlYWRlZFJvd1RvU291cmNlUm93KGwpe3JldHVybiB0aGlzLnJlbmRlcmVk'@;
put 'VG9Tb3VyY2UodGhpcy5vZmZzZXR0ZWRUSChsKSl9c291cmNlUm93VG9WaXNpYmxlQ29sSGVhZGVkUm93KGwpe3JldHVybiB0aGlzLnVuT2Zmc2V0dGVkVEgodGhpcy5zb3VyY2VUb1JlbmRlcmVkKGwpKX19O2Z1bmN0aW9uIHRQKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiB4SmUoYyl7dmFy'@;
put 'IGw9ZnVuY3Rpb24gRUplKGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cg'@;
put 'bmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZp'@;
put 'bmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jbGFzcyBUSmV7Y29uc3RydWN0b3IoKXt0UCh0aGlzLCJjdXJyZW50U2l6ZSIsMCksdFAodGhpcywibmV4dFNpemUiLDApLHRQKHRoaXMsImN1cnJlbnRP'@;
put 'ZmZzZXQiLDApLHRQKHRoaXMsIm5leHRPZmZzZXQiLDApfXNldFNpemUobCl7dGhpcy5jdXJyZW50U2l6ZT10aGlzLm5leHRTaXplLHRoaXMubmV4dFNpemU9bH1zZXRPZmZzZXQobCl7dGhpcy5jdXJyZW50T2Zmc2V0PXRoaXMubmV4dE9mZnNldCx0aGlzLm5leHRPZmZzZXQ9bH19ZnVuY3Rp'@;
put 'b24gY0soYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIGtKZShjKXt2YXIgbD1mdW5jdGlvbiBESmUoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVs'@;
put 'dCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1i'@;
put 'b2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNsYXNzIElKZXtjb25zdHJ1Y3Rvcigpe2NLKHRoaXMsInNpemUiLG5ldyBUSmUp'@;
put 'LGNLKHRoaXMsIndvcmtpbmdTcGFjZSIsMCksY0sodGhpcywic2hhcmVkU2l6ZSIsbnVsbCl9c2V0U2l6ZShsKXt0aGlzLnNpemUuc2V0U2l6ZShsKX1zZXRPZmZzZXQobCl7dGhpcy5zaXplLnNldE9mZnNldChsKX1nZXRWaWV3U2l6ZSgpe3JldHVybiB0aGlzLnNpemV9aXNTaGFyZWQoKXty'@;
put 'ZXR1cm4gbnVsbCE9PXRoaXMuc2hhcmVkU2l6ZX1pc1BsYWNlT24obCl7cmV0dXJuIHRoaXMud29ya2luZ1NwYWNlPT09bH1hcHBlbmQobCl7dGhpcy53b3JraW5nU3BhY2U9MSxsLndvcmtpbmdTcGFjZT0yLHRoaXMuc2hhcmVkU2l6ZT1sLmdldFZpZXdTaXplKCl9cHJlcGVuZChsKXt0aGlz'@;
put 'LndvcmtpbmdTcGFjZT0yLGwud29ya2luZ1NwYWNlPTEsdGhpcy5zaGFyZWRTaXplPWwuZ2V0Vmlld1NpemUoKX19eSgyOTc2MCk7Y2xhc3MgQWZle2NvbnN0cnVjdG9yKGwsYSl7KGZ1bmN0aW9uIFJKZShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gTEplKGMpe3ZhciBsPWZ1bmN0aW9uIE9K'@;
put 'ZShjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3Io'@;
put 'IkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxs'@;
put 'LHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9KSh0aGlzLCJvcmRlciIsW10pLHRoaXMub3JkZXI9Wy4uLkFycmF5KGEpLmtleXMoKV0ubWFwKGQ9PmwrZCl9Z2V0IGxlbmd0aCgpe3JldHVybiB0aGlzLm9yZGVyLmxlbmd0aH1o'@;
put 'YXMobCl7cmV0dXJuIHRoaXMub3JkZXIuaW5kZXhPZihsKT4tMX1nZXQobCl7cmV0dXJuIGw8dGhpcy5vcmRlci5sZW5ndGg/dGhpcy5vcmRlcltsXTotMX1yZW1vdmUobCl7dGhpcy5vcmRlci5zcGxpY2UodGhpcy5vcmRlci5pbmRleE9mKGwpLDEpfXByZXBlbmQobCl7cmV0dXJuIHRoaXMu'@;
put 'b3JkZXIudW5zaGlmdChsKSx0aGlzLm9yZGVyLnBvcCgpfX1jbGFzcyBOSmV7Y29uc3RydWN0b3IobCl7KGZ1bmN0aW9uIFBKZShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gRkplKGMpe3ZhciBsPWZ1bmN0aW9uIEhKZShjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7'@;
put 'dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFs'@;
put 'dWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdy'@;
put 'aXRhYmxlOiEwfSk6Y1tsXT1hLGN9KSh0aGlzLCJzaXplU2V0Iix2b2lkIDApLHRoaXMuc2l6ZVNldD1sfWRpZmYoKXtjb25zdHtzaXplU2V0Omx9PXRoaXMse2N1cnJlbnRTaXplOmEsbmV4dFNpemU6ZH09bC5nZXRWaWV3U2l6ZSgpO2xldCBoPU1hdGgubWF4KGQsYSk7aWYoMD09PWgpcmV0'@;
put 'dXJuW107Y29uc3R7Y3VycmVudE9mZnNldDpmLG5leHRPZmZzZXQ6dn09bC5nZXRWaWV3U2l6ZSgpLE09bmV3IEFmZShmLGEpLEQ9bmV3IEFmZSh2LGQpLFo9W107Zm9yKGxldCByZT0wO3JlPGg7cmUrKyl7Y29uc3QgY2U9TS5nZXQocmUpLGJlPUQuZ2V0KHJlKTtpZigtMT09PWJlKVoucHVz'@;
put 'aChbInJlbW92ZSIsY2VdKTtlbHNlIGlmKC0xPT09Y2UpIWwuaXNTaGFyZWQoKXx8bC5pc1NoYXJlZCgpJiZsLmlzUGxhY2VPbigyKT9aLnB1c2goWyJhcHBlbmQiLGJlXSk6Wi5wdXNoKFsicHJlcGVuZCIsYmVdKTtlbHNlIGlmKGJlPmNlKU0uaGFzKGJlKSYmKE0ucmVtb3ZlKGJlKSxkPD1N'@;
put 'Lmxlbmd0aCYmKGgtPTEpKSxaLnB1c2goWyJyZXBsYWNlIixiZSxjZV0pO2Vsc2UgaWYoYmU8Y2Upe2NvbnN0IEVlPU0ucHJlcGVuZChiZSk7Wi5wdXNoKFsiaW5zZXJ0X2JlZm9yZSIsYmUsY2UsRWVdKX1lbHNlIFoucHVzaChbIm5vbmUiLGJlXSl9cmV0dXJuIFp9fWZ1bmN0aW9uIHBfKGMs'@;
put 'bCxhKXtyZXR1cm4obD1mdW5jdGlvbiBWSmUoYyl7dmFyIGw9ZnVuY3Rpb24gQkplKGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigi'@;
put 'b2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlw'@;
put 'ZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jbGFzcyBrZmV7Y29uc3RydWN0b3IobCxhKXtwXyh0aGlzLCJyb290Tm9kZSIsdm9pZCAwKSxw'@;
put 'Xyh0aGlzLCJub2Rlc1Bvb2wiLHZvaWQgMCkscF8odGhpcywic2l6ZVNldCIsbmV3IElKZSkscF8odGhpcywiY29sbGVjdGVkTm9kZXMiLFtdKSxwXyh0aGlzLCJ2aWV3RGlmZmVyIixuZXcgTkplKHRoaXMuc2l6ZVNldCkpLHBfKHRoaXMsImxlYWRzIixbXSksdGhpcy5yb290Tm9kZT1sLHRo'@;
put 'aXMubm9kZXNQb29sPWF9c2V0U2l6ZShsKXtyZXR1cm4gdGhpcy5zaXplU2V0LnNldFNpemUobCksdGhpc31zZXRPZmZzZXQobCl7cmV0dXJuIHRoaXMuc2l6ZVNldC5zZXRPZmZzZXQobCksdGhpc31pc1NoYXJlZFZpZXdTZXQoKXtyZXR1cm4gdGhpcy5zaXplU2V0LmlzU2hhcmVkKCl9Z2V0'@;
put 'Tm9kZShsKXtyZXR1cm4gbDx0aGlzLmNvbGxlY3RlZE5vZGVzLmxlbmd0aD90aGlzLmNvbGxlY3RlZE5vZGVzW2xdOm51bGx9Z2V0Q3VycmVudE5vZGUoKXtjb25zdCBsPXRoaXMuY29sbGVjdGVkTm9kZXMubGVuZ3RoO3JldHVybiBsPjA/dGhpcy5jb2xsZWN0ZWROb2Rlc1tsLTFdOm51bGx9'@;
put 'YXBwbHlDb21tYW5kKGwpe2NvbnN0e3Jvb3ROb2RlOmF9PXRoaXMsW2QsaCxmLHZdPWwsTT10aGlzLm5vZGVzUG9vbChoKTtzd2l0Y2godGhpcy5jb2xsZWN0ZWROb2Rlcy5wdXNoKE0pLGQpe2Nhc2UicHJlcGVuZCI6YS5pbnNlcnRCZWZvcmUoTSxhLmZpcnN0Q2hpbGQpO2JyZWFrO2Nhc2Ui'@;
put 'YXBwZW5kIjphLmFwcGVuZENoaWxkKE0pO2JyZWFrO2Nhc2UiaW5zZXJ0X2JlZm9yZSI6YS5pbnNlcnRCZWZvcmUoTSx0aGlzLm5vZGVzUG9vbChmKSksYS5yZW1vdmVDaGlsZCh0aGlzLm5vZGVzUG9vbCh2KSk7YnJlYWs7Y2FzZSJyZXBsYWNlIjphLnJlcGxhY2VDaGlsZChNLHRoaXMubm9k'@;
put 'ZXNQb29sKGYpKTticmVhaztjYXNlInJlbW92ZSI6YS5yZW1vdmVDaGlsZChNKX19c3RhcnQoKXt0aGlzLmNvbGxlY3RlZE5vZGVzLmxlbmd0aD0wLHRoaXMubGVhZHM9dGhpcy52aWV3RGlmZmVyLmRpZmYoKX1yZW5kZXIoKXt0aGlzLmxlYWRzLmxlbmd0aD4wJiZ0aGlzLmFwcGx5Q29tbWFu'@;
put 'ZCh0aGlzLmxlYWRzLnNoaWZ0KCkpfWVuZCgpe2Zvcig7dGhpcy5sZWFkcy5sZW5ndGg+MDspdGhpcy5hcHBseUNvbW1hbmQodGhpcy5sZWFkcy5zaGlmdCgpKX19Y2xhc3MgRGZlIGV4dGVuZHMga2Zle3ByZXBlbmRWaWV3KGwpe3JldHVybiB0aGlzLnNpemVTZXQucHJlcGVuZChsLnNpemVT'@;
put 'ZXQpLGwuc2l6ZVNldC5hcHBlbmQodGhpcy5zaXplU2V0KSx0aGlzfWFwcGVuZFZpZXcobCl7cmV0dXJuIHRoaXMuc2l6ZVNldC5hcHBlbmQobC5zaXplU2V0KSxsLnNpemVTZXQucHJlcGVuZCh0aGlzLnNpemVTZXQpLHRoaXN9fWZ1bmN0aW9uIElmZShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rp'@;
put 'b24gakplKGMpe3ZhciBsPWZ1bmN0aW9uIHpKZShjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJl'@;
put 'dHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4g'@;
put 'Yz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y2xhc3MgVUple2NvbnN0cnVjdG9yKGwpe0lmZSh0aGlzLCJub2RlVHlwZSIsdm9pZCAwKSxJZmUodGhpcywicG9vbCIsbmV3IE1h'@;
put 'cCksdGhpcy5ub2RlVHlwZT1sLnRvVXBwZXJDYXNlKCl9c2V0Um9vdERvY3VtZW50KGwpe3RoaXMucm9vdERvY3VtZW50PWx9b2J0YWluKGwsYSl7Y29uc3QgaD0ibnVtYmVyIj09dHlwZW9mIGE/YCR7bH14JHthfWA6bC50b1N0cmluZygpO2lmKHRoaXMucG9vbC5oYXMoaCkpcmV0dXJuIHRo'@;
put 'aXMucG9vbC5nZXQoaCk7Y29uc3QgZj10aGlzLnJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50KHRoaXMubm9kZVR5cGUpO3JldHVybiB0aGlzLnBvb2wuc2V0KGgsZiksZn19ZnVuY3Rpb24gTEUoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIFpKZShjKXt2YXIgbD1mdW5jdGlvbiBXSmUoYyxs'@;
put 'KXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRv'@;
put 'UHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFs'@;
put 'dWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNsYXNzIE9Fe2NvbnN0cnVjdG9yKGwsYSl7TEUodGhpcywibm9kZXNQb29sIixudWxsKSxMRSh0aGlzLCJub2RlVHlwZSIsdm9pZCAwKSxMRSh0aGlzLCJyb290Tm9kZSIsdm9pZCAwKSxM'@;
put 'RSh0aGlzLCJ0YWJsZSIsbnVsbCksTEUodGhpcywicmVuZGVyZWROb2RlcyIsMCksdGhpcy5ub2Rlc1Bvb2w9InN0cmluZyI9PXR5cGVvZiBsP25ldyBVSmUobCk6bnVsbCx0aGlzLm5vZGVUeXBlPWwsdGhpcy5yb290Tm9kZT1hfXNldFRhYmxlKGwpe3RoaXMubm9kZXNQb29sJiZ0aGlzLm5v'@;
put 'ZGVzUG9vbC5zZXRSb290RG9jdW1lbnQobC5yb290RG9jdW1lbnQpLHRoaXMudGFibGU9bH1hZGp1c3QoKXt9cmVuZGVyKCl7fX1mdW5jdGlvbiBSZmUoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIFlKZShjKXt2YXIgbD1mdW5jdGlvbiBHSmUoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8'@;
put 'fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEg'@;
put 'cHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZp'@;
put 'Z3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNsYXNzICRKZSBleHRlbmRzIE9Fe2NvbnN0cnVjdG9yKCl7c3VwZXIoIlRIIiksUmZlKHRoaXMsIm9yZGVyVmlld3MiLG5ldyBXZWFrTWFwKSxSZmUodGhpcywic291cmNlUm93SW5kZXgiLDApfW9idGFpbk9yZGVyVmlldyhsKXts'@;
put 'ZXQgYTtyZXR1cm4gdGhpcy5vcmRlclZpZXdzLmhhcyhsKT9hPXRoaXMub3JkZXJWaWV3cy5nZXQobCk6KGE9bmV3IERmZShsLGQ9PnRoaXMubm9kZXNQb29sLm9idGFpbih0aGlzLnNvdXJjZVJvd0luZGV4LGQpKSx0aGlzLm9yZGVyVmlld3Muc2V0KGwsYSkpLGF9cmVuZGVyKCl7Y29uc3R7'@;
put 'cm93c1RvUmVuZGVyOmwscm93SGVhZGVyRnVuY3Rpb25zOmEscm93SGVhZGVyc0NvdW50OmQscm93czpoLGNlbGxzOmZ9PXRoaXMudGFibGU7Zm9yKGxldCB2PTA7djxsO3YrKyl7Y29uc3QgTT10aGlzLnRhYmxlLnJlbmRlcmVkUm93VG9Tb3VyY2UodiksRD1oLmdldFJlbmRlcmVkTm9kZSh2'@;
put 'KTt0aGlzLnNvdXJjZVJvd0luZGV4PU07Y29uc3QgWj10aGlzLm9idGFpbk9yZGVyVmlldyhEKSxyZT1mLm9idGFpbk9yZGVyVmlldyhEKTtaLmFwcGVuZFZpZXcocmUpLnNldFNpemUoZCkuc2V0T2Zmc2V0KDApLnN0YXJ0KCk7Zm9yKGxldCBjZT1kLTE7Y2U+PTA7Y2UtLSl7Wi5yZW5kZXIo'@;
put 'KTtjb25zdCBiZT1aLmdldEN1cnJlbnROb2RlKCk7YmUuY2xhc3NOYW1lPSIiLGJlLnJlbW92ZUF0dHJpYnV0ZSgic3R5bGUiKSxqNyhiZSxbbmV3IFJlZ0V4cCgiYXJpYS0oLiopIiksbmV3IFJlZ0V4cCgicm9sZSIpXSksdGhpcy50YWJsZS5pc0FyaWFFbmFibGVkKCkmJnZvKGJlLFtbInJv'@;
put 'bGUiLCJyb3doZWFkZXIiXSxbInNjb3BlIiwicm93Il0sdiQoY2UrMSksTjcoLTEpXSksYVtjZV0oTSxiZSxjZSl9Wi5lbmQoKX19fWNsYXNzIEtKZSBleHRlbmRzIE9Fe2NvbnN0cnVjdG9yKGwpe3N1cGVyKG51bGwsbCl9YWRqdXN0KCl7Y29uc3R7Y29sdW1uSGVhZGVyc0NvdW50Omwscm93'@;
put 'SGVhZGVyc0NvdW50OmF9PXRoaXMudGFibGU7bGV0IGQ9dGhpcy5yb290Tm9kZS5maXJzdENoaWxkO2lmKGwpe2NvbnN0e2NvbHVtbnNUb1JlbmRlcjpofT10aGlzLnRhYmxlLGY9aCthO2ZvcihsZXQgTT0wLEQ9bDtNPEQ7TSsrKXtmb3IoZD10aGlzLnJvb3ROb2RlLmNoaWxkTm9kZXNbTV0s'@;
put 'ZHx8KGQ9dGhpcy50YWJsZS5yb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidHIiKSx0aGlzLnJvb3ROb2RlLmFwcGVuZENoaWxkKGQpKSx0aGlzLnJlbmRlcmVkTm9kZXM9ZC5jaGlsZE5vZGVzLmxlbmd0aDt0aGlzLnJlbmRlcmVkTm9kZXM8ZjspZC5hcHBlbmRDaGlsZCh0aGlzLnRhYmxl'@;
put 'LnJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0aCIpKSx0aGlzLnJlbmRlcmVkTm9kZXMrPTE7Zm9yKDt0aGlzLnJlbmRlcmVkTm9kZXM+ZjspZC5yZW1vdmVDaGlsZChkLmxhc3RDaGlsZCksdGhpcy5yZW5kZXJlZE5vZGVzLT0xfWNvbnN0IHY9dGhpcy5yb290Tm9kZS5jaGlsZE5vZGVz'@;
put 'Lmxlbmd0aDtpZih2PmwpZm9yKGxldCBNPWw7TTx2O00rKyl0aGlzLnJvb3ROb2RlLnJlbW92ZUNoaWxkKHRoaXMucm9vdE5vZGUubGFzdENoaWxkKX1lbHNlIGQmJnhwKGQpfXJlbmRlcigpe2NvbnN0e2NvbHVtbkhlYWRlcnNDb3VudDpsfT10aGlzLnRhYmxlO3RoaXMudGFibGUuaXNBcmlh'@;
put 'RW5hYmxlZCgpJiZ2byh0aGlzLnJvb3ROb2RlLFtbInJvbGUiLCJyb3dncm91cCJdXSk7Zm9yKGxldCBhPTA7YTxsO2ErPTEpe2NvbnN0e2NvbHVtbkhlYWRlckZ1bmN0aW9uczpkLGNvbHVtbnNUb1JlbmRlcjpoLHJvd0hlYWRlcnNDb3VudDpmfT10aGlzLnRhYmxlLHY9dGhpcy5yb290Tm9k'@;
put 'ZS5jaGlsZE5vZGVzW2FdO3RoaXMudGFibGUuaXNBcmlhRW5hYmxlZCgpJiZ2byh2LFtbInJvbGUiLCJyb3ciXSxBMmUoYSsxKV0pO2ZvcihsZXQgTT0tMSpmO008aDtNKz0xKXtjb25zdCBEPXRoaXMudGFibGUucmVuZGVyZWRDb2x1bW5Ub1NvdXJjZShNKSxaPXYuY2hpbGROb2Rlc1tNK2Zd'@;
put 'O1ouY2xhc3NOYW1lPSIiLFoucmVtb3ZlQXR0cmlidXRlKCJzdHlsZSIpLGo3KFosW25ldyBSZWdFeHAoImFyaWEtKC4qKSIpLG5ldyBSZWdFeHAoInJvbGUiKV0pLHRoaXMudGFibGUuaXNBcmlhRW5hYmxlZCgpJiZ2byhaLFt2JChNKzErdGhpcy50YWJsZS5yb3dIZWFkZXJzQ291bnQpLE43'@;
put 'KC0xKSxbInJvbGUiLCJjb2x1bW5oZWFkZXIiXSwuLi5NPj0wP1tbInNjb3BlIiwiY29sIl1dOltbInJvbGUiLCJyb3ciXV1dKSxkW2FdKEQsWixhKX19fX1sZXQgTGZlPSExO2NsYXNzIHFKZSBleHRlbmRzIE9Fe2NvbnN0cnVjdG9yKGwpe3N1cGVyKG51bGwsbCl9YWRqdXN0KCl7Y29uc3R7'@;
put 'Y29sdW1uc1RvUmVuZGVyOmwscm93SGVhZGVyc0NvdW50OmF9PXRoaXMudGFibGUsZD1sK2E7Zm9yKDt0aGlzLnJlbmRlcmVkTm9kZXM8ZDspdGhpcy5yb290Tm9kZS5hcHBlbmRDaGlsZCh0aGlzLnRhYmxlLnJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjb2wiKSksdGhpcy5yZW5kZXJl'@;
put 'ZE5vZGVzKz0xO2Zvcig7dGhpcy5yZW5kZXJlZE5vZGVzPmQ7KXRoaXMucm9vdE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5yb290Tm9kZS5sYXN0Q2hpbGQpLHRoaXMucmVuZGVyZWROb2Rlcy09MX1yZW5kZXIoKXt0aGlzLmFkanVzdCgpO2NvbnN0e2NvbHVtbnNUb1JlbmRlcjpsLHJvd0hlYWRl'@;
put 'cnNDb3VudDphfT10aGlzLnRhYmxlOyFMZmUmJmw+MWUzJiYoTGZlPSEwLGlsKGdsYFBlcmZvcm1hbmNlIHRpcDogSGFuZHNvbnRhYmxlIHJlbmRlcmVkIG1vcmUgdGhhbiAxMDAwIHZpc2libGUgY29sdW1ucy5ceDIwCiAgICAgICAgQ29uc2lkZXIgbGltaXRpbmcgdGhlIG51bWJlciBvZiBy'@;
put 'ZW5kZXJlZCBjb2x1bW5zIGJ5IHNwZWNpZnlpbmcgdGhlIHRhYmxlIHdpZHRoIGFuZC9vclx4MjAKICAgICAgICB0dXJuaW5nIG9mZiB0aGUgInJlbmRlckFsbENvbHVtbnMiIG9wdGlvbi5gKSk7Zm9yKGxldCBoPTA7aDxhO2grKyl7Y29uc3QgZj10aGlzLnRhYmxlLnJlbmRlcmVkQ29sdW1u'@;
put 'VG9Tb3VyY2UoaCksdj10aGlzLnRhYmxlLmNvbHVtblV0aWxzLmdldEhlYWRlcldpZHRoKGYpO3RoaXMucm9vdE5vZGUuY2hpbGROb2Rlc1toXS5zdHlsZS53aWR0aD1gJHt2fXB4YH1mb3IobGV0IGg9MDtoPGw7aCsrKXtjb25zdCBmPXRoaXMudGFibGUucmVuZGVyZWRDb2x1bW5Ub1NvdXJj'@;
put 'ZShoKSx2PXRoaXMudGFibGUuY29sdW1uVXRpbHMuZ2V0V2lkdGgoZik7dGhpcy5yb290Tm9kZS5jaGlsZE5vZGVzW2grYV0uc3R5bGUud2lkdGg9YCR7dn1weGB9Y29uc3QgZD10aGlzLnJvb3ROb2RlLmZpcnN0Q2hpbGQ7ZCYmVGkoZCwicm93SGVhZGVyIil9fWxldCBPZmU9ITE7Y2xhc3Mg'@;
put 'ZVFlIGV4dGVuZHMgT0V7Y29uc3RydWN0b3IobCl7c3VwZXIoIlRSIixsKSxmdW5jdGlvbiBYSmUoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIEpKZShjKXt2YXIgbD1mdW5jdGlvbiBRSmUoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRv'@;
put 'UHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3Ry'@;
put 'aW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09'@;
put 'YSxjfSh0aGlzLCJvcmRlclZpZXciLHZvaWQgMCksdGhpcy5vcmRlclZpZXc9bmV3IGtmZShsLGE9PnRoaXMubm9kZXNQb29sLm9idGFpbihhKSl9Z2V0UmVuZGVyZWROb2RlKGwpe3JldHVybiB0aGlzLm9yZGVyVmlldy5nZXROb2RlKGwpfWhhc1N0YWxlQ29udGVudChsKXtyZXR1cm4gdGhp'@;
put 'cy5vcmRlclZpZXcuaGFzU3RhbGVDb250ZW50KGwpfXJlbmRlcigpe2NvbnN0e3Jvd3NUb1JlbmRlcjpsfT10aGlzLnRhYmxlOyFPZmUmJmw+MWUzJiYoT2ZlPSEwLGlsKGdsYFBlcmZvcm1hbmNlIHRpcDogSGFuZHNvbnRhYmxlIHJlbmRlcmVkIG1vcmUgdGhhbiAxMDAwIHZpc2libGUgcm93'@;
put 'cy5ceDIwCiAgICAgICAgQ29uc2lkZXIgbGltaXRpbmcgdGhlIG51bWJlciBvZiByZW5kZXJlZCByb3dzIGJ5IHNwZWNpZnlpbmcgdGhlIHRhYmxlIGhlaWdodCBhbmQvb3JceDIwCiAgICAgICAgdHVybmluZyBvZmYgdGhlICJyZW5kZXJBbGxSb3dzIiBvcHRpb24uYCkpLHRoaXMudGFibGUu'@;
put 'aXNBcmlhRW5hYmxlZCgpJiZ2byh0aGlzLnJvb3ROb2RlLFtbInJvbGUiLCJyb3dncm91cCJdXSksdGhpcy5vcmRlclZpZXcuc2V0U2l6ZShsKS5zZXRPZmZzZXQodGhpcy50YWJsZS5yZW5kZXJlZFJvd1RvU291cmNlKDApKS5zdGFydCgpO2ZvcihsZXQgaD0wO2g8bDtoKyspe3RoaXMub3Jk'@;
put 'ZXJWaWV3LnJlbmRlcigpO2NvbnN0IGY9dGhpcy5vcmRlclZpZXcuZ2V0Q3VycmVudE5vZGUoKSx2PXRoaXMudGFibGUucmVuZGVyZWRSb3dUb1NvdXJjZShoKTt2YXIgYSxkO3RoaXMudGFibGUuaXNBcmlhRW5hYmxlZCgpJiZ2byhmLFtbInJvbGUiLCJyb3ciXSxBMmUodisobnVsbCE9PShh'@;
put 'PW51bGw9PT0oZD10aGlzLnRhYmxlLnJvd1V0aWxzKXx8dm9pZCAwPT09ZHx8bnVsbD09PShkPWQuZGF0YUFjY2Vzc09iamVjdCl8fHZvaWQgMD09PWQ/dm9pZCAwOmQuY29sdW1uSGVhZGVycy5sZW5ndGgpJiZ2b2lkIDAhPT1hP2E6MCkrMSldKSwodisxKSUyPT0wP3BvKGYsImh0X19yb3df'@;
put 'ZXZlbiIpfHwobG8oZiwiaHRfX3Jvd19vZGQiKSxUaShmLCJodF9fcm93X2V2ZW4iKSk6cG8oZiwiaHRfX3Jvd19vZGQiKXx8KGxvKGYsImh0X19yb3dfZXZlbiIpLFRpKGYsImh0X19yb3dfb2RkIikpfXRoaXMub3JkZXJWaWV3LmVuZCgpfX1mdW5jdGlvbiBQZmUoYyxsLGEpe3JldHVybihs'@;
put 'PWZ1bmN0aW9uIHRRZShjKXt2YXIgbD1mdW5jdGlvbiBuUWUoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBl'@;
put 'b2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9'@;
put 'KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNsYXNzIHJRZSBleHRlbmRzIE9Fe2NvbnN0cnVjdG9yKCl7c3VwZXIoIlREIiksUGZlKHRoaXMsIm9yZGVyVmlld3Mi'@;
put 'LG5ldyBXZWFrTWFwKSxQZmUodGhpcywic291cmNlUm93SW5kZXgiLDApfW9idGFpbk9yZGVyVmlldyhsKXtsZXQgYTtyZXR1cm4gdGhpcy5vcmRlclZpZXdzLmhhcyhsKT9hPXRoaXMub3JkZXJWaWV3cy5nZXQobCk6KGE9bmV3IERmZShsLGQ9PnRoaXMubm9kZXNQb29sLm9idGFpbih0aGlz'@;
put 'LnNvdXJjZVJvd0luZGV4LGQpLHRoaXMubm9kZVR5cGUpLHRoaXMub3JkZXJWaWV3cy5zZXQobCxhKSksYX1yZW5kZXIoKXtjb25zdHtyb3dzVG9SZW5kZXI6bCxjb2x1bW5zVG9SZW5kZXI6YSxyb3dzOmQscm93SGVhZGVyczpofT10aGlzLnRhYmxlO2ZvcihsZXQgTT0wO008bDtNKyspe2Nv'@;
put 'bnN0IEQ9dGhpcy50YWJsZS5yZW5kZXJlZFJvd1RvU291cmNlKE0pLFo9ZC5nZXRSZW5kZXJlZE5vZGUoTSk7dGhpcy5zb3VyY2VSb3dJbmRleD1EO2NvbnN0IHJlPXRoaXMub2J0YWluT3JkZXJWaWV3KFopLGNlPWgub2J0YWluT3JkZXJWaWV3KFopO3JlLnByZXBlbmRWaWV3KGNlKS5zZXRT'@;
put 'aXplKGEpLnNldE9mZnNldCgwKS5zdGFydCgpO2ZvcihsZXQgYmU9MDtiZTxhO2JlKyspe3JlLnJlbmRlcigpO2NvbnN0IEVlPXRoaXMudGFibGUucmVuZGVyZWRDb2x1bW5Ub1NvdXJjZShiZSksQmU9cmUuZ2V0Q3VycmVudE5vZGUoKTt2YXIgZix2O3BvKEJlLCJoaWRlIil8fChCZS5jbGFz'@;
put 'c05hbWU9IiIpLEJlLnJlbW92ZUF0dHJpYnV0ZSgic3R5bGUiKSxCZS5yZW1vdmVBdHRyaWJ1dGUoImRpciIpLGo3KEJlLFtuZXcgUmVnRXhwKCJhcmlhLSguKikiKSxuZXcgUmVnRXhwKCJyb2xlIildKSx0aGlzLnRhYmxlLmNlbGxSZW5kZXJlcihELEVlLEJlKSx0aGlzLnRhYmxlLmlzQXJp'@;
put 'YUVuYWJsZWQoKSYmdm8oQmUsWy4uLkJlLmhhc0F0dHJpYnV0ZSgicm9sZSIpP1tdOltbInJvbGUiLCJncmlkY2VsbCJdXSxONygtMSksdiQoRWUrKG51bGwhPT0oZj1udWxsPT09KHY9dGhpcy50YWJsZS5yb3dVdGlscyl8fHZvaWQgMD09PXZ8fG51bGw9PT0odj12LmRhdGFBY2Nlc3NPYmpl'@;
put 'Y3QpfHx2b2lkIDA9PT12P3ZvaWQgMDp2LnJvd0hlYWRlcnMubGVuZ3RoKSYmdm9pZCAwIT09Zj9mOjApKzEpXSl9cmUuZW5kKCl9fX1mdW5jdGlvbiBKdShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gaVFlKGMpe3ZhciBsPWZ1bmN0aW9uIGFRZShjLGwpe2lmKCJvYmplY3QiIT10eXBlb2Yg'@;
put 'Y3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4g'@;
put 'YSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29u'@;
put 'ZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y2xhc3Mgb1Fle2NvbnN0cnVjdG9yKGwpe2xldHtjZWxsUmVuZGVyZXI6YSxzdHlsZXNIYW5kbGVyOmR9PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp7fTtKdSh0aGlzLCJy'@;
put 'b290Tm9kZSIsdm9pZCAwKSxKdSh0aGlzLCJyb290RG9jdW1lbnQiLHZvaWQgMCksSnUodGhpcywicm93SGVhZGVycyIsbnVsbCksSnUodGhpcywiY29sdW1uSGVhZGVycyIsbnVsbCksSnUodGhpcywiY29sR3JvdXAiLG51bGwpLEp1KHRoaXMsInJvd3MiLG51bGwpLEp1KHRoaXMsImNlbGxz'@;
put 'IixudWxsKSxKdSh0aGlzLCJyb3dGaWx0ZXIiLG51bGwpLEp1KHRoaXMsImNvbHVtbkZpbHRlciIsbnVsbCksSnUodGhpcywicm93VXRpbHMiLG51bGwpLEp1KHRoaXMsImNvbHVtblV0aWxzIixudWxsKSxKdSh0aGlzLCJyb3dzVG9SZW5kZXIiLDApLEp1KHRoaXMsImNvbHVtbnNUb1JlbmRl'@;
put 'ciIsMCksSnUodGhpcywicm93SGVhZGVyRnVuY3Rpb25zIixbXSksSnUodGhpcywicm93SGVhZGVyc0NvdW50IiwwKSxKdSh0aGlzLCJjb2x1bW5IZWFkZXJGdW5jdGlvbnMiLFtdKSxKdSh0aGlzLCJjb2x1bW5IZWFkZXJzQ291bnQiLDApLEp1KHRoaXMsImNlbGxSZW5kZXJlciIsdm9pZCAw'@;
put 'KSxKdSh0aGlzLCJhY3RpdmVPdmVybGF5TmFtZSIsdm9pZCAwKSxKdSh0aGlzLCJzdHlsZXNIYW5kbGVyIix2b2lkIDApLHRoaXMucm9vdE5vZGU9bCx0aGlzLnJvb3REb2N1bWVudD10aGlzLnJvb3ROb2RlLm93bmVyRG9jdW1lbnQsdGhpcy5jZWxsUmVuZGVyZXI9YSx0aGlzLnN0eWxlc0hh'@;
put 'bmRsZXI9ZH1zZXRBY3RpdmVPdmVybGF5TmFtZShsKXt0aGlzLmFjdGl2ZU92ZXJsYXlOYW1lPWx9c2V0QXhpc1V0aWxzKGwsYSl7dGhpcy5yb3dVdGlscz1sLHRoaXMuY29sdW1uVXRpbHM9YX1zZXRWaWV3cG9ydFNpemUobCxhKXt0aGlzLnJvd3NUb1JlbmRlcj1sLHRoaXMuY29sdW1uc1Rv'@;
put 'UmVuZGVyPWF9c2V0RmlsdGVycyhsLGEpe3RoaXMucm93RmlsdGVyPWwsdGhpcy5jb2x1bW5GaWx0ZXI9YX1zZXRIZWFkZXJDb250ZW50UmVuZGVyZXJzKGwsYSl7dGhpcy5yb3dIZWFkZXJGdW5jdGlvbnM9bCx0aGlzLnJvd0hlYWRlcnNDb3VudD1sLmxlbmd0aCx0aGlzLmNvbHVtbkhlYWRl'@;
put 'ckZ1bmN0aW9ucz1hLHRoaXMuY29sdW1uSGVhZGVyc0NvdW50PWEubGVuZ3RofXNldFJlbmRlcmVycygpe2xldHtyb3dIZWFkZXJzOmwsY29sdW1uSGVhZGVyczphLGNvbEdyb3VwOmQscm93czpoLGNlbGxzOmZ9PWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2Fy'@;
put 'Z3VtZW50c1swXTp7fTtsLnNldFRhYmxlKHRoaXMpLGEuc2V0VGFibGUodGhpcyksZC5zZXRUYWJsZSh0aGlzKSxoLnNldFRhYmxlKHRoaXMpLGYuc2V0VGFibGUodGhpcyksdGhpcy5yb3dIZWFkZXJzPWwsdGhpcy5jb2x1bW5IZWFkZXJzPWEsdGhpcy5jb2xHcm91cD1kLHRoaXMucm93cz1o'@;
put 'LHRoaXMuY2VsbHM9Zn1yZW5kZXJlZFJvd1RvU291cmNlKGwpe3JldHVybiB0aGlzLnJvd0ZpbHRlci5yZW5kZXJlZFRvU291cmNlKGwpfXJlbmRlcmVkQ29sdW1uVG9Tb3VyY2UobCl7cmV0dXJuIHRoaXMuY29sdW1uRmlsdGVyLnJlbmRlcmVkVG9Tb3VyY2UobCl9aXNBcmlhRW5hYmxlZCgp'@;
put 'e3JldHVybiB0aGlzLnJvd1V0aWxzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiYXJpYVRhZ3MiKX1yZW5kZXIoKXt0aGlzLmNvbEdyb3VwLmFkanVzdCgpLHRoaXMuY29sdW1uSGVhZGVycy5hZGp1c3QoKSx0aGlzLnJvd3MuYWRqdXN0KCksdGhpcy5yb3dIZWFkZXJzLmFkanVzdCgpLHRoaXMu'@;
put 'Y29sdW1uSGVhZGVycy5yZW5kZXIoKSx0aGlzLnJvd3MucmVuZGVyKCksdGhpcy5yb3dIZWFkZXJzLnJlbmRlcigpLHRoaXMuY2VsbHMucmVuZGVyKCksdGhpcy5jb2x1bW5VdGlscy5jYWxjdWxhdGVXaWR0aHMoKSx0aGlzLmNvbEdyb3VwLnJlbmRlcigpO2NvbnN0e3Jvd3NUb1JlbmRlcjps'@;
put 'LHJvd3M6YX09dGhpcztmb3IobGV0IGQ9MDtkPGw7ZCsrKXtjb25zdCBoPWEuZ2V0UmVuZGVyZWROb2RlKGQpLGY9dGhpcy5yb3dVdGlscztpZihoLmZpcnN0Q2hpbGQpe2NvbnN0IHY9dGhpcy5yZW5kZXJlZFJvd1RvU291cmNlKGQpLE09Zi5nZXRIZWlnaHRCeU92ZXJsYXlOYW1lKHYsdGhp'@;
put 'cy5hY3RpdmVPdmVybGF5TmFtZSksWj10aGlzLnN0eWxlc0hhbmRsZXIuYXJlQ2VsbHNCb3JkZXJCb3goKT8wOjE7aC5maXJzdENoaWxkLnN0eWxlLmhlaWdodD1NP00tWisicHgiOiIifX19fWNsYXNzIHNRZXtjb25zdHJ1Y3Rvcigpe2xldHtUQUJMRTpsLFRIRUFEOmEsQ09MR1JPVVA6ZCxU'@;
put 'Qk9EWTpoLHJvd1V0aWxzOmYsY29sdW1uVXRpbHM6dixjZWxsUmVuZGVyZXI6TSxzdHlsZXNIYW5kbGVyOkR9PWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp7fTt0aGlzLnJlbmRlcmVyPW5ldyBvUWUobCx7Y2VsbFJlbmRlcmVyOk0sc3R5'@;
put 'bGVzSGFuZGxlcjpEfSksdGhpcy5yZW5kZXJlci5zZXRSZW5kZXJlcnMoe3Jvd0hlYWRlcnM6bmV3ICRKZSxjb2x1bW5IZWFkZXJzOm5ldyBLSmUoYSksY29sR3JvdXA6bmV3IHFKZShkKSxyb3dzOm5ldyBlUWUoaCksY2VsbHM6bmV3IHJRZX0pLHRoaXMucmVuZGVyZXIuc2V0QXhpc1V0aWxz'@;
put 'KGYsdil9c2V0QWN0aXZlT3ZlcmxheU5hbWUobCl7cmV0dXJuIHRoaXMucmVuZGVyZXIuc2V0QWN0aXZlT3ZlcmxheU5hbWUobCksdGhpc31zZXRGaWx0ZXJzKGwsYSl7cmV0dXJuIHRoaXMucmVuZGVyZXIuc2V0RmlsdGVycyhsLGEpLHRoaXN9c2V0Vmlld3BvcnRTaXplKGwsYSl7cmV0dXJu'@;
put 'IHRoaXMucmVuZGVyZXIuc2V0Vmlld3BvcnRTaXplKGwsYSksdGhpc31zZXRIZWFkZXJDb250ZW50UmVuZGVyZXJzKGwsYSl7cmV0dXJuIHRoaXMucmVuZGVyZXIuc2V0SGVhZGVyQ29udGVudFJlbmRlcmVycyhsLGEpLHRoaXN9YWRqdXN0KCl7dGhpcy5yZW5kZXJlci5hZGp1c3QoKX1yZW5k'@;
put 'ZXIoKXt0aGlzLnJlbmRlcmVyLnJlbmRlcigpfX1mdW5jdGlvbiB1SyhjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gbFFlKGMpe3ZhciBsPWZ1bmN0aW9uIGNRZShjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZv'@;
put 'aWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6'@;
put 'TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y2xhc3MgdVFle2Nv'@;
put 'bnN0cnVjdG9yKGwsYSl7dUsodGhpcywiZGF0YUFjY2Vzc09iamVjdCIsdm9pZCAwKSx1Syh0aGlzLCJ3dFNldHRpbmdzIix2b2lkIDApLHVLKHRoaXMsImhlYWRlcldpZHRocyIsbmV3IE1hcCksdGhpcy5kYXRhQWNjZXNzT2JqZWN0PWwsdGhpcy53dFNldHRpbmdzPWF9Z2V0V2lkdGgobCl7'@;
put 'cmV0dXJuIHRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJjb2x1bW5XaWR0aCIsbCl8fHRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJkZWZhdWx0Q29sdW1uV2lkdGgiKX1nZXRIZWFkZXJIZWlnaHQobCl7bGV0IGE9dGhpcy5kYXRhQWNjZXNzT2JqZWN0LnN0eWxlc0hhbmRsZXIuZ2V0'@;
put 'RGVmYXVsdFJvd0hlaWdodCgpO2NvbnN0IGQ9dGhpcy5kYXRhQWNjZXNzT2JqZWN0Lnd0Vmlld3BvcnQub3ZlcnNpemVkQ29sdW1uSGVhZGVyc1tsXTtyZXR1cm4gdm9pZCAwIT09ZCYmKGE9YT9NYXRoLm1heChhLGQpOmQpLGF9Z2V0SGVhZGVyV2lkdGgobCl7cmV0dXJuIHRoaXMuaGVhZGVy'@;
put 'V2lkdGhzLmdldCh0aGlzLmRhdGFBY2Nlc3NPYmplY3Qud3RUYWJsZS5jb2x1bW5GaWx0ZXIuc291cmNlVG9SZW5kZXJlZChsKSl9Y2FsY3VsYXRlV2lkdGhzKCl7Y29uc3R7d3RTZXR0aW5nczpsfT10aGlzO2xldCBhPWwuZ2V0U2V0dGluZygicm93SGVhZGVyV2lkdGgiKTtpZihhPWwuZ2V0'@;
put 'U2V0dGluZygib25Nb2RpZnlSb3dIZWFkZXJXaWR0aCIsYSksbnVsbCE9YSl7Y29uc3QgZD1sLmdldFNldHRpbmcoInJvd0hlYWRlcnMiKS5sZW5ndGgsaD1sLmdldFNldHRpbmcoImRlZmF1bHRDb2x1bW5XaWR0aCIpO2ZvcihsZXQgZj0wO2Y8ZDtmKyspe2xldCB2PUFycmF5LmlzQXJyYXko'@;
put 'YSk/YVtmXTphO3Y9dj8/aCx0aGlzLmhlYWRlcldpZHRocy5zZXQoZix2KX19fX1mdW5jdGlvbiBGZmUoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIGRRZShjKXt2YXIgbD1mdW5jdGlvbiBoUWUoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9s'@;
put 'LnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigi'@;
put 'c3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNb'@;
put 'bF09YSxjfWNsYXNzIGZRZXtjb25zdHJ1Y3RvcihsLGEpe0ZmZSh0aGlzLCJkYXRhQWNjZXNzT2JqZWN0Iix2b2lkIDApLEZmZSh0aGlzLCJ3dFNldHRpbmdzIix2b2lkIDApLHRoaXMuZGF0YUFjY2Vzc09iamVjdD1sLHRoaXMud3RTZXR0aW5ncz1hfWdldEhlaWdodChsKXtsZXQgYT10aGlz'@;
put 'Lnd0U2V0dGluZ3MuZ2V0U2V0dGluZygicm93SGVpZ2h0IixsKTtjb25zdCBkPXRoaXMuZGF0YUFjY2Vzc09iamVjdC53dFZpZXdwb3J0Lm92ZXJzaXplZFJvd3NbbF07cmV0dXJuIHZvaWQgMCE9PWQmJihhPXZvaWQgMD09PWE/ZDpNYXRoLm1heChhLGQpKSxhfWdldEhlaWdodEJ5T3Zlcmxh'@;
put 'eU5hbWUobCxhKXtsZXQgZD10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygicm93SGVpZ2h0QnlPdmVybGF5TmFtZSIsbCxhKTtjb25zdCBoPXRoaXMuZGF0YUFjY2Vzc09iamVjdC53dFZpZXdwb3J0Lm92ZXJzaXplZFJvd3NbbF07cmV0dXJuIHZvaWQgMCE9PWgmJihkPXZvaWQgMD09PWQ/'@;
put 'aDpNYXRoLm1heChkLGgpKSxkfX1jb25zdCAkNz0idG9wIixJcD0iYm90dG9tIixLNz0iaW5saW5lX3N0YXJ0IixxNz0idG9wX2lubGluZV9zdGFydF9jb3JuZXIiLEJtPSJib3R0b21faW5saW5lX3N0YXJ0X2Nvcm5lciIsSGZlPVskNyxJcCxLNyxxNyxCbV0scFFlPW5ldyBNYXAoW1skNyxg'@;
put 'aHRfY2xvbmVfJHskN31gXSxbSXAsYGh0X2Nsb25lXyR7SXB9YF0sW0s3LGBodF9jbG9uZV8ke0s3fSBodF9jbG9uZV9sZWZ0YF0sW3E3LGBodF9jbG9uZV8ke3E3fSBodF9jbG9uZV90b3BfbGVmdF9jb3JuZXJgXSxbQm0sYGh0X2Nsb25lXyR7Qm19IGh0X2Nsb25lX2JvdHRvbV9sZWZ0X2Nv'@;
put 'cm5lcmBdXSk7ZnVuY3Rpb24gUnAoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIGdRZShjKXt2YXIgbD1mdW5jdGlvbiBtUWUoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNh'@;
put 'bGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmlu'@;
put 'ZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNvbnN0IG1fPWNsYXNzIHZRZXtjb25zdHJ1Y3Rvcihs'@;
put 'LGEsZCxoLGYpe1JwKHRoaXMsInd0U2V0dGluZ3MiLG51bGwpLFJwKHRoaXMsImRvbUJpbmRpbmdzIix2b2lkIDApLFJwKHRoaXMsIlRCT0RZIixudWxsKSxScCh0aGlzLCJUSEVBRCIsbnVsbCksUnAodGhpcywiQ09MR1JPVVAiLG51bGwpLFJwKHRoaXMsImhhc1RhYmxlSGVpZ2h0IiwhMCks'@;
put 'UnAodGhpcywiaGFzVGFibGVXaWR0aCIsITApLFJwKHRoaXMsImlzVGFibGVWaXNpYmxlIiwhMSksUnAodGhpcywidGFibGVPZmZzZXQiLDApLFJwKHRoaXMsImhvbGRlck9mZnNldCIsMCksdGhpcy5kb21CaW5kaW5ncz1kLHRoaXMuaXNNYXN0ZXI9Im1hc3RlciI9PT1mLHRoaXMubmFtZT1m'@;
put 'LHRoaXMuZGF0YUFjY2Vzc09iamVjdD1sLHRoaXMuZmFjYWRlR2V0dGVyPWEsdGhpcy53dFNldHRpbmdzPWgsdGhpcy5pbnN0YW5jZT10aGlzLmRhdGFBY2Nlc3NPYmplY3Qud290LHRoaXMud290PXRoaXMuZGF0YUFjY2Vzc09iamVjdC53b3QsdGhpcy5UQUJMRT1kLnJvb3RUYWJsZSx5JCh0'@;
put 'aGlzLlRBQkxFKSx0aGlzLnNwcmVhZGVyPXRoaXMuY3JlYXRlU3ByZWFkZXIodGhpcy5UQUJMRSksdGhpcy5oaWRlcj10aGlzLmNyZWF0ZUhpZGVyKHRoaXMuc3ByZWFkZXIpLHRoaXMuaG9sZGVyPXRoaXMuY3JlYXRlSG9sZGVyKHRoaXMuaGlkZXIpLHRoaXMud3RSb290RWxlbWVudD10aGlz'@;
put 'LmhvbGRlci5wYXJlbnROb2RlLHRoaXMuaXNNYXN0ZXImJnRoaXMuYWxpZ25PdmVybGF5c1dpdGhUcmltbWluZ0NvbnRhaW5lcigpLHRoaXMuZml4VGFibGVEb21UcmVlKCksdGhpcy5yb3dGaWx0ZXI9bnVsbCx0aGlzLmNvbHVtbkZpbHRlcj1udWxsLHRoaXMuY29ycmVjdEhlYWRlcldpZHRo'@;
put 'PSExO2NvbnN0IHY9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmdQdXJlKCJyb3dIZWFkZXJXaWR0aCIpO3RoaXMud3RTZXR0aW5ncy51cGRhdGUoInJvd0hlYWRlcldpZHRoIiwoKT0+dGhpcy5fbW9kaWZ5Um93SGVhZGVyV2lkdGgodikpLHRoaXMucm93VXRpbHM9bmV3IGZRZSh0aGlzLmRh'@;
put 'dGFBY2Nlc3NPYmplY3QsdGhpcy53dFNldHRpbmdzKSx0aGlzLmNvbHVtblV0aWxzPW5ldyB1UWUodGhpcy5kYXRhQWNjZXNzT2JqZWN0LHRoaXMud3RTZXR0aW5ncyksdGhpcy50YWJsZVJlbmRlcmVyPW5ldyBzUWUoe1RBQkxFOnRoaXMuVEFCTEUsVEhFQUQ6dGhpcy5USEVBRCxDT0xHUk9V'@;
put 'UDp0aGlzLkNPTEdST1VQLFRCT0RZOnRoaXMuVEJPRFkscm93VXRpbHM6dGhpcy5yb3dVdGlscyxjb2x1bW5VdGlsczp0aGlzLmNvbHVtblV0aWxzLGNlbGxSZW5kZXJlcjp0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZ1B1cmUoImNlbGxSZW5kZXJlciIpLHN0eWxlc0hhbmRsZXI6dGhpcy5k'@;
put 'YXRhQWNjZXNzT2JqZWN0LnN0eWxlc0hhbmRsZXJ9KX1pcyhsKXtyZXR1cm4gdGhpcy5uYW1lPT09bH1maXhUYWJsZURvbVRyZWUoKXtjb25zdCBsPXRoaXMuZG9tQmluZGluZ3Mucm9vdERvY3VtZW50O3RoaXMuVEJPRFk9dGhpcy5UQUJMRS5xdWVyeVNlbGVjdG9yKCJ0Ym9keSIpLHRoaXMu'@;
put 'VEJPRFl8fCh0aGlzLlRCT0RZPWwuY3JlYXRlRWxlbWVudCgidGJvZHkiKSx0aGlzLlRBQkxFLmFwcGVuZENoaWxkKHRoaXMuVEJPRFkpKSx0aGlzLlRIRUFEPXRoaXMuVEFCTEUucXVlcnlTZWxlY3RvcigidGhlYWQiKSx0aGlzLlRIRUFEfHwodGhpcy5USEVBRD1sLmNyZWF0ZUVsZW1lbnQo'@;
put 'InRoZWFkIiksdGhpcy5UQUJMRS5pbnNlcnRCZWZvcmUodGhpcy5USEVBRCx0aGlzLlRCT0RZKSksdGhpcy5DT0xHUk9VUD10aGlzLlRBQkxFLnF1ZXJ5U2VsZWN0b3IoImNvbGdyb3VwIiksdGhpcy5DT0xHUk9VUHx8KHRoaXMuQ09MR1JPVVA9bC5jcmVhdGVFbGVtZW50KCJjb2xncm91cCIp'@;
put 'LHRoaXMuVEFCTEUuaW5zZXJ0QmVmb3JlKHRoaXMuQ09MR1JPVVAsdGhpcy5USEVBRCkpfWNyZWF0ZVNwcmVhZGVyKGwpe2NvbnN0IGE9bC5wYXJlbnROb2RlO2xldCBkO3JldHVybighYXx8YS5ub2RlVHlwZSE9PU5vZGUuRUxFTUVOVF9OT0RFfHwhcG8oYSwid3RIb2xkZXIiKSkmJihkPXRo'@;
put 'aXMuZG9tQmluZGluZ3Mucm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLGQuY2xhc3NOYW1lPSJ3dFNwcmVhZGVyIixhJiZhLmluc2VydEJlZm9yZShkLGwpLGQuYXBwZW5kQ2hpbGQobCkpLGQuc3R5bGUucG9zaXRpb249InJlbGF0aXZlIix0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0'@;
put 'dGluZygiYXJpYVRhZ3MiKSYmdm8oZCxbWyJyb2xlIiwicHJlc2VudGF0aW9uIl1dKSxkfWNyZWF0ZUhpZGVyKGwpe2NvbnN0IGE9bC5wYXJlbnROb2RlO2xldCBkO3JldHVybighYXx8YS5ub2RlVHlwZSE9PU5vZGUuRUxFTUVOVF9OT0RFfHwhcG8oYSwid3RIb2xkZXIiKSkmJihkPXRoaXMu'@;
put 'ZG9tQmluZGluZ3Mucm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLGQuY2xhc3NOYW1lPSJ3dEhpZGVyIixhJiZhLmluc2VydEJlZm9yZShkLGwpLGQuYXBwZW5kQ2hpbGQobCkpLHRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJhcmlhVGFncyIpJiZ2byhkLFtbInJvbGUiLCJw'@;
put 'cmVzZW50YXRpb24iXV0pLGR9Y3JlYXRlSG9sZGVyKGwpe2NvbnN0IGE9bC5wYXJlbnROb2RlO2xldCBkO3JldHVybighYXx8YS5ub2RlVHlwZSE9PU5vZGUuRUxFTUVOVF9OT0RFfHwhcG8oYSwid3RIb2xkZXIiKSkmJihkPXRoaXMuZG9tQmluZGluZ3Mucm9vdERvY3VtZW50LmNyZWF0ZUVs'@;
put 'ZW1lbnQoImRpdiIpLGQuc3R5bGUucG9zaXRpb249InJlbGF0aXZlIixkLmNsYXNzTmFtZT0id3RIb2xkZXIiLHZvKGQsW043KC0xKV0pLGEmJmEuaW5zZXJ0QmVmb3JlKGQsbCksdGhpcy5pc01hc3RlciYmKGQucGFyZW50Tm9kZS5jbGFzc05hbWUrPSJodF9tYXN0ZXIgaGFuZHNvbnRhYmxl'@;
put 'IixkLnBhcmVudE5vZGUuc2V0QXR0cmlidXRlKCJkaXIiLHRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nUHVyZSgicnRsTW9kZSIpPyJydGwiOiJsdHIiKSx0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiYXJpYVRhZ3MiKSYmdm8oZC5wYXJlbnROb2RlLFtbInJvbGUiLCJwcmVzZW50YXRp'@;
put 'b24iXV0pKSxkLmFwcGVuZENoaWxkKGwpKSx0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiYXJpYVRhZ3MiKSYmdm8oZCxbWyJyb2xlIiwicHJlc2VudGF0aW9uIl1dKSxkfWRyYXcoKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSYmYXJndW1lbnRz'@;
put 'WzBdO2NvbnN0e3d0U2V0dGluZ3M6YX09dGhpcyx7d3RPdmVybGF5czpkLHd0Vmlld3BvcnQ6aH09dGhpcy5kYXRhQWNjZXNzT2JqZWN0LGY9YS5nZXRTZXR0aW5nKCJ0b3RhbFJvd3MiKSx2PWEuZ2V0U2V0dGluZygidG90YWxDb2x1bW5zIiksTT1hLmdldFNldHRpbmcoInJvd0hlYWRlcnMi'@;
put 'KSxEPU0ubGVuZ3RoLFo9YS5nZXRTZXR0aW5nKCJjb2x1bW5IZWFkZXJzIikscmU9Wi5sZW5ndGg7bGV0IGNlPWw7aWYodGhpcy5pc01hc3RlciYmKGQuYmVmb3JlRHJhdygpLHRoaXMuaG9sZGVyT2Zmc2V0PVUwKHRoaXMuaG9sZGVyKSxjZT1oLmNyZWF0ZUNhbGN1bGF0b3JzKGNlKSxEJiYh'@;
put 'YS5nZXRTZXR0aW5nKCJmaXhlZENvbHVtbnNTdGFydCIpKSl7Y29uc3QgRWU9ZC5pbmxpbmVTdGFydE92ZXJsYXkuZ2V0U2Nyb2xsUG9zaXRpb24oKSxCZT10aGlzLmNvcnJlY3RIZWFkZXJXaWR0aDt0aGlzLmNvcnJlY3RIZWFkZXJXaWR0aD0wIT09RWUsQmUhPT10aGlzLmNvcnJlY3RIZWFk'@;
put 'ZXJXaWR0aCYmKGNlPSExKX1pZihjZSl0aGlzLmlzTWFzdGVyJiZkLnJlZnJlc2goITApO2Vsc2V7dGhpcy50YWJsZU9mZnNldD10aGlzLmlzTWFzdGVyP1UwKHRoaXMuVEFCTEUpOnRoaXMuZGF0YUFjY2Vzc09iamVjdC5wYXJlbnRUYWJsZU9mZnNldDtjb25zdCBFZT1NYXRoLm1heCh0aGlz'@;
put 'LmdldEZpcnN0UmVuZGVyZWRSb3coKSwwKSxCZT1NYXRoLm1heCh0aGlzLmdldEZpcnN0UmVuZGVyZWRDb2x1bW4oKSwwKTt0aGlzLnJvd0ZpbHRlcj1uZXcgTUplKEVlLGYscmUpLHRoaXMuY29sdW1uRmlsdGVyPW5ldyBfSmUoQmUsdixEKTtsZXQgcWU9ITA7aWYodGhpcy5pc01hc3Rlcil7'@;
put 'dGhpcy5hbGlnbk92ZXJsYXlzV2l0aFRyaW1taW5nQ29udGFpbmVyKCk7Y29uc3QgcnQ9e307dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoImJlZm9yZURyYXciLCEwLHJ0KSxxZT0hMCE9PXJ0LnNraXBSZW5kZXJ9cWUmJih0aGlzLnRhYmxlUmVuZGVyZXIuc2V0SGVhZGVyQ29udGVudFJl'@;
put 'bmRlcmVycyhNLFopLCh0aGlzLmlzKElwKXx8dGhpcy5pcyhCbSkpJiZ0aGlzLnRhYmxlUmVuZGVyZXIuc2V0SGVhZGVyQ29udGVudFJlbmRlcmVycyhNLFtdKSx0aGlzLnJlc2V0T3ZlcnNpemVkUm93cygpLHRoaXMudGFibGVSZW5kZXJlci5zZXRBY3RpdmVPdmVybGF5TmFtZSh0aGlzLm5h'@;
put 'bWUpLnNldFZpZXdwb3J0U2l6ZSh0aGlzLmdldFJlbmRlcmVkUm93c0NvdW50KCksdGhpcy5nZXRSZW5kZXJlZENvbHVtbnNDb3VudCgpKS5zZXRGaWx0ZXJzKHRoaXMucm93RmlsdGVyLHRoaXMuY29sdW1uRmlsdGVyKS5yZW5kZXIoKSx0aGlzLmlzTWFzdGVyJiZ0aGlzLm1hcmtPdmVyc2l6'@;
put 'ZWRDb2x1bW5IZWFkZXJzKCksdGhpcy5hZGp1c3RDb2x1bW5IZWFkZXJIZWlnaHRzKCksKHRoaXMuaXNNYXN0ZXJ8fHRoaXMuaXMoSXApKSYmdGhpcy5tYXJrT3ZlcnNpemVkUm93cygpLHRoaXMuaXNNYXN0ZXI/KHRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJleHRlcm5hbFJvd0NhbGN1'@;
put 'bGF0b3IiKXx8aC5jcmVhdGVWaXNpYmxlQ2FsY3VsYXRvcnMoKSxkLnJlZnJlc2goITEpLGQuYXBwbHlUb0RPTSgpLHRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJvbkRyYXciLCEwKSk6dGhpcy5pcyhJcCkmJnRoaXMuZGF0YUFjY2Vzc09iamVjdC5jbG9uZVNvdXJjZS53dE92ZXJsYXlz'@;
put 'LmFkanVzdEVsZW1lbnRzU2l6ZSgpKX1sZXQgYmU9ITE7cmV0dXJuIHRoaXMuaXNNYXN0ZXImJihiZT1kLnRvcE92ZXJsYXkucmVzZXRGaXhlZFBvc2l0aW9uKCksZC5ib3R0b21PdmVybGF5LmNsb25lJiYoYmU9ZC5ib3R0b21PdmVybGF5LnJlc2V0Rml4ZWRQb3NpdGlvbigpfHxiZSksYmU9'@;
put 'ZC5pbmxpbmVTdGFydE92ZXJsYXkucmVzZXRGaXhlZFBvc2l0aW9uKCl8fGJlLGQudG9wSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5JiZkLnRvcElubGluZVN0YXJ0Q29ybmVyT3ZlcmxheS5yZXNldEZpeGVkUG9zaXRpb24oKSxkLmJvdHRvbUlubGluZVN0YXJ0Q29ybmVyT3ZlcmxheSYmZC5i'@;
put 'b3R0b21JbmxpbmVTdGFydENvcm5lck92ZXJsYXkuY2xvbmUmJmQuYm90dG9tSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5LnJlc2V0Rml4ZWRQb3NpdGlvbigpKSxiZT8oZC5yZWZyZXNoQWxsKCksZC5hZGp1c3RFbGVtZW50c1NpemUoKSk6dGhpcy5kYXRhQWNjZXNzT2JqZWN0LnNlbGVjdGlv'@;
put 'bk1hbmFnZXIuc2V0QWN0aXZlT3ZlcmxheSh0aGlzLmZhY2FkZUdldHRlcigpKS5yZW5kZXIoY2UpLHRoaXMuaXNNYXN0ZXImJmQuYWZ0ZXJEcmF3KCksdGhpcy5kYXRhQWNjZXNzT2JqZWN0LmRyYXduPSEwLHRoaXN9bWFya0lmT3ZlcnNpemVkQ29sdW1uSGVhZGVyKGwpe2NvbnN0IGE9dGhp'@;
put 'cy5jb2x1bW5GaWx0ZXIucmVuZGVyZWRUb1NvdXJjZShsKTtsZXQgZD10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiY29sdW1uSGVhZGVycyIpLmxlbmd0aDtjb25zdCBoPXRoaXMuZGF0YUFjY2Vzc09iamVjdC5zdHlsZXNIYW5kbGVyLmdldERlZmF1bHRSb3dIZWlnaHQoKTtsZXQgZix2'@;
put 'LE07Y29uc3QgRD10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiY29sdW1uSGVhZGVySGVpZ2h0Iil8fFtdO2Zvcig7ZDspZC09MSxmPXRoaXMuZ2V0Q29sdW1uSGVhZGVySGVpZ2h0KGQpLHY9dGhpcy5nZXRDb2x1bW5IZWFkZXIoYSxkKSx2JiYoTT1vXyh2KSwoIWYmJmg8TXx8ZjxNKSYm'@;
put 'KHRoaXMuZGF0YUFjY2Vzc09iamVjdC53dFZpZXdwb3J0Lm92ZXJzaXplZENvbHVtbkhlYWRlcnNbZF09TSksQXJyYXkuaXNBcnJheShEKT9udWxsIT1EW2RdJiYodGhpcy5kYXRhQWNjZXNzT2JqZWN0Lnd0Vmlld3BvcnQub3ZlcnNpemVkQ29sdW1uSGVhZGVyc1tkXT1EW2RdKTppc05hTihE'@;
put 'KXx8KHRoaXMuZGF0YUFjY2Vzc09iamVjdC53dFZpZXdwb3J0Lm92ZXJzaXplZENvbHVtbkhlYWRlcnNbZF09RCksdGhpcy5kYXRhQWNjZXNzT2JqZWN0Lnd0Vmlld3BvcnQub3ZlcnNpemVkQ29sdW1uSGVhZGVyc1tkXTwoRFtkXXx8RCkmJih0aGlzLmRhdGFBY2Nlc3NPYmplY3Qud3RWaWV3'@;
put 'cG9ydC5vdmVyc2l6ZWRDb2x1bW5IZWFkZXJzW2RdPURbZF18fEQpKX1hZGp1c3RDb2x1bW5IZWFkZXJIZWlnaHRzKCl7Y29uc3R7d3RTZXR0aW5nczpsfT10aGlzLGE9dGhpcy5USEVBRC5jaGlsZE5vZGVzLGQ9dGhpcy5kYXRhQWNjZXNzT2JqZWN0Lnd0Vmlld3BvcnQub3ZlcnNpemVkQ29s'@;
put 'dW1uSGVhZGVycztmb3IobGV0IGY9MCx2PWwuZ2V0U2V0dGluZygiY29sdW1uSGVhZGVycyIpLmxlbmd0aDtmPHY7ZisrKWlmKGRbZl0pe2lmKCFhW2ZdfHwwPT09YVtmXS5jaGlsZE5vZGVzLmxlbmd0aClyZXR1cm47YVtmXS5jaGlsZE5vZGVzWzBdLnN0eWxlLmhlaWdodD1gJHtkW2ZdfXB4'@;
put 'YH19cmVzZXRPdmVyc2l6ZWRSb3dzKCl7Y29uc3R7d3RTZXR0aW5nczpsfT10aGlzLHt3dFZpZXdwb3J0OmF9PXRoaXMuZGF0YUFjY2Vzc09iamVjdDtpZigodGhpcy5pc01hc3Rlcnx8dGhpcy5pcyhJcCkpJiYhbC5nZXRTZXR0aW5nKCJleHRlcm5hbFJvd0NhbGN1bGF0b3IiKSl7Y29uc3Qg'@;
put 'ZD10aGlzLmdldFJlbmRlcmVkUm93c0NvdW50KCk7Zm9yKGxldCBoPTA7aDxkO2grKyl7Y29uc3QgZj10aGlzLnJvd0ZpbHRlci5yZW5kZXJlZFRvU291cmNlKGgpO2Eub3ZlcnNpemVkUm93cyYmYS5vdmVyc2l6ZWRSb3dzW2ZdJiYoYS5vdmVyc2l6ZWRSb3dzW2ZdPXZvaWQgMCl9fX1nZXRD'@;
put 'ZWxsKGwpe2xldCBhPWwucm93LGQ9bC5jb2w7Y29uc3QgaD10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygib25Nb2RpZnlHZXRDZWxsQ29vcmRzIixhLGQsIXRoaXMuaXNNYXN0ZXIsInJlbmRlciIpO2lmKGgmJkFycmF5LmlzQXJyYXkoaCkmJihbYSxkXT1oKSx0aGlzLmlzUm93QmVmb3Jl'@;
put 'UmVuZGVyZWRSb3dzKGEpKXJldHVybi0xO2lmKHRoaXMuaXNSb3dBZnRlclJlbmRlcmVkUm93cyhhKSlyZXR1cm4tMjtpZih0aGlzLmlzQ29sdW1uQmVmb3JlUmVuZGVyZWRDb2x1bW5zKGQpKXJldHVybi0zO2lmKHRoaXMuaXNDb2x1bW5BZnRlclJlbmRlcmVkQ29sdW1ucyhkKSlyZXR1cm4t'@;
put 'NDtjb25zdCBmPXRoaXMuZ2V0Um93KGEpO2lmKCFmJiZhPj0wKXRocm93IG5ldyBFcnJvcigiVFIgd2FzIGV4cGVjdGVkIHRvIGJlIHJlbmRlcmVkIGJ1dCBpcyBub3QiKTtjb25zdCB2PWYuY2hpbGROb2Rlc1t0aGlzLmNvbHVtbkZpbHRlci5zb3VyY2VDb2x1bW5Ub1Zpc2libGVSb3dIZWFk'@;
put 'ZWRDb2x1bW4oZCldO2lmKCF2JiZkPj0wKXRocm93IG5ldyBFcnJvcigiVEQgb3IgVEggd2FzIGV4cGVjdGVkIHRvIGJlIHJlbmRlcmVkIGJ1dCBpcyBub3QiKTtyZXR1cm4gdn1nZXRSb3cobCl7bGV0IGE9bnVsbCxkPW51bGw7dmFyIGgsZjtyZXR1cm4gbDwwPyhhPW51bGw9PT0oaD10aGlz'@;
put 'LnJvd0ZpbHRlcil8fHZvaWQgMD09PWg/dm9pZCAwOmguc291cmNlUm93VG9WaXNpYmxlQ29sSGVhZGVkUm93KGwpLGQ9dGhpcy5USEVBRCk6KGE9bnVsbD09PShmPXRoaXMucm93RmlsdGVyKXx8dm9pZCAwPT09Zj92b2lkIDA6Zi5zb3VyY2VUb1JlbmRlcmVkKGwpLGQ9dGhpcy5UQk9EWSks'@;
put 'dm9pZCAwIT09YSYmdm9pZCAwIT09ZCYmIShkLmNoaWxkTm9kZXMubGVuZ3RoPGErMSkmJmQuY2hpbGROb2Rlc1thXX1nZXRDb2x1bW5IZWFkZXIobCl7Y29uc3QgZD10aGlzLlRIRUFELmNoaWxkTm9kZXNbYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1l'@;
put 'bnRzWzFdOjBdO3JldHVybiBkPy5jaGlsZE5vZGVzW3RoaXMuY29sdW1uRmlsdGVyLnNvdXJjZUNvbHVtblRvVmlzaWJsZVJvd0hlYWRlZENvbHVtbihsKV19Z2V0Q29sdW1uSGVhZGVycyhsKXtjb25zdCBhPVtdLGQ9dGhpcy5jb2x1bW5GaWx0ZXIuc291cmNlQ29sdW1uVG9WaXNpYmxlUm93'@;
put 'SGVhZGVkQ29sdW1uKGwpO3JldHVybiB0aGlzLlRIRUFELmNoaWxkTm9kZXMuZm9yRWFjaChoPT57Y29uc3QgZj1oLmNoaWxkTm9kZXNbZF07ZiYmYS5wdXNoKGYpfSksYX1nZXRSb3dIZWFkZXIobCl7bGV0IGE9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJn'@;
put 'dW1lbnRzWzFdOjA7aWYoYT49dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInJvd0hlYWRlcnMiKS5sZW5ndGgpcmV0dXJuO2NvbnN0IGg9dGhpcy5yb3dGaWx0ZXIuc291cmNlVG9SZW5kZXJlZChsKSxmPWg8MD90aGlzLnJvd0ZpbHRlci5zb3VyY2VSb3dUb1Zpc2libGVDb2xIZWFkZWRS'@;
put 'b3cobCk6aCxNPShoPDA/dGhpcy5USEVBRDp0aGlzLlRCT0RZKS5jaGlsZE5vZGVzW2ZdO3JldHVybiBNPy5jaGlsZE5vZGVzW2FdfWdldFJvd0hlYWRlcnMobCl7Y29uc3QgYT1bXSxkPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJyb3dIZWFkZXJzIikubGVuZ3RoO2ZvcihsZXQgaD0w'@;
put 'O2g8ZDtoKyspe2NvbnN0IGY9dGhpcy5UQk9EWS5jaGlsZE5vZGVzW3RoaXMucm93RmlsdGVyLnNvdXJjZVRvUmVuZGVyZWQobCldLHY9Zj8uY2hpbGROb2Rlc1toXTt2JiZhLnB1c2godil9cmV0dXJuIGF9Z2V0Q29vcmRzKGwpe2xldCBhPWw7aWYoIlREIiE9PWEubm9kZU5hbWUmJiJUSCIh'@;
put 'PT1hLm5vZGVOYW1lJiYoYT1SbShhLFsiVEQiLCJUSCJdKSksbnVsbD09PWEpcmV0dXJuIG51bGw7Y29uc3QgZD1hLnBhcmVudE5vZGU7aWYoIWQpcmV0dXJuIG51bGw7Y29uc3QgaD1kLnBhcmVudE5vZGU7bGV0IGY9UDJlKGQpLHY9YS5jZWxsSW5kZXg7T20ocTcsYSx0aGlzLnd0Um9vdEVs'@;
put 'ZW1lbnQpfHxPbSgkNyxhLHRoaXMud3RSb290RWxlbWVudCk/IlRIRUFEIj09PWgubm9kZU5hbWUmJihmLT1oLmNoaWxkTm9kZXMubGVuZ3RoKTpPbShCbSxhLHRoaXMud3RSb290RWxlbWVudCl8fE9tKElwLGEsdGhpcy53dFJvb3RFbGVtZW50KT9mPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0'@;
put 'aW5nKCJ0b3RhbFJvd3MiKS1oLmNoaWxkTm9kZXMubGVuZ3RoK2Y6aD09PXRoaXMuVEhFQUQ/Zj10aGlzLnJvd0ZpbHRlci52aXNpYmxlQ29sSGVhZGVkUm93VG9Tb3VyY2VSb3coZik6dGhpcy5yb3dGaWx0ZXImJihmPXRoaXMucm93RmlsdGVyLnJlbmRlcmVkVG9Tb3VyY2UoZikpLE9tKHE3'@;
put 'LGEsdGhpcy53dFJvb3RFbGVtZW50KXx8T20oSzcsYSx0aGlzLnd0Um9vdEVsZW1lbnQpfHxPbShCbSxhLHRoaXMud3RSb290RWxlbWVudCk/dj10aGlzLmNvbHVtbkZpbHRlci5vZmZzZXR0ZWRUSCh2KTp0aGlzLmNvbHVtbkZpbHRlciYmKHY9dGhpcy5jb2x1bW5GaWx0ZXIudmlzaWJsZVJv'@;
put 'd0hlYWRlZENvbHVtblRvU291cmNlQ29sdW1uKHYpKTtjb25zdCBNPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJvbk1vZGlmeUdldENvb3Jkc0VsZW1lbnQiLGYsdik7cmV0dXJuIE0mJkFycmF5LmlzQXJyYXkoTSkmJihbZix2XT1NKSx0aGlzLndvdC5jcmVhdGVDZWxsQ29vcmRzKGYs'@;
put 'dil9bWFya092ZXJzaXplZFJvd3MoKXtpZih0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiZXh0ZXJuYWxSb3dDYWxjdWxhdG9yIikpcmV0dXJuO2xldCBsPXRoaXMuVEJPRFkuY2hpbGROb2Rlcy5sZW5ndGg7Y29uc3QgYT1sKnRoaXMuZGF0YUFjY2Vzc09iamVjdC5zdHlsZXNIYW5kbGVy'@;
put 'LmdldERlZmF1bHRSb3dIZWlnaHQoKSxkPW9fKHRoaXMuVEJPRFkpLTEsaD10aGlzLndvdC5zdHlsZXNIYW5kbGVyLmFyZUNlbGxzQm9yZGVyQm94KCksZj1oP3h1Om9fLHY9aD8wOjEsTT1oPzE6MDtsZXQgRCxaLHJlLGNlLGJlO2lmKGEhPT1kfHx0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGlu'@;
put 'ZygiZml4ZWRSb3dzQm90dG9tIikpZm9yKDtsOyl7bC09MSxyZT10aGlzLnJvd0ZpbHRlci5yZW5kZXJlZFRvU291cmNlKGwpLEQ9dGhpcy5nZXRSb3dIZWlnaHQocmUpLGNlPXRoaXMuZ2V0VHJGb3JSb3cocmUpLGJlPWNlLnF1ZXJ5U2VsZWN0b3IoInRoIik7Y29uc3QgRWU9MD09PXJlP006'@;
put 'MDtaPWJlP2YoYmUpOmYoY2UpLXYsKCFEJiZ0aGlzLmRhdGFBY2Nlc3NPYmplY3Quc3R5bGVzSGFuZGxlci5nZXREZWZhdWx0Um93SGVpZ2h0KCk8Wi1FZXx8RDxaKSYmKGh8fChaKz0xKSx0aGlzLmRhdGFBY2Nlc3NPYmplY3Qud3RWaWV3cG9ydC5vdmVyc2l6ZWRSb3dzW3JlXT1aKX19Z2V0'@;
put 'VHJGb3JSb3cobCl7cmV0dXJuIHRoaXMuVEJPRFkuY2hpbGROb2Rlc1t0aGlzLnJvd0ZpbHRlci5zb3VyY2VUb1JlbmRlcmVkKGwpXX1pc0NvbHVtbkhlYWRlclJlbmRlcmVkKGwpe2lmKGw+PTApcmV0dXJuITE7Y29uc3QgZD10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygicm93SGVhZGVy'@;
put 'cyIpLmxlbmd0aDtyZXR1cm4gTWF0aC5hYnMobCk8PWR9aXNSb3dIZWFkZXJSZW5kZXJlZChsKXtpZihsPj0wKXJldHVybiExO2NvbnN0IGQ9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoImNvbHVtbkhlYWRlcnMiKS5sZW5ndGg7cmV0dXJuIE1hdGguYWJzKGwpPD1kfWlzUm93QmVmb3Jl'@;
put 'UmVuZGVyZWRSb3dzKGwpe2NvbnN0IGE9dGhpcy5nZXRGaXJzdFJlbmRlcmVkUm93KCk7cmV0dXJuIGw8MCYmYTw9MD8hdGhpcy5pc1Jvd0hlYWRlclJlbmRlcmVkKGwpOmw8YX1pc1Jvd0FmdGVyUmVuZGVyZWRSb3dzKGwpe3JldHVybiBsPnRoaXMuZ2V0TGFzdFJlbmRlcmVkUm93KCl9aXND'@;
put 'b2x1bW5CZWZvcmVSZW5kZXJlZENvbHVtbnMobCl7Y29uc3QgYT10aGlzLmdldEZpcnN0UmVuZGVyZWRDb2x1bW4oKTtyZXR1cm4gbDwwJiZhPD0wPyF0aGlzLmlzQ29sdW1uSGVhZGVyUmVuZGVyZWQobCk6bDxhfWlzQ29sdW1uQWZ0ZXJSZW5kZXJlZENvbHVtbnMobCl7cmV0dXJuIHRoaXMu'@;
put 'Y29sdW1uRmlsdGVyJiZsPnRoaXMuZ2V0TGFzdFJlbmRlcmVkQ29sdW1uKCl9aXNDb2x1bW5BZnRlclZpZXdwb3J0KGwpe3JldHVybiB0aGlzLmNvbHVtbkZpbHRlciYmbD50aGlzLmdldExhc3RWaXNpYmxlQ29sdW1uKCl9aXNSb3dBZnRlclZpZXdwb3J0KGwpe3JldHVybiB0aGlzLnJvd0Zp'@;
put 'bHRlciYmbD50aGlzLmdldExhc3RWaXNpYmxlUm93KCl9aXNDb2x1bW5CZWZvcmVWaWV3cG9ydChsKXtyZXR1cm4gdGhpcy5jb2x1bW5GaWx0ZXImJnRoaXMuY29sdW1uRmlsdGVyLnNvdXJjZVRvUmVuZGVyZWQobCk8MCYmbD49MH1pc0xhc3RSb3dGdWxseVZpc2libGUoKXtyZXR1cm4gdGhp'@;
put 'cy5nZXRMYXN0VmlzaWJsZVJvdygpPT09dGhpcy5nZXRMYXN0UmVuZGVyZWRSb3coKX1pc0xhc3RDb2x1bW5GdWxseVZpc2libGUoKXtyZXR1cm4gdGhpcy5nZXRMYXN0VmlzaWJsZUNvbHVtbigpPT09dGhpcy5nZXRMYXN0UmVuZGVyZWRDb2x1bW4oKX1hbGxSb3dzSW5WaWV3cG9ydCgpe3Jl'@;
put 'dHVybiB0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygidG90YWxSb3dzIik9PT10aGlzLmdldFZpc2libGVSb3dzQ291bnQoKX1hbGxDb2x1bW5zSW5WaWV3cG9ydCgpe3JldHVybiB0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygidG90YWxDb2x1bW5zIik9PT10aGlzLmdldFZpc2libGVD'@;
put 'b2x1bW5zQ291bnQoKX1nZXRSb3dIZWlnaHQobCl7cmV0dXJuIHRoaXMucm93VXRpbHMuZ2V0SGVpZ2h0KGwpfWdldENvbHVtbkhlYWRlckhlaWdodChsKXtyZXR1cm4gdGhpcy5jb2x1bW5VdGlscy5nZXRIZWFkZXJIZWlnaHQobCl9Z2V0Q29sdW1uV2lkdGgobCl7cmV0dXJuIHRoaXMuY29s'@;
put 'dW1uVXRpbHMuZ2V0V2lkdGgobCl9aGFzRGVmaW5lZFNpemUoKXtyZXR1cm4gdGhpcy5oYXNUYWJsZUhlaWdodCYmdGhpcy5oYXNUYWJsZVdpZHRofWdldFdpZHRoKCl7cmV0dXJuIHN1KHRoaXMuVEFCTEUpfWdldEhlaWdodCgpe3JldHVybiB4dSh0aGlzLlRBQkxFKX1nZXRUb3RhbFdpZHRo'@;
put 'KCl7Y29uc3QgbD1zdSh0aGlzLmhpZGVyKTtyZXR1cm4gMCE9PWw/bDp0aGlzLmdldFdpZHRoKCl9Z2V0VG90YWxIZWlnaHQoKXtjb25zdCBsPXh1KHRoaXMuaGlkZXIpO3JldHVybiAwIT09bD9sOnRoaXMuZ2V0SGVpZ2h0KCl9aXNWaXNpYmxlKCl7cmV0dXJuIFU3KHRoaXMuVEFCTEUpfV9t'@;
put 'b2RpZnlSb3dIZWFkZXJXaWR0aChsKXtsZXQgYT1tbChsKT9sKCk6bnVsbDtyZXR1cm4gQXJyYXkuaXNBcnJheShhKT8oYT1bLi4uYV0sYVthLmxlbmd0aC0xXT10aGlzLl9jb3JyZWN0Um93SGVhZGVyV2lkdGgoYVthLmxlbmd0aC0xXSkpOmE9dGhpcy5fY29ycmVjdFJvd0hlYWRlcldpZHRo'@;
put 'KGEpLGF9X2NvcnJlY3RSb3dIZWFkZXJXaWR0aChsKXtsZXQgYT1sO3JldHVybiJudW1iZXIiIT10eXBlb2YgbCYmKGE9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoImRlZmF1bHRDb2x1bW5XaWR0aCIpKSx0aGlzLmNvcnJlY3RIZWFkZXJXaWR0aCYmKGErPTEpLGF9fSxOZmU9e2dldEZp'@;
put 'cnN0UmVuZGVyZWRSb3coKXtyZXR1cm4gMD09PXRoaXMuZ2V0UmVuZGVyZWRSb3dzQ291bnQoKT8tMTowfSxnZXRGaXJzdFZpc2libGVSb3coKXtyZXR1cm4gdGhpcy5nZXRGaXJzdFJlbmRlcmVkUm93KCl9LGdldEZpcnN0UGFydGlhbGx5VmlzaWJsZVJvdygpe3JldHVybiB0aGlzLmdldEZp'@;
put 'cnN0UmVuZGVyZWRSb3coKX0sZ2V0TGFzdFJlbmRlcmVkUm93KCl7cmV0dXJuIHRoaXMuZ2V0UmVuZGVyZWRSb3dzQ291bnQoKS0xfSxnZXRMYXN0VmlzaWJsZVJvdygpe3JldHVybiB0aGlzLmdldExhc3RSZW5kZXJlZFJvdygpfSxnZXRMYXN0UGFydGlhbGx5VmlzaWJsZVJvdygpe3JldHVy'@;
put 'biB0aGlzLmdldExhc3RSZW5kZXJlZFJvdygpfSxnZXRSZW5kZXJlZFJvd3NDb3VudCgpe3JldHVybiBNYXRoLm1pbih0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygidG90YWxSb3dzIiksdGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoImZpeGVkUm93c1RvcCIpKX0sZ2V0VmlzaWJsZVJv'@;
put 'd3NDb3VudCgpe3JldHVybiB0aGlzLmdldFJlbmRlcmVkUm93c0NvdW50KCl9LGdldENvbHVtbkhlYWRlcnNDb3VudCgpe3JldHVybiB0aGlzLmRhdGFBY2Nlc3NPYmplY3QuY29sdW1uSGVhZGVycy5sZW5ndGh9fTtUcChOZmUsIk1JWElOX05BTUUiLCJzdGlja3lSb3dzVG9wIix7d3JpdGFi'@;
put 'bGU6ITEsZW51bWVyYWJsZTohMX0pO2NvbnN0IFZmZT1OZmUsQmZlPXtnZXRGaXJzdFJlbmRlcmVkQ29sdW1uKCl7Y29uc3QgYz10aGlzLmRhdGFBY2Nlc3NPYmplY3Quc3RhcnRDb2x1bW5SZW5kZXJlZDtyZXR1cm4gbnVsbD09PWM/LTE6Y30sZ2V0Rmlyc3RWaXNpYmxlQ29sdW1uKCl7Y29u'@;
put 'c3QgYz10aGlzLmRhdGFBY2Nlc3NPYmplY3Quc3RhcnRDb2x1bW5WaXNpYmxlO3JldHVybiBudWxsPT09Yz8tMTpjfSxnZXRGaXJzdFBhcnRpYWxseVZpc2libGVDb2x1bW4oKXtjb25zdCBjPXRoaXMuZGF0YUFjY2Vzc09iamVjdC5zdGFydENvbHVtblBhcnRpYWxseVZpc2libGU7cmV0dXJu'@;
put 'IG51bGw9PT1jPy0xOmN9LGdldExhc3RSZW5kZXJlZENvbHVtbigpe2NvbnN0IGM9dGhpcy5kYXRhQWNjZXNzT2JqZWN0LmVuZENvbHVtblJlbmRlcmVkO3JldHVybiBudWxsPT09Yz8tMTpjfSxnZXRMYXN0VmlzaWJsZUNvbHVtbigpe2NvbnN0IGM9dGhpcy5kYXRhQWNjZXNzT2JqZWN0LmVu'@;
put 'ZENvbHVtblZpc2libGU7cmV0dXJuIG51bGw9PT1jPy0xOmN9LGdldExhc3RQYXJ0aWFsbHlWaXNpYmxlQ29sdW1uKCl7Y29uc3QgYz10aGlzLmRhdGFBY2Nlc3NPYmplY3QuZW5kQ29sdW1uUGFydGlhbGx5VmlzaWJsZTtyZXR1cm4gbnVsbD09PWM/LTE6Y30sZ2V0UmVuZGVyZWRDb2x1bW5z'@;
put 'Q291bnQoKXtyZXR1cm4gdGhpcy5kYXRhQWNjZXNzT2JqZWN0LmNvdW50Q29sdW1uc1JlbmRlcmVkfSxnZXRWaXNpYmxlQ29sdW1uc0NvdW50KCl7cmV0dXJuIHRoaXMuZGF0YUFjY2Vzc09iamVjdC5jb3VudENvbHVtbnNWaXNpYmxlfSxnZXRSb3dIZWFkZXJzQ291bnQoKXtyZXR1cm4gdGhp'@;
put 'cy5kYXRhQWNjZXNzT2JqZWN0LnJvd0hlYWRlcnMubGVuZ3RofX07VHAoQmZlLCJNSVhJTl9OQU1FIiwiY2FsY3VsYXRlZENvbHVtbnMiLHt3cml0YWJsZTohMSxlbnVtZXJhYmxlOiExfSk7Y29uc3QgZEs9QmZlO2NsYXNzIGhLIGV4dGVuZHMgbV97Y29uc3RydWN0b3IobCxhLGQsaCl7c3Vw'@;
put 'ZXIobCxhLGQsaCwkNyl9fVRsKGhLLFZmZSksVGwoaEssZEspO2NvbnN0IF9RZT1oSztmdW5jdGlvbiBuUChjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0'@;
put 'ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9dmFyIFBFPW5ldyBXZWFrU2V0O2Z1bmN0aW9uIGpmZShjKXtjb25zdHt3dFNldHRpbmdzOmwsaW5saW5lU3RhcnRPdmVybGF5OmEsd3RUYWJsZTpkLHd0Vmlld3BvcnQ6aCx0b3RhbENvbHVtbnM6Zixyb290V2luZG93'@;
put 'OnZ9PXRoaXMuZGF0YUFjY2Vzc09iamVjdDtpZihhLm1haW5UYWJsZVNjcm9sbGFibGVFbGVtZW50PT09dil7bGV0IEQ9bnVsbDtpZihsLmdldFNldHRpbmcoInJ0bE1vZGUiKSl7Y29uc3QgcmU9ZC5UQUJMRS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtEPU1hdGguYWJzKHJlLnJpZ2h0LXRo'@;
put 'aXMuZGF0YUFjY2Vzc09iamVjdC5yb290V2luZG93LmRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5vZmZzZXRXaWR0aCl9ZWxzZSBEPVUwKGQud3RSb290RWxlbWVudCkubGVmdDtjb25zdCBaPU1hdGguYWJzKHckKHYsdikpO2lmKEQ+Wil7Y29uc3QgcmU9QyQodik7bGV0IGNlPWguZ2V0Um93'@;
put 'SGVhZGVyV2lkdGgoKTtmb3IobGV0IGJlPTE7YmU8PWY7YmUrKylpZihjZSs9YS5zdW1DZWxsU2l6ZXMoYmUtMSxiZSksRCtjZS1aPj1yZSl7Yz1iZS0yO2JyZWFrfX19cmV0dXJuIGN9ZnVuY3Rpb24gemZlKGMpe2NvbnN0e3RvcE92ZXJsYXk6bCx3dFRhYmxlOmEsd3RWaWV3cG9ydDpkLHRv'@;
put 'dGFsUm93czpoLHJvb3RXaW5kb3c6Zn09dGhpcy5kYXRhQWNjZXNzT2JqZWN0O2lmKGwubWFpblRhYmxlU2Nyb2xsYWJsZUVsZW1lbnQ9PT1mKXtjb25zdCB2PVUwKGEud3RSb290RWxlbWVudCksTT1PTyhmLGYpO2lmKHYudG9wPk0pe2NvbnN0IEQ9b18oZik7bGV0IFo9ZC5nZXRDb2x1bW5I'@;
put 'ZWFkZXJIZWlnaHQoKTtmb3IobGV0IHJlPTE7cmU8PWg7cmUrKylpZihaKz1sLnN1bUNlbGxTaXplcyhyZS0xLHJlKSx2LnRvcCtaLU0+PUQpe2M9cmUtMjticmVha319fXJldHVybiBjfWNvbnN0IFRRZT1jbGFzcyBFUWV7Y29uc3RydWN0b3IobCl7KGZ1bmN0aW9uIHdRZShjLGwpeyhmdW5j'@;
put 'dGlvbiBDUWUoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfSkoYyxsKSxsLmFkZChjKX0pKHRoaXMsUEUpLGZ1bmN0aW9uIFNRZShjLGwsYSl7cmV0dXJu'@;
put 'KGw9ZnVuY3Rpb24gTVFlKGMpe3ZhciBsPWZ1bmN0aW9uIHhRZShjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5'@;
put 'cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsi'@;
put 'In0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9KHRoaXMsImRhdGFBY2Nlc3NPYmplY3QiLHZvaWQgMCksdGhpcy5kYXRhQWNjZXNzT2JqZWN0PWx9c2Nyb2xsVmll'@;
put 'd3BvcnQobCxhLGQpe2lmKGwuY29sPDB8fGwucm93PDApcmV0dXJuITE7Y29uc3QgaD10aGlzLnNjcm9sbFZpZXdwb3J0SG9yaXpvbnRhbGx5KGwuY29sLGEpLGY9dGhpcy5zY3JvbGxWaWV3cG9ydFZlcnRpY2FsbHkobC5yb3csZCk7cmV0dXJuIGh8fGZ9c2Nyb2xsVmlld3BvcnRIb3Jpem9u'@;
put 'dGFsbHkobCl7bGV0IGE9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOiJhdXRvIjtjb25zdHtkcmF3bjpkLHRvdGFsQ29sdW1uczpofT10aGlzLmRhdGFBY2Nlc3NPYmplY3Q7aWYoIWQpcmV0dXJuITE7Y29uc3QgZj1GZChhKTtpZihsPXRo'@;
put 'aXMuZGF0YUFjY2Vzc09iamVjdC53dFNldHRpbmdzLmdldFNldHRpbmcoIm9uQmVmb3JlVmlld3BvcnRTY3JvbGxIb3Jpem9udGFsbHkiLGwsZiksIU51bWJlci5pc0ludGVnZXIobCl8fGw8MHx8bD5oKXJldHVybiExO2E9Zi52YWx1ZTtjb25zdHtmaXhlZENvbHVtbnNTdGFydDp2LGlubGlu'@;
put 'ZVN0YXJ0T3ZlcmxheTpNfT10aGlzLmRhdGFBY2Nlc3NPYmplY3QsRD0iYXV0byI9PT1hO2lmKEQmJmw8dilyZXR1cm4hMTtjb25zdCBaPXRoaXMuZ2V0Rmlyc3RWaXNpYmxlQ29sdW1uKCkscmU9dGhpcy5nZXRMYXN0VmlzaWJsZUNvbHVtbigpO2xldCBjZT0hMTtyZXR1cm4oRCYmKGw8Wnx8'@;
put 'bD5yZSl8fCFEKSYmKGNlPU0uc2Nyb2xsVG8obCxEP2w+PXRoaXMuZ2V0TGFzdFBhcnRpYWxseVZpc2libGVDb2x1bW4oKToiZW5kIj09PWEpKSxjZX1zY3JvbGxWaWV3cG9ydFZlcnRpY2FsbHkobCl7bGV0IGE9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJn'@;
put 'dW1lbnRzWzFdOiJhdXRvIjtjb25zdHtkcmF3bjpkLHRvdGFsUm93czpofT10aGlzLmRhdGFBY2Nlc3NPYmplY3Q7aWYoIWQpcmV0dXJuITE7Y29uc3QgZj1GZChhKTtpZihsPXRoaXMuZGF0YUFjY2Vzc09iamVjdC53dFNldHRpbmdzLmdldFNldHRpbmcoIm9uQmVmb3JlVmlld3BvcnRTY3Jv'@;
put 'bGxWZXJ0aWNhbGx5IixsLGYpLCFOdW1iZXIuaXNJbnRlZ2VyKGwpfHxsPDB8fGw+aClyZXR1cm4hMTthPWYudmFsdWU7Y29uc3R7Zml4ZWRSb3dzQm90dG9tOnYsZml4ZWRSb3dzVG9wOk0sdG9wT3ZlcmxheTpEfT10aGlzLmRhdGFBY2Nlc3NPYmplY3QsWj0iYXV0byI9PT1hO2lmKFomJihs'@;
put 'PE18fGw+aC12LTEpKXJldHVybiExO2NvbnN0IHJlPXRoaXMuZ2V0Rmlyc3RWaXNpYmxlUm93KCksY2U9dGhpcy5nZXRMYXN0VmlzaWJsZVJvdygpO2xldCBiZT0hMTtyZXR1cm4oWiYmKGw8cmV8fGw+Y2UpfHwhWikmJihiZT1ELnNjcm9sbFRvKGwsWj9sPj10aGlzLmdldExhc3RQYXJ0aWFs'@;
put 'bHlWaXNpYmxlUm93KCk6ImJvdHRvbSI9PT1hKSksYmV9Z2V0Rmlyc3RWaXNpYmxlUm93KCl7cmV0dXJuIHRoaXMuZGF0YUFjY2Vzc09iamVjdC53dFRhYmxlLmdldEZpcnN0VmlzaWJsZVJvdygpfWdldExhc3RWaXNpYmxlUm93KCl7cmV0dXJuIG5QKFBFLHRoaXMsemZlKS5jYWxsKHRoaXMs'@;
put 'dGhpcy5kYXRhQWNjZXNzT2JqZWN0Lnd0VGFibGUuZ2V0TGFzdFZpc2libGVSb3coKSl9Z2V0Rmlyc3RQYXJ0aWFsbHlWaXNpYmxlUm93KCl7cmV0dXJuIHRoaXMuZGF0YUFjY2Vzc09iamVjdC53dFRhYmxlLmdldEZpcnN0UGFydGlhbGx5VmlzaWJsZVJvdygpfWdldExhc3RQYXJ0aWFsbHlW'@;
put 'aXNpYmxlUm93KCl7cmV0dXJuIG5QKFBFLHRoaXMsemZlKS5jYWxsKHRoaXMsdGhpcy5kYXRhQWNjZXNzT2JqZWN0Lnd0VGFibGUuZ2V0TGFzdFBhcnRpYWxseVZpc2libGVSb3coKSl9Z2V0Rmlyc3RWaXNpYmxlQ29sdW1uKCl7cmV0dXJuIHRoaXMuZGF0YUFjY2Vzc09iamVjdC53dFRhYmxl'@;
put 'LmdldEZpcnN0VmlzaWJsZUNvbHVtbigpfWdldExhc3RWaXNpYmxlQ29sdW1uKCl7cmV0dXJuIG5QKFBFLHRoaXMsamZlKS5jYWxsKHRoaXMsdGhpcy5kYXRhQWNjZXNzT2JqZWN0Lnd0VGFibGUuZ2V0TGFzdFZpc2libGVDb2x1bW4oKSl9Z2V0Rmlyc3RQYXJ0aWFsbHlWaXNpYmxlQ29sdW1u'@;
put 'KCl7cmV0dXJuIHRoaXMuZGF0YUFjY2Vzc09iamVjdC53dFRhYmxlLmdldEZpcnN0UGFydGlhbGx5VmlzaWJsZUNvbHVtbigpfWdldExhc3RQYXJ0aWFsbHlWaXNpYmxlQ29sdW1uKCl7cmV0dXJuIG5QKFBFLHRoaXMsamZlKS5jYWxsKHRoaXMsdGhpcy5kYXRhQWNjZXNzT2JqZWN0Lnd0VGFi'@;
put 'bGUuZ2V0TGFzdFBhcnRpYWxseVZpc2libGVDb2x1bW4oKSl9fTtmdW5jdGlvbiBVZmUoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIERRZShjKXt2YXIgbD1mdW5jdGlvbiBJUWUoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0'@;
put 'aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09'@;
put 'PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWZ1'@;
put 'bmN0aW9uIHZfKGMsbCl7cmV0dXJuIGMuZ2V0KFdmZShjLGwpKX1mdW5jdGlvbiBaZmUoYyxsLGEpe3JldHVybiBjLnNldChXZmUoYyxsKSxhKSxhfWZ1bmN0aW9uIFdmZShjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5n'@;
put 'dGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9dmFyIF9nPW5ldyBXZWFrTWFwO2NsYXNzIHJQe2NvbnN0cnVjdG9yKGwsYSl7bGV0IGQ9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVu'@;
put 'dHNbMl0mJmFyZ3VtZW50c1syXTtVZmUodGhpcywicm93IixudWxsKSxVZmUodGhpcywiY29sIixudWxsKSxmdW5jdGlvbiBBUWUoYyxsLGEpeyhmdW5jdGlvbiBrUWUoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2'@;
put 'YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfSkoYyxsKSxsLnNldChjLGEpfSh0aGlzLF9nLCExKSxaZmUoX2csdGhpcyxkKSx0eXBlb2YgbDwidSImJnR5cGVvZiBhPCJ1IiYmKHRoaXMucm93PWwsdGhpcy5jb2w9YSl9aXNWYWxpZChsKXtjb25zdHtjb3VudFJvd3M6YSxjb3Vu'@;
put 'dENvbHM6ZCxjb3VudFJvd0hlYWRlcnM6aCxjb3VudENvbEhlYWRlcnM6Zn09e2NvdW50Um93czowLGNvdW50Q29sczowLGNvdW50Um93SGVhZGVyczowLGNvdW50Q29sSGVhZGVyczowLC4uLmx9O3JldHVybiEoIU51bWJlci5pc0ludGVnZXIodGhpcy5yb3cpfHwhTnVtYmVyLmlzSW50ZWdl'@;
put 'cih0aGlzLmNvbCl8fHRoaXMucm93PC1mfHx0aGlzLmNvbDwtaHx8dGhpcy5yb3c+PWF8fHRoaXMuY29sPj1kKX1pc0VxdWFsKGwpe3JldHVybiBsPT09dGhpc3x8dGhpcy5yb3c9PT1sLnJvdyYmdGhpcy5jb2w9PT1sLmNvbH1pc0hlYWRlcigpe3JldHVybiF0aGlzLmlzQ2VsbCgpfWlzQ2Vs'@;
put 'bCgpe3JldHVybiB0aGlzLnJvdz49MCYmdGhpcy5jb2w+PTB9aXNSdGwoKXtyZXR1cm4gdl8oX2csdGhpcyl9aXNTb3V0aEVhc3RPZihsKXtyZXR1cm4gdGhpcy5yb3c+PWwucm93JiYodl8oX2csdGhpcyk/dGhpcy5jb2w8PWwuY29sOnRoaXMuY29sPj1sLmNvbCl9aXNOb3J0aFdlc3RPZihs'@;
put 'KXtyZXR1cm4gdGhpcy5yb3c8PWwucm93JiYodl8oX2csdGhpcyk/dGhpcy5jb2w+PWwuY29sOnRoaXMuY29sPD1sLmNvbCl9aXNTb3V0aFdlc3RPZihsKXtyZXR1cm4gdGhpcy5yb3c+PWwucm93JiYodl8oX2csdGhpcyk/dGhpcy5jb2w+PWwuY29sOnRoaXMuY29sPD1sLmNvbCl9aXNOb3J0'@;
put 'aEVhc3RPZihsKXtyZXR1cm4gdGhpcy5yb3c8PWwucm93JiYodl8oX2csdGhpcyk/dGhpcy5jb2w8PWwuY29sOnRoaXMuY29sPj1sLmNvbCl9bm9ybWFsaXplKCl7cmV0dXJuIHRoaXMucm93PW51bGw9PT10aGlzLnJvdz90aGlzLnJvdzpNYXRoLm1heCh0aGlzLnJvdywwKSx0aGlzLmNvbD1u'@;
put 'dWxsPT09dGhpcy5jb2w/dGhpcy5jb2w6TWF0aC5tYXgodGhpcy5jb2wsMCksdGhpc31hc3NpZ24obCl7cmV0dXJuIE51bWJlci5pc0ludGVnZXIobD8ucm93KSYmKHRoaXMucm93PWwucm93KSxOdW1iZXIuaXNJbnRlZ2VyKGw/LmNvbCkmJih0aGlzLmNvbD1sLmNvbCksbCBpbnN0YW5jZW9m'@;
put 'IHJQJiZaZmUoX2csdGhpcyxsLmlzUnRsKCkpLHRoaXN9Y2xvbmUoKXtyZXR1cm4gbmV3IHJQKHRoaXMucm93LHRoaXMuY29sLHZfKF9nLHRoaXMpKX10b09iamVjdCgpe3JldHVybntyb3c6dGhpcy5yb3csY29sOnRoaXMuY29sfX19Y29uc3QgaVA9clA7ZnVuY3Rpb24gZksoYyxsLGEpe3Jl'@;
put 'dHVybihsPWZ1bmN0aW9uIE9RZShjKXt2YXIgbD1mdW5jdGlvbiBQUWUoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3Qi'@;
put 'IT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9s'@;
put 'OmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWZ1bmN0aW9uIFUyKGMsbCl7cmV0dXJuIGMuZ2V0KFlmZShjLGwpKX1mdW5jdGlvbiBZZmUoYyxsLGEpe2lm'@;
put 'KCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfXZhciBOZD1uZXcgV2Vha01hcDtjbGFzcyBwS3tj'@;
put 'b25zdHJ1Y3RvcihsKXtsZXQgYT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06bCxkPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTpsLGg9YXJndW1lbnRzLmxlbmd0aD4zJiZ2b2lkIDAh'@;
put 'PT1hcmd1bWVudHNbM10mJmFyZ3VtZW50c1szXTtmSyh0aGlzLCJoaWdobGlnaHQiLG51bGwpLGZLKHRoaXMsImZyb20iLG51bGwpLGZLKHRoaXMsInRvIixudWxsKSxmdW5jdGlvbiBSUWUoYyxsLGEpeyhmdW5jdGlvbiBMUWUoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9y'@;
put 'KCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfSkoYyxsKSxsLnNldChjLGEpfSh0aGlzLE5kLCExKSx0aGlzLmhpZ2hsaWdodD1sLmNsb25lKCksdGhpcy5mcm9tPWEuY2xvbmUoKSx0aGlzLnRvPWQuY2xvbmUoKSxmdW5j'@;
put 'dGlvbiBGUWUoYyxsLGEpe2Muc2V0KFlmZShjLGwpLGEpfShOZCx0aGlzLGgpfXNldEhpZ2hsaWdodChsKXtyZXR1cm4gdGhpcy5oaWdobGlnaHQ9bC5jbG9uZSgpLHRoaXN9c2V0RnJvbShsKXtyZXR1cm4gdGhpcy5mcm9tPWwuY2xvbmUoKSx0aGlzfXNldFRvKGwpe3JldHVybiB0aGlzLnRv'@;
put 'PWwuY2xvbmUoKSx0aGlzfW5vcm1hbGl6ZSgpe3JldHVybiB0aGlzLmhpZ2hsaWdodC5ub3JtYWxpemUoKSx0aGlzLmZyb20ubm9ybWFsaXplKCksdGhpcy50by5ub3JtYWxpemUoKSx0aGlzfWlzVmFsaWQobCl7cmV0dXJuIHRoaXMuZnJvbS5pc1ZhbGlkKGwpJiZ0aGlzLnRvLmlzVmFsaWQo'@;
put 'bCl9aXNTaW5nbGUoKXtyZXR1cm4gdGhpcy5pc1NpbmdsZUNlbGwoKXx8dGhpcy5pc1NpbmdsZUhlYWRlcigpfWlzU2luZ2xlQ2VsbCgpe3JldHVybiB0aGlzLmZyb20ucm93Pj0wJiZ0aGlzLmZyb20ucm93PT09dGhpcy50by5yb3cmJnRoaXMuZnJvbS5jb2w+PTAmJnRoaXMuZnJvbS5jb2w9'@;
put 'PT10aGlzLnRvLmNvbH1pc1NpbmdsZUhlYWRlcigpe3JldHVybih0aGlzLmZyb20ucm93PDB8fHRoaXMuZnJvbS5jb2w8MCkmJnRoaXMuZnJvbS5yb3c9PT10aGlzLnRvLnJvdyYmdGhpcy5mcm9tLmNvbD09PXRoaXMudG8uY29sfWlzSGVhZGVyKCl7cmV0dXJuISghdGhpcy5mcm9tLmlzSGVh'@;
put 'ZGVyKCl8fCF0aGlzLnRvLmlzSGVhZGVyKCkpfHx0aGlzLmZyb20uY29sPDAmJnRoaXMudG8uY29sPDB8fHRoaXMuZnJvbS5yb3c8MCYmdGhpcy50by5yb3c8MH1jb250YWluc0hlYWRlcnMoKXtyZXR1cm4gdGhpcy5mcm9tLmlzSGVhZGVyKCl8fHRoaXMudG8uaXNIZWFkZXIoKX1nZXRPdXRl'@;
put 'ckhlaWdodCgpe3JldHVybiBNYXRoLm1heCh0aGlzLmZyb20ucm93LHRoaXMudG8ucm93KS1NYXRoLm1pbih0aGlzLmZyb20ucm93LHRoaXMudG8ucm93KSsxfWdldE91dGVyV2lkdGgoKXtyZXR1cm4gTWF0aC5tYXgodGhpcy5mcm9tLmNvbCx0aGlzLnRvLmNvbCktTWF0aC5taW4odGhpcy5m'@;
put 'cm9tLmNvbCx0aGlzLnRvLmNvbCkrMX1nZXRIZWlnaHQoKXtpZih0aGlzLmZyb20ucm93PDAmJnRoaXMudG8ucm93PDApcmV0dXJuIDA7Y29uc3QgbD1NYXRoLm1heCh0aGlzLmZyb20ucm93LDApLGE9TWF0aC5tYXgodGhpcy50by5yb3csMCk7cmV0dXJuIE1hdGgubWF4KGwsYSktTWF0aC5t'@;
put 'aW4obCxhKSsxfWdldFdpZHRoKCl7aWYodGhpcy5mcm9tLmNvbDwwJiZ0aGlzLnRvLmNvbDwwKXJldHVybiAwO2NvbnN0IGw9TWF0aC5tYXgodGhpcy5mcm9tLmNvbCwwKSxhPU1hdGgubWF4KHRoaXMudG8uY29sLDApO3JldHVybiBNYXRoLm1heChsLGEpLU1hdGgubWluKGwsYSkrMX1nZXRD'@;
put 'ZWxsc0NvdW50KCl7cmV0dXJuIHRoaXMuZ2V0V2lkdGgoKSp0aGlzLmdldEhlaWdodCgpfWluY2x1ZGVzKGwpe2NvbnN0e3JvdzphLGNvbDpkfT1sLGg9dGhpcy5nZXRPdXRlclRvcFN0YXJ0Q29ybmVyKCksZj10aGlzLmdldE91dGVyQm90dG9tRW5kQ29ybmVyKCk7cmV0dXJuIGgucm93PD1h'@;
put 'JiZmLnJvdz49YSYmaC5jb2w8PWQmJmYuY29sPj1kfWluY2x1ZGVzUmFuZ2UobCl7cmV0dXJuIHRoaXMuaW5jbHVkZXMobC5nZXRPdXRlclRvcFN0YXJ0Q29ybmVyKCkpJiZ0aGlzLmluY2x1ZGVzKGwuZ2V0T3V0ZXJCb3R0b21FbmRDb3JuZXIoKSl9aXNFcXVhbChsKXtyZXR1cm4gTWF0aC5t'@;
put 'aW4odGhpcy5mcm9tLnJvdyx0aGlzLnRvLnJvdyk9PT1NYXRoLm1pbihsLmZyb20ucm93LGwudG8ucm93KSYmTWF0aC5tYXgodGhpcy5mcm9tLnJvdyx0aGlzLnRvLnJvdyk9PT1NYXRoLm1heChsLmZyb20ucm93LGwudG8ucm93KSYmTWF0aC5taW4odGhpcy5mcm9tLmNvbCx0aGlzLnRvLmNv'@;
put 'bCk9PT1NYXRoLm1pbihsLmZyb20uY29sLGwudG8uY29sKSYmTWF0aC5tYXgodGhpcy5mcm9tLmNvbCx0aGlzLnRvLmNvbCk9PT1NYXRoLm1heChsLmZyb20uY29sLGwudG8uY29sKX1vdmVybGFwcyhsKXtyZXR1cm4gbC5pc1NvdXRoRWFzdE9mKHRoaXMuZ2V0T3V0ZXJUb3BMZWZ0Q29ybmVy'@;
put 'KCkpJiZsLmlzTm9ydGhXZXN0T2YodGhpcy5nZXRPdXRlckJvdHRvbVJpZ2h0Q29ybmVyKCkpfWlzU291dGhFYXN0T2YobCl7cmV0dXJuIHRoaXMuZ2V0T3V0ZXJUb3BMZWZ0Q29ybmVyKCkuaXNTb3V0aEVhc3RPZihsKXx8dGhpcy5nZXRPdXRlckJvdHRvbVJpZ2h0Q29ybmVyKCkuaXNTb3V0'@;
put 'aEVhc3RPZihsKX1pc05vcnRoV2VzdE9mKGwpe3JldHVybiB0aGlzLmdldE91dGVyVG9wTGVmdENvcm5lcigpLmlzTm9ydGhXZXN0T2YobCl8fHRoaXMuZ2V0T3V0ZXJCb3R0b21SaWdodENvcm5lcigpLmlzTm9ydGhXZXN0T2YobCl9aXNPdmVybGFwcGluZ0hvcml6b250YWxseShsKXtyZXR1'@;
put 'cm4gdGhpcy5nZXRPdXRlclRvcEVuZENvcm5lcigpLmNvbD49bC5nZXRPdXRlclRvcFN0YXJ0Q29ybmVyKCkuY29sJiZ0aGlzLmdldE91dGVyVG9wRW5kQ29ybmVyKCkuY29sPD1sLmdldE91dGVyVG9wRW5kQ29ybmVyKCkuY29sfHx0aGlzLmdldE91dGVyVG9wU3RhcnRDb3JuZXIoKS5jb2w8'@;
put 'PWwuZ2V0T3V0ZXJUb3BFbmRDb3JuZXIoKS5jb2wmJnRoaXMuZ2V0T3V0ZXJUb3BTdGFydENvcm5lcigpLmNvbD49bC5nZXRPdXRlclRvcFN0YXJ0Q29ybmVyKCkuY29sfWlzT3ZlcmxhcHBpbmdWZXJ0aWNhbGx5KGwpe3JldHVybiB0aGlzLmdldE91dGVyQm90dG9tU3RhcnRDb3JuZXIoKS5y'@;
put 'b3c+PWwuZ2V0T3V0ZXJUb3BSaWdodENvcm5lcigpLnJvdyYmdGhpcy5nZXRPdXRlckJvdHRvbVN0YXJ0Q29ybmVyKCkucm93PD1sLmdldE91dGVyQm90dG9tU3RhcnRDb3JuZXIoKS5yb3d8fHRoaXMuZ2V0T3V0ZXJUb3BFbmRDb3JuZXIoKS5yb3c8PWwuZ2V0T3V0ZXJCb3R0b21TdGFydENv'@;
put 'cm5lcigpLnJvdyYmdGhpcy5nZXRPdXRlclRvcEVuZENvcm5lcigpLnJvdz49bC5nZXRPdXRlclRvcFJpZ2h0Q29ybmVyKCkucm93fWV4cGFuZChsKXtjb25zdCBhPXRoaXMuZ2V0T3V0ZXJUb3BTdGFydENvcm5lcigpLGQ9dGhpcy5nZXRPdXRlckJvdHRvbUVuZENvcm5lcigpO3JldHVybihs'@;
put 'LnJvdzxhLnJvd3x8bC5jb2w8YS5jb2x8fGwucm93PmQucm93fHxsLmNvbD5kLmNvbCkmJih0aGlzLmZyb209dGhpcy5fY3JlYXRlQ2VsbENvb3JkcyhNYXRoLm1pbihhLnJvdyxsLnJvdyksTWF0aC5taW4oYS5jb2wsbC5jb2wpKSx0aGlzLnRvPXRoaXMuX2NyZWF0ZUNlbGxDb29yZHMoTWF0'@;
put 'aC5tYXgoZC5yb3csbC5yb3cpLE1hdGgubWF4KGQuY29sLGwuY29sKSksITApfWV4cGFuZEJ5UmFuZ2UobCl7bGV0IGE9IShhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSl8fGFyZ3VtZW50c1sxXTtpZih0aGlzLmluY2x1ZGVzUmFuZ2UobCl8fCF0aGlzLm92ZXJs'@;
put 'YXBzKGwpKXJldHVybiExO2NvbnN0IGQ9dGhpcy5nZXRPdXRlclRvcFN0YXJ0Q29ybmVyKCksaD10aGlzLmdldE91dGVyQm90dG9tRW5kQ29ybmVyKCksZj10aGlzLmdldERpcmVjdGlvbigpLHY9bC5nZXRPdXRlclRvcFN0YXJ0Q29ybmVyKCksTT1sLmdldE91dGVyQm90dG9tRW5kQ29ybmVy'@;
put 'KCksRD1NYXRoLm1pbihkLnJvdyx2LnJvdyksWj1NYXRoLm1pbihkLmNvbCx2LmNvbCkscmU9TWF0aC5tYXgoaC5yb3csTS5yb3cpLGNlPU1hdGgubWF4KGguY29sLE0uY29sKSxiZT10aGlzLl9jcmVhdGVDZWxsQ29vcmRzKEQsWiksRWU9dGhpcy5fY3JlYXRlQ2VsbENvb3JkcyhyZSxjZSk7'@;
put 'cmV0dXJuIHRoaXMuZnJvbT1iZSx0aGlzLnRvPUVlLHRoaXMuc2V0RGlyZWN0aW9uKGYpLGEmJih0aGlzLmhpZ2hsaWdodC5yb3c9PT10aGlzLmdldE91dGVyQm90dG9tUmlnaHRDb3JuZXIoKS5yb3cmJiJOLVMiPT09dGhpcy5nZXRWZXJ0aWNhbERpcmVjdGlvbigpJiZ0aGlzLmZsaXBEaXJl'@;
put 'Y3Rpb25WZXJ0aWNhbGx5KCksdGhpcy5oaWdobGlnaHQuY29sPT09dGhpcy5nZXRPdXRlclRvcFJpZ2h0Q29ybmVyKCkuY29sJiYiVy1FIj09PXRoaXMuZ2V0SG9yaXpvbnRhbERpcmVjdGlvbigpJiZ0aGlzLmZsaXBEaXJlY3Rpb25Ib3Jpem9udGFsbHkoKSksITB9Z2V0RGlyZWN0aW9uKCl7'@;
put 'cmV0dXJuIHRoaXMuZnJvbS5pc05vcnRoV2VzdE9mKHRoaXMudG8pPyJOVy1TRSI6dGhpcy5mcm9tLmlzTm9ydGhFYXN0T2YodGhpcy50byk/Ik5FLVNXIjp0aGlzLmZyb20uaXNTb3V0aEVhc3RPZih0aGlzLnRvKT8iU0UtTlciOnRoaXMuZnJvbS5pc1NvdXRoV2VzdE9mKHRoaXMudG8pPyJT'@;
put 'Vy1ORSI6dm9pZCAwfXNldERpcmVjdGlvbihsKXtzd2l0Y2gobCl7Y2FzZSJOVy1TRSI6W3RoaXMuZnJvbSx0aGlzLnRvXT1bdGhpcy5nZXRPdXRlclRvcExlZnRDb3JuZXIoKSx0aGlzLmdldE91dGVyQm90dG9tUmlnaHRDb3JuZXIoKV07YnJlYWs7Y2FzZSJORS1TVyI6W3RoaXMuZnJvbSx0'@;
put 'aGlzLnRvXT1bdGhpcy5nZXRPdXRlclRvcFJpZ2h0Q29ybmVyKCksdGhpcy5nZXRPdXRlckJvdHRvbUxlZnRDb3JuZXIoKV07YnJlYWs7Y2FzZSJTRS1OVyI6W3RoaXMuZnJvbSx0aGlzLnRvXT1bdGhpcy5nZXRPdXRlckJvdHRvbVJpZ2h0Q29ybmVyKCksdGhpcy5nZXRPdXRlclRvcExlZnRD'@;
put 'b3JuZXIoKV07YnJlYWs7Y2FzZSJTVy1ORSI6W3RoaXMuZnJvbSx0aGlzLnRvXT1bdGhpcy5nZXRPdXRlckJvdHRvbUxlZnRDb3JuZXIoKSx0aGlzLmdldE91dGVyVG9wUmlnaHRDb3JuZXIoKV19fWdldFZlcnRpY2FsRGlyZWN0aW9uKCl7cmV0dXJuWyJORS1TVyIsIk5XLVNFIl0uaW5kZXhP'@;
put 'Zih0aGlzLmdldERpcmVjdGlvbigpKT4tMT8iTi1TIjoiUy1OIn1nZXRIb3Jpem9udGFsRGlyZWN0aW9uKCl7cmV0dXJuWyJOVy1TRSIsIlNXLU5FIl0uaW5kZXhPZih0aGlzLmdldERpcmVjdGlvbigpKT4tMT8iVy1FIjoiRS1XIn1mbGlwRGlyZWN0aW9uVmVydGljYWxseSgpe3N3aXRjaCh0'@;
put 'aGlzLmdldERpcmVjdGlvbigpKXtjYXNlIk5XLVNFIjp0aGlzLnNldERpcmVjdGlvbigiU1ctTkUiKTticmVhaztjYXNlIk5FLVNXIjp0aGlzLnNldERpcmVjdGlvbigiU0UtTlciKTticmVhaztjYXNlIlNFLU5XIjp0aGlzLnNldERpcmVjdGlvbigiTkUtU1ciKTticmVhaztjYXNlIlNXLU5F'@;
put 'Ijp0aGlzLnNldERpcmVjdGlvbigiTlctU0UiKX19ZmxpcERpcmVjdGlvbkhvcml6b250YWxseSgpe3N3aXRjaCh0aGlzLmdldERpcmVjdGlvbigpKXtjYXNlIk5XLVNFIjp0aGlzLnNldERpcmVjdGlvbigiTkUtU1ciKTticmVhaztjYXNlIk5FLVNXIjp0aGlzLnNldERpcmVjdGlvbigiTlct'@;
put 'U0UiKTticmVhaztjYXNlIlNFLU5XIjp0aGlzLnNldERpcmVjdGlvbigiU1ctTkUiKTticmVhaztjYXNlIlNXLU5FIjp0aGlzLnNldERpcmVjdGlvbigiU0UtTlciKX19Z2V0VG9wU3RhcnRDb3JuZXIoKXtyZXR1cm4gdGhpcy5fY3JlYXRlQ2VsbENvb3JkcyhNYXRoLm1pbih0aGlzLmZyb20u'@;
put 'cm93LHRoaXMudG8ucm93KSxNYXRoLm1pbih0aGlzLmZyb20uY29sLHRoaXMudG8uY29sKSkubm9ybWFsaXplKCl9Z2V0VG9wTGVmdENvcm5lcigpe3JldHVybiBVMihOZCx0aGlzKT90aGlzLmdldFRvcEVuZENvcm5lcigpOnRoaXMuZ2V0VG9wU3RhcnRDb3JuZXIoKX1nZXRCb3R0b21FbmRD'@;
put 'b3JuZXIoKXtyZXR1cm4gdGhpcy5fY3JlYXRlQ2VsbENvb3JkcyhNYXRoLm1heCh0aGlzLmZyb20ucm93LHRoaXMudG8ucm93KSxNYXRoLm1heCh0aGlzLmZyb20uY29sLHRoaXMudG8uY29sKSkubm9ybWFsaXplKCl9Z2V0Qm90dG9tUmlnaHRDb3JuZXIoKXtyZXR1cm4gVTIoTmQsdGhpcyk/'@;
put 'dGhpcy5nZXRCb3R0b21TdGFydENvcm5lcigpOnRoaXMuZ2V0Qm90dG9tRW5kQ29ybmVyKCl9Z2V0VG9wRW5kQ29ybmVyKCl7cmV0dXJuIHRoaXMuX2NyZWF0ZUNlbGxDb29yZHMoTWF0aC5taW4odGhpcy5mcm9tLnJvdyx0aGlzLnRvLnJvdyksTWF0aC5tYXgodGhpcy5mcm9tLmNvbCx0aGlz'@;
put 'LnRvLmNvbCkpLm5vcm1hbGl6ZSgpfWdldFRvcFJpZ2h0Q29ybmVyKCl7cmV0dXJuIFUyKE5kLHRoaXMpP3RoaXMuZ2V0VG9wU3RhcnRDb3JuZXIoKTp0aGlzLmdldFRvcEVuZENvcm5lcigpfWdldEJvdHRvbVN0YXJ0Q29ybmVyKCl7cmV0dXJuIHRoaXMuX2NyZWF0ZUNlbGxDb29yZHMoTWF0'@;
put 'aC5tYXgodGhpcy5mcm9tLnJvdyx0aGlzLnRvLnJvdyksTWF0aC5taW4odGhpcy5mcm9tLmNvbCx0aGlzLnRvLmNvbCkpLm5vcm1hbGl6ZSgpfWdldEJvdHRvbUxlZnRDb3JuZXIoKXtyZXR1cm4gVTIoTmQsdGhpcyk/dGhpcy5nZXRCb3R0b21FbmRDb3JuZXIoKTp0aGlzLmdldEJvdHRvbVN0'@;
put 'YXJ0Q29ybmVyKCl9Z2V0T3V0ZXJUb3BTdGFydENvcm5lcigpe3JldHVybiB0aGlzLl9jcmVhdGVDZWxsQ29vcmRzKE1hdGgubWluKHRoaXMuZnJvbS5yb3csdGhpcy50by5yb3cpLE1hdGgubWluKHRoaXMuZnJvbS5jb2wsdGhpcy50by5jb2wpKX1nZXRPdXRlclRvcExlZnRDb3JuZXIoKXty'@;
put 'ZXR1cm4gVTIoTmQsdGhpcyk/dGhpcy5nZXRPdXRlclRvcEVuZENvcm5lcigpOnRoaXMuZ2V0T3V0ZXJUb3BTdGFydENvcm5lcigpfWdldE91dGVyQm90dG9tRW5kQ29ybmVyKCl7cmV0dXJuIHRoaXMuX2NyZWF0ZUNlbGxDb29yZHMoTWF0aC5tYXgodGhpcy5mcm9tLnJvdyx0aGlzLnRvLnJv'@;
put 'dyksTWF0aC5tYXgodGhpcy5mcm9tLmNvbCx0aGlzLnRvLmNvbCkpfWdldE91dGVyQm90dG9tUmlnaHRDb3JuZXIoKXtyZXR1cm4gVTIoTmQsdGhpcyk/dGhpcy5nZXRPdXRlckJvdHRvbVN0YXJ0Q29ybmVyKCk6dGhpcy5nZXRPdXRlckJvdHRvbUVuZENvcm5lcigpfWdldE91dGVyVG9wRW5k'@;
put 'Q29ybmVyKCl7cmV0dXJuIHRoaXMuX2NyZWF0ZUNlbGxDb29yZHMoTWF0aC5taW4odGhpcy5mcm9tLnJvdyx0aGlzLnRvLnJvdyksTWF0aC5tYXgodGhpcy5mcm9tLmNvbCx0aGlzLnRvLmNvbCkpfWdldE91dGVyVG9wUmlnaHRDb3JuZXIoKXtyZXR1cm4gVTIoTmQsdGhpcyk/dGhpcy5nZXRP'@;
put 'dXRlclRvcFN0YXJ0Q29ybmVyKCk6dGhpcy5nZXRPdXRlclRvcEVuZENvcm5lcigpfWdldE91dGVyQm90dG9tU3RhcnRDb3JuZXIoKXtyZXR1cm4gdGhpcy5fY3JlYXRlQ2VsbENvb3JkcyhNYXRoLm1heCh0aGlzLmZyb20ucm93LHRoaXMudG8ucm93KSxNYXRoLm1pbih0aGlzLmZyb20uY29s'@;
put 'LHRoaXMudG8uY29sKSl9Z2V0T3V0ZXJCb3R0b21MZWZ0Q29ybmVyKCl7cmV0dXJuIFUyKE5kLHRoaXMpP3RoaXMuZ2V0T3V0ZXJCb3R0b21FbmRDb3JuZXIoKTp0aGlzLmdldE91dGVyQm90dG9tU3RhcnRDb3JuZXIoKX1pc0Nvcm5lcihsKXtyZXR1cm4gbC5pc0VxdWFsKHRoaXMuZ2V0T3V0'@;
put 'ZXJUb3BMZWZ0Q29ybmVyKCkpfHxsLmlzRXF1YWwodGhpcy5nZXRPdXRlclRvcFJpZ2h0Q29ybmVyKCkpfHxsLmlzRXF1YWwodGhpcy5nZXRPdXRlckJvdHRvbUxlZnRDb3JuZXIoKSl8fGwuaXNFcXVhbCh0aGlzLmdldE91dGVyQm90dG9tUmlnaHRDb3JuZXIoKSl9Z2V0T3Bwb3NpdGVDb3Ju'@;
put 'ZXIobCl7cmV0dXJuIGwgaW5zdGFuY2VvZiBpUCYmKGwuaXNFcXVhbCh0aGlzLmdldE91dGVyQm90dG9tRW5kQ29ybmVyKCkpP3RoaXMuZ2V0T3V0ZXJUb3BTdGFydENvcm5lcigpOmwuaXNFcXVhbCh0aGlzLmdldE91dGVyVG9wU3RhcnRDb3JuZXIoKSk/dGhpcy5nZXRPdXRlckJvdHRvbUVu'@;
put 'ZENvcm5lcigpOmwuaXNFcXVhbCh0aGlzLmdldE91dGVyVG9wRW5kQ29ybmVyKCkpP3RoaXMuZ2V0T3V0ZXJCb3R0b21TdGFydENvcm5lcigpOmwuaXNFcXVhbCh0aGlzLmdldE91dGVyQm90dG9tU3RhcnRDb3JuZXIoKSk/dGhpcy5nZXRPdXRlclRvcEVuZENvcm5lcigpOnZvaWQgMCl9Z2V0'@;
put 'Qm9yZGVyc1NoYXJlZFdpdGgobCl7aWYoIXRoaXMuaW5jbHVkZXNSYW5nZShsKSlyZXR1cm5bXTtjb25zdCBhX3RvcD1NYXRoLm1pbih0aGlzLmZyb20ucm93LHRoaXMudG8ucm93KSxhX2JvdHRvbT1NYXRoLm1heCh0aGlzLmZyb20ucm93LHRoaXMudG8ucm93KSxhX2xlZnQ9TWF0aC5taW4o'@;
put 'dGhpcy5mcm9tLmNvbCx0aGlzLnRvLmNvbCksYV9yaWdodD1NYXRoLm1heCh0aGlzLmZyb20uY29sLHRoaXMudG8uY29sKSxkX3RvcD1NYXRoLm1pbihsLmZyb20ucm93LGwudG8ucm93KSxkX2JvdHRvbT1NYXRoLm1heChsLmZyb20ucm93LGwudG8ucm93KSxkX2xlZnQ9TWF0aC5taW4obC5m'@;
put 'cm9tLmNvbCxsLnRvLmNvbCksZF9yaWdodD1NYXRoLm1heChsLmZyb20uY29sLGwudG8uY29sKSxoPVtdO3JldHVybiBhX3RvcD09PWRfdG9wJiZoLnB1c2goInRvcCIpLGFfcmlnaHQ9PT1kX3JpZ2h0JiZoLnB1c2goVTIoTmQsdGhpcyk/ImxlZnQiOiJyaWdodCIpLGFfYm90dG9tPT09ZF9i'@;
put 'b3R0b20mJmgucHVzaCgiYm90dG9tIiksYV9sZWZ0PT09ZF9sZWZ0JiZoLnB1c2goVTIoTmQsdGhpcyk/InJpZ2h0IjoibGVmdCIpLGh9Z2V0SW5uZXIoKXtjb25zdCBsPXRoaXMuZ2V0T3V0ZXJUb3BTdGFydENvcm5lcigpLGE9dGhpcy5nZXRPdXRlckJvdHRvbUVuZENvcm5lcigpLGQ9W107'@;
put 'Zm9yKGxldCBoPWwucm93O2g8PWEucm93O2grKylmb3IobGV0IGY9bC5jb2w7Zjw9YS5jb2w7ZisrKSh0aGlzLmZyb20ucm93IT09aHx8dGhpcy5mcm9tLmNvbCE9PWYpJiYodGhpcy50by5yb3chPT1ofHx0aGlzLnRvLmNvbCE9PWYpJiZkLnB1c2godGhpcy5fY3JlYXRlQ2VsbENvb3Jkcyho'@;
put 'LGYpKTtyZXR1cm4gZH1nZXRBbGwoKXtjb25zdCBsPXRoaXMuZ2V0T3V0ZXJUb3BTdGFydENvcm5lcigpLGE9dGhpcy5nZXRPdXRlckJvdHRvbUVuZENvcm5lcigpLGQ9W107Zm9yKGxldCBoPWwucm93O2g8PWEucm93O2grKylmb3IobGV0IGY9bC5jb2w7Zjw9YS5jb2w7ZisrKWQucHVzaChs'@;
put 'LnJvdz09PWgmJmwuY29sPT09Zj9sOmEucm93PT09aCYmYS5jb2w9PT1mP2E6dGhpcy5fY3JlYXRlQ2VsbENvb3JkcyhoLGYpKTtyZXR1cm4gZH1mb3JBbGwobCl7Y29uc3QgYT10aGlzLmdldE91dGVyVG9wU3RhcnRDb3JuZXIoKSxkPXRoaXMuZ2V0T3V0ZXJCb3R0b21FbmRDb3JuZXIoKTtm'@;
put 'b3IobGV0IGg9YS5yb3c7aDw9ZC5yb3c7aCsrKWZvcihsZXQgZj1hLmNvbDtmPD1kLmNvbDtmKyspaWYoITE9PT1sKGgsZikpcmV0dXJufWNsb25lKCl7cmV0dXJuIG5ldyBwSyh0aGlzLmhpZ2hsaWdodCx0aGlzLmZyb20sdGhpcy50byxVMihOZCx0aGlzKSl9dG9PYmplY3QoKXtyZXR1cm57'@;
put 'ZnJvbTp0aGlzLmZyb20udG9PYmplY3QoKSx0bzp0aGlzLnRvLnRvT2JqZWN0KCl9fV9jcmVhdGVDZWxsQ29vcmRzKGwsYSl7cmV0dXJuIG5ldyBpUChsLGEsVTIoTmQsdGhpcykpfX1jb25zdCBnSz1wSztmdW5jdGlvbiBaMihjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gSFFlKGMpe3ZhciBs'@;
put 'PWZ1bmN0aW9uIE5RZShjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5l'@;
put 'dyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5l'@;
put 'UHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y2xhc3MgbUt7Z2V0IGV2ZW50TWFuYWdlcigpe3JldHVybiBuZXcgajIodGhpcyl9Y29uc3RydWN0b3IobCxhKXtaMih0aGlzLCJ3dFRhYmxlIix2b2lkIDAp'@;
put 'LFoyKHRoaXMsInd0U2Nyb2xsIix2b2lkIDApLFoyKHRoaXMsInd0Vmlld3BvcnQiLHZvaWQgMCksWjIodGhpcywid3RPdmVybGF5cyIsdm9pZCAwKSxaMih0aGlzLCJzZWxlY3Rpb25NYW5hZ2VyIix2b2lkIDApLFoyKHRoaXMsInd0RXZlbnQiLHZvaWQgMCksWjIodGhpcywiZ3VpZCIsYHd0'@;
put 'XyR7aCQoKX1gKSxaMih0aGlzLCJkcmF3SW50ZXJydXB0ZWQiLCExKSxaMih0aGlzLCJkcmF3biIsITEpLFoyKHRoaXMsImFjdGl2ZU92ZXJsYXlOYW1lIiwibWFzdGVyIiksWjIodGhpcywiZG9tQmluZGluZ3MiLHZvaWQgMCksWjIodGhpcywid3RTZXR0aW5ncyIsdm9pZCAwKSx0aGlzLmRv'@;
put 'bUJpbmRpbmdzPXtyb290VGFibGU6bCxyb290RG9jdW1lbnQ6bC5vd25lckRvY3VtZW50LHJvb3RXaW5kb3c6bC5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3fSx0aGlzLnd0U2V0dGluZ3M9YSx0aGlzLnd0U2Nyb2xsPW5ldyBUUWUodGhpcy5jcmVhdGVTY3JvbGxEYW8oKSl9ZmluZE9yaWdp'@;
put 'bmFsSGVhZGVycygpe2NvbnN0IGw9W107aWYodGhpcy53dFRhYmxlLlRIRUFELmNoaWxkTm9kZXMubGVuZ3RoJiZ0aGlzLnd0VGFibGUuVEhFQUQuY2hpbGROb2Rlc1swXS5jaGlsZE5vZGVzLmxlbmd0aCl7Zm9yKGxldCBhPTAsZD10aGlzLnd0VGFibGUuVEhFQUQuY2hpbGROb2Rlc1swXS5j'@;
put 'aGlsZE5vZGVzLmxlbmd0aDthPGQ7YSsrKWwucHVzaCh0aGlzLnd0VGFibGUuVEhFQUQuY2hpbGROb2Rlc1swXS5jaGlsZE5vZGVzW2FdLmlubmVySFRNTCk7dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoImNvbHVtbkhlYWRlcnMiKS5sZW5ndGh8fHRoaXMud3RTZXR0aW5ncy51cGRhdGUo'@;
put 'ImNvbHVtbkhlYWRlcnMiLFtmdW5jdGlvbihhLGQpe1BtKGQsbFthXSl9XSl9fWNyZWF0ZUNlbGxDb29yZHMobCxhKXtyZXR1cm4gbmV3IGlQKGwsYSx0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygicnRsTW9kZSIpKX1jcmVhdGVDZWxsUmFuZ2UobCxhLGQpe3JldHVybiBuZXcgZ0sobCxh'@;
put 'LGQsdGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInJ0bE1vZGUiKSl9ZHJhdygpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdJiZhcmd1bWVudHNbMF07cmV0dXJuIHRoaXMuZHJhd0ludGVycnVwdGVkPSExLCF0aGlzLnd0VGFibGUuaXNWaXNpYmxl'@;
put 'KCl8fFYyZSh0aGlzLnd0VGFibGUud3RSb290RWxlbWVudC5wYXJlbnROb2RlKT90aGlzLmRyYXdJbnRlcnJ1cHRlZD0hMDp0aGlzLnd0VGFibGUuZHJhdyhsKSx0aGlzfWdldENlbGwobCl7aWYoIShhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSYmYXJndW1lbnRz'@;
put 'WzFdKSlyZXR1cm4gdGhpcy53dFRhYmxlLmdldENlbGwobCk7Y29uc3QgZD10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygidG90YWxSb3dzIiksaD10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiZml4ZWRSb3dzVG9wIiksZj10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiZml4ZWRS'@;
put 'b3dzQm90dG9tIiksdj10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiZml4ZWRDb2x1bW5zU3RhcnQiKTtpZihsLnJvdzxoJiZsLmNvbDx2KXJldHVybiB0aGlzLnd0T3ZlcmxheXMudG9wSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5LmNsb25lLnd0VGFibGUuZ2V0Q2VsbChsKTtpZihsLnJv'@;
put 'dzxoKXJldHVybiB0aGlzLnd0T3ZlcmxheXMudG9wT3ZlcmxheS5jbG9uZS53dFRhYmxlLmdldENlbGwobCk7aWYobC5jb2w8diYmbC5yb3c+PWQtZil7aWYodGhpcy53dE92ZXJsYXlzLmJvdHRvbUlubGluZVN0YXJ0Q29ybmVyT3ZlcmxheSYmdGhpcy53dE92ZXJsYXlzLmJvdHRvbUlubGlu'@;
put 'ZVN0YXJ0Q29ybmVyT3ZlcmxheS5jbG9uZSlyZXR1cm4gdGhpcy53dE92ZXJsYXlzLmJvdHRvbUlubGluZVN0YXJ0Q29ybmVyT3ZlcmxheS5jbG9uZS53dFRhYmxlLmdldENlbGwobCl9ZWxzZXtpZihsLmNvbDx2KXJldHVybiB0aGlzLnd0T3ZlcmxheXMuaW5saW5lU3RhcnRPdmVybGF5LmNs'@;
put 'b25lLnd0VGFibGUuZ2V0Q2VsbChsKTtpZihsLnJvdzxkJiZsLnJvdz49ZC1mJiZ0aGlzLnd0T3ZlcmxheXMuYm90dG9tT3ZlcmxheSYmdGhpcy53dE92ZXJsYXlzLmJvdHRvbU92ZXJsYXkuY2xvbmUpcmV0dXJuIHRoaXMud3RPdmVybGF5cy5ib3R0b21PdmVybGF5LmNsb25lLnd0VGFibGUu'@;
put 'Z2V0Q2VsbChsKX1yZXR1cm4gdGhpcy53dFRhYmxlLmdldENlbGwobCl9c2Nyb2xsVmlld3BvcnQobCxhLGQpe3JldHVybiB0aGlzLnd0U2Nyb2xsLnNjcm9sbFZpZXdwb3J0KGwsYSxkKX1zY3JvbGxWaWV3cG9ydEhvcml6b250YWxseShsLGEpe3JldHVybiB0aGlzLnd0U2Nyb2xsLnNjcm9s'@;
put 'bFZpZXdwb3J0SG9yaXpvbnRhbGx5KGwsYSl9c2Nyb2xsVmlld3BvcnRWZXJ0aWNhbGx5KGwsYSl7cmV0dXJuIHRoaXMud3RTY3JvbGwuc2Nyb2xsVmlld3BvcnRWZXJ0aWNhbGx5KGwsYSl9Z2V0Vmlld3BvcnQoKXtyZXR1cm5bdGhpcy53dFRhYmxlLmdldEZpcnN0VmlzaWJsZVJvdygpLHRo'@;
put 'aXMud3RUYWJsZS5nZXRGaXJzdFZpc2libGVDb2x1bW4oKSx0aGlzLnd0VGFibGUuZ2V0TGFzdFZpc2libGVSb3coKSx0aGlzLnd0VGFibGUuZ2V0TGFzdFZpc2libGVDb2x1bW4oKV19ZGVzdHJveSgpe3RoaXMud3RPdmVybGF5cy5kZXN0cm95KCksdGhpcy53dEV2ZW50LmRlc3Ryb3koKX1j'@;
put 'cmVhdGVTY3JvbGxEYW8oKXtjb25zdCBsPXRoaXM7cmV0dXJue2dldCBkcmF3bigpe3JldHVybiBsLmRyYXdufSxnZXQgdG9wT3ZlcmxheSgpe3JldHVybiBsLnd0T3ZlcmxheXMudG9wT3ZlcmxheX0sZ2V0IGlubGluZVN0YXJ0T3ZlcmxheSgpe3JldHVybiBsLnd0T3ZlcmxheXMuaW5saW5l'@;
put 'U3RhcnRPdmVybGF5fSxnZXQgd3RUYWJsZSgpe3JldHVybiBsLnd0VGFibGV9LGdldCB3dFZpZXdwb3J0KCl7cmV0dXJuIGwud3RWaWV3cG9ydH0sZ2V0IHd0U2V0dGluZ3MoKXtyZXR1cm4gbC53dFNldHRpbmdzfSxnZXQgcm9vdFdpbmRvdygpe3JldHVybiBsLmRvbUJpbmRpbmdzLnJvb3RX'@;
put 'aW5kb3d9LGdldCB0b3RhbFJvd3MoKXtyZXR1cm4gbC53dFNldHRpbmdzLmdldFNldHRpbmcoInRvdGFsUm93cyIpfSxnZXQgdG90YWxDb2x1bW5zKCl7cmV0dXJuIGwud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJ0b3RhbENvbHVtbnMiKX0sZ2V0IGZpeGVkUm93c1RvcCgpe3JldHVybiBsLnd0'@;
put 'U2V0dGluZ3MuZ2V0U2V0dGluZygiZml4ZWRSb3dzVG9wIil9LGdldCBmaXhlZFJvd3NCb3R0b20oKXtyZXR1cm4gbC53dFNldHRpbmdzLmdldFNldHRpbmcoImZpeGVkUm93c0JvdHRvbSIpfSxnZXQgZml4ZWRDb2x1bW5zU3RhcnQoKXtyZXR1cm4gbC53dFNldHRpbmdzLmdldFNldHRpbmco'@;
put 'ImZpeGVkQ29sdW1uc1N0YXJ0Iil9fX1nZXRUYWJsZURhbygpe2NvbnN0IGw9dGhpcztyZXR1cm57Z2V0IHdvdCgpe3JldHVybiBsfSxnZXQgcGFyZW50VGFibGVPZmZzZXQoKXtyZXR1cm4gbC5jbG9uZVNvdXJjZS53dFRhYmxlLnRhYmxlT2Zmc2V0fSxnZXQgY2xvbmVTb3VyY2UoKXtyZXR1'@;
put 'cm4gbC5jbG9uZVNvdXJjZX0sZ2V0IHdvcmtzcGFjZVdpZHRoKCl7cmV0dXJuIGwud3RWaWV3cG9ydC5nZXRXb3Jrc3BhY2VXaWR0aCgpfSxnZXQgd3RWaWV3cG9ydCgpe3JldHVybiBsLnd0Vmlld3BvcnR9LGdldCB3dE92ZXJsYXlzKCl7cmV0dXJuIGwud3RPdmVybGF5c30sZ2V0IHNlbGVj'@;
put 'dGlvbk1hbmFnZXIoKXtyZXR1cm4gbC5zZWxlY3Rpb25NYW5hZ2VyfSxnZXQgc3R5bGVzSGFuZGxlcigpe3JldHVybiBsLnN0eWxlc0hhbmRsZXJ9LGdldCBkcmF3bigpe3JldHVybiBsLmRyYXdufSxzZXQgZHJhd24oYSl7bC5kcmF3bj1hfSxnZXQgd3RUYWJsZSgpe3JldHVybiBsLnd0VGFi'@;
put 'bGV9LGdldCBzdGFydENvbHVtblJlbmRlcmVkKCl7cmV0dXJuIGwud3RWaWV3cG9ydC5jb2x1bW5zUmVuZGVyQ2FsY3VsYXRvci5zdGFydENvbHVtbn0sZ2V0IHN0YXJ0Q29sdW1uVmlzaWJsZSgpe3JldHVybiBsLnd0Vmlld3BvcnQuY29sdW1uc1Zpc2libGVDYWxjdWxhdG9yLnN0YXJ0Q29s'@;
put 'dW1ufSxnZXQgc3RhcnRDb2x1bW5QYXJ0aWFsbHlWaXNpYmxlKCl7cmV0dXJuIGwud3RWaWV3cG9ydC5jb2x1bW5zUGFydGlhbGx5VmlzaWJsZUNhbGN1bGF0b3Iuc3RhcnRDb2x1bW59LGdldCBlbmRDb2x1bW5SZW5kZXJlZCgpe3JldHVybiBsLnd0Vmlld3BvcnQuY29sdW1uc1JlbmRlckNh'@;
put 'bGN1bGF0b3IuZW5kQ29sdW1ufSxnZXQgZW5kQ29sdW1uVmlzaWJsZSgpe3JldHVybiBsLnd0Vmlld3BvcnQuY29sdW1uc1Zpc2libGVDYWxjdWxhdG9yLmVuZENvbHVtbn0sZ2V0IGVuZENvbHVtblBhcnRpYWxseVZpc2libGUoKXtyZXR1cm4gbC53dFZpZXdwb3J0LmNvbHVtbnNQYXJ0aWFs'@;
put 'bHlWaXNpYmxlQ2FsY3VsYXRvci5lbmRDb2x1bW59LGdldCBjb3VudENvbHVtbnNSZW5kZXJlZCgpe3JldHVybiBsLnd0Vmlld3BvcnQuY29sdW1uc1JlbmRlckNhbGN1bGF0b3IuY291bnR9LGdldCBjb3VudENvbHVtbnNWaXNpYmxlKCl7cmV0dXJuIGwud3RWaWV3cG9ydC5jb2x1bW5zVmlz'@;
put 'aWJsZUNhbGN1bGF0b3IuY291bnR9LGdldCBzdGFydFJvd1JlbmRlcmVkKCl7cmV0dXJuIGwud3RWaWV3cG9ydC5yb3dzUmVuZGVyQ2FsY3VsYXRvci5zdGFydFJvd30sZ2V0IHN0YXJ0Um93VmlzaWJsZSgpe3JldHVybiBsLnd0Vmlld3BvcnQucm93c1Zpc2libGVDYWxjdWxhdG9yLnN0YXJ0'@;
put 'Um93fSxnZXQgc3RhcnRSb3dQYXJ0aWFsbHlWaXNpYmxlKCl7cmV0dXJuIGwud3RWaWV3cG9ydC5yb3dzUGFydGlhbGx5VmlzaWJsZUNhbGN1bGF0b3Iuc3RhcnRSb3d9LGdldCBlbmRSb3dSZW5kZXJlZCgpe3JldHVybiBsLnd0Vmlld3BvcnQucm93c1JlbmRlckNhbGN1bGF0b3IuZW5kUm93'@;
put 'fSxnZXQgZW5kUm93VmlzaWJsZSgpe3JldHVybiBsLnd0Vmlld3BvcnQucm93c1Zpc2libGVDYWxjdWxhdG9yLmVuZFJvd30sZ2V0IGVuZFJvd1BhcnRpYWxseVZpc2libGUoKXtyZXR1cm4gbC53dFZpZXdwb3J0LnJvd3NQYXJ0aWFsbHlWaXNpYmxlQ2FsY3VsYXRvci5lbmRSb3d9LGdldCBj'@;
put 'b3VudFJvd3NSZW5kZXJlZCgpe3JldHVybiBsLnd0Vmlld3BvcnQucm93c1JlbmRlckNhbGN1bGF0b3IuY291bnR9LGdldCBjb3VudFJvd3NWaXNpYmxlKCl7cmV0dXJuIGwud3RWaWV3cG9ydC5yb3dzVmlzaWJsZUNhbGN1bGF0b3IuY291bnR9LGdldCBjb2x1bW5IZWFkZXJzKCl7cmV0dXJu'@;
put 'IGwud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJjb2x1bW5IZWFkZXJzIil9LGdldCByb3dIZWFkZXJzKCl7cmV0dXJuIGwud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJyb3dIZWFkZXJzIil9fX19ZnVuY3Rpb24gR2ZlKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBWUWUoYyl7dmFyIGw9ZnVuY3Rp'@;
put 'b24gQlFlKGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVF'@;
put 'cnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0'@;
put 'eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jbGFzcyBqUWUgZXh0ZW5kcyBtS3tjb25zdHJ1Y3RvcihsLGEsZCl7c3VwZXIobCxhKSxHZmUodGhpcywiY2xvbmVTb3VyY2UiLHZvaWQgMCksR2ZlKHRoaXMsImNsb25l'@;
put 'T3ZlcmxheSIsdm9pZCAwKTtjb25zdCBoPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJmYWNhZGUiLHRoaXMpO3RoaXMuY2xvbmVTb3VyY2U9ZC5zb3VyY2UsdGhpcy5jbG9uZU92ZXJsYXk9ZC5vdmVybGF5LHRoaXMuc3R5bGVzSGFuZGxlcj1kLnN0eWxlc0hhbmRsZXIsdGhpcy53dFRh'@;
put 'YmxlPXRoaXMuY2xvbmVPdmVybGF5LmNyZWF0ZVRhYmxlKHRoaXMuZ2V0VGFibGVEYW8oKSxoLHRoaXMuZG9tQmluZGluZ3MsdGhpcy53dFNldHRpbmdzKSx0aGlzLnd0Vmlld3BvcnQ9ZC52aWV3cG9ydCx0aGlzLnNlbGVjdGlvbk1hbmFnZXI9ZC5zZWxlY3Rpb25NYW5hZ2VyLHRoaXMud3RF'@;
put 'dmVudD1uZXcgRWZlKGgsdGhpcy5kb21CaW5kaW5ncyx0aGlzLnd0U2V0dGluZ3MsdGhpcy5ldmVudE1hbmFnZXIsdGhpcy53dFRhYmxlLHRoaXMuc2VsZWN0aW9uTWFuYWdlcixkLmV2ZW50KSx0aGlzLmZpbmRPcmlnaW5hbEhlYWRlcnMoKX19Y2xhc3MgRkV7Y29uc3RydWN0b3IobCxhLGQs'@;
put 'aCxmKXsoZnVuY3Rpb24gelFlKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBVUWUoYyl7dmFyIGw9ZnVuY3Rpb24gWlFlKGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxs'@;
put 'KGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmci'@;
put 'KTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY30pKHRoaXMsInd0U2V0dGluZ3MiLG51bGwpLFRwKHRoaXMs'@;
put 'IndvdCIsbCx7d3JpdGFibGU6ITF9KSx0aGlzLmRvbUJpbmRpbmdzPWYsdGhpcy5mYWNhZGVHZXR0ZXI9YSx0aGlzLnd0U2V0dGluZ3M9aDtjb25zdHtUQUJMRTp2LGhpZGVyOk0sc3ByZWFkZXI6RCxob2xkZXI6Wix3dFJvb3RFbGVtZW50OnJlfT10aGlzLndvdC53dFRhYmxlO3RoaXMuaW5z'@;
put 'dGFuY2U9dGhpcy53b3QsdGhpcy50eXBlPWQsdGhpcy5tYWluVGFibGVTY3JvbGxhYmxlRWxlbWVudD1udWxsLHRoaXMuVEFCTEU9dix0aGlzLmhpZGVyPU0sdGhpcy5zcHJlYWRlcj1ELHRoaXMuaG9sZGVyPVosdGhpcy53dFJvb3RFbGVtZW50PXJlLHRoaXMudHJpbW1pbmdDb250YWluZXI9'@;
put 'YV8odGhpcy5oaWRlci5wYXJlbnROb2RlLnBhcmVudE5vZGUpLHRoaXMubmVlZEZ1bGxSZW5kZXI9dGhpcy5zaG91bGRCZVJlbmRlcmVkKCksdGhpcy5jbG9uZT10aGlzLm1ha2VDbG9uZSgpfWhhc1JlbmRlcmluZ1N0YXRlQ2hhbmdlZCgpe3JldHVybiB0aGlzLm5lZWRGdWxsUmVuZGVyIT09'@;
put 'dGhpcy5zaG91bGRCZVJlbmRlcmVkKCl9dXBkYXRlU3RhdGVPZlJlbmRlcmluZyhsKXsiYmVmb3JlIj09PWwmJnRoaXMuc2hvdWxkQmVSZW5kZXJlZCgpP3RoaXMubmVlZEZ1bGxSZW5kZXI9ITA6ImFmdGVyIj09PWwmJiF0aGlzLnNob3VsZEJlUmVuZGVyZWQoKSYmKHRoaXMubmVlZEZ1bGxS'@;
put 'ZW5kZXI9ITEpfXNob3VsZEJlUmVuZGVyZWQoKXtyZXR1cm4hMH11cGRhdGVUcmltbWluZ0NvbnRhaW5lcigpe3RoaXMudHJpbW1pbmdDb250YWluZXI9YV8odGhpcy5oaWRlci5wYXJlbnROb2RlLnBhcmVudE5vZGUpfXVwZGF0ZU1haW5TY3JvbGxhYmxlRWxlbWVudCgpe2NvbnN0e3d0VGFi'@;
put 'bGU6bH09dGhpcy53b3Qse3Jvb3RXaW5kb3c6YX09dGhpcy5kb21CaW5kaW5nczt0aGlzLm1haW5UYWJsZVNjcm9sbGFibGVFbGVtZW50PSJoaWRkZW4iPT09YS5nZXRDb21wdXRlZFN0eWxlKGwud3RSb290RWxlbWVudC5wYXJlbnROb2RlKS5nZXRQcm9wZXJ0eVZhbHVlKCJvdmVyZmxvdyIp'@;
put 'P3RoaXMud290Lnd0VGFibGUuaG9sZGVyOnlFKGwuVEFCTEUpfWdldFJlbGF0aXZlQ2VsbFBvc2l0aW9uKGwsYSxkKXtpZighMT09PXRoaXMuY2xvbmUud3RUYWJsZS5ob2xkZXIuY29udGFpbnMobCkpcmV0dXJuIHZvaWQgaWwoYFRoZSBwcm92aWRlZCBlbGVtZW50IGlzIG5vdCBhIGNoaWxk'@;
put 'IG9mIHRoZSAke3RoaXMudHlwZX0gb3ZlcmxheWApO2NvbnN0IGg9dGhpcy5tYWluVGFibGVTY3JvbGxhYmxlRWxlbWVudD09PXRoaXMuZG9tQmluZGluZ3Mucm9vdFdpbmRvdyxmPWQ8dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoImZpeGVkQ29sdW1uc1N0YXJ0Iiksdj1hPHRoaXMud3RT'@;
put 'ZXR0aW5ncy5nZXRTZXR0aW5nKCJmaXhlZFJvd3NUb3AiKSxNPWE+PXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJ0b3RhbFJvd3MiKS10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiZml4ZWRSb3dzQm90dG9tIiksRD10aGlzLmNsb25lLnd0VGFibGUuc3ByZWFkZXIsWj17c3RhcnQ6'@;
put 'dGhpcy5nZXRSZWxhdGl2ZVN0YXJ0UG9zaXRpb24oRCksdG9wOkQub2Zmc2V0VG9wfSxyZT17c3RhcnQ6dGhpcy5nZXRSZWxhdGl2ZVN0YXJ0UG9zaXRpb24obCksdG9wOmwub2Zmc2V0VG9wfTtsZXQgY2U9bnVsbDtyZXR1cm4gY2U9aD90aGlzLmdldFJlbGF0aXZlQ2VsbFBvc2l0aW9uV2l0'@;
put 'aGluV2luZG93KHYsZixyZSxaKTp0aGlzLmdldFJlbGF0aXZlQ2VsbFBvc2l0aW9uV2l0aGluSG9sZGVyKHYsTSxmLHJlLFopLGNlfWdldFJlbGF0aXZlU3RhcnRQb3NpdGlvbihsKXtyZXR1cm4gdGhpcy5pc1J0bCgpP2wub2Zmc2V0UGFyZW50Lm9mZnNldFdpZHRoLWwub2Zmc2V0TGVmdC1s'@;
put 'Lm9mZnNldFdpZHRoOmwub2Zmc2V0TGVmdH1nZXRSZWxhdGl2ZUNlbGxQb3NpdGlvbldpdGhpbldpbmRvdyhsLGEsZCxoKXtjb25zdCBmPXRoaXMud290Lnd0VGFibGUud3RSb290RWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtsZXQgdj0wLE09MDtpZihhKXtsZXQgRD1mLmxlZnQ7'@;
put 'dGhpcy5pc1J0bCgpJiYoRD10aGlzLmRvbUJpbmRpbmdzLnJvb3RXaW5kb3cuaW5uZXJXaWR0aC0oZi5sZWZ0K2Yud2lkdGgrZjAoKSkpLHY9RDw9MD8tMSpEOjB9ZWxzZSB2PWguc3RhcnQ7cmV0dXJuIE09bD90aGlzLmNsb25lLnd0VGFibGUuVEFCTEUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0'@;
put 'KCkudG9wLWYudG9wOmgudG9wLHtzdGFydDpkLnN0YXJ0K3YsdG9wOmQudG9wK019fWdldFJlbGF0aXZlQ2VsbFBvc2l0aW9uV2l0aGluSG9sZGVyKGwsYSxkLGgsZil7Y29uc3Qgdl9ob3Jpem9udGFsPXRoaXMud290Lnd0T3ZlcmxheXMuaW5saW5lU3RhcnRPdmVybGF5LmdldFNjcm9sbFBv'@;
put 'c2l0aW9uKCksdl92ZXJ0aWNhbD10aGlzLndvdC53dE92ZXJsYXlzLnRvcE92ZXJsYXkuZ2V0U2Nyb2xsUG9zaXRpb24oKTtsZXQgTT0wLEQ9MDtpZihkfHwoTT12X2hvcml6b250YWwtZi5zdGFydCksYSl7Y29uc3QgWj10aGlzLndvdC53dFRhYmxlLnd0Um9vdEVsZW1lbnQuZ2V0Qm91bmRp'@;
put 'bmdDbGllbnRSZWN0KCk7RD0tMSp0aGlzLmNsb25lLnd0VGFibGUuVEFCTEUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wK1oudG9wfWVsc2UgbHx8KEQ9dl92ZXJ0aWNhbC1mLnRvcCk7cmV0dXJue3N0YXJ0Omguc3RhcnQtTSx0b3A6aC50b3AtRH19bWFrZUNsb25lKCl7aWYoLTE9PT1I'@;
put 'ZmUuaW5kZXhPZih0aGlzLnR5cGUpKXRocm93IG5ldyBFcnJvcihgQ2xvbmUgdHlwZSAiJHt0aGlzLnR5cGV9IiBpcyBub3Qgc3VwcG9ydGVkLmApO2NvbnN0e3d0VGFibGU6bCx3dFNldHRpbmdzOmF9PXRoaXMud290LHtyb290RG9jdW1lbnQ6ZCxyb290V2luZG93Omh9PXRoaXMuZG9tQmlu'@;
put 'ZGluZ3MsZj1kLmNyZWF0ZUVsZW1lbnQoImRpdiIpLHY9ZC5jcmVhdGVFbGVtZW50KCJ0YWJsZSIpLE09bC53dFJvb3RFbGVtZW50LnBhcmVudE5vZGU7Zi5jbGFzc05hbWU9YCR7cFFlLmdldCh0aGlzLnR5cGUpfSBoYW5kc29udGFibGVgLGYuc2V0QXR0cmlidXRlKCJkaXIiLHRoaXMuaXNS'@;
put 'dGwoKT8icnRsIjoibHRyIiksZi5zdHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiLGYuc3R5bGUudG9wPTAsZi5zdHlsZS5vdmVyZmxvdz0idmlzaWJsZSIsdGhpcy5pc1J0bCgpP2Yuc3R5bGUucmlnaHQ9MDpmLnN0eWxlLmxlZnQ9MCxhLmdldFNldHRpbmcoImFyaWFUYWdzIikmJnZvKGYsW1si'@;
put 'cm9sZSIsInByZXNlbnRhdGlvbiJdXSksdi5jbGFzc05hbWU9bC5UQUJMRS5jbGFzc05hbWUsbC5UQUJMRS5nZXRBdHRyaWJ1dGUoInJvbGUiKSYmdi5zZXRBdHRyaWJ1dGUoInJvbGUiLGwuVEFCTEUuZ2V0QXR0cmlidXRlKCJyb2xlIikpLGYuYXBwZW5kQ2hpbGQodiksTS5hcHBlbmRDaGls'@;
put 'ZChmKTtjb25zdCBaPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJwcmV2ZW50T3ZlcmZsb3ciKTtyZXR1cm4gdGhpcy5tYWluVGFibGVTY3JvbGxhYmxlRWxlbWVudD0hMD09PVp8fCJob3Jpem9udGFsIj09PVomJnRoaXMudHlwZT09PSQ3fHwidmVydGljYWwiPT09WiYmdGhpcy50eXBl'@;
put 'PT09Szc/aDoiaGlkZGVuIj09PWguZ2V0Q29tcHV0ZWRTdHlsZShNKS5nZXRQcm9wZXJ0eVZhbHVlKCJvdmVyZmxvdyIpP2wuaG9sZGVyOnlFKGwuVEFCTEUpLG5ldyBqUWUodix0aGlzLnd0U2V0dGluZ3Mse3NvdXJjZTp0aGlzLndvdCxvdmVybGF5OnRoaXMsdmlld3BvcnQ6dGhpcy53b3Qu'@;
put 'd3RWaWV3cG9ydCxldmVudDp0aGlzLndvdC53dEV2ZW50LHNlbGVjdGlvbk1hbmFnZXI6dGhpcy53b3Quc2VsZWN0aW9uTWFuYWdlcixzdHlsZXNIYW5kbGVyOnRoaXMud290LnN0eWxlc0hhbmRsZXJ9KX1yZWZyZXNoKCl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1'@;
put 'bWVudHNbMF0mJmFyZ3VtZW50c1swXTtpZih0aGlzLm5lZWRGdWxsUmVuZGVyKXtjb25zdCBhPXRoaXMuY2xvbmUuY2xvbmVTb3VyY2U7YS5hY3RpdmVPdmVybGF5TmFtZT10aGlzLmNsb25lLnd0VGFibGUubmFtZSx0aGlzLmNsb25lLmRyYXcobCksYS5hY3RpdmVPdmVybGF5TmFtZT0ibWFz'@;
put 'dGVyIn19cmVzZXQoKXtjb25zdCBsPXRoaXMuY2xvbmUud3RUYWJsZS5ob2xkZXI7W2wuc3R5bGUsdGhpcy5jbG9uZS53dFRhYmxlLmhpZGVyLnN0eWxlLGwucGFyZW50Tm9kZS5zdHlsZV0uZm9yRWFjaCh2PT57di53aWR0aD0iIix2LmhlaWdodD0iIn0pfWlzUnRsKCl7cmV0dXJuIHRoaXMu'@;
put 'd3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJydGxNb2RlIil9ZGVzdHJveSgpe3RoaXMuY2xvbmUuZXZlbnRNYW5hZ2VyLmRlc3Ryb3koKX19Y29uc3Qgdks9Yz0+e2NvbnN0IGw9Yy5zdHlsZXNIYW5kbGVyO2lmKGwuaXNDbGFzc2ljVGhlbWUoKSlyZXR1cm4gT2JqZWN0LmZyZWV6ZSh7d2lkdGg6'@;
put 'NixoZWlnaHQ6Nixib3JkZXJXaWR0aDoxLGJvcmRlclN0eWxlOiJzb2xpZCIsYm9yZGVyQ29sb3I6IiNGRkYifSk7Y29uc3QgYT1sLmdldENTU1ZhcmlhYmxlVmFsdWUoImNlbGwtYXV0b2ZpbGwtc2l6ZSIpLGQ9bC5nZXRDU1NWYXJpYWJsZVZhbHVlKCJjZWxsLWF1dG9maWxsLWJvcmRlci13'@;
put 'aWR0aCIpLGg9bC5nZXRDU1NWYXJpYWJsZVZhbHVlKCJjZWxsLWF1dG9maWxsLWJvcmRlci1jb2xvciIpO3JldHVybiBPYmplY3QuZnJlZXplKHt3aWR0aDphLGhlaWdodDphLGJvcmRlcldpZHRoOmQsYm9yZGVyU3R5bGU6InNvbGlkIixib3JkZXJDb2xvcjpofSl9O2NsYXNzICRRZSBleHRl'@;
put 'bmRzIEZFe2NvbnN0cnVjdG9yKGwsYSxkLGgpe3N1cGVyKGwsYSwkNyxkLGgpLGZ1bmN0aW9uIFdRZShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gWVFlKGMpe3ZhciBsPWZ1bmN0aW9uIEdRZShjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wu'@;
put 'dG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJz'@;
put 'dHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1ts'@;
put 'XT1hLGN9KHRoaXMsImNhY2hlZEZpeGVkUm93c1RvcCIsLTEpLHRoaXMuY2FjaGVkRml4ZWRSb3dzVG9wPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJmaXhlZFJvd3NUb3AiKX1jcmVhdGVUYWJsZSgpe2Zvcih2YXIgbD1hcmd1bWVudHMubGVuZ3RoLGE9bmV3IEFycmF5KGwpLGQ9MDtk'@;
put 'PGw7ZCsrKWFbZF09YXJndW1lbnRzW2RdO3JldHVybiBuZXcgX1FlKC4uLmEpfXNob3VsZEJlUmVuZGVyZWQoKXtyZXR1cm4gdGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInNob3VsZFJlbmRlclRvcE92ZXJsYXkiKX1yZXNldEZpeGVkUG9zaXRpb24oKXtpZighdGhpcy5uZWVkRnVsbFJl'@;
put 'bmRlcnx8IXRoaXMuc2hvdWxkQmVSZW5kZXJlZCgpfHwhdGhpcy53b3Qud3RUYWJsZS5ob2xkZXIucGFyZW50Tm9kZSlyZXR1cm4hMTtjb25zdCBsPXRoaXMuY2xvbmUud3RUYWJsZS5ob2xkZXIucGFyZW50Tm9kZSx7cm9vdFdpbmRvdzphfT10aGlzLmRvbUJpbmRpbmdzLGQ9dGhpcy53dFNl'@;
put 'dHRpbmdzLmdldFNldHRpbmcoInByZXZlbnRPdmVyZmxvdyIpO2xldCBoPTAsZj0hMTtpZih0aGlzLnRyaW1taW5nQ29udGFpbmVyIT09YXx8ZCYmInZlcnRpY2FsIj09PWQpaD10aGlzLmdldFNjcm9sbFBvc2l0aW9uKCksQ0UobCk7ZWxzZXtjb25zdHt3dFRhYmxlOk19PXRoaXMud290LEQ9'@;
put 'TS5oaWRlci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtmPU1hdGguY2VpbChELmJvdHRvbSk9PT1sLm9mZnNldEhlaWdodCxoPXRoaXMuZ2V0T3ZlcmxheU9mZnNldCgpLFBPKGwsIjBweCIsYCR7aH1weGApfWNvbnN0IHY9dGhpcy5hZGp1c3RIZWFkZXJCb3JkZXJzUG9zaXRpb24oaCxmKTty'@;
put 'ZXR1cm4gdGhpcy5hZGp1c3RFbGVtZW50c1NpemUoKSx2fXNldFNjcm9sbFBvc2l0aW9uKGwpe2NvbnN0e3Jvb3RXaW5kb3c6YX09dGhpcy5kb21CaW5kaW5ncyxkPXRoaXMubWFpblRhYmxlU2Nyb2xsYWJsZUVsZW1lbnQ7bGV0IGg9ITE7aWYoZD09PWEmJmwhPT1hLnNjcm9sbFkpe2NvbnN0'@;
put 'IGY9YS5zY3JvbGxZO2Euc2Nyb2xsVG8oTE8oYSksbCksaD1mIT09YS5zY3JvbGxZfWVsc2UgaWYobCE9PWQuc2Nyb2xsVG9wKXtjb25zdCBmPWQuc2Nyb2xsVG9wO2Quc2Nyb2xsVG9wPWwsaD1mIT09ZC5zY3JvbGxUb3B9cmV0dXJuIGh9b25TY3JvbGwoKXt0aGlzLnd0U2V0dGluZ3MuZ2V0'@;
put 'U2V0dGluZygib25TY3JvbGxIb3Jpem9udGFsbHkiKX1zdW1DZWxsU2l6ZXMobCxhKXtjb25zdCBkPXRoaXMud290LnN0eWxlc0hhbmRsZXIuZ2V0RGVmYXVsdFJvd0hlaWdodCgpO2xldCBoPWwsZj0wO2Zvcig7aDxhOyl7Y29uc3Qgdj10aGlzLndvdC53dFRhYmxlLmdldFJvd0hlaWdodCho'@;
put 'KTtmKz12b2lkIDA9PT12P2Q6dixoKz0xfXJldHVybiBmfWFkanVzdEVsZW1lbnRzU2l6ZSgpe3RoaXMudXBkYXRlVHJpbW1pbmdDb250YWluZXIoKSx0aGlzLm5lZWRGdWxsUmVuZGVyJiYodGhpcy5hZGp1c3RSb290RWxlbWVudFNpemUoKSx0aGlzLmFkanVzdFJvb3RDaGlsZHJlblNpemUo'@;
put 'KSl9YWRqdXN0Um9vdEVsZW1lbnRTaXplKCl7Y29uc3R7d3RUYWJsZTpsLHd0Vmlld3BvcnQ6YX09dGhpcy53b3Qse3Jvb3REb2N1bWVudDpkLHJvb3RXaW5kb3c6aH09dGhpcy5kb21CaW5kaW5ncyx2PXRoaXMuY2xvbmUud3RUYWJsZS5ob2xkZXIucGFyZW50Tm9kZS5zdHlsZSxNPXRoaXMu'@;
put 'd3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJwcmV2ZW50T3ZlcmZsb3ciKTtpZih0aGlzLnRyaW1taW5nQ29udGFpbmVyIT09aHx8Imhvcml6b250YWwiPT09TSl7bGV0IFo9YS5nZXRXb3Jrc3BhY2VXaWR0aCgpO2EuaGFzVmVydGljYWxTY3JvbGwoKSYmKFotPWYwKGQpKSxaPU1hdGgubWluKFos'@;
put 'bC53dFJvb3RFbGVtZW50LnNjcm9sbFdpZHRoKSx2LndpZHRoPWAke1p9cHhgfWVsc2Ugdi53aWR0aD0iIjt0aGlzLmNsb25lLnd0VGFibGUuaG9sZGVyLnN0eWxlLndpZHRoPXYud2lkdGg7bGV0IEQ9eHUodGhpcy5jbG9uZS53dFRhYmxlLlRBQkxFKTtsLmhhc0RlZmluZWRTaXplKCl8fChE'@;
put 'PTApLHYuaGVpZ2h0PWAke0R9cHhgfWFkanVzdFJvb3RDaGlsZHJlblNpemUoKXtjb25zdHtob2xkZXI6bH09dGhpcy5jbG9uZS53dFRhYmxlLGE9dksodGhpcy53b3QpLGQ9dGhpcy53b3Quc2VsZWN0aW9uTWFuYWdlci5nZXRGb2N1c1NlbGVjdGlvbigpP3BhcnNlSW50KGEuaGVpZ2h0LDEw'@;
put 'KS8yOjA7dGhpcy5jbG9uZS53dFRhYmxlLmhpZGVyLnN0eWxlLndpZHRoPXRoaXMuaGlkZXIuc3R5bGUud2lkdGgsbC5zdHlsZS53aWR0aD1sLnBhcmVudE5vZGUuc3R5bGUud2lkdGgsbC5zdHlsZS5oZWlnaHQ9YCR7cGFyc2VJbnQobC5wYXJlbnROb2RlLnN0eWxlLmhlaWdodCwxMCkrZH1w'@;
put 'eGB9YXBwbHlUb0RPTSgpe2NvbnN0IGw9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInRvdGFsUm93cyIpO2lmKCJudW1iZXIiPT10eXBlb2YgdGhpcy53b3Qud3RWaWV3cG9ydC5yb3dzUmVuZGVyQ2FsY3VsYXRvci5zdGFydFBvc2l0aW9uKXRoaXMuc3ByZWFkZXIuc3R5bGUudG9wPWAk'@;
put 'e3RoaXMud290Lnd0Vmlld3BvcnQucm93c1JlbmRlckNhbGN1bGF0b3Iuc3RhcnRQb3NpdGlvbn1weGA7ZWxzZXtpZigwIT09bCl0aHJvdyBuZXcgRXJyb3IoIkluY29ycmVjdCB2YWx1ZSBvZiB0aGUgcm93c1JlbmRlckNhbGN1bGF0b3IiKTt0aGlzLnNwcmVhZGVyLnN0eWxlLnRvcD0iMCJ9'@;
put 'dGhpcy5zcHJlYWRlci5zdHlsZS5ib3R0b209IiIsdGhpcy5uZWVkRnVsbFJlbmRlciYmdGhpcy5zeW5jT3ZlcmxheU9mZnNldCgpfXN5bmNPdmVybGF5T2Zmc2V0KCl7Y29uc3QgbD10aGlzLmlzUnRsKCk/InJpZ2h0IjoibGVmdCIse3NwcmVhZGVyOmF9PXRoaXMuY2xvbmUud3RUYWJsZTth'@;
put 'LnN0eWxlW2xdPSJudW1iZXIiPT10eXBlb2YgdGhpcy53b3Qud3RWaWV3cG9ydC5jb2x1bW5zUmVuZGVyQ2FsY3VsYXRvci5zdGFydFBvc2l0aW9uP2Ake3RoaXMud290Lnd0Vmlld3BvcnQuY29sdW1uc1JlbmRlckNhbGN1bGF0b3Iuc3RhcnRQb3NpdGlvbn1weGA6IiJ9c2Nyb2xsVG8obCxh'@;
put 'KXtjb25zdHt3b3Q6ZCx3dFNldHRpbmdzOmh9PXRoaXMsdj0oZC5jbG9uZVNvdXJjZT9kLmNsb25lU291cmNlOmQpLnd0VGFibGUuaG9sZGVyLE09aC5nZXRTZXR0aW5nKCJjb2x1bW5IZWFkZXJzIiksWj0wPT09aC5nZXRTZXR0aW5nKCJmaXhlZFJvd3NUb3AiKSYmTS5sZW5ndGg+MCYmIXBv'@;
put 'KHYucGFyZW50Tm9kZSwiaW5uZXJCb3JkZXJUb3AiKT8xOjA7bGV0IHJlPXRoaXMuZ2V0VGFibGVQYXJlbnRPZmZzZXQoKSxjZT0wO2lmKGEmJnRoaXMud290Lnd0VGFibGUuZ2V0Um93SGVpZ2h0KGwpPnRoaXMud290Lnd0Vmlld3BvcnQuZ2V0Vmlld3BvcnRIZWlnaHQoKSYmKGE9ITEpLGEm'@;
put 'JnYub2Zmc2V0SGVpZ2h0IT09di5jbGllbnRIZWlnaHQmJihjZT1mMCh0aGlzLmRvbUJpbmRpbmdzLnJvb3REb2N1bWVudCkpLGEpe2NvbnN0IGJlPWguZ2V0U2V0dGluZygiZml4ZWRSb3dzQm90dG9tIiksRWU9aC5nZXRTZXR0aW5nKCJ0b3RhbFJvd3MiKTtyZSs9dGhpcy5zdW1DZWxsU2l6'@;
put 'ZXMoMCxsKzEpLHJlLT1kLnd0Vmlld3BvcnQuZ2V0Vmlld3BvcnRIZWlnaHQoKS10aGlzLnN1bUNlbGxTaXplcyhFZS1iZSxFZSkscmUrPTEscmUrPVp9ZWxzZSByZSs9dGhpcy5zdW1DZWxsU2l6ZXMoaC5nZXRTZXR0aW5nKCJmaXhlZFJvd3NUb3AiKSxsKTtyZXR1cm4gcmUrPWNlLEIyZSh0'@;
put 'aGlzLm1haW5UYWJsZVNjcm9sbGFibGVFbGVtZW50KT09PXJlLVomJlo+MCYmdGhpcy53b3Qud3RPdmVybGF5cy5leHBhbmRIaWRlclZlcnRpY2FsbHlCeShaKSx0aGlzLnNldFNjcm9sbFBvc2l0aW9uKHJlKX1nZXRUYWJsZVBhcmVudE9mZnNldCgpe3JldHVybiB0aGlzLm1haW5UYWJsZVNj'@;
put 'cm9sbGFibGVFbGVtZW50PT09dGhpcy5kb21CaW5kaW5ncy5yb290V2luZG93P3RoaXMud290Lnd0VGFibGUuaG9sZGVyT2Zmc2V0LnRvcDowfWdldFNjcm9sbFBvc2l0aW9uKCl7cmV0dXJuIE9PKHRoaXMubWFpblRhYmxlU2Nyb2xsYWJsZUVsZW1lbnQsdGhpcy5kb21CaW5kaW5ncy5yb290'@;
put 'V2luZG93KX1nZXRPdmVybGF5T2Zmc2V0KCl7Y29uc3R7cm9vdFdpbmRvdzpsfT10aGlzLmRvbUJpbmRpbmdzLGE9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInByZXZlbnRPdmVyZmxvdyIpO2xldCBkPTA7aWYodGhpcy50cmltbWluZ0NvbnRhaW5lcj09PWwmJighYXx8InZlcnRpY2Fs'@;
put 'IiE9PWEpKXtjb25zdCB2PXRoaXMud290Lnd0VGFibGUuZ2V0VG90YWxIZWlnaHQoKS10aGlzLmNsb25lLnd0VGFibGUuZ2V0VG90YWxIZWlnaHQoKTtkPU1hdGgubWF4KHRoaXMuZ2V0U2Nyb2xsUG9zaXRpb24oKS10aGlzLmdldFRhYmxlUGFyZW50T2Zmc2V0KCksMCksZD52JiYoZD0wKX1y'@;
put 'ZXR1cm4gZH1hZGp1c3RIZWFkZXJCb3JkZXJzUG9zaXRpb24obCl7bGV0IGE9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0mJmFyZ3VtZW50c1sxXTtjb25zdHt3dFNldHRpbmdzOmR9PXRoaXMsaD10aGlzLndvdC53dFRhYmxlLmhvbGRlci5wYXJlbnROb2RlLGY9'@;
put 'ZC5nZXRTZXR0aW5nKCJ0b3RhbENvbHVtbnMiKSx2PSJob3Jpem9udGFsIj09PWQuZ2V0U2V0dGluZygicHJldmVudE92ZXJmbG93Iik7Zj9sbyhoLCJlbXB0eUNvbHVtbnMiKTpUaShoLCJlbXB0eUNvbHVtbnMiKTtsZXQgTT0hMTtpZighYSYmIXYpe2NvbnN0IEQ9ZC5nZXRTZXR0aW5nKCJm'@;
put 'aXhlZFJvd3NUb3AiKSxaPXRoaXMuY2FjaGVkRml4ZWRSb3dzVG9wIT09RCxyZT1kLmdldFNldHRpbmcoImNvbHVtbkhlYWRlcnMiKTtpZigoWnx8MD09PUQpJiZyZS5sZW5ndGg+MCl7Y29uc3QgY2U9cG8oaCwiaW5uZXJCb3JkZXJUb3AiKTt0aGlzLmNhY2hlZEZpeGVkUm93c1RvcD1kLmdl'@;
put 'dFNldHRpbmcoImZpeGVkUm93c1RvcCIpLGx8fDA9PT1kLmdldFNldHRpbmcoInRvdGFsUm93cyIpPyhUaShoLCJpbm5lckJvcmRlclRvcCIpLE09IWNlKToobG8oaCwiaW5uZXJCb3JkZXJUb3AiKSxNPWNlKX19cmV0dXJuIE19fWNvbnN0ICRmZT17Z2V0Rmlyc3RSZW5kZXJlZFJvdygpe2Nv'@;
put 'bnN0IGM9dGhpcy5nZXRSZW5kZXJlZFJvd3NDb3VudCgpO3JldHVybiAwPT09Yz8tMTp0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygidG90YWxSb3dzIiktY30sZ2V0Rmlyc3RWaXNpYmxlUm93KCl7cmV0dXJuIHRoaXMuZ2V0Rmlyc3RSZW5kZXJlZFJvdygpfSxnZXRGaXJzdFBhcnRpYWxs'@;
put 'eVZpc2libGVSb3coKXtyZXR1cm4gdGhpcy5nZXRGaXJzdFJlbmRlcmVkUm93KCl9LGdldExhc3RSZW5kZXJlZFJvdygpe3JldHVybiAwPT09dGhpcy5nZXRSZW5kZXJlZFJvd3NDb3VudCgpPy0xOnRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJ0b3RhbFJvd3MiKS0xfSxnZXRMYXN0Vmlz'@;
put 'aWJsZVJvdygpe3JldHVybiB0aGlzLmdldExhc3RSZW5kZXJlZFJvdygpfSxnZXRMYXN0UGFydGlhbGx5VmlzaWJsZVJvdygpe3JldHVybiB0aGlzLmdldExhc3RSZW5kZXJlZFJvdygpfSxnZXRSZW5kZXJlZFJvd3NDb3VudCgpe3JldHVybiBNYXRoLm1pbih0aGlzLnd0U2V0dGluZ3MuZ2V0'@;
put 'U2V0dGluZygidG90YWxSb3dzIiksdGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoImZpeGVkUm93c0JvdHRvbSIpKX0sZ2V0VmlzaWJsZVJvd3NDb3VudCgpe3JldHVybiB0aGlzLmdldFJlbmRlcmVkUm93c0NvdW50KCl9LGdldENvbHVtbkhlYWRlcnNDb3VudDooKT0+MH07VHAoJGZlLCJN'@;
put 'SVhJTl9OQU1FIiwic3RpY2t5Um93c0JvdHRvbSIse3dyaXRhYmxlOiExLGVudW1lcmFibGU6ITF9KTtjb25zdCBLZmU9JGZlO2NsYXNzIGJLIGV4dGVuZHMgbV97Y29uc3RydWN0b3IobCxhLGQsaCl7c3VwZXIobCxhLGQsaCxJcCl9fVRsKGJLLEtmZSksVGwoYkssZEspO2NvbnN0IHFRZT1i'@;
put 'SztjbGFzcyBlZXQgZXh0ZW5kcyBGRXtjb25zdHJ1Y3RvcihsLGEsZCxoKXtzdXBlcihsLGEsSXAsZCxoKSxmdW5jdGlvbiBYUWUoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIEpRZShjKXt2YXIgbD1mdW5jdGlvbiBRUWUoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBj'@;
put 'O3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZh'@;
put 'bHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3'@;
put 'cml0YWJsZTohMH0pOmNbbF09YSxjfSh0aGlzLCJjYWNoZWRGaXhlZFJvd3NCb3R0b20iLC0xKSx0aGlzLmNhY2hlZEZpeGVkUm93c0JvdHRvbT10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiZml4ZWRSb3dzQm90dG9tIil9Y3JlYXRlVGFibGUoKXtmb3IodmFyIGw9YXJndW1lbnRzLmxl'@;
put 'bmd0aCxhPW5ldyBBcnJheShsKSxkPTA7ZDxsO2QrKylhW2RdPWFyZ3VtZW50c1tkXTtyZXR1cm4gbmV3IHFRZSguLi5hKX1zaG91bGRCZVJlbmRlcmVkKCl7cmV0dXJuIHRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJzaG91bGRSZW5kZXJCb3R0b21PdmVybGF5Iil9cmVzZXRGaXhlZFBv'@;
put 'c2l0aW9uKCl7aWYoIXRoaXMubmVlZEZ1bGxSZW5kZXJ8fCF0aGlzLnNob3VsZEJlUmVuZGVyZWQoKXx8IXRoaXMud290Lnd0VGFibGUuaG9sZGVyLnBhcmVudE5vZGUpcmV0dXJuITE7Y29uc3R7cm9vdFdpbmRvdzpsfT10aGlzLmRvbUJpbmRpbmdzLGE9dGhpcy5jbG9uZS53dFRhYmxlLmhv'@;
put 'bGRlci5wYXJlbnROb2RlO2Euc3R5bGUudG9wPSIiO2xldCBkPTA7Y29uc3QgaD10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygicHJldmVudE92ZXJmbG93Iik7dGhpcy50cmltbWluZ0NvbnRhaW5lciE9PWx8fGgmJiJ2ZXJ0aWNhbCI9PT1oPyhkPXRoaXMuZ2V0U2Nyb2xsUG9zaXRpb24o'@;
put 'KSx0aGlzLnJlcG9zaXRpb25PdmVybGF5KCkpOihkPXRoaXMuZ2V0T3ZlcmxheU9mZnNldCgpLGEuc3R5bGUuYm90dG9tPWAke2R9cHhgKTtjb25zdCBmPXRoaXMuYWRqdXN0SGVhZGVyQm9yZGVyc1Bvc2l0aW9uKGQpO3JldHVybiB0aGlzLmFkanVzdEVsZW1lbnRzU2l6ZSgpLGZ9cmVwb3Np'@;
put 'dGlvbk92ZXJsYXkoKXtjb25zdHt3dFRhYmxlOmwsd3RWaWV3cG9ydDphfT10aGlzLndvdCx7cm9vdERvY3VtZW50OmR9PXRoaXMuZG9tQmluZGluZ3MsaD10aGlzLmNsb25lLnd0VGFibGUuaG9sZGVyLnBhcmVudE5vZGU7bGV0IGY9MDthLmhhc1ZlcnRpY2FsU2Nyb2xsKCl8fChmKz1hLmdl'@;
put 'dFdvcmtzcGFjZUhlaWdodCgpLWwuZ2V0VG90YWxIZWlnaHQoKSksYS5oYXNWZXJ0aWNhbFNjcm9sbCgpJiZhLmhhc0hvcml6b250YWxTY3JvbGwoKSYmKGYrPWYwKGQpKSxoLnN0eWxlLmJvdHRvbT1gJHtmfXB4YH1zZXRTY3JvbGxQb3NpdGlvbihsKXtjb25zdHtyb290V2luZG93OmF9PXRo'@;
put 'aXMuZG9tQmluZGluZ3MsZD10aGlzLm1haW5UYWJsZVNjcm9sbGFibGVFbGVtZW50O2xldCBoPSExO2lmKGQ9PT1hJiZsIT09YS5zY3JvbGxZKXtjb25zdCBmPWEuc2Nyb2xsWTthLnNjcm9sbFRvKExPKGEpLHRvcCksaD1mIT09YS5zY3JvbGxZfWVsc2UgaWYobCE9PWQuc2Nyb2xsVG9wKXtj'@;
put 'b25zdCBmPWQuc2Nyb2xsVG9wO2Quc2Nyb2xsVG9wPWwsaD1mIT09ZC5zY3JvbGxUb3B9cmV0dXJuIGh9b25TY3JvbGwoKXt0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygib25TY3JvbGxIb3Jpem9udGFsbHkiKX1zdW1DZWxsU2l6ZXMobCxhKXtjb25zdHt3dFRhYmxlOmQsc3R5bGVzSGFu'@;
put 'ZGxlcjpofT10aGlzLndvdCxmPWguZ2V0RGVmYXVsdFJvd0hlaWdodCgpO2xldCB2PWwsTT0wO2Zvcig7djxhOyl7Y29uc3QgRD1kLmdldFJvd0hlaWdodCh2KTtNKz12b2lkIDA9PT1EP2Y6RCx2Kz0xfXJldHVybiBNfWFkanVzdEVsZW1lbnRzU2l6ZSgpe3RoaXMudXBkYXRlVHJpbW1pbmdD'@;
put 'b250YWluZXIoKSx0aGlzLm5lZWRGdWxsUmVuZGVyJiYodGhpcy5hZGp1c3RSb290RWxlbWVudFNpemUoKSx0aGlzLmFkanVzdFJvb3RDaGlsZHJlblNpemUoKSl9YWRqdXN0Um9vdEVsZW1lbnRTaXplKCl7Y29uc3R7d3RUYWJsZTpsLHd0Vmlld3BvcnQ6YX09dGhpcy53b3Qse3Jvb3REb2N1'@;
put 'bWVudDpkLHJvb3RXaW5kb3c6aH09dGhpcy5kb21CaW5kaW5ncyx2PXRoaXMuY2xvbmUud3RUYWJsZS5ob2xkZXIucGFyZW50Tm9kZS5zdHlsZSxNPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJwcmV2ZW50T3ZlcmZsb3ciKTtpZih0aGlzLnRyaW1taW5nQ29udGFpbmVyIT09aHx8Imhv'@;
put 'cml6b250YWwiPT09TSl7bGV0IFo9YS5nZXRXb3Jrc3BhY2VXaWR0aCgpO2EuaGFzVmVydGljYWxTY3JvbGwoKSYmKFotPWYwKGQpKSxaPU1hdGgubWluKFosbC53dFJvb3RFbGVtZW50LnNjcm9sbFdpZHRoKSx2LndpZHRoPWAke1p9cHhgfWVsc2Ugdi53aWR0aD0iIjt0aGlzLmNsb25lLnd0'@;
put 'VGFibGUuaG9sZGVyLnN0eWxlLndpZHRoPXYud2lkdGg7bGV0IEQ9eHUodGhpcy5jbG9uZS53dFRhYmxlLlRBQkxFKTtsLmhhc0RlZmluZWRTaXplKCl8fChEPTApLHYuaGVpZ2h0PWAke0R9cHhgfWFkanVzdFJvb3RDaGlsZHJlblNpemUoKXtjb25zdHtob2xkZXI6bH09dGhpcy5jbG9uZS53'@;
put 'dFRhYmxlO3RoaXMuY2xvbmUud3RUYWJsZS5oaWRlci5zdHlsZS53aWR0aD10aGlzLmhpZGVyLnN0eWxlLndpZHRoLGwuc3R5bGUud2lkdGg9bC5wYXJlbnROb2RlLnN0eWxlLndpZHRoLGwuc3R5bGUuaGVpZ2h0PWwucGFyZW50Tm9kZS5zdHlsZS5oZWlnaHR9YXBwbHlUb0RPTSgpe2NvbnN0'@;
put 'IGw9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInRvdGFsUm93cyIpO2lmKCJudW1iZXIiPT10eXBlb2YgdGhpcy53b3Qud3RWaWV3cG9ydC5yb3dzUmVuZGVyQ2FsY3VsYXRvci5zdGFydFBvc2l0aW9uKXRoaXMuc3ByZWFkZXIuc3R5bGUudG9wPWAke3RoaXMud290Lnd0Vmlld3BvcnQu'@;
put 'cm93c1JlbmRlckNhbGN1bGF0b3Iuc3RhcnRQb3NpdGlvbn1weGA7ZWxzZXtpZigwIT09bCl0aHJvdyBuZXcgRXJyb3IoIkluY29ycmVjdCB2YWx1ZSBvZiB0aGUgcm93c1JlbmRlckNhbGN1bGF0b3IiKTt0aGlzLnNwcmVhZGVyLnN0eWxlLnRvcD0iMCJ9dGhpcy5zcHJlYWRlci5zdHlsZS5i'@;
put 'b3R0b209IiIsdGhpcy5uZWVkRnVsbFJlbmRlciYmdGhpcy5zeW5jT3ZlcmxheU9mZnNldCgpfXN5bmNPdmVybGF5T2Zmc2V0KCl7Y29uc3QgbD10aGlzLmlzUnRsKCk/InJpZ2h0IjoibGVmdCIse3NwcmVhZGVyOmF9PXRoaXMuY2xvbmUud3RUYWJsZTthLnN0eWxlW2xdPSJudW1iZXIiPT10'@;
put 'eXBlb2YgdGhpcy53b3Qud3RWaWV3cG9ydC5jb2x1bW5zUmVuZGVyQ2FsY3VsYXRvci5zdGFydFBvc2l0aW9uP2Ake3RoaXMud290Lnd0Vmlld3BvcnQuY29sdW1uc1JlbmRlckNhbGN1bGF0b3Iuc3RhcnRQb3NpdGlvbn1weGA6IiJ9c2Nyb2xsVG8obCxhKXtsZXQgZD10aGlzLmdldFRhYmxl'@;
put 'UGFyZW50T2Zmc2V0KCk7Y29uc3QgZj0odGhpcy53b3QuY2xvbmVTb3VyY2U/dGhpcy53b3QuY2xvbmVTb3VyY2U6dGhpcy53b3QpLnd0VGFibGUuaG9sZGVyO2xldCB2PTA7YSYmZi5vZmZzZXRIZWlnaHQhPT1mLmNsaWVudEhlaWdodCYmKHY9ZjAodGhpcy5kb21CaW5kaW5ncy5yb290RG9j'@;
put 'dW1lbnQpKSxhPyhkKz10aGlzLnN1bUNlbGxTaXplcygwLGwrMSksZC09dGhpcy53b3Qud3RWaWV3cG9ydC5nZXRWaWV3cG9ydEhlaWdodCgpLGQrPTEpOmQrPXRoaXMuc3VtQ2VsbFNpemVzKHRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJmaXhlZFJvd3NCb3R0b20iKSxsKSxkKz12LHRo'@;
put 'aXMuc2V0U2Nyb2xsUG9zaXRpb24oZCl9Z2V0VGFibGVQYXJlbnRPZmZzZXQoKXtyZXR1cm4gdGhpcy5tYWluVGFibGVTY3JvbGxhYmxlRWxlbWVudD09PXRoaXMuZG9tQmluZGluZ3Mucm9vdFdpbmRvdz90aGlzLndvdC53dFRhYmxlLmhvbGRlck9mZnNldC50b3A6MH1nZXRTY3JvbGxQb3Np'@;
put 'dGlvbigpe3JldHVybiBPTyh0aGlzLm1haW5UYWJsZVNjcm9sbGFibGVFbGVtZW50LHRoaXMuZG9tQmluZGluZ3Mucm9vdFdpbmRvdyl9Z2V0T3ZlcmxheU9mZnNldCgpe2NvbnN0e3Jvb3RXaW5kb3c6bH09dGhpcy5kb21CaW5kaW5ncyxhPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJw'@;
put 'cmV2ZW50T3ZlcmZsb3ciKTtsZXQgZD0wO2lmKHRoaXMudHJpbW1pbmdDb250YWluZXI9PT1sJiYoIWF8fCJ2ZXJ0aWNhbCIhPT1hKSl7Y29uc3QgaD10aGlzLndvdC53dFRhYmxlLmdldFRvdGFsSGVpZ2h0KCksdj1oLXRoaXMuY2xvbmUud3RUYWJsZS5nZXRUb3RhbEhlaWdodCgpLE09dGhp'@;
put 'cy5kb21CaW5kaW5ncy5yb290RG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodDtkPU1hdGgubWF4KHRoaXMuZ2V0VGFibGVQYXJlbnRPZmZzZXQoKS10aGlzLmdldFNjcm9sbFBvc2l0aW9uKCktTStoLDApLGQ+diYmKGQ9MCl9cmV0dXJuIGR9YWRqdXN0SGVhZGVyQm9yZGVy'@;
put 'c1Bvc2l0aW9uKGwpe2NvbnN0IGE9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoImZpeGVkUm93c0JvdHRvbSIpLGQ9dGhpcy5jYWNoZWRGaXhlZFJvd3NCb3R0b20hPT1hLGg9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoImNvbHVtbkhlYWRlcnMiKTtsZXQgZj0hMTtpZigoZHx8MD09'@;
put 'PWEpJiZoLmxlbmd0aD4wKXtjb25zdCB2PXRoaXMud290Lnd0VGFibGUuaG9sZGVyLnBhcmVudE5vZGUsTT1wbyh2LCJpbm5lckJvcmRlckJvdHRvbSIpO3RoaXMuY2FjaGVkRml4ZWRSb3dzQm90dG9tPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJmaXhlZFJvd3NCb3R0b20iKSxsfHww'@;
put 'PT09dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInRvdGFsUm93cyIpPyhUaSh2LCJpbm5lckJvcmRlckJvdHRvbSIpLGY9IU0pOihsbyh2LCJpbm5lckJvcmRlckJvdHRvbSIpLGY9TSl9cmV0dXJuIGZ9fWNvbnN0IHFmZT17Z2V0Rmlyc3RSZW5kZXJlZFJvdygpe2NvbnN0IGM9dGhpcy5k'@;
put 'YXRhQWNjZXNzT2JqZWN0LnN0YXJ0Um93UmVuZGVyZWQ7cmV0dXJuIG51bGw9PT1jPy0xOmN9LGdldEZpcnN0VmlzaWJsZVJvdygpe2NvbnN0IGM9dGhpcy5kYXRhQWNjZXNzT2JqZWN0LnN0YXJ0Um93VmlzaWJsZTtyZXR1cm4gbnVsbD09PWM/LTE6Y30sZ2V0Rmlyc3RQYXJ0aWFsbHlWaXNp'@;
put 'YmxlUm93KCl7Y29uc3QgYz10aGlzLmRhdGFBY2Nlc3NPYmplY3Quc3RhcnRSb3dQYXJ0aWFsbHlWaXNpYmxlO3JldHVybiBudWxsPT09Yz8tMTpjfSxnZXRMYXN0UmVuZGVyZWRSb3coKXtjb25zdCBjPXRoaXMuZGF0YUFjY2Vzc09iamVjdC5lbmRSb3dSZW5kZXJlZDtyZXR1cm4gbnVsbD09'@;
put 'PWM/LTE6Y30sZ2V0TGFzdFZpc2libGVSb3coKXtjb25zdCBjPXRoaXMuZGF0YUFjY2Vzc09iamVjdC5lbmRSb3dWaXNpYmxlO3JldHVybiBudWxsPT09Yz8tMTpjfSxnZXRMYXN0UGFydGlhbGx5VmlzaWJsZVJvdygpe2NvbnN0IGM9dGhpcy5kYXRhQWNjZXNzT2JqZWN0LmVuZFJvd1BhcnRp'@;
put 'YWxseVZpc2libGU7cmV0dXJuIG51bGw9PT1jPy0xOmN9LGdldFJlbmRlcmVkUm93c0NvdW50KCl7cmV0dXJuIHRoaXMuZGF0YUFjY2Vzc09iamVjdC5jb3VudFJvd3NSZW5kZXJlZH0sZ2V0VmlzaWJsZVJvd3NDb3VudCgpe3JldHVybiB0aGlzLmRhdGFBY2Nlc3NPYmplY3QuY291bnRSb3dz'@;
put 'VmlzaWJsZX0sZ2V0Q29sdW1uSGVhZGVyc0NvdW50KCl7cmV0dXJuIHRoaXMuZGF0YUFjY2Vzc09iamVjdC5jb2x1bW5IZWFkZXJzLmxlbmd0aH19O1RwKHFmZSwiTUlYSU5fTkFNRSIsImNhbGN1bGF0ZWRSb3dzIix7d3JpdGFibGU6ITEsZW51bWVyYWJsZTohMX0pO2NvbnN0IFhmZT1xZmUs'@;
put 'SmZlPXtnZXRGaXJzdFJlbmRlcmVkQ29sdW1uKCl7cmV0dXJuIDA9PT10aGlzLmdldFJlbmRlcmVkQ29sdW1uc0NvdW50KCk/LTE6MH0sZ2V0Rmlyc3RWaXNpYmxlQ29sdW1uKCl7cmV0dXJuIHRoaXMuZ2V0Rmlyc3RSZW5kZXJlZENvbHVtbigpfSxnZXRGaXJzdFBhcnRpYWxseVZpc2libGVD'@;
put 'b2x1bW4oKXtyZXR1cm4gdGhpcy5nZXRGaXJzdFJlbmRlcmVkQ29sdW1uKCl9LGdldExhc3RSZW5kZXJlZENvbHVtbigpe3JldHVybiB0aGlzLmdldFJlbmRlcmVkQ29sdW1uc0NvdW50KCktMX0sZ2V0TGFzdFZpc2libGVDb2x1bW4oKXtyZXR1cm4gdGhpcy5nZXRMYXN0UmVuZGVyZWRDb2x1'@;
put 'bW4oKX0sZ2V0TGFzdFBhcnRpYWxseVZpc2libGVDb2x1bW4oKXtyZXR1cm4gdGhpcy5nZXRMYXN0UmVuZGVyZWRDb2x1bW4oKX0sZ2V0UmVuZGVyZWRDb2x1bW5zQ291bnQoKXtyZXR1cm4gTWF0aC5taW4odGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInRvdGFsQ29sdW1ucyIpLHRoaXMu'@;
put 'd3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJmaXhlZENvbHVtbnNTdGFydCIpKX0sZ2V0VmlzaWJsZUNvbHVtbnNDb3VudCgpe3JldHVybiB0aGlzLmdldFJlbmRlcmVkQ29sdW1uc0NvdW50KCl9LGdldFJvd0hlYWRlcnNDb3VudCgpe3JldHVybiB0aGlzLmRhdGFBY2Nlc3NPYmplY3Qucm93SGVh'@;
put 'ZGVycy5sZW5ndGh9fTtUcChKZmUsIk1JWElOX05BTUUiLCJzdGlja3lDb2x1bW5zU3RhcnQiLHt3cml0YWJsZTohMSxlbnVtZXJhYmxlOiExfSk7Y29uc3QgeUs9SmZlO2NsYXNzIF9LIGV4dGVuZHMgbV97Y29uc3RydWN0b3IobCxhLGQsaCl7c3VwZXIobCxhLGQsaCxLNyl9fVRsKF9LLFhm'@;
put 'ZSksVGwoX0sseUspO2NvbnN0IHJldD1fSztjbGFzcyBpZXQgZXh0ZW5kcyBGRXtjb25zdHJ1Y3RvcihsLGEsZCxoKXtzdXBlcihsLGEsSzcsZCxoKX1jcmVhdGVUYWJsZSgpe2Zvcih2YXIgbD1hcmd1bWVudHMubGVuZ3RoLGE9bmV3IEFycmF5KGwpLGQ9MDtkPGw7ZCsrKWFbZF09YXJndW1l'@;
put 'bnRzW2RdO3JldHVybiBuZXcgcmV0KC4uLmEpfXNob3VsZEJlUmVuZGVyZWQoKXtyZXR1cm4gdGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInNob3VsZFJlbmRlcklubGluZVN0YXJ0T3ZlcmxheSIpfXJlc2V0Rml4ZWRQb3NpdGlvbigpe2NvbnN0e3d0VGFibGU6bH09dGhpcy53b3Q7aWYo'@;
put 'IXRoaXMubmVlZEZ1bGxSZW5kZXJ8fCF0aGlzLnNob3VsZEJlUmVuZGVyZWQoKXx8IWwuaG9sZGVyLnBhcmVudE5vZGUpcmV0dXJuITE7Y29uc3R7cm9vdFdpbmRvdzphfT10aGlzLmRvbUJpbmRpbmdzLGQ9dGhpcy5jbG9uZS53dFRhYmxlLmhvbGRlci5wYXJlbnROb2RlLGg9dGhpcy53dFNl'@;
put 'dHRpbmdzLmdldFNldHRpbmcoInByZXZlbnRPdmVyZmxvdyIpO2xldCBmPTA7dGhpcy50cmltbWluZ0NvbnRhaW5lciE9PWF8fGgmJiJob3Jpem9udGFsIj09PWg/KGY9dGhpcy5nZXRTY3JvbGxQb3NpdGlvbigpLENFKGQpKTooZj10aGlzLmdldE92ZXJsYXlPZmZzZXQoKSoodGhpcy5pc1J0'@;
put 'bCgpPy0xOjEpLFBPKGQsYCR7Zn1weGAsIjBweCIpKTtjb25zdCB2PXRoaXMuYWRqdXN0SGVhZGVyQm9yZGVyc1Bvc2l0aW9uKGYpO3JldHVybiB0aGlzLmFkanVzdEVsZW1lbnRzU2l6ZSgpLHZ9c2V0U2Nyb2xsUG9zaXRpb24obCl7Y29uc3R7cm9vdFdpbmRvdzphfT10aGlzLmRvbUJpbmRp'@;
put 'bmdzO2xldCBkPSExO3RoaXMuaXNSdGwoKSYmKGw9LWwpO2NvbnN0IGg9dGhpcy5tYWluVGFibGVTY3JvbGxhYmxlRWxlbWVudDtpZihoPT09YSYmbCE9PWEuc2Nyb2xsWCl7Y29uc3QgZj1hLnNjcm9sbFg7YS5zY3JvbGxUbyhsLF8kKGEpKSxkPWYhPT1hLnNjcm9sbFh9ZWxzZSBpZihsIT09'@;
put 'aC5zY3JvbGxMZWZ0KXtjb25zdCBmPWguc2Nyb2xsTGVmdDtoLnNjcm9sbExlZnQ9bCxkPWYhPT1oLnNjcm9sbExlZnR9cmV0dXJuIGR9b25TY3JvbGwoKXt0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygib25TY3JvbGxWZXJ0aWNhbGx5Iil9c3VtQ2VsbFNpemVzKGwsYSl7Y29uc3QgZD10'@;
put 'aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiZGVmYXVsdENvbHVtbldpZHRoIik7bGV0IGg9bCxmPTA7Zm9yKDtoPGE7KWYrPXRoaXMud290Lnd0VGFibGUuZ2V0Q29sdW1uV2lkdGgoaCl8fGQsaCs9MTtyZXR1cm4gZn1hZGp1c3RFbGVtZW50c1NpemUoKXt0aGlzLnVwZGF0ZVRyaW1taW5n'@;
put 'Q29udGFpbmVyKCksdGhpcy5uZWVkRnVsbFJlbmRlciYmKHRoaXMuYWRqdXN0Um9vdEVsZW1lbnRTaXplKCksdGhpcy5hZGp1c3RSb290Q2hpbGRyZW5TaXplKCkpfWFkanVzdFJvb3RFbGVtZW50U2l6ZSgpe2NvbnN0e3d0VGFibGU6bCx3dFZpZXdwb3J0OmF9PXRoaXMud290LHtyb290RG9j'@;
put 'dW1lbnQ6ZCxyb290V2luZG93Omh9PXRoaXMuZG9tQmluZGluZ3Msdj10aGlzLmNsb25lLnd0VGFibGUuaG9sZGVyLnBhcmVudE5vZGUuc3R5bGUsTT10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygicHJldmVudE92ZXJmbG93Iik7aWYodGhpcy50cmltbWluZ0NvbnRhaW5lciE9PWh8fCJ2'@;
put 'ZXJ0aWNhbCI9PT1NKXtsZXQgWj1hLmdldFdvcmtzcGFjZUhlaWdodCgpO2EuaGFzSG9yaXpvbnRhbFNjcm9sbCgpJiYoWi09ZjAoZCkpLFo9TWF0aC5taW4oWixsLnd0Um9vdEVsZW1lbnQuc2Nyb2xsSGVpZ2h0KSx2LmhlaWdodD1gJHtafXB4YH1lbHNlIHYuaGVpZ2h0PSIiO3RoaXMuY2xv'@;
put 'bmUud3RUYWJsZS5ob2xkZXIuc3R5bGUuaGVpZ2h0PXYuaGVpZ2h0O2NvbnN0IEQ9c3UodGhpcy5jbG9uZS53dFRhYmxlLlRBQkxFKTt2LndpZHRoPWAke0R9cHhgfWFkanVzdFJvb3RDaGlsZHJlblNpemUoKXtjb25zdHtob2xkZXI6bH09dGhpcy5jbG9uZS53dFRhYmxlLGE9dksodGhpcy53'@;
put 'b3QpLGQ9dGhpcy53b3Quc2VsZWN0aW9uTWFuYWdlci5nZXRGb2N1c1NlbGVjdGlvbigpP3BhcnNlSW50KGEud2lkdGgsMTApLzI6MDt0aGlzLmNsb25lLnd0VGFibGUuaGlkZXIuc3R5bGUuaGVpZ2h0PXRoaXMuaGlkZXIuc3R5bGUuaGVpZ2h0LGwuc3R5bGUuaGVpZ2h0PWwucGFyZW50Tm9k'@;
put 'ZS5zdHlsZS5oZWlnaHQsbC5zdHlsZS53aWR0aD1gJHtwYXJzZUludChsLnBhcmVudE5vZGUuc3R5bGUud2lkdGgsMTApK2R9cHhgfWFwcGx5VG9ET00oKXtjb25zdCBsPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJ0b3RhbENvbHVtbnMiKSxhPXRoaXMuaXNSdGwoKT8icmlnaHQiOiJs'@;
put 'ZWZ0IjtpZigibnVtYmVyIj09dHlwZW9mIHRoaXMud290Lnd0Vmlld3BvcnQuY29sdW1uc1JlbmRlckNhbGN1bGF0b3Iuc3RhcnRQb3NpdGlvbil0aGlzLnNwcmVhZGVyLnN0eWxlW2FdPWAke3RoaXMud290Lnd0Vmlld3BvcnQuY29sdW1uc1JlbmRlckNhbGN1bGF0b3Iuc3RhcnRQb3NpdGlv'@;
put 'bn1weGA7ZWxzZXtpZigwIT09bCl0aHJvdyBuZXcgRXJyb3IoIkluY29ycmVjdCB2YWx1ZSBvZiB0aGUgY29sdW1uc1JlbmRlckNhbGN1bGF0b3IiKTt0aGlzLnNwcmVhZGVyLnN0eWxlW2FdPSIwIn10aGlzLmlzUnRsKCk/dGhpcy5zcHJlYWRlci5zdHlsZS5sZWZ0PSIiOnRoaXMuc3ByZWFk'@;
put 'ZXIuc3R5bGUucmlnaHQ9IiIsdGhpcy5uZWVkRnVsbFJlbmRlciYmdGhpcy5zeW5jT3ZlcmxheU9mZnNldCgpfXN5bmNPdmVybGF5T2Zmc2V0KCl7dGhpcy5jbG9uZS53dFRhYmxlLnNwcmVhZGVyLnN0eWxlLnRvcD0ibnVtYmVyIj09dHlwZW9mIHRoaXMud290Lnd0Vmlld3BvcnQucm93c1Jl'@;
put 'bmRlckNhbGN1bGF0b3Iuc3RhcnRQb3NpdGlvbj9gJHt0aGlzLndvdC53dFZpZXdwb3J0LnJvd3NSZW5kZXJDYWxjdWxhdG9yLnN0YXJ0UG9zaXRpb259cHhgOiIifXNjcm9sbFRvKGwsYSl7Y29uc3R7d3RTZXR0aW5nczpkfT10aGlzLGg9ZC5nZXRTZXR0aW5nKCJyb3dIZWFkZXJzIiksZj1k'@;
put 'LmdldFNldHRpbmcoImZpeGVkQ29sdW1uc1N0YXJ0IiksTT0odGhpcy53b3QuY2xvbmVTb3VyY2U/dGhpcy53b3QuY2xvbmVTb3VyY2U6dGhpcy53b3QpLnd0VGFibGUuaG9sZGVyLEQ9MD09PWYmJmgubGVuZ3RoPjAmJiFwbyhNLnBhcmVudE5vZGUsImlubmVyQm9yZGVySW5saW5lU3RhcnQi'@;
put 'KT8xOjA7bGV0IFo9dGhpcy5nZXRUYWJsZVBhcmVudE9mZnNldCgpLHJlPTA7cmV0dXJuIGEmJnRoaXMud290Lnd0VGFibGUuZ2V0Q29sdW1uV2lkdGgobCk+dGhpcy53b3Qud3RWaWV3cG9ydC5nZXRWaWV3cG9ydFdpZHRoKCkmJihhPSExKSxhJiZNLm9mZnNldFdpZHRoIT09TS5jbGllbnRX'@;
put 'aWR0aCYmKHJlPWYwKHRoaXMuZG9tQmluZGluZ3Mucm9vdERvY3VtZW50KSksYT8oWis9dGhpcy5zdW1DZWxsU2l6ZXMoMCxsKzEpLFotPXRoaXMud290Lnd0Vmlld3BvcnQuZ2V0Vmlld3BvcnRXaWR0aCgpLForPUQpOlorPXRoaXMuc3VtQ2VsbFNpemVzKHRoaXMud3RTZXR0aW5ncy5nZXRT'@;
put 'ZXR0aW5nKCJmaXhlZENvbHVtbnNTdGFydCIpLGwpLForPXJlLGoyZSh0aGlzLm1haW5UYWJsZVNjcm9sbGFibGVFbGVtZW50KT09PVotRCYmRD4wJiZ0aGlzLndvdC53dE92ZXJsYXlzLmV4cGFuZEhpZGVySG9yaXpvbnRhbGx5QnkoRCksdGhpcy5zZXRTY3JvbGxQb3NpdGlvbihaKX1nZXRU'@;
put 'YWJsZVBhcmVudE9mZnNldCgpe2xldCBhPTA7cmV0dXJuIXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJwcmV2ZW50T3ZlcmZsb3ciKSYmdGhpcy50cmltbWluZ0NvbnRhaW5lcj09PXRoaXMuZG9tQmluZGluZ3Mucm9vdFdpbmRvdyYmKGE9dGhpcy53b3Qud3RUYWJsZS5ob2xkZXJPZmZz'@;
put 'ZXQubGVmdCksYX1nZXRTY3JvbGxQb3NpdGlvbigpe3JldHVybiBNYXRoLmFicyh3JCh0aGlzLm1haW5UYWJsZVNjcm9sbGFibGVFbGVtZW50LHRoaXMuZG9tQmluZGluZ3Mucm9vdFdpbmRvdykpfWdldE92ZXJsYXlPZmZzZXQoKXtjb25zdHtyb290V2luZG93Omx9PXRoaXMuZG9tQmluZGlu'@;
put 'Z3MsYT10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygicHJldmVudE92ZXJmbG93Iik7bGV0IGQ9MDtyZXR1cm4gdGhpcy50cmltbWluZ0NvbnRhaW5lciE9PWx8fGEmJiJob3Jpem9udGFsIj09PWF8fChkPXRoaXMuaXNSdGwoKT9NYXRoLmFicyhNYXRoLm1pbih0aGlzLmdldFRhYmxlUGFy'@;
put 'ZW50T2Zmc2V0KCktdGhpcy5nZXRTY3JvbGxQb3NpdGlvbigpLDApKTpNYXRoLm1heCh0aGlzLmdldFNjcm9sbFBvc2l0aW9uKCktdGhpcy5nZXRUYWJsZVBhcmVudE9mZnNldCgpLDApLGQ+dGhpcy53b3Qud3RUYWJsZS5nZXRUb3RhbFdpZHRoKCktdGhpcy5jbG9uZS53dFRhYmxlLmdldFRv'@;
put 'dGFsV2lkdGgoKSYmKGQ9MCkpLGR9YWRqdXN0SGVhZGVyQm9yZGVyc1Bvc2l0aW9uKGwpe2NvbnN0e3d0U2V0dGluZ3M6YX09dGhpcyxkPXRoaXMud290Lnd0VGFibGUuaG9sZGVyLnBhcmVudE5vZGUsaD1hLmdldFNldHRpbmcoInJvd0hlYWRlcnMiKSxmPWEuZ2V0U2V0dGluZygiZml4ZWRD'@;
put 'b2x1bW5zU3RhcnQiKSx2PWEuZ2V0U2V0dGluZygidG90YWxSb3dzIiksTT0idmVydGljYWwiPT09YS5nZXRTZXR0aW5nKCJwcmV2ZW50T3ZlcmZsb3ciKTt2P2xvKGQsImVtcHR5Um93cyIpOlRpKGQsImVtcHR5Um93cyIpO2xldCBEPSExO2lmKCFNKWlmKGYmJiFoLmxlbmd0aClUaShkLCJp'@;
put 'bm5lckJvcmRlckxlZnQgaW5uZXJCb3JkZXJJbmxpbmVTdGFydCIpO2Vsc2UgaWYoIWYmJmgubGVuZ3RoKXtjb25zdCBaPXBvKGQsImlubmVyQm9yZGVySW5saW5lU3RhcnQiKTtsPyhUaShkLCJpbm5lckJvcmRlckxlZnQgaW5uZXJCb3JkZXJJbmxpbmVTdGFydCIpLEQ9IVopOihsbyhkLCJp'@;
put 'bm5lckJvcmRlckxlZnQgaW5uZXJCb3JkZXJJbmxpbmVTdGFydCIpLEQ9Wil9cmV0dXJuIER9fWNsYXNzIHdLIGV4dGVuZHMgbV97Y29uc3RydWN0b3IobCxhLGQsaCl7c3VwZXIobCxhLGQsaCxxNyl9fVRsKHdLLFZmZSksVGwod0sseUspO2NvbnN0IGFldD13SztmdW5jdGlvbiBRZmUoYyxs'@;
put 'LGEpe3JldHVybihsPWZ1bmN0aW9uIG9ldChjKXt2YXIgbD1mdW5jdGlvbiBzZXQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJv'@;
put 'YmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBl'@;
put 'b2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNsYXNzIGNldCBleHRlbmRzIEZFe2NvbnN0cnVjdG9yKGwsYSxkLGgsZix2KXtzdXBlcihsLGEs'@;
put 'cTcsZCxoKSxRZmUodGhpcywidG9wT3ZlcmxheSIsdm9pZCAwKSxRZmUodGhpcywiaW5saW5lU3RhcnRPdmVybGF5Iix2b2lkIDApLHRoaXMudG9wT3ZlcmxheT1mLHRoaXMuaW5saW5lU3RhcnRPdmVybGF5PXZ9Y3JlYXRlVGFibGUoKXtmb3IodmFyIGw9YXJndW1lbnRzLmxlbmd0aCxhPW5l'@;
put 'dyBBcnJheShsKSxkPTA7ZDxsO2QrKylhW2RdPWFyZ3VtZW50c1tkXTtyZXR1cm4gbmV3IGFldCguLi5hKX1zaG91bGRCZVJlbmRlcmVkKCl7cmV0dXJuIHRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJzaG91bGRSZW5kZXJUb3BPdmVybGF5IikmJnRoaXMud3RTZXR0aW5ncy5nZXRTZXR0'@;
put 'aW5nKCJzaG91bGRSZW5kZXJJbmxpbmVTdGFydE92ZXJsYXkiKX1yZXNldEZpeGVkUG9zaXRpb24oKXtpZih0aGlzLnVwZGF0ZVRyaW1taW5nQ29udGFpbmVyKCksIXRoaXMud290Lnd0VGFibGUuaG9sZGVyLnBhcmVudE5vZGUpcmV0dXJuITE7Y29uc3QgbD10aGlzLmNsb25lLnd0VGFibGUu'@;
put 'aG9sZGVyLnBhcmVudE5vZGU7dGhpcy50cmltbWluZ0NvbnRhaW5lcj09PXRoaXMuZG9tQmluZGluZ3Mucm9vdFdpbmRvdz9QTyhsLHRoaXMuaW5saW5lU3RhcnRPdmVybGF5LmdldE92ZXJsYXlPZmZzZXQoKSoodGhpcy5pc1J0bCgpPy0xOjEpKyJweCIsYCR7dGhpcy50b3BPdmVybGF5Lmdl'@;
put 'dE92ZXJsYXlPZmZzZXQoKX1weGApOkNFKGwpO2xldCBhPXh1KHRoaXMuY2xvbmUud3RUYWJsZS5UQUJMRSk7Y29uc3QgZD1zdSh0aGlzLmNsb25lLnd0VGFibGUuVEFCTEUpO3JldHVybiB0aGlzLndvdC53dFRhYmxlLmhhc0RlZmluZWRTaXplKCl8fChhPTApLGwuc3R5bGUuaGVpZ2h0PWAk'@;
put 'e2F9cHhgLGwuc3R5bGUud2lkdGg9YCR7ZH1weGAsITF9fWNsYXNzIENLIGV4dGVuZHMgbV97Y29uc3RydWN0b3IobCxhLGQsaCl7c3VwZXIobCxhLGQsaCxCbSl9fVRsKENLLEtmZSksVGwoQ0sseUspO2NvbnN0IHVldD1DSztjbGFzcyBkZXQgZXh0ZW5kcyBGRXtjb25zdHJ1Y3RvcihsLGEs'@;
put 'ZCxoLGYsdil7c3VwZXIobCxhLEJtLGQsaCksdGhpcy5ib3R0b21PdmVybGF5PWYsdGhpcy5pbmxpbmVTdGFydE92ZXJsYXk9dn1jcmVhdGVUYWJsZSgpe2Zvcih2YXIgbD1hcmd1bWVudHMubGVuZ3RoLGE9bmV3IEFycmF5KGwpLGQ9MDtkPGw7ZCsrKWFbZF09YXJndW1lbnRzW2RdO3JldHVy'@;
put 'biBuZXcgdWV0KC4uLmEpfXNob3VsZEJlUmVuZGVyZWQoKXtyZXR1cm4gdGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInNob3VsZFJlbmRlckJvdHRvbU92ZXJsYXkiKSYmdGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInNob3VsZFJlbmRlcklubGluZVN0YXJ0T3ZlcmxheSIpfXJlc2V0'@;
put 'Rml4ZWRQb3NpdGlvbigpe2NvbnN0e3dvdDpsfT10aGlzO2lmKHRoaXMudXBkYXRlVHJpbW1pbmdDb250YWluZXIoKSwhbC53dFRhYmxlLmhvbGRlci5wYXJlbnROb2RlKXJldHVybiExO2NvbnN0IGE9dGhpcy5jbG9uZS53dFRhYmxlLmhvbGRlci5wYXJlbnROb2RlO2lmKGEuc3R5bGUudG9w'@;
put 'PSIiLHRoaXMudHJpbW1pbmdDb250YWluZXI9PT10aGlzLmRvbUJpbmRpbmdzLnJvb3RXaW5kb3cpe2NvbnN0IGY9dGhpcy5pbmxpbmVTdGFydE92ZXJsYXkuZ2V0T3ZlcmxheU9mZnNldCgpLHY9dGhpcy5ib3R0b21PdmVybGF5LmdldE92ZXJsYXlPZmZzZXQoKTthLnN0eWxlW3RoaXMuaXNS'@;
put 'dGwoKT8icmlnaHQiOiJsZWZ0Il09YCR7Zn1weGAsYS5zdHlsZS5ib3R0b209YCR7dn1weGB9ZWxzZSBDRShhKSx0aGlzLnJlcG9zaXRpb25PdmVybGF5KCk7bGV0IGQ9eHUodGhpcy5jbG9uZS53dFRhYmxlLlRBQkxFKTtjb25zdCBoPXN1KHRoaXMuY2xvbmUud3RUYWJsZS5UQUJMRSk7cmV0'@;
put 'dXJuIHRoaXMud290Lnd0VGFibGUuaGFzRGVmaW5lZFNpemUoKXx8KGQ9MCksYS5zdHlsZS5oZWlnaHQ9YCR7ZH1weGAsYS5zdHlsZS53aWR0aD1gJHtofXB4YCwhMX1yZXBvc2l0aW9uT3ZlcmxheSgpe2NvbnN0e3d0VGFibGU6bCx3dFZpZXdwb3J0OmF9PXRoaXMud290LHtyb290RG9jdW1l'@;
put 'bnQ6ZH09dGhpcy5kb21CaW5kaW5ncyxoPXRoaXMuY2xvbmUud3RUYWJsZS5ob2xkZXIucGFyZW50Tm9kZTtsZXQgZj0wO2EuaGFzVmVydGljYWxTY3JvbGwoKXx8KGYrPWEuZ2V0V29ya3NwYWNlSGVpZ2h0KCktbC5nZXRUb3RhbEhlaWdodCgpKSxhLmhhc1ZlcnRpY2FsU2Nyb2xsKCkmJmEu'@;
put 'aGFzSG9yaXpvbnRhbFNjcm9sbCgpJiYoZis9ZjAoZCkpLGguc3R5bGUuYm90dG9tPWAke2Z9cHhgfX1mdW5jdGlvbiBhUChjLGwsYSl7KGZ1bmN0aW9uIGhldChjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUg'@;
put 'ZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9KShjLGwpLGwuc2V0KGMsYSl9ZnVuY3Rpb24gd2coYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIGZldChjKXt2YXIgbD1mdW5jdGlvbiBwZXQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9s'@;
put 'LnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigi'@;
put 'c3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNb'@;
put 'bF09YSxjfWZ1bmN0aW9uIFg3KGMsbCxhKXtyZXR1cm4gYy5zZXQoZTNlKGMsbCksYSksYX1mdW5jdGlvbiBDZyhjLGwpe3JldHVybiBjLmdldChlM2UoYyxsKSl9ZnVuY3Rpb24gZTNlKGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1l'@;
put 'bnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX12YXIgYl89bmV3IFdlYWtNYXAsb1A9bmV3IFdlYWtNYXAseV89bmV3IFdlYWtNYXAsc1A9bmV3IFdlYWtNYXA7Y29uc3QgbWV0PWNsYXNz'@;
put 'IGdldHtjb25zdHJ1Y3RvcihsLGEsZCxoLGYsdil7d2codGhpcywid290IixudWxsKSxhUCh0aGlzLGJfLFtdKSx3Zyh0aGlzLCJ0b3BPdmVybGF5IixudWxsKSx3Zyh0aGlzLCJib3R0b21PdmVybGF5IixudWxsKSx3Zyh0aGlzLCJpbmxpbmVTdGFydE92ZXJsYXkiLG51bGwpLHdnKHRoaXMs'@;
put 'InRvcElubGluZVN0YXJ0Q29ybmVyT3ZlcmxheSIsbnVsbCksd2codGhpcywiYm90dG9tSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5IixudWxsKSx3Zyh0aGlzLCJicm93c2VyTGluZUhlaWdodCIsdm9pZCAwKSx3Zyh0aGlzLCJ3dFNldHRpbmdzIixudWxsKSxhUCh0aGlzLG9QLCExKSxhUCh0'@;
put 'aGlzLHlfLDApLGFQKHRoaXMsc1AsbnVsbCksd2codGhpcywicmVzaXplT2JzZXJ2ZXIiLG5ldyBSZXNpemVPYnNlcnZlcihyZT0+e0VFKCgpPT57IUFycmF5LmlzQXJyYXkocmUpfHwhcmUubGVuZ3RofHwoWDcoeV8sdGhpcyxDZyh5Xyx0aGlzKSsxKSwxMDA9PT1DZyh5Xyx0aGlzKSYmKGls'@;
put 'KCJUaGUgUmVzaXplT2JzZXJ2ZXIgY2FsbGJhY2sgd2FzIGZpcmVkIHRvbyBtYW55IHRpbWVzIGluIGRpcmVjdCBzdWNjZXNzaW9uLlxuVGhpcyBtYXkgYmUgZHVlIHRvIGFuIGluZmluaXRlIGxvb3AgY2F1c2VkIGJ5IHNldHRpbmcgYSBkeW5hbWljIGhlaWdodC93aWR0aCAoZm9yIGV4YW1w'@;
put 'bGUsIHdpdGggdGhlIGBkdmhgIHVuaXRzKSB0byBhIEhhbmRzb250YWJsZSBjb250YWluZXIncyBwYXJlbnQuIFxuVGhlIG9ic2VydmVyIHdpbGwgYmUgZGlzY29ubmVjdGVkLiIpLHRoaXMucmVzaXplT2JzZXJ2ZXIuZGlzY29ubmVjdCgpKSxudWxsIT09Q2coc1AsdGhpcykmJmNsZWFyVGlt'@;
put 'ZW91dChDZyhzUCx0aGlzKSksWDcoc1AsdGhpcyxzZXRUaW1lb3V0KCgpPT57WDcoeV8sdGhpcywwKX0sMTAwKSksdGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoIm9uQ29udGFpbmVyRWxlbWVudFJlc2l6ZSIpKX0pfSkpLHRoaXMud290PWwsdGhpcy53dFNldHRpbmdzPWgsdGhpcy5kb21C'@;
put 'aW5kaW5ncz1kLHRoaXMuZmFjYWRlR2V0dGVyPWEsdGhpcy53dFRhYmxlPXY7Y29uc3R7cm9vdERvY3VtZW50Ok0scm9vdFdpbmRvdzpEfT10aGlzLmRvbUJpbmRpbmdzO3RoaXMuaW5zdGFuY2U9dGhpcy53b3QsdGhpcy5ldmVudE1hbmFnZXI9Zix0aGlzLnNjcm9sbGJhclNpemU9ZjAoTSk7'@;
put 'Y29uc3QgWj0iaGlkZGVuIj09PUQuZ2V0Q29tcHV0ZWRTdHlsZSh2Lnd0Um9vdEVsZW1lbnQucGFyZW50Tm9kZSkuZ2V0UHJvcGVydHlWYWx1ZSgib3ZlcmZsb3ciKTt0aGlzLnNjcm9sbGFibGVFbGVtZW50PVo/di5ob2xkZXI6eUUodi5UQUJMRSksdGhpcy5pbml0T3ZlcmxheXMoKSx0aGlz'@;
put 'LmRlc3Ryb3llZD0hMSx0aGlzLmtleVByZXNzZWQ9ITEsdGhpcy5zcHJlYWRlckxhc3RTaXplPXt3aWR0aDpudWxsLGhlaWdodDpudWxsfSx0aGlzLnZlcnRpY2FsU2Nyb2xsaW5nPSExLHRoaXMuaG9yaXpvbnRhbFNjcm9sbGluZz0hMSx0aGlzLmluaXRCcm93c2VyTGluZUhlaWdodCgpLHRo'@;
put 'aXMucmVnaXN0ZXJMaXN0ZW5lcnMoKSx0aGlzLmxhc3RTY3JvbGxYPUQuc2Nyb2xsWCx0aGlzLmxhc3RTY3JvbGxZPUQuc2Nyb2xsWX1nZXRPdmVybGF5cygpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdJiZhcmd1bWVudHNbMF07Y29uc3QgYT1bLi4u'@;
put 'Q2coYl8sdGhpcyldO3JldHVybiBsJiZhLnB1c2godGhpcy53dFRhYmxlKSxhfWluaXRCcm93c2VyTGluZUhlaWdodCgpe2NvbnN0e3Jvb3RXaW5kb3c6bCxyb290RG9jdW1lbnQ6YX09dGhpcy5kb21CaW5kaW5ncyxkPWwuZ2V0Q29tcHV0ZWRTdHlsZShhLmJvZHkpLGg9cGFyc2VJbnQoZC5s'@;
put 'aW5lSGVpZ2h0LDEwKSxmPTEuMipwYXJzZUludChkLmZvbnRTaXplLDEwKTt0aGlzLmJyb3dzZXJMaW5lSGVpZ2h0PWh8fGZ9aW5pdE92ZXJsYXlzKCl7Y29uc3QgbD1bdGhpcy53b3QsdGhpcy5mYWNhZGVHZXR0ZXIsdGhpcy53dFNldHRpbmdzLHRoaXMuZG9tQmluZGluZ3NdO3RoaXMudG9w'@;
put 'T3ZlcmxheT1uZXcgJFFlKC4uLmwpLHRoaXMuYm90dG9tT3ZlcmxheT1uZXcgZWV0KC4uLmwpLHRoaXMuaW5saW5lU3RhcnRPdmVybGF5PW5ldyBpZXQoLi4ubCksdGhpcy50b3BJbmxpbmVTdGFydENvcm5lck92ZXJsYXk9bmV3IGNldCguLi5sLHRoaXMudG9wT3ZlcmxheSx0aGlzLmlubGlu'@;
put 'ZVN0YXJ0T3ZlcmxheSksdGhpcy5ib3R0b21JbmxpbmVTdGFydENvcm5lck92ZXJsYXk9bmV3IGRldCguLi5sLHRoaXMuYm90dG9tT3ZlcmxheSx0aGlzLmlubGluZVN0YXJ0T3ZlcmxheSksWDcoYl8sdGhpcyxbdGhpcy50b3BPdmVybGF5LHRoaXMuYm90dG9tT3ZlcmxheSx0aGlzLmlubGlu'@;
put 'ZVN0YXJ0T3ZlcmxheSx0aGlzLnRvcElubGluZVN0YXJ0Q29ybmVyT3ZlcmxheSx0aGlzLmJvdHRvbUlubGluZVN0YXJ0Q29ybmVyT3ZlcmxheV0pfWJlZm9yZURyYXcoKXtYNyhvUCx0aGlzLENnKGJfLHRoaXMpLnJlZHVjZSgobCxhKT0+YS5oYXNSZW5kZXJpbmdTdGF0ZUNoYW5nZWQoKXx8'@;
put 'bCwhMSkpLENnKGJfLHRoaXMpLmZvckVhY2gobD0+bC51cGRhdGVTdGF0ZU9mUmVuZGVyaW5nKCJiZWZvcmUiKSl9YWZ0ZXJEcmF3KCl7dGhpcy5zeW5jU2Nyb2xsV2l0aE1hc3RlcigpLENnKGJfLHRoaXMpLmZvckVhY2gobD0+e2NvbnN0IGE9bC5oYXNSZW5kZXJpbmdTdGF0ZUNoYW5nZWQo'@;
put 'KTtsLnVwZGF0ZVN0YXRlT2ZSZW5kZXJpbmcoImFmdGVyIiksYSYmIWwubmVlZEZ1bGxSZW5kZXImJmwucmVzZXQoKX0pfXJlZnJlc2hBbGwoKXtpZih0aGlzLndvdC5kcmF3bil7aWYoIXRoaXMud3RUYWJsZS5ob2xkZXIucGFyZW50Tm9kZSlyZXR1cm4gdm9pZCB0aGlzLmRlc3Ryb3koKTt0'@;
put 'aGlzLndvdC5kcmF3KCEwKSx0aGlzLnZlcnRpY2FsU2Nyb2xsaW5nJiZ0aGlzLmlubGluZVN0YXJ0T3ZlcmxheS5vblNjcm9sbCgpLHRoaXMuaG9yaXpvbnRhbFNjcm9sbGluZyYmdGhpcy50b3BPdmVybGF5Lm9uU2Nyb2xsKCksdGhpcy52ZXJ0aWNhbFNjcm9sbGluZz0hMSx0aGlzLmhvcml6'@;
put 'b250YWxTY3JvbGxpbmc9ITF9fXJlZ2lzdGVyTGlzdGVuZXJzKCl7Y29uc3R7cm9vdERvY3VtZW50Omwscm9vdFdpbmRvdzphfT10aGlzLmRvbUJpbmRpbmdzLHttYWluVGFibGVTY3JvbGxhYmxlRWxlbWVudDpkfT10aGlzLnRvcE92ZXJsYXkse21haW5UYWJsZVNjcm9sbGFibGVFbGVtZW50'@;
put 'Omh9PXRoaXMuaW5saW5lU3RhcnRPdmVybGF5O3RoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIobC5kb2N1bWVudEVsZW1lbnQsImtleWRvd24iLGNlPT50aGlzLm9uS2V5RG93bihjZSkpLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIobC5kb2N1bWVudEVsZW1l'@;
put 'bnQsImtleXVwIiwoKT0+dGhpcy5vbktleVVwKCkpLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIobCwidmlzaWJpbGl0eWNoYW5nZSIsKCk9PnRoaXMub25LZXlVcCgpKSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGQsInNjcm9sbCIsY2U9PnRoaXMub25U'@;
put 'YWJsZVNjcm9sbChjZSkse3Bhc3NpdmU6ITB9KSxkIT09aCYmdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihoLCJzY3JvbGwiLGNlPT50aGlzLm9uVGFibGVTY3JvbGwoY2UpLHtwYXNzaXZlOiEwfSk7Y29uc3QgZj1hLmRldmljZVBpeGVsUmF0aW8mJmEuZGV2aWNlUGl4ZWxS'@;
put 'YXRpbz4xLHY9dGhpcy5zY3JvbGxhYmxlRWxlbWVudD09PWEsTT10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygicHJldmVudFdoZWVsIiksRD17cGFzc2l2ZTp2fTtsZXQgcmU7KE18fGZ8fCFMJCgpKSYmdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcih0aGlzLnd0VGFibGUu'@;
put 'd3RSb290RWxlbWVudCwid2hlZWwiLGNlPT50aGlzLm9uQ2xvbmVXaGVlbChjZSxNKSxEKSxbdGhpcy50b3BPdmVybGF5LHRoaXMuYm90dG9tT3ZlcmxheSx0aGlzLmlubGluZVN0YXJ0T3ZlcmxheSx0aGlzLnRvcElubGluZVN0YXJ0Q29ybmVyT3ZlcmxheSx0aGlzLmJvdHRvbUlubGluZVN0'@;
put 'YXJ0Q29ybmVyT3ZlcmxheV0uZm9yRWFjaChjZT0+e3RoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoY2UuY2xvbmUud3RUYWJsZS5ob2xkZXIsIndoZWVsIixiZT0+dGhpcy5vbkNsb25lV2hlZWwoYmUsTSksRCl9KSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVy'@;
put 'KGEsInJlc2l6ZSIsKCk9PntFRSgoKT0+e2NsZWFyVGltZW91dChyZSksdGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoIm9uV2luZG93UmVzaXplIikscmU9c2V0VGltZW91dCgoKT0+e1g3KHlfLHRoaXMsMCl9LDIwMCl9KX0pLHZ8fHRoaXMucmVzaXplT2JzZXJ2ZXIub2JzZXJ2ZSh0aGlz'@;
put 'Lnd0VGFibGUud3RSb290RWxlbWVudC5wYXJlbnRFbGVtZW50KX1vblRhYmxlU2Nyb2xsKGwpe2NvbnN0IGE9dGhpcy5kb21CaW5kaW5ncy5yb290V2luZG93LGQ9dGhpcy5pbmxpbmVTdGFydE92ZXJsYXkubWFpblRhYmxlU2Nyb2xsYWJsZUVsZW1lbnQsaD10aGlzLnRvcE92ZXJsYXkubWFp'@;
put 'blRhYmxlU2Nyb2xsYWJsZUVsZW1lbnQsZj1sLnRhcmdldDt0aGlzLmtleVByZXNzZWQmJihoIT09YSYmZiE9PWEmJiFsLnRhcmdldC5jb250YWlucyhoKXx8ZCE9PWEmJmYhPT1hJiYhbC50YXJnZXQuY29udGFpbnMoZCkpfHx0aGlzLnN5bmNTY3JvbGxQb3NpdGlvbnMobCl9b25DbG9uZVdo'@;
put 'ZWVsKGwsYSl7Y29uc3R7cm9vdFdpbmRvdzpkfT10aGlzLmRvbUJpbmRpbmdzLGg9dGhpcy5pbmxpbmVTdGFydE92ZXJsYXkubWFpblRhYmxlU2Nyb2xsYWJsZUVsZW1lbnQsZj10aGlzLnRvcE92ZXJsYXkubWFpblRhYmxlU2Nyb2xsYWJsZUVsZW1lbnQsdj1sLnRhcmdldCxNPWYhPT1kJiZ2'@;
put 'IT09ZCYmIXYuY29udGFpbnMoZiksRD1oIT09ZCYmdiE9PWQmJiF2LmNvbnRhaW5zKGgpO2lmKHRoaXMua2V5UHJlc3NlZCYmKE18fEQpfHx0aGlzLnNjcm9sbGFibGVFbGVtZW50PT09ZClyZXR1cm47Y29uc3QgWj10aGlzLnRyYW5zbGF0ZU1vdXNlV2hlZWxUb1Njcm9sbChsKTsoYXx8dGhp'@;
put 'cy5zY3JvbGxhYmxlRWxlbWVudCE9PWQmJlopJiZsLnByZXZlbnREZWZhdWx0KCl9b25LZXlEb3duKGwpe3RoaXMua2V5UHJlc3NlZD11XyhsLmtleUNvZGUsIkFSUk9XX1VQfEFSUk9XX1JJR0hUfEFSUk9XX0RPV058QVJST1dfTEVGVCIpfW9uS2V5VXAoKXt0aGlzLmtleVByZXNzZWQ9ITF9'@;
put 'dHJhbnNsYXRlTW91c2VXaGVlbFRvU2Nyb2xsKGwpe2xldCBhPWlzTmFOKGwuZGVsdGFZKT8tMSpsLndoZWVsRGVsdGFZOmwuZGVsdGFZLGQ9aXNOYU4obC5kZWx0YVgpPy0xKmwud2hlZWxEZWx0YVg6bC5kZWx0YVg7MT09PWwuZGVsdGFNb2RlJiYoZCs9ZCp0aGlzLmJyb3dzZXJMaW5lSGVp'@;
put 'Z2h0LGErPWEqdGhpcy5icm93c2VyTGluZUhlaWdodCk7Y29uc3QgaD10aGlzLnNjcm9sbFZlcnRpY2FsbHkoYSksZj10aGlzLnNjcm9sbEhvcml6b250YWxseShkKTtyZXR1cm4gaHx8Zn1zY3JvbGxWZXJ0aWNhbGx5KGwpe2NvbnN0IGE9dGhpcy5zY3JvbGxhYmxlRWxlbWVudC5zY3JvbGxU'@;
put 'b3A7cmV0dXJuIHRoaXMuc2Nyb2xsYWJsZUVsZW1lbnQuc2Nyb2xsVG9wKz1sLGEhPT10aGlzLnNjcm9sbGFibGVFbGVtZW50LnNjcm9sbFRvcH1zY3JvbGxIb3Jpem9udGFsbHkobCl7Y29uc3QgYT10aGlzLnNjcm9sbGFibGVFbGVtZW50LnNjcm9sbExlZnQ7cmV0dXJuIHRoaXMuc2Nyb2xs'@;
put 'YWJsZUVsZW1lbnQuc2Nyb2xsTGVmdCs9bCxhIT09dGhpcy5zY3JvbGxhYmxlRWxlbWVudC5zY3JvbGxMZWZ0fXN5bmNTY3JvbGxQb3NpdGlvbnMoKXtpZih0aGlzLmRlc3Ryb3llZClyZXR1cm47Y29uc3QgbD10aGlzLnRvcE92ZXJsYXkuY2xvbmUud3RUYWJsZS5ob2xkZXIsYT10aGlzLmlu'@;
put 'bGluZVN0YXJ0T3ZlcmxheS5jbG9uZS53dFRhYmxlLmhvbGRlcjtsZXQgZD10aGlzLnNjcm9sbGFibGVFbGVtZW50LnNjcm9sbExlZnQsaD10aGlzLnNjcm9sbGFibGVFbGVtZW50LnNjcm9sbFRvcDtpZih0aGlzLndvdC53dFZpZXdwb3J0LmlzSG9yaXpvbnRhbGx5U2Nyb2xsYWJsZUJ5V2lu'@;
put 'ZG93KCkmJihkPXRoaXMuc2Nyb2xsYWJsZUVsZW1lbnQuc2Nyb2xsWCksdGhpcy53b3Qud3RWaWV3cG9ydC5pc1ZlcnRpY2FsbHlTY3JvbGxhYmxlQnlXaW5kb3coKSYmKGg9dGhpcy5zY3JvbGxhYmxlRWxlbWVudC5zY3JvbGxZKSx0aGlzLmhvcml6b250YWxTY3JvbGxpbmc9dGhpcy5sYXN0'@;
put 'U2Nyb2xsWCE9PWQsdGhpcy52ZXJ0aWNhbFNjcm9sbGluZz10aGlzLmxhc3RTY3JvbGxZIT09aCx0aGlzLmxhc3RTY3JvbGxYPWQsdGhpcy5sYXN0U2Nyb2xsWT1oLHRoaXMuaG9yaXpvbnRhbFNjcm9sbGluZyl7bC5zY3JvbGxMZWZ0PWQ7Y29uc3QgZj10aGlzLmJvdHRvbU92ZXJsYXkubmVl'@;
put 'ZEZ1bGxSZW5kZXI/dGhpcy5ib3R0b21PdmVybGF5LmNsb25lLnd0VGFibGUuaG9sZGVyOm51bGw7ZiYmKGYuc2Nyb2xsTGVmdD1kKX10aGlzLnZlcnRpY2FsU2Nyb2xsaW5nJiYoYS5zY3JvbGxUb3A9aCksdGhpcy5yZWZyZXNoQWxsKCl9c3luY1Njcm9sbFdpdGhNYXN0ZXIoKXtpZighQ2co'@;
put 'b1AsdGhpcykpcmV0dXJuO2NvbnN0IGw9dGhpcy50b3BPdmVybGF5Lm1haW5UYWJsZVNjcm9sbGFibGVFbGVtZW50LHtzY3JvbGxMZWZ0OmEsc2Nyb2xsVG9wOmR9PWw7dGhpcy50b3BPdmVybGF5Lm5lZWRGdWxsUmVuZGVyJiYodGhpcy50b3BPdmVybGF5LmNsb25lLnd0VGFibGUuaG9sZGVy'@;
put 'LnNjcm9sbExlZnQ9YSksdGhpcy5ib3R0b21PdmVybGF5Lm5lZWRGdWxsUmVuZGVyJiYodGhpcy5ib3R0b21PdmVybGF5LmNsb25lLnd0VGFibGUuaG9sZGVyLnNjcm9sbExlZnQ9YSksdGhpcy5pbmxpbmVTdGFydE92ZXJsYXkubmVlZEZ1bGxSZW5kZXImJih0aGlzLmlubGluZVN0YXJ0T3Zl'@;
put 'cmxheS5jbG9uZS53dFRhYmxlLmhvbGRlci5zY3JvbGxUb3A9ZCksWDcob1AsdGhpcywhMSl9dXBkYXRlTWFpblNjcm9sbGFibGVFbGVtZW50cygpe3RoaXMuZXZlbnRNYW5hZ2VyLmNsZWFyRXZlbnRzKCEwKSx0aGlzLmlubGluZVN0YXJ0T3ZlcmxheS51cGRhdGVNYWluU2Nyb2xsYWJsZUVs'@;
put 'ZW1lbnQoKSx0aGlzLnRvcE92ZXJsYXkudXBkYXRlTWFpblNjcm9sbGFibGVFbGVtZW50KCksdGhpcy5ib3R0b21PdmVybGF5Lm5lZWRGdWxsUmVuZGVyJiZ0aGlzLmJvdHRvbU92ZXJsYXkudXBkYXRlTWFpblNjcm9sbGFibGVFbGVtZW50KCk7Y29uc3R7d3RUYWJsZTpsfT10aGlzLHtyb290'@;
put 'V2luZG93OmF9PXRoaXMuZG9tQmluZGluZ3M7dGhpcy5zY3JvbGxhYmxlRWxlbWVudD0iaGlkZGVuIj09PWEuZ2V0Q29tcHV0ZWRTdHlsZShsLnd0Um9vdEVsZW1lbnQucGFyZW50Tm9kZSkuZ2V0UHJvcGVydHlWYWx1ZSgib3ZlcmZsb3ciKT9sLmhvbGRlcjp5RShsLlRBQkxFKSx0aGlzLnJl'@;
put 'Z2lzdGVyTGlzdGVuZXJzKCl9ZGVzdHJveSgpe3RoaXMucmVzaXplT2JzZXJ2ZXIuZGlzY29ubmVjdCgpLHRoaXMuZXZlbnRNYW5hZ2VyLmRlc3Ryb3koKSx0aGlzLnRvcE92ZXJsYXkuZGVzdHJveSgpLHRoaXMuYm90dG9tT3ZlcmxheS5jbG9uZSYmdGhpcy5ib3R0b21PdmVybGF5LmRlc3Ry'@;
put 'b3koKSx0aGlzLmlubGluZVN0YXJ0T3ZlcmxheS5kZXN0cm95KCksdGhpcy50b3BJbmxpbmVTdGFydENvcm5lck92ZXJsYXkmJnRoaXMudG9wSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5LmRlc3Ryb3koKSx0aGlzLmJvdHRvbUlubGluZVN0YXJ0Q29ybmVyT3ZlcmxheSYmdGhpcy5ib3R0b21J'@;
put 'bmxpbmVTdGFydENvcm5lck92ZXJsYXkuY2xvbmUmJnRoaXMuYm90dG9tSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5LmRlc3Ryb3koKSx0aGlzLmRlc3Ryb3llZD0hMH1yZWZyZXNoKCl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0mJmFyZ3VtZW50c1sw'@;
put 'XTt0aGlzLnVwZGF0ZUxhc3RTcHJlYWRlclNpemUoKSYmdGhpcy5hZGp1c3RFbGVtZW50c1NpemUoKSx0aGlzLmJvdHRvbU92ZXJsYXkuY2xvbmUmJnRoaXMuYm90dG9tT3ZlcmxheS5yZWZyZXNoKGwpLHRoaXMuaW5saW5lU3RhcnRPdmVybGF5LnJlZnJlc2gobCksdGhpcy50b3BPdmVybGF5'@;
put 'LnJlZnJlc2gobCksdGhpcy50b3BJbmxpbmVTdGFydENvcm5lck92ZXJsYXkmJnRoaXMudG9wSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5LnJlZnJlc2gobCksdGhpcy5ib3R0b21JbmxpbmVTdGFydENvcm5lck92ZXJsYXkmJnRoaXMuYm90dG9tSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5LmNs'@;
put 'b25lJiZ0aGlzLmJvdHRvbUlubGluZVN0YXJ0Q29ybmVyT3ZlcmxheS5yZWZyZXNoKGwpfXVwZGF0ZUxhc3RTcHJlYWRlclNpemUoKXtjb25zdCBsPXRoaXMud3RUYWJsZS5zcHJlYWRlcixhPWwuY2xpZW50V2lkdGgsZD1sLmNsaWVudEhlaWdodCxoPWEhPT10aGlzLnNwcmVhZGVyTGFzdFNp'@;
put 'emUud2lkdGh8fGQhPT10aGlzLnNwcmVhZGVyTGFzdFNpemUuaGVpZ2h0O3JldHVybiBoJiYodGhpcy5zcHJlYWRlckxhc3RTaXplLndpZHRoPWEsdGhpcy5zcHJlYWRlckxhc3RTaXplLmhlaWdodD1kKSxofWFkanVzdEVsZW1lbnRzU2l6ZSgpe2NvbnN0e3d0Vmlld3BvcnQ6bH09dGhpcy53'@;
put 'b3Qse3d0VGFibGU6YX09dGhpcyx7cm9vdFdpbmRvdzpkfT10aGlzLmRvbUJpbmRpbmdzLGg9dGhpcy5zY3JvbGxhYmxlRWxlbWVudD09PWQsZj10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygidG90YWxDb2x1bW5zIiksdj10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygidG90YWxSb3dz'@;
put 'IiksTT1sLmdldFJvd0hlYWRlcldpZHRoKCksWj1sLmdldENvbHVtbkhlYWRlckhlaWdodCgpK3RoaXMudG9wT3ZlcmxheS5zdW1DZWxsU2l6ZXMoMCx2KSsxLHJlPU0rdGhpcy5pbmxpbmVTdGFydE92ZXJsYXkuc3VtQ2VsbFNpemVzKDAsZiksYmU9YS5oaWRlci5zdHlsZSxxZT0oKCk9PiFo'@;
put 'JiZ0aGlzLnNjcm9sbGFibGVFbGVtZW50LnNjcm9sbFRvcD5NYXRoLm1heCgwLFotYS5ob2xkZXIuY2xpZW50SGVpZ2h0KSkoKT8xOjAscnQ9KCgpPT4haCYmdGhpcy5zY3JvbGxhYmxlRWxlbWVudC5zY3JvbGxMZWZ0Pk1hdGgubWF4KDAscmUtYS5ob2xkZXIuY2xpZW50V2lkdGgpKSgpPzE6'@;
put 'MDtiZS53aWR0aD1gJHtyZStydH1weGAsYmUuaGVpZ2h0PWAke1orcWV9cHhgLHRoaXMudG9wT3ZlcmxheS5hZGp1c3RFbGVtZW50c1NpemUoKSx0aGlzLmlubGluZVN0YXJ0T3ZlcmxheS5hZGp1c3RFbGVtZW50c1NpemUoKSx0aGlzLmJvdHRvbU92ZXJsYXkuYWRqdXN0RWxlbWVudHNTaXpl'@;
put 'KCl9ZXhwYW5kSGlkZXJWZXJ0aWNhbGx5QnkobCl7Y29uc3R7d3RUYWJsZTphfT10aGlzO2EuaGlkZXIuc3R5bGUuaGVpZ2h0PWAke3BhcnNlSW50KGEuaGlkZXIuc3R5bGUuaGVpZ2h0LDEwKStsfXB4YH1leHBhbmRIaWRlckhvcml6b250YWxseUJ5KGwpe2NvbnN0e3d0VGFibGU6YX09dGhp'@;
put 'czthLmhpZGVyLnN0eWxlLndpZHRoPWAke3BhcnNlSW50KGEuaGlkZXIuc3R5bGUud2lkdGgsMTApK2x9cHhgfWFwcGx5VG9ET00oKXt0aGlzLnd0VGFibGUuaXNWaXNpYmxlKCkmJih0aGlzLnRvcE92ZXJsYXkuYXBwbHlUb0RPTSgpLHRoaXMuYm90dG9tT3ZlcmxheS5jbG9uZSYmdGhpcy5i'@;
put 'b3R0b21PdmVybGF5LmFwcGx5VG9ET00oKSx0aGlzLmlubGluZVN0YXJ0T3ZlcmxheS5hcHBseVRvRE9NKCkpfWdldFBhcmVudE92ZXJsYXkobCl7aWYoIWwpcmV0dXJuIG51bGw7bGV0IGQ9bnVsbDtyZXR1cm4gWW4oW3RoaXMudG9wT3ZlcmxheSx0aGlzLmlubGluZVN0YXJ0T3ZlcmxheSx0'@;
put 'aGlzLmJvdHRvbU92ZXJsYXksdGhpcy50b3BJbmxpbmVTdGFydENvcm5lck92ZXJsYXksdGhpcy5ib3R0b21JbmxpbmVTdGFydENvcm5lck92ZXJsYXldLGg9PntoJiZoLmNsb25lJiZoLmNsb25lLnd0VGFibGUuVEFCTEUuY29udGFpbnMobCkmJihkPWguY2xvbmUpfSksZH1zeW5jT3Zlcmxh'@;
put 'eVRhYmxlQ2xhc3NOYW1lcygpe2NvbnN0IGw9dGhpcy53dFRhYmxlLlRBQkxFO1luKFt0aGlzLnRvcE92ZXJsYXksdGhpcy5pbmxpbmVTdGFydE92ZXJsYXksdGhpcy5ib3R0b21PdmVybGF5LHRoaXMudG9wSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5LHRoaXMuYm90dG9tSW5saW5lU3RhcnRD'@;
put 'b3JuZXJPdmVybGF5XSxkPT57ZCYmKGQuY2xvbmUud3RUYWJsZS5UQUJMRS5jbGFzc05hbWU9bC5jbGFzc05hbWUpfSl9fTtmdW5jdGlvbiB0M2UoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIHZldChjKXt2YXIgbD1mdW5jdGlvbiBiZXQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFj'@;
put 'KXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJp'@;
put 'bWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3Vy'@;
put 'YWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNsYXNzIHlldHtjb25zdHJ1Y3RvcihsKXt0M2UodGhpcywic2V0dGluZ3MiLHt9KSx0M2UodGhpcywiZGVmYXVsdHMiLE9iamVjdC5mcmVlemUodGhpcy5nZXREZWZhdWx0cygpKSksWG8odGhpcy5kZWZhdWx0cywoYSxkKT0+e2lmKHZv'@;
put 'aWQgMCE9PWxbZF0pdGhpcy5zZXR0aW5nc1tkXT1sW2RdO2Vsc2V7aWYodm9pZCAwPT09YSl0aHJvdyBuZXcgRXJyb3IoYEEgcmVxdWlyZWQgc2V0dGluZyAiJHtkfSIgd2FzIG5vdCBwcm92aWRlZGApO3RoaXMuc2V0dGluZ3NbZF09YX19KX1nZXREZWZhdWx0cygpe3JldHVybntmYWNhZGU6'@;
put 'dm9pZCAwLHRhYmxlOnZvaWQgMCxpc0RhdGFWaWV3SW5zdGFuY2U6ITAsZXh0ZXJuYWxSb3dDYWxjdWxhdG9yOiExLGN1cnJlbnRSb3dDbGFzc05hbWU6bnVsbCxjdXJyZW50Q29sdW1uQ2xhc3NOYW1lOm51bGwscHJldmVudE92ZXJmbG93OigpPT4hMSxwcmV2ZW50V2hlZWw6ITEsZGF0YTp2'@;
put 'b2lkIDAsZml4ZWRDb2x1bW5zU3RhcnQ6MCxmaXhlZFJvd3NUb3A6MCxmaXhlZFJvd3NCb3R0b206MCxzaG91bGRSZW5kZXJJbmxpbmVTdGFydE92ZXJsYXk6KCk9PnRoaXMuZ2V0U2V0dGluZygiZml4ZWRDb2x1bW5zU3RhcnQiKT4wfHx0aGlzLmdldFNldHRpbmcoInJvd0hlYWRlcnMiKS5s'@;
put 'ZW5ndGg+MCxzaG91bGRSZW5kZXJUb3BPdmVybGF5OigpPT50aGlzLmdldFNldHRpbmcoImZpeGVkUm93c1RvcCIpPjB8fHRoaXMuZ2V0U2V0dGluZygiY29sdW1uSGVhZGVycyIpLmxlbmd0aD4wLHNob3VsZFJlbmRlckJvdHRvbU92ZXJsYXk6KCk9PnRoaXMuZ2V0U2V0dGluZygiZml4ZWRS'@;
put 'b3dzQm90dG9tIik+MCxtaW5TcGFyZVJvd3M6MCxyb3dIZWFkZXJzOigpPT5bXSxjb2x1bW5IZWFkZXJzOigpPT5bXSx0b3RhbFJvd3M6dm9pZCAwLHRvdGFsQ29sdW1uczp2b2lkIDAsY2VsbFJlbmRlcmVyOihsLGEsZCk9PntQbShkLHRoaXMuZ2V0U2V0dGluZygiZGF0YSIsbCxhKT8/IiIp'@;
put 'fSxjb2x1bW5XaWR0aCgpe30scm93SGVpZ2h0KCl7fSxyb3dIZWlnaHRCeU92ZXJsYXlOYW1lKCl7fSxkZWZhdWx0Q29sdW1uV2lkdGg6NTAsc2VsZWN0aW9uczpudWxsLGhpZGVCb3JkZXJPbk1vdXNlRG93bk92ZXI6ITEsdmlld3BvcnRSb3dDYWxjdWxhdG9yT3ZlcnJpZGU6bnVsbCx2aWV3'@;
put 'cG9ydENvbHVtbkNhbGN1bGF0b3JPdmVycmlkZTpudWxsLHZpZXdwb3J0Um93UmVuZGVyaW5nVGhyZXNob2xkOm51bGwsdmlld3BvcnRDb2x1bW5SZW5kZXJpbmdUaHJlc2hvbGQ6bnVsbCxvbkNlbGxNb3VzZURvd246bnVsbCxvbkNlbGxDb250ZXh0TWVudTpudWxsLG9uQ2VsbE1vdXNlT3Zl'@;
put 'cjpudWxsLG9uQ2VsbE1vdXNlT3V0Om51bGwsb25DZWxsTW91c2VVcDpudWxsLG9uQ2VsbERibENsaWNrOm51bGwsb25DZWxsQ29ybmVyTW91c2VEb3duOm51bGwsb25DZWxsQ29ybmVyRGJsQ2xpY2s6bnVsbCxiZWZvcmVEcmF3Om51bGwsb25EcmF3Om51bGwsb25CZWZvcmVSZW1vdmVDZWxs'@;
put 'Q2xhc3NOYW1lczpudWxsLG9uQWZ0ZXJEcmF3U2VsZWN0aW9uOm51bGwsb25CZWZvcmVEcmF3Qm9yZGVyczpudWxsLG9uQmVmb3JlVmlld3BvcnRTY3JvbGxIb3Jpem9udGFsbHk6bD0+bCxvbkJlZm9yZVZpZXdwb3J0U2Nyb2xsVmVydGljYWxseTpsPT5sLG9uU2Nyb2xsSG9yaXpvbnRhbGx5'@;
put 'Om51bGwsb25TY3JvbGxWZXJ0aWNhbGx5Om51bGwsb25CZWZvcmVUb3VjaFNjcm9sbDpudWxsLG9uQWZ0ZXJNb21lbnR1bVNjcm9sbDpudWxsLG9uTW9kaWZ5Um93SGVhZGVyV2lkdGg6bnVsbCxvbk1vZGlmeUdldENlbGxDb29yZHM6bnVsbCxvbk1vZGlmeUdldENvb3Jkc0VsZW1lbnQ6bnVs'@;
put 'bCxvbk1vZGlmeUdldENvb3JkczpudWxsLG9uQmVmb3JlSGlnaGxpZ2h0aW5nUm93SGVhZGVyOmw9Pmwsb25CZWZvcmVIaWdobGlnaHRpbmdDb2x1bW5IZWFkZXI6bD0+bCxvbldpbmRvd1Jlc2l6ZTpudWxsLG9uQ29udGFpbmVyRWxlbWVudFJlc2l6ZTpudWxsLHJlbmRlckFsbENvbHVtbnM6'@;
put 'ITEscmVuZGVyQWxsUm93czohMSxncm91cHM6ITEscm93SGVhZGVyV2lkdGg6bnVsbCxjb2x1bW5IZWFkZXJIZWlnaHQ6bnVsbCxoZWFkZXJDbGFzc05hbWU6bnVsbCxydGxNb2RlOiExLGFyaWFUYWdzOiEwfX11cGRhdGUobCxhKXtyZXR1cm4gdm9pZCAwPT09YT9YbyhsLChkLGgpPT57dGhp'@;
put 'cy5zZXR0aW5nc1toXT1kfSk6dGhpcy5zZXR0aW5nc1tsXT1hLHRoaXN9Z2V0U2V0dGluZyhsLGEsZCxoLGYpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzLnNldHRpbmdzW2xdP3RoaXMuc2V0dGluZ3NbbF0oYSxkLGgsZik6dm9pZCAwIT09YSYmQXJyYXkuaXNBcnJheSh0aGlzLnNl'@;
put 'dHRpbmdzW2xdKT90aGlzLnNldHRpbmdzW2xdW2FdOnRoaXMuc2V0dGluZ3NbbF19Z2V0U2V0dGluZ1B1cmUobCl7cmV0dXJuIHRoaXMuc2V0dGluZ3NbbF19aGFzKGwpe3JldHVybiEhdGhpcy5zZXR0aW5nc1tsXX19Y2xhc3MgU0sgZXh0ZW5kcyBtX3tjb25zdHJ1Y3RvcihsLGEsZCxoKXtz'@;
put 'dXBlcihsLGEsZCxoLCJtYXN0ZXIiKX1hbGlnbk92ZXJsYXlzV2l0aFRyaW1taW5nQ29udGFpbmVyKCl7Y29uc3QgbD1hXyh0aGlzLnd0Um9vdEVsZW1lbnQpLHtyb290V2luZG93OmF9PXRoaXMuZG9tQmluZGluZ3M7aWYobD09PWEpdGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInByZXZl'@;
put 'bnRPdmVyZmxvdyIpfHwodGhpcy5ob2xkZXIuc3R5bGUub3ZlcmZsb3c9InZpc2libGUiLHRoaXMud3RSb290RWxlbWVudC5zdHlsZS5vdmVyZmxvdz0idmlzaWJsZSIpO2Vsc2V7Y29uc3QgZD1sLnBhcmVudEVsZW1lbnQsaD1fRShsLCJoZWlnaHQiLGEpLGY9X0UobCwib3ZlcmZsb3ciLGEp'@;
put 'LHY9dGhpcy5ob2xkZXIuc3R5bGUse3Njcm9sbFdpZHRoOk0sc2Nyb2xsSGVpZ2h0OkR9PWw7bGV0IFo9bC5vZmZzZXRXaWR0aCxyZT1sLm9mZnNldEhlaWdodDtpZihkJiZbImF1dG8iLCJoaWRkZW4iLCJzY3JvbGwiXS5pbmNsdWRlcyhmKSl7Y29uc3QgYmU9bC5jbG9uZU5vZGUoITEpO2Jl'@;
put 'LnN0eWxlLm92ZXJmbG93PSJhdXRvIixiZS5zdHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiLGwubmV4dEVsZW1lbnRTaWJsaW5nP2QuaW5zZXJ0QmVmb3JlKGJlLGwubmV4dEVsZW1lbnRTaWJsaW5nKTpkLmFwcGVuZENoaWxkKGJlKTtjb25zdCBFZT1wYXJzZUludChhLmdldENvbXB1dGVkU3R5'@;
put 'bGUoYmUpLmhlaWdodCwxMCk7ZC5yZW1vdmVDaGlsZChiZSksMD09PUVlJiYocmU9MCl9cmU9TWF0aC5taW4ocmUsRCksdi5oZWlnaHQ9ImF1dG8iPT09aD8iYXV0byI6YCR7cmV9cHhgLFo9TWF0aC5taW4oWixNKSx2LndpZHRoPWAke1p9cHhgLHYub3ZlcmZsb3c9IiIsdGhpcy5oYXNUYWJs'@;
put 'ZUhlaWdodD0iYXV0byI9PT12LmhlaWdodHx8cmU+MCx0aGlzLmhhc1RhYmxlV2lkdGg9Wj4wfXRoaXMuaXNUYWJsZVZpc2libGU9VTcodGhpcy5UQUJMRSl9bWFya092ZXJzaXplZENvbHVtbkhlYWRlcnMoKXtjb25zdHt3dFNldHRpbmdzOmx9PXRoaXMse3d0Vmlld3BvcnQ6YX09dGhpcy5k'@;
put 'YXRhQWNjZXNzT2JqZWN0LGQ9Im1hc3RlciIsZj1sLmdldFNldHRpbmcoImNvbHVtbkhlYWRlcnMiKS5sZW5ndGg7aWYoZiYmIWEuaGFzT3ZlcnNpemVkQ29sdW1uSGVhZGVyc01hcmtlZFtkXSl7Y29uc3QgTT1sLmdldFNldHRpbmcoInJvd0hlYWRlcnMiKS5sZW5ndGgsRD10aGlzLmdldFJl'@;
put 'bmRlcmVkQ29sdW1uc0NvdW50KCk7Zm9yKGxldCBaPTA7WjxmO1orKylmb3IobGV0IHJlPS0xKk07cmU8RDtyZSsrKXRoaXMubWFya0lmT3ZlcnNpemVkQ29sdW1uSGVhZGVyKHJlKTthLmhhc092ZXJzaXplZENvbHVtbkhlYWRlcnNNYXJrZWRbZF09ITB9fX1UbChTSyxYZmUpLFRsKFNLLGRL'@;
put 'KTtjb25zdCBfZXQ9U0s7ZnVuY3Rpb24gSEUoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIHdldChjKXt2YXIgbD1mdW5jdGlvbiBDZXQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIg'@;
put 'ZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMs'@;
put 'InN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNsYXNzIE1ldHtjb25zdHJ1Y3Rvcigpe0hF'@;
put 'KHRoaXMsImNvdW50IiwwKSxIRSh0aGlzLCJzdGFydFJvdyIsMCksSEUodGhpcywiZW5kUm93IiwwKSxIRSh0aGlzLCJzdGFydFBvc2l0aW9uIiwwKSxIRSh0aGlzLCJpc1Zpc2libGVJblRyaW1taW5nQ29udGFpbmVyIiwhMCl9aW5pdGlhbGl6ZShsKXtsZXR7dG90YWxSb3dzOmF9PWw7dGhp'@;
put 'cy5jb3VudD1hLHRoaXMuZW5kUm93PXRoaXMuY291bnQtMX1wcm9jZXNzKCl7fWZpbmFsaXplKCl7fX1mdW5jdGlvbiBORShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24geGV0KGMpe3ZhciBsPWZ1bmN0aW9uIEVldChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFy'@;
put 'IGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUu'@;
put 'Iil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRh'@;
put 'YmxlOiEwfSk6Y1tsXT1hLGN9eSgzOTA5MikseSgxNDM2MCk7Y2xhc3MgbjNle2NvbnN0cnVjdG9yKCl7TkUodGhpcywiY291bnQiLDApLE5FKHRoaXMsInN0YXJ0Um93IixudWxsKSxORSh0aGlzLCJlbmRSb3ciLG51bGwpLE5FKHRoaXMsInN0YXJ0UG9zaXRpb24iLG51bGwpLE5FKHRoaXMs'@;
put 'ImlzVmlzaWJsZUluVHJpbW1pbmdDb250YWluZXIiLCExKX1pbml0aWFsaXplKCl7fXByb2Nlc3MobCxhKXtjb25zdHt0b3RhbENhbGN1bGF0ZWRIZWlnaHQ6ZCx6ZXJvQmFzZWRTY3JvbGxPZmZzZXQ6aCxpbm5lclZpZXdwb3J0SGVpZ2h0OmZ9PWE7ZDw9aCYmKHRoaXMuc3RhcnRSb3c9bCks'@;
put 'ZD49aCYmZDw9ZiYmbnVsbD09PXRoaXMuc3RhcnRSb3cmJih0aGlzLnN0YXJ0Um93PWwpLHRoaXMuZW5kUm93PWx9ZmluYWxpemUobCl7dmFyIGE7Y29uc3R7c2Nyb2xsT2Zmc2V0OmQsdmlld3BvcnRIZWlnaHQ6aCxob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0OmYsdG90YWxSb3dzOnYsbmVl'@;
put 'ZFJldmVyc2U6TSxzdGFydFBvc2l0aW9uczpELHJvd0hlaWdodDpafT1sO2lmKHRoaXMuZW5kUm93PT09di0xJiZNKWZvcih0aGlzLnN0YXJ0Um93PXRoaXMuZW5kUm93O3RoaXMuc3RhcnRSb3c+MDspe2NvbnN0IGNlPURbdGhpcy5lbmRSb3ddK1otRFt0aGlzLnN0YXJ0Um93LTFdO2lmKHRo'@;
put 'aXMuc3RhcnRSb3ctPTEsY2U+PWgtZilicmVha310aGlzLnN0YXJ0UG9zaXRpb249bnVsbCE9PShhPURbdGhpcy5zdGFydFJvd10pJiZ2b2lkIDAhPT1hP2E6bnVsbCx0aGlzLmlzVmlzaWJsZUluVHJpbW1pbmdDb250YWluZXI9IShkK2gtZjwwfHxkPkQuYXQoLTEpK1opLHY8dGhpcy5lbmRS'@;
put 'b3cmJih0aGlzLmVuZFJvdz12LTEpLG51bGwhPT10aGlzLnN0YXJ0Um93JiYodGhpcy5jb3VudD10aGlzLmVuZFJvdy10aGlzLnN0YXJ0Um93KzEpfX1mdW5jdGlvbiByM2UoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIFRldChjKXt2YXIgbD1mdW5jdGlvbiBBZXQoYyxsKXtpZigib2JqZWN0'@;
put 'IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11'@;
put 'c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJh'@;
put 'YmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNsYXNzIGtldCBleHRlbmRzIG4zZXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cykscjNlKHRoaXMsInJvd1N0YXJ0T2Zmc2V0IiwwKSxyM2UodGhpcywicm93RW5kT2Zmc2V0IiwwKX1maW5hbGl6'@;
put 'ZShsKXt2YXIgYTtzdXBlci5maW5hbGl6ZShsKTtjb25zdHtvdmVycmlkZUZuOmQsdG90YWxSb3dzOmgsc3RhcnRQb3NpdGlvbnM6Zn09bDtpZihudWxsIT09dGhpcy5zdGFydFJvdyYmImZ1bmN0aW9uIj09dHlwZW9mIGQpe2NvbnN0IHY9dGhpcy5zdGFydFJvdyxNPXRoaXMuZW5kUm93O2Qo'@;
put 'dGhpcyksdGhpcy5yb3dTdGFydE9mZnNldD12LXRoaXMuc3RhcnRSb3csdGhpcy5yb3dFbmRPZmZzZXQ9dGhpcy5lbmRSb3ctTX10aGlzLnN0YXJ0Um93PDAmJih0aGlzLnN0YXJ0Um93PTApLHRoaXMuc3RhcnRQb3NpdGlvbj1udWxsIT09KGE9Zlt0aGlzLnN0YXJ0Um93XSkmJnZvaWQgMCE9'@;
put 'PWE/YTpudWxsLGg8dGhpcy5lbmRSb3cmJih0aGlzLmVuZFJvdz1oLTEpLG51bGwhPT10aGlzLnN0YXJ0Um93JiYodGhpcy5jb3VudD10aGlzLmVuZFJvdy10aGlzLnN0YXJ0Um93KzEpfX1mdW5jdGlvbiBWRShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gRGV0KGMpe3ZhciBsPWZ1bmN0aW9u'@;
put 'IElldChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJy'@;
put 'b3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHko'@;
put 'YyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y2xhc3MgUmV0e2NvbnN0cnVjdG9yKCl7VkUodGhpcywiY291bnQiLDApLFZFKHRoaXMsInN0YXJ0Um93IixudWxsKSxWRSh0aGlzLCJlbmRSb3ciLG51bGwpLFZFKHRoaXMs'@;
put 'InN0YXJ0UG9zaXRpb24iLG51bGwpLFZFKHRoaXMsImlzVmlzaWJsZUluVHJpbW1pbmdDb250YWluZXIiLCExKX1pbml0aWFsaXplKCl7fXByb2Nlc3MobCxhKXtjb25zdHt0b3RhbENhbGN1bGF0ZWRIZWlnaHQ6ZCx6ZXJvQmFzZWRTY3JvbGxPZmZzZXQ6aCxpbm5lclZpZXdwb3J0SGVpZ2h0'@;
put 'OmYscm93SGVpZ2h0OnZ9PWE7ZD49aCYmZCt2PD1mJiYobnVsbD09PXRoaXMuc3RhcnRSb3cmJih0aGlzLnN0YXJ0Um93PWwpLHRoaXMuZW5kUm93PWwpfWZpbmFsaXplKGwpe3ZhciBhO2NvbnN0e3Njcm9sbE9mZnNldDpkLHZpZXdwb3J0SGVpZ2h0OmgsaG9yaXpvbnRhbFNjcm9sbGJhckhl'@;
put 'aWdodDpmLHRvdGFsUm93czp2LG5lZWRSZXZlcnNlOk0sc3RhcnRQb3NpdGlvbnM6RCxyb3dIZWlnaHQ6Wn09bDtpZih0aGlzLmVuZFJvdz09PXYtMSYmTSlmb3IodGhpcy5zdGFydFJvdz10aGlzLmVuZFJvdzt0aGlzLnN0YXJ0Um93PjA7KXtjb25zdCBiZT1EW3RoaXMuZW5kUm93XStaLURb'@;
put 'dGhpcy5zdGFydFJvdy0xXTtpZihiZTw9aC1mJiYodGhpcy5zdGFydFJvdy09MSksYmU+PWgtZilicmVha310aGlzLnN0YXJ0UG9zaXRpb249bnVsbCE9PShhPURbdGhpcy5zdGFydFJvd10pJiZ2b2lkIDAhPT1hP2E6bnVsbDtjb25zdCByZT1kK2gtZixjZT1udWxsPT09dGhpcy5zdGFydFJv'@;
put 'dz8wOmwuZ2V0Um93SGVpZ2h0KHRoaXMuc3RhcnRSb3cpO3RoaXMuaXNWaXNpYmxlSW5UcmltbWluZ0NvbnRhaW5lcj0hKHJlPGNlfHxkPkQuYXQoLTEpKSx2PHRoaXMuZW5kUm93JiYodGhpcy5lbmRSb3c9di0xKSxudWxsIT09dGhpcy5zdGFydFJvdyYmKHRoaXMuY291bnQ9dGhpcy5lbmRS'@;
put 'b3ctdGhpcy5zdGFydFJvdysxKX19ZnVuY3Rpb24gQkUoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIExldChjKXt2YXIgbD1mdW5jdGlvbiBPZXQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1h'@;
put 'KXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlciko'@;
put 'Yyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNsYXNzIFBldHtjb25zdHJ1Y3Rv'@;
put 'cigpe0JFKHRoaXMsImNvdW50IiwwKSxCRSh0aGlzLCJzdGFydENvbHVtbiIsMCksQkUodGhpcywiZW5kQ29sdW1uIiwwKSxCRSh0aGlzLCJzdGFydFBvc2l0aW9uIiwwKSxCRSh0aGlzLCJpc1Zpc2libGVJblRyaW1taW5nQ29udGFpbmVyIiwhMCl9aW5pdGlhbGl6ZShsKXtsZXR7dG90YWxD'@;
put 'b2x1bW5zOmF9PWw7dGhpcy5jb3VudD1hLHRoaXMuZW5kQ29sdW1uPXRoaXMuY291bnQtMX1wcm9jZXNzKCl7fWZpbmFsaXplKCl7fX1mdW5jdGlvbiBqRShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gRmV0KGMpe3ZhciBsPWZ1bmN0aW9uIEhldChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2Yg'@;
put 'Y3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4g'@;
put 'YSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29u'@;
put 'ZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y2xhc3MgaTNle2NvbnN0cnVjdG9yKCl7akUodGhpcywiY291bnQiLDApLGpFKHRoaXMsInN0YXJ0Q29sdW1uIixudWxsKSxqRSh0aGlzLCJlbmRDb2x1bW4iLG51bGwpLGpFKHRoaXMsInN0YXJ0UG9zaXRpb24iLG51bGwpLGpF'@;
put 'KHRoaXMsImlzVmlzaWJsZUluVHJpbW1pbmdDb250YWluZXIiLCExKX1pbml0aWFsaXplKCl7fXByb2Nlc3MobCxhKXtjb25zdHt0b3RhbENhbGN1bGF0ZWRXaWR0aDpkLHplcm9CYXNlZFNjcm9sbE9mZnNldDpoLHZpZXdwb3J0V2lkdGg6Zn09YTtkPD1oJiYodGhpcy5zdGFydENvbHVtbj1s'@;
put 'KSxkPj1oJiZkPD1oKyhoPjA/ZisxOmYpJiZudWxsPT10aGlzLnN0YXJ0Q29sdW1uJiYodGhpcy5zdGFydENvbHVtbj1sKSx0aGlzLmVuZENvbHVtbj1sfWZpbmFsaXplKGwpe3ZhciBhO2NvbnN0e3Njcm9sbE9mZnNldDpkLHZpZXdwb3J0V2lkdGg6aCxpbmxpbmVTdGFydE9mZnNldDpmLHpl'@;
put 'cm9CYXNlZFNjcm9sbE9mZnNldDp2LHRvdGFsQ29sdW1uczpNLG5lZWRSZXZlcnNlOkQsc3RhcnRQb3NpdGlvbnM6Wixjb2x1bW5XaWR0aDpyZX09bDtpZih0aGlzLmVuZENvbHVtbj09PU0tMSYmRClmb3IodGhpcy5zdGFydENvbHVtbj10aGlzLmVuZENvbHVtbjt0aGlzLnN0YXJ0Q29sdW1u'@;
put 'PjA7KXtjb25zdCBFZT1aW3RoaXMuZW5kQ29sdW1uXStyZS1aW3RoaXMuc3RhcnRDb2x1bW4tMV07aWYodGhpcy5zdGFydENvbHVtbi09MSxFZT5oKWJyZWFrfXRoaXMuc3RhcnRQb3NpdGlvbj1udWxsIT09KGE9Wlt0aGlzLnN0YXJ0Q29sdW1uXSkmJnZvaWQgMCE9PWE/YTpudWxsLHRoaXMu'@;
put 'aXNWaXNpYmxlSW5UcmltbWluZ0NvbnRhaW5lcj0hKGQraC0odj4wP2grMTpoKTwtMSpmfHxkPlouYXQoLTEpK3JlfHwtMSpkLWg+MCksTTx0aGlzLmVuZENvbHVtbiYmKHRoaXMuZW5kQ29sdW1uPU0tMSksbnVsbCE9PXRoaXMuc3RhcnRDb2x1bW4mJih0aGlzLmNvdW50PXRoaXMuZW5kQ29s'@;
put 'dW1uLXRoaXMuc3RhcnRDb2x1bW4rMSl9fWZ1bmN0aW9uIGEzZShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gTmV0KGMpe3ZhciBsPWZ1bmN0aW9uIFZldChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQg'@;
put 'MCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVt'@;
put 'YmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y2xhc3MgQmV0IGV4dGVu'@;
put 'ZHMgaTNle2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSxhM2UodGhpcywiY29sdW1uU3RhcnRPZmZzZXQiLDApLGEzZSh0aGlzLCJjb2x1bW5FbmRPZmZzZXQiLDApfWZpbmFsaXplKGwpe3ZhciBhO3N1cGVyLmZpbmFsaXplKGwpO2NvbnN0e292ZXJyaWRlRm46ZCx0b3RhbENv'@;
put 'bHVtbnM6aCxzdGFydFBvc2l0aW9uczpmfT1sO2lmKG51bGwhPT10aGlzLnN0YXJ0Q29sdW1uJiYiZnVuY3Rpb24iPT10eXBlb2YgZCl7Y29uc3Qgdj10aGlzLnN0YXJ0Q29sdW1uLE09dGhpcy5lbmRDb2x1bW47ZCh0aGlzKSx0aGlzLmNvbHVtblN0YXJ0T2Zmc2V0PXYtdGhpcy5zdGFydENv'@;
put 'bHVtbix0aGlzLmNvbHVtbkVuZE9mZnNldD10aGlzLmVuZENvbHVtbi1NfXRoaXMuc3RhcnRDb2x1bW48MCYmKHRoaXMuc3RhcnRDb2x1bW49MCksdGhpcy5zdGFydFBvc2l0aW9uPW51bGwhPT0oYT1mW3RoaXMuc3RhcnRDb2x1bW5dKSYmdm9pZCAwIT09YT9hOm51bGwsaDx0aGlzLmVuZENv'@;
put 'bHVtbiYmKHRoaXMuZW5kQ29sdW1uPWgtMSksbnVsbCE9PXRoaXMuc3RhcnRDb2x1bW4mJih0aGlzLmNvdW50PXRoaXMuZW5kQ29sdW1uLXRoaXMuc3RhcnRDb2x1bW4rMSl9fWZ1bmN0aW9uIHpFKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBqZXQoYyl7dmFyIGw9ZnVuY3Rpb24gemV0KGMs'@;
put 'bCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0'@;
put 'b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3Zh'@;
put 'bHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jbGFzcyBVZXR7Y29uc3RydWN0b3IoKXt6RSh0aGlzLCJjb3VudCIsMCksekUodGhpcywic3RhcnRDb2x1bW4iLG51bGwpLHpFKHRoaXMsImVuZENvbHVtbiIsbnVsbCksekUodGhpcywi'@;
put 'c3RhcnRQb3NpdGlvbiIsbnVsbCksekUodGhpcywiaXNWaXNpYmxlSW5UcmltbWluZ0NvbnRhaW5lciIsITEpfWluaXRpYWxpemUoKXt9cHJvY2VzcyhsLGEpe2NvbnN0e3RvdGFsQ2FsY3VsYXRlZFdpZHRoOmQsemVyb0Jhc2VkU2Nyb2xsT2Zmc2V0Omgsdmlld3BvcnRXaWR0aDpmLGNvbHVt'@;
put 'bldpZHRoOnZ9PWE7ZD49aCYmZCt2PD1oKyhoPjA/ZisxOmYpJiYobnVsbD09dGhpcy5zdGFydENvbHVtbiYmKHRoaXMuc3RhcnRDb2x1bW49bCksdGhpcy5lbmRDb2x1bW49bCl9ZmluYWxpemUobCl7dmFyIGE7Y29uc3R7c2Nyb2xsT2Zmc2V0OmQsdmlld3BvcnRXaWR0aDpoLGlubGluZVN0'@;
put 'YXJ0T2Zmc2V0OmYsemVyb0Jhc2VkU2Nyb2xsT2Zmc2V0OnYsdG90YWxDb2x1bW5zOk0sbmVlZFJldmVyc2U6RCxzdGFydFBvc2l0aW9uczpaLGNvbHVtbldpZHRoOnJlfT1sO2lmKHRoaXMuZW5kQ29sdW1uPT09TS0xJiZEKWZvcih0aGlzLnN0YXJ0Q29sdW1uPXRoaXMuZW5kQ29sdW1uO3Ro'@;
put 'aXMuc3RhcnRDb2x1bW4+MDspe2NvbnN0IEJlPVpbdGhpcy5lbmRDb2x1bW5dK3JlLVpbdGhpcy5zdGFydENvbHVtbi0xXTtpZihCZTw9aCYmKHRoaXMuc3RhcnRDb2x1bW4tPTEpLEJlPj1oKWJyZWFrfXRoaXMuc3RhcnRQb3NpdGlvbj1udWxsIT09KGE9Wlt0aGlzLnN0YXJ0Q29sdW1uXSkm'@;
put 'JnZvaWQgMCE9PWE/YTpudWxsO2NvbnN0IGJlPWQraC0odj4wP2grMTpoKSxFZT1udWxsPT09dGhpcy5zdGFydENvbHVtbj8wOmwuZ2V0Q29sdW1uV2lkdGgodGhpcy5zdGFydENvbHVtbik7dGhpcy5pc1Zpc2libGVJblRyaW1taW5nQ29udGFpbmVyPSEoYmU8LTEqZnx8ZD5aLmF0KC0xKXx8'@;
put 'LTEqZC1oPi0xKkVlKSxNPHRoaXMuZW5kQ29sdW1uJiYodGhpcy5lbmRDb2x1bW49TS0xKSxudWxsIT09dGhpcy5zdGFydENvbHVtbiYmKHRoaXMuY291bnQ9dGhpcy5lbmRDb2x1bW4tdGhpcy5zdGFydENvbHVtbisxKX19ZnVuY3Rpb24gbzNlKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBa'@;
put 'ZXQoYyl7dmFyIGw9ZnVuY3Rpb24gV2V0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJu'@;
put 'IGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09i'@;
put 'amVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jbGFzcyBzM2V7Y29uc3RydWN0b3IobCl7bzNlKHRoaXMsImNhbGN1bGF0aW9uVHlwZXMiLFtdKSxvM2UodGhpcywiY2FsY3VsYXRpb25S'@;
put 'ZXN1bHRzIixuZXcgTWFwKSx0aGlzLmNhbGN1bGF0aW9uVHlwZXM9bH1faW5pdGlhbGl6ZShsKXt0aGlzLmNhbGN1bGF0aW9uVHlwZXMuZm9yRWFjaChhPT57bGV0W2QsaF09YTt0aGlzLmNhbGN1bGF0aW9uUmVzdWx0cy5zZXQoZCxoKSxoLmluaXRpYWxpemUobCl9KX1fcHJvY2VzcyhsLGEp'@;
put 'e3RoaXMuY2FsY3VsYXRpb25UeXBlcy5mb3JFYWNoKGQ9PntsZXRbLGhdPWQ7cmV0dXJuIGgucHJvY2VzcyhsLGEpfSl9X2ZpbmFsaXplKGwpe3RoaXMuY2FsY3VsYXRpb25UeXBlcy5mb3JFYWNoKGE9PntsZXRbLGRdPWE7cmV0dXJuIGQuZmluYWxpemUobCl9KX1nZXRSZXN1bHRzRm9yKGwp'@;
put 'e3JldHVybiB0aGlzLmNhbGN1bGF0aW9uUmVzdWx0cy5nZXQobCl9fWZ1bmN0aW9uIFcyKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBZZXQoYyl7dmFyIGw9ZnVuY3Rpb24gR2V0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1p'@;
put 'dGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9'@;
put 'PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31j'@;
put 'bGFzcyAkZXQgZXh0ZW5kcyBzM2V7Y29uc3RydWN0b3IobCl7bGV0e2NhbGN1bGF0aW9uVHlwZXM6YSx2aWV3cG9ydEhlaWdodDpkLHNjcm9sbE9mZnNldDpoLHRvdGFsUm93czpmLGRlZmF1bHRSb3dIZWlnaHQ6dixyb3dIZWlnaHRGbjpNLG92ZXJyaWRlRm46RCxob3Jpem9udGFsU2Nyb2xs'@;
put 'YmFySGVpZ2h0Olp9PWw7c3VwZXIoYSksVzIodGhpcywidmlld3BvcnRIZWlnaHQiLDApLFcyKHRoaXMsInNjcm9sbE9mZnNldCIsMCksVzIodGhpcywiemVyb0Jhc2VkU2Nyb2xsT2Zmc2V0IiwwKSxXMih0aGlzLCJ0b3RhbFJvd3MiLDApLFcyKHRoaXMsInJvd0hlaWdodEZuIixudWxsKSxX'@;
put 'Mih0aGlzLCJyb3dIZWlnaHQiLDApLFcyKHRoaXMsIm92ZXJyaWRlRm4iLG51bGwpLFcyKHRoaXMsImhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQiLDApLFcyKHRoaXMsImlubmVyVmlld3BvcnRIZWlnaHQiLDApLFcyKHRoaXMsInRvdGFsQ2FsY3VsYXRlZEhlaWdodCIsMCksVzIodGhpcywi'@;
put 'c3RhcnRQb3NpdGlvbnMiLFtdKSxXMih0aGlzLCJuZWVkUmV2ZXJzZSIsITApLHRoaXMuZGVmYXVsdEhlaWdodD12LHRoaXMudmlld3BvcnRIZWlnaHQ9ZCx0aGlzLnNjcm9sbE9mZnNldD1oLHRoaXMuemVyb0Jhc2VkU2Nyb2xsT2Zmc2V0PU1hdGgubWF4KGgsMCksdGhpcy50b3RhbFJvd3M9'@;
put 'Zix0aGlzLnJvd0hlaWdodEZuPU0sdGhpcy5vdmVycmlkZUZuPUQsdGhpcy5ob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0PVo/PzAsdGhpcy5pbm5lclZpZXdwb3J0SGVpZ2h0PXRoaXMuemVyb0Jhc2VkU2Nyb2xsT2Zmc2V0K3RoaXMudmlld3BvcnRIZWlnaHQtdGhpcy5ob3Jpem9udGFsU2Ny'@;
put 'b2xsYmFySGVpZ2h0LHRoaXMuY2FsY3VsYXRlKCl9Y2FsY3VsYXRlKCl7dGhpcy5faW5pdGlhbGl6ZSh0aGlzKTtmb3IobGV0IGw9MDtsPHRoaXMudG90YWxSb3dzO2wrKylpZih0aGlzLnJvd0hlaWdodD10aGlzLmdldFJvd0hlaWdodChsKSx0aGlzLl9wcm9jZXNzKGwsdGhpcyksdGhpcy5z'@;
put 'dGFydFBvc2l0aW9ucy5wdXNoKHRoaXMudG90YWxDYWxjdWxhdGVkSGVpZ2h0KSx0aGlzLnRvdGFsQ2FsY3VsYXRlZEhlaWdodCs9dGhpcy5yb3dIZWlnaHQsdGhpcy50b3RhbENhbGN1bGF0ZWRIZWlnaHQ+PXRoaXMuaW5uZXJWaWV3cG9ydEhlaWdodCl7dGhpcy5uZWVkUmV2ZXJzZT0hMTti'@;
put 'cmVha310aGlzLl9maW5hbGl6ZSh0aGlzKX1nZXRSb3dIZWlnaHQobCl7Y29uc3QgYT10aGlzLnJvd0hlaWdodEZuKGwpO3JldHVybiBpc05hTihhKT90aGlzLmRlZmF1bHRIZWlnaHQ6YX19ZnVuY3Rpb24gYTMoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIEtldChjKXt2YXIgbD1mdW5jdGlv'@;
put 'biBxZXQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVy'@;
put 'cm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5'@;
put 'KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNvbnN0IF9fPTUwO2NsYXNzIFhldCBleHRlbmRzIHMzZXtjb25zdHJ1Y3RvcihsKXtsZXR7Y2FsY3VsYXRpb25UeXBlczphLHZpZXdwb3J0V2lkdGg6ZCxzY3JvbGxPZmZz'@;
put 'ZXQ6aCx0b3RhbENvbHVtbnM6Zixjb2x1bW5XaWR0aEZuOnYsb3ZlcnJpZGVGbjpNLGlubGluZVN0YXJ0T2Zmc2V0OkR9PWw7c3VwZXIoYSksYTModGhpcywidmlld3BvcnRXaWR0aCIsMCksYTModGhpcywic2Nyb2xsT2Zmc2V0IiwwKSxhMyh0aGlzLCJ6ZXJvQmFzZWRTY3JvbGxPZmZzZXQi'@;
put 'LDApLGEzKHRoaXMsInRvdGFsQ29sdW1ucyIsMCksYTModGhpcywiY29sdW1uV2lkdGhGbiIsbnVsbCksYTModGhpcywiY29sdW1uV2lkdGgiLDApLGEzKHRoaXMsIm92ZXJyaWRlRm4iLG51bGwpLGEzKHRoaXMsImlubGluZVN0YXJ0T2Zmc2V0IiwwKSxhMyh0aGlzLCJ0b3RhbENhbGN1bGF0'@;
put 'ZWRXaWR0aCIsMCksYTModGhpcywic3RhcnRQb3NpdGlvbnMiLFtdKSxhMyh0aGlzLCJuZWVkUmV2ZXJzZSIsITApLHRoaXMudmlld3BvcnRXaWR0aD1kLHRoaXMuc2Nyb2xsT2Zmc2V0PWgsdGhpcy56ZXJvQmFzZWRTY3JvbGxPZmZzZXQ9TWF0aC5tYXgoaCwwKSx0aGlzLnRvdGFsQ29sdW1u'@;
put 'cz1mLHRoaXMuY29sdW1uV2lkdGhGbj12LHRoaXMub3ZlcnJpZGVGbj1NLHRoaXMuaW5saW5lU3RhcnRPZmZzZXQ9RCx0aGlzLmNhbGN1bGF0ZSgpfWNhbGN1bGF0ZSgpe3RoaXMuX2luaXRpYWxpemUodGhpcyk7Zm9yKGxldCBsPTA7bDx0aGlzLnRvdGFsQ29sdW1ucztsKyspaWYodGhpcy5j'@;
put 'b2x1bW5XaWR0aD10aGlzLmdldENvbHVtbldpZHRoKGwpLHRoaXMuX3Byb2Nlc3MobCx0aGlzKSx0aGlzLnN0YXJ0UG9zaXRpb25zLnB1c2godGhpcy50b3RhbENhbGN1bGF0ZWRXaWR0aCksdGhpcy50b3RhbENhbGN1bGF0ZWRXaWR0aCs9dGhpcy5jb2x1bW5XaWR0aCx0aGlzLnRvdGFsQ2Fs'@;
put 'Y3VsYXRlZFdpZHRoPj10aGlzLnplcm9CYXNlZFNjcm9sbE9mZnNldCt0aGlzLnZpZXdwb3J0V2lkdGgpe3RoaXMubmVlZFJldmVyc2U9ITE7YnJlYWt9dGhpcy5fZmluYWxpemUodGhpcyl9Z2V0Q29sdW1uV2lkdGgobCl7Y29uc3QgYT10aGlzLmNvbHVtbldpZHRoRm4obCk7cmV0dXJuIGlz'@;
put 'TmFOKGEpP19fOmF9fWNvbnN0IFFldD1jbGFzcyBKZXR7Y29uc3RydWN0b3IobCxhLGQsaCxmKXt0aGlzLmRhdGFBY2Nlc3NPYmplY3Q9bCx0aGlzLndvdD1sLndvdCx0aGlzLmluc3RhbmNlPXRoaXMud290LHRoaXMuZG9tQmluZGluZ3M9YSx0aGlzLnd0U2V0dGluZ3M9ZCx0aGlzLnd0VGFi'@;
put 'bGU9Zix0aGlzLm92ZXJzaXplZFJvd3M9W10sdGhpcy5vdmVyc2l6ZWRDb2x1bW5IZWFkZXJzPVtdLHRoaXMuaGFzT3ZlcnNpemVkQ29sdW1uSGVhZGVyc01hcmtlZD17fSx0aGlzLmNsaWVudEhlaWdodD0wLHRoaXMucm93SGVhZGVyV2lkdGg9TmFOLHRoaXMucm93c1Zpc2libGVDYWxjdWxh'@;
put 'dG9yPW51bGwsdGhpcy5jb2x1bW5zVmlzaWJsZUNhbGN1bGF0b3I9bnVsbCx0aGlzLnJvd3NDYWxjdWxhdG9yVHlwZXM9bmV3IE1hcChbWyJyZW5kZXJlZCIsKCk9PnRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJyZW5kZXJBbGxSb3dzIik/bmV3IE1ldDpuZXcga2V0XSxbImZ1bGx5Vmlz'@;
put 'aWJsZSIsKCk9Pm5ldyBSZXRdLFsicGFydGlhbGx5VmlzaWJsZSIsKCk9Pm5ldyBuM2VdXSksdGhpcy5jb2x1bW5zQ2FsY3VsYXRvclR5cGVzPW5ldyBNYXAoW1sicmVuZGVyZWQiLCgpPT50aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygicmVuZGVyQWxsQ29sdW1ucyIpP25ldyBQZXQ6bmV3'@;
put 'IEJldF0sWyJmdWxseVZpc2libGUiLCgpPT5uZXcgVWV0XSxbInBhcnRpYWxseVZpc2libGUiLCgpPT5uZXcgaTNlXV0pLHRoaXMuZXZlbnRNYW5hZ2VyPWgsdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcih0aGlzLmRvbUJpbmRpbmdzLnJvb3RXaW5kb3csInJlc2l6ZSIsKCk9'@;
put 'Pnt0aGlzLmNsaWVudEhlaWdodD10aGlzLmdldFdvcmtzcGFjZUhlaWdodCgpfSl9Z2V0V29ya3NwYWNlSGVpZ2h0KCl7Y29uc3QgYT10aGlzLmRhdGFBY2Nlc3NPYmplY3QudG9wT3ZlcmxheVRyaW1taW5nQ29udGFpbmVyO2xldCBkPTA7cmV0dXJuIGQ9YT09PXRoaXMuZG9tQmluZGluZ3Mu'@;
put 'cm9vdFdpbmRvdz90aGlzLmRvbUJpbmRpbmdzLnJvb3REb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0Onh1KGEpPjAmJmEuY2xpZW50SGVpZ2h0PjA/YS5jbGllbnRIZWlnaHQ6MS8wLGR9Z2V0Vmlld3BvcnRIZWlnaHQoKXtsZXQgbD10aGlzLmdldFdvcmtzcGFjZUhlaWdo'@;
put 'dCgpO2lmKGw9PT0xLzApcmV0dXJuIGw7Y29uc3QgYT10aGlzLmdldENvbHVtbkhlYWRlckhlaWdodCgpO3JldHVybiBhPjAmJihsLT1hKSxsfWdldFdvcmtzcGFjZVdpZHRoKCl7Y29uc3R7cm9vdERvY3VtZW50Omwscm9vdFdpbmRvdzphfT10aGlzLmRvbUJpbmRpbmdzLGQ9dGhpcy5kYXRh'@;
put 'QWNjZXNzT2JqZWN0LmlubGluZVN0YXJ0T3ZlcmxheVRyaW1taW5nQ29udGFpbmVyO2xldCBoO2lmKGQ9PT1hKXtjb25zdCBmPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJ0b3RhbENvbHVtbnMiKTtoPXRoaXMud3RUYWJsZS5ob2xkZXIub2Zmc2V0V2lkdGgsdGhpcy5nZXRSb3dIZWFk'@;
put 'ZXJXaWR0aCgpK3RoaXMuc3VtQ29sdW1uV2lkdGhzKDAsZik+aCYmKGg9bC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGgpfWVsc2UgaD1kLmNsaWVudFdpZHRoO3JldHVybiBofWdldFZpZXdwb3J0V2lkdGgoKXtjb25zdCBsPXRoaXMuZ2V0V29ya3NwYWNlV2lkdGgoKTtpZihsPT09MS8w'@;
put 'KXJldHVybiBsO2NvbnN0IGE9dGhpcy5nZXRSb3dIZWFkZXJXaWR0aCgpO3JldHVybiBhPjA/bC1hOmx9aGFzVmVydGljYWxTY3JvbGwoKXtpZih0aGlzLmlzVmVydGljYWxseVNjcm9sbGFibGVCeVdpbmRvdygpKXtjb25zdCBmPXRoaXMuZG9tQmluZGluZ3Mucm9vdERvY3VtZW50LmRvY3Vt'@;
put 'ZW50RWxlbWVudDtyZXR1cm4gZi5zY3JvbGxIZWlnaHQ+Zi5jbGllbnRIZWlnaHR9Y29uc3R7aG9sZGVyOmwsaGlkZXI6YX09dGhpcy53dFRhYmxlLGg9YS5vZmZzZXRIZWlnaHQ7cmV0dXJuIGwuY2xpZW50SGVpZ2h0PGh8fGg+dGhpcy5nZXRXb3Jrc3BhY2VIZWlnaHQoKX1oYXNIb3Jpem9u'@;
put 'dGFsU2Nyb2xsKCl7aWYodGhpcy5pc1ZlcnRpY2FsbHlTY3JvbGxhYmxlQnlXaW5kb3coKSl7Y29uc3QgZj10aGlzLmRvbUJpbmRpbmdzLnJvb3REb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7cmV0dXJuIGYuc2Nyb2xsV2lkdGg+Zi5jbGllbnRXaWR0aH1jb25zdHtob2xkZXI6bCxoaWRlcjph'@;
put 'fT10aGlzLnd0VGFibGUsaD1hLm9mZnNldFdpZHRoO3JldHVybiBsLmNsaWVudFdpZHRoPGh8fGg+dGhpcy5nZXRXb3Jrc3BhY2VXaWR0aCgpfWlzVmVydGljYWxseVNjcm9sbGFibGVCeVdpbmRvdygpe3JldHVybiB0aGlzLmRhdGFBY2Nlc3NPYmplY3QudG9wT3ZlcmxheVRyaW1taW5nQ29u'@;
put 'dGFpbmVyPT09dGhpcy5kb21CaW5kaW5ncy5yb290V2luZG93fWlzSG9yaXpvbnRhbGx5U2Nyb2xsYWJsZUJ5V2luZG93KCl7cmV0dXJuIHRoaXMuZGF0YUFjY2Vzc09iamVjdC5pbmxpbmVTdGFydE92ZXJsYXlUcmltbWluZ0NvbnRhaW5lcj09PXRoaXMuZG9tQmluZGluZ3Mucm9vdFdpbmRv'@;
put 'd31zdW1Db2x1bW5XaWR0aHMobCxhKXtsZXQgZD0wLGg9bDtmb3IoO2g8YTspZCs9dGhpcy53dFRhYmxlLmdldENvbHVtbldpZHRoKGgpLGgrPTE7cmV0dXJuIGR9Z2V0V29ya3NwYWNlT2Zmc2V0KCl7cmV0dXJuIFUwKHRoaXMud3RUYWJsZS5ob2xkZXIpfWdldENvbHVtbkhlYWRlckhlaWdo'@;
put 'dCgpe3JldHVybiB0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiY29sdW1uSGVhZGVycyIpLmxlbmd0aD9pc05hTih0aGlzLmNvbHVtbkhlYWRlckhlaWdodCkmJih0aGlzLmNvbHVtbkhlYWRlckhlaWdodD14dSh0aGlzLnd0VGFibGUuVEhFQUQpKTp0aGlzLmNvbHVtbkhlYWRlckhlaWdo'@;
put 'dD0wLHRoaXMuY29sdW1uSGVhZGVySGVpZ2h0fWdldFJvd0hlYWRlcldpZHRoKCl7Y29uc3QgbD10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygicm93SGVhZGVyV2lkdGgiKSxhPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJyb3dIZWFkZXJzIik7aWYobCl7dGhpcy5yb3dIZWFkZXJX'@;
put 'aWR0aD0wO2ZvcihsZXQgZD0wLGg9YS5sZW5ndGg7ZDxoO2QrKyl0aGlzLnJvd0hlYWRlcldpZHRoKz1sW2RdfHxsfWlmKGlzTmFOKHRoaXMucm93SGVhZGVyV2lkdGgpKWlmKGEubGVuZ3RoKXtsZXQgZD10aGlzLnd0VGFibGUuVEFCTEUucXVlcnlTZWxlY3RvcigiVEgiKTt0aGlzLnJvd0hl'@;
put 'YWRlcldpZHRoPTA7Zm9yKGxldCBoPTAsZj1hLmxlbmd0aDtoPGY7aCsrKWQ/KHRoaXMucm93SGVhZGVyV2lkdGgrPXN1KGQpLGQ9ZC5uZXh0U2libGluZyk6dGhpcy5yb3dIZWFkZXJXaWR0aCs9NTB9ZWxzZSB0aGlzLnJvd0hlYWRlcldpZHRoPTA7cmV0dXJuIHRoaXMucm93SGVhZGVyV2lk'@;
put 'dGg9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoIm9uTW9kaWZ5Um93SGVhZGVyV2lkdGgiLHRoaXMucm93SGVhZGVyV2lkdGgpfHx0aGlzLnJvd0hlYWRlcldpZHRoLHRoaXMucm93SGVhZGVyV2lkdGh9Y3JlYXRlUm93c0NhbGN1bGF0b3IoKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjAm'@;
put 'JnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06WyJyZW5kZXJlZCIsImZ1bGx5VmlzaWJsZSIsInBhcnRpYWxseVZpc2libGUiXTtjb25zdHt3dFNldHRpbmdzOmEsd3RUYWJsZTpkfT10aGlzO2xldCBmLHYsaD10aGlzLmdldFZpZXdwb3J0SGVpZ2h0KCk7dGhpcy5yb3dIZWFk'@;
put 'ZXJXaWR0aD1OYU47bGV0IE09dGhpcy5kYXRhQWNjZXNzT2JqZWN0LnRvcFNjcm9sbFBvc2l0aW9uLXRoaXMuZGF0YUFjY2Vzc09iamVjdC50b3BQYXJlbnRPZmZzZXQ7Y29uc3QgRD1hLmdldFNldHRpbmcoImZpeGVkUm93c1RvcCIpLFo9YS5nZXRTZXR0aW5nKCJmaXhlZFJvd3NCb3R0b20i'@;
put 'KSxyZT1hLmdldFNldHRpbmcoInRvdGFsUm93cyIpO3JldHVybiBEJiZNPj0wJiYodj10aGlzLmRhdGFBY2Nlc3NPYmplY3QudG9wT3ZlcmxheS5zdW1DZWxsU2l6ZXMoMCxEKSxNKz12LGgtPXYpLFomJnRoaXMuZGF0YUFjY2Vzc09iamVjdC5ib3R0b21PdmVybGF5LmNsb25lJiYodj10aGlz'@;
put 'LmRhdGFBY2Nlc3NPYmplY3QuYm90dG9tT3ZlcmxheS5zdW1DZWxsU2l6ZXMocmUtWixyZSksaC09diksZj1kLmhvbGRlci5jbGllbnRIZWlnaHQ9PT1kLmhvbGRlci5vZmZzZXRIZWlnaHQ/MDpmMCh0aGlzLmRvbUJpbmRpbmdzLnJvb3REb2N1bWVudCksbmV3ICRldCh7Y2FsY3VsYXRpb25U'@;
put 'eXBlczpsLm1hcChjZT0+W2NlLHRoaXMucm93c0NhbGN1bGF0b3JUeXBlcy5nZXQoY2UpKCldKSx2aWV3cG9ydEhlaWdodDpoLHNjcm9sbE9mZnNldDpNLHRvdGFsUm93czphLmdldFNldHRpbmcoInRvdGFsUm93cyIpLGRlZmF1bHRSb3dIZWlnaHQ6dGhpcy5pbnN0YW5jZS5zdHlsZXNIYW5k'@;
put 'bGVyLmdldERlZmF1bHRSb3dIZWlnaHQoKSxyb3dIZWlnaHRGbjpjZT0+ZC5nZXRSb3dIZWlnaHQoY2UpLG92ZXJyaWRlRm46YS5nZXRTZXR0aW5nUHVyZSgidmlld3BvcnRSb3dDYWxjdWxhdG9yT3ZlcnJpZGUiKSxob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0OmZ9KX1jcmVhdGVDb2x1bW5z'@;
put 'Q2FsY3VsYXRvcigpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTpbInJlbmRlcmVkIiwiZnVsbHlWaXNpYmxlIiwicGFydGlhbGx5VmlzaWJsZSJdO2NvbnN0e3d0U2V0dGluZ3M6YSx3dFRhYmxlOmR9PXRoaXM7bGV0IGg9dGhp'@;
put 'cy5nZXRWaWV3cG9ydFdpZHRoKCksZj1NYXRoLmFicyh0aGlzLmRhdGFBY2Nlc3NPYmplY3QuaW5saW5lU3RhcnRTY3JvbGxQb3NpdGlvbiktdGhpcy5kYXRhQWNjZXNzT2JqZWN0LmlubGluZVN0YXJ0UGFyZW50T2Zmc2V0O3RoaXMuY29sdW1uSGVhZGVySGVpZ2h0PU5hTjtjb25zdCB2PWEu'@;
put 'Z2V0U2V0dGluZygiZml4ZWRDb2x1bW5zU3RhcnQiKTtpZih2JiZmPj0wKXtjb25zdCBNPXRoaXMuZGF0YUFjY2Vzc09iamVjdC5pbmxpbmVTdGFydE92ZXJsYXkuc3VtQ2VsbFNpemVzKDAsdik7Zis9TSxoLT1NfXJldHVybiBkLmhvbGRlci5jbGllbnRXaWR0aCE9PWQuaG9sZGVyLm9mZnNl'@;
put 'dFdpZHRoJiYoaC09ZjAodGhpcy5kb21CaW5kaW5ncy5yb290RG9jdW1lbnQpKSxuZXcgWGV0KHtjYWxjdWxhdGlvblR5cGVzOmwubWFwKE09PltNLHRoaXMuY29sdW1uc0NhbGN1bGF0b3JUeXBlcy5nZXQoTSkoKV0pLHZpZXdwb3J0V2lkdGg6aCxzY3JvbGxPZmZzZXQ6Zix0b3RhbENvbHVt'@;
put 'bnM6YS5nZXRTZXR0aW5nKCJ0b3RhbENvbHVtbnMiKSxjb2x1bW5XaWR0aEZuOk09PmQuZ2V0Q29sdW1uV2lkdGgoTSksb3ZlcnJpZGVGbjphLmdldFNldHRpbmdQdXJlKCJ2aWV3cG9ydENvbHVtbkNhbGN1bGF0b3JPdmVycmlkZSIpLGlubGluZVN0YXJ0T2Zmc2V0OnRoaXMuZGF0YUFjY2Vz'@;
put 'c09iamVjdC5pbmxpbmVTdGFydFBhcmVudE9mZnNldH0pfWNyZWF0ZUNhbGN1bGF0b3JzKCl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0mJmFyZ3VtZW50c1swXTtjb25zdHt3dFNldHRpbmdzOmF9PXRoaXMsZD10aGlzLmNyZWF0ZVJvd3NDYWxjdWxh'@;
put 'dG9yKCksaD10aGlzLmNyZWF0ZUNvbHVtbnNDYWxjdWxhdG9yKCk7aWYobCYmIWEuZ2V0U2V0dGluZygicmVuZGVyQWxsUm93cyIpKXtjb25zdCBmPWQuZ2V0UmVzdWx0c0ZvcigiZnVsbHlWaXNpYmxlIik7bD10aGlzLmFyZUFsbFByb3Bvc2VkVmlzaWJsZVJvd3NBbHJlYWR5UmVuZGVyZWQo'@;
put 'Zil9aWYobCYmIWEuZ2V0U2V0dGluZygicmVuZGVyQWxsQ29sdW1ucyIpKXtjb25zdCBmPWguZ2V0UmVzdWx0c0ZvcigiZnVsbHlWaXNpYmxlIik7bD10aGlzLmFyZUFsbFByb3Bvc2VkVmlzaWJsZUNvbHVtbnNBbHJlYWR5UmVuZGVyZWQoZil9cmV0dXJuIGx8fCh0aGlzLnJvd3NSZW5kZXJD'@;
put 'YWxjdWxhdG9yPWQuZ2V0UmVzdWx0c0ZvcigicmVuZGVyZWQiKSx0aGlzLmNvbHVtbnNSZW5kZXJDYWxjdWxhdG9yPWguZ2V0UmVzdWx0c0ZvcigicmVuZGVyZWQiKSksdGhpcy5yb3dzVmlzaWJsZUNhbGN1bGF0b3I9ZC5nZXRSZXN1bHRzRm9yKCJmdWxseVZpc2libGUiKSx0aGlzLmNvbHVt'@;
put 'bnNWaXNpYmxlQ2FsY3VsYXRvcj1oLmdldFJlc3VsdHNGb3IoImZ1bGx5VmlzaWJsZSIpLHRoaXMucm93c1BhcnRpYWxseVZpc2libGVDYWxjdWxhdG9yPWQuZ2V0UmVzdWx0c0ZvcigicGFydGlhbGx5VmlzaWJsZSIpLHRoaXMuY29sdW1uc1BhcnRpYWxseVZpc2libGVDYWxjdWxhdG9yPWgu'@;
put 'Z2V0UmVzdWx0c0ZvcigicGFydGlhbGx5VmlzaWJsZSIpLGx9Y3JlYXRlVmlzaWJsZUNhbGN1bGF0b3JzKCl7Y29uc3QgbD10aGlzLmNyZWF0ZVJvd3NDYWxjdWxhdG9yKFsiZnVsbHlWaXNpYmxlIiwicGFydGlhbGx5VmlzaWJsZSJdKSxhPXRoaXMuY3JlYXRlQ29sdW1uc0NhbGN1bGF0b3Io'@;
put 'WyJmdWxseVZpc2libGUiLCJwYXJ0aWFsbHlWaXNpYmxlIl0pO3RoaXMucm93c1Zpc2libGVDYWxjdWxhdG9yPWwuZ2V0UmVzdWx0c0ZvcigiZnVsbHlWaXNpYmxlIiksdGhpcy5jb2x1bW5zVmlzaWJsZUNhbGN1bGF0b3I9YS5nZXRSZXN1bHRzRm9yKCJmdWxseVZpc2libGUiKSx0aGlzLnJv'@;
put 'd3NQYXJ0aWFsbHlWaXNpYmxlQ2FsY3VsYXRvcj1sLmdldFJlc3VsdHNGb3IoInBhcnRpYWxseVZpc2libGUiKSx0aGlzLmNvbHVtbnNQYXJ0aWFsbHlWaXNpYmxlQ2FsY3VsYXRvcj1hLmdldFJlc3VsdHNGb3IoInBhcnRpYWxseVZpc2libGUiKX1hcmVBbGxQcm9wb3NlZFZpc2libGVSb3dz'@;
put 'QWxyZWFkeVJlbmRlcmVkKGwpe2lmKCF0aGlzLnJvd3NWaXNpYmxlQ2FsY3VsYXRvcilyZXR1cm4hMTtsZXR7c3RhcnRSb3c6YSxlbmRSb3c6ZH09bDtpZihudWxsPT09YSYmbnVsbD09PWQpe2lmKCFsLmlzVmlzaWJsZUluVHJpbW1pbmdDb250YWluZXIpcmV0dXJuITA7YT10aGlzLnJvd3NQ'@;
put 'YXJ0aWFsbHlWaXNpYmxlQ2FsY3VsYXRvci5zdGFydFJvdyxkPXRoaXMucm93c1BhcnRpYWxseVZpc2libGVDYWxjdWxhdG9yLmVuZFJvd31jb25zdHtzdGFydFJvdzpoLGVuZFJvdzpmLHJvd1N0YXJ0T2Zmc2V0OnYscm93RW5kT2Zmc2V0Ok19PXRoaXMucm93c1JlbmRlckNhbGN1bGF0b3Is'@;
put 'RD10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygidG90YWxSb3dzIiktMSxaPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJ2aWV3cG9ydFJvd1JlbmRlcmluZ1RocmVzaG9sZCIpO3JldHVybiBOdW1iZXIuaXNJbnRlZ2VyKFopJiZaPjA/KGE9TWF0aC5tYXgoMCxhLU1hdGgubWluKHYs'@;
put 'WikpLGQ9TWF0aC5taW4oRCxkK01hdGgubWluKE0sWikpKToiYXV0byI9PT1aJiYoYT1NYXRoLm1heCgwLGEtTWF0aC5jZWlsKHYvMikpLGQ9TWF0aC5taW4oRCxkK01hdGguY2VpbChNLzIpKSksIShhPGh8fGE9PT1oJiZhPjB8fGQ+Znx8ZD09PWYmJmQ8RCl9YXJlQWxsUHJvcG9zZWRWaXNp'@;
put 'YmxlQ29sdW1uc0FscmVhZHlSZW5kZXJlZChsKXtpZighdGhpcy5jb2x1bW5zVmlzaWJsZUNhbGN1bGF0b3IpcmV0dXJuITE7bGV0e3N0YXJ0Q29sdW1uOmEsZW5kQ29sdW1uOmR9PWw7aWYobnVsbD09PWEmJm51bGw9PT1kKXtpZighbC5pc1Zpc2libGVJblRyaW1taW5nQ29udGFpbmVyKXJl'@;
put 'dHVybiEwO2E9dGhpcy5jb2x1bW5zUGFydGlhbGx5VmlzaWJsZUNhbGN1bGF0b3Iuc3RhcnRDb2x1bW4sZD10aGlzLmNvbHVtbnNQYXJ0aWFsbHlWaXNpYmxlQ2FsY3VsYXRvci5lbmRDb2x1bW59Y29uc3R7c3RhcnRDb2x1bW46aCxlbmRDb2x1bW46Zixjb2x1bW5TdGFydE9mZnNldDp2LGNv'@;
put 'bHVtbkVuZE9mZnNldDpNfT10aGlzLmNvbHVtbnNSZW5kZXJDYWxjdWxhdG9yLEQ9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInRvdGFsQ29sdW1ucyIpLTEsWj10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygidmlld3BvcnRDb2x1bW5SZW5kZXJpbmdUaHJlc2hvbGQiKTtyZXR1cm4g'@;
put 'TnVtYmVyLmlzSW50ZWdlcihaKSYmWj4wPyhhPU1hdGgubWF4KDAsYS1NYXRoLm1pbih2LFopKSxkPU1hdGgubWluKEQsZCtNYXRoLm1pbihNLFopKSk6ImF1dG8iPT09WiYmKGE9TWF0aC5tYXgoMCxhLU1hdGguY2VpbCh2LzIpKSxkPU1hdGgubWluKEQsZCtNYXRoLmNlaWwoTS8yKSkpLCEo'@;
put 'YTxofHxhPT09aCYmYT4wfHxkPmZ8fGQ9PT1mJiZkPEQpfXJlc2V0SGFzT3ZlcnNpemVkQ29sdW1uSGVhZGVyc01hcmtlZCgpe1hvKHRoaXMuaGFzT3ZlcnNpemVkQ29sdW1uSGVhZGVyc01hcmtlZCwobCxhLGQpPT57ZFthXT12b2lkIDB9KX19O2Z1bmN0aW9uIGwzZShjLGwsYSl7YzNlKGMs'@;
put 'bCksbC5zZXQoYyxhKX1mdW5jdGlvbiBjM2UoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfWZ1bmN0aW9uIFpjKGMsbCl7cmV0dXJuIGMuZ2V0KFVFKGMs'@;
put 'bCkpfWZ1bmN0aW9uIHUzZShjLGwsYSl7cmV0dXJuIGMuc2V0KFVFKGMsbCksYSksYX1mdW5jdGlvbiBVRShjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0'@;
put 'ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9eSg5MzkwOSk7dmFyIG8zPW5ldyBXZWFrTWFwLHYxPW5ldyBXZWFrTWFwLGxQPW5ldyBXZWFrU2V0O2NsYXNzIHR0dHtjb25zdHJ1Y3RvcigpeyhmdW5jdGlvbiBldHQoYyxsKXtjM2UoYyxsKSxsLmFkZChjKX0pKHRo'@;
put 'aXMsbFApLGwzZSh0aGlzLG8zLHZvaWQgMCksbDNlKHRoaXMsdjEsdm9pZCAwKX1zZXRBY3RpdmVPdmVybGF5KGwpe3JldHVybiB1M2UodjEsdGhpcyxsKSx0aGlzfXNldEFjdGl2ZVNlbGVjdGlvbihsKXtyZXR1cm4gdTNlKG8zLHRoaXMsbCksdGhpc31zY2FuKCl7Y29uc3QgbD1aYyhvMyx0'@;
put 'aGlzKS5zZXR0aW5ncy5zZWxlY3Rpb25UeXBlLGE9bmV3IFNldDtyZXR1cm4iYWN0aXZlLWhlYWRlciI9PT1sPyh0aGlzLnNjYW5Db2x1bW5zSW5IZWFkZXJzUmFuZ2UoZD0+YS5hZGQoZCkpLHRoaXMuc2NhblJvd3NJbkhlYWRlcnNSYW5nZShkPT5hLmFkZChkKSkpOiJhcmVhIj09PWw/dGhp'@;
put 'cy5zY2FuQ2VsbHNSYW5nZShkPT5hLmFkZChkKSk6ImZvY3VzIj09PWw/KHRoaXMuc2NhbkNvbHVtbnNJbkhlYWRlcnNSYW5nZShkPT5hLmFkZChkKSksdGhpcy5zY2FuUm93c0luSGVhZGVyc1JhbmdlKGQ9PmEuYWRkKGQpKSx0aGlzLnNjYW5DZWxsc1JhbmdlKGQ9PmEuYWRkKGQpKSk6ImZp'@;
put 'bGwiPT09bD90aGlzLnNjYW5DZWxsc1JhbmdlKGQ9PmEuYWRkKGQpKToiaGVhZGVyIj09PWw/KHRoaXMuc2NhbkNvbHVtbnNJbkhlYWRlcnNSYW5nZShkPT5hLmFkZChkKSksdGhpcy5zY2FuUm93c0luSGVhZGVyc1JhbmdlKGQ9PmEuYWRkKGQpKSk6InJvdyI9PT1sPyh0aGlzLnNjYW5Sb3dz'@;
put 'SW5IZWFkZXJzUmFuZ2UoZD0+YS5hZGQoZCkpLHRoaXMuc2NhblJvd3NJbkNlbGxzUmFuZ2UoZD0+YS5hZGQoZCkpKToiY29sdW1uIj09PWwmJih0aGlzLnNjYW5Db2x1bW5zSW5IZWFkZXJzUmFuZ2UoZD0+YS5hZGQoZCkpLHRoaXMuc2NhbkNvbHVtbnNJbkNlbGxzUmFuZ2UoZD0+YS5hZGQo'@;
put 'ZCkpKSxhfXNjYW5Db2x1bW5zSW5IZWFkZXJzUmFuZ2UobCl7Y29uc3RbYSxkLGgsZl09WmMobzMsdGhpcykuZ2V0Q29ybmVycygpLHt3dFRhYmxlOnZ9PVpjKHYxLHRoaXMpLE09di5nZXRSZW5kZXJlZENvbHVtbnNDb3VudCgpLEQ9di5nZXRDb2x1bW5IZWFkZXJzQ291bnQoKTtsZXQgWj0w'@;
put 'O2ZvcihsZXQgcmU9LXYuZ2V0Um93SGVhZGVyc0NvdW50KCk7cmU8TTtyZSsrKXtjb25zdCBjZT12LmNvbHVtbkZpbHRlci5yZW5kZXJlZFRvU291cmNlKHJlKTtpZighKGNlPGR8fGNlPmYpKXtmb3IobGV0IGJlPS1EO2JlPDA7YmUrKyl7aWYoYmU8YXx8YmU+aCljb250aW51ZTtjb25zdCBF'@;
put 'ZT1iZStEO2xldCBCZT12LmdldENvbHVtbkhlYWRlcihjZSxFZSk7Y29uc3QgcWU9WmModjEsdGhpcykuZ2V0U2V0dGluZygib25CZWZvcmVIaWdobGlnaHRpbmdDb2x1bW5IZWFkZXIiLGNlLEVlLHtzZWxlY3Rpb25UeXBlOlpjKG8zLHRoaXMpLnNldHRpbmdzLnNlbGVjdGlvblR5cGUsY29s'@;
put 'dW1uQ3Vyc29yOlosc2VsZWN0aW9uV2lkdGg6Zi1kKzF9KTtudWxsIT09cWUmJihxZSE9PWNlJiYoQmU9di5nZXRDb2x1bW5IZWFkZXIocWUsRWUpKSxsKEJlKSl9Wis9MX19fXNjYW5Sb3dzSW5IZWFkZXJzUmFuZ2UobCl7Y29uc3RbYSxkLGgsZl09WmMobzMsdGhpcykuZ2V0Q29ybmVycygp'@;
put 'LHt3dFRhYmxlOnZ9PVpjKHYxLHRoaXMpLE09di5nZXRSZW5kZXJlZFJvd3NDb3VudCgpLEQ9di5nZXRSb3dIZWFkZXJzQ291bnQoKTtsZXQgWj0wO2ZvcihsZXQgcmU9LXYuZ2V0Q29sdW1uSGVhZGVyc0NvdW50KCk7cmU8TTtyZSsrKXtjb25zdCBjZT12LnJvd0ZpbHRlci5yZW5kZXJlZFRv'@;
put 'U291cmNlKHJlKTtpZighKGNlPGF8fGNlPmgpKXtmb3IobGV0IGJlPS1EO2JlPDA7YmUrKyl7aWYoYmU8ZHx8YmU+Ziljb250aW51ZTtjb25zdCBFZT1iZStEO2xldCBCZT12LmdldFJvd0hlYWRlcihjZSxFZSk7Y29uc3QgcWU9WmModjEsdGhpcykuZ2V0U2V0dGluZygib25CZWZvcmVIaWdo'@;
put 'bGlnaHRpbmdSb3dIZWFkZXIiLGNlLEVlLHtzZWxlY3Rpb25UeXBlOlpjKG8zLHRoaXMpLnNldHRpbmdzLnNlbGVjdGlvblR5cGUscm93Q3Vyc29yOlosc2VsZWN0aW9uSGVpZ2h0OmgtYSsxfSk7bnVsbCE9PXFlJiYocWUhPT1jZSYmKEJlPXYuZ2V0Um93SGVhZGVyKHFlLEVlKSksbChCZSkp'@;
put 'fVorPTF9fX1zY2FuQ2VsbHNSYW5nZShsKXtjb25zdHt3dFRhYmxlOmF9PVpjKHYxLHRoaXMpO1VFKGxQLHRoaXMsbnR0KS5jYWxsKHRoaXMsKGQsaCk9Pntjb25zdCBmPWEuZ2V0Q2VsbChaYyh2MSx0aGlzKS5jcmVhdGVDZWxsQ29vcmRzKGQsaCkpLHY9WmModjEsdGhpcykuZ2V0U2V0dGlu'@;
put 'Zygib25BZnRlckRyYXdTZWxlY3Rpb24iLGQsaCxaYyhvMyx0aGlzKS5zZXR0aW5ncy5sYXllckxldmVsKTsic3RyaW5nIj09dHlwZW9mIHYmJlRpKGYsdiksbChmKX0pfXNjYW5Sb3dzSW5DZWxsc1JhbmdlKGwpe2NvbnN0W2EsLGRdPVpjKG8zLHRoaXMpLmdldENvcm5lcnMoKSx7d3RUYWJs'@;
put 'ZTpofT1aYyh2MSx0aGlzKTtVRShsUCx0aGlzLGQzZSkuY2FsbCh0aGlzLChmLHYpPT57aWYoZj49YSYmZjw9ZCl7Y29uc3QgTT1oLmdldENlbGwoWmModjEsdGhpcykuY3JlYXRlQ2VsbENvb3JkcyhmLHYpKTtsKE0pfX0pfXNjYW5Db2x1bW5zSW5DZWxsc1JhbmdlKGwpe2NvbnN0WyxhLCxk'@;
put 'XT1aYyhvMyx0aGlzKS5nZXRDb3JuZXJzKCkse3d0VGFibGU6aH09WmModjEsdGhpcyk7VUUobFAsdGhpcyxkM2UpLmNhbGwodGhpcywoZix2KT0+e2lmKHY+PWEmJnY8PWQpe2NvbnN0IE09aC5nZXRDZWxsKFpjKHYxLHRoaXMpLmNyZWF0ZUNlbGxDb29yZHMoZix2KSk7bChNKX19KX19ZnVu'@;
put 'Y3Rpb24gbnR0KGMpe2xldFtsLGEsZCxoXT1aYyhvMyx0aGlzKS5nZXRDb3JuZXJzKCk7aWYobDwwJiZkPDB8fGE8MCYmaDwwKXJldHVybjtjb25zdHt3dFRhYmxlOmZ9PVpjKHYxLHRoaXMpLHY9bCE9PWR8fGEhPT1oO2lmKGE9TWF0aC5tYXgoYSwwKSxoPU1hdGgubWF4KGgsMCksbD1NYXRo'@;
put 'Lm1heChsLDApLGQ9TWF0aC5tYXgoZCwwKSx2KXtpZihhPU1hdGgubWF4KGEsZi5nZXRGaXJzdFJlbmRlcmVkQ29sdW1uKCkpLGg9TWF0aC5taW4oaCxmLmdldExhc3RSZW5kZXJlZENvbHVtbigpKSxsPU1hdGgubWF4KGwsZi5nZXRGaXJzdFJlbmRlcmVkUm93KCkpLGQ9TWF0aC5taW4oZCxm'@;
put 'LmdldExhc3RSZW5kZXJlZFJvdygpKSxoPGF8fGQ8bClyZXR1cm59ZWxzZSBpZighRXAoZi5nZXRDZWxsKFpjKHYxLHRoaXMpLmNyZWF0ZUNlbGxDb29yZHMobCxhKSkpKXJldHVybjtmb3IobGV0IE09bDtNPD1kO00rPTEpZm9yKGxldCBEPWE7RDw9aDtEKz0xKWMoTSxEKX1mdW5jdGlvbiBk'@;
put 'M2UoYyl7Y29uc3R7d3RUYWJsZTpsfT1aYyh2MSx0aGlzKSxhPWwuZ2V0UmVuZGVyZWRSb3dzQ291bnQoKSxkPWwuZ2V0UmVuZGVyZWRDb2x1bW5zQ291bnQoKTtmb3IobGV0IGg9MDtoPGE7aCs9MSl7Y29uc3QgZj1sLnJvd0ZpbHRlci5yZW5kZXJlZFRvU291cmNlKGgpO2ZvcihsZXQgdj0w'@;
put 'O3Y8ZDt2Kz0xKWMoZixsLmNvbHVtbkZpbHRlci5yZW5kZXJlZFRvU291cmNlKHYpKX19Y29uc3QgaDNlPWNsYXNzIHJ0dHtjb25zdHJ1Y3RvcihsLGEpe2EmJih0aGlzLmV2ZW50TWFuYWdlcj1sLmV2ZW50TWFuYWdlcix0aGlzLmluc3RhbmNlPWwsdGhpcy53b3Q9bCx0aGlzLnNldHRpbmdz'@;
put 'PWEsdGhpcy5tb3VzZURvd249ITEsdGhpcy5tYWluPW51bGwsdGhpcy50b3A9bnVsbCx0aGlzLmJvdHRvbT1udWxsLHRoaXMuc3RhcnQ9bnVsbCx0aGlzLmVuZD1udWxsLHRoaXMudG9wU3R5bGU9bnVsbCx0aGlzLmJvdHRvbVN0eWxlPW51bGwsdGhpcy5zdGFydFN0eWxlPW51bGwsdGhpcy5l'@;
put 'bmRTdHlsZT1udWxsLHRoaXMuY29ybmVyRGVmYXVsdFN0eWxlPXZLKHRoaXMuaW5zdGFuY2UpLHRoaXMuY29ybmVyQ2VudGVyUG9pbnRPZmZzZXQ9LU1hdGguY2VpbChwYXJzZUludCh0aGlzLmNvcm5lckRlZmF1bHRTdHlsZS53aWR0aCwxMCkvMiksdGhpcy5jb3JuZXI9bnVsbCx0aGlzLmNv'@;
put 'cm5lclN0eWxlPW51bGwsdGhpcy5jcmVhdGVCb3JkZXJzKGEpLHRoaXMucmVnaXN0ZXJMaXN0ZW5lcnMoKSl9cmVnaXN0ZXJMaXN0ZW5lcnMoKXtjb25zdCBsPXRoaXMud290LnJvb3REb2N1bWVudC5ib2R5O3RoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIobCwibW91c2Vkb3du'@;
put 'IiwoKT0+dGhpcy5vbk1vdXNlRG93bigpKSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGwsIm1vdXNldXAiLCgpPT50aGlzLm9uTW91c2VVcCgpKTtmb3IobGV0IGE9MCxkPXRoaXMubWFpbi5jaGlsZE5vZGVzLmxlbmd0aDthPGQ7YSsrKXRoaXMuZXZlbnRNYW5hZ2VyLmFk'@;
put 'ZEV2ZW50TGlzdGVuZXIodGhpcy5tYWluLmNoaWxkTm9kZXNbYV0sIm1vdXNlZW50ZXIiLGY9PnRoaXMub25Nb3VzZUVudGVyKGYsdGhpcy5tYWluLmNoaWxkTm9kZXNbYV0pKX1vbk1vdXNlRG93bigpe3RoaXMubW91c2VEb3duPSEwfW9uTW91c2VVcCgpe3RoaXMubW91c2VEb3duPSExfW9u'@;
put 'TW91c2VFbnRlcihsLGEpe2lmKCF0aGlzLm1vdXNlRG93bnx8IXRoaXMud290LmdldFNldHRpbmcoImhpZGVCb3JkZXJPbk1vdXNlRG93bk92ZXIiKSlyZXR1cm47bC5wcmV2ZW50RGVmYXVsdCgpLEIyKGwpO2NvbnN0IGQ9dGhpcyxoPXRoaXMud290LnJvb3REb2N1bWVudC5ib2R5LGY9YS5n'@;
put 'ZXRCb3VuZGluZ0NsaWVudFJlY3QoKTthLnN0eWxlLmRpc3BsYXk9Im5vbmUiLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoaCwibW91c2Vtb3ZlIixmdW5jdGlvbiBNKEQpeyhmdW5jdGlvbiB2KEQpe2lmKEQuY2xpZW50WTxNYXRoLmZsb29yKGYudG9wKXx8RC5jbGllbnRZ'@;
put 'Pk1hdGguY2VpbChmLnRvcCtmLmhlaWdodCl8fEQuY2xpZW50WDxNYXRoLmZsb29yKGYubGVmdCl8fEQuY2xpZW50WD5NYXRoLmNlaWwoZi5sZWZ0K2Yud2lkdGgpKXJldHVybiEwfSkoRCkmJihkLmV2ZW50TWFuYWdlci5yZW1vdmVFdmVudExpc3RlbmVyKGgsIm1vdXNlbW92ZSIsTSksYS5z'@;
put 'dHlsZS5kaXNwbGF5PSJibG9jayIpfSl9Y3JlYXRlQm9yZGVycyhsKXtjb25zdHtyb290RG9jdW1lbnQ6YX09dGhpcy53b3Q7dGhpcy5tYWluPWEuY3JlYXRlRWxlbWVudCgiZGl2Iik7Y29uc3QgZD1bInRvcCIsInN0YXJ0IiwiYm90dG9tIiwiZW5kIiwiY29ybmVyIl07bGV0IGg9dGhpcy5t'@;
put 'YWluLnN0eWxlO2gucG9zaXRpb249ImFic29sdXRlIixoLnRvcD0wLGgubGVmdD0wO2ZvcihsZXQgTT0wO008NTtNKyspe2NvbnN0IEQ9ZFtNXSxaPWEuY3JlYXRlRWxlbWVudCgiZGl2Iik7Wi5jbGFzc05hbWU9YHd0Qm9yZGVyICR7dGhpcy5zZXR0aW5ncy5jbGFzc05hbWV8fCIifWAsdGhp'@;
put 'cy5zZXR0aW5nc1tEXSYmdGhpcy5zZXR0aW5nc1tEXS5oaWRlJiYoWi5jbGFzc05hbWUrPSIgaGlkZGVuIiksaD1aLnN0eWxlLGguYmFja2dyb3VuZENvbG9yPXRoaXMuc2V0dGluZ3NbRF0mJnRoaXMuc2V0dGluZ3NbRF0uY29sb3I/dGhpcy5zZXR0aW5nc1tEXS5jb2xvcjpsLmJvcmRlci5j'@;
put 'b2xvcixoLmhlaWdodD10aGlzLnNldHRpbmdzW0RdJiZ0aGlzLnNldHRpbmdzW0RdLndpZHRoP2Ake3RoaXMuc2V0dGluZ3NbRF0ud2lkdGh9cHhgOmAke2wuYm9yZGVyLndpZHRofXB4YCxoLndpZHRoPXRoaXMuc2V0dGluZ3NbRF0mJnRoaXMuc2V0dGluZ3NbRF0ud2lkdGg/YCR7dGhpcy5z'@;
put 'ZXR0aW5nc1tEXS53aWR0aH1weGA6YCR7bC5ib3JkZXIud2lkdGh9cHhgLHRoaXMubWFpbi5hcHBlbmRDaGlsZChaKX10aGlzLnRvcD10aGlzLm1haW4uY2hpbGROb2Rlc1swXSx0aGlzLnN0YXJ0PXRoaXMubWFpbi5jaGlsZE5vZGVzWzFdLHRoaXMuYm90dG9tPXRoaXMubWFpbi5jaGlsZE5v'@;
put 'ZGVzWzJdLHRoaXMuZW5kPXRoaXMubWFpbi5jaGlsZE5vZGVzWzNdLHRoaXMudG9wU3R5bGU9dGhpcy50b3Auc3R5bGUsdGhpcy5zdGFydFN0eWxlPXRoaXMuc3RhcnQuc3R5bGUsdGhpcy5ib3R0b21TdHlsZT10aGlzLmJvdHRvbS5zdHlsZSx0aGlzLmVuZFN0eWxlPXRoaXMuZW5kLnN0eWxl'@;
put 'LHRoaXMuY29ybmVyPXRoaXMubWFpbi5jaGlsZE5vZGVzWzRdLHRoaXMuY29ybmVyLmNsYXNzTmFtZSs9IiBjb3JuZXIiLHRoaXMuY29ybmVyU3R5bGU9dGhpcy5jb3JuZXIuc3R5bGUsdGhpcy5jb3JuZXJTdHlsZS53aWR0aD1gJHt0aGlzLmNvcm5lckRlZmF1bHRTdHlsZS53aWR0aH1weGAs'@;
put 'dGhpcy5jb3JuZXJTdHlsZS5oZWlnaHQ9YCR7dGhpcy5jb3JuZXJEZWZhdWx0U3R5bGUuaGVpZ2h0fXB4YCx0aGlzLmNvcm5lclN0eWxlLmJvcmRlcj1bYCR7dGhpcy5jb3JuZXJEZWZhdWx0U3R5bGUuYm9yZGVyV2lkdGh9cHhgLHRoaXMuY29ybmVyRGVmYXVsdFN0eWxlLmJvcmRlclN0eWxl'@;
put 'LHRoaXMuY29ybmVyRGVmYXVsdFN0eWxlLmJvcmRlckNvbG9yXS5qb2luKCIgIiksQXAoKSYmdGhpcy5pbnN0YW5jZS5nZXRTZXR0aW5nKCJpc0RhdGFWaWV3SW5zdGFuY2UiKSYmdGhpcy5jcmVhdGVNdWx0aXBsZVNlbGVjdG9ySGFuZGxlcygpLHRoaXMuZGlzYXBwZWFyKCk7Y29uc3R7d3RU'@;
put 'YWJsZTpmfT10aGlzLndvdDtsZXQgdj1mLmJvcmRlcnNIb2xkZXI7dnx8KHY9YS5jcmVhdGVFbGVtZW50KCJkaXYiKSx2LmNsYXNzTmFtZT0iaHRCb3JkZXJzIixmLmJvcmRlcnNIb2xkZXI9dixmLnNwcmVhZGVyLmFwcGVuZENoaWxkKHYpKSx2LmFwcGVuZENoaWxkKHRoaXMubWFpbil9Y3Jl'@;
put 'YXRlTXVsdGlwbGVTZWxlY3RvckhhbmRsZXMoKXtjb25zdHtyb290RG9jdW1lbnQ6bCxzdHlsZXNIYW5kbGVyOmF9PXRoaXMud290LGQ9YS5nZXRDU1NWYXJpYWJsZVZhbHVlKCJjZWxsLW1vYmlsZS1oYW5kbGUtc2l6ZSIpLGg9YS5nZXRDU1NWYXJpYWJsZVZhbHVlKCJjZWxsLW1vYmlsZS1o'@;
put 'YW5kbGUtYm9yZGVyLXJhZGl1cyIpLGY9YS5nZXRDU1NWYXJpYWJsZVZhbHVlKCJjZWxsLW1vYmlsZS1oYW5kbGUtYmFja2dyb3VuZC1jb2xvciIpLHY9YS5nZXRDU1NWYXJpYWJsZVZhbHVlKCJjZWxsLW1vYmlsZS1oYW5kbGUtYm9yZGVyLXdpZHRoIiksTT1hLmdldENTU1ZhcmlhYmxlVmFs'@;
put 'dWUoImNlbGwtbW9iaWxlLWhhbmRsZS1ib3JkZXItY29sb3IiKTt0aGlzLnNlbGVjdGlvbkhhbmRsZXM9e3RvcDpsLmNyZWF0ZUVsZW1lbnQoIkRJViIpLHRvcEhpdEFyZWE6bC5jcmVhdGVFbGVtZW50KCJESVYiKSxib3R0b206bC5jcmVhdGVFbGVtZW50KCJESVYiKSxib3R0b21IaXRBcmVh'@;
put 'OmwuY3JlYXRlRWxlbWVudCgiRElWIil9LHRoaXMuc2VsZWN0aW9uSGFuZGxlcy50b3AuY2xhc3NOYW1lPSJ0b3BTZWxlY3Rpb25IYW5kbGUgdG9wTGVmdFNlbGVjdGlvbkhhbmRsZSIsdGhpcy5zZWxlY3Rpb25IYW5kbGVzLnRvcEhpdEFyZWEuY2xhc3NOYW1lPSJ0b3BTZWxlY3Rpb25IYW5k'@;
put 'bGUtSGl0QXJlYSB0b3BMZWZ0U2VsZWN0aW9uSGFuZGxlLUhpdEFyZWEiLHRoaXMuc2VsZWN0aW9uSGFuZGxlcy5ib3R0b20uY2xhc3NOYW1lPSJib3R0b21TZWxlY3Rpb25IYW5kbGUgYm90dG9tUmlnaHRTZWxlY3Rpb25IYW5kbGUiLHRoaXMuc2VsZWN0aW9uSGFuZGxlcy5ib3R0b21IaXRB'@;
put 'cmVhLmNsYXNzTmFtZT0iYm90dG9tU2VsZWN0aW9uSGFuZGxlLUhpdEFyZWEgYm90dG9tUmlnaHRTZWxlY3Rpb25IYW5kbGUtSGl0QXJlYSIsdGhpcy5zZWxlY3Rpb25IYW5kbGVzLnN0eWxlcz17dG9wOnRoaXMuc2VsZWN0aW9uSGFuZGxlcy50b3Auc3R5bGUsdG9wSGl0QXJlYTp0aGlzLnNl'@;
put 'bGVjdGlvbkhhbmRsZXMudG9wSGl0QXJlYS5zdHlsZSxib3R0b206dGhpcy5zZWxlY3Rpb25IYW5kbGVzLmJvdHRvbS5zdHlsZSxib3R0b21IaXRBcmVhOnRoaXMuc2VsZWN0aW9uSGFuZGxlcy5ib3R0b21IaXRBcmVhLnN0eWxlfSxYbyh7cG9zaXRpb246ImFic29sdXRlIixoZWlnaHQ6IjQw'@;
put 'cHgiLHdpZHRoOiI0MHB4IiwiYm9yZGVyLXJhZGl1cyI6YCR7cGFyc2VJbnQoNDAvMS41LDEwKX1weGB9LChiZSxFZSk9Pnt0aGlzLnNlbGVjdGlvbkhhbmRsZXMuc3R5bGVzLmJvdHRvbUhpdEFyZWFbRWVdPWJlLHRoaXMuc2VsZWN0aW9uSGFuZGxlcy5zdHlsZXMudG9wSGl0QXJlYVtFZV09'@;
put 'YmV9KSxYbyhhLmlzQ2xhc3NpY1RoZW1lKCk/e3Bvc2l0aW9uOiJhYnNvbHV0ZSIsaGVpZ2h0OiIxMHB4Iix3aWR0aDoiMTBweCIsImJvcmRlci1yYWRpdXMiOmAke3BhcnNlSW50KDEwLzEuNSwxMCl9cHhgLGJhY2tncm91bmQ6IiNGNUY1RkYiLGJvcmRlcjoiMXB4IHNvbGlkICM0Mjg1Yzgi'@;
put 'fTp7cG9zaXRpb246ImFic29sdXRlIixoZWlnaHQ6YCR7ZH1weGAsd2lkdGg6YCR7ZH1weGAsImJvcmRlci1yYWRpdXMiOmAke2h9cHhgLGJhY2tncm91bmQ6YCR7Zn1gLGJvcmRlcjpgJHt2fXB4IHNvbGlkICR7TX1gfSwoYmUsRWUpPT57dGhpcy5zZWxlY3Rpb25IYW5kbGVzLnN0eWxlcy5i'@;
put 'b3R0b21bRWVdPWJlLHRoaXMuc2VsZWN0aW9uSGFuZGxlcy5zdHlsZXMudG9wW0VlXT1iZX0pLHRoaXMubWFpbi5hcHBlbmRDaGlsZCh0aGlzLnNlbGVjdGlvbkhhbmRsZXMudG9wKSx0aGlzLm1haW4uYXBwZW5kQ2hpbGQodGhpcy5zZWxlY3Rpb25IYW5kbGVzLmJvdHRvbSksdGhpcy5tYWlu'@;
put 'LmFwcGVuZENoaWxkKHRoaXMuc2VsZWN0aW9uSGFuZGxlcy50b3BIaXRBcmVhKSx0aGlzLm1haW4uYXBwZW5kQ2hpbGQodGhpcy5zZWxlY3Rpb25IYW5kbGVzLmJvdHRvbUhpdEFyZWEpfWlzUGFydFJhbmdlKGwsYSl7Y29uc3QgZD10aGlzLndvdC5zZWxlY3Rpb25NYW5hZ2VyLmdldEFyZWFT'@;
put 'ZWxlY3Rpb24oKTtyZXR1cm4hKCFkLmNlbGxSYW5nZXx8bD09PWQuY2VsbFJhbmdlLnRvLnJvdyYmYT09PWQuY2VsbFJhbmdlLnRvLmNvbCl9dXBkYXRlTXVsdGlwbGVTZWxlY3Rpb25IYW5kbGVzUG9zaXRpb24obCxhLGQsaCxmLHYpe2NvbnN0IEQ9dGhpcy53b3Qud3RTZXR0aW5ncy5nZXRT'@;
put 'ZXR0aW5nKCJydGxNb2RlIik/InJpZ2h0IjoibGVmdCIse3RvcDpaLHRvcEhpdEFyZWE6cmUsYm90dG9tOmNlLGJvdHRvbUhpdEFyZWE6YmV9PXRoaXMuc2VsZWN0aW9uSGFuZGxlcy5zdHlsZXMsRWU9cGFyc2VJbnQoWi5ib3JkZXJXaWR0aCwxMCksQmU9cGFyc2VJbnQoWi53aWR0aCwxMCks'@;
put 'cWU9cGFyc2VJbnQocmUud2lkdGgsMTApLHJ0PXRoaXMud290Lnd0VGFibGUuZ2V0V2lkdGgoKSxwdD10aGlzLndvdC53dFRhYmxlLmdldEhlaWdodCgpO1oudG9wPWAke3BhcnNlSW50KGQtQmUtMSwxMCl9cHhgLFpbRF09YCR7cGFyc2VJbnQoaC1CZS0xLDEwKX1weGAscmUudG9wPWAke3Bh'@;
put 'cnNlSW50KGQtcWUvNCozLDEwKX1weGAscmVbRF09YCR7cGFyc2VJbnQoaC1xZS80KjMsMTApfXB4YDtjb25zdCBkdD1NYXRoLm1pbihwYXJzZUludChoK2YsMTApLHJ0LUJlLTIqRWUpLEp0PU1hdGgubWluKHBhcnNlSW50KGgrZi1xZS80LDEwKSxydC1xZS0yKkVlKTtjZVtEXT1gJHtkdH1w'@;
put 'eGAsYmVbRF09YCR7SnR9cHhgO2NvbnN0IHZuPU1hdGgubWluKHBhcnNlSW50KGQrdiwxMCkscHQtQmUtMipFZSksQ249TWF0aC5taW4ocGFyc2VJbnQoZCt2LXFlLzQsMTApLHB0LXFlLTIqRWUpO2NlLnRvcD1gJHt2bn1weGAsYmUudG9wPWAke0NufXB4YCx0aGlzLnNldHRpbmdzLmJvcmRl'@;
put 'ci5jb3JuZXJWaXNpYmxlJiZ0aGlzLnNldHRpbmdzLmJvcmRlci5jb3JuZXJWaXNpYmxlKCk/KFouZGlzcGxheT0iYmxvY2siLHJlLmRpc3BsYXk9ImJsb2NrIix0aGlzLmlzUGFydFJhbmdlKGwsYSk/KGNlLmRpc3BsYXk9Im5vbmUiLGJlLmRpc3BsYXk9Im5vbmUiKTooY2UuZGlzcGxheT0i'@;
put 'YmxvY2siLGJlLmRpc3BsYXk9ImJsb2NrIikpOihaLmRpc3BsYXk9Im5vbmUiLGNlLmRpc3BsYXk9Im5vbmUiLHJlLmRpc3BsYXk9Im5vbmUiLGJlLmRpc3BsYXk9Im5vbmUiKSxsPT09dGhpcy53b3Qud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJmaXhlZFJvd3NUb3AiKXx8YT09PXRoaXMud290'@;
put 'Lnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiZml4ZWRDb2x1bW5zU3RhcnQiKT8oWi56SW5kZXg9Ijk5OTkiLHJlLnpJbmRleD0iOTk5OSIpOihaLnpJbmRleD0iIixyZS56SW5kZXg9IiIpfWFwcGVhcihsKXtpZih0aGlzLmRpc2FibGVkKXJldHVybjtsZXRbYSxkLGgsZl09bDtpZihhPDAmJmg8'@;
put 'MHx8ZDwwJiZmPDApcmV0dXJuIHZvaWQgdGhpcy5kaXNhcHBlYXIoKTtjb25zdHt3dFRhYmxlOnYscm9vdERvY3VtZW50Ok0scm9vdFdpbmRvdzpEfT10aGlzLndvdCxaPWEhPT1ofHxkIT09ZixyZT12LmdldEZpcnN0UmVuZGVyZWRSb3coKSxjZT12LmdldExhc3RSZW5kZXJlZFJvdygpLGJl'@;
put 'PXYuZ2V0Rmlyc3RSZW5kZXJlZENvbHVtbigpLEVlPXYuZ2V0TGFzdFJlbmRlcmVkQ29sdW1uKCk7aWYoYmU8MCYmRWU8MHx8cmU8MCYmY2U8MClyZXR1cm4gdm9pZCB0aGlzLmRpc2FwcGVhcigpO2xldCBCZTtpZihaKXtpZihkPU1hdGgubWF4KGQsYmUpLGY9TWF0aC5taW4oZixFZSksYT1N'@;
put 'YXRoLm1heChhLHJlKSxoPU1hdGgubWluKGgsY2UpLGY8ZHx8aDxhKXJldHVybiB2b2lkIHRoaXMuZGlzYXBwZWFyKCk7QmU9di5nZXRDZWxsKHRoaXMud290LmNyZWF0ZUNlbGxDb29yZHMoYSxkKSl9ZWxzZSBpZihCZT12LmdldENlbGwodGhpcy53b3QuY3JlYXRlQ2VsbENvb3JkcyhhLGQp'@;
put 'KSwhRXAoQmUpKXJldHVybiB2b2lkIHRoaXMuZGlzYXBwZWFyKCk7Y29uc3QgcWU9Wj92LmdldENlbGwodGhpcy53b3QuY3JlYXRlQ2VsbENvb3JkcyhoLGYpKTpCZSxydD1VMChCZSkscHQ9Wj9VMChxZSk6cnQsZHQ9VTAodi5UQUJMRSksSnQ9cnQudG9wLHZuPXJ0LmxlZnQsQ249dGhpcy53'@;
put 'b3Qud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJydGxNb2RlIik7bGV0IHRuPTAsTW49MDtpZihDbil7Y29uc3QgSXI9c3Uodi5UQUJMRSksJHI9c3UoQmUpO01uPXZuKyRyLXB0LmxlZnQsdG49RC5pbm5lcldpZHRoLXZuLSRyLShELmlubmVyV2lkdGgtZHQubGVmdC1JciktMX1lbHNlIE1uPXB0'@;
put 'LmxlZnQrc3UocWUpLXZuLHRuPXZuLWR0LmxlZnQtMTtpZih0aGlzLmlzRW50aXJlQ29sdW1uU2VsZWN0ZWQoYSxoKSl7Y29uc3QgJHI9dGhpcy5nZXREaW1lbnNpb25zRnJvbUhlYWRlcigiY29sdW1ucyIsZCxmLGEsZHQpO2xldCB3aT1udWxsOyRyJiYoW3dpLHRuLE1uXT0kciksd2kmJihC'@;
put 'ZT13aSl9bGV0IENyPUp0LWR0LnRvcC0xLEdyPXB0LnRvcCt4dShxZSktSnQ7aWYodGhpcy5pc0VudGlyZVJvd1NlbGVjdGVkKGQsZikpe2NvbnN0ICRyPXRoaXMuZ2V0RGltZW5zaW9uc0Zyb21IZWFkZXIoInJvd3MiLGEsaCxkLGR0KTtsZXQgd2k9bnVsbDskciYmKFt3aSxDcixHcl09JHIp'@;
put 'LHdpJiYoQmU9d2kpfWNvbnN0IG1yPUQuZ2V0Q29tcHV0ZWRTdHlsZShCZSk7cGFyc2VJbnQobXIuYm9yZGVyVG9wV2lkdGgsMTApPjAmJihDcis9MSxHcj1Hcj4wP0dyLTE6MCkscGFyc2VJbnQobXJbQ24/ImJvcmRlclJpZ2h0V2lkdGgiOiJib3JkZXJMZWZ0V2lkdGgiXSwxMCk+MCYmKHRu'@;
put 'Kz0xLE1uPU1uPjA/TW4tMTowKTtjb25zdCBHbj1Dbj8icmlnaHQiOiJsZWZ0Ijt0aGlzLnRvcFN0eWxlLnRvcD1gJHtDcn1weGAsdGhpcy50b3BTdHlsZVtHbl09YCR7dG59cHhgLHRoaXMudG9wU3R5bGUud2lkdGg9YCR7TW59cHhgLHRoaXMudG9wU3R5bGUuZGlzcGxheT0iYmxvY2siLHRo'@;
put 'aXMuc3RhcnRTdHlsZS50b3A9YCR7Q3J9cHhgLHRoaXMuc3RhcnRTdHlsZVtHbl09YCR7dG59cHhgLHRoaXMuc3RhcnRTdHlsZS5oZWlnaHQ9YCR7R3J9cHhgLHRoaXMuc3RhcnRTdHlsZS5kaXNwbGF5PSJibG9jayI7Y29uc3QgYWk9TWF0aC5mbG9vcih0aGlzLnNldHRpbmdzLmJvcmRlci53'@;
put 'aWR0aC8yKTt0aGlzLmJvdHRvbVN0eWxlLnRvcD1DcitHci1haSsicHgiLHRoaXMuYm90dG9tU3R5bGVbR25dPWAke3RufXB4YCx0aGlzLmJvdHRvbVN0eWxlLndpZHRoPWAke01ufXB4YCx0aGlzLmJvdHRvbVN0eWxlLmRpc3BsYXk9ImJsb2NrIix0aGlzLmVuZFN0eWxlLnRvcD1gJHtDcn1w'@;
put 'eGAsdGhpcy5lbmRTdHlsZVtHbl09dG4rTW4tYWkrInB4Iix0aGlzLmVuZFN0eWxlLmhlaWdodD1gJHtHcisxfXB4YCx0aGlzLmVuZFN0eWxlLmRpc3BsYXk9ImJsb2NrIjtsZXQgX2k9dGhpcy5zZXR0aW5ncy5ib3JkZXIuY29ybmVyVmlzaWJsZTtfaT0iZnVuY3Rpb24iPT10eXBlb2YgX2k/'@;
put 'X2kodGhpcy5zZXR0aW5ncy5sYXllckxldmVsKTpfaTtjb25zdCBPbj10aGlzLndvdC5nZXRTZXR0aW5nKCJvbk1vZGlmeUdldENlbGxDb29yZHMiLGgsZiwhMSwicmVuZGVyIik7bGV0W3pyLEpuXT1baCxmXTtpZihPbiYmQXJyYXkuaXNBcnJheShPbikmJihbLCx6cixKbl09T24pLEFwKCl8'@;
put 'fCFfaXx8dGhpcy5pc1BhcnRSYW5nZSh6cixKbikpdGhpcy5jb3JuZXJTdHlsZS5kaXNwbGF5PSJub25lIjtlbHNle3RoaXMuY29ybmVyU3R5bGUudG9wPUNyK0dyK3RoaXMuY29ybmVyQ2VudGVyUG9pbnRPZmZzZXQtdGhpcy5jb3JuZXJEZWZhdWx0U3R5bGUuYm9yZGVyV2lkdGgrInB4Iix0'@;
put 'aGlzLmNvcm5lclN0eWxlW0duXT10bitNbit0aGlzLmNvcm5lckNlbnRlclBvaW50T2Zmc2V0LXRoaXMuY29ybmVyRGVmYXVsdFN0eWxlLmJvcmRlcldpZHRoKyJweCIsdGhpcy5jb3JuZXJTdHlsZS5ib3JkZXJSaWdodFdpZHRoPWAke3RoaXMuY29ybmVyRGVmYXVsdFN0eWxlLmJvcmRlcldp'@;
put 'ZHRofXB4YCx0aGlzLmNvcm5lclN0eWxlLmJvcmRlckxlZnRXaWR0aD1gJHt0aGlzLmNvcm5lckRlZmF1bHRTdHlsZS5ib3JkZXJXaWR0aH1weGAsdGhpcy5jb3JuZXJTdHlsZS5ib3JkZXJCb3R0b21XaWR0aD1gJHt0aGlzLmNvcm5lckRlZmF1bHRTdHlsZS5ib3JkZXJXaWR0aH1weGAsdGhp'@;
put 'cy5jb3JuZXJTdHlsZS53aWR0aD10aGlzLmNvcm5lckRlZmF1bHRTdHlsZS53aWR0aCx0aGlzLmNvcm5lclN0eWxlLmRpc3BsYXk9Im5vbmUiO2xldCBJcj1hXyh2LlRBQkxFKTtjb25zdCAkcj1Jcj09PUQ7JHImJihJcj1NLmRvY3VtZW50RWxlbWVudCk7Y29uc3Qgd2k9cGFyc2VJbnQodGhp'@;
put 'cy5jb3JuZXJEZWZhdWx0U3R5bGUuYm9yZGVyV2lkdGgsMTApLTEsZWE9TWF0aC5jZWlsKHBhcnNlSW50KHRoaXMuY29ybmVyRGVmYXVsdFN0eWxlLndpZHRoLDEwKS8yKSxmYT1NYXRoLmNlaWwocGFyc2VJbnQodGhpcy5jb3JuZXJEZWZhdWx0U3R5bGUuaGVpZ2h0LDEwKS8yKTtpZihmPT09'@;
put 'dGhpcy53b3QuZ2V0U2V0dGluZygidG90YWxDb2x1bW5zIiktMSl7Y29uc3QgdnQ9JHI/cWUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdDpxZS5vZmZzZXRMZWZ0O2xldCBOdD0hMSxIdD0wO0NuPyhIdD12dC1wYXJzZUludCh0aGlzLmNvcm5lckRlZmF1bHRTdHlsZS53aWR0aCwxMCkv'@;
put 'MixOdD1IdDwwKTooSHQ9dnQrc3UocWUpK3BhcnNlSW50KHRoaXMuY29ybmVyRGVmYXVsdFN0eWxlLndpZHRoLDEwKS8yLE50PUh0Pj1DJChJcikpLE50JiYodGhpcy5jb3JuZXJTdHlsZVtHbl09YCR7TWF0aC5mbG9vcih0bitNbit0aGlzLmNvcm5lckNlbnRlclBvaW50T2Zmc2V0LWVhLXdp'@;
put 'KX1weGAsdGhpcy5jb3JuZXJTdHlsZVtDbj8iYm9yZGVyTGVmdFdpZHRoIjoiYm9yZGVyUmlnaHRXaWR0aCJdPTApfWlmKGg9PT10aGlzLndvdC5nZXRTZXR0aW5nKCJ0b3RhbFJvd3MiKS0xKXtjb25zdCBIdD0oJHI/cWUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wOnFlLm9mZnNldFRv'@;
put 'cCkreHUocWUpK3BhcnNlSW50KHRoaXMuY29ybmVyRGVmYXVsdFN0eWxlLmhlaWdodCwxMCkvMj49b18oSXIpLEhuPXRoaXMud290LnN0eWxlc0hhbmRsZXIuaXNDbGFzc2ljVGhlbWUoKTtpZihIdCl7Y29uc3QgdHI9TWF0aC5mbG9vcihDcitHcit0aGlzLmNvcm5lckNlbnRlclBvaW50T2Zm'@;
put 'c2V0LWZhLXdpKTtIbj8odGhpcy5jb3JuZXJTdHlsZS50b3A9YCR7dHJ9cHhgLHRoaXMuY29ybmVyU3R5bGUuYm9yZGVyQm90dG9tV2lkdGg9MCk6dGhpcy5jb3JuZXJTdHlsZS50b3A9dHItMSsicHgifX10aGlzLmNvcm5lclN0eWxlLmRpc3BsYXk9ImJsb2NrIn1BcCgpJiZ0aGlzLmluc3Rh'@;
put 'bmNlLmdldFNldHRpbmcoImlzRGF0YVZpZXdJbnN0YW5jZSIpJiZ0aGlzLnVwZGF0ZU11bHRpcGxlU2VsZWN0aW9uSGFuZGxlc1Bvc2l0aW9uKGgsZixDcix0bixNbixHcil9aXNFbnRpcmVDb2x1bW5TZWxlY3RlZChsLGEpe3JldHVybiBsPT09dGhpcy53b3Qud3RUYWJsZS5nZXRGaXJzdFJl'@;
put 'bmRlcmVkUm93KCkmJmE9PT10aGlzLndvdC53dFRhYmxlLmdldExhc3RSZW5kZXJlZFJvdygpfWlzRW50aXJlUm93U2VsZWN0ZWQobCxhKXtyZXR1cm4gbD09PXRoaXMud290Lnd0VGFibGUuZ2V0Rmlyc3RSZW5kZXJlZENvbHVtbigpJiZhPT09dGhpcy53b3Qud3RUYWJsZS5nZXRMYXN0UmVu'@;
put 'ZGVyZWRDb2x1bW4oKX1nZXREaW1lbnNpb25zRnJvbUhlYWRlcihsLGEsZCxoLGYpe2NvbnN0e3d0VGFibGU6dn09dGhpcy53b3QsTT12Lnd0Um9vdEVsZW1lbnQucGFyZW50Tm9kZTtsZXQgRD1udWxsLFo9bnVsbCxyZT1udWxsLGNlPW51bGwsYmU9bnVsbCxFZT1udWxsLEJlPW51bGwscWU9'@;
put 'bnVsbDtzd2l0Y2gobCl7Y2FzZSJyb3dzIjpEPWZ1bmN0aW9uKCl7cmV0dXJuIHYuZ2V0Um93SGVhZGVyKC4uLmFyZ3VtZW50cyl9LFo9ZnVuY3Rpb24oKXtyZXR1cm4geHUoLi4uYXJndW1lbnRzKX0scmU9Imh0X19zZWxlY3Rpb24tLXJvd3MiLEVlPSJ0b3AiO2JyZWFrO2Nhc2UiY29sdW1u'@;
put 'cyI6RD1mdW5jdGlvbigpe3JldHVybiB2LmdldENvbHVtbkhlYWRlciguLi5hcmd1bWVudHMpfSxaPWZ1bmN0aW9uKCl7cmV0dXJuIHN1KC4uLmFyZ3VtZW50cyl9LHJlPSJodF9fc2VsZWN0aW9uLS1jb2x1bW5zIixFZT0ibGVmdCJ9aWYoTS5jbGFzc0xpc3QuY29udGFpbnMocmUpKXtjb25z'@;
put 'dCBydD10aGlzLndvdC5nZXRTZXR0aW5nKCJjb2x1bW5IZWFkZXJzIikubGVuZ3RoO2lmKEJlPUQoYSxydC1oKSxxZT1EKGQscnQtaCksIUJlfHwhcWUpcmV0dXJuITE7Y29uc3QgcHQ9VTAoQmUpLGR0PVUwKHFlKTtyZXR1cm4gQmUmJnFlJiYoY2U9cHRbRWVdLWZbRWVdLTEsYmU9ZHRbRWVd'@;
put 'K1oocWUpLXB0W0VlXSksW0JlLGNlLGJlXX1yZXR1cm4hMX1jaGFuZ2VCb3JkZXJTdHlsZShsLGEpe2NvbnN0IGQ9dGhpc1tsXS5zdHlsZSxoPWFbbF07IWh8fGguaGlkZT9UaSh0aGlzW2xdLCJoaWRkZW4iKToocG8odGhpc1tsXSwiaGlkZGVuIikmJmxvKHRoaXNbbF0sImhpZGRlbiIpLGQu'@;
put 'YmFja2dyb3VuZENvbG9yPWguY29sb3IsKCJ0b3AiPT09bHx8ImJvdHRvbSI9PT1sKSYmKGQuaGVpZ2h0PWAke2gud2lkdGh9cHhgKSwoInN0YXJ0Ij09PWx8fCJlbmQiPT09bCkmJihkLndpZHRoPWAke2gud2lkdGh9cHhgKSl9Y2hhbmdlQm9yZGVyVG9EZWZhdWx0U3R5bGUobCl7Y29uc3Qg'@;
put 'ZD10aGlzW2xdLnN0eWxlO2QuYmFja2dyb3VuZENvbG9yPSIjMDAwIixkLndpZHRoPSIxcHgiLGQuaGVpZ2h0PSIxcHgifXRvZ2dsZUhpZGRlbkNsYXNzKGwsYSl7dGhpcy5jaGFuZ2VCb3JkZXJUb0RlZmF1bHRTdHlsZShsKSxhP1RpKHRoaXNbbF0sImhpZGRlbiIpOmxvKHRoaXNbbF0sImhp'@;
put 'ZGRlbiIpfWRpc2FwcGVhcigpe3RoaXMudG9wU3R5bGUuZGlzcGxheT0ibm9uZSIsdGhpcy5ib3R0b21TdHlsZS5kaXNwbGF5PSJub25lIix0aGlzLnN0YXJ0U3R5bGUuZGlzcGxheT0ibm9uZSIsdGhpcy5lbmRTdHlsZS5kaXNwbGF5PSJub25lIix0aGlzLmNvcm5lclN0eWxlLmRpc3BsYXk9'@;
put 'Im5vbmUiLEFwKCkmJnRoaXMuaW5zdGFuY2UuZ2V0U2V0dGluZygiaXNEYXRhVmlld0luc3RhbmNlIikmJih0aGlzLnNlbGVjdGlvbkhhbmRsZXMuc3R5bGVzLnRvcC5kaXNwbGF5PSJub25lIix0aGlzLnNlbGVjdGlvbkhhbmRsZXMuc3R5bGVzLnRvcEhpdEFyZWEuZGlzcGxheT0ibm9uZSIs'@;
put 'dGhpcy5zZWxlY3Rpb25IYW5kbGVzLnN0eWxlcy5ib3R0b20uZGlzcGxheT0ibm9uZSIsdGhpcy5zZWxlY3Rpb25IYW5kbGVzLnN0eWxlcy5ib3R0b21IaXRBcmVhLmRpc3BsYXk9Im5vbmUiKX1kZXN0cm95KCl7dGhpcy5ldmVudE1hbmFnZXIuZGVzdHJveVdpdGhPd25FdmVudHNPbmx5KCks'@;
put 'dGhpcy5tYWluLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5tYWluKX19O2Z1bmN0aW9uIHdfKGMsbCxhKXtmM2UoYyxsKSxsLnNldChjLGEpfWZ1bmN0aW9uIGYzZShjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHBy'@;
put 'aXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9ZnVuY3Rpb24gYXMoYyxsKXtyZXR1cm4gYy5nZXQoTUsoYyxsKSl9ZnVuY3Rpb24gcDNlKGMsbCxhKXtyZXR1cm4gYy5zZXQoTUsoYyxsKSxhKSxhfWZ1bmN0aW9uIE1LKGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9j'@;
put 'PT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX12YXIgYjE9bmV3IFdlYWtNYXAsVmQ9bmV3IFdlYWtNYXAseEs9bmV3IFdlYWtNYXAsWkU9'@;
put 'bmV3IFdlYWtNYXAsRUs9bmV3IFdlYWtNYXAsSjc9bmV3IFdlYWtNYXAsZzNlPW5ldyBXZWFrU2V0O2NsYXNzIGF0dHtjb25zdHJ1Y3RvcihsKXsoZnVuY3Rpb24gaXR0KGMsbCl7ZjNlKGMsbCksbC5hZGQoYyl9KSh0aGlzLGczZSksd18odGhpcyxiMSx2b2lkIDApLHdfKHRoaXMsVmQsdm9p'@;
put 'ZCAwKSx3Xyh0aGlzLHhLLG5ldyB0dHQpLHdfKHRoaXMsWkUsbmV3IFdlYWtNYXApLHdfKHRoaXMsRUssbmV3IFdlYWtTZXQpLHdfKHRoaXMsSjcsbmV3IE1hcCkscDNlKFZkLHRoaXMsbCl9c2V0QWN0aXZlT3ZlcmxheShsKXtyZXR1cm4gcDNlKGIxLHRoaXMsbCksYXMoeEssdGhpcykuc2V0'@;
put 'QWN0aXZlT3ZlcmxheShhcyhiMSx0aGlzKSksYXMoWkUsdGhpcykuaGFzKGFzKGIxLHRoaXMpKXx8YXMoWkUsdGhpcykuc2V0KGFzKGIxLHRoaXMpLG5ldyBTZXQpLHRoaXN9Z2V0Rm9jdXNTZWxlY3Rpb24oKXtyZXR1cm4gbnVsbCE9PWFzKFZkLHRoaXMpP2FzKFZkLHRoaXMpLmdldEZvY3Vz'@;
put 'KCk6bnVsbH1nZXRBcmVhU2VsZWN0aW9uKCl7cmV0dXJuIG51bGwhPT1hcyhWZCx0aGlzKT9hcyhWZCx0aGlzKS5jcmVhdGVMYXllcmVkQXJlYSgpOm51bGx9Z2V0Qm9yZGVySW5zdGFuY2UobCl7aWYoIWwuc2V0dGluZ3MuYm9yZGVyKXJldHVybiBudWxsO2lmKGFzKEo3LHRoaXMpLmhhcyhs'@;
put 'KSl7Y29uc3QgZD1hcyhKNyx0aGlzKS5nZXQobCk7aWYoZC5oYXMoYXMoYjEsdGhpcykpKXJldHVybiBkLmdldChhcyhiMSx0aGlzKSk7Y29uc3QgaD1uZXcgaDNlKGFzKGIxLHRoaXMpLGwuc2V0dGluZ3MpO3JldHVybiBkLnNldChhcyhiMSx0aGlzKSxoKSxofWNvbnN0IGE9bmV3IGgzZShh'@;
put 'cyhiMSx0aGlzKSxsLnNldHRpbmdzKTtyZXR1cm4gYXMoSjcsdGhpcykuc2V0KGwsbmV3IE1hcChbW2FzKGIxLHRoaXMpLGFdXSkpLGF9Z2V0Qm9yZGVySW5zdGFuY2VzKGwpe3ZhciBhLGQ7cmV0dXJuIEFycmF5LmZyb20obnVsbCE9PShhPW51bGw9PT0oZD1hcyhKNyx0aGlzKS5nZXQobCkp'@;
put 'fHx2b2lkIDA9PT1kP3ZvaWQgMDpkLnZhbHVlcygpKSYmdm9pZCAwIT09YT9hOltdKX1kZXN0cm95Qm9yZGVycyhsKXthcyhKNyx0aGlzKS5nZXQobCkuZm9yRWFjaChhPT5hLmRlc3Ryb3koKSksYXMoSjcsdGhpcykuZGVsZXRlKGwpfXJlbmRlcihsKXtpZihudWxsPT09YXMoVmQsdGhpcykp'@;
put 'cmV0dXJuO2wmJk1LKGczZSx0aGlzLG90dCkuY2FsbCh0aGlzKTtjb25zdCBhPUFycmF5LmZyb20oYXMoVmQsdGhpcykpLGQ9bmV3IE1hcCxoPW5ldyBNYXA7Zm9yKGxldCBmPTA7ZjxhLmxlbmd0aDtmKyspe2NvbnN0IHY9YVtmXSx7Y2xhc3NOYW1lOk0saGVhZGVyQXR0cmlidXRlczpELGNy'@;
put 'ZWF0ZUxheWVyczpaLHNlbGVjdGlvblR5cGU6cmV9PXYuc2V0dGluZ3M7YXMoRUssdGhpcykuaGFzKHYpfHwoYXMoRUssdGhpcykuYWRkKHYpLHYuYWRkTG9jYWxIb29rKCJkZXN0cm95IiwoKT0+dGhpcy5kZXN0cm95Qm9yZGVycyh2KSkpO2NvbnN0IGNlPXRoaXMuZ2V0Qm9yZGVySW5zdGFu'@;
put 'Y2Uodik7aWYodi5pc0VtcHR5KCkpe2NlPy5kaXNhcHBlYXIoKTtjb250aW51ZX1NJiZhcyh4Syx0aGlzKS5zZXRBY3RpdmVTZWxlY3Rpb24odikuc2NhbigpLmZvckVhY2goQmU9PntpZihkLmhhcyhCZSkpe2NvbnN0IHFlPWQuZ2V0KEJlKTtxZS5oYXMoTSkmJiEwPT09Wj9xZS5zZXQoTSxx'@;
put 'ZS5nZXQoTSkrMSk6cWUuc2V0KE0sMSl9ZWxzZSBkLnNldChCZSxuZXcgTWFwKFtbTSwxXV0pKTtEJiYoaC5oYXMoQmUpfHxoLnNldChCZSxbXSksIlRIIj09PUJlLm5vZGVOYW1lJiZoLmdldChCZSkucHVzaCguLi5EKSl9KTtjb25zdCBiZT12LmdldENvcm5lcnMoKTthcyhiMSx0aGlzKS5n'@;
put 'ZXRTZXR0aW5nKCJvbkJlZm9yZURyYXdCb3JkZXJzIixiZSxyZSksY2U/LmFwcGVhcihiZSl9ZC5mb3JFYWNoKChmLHYpPT57dmFyIE07Y29uc3QgRD1BcnJheS5mcm9tKGYpLm1hcChaPT57bGV0W3JlLGNlXT1aO3JldHVybiAxPT09Y2U/cmU6W3JlLC4uLkFycmF5LmZyb20oe2xlbmd0aDpj'@;
put 'ZS0xfSwoYmUsRWUpPT5gJHtyZX0tJHtFZSsxfWApXX0pLmZsYXQoKTtELmZvckVhY2goWj0+YXMoWkUsdGhpcykuZ2V0KGFzKGIxLHRoaXMpKS5hZGQoWikpLFRpKHYsRCksIlREIj09PXYubm9kZU5hbWUmJkFycmF5LmlzQXJyYXkobnVsbD09PShNPWFzKFZkLHRoaXMpLm9wdGlvbnMpfHx2'@;
put 'b2lkIDA9PT1NP3ZvaWQgMDpNLmNlbGxBdHRyaWJ1dGVzKSYmdm8odixhcyhWZCx0aGlzKS5vcHRpb25zLmNlbGxBdHRyaWJ1dGVzKX0pLEFycmF5LmZyb20oaC5rZXlzKCkpLmZvckVhY2goZj0+e3ZvKGYsWy4uLmguZ2V0KGYpXSl9KX19ZnVuY3Rpb24gb3R0KCl7Y29uc3QgYz1hcyhaRSx0'@;
put 'aGlzKS5nZXQoYXMoYjEsdGhpcykpLGw9YXMoYjEsdGhpcykud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJvbkJlZm9yZVJlbW92ZUNlbGxDbGFzc05hbWVzIik7aWYoQXJyYXkuaXNBcnJheShsKSlmb3IobGV0IGE9MDthPGwubGVuZ3RoO2ErKyljLmFkZChsW2FdKTtjLmZvckVhY2goYT0+e3Zh'@;
put 'ciBkLGg7Y29uc3QgZj1hcyhiMSx0aGlzKS53dFRhYmxlLlRBQkxFLnF1ZXJ5U2VsZWN0b3JBbGwoYC4ke2F9YCk7bGV0IHY9W107QXJyYXkuaXNBcnJheShudWxsPT09KGQ9YXMoVmQsdGhpcykub3B0aW9ucyl8fHZvaWQgMD09PWQ/dm9pZCAwOmQuY2VsbEF0dHJpYnV0ZXMpJiYodj1hcyhW'@;
put 'ZCx0aGlzKS5vcHRpb25zLmNlbGxBdHRyaWJ1dGVzLm1hcChNPT5NWzBdKSksQXJyYXkuaXNBcnJheShudWxsPT09KGg9YXMoVmQsdGhpcykub3B0aW9ucyl8fHZvaWQgMD09PWg/dm9pZCAwOmguaGVhZGVyQXR0cmlidXRlcykmJih2PVsuLi52LC4uLmFzKFZkLHRoaXMpLm9wdGlvbnMuaGVh'@;
put 'ZGVyQXR0cmlidXRlcy5tYXAoTT0+TVswXSldKTtmb3IobGV0IE09MCxEPWYubGVuZ3RoO008RDtNKyspbG8oZltNXSxhKSxqNyhmW01dLHYpfSksYy5jbGVhcigpfWZ1bmN0aW9uIFE3KGMsbCxhKXttM2UoYyxsKSxsLnNldChjLGEpfWZ1bmN0aW9uIG0zZShjLGwpe2lmKGwuaGFzKGMpKXRo'@;
put 'cm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9ZnVuY3Rpb24gd2MoYyxsKXtyZXR1cm4gYy5nZXQobDMoYyxsKSl9ZnVuY3Rpb24gczMoYyxsLGEpe3JldHVybiBjLnNldChsMyhjLGwpLGEp'@;
put 'LGF9ZnVuY3Rpb24gbDMoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfXZhciBM'@;
put 'cD1uZXcgV2Vha01hcCxTZz1uZXcgV2Vha01hcCxUSz1uZXcgV2Vha01hcCxBSz1uZXcgV2Vha01hcCxqbT1uZXcgV2Vha01hcCxXRT1uZXcgV2Vha01hcCxZRT1uZXcgV2Vha01hcCxPcD1uZXcgV2Vha1NldDtjbGFzcyBsdHR7Y29uc3RydWN0b3IobCl7KGZ1bmN0aW9uIHN0dChjLGwpe20z'@;
put 'ZShjLGwpLGwuYWRkKGMpfSkodGhpcyxPcCksUTcodGhpcyxMcCx2b2lkIDApLFE3KHRoaXMsU2csdm9pZCAwKSxRNyh0aGlzLFRLLHZvaWQgMCksUTcodGhpcyxBSyx2b2lkIDApLFE3KHRoaXMsam0sITApLFE3KHRoaXMsV0Use30pLFE3KHRoaXMsWUUse30pLHMzKFNnLHRoaXMsbC5yb290'@;
put 'VGFibGUucGFyZW50RWxlbWVudC5wYXJlbnRFbGVtZW50KSxzMyhBSyx0aGlzLGwucm9vdERvY3VtZW50KX1pc0NsYXNzaWNUaGVtZSgpe3JldHVybiB3YyhqbSx0aGlzKX1nZXRDU1NWYXJpYWJsZVZhbHVlKGwpe3ZhciBhO2lmKHdjKGptLHRoaXMpKXJldHVybiBudWxsO2lmKHdjKFdFLHRo'@;
put 'aXMpW2AtLWh0LSR7bH1gXSlyZXR1cm4gd2MoV0UsdGhpcylbYC0taHQtJHtsfWBdO2NvbnN0IGQ9bnVsbCE9PShhPWwzKE9wLHRoaXMsaHR0KS5jYWxsKHRoaXMsYC0taHQtJHtsfWApKSYmdm9pZCAwIT09YT9hOmwzKE9wLHRoaXMseTNlKS5jYWxsKHRoaXMsYC0taHQtJHtsfWApO3JldHVy'@;
put 'biBudWxsIT09ZD8od2MoV0UsdGhpcylbYC0taHQtJHtsfWBdPWQsZCk6dm9pZCAwfWdldFN0eWxlRm9yVEQobCl7dmFyIGE7cmV0dXJuIG51bGw9PT0oYT13YyhZRSx0aGlzKSl8fHZvaWQgMD09PWE/dm9pZCAwOmEudGRbbF19Z2V0RGVmYXVsdFJvd0hlaWdodCgpe2lmKHdjKGptLHRoaXMp'@;
put 'KXJldHVybiAyMztjb25zdCBsPWwzKE9wLHRoaXMsY3R0KS5jYWxsKHRoaXMpO3JldHVybiFsJiZwbyh3YyhTZyx0aGlzKSwiaHQtd3JhcHBlciIpPyhpbChgVGhlICIke3djKExwLHRoaXMpfSIgdGhlbWUgaXMgZW5hYmxlZCwgYnV0IGl0cyBzdHlsZXNoZWV0cyBhcmUgbWlzc2luZyBvciBu'@;
put 'b3QgaW1wb3J0ZWQgY29ycmVjdGx5LiBJbXBvcnQgdGhlIGNvcnJlY3QgQ1NTIGZpbGVzIGluIG9yZGVyIHRvIHVzZSB0aGF0IHRoZW1lLmApLHMzKGptLHRoaXMsITApLHRoaXMudXNlVGhlbWUoKSwyMyk6bH1hcmVDZWxsc0JvcmRlckJveCgpe3JldHVybiJib3JkZXItYm94Ij09PXRoaXMu'@;
put 'Z2V0U3R5bGVGb3JURCgiYm94LXNpemluZyIpfXVzZVRoZW1lKGwpe2lmKCFsKXJldHVybiBsMyhPcCx0aGlzLGIzZSkuY2FsbCh0aGlzKSxzMyhqbSx0aGlzLCEwKSx2b2lkIHMzKExwLHRoaXMsbHx8dm9pZCAwKTtsJiZsIT09d2MoTHAsdGhpcykmJih3YyhMcCx0aGlzKSYmbDMoT3AsdGhp'@;
put 'cyxmdHQpLmNhbGwodGhpcyksczMoTHAsdGhpcyxsKSxzMyhqbSx0aGlzLCExKSxsMyhPcCx0aGlzLHV0dCkuY2FsbCh0aGlzKSxsMyhPcCx0aGlzLGIzZSkuY2FsbCh0aGlzKSl9Z2V0VGhlbWVOYW1lKCl7cmV0dXJuIHdjKExwLHRoaXMpfXJlbW92ZUNsYXNzTmFtZXMoKXtwbyh3YyhTZyx0'@;
put 'aGlzKSx3YyhMcCx0aGlzKSkmJmxvKHdjKFNnLHRoaXMpLHdjKExwLHRoaXMpKX19ZnVuY3Rpb24gY3R0KCl7Y29uc3QgYz10aGlzLmdldENTU1ZhcmlhYmxlVmFsdWUoImxpbmUtaGVpZ2h0IiksbD10aGlzLmdldENTU1ZhcmlhYmxlVmFsdWUoImNlbGwtdmVydGljYWwtcGFkZGluZyIpLGE9'@;
put 'TWF0aC5jZWlsKHBhcnNlRmxvYXQodGhpcy5nZXRTdHlsZUZvclREKCJib3JkZXItYm90dG9tLXdpZHRoIikpKTtyZXR1cm4gbnVsbD09PWN8fG51bGw9PT1sfHxpc05hTihhKT9udWxsOmMrMipsK2F9ZnVuY3Rpb24gdXR0KCl7bG8od2MoU2csdGhpcyksL2h0LXRoZW1lLS4qL2cpLFRpKHdj'@;
put 'KFNnLHRoaXMpLHdjKExwLHRoaXMpKX1mdW5jdGlvbiBiM2UoKXt0aGlzLmlzQ2xhc3NpY1RoZW1lKCl8fHMzKFRLLHRoaXMsZ2V0Q29tcHV0ZWRTdHlsZSh3YyhTZyx0aGlzKSkpO2NvbnN0IGM9bDMoT3AsdGhpcyxkdHQpLmNhbGwodGhpcyxbImJveC1zaXppbmciLCJib3JkZXItYm90dG9t'@;
put 'LXdpZHRoIl0pO3djKFlFLHRoaXMpLnRkPXsuLi53YyhZRSx0aGlzKS50ZCwiYm94LXNpemluZyI6Y1siYm94LXNpemluZyJdLCJib3JkZXItYm90dG9tLXdpZHRoIjpjWyJib3JkZXItYm90dG9tLXdpZHRoIl19fWZ1bmN0aW9uIGR0dChjKXtjb25zdCBsPXdjKEFLLHRoaXMpLGE9d2MoU2cs'@;
put 'dGhpcyksZD1sLmNyZWF0ZUVsZW1lbnQoInRhYmxlIiksaD1sLmNyZWF0ZUVsZW1lbnQoInRib2R5IiksZj1sLmNyZWF0ZUVsZW1lbnQoInRyIiksdj1sLmNyZWF0ZUVsZW1lbnQoInRyIiksTT1sLmNyZWF0ZUVsZW1lbnQoInRkIik7di5hcHBlbmRDaGlsZChNKSxoLmFwcGVuZENoaWxkKGYp'@;
put 'LGguYXBwZW5kQ2hpbGQodiksZC5hcHBlbmRDaGlsZChoKSxhLmFwcGVuZENoaWxkKGQpO2NvbnN0IEQ9Z2V0Q29tcHV0ZWRTdHlsZShNKSxaPXt9O3JldHVybiBjLmZvckVhY2gocmU9PntaW3JlXT1ELmdldFByb3BlcnR5VmFsdWUocmUpfSksYS5yZW1vdmVDaGlsZChkKSxafWZ1bmN0aW9u'@;
put 'IGh0dChjKXtjb25zdCBsPU1hdGguY2VpbChwYXJzZUZsb2F0KGwzKE9wLHRoaXMseTNlKS5jYWxsKHRoaXMsYykpKTtyZXR1cm4gTnVtYmVyLmlzTmFOKGwpP251bGw6bH1mdW5jdGlvbiB5M2UoYyl7Y29uc3QgbD13YyhUSyx0aGlzKS5nZXRQcm9wZXJ0eVZhbHVlKGMpO3JldHVybiIiPT09'@;
put 'bD9udWxsOmx9ZnVuY3Rpb24gZnR0KCl7czMoWUUsdGhpcyx7fSksczMoV0UsdGhpcyx7fSksczMoam0sdGhpcywhMCl9Y2xhc3MgcHR0IGV4dGVuZHMgbUt7Y29uc3RydWN0b3IobCxhKXtzdXBlcihsLG5ldyB5ZXQoYSkpLHRoaXMuc3R5bGVzSGFuZGxlcj1uZXcgbHR0KHRoaXMuZG9tQmlu'@;
put 'ZGluZ3MpO2NvbnN0IGQ9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoImZhY2FkZSIsdGhpcyk7dGhpcy53dFRhYmxlPW5ldyBfZXQodGhpcy5nZXRUYWJsZURhbygpLGQsdGhpcy5kb21CaW5kaW5ncyx0aGlzLnd0U2V0dGluZ3MpLHRoaXMud3RWaWV3cG9ydD1uZXcgUWV0KHRoaXMuZ2V0'@;
put 'Vmlld3BvcnREYW8oKSx0aGlzLmRvbUJpbmRpbmdzLHRoaXMud3RTZXR0aW5ncyx0aGlzLmV2ZW50TWFuYWdlcix0aGlzLnd0VGFibGUpLHRoaXMuc2VsZWN0aW9uTWFuYWdlcj1uZXcgYXR0KHRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJzZWxlY3Rpb25zIikpLHRoaXMud3RFdmVudD1u'@;
put 'ZXcgRWZlKGQsdGhpcy5kb21CaW5kaW5ncyx0aGlzLnd0U2V0dGluZ3MsdGhpcy5ldmVudE1hbmFnZXIsdGhpcy53dFRhYmxlLHRoaXMuc2VsZWN0aW9uTWFuYWdlciksdGhpcy53dE92ZXJsYXlzPW5ldyBtZXQodGhpcyxkLHRoaXMuZG9tQmluZGluZ3MsdGhpcy53dFNldHRpbmdzLHRoaXMu'@;
put 'ZXZlbnRNYW5hZ2VyLHRoaXMud3RUYWJsZSksdGhpcy5leHBvcnRTZXR0aW5nc0FzQ2xhc3NOYW1lcygpLHRoaXMuZmluZE9yaWdpbmFsSGVhZGVycygpfWV4cG9ydFNldHRpbmdzQXNDbGFzc05hbWVzKCl7Y29uc3QgYT1bXSxkPVtdO1hvKHtyb3dIZWFkZXJzOiJodFJvd0hlYWRlcnMiLGNv'@;
put 'bHVtbkhlYWRlcnM6Imh0Q29sdW1uSGVhZGVycyJ9LChoLGYpPT57dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoZikubGVuZ3RoJiZkLnB1c2goaCksYS5wdXNoKGgpfSksbG8odGhpcy53dFRhYmxlLnd0Um9vdEVsZW1lbnQucGFyZW50Tm9kZSxhKSxUaSh0aGlzLnd0VGFibGUud3RSb290'@;
put 'RWxlbWVudC5wYXJlbnROb2RlLGQpfWdldE92ZXJsYXlCeU5hbWUobCl7dmFyIGE7aWYoIUhmZS5pbmNsdWRlcyhsKSlyZXR1cm4gbnVsbDtjb25zdCBkPWwucmVwbGFjZSgvXyhbYS16XSkvZyxoPT5oWzFdLnRvVXBwZXJDYXNlKCkpO3JldHVybiBudWxsIT09KGE9dGhpcy53dE92ZXJsYXlz'@;
put 'W2Ake2R9T3ZlcmxheWBdKSYmdm9pZCAwIT09YT9hOm51bGx9Z2V0Vmlld3BvcnREYW8oKXtjb25zdCBsPXRoaXM7cmV0dXJue2dldCB3b3QoKXtyZXR1cm4gbH0sZ2V0IHRvcE92ZXJsYXlUcmltbWluZ0NvbnRhaW5lcigpe3JldHVybiBsLnd0T3ZlcmxheXMudG9wT3ZlcmxheS50cmltbWlu'@;
put 'Z0NvbnRhaW5lcn0sZ2V0IGlubGluZVN0YXJ0T3ZlcmxheVRyaW1taW5nQ29udGFpbmVyKCl7cmV0dXJuIGwud3RPdmVybGF5cy5pbmxpbmVTdGFydE92ZXJsYXkudHJpbW1pbmdDb250YWluZXJ9LGdldCB0b3BTY3JvbGxQb3NpdGlvbigpe3JldHVybiBsLnd0T3ZlcmxheXMudG9wT3Zlcmxh'@;
put 'eS5nZXRTY3JvbGxQb3NpdGlvbigpfSxnZXQgdG9wUGFyZW50T2Zmc2V0KCl7cmV0dXJuIGwud3RPdmVybGF5cy50b3BPdmVybGF5LmdldFRhYmxlUGFyZW50T2Zmc2V0KCl9LGdldCBpbmxpbmVTdGFydFNjcm9sbFBvc2l0aW9uKCl7cmV0dXJuIGwud3RPdmVybGF5cy5pbmxpbmVTdGFydE92'@;
put 'ZXJsYXkuZ2V0U2Nyb2xsUG9zaXRpb24oKX0sZ2V0IGlubGluZVN0YXJ0UGFyZW50T2Zmc2V0KCl7cmV0dXJuIGwud3RPdmVybGF5cy5pbmxpbmVTdGFydE92ZXJsYXkuZ2V0VGFibGVQYXJlbnRPZmZzZXQoKX0sZ2V0IHRvcE92ZXJsYXkoKXtyZXR1cm4gbC53dE92ZXJsYXlzLnRvcE92ZXJs'@;
put 'YXl9LGdldCBpbmxpbmVTdGFydE92ZXJsYXkoKXtyZXR1cm4gbC53dE92ZXJsYXlzLmlubGluZVN0YXJ0T3ZlcmxheX0sZ2V0IGJvdHRvbU92ZXJsYXkoKXtyZXR1cm4gbC53dE92ZXJsYXlzLmJvdHRvbU92ZXJsYXl9fX19Y2xhc3Mga0t7Y29uc3RydWN0b3IobCl7bCBpbnN0YW5jZW9mIG1L'@;
put 'P3RoaXMuX3dvdD1sOnRoaXMuX2luaXRGcm9tU2V0dGluZ3MobCl9X2luaXRGcm9tU2V0dGluZ3MobCl7bC5mYWNhZGU9YT0+e2NvbnN0IGQ9bmV3IGtLKGEpO3JldHVybigpPT5kfSx0aGlzLl93b3Q9bmV3IHB0dChsLnRhYmxlLGwpfWdldCBndWlkKCl7cmV0dXJuIHRoaXMuX3dvdC5ndWlk'@;
put 'fWdldCByb290RG9jdW1lbnQoKXtyZXR1cm4gdGhpcy5fd290LmRvbUJpbmRpbmdzLnJvb3REb2N1bWVudH1nZXQgcm9vdFdpbmRvdygpe3JldHVybiB0aGlzLl93b3QuZG9tQmluZGluZ3Mucm9vdFdpbmRvd31nZXQgd3RTZXR0aW5ncygpe3JldHVybiB0aGlzLl93b3Qud3RTZXR0aW5nc31n'@;
put 'ZXQgY2xvbmVTb3VyY2UoKXtyZXR1cm4gdGhpcy5fd290LmNsb25lU291cmNlfWdldCBjbG9uZU92ZXJsYXkoKXtyZXR1cm4gdGhpcy5fd290LmNsb25lT3ZlcmxheX1nZXQgc2VsZWN0aW9uTWFuYWdlcigpe3JldHVybiB0aGlzLl93b3Quc2VsZWN0aW9uTWFuYWdlcn1nZXQgd3RWaWV3cG9y'@;
put 'dCgpe3JldHVybiB0aGlzLl93b3Qud3RWaWV3cG9ydH1nZXQgd3RPdmVybGF5cygpe3JldHVybiB0aGlzLl93b3Qud3RPdmVybGF5c31nZXQgd3RUYWJsZSgpe3JldHVybiB0aGlzLl93b3Qud3RUYWJsZX1nZXQgd3RFdmVudCgpe3JldHVybiB0aGlzLl93b3Qud3RFdmVudH1nZXQgd3RTY3Jv'@;
put 'bGwoKXtyZXR1cm4gdGhpcy5fd290Lnd0U2Nyb2xsfWdldCBkcmF3bigpe3JldHVybiB0aGlzLl93b3QuZHJhd259c2V0IGRyYXduKGwpe3RoaXMuX3dvdC5kcmF3bj1sfWdldCBhY3RpdmVPdmVybGF5TmFtZSgpe3JldHVybiB0aGlzLl93b3QuYWN0aXZlT3ZlcmxheU5hbWV9Z2V0IGRyYXdJ'@;
put 'bnRlcnJ1cHRlZCgpe3JldHVybiB0aGlzLl93b3QuZHJhd0ludGVycnVwdGVkfXNldCBkcmF3SW50ZXJydXB0ZWQobCl7dGhpcy5fd290LmRyYXdJbnRlcnJ1cHRlZD1sfWdldCBsYXN0TW91c2VPdmVyKCl7cmV0dXJuIHRoaXMuX3dvdC5sYXN0TW91c2VPdmVyfXNldCBsYXN0TW91c2VPdmVy'@;
put 'KGwpe3RoaXMuX3dvdC5sYXN0TW91c2VPdmVyPWx9Z2V0IG1vbWVudHVtU2Nyb2xsaW5nKCl7cmV0dXJuIHRoaXMuX3dvdC5tb21lbnR1bVNjcm9sbGluZ31zZXQgbW9tZW50dW1TY3JvbGxpbmcobCl7dGhpcy5fd290Lm1vbWVudHVtU2Nyb2xsaW5nPWx9Z2V0IHRvdWNoQXBwbGllZCgpe3Jl'@;
put 'dHVybiB0aGlzLl93b3QudG91Y2hBcHBsaWVkfXNldCB0b3VjaEFwcGxpZWQobCl7dGhpcy5fd290LnRvdWNoQXBwbGllZD1sfWdldCBkb21CaW5kaW5ncygpe3JldHVybiB0aGlzLl93b3QuZG9tQmluZGluZ3N9Z2V0IGV2ZW50TGlzdGVuZXJzKCl7cmV0dXJuIHRoaXMuX3dvdC5ldmVudExp'@;
put 'c3RlbmVyc31zZXQgZXZlbnRMaXN0ZW5lcnMobCl7dGhpcy5fd290LmV2ZW50TGlzdGVuZXJzPWx9Z2V0IGV2ZW50TWFuYWdlcigpe3JldHVybiB0aGlzLl93b3QuZXZlbnRNYW5hZ2VyfWdldCBzdHlsZXNIYW5kbGVyKCl7cmV0dXJuIHRoaXMuX3dvdC5zdHlsZXNIYW5kbGVyfWNyZWF0ZUNl'@;
put 'bGxDb29yZHMobCxhKXtyZXR1cm4gdGhpcy5fd290LmNyZWF0ZUNlbGxDb29yZHMobCxhKX1jcmVhdGVDZWxsUmFuZ2UobCxhLGQpe3JldHVybiB0aGlzLl93b3QuY3JlYXRlQ2VsbFJhbmdlKGwsYSxkKX1kcmF3KCl7cmV0dXJuIHRoaXMuX3dvdC5kcmF3KGFyZ3VtZW50cy5sZW5ndGg+MCYm'@;
put 'dm9pZCAwIT09YXJndW1lbnRzWzBdJiZhcmd1bWVudHNbMF0pLHRoaXN9Z2V0Q2VsbChsKXtyZXR1cm4gdGhpcy5fd290LmdldENlbGwobCxhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSYmYXJndW1lbnRzWzFdKX1zY3JvbGxWaWV3cG9ydChsLGEsZCl7cmV0dXJu'@;
put 'IHRoaXMuX3dvdC5zY3JvbGxWaWV3cG9ydChsLGEsZCl9c2Nyb2xsVmlld3BvcnRIb3Jpem9udGFsbHkobCxhKXtyZXR1cm4gdGhpcy5fd290LnNjcm9sbFZpZXdwb3J0SG9yaXpvbnRhbGx5KGwsYSl9c2Nyb2xsVmlld3BvcnRWZXJ0aWNhbGx5KGwsYSl7cmV0dXJuIHRoaXMuX3dvdC5zY3Jv'@;
put 'bGxWaWV3cG9ydFZlcnRpY2FsbHkobCxhKX1nZXRWaWV3cG9ydCgpe3JldHVybiB0aGlzLl93b3QuZ2V0Vmlld3BvcnQoKX1nZXRPdmVybGF5TmFtZSgpe3JldHVybiB0aGlzLl93b3QuY2xvbmVPdmVybGF5P3RoaXMuX3dvdC5jbG9uZU92ZXJsYXkudHlwZToibWFzdGVyIn1nZXRPdmVybGF5'@;
put 'QnlOYW1lKGwpe3JldHVybiB0aGlzLl93b3QuZ2V0T3ZlcmxheUJ5TmFtZShsKX1leHBvcnRTZXR0aW5nc0FzQ2xhc3NOYW1lcygpe3JldHVybiB0aGlzLl93b3QuZXhwb3J0U2V0dGluZ3NBc0NsYXNzTmFtZXMoKX11cGRhdGUobCxhKXtyZXR1cm4gdGhpcy5fd290Lnd0U2V0dGluZ3MudXBk'@;
put 'YXRlKGwsYSksdGhpc31nZXRTZXR0aW5nKGwsYSxkLGgsZil7cmV0dXJuIHRoaXMuX3dvdC53dFNldHRpbmdzLmdldFNldHRpbmcobCxhLGQsaCxmKX1oYXNTZXR0aW5nKGwpe3JldHVybiB0aGlzLl93b3Qud3RTZXR0aW5ncy5oYXNTZXR0aW5nKGwpfWRlc3Ryb3koKXt0aGlzLl93b3QuZGVz'@;
put 'dHJveSgpfX1mdW5jdGlvbiBfM2UoYyl7bGV0e2lzU2hpZnRLZXk6bCxpc0xlZnRDbGljazphLGlzUmlnaHRDbGljazpkLGNvb3JkczpoLHNlbGVjdGlvbjpmLGNvbnRyb2xsZXI6dixjZWxsQ29vcmRzRmFjdG9yeTpNfT1jO2NvbnN0IEQ9Zi5pc1NlbGVjdGVkKCk/Zi5nZXRTZWxlY3RlZFJh'@;
put 'bmdlKCkuY3VycmVudCgpOm51bGwsWj1mLmlzU2VsZWN0ZWRCeUNvcm5lcigpLHJlPWYuaXNTZWxlY3RlZEJ5Um93SGVhZGVyKCk7aWYoZi5tYXJrU291cmNlKCJtb3VzZSIpLGwmJkQpaC5yb3c+PTAmJmguY29sPj0wJiYhdi5jZWxsP2Yuc2V0UmFuZ2VFbmQoaCk6KFp8fHJlKSYmaC5yb3c+'@;
put 'PTAmJmguY29sPj0wJiYhdi5jZWxsP2Yuc2V0UmFuZ2VFbmQoTShoLnJvdyxoLmNvbCkpOlomJmgucm93PDAmJiF2LmNvbHVtbj9mLnNldFJhbmdlRW5kKE0oRC50by5yb3csaC5jb2wpKTpyZSYmaC5jb2w8MCYmIXYucm93P2Yuc2V0UmFuZ2VFbmQoTShoLnJvdyxELnRvLmNvbCkpOighWiYm'@;
put 'IXJlJiZoLmNvbDwwfHxaJiZoLmNvbDwwKSYmIXYucm93P2Yuc2VsZWN0Um93cyhNYXRoLm1heChELmZyb20ucm93LDApLGgucm93LGguY29sKTooIVomJiFyZSYmaC5yb3c8MHx8cmUmJmgucm93PDApJiYhdi5jb2x1bW4mJmYuc2VsZWN0Q29sdW1ucyhNYXRoLm1heChELmZyb20uY29sLDAp'@;
put 'LGguY29sLGgucm93KTtlbHNle2NvbnN0IGNlPSFmLmluSW5TZWxlY3Rpb24oaCksYmU9YXx8ZCYmY2U7aC5yb3c8MCYmaC5jb2w+PTAmJiF2LmNvbHVtbj9iZSYmZi5zZWxlY3RDb2x1bW5zKGguY29sLGguY29sLGgucm93KTpoLmNvbDwwJiZoLnJvdz49MCYmIXYucm93P2JlJiZmLnNlbGVj'@;
put 'dFJvd3MoaC5yb3csaC5yb3csaC5jb2wpOmguY29sPj0wJiZoLnJvdz49MCYmIXYuY2VsbD9iZSYmZi5zZXRSYW5nZVN0YXJ0KGgpOmguY29sPDAmJmgucm93PDAmJmYuc2VsZWN0QWxsKCEwLCEwLHtkaXNhYmxlSGVhZGVyc0hpZ2hsaWdodDohMCxmb2N1c1Bvc2l0aW9uOntyb3c6MCxjb2w6'@;
put 'MH19KX1mLm1hcmtFbmRTb3VyY2UoKX1jb25zdCBtdHQ9bmV3IE1hcChbWyJtb3VzZWRvd24iLF8zZV0sWyJtb3VzZW92ZXIiLGZ1bmN0aW9uIGd0dChjKXtsZXR7aXNMZWZ0Q2xpY2s6bCxjb29yZHM6YSxzZWxlY3Rpb246ZCxjb250cm9sbGVyOmgsY2VsbENvb3Jkc0ZhY3Rvcnk6Zn09Yztp'@;
put 'ZighbClyZXR1cm47Y29uc3Qgdj1kLmlzU2VsZWN0ZWRCeVJvd0hlYWRlcigpLE09ZC5pc1NlbGVjdGVkQnlDb2x1bW5IZWFkZXIoKSxEPWQudGFibGVQcm9wcy5jb3VudENvbHMoKSxaPWQudGFibGVQcm9wcy5jb3VudFJvd3MoKTtkLm1hcmtTb3VyY2UoIm1vdXNlIiksTSYmIWguY29sdW1u'@;
put 'P2Quc2V0UmFuZ2VFbmQoZihaLTEsYS5jb2wpKTp2JiYhaC5yb3c/ZC5zZXRSYW5nZUVuZChmKGEucm93LEQtMSkpOmguY2VsbHx8ZC5zZXRSYW5nZUVuZChhKSxkLm1hcmtFbmRTb3VyY2UoKX1dLFsidG91Y2hzdGFydCIsXzNlXV0pO2Z1bmN0aW9uIHczZShjLGwpe2xldHtjb29yZHM6YSxz'@;
put 'ZWxlY3Rpb246ZCxjb250cm9sbGVyOmgsY2VsbENvb3Jkc0ZhY3Rvcnk6Zn09bDttdHQuZ2V0KGMudHlwZSkoe2Nvb3JkczphLHNlbGVjdGlvbjpkLGNvbnRyb2xsZXI6aCxjZWxsQ29vcmRzRmFjdG9yeTpmLGlzU2hpZnRLZXk6Yy5zaGlmdEtleSxpc0xlZnRDbGljazpVTyhjKXx8InRvdWNo'@;
put 'c3RhcnQiPT09Yy50eXBlLGlzUmlnaHRDbGljazpIbShjKX0pfWNvbnN0IEMzZT1uZXcgV2Vha01hcCxESz1TeW1ib2woInJvb3RJbnN0YW5jZSIpO2Z1bmN0aW9uIGNQKGMpe3JldHVybiBDM2UuaGFzKGMpfWZ1bmN0aW9uIHptKGMsbCxhKXtTM2UoYyxsKSxsLnNldChjLGEpfWZ1bmN0aW9u'@;
put 'IFMzZShjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9ZnVuY3Rpb24gVW0oYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIF90dChjKXt2YXIgbD1mdW5jdGlv'@;
put 'biB3dHQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVy'@;
put 'cm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5'@;
put 'KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWZ1bmN0aW9uIEF1KGMsbCl7cmV0dXJuIGMuZ2V0KENfKGMsbCkpfWZ1bmN0aW9uIEJkKGMsbCxhKXtyZXR1cm4gYy5zZXQoQ18oYyxsKSxhKSxhfWZ1bmN0aW9uIENfKGMs'@;
put 'bCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX12YXIgSUs9bmV3IFdlYWtNYXAsdVA9'@;
put 'bmV3IFdlYWtNYXAsZFA9bmV3IFdlYWtNYXAsTWc9bmV3IFdlYWtNYXAsYzM9bmV3IFdlYWtNYXAsUks9bmV3IFdlYWtNYXAsTEs9bmV3IFdlYWtNYXAsU189bmV3IFdlYWtNYXAsR0U9bmV3IFdlYWtTZXQ7ZnVuY3Rpb24gTTNlKCl7cmV0dXJuIHBhcnNlSW50KHRoaXMuaG90LnJvb3RFbGVt'@;
put 'ZW50LmdldEF0dHJpYnV0ZShSTygpWzBdKSwxMCl9ZnVuY3Rpb24gU3R0KGMpe2NvbnN0IGw9Q18oR0UsdGhpcyxNM2UpLmNhbGwodGhpcykrYzt2byh0aGlzLmhvdC5yb290RWxlbWVudCwuLi5STyhsKSl9ZnVuY3Rpb24gTXR0KCl7Y29uc3QgYz10aGlzLmhvdC5yb290RWxlbWVudDt0aGlz'@;
put 'Lmhhc1ZlcnRpY2FsU2Nyb2xsKCk/VGkoYywiaHRIYXNTY3JvbGxZIik6bG8oYywiaHRIYXNTY3JvbGxZIiksdGhpcy5oYXNIb3Jpem9udGFsU2Nyb2xsKCk/VGkoYywiaHRIYXNTY3JvbGxYIik6bG8oYywiaHRIYXNTY3JvbGxYIil9Y29uc3QgeHR0PWNsYXNzIEN0dHtjb25zdHJ1Y3Rvcihs'@;
put 'KXsoZnVuY3Rpb24geXR0KGMsbCl7UzNlKGMsbCksbC5hZGQoYyl9KSh0aGlzLEdFKSxVbSh0aGlzLCJob3QiLHZvaWQgMCksVW0odGhpcywiZXZlbnRNYW5hZ2VyIix2b2lkIDApLFVtKHRoaXMsInNldHRpbmdzIix2b2lkIDApLFVtKHRoaXMsIlRIRUFEIix2b2lkIDApLFVtKHRoaXMsIlRC'@;
put 'T0RZIix2b2lkIDApLFVtKHRoaXMsIl93dCIsdm9pZCAwKSxVbSh0aGlzLCJhY3RpdmVXdCIsdm9pZCAwKSx6bSh0aGlzLElLLDApLHptKHRoaXMsdVAsMCksVW0odGhpcywicG9zdHBvbmVkQWRqdXN0RWxlbWVudHNTaXplIiwhMSksem0odGhpcyxkUCwhMSksem0odGhpcyxNZyx2b2lkIDAp'@;
put 'LHptKHRoaXMsYzMsdm9pZCAwKSx6bSh0aGlzLFJLLDApLHptKHRoaXMsTEssMCksem0odGhpcyxTXyxudWxsKSx0aGlzLmhvdD1sLHRoaXMuZXZlbnRNYW5hZ2VyPW5ldyBqMih0aGlzLmhvdCksdGhpcy5zZXR0aW5ncz10aGlzLmhvdC5nZXRTZXR0aW5ncygpLHRoaXMuY3JlYXRlRWxlbWVu'@;
put 'dHMoKSx0aGlzLnJlZ2lzdGVyRXZlbnRzKCksdGhpcy5pbml0aWFsaXplV2Fsa29udGFibGUoKX1yZW5kZXIoKXtpZighdGhpcy5ob3QuaXNSZW5kZXJTdXNwZW5kZWQoKSl7Y29uc3QgbD10aGlzLmhvdC5mb3JjZUZ1bGxSZW5kZXI7dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZVJlbmRlciIs'@;
put 'bCksdGhpcy5wb3N0cG9uZWRBZGp1c3RFbGVtZW50c1NpemUmJih0aGlzLnBvc3Rwb25lZEFkanVzdEVsZW1lbnRzU2l6ZT0hMSx0aGlzLmFkanVzdEVsZW1lbnRzU2l6ZSgpKSx0aGlzLl93dC5kcmF3KCFsKSxDXyhHRSx0aGlzLE10dCkuY2FsbCh0aGlzKSx0aGlzLmhvdC5ydW5Ib29rcygi'@;
put 'YWZ0ZXJSZW5kZXIiLGwpLHRoaXMuaG90LmZvcmNlRnVsbFJlbmRlcj0hMX19YWRqdXN0RWxlbWVudHNTaXplKCl7dGhpcy5ob3QuaXNSZW5kZXJTdXNwZW5kZWQoKT90aGlzLnBvc3Rwb25lZEFkanVzdEVsZW1lbnRzU2l6ZT0hMDp0aGlzLl93dC53dE92ZXJsYXlzLmFkanVzdEVsZW1lbnRz'@;
put 'U2l6ZSgpfWdldENlbGxBdENvb3JkcyhsLGEpe2NvbnN0IGQ9dGhpcy5fd3QuZ2V0Q2VsbChsLGEpO3JldHVybiBkPDA/bnVsbDpkfXNjcm9sbFZpZXdwb3J0KGwsYSxkKXtyZXR1cm4gdGhpcy5fd3Quc2Nyb2xsVmlld3BvcnQobCxhLGQpfXNjcm9sbFZpZXdwb3J0SG9yaXpvbnRhbGx5KGws'@;
put 'YSl7cmV0dXJuIHRoaXMuX3d0LnNjcm9sbFZpZXdwb3J0SG9yaXpvbnRhbGx5KGwsYSl9c2Nyb2xsVmlld3BvcnRWZXJ0aWNhbGx5KGwsYSl7cmV0dXJuIHRoaXMuX3d0LnNjcm9sbFZpZXdwb3J0VmVydGljYWxseShsLGEpfWNyZWF0ZUVsZW1lbnRzKCl7Y29uc3R7cm9vdEVsZW1lbnQ6bCxy'@;
put 'b290RG9jdW1lbnQ6YX09dGhpcy5ob3QsZD1sLmdldEF0dHJpYnV0ZSgic3R5bGUiKTtkJiZsLnNldEF0dHJpYnV0ZSgiZGF0YS1vcmlnaW5hbHN0eWxlIixkKSxUaShsLCJoYW5kc29udGFibGUiKSxCZChjMyx0aGlzLGEuY3JlYXRlRWxlbWVudCgiVEFCTEUiKSksVGkoQXUoYzMsdGhpcyks'@;
put 'Imh0Q29yZSIpLHRoaXMuaG90LmdldFNldHRpbmdzKCkudGFibGVDbGFzc05hbWUmJlRpKEF1KGMzLHRoaXMpLHRoaXMuaG90LmdldFNldHRpbmdzKCkudGFibGVDbGFzc05hbWUpLHRoaXMuc2V0dGluZ3MuYXJpYVRhZ3MmJih2byhBdShjMyx0aGlzKSxbWyJyb2xlIiwicHJlc2VudGF0aW9u'@;
put 'Il1dKSx2byhsLFtbInJvbGUiLCJ0cmVlZ3JpZCJdLFQyZSgtMSksUk8odGhpcy5ob3QuY291bnRDb2xzKCkpLFsiYXJpYS1tdWx0aXNlbGVjdGFibGUiLCJ0cnVlIl1dKSksdGhpcy5USEVBRD1hLmNyZWF0ZUVsZW1lbnQoIlRIRUFEIiksQXUoYzMsdGhpcykuYXBwZW5kQ2hpbGQodGhpcy5U'@;
put 'SEVBRCksdGhpcy5UQk9EWT1hLmNyZWF0ZUVsZW1lbnQoIlRCT0RZIiksQXUoYzMsdGhpcykuYXBwZW5kQ2hpbGQodGhpcy5UQk9EWSksdGhpcy5ob3QudGFibGU9QXUoYzMsdGhpcyksdGhpcy5ob3QuY29udGFpbmVyLmluc2VydEJlZm9yZShBdShjMyx0aGlzKSx0aGlzLmhvdC5jb250YWlu'@;
put 'ZXIuZmlyc3RDaGlsZCl9cmVnaXN0ZXJFdmVudHMoKXtjb25zdHtyb290RWxlbWVudDpsLHJvb3REb2N1bWVudDphLHNlbGVjdGlvbjpkLHJvb3RXaW5kb3c6aH09dGhpcy5ob3QsZj1hLmRvY3VtZW50RWxlbWVudDt0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGwsIm1vdXNl'@;
put 'ZG93biIsTT0+e0JkKGRQLHRoaXMsITApLHRoaXMuaXNUZXh0U2VsZWN0aW9uQWxsb3dlZChNLnRhcmdldCl8fChNJChoKSxNLnByZXZlbnREZWZhdWx0KCksaC5mb2N1cygpKX0pLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIobCwibW91c2V1cCIsKCk9PntCZChkUCx0aGlz'@;
put 'LCExKX0pLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIobCwibW91c2Vtb3ZlIixNPT57QXUoZFAsdGhpcykmJiF0aGlzLmlzVGV4dFNlbGVjdGlvbkFsbG93ZWQoTS50YXJnZXQpJiYodGhpcy5zZXR0aW5ncy5mcmFnbWVudFNlbGVjdGlvbiYmTSQoaCksTS5wcmV2ZW50RGVm'@;
put 'YXVsdCgpKX0pLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoZiwia2V5dXAiLE09PntkLmlzSW5Qcm9ncmVzcygpJiYhTS5zaGlmdEtleSYmZC5maW5pc2goKX0pLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoZiwibW91c2V1cCIsTT0+e2QuaXNJblByb2dy'@;
put 'ZXNzKCkmJlVPKE0pJiZkLmZpbmlzaCgpLEJkKE1nLHRoaXMsITEpO2NvbnN0IEQ9Rk8oYS5hY3RpdmVFbGVtZW50KTtTRShhLmFjdGl2ZUVsZW1lbnQpJiYhRHx8KER8fCFkLmlzU2VsZWN0ZWQoKSYmIWQuaXNTZWxlY3RlZEJ5QW55SGVhZGVyKCkmJiFsLmNvbnRhaW5zKE0udGFyZ2V0KSYm'@;
put 'IUhtKE0pKSYmdGhpcy5ob3QudW5saXN0ZW4oKX0pLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoZiwiY29udGV4dG1lbnUiLE09PntkLmlzSW5Qcm9ncmVzcygpJiZIbShNKSYmKGQuZmluaXNoKCksQmQoTWcsdGhpcywhMSkpfSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZl'@;
put 'bnRMaXN0ZW5lcihmLCJ0b3VjaGVuZCIsKCk9PntkLmlzSW5Qcm9ncmVzcygpJiZkLmZpbmlzaCgpLEJkKE1nLHRoaXMsITEpfSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihmLCJtb3VzZWRvd24iLE09Pntjb25zdCBEPU0udGFyZ2V0LFo9TS54fHxNLmNsaWVudFgscmU9'@;
put 'TS55fHxNLmNsaWVudFk7bGV0IGNlPU0udGFyZ2V0O2lmKEF1KE1nLHRoaXMpfHwhbHx8IXRoaXMuaG90LnZpZXcpcmV0dXJuO2NvbnN0e2hvbGRlcjpiZX09dGhpcy5fd3Qud3RUYWJsZTtpZihjZT09PWJlKXtjb25zdCBCZT1mMChhKTtpZihhLmVsZW1lbnRGcm9tUG9pbnQoWitCZSxyZSkh'@;
put 'PT1iZXx8YS5lbGVtZW50RnJvbVBvaW50KFoscmUrQmUpIT09YmUpcmV0dXJufWVsc2UgZm9yKDtjZSE9PWY7KXtpZihudWxsPT09Y2Upe2lmKE0uaXNUYXJnZXRXZWJDb21wb25lbnQpYnJlYWs7cmV0dXJufWlmKGNlPT09bClyZXR1cm47Y2U9Y2UucGFyZW50Tm9kZX0oImZ1bmN0aW9uIj09'@;
put 'dHlwZW9mIHRoaXMuc2V0dGluZ3Mub3V0c2lkZUNsaWNrRGVzZWxlY3RzP3RoaXMuc2V0dGluZ3Mub3V0c2lkZUNsaWNrRGVzZWxlY3RzKEQpOnRoaXMuc2V0dGluZ3Mub3V0c2lkZUNsaWNrRGVzZWxlY3RzKT90aGlzLmhvdC5kZXNlbGVjdENlbGwoKTp0aGlzLmhvdC5kZXN0cm95RWRpdG9y'@;
put 'KCExLCExKX0pO2xldCB2PUI3KGgpO2Zvcig7bnVsbCE9PXY7KXRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIodi5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsImNsaWNrIiwoKT0+e3RoaXMuaG90LnVubGlzdGVuKCl9KSx2PUI3KHYpO3RoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2'@;
put 'ZW50TGlzdGVuZXIoQXUoYzMsdGhpcyksInNlbGVjdHN0YXJ0IixNPT57dGhpcy5zZXR0aW5ncy5mcmFnbWVudFNlbGVjdGlvbnx8U0UoTS50YXJnZXQpfHxNLnByZXZlbnREZWZhdWx0KCl9KX10cmFuc2xhdGVGcm9tUmVuZGVyYWJsZVRvVmlzdWFsQ29vcmRzKGwpe2xldHtyb3c6YSxjb2w6'@;
put 'ZH09bDtyZXR1cm4gdGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMoLi4udGhpcy50cmFuc2xhdGVGcm9tUmVuZGVyYWJsZVRvVmlzdWFsSW5kZXgoYSxkKSl9dHJhbnNsYXRlRnJvbVJlbmRlcmFibGVUb1Zpc3VhbEluZGV4KGwsYSl7bGV0IGQ9bD49MD90aGlzLmhvdC5yb3dJbmRleE1hcHBl'@;
put 'ci5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KGwpOmwsaD1hPj0wP3RoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgoYSk6YTtyZXR1cm4gbnVsbD09PWQmJihkPWwpLG51bGw9PT1oJiYoaD1hKSxbZCxoXX1jb3VudFJlbmRlcmFibGVJ'@;
put 'bmRleGVzKGwsYSl7Y29uc3QgZD1NYXRoLm1pbihsLmdldE5vdFRyaW1tZWRJbmRleGVzTGVuZ3RoKCksYSksaD1sLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChkLTEsLTEpO3JldHVybiBudWxsPT09aD8wOmwuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChoKSsxfWNvdW50UmVuZGVy'@;
put 'YWJsZUNvbHVtbnMoKXtyZXR1cm4gdGhpcy5jb3VudFJlbmRlcmFibGVJbmRleGVzKHRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLHRoaXMuc2V0dGluZ3MubWF4Q29scyl9Y291bnRSZW5kZXJhYmxlUm93cygpe3JldHVybiB0aGlzLmNvdW50UmVuZGVyYWJsZUluZGV4ZXModGhpcy5ob3Qu'@;
put 'cm93SW5kZXhNYXBwZXIsdGhpcy5zZXR0aW5ncy5tYXhSb3dzKX1jb3VudE5vdEhpZGRlblJvd0luZGV4ZXMobCxhKXtyZXR1cm4gdGhpcy5jb3VudE5vdEhpZGRlbkluZGV4ZXMobCxhLHRoaXMuaG90LnJvd0luZGV4TWFwcGVyLHRoaXMuY291bnRSZW5kZXJhYmxlUm93cygpKX1jb3VudE5v'@;
put 'dEhpZGRlbkNvbHVtbkluZGV4ZXMobCxhKXtyZXR1cm4gdGhpcy5jb3VudE5vdEhpZGRlbkluZGV4ZXMobCxhLHRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLHRoaXMuY291bnRSZW5kZXJhYmxlQ29sdW1ucygpKX1jb3VudE5vdEhpZGRlbkluZGV4ZXMobCxhLGQsaCl7aWYoaXNOYU4obCl8'@;
put 'fGw8MClyZXR1cm4gMDtjb25zdCBmPWQuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGwsYSksdj1kLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoZik7aWYoIU51bWJlci5pc0ludGVnZXIodikpcmV0dXJuIDA7bGV0IE09MDtyZXR1cm4gYTwwP009disxOmE+MCYmKE09aC12KSxNfWNv'@;
put 'dW50Tm90SGlkZGVuRml4ZWRDb2x1bW5zU3RhcnQoKXtjb25zdCBsPXRoaXMuaG90LmNvdW50Q29scygpLGE9TWF0aC5taW4ocGFyc2VJbnQodGhpcy5zZXR0aW5ncy5maXhlZENvbHVtbnNTdGFydCwxMCksbCktMTtyZXR1cm4gdGhpcy5jb3VudE5vdEhpZGRlbkNvbHVtbkluZGV4ZXMoYSwt'@;
put 'MSl9Y291bnROb3RIaWRkZW5GaXhlZFJvd3NUb3AoKXtjb25zdCBsPXRoaXMuaG90LmNvdW50Um93cygpLGE9TWF0aC5taW4ocGFyc2VJbnQodGhpcy5zZXR0aW5ncy5maXhlZFJvd3NUb3AsMTApLGwpLTE7cmV0dXJuIHRoaXMuY291bnROb3RIaWRkZW5Sb3dJbmRleGVzKGEsLTEpfWNvdW50'@;
put 'Tm90SGlkZGVuRml4ZWRSb3dzQm90dG9tKCl7Y29uc3QgbD10aGlzLmhvdC5jb3VudFJvd3MoKSxhPU1hdGgubWF4KGwtcGFyc2VJbnQodGhpcy5zZXR0aW5ncy5maXhlZFJvd3NCb3R0b20sMTApLDApO3JldHVybiB0aGlzLmNvdW50Tm90SGlkZGVuUm93SW5kZXhlcyhhLDEpfWNvdW50UmVu'@;
put 'ZGVyYWJsZUNvbHVtbnNJblJhbmdlKGwsYSl7bGV0IGQ9MDtmb3IobGV0IGg9bDtoPD1hO2grKyludWxsIT09dGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChoKSYmKGQrPTEpO3JldHVybiBkfWNvdW50UmVuZGVyYWJsZVJvd3NJblJhbmdl'@;
put 'KGwsYSl7bGV0IGQ9MDtmb3IobGV0IGg9bDtoPD1hO2grKyludWxsIT09dGhpcy5ob3Qucm93SW5kZXhNYXBwZXIuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChoKSYmKGQrPTEpO3JldHVybiBkfWdldFN0eWxlc0hhbmRsZXIoKXtyZXR1cm4gdGhpcy5fd3Quc3R5bGVzSGFuZGxlcn1n'@;
put 'ZXREZWZhdWx0Um93SGVpZ2h0KCl7cmV0dXJuIHRoaXMuX3d0LnN0eWxlc0hhbmRsZXIuZ2V0RGVmYXVsdFJvd0hlaWdodCgpfWFkZENsYXNzTmFtZVRvTGljZW5zZUVsZW1lbnQobCl7dmFyIGE7Y29uc3QgZD1udWxsPT09KGE9dGhpcy5ob3Qucm9vdEVsZW1lbnQucGFyZW50Tm9kZSl8fHZv'@;
put 'aWQgMD09PWE/dm9pZCAwOmEucXVlcnlTZWxlY3RvcigiLmhvdC1kaXNwbGF5LWxpY2Vuc2UtaW5mbyIpO2QmJlRpKGQsbCl9cmVtb3ZlQ2xhc3NOYW1lRnJvbUxpY2Vuc2VFbGVtZW50KGwpe3ZhciBhO2NvbnN0IGQ9bnVsbD09PShhPXRoaXMuaG90LnJvb3RFbGVtZW50LnBhcmVudE5vZGUp'@;
put 'fHx2b2lkIDA9PT1hP3ZvaWQgMDphLnF1ZXJ5U2VsZWN0b3IoIi5ob3QtZGlzcGxheS1saWNlbnNlLWluZm8iKTtkJiZsbyhkLGwpfWlzTWFpblRhYmxlTm90RnVsbHlDb3ZlcmVkQnlPdmVybGF5cygpe2NvbnN0IGw9dGhpcy5jb3VudE5vdEhpZGRlbkZpeGVkUm93c1RvcCgpK3RoaXMuY291'@;
put 'bnROb3RIaWRkZW5GaXhlZFJvd3NCb3R0b20oKSxhPXRoaXMuY291bnROb3RIaWRkZW5GaXhlZENvbHVtbnNTdGFydCgpO3JldHVybiB0aGlzLmhvdC5jb3VudFJlbmRlcmVkUm93cygpPmwmJnRoaXMuaG90LmNvdW50UmVuZGVyZWRDb2xzKCk+YX1pbml0aWFsaXplV2Fsa29udGFibGUoKXtj'@;
put 'b25zdCBsPXthcmlhVGFnczp0aGlzLnNldHRpbmdzLmFyaWFUYWdzLHJ0bE1vZGU6dGhpcy5ob3QuaXNSdGwoKSxleHRlcm5hbFJvd0NhbGN1bGF0b3I6dGhpcy5ob3QuZ2V0UGx1Z2luKCJhdXRvUm93U2l6ZSIpJiZ0aGlzLmhvdC5nZXRQbHVnaW4oImF1dG9Sb3dTaXplIikuaXNFbmFibGVk'@;
put 'KCksdGFibGU6QXUoYzMsdGhpcyksaXNEYXRhVmlld0luc3RhbmNlOigpPT5jUCh0aGlzLmhvdCkscHJldmVudE92ZXJmbG93OigpPT50aGlzLnNldHRpbmdzLnByZXZlbnRPdmVyZmxvdyxwcmV2ZW50V2hlZWw6KCk9PnRoaXMuc2V0dGluZ3MucHJldmVudFdoZWVsLHZpZXdwb3J0Q29sdW1u'@;
put 'UmVuZGVyaW5nVGhyZXNob2xkOigpPT50aGlzLnNldHRpbmdzLnZpZXdwb3J0Q29sdW1uUmVuZGVyaW5nVGhyZXNob2xkLHZpZXdwb3J0Um93UmVuZGVyaW5nVGhyZXNob2xkOigpPT50aGlzLnNldHRpbmdzLnZpZXdwb3J0Um93UmVuZGVyaW5nVGhyZXNob2xkLGRhdGE6KGYsdik9PnRoaXMu'@;
put 'aG90LmdldERhdGFBdENlbGwoLi4udGhpcy50cmFuc2xhdGVGcm9tUmVuZGVyYWJsZVRvVmlzdWFsSW5kZXgoZix2KSksdG90YWxSb3dzOigpPT50aGlzLmNvdW50UmVuZGVyYWJsZVJvd3MoKSx0b3RhbENvbHVtbnM6KCk9PnRoaXMuY291bnRSZW5kZXJhYmxlQ29sdW1ucygpLGZpeGVkQ29s'@;
put 'dW1uc1N0YXJ0OigpPT50aGlzLmNvdW50Tm90SGlkZGVuRml4ZWRDb2x1bW5zU3RhcnQoKSxmaXhlZFJvd3NUb3A6KCk9PnRoaXMuY291bnROb3RIaWRkZW5GaXhlZFJvd3NUb3AoKSxmaXhlZFJvd3NCb3R0b206KCk9PnRoaXMuY291bnROb3RIaWRkZW5GaXhlZFJvd3NCb3R0b20oKSxzaG91'@;
put 'bGRSZW5kZXJJbmxpbmVTdGFydE92ZXJsYXk6KCk9PnRoaXMuc2V0dGluZ3MuZml4ZWRDb2x1bW5zU3RhcnQ+MHx8bC5yb3dIZWFkZXJzKCkubGVuZ3RoPjAsc2hvdWxkUmVuZGVyVG9wT3ZlcmxheTooKT0+dGhpcy5zZXR0aW5ncy5maXhlZFJvd3NUb3A+MHx8bC5jb2x1bW5IZWFkZXJzKCku'@;
put 'bGVuZ3RoPjAsc2hvdWxkUmVuZGVyQm90dG9tT3ZlcmxheTooKT0+dGhpcy5zZXR0aW5ncy5maXhlZFJvd3NCb3R0b20+MCxtaW5TcGFyZVJvd3M6KCk9PnRoaXMuc2V0dGluZ3MubWluU3BhcmVSb3dzLHJlbmRlckFsbFJvd3M6dGhpcy5zZXR0aW5ncy5yZW5kZXJBbGxSb3dzLHJlbmRlckFs'@;
put 'bENvbHVtbnM6dGhpcy5zZXR0aW5ncy5yZW5kZXJBbGxDb2x1bW5zLHJvd0hlYWRlcnM6KCk9Pntjb25zdCBmPVtdO3JldHVybiB0aGlzLmhvdC5oYXNSb3dIZWFkZXJzKCkmJmYucHVzaCgodixNKT0+e2NvbnN0IEQ9dj49MD90aGlzLmhvdC5yb3dJbmRleE1hcHBlci5nZXRWaXN1YWxGcm9t'@;
put 'UmVuZGVyYWJsZUluZGV4KHYpOnY7dGhpcy5hcHBlbmRSb3dIZWFkZXIoRCxNKX0pLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlckdldFJvd0hlYWRlclJlbmRlcmVycyIsZiksQmQodVAsdGhpcyxmLmxlbmd0aCksdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5hcmlhVGFncyYmQ18oR0UsdGhpcyxN'@;
put 'M2UpLmNhbGwodGhpcyk9PT10aGlzLmhvdC5jb3VudENvbHMoKSYmQ18oR0UsdGhpcyxTdHQpLmNhbGwodGhpcyxBdSh1UCx0aGlzKSksZn0sY29sdW1uSGVhZGVyczooKT0+e2NvbnN0IGY9W107cmV0dXJuIHRoaXMuaG90Lmhhc0NvbEhlYWRlcnMoKSYmZi5wdXNoKCh2LE0pPT57Y29uc3Qg'@;
put 'RD12Pj0wP3RoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgodik6djt0aGlzLmFwcGVuZENvbEhlYWRlcihELE0pfSksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyR2V0Q29sdW1uSGVhZGVyUmVuZGVyZXJzIixmKSxCZChJSyx0aGlzLGYubGVu'@;
put 'Z3RoKSxmfSxjb2x1bW5XaWR0aDpmPT57Y29uc3Qgdj10aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KGYpO3JldHVybiB0aGlzLmhvdC5nZXRDb2xXaWR0aChudWxsPT09dj9mOnYpfSxyb3dIZWlnaHQ6Zj0+e2NvbnN0IHY9dGhpcy5ob3Qu'@;
put 'cm93SW5kZXhNYXBwZXIuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleChmKTtyZXR1cm4gdGhpcy5ob3QuZ2V0Um93SGVpZ2h0KG51bGw9PT12P2Y6dil9LHJvd0hlaWdodEJ5T3ZlcmxheU5hbWU6KGYsdik9Pntjb25zdCBNPXRoaXMuaG90LnJvd0luZGV4TWFwcGVyLmdldFZpc3VhbEZy'@;
put 'b21SZW5kZXJhYmxlSW5kZXgoZiksRD1udWxsPT09TT9mOk07cmV0dXJuIHRoaXMuaG90LnJ1bkhvb2tzKCJtb2RpZnlSb3dIZWlnaHRCeU92ZXJsYXlOYW1lIix0aGlzLmhvdC5nZXRSb3dIZWlnaHQoRCksRCx2KX0sY2VsbFJlbmRlcmVyOihmLHYsTSk9Pntjb25zdFtELFpdPXRoaXMudHJh'@;
put 'bnNsYXRlRnJvbVJlbmRlcmFibGVUb1Zpc3VhbEluZGV4KGYsdikscmU9dGhpcy5ob3QucnVuSG9va3MoIm1vZGlmeUdldENlbGxDb29yZHMiLEQsWiwhMSwibWV0YSIpO2xldCBjZT1ELGJlPVo7QXJyYXkuaXNBcnJheShyZSkmJihbY2UsYmVdPXJlKTtjb25zdCBFZT10aGlzLmhvdC5nZXRD'@;
put 'ZWxsTWV0YShjZSxiZSksQmU9dGhpcy5ob3QuY29sVG9Qcm9wKGJlKTtsZXQgcWU9dGhpcy5ob3QuZ2V0RGF0YUF0Um93UHJvcChjZSxCZSk7dGhpcy5ob3QuaGFzSG9vaygiYmVmb3JlVmFsdWVSZW5kZXIiKSYmKHFlPXRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVWYWx1ZVJlbmRlciIscWUs'@;
put 'RWUpKSx0aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlUmVuZGVyZXIiLE0sRCxaLEJlLHFlLEVlKSx0aGlzLmhvdC5nZXRDZWxsUmVuZGVyZXIoRWUpKHRoaXMuaG90LE0sRCxaLEJlLHFlLEVlKSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJSZW5kZXJlciIsTSxELFosQmUscWUsRWUpfSxzZWxl'@;
put 'Y3Rpb25zOnRoaXMuaG90LnNlbGVjdGlvbi5oaWdobGlnaHQsaGlkZUJvcmRlck9uTW91c2VEb3duT3ZlcjooKT0+dGhpcy5zZXR0aW5ncy5mcmFnbWVudFNlbGVjdGlvbixvbldpbmRvd1Jlc2l6ZTooKT0+e3RoaXMuaG90JiYhdGhpcy5ob3QuaXNEZXN0cm95ZWQmJnRoaXMuaG90LnJlZnJl'@;
put 'c2hEaW1lbnNpb25zKCl9LG9uQ29udGFpbmVyRWxlbWVudFJlc2l6ZTooKT0+e3RoaXMuaG90JiYhdGhpcy5ob3QuaXNEZXN0cm95ZWQmJlU3KHRoaXMuaG90LnJvb3RFbGVtZW50KSYmdGhpcy5ob3QucmVmcmVzaERpbWVuc2lvbnMoKX0sb25DZWxsTW91c2VEb3duOihmLHYsTSxEKT0+e2Nv'@;
put 'bnN0IFo9dGhpcy50cmFuc2xhdGVGcm9tUmVuZGVyYWJsZVRvVmlzdWFsQ29vcmRzKHYpLHJlPXtyb3c6ITEsY29sdW1uOiExLGNlbGw6ITF9O3RoaXMuaG90Lmxpc3RlbigpLHRoaXMuYWN0aXZlV3Q9RCxCZChNZyx0aGlzLCEwKSxCZChTXyx0aGlzLHt4OmYuY2xpZW50WCx5OmYuY2xpZW50'@;
put 'WX0pLHRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVPbkNlbGxNb3VzZURvd24iLGYsWixNLHJlKSwhRm0oZikmJih3M2UoZix7Y29vcmRzOlosc2VsZWN0aW9uOnRoaXMuaG90LnNlbGVjdGlvbixjb250cm9sbGVyOnJlLGNlbGxDb29yZHNGYWN0b3J5OihjZSxiZSk9PnRoaXMuaG90Ll9jcmVh'@;
put 'dGVDZWxsQ29vcmRzKGNlLGJlKX0pLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlck9uQ2VsbE1vdXNlRG93biIsZixaLE0pLHRoaXMuYWN0aXZlV3Q9dGhpcy5fd3QpfSxvbkNlbGxDb250ZXh0TWVudTooZix2LE0sRCk9Pntjb25zdCBaPXRoaXMudHJhbnNsYXRlRnJvbVJlbmRlcmFibGVUb1Zp'@;
put 'c3VhbENvb3Jkcyh2KTt0aGlzLmFjdGl2ZVd0PUQsQmQoTWcsdGhpcywhMSksdGhpcy5ob3Quc2VsZWN0aW9uLmlzSW5Qcm9ncmVzcygpJiZ0aGlzLmhvdC5zZWxlY3Rpb24uZmluaXNoKCksdGhpcy5ob3QucnVuSG9va3MoImJlZm9yZU9uQ2VsbENvbnRleHRNZW51IixmLFosTSksIUZtKGYp'@;
put 'JiYodGhpcy5ob3QucnVuSG9va3MoImFmdGVyT25DZWxsQ29udGV4dE1lbnUiLGYsWixNKSx0aGlzLmFjdGl2ZVd0PXRoaXMuX3d0KX0sb25DZWxsTW91c2VPdXQ6KGYsdixNLEQpPT57Y29uc3QgWj10aGlzLnRyYW5zbGF0ZUZyb21SZW5kZXJhYmxlVG9WaXN1YWxDb29yZHModik7dGhpcy5h'@;
put 'Y3RpdmVXdD1ELHRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVPbkNlbGxNb3VzZU91dCIsZixaLE0pLCFGbShmKSYmKHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlck9uQ2VsbE1vdXNlT3V0IixmLFosTSksdGhpcy5hY3RpdmVXdD10aGlzLl93dCl9LG9uQ2VsbE1vdXNlT3ZlcjooZix2LE0sRCk9'@;
put 'Pntjb25zdCBaPXRoaXMudHJhbnNsYXRlRnJvbVJlbmRlcmFibGVUb1Zpc3VhbENvb3Jkcyh2KSxyZT17cm93OiExLGNvbHVtbjohMSxjZWxsOiExfTt0aGlzLmFjdGl2ZVd0PUQsdGhpcy5ob3QucnVuSG9va3MoImJlZm9yZU9uQ2VsbE1vdXNlT3ZlciIsZixaLE0scmUpLCFGbShmKSYmKEF1'@;
put 'KE1nLHRoaXMpJiYoIUF1KFNfLHRoaXMpfHxBdShTXyx0aGlzKS54IT09Zi5jbGllbnRYfHxBdShTXyx0aGlzKS55IT09Zi5jbGllbnRZKSYmdzNlKGYse2Nvb3JkczpaLHNlbGVjdGlvbjp0aGlzLmhvdC5zZWxlY3Rpb24sY29udHJvbGxlcjpyZSxjZWxsQ29vcmRzRmFjdG9yeTooY2UsYmUp'@;
put 'PT50aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhjZSxiZSl9KSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJPbkNlbGxNb3VzZU92ZXIiLGYsWixNKSx0aGlzLmFjdGl2ZVd0PXRoaXMuX3d0LEJkKFNfLHRoaXMsbnVsbCkpfSxvbkNlbGxNb3VzZVVwOihmLHYsTSxEKT0+e2NvbnN0IFo9dGhp'@;
put 'cy50cmFuc2xhdGVGcm9tUmVuZGVyYWJsZVRvVmlzdWFsQ29vcmRzKHYpO3RoaXMuYWN0aXZlV3Q9RCx0aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlT25DZWxsTW91c2VVcCIsZixaLE0pLCFGbShmKSYmIXRoaXMuaG90LmlzRGVzdHJveWVkJiYodGhpcy5ob3QucnVuSG9va3MoImFmdGVyT25D'@;
put 'ZWxsTW91c2VVcCIsZixaLE0pLHRoaXMuYWN0aXZlV3Q9dGhpcy5fd3QpfSxvbkNlbGxDb3JuZXJNb3VzZURvd246Zj0+e2YucHJldmVudERlZmF1bHQoKSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJPbkNlbGxDb3JuZXJNb3VzZURvd24iLGYpfSxvbkNlbGxDb3JuZXJEYmxDbGljazpmPT57'@;
put 'Zi5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlck9uQ2VsbENvcm5lckRibENsaWNrIixmKX0sYmVmb3JlRHJhdzooZix2KT0+dGhpcy5iZWZvcmVSZW5kZXIoZix2KSxvbkRyYXc6Zj0+dGhpcy5hZnRlclJlbmRlcihmKSxvbkJlZm9yZVZpZXdwb3J0U2Nyb2xsVmVy'@;
put 'dGljYWxseTooZix2KT0+e2NvbnN0IE09dGhpcy5ob3Qucm93SW5kZXhNYXBwZXIsRD1mPDA7bGV0IFo9ZjtyZXR1cm4gRHx8KFo9TS5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KGYpLG51bGwhPT1aKT8oWj10aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlVmlld3BvcnRTY3JvbGxWZXJ0'@;
put 'aWNhbGx5IixaLHYpLHRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVWaWV3cG9ydFNjcm9sbCIpLEQ/WjpNLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoWikpOmZ9LG9uQmVmb3JlVmlld3BvcnRTY3JvbGxIb3Jpem9udGFsbHk6KGYsdik9Pntjb25zdCBNPXRoaXMuaG90LmNvbHVtbklu'@;
put 'ZGV4TWFwcGVyLEQ9ZjwwO2xldCBaPWY7cmV0dXJuIER8fChaPU0uZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleChmKSxudWxsIT09Wik/KFo9dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZVZpZXdwb3J0U2Nyb2xsSG9yaXpvbnRhbGx5IixaLHYpLHRoaXMuaG90LnJ1bkhvb2tzKCJiZWZv'@;
put 'cmVWaWV3cG9ydFNjcm9sbCIpLEQ/WjpNLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoWikpOmZ9LG9uU2Nyb2xsVmVydGljYWxseTooKT0+e3RoaXMuaG90LnJ1bkhvb2tzKCJhZnRlclNjcm9sbFZlcnRpY2FsbHkiKSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJTY3JvbGwiKX0sb25T'@;
put 'Y3JvbGxIb3Jpem9udGFsbHk6KCk9Pnt0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJTY3JvbGxIb3Jpem9udGFsbHkiKSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJTY3JvbGwiKX0sb25CZWZvcmVSZW1vdmVDZWxsQ2xhc3NOYW1lczooKT0+dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZVJlbW92'@;
put 'ZUNlbGxDbGFzc05hbWVzIiksb25CZWZvcmVIaWdobGlnaHRpbmdSb3dIZWFkZXI6KGYsdixNKT0+e2NvbnN0IEQ9dGhpcy5ob3Qucm93SW5kZXhNYXBwZXIsWj1mPDA7bGV0IHJlPWY7Wnx8KHJlPUQuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleChmKSk7Y29uc3QgY2U9dGhpcy5ob3Qu'@;
put 'cnVuSG9va3MoImJlZm9yZUhpZ2hsaWdodGluZ1Jvd0hlYWRlciIscmUsdixNKTtyZXR1cm4gWj9jZTpELmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoRC5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoY2UsMSkpfSxvbkJlZm9yZUhpZ2hsaWdodGluZ0NvbHVtbkhlYWRlcjooZix2LE0p'@;
put 'PT57Y29uc3QgRD10aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlcixaPWY8MDtsZXQgcmU9ZjtafHwocmU9RC5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KGYpKTtjb25zdCBjZT10aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlSGlnaGxpZ2h0aW5nQ29sdW1uSGVhZGVyIixyZSx2LE0pO3Jl'@;
put 'dHVybiBaP2NlOkQuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChELmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChjZSwxKSl9LG9uQWZ0ZXJEcmF3U2VsZWN0aW9uOihmLHYsTSk9PntsZXQgRDtjb25zdFtaLHJlXT10aGlzLnRyYW5zbGF0ZUZyb21SZW5kZXJhYmxlVG9WaXN1YWxJbmRl'@;
put 'eChmLHYpLGNlPXRoaXMuaG90LnNlbGVjdGlvbi5nZXRTZWxlY3RlZFJhbmdlKCk7aWYoY2Uuc2l6ZSgpPjApe2NvbnN0IEVlPWNlLnBlZWtCeUluZGV4KE0/PzApO0Q9W0VlLmZyb20ucm93LEVlLmZyb20uY29sLEVlLnRvLnJvdyxFZS50by5jb2xdfXJldHVybiB0aGlzLmhvdC5ydW5Ib29r'@;
put 'cygiYWZ0ZXJEcmF3U2VsZWN0aW9uIixaLHJlLEQsTSl9LG9uQmVmb3JlRHJhd0JvcmRlcnM6KGYsdik9Pntjb25zdFtNLEQsWixyZV09ZixjZT1bdGhpcy5ob3Qucm93SW5kZXhNYXBwZXIuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleChNKSx0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBl'@;
put 'ci5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KEQpLHRoaXMuaG90LnJvd0luZGV4TWFwcGVyLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgoWiksdGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleChyZSldO3JldHVybiB0aGlzLmhv'@;
put 'dC5ydW5Ib29rcygiYmVmb3JlRHJhd0JvcmRlcnMiLGNlLHYpfSxvbkJlZm9yZVRvdWNoU2Nyb2xsOigpPT50aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlVG91Y2hTY3JvbGwiKSxvbkFmdGVyTW9tZW50dW1TY3JvbGw6KCk9PnRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlck1vbWVudHVtU2Nyb2xs'@;
put 'Iiksb25Nb2RpZnlSb3dIZWFkZXJXaWR0aDpmPT50aGlzLmhvdC5ydW5Ib29rcygibW9kaWZ5Um93SGVhZGVyV2lkdGgiLGYpLG9uTW9kaWZ5R2V0Q2VsbENvb3JkczooZix2LE0sRCk9Pntjb25zdCBaPXRoaXMuaG90LnJvd0luZGV4TWFwcGVyLHJlPXRoaXMuaG90LmNvbHVtbkluZGV4TWFw'@;
put 'cGVyLGNlPXY+PTA/cmUuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleCh2KTp2LGJlPWY+PTA/Wi5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KGYpOmYsRWU9dGhpcy5ob3QucnVuSG9va3MoIm1vZGlmeUdldENlbGxDb29yZHMiLGJlLGNlLE0sRCk7aWYoQXJyYXkuaXNBcnJheShF'@;
put 'ZSkpe2NvbnN0W0JlLHFlLHJ0LHB0XT1FZTtyZXR1cm5bQmU+PTA/Wi5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KFouZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KEJlLDEpKTpCZSxxZT49MD9yZS5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KHJlLmdldE5lYXJlc3ROb3RIaWRk'@;
put 'ZW5JbmRleChxZSwxKSk6cWUscnQ+PTA/Wi5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KFouZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KHJ0LC0xKSk6cnQscHQ+PTA/cmUuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChyZS5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgocHQsLTEp'@;
put 'KTpwdF19fSxvbk1vZGlmeUdldENvb3Jkc0VsZW1lbnQ6KGYsdik9Pntjb25zdCBNPXRoaXMuaG90LnJvd0luZGV4TWFwcGVyLEQ9dGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIsWj12Pj0wP0QuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleCh2KTp2LHJlPWY+PTA/TS5nZXRWaXN1YWxG'@;
put 'cm9tUmVuZGVyYWJsZUluZGV4KGYpOmYsY2U9dGhpcy5ob3QucnVuSG9va3MoIm1vZGlmeUdldENvb3Jkc0VsZW1lbnQiLHJlLFopO2lmKEFycmF5LmlzQXJyYXkoY2UpKXtjb25zdFtiZSxFZV09Y2U7cmV0dXJuW2JlPj0wP00uZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChNLmdldE5l'@;
put 'YXJlc3ROb3RIaWRkZW5JbmRleChiZSwxKSk6YmUsRWU+PTA/RC5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KEQuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KEVlLDEpKTpFZV19fSx2aWV3cG9ydFJvd0NhbGN1bGF0b3JPdmVycmlkZTpmPT57bGV0IHY9dGhpcy5zZXR0aW5ncy52aWV3'@;
put 'cG9ydFJvd1JlbmRlcmluZ09mZnNldDtpZigiYXV0byI9PT12JiZ0aGlzLnNldHRpbmdzLmZpeGVkUm93c1RvcCYmKHY9MTApLHY+MHx8ImF1dG8iPT09dil7Y29uc3QgTT10aGlzLmNvdW50UmVuZGVyYWJsZVJvd3MoKSxEPWYuc3RhcnRSb3csWj1mLmVuZFJvdztpZigibnVtYmVyIj09dHlw'@;
put 'ZW9mIHYpZi5zdGFydFJvdz1NYXRoLm1heChELXYsMCksZi5lbmRSb3c9TWF0aC5taW4oWit2LE0tMSk7ZWxzZSBpZigiYXV0byI9PT12KXtjb25zdCByZT1NYXRoLm1heCgxLE1hdGguY2VpbChaL00qMTIpKTtmLnN0YXJ0Um93PU1hdGgubWF4KEQtcmUsMCksZi5lbmRSb3c9TWF0aC5taW4o'@;
put 'WityZSxNLTEpfX10aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJWaWV3cG9ydFJvd0NhbGN1bGF0b3JPdmVycmlkZSIsZil9LHZpZXdwb3J0Q29sdW1uQ2FsY3VsYXRvck92ZXJyaWRlOmY9PntsZXQgdj10aGlzLnNldHRpbmdzLnZpZXdwb3J0Q29sdW1uUmVuZGVyaW5nT2Zmc2V0O2lmKCJhdXRv'@;
put 'Ij09PXYmJnRoaXMuc2V0dGluZ3MuZml4ZWRDb2x1bW5zU3RhcnQmJih2PTEwKSx2PjB8fCJhdXRvIj09PXYpe2NvbnN0IE09dGhpcy5jb3VudFJlbmRlcmFibGVDb2x1bW5zKCksRD1mLnN0YXJ0Q29sdW1uLFo9Zi5lbmRDb2x1bW47aWYoIm51bWJlciI9PXR5cGVvZiB2JiYoZi5zdGFydENv'@;
put 'bHVtbj1NYXRoLm1heChELXYsMCksZi5lbmRDb2x1bW49TWF0aC5taW4oWit2LE0tMSkpLCJhdXRvIj09PXYpe2NvbnN0IHJlPU1hdGgubWF4KDEsTWF0aC5jZWlsKFovTSo2KSk7Zi5zdGFydENvbHVtbj1NYXRoLm1heChELXJlLDApLGYuZW5kQ29sdW1uPU1hdGgubWluKForcmUsTS0xKX19'@;
put 'dGhpcy5ob3QucnVuSG9va3MoImFmdGVyVmlld3BvcnRDb2x1bW5DYWxjdWxhdG9yT3ZlcnJpZGUiLGYpfSxyb3dIZWFkZXJXaWR0aDooKT0+dGhpcy5zZXR0aW5ncy5yb3dIZWFkZXJXaWR0aCxjb2x1bW5IZWFkZXJIZWlnaHQ6KCk9Pntjb25zdCBmPXRoaXMuaG90LnJ1bkhvb2tzKCJtb2Rp'@;
put 'ZnlDb2x1bW5IZWFkZXJIZWlnaHQiKTtyZXR1cm4gdGhpcy5zZXR0aW5ncy5jb2x1bW5IZWFkZXJIZWlnaHR8fGZ9fTt0aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlSW5pdFdhbGtvbnRhYmxlIixsKSx0aGlzLl93dD1uZXcga0sobCksdGhpcy5hY3RpdmVXdD10aGlzLl93dDtjb25zdCBhPXRo'@;
put 'aXMuX3d0Lnd0VGFibGUuc3ByZWFkZXIse3dpZHRoOmQsaGVpZ2h0Omh9PXRoaXMuaG90LnJvb3RFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3RoaXMuc2V0TGFzdFNpemUoZCxoKSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGEsIm1vdXNlZG93biIsZj0+e2Yu'@;
put 'dGFyZ2V0PT09YSYmMz09PWYud2hpY2gmJmYuc3RvcFByb3BhZ2F0aW9uKCl9KSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGEsImNvbnRleHRtZW51IixmPT57Zi50YXJnZXQ9PT1hJiYzPT09Zi53aGljaCYmZi5zdG9wUHJvcGFnYXRpb24oKX0pLHRoaXMuZXZlbnRNYW5h'@;
put 'Z2VyLmFkZEV2ZW50TGlzdGVuZXIodGhpcy5ob3Qucm9vdERvY3VtZW50LmRvY3VtZW50RWxlbWVudCwiY2xpY2siLCgpPT57dGhpcy5zZXR0aW5ncy5vYnNlcnZlRE9NVmlzaWJpbGl0eSYmdGhpcy5fd3QuZHJhd0ludGVycnVwdGVkJiZ0aGlzLmhvdC5yZW5kZXIoKX0pfWlzVGV4dFNlbGVj'@;
put 'dGlvbkFsbG93ZWQobCl7aWYoU0UobCkpcmV0dXJuITA7Y29uc3QgYT1MbShsLHRoaXMuX3d0Lnd0VGFibGUuc3ByZWFkZXIpO3JldHVybiEhKCEwPT09dGhpcy5zZXR0aW5ncy5mcmFnbWVudFNlbGVjdGlvbiYmYXx8ImNlbGwiPT09dGhpcy5zZXR0aW5ncy5mcmFnbWVudFNlbGVjdGlvbiYm'@;
put 'dGhpcy5pc1NlbGVjdGVkT25seUNlbGwoKSYmYXx8IXRoaXMuc2V0dGluZ3MuZnJhZ21lbnRTZWxlY3Rpb24mJnRoaXMuaXNDZWxsRWRpdGVkKCkmJnRoaXMuaXNTZWxlY3RlZE9ubHlDZWxsKCkpfWlzTW91c2VEb3duKCl7cmV0dXJuIEF1KE1nLHRoaXMpfWlzU2VsZWN0ZWRPbmx5Q2VsbCgp'@;
put 'e3ZhciBsLGE7cmV0dXJuIG51bGwhPT0obD1udWxsPT09KGE9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSl8fHZvaWQgMD09PWE/dm9pZCAwOmEuaXNTaW5nbGVDZWxsKCkpJiZ2b2lkIDAhPT1sJiZsfWlzQ2VsbEVkaXRlZCgpe2NvbnN0IGw9dGhpcy5ob3QuZ2V0QWN0aXZlRWRp'@;
put 'dG9yKCk7cmV0dXJuIGwmJmwuaXNPcGVuZWQoKX1iZWZvcmVSZW5kZXIobCxhKXtsJiZ0aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlVmlld1JlbmRlciIsdGhpcy5ob3QuZm9yY2VGdWxsUmVuZGVyLGEpfWFmdGVyUmVuZGVyKGwpe2wmJnRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlclZpZXdSZW5k'@;
put 'ZXIiLHRoaXMuaG90LmZvcmNlRnVsbFJlbmRlcil9YXBwZW5kUm93SGVhZGVyKGwsYSl7aWYoYS5maXJzdENoaWxkKXtjb25zdCBkPWEuZmlyc3RDaGlsZDtpZighcG8oZCwicmVsYXRpdmUiKSlyZXR1cm4geHAoYSksdm9pZCB0aGlzLmFwcGVuZFJvd0hlYWRlcihsLGEpO3RoaXMudXBkYXRl'@;
put 'Q2VsbEhlYWRlcihkLnF1ZXJ5U2VsZWN0b3IoIi5yb3dIZWFkZXIiKSxsLHRoaXMuaG90LmdldFJvd0hlYWRlcil9ZWxzZXtjb25zdHtyb290RG9jdW1lbnQ6ZCxnZXRSb3dIZWFkZXI6aH09dGhpcy5ob3QsZj1kLmNyZWF0ZUVsZW1lbnQoImRpdiIpLHY9ZC5jcmVhdGVFbGVtZW50KCJzcGFu'@;
put 'Iik7Zi5jbGFzc05hbWU9InJlbGF0aXZlIix2LmNsYXNzTmFtZT0icm93SGVhZGVyIix0aGlzLnVwZGF0ZUNlbGxIZWFkZXIodixsLGgpLGYuYXBwZW5kQ2hpbGQodiksYS5hcHBlbmRDaGlsZChmKX10aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJHZXRSb3dIZWFkZXIiLGwsYSl9YXBwZW5kQ29s'@;
put 'SGVhZGVyKGwsYSl7bGV0IGQ9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOnRoaXMuaG90LmdldENvbEhlYWRlcixoPWFyZ3VtZW50cy5sZW5ndGg+MyYmdm9pZCAwIT09YXJndW1lbnRzWzNdP2FyZ3VtZW50c1szXTowO2NvbnN0IGY9KCk9'@;
put 'Pntjb25zdCB2PWw+PTA/dGhpcy5ob3QuZ2V0Q29sdW1uTWV0YShsKS5oZWFkZXJDbGFzc05hbWU6bnVsbDtyZXR1cm4gdj92LnNwbGl0KCIgIik6W119O2lmKGEuZmlyc3RDaGlsZCl7Y29uc3Qgdj1hLmZpcnN0Q2hpbGQ7cG8odiwicmVsYXRpdmUiKT8odGhpcy51cGRhdGVDZWxsSGVhZGVy'@;
put 'KHYucXVlcnlTZWxlY3RvcigiLmNvbEhlYWRlciIpLGwsZCxoKSx2LmNsYXNzTmFtZT0iIixUaSh2LFsicmVsYXRpdmUiLC4uLmYoKV0pKTooeHAoYSksdGhpcy5hcHBlbmRDb2xIZWFkZXIobCxhLGQsaCkpfWVsc2V7Y29uc3R7cm9vdERvY3VtZW50OnZ9PXRoaXMuaG90LE09di5jcmVhdGVF'@;
put 'bGVtZW50KCJkaXYiKSxEPXYuY3JlYXRlRWxlbWVudCgic3BhbiIpLFo9ZigpO00uY2xhc3NMaXN0LmFkZCgicmVsYXRpdmUiLC4uLlopLEQuY2xhc3NOYW1lPSJjb2xIZWFkZXIiLHRoaXMuc2V0dGluZ3MuYXJpYVRhZ3MmJih2byhNLCJyb2xlIiwicHJlc2VudGF0aW9uIiksdm8oRCwicm9s'@;
put 'ZSIsInByZXNlbnRhdGlvbiIpKSx0aGlzLnVwZGF0ZUNlbGxIZWFkZXIoRCxsLGQsaCksTS5hcHBlbmRDaGlsZChEKSxhLmFwcGVuZENoaWxkKE0pfXRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlckdldENvbEhlYWRlciIsbCxhLGgpfXVwZGF0ZUNlbGxIZWFkZXIobCxhLGQpe2xldCBoPWFyZ3Vt'@;
put 'ZW50cy5sZW5ndGg+MyYmdm9pZCAwIT09YXJndW1lbnRzWzNdP2FyZ3VtZW50c1szXTowLGY9YTtjb25zdCB2PXRoaXMuX3d0Lnd0T3ZlcmxheXMuZ2V0UGFyZW50T3ZlcmxheShsKXx8dGhpcy5fd3Q7bC5wYXJlbnROb2RlJiYocG8obCwiY29sSGVhZGVyIik/Zj12Lnd0VGFibGUuY29sdW1u'@;
put 'RmlsdGVyLnNvdXJjZVRvUmVuZGVyZWQoYSk6cG8obCwicm93SGVhZGVyIikmJihmPXYud3RUYWJsZS5yb3dGaWx0ZXIuc291cmNlVG9SZW5kZXJlZChhKSkpLGY+LTE/ejcobCxkKGEsaCkpOihQbShsLCJceGEwIiksVGkobCwiY29ybmVySGVhZGVyIikpfW1heGltdW1WaXNpYmxlRWxlbWVu'@;
put 'dFdpZHRoKGwpe2NvbnN0IGQ9dGhpcy5fd3Qud3RWaWV3cG9ydC5nZXRXb3Jrc3BhY2VXaWR0aCgpLWw7cmV0dXJuIGQ+MD9kOjB9bWF4aW11bVZpc2libGVFbGVtZW50SGVpZ2h0KGwpe2NvbnN0IGQ9dGhpcy5fd3Qud3RWaWV3cG9ydC5nZXRXb3Jrc3BhY2VIZWlnaHQoKS1sO3JldHVybiBk'@;
put 'PjA/ZDowfXNldExhc3RTaXplKGwsYSl7QmQoUkssdGhpcyxsKSxCZChMSyx0aGlzLGEpfWdldExhc3RTaXplKCl7cmV0dXJue3dpZHRoOkF1KFJLLHRoaXMpLGhlaWdodDpBdShMSyx0aGlzKX19Z2V0Rmlyc3RSZW5kZXJlZFZpc2libGVSb3coKXtpZighdGhpcy5fd3Qud3RWaWV3cG9ydC5y'@;
put 'b3dzUmVuZGVyQ2FsY3VsYXRvcilyZXR1cm4gbnVsbDtjb25zdCBsPXRoaXMuaG90LnJvd0luZGV4TWFwcGVyLGE9bC5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KHRoaXMuX3d0Lnd0VGFibGUuZ2V0Rmlyc3RSZW5kZXJlZFJvdygpKTtyZXR1cm4gbC5nZXROZWFyZXN0Tm90SGlkZGVu'@;
put 'SW5kZXgoYT8/MCwxKX1nZXRMYXN0UmVuZGVyZWRWaXNpYmxlUm93KCl7aWYoIXRoaXMuX3d0Lnd0Vmlld3BvcnQucm93c1JlbmRlckNhbGN1bGF0b3IpcmV0dXJuIG51bGw7Y29uc3QgbD10aGlzLmhvdC5yb3dJbmRleE1hcHBlcixhPWwuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleCh0'@;
put 'aGlzLl93dC53dFRhYmxlLmdldExhc3RSZW5kZXJlZFJvdygpKTtyZXR1cm4gbC5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoYT8/dGhpcy5ob3QuY291bnRSb3dzKCktMSwtMSl9Z2V0Rmlyc3RSZW5kZXJlZFZpc2libGVDb2x1bW4oKXtpZighdGhpcy5fd3Qud3RWaWV3cG9ydC5jb2x1bW5z'@;
put 'UmVuZGVyQ2FsY3VsYXRvcilyZXR1cm4gbnVsbDtjb25zdCBsPXRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLGE9bC5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KHRoaXMuX3d0Lnd0VGFibGUuZ2V0Rmlyc3RSZW5kZXJlZENvbHVtbigpKTtyZXR1cm4gbC5nZXROZWFyZXN0Tm90SGlk'@;
put 'ZGVuSW5kZXgoYT8/MCwxKX1nZXRMYXN0UmVuZGVyZWRWaXNpYmxlQ29sdW1uKCl7aWYoIXRoaXMuX3d0Lnd0Vmlld3BvcnQuY29sdW1uc1JlbmRlckNhbGN1bGF0b3IpcmV0dXJuIG51bGw7Y29uc3QgbD10aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlcixhPWwuZ2V0VmlzdWFsRnJvbVJlbmRl'@;
put 'cmFibGVJbmRleCh0aGlzLl93dC53dFRhYmxlLmdldExhc3RSZW5kZXJlZENvbHVtbigpKTtyZXR1cm4gbC5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoYT8/dGhpcy5ob3QuY291bnRDb2xzKCktMSwtMSl9Z2V0Rmlyc3RGdWxseVZpc2libGVSb3coKXtyZXR1cm4gdGhpcy5ob3Qucm93SW5k'@;
put 'ZXhNYXBwZXIuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleCh0aGlzLl93dC53dFNjcm9sbC5nZXRGaXJzdFZpc2libGVSb3coKSl9Z2V0TGFzdEZ1bGx5VmlzaWJsZVJvdygpe3JldHVybiB0aGlzLmhvdC5yb3dJbmRleE1hcHBlci5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KHRo'@;
put 'aXMuX3d0Lnd0U2Nyb2xsLmdldExhc3RWaXNpYmxlUm93KCkpfWdldEZpcnN0RnVsbHlWaXNpYmxlQ29sdW1uKCl7cmV0dXJuIHRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgodGhpcy5fd3Qud3RTY3JvbGwuZ2V0Rmlyc3RWaXNpYmxlQ29s'@;
put 'dW1uKCkpfWdldExhc3RGdWxseVZpc2libGVDb2x1bW4oKXtyZXR1cm4gdGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleCh0aGlzLl93dC53dFNjcm9sbC5nZXRMYXN0VmlzaWJsZUNvbHVtbigpKX1nZXRGaXJzdFBhcnRpYWxseVZpc2libGVS'@;
put 'b3coKXtyZXR1cm4gdGhpcy5ob3Qucm93SW5kZXhNYXBwZXIuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleCh0aGlzLl93dC53dFNjcm9sbC5nZXRGaXJzdFBhcnRpYWxseVZpc2libGVSb3coKSl9Z2V0TGFzdFBhcnRpYWxseVZpc2libGVSb3coKXtyZXR1cm4gdGhpcy5ob3Qucm93SW5k'@;
put 'ZXhNYXBwZXIuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleCh0aGlzLl93dC53dFNjcm9sbC5nZXRMYXN0UGFydGlhbGx5VmlzaWJsZVJvdygpKX1nZXRGaXJzdFBhcnRpYWxseVZpc2libGVDb2x1bW4oKXtyZXR1cm4gdGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIuZ2V0VmlzdWFsRnJv'@;
put 'bVJlbmRlcmFibGVJbmRleCh0aGlzLl93dC53dFNjcm9sbC5nZXRGaXJzdFBhcnRpYWxseVZpc2libGVDb2x1bW4oKSl9Z2V0TGFzdFBhcnRpYWxseVZpc2libGVDb2x1bW4oKXtyZXR1cm4gdGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleCh0'@;
put 'aGlzLl93dC53dFNjcm9sbC5nZXRMYXN0UGFydGlhbGx5VmlzaWJsZUNvbHVtbigpKX1nZXRDb2x1bW5IZWFkZXJzQ291bnQoKXtyZXR1cm4gQXUoSUssdGhpcyl9Z2V0Um93SGVhZGVyc0NvdW50KCl7cmV0dXJuIEF1KHVQLHRoaXMpfWdldFZpZXdwb3J0V2lkdGgoKXtyZXR1cm4gdGhpcy5f'@;
put 'd3Qud3RWaWV3cG9ydC5nZXRWaWV3cG9ydFdpZHRoKCl9Z2V0V29ya3NwYWNlV2lkdGgoKXtyZXR1cm4gdGhpcy5fd3Qud3RWaWV3cG9ydC5nZXRXb3Jrc3BhY2VXaWR0aCgpfWdldFZpZXdwb3J0SGVpZ2h0KCl7cmV0dXJuIHRoaXMuX3d0Lnd0Vmlld3BvcnQuZ2V0Vmlld3BvcnRIZWlnaHQo'@;
put 'KX1nZXRXb3Jrc3BhY2VIZWlnaHQoKXtyZXR1cm4gdGhpcy5fd3Qud3RWaWV3cG9ydC5nZXRXb3Jrc3BhY2VIZWlnaHQoKX1nZXRFbGVtZW50T3ZlcmxheU5hbWUobCl7dmFyIGE7cmV0dXJuKG51bGwhPT0oYT10aGlzLl93dC53dE92ZXJsYXlzLmdldFBhcmVudE92ZXJsYXkobCkpJiZ2b2lk'@;
put 'IDAhPT1hP2E6dGhpcy5fd3QpLnd0VGFibGUubmFtZX1nZXRPdmVybGF5QnlOYW1lKGwpe3JldHVybiB0aGlzLl93dC5nZXRPdmVybGF5QnlOYW1lKGwpfWdldEFjdGl2ZU92ZXJsYXlOYW1lKCl7cmV0dXJuIHRoaXMuX3d0LmFjdGl2ZU92ZXJsYXlOYW1lfWlzVmlzaWJsZSgpe3JldHVybiB0'@;
put 'aGlzLl93dC53dFRhYmxlLmlzVmlzaWJsZSgpfWhhc1ZlcnRpY2FsU2Nyb2xsKCl7cmV0dXJuIHRoaXMuX3d0Lnd0Vmlld3BvcnQuaGFzVmVydGljYWxTY3JvbGwoKX1oYXNIb3Jpem9udGFsU2Nyb2xsKCl7cmV0dXJuIHRoaXMuX3d0Lnd0Vmlld3BvcnQuaGFzSG9yaXpvbnRhbFNjcm9sbCgp'@;
put 'fWdldFRhYmxlV2lkdGgoKXtyZXR1cm4gdGhpcy5fd3Qud3RUYWJsZS5nZXRXaWR0aCgpfWdldFRhYmxlSGVpZ2h0KCl7cmV0dXJuIHRoaXMuX3d0Lnd0VGFibGUuZ2V0SGVpZ2h0KCl9Z2V0VGFibGVPZmZzZXQoKXtyZXR1cm4gdGhpcy5fd3Qud3RWaWV3cG9ydC5nZXRXb3Jrc3BhY2VPZmZz'@;
put 'ZXQoKX1nZXRSb3dIZWFkZXJXaWR0aCgpe3JldHVybiB0aGlzLl93dC53dFZpZXdwb3J0LmdldFJvd0hlYWRlcldpZHRoKCl9Z2V0Q29sdW1uSGVhZGVySGVpZ2h0KCl7cmV0dXJuIHRoaXMuX3d0Lnd0Vmlld3BvcnQuZ2V0Q29sdW1uSGVhZGVySGVpZ2h0KCl9aXNWZXJ0aWNhbGx5U2Nyb2xs'@;
put 'YWJsZUJ5V2luZG93KCl7cmV0dXJuIHRoaXMuX3d0Lnd0Vmlld3BvcnQuaXNWZXJ0aWNhbGx5U2Nyb2xsYWJsZUJ5V2luZG93KCl9aXNIb3Jpem9udGFsbHlTY3JvbGxhYmxlQnlXaW5kb3coKXtyZXR1cm4gdGhpcy5fd3Qud3RWaWV3cG9ydC5pc0hvcml6b250YWxseVNjcm9sbGFibGVCeVdp'@;
put 'bmRvdygpfWRlc3Ryb3koKXt0aGlzLl93dC5kZXN0cm95KCksdGhpcy5ldmVudE1hbmFnZXIuZGVzdHJveSgpfX07eSgxMzkwOCk7Y29uc3QgeDNlPSJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWiIsT0s9eDNlLmxlbmd0aDtmdW5jdGlvbiBoUChjKXtsZXQgZCxsPWMrMSxhPSIiO2Zvcig7'@;
put 'bD4wOylkPShsLTEpJU9LLGE9U3RyaW5nLmZyb21DaGFyQ29kZSg2NStkKSthLGw9cGFyc2VJbnQoKGwtZCkvT0ssMTApO3JldHVybiBhfWZ1bmN0aW9uIEV0dChjKXtsZXQgbD0wO2lmKGMpZm9yKGxldCBhPTAsZD1jLmxlbmd0aC0xO2E8Yy5sZW5ndGg7YSs9MSxkLT0xKWwrPU9LKipkKih4'@;
put 'M2UuaW5kZXhPZihjW2FdKSsxKTtyZXR1cm4gbC09MSxsfWZ1bmN0aW9uIFR0dCgpe2xldCBjPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXToxMDAsbD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVu'@;
put 'dHNbMV06NDtjb25zdCBhPVtdO2xldCBkLGg7Zm9yKGQ9MDtkPGM7ZCsrKXtjb25zdCBmPVtdO2ZvcihoPTA7aDxsO2grKylmLnB1c2goaFAoaCkrKGQrMSkpO2EucHVzaChmKX1yZXR1cm4gYX1mdW5jdGlvbiBBdHQoKXtsZXQgYz1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3Vt'@;
put 'ZW50c1swXT9hcmd1bWVudHNbMF06MTAwLGw9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOjQ7Y29uc3QgYT1bXTtsZXQgZCxoO2ZvcihkPTA7ZDxjO2QrKyl7Y29uc3QgZj17fTtmb3IoaD0wO2g8bDtoKyspZltgcHJvcCR7aH1gXT1oUCho'@;
put 'KSsoZCsxKTthLnB1c2goZil9cmV0dXJuIGF9ZnVuY3Rpb24ga3R0KGMsbCl7Y29uc3QgYT1bXTtsZXQgZDtmb3IobGV0IGg9MDtoPGM7aCsrKXtkPVtdO2ZvcihsZXQgZj0wO2Y8bDtmKyspZC5wdXNoKCIiKTthLnB1c2goZCl9cmV0dXJuIGF9ZnVuY3Rpb24gUEsoYyl7bGV0IGw9YXJndW1l'@;
put 'bnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOjAsYT1jO2NvbnN0IGQ9W107cmV0dXJuKCFBcnJheS5pc0FycmF5KGMpfHwhQXJyYXkuaXNBcnJheShjWzBdKSkmJihhPVtjXSksYS5mb3JFYWNoKChoLGYpPT57QXJyYXkuaXNBcnJheShoKT9oLmZvckVh'@;
put 'Y2goKHYsTSk9PntkLnB1c2goW2YrbCxNLHZdKX0pOk9iamVjdC5rZXlzKGgpLmZvckVhY2godj0+e2QucHVzaChbZitsLHYsaFt2XV0pfSl9KSxkfWZ1bmN0aW9uIEZLKGMpe2xldCBsPTA7cmV0dXJuIEFycmF5LmlzQXJyYXkoYykmJihjWzBdJiZBcnJheS5pc0FycmF5KGNbMF0pP2w9Y1sw'@;
put 'XS5sZW5ndGg6Y1swXSYmcW8oY1swXSkmJihsPUJPKGNbMF0pKSksbH1mdW5jdGlvbiBFM2UoYyl7cmV0dXJuISEoQXJyYXkuaXNBcnJheShjKSYmYy5sZW5ndGgmJmMuZXZlcnkobD0+QXJyYXkuaXNBcnJheShsKSkpfWZ1bmN0aW9uIFQzZShjKXtyZXR1cm4hIShBcnJheS5pc0FycmF5KGMp'@;
put 'JiZjLmxlbmd0aCYmYy5ldmVyeShsPT4ib2JqZWN0Ij09dHlwZW9mIGwmJiFBcnJheS5pc0FycmF5KGwpJiZudWxsIT09bCkpfWZ1bmN0aW9uICRFKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBEdHQoYyl7dmFyIGw9ZnVuY3Rpb24gSXR0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwh'@;
put 'YylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHBy'@;
put 'aW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1'@;
put 'cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jb25zdCBMdHQ9Y2xhc3MgUnR0e2NvbnN0cnVjdG9yKGwpe2xldCBhPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpbXTskRSh0aGlzLCJob3QiLHZvaWQgMCksJEUodGhpcywiZGF0'@;
put 'YSIsdm9pZCAwKSwkRSh0aGlzLCJkYXRhVHlwZSIsImFycmF5IiksJEUodGhpcywiY29sVG9Qcm9wIiwoKT0+e30pLCRFKHRoaXMsInByb3BUb0NvbCIsKCk9Pnt9KSx0aGlzLmhvdD1sLHRoaXMuZGF0YT1hfW1vZGlmeVJvd0RhdGEobCl7bGV0IGE7cmV0dXJuIHRoaXMuaG90Lmhhc0hvb2so'@;
put 'Im1vZGlmeVJvd0RhdGEiKSYmKGE9dGhpcy5ob3QucnVuSG9va3MoIm1vZGlmeVJvd0RhdGEiLGwpKSx2b2lkIDA9PT1hfHxOdW1iZXIuaXNJbnRlZ2VyKGEpP3RoaXMuZGF0YVtsXTphfWdldERhdGEoKXtyZXR1cm4gdGhpcy5kYXRhJiYwIT09dGhpcy5kYXRhLmxlbmd0aD90aGlzLmdldEJ5'@;
put 'UmFuZ2UobnVsbCxudWxsLGFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdJiZhcmd1bWVudHNbMF0pOnRoaXMuZGF0YX1zZXREYXRhKGwpe3RoaXMuZGF0YT1sfWdldEF0Q29sdW1uKGwpe2NvbnN0IGE9W107cmV0dXJuIFluKHRoaXMuZGF0YSwoZCxoKT0+e2NvbnN0'@;
put 'IGY9dGhpcy5nZXRBdENlbGwoaCxsKTthLnB1c2goZil9KSxhfWdldEF0Um93KGwsYSxkKXtsZXQgaD1hcmd1bWVudHMubGVuZ3RoPjMmJnZvaWQgMCE9PWFyZ3VtZW50c1szXSYmYXJndW1lbnRzWzNdO2NvbnN0IGY9dm9pZCAwPT09YSYmdm9pZCAwPT09ZCx7ZGF0YURvdE5vdGF0aW9uOnZ9'@;
put 'PXRoaXMuaG90LmdldFNldHRpbmdzKCk7bGV0IE09bnVsbCxEPW51bGw7aWYoTT10aGlzLm1vZGlmeVJvd0RhdGEobCksQXJyYXkuaXNBcnJheShNKSlEPVtdLGY/TS5mb3JFYWNoKChaLHJlKT0+e0RbcmVdPXRoaXMuZ2V0QXRQaHlzaWNhbENlbGwobCxyZSxNKX0pOkdhKGEsZCxaPT57RFta'@;
put 'LWFdPXRoaXMuZ2V0QXRQaHlzaWNhbENlbGwobCxaLE0pfSk7ZWxzZSBpZihxbyhNKXx8bWwoTSkpaWYoRD1oP1tdOnt9LCFmfHxoKXtjb25zdCByZT10aGlzLmNvdW50Rmlyc3RSb3dLZXlzKCktMTtHYSgwLHJlLGNlPT57Y29uc3QgYmU9dGhpcy5jb2xUb1Byb3AoY2UpO2lmKGNlPj0oYXx8'@;
put 'MCkmJmNlPD0oZHx8cmUpJiYhTnVtYmVyLmlzSW50ZWdlcihiZSkpe2NvbnN0IEVlPXRoaXMuZ2V0QXRQaHlzaWNhbENlbGwobCxiZSxNKTtoP0QucHVzaChFZSk6dj9WTyhELGJlLEVlKTpEW2JlXT1FZX19KX1lbHNlIFhvKE0sKFoscmUpPT57Y29uc3QgY2U9dGhpcy5nZXRBdFBoeXNpY2Fs'@;
put 'Q2VsbChsLHJlLE0pO3Y/Vk8oRCxyZSxjZSk6RFtyZV09Y2V9KTtyZXR1cm4gRH1zZXRBdENlbGwobCxhLGQpe2lmKCEobD49dGhpcy5jb3VudFJvd3MoKXx8YT49dGhpcy5jb3VudEZpcnN0Um93S2V5cygpKSl7aWYodGhpcy5ob3QuaGFzSG9vaygibW9kaWZ5U291cmNlRGF0YSIpKXtjb25z'@;
put 'dCBoPUZkKGQpO3RoaXMuaG90LnJ1bkhvb2tzKCJtb2RpZnlTb3VyY2VEYXRhIixsLGEsaCwic2V0IiksaC5pc1RvdWNoZWQoKSYmKGQ9aC52YWx1ZSl9WyJfX3Byb3RvX18iLCJjb25zdHJ1Y3RvciIsInByb3RvdHlwZSJdLmluY2x1ZGVzKGwpfHwoTnVtYmVyLmlzSW50ZWdlcihhKT90aGlz'@;
put 'LmRhdGFbbF1bYV09ZDpWTyh0aGlzLmRhdGFbbF0sYSxkKSl9fWdldEF0UGh5c2ljYWxDZWxsKGwsYSxkKXtsZXQgaD1udWxsO2lmKGQpaWYoInN0cmluZyI9PXR5cGVvZiBhKXtjb25zdHtkYXRhRG90Tm90YXRpb246Zn09dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKTtoPWY/JDJlKGQsYSk6ZFth'@;
put 'XX1lbHNlIGg9ImZ1bmN0aW9uIj09dHlwZW9mIGE/YShkKTpkW2FdO2lmKHRoaXMuaG90Lmhhc0hvb2soIm1vZGlmeVNvdXJjZURhdGEiKSl7Y29uc3QgZj1GZChoKTt0aGlzLmhvdC5ydW5Ib29rcygibW9kaWZ5U291cmNlRGF0YSIsbCxhLGYsImdldCIpLGYuaXNUb3VjaGVkKCkmJihoPWYu'@;
put 'dmFsdWUpfXJldHVybiBofWdldEF0Q2VsbChsLGEpe2NvbnN0IGQ9dGhpcy5tb2RpZnlSb3dEYXRhKGwpO3JldHVybiB0aGlzLmdldEF0UGh5c2ljYWxDZWxsKGwsdGhpcy5jb2xUb1Byb3AoYSksZCl9Z2V0QnlSYW5nZSgpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJn'@;
put 'dW1lbnRzWzBdP2FyZ3VtZW50c1swXTpudWxsLGE9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOm51bGwsZD1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXSYmYXJndW1lbnRzWzJdLGg9ITEsZj1udWxsLHY9bnVs'@;
put 'bCxNPW51bGwsRD1udWxsO251bGw9PT1sfHxudWxsPT09YT8oaD0hMCxmPTAsTT10aGlzLmNvdW50Um93cygpLTEpOihmPU1hdGgubWluKGwucm93LGEucm93KSx2PU1hdGgubWluKGwuY29sLGEuY29sKSxNPU1hdGgubWF4KGwucm93LGEucm93KSxEPU1hdGgubWF4KGwuY29sLGEuY29sKSk7'@;
put 'Y29uc3QgWj1bXTtyZXR1cm4gR2EoZixNLHJlPT57Wi5wdXNoKGg/dGhpcy5nZXRBdFJvdyhyZSx2b2lkIDAsdm9pZCAwLGQpOnRoaXMuZ2V0QXRSb3cocmUsdixELGQpKX0pLFp9Y291bnRSb3dzKCl7aWYodGhpcy5ob3QuaGFzSG9vaygibW9kaWZ5U291cmNlTGVuZ3RoIikpe2NvbnN0IGw9'@;
put 'dGhpcy5ob3QucnVuSG9va3MoIm1vZGlmeVNvdXJjZUxlbmd0aCIpO2lmKE51bWJlci5pc0ludGVnZXIobCkpcmV0dXJuIGx9cmV0dXJuIHRoaXMuZGF0YS5sZW5ndGh9Y291bnRGaXJzdFJvd0tleXMoKXtyZXR1cm4gRksodGhpcy5kYXRhKX1kZXN0cm95KCl7dGhpcy5kYXRhPW51bGwsdGhp'@;
put 'cy5ob3Q9bnVsbH19O3koMjAyOTEpO2NvbnN0IEEzZT17X2xvY2FsSG9va3M6T2JqZWN0LmNyZWF0ZShudWxsKSxhZGRMb2NhbEhvb2soYyxsKXtyZXR1cm4gdGhpcy5fbG9jYWxIb29rc1tjXXx8KHRoaXMuX2xvY2FsSG9va3NbY109W10pLHRoaXMuX2xvY2FsSG9va3NbY10ucHVzaChsKSx0'@;
put 'aGlzfSxydW5Mb2NhbEhvb2tzKGMsbCxhLGQsaCxmLHYpe2lmKHRoaXMuX2xvY2FsSG9va3NbY10pe2NvbnN0IE09dGhpcy5fbG9jYWxIb29rc1tjXS5sZW5ndGg7Zm9yKGxldCBEPTA7RDxNO0QrKylITyh0aGlzLl9sb2NhbEhvb2tzW2NdW0RdLHRoaXMsbCxhLGQsaCxmLHYpfX0sY2xlYXJM'@;
put 'b2NhbEhvb2tzKCl7cmV0dXJuIHRoaXMuX2xvY2FsSG9va3M9e30sdGhpc319O1RwKEEzZSwiTUlYSU5fTkFNRSIsImxvY2FsSG9va3MiLHt3cml0YWJsZTohMSxlbnVtZXJhYmxlOiExfSk7Y29uc3QgeTE9QTNlO2Z1bmN0aW9uIGszZShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gUHR0KGMp'@;
put 'e3ZhciBsPWZ1bmN0aW9uIEZ0dChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Ro'@;
put 'cm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3Qu'@;
put 'ZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y2xhc3MgZTl7Y29uc3RydWN0b3IoKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06'@;
put 'bnVsbDtrM2UodGhpcywiaW5kZXhlZFZhbHVlcyIsW10pLGszZSh0aGlzLCJpbml0VmFsdWVPckZuIix2b2lkIDApLHRoaXMuaW5pdFZhbHVlT3JGbj1sfWdldFZhbHVlcygpe3JldHVybiB0aGlzLmluZGV4ZWRWYWx1ZXN9Z2V0VmFsdWVBdEluZGV4KGwpe2NvbnN0IGE9dGhpcy5pbmRleGVk'@;
put 'VmFsdWVzO2lmKGw8YS5sZW5ndGgpcmV0dXJuIGFbbF19c2V0VmFsdWVzKGwpe3RoaXMuaW5kZXhlZFZhbHVlcz1sLnNsaWNlKCksdGhpcy5ydW5Mb2NhbEhvb2tzKCJjaGFuZ2UiKX1zZXRWYWx1ZUF0SW5kZXgobCxhKXtyZXR1cm4gbDx0aGlzLmluZGV4ZWRWYWx1ZXMubGVuZ3RoJiYodGhp'@;
put 'cy5pbmRleGVkVmFsdWVzW2xdPWEsdGhpcy5ydW5Mb2NhbEhvb2tzKCJjaGFuZ2UiKSwhMCl9Y2xlYXIoKXt0aGlzLnNldERlZmF1bHRWYWx1ZXMoKX1nZXRMZW5ndGgoKXtyZXR1cm4gdGhpcy5nZXRWYWx1ZXMoKS5sZW5ndGh9c2V0RGVmYXVsdFZhbHVlcygpe2xldCBsPWFyZ3VtZW50cy5s'@;
put 'ZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp0aGlzLmluZGV4ZWRWYWx1ZXMubGVuZ3RoO3RoaXMuaW5kZXhlZFZhbHVlcy5sZW5ndGg9MCxtbCh0aGlzLmluaXRWYWx1ZU9yRm4pP0dhKGwtMSxhPT50aGlzLmluZGV4ZWRWYWx1ZXMucHVzaCh0aGlzLmluaXRW'@;
put 'YWx1ZU9yRm4oYSkpKTpHYShsLTEsKCk9PnRoaXMuaW5kZXhlZFZhbHVlcy5wdXNoKHRoaXMuaW5pdFZhbHVlT3JGbikpLHRoaXMucnVuTG9jYWxIb29rcygiY2hhbmdlIil9aW5pdChsKXtyZXR1cm4gdGhpcy5zZXREZWZhdWx0VmFsdWVzKGwpLHRoaXMucnVuTG9jYWxIb29rcygiaW5pdCIp'@;
put 'LHRoaXN9aW5zZXJ0KCl7dGhpcy5ydW5Mb2NhbEhvb2tzKCJjaGFuZ2UiKX1yZW1vdmUoKXt0aGlzLnJ1bkxvY2FsSG9va3MoImNoYW5nZSIpfWRlc3Ryb3koKXt0aGlzLmNsZWFyTG9jYWxIb29rcygpLHRoaXMuaW5kZXhlZFZhbHVlcz1udWxsLHRoaXMuaW5pdFZhbHVlT3JGbj1udWxsfX1m'@;
put 'dW5jdGlvbiBISyhjLGwsYSl7cmV0dXJuWy4uLmMuc2xpY2UoMCxsKSwuLi5hLC4uLmMuc2xpY2UobCldfWZ1bmN0aW9uIEtFKGMsbCl7cmV0dXJuIEltKGMsYT0+ITE9PT1sLmluY2x1ZGVzKGEpKX1mdW5jdGlvbiBOSyhjLGwpe3JldHVybiB5cyhjLGE9PmEtbC5maWx0ZXIoZD0+ZDxhKS5s'@;
put 'ZW5ndGgpfWZ1bmN0aW9uIFZLKGMsbCl7Y29uc3QgYT1sWzBdLGQ9bC5sZW5ndGg7cmV0dXJuIHlzKGMsaD0+aD49YT9oK2Q6aCl9VGwoZTkseTEpO2NsYXNzIEQzZSBleHRlbmRzIGU5e2NvbnN0cnVjdG9yKCl7c3VwZXIobD0+bCl9aW5zZXJ0KGwsYSl7Y29uc3QgZD1WSyh0aGlzLmluZGV4'@;
put 'ZWRWYWx1ZXMsYSk7dGhpcy5pbmRleGVkVmFsdWVzPUhLKGQsbCxhKSxzdXBlci5pbnNlcnQobCxhKX1yZW1vdmUobCl7Y29uc3QgYT1LRSh0aGlzLmluZGV4ZWRWYWx1ZXMsbCk7dGhpcy5pbmRleGVkVmFsdWVzPU5LKGEsbCksc3VwZXIucmVtb3ZlKGwpfX1mdW5jdGlvbiBCSyhjLGwsYSxk'@;
put 'KXtjb25zdCBoPWEubGVuZ3RoP2FbMF06dm9pZCAwO3JldHVyblsuLi5jLnNsaWNlKDAsaCksLi4uYS5tYXAoKGYsdik9Pm1sKGQpP2QoZix2KTpkKSwuLi52b2lkIDA9PT1oP1tdOmMuc2xpY2UoaCldfWZ1bmN0aW9uIGpLKGMsbCl7cmV0dXJuIEltKGMsKGEsZCk9PiExPT09bC5pbmNsdWRl'@;
put 'cyhkKSl9Y2xhc3MgWm0gZXh0ZW5kcyBlOXtpbnNlcnQobCxhKXt0aGlzLmluZGV4ZWRWYWx1ZXM9QksodGhpcy5pbmRleGVkVmFsdWVzLDAsYSx0aGlzLmluaXRWYWx1ZU9yRm4pLHN1cGVyLmluc2VydChsLGEpfXJlbW92ZShsKXt0aGlzLmluZGV4ZWRWYWx1ZXM9aksodGhpcy5pbmRleGVk'@;
put 'VmFsdWVzLGwpLHN1cGVyLnJlbW92ZShsKX19Y2xhc3MgZlAgZXh0ZW5kcyBabXtjb25zdHJ1Y3Rvcigpe3N1cGVyKGFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdJiZhcmd1bWVudHNbMF0pfWdldEhpZGRlbkluZGV4ZXMoKXtyZXR1cm4gcXUodGhpcy5nZXRWYWx1'@;
put 'ZXMoKSwobCxhLGQpPT4oYSYmbC5wdXNoKGQpLGwpLFtdKX19Y2xhc3MgcFAgZXh0ZW5kcyBlOXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksZnVuY3Rpb24gSHR0KGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBOdHQoYyl7dmFyIGw9ZnVuY3Rpb24gVnR0KGMsbCl7aWYoIm9i'@;
put 'amVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2'@;
put 'ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51'@;
put 'bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY30odGhpcywib3JkZXJPZkluZGV4ZXMiLFtdKX1nZXRWYWx1ZXMoKXtyZXR1cm4gdGhpcy5vcmRlck9mSW5kZXhlcy5tYXAobD0+dGhpcy5pbmRleGVkVmFsdWVzW2xdKX1zZXRWYWx1ZXMobCl7dGhpcy5v'@;
put 'cmRlck9mSW5kZXhlcz1bLi4uQXJyYXkobC5sZW5ndGgpLmtleXMoKV0sc3VwZXIuc2V0VmFsdWVzKGwpfXNldFZhbHVlQXRJbmRleChsLGEpe2xldCBkPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTp0aGlzLm9yZGVyT2ZJbmRleGVzLmxl'@;
put 'bmd0aDtyZXR1cm4gbDx0aGlzLmluZGV4ZWRWYWx1ZXMubGVuZ3RoJiYodGhpcy5pbmRleGVkVmFsdWVzW2xdPWEsITE9PT10aGlzLm9yZGVyT2ZJbmRleGVzLmluY2x1ZGVzKGwpJiZ0aGlzLm9yZGVyT2ZJbmRleGVzLnNwbGljZShkLDAsbCksdGhpcy5ydW5Mb2NhbEhvb2tzKCJjaGFuZ2Ui'@;
put 'KSwhMCl9Y2xlYXJWYWx1ZShsKXt0aGlzLm9yZGVyT2ZJbmRleGVzPUtFKHRoaXMub3JkZXJPZkluZGV4ZXMsW2xdKSxtbCh0aGlzLmluaXRWYWx1ZU9yRm4pP3N1cGVyLnNldFZhbHVlQXRJbmRleChsLHRoaXMuaW5pdFZhbHVlT3JGbihsKSk6c3VwZXIuc2V0VmFsdWVBdEluZGV4KGwsdGhp'@;
put 'cy5pbml0VmFsdWVPckZuKX1nZXRMZW5ndGgoKXtyZXR1cm4gdGhpcy5vcmRlck9mSW5kZXhlcy5sZW5ndGh9c2V0RGVmYXVsdFZhbHVlcygpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp0aGlzLmluZGV4ZWRWYWx1ZXMubGVu'@;
put 'Z3RoO3RoaXMub3JkZXJPZkluZGV4ZXMubGVuZ3RoPTAsc3VwZXIuc2V0RGVmYXVsdFZhbHVlcyhsKX1pbnNlcnQobCxhKXt0aGlzLmluZGV4ZWRWYWx1ZXM9QksodGhpcy5pbmRleGVkVmFsdWVzLDAsYSx0aGlzLmluaXRWYWx1ZU9yRm4pLHRoaXMub3JkZXJPZkluZGV4ZXM9VksodGhpcy5v'@;
put 'cmRlck9mSW5kZXhlcyxhKSxzdXBlci5pbnNlcnQobCxhKX1yZW1vdmUobCl7dGhpcy5pbmRleGVkVmFsdWVzPWpLKHRoaXMuaW5kZXhlZFZhbHVlcyxsKSx0aGlzLm9yZGVyT2ZJbmRleGVzPUtFKHRoaXMub3JkZXJPZkluZGV4ZXMsbCksdGhpcy5vcmRlck9mSW5kZXhlcz1OSyh0aGlzLm9y'@;
put 'ZGVyT2ZJbmRleGVzLGwpLHN1cGVyLnJlbW92ZShsKX1nZXRFbnRyaWVzKCl7cmV0dXJuIHRoaXMub3JkZXJPZkluZGV4ZXMubWFwKGw9PltsLHRoaXMuZ2V0VmFsdWVBdEluZGV4KGwpXSl9fWNsYXNzIHFFIGV4dGVuZHMgWm17Y29uc3RydWN0b3IoKXtzdXBlcihhcmd1bWVudHMubGVuZ3Ro'@;
put 'PjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSYmYXJndW1lbnRzWzBdKX1nZXRUcmltbWVkSW5kZXhlcygpe3JldHVybiBxdSh0aGlzLmdldFZhbHVlcygpLChsLGEsZCk9PihhJiZsLnB1c2goZCksbCksW10pfX1jb25zdCBJM2U9bmV3IE1hcChbWyJoaWRpbmciLGZQXSxbImluZGV4IixlOV0s'@;
put 'WyJsaW5rZWRQaHlzaWNhbEluZGV4VG9WYWx1ZSIscFBdLFsicGh5c2ljYWxJbmRleFRvVmFsdWUiLFptXSxbInRyaW1taW5nIixxRV1dKTtsZXQgeks9MDtjbGFzcyBVS3tjb25zdHJ1Y3RvcigpeyFmdW5jdGlvbiBqdHQoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIHp0dChjKXt2YXIgbD1m'@;
put 'dW5jdGlvbiBVdHQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcg'@;
put 'VHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVBy'@;
put 'b3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfSh0aGlzLCJjb2xsZWN0aW9uIixuZXcgTWFwKX1yZWdpc3RlcihsLGEpeyExPT09dGhpcy5jb2xsZWN0aW9uLmhhcyhsKSYmKHRoaXMuY29sbGVjdGlvbi5zZXQo'@;
put 'bCxhKSxhLmFkZExvY2FsSG9vaygiY2hhbmdlIiwoKT0+dGhpcy5ydW5Mb2NhbEhvb2tzKCJjaGFuZ2UiLGEpKSx6Sys9MSl9dW5yZWdpc3RlcihsKXtjb25zdCBhPXRoaXMuY29sbGVjdGlvbi5nZXQobCk7UGEoYSkmJihhLmRlc3Ryb3koKSx0aGlzLmNvbGxlY3Rpb24uZGVsZXRlKGwpLHRo'@;
put 'aXMucnVuTG9jYWxIb29rcygiY2hhbmdlIixhKSx6Sy09MSl9dW5yZWdpc3RlckFsbCgpe3RoaXMuY29sbGVjdGlvbi5mb3JFYWNoKChsLGEpPT50aGlzLnVucmVnaXN0ZXIoYSkpLHRoaXMuY29sbGVjdGlvbi5jbGVhcigpfWdldChsKXtyZXR1cm4gX2MobCk/QXJyYXkuZnJvbSh0aGlzLmNv'@;
put 'bGxlY3Rpb24udmFsdWVzKCkpOnRoaXMuY29sbGVjdGlvbi5nZXQobCl9Z2V0TGVuZ3RoKCl7cmV0dXJuIHRoaXMuY29sbGVjdGlvbi5zaXplfXJlbW92ZUZyb21FdmVyeShsKXt0aGlzLmNvbGxlY3Rpb24uZm9yRWFjaChhPT57YS5yZW1vdmUobCl9KX1pbnNlcnRUb0V2ZXJ5KGwsYSl7dGhp'@;
put 'cy5jb2xsZWN0aW9uLmZvckVhY2goZD0+e2QuaW5zZXJ0KGwsYSl9KX1pbml0RXZlcnkobCl7dGhpcy5jb2xsZWN0aW9uLmZvckVhY2goYT0+e2EuaW5pdChsKX0pfX1mdW5jdGlvbiBaSyhjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gV3R0KGMpe3ZhciBsPWZ1bmN0aW9uIFl0dChjLGwpe2lm'@;
put 'KCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9Qcmlt'@;
put 'aXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTph'@;
put 'LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9VGwoVUsseTEpO2NsYXNzIFIzZSBleHRlbmRzIFVLe2NvbnN0cnVjdG9yKGwsYSl7c3VwZXIoKSxaSyh0aGlzLCJtZXJnZWRWYWx1ZXNDYWNoZSIsW10pLFpLKHRoaXMsImFnZ3JlZ2F0aW9uRnVu'@;
put 'Y3Rpb24iLHZvaWQgMCksWksodGhpcywiZmFsbGJhY2tWYWx1ZSIsdm9pZCAwKSx0aGlzLmFnZ3JlZ2F0aW9uRnVuY3Rpb249bCx0aGlzLmZhbGxiYWNrVmFsdWU9YX1nZXRNZXJnZWRWYWx1ZXMoKXtpZighMD09PSghKGFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBd'@;
put 'KXx8YXJndW1lbnRzWzBdKSlyZXR1cm4gdGhpcy5tZXJnZWRWYWx1ZXNDYWNoZTtpZigwPT09dGhpcy5nZXRMZW5ndGgoKSlyZXR1cm5bXTtjb25zdCBhPXlzKHRoaXMuZ2V0KCksZj0+Zi5nZXRWYWx1ZXMoKSksZD1bXSxoPVBhKGFbMF0pJiZhWzBdLmxlbmd0aHx8MDtmb3IobGV0IGY9MDtm'@;
put 'PGg7Zis9MSl7Y29uc3Qgdj1bXTtmb3IobGV0IE09MDtNPHRoaXMuZ2V0TGVuZ3RoKCk7TSs9MSl2LnB1c2goYVtNXVtmXSk7ZC5wdXNoKHYpfXJldHVybiB5cyhkLHRoaXMuYWdncmVnYXRpb25GdW5jdGlvbil9Z2V0TWVyZ2VkVmFsdWVBdEluZGV4KGwsYSl7Y29uc3QgZD10aGlzLmdldE1l'@;
put 'cmdlZFZhbHVlcyhhKVtsXTtyZXR1cm4gUGEoZCk/ZDp0aGlzLmZhbGxiYWNrVmFsdWV9dXBkYXRlQ2FjaGUoKXt0aGlzLm1lcmdlZFZhbHVlc0NhY2hlPXRoaXMuZ2V0TWVyZ2VkVmFsdWVzKCExKX19ZnVuY3Rpb24gTDNlKGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpj'@;
put 'LmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX12YXIgV0s9bmV3IFdlYWtNYXA7Y2xhc3MgTzNle2NvbnN0cnVjdG9yKCl7IWZ1bmN0aW9uIEd0dChj'@;
put 'LGwsYSl7KGZ1bmN0aW9uICR0dChjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9KShjLGwpLGwuc2V0KGMsYSl9KHRoaXMsV0ssW10pfXN1YnNjcmliZShs'@;
put 'KXtyZXR1cm4gdGhpcy5hZGRMb2NhbEhvb2soImNoYW5nZSIsbCksdGhpcy5fd3JpdGUoZnVuY3Rpb24gcXR0KGMsbCl7cmV0dXJuIGMuZ2V0KEwzZShjLGwpKX0oV0ssdGhpcykpLHRoaXN9dW5zdWJzY3JpYmUoKXtyZXR1cm4gdGhpcy5ydW5Mb2NhbEhvb2tzKCJ1bnN1YnNjcmliZSIpLHRo'@;
put 'aXMuY2xlYXJMb2NhbEhvb2tzKCksdGhpc31fd3JpdGUobCl7cmV0dXJuIGwubGVuZ3RoPjAmJnRoaXMucnVuTG9jYWxIb29rcygiY2hhbmdlIixsKSx0aGlzfV93cml0ZUluaXRpYWxDaGFuZ2VzKGwpeyFmdW5jdGlvbiBLdHQoYyxsLGEpe2Muc2V0KEwzZShjLGwpLGEpfShXSyx0aGlzLGwp'@;
put 'fX1mdW5jdGlvbiBQM2UoYyxsKXtjb25zdCBhPVtdO2xldCBkPTAsaD0wO2Zvcig7ZDxjLmxlbmd0aCYmaDxsLmxlbmd0aDtkKyssaCsrKWNbZF0hPT1sW2hdJiZhLnB1c2goe29wOiJyZXBsYWNlIixpbmRleDpoLG9sZFZhbHVlOmNbZF0sbmV3VmFsdWU6bFtoXX0pO2Zvcig7ZDxsLmxlbmd0'@;
put 'aDtkKyspYS5wdXNoKHtvcDoiaW5zZXJ0IixpbmRleDpkLG9sZFZhbHVlOnZvaWQgMCxuZXdWYWx1ZTpsW2RdfSk7Zm9yKDtoPGMubGVuZ3RoO2grKylhLnB1c2goe29wOiJyZW1vdmUiLGluZGV4Omgsb2xkVmFsdWU6Y1toXSxuZXdWYWx1ZTp2b2lkIDB9KTtyZXR1cm4gYX1mdW5jdGlvbiBY'@;
put 'RShjLGwsYSl7KGZ1bmN0aW9uIFh0dChjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9KShjLGwpLGwuc2V0KGMsYSl9ZnVuY3Rpb24gWTIoYyxsKXtyZXR1'@;
put 'cm4gYy5nZXQoRjNlKGMsbCkpfWZ1bmN0aW9uIGdQKGMsbCxhKXtyZXR1cm4gYy5zZXQoRjNlKGMsbCksYSksYX1mdW5jdGlvbiBGM2UoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBU'@;
put 'eXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfVRsKE8zZSx5MSk7dmFyIG1QPW5ldyBXZWFrTWFwLEpFPW5ldyBXZWFrTWFwLHZQPW5ldyBXZWFrTWFwLGJQPW5ldyBXZWFrTWFwLHlQPW5ldyBXZWFrTWFwO2NsYXNzIEp0dHtjb25zdHJ1'@;
put 'Y3Rvcigpe2xldHtpbml0aWFsSW5kZXhWYWx1ZTpsfT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06e307WEUodGhpcyxtUCxuZXcgU2V0KSxYRSh0aGlzLEpFLFtdKSxYRSh0aGlzLHZQLFtdKSxYRSh0aGlzLGJQLCExKSxYRSh0aGlzLHlQ'@;
put 'LCExKSxnUCh5UCx0aGlzLGw/PyExKX1jcmVhdGVPYnNlcnZlcigpe2NvbnN0IGw9bmV3IE8zZTtyZXR1cm4gWTIobVAsdGhpcykuYWRkKGwpLGwuYWRkTG9jYWxIb29rKCJ1bnN1YnNjcmliZSIsKCk9PntZMihtUCx0aGlzKS5kZWxldGUobCl9KSxsLl93cml0ZUluaXRpYWxDaGFuZ2VzKFAz'@;
put 'ZShZMihKRSx0aGlzKSxZMih2UCx0aGlzKSkpLGx9ZW1pdChsKXtsZXQgYT1ZMih2UCx0aGlzKTsoIVkyKGJQLHRoaXMpfHxZMihKRSx0aGlzKS5sZW5ndGghPT1sLmxlbmd0aCkmJigwPT09bC5sZW5ndGg/bD1uZXcgQXJyYXkoYS5sZW5ndGgpLmZpbGwoWTIoeVAsdGhpcykpOmdQKEpFLHRo'@;
put 'aXMsbmV3IEFycmF5KGwubGVuZ3RoKS5maWxsKFkyKHlQLHRoaXMpKSksWTIoYlAsdGhpcyl8fChnUChiUCx0aGlzLCEwKSxhPVkyKEpFLHRoaXMpKSk7Y29uc3QgZD1QM2UoYSxsKTtZMihtUCx0aGlzKS5mb3JFYWNoKGg9PmguX3dyaXRlKGQpKSxnUCh2UCx0aGlzLGwpfX1mdW5jdGlvbiBL'@;
put 'MShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gUXR0KGMpe3ZhciBsPWZ1bmN0aW9uIGVudChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7'@;
put 'aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9'@;
put 'PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y2xhc3MgWUt7Y29uc3RydWN0b3IoKXtLMSh0aGlzLCJpbmRleGVzU2VxdWVuY2UiLG5l'@;
put 'dyBEM2UpLEsxKHRoaXMsInRyaW1taW5nTWFwc0NvbGxlY3Rpb24iLG5ldyBSM2UobD0+bC5zb21lKGE9PiEwPT09YSksITEpKSxLMSh0aGlzLCJoaWRpbmdNYXBzQ29sbGVjdGlvbiIsbmV3IFIzZShsPT5sLnNvbWUoYT0+ITA9PT1hKSwhMSkpLEsxKHRoaXMsInZhcmlvdXNNYXBzQ29sbGVj'@;
put 'dGlvbiIsbmV3IFVLKSxLMSh0aGlzLCJoaWRpbmdDaGFuZ2VzT2JzZXJ2YWJsZSIsbmV3IEp0dCh7aW5pdGlhbEluZGV4VmFsdWU6ITF9KSksSzEodGhpcywibm90VHJpbW1lZEluZGV4ZXNDYWNoZSIsW10pLEsxKHRoaXMsIm5vdEhpZGRlbkluZGV4ZXNDYWNoZSIsW10pLEsxKHRoaXMsImlz'@;
put 'QmF0Y2hlZCIsITEpLEsxKHRoaXMsImluZGV4ZXNTZXF1ZW5jZUNoYW5nZWQiLCExKSxLMSh0aGlzLCJpbmRleGVzQ2hhbmdlU291cmNlIix2b2lkIDApLEsxKHRoaXMsInRyaW1tZWRJbmRleGVzQ2hhbmdlZCIsITEpLEsxKHRoaXMsImhpZGRlbkluZGV4ZXNDaGFuZ2VkIiwhMSksSzEodGhp'@;
put 'cywicmVuZGVyYWJsZVBoeXNpY2FsSW5kZXhlc0NhY2hlIixbXSksSzEodGhpcywiZnJvbVBoeXNpY2FsVG9WaXN1YWxJbmRleGVzQ2FjaGUiLG5ldyBNYXApLEsxKHRoaXMsImZyb21WaXN1YWxUb1JlbmRlcmFibGVJbmRleGVzQ2FjaGUiLG5ldyBNYXApLHRoaXMuaW5kZXhlc1NlcXVlbmNl'@;
put 'LmFkZExvY2FsSG9vaygiY2hhbmdlIiwoKT0+e3RoaXMuaW5kZXhlc1NlcXVlbmNlQ2hhbmdlZD0hMCx0aGlzLnVwZGF0ZUNhY2hlKCksdGhpcy5ydW5Mb2NhbEhvb2tzKCJpbmRleGVzU2VxdWVuY2VDaGFuZ2UiLHRoaXMuaW5kZXhlc0NoYW5nZVNvdXJjZSksdGhpcy5ydW5Mb2NhbEhvb2tz'@;
put 'KCJjaGFuZ2UiLHRoaXMuaW5kZXhlc1NlcXVlbmNlLG51bGwpfSksdGhpcy50cmltbWluZ01hcHNDb2xsZWN0aW9uLmFkZExvY2FsSG9vaygiY2hhbmdlIixsPT57dGhpcy50cmltbWVkSW5kZXhlc0NoYW5nZWQ9ITAsdGhpcy51cGRhdGVDYWNoZSgpLHRoaXMucnVuTG9jYWxIb29rcygiY2hh'@;
put 'bmdlIixsLHRoaXMudHJpbW1pbmdNYXBzQ29sbGVjdGlvbil9KSx0aGlzLmhpZGluZ01hcHNDb2xsZWN0aW9uLmFkZExvY2FsSG9vaygiY2hhbmdlIixsPT57dGhpcy5oaWRkZW5JbmRleGVzQ2hhbmdlZD0hMCx0aGlzLnVwZGF0ZUNhY2hlKCksdGhpcy5ydW5Mb2NhbEhvb2tzKCJjaGFuZ2Ui'@;
put 'LGwsdGhpcy5oaWRpbmdNYXBzQ29sbGVjdGlvbil9KSx0aGlzLnZhcmlvdXNNYXBzQ29sbGVjdGlvbi5hZGRMb2NhbEhvb2soImNoYW5nZSIsbD0+e3RoaXMucnVuTG9jYWxIb29rcygiY2hhbmdlIixsLHRoaXMudmFyaW91c01hcHNDb2xsZWN0aW9uKX0pfXN1c3BlbmRPcGVyYXRpb25zKCl7'@;
put 'dGhpcy5pc0JhdGNoZWQ9ITB9cmVzdW1lT3BlcmF0aW9ucygpe3RoaXMuaXNCYXRjaGVkPSExLHRoaXMudXBkYXRlQ2FjaGUoKX1jcmVhdGVDaGFuZ2VzT2JzZXJ2ZXIobCl7aWYoImhpZGluZyIhPT1sKXRocm93IG5ldyBFcnJvcihgVW5zdXBwb3J0ZWQgaW5kZXggbWFwIHR5cGUgIiR7bH0i'@;
put 'LmApO3JldHVybiB0aGlzLmhpZGluZ0NoYW5nZXNPYnNlcnZhYmxlLmNyZWF0ZU9ic2VydmVyKCl9Y3JlYXRlQW5kUmVnaXN0ZXJJbmRleE1hcChsLGEsZCl7cmV0dXJuIHRoaXMucmVnaXN0ZXJNYXAobCxmdW5jdGlvbiBCdHQoYyl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAh'@;
put 'PT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOm51bGw7aWYoIUkzZS5oYXMoYykpdGhyb3cgbmV3IEVycm9yKGBUaGUgcHJvdmlkZWQgbWFwIHR5cGUgKCIke2N9IikgZG9lcyBub3QgZXhpc3QuYCk7cmV0dXJuIG5ldyhJM2UuZ2V0KGMpKShsKX0oYSxkKSl9cmVnaXN0ZXJNYXAobCxhKXtp'@;
put 'Zih0aGlzLnRyaW1taW5nTWFwc0NvbGxlY3Rpb24uZ2V0KGwpfHx0aGlzLmhpZGluZ01hcHNDb2xsZWN0aW9uLmdldChsKXx8dGhpcy52YXJpb3VzTWFwc0NvbGxlY3Rpb24uZ2V0KGwpKXRocm93IEVycm9yKGBNYXAgd2l0aCBuYW1lICIke2x9IiBoYXMgYmVlbiBhbHJlYWR5IHJlZ2lzdGVy'@;
put 'ZWQuYCk7YSBpbnN0YW5jZW9mIHFFP3RoaXMudHJpbW1pbmdNYXBzQ29sbGVjdGlvbi5yZWdpc3RlcihsLGEpOmEgaW5zdGFuY2VvZiBmUD90aGlzLmhpZGluZ01hcHNDb2xsZWN0aW9uLnJlZ2lzdGVyKGwsYSk6dGhpcy52YXJpb3VzTWFwc0NvbGxlY3Rpb24ucmVnaXN0ZXIobCxhKTtjb25z'@;
put 'dCBkPXRoaXMuZ2V0TnVtYmVyT2ZJbmRleGVzKCk7cmV0dXJuIGQ+MCYmYS5pbml0KGQpLGF9dW5yZWdpc3Rlck1hcChsKXt0aGlzLnRyaW1taW5nTWFwc0NvbGxlY3Rpb24udW5yZWdpc3RlcihsKSx0aGlzLmhpZGluZ01hcHNDb2xsZWN0aW9uLnVucmVnaXN0ZXIobCksdGhpcy52YXJpb3Vz'@;
put 'TWFwc0NvbGxlY3Rpb24udW5yZWdpc3RlcihsKX11bnJlZ2lzdGVyQWxsKCl7dGhpcy50cmltbWluZ01hcHNDb2xsZWN0aW9uLnVucmVnaXN0ZXJBbGwoKSx0aGlzLmhpZGluZ01hcHNDb2xsZWN0aW9uLnVucmVnaXN0ZXJBbGwoKSx0aGlzLnZhcmlvdXNNYXBzQ29sbGVjdGlvbi51bnJlZ2lz'@;
put 'dGVyQWxsKCl9Z2V0UGh5c2ljYWxGcm9tVmlzdWFsSW5kZXgobCl7Y29uc3QgYT10aGlzLm5vdFRyaW1tZWRJbmRleGVzQ2FjaGVbbF07cmV0dXJuIFBhKGEpP2E6bnVsbH1nZXRQaHlzaWNhbEZyb21SZW5kZXJhYmxlSW5kZXgobCl7Y29uc3QgYT10aGlzLnJlbmRlcmFibGVQaHlzaWNhbElu'@;
put 'ZGV4ZXNDYWNoZVtsXTtyZXR1cm4gUGEoYSk/YTpudWxsfWdldFZpc3VhbEZyb21QaHlzaWNhbEluZGV4KGwpe2NvbnN0IGE9dGhpcy5mcm9tUGh5c2ljYWxUb1Zpc3VhbEluZGV4ZXNDYWNoZS5nZXQobCk7cmV0dXJuIFBhKGEpP2E6bnVsbH1nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4'@;
put 'KGwpe3JldHVybiB0aGlzLmdldFZpc3VhbEZyb21QaHlzaWNhbEluZGV4KHRoaXMuZ2V0UGh5c2ljYWxGcm9tUmVuZGVyYWJsZUluZGV4KGwpKX1nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KGwpe2NvbnN0IGE9dGhpcy5mcm9tVmlzdWFsVG9SZW5kZXJhYmxlSW5kZXhlc0NhY2hlLmdl'@;
put 'dChsKTtyZXR1cm4gUGEoYSk/YTpudWxsfWdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChsLGEpe2xldCBkPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdJiZhcmd1bWVudHNbMl07aWYobnVsbD09PXRoaXMuZ2V0UGh5c2ljYWxGcm9tVmlzdWFsSW5kZXgobCkpcmV0'@;
put 'dXJuIG51bGw7aWYodGhpcy5mcm9tVmlzdWFsVG9SZW5kZXJhYmxlSW5kZXhlc0NhY2hlLmhhcyhsKSlyZXR1cm4gbDtjb25zdCBmPUFycmF5LmZyb20odGhpcy5mcm9tVmlzdWFsVG9SZW5kZXJhYmxlSW5kZXhlc0NhY2hlLmtleXMoKSk7bGV0IHY9LTE7cmV0dXJuIHY9YT4wP2YuZmluZElu'@;
put 'ZGV4KE09Pk0+bCk6Zi5yZXZlcnNlKCkuZmluZEluZGV4KE09Pk08bCksLTE9PT12P2Q/dGhpcy5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgobCwtYSwhMSk6bnVsbDpmW3ZdfWluaXRUb0xlbmd0aCgpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2Fy'@;
put 'Z3VtZW50c1swXTp0aGlzLmdldE51bWJlck9mSW5kZXhlcygpO3RoaXMubm90VHJpbW1lZEluZGV4ZXNDYWNoZT1bLi4ubmV3IEFycmF5KGwpLmtleXMoKV0sdGhpcy5ub3RIaWRkZW5JbmRleGVzQ2FjaGU9Wy4uLm5ldyBBcnJheShsKS5rZXlzKCldLHRoaXMuc3VzcGVuZE9wZXJhdGlvbnMo'@;
put 'KSx0aGlzLmluZGV4ZXNDaGFuZ2VTb3VyY2U9ImluaXQiLHRoaXMuaW5kZXhlc1NlcXVlbmNlLmluaXQobCksdGhpcy5pbmRleGVzQ2hhbmdlU291cmNlPXZvaWQgMCx0aGlzLnRyaW1taW5nTWFwc0NvbGxlY3Rpb24uaW5pdEV2ZXJ5KGwpLHRoaXMucmVzdW1lT3BlcmF0aW9ucygpLHRoaXMu'@;
put 'c3VzcGVuZE9wZXJhdGlvbnMoKSx0aGlzLmhpZGluZ01hcHNDb2xsZWN0aW9uLmluaXRFdmVyeShsKSx0aGlzLnZhcmlvdXNNYXBzQ29sbGVjdGlvbi5pbml0RXZlcnkobCksdGhpcy5yZXN1bWVPcGVyYXRpb25zKCksdGhpcy5ydW5Mb2NhbEhvb2tzKCJpbml0Iil9Zml0VG9MZW5ndGgobCl7'@;
put 'Y29uc3QgYT10aGlzLmdldE51bWJlck9mSW5kZXhlcygpO2lmKGw8YSl7Y29uc3QgZD1bLi4uQXJyYXkodGhpcy5nZXROdW1iZXJPZkluZGV4ZXMoKS1sKS5rZXlzKCldLm1hcChoPT5oK2wpO3RoaXMucmVtb3ZlSW5kZXhlcyhkKX1lbHNlIHRoaXMuaW5zZXJ0SW5kZXhlcyhhLGwtYSl9Z2V0'@;
put 'SW5kZXhlc1NlcXVlbmNlKCl7cmV0dXJuIHRoaXMuaW5kZXhlc1NlcXVlbmNlLmdldFZhbHVlcygpfXNldEluZGV4ZXNTZXF1ZW5jZShsKXt2b2lkIDA9PT10aGlzLmluZGV4ZXNDaGFuZ2VTb3VyY2UmJih0aGlzLmluZGV4ZXNDaGFuZ2VTb3VyY2U9InVwZGF0ZSIpLHRoaXMuaW5kZXhlc1Nl'@;
put 'cXVlbmNlLnNldFZhbHVlcyhsKSwidXBkYXRlIj09PXRoaXMuaW5kZXhlc0NoYW5nZVNvdXJjZSYmKHRoaXMuaW5kZXhlc0NoYW5nZVNvdXJjZT12b2lkIDApfWdldE5vdFRyaW1tZWRJbmRleGVzKCl7cmV0dXJuITA9PT0oIShhcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50'@;
put 'c1swXSl8fGFyZ3VtZW50c1swXSk/dGhpcy5ub3RUcmltbWVkSW5kZXhlc0NhY2hlOnRoaXMuZ2V0SW5kZXhlc1NlcXVlbmNlKCkuZmlsdGVyKGQ9PiExPT09dGhpcy5pc1RyaW1tZWQoZCkpfWdldE5vdFRyaW1tZWRJbmRleGVzTGVuZ3RoKCl7cmV0dXJuIHRoaXMuZ2V0Tm90VHJpbW1lZElu'@;
put 'ZGV4ZXMoKS5sZW5ndGh9Z2V0Tm90SGlkZGVuSW5kZXhlcygpe3JldHVybiEwPT09KCEoYXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0pfHxhcmd1bWVudHNbMF0pP3RoaXMubm90SGlkZGVuSW5kZXhlc0NhY2hlOnRoaXMuZ2V0SW5kZXhlc1NlcXVlbmNlKCkuZmls'@;
put 'dGVyKGQ9PiExPT09dGhpcy5pc0hpZGRlbihkKSl9Z2V0Tm90SGlkZGVuSW5kZXhlc0xlbmd0aCgpe3JldHVybiB0aGlzLmdldE5vdEhpZGRlbkluZGV4ZXMoKS5sZW5ndGh9Z2V0UmVuZGVyYWJsZUluZGV4ZXMoKXtyZXR1cm4hMD09PSghKGFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09'@;
put 'YXJndW1lbnRzWzBdKXx8YXJndW1lbnRzWzBdKT90aGlzLnJlbmRlcmFibGVQaHlzaWNhbEluZGV4ZXNDYWNoZTp0aGlzLmdldE5vdFRyaW1tZWRJbmRleGVzKCkuZmlsdGVyKGQ9PiExPT09dGhpcy5pc0hpZGRlbihkKSl9Z2V0UmVuZGVyYWJsZUluZGV4ZXNMZW5ndGgoKXtyZXR1cm4gdGhp'@;
put 'cy5nZXRSZW5kZXJhYmxlSW5kZXhlcygpLmxlbmd0aH1nZXROdW1iZXJPZkluZGV4ZXMoKXtyZXR1cm4gdGhpcy5nZXRJbmRleGVzU2VxdWVuY2UoKS5sZW5ndGh9bW92ZUluZGV4ZXMobCxhKXsibnVtYmVyIj09dHlwZW9mIGwmJihsPVtsXSk7Y29uc3QgZD15cyhsLFo9PnRoaXMuZ2V0UGh5'@;
put 'c2ljYWxGcm9tVmlzdWFsSW5kZXgoWikpLGg9dGhpcy5nZXROb3RUcmltbWVkSW5kZXhlc0xlbmd0aCgpLGY9bC5sZW5ndGgsdj1LRSh0aGlzLmdldEluZGV4ZXNTZXF1ZW5jZSgpLGQpLE09di5maWx0ZXIoWj0+ITE9PT10aGlzLmlzVHJpbW1lZChaKSk7bGV0IEQ9di5pbmRleE9mKE1bTS5s'@;
put 'ZW5ndGgtMV0pKzE7YStmPGgmJihEPXYuaW5kZXhPZihNW2FdKSksdGhpcy5pbmRleGVzQ2hhbmdlU291cmNlPSJtb3ZlIix0aGlzLnNldEluZGV4ZXNTZXF1ZW5jZShISyh2LEQsZCkpLHRoaXMuaW5kZXhlc0NoYW5nZVNvdXJjZT12b2lkIDB9aXNUcmltbWVkKGwpe3JldHVybiB0aGlzLnRy'@;
put 'aW1taW5nTWFwc0NvbGxlY3Rpb24uZ2V0TWVyZ2VkVmFsdWVBdEluZGV4KGwpfWlzSGlkZGVuKGwpe3JldHVybiB0aGlzLmhpZGluZ01hcHNDb2xsZWN0aW9uLmdldE1lcmdlZFZhbHVlQXRJbmRleChsKX1pbnNlcnRJbmRleGVzKGwsYSl7Y29uc3QgZD10aGlzLmdldE5vdFRyaW1tZWRJbmRl'@;
put 'eGVzKClbbF0saD1QYShkKT9kOnRoaXMuZ2V0TnVtYmVyT2ZJbmRleGVzKCksZj10aGlzLmdldEluZGV4ZXNTZXF1ZW5jZSgpLmluY2x1ZGVzKGQpP3RoaXMuZ2V0SW5kZXhlc1NlcXVlbmNlKCkuaW5kZXhPZihkKTp0aGlzLmdldE51bWJlck9mSW5kZXhlcygpLHY9eXMobmV3IEFycmF5KGEp'@;
put 'LmZpbGwoaCksKE0sRCk9Pk0rRCk7dGhpcy5zdXNwZW5kT3BlcmF0aW9ucygpLHRoaXMuaW5kZXhlc0NoYW5nZVNvdXJjZT0iaW5zZXJ0Iix0aGlzLmluZGV4ZXNTZXF1ZW5jZS5pbnNlcnQoZix2KSx0aGlzLmluZGV4ZXNDaGFuZ2VTb3VyY2U9dm9pZCAwLHRoaXMudHJpbW1pbmdNYXBzQ29s'@;
put 'bGVjdGlvbi5pbnNlcnRUb0V2ZXJ5KGYsdiksdGhpcy5oaWRpbmdNYXBzQ29sbGVjdGlvbi5pbnNlcnRUb0V2ZXJ5KGYsdiksdGhpcy52YXJpb3VzTWFwc0NvbGxlY3Rpb24uaW5zZXJ0VG9FdmVyeShmLHYpLHRoaXMucmVzdW1lT3BlcmF0aW9ucygpfXJlbW92ZUluZGV4ZXMobCl7dGhpcy5z'@;
put 'dXNwZW5kT3BlcmF0aW9ucygpLHRoaXMuaW5kZXhlc0NoYW5nZVNvdXJjZT0icmVtb3ZlIix0aGlzLmluZGV4ZXNTZXF1ZW5jZS5yZW1vdmUobCksdGhpcy5pbmRleGVzQ2hhbmdlU291cmNlPXZvaWQgMCx0aGlzLnRyaW1taW5nTWFwc0NvbGxlY3Rpb24ucmVtb3ZlRnJvbUV2ZXJ5KGwpLHRo'@;
put 'aXMuaGlkaW5nTWFwc0NvbGxlY3Rpb24ucmVtb3ZlRnJvbUV2ZXJ5KGwpLHRoaXMudmFyaW91c01hcHNDb2xsZWN0aW9uLnJlbW92ZUZyb21FdmVyeShsKSx0aGlzLnJlc3VtZU9wZXJhdGlvbnMoKX11cGRhdGVDYWNoZSgpeyghMD09PShhcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFy'@;
put 'Z3VtZW50c1swXSYmYXJndW1lbnRzWzBdKXx8ITE9PT10aGlzLmlzQmF0Y2hlZCYmITA9PT0odGhpcy5pbmRleGVzU2VxdWVuY2VDaGFuZ2VkfHx0aGlzLnRyaW1tZWRJbmRleGVzQ2hhbmdlZHx8dGhpcy5oaWRkZW5JbmRleGVzQ2hhbmdlZCkpJiYodGhpcy50cmltbWluZ01hcHNDb2xsZWN0'@;
put 'aW9uLnVwZGF0ZUNhY2hlKCksdGhpcy5oaWRpbmdNYXBzQ29sbGVjdGlvbi51cGRhdGVDYWNoZSgpLHRoaXMubm90VHJpbW1lZEluZGV4ZXNDYWNoZT10aGlzLmdldE5vdFRyaW1tZWRJbmRleGVzKCExKSx0aGlzLm5vdEhpZGRlbkluZGV4ZXNDYWNoZT10aGlzLmdldE5vdEhpZGRlbkluZGV4'@;
put 'ZXMoITEpLHRoaXMucmVuZGVyYWJsZVBoeXNpY2FsSW5kZXhlc0NhY2hlPXRoaXMuZ2V0UmVuZGVyYWJsZUluZGV4ZXMoITEpLHRoaXMuY2FjaGVGcm9tUGh5c2ljYWxUb1Zpc3VhbEluZGV4ZXMoKSx0aGlzLmNhY2hlRnJvbVZpc3VhbFRvUmVuZGVyYWJsZUluZGV4ZXMoKSx0aGlzLmhpZGRl'@;
put 'bkluZGV4ZXNDaGFuZ2VkJiZ0aGlzLmhpZGluZ0NoYW5nZXNPYnNlcnZhYmxlLmVtaXQodGhpcy5oaWRpbmdNYXBzQ29sbGVjdGlvbi5nZXRNZXJnZWRWYWx1ZXMoKSksdGhpcy5ydW5Mb2NhbEhvb2tzKCJjYWNoZVVwZGF0ZWQiLHtpbmRleGVzU2VxdWVuY2VDaGFuZ2VkOnRoaXMuaW5kZXhl'@;
put 'c1NlcXVlbmNlQ2hhbmdlZCx0cmltbWVkSW5kZXhlc0NoYW5nZWQ6dGhpcy50cmltbWVkSW5kZXhlc0NoYW5nZWQsaGlkZGVuSW5kZXhlc0NoYW5nZWQ6dGhpcy5oaWRkZW5JbmRleGVzQ2hhbmdlZH0pLHRoaXMuaW5kZXhlc1NlcXVlbmNlQ2hhbmdlZD0hMSx0aGlzLnRyaW1tZWRJbmRleGVz'@;
put 'Q2hhbmdlZD0hMSx0aGlzLmhpZGRlbkluZGV4ZXNDaGFuZ2VkPSExKX1jYWNoZUZyb21QaHlzaWNhbFRvVmlzdWFsSW5kZXhlcygpe2NvbnN0IGw9dGhpcy5nZXROb3RUcmltbWVkSW5kZXhlc0xlbmd0aCgpO3RoaXMuZnJvbVBoeXNpY2FsVG9WaXN1YWxJbmRleGVzQ2FjaGUuY2xlYXIoKTtm'@;
put 'b3IobGV0IGE9MDthPGw7YSs9MSl7Y29uc3QgZD10aGlzLmdldFBoeXNpY2FsRnJvbVZpc3VhbEluZGV4KGEpO3RoaXMuZnJvbVBoeXNpY2FsVG9WaXN1YWxJbmRleGVzQ2FjaGUuc2V0KGQsYSl9fWNhY2hlRnJvbVZpc3VhbFRvUmVuZGVyYWJsZUluZGV4ZXMoKXtjb25zdCBsPXRoaXMuZ2V0'@;
put 'UmVuZGVyYWJsZUluZGV4ZXNMZW5ndGgoKTt0aGlzLmZyb21WaXN1YWxUb1JlbmRlcmFibGVJbmRleGVzQ2FjaGUuY2xlYXIoKTtmb3IobGV0IGE9MDthPGw7YSs9MSl7Y29uc3QgZD10aGlzLmdldFBoeXNpY2FsRnJvbVJlbmRlcmFibGVJbmRleChhKSxoPXRoaXMuZ2V0VmlzdWFsRnJvbVBo'@;
put 'eXNpY2FsSW5kZXgoZCk7dGhpcy5mcm9tVmlzdWFsVG9SZW5kZXJhYmxlSW5kZXhlc0NhY2hlLnNldChoLGEpfX19ZnVuY3Rpb24gSDNlKGMpe2NvbnN0IGE9L14oW2EtekEtWl17Mn0pLShbYS16QS1aXXsyfSkkLy5leGVjKGMpO3JldHVybiBhP2Ake2FbMV0udG9Mb3dlckNhc2UoKX0tJHth'@;
put 'WzJdLnRvVXBwZXJDYXNlKCl9YDpjfWZ1bmN0aW9uIE4zZShjKXtQYShjKSYmTiQoZ2xgTGFuZ3VhZ2Ugd2l0aCBjb2RlICIke2N9IiB3YXMgbm90IGZvdW5kLiBZb3Ugc2hvdWxkIHJlZ2lzdGVyIHBhcnRpY3VsYXIgbGFuZ3VhZ2VceDIwCiAgICBiZWZvcmUgdXNpbmcgaXQuIFJlYWQgbW9y'@;
put 'ZSBhYm91dCB0aGlzIGlzc3VlIGF0OiBodHRwczovL2RvY3MuaGFuZHNvbnRhYmxlLmNvbS9pMThuL21pc3NpbmctbGFuZ3VhZ2UtY29kZS5gKX1UbChZSyx5MSk7Y29uc3R7cmVnaXN0ZXI6cm50LGdldFZhbHVlczppbnR9PXIzKCJwaHJhc2VGb3JtYXR0ZXJzIik7IWZ1bmN0aW9uIGFudChj'@;
put 'LGwpe3JudChjLGwpfSgicGx1cmFsaXplIixmdW5jdGlvbiBubnQoYyxsKXtyZXR1cm4gQXJyYXkuaXNBcnJheShjKSYmTnVtYmVyLmlzSW50ZWdlcihsKT9jW2xdOmN9KTtjb25zdCBWM2U9IkNvbnRleHRNZW51Oml0ZW1zIixHSz1gJHtWM2V9Lm5vSXRlbXNgLCRLPWAke1YzZX0uaW5zZXJ0'@;
put 'Um93QWJvdmVgLEtLPWAke1YzZX0uaW5zZXJ0Um93QmVsb3dgLHFLPWAke1YzZX0uaW5zZXJ0Q29sdW1uT25UaGVMZWZ0YCxYSz1gJHtWM2V9Lmluc2VydENvbHVtbk9uVGhlUmlnaHRgLEpLPWAke1YzZX0ucmVtb3ZlUm93YCxRSz1gJHtWM2V9LnJlbW92ZUNvbHVtbmAsZXE9YCR7VjNlfS51'@;
put 'bmRvYCx0cT1gJHtWM2V9LnJlZG9gLF9QPWAke1YzZX0ucmVhZE9ubHlgLG5xPWAke1YzZX0uY2xlYXJDb2x1bW5gLHJxPWAke1YzZX0uY29weWAsaXE9YCR7VjNlfS5jb3B5V2l0aEhlYWRlcnNgLGFxPWAke1YzZX0uY29weVdpdGhHcm91cEhlYWRlcnNgLG9xPWAke1YzZX0uY29weUhlYWRl'@;
put 'cnNPbmx5YCxzcT1gJHtWM2V9LmN1dGAsbHE9YCR7VjNlfS5mcmVlemVDb2x1bW5gLGNxPWAke1YzZX0udW5mcmVlemVDb2x1bW5gLHVxPWAke1YzZX0ubWVyZ2VDZWxsc2AsZHE9YCR7VjNlfS51bm1lcmdlQ2VsbHNgLGhxPWAke1YzZX0uYWRkQ29tbWVudGAsZnE9YCR7VjNlfS5lZGl0Q29t'@;
put 'bWVudGAscHE9YCR7VjNlfS5yZW1vdmVDb21tZW50YCxncT1gJHtWM2V9LnJlYWRPbmx5Q29tbWVudGAsbXE9YCR7VjNlfS5hbGlnbmAsdnE9YCR7VjNlfS5hbGlnbi5sZWZ0YCxicT1gJHtWM2V9LmFsaWduLmNlbnRlcmAseXE9YCR7VjNlfS5hbGlnbi5yaWdodGAsX3E9YCR7VjNlfS5hbGln'@;
put 'bi5qdXN0aWZ5YCx3cT1gJHtWM2V9LmFsaWduLnRvcGAsQ3E9YCR7VjNlfS5hbGlnbi5taWRkbGVgLFNxPWAke1YzZX0uYWxpZ24uYm90dG9tYCxNcT1gJHtWM2V9LmJvcmRlcnNgLHhxPWAke1YzZX0uYm9yZGVycy50b3BgLEVxPWAke1YzZX0uYm9yZGVycy5yaWdodGAsVHE9YCR7VjNlfS5i'@;
put 'b3JkZXJzLmJvdHRvbWAsQXE9YCR7VjNlfS5ib3JkZXJzLmxlZnRgLGtxPWAke1YzZX0uYm9yZGVycy5yZW1vdmVgLERxPWAke1YzZX0ubmVzdGVkSGVhZGVycy5pbnNlcnRDaGlsZFJvd2AsSXE9YCR7VjNlfS5uZXN0ZWRIZWFkZXJzLmRldGFjaEZyb21QYXJlbnRgLFJxPWAke1YzZX0uaGlk'@;
put 'ZUNvbHVtbmAsTHE9YCR7VjNlfS5zaG93Q29sdW1uYCxPcT1gJHtWM2V9LmhpZGVSb3dgLFBxPWAke1YzZX0uc2hvd1Jvd2AscTE9IkZpbHRlcnM6IixXYz1gJHtxMX1jb25kaXRpb25zYCx3UD1gJHtXY30ubm9uZWAsRnE9YCR7V2N9LmlzRW1wdHlgLEhxPWAke1djfS5pc05vdEVtcHR5YCxO'@;
put 'cT1gJHtXY30uaXNFcXVhbFRvYCxWcT1gJHtXY30uaXNOb3RFcXVhbFRvYCxCcT1gJHtXY30uYmVnaW5zV2l0aGAsanE9YCR7V2N9LmVuZHNXaXRoYCx6cT1gJHtXY30uY29udGFpbnNgLFVxPWAke1djfS5kb2VzTm90Q29udGFpbmAsc250PWAke1djfS5ieVZhbHVlYCxacT1gJHtXY30uZ3Jl'@;
put 'YXRlclRoYW5gLFdxPWAke1djfS5ncmVhdGVyVGhhbk9yRXF1YWxUb2AsWXE9YCR7V2N9Lmxlc3NUaGFuYCxHcT1gJHtXY30ubGVzc1RoYW5PckVxdWFsVG9gLCRxPWAke1djfS5pc0JldHdlZW5gLEtxPWAke1djfS5pc05vdEJldHdlZW5gLHFxPWAke1djfS5hZnRlcmAsWHE9YCR7V2N9LmJl'@;
put 'Zm9yZWAsSnE9YCR7V2N9LnRvZGF5YCxRcT1gJHtXY30udG9tb3Jyb3dgLGVYPWAke1djfS55ZXN0ZXJkYXlgLHRYPWAke3ExfWxhYmVscy5maWx0ZXJCeUNvbmRpdGlvbmAsblg9YCR7cTF9bGFiZWxzLmZpbHRlckJ5VmFsdWVgLHJYPWAke3ExfWxhYmVscy5jb25qdW5jdGlvbmAsQ1A9YCR7'@;
put 'cTF9bGFiZWxzLmRpc2p1bmN0aW9uYCxTUD1gJHtxMX12YWx1ZXMuYmxhbmtDZWxsc2AsaVg9YCR7cTF9YnV0dG9ucy5zZWxlY3RBbGxgLGFYPWAke3ExfWJ1dHRvbnMuY2xlYXJgLG9YPWAke3ExfWJ1dHRvbnMub2tgLHNYPWAke3ExfWJ1dHRvbnMuY2FuY2VsYCxsWD1gJHtxMX1idXR0b25z'@;
put 'LnBsYWNlaG9sZGVyLnNlYXJjaGAsY1g9YCR7cTF9YnV0dG9ucy5wbGFjZWhvbGRlci52YWx1ZWAsdVg9YCR7cTF9YnV0dG9ucy5wbGFjZWhvbGRlci5zZWNvbmRWYWx1ZWAsZFg9IkNoZWNrYm94UmVuZGVyZXI6IixoWD1gJHtkWH1jaGVja2VkYCxmWD1gJHtkWH11bmNoZWNrZWRgLEIzZT17'@;
put 'bGFuZ3VhZ2VDb2RlOiJlbi1VUyIsW0dLXToiTm8gYXZhaWxhYmxlIG9wdGlvbnMiLFskS106Ikluc2VydCByb3cgYWJvdmUiLFtLS106Ikluc2VydCByb3cgYmVsb3ciLFtxS106Ikluc2VydCBjb2x1bW4gbGVmdCIsW1hLXToiSW5zZXJ0IGNvbHVtbiByaWdodCIsW0pLXTpbIlJlbW92ZSBy'@;
put 'b3ciLCJSZW1vdmUgcm93cyJdLFtRS106WyJSZW1vdmUgY29sdW1uIiwiUmVtb3ZlIGNvbHVtbnMiXSxbZXFdOiJVbmRvIixbdHFdOiJSZWRvIixbX1BdOiJSZWFkIG9ubHkiLFtucV06IkNsZWFyIGNvbHVtbiIsW21xXToiQWxpZ25tZW50IixbdnFdOiJMZWZ0IixbYnFdOiJDZW50ZXIiLFt5'@;
put 'cV06IlJpZ2h0IixbX3FdOiJKdXN0aWZ5Iixbd3FdOiJUb3AiLFtDcV06Ik1pZGRsZSIsW1NxXToiQm90dG9tIixbbHFdOiJGcmVlemUgY29sdW1uIixbY3FdOiJVbmZyZWV6ZSBjb2x1bW4iLFtNcV06IkJvcmRlcnMiLFt4cV06IlRvcCIsW0VxXToiUmlnaHQiLFtUcV06IkJvdHRvbSIsW0Fx'@;
put 'XToiTGVmdCIsW2txXToiUmVtb3ZlIGJvcmRlcihzKSIsW2hxXToiQWRkIGNvbW1lbnQiLFtmcV06IkVkaXQgY29tbWVudCIsW3BxXToiRGVsZXRlIGNvbW1lbnQiLFtncV06IlJlYWQtb25seSBjb21tZW50IixbdXFdOiJNZXJnZSBjZWxscyIsW2RxXToiVW5tZXJnZSBjZWxscyIsW3JxXToi'@;
put 'Q29weSIsW2lxXTpbIkNvcHkgd2l0aCBoZWFkZXIiLCJDb3B5IHdpdGggaGVhZGVycyJdLFthcV06WyJDb3B5IHdpdGggZ3JvdXAgaGVhZGVyIiwiQ29weSB3aXRoIGdyb3VwIGhlYWRlcnMiXSxbb3FdOlsiQ29weSBoZWFkZXIgb25seSIsIkNvcHkgaGVhZGVycyBvbmx5Il0sW3NxXToiQ3V0'@;
put 'IixbRHFdOiJJbnNlcnQgY2hpbGQgcm93IixbSXFdOiJEZXRhY2ggZnJvbSBwYXJlbnQiLFtScV06WyJIaWRlIGNvbHVtbiIsIkhpZGUgY29sdW1ucyJdLFtMcV06WyJTaG93IGNvbHVtbiIsIlNob3cgY29sdW1ucyJdLFtPcV06WyJIaWRlIHJvdyIsIkhpZGUgcm93cyJdLFtQcV06WyJTaG93'@;
put 'IHJvdyIsIlNob3cgcm93cyJdLFt3UF06Ik5vbmUiLFtGcV06IklzIGVtcHR5IixbSHFdOiJJcyBub3QgZW1wdHkiLFtOcV06IklzIGVxdWFsIHRvIixbVnFdOiJJcyBub3QgZXF1YWwgdG8iLFtCcV06IkJlZ2lucyB3aXRoIixbanFdOiJFbmRzIHdpdGgiLFt6cV06IkNvbnRhaW5zIixbVXFd'@;
put 'OiJEb2VzIG5vdCBjb250YWluIixbWnFdOiJHcmVhdGVyIHRoYW4iLFtXcV06IkdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byIsW1lxXToiTGVzcyB0aGFuIixbR3FdOiJMZXNzIHRoYW4gb3IgZXF1YWwgdG8iLFskcV06IklzIGJldHdlZW4iLFtLcV06IklzIG5vdCBiZXR3ZWVuIixbcXFdOiJB'@;
put 'ZnRlciIsW1hxXToiQmVmb3JlIixbSnFdOiJUb2RheSIsW1FxXToiVG9tb3Jyb3ciLFtlWF06Illlc3RlcmRheSIsW1NQXToiQmxhbmsgY2VsbHMiLFt0WF06IkZpbHRlciBieSBjb25kaXRpb24iLFtuWF06IkZpbHRlciBieSB2YWx1ZSIsW3JYXToiQW5kIixbQ1BdOiJPciIsW2lYXToiU2Vs'@;
put 'ZWN0IGFsbCIsW2FYXToiQ2xlYXIiLFtvWF06Ik9LIixbc1hdOiJDYW5jZWwiLFtsWF06IlNlYXJjaCIsW2NYXToiVmFsdWUiLFt1WF06IlNlY29uZCB2YWx1ZSIsW2hYXToiQ2hlY2tlZCIsW2ZYXToiVW5jaGVja2VkIn0sbG50PVcscFg9QjNlLmxhbmd1YWdlQ29kZSx7cmVnaXN0ZXI6Y250'@;
put 'LGdldEl0ZW06ajNlLGhhc0l0ZW06dW50LGdldFZhbHVlczpkbnR9PXIzKCJsYW5ndWFnZXNEaWN0aW9uYXJpZXMiKTtmdW5jdGlvbiB6M2UoYyxsKXtsZXQgYT1jLGQ9bDtyZXR1cm4gcW8oYykmJihkPWMsYT1kLmxhbmd1YWdlQ29kZSksZnVuY3Rpb24gaG50KGMsbCl7YyE9PXBYJiZmdW5j'@;
put 'dGlvbiB0bnQoYyxsKXtYbyhsLChhLGQpPT57X2MoY1tkXSkmJihjW2RdPWEpfSl9KGwsajNlKHBYKSl9KGEsZCksY250KGEsZzEoZCkpLGcxKGQpfWZ1bmN0aW9uIFUzZShjKXtyZXR1cm4gZ1goYyk/ZzEoajNlKGMpKTpudWxsfWZ1bmN0aW9uIGdYKGMpe3JldHVybiB1bnQoYyl9ZnVuY3Rp'@;
put 'b24gWjNlKGMsbCxhKXtjb25zdCBkPVUzZShjKTtpZihudWxsPT09ZClyZXR1cm4gbnVsbDtjb25zdCBoPWRbbF07aWYoX2MoaCkpcmV0dXJuIG51bGw7Y29uc3QgZj1mdW5jdGlvbiBwbnQoYyxsKXtsZXQgYT1jO3JldHVybiBZbihmdW5jdGlvbiBvbnQoKXtyZXR1cm4gaW50KCl9KCksZD0+'@;
put 'e2E9ZChjLGwpfSksYX0oaCxhKTtyZXR1cm4gQXJyYXkuaXNBcnJheShmKT9mWzBdOmZ9ejNlKEIzZSk7Y29uc3QgVzNlPSJhY3RpdmUtaGVhZGVyIixtWD0iaGVhZGVyIix2WD0iYXJlYSIsUUU9ImZvY3VzIjtjbGFzcyBZM2V7Y29uc3RydWN0b3IobCxhKXt0aGlzLnNldHRpbmdzPWwsdGhp'@;
put 'cy5jZWxsUmFuZ2U9YXx8bnVsbH1pc0VtcHR5KCl7cmV0dXJuIG51bGw9PT10aGlzLmNlbGxSYW5nZX1hZGQobCl7cmV0dXJuIHRoaXMuaXNFbXB0eSgpP3RoaXMuY2VsbFJhbmdlPXRoaXMuc2V0dGluZ3MuY3JlYXRlQ2VsbFJhbmdlKGwpOnRoaXMuY2VsbFJhbmdlLmV4cGFuZChsKSx0aGlz'@;
put 'fXJlcGxhY2UobCxhKXtpZighdGhpcy5pc0VtcHR5KCkpe2lmKHRoaXMuY2VsbFJhbmdlLmZyb20uaXNFcXVhbChsKSlyZXR1cm4gdGhpcy5jZWxsUmFuZ2UuZnJvbT1hLCEwO2lmKHRoaXMuY2VsbFJhbmdlLnRvLmlzRXF1YWwobCkpcmV0dXJuIHRoaXMuY2VsbFJhbmdlLnRvPWEsITB9cmV0'@;
put 'dXJuITF9Y2xlYXIoKXtyZXR1cm4gdGhpcy5jZWxsUmFuZ2U9bnVsbCx0aGlzfWdldENvcm5lcnMoKXtjb25zdCBsPXRoaXMuY2VsbFJhbmdlLmdldE91dGVyVG9wU3RhcnRDb3JuZXIoKSxhPXRoaXMuY2VsbFJhbmdlLmdldE91dGVyQm90dG9tRW5kQ29ybmVyKCk7cmV0dXJuW2wucm93LGwu'@;
put 'Y29sLGEucm93LGEuY29sXX1kZXN0cm95KCl7dGhpcy5ydW5Mb2NhbEhvb2tzKCJkZXN0cm95Iil9fVRsKFkzZSx5MSk7Y29uc3QgX250PVkzZTtjb25zdCB4Zz1jbGFzcyBNbnQgZXh0ZW5kcyBfbnR7Y29uc3RydWN0b3IobCxhKXtzdXBlcihsLG51bGwpLGZ1bmN0aW9uIHdudChjLGwsYSl7'@;
put 'cmV0dXJuKGw9ZnVuY3Rpb24gQ250KGMpe3ZhciBsPWZ1bmN0aW9uIFNudChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVj'@;
put 'dCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBs'@;
put 'P2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9KHRoaXMsInZpc3VhbENlbGxSYW5nZSIsbnVsbCksdGhpcy52aXN1YWxDZWxsUmFuZ2U9YXx8bnVsbCx0'@;
put 'aGlzLmNvbW1pdCgpfWFkZChsKXtyZXR1cm4gbnVsbD09PXRoaXMudmlzdWFsQ2VsbFJhbmdlP3RoaXMudmlzdWFsQ2VsbFJhbmdlPXRoaXMuc2V0dGluZ3MuY3JlYXRlQ2VsbFJhbmdlKGwpOnRoaXMudmlzdWFsQ2VsbFJhbmdlLmV4cGFuZChsKSx0aGlzfWNsZWFyKCl7cmV0dXJuIHRoaXMu'@;
put 'dmlzdWFsQ2VsbFJhbmdlPW51bGwsc3VwZXIuY2xlYXIoKX10cmltVG9WaXNpYmxlQ2VsbHNSYW5nZU9ubHkobCl7bGV0e2Zyb206YSx0bzpkfT1sLGg9dGhpcy5nZXROZWFyZXN0Tm90SGlkZGVuQ29vcmRzKGEsMSksZj10aGlzLmdldE5lYXJlc3ROb3RIaWRkZW5Db29yZHMoZCwtMSk7cmV0'@;
put 'dXJuIG51bGw9PT1ofHxudWxsPT09Zj9udWxsOigoaC5yb3c+Zi5yb3d8fGguY29sPmYuY29sKSYmKGg9YSxmPWQpLHRoaXMuc2V0dGluZ3MuY3JlYXRlQ2VsbFJhbmdlKGgsaCxmKSl9Z2V0TmVhcmVzdE5vdEhpZGRlbkNvb3JkcyhsLGEpe2xldCBkPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9p'@;
put 'ZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTphO2NvbnN0IGg9dGhpcy5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgodGhpcy5zZXR0aW5ncy5yb3dJbmRleE1hcHBlcixsLnJvdyxhKTtpZihudWxsPT09aClyZXR1cm4gbnVsbDtjb25zdCBmPXRoaXMuZ2V0TmVhcmVzdE5vdEhpZGRl'@;
put 'bkluZGV4KHRoaXMuc2V0dGluZ3MuY29sdW1uSW5kZXhNYXBwZXIsbC5jb2wsZCk7cmV0dXJuIG51bGw9PT1mP251bGw6dGhpcy5zZXR0aW5ncy5jcmVhdGVDZWxsQ29vcmRzKGgsZil9Z2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGwsYSxkKXtyZXR1cm4gYTwwP2E6bC5nZXROZWFyZXN0Tm90'@;
put 'SGlkZGVuSW5kZXgoYSxkKX1jb21taXQoKXtpZihudWxsPT09dGhpcy52aXN1YWxDZWxsUmFuZ2UpcmV0dXJuIHRoaXM7Y29uc3QgbD10aGlzLnRyaW1Ub1Zpc2libGVDZWxsc1JhbmdlT25seSh0aGlzLnZpc3VhbENlbGxSYW5nZSk7cmV0dXJuIHRoaXMuY2VsbFJhbmdlPW51bGw9PT1sP251'@;
put 'bGw6dGhpcy5jcmVhdGVSZW5kZXJhYmxlQ2VsbFJhbmdlKGwuZnJvbSxsLnRvKSx0aGlzfXN5bmNXaXRoKGwpe2NvbnN0IGE9bC5mcm9tLmNsb25lKCkubm9ybWFsaXplKCksZD0iTi1TIj09PWwuZ2V0VmVydGljYWxEaXJlY3Rpb24oKT8xOi0xLGg9IlctRSI9PT1sLmdldEhvcml6b250YWxE'@;
put 'aXJlY3Rpb24oKT8xOi0xLGY9dGhpcy5zZXR0aW5ncy52aXN1YWxUb1JlbmRlcmFibGVDb29yZHModGhpcy52aXN1YWxDZWxsUmFuZ2UuaGlnaGxpZ2h0KTtsZXQgdj1udWxsO2lmKChudWxsPT09Znx8bnVsbD09PWYuY29sfHxudWxsPT09Zi5yb3cpJiYodj10aGlzLmdldE5lYXJlc3ROb3RI'@;
put 'aWRkZW5Db29yZHMoYSxkLGgpKSxudWxsIT09diYmbC5vdmVybGFwcyh2KSl7Y29uc3QgTT1sLmhpZ2hsaWdodC5jbG9uZSgpO2lmKE0ucm93Pj0wJiYoTS5yb3c9di5yb3cpLE0uY29sPj0wJiYoTS5jb2w9di5jb2wpLG51bGw9PT10aGlzLmNlbGxSYW5nZSl7Y29uc3QgRD10aGlzLnNldHRp'@;
put 'bmdzLnZpc3VhbFRvUmVuZGVyYWJsZUNvb3JkcyhNKTt0aGlzLmNlbGxSYW5nZT10aGlzLnNldHRpbmdzLmNyZWF0ZUNlbGxSYW5nZShEKX1sLnNldEhpZ2hsaWdodChNKX1yZXR1cm4iZm9jdXMiPT09dGhpcy5zZXR0aW5ncy5zZWxlY3Rpb25UeXBlJiZudWxsIT09ZiYmbnVsbD09PXYmJmwu'@;
put 'c2V0SGlnaGxpZ2h0KHRoaXMudmlzdWFsQ2VsbFJhbmdlLmhpZ2hsaWdodCksdGhpc31nZXRDb3JuZXJzKCl7Y29uc3R7ZnJvbTpsLHRvOmF9PXRoaXMuY2VsbFJhbmdlO3JldHVybltNYXRoLm1pbihsLnJvdyxhLnJvdyksTWF0aC5taW4obC5jb2wsYS5jb2wpLE1hdGgubWF4KGwucm93LGEu'@;
put 'cm93KSxNYXRoLm1heChsLmNvbCxhLmNvbCldfWdldFZpc3VhbENvcm5lcnMoKXtjb25zdCBsPXRoaXMuc2V0dGluZ3MucmVuZGVyYWJsZVRvVmlzdWFsQ29vcmRzKHRoaXMuY2VsbFJhbmdlLmdldFRvcFN0YXJ0Q29ybmVyKCkpLGE9dGhpcy5zZXR0aW5ncy5yZW5kZXJhYmxlVG9WaXN1YWxD'@;
put 'b29yZHModGhpcy5jZWxsUmFuZ2UuZ2V0Qm90dG9tRW5kQ29ybmVyKCkpO3JldHVybltsLnJvdyxsLmNvbCxhLnJvdyxhLmNvbF19Y3JlYXRlUmVuZGVyYWJsZUNlbGxSYW5nZShsLGEpe2NvbnN0IGQ9dGhpcy5zZXR0aW5ncy52aXN1YWxUb1JlbmRlcmFibGVDb29yZHMobCksaD10aGlzLnNl'@;
put 'dHRpbmdzLnZpc3VhbFRvUmVuZGVyYWJsZUNvb3JkcyhhKTtyZXR1cm4gbnVsbD09PWQucm93fHxudWxsPT09ZC5jb2x8fG51bGw9PT1oLnJvd3x8bnVsbD09PWguY29sP251bGw6dGhpcy5zZXR0aW5ncy5jcmVhdGVDZWxsUmFuZ2UoZCxkLGgpfX07ZnVuY3Rpb24gYlgoYyl7bGV0e2FjdGl2'@;
put 'ZUhlYWRlckNsYXNzTmFtZTpsLC4uLmF9PWM7cmV0dXJuIG5ldyB4Zyh7Y2xhc3NOYW1lOmwsLi4uYSxzZWxlY3Rpb25UeXBlOlczZX0pfWZ1bmN0aW9uIHhudChjKXtsZXR7YXJlYUNvcm5lclZpc2libGU6bCwuLi5hfT1jO3JldHVybiBuZXcgeGcoe2NsYXNzTmFtZToiYXJlYSIsY3JlYXRl'@;
put 'TGF5ZXJzOiEwLGJvcmRlcjp7d2lkdGg6MSxjb2xvcjoiIzRiODlmZiIsY29ybmVyVmlzaWJsZTpsfSwuLi5hLHNlbGVjdGlvblR5cGU6dlh9KX1mdW5jdGlvbiBFbnQoYyl7bGV0ey4uLmx9PWM7cmV0dXJuIG5ldyB4Zyh7Y2xhc3NOYW1lOiJoaWdobGlnaHQiLC4uLmwsc2VsZWN0aW9uVHlw'@;
put 'ZTp2WH0pfWZ1bmN0aW9uIFRudChjKXtsZXR7Y29sdW1uQ2xhc3NOYW1lOmwsLi4uYX09YztyZXR1cm4gbmV3IHhnKHtjbGFzc05hbWU6bCwuLi5hLHNlbGVjdGlvblR5cGU6ImNvbHVtbiJ9KX1mdW5jdGlvbiBHM2UoYyl7bGV0e2hlYWRlckNsYXNzTmFtZTpsLC4uLmF9PWM7cmV0dXJuIG5l'@;
put 'dyB4Zyh7Y2xhc3NOYW1lOmwsLi4uYSxzZWxlY3Rpb25UeXBlOm1YfSl9ZnVuY3Rpb24gSW50KGMpe2xldHtyb3dDbGFzc05hbWU6bCwuLi5hfT1jO3JldHVybiBuZXcgeGcoe2NsYXNzTmFtZTpsLC4uLmEsc2VsZWN0aW9uVHlwZToicm93In0pfWZ1bmN0aW9uIGpkKGMsbCxhKXtyZXR1cm4o'@;
put 'bD1mdW5jdGlvbiBPbnQoYyl7dmFyIGw9ZnVuY3Rpb24gUG50KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlw'@;
put 'ZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIi'@;
put 'fShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31mdW5jdGlvbiBFZyhjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFy'@;
put 'Z3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9dmFyIFBwPW5ldyBXZWFrU2V0O2NsYXNzIEZudHtjb25zdHJ1Y3RvcihsKXsoZnVuY3Rpb24gUm50KGMsbCl7KGZ1bmN0aW9uIExu'@;
put 'dChjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9KShjLGwpLGwuYWRkKGMpfSkodGhpcyxQcCksamQodGhpcywib3B0aW9ucyIsdm9pZCAwKSxqZCh0aGlz'@;
put 'LCJsYXllckxldmVsIiwwKSxqZCh0aGlzLCJmb2N1cyIsdm9pZCAwKSxqZCh0aGlzLCJmaWxsIix2b2lkIDApLGpkKHRoaXMsImxheWVyZWRBcmVhcyIsbmV3IE1hcCksamQodGhpcywiYXJlYXMiLG5ldyBNYXApLGpkKHRoaXMsInJvd0hlYWRlcnMiLG5ldyBNYXApLGpkKHRoaXMsImNvbHVt'@;
put 'bkhlYWRlcnMiLG5ldyBNYXApLGpkKHRoaXMsImFjdGl2ZVJvd0hlYWRlcnMiLG5ldyBNYXApLGpkKHRoaXMsImFjdGl2ZUNvbHVtbkhlYWRlcnMiLG5ldyBNYXApLGpkKHRoaXMsImFjdGl2ZUNvcm5lckhlYWRlcnMiLG5ldyBNYXApLGpkKHRoaXMsInJvd0hpZ2hsaWdodHMiLG5ldyBNYXAp'@;
put 'LGpkKHRoaXMsImNvbHVtbkhpZ2hsaWdodHMiLG5ldyBNYXApLGpkKHRoaXMsImN1c3RvbVNlbGVjdGlvbnMiLFtdKSx0aGlzLm9wdGlvbnM9bCx0aGlzLmZvY3VzPWZ1bmN0aW9uIEFudChjKXtsZXR7Y2VsbENvcm5lclZpc2libGU6bCwuLi5hfT1jO3JldHVybiBuZXcgeGcoe2NsYXNzTmFt'@;
put 'ZToiY3VycmVudCIsaGVhZGVyQXR0cmlidXRlczpbWyJhcmlhLXNlbGVjdGVkIiwidHJ1ZSJdXSxib3JkZXI6e3dpZHRoOjIsY29sb3I6IiM0Yjg5ZmYiLGNvcm5lclZpc2libGU6bH0sLi4uYSxzZWxlY3Rpb25UeXBlOlFFfSl9KGwpLHRoaXMuZmlsbD1mdW5jdGlvbiBEbnQoYyl7bGV0ey4u'@;
put 'Lmx9PWM7cmV0dXJuIG5ldyB4Zyh7Y2xhc3NOYW1lOiJmaWxsIixib3JkZXI6e3dpZHRoOjEsY29sb3I6IiNmZjAwMDAifSwuLi5sLHNlbGVjdGlvblR5cGU6ImZpbGwifSl9KGwpfWlzRW5hYmxlZEZvcihsLGEpe2xldCBkPWw7bD09PVFFJiYoZD0iY3VycmVudCIpO2xldCBoPXRoaXMub3B0'@;
put 'aW9ucy5kaXNhYmxlZENlbGxTZWxlY3Rpb24oYS5yb3csYS5jb2wpO3JldHVybiJzdHJpbmciPT10eXBlb2YgaCYmKGg9W2hdKSwhMT09PWh8fEFycmF5LmlzQXJyYXkoaCkmJiFoLmluY2x1ZGVzKGQpfXVzZUxheWVyTGV2ZWwoKXtyZXR1cm4gdGhpcy5sYXllckxldmVsPWFyZ3VtZW50cy5s'@;
put 'ZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTowLHRoaXN9Z2V0Rm9jdXMoKXtyZXR1cm4gdGhpcy5mb2N1c31nZXRGaWxsKCl7cmV0dXJuIHRoaXMuZmlsbH1jcmVhdGVMYXllcmVkQXJlYSgpe3JldHVybiBFZyhQcCx0aGlzLFRnKS5jYWxsKHRoaXMsdGhpcy5s'@;
put 'YXllcmVkQXJlYXMseG50KX1nZXRMYXllcmVkQXJlYXMoKXtyZXR1cm5bLi4udGhpcy5sYXllcmVkQXJlYXMudmFsdWVzKCldfWNyZWF0ZUFyZWEoKXtyZXR1cm4gRWcoUHAsdGhpcyxUZykuY2FsbCh0aGlzLHRoaXMuYXJlYXMsRW50KX1nZXRBcmVhcygpe3JldHVyblsuLi50aGlzLmFyZWFz'@;
put 'LnZhbHVlcygpXX1jcmVhdGVSb3dIZWFkZXIoKXtyZXR1cm4gRWcoUHAsdGhpcyxUZykuY2FsbCh0aGlzLHRoaXMucm93SGVhZGVycyxHM2UpfWdldFJvd0hlYWRlcnMoKXtyZXR1cm5bLi4udGhpcy5yb3dIZWFkZXJzLnZhbHVlcygpXX1jcmVhdGVDb2x1bW5IZWFkZXIoKXtyZXR1cm4gRWco'@;
put 'UHAsdGhpcyxUZykuY2FsbCh0aGlzLHRoaXMuY29sdW1uSGVhZGVycyxHM2UpfWdldENvbHVtbkhlYWRlcnMoKXtyZXR1cm5bLi4udGhpcy5jb2x1bW5IZWFkZXJzLnZhbHVlcygpXX1jcmVhdGVBY3RpdmVSb3dIZWFkZXIoKXtyZXR1cm4gRWcoUHAsdGhpcyxUZykuY2FsbCh0aGlzLHRoaXMu'@;
put 'YWN0aXZlUm93SGVhZGVycyxiWCl9Z2V0QWN0aXZlUm93SGVhZGVycygpe3JldHVyblsuLi50aGlzLmFjdGl2ZVJvd0hlYWRlcnMudmFsdWVzKCldfWNyZWF0ZUFjdGl2ZUNvbHVtbkhlYWRlcigpe3JldHVybiBFZyhQcCx0aGlzLFRnKS5jYWxsKHRoaXMsdGhpcy5hY3RpdmVDb2x1bW5IZWFk'@;
put 'ZXJzLGJYKX1nZXRBY3RpdmVDb2x1bW5IZWFkZXJzKCl7cmV0dXJuWy4uLnRoaXMuYWN0aXZlQ29sdW1uSGVhZGVycy52YWx1ZXMoKV19Y3JlYXRlQWN0aXZlQ29ybmVySGVhZGVyKCl7cmV0dXJuIEVnKFBwLHRoaXMsVGcpLmNhbGwodGhpcyx0aGlzLmFjdGl2ZUNvcm5lckhlYWRlcnMsYlgp'@;
put 'fWdldEFjdGl2ZUNvcm5lckhlYWRlcnMoKXtyZXR1cm5bLi4udGhpcy5hY3RpdmVDb3JuZXJIZWFkZXJzLnZhbHVlcygpXX1jcmVhdGVSb3dIaWdobGlnaHQoKXtyZXR1cm4gRWcoUHAsdGhpcyxUZykuY2FsbCh0aGlzLHRoaXMucm93SGlnaGxpZ2h0cyxJbnQpfWdldFJvd0hpZ2hsaWdodHMo'@;
put 'KXtyZXR1cm5bLi4udGhpcy5yb3dIaWdobGlnaHRzLnZhbHVlcygpXX1jcmVhdGVDb2x1bW5IaWdobGlnaHQoKXtyZXR1cm4gRWcoUHAsdGhpcyxUZykuY2FsbCh0aGlzLHRoaXMuY29sdW1uSGlnaGxpZ2h0cyxUbnQpfWdldENvbHVtbkhpZ2hsaWdodHMoKXtyZXR1cm5bLi4udGhpcy5jb2x1'@;
put 'bW5IaWdobGlnaHRzLnZhbHVlcygpXX1nZXRDdXN0b21TZWxlY3Rpb25zKCl7cmV0dXJuWy4uLnRoaXMuY3VzdG9tU2VsZWN0aW9ucy52YWx1ZXMoKV19YWRkQ3VzdG9tU2VsZWN0aW9uKGwpe3RoaXMuY3VzdG9tU2VsZWN0aW9ucy5wdXNoKGZ1bmN0aW9uIGtudChjKXtsZXR7Ym9yZGVyOmws'@;
put 'dmlzdWFsQ2VsbFJhbmdlOmEsLi4uZH09YztyZXR1cm4gbmV3IHhnKHsuLi5sLC4uLmQsc2VsZWN0aW9uVHlwZToiY3VzdG9tLXNlbGVjdGlvbiJ9LGEpfSh7Li4udGhpcy5vcHRpb25zLC4uLmx9KSl9Y2xlYXIoKXt0aGlzLmZvY3VzLmNsZWFyKCksdGhpcy5maWxsLmNsZWFyKCksWW4odGhp'@;
put 'cy5hcmVhcy52YWx1ZXMoKSxsPT57bC5jbGVhcigpfSksWW4odGhpcy5sYXllcmVkQXJlYXMudmFsdWVzKCksbD0+e2wuY2xlYXIoKX0pLFluKHRoaXMucm93SGVhZGVycy52YWx1ZXMoKSxsPT57bC5jbGVhcigpfSksWW4odGhpcy5jb2x1bW5IZWFkZXJzLnZhbHVlcygpLGw9PntsLmNsZWFy'@;
put 'KCl9KSxZbih0aGlzLmFjdGl2ZVJvd0hlYWRlcnMudmFsdWVzKCksbD0+e2wuY2xlYXIoKX0pLFluKHRoaXMuYWN0aXZlQ29sdW1uSGVhZGVycy52YWx1ZXMoKSxsPT57bC5jbGVhcigpfSksWW4odGhpcy5hY3RpdmVDb3JuZXJIZWFkZXJzLnZhbHVlcygpLGw9PntsLmNsZWFyKCl9KSxZbih0'@;
put 'aGlzLnJvd0hpZ2hsaWdodHMudmFsdWVzKCksbD0+e2wuY2xlYXIoKX0pLFluKHRoaXMuY29sdW1uSGlnaGxpZ2h0cy52YWx1ZXMoKSxsPT57bC5jbGVhcigpfSl9W1N5bWJvbC5pdGVyYXRvcl0oKXtyZXR1cm5bdGhpcy5mb2N1cyx0aGlzLmZpbGwsLi4udGhpcy5hcmVhcy52YWx1ZXMoKSwu'@;
put 'Li50aGlzLmxheWVyZWRBcmVhcy52YWx1ZXMoKSwuLi50aGlzLnJvd0hlYWRlcnMudmFsdWVzKCksLi4udGhpcy5jb2x1bW5IZWFkZXJzLnZhbHVlcygpLC4uLnRoaXMuYWN0aXZlUm93SGVhZGVycy52YWx1ZXMoKSwuLi50aGlzLmFjdGl2ZUNvbHVtbkhlYWRlcnMudmFsdWVzKCksLi4udGhp'@;
put 'cy5hY3RpdmVDb3JuZXJIZWFkZXJzLnZhbHVlcygpLC4uLnRoaXMucm93SGlnaGxpZ2h0cy52YWx1ZXMoKSwuLi50aGlzLmNvbHVtbkhpZ2hsaWdodHMudmFsdWVzKCksLi4udGhpcy5jdXN0b21TZWxlY3Rpb25zXVtTeW1ib2wuaXRlcmF0b3JdKCl9fWZ1bmN0aW9uIFRnKGMsbCl7Y29uc3Qg'@;
put 'YT10aGlzLmxheWVyTGV2ZWw7aWYoYy5oYXMoYSkpcmV0dXJuIGMuZ2V0KGEpO2NvbnN0IGQ9bCh7bGF5ZXJMZXZlbDphLC4uLnRoaXMub3B0aW9uc30pO3JldHVybiBjLnNldChhLGQpLGR9Y29uc3QgSG50PUZudDtmdW5jdGlvbiAkM2UoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIE5udChj'@;
put 'KXt2YXIgbD1mdW5jdGlvbiBWbnQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0'@;
put 'aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0'@;
put 'LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNsYXNzIEJudHtjb25zdHJ1Y3RvcihsKXskM2UodGhpcywicmFuZ2VzIixbXSksJDNlKHRoaXMsImNyZWF0ZUNlbGxSYW5nZSIsdm9pZCAwKSx0'@;
put 'aGlzLmNyZWF0ZUNlbGxSYW5nZT1sfWlzRW1wdHkoKXtyZXR1cm4gMD09PXRoaXMuc2l6ZSgpfXNldChsKXtyZXR1cm4gdGhpcy5jbGVhcigpLHRoaXMucmFuZ2VzLnB1c2godGhpcy5jcmVhdGVDZWxsUmFuZ2UobCkpLHRoaXN9YWRkKGwpe3JldHVybiB0aGlzLnJhbmdlcy5wdXNoKHRoaXMu'@;
put 'Y3JlYXRlQ2VsbFJhbmdlKGwpKSx0aGlzfXBvcCgpe3JldHVybiB0aGlzLnJhbmdlcy5wb3AoKSx0aGlzfWN1cnJlbnQoKXtyZXR1cm4gdGhpcy5wZWVrQnlJbmRleCh0aGlzLnNpemUoKS0xKX1wcmV2aW91cygpe3JldHVybiB0aGlzLnBlZWtCeUluZGV4KHRoaXMuc2l6ZSgpLTIpfWluY2x1'@;
put 'ZGVzKGwpe3JldHVybiB0aGlzLnJhbmdlcy5zb21lKGE9PmEuaW5jbHVkZXMobCkpfWNsZWFyKCl7cmV0dXJuIHRoaXMucmFuZ2VzLmxlbmd0aD0wLHRoaXN9c2l6ZSgpe3JldHVybiB0aGlzLnJhbmdlcy5sZW5ndGh9cGVla0J5SW5kZXgoKXtsZXQgYSxsPWFyZ3VtZW50cy5sZW5ndGg+MCYm'@;
put 'dm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTowO3JldHVybiBsPj0wJiZsPHRoaXMuc2l6ZSgpJiYoYT10aGlzLnJhbmdlc1tsXSksYX1bU3ltYm9sLml0ZXJhdG9yXSgpe3JldHVybiB0aGlzLnJhbmdlc1tTeW1ib2wuaXRlcmF0b3JdKCl9fWNvbnN0IGpudD1CbnQ7ZnVuY3Rp'@;
put 'b24geVgoYyxsLGEpe0szZShjLGwpLGwuc2V0KGMsYSl9ZnVuY3Rpb24gSzNlKGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX1mdW5jdGlvbiBqcyhjLGwp'@;
put 'e3JldHVybiBjLmdldChRdShjLGwpKX1mdW5jdGlvbiBNUChjLGwsYSl7cmV0dXJuIGMuc2V0KFF1KGMsbCksYSksYX1mdW5jdGlvbiBRdShjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3'@;
put 'IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9dmFyIHhQPW5ldyBXZWFrTWFwLHVjPW5ldyBXZWFrTWFwLHUzPW5ldyBXZWFrTWFwLHAwPW5ldyBXZWFrU2V0O2NsYXNzIHEzZXtjb25zdHJ1Y3RvcihsLGEpeyhmdW5jdGlvbiB6bnQo'@;
put 'YyxsKXtLM2UoYyxsKSxsLmFkZChjKX0pKHRoaXMscDApLHlYKHRoaXMseFAsdm9pZCAwKSx5WCh0aGlzLHVjLHZvaWQgMCkseVgodGhpcyx1Myx7eDowLHk6MH0pLE1QKHhQLHRoaXMsbCksTVAodWMsdGhpcyxhKX10cmFuc2Zvcm1TdGFydChsLGEpe2xldCBkPWFyZ3VtZW50cy5sZW5ndGg+'@;
put 'MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdJiZhcmd1bWVudHNbMl07Y29uc3QgaD1qcyh1Yyx0aGlzKS5jcmVhdGVDZWxsQ29vcmRzKGwsYSk7bGV0IGY9anMoeFAsdGhpcykuY3VycmVudCgpLmhpZ2hsaWdodDtjb25zdCB2PWpzKHVjLHRoaXMpLnZpc3VhbFRvUmVuZGVyYWJsZUNvb3Jkcyhm'@;
put 'KTtsZXQgTT0wLEQ9MDtpZih0aGlzLnJ1bkxvY2FsSG9va3MoImJlZm9yZVRyYW5zZm9ybVN0YXJ0IixoKSxudWxsIT09di5yb3cmJm51bGwhPT12LmNvbCl7Y29uc3R7d2lkdGg6WixoZWlnaHQ6cmV9PVF1KHAwLHRoaXMsSjNlKS5jYWxsKHRoaXMpLHtyb3c6Y2UsY29sOmJlfT1RdShwMCx0'@;
put 'aGlzLFEzZSkuY2FsbCh0aGlzLGYpLEVlPWpzKHVjLHRoaXMpLmZpeGVkUm93c0JvdHRvbSgpLEJlPWpzKHVjLHRoaXMpLm1pblNwYXJlUm93cygpLHFlPWpzKHVjLHRoaXMpLm1pblNwYXJlQ29scygpLHJ0PWpzKHVjLHRoaXMpLmF1dG9XcmFwUm93KCkscHQ9anModWMsdGhpcykuYXV0b1dy'@;
put 'YXBDb2woKSxkdD1qcyh1Yyx0aGlzKS5jcmVhdGVDZWxsQ29vcmRzKGNlK2gucm93LGJlK2guY29sKTtpZihkdC5yb3c+PXJlKXtjb25zdCBDbj1GZChkJiZCZT4wJiYwPT09RWUpLHRuPWR0LmNvbCsxLE1uPWpzKHVjLHRoaXMpLmNyZWF0ZUNlbGxDb29yZHMoZHQucm93LXJlLHRuPj1aP3Ru'@;
put 'LVo6dG4pO3RoaXMucnVuTG9jYWxIb29rcygiYmVmb3JlQ29sdW1uV3JhcCIsQ24sUXUocDAsdGhpcyxNXykuY2FsbCh0aGlzLE1uKSx0bj49WiksQ24udmFsdWU/dGhpcy5ydW5Mb2NhbEhvb2tzKCJpbnNlcnRSb3dSZXF1aXJlIixqcyh1Yyx0aGlzKS5jb3VudFJlbmRlcmFibGVSb3dzKCkp'@;
put 'OnB0JiZkdC5hc3NpZ24oTW4pfWVsc2UgaWYoZHQucm93PDApe2NvbnN0IENuPUZkKHB0KSx0bj1kdC5jb2wtMSxNbj1qcyh1Yyx0aGlzKS5jcmVhdGVDZWxsQ29vcmRzKHJlK2R0LnJvdyx0bjwwP1ordG46dG4pO3RoaXMucnVuTG9jYWxIb29rcygiYmVmb3JlQ29sdW1uV3JhcCIsQ24sUXUo'@;
put 'cDAsdGhpcyxNXykuY2FsbCh0aGlzLE1uKSx0bjwwKSxwdCYmZHQuYXNzaWduKE1uKX1pZihkdC5jb2w+PVope2NvbnN0IENuPUZkKGQmJnFlPjApLHRuPWR0LnJvdysxLE1uPWpzKHVjLHRoaXMpLmNyZWF0ZUNlbGxDb29yZHModG4+PXJlP3RuLXJlOnRuLGR0LmNvbC1aKTt0aGlzLnJ1bkxv'@;
put 'Y2FsSG9va3MoImJlZm9yZVJvd1dyYXAiLENuLFF1KHAwLHRoaXMsTV8pLmNhbGwodGhpcyxNbiksdG4+PXJlKSxDbi52YWx1ZT90aGlzLnJ1bkxvY2FsSG9va3MoImluc2VydENvbFJlcXVpcmUiLGpzKHVjLHRoaXMpLmNvdW50UmVuZGVyYWJsZUNvbHVtbnMoKSk6cnQmJmR0LmFzc2lnbihN'@;
put 'bil9ZWxzZSBpZihkdC5jb2w8MCl7Y29uc3QgQ249RmQocnQpLHRuPWR0LnJvdy0xLE1uPWpzKHVjLHRoaXMpLmNyZWF0ZUNlbGxDb29yZHModG48MD9yZSt0bjp0bixaK2R0LmNvbCk7dGhpcy5ydW5Mb2NhbEhvb2tzKCJiZWZvcmVSb3dXcmFwIixDbixRdShwMCx0aGlzLE1fKS5jYWxsKHRo'@;
put 'aXMsTW4pLHRuPDApLHJ0JiZkdC5hc3NpZ24oTW4pfWNvbnN0e3Jvd0RpcjpKdCxjb2xEaXI6dm59PVF1KHAwLHRoaXMsWDNlKS5jYWxsKHRoaXMsZHQpO009SnQsRD12bixmPVF1KHAwLHRoaXMsTV8pLmNhbGwodGhpcyxkdCl9cmV0dXJuIHRoaXMucnVuTG9jYWxIb29rcygiYWZ0ZXJUcmFu'@;
put 'c2Zvcm1TdGFydCIsZixNLEQpLGZ9dHJhbnNmb3JtRW5kKGwsYSl7Y29uc3QgZD1qcyh1Yyx0aGlzKS5jcmVhdGVDZWxsQ29vcmRzKGwsYSksaD1qcyh4UCx0aGlzKS5jdXJyZW50KCksZj1qcyh1Yyx0aGlzKS52aXN1YWxUb1JlbmRlcmFibGVDb29yZHMoaC5oaWdobGlnaHQpLHY9UXUocDAs'@;
put 'dGhpcyxfWCkuY2FsbCh0aGlzLGgudG8ucm93LGguZnJvbS5yb3cpLE09UXUocDAsdGhpcyx3WCkuY2FsbCh0aGlzLGgudG8uY29sLGguZnJvbS5jb2wpLEQ9aC50by5jbG9uZSgpO2xldCBaPTAscmU9MDtpZih0aGlzLnJ1bkxvY2FsSG9va3MoImJlZm9yZVRyYW5zZm9ybUVuZCIsZCksbnVs'@;
put 'bCE9PWYucm93JiZudWxsIT09Zi5jb2wmJm51bGwhPT12JiZudWxsIT09TSl7Y29uc3R7cm93OmNlLGNvbDpiZX09UXUocDAsdGhpcyxRM2UpLmNhbGwodGhpcyxoLmhpZ2hsaWdodCksRWU9anModWMsdGhpcykuY3JlYXRlQ2VsbENvb3Jkcyh2K2Qucm93LE0rZC5jb2wpLEJlPWguZ2V0VG9w'@;
put 'U3RhcnRDb3JuZXIoKSxxZT1oLmdldFRvcEVuZENvcm5lcigpLHJ0PWguZ2V0Qm90dG9tRW5kQ29ybmVyKCk7aWYoZC5jb2w8MCYmTT49YmUmJkVlLmNvbDxiZSl7Y29uc3Qgdm49RWUuY29sLWJlO0VlLmNvbD1RdShwMCx0aGlzLHdYKS5jYWxsKHRoaXMsQmUuY29sLHFlLmNvbCkrdm59ZWxz'@;
put 'ZSBpZihkLmNvbD4wJiZNPD1iZSYmRWUuY29sPmJlKXtjb25zdCB2bj1RdShwMCx0aGlzLHdYKS5jYWxsKHRoaXMscWUuY29sLEJlLmNvbCksQ249TWF0aC5tYXgoRWUuY29sLXZuLDEpO0VlLmNvbD12bitDbn1pZihkLnJvdzwwJiZ2Pj1jZSYmRWUucm93PGNlKXtjb25zdCB2bj1FZS5yb3ct'@;
put 'Y2U7RWUucm93PVF1KHAwLHRoaXMsX1gpLmNhbGwodGhpcyxCZS5yb3cscnQucm93KSt2bn1lbHNlIGlmKGQucm93PjAmJnY8PWNlJiZFZS5yb3c+Y2Upe2NvbnN0IHZuPVF1KHAwLHRoaXMsX1gpLmNhbGwodGhpcyxydC5yb3csQmUucm93KSxDbj1NYXRoLm1heChFZS5yb3ctdm4sMSk7RWUu'@;
put 'cm93PXZuK0NufWNvbnN0e3Jvd0RpcjpwdCxjb2xEaXI6ZHR9PVF1KHAwLHRoaXMsWDNlKS5jYWxsKHRoaXMsRWUpO1o9cHQscmU9ZHQ7Y29uc3QgSnQ9UXUocDAsdGhpcyxNXykuY2FsbCh0aGlzLEVlKTswPT09ZC5yb3cmJjAhPT1kLmNvbD9ELmNvbD1KdC5jb2w6MCE9PWQucm93JiYwPT09'@;
put 'ZC5jb2w/RC5yb3c9SnQucm93OihELnJvdz1KdC5yb3csRC5jb2w9SnQuY29sKX1yZXR1cm4gdGhpcy5ydW5Mb2NhbEhvb2tzKCJhZnRlclRyYW5zZm9ybUVuZCIsRCxaLHJlKSxEfXNldE9mZnNldFNpemUobCl7bGV0e3g6YSx5OmR9PWw7TVAodTMsdGhpcyx7eDphLHk6ZH0pfXJlc2V0T2Zm'@;
put 'c2V0U2l6ZSgpe01QKHUzLHRoaXMse3g6MCx5OjB9KX19ZnVuY3Rpb24gWDNlKGMpe2NvbnN0e3dpZHRoOmwsaGVpZ2h0OmF9PVF1KHAwLHRoaXMsSjNlKS5jYWxsKHRoaXMpO2xldCBkPTAsaD0wO3JldHVybiBjLnJvdzwwPyhkPS0xLGMucm93PTApOmMucm93PjAmJmMucm93Pj1hJiYoZD0x'@;
put 'LGMucm93PWEtMSksYy5jb2w8MD8oaD0tMSxjLmNvbD0wKTpjLmNvbD4wJiZjLmNvbD49bCYmKGg9MSxjLmNvbD1sLTEpLHtyb3dEaXI6ZCxjb2xEaXI6aH19ZnVuY3Rpb24gSjNlKCl7cmV0dXJue3dpZHRoOmpzKHUzLHRoaXMpLngranModWMsdGhpcykuY291bnRSZW5kZXJhYmxlQ29sdW1u'@;
put 'cygpLGhlaWdodDpqcyh1Myx0aGlzKS55K2pzKHVjLHRoaXMpLmNvdW50UmVuZGVyYWJsZVJvd3MoKX19ZnVuY3Rpb24gX1goYyxsKXtjb25zdCBhPWpzKHVjLHRoaXMpLmZpbmRGaXJzdE5vbkhpZGRlblJlbmRlcmFibGVSb3coYyxsKTtyZXR1cm4gbnVsbD09PWE/bnVsbDpqcyh1Myx0aGlz'@;
put 'KS55K2F9ZnVuY3Rpb24gd1goYyxsKXtjb25zdCBhPWpzKHVjLHRoaXMpLmZpbmRGaXJzdE5vbkhpZGRlblJlbmRlcmFibGVDb2x1bW4oYyxsKTtyZXR1cm4gbnVsbD09PWE/bnVsbDpqcyh1Myx0aGlzKS54K2F9ZnVuY3Rpb24gUTNlKGMpe2NvbnN0e3JvdzpsLGNvbDphfT1qcyh1Yyx0aGlz'@;
put 'KS52aXN1YWxUb1JlbmRlcmFibGVDb29yZHMoYyk7aWYobnVsbD09PWx8fG51bGw9PT1hKXRocm93IG5ldyBFcnJvcigiUmVuZGVyYWJsZSBjb29yZHMgYXJlIG5vdCB2aXNpYmxlLiIpO3JldHVybiBqcyh1Yyx0aGlzKS5jcmVhdGVDZWxsQ29vcmRzKGpzKHUzLHRoaXMpLnkrbCxqcyh1Myx0'@;
put 'aGlzKS54K2EpfWZ1bmN0aW9uIE1fKGMpe2NvbnN0IGw9Yy5jbG9uZSgpO3JldHVybiBsLmNvbD1jLmNvbC1qcyh1Myx0aGlzKS54LGwucm93PWMucm93LWpzKHUzLHRoaXMpLnksanModWMsdGhpcykucmVuZGVyYWJsZVRvVmlzdWFsQ29vcmRzKGwpfVRsKHEzZSx5MSk7Y29uc3QgZXBlPXEz'@;
put 'ZSxVbnQ9WzMsMl0sWm50PVtbIm51bWJlciJdLFsibnVtYmVyIiwic3RyaW5nIl0sWyJudW1iZXIiLCJ1bmRlZmluZWQiXSxbIm51bWJlciIsInN0cmluZyIsInVuZGVmaW5lZCJdXSxTWD1TeW1ib2woInJvb3QiKSxucGU9U3ltYm9sKCJjaGlsZCIpO2Z1bmN0aW9uIHhfKGMpe2xldCBsPWFy'@;
put 'Z3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpTWDtpZihsIT09U1gmJmwhPT1ucGUpdGhyb3cgbmV3IEVycm9yKCJUaGUgc2Vjb25kIGFyZ3VtZW50IGlzIHVzZWQgaW50ZXJuYWxseSBvbmx5IGFuZCBjYW5ub3QgYmUgb3ZlcndyaXR0ZW4uIik7'@;
put 'Y29uc3QgYT1BcnJheS5pc0FycmF5KGMpLGQ9bD09PVNYO2xldCBoPTA7aWYoYSl7Y29uc3QgZj1jWzBdOzA9PT1jLmxlbmd0aD9oPTE6ZCYmZiBpbnN0YW5jZW9mIGdLP2g9MzpkJiZBcnJheS5pc0FycmF5KGYpP2g9eF8oZixucGUpOmMubGVuZ3RoPj0yJiZjLmxlbmd0aDw9NCYmIWMuc29t'@;
put 'ZSgoTSxEKT0+IVpudFtEXS5pbmNsdWRlcyh0eXBlb2YgTSkpJiYoaD0yKX1yZXR1cm4gaH1mdW5jdGlvbiBlVChjKXtsZXR7Y3JlYXRlQ2VsbENvb3JkczpsLGNyZWF0ZUNlbGxSYW5nZTphLGtlZXBEaXJlY3Rpb246ZD0hMSxwcm9wVG9Db2w6aH09YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lk'@;
put 'IDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnt9O2lmKCFVbnQuaW5jbHVkZXMoYykpdGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCBzZWxlY3Rpb24gcmFuZ2VzIHNjaGVtYSB0eXBlIHdhcyBwcm92aWRlZC4iKTtyZXR1cm4gZnVuY3Rpb24oZil7Y29uc3Qgdj0zPT09YztsZXQg'@;
put 'TT12P2YuZnJvbS5yb3c6ZlswXSxEPXY/Zi5mcm9tLmNvbDpmWzFdLFo9dj9mLnRvLnJvdzpmWzJdLHJlPXY/Zi50by5jb2w6ZlszXTtpZigiZnVuY3Rpb24iPT10eXBlb2YgaCYmKCJzdHJpbmciPT10eXBlb2YgRCYmKEQ9aChEKSksInN0cmluZyI9PXR5cGVvZiByZSYmKHJlPWgocmUpKSks'@;
put 'X2MoWikmJihaPU0pLF9jKHJlKSYmKHJlPUQpLCFkKXtjb25zdCBFZT1NLEJlPUQscWU9WixydD1yZTtNPU1hdGgubWluKEVlLHFlKSxEPU1hdGgubWluKEJlLHJ0KSxaPU1hdGgubWF4KEVlLHFlKSxyZT1NYXRoLm1heChCZSxydCl9Y29uc3QgY2U9bChNLEQpLGJlPWwoWixyZSk7cmV0dXJu'@;
put 'IGEoY2UsY2UsYmUpfX1mdW5jdGlvbiBFXyhjLGwsYSl7KGZ1bmN0aW9uIEdudChjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9KShjLGwpLGwuc2V0KGMs'@;
put 'YSl9ZnVuY3Rpb24gdDkoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uICRudChjKXt2YXIgbD1mdW5jdGlvbiBLbnQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxs'@;
put 'fHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3Jl'@;
put 'dHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWZ1bmN0aW9uIENjKGMsbCl7cmV0dXJuIGMuZ2V0KHJwZShjLGwp'@;
put 'KX1mdW5jdGlvbiBGcChjLGwsYSl7cmV0dXJuIGMuc2V0KHJwZShjLGwpLGEpLGF9ZnVuY3Rpb24gcnBlKGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRl'@;
put 'IGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX12YXIgXzE9bmV3IFdlYWtNYXAsbjk9bmV3IFdlYWtNYXAsQVA9bmV3IFdlYWtNYXAsdFQ9bmV3IFdlYWtNYXAsa1A9bmV3IFdlYWtNYXAsblQ9bmV3IFdlYWtNYXA7Y2xhc3MgaXBle2NvbnN0cnVjdG9yKGwsYSl7dmFy'@;
put 'IGQ9dGhpczt0OSh0aGlzLCJzZXR0aW5ncyIsdm9pZCAwKSx0OSh0aGlzLCJ0YWJsZVByb3BzIix2b2lkIDApLHQ5KHRoaXMsImluUHJvZ3Jlc3MiLCExKSx0OSh0aGlzLCJzZWxlY3RlZFJhbmdlIixuZXcgam50KChoLGYsdik9PnRoaXMudGFibGVQcm9wcy5jcmVhdGVDZWxsUmFuZ2UoaCxm'@;
put 'LHYpKSksdDkodGhpcywiaGlnaGxpZ2h0Iix2b2lkIDApLEVfKHRoaXMsXzEsdm9pZCAwKSxFXyh0aGlzLG45LHZvaWQgMCksdDkodGhpcywic2VsZWN0ZWRCeVJvd0hlYWRlciIsbmV3IFNldCksdDkodGhpcywic2VsZWN0ZWRCeUNvbHVtbkhlYWRlciIsbmV3IFNldCksRV8odGhpcyxBUCwh'@;
put 'MSksRV8odGhpcyx0VCwhMSksRV8odGhpcyxrUCwidW5rbm93biIpLEVfKHRoaXMsblQsLTEpLHRoaXMuc2V0dGluZ3M9bCx0aGlzLnRhYmxlUHJvcHM9YSx0aGlzLmhpZ2hsaWdodD1uZXcgSG50KHtoZWFkZXJDbGFzc05hbWU6bC5jdXJyZW50SGVhZGVyQ2xhc3NOYW1lLGFjdGl2ZUhlYWRl'@;
put 'ckNsYXNzTmFtZTpsLmFjdGl2ZUhlYWRlckNsYXNzTmFtZSxyb3dDbGFzc05hbWU6bC5jdXJyZW50Um93Q2xhc3NOYW1lLGNvbHVtbkNsYXNzTmFtZTpsLmN1cnJlbnRDb2xDbGFzc05hbWUsY2VsbEF0dHJpYnV0ZXM6W1siYXJpYS1zZWxlY3RlZCIsInRydWUiXV0scm93SW5kZXhNYXBwZXI6'@;
put 'dGhpcy50YWJsZVByb3BzLnJvd0luZGV4TWFwcGVyLGNvbHVtbkluZGV4TWFwcGVyOnRoaXMudGFibGVQcm9wcy5jb2x1bW5JbmRleE1hcHBlcixkaXNhYmxlZENlbGxTZWxlY3Rpb246KGgsZik9PnRoaXMudGFibGVQcm9wcy5pc0Rpc2FibGVkQ2VsbFNlbGVjdGlvbihoLGYpLGNlbGxDb3Ju'@;
put 'ZXJWaXNpYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIGQuaXNDZWxsQ29ybmVyVmlzaWJsZSguLi5hcmd1bWVudHMpfSxhcmVhQ29ybmVyVmlzaWJsZTpmdW5jdGlvbigpe3JldHVybiBkLmlzQXJlYUNvcm5lclZpc2libGUoLi4uYXJndW1lbnRzKX0sdmlzdWFsVG9SZW5kZXJhYmxlQ29vcmRzOmg9'@;
put 'PnRoaXMudGFibGVQcm9wcy52aXN1YWxUb1JlbmRlcmFibGVDb29yZHMoaCkscmVuZGVyYWJsZVRvVmlzdWFsQ29vcmRzOmg9PnRoaXMudGFibGVQcm9wcy5yZW5kZXJhYmxlVG9WaXN1YWxDb29yZHMoaCksY3JlYXRlQ2VsbENvb3JkczooaCxmKT0+dGhpcy50YWJsZVByb3BzLmNyZWF0ZUNl'@;
put 'bGxDb29yZHMoaCxmKSxjcmVhdGVDZWxsUmFuZ2U6KGgsZix2KT0+dGhpcy50YWJsZVByb3BzLmNyZWF0ZUNlbGxSYW5nZShoLGYsdil9KSxGcChfMSx0aGlzLG5ldyBlcGUodGhpcy5zZWxlY3RlZFJhbmdlLHtyb3dJbmRleE1hcHBlcjp0aGlzLnRhYmxlUHJvcHMucm93SW5kZXhNYXBwZXIs'@;
put 'Y29sdW1uSW5kZXhNYXBwZXI6dGhpcy50YWJsZVByb3BzLmNvbHVtbkluZGV4TWFwcGVyLGNvdW50UmVuZGVyYWJsZVJvd3M6KCk9PnRoaXMudGFibGVQcm9wcy5jb3VudFJlbmRlcmFibGVSb3dzKCksY291bnRSZW5kZXJhYmxlQ29sdW1uczooKT0+dGhpcy50YWJsZVByb3BzLmNvdW50UmVu'@;
put 'ZGVyYWJsZUNvbHVtbnMoKSx2aXN1YWxUb1JlbmRlcmFibGVDb29yZHM6aD0+dGhpcy50YWJsZVByb3BzLnZpc3VhbFRvUmVuZGVyYWJsZUNvb3JkcyhoKSxyZW5kZXJhYmxlVG9WaXN1YWxDb29yZHM6aD0+dGhpcy50YWJsZVByb3BzLnJlbmRlcmFibGVUb1Zpc3VhbENvb3JkcyhoKSxmaW5k'@;
put 'Rmlyc3ROb25IaWRkZW5SZW5kZXJhYmxlUm93OmZ1bmN0aW9uKCl7cmV0dXJuIGQudGFibGVQcm9wcy5maW5kRmlyc3ROb25IaWRkZW5SZW5kZXJhYmxlUm93KC4uLmFyZ3VtZW50cyl9LGZpbmRGaXJzdE5vbkhpZGRlblJlbmRlcmFibGVDb2x1bW46ZnVuY3Rpb24oKXtyZXR1cm4gZC50YWJs'@;
put 'ZVByb3BzLmZpbmRGaXJzdE5vbkhpZGRlblJlbmRlcmFibGVDb2x1bW4oLi4uYXJndW1lbnRzKX0sY3JlYXRlQ2VsbENvb3JkczooaCxmKT0+dGhpcy50YWJsZVByb3BzLmNyZWF0ZUNlbGxDb29yZHMoaCxmKSxmaXhlZFJvd3NCb3R0b206KCk9PmwuZml4ZWRSb3dzQm90dG9tLG1pblNwYXJl'@;
put 'Um93czooKT0+bC5taW5TcGFyZVJvd3MsbWluU3BhcmVDb2xzOigpPT5sLm1pblNwYXJlQ29scyxhdXRvV3JhcFJvdzooKT0+bC5hdXRvV3JhcFJvdyxhdXRvV3JhcENvbDooKT0+bC5hdXRvV3JhcENvbH0pKSxGcChuOSx0aGlzLG5ldyBlcGUodGhpcy5zZWxlY3RlZFJhbmdlLHtyb3dJbmRl'@;
put 'eE1hcHBlcjp0aGlzLnRhYmxlUHJvcHMucm93SW5kZXhNYXBwZXIsY29sdW1uSW5kZXhNYXBwZXI6dGhpcy50YWJsZVByb3BzLmNvbHVtbkluZGV4TWFwcGVyLGNvdW50UmVuZGVyYWJsZVJvd3M6KCk9Pntjb25zdCBoPXRoaXMuc2VsZWN0ZWRSYW5nZS5jdXJyZW50KCk7cmV0dXJuIHRoaXMu'@;
put 'dGFibGVQcm9wcy5jb3VudFJlbmRlcmFibGVSb3dzSW5SYW5nZSgwLGguZ2V0T3V0ZXJCb3R0b21FbmRDb3JuZXIoKS5yb3cpfSxjb3VudFJlbmRlcmFibGVDb2x1bW5zOigpPT57Y29uc3QgaD10aGlzLnNlbGVjdGVkUmFuZ2UuY3VycmVudCgpO3JldHVybiB0aGlzLnRhYmxlUHJvcHMuY291'@;
put 'bnRSZW5kZXJhYmxlQ29sdW1uc0luUmFuZ2UoMCxoLmdldE91dGVyQm90dG9tRW5kQ29ybmVyKCkuY29sKX0sdmlzdWFsVG9SZW5kZXJhYmxlQ29vcmRzOmg9PnRoaXMudGFibGVQcm9wcy52aXN1YWxUb1JlbmRlcmFibGVDb29yZHMoaCkscmVuZGVyYWJsZVRvVmlzdWFsQ29vcmRzOmg9PnRo'@;
put 'aXMudGFibGVQcm9wcy5yZW5kZXJhYmxlVG9WaXN1YWxDb29yZHMoaCksZmluZEZpcnN0Tm9uSGlkZGVuUmVuZGVyYWJsZVJvdzpmdW5jdGlvbigpe3JldHVybiBkLnRhYmxlUHJvcHMuZmluZEZpcnN0Tm9uSGlkZGVuUmVuZGVyYWJsZVJvdyguLi5hcmd1bWVudHMpfSxmaW5kRmlyc3ROb25I'@;
put 'aWRkZW5SZW5kZXJhYmxlQ29sdW1uOmZ1bmN0aW9uKCl7cmV0dXJuIGQudGFibGVQcm9wcy5maW5kRmlyc3ROb25IaWRkZW5SZW5kZXJhYmxlQ29sdW1uKC4uLmFyZ3VtZW50cyl9LGNyZWF0ZUNlbGxDb29yZHM6KGgsZik9PnRoaXMudGFibGVQcm9wcy5jcmVhdGVDZWxsQ29vcmRzKGgsZiks'@;
put 'Zml4ZWRSb3dzQm90dG9tOigpPT4wLG1pblNwYXJlUm93czooKT0+MCxtaW5TcGFyZUNvbHM6KCk9PjAsYXV0b1dyYXBSb3c6KCk9PiEwLGF1dG9XcmFwQ29sOigpPT4hMH0pKSxDYyhfMSx0aGlzKS5hZGRMb2NhbEhvb2soImJlZm9yZVRyYW5zZm9ybVN0YXJ0IixmdW5jdGlvbigpe2Zvcih2'@;
put 'YXIgaD1hcmd1bWVudHMubGVuZ3RoLGY9bmV3IEFycmF5KGgpLHY9MDt2PGg7disrKWZbdl09YXJndW1lbnRzW3ZdO3JldHVybiBkLnJ1bkxvY2FsSG9va3MoImJlZm9yZU1vZGlmeVRyYW5zZm9ybVN0YXJ0IiwuLi5mKX0pLENjKF8xLHRoaXMpLmFkZExvY2FsSG9vaygiYWZ0ZXJUcmFuc2Zv'@;
put 'cm1TdGFydCIsZnVuY3Rpb24oKXtmb3IodmFyIGg9YXJndW1lbnRzLmxlbmd0aCxmPW5ldyBBcnJheShoKSx2PTA7djxoO3YrKylmW3ZdPWFyZ3VtZW50c1t2XTtyZXR1cm4gZC5ydW5Mb2NhbEhvb2tzKCJhZnRlck1vZGlmeVRyYW5zZm9ybVN0YXJ0IiwuLi5mKX0pLENjKF8xLHRoaXMpLmFk'@;
put 'ZExvY2FsSG9vaygiYmVmb3JlVHJhbnNmb3JtRW5kIixmdW5jdGlvbigpe2Zvcih2YXIgaD1hcmd1bWVudHMubGVuZ3RoLGY9bmV3IEFycmF5KGgpLHY9MDt2PGg7disrKWZbdl09YXJndW1lbnRzW3ZdO3JldHVybiBkLnJ1bkxvY2FsSG9va3MoImJlZm9yZU1vZGlmeVRyYW5zZm9ybUVuZCIs'@;
put 'Li4uZil9KSxDYyhfMSx0aGlzKS5hZGRMb2NhbEhvb2soImFmdGVyVHJhbnNmb3JtRW5kIixmdW5jdGlvbigpe2Zvcih2YXIgaD1hcmd1bWVudHMubGVuZ3RoLGY9bmV3IEFycmF5KGgpLHY9MDt2PGg7disrKWZbdl09YXJndW1lbnRzW3ZdO3JldHVybiBkLnJ1bkxvY2FsSG9va3MoImFmdGVy'@;
put 'TW9kaWZ5VHJhbnNmb3JtRW5kIiwuLi5mKX0pLENjKF8xLHRoaXMpLmFkZExvY2FsSG9vaygiaW5zZXJ0Um93UmVxdWlyZSIsZnVuY3Rpb24oKXtmb3IodmFyIGg9YXJndW1lbnRzLmxlbmd0aCxmPW5ldyBBcnJheShoKSx2PTA7djxoO3YrKylmW3ZdPWFyZ3VtZW50c1t2XTtyZXR1cm4gZC5y'@;
put 'dW5Mb2NhbEhvb2tzKCJpbnNlcnRSb3dSZXF1aXJlIiwuLi5mKX0pLENjKF8xLHRoaXMpLmFkZExvY2FsSG9vaygiaW5zZXJ0Q29sUmVxdWlyZSIsZnVuY3Rpb24oKXtmb3IodmFyIGg9YXJndW1lbnRzLmxlbmd0aCxmPW5ldyBBcnJheShoKSx2PTA7djxoO3YrKylmW3ZdPWFyZ3VtZW50c1t2'@;
put 'XTtyZXR1cm4gZC5ydW5Mb2NhbEhvb2tzKCJpbnNlcnRDb2xSZXF1aXJlIiwuLi5mKX0pLENjKF8xLHRoaXMpLmFkZExvY2FsSG9vaygiYmVmb3JlUm93V3JhcCIsZnVuY3Rpb24oKXtmb3IodmFyIGg9YXJndW1lbnRzLmxlbmd0aCxmPW5ldyBBcnJheShoKSx2PTA7djxoO3YrKylmW3ZdPWFy'@;
put 'Z3VtZW50c1t2XTtyZXR1cm4gZC5ydW5Mb2NhbEhvb2tzKCJiZWZvcmVSb3dXcmFwIiwuLi5mKX0pLENjKF8xLHRoaXMpLmFkZExvY2FsSG9vaygiYmVmb3JlQ29sdW1uV3JhcCIsZnVuY3Rpb24oKXtmb3IodmFyIGg9YXJndW1lbnRzLmxlbmd0aCxmPW5ldyBBcnJheShoKSx2PTA7djxoO3Yr'@;
put 'KylmW3ZdPWFyZ3VtZW50c1t2XTtyZXR1cm4gZC5ydW5Mb2NhbEhvb2tzKCJiZWZvcmVDb2x1bW5XcmFwIiwuLi5mKX0pLENjKG45LHRoaXMpLmFkZExvY2FsSG9vaygiYmVmb3JlVHJhbnNmb3JtU3RhcnQiLGZ1bmN0aW9uKCl7Zm9yKHZhciBoPWFyZ3VtZW50cy5sZW5ndGgsZj1uZXcgQXJy'@;
put 'YXkoaCksdj0wO3Y8aDt2KyspZlt2XT1hcmd1bWVudHNbdl07cmV0dXJuIGQucnVuTG9jYWxIb29rcygiYmVmb3JlTW9kaWZ5VHJhbnNmb3JtRm9jdXMiLC4uLmYpfSksQ2MobjksdGhpcykuYWRkTG9jYWxIb29rKCJhZnRlclRyYW5zZm9ybVN0YXJ0IixmdW5jdGlvbigpe2Zvcih2YXIgaD1h'@;
put 'cmd1bWVudHMubGVuZ3RoLGY9bmV3IEFycmF5KGgpLHY9MDt2PGg7disrKWZbdl09YXJndW1lbnRzW3ZdO3JldHVybiBkLnJ1bkxvY2FsSG9va3MoImFmdGVyTW9kaWZ5VHJhbnNmb3JtRm9jdXMiLC4uLmYpfSl9Z2V0U2VsZWN0ZWRSYW5nZSgpe3JldHVybiB0aGlzLnNlbGVjdGVkUmFuZ2V9'@;
put 'bWFya1NvdXJjZShsKXtGcChrUCx0aGlzLGwpfW1hcmtFbmRTb3VyY2UoKXtGcChrUCx0aGlzLCJ1bmtub3duIil9Z2V0U2VsZWN0aW9uU291cmNlKCl7cmV0dXJuIENjKGtQLHRoaXMpfXNldEV4cGVjdGVkTGF5ZXJzKGwpe0ZwKG5ULHRoaXMsbCl9YmVnaW4oKXt0aGlzLmluUHJvZ3Jlc3M9'@;
put 'ITB9ZmluaXNoKCl7dGhpcy5ydW5Mb2NhbEhvb2tzKCJhZnRlclNlbGVjdGlvbkZpbmlzaGVkIixBcnJheS5mcm9tKHRoaXMuc2VsZWN0ZWRSYW5nZSkpLHRoaXMuaW5Qcm9ncmVzcz0hMSxGcChuVCx0aGlzLC0xKX1pc0luUHJvZ3Jlc3MoKXtyZXR1cm4gdGhpcy5pblByb2dyZXNzfXNldFJh'@;
put 'bmdlU3RhcnQobCxhKXtsZXQgZD1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXSYmYXJndW1lbnRzWzJdLGg9YXJndW1lbnRzLmxlbmd0aD4zJiZ2b2lkIDAhPT1hcmd1bWVudHNbM10/YXJndW1lbnRzWzNdOmw7Y29uc3QgZj0ibXVsdGlwbGUiPT09dGhpcy5zZXR0'@;
put 'aW5ncy5zZWxlY3Rpb25Nb2RlLHY9X2MoYSk/dGhpcy50YWJsZVByb3BzLmdldFNob3J0Y3V0TWFuYWdlcigpLmlzQ3RybFByZXNzZWQoKTphLE09bC5jbG9uZSgpO0ZwKEFQLHRoaXMsITEpLHRoaXMucnVuTG9jYWxIb29rcygiYmVmb3JlU2V0UmFuZ2VTdGFydCIrKGQ/Ik9ubHkiOiIiKSxN'@;
put 'KSwoIWZ8fGYmJiF2JiZfYyhhKSkmJnRoaXMuc2VsZWN0ZWRSYW5nZS5jbGVhcigpLHRoaXMuc2VsZWN0ZWRSYW5nZS5hZGQoTSkuY3VycmVudCgpLnNldEhpZ2hsaWdodChoLmNsb25lKCkpLDA9PT10aGlzLmdldExheWVyTGV2ZWwoKSYmKHRoaXMuc2VsZWN0ZWRCeVJvd0hlYWRlci5jbGVh'@;
put 'cigpLHRoaXMuc2VsZWN0ZWRCeUNvbHVtbkhlYWRlci5jbGVhcigpKSxkfHx0aGlzLnNldFJhbmdlRW5kKGwpfXNldFJhbmdlU3RhcnRPbmx5KGwsYSl7dGhpcy5zZXRSYW5nZVN0YXJ0KGwsYSwhMCxhcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNb'@;
put 'Ml06bCl9c2V0UmFuZ2VFbmQobCl7aWYodGhpcy5zZWxlY3RlZFJhbmdlLmlzRW1wdHkoKSlyZXR1cm47Y29uc3QgYT1sLmNsb25lKCksZD10aGlzLnRhYmxlUHJvcHMuY291bnRSb3dzKCksaD10aGlzLnRhYmxlUHJvcHMuY291bnRDb2xzKCksZj10aGlzLnNlbGVjdGVkUmFuZ2UuY3VycmVu'@;
put 'dCgpLmNsb25lKCkuc2V0VG8obCkuaXNTaW5nbGVIZWFkZXIoKTtpZigoZD4wfHxoPjApJiYoMD09PWQmJmEuY29sPDAmJiFmfHwwPT09aCYmYS5yb3c8MCYmIWYpKXJldHVybjt0aGlzLnJ1bkxvY2FsSG9va3MoImJlZm9yZVNldFJhbmdlRW5kIixhKSx0aGlzLmJlZ2luKCk7Y29uc3Qgdj10'@;
put 'aGlzLnNlbGVjdGVkUmFuZ2UuY3VycmVudCgpO2lmKHRoaXMuc2V0dGluZ3MubmF2aWdhYmxlSGVhZGVyc3x8di5oaWdobGlnaHQubm9ybWFsaXplKCksInNpbmdsZSI9PT10aGlzLnNldHRpbmdzLnNlbGVjdGlvbk1vZGUpdi5zZXRGcm9tKHYuaGlnaGxpZ2h0KSx2LnNldFRvKHYuaGlnaGxp'@;
put 'Z2h0KTtlbHNle2NvbnN0IEQ9di5nZXRIb3Jpem9udGFsRGlyZWN0aW9uKCksWj12LmdldFZlcnRpY2FsRGlyZWN0aW9uKCkscmU9dGhpcy5pc011bHRpcGxlKCk7di5zZXRUbyhhKSxyZSYmKEQhPT12LmdldEhvcml6b250YWxEaXJlY3Rpb24oKXx8MT09PXYuZ2V0V2lkdGgoKSYmIXYuaW5j'@;
put 'bHVkZXModi5oaWdobGlnaHQpKSYmdi5mcm9tLmFzc2lnbih7Y29sOnYuaGlnaGxpZ2h0LmNvbH0pLHJlJiYoWiE9PXYuZ2V0VmVydGljYWxEaXJlY3Rpb24oKXx8MT09PXYuZ2V0SGVpZ2h0KCkmJiF2LmluY2x1ZGVzKHYuaGlnaGxpZ2h0KSkmJnYuZnJvbS5hc3NpZ24oe3Jvdzp2LmhpZ2hs'@;
put 'aWdodC5yb3d9KX1kPjAmJmg+MCYmKCF0aGlzLnNldHRpbmdzLm5hdmlnYWJsZUhlYWRlcnN8fHRoaXMuc2V0dGluZ3MubmF2aWdhYmxlSGVhZGVycyYmIXYuaXNTaW5nbGVIZWFkZXIoKSkmJnYudG8ubm9ybWFsaXplKCksdGhpcy5ydW5Mb2NhbEhvb2tzKCJiZWZvcmVIaWdobGlnaHRTZXQi'@;
put 'KSx0aGlzLnNldFJhbmdlRm9jdXModGhpcy5zZWxlY3RlZFJhbmdlLmN1cnJlbnQoKS5oaWdobGlnaHQpLHRoaXMuYXBwbHlBbmRDb21taXQoKTtjb25zdCBNPS0xPT09Q2MoblQsdGhpcyl8fHRoaXMuc2VsZWN0ZWRSYW5nZS5zaXplKCk9PT1DYyhuVCx0aGlzKTt0aGlzLnJ1bkxvY2FsSG9v'@;
put 'a3MoImFmdGVyU2V0UmFuZ2VFbmQiLGwsTSl9YXBwbHlBbmRDb21taXQoKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06dGhpcy5zZWxlY3RlZFJhbmdlLmN1cnJlbnQoKSxhPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09'@;
put 'YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp0aGlzLmdldExheWVyTGV2ZWwoKTtjb25zdCBkPXRoaXMudGFibGVQcm9wcy5jb3VudFJvd3MoKSxoPXRoaXMudGFibGVQcm9wcy5jb3VudENvbHMoKTthPHRoaXMuaGlnaGxpZ2h0LmxheWVyTGV2ZWwmJihZbih0aGlzLmhpZ2hsaWdodC5nZXRB'@;
put 'cmVhcygpLEJlPT57QmUuY2xlYXIoKX0pLFluKHRoaXMuaGlnaGxpZ2h0LmdldExheWVyZWRBcmVhcygpLEJlPT57QmUuY2xlYXIoKX0pLFluKHRoaXMuaGlnaGxpZ2h0LmdldFJvd0hlYWRlcnMoKSxCZT0+e0JlLmNsZWFyKCl9KSxZbih0aGlzLmhpZ2hsaWdodC5nZXRDb2x1bW5IZWFkZXJz'@;
put 'KCksQmU9PntCZS5jbGVhcigpfSksWW4odGhpcy5oaWdobGlnaHQuZ2V0QWN0aXZlUm93SGVhZGVycygpLEJlPT57QmUuY2xlYXIoKX0pLFluKHRoaXMuaGlnaGxpZ2h0LmdldEFjdGl2ZUNvbHVtbkhlYWRlcnMoKSxCZT0+e0JlLmNsZWFyKCl9KSxZbih0aGlzLmhpZ2hsaWdodC5nZXRBY3Rp'@;
put 'dmVDb3JuZXJIZWFkZXJzKCksQmU9PntCZS5jbGVhcigpfSksWW4odGhpcy5oaWdobGlnaHQuZ2V0Um93SGlnaGxpZ2h0cygpLEJlPT57QmUuY2xlYXIoKX0pLFluKHRoaXMuaGlnaGxpZ2h0LmdldENvbHVtbkhpZ2hsaWdodHMoKSxCZT0+e0JlLmNsZWFyKCl9KSksdGhpcy5oaWdobGlnaHQu'@;
put 'dXNlTGF5ZXJMZXZlbChhKTtjb25zdCBmPXRoaXMuaGlnaGxpZ2h0LmNyZWF0ZUFyZWEoKSx2PXRoaXMuaGlnaGxpZ2h0LmNyZWF0ZUxheWVyZWRBcmVhKCksTT10aGlzLmhpZ2hsaWdodC5jcmVhdGVSb3dIZWFkZXIoKSxEPXRoaXMuaGlnaGxpZ2h0LmNyZWF0ZUNvbHVtbkhlYWRlcigpLFo9'@;
put 'dGhpcy5oaWdobGlnaHQuY3JlYXRlQWN0aXZlUm93SGVhZGVyKCkscmU9dGhpcy5oaWdobGlnaHQuY3JlYXRlQWN0aXZlQ29sdW1uSGVhZGVyKCksY2U9dGhpcy5oaWdobGlnaHQuY3JlYXRlQWN0aXZlQ29ybmVySGVhZGVyKCksYmU9dGhpcy5oaWdobGlnaHQuY3JlYXRlUm93SGlnaGxpZ2h0'@;
put 'KCksRWU9dGhpcy5oaWdobGlnaHQuY3JlYXRlQ29sdW1uSGlnaGxpZ2h0KCk7aWYoZi5jbGVhcigpLHYuY2xlYXIoKSxNLmNsZWFyKCksRC5jbGVhcigpLFouY2xlYXIoKSxyZS5jbGVhcigpLGNlLmNsZWFyKCksYmUuY2xlYXIoKSxFZS5jbGVhcigpLHRoaXMuaGlnaGxpZ2h0LmlzRW5hYmxl'@;
put 'ZEZvcih2WCxsLmhpZ2hsaWdodCkmJih0aGlzLmlzTXVsdGlwbGUoKXx8YT49MSkmJihmLmFkZChsLmZyb20pLmFkZChsLnRvKS5jb21taXQoKSx2LmFkZChsLmZyb20pLmFkZChsLnRvKS5jb21taXQoKSwxPT09YSkpe2NvbnN0IEJlPXRoaXMuc2VsZWN0ZWRSYW5nZS5wcmV2aW91cygpO3Ro'@;
put 'aXMuaGlnaGxpZ2h0LnVzZUxheWVyTGV2ZWwoYS0xKSx0aGlzLmhpZ2hsaWdodC5jcmVhdGVBcmVhKCkuYWRkKEJlLmZyb20pLmNvbW1pdCgpLnN5bmNXaXRoKEJlKSx0aGlzLmhpZ2hsaWdodC5jcmVhdGVMYXllcmVkQXJlYSgpLmFkZChCZS5mcm9tKS5jb21taXQoKS5zeW5jV2l0aChCZSks'@;
put 'dGhpcy5oaWdobGlnaHQudXNlTGF5ZXJMZXZlbChhKX1pZih0aGlzLmhpZ2hsaWdodC5pc0VuYWJsZWRGb3IobVgsbC5oaWdobGlnaHQpKXtpZighbC5pc1NpbmdsZUhlYWRlcigpKXtjb25zdCBydD10aGlzLnRhYmxlUHJvcHMuY3JlYXRlQ2VsbENvb3JkcyhNYXRoLm1heChsLmZyb20ucm93'@;
put 'LDApLC0xKSxwdD10aGlzLnRhYmxlUHJvcHMuY3JlYXRlQ2VsbENvb3JkcyhsLnRvLnJvdywtMSksZHQ9dGhpcy50YWJsZVByb3BzLmNyZWF0ZUNlbGxDb29yZHMoLTEsTWF0aC5tYXgobC5mcm9tLmNvbCwwKSksSnQ9dGhpcy50YWJsZVByb3BzLmNyZWF0ZUNlbGxDb29yZHMoLTEsbC50by5j'@;
put 'b2wpOyJzaW5nbGUiPT09dGhpcy5zZXR0aW5ncy5zZWxlY3Rpb25Nb2RlPyhNLmFkZChydCkuY29tbWl0KCksRC5hZGQoZHQpLmNvbW1pdCgpLGJlLmFkZChydCkuY29tbWl0KCksRWUuYWRkKGR0KS5jb21taXQoKSk6KE0uYWRkKHJ0KS5hZGQocHQpLmNvbW1pdCgpLEQuYWRkKGR0KS5hZGQo'@;
put 'SnQpLmNvbW1pdCgpLGJlLmFkZChydCkuYWRkKHB0KS5jb21taXQoKSxFZS5hZGQoZHQpLmFkZChKdCkuY29tbWl0KCkpfWNvbnN0IEJlPSFDYyh0VCx0aGlzKSYmdGhpcy5pc0VudGlyZVJvd1NlbGVjdGVkKCkmJihoPjAmJmg9PT1sLmdldFdpZHRoKCl8fDA9PT1oJiZ0aGlzLmlzU2VsZWN0'@;
put 'ZWRCeVJvd0hlYWRlcigpKSxxZT0hQ2ModFQsdGhpcykmJnRoaXMuaXNFbnRpcmVDb2x1bW5TZWxlY3RlZCgpJiYoZD4wJiZkPT09bC5nZXRIZWlnaHQoKXx8MD09PWQmJnRoaXMuaXNTZWxlY3RlZEJ5Q29sdW1uSGVhZGVyKCkpO0JlJiZaLmFkZCh0aGlzLnRhYmxlUHJvcHMuY3JlYXRlQ2Vs'@;
put 'bENvb3JkcyhNYXRoLm1heChsLmZyb20ucm93LDApLE1hdGgubWluKC10aGlzLnRhYmxlUHJvcHMuY291bnRSb3dIZWFkZXJzKCksLTEpKSkuYWRkKHRoaXMudGFibGVQcm9wcy5jcmVhdGVDZWxsQ29vcmRzKE1hdGgubWF4KGwudG8ucm93LDApLC0xKSkuY29tbWl0KCkscWUmJnJlLmFkZCh0'@;
put 'aGlzLnRhYmxlUHJvcHMuY3JlYXRlQ2VsbENvb3JkcyhNYXRoLm1pbigtdGhpcy50YWJsZVByb3BzLmNvdW50Q29sSGVhZGVycygpLC0xKSxNYXRoLm1heChsLmZyb20uY29sLDApKSkuYWRkKHRoaXMudGFibGVQcm9wcy5jcmVhdGVDZWxsQ29vcmRzKC0xLE1hdGgubWF4KGwudG8uY29sLDAp'@;
put 'KSkuY29tbWl0KCksQmUmJnFlJiZjZS5hZGQodGhpcy50YWJsZVByb3BzLmNyZWF0ZUNlbGxDb29yZHMoLXRoaXMudGFibGVQcm9wcy5jb3VudENvbEhlYWRlcnMoKSwtdGhpcy50YWJsZVByb3BzLmNvdW50Um93SGVhZGVycygpKSkuYWRkKHRoaXMudGFibGVQcm9wcy5jcmVhdGVDZWxsQ29v'@;
put 'cmRzKC0xLC0xKSkuY29tbWl0KCl9fXNldFJhbmdlRm9jdXMobCl7aWYodGhpcy5zZWxlY3RlZFJhbmdlLmlzRW1wdHkoKSlyZXR1cm47Y29uc3QgYT10aGlzLnNlbGVjdGVkUmFuZ2UuY3VycmVudCgpO3RoaXMuaW5Qcm9ncmVzc3x8dGhpcy5ydW5Mb2NhbEhvb2tzKCJiZWZvcmVTZXRGb2N1'@;
put 'cyIsbCk7Y29uc3QgZD10aGlzLmhpZ2hsaWdodC5nZXRGb2N1cygpO2QuY2xlYXIoKSxhLnNldEhpZ2hsaWdodChsKSx0aGlzLmluUHJvZ3Jlc3N8fHRoaXMucnVuTG9jYWxIb29rcygiYmVmb3JlSGlnaGxpZ2h0U2V0IiksdGhpcy5oaWdobGlnaHQuaXNFbmFibGVkRm9yKFFFLGEuaGlnaGxp'@;
put 'Z2h0KSYmZC5hZGQoYS5oaWdobGlnaHQpLmNvbW1pdCgpLnN5bmNXaXRoKGEpLHRoaXMuaW5Qcm9ncmVzc3x8KEZwKEFQLHRoaXMsITApLHRoaXMucnVuTG9jYWxIb29rcygiYWZ0ZXJTZXRGb2N1cyIsYS5oaWdobGlnaHQpKX10cmFuc2Zvcm1TdGFydChsLGEpe2xldCBkPWFyZ3VtZW50cy5s'@;
put 'ZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdJiZhcmd1bWVudHNbMl07dGhpcy5zZXR0aW5ncy5uYXZpZ2FibGVIZWFkZXJzP0NjKF8xLHRoaXMpLnNldE9mZnNldFNpemUoe3g6dGhpcy50YWJsZVByb3BzLmNvdW50Um93SGVhZGVycygpLHk6dGhpcy50YWJsZVByb3BzLmNvdW50Q29s'@;
put 'SGVhZGVycygpfSk6Q2MoXzEsdGhpcykucmVzZXRPZmZzZXRTaXplKCksdGhpcy5zZXRSYW5nZVN0YXJ0KENjKF8xLHRoaXMpLnRyYW5zZm9ybVN0YXJ0KGwsYSxkKSl9dHJhbnNmb3JtRW5kKGwsYSl7dGhpcy5zZXR0aW5ncy5uYXZpZ2FibGVIZWFkZXJzP0NjKF8xLHRoaXMpLnNldE9mZnNl'@;
put 'dFNpemUoe3g6dGhpcy50YWJsZVByb3BzLmNvdW50Um93SGVhZGVycygpLHk6dGhpcy50YWJsZVByb3BzLmNvdW50Q29sSGVhZGVycygpfSk6Q2MoXzEsdGhpcykucmVzZXRPZmZzZXRTaXplKCksdGhpcy5zZXRSYW5nZUVuZChDYyhfMSx0aGlzKS50cmFuc2Zvcm1FbmQobCxhKSl9dHJhbnNm'@;
put 'b3JtRm9jdXMobCxhKXtjb25zdCBkPXRoaXMuc2VsZWN0ZWRSYW5nZS5jdXJyZW50KCkse3JvdzpoLGNvbDpmfT1kLmdldE91dGVyVG9wU3RhcnRDb3JuZXIoKSx2PXRoaXMudGFibGVQcm9wcy5jb3VudFJlbmRlcmFibGVDb2x1bW5zSW5SYW5nZSgwLGYtMSksTT10aGlzLnRhYmxlUHJvcHMu'@;
put 'Y291bnRSZW5kZXJhYmxlUm93c0luUmFuZ2UoMCxoLTEpO2QuaGlnaGxpZ2h0LmlzSGVhZGVyKCk/Q2MobjksdGhpcykuc2V0T2Zmc2V0U2l6ZSh7eDpmPDA/TWF0aC5hYnMoZik6LXYseTpoPDA/TWF0aC5hYnMoaCk6LU19KTpDYyhuOSx0aGlzKS5zZXRPZmZzZXRTaXplKHt4OmY8MD8wOi12'@;
put 'LHk6aDwwPzA6LU19KTtjb25zdCBEPUNjKG45LHRoaXMpLnRyYW5zZm9ybVN0YXJ0KGwsYSk7dGhpcy5zZXRSYW5nZUZvY3VzKEQubm9ybWFsaXplKCkpfXNoaWZ0Um93cyhsLGEpe2lmKCF0aGlzLmlzU2VsZWN0ZWQoKSlyZXR1cm47Y29uc3QgZD10aGlzLnNlbGVjdGVkUmFuZ2UuY3VycmVu'@;
put 'dCgpO2lmKHRoaXMuaXNTZWxlY3RlZEJ5Q29ybmVyKCkpdGhpcy5zZWxlY3RBbGwoITAsITAse2Rpc2FibGVIZWFkZXJzSGlnaGxpZ2h0OiEwfSk7ZWxzZSBpZih0aGlzLmlzU2VsZWN0ZWRCeUNvbHVtbkhlYWRlcigpfHxkLmdldE91dGVyVG9wU3RhcnRDb3JuZXIoKS5yb3c+PWwpe2NvbnN0'@;
put 'e2Zyb206aCx0bzpmLGhpZ2hsaWdodDp2fT1kLE09dGhpcy50YWJsZVByb3BzLmNvdW50Um93cygpLEQ9dGhpcy5pc1NlbGVjdGVkQnlSb3dIZWFkZXIoKSxaPXRoaXMuaXNTZWxlY3RlZEJ5Q29sdW1uSGVhZGVyKCkscmU9Wj8tMTowLGNlPVo/MDphO3RoaXMuZ2V0U2VsZWN0ZWRSYW5nZSgp'@;
put 'LnBvcCgpO2NvbnN0IGJlPXRoaXMudGFibGVQcm9wcy5jcmVhdGVDZWxsQ29vcmRzKGtzKGgucm93K2NlLHJlLE0tMSksaC5jb2wpLEVlPXRoaXMudGFibGVQcm9wcy5jcmVhdGVDZWxsQ29vcmRzKGtzKGYucm93K2EscmUsTS0xKSxmLmNvbCk7dGhpcy5tYXJrU291cmNlKCJzaGlmdCIpLHYu'@;
put 'cm93Pj1sP3RoaXMuc2V0UmFuZ2VTdGFydE9ubHkoYmUsITAsdGhpcy50YWJsZVByb3BzLmNyZWF0ZUNlbGxDb29yZHMoa3Modi5yb3crYSwwLE0tMSksdi5jb2wpKTp0aGlzLnNldFJhbmdlU3RhcnRPbmx5KGJlLCEwKSxEJiZ0aGlzLnNlbGVjdGVkQnlSb3dIZWFkZXIuYWRkKHRoaXMuZ2V0'@;
put 'TGF5ZXJMZXZlbCgpKSxaJiZ0aGlzLnNlbGVjdGVkQnlDb2x1bW5IZWFkZXIuYWRkKHRoaXMuZ2V0TGF5ZXJMZXZlbCgpKSx0aGlzLnNldFJhbmdlRW5kKEVlKSx0aGlzLm1hcmtFbmRTb3VyY2UoKX19c2hpZnRDb2x1bW5zKGwsYSl7aWYoIXRoaXMuaXNTZWxlY3RlZCgpKXJldHVybjtjb25z'@;
put 'dCBkPXRoaXMuc2VsZWN0ZWRSYW5nZS5jdXJyZW50KCk7aWYodGhpcy5pc1NlbGVjdGVkQnlDb3JuZXIoKSl0aGlzLnNlbGVjdEFsbCghMCwhMCx7ZGlzYWJsZUhlYWRlcnNIaWdobGlnaHQ6ITB9KTtlbHNlIGlmKHRoaXMuaXNTZWxlY3RlZEJ5Um93SGVhZGVyKCl8fGQuZ2V0T3V0ZXJUb3BT'@;
put 'dGFydENvcm5lcigpLmNvbD49bCl7Y29uc3R7ZnJvbTpoLHRvOmYsaGlnaGxpZ2h0OnZ9PWQsTT10aGlzLnRhYmxlUHJvcHMuY291bnRDb2xzKCksRD10aGlzLmlzU2VsZWN0ZWRCeVJvd0hlYWRlcigpLFo9dGhpcy5pc1NlbGVjdGVkQnlDb2x1bW5IZWFkZXIoKSxyZT1EPy0xOjAsY2U9RD8w'@;
put 'OmE7dGhpcy5nZXRTZWxlY3RlZFJhbmdlKCkucG9wKCk7Y29uc3QgYmU9dGhpcy50YWJsZVByb3BzLmNyZWF0ZUNlbGxDb29yZHMoaC5yb3csa3MoaC5jb2wrY2UscmUsTS0xKSksRWU9dGhpcy50YWJsZVByb3BzLmNyZWF0ZUNlbGxDb29yZHMoZi5yb3csa3MoZi5jb2wrYSxyZSxNLTEpKTt0'@;
put 'aGlzLm1hcmtTb3VyY2UoInNoaWZ0Iiksdi5jb2w+PWw/dGhpcy5zZXRSYW5nZVN0YXJ0T25seShiZSwhMCx0aGlzLnRhYmxlUHJvcHMuY3JlYXRlQ2VsbENvb3Jkcyh2LnJvdyxrcyh2LmNvbCthLDAsTS0xKSkpOnRoaXMuc2V0UmFuZ2VTdGFydE9ubHkoYmUsITApLEQmJnRoaXMuc2VsZWN0'@;
put 'ZWRCeVJvd0hlYWRlci5hZGQodGhpcy5nZXRMYXllckxldmVsKCkpLFomJnRoaXMuc2VsZWN0ZWRCeUNvbHVtbkhlYWRlci5hZGQodGhpcy5nZXRMYXllckxldmVsKCkpLHRoaXMuc2V0UmFuZ2VFbmQoRWUpLHRoaXMubWFya0VuZFNvdXJjZSgpfX1nZXRMYXllckxldmVsKCl7cmV0dXJuIHRo'@;
put 'aXMuc2VsZWN0ZWRSYW5nZS5zaXplKCktMX1pc1NlbGVjdGVkKCl7cmV0dXJuIXRoaXMuc2VsZWN0ZWRSYW5nZS5pc0VtcHR5KCl9aXNNdWx0aXBsZSgpe2lmKCF0aGlzLmlzU2VsZWN0ZWQoKSlyZXR1cm4hMTtjb25zdCBsPUZkKCF0aGlzLnNlbGVjdGVkUmFuZ2UuY3VycmVudCgpLmlzU2lu'@;
put 'Z2xlKCkpO3JldHVybiB0aGlzLnJ1bkxvY2FsSG9va3MoImFmdGVySXNNdWx0aXBsZVNlbGVjdGlvbiIsbCksbC52YWx1ZX1pc0ZvY3VzU2VsZWN0aW9uQ2hhbmdlZCgpe3JldHVybiB0aGlzLmlzU2VsZWN0ZWQoKSYmQ2MoQVAsdGhpcyl9aXNTZWxlY3RlZEJ5Um93SGVhZGVyKCl7bGV0IGw9'@;
put 'YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnRoaXMuZ2V0TGF5ZXJMZXZlbCgpO3JldHVybiF0aGlzLmlzU2VsZWN0ZWRCeUNvcm5lcihsKSYmKC0xPT09bD90aGlzLnNlbGVjdGVkQnlSb3dIZWFkZXIuc2l6ZT4wOnRoaXMuc2VsZWN0ZWRC'@;
put 'eVJvd0hlYWRlci5oYXMobCkpfWlzRW50aXJlUm93U2VsZWN0ZWQoKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06dGhpcy5nZXRMYXllckxldmVsKCk7Y29uc3QgYT1oPT57Y29uc3R7Y29sOmZ9PWguZ2V0T3V0ZXJUb3BTdGFy'@;
put 'dENvcm5lcigpLHY9dGhpcy50YWJsZVByb3BzLmNvdW50Um93SGVhZGVycygpLE09dGhpcy50YWJsZVByb3BzLmNvdW50Q29scygpO3JldHVybih2PjAmJmY8MHx8MD09PXYpJiZoLmdldFdpZHRoKCk9PT1NfTtpZigtMT09PWwpcmV0dXJuIEFycmF5LmZyb20odGhpcy5zZWxlY3RlZFJhbmdl'@;
put 'KS5zb21lKGg9PmEoaCkpO2NvbnN0IGQ9dGhpcy5zZWxlY3RlZFJhbmdlLnBlZWtCeUluZGV4KGwpO3JldHVybiEhZCYmYShkKX1pc1NlbGVjdGVkQnlDb2x1bW5IZWFkZXIoKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06dGhp'@;
put 'cy5nZXRMYXllckxldmVsKCk7cmV0dXJuIXRoaXMuaXNTZWxlY3RlZEJ5Q29ybmVyKCkmJigtMT09PWw/dGhpcy5zZWxlY3RlZEJ5Q29sdW1uSGVhZGVyLnNpemU+MDp0aGlzLnNlbGVjdGVkQnlDb2x1bW5IZWFkZXIuaGFzKGwpKX1pc0VudGlyZUNvbHVtblNlbGVjdGVkKCl7bGV0IGw9YXJn'@;
put 'dW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnRoaXMuZ2V0TGF5ZXJMZXZlbCgpO2NvbnN0IGE9aD0+e2NvbnN0e3JvdzpmfT1oLmdldE91dGVyVG9wU3RhcnRDb3JuZXIoKSx2PXRoaXMudGFibGVQcm9wcy5jb3VudENvbEhlYWRlcnMoKSxNPXRo'@;
put 'aXMudGFibGVQcm9wcy5jb3VudFJvd3MoKTtyZXR1cm4odj4wJiZmPDB8fDA9PT12KSYmaC5nZXRIZWlnaHQoKT09PU19O2lmKC0xPT09bClyZXR1cm4gQXJyYXkuZnJvbSh0aGlzLnNlbGVjdGVkUmFuZ2UpLnNvbWUoaD0+YShoKSk7Y29uc3QgZD10aGlzLnNlbGVjdGVkUmFuZ2UucGVla0J5'@;
put 'SW5kZXgobCk7cmV0dXJuISFkJiZhKGQpfWlzU2VsZWN0ZWRCeUFueUhlYWRlcigpe3JldHVybiB0aGlzLmlzU2VsZWN0ZWRCeVJvd0hlYWRlcigtMSl8fHRoaXMuaXNTZWxlY3RlZEJ5Q29sdW1uSGVhZGVyKC0xKXx8dGhpcy5pc1NlbGVjdGVkQnlDb3JuZXIoKX1pc1NlbGVjdGVkQnlDb3Ju'@;
put 'ZXIoKXtyZXR1cm4gdGhpcy5zZWxlY3RlZEJ5Q29sdW1uSGVhZGVyLmhhcyh0aGlzLmdldExheWVyTGV2ZWwoKSkmJnRoaXMuc2VsZWN0ZWRCeVJvd0hlYWRlci5oYXModGhpcy5nZXRMYXllckxldmVsKCkpfWluSW5TZWxlY3Rpb24obCl7cmV0dXJuIHRoaXMuc2VsZWN0ZWRSYW5nZS5pbmNs'@;
put 'dWRlcyhsKX1pc0NlbGxDb3JuZXJWaXNpYmxlKCl7cmV0dXJuIHRoaXMuc2V0dGluZ3MuZmlsbEhhbmRsZSYmIXRoaXMudGFibGVQcm9wcy5pc0VkaXRvck9wZW5lZCgpJiYhdGhpcy5pc011bHRpcGxlKCl9aXNDZWxsVmlzaWJsZShsKXtjb25zdCBhPXRoaXMudGFibGVQcm9wcy52aXN1YWxU'@;
put 'b1JlbmRlcmFibGVDb29yZHMobCk7cmV0dXJuIG51bGwhPT1hLnJvdyYmbnVsbCE9PWEuY29sfWlzQXJlYUNvcm5lclZpc2libGUobCl7cmV0dXJuKCFOdW1iZXIuaXNJbnRlZ2VyKGwpfHxsPT09dGhpcy5nZXRMYXllckxldmVsKCkpJiZ0aGlzLnNldHRpbmdzLmZpbGxIYW5kbGUmJiF0aGlz'@;
put 'LnRhYmxlUHJvcHMuaXNFZGl0b3JPcGVuZWQoKSYmdGhpcy5pc011bHRpcGxlKCl9Y2xlYXIoKXt0aGlzLnNlbGVjdGVkUmFuZ2UuY2xlYXIoKSx0aGlzLmhpZ2hsaWdodC5jbGVhcigpfWRlc2VsZWN0KCl7dGhpcy5pc1NlbGVjdGVkKCkmJih0aGlzLmluUHJvZ3Jlc3M9ITEsdGhpcy5jbGVh'@;
put 'cigpLHRoaXMucnVuTG9jYWxIb29rcygiYWZ0ZXJEZXNlbGVjdCIpKX1zZWxlY3RBbGwoKXt2YXIgbDtsZXQgYT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSYmYXJndW1lbnRzWzBdLGQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0m'@;
put 'JmFyZ3VtZW50c1sxXSxoPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTp7Zm9jdXNQb3NpdGlvbjohMSxkaXNhYmxlSGVhZGVyc0hpZ2hsaWdodDohMX07Y29uc3QgZj10aGlzLnRhYmxlUHJvcHMuY291bnRSb3dzKCksdj10aGlzLnRhYmxl'@;
put 'UHJvcHMuY291bnRDb2xzKCksTT10aGlzLnRhYmxlUHJvcHMuY291bnRSb3dIZWFkZXJzKCksRD10aGlzLnRhYmxlUHJvcHMuY291bnRDb2xIZWFkZXJzKCksWj1kPy1EOjAscmU9YT8tTTowO2lmKDA9PT1aJiYwPT09cmUmJigwPT09Znx8MD09PXYpKXJldHVybjtsZXQgY2U9bnVsbD09PShs'@;
put 'PXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZSgpLmN1cnJlbnQoKSl8fHZvaWQgMD09PWw/dm9pZCAwOmwuaGlnaGxpZ2h0O2NvbnN0e2ZvY3VzUG9zaXRpb246YmUsZGlzYWJsZUhlYWRlcnNIaWdobGlnaHQ6RWV9PWg7RnAodFQsdGhpcyxFZSksYmUmJk51bWJlci5pc0ludGVnZXIoYmU/LnJvdykm'@;
put 'Jk51bWJlci5pc0ludGVnZXIoYmU/LmNvbCkmJihjZT10aGlzLnRhYmxlUHJvcHMuY3JlYXRlQ2VsbENvb3JkcyhrcyhiZS5yb3csWixmLTEpLGtzKGJlLmNvbCxyZSx2LTEpKSk7Y29uc3QgQmU9dGhpcy50YWJsZVByb3BzLmNyZWF0ZUNlbGxDb29yZHMoWixyZSkscWU9dGhpcy50YWJsZVBy'@;
put 'b3BzLmNyZWF0ZUNlbGxDb29yZHMoZi0xLHYtMSk7dGhpcy5jbGVhcigpLHRoaXMuc2V0UmFuZ2VTdGFydE9ubHkoQmUsdm9pZCAwLGNlKSxyZTwwJiZ0aGlzLnNlbGVjdGVkQnlSb3dIZWFkZXIuYWRkKHRoaXMuZ2V0TGF5ZXJMZXZlbCgpKSxaPDAmJnRoaXMuc2VsZWN0ZWRCeUNvbHVtbkhl'@;
put 'YWRlci5hZGQodGhpcy5nZXRMYXllckxldmVsKCkpLHRoaXMuc2V0UmFuZ2VFbmQocWUpLHRoaXMuZmluaXNoKCksRnAodFQsdGhpcywhMSl9c2VsZWN0Q2VsbHMobCl7dmFyIGE9dGhpcztjb25zdCBkPXhfKGwpO2lmKDE9PT1kKXJldHVybiExO2lmKDA9PT1kKXRocm93IG5ldyBFcnJvcihn'@;
put 'bGBVbnN1cHBvcnRlZCBmb3JtYXQgb2YgdGhlIHNlbGVjdGlvbiByYW5nZXMgd2FzIHBhc3NlZC4gVG8gc2VsZWN0IGNlbGxzIHBhc3NceDIwCiAgICAgICAgdGhlIGNvb3JkaW5hdGVzIGFzIGFuIGFycmF5IG9mIGFycmF5cyAoW1tyb3dTdGFydCwgY29sdW1uU3RhcnQvY29sdW1uUHJvcFN0'@;
put 'YXJ0LCByb3dFbmQsXHgyMAogICAgICAgIGNvbHVtbkVuZC9jb2x1bW5Qcm9wRW5kXV0pIG9yIGFzIGFuIGFycmF5IG9mIENlbGxSYW5nZSBvYmplY3RzLmApO2NvbnN0IGg9ZVQoZCx7Y3JlYXRlQ2VsbENvb3JkczpmdW5jdGlvbigpe3JldHVybiBhLnRhYmxlUHJvcHMuY3JlYXRlQ2VsbENv'@;
put 'b3JkcyguLi5hcmd1bWVudHMpfSxjcmVhdGVDZWxsUmFuZ2U6ZnVuY3Rpb24oKXtyZXR1cm4gYS50YWJsZVByb3BzLmNyZWF0ZUNlbGxSYW5nZSguLi5hcmd1bWVudHMpfSxwcm9wVG9Db2w6RD0+dGhpcy50YWJsZVByb3BzLnByb3BUb0NvbChEKSxrZWVwRGlyZWN0aW9uOiEwfSksZj10aGlz'@;
put 'LnNldHRpbmdzLm5hdmlnYWJsZUhlYWRlcnMsdj17Y291bnRSb3dzOnRoaXMudGFibGVQcm9wcy5jb3VudFJvd3MoKSxjb3VudENvbHM6dGhpcy50YWJsZVByb3BzLmNvdW50Q29scygpLGNvdW50Um93SGVhZGVyczpmP3RoaXMudGFibGVQcm9wcy5jb3VudFJvd0hlYWRlcnMoKTowLGNvdW50'@;
put 'Q29sSGVhZGVyczpmP3RoaXMudGFibGVQcm9wcy5jb3VudENvbEhlYWRlcnMoKTowfSxNPSFsLnNvbWUoRD0+e2NvbnN0IFo9aChEKSxyZT1aLmlzVmFsaWQodik7cmV0dXJuIShyZSYmIVouY29udGFpbnNIZWFkZXJzKCl8fHJlJiZaLmNvbnRhaW5zSGVhZGVycygpJiZaLmlzU2luZ2xlSGVh'@;
put 'ZGVyKCkpfSk7cmV0dXJuIE0mJih0aGlzLmNsZWFyKCksdGhpcy5zZXRFeHBlY3RlZExheWVycyhsLmxlbmd0aCksWW4obCxEPT57Y29uc3R7ZnJvbTpaLHRvOnJlfT1oKEQpO3RoaXMuc2V0UmFuZ2VTdGFydE9ubHkoWi5jbG9uZSgpLCExKSx0aGlzLnNldFJhbmdlRW5kKHJlLmNsb25lKCkp'@;
put 'fSksdGhpcy5maW5pc2goKSksTX1zZWxlY3RDb2x1bW5zKGwpe2xldCBhPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpsLGQ9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOjA7Y29uc3Qg'@;
put 'aD0ic3RyaW5nIj09dHlwZW9mIGw/dGhpcy50YWJsZVByb3BzLnByb3BUb0NvbChsKTpsLGY9InN0cmluZyI9PXR5cGVvZiBhP3RoaXMudGFibGVQcm9wcy5wcm9wVG9Db2woYSk6YSx2PXRoaXMudGFibGVQcm9wcy5jb3VudFJvd3MoKSxNPXRoaXMudGFibGVQcm9wcy5jb3VudENvbHMoKSxE'@;
put 'PXRoaXMudGFibGVQcm9wcy5jb3VudENvbEhlYWRlcnMoKSxaPTA9PT1EPzA6LUQscmU9dGhpcy50YWJsZVByb3BzLmNyZWF0ZUNlbGxDb29yZHMoWixoKSxjZT10aGlzLnRhYmxlUHJvcHMuY3JlYXRlQ2VsbENvb3Jkcyh2LTEsZiksYmU9dGhpcy50YWJsZVByb3BzLmNyZWF0ZUNlbGxSYW5n'@;
put 'ZShyZSxyZSxjZSkuaXNWYWxpZCh7Y291bnRSb3dzOnYsY291bnRDb2xzOk0sY291bnRSb3dIZWFkZXJzOjAsY291bnRDb2xIZWFkZXJzOkR9KTtpZihiZSl7bGV0IEVlPTAsQmU9MDtOdW1iZXIuaXNJbnRlZ2VyKGQ/LnJvdykmJk51bWJlci5pc0ludGVnZXIoZD8uY29sKT8oRWU9a3MoZC5y'@;
put 'b3csWix2LTEpLEJlPWtzKGQuY29sLE1hdGgubWluKGgsZiksTWF0aC5tYXgoaCxmKSkpOihFZT1rcyhkLFosdi0xKSxCZT1oKTtjb25zdCBxZT10aGlzLnRhYmxlUHJvcHMuY3JlYXRlQ2VsbENvb3JkcyhFZSxCZSkscnQ9MD09PUQ/MDprcyhxZS5yb3csWiwtMSkscHQ9di0xLGR0PXRoaXMu'@;
put 'dGFibGVQcm9wcy5jcmVhdGVDZWxsQ29vcmRzKHJ0LGgpLEp0PXRoaXMudGFibGVQcm9wcy5jcmVhdGVDZWxsQ29vcmRzKHB0LGYpO3RoaXMucnVuTG9jYWxIb29rcygiYmVmb3JlU2VsZWN0Q29sdW1ucyIsZHQsSnQscWUpLGR0LnJvdz1ydCxKdC5yb3c9cHQsdGhpcy5zZXRSYW5nZVN0YXJ0'@;
put 'T25seShkdCx2b2lkIDAscWUpLHRoaXMuc2VsZWN0ZWRCeUNvbHVtbkhlYWRlci5hZGQodGhpcy5nZXRMYXllckxldmVsKCkpLHRoaXMuc2V0UmFuZ2VFbmQoSnQpLHRoaXMucnVuTG9jYWxIb29rcygiYWZ0ZXJTZWxlY3RDb2x1bW5zIixkdCxKdCxxZSksdGhpcy5maW5pc2goKX1yZXR1cm4g'@;
put 'YmV9c2VsZWN0Um93cyhsKXtsZXQgYT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06bCxkPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTowO2NvbnN0IGg9dGhpcy50YWJsZVByb3BzLmNv'@;
put 'dW50Um93cygpLGY9dGhpcy50YWJsZVByb3BzLmNvdW50Q29scygpLHY9dGhpcy50YWJsZVByb3BzLmNvdW50Um93SGVhZGVycygpLE09MD09PXY/MDotdixEPXRoaXMudGFibGVQcm9wcy5jcmVhdGVDZWxsQ29vcmRzKGwsTSksWj10aGlzLnRhYmxlUHJvcHMuY3JlYXRlQ2VsbENvb3Jkcyhh'@;
put 'LGYtMSkscmU9dGhpcy50YWJsZVByb3BzLmNyZWF0ZUNlbGxSYW5nZShELEQsWikuaXNWYWxpZCh7Y291bnRSb3dzOmgsY291bnRDb2xzOmYsY291bnRSb3dIZWFkZXJzOnYsY291bnRDb2xIZWFkZXJzOjB9KTtpZihyZSl7bGV0IGNlPTAsYmU9MDtOdW1iZXIuaXNJbnRlZ2VyKGQ/LnJvdykm'@;
put 'Jk51bWJlci5pc0ludGVnZXIoZD8uY29sKT8oY2U9a3MoZC5yb3csTWF0aC5taW4obCxhKSxNYXRoLm1heChsLGEpKSxiZT1rcyhkLmNvbCxNLGYtMSkpOihjZT1sLGJlPWtzKGQsTSxmLTEpKTtjb25zdCBFZT10aGlzLnRhYmxlUHJvcHMuY3JlYXRlQ2VsbENvb3JkcyhjZSxiZSksQmU9MD09'@;
put 'PXY/MDprcyhFZS5jb2wsTSwtMSkscWU9Zi0xLHJ0PXRoaXMudGFibGVQcm9wcy5jcmVhdGVDZWxsQ29vcmRzKGwsQmUpLHB0PXRoaXMudGFibGVQcm9wcy5jcmVhdGVDZWxsQ29vcmRzKGEscWUpO3RoaXMucnVuTG9jYWxIb29rcygiYmVmb3JlU2VsZWN0Um93cyIscnQscHQsRWUpLHJ0LmNv'@;
put 'bD1CZSxwdC5jb2w9cWUsdGhpcy5zZXRSYW5nZVN0YXJ0T25seShydCx2b2lkIDAsRWUpLHRoaXMuc2VsZWN0ZWRCeVJvd0hlYWRlci5hZGQodGhpcy5nZXRMYXllckxldmVsKCkpLHRoaXMuc2V0UmFuZ2VFbmQocHQpLHRoaXMucnVuTG9jYWxIb29rcygiYWZ0ZXJTZWxlY3RSb3dzIixydCxw'@;
put 'dCxFZSksdGhpcy5maW5pc2goKX1yZXR1cm4gcmV9cmVmcmVzaCgpe2lmKCF0aGlzLmlzU2VsZWN0ZWQoKSlyZXR1cm47Y29uc3QgbD10aGlzLnRhYmxlUHJvcHMuY291bnRSb3dzKCksYT10aGlzLnRhYmxlUHJvcHMuY291bnRDb2xzKCk7aWYoMD09PWx8fDA9PT1hKXJldHVybiB2b2lkIHRo'@;
put 'aXMuZGVzZWxlY3QoKTtjb25zdCBkPXRoaXMuc2VsZWN0ZWRSYW5nZS5wZWVrQnlJbmRleCh0aGlzLnNlbGVjdGVkUmFuZ2Uuc2l6ZSgpLTEpLHtmcm9tOmgsdG86ZixoaWdobGlnaHQ6dn09ZDt0aGlzLmNsZWFyKCksdi5hc3NpZ24oe3Jvdzprcyh2LnJvdywtMS8wLGwtMSksY29sOmtzKHYu'@;
put 'Y29sLC0xLzAsYS0xKX0pLGguYXNzaWduKHtyb3c6a3MoaC5yb3csLTEvMCxsLTEpLGNvbDprcyhoLmNvbCwtMS8wLGEtMSl9KSxmLmFzc2lnbih7cm93OmtzKGYucm93LDAsbC0xKSxjb2w6a3MoZi5jb2wsMCxhLTEpfSksdGhpcy5zZWxlY3RlZFJhbmdlLnJhbmdlcy5wdXNoKGQpLHRoaXMu'@;
put 'aGlnaGxpZ2h0LmlzRW5hYmxlZEZvcihRRSx0aGlzLnNlbGVjdGVkUmFuZ2UuY3VycmVudCgpLmhpZ2hsaWdodCkmJnRoaXMuaGlnaGxpZ2h0LmdldEZvY3VzKCkuYWRkKHYpLmNvbW1pdCgpLnN5bmNXaXRoKGQpLHRoaXMuYXBwbHlBbmRDb21taXQoZCl9Y29tbWl0KCl7aWYodGhpcy5oaWdo'@;
put 'bGlnaHQuZ2V0Q3VzdG9tU2VsZWN0aW9ucygpLmZvckVhY2goaD0+e2guY29tbWl0KCl9KSwhdGhpcy5pc1NlbGVjdGVkKCkpcmV0dXJuO2NvbnN0IGE9dGhpcy5nZXRMYXllckxldmVsKCksZD10aGlzLnNlbGVjdGVkUmFuZ2UuY3VycmVudCgpO3RoaXMuaGlnaGxpZ2h0LmlzRW5hYmxlZEZv'@;
put 'cihRRSxkLmhpZ2hsaWdodCkmJnRoaXMuaGlnaGxpZ2h0LmdldEZvY3VzKCkuY29tbWl0KCkuc3luY1dpdGgoZCk7Zm9yKGxldCBoPTA7aDx0aGlzLnNlbGVjdGVkUmFuZ2Uuc2l6ZSgpO2grPTEpe3RoaXMuaGlnaGxpZ2h0LnVzZUxheWVyTGV2ZWwoaCk7Y29uc3QgZj10aGlzLmhpZ2hsaWdo'@;
put 'dC5jcmVhdGVBcmVhKCksdj10aGlzLmhpZ2hsaWdodC5jcmVhdGVMYXllcmVkQXJlYSgpLE09dGhpcy5oaWdobGlnaHQuY3JlYXRlUm93SGVhZGVyKCksRD10aGlzLmhpZ2hsaWdodC5jcmVhdGVDb2x1bW5IZWFkZXIoKSxaPXRoaXMuaGlnaGxpZ2h0LmNyZWF0ZUFjdGl2ZVJvd0hlYWRlcigp'@;
put 'LHJlPXRoaXMuaGlnaGxpZ2h0LmNyZWF0ZUFjdGl2ZUNvbHVtbkhlYWRlcigpLGNlPXRoaXMuaGlnaGxpZ2h0LmNyZWF0ZUFjdGl2ZUNvcm5lckhlYWRlcigpLGJlPXRoaXMuaGlnaGxpZ2h0LmNyZWF0ZVJvd0hpZ2hsaWdodCgpLEVlPXRoaXMuaGlnaGxpZ2h0LmNyZWF0ZUNvbHVtbkhpZ2hs'@;
put 'aWdodCgpO2YuY29tbWl0KCksdi5jb21taXQoKSxNLmNvbW1pdCgpLEQuY29tbWl0KCksWi5jb21taXQoKSxyZS5jb21taXQoKSxjZS5jb21taXQoKSxiZS5jb21taXQoKSxFZS5jb21taXQoKX10aGlzLmhpZ2hsaWdodC51c2VMYXllckxldmVsKGEpfX1UbChpcGUseTEpO2NvbnN0IHFudD1p'@;
put 'cGUse3JlZ2lzdGVyOlhudCxnZXRJdGVtOkpudCxoYXNJdGVtOmFwZSxnZXROYW1lczpRbnR9PXIzKCJjZWxsVHlwZXMiKTtmdW5jdGlvbiBNWChjKXtpZighYXBlKGMpKXRocm93IEVycm9yKGBZb3UgZGVjbGFyZWQgY2VsbCB0eXBlICIke2N9IiBhcyBhIHN0cmluZyB0aGF0IGlzIG5vdCBt'@;
put 'YXBwZWQgdG8gYSBrbm93biBvYmplY3QuXG4gICAgICAgICAgICAgICAgIENlbGwgdHlwZSBtdXN0IGJlIGFuIG9iamVjdCBvciBhIHN0cmluZyBtYXBwZWQgdG8gYW4gb2JqZWN0IHJlZ2lzdGVyZWQgYnlcbiAgICAgICAgICAgICAgICAgIkhhbmRzb250YWJsZS5jZWxsVHlwZXMucmVnaXN0'@;
put 'ZXJDZWxsVHlwZSIgbWV0aG9kYCk7cmV0dXJuIEpudChjKX1mdW5jdGlvbiBHMihjLGwpeyJzdHJpbmciIT10eXBlb2YgYyYmKGM9KGw9YykuQ0VMTF9UWVBFKTtjb25zdHtlZGl0b3I6YSxyZW5kZXJlcjpkLHZhbGlkYXRvcjpofT1sO2EmJkhkKGMsYSksZCYmSWgoYyxkKSxoJiZZNyhjLGgp'@;
put 'LFhudChjLGwpfWZ1bmN0aW9uIERQKGMsbCl7bGV0IGE9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOmM7Y29uc3QgZD0ic3RyaW5nIj09dHlwZW9mIGwudHlwZT9NWChsLnR5cGUpOmwudHlwZTtpZihjLl9hdXRvbWF0aWNhbGx5QXNzaWdu'@;
put 'ZWRNZXRhUHJvcHMmJlhvKGwsKGYsdik9PntjLl9hdXRvbWF0aWNhbGx5QXNzaWduZWRNZXRhUHJvcHMuZGVsZXRlKHYpfSksIXFvKGQpKXJldHVybjthPT09YyYmIWMuX2F1dG9tYXRpY2FsbHlBc3NpZ25lZE1ldGFQcm9wcyYmKGMuX2F1dG9tYXRpY2FsbHlBc3NpZ25lZE1ldGFQcm9wcz1u'@;
put 'ZXcgU2V0KTtjb25zdCBoPXt9O1hvKGQsKGYsdik9Pnt2YXIgTTsoZnVuY3Rpb24gZXJ0KGMsbCl7dmFyIGE7cmV0dXJuIkNFTExfVFlQRSIhPT1jJiYoKG51bGw9PT0oYT1sLl9hdXRvbWF0aWNhbGx5QXNzaWduZWRNZXRhUHJvcHMpfHx2b2lkIDA9PT1hP3ZvaWQgMDphLmhhcyhjKSl8fCFU'@;
put 'dShsLGMpKX0pKHYsYSkmJihoW3ZdPWYsbnVsbD09PShNPWMuX2F1dG9tYXRpY2FsbHlBc3NpZ25lZE1ldGFQcm9wcyl8fHZvaWQgMD09PU18fE0uYWRkKHYpKX0pLEV1KGMsaCl9ZnVuY3Rpb24gSVAoYyl7cmV0dXJuIE51bWJlci5pc0ludGVnZXIoYykmJmM+PTB9ZnVuY3Rpb24gUlAoYyxs'@;
put 'KXtpZighYygpKXRocm93IG5ldyBFcnJvcihgQXNzZXJ0aW9uIGZhaWxlZDogJHtsfWApfWZ1bmN0aW9uIExQKGMpe3JldHVybiBudWxsPT1jfWNvbnN0IG9wZT0oKT0+KHtfYXV0b21hdGljYWxseUFzc2lnbmVkTWV0YVByb3BzOnZvaWQgMCxhY3RpdmVIZWFkZXJDbGFzc05hbWU6Imh0X19h'@;
put 'Y3RpdmVfaGlnaGxpZ2h0IixhbGxvd0VtcHR5OiEwLGFsbG93SHRtbDohMSxhbGxvd0luc2VydENvbHVtbjohMCxhbGxvd0luc2VydFJvdzohMCxhbGxvd0ludmFsaWQ6ITAsYWxsb3dSZW1vdmVDb2x1bW46ITAsYWxsb3dSZW1vdmVSb3c6ITAsYXJpYVRhZ3M6ITAsYXV0b0NvbHVtblNpemU6'@;
put 'dm9pZCAwLGF1dG9Sb3dTaXplOnZvaWQgMCxhdXRvV3JhcENvbDohMSxhdXRvV3JhcFJvdzohMSxiaW5kUm93c1dpdGhIZWFkZXJzOnZvaWQgMCxjZWxsOltdLGNlbGxzOnZvaWQgMCxjaGVja2VkVGVtcGxhdGU6dm9pZCAwLGNsYXNzTmFtZTp2b2lkIDAsY29sSGVhZGVyczpudWxsLGNvbGxh'@;
put 'cHNpYmxlQ29sdW1uczp2b2lkIDAsY29sdW1uSGVhZGVySGVpZ2h0OnZvaWQgMCxjb2x1bW5zOnZvaWQgMCxjb2x1bW5Tb3J0aW5nOnZvaWQgMCxjb2x1bW5TdW1tYXJ5OnZvaWQgMCxjb2xXaWR0aHM6dm9pZCAwLGNvbW1lbnRlZENlbGxDbGFzc05hbWU6Imh0Q29tbWVudENlbGwiLGNvbW1l'@;
put 'bnRzOiExLGNvbnRleHRNZW51OnZvaWQgMCxjb3B5YWJsZTohMCxjb3B5UGFzdGU6ITAsY29ycmVjdEZvcm1hdDohMSxjdXJyZW50Q29sQ2xhc3NOYW1lOnZvaWQgMCxjdXJyZW50SGVhZGVyQ2xhc3NOYW1lOiJodF9faGlnaGxpZ2h0IixjdXJyZW50Um93Q2xhc3NOYW1lOnZvaWQgMCxjdXN0'@;
put 'b21Cb3JkZXJzOiExLGRhdGE6dm9pZCAwLGRhdGFEb3ROb3RhdGlvbjohMCxkYXRhU2NoZW1hOnZvaWQgMCxkYXRlRm9ybWF0OiJERC9NTS9ZWVlZIix0aW1lRm9ybWF0OiJoOm1tOnNzIGEiLGRhdGVQaWNrZXJDb25maWc6dm9pZCAwLGRlZmF1bHREYXRlOnZvaWQgMCxkaXNhYmxlVmlzdWFs'@;
put 'U2VsZWN0aW9uOiExLGRyYWdUb1Njcm9sbDohMCxkcm9wZG93bk1lbnU6dm9pZCAwLGVkaXRvcjp2b2lkIDAsZW50ZXJCZWdpbnNFZGl0aW5nOiEwLGVudGVyTW92ZXM6e2NvbDowLHJvdzoxfSxmaWxsSGFuZGxlOnthdXRvSW5zZXJ0Um93OiExfSxmaWx0ZXI6ITAsZmlsdGVyaW5nQ2FzZVNl'@;
put 'bnNpdGl2ZTohMSxmaWx0ZXJzOnZvaWQgMCxmaXhlZENvbHVtbnNMZWZ0OjAsZml4ZWRDb2x1bW5zU3RhcnQ6MCxmaXhlZFJvd3NCb3R0b206MCxmaXhlZFJvd3NUb3A6MCxmb3JtdWxhczp2b2lkIDAsZnJhZ21lbnRTZWxlY3Rpb246ITEsaGVhZGVyQ2xhc3NOYW1lOnZvaWQgMCxoZWlnaHQ6'@;
put 'dm9pZCAwLGhpZGRlbkNvbHVtbnM6dm9pZCAwLGhpZGRlblJvd3M6dm9pZCAwLGludmFsaWRDZWxsQ2xhc3NOYW1lOiJodEludmFsaWQiLGltZUZhc3RFZGl0OiExLGlzRW1wdHlDb2woYyl7bGV0IGwsYSxkO2ZvcihsPTAsYT10aGlzLmNvdW50Um93cygpO2w8YTtsKyspaWYoZD10aGlzLmdl'@;
put 'dERhdGFBdENlbGwobCxjKSwhMT09PVVjKGQpKXJldHVybiExO3JldHVybiEwfSxpc0VtcHR5Um93KGMpe2xldCBsLGEsZCxoO2ZvcihsPTAsYT10aGlzLmNvdW50Q29scygpO2w8YTtsKyspaWYoZD10aGlzLmdldERhdGFBdENlbGwoYyxsKSwhMT09PVVjKGQpKXJldHVybiJvYmplY3QiPT10'@;
put 'eXBlb2YgZCYmKGg9dGhpcy5nZXRDZWxsTWV0YShjLGwpLE5PKHRoaXMuZ2V0U2NoZW1hKClbaC5wcm9wXSxkKSk7cmV0dXJuITB9LGxhYmVsOnZvaWQgMCxsYW5ndWFnZToiZW4tVVMiLGxheW91dERpcmVjdGlvbjoiaW5oZXJpdCIsbGljZW5zZUtleTp2b2lkIDAsbG9jYWxlOiJlbi1VUyIs'@;
put 'bWFudWFsQ29sdW1uRnJlZXplOnZvaWQgMCxtYW51YWxDb2x1bW5Nb3ZlOnZvaWQgMCxtYW51YWxDb2x1bW5SZXNpemU6dm9pZCAwLG1hbnVhbFJvd01vdmU6dm9pZCAwLG1hbnVhbFJvd1Jlc2l6ZTp2b2lkIDAsbWF4Q29sczoxLzAsbWF4Um93czoxLzAsbWVyZ2VDZWxsczohMSxtaW5Db2xz'@;
put 'OjAsbWluUm93czowLG1pblNwYXJlQ29sczowLG1pblNwYXJlUm93czowLG11bHRpQ29sdW1uU29ydGluZzp2b2lkIDAsbmF2aWdhYmxlSGVhZGVyczohMSx0YWJOYXZpZ2F0aW9uOiEwLG5lc3RlZEhlYWRlcnM6dm9pZCAwLG5lc3RlZFJvd3M6dm9pZCAwLG5vV29yZFdyYXBDbGFzc05hbWU6'@;
put 'Imh0Tm9XcmFwIixudW1lcmljRm9ybWF0OnZvaWQgMCxvYnNlcnZlRE9NVmlzaWJpbGl0eTohMCxvdXRzaWRlQ2xpY2tEZXNlbGVjdHM6ITAscGVyc2lzdGVudFN0YXRlOnZvaWQgMCxwbGFjZWhvbGRlcjp2b2lkIDAscGxhY2Vob2xkZXJDZWxsQ2xhc3NOYW1lOiJodFBsYWNlaG9sZGVyIixw'@;
put 'cmV2ZW50T3ZlcmZsb3c6ITEscHJldmVudFdoZWVsOiExLHJlYWRPbmx5OiExLHJlYWRPbmx5Q2VsbENsYXNzTmFtZToiaHREaW1tZWQiLHJlbmRlckFsbFJvd3M6ITEscmVuZGVyQWxsQ29sdW1uczohMSxyZW5kZXJlcjp2b2lkIDAscm93SGVhZGVyczp2b2lkIDAscm93SGVhZGVyV2lkdGg6'@;
put 'dm9pZCAwLHJvd0hlaWdodHM6dm9pZCAwLHNlYXJjaDohMSxzZWxlY3Rpb25Nb2RlOiJtdWx0aXBsZSIsc2VsZWN0T3B0aW9uczp2b2lkIDAsc2tpcENvbHVtbk9uUGFzdGU6ITEsc2tpcFJvd09uUGFzdGU6ITEsc29ydEJ5UmVsZXZhbmNlOiEwLHNvdXJjZTp2b2lkIDAsc3RhcnRDb2xzOjUs'@;
put 'c3RhcnRSb3dzOjUsc3RyZXRjaEg6Im5vbmUiLHN0cmljdDp2b2lkIDAsdGFibGVDbGFzc05hbWU6dm9pZCAwLHRoZW1lTmFtZTp2b2lkIDAsdGFiTW92ZXM6e3JvdzowLGNvbDoxfSx0aXRsZTp2b2lkIDAsdHJpbURyb3Bkb3duOiEwLHRyaW1Sb3dzOnZvaWQgMCx0cmltV2hpdGVzcGFjZToh'@;
put 'MCx0eXBlOiJ0ZXh0Iix1bmNoZWNrZWRUZW1wbGF0ZTp2b2lkIDAsdW5kbzohMCx2YWxpZGF0b3I6dm9pZCAwLHZpZXdwb3J0Q29sdW1uUmVuZGVyaW5nT2Zmc2V0OiJhdXRvIix2aWV3cG9ydFJvd1JlbmRlcmluZ09mZnNldDoiYXV0byIsdmlld3BvcnRDb2x1bW5SZW5kZXJpbmdUaHJlc2hv'@;
put 'bGQ6MCx2aWV3cG9ydFJvd1JlbmRlcmluZ1RocmVzaG9sZDowLHZpc2libGVSb3dzOjEwLHdpZHRoOnZvaWQgMCx3b3JkV3JhcDohMH0pO2Z1bmN0aW9uIHNwZShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gbnJ0KGMpe3ZhciBsPWZ1bmN0aW9uIHJydChjLGwpe2lmKCJvYmplY3QiIT10eXBl'@;
put 'b2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1'@;
put 'cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAs'@;
put 'Y29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y2xhc3MgYXJ0e2NvbnN0cnVjdG9yKGwpe3NwZSh0aGlzLCJtZXRhQ3RvciIsY2xhc3N7fSksc3BlKHRoaXMsIm1ldGEiLHZvaWQgMCksdGhpcy5tZXRhPXRoaXMubWV0YUN0b3IucHJvdG90eXBlLEV1KHRoaXMubWV0YSxv'@;
put 'cGUoKSksdGhpcy5tZXRhLmluc3RhbmNlPWx9Z2V0TWV0YUNvbnN0cnVjdG9yKCl7cmV0dXJuIHRoaXMubWV0YUN0b3J9Z2V0TWV0YSgpe3JldHVybiB0aGlzLm1ldGF9dXBkYXRlTWV0YShsKXt2YXIgYTtFdSh0aGlzLm1ldGEsbCksRFAodGhpcy5tZXRhLHsuLi5sLHR5cGU6bnVsbCE9PShh'@;
put 'PWwudHlwZSkmJnZvaWQgMCE9PWE/YTp0aGlzLm1ldGEudHlwZX0sbCl9fWNsYXNzIGNydHtjb25zdHJ1Y3RvcihsKXshZnVuY3Rpb24gb3J0KGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBzcnQoYyl7dmFyIGw9ZnVuY3Rpb24gbHJ0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYyly'@;
put 'ZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1p'@;
put 'dGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFi'@;
put 'bGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY30odGhpcywibWV0YSIsdm9pZCAwKTtjb25zdCBhPWwuZ2V0TWV0YUNvbnN0cnVjdG9yKCk7dGhpcy5tZXRhPW5ldyBhfWdldE1ldGEoKXtyZXR1cm4gdGhpcy5tZXRhfXVwZGF0ZU1ldGEobCl7RXUodGhpcy5tZXRhLGwpLERQKHRoaXMubWV0'@;
put 'YSxsLGwpfX1mdW5jdGlvbiBPUChjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gdXJ0KGMpe3ZhciBsPWZ1bmN0aW9uIGRydChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2Fs'@;
put 'bChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5n'@;
put 'Iik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y2xhc3MgUFB7Y29uc3RydWN0b3IobCl7T1AodGhpcywi'@;
put 'dmFsdWVGYWN0b3J5Iix2b2lkIDApLE9QKHRoaXMsImRhdGEiLFtdKSxPUCh0aGlzLCJpbmRleCIsW10pLE9QKHRoaXMsImhvbGVzIixuZXcgU2V0KSx0aGlzLnZhbHVlRmFjdG9yeT1sfW9idGFpbihsKXtSUCgoKT0+SVAobCksIkV4cGVjdGluZyBhbiB1bnNpZ25lZCBudW1iZXIuIik7Y29u'@;
put 'c3QgYT10aGlzLl9nZXRTdG9yYWdlSW5kZXhCeUtleShsKTtsZXQgZDtpZihhPj0wKWQ9dGhpcy5kYXRhW2FdLHZvaWQgMD09PWQmJihkPXRoaXMudmFsdWVGYWN0b3J5KGwpLHRoaXMuZGF0YVthXT1kKTtlbHNlIGlmKGQ9dGhpcy52YWx1ZUZhY3RvcnkobCksdGhpcy5ob2xlcy5zaXplPjAp'@;
put 'e2NvbnN0IGg9dGhpcy5ob2xlcy52YWx1ZXMoKS5uZXh0KCkudmFsdWU7dGhpcy5ob2xlcy5kZWxldGUoaCksdGhpcy5kYXRhW2hdPWQsdGhpcy5pbmRleFtsXT1ofWVsc2UgdGhpcy5kYXRhLnB1c2goZCksdGhpcy5pbmRleFtsXT10aGlzLmRhdGEubGVuZ3RoLTE7cmV0dXJuIGR9aW5zZXJ0'@;
put 'KGwpe2xldCBhPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXToxO1JQKCgpPT5JUChsKXx8TFAobCksIkV4cGVjdGluZyBhbiB1bnNpZ25lZCBudW1iZXIgb3IgbnVsbC91bmRlZmluZWQgYXJndW1lbnQuIik7Y29uc3QgZD1bXSxoPXRoaXMu'@;
put 'ZGF0YS5sZW5ndGg7Zm9yKGxldCB2PTA7djxhO3YrKylkLnB1c2goaCt2KSx0aGlzLmRhdGEucHVzaCh2b2lkIDApO2NvbnN0IGY9TFAobCk/dGhpcy5pbmRleC5sZW5ndGg6bDt0aGlzLmluZGV4PVsuLi50aGlzLmluZGV4LnNsaWNlKDAsZiksLi4uZCwuLi50aGlzLmluZGV4LnNsaWNlKGYp'@;
put 'XX1yZW1vdmUobCl7bGV0IGE9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOjE7UlAoKCk9PklQKGwpfHxMUChsKSwiRXhwZWN0aW5nIGFuIHVuc2lnbmVkIG51bWJlciBvciBudWxsL3VuZGVmaW5lZCBhcmd1bWVudC4iKTtjb25zdCBkPXRo'@;
put 'aXMuaW5kZXguc3BsaWNlKExQKGwpP3RoaXMuaW5kZXgubGVuZ3RoLWE6bCxhKTtmb3IobGV0IGg9MDtoPGQubGVuZ3RoO2grKyl7Y29uc3QgZj1kW2hdOyJudW1iZXIiPT10eXBlb2YgZiYmdGhpcy5ob2xlcy5hZGQoZil9fXNpemUoKXtyZXR1cm4gdGhpcy5kYXRhLmxlbmd0aC10aGlzLmhv'@;
put 'bGVzLnNpemV9dmFsdWVzKCl7cmV0dXJuIHRoaXMuZGF0YS5maWx0ZXIoKGwsYSk9PnZvaWQgMCE9PWwmJiF0aGlzLmhvbGVzLmhhcyhhKSlbU3ltYm9sLml0ZXJhdG9yXSgpfWVudHJpZXMoKXtjb25zdCBsPVtdO2ZvcihsZXQgZD0wO2Q8dGhpcy5kYXRhLmxlbmd0aDtkKyspe2NvbnN0IGg9'@;
put 'dGhpcy5fZ2V0S2V5QnlTdG9yYWdlSW5kZXgoZCk7LTEhPT1oJiZ2b2lkIDAhPT10aGlzLmRhdGFbZF0mJmwucHVzaChbaCx0aGlzLmRhdGFbZF1dKX1sZXQgYT0wO3JldHVybntuZXh0OigpPT57aWYoYTxsLmxlbmd0aCl7Y29uc3QgZD1sW2FdO3JldHVybiBhKz0xLHt2YWx1ZTpkLGRvbmU6'@;
put 'ITF9fXJldHVybntkb25lOiEwfX19fWNsZWFyKCl7dGhpcy5kYXRhPVtdLHRoaXMuaW5kZXg9W10sdGhpcy5ob2xlcy5jbGVhcigpfV9nZXRTdG9yYWdlSW5kZXhCeUtleShsKXtyZXR1cm4gdGhpcy5pbmRleC5sZW5ndGg+bD90aGlzLmluZGV4W2xdOi0xfV9nZXRLZXlCeVN0b3JhZ2VJbmRl'@;
put 'eChsKXtyZXR1cm4gdGhpcy5pbmRleC5pbmRleE9mKGwpfVtTeW1ib2wuaXRlcmF0b3JdKCl7cmV0dXJuIHRoaXMuZW50cmllcygpfX1mdW5jdGlvbiBscGUoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIGhydChjKXt2YXIgbD1mdW5jdGlvbiBmcnQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9m'@;
put 'IGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJu'@;
put 'IGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNv'@;
put 'bmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNvbnN0IHBydD1bImRhdGEiLCJ3aWR0aCJdO2NsYXNzIGdydHtjb25zdHJ1Y3RvcihsKXtscGUodGhpcywiZ2xvYmFsTWV0YSIsdm9pZCAwKSxscGUodGhpcywibWV0YXMiLG5ldyBQUCgoKT0+dGhpcy5fY3JlYXRlTWV0YSgp'@;
put 'KSksdGhpcy5nbG9iYWxNZXRhPWwsdGhpcy5tZXRhcz1uZXcgUFAoKCk9PnRoaXMuX2NyZWF0ZU1ldGEoKSl9dXBkYXRlTWV0YShsLGEpe2NvbnN0IGQ9dGhpcy5nZXRNZXRhKGwpO0V1KGQsYSksRFAoZCxhKX1jcmVhdGVDb2x1bW4obCxhKXt0aGlzLm1ldGFzLmluc2VydChsLGEpfXJlbW92'@;
put 'ZUNvbHVtbihsLGEpe3RoaXMubWV0YXMucmVtb3ZlKGwsYSl9Z2V0TWV0YShsKXtyZXR1cm4gdGhpcy5tZXRhcy5vYnRhaW4obCl9Z2V0TWV0YUNvbnN0cnVjdG9yKGwpe3JldHVybiB0aGlzLm1ldGFzLm9idGFpbihsKS5jb25zdHJ1Y3Rvcn1jbGVhckNhY2hlKCl7dGhpcy5tZXRhcy5jbGVh'@;
put 'cigpfV9jcmVhdGVNZXRhKCl7cmV0dXJuIGZ1bmN0aW9uIHRydChjKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06W107ZnVuY3Rpb24gYSgpe31HMmUoYSxjKTtmb3IobGV0IGQ9MDtkPGwubGVuZ3RoO2QrKylhLnByb3RvdHlw'@;
put 'ZVtsW2RdXT12b2lkIDA7cmV0dXJuIGF9KHRoaXMuZ2xvYmFsTWV0YS5nZXRNZXRhQ29uc3RydWN0b3IoKSxwcnQpLnByb3RvdHlwZX19ZnVuY3Rpb24gY3BlKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBtcnQoYyl7dmFyIGw9ZnVuY3Rpb24gdnJ0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVv'@;
put 'ZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVy'@;
put 'biBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxj'@;
put 'b25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jbGFzcyBicnR7Y29uc3RydWN0b3IobCl7Y3BlKHRoaXMsImNvbHVtbk1ldGEiLHZvaWQgMCksY3BlKHRoaXMsIm1ldGFzIixuZXcgUFAoKCk9PnRoaXMuX2NyZWF0ZVJvdygpKSksdGhpcy5jb2x1bW5NZXRhPWx9dXBkYXRl'@;
put 'TWV0YShsLGEsZCl7Y29uc3QgaD10aGlzLmdldE1ldGEobCxhKTtFdShoLGQpLERQKGgsZCl9Y3JlYXRlUm93KGwsYSl7dGhpcy5tZXRhcy5pbnNlcnQobCxhKX1jcmVhdGVDb2x1bW4obCxhKXtmb3IobGV0IGQ9MDtkPHRoaXMubWV0YXMuc2l6ZSgpO2QrKyl0aGlzLm1ldGFzLm9idGFpbihk'@;
put 'KS5pbnNlcnQobCxhKX1yZW1vdmVSb3cobCxhKXt0aGlzLm1ldGFzLnJlbW92ZShsLGEpfXJlbW92ZUNvbHVtbihsLGEpe2ZvcihsZXQgZD0wO2Q8dGhpcy5tZXRhcy5zaXplKCk7ZCsrKXRoaXMubWV0YXMub2J0YWluKGQpLnJlbW92ZShsLGEpfWdldE1ldGEobCxhLGQpe2NvbnN0IGg9dGhp'@;
put 'cy5tZXRhcy5vYnRhaW4obCkub2J0YWluKGEpO3JldHVybiB2b2lkIDA9PT1kP2g6aFtkXX1zZXRNZXRhKGwsYSxkLGgpe3ZhciBmO2NvbnN0IHY9dGhpcy5tZXRhcy5vYnRhaW4obCkub2J0YWluKGEpO251bGw9PT0oZj12Ll9hdXRvbWF0aWNhbGx5QXNzaWduZWRNZXRhUHJvcHMpfHx2b2lk'@;
put 'IDA9PT1mfHxmLmRlbGV0ZShkKSx2W2RdPWh9cmVtb3ZlTWV0YShsLGEsZCl7ZGVsZXRlIHRoaXMubWV0YXMub2J0YWluKGwpLm9idGFpbihhKVtkXX1nZXRNZXRhcygpe2NvbnN0IGw9W10sYT1BcnJheS5mcm9tKHRoaXMubWV0YXMudmFsdWVzKCkpO2ZvcihsZXQgZD0wO2Q8YS5sZW5ndGg7'@;
put 'ZCsrKVBhKGFbZF0pJiZsLnB1c2goLi4uYVtkXS52YWx1ZXMoKSk7cmV0dXJuIGx9Z2V0TWV0YXNBdFJvdyhsKXtSUCgoKT0+SVAobCksIkV4cGVjdGluZyBhbiB1bnNpZ25lZCBudW1iZXIuIik7Y29uc3QgYT1uZXcgTWFwKHRoaXMubWV0YXMpO3JldHVybiBhLmhhcyhsKT9BcnJheS5mcm9t'@;
put 'KGEuZ2V0KGwpLnZhbHVlcygpKTpbXX1jbGVhckNhY2hlKCl7dGhpcy5tZXRhcy5jbGVhcigpfV9jcmVhdGVSb3coKXtyZXR1cm4gbmV3IFBQKGw9PnRoaXMuX2NyZWF0ZU1ldGEobCkpfV9jcmVhdGVNZXRhKGwpe3JldHVybiBuZXcodGhpcy5jb2x1bW5NZXRhLmdldE1ldGFDb25zdHJ1Y3Rv'@;
put 'cihsKSl9fWNsYXNzIHVwZXtjb25zdHJ1Y3RvcihsKXtsZXQgYT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06e30sZD1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06W107dGhpcy5ob3Q9'@;
put 'bCx0aGlzLmdsb2JhbE1ldGE9bmV3IGFydChsKSx0aGlzLnRhYmxlTWV0YT1uZXcgY3J0KHRoaXMuZ2xvYmFsTWV0YSksdGhpcy5jb2x1bW5NZXRhPW5ldyBncnQodGhpcy5nbG9iYWxNZXRhKSx0aGlzLmNlbGxNZXRhPW5ldyBicnQodGhpcy5jb2x1bW5NZXRhKSxkLmZvckVhY2goaD0+bmV3'@;
put 'IGgodGhpcykpLHRoaXMuZ2xvYmFsTWV0YS51cGRhdGVNZXRhKGEpfWdldEdsb2JhbE1ldGEoKXtyZXR1cm4gdGhpcy5nbG9iYWxNZXRhLmdldE1ldGEoKX11cGRhdGVHbG9iYWxNZXRhKGwpe3RoaXMuZ2xvYmFsTWV0YS51cGRhdGVNZXRhKGwpfWdldFRhYmxlTWV0YSgpe3JldHVybiB0aGlz'@;
put 'LnRhYmxlTWV0YS5nZXRNZXRhKCl9dXBkYXRlVGFibGVNZXRhKGwpe3RoaXMudGFibGVNZXRhLnVwZGF0ZU1ldGEobCl9Z2V0Q29sdW1uTWV0YShsKXtyZXR1cm4gdGhpcy5jb2x1bW5NZXRhLmdldE1ldGEobCl9dXBkYXRlQ29sdW1uTWV0YShsLGEpe3RoaXMuY29sdW1uTWV0YS51cGRhdGVN'@;
put 'ZXRhKGwsYSl9Z2V0Q2VsbE1ldGEobCxhLGQpe2NvbnN0IGg9dGhpcy5jZWxsTWV0YS5nZXRNZXRhKGwsYSk7cmV0dXJuIGgudmlzdWFsUm93PWQudmlzdWFsUm93LGgudmlzdWFsQ29sPWQudmlzdWFsQ29sdW1uLGgucm93PWwsaC5jb2w9YSxkLnNraXBNZXRhRXh0ZW5zaW9ufHx0aGlzLnJ1'@;
put 'bkxvY2FsSG9va3MoImFmdGVyR2V0Q2VsbE1ldGEiLGgpLGh9Z2V0Q2VsbE1ldGFLZXlWYWx1ZShsLGEsZCl7aWYoInN0cmluZyIhPXR5cGVvZiBkKXRocm93IG5ldyBFcnJvcigiVGhlIHBhc3NlZCBjZWxsIG1ldGEgb2JqZWN0IGtleSBpcyBub3QgYSBzdHJpbmciKTtyZXR1cm4gdGhpcy5j'@;
put 'ZWxsTWV0YS5nZXRNZXRhKGwsYSxkKX1zZXRDZWxsTWV0YShsLGEsZCxoKXt0aGlzLmNlbGxNZXRhLnNldE1ldGEobCxhLGQsaCl9dXBkYXRlQ2VsbE1ldGEobCxhLGQpe3RoaXMuY2VsbE1ldGEudXBkYXRlTWV0YShsLGEsZCl9cmVtb3ZlQ2VsbE1ldGEobCxhLGQpe3RoaXMuY2VsbE1ldGEu'@;
put 'cmVtb3ZlTWV0YShsLGEsZCl9Z2V0Q2VsbHNNZXRhKCl7cmV0dXJuIHRoaXMuY2VsbE1ldGEuZ2V0TWV0YXMoKX1nZXRDZWxsc01ldGFBdFJvdyhsKXtyZXR1cm4gdGhpcy5jZWxsTWV0YS5nZXRNZXRhc0F0Um93KGwpfWNyZWF0ZVJvdyhsKXt0aGlzLmNlbGxNZXRhLmNyZWF0ZVJvdyhsLGFy'@;
put 'Z3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXToxKX1yZW1vdmVSb3cobCl7dGhpcy5jZWxsTWV0YS5yZW1vdmVSb3cobCxhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06MSl9Y3JlYXRlQ29sdW1u'@;
put 'KGwpe2xldCBhPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXToxO3RoaXMuY2VsbE1ldGEuY3JlYXRlQ29sdW1uKGwsYSksdGhpcy5jb2x1bW5NZXRhLmNyZWF0ZUNvbHVtbihsLGEpfXJlbW92ZUNvbHVtbihsKXtsZXQgYT1hcmd1bWVudHMu'@;
put 'bGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06MTt0aGlzLmNlbGxNZXRhLnJlbW92ZUNvbHVtbihsLGEpLHRoaXMuY29sdW1uTWV0YS5yZW1vdmVDb2x1bW4obCxhKX1jbGVhckNlbGxzQ2FjaGUoKXt0aGlzLmNlbGxNZXRhLmNsZWFyQ2FjaGUoKX1jbGVhckNh'@;
put 'Y2hlKCl7dGhpcy5jZWxsTWV0YS5jbGVhckNhY2hlKCksdGhpcy5jb2x1bW5NZXRhLmNsZWFyQ2FjaGUoKX19ZnVuY3Rpb24gZHBlKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiB5cnQoYyl7dmFyIGw9ZnVuY3Rpb24gX3J0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4g'@;
put 'Yzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2'@;
put 'YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAs'@;
put 'd3JpdGFibGU6ITB9KTpjW2xdPWEsY31UbCh1cGUseTEpO2NsYXNzIHdydHtjb25zdHJ1Y3RvcihsKXt2YXIgYT10aGlzO2RwZSh0aGlzLCJtZXRhTWFuYWdlciIsdm9pZCAwKSxkcGUodGhpcywibWV0YVN5bmNNZW1vIixuZXcgTWFwKSx0aGlzLm1ldGFNYW5hZ2VyPWwsbC5hZGRMb2NhbEhv'@;
put 'b2soImFmdGVyR2V0Q2VsbE1ldGEiLGZ1bmN0aW9uKCl7cmV0dXJuIGEuZXh0ZW5kQ2VsbE1ldGEoLi4uYXJndW1lbnRzKX0pLFNhLmdldFNpbmdsZXRvbigpLmFkZCgiYmVmb3JlUmVuZGVyIixkPT57ZCYmdGhpcy5tZXRhU3luY01lbW8uY2xlYXIoKX0sdGhpcy5tZXRhTWFuYWdlci5ob3Qp'@;
put 'fWV4dGVuZENlbGxNZXRhKGwpe3ZhciBhO2NvbnN0e3JvdzpkLGNvbDpofT1sO2lmKG51bGwhPT0oYT10aGlzLm1ldGFTeW5jTWVtby5nZXQoZCkpJiZ2b2lkIDAhPT1hJiZhLmhhcyhoKSlyZXR1cm47Y29uc3R7dmlzdWFsUm93OmYsdmlzdWFsQ29sOnZ9PWwsTT10aGlzLm1ldGFNYW5hZ2Vy'@;
put 'LmhvdCxEPU0uY29sVG9Qcm9wKHYpO2wucHJvcD1ELE0ucnVuSG9va3MoImJlZm9yZUdldENlbGxNZXRhIixmLHYsbCk7Y29uc3QgWj1UdShsLCJ0eXBlIik/bC50eXBlOm51bGw7bGV0IHJlPW1sKGwuY2VsbHMpP2wuY2VsbHMoZCxoLEQpOm51bGw7aWYoWilpZihyZSl7dmFyIGNlO3JlLnR5'@;
put 'cGU9bnVsbCE9PShjZT1yZS50eXBlKSYmdm9pZCAwIT09Y2U/Y2U6Wn1lbHNlIHJlPXt0eXBlOlp9O3JlJiZ0aGlzLm1ldGFNYW5hZ2VyLnVwZGF0ZUNlbGxNZXRhKGQsaCxyZSksTS5ydW5Ib29rcygiYWZ0ZXJHZXRDZWxsTWV0YSIsZix2LGwpLHRoaXMubWV0YVN5bmNNZW1vLmhhcyhkKXx8'@;
put 'dGhpcy5tZXRhU3luY01lbW8uc2V0KGQsbmV3IFNldCksdGhpcy5tZXRhU3luY01lbW8uZ2V0KGQpLmFkZChoKX19ZnVuY3Rpb24geFgoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIE1ydChjKXt2YXIgbD1mdW5jdGlvbiB4cnQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVy'@;
put 'biBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZl'@;
put 'IHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZToh'@;
put 'MCx3cml0YWJsZTohMH0pOmNbbF09YSxjfXZhciBocGU9bmV3IFdlYWtNYXA7Y2xhc3MgQXJ0e2NvbnN0cnVjdG9yKGwpe3hYKHRoaXMsIm1ldGFNYW5hZ2VyIix2b2lkIDApLHhYKHRoaXMsInVzYWdlVHJhY2tlciIsbmV3IFNldCkseFgodGhpcywicHJvcERlc2NyaXB0b3JzIixuZXcgTWFw'@;
put 'KFtbImFyaWFUYWdzIix7aW5pdE9ubHk6ITB9XSxbImZpeGVkQ29sdW1uc0xlZnQiLHt0YXJnZXQ6ImZpeGVkQ29sdW1uc1N0YXJ0IixvbkNoYW5nZShhKXtpZih0aGlzLm1ldGFNYW5hZ2VyLmhvdC5pc1J0bCgpJiYiZml4ZWRDb2x1bW5zTGVmdCI9PT1hKXRocm93IG5ldyBFcnJvcigiVGhl'@;
put 'IGBmaXhlZENvbHVtbnNMZWZ0YCBpcyBub3Qgc3VwcG9ydGVkIGZvciBSVEwuIFBsZWFzZSB1c2Ugb3B0aW9uIGBmaXhlZENvbHVtbnNTdGFydGAuIik7aWYodGhpcy51c2FnZVRyYWNrZXIuaGFzKCJmaXhlZENvbHVtbnNMZWZ0IikmJnRoaXMudXNhZ2VUcmFja2VyLmhhcygiZml4ZWRDb2x1'@;
put 'bW5zU3RhcnQiKSl0aHJvdyBuZXcgRXJyb3IoIlRoZSBgZml4ZWRDb2x1bW5zTGVmdGAgYW5kIGBmaXhlZENvbHVtbnNTdGFydGAgc2hvdWxkIG5vdCBiZSB1c2VkIHRvZ2V0aGVyLiBQbGVhc2UgdXNlIG9ubHkgdGhlIG9wdGlvbiBgZml4ZWRDb2x1bW5zU3RhcnRgLiIpfX1dLFsibGF5b3V0'@;
put 'RGlyZWN0aW9uIix7aW5pdE9ubHk6ITB9XSxbInJlbmRlckFsbENvbHVtbnMiLHtpbml0T25seTohMH1dLFsicmVuZGVyQWxsUm93cyIse2luaXRPbmx5OiEwfV1dKSksZnVuY3Rpb24gQ3J0KGMsbCxhKXsoZnVuY3Rpb24gU3J0KGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJv'@;
put 'cigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX0pKGMsbCksbC5zZXQoYyxhKX0odGhpcyxocGUsKGEsZCxoKT0+e2lmKCFoKXRocm93IG5ldyBFcnJvcihgVGhlIFxgJHthfVxgIG9wdGlvbiBjYW4gbm90IGJlIHVwZGF0'@;
put 'ZWQgYWZ0ZXIgdGhlIEhhbmRzb250YWJsZSBpcyBpbml0aWFsaXplZC5gKX0pLHRoaXMubWV0YU1hbmFnZXI9bCx0aGlzLmV4dGVuZE1ldGFQcm9wcygpfWV4dGVuZE1ldGFQcm9wcygpe3RoaXMucHJvcERlc2NyaXB0b3JzLmZvckVhY2goKGwsYSk9Pntjb25zdHtpbml0T25seTpkLHRhcmdl'@;
put 'dDpoLG9uQ2hhbmdlOmZ9PWwsdj0ic3RyaW5nIj09dHlwZW9mIGgsTT12P2g6YSxEPWBfJHtNfWA7dGhpcy5tZXRhTWFuYWdlci5nbG9iYWxNZXRhLm1ldGFbRF09dGhpcy5tZXRhTWFuYWdlci5nbG9iYWxNZXRhLm1ldGFbTV0sZj8odGhpcy5pbnN0YWxsUHJvcFdhdGNoZXIoYSxELGYpLHYm'@;
put 'JnRoaXMuaW5zdGFsbFByb3BXYXRjaGVyKGgsRCxmKSk6ZCYmKHRoaXMuaW5zdGFsbFByb3BXYXRjaGVyKGEsRCxmdW5jdGlvbiBFcnQoYyxsKXtyZXR1cm4gYy5nZXQoZnVuY3Rpb24gVHJ0KGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJn'@;
put 'dW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX0oYyxsKSl9KGhwZSx0aGlzKSksdGhpcy5tZXRhTWFuYWdlci5nbG9iYWxNZXRhLm1ldGEuX2luaXRPbmx5U2V0dGluZ3N8fCh0aGlz'@;
put 'Lm1ldGFNYW5hZ2VyLmdsb2JhbE1ldGEubWV0YS5faW5pdE9ubHlTZXR0aW5ncz1bXSksdGhpcy5tZXRhTWFuYWdlci5nbG9iYWxNZXRhLm1ldGEuX2luaXRPbmx5U2V0dGluZ3MucHVzaChhKSl9KX1pbnN0YWxsUHJvcFdhdGNoZXIobCxhLGQpe2NvbnN0IGg9dGhpcztPYmplY3QuZGVmaW5l'@;
put 'UHJvcGVydHkodGhpcy5tZXRhTWFuYWdlci5nbG9iYWxNZXRhLm1ldGEsbCx7Z2V0KCl7cmV0dXJuIHRoaXNbYV19LHNldChmKXtjb25zdCB2PSFoLnVzYWdlVHJhY2tlci5oYXMobCk7aC51c2FnZVRyYWNrZXIuYWRkKGwpLGQuY2FsbChoLGwsZix2KSx0aGlzW2FdPWZ9LGVudW1lcmFibGU6'@;
put 'ITAsY29uZmlndXJhYmxlOiEwfSl9fWNvbnN0IGZwZT0vXihcclxufFxuXHJ8XHJ8XG4pLyxrcnQ9L15bXlx0XHJcbl0rLyxwcGU9L15cdC87ZnVuY3Rpb24gclQoYyl7bGV0IGwsYSxkLGgsdixmPSIiO2ZvcihsPTAsYT1jLmxlbmd0aDtsPGE7bCs9MSl7Zm9yKGg9Y1tsXS5sZW5ndGgsZD0w'@;
put 'O2Q8aDtkKz0xKWQ+MCYmKGYrPSJcdCIpLHY9Y1tsXVtkXSwic3RyaW5nIj09dHlwZW9mIHY/di5pbmRleE9mKCJcbiIpPi0xP2YrPWAiJHt2LnJlcGxhY2UoLyIvZywnIiInKX0iYDpmKz12OmYrPW51bGw9PXY/IiI6djtsIT09YS0xJiYoZis9IlxuIil9cmV0dXJuIGZ9ZnVuY3Rpb24gcjko'@;
put 'YyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIElydChjKXt2YXIgbD1mdW5jdGlvbiBScnQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lm'@;
put 'KCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10'@;
put 'eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNsYXNzIFRfe3N0YXRpYyBnZXQgREVTVElOQVRJT05fUkVOREVSRVIoKXtyZXR1cm4gMX1z'@;
put 'dGF0aWMgZ2V0IERFU1RJTkFUSU9OX0NMSVBCT0FSRF9HRU5FUkFUT1IoKXtyZXR1cm4gMn1jb25zdHJ1Y3RvcihsLGEsZCl7cjkodGhpcywiaG90Iix2b2lkIDApLHI5KHRoaXMsIm1ldGFNYW5hZ2VyIix2b2lkIDApLHI5KHRoaXMsInRhYmxlTWV0YSIsdm9pZCAwKSxyOSh0aGlzLCJkYXRh'@;
put 'U291cmNlIix2b2lkIDApLHI5KHRoaXMsImR1Y2tTY2hlbWEiLHZvaWQgMCkscjkodGhpcywiY29sVG9Qcm9wQ2FjaGUiLHZvaWQgMCkscjkodGhpcywicHJvcFRvQ29sQ2FjaGUiLHZvaWQgMCksdGhpcy5ob3Q9bCx0aGlzLm1ldGFNYW5hZ2VyPWQsdGhpcy50YWJsZU1ldGE9ZC5nZXRUYWJs'@;
put 'ZU1ldGEoKSx0aGlzLmRhdGFTb3VyY2U9YSx0aGlzLnJlZnJlc2hEdWNrU2NoZW1hKCksdGhpcy5jcmVhdGVNYXAoKX1jcmVhdGVNYXAoKXtjb25zdCBsPXRoaXMuZ2V0U2NoZW1hKCk7aWYodHlwZW9mIGw+InUiKXRocm93IG5ldyBFcnJvcigidHJ5aW5nIHRvIGNyZWF0ZSBgY29sdW1uc2Ag'@;
put 'ZGVmaW5pdGlvbiBidXQgeW91IGRpZG4ndCBwcm92aWRlIGBzY2hlbWFgIG5vciBgZGF0YWAiKTtjb25zdCBhPXRoaXMudGFibGVNZXRhLmNvbHVtbnM7bGV0IGQ7aWYodGhpcy5jb2xUb1Byb3BDYWNoZT1bXSx0aGlzLnByb3BUb0NvbENhY2hlPW5ldyBNYXAsYSl7bGV0IGg9MCxmPTAsdj0h'@;
put 'MTtpZigiZnVuY3Rpb24iPT10eXBlb2YgYSl7Y29uc3QgTT1CTyhsKTtoPU0+MD9NOnRoaXMuY291bnRGaXJzdFJvd0tleXMoKSx2PSEwfWVsc2UgaD1NYXRoLm1pbih0aGlzLnRhYmxlTWV0YS5tYXhDb2xzLGEubGVuZ3RoKTtmb3IoZD0wO2Q8aDtkKyspe2NvbnN0IE09dj9hKGQpOmFbZF07'@;
put 'aWYocW8oTSkpe2lmKHR5cGVvZiBNLmRhdGE8InUiKXtjb25zdCBEPXY/ZjpkO3RoaXMuY29sVG9Qcm9wQ2FjaGVbRF09TS5kYXRhLHRoaXMucHJvcFRvQ29sQ2FjaGUuc2V0KE0uZGF0YSxEKX1mKz0xfX19ZWxzZSB0aGlzLnJlY3Vyc2l2ZUR1Y2tDb2x1bW5zKGwpfWNvdW50Rmlyc3RSb3dL'@;
put 'ZXlzKCl7cmV0dXJuIEZLKHRoaXMuZGF0YVNvdXJjZSl9cmVjdXJzaXZlRHVja0NvbHVtbnMobCxhLGQpe2xldCB2LGg9YSxmPWQ7cmV0dXJuIHR5cGVvZiBoPiJ1IiYmKGg9MCxmPSIiKSwib2JqZWN0Ij09dHlwZW9mIGwmJiFBcnJheS5pc0FycmF5KGwpJiZYbyhsLChNLEQpPT57bnVsbD09'@;
put 'PU0/KHY9ZitELHRoaXMuY29sVG9Qcm9wQ2FjaGUucHVzaCh2KSx0aGlzLnByb3BUb0NvbENhY2hlLnNldCh2LGgpLGgrPTEpOmg9dGhpcy5yZWN1cnNpdmVEdWNrQ29sdW1ucyhNLGgsYCR7RH0uYCl9KSxofWNvbFRvUHJvcChsKXtpZighMT09PU51bWJlci5pc0ludGVnZXIobCkpcmV0dXJu'@;
put 'IGw7Y29uc3QgYT10aGlzLmhvdC50b1BoeXNpY2FsQ29sdW1uKGwpO3JldHVybiBudWxsPT09YT9sOnRoaXMuY29sVG9Qcm9wQ2FjaGUmJlBhKHRoaXMuY29sVG9Qcm9wQ2FjaGVbYV0pP3RoaXMuY29sVG9Qcm9wQ2FjaGVbYV06YX1wcm9wVG9Db2wobCl7Y29uc3QgYT10aGlzLnByb3BUb0Nv'@;
put 'bENhY2hlLmdldChsKTtpZihQYShhKSlyZXR1cm4gdGhpcy5ob3QudG9WaXN1YWxDb2x1bW4oYSk7Y29uc3QgZD10aGlzLmhvdC50b1Zpc3VhbENvbHVtbihsKTtyZXR1cm4gbnVsbD09PWQ/bDpkfWdldFNjaGVtYSgpe2NvbnN0IGw9dGhpcy50YWJsZU1ldGEuZGF0YVNjaGVtYTtyZXR1cm4g'@;
put 'bD8iZnVuY3Rpb24iPT10eXBlb2YgbD9sKCk6bDp0aGlzLmR1Y2tTY2hlbWF9Y3JlYXRlRHVja1NjaGVtYSgpe3JldHVybiB0aGlzLmRhdGFTb3VyY2UmJnRoaXMuZGF0YVNvdXJjZVswXT9zXyh0aGlzLmRhdGFTb3VyY2VbMF0pOnt9fXJlZnJlc2hEdWNrU2NoZW1hKCl7dGhpcy5kdWNrU2No'@;
put 'ZW1hPXRoaXMuY3JlYXRlRHVja1NjaGVtYSgpfWNyZWF0ZVJvdyhsKXtsZXQgYT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06MSx7c291cmNlOmQsbW9kZTpoPSJhYm92ZSJ9PWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1l'@;
put 'bnRzWzJdP2FyZ3VtZW50c1syXTp7fTtjb25zdCBmPXRoaXMuaG90LmNvdW50U291cmNlUm93cygpO2xldCB2PWYsTT0wLEQ9bDtpZigoIm51bWJlciIhPXR5cGVvZiBEfHxEPj1mKSYmKEQ9ZiksRDx0aGlzLmhvdC5jb3VudFJvd3MoKSYmKHY9dGhpcy5ob3QudG9QaHlzaWNhbFJvdyhEKSks'@;
put 'ITE9PT10aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlQ3JlYXRlUm93IixELGEsZCl8fG51bGw9PT12KXJldHVybntkZWx0YTowfTtjb25zdCByZT10aGlzLnRhYmxlTWV0YS5tYXhSb3dzLGNlPXRoaXMuZ2V0U2NoZW1hKCkubGVuZ3RoLGJlPVtdO2Zvcig7TTxhJiZmK008cmU7KXtsZXQgQmU9'@;
put 'bnVsbDsiYXJyYXkiPT09dGhpcy5ob3QuZGF0YVR5cGU/dGhpcy50YWJsZU1ldGEuZGF0YVNjaGVtYT9CZT1nMSh0aGlzLmdldFNjaGVtYSgpKTooQmU9W10sR2EoY2UtMSwoKT0+QmUucHVzaChudWxsKSkpOiJmdW5jdGlvbiI9PT10aGlzLmhvdC5kYXRhVHlwZT9CZT10aGlzLnRhYmxlTWV0'@;
put 'YS5kYXRhU2NoZW1hKEQrTSk6KEJlPXt9LHhFKEJlLHRoaXMuZ2V0U2NoZW1hKCkpKSxiZS5wdXNoKEJlKSxNKz0xfXRoaXMuaG90LnJvd0luZGV4TWFwcGVyLmluc2VydEluZGV4ZXMoRCxNKSwiYmVsb3ciPT09aCYmKHY9TWF0aC5taW4odisxLGYpKSx0aGlzLnNwbGljZURhdGEodiwwLGJl'@;
put 'KTtjb25zdCBFZT10aGlzLmhvdC50b1Zpc3VhbFJvdyh2KTtyZXR1cm4gdGhpcy5ob3QuY291bnRTb3VyY2VSb3dzKCk9PT1iZS5sZW5ndGgmJnRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLmluaXRUb0xlbmd0aCh0aGlzLmhvdC5nZXRJbml0aWFsQ29sdW1uQ291bnQoKSksTT4wJiYobnVs'@;
put 'bD09bD90aGlzLm1ldGFNYW5hZ2VyLmNyZWF0ZVJvdyhudWxsLE0pOiJhdXRvIiE9PWQmJnRoaXMubWV0YU1hbmFnZXIuY3JlYXRlUm93KHYsYSkpLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlckNyZWF0ZVJvdyIsRWUsTSxkKSx7ZGVsdGE6TSxzdGFydFBoeXNpY2FsSW5kZXg6dn19Y3JlYXRl'@;
put 'Q29sKGwpe2xldCBhPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXToxLHtzb3VyY2U6ZCxtb2RlOmg9InN0YXJ0In09YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOnt9O2lmKCF0aGlzLmhv'@;
put 'dC5pc0NvbHVtbk1vZGlmaWNhdGlvbkFsbG93ZWQoKSl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBjcmVhdGUgbmV3IGNvbHVtbi4gV2hlbiBkYXRhIHNvdXJjZSBpbiBhbiBvYmplY3QsIHlvdSBjYW4gb25seSBoYXZlIGFzIG11Y2ggY29sdW1ucyBhcyBkZWZpbmVkIGluIGZpcnN0IGRhdGEg'@;
put 'cm93LCBkYXRhIHNjaGVtYSBvciBpbiB0aGUgJ2NvbHVtbnMnIHNldHRpbmcuSWYgeW91IHdhbnQgdG8gYmUgYWJsZSB0byBhZGQgbmV3IGNvbHVtbnMsIHlvdSBoYXZlIHRvIHVzZSBhcnJheSBkYXRhc291cmNlLiIpO2NvbnN0IGY9dGhpcy5kYXRhU291cmNlLHY9dGhpcy50YWJsZU1ldGEu'@;
put 'bWF4Q29scyxNPXRoaXMuaG90LmNvdW50U291cmNlQ29scygpO2xldCBEPWw7aWYoKCJudW1iZXIiIT10eXBlb2YgRHx8RD49TSkmJihEPU0pLCExPT09dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZUNyZWF0ZUNvbCIsRCxhLGQpKXJldHVybntkZWx0YTowfTtsZXQgcmU9TTtEPHRoaXMuaG90'@;
put 'LmNvdW50Q29scygpJiYocmU9dGhpcy5ob3QudG9QaHlzaWNhbENvbHVtbihEKSk7Y29uc3QgY2U9dGhpcy5ob3QuY291bnRTb3VyY2VSb3dzKCk7bGV0IGJlPXRoaXMuaG90LmNvdW50Q29scygpLEVlPTAsQmU9cmU7ImVuZCI9PT1oJiYoQmU9TWF0aC5taW4oQmUrMSxNKSk7Y29uc3QgcWU9'@;
put 'QmU7Zm9yKDtFZTxhJiZiZTx2Oyl7aWYoIm51bWJlciIhPXR5cGVvZiBEfHxEPj1iZSlpZihjZT4wKWZvcihsZXQgcHQ9MDtwdDxjZTtwdCs9MSl0eXBlb2YgZltwdF0+InUiJiYoZltwdF09W10pLGZbcHRdLnB1c2gobnVsbCk7ZWxzZSBmLnB1c2goW251bGxdKTtlbHNlIGZvcihsZXQgcHQ9'@;
put 'MDtwdDxjZTtwdCsrKWZbcHRdLnNwbGljZShCZSwwLG51bGwpO0VlKz0xLEJlKz0xLGJlKz0xfXRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLmluc2VydEluZGV4ZXMoRCxFZSksRWU+MCYmKG51bGw9PWw/dGhpcy5tZXRhTWFuYWdlci5jcmVhdGVDb2x1bW4obnVsbCxFZSk6ImF1dG8iIT09'@;
put 'ZCYmdGhpcy5tZXRhTWFuYWdlci5jcmVhdGVDb2x1bW4ocWUsYSkpO2NvbnN0IHJ0PXRoaXMuaG90LnRvVmlzdWFsQ29sdW1uKHFlKTtyZXR1cm4gdGhpcy5ob3QucnVuSG9va3MoImFmdGVyQ3JlYXRlQ29sIixydCxFZSxkKSx0aGlzLnJlZnJlc2hEdWNrU2NoZW1hKCkse2RlbHRhOkVlLHN0'@;
put 'YXJ0UGh5c2ljYWxJbmRleDpxZX19cmVtb3ZlUm93KGwpe2xldCBhPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXToxLGQ9YXJndW1lbnRzLmxlbmd0aD4yP2FyZ3VtZW50c1syXTp2b2lkIDAsaD1OdW1iZXIuaXNJbnRlZ2VyKGwpP2w6LWE7'@;
put 'Y29uc3QgZj10aGlzLnZpc3VhbFJvd3NUb1BoeXNpY2FsKGgsYSksdj10aGlzLmhvdC5jb3VudFNvdXJjZVJvd3MoKTtpZihoPSh2K2gpJXYsITE9PT10aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlUmVtb3ZlUm93IixoLGYubGVuZ3RoLGYsZCkpcmV0dXJuITE7Y29uc3QgRD1mLmxlbmd0aDtp'@;
put 'Zih0aGlzLmZpbHRlckRhdGEoaCxELGYpLGg8dGhpcy5ob3QuY291bnRSb3dzKCkpe3RoaXMuaG90LnJvd0luZGV4TWFwcGVyLnJlbW92ZUluZGV4ZXMoZik7Y29uc3QgcmU9UGEodGhpcy50YWJsZU1ldGEuY29sdW1ucyl8fFBhKHRoaXMudGFibGVNZXRhLmRhdGFTY2hlbWEpfHx0aGlzLnRh'@;
put 'YmxlTWV0YS5jb2xIZWFkZXJzOzA9PT10aGlzLmhvdC5yb3dJbmRleE1hcHBlci5nZXROb3RUcmltbWVkSW5kZXhlc0xlbmd0aCgpJiYhcmUmJnRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLnNldEluZGV4ZXNTZXF1ZW5jZShbXSl9cmV0dXJuIGYuc2xpY2UoMCkuc29ydCgocmUsY2UpPT5j'@;
put 'ZS1yZSkuZm9yRWFjaChyZT0+e3RoaXMubWV0YU1hbmFnZXIucmVtb3ZlUm93KHJlLDEpfSksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyUmVtb3ZlUm93IixoLEQsZixkKSwhMH1yZW1vdmVDb2wobCl7bGV0IGE9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJn'@;
put 'dW1lbnRzWzFdOjEsZD1hcmd1bWVudHMubGVuZ3RoPjI/YXJndW1lbnRzWzJdOnZvaWQgMDtpZigib2JqZWN0Ij09PXRoaXMuaG90LmRhdGFUeXBlfHx0aGlzLnRhYmxlTWV0YS5jb2x1bW5zKXRocm93IG5ldyBFcnJvcigiY2Fubm90IHJlbW92ZSBjb2x1bW4gd2l0aCBvYmplY3QgZGF0YSBz'@;
put 'b3VyY2Ugb3IgY29sdW1ucyBvcHRpb24gc3BlY2lmaWVkIik7bGV0IGg9Im51bWJlciIhPXR5cGVvZiBsPy1hOmw7aD0odGhpcy5ob3QuY291bnRDb2xzKCkraCkldGhpcy5ob3QuY291bnRDb2xzKCk7Y29uc3QgZj10aGlzLnZpc3VhbENvbHVtbnNUb1BoeXNpY2FsKGgsYSksdj1mLnNsaWNl'@;
put 'KDApLnNvcnQoKGNlLGJlKT0+YmUtY2UpO2lmKCExPT09dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZVJlbW92ZUNvbCIsaCxhLGYsZCkpcmV0dXJuITE7bGV0IEQ9ITA7Y29uc3QgWj12Lmxlbmd0aCxyZT10aGlzLmRhdGFTb3VyY2U7Zm9yKGxldCBjZT0wO2NlPFo7Y2UrKylEJiZmWzBdIT09'@;
put 'ZltjZV0tY2UmJihEPSExKTtpZihEKWZvcihsZXQgY2U9MCxiZT10aGlzLmhvdC5jb3VudFNvdXJjZVJvd3MoKTtjZTxiZTtjZSsrKXJlW2NlXS5zcGxpY2UoZlswXSxhKSwwPT09Y2UmJnRoaXMubWV0YU1hbmFnZXIucmVtb3ZlQ29sdW1uKGZbMF0sYSk7ZWxzZSBmb3IobGV0IGNlPTAsYmU9'@;
put 'dGhpcy5ob3QuY291bnRTb3VyY2VSb3dzKCk7Y2U8YmU7Y2UrKylmb3IobGV0IEVlPTA7RWU8WjtFZSsrKXJlW2NlXS5zcGxpY2UodltFZV0sMSksMD09PWNlJiZ0aGlzLm1ldGFNYW5hZ2VyLnJlbW92ZUNvbHVtbih2W0VlXSwxKTtyZXR1cm4gaDx0aGlzLmhvdC5jb3VudENvbHMoKSYmKHRo'@;
put 'aXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLnJlbW92ZUluZGV4ZXMoZiksIXRoaXMudGFibGVNZXRhLnJvd0hlYWRlcnMmJjA9PT10aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5nZXROb3RUcmltbWVkSW5kZXhlc0xlbmd0aCgpJiZ0aGlzLmhvdC5yb3dJbmRleE1hcHBlci5zZXRJbmRleGVz'@;
put 'U2VxdWVuY2UoW10pKSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJSZW1vdmVDb2wiLGgsYSxmLGQpLHRoaXMucmVmcmVzaER1Y2tTY2hlbWEoKSwhMH1zcGxpY2VDb2wobCxhLGQpe2NvbnN0IGg9dGhpcy5ob3QuZ2V0RGF0YUF0Q29sKGwpLGY9aC5zbGljZShhLGErZCksdj1oLnNsaWNlKGEr'@;
put 'ZCk7Zm9yKHZhciBNPWFyZ3VtZW50cy5sZW5ndGgsRD1uZXcgQXJyYXkoTT4zP00tMzowKSxaPTM7WjxNO1orKylEW1otM109YXJndW1lbnRzW1pdO2wkKEQsdik7bGV0IHJlPTA7Zm9yKDtyZTxkOylELnB1c2gobnVsbCkscmUrPTE7cmV0dXJuIHAyZShEKSx0aGlzLmhvdC5wb3B1bGF0ZUZy'@;
put 'b21BcnJheShhLGwsRCxudWxsLG51bGwsInNwbGljZUNvbCIpLGZ9c3BsaWNlUm93KGwsYSxkKXtjb25zdCBoPXRoaXMuaG90LmdldFNvdXJjZURhdGFBdFJvdyhsKSxmPWguc2xpY2UoYSxhK2QpLHY9aC5zbGljZShhK2QpO2Zvcih2YXIgTT1hcmd1bWVudHMubGVuZ3RoLEQ9bmV3IEFycmF5'@;
put 'KE0+Mz9NLTM6MCksWj0zO1o8TTtaKyspRFtaLTNdPWFyZ3VtZW50c1taXTtsJChELHYpO2xldCByZT0wO2Zvcig7cmU8ZDspRC5wdXNoKG51bGwpLHJlKz0xO3JldHVybiB0aGlzLmhvdC5wb3B1bGF0ZUZyb21BcnJheShsLGEsW0RdLG51bGwsbnVsbCwic3BsaWNlUm93IiksZn1zcGxpY2VE'@;
put 'YXRhKGwsYSxkKXtpZighMSE9PXRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVEYXRhU3BsaWNlIixsLGEsZCkpe2NvbnN0IGY9Wy4uLnRoaXMuZGF0YVNvdXJjZS5zbGljZSgwLGwpLC4uLmQsLi4udGhpcy5kYXRhU291cmNlLnNsaWNlKGwpXTt0aGlzLmRhdGFTb3VyY2UubGVuZ3RoPTAsZi5m'@;
put 'b3JFYWNoKHY9PnRoaXMuZGF0YVNvdXJjZS5wdXNoKHYpKX19ZmlsdGVyRGF0YShsLGEsZCl7bGV0IGg9dGhpcy5ob3QucnVuSG9va3MoImZpbHRlckRhdGEiLGwsYSxkKTshMT09PUFycmF5LmlzQXJyYXkoaCkmJihoPXRoaXMuZGF0YVNvdXJjZS5maWx0ZXIoKGYsdik9Pi0xPT09ZC5pbmRl'@;
put 'eE9mKHYpKSksdGhpcy5kYXRhU291cmNlLmxlbmd0aD0wLEFycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KHRoaXMuZGF0YVNvdXJjZSxoKX1nZXQobCxhKXtjb25zdCBkPXRoaXMuaG90LnRvUGh5c2ljYWxSb3cobCk7bGV0IGg9dGhpcy5kYXRhU291cmNlW2RdO2NvbnN0IGY9dGhpcy5ob3Qu'@;
put 'cnVuSG9va3MoIm1vZGlmeVJvd0RhdGEiLGQpO2g9aXNOYU4oZik/ZjpoO2NvbnN0e2RhdGFEb3ROb3RhdGlvbjp2fT10aGlzLmhvdC5nZXRTZXR0aW5ncygpO2xldCBNPW51bGw7aWYoaCYmaC5oYXNPd25Qcm9wZXJ0eSYmVHUoaCxhKSlNPWhbYV07ZWxzZSBpZih2JiYic3RyaW5nIj09dHlw'@;
put 'ZW9mIGEmJmEuaW5kZXhPZigiLiIpPi0xKXtsZXQgRD1oO2lmKCFEKXJldHVybiBudWxsO2NvbnN0IFo9YS5zcGxpdCgiLiIpO2ZvcihsZXQgcmU9MCxjZT1aLmxlbmd0aDtyZTxjZTtyZSsrKWlmKEQ9RFtaW3JlXV0sdHlwZW9mIEQ+InUiKXJldHVybiBudWxsO009RH1lbHNlImZ1bmN0aW9u'@;
put 'Ij09dHlwZW9mIGEmJihNPWEodGhpcy5kYXRhU291cmNlLnNsaWNlKGQsZCsxKVswXSkpO2lmKHRoaXMuaG90Lmhhc0hvb2soIm1vZGlmeURhdGEiKSl7Y29uc3QgRD1GZChNKTt0aGlzLmhvdC5ydW5Ib29rcygibW9kaWZ5RGF0YSIsZCx0aGlzLnByb3BUb0NvbChhKSxELCJnZXQiKSxELmlz'@;
put 'VG91Y2hlZCgpJiYoTT1ELnZhbHVlKX1yZXR1cm4gTX1nZXRDb3B5YWJsZShsLGEpe3JldHVybiB0aGlzLmhvdC5nZXRDZWxsTWV0YShsLHRoaXMucHJvcFRvQ29sKGEpKS5jb3B5YWJsZT90aGlzLmdldChsLGEpOiIifXNldChsLGEsZCl7Y29uc3QgaD10aGlzLmhvdC50b1BoeXNpY2FsUm93'@;
put 'KGwpO2xldCBmPWQsdj10aGlzLmRhdGFTb3VyY2VbaF07Y29uc3QgTT10aGlzLmhvdC5ydW5Ib29rcygibW9kaWZ5Um93RGF0YSIsaCk7aWYodj1pc05hTihNKT9NOnYsdGhpcy5ob3QuaGFzSG9vaygibW9kaWZ5RGF0YSIpKXtjb25zdCBaPUZkKGYpO3RoaXMuaG90LnJ1bkhvb2tzKCJtb2Rp'@;
put 'ZnlEYXRhIixoLHRoaXMucHJvcFRvQ29sKGEpLFosInNldCIpLFouaXNUb3VjaGVkKCkmJihmPVoudmFsdWUpfWNvbnN0e2RhdGFEb3ROb3RhdGlvbjpEfT10aGlzLmhvdC5nZXRTZXR0aW5ncygpO2lmKHYmJnYuaGFzT3duUHJvcGVydHkmJlR1KHYsYSkpdlthXT1mO2Vsc2UgaWYoRCYmInN0'@;
put 'cmluZyI9PXR5cGVvZiBhJiZhLmluZGV4T2YoIi4iKT4tMSl7bGV0IGNlLFo9dixyZT0wO2NvbnN0IGJlPWEuc3BsaXQoIi4iKTtmb3IocmU9MCxjZT1iZS5sZW5ndGgtMTtyZTxjZTtyZSsrKXtpZigiX19wcm90b19fIj09PWJlW3JlXXx8ImNvbnN0cnVjdG9yIj09PWJlW3JlXXx8InByb3Rv'@;
put 'dHlwZSI9PT1iZVtyZV0pcmV0dXJuO3R5cGVvZiBaW2JlW3JlXV0+InUiJiYoWltiZVtyZV1dPXt9KSxaPVpbYmVbcmVdXX1aW2JlW3JlXV09Zn1lbHNlIGlmKCJmdW5jdGlvbiI9PXR5cGVvZiBhKWEodGhpcy5kYXRhU291cmNlLnNsaWNlKGgsaCsxKVswXSxmKTtlbHNle2lmKCJfX3Byb3Rv'@;
put 'X18iPT09YXx8ImNvbnN0cnVjdG9yIj09PWF8fCJwcm90b3R5cGUiPT09YSlyZXR1cm47dlthXT1mfX12aXN1YWxSb3dzVG9QaHlzaWNhbChsLGEpe2NvbnN0IGQ9dGhpcy5ob3QuY291bnRTb3VyY2VSb3dzKCksaD1bXTtsZXQgTSxmPShkK2wpJWQsdj1hO2Zvcig7ZjxkJiZ2OylNPXRoaXMu'@;
put 'aG90LnRvUGh5c2ljYWxSb3coZiksaC5wdXNoKE0pLHYtPTEsZis9MTtyZXR1cm4gaH12aXN1YWxDb2x1bW5zVG9QaHlzaWNhbChsLGEpe2NvbnN0IGQ9dGhpcy5ob3QuY291bnRDb2xzKCksaD1bXTtsZXQgZj0oZCtsKSVkLHY9YTtmb3IoO2Y8ZCYmdjspe2NvbnN0IE09dGhpcy5ob3QudG9Q'@;
put 'aHlzaWNhbENvbHVtbihmKTtoLnB1c2goTSksdi09MSxmKz0xfXJldHVybiBofWNsZWFyKCl7Zm9yKGxldCBsPTA7bDx0aGlzLmhvdC5jb3VudFNvdXJjZVJvd3MoKTtsKyspZm9yKGxldCBhPTA7YTx0aGlzLmhvdC5jb3VudENvbHMoKTthKyspdGhpcy5zZXQobCx0aGlzLmNvbFRvUHJvcChh'@;
put 'KSwiIil9Z2V0TGVuZ3RoKCl7Y29uc3QgbD10aGlzLnRhYmxlTWV0YS5tYXhSb3dzO2xldCBhO2E9bDwwfHwwPT09bD8wOmx8fDEvMDtjb25zdCBkPXRoaXMuaG90LnJvd0luZGV4TWFwcGVyLmdldE5vdFRyaW1tZWRJbmRleGVzTGVuZ3RoKCk7cmV0dXJuIE1hdGgubWluKGQsYSl9Z2V0QWxs'@;
put 'KCl7Y29uc3QgbD17cm93OjAsY29sOjB9LGE9e3JvdzpNYXRoLm1heCh0aGlzLmhvdC5jb3VudFJvd3MoKS0xLDApLGNvbDpNYXRoLm1heCh0aGlzLmhvdC5jb3VudENvbHMoKS0xLDApfTtyZXR1cm4gbC5yb3ctYS5yb3chPTB8fHRoaXMuaG90LmNvdW50U291cmNlUm93cygpP3RoaXMuZ2V0'@;
put 'UmFuZ2UobCxhLFRfLkRFU1RJTkFUSU9OX1JFTkRFUkVSKTpbXX1jb3VudENhY2hlZENvbHVtbnMoKXtyZXR1cm4gdGhpcy5jb2xUb1Byb3BDYWNoZS5sZW5ndGh9Z2V0UmFuZ2UobCxhLGQpe2NvbnN0IGg9W107bGV0IGYsdixNO2NvbnN0IEQ9dGhpcy50YWJsZU1ldGEubWF4Um93cyxaPXRo'@;
put 'aXMudGFibGVNZXRhLm1heENvbHM7aWYoMD09PUR8fDA9PT1aKXJldHVybltdO2NvbnN0IHJlPWQ9PT1UXy5ERVNUSU5BVElPTl9DTElQQk9BUkRfR0VORVJBVE9SP3RoaXMuZ2V0Q29weWFibGU6dGhpcy5nZXQsY2U9TWF0aC5taW4oTWF0aC5tYXgoRC0xLDApLE1hdGgubWF4KGwucm93LGEu'@;
put 'cm93KSksYmU9TWF0aC5taW4oTWF0aC5tYXgoWi0xLDApLE1hdGgubWF4KGwuY29sLGEuY29sKSk7Zm9yKGY9TWF0aC5taW4obC5yb3csYS5yb3cpO2Y8PWNlO2YrKyl7TT1bXTtjb25zdCBFZT1mPj0wP3RoaXMuaG90LnRvUGh5c2ljYWxSb3coZik6Zjtmb3Iodj1NYXRoLm1pbihsLmNvbCxh'@;
put 'LmNvbCk7djw9YmUmJm51bGwhPT1FZTt2KyspTS5wdXNoKHJlLmNhbGwodGhpcyxmLHRoaXMuY29sVG9Qcm9wKHYpKSk7bnVsbCE9PUVlJiZoLnB1c2goTSl9cmV0dXJuIGh9Z2V0VGV4dChsLGEpe3JldHVybiByVCh0aGlzLmdldFJhbmdlKGwsYSxUXy5ERVNUSU5BVElPTl9SRU5ERVJFUikp'@;
put 'fWdldENvcHlhYmxlVGV4dChsLGEpe3JldHVybiByVCh0aGlzLmdldFJhbmdlKGwsYSxUXy5ERVNUSU5BVElPTl9DTElQQk9BUkRfR0VORVJBVE9SKSl9ZGVzdHJveSgpe3RoaXMuaG90PW51bGwsdGhpcy5tZXRhTWFuYWdlcj1udWxsLHRoaXMuZGF0YVNvdXJjZT1udWxsLHRoaXMuZHVja1Nj'@;
put 'aGVtYT1udWxsLHRoaXMuY29sVG9Qcm9wQ2FjaGUubGVuZ3RoPTAsdGhpcy5wcm9wVG9Db2xDYWNoZS5jbGVhcigpLHRoaXMucHJvcFRvQ29sQ2FjaGU9dm9pZCAwfX1jb25zdCBMcnQ9VF87ZnVuY3Rpb24gZ3BlKGMsbCxhLGQpe2NvbnN0e2hvdEluc3RhbmNlOmgsZGF0YU1hcDpmLGRhdGFT'@;
put 'b3VyY2U6dixpbnRlcm5hbFNvdXJjZTpNLHNvdXJjZTpELG1ldGFNYW5hZ2VyOlosZmlyc3RSdW46cmV9PWQsY2U9cDEoTSksYmU9aC5nZXRTZXR0aW5ncygpO2guZGF0YVR5cGU9QXJyYXkuaXNBcnJheShiZS5kYXRhU2NoZW1hKT8iYXJyYXkiOm1sKGJlLmRhdGFTY2hlbWEpPyJmdW5jdGlv'@;
put 'biI6Im9iamVjdCIsZiYmZi5kZXN0cm95KCksYz1oLnJ1bkhvb2tzKGBiZWZvcmUke2NlfWAsYyxyZSxEKTtjb25zdCBFZT1uZXcgTHJ0KGgsYyxaKTtpZihsKEVlKSwib2JqZWN0Ij09dHlwZW9mIGMmJm51bGwhPT1jKWMucHVzaCYmYy5zcGxpY2V8fChjPVtjXSk7ZWxzZXtpZihudWxsIT09'@;
put 'Yyl0aHJvdyBuZXcgRXJyb3IoYCR7TX0gb25seSBhY2NlcHRzIGFycmF5IG9mIG9iamVjdHMgb3IgYXJyYXkgb2YgYXJyYXlzICgke3R5cGVvZiBjfSBnaXZlbilgKTt7Y29uc3QgQmU9RWUuZ2V0U2NoZW1hKCk7Yz1bXTtsZXQgcWUscnQ9MCxwdD0wO2ZvcihydD0wLHB0PWJlLnN0YXJ0Um93'@;
put 'cztydDxwdDtydCsrKWlmKCJvYmplY3QiIT09aC5kYXRhVHlwZSYmImZ1bmN0aW9uIiE9PWguZGF0YVR5cGV8fCFiZS5kYXRhU2NoZW1hKWlmKCJhcnJheSI9PT1oLmRhdGFUeXBlKXFlPWcxKEJlWzBdKSxjLnB1c2gocWUpO2Vsc2V7cWU9W107Zm9yKGxldCBkdD0wLEp0PWJlLnN0YXJ0Q29s'@;
put 'cztkdDxKdDtkdCsrKXFlLnB1c2gobnVsbCk7Yy5wdXNoKHFlKX1lbHNlIHFlPWcxKEJlKSxjLnB1c2gocWUpfX1BcnJheS5pc0FycmF5KGNbMF0pJiYoaC5kYXRhVHlwZT0iYXJyYXkiKSxiZS5kYXRhPWMsRWUuZGF0YVNvdXJjZT1jLHYuZGF0YT1jLHYuZGF0YVR5cGU9aC5kYXRhVHlwZSx2'@;
put 'LmNvbFRvUHJvcD1FZS5jb2xUb1Byb3AuYmluZChFZSksdi5wcm9wVG9Db2w9RWUucHJvcFRvQ29sLmJpbmQoRWUpLHYuY291bnRDYWNoZWRDb2x1bW5zPUVlLmNvdW50Q2FjaGVkQ29sdW1ucy5iaW5kKEVlKSxhKEVlKSxoLnJ1bkhvb2tzKGBhZnRlciR7Y2V9YCxjLHJlLEQpLHJlfHwoaC5y'@;
put 'dW5Ib29rcygiYWZ0ZXJDaGFuZ2UiLG51bGwsTSksaC5yZW5kZXIoKSksaC5nZXRTZXR0aW5ncygpLmFyaWFUYWdzJiZ2byhoLnJvb3RFbGVtZW50LFtUMmUoLTEpLFJPKGguY291bnRDb2xzKCkrKGgudmlldz9oLmNvdW50Um93SGVhZGVycygpOjApKV0pfWZ1bmN0aW9uIEFfKGMpe0VwKGMp'@;
put 'JiZjLnNjcm9sbEludG9WaWV3KHtibG9jazoibmVhcmVzdCIsaW5saW5lOiJuZWFyZXN0In0pfWZ1bmN0aW9uIEZQKGMpe2NvbnN0e3NlbGVjdGlvbjpsLHZpZXc6YX09YyxkPWMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSxoPWwuZ2V0U2VsZWN0aW9uU291cmNlKCksZj1hLmdldEZpcnN0RnVs'@;
put 'bHlWaXNpYmxlQ29sdW1uKCksdj1hLmdldExhc3RGdWxseVZpc2libGVDb2x1bW4oKSxNPWQuZ2V0VG9wU3RhcnRDb3JuZXIoKS5jb2wsRD1kLmdldEJvdHRvbUVuZENvcm5lcigpLmNvbCxaPU08PWYscmU9RD49dixjZT1hLmdldEZpcnN0RnVsbHlWaXNpYmxlUm93KCksYmU9YS5nZXRMYXN0'@;
put 'RnVsbHlWaXNpYmxlUm93KCksRWU9ZC5nZXRUb3BTdGFydENvcm5lcigpLnJvdyxCZT1kLmdldEJvdHRvbUVuZENvcm5lcigpLnJvdyxxZT1FZTw9Y2UscnQ9QmU+PWJlO3JldHVybntnZXRDb21wdXRlZENvbHVtblRhcmdldDpwdD0+Im1vdXNlIj09PWh8fCJrZXlib2FyZCI9PT1oP3B0LmNv'@;
put 'bDpaJiZyZT9kLmhpZ2hsaWdodC5jb2w6Wj9NOnJlP0Q6cHQuY29sLGdldENvbXB1dGVkUm93VGFyZ2V0OnB0PT4ibW91c2UiPT09aHx8ImtleWJvYXJkIj09PWg/cHQucm93OnFlJiZydD9kLmhpZ2hsaWdodC5yb3c6cWU/RWU6cnQ/QmU6cHQucm93fX1jb25zdCBtcGU9ImdyaWREZWZhdWx0'@;
put 'IixXbT0iZWRpdG9yTWFuYWdlci5oYW5kbGluZ0VkaXRvciI7ZnVuY3Rpb24gdnBlKGMpe2NvbnN0IGE9Yy5yb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaW5wdXQiKTtyZXR1cm4gYS50eXBlPSJ0ZXh0IixhLm5hbWU9Il9faHRGb2N1c0NhdGNoZXIiLGEuY2xhc3NMaXN0LmFkZCgiaHRG'@;
put 'b2N1c0NhdGNoZXIiKSxjLmdldFNldHRpbmdzKCkuYXJpYVRhZ3MmJnZvKGEsW21FKCJGb2N1cyBjYXRjaGVyIildKSxhfWZ1bmN0aW9uIEVYKGMpe2NvbnN0e3Jvd0luZGV4TWFwcGVyOmwsY29sdW1uSW5kZXhNYXBwZXI6YX09Yyx7bmF2aWdhYmxlSGVhZGVyczpkfT1jLmdldFNldHRpbmdz'@;
put 'KCk7bGV0IGg9ZCYmYy5jb3VudENvbEhlYWRlcnMoKT4wPy1jLmNvdW50Q29sSGVhZGVycygpOjAsZj1kJiZjLmNvdW50Um93SGVhZGVycygpPjA/LWMuY291bnRSb3dIZWFkZXJzKCk6MDtyZXR1cm4gMD09PWgmJihoPWwuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleChoKSksMD09PWYm'@;
put 'JihmPWEuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleChmKSksbnVsbD09PWh8fG51bGw9PT1mP251bGw6Yy5fY3JlYXRlQ2VsbENvb3JkcyhoLGYpfWZ1bmN0aW9uIFRYKGMpe3ZhciBsLGE7Y29uc3R7cm93SW5kZXhNYXBwZXI6ZCxjb2x1bW5JbmRleE1hcHBlcjpofT1jLHtuYXZpZ2Fi'@;
put 'bGVIZWFkZXJzOmZ9PWMuZ2V0U2V0dGluZ3MoKTtsZXQgdj1kLmdldFJlbmRlcmFibGVJbmRleGVzTGVuZ3RoKCktMSxNPWguZ2V0UmVuZGVyYWJsZUluZGV4ZXNMZW5ndGgoKS0xO2lmKHY8MCl7aWYoIWZ8fDA9PT1jLmNvdW50Q29sSGVhZGVycygpKXJldHVybiBudWxsO3Y9LTF9aWYoTTww'@;
put 'KXtpZighZnx8MD09PWMuY291bnRDb2xIZWFkZXJzKCkpcmV0dXJuIG51bGw7TT0tMX1yZXR1cm4gYy5fY3JlYXRlQ2VsbENvb3JkcyhudWxsIT09KGw9ZC5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KHYpKSYmdm9pZCAwIT09bD9sOnYsbnVsbCE9PShhPWguZ2V0VmlzdWFsRnJvbVJl'@;
put 'bmRlcmFibGVJbmRleChNKSkmJnZvaWQgMCE9PWE/YTpNKX1jb25zdCBicGU9bmV3IE1hcChbWyIgIiwic3BhY2UiXSxbInNwYWNlYmFyIiwic3BhY2UiXSxbInNjcm9sbCIsInNjcm9sbGxvY2siXSxbImRlbCIsImRlbGV0ZSJdLFsiZXNjIiwiZXNjYXBlIl0sWyJtZWRpYW5leHR0cmFjayIs'@;
put 'Im1lZGlhdHJhY2tuZXh0Il0sWyJtZWRpYXByZXZpb3VzdHJhY2siLCJtZWRpYXRyYWNrcHJldmlvdXMiXSxbInZvbHVtZXVwIiwiYXVkaW92b2x1bWV1cCJdLFsidm9sdW1lZG93biIsImF1ZGlvdm9sdW1lZG93biJdLFsidm9sdW1lbXV0ZSIsImF1ZGlvdm9sdW1lbXV0ZSJdLFsibXVsdGlw'@;
put 'bHkiLCIqIl0sWyJhZGQiLCIrIl0sWyJkaXZpZGUiLCIvIl0sWyJzdWJ0cmFjdCIsIi0iXSxbImxlZnQiLCJhcnJvd2xlZnQiXSxbInJpZ2h0IiwiYXJyb3dyaWdodCJdLFsidXAiLCJhcnJvd3VwIl0sWyJkb3duIiwiYXJyb3dkb3duIl1dKSxIUD1jPT5jLm1hcChsPT57Y29uc3QgYT1sLnRv'@;
put 'TG93ZXJDYXNlKCk7cmV0dXJuIGJwZS5oYXMoYSk/YnBlLmdldChhKTphfSkuc29ydCgpLmpvaW4oIisiKSx5cGU9bmV3IE1hcChbWzk2LCJudW1wYWQwIl0sWzk3LCJudW1wYWQxIl0sWzk4LCJudW1wYWQyIl0sWzk5LCJudW1wYWQzIl0sWzEwMCwibnVtcGFkNCJdLFsxMDEsIm51bXBhZDUi'@;
put 'XSxbMTAyLCJudW1wYWQ2Il0sWzEwMywibnVtcGFkNyJdLFsxMDQsIm51bXBhZDgiXSxbMTA1LCJudW1wYWQ5Il0sWzEwNiwibXVsdGlwbHkiXSxbMTA3LCJhZGQiXSxbMTA4LCJkZWNpbWFsIl0sWzEwOSwic3VidHJhY3QiXSxbMTEwLCJkZWNpbWFsIl0sWzExMSwiZGl2aWRlIl0sWzExMiwi'@;
put 'ZjEiXSxbMTEzLCJmMiJdLFsxMTQsImYzIl0sWzExNSwiZjQiXSxbMTE2LCJmNSJdLFsxMTcsImY2Il0sWzExOCwiZjciXSxbMTE5LCJmOCJdLFsxMjAsImY5Il0sWzEyMSwiZjEwIl0sWzEyMiwiZjExIl0sWzEyMywiZjEyIl0sWzE4Niwic2VtaWNvbG9uIl0sWzE4NywiZXF1YWwiXSxbMTg4'@;
put 'LCJjb21tYSJdLFsxODksIm1pbnVzIl0sWzE5MCwicGVyaW9kIl0sWzE5MSwic2xhc2giXSxbMTkyLCJiYWNrcXVvdGUiXSxbMjE5LCJicmFja2V0bGVmdCJdLFsyMjAsImJhY2tzbGFzaCJdLFsyMjEsImJyYWNrZXRyaWdodCJdLFsyMjIsInF1b3RlIl1dKSxBWD1jPT57bGV0e3doaWNoOmws'@;
put 'a2V5OmF9PWM7aWYoeXBlLmhhcyhsKSlyZXR1cm4geXBlLmdldChsKTtjb25zdCBkPVN0cmluZy5mcm9tQ2hhckNvZGUobCkudG9Mb3dlckNhc2UoKTtyZXR1cm4vXlthLXowLTldJC8udGVzdChkKT9kOmEudG9Mb3dlckNhc2UoKX0sX3BlPVN5bWJvbCgic2hvcnRjdXQtY29udGV4dCIpO2Z1'@;
put 'bmN0aW9uIHdwZShjKXtyZXR1cm4gcW8oYykmJmMuX19raW5kT2Y9PT1fcGV9Y29uc3QgJHJ0PVsibWV0YSIsImFsdCIsInNoaWZ0IiwiY29udHJvbCJdLGlUPWZ1bmN0aW9uIEdydCgpe2NvbnN0IGM9bmV3IFNldDtyZXR1cm57cHJlc3MobCl7Yy5hZGQobCl9LHJlbGVhc2UobCl7Yy5kZWxl'@;
put 'dGUobCl9LHJlbGVhc2VBbGwoKXtjLmNsZWFyKCl9LGlzUHJlc3NlZDpsPT5jLmhhcyhsKX19KCksYVQ9W107bGV0IE5QPTA7Y29uc3QgcXJ0PWM9PntsZXR7b3duZXJXaW5kb3c6bCxoYW5kbGVFdmVudDphLGJlZm9yZUtleURvd246ZCxhZnRlcktleURvd246aH09Yztjb25zdCBmPUpPKHtl'@;
put 'cnJvcklkRXhpc3RzOkJlPT5gVGhlICIke0JlfSIgY29udGV4dCBuYW1lIGlzIGFscmVhZHkgcmVnaXN0ZXJlZC5gfSk7bGV0IHY9ImdyaWQiO2NvbnN0IEQ9KCk9PnYsWj1CZT0+Zi5nZXRJdGVtKEJlKTtsZXQgY2U9ITE7Y29uc3QgYmU9ZnVuY3Rpb24oQmUscWUpe2xldCBydD1hcmd1bWVu'@;
put 'dHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06RCgpO2NvbnN0IHB0PXdwZShydCk/cnQ6WihydCk7bGV0IGR0PSExO2lmKCFwdC5oYXNTaG9ydGN1dChxZSkpcmV0dXJuIGR0O2NvbnN0IEp0PXB0LmdldFNob3J0Y3V0cyhxZSk7Zm9yKGxldCB2bj0wO3Zu'@;
put 'PEp0Lmxlbmd0aDt2bisrKXtjb25zdHtjYWxsYmFjazpDbixydW5Pbmx5SWY6dG4scHJldmVudERlZmF1bHQ6TW4sc3RvcFByb3BhZ2F0aW9uOkNyLGNhcHR1cmVDdHJsOkdyLGZvcndhcmRUb0NvbnRleHQ6bXJ9PUp0W3ZuXTtpZighMD09PXRuKEJlKSl7aWYoY2U9R3IsZHQ9ITE9PT1DbihC'@;
put 'ZSxxZSksY2U9ITEsTW4mJkJlLnByZXZlbnREZWZhdWx0KCksQ3ImJihCMihCZSksQmUuc3RvcFByb3BhZ2F0aW9uKCkpLGR0KWJyZWFrO21yJiZiZShCZSxxZSxtcil9fXJldHVybiBkdH0sRWU9ZnVuY3Rpb24gS3J0KGMsbCxhLGQsaCl7Y29uc3QgZj1FZT0+JHJ0LmluY2x1ZGVzKEVlKSx2'@;
put 'PWZ1bmN0aW9uKEVlKXtsZXQgQmU9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0mJmFyZ3VtZW50c1sxXTtjb25zdCBxZT1bXTtyZXR1cm4gRWUuYWx0S2V5JiZxZS5wdXNoKCJhbHQiKSxCZSYmKEVlLmN0cmxLZXl8fEVlLm1ldGFLZXkpP3FlLnB1c2goImNvbnRy'@;
put 'b2wvbWV0YSIpOihFZS5jdHJsS2V5JiZxZS5wdXNoKCJjb250cm9sIiksRWUubWV0YUtleSYmcWUucHVzaCgibWV0YSIpKSxFZS5zaGlmdEtleSYmcWUucHVzaCgic2hpZnQiKSxxZX0sTT1FZT0+e2lmKCExPT09bChFZSl8fCExPT09YShFZSl8fDIyOT09PUVlLmtleUNvZGV8fCJzdHJpbmci'@;
put 'IT10eXBlb2YgRWUua2V5fHxGbShFZSkpcmV0dXJuO2NvbnN0IHFlPUFYKEVlKTtsZXQgcnQ9W107ZihxZSl8fChydD12KEVlKSk7Y29uc3QgcHQ9W3FlXS5jb25jYXQocnQpOyFoKEVlLHB0KSYmKHpPKCkmJnJ0LmluY2x1ZGVzKCJtZXRhIil8fCF6TygpJiZydC5pbmNsdWRlcygiY29udHJv'@;
put 'bCIpKSYmaChFZSxbcWVdLmNvbmNhdCh2KEVlLCEwKSkpLGQoRWUpfSxEPUVlPT57aWYoInN0cmluZyI9PXR5cGVvZiBFZS5rZXkpe2NvbnN0IEJlPUFYKEVlKTtmKEJlKSYmaVQucHJlc3MoQmUpfX0sWj1FZT0+e2lmKCJzdHJpbmciPT10eXBlb2YgRWUua2V5KXtjb25zdCBCZT1BWChFZSk7'@;
put 'ZihCZSkmJmlULnJlbGVhc2UoQmUpfX0scmU9KCk9PntpVC5yZWxlYXNlQWxsKCl9O3JldHVybnttb3VudDooKT0+e2xldCBFZT1jO2ZvcihOUCs9MTtFZTspMT09PU5QJiYoRWUuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLEQpLGFULnB1c2go'@;
put 'e2V2ZW50OiJrZXlkb3duIixsaXN0ZW5lcjpEfSksRWUuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoImtleXVwIixaKSxhVC5wdXNoKHtldmVudDoia2V5dXAiLGxpc3RlbmVyOlp9KSksRWUuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmFkZEV2ZW50TGlzdGVu'@;
put 'ZXIoImtleWRvd24iLE0pLEVlLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJibHVyIixyZSksRWU9QjcoRWUpfSx1bm1vdW50OigpPT57bGV0IEVlPWM7Zm9yKE5QLT0xO0VlOyl7aWYoMD09PU5QKXtmb3IobGV0IEJlPTA7QmU8YVQubGVuZ3RoO0JlKyspe2Nv'@;
put 'bnN0e2V2ZW50OnFlLGxpc3RlbmVyOnJ0fT1hVFtCZV07RWUuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIocWUscnQpfWFULmxlbmd0aD0wfUVlLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJrZXlkb3duIixNKSxFZS5k'@;
put 'b2N1bWVudC5kb2N1bWVudEVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigiYmx1ciIscmUpLEVlPUI3KEVlKX19LGlzUHJlc3NlZDpFZT0+aVQuaXNQcmVzc2VkKEVlKSxyZWxlYXNlUHJlc3NlZEtleXM6KCk9PmlULnJlbGVhc2VBbGwoKX19KGwsYSxkLGgsYmUpO3JldHVybiBFZS5tb3Vu'@;
put 'dCgpLHthZGRDb250ZXh0OkJlPT57Y29uc3QgcWU9KGM9Pntjb25zdCBsPUpPKHtlcnJvcklkRXhpc3RzOkQ9PmBUaGUgIiR7RH0iIHNob3J0Y3V0IGlzIGFscmVhZHkgcmVnaXN0ZXJlZCBpbiB0aGUgIiR7Y30iIGNvbnRleHQuYH0pLGE9ZnVuY3Rpb24oKXtsZXR7a2V5czpELGNhbGxiYWNr'@;
put 'OlosZ3JvdXA6cmUscnVuT25seUlmOmNlPSgoKT0+ITApLGNhcHR1cmVDdHJsOmJlPSExLHByZXZlbnREZWZhdWx0OkVlPSEwLHN0b3BQcm9wYWdhdGlvbjpCZT0hMSxyZWxhdGl2ZVRvR3JvdXA6cWUscG9zaXRpb246cnQsZm9yd2FyZFRvQ29udGV4dDpwdH09YXJndW1lbnRzLmxlbmd0aD4w'@;
put 'JiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnt9O2lmKF9jKHJlKSl0aHJvdyBuZXcgRXJyb3IoIllvdSBuZWVkIHRvIGRlZmluZSB0aGUgc2hvcnRjdXQncyBncm91cC4iKTtpZighMT09PW1sKFopKXRocm93IG5ldyBFcnJvcigiVGhlIHNob3J0Y3V0J3MgY2FsbGJhY2sg'@;
put 'bmVlZHMgdG8gYmUgYSBmdW5jdGlvbi4iKTtpZighMT09PUFycmF5LmlzQXJyYXkoRCkpdGhyb3cgbmV3IEVycm9yKGdsYFBhc3MgdGhlIHNob3J0Y3V0XCdzIGtleXMgYXMgYW4gYXJyYXkgb2YgYXJyYXlzLFx4MjAKICAgICAgdXNpbmcgdGhlIEtleWJvYXJkRXZlbnQua2V5IHByb3BlcnRp'@;
put 'ZXM6XHgyMAogICAgICBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvS2V5Ym9hcmRFdmVudC9rZXkvS2V5X1ZhbHVlcy5gKTtjb25zdCBkdD17Y2FsbGJhY2s6Wixncm91cDpyZSxydW5Pbmx5SWY6Y2UsY2FwdHVyZUN0cmw6YmUscHJldmVudERlZmF1'@;
put 'bHQ6RWUsc3RvcFByb3BhZ2F0aW9uOkJlfTtQYShxZSkmJihkdC5yZWxhdGl2ZVRvR3JvdXA9cWUsZHQucG9zaXRpb249cnQpLHdwZShwdCkmJihkdC5mb3J3YXJkVG9Db250ZXh0PXB0KSxELmZvckVhY2goSnQ9Pntjb25zdCB2bj1IUChKdCk7aWYobC5oYXNJdGVtKHZuKSl7Y29uc3QgdG49'@;
put 'bC5nZXRJdGVtKHZuKTtsZXQgTW49dG4uZmluZEluZGV4KENyPT5Dci5ncm91cD09PXFlKTstMSE9PU1uPyJiZWZvcmUiPT09cnQ/TW4tPTE6TW4rPTE6TW49dG4ubGVuZ3RoLHRuLnNwbGljZShNbiwwLGR0KX1lbHNlIGwuYWRkSXRlbSh2bixbZHRdKX0pfSxoPUQ9Pntjb25zdCBaPUhQKEQp'@;
put 'O2wucmVtb3ZlSXRlbShaKX07cmV0dXJue19fa2luZE9mOl9wZSxhZGRTaG9ydGN1dDphLGFkZFNob3J0Y3V0czpmdW5jdGlvbihEKXtsZXQgWj1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06e307RC5mb3JFYWNoKHJlPT57WG8oWiwoY2Us'@;
put 'YmUpPT57ITE9PT1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocmUsYmUpJiYocmVbYmVdPVpbYmVdKX0pLGEocmUpfSl9LGdldFNob3J0Y3V0czpEPT57Y29uc3QgWj1IUChEKSxyZT1sLmdldEl0ZW0oWik7cmV0dXJuIFBhKHJlKT9yZS5zbGljZSgpOltdfSxoYXNTaG9y'@;
put 'dGN1dDpEPT57Y29uc3QgWj1IUChEKTtyZXR1cm4gbC5oYXNJdGVtKFopfSxyZW1vdmVTaG9ydGN1dHNCeUtleXM6aCxyZW1vdmVTaG9ydGN1dHNCeUdyb3VwOkQ9PntsLmdldEl0ZW1zKCkuZm9yRWFjaChyZT0+e2xldFtjZSxiZV09cmU7Y29uc3QgRWU9YmUuZmlsdGVyKEJlPT5CZS5ncm91'@;
put 'cCE9PUQpOzA9PT1FZS5sZW5ndGg/aCgoYz0+Yy5zcGxpdCgiKyIpKShjZSkpOihiZS5sZW5ndGg9MCxiZS5wdXNoKC4uLkVlKSl9KX19fSkoQmUpO3JldHVybiBmLmFkZEl0ZW0oQmUscWUpLHFlfSxnZXRBY3RpdmVDb250ZXh0TmFtZTpELGdldENvbnRleHQ6WixzZXRBY3RpdmVDb250ZXh0'@;
put 'TmFtZTpCZT0+e2lmKCFmLmhhc0l0ZW0oQmUpKXRocm93IG5ldyBFcnJvcihnbGBZb3UndmUgdHJpZWQgdG8gYWN0aXZhdGUgdGhlICIke0JlfSIgc2hvcnRjdXQgY29udGV4dFx4MjAKICAgICAgICB0aGF0IGRvZXMgbm90IGV4aXN0LiBCZWZvcmUgYWN0aXZhdGlvbiwgcmVnaXN0ZXIgdGhl'@;
put 'IGNvbnRleHQgdXNpbmcgdGhlICJhZGRDb250ZXh0IiBtZXRob2QuYCk7dj1CZX0saXNDdHJsUHJlc3NlZDooKT0+IWNlJiYoRWUuaXNQcmVzc2VkKCJjb250cm9sIil8fEVlLmlzUHJlc3NlZCgibWV0YSIpKSxyZWxlYXNlUHJlc3NlZEtleXM6KCk9PkVlLnJlbGVhc2VQcmVzc2VkS2V5cygp'@;
put 'LGRlc3Ryb3k6KCk9PkVlLnVubW91bnQoKX19LFhydD17bmFtZToiZWRpdG9yQ2xvc2VBbmRTYXZlIixjYWxsYmFjayhjKXtjLl9nZXRFZGl0b3JNYW5hZ2VyKCkuY2xvc2VFZGl0b3JBbmRTYXZlQ2hhbmdlcygpfX0sQ3BlPXtfaG9va3NTdG9yYWdlOk9iamVjdC5jcmVhdGUobnVsbCksYWRk'@;
put 'SG9vayhjLGwpe3JldHVybiB0aGlzLl9ob29rc1N0b3JhZ2VbY118fCh0aGlzLl9ob29rc1N0b3JhZ2VbY109W10pLHRoaXMuaG90LmFkZEhvb2soYyxsKSx0aGlzLl9ob29rc1N0b3JhZ2VbY10ucHVzaChsKSx0aGlzfSxyZW1vdmVIb29rc0J5S2V5KGMpe1luKHRoaXMuX2hvb2tzU3RvcmFn'@;
put 'ZVtjXXx8W10sbD0+e3RoaXMuaG90LnJlbW92ZUhvb2soYyxsKX0pfSxjbGVhckhvb2tzKCl7WG8odGhpcy5faG9va3NTdG9yYWdlLChjLGwpPT50aGlzLnJlbW92ZUhvb2tzQnlLZXkobCkpLHRoaXMuX2hvb2tzU3RvcmFnZT17fX19O1RwKENwZSwiTUlYSU5fTkFNRSIsImhvb2tzUmVmUmVn'@;
put 'aXN0ZXJlciIse3dyaXRhYmxlOiExLGVudW1lcmFibGU6ITF9KTtjb25zdCBRcnQ9Q3BlO2Z1bmN0aW9uIGQzKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBlaXQoYyl7dmFyIGw9ZnVuY3Rpb24gdGl0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5'@;
put 'bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1'@;
put 'cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9'@;
put 'KTpjW2xdPWEsY31jb25zdCBsdT1PYmplY3QuZnJlZXplKHtWSVJHSU46IlNUQVRFX1ZJUkdJTiIsRURJVElORzoiU1RBVEVfRURJVElORyIsV0FJVElORzoiU1RBVEVfV0FJVElORyIsRklOSVNIRUQ6IlNUQVRFX0ZJTklTSEVEIn0pO2NsYXNzIGtfe3N0YXRpYyBnZXQgRURJVE9SX1RZUEUo'@;
put 'KXtyZXR1cm4iYmFzZSJ9Y29uc3RydWN0b3IobCl7ZDModGhpcywiaG90Iix2b2lkIDApLGQzKHRoaXMsInN0YXRlIixsdS5WSVJHSU4pLGQzKHRoaXMsIl9vcGVuZWQiLCExKSxkMyh0aGlzLCJfZnVsbEVkaXRNb2RlIiwhMSksZDModGhpcywiX2Nsb3NlQ2FsbGJhY2siLG51bGwpLGQzKHRo'@;
put 'aXMsIlREIixudWxsKSxkMyh0aGlzLCJyb3ciLG51bGwpLGQzKHRoaXMsImNvbCIsbnVsbCksZDModGhpcywicHJvcCIsbnVsbCksZDModGhpcywib3JpZ2luYWxWYWx1ZSIsbnVsbCksZDModGhpcywiY2VsbFByb3BlcnRpZXMiLG51bGwpLHRoaXMuaG90PWwsdGhpcy5pbml0KCl9X2ZpcmVD'@;
put 'YWxsYmFja3MobCl7dGhpcy5fY2xvc2VDYWxsYmFjayYmKHRoaXMuX2Nsb3NlQ2FsbGJhY2sobCksdGhpcy5fY2xvc2VDYWxsYmFjaz1udWxsKX1pbml0KCl7fWdldFZhbHVlKCl7dGhyb3cgRXJyb3IoIkVkaXRvciBnZXRWYWx1ZSgpIG1ldGhvZCB1bmltcGxlbWVudGVkIil9c2V0VmFsdWUo'@;
put 'KXt0aHJvdyBFcnJvcigiRWRpdG9yIHNldFZhbHVlKCkgbWV0aG9kIHVuaW1wbGVtZW50ZWQiKX1vcGVuKCl7dGhyb3cgRXJyb3IoIkVkaXRvciBvcGVuKCkgbWV0aG9kIHVuaW1wbGVtZW50ZWQiKX1jbG9zZSgpe3Rocm93IEVycm9yKCJFZGl0b3IgY2xvc2UoKSBtZXRob2QgdW5pbXBsZW1l'@;
put 'bnRlZCIpfXByZXBhcmUobCxhLGQsaCxmLHYpe3RoaXMuVEQ9aCx0aGlzLnJvdz1sLHRoaXMuY29sPWEsdGhpcy5wcm9wPWQsdGhpcy5vcmlnaW5hbFZhbHVlPWYsdGhpcy5jZWxsUHJvcGVydGllcz12LHRoaXMuc3RhdGU9dGhpcy5pc09wZW5lZCgpP3RoaXMuc3RhdGU6bHUuVklSR0lOfWV4'@;
put 'dGVuZCgpe3JldHVybiBjbGFzcyBleHRlbmRzIHRoaXMuY29uc3RydWN0b3J7fX1zYXZlVmFsdWUobCxhKXtsZXQgZCxoLGYsdjtpZihhKXtjb25zdCBEPXRoaXMuaG90LmdldFNlbGVjdGVkTGFzdCgpO2Q9TWF0aC5tYXgoTWF0aC5taW4oRFswXSxEWzJdKSwwKSxoPU1hdGgubWF4KE1hdGgu'@;
put 'bWluKERbMV0sRFszXSksMCksZj1NYXRoLm1heChEWzBdLERbMl0pLHY9TWF0aC5tYXgoRFsxXSxEWzNdKX1lbHNlW2QsaCxmLHZdPVt0aGlzLnJvdyx0aGlzLmNvbCxudWxsLG51bGxdO2NvbnN0IE09dGhpcy5ob3QucnVuSG9va3MoIm1vZGlmeUdldENlbGxDb29yZHMiLGQsaCwhMSwibWV0'@;
put 'YSIpO0FycmF5LmlzQXJyYXkoTSkmJihbZCxoXT1NKSx0aGlzLmhvdC5wb3B1bGF0ZUZyb21BcnJheShkLGgsbCxmLHYsImVkaXQiKX1iZWdpbkVkaXRpbmcobCxhKXtpZih0aGlzLnN0YXRlIT09bHUuVklSR0lOKXJldHVybjtjb25zdCBkPXRoaXMuaG90LGg9ZC5yb3dJbmRleE1hcHBlci5n'@;
put 'ZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KHRoaXMucm93KSxmPWQuY29sdW1uSW5kZXhNYXBwZXIuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleCh0aGlzLmNvbCksdj0oKT0+e2lmKHRoaXMuc3RhdGU9bHUuRURJVElORyx0aGlzLmlzSW5GdWxsRWRpdE1vZGUoKSl7Y29uc3QgRD0i'@;
put 'c3RyaW5nIj09dHlwZW9mIGw/bDpsYyh0aGlzLm9yaWdpbmFsVmFsdWUpO3RoaXMuc2V0VmFsdWUoRCl9dGhpcy5vcGVuKGEpLHRoaXMuX29wZW5lZD0hMCx0aGlzLmZvY3VzKCksZC52aWV3LnJlbmRlcigpLGQucnVuSG9va3MoImFmdGVyQmVnaW5FZGl0aW5nIix0aGlzLnJvdyx0aGlzLmNv'@;
put 'bCl9O3RoaXMuaG90LmFkZEhvb2tPbmNlKCJhZnRlclNjcm9sbCIsdiksZC52aWV3LnNjcm9sbFZpZXdwb3J0KGQuX2NyZWF0ZUNlbGxDb29yZHMoaCxmKSl8fCh0aGlzLmhvdC5yZW1vdmVIb29rKCJhZnRlclNjcm9sbCIsdiksdigpKX1maW5pc2hFZGl0aW5nKGwsYSxkKXtsZXQgaDtpZihk'@;
put 'KXtjb25zdCBmPXRoaXMuX2Nsb3NlQ2FsbGJhY2s7dGhpcy5fY2xvc2VDYWxsYmFjaz12PT57ZiYmZih2KSxkKHYpLHRoaXMuaG90LnZpZXcucmVuZGVyKCl9fWlmKCF0aGlzLmlzV2FpdGluZygpKXtpZih0aGlzLnN0YXRlPT09bHUuVklSR0lOKXJldHVybiB2b2lkIHRoaXMuaG90Ll9yZWdp'@;
put 'c3RlclRpbWVvdXQoKCk9Pnt0aGlzLl9maXJlQ2FsbGJhY2tzKCEwKX0pO2lmKHRoaXMuc3RhdGU9PT1sdS5FRElUSU5HKXtpZihsKXJldHVybiB0aGlzLmNhbmNlbENoYW5nZXMoKSx2b2lkIHRoaXMuaG90LnZpZXcucmVuZGVyKCk7Y29uc3QgZj10aGlzLmdldFZhbHVlKCk7aD10aGlzLmNl'@;
put 'bGxQcm9wZXJ0aWVzLnRyaW1XaGl0ZXNwYWNlP1tbInN0cmluZyI9PXR5cGVvZiBmP1N0cmluZy5wcm90b3R5cGUudHJpbS5jYWxsKGZ8fCIiKTpmXV06W1tmXV0sdGhpcy5zdGF0ZT1sdS5XQUlUSU5HLHRoaXMuc2F2ZVZhbHVlKGgsYSksdGhpcy5ob3QuZ2V0Q2VsbFZhbGlkYXRvcih0aGlz'@;
put 'LmNlbGxQcm9wZXJ0aWVzKT90aGlzLmhvdC5hZGRIb29rT25jZSgicG9zdEFmdGVyVmFsaWRhdGUiLHY9Pnt0aGlzLnN0YXRlPWx1LkZJTklTSEVELHRoaXMuZGlzY2FyZEVkaXRvcih2KX0pOih0aGlzLnN0YXRlPWx1LkZJTklTSEVELHRoaXMuZGlzY2FyZEVkaXRvcighMCkpfX19Y2FuY2Vs'@;
put 'Q2hhbmdlcygpe3RoaXMuc3RhdGU9bHUuRklOSVNIRUQsdGhpcy5kaXNjYXJkRWRpdG9yKCl9ZGlzY2FyZEVkaXRvcihsKXt0aGlzLnN0YXRlPT09bHUuRklOSVNIRUQmJighMT09PWwmJiEwIT09dGhpcy5jZWxsUHJvcGVydGllcy5hbGxvd0ludmFsaWQ/KHRoaXMuaG90LnNlbGVjdENlbGwo'@;
put 'dGhpcy5yb3csdGhpcy5jb2wpLHRoaXMuZm9jdXMoKSx0aGlzLnN0YXRlPWx1LkVESVRJTkcsdGhpcy5fZmlyZUNhbGxiYWNrcyghMSkpOih0aGlzLmNsb3NlKCksdGhpcy5fb3BlbmVkPSExLHRoaXMuX2Z1bGxFZGl0TW9kZT0hMSx0aGlzLnN0YXRlPWx1LlZJUkdJTix0aGlzLl9maXJlQ2Fs'@;
put 'bGJhY2tzKCEwKSx0aGlzLmhvdC5nZXRTaG9ydGN1dE1hbmFnZXIoKS5zZXRBY3RpdmVDb250ZXh0TmFtZSgiZ3JpZCIpKSl9ZW5hYmxlRnVsbEVkaXRNb2RlKCl7dGhpcy5fZnVsbEVkaXRNb2RlPSEwfWlzSW5GdWxsRWRpdE1vZGUoKXtyZXR1cm4gdGhpcy5fZnVsbEVkaXRNb2RlfWlzT3Bl'@;
put 'bmVkKCl7cmV0dXJuIHRoaXMuX29wZW5lZH1pc1dhaXRpbmcoKXtyZXR1cm4gdGhpcy5zdGF0ZT09PWx1LldBSVRJTkd9Z2V0RWRpdGVkQ2VsbFJlY3QoKXt2YXIgbDtjb25zdCBhPXRoaXMuZ2V0RWRpdGVkQ2VsbCgpO2lmKCFhKXJldHVybjtjb25zdHt3dE92ZXJsYXlzOmQsd3RWaWV3cG9y'@;
put 'dDpofT10aGlzLmhvdC52aWV3Ll93dCxmPXRoaXMuaG90LnJvb3RXaW5kb3csdj1VMChhKSxNPXN1KGEpLEQ9VTAodGhpcy5ob3Qucm9vdEVsZW1lbnQpLFo9c3UodGhpcy5ob3Qucm9vdEVsZW1lbnQpLHJlPWQudG9wT3ZlcmxheS5ob2xkZXIsY2U9ZC5pbmxpbmVTdGFydE92ZXJsYXkuaG9s'@;
put 'ZGVyLGJlPXJlIT09Zj9yZS5zY3JvbGxUb3A6MCxFZT1jZSE9PWY/Y2Uuc2Nyb2xsTGVmdDowLEJlPWYuaW5uZXJXaWR0aC1ELmxlZnQtWix7d3RUYWJsZTpxZX09bnVsbCE9PShsPWQuZ2V0UGFyZW50T3ZlcmxheShhKSkmJnZvaWQgMCE9PWw/bDp0aGlzLmhvdC52aWV3Ll93dCxydD1xZS5u'@;
put 'YW1lLHB0PVsibWFzdGVyIiwiaW5saW5lX3N0YXJ0Il0uaW5jbHVkZXMocnQpP2JlOjAsZHQ9WyJtYXN0ZXIiLCJ0b3AiLCJib3R0b20iXS5pbmNsdWRlcyhydCk/RWU6MDtsZXQgdm49di50b3AtRC50b3AtKHYudG9wPT09RC50b3A/MDoxKS1wdCxDbj0wO0NuPXRoaXMuaG90LmlzUnRsKCk/'@;
put 'Zi5pbm5lcldpZHRoLXYubGVmdC1NLUJlLTErZHQ6di5sZWZ0LUQubGVmdC0xLWR0LFsidG9wIiwidG9wX2lubGluZV9zdGFydF9jb3JuZXIiXS5pbmNsdWRlcyhydCkmJih2bis9ZC50b3BPdmVybGF5LmdldE92ZXJsYXlPZmZzZXQoKSksWyJpbmxpbmVfc3RhcnQiLCJ0b3BfaW5saW5lX3N0'@;
put 'YXJ0X2Nvcm5lciJdLmluY2x1ZGVzKHJ0KSYmKENuKz1NYXRoLmFicyhkLmlubGluZVN0YXJ0T3ZlcmxheS5nZXRPdmVybGF5T2Zmc2V0KCkpKTtjb25zdCB0bj10aGlzLmhvdC5oYXNDb2xIZWFkZXJzKCksTW49dGhpcy5ob3Qucm93SW5kZXhNYXBwZXIuZ2V0UmVuZGVyYWJsZUZyb21WaXN1'@;
put 'YWxJbmRleCh0aGlzLnJvdyksQ3I9dGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleCh0aGlzLmNvbCksbXI9dGhpcy5ob3Qucm93SW5kZXhNYXBwZXIuZ2V0UmVuZGVyYWJsZUluZGV4ZXNMZW5ndGgoKS10aGlzLmhvdC52aWV3Ll93dC5nZXRT'@;
put 'ZXR0aW5nKCJmaXhlZFJvd3NCb3R0b20iKTsodG4mJk1uPD0wfHxNbj09PW1yKSYmKHZuKz0xKSxDcjw9MCYmKENuKz0xKTtjb25zdCBHbj1oLnJvd3NSZW5kZXJDYWxjdWxhdG9yLnN0YXJ0UG9zaXRpb24sYWk9aC5jb2x1bW5zUmVuZGVyQ2FsY3VsYXRvci5zdGFydFBvc2l0aW9uLF9pPU1h'@;
put 'dGguYWJzKGQuaW5saW5lU3RhcnRPdmVybGF5LmdldFNjcm9sbFBvc2l0aW9uKCkpLE9uPWQudG9wT3ZlcmxheS5nZXRTY3JvbGxQb3NpdGlvbigpLHpyPWYwKHRoaXMuaG90LnJvb3REb2N1bWVudCk7bGV0IEpuPWEub2Zmc2V0VG9wO2lmKFsiaW5saW5lX3N0YXJ0IiwibWFzdGVyIl0uaW5j'@;
put 'bHVkZXMocnQpJiYoSm4rPUduLU9uKSxbImJvdHRvbSIsImJvdHRvbV9pbmxpbmVfc3RhcnRfY29ybmVyIl0uaW5jbHVkZXMocnQpKXtjb25zdHt3dFZpZXdwb3J0OkhyLHd0VGFibGU6cXJ9PWQuYm90dG9tT3ZlcmxheS5jbG9uZTtKbis9SHIuZ2V0V29ya3NwYWNlSGVpZ2h0KCktcXIuZ2V0'@;
put 'SGVpZ2h0KCktenJ9bGV0IElyPWEub2Zmc2V0TGVmdDt0aGlzLmhvdC5pc1J0bCgpPyhJcj1Jcj49MD9xZS5nZXRXaWR0aCgpLWEub2Zmc2V0TGVmdDpNYXRoLmFicyhJciksSXIrPWFpLV9pLU0pOlsidG9wIiwibWFzdGVyIiwiYm90dG9tIl0uaW5jbHVkZXMocnQpJiYoSXIrPWFpLV9pKTtj'@;
put 'b25zdCAkcj1mLmdldENvbXB1dGVkU3R5bGUodGhpcy5URCksd2k9dGhpcy5ob3QuaXNSdGwoKT8iYm9yZGVyUmlnaHRXaWR0aCI6ImJvcmRlckxlZnRXaWR0aCIsZWE9cGFyc2VJbnQoJHJbd2ldLDEwKT4wPzA6MSxmYT1wYXJzZUludCgkci5ib3JkZXJUb3BXaWR0aCwxMCk+MD8wOjEsdnQ9'@;
put 'c3UoYSkrZWEsTnQ9eHUoYSkrZmEsSHQ9RSQocmUpP3pyOjAsSG49VCQoY2UpP3pyOjAsdHI9dGhpcy5ob3Qudmlldy5tYXhpbXVtVmlzaWJsZUVsZW1lbnRXaWR0aChJciktSHQrZWE7cmV0dXJue3RvcDp2bixzdGFydDpDbixoZWlnaHQ6TnQsbWF4SGVpZ2h0Ok1hdGgubWF4KHRoaXMuaG90'@;
put 'LnZpZXcubWF4aW11bVZpc2libGVFbGVtZW50SGVpZ2h0KEpuKS1IbitmYSx0aGlzLmhvdC52aWV3LmdldERlZmF1bHRSb3dIZWlnaHQoKSksd2lkdGg6dnQsbWF4V2lkdGg6dHJ9fWdldEVkaXRlZENlbGxzTGF5ZXJDbGFzcygpe3N3aXRjaCh0aGlzLmNoZWNrRWRpdG9yU2VjdGlvbigpKXtj'@;
put 'YXNlImlubGluZS1zdGFydCI6cmV0dXJuImh0X2Nsb25lX2xlZnQgaHRfY2xvbmVfaW5saW5lX3N0YXJ0IjtjYXNlImJvdHRvbSI6cmV0dXJuImh0X2Nsb25lX2JvdHRvbSI7Y2FzZSJib3R0b20taW5saW5lLXN0YXJ0LWNvcm5lciI6cmV0dXJuImh0X2Nsb25lX2JvdHRvbV9sZWZ0X2Nvcm5l'@;
put 'ciBodF9jbG9uZV9ib3R0b21faW5saW5lX3N0YXJ0X2Nvcm5lciI7Y2FzZSJ0b3AiOnJldHVybiJodF9jbG9uZV90b3AiO2Nhc2UidG9wLWlubGluZS1zdGFydC1jb3JuZXIiOnJldHVybiJodF9jbG9uZV90b3BfbGVmdF9jb3JuZXIgaHRfY2xvbmVfdG9wX2lubGluZV9zdGFydF9jb3JuZXIi'@;
put 'O2RlZmF1bHQ6cmV0dXJuImh0X2Nsb25lX21hc3RlciJ9fWdldEVkaXRlZENlbGwoKXtyZXR1cm4gdGhpcy5ob3QuZ2V0Q2VsbCh0aGlzLnJvdyx0aGlzLmNvbCwhMCl9Y2hlY2tFZGl0b3JTZWN0aW9uKCl7Y29uc3QgbD10aGlzLmhvdC5jb3VudFJvd3MoKTtsZXQgYT0iIjtyZXR1cm4gdGhp'@;
put 'cy5yb3c8dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5maXhlZFJvd3NUb3A/YT10aGlzLmNvbDx0aGlzLmhvdC5nZXRTZXR0aW5ncygpLmZpeGVkQ29sdW1uc1N0YXJ0PyJ0b3AtaW5saW5lLXN0YXJ0LWNvcm5lciI6InRvcCI6dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5maXhlZFJvd3NCb3R0b20m'@;
put 'JnRoaXMucm93Pj1sLXRoaXMuaG90LmdldFNldHRpbmdzKCkuZml4ZWRSb3dzQm90dG9tP2E9dGhpcy5jb2w8dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5maXhlZENvbHVtbnNTdGFydD8iYm90dG9tLWlubGluZS1zdGFydC1jb3JuZXIiOiJib3R0b20iOnRoaXMuY29sPHRoaXMuaG90LmdldFNl'@;
put 'dHRpbmdzKCkuZml4ZWRDb2x1bW5zU3RhcnQmJihhPSJpbmxpbmUtc3RhcnQiKSxhfX1UbChrXyxRcnQpO2NvbnN0IHJpdD17bmFtZToiZWRpdG9yQ2xvc2VBbmRTYXZlQnlBcnJvd0tleXMiLGNhbGxiYWNrKGMsbCxhKXtjb25zdCBkPWMuX2dldEVkaXRvck1hbmFnZXIoKSxoPWQuZ2V0QWN0'@;
put 'aXZlRWRpdG9yKCk7aC5pc0luRnVsbEVkaXRNb2RlKCkmJmguc3RhdGU9PT1sdS5FRElUSU5HfHwoZC5jbG9zZUVkaXRvckFuZFNhdmVDaGFuZ2VzKCksYy5nZXRTZWxlY3RlZCgpJiYoYS5pbmNsdWRlcygiYXJyb3dkb3duIik/Yy5zZWxlY3Rpb24udHJhbnNmb3JtU3RhcnQoMSwwKTphLmlu'@;
put 'Y2x1ZGVzKCJhcnJvd3VwIik/Yy5zZWxlY3Rpb24udHJhbnNmb3JtU3RhcnQoLTEsMCk6YS5pbmNsdWRlcygiYXJyb3dsZWZ0Iik/Yy5zZWxlY3Rpb24udHJhbnNmb3JtU3RhcnQoMCwtMSpjLmdldERpcmVjdGlvbkZhY3RvcigpKTphLmluY2x1ZGVzKCJhcnJvd3JpZ2h0IikmJmMuc2VsZWN0'@;
put 'aW9uLnRyYW5zZm9ybVN0YXJ0KDAsYy5nZXREaXJlY3Rpb25GYWN0b3IoKSkpLGwucHJldmVudERlZmF1bHQoKSl9fSxpaXQ9e25hbWU6ImVkaXRvckNsb3NlQW5kU2F2ZUJ5RW50ZXIiLGNhbGxiYWNrKGMsbCl7Y29uc3QgYT1jLl9nZXRFZGl0b3JNYW5hZ2VyKCk7YS5jbG9zZUVkaXRvckFu'@;
put 'ZFNhdmVDaGFuZ2VzKGwuY3RybEtleXx8bC5tZXRhS2V5KSxhLm1vdmVTZWxlY3Rpb25BZnRlckVudGVyKGwpfX0sYWl0PXtuYW1lOiJlZGl0b3JDbG9zZVdpdGhvdXRTYXZpbmciLGNhbGxiYWNrKGMpe2NvbnN0IGw9Yy5fZ2V0RWRpdG9yTWFuYWdlcigpO2wuY2xvc2VFZGl0b3JBbmRSZXN0'@;
put 'b3JlT3JpZ2luYWxWYWx1ZShjLmdldFNob3J0Y3V0TWFuYWdlcigpLmlzQ3RybFByZXNzZWQoKSksbC5hY3RpdmVFZGl0b3IuZm9jdXMoKX19LG9pdD17bmFtZToiZWRpdG9yRmFzdE9wZW4iLGNhbGxiYWNrKGMsbCl7Y29uc3R7aGlnaGxpZ2h0OmF9PWMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3Qo'@;
put 'KTthLmlzSGVhZGVyKCl8fGMuX2dldEVkaXRvck1hbmFnZXIoKS5vcGVuRWRpdG9yKG51bGwsbCwhMCl9fSxzaXQ9e25hbWU6ImVkaXRvck9wZW4iLGNhbGxiYWNrKGMsbCxhKXtjb25zdCBkPWMuX2dldEVkaXRvck1hbmFnZXIoKSxoPWMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSx7aGlnaGxp'@;
put 'Z2h0OmZ9PWg7aWYoYy5zZWxlY3Rpb24uaXNNdWx0aXBsZSgpJiYhaC5pc0hlYWRlcigpJiZjLmNvdW50UmVuZGVyZWRDb2xzKCk+MCYmYy5jb3VudFJlbmRlcmVkUm93cygpPjApe2NvbnN0IHY9Yy5nZXRTZXR0aW5ncygpLE09ImZ1bmN0aW9uIj09dHlwZW9mIHYuZW50ZXJNb3Zlcz92LmVu'@;
put 'dGVyTW92ZXMobCk6di5lbnRlck1vdmVzO2EuaW5jbHVkZXMoInNoaWZ0Iik/Yy5zZWxlY3Rpb24udHJhbnNmb3JtRm9jdXMoLU0ucm93LC1NLmNvbCk6Yy5zZWxlY3Rpb24udHJhbnNmb3JtRm9jdXMoTS5yb3csTS5jb2wpfWVsc2UgZi5pc0hlYWRlcigpfHwoYy5nZXRTZXR0aW5ncygpLmVu'@;
put 'dGVyQmVnaW5zRWRpdGluZz9kLmNlbGxQcm9wZXJ0aWVzLnJlYWRPbmx5P2QubW92ZVNlbGVjdGlvbkFmdGVyRW50ZXIobCk6ZC5vcGVuRWRpdG9yKG51bGwsbCwhMCk6ZC5tb3ZlU2VsZWN0aW9uQWZ0ZXJFbnRlcihsKSxCMihsKSl9fSxjaXQ9e25hbWU6ImV4dGVuZENlbGxzU2VsZWN0aW9u'@;
put 'RG93biIsY2FsbGJhY2soYyl7Y29uc3R7c2VsZWN0aW9uOmx9PWMse2hpZ2hsaWdodDphfT1jLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCk7IWwuaXNTZWxlY3RlZEJ5Q29sdW1uSGVhZGVyKCkmJiFsLmlzU2VsZWN0ZWRCeUNvcm5lcigpJiYoYS5pc0NlbGwoKXx8YS5pc0hlYWRlcigpJiZsLmlz'@;
put 'U2VsZWN0ZWRCeVJvd0hlYWRlcigpKSYmKGwubWFya1NvdXJjZSgia2V5Ym9hcmQiKSxsLnRyYW5zZm9ybUVuZCgxLDApLGwubWFya0VuZFNvdXJjZSgpKX19LHVpdD17bmFtZToiZXh0ZW5kQ2VsbHNTZWxlY3Rpb25Eb3duQnlWaWV3cG9ydEhlaWdodCIsY2FsbGJhY2soYyl7Y29uc3R7c2Vs'@;
put 'ZWN0aW9uOmwscm93SW5kZXhNYXBwZXI6YX09Yyx7dG86ZH09Yy5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLGg9TWF0aC5taW4oZC5yb3crYy5jb3VudFZpc2libGVSb3dzKCksYy5jb3VudFJvd3MoKS0xKSxmPWEuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGgsLTEpO2lmKG51bGwhPT1mKXtj'@;
put 'b25zdCB2PWMuX2NyZWF0ZUNlbGxDb29yZHMoZixkLmNvbCksTT1kLnJvdy1jLmdldEZpcnN0RnVsbHlWaXNpYmxlUm93KCksRD1NYXRoLm1pbih2LnJvdy1NLGMuY291bnRSb3dzKCktMSk7bC5tYXJrU291cmNlKCJrZXlib2FyZCIpLGwuc2V0UmFuZ2VFbmQodiksbC5tYXJrRW5kU291cmNl'@;
put 'KCksYy5zY3JvbGxWaWV3cG9ydFRvKHtyb3c6RCx2ZXJ0aWNhbFNuYXA6InRvcCIsaG9yaXpvbnRhbFNuYXA6InN0YXJ0In0pfX19LGRpdD17bmFtZToiZXh0ZW5kQ2VsbHNTZWxlY3Rpb25MZWZ0IixjYWxsYmFjayhjKXtjb25zdHtzZWxlY3Rpb246bH09Yyx7aGlnaGxpZ2h0OmF9PWMuZ2V0'@;
put 'U2VsZWN0ZWRSYW5nZUxhc3QoKTshbC5pc1NlbGVjdGVkQnlSb3dIZWFkZXIoKSYmIWwuaXNTZWxlY3RlZEJ5Q29ybmVyKCkmJihhLmlzQ2VsbCgpfHxhLmlzSGVhZGVyKCkmJmwuaXNTZWxlY3RlZEJ5Q29sdW1uSGVhZGVyKCkpJiYobC5tYXJrU291cmNlKCJrZXlib2FyZCIpLGwudHJhbnNm'@;
put 'b3JtRW5kKDAsLTEqYy5nZXREaXJlY3Rpb25GYWN0b3IoKSksbC5tYXJrRW5kU291cmNlKCkpfX0saGl0PXtuYW1lOiJleHRlbmRDZWxsc1NlbGVjdGlvblJpZ2h0IixjYWxsYmFjayhjKXtjb25zdHtzZWxlY3Rpb246bH09Yyx7aGlnaGxpZ2h0OmF9PWMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3Qo'@;
put 'KTshbC5pc1NlbGVjdGVkQnlSb3dIZWFkZXIoKSYmIWwuaXNTZWxlY3RlZEJ5Q29ybmVyKCkmJihhLmlzQ2VsbCgpfHxhLmlzSGVhZGVyKCkmJmwuaXNTZWxlY3RlZEJ5Q29sdW1uSGVhZGVyKCkpJiYobC5tYXJrU291cmNlKCJrZXlib2FyZCIpLGwudHJhbnNmb3JtRW5kKDAsYy5nZXREaXJl'@;
put 'Y3Rpb25GYWN0b3IoKSksbC5tYXJrRW5kU291cmNlKCkpfX0sZml0PXtuYW1lOiJleHRlbmRDZWxsc1NlbGVjdGlvblRvQ29sdW1ucyIsY2FsbGJhY2soYyl7Y29uc3R7c2VsZWN0aW9uOmx9PWMse2hpZ2hsaWdodDphLGZyb206ZCx0bzpofT1jLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCk7bC5t'@;
put 'YXJrU291cmNlKCJrZXlib2FyZCIpLGwuaXNTZWxlY3RlZEJ5Um93SGVhZGVyKCk/bC5zZWxlY3RBbGwoITAsITApOmMuc2VsZWN0Q29sdW1ucyhkLmNvbCxoLmNvbCxhKSxsLm1hcmtFbmRTb3VyY2UoKX19LHBpdD17bmFtZToiZXh0ZW5kQ2VsbHNTZWxlY3Rpb25Ub01vc3RCb3R0b20iLGNh'@;
put 'bGxiYWNrKGMpe2NvbnN0e3NlbGVjdGlvbjpsLHJvd0luZGV4TWFwcGVyOmF9PWMse2hpZ2hsaWdodDpkLGZyb206aCx0bzpmfT1jLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCksdj1kLmlzSGVhZGVyKCkmJmwuaXNTZWxlY3RlZEJ5Um93SGVhZGVyKCk7aWYoZC5pc0NlbGwoKXx8dil7Y29uc3Qg'@;
put 'TT1hLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChjLmNvdW50Um93cygpLTEsLTEpLEQ9aC5jbG9uZSgpO0Qucm93PWQucm93LGwubWFya1NvdXJjZSgia2V5Ym9hcmQiKSxsLnNldFJhbmdlU3RhcnQoRCx2b2lkIDAsITEsZC5jbG9uZSgpKSx2JiZsLnNlbGVjdGVkQnlSb3dIZWFkZXIuYWRk'@;
put 'KGwuZ2V0TGF5ZXJMZXZlbCgpKSxsLnNldFJhbmdlRW5kKGMuX2NyZWF0ZUNlbGxDb29yZHMoTSxmLmNvbCkpLGwubWFya0VuZFNvdXJjZSgpfX19LGdpdD17bmFtZToiZXh0ZW5kQ2VsbHNTZWxlY3Rpb25Ub01vc3RJbmxpbmVFbmQiLGNhbGxiYWNrKGMpe2NvbnN0e3NlbGVjdGlvbjpsLGNv'@;
put 'bHVtbkluZGV4TWFwcGVyOmF9PWMse2hpZ2hsaWdodDpkLGZyb206aCx0bzpmfT1jLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCk7aWYoIWwuaXNTZWxlY3RlZEJ5Um93SGVhZGVyKCkmJiFsLmlzU2VsZWN0ZWRCeUNvcm5lcigpJiZkLmlzQ2VsbCgpKXtjb25zdCB2PWEuZ2V0TmVhcmVzdE5vdEhp'@;
put 'ZGRlbkluZGV4KGMuY291bnRDb2xzKCktMSwtMSksTT1oLmNsb25lKCk7TS5jb2w9ZC5jb2wsbC5tYXJrU291cmNlKCJrZXlib2FyZCIpLGwuc2V0UmFuZ2VTdGFydChNLHZvaWQgMCwhMSxkLmNsb25lKCkpLGwuc2V0UmFuZ2VFbmQoYy5fY3JlYXRlQ2VsbENvb3JkcyhmLnJvdyx2KSksbC5t'@;
put 'YXJrRW5kU291cmNlKCl9fX0sbWl0PXtuYW1lOiJleHRlbmRDZWxsc1NlbGVjdGlvblRvTW9zdElubGluZVN0YXJ0IixjYWxsYmFjayhjKXtjb25zdHtzZWxlY3Rpb246bCxjb2x1bW5JbmRleE1hcHBlcjphfT1jLHtoaWdobGlnaHQ6ZCxmcm9tOmgsdG86Zn09Yy5nZXRTZWxlY3RlZFJhbmdl'@;
put 'TGFzdCgpO2lmKCFsLmlzU2VsZWN0ZWRCeVJvd0hlYWRlcigpJiYhbC5pc1NlbGVjdGVkQnlDb3JuZXIoKSYmZC5pc0NlbGwoKSl7Y29uc3Qgdj1wYXJzZUludChjLmdldFNldHRpbmdzKCkuZml4ZWRDb2x1bW5zU3RhcnQsMTApLE09YS5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgodiwxKSxE'@;
put 'PWguY2xvbmUoKTtELmNvbD1kLmNvbCxsLm1hcmtTb3VyY2UoImtleWJvYXJkIiksbC5zZXRSYW5nZVN0YXJ0KEQsdm9pZCAwLCExLGQuY2xvbmUoKSksbC5zZXRSYW5nZUVuZChjLl9jcmVhdGVDZWxsQ29vcmRzKGYucm93LE0pKSxsLm1hcmtFbmRTb3VyY2UoKX19fSx2aXQ9e25hbWU6ImV4'@;
put 'dGVuZENlbGxzU2VsZWN0aW9uVG9Nb3N0TGVmdCIsY2FsbGJhY2soYyl7Y29uc3R7c2VsZWN0aW9uOmwsY29sdW1uSW5kZXhNYXBwZXI6YX09Yyx7aGlnaGxpZ2h0OmQsZnJvbTpoLHRvOmZ9PWMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSx2PWQuaXNIZWFkZXIoKSYmbC5pc1NlbGVjdGVkQnlD'@;
put 'b2x1bW5IZWFkZXIoKTtpZihkLmlzQ2VsbCgpfHx2KXtjb25zdCBNPWEuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KC4uLmMuaXNSdGwoKT9bYy5jb3VudENvbHMoKS0xLC0xXTpbMCwxXSksRD1oLmNsb25lKCk7RC5jb2w9ZC5jb2wsbC5tYXJrU291cmNlKCJrZXlib2FyZCIpLGwuc2V0UmFu'@;
put 'Z2VTdGFydChELHZvaWQgMCwhMSxkLmNsb25lKCkpLHYmJmwuc2VsZWN0ZWRCeUNvbHVtbkhlYWRlci5hZGQobC5nZXRMYXllckxldmVsKCkpLGwuc2V0UmFuZ2VFbmQoYy5fY3JlYXRlQ2VsbENvb3JkcyhmLnJvdyxNKSksbC5tYXJrRW5kU291cmNlKCl9fX0sYml0PXtuYW1lOiJleHRlbmRD'@;
put 'ZWxsc1NlbGVjdGlvblRvTW9zdFJpZ2h0IixjYWxsYmFjayhjKXtjb25zdHtzZWxlY3Rpb246bCxjb2x1bW5JbmRleE1hcHBlcjphfT1jLHtoaWdobGlnaHQ6ZCxmcm9tOmgsdG86Zn09Yy5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLHY9ZC5pc0hlYWRlcigpJiZsLmlzU2VsZWN0ZWRCeUNvbHVt'@;
put 'bkhlYWRlcigpO2lmKGQuaXNDZWxsKCl8fHYpe2NvbnN0IE09YS5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoLi4uYy5pc1J0bCgpP1swLDFdOltjLmNvdW50Q29scygpLTEsLTFdKSxEPWguY2xvbmUoKTtELmNvbD1kLmNvbCxsLm1hcmtTb3VyY2UoImtleWJvYXJkIiksbC5zZXRSYW5nZVN0'@;
put 'YXJ0KEQsdm9pZCAwLCExLGQuY2xvbmUoKSksdiYmbC5zZWxlY3RlZEJ5Q29sdW1uSGVhZGVyLmFkZChsLmdldExheWVyTGV2ZWwoKSksbC5zZXRSYW5nZUVuZChjLl9jcmVhdGVDZWxsQ29vcmRzKGYucm93LE0pKSxsLm1hcmtFbmRTb3VyY2UoKX19fSx5aXQ9e25hbWU6ImV4dGVuZENlbGxz'@;
put 'U2VsZWN0aW9uVG9Nb3N0VG9wIixjYWxsYmFjayhjKXtjb25zdHtzZWxlY3Rpb246bCxyb3dJbmRleE1hcHBlcjphfT1jLHtoaWdobGlnaHQ6ZCxmcm9tOmgsdG86Zn09Yy5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLHY9ZC5pc0hlYWRlcigpJiZsLmlzU2VsZWN0ZWRCeVJvd0hlYWRlcigpO2lm'@;
put 'KGQuaXNDZWxsKCl8fHYpe2NvbnN0IE09YS5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoMCwxKSxEPWguY2xvbmUoKTtELnJvdz1kLnJvdyxsLm1hcmtTb3VyY2UoImtleWJvYXJkIiksbC5zZXRSYW5nZVN0YXJ0KEQsdm9pZCAwLCExLGQuY2xvbmUoKSksdiYmbC5zZWxlY3RlZEJ5Um93SGVh'@;
put 'ZGVyLmFkZChsLmdldExheWVyTGV2ZWwoKSksbC5zZXRSYW5nZUVuZChjLl9jcmVhdGVDZWxsQ29vcmRzKE0sZi5jb2wpKSxsLm1hcmtFbmRTb3VyY2UoKX19fSxfaXQ9e25hbWU6ImV4dGVuZENlbGxzU2VsZWN0aW9uVG9Sb3dzIixjYWxsYmFjayhjKXtjb25zdHtzZWxlY3Rpb246bH09Yyx7'@;
put 'aGlnaGxpZ2h0OmEsZnJvbTpkLHRvOmh9PWMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKTtsLm1hcmtTb3VyY2UoImtleWJvYXJkIiksbC5pc1NlbGVjdGVkQnlDb2x1bW5IZWFkZXIoKT9sLnNlbGVjdEFsbCghMCwhMCk6Yy5zZWxlY3RSb3dzKGQucm93LGgucm93LGEpLGwubWFya0VuZFNvdXJj'@;
put 'ZSgpfX0sd2l0PXtuYW1lOiJleHRlbmRDZWxsc1NlbGVjdGlvblVwIixjYWxsYmFjayhjKXtjb25zdHtzZWxlY3Rpb246bH09Yyx7aGlnaGxpZ2h0OmF9PWMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKTshbC5pc1NlbGVjdGVkQnlDb2x1bW5IZWFkZXIoKSYmIWwuaXNTZWxlY3RlZEJ5Q29ybmVy'@;
put 'KCkmJihhLmlzQ2VsbCgpfHxhLmlzSGVhZGVyKCkmJmwuaXNTZWxlY3RlZEJ5Um93SGVhZGVyKCkpJiYobC5tYXJrU291cmNlKCJrZXlib2FyZCIpLGwudHJhbnNmb3JtRW5kKC0xLDApLGwubWFya0VuZFNvdXJjZSgpKX19LENpdD17bmFtZToiZXh0ZW5kQ2VsbHNTZWxlY3Rpb25VcEJ5Vmll'@;
put 'd3BvcnRIZWlnaHQiLGNhbGxiYWNrKGMpe2NvbnN0e3NlbGVjdGlvbjpsLHJvd0luZGV4TWFwcGVyOmF9PWMse3RvOmR9PWMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSxoPU1hdGgubWF4KGQucm93LWMuY291bnRWaXNpYmxlUm93cygpLDApLGY9YS5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgo'@;
put 'aCwxKTtpZihudWxsIT09Zil7Y29uc3Qgdj1jLl9jcmVhdGVDZWxsQ29vcmRzKGYsZC5jb2wpLE09ZC5yb3ctYy5nZXRGaXJzdEZ1bGx5VmlzaWJsZVJvdygpLEQ9TWF0aC5tYXgodi5yb3ctTSwwKTtsLm1hcmtTb3VyY2UoImtleWJvYXJkIiksbC5zZXRSYW5nZUVuZCh2KSxsLm1hcmtFbmRT'@;
put 'b3VyY2UoKSxjLnNjcm9sbFZpZXdwb3J0VG8oe3JvdzpELHZlcnRpY2FsU25hcDoidG9wIixob3Jpem9udGFsU25hcDoic3RhcnQifSl9fX0sTWl0PXtuYW1lOiJtb3ZlQ2VsbFNlbGVjdGlvbkRvd24iLGNhbGxiYWNrKGMpe2xldHtzZWxlY3Rpb246bH09YztsLm1hcmtTb3VyY2UoImtleWJv'@;
put 'YXJkIiksbC50cmFuc2Zvcm1TdGFydCgxLDApLGwubWFya0VuZFNvdXJjZSgpfX0seGl0PXtuYW1lOiJtb3ZlQ2VsbFNlbGVjdGlvbkRvd25CeVZpZXdwb3J0SGVpZ2h0IixjYWxsYmFjayhjKXtjb25zdHtzZWxlY3Rpb246bH09Yyx7bmF2aWdhYmxlSGVhZGVyczphfT1jLmdldFNldHRpbmdz'@;
put 'KCksZD1hP2MuY291bnRDb2xIZWFkZXJzKCk6MCx7cm93Omh9PWMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKS5oaWdobGlnaHQ7bGV0IGY9Yy5jb3VudFZpc2libGVSb3dzKCkrZDtmPTA9PT1mPzE6ZixoPT09Yy5jb3VudFJvd3MoKS0xP2Y9MTpoK2Y+Yy5jb3VudFJvd3MoKSYmKGY9Yy5jb3Vu'@;
put 'dFJvd3MoKS1oLTEpLGwubWFya1NvdXJjZSgia2V5Ym9hcmQiKSxsLnRyYW5zZm9ybVN0YXJ0KGYsMCksbC5tYXJrRW5kU291cmNlKCksYy5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLmhpZ2hsaWdodC5yb3c8MCYmYy5zY3JvbGxWaWV3cG9ydFRvKHtyb3c6MH0pfX0sRWl0PXtuYW1lOiJtb3Zl'@;
put 'Q2VsbFNlbGVjdGlvbklubGluZUVuZCIsY2FsbGJhY2soYyxsKXtjb25zdHtzZWxlY3Rpb246YX09YyxkPWMuZ2V0U2V0dGluZ3MoKSxoPWMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSxmPSJmdW5jdGlvbiI9PXR5cGVvZiBkLnRhYk1vdmVzP2QudGFiTW92ZXMobCk6ZC50YWJNb3ZlczthLm1h'@;
put 'cmtTb3VyY2UoImtleWJvYXJkIiksYS5pc011bHRpcGxlKCkmJiFoLmlzSGVhZGVyKCkmJmMuY291bnRSZW5kZXJlZENvbHMoKT4wJiZjLmNvdW50UmVuZGVyZWRSb3dzKCk+MD9hLnRyYW5zZm9ybUZvY3VzKC1mLnJvdywtZi5jb2wpOmEudHJhbnNmb3JtU3RhcnQoLWYucm93LC1mLmNvbCks'@;
put 'YS5tYXJrRW5kU291cmNlKCl9fSxUaXQ9e25hbWU6Im1vdmVDZWxsU2VsZWN0aW9uSW5saW5lU3RhcnQiLGNhbGxiYWNrKGMsbCl7Y29uc3R7c2VsZWN0aW9uOmF9PWMsZD1jLmdldFNldHRpbmdzKCksaD1jLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCksZj0iZnVuY3Rpb24iPT10eXBlb2YgZC50'@;
put 'YWJNb3Zlcz9kLnRhYk1vdmVzKGwpOmQudGFiTW92ZXM7YS5tYXJrU291cmNlKCJrZXlib2FyZCIpLGEuaXNNdWx0aXBsZSgpJiYhaC5pc0hlYWRlcigpJiZjLmNvdW50UmVuZGVyZWRDb2xzKCk+MCYmYy5jb3VudFJlbmRlcmVkUm93cygpPjA/YS50cmFuc2Zvcm1Gb2N1cyhmLnJvdyxmLmNv'@;
put 'bCk6YS50cmFuc2Zvcm1TdGFydChmLnJvdyxmLmNvbCksYS5tYXJrRW5kU291cmNlKCl9fSxBaXQ9e25hbWU6Im1vdmVDZWxsU2VsZWN0aW9uTGVmdCIsY2FsbGJhY2soYyl7Y29uc3R7c2VsZWN0aW9uOmx9PWM7bC5tYXJrU291cmNlKCJrZXlib2FyZCIpLGwudHJhbnNmb3JtU3RhcnQoMCwt'@;
put 'MSpjLmdldERpcmVjdGlvbkZhY3RvcigpKSxsLm1hcmtFbmRTb3VyY2UoKX19LGtpdD17bmFtZToibW92ZUNlbGxTZWxlY3Rpb25SaWdodCIsY2FsbGJhY2soYyl7Y29uc3R7c2VsZWN0aW9uOmx9PWM7bC5tYXJrU291cmNlKCJrZXlib2FyZCIpLGwudHJhbnNmb3JtU3RhcnQoMCxjLmdldERp'@;
put 'cmVjdGlvbkZhY3RvcigpKSxsLm1hcmtFbmRTb3VyY2UoKX19LERpdD17bmFtZToibW92ZUNlbGxTZWxlY3Rpb25Ub01vc3RCb3R0b20iLGNhbGxiYWNrKGMpe2NvbnN0e3NlbGVjdGlvbjpsfT1jLHtjb2w6YX09Yy5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLmhpZ2hsaWdodDtsZXQgZD1jLnJv'@;
put 'd0luZGV4TWFwcGVyLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChjLmNvdW50Um93cygpLTEsLTEpO251bGw9PT1kJiYoZD0tMSksbC5zZXRSYW5nZVN0YXJ0KGMuX2NyZWF0ZUNlbGxDb29yZHMoZCxhKSl9fSxJaXQ9e25hbWU6Im1vdmVDZWxsU2VsZWN0aW9uVG9Nb3N0Qm90dG9tSW5saW5l'@;
put 'RW5kIixjYWxsYmFjayhjKXtjb25zdHtzZWxlY3Rpb246bCxyb3dJbmRleE1hcHBlcjphLGNvbHVtbkluZGV4TWFwcGVyOmR9PWMsaD1wYXJzZUludChjLmdldFNldHRpbmdzKCkuZml4ZWRSb3dzQm90dG9tLDEwKSxmPWEuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGMuY291bnRSb3dzKCkt'@;
put 'aC0xLC0xKSx2PWQuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGMuY291bnRDb2xzKCktMSwtMSk7bC5tYXJrU291cmNlKCJrZXlib2FyZCIpLGwuc2V0UmFuZ2VTdGFydChjLl9jcmVhdGVDZWxsQ29vcmRzKGYsdikpLGwubWFya0VuZFNvdXJjZSgpfX0sUml0PXtuYW1lOiJtb3ZlQ2VsbFNl'@;
put 'bGVjdGlvblRvTW9zdElubGluZUVuZCIsY2FsbGJhY2soYyl7Y29uc3R7c2VsZWN0aW9uOmwsY29sdW1uSW5kZXhNYXBwZXI6YX09YztsLm1hcmtTb3VyY2UoImtleWJvYXJkIiksbC5zZXRSYW5nZVN0YXJ0KGMuX2NyZWF0ZUNlbGxDb29yZHMoYy5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLmhp'@;
put 'Z2hsaWdodC5yb3csYS5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoYy5jb3VudENvbHMoKS0xLC0xKSkpLGwubWFya0VuZFNvdXJjZSgpfX0sTGl0PXtuYW1lOiJtb3ZlQ2VsbFNlbGVjdGlvblRvTW9zdElubGluZVN0YXJ0IixjYWxsYmFjayhjKXtjb25zdHtzZWxlY3Rpb246bCxjb2x1bW5J'@;
put 'bmRleE1hcHBlcjphfT1jLGQ9cGFyc2VJbnQoYy5nZXRTZXR0aW5ncygpLmZpeGVkQ29sdW1uc1N0YXJ0LDEwKSxoPWMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKS5oaWdobGlnaHQucm93LGY9YS5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoZCwxKTtsLm1hcmtTb3VyY2UoImtleWJvYXJkIiks'@;
put 'bC5zZXRSYW5nZVN0YXJ0KGMuX2NyZWF0ZUNlbGxDb29yZHMoaCxmKSksbC5tYXJrRW5kU291cmNlKCl9fSxPaXQ9e25hbWU6Im1vdmVDZWxsU2VsZWN0aW9uVG9Nb3N0TGVmdCIsY2FsbGJhY2soYyl7Y29uc3R7c2VsZWN0aW9uOmwsY29sdW1uSW5kZXhNYXBwZXI6YX09YyxkPWMuZ2V0U2Vs'@;
put 'ZWN0ZWRSYW5nZUxhc3QoKS5oaWdobGlnaHQucm93O2xldCBoPWEuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KC4uLmMuaXNSdGwoKT9bYy5jb3VudENvbHMoKS0xLC0xXTpbMCwxXSk7bnVsbD09PWgmJihoPWMuaXNSdGwoKT8tMTotYy5jb3VudFJvd0hlYWRlcnMoKSksbC5tYXJrU291cmNl'@;
put 'KCJrZXlib2FyZCIpLGwuc2V0UmFuZ2VTdGFydChjLl9jcmVhdGVDZWxsQ29vcmRzKGQsaCkpLGwubWFya0VuZFNvdXJjZSgpfX0sUGl0PXtuYW1lOiJtb3ZlQ2VsbFNlbGVjdGlvblRvTW9zdFJpZ2h0IixjYWxsYmFjayhjKXtjb25zdHtzZWxlY3Rpb246bCxjb2x1bW5JbmRleE1hcHBlcjph'@;
put 'fT1jLHtyb3c6ZH09Yy5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLmhpZ2hsaWdodDtsZXQgaD1hLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleCguLi5jLmlzUnRsKCk/WzAsMV06W2MuY291bnRDb2xzKCktMSwtMV0pO251bGw9PT1oJiYoaD1jLmlzUnRsKCk/LWMuY291bnRSb3dIZWFkZXJzKCk6'@;
put 'LTEpLGwubWFya1NvdXJjZSgia2V5Ym9hcmQiKSxsLnNldFJhbmdlU3RhcnQoYy5fY3JlYXRlQ2VsbENvb3JkcyhkLGgpKSxsLm1hcmtFbmRTb3VyY2UoKX19LEZpdD17bmFtZToibW92ZUNlbGxTZWxlY3Rpb25Ub01vc3RUb3AiLGNhbGxiYWNrKGMpe2NvbnN0e3NlbGVjdGlvbjpsfT1jLHtj'@;
put 'b2w6YX09Yy5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLmhpZ2hsaWdodDtsZXQgZD1jLnJvd0luZGV4TWFwcGVyLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleCgwLDEpO251bGw9PT1kJiYoZD0tYy5jb3VudENvbEhlYWRlcnMoKSksbC5tYXJrU291cmNlKCJrZXlib2FyZCIpLGwuc2V0UmFuZ2VT'@;
put 'dGFydChjLl9jcmVhdGVDZWxsQ29vcmRzKGQsYSkpLGwubWFya0VuZFNvdXJjZSgpfX0sSGl0PXtuYW1lOiJtb3ZlQ2VsbFNlbGVjdGlvblRvTW9zdFRvcElubGluZVN0YXJ0IixjYWxsYmFjayhjKXtjb25zdHtzZWxlY3Rpb246bCxyb3dJbmRleE1hcHBlcjphLGNvbHVtbkluZGV4TWFwcGVy'@;
put 'OmR9PWMsaD1wYXJzZUludChjLmdldFNldHRpbmdzKCkuZml4ZWRSb3dzVG9wLDEwKSxmPXBhcnNlSW50KGMuZ2V0U2V0dGluZ3MoKS5maXhlZENvbHVtbnNTdGFydCwxMCksdj1hLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChoLDEpLE09ZC5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoZiwx'@;
put 'KTtsLm1hcmtTb3VyY2UoImtleWJvYXJkIiksbC5zZXRSYW5nZVN0YXJ0KGMuX2NyZWF0ZUNlbGxDb29yZHModixNKSksbC5tYXJrRW5kU291cmNlKCl9fSxOaXQ9e25hbWU6Im1vdmVDZWxsU2VsZWN0aW9uVXAiLGNhbGxiYWNrKGMpe2xldHtzZWxlY3Rpb246bH09YztsLm1hcmtTb3VyY2Uo'@;
put 'ImtleWJvYXJkIiksbC50cmFuc2Zvcm1TdGFydCgtMSwwKSxsLm1hcmtFbmRTb3VyY2UoKX19LFZpdD17bmFtZToibW92ZUNlbGxTZWxlY3Rpb25VcEJ5Vmlld3BvcnRIaWdodCIsY2FsbGJhY2soYyl7Y29uc3R7c2VsZWN0aW9uOmx9PWMse25hdmlnYWJsZUhlYWRlcnM6YX09Yy5nZXRTZXR0'@;
put 'aW5ncygpLGQ9YT9jLmNvdW50Q29sSGVhZGVycygpOjAse3JvdzpofT1jLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCkuaGlnaGxpZ2h0O2xldCBmPWMuY291bnRWaXNpYmxlUm93cygpK2Q7Zj0wPT09Zj8tMTotZixoPT09LWQ/Zj0tMTpoK2Y8ZCYmKGY9LShoK2QpKSxsLm1hcmtTb3VyY2UoImtl'@;
put 'eWJvYXJkIiksbC50cmFuc2Zvcm1TdGFydChmLDApLGwubWFya0VuZFNvdXJjZSgpLGMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKS5oaWdobGlnaHQucm93PDAmJmMuc2Nyb2xsVmlld3BvcnRUbyh7cm93OjB9KX19LGppdD17bmFtZToiZW1wdHlTZWxlY3RlZENlbGxzIixjYWxsYmFjayhjKXtj'@;
put 'LmVtcHR5U2VsZWN0ZWRDZWxscygpLGMuX2dldEVkaXRvck1hbmFnZXIoKS5wcmVwYXJlRWRpdG9yKCl9fSx6aXQ9e25hbWU6InNjcm9sbFRvRm9jdXNlZENlbGwiLGNhbGxiYWNrKGMpe2NvbnN0e2hpZ2hsaWdodDpsfT1jLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCksYT1jLmdldEZpcnN0RnVs'@;
put 'bHlWaXNpYmxlUm93KCktMSxkPWMuZ2V0Rmlyc3RGdWxseVZpc2libGVDb2x1bW4oKS0xLGg9Yy5nZXRMYXN0RnVsbHlWaXNpYmxlUm93KCkrMSxmPWMuZ2V0TGFzdEZ1bGx5VmlzaWJsZUNvbHVtbigpKzEsdj1jLl9jcmVhdGVDZWxsQ29vcmRzKGEsZCksTT1jLl9jcmVhdGVDZWxsQ29vcmRz'@;
put 'KGgsZik7aWYoIWMuX2NyZWF0ZUNlbGxSYW5nZSh2LHYsTSkuaW5jbHVkZXMobCkmJihsLnJvdz49MHx8bC5jb2w+PTApKXtjb25zdCBaPXt9O2lmKGwuY29sPj0wKXtjb25zdCByZT1NYXRoLmZsb29yKGMuY291bnRWaXNpYmxlQ29scygpLzIpO1ouY29sPU1hdGgubWF4KGwuY29sLXJlLDAp'@;
put 'fWlmKGwucm93Pj0wKXtjb25zdCByZT1NYXRoLmZsb29yKGMuY291bnRWaXNpYmxlUm93cygpLzIpO1oucm93PU1hdGgubWF4KGwucm93LXJlLDApfWMuc2Nyb2xsVmlld3BvcnRUbyh7Li4uWix2ZXJ0aWNhbFNuYXA6InRvcCIsaG9yaXpvbnRhbFNuYXA6InN0YXJ0In0pfX19LFVpdD17bmFt'@;
put 'ZToic2VsZWN0QWxsQ2VsbHMiLGNhbGxiYWNrKGMpe2xldHtzZWxlY3Rpb246bH09YztsLm1hcmtTb3VyY2UoImtleWJvYXJkIiksbC5zZWxlY3RBbGwoITAsITAse2Rpc2FibGVIZWFkZXJzSGlnaGxpZ2h0OiEwfSksbC5tYXJrRW5kU291cmNlKCl9fSxaaXQ9e25hbWU6InNlbGVjdEFsbENl'@;
put 'bGxzQW5kSGVhZGVycyIsY2FsbGJhY2soYyl7bGV0e3NlbGVjdGlvbjpsfT1jO2wubWFya1NvdXJjZSgia2V5Ym9hcmQiKSxsLnNlbGVjdEFsbCghMCwhMCx7ZGlzYWJsZUhlYWRlcnNIaWdobGlnaHQ6ITF9KSxsLm1hcmtFbmRTb3VyY2UoKX19LFdpdD17bmFtZToicG9wdWxhdGVTZWxlY3Rl'@;
put 'ZENlbGxzRGF0YSIsY2FsbGJhY2soYyl7Y29uc3QgbD1jLmdldFNlbGVjdGVkUmFuZ2UoKSx7cm93OmEsY29sOmR9PWxbbC5sZW5ndGgtMV0uaGlnaGxpZ2h0Lm5vcm1hbGl6ZSgpLGg9Yy5nZXREYXRhQXRDZWxsKGEsZCksZj1uZXcgTWFwO2ZvcihsZXQgdj0wO3Y8bC5sZW5ndGg7disrKWxb'@;
put 'dl0uZm9yQWxsKChNLEQpPT57aWYoTT49MCYmRD49MCYmKE0hPT1hfHxEIT09ZCkpe2NvbnN0e3JlYWRPbmx5Olp9PWMuZ2V0Q2VsbE1ldGEoTSxEKTtafHxmLnNldChgJHtNfXgke0R9YCxbTSxELGhdKX19KTtjLnNldERhdGFBdENlbGwoQXJyYXkuZnJvbShmLnZhbHVlcygpKSl9fSxZaXQ9'@;
put 'Wy4uLmZ1bmN0aW9uIGxpdCgpe3JldHVybltYcnQscml0LGlpdCxhaXQsb2l0LHNpdF19KCksLi4uZnVuY3Rpb24gU2l0KCl7cmV0dXJuW2NpdCx1aXQsZGl0LGhpdCxmaXQscGl0LGdpdCxtaXQsdml0LGJpdCx5aXQsX2l0LHdpdCxDaXRdfSgpLC4uLmZ1bmN0aW9uIEJpdCgpe3JldHVybltN'@;
put 'aXQseGl0LEVpdCxUaXQsQWl0LGtpdCxEaXQsSWl0LFJpdCxMaXQsT2l0LFBpdCxGaXQsSGl0LE5pdCxWaXRdfSgpLGppdCx6aXQsVWl0LFppdCxXaXRdO2Z1bmN0aW9uIFNwZShjKXtjb25zdCBsPXt9O3JldHVybiBZaXQuZm9yRWFjaChhPT57bGV0e25hbWU6ZCxjYWxsYmFjazpofT1hO2xb'@;
put 'ZF09ZnVuY3Rpb24oKXtmb3IodmFyIGY9YXJndW1lbnRzLmxlbmd0aCx2PW5ldyBBcnJheShmKSxNPTA7TTxmO00rKyl2W01dPWFyZ3VtZW50c1tNXTtyZXR1cm4gaChjLC4uLnYpfX0pLGx9ZnVuY3Rpb24gR2l0KGMpe2NvbnN0IGw9Yy5nZXRTaG9ydGN1dE1hbmFnZXIoKS5hZGRDb250ZXh0'@;
put 'KCJlZGl0b3IiKSxhPVNwZShjKSxkPXtncm91cDpXbX07bC5hZGRTaG9ydGN1dHMoW3trZXlzOltbIkVudGVyIl0sWyJFbnRlciIsIlNoaWZ0Il1dLGNhbGxiYWNrOihoLGYpPT5hLmVkaXRvckNsb3NlQW5kU2F2ZUJ5RW50ZXIoaCxmKX0se2tleXM6W1siRW50ZXIiLCJDb250cm9sL01ldGEi'@;
put 'XSxbIkVudGVyIiwiQ29udHJvbC9NZXRhIiwiU2hpZnQiXV0sY2FwdHVyZUN0cmw6ITAsY2FsbGJhY2s6KGgsZik9PmEuZWRpdG9yQ2xvc2VBbmRTYXZlQnlFbnRlcihoLGYpfSx7a2V5czpbWyJUYWIiXSxbIlRhYiIsIlNoaWZ0Il0sWyJQYWdlRG93biJdLFsiUGFnZVVwIl1dLGZvcndhcmRU'@;
put 'b0NvbnRleHQ6Yy5nZXRTaG9ydGN1dE1hbmFnZXIoKS5nZXRDb250ZXh0KCJncmlkIiksY2FsbGJhY2s6KGgsZik9PmEuZWRpdG9yQ2xvc2VBbmRTYXZlKGgsZil9LHtrZXlzOltbIkFycm93RG93biJdLFsiQXJyb3dVcCJdLFsiQXJyb3dMZWZ0Il0sWyJBcnJvd1JpZ2h0Il1dLHByZXZlbnRE'@;
put 'ZWZhdWx0OiExLGNhbGxiYWNrOihoLGYpPT5hLmVkaXRvckNsb3NlQW5kU2F2ZUJ5QXJyb3dLZXlzKGgsZil9LHtrZXlzOltbIkVzY2FwZSJdLFsiRXNjYXBlIiwiQ29udHJvbC9NZXRhIl1dLGNhbGxiYWNrOigpPT5hLmVkaXRvckNsb3NlV2l0aG91dFNhdmluZygpfV0sZCl9ZnVuY3Rpb24g'@;
put 'JGl0KGMpe2NvbnN0IGw9Yy5nZXRTaG9ydGN1dE1hbmFnZXIoKS5hZGRDb250ZXh0KCJncmlkIiksYT1TcGUoYyksZD17cnVuT25seUlmOigpPT57Y29uc3R7bmF2aWdhYmxlSGVhZGVyczpofT1jLmdldFNldHRpbmdzKCk7cmV0dXJuIFBhKGMuZ2V0U2VsZWN0ZWQoKSkmJihofHwhaCYmYy5j'@;
put 'b3VudFJlbmRlcmVkUm93cygpPjAmJmMuY291bnRSZW5kZXJlZENvbHMoKT4wKX0sZ3JvdXA6bXBlfTtsLmFkZFNob3J0Y3V0cyhbe2tleXM6W1siRjIiXV0sY2FsbGJhY2s6aD0+YS5lZGl0b3JGYXN0T3BlbihoKX0se2tleXM6W1siRW50ZXIiXSxbIkVudGVyIiwiU2hpZnQiXV0sY2FsbGJh'@;
put 'Y2s6KGgsZik9PmEuZWRpdG9yT3BlbihoLGYpfSx7a2V5czpbWyJCYWNrc3BhY2UiXSxbIkRlbGV0ZSJdXSxjYWxsYmFjazooKT0+YS5lbXB0eVNlbGVjdGVkQ2VsbHMoKX1dLHtncm91cDpXbSxydW5Pbmx5SWY6KCk9PlBhKGMuZ2V0U2VsZWN0ZWQoKSl9KSxsLmFkZFNob3J0Y3V0cyhbe2tl'@;
put 'eXM6W1siQ29udHJvbC9NZXRhIiwiQSJdXSxjYWxsYmFjazooKT0+YS5zZWxlY3RBbGxDZWxscygpLHJ1bk9ubHlJZjooKT0+e3ZhciBoO3JldHVybiEobnVsbCE9PShoPWMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSkmJnZvaWQgMCE9PWgmJmguaGlnaGxpZ2h0LmlzSGVhZGVyKCkpfX0se2tl'@;
put 'eXM6W1siQ29udHJvbC9NZXRhIiwiQSJdXSxjYWxsYmFjazooKT0+e30scnVuT25seUlmOigpPT57dmFyIGg7cmV0dXJuIG51bGw9PT0oaD1jLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCkpfHx2b2lkIDA9PT1oP3ZvaWQgMDpoLmhpZ2hsaWdodC5pc0hlYWRlcigpfSxwcmV2ZW50RGVmYXVsdDoh'@;
put 'MH0se2tleXM6W1siQ29udHJvbC9NZXRhIiwiU2hpZnQiLCJTcGFjZSJdXSxjYWxsYmFjazooKT0+YS5zZWxlY3RBbGxDZWxsc0FuZEhlYWRlcnMoKX0se2tleXM6W1siQ29udHJvbC9NZXRhIiwiRW50ZXIiXV0sY2FsbGJhY2s6KCk9PmEucG9wdWxhdGVTZWxlY3RlZENlbGxzRGF0YSgpLHJ1'@;
put 'bk9ubHlJZjooKT0+e3ZhciBoLGY7cmV0dXJuIShudWxsIT09KGg9Yy5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpKSYmdm9pZCAwIT09aCYmaC5oaWdobGlnaHQuaXNIZWFkZXIoKSkmJihudWxsPT09KGY9Yy5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpKXx8dm9pZCAwPT09Zj92b2lkIDA6Zi5nZXRD'@;
put 'ZWxsc0NvdW50KCkpPjF9fSx7a2V5czpbWyJDb250cm9sIiwiU3BhY2UiXV0sY2FwdHVyZUN0cmw6ITAsY2FsbGJhY2s6KCk9PmEuZXh0ZW5kQ2VsbHNTZWxlY3Rpb25Ub0NvbHVtbnMoKX0se2tleXM6W1siU2hpZnQiLCJTcGFjZSJdXSxzdG9wUHJvcGFnYXRpb246ITAsY2FsbGJhY2s6KCk9'@;
put 'PmEuZXh0ZW5kQ2VsbHNTZWxlY3Rpb25Ub1Jvd3MoKX0se2tleXM6W1siQXJyb3dVcCJdXSxjYWxsYmFjazooKT0+YS5tb3ZlQ2VsbFNlbGVjdGlvblVwKCl9LHtrZXlzOltbIkFycm93VXAiLCJDb250cm9sL01ldGEiXV0sY2FwdHVyZUN0cmw6ITAsY2FsbGJhY2s6KCk9PmEubW92ZUNlbGxT'@;
put 'ZWxlY3Rpb25Ub01vc3RUb3AoKX0se2tleXM6W1siQXJyb3dVcCIsIlNoaWZ0Il1dLGNhbGxiYWNrOigpPT5hLmV4dGVuZENlbGxzU2VsZWN0aW9uVXAoKX0se2tleXM6W1siQXJyb3dVcCIsIlNoaWZ0IiwiQ29udHJvbC9NZXRhIl1dLGNhcHR1cmVDdHJsOiEwLGNhbGxiYWNrOigpPT5hLmV4'@;
put 'dGVuZENlbGxzU2VsZWN0aW9uVG9Nb3N0VG9wKCkscnVuT25seUlmOigpPT4hKGMuc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvcm5lcigpfHxjLnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb2x1bW5IZWFkZXIoKSl9LHtrZXlzOltbIkFycm93RG93biJdXSxjYWxsYmFjazooKT0+YS5tb3ZlQ2Vs'@;
put 'bFNlbGVjdGlvbkRvd24oKX0se2tleXM6W1siQXJyb3dEb3duIiwiQ29udHJvbC9NZXRhIl1dLGNhcHR1cmVDdHJsOiEwLGNhbGxiYWNrOigpPT5hLm1vdmVDZWxsU2VsZWN0aW9uVG9Nb3N0Qm90dG9tKCl9LHtrZXlzOltbIkFycm93RG93biIsIlNoaWZ0Il1dLGNhbGxiYWNrOigpPT5hLmV4'@;
put 'dGVuZENlbGxzU2VsZWN0aW9uRG93bigpfSx7a2V5czpbWyJBcnJvd0Rvd24iLCJTaGlmdCIsIkNvbnRyb2wvTWV0YSJdXSxjYXB0dXJlQ3RybDohMCxjYWxsYmFjazooKT0+YS5leHRlbmRDZWxsc1NlbGVjdGlvblRvTW9zdEJvdHRvbSgpLHJ1bk9ubHlJZjooKT0+IShjLnNlbGVjdGlvbi5p'@;
put 'c1NlbGVjdGVkQnlDb3JuZXIoKXx8Yy5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Q29sdW1uSGVhZGVyKCkpfSx7a2V5czpbWyJBcnJvd0xlZnQiXV0sY2FsbGJhY2s6KCk9PmEubW92ZUNlbGxTZWxlY3Rpb25MZWZ0KCl9LHtrZXlzOltbIkFycm93TGVmdCIsIkNvbnRyb2wvTWV0YSJdXSxjYXB0'@;
put 'dXJlQ3RybDohMCxjYWxsYmFjazooKT0+YS5tb3ZlQ2VsbFNlbGVjdGlvblRvTW9zdExlZnQoKX0se2tleXM6W1siQXJyb3dMZWZ0IiwiU2hpZnQiXV0sY2FsbGJhY2s6KCk9PmEuZXh0ZW5kQ2VsbHNTZWxlY3Rpb25MZWZ0KCl9LHtrZXlzOltbIkFycm93TGVmdCIsIlNoaWZ0IiwiQ29udHJv'@;
put 'bC9NZXRhIl1dLGNhcHR1cmVDdHJsOiEwLGNhbGxiYWNrOigpPT5hLmV4dGVuZENlbGxzU2VsZWN0aW9uVG9Nb3N0TGVmdCgpLHJ1bk9ubHlJZjooKT0+IShjLnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb3JuZXIoKXx8Yy5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Um93SGVhZGVyKCkpfSx7a2V5'@;
put 'czpbWyJBcnJvd1JpZ2h0Il1dLGNhbGxiYWNrOigpPT5hLm1vdmVDZWxsU2VsZWN0aW9uUmlnaHQoKX0se2tleXM6W1siQXJyb3dSaWdodCIsIkNvbnRyb2wvTWV0YSJdXSxjYXB0dXJlQ3RybDohMCxjYWxsYmFjazooKT0+YS5tb3ZlQ2VsbFNlbGVjdGlvblRvTW9zdFJpZ2h0KCl9LHtrZXlz'@;
put 'OltbIkFycm93UmlnaHQiLCJTaGlmdCJdXSxjYWxsYmFjazooKT0+YS5leHRlbmRDZWxsc1NlbGVjdGlvblJpZ2h0KCl9LHtrZXlzOltbIkFycm93UmlnaHQiLCJTaGlmdCIsIkNvbnRyb2wvTWV0YSJdXSxjYXB0dXJlQ3RybDohMCxjYWxsYmFjazooKT0+YS5leHRlbmRDZWxsc1NlbGVjdGlv'@;
put 'blRvTW9zdFJpZ2h0KCkscnVuT25seUlmOigpPT4hKGMuc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvcm5lcigpfHxjLnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlSb3dIZWFkZXIoKSl9LHtrZXlzOltbIkhvbWUiXV0sY2FwdHVyZUN0cmw6ITAsY2FsbGJhY2s6KCk9PmEubW92ZUNlbGxTZWxlY3Rp'@;
put 'b25Ub01vc3RJbmxpbmVTdGFydCgpLHJ1bk9ubHlJZjooKT0+Yy52aWV3LmlzTWFpblRhYmxlTm90RnVsbHlDb3ZlcmVkQnlPdmVybGF5cygpfSx7a2V5czpbWyJIb21lIiwiU2hpZnQiXV0sY2FsbGJhY2s6KCk9PmEuZXh0ZW5kQ2VsbHNTZWxlY3Rpb25Ub01vc3RJbmxpbmVTdGFydCgpfSx7'@;
put 'a2V5czpbWyJIb21lIiwiQ29udHJvbC9NZXRhIl1dLGNhcHR1cmVDdHJsOiEwLGNhbGxiYWNrOigpPT5hLm1vdmVDZWxsU2VsZWN0aW9uVG9Nb3N0VG9wSW5saW5lU3RhcnQoKSxydW5Pbmx5SWY6KCk9PmMudmlldy5pc01haW5UYWJsZU5vdEZ1bGx5Q292ZXJlZEJ5T3ZlcmxheXMoKX0se2tl'@;
put 'eXM6W1siRW5kIl1dLGNhcHR1cmVDdHJsOiEwLGNhbGxiYWNrOigpPT5hLm1vdmVDZWxsU2VsZWN0aW9uVG9Nb3N0SW5saW5lRW5kKCkscnVuT25seUlmOigpPT5jLnZpZXcuaXNNYWluVGFibGVOb3RGdWxseUNvdmVyZWRCeU92ZXJsYXlzKCl9LHtrZXlzOltbIkVuZCIsIlNoaWZ0Il1dLGNh'@;
put 'bGxiYWNrOigpPT5hLmV4dGVuZENlbGxzU2VsZWN0aW9uVG9Nb3N0SW5saW5lRW5kKCl9LHtrZXlzOltbIkVuZCIsIkNvbnRyb2wvTWV0YSJdXSxjYXB0dXJlQ3RybDohMCxjYWxsYmFjazooKT0+YS5tb3ZlQ2VsbFNlbGVjdGlvblRvTW9zdEJvdHRvbUlubGluZUVuZCgpLHJ1bk9ubHlJZjoo'@;
put 'KT0+Yy52aWV3LmlzTWFpblRhYmxlTm90RnVsbHlDb3ZlcmVkQnlPdmVybGF5cygpfSx7a2V5czpbWyJQYWdlVXAiXV0sY2FsbGJhY2s6KCk9PmEubW92ZUNlbGxTZWxlY3Rpb25VcEJ5Vmlld3BvcnRIaWdodCgpfSx7a2V5czpbWyJQYWdlVXAiLCJTaGlmdCJdXSxjYWxsYmFjazooKT0+YS5l'@;
put 'eHRlbmRDZWxsc1NlbGVjdGlvblVwQnlWaWV3cG9ydEhlaWdodCgpfSx7a2V5czpbWyJQYWdlRG93biJdXSxjYWxsYmFjazooKT0+YS5tb3ZlQ2VsbFNlbGVjdGlvbkRvd25CeVZpZXdwb3J0SGVpZ2h0KCl9LHtrZXlzOltbIlBhZ2VEb3duIiwiU2hpZnQiXV0sY2FsbGJhY2s6KCk9PmEuZXh0'@;
put 'ZW5kQ2VsbHNTZWxlY3Rpb25Eb3duQnlWaWV3cG9ydEhlaWdodCgpfSx7a2V5czpbWyJUYWIiXV0scHJldmVudERlZmF1bHQ6ITEsY2FsbGJhY2s6aD0+YS5tb3ZlQ2VsbFNlbGVjdGlvbklubGluZVN0YXJ0KGgpfSx7a2V5czpbWyJTaGlmdCIsIlRhYiJdXSxwcmV2ZW50RGVmYXVsdDohMSxj'@;
put 'YWxsYmFjazpoPT5hLm1vdmVDZWxsU2VsZWN0aW9uSW5saW5lRW5kKGgpfSx7a2V5czpbWyJDb250cm9sL01ldGEiLCJCYWNrc3BhY2UiXV0sY2FsbGJhY2s6KCk9PmEuc2Nyb2xsVG9Gb2N1c2VkQ2VsbCgpfV0sZCl9ZnVuY3Rpb24gTXBlKGMpe2NvbnN0e2NsYXNzTmFtZXM6bH09TzJlKGMs'@;
put 'L2h0LXRoZW1lLVthLXpBLVowLTlfLV0rLyk7cmV0dXJuIGwucG9wKCl9bGV0IGtYPW51bGw7Y29uc3QgRFg9bmV3IE1hcDtmdW5jdGlvbiB4cGUoYyxsKXt2YXIgYSxkPXRoaXM7bGV0IGg9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0mJmFyZ3VtZW50c1syXSxm'@;
put 'PXRoaXM7Y29uc3Qgdj1uZXcgajIoZik7bGV0IE0sRCxaLHJlLGNlLGJlLEVlPSEwOyhmdW5jdGlvbiBidHQoYyl7cmV0dXJuIGM9PT1ES30pKGgpJiZmdW5jdGlvbiB2dHQoYyl7QzNlLnNldChjLCEwKX0odGhpcyksdGhpcy5yb290RWxlbWVudD1jLHRoaXMucm9vdERvY3VtZW50PWMub3du'@;
put 'ZXJEb2N1bWVudCx0aGlzLnJvb3RXaW5kb3c9dGhpcy5yb290RG9jdW1lbnQuZGVmYXVsdFZpZXcsdGhpcy5pc0Rlc3Ryb3llZD0hMSx0aGlzLnJlbmRlclN1c3BlbmRlZENvdW50ZXI9MCx0aGlzLmV4ZWN1dGlvblN1c3BlbmRlZENvdW50ZXI9MDtjb25zdCBCZT1udWxsIT09KGE9bD8ubGF5'@;
put 'b3V0RGlyZWN0aW9uKSYmdm9pZCAwIT09YT9hOiJpbmhlcml0IixxZT1bInJ0bCIsImx0ciJdLmluY2x1ZGVzKEJlKT9CZTp0aGlzLnJvb3RXaW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLnJvb3RFbGVtZW50KS5kaXJlY3Rpb247dGhpcy5yb290RWxlbWVudC5zZXRBdHRyaWJ1dGUoImRp'@;
put 'ciIscWUpLHRoaXMuaXNSdGw9ZnVuY3Rpb24oKXtyZXR1cm4icnRsIj09PXFlfSx0aGlzLmlzTHRyPWZ1bmN0aW9uKCl7cmV0dXJuIWYuaXNSdGwoKX0sdGhpcy5nZXREaXJlY3Rpb25GYWN0b3I9ZnVuY3Rpb24oKXtyZXR1cm4gZi5pc0x0cigpPzE6LTF9LGwubGFuZ3VhZ2U9ZnVuY3Rpb24g'@;
put 'Z250KGMpe2xldCBsPUgzZShjKTtyZXR1cm4gZ1gobCl8fChsPXBYLE4zZShjKSksbH0obC5sYW5ndWFnZSk7Y29uc3QgcnQ9T2JqZWN0LmZyb21FbnRyaWVzKE9iamVjdC5lbnRyaWVzKGwpLmZpbHRlcih2dD0+e2xldFtOdF09dnQ7cmV0dXJuIShTYS5nZXRTaW5nbGV0b24oKS5pc1JlZ2lz'@;
put 'dGVyZWQoTnQpfHxTYS5nZXRTaW5nbGV0b24oKS5pc0RlcHJlY2F0ZWQoTnQpKX0pKSxwdD1uZXcgdXBlKGYscnQsW3dydCxBcnRdKSxkdD1wdC5nZXRUYWJsZU1ldGEoKSxKdD1wdC5nZXRHbG9iYWxNZXRhKCksdm49Sk8oKTt0aGlzLmNvbnRhaW5lcj10aGlzLnJvb3REb2N1bWVudC5jcmVh'@;
put 'dGVFbGVtZW50KCJkaXYiKSxjLmluc2VydEJlZm9yZSh0aGlzLmNvbnRhaW5lcixjLmZpcnN0Q2hpbGQpLGNQKHRoaXMpJiYoUzJlKGwubGljZW5zZUtleSxjKSxUaShjLCJodC13cmFwcGVyIikpLHRoaXMuZ3VpZD1gaHRfJHtoJCgpfWAsRFguc2V0KHRoaXMuZ3VpZCx0aGlzKSx0aGlzLmNv'@;
put 'bHVtbkluZGV4TWFwcGVyPW5ldyBZSyx0aGlzLnJvd0luZGV4TWFwcGVyPW5ldyBZSyx0aGlzLmNvbHVtbkluZGV4TWFwcGVyLmFkZExvY2FsSG9vaygiaW5kZXhlc1NlcXVlbmNlQ2hhbmdlIix2dD0+e2YucnVuSG9va3MoImFmdGVyQ29sdW1uU2VxdWVuY2VDaGFuZ2UiLHZ0KX0pLHRoaXMu'@;
put 'cm93SW5kZXhNYXBwZXIuYWRkTG9jYWxIb29rKCJpbmRleGVzU2VxdWVuY2VDaGFuZ2UiLHZ0PT57Zi5ydW5Ib29rcygiYWZ0ZXJSb3dTZXF1ZW5jZUNoYW5nZSIsdnQpfSksdi5hZGRFdmVudExpc3RlbmVyKHRoaXMucm9vdERvY3VtZW50LmRvY3VtZW50RWxlbWVudCwiY29tcG9zaXRpb25z'@;
put 'dGFydCIsdnQ9PntmLnJ1bkhvb2tzKCJiZWZvcmVDb21wb3NpdGlvblN0YXJ0Iix2dCl9KSxEPW5ldyBMdHQoZiksKCF0aGlzLnJvb3RFbGVtZW50LmlkfHwiaHRfIj09PXRoaXMucm9vdEVsZW1lbnQuaWQuc3Vic3RyaW5nKDAsMykpJiYodGhpcy5yb290RWxlbWVudC5pZD10aGlzLmd1aWQp'@;
put 'O2xldCBHcj1uZXcgcW50KGR0LHtyb3dJbmRleE1hcHBlcjpmLnJvd0luZGV4TWFwcGVyLGNvbHVtbkluZGV4TWFwcGVyOmYuY29sdW1uSW5kZXhNYXBwZXIsY291bnRDb2xzOigpPT5mLmNvdW50Q29scygpLGNvdW50Um93czooKT0+Zi5jb3VudFJvd3MoKSxwcm9wVG9Db2w6dnQ9Pk0ucHJv'@;
put 'cFRvQ29sKHZ0KSxpc0VkaXRvck9wZW5lZDooKT0+ISFmLmdldEFjdGl2ZUVkaXRvcigpJiZmLmdldEFjdGl2ZUVkaXRvcigpLmlzT3BlbmVkKCksY291bnRSZW5kZXJhYmxlQ29sdW1uczooKT0+dGhpcy52aWV3LmNvdW50UmVuZGVyYWJsZUNvbHVtbnMoKSxjb3VudFJlbmRlcmFibGVSb3dz'@;
put 'OigpPT50aGlzLnZpZXcuY291bnRSZW5kZXJhYmxlUm93cygpLGNvdW50Um93SGVhZGVyczooKT0+dGhpcy5jb3VudFJvd0hlYWRlcnMoKSxjb3VudENvbEhlYWRlcnM6KCk9PnRoaXMuY291bnRDb2xIZWFkZXJzKCksY291bnRSZW5kZXJhYmxlUm93c0luUmFuZ2U6ZnVuY3Rpb24oKXtyZXR1'@;
put 'cm4gZC52aWV3LmNvdW50UmVuZGVyYWJsZVJvd3NJblJhbmdlKC4uLmFyZ3VtZW50cyl9LGNvdW50UmVuZGVyYWJsZUNvbHVtbnNJblJhbmdlOmZ1bmN0aW9uKCl7cmV0dXJuIGQudmlldy5jb3VudFJlbmRlcmFibGVDb2x1bW5zSW5SYW5nZSguLi5hcmd1bWVudHMpfSxnZXRTaG9ydGN1dE1h'@;
put 'bmFnZXI6KCk9PmYuZ2V0U2hvcnRjdXRNYW5hZ2VyKCksY3JlYXRlQ2VsbENvb3JkczoodnQsTnQpPT5mLl9jcmVhdGVDZWxsQ29vcmRzKHZ0LE50KSxjcmVhdGVDZWxsUmFuZ2U6KHZ0LE50LEh0KT0+Zi5fY3JlYXRlQ2VsbFJhbmdlKHZ0LE50LEh0KSx2aXN1YWxUb1JlbmRlcmFibGVDb29y'@;
put 'ZHM6dnQ9Pntjb25zdHtyb3c6TnQsY29sOkh0fT12dDtyZXR1cm4gZi5fY3JlYXRlQ2VsbENvb3JkcyhOdD49MD9mLnJvd0luZGV4TWFwcGVyLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoTnQpOk50LEh0Pj0wP2YuY29sdW1uSW5kZXhNYXBwZXIuZ2V0UmVuZGVyYWJsZUZyb21WaXN1'@;
put 'YWxJbmRleChIdCk6SHQpfSxyZW5kZXJhYmxlVG9WaXN1YWxDb29yZHM6dnQ9Pntjb25zdHtyb3c6TnQsY29sOkh0fT12dDtyZXR1cm4gZi5fY3JlYXRlQ2VsbENvb3JkcyhOdD49MD9mLnJvd0luZGV4TWFwcGVyLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgoTnQpOk50LEh0Pj0wP2Yu'@;
put 'Y29sdW1uSW5kZXhNYXBwZXIuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleChIdCk6SHQpfSxmaW5kRmlyc3ROb25IaWRkZW5SZW5kZXJhYmxlUm93Oih2dCxOdCk9Pntjb25zdCBIdD1OdD52dD8xOi0xLEhuPU1hdGgubWluKHZ0LE50KSx0cj1NYXRoLm1heCh2dCxOdCksYXI9Zi5yb3dJ'@;
put 'bmRleE1hcHBlci5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgodnQsSHQpO3JldHVybiBudWxsPT09YXJ8fDE9PT1IdCYmYXI+dHJ8fC0xPT09SHQmJmFyPEhuP251bGw6YXI+PTA/Zi5yb3dJbmRleE1hcHBlci5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KGFyKTphcn0sZmluZEZpcnN0'@;
put 'Tm9uSGlkZGVuUmVuZGVyYWJsZUNvbHVtbjoodnQsTnQpPT57Y29uc3QgSHQ9TnQ+dnQ/MTotMSxIbj1NYXRoLm1pbih2dCxOdCksdHI9TWF0aC5tYXgodnQsTnQpLGFyPWYuY29sdW1uSW5kZXhNYXBwZXIuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KHZ0LEh0KTtyZXR1cm4gbnVsbD09PWFy'@;
put 'fHwxPT09SHQmJmFyPnRyfHwtMT09PUh0JiZhcjxIbj9udWxsOmFyPj0wP2YuY29sdW1uSW5kZXhNYXBwZXIuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChhcik6YXJ9LGlzRGlzYWJsZWRDZWxsU2VsZWN0aW9uOih2dCxOdCk9PnZ0PDB8fE50PDA/Zi5nZXRTZXR0aW5ncygpLmRpc2Fi'@;
put 'bGVWaXN1YWxTZWxlY3Rpb246Zi5nZXRDZWxsTWV0YSh2dCxOdCkuZGlzYWJsZVZpc3VhbFNlbGVjdGlvbn0pO3RoaXMuc2VsZWN0aW9uPUdyO2NvbnN0IG1yPXZ0PT57bGV0e2hpZGRlbkluZGV4ZXNDaGFuZ2VkOk50fT12dDt0aGlzLmZvcmNlRnVsbFJlbmRlcj0hMCxOdCYmdGhpcy5zZWxl'@;
put 'Y3Rpb24uY29tbWl0KCl9O2Z1bmN0aW9uIGFpKHZ0LE50KXtjb25zdCBIdD0iY2xhc3NOYW1lIj09PXZ0P2Yucm9vdEVsZW1lbnQ6Zi50YWJsZTtpZihFZSlUaShIdCxOdCk7ZWxzZXtsZXQgSG49W10sdHI9W107SnRbdnRdJiYoSG49QXJyYXkuaXNBcnJheShKdFt2dF0pP0p0W3Z0XTp1JChK'@;
put 'dFt2dF0pKSxOdCYmKHRyPUFycmF5LmlzQXJyYXkoTnQpP050OnUkKE50KSk7Y29uc3QgYXI9YyQoSG4sdHIpLEhyPWMkKHRyLEhuKTthci5sZW5ndGgmJmxvKEh0LGFyKSxIci5sZW5ndGgmJlRpKEh0LEhyKX1KdFt2dF09TnR9ZnVuY3Rpb24gX2koKXtsZXQgdnQ9ITE7cmV0dXJue3ZhbGlk'@;
put 'YXRvcnNJblF1ZXVlOjAsdmFsaWQ6ITAsYWRkVmFsaWRhdG9yVG9RdWV1ZSgpe3RoaXMudmFsaWRhdG9yc0luUXVldWUrPTEsdnQ9ITF9LHJlbW92ZVZhbGlkYXRvckZvcm1RdWV1ZSgpe3RoaXMudmFsaWRhdG9yc0luUXVldWU9dGhpcy52YWxpZGF0b3JzSW5RdWV1ZS0xPDA/MDp0aGlzLnZh'@;
put 'bGlkYXRvcnNJblF1ZXVlLTEsdGhpcy5jaGVja0lmUXVldWVJc0VtcHR5KCl9LG9uUXVldWVFbXB0eSgpe30sY2hlY2tJZlF1ZXVlSXNFbXB0eSgpezA9PT10aGlzLnZhbGlkYXRvcnNJblF1ZXVlJiYhMT09PXZ0JiYodnQ9ITAsdGhpcy5vblF1ZXVlRW1wdHkodGhpcy52YWxpZCkpfX19ZnVu'@;
put 'Y3Rpb24gT24odnQpe2NvbnN0IE50PXZ0LnJlcGxhY2UoIiwiLCIuIik7cmV0dXJuITE9PT1pc05hTihwYXJzZUZsb2F0KE50KSk/cGFyc2VGbG9hdChOdCk6dnR9ZnVuY3Rpb24genIodnQsTnQsSHQpe2lmKCF2dC5sZW5ndGgpcmV0dXJuIHZvaWQgSHQoKTtjb25zdCBIbj1mLmdldEFjdGl2'@;
put 'ZUVkaXRvcigpLHRyPW5ldyBfaTtsZXQgYXI9ITA7dHIub25RdWV1ZUVtcHR5PSgpPT57SG4mJmFyJiZIbi5jYW5jZWxDaGFuZ2VzKCksSHQoKX07Zm9yKGxldCBIcj12dC5sZW5ndGgtMTtIcj49MDtIci0tKXtjb25zdFtxcixvbl09dnRbSHJdLHluPU0ucHJvcFRvQ29sKG9uKTtsZXQgcG47'@;
put 'cG49TnVtYmVyLmlzSW50ZWdlcih5bik/Zi5nZXRDZWxsTWV0YShxcix5bik6ey4uLk9iamVjdC5nZXRQcm90b3R5cGVPZihkdCksLi4uZHR9LGYuZ2V0Q2VsbFZhbGlkYXRvcihwbikmJih0ci5hZGRWYWxpZGF0b3JUb1F1ZXVlKCksZi52YWxpZGF0ZUNlbGwodnRbSHJdWzNdLHBuLGZ1bmN0'@;
put 'aW9uKHByLCRuKXtyZXR1cm4gZnVuY3Rpb24oZHIpe2lmKCJib29sZWFuIiE9dHlwZW9mIGRyKXRocm93IG5ldyBFcnJvcigiVmFsaWRhdGlvbiBlcnJvcjogcmVzdWx0IGlzIG5vdCBib29sZWFuIik7ITE9PT1kciYmITE9PT0kbi5hbGxvd0ludmFsaWQmJihhcj0hMSx2dC5zcGxpY2UocHIs'@;
put 'MSksJG4udmFsaWQ9ITApLHRyLnJlbW92ZVZhbGlkYXRvckZvcm1RdWV1ZSgpfX0oSHIscG4pLE50KSl9dHIuY2hlY2tJZlF1ZXVlSXNFbXB0eSgpfWZ1bmN0aW9uIEpuKHZ0LE50KXtmb3IobGV0IEhuPXZ0Lmxlbmd0aC0xO0huPj0wO0huLS0pe2xldCB0cj0hMTtpZihudWxsIT09dnRbSG5d'@;
put 'KXtpZihudWxsIT12dFtIbl1bMl18fG51bGwhPXZ0W0huXVszXSl7aWYoZHQuYWxsb3dJbnNlcnRSb3cpZm9yKDt2dFtIbl1bMF0+Zi5jb3VudFJvd3MoKS0xOyl7Y29uc3R7ZGVsdGE6YXJ9PU0uY3JlYXRlUm93KHZvaWQgMCx2b2lkIDAse3NvdXJjZToiYXV0byJ9KTtpZigwPT09YXIpe3Ry'@;
put 'PSEwO2JyZWFrfX1pZigiYXJyYXkiPT09Zi5kYXRhVHlwZSYmKCFkdC5jb2x1bW5zfHwwPT09ZHQuY29sdW1ucy5sZW5ndGgpJiZkdC5hbGxvd0luc2VydENvbHVtbilmb3IoO00ucHJvcFRvQ29sKHZ0W0huXVsxXSk+Zi5jb3VudENvbHMoKS0xOyl7Y29uc3R7ZGVsdGE6YXJ9PU0uY3JlYXRl'@;
put 'Q29sKHZvaWQgMCx2b2lkIDAse3NvdXJjZToiYXV0byJ9KTtpZigwPT09YXIpe3RyPSEwO2JyZWFrfX10cnx8TS5zZXQodnRbSG5dWzBdLHZ0W0huXVsxXSx2dFtIbl1bM10pfX1lbHNlIHZ0LnNwbGljZShIbiwxKX1pZih2dC5sZW5ndGg+MCl7Wi5hZGp1c3RSb3dzQW5kQ29scygpLGYucnVu'@;
put 'SG9va3MoImJlZm9yZUNoYW5nZVJlbmRlciIsdnQsTnQpLHJlLmNsb3NlRWRpdG9yKCksZi5yZW5kZXIoKSxyZS5wcmVwYXJlRWRpdG9yKCksZi52aWV3LmFkanVzdEVsZW1lbnRzU2l6ZSgpLGYucnVuSG9va3MoImFmdGVyQ2hhbmdlIix2dCxOdHx8ImVkaXQiKTtjb25zdCBIbj1mLmdldEFj'@;
put 'dGl2ZUVkaXRvcigpO0huJiZQYShIbi5yZWZyZXNoVmFsdWUpJiZIbi5yZWZyZXNoVmFsdWUoKX1lbHNlIGYucmVuZGVyKCl9ZnVuY3Rpb24gSXIodnQsTnQsSHQpe3JldHVybiBBcnJheS5pc0FycmF5KHZ0KT92dDpbW3Z0LE50LEh0XV19ZnVuY3Rpb24gJHIodnQsTnQpe2NvbnN0IEh0PWYu'@;
put 'cnVuSG9va3MoImJlZm9yZUNoYW5nZSIsdnQsTnR8fCJlZGl0IiksSG49dnQuZmlsdGVyKGFyPT5udWxsIT09YXIpO3ZhciB0cjtpZighMT09PUh0fHwwPT09SG4ubGVuZ3RoKXJldHVybiBudWxsPT09KHRyPWYuZ2V0QWN0aXZlRWRpdG9yKCkpfHx2b2lkIDA9PT10cnx8dHIuY2FuY2VsQ2hh'@;
put 'bmdlcygpLFtdO2ZvcihsZXQgYXI9SG4ubGVuZ3RoLTE7YXI+PTA7YXItLSl7Y29uc3RbSHIscXIsLG9uXT1Iblthcl0seW49TS5wcm9wVG9Db2wocXIpO2xldCBwbjtwbj1OdW1iZXIuaXNJbnRlZ2VyKHluKT9mLmdldENlbGxNZXRhKEhyLHluKTp7Li4uT2JqZWN0LmdldFByb3RvdHlwZU9m'@;
put 'KGR0KSwuLi5kdH07Y29uc3R7dHlwZTpwcixjaGVja2VkVGVtcGxhdGU6JG4sdW5jaGVja2VkVGVtcGxhdGU6ZHJ9PXBuO2lmKCJudW1lcmljIj09PXByJiYic3RyaW5nIj09dHlwZW9mIG9uJiZ5ZmUob24pJiYoSG5bYXJdWzNdPU9uKG9uKSksImNoZWNrYm94Ij09PXByKXtjb25zdCBVcj1s'@;
put 'YyhvbiksWm49VXI9PT1sYygkbiksc3I9VXI9PT1sYyhkcik7KFpufHxzcikmJihIblthcl1bM109Wm4/JG46ZHIpfX1yZXR1cm4gSG59dGhpcy5jb2x1bW5JbmRleE1hcHBlci5hZGRMb2NhbEhvb2soImNhY2hlVXBkYXRlZCIsbXIpLHRoaXMucm93SW5kZXhNYXBwZXIuYWRkTG9jYWxIb29r'@;
put 'KCJjYWNoZVVwZGF0ZWQiLG1yKSx0aGlzLnNlbGVjdGlvbi5hZGRMb2NhbEhvb2soImFmdGVyU2V0UmFuZ2VFbmQiLCh2dCxOdCk9Pntjb25zdCBIdD1GZCghMSksSG49dGhpcy5zZWxlY3Rpb24uZ2V0U2VsZWN0ZWRSYW5nZSgpLHtmcm9tOnRyLHRvOmFyfT1Ibi5jdXJyZW50KCksSHI9SG4u'@;
put 'c2l6ZSgpLTE7dGhpcy5ydW5Ib29rcygiYWZ0ZXJTZWxlY3Rpb24iLHRyLnJvdyx0ci5jb2wsYXIucm93LGFyLmNvbCxIdCxIciksdGhpcy5ydW5Ib29rcygiYWZ0ZXJTZWxlY3Rpb25CeVByb3AiLHRyLnJvdyxmLmNvbFRvUHJvcCh0ci5jb2wpLGFyLnJvdyxmLmNvbFRvUHJvcChhci5jb2wp'@;
put 'LEh0LEhyKSxOdCYmKCFIdC5pc1RvdWNoZWQoKXx8SHQuaXNUb3VjaGVkKCkmJiFIdC52YWx1ZSkmJmJlLnNjcm9sbFRvKHZ0KTtjb25zdCBxcj1Hci5pc1NlbGVjdGVkQnlSb3dIZWFkZXIoKSxvbj1Hci5pc1NlbGVjdGVkQnlDb2x1bW5IZWFkZXIoKTtxciYmb24/VGkodGhpcy5yb290RWxl'@;
put 'bWVudCxbImh0X19zZWxlY3Rpb24tLXJvd3MiLCJodF9fc2VsZWN0aW9uLS1jb2x1bW5zIl0pOnFyPyhsbyh0aGlzLnJvb3RFbGVtZW50LCJodF9fc2VsZWN0aW9uLS1jb2x1bW5zIiksVGkodGhpcy5yb290RWxlbWVudCwiaHRfX3NlbGVjdGlvbi0tcm93cyIpKTpvbj8obG8odGhpcy5yb290'@;
put 'RWxlbWVudCwiaHRfX3NlbGVjdGlvbi0tcm93cyIpLFRpKHRoaXMucm9vdEVsZW1lbnQsImh0X19zZWxlY3Rpb24tLWNvbHVtbnMiKSk6bG8odGhpcy5yb290RWxlbWVudCxbImh0X19zZWxlY3Rpb24tLXJvd3MiLCJodF9fc2VsZWN0aW9uLS1jb2x1bW5zIl0pLCJzaGlmdCIhPT1Hci5nZXRT'@;
put 'ZWxlY3Rpb25Tb3VyY2UoKSYmcmUuY2xvc2VFZGl0b3IobnVsbCksZi52aWV3LnJlbmRlcigpLHJlLnByZXBhcmVFZGl0b3IoKX0pLHRoaXMuc2VsZWN0aW9uLmFkZExvY2FsSG9vaygiYmVmb3JlU2V0Rm9jdXMiLHZ0PT57dGhpcy5ydW5Ib29rcygiYmVmb3JlU2VsZWN0aW9uRm9jdXNTZXQi'@;
put 'LHZ0LnJvdyx2dC5jb2wpfSksdGhpcy5zZWxlY3Rpb24uYWRkTG9jYWxIb29rKCJhZnRlclNldEZvY3VzIix2dD0+e2NvbnN0IE50PUZkKCExKTt0aGlzLnJ1bkhvb2tzKCJhZnRlclNlbGVjdGlvbkZvY3VzU2V0Iix2dC5yb3csdnQuY29sLE50KSwoIU50LmlzVG91Y2hlZCgpfHxOdC5pc1Rv'@;
put 'dWNoZWQoKSYmIU50LnZhbHVlKSYmYmUuc2Nyb2xsVG8odnQpLHJlLmNsb3NlRWRpdG9yKCksZi52aWV3LnJlbmRlcigpLHJlLnByZXBhcmVFZGl0b3IoKX0pLHRoaXMuc2VsZWN0aW9uLmFkZExvY2FsSG9vaygiYWZ0ZXJTZWxlY3Rpb25GaW5pc2hlZCIsdnQ9Pntjb25zdCBOdD12dC5sZW5n'@;
put 'dGgtMSx7ZnJvbTpIdCx0bzpIbn09dnRbTnRdO3RoaXMucnVuSG9va3MoImFmdGVyU2VsZWN0aW9uRW5kIixIdC5yb3csSHQuY29sLEhuLnJvdyxIbi5jb2wsTnQpLHRoaXMucnVuSG9va3MoImFmdGVyU2VsZWN0aW9uRW5kQnlQcm9wIixIdC5yb3csZi5jb2xUb1Byb3AoSHQuY29sKSxIbi5y'@;
put 'b3csZi5jb2xUb1Byb3AoSG4uY29sKSxOdCl9KSx0aGlzLnNlbGVjdGlvbi5hZGRMb2NhbEhvb2soImFmdGVySXNNdWx0aXBsZVNlbGVjdGlvbiIsdnQ9Pntjb25zdCBOdD10aGlzLnJ1bkhvb2tzKCJhZnRlcklzTXVsdGlwbGVTZWxlY3Rpb24iLHZ0LnZhbHVlKTt2dC52YWx1ZSYmKHZ0LnZh'@;
put 'bHVlPU50KX0pLHRoaXMuc2VsZWN0aW9uLmFkZExvY2FsSG9vaygiYWZ0ZXJEZXNlbGVjdCIsKCk9PntyZS5jbG9zZUVkaXRvcigpLGYudmlldy5yZW5kZXIoKSxsbyh0aGlzLnJvb3RFbGVtZW50LFsiaHRfX3NlbGVjdGlvbi0tcm93cyIsImh0X19zZWxlY3Rpb24tLWNvbHVtbnMiXSksdGhp'@;
put 'cy5ydW5Ib29rcygiYWZ0ZXJEZXNlbGVjdCIpfSksdGhpcy5zZWxlY3Rpb24uYWRkTG9jYWxIb29rKCJiZWZvcmVIaWdobGlnaHRTZXQiLCgpPT50aGlzLnJ1bkhvb2tzKCJiZWZvcmVTZWxlY3Rpb25IaWdobGlnaHRTZXQiKSkuYWRkTG9jYWxIb29rKCJiZWZvcmVTZXRSYW5nZVN0YXJ0Iixm'@;
put 'dW5jdGlvbigpe2Zvcih2YXIgdnQ9YXJndW1lbnRzLmxlbmd0aCxOdD1uZXcgQXJyYXkodnQpLEh0PTA7SHQ8dnQ7SHQrKylOdFtIdF09YXJndW1lbnRzW0h0XTtyZXR1cm4gZC5ydW5Ib29rcygiYmVmb3JlU2V0UmFuZ2VTdGFydCIsLi4uTnQpfSkuYWRkTG9jYWxIb29rKCJiZWZvcmVTZXRS'@;
put 'YW5nZVN0YXJ0T25seSIsZnVuY3Rpb24oKXtmb3IodmFyIHZ0PWFyZ3VtZW50cy5sZW5ndGgsTnQ9bmV3IEFycmF5KHZ0KSxIdD0wO0h0PHZ0O0h0KyspTnRbSHRdPWFyZ3VtZW50c1tIdF07cmV0dXJuIGQucnVuSG9va3MoImJlZm9yZVNldFJhbmdlU3RhcnRPbmx5IiwuLi5OdCl9KS5hZGRM'@;
put 'b2NhbEhvb2soImJlZm9yZVNldFJhbmdlRW5kIixmdW5jdGlvbigpe2Zvcih2YXIgdnQ9YXJndW1lbnRzLmxlbmd0aCxOdD1uZXcgQXJyYXkodnQpLEh0PTA7SHQ8dnQ7SHQrKylOdFtIdF09YXJndW1lbnRzW0h0XTtyZXR1cm4gZC5ydW5Ib29rcygiYmVmb3JlU2V0UmFuZ2VFbmQiLC4uLk50'@;
put 'KX0pLmFkZExvY2FsSG9vaygiYmVmb3JlU2VsZWN0Q29sdW1ucyIsZnVuY3Rpb24oKXtmb3IodmFyIHZ0PWFyZ3VtZW50cy5sZW5ndGgsTnQ9bmV3IEFycmF5KHZ0KSxIdD0wO0h0PHZ0O0h0KyspTnRbSHRdPWFyZ3VtZW50c1tIdF07cmV0dXJuIGQucnVuSG9va3MoImJlZm9yZVNlbGVjdENv'@;
put 'bHVtbnMiLC4uLk50KX0pLmFkZExvY2FsSG9vaygiYWZ0ZXJTZWxlY3RDb2x1bW5zIixmdW5jdGlvbigpe2Zvcih2YXIgdnQ9YXJndW1lbnRzLmxlbmd0aCxOdD1uZXcgQXJyYXkodnQpLEh0PTA7SHQ8dnQ7SHQrKylOdFtIdF09YXJndW1lbnRzW0h0XTtyZXR1cm4gZC5ydW5Ib29rcygiYWZ0'@;
put 'ZXJTZWxlY3RDb2x1bW5zIiwuLi5OdCl9KS5hZGRMb2NhbEhvb2soImJlZm9yZVNlbGVjdFJvd3MiLGZ1bmN0aW9uKCl7Zm9yKHZhciB2dD1hcmd1bWVudHMubGVuZ3RoLE50PW5ldyBBcnJheSh2dCksSHQ9MDtIdDx2dDtIdCsrKU50W0h0XT1hcmd1bWVudHNbSHRdO3JldHVybiBkLnJ1bkhv'@;
put 'b2tzKCJiZWZvcmVTZWxlY3RSb3dzIiwuLi5OdCl9KS5hZGRMb2NhbEhvb2soImFmdGVyU2VsZWN0Um93cyIsZnVuY3Rpb24oKXtmb3IodmFyIHZ0PWFyZ3VtZW50cy5sZW5ndGgsTnQ9bmV3IEFycmF5KHZ0KSxIdD0wO0h0PHZ0O0h0KyspTnRbSHRdPWFyZ3VtZW50c1tIdF07cmV0dXJuIGQu'@;
put 'cnVuSG9va3MoImFmdGVyU2VsZWN0Um93cyIsLi4uTnQpfSkuYWRkTG9jYWxIb29rKCJiZWZvcmVNb2RpZnlUcmFuc2Zvcm1TdGFydCIsZnVuY3Rpb24oKXtmb3IodmFyIHZ0PWFyZ3VtZW50cy5sZW5ndGgsTnQ9bmV3IEFycmF5KHZ0KSxIdD0wO0h0PHZ0O0h0KyspTnRbSHRdPWFyZ3VtZW50'@;
put 'c1tIdF07cmV0dXJuIGQucnVuSG9va3MoIm1vZGlmeVRyYW5zZm9ybVN0YXJ0IiwuLi5OdCl9KS5hZGRMb2NhbEhvb2soImFmdGVyTW9kaWZ5VHJhbnNmb3JtU3RhcnQiLGZ1bmN0aW9uKCl7Zm9yKHZhciB2dD1hcmd1bWVudHMubGVuZ3RoLE50PW5ldyBBcnJheSh2dCksSHQ9MDtIdDx2dDtI'@;
put 'dCsrKU50W0h0XT1hcmd1bWVudHNbSHRdO3JldHVybiBkLnJ1bkhvb2tzKCJhZnRlck1vZGlmeVRyYW5zZm9ybVN0YXJ0IiwuLi5OdCl9KS5hZGRMb2NhbEhvb2soImJlZm9yZU1vZGlmeVRyYW5zZm9ybUZvY3VzIixmdW5jdGlvbigpe2Zvcih2YXIgdnQ9YXJndW1lbnRzLmxlbmd0aCxOdD1u'@;
put 'ZXcgQXJyYXkodnQpLEh0PTA7SHQ8dnQ7SHQrKylOdFtIdF09YXJndW1lbnRzW0h0XTtyZXR1cm4gZC5ydW5Ib29rcygibW9kaWZ5VHJhbnNmb3JtRm9jdXMiLC4uLk50KX0pLmFkZExvY2FsSG9vaygiYWZ0ZXJNb2RpZnlUcmFuc2Zvcm1Gb2N1cyIsZnVuY3Rpb24oKXtmb3IodmFyIHZ0PWFy'@;
put 'Z3VtZW50cy5sZW5ndGgsTnQ9bmV3IEFycmF5KHZ0KSxIdD0wO0h0PHZ0O0h0KyspTnRbSHRdPWFyZ3VtZW50c1tIdF07cmV0dXJuIGQucnVuSG9va3MoImFmdGVyTW9kaWZ5VHJhbnNmb3JtRm9jdXMiLC4uLk50KX0pLmFkZExvY2FsSG9vaygiYmVmb3JlTW9kaWZ5VHJhbnNmb3JtRW5kIixm'@;
put 'dW5jdGlvbigpe2Zvcih2YXIgdnQ9YXJndW1lbnRzLmxlbmd0aCxOdD1uZXcgQXJyYXkodnQpLEh0PTA7SHQ8dnQ7SHQrKylOdFtIdF09YXJndW1lbnRzW0h0XTtyZXR1cm4gZC5ydW5Ib29rcygibW9kaWZ5VHJhbnNmb3JtRW5kIiwuLi5OdCl9KS5hZGRMb2NhbEhvb2soImFmdGVyTW9kaWZ5'@;
put 'VHJhbnNmb3JtRW5kIixmdW5jdGlvbigpe2Zvcih2YXIgdnQ9YXJndW1lbnRzLmxlbmd0aCxOdD1uZXcgQXJyYXkodnQpLEh0PTA7SHQ8dnQ7SHQrKylOdFtIdF09YXJndW1lbnRzW0h0XTtyZXR1cm4gZC5ydW5Ib29rcygiYWZ0ZXJNb2RpZnlUcmFuc2Zvcm1FbmQiLC4uLk50KX0pLmFkZExv'@;
put 'Y2FsSG9vaygiYmVmb3JlUm93V3JhcCIsZnVuY3Rpb24oKXtmb3IodmFyIHZ0PWFyZ3VtZW50cy5sZW5ndGgsTnQ9bmV3IEFycmF5KHZ0KSxIdD0wO0h0PHZ0O0h0KyspTnRbSHRdPWFyZ3VtZW50c1tIdF07cmV0dXJuIGQucnVuSG9va3MoImJlZm9yZVJvd1dyYXAiLC4uLk50KX0pLmFkZExv'@;
put 'Y2FsSG9vaygiYmVmb3JlQ29sdW1uV3JhcCIsZnVuY3Rpb24oKXtmb3IodmFyIHZ0PWFyZ3VtZW50cy5sZW5ndGgsTnQ9bmV3IEFycmF5KHZ0KSxIdD0wO0h0PHZ0O0h0KyspTnRbSHRdPWFyZ3VtZW50c1tIdF07cmV0dXJuIGQucnVuSG9va3MoImJlZm9yZUNvbHVtbldyYXAiLC4uLk50KX0p'@;
put 'LmFkZExvY2FsSG9vaygiaW5zZXJ0Um93UmVxdWlyZSIsdnQ9PnRoaXMuYWx0ZXIoImluc2VydF9yb3dfYWJvdmUiLHZ0LDEsImF1dG8iKSkuYWRkTG9jYWxIb29rKCJpbnNlcnRDb2xSZXF1aXJlIix2dD0+dGhpcy5hbHRlcigiaW5zZXJ0X2NvbF9zdGFydCIsdnQsMSwiYXV0byIpKSxaPXth'@;
put 'bHRlcih2dCxOdCl7bGV0IEh0PWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXToxLEhuPWFyZ3VtZW50cy5sZW5ndGg+Mz9hcmd1bWVudHNbM106dm9pZCAwLHRyPWFyZ3VtZW50cy5sZW5ndGg+ND9hcmd1bWVudHNbNF06dm9pZCAwO2NvbnN0'@;
put 'IGFyPUhyPT57aWYoMD09PUhyLmxlbmd0aClyZXR1cm5bXTtjb25zdCBxcj1bLi4uSHJdO3JldHVybiBxci5zb3J0KCh5bixwbik9PntsZXRbcHJdPXluLFskbl09cG47cmV0dXJuIHByPT09JG4/MDpwcj4kbj8xOi0xfSkscXUocXIsKHluLHBuKT0+e2xldFtwciwkbl09cG47Y29uc3QgZHI9'@;
put 'eW5beW4ubGVuZ3RoLTFdLFtVcixabl09ZHIsc3I9VXIrWm47aWYocHI8PXNyKXtjb25zdCBOcj1NYXRoLm1heCgkbi0oc3ItcHIpLDApO2RyWzFdKz1Ocn1lbHNlIHluLnB1c2goW3ByLCRuXSk7cmV0dXJuIHlufSxbcXJbMF1dKX07c3dpdGNoKHZ0KXtjYXNlImluc2VydF9yb3dfYmVsb3ci'@;
put 'OmNhc2UiaW5zZXJ0X3Jvd19hYm92ZSI6Y29uc3QgSHI9Zi5jb3VudFNvdXJjZVJvd3MoKTtpZihkdC5tYXhSb3dzPT09SHIpcmV0dXJuO2NvbnN0IHFyPSJpbnNlcnRfcm93X2JlbG93Ij09PXZ0PyJiZWxvdyI6ImFib3ZlIjtOdD1OdD8/KCJiZWxvdyI9PT1xcj9IcjowKTtjb25zdHtkZWx0'@;
put 'YTpvbixzdGFydFBoeXNpY2FsSW5kZXg6eW59PU0uY3JlYXRlUm93KE50LEh0LHtzb3VyY2U6SG4sbW9kZTpxcn0pO0dyLnNoaWZ0Um93cyhmLnRvVmlzdWFsUm93KHluKSxvbik7YnJlYWs7Y2FzZSJpbnNlcnRfY29sX3N0YXJ0IjpjYXNlImluc2VydF9jb2xfZW5kIjpjb25zdCBwbj0iaW5z'@;
put 'ZXJ0X2NvbF9lbmQiPT09dnQ/ImVuZCI6InN0YXJ0IjtOdD1OdD8/KCJlbmQiPT09cG4/Zi5jb3VudFNvdXJjZUNvbHMoKTowKTtjb25zdHtkZWx0YTpwcixzdGFydFBoeXNpY2FsSW5kZXg6JG59PU0uY3JlYXRlQ29sKE50LEh0LHtzb3VyY2U6SG4sbW9kZTpwbn0pO2lmKHByKXtpZihBcnJh'@;
put 'eS5pc0FycmF5KGR0LmNvbEhlYWRlcnMpKXtjb25zdCBabj1bZi50b1Zpc3VhbENvbHVtbigkbiksMF07Wm4ubGVuZ3RoKz1wcixBcnJheS5wcm90b3R5cGUuc3BsaWNlLmFwcGx5KGR0LmNvbEhlYWRlcnMsWm4pfUdyLnNoaWZ0Q29sdW1ucyhmLnRvVmlzdWFsQ29sdW1uKCRuKSxwcil9YnJl'@;
put 'YWs7Y2FzZSJyZW1vdmVfcm93Ijpjb25zdCBkcj1abj0+e2xldCBzcj0wO1luKFpuLE5yPT57bGV0W01yLFpyXT1Ocjtjb25zdCBhYT1VYyhNcik/Zi5jb3VudFJvd3MoKS0xOk1hdGgubWF4KE1yLXNyLDApO2lmKE51bWJlci5pc0ludGVnZXIoTXIpJiYoTXI9TWF0aC5tYXgoTXItc3IsMCkp'@;
put 'LCFNLnJlbW92ZVJvdyhNcixacixIbikpcmV0dXJuO2lmKEdyLmlzU2VsZWN0ZWQoKSl7Y29uc3R7cm93Ok1vfT1mLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCkuaGlnaGxpZ2h0O01vPj1NciYmTW88PU1yK1pyLTEmJnJlLmNsb3NlRWRpdG9yKCEwKX1jb25zdCBJbz1mLmNvdW50Um93cygpLFpv'@;
put 'PWR0LmZpeGVkUm93c1RvcDtabz49YWErMSYmKGR0LmZpeGVkUm93c1RvcC09TWF0aC5taW4oWnIsWm8tYWEpKTtjb25zdCBwcz1kdC5maXhlZFJvd3NCb3R0b207cHMmJmFhPj1Jby1wcyYmKGR0LmZpeGVkUm93c0JvdHRvbS09TWF0aC5taW4oWnIscHMpKSwwPT09SW8/R3IuZGVzZWxlY3Qo'@;
put 'KToiQ29udGV4dE1lbnUucmVtb3ZlUm93Ij09PUhuP0dyLnJlZnJlc2goKTpHci5zaGlmdFJvd3MoTXIsLVpyKSxzcis9WnJ9KX07QXJyYXkuaXNBcnJheShOdCk/ZHIoYXIoTnQpKTpkcihbW050LEh0XV0pO2JyZWFrO2Nhc2UicmVtb3ZlX2NvbCI6Y29uc3QgVXI9Wm49PntsZXQgc3I9MDtZ'@;
put 'bihabixOcj0+e2xldFtNcixacl09TnI7Y29uc3QgYWE9VWMoTXIpP2YuY291bnRDb2xzKCktMTpNYXRoLm1heChNci1zciwwKTtsZXQgQmE9Zi50b1BoeXNpY2FsQ29sdW1uKGFhKTtpZihOdW1iZXIuaXNJbnRlZ2VyKE1yKSYmKE1yPU1hdGgubWF4KE1yLXNyLDApKSwhTS5yZW1vdmVDb2wo'@;
put 'TXIsWnIsSG4pKXJldHVybjtpZihHci5pc1NlbGVjdGVkKCkpe2NvbnN0e2NvbDpNb309Zi5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLmhpZ2hsaWdodDtNbz49TXImJk1vPD1Ncitaci0xJiZyZS5jbG9zZUVkaXRvcighMCl9MD09PWYuY291bnRDb2xzKCk/R3IuZGVzZWxlY3QoKToiQ29udGV4'@;
put 'dE1lbnUucmVtb3ZlQ29sdW1uIj09PUhuP0dyLnJlZnJlc2goKTpHci5zaGlmdENvbHVtbnMoTXIsLVpyKTtjb25zdCBwcz1kdC5maXhlZENvbHVtbnNTdGFydDtwcz49YWErMSYmKGR0LmZpeGVkQ29sdW1uc1N0YXJ0LT1NYXRoLm1pbihacixwcy1hYSkpLEFycmF5LmlzQXJyYXkoZHQuY29s'@;
put 'SGVhZGVycykmJih0eXBlb2YgQmE+InUiJiYoQmE9LTEpLGR0LmNvbEhlYWRlcnMuc3BsaWNlKEJhLFpyKSksc3IrPVpyfSl9O0FycmF5LmlzQXJyYXkoTnQpP1VyKGFyKE50KSk6VXIoW1tOdCxIdF1dKTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcihgVGhlcmUgaXMgbm8gc3VjaCBh'@;
put 'Y3Rpb24gIiR7dnR9ImApfXRyfHxaLmFkanVzdFJvd3NBbmRDb2xzKCksZi52aWV3LnJlbmRlcigpLGYudmlldy5hZGp1c3RFbGVtZW50c1NpemUoKX0sYWRqdXN0Um93c0FuZENvbHMoKXtjb25zdCB2dD1kdC5taW5Sb3dzLE50PWR0Lm1pblNwYXJlUm93cyxIdD1kdC5taW5Db2xzLEhuPWR0'@;
put 'Lm1pblNwYXJlQ29scztpZih2dCl7Y29uc3QgdHI9Zi5jb3VudFJvd3MoKTt0cjx2dCYmTS5jcmVhdGVSb3codHIsdnQtdHIse3NvdXJjZToiYXV0byJ9KX1pZihOdCl7Y29uc3QgdHI9Zi5jb3VudEVtcHR5Um93cyghMCk7aWYodHI8TnQpe2NvbnN0IEhyPU1hdGgubWluKE50LXRyLGR0Lm1h'@;
put 'eFJvd3MtZi5jb3VudFNvdXJjZVJvd3MoKSk7TS5jcmVhdGVSb3coZi5jb3VudFJvd3MoKSxIcix7c291cmNlOiJhdXRvIn0pfX17bGV0IHRyOyhIdHx8SG4pJiYodHI9Zi5jb3VudEVtcHR5Q29scyghMCkpO2xldCBhcj1mLmNvdW50Q29scygpO2lmKEh0JiYhZHQuY29sdW1ucyYmYXI8SHQp'@;
put 'e2NvbnN0IEhyPUh0LWFyO3RyKz1IcixNLmNyZWF0ZUNvbChhcixIcix7c291cmNlOiJhdXRvIn0pfWlmKEhuJiYhZHQuY29sdW1ucyYmImFycmF5Ij09PWYuZGF0YVR5cGUmJnRyPEhuKXthcj1mLmNvdW50Q29scygpO2NvbnN0IHFyPU1hdGgubWluKEhuLXRyLGR0Lm1heENvbHMtYXIpO00u'@;
put 'Y3JlYXRlQ29sKGFyLHFyLHtzb3VyY2U6ImF1dG8ifSl9fX0scG9wdWxhdGVGcm9tQXJyYXkodnQsTnQsSHQsSG4sdHIpe2xldCBhcixIcixxcixvbjtjb25zdCB5bj1bXSxwbj17fSxwcj1bXSwkbj12dC5yb3csZHI9dnQuY29sO2lmKEhyPU50Lmxlbmd0aCwwPT09SHIpcmV0dXJuITE7bGV0'@;
put 'IFVyPTAsWm49MDtzd2l0Y2gocW8oSHQpJiYoVXI9SHQuY29sLWRyKzEsWm49SHQucm93LSRuKzEpLHRyKXtjYXNlInNoaWZ0X2Rvd24iOmNvbnN0IHNyPWhFKE50KSxOcj1zci5sZW5ndGgsTXI9TWF0aC5tYXgoTnIsVXIpLFpyPWYuZ2V0RGF0YSgpLnNsaWNlKCRuKSxhYT1oRShacikuc2xp'@;
put 'Y2UoZHIsZHIrTXIpO2Zvcihxcj0wO3FyPE1yO3FyKz0xKWlmKHFyPE5yKXtmb3IoYXI9MCxIcj1zcltxcl0ubGVuZ3RoO2FyPFpuLUhyO2FyKz0xKXNyW3FyXS5wdXNoKHNyW3FyXVthciVIcl0pO3ByLnB1c2goc3JbcXJdLmNvbmNhdChxcjxhYS5sZW5ndGg/YWFbcXJdOm5ldyBBcnJheSha'@;
put 'ci5sZW5ndGgpLmZpbGwobnVsbCkpKX1lbHNlIHByLnB1c2goc3JbcXIlTnJdLmNvbmNhdChhYVtxcl0pKTtmLnBvcHVsYXRlRnJvbUFycmF5KCRuLGRyLGhFKHByKSk7YnJlYWs7Y2FzZSJzaGlmdF9yaWdodCI6Y29uc3QgQmE9TnQubGVuZ3RoLElvPU1hdGgubWF4KEJhLFpuKSxabz1mLmdl'@;
put 'dERhdGEoKS5zbGljZSgkbikubWFwKFVzPT5Vcy5zbGljZShkcikpO2Zvcihhcj0wO2FyPElvO2FyKz0xKWlmKGFyPEJhKXtmb3IocXI9MCxvbj1OdFthcl0ubGVuZ3RoO3FyPFVyLW9uO3FyKz0xKU50W2FyXS5wdXNoKE50W2FyXVtxciVvbl0pO2lmKGFyPFpvLmxlbmd0aClmb3IobGV0IFVz'@;
put 'PTA7VXM8Wm9bYXJdLmxlbmd0aDtVcys9MSlOdFthcl0ucHVzaChab1thcl1bVXNdKTtlbHNlIE50W2FyXS5wdXNoKC4uLm5ldyBBcnJheShab1swXS5sZW5ndGgpLmZpbGwobnVsbCkpfWVsc2UgTnQucHVzaChOdFthciVIcl0uc2xpY2UoMCxJbykuY29uY2F0KFpvW2FyXSkpO2YucG9wdWxh'@;
put 'dGVGcm9tQXJyYXkoJG4sZHIsTnQpO2JyZWFrO2RlZmF1bHQ6cG4ucm93PXZ0LnJvdyxwbi5jb2w9dnQuY29sO2xldCBuYyxwcz0wLE1vPTAsaHM9ITA7Y29uc3QgUW89ZnVuY3Rpb24oSmMpe2xldCBxcz1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVu'@;
put 'dHNbMV06bnVsbDtjb25zdCBCbD1OdFtKYyVOdC5sZW5ndGhdO3JldHVybiBudWxsIT09cXM/QmxbcXMlQmwubGVuZ3RoXTpCbH0sTTM9TnQubGVuZ3RoLGFkPUh0P0h0LnJvdy12dC5yb3crMTowO2ZvcihIcj1IdD9hZDpNYXRoLm1heChNMyxhZCksYXI9MDthcjxIciYmIShIdCYmcG4ucm93'@;
put 'Pkh0LnJvdyYmYWQ+TTN8fCFkdC5hbGxvd0luc2VydFJvdyYmcG4ucm93PmYuY291bnRSb3dzKCktMXx8cG4ucm93Pj1kdC5tYXhSb3dzKTthcisrKXtjb25zdCBVcz1hci1wcyxKYz1RbyhVcykubGVuZ3RoLHFzPUh0P0h0LmNvbC12dC5jb2wrMTowO2lmKG9uPUh0P3FzOk1hdGgubWF4KEpj'@;
put 'LHFzKSxwbi5jb2w9dnQuY29sLG5jPWYuZ2V0Q2VsbE1ldGEocG4ucm93LHBuLmNvbCksIkNvcHlQYXN0ZS5wYXN0ZSIhPT1IbiYmIkF1dG9maWxsLmZpbGwiIT09SG58fCFuYy5za2lwUm93T25QYXN0ZSl7Zm9yKE1vPTAscXI9MDtxcjxvbiYmIShIdCYmcG4uY29sPkh0LmNvbCYmcXM+SmN8'@;
put 'fCFkdC5hbGxvd0luc2VydENvbHVtbiYmcG4uY29sPmYuY291bnRDb2xzKCktMXx8cG4uY29sPj1kdC5tYXhDb2xzKTtxcisrKXtpZihuYz1mLmdldENlbGxNZXRhKHBuLnJvdyxwbi5jb2wpLCgiQ29weVBhc3RlLnBhc3RlIj09PUhufHwiQXV0b2ZpbGwuZmlsbCI9PT1IbikmJm5jLnNraXBD'@;
put 'b2x1bW5PblBhc3RlKXtNbys9MSxwbi5jb2wrPTEsb24rPTE7Y29udGludWV9aWYobmMucmVhZE9ubHkmJiJVbmRvUmVkby51bmRvIiE9PUhuKXtwbi5jb2wrPTE7Y29udGludWV9bGV0IGVzPVFvKFVzLHFyLU1vKSxFMT1mLmdldERhdGFBdENlbGwocG4ucm93LHBuLmNvbCk7aWYobnVsbCE9'@;
put 'PWVzJiYib2JqZWN0Ij09dHlwZW9mIGVzKWlmKEFycmF5LmlzQXJyYXkoZXMpJiZudWxsPT09RTEmJihFMT1bXSksbnVsbD09PUUxfHwib2JqZWN0IiE9dHlwZW9mIEUxKWhzPSExO2Vsc2V7Y29uc3QgeDM9c18oQXJyYXkuaXNBcnJheShFMSk/RTE6RTFbMF18fEUxKSxRZz1zXyhBcnJheS5p'@;
put 'c0FycmF5KGVzKT9lczplc1swXXx8ZXMpO05PKHgzLFFnKXx8QXJyYXkuaXNBcnJheSh4MykmJkFycmF5LmlzQXJyYXkoUWcpP2VzPWcxKGVzKTpocz0hMX1lbHNlIG51bGwhPT1FMSYmIm9iamVjdCI9PXR5cGVvZiBFMSYmKGhzPSExKTtocyYmeW4ucHVzaChbcG4ucm93LHBuLmNvbCxlc10p'@;
put 'LGhzPSEwLHBuLmNvbCs9MX1wbi5yb3crPTF9ZWxzZSBwcys9MSxwbi5yb3crPTEsSHIrPTF9Zi5zZXREYXRhQXRDZWxsKHluLG51bGwsbnVsbCxIbnx8InBvcHVsYXRlRnJvbUFycmF5Iil9fX0sdGhpcy5pbml0PWZ1bmN0aW9uKCl7RC5zZXREYXRhKGR0LmRhdGEpLGYucnVuSG9va3MoImJl'@;
put 'Zm9yZUluaXQiKSwoQXAoKXx8UCQoKSkmJlRpKGYucm9vdEVsZW1lbnQsIm1vYmlsZSIpLHRoaXMudXBkYXRlU2V0dGluZ3MobCwhMCksdGhpcy52aWV3PW5ldyB4dHQodGhpcyk7Y29uc3QgdnQ9ZHQudGhlbWVOYW1lfHxNcGUoZi5yb290RWxlbWVudCk7Zi51c2VUaGVtZSh2dCksZi52aWV3'@;
put 'LmFkZENsYXNzTmFtZVRvTGljZW5zZUVsZW1lbnQoZi5nZXRDdXJyZW50VGhlbWVOYW1lKCkpLHJlPVlYZS5nZXRJbnN0YW5jZShmLGR0LEdyKSxiZT1mdW5jdGlvbiBqcnQoYyl7Y29uc3R7c2VsZWN0aW9uOmx9PWM7bGV0IGE9ITEsZD0hMTtyZXR1cm57cmVzdW1lKCl7ZD0hMX0sc3VzcGVu'@;
put 'ZCgpe2Q9ITB9LHNraXBOZXh0U2Nyb2xsQ3ljbGUoKXthPSEwfSxzY3JvbGxUbyhoKXt2YXIgZjtpZihhfHxkKXJldHVybiB2b2lkKGE9ITEpO2xldCB2O2wuaXNGb2N1c1NlbGVjdGlvbkNoYW5nZWQoKT92PWZ1bmN0aW9uIEZydChjKXtyZXR1cm4gbD0+e2Muc2Nyb2xsVmlld3BvcnRUbyhs'@;
put 'LnRvT2JqZWN0KCksKCk9Pntjb25zdHtyb3c6YSxjb2w6ZH09Yy5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLmhpZ2hsaWdodDtBXyhjLmdldENlbGwoYSxkLCEwKSl9KX19KGMpOmwuaXNTZWxlY3RlZEJ5Q29ybmVyKCk/dj0oKT0+e306bC5pc1NlbGVjdGVkQnlSb3dIZWFkZXIoKT92PWZ1bmN0'@;
put 'aW9uIFZydChjKXtyZXR1cm4gbD0+e2NvbnN0IGE9RlAoYykuZ2V0Q29tcHV0ZWRSb3dUYXJnZXQobCk7Yy5zY3JvbGxWaWV3cG9ydFRvKHtyb3c6YX0sKCk9Pntjb25zdCBkPSEhYy5nZXRTZXR0aW5ncygpLnJvd0hlYWRlcnM7QV8oYy5nZXRDZWxsKGEsZD8tMTowLCEwKSl9KX19KGMpOmwu'@;
put 'aXNTZWxlY3RlZEJ5Q29sdW1uSGVhZGVyKCk/dj1mdW5jdGlvbiBPcnQoYyl7cmV0dXJuIGw9Pntjb25zdCBhPUZQKGMpLmdldENvbXB1dGVkQ29sdW1uVGFyZ2V0KGwpO2Muc2Nyb2xsVmlld3BvcnRUbyh7Y29sOmF9LCgpPT57Y29uc3QgZD0hIWMuZ2V0U2V0dGluZ3MoKS5jb2xIZWFkZXJz'@;
put 'O0FfKGMuZ2V0Q2VsbChkPy0xOjAsYSwhMCkpfSl9fShjKToxPT09bC5nZXRTZWxlY3RlZFJhbmdlKCkuc2l6ZSgpJiZsLmlzTXVsdGlwbGUoKT92PWZ1bmN0aW9uIEhydChjKXtyZXR1cm4gbD0+e2NvbnN0IGE9RlAoYyksZD17cm93OmEuZ2V0Q29tcHV0ZWRSb3dUYXJnZXQobCksY29sOmEu'@;
put 'Z2V0Q29tcHV0ZWRDb2x1bW5UYXJnZXQobCl9O2Muc2Nyb2xsVmlld3BvcnRUbyhkLCgpPT57Y29uc3R7cm93OmgsY29sOmZ9PWQ7QV8oYy5nZXRDZWxsKGgsZiwhMCkpfSl9fShjKToxIT09bC5nZXRTZWxlY3RlZFJhbmdlKCkuc2l6ZSgpfHxsLmlzTXVsdGlwbGUoKT9sLmdldFNlbGVjdGVk'@;
put 'UmFuZ2UoKS5zaXplKCk+MSYmKHY9ZnVuY3Rpb24gTnJ0KGMpe3JldHVybiBsPT57Y29uc3QgYT1GUChjKSxkPXtyb3c6YS5nZXRDb21wdXRlZFJvd1RhcmdldChsKSxjb2w6YS5nZXRDb21wdXRlZENvbHVtblRhcmdldChsKX07Yy5zY3JvbGxWaWV3cG9ydFRvKGQsKCk9Pntjb25zdHtyb3c6'@;
put 'aCxjb2w6Zn09ZDtBXyhjLmdldENlbGwoaCxmLCEwKSl9KX19KGMpKTp2PWZ1bmN0aW9uIEJydChjKXtyZXR1cm4gbD0+e2NvbnN0IGE9Yy5zZWxlY3Rpb24uZ2V0U2VsZWN0aW9uU291cmNlKCkse3JvdzpkLGNvbDpofT1sLGY9KCk9PntBXyhjLmdldENlbGwoZCxoLCEwKSl9O2lmKGQ8MCYm'@;
put 'aD49MCljLnNjcm9sbFZpZXdwb3J0VG8oe2NvbDpofSxmKTtlbHNlIGlmKGg8MCYmZD49MCljLnNjcm9sbFZpZXdwb3J0VG8oe3JvdzpkfSxmKTtlbHNle2lmKCJtb3VzZSI9PT1hJiYoaD09PWMudmlldy5nZXRMYXN0UGFydGlhbGx5VmlzaWJsZUNvbHVtbigpfHxkPT09Yy52aWV3LmdldExh'@;
put 'c3RQYXJ0aWFsbHlWaXNpYmxlUm93KCkpKXJldHVybjtjLnNjcm9sbFZpZXdwb3J0VG8oe3JvdzpkLGNvbDpofSxmKX19fShjKSxudWxsPT09KGY9dil8fHZvaWQgMD09PWZ8fGYoaCl9fX0oZiksY2U9bmV3ICRYZShmKSxjUCh0aGlzKSYmZnVuY3Rpb24gVXJ0KGMpe2NvbnN0IGw9ZnVuY3Rp'@;
put 'b24gWnJ0KGMpe3JldHVybiBsPT57aWYoIWwpcmV0dXJuIG51bGw7Y29uc3QgYT1FWChjKSxkPVRYKGMpO3JldHVybiBsLmNvbDxhLmNvbCYmKGwuY29sPWEuY29sKSxsLmNvbD5kLmNvbCYmKGwuY29sPWQuY29sKSxsLnJvdzxhLnJvdyYmKGwucm93PWEucm93KSxsLnJvdz5kLnJvdyYmKGwu'@;
put 'cm93PWQucm93KSxsfX0oYyk7bGV0IGE7Y29uc3R7YWN0aXZhdGU6ZCxkZWFjdGl2YXRlOmh9PWZ1bmN0aW9uIHpydChjKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06e307Y29uc3QgYT1jLnJvb3RFbGVtZW50LGQ9dnBlKGMp'@;
put 'LGg9dnBlKGMpO3JldHVybiBkLmFkZEV2ZW50TGlzdGVuZXIoImZvY3VzIiwoKT0+bD8ub25Gb2N1c0Zyb21Ub3AoKSksaC5hZGRFdmVudExpc3RlbmVyKCJmb2N1cyIsKCk9Pmw/Lm9uRm9jdXNGcm9tQm90dG9tKCkpLGEuZmlyc3RDaGlsZC5iZWZvcmUoZCksYS5sYXN0Q2hpbGQuYWZ0ZXIo'@;
put 'aCkse2FjdGl2YXRlKCl7Yy5fcmVnaXN0ZXJUaW1lb3V0KCgpPT57ZC50YWJJbmRleD0wLGgudGFiSW5kZXg9MH0sMTApfSxkZWFjdGl2YXRlKCl7Yy5fcmVnaXN0ZXJUaW1lb3V0KCgpPT57ZC50YWJJbmRleD0tMSxoLnRhYkluZGV4PS0xfSwxMCl9fX0oYyx7b25Gb2N1c0Zyb21Ub3AoKXt2'@;
put 'YXIgY2U7Y29uc3QgYmU9bnVsbCE9PShjZT1sKGEpKSYmdm9pZCAwIT09Y2U/Y2U6RVgoYyk7YmUmJihjLnJ1bkhvb2tzKCJtb2RpZnlGb2N1c09uVGFiTmF2aWdhdGlvbiIsImZyb21fYWJvdmUiLGJlKSxjLnNlbGVjdENlbGwoYmUucm93LGJlLmNvbCkpLGMubGlzdGVuKCl9LG9uRm9jdXNG'@;
put 'cm9tQm90dG9tKCl7dmFyIGNlO2NvbnN0IGJlPW51bGwhPT0oY2U9bChhKSkmJnZvaWQgMCE9PWNlP2NlOlRYKGMpO2JlJiYoYy5ydW5Ib29rcygibW9kaWZ5Rm9jdXNPblRhYk5hdmlnYXRpb24iLCJmcm9tX2JlbG93IixiZSksYy5zZWxlY3RDZWxsKGJlLnJvdyxiZS5jb2wpKSxjLmxpc3Rl'@;
put 'bigpfX0pLGY9e3dyYXBwZWQ6ITEsZmxpcHBlZDohMX07bGV0IHY9ITAsTT0hMSxEPSExO2MuYWRkSG9vaygiYWZ0ZXJMaXN0ZW4iLCgpPT5oKCkpLGMuYWRkSG9vaygiYWZ0ZXJVbmxpc3RlbiIsKCk9PmQoKSksYy5hZGRIb29rKCJhZnRlclNlbGVjdGlvbiIsKGNlLGJlLEVlLEJlLHFlKT0+'@;
put 'e3ZhciBydDtNJiYoZi53cmFwcGVkJiZmLmZsaXBwZWR8fEQpJiYoRD0hMSxxZS52YWx1ZT0hMCksdiYmKGE9bnVsbD09PShydD1jLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCkpfHx2b2lkIDA9PT1ydD92b2lkIDA6cnQuaGlnaGxpZ2h0KX0pLGMuYWRkSG9vaygiYmVmb3JlUm93V3JhcCIsKGNl'@;
put 'LGJlLEVlKT0+e2Yud3JhcHBlZD0hMCxmLmZsaXBwZWQ9RWV9KTtjb25zdCByZT17a2V5czpbWyJUYWIiXSxbIlNoaWZ0IiwiVGFiIl1dLHByZXZlbnREZWZhdWx0OiExLHN0b3BQcm9wYWdhdGlvbjohMSxyZWxhdGl2ZVRvR3JvdXA6bXBlLGdyb3VwOiJmb2N1c0NhdGNoZXIifTtjLmdldFNo'@;
put 'b3J0Y3V0TWFuYWdlcigpLmdldENvbnRleHQoImdyaWQiKS5hZGRTaG9ydGN1dHMoW3suLi5yZSxjYWxsYmFjazooKT0+e2NvbnN0e3RhYk5hdmlnYXRpb246Y2V9PWMuZ2V0U2V0dGluZ3MoKTtNPSEwLGMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSYmIWNlJiYodj0hMSksY2V8fChEPSEwKX0s'@;
put 'cG9zaXRpb246ImJlZm9yZSJ9LHsuLi5yZSxjYWxsYmFjazpjZT0+e2NvbnN0e3RhYk5hdmlnYXRpb246YmUsYXV0b1dyYXBSb3c6RWV9PWMuZ2V0U2V0dGluZ3MoKTtpZihNPSExLHY9ITAsIWJlfHwhYy5zZWxlY3Rpb24uaXNTZWxlY3RlZCgpfHxFZSYmZi53cmFwcGVkJiZmLmZsaXBwZWR8'@;
put 'fCFFZSYmZi53cmFwcGVkKXJldHVybiBFZSYmZi53cmFwcGVkJiZmLmZsaXBwZWQmJihhPWNlLnNoaWZ0S2V5P0VYKGMpOlRYKGMpKSxmdW5jdGlvbiBaKCl7Zi53cmFwcGVkPSExLGYuZmxpcHBlZD0hMSxjLmRlc2VsZWN0Q2VsbCgpLGMudW5saXN0ZW4oKX0oKSwhMTtjZS5wcmV2ZW50RGVm'@;
put 'YXVsdCgpfSxwb3NpdGlvbjoiYWZ0ZXIifV0pfShmKSxmLnJ1bkhvb2tzKCJpbml0IiksdGhpcy5yZW5kZXIoKSxFZSYmbnVsbD09PWYucm9vdEVsZW1lbnQub2Zmc2V0UGFyZW50JiZVMmUoZi5yb290RWxlbWVudCwoKT0+e2Yudmlldy5fd3Qud3RPdmVybGF5cy51cGRhdGVMYXN0U3ByZWFk'@;
put 'ZXJTaXplKCksZi5yZW5kZXIoKSxmLnZpZXcuYWRqdXN0RWxlbWVudHNTaXplKCl9KSwib2JqZWN0Ij09dHlwZW9mIEVlJiYoZi5ydW5Ib29rcygiYWZ0ZXJDaGFuZ2UiLEVlWzBdLEVlWzFdKSxFZT0hMSksZi5ydW5Ib29rcygiYWZ0ZXJJbml0Iil9LHRoaXMuX2NyZWF0ZUNlbGxDb29yZHM9'@;
put 'ZnVuY3Rpb24odnQsTnQpe3JldHVybiBmLnZpZXcuX3d0LmNyZWF0ZUNlbGxDb29yZHModnQsTnQpfSx0aGlzLl9jcmVhdGVDZWxsUmFuZ2U9ZnVuY3Rpb24odnQsTnQsSHQpe3JldHVybiBmLnZpZXcuX3d0LmNyZWF0ZUNlbGxSYW5nZSh2dCxOdCxIdCl9LHRoaXMudmFsaWRhdGVDZWxsPWZ1'@;
put 'bmN0aW9uKHZ0LE50LEh0LEhuKXtsZXQgdHI9Zi5nZXRDZWxsVmFsaWRhdG9yKE50KTtmdW5jdGlvbiBhcihIcil7aWYoYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0mJiFhcmd1bWVudHNbMV18fCEwPT09TnQuaGlkZGVuKXJldHVybiB2b2lkIEh0KEhyKTtjb25z'@;
put 'dCBvbj1OdC52aXN1YWxDb2wseW49TnQudmlzdWFsUm93LHBuPWYuZ2V0Q2VsbCh5bixvbiwhMCk7aWYocG4mJiJUSCIhPT1wbi5ub2RlTmFtZSl7Y29uc3QgcHI9Zi5yb3dJbmRleE1hcHBlci5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KHluKSwkbj1mLmNvbHVtbkluZGV4TWFwcGVy'@;
put 'LmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgob24pO2Yudmlldy5fd3QuZ2V0U2V0dGluZygiY2VsbFJlbmRlcmVyIixwciwkbixwbil9SHQoSHIpfWIyZSh0cikmJih0cj1mdW5jdGlvbihIcil7cmV0dXJuIGZ1bmN0aW9uKHFyLG9uKXtvbihIci50ZXN0KHFyKSl9fSh0cikpLG1sKHRy'@;
put 'KT8odnQ9Zi5ydW5Ib29rcygiYmVmb3JlVmFsaWRhdGUiLHZ0LE50LnZpc3VhbFJvdyxOdC5wcm9wLEhuKSxmLl9yZWdpc3RlckltbWVkaWF0ZSgoKT0+e3RyLmNhbGwoTnQsdnQsSHI9PntmJiYoSHI9Zi5ydW5Ib29rcygiYWZ0ZXJWYWxpZGF0ZSIsSHIsdnQsTnQudmlzdWFsUm93LE50LnBy'@;
put 'b3AsSG4pLE50LnZhbGlkPUhyLGFyKEhyKSxmLnJ1bkhvb2tzKCJwb3N0QWZ0ZXJWYWxpZGF0ZSIsSHIsdnQsTnQudmlzdWFsUm93LE50LnByb3AsSG4pKX0pfSkpOmYuX3JlZ2lzdGVySW1tZWRpYXRlKCgpPT57TnQudmFsaWQ9ITAsYXIoTnQudmFsaWQsITEpfSl9LHRoaXMuc2V0RGF0YUF0'@;
put 'Q2VsbD1mdW5jdGlvbih2dCxOdCxIdCxIbil7Y29uc3QgdHI9SXIodnQsTnQsSHQpLGFyPVtdO2xldCBxcixvbix5bixIcj1Ibjtmb3IocXI9MCxvbj10ci5sZW5ndGg7cXI8b247cXIrKyl7aWYoIm9iamVjdCIhPXR5cGVvZiB0cltxcl0pdGhyb3cgbmV3IEVycm9yKCJNZXRob2QgYHNldERh'@;
put 'dGFBdENlbGxgIGFjY2VwdHMgcm93IG51bWJlciBvciBjaGFuZ2VzIGFycmF5IG9mIGFycmF5cyBhcyBpdHMgZmlyc3QgcGFyYW1ldGVyIik7aWYoIm51bWJlciIhPXR5cGVvZiB0cltxcl1bMV0pdGhyb3cgbmV3IEVycm9yKCJNZXRob2QgYHNldERhdGFBdENlbGxgIGFjY2VwdHMgcm93IGFu'@;
put 'ZCBjb2x1bW4gbnVtYmVyIGFzIGl0cyBwYXJhbWV0ZXJzLiBJZiB5b3Ugd2FudCB0byB1c2Ugb2JqZWN0IHByb3BlcnR5IG5hbWUsIHVzZSBtZXRob2QgYHNldERhdGFBdFJvd1Byb3BgIik7eW49dHJbcXJdWzFdPj10aGlzLmNvdW50Q29scygpP3RyW3FyXVsxXTpNLmNvbFRvUHJvcCh0cltx'@;
put 'cl1bMV0pLGFyLnB1c2goW3RyW3FyXVswXSx5bixELmdldEF0Q2VsbCh0aGlzLnRvUGh5c2ljYWxSb3codHJbcXJdWzBdKSx0cltxcl1bMV0pLHRyW3FyXVsyXV0pfSFIciYmIm9iamVjdCI9PXR5cGVvZiB2dCYmKEhyPU50KTtjb25zdCBwbj0kcihhcixIcik7Zi5ydW5Ib29rcygiYWZ0ZXJT'@;
put 'ZXREYXRhQXRDZWxsIixwbixIciksenIocG4sSHIsKCk9PntKbihwbixIcil9KX0sdGhpcy5zZXREYXRhQXRSb3dQcm9wPWZ1bmN0aW9uKHZ0LE50LEh0LEhuKXtjb25zdCB0cj1Jcih2dCxOdCxIdCksYXI9W107bGV0IHFyLG9uLEhyPUhuO2Zvcihxcj0wLG9uPXRyLmxlbmd0aDtxcjxvbjtx'@;
put 'cisrKWFyLnB1c2goW3RyW3FyXVswXSx0cltxcl1bMV0sRC5nZXRBdENlbGwodGhpcy50b1BoeXNpY2FsUm93KHRyW3FyXVswXSksdHJbcXJdWzFdKSx0cltxcl1bMl1dKTshSHImJiJvYmplY3QiPT10eXBlb2YgdnQmJihIcj1OdCk7Y29uc3QgeW49JHIoYXIsSG4pO2YucnVuSG9va3MoImFm'@;
put 'dGVyU2V0RGF0YUF0Um93UHJvcCIseW4sSHIpLHpyKHluLEhyLCgpPT57Sm4oeW4sSHIpfSl9LHRoaXMubGlzdGVuPWZ1bmN0aW9uKCl7ZiYmIWYuaXNMaXN0ZW5pbmcoKSYmKERYLmZvckVhY2godnQ9PntmIT09dnQmJnZ0LnVubGlzdGVuKCl9KSxrWD1mLmd1aWQsZi5ydW5Ib29rcygiYWZ0'@;
put 'ZXJMaXN0ZW4iKSl9LHRoaXMudW5saXN0ZW49ZnVuY3Rpb24oKXt0aGlzLmlzTGlzdGVuaW5nKCkmJihrWD1udWxsLGYucnVuSG9va3MoImFmdGVyVW5saXN0ZW4iKSl9LHRoaXMuaXNMaXN0ZW5pbmc9ZnVuY3Rpb24oKXtyZXR1cm4ga1g9PT1mLmd1aWR9LHRoaXMuZGVzdHJveUVkaXRvcj1m'@;
put 'dW5jdGlvbigpe2xldCBOdD0hKGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdKXx8YXJndW1lbnRzWzFdO3JlLmNsb3NlRWRpdG9yKGFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdJiZhcmd1bWVudHNbMF0pLGYudmlldy5yZW5kZXIoKSxO'@;
put 'dCYmR3IuaXNTZWxlY3RlZCgpJiZyZS5wcmVwYXJlRWRpdG9yKCl9LHRoaXMucG9wdWxhdGVGcm9tQXJyYXk9ZnVuY3Rpb24odnQsTnQsSHQsSG4sdHIsYXIsSHIpe2lmKCJvYmplY3QiIT10eXBlb2YgSHR8fCJvYmplY3QiIT10eXBlb2YgSHRbMF0pdGhyb3cgbmV3IEVycm9yKCJwb3B1bGF0'@;
put 'ZUZyb21BcnJheSBwYXJhbWV0ZXIgYGlucHV0YCBtdXN0IGJlIGFuIGFycmF5IG9mIGFycmF5cyIpO2NvbnN0IHFyPSJudW1iZXIiPT10eXBlb2YgSG4/Zi5fY3JlYXRlQ2VsbENvb3JkcyhIbix0cik6bnVsbDtyZXR1cm4gWi5wb3B1bGF0ZUZyb21BcnJheShmLl9jcmVhdGVDZWxsQ29vcmRz'@;
put 'KHZ0LE50KSxIdCxxcixhcixIcil9LHRoaXMuc3BsaWNlQ29sPWZ1bmN0aW9uKHZ0LE50LEh0KXtmb3IodmFyIEhuPWFyZ3VtZW50cy5sZW5ndGgsdHI9bmV3IEFycmF5KEhuPjM/SG4tMzowKSxhcj0zO2FyPEhuO2FyKyspdHJbYXItM109YXJndW1lbnRzW2FyXTtyZXR1cm4gTS5zcGxpY2VD'@;
put 'b2wodnQsTnQsSHQsLi4udHIpfSx0aGlzLnNwbGljZVJvdz1mdW5jdGlvbih2dCxOdCxIdCl7Zm9yKHZhciBIbj1hcmd1bWVudHMubGVuZ3RoLHRyPW5ldyBBcnJheShIbj4zP0huLTM6MCksYXI9MzthcjxIbjthcisrKXRyW2FyLTNdPWFyZ3VtZW50c1thcl07cmV0dXJuIE0uc3BsaWNlUm93'@;
put 'KHZ0LE50LEh0LC4uLnRyKX0sdGhpcy5nZXRTZWxlY3RlZD1mdW5jdGlvbigpe2lmKEdyLmlzU2VsZWN0ZWQoKSlyZXR1cm4geXMoR3IuZ2V0U2VsZWN0ZWRSYW5nZSgpLHZ0PT57bGV0e2Zyb206TnQsdG86SHR9PXZ0O3JldHVybltOdC5yb3csTnQuY29sLEh0LnJvdyxIdC5jb2xdfSl9LHRo'@;
put 'aXMuZ2V0U2VsZWN0ZWRMYXN0PWZ1bmN0aW9uKCl7Y29uc3QgdnQ9dGhpcy5nZXRTZWxlY3RlZCgpO2xldCBOdDtyZXR1cm4gdnQmJnZ0Lmxlbmd0aD4wJiYoTnQ9dnRbdnQubGVuZ3RoLTFdKSxOdH0sdGhpcy5nZXRTZWxlY3RlZFJhbmdlPWZ1bmN0aW9uKCl7aWYoR3IuaXNTZWxlY3RlZCgp'@;
put 'KXJldHVybiBBcnJheS5mcm9tKEdyLmdldFNlbGVjdGVkUmFuZ2UoKSl9LHRoaXMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3Q9ZnVuY3Rpb24oKXtjb25zdCB2dD10aGlzLmdldFNlbGVjdGVkUmFuZ2UoKTtsZXQgTnQ7cmV0dXJuIHZ0JiZ2dC5sZW5ndGg+MCYmKE50PXZ0W3Z0Lmxlbmd0aC0xXSks'@;
put 'TnR9LHRoaXMuZW1wdHlTZWxlY3RlZENlbGxzPWZ1bmN0aW9uKHZ0KXtpZighR3IuaXNTZWxlY3RlZCgpfHwwPT09dGhpcy5jb3VudFJvd3MoKXx8MD09PXRoaXMuY291bnRDb2xzKCkpcmV0dXJuO2NvbnN0IE50PVtdO1luKEdyLmdldFNlbGVjdGVkUmFuZ2UoKSxIdD0+e2lmKEh0LmlzU2lu'@;
put 'Z2xlSGVhZGVyKCkpcmV0dXJuO2NvbnN0IEhuPUh0LmdldFRvcFN0YXJ0Q29ybmVyKCksdHI9SHQuZ2V0Qm90dG9tRW5kQ29ybmVyKCk7R2EoSG4ucm93LHRyLnJvdyxhcj0+e0dhKEhuLmNvbCx0ci5jb2wsSHI9Pnt0aGlzLmdldENlbGxNZXRhKGFyLEhyKS5yZWFkT25seXx8TnQucHVzaChb'@;
put 'YXIsSHIsbnVsbF0pfSl9KX0pLE50Lmxlbmd0aD4wJiZ0aGlzLnNldERhdGFBdENlbGwoTnQsdnQpfSx0aGlzLmlzUmVuZGVyU3VzcGVuZGVkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVuZGVyU3VzcGVuZGVkQ291bnRlcj4wfSx0aGlzLnN1c3BlbmRSZW5kZXI9ZnVuY3Rpb24oKXt0aGlz'@;
put 'LnJlbmRlclN1c3BlbmRlZENvdW50ZXIrPTF9LHRoaXMucmVzdW1lUmVuZGVyPWZ1bmN0aW9uKCl7Y29uc3QgdnQ9dGhpcy5yZW5kZXJTdXNwZW5kZWRDb3VudGVyLTE7dGhpcy5yZW5kZXJTdXNwZW5kZWRDb3VudGVyPU1hdGgubWF4KHZ0LDApLCF0aGlzLmlzUmVuZGVyU3VzcGVuZGVkKCkm'@;
put 'JnZ0PT09dGhpcy5yZW5kZXJTdXNwZW5kZWRDb3VudGVyJiZmLnZpZXcucmVuZGVyKCl9LHRoaXMucmVuZGVyPWZ1bmN0aW9uKCl7dGhpcy52aWV3JiYodGhpcy5mb3JjZUZ1bGxSZW5kZXI9ITAsdGhpcy5pc1JlbmRlclN1c3BlbmRlZCgpfHxmLnZpZXcucmVuZGVyKCkpfSx0aGlzLmJhdGNo'@;
put 'UmVuZGVyPWZ1bmN0aW9uKHZ0KXt0aGlzLnN1c3BlbmRSZW5kZXIoKTtjb25zdCBOdD12dCgpO3JldHVybiB0aGlzLnJlc3VtZVJlbmRlcigpLE50fSx0aGlzLmlzRXhlY3V0aW9uU3VzcGVuZGVkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZXhlY3V0aW9uU3VzcGVuZGVkQ291bnRlcj4wfSx0'@;
put 'aGlzLnN1c3BlbmRFeGVjdXRpb249ZnVuY3Rpb24oKXt0aGlzLmV4ZWN1dGlvblN1c3BlbmRlZENvdW50ZXIrPTEsdGhpcy5jb2x1bW5JbmRleE1hcHBlci5zdXNwZW5kT3BlcmF0aW9ucygpLHRoaXMucm93SW5kZXhNYXBwZXIuc3VzcGVuZE9wZXJhdGlvbnMoKX0sdGhpcy5yZXN1bWVFeGVj'@;
put 'dXRpb249ZnVuY3Rpb24oKXtsZXQgdnQ9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0mJmFyZ3VtZW50c1swXTtjb25zdCBOdD10aGlzLmV4ZWN1dGlvblN1c3BlbmRlZENvdW50ZXItMTt0aGlzLmV4ZWN1dGlvblN1c3BlbmRlZENvdW50ZXI9TWF0aC5tYXgoTnQs'@;
put 'MCksKCF0aGlzLmlzRXhlY3V0aW9uU3VzcGVuZGVkKCkmJk50PT09dGhpcy5leGVjdXRpb25TdXNwZW5kZWRDb3VudGVyfHx2dCkmJih0aGlzLmNvbHVtbkluZGV4TWFwcGVyLnJlc3VtZU9wZXJhdGlvbnMoKSx0aGlzLnJvd0luZGV4TWFwcGVyLnJlc3VtZU9wZXJhdGlvbnMoKSl9LHRoaXMu'@;
put 'YmF0Y2hFeGVjdXRpb249ZnVuY3Rpb24odnQpe2xldCBOdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSYmYXJndW1lbnRzWzFdO3RoaXMuc3VzcGVuZEV4ZWN1dGlvbigpO2NvbnN0IEh0PXZ0KCk7cmV0dXJuIHRoaXMucmVzdW1lRXhlY3V0aW9uKE50KSxIdH0s'@;
put 'dGhpcy5iYXRjaD1mdW5jdGlvbih2dCl7dGhpcy5zdXNwZW5kUmVuZGVyKCksdGhpcy5zdXNwZW5kRXhlY3V0aW9uKCk7Y29uc3QgTnQ9dnQoKTtyZXR1cm4gdGhpcy5yZXN1bWVFeGVjdXRpb24oKSx0aGlzLnJlc3VtZVJlbmRlcigpLE50fSx0aGlzLnJlZnJlc2hEaW1lbnNpb25zPWZ1bmN0'@;
put 'aW9uKCl7aWYoIWYudmlldylyZXR1cm47Y29uc3QgdnQ9Zi52aWV3LHt3aWR0aDpOdCxoZWlnaHQ6SHR9PXZ0LmdldExhc3RTaXplKCkse3dpZHRoOkhuLGhlaWdodDp0cn09Zi5yb290RWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxhcj1IbiE9PU50fHx0ciE9PUh0OyExIT09Zi5y'@;
put 'dW5Ib29rcygiYmVmb3JlUmVmcmVzaERpbWVuc2lvbnMiLHt3aWR0aDpOdCxoZWlnaHQ6SHR9LHt3aWR0aDpIbixoZWlnaHQ6dHJ9LGFyKSYmKChhcnx8dnQuX3d0Lnd0T3ZlcmxheXMuc2Nyb2xsYWJsZUVsZW1lbnQ9PT1mLnJvb3RXaW5kb3cpJiYodnQuc2V0TGFzdFNpemUoSG4sdHIpLGYu'@;
put 'cmVuZGVyKCksdnQuYWRqdXN0RWxlbWVudHNTaXplKCkpLGYucnVuSG9va3MoImFmdGVyUmVmcmVzaERpbWVuc2lvbnMiLHt3aWR0aDpOdCxoZWlnaHQ6SHR9LHt3aWR0aDpIbixoZWlnaHQ6dHJ9LGFyKSl9LHRoaXMudXBkYXRlRGF0YT1mdW5jdGlvbih2dCxOdCl7Z3BlKHZ0LEh0PT57TT1I'@;
put 'dH0sSHQ9PntNPUh0LGYuY29sdW1uSW5kZXhNYXBwZXIuZml0VG9MZW5ndGgodGhpcy5nZXRJbml0aWFsQ29sdW1uQ291bnQoKSksZi5yb3dJbmRleE1hcHBlci5maXRUb0xlbmd0aCh0aGlzLmNvdW50U291cmNlUm93cygpKSxaLmFkanVzdFJvd3NBbmRDb2xzKCksR3IucmVmcmVzaCgpfSx7'@;
put 'aG90SW5zdGFuY2U6ZixkYXRhTWFwOk0sZGF0YVNvdXJjZTpELGludGVybmFsU291cmNlOiJ1cGRhdGVEYXRhIixzb3VyY2U6TnQsbWV0YU1hbmFnZXI6cHQsZmlyc3RSdW46RWV9KX0sdGhpcy5sb2FkRGF0YT1mdW5jdGlvbih2dCxOdCl7Z3BlKHZ0LEh0PT57TT1IdH0sKCk9PntwdC5jbGVh'@;
put 'ckNlbGxzQ2FjaGUoKSxmLmluaXRJbmRleE1hcHBlcnMoKSxaLmFkanVzdFJvd3NBbmRDb2xzKCksR3IucmVmcmVzaCgpLEVlJiYoRWU9W251bGwsImxvYWREYXRhIl0pfSx7aG90SW5zdGFuY2U6ZixkYXRhTWFwOk0sZGF0YVNvdXJjZTpELGludGVybmFsU291cmNlOiJsb2FkRGF0YSIsc291'@;
put 'cmNlOk50LG1ldGFNYW5hZ2VyOnB0LGZpcnN0UnVuOkVlfSl9LHRoaXMuZ2V0SW5pdGlhbENvbHVtbkNvdW50PWZ1bmN0aW9uKCl7Y29uc3QgdnQ9ZHQuY29sdW1ucztsZXQgTnQ9MDtpZihBcnJheS5pc0FycmF5KHZ0KSlOdD12dC5sZW5ndGg7ZWxzZSBpZihtbCh2dCkpaWYoImFycmF5Ij09'@;
put 'PWYuZGF0YVR5cGUpe2NvbnN0IEh0PXRoaXMuY291bnRTb3VyY2VDb2xzKCk7Zm9yKGxldCBIbj0wO0huPEh0O0huKz0xKXZ0KEhuKSYmKE50Kz0xKX1lbHNlKCJvYmplY3QiPT09Zi5kYXRhVHlwZXx8ImZ1bmN0aW9uIj09PWYuZGF0YVR5cGUpJiYoTnQ9TS5jb2xUb1Byb3BDYWNoZS5sZW5n'@;
put 'dGgpO2Vsc2UgaWYoUGEoZHQuZGF0YVNjaGVtYSkpe2NvbnN0IEh0PU0uZ2V0U2NoZW1hKCk7TnQ9QXJyYXkuaXNBcnJheShIdCk/SHQubGVuZ3RoOkJPKEh0KX1lbHNlIE50PXRoaXMuY291bnRTb3VyY2VDb2xzKCk7cmV0dXJuIE50fSx0aGlzLmluaXRJbmRleE1hcHBlcnM9ZnVuY3Rpb24o'@;
put 'KXt0aGlzLmNvbHVtbkluZGV4TWFwcGVyLmluaXRUb0xlbmd0aCh0aGlzLmdldEluaXRpYWxDb2x1bW5Db3VudCgpKSx0aGlzLnJvd0luZGV4TWFwcGVyLmluaXRUb0xlbmd0aCh0aGlzLmNvdW50U291cmNlUm93cygpKX0sdGhpcy5nZXREYXRhPWZ1bmN0aW9uKHZ0LE50LEh0LEhuKXtyZXR1'@;
put 'cm4gX2ModnQpP00uZ2V0QWxsKCk6TS5nZXRSYW5nZShmLl9jcmVhdGVDZWxsQ29vcmRzKHZ0LE50KSxmLl9jcmVhdGVDZWxsQ29vcmRzKEh0LEhuKSxNLkRFU1RJTkFUSU9OX1JFTkRFUkVSKX0sdGhpcy5nZXRDb3B5YWJsZVRleHQ9ZnVuY3Rpb24odnQsTnQsSHQsSG4pe3JldHVybiBNLmdl'@;
put 'dENvcHlhYmxlVGV4dChmLl9jcmVhdGVDZWxsQ29vcmRzKHZ0LE50KSxmLl9jcmVhdGVDZWxsQ29vcmRzKEh0LEhuKSl9LHRoaXMuZ2V0Q29weWFibGVEYXRhPWZ1bmN0aW9uKHZ0LE50KXtyZXR1cm4gTS5nZXRDb3B5YWJsZSh2dCxNLmNvbFRvUHJvcChOdCkpfSx0aGlzLmdldFNjaGVtYT1m'@;
put 'dW5jdGlvbigpe3JldHVybiBNLmdldFNjaGVtYSgpfSx0aGlzLnVwZGF0ZVNldHRpbmdzPWZ1bmN0aW9uKHZ0KXtsZXQgTnQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0mJmFyZ3VtZW50c1sxXTtjb25zdCBIdD0oRWU/Zi5sb2FkRGF0YTpmLnVwZGF0ZURhdGEp'@;
put 'LmJpbmQodGhpcyk7bGV0IHRyLGFyLEhuPSExO2lmKFBhKHZ0LnJvd3MpKXRocm93IG5ldyBFcnJvcignVGhlICJyb3dzIiBzZXR0aW5nIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQuIERvIHlvdSBtZWFuIHN0YXJ0Um93cywgbWluUm93cyBvciBtYXhSb3dzPycpO2lmKFBhKHZ0LmNvbHMpKXRo'@;
put 'cm93IG5ldyBFcnJvcignVGhlICJjb2xzIiBzZXR0aW5nIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQuIERvIHlvdSBtZWFuIHN0YXJ0Q29scywgbWluQ29scyBvciBtYXhDb2xzPycpO2lmKFBhKHZ0LmdhbnR0Q2hhcnQpKXRocm93IG5ldyBFcnJvcignU2luY2UgOC4wLjAgdGhlICJnYW50dENo'@;
put 'YXJ0IiBzZXR0aW5nIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQuJyk7Zm9yKHRyIGluIHZ0Lmxhbmd1YWdlJiZmdW5jdGlvbiBHbih2dCl7Y29uc3QgTnQ9SDNlKHZ0KTtnWChOdCk/KGYucnVuSG9va3MoImJlZm9yZUxhbmd1YWdlQ2hhbmdlIixOdCksSnQubGFuZ3VhZ2U9TnQsZi5ydW5Ib29r'@;
put 'cygiYWZ0ZXJMYW5ndWFnZUNoYW5nZSIsTnQpKTpOM2UodnQpfSh2dC5sYW5ndWFnZSksdnQpaWYoImRhdGEiIT09dHImJiJsYW5ndWFnZSIhPT10cilpZigiY2xhc3NOYW1lIj09PXRyKWFpKCJjbGFzc05hbWUiLHZ0LmNsYXNzTmFtZSk7ZWxzZSBpZigidGFibGVDbGFzc05hbWUiPT09dHIm'@;
put 'JmYudGFibGUpYWkoInRhYmxlQ2xhc3NOYW1lIix2dC50YWJsZUNsYXNzTmFtZSksZi52aWV3Ll93dC53dE92ZXJsYXlzLnN5bmNPdmVybGF5VGFibGVDbGFzc05hbWVzKCk7ZWxzZSBpZihTYS5nZXRTaW5nbGV0b24oKS5pc1JlZ2lzdGVyZWQodHIpfHxTYS5nZXRTaW5nbGV0b24oKS5pc0Rl'@;
put 'cHJlY2F0ZWQodHIpKXtjb25zdCBwbj12dFt0cl07bWwocG4pPyhTYS5nZXRTaW5nbGV0b24oKS5hZGRBc0ZpeGVkKHRyLHBuLGYpLGR0W3RyXT1wbik6QXJyYXkuaXNBcnJheShwbikmJihTYS5nZXRTaW5nbGV0b24oKS5hZGQodHIscG4sZiksZHRbdHJdPXBuKX1lbHNlIU50JiZUdSh2dCx0'@;
put 'cikmJihKdFt0cl09dnRbdHJdKTt2b2lkIDA9PT12dC5kYXRhJiZ2b2lkIDA9PT1kdC5kYXRhP0h0KG51bGwsInVwZGF0ZVNldHRpbmdzIik6dm9pZCAwIT09dnQuZGF0YT9IdCh2dC5kYXRhLCJ1cGRhdGVTZXR0aW5ncyIpOnZvaWQgMCE9PXZ0LmNvbHVtbnMmJihNLmNyZWF0ZU1hcCgpLGYu'@;
put 'aW5pdEluZGV4TWFwcGVycygpKTtjb25zdCBIcj1mLmNvdW50Q29scygpLHFyPWR0LmNvbHVtbnM7aWYocXImJm1sKHFyKSYmKEhuPSEwKSwodm9pZCAwIT09dnQuY2VsbHx8dm9pZCAwIT09dnQuY2VsbHN8fHZvaWQgMCE9PXZ0LmNvbHVtbnMpJiZwdC5jbGVhckNhY2hlKCksSHI+MClmb3Io'@;
put 'dHI9MCxhcj0wO3RyPEhyO3RyKyspe2lmKHFyKXtjb25zdCBwbj1Ibj9xcih0cik6cXJbYXJdO3BuJiZwdC51cGRhdGVDb2x1bW5NZXRhKGFyLHBuKX1hcis9MX1QYSh2dC5jZWxsKSYmWG8odnQuY2VsbCxwbj0+e2Yuc2V0Q2VsbE1ldGFPYmplY3QocG4ucm93LHBuLmNvbCxwbil9KSxmLnJ1'@;
put 'bkhvb2tzKCJhZnRlckNlbGxNZXRhUmVzZXQiKTtsZXQgb249Zi5yb290RWxlbWVudC5zdHlsZS5oZWlnaHQ7IiIhPT1vbiYmKG9uPXBhcnNlSW50KGYucm9vdEVsZW1lbnQuc3R5bGUuaGVpZ2h0LDEwKSk7bGV0IHluPXZ0LmhlaWdodDtpZihtbCh5bikmJih5bj15bigpKSxOdCYmZi5yb290'@;
put 'RWxlbWVudC5nZXRBdHRyaWJ1dGUoInN0eWxlIikmJmYucm9vdEVsZW1lbnQuc2V0QXR0cmlidXRlKCJkYXRhLWluaXRpYWxzdHlsZSIsZi5yb290RWxlbWVudC5nZXRBdHRyaWJ1dGUoInN0eWxlIikpLG51bGw9PT15bil7Y29uc3QgcG49Zi5yb290RWxlbWVudC5nZXRBdHRyaWJ1dGUoImRh'@;
put 'dGEtaW5pdGlhbHN0eWxlIik7cG4mJihwbi5pbmRleE9mKCJoZWlnaHQiKT4tMXx8cG4uaW5kZXhPZigib3ZlcmZsb3ciKT4tMSk/Zi5yb290RWxlbWVudC5zZXRBdHRyaWJ1dGUoInN0eWxlIixwbik6KGYucm9vdEVsZW1lbnQuc3R5bGUuaGVpZ2h0PSIiLGYucm9vdEVsZW1lbnQuc3R5bGUu'@;
put 'b3ZlcmZsb3c9IiIpfWVsc2Ugdm9pZCAwIT09eW4mJihmLnJvb3RFbGVtZW50LnN0eWxlLmhlaWdodD1pc05hTih5bik/YCR7eW59YDpgJHt5bn1weGAsZi5yb290RWxlbWVudC5zdHlsZS5vdmVyZmxvdz0iaGlkZGVuIik7aWYodHlwZW9mIHZ0LndpZHRoPCJ1Iil7bGV0IHBuPXZ0LndpZHRo'@;
put 'O21sKHBuKSYmKHBuPXBuKCkpLGYucm9vdEVsZW1lbnQuc3R5bGUud2lkdGg9aXNOYU4ocG4pP2Ake3BufWA6YCR7cG59cHhgfWlmKCFOdCl7aWYoZi52aWV3KXtmLnZpZXcuX3d0Lnd0Vmlld3BvcnQucmVzZXRIYXNPdmVyc2l6ZWRDb2x1bW5IZWFkZXJzTWFya2VkKCksZi52aWV3Ll93dC5l'@;
put 'eHBvcnRTZXR0aW5nc0FzQ2xhc3NOYW1lcygpO2NvbnN0IHBuPWYuZ2V0Q3VycmVudFRoZW1lTmFtZSgpLHByPVR1KHZ0LCJ0aGVtZU5hbWUiKTtwbiYmcHImJnBuIT09dnQudGhlbWVOYW1lJiYoZi52aWV3LmdldFN0eWxlc0hhbmRsZXIoKS5yZW1vdmVDbGFzc05hbWVzKCksZi52aWV3LnJl'@;
put 'bW92ZUNsYXNzTmFtZUZyb21MaWNlbnNlRWxlbWVudChwbikpO2NvbnN0ICRuPXByJiZ2dC50aGVtZU5hbWV8fE1wZShmLnJvb3RFbGVtZW50KTtmLnVzZVRoZW1lKCRuKSxmLnZpZXcuYWRkQ2xhc3NOYW1lVG9MaWNlbnNlRWxlbWVudChmLmdldEN1cnJlbnRUaGVtZU5hbWUoKSl9Zi5ydW5I'@;
put 'b29rcygiYWZ0ZXJVcGRhdGVTZXR0aW5ncyIsdnQpfVouYWRqdXN0Um93c0FuZENvbHMoKSxmLnZpZXcmJiFFZSYmKGYucmVuZGVyKCksZi52aWV3Ll93dC53dE92ZXJsYXlzLmFkanVzdEVsZW1lbnRzU2l6ZSgpKSwhTnQmJmYudmlldyYmKCIiPT09b258fCIiPT09eW58fHZvaWQgMD09PXlu'@;
put 'KSYmb24hPT15biYmZi52aWV3Ll93dC53dE92ZXJsYXlzLnVwZGF0ZU1haW5TY3JvbGxhYmxlRWxlbWVudHMoKX0sdGhpcy5nZXRWYWx1ZT1mdW5jdGlvbigpe2NvbnN0IHZ0PWYuZ2V0U2VsZWN0ZWRMYXN0KCk7aWYoZHQuZ2V0VmFsdWUpe2lmKG1sKGR0LmdldFZhbHVlKSlyZXR1cm4gZHQu'@;
put 'Z2V0VmFsdWUuY2FsbChmKTtpZih2dClyZXR1cm4gZi5nZXREYXRhKClbdnRbMF1bMF1dW2R0LmdldFZhbHVlXX1lbHNlIGlmKHZ0KXJldHVybiBmLmdldERhdGFBdENlbGwodnRbMF0sdnRbMV0pfSx0aGlzLmdldFNldHRpbmdzPWZ1bmN0aW9uKCl7cmV0dXJuIGR0fSx0aGlzLmNsZWFyPWZ1'@;
put 'bmN0aW9uKCl7dGhpcy5zZWxlY3RBbGwoKSx0aGlzLmVtcHR5U2VsZWN0ZWRDZWxscygpfSx0aGlzLmFsdGVyPWZ1bmN0aW9uKHZ0LE50LEh0LEhuLHRyKXtaLmFsdGVyKHZ0LE50LEh0LEhuLHRyKX0sdGhpcy5nZXRDZWxsPWZ1bmN0aW9uKHZ0LE50KXtsZXQgSHQ9YXJndW1lbnRzLmxlbmd0'@;
put 'aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0mJmFyZ3VtZW50c1syXSxIbj1OdCx0cj12dDtpZihOdD49MCl7aWYodGhpcy5jb2x1bW5JbmRleE1hcHBlci5pc0hpZGRlbih0aGlzLnRvUGh5c2ljYWxDb2x1bW4oTnQpKSlyZXR1cm4gbnVsbDtIbj10aGlzLmNvbHVtbkluZGV4TWFwcGVyLmdl'@;
put 'dFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoTnQpfWlmKHZ0Pj0wKXtpZih0aGlzLnJvd0luZGV4TWFwcGVyLmlzSGlkZGVuKHRoaXMudG9QaHlzaWNhbFJvdyh2dCkpKXJldHVybiBudWxsO3RyPXRoaXMucm93SW5kZXhNYXBwZXIuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleCh2dCl9'@;
put 'cmV0dXJuIG51bGw9PT10cnx8bnVsbD09PUhufHx2b2lkIDA9PT10cnx8dm9pZCAwPT09SG4/bnVsbDpmLnZpZXcuZ2V0Q2VsbEF0Q29vcmRzKGYuX2NyZWF0ZUNlbGxDb29yZHModHIsSG4pLEh0KX0sdGhpcy5nZXRDb29yZHM9ZnVuY3Rpb24odnQpe2NvbnN0IE50PXRoaXMudmlldy5fd3Qu'@;
put 'd3RUYWJsZS5nZXRDb29yZHModnQpO2lmKG51bGw9PT1OdClyZXR1cm4gbnVsbDtjb25zdHtyb3c6SHQsY29sOkhufT1OdDtsZXQgdHI9SHQsYXI9SG47cmV0dXJuIEh0Pj0wJiYodHI9dGhpcy5yb3dJbmRleE1hcHBlci5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KEh0KSksSG4+PTAm'@;
put 'Jihhcj10aGlzLmNvbHVtbkluZGV4TWFwcGVyLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgoSG4pKSxmLl9jcmVhdGVDZWxsQ29vcmRzKHRyLGFyKX0sdGhpcy5jb2xUb1Byb3A9ZnVuY3Rpb24odnQpe3JldHVybiBNLmNvbFRvUHJvcCh2dCl9LHRoaXMucHJvcFRvQ29sPWZ1bmN0aW9u'@;
put 'KHZ0KXtyZXR1cm4gTS5wcm9wVG9Db2wodnQpfSx0aGlzLnRvVmlzdWFsUm93PXZ0PT50aGlzLnJvd0luZGV4TWFwcGVyLmdldFZpc3VhbEZyb21QaHlzaWNhbEluZGV4KHZ0KSx0aGlzLnRvVmlzdWFsQ29sdW1uPXZ0PT50aGlzLmNvbHVtbkluZGV4TWFwcGVyLmdldFZpc3VhbEZyb21QaHlz'@;
put 'aWNhbEluZGV4KHZ0KSx0aGlzLnRvUGh5c2ljYWxSb3c9dnQ9PnRoaXMucm93SW5kZXhNYXBwZXIuZ2V0UGh5c2ljYWxGcm9tVmlzdWFsSW5kZXgodnQpLHRoaXMudG9QaHlzaWNhbENvbHVtbj12dD0+dGhpcy5jb2x1bW5JbmRleE1hcHBlci5nZXRQaHlzaWNhbEZyb21WaXN1YWxJbmRleCh2'@;
put 'dCksdGhpcy5nZXREYXRhQXRDZWxsPWZ1bmN0aW9uKHZ0LE50KXtyZXR1cm4gTS5nZXQodnQsTS5jb2xUb1Byb3AoTnQpKX0sdGhpcy5nZXREYXRhQXRSb3dQcm9wPWZ1bmN0aW9uKHZ0LE50KXtyZXR1cm4gTS5nZXQodnQsTnQpfSx0aGlzLmdldERhdGFBdENvbD1mdW5jdGlvbih2dCl7Y29u'@;
put 'c3QgTnQ9W10sSHQ9TS5nZXRSYW5nZShmLl9jcmVhdGVDZWxsQ29vcmRzKDAsdnQpLGYuX2NyZWF0ZUNlbGxDb29yZHMoZHQuZGF0YS5sZW5ndGgtMSx2dCksTS5ERVNUSU5BVElPTl9SRU5ERVJFUik7Zm9yKGxldCBIbj0wO0huPEh0Lmxlbmd0aDtIbis9MSlmb3IobGV0IHRyPTA7dHI8SHRb'@;
put 'SG5dLmxlbmd0aDt0cis9MSlOdC5wdXNoKEh0W0huXVt0cl0pO3JldHVybiBOdH0sdGhpcy5nZXREYXRhQXRQcm9wPWZ1bmN0aW9uKHZ0KXtjb25zdCBOdD1bXSxIdD1NLmdldFJhbmdlKGYuX2NyZWF0ZUNlbGxDb29yZHMoMCxNLnByb3BUb0NvbCh2dCkpLGYuX2NyZWF0ZUNlbGxDb29yZHMo'@;
put 'ZHQuZGF0YS5sZW5ndGgtMSxNLnByb3BUb0NvbCh2dCkpLE0uREVTVElOQVRJT05fUkVOREVSRVIpO2ZvcihsZXQgSG49MDtIbjxIdC5sZW5ndGg7SG4rPTEpZm9yKGxldCB0cj0wO3RyPEh0W0huXS5sZW5ndGg7dHIrPTEpTnQucHVzaChIdFtIbl1bdHJdKTtyZXR1cm4gTnR9LHRoaXMuZ2V0'@;
put 'U291cmNlRGF0YT1mdW5jdGlvbih2dCxOdCxIdCxIbil7bGV0IHRyO3JldHVybiB0cj12b2lkIDA9PT12dD9ELmdldERhdGEoKTpELmdldEJ5UmFuZ2UoZi5fY3JlYXRlQ2VsbENvb3Jkcyh2dCxOdCksZi5fY3JlYXRlQ2VsbENvb3JkcyhIdCxIbikpLHRyfSx0aGlzLmdldFNvdXJjZURhdGFB'@;
put 'cnJheT1mdW5jdGlvbih2dCxOdCxIdCxIbil7bGV0IHRyO3JldHVybiB0cj12b2lkIDA9PT12dD9ELmdldERhdGEoITApOkQuZ2V0QnlSYW5nZShmLl9jcmVhdGVDZWxsQ29vcmRzKHZ0LE50KSxmLl9jcmVhdGVDZWxsQ29vcmRzKEh0LEhuKSwhMCksdHJ9LHRoaXMuZ2V0U291cmNlRGF0YUF0'@;
put 'Q29sPWZ1bmN0aW9uKHZ0KXtyZXR1cm4gRC5nZXRBdENvbHVtbih2dCl9LHRoaXMuc2V0U291cmNlRGF0YUF0Q2VsbD1mdW5jdGlvbih2dCxOdCxIdCxIbil7Y29uc3QgdHI9SXIodnQsTnQsSHQpLGFyPXRoaXMuaGFzSG9vaygiYWZ0ZXJTZXRTb3VyY2VEYXRhQXRDZWxsIiksSHI9W107YXIm'@;
put 'JlluKHRyLG9uPT57bGV0W3luLHBuLHByXT1vbjtIci5wdXNoKFt5bixwbixELmdldEF0Q2VsbCh5bixwbikscHJdKX0pLFluKHRyLG9uPT57bGV0W3luLHBuLHByXT1vbjtELnNldEF0Q2VsbCh5bixwbixwcil9KSxhciYmdGhpcy5ydW5Ib29rcygiYWZ0ZXJTZXRTb3VyY2VEYXRhQXRDZWxs'@;
put 'IixIcixIbiksdGhpcy5yZW5kZXIoKTtjb25zdCBxcj1mLmdldEFjdGl2ZUVkaXRvcigpO3FyJiZQYShxci5yZWZyZXNoVmFsdWUpJiZxci5yZWZyZXNoVmFsdWUoKX0sdGhpcy5nZXRTb3VyY2VEYXRhQXRSb3c9ZnVuY3Rpb24odnQpe3JldHVybiBELmdldEF0Um93KHZ0KX0sdGhpcy5nZXRT'@;
put 'b3VyY2VEYXRhQXRDZWxsPWZ1bmN0aW9uKHZ0LE50KXtyZXR1cm4gRC5nZXRBdENlbGwodnQsTnQpfSx0aGlzLmdldERhdGFBdFJvdz1mdW5jdGlvbih2dCl7cmV0dXJuIE0uZ2V0UmFuZ2UoZi5fY3JlYXRlQ2VsbENvb3Jkcyh2dCwwKSxmLl9jcmVhdGVDZWxsQ29vcmRzKHZ0LHRoaXMuY291'@;
put 'bnRDb2xzKCktMSksTS5ERVNUSU5BVElPTl9SRU5ERVJFUilbMF18fFtdfSx0aGlzLmdldERhdGFUeXBlPWZ1bmN0aW9uKHZ0LE50LEh0LEhuKXtjb25zdCB0cj12b2lkIDA9PT12dD9bMCwwLHRoaXMuY291bnRSb3dzKCksdGhpcy5jb3VudENvbHMoKV06W3Z0LE50LEh0LEhuXSxbYXIsSHJd'@;
put 'PXRyO2xldFssLHFyLG9uXT10cix5bj1udWxsLHBuPW51bGw7dm9pZCAwPT09cXImJihxcj1hciksdm9pZCAwPT09b24mJihvbj1Icik7bGV0IHByPSJtaXhlZCI7cmV0dXJuIEdhKE1hdGgubWF4KE1hdGgubWluKGFyLHFyKSwwKSxNYXRoLm1heChhcixxciksJG49PntsZXQgZHI9ITA7cmV0'@;
put 'dXJuIEdhKE1hdGgubWF4KE1hdGgubWluKEhyLG9uKSwwKSxNYXRoLm1heChIcixvbiksVXI9Pihwbj10aGlzLmdldENlbGxNZXRhKCRuLFVyKS50eXBlLHluP2RyPXluPT09cG46eW49cG4sZHIpKSxwcj1kcj9wbjoibWl4ZWQiLGRyfSkscHJ9LHRoaXMucmVtb3ZlQ2VsbE1ldGE9ZnVuY3Rp'@;
put 'b24odnQsTnQsSHQpe2NvbnN0W0huLHRyXT1bdGhpcy50b1BoeXNpY2FsUm93KHZ0KSx0aGlzLnRvUGh5c2ljYWxDb2x1bW4oTnQpXTtsZXQgYXI9cHQuZ2V0Q2VsbE1ldGFLZXlWYWx1ZShIbix0cixIdCk7ITEhPT1mLnJ1bkhvb2tzKCJiZWZvcmVSZW1vdmVDZWxsTWV0YSIsdnQsTnQsSHQs'@;
put 'YXIpJiYocHQucmVtb3ZlQ2VsbE1ldGEoSG4sdHIsSHQpLGYucnVuSG9va3MoImFmdGVyUmVtb3ZlQ2VsbE1ldGEiLHZ0LE50LEh0LGFyKSksYXI9bnVsbH0sdGhpcy5zcGxpY2VDZWxsc01ldGE9ZnVuY3Rpb24odnQpe2xldCBOdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3Vt'@;
put 'ZW50c1sxXT9hcmd1bWVudHNbMV06MDtmb3IodmFyIEh0PWFyZ3VtZW50cy5sZW5ndGgsSG49bmV3IEFycmF5KEh0PjI/SHQtMjowKSx0cj0yO3RyPEh0O3RyKyspSG5bdHItMl09YXJndW1lbnRzW3RyXTtpZihIbi5sZW5ndGg+MCYmIUFycmF5LmlzQXJyYXkoSG5bMF0pKXRocm93IG5ldyBF'@;
put 'cnJvcigiVGhlIDNyZCBhcmd1bWVudCAoY2VsbE1ldGFSb3dzKSBoYXMgdG8gYmUgcGFzc2VkIGFzIGFuIGFycmF5IG9mIGNlbGwgbWV0YSBvYmplY3RzIGFycmF5LiIpO050PjAmJnB0LnJlbW92ZVJvdyh0aGlzLnRvUGh5c2ljYWxSb3codnQpLE50KSxIbi5sZW5ndGg+MCYmWW4oSG4ucmV2'@;
put 'ZXJzZSgpLGFyPT57cHQuY3JlYXRlUm93KHRoaXMudG9QaHlzaWNhbFJvdyh2dCkpLFluKGFyLChIcixxcik9PnRoaXMuc2V0Q2VsbE1ldGFPYmplY3QodnQscXIsSHIpKX0pLGYucmVuZGVyKCl9LHRoaXMuc2V0Q2VsbE1ldGFPYmplY3Q9ZnVuY3Rpb24odnQsTnQsSHQpeyJvYmplY3QiPT10'@;
put 'eXBlb2YgSHQmJlhvKEh0LChIbix0cik9Pnt0aGlzLnNldENlbGxNZXRhKHZ0LE50LHRyLEhuKX0pfSx0aGlzLnNldENlbGxNZXRhPWZ1bmN0aW9uKHZ0LE50LEh0LEhuKXtpZighMT09PWYucnVuSG9va3MoImJlZm9yZVNldENlbGxNZXRhIix2dCxOdCxIdCxIbikpcmV0dXJuO2xldCBhcj12'@;
put 'dCxIcj1OdDt2dDx0aGlzLmNvdW50Um93cygpJiYoYXI9dGhpcy50b1BoeXNpY2FsUm93KHZ0KSksTnQ8dGhpcy5jb3VudENvbHMoKSYmKEhyPXRoaXMudG9QaHlzaWNhbENvbHVtbihOdCkpLHB0LnNldENlbGxNZXRhKGFyLEhyLEh0LEhuKSxmLnJ1bkhvb2tzKCJhZnRlclNldENlbGxNZXRh'@;
put 'Iix2dCxOdCxIdCxIbil9LHRoaXMuZ2V0Q2VsbHNNZXRhPWZ1bmN0aW9uKCl7cmV0dXJuIHB0LmdldENlbGxzTWV0YSgpfSx0aGlzLmdldENlbGxNZXRhPWZ1bmN0aW9uKHZ0LE50KXtsZXQgSHQ9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJd'@;
put 'Ontza2lwTWV0YUV4dGVuc2lvbjohMX0sSG49dGhpcy50b1BoeXNpY2FsUm93KHZ0KSx0cj10aGlzLnRvUGh5c2ljYWxDb2x1bW4oTnQpO3JldHVybiBudWxsPT09SG4mJihIbj12dCksbnVsbD09PXRyJiYodHI9TnQpLHB0LmdldENlbGxNZXRhKEhuLHRyLHt2aXN1YWxSb3c6dnQsdmlzdWFs'@;
put 'Q29sdW1uOk50LC4uLkh0fSl9LHRoaXMuZ2V0Q29sdW1uTWV0YT1mdW5jdGlvbih2dCl7cmV0dXJuIHB0LmdldENvbHVtbk1ldGEodGhpcy50b1BoeXNpY2FsQ29sdW1uKHZ0KSl9LHRoaXMuZ2V0Q2VsbE1ldGFBdFJvdz1mdW5jdGlvbih2dCl7cmV0dXJuIHB0LmdldENlbGxzTWV0YUF0Um93'@;
put 'KHZ0KX0sdGhpcy5pc0NvbHVtbk1vZGlmaWNhdGlvbkFsbG93ZWQ9ZnVuY3Rpb24oKXtyZXR1cm4hKCJvYmplY3QiPT09Zi5kYXRhVHlwZXx8ZHQuY29sdW1ucyl9LHRoaXMuZ2V0Q2VsbFJlbmRlcmVyPWZ1bmN0aW9uKHZ0LE50KXtjb25zdCBIdD0ibnVtYmVyIj09dHlwZW9mIHZ0P2YuZ2V0'@;
put 'Q2VsbE1ldGEodnQsTnQpLnJlbmRlcmVyOnZ0LnJlbmRlcmVyO3JldHVybiJzdHJpbmciPT10eXBlb2YgSHQ/UU8oSHQpOl9jKEh0KT9RTygidGV4dCIpOkh0fSx0aGlzLmdldENlbGxFZGl0b3I9ZnVuY3Rpb24odnQsTnQpe2NvbnN0IEh0PSJudW1iZXIiPT10eXBlb2YgdnQ/Zi5nZXRDZWxs'@;
put 'TWV0YSh2dCxOdCkuZWRpdG9yOnZ0LmVkaXRvcjtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIEh0P1dPKEh0KTpfYyhIdCk/V08oInRleHQiKTpIdH0sdGhpcy5nZXRDZWxsVmFsaWRhdG9yPWZ1bmN0aW9uKHZ0LE50KXtjb25zdCBIdD0ibnVtYmVyIj09dHlwZW9mIHZ0P2YuZ2V0Q2VsbE1ldGEo'@;
put 'dnQsTnQpLnZhbGlkYXRvcjp2dC52YWxpZGF0b3I7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBIdD9ySyhIdCk6SHR9LHRoaXMudmFsaWRhdGVDZWxscz1mdW5jdGlvbih2dCl7dGhpcy5fdmFsaWRhdGVDZWxscyh2dCl9LHRoaXMudmFsaWRhdGVSb3dzPWZ1bmN0aW9uKHZ0LE50KXtpZighQXJy'@;
put 'YXkuaXNBcnJheSh2dCkpdGhyb3cgbmV3IEVycm9yKCJ2YWxpZGF0ZVJvd3MgcGFyYW1ldGVyIGByb3dzYCBtdXN0IGJlIGFuIGFycmF5Iik7dGhpcy5fdmFsaWRhdGVDZWxscyhOdCx2dCl9LHRoaXMudmFsaWRhdGVDb2x1bW5zPWZ1bmN0aW9uKHZ0LE50KXtpZighQXJyYXkuaXNBcnJheSh2'@;
put 'dCkpdGhyb3cgbmV3IEVycm9yKCJ2YWxpZGF0ZUNvbHVtbnMgcGFyYW1ldGVyIGBjb2x1bW5zYCBtdXN0IGJlIGFuIGFycmF5Iik7dGhpcy5fdmFsaWRhdGVDZWxscyhOdCx2b2lkIDAsdnQpfSx0aGlzLl92YWxpZGF0ZUNlbGxzPWZ1bmN0aW9uKHZ0LE50LEh0KXtjb25zdCBIbj1uZXcgX2k7'@;
put 'dnQmJihIbi5vblF1ZXVlRW1wdHk9dnQpO2xldCB0cj1mLmNvdW50Um93cygpLTE7Zm9yKDt0cj49MDspe2lmKHZvaWQgMCE9PU50JiYtMT09PU50LmluZGV4T2YodHIpKXt0ci09MTtjb250aW51ZX1sZXQgYXI9Zi5jb3VudENvbHMoKS0xO2Zvcig7YXI+PTA7KXZvaWQgMD09PUh0fHwtMSE9'@;
put 'PUh0LmluZGV4T2YoYXIpPyhIbi5hZGRWYWxpZGF0b3JUb1F1ZXVlKCksZi52YWxpZGF0ZUNlbGwoZi5nZXREYXRhQXRDZWxsKHRyLGFyKSxmLmdldENlbGxNZXRhKHRyLGFyKSxIcj0+e2lmKCJib29sZWFuIiE9dHlwZW9mIEhyKXRocm93IG5ldyBFcnJvcigiVmFsaWRhdGlvbiBlcnJvcjog'@;
put 'cmVzdWx0IGlzIG5vdCBib29sZWFuIik7ITE9PT1IciYmKEhuLnZhbGlkPSExKSxIbi5yZW1vdmVWYWxpZGF0b3JGb3JtUXVldWUoKX0sInZhbGlkYXRlQ2VsbHMiKSxhci09MSk6YXItPTE7dHItPTF9SG4uY2hlY2tJZlF1ZXVlSXNFbXB0eSgpfSx0aGlzLmdldFJvd0hlYWRlcj1mdW5jdGlv'@;
put 'bih2dCl7bGV0IE50PWR0LnJvd0hlYWRlcnMsSHQ9dnQ7cmV0dXJuIHZvaWQgMCE9PUh0JiYoSHQ9Zi5ydW5Ib29rcygibW9kaWZ5Um93SGVhZGVyIixIdCkpLHZvaWQgMD09PUh0PyhOdD1bXSxHYShmLmNvdW50Um93cygpLTEsSG49PntOdC5wdXNoKGYuZ2V0Um93SGVhZGVyKEhuKSl9KSk6'@;
put 'QXJyYXkuaXNBcnJheShOdCkmJnZvaWQgMCE9PU50W0h0XT9OdD1OdFtIdF06bWwoTnQpP050PU50KEh0KTpOdCYmInN0cmluZyIhPXR5cGVvZiBOdCYmIm51bWJlciIhPXR5cGVvZiBOdCYmKE50PUh0KzEpLE50fSx0aGlzLmhhc1Jvd0hlYWRlcnM9ZnVuY3Rpb24oKXtyZXR1cm4hIWR0LnJv'@;
put 'd0hlYWRlcnN9LHRoaXMuaGFzQ29sSGVhZGVycz1mdW5jdGlvbigpe2lmKG51bGwhPWR0LmNvbEhlYWRlcnMpcmV0dXJuISFkdC5jb2xIZWFkZXJzO2ZvcihsZXQgdnQ9MCxOdD1mLmNvdW50Q29scygpO3Z0PE50O3Z0KyspaWYoZi5nZXRDb2xIZWFkZXIodnQpKXJldHVybiEwO3JldHVybiEx'@;
put 'fSx0aGlzLmdldENvbEhlYWRlcj1mdW5jdGlvbih2dCl7bGV0IE50PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTotMTtjb25zdCBIdD1mLnJ1bkhvb2tzKCJtb2RpZnlDb2xIZWFkZXIiLHZ0KTtpZih2b2lkIDA9PT1IdCl7Y29uc3QgcXI9'@;
put 'W10sb249Zi5jb3VudENvbHMoKTtmb3IobGV0IHluPTA7eW48b247eW4rKylxci5wdXNoKGYuZ2V0Q29sSGVhZGVyKHluKSk7cmV0dXJuIHFyfWxldCBIbj1kdC5jb2xIZWFkZXJzO2NvbnN0IGFyPWYudG9QaHlzaWNhbENvbHVtbihIdCksSHI9ZnVuY3Rpb24ocXIpe2NvbnN0IG9uPVtdLHlu'@;
put 'PWYuY291bnRDb2xzKCk7bGV0IHBuPTA7Zm9yKDtwbjx5bjtwbisrKW1sKGR0LmNvbHVtbnMpJiZkdC5jb2x1bW5zKHBuKSYmb24ucHVzaChwbik7cmV0dXJuIG9uW3FyXX0oYXIpO3JldHVybiExPT09ZHQuY29sSGVhZGVycz9Ibj1udWxsOmR0LmNvbHVtbnMmJm1sKGR0LmNvbHVtbnMpJiZk'@;
put 'dC5jb2x1bW5zKEhyKSYmZHQuY29sdW1ucyhIcikudGl0bGU/SG49ZHQuY29sdW1ucyhIcikudGl0bGU6ZHQuY29sdW1ucyYmZHQuY29sdW1uc1thcl0mJmR0LmNvbHVtbnNbYXJdLnRpdGxlP0huPWR0LmNvbHVtbnNbYXJdLnRpdGxlOkFycmF5LmlzQXJyYXkoZHQuY29sSGVhZGVycykmJnZv'@;
put 'aWQgMCE9PWR0LmNvbEhlYWRlcnNbYXJdP0huPWR0LmNvbEhlYWRlcnNbYXJdOm1sKGR0LmNvbEhlYWRlcnMpP0huPWR0LmNvbEhlYWRlcnMoYXIpOmR0LmNvbEhlYWRlcnMmJiJzdHJpbmciIT10eXBlb2YgZHQuY29sSGVhZGVycyYmIm51bWJlciIhPXR5cGVvZiBkdC5jb2xIZWFkZXJzJiYo'@;
put 'SG49aFAoSHQpKSxIbj1mLnJ1bkhvb2tzKCJtb2RpZnlDb2x1bW5IZWFkZXJWYWx1ZSIsSG4sdnQsTnQpLEhufSx0aGlzLl9nZXRDb2xXaWR0aEZyb21TZXR0aW5ncz1mdW5jdGlvbih2dCl7bGV0IE50O2lmKHZ0Pj0wJiYoTnQ9Zi5nZXRDZWxsTWV0YSgwLHZ0KS53aWR0aCksKHZvaWQgMD09'@;
put 'PU50fHxOdD09PWR0LndpZHRoKSYmKE50PWR0LmNvbFdpZHRocyksbnVsbCE9TnQpe3N3aXRjaCh0eXBlb2YgTnQpe2Nhc2Uib2JqZWN0IjpOdD1OdFt2dF07YnJlYWs7Y2FzZSJmdW5jdGlvbiI6TnQ9TnQodnQpfSJzdHJpbmciPT10eXBlb2YgTnQmJihOdD1wYXJzZUludChOdCwxMCkpfXJl'@;
put 'dHVybiBOdH0sdGhpcy5nZXRDb2xXaWR0aD1mdW5jdGlvbih2dCxOdCl7bGV0IEh0PWYuX2dldENvbFdpZHRoRnJvbVNldHRpbmdzKHZ0KTtyZXR1cm4gSHQ9Zi5ydW5Ib29rcygibW9kaWZ5Q29sV2lkdGgiLEh0LHZ0LE50KSx2b2lkIDA9PT1IdCYmKEh0PV9fKSxIdH0sdGhpcy5fZ2V0Um93'@;
put 'SGVpZ2h0RnJvbVNldHRpbmdzPWZ1bmN0aW9uKHZ0KXtjb25zdCBOdD10aGlzLnZpZXcuZ2V0RGVmYXVsdFJvd0hlaWdodCgpO2xldCBIdD1kdC5yb3dIZWlnaHRzO2lmKG51bGwhPUh0KXtzd2l0Y2godHlwZW9mIEh0KXtjYXNlIm9iamVjdCI6SHQ9SHRbdnRdO2JyZWFrO2Nhc2UiZnVuY3Rp'@;
put 'b24iOkh0PUh0KHZ0KX0ic3RyaW5nIj09dHlwZW9mIEh0JiYoSHQ9cGFyc2VJbnQoSHQsMTApKX1yZXR1cm4gbnVsbCE9SHQmJkh0PE50P050Okh0fSx0aGlzLmdldFJvd0hlaWdodD1mdW5jdGlvbih2dCxOdCl7bGV0IEh0PWYuX2dldFJvd0hlaWdodEZyb21TZXR0aW5ncyh2dCk7cmV0dXJu'@;
put 'IEh0PWYucnVuSG9va3MoIm1vZGlmeVJvd0hlaWdodCIsSHQsdnQsTnQpLEh0fSx0aGlzLmNvdW50U291cmNlUm93cz1mdW5jdGlvbigpe3JldHVybiBELmNvdW50Um93cygpfSx0aGlzLmNvdW50U291cmNlQ29scz1mdW5jdGlvbigpe3JldHVybiBELmNvdW50Rmlyc3RSb3dLZXlzKCl9LHRo'@;
put 'aXMuY291bnRSb3dzPWZ1bmN0aW9uKCl7cmV0dXJuIE0uZ2V0TGVuZ3RoKCl9LHRoaXMuY291bnRDb2xzPWZ1bmN0aW9uKCl7Y29uc3QgdnQ9ZHQubWF4Q29scyxOdD10aGlzLmNvbHVtbkluZGV4TWFwcGVyLmdldE5vdFRyaW1tZWRJbmRleGVzTGVuZ3RoKCk7cmV0dXJuIE1hdGgubWluKHZ0'@;
put 'LE50KX0sdGhpcy5jb3VudFJlbmRlcmVkUm93cz1mdW5jdGlvbigpe3JldHVybiBmLnZpZXcuX3d0LmRyYXduP2Yudmlldy5fd3Qud3RUYWJsZS5nZXRSZW5kZXJlZFJvd3NDb3VudCgpOi0xfSx0aGlzLmNvdW50VmlzaWJsZVJvd3M9ZnVuY3Rpb24oKXtyZXR1cm4gZi52aWV3Ll93dC5kcmF3'@;
put 'bj9mLnZpZXcuX3d0Lnd0VGFibGUuZ2V0VmlzaWJsZVJvd3NDb3VudCgpOi0xfSx0aGlzLmNvdW50UmVuZGVyZWRDb2xzPWZ1bmN0aW9uKCl7cmV0dXJuIGYudmlldy5fd3QuZHJhd24/Zi52aWV3Ll93dC53dFRhYmxlLmdldFJlbmRlcmVkQ29sdW1uc0NvdW50KCk6LTF9LHRoaXMuY291bnRW'@;
put 'aXNpYmxlQ29scz1mdW5jdGlvbigpe3JldHVybiBmLnZpZXcuX3d0LmRyYXduP2Yudmlldy5fd3Qud3RUYWJsZS5nZXRWaXNpYmxlQ29sdW1uc0NvdW50KCk6LTF9LHRoaXMuY291bnRSb3dIZWFkZXJzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudmlldy5nZXRSb3dIZWFkZXJzQ291bnQoKX0s'@;
put 'dGhpcy5jb3VudENvbEhlYWRlcnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy52aWV3LmdldENvbHVtbkhlYWRlcnNDb3VudCgpfSx0aGlzLmNvdW50RW1wdHlSb3dzPWZ1bmN0aW9uKCl7bGV0IHZ0PWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdJiZhcmd1bWVudHNb'@;
put 'MF0sTnQ9MDtyZXR1cm4gWCQoZi5jb3VudFJvd3MoKS0xLEh0PT57aWYoZi5pc0VtcHR5Um93KEh0KSlOdCs9MTtlbHNlIGlmKCEwPT09dnQpcmV0dXJuITF9KSxOdH0sdGhpcy5jb3VudEVtcHR5Q29scz1mdW5jdGlvbigpe2xldCB2dD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFy'@;
put 'Z3VtZW50c1swXSYmYXJndW1lbnRzWzBdLE50PTA7cmV0dXJuIFgkKGYuY291bnRDb2xzKCktMSxIdD0+e2lmKGYuaXNFbXB0eUNvbChIdCkpTnQrPTE7ZWxzZSBpZighMD09PXZ0KXJldHVybiExfSksTnR9LHRoaXMuaXNFbXB0eVJvdz1mdW5jdGlvbih2dCl7cmV0dXJuIGR0LmlzRW1wdHlS'@;
put 'b3cuY2FsbChmLHZ0KX0sdGhpcy5pc0VtcHR5Q29sPWZ1bmN0aW9uKHZ0KXtyZXR1cm4gZHQuaXNFbXB0eUNvbC5jYWxsKGYsdnQpfSx0aGlzLnNlbGVjdENlbGw9ZnVuY3Rpb24odnQsTnQsSHQsSG4pe2xldCB0cj0hKGFyZ3VtZW50cy5sZW5ndGg+NCYmdm9pZCAwIT09YXJndW1lbnRzWzRd'@;
put 'KXx8YXJndW1lbnRzWzRdLGFyPSEoYXJndW1lbnRzLmxlbmd0aD41JiZ2b2lkIDAhPT1hcmd1bWVudHNbNV0pfHxhcmd1bWVudHNbNV07cmV0dXJuIV9jKHZ0KSYmIV9jKE50KSYmdGhpcy5zZWxlY3RDZWxscyhbW3Z0LE50LEh0LEhuXV0sdHIsYXIpfSx0aGlzLnNlbGVjdENlbGxzPWZ1bmN0'@;
put 'aW9uKCl7bGV0IHZ0PWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTpbW11dLEh0PSEoYXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0pfHxhcmd1bWVudHNbMl07ITE9PT0oIShhcmd1bWVudHMubGVuZ3RoPjEmJnZv'@;
put 'aWQgMCE9PWFyZ3VtZW50c1sxXSl8fGFyZ3VtZW50c1sxXSkmJmJlLnN1c3BlbmQoKTtjb25zdCBIbj1Hci5zZWxlY3RDZWxscyh2dCk7cmV0dXJuIEhuJiZIdCYmZi5saXN0ZW4oKSxiZS5yZXN1bWUoKSxIbn0sdGhpcy5zZWxlY3RDb2x1bW5zPWZ1bmN0aW9uKHZ0KXtyZXR1cm4gR3Iuc2Vs'@;
put 'ZWN0Q29sdW1ucyh2dCxhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06dnQsYXJndW1lbnRzLmxlbmd0aD4yP2FyZ3VtZW50c1syXTp2b2lkIDApfSx0aGlzLnNlbGVjdFJvd3M9ZnVuY3Rpb24odnQpe3JldHVybiBHci5zZWxlY3RSb3dzKHZ0'@;
put 'LGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp2dCxhcmd1bWVudHMubGVuZ3RoPjI/YXJndW1lbnRzWzJdOnZvaWQgMCl9LHRoaXMuZGVzZWxlY3RDZWxsPWZ1bmN0aW9uKCl7R3IuZGVzZWxlY3QoKX0sdGhpcy5zZWxlY3RBbGw9ZnVuY3Rp'@;
put 'b24oKXtsZXQgdnQ9IShhcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSl8fGFyZ3VtZW50c1swXSxOdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06dnQsSHQ9YXJndW1lbnRzLmxlbmd0aD4yP2FyZ3VtZW50c1sy'@;
put 'XTp2b2lkIDA7YmUuc2tpcE5leHRTY3JvbGxDeWNsZSgpLEdyLnNlbGVjdEFsbCh2dCxOdCxIdCl9O2NvbnN0IHdpPSh2dCxOdCk9PnZ0LmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChOdCwxLCEwKTt0aGlzLnNjcm9sbFZpZXdwb3J0VG89ZnVuY3Rpb24odnQsTnQpe3ZhciBIdDsibnVtYmVy'@;
put 'Ij09dHlwZW9mIHZ0JiYodnQ9e3Jvdzphcmd1bWVudHNbMF0sY29sOmFyZ3VtZW50c1sxXSx2ZXJ0aWNhbFNuYXA6YXJndW1lbnRzWzJdPyJib3R0b20iOiJ0b3AiLGhvcml6b250YWxTbmFwOmFyZ3VtZW50c1szXT8iZW5kIjoic3RhcnQiLGNvbnNpZGVySGlkZGVuSW5kZXhlczpudWxsPT09'@;
put 'KEh0PWFyZ3VtZW50c1s0XSl8fHZvaWQgMD09PUh0fHxIdH0pO2NvbnN0e3JvdzpIbixjb2w6dHIsY29uc2lkZXJIaWRkZW5JbmRleGVzOmFyfT12dD8/e307bGV0IEhyPUhuLHFyPXRyO2lmKG1sKE50KSYmdGhpcy5hZGRIb29rT25jZSgiYWZ0ZXJTY3JvbGwiLE50KSx2b2lkIDA9PT1hcnx8'@;
put 'YXIpe2NvbnN0IHByPU51bWJlci5pc0ludGVnZXIoSG4pJiZIbj49MCwkbj1OdW1iZXIuaXNJbnRlZ2VyKHRyKSYmdHI+PTAsZHI9cHI/d2kodGhpcy5yb3dJbmRleE1hcHBlcixIbik6dm9pZCAwLFVyPSRuP3dpKHRoaXMuY29sdW1uSW5kZXhNYXBwZXIsdHIpOnZvaWQgMDtpZihudWxsPT09'@;
put 'ZHJ8fG51bGw9PT1VcilyZXR1cm4hMTtIcj1wcj9mLnJvd0luZGV4TWFwcGVyLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoZHIpOkhuLHFyPSRuP2YuY29sdW1uSW5kZXhNYXBwZXIuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChVcik6dHJ9Y29uc3Qgb249TnVtYmVyLmlzSW50'@;
put 'ZWdlcihIcikseW49TnVtYmVyLmlzSW50ZWdlcihxcik7bGV0IHBuPSExO3JldHVybiBvbiYmSHI+PTAmJnluJiZxcj49MD9wbj1mLnZpZXcuc2Nyb2xsVmlld3BvcnQoZi5fY3JlYXRlQ2VsbENvb3JkcyhIcixxciksdnQuaG9yaXpvbnRhbFNuYXAsdnQudmVydGljYWxTbmFwKTpvbiYmSHI+'@;
put 'PTAmJih5biYmcXI8MHx8IXluKT9wbj1mLnZpZXcuc2Nyb2xsVmlld3BvcnRWZXJ0aWNhbGx5KEhyLHZ0LnZlcnRpY2FsU25hcCk6eW4mJnFyPj0wJiYob24mJkhyPDB8fCFvbikmJihwbj1mLnZpZXcuc2Nyb2xsVmlld3BvcnRIb3Jpem9udGFsbHkocXIsdnQuaG9yaXpvbnRhbFNuYXApKSxt'@;
put 'bChOdCkmJihwbj90aGlzLnZpZXcucmVuZGVyKCk6KHRoaXMucmVtb3ZlSG9vaygiYWZ0ZXJTY3JvbGwiLE50KSx0aGlzLl9yZWdpc3Rlck1pY3JvdGFzaygoKT0+TnQoKSkpKSxwbn0sdGhpcy5zY3JvbGxUb0ZvY3VzZWRDZWxsPWZ1bmN0aW9uKHZ0KXtpZighdGhpcy5zZWxlY3Rpb24uaXNT'@;
put 'ZWxlY3RlZCgpKXJldHVybiExO21sKHZ0KSYmdGhpcy5hZGRIb29rT25jZSgiYWZ0ZXJTY3JvbGwiLHZ0KTtjb25zdHtoaWdobGlnaHQ6TnR9PXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSxIdD10aGlzLnNjcm9sbFZpZXdwb3J0VG8oTnQudG9PYmplY3QoKSk7cmV0dXJuIEh0P3RoaXMu'@;
put 'dmlldy5yZW5kZXIoKTptbCh2dCkmJih0aGlzLnJlbW92ZUhvb2soImFmdGVyU2Nyb2xsIix2dCksdGhpcy5fcmVnaXN0ZXJNaWNyb3Rhc2soKCk9PnZ0KCkpKSxIdH0sdGhpcy5kZXN0cm95PWZ1bmN0aW9uKCl7aWYoZi5fY2xlYXJUaW1lb3V0cygpLGYuX2NsZWFySW1tZWRpYXRlcygpLGYu'@;
put 'dmlldyYmZi52aWV3LmRlc3Ryb3koKSxEJiZELmRlc3Ryb3koKSxEPW51bGwsdGhpcy5nZXRTaG9ydGN1dE1hbmFnZXIoKS5kZXN0cm95KCkscHQuY2xlYXJDYWNoZSgpLERYLmRlbGV0ZSh0aGlzLmd1aWQpLGNQKGYpKXtjb25zdCB2dD10aGlzLnJvb3REb2N1bWVudC5xdWVyeVNlbGVjdG9y'@;
put 'KCIuaG90LWRpc3BsYXktbGljZW5zZS1pbmZvIik7dnQmJnZ0LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodnQpfXhwKGYucm9vdEVsZW1lbnQpLHYuZGVzdHJveSgpLHJlJiZyZS5kZXN0cm95KCksZi5iYXRjaEV4ZWN1dGlvbigoKT0+e2Yucm93SW5kZXhNYXBwZXIudW5yZWdpc3RlckFsbCgp'@;
put 'LGYuY29sdW1uSW5kZXhNYXBwZXIudW5yZWdpc3RlckFsbCgpLHZuLmdldEl0ZW1zKCkuZm9yRWFjaCh2dD0+e2xldFssTnRdPXZ0O050LmRlc3Ryb3koKX0pLHZuLmNsZWFyKCksZi5ydW5Ib29rcygiYWZ0ZXJEZXN0cm95Iil9LCEwKSxTYS5nZXRTaW5nbGV0b24oKS5kZXN0cm95KGYpLFhv'@;
put 'KGYsKHZ0LE50LEh0KT0+e21sKHZ0KT9IdFtOdF09ZnVuY3Rpb24gZWEodnQpe3JldHVybigpPT57dGhyb3cgbmV3IEVycm9yKGBUaGUgIiR7dnR9IiBtZXRob2QgY2Fubm90IGJlIGNhbGxlZCBiZWNhdXNlIHRoaXMgSGFuZHNvbnRhYmxlIGluc3RhbmNlIGhhcyBiZWVuIGRlc3Ryb3llZGAp'@;
put 'fX0oTnQpOiJndWlkIiE9PU50JiYoSHRbTnRdPW51bGwpfSksZi5pc0Rlc3Ryb3llZD0hMCxNJiZNLmRlc3Ryb3koKSxNPW51bGwsWj1udWxsLEdyPW51bGwscmU9bnVsbCxmPW51bGx9LHRoaXMuZ2V0QWN0aXZlRWRpdG9yPWZ1bmN0aW9uKCl7cmV0dXJuIHJlLmdldEFjdGl2ZUVkaXRvcigp'@;
put 'fSx0aGlzLmdldEZpcnN0UmVuZGVyZWRWaXNpYmxlUm93PWZ1bmN0aW9uKCl7cmV0dXJuIGYudmlldy5nZXRGaXJzdFJlbmRlcmVkVmlzaWJsZVJvdygpfSx0aGlzLmdldExhc3RSZW5kZXJlZFZpc2libGVSb3c9ZnVuY3Rpb24oKXtyZXR1cm4gZi52aWV3LmdldExhc3RSZW5kZXJlZFZpc2li'@;
put 'bGVSb3coKX0sdGhpcy5nZXRGaXJzdFJlbmRlcmVkVmlzaWJsZUNvbHVtbj1mdW5jdGlvbigpe3JldHVybiBmLnZpZXcuZ2V0Rmlyc3RSZW5kZXJlZFZpc2libGVDb2x1bW4oKX0sdGhpcy5nZXRMYXN0UmVuZGVyZWRWaXNpYmxlQ29sdW1uPWZ1bmN0aW9uKCl7cmV0dXJuIGYudmlldy5nZXRM'@;
put 'YXN0UmVuZGVyZWRWaXNpYmxlQ29sdW1uKCl9LHRoaXMuZ2V0Rmlyc3RGdWxseVZpc2libGVSb3c9ZnVuY3Rpb24oKXtyZXR1cm4gZi52aWV3LmdldEZpcnN0RnVsbHlWaXNpYmxlUm93KCl9LHRoaXMuZ2V0TGFzdEZ1bGx5VmlzaWJsZVJvdz1mdW5jdGlvbigpe3JldHVybiBmLnZpZXcuZ2V0'@;
put 'TGFzdEZ1bGx5VmlzaWJsZVJvdygpfSx0aGlzLmdldEZpcnN0RnVsbHlWaXNpYmxlQ29sdW1uPWZ1bmN0aW9uKCl7cmV0dXJuIGYudmlldy5nZXRGaXJzdEZ1bGx5VmlzaWJsZUNvbHVtbigpfSx0aGlzLmdldExhc3RGdWxseVZpc2libGVDb2x1bW49ZnVuY3Rpb24oKXtyZXR1cm4gZi52aWV3'@;
put 'LmdldExhc3RGdWxseVZpc2libGVDb2x1bW4oKX0sdGhpcy5nZXRGaXJzdFBhcnRpYWxseVZpc2libGVSb3c9ZnVuY3Rpb24oKXtyZXR1cm4gZi52aWV3LmdldEZpcnN0UGFydGlhbGx5VmlzaWJsZVJvdygpfSx0aGlzLmdldExhc3RQYXJ0aWFsbHlWaXNpYmxlUm93PWZ1bmN0aW9uKCl7cmV0'@;
put 'dXJuIGYudmlldy5nZXRMYXN0UGFydGlhbGx5VmlzaWJsZVJvdygpfSx0aGlzLmdldEZpcnN0UGFydGlhbGx5VmlzaWJsZUNvbHVtbj1mdW5jdGlvbigpe3JldHVybiBmLnZpZXcuZ2V0Rmlyc3RQYXJ0aWFsbHlWaXNpYmxlQ29sdW1uKCl9LHRoaXMuZ2V0TGFzdFBhcnRpYWxseVZpc2libGVD'@;
put 'b2x1bW49ZnVuY3Rpb24oKXtyZXR1cm4gZi52aWV3LmdldExhc3RQYXJ0aWFsbHlWaXNpYmxlQ29sdW1uKCl9LHRoaXMuZ2V0UGx1Z2luPWZ1bmN0aW9uKHZ0KXtyZXR1cm4gdm4uZ2V0SXRlbShwMSh2dCkpfSx0aGlzLmdldFBsdWdpbk5hbWU9ZnVuY3Rpb24odnQpe3JldHVybiB2dD09PXRo'@;
put 'aXMudW5kb1JlZG8/dGhpcy51bmRvUmVkby5jb25zdHJ1Y3Rvci5QTFVHSU5fS0VZOnZuLmdldElkKHZ0KX0sdGhpcy5nZXRJbnN0YW5jZT1mdW5jdGlvbigpe3JldHVybiBmfSx0aGlzLmFkZEhvb2s9ZnVuY3Rpb24odnQsTnQsSHQpe1NhLmdldFNpbmdsZXRvbigpLmFkZCh2dCxOdCxmLEh0'@;
put 'KX0sdGhpcy5oYXNIb29rPWZ1bmN0aW9uKHZ0KXtyZXR1cm4gU2EuZ2V0U2luZ2xldG9uKCkuaGFzKHZ0LGYpfHxTYS5nZXRTaW5nbGV0b24oKS5oYXModnQpfSx0aGlzLmFkZEhvb2tPbmNlPWZ1bmN0aW9uKHZ0LE50LEh0KXtTYS5nZXRTaW5nbGV0b24oKS5vbmNlKHZ0LE50LGYsSHQpfSx0'@;
put 'aGlzLnJlbW92ZUhvb2s9ZnVuY3Rpb24odnQsTnQpe1NhLmdldFNpbmdsZXRvbigpLnJlbW92ZSh2dCxOdCxmKX0sdGhpcy5ydW5Ib29rcz1mdW5jdGlvbih2dCxOdCxIdCxIbix0cixhcixIcil7cmV0dXJuIFNhLmdldFNpbmdsZXRvbigpLnJ1bihmLHZ0LE50LEh0LEhuLHRyLGFyLEhyKX0s'@;
put 'dGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlPWZ1bmN0aW9uKHZ0LE50KXtyZXR1cm4gWjNlKGR0Lmxhbmd1YWdlLHZ0LE50KX0sdGhpcy50b0hUTUw9KCk9PkskKHRoaXMpLHRoaXMudG9UYWJsZUVsZW1lbnQ9KCk9Pntjb25zdCB2dD10aGlzLnJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50KCJk'@;
put 'aXYiKTtyZXR1cm4gdnQuaW5zZXJ0QWRqYWNlbnRIVE1MKCJhZnRlcmJlZ2luIixLJCh0aGlzKSksdnQuZmlyc3RFbGVtZW50Q2hpbGR9LHRoaXMudGltZW91dHM9W10sdGhpcy51c2VUaGVtZT12dD0+e3RoaXMudmlldy5nZXRTdHlsZXNIYW5kbGVyKCkudXNlVGhlbWUodnQpLHRoaXMucnVu'@;
put 'SG9va3MoImFmdGVyU2V0VGhlbWUiLHZ0LCEhRWUpfSx0aGlzLmdldEN1cnJlbnRUaGVtZU5hbWU9KCk9PnRoaXMudmlldy5nZXRTdHlsZXNIYW5kbGVyKCkuZ2V0VGhlbWVOYW1lKCksdGhpcy5fcmVnaXN0ZXJUaW1lb3V0PWZ1bmN0aW9uKHZ0KXtsZXQgSHQ9dnQ7ImZ1bmN0aW9uIj09dHlw'@;
put 'ZW9mIEh0JiYoSHQ9c2V0VGltZW91dChIdCxhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06MCkpLHRoaXMudGltZW91dHMucHVzaChIdCl9LHRoaXMuX2NsZWFyVGltZW91dHM9ZnVuY3Rpb24oKXtZbih0aGlzLnRpbWVvdXRzLHZ0PT57Y2xl'@;
put 'YXJUaW1lb3V0KHZ0KX0pfSx0aGlzLmltbWVkaWF0ZXM9W10sdGhpcy5fcmVnaXN0ZXJJbW1lZGlhdGU9ZnVuY3Rpb24odnQpe3RoaXMuaW1tZWRpYXRlcy5wdXNoKHNldEltbWVkaWF0ZSh2dCkpfSx0aGlzLl9jbGVhckltbWVkaWF0ZXM9ZnVuY3Rpb24oKXtZbih0aGlzLmltbWVkaWF0ZXMs'@;
put 'dnQ9PntjbGVhckltbWVkaWF0ZSh2dCl9KX0sdGhpcy5fcmVnaXN0ZXJNaWNyb3Rhc2s9ZnVuY3Rpb24odnQpe3RoaXMucm9vdFdpbmRvdy5xdWV1ZU1pY3JvdGFzaygoKT0+e3RoaXMuaXNEZXN0cm95ZWR8fHZ0KCl9KX0sdGhpcy5fZ2V0RWRpdG9yTWFuYWdlcj1mdW5jdGlvbigpe3JldHVy'@;
put 'biByZX07Y29uc3QgZmE9cXJ0KHtoYW5kbGVFdmVudDooKT0+Zi5pc0xpc3RlbmluZygpLGJlZm9yZUtleURvd246dnQ9PnRoaXMucnVuSG9va3MoImJlZm9yZUtleURvd24iLHZ0KSxhZnRlcktleURvd246dnQ9Pnt0aGlzLmlzRGVzdHJveWVkfHxmLnJ1bkhvb2tzKCJhZnRlckRvY3VtZW50'@;
put 'S2V5RG93biIsdnQpfSxvd25lcldpbmRvdzp0aGlzLnJvb3RXaW5kb3d9KTt0aGlzLmFkZEhvb2soImJlZm9yZU9uQ2VsbE1vdXNlRG93biIsdnQ9PnshMT09PXZ0LmN0cmxLZXkmJiExPT09dnQubWV0YUtleSYmZmEucmVsZWFzZVByZXNzZWRLZXlzKCl9KSx0aGlzLmdldFNob3J0Y3V0TWFu'@;
put 'YWdlcj1mdW5jdGlvbigpe3JldHVybiBmYX0sdGhpcy5nZXRGb2N1c01hbmFnZXI9ZnVuY3Rpb24oKXtyZXR1cm4gY2V9LG5LKCkuZm9yRWFjaCh2dD0+e2NvbnN0IE50PUlFKHZ0KTt2bi5hZGRJdGVtKHZ0LG5ldyBOdCh0aGlzKSl9KSxmdW5jdGlvbiBLaXQoYyl7WyRpdCxHaXRdLmZvckVh'@;
put 'Y2gobD0+bChjKSl9KGYpLGZhLnNldEFjdGl2ZUNvbnRleHROYW1lKCJncmlkIiksU2EuZ2V0U2luZ2xldG9uKCkucnVuKGYsImNvbnN0cnVjdCIpfWZ1bmN0aW9uIEVwZShjLGwsYSl7Yy5hZGRFdmVudExpc3RlbmVyKGwsYSwhMSl9ZnVuY3Rpb24gVHBlKGMsbCxhKXtjLnJlbW92ZUV2ZW50'@;
put 'TGlzdGVuZXIobCxhLCExKX1mdW5jdGlvbiBWUChjKXtyZXR1cm4gYy5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3LmdldENvbXB1dGVkU3R5bGUoYyl9ZnVuY3Rpb24gQXBlKGMpe2NvbnN0IGE9e21pbkhlaWdodDoyMDAsbWF4SGVpZ2h0OjMwMCxtaW5XaWR0aDoxMDAsbWF4V2lkdGg6MzAw'@;
put 'LHRleHRDb250ZW50OmNlPT5jZS52YWx1ZSwuLi5hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06e319LGQ9Yy5ib2R5LGg9Yy5jcmVhdGVUZXh0Tm9kZSgiIiksZj1jLmNyZWF0ZUVsZW1lbnQoInNwYW4iKTtsZXQgdjtmdW5jdGlvbiBNKCl7'@;
put 'dmFyIGNlLGJlO2gudGV4dENvbnRlbnQ9YS50ZXh0Q29udGVudCh2KSxmLnN0eWxlLnBvc2l0aW9uPSJhYnNvbHV0ZSIsZi5zdHlsZS5mb250U2l6ZT1WUCh2KS5mb250U2l6ZSxmLnN0eWxlLmZvbnRGYW1pbHk9VlAodikuZm9udEZhbWlseSxmLnN0eWxlLndoaXRlU3BhY2U9InByZSIsZC5h'@;
put 'cHBlbmRDaGlsZChmKTtjb25zdCBFZT1wYXJzZUludCgobnVsbD09PShjZT1WUCh2KSl8fHZvaWQgMD09PWNlP3ZvaWQgMDpjZS5wYWRkaW5nSW5saW5lU3RhcnQpfHwwLDEwKSxCZT1wYXJzZUludCgobnVsbD09PShiZT1WUCh2KSl8fHZvaWQgMD09PWJlP3ZvaWQgMDpiZS5wYWRkaW5nSW5s'@;
put 'aW5lRW5kKXx8MCwxMCkscWU9Zi5jbGllbnRXaWR0aCtFZStCZSsxO2QucmVtb3ZlQ2hpbGQoZik7Y29uc3QgcnQ9di5zdHlsZTtydC5oZWlnaHQ9YCR7YS5taW5IZWlnaHR9cHhgLHJ0LndpZHRoPWEubWluV2lkdGg+cWU/YCR7YS5taW5XaWR0aH1weGA6cWU+YS5tYXhXaWR0aD9gJHthLm1h'@;
put 'eFdpZHRofXB4YDpgJHtxZX1weGA7Y29uc3QgcHQ9di5zY3JvbGxIZWlnaHQ/di5zY3JvbGxIZWlnaHQtMTowO2EubWluSGVpZ2h0PnB0P3J0LmhlaWdodD1gJHthLm1pbkhlaWdodH1weGA6YS5tYXhIZWlnaHQ8cHQ/KHJ0LmhlaWdodD1gJHthLm1heEhlaWdodH1weGAscnQub3ZlcmZsb3dZ'@;
put 'PSJ2aXNpYmxlIik6cnQuaGVpZ2h0PWAke3B0fXB4YH1mdW5jdGlvbiBEKCl7Yy5kZWZhdWx0Vmlldy5zZXRUaW1lb3V0KE0sMCl9cmV0dXJue2luaXQ6ZnVuY3Rpb24gcmUoY2UsYmUpe2xldCBFZT1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXSYmYXJndW1lbnRz'@;
put 'WzJdO3Y9Y2UsZnVuY3Rpb24gWihjZSl7aWYoY2UmJmNlLm1pbkhlaWdodClpZigiaW5oZXJpdCI9PT1jZS5taW5IZWlnaHQpYS5taW5IZWlnaHQ9di5jbGllbnRIZWlnaHQ7ZWxzZXtjb25zdCBiZT1wYXJzZUludChjZS5taW5IZWlnaHQsMTApO2lzTmFOKGJlKXx8KGEubWluSGVpZ2h0PWJl'@;
put 'KX1pZihjZSYmY2UubWF4SGVpZ2h0KWlmKCJpbmhlcml0Ij09PWNlLm1heEhlaWdodClhLm1heEhlaWdodD12LmNsaWVudEhlaWdodDtlbHNle2NvbnN0IGJlPXBhcnNlSW50KGNlLm1heEhlaWdodCwxMCk7aXNOYU4oYmUpfHwoYS5tYXhIZWlnaHQ9YmUpfWlmKGNlJiZjZS5taW5XaWR0aClp'@;
put 'ZigiaW5oZXJpdCI9PT1jZS5taW5XaWR0aClhLm1pbldpZHRoPXYuY2xpZW50V2lkdGg7ZWxzZXtjb25zdCBiZT1wYXJzZUludChjZS5taW5XaWR0aCwxMCk7aXNOYU4oYmUpfHwoYS5taW5XaWR0aD1iZSl9aWYoY2UmJmNlLm1heFdpZHRoKWlmKCJpbmhlcml0Ij09PWNlLm1heFdpZHRoKWEu'@;
put 'bWF4V2lkdGg9di5jbGllbnRXaWR0aDtlbHNle2NvbnN0IGJlPXBhcnNlSW50KGNlLm1heFdpZHRoLDEwKTtpc05hTihiZSl8fChhLm1heFdpZHRoPWJlKX1mLmZpcnN0Q2hpbGR8fChmLmNsYXNzTmFtZT0iYXV0b1Jlc2l6ZSIsZi5zdHlsZS5kaXNwbGF5PSJpbmxpbmUtYmxvY2siLGYuYXBw'@;
put 'ZW5kQ2hpbGQoaCkpfShiZSksIlRFWFRBUkVBIj09PXYubm9kZU5hbWUmJih2LnN0eWxlLnJlc2l6ZT0ibm9uZSIsdi5zdHlsZS5oZWlnaHQ9YCR7YS5taW5IZWlnaHR9cHhgLHYuc3R5bGUubWluV2lkdGg9YCR7YS5taW5XaWR0aH1weGAsdi5zdHlsZS5tYXhXaWR0aD1gJHthLm1heFdpZHRo'@;
put 'fXB4YCx2LnN0eWxlLm92ZXJmbG93WT0iaGlkZGVuIiksRWUmJihFcGUodiwiaW5wdXQiLE0pLEVwZSh2LCJrZXlkb3duIixEKSksTSgpfSxyZXNpemU6TSx1bk9ic2VydmUoKXtUcGUodiwiaW5wdXQiLE0pLFRwZSh2LCJrZXlkb3duIixEKX19fWZ1bmN0aW9uIGtwZShjLGwpe2NvbnN0IGE9'@;
put 'UyQobCksZD1sLnZhbHVlLnNwbGl0KCJcbiIpO2xldCBoPWEsZj0wO2ZvcihsZXQgdj0wO3Y8ZC5sZW5ndGg7disrKXswIT09diYmKGYrPWRbdi0xXS5sZW5ndGgrMSk7Y29uc3QgRD1mK2Rbdl0ubGVuZ3RoO2lmKCJob21lIj09PWM/aD1mOiJlbmQiPT09YyYmKGg9RCksYTw9RClicmVha313'@;
put 'RShsLGgpfWZ1bmN0aW9uIGk5KGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBxaXQoYyl7dmFyIGw9ZnVuY3Rpb24gWGl0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxs'@;
put 'KGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmci'@;
put 'KTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jb25zdCBCUD0iaHRfZWRpdG9yX2hpZGRlbiIsRHBlPSJ0'@;
put 'ZXh0RWRpdG9yIjtjbGFzcyBhOSBleHRlbmRzIGtfe3N0YXRpYyBnZXQgRURJVE9SX1RZUEUoKXtyZXR1cm4idGV4dCJ9Y29uc3RydWN0b3IobCl7c3VwZXIobCksaTkodGhpcywiZXZlbnRNYW5hZ2VyIixuZXcgajIodGhpcykpLGk5KHRoaXMsImF1dG9SZXNpemUiLEFwZSh0aGlzLmhvdC5y'@;
put 'b290RG9jdW1lbnQpKSxpOSh0aGlzLCJURVhUQVJFQSIsdm9pZCAwKSxpOSh0aGlzLCJ0ZXh0YXJlYVN0eWxlIix2b2lkIDApLGk5KHRoaXMsIlRFWFRBUkVBX1BBUkVOVCIsdm9pZCAwKSxpOSh0aGlzLCJ0ZXh0YXJlYVBhcmVudFN0eWxlIix2b2lkIDApLGk5KHRoaXMsImxheWVyQ2xhc3Mi'@;
put 'LHZvaWQgMCksdGhpcy5ldmVudE1hbmFnZXI9bmV3IGoyKHRoaXMpLHRoaXMuY3JlYXRlRWxlbWVudHMoKSx0aGlzLmJpbmRFdmVudHMoKSx0aGlzLmhvdC5hZGRIb29rT25jZSgiYWZ0ZXJEZXN0cm95IiwoKT0+dGhpcy5kZXN0cm95KCkpfWdldFZhbHVlKCl7cmV0dXJuIHRoaXMuVEVYVEFS'@;
put 'RUEudmFsdWV9c2V0VmFsdWUobCl7dGhpcy5URVhUQVJFQS52YWx1ZT1sfW9wZW4oKXt0aGlzLnJlZnJlc2hEaW1lbnNpb25zKCksdGhpcy5zaG93RWRpdGFibGVFbGVtZW50KCksdGhpcy5ob3QuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuc2V0QWN0aXZlQ29udGV4dE5hbWUoImVkaXRvciIpLHRo'@;
put 'aXMucmVnaXN0ZXJTaG9ydGN1dHMoKX1jbG9zZSgpe3RoaXMuYXV0b1Jlc2l6ZS51bk9ic2VydmUoKSx2RSh0aGlzLmhvdC5yb290RG9jdW1lbnQuYWN0aXZlRWxlbWVudCx0aGlzLmhvdC5yb290RWxlbWVudCkmJnRoaXMuaG90Lmxpc3RlbigpLHRoaXMuaGlkZUVkaXRhYmxlRWxlbWVudCgp'@;
put 'LHRoaXMudW5yZWdpc3RlclNob3J0Y3V0cygpfXByZXBhcmUobCxhLGQsaCxmLHYpe2NvbnN0IE09dGhpcy5zdGF0ZTtpZihzdXBlci5wcmVwYXJlKGwsYSxkLGgsZix2KSwhdi5yZWFkT25seSl7dGhpcy5yZWZyZXNoRGltZW5zaW9ucyghMCk7Y29uc3R7YWxsb3dJbnZhbGlkOkR9PXY7RCYm'@;
put 'IXRoaXMuaXNPcGVuZWQoKSYmKHRoaXMuVEVYVEFSRUEudmFsdWU9IiIpLE0hPT1sdS5GSU5JU0hFRCYmIXRoaXMuaXNPcGVuZWQoKSYmdGhpcy5oaWRlRWRpdGFibGVFbGVtZW50KCl9fWJlZ2luRWRpdGluZyhsLGEpe3RoaXMuc3RhdGU9PT1sdS5WSVJHSU4mJih0aGlzLlRFWFRBUkVBLnZh'@;
put 'bHVlPSIiLHN1cGVyLmJlZ2luRWRpdGluZyhsLGEpKX1mb2N1cygpe3RoaXMuVEVYVEFSRUEuc2VsZWN0KCksd0UodGhpcy5URVhUQVJFQSx0aGlzLlRFWFRBUkVBLnZhbHVlLmxlbmd0aCl9Y3JlYXRlRWxlbWVudHMoKXtjb25zdHtyb290RG9jdW1lbnQ6bH09dGhpcy5ob3Q7dGhpcy5URVhU'@;
put 'QVJFQT1sLmNyZWF0ZUVsZW1lbnQoIlRFWFRBUkVBIiksdm8odGhpcy5URVhUQVJFQSxbWyJkYXRhLWhvdC1pbnB1dCIsIiJdLE43KC0xKV0pLFRpKHRoaXMuVEVYVEFSRUEsImhhbmRzb250YWJsZUlucHV0IiksdGhpcy50ZXh0YXJlYVN0eWxlPXRoaXMuVEVYVEFSRUEuc3R5bGUsdGhpcy50'@;
put 'ZXh0YXJlYVN0eWxlLndpZHRoPTAsdGhpcy50ZXh0YXJlYVN0eWxlLmhlaWdodD0wLHRoaXMudGV4dGFyZWFTdHlsZS5vdmVyZmxvd1k9InZpc2libGUiLHRoaXMuVEVYVEFSRUFfUEFSRU5UPWwuY3JlYXRlRWxlbWVudCgiRElWIiksVGkodGhpcy5URVhUQVJFQV9QQVJFTlQsImhhbmRzb250'@;
put 'YWJsZUlucHV0SG9sZGVyIikscG8odGhpcy5URVhUQVJFQV9QQVJFTlQsdGhpcy5sYXllckNsYXNzKSYmbG8odGhpcy5URVhUQVJFQV9QQVJFTlQsdGhpcy5sYXllckNsYXNzKSxUaSh0aGlzLlRFWFRBUkVBX1BBUkVOVCxCUCksdGhpcy50ZXh0YXJlYVBhcmVudFN0eWxlPXRoaXMuVEVYVEFS'@;
put 'RUFfUEFSRU5ULnN0eWxlLHRoaXMuVEVYVEFSRUFfUEFSRU5ULmFwcGVuZENoaWxkKHRoaXMuVEVYVEFSRUEpLHRoaXMuaG90LnJvb3RFbGVtZW50LmFwcGVuZENoaWxkKHRoaXMuVEVYVEFSRUFfUEFSRU5UKX1oaWRlRWRpdGFibGVFbGVtZW50KCl7dGZlKCkmJih0aGlzLnRleHRhcmVhU3R5'@;
put 'bGUudGV4dEluZGVudD0iLTk5OTk5cHgiKSx0aGlzLnRleHRhcmVhU3R5bGUub3ZlcmZsb3dZPSJ2aXNpYmxlIix0aGlzLnRleHRhcmVhUGFyZW50U3R5bGUub3BhY2l0eT0iMCIsdGhpcy50ZXh0YXJlYVBhcmVudFN0eWxlLmhlaWdodD0iMXB4Iixsbyh0aGlzLlRFWFRBUkVBX1BBUkVOVCx0'@;
put 'aGlzLmxheWVyQ2xhc3MpLFRpKHRoaXMuVEVYVEFSRUFfUEFSRU5ULEJQKX1zaG93RWRpdGFibGVFbGVtZW50KCl7dGhpcy50ZXh0YXJlYVBhcmVudFN0eWxlLmhlaWdodD0iIix0aGlzLnRleHRhcmVhUGFyZW50U3R5bGUub3ZlcmZsb3c9IiIsdGhpcy50ZXh0YXJlYVBhcmVudFN0eWxlLnBv'@;
put 'c2l0aW9uPSIiLHRoaXMudGV4dGFyZWFQYXJlbnRTdHlsZVt0aGlzLmhvdC5pc1J0bCgpPyJsZWZ0IjoicmlnaHQiXT0iYXV0byIsdGhpcy50ZXh0YXJlYVBhcmVudFN0eWxlLm9wYWNpdHk9IjEiLHRoaXMudGV4dGFyZWFTdHlsZS50ZXh0SW5kZW50PSIiO2NvbnN0IGw9dGhpcy5URVhUQVJF'@;
put 'QV9QQVJFTlQuY2hpbGROb2RlcztsZXQgYT0hMTtHYShsLmxlbmd0aC0xLGQ9PntpZihwbyhsW2RdLCJoYW5kc29udGFibGVFZGl0b3IiKSlyZXR1cm4gYT0hMCwhMX0pLHBvKHRoaXMuVEVYVEFSRUFfUEFSRU5ULEJQKSYmbG8odGhpcy5URVhUQVJFQV9QQVJFTlQsQlApLGE/KHRoaXMubGF5'@;
put 'ZXJDbGFzcz0iaHRfZWRpdG9yX3Zpc2libGUiLFRpKHRoaXMuVEVYVEFSRUFfUEFSRU5ULHRoaXMubGF5ZXJDbGFzcykpOih0aGlzLmxheWVyQ2xhc3M9dGhpcy5nZXRFZGl0ZWRDZWxsc0xheWVyQ2xhc3MoKSxUaSh0aGlzLlRFWFRBUkVBX1BBUkVOVCx0aGlzLmxheWVyQ2xhc3MpKX1yZWZy'@;
put 'ZXNoVmFsdWUoKXtjb25zdCBsPXRoaXMuaG90LnRvUGh5c2ljYWxSb3codGhpcy5yb3cpLGE9dGhpcy5ob3QuZ2V0U291cmNlRGF0YUF0Q2VsbChsLHRoaXMuY29sKTt0aGlzLm9yaWdpbmFsVmFsdWU9YSx0aGlzLnNldFZhbHVlKGEpLHRoaXMucmVmcmVzaERpbWVuc2lvbnMoKX1yZWZyZXNo'@;
put 'RGltZW5zaW9ucygpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdJiZhcmd1bWVudHNbMF07aWYodGhpcy5zdGF0ZSE9PWx1LkVESVRJTkcmJiFsKXJldHVybjtpZih0aGlzLlREPXRoaXMuZ2V0RWRpdGVkQ2VsbCgpLCF0aGlzLlREKXJldHVybiB2b2lk'@;
put 'KGx8fHRoaXMuY2xvc2UoKSk7Y29uc3R7dG9wOmEsc3RhcnQ6ZCx3aWR0aDpoLG1heFdpZHRoOmYsaGVpZ2h0OnYsbWF4SGVpZ2h0Ok19PXRoaXMuZ2V0RWRpdGVkQ2VsbFJlY3QoKTt0aGlzLnRleHRhcmVhUGFyZW50U3R5bGUudG9wPWAke2F9cHhgLHRoaXMudGV4dGFyZWFQYXJlbnRTdHls'@;
put 'ZVt0aGlzLmhvdC5pc1J0bCgpPyJyaWdodCI6ImxlZnQiXT1gJHtkfXB4YCx0aGlzLnNob3dFZGl0YWJsZUVsZW1lbnQoKTtjb25zdCBEPXRoaXMuaG90LnJvb3RXaW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLlREKTt0aGlzLlRFWFRBUkVBLnN0eWxlLmZvbnRTaXplPUQuZm9udFNpemUs'@;
put 'dGhpcy5URVhUQVJFQS5zdHlsZS5mb250RmFtaWx5PUQuZm9udEZhbWlseSx0aGlzLlRFWFRBUkVBLnN0eWxlLmJhY2tncm91bmRDb2xvcj10aGlzLlRELnN0eWxlLmJhY2tncm91bmRDb2xvcix0aGlzLmF1dG9SZXNpemUuaW5pdCh0aGlzLlRFWFRBUkVBLHttaW5XaWR0aDpNYXRoLm1pbiho'@;
put 'LGYpLG1pbkhlaWdodDpNYXRoLm1pbih2LE0pLG1heFdpZHRoOmYsbWF4SGVpZ2h0Ok19LCEwKX1iaW5kRXZlbnRzKCl7TyQoKSYmdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcih0aGlzLlRFWFRBUkVBLCJmb2N1c291dCIsKCk9PnRoaXMuZmluaXNoRWRpdGluZyghMSkpLHRo'@;
put 'aXMuYWRkSG9vaygiYWZ0ZXJTY3JvbGxIb3Jpem9udGFsbHkiLCgpPT50aGlzLnJlZnJlc2hEaW1lbnNpb25zKCkpLHRoaXMuYWRkSG9vaygiYWZ0ZXJTY3JvbGxWZXJ0aWNhbGx5IiwoKT0+dGhpcy5yZWZyZXNoRGltZW5zaW9ucygpKSx0aGlzLmFkZEhvb2soImFmdGVyQ29sdW1uUmVzaXpl'@;
put 'IiwoKT0+e3RoaXMucmVmcmVzaERpbWVuc2lvbnMoKSx0aGlzLnN0YXRlPT09bHUuRURJVElORyYmdGhpcy5mb2N1cygpfSksdGhpcy5hZGRIb29rKCJhZnRlclJvd1Jlc2l6ZSIsKCk9Pnt0aGlzLnJlZnJlc2hEaW1lbnNpb25zKCksdGhpcy5zdGF0ZT09PWx1LkVESVRJTkcmJnRoaXMuZm9j'@;
put 'dXMoKX0pfWFsbG93S2V5RXZlbnRQcm9wYWdhdGlvbigpe31kZXN0cm95KCl7dGhpcy5ldmVudE1hbmFnZXIuZGVzdHJveSgpLHRoaXMuY2xlYXJIb29rcygpfXJlZ2lzdGVyU2hvcnRjdXRzKCl7Y29uc3QgYT10aGlzLmhvdC5nZXRTaG9ydGN1dE1hbmFnZXIoKS5nZXRDb250ZXh0KCJlZGl0'@;
put 'b3IiKSxoPSgpPT57dGhpcy5ob3Qucm9vdERvY3VtZW50LmV4ZWNDb21tYW5kKCJpbnNlcnRUZXh0IiwhMSwiXG4iKX07YS5hZGRTaG9ydGN1dHMoW3trZXlzOltbIkNvbnRyb2wiLCJFbnRlciJdXSxjYWxsYmFjazooKT0+KGgoKSwhMSkscnVuT25seUlmOmY9PiF0aGlzLmhvdC5zZWxlY3Rp'@;
put 'b24uaXNNdWx0aXBsZSgpJiYhZi5hbHRLZXl9LHtrZXlzOltbIk1ldGEiLCJFbnRlciJdXSxjYWxsYmFjazooKT0+KGgoKSwhMSkscnVuT25seUlmOigpPT4hdGhpcy5ob3Quc2VsZWN0aW9uLmlzTXVsdGlwbGUoKX0se2tleXM6W1siQWx0IiwiRW50ZXIiXV0sY2FsbGJhY2s6KCk9PihoKCks'@;
put 'ITEpfSx7a2V5czpbWyJIb21lIl1dLGNhbGxiYWNrOihmLHYpPT57bGV0W01dPXY7a3BlKE0sdGhpcy5URVhUQVJFQSl9fSx7a2V5czpbWyJFbmQiXV0sY2FsbGJhY2s6KGYsdik9PntsZXRbTV09djtrcGUoTSx0aGlzLlRFWFRBUkVBKX19XSx7cnVuT25seUlmOigpPT5QYSh0aGlzLmhvdC5n'@;
put 'ZXRTZWxlY3RlZCgpKSxncm91cDpEcGV9KX11bnJlZ2lzdGVyU2hvcnRjdXRzKCl7dGhpcy5ob3QuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuZ2V0Q29udGV4dCgiZWRpdG9yIikucmVtb3ZlU2hvcnRjdXRzQnlHcm91cChEcGUpfX1mdW5jdGlvbiBvVChjLGwsYSxkLGgsZix2KXtjb25zdCBNPXYu'@;
put 'YXJpYVRhZ3MsRD1bXSxaPVtdLHJlPVtdLGNlPVtdO3YuY2xhc3NOYW1lJiZUaShsLHYuY2xhc3NOYW1lKSx2LnJlYWRPbmx5PyhELnB1c2godi5yZWFkT25seUNlbGxDbGFzc05hbWUpLE0mJmNlLnB1c2goazJlKCkpKTpNJiZyZS5wdXNoKGsyZSgpWzBdKSwhMT09PXYudmFsaWQmJnYuaW52'@;
put 'YWxpZENlbGxDbGFzc05hbWU/KEQucHVzaCh2LmludmFsaWRDZWxsQ2xhc3NOYW1lKSxNJiZjZS5wdXNoKEQyZSgpKSk6KFoucHVzaCh2LmludmFsaWRDZWxsQ2xhc3NOYW1lKSxNJiZyZS5wdXNoKEQyZSgpWzBdKSksITE9PT12LndvcmRXcmFwJiZ2Lm5vV29yZFdyYXBDbGFzc05hbWUmJkQu'@;
put 'cHVzaCh2Lm5vV29yZFdyYXBDbGFzc05hbWUpLCFmJiZ2LnBsYWNlaG9sZGVyJiZELnB1c2godi5wbGFjZWhvbGRlckNlbGxDbGFzc05hbWUpLGxvKGwsWiksVGkobCxEKSxqNyhsLHJlKSx2byhsLGNlKX1mdW5jdGlvbiBBZyhjLGwsYSxkLGgsZix2KXtvVC5hcHBseSh0aGlzLFtjLGwsYSxk'@;
put 'LGgsZix2XSk7bGV0IE09ZjshTSYmdi5wbGFjZWhvbGRlciYmKE09di5wbGFjZWhvbGRlciksTT1sYyhNKSx2LnRyaW1XaGl0ZXNwYWNlJiYoTT1NLnRyaW0oKSksUG0obCxNKX1vVC5SRU5ERVJFUl9UWVBFPSJiYXNlIixBZy5SRU5ERVJFUl9UWVBFPSJ0ZXh0Ijtjb25zdCBJcGU9e0NFTExf'@;
put 'VFlQRToidGV4dCIsZWRpdG9yOmE5LHJlbmRlcmVyOkFnfTtmdW5jdGlvbiBoMyhjLGwpe2NvbnN0IGE9bmV3IHhwZShjLGx8fHt9LERLKTtyZXR1cm4gYS5pbml0KCksYX1HMihJcGUpLGgzLmVkaXRvcnM9e0Jhc2VFZGl0b3I6a199LGgzLkNvcmU9ZnVuY3Rpb24oYyl7cmV0dXJuIG5ldyB4'@;
put 'cGUoYyxhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06e30sREspfSxoMy5EZWZhdWx0U2V0dGluZ3M9b3BlKCksaDMuaG9va3M9U2EuZ2V0U2luZ2xldG9uKCksaDMuQ2VsbENvb3Jkcz1pUCxoMy5DZWxsUmFuZ2U9Z0ssaDMucGFja2FnZU5h'@;
put 'bWU9ImhhbmRzb250YWJsZSIsaDMuYnVpbGREYXRlPSIyNC8wNC8yMDI1IDEwOjU5OjAwIixoMy52ZXJzaW9uPSIxNS4zLjAiLGgzLmxhbmd1YWdlcz17ZGljdGlvbmFyeUtleXM6bG50LGdldExhbmd1YWdlRGljdGlvbmFyeTpVM2UsZ2V0TGFuZ3VhZ2VzRGljdGlvbmFyaWVzOmZ1bmN0aW9u'@;
put 'IGZudCgpe3JldHVybiBkbnQoKX0scmVnaXN0ZXJMYW5ndWFnZURpY3Rpb25hcnk6ejNlLGdldFRyYW5zbGF0ZWRQaHJhc2U6WjNlfTtjb25zdCBvcz1oMyxuYXQ9WyJjb250YWluZXIiXSxJWD1uZXcgTWFwLFJwZT0iVGhlIEhhbmRzb250YWJsZSBpbnN0YW5jZSBib3VuZCB0byB0aGlzIGNv'@;
put 'bXBvbmVudCB3YXMgZGVzdHJveWVkIGFuZCBjYW5ub3QgYmUgdXNlZCBwcm9wZXJseS4iO2xldCBZbT0oKCk9PntjbGFzcyBje2dldEluc3RhbmNlKGEpe2NvbnN0IGQ9SVguZ2V0KGEpO3JldHVybiBkLmlzRGVzdHJveWVkPyhjb25zb2xlLndhcm4oUnBlKSxudWxsKTpkfXJlZ2lzdGVySW5z'@;
put 'dGFuY2UoYSxkKXtyZXR1cm4gSVguc2V0KGEsZCl9cmVtb3ZlSW5zdGFuY2UoYSl7cmV0dXJuIElYLmRlbGV0ZShhKX1zdGF0aWMgXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9O3N0YXRpYyBcdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9'@;
put 'KX1yZXR1cm4gY30pKCk7Y29uc3QgcmF0PU9iamVjdC5rZXlzKG9zLkRlZmF1bHRTZXR0aW5ncyksTHBlPW9zLmhvb2tzLmdldFJlZ2lzdGVyZWQoKTtsZXQgT3BlPSgoKT0+e2NsYXNzIGN7bWVyZ2VTZXR0aW5ncyhhKXtjb25zdCBkPSJzZXR0aW5ncyJpbiBhJiYib2JqZWN0Ij09dHlwZW9m'@;
put 'IGEuc2V0dGluZ3MsaD1kP2Euc2V0dGluZ3M6e307cmV0dXJuIExwZS5jb25jYXQocmF0KS5mb3JFYWNoKHY9Pntjb25zdCBNPUxwZS5pbmRleE9mKHYpPi0xO2xldCBEO2QmJk0mJihEPWEuc2V0dGluZ3Nbdl0pLHZvaWQgMCE9PWFbdl0mJihEPWFbdl0pLHZvaWQgMCE9PUQmJihoW3ZdPSJu'@;
put 'Z1pvbmUiaW4gYSYmImZ1bmN0aW9uIj09dHlwZW9mIEQmJk0/ZnVuY3Rpb24oLi4uWil7cmV0dXJuIGEubmdab25lLnJ1bigoKT0+RC5hcHBseSh0aGlzLFopKX06RCl9KSxofXByZXBhcmVDaGFuZ2VzKGEpe2NvbnN0IGQ9e307cmV0dXJuIE9iamVjdC5rZXlzKGEpLmZvckVhY2goZj0+e2Eu'@;
put 'aGFzT3duUHJvcGVydHkoZikmJihkW2ZdPWFbZl0uY3VycmVudFZhbHVlKX0pLGR9c3RhdGljIFx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfTtzdGF0aWMgXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSl9cmV0dXJuIGN9KSgpLERfPSgo'@;
put 'KT0+e2NsYXNzIGN7X2hvdFRhYmxlUmVnaXN0ZXJlcjtfaG90U2V0dGluZ3NSZXNvbHZlcjtuZ1pvbmU7Y29udGFpbmVyO19faG90SW5zdGFuY2U9bnVsbDtjb2x1bW5zQ29tcG9uZW50cz1bXTtzZXR0aW5ncztob3RJZD0iIjthY3RpdmVIZWFkZXJDbGFzc05hbWU7YWxsb3dFbXB0eTthbGxv'@;
put 'd0h0bWw7YWxsb3dJbnNlcnRDb2x1bW47YWxsb3dJbnNlcnRSb3c7YWxsb3dJbnZhbGlkO2FsbG93UmVtb3ZlQ29sdW1uO2FsbG93UmVtb3ZlUm93O2FyaWFUYWdzO2F1dG9Db2x1bW5TaXplO2F1dG9Sb3dTaXplO2F1dG9XcmFwQ29sO2F1dG9XcmFwUm93O2JpbmRSb3dzV2l0aEhlYWRlcnM7'@;
put 'Y2VsbDtjZWxscztjaGVja2VkVGVtcGxhdGU7Y2xhc3NOYW1lO2NvbEhlYWRlcnM7Y29sbGFwc2libGVDb2x1bW5zO2NvbHVtbkhlYWRlckhlaWdodDtjb2x1bW5zO2NvbHVtblNvcnRpbmc7Y29sdW1uU3VtbWFyeTtjb2xXaWR0aHM7Y29tbWVudGVkQ2VsbENsYXNzTmFtZTtjb21tZW50cztj'@;
put 'b250ZXh0TWVudTtjb3B5YWJsZTtjb3B5UGFzdGU7Y29ycmVjdEZvcm1hdDtjdXJyZW50Q29sQ2xhc3NOYW1lO2N1cnJlbnRIZWFkZXJDbGFzc05hbWU7Y3VycmVudFJvd0NsYXNzTmFtZTtjdXN0b21Cb3JkZXJzO2RhdGE7ZGF0YURvdE5vdGF0aW9uO2RhdGFTY2hlbWE7ZGF0ZUZvcm1hdDtk'@;
put 'YXRlUGlja2VyQ29uZmlnO2RlZmF1bHREYXRlO3RhYk5hdmlnYXRpb247dGhlbWVOYW1lO2Rpc2FibGVWaXN1YWxTZWxlY3Rpb247ZHJhZ1RvU2Nyb2xsO2Ryb3Bkb3duTWVudTtlZGl0b3I7ZW50ZXJCZWdpbnNFZGl0aW5nO2VudGVyTW92ZXM7ZmlsbEhhbmRsZTtmaWx0ZXI7ZmlsdGVyaW5n'@;
put 'Q2FzZVNlbnNpdGl2ZTtmaWx0ZXJzO2ZpeGVkQ29sdW1uc0xlZnQ7Zml4ZWRDb2x1bW5zU3RhcnQ7Zml4ZWRSb3dzQm90dG9tO2ZpeGVkUm93c1RvcDtmb3JtdWxhcztmcmFnbWVudFNlbGVjdGlvbjtoZWFkZXJDbGFzc05hbWU7aGVpZ2h0O2hpZGRlbkNvbHVtbnM7aGlkZGVuUm93cztpbnZh'@;
put 'bGlkQ2VsbENsYXNzTmFtZTtpbWVGYXN0RWRpdDtsYWJlbDtsYW5ndWFnZTtsYXlvdXREaXJlY3Rpb247bGljZW5zZUtleTtsb2NhbGU7bWFudWFsQ29sdW1uRnJlZXplO21hbnVhbENvbHVtbk1vdmU7bWFudWFsQ29sdW1uUmVzaXplO21hbnVhbFJvd01vdmU7bWFudWFsUm93UmVzaXplO21h'@;
put 'eENvbHM7bWF4Um93czttZXJnZUNlbGxzO21pbkNvbHM7bWluUm93czttaW5TcGFyZUNvbHM7bWluU3BhcmVSb3dzO211bHRpQ29sdW1uU29ydGluZztuYXZpZ2FibGVIZWFkZXJzO25lc3RlZEhlYWRlcnM7bmVzdGVkUm93cztub1dvcmRXcmFwQ2xhc3NOYW1lO251bWVyaWNGb3JtYXQ7b2Jz'@;
put 'ZXJ2ZURPTVZpc2liaWxpdHk7b3V0c2lkZUNsaWNrRGVzZWxlY3RzO3BlcnNpc3RlbnRTdGF0ZTtwbGFjZWhvbGRlcjtwbGFjZWhvbGRlckNlbGxDbGFzc05hbWU7cHJldmVudE92ZXJmbG93O3ByZXZlbnRXaGVlbDtyZWFkT25seTtyZWFkT25seUNlbGxDbGFzc05hbWU7cmVuZGVyQWxsQ29s'@;
put 'dW1ucztyZW5kZXJBbGxSb3dzO3JlbmRlcmVyO3Jvd0hlYWRlcnM7cm93SGVhZGVyV2lkdGg7cm93SGVpZ2h0cztzZWFyY2g7c2VsZWN0aW9uTW9kZTtzZWxlY3RPcHRpb25zO3NraXBDb2x1bW5PblBhc3RlO3NraXBSb3dPblBhc3RlO3NvcnRCeVJlbGV2YW5jZTtzb3VyY2U7c3RhcnRDb2xz'@;
put 'O3N0YXJ0Um93cztzdHJldGNoSDtzdHJpY3Q7dGFibGVDbGFzc05hbWU7dGFiTW92ZXM7dGl0bGU7dHJpbURyb3Bkb3duO3RyaW1Sb3dzO3RyaW1XaGl0ZXNwYWNlO3R5cGU7dW5jaGVja2VkVGVtcGxhdGU7dW5kbzt2YWxpZGF0b3I7dmlld3BvcnRDb2x1bW5SZW5kZXJpbmdPZmZzZXQ7dmll'@;
put 'd3BvcnRSb3dSZW5kZXJpbmdPZmZzZXQ7dmlzaWJsZVJvd3M7d2lkdGg7d29yZFdyYXA7YWZ0ZXJBZGRDaGlsZDthZnRlckF1dG9maWxsO2FmdGVyQmVnaW5FZGl0aW5nO2FmdGVyQ2VsbE1ldGFSZXNldDthZnRlckNoYW5nZTthZnRlckNoYW5nZXNPYnNlcnZlZDthZnRlckNvbHVtbkNvbGxh'@;
put 'cHNlO2FmdGVyQ29sdW1uRXhwYW5kO2FmdGVyQ29sdW1uRnJlZXplO2FmdGVyQ29sdW1uTW92ZTthZnRlckNvbHVtblJlc2l6ZTthZnRlckNvbHVtblNlcXVlbmNlQ2hhbmdlO2FmdGVyQ29sdW1uU29ydDthZnRlckNvbHVtblVuZnJlZXplO2FmdGVyQ29udGV4dE1lbnVEZWZhdWx0T3B0aW9u'@;
put 'czthZnRlckNvbnRleHRNZW51SGlkZTthZnRlckNvbnRleHRNZW51U2hvdzthZnRlckNvcHk7YWZ0ZXJDb3B5TGltaXQ7YWZ0ZXJDcmVhdGVDb2w7YWZ0ZXJDcmVhdGVSb3c7YWZ0ZXJDdXQ7YWZ0ZXJEZXNlbGVjdDthZnRlckRlc3Ryb3k7YWZ0ZXJEZXRhY2hDaGlsZDthZnRlckRvY3VtZW50'@;
put 'S2V5RG93bjthZnRlckRyYXdTZWxlY3Rpb247YWZ0ZXJEcm9wZG93bk1lbnVEZWZhdWx0T3B0aW9uczthZnRlckRyb3Bkb3duTWVudUhpZGU7YWZ0ZXJEcm9wZG93bk1lbnVTaG93O2FmdGVyRmlsdGVyO2FmdGVyRm9ybXVsYXNWYWx1ZXNVcGRhdGU7YWZ0ZXJHZXRDZWxsTWV0YTthZnRlckdl'@;
put 'dENvbEhlYWRlcjthZnRlckdldENvbHVtbkhlYWRlclJlbmRlcmVyczthZnRlckdldFJvd0hlYWRlcjthZnRlckdldFJvd0hlYWRlclJlbmRlcmVyczthZnRlckhpZGVDb2x1bW5zO2FmdGVySGlkZVJvd3M7YWZ0ZXJJbml0O2FmdGVyTGFuZ3VhZ2VDaGFuZ2U7YWZ0ZXJMaXN0ZW47YWZ0ZXJM'@;
put 'b2FkRGF0YTthZnRlck1lcmdlQ2VsbHM7YWZ0ZXJNb2RpZnlUcmFuc2Zvcm1FbmQ7YWZ0ZXJNb2RpZnlUcmFuc2Zvcm1Gb2N1czthZnRlck1vZGlmeVRyYW5zZm9ybVN0YXJ0O2FmdGVyTW9tZW50dW1TY3JvbGw7YWZ0ZXJOYW1lZEV4cHJlc3Npb25BZGRlZDthZnRlck5hbWVkRXhwcmVzc2lv'@;
put 'blJlbW92ZWQ7YWZ0ZXJPbkNlbGxDb250ZXh0TWVudTthZnRlck9uQ2VsbENvcm5lckRibENsaWNrO2FmdGVyT25DZWxsQ29ybmVyTW91c2VEb3duO2FmdGVyT25DZWxsTW91c2VEb3duO2FmdGVyT25DZWxsTW91c2VPdXQ7YWZ0ZXJPbkNlbGxNb3VzZU92ZXI7YWZ0ZXJPbkNlbGxNb3VzZVVw'@;
put 'O2FmdGVyUGFzdGU7YWZ0ZXJQbHVnaW5zSW5pdGlhbGl6ZWQ7YWZ0ZXJSZWRvO2FmdGVyUmVkb1N0YWNrQ2hhbmdlO2FmdGVyUmVmcmVzaERpbWVuc2lvbnM7YWZ0ZXJSZW1vdmVDZWxsTWV0YTthZnRlclJlbW92ZUNvbDthZnRlclJlbW92ZVJvdzthZnRlclJlbmRlcjthZnRlclJlbmRlcmVy'@;
put 'O2FmdGVyUm93TW92ZTthZnRlclJvd1Jlc2l6ZTthZnRlclJvd1NlcXVlbmNlQ2hhbmdlO2FmdGVyU2Nyb2xsSG9yaXpvbnRhbGx5O2FmdGVyU2Nyb2xsVmVydGljYWxseTthZnRlclNjcm9sbDthZnRlclNlbGVjdENvbHVtbnM7YWZ0ZXJTZWxlY3Rpb247YWZ0ZXJTZWxlY3Rpb25CeVByb3A7'@;
put 'YWZ0ZXJTZWxlY3Rpb25FbmQ7YWZ0ZXJTZWxlY3Rpb25FbmRCeVByb3A7YWZ0ZXJTZWxlY3Rpb25Gb2N1c1NldDthZnRlclNlbGVjdFJvd3M7YWZ0ZXJTZXRDZWxsTWV0YTthZnRlclNldERhdGFBdENlbGw7YWZ0ZXJTZXREYXRhQXRSb3dQcm9wO2FmdGVyU2V0U291cmNlRGF0YUF0Q2VsbDth'@;
put 'ZnRlclNldFRoZW1lO2FmdGVyU2hlZXRBZGRlZDthZnRlclNoZWV0UmVuYW1lZDthZnRlclNoZWV0UmVtb3ZlZDthZnRlclRyaW1Sb3c7YWZ0ZXJVbmRvO2FmdGVyVW5kb1N0YWNrQ2hhbmdlO2FmdGVyVW5oaWRlQ29sdW1uczthZnRlclVuaGlkZVJvd3M7YWZ0ZXJVbmxpc3RlbjthZnRlclVu'@;
put 'bWVyZ2VDZWxsczthZnRlclVudHJpbVJvdzthZnRlclVwZGF0ZURhdGE7YWZ0ZXJVcGRhdGVTZXR0aW5nczthZnRlclZhbGlkYXRlO2FmdGVyVmlld3BvcnRDb2x1bW5DYWxjdWxhdG9yT3ZlcnJpZGU7YWZ0ZXJWaWV3cG9ydFJvd0NhbGN1bGF0b3JPdmVycmlkZTthZnRlclZpZXdSZW5kZXI7'@;
put 'YmVmb3JlQWRkQ2hpbGQ7YmVmb3JlQXV0b2ZpbGw7YmVmb3JlQmVnaW5FZGl0aW5nO2JlZm9yZUNlbGxBbGlnbm1lbnQ7YmVmb3JlQ2hhbmdlO2JlZm9yZUNoYW5nZVJlbmRlcjtiZWZvcmVDb2x1bW5Db2xsYXBzZTtiZWZvcmVDb2x1bW5FeHBhbmQ7YmVmb3JlQ29sdW1uRnJlZXplO2JlZm9y'@;
put 'ZUNvbHVtbk1vdmU7YmVmb3JlQ29sdW1uUmVzaXplO2JlZm9yZUNvbHVtblNvcnQ7YmVmb3JlQ29sdW1uV3JhcDtiZWZvcmVDb2x1bW5VbmZyZWV6ZTtiZWZvcmVDb21wb3NpdGlvblN0YXJ0O2JlZm9yZUNvbnRleHRNZW51U2V0SXRlbXM7YmVmb3JlQ29udGV4dE1lbnVTaG93O2JlZm9yZUNv'@;
put 'cHk7YmVmb3JlQ3JlYXRlQ29sO2JlZm9yZUNyZWF0ZVJvdztiZWZvcmVDdXQ7YmVmb3JlRGV0YWNoQ2hpbGQ7YmVmb3JlRHJhd0JvcmRlcnM7YmVmb3JlRHJvcGRvd25NZW51U2V0SXRlbXM7YmVmb3JlRHJvcGRvd25NZW51U2hvdztiZWZvcmVGaWx0ZXI7YmVmb3JlR2V0Q2VsbE1ldGE7YmVm'@;
put 'b3JlSGlkZUNvbHVtbnM7YmVmb3JlSGlkZVJvd3M7YmVmb3JlSGlnaGxpZ2h0aW5nQ29sdW1uSGVhZGVyO2JlZm9yZUhpZ2hsaWdodGluZ1Jvd0hlYWRlcjtiZWZvcmVJbml0O2JlZm9yZUluaXRXYWxrb250YWJsZTtiZWZvcmVLZXlEb3duO2JlZm9yZUxhbmd1YWdlQ2hhbmdlO2JlZm9yZUxv'@;
put 'YWREYXRhO2JlZm9yZU1lcmdlQ2VsbHM7YmVmb3JlT25DZWxsQ29udGV4dE1lbnU7YmVmb3JlT25DZWxsTW91c2VEb3duO2JlZm9yZU9uQ2VsbE1vdXNlT3V0O2JlZm9yZU9uQ2VsbE1vdXNlT3ZlcjtiZWZvcmVPbkNlbGxNb3VzZVVwO2JlZm9yZVBhc3RlO2JlZm9yZVJlZG87YmVmb3JlUmVk'@;
put 'b1N0YWNrQ2hhbmdlO2JlZm9yZVJlZnJlc2hEaW1lbnNpb25zO2JlZm9yZVJlbW92ZUNlbGxDbGFzc05hbWVzO2JlZm9yZVJlbW92ZUNlbGxNZXRhO2JlZm9yZVJlbW92ZUNvbDtiZWZvcmVSZW1vdmVSb3c7YmVmb3JlUmVuZGVyO2JlZm9yZVJlbmRlcmVyO2JlZm9yZVJvd01vdmU7YmVmb3Jl'@;
put 'Um93UmVzaXplO2JlZm9yZVJvd1dyYXA7YmVmb3JlU2VsZWN0Q29sdW1ucztiZWZvcmVTZWxlY3Rpb25Gb2N1c1NldDtiZWZvcmVTZWxlY3Rpb25IaWdobGlnaHRTZXQ7YmVmb3JlU2VsZWN0Um93cztiZWZvcmVTZXRDZWxsTWV0YTtiZWZvcmVTZXRSYW5nZUVuZDtiZWZvcmVTZXRSYW5nZVN0'@;
put 'YXJ0O2JlZm9yZVNldFJhbmdlU3RhcnRPbmx5O2JlZm9yZVN0cmV0Y2hpbmdDb2x1bW5XaWR0aDtiZWZvcmVUb3VjaFNjcm9sbDtiZWZvcmVUcmltUm93O2JlZm9yZVVuZG87YmVmb3JlVW5kb1N0YWNrQ2hhbmdlO2JlZm9yZVVuaGlkZUNvbHVtbnM7YmVmb3JlVW5oaWRlUm93cztiZWZvcmVV'@;
put 'bm1lcmdlQ2VsbHM7YmVmb3JlVW50cmltUm93O2JlZm9yZVVwZGF0ZURhdGE7YmVmb3JlVmFsaWRhdGU7YmVmb3JlVmFsdWVSZW5kZXI7YmVmb3JlVmlld3BvcnRTY3JvbGw7YmVmb3JlVmlld3BvcnRTY3JvbGxIb3Jpem9udGFsbHk7YmVmb3JlVmlld3BvcnRTY3JvbGxWZXJ0aWNhbGx5O2Jl'@;
put 'Zm9yZVZpZXdSZW5kZXI7Y29uc3RydWN0O2luaXQ7bW9kaWZ5QXV0b0NvbHVtblNpemVTZWVkO21vZGlmeUF1dG9maWxsUmFuZ2U7bW9kaWZ5Q29sSGVhZGVyO21vZGlmeUNvbHVtbkhlYWRlckhlaWdodDttb2RpZnlDb2x1bW5IZWFkZXJWYWx1ZTttb2RpZnlDb2xXaWR0aDttb2RpZnlDb3B5'@;
put 'YWJsZVJhbmdlO21vZGlmeUZpbHRlcnNNdWx0aVNlbGVjdFZhbHVlO21vZGlmeUZvY3VzZWRFbGVtZW50O21vZGlmeURhdGE7bW9kaWZ5Rm9jdXNPblRhYk5hdmlnYXRpb247bW9kaWZ5R2V0Q2VsbENvb3Jkczttb2RpZnlHZXRDb29yZHNFbGVtZW50O21vZGlmeVJvd0RhdGE7bW9kaWZ5Um93'@;
put 'SGVhZGVyO21vZGlmeVJvd0hlYWRlcldpZHRoO21vZGlmeVJvd0hlaWdodDttb2RpZnlSb3dIZWlnaHRCeU92ZXJsYXlOYW1lO21vZGlmeVNvdXJjZURhdGE7bW9kaWZ5VHJhbnNmb3JtRW5kO21vZGlmeVRyYW5zZm9ybUZvY3VzO21vZGlmeVRyYW5zZm9ybVN0YXJ0O3BlcnNpc3RlbnRTdGF0'@;
put 'ZUxvYWQ7cGVyc2lzdGVudFN0YXRlUmVzZXQ7cGVyc2lzdGVudFN0YXRlU2F2ZTtjb25zdHJ1Y3RvcihhLGQsaCl7dGhpcy5faG90VGFibGVSZWdpc3RlcmVyPWEsdGhpcy5faG90U2V0dGluZ3NSZXNvbHZlcj1kLHRoaXMubmdab25lPWh9Z2V0IGhvdEluc3RhbmNlKCl7cmV0dXJuIXRoaXMu'@;
put 'X19ob3RJbnN0YW5jZXx8dGhpcy5fX2hvdEluc3RhbmNlJiYhdGhpcy5fX2hvdEluc3RhbmNlLmlzRGVzdHJveWVkP3RoaXMuX19ob3RJbnN0YW5jZToodGhpcy5faG90VGFibGVSZWdpc3RlcmVyLnJlbW92ZUluc3RhbmNlKHRoaXMuaG90SWQpLGNvbnNvbGUud2FybihScGUpLG51bGwpfXNl'@;
put 'dCBob3RJbnN0YW5jZShhKXt0aGlzLl9faG90SW5zdGFuY2U9YX1uZ0FmdGVyVmlld0luaXQoKXtjb25zdCBhPXRoaXMuX2hvdFNldHRpbmdzUmVzb2x2ZXIubWVyZ2VTZXR0aW5ncyh0aGlzKTtpZih0aGlzLmNvbHVtbnNDb21wb25lbnRzLmxlbmd0aD4wKXtjb25zdCBkPVtdO3RoaXMuY29s'@;
put 'dW1uc0NvbXBvbmVudHMuZm9yRWFjaChoPT57ZC5wdXNoKHRoaXMuX2hvdFNldHRpbmdzUmVzb2x2ZXIubWVyZ2VTZXR0aW5ncyhoKSl9KSxhLmNvbHVtbnM9ZH10aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e3RoaXMuaG90SW5zdGFuY2U9bmV3IG9zLkNvcmUodGhpcy5jb250'@;
put 'YWluZXIubmF0aXZlRWxlbWVudCxhKSx0aGlzLmhvdElkJiZ0aGlzLl9ob3RUYWJsZVJlZ2lzdGVyZXIucmVnaXN0ZXJJbnN0YW5jZSh0aGlzLmhvdElkLHRoaXMuaG90SW5zdGFuY2UpLHRoaXMuaG90SW5zdGFuY2UuaW5pdCgpfSl9bmdPbkNoYW5nZXMoYSl7aWYobnVsbD09PXRoaXMuaG90'@;
put 'SW5zdGFuY2UpcmV0dXJuO2NvbnN0IGQ9dGhpcy5faG90U2V0dGluZ3NSZXNvbHZlci5wcmVwYXJlQ2hhbmdlcyhhKTt0aGlzLnVwZGF0ZUhvdFRhYmxlKGQpfW5nT25EZXN0cm95KCl7dGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9Pnt0aGlzLmhvdEluc3RhbmNlJiZ0aGlzLmhv'@;
put 'dEluc3RhbmNlLmRlc3Ryb3koKX0pLHRoaXMuaG90SWQmJnRoaXMuX2hvdFRhYmxlUmVnaXN0ZXJlci5yZW1vdmVJbnN0YW5jZSh0aGlzLmhvdElkKX11cGRhdGVIb3RUYWJsZShhKXt0aGlzLmhvdEluc3RhbmNlJiZ0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e3RoaXMuaG90'@;
put 'SW5zdGFuY2UudXBkYXRlU2V0dGluZ3MoYSwhMSl9KX1vbkFmdGVyQ29sdW1uc0NoYW5nZSgpe2lmKHZvaWQgMCE9PXRoaXMuY29sdW1uc0NvbXBvbmVudHMmJnRoaXMuY29sdW1uc0NvbXBvbmVudHMubGVuZ3RoPjApe2NvbnN0IGE9W107dGhpcy5jb2x1bW5zQ29tcG9uZW50cy5mb3JFYWNo'@;
put 'KGg9PnthLnB1c2godGhpcy5faG90U2V0dGluZ3NSZXNvbHZlci5tZXJnZVNldHRpbmdzKGgpKX0pLHRoaXMudXBkYXRlSG90VGFibGUoe2NvbHVtbnM6YX0pfX1vbkFmdGVyQ29sdW1uc051bWJlckNoYW5nZSgpe2NvbnN0IGE9W107dGhpcy5jb2x1bW5zQ29tcG9uZW50cy5sZW5ndGg+MCYm'@;
put 'dGhpcy5jb2x1bW5zQ29tcG9uZW50cy5mb3JFYWNoKGQ9PnthLnB1c2godGhpcy5faG90U2V0dGluZ3NSZXNvbHZlci5tZXJnZVNldHRpbmdzKGQpKX0pLHRoaXMudXBkYXRlSG90VGFibGUoe2NvbHVtbnM6YX0pfWFkZENvbHVtbihhKXt0aGlzLmNvbHVtbnNDb21wb25lbnRzLnB1c2goYSks'@;
put 'dGhpcy5vbkFmdGVyQ29sdW1uc051bWJlckNoYW5nZSgpfXJlbW92ZUNvbHVtbihhKXtjb25zdCBkPXRoaXMuY29sdW1uc0NvbXBvbmVudHMuaW5kZXhPZihhKTt0aGlzLmNvbHVtbnNDb21wb25lbnRzLnNwbGljZShkLDEpLHRoaXMub25BZnRlckNvbHVtbnNOdW1iZXJDaGFuZ2UoKX1zdGF0'@;
put 'aWMgXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoR2UoWW0pLEdlKE9wZSksR2UoV2EpKX07c3RhdGljIFx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJob3QtdGFibGUiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGQsaCl7aWYoMSZkJiZxYShuYXQsNSksMiZk'@;
put 'KXtsZXQgZjtDaShmPVNpKCkpJiYoaC5jb250YWluZXI9Zi5maXJzdCl9fSxpbnB1dHM6e3NldHRpbmdzOiJzZXR0aW5ncyIsaG90SWQ6ImhvdElkIixhY3RpdmVIZWFkZXJDbGFzc05hbWU6ImFjdGl2ZUhlYWRlckNsYXNzTmFtZSIsYWxsb3dFbXB0eToiYWxsb3dFbXB0eSIsYWxsb3dIdG1s'@;
put 'OiJhbGxvd0h0bWwiLGFsbG93SW5zZXJ0Q29sdW1uOiJhbGxvd0luc2VydENvbHVtbiIsYWxsb3dJbnNlcnRSb3c6ImFsbG93SW5zZXJ0Um93IixhbGxvd0ludmFsaWQ6ImFsbG93SW52YWxpZCIsYWxsb3dSZW1vdmVDb2x1bW46ImFsbG93UmVtb3ZlQ29sdW1uIixhbGxvd1JlbW92ZVJvdzoi'@;
put 'YWxsb3dSZW1vdmVSb3ciLGFyaWFUYWdzOiJhcmlhVGFncyIsYXV0b0NvbHVtblNpemU6ImF1dG9Db2x1bW5TaXplIixhdXRvUm93U2l6ZToiYXV0b1Jvd1NpemUiLGF1dG9XcmFwQ29sOiJhdXRvV3JhcENvbCIsYXV0b1dyYXBSb3c6ImF1dG9XcmFwUm93IixiaW5kUm93c1dpdGhIZWFkZXJz'@;
put 'OiJiaW5kUm93c1dpdGhIZWFkZXJzIixjZWxsOiJjZWxsIixjZWxsczoiY2VsbHMiLGNoZWNrZWRUZW1wbGF0ZToiY2hlY2tlZFRlbXBsYXRlIixjbGFzc05hbWU6ImNsYXNzTmFtZSIsY29sSGVhZGVyczoiY29sSGVhZGVycyIsY29sbGFwc2libGVDb2x1bW5zOiJjb2xsYXBzaWJsZUNvbHVt'@;
put 'bnMiLGNvbHVtbkhlYWRlckhlaWdodDoiY29sdW1uSGVhZGVySGVpZ2h0Iixjb2x1bW5zOiJjb2x1bW5zIixjb2x1bW5Tb3J0aW5nOiJjb2x1bW5Tb3J0aW5nIixjb2x1bW5TdW1tYXJ5OiJjb2x1bW5TdW1tYXJ5Iixjb2xXaWR0aHM6ImNvbFdpZHRocyIsY29tbWVudGVkQ2VsbENsYXNzTmFt'@;
put 'ZToiY29tbWVudGVkQ2VsbENsYXNzTmFtZSIsY29tbWVudHM6ImNvbW1lbnRzIixjb250ZXh0TWVudToiY29udGV4dE1lbnUiLGNvcHlhYmxlOiJjb3B5YWJsZSIsY29weVBhc3RlOiJjb3B5UGFzdGUiLGNvcnJlY3RGb3JtYXQ6ImNvcnJlY3RGb3JtYXQiLGN1cnJlbnRDb2xDbGFzc05hbWU6'@;
put 'ImN1cnJlbnRDb2xDbGFzc05hbWUiLGN1cnJlbnRIZWFkZXJDbGFzc05hbWU6ImN1cnJlbnRIZWFkZXJDbGFzc05hbWUiLGN1cnJlbnRSb3dDbGFzc05hbWU6ImN1cnJlbnRSb3dDbGFzc05hbWUiLGN1c3RvbUJvcmRlcnM6ImN1c3RvbUJvcmRlcnMiLGRhdGE6ImRhdGEiLGRhdGFEb3ROb3Rh'@;
put 'dGlvbjoiZGF0YURvdE5vdGF0aW9uIixkYXRhU2NoZW1hOiJkYXRhU2NoZW1hIixkYXRlRm9ybWF0OiJkYXRlRm9ybWF0IixkYXRlUGlja2VyQ29uZmlnOiJkYXRlUGlja2VyQ29uZmlnIixkZWZhdWx0RGF0ZToiZGVmYXVsdERhdGUiLHRhYk5hdmlnYXRpb246InRhYk5hdmlnYXRpb24iLHRo'@;
put 'ZW1lTmFtZToidGhlbWVOYW1lIixkaXNhYmxlVmlzdWFsU2VsZWN0aW9uOiJkaXNhYmxlVmlzdWFsU2VsZWN0aW9uIixkcmFnVG9TY3JvbGw6ImRyYWdUb1Njcm9sbCIsZHJvcGRvd25NZW51OiJkcm9wZG93bk1lbnUiLGVkaXRvcjoiZWRpdG9yIixlbnRlckJlZ2luc0VkaXRpbmc6ImVudGVy'@;
put 'QmVnaW5zRWRpdGluZyIsZW50ZXJNb3ZlczoiZW50ZXJNb3ZlcyIsZmlsbEhhbmRsZToiZmlsbEhhbmRsZSIsZmlsdGVyOiJmaWx0ZXIiLGZpbHRlcmluZ0Nhc2VTZW5zaXRpdmU6ImZpbHRlcmluZ0Nhc2VTZW5zaXRpdmUiLGZpbHRlcnM6ImZpbHRlcnMiLGZpeGVkQ29sdW1uc0xlZnQ6ImZp'@;
put 'eGVkQ29sdW1uc0xlZnQiLGZpeGVkQ29sdW1uc1N0YXJ0OiJmaXhlZENvbHVtbnNTdGFydCIsZml4ZWRSb3dzQm90dG9tOiJmaXhlZFJvd3NCb3R0b20iLGZpeGVkUm93c1RvcDoiZml4ZWRSb3dzVG9wIixmb3JtdWxhczoiZm9ybXVsYXMiLGZyYWdtZW50U2VsZWN0aW9uOiJmcmFnbWVudFNl'@;
put 'bGVjdGlvbiIsaGVhZGVyQ2xhc3NOYW1lOiJoZWFkZXJDbGFzc05hbWUiLGhlaWdodDoiaGVpZ2h0IixoaWRkZW5Db2x1bW5zOiJoaWRkZW5Db2x1bW5zIixoaWRkZW5Sb3dzOiJoaWRkZW5Sb3dzIixpbnZhbGlkQ2VsbENsYXNzTmFtZToiaW52YWxpZENlbGxDbGFzc05hbWUiLGltZUZhc3RF'@;
put 'ZGl0OiJpbWVGYXN0RWRpdCIsbGFiZWw6ImxhYmVsIixsYW5ndWFnZToibGFuZ3VhZ2UiLGxheW91dERpcmVjdGlvbjoibGF5b3V0RGlyZWN0aW9uIixsaWNlbnNlS2V5OiJsaWNlbnNlS2V5Iixsb2NhbGU6ImxvY2FsZSIsbWFudWFsQ29sdW1uRnJlZXplOiJtYW51YWxDb2x1bW5GcmVlemUi'@;
put 'LG1hbnVhbENvbHVtbk1vdmU6Im1hbnVhbENvbHVtbk1vdmUiLG1hbnVhbENvbHVtblJlc2l6ZToibWFudWFsQ29sdW1uUmVzaXplIixtYW51YWxSb3dNb3ZlOiJtYW51YWxSb3dNb3ZlIixtYW51YWxSb3dSZXNpemU6Im1hbnVhbFJvd1Jlc2l6ZSIsbWF4Q29sczoibWF4Q29scyIsbWF4Um93'@;
put 'czoibWF4Um93cyIsbWVyZ2VDZWxsczoibWVyZ2VDZWxscyIsbWluQ29sczoibWluQ29scyIsbWluUm93czoibWluUm93cyIsbWluU3BhcmVDb2xzOiJtaW5TcGFyZUNvbHMiLG1pblNwYXJlUm93czoibWluU3BhcmVSb3dzIixtdWx0aUNvbHVtblNvcnRpbmc6Im11bHRpQ29sdW1uU29ydGlu'@;
put 'ZyIsbmF2aWdhYmxlSGVhZGVyczoibmF2aWdhYmxlSGVhZGVycyIsbmVzdGVkSGVhZGVyczoibmVzdGVkSGVhZGVycyIsbmVzdGVkUm93czoibmVzdGVkUm93cyIsbm9Xb3JkV3JhcENsYXNzTmFtZToibm9Xb3JkV3JhcENsYXNzTmFtZSIsbnVtZXJpY0Zvcm1hdDoibnVtZXJpY0Zvcm1hdCIs'@;
put 'b2JzZXJ2ZURPTVZpc2liaWxpdHk6Im9ic2VydmVET01WaXNpYmlsaXR5IixvdXRzaWRlQ2xpY2tEZXNlbGVjdHM6Im91dHNpZGVDbGlja0Rlc2VsZWN0cyIscGVyc2lzdGVudFN0YXRlOiJwZXJzaXN0ZW50U3RhdGUiLHBsYWNlaG9sZGVyOiJwbGFjZWhvbGRlciIscGxhY2Vob2xkZXJDZWxs'@;
put 'Q2xhc3NOYW1lOiJwbGFjZWhvbGRlckNlbGxDbGFzc05hbWUiLHByZXZlbnRPdmVyZmxvdzoicHJldmVudE92ZXJmbG93IixwcmV2ZW50V2hlZWw6InByZXZlbnRXaGVlbCIscmVhZE9ubHk6InJlYWRPbmx5IixyZWFkT25seUNlbGxDbGFzc05hbWU6InJlYWRPbmx5Q2VsbENsYXNzTmFtZSIs'@;
put 'cmVuZGVyQWxsQ29sdW1uczoicmVuZGVyQWxsQ29sdW1ucyIscmVuZGVyQWxsUm93czoicmVuZGVyQWxsUm93cyIscmVuZGVyZXI6InJlbmRlcmVyIixyb3dIZWFkZXJzOiJyb3dIZWFkZXJzIixyb3dIZWFkZXJXaWR0aDoicm93SGVhZGVyV2lkdGgiLHJvd0hlaWdodHM6InJvd0hlaWdodHMi'@;
put 'LHNlYXJjaDoic2VhcmNoIixzZWxlY3Rpb25Nb2RlOiJzZWxlY3Rpb25Nb2RlIixzZWxlY3RPcHRpb25zOiJzZWxlY3RPcHRpb25zIixza2lwQ29sdW1uT25QYXN0ZToic2tpcENvbHVtbk9uUGFzdGUiLHNraXBSb3dPblBhc3RlOiJza2lwUm93T25QYXN0ZSIsc29ydEJ5UmVsZXZhbmNlOiJz'@;
put 'b3J0QnlSZWxldmFuY2UiLHNvdXJjZToic291cmNlIixzdGFydENvbHM6InN0YXJ0Q29scyIsc3RhcnRSb3dzOiJzdGFydFJvd3MiLHN0cmV0Y2hIOiJzdHJldGNoSCIsc3RyaWN0OiJzdHJpY3QiLHRhYmxlQ2xhc3NOYW1lOiJ0YWJsZUNsYXNzTmFtZSIsdGFiTW92ZXM6InRhYk1vdmVzIix0'@;
put 'aXRsZToidGl0bGUiLHRyaW1Ecm9wZG93bjoidHJpbURyb3Bkb3duIix0cmltUm93czoidHJpbVJvd3MiLHRyaW1XaGl0ZXNwYWNlOiJ0cmltV2hpdGVzcGFjZSIsdHlwZToidHlwZSIsdW5jaGVja2VkVGVtcGxhdGU6InVuY2hlY2tlZFRlbXBsYXRlIix1bmRvOiJ1bmRvIix2YWxpZGF0b3I6'@;
put 'InZhbGlkYXRvciIsdmlld3BvcnRDb2x1bW5SZW5kZXJpbmdPZmZzZXQ6InZpZXdwb3J0Q29sdW1uUmVuZGVyaW5nT2Zmc2V0Iix2aWV3cG9ydFJvd1JlbmRlcmluZ09mZnNldDoidmlld3BvcnRSb3dSZW5kZXJpbmdPZmZzZXQiLHZpc2libGVSb3dzOiJ2aXNpYmxlUm93cyIsd2lkdGg6Indp'@;
put 'ZHRoIix3b3JkV3JhcDoid29yZFdyYXAiLGFmdGVyQWRkQ2hpbGQ6ImFmdGVyQWRkQ2hpbGQiLGFmdGVyQXV0b2ZpbGw6ImFmdGVyQXV0b2ZpbGwiLGFmdGVyQmVnaW5FZGl0aW5nOiJhZnRlckJlZ2luRWRpdGluZyIsYWZ0ZXJDZWxsTWV0YVJlc2V0OiJhZnRlckNlbGxNZXRhUmVzZXQiLGFm'@;
put 'dGVyQ2hhbmdlOiJhZnRlckNoYW5nZSIsYWZ0ZXJDaGFuZ2VzT2JzZXJ2ZWQ6ImFmdGVyQ2hhbmdlc09ic2VydmVkIixhZnRlckNvbHVtbkNvbGxhcHNlOiJhZnRlckNvbHVtbkNvbGxhcHNlIixhZnRlckNvbHVtbkV4cGFuZDoiYWZ0ZXJDb2x1bW5FeHBhbmQiLGFmdGVyQ29sdW1uRnJlZXpl'@;
put 'OiJhZnRlckNvbHVtbkZyZWV6ZSIsYWZ0ZXJDb2x1bW5Nb3ZlOiJhZnRlckNvbHVtbk1vdmUiLGFmdGVyQ29sdW1uUmVzaXplOiJhZnRlckNvbHVtblJlc2l6ZSIsYWZ0ZXJDb2x1bW5TZXF1ZW5jZUNoYW5nZToiYWZ0ZXJDb2x1bW5TZXF1ZW5jZUNoYW5nZSIsYWZ0ZXJDb2x1bW5Tb3J0OiJh'@;
put 'ZnRlckNvbHVtblNvcnQiLGFmdGVyQ29sdW1uVW5mcmVlemU6ImFmdGVyQ29sdW1uVW5mcmVlemUiLGFmdGVyQ29udGV4dE1lbnVEZWZhdWx0T3B0aW9uczoiYWZ0ZXJDb250ZXh0TWVudURlZmF1bHRPcHRpb25zIixhZnRlckNvbnRleHRNZW51SGlkZToiYWZ0ZXJDb250ZXh0TWVudUhpZGUi'@;
put 'LGFmdGVyQ29udGV4dE1lbnVTaG93OiJhZnRlckNvbnRleHRNZW51U2hvdyIsYWZ0ZXJDb3B5OiJhZnRlckNvcHkiLGFmdGVyQ29weUxpbWl0OiJhZnRlckNvcHlMaW1pdCIsYWZ0ZXJDcmVhdGVDb2w6ImFmdGVyQ3JlYXRlQ29sIixhZnRlckNyZWF0ZVJvdzoiYWZ0ZXJDcmVhdGVSb3ciLGFm'@;
put 'dGVyQ3V0OiJhZnRlckN1dCIsYWZ0ZXJEZXNlbGVjdDoiYWZ0ZXJEZXNlbGVjdCIsYWZ0ZXJEZXN0cm95OiJhZnRlckRlc3Ryb3kiLGFmdGVyRGV0YWNoQ2hpbGQ6ImFmdGVyRGV0YWNoQ2hpbGQiLGFmdGVyRG9jdW1lbnRLZXlEb3duOiJhZnRlckRvY3VtZW50S2V5RG93biIsYWZ0ZXJEcmF3'@;
put 'U2VsZWN0aW9uOiJhZnRlckRyYXdTZWxlY3Rpb24iLGFmdGVyRHJvcGRvd25NZW51RGVmYXVsdE9wdGlvbnM6ImFmdGVyRHJvcGRvd25NZW51RGVmYXVsdE9wdGlvbnMiLGFmdGVyRHJvcGRvd25NZW51SGlkZToiYWZ0ZXJEcm9wZG93bk1lbnVIaWRlIixhZnRlckRyb3Bkb3duTWVudVNob3c6'@;
put 'ImFmdGVyRHJvcGRvd25NZW51U2hvdyIsYWZ0ZXJGaWx0ZXI6ImFmdGVyRmlsdGVyIixhZnRlckZvcm11bGFzVmFsdWVzVXBkYXRlOiJhZnRlckZvcm11bGFzVmFsdWVzVXBkYXRlIixhZnRlckdldENlbGxNZXRhOiJhZnRlckdldENlbGxNZXRhIixhZnRlckdldENvbEhlYWRlcjoiYWZ0ZXJH'@;
put 'ZXRDb2xIZWFkZXIiLGFmdGVyR2V0Q29sdW1uSGVhZGVyUmVuZGVyZXJzOiJhZnRlckdldENvbHVtbkhlYWRlclJlbmRlcmVycyIsYWZ0ZXJHZXRSb3dIZWFkZXI6ImFmdGVyR2V0Um93SGVhZGVyIixhZnRlckdldFJvd0hlYWRlclJlbmRlcmVyczoiYWZ0ZXJHZXRSb3dIZWFkZXJSZW5kZXJl'@;
put 'cnMiLGFmdGVySGlkZUNvbHVtbnM6ImFmdGVySGlkZUNvbHVtbnMiLGFmdGVySGlkZVJvd3M6ImFmdGVySGlkZVJvd3MiLGFmdGVySW5pdDoiYWZ0ZXJJbml0IixhZnRlckxhbmd1YWdlQ2hhbmdlOiJhZnRlckxhbmd1YWdlQ2hhbmdlIixhZnRlckxpc3RlbjoiYWZ0ZXJMaXN0ZW4iLGFmdGVy'@;
put 'TG9hZERhdGE6ImFmdGVyTG9hZERhdGEiLGFmdGVyTWVyZ2VDZWxsczoiYWZ0ZXJNZXJnZUNlbGxzIixhZnRlck1vZGlmeVRyYW5zZm9ybUVuZDoiYWZ0ZXJNb2RpZnlUcmFuc2Zvcm1FbmQiLGFmdGVyTW9kaWZ5VHJhbnNmb3JtRm9jdXM6ImFmdGVyTW9kaWZ5VHJhbnNmb3JtRm9jdXMiLGFm'@;
put 'dGVyTW9kaWZ5VHJhbnNmb3JtU3RhcnQ6ImFmdGVyTW9kaWZ5VHJhbnNmb3JtU3RhcnQiLGFmdGVyTW9tZW50dW1TY3JvbGw6ImFmdGVyTW9tZW50dW1TY3JvbGwiLGFmdGVyTmFtZWRFeHByZXNzaW9uQWRkZWQ6ImFmdGVyTmFtZWRFeHByZXNzaW9uQWRkZWQiLGFmdGVyTmFtZWRFeHByZXNz'@;
put 'aW9uUmVtb3ZlZDoiYWZ0ZXJOYW1lZEV4cHJlc3Npb25SZW1vdmVkIixhZnRlck9uQ2VsbENvbnRleHRNZW51OiJhZnRlck9uQ2VsbENvbnRleHRNZW51IixhZnRlck9uQ2VsbENvcm5lckRibENsaWNrOiJhZnRlck9uQ2VsbENvcm5lckRibENsaWNrIixhZnRlck9uQ2VsbENvcm5lck1vdXNl'@;
put 'RG93bjoiYWZ0ZXJPbkNlbGxDb3JuZXJNb3VzZURvd24iLGFmdGVyT25DZWxsTW91c2VEb3duOiJhZnRlck9uQ2VsbE1vdXNlRG93biIsYWZ0ZXJPbkNlbGxNb3VzZU91dDoiYWZ0ZXJPbkNlbGxNb3VzZU91dCIsYWZ0ZXJPbkNlbGxNb3VzZU92ZXI6ImFmdGVyT25DZWxsTW91c2VPdmVyIixh'@;
put 'ZnRlck9uQ2VsbE1vdXNlVXA6ImFmdGVyT25DZWxsTW91c2VVcCIsYWZ0ZXJQYXN0ZToiYWZ0ZXJQYXN0ZSIsYWZ0ZXJQbHVnaW5zSW5pdGlhbGl6ZWQ6ImFmdGVyUGx1Z2luc0luaXRpYWxpemVkIixhZnRlclJlZG86ImFmdGVyUmVkbyIsYWZ0ZXJSZWRvU3RhY2tDaGFuZ2U6ImFmdGVyUmVk'@;
put 'b1N0YWNrQ2hhbmdlIixhZnRlclJlZnJlc2hEaW1lbnNpb25zOiJhZnRlclJlZnJlc2hEaW1lbnNpb25zIixhZnRlclJlbW92ZUNlbGxNZXRhOiJhZnRlclJlbW92ZUNlbGxNZXRhIixhZnRlclJlbW92ZUNvbDoiYWZ0ZXJSZW1vdmVDb2wiLGFmdGVyUmVtb3ZlUm93OiJhZnRlclJlbW92ZVJv'@;
put 'dyIsYWZ0ZXJSZW5kZXI6ImFmdGVyUmVuZGVyIixhZnRlclJlbmRlcmVyOiJhZnRlclJlbmRlcmVyIixhZnRlclJvd01vdmU6ImFmdGVyUm93TW92ZSIsYWZ0ZXJSb3dSZXNpemU6ImFmdGVyUm93UmVzaXplIixhZnRlclJvd1NlcXVlbmNlQ2hhbmdlOiJhZnRlclJvd1NlcXVlbmNlQ2hhbmdl'@;
put 'IixhZnRlclNjcm9sbEhvcml6b250YWxseToiYWZ0ZXJTY3JvbGxIb3Jpem9udGFsbHkiLGFmdGVyU2Nyb2xsVmVydGljYWxseToiYWZ0ZXJTY3JvbGxWZXJ0aWNhbGx5IixhZnRlclNjcm9sbDoiYWZ0ZXJTY3JvbGwiLGFmdGVyU2VsZWN0Q29sdW1uczoiYWZ0ZXJTZWxlY3RDb2x1bW5zIixh'@;
put 'ZnRlclNlbGVjdGlvbjoiYWZ0ZXJTZWxlY3Rpb24iLGFmdGVyU2VsZWN0aW9uQnlQcm9wOiJhZnRlclNlbGVjdGlvbkJ5UHJvcCIsYWZ0ZXJTZWxlY3Rpb25FbmQ6ImFmdGVyU2VsZWN0aW9uRW5kIixhZnRlclNlbGVjdGlvbkVuZEJ5UHJvcDoiYWZ0ZXJTZWxlY3Rpb25FbmRCeVByb3AiLGFm'@;
put 'dGVyU2VsZWN0aW9uRm9jdXNTZXQ6ImFmdGVyU2VsZWN0aW9uRm9jdXNTZXQiLGFmdGVyU2VsZWN0Um93czoiYWZ0ZXJTZWxlY3RSb3dzIixhZnRlclNldENlbGxNZXRhOiJhZnRlclNldENlbGxNZXRhIixhZnRlclNldERhdGFBdENlbGw6ImFmdGVyU2V0RGF0YUF0Q2VsbCIsYWZ0ZXJTZXRE'@;
put 'YXRhQXRSb3dQcm9wOiJhZnRlclNldERhdGFBdFJvd1Byb3AiLGFmdGVyU2V0U291cmNlRGF0YUF0Q2VsbDoiYWZ0ZXJTZXRTb3VyY2VEYXRhQXRDZWxsIixhZnRlclNldFRoZW1lOiJhZnRlclNldFRoZW1lIixhZnRlclNoZWV0QWRkZWQ6ImFmdGVyU2hlZXRBZGRlZCIsYWZ0ZXJTaGVldFJl'@;
put 'bmFtZWQ6ImFmdGVyU2hlZXRSZW5hbWVkIixhZnRlclNoZWV0UmVtb3ZlZDoiYWZ0ZXJTaGVldFJlbW92ZWQiLGFmdGVyVHJpbVJvdzoiYWZ0ZXJUcmltUm93IixhZnRlclVuZG86ImFmdGVyVW5kbyIsYWZ0ZXJVbmRvU3RhY2tDaGFuZ2U6ImFmdGVyVW5kb1N0YWNrQ2hhbmdlIixhZnRlclVu'@;
put 'aGlkZUNvbHVtbnM6ImFmdGVyVW5oaWRlQ29sdW1ucyIsYWZ0ZXJVbmhpZGVSb3dzOiJhZnRlclVuaGlkZVJvd3MiLGFmdGVyVW5saXN0ZW46ImFmdGVyVW5saXN0ZW4iLGFmdGVyVW5tZXJnZUNlbGxzOiJhZnRlclVubWVyZ2VDZWxscyIsYWZ0ZXJVbnRyaW1Sb3c6ImFmdGVyVW50cmltUm93'@;
put 'IixhZnRlclVwZGF0ZURhdGE6ImFmdGVyVXBkYXRlRGF0YSIsYWZ0ZXJVcGRhdGVTZXR0aW5nczoiYWZ0ZXJVcGRhdGVTZXR0aW5ncyIsYWZ0ZXJWYWxpZGF0ZToiYWZ0ZXJWYWxpZGF0ZSIsYWZ0ZXJWaWV3cG9ydENvbHVtbkNhbGN1bGF0b3JPdmVycmlkZToiYWZ0ZXJWaWV3cG9ydENvbHVt'@;
put 'bkNhbGN1bGF0b3JPdmVycmlkZSIsYWZ0ZXJWaWV3cG9ydFJvd0NhbGN1bGF0b3JPdmVycmlkZToiYWZ0ZXJWaWV3cG9ydFJvd0NhbGN1bGF0b3JPdmVycmlkZSIsYWZ0ZXJWaWV3UmVuZGVyOiJhZnRlclZpZXdSZW5kZXIiLGJlZm9yZUFkZENoaWxkOiJiZWZvcmVBZGRDaGlsZCIsYmVmb3Jl'@;
put 'QXV0b2ZpbGw6ImJlZm9yZUF1dG9maWxsIixiZWZvcmVCZWdpbkVkaXRpbmc6ImJlZm9yZUJlZ2luRWRpdGluZyIsYmVmb3JlQ2VsbEFsaWdubWVudDoiYmVmb3JlQ2VsbEFsaWdubWVudCIsYmVmb3JlQ2hhbmdlOiJiZWZvcmVDaGFuZ2UiLGJlZm9yZUNoYW5nZVJlbmRlcjoiYmVmb3JlQ2hh'@;
put 'bmdlUmVuZGVyIixiZWZvcmVDb2x1bW5Db2xsYXBzZToiYmVmb3JlQ29sdW1uQ29sbGFwc2UiLGJlZm9yZUNvbHVtbkV4cGFuZDoiYmVmb3JlQ29sdW1uRXhwYW5kIixiZWZvcmVDb2x1bW5GcmVlemU6ImJlZm9yZUNvbHVtbkZyZWV6ZSIsYmVmb3JlQ29sdW1uTW92ZToiYmVmb3JlQ29sdW1u'@;
put 'TW92ZSIsYmVmb3JlQ29sdW1uUmVzaXplOiJiZWZvcmVDb2x1bW5SZXNpemUiLGJlZm9yZUNvbHVtblNvcnQ6ImJlZm9yZUNvbHVtblNvcnQiLGJlZm9yZUNvbHVtbldyYXA6ImJlZm9yZUNvbHVtbldyYXAiLGJlZm9yZUNvbHVtblVuZnJlZXplOiJiZWZvcmVDb2x1bW5VbmZyZWV6ZSIsYmVm'@;
put 'b3JlQ29tcG9zaXRpb25TdGFydDoiYmVmb3JlQ29tcG9zaXRpb25TdGFydCIsYmVmb3JlQ29udGV4dE1lbnVTZXRJdGVtczoiYmVmb3JlQ29udGV4dE1lbnVTZXRJdGVtcyIsYmVmb3JlQ29udGV4dE1lbnVTaG93OiJiZWZvcmVDb250ZXh0TWVudVNob3ciLGJlZm9yZUNvcHk6ImJlZm9yZUNv'@;
put 'cHkiLGJlZm9yZUNyZWF0ZUNvbDoiYmVmb3JlQ3JlYXRlQ29sIixiZWZvcmVDcmVhdGVSb3c6ImJlZm9yZUNyZWF0ZVJvdyIsYmVmb3JlQ3V0OiJiZWZvcmVDdXQiLGJlZm9yZURldGFjaENoaWxkOiJiZWZvcmVEZXRhY2hDaGlsZCIsYmVmb3JlRHJhd0JvcmRlcnM6ImJlZm9yZURyYXdCb3Jk'@;
put 'ZXJzIixiZWZvcmVEcm9wZG93bk1lbnVTZXRJdGVtczoiYmVmb3JlRHJvcGRvd25NZW51U2V0SXRlbXMiLGJlZm9yZURyb3Bkb3duTWVudVNob3c6ImJlZm9yZURyb3Bkb3duTWVudVNob3ciLGJlZm9yZUZpbHRlcjoiYmVmb3JlRmlsdGVyIixiZWZvcmVHZXRDZWxsTWV0YToiYmVmb3JlR2V0'@;
put 'Q2VsbE1ldGEiLGJlZm9yZUhpZGVDb2x1bW5zOiJiZWZvcmVIaWRlQ29sdW1ucyIsYmVmb3JlSGlkZVJvd3M6ImJlZm9yZUhpZGVSb3dzIixiZWZvcmVIaWdobGlnaHRpbmdDb2x1bW5IZWFkZXI6ImJlZm9yZUhpZ2hsaWdodGluZ0NvbHVtbkhlYWRlciIsYmVmb3JlSGlnaGxpZ2h0aW5nUm93'@;
put 'SGVhZGVyOiJiZWZvcmVIaWdobGlnaHRpbmdSb3dIZWFkZXIiLGJlZm9yZUluaXQ6ImJlZm9yZUluaXQiLGJlZm9yZUluaXRXYWxrb250YWJsZToiYmVmb3JlSW5pdFdhbGtvbnRhYmxlIixiZWZvcmVLZXlEb3duOiJiZWZvcmVLZXlEb3duIixiZWZvcmVMYW5ndWFnZUNoYW5nZToiYmVmb3Jl'@;
put 'TGFuZ3VhZ2VDaGFuZ2UiLGJlZm9yZUxvYWREYXRhOiJiZWZvcmVMb2FkRGF0YSIsYmVmb3JlTWVyZ2VDZWxsczoiYmVmb3JlTWVyZ2VDZWxscyIsYmVmb3JlT25DZWxsQ29udGV4dE1lbnU6ImJlZm9yZU9uQ2VsbENvbnRleHRNZW51IixiZWZvcmVPbkNlbGxNb3VzZURvd246ImJlZm9yZU9u'@;
put 'Q2VsbE1vdXNlRG93biIsYmVmb3JlT25DZWxsTW91c2VPdXQ6ImJlZm9yZU9uQ2VsbE1vdXNlT3V0IixiZWZvcmVPbkNlbGxNb3VzZU92ZXI6ImJlZm9yZU9uQ2VsbE1vdXNlT3ZlciIsYmVmb3JlT25DZWxsTW91c2VVcDoiYmVmb3JlT25DZWxsTW91c2VVcCIsYmVmb3JlUGFzdGU6ImJlZm9y'@;
put 'ZVBhc3RlIixiZWZvcmVSZWRvOiJiZWZvcmVSZWRvIixiZWZvcmVSZWRvU3RhY2tDaGFuZ2U6ImJlZm9yZVJlZG9TdGFja0NoYW5nZSIsYmVmb3JlUmVmcmVzaERpbWVuc2lvbnM6ImJlZm9yZVJlZnJlc2hEaW1lbnNpb25zIixiZWZvcmVSZW1vdmVDZWxsQ2xhc3NOYW1lczoiYmVmb3JlUmVt'@;
put 'b3ZlQ2VsbENsYXNzTmFtZXMiLGJlZm9yZVJlbW92ZUNlbGxNZXRhOiJiZWZvcmVSZW1vdmVDZWxsTWV0YSIsYmVmb3JlUmVtb3ZlQ29sOiJiZWZvcmVSZW1vdmVDb2wiLGJlZm9yZVJlbW92ZVJvdzoiYmVmb3JlUmVtb3ZlUm93IixiZWZvcmVSZW5kZXI6ImJlZm9yZVJlbmRlciIsYmVmb3Jl'@;
put 'UmVuZGVyZXI6ImJlZm9yZVJlbmRlcmVyIixiZWZvcmVSb3dNb3ZlOiJiZWZvcmVSb3dNb3ZlIixiZWZvcmVSb3dSZXNpemU6ImJlZm9yZVJvd1Jlc2l6ZSIsYmVmb3JlUm93V3JhcDoiYmVmb3JlUm93V3JhcCIsYmVmb3JlU2VsZWN0Q29sdW1uczoiYmVmb3JlU2VsZWN0Q29sdW1ucyIsYmVm'@;
put 'b3JlU2VsZWN0aW9uRm9jdXNTZXQ6ImJlZm9yZVNlbGVjdGlvbkZvY3VzU2V0IixiZWZvcmVTZWxlY3Rpb25IaWdobGlnaHRTZXQ6ImJlZm9yZVNlbGVjdGlvbkhpZ2hsaWdodFNldCIsYmVmb3JlU2VsZWN0Um93czoiYmVmb3JlU2VsZWN0Um93cyIsYmVmb3JlU2V0Q2VsbE1ldGE6ImJlZm9y'@;
put 'ZVNldENlbGxNZXRhIixiZWZvcmVTZXRSYW5nZUVuZDoiYmVmb3JlU2V0UmFuZ2VFbmQiLGJlZm9yZVNldFJhbmdlU3RhcnQ6ImJlZm9yZVNldFJhbmdlU3RhcnQiLGJlZm9yZVNldFJhbmdlU3RhcnRPbmx5OiJiZWZvcmVTZXRSYW5nZVN0YXJ0T25seSIsYmVmb3JlU3RyZXRjaGluZ0NvbHVt'@;
put 'bldpZHRoOiJiZWZvcmVTdHJldGNoaW5nQ29sdW1uV2lkdGgiLGJlZm9yZVRvdWNoU2Nyb2xsOiJiZWZvcmVUb3VjaFNjcm9sbCIsYmVmb3JlVHJpbVJvdzoiYmVmb3JlVHJpbVJvdyIsYmVmb3JlVW5kbzoiYmVmb3JlVW5kbyIsYmVmb3JlVW5kb1N0YWNrQ2hhbmdlOiJiZWZvcmVVbmRvU3Rh'@;
put 'Y2tDaGFuZ2UiLGJlZm9yZVVuaGlkZUNvbHVtbnM6ImJlZm9yZVVuaGlkZUNvbHVtbnMiLGJlZm9yZVVuaGlkZVJvd3M6ImJlZm9yZVVuaGlkZVJvd3MiLGJlZm9yZVVubWVyZ2VDZWxsczoiYmVmb3JlVW5tZXJnZUNlbGxzIixiZWZvcmVVbnRyaW1Sb3c6ImJlZm9yZVVudHJpbVJvdyIsYmVm'@;
put 'b3JlVXBkYXRlRGF0YToiYmVmb3JlVXBkYXRlRGF0YSIsYmVmb3JlVmFsaWRhdGU6ImJlZm9yZVZhbGlkYXRlIixiZWZvcmVWYWx1ZVJlbmRlcjoiYmVmb3JlVmFsdWVSZW5kZXIiLGJlZm9yZVZpZXdwb3J0U2Nyb2xsOiJiZWZvcmVWaWV3cG9ydFNjcm9sbCIsYmVmb3JlVmlld3BvcnRTY3Jv'@;
put 'bGxIb3Jpem9udGFsbHk6ImJlZm9yZVZpZXdwb3J0U2Nyb2xsSG9yaXpvbnRhbGx5IixiZWZvcmVWaWV3cG9ydFNjcm9sbFZlcnRpY2FsbHk6ImJlZm9yZVZpZXdwb3J0U2Nyb2xsVmVydGljYWxseSIsYmVmb3JlVmlld1JlbmRlcjoiYmVmb3JlVmlld1JlbmRlciIsY29uc3RydWN0OiJjb25z'@;
put 'dHJ1Y3QiLGluaXQ6ImluaXQiLG1vZGlmeUF1dG9Db2x1bW5TaXplU2VlZDoibW9kaWZ5QXV0b0NvbHVtblNpemVTZWVkIixtb2RpZnlBdXRvZmlsbFJhbmdlOiJtb2RpZnlBdXRvZmlsbFJhbmdlIixtb2RpZnlDb2xIZWFkZXI6Im1vZGlmeUNvbEhlYWRlciIsbW9kaWZ5Q29sdW1uSGVhZGVy'@;
put 'SGVpZ2h0OiJtb2RpZnlDb2x1bW5IZWFkZXJIZWlnaHQiLG1vZGlmeUNvbHVtbkhlYWRlclZhbHVlOiJtb2RpZnlDb2x1bW5IZWFkZXJWYWx1ZSIsbW9kaWZ5Q29sV2lkdGg6Im1vZGlmeUNvbFdpZHRoIixtb2RpZnlDb3B5YWJsZVJhbmdlOiJtb2RpZnlDb3B5YWJsZVJhbmdlIixtb2RpZnlG'@;
put 'aWx0ZXJzTXVsdGlTZWxlY3RWYWx1ZToibW9kaWZ5RmlsdGVyc011bHRpU2VsZWN0VmFsdWUiLG1vZGlmeUZvY3VzZWRFbGVtZW50OiJtb2RpZnlGb2N1c2VkRWxlbWVudCIsbW9kaWZ5RGF0YToibW9kaWZ5RGF0YSIsbW9kaWZ5Rm9jdXNPblRhYk5hdmlnYXRpb246Im1vZGlmeUZvY3VzT25U'@;
put 'YWJOYXZpZ2F0aW9uIixtb2RpZnlHZXRDZWxsQ29vcmRzOiJtb2RpZnlHZXRDZWxsQ29vcmRzIixtb2RpZnlHZXRDb29yZHNFbGVtZW50OiJtb2RpZnlHZXRDb29yZHNFbGVtZW50Iixtb2RpZnlSb3dEYXRhOiJtb2RpZnlSb3dEYXRhIixtb2RpZnlSb3dIZWFkZXI6Im1vZGlmeVJvd0hlYWRl'@;
put 'ciIsbW9kaWZ5Um93SGVhZGVyV2lkdGg6Im1vZGlmeVJvd0hlYWRlcldpZHRoIixtb2RpZnlSb3dIZWlnaHQ6Im1vZGlmeVJvd0hlaWdodCIsbW9kaWZ5Um93SGVpZ2h0QnlPdmVybGF5TmFtZToibW9kaWZ5Um93SGVpZ2h0QnlPdmVybGF5TmFtZSIsbW9kaWZ5U291cmNlRGF0YToibW9kaWZ5'@;
put 'U291cmNlRGF0YSIsbW9kaWZ5VHJhbnNmb3JtRW5kOiJtb2RpZnlUcmFuc2Zvcm1FbmQiLG1vZGlmeVRyYW5zZm9ybUZvY3VzOiJtb2RpZnlUcmFuc2Zvcm1Gb2N1cyIsbW9kaWZ5VHJhbnNmb3JtU3RhcnQ6Im1vZGlmeVRyYW5zZm9ybVN0YXJ0IixwZXJzaXN0ZW50U3RhdGVMb2FkOiJwZXJz'@;
put 'aXN0ZW50U3RhdGVMb2FkIixwZXJzaXN0ZW50U3RhdGVSZXNldDoicGVyc2lzdGVudFN0YXRlUmVzZXQiLHBlcnNpc3RlbnRTdGF0ZVNhdmU6InBlcnNpc3RlbnRTdGF0ZVNhdmUifSxmZWF0dXJlczpbZGEoW1ltLE9wZV0pLHdsXSxkZWNsczoyLHZhcnM6MSxjb25zdHM6W1siY29udGFpbmVy'@;
put 'IiwiIl0sWzMsImlkIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGQsaCl7MSZkJiZHdCgwLCJkaXYiLDEsMCksMiZkJiZNZSgiaWQiLGguaG90SWQpfSxlbmNhcHN1bGF0aW9uOjJ9KX1yZXR1cm4gY30pKCksbzk9KCgpPT57Y2xhc3MgY3tzdGF0aWMgdmVyc2lvbj0iMTUuMy4wIjtzdGF0aWMgZm9y'@;
put 'Um9vdCgpe3JldHVybntuZ01vZHVsZTpjLHByb3ZpZGVyczpbWW1dfX1zdGF0aWMgXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9O3N0YXRpYyBcdTAyNzVtb2Q9a2koe3R5cGU6Y30pO3N0YXRpYyBcdTAyNzVpbmo9QXIoe30pfXJldHVybiBjfSkoKTtjb25zdCBQcGU9'@;
put 'ImhhbmRzb250YWJsZUVkaXRvciI7Y2xhc3MgUlggZXh0ZW5kcyBhOXtzdGF0aWMgZ2V0IEVESVRPUl9UWVBFKCl7cmV0dXJuImhhbmRzb250YWJsZSJ9b3Blbigpe3N1cGVyLm9wZW4oKTtjb25zdCBsPXRoaXMuaHRDb250YWluZXIuc3R5bGU7dGhpcy5odEVkaXRvciYmKHRoaXMuaHRFZGl0'@;
put 'b3IuZGVzdHJveSgpLGwud2lkdGg9IiIsbC5oZWlnaHQ9IiIsbC5vdmVyZmxvdz0iIiksIm5vbmUiPT09bC5kaXNwbGF5JiYobC5kaXNwbGF5PSIiKSx0aGlzLmh0RWRpdG9yPW5ldyB0aGlzLmhvdC5jb25zdHJ1Y3Rvcih0aGlzLmh0Q29udGFpbmVyLHRoaXMuaHRPcHRpb25zKSx0aGlzLmh0'@;
put 'RWRpdG9yLmluaXQoKSx0aGlzLmh0RWRpdG9yLnJvb3RFbGVtZW50LnN0eWxlLmRpc3BsYXk9IiIsdGhpcy5jZWxsUHJvcGVydGllcy5zdHJpY3Q/dGhpcy5odEVkaXRvci5zZWxlY3RDZWxsKDAsMCk6dGhpcy5odEVkaXRvci5kZXNlbGVjdENlbGwoKSx3RSh0aGlzLlRFWFRBUkVBLDAsdGhp'@;
put 'cy5URVhUQVJFQS52YWx1ZS5sZW5ndGgpLHRoaXMuaHRFZGl0b3IudXBkYXRlU2V0dGluZ3Moe3dpZHRoOnRoaXMuZ2V0V2lkdGgoKSxoZWlnaHQ6dGhpcy5nZXRIZWlnaHQoKX0pLHRoaXMucmVmcmVzaERpbWVuc2lvbnMoKX1jbG9zZSgpe3RoaXMuaHRFZGl0b3ImJih0aGlzLmh0RWRpdG9y'@;
put 'LnJvb3RFbGVtZW50LnN0eWxlLmRpc3BsYXk9Im5vbmUiKSx0aGlzLnJlbW92ZUhvb2tzQnlLZXkoImJlZm9yZUtleURvd24iKSxzdXBlci5jbG9zZSgpfXByZXBhcmUobCxhLGQsaCxmLHYpe3N1cGVyLnByZXBhcmUobCxhLGQsaCxmLHYpO2NvbnN0IE09dGhpcyxEPXtzdGFydFJvd3M6MCxz'@;
put 'dGFydENvbHM6MCxtaW5Sb3dzOjAsbWluQ29sczowLGNsYXNzTmFtZToibGlzdGJveCIsY29weVBhc3RlOiExLGF1dG9Db2x1bW5TaXplOiExLGF1dG9Sb3dTaXplOiExLHJlYWRPbmx5OiEwLGZpbGxIYW5kbGU6ITEsYXV0b1dyYXBDb2w6ITEsYXV0b1dyYXBSb3c6ITEsYXJpYVRhZ3M6ITEs'@;
put 'dGhlbWVOYW1lOnRoaXMuaG90LmdldEN1cnJlbnRUaGVtZU5hbWUoKSxhZnRlck9uQ2VsbE1vdXNlRG93bihaLHJlKXtjb25zdCBjZT10aGlzLmdldFNvdXJjZURhdGEocmUucm93LHJlLmNvbCk7dm9pZCAwIT09Y2UmJk0uc2V0VmFsdWUoY2UpLE0uaG90LmRlc3Ryb3lFZGl0b3IoKX0scHJl'@;
put 'dmVudFdoZWVsOiEwLGxheW91dERpcmVjdGlvbjp0aGlzLmhvdC5pc1J0bCgpPyJydGwiOiJsdHIifTt0aGlzLmNlbGxQcm9wZXJ0aWVzLmhhbmRzb250YWJsZSYmRXUoRCx2LmhhbmRzb250YWJsZSksdGhpcy5odE9wdGlvbnM9RH1iZWdpbkVkaXRpbmcobCxhKXtjb25zdCBkPXRoaXMuaG90'@;
put 'LmdldFNldHRpbmdzKCkub25CZWdpbkVkaXRpbmc7ZCYmITE9PT1kKCl8fHN1cGVyLmJlZ2luRWRpdGluZyhsLGEpfWNyZWF0ZUVsZW1lbnRzKCl7c3VwZXIuY3JlYXRlRWxlbWVudHMoKTtjb25zdCBsPXRoaXMuaG90LnJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50KCJESVYiKTtsLmNsYXNz'@;
put 'TmFtZT0iaGFuZHNvbnRhYmxlRWRpdG9yIix0aGlzLlRFWFRBUkVBX1BBUkVOVC5hcHBlbmRDaGlsZChsKSx0aGlzLmh0Q29udGFpbmVyPWwsdGhpcy5hc3NpZ25Ib29rcygpfWZpbmlzaEVkaXRpbmcobCxhLGQpe2lmKHRoaXMuaHRFZGl0b3ImJnRoaXMuaHRFZGl0b3IuaXNMaXN0ZW5pbmco'@;
put 'KSYmdGhpcy5ob3QubGlzdGVuKCksdGhpcy5odEVkaXRvciYmdGhpcy5odEVkaXRvci5nZXRTZWxlY3RlZExhc3QoKSl7Y29uc3QgaD10aGlzLmh0RWRpdG9yLmdldFZhbHVlKCk7dm9pZCAwIT09aCYmdGhpcy5zZXRWYWx1ZShoKX1zdXBlci5maW5pc2hFZGl0aW5nKGwsYSxkKX1nZXRIZWln'@;
put 'aHQoKXtyZXR1cm4gdGhpcy5odEVkaXRvci52aWV3LmdldFRhYmxlSGVpZ2h0KCkrMX1nZXRXaWR0aCgpe3JldHVybiB0aGlzLmh0RWRpdG9yLnZpZXcuZ2V0VGFibGVXaWR0aCgpfWFzc2lnbkhvb2tzKCl7dGhpcy5ob3QuYWRkSG9vaygiYWZ0ZXJEZXN0cm95IiwoKT0+e3ZhciBsO251bGw9'@;
put 'PT0obD10aGlzLmh0RWRpdG9yKXx8dm9pZCAwPT09bHx8bC5kZXN0cm95KCl9KSx0aGlzLmhvdC5hZGRIb29rKCJhZnRlclNldFRoZW1lIiwobCxhKT0+e3ZhciBkO2F8fG51bGw9PT0oZD10aGlzLmh0RWRpdG9yKXx8dm9pZCAwPT09ZHx8ZC51c2VUaGVtZShsKX0pfXJlZ2lzdGVyU2hvcnRj'@;
put 'dXRzKCl7Y29uc3QgYT10aGlzLmhvdC5nZXRTaG9ydGN1dE1hbmFnZXIoKS5nZXRDb250ZXh0KCJlZGl0b3IiKTtzdXBlci5yZWdpc3RlclNob3J0Y3V0cygpO2NvbnN0IGg9KGYsdik9Pntjb25zdCBNPXRoaXMuaHRFZGl0b3I7aWYodm9pZCAwIT09ZiYmKGY8MHx8TS5mbGlwcGVkJiZmPk0u'@;
put 'Y291bnRSb3dzKCktMT9NLmRlc2VsZWN0Q2VsbCgpOk0uc2VsZWN0Q2VsbChmLDApLE0uZ2V0RGF0YSgpLmxlbmd0aCkpcmV0dXJuIHYucHJldmVudERlZmF1bHQoKSxCMih2KSx0aGlzLmhvdC5saXN0ZW4oKSx0aGlzLlRFWFRBUkVBLmZvY3VzKCksITF9O2EuYWRkU2hvcnRjdXRzKFt7a2V5'@;
put 'czpbWyJBcnJvd1VwIl1dLGNhbGxiYWNrOmY9Pntjb25zdCB2PXRoaXMuaHRFZGl0b3I7bGV0IE0sRDtyZXR1cm4hdi5nZXRTZWxlY3RlZExhc3QoKSYmdi5mbGlwcGVkP009di5jb3VudFJvd3MoKS0xOnYuZ2V0U2VsZWN0ZWRMYXN0KCkmJih2LmZsaXBwZWQ/KEQ9di5nZXRTZWxlY3RlZExh'@;
put 'c3QoKVswXSxNPU1hdGgubWF4KDAsRC0xKSk6KEQ9di5nZXRTZWxlY3RlZExhc3QoKVswXSxNPUQtMSkpLGgoTSxmKX0scHJldmVudERlZmF1bHQ6ITF9LHtrZXlzOltbIkFycm93RG93biJdXSxjYWxsYmFjazpmPT57Y29uc3Qgdj10aGlzLmh0RWRpdG9yO2xldCBNLEQ7aWYodi5nZXRTZWxl'@;
put 'Y3RlZExhc3QoKXx8di5mbGlwcGVkKXtpZih2LmdldFNlbGVjdGVkTGFzdCgpKWlmKHYuZmxpcHBlZClNPXYuZ2V0U2VsZWN0ZWRMYXN0KClbMF0rMTtlbHNlIGlmKCF2LmZsaXBwZWQpe2NvbnN0IFo9di5jb3VudFJvd3MoKS0xO0Q9di5nZXRTZWxlY3RlZExhc3QoKVswXSxNPU1hdGgubWlu'@;
put 'KFosRCsxKX19ZWxzZSBNPTA7cmV0dXJuIGgoTSxmKX0scHJldmVudERlZmF1bHQ6ITF9XSx7Z3JvdXA6UHBlLHJlbGF0aXZlVG9Hcm91cDpXbSxwb3NpdGlvbjoiYmVmb3JlIn0pfXVucmVnaXN0ZXJTaG9ydGN1dHMoKXtzdXBlci51bnJlZ2lzdGVyU2hvcnRjdXRzKCksdGhpcy5ob3QuZ2V0'@;
put 'U2hvcnRjdXRNYW5hZ2VyKCkuZ2V0Q29udGV4dCgiZWRpdG9yIikucmVtb3ZlU2hvcnRjdXRzQnlHcm91cChQcGUpfX1mdW5jdGlvbiBGcGUoYyxsLGEpe0hwZShjLGwpLGwuc2V0KGMsYSl9ZnVuY3Rpb24gSHBlKGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90'@;
put 'IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX1mdW5jdGlvbiBqUChjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gb2F0KGMpe3ZhciBsPWZ1bmN0aW9uIHNhdChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFy'@;
put 'IGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUu'@;
put 'Iil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRh'@;
put 'YmxlOiEwfSk6Y1tsXT1hLGN9ZnVuY3Rpb24gTFgoYyxsKXtyZXR1cm4gYy5nZXQoT1goYyxsKSl9ZnVuY3Rpb24gT1goYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3Io'@;
put 'IlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfXZhciBQWD1uZXcgV2Vha01hcCxOcGU9bmV3IFdlYWtNYXAsRlg9bmV3IFdlYWtTZXQ7Y2xhc3MgSFggZXh0ZW5kcyBSWHtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksZnVuY3Rpb24gYWF0'@;
put 'KGMsbCl7SHBlKGMsbCksbC5hZGQoYyl9KHRoaXMsRlgpLGpQKHRoaXMsInF1ZXJ5IixudWxsKSxqUCh0aGlzLCJzdHJpcHBlZENob2ljZXMiLFtdKSxqUCh0aGlzLCJyYXdDaG9pY2VzIixbXSksRnBlKHRoaXMsUFgsdGhpcy5ob3QuZ3VpZC5zbGljZSgwLDkpKSxGcGUodGhpcyxOcGUsTUUo'@;
put 'KCk9Pnt0aGlzLmZvY3VzKCl9LDEwMCkpLGpQKHRoaXMsInNvcnRCeVJlbGV2YW5jZSIsZnVuY3Rpb24obCxhLGQpe2NvbnN0IGg9W10sZj1bXSx2PWwubGVuZ3RoO2xldCBELFoscmUsY2UsTT1hLmxlbmd0aDtpZigwPT09dil7Zm9yKHJlPTA7cmU8TTtyZSsrKWYucHVzaChyZSk7cmV0dXJu'@;
put 'IGZ9Zm9yKHJlPTA7cmU8TTtyZSsrKXtpZihaPWckKGxjKGFbcmVdKSksZCljZT1aLmluZGV4T2YobCk7ZWxzZXtjb25zdCBiZT10aGlzLmNlbGxQcm9wZXJ0aWVzLmxvY2FsZTtjZT1aLnRvTG9jYWxlTG93ZXJDYXNlKGJlKS5pbmRleE9mKGwudG9Mb2NhbGVMb3dlckNhc2UoYmUpKX0tMSE9'@;
put 'PWNlJiYoRD1aLmxlbmd0aC1jZS12LGgucHVzaCh7YmFzZUluZGV4OnJlLGluZGV4OmNlLGNoYXJzTGVmdDpELHZhbHVlOlp9KSl9Zm9yKGguc29ydCgoYmUsRWUpPT57aWYoLTE9PT1FZS5pbmRleClyZXR1cm4tMTtpZigtMT09PWJlLmluZGV4KXJldHVybiAxO2lmKGJlLmluZGV4PEVlLmlu'@;
put 'ZGV4KXJldHVybi0xO2lmKEVlLmluZGV4PGJlLmluZGV4KXJldHVybiAxO2lmKGJlLmluZGV4PT09RWUuaW5kZXgpe2lmKGJlLmNoYXJzTGVmdDxFZS5jaGFyc0xlZnQpcmV0dXJuLTE7aWYoYmUuY2hhcnNMZWZ0PkVlLmNoYXJzTGVmdClyZXR1cm4gMX1yZXR1cm4gMH0pLHJlPTAsTT1oLmxl'@;
put 'bmd0aDtyZTxNO3JlKyspZi5wdXNoKGhbcmVdLmJhc2VJbmRleCk7cmV0dXJuIGZ9KX1zdGF0aWMgZ2V0IEVESVRPUl9UWVBFKCl7cmV0dXJuImF1dG9jb21wbGV0ZSJ9Z2V0VmFsdWUoKXtjb25zdCBsPXRoaXMucmF3Q2hvaWNlcy5maW5kKGE9PnRoaXMuc3RyaXBWYWx1ZUlmTmVlZGVkKGEp'@;
put 'PT09dGhpcy5URVhUQVJFQS52YWx1ZSk7cmV0dXJuIFBhKGwpP2w6dGhpcy5URVhUQVJFQS52YWx1ZX1jcmVhdGVFbGVtZW50cygpe3N1cGVyLmNyZWF0ZUVsZW1lbnRzKCksVGkodGhpcy5odENvbnRhaW5lciwiYXV0b2NvbXBsZXRlRWRpdG9yIiksVGkodGhpcy5odENvbnRhaW5lciwtMT09'@;
put 'PXRoaXMuaG90LnJvb3RXaW5kb3cubmF2aWdhdG9yLnBsYXRmb3JtLmluZGV4T2YoIk1hYyIpPyIiOiJodE1hY1Njcm9sbCIpLHRoaXMuaG90LmdldFNldHRpbmdzKCkuYXJpYVRhZ3MmJnZvKHRoaXMuVEVYVEFSRUEsW1sidHlwZSIsInRleHQiXSxbInJvbGUiLCJjb21ib2JveCJdLEUyZSgi'@;
put 'bGlzdGJveCIpLFsiYXJpYS1hdXRvY29tcGxldGUiLCJsaXN0Il1dKX1wcmVwYXJlKGwsYSxkLGgsZix2KXtzdXBlci5wcmVwYXJlKGwsYSxkLGgsZix2KSx0aGlzLmhvdC5nZXRTZXR0aW5ncygpLmFyaWFUYWdzJiZ2byh0aGlzLlRFWFRBUkVBLFtOMigiZmFsc2UiKSxyWGUoYCR7TFgoUFgs'@;
put 'dGhpcyl9LWxpc3Rib3gtJHtsfS0ke2F9YCldKX1vcGVuKCl7c3VwZXIub3BlbigpO2NvbnN0IGw9dm9pZCAwPT09dGhpcy5jZWxsUHJvcGVydGllcy50cmltRHJvcGRvd258fHRoaXMuY2VsbFByb3BlcnRpZXMudHJpbURyb3Bkb3duLGE9dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5hcmlhVGFn'@;
put 'cyxkPUFycmF5LmlzQXJyYXkodGhpcy5jZWxsUHJvcGVydGllcy5zb3VyY2UpP3RoaXMuY2VsbFByb3BlcnRpZXMuc291cmNlOm51bGwsaD1kPy5sZW5ndGgse3JvdzpmLGNvbDp2fT10aGlzO3RoaXMuc2hvd0VkaXRhYmxlRWxlbWVudCgpLHRoaXMuZm9jdXMoKSx0aGlzLmFkZEhvb2soImJl'@;
put 'Zm9yZUtleURvd24iLE09PnRoaXMub25CZWZvcmVLZXlEb3duKE0pKSx0aGlzLmh0RWRpdG9yLmFkZEhvb2soImFmdGVyU2Nyb2xsIixMWChOcGUsdGhpcykpLHRoaXMuaHRFZGl0b3IudXBkYXRlU2V0dGluZ3Moe2NvbFdpZHRoczpsP1tzdSh0aGlzLlRFWFRBUkVBKS0yXTp2b2lkIDAsYXV0'@;
put 'b0NvbHVtblNpemU6ITAscmVuZGVyZXI6KE0sRCxaLHJlLGNlLGJlLEVlKT0+e0FnKE0sRCxaLHJlLGNlLGJlLEVlKTtjb25zdHtmaWx0ZXJpbmdDYXNlU2Vuc2l0aXZlOkJlLGFsbG93SHRtbDpxZSxsb2NhbGU6cnR9PXRoaXMuY2VsbFByb3BlcnRpZXMscHQ9dGhpcy5xdWVyeTtsZXQgSnQs'@;
put 'dm4sZHQ9bGMoYmUpO2R0JiYhcWUmJihKdD0hMD09PUJlP2R0LmluZGV4T2YocHQpOmR0LnRvTG9jYWxlTG93ZXJDYXNlKHJ0KS5pbmRleE9mKHB0LnRvTG9jYWxlTG93ZXJDYXNlKHJ0KSksLTEhPT1KdCYmKHZuPWR0LnN1YnN0cihKdCxwdC5sZW5ndGgpLGR0PWR0LnJlcGxhY2Uodm4sYDxz'@;
put 'dHJvbmc+JHt2bn08L3N0cm9uZz5gKSkpLGEmJnZvKEQsW1sicm9sZSIsIm9wdGlvbiJdLC4uLmQ/W3NYZShoKV06W10sLi4uZD9bbFhlKGQuaW5kZXhPZihiZSkrMSldOltdLFsiaWQiLGAke3RoaXMuaHRFZGl0b3Iucm9vdEVsZW1lbnQuaWR9XyR7Wn0tJHtyZX1gXV0pLEQuaW5uZXJIVE1M'@;
put 'PWR0fSxhZnRlclNlbGVjdGlvbkVuZDooTSxEKT0+e2lmKGEpe2NvbnN0IFo9Y2U9Pnt2byhjZSxbWyJhcmlhLXNlbGVjdGVkIiwidHJ1ZSJdXSksdm8odGhpcy5URVhUQVJFQSwuLi4oYz0+WyJhcmlhLWFjdGl2ZWRlc2NlbmRhbnQiLGNdKShjZS5pZCkpfSxyZT10aGlzLmh0RWRpdG9yLmdl'@;
put 'dENlbGwoTSxELCEwKTtudWxsIT09cmU/WihyZSk6dGhpcy5odEVkaXRvci5hZGRIb29rT25jZSgiYWZ0ZXJTY3JvbGxWZXJ0aWNhbGx5IiwoKT0+e2NvbnN0IGNlPXRoaXMuaHRFZGl0b3IuZ2V0Q2VsbChNLEQsITApO1ooY2UpfSl9fX0pLGEmJih2byh0aGlzLmh0RWRpdG9yLnZpZXcuX3d0'@;
put 'Lnd0T3ZlcmxheXMud3RUYWJsZS5UQUJMRSwicm9sZSIsInByZXNlbnRhdGlvbiIpLHZvKHRoaXMuaHRFZGl0b3Iucm9vdEVsZW1lbnQsW1sicm9sZSIsImxpc3Rib3giXSxhWGUoInBvbGl0ZSIpLG9YZSgidGV4dCIpLFsiaWQiLGAke0xYKFBYLHRoaXMpfS1saXN0Ym94LSR7Zn0tJHt2fWBd'@;
put 'XSksdm8odGhpcy5URVhUQVJFQSwuLi5OMigidHJ1ZSIpKSksdGhpcy5ob3QuX3JlZ2lzdGVyVGltZW91dCgoKT0+e3RoaXMucXVlcnlDaG9pY2VzKHRoaXMuVEVYVEFSRUEudmFsdWUpfSl9Y2xvc2UoKXt0aGlzLnJlbW92ZUhvb2tzQnlLZXkoImJlZm9yZUtleURvd24iKSxzdXBlci5jbG9z'@;
put 'ZSgpLHRoaXMuaG90LmdldFNldHRpbmdzKCkuYXJpYVRhZ3MmJnZvKHRoaXMuVEVYVEFSRUEsW04yKCJmYWxzZSIpXSl9ZGlzY2FyZEVkaXRvcihsKXtzdXBlci5kaXNjYXJkRWRpdG9yKGwpLHRoaXMuaG90LnZpZXcucmVuZGVyKCl9cXVlcnlDaG9pY2VzKGwpe2NvbnN0IGE9dGhpcy5jZWxs'@;
put 'UHJvcGVydGllcy5zb3VyY2U7dGhpcy5xdWVyeT1sLCJmdW5jdGlvbiI9PXR5cGVvZiBhP2EuY2FsbCh0aGlzLmNlbGxQcm9wZXJ0aWVzLGwsZD0+e3RoaXMucmF3Q2hvaWNlcz1kLHRoaXMudXBkYXRlQ2hvaWNlc0xpc3QodGhpcy5zdHJpcFZhbHVlc0lmTmVlZGVkKGQpKX0pOkFycmF5Lmlz'@;
put 'QXJyYXkoYSk/KHRoaXMucmF3Q2hvaWNlcz1hLHRoaXMudXBkYXRlQ2hvaWNlc0xpc3QodGhpcy5zdHJpcFZhbHVlc0lmTmVlZGVkKGEpKSk6dGhpcy51cGRhdGVDaG9pY2VzTGlzdChbXSl9dXBkYXRlQ2hvaWNlc0xpc3QobCl7Y29uc3QgYT1TJCh0aGlzLlRFWFRBUkVBKSxkPXoyZSh0aGlz'@;
put 'LlRFWFRBUkVBKSxoPXRoaXMuY2VsbFByb3BlcnRpZXMuc29ydEJ5UmVsZXZhbmNlLGY9dGhpcy5jZWxsUHJvcGVydGllcy5maWx0ZXI7bGV0IHY9bnVsbCxNPW51bGwsRD1sO2gmJih2PXRoaXMuc29ydEJ5UmVsZXZhbmNlKHRoaXMuc3RyaXBWYWx1ZUlmTmVlZGVkKHRoaXMuZ2V0VmFsdWUo'@;
put 'KSksRCx0aGlzLmNlbGxQcm9wZXJ0aWVzLmZpbHRlcmluZ0Nhc2VTZW5zaXRpdmUpKTtjb25zdCBaPUFycmF5LmlzQXJyYXkodik/di5sZW5ndGg6MDtpZighMT09PWYpWiYmKE09dlswXSk7ZWxzZXtjb25zdCByZT1bXTtmb3IobGV0IGNlPTAsYmU9RC5sZW5ndGg7Y2U8YmUmJiEoaCYmWjw9'@;
put 'Y2UpO2NlKyspcmUucHVzaChaP0RbdltjZV1dOkRbY2VdKTtNPTAsRD1yZX10aGlzLnN0cmlwcGVkQ2hvaWNlcz1ELHRoaXMuaHRFZGl0b3Iucm9vdEVsZW1lbnQuc3R5bGUuZGlzcGxheT0wPT09RC5sZW5ndGg/Im5vbmUiOiIiLHRoaXMuaHRFZGl0b3IubG9hZERhdGEoaEUoW0RdKSksRC5s'@;
put 'ZW5ndGg+MCYmKHRoaXMudXBkYXRlRHJvcGRvd25EaW1lbnNpb25zKCksdGhpcy5mbGlwRHJvcGRvd25JZk5lZWRlZCgpLCEwPT09dGhpcy5jZWxsUHJvcGVydGllcy5zdHJpY3QmJnRoaXMuaGlnaGxpZ2h0QmVzdE1hdGNoaW5nQ2hvaWNlKE0pKSx0aGlzLmhvdC5saXN0ZW4oKSx3RSh0aGlz'@;
put 'LlRFWFRBUkVBLGEsYT09PWQ/dm9pZCAwOmQpfWZsaXBEcm9wZG93bklmTmVlZGVkKCl7Y29uc3QgbD10aGlzLmdldEVkaXRlZENlbGxSZWN0KCksYT1sLmhlaWdodDtsZXQgZD1sLnRvcDtpZih0aGlzLmhvdC52aWV3LmlzVmVydGljYWxseVNjcm9sbGFibGVCeVdpbmRvdygpKXtjb25zdCBN'@;
put 'PXRoaXMuaG90LnZpZXcuZ2V0VGFibGVPZmZzZXQoKS50b3AtdGhpcy5ob3Qucm9vdFdpbmRvdy5zY3JvbGxZO2Q9TWF0aC5tYXgoZCtNLDApfWNvbnN0IGg9dGhpcy5nZXRIZWlnaHQoKSxmPXRoaXMuaG90LnZpZXcuZ2V0V29ya3NwYWNlSGVpZ2h0KCktZC1hLHY9aD5mJiZkPmYrYTtyZXR1'@;
put 'cm4gdj90aGlzLmZsaXBEcm9wZG93bihoKTp0aGlzLnVuZmxpcERyb3Bkb3duKCksdGhpcy5saW1pdERyb3Bkb3duSWZOZWVkZWQodj9kOmYsaCksdn1saW1pdERyb3Bkb3duSWZOZWVkZWQobCxhKXtpZihhPmwpe2xldCBkPTAsaD0wLGY9MCx2PW51bGw7ZG97Zj10aGlzLmh0RWRpdG9yLmdl'@;
put 'dFJvd0hlaWdodChoKXx8dGhpcy5odEVkaXRvci52aWV3LmdldERlZmF1bHRSb3dIZWlnaHQoKSxkKz1mLGgrPTF9d2hpbGUoZDxsKTt2PWQtZix0aGlzLmh0RWRpdG9yLmZsaXBwZWQmJih0aGlzLmh0RWRpdG9yLnJvb3RFbGVtZW50LnN0eWxlLnRvcD1wYXJzZUludCh0aGlzLmh0RWRpdG9y'@;
put 'LnJvb3RFbGVtZW50LnN0eWxlLnRvcCwxMCkrYS12KyJweCIpLHRoaXMuc2V0RHJvcGRvd25IZWlnaHQoZC1mKX19ZmxpcERyb3Bkb3duKGwpe2NvbnN0IGE9dGhpcy5odEVkaXRvci5yb290RWxlbWVudC5zdHlsZTthLnBvc2l0aW9uPSJhYnNvbHV0ZSIsYS50b3A9LWwrInB4Iix0aGlzLmh0'@;
put 'RWRpdG9yLmZsaXBwZWQ9ITB9dW5mbGlwRHJvcGRvd24oKXtjb25zdCBsPXRoaXMuaHRFZGl0b3Iucm9vdEVsZW1lbnQuc3R5bGU7bC5wb3NpdGlvbj0iYWJzb2x1dGUiLGwudG9wPSIiLHRoaXMuaHRFZGl0b3IuZmxpcHBlZD12b2lkIDB9dXBkYXRlRHJvcGRvd25EaW1lbnNpb25zKCl7dGhp'@;
put 'cy5odEVkaXRvci51cGRhdGVTZXR0aW5ncyh7d2lkdGg6dGhpcy5nZXRXaWR0aCgpLGhlaWdodDp0aGlzLmdldEhlaWdodCgpfSksT1goRlgsdGhpcyxWcGUpLmNhbGwodGhpcyksdGhpcy5odEVkaXRvci52aWV3Ll93dC53dFRhYmxlLmFsaWduT3ZlcmxheXNXaXRoVHJpbW1pbmdDb250YWlu'@;
put 'ZXIoKX1zZXREcm9wZG93bkhlaWdodChsKXt0aGlzLmh0RWRpdG9yLnVwZGF0ZVNldHRpbmdzKHtoZWlnaHQ6bH0pLE9YKEZYLHRoaXMsVnBlKS5jYWxsKHRoaXMpLHRoaXMuaHRFZGl0b3Iudmlldy5fd3Qud3RUYWJsZS5hbGlnbk92ZXJsYXlzV2l0aFRyaW1taW5nQ29udGFpbmVyKCl9aGln'@;
put 'aGxpZ2h0QmVzdE1hdGNoaW5nQ2hvaWNlKGwpeyJudW1iZXIiPT10eXBlb2YgbD90aGlzLmh0RWRpdG9yLnNlbGVjdENlbGwobCwwLHZvaWQgMCx2b2lkIDAsdm9pZCAwLCExKTp0aGlzLmh0RWRpdG9yLmRlc2VsZWN0Q2VsbCgpfWdldEhlaWdodCgpe2NvbnN0IGw9dGhpcy5ob3Qucm9vdFdp'@;
put 'bmRvdy5nZXRDb21wdXRlZFN0eWxlKHRoaXMuaHRDb250YWluZXIucXVlcnlTZWxlY3RvcigiLmh0Q29yZSIpKSxhPXBhcnNlSW50KGwuYm9yZGVyVG9wV2lkdGgsMTApK3BhcnNlSW50KGwuYm9yZGVyQm90dG9tV2lkdGgsMTApLGQ9TWF0aC5taW4odGhpcy5jZWxsUHJvcGVydGllcy52aXNp'@;
put 'YmxlUm93cyx0aGlzLnN0cmlwcGVkQ2hvaWNlcy5sZW5ndGgpO3JldHVybiBBcnJheS5mcm9tKHtsZW5ndGg6ZH0sKGYsdik9PnYpLnJlZHVjZSgoZix2KT0+ZisodGhpcy5odEVkaXRvci5nZXRSb3dIZWlnaHQodil8fHRoaXMuaHRFZGl0b3Iudmlldy5nZXREZWZhdWx0Um93SGVpZ2h0KCkp'@;
put 'LDApK2ErMX1nZXRXaWR0aCgpe2NvbnN0IGw9dGhpcy5ob3Qucm9vdFdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHRoaXMuaHRDb250YWluZXIucXVlcnlTZWxlY3RvcigiLmh0Q29yZSIpKSxhPXBhcnNlSW50KGwuYm9yZGVySW5saW5lU3RhcnRXaWR0aCwxMCkrcGFyc2VJbnQobC5ib3JkZXJJ'@;
put 'bmxpbmVFbmRXaWR0aCwxMCk7cmV0dXJuIHRoaXMuaHRFZGl0b3IuZ2V0Q29sV2lkdGgoMCkrYX1zdHJpcFZhbHVlSWZOZWVkZWQobCl7cmV0dXJuIHRoaXMuc3RyaXBWYWx1ZXNJZk5lZWRlZChbbF0pWzBdfXN0cmlwVmFsdWVzSWZOZWVkZWQobCl7Y29uc3R7YWxsb3dIdG1sOmF9PXRoaXMu'@;
put 'Y2VsbFByb3BlcnRpZXMsZD15cyhsLGY9PmxjKGYpKTtyZXR1cm4geXMoZCxmPT5hP2Y6ZyQoZikpfWFsbG93S2V5RXZlbnRQcm9wYWdhdGlvbihsKXtjb25zdCBhPXRoaXMuaHRFZGl0b3IuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSxkX3Jvdz1hP2EuZnJvbS5yb3c6LTE7bGV0IGg9ITE7cmV0'@;
put 'dXJuIGw9PT1ZYS5BUlJPV19ET1dOJiZkX3Jvdz4wJiZkX3Jvdzx0aGlzLmh0RWRpdG9yLmNvdW50Um93cygpLTEmJihoPSEwKSxsPT09WWEuQVJST1dfVVAmJmRfcm93Pi0xJiYoaD0hMCksaH1vbkJlZm9yZUtleURvd24obCl7aWYobmZlKGwua2V5Q29kZSl8fGwua2V5Q29kZT09PVlhLkJB'@;
put 'Q0tTUEFDRXx8bC5rZXlDb2RlPT09WWEuREVMRVRFfHxsLmtleUNvZGU9PT1ZYS5JTlNFUlQpe2xldCBhPTEwO2lmKGwua2V5Q29kZT09PVlhLkMmJihsLmN0cmxLZXl8fGwubWV0YUtleSkpcmV0dXJuO3RoaXMuaXNPcGVuZWQoKXx8KGErPTEwKSx0aGlzLmh0RWRpdG9yJiZ0aGlzLmhvdC5f'@;
put 'cmVnaXN0ZXJUaW1lb3V0KCgpPT57dGhpcy5xdWVyeUNob2ljZXModGhpcy5URVhUQVJFQS52YWx1ZSl9LGEpfX19ZnVuY3Rpb24gVnBlKCl7dGhpcy5odEVkaXRvci52aWV3Lmhhc1ZlcnRpY2FsU2Nyb2xsKCkmJnRoaXMuaHRFZGl0b3IudXBkYXRlU2V0dGluZ3Moe3dpZHRoOnRoaXMuZ2V0'@;
put 'V2lkdGgoKStmMCh0aGlzLmhvdC5yb290RG9jdW1lbnQpfSl9Y2xhc3MgQnBlIGV4dGVuZHMga197c3RhdGljIGdldCBFRElUT1JfVFlQRSgpe3JldHVybiJjaGVja2JveCJ9YmVnaW5FZGl0aW5nKGwsYSl7aWYoYSYmIm1vdXNldXAiPT09YS50eXBlJiYiVEQiPT09YS50YXJnZXQubm9kZU5h'@;
put 'bWUpe2NvbnN0IGQ9dGhpcy5URC5xdWVyeVNlbGVjdG9yKCdpbnB1dFt0eXBlPSJjaGVja2JveCJdJyk7cG8oZCwiaHRCYWRWYWx1ZSIpfHxkLmNsaWNrKCl9fWZpbmlzaEVkaXRpbmcoKXt9aW5pdCgpe31vcGVuKCl7fWNsb3NlKCl7fWdldFZhbHVlKCl7fXNldFZhbHVlKCl7fWZvY3VzKCl7'@;
put 'fX1jb25zdCBHbT0oKT0+d2luZG93LCQyPSgpPT53aW5kb3cuZG9jdW1lbnQsTlg9KGMsbCk9PndpbmRvdy5zZXRUaW1lb3V0KGMsbCksSHA9ZnVuY3Rpb24oYyxsLGEsZCl7Yy5hZGRFdmVudExpc3RlbmVyKGwsYSwhIWQpfSxrZz1mdW5jdGlvbihjLGwsYSxkKXtjLnJlbW92ZUV2ZW50TGlz'@;
put 'dGVuZXIobCxhLCEhZCl9LFJoPWZ1bmN0aW9uKGMsbCl7cmV0dXJuLTEhPT0oIiAiK2MuY2xhc3NOYW1lKyIgIikuaW5kZXhPZigiICIrbCsiICIpfSxWWD1mdW5jdGlvbihjLGwpe1JoKGMsbCl8fChjLmNsYXNzTmFtZT0iIj09PWMuY2xhc3NOYW1lP2w6Yy5jbGFzc05hbWUrIiAiK2wpfSxC'@;
put 'WD1mdW5jdGlvbihjLGwpe2MuY2xhc3NOYW1lPWZ1bmN0aW9uKGMpe3JldHVybiBjLnRyaW0/Yy50cmltKCk6Yy5yZXBsYWNlKC9eXHMrfFxzKyQvZywiIil9KCgiICIrYy5jbGFzc05hbWUrIiAiKS5yZXBsYWNlKCIgIitsKyIgIiwiICIpKX0salg9ZnVuY3Rpb24oYyl7cmV0dXJuL0FycmF5'@;
put 'Ly50ZXN0KE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChjKSl9LExoPWZ1bmN0aW9uKGMpe3JldHVybi9EYXRlLy50ZXN0KE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChjKSkmJiFpc05hTihjLmdldFRpbWUoKSl9LGRhdD1mdW5jdGlvbihjKXtsZXQgbD1jLmdldERheSgp'@;
put 'O3JldHVybiAwPT09bHx8Nj09PWx9LGhhdD1mdW5jdGlvbihjKXtyZXR1cm4gYyU0PT0wJiZjJTEwMCE9MHx8YyU0MDA9PTB9LGpwZT1mdW5jdGlvbihjLGwpe3JldHVyblszMSxoYXQoYyk/Mjk6MjgsMzEsMzAsMzEsMzAsMzEsMzEsMzAsMzEsMzAsMzFdW2xdfSx6UD1mdW5jdGlvbihjKXtM'@;
put 'aChjKSYmYy5zZXRIb3VycygwLDAsMCwwKX0sVVA9ZnVuY3Rpb24oYyxsKXtyZXR1cm4gYy5nZXRUaW1lKCk9PT1sLmdldFRpbWUoKX0sWlA9ZnVuY3Rpb24oYyxsLGEpe2xldCBkLGg7Zm9yKGQgaW4gbCloPXZvaWQgMCE9PWNbZF0saCYmIm9iamVjdCI9PXR5cGVvZiBsW2RdJiZudWxsIT09'@;
put 'bFtkXSYmdm9pZCAwPT09bFtkXS5ub2RlTmFtZT9MaChsW2RdKT9hJiYoY1tkXT1uZXcgRGF0ZShsW2RdLmdldFRpbWUoKSkpOmpYKGxbZF0pP2EmJihjW2RdPWxbZF0uc2xpY2UoMCkpOmNbZF09WlAoe30sbFtkXSxhKTooYXx8IWgpJiYoY1tkXT1sW2RdKTtyZXR1cm4gY30senBlPWZ1bmN0'@;
put 'aW9uKGMsbCxhKXtsZXQgZD0kMigpLmNyZWF0ZUV2ZW50KCJIVE1MRXZlbnRzIik7ZC5pbml0RXZlbnQobCwhMCwhMSksZD1aUChkLGEpLGMuZGlzcGF0Y2hFdmVudChkKX0sVXBlPWZ1bmN0aW9uKGMpe3JldHVybiBjLm1vbnRoPDAmJihjLnllYXItPU1hdGguY2VpbChNYXRoLmFicyhjLm1v'@;
put 'bnRoKS8xMiksYy5tb250aCs9MTIpLGMubW9udGg+MTEmJihjLnllYXIrPU1hdGguZmxvb3IoTWF0aC5hYnMoYy5tb250aCkvMTIpLGMubW9udGgtPTEyKSxjfSxOcD17ZmllbGQ6bnVsbCxib3VuZDp2b2lkIDAsYXJpYUxhYmVsOiJVc2UgdGhlIGFycm93IGtleXMgdG8gcGljayBhIGRhdGUi'@;
put 'LHBvc2l0aW9uOiJib3R0b20gbGVmdCIscmVwb3NpdGlvbjohMCxmb3JtYXQ6IllZWVktTU0tREQiLHRvU3RyaW5nOm51bGwscGFyc2U6bnVsbCxkZWZhdWx0RGF0ZTpudWxsLHNldERlZmF1bHREYXRlOiExLGZpcnN0RGF5OjAsZmlyc3RXZWVrT2ZZZWFyTWluRGF5czo0LGZvcm1hdFN0cmlj'@;
put 'dDohMSxtaW5EYXRlOm51bGwsbWF4RGF0ZTpudWxsLHllYXJSYW5nZToxMCxzaG93V2Vla051bWJlcjohMSxwaWNrV2hvbGVXZWVrOiExLG1pblllYXI6MCxtYXhZZWFyOjk5OTksbWluTW9udGg6dm9pZCAwLG1heE1vbnRoOnZvaWQgMCxzdGFydFJhbmdlOm51bGwsZW5kUmFuZ2U6bnVsbCxp'@;
put 'c1JUTDohMSx5ZWFyU3VmZml4OiIiLHNob3dNb250aEFmdGVyWWVhcjohMSxzaG93RGF5c0luTmV4dEFuZFByZXZpb3VzTW9udGhzOiExLGVuYWJsZVNlbGVjdGlvbkRheXNJbk5leHRBbmRQcmV2aW91c01vbnRoczohMSxudW1iZXJPZk1vbnRoczoxLG1haW5DYWxlbmRhcjoibGVmdCIsY29u'@;
put 'dGFpbmVyOnZvaWQgMCxibHVyRmllbGRPblNlbGVjdDohMCxpMThuOntwcmV2aW91c01vbnRoOiJQcmV2aW91cyBNb250aCIsbmV4dE1vbnRoOiJOZXh0IE1vbnRoIixtb250aHM6WyJKYW51YXJ5IiwiRmVicnVhcnkiLCJNYXJjaCIsIkFwcmlsIiwiTWF5IiwiSnVuZSIsIkp1bHkiLCJBdWd1'@;
put 'c3QiLCJTZXB0ZW1iZXIiLCJPY3RvYmVyIiwiTm92ZW1iZXIiLCJEZWNlbWJlciJdLHdlZWtkYXlzOlsiU3VuZGF5IiwiTW9uZGF5IiwiVHVlc2RheSIsIldlZG5lc2RheSIsIlRodXJzZGF5IiwiRnJpZGF5IiwiU2F0dXJkYXkiXSx3ZWVrZGF5c1Nob3J0OlsiU3VuIiwiTW9uIiwiVHVlIiwi'@;
put 'V2VkIiwiVGh1IiwiRnJpIiwiU2F0Il19LHRoZW1lOm51bGwsZXZlbnRzOltdLG9uU2VsZWN0Om51bGwsb25PcGVuOm51bGwsb25DbG9zZTpudWxsLG9uRHJhdzpudWxsLGtleWJvYXJkSW5wdXQ6ITB9LFpwZT1mdW5jdGlvbihjLGwsYSl7Zm9yKGwrPWMuZmlyc3REYXk7bD49NzspbC09Nzty'@;
put 'ZXR1cm4gYT9jLmkxOG4ud2Vla2RheXNTaG9ydFtsXTpjLmkxOG4ud2Vla2RheXNbbF19LGZhdD1mdW5jdGlvbihjKXtsZXQgbD1bXSxhPSJmYWxzZSI7aWYoYy5pc0VtcHR5KXtpZighYy5zaG93RGF5c0luTmV4dEFuZFByZXZpb3VzTW9udGhzKXJldHVybic8dGQgY2xhc3M9ImlzLWVtcHR5'@;
put 'Ij48L3RkPic7bC5wdXNoKCJpcy1vdXRzaWRlLWN1cnJlbnQtbW9udGgiKSxjLmVuYWJsZVNlbGVjdGlvbkRheXNJbk5leHRBbmRQcmV2aW91c01vbnRoc3x8bC5wdXNoKCJpcy1zZWxlY3Rpb24tZGlzYWJsZWQiKX1yZXR1cm4gYy5pc0Rpc2FibGVkJiZsLnB1c2goImlzLWRpc2FibGVkIiks'@;
put 'Yy5pc1RvZGF5JiZsLnB1c2goImlzLXRvZGF5IiksYy5pc1NlbGVjdGVkJiYobC5wdXNoKCJpcy1zZWxlY3RlZCIpLGE9InRydWUiKSxjLmhhc0V2ZW50JiZsLnB1c2goImhhcy1ldmVudCIpLGMuaXNJblJhbmdlJiZsLnB1c2goImlzLWlucmFuZ2UiKSxjLmlzU3RhcnRSYW5nZSYmbC5wdXNo'@;
put 'KCJpcy1zdGFydHJhbmdlIiksYy5pc0VuZFJhbmdlJiZsLnB1c2goImlzLWVuZHJhbmdlIiksJzx0ZCBkYXRhLWRheT0iJytjLmRheSsnIiBjbGFzcz0iJytsLmpvaW4oIiAiKSsnIiBhcmlhLXNlbGVjdGVkPSInK2ErJyI+PGJ1dHRvbiBjbGFzcz0icGlrYS1idXR0b24gcGlrYS1kYXkiIHR5'@;
put 'cGU9ImJ1dHRvbiIgZGF0YS1waWthLXllYXI9IicrYy55ZWFyKyciIGRhdGEtcGlrYS1tb250aD0iJytjLm1vbnRoKyciIGRhdGEtcGlrYS1kYXk9IicrYy5kYXkrJyI+JytjLmRheSsiPC9idXR0b24+PC90ZD4ifSxnYXQ9ZnVuY3Rpb24oYyxsLGEsZCxoKXtsZXQgZj1uZXcgRGF0ZShkLGEs'@;
put 'bCk7cmV0dXJuJzx0ZCBjbGFzcz0icGlrYS13ZWVrIj4nKyhjLmhhc01vbWVudD9jLm1vbWVudChmKS5pc29XZWVrKCk6ZnVuY3Rpb24oYyxsKXtjLnNldEhvdXJzKDAsMCwwLDApO2xldCBhPWMuZ2V0RGF0ZSgpLGQ9Yy5nZXREYXkoKSxoPWwsZj1oLTEsTT1mdW5jdGlvbihiZSl7cmV0dXJu'@;
put 'KGJlKzctMSklN307Yy5zZXREYXRlKGErZi1NKGQpKTtsZXQgRD1uZXcgRGF0ZShjLmdldEZ1bGxZZWFyKCksMCxoKSxyZT0oYy5nZXRUaW1lKCktRC5nZXRUaW1lKCkpLzg2NGU1O3JldHVybiAxK01hdGgucm91bmQoKHJlLWYrTShELmdldERheSgpKSkvNyl9KGYsaCkpKyI8L3RkPiJ9LG1h'@;
put 'dD1mdW5jdGlvbihjLGwsYSxkKXtyZXR1cm4nPHRyIGNsYXNzPSJwaWthLXJvdycrKGE/IiBwaWNrLXdob2xlLXdlZWsiOiIiKSsoZD8iIGlzLXNlbGVjdGVkIjoiIikrJyI+JysobD9jLnJldmVyc2UoKTpjKS5qb2luKCIiKSsiPC90cj4ifSx5YXQ9ZnVuY3Rpb24oYyxsLGEsZCxoLGYpe2xl'@;
put 'dCB2LE0sRCxFZSxCZSxaPWMuX28scmU9YT09PVoubWluWWVhcixjZT1hPT09Wi5tYXhZZWFyLGJlPSc8ZGl2IGlkPSInK2YrJyIgY2xhc3M9InBpa2EtdGl0bGUiIHJvbGU9ImhlYWRpbmciIGFyaWEtbGl2ZT0icG9saXRlIj4nLHFlPSEwLHJ0PSEwO2ZvcihEPVtdLHY9MDt2PDEyO3YrKylE'@;
put 'LnB1c2goJzxvcHRpb24gdmFsdWU9IicrKGE9PT1oP3YtbDoxMit2LWwpKyciJysodj09PWQ/JyBzZWxlY3RlZD0ic2VsZWN0ZWQiJzoiIikrKHJlJiZ2PFoubWluTW9udGh8fGNlJiZ2PloubWF4TW9udGg/JyBkaXNhYmxlZD0iZGlzYWJsZWQiJzoiIikrIj4iK1ouaTE4bi5tb250aHNbdl0r'@;
put 'Ijwvb3B0aW9uPiIpO2ZvcihFZT0nPGRpdiBjbGFzcz0icGlrYS1sYWJlbCI+JytaLmkxOG4ubW9udGhzW2RdKyc8c2VsZWN0IGNsYXNzPSJwaWthLXNlbGVjdCBwaWthLXNlbGVjdC1tb250aCIgdGFiaW5kZXg9Ii0xIj4nK0Quam9pbigiIikrIjwvc2VsZWN0PjwvZGl2PiIsalgoWi55ZWFy'@;
put 'UmFuZ2UpPyh2PVoueWVhclJhbmdlWzBdLE09Wi55ZWFyUmFuZ2VbMV0rMSk6KHY9YS1aLnllYXJSYW5nZSxNPTErYStaLnllYXJSYW5nZSksRD1bXTt2PE0mJnY8PVoubWF4WWVhcjt2Kyspdj49Wi5taW5ZZWFyJiZELnB1c2goJzxvcHRpb24gdmFsdWU9IicrdisnIicrKHY9PT1hPycgc2Vs'@;
put 'ZWN0ZWQ9InNlbGVjdGVkIic6IiIpKyI+Iit2KyI8L29wdGlvbj4iKTtyZXR1cm4gQmU9JzxkaXYgY2xhc3M9InBpa2EtbGFiZWwiPicrYStaLnllYXJTdWZmaXgrJzxzZWxlY3QgY2xhc3M9InBpa2Etc2VsZWN0IHBpa2Etc2VsZWN0LXllYXIiIHRhYmluZGV4PSItMSI+JytELmpvaW4oIiIp'@;
put 'KyI8L3NlbGVjdD48L2Rpdj4iLGJlKz1aLnNob3dNb250aEFmdGVyWWVhcj9CZStFZTpFZStCZSxyZSYmKDA9PT1kfHxaLm1pbk1vbnRoPj1kKSYmKHFlPSExKSxjZSYmKDExPT09ZHx8Wi5tYXhNb250aDw9ZCkmJihydD0hMSksMD09PWwmJihiZSs9JzxidXR0b24gY2xhc3M9InBpa2EtcHJl'@;
put 'dicrKHFlPyIiOiIgaXMtZGlzYWJsZWQiKSsnIiB0eXBlPSJidXR0b24iPicrWi5pMThuLnByZXZpb3VzTW9udGgrIjwvYnV0dG9uPiIpLGw9PT1jLl9vLm51bWJlck9mTW9udGhzLTEmJihiZSs9JzxidXR0b24gY2xhc3M9InBpa2EtbmV4dCcrKHJ0PyIiOiIgaXMtZGlzYWJsZWQiKSsnIiB0'@;
put 'eXBlPSJidXR0b24iPicrWi5pMThuLm5leHRNb250aCsiPC9idXR0b24+IiksYmUrIjwvZGl2PiJ9O2Z1bmN0aW9uIHpYKGMpe2xldCBsPXRoaXMsYT1sLmNvbmZpZyhjKTtsLl9vbk1vdXNlRG93bj1mdW5jdGlvbihoKXtpZighbC5fdilyZXR1cm47bGV0IGY9KGg9aHx8R20oKS5ldmVudCku'@;
put 'dGFyZ2V0fHxoLnNyY0VsZW1lbnQ7aWYoZilpZihSaChmLCJpcy1kaXNhYmxlZCIpfHwoIVJoKGYsInBpa2EtYnV0dG9uIil8fFJoKGYsImlzLWVtcHR5Iil8fFJoKGYucGFyZW50Tm9kZSwiaXMtZGlzYWJsZWQiKT9SaChmLCJwaWthLXByZXYiKT9sLnByZXZNb250aCgpOlJoKGYsInBpa2Et'@;
put 'bmV4dCIpJiZsLm5leHRNb250aCgpOihsLnNldERhdGUobmV3IERhdGUoZi5nZXRBdHRyaWJ1dGUoImRhdGEtcGlrYS15ZWFyIiksZi5nZXRBdHRyaWJ1dGUoImRhdGEtcGlrYS1tb250aCIpLGYuZ2V0QXR0cmlidXRlKCJkYXRhLXBpa2EtZGF5IikpKSxhLmJvdW5kJiZOWChmdW5jdGlvbigp'@;
put 'e2wuaGlkZSgpLGEuYmx1ckZpZWxkT25TZWxlY3QmJmEuZmllbGQmJmEuZmllbGQuYmx1cigpfSwxMDApKSksUmgoZiwicGlrYS1zZWxlY3QiKSlsLl9jPSEwO2Vsc2V7aWYoIWgucHJldmVudERlZmF1bHQpcmV0dXJuIGgucmV0dXJuVmFsdWU9ITEsITE7aC5wcmV2ZW50RGVmYXVsdCgpfX0s'@;
put 'bC5fb25DaGFuZ2U9ZnVuY3Rpb24oaCl7bGV0IGY9KGg9aHx8R20oKS5ldmVudCkudGFyZ2V0fHxoLnNyY0VsZW1lbnQ7ZiYmKFJoKGYsInBpa2Etc2VsZWN0LW1vbnRoIik/bC5nb3RvTW9udGgoZi52YWx1ZSk6UmgoZiwicGlrYS1zZWxlY3QteWVhciIpJiZsLmdvdG9ZZWFyKGYudmFsdWUp'@;
put 'KX0sbC5fb25LZXlDaGFuZ2U9ZnVuY3Rpb24oaCl7aWYoaD1ofHxHbSgpLmV2ZW50LGwuaXNWaXNpYmxlKCkpc3dpdGNoKGgua2V5Q29kZSl7Y2FzZSAxMzpjYXNlIDI3OmEuZmllbGQmJmEuZmllbGQuYmx1cigpO2JyZWFrO2Nhc2UgMzc6bC5hZGp1c3REYXRlKCJzdWJ0cmFjdCIsMSk7YnJl'@;
put 'YWs7Y2FzZSAzODpsLmFkanVzdERhdGUoInN1YnRyYWN0Iiw3KTticmVhaztjYXNlIDM5OmwuYWRqdXN0RGF0ZSgiYWRkIiwxKTticmVhaztjYXNlIDQwOmwuYWRqdXN0RGF0ZSgiYWRkIiw3KTticmVhaztjYXNlIDg6Y2FzZSA0NjpsLnNldERhdGUobnVsbCl9fSxsLl9wYXJzZUZpZWxkVmFs'@;
put 'dWU9ZnVuY3Rpb24oKXtpZihhLnBhcnNlKXJldHVybiBhLnBhcnNlKGEuZmllbGQudmFsdWUsYS5mb3JtYXQpO2lmKHRoaXMuaGFzTW9tZW50KXtsZXQgaD10aGlzLm1vbWVudChhLmZpZWxkLnZhbHVlLGEuZm9ybWF0LGEuZm9ybWF0U3RyaWN0KTtyZXR1cm4gaCYmaC5pc1ZhbGlkKCk/aC50'@;
put 'b0RhdGUoKTpudWxsfXJldHVybiBuZXcgRGF0ZShEYXRlLnBhcnNlKGEuZmllbGQudmFsdWUpKX0sbC5fb25JbnB1dENoYW5nZT1mdW5jdGlvbihoKXtsZXQgZjtoLmZpcmVkQnkhPT1sJiYoZj1sLl9wYXJzZUZpZWxkVmFsdWUoKSxMaChmKSYmbC5zZXREYXRlKGYpLGwuX3Z8fGwuc2hvdygp'@;
put 'KX0sbC5fb25JbnB1dEZvY3VzPWZ1bmN0aW9uKCl7bC5zaG93KCl9LGwuX29uSW5wdXRDbGljaz1mdW5jdGlvbigpe2wuc2hvdygpfSxsLl9vbklucHV0Qmx1cj1mdW5jdGlvbigpe2xldCBoPSQyKCkuYWN0aXZlRWxlbWVudDtkb3tpZihSaChoLCJwaWthLXNpbmdsZSIpKXJldHVybn13aGls'@;
put 'ZShoPWgucGFyZW50Tm9kZSk7bC5fY3x8KGwuX2I9TlgoZnVuY3Rpb24oKXtsLmhpZGUoKX0sNTApKSxsLl9jPSExfSxsLl9vbkNsaWNrPWZ1bmN0aW9uKGgpe2xldCBmPShoPWh8fEdtKCkuZXZlbnQpLnRhcmdldHx8aC5zcmNFbGVtZW50LHY9ZjtpZihmKXshaGFzRXZlbnRMaXN0ZW5lcnMm'@;
put 'JlJoKGYsInBpa2Etc2VsZWN0IikmJihmLm9uY2hhbmdlfHwoZi5zZXRBdHRyaWJ1dGUoIm9uY2hhbmdlIiwicmV0dXJuOyIpLEhwKGYsImNoYW5nZSIsbC5fb25DaGFuZ2UpKSk7ZG97aWYoUmgodiwicGlrYS1zaW5nbGUiKXx8dj09PWEudHJpZ2dlcilyZXR1cm59d2hpbGUodj12LnBhcmVu'@;
put 'dE5vZGUpO2wuX3YmJmYhPT1hLnRyaWdnZXImJnYhPT1hLnRyaWdnZXImJmwuaGlkZSgpfX0sbC5lbD0kMigpLmNyZWF0ZUVsZW1lbnQoImRpdiIpLGwuZWwuY2xhc3NOYW1lPSJwaWthLXNpbmdsZSIrKGEuaXNSVEw/IiBpcy1ydGwiOiIiKSsoYS50aGVtZT8iICIrYS50aGVtZToiIiksSHAo'@;
put 'bC5lbCwibW91c2Vkb3duIixsLl9vbk1vdXNlRG93biwhMCksSHAobC5lbCwidG91Y2hlbmQiLGwuX29uTW91c2VEb3duLCEwKSxIcChsLmVsLCJjaGFuZ2UiLGwuX29uQ2hhbmdlKSxhLmtleWJvYXJkSW5wdXQmJkhwKCQyKCksImtleWRvd24iLGwuX29uS2V5Q2hhbmdlKSxhLmZpZWxkJiYo'@;
put 'YS5jb250YWluZXI/YS5jb250YWluZXIuYXBwZW5kQ2hpbGQobC5lbCk6YS5ib3VuZD8kMigpLmJvZHkuYXBwZW5kQ2hpbGQobC5lbCk6YS5maWVsZC5wYXJlbnROb2RlLmluc2VydEJlZm9yZShsLmVsLGEuZmllbGQubmV4dFNpYmxpbmcpLEhwKGEuZmllbGQsImNoYW5nZSIsbC5fb25JbnB1'@;
put 'dENoYW5nZSksYS5kZWZhdWx0RGF0ZXx8KGEuZGVmYXVsdERhdGU9bC5fcGFyc2VGaWVsZFZhbHVlKCksYS5zZXREZWZhdWx0RGF0ZT0hMCkpO2xldCBkPWEuZGVmYXVsdERhdGU7TGgoZCk/YS5zZXREZWZhdWx0RGF0ZT9sLnNldERhdGUoZCwhMCk6bC5nb3RvRGF0ZShkKTpsLmdvdG9EYXRl'@;
put 'KG5ldyBEYXRlKSxhLmJvdW5kPyh0aGlzLmhpZGUoKSxsLmVsLmNsYXNzTmFtZSs9IiBpcy1ib3VuZCIsSHAoYS50cmlnZ2VyLCJjbGljayIsbC5fb25JbnB1dENsaWNrKSxIcChhLnRyaWdnZXIsImZvY3VzIixsLl9vbklucHV0Rm9jdXMpLEhwKGEudHJpZ2dlciwiYmx1ciIsbC5fb25JbnB1'@;
put 'dEJsdXIpKTp0aGlzLnNob3coKX1mdW5jdGlvbiBXcGUoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIFNhdChjKXt2YXIgbD1mdW5jdGlvbiBNYXQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1h'@;
put 'KXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlciko'@;
put 'Yyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWZ1bmN0aW9uIFVYKGMsbCxhKXtp'@;
put 'ZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX16WC5wcm90b3R5cGU9e2NvbmZpZzpmdW5jdGlv'@;
put 'bihjKXt0aGlzLl9vfHwodGhpcy5fbz1aUCh7fSxOcCwhMCkpO2xldCBsPVpQKHRoaXMuX28sYywhMCk7bC5pc1JUTD0hIWwuaXNSVEwsbC5maWVsZD1sLmZpZWxkJiZsLmZpZWxkLm5vZGVOYW1lP2wuZmllbGQ6bnVsbCxsLnRoZW1lPSJzdHJpbmciPT10eXBlb2YgbC50aGVtZSYmbC50aGVt'@;
put 'ZT9sLnRoZW1lOm51bGwsbC5ib3VuZD0hISh2b2lkIDAhPT1sLmJvdW5kP2wuZmllbGQmJmwuYm91bmQ6bC5maWVsZCksbC50cmlnZ2VyPWwudHJpZ2dlciYmbC50cmlnZ2VyLm5vZGVOYW1lP2wudHJpZ2dlcjpsLmZpZWxkLGwuZGlzYWJsZVdlZWtlbmRzPSEhbC5kaXNhYmxlV2Vla2VuZHMs'@;
put 'bC5kaXNhYmxlRGF5Rm49ImZ1bmN0aW9uIj09dHlwZW9mIGwuZGlzYWJsZURheUZuP2wuZGlzYWJsZURheUZuOm51bGw7bGV0IGE9cGFyc2VJbnQobC5udW1iZXJPZk1vbnRocywxMCl8fDE7aWYobC5udW1iZXJPZk1vbnRocz1hPjQ/NDphLExoKGwubWluRGF0ZSl8fChsLm1pbkRhdGU9ITEp'@;
put 'LExoKGwubWF4RGF0ZSl8fChsLm1heERhdGU9ITEpLGwubWluRGF0ZSYmbC5tYXhEYXRlJiZsLm1heERhdGU8bC5taW5EYXRlJiYobC5tYXhEYXRlPWwubWluRGF0ZT0hMSksbC5taW5EYXRlJiZ0aGlzLnNldE1pbkRhdGUobC5taW5EYXRlKSxsLm1heERhdGUmJnRoaXMuc2V0TWF4RGF0ZShs'@;
put 'Lm1heERhdGUpLGpYKGwueWVhclJhbmdlKSl7bGV0IGQ9KG5ldyBEYXRlKS5nZXRGdWxsWWVhcigpLTEwO2wueWVhclJhbmdlWzBdPXBhcnNlSW50KGwueWVhclJhbmdlWzBdLDEwKXx8ZCxsLnllYXJSYW5nZVsxXT1wYXJzZUludChsLnllYXJSYW5nZVsxXSwxMCl8fGR9ZWxzZSBsLnllYXJS'@;
put 'YW5nZT1NYXRoLmFicyhwYXJzZUludChsLnllYXJSYW5nZSwxMCkpfHxOcC55ZWFyUmFuZ2UsbC55ZWFyUmFuZ2U+MTAwJiYobC55ZWFyUmFuZ2U9MTAwKTtyZXR1cm4gbH0sdG9TdHJpbmc6ZnVuY3Rpb24oYyl7cmV0dXJuIGM9Y3x8dGhpcy5fby5mb3JtYXQsTGgodGhpcy5fZCk/dGhpcy5f'@;
put 'by50b1N0cmluZz90aGlzLl9vLnRvU3RyaW5nKHRoaXMuX2QsYyk6dGhpcy5oYXNNb21lbnQ/dGhpcy5tb21lbnQodGhpcy5fZCkuZm9ybWF0KGMpOnRoaXMuX2QudG9EYXRlU3RyaW5nKCk6IiJ9LGdldE1vbWVudDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmhhc01vbWVudD90aGlzLm1vbWVu'@;
put 'dCh0aGlzLl9kKTpudWxsfSxzZXRNb21lbnQ6ZnVuY3Rpb24oYyxsKXt0aGlzLmhhc01vbWVudCYmdGhpcy5tb21lbnQuaXNNb21lbnQoYykmJnRoaXMuc2V0RGF0ZShjLnRvRGF0ZSgpLGwpfSx1c2VNb21lbnQ6ZnVuY3Rpb24oYyl7dGhpcy5oYXNNb21lbnQ9ITAsdGhpcy5tb21lbnQ9Y30s'@;
put 'Z2V0RGF0ZTpmdW5jdGlvbigpe3JldHVybiBMaCh0aGlzLl9kKT9uZXcgRGF0ZSh0aGlzLl9kLmdldFRpbWUoKSk6bnVsbH0sc2V0RGF0ZTpmdW5jdGlvbihjLGwpe2lmKCFjKXJldHVybiB0aGlzLl9kPW51bGwsdGhpcy5fby5maWVsZCYmKHRoaXMuX28uZmllbGQudmFsdWU9IiIsenBlKHRo'@;
put 'aXMuX28uZmllbGQsImNoYW5nZSIse2ZpcmVkQnk6dGhpc30pKSx0aGlzLmRyYXcoKTtpZigic3RyaW5nIj09dHlwZW9mIGMmJihjPW5ldyBEYXRlKERhdGUucGFyc2UoYykpKSwhTGgoYykpcmV0dXJuO2xldCBhPXRoaXMuX28ubWluRGF0ZSxkPXRoaXMuX28ubWF4RGF0ZTtMaChhKSYmYzxh'@;
put 'P2M9YTpMaChkKSYmYz5kJiYoYz1kKSx0aGlzLl9kPW5ldyBEYXRlKGMuZ2V0VGltZSgpKSx6UCh0aGlzLl9kKSx0aGlzLmdvdG9EYXRlKHRoaXMuX2QpLHRoaXMuX28uZmllbGQmJih0aGlzLl9vLmZpZWxkLnZhbHVlPXRoaXMudG9TdHJpbmcoKSx6cGUodGhpcy5fby5maWVsZCwiY2hhbmdl'@;
put 'Iix7ZmlyZWRCeTp0aGlzfSkpLCFsJiYiZnVuY3Rpb24iPT10eXBlb2YgdGhpcy5fby5vblNlbGVjdCYmdGhpcy5fby5vblNlbGVjdC5jYWxsKHRoaXMsdGhpcy5nZXREYXRlKCkpfSxjbGVhcjpmdW5jdGlvbigpe3RoaXMuc2V0RGF0ZShudWxsKX0sZ290b0RhdGU6ZnVuY3Rpb24oYyl7bGV0'@;
put 'IGw9ITA7aWYoTGgoYykpe2lmKHRoaXMuY2FsZW5kYXJzKXtsZXQgYT1uZXcgRGF0ZSh0aGlzLmNhbGVuZGFyc1swXS55ZWFyLHRoaXMuY2FsZW5kYXJzWzBdLm1vbnRoLDEpLGQ9bmV3IERhdGUodGhpcy5jYWxlbmRhcnNbdGhpcy5jYWxlbmRhcnMubGVuZ3RoLTFdLnllYXIsdGhpcy5jYWxl'@;
put 'bmRhcnNbdGhpcy5jYWxlbmRhcnMubGVuZ3RoLTFdLm1vbnRoLDEpLGg9Yy5nZXRUaW1lKCk7ZC5zZXRNb250aChkLmdldE1vbnRoKCkrMSksZC5zZXREYXRlKGQuZ2V0RGF0ZSgpLTEpLGw9aDxhLmdldFRpbWUoKXx8ZC5nZXRUaW1lKCk8aH1sJiYodGhpcy5jYWxlbmRhcnM9W3ttb250aDpj'@;
put 'LmdldE1vbnRoKCkseWVhcjpjLmdldEZ1bGxZZWFyKCl9XSwicmlnaHQiPT09dGhpcy5fby5tYWluQ2FsZW5kYXImJih0aGlzLmNhbGVuZGFyc1swXS5tb250aCs9MS10aGlzLl9vLm51bWJlck9mTW9udGhzKSksdGhpcy5hZGp1c3RDYWxlbmRhcnMoKX19LGFkanVzdERhdGU6ZnVuY3Rpb24o'@;
put 'YyxsKXtsZXQgaCxhPXRoaXMuZ2V0RGF0ZSgpfHxuZXcgRGF0ZSxkPTI0KnBhcnNlSW50KGwpKjYwKjYwKjFlMzsiYWRkIj09PWM/aD1uZXcgRGF0ZShhLnZhbHVlT2YoKStkKToic3VidHJhY3QiPT09YyYmKGg9bmV3IERhdGUoYS52YWx1ZU9mKCktZCkpLHRoaXMuc2V0RGF0ZShoKX0sYWRq'@;
put 'dXN0Q2FsZW5kYXJzOmZ1bmN0aW9uKCl7dGhpcy5jYWxlbmRhcnNbMF09VXBlKHRoaXMuY2FsZW5kYXJzWzBdKTtmb3IobGV0IGM9MTtjPHRoaXMuX28ubnVtYmVyT2ZNb250aHM7YysrKXRoaXMuY2FsZW5kYXJzW2NdPVVwZSh7bW9udGg6dGhpcy5jYWxlbmRhcnNbMF0ubW9udGgrYyx5ZWFy'@;
put 'OnRoaXMuY2FsZW5kYXJzWzBdLnllYXJ9KTt0aGlzLmRyYXcoKX0sZ290b1RvZGF5OmZ1bmN0aW9uKCl7dGhpcy5nb3RvRGF0ZShuZXcgRGF0ZSl9LGdvdG9Nb250aDpmdW5jdGlvbihjKXtpc05hTihjKXx8KHRoaXMuY2FsZW5kYXJzWzBdLm1vbnRoPXBhcnNlSW50KGMsMTApLHRoaXMuYWRq'@;
put 'dXN0Q2FsZW5kYXJzKCkpfSxuZXh0TW9udGg6ZnVuY3Rpb24oKXt0aGlzLmNhbGVuZGFyc1swXS5tb250aCsrLHRoaXMuYWRqdXN0Q2FsZW5kYXJzKCl9LHByZXZNb250aDpmdW5jdGlvbigpe3RoaXMuY2FsZW5kYXJzWzBdLm1vbnRoLS0sdGhpcy5hZGp1c3RDYWxlbmRhcnMoKX0sZ290b1ll'@;
put 'YXI6ZnVuY3Rpb24oYyl7aXNOYU4oYyl8fCh0aGlzLmNhbGVuZGFyc1swXS55ZWFyPXBhcnNlSW50KGMsMTApLHRoaXMuYWRqdXN0Q2FsZW5kYXJzKCkpfSxzZXRNaW5EYXRlOmZ1bmN0aW9uKGMpe2MgaW5zdGFuY2VvZiBEYXRlPyh6UChjKSx0aGlzLl9vLm1pbkRhdGU9Yyx0aGlzLl9vLm1p'@;
put 'blllYXI9Yy5nZXRGdWxsWWVhcigpLHRoaXMuX28ubWluTW9udGg9Yy5nZXRNb250aCgpKToodGhpcy5fby5taW5EYXRlPU5wLm1pbkRhdGUsdGhpcy5fby5taW5ZZWFyPU5wLm1pblllYXIsdGhpcy5fby5taW5Nb250aD1OcC5taW5Nb250aCx0aGlzLl9vLnN0YXJ0UmFuZ2U9TnAuc3RhcnRS'@;
put 'YW5nZSksdGhpcy5kcmF3KCl9LHNldE1heERhdGU6ZnVuY3Rpb24oYyl7YyBpbnN0YW5jZW9mIERhdGU/KHpQKGMpLHRoaXMuX28ubWF4RGF0ZT1jLHRoaXMuX28ubWF4WWVhcj1jLmdldEZ1bGxZZWFyKCksdGhpcy5fby5tYXhNb250aD1jLmdldE1vbnRoKCkpOih0aGlzLl9vLm1heERhdGU9'@;
put 'TnAubWF4RGF0ZSx0aGlzLl9vLm1heFllYXI9TnAubWF4WWVhcix0aGlzLl9vLm1heE1vbnRoPU5wLm1heE1vbnRoLHRoaXMuX28uZW5kUmFuZ2U9TnAuZW5kUmFuZ2UpLHRoaXMuZHJhdygpfSxzZXRTdGFydFJhbmdlOmZ1bmN0aW9uKGMpe3RoaXMuX28uc3RhcnRSYW5nZT1jfSxzZXRFbmRS'@;
put 'YW5nZTpmdW5jdGlvbihjKXt0aGlzLl9vLmVuZFJhbmdlPWN9LGRyYXc6ZnVuY3Rpb24oYyl7aWYoIXRoaXMuX3YmJiFjKXJldHVybjtsZXQgTSxsPXRoaXMuX28sYT1sLm1pblllYXIsZD1sLm1heFllYXIsaD1sLm1pbk1vbnRoLGY9bC5tYXhNb250aCx2PSIiO3RoaXMuX3k8PWEmJih0aGlz'@;
put 'Ll95PWEsIWlzTmFOKGgpJiZ0aGlzLl9tPGgmJih0aGlzLl9tPWgpKSx0aGlzLl95Pj1kJiYodGhpcy5feT1kLCFpc05hTihmKSYmdGhpcy5fbT5mJiYodGhpcy5fbT1mKSk7Zm9yKGxldCBEPTA7RDxsLm51bWJlck9mTW9udGhzO0QrKylNPSJwaWthLXRpdGxlLSIrTWF0aC5yYW5kb20oKS50'@;
put 'b1N0cmluZygzNikucmVwbGFjZSgvW15hLXpdKy9nLCIiKS5zdWJzdHIoMCwyKSx2Kz0nPGRpdiBjbGFzcz0icGlrYS1sZW5kYXIiPicreWF0KHRoaXMsRCx0aGlzLmNhbGVuZGFyc1tEXS55ZWFyLHRoaXMuY2FsZW5kYXJzW0RdLm1vbnRoLHRoaXMuY2FsZW5kYXJzWzBdLnllYXIsTSkrdGhp'@;
put 'cy5yZW5kZXIodGhpcy5jYWxlbmRhcnNbRF0ueWVhcix0aGlzLmNhbGVuZGFyc1tEXS5tb250aCxNKSsiPC9kaXY+Ijt0aGlzLmVsLmlubmVySFRNTD12LGwuYm91bmQmJiJoaWRkZW4iIT09bC5maWVsZC50eXBlJiZOWChmdW5jdGlvbigpe2wudHJpZ2dlci5mb2N1cygpfSwxKSwiZnVuY3Rp'@;
put 'b24iPT10eXBlb2YgdGhpcy5fby5vbkRyYXcmJnRoaXMuX28ub25EcmF3KHRoaXMpLGwuYm91bmQmJmwuZmllbGQuc2V0QXR0cmlidXRlKCJhcmlhLWxhYmVsIixsLmFyaWFMYWJlbCl9LGFkanVzdFBvc2l0aW9uOmZ1bmN0aW9uKCl7bGV0IGMsbCxhLGQsaCxmLHYsTSxELFoscmU7dGhpcy5f'@;
put 'by5jb250YWluZXJ8fCh0aGlzLmVsLnN0eWxlLnBvc2l0aW9uPSJhYnNvbHV0ZSIsYz10aGlzLl9vLnRyaWdnZXIsbD10aGlzLmVsLm9mZnNldFdpZHRoLGE9dGhpcy5lbC5vZmZzZXRIZWlnaHQsZD1HbSgpLmlubmVyV2lkdGh8fCQyKCkuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoLGg9'@;
put 'R20oKS5pbm5lckhlaWdodHx8JDIoKS5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0LGY9JDIoKS5ib2R5LnNjcm9sbFRvcHx8JDIoKS5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wLFo9ITAscmU9ITAsRD1jLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHY9RC5sZWZ0K0dtKCkucGFnZVhP'@;
put 'ZmZzZXQsTT1ELmJvdHRvbStHbSgpLnBhZ2VZT2Zmc2V0LCh0aGlzLl9vLnJlcG9zaXRpb24mJnYrbD5kfHx0aGlzLl9vLnBvc2l0aW9uLmluZGV4T2YoInJpZ2h0Iik+LTEmJnYtbCtjLm9mZnNldFdpZHRoPjApJiYodj12LWwrYy5vZmZzZXRXaWR0aCxaPSExKSwodGhpcy5fby5yZXBvc2l0'@;
put 'aW9uJiZNK2E+aCtmfHx0aGlzLl9vLnBvc2l0aW9uLmluZGV4T2YoInRvcCIpPi0xJiZNLWEtYy5vZmZzZXRIZWlnaHQ+MCkmJihNPU0tYS1jLm9mZnNldEhlaWdodCxyZT0hMSksdjwwJiYodj0wKSxNPDAmJihNPTApLHRoaXMuZWwuc3R5bGUubGVmdD12KyJweCIsdGhpcy5lbC5zdHlsZS50'@;
put 'b3A9TSsicHgiLFZYKHRoaXMuZWwsWj8ibGVmdC1hbGlnbmVkIjoicmlnaHQtYWxpZ25lZCIpLFZYKHRoaXMuZWwscmU/ImJvdHRvbS1hbGlnbmVkIjoidG9wLWFsaWduZWQiKSxCWCh0aGlzLmVsLFo/InJpZ2h0LWFsaWduZWQiOiJsZWZ0LWFsaWduZWQiKSxCWCh0aGlzLmVsLHJlPyJ0b3At'@;
put 'YWxpZ25lZCI6ImJvdHRvbS1hbGlnbmVkIikpfSxyZW5kZXI6ZnVuY3Rpb24oYyxsLGEpe2xldCBkPXRoaXMuX28saD1uZXcgRGF0ZSxmPWpwZShjLGwpLHY9bmV3IERhdGUoYyxsLDEpLmdldERheSgpLE09W10sRD1bXTt6UChoKSxkLmZpcnN0RGF5PjAmJih2LT1kLmZpcnN0RGF5LHY8MCYm'@;
put 'KHYrPTcpKTtsZXQgWj0wPT09bD8xMTpsLTEscmU9MTE9PT1sPzA6bCsxLGNlPTA9PT1sP2MtMTpjLGJlPTExPT09bD9jKzE6YyxFZT1qcGUoY2UsWiksQmU9Zit2LHFlPUJlO2Zvcig7cWU+NzspcWUtPTc7QmUrPTctcWU7bGV0IHJ0PSExO2ZvcihsZXQgcHQ9MCxkdD0wO3B0PEJlO3B0Kysp'@;
put 'e2xldCBKdD1uZXcgRGF0ZShjLGwscHQtdisxKSx2bj0hIUxoKHRoaXMuX2QpJiZVUChKdCx0aGlzLl9kKSxDbj1VUChKdCxoKSx0bj0tMSE9PWQuZXZlbnRzLmluZGV4T2YoSnQudG9EYXRlU3RyaW5nKCkpLE1uPXB0PHZ8fHB0Pj1mK3YsQ3I9cHQtdisxLEdyPWwsbXI9YyxHbj1kLnN0YXJ0'@;
put 'UmFuZ2UmJlVQKGQuc3RhcnRSYW5nZSxKdCksYWk9ZC5lbmRSYW5nZSYmVVAoZC5lbmRSYW5nZSxKdCksX2k9ZC5zdGFydFJhbmdlJiZkLmVuZFJhbmdlJiZkLnN0YXJ0UmFuZ2U8SnQmJkp0PGQuZW5kUmFuZ2UsT249ZC5taW5EYXRlJiZKdDxkLm1pbkRhdGV8fGQubWF4RGF0ZSYmSnQ+ZC5t'@;
put 'YXhEYXRlfHxkLmRpc2FibGVXZWVrZW5kcyYmZGF0KEp0KXx8ZC5kaXNhYmxlRGF5Rm4mJmQuZGlzYWJsZURheUZuKEp0KTtNbiYmKHB0PHY/KENyPUVlK0NyLEdyPVosbXI9Y2UpOihDci09ZixHcj1yZSxtcj1iZSkpLGQucGlja1dob2xlV2VlayYmdm4mJihydD0hMCksRC5wdXNoKGZhdCh7'@;
put 'ZGF5OkNyLG1vbnRoOkdyLHllYXI6bXIsaGFzRXZlbnQ6dG4saXNTZWxlY3RlZDp2bixpc1RvZGF5OkNuLGlzRGlzYWJsZWQ6T24saXNFbXB0eTpNbixpc1N0YXJ0UmFuZ2U6R24saXNFbmRSYW5nZTphaSxpc0luUmFuZ2U6X2ksc2hvd0RheXNJbk5leHRBbmRQcmV2aW91c01vbnRoczpkLnNo'@;
put 'b3dEYXlzSW5OZXh0QW5kUHJldmlvdXNNb250aHMsZW5hYmxlU2VsZWN0aW9uRGF5c0luTmV4dEFuZFByZXZpb3VzTW9udGhzOmQuZW5hYmxlU2VsZWN0aW9uRGF5c0luTmV4dEFuZFByZXZpb3VzTW9udGhzfSkpLDc9PSsrZHQmJihkLnNob3dXZWVrTnVtYmVyJiZELnVuc2hpZnQoZ2F0KHRo'@;
put 'aXMscHQtdixsLGMsZC5maXJzdFdlZWtPZlllYXJNaW5EYXlzKSksTS5wdXNoKG1hdChELGQuaXNSVEwsZC5waWNrV2hvbGVXZWVrLHJ0KSksRD1bXSxkdD0wLHJ0PSExKX1yZXR1cm4gZnVuY3Rpb24oYyxsLGEpe3JldHVybic8dGFibGUgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIw'@;
put 'IiBjbGFzcz0icGlrYS10YWJsZSIgcm9sZT0iZ3JpZCIgYXJpYS1sYWJlbGxlZGJ5PSInK2ErJyI+JytmdW5jdGlvbihjKXtsZXQgbCxhPVtdO2ZvcihjLnNob3dXZWVrTnVtYmVyJiZhLnB1c2goIjx0aD48L3RoPiIpLGw9MDtsPDc7bCsrKWEucHVzaCgnPHRoIHNjb3BlPSJjb2wiPjxhYmJy'@;
put 'IHRpdGxlPSInK1pwZShjLGwpKyciPicrWnBlKGMsbCwhMCkrIjwvYWJicj48L3RoPiIpO3JldHVybiI8dGhlYWQ+PHRyPiIrKGMuaXNSVEw/YS5yZXZlcnNlKCk6YSkuam9pbigiIikrIjwvdHI+PC90aGVhZD4ifShjKStmdW5jdGlvbihjKXtyZXR1cm4iPHRib2R5PiIrYy5qb2luKCIiKSsi'@;
put 'PC90Ym9keT4ifShsKSsiPC90YWJsZT4ifShkLE0sYSl9LGlzVmlzaWJsZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl92fSxzaG93OmZ1bmN0aW9uKCl7dGhpcy5pc1Zpc2libGUoKXx8KHRoaXMuX3Y9ITAsdGhpcy5kcmF3KCksQlgodGhpcy5lbCwiaXMtaGlkZGVuIiksdGhpcy5fby5ib3Vu'@;
put 'ZCYmKEhwKCQyKCksImNsaWNrIix0aGlzLl9vbkNsaWNrKSx0aGlzLmFkanVzdFBvc2l0aW9uKCkpLCJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzLl9vLm9uT3BlbiYmdGhpcy5fby5vbk9wZW4uY2FsbCh0aGlzKSl9LGhpZGU6ZnVuY3Rpb24oKXtsZXQgYz10aGlzLl92OyExIT09YyYmKHRoaXMu'@;
put 'X28uYm91bmQmJmtnKCQyKCksImNsaWNrIix0aGlzLl9vbkNsaWNrKSx0aGlzLl9vLmNvbnRhaW5lcnx8KHRoaXMuZWwuc3R5bGUucG9zaXRpb249InN0YXRpYyIsdGhpcy5lbC5zdHlsZS5sZWZ0PSJhdXRvIix0aGlzLmVsLnN0eWxlLnRvcD0iYXV0byIpLFZYKHRoaXMuZWwsImlzLWhpZGRl'@;
put 'biIpLHRoaXMuX3Y9ITEsdm9pZCAwIT09YyYmImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMuX28ub25DbG9zZSYmdGhpcy5fby5vbkNsb3NlLmNhbGwodGhpcykpfSxkZXN0cm95OmZ1bmN0aW9uKCl7bGV0IGM9dGhpcy5fbzt0aGlzLmhpZGUoKSxrZyh0aGlzLmVsLCJtb3VzZWRvd24iLHRoaXMu'@;
put 'X29uTW91c2VEb3duLCEwKSxrZyh0aGlzLmVsLCJ0b3VjaGVuZCIsdGhpcy5fb25Nb3VzZURvd24sITApLGtnKHRoaXMuZWwsImNoYW5nZSIsdGhpcy5fb25DaGFuZ2UpLGMua2V5Ym9hcmRJbnB1dCYma2coJDIoKSwia2V5ZG93biIsdGhpcy5fb25LZXlDaGFuZ2UpLGMuZmllbGQmJihrZyhj'@;
put 'LmZpZWxkLCJjaGFuZ2UiLHRoaXMuX29uSW5wdXRDaGFuZ2UpLGMuYm91bmQmJihrZyhjLnRyaWdnZXIsImNsaWNrIix0aGlzLl9vbklucHV0Q2xpY2spLGtnKGMudHJpZ2dlciwiZm9jdXMiLHRoaXMuX29uSW5wdXRGb2N1cyksa2coYy50cmlnZ2VyLCJibHVyIix0aGlzLl9vbklucHV0Qmx1'@;
put 'cikpKSx0aGlzLmVsLnBhcmVudE5vZGUmJnRoaXMuZWwucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzLmVsKX19O2NvbnN0IFlwZT0iZGF0ZSIsR3BlPSJkYXRlRWRpdG9yIjt2YXIgV1A9bmV3IFdlYWtTZXQ7Y2xhc3MgJHBlIGV4dGVuZHMgYTl7Y29uc3RydWN0b3IoKXtzdXBlciguLi5h'@;
put 'cmd1bWVudHMpLGZ1bmN0aW9uIHdhdChjLGwpeyhmdW5jdGlvbiBDYXQoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfSkoYyxsKSxsLmFkZChjKX0odGhp'@;
put 'cyxXUCksV3BlKHRoaXMsInBhcmVudERlc3Ryb3llZCIsITEpLFdwZSh0aGlzLCIkZGF0ZVBpY2tlciIsbnVsbCl9c3RhdGljIGdldCBFRElUT1JfVFlQRSgpe3JldHVybiBZcGV9aW5pdCgpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBPbyl0aHJvdyBuZXcgRXJyb3IoIllvdSBuZWVkIHRvIGlu'@;
put 'Y2x1ZGUgbW9tZW50LmpzIHRvIHlvdXIgcHJvamVjdC4iKTtzdXBlci5pbml0KCksdGhpcy5ob3QuYWRkSG9vaygiYWZ0ZXJEZXN0cm95IiwoKT0+e3RoaXMucGFyZW50RGVzdHJveWVkPSEwLHRoaXMuZGVzdHJveUVsZW1lbnRzKCl9KSx0aGlzLmhvdC5hZGRIb29rKCJhZnRlclNldFRoZW1l'@;
put 'IiwobCxhKT0+e2F8fChsbyh0aGlzLmRhdGVQaWNrZXIsL2h0LXRoZW1lLS4qL2cpLFRpKHRoaXMuZGF0ZVBpY2tlcixsKSl9KX1jcmVhdGVFbGVtZW50cygpe3N1cGVyLmNyZWF0ZUVsZW1lbnRzKCksdGhpcy5kYXRlUGlja2VyPXRoaXMuaG90LnJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50'@;
put 'KCJESVYiKSx0aGlzLmRhdGVQaWNrZXJTdHlsZT10aGlzLmRhdGVQaWNrZXIuc3R5bGUsdGhpcy5kYXRlUGlja2VyU3R5bGUucG9zaXRpb249ImFic29sdXRlIix0aGlzLmRhdGVQaWNrZXJTdHlsZS50b3A9MCx0aGlzLmRhdGVQaWNrZXJTdHlsZS5sZWZ0PTAsdGhpcy5kYXRlUGlja2VyU3R5'@;
put 'bGUuekluZGV4PTk5OTksdGhpcy5kYXRlUGlja2VyLnNldEF0dHJpYnV0ZSgiZGlyIix0aGlzLmhvdC5pc1J0bCgpPyJydGwiOiJsdHIiKSxUaSh0aGlzLmRhdGVQaWNrZXIsImh0RGF0ZXBpY2tlckhvbGRlciIpO2NvbnN0IGw9dGhpcy5ob3QuZ2V0Q3VycmVudFRoZW1lTmFtZSgpO2xvKHRo'@;
put 'aXMuZGF0ZVBpY2tlciwvaHQtdGhlbWUtLiovZyksVGkodGhpcy5kYXRlUGlja2VyLGwpLHRoaXMuaG90LnJvb3REb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHRoaXMuZGF0ZVBpY2tlciksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcih0aGlzLmRhdGVQaWNrZXIsIm1vdXNl'@;
put 'ZG93biIsYT0+e3BvKGEudGFyZ2V0LCJwaWthLWRheSIpJiZ0aGlzLmhpZGVEYXRlcGlja2VyKCksYS5zdG9wUHJvcGFnYXRpb24oKX0pfWRlc3Ryb3lFbGVtZW50cygpe2NvbnN0IGw9dGhpcy5kYXRlUGlja2VyLnBhcmVudE5vZGU7dGhpcy4kZGF0ZVBpY2tlciYmdGhpcy4kZGF0ZVBpY2tl'@;
put 'ci5kZXN0cm95KCksbCYmbC5yZW1vdmVDaGlsZCh0aGlzLmRhdGVQaWNrZXIpfXByZXBhcmUobCxhLGQsaCxmLHYpe3N1cGVyLnByZXBhcmUobCxhLGQsaCxmLHYpfW9wZW4oKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06bnVs'@;
put 'bDtjb25zdCBkPXRoaXMuaG90LmdldFNob3J0Y3V0TWFuYWdlcigpLmdldENvbnRleHQoImVkaXRvciIpO3RoaXMuc2hvd0RhdGVwaWNrZXIobCksc3VwZXIub3BlbigpLGQuYWRkU2hvcnRjdXRzKFt7a2V5czpbWyJBcnJvd0xlZnQiXV0sY2FsbGJhY2s6KCk9Pnt0aGlzLiRkYXRlUGlja2Vy'@;
put 'LmFkanVzdERhdGUoInN1YnRyYWN0IiwxKX19LHtrZXlzOltbIkFycm93UmlnaHQiXV0sY2FsbGJhY2s6KCk9Pnt0aGlzLiRkYXRlUGlja2VyLmFkanVzdERhdGUoImFkZCIsMSl9fSx7a2V5czpbWyJBcnJvd1VwIl1dLGNhbGxiYWNrOigpPT57dGhpcy4kZGF0ZVBpY2tlci5hZGp1c3REYXRl'@;
put 'KCJzdWJ0cmFjdCIsNyl9fSx7a2V5czpbWyJBcnJvd0Rvd24iXV0sY2FsbGJhY2s6KCk9Pnt0aGlzLiRkYXRlUGlja2VyLmFkanVzdERhdGUoImFkZCIsNyl9fV0se2dyb3VwOkdwZX0pfWNsb3NlKCl7dmFyIGw7dGhpcy5fb3BlbmVkPSExLG51bGwhPT0obD10aGlzLiRkYXRlUGlja2VyKSYm'@;
put 'dm9pZCAwIT09bCYmbC5kZXN0cm95JiZ0aGlzLiRkYXRlUGlja2VyLmRlc3Ryb3koKSx0aGlzLmhvdC5fcmVnaXN0ZXJUaW1lb3V0KCgpPT57Y29uc3QgaD10aGlzLmhvdC5fZ2V0RWRpdG9yTWFuYWdlcigpO2guY2xvc2VFZGl0b3IoKSx0aGlzLmhvdC52aWV3LnJlbmRlcigpLGgucHJlcGFy'@;
put 'ZUVkaXRvcigpfSksdGhpcy5ob3QuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuZ2V0Q29udGV4dCgiZWRpdG9yIikucmVtb3ZlU2hvcnRjdXRzQnlHcm91cChHcGUpLHN1cGVyLmNsb3NlKCl9ZmluaXNoRWRpdGluZygpe3N1cGVyLmZpbmlzaEVkaXRpbmcoYXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lk'@;
put 'IDAhPT1hcmd1bWVudHNbMF0mJmFyZ3VtZW50c1swXSxhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSYmYXJndW1lbnRzWzFdKX1zaG93RGF0ZXBpY2tlcihsKXtjb25zdCBhPVVYKFdQLHRoaXMsWlgpLmNhbGwodGhpcyksZD10aGlzLmhvdC52aWV3LmlzTW91c2VE'@;
put 'b3duKCksaD0hIWwmJkgkKGwua2V5Q29kZSk7bGV0IGY7dGhpcy5kYXRlUGlja2VyLnN0eWxlLmRpc3BsYXk9ImJsb2NrIix0aGlzLiRkYXRlUGlja2VyPW5ldyB6WCh0aGlzLmdldERhdGVQaWNrZXJDb25maWcoKSksImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMuJGRhdGVQaWNrZXIudXNlTW9t'@;
put 'ZW50JiZ0aGlzLiRkYXRlUGlja2VyLnVzZU1vbWVudChPbyksdGhpcy4kZGF0ZVBpY2tlci5fb25JbnB1dEZvY3VzPWZ1bmN0aW9uKCl7fSx0aGlzLm9yaWdpbmFsVmFsdWU/KGY9dGhpcy5vcmlnaW5hbFZhbHVlLE9vKGYsYSwhMCkuaXNWYWxpZCgpJiZ0aGlzLiRkYXRlUGlja2VyLnNldE1v'@;
put 'bWVudChPbyhmLGEpLCEwKSx0aGlzLmdldFZhbHVlKCkhPT10aGlzLm9yaWdpbmFsVmFsdWUmJnRoaXMuc2V0VmFsdWUodGhpcy5vcmlnaW5hbFZhbHVlKSwhaCYmIWQmJnRoaXMuc2V0VmFsdWUoIiIpKTp0aGlzLmNlbGxQcm9wZXJ0aWVzLmRlZmF1bHREYXRlPyhmPXRoaXMuY2VsbFByb3Bl'@;
put 'cnRpZXMuZGVmYXVsdERhdGUsT28oZixhLCEwKS5pc1ZhbGlkKCkmJnRoaXMuJGRhdGVQaWNrZXIuc2V0TW9tZW50KE9vKGYsYSksITApLCFoJiYhZCYmdGhpcy5zZXRWYWx1ZSgiIikpOnRoaXMuJGRhdGVQaWNrZXIuZ290b1RvZGF5KCl9aGlkZURhdGVwaWNrZXIoKXt0aGlzLmRhdGVQaWNr'@;
put 'ZXJTdHlsZS5kaXNwbGF5PSJub25lIix0aGlzLiRkYXRlUGlja2VyLmhpZGUoKX1nZXREYXRlUGlja2VyQ29uZmlnKCl7dmFyIGw7Y29uc3QgYT10aGlzLlRFWFRBUkVBLGQ9e307dGhpcy5jZWxsUHJvcGVydGllcyYmdGhpcy5jZWxsUHJvcGVydGllcy5kYXRlUGlja2VyQ29uZmlnJiZ4RShk'@;
put 'LHRoaXMuY2VsbFByb3BlcnRpZXMuZGF0ZVBpY2tlckNvbmZpZyk7Y29uc3QgaD1kLm9uU2VsZWN0LGY9ZC5vbkNsb3NlO3JldHVybiBkLmZpZWxkPWEsZC50cmlnZ2VyPWEsZC5jb250YWluZXI9dGhpcy5kYXRlUGlja2VyLGQuYm91bmQ9ITEsZC5rZXlib2FyZElucHV0PSExLGQuZm9ybWF0'@;
put 'PW51bGwhPT0obD1kLmZvcm1hdCkmJnZvaWQgMCE9PWw/bDpVWChXUCx0aGlzLFpYKS5jYWxsKHRoaXMpLGQucmVwb3NpdGlvbj1kLnJlcG9zaXRpb258fCExLGQuaXNSVEw9ITEsZC5vblNlbGVjdD12PT57bGV0IE09djtpc05hTihNLmdldFRpbWUoKSl8fChNPU9vKE0pLmZvcm1hdChVWChX'@;
put 'UCx0aGlzLFpYKS5jYWxsKHRoaXMpKSksdGhpcy5zZXRWYWx1ZShNKSxoJiZoKCksQXAoKSYmdGhpcy5oaWRlRGF0ZXBpY2tlcigpfSxkLm9uQ2xvc2U9KCk9Pnt0aGlzLnBhcmVudERlc3Ryb3llZHx8dGhpcy5maW5pc2hFZGl0aW5nKCExKSxmJiZmKCl9LGR9cmVmcmVzaERpbWVuc2lvbnMo'@;
put 'bCl7dmFyIGE7aWYoc3VwZXIucmVmcmVzaERpbWVuc2lvbnMobCksdGhpcy5zdGF0ZSE9PWx1LkVESVRJTkcpcmV0dXJuO2lmKHRoaXMuVEQ9dGhpcy5nZXRFZGl0ZWRDZWxsKCksIXRoaXMuVEQpcmV0dXJuIHZvaWQgdGhpcy5oaWRlRGF0ZXBpY2tlcigpO2NvbnN0e3Jvd0luZGV4TWFwcGVy'@;
put 'OmQsY29sdW1uSW5kZXhNYXBwZXI6aH09dGhpcy5ob3Qse3d0T3ZlcmxheXM6Zn09dGhpcy5ob3Qudmlldy5fd3Qse3d0VGFibGU6dn09bnVsbCE9PShhPWYuZ2V0UGFyZW50T3ZlcmxheSh0aGlzLlREKSkmJnZvaWQgMCE9PWE/YTp0aGlzLmhvdC52aWV3Ll93dCxNPWQuZ2V0VmlzdWFsRnJv'@;
put 'bVJlbmRlcmFibGVJbmRleCh2LmdldEZpcnN0UGFydGlhbGx5VmlzaWJsZVJvdygpKSxEPWQuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleCh2LmdldExhc3RQYXJ0aWFsbHlWaXNpYmxlUm93KCkpLFo9aC5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KHYuZ2V0Rmlyc3RQYXJ0aWFs'@;
put 'bHlWaXNpYmxlQ29sdW1uKCkpLHJlPWguZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleCh2LmdldExhc3RQYXJ0aWFsbHlWaXNpYmxlQ29sdW1uKCkpO2lmKHRoaXMucm93Pj1NJiZ0aGlzLnJvdzw9RCYmdGhpcy5jb2w+PVomJnRoaXMuY29sPD1yZSl7Y29uc3QgY2U9dGhpcy5URC5nZXRC'@;
put 'b3VuZGluZ0NsaWVudFJlY3QoKTt0aGlzLmRhdGVQaWNrZXJTdHlsZS50b3A9YCR7dGhpcy5ob3Qucm9vdFdpbmRvdy5wYWdlWU9mZnNldCtjZS50b3AreHUodGhpcy5URCl9cHhgO2xldCBiZT10aGlzLmhvdC5yb290V2luZG93LnBhZ2VYT2Zmc2V0O3RoaXMuaG90LmlzUnRsKCk/YmUrPWNl'@;
put 'LnJpZ2h0LXN1KHRoaXMuZGF0ZVBpY2tlcik6YmUrPWNlLmxlZnQsdGhpcy5kYXRlUGlja2VyU3R5bGUubGVmdD1gJHtiZX1weGB9ZWxzZSB0aGlzLmhpZGVEYXRlcGlja2VyKCl9fWZ1bmN0aW9uIFpYKCl7dmFyIGM7cmV0dXJuIG51bGwhPT0oYz10aGlzLmNlbGxQcm9wZXJ0aWVzLmRhdGVG'@;
put 'b3JtYXQpJiZ2b2lkIDAhPT1jP2M6IkREL01NL1lZWVkifWNsYXNzIEtwZSBleHRlbmRzIEhYe3N0YXRpYyBnZXQgRURJVE9SX1RZUEUoKXtyZXR1cm4iZHJvcGRvd24ifXByZXBhcmUobCxhLGQsaCxmLHYpe3YuZmlsdGVyPSExLHYuc3RyaWN0PSEwLHN1cGVyLnByZXBhcmUobCxhLGQsaCxm'@;
put 'LHYpfX1jbGFzcyBxcGUgZXh0ZW5kcyBhOXtzdGF0aWMgZ2V0IEVESVRPUl9UWVBFKCl7cmV0dXJuIm51bWVyaWMifX1jbGFzcyBYcGUgZXh0ZW5kcyBhOXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksZnVuY3Rpb24gQWF0KGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBrYXQo'@;
put 'Yyl7dmFyIGw9ZnVuY3Rpb24gRGF0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7'@;
put 'dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVj'@;
put 'dC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY30odGhpcywiYXV0b1Jlc2l6ZSIsQXBlKHRoaXMuaG90LnJvb3REb2N1bWVudCx7dGV4dENvbnRlbnQ6bD0+Ilx1MjAyMiIucmVwZWF0KGwudmFs'@;
put 'dWUubGVuZ3RoKX0pKX1zdGF0aWMgZ2V0IEVESVRPUl9UWVBFKCl7cmV0dXJuInBhc3N3b3JkIn1jcmVhdGVFbGVtZW50cygpe3N1cGVyLmNyZWF0ZUVsZW1lbnRzKCksdGhpcy5URVhUQVJFQT10aGlzLmhvdC5yb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaW5wdXQiKSx0aGlzLlRFWFRB'@;
put 'UkVBLnNldEF0dHJpYnV0ZSgidHlwZSIsInBhc3N3b3JkIiksdGhpcy5URVhUQVJFQS5zZXRBdHRyaWJ1dGUoImRhdGEtaG90LWlucHV0IiwiIiksdGhpcy5URVhUQVJFQS5jbGFzc05hbWU9ImhhbmRzb250YWJsZUlucHV0Iix0aGlzLnRleHRhcmVhU3R5bGU9dGhpcy5URVhUQVJFQS5zdHls'@;
put 'ZSx0aGlzLnRleHRhcmVhU3R5bGUud2lkdGg9MCx0aGlzLnRleHRhcmVhU3R5bGUuaGVpZ2h0PTAseHAodGhpcy5URVhUQVJFQV9QQVJFTlQpLHRoaXMuVEVYVEFSRUFfUEFSRU5ULmFwcGVuZENoaWxkKHRoaXMuVEVYVEFSRUEpfX1jb25zdCBXWD0iaHRfZWRpdG9yX3Zpc2libGUiLEpwZT0i'@;
put 'c2VsZWN0RWRpdG9yIjtjbGFzcyBRcGUgZXh0ZW5kcyBrX3tzdGF0aWMgZ2V0IEVESVRPUl9UWVBFKCl7cmV0dXJuInNlbGVjdCJ9aW5pdCgpe3RoaXMuc2VsZWN0V3JhcHBlcj10aGlzLmhvdC5yb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksdGhpcy5zZWxlY3Q9dGhpcy5ob3Qu'@;
put 'cm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNlbGVjdCIpLHRoaXMuc2VsZWN0LnNldEF0dHJpYnV0ZSgiZGF0YS1ob3QtaW5wdXQiLCJ0cnVlIiksdGhpcy5zZWxlY3RXcmFwcGVyLnN0eWxlLmRpc3BsYXk9Im5vbmUiO2NvbnN0IGw9dGhpcy5ob3Qucm9vdERvY3VtZW50LmNyZWF0ZUVs'@;
put 'ZW1lbnQoIkRJViIpLGE9dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5hcmlhVGFncztsLmNsYXNzTmFtZT0iaHRBdXRvY29tcGxldGVBcnJvdyIsYSYmbC5zZXRBdHRyaWJ1dGUoLi4uVjcoKSksbC5hcHBlbmRDaGlsZCh0aGlzLmhvdC5yb290RG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIlx1MjVi'@;
put 'YyIpKSxUaSh0aGlzLnNlbGVjdFdyYXBwZXIsImh0U2VsZWN0RWRpdG9yIiksdGhpcy5zZWxlY3RXcmFwcGVyLmFwcGVuZENoaWxkKHRoaXMuc2VsZWN0KSx0aGlzLnNlbGVjdFdyYXBwZXIuaW5zZXJ0QmVmb3JlKGwsdGhpcy5zZWxlY3RXcmFwcGVyLmZpcnN0Q2hpbGQpLHRoaXMuaG90LnJv'@;
put 'b3RFbGVtZW50LmFwcGVuZENoaWxkKHRoaXMuc2VsZWN0V3JhcHBlciksdGhpcy5yZWdpc3Rlckhvb2tzKCl9Z2V0VmFsdWUoKXtyZXR1cm4gdGhpcy5zZWxlY3QudmFsdWV9c2V0VmFsdWUobCl7dGhpcy5zZWxlY3QudmFsdWU9bH1vcGVuKCl7dGhpcy5fb3BlbmVkPSEwLHRoaXMucmVmcmVz'@;
put 'aERpbWVuc2lvbnMoKSx0aGlzLnNlbGVjdFdyYXBwZXIuc3R5bGUuZGlzcGxheT0iIix0aGlzLmhvdC5nZXRTaG9ydGN1dE1hbmFnZXIoKS5zZXRBY3RpdmVDb250ZXh0TmFtZSgiZWRpdG9yIiksdGhpcy5yZWdpc3RlclNob3J0Y3V0cygpfWNsb3NlKCl7dGhpcy5fb3BlbmVkPSExLHRoaXMu'@;
put 'c2VsZWN0V3JhcHBlci5zdHlsZS5kaXNwbGF5PSJub25lIixwbyh0aGlzLnNlbGVjdFdyYXBwZXIsV1gpJiZsbyh0aGlzLnNlbGVjdFdyYXBwZXIsV1gpLHRoaXMudW5yZWdpc3RlclNob3J0Y3V0cygpLHRoaXMuY2xlYXJIb29rcygpfWZvY3VzKCl7dGhpcy5zZWxlY3QuZm9jdXMoKX1yZWdp'@;
put 'c3Rlckhvb2tzKCl7dGhpcy5hZGRIb29rKCJhZnRlclNjcm9sbEhvcml6b250YWxseSIsKCk9PnRoaXMucmVmcmVzaERpbWVuc2lvbnMoKSksdGhpcy5hZGRIb29rKCJhZnRlclNjcm9sbFZlcnRpY2FsbHkiLCgpPT50aGlzLnJlZnJlc2hEaW1lbnNpb25zKCkpLHRoaXMuYWRkSG9vaygiYWZ0'@;
put 'ZXJDb2x1bW5SZXNpemUiLCgpPT50aGlzLnJlZnJlc2hEaW1lbnNpb25zKCkpLHRoaXMuYWRkSG9vaygiYWZ0ZXJSb3dSZXNpemUiLCgpPT50aGlzLnJlZnJlc2hEaW1lbnNpb25zKCkpfXByZXBhcmUobCxhLGQsaCxmLHYpe3N1cGVyLnByZXBhcmUobCxhLGQsaCxmLHYpO2NvbnN0IE09dGhp'@;
put 'cy5jZWxsUHJvcGVydGllcy5zZWxlY3RPcHRpb25zO2xldCBEO0Q9dGhpcy5wcmVwYXJlT3B0aW9ucygiZnVuY3Rpb24iPT10eXBlb2YgTT9NKHRoaXMucm93LHRoaXMuY29sLHRoaXMucHJvcCk6TSkseHAodGhpcy5zZWxlY3QpLFhvKEQsKFoscmUpPT57Y29uc3QgY2U9dGhpcy5ob3Qucm9v'@;
put 'dERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIk9QVElPTiIpO2NlLnZhbHVlPXJlLHo3KGNlLFopLHRoaXMuc2VsZWN0LmFwcGVuZENoaWxkKGNlKX0pfXByZXBhcmVPcHRpb25zKGwpe2xldCBhPXt9O2lmKEFycmF5LmlzQXJyYXkobCkpZm9yKGxldCBkPTAsaD1sLmxlbmd0aDtkPGg7ZCsrKWFb'@;
put 'bFtkXV09bFtkXTtlbHNlIm9iamVjdCI9PXR5cGVvZiBsJiYoYT1sKTtyZXR1cm4gYX1yZWZyZXNoVmFsdWUoKXtjb25zdCBsPXRoaXMuaG90LmdldFNvdXJjZURhdGFBdENlbGwodGhpcy5yb3csdGhpcy5wcm9wKTt0aGlzLm9yaWdpbmFsVmFsdWU9bCx0aGlzLnNldFZhbHVlKGwpLHRoaXMu'@;
put 'cmVmcmVzaERpbWVuc2lvbnMoKX1yZWZyZXNoRGltZW5zaW9ucygpe2lmKHRoaXMuc3RhdGUhPT1sdS5FRElUSU5HKXJldHVybjtpZih0aGlzLlREPXRoaXMuZ2V0RWRpdGVkQ2VsbCgpLCF0aGlzLlREKXJldHVybiB2b2lkIHRoaXMuY2xvc2UoKTtjb25zdHt0b3A6bCxzdGFydDphLHdpZHRo'@;
put 'OmQsaGVpZ2h0Omh9PXRoaXMuZ2V0RWRpdGVkQ2VsbFJlY3QoKSxmPXRoaXMuc2VsZWN0V3JhcHBlci5zdHlsZTtmLmhlaWdodD1gJHtofXB4YCxmLndpZHRoPWAke2R9cHhgLGYudG9wPWAke2x9cHhgLGZbdGhpcy5ob3QuaXNSdGwoKT8icmlnaHQiOiJsZWZ0Il09YCR7YX1weGAsZi5tYXJn'@;
put 'aW49IjBweCIsVGkodGhpcy5zZWxlY3RXcmFwcGVyLFdYKX1yZWdpc3RlclNob3J0Y3V0cygpe2NvbnN0IGE9dGhpcy5ob3QuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuZ2V0Q29udGV4dCgiZWRpdG9yIiksZD17Z3JvdXA6SnBlfTt0aGlzLmlzSW5GdWxsRWRpdE1vZGUoKSYmYS5hZGRTaG9ydGN1'@;
put 'dHMoW3trZXlzOltbIkFycm93VXAiXV0sY2FsbGJhY2s6KCk9Pntjb25zdCBoPXRoaXMuc2VsZWN0LnNlbGVjdGVkSW5kZXgtMTtoPj0wJiYodGhpcy5zZWxlY3RbaF0uc2VsZWN0ZWQ9ITApfX0se2tleXM6W1siQXJyb3dEb3duIl1dLGNhbGxiYWNrOigpPT57Y29uc3QgaD10aGlzLnNlbGVj'@;
put 'dC5zZWxlY3RlZEluZGV4KzE7aDw9dGhpcy5zZWxlY3QubGVuZ3RoLTEmJih0aGlzLnNlbGVjdFtoXS5zZWxlY3RlZD0hMCl9fV0sZCl9dW5yZWdpc3RlclNob3J0Y3V0cygpe3RoaXMuaG90LmdldFNob3J0Y3V0TWFuYWdlcigpLmdldENvbnRleHQoImVkaXRvciIpLnJlbW92ZVNob3J0Y3V0'@;
put 'c0J5R3JvdXAoSnBlKX19Y2xhc3MgZTRlIGV4dGVuZHMgYTl7c3RhdGljIGdldCBFRElUT1JfVFlQRSgpe3JldHVybiJ0aW1lIn1wcmVwYXJlKGwsYSxkLGgsZix2KXtzdXBlci5wcmVwYXJlKGwsYSxkLGgsZix2KSx0aGlzLlRFWFRBUkVBLmRpcj0ibHRyIn19ZnVuY3Rpb24gWVgoYyxsLGEs'@;
put 'ZCxoLGYsdil7b1QuYXBwbHkodGhpcyxbYyxsLGEsZCxoLGYsdl0pLHo3KGwsZj8/IiIsITEpfWZ1bmN0aW9uIElfKGMsbCxhLGQsaCxmLHYpe2NvbnN0e3Jvb3REb2N1bWVudDpNfT1jLEQ9di5hbGxvd0h0bWw/WVg6QWcsWj1NLmNyZWF0ZUVsZW1lbnQoIkRJViIpLHJlPWMuZ2V0U2V0dGlu'@;
put 'Z3MoKS5hcmlhVGFncztpZihaLmNsYXNzTmFtZT0iaHRBdXRvY29tcGxldGVBcnJvdyIscmUmJlouc2V0QXR0cmlidXRlKC4uLlY3KCkpLFouYXBwZW5kQ2hpbGQoTS5jcmVhdGVUZXh0Tm9kZSgiXHUyNWJjIikpLEQuYXBwbHkodGhpcyxbYyxsLGEsZCxoLGYsdl0pLGwuZmlyc3RDaGlsZHx8'@;
put 'bC5hcHBlbmRDaGlsZChNLmNyZWF0ZVRleHROb2RlKCJceGEwIikpLGwuaW5zZXJ0QmVmb3JlKFosbC5maXJzdENoaWxkKSxUaShsLCJodEF1dG9jb21wbGV0ZSIpLCFjLmFjQXJyb3dMaXN0ZW5lcil7Y29uc3QgY2U9bmV3IGoyKGMpO2MuYWNBcnJvd0xpc3RlbmVyPWZ1bmN0aW9uKGJlKXtw'@;
put 'byhiZS50YXJnZXQsImh0QXV0b2NvbXBsZXRlQXJyb3ciKSYmYy52aWV3Ll93dC5nZXRTZXR0aW5nKCJvbkNlbGxEYmxDbGljayIsbnVsbCxjLl9jcmVhdGVDZWxsQ29vcmRzKGEsZCksbCl9LGNlLmFkZEV2ZW50TGlzdGVuZXIoYy5yb290RWxlbWVudCwibW91c2Vkb3duIixjLmFjQXJyb3dM'@;
put 'aXN0ZW5lciksYy5hZGRIb29rT25jZSgiYWZ0ZXJEZXN0cm95IiwoKT0+e2NlLmRlc3Ryb3koKX0pfX1mdW5jdGlvbiBHWChjLGwsYSxkLGgsZix2KXtJXy5hcHBseSh0aGlzLFtjLGwsYSxkLGgsZix2XSl9WVguUkVOREVSRVJfVFlQRT0iaHRtbCIsSV8uUkVOREVSRVJfVFlQRT0iYXV0b2Nv'@;
put 'bXBsZXRlIixHWC5SRU5ERVJFUl9UWVBFPSJkcm9wZG93biI7Y29uc3QgdDRlPW5ldyBXZWFrTWFwLG40ZT1uZXcgV2Vha01hcCxOYXQ9Imh0QmFkVmFsdWUiLFJfPSJkYXRhLXJvdyIsTF89ImRhdGEtY29sIixWYXQ9ImNoZWNrYm94UmVuZGVyZXIiO2Z1bmN0aW9uICRYKGMsbCxhLGQsaCxm'@;
put 'LHYpe2NvbnN0e3Jvb3REb2N1bWVudDpNfT1jLEQ9Yy5nZXRTZXR0aW5ncygpLmFyaWFUYWdzO29ULmFwcGx5KHRoaXMsW2MsbCxhLGQsaCxmLHZdKSxmdW5jdGlvbiBCYXQoYyl7bGV0IGw9bjRlLmdldChjKTtpZighbCl7Y29uc3R7cm9vdEVsZW1lbnQ6YX09YztsPW5ldyBqMihjKSxsLmFk'@;
put 'ZEV2ZW50TGlzdGVuZXIoYSwiY2xpY2siLGQ9PmZ1bmN0aW9uIFphdChjLGwpe2NvbnN0e3RhcmdldDphfT1jO2lmKCFLWChhKXx8IWEuaGFzQXR0cmlidXRlKFJfKXx8IWEuaGFzQXR0cmlidXRlKExfKSlyZXR1cm47Y29uc3QgZD1wYXJzZUludChhLmdldEF0dHJpYnV0ZShSXyksMTApLGg9'@;
put 'cGFyc2VJbnQoYS5nZXRBdHRyaWJ1dGUoTF8pLDEwKTtsLmdldENlbGxNZXRhKGQsaCkucmVhZE9ubHkmJmMucHJldmVudERlZmF1bHQoKX0oZCxjKSksbC5hZGRFdmVudExpc3RlbmVyKGEsIm1vdXNldXAiLGQ9PmZ1bmN0aW9uIFVhdChjLGwpe2NvbnN0e3RhcmdldDphfT1jO0tYKGEpJiYo'@;
put 'IWEuaGFzQXR0cmlidXRlKFJfKXx8IWEuaGFzQXR0cmlidXRlKExfKXx8c2V0VGltZW91dChsLmxpc3RlbiwxMCkpfShkLGMpKSxsLmFkZEV2ZW50TGlzdGVuZXIoYSwiY2hhbmdlIixkPT5mdW5jdGlvbiBXYXQoYyxsKXtjb25zdHt0YXJnZXQ6YX09YztpZighS1goYSl8fCFhLmhhc0F0dHJp'@;
put 'YnV0ZShSXyl8fCFhLmhhc0F0dHJpYnV0ZShMXykpcmV0dXJuO2NvbnN0IGQ9cGFyc2VJbnQoYS5nZXRBdHRyaWJ1dGUoUl8pLDEwKSxoPXBhcnNlSW50KGEuZ2V0QXR0cmlidXRlKExfKSwxMCksZj1sLmdldENlbGxNZXRhKGQsaCk7aWYoIWYucmVhZE9ubHkpe2xldCB2PW51bGw7dj1jLnRh'@;
put 'cmdldC5jaGVja2VkP3ZvaWQgMD09PWYudW5jaGVja2VkVGVtcGxhdGV8fGYuY2hlY2tlZFRlbXBsYXRlOnZvaWQgMCE9PWYudW5jaGVja2VkVGVtcGxhdGUmJmYudW5jaGVja2VkVGVtcGxhdGUsbC5zZXREYXRhQXRDZWxsKGQsaCx2KX19KGQsYykpLG40ZS5zZXQoYyxsKX19KGMpO2xldCBa'@;
put 'PWZ1bmN0aW9uIGphdChjKXtjb25zdCBsPWMuY3JlYXRlRWxlbWVudCgiaW5wdXQiKTtyZXR1cm4gbC5jbGFzc05hbWU9Imh0Q2hlY2tib3hSZW5kZXJlcklucHV0IixsLnR5cGU9ImNoZWNrYm94IixsLnNldEF0dHJpYnV0ZSgidGFiaW5kZXgiLCItMSIpLGwuY2xvbmVOb2RlKCExKX0oTSk7'@;
put 'Y29uc3QgcmU9di5sYWJlbDtsZXQgY2U9ITE7aWYodHlwZW9mIHYuY2hlY2tlZFRlbXBsYXRlPiJ1IiYmKHYuY2hlY2tlZFRlbXBsYXRlPSEwKSx0eXBlb2Ygdi51bmNoZWNrZWRUZW1wbGF0ZT4idSImJih2LnVuY2hlY2tlZFRlbXBsYXRlPSExKSx4cChsKSxmPT09di5jaGVja2VkVGVtcGxh'@;
put 'dGV8fGxjKGYpLnRvTG9jYWxlTG93ZXJDYXNlKHYubG9jYWxlKT09PWxjKHYuY2hlY2tlZFRlbXBsYXRlKS50b0xvY2FsZUxvd2VyQ2FzZSh2LmxvY2FsZSk/Wi5jaGVja2VkPSEwOmY9PT12LnVuY2hlY2tlZFRlbXBsYXRlfHxsYyhmKS50b0xvY2FsZUxvd2VyQ2FzZSh2LmxvY2FsZSk9PT1s'@;
put 'Yyh2LnVuY2hlY2tlZFRlbXBsYXRlKS50b0xvY2FsZUxvd2VyQ2FzZSh2LmxvY2FsZSk/Wi5jaGVja2VkPSExOlVjKGYpP1RpKFosIm5vVmFsdWUiKTooWi5zdHlsZS5kaXNwbGF5PSJub25lIixUaShaLE5hdCksY2U9ITApLHZvKFosW1tSXyxhXSxbTF8sZF1dKSxEJiZ2byhaLFttRShjLmdl'@;
put 'dFRyYW5zbGF0ZWRQaHJhc2UoWi5jaGVja2VkP2hYOmZYKSksSTJlKFouY2hlY2tlZCksS3FlKCldKSwhY2UmJnJlKXtsZXQgcWU9IiI7aWYocmUudmFsdWUpcWU9ImZ1bmN0aW9uIj09dHlwZW9mIHJlLnZhbHVlP3JlLnZhbHVlLmNhbGwodGhpcyxhLGQsaCxmKTpyZS52YWx1ZTtlbHNlIGlm'@;
put 'KHJlLnByb3BlcnR5KXtjb25zdCBwdD1jLmdldERhdGFBdFJvd1Byb3AoYSxyZS5wcm9wZXJ0eSk7cWU9bnVsbCE9PXB0P3B0OiIifWNvbnN0IHJ0PWZ1bmN0aW9uIHphdChjLGwsYSl7Y29uc3QgZD1jLmNyZWF0ZUVsZW1lbnQoImxhYmVsIik7ZC5jbGFzc05hbWU9Imh0Q2hlY2tib3hSZW5k'@;
put 'ZXJlckxhYmVsICIrKGE/ImZ1bGxXaWR0aCI6IiIpO2NvbnN0IGg9Yy5jcmVhdGVUZXh0Tm9kZShsKTtpZihhKXtjb25zdCBmPWMuY3JlYXRlRWxlbWVudCgic3BhbiIpO2YuYXBwZW5kQ2hpbGQoaCksZC5hcHBlbmRDaGlsZChmKX1lbHNlIGQuYXBwZW5kQ2hpbGQoaCk7cmV0dXJuIGQuY2xv'@;
put 'bmVOb2RlKCEwKX0oTSxxZSwhMCE9PXJlLnNlcGFyYXRlZCk7ImJlZm9yZSI9PT1yZS5wb3NpdGlvbj9yZS5zZXBhcmF0ZWQ/KGwuYXBwZW5kQ2hpbGQocnQpLGwuYXBwZW5kQ2hpbGQoWikpOihydC5hcHBlbmRDaGlsZChaKSxaPXJ0KTooIXJlLnBvc2l0aW9ufHwiYWZ0ZXIiPT09cmUucG9z'@;
put 'aXRpb24pJiYocmUuc2VwYXJhdGVkPyhsLmFwcGVuZENoaWxkKFopLGwuYXBwZW5kQ2hpbGQocnQpKToocnQuaW5zZXJ0QmVmb3JlKFoscnQuZmlyc3RDaGlsZCksWj1ydCkpfWZ1bmN0aW9uIEVlKCl7bGV0IHFlPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdJiZh'@;
put 'cmd1bWVudHNbMF07Y29uc3QgcnQ9Yy5nZXRTZWxlY3RlZFJhbmdlKCkscHQ9W10sZHQ9bmV3IE1hcDtsZXQgSnQ9W10sdm49MDtpZihydCl7Zm9yKGxldCBDbj0wO0NuPHJ0Lmxlbmd0aDtDbisrKXtjb25zdHtyb3c6dG4sY29sOk1ufT1ydFtDbl0uZ2V0VG9wU3RhcnRDb3JuZXIoKSx7cm93'@;
put 'OkNyLGNvbDpHcn09cnRbQ25dLmdldEJvdHRvbUVuZENvcm5lcigpO2ZvcihsZXQgbXI9dG47bXI8PUNyO21yKz0xKWZvcihsZXQgR249TW47R248PUdyO0duKz0xKXtjb25zdCBhaT1jLmdldENlbGxNZXRhKG1yLEduKTtpZihhaS5oaWRkZW4pY29udGludWU7Y29uc3QgX2k9e2NoZWNrZWRU'@;
put 'ZW1wbGF0ZTphaS5jaGVja2VkVGVtcGxhdGUsdW5jaGVja2VkVGVtcGxhdGU6YWkudW5jaGVja2VkVGVtcGxhdGV9O2lmKCJjaGVja2JveCIhPT1haS50eXBlKXshMD09PXFlJiYhYWkucmVhZE9ubHkmJihkdC5oYXMocHQubGVuZ3RoKT9kdC5zZXQocHQubGVuZ3RoLFsuLi5kdC5nZXQocHQu'@;
put 'bGVuZ3RoKSxbbXIsR24sbnVsbF1dKTpkdC5zZXQocHQubGVuZ3RoLFtbbXIsR24sbnVsbF1dKSk7Y29udGludWV9aWYoITA9PT1haS5yZWFkT25seSljb250aW51ZTt0eXBlb2YgYWkuY2hlY2tlZFRlbXBsYXRlPiJ1IiYmKGFpLmNoZWNrZWRUZW1wbGF0ZT0hMCksdHlwZW9mIGFpLnVuY2hl'@;
put 'Y2tlZFRlbXBsYXRlPiJ1IiYmKGFpLnVuY2hlY2tlZFRlbXBsYXRlPSExKTtjb25zdCBPbj1jLmdldERhdGFBdENlbGwobXIsR24pOyExPT09cWU/W2FpLmNoZWNrZWRUZW1wbGF0ZSxhaS5jaGVja2VkVGVtcGxhdGUudG9TdHJpbmcoKV0uaW5jbHVkZXMoT24pP0p0LnB1c2goW21yLEduLGFp'@;
put 'LnVuY2hlY2tlZFRlbXBsYXRlLF9pXSk6W2FpLnVuY2hlY2tlZFRlbXBsYXRlLGFpLnVuY2hlY2tlZFRlbXBsYXRlLnRvU3RyaW5nKCksbnVsbCx2b2lkIDBdLmluY2x1ZGVzKE9uKSYmSnQucHVzaChbbXIsR24sYWkuY2hlY2tlZFRlbXBsYXRlLF9pXSk6SnQucHVzaChbbXIsR24sYWkudW5j'@;
put 'aGVja2VkVGVtcGxhdGUsX2ldKSx2bis9MX1wdC5wdXNoKHZuKSx2bj0wfUp0PUp0LmV2ZXJ5KENuPT57bGV0WywsdG5dPUNuO3JldHVybiB0bj09PUp0WzBdWzJdfSk/SnQubWFwKENuPT57bGV0W3RuLE1uLENyXT1DbjtyZXR1cm5bdG4sTW4sQ3JdfSk6SnQubWFwKENuPT57bGV0W3RuLE1u'@;
put 'LCxDcl09Q247cmV0dXJuW3RuLE1uLENyLmNoZWNrZWRUZW1wbGF0ZV19KSxKdC5sZW5ndGg+MCYmcHQuZm9yRWFjaCgoQ24sdG4pPT57bGV0IE1uPUp0LnNwbGljZSgwLENuKTtkdC5zaXplJiZkdC5oYXModG4pJiYoTW49Wy4uLk1uLC4uLmR0LmdldCh0bildKSxjLnNldERhdGFBdENlbGwo'@;
put 'TW4pfSl9fWZ1bmN0aW9uIEJlKCl7Y29uc3QgcWU9Yy5nZXRTZWxlY3RlZFJhbmdlKCk7aWYocWUpe2ZvcihsZXQgcnQ9MDtydDxxZS5sZW5ndGg7cnQrKyl7Y29uc3QgcHQ9cWVbcnRdLmdldFRvcFN0YXJ0Q29ybmVyKCksZHQ9cWVbcnRdLmdldEJvdHRvbUVuZENvcm5lcigpO2ZvcihsZXQg'@;
put 'SnQ9cHQucm93O0p0PD1kdC5yb3c7SnQrKylmb3IobGV0IHZuPXB0LmNvbDt2bjw9ZHQuY29sO3ZuKyspe2lmKGMuZ2V0Q2VsbE1ldGEoSnQsdm4pLnJlYWRPbmx5KWNvbnRpbnVlO2NvbnN0IHRuPWMuZ2V0Q2VsbChKdCx2bik7aWYoRXAodG4pJiZ0bi5xdWVyeVNlbGVjdG9yQWxsKCJpbnB1'@;
put 'dFt0eXBlPWNoZWNrYm94XSIpLmxlbmd0aD4wKXJldHVybiEwfX1yZXR1cm4hMX19KCFyZXx8cmUmJiFyZS5zZXBhcmF0ZWQpJiZsLmFwcGVuZENoaWxkKFopLGNlJiZsLmFwcGVuZENoaWxkKE0uY3JlYXRlVGV4dE5vZGUoIiNiYWQtdmFsdWUjIikpLHQ0ZS5oYXMoYyl8fCh0NGUuc2V0KGMs'@;
put 'ITApLGZ1bmN0aW9uIGJlKCl7Yy5nZXRTaG9ydGN1dE1hbmFnZXIoKS5nZXRDb250ZXh0KCJncmlkIikuYWRkU2hvcnRjdXRzKFt7a2V5czpbWyJzcGFjZSJdXSxjYWxsYmFjazooKT0+KEVlKCksIUJlKCkpLHJ1bk9ubHlJZjooKT0+e3ZhciBkdDtyZXR1cm4gbnVsbD09PShkdD1jLmdldFNl'@;
put 'bGVjdGVkUmFuZ2VMYXN0KCkpfHx2b2lkIDA9PT1kdD92b2lkIDA6ZHQuaGlnaGxpZ2h0LmlzQ2VsbCgpfX0se2tleXM6W1siZW50ZXIiXV0sY2FsbGJhY2s6KCk9PihFZSgpLCFCZSgpKSxydW5Pbmx5SWY6KCk9Pntjb25zdCBkdD1jLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCk7cmV0dXJuIGMu'@;
put 'Z2V0U2V0dGluZ3MoKS5lbnRlckJlZ2luc0VkaXRpbmcmJmR0Py5oaWdobGlnaHQuaXNDZWxsKCkmJiFjLnNlbGVjdGlvbi5pc011bHRpcGxlKCl9fSx7a2V5czpbWyJkZWxldGUiXSxbImJhY2tzcGFjZSJdXSxjYWxsYmFjazooKT0+KEVlKCEwKSwhQmUoKSkscnVuT25seUlmOigpPT57dmFy'@;
put 'IGR0O3JldHVybiBudWxsPT09KGR0PWMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSl8fHZvaWQgMD09PWR0P3ZvaWQgMDpkdC5oaWdobGlnaHQuaXNDZWxsKCl9fV0se2dyb3VwOlZhdCxyZWxhdGl2ZVRvR3JvdXA6V20scG9zaXRpb246ImJlZm9yZSJ9KX0oKSl9ZnVuY3Rpb24gS1goYyl7cmV0'@;
put 'dXJuIklOUFVUIj09PWMudGFnTmFtZSYmImNoZWNrYm94Ij09PWMuZ2V0QXR0cmlidXRlKCJ0eXBlIil9ZnVuY3Rpb24gcVgoYyxsLGEsZCxoLGYsdil7SV8uYXBwbHkodGhpcyxbYyxsLGEsZCxoLGYsdl0pfVNhLmdldFNpbmdsZXRvbigpLmFkZCgibW9kaWZ5QXV0b0NvbHVtblNpemVTZWVk'@;
put 'IixmdW5jdGlvbihjLGwsYSl7Y29uc3R7bGFiZWw6ZCx0eXBlOmgscm93OmYsY29sdW1uOnYscHJvcDpNfT1sO2lmKCJjaGVja2JveCI9PT1oKXtpZihkKXtjb25zdHt2YWx1ZTpELHByb3BlcnR5Olp9PWQ7bGV0IHJlPWE7aWYoRClyZT0iZnVuY3Rpb24iPT10eXBlb2YgRD9EKGYsdixNLGEp'@;
put 'OkQ7ZWxzZSBpZihaKXtjb25zdCBjZT10aGlzLmdldERhdGFBdFJvd1Byb3AoZixaKTtyZT1udWxsIT09Y2U/Y2U6YX1jPXJlfXJldHVybiBjfX0pLCRYLlJFTkRFUkVSX1RZUEU9ImNoZWNrYm94IixxWC5SRU5ERVJFUl9UWVBFPSJoYW5kc29udGFibGUiO3ZhciBYWCxpNGUsSlgsYTRlLFFY'@;
put 'LHM0ZSxHYXQ9dHlwZW9mIGdsb2JhbFRoaXM8InUiP2dsb2JhbFRoaXM6dHlwZW9mIHdpbmRvdzwidSI/d2luZG93OnR5cGVvZiBnbG9iYWw8InUiP2dsb2JhbDp0eXBlb2Ygc2VsZjwidSI/c2VsZjp7fTtmdW5jdGlvbiAkYXQoYyl7cmV0dXJuIGMmJmMuX19lc01vZHVsZSYmT2JqZWN0LnBy'@;
put 'b3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGMsImRlZmF1bHQiKT9jLmRlZmF1bHQ6Y31mdW5jdGlvbiBvNGUoKXtpZihhNGUpcmV0dXJuIEpYO2E0ZT0xO2NvbnN0IGM9W3trZXk6IlppQiIsZmFjdG9yOk1hdGgucG93KDEwMjQsNyl9LHtrZXk6IlpCIixmYWN0b3I6TWF0aC5wb3coMWUz'@;
put 'LDcpfSx7a2V5OiJZaUIiLGZhY3RvcjpNYXRoLnBvdygxMDI0LDgpfSx7a2V5OiJZQiIsZmFjdG9yOk1hdGgucG93KDFlMyw4KX0se2tleToiVGlCIixmYWN0b3I6TWF0aC5wb3coMTAyNCw0KX0se2tleToiVEIiLGZhY3RvcjpNYXRoLnBvdygxZTMsNCl9LHtrZXk6IlBpQiIsZmFjdG9yOk1h'@;
put 'dGgucG93KDEwMjQsNSl9LHtrZXk6IlBCIixmYWN0b3I6TWF0aC5wb3coMWUzLDUpfSx7a2V5OiJNaUIiLGZhY3RvcjpNYXRoLnBvdygxMDI0LDIpfSx7a2V5OiJNQiIsZmFjdG9yOk1hdGgucG93KDFlMywyKX0se2tleToiS2lCIixmYWN0b3I6TWF0aC5wb3coMTAyNCwxKX0se2tleToiS0Ii'@;
put 'LGZhY3RvcjpNYXRoLnBvdygxZTMsMSl9LHtrZXk6IkdpQiIsZmFjdG9yOk1hdGgucG93KDEwMjQsMyl9LHtrZXk6IkdCIixmYWN0b3I6TWF0aC5wb3coMWUzLDMpfSx7a2V5OiJFaUIiLGZhY3RvcjpNYXRoLnBvdygxMDI0LDYpfSx7a2V5OiJFQiIsZmFjdG9yOk1hdGgucG93KDFlMyw2KX0s'@;
put 'e2tleToiQiIsZmFjdG9yOjF9XTtmdW5jdGlvbiBsKEQpe3JldHVybiBELnJlcGxhY2UoL1stL1xcXiQqKz8uKCl8W1xde31dL2csIlxcJCYiKX1mdW5jdGlvbiBhKEQsWixyZSxjZSxiZSxFZSxCZSl7aWYoIWlzTmFOKCtEKSlyZXR1cm4rRDtsZXQgcWU9IiIscnQ9RC5yZXBsYWNlKC8oXlte'@;
put 'KF0qKVwoKC4qKVwpKFteKV0qJCkvLCIkMSQyJDMiKTtpZihydCE9PUQpcmV0dXJuLTEqYShydCxaLHJlLGNlLGJlLEVlKTtmb3IobGV0IHRuPTA7dG48Yy5sZW5ndGg7dG4rKyl7bGV0IE1uPWNbdG5dO2lmKHFlPUQucmVwbGFjZShSZWdFeHAoYChbMC05IF0pKCR7TW4ua2V5fSkkYCksIiQx'@;
put 'IikscWUhPT1EKXJldHVybiBhKHFlLFoscmUsY2UsYmUsRWUpKk1uLmZhY3Rvcn1pZihxZT1ELnJlcGxhY2UoIiUiLCIiKSxxZSE9PUQpcmV0dXJuIGEocWUsWixyZSxjZSxiZSxFZSkvMTAwO2xldCBwdD1wYXJzZUZsb2F0KEQpO2lmKGlzTmFOKHB0KSlyZXR1cm47bGV0IGR0PWNlKHB0KTtp'@;
put 'ZihkdCYmIi4iIT09ZHQmJihxZT1ELnJlcGxhY2UobmV3IFJlZ0V4cChgJHtsKGR0KX0kYCksIiIpLHFlIT09RCkpcmV0dXJuIGEocWUsWixyZSxjZSxiZSxFZSk7bGV0IEp0PXt9O09iamVjdC5rZXlzKEVlKS5mb3JFYWNoKHRuPT57SnRbRWVbdG5dXT10bn0pO2xldCB2bj1PYmplY3Qua2V5'@;
put 'cyhKdCkuc29ydCgpLnJldmVyc2UoKSxDbj12bi5sZW5ndGg7Zm9yKGxldCB0bj0wO3RuPENuO3RuKyspe2xldCBNbj12blt0bl0sQ3I9SnRbTW5dO2lmKHFlPUQucmVwbGFjZShNbiwiIikscWUhPT1EKXtsZXQgR3I7c3dpdGNoKENyKXtjYXNlInRob3VzYW5kIjpHcj1NYXRoLnBvdygxMCwz'@;
put 'KTticmVhaztjYXNlIm1pbGxpb24iOkdyPU1hdGgucG93KDEwLDYpO2JyZWFrO2Nhc2UiYmlsbGlvbiI6R3I9TWF0aC5wb3coMTAsOSk7YnJlYWs7Y2FzZSJ0cmlsbGlvbiI6R3I9TWF0aC5wb3coMTAsMTIpfXJldHVybiBhKHFlLFoscmUsY2UsYmUsRWUpKkdyfX19ZnVuY3Rpb24gaChELFos'@;
put 'cmU9IiIsY2UsYmUsRWUsQmUpe2lmKCIiPT09RClyZXR1cm47aWYoRD09PWJlKXJldHVybiAwO2xldCBxZT1mdW5jdGlvbiBkKEQsWixyZSl7bGV0IGNlPUQucmVwbGFjZShyZSwiIik7cmV0dXJuIGNlPWNlLnJlcGxhY2UobmV3IFJlZ0V4cChgKFswLTldKSR7bChaLnRob3VzYW5kcyl9KFsw'@;
put 'LTldKWAsImciKSwiJDEkMiIpLGNlPWNlLnJlcGxhY2UoWi5kZWNpbWFsLCIuIiksY2V9KEQsWixyZSk7cmV0dXJuIGEocWUsWixyZSxjZSxiZSxFZSl9cmV0dXJuIEpYPXt1bmZvcm1hdDpmdW5jdGlvbiBNKEQsWil7Y29uc3QgcmU9ckooKTtsZXQgcnQsY2U9cmUuY3VycmVudERlbGltaXRl'@;
put 'cnMoKSxiZT1yZS5jdXJyZW50Q3VycmVuY3koKS5zeW1ib2wsRWU9cmUuY3VycmVudE9yZGluYWwoKSxCZT1yZS5nZXRaZXJvRm9ybWF0KCkscWU9cmUuY3VycmVudEFiYnJldmlhdGlvbnMoKTtpZigic3RyaW5nIj09dHlwZW9mIEQpcnQ9ZnVuY3Rpb24gZihELFope2lmKCFELmluZGV4T2Yo'@;
put 'IjoiKXx8IjoiPT09Wi50aG91c2FuZHMpcmV0dXJuITE7bGV0IGNlPUQuc3BsaXQoIjoiKTtpZigzIT09Y2UubGVuZ3RoKXJldHVybiExO2xldCBFZT0rY2VbMV0sQmU9K2NlWzJdO3JldHVybiFpc05hTigrY2VbMF0pJiYhaXNOYU4oRWUpJiYhaXNOYU4oQmUpfShELGNlKT9mdW5jdGlvbiB2'@;
put 'KEQpe2xldCBaPUQuc3BsaXQoIjoiKTtyZXR1cm4rWlsyXSs2MCorWlsxXSszNjAwKitaWzBdfShEKTpoKEQsY2UsYmUsRWUsQmUscWUpO2Vsc2V7aWYoIm51bWJlciIhPXR5cGVvZiBEKXJldHVybjtydD1EfWlmKHZvaWQgMCE9PXJ0KXJldHVybiBydH19fWZ1bmN0aW9uIGVKKCl7aWYoczRl'@;
put 'KXJldHVybiBRWDtzNGU9MTtsZXQgYz1vNGUoKTtjb25zdCBsPS9eW2Etel17MiwzfSgtW2EtekEtWl17NH0pPygtKFtBLVpdezJ9fFswLTldezN9KSk/JC8sWj17b3V0cHV0Ont0eXBlOiJzdHJpbmciLHZhbGlkVmFsdWVzOlsiY3VycmVuY3kiLCJwZXJjZW50IiwiYnl0ZSIsInRpbWUiLCJv'@;
put 'cmRpbmFsIiwibnVtYmVyIl19LGJhc2U6e3R5cGU6InN0cmluZyIsdmFsaWRWYWx1ZXM6WyJkZWNpbWFsIiwiYmluYXJ5IiwiZ2VuZXJhbCJdLHJlc3RyaWN0aW9uOihydCxwdCk9PiJieXRlIj09PXB0Lm91dHB1dCxtZXNzYWdlOiJgYmFzZWAgbXVzdCBiZSBwcm92aWRlZCBvbmx5IHdoZW4g'@;
put 'dGhlIG91dHB1dCBpcyBgYnl0ZWAiLG1hbmRhdG9yeTpydD0+ImJ5dGUiPT09cnQub3V0cHV0fSxjaGFyYWN0ZXJpc3RpYzp7dHlwZToibnVtYmVyIixyZXN0cmljdGlvbjpydD0+cnQ+PTAsbWVzc2FnZToidmFsdWUgbXVzdCBiZSBwb3NpdGl2ZSJ9LHByZWZpeDoic3RyaW5nIixwb3N0Zml4'@;
put 'OiJzdHJpbmciLGZvcmNlQXZlcmFnZTp7dHlwZToic3RyaW5nIix2YWxpZFZhbHVlczpbInRyaWxsaW9uIiwiYmlsbGlvbiIsIm1pbGxpb24iLCJ0aG91c2FuZCJdfSxhdmVyYWdlOiJib29sZWFuIixsb3dQcmVjaXNpb246e3R5cGU6ImJvb2xlYW4iLHJlc3RyaWN0aW9uOihydCxwdCk9PiEw'@;
put 'PT09cHQuYXZlcmFnZSxtZXNzYWdlOiJgbG93UHJlY2lzaW9uYCBtdXN0IGJlIHByb3ZpZGVkIG9ubHkgd2hlbiB0aGUgb3B0aW9uIGBhdmVyYWdlYCBpcyBzZXQifSxjdXJyZW5jeVBvc2l0aW9uOnt0eXBlOiJzdHJpbmciLHZhbGlkVmFsdWVzOlsicHJlZml4IiwiaW5maXgiLCJwb3N0Zml4'@;
put 'Il19LGN1cnJlbmN5U3ltYm9sOiJzdHJpbmciLHRvdGFsTGVuZ3RoOnt0eXBlOiJudW1iZXIiLHJlc3RyaWN0aW9uczpbe3Jlc3RyaWN0aW9uOnJ0PT5ydD49MCxtZXNzYWdlOiJ2YWx1ZSBtdXN0IGJlIHBvc2l0aXZlIn0se3Jlc3RyaWN0aW9uOihydCxwdCk9PiFwdC5leHBvbmVudGlhbCxt'@;
put 'ZXNzYWdlOiJgdG90YWxMZW5ndGhgIGlzIGluY29tcGF0aWJsZSB3aXRoIGBleHBvbmVudGlhbGAifV19LG1hbnRpc3NhOnt0eXBlOiJudW1iZXIiLHJlc3RyaWN0aW9uOnJ0PT5ydD49MCxtZXNzYWdlOiJ2YWx1ZSBtdXN0IGJlIHBvc2l0aXZlIn0sb3B0aW9uYWxNYW50aXNzYToiYm9vbGVh'@;
put 'biIsdHJpbU1hbnRpc3NhOiJib29sZWFuIixyb3VuZGluZ0Z1bmN0aW9uOiJmdW5jdGlvbiIsb3B0aW9uYWxDaGFyYWN0ZXJpc3RpYzoiYm9vbGVhbiIsdGhvdXNhbmRTZXBhcmF0ZWQ6ImJvb2xlYW4iLHNwYWNlU2VwYXJhdGVkOiJib29sZWFuIixzcGFjZVNlcGFyYXRlZEN1cnJlbmN5OiJi'@;
put 'b29sZWFuIixzcGFjZVNlcGFyYXRlZEFiYnJldmlhdGlvbjoiYm9vbGVhbiIsYWJicmV2aWF0aW9uczp7dHlwZToib2JqZWN0IixjaGlsZHJlbjp7dGhvdXNhbmQ6InN0cmluZyIsbWlsbGlvbjoic3RyaW5nIixiaWxsaW9uOiJzdHJpbmciLHRyaWxsaW9uOiJzdHJpbmcifX0sbmVnYXRpdmU6'@;
put 'e3R5cGU6InN0cmluZyIsdmFsaWRWYWx1ZXM6WyJzaWduIiwicGFyZW50aGVzaXMiXX0sZm9yY2VTaWduOiJib29sZWFuIixleHBvbmVudGlhbDp7dHlwZToiYm9vbGVhbiJ9LHByZWZpeFN5bWJvbDp7dHlwZToiYm9vbGVhbiIscmVzdHJpY3Rpb246KHJ0LHB0KT0+InBlcmNlbnQiPT09cHQu'@;
put 'b3V0cHV0LG1lc3NhZ2U6ImBwcmVmaXhTeW1ib2xgIGNhbiBiZSBwcm92aWRlZCBvbmx5IHdoZW4gdGhlIG91dHB1dCBpcyBgcGVyY2VudGAifX0scmU9e2xhbmd1YWdlVGFnOnt0eXBlOiJzdHJpbmciLG1hbmRhdG9yeTohMCxyZXN0cmljdGlvbjpydD0+cnQubWF0Y2gobCksbWVzc2FnZToi'@;
put 'dGhlIGxhbmd1YWdlIHRhZyBtdXN0IGZvbGxvdyB0aGUgQkNQIDQ3IHNwZWNpZmljYXRpb24gKHNlZSBodHRwczovL3Rvb2xzLmllZnQub3JnL2h0bWwvYmNwNDcpIn0sZGVsaW1pdGVyczp7dHlwZToib2JqZWN0IixjaGlsZHJlbjp7dGhvdXNhbmRzOiJzdHJpbmciLGRlY2ltYWw6InN0cmlu'@;
put 'ZyIsdGhvdXNhbmRzU2l6ZToibnVtYmVyIn0sbWFuZGF0b3J5OiEwfSxhYmJyZXZpYXRpb25zOnt0eXBlOiJvYmplY3QiLGNoaWxkcmVuOnt0aG91c2FuZDp7dHlwZToic3RyaW5nIixtYW5kYXRvcnk6ITB9LG1pbGxpb246e3R5cGU6InN0cmluZyIsbWFuZGF0b3J5OiEwfSxiaWxsaW9uOnt0'@;
put 'eXBlOiJzdHJpbmciLG1hbmRhdG9yeTohMH0sdHJpbGxpb246e3R5cGU6InN0cmluZyIsbWFuZGF0b3J5OiEwfX0sbWFuZGF0b3J5OiEwfSxzcGFjZVNlcGFyYXRlZDoiYm9vbGVhbiIsc3BhY2VTZXBhcmF0ZWRDdXJyZW5jeToiYm9vbGVhbiIsb3JkaW5hbDp7dHlwZToiZnVuY3Rpb24iLG1h'@;
put 'bmRhdG9yeTohMH0sYnl0ZXM6e3R5cGU6Im9iamVjdCIsY2hpbGRyZW46e2JpbmFyeVN1ZmZpeGVzOiJvYmplY3QiLGRlY2ltYWxTdWZmaXhlczoib2JqZWN0In19LGN1cnJlbmN5Ont0eXBlOiJvYmplY3QiLGNoaWxkcmVuOntzeW1ib2w6InN0cmluZyIscG9zaXRpb246InN0cmluZyIsY29k'@;
put 'ZToic3RyaW5nIn0sbWFuZGF0b3J5OiEwfSxkZWZhdWx0czoiZm9ybWF0IixvcmRpbmFsRm9ybWF0OiJmb3JtYXQiLGJ5dGVGb3JtYXQ6ImZvcm1hdCIscGVyY2VudGFnZUZvcm1hdDoiZm9ybWF0IixjdXJyZW5jeUZvcm1hdDoiZm9ybWF0Iix0aW1lRGVmYXVsdHM6ImZvcm1hdCIsZm9ybWF0'@;
put 'czp7dHlwZToib2JqZWN0IixjaGlsZHJlbjp7Zm91ckRpZ2l0czp7dHlwZToiZm9ybWF0IixtYW5kYXRvcnk6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHM6e3R5cGU6ImZvcm1hdCIsbWFuZGF0b3J5OiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzTm9DdXJyZW5jeTp7dHlwZToiZm9ybWF0IixtYW5k'@;
put 'YXRvcnk6ITB9LGZ1bGxXaXRoTm9EZWNpbWFsczp7dHlwZToiZm9ybWF0IixtYW5kYXRvcnk6ITB9fX19O2Z1bmN0aW9uIGJlKHJ0KXtyZXR1cm4gdm9pZCAwIT09Yy51bmZvcm1hdChydCl9ZnVuY3Rpb24gRWUocnQscHQsZHQsSnQ9ITEpe2xldCB2bj1PYmplY3Qua2V5cyhydCkubWFwKENu'@;
put 'PT57aWYoIXB0W0NuXSlyZXR1cm4gY29uc29sZS5lcnJvcihgJHtkdH0gSW52YWxpZCBrZXk6ICR7Q259YCksITE7bGV0IHRuPXJ0W0NuXSxNbj1wdFtDbl07aWYoInN0cmluZyI9PXR5cGVvZiBNbiYmKE1uPXt0eXBlOk1ufSksImZvcm1hdCI9PT1Nbi50eXBlKXtpZighRWUodG4sWixgW1Zh'@;
put 'bGlkYXRlICR7Q259XWAsITApKXJldHVybiExfWVsc2UgaWYodHlwZW9mIHRuIT09TW4udHlwZSlyZXR1cm4gY29uc29sZS5lcnJvcihgJHtkdH0gJHtDbn0gdHlwZSBtaXNtYXRjaGVkOiAiJHtNbi50eXBlfSIgZXhwZWN0ZWQsICIke3R5cGVvZiB0bn0iIHByb3ZpZGVkYCksITE7aWYoTW4u'@;
put 'cmVzdHJpY3Rpb25zJiZNbi5yZXN0cmljdGlvbnMubGVuZ3RoKXtsZXQgQ3I9TW4ucmVzdHJpY3Rpb25zLmxlbmd0aDtmb3IobGV0IEdyPTA7R3I8Q3I7R3IrKyl7bGV0e3Jlc3RyaWN0aW9uOm1yLG1lc3NhZ2U6R259PU1uLnJlc3RyaWN0aW9uc1tHcl07aWYoIW1yKHRuLHJ0KSlyZXR1cm4g'@;
put 'Y29uc29sZS5lcnJvcihgJHtkdH0gJHtDbn0gaW52YWxpZCB2YWx1ZTogJHtHbn1gKSwhMX19cmV0dXJuIE1uLnJlc3RyaWN0aW9uJiYhTW4ucmVzdHJpY3Rpb24odG4scnQpPyhjb25zb2xlLmVycm9yKGAke2R0fSAke0NufSBpbnZhbGlkIHZhbHVlOiAke01uLm1lc3NhZ2V9YCksITEpOk1u'@;
put 'LnZhbGlkVmFsdWVzJiYtMT09PU1uLnZhbGlkVmFsdWVzLmluZGV4T2YodG4pPyhjb25zb2xlLmVycm9yKGAke2R0fSAke0NufSBpbnZhbGlkIHZhbHVlOiBtdXN0IGJlIGFtb25nICR7SlNPTi5zdHJpbmdpZnkoTW4udmFsaWRWYWx1ZXMpfSwgIiR7dG59IiBwcm92aWRlZGApLCExKTohKE1u'@;
put 'LmNoaWxkcmVuJiYhRWUodG4sTW4uY2hpbGRyZW4sYFtWYWxpZGF0ZSAke0NufV1gKSl9KTtyZXR1cm4gSnR8fHZuLnB1c2goLi4uT2JqZWN0LmtleXMocHQpLm1hcChDbj0+e2xldCB0bj1wdFtDbl07aWYoInN0cmluZyI9PXR5cGVvZiB0biYmKHRuPXt0eXBlOnRufSksdG4ubWFuZGF0b3J5'@;
put 'KXtsZXQgTW49dG4ubWFuZGF0b3J5O2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBNbiYmKE1uPU1uKHJ0KSksTW4mJnZvaWQgMD09PXJ0W0NuXSlyZXR1cm4gY29uc29sZS5lcnJvcihgJHtkdH0gTWlzc2luZyBtYW5kYXRvcnkga2V5ICIke0NufSJgKSwhMX1yZXR1cm4hMH0pKSx2bi5yZWR1Y2Uo'@;
put 'KENuLHRuKT0+Q24mJnRuLCEwKX1mdW5jdGlvbiBCZShydCl7cmV0dXJuIEVlKHJ0LFosIltWYWxpZGF0ZSBmb3JtYXRdIil9cmV0dXJuIFFYPXt2YWxpZGF0ZTpmdW5jdGlvbiBjZShydCxwdCl7bGV0IGR0PWJlKHJ0KSxKdD1CZShwdCk7cmV0dXJuIGR0JiZKdH0sdmFsaWRhdGVGb3JtYXQ6'@;
put 'QmUsdmFsaWRhdGVJbnB1dDpiZSx2YWxpZGF0ZUxhbmd1YWdlOmZ1bmN0aW9uIHFlKHJ0KXtyZXR1cm4gRWUocnQscmUsIltWYWxpZGF0ZSBsYW5ndWFnZV0iKX19fXZhciBuSixsNGUsdEo9e3BhcnNlRm9ybWF0OmZ1bmN0aW9uIGRvdChjLGw9e30pe3JldHVybiJzdHJpbmciIT10eXBlb2Yg'@;
put 'Yz9jOihjPWZ1bmN0aW9uIHFhdChjLGwpe2xldCBhPWMubWF0Y2goL157KFtefV0qKX0vKTtyZXR1cm4gYT8obC5wcmVmaXg9YVsxXSxjLnNsaWNlKGFbMF0ubGVuZ3RoKSk6Y30oYyxsKSxjPWZ1bmN0aW9uIFhhdChjLGwpe2xldCBhPWMubWF0Y2goL3soW159XSopfSQvKTtyZXR1cm4gYT8o'@;
put 'bC5wb3N0Zml4PWFbMV0sYy5zbGljZSgwLC1hWzBdLmxlbmd0aCkpOmN9KGMsbCksZnVuY3Rpb24gSmF0KGMsbCl7aWYoLTE9PT1jLmluZGV4T2YoIiQiKSl7aWYoLTE9PT1jLmluZGV4T2YoIiUiKSlyZXR1cm4tMSE9PWMuaW5kZXhPZigiYmQiKT8obC5vdXRwdXQ9ImJ5dGUiLHZvaWQobC5i'@;
put 'YXNlPSJnZW5lcmFsIikpOi0xIT09Yy5pbmRleE9mKCJiIik/KGwub3V0cHV0PSJieXRlIix2b2lkKGwuYmFzZT0iYmluYXJ5IikpOi0xIT09Yy5pbmRleE9mKCJkIik/KGwub3V0cHV0PSJieXRlIix2b2lkKGwuYmFzZT0iZGVjaW1hbCIpKTp2b2lkKC0xPT09Yy5pbmRleE9mKCI6Iik/LTEh'@;
put 'PT1jLmluZGV4T2YoIm8iKSYmKGwub3V0cHV0PSJvcmRpbmFsIik6bC5vdXRwdXQ9InRpbWUiKTtsLm91dHB1dD0icGVyY2VudCJ9ZWxzZSBsLm91dHB1dD0iY3VycmVuY3kifShjLGwpLGZ1bmN0aW9uIHRvdChjLGwpe2xldCBhPWMubWF0Y2goL1sxLTldK1swLTldKi8pO2EmJihsLnRvdGFs'@;
put 'TGVuZ3RoPSthWzBdKX0oYyxsKSxmdW5jdGlvbiBub3QoYyxsKXtsZXQgZD1jLnNwbGl0KCIuIilbMF0ubWF0Y2goLzArLyk7ZCYmKGwuY2hhcmFjdGVyaXN0aWM9ZFswXS5sZW5ndGgpfShjLGwpLGZ1bmN0aW9uIGxvdChjLGwpe2lmKC0xIT09Yy5pbmRleE9mKCIuIikpe2xldCBhPWMuc3Bs'@;
put 'aXQoIi4iKVswXTtsLm9wdGlvbmFsQ2hhcmFjdGVyaXN0aWM9LTE9PT1hLmluZGV4T2YoIjAiKX19KGMsbCksZnVuY3Rpb24gYW90KGMsbCl7LTEhPT1jLmluZGV4T2YoImEiKSYmKGwuYXZlcmFnZT0hMCl9KGMsbCksZnVuY3Rpb24gb290KGMsbCl7LTEhPT1jLmluZGV4T2YoIksiKT9sLmZv'@;
put 'cmNlQXZlcmFnZT0idGhvdXNhbmQiOi0xIT09Yy5pbmRleE9mKCJNIik/bC5mb3JjZUF2ZXJhZ2U9Im1pbGxpb24iOi0xIT09Yy5pbmRleE9mKCJCIik/bC5mb3JjZUF2ZXJhZ2U9ImJpbGxpb24iOi0xIT09Yy5pbmRleE9mKCJUIikmJihsLmZvcmNlQXZlcmFnZT0idHJpbGxpb24iKX0oYyxs'@;
put 'KSxmdW5jdGlvbiByb3QoYyxsKXtsZXQgYT1jLnNwbGl0KCIuIilbMV07aWYoYSl7bGV0IGQ9YS5tYXRjaCgvMCsvKTtkJiYobC5tYW50aXNzYT1kWzBdLmxlbmd0aCl9fShjLGwpLGZ1bmN0aW9uIHNvdChjLGwpe2MubWF0Y2goL1xbXC5dLyk/bC5vcHRpb25hbE1hbnRpc3NhPSEwOmMubWF0'@;
put 'Y2goL1wuLykmJihsLm9wdGlvbmFsTWFudGlzc2E9ITEpfShjLGwpLGZ1bmN0aW9uIGlvdChjLGwpe2NvbnN0IGE9Yy5zcGxpdCgiLiIpWzFdO2EmJihsLnRyaW1NYW50aXNzYT0tMSE9PWEuaW5kZXhPZigiWyIpKX0oYyxsKSxmdW5jdGlvbiBRYXQoYyxsKXstMSE9PWMuaW5kZXhPZigiLCIp'@;
put 'JiYobC50aG91c2FuZFNlcGFyYXRlZD0hMCl9KGMsbCksZnVuY3Rpb24gZW90KGMsbCl7LTEhPT1jLmluZGV4T2YoIiAiKSYmKGwuc3BhY2VTZXBhcmF0ZWQ9ITAsbC5zcGFjZVNlcGFyYXRlZEN1cnJlbmN5PSEwLChsLmF2ZXJhZ2V8fGwuZm9yY2VBdmVyYWdlKSYmKGwuc3BhY2VTZXBhcmF0'@;
put 'ZWRBYmJyZXZpYXRpb249ITApKX0oYyxsKSxmdW5jdGlvbiBjb3QoYyxsKXtjLm1hdGNoKC9eXCs/XChbXildKlwpJC8pJiYobC5uZWdhdGl2ZT0icGFyZW50aGVzaXMiKSxjLm1hdGNoKC9eXCs/LS8pJiYobC5uZWdhdGl2ZT0ic2lnbiIpfShjLGwpLGZ1bmN0aW9uIHVvdChjLGwpe2MubWF0'@;
put 'Y2goL15cKy8pJiYobC5mb3JjZVNpZ249ITApfShjLGwpLGwpfX07ZnVuY3Rpb24gckooKXtpZihsNGUpcmV0dXJuIG5KO2w0ZT0xO2NvbnN0IGM9ZnVuY3Rpb24gS2F0KCl7cmV0dXJuIGk0ZXx8KGk0ZT0xLFhYPXtsYW5ndWFnZVRhZzoiZW4tVVMiLGRlbGltaXRlcnM6e3Rob3VzYW5kczoi'@;
put 'LCIsZGVjaW1hbDoiLiJ9LGFiYnJldmlhdGlvbnM6e3Rob3VzYW5kOiJrIixtaWxsaW9uOiJtIixiaWxsaW9uOiJiIix0cmlsbGlvbjoidCJ9LHNwYWNlU2VwYXJhdGVkOiExLG9yZGluYWw6ZnVuY3Rpb24oYyl7bGV0IGw9YyUxMDtyZXR1cm4gMT09fn4oYyUxMDAvMTApPyJ0aCI6MT09PWw/'@;
put 'InN0IjoyPT09bD8ibmQiOjM9PT1sPyJyZCI6InRoIn0sYnl0ZXM6e2JpbmFyeVN1ZmZpeGVzOlsiQiIsIktpQiIsIk1pQiIsIkdpQiIsIlRpQiIsIlBpQiIsIkVpQiIsIlppQiIsIllpQiJdLGRlY2ltYWxTdWZmaXhlczpbIkIiLCJLQiIsIk1CIiwiR0IiLCJUQiIsIlBCIiwiRUIiLCJaQiIs'@;
put 'IllCIl19LGN1cnJlbmN5OntzeW1ib2w6IiQiLHBvc2l0aW9uOiJwcmVmaXgiLGNvZGU6IlVTRCJ9LGN1cnJlbmN5Rm9ybWF0Ont0aG91c2FuZFNlcGFyYXRlZDohMCx0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLHNwYWNlU2VwYXJhdGVkQ3VycmVuY3k6ITB9LGZvcm1hdHM6e2Zv'@;
put 'dXJEaWdpdHM6e3RvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLHRob3VzYW5kU2VwYXJhdGVkOiEwLG1hbnRpc3NhOjJ9LGZ1bGxXaXRoVHdvRGVjaW1hbHNOb0N1cnJlbmN5Ont0aG91c2FuZFNlcGFyYXRlZDoh'@;
put 'MCxtYW50aXNzYToyfSxmdWxsV2l0aE5vRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLHRob3VzYW5kU2VwYXJhdGVkOiEwLG1hbnRpc3NhOjB9fX0pLFhYfSgpLGw9ZUooKSxhPXRKO2xldCBoLGQ9e30sZj17fSx2PW51bGwsTT17fTtmdW5jdGlvbiBEKHJlKXtoPXJlfWZ1bmN0aW9uIFoo'@;
put 'KXtyZXR1cm4gZltoXX1yZXR1cm4gZC5sYW5ndWFnZXM9KCk9Pk9iamVjdC5hc3NpZ24oe30sZiksZC5jdXJyZW50TGFuZ3VhZ2U9KCk9PmgsZC5jdXJyZW50Qnl0ZXM9KCk9PlooKS5ieXRlc3x8e30sZC5jdXJyZW50Q3VycmVuY3k9KCk9PlooKS5jdXJyZW5jeSxkLmN1cnJlbnRBYmJyZXZp'@;
put 'YXRpb25zPSgpPT5aKCkuYWJicmV2aWF0aW9ucyxkLmN1cnJlbnREZWxpbWl0ZXJzPSgpPT5aKCkuZGVsaW1pdGVycyxkLmN1cnJlbnRPcmRpbmFsPSgpPT5aKCkub3JkaW5hbCxkLmN1cnJlbnREZWZhdWx0cz0oKT0+T2JqZWN0LmFzc2lnbih7fSxaKCkuZGVmYXVsdHMsTSksZC5jdXJyZW50'@;
put 'T3JkaW5hbERlZmF1bHRGb3JtYXQ9KCk9Pk9iamVjdC5hc3NpZ24oe30sZC5jdXJyZW50RGVmYXVsdHMoKSxaKCkub3JkaW5hbEZvcm1hdCksZC5jdXJyZW50Qnl0ZURlZmF1bHRGb3JtYXQ9KCk9Pk9iamVjdC5hc3NpZ24oe30sZC5jdXJyZW50RGVmYXVsdHMoKSxaKCkuYnl0ZUZvcm1hdCks'@;
put 'ZC5jdXJyZW50UGVyY2VudGFnZURlZmF1bHRGb3JtYXQ9KCk9Pk9iamVjdC5hc3NpZ24oe30sZC5jdXJyZW50RGVmYXVsdHMoKSxaKCkucGVyY2VudGFnZUZvcm1hdCksZC5jdXJyZW50Q3VycmVuY3lEZWZhdWx0Rm9ybWF0PSgpPT5PYmplY3QuYXNzaWduKHt9LGQuY3VycmVudERlZmF1bHRz'@;
put 'KCksWigpLmN1cnJlbmN5Rm9ybWF0KSxkLmN1cnJlbnRUaW1lRGVmYXVsdEZvcm1hdD0oKT0+T2JqZWN0LmFzc2lnbih7fSxkLmN1cnJlbnREZWZhdWx0cygpLFooKS50aW1lRm9ybWF0KSxkLnNldERlZmF1bHRzPXJlPT57cmU9YS5wYXJzZUZvcm1hdChyZSksbC52YWxpZGF0ZUZvcm1hdChy'@;
put 'ZSkmJihNPXJlKX0sZC5nZXRaZXJvRm9ybWF0PSgpPT52LGQuc2V0WmVyb0Zvcm1hdD1yZT0+dj0ic3RyaW5nIj09dHlwZW9mIHJlP3JlOm51bGwsZC5oYXNaZXJvRm9ybWF0PSgpPT5udWxsIT09dixkLmxhbmd1YWdlRGF0YT1yZT0+e2lmKHJlKXtpZihmW3JlXSlyZXR1cm4gZltyZV07dGhy'@;
put 'b3cgbmV3IEVycm9yKGBVbmtub3duIHRhZyAiJHtyZX0iYCl9cmV0dXJuIFooKX0sZC5yZWdpc3Rlckxhbmd1YWdlPShyZSxjZT0hMSk9PntpZighbC52YWxpZGF0ZUxhbmd1YWdlKHJlKSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgbGFuZ3VhZ2UgZGF0YSIpO2ZbcmUubGFuZ3VhZ2VUYWdd'@;
put 'PXJlLGNlJiZEKHJlLmxhbmd1YWdlVGFnKX0sZC5zZXRMYW5ndWFnZT0ocmUsY2U9Yy5sYW5ndWFnZVRhZyk9PntpZighZltyZV0pe2xldCBiZT1yZS5zcGxpdCgiLSIpWzBdLEVlPU9iamVjdC5rZXlzKGYpLmZpbmQoQmU9PkJlLnNwbGl0KCItIilbMF09PT1iZSk7cmV0dXJuIGZbRWVdP3Zv'@;
put 'aWQgRChFZSk6dm9pZCBEKGNlKX1EKHJlKX0sZC5yZWdpc3Rlckxhbmd1YWdlKGMpLGg9Yy5sYW5ndWFnZVRhZyxuSj1kfXZhciBjNGU9e2V4cG9ydHM6e319OyFmdW5jdGlvbihjKXshZnVuY3Rpb24obCl7dmFyIGEsZD0vXi0/KD86XGQrKD86XC5cZCopP3xcLlxkKykoPzplWystXT9cZCsp'@;
put 'PyQvaSxoPU1hdGguY2VpbCxmPU1hdGguZmxvb3Isdj0iW0JpZ051bWJlciBFcnJvcl0gIixNPXYrIk51bWJlciBwcmltaXRpdmUgaGFzIG1vcmUgdGhhbiAxNSBzaWduaWZpY2FudCBkaWdpdHM6ICIsRD0xZTE0LFo9MTQscmU9OTAwNzE5OTI1NDc0MDk5MSxjZT1bMSwxMCwxMDAsMWUzLDFl'@;
put 'NCwxZTUsMWU2LDFlNywxZTgsMWU5LDFlMTAsMWUxMSwxZTEyLDFlMTNdLGJlPTFlNyxFZT0xZTk7ZnVuY3Rpb24gcWUodG4pe3ZhciBNbj0wfHRuO3JldHVybiB0bj4wfHx0bj09PU1uP01uOk1uLTF9ZnVuY3Rpb24gcnQodG4pe2Zvcih2YXIgTW4sQ3IsR3I9MSxtcj10bi5sZW5ndGgsR249'@;
put 'dG5bMF0rIiI7R3I8bXI7KXtmb3IoTW49dG5bR3IrK10rIiIsQ3I9Wi1Nbi5sZW5ndGg7Q3ItLTtNbj0iMCIrTW4pO0duKz1Nbn1mb3IobXI9R24ubGVuZ3RoOzQ4PT09R24uY2hhckNvZGVBdCgtLW1yKTspO3JldHVybiBHbi5zbGljZSgwLG1yKzF8fDEpfWZ1bmN0aW9uIHB0KHRuLE1uKXt2'@;
put 'YXIgQ3IsR3IsbXI9dG4uYyxHbj1Nbi5jLGFpPXRuLnMsX2k9TW4ucyxPbj10bi5lLHpyPU1uLmU7aWYoIWFpfHwhX2kpcmV0dXJuIG51bGw7aWYoR3I9R24mJiFHblswXSwoQ3I9bXImJiFtclswXSl8fEdyKXJldHVybiBDcj9Hcj8wOi1faTphaTtpZihhaSE9X2kpcmV0dXJuIGFpO2lmKENy'@;
put 'PWFpPDAsR3I9T249PXpyLCFtcnx8IUduKXJldHVybiBHcj8wOiFtcl5Dcj8xOi0xO2lmKCFHcilyZXR1cm4gT24+enJeQ3I/MTotMTtmb3IoX2k9KE9uPW1yLmxlbmd0aCk8KHpyPUduLmxlbmd0aCk/T246enIsYWk9MDthaTxfaTthaSsrKWlmKG1yW2FpXSE9R25bYWldKXJldHVybiBtclth'@;
put 'aV0+R25bYWldXkNyPzE6LTE7cmV0dXJuIE9uPT16cj8wOk9uPnpyXkNyPzE6LTF9ZnVuY3Rpb24gZHQodG4sTW4sQ3IsR3Ipe2lmKHRuPE1ufHx0bj5Dcnx8dG4hPT1mKHRuKSl0aHJvdyBFcnJvcih2KyhHcnx8IkFyZ3VtZW50IikrKCJudW1iZXIiPT10eXBlb2YgdG4/dG48TW58fHRuPkNy'@;
put 'PyIgb3V0IG9mIHJhbmdlOiAiOiIgbm90IGFuIGludGVnZXI6ICI6IiBub3QgYSBwcmltaXRpdmUgbnVtYmVyOiAiKStTdHJpbmcodG4pKX1mdW5jdGlvbiBKdCh0bil7dmFyIE1uPXRuLmMubGVuZ3RoLTE7cmV0dXJuIHFlKHRuLmUvWik9PU1uJiZ0bi5jW01uXSUyIT0wfWZ1bmN0aW9uIHZu'@;
put 'KHRuLE1uKXtyZXR1cm4odG4ubGVuZ3RoPjE/dG4uY2hhckF0KDApKyIuIit0bi5zbGljZSgxKTp0bikrKE1uPDA/ImUiOiJlKyIpK01ufWZ1bmN0aW9uIENuKHRuLE1uLENyKXt2YXIgR3IsbXI7aWYoTW48MCl7Zm9yKG1yPUNyKyIuIjsrK01uO21yKz1Dcik7dG49bXIrdG59ZWxzZSBpZigr'@;
put 'K01uPihHcj10bi5sZW5ndGgpKXtmb3IobXI9Q3IsTW4tPUdyOy0tTW47bXIrPUNyKTt0bis9bXJ9ZWxzZSBNbjxHciYmKHRuPXRuLnNsaWNlKDAsTW4pKyIuIit0bi5zbGljZShNbikpO3JldHVybiB0bn1hPWZ1bmN0aW9uIEJlKHRuKXt2YXIgTW4sQ3IsR3Isb24seW4sbXI9SHQucHJvdG90'@;
put 'eXBlPXtjb25zdHJ1Y3RvcjpIdCx0b1N0cmluZzpudWxsLHZhbHVlT2Y6bnVsbH0sR249bmV3IEh0KDEpLGFpPTIwLF9pPTQsT249LTcsenI9MjEsSm49LTFlNyxJcj0xZTcsJHI9ITEsd2k9MSxlYT0wLGZhPXtwcmVmaXg6IiIsZ3JvdXBTaXplOjMsc2Vjb25kYXJ5R3JvdXBTaXplOjAsZ3Jv'@;
put 'dXBTZXBhcmF0b3I6IiwiLGRlY2ltYWxTZXBhcmF0b3I6Ii4iLGZyYWN0aW9uR3JvdXBTaXplOjAsZnJhY3Rpb25Hcm91cFNlcGFyYXRvcjoiXHhhMCIsc3VmZml4OiIifSx2dD0iMDEyMzQ1Njc4OWFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6IixOdD0hMDtmdW5jdGlvbiBIdChvbix5bil7'@;
put 'dmFyIHBuLHByLCRuLGRyLFVyLFpuLHNyLE5yLE1yPXRoaXM7aWYoIShNciBpbnN0YW5jZW9mIEh0KSlyZXR1cm4gbmV3IEh0KG9uLHluKTtpZihudWxsPT15bil7aWYob24mJiEwPT09b24uX2lzQmlnTnVtYmVyKXJldHVybiBNci5zPW9uLnMsdm9pZCghb24uY3x8b24uZT5Jcj9Nci5jPU1y'@;
put 'LmU9bnVsbDpvbi5lPEpuP01yLmM9W01yLmU9MF06KE1yLmU9b24uZSxNci5jPW9uLmMuc2xpY2UoKSkpO2lmKChabj0ibnVtYmVyIj09dHlwZW9mIG9uKSYmMCpvbj09MCl7aWYoTXIucz0xL29uPDA/KG9uPS1vbiwtMSk6MSxvbj09PX5+b24pe2Zvcihkcj0wLFVyPW9uO1VyPj0xMDtVci89'@;
put 'MTAsZHIrKyk7cmV0dXJuIHZvaWQoZHI+SXI/TXIuYz1Nci5lPW51bGw6KE1yLmU9ZHIsTXIuYz1bb25dKSl9TnI9U3RyaW5nKG9uKX1lbHNle2lmKCFkLnRlc3QoTnI9U3RyaW5nKG9uKSkpcmV0dXJuIEdyKE1yLE5yLFpuKTtNci5zPTQ1PT1Oci5jaGFyQ29kZUF0KDApPyhOcj1Oci5zbGlj'@;
put 'ZSgxKSwtMSk6MX0oZHI9TnIuaW5kZXhPZigiLiIpKT4tMSYmKE5yPU5yLnJlcGxhY2UoIi4iLCIiKSksKFVyPU5yLnNlYXJjaCgvZS9pKSk+MD8oZHI8MCYmKGRyPVVyKSxkcis9K05yLnNsaWNlKFVyKzEpLE5yPU5yLnN1YnN0cmluZygwLFVyKSk6ZHI8MCYmKGRyPU5yLmxlbmd0aCl9ZWxz'@;
put 'ZXtpZihkdCh5biwyLHZ0Lmxlbmd0aCwiQmFzZSIpLDEwPT15biYmTnQpcmV0dXJuIEhyKE1yPW5ldyBIdChvbiksYWkrTXIuZSsxLF9pKTtpZihOcj1TdHJpbmcob24pLFpuPSJudW1iZXIiPT10eXBlb2Ygb24pe2lmKDAqb24hPTApcmV0dXJuIEdyKE1yLE5yLFpuLHluKTtpZihNci5zPTEv'@;
put 'b248MD8oTnI9TnIuc2xpY2UoMSksLTEpOjEsSHQuREVCVUcmJk5yLnJlcGxhY2UoL14wXC4wKnxcLi8sIiIpLmxlbmd0aD4xNSl0aHJvdyBFcnJvcihNK29uKX1lbHNlIE1yLnM9NDU9PT1Oci5jaGFyQ29kZUF0KDApPyhOcj1Oci5zbGljZSgxKSwtMSk6MTtmb3IocG49dnQuc2xpY2UoMCx5'@;
put 'biksZHI9VXI9MCxzcj1Oci5sZW5ndGg7VXI8c3I7VXIrKylpZihwbi5pbmRleE9mKHByPU5yLmNoYXJBdChVcikpPDApe2lmKCIuIj09cHIpe2lmKFVyPmRyKXtkcj1zcjtjb250aW51ZX19ZWxzZSBpZighJG4mJihOcj09TnIudG9VcHBlckNhc2UoKSYmKE5yPU5yLnRvTG93ZXJDYXNlKCkp'@;
put 'fHxOcj09TnIudG9Mb3dlckNhc2UoKSYmKE5yPU5yLnRvVXBwZXJDYXNlKCkpKSl7JG49ITAsVXI9LTEsZHI9MDtjb250aW51ZX1yZXR1cm4gR3IoTXIsU3RyaW5nKG9uKSxabix5bil9Wm49ITEsKGRyPShOcj1DcihOcix5biwxMCxNci5zKSkuaW5kZXhPZigiLiIpKT4tMT9Ocj1Oci5yZXBs'@;
put 'YWNlKCIuIiwiIik6ZHI9TnIubGVuZ3RofWZvcihVcj0wOzQ4PT09TnIuY2hhckNvZGVBdChVcik7VXIrKyk7Zm9yKHNyPU5yLmxlbmd0aDs0OD09PU5yLmNoYXJDb2RlQXQoLS1zcik7KTtpZihOcj1Oci5zbGljZShVciwrK3NyKSl7aWYoc3ItPVVyLFpuJiZIdC5ERUJVRyYmc3I+MTUmJihv'@;
put 'bj5yZXx8b24hPT1mKG9uKSkpdGhyb3cgRXJyb3IoTStNci5zKm9uKTtpZigoZHI9ZHItVXItMSk+SXIpTXIuYz1Nci5lPW51bGw7ZWxzZSBpZihkcjxKbilNci5jPVtNci5lPTBdO2Vsc2V7aWYoTXIuZT1kcixNci5jPVtdLFVyPShkcisxKSVaLGRyPDAmJihVcis9WiksVXI8c3Ipe2ZvcihV'@;
put 'ciYmTXIuYy5wdXNoKCtOci5zbGljZSgwLFVyKSksc3ItPVo7VXI8c3I7KU1yLmMucHVzaCgrTnIuc2xpY2UoVXIsVXIrPVopKTtVcj1aLShOcj1Oci5zbGljZShVcikpLmxlbmd0aH1lbHNlIFVyLT1zcjtmb3IoO1VyLS07TnIrPSIwIik7TXIuYy5wdXNoKCtOcil9fWVsc2UgTXIuYz1bTXIu'@;
put 'ZT0wXX1mdW5jdGlvbiBIbihvbix5bixwbixwcil7dmFyICRuLGRyLFVyLFpuLHNyO2lmKG51bGw9PXBuP3BuPV9pOmR0KHBuLDAsOCksIW9uLmMpcmV0dXJuIG9uLnRvU3RyaW5nKCk7aWYoJG49b24uY1swXSxVcj1vbi5lLG51bGw9PXluKXNyPXJ0KG9uLmMpLHNyPTE9PXByfHwyPT1wciYm'@;
put 'KFVyPD1Pbnx8VXI+PXpyKT92bihzcixVcik6Q24oc3IsVXIsIjAiKTtlbHNlIGlmKGRyPShvbj1IcihuZXcgSHQob24pLHluLHBuKSkuZSxabj0oc3I9cnQob24uYykpLmxlbmd0aCwxPT1wcnx8Mj09cHImJih5bjw9ZHJ8fGRyPD1Pbikpe2Zvcig7Wm48eW47c3IrPSIwIixabisrKTtzcj12'@;
put 'bihzcixkcil9ZWxzZSBpZih5bi09VXIsc3I9Q24oc3IsZHIsIjAiKSxkcisxPlpuKXtpZigtLXluPjApZm9yKHNyKz0iLiI7eW4tLTtzcis9IjAiKTt9ZWxzZSBpZigoeW4rPWRyLVpuKT4wKWZvcihkcisxPT1abiYmKHNyKz0iLiIpO3luLS07c3IrPSIwIik7cmV0dXJuIG9uLnM8MCYmJG4/'@;
put 'Ii0iK3NyOnNyfWZ1bmN0aW9uIHRyKG9uLHluKXtmb3IodmFyIHBuLHByLCRuPTEsZHI9bmV3IEh0KG9uWzBdKTskbjxvbi5sZW5ndGg7JG4rKykoIShwcj1uZXcgSHQob25bJG5dKSkuc3x8KHBuPXB0KGRyLHByKSk9PT15bnx8MD09PXBuJiZkci5zPT09eW4pJiYoZHI9cHIpO3JldHVybiBk'@;
put 'cn1mdW5jdGlvbiBhcihvbix5bixwbil7Zm9yKHZhciBwcj0xLCRuPXluLmxlbmd0aDsheW5bLS0kbl07eW4ucG9wKCkpO2Zvcigkbj15blswXTskbj49MTA7JG4vPTEwLHByKyspO3JldHVybihwbj1wcitwbipaLTEpPklyP29uLmM9b24uZT1udWxsOnBuPEpuP29uLmM9W29uLmU9MF06KG9u'@;
put 'LmU9cG4sb24uYz15biksb259ZnVuY3Rpb24gSHIob24seW4scG4scHIpe3ZhciAkbixkcixVcixabixzcixOcixNcixacj1vbi5jLGFhPWNlO2lmKFpyKXtlOntmb3IoJG49MSxabj1aclswXTtabj49MTA7Wm4vPTEwLCRuKyspO2lmKChkcj15bi0kbik8MClkcis9Wixzcj1acltOcj0wXSxN'@;
put 'cj1mKHNyL2FhWyRuLShVcj15biktMV0lMTApO2Vsc2UgaWYoKE5yPWgoKGRyKzEpL1opKT49WnIubGVuZ3RoKXtpZighcHIpYnJlYWsgZTtmb3IoO1pyLmxlbmd0aDw9TnI7WnIucHVzaCgwKSk7c3I9TXI9MCwkbj0xLFVyPShkciU9WiktWisxfWVsc2V7Zm9yKHNyPVpuPVpyW05yXSwkbj0x'@;
put 'O1puPj0xMDtabi89MTAsJG4rKyk7TXI9KFVyPShkciU9WiktWiskbik8MD8wOmYoc3IvYWFbJG4tVXItMV0lMTApfWlmKHByPXByfHx5bjwwfHxudWxsIT1acltOcisxXXx8KFVyPDA/c3I6c3IlYWFbJG4tVXItMV0pLHByPXBuPDQ/KE1yfHxwcikmJigwPT1wbnx8cG49PShvbi5zPDA/Mzoy'@;
put 'KSk6TXI+NXx8NT09TXImJig0PT1wbnx8cHJ8fDY9PXBuJiYoZHI+MD9Vcj4wP3NyL2FhWyRuLVVyXTowOlpyW05yLTFdKSUxMCYxfHxwbj09KG9uLnM8MD84OjcpKSx5bjwxfHwhWnJbMF0pcmV0dXJuIFpyLmxlbmd0aD0wLHByPyhaclswXT1hYVsoWi0oeW4tPW9uLmUrMSklWiklWl0sb24u'@;
put 'ZT0teW58fDApOlpyWzBdPW9uLmU9MCxvbjtpZigwPT1kcj8oWnIubGVuZ3RoPU5yLFpuPTEsTnItLSk6KFpyLmxlbmd0aD1OcisxLFpuPWFhW1otZHJdLFpyW05yXT1Vcj4wP2Yoc3IvYWFbJG4tVXJdJWFhW1VyXSkqWm46MCkscHIpZm9yKDs7KXtpZigwPT1Ocil7Zm9yKGRyPTEsVXI9WnJb'@;
put 'MF07VXI+PTEwO1VyLz0xMCxkcisrKTtmb3IoVXI9WnJbMF0rPVpuLFpuPTE7VXI+PTEwO1VyLz0xMCxabisrKTtkciE9Wm4mJihvbi5lKyssWnJbMF09PUQmJihaclswXT0xKSk7YnJlYWt9aWYoWnJbTnJdKz1abixacltOcl0hPUQpYnJlYWs7WnJbTnItLV09MCxabj0xfWZvcihkcj1aci5s'@;
put 'ZW5ndGg7MD09PVpyWy0tZHJdO1pyLnBvcCgpKTt9b24uZT5Jcj9vbi5jPW9uLmU9bnVsbDpvbi5lPEpuJiYob24uYz1bb24uZT0wXSl9cmV0dXJuIG9ufWZ1bmN0aW9uIHFyKG9uKXt2YXIgeW4scG49b24uZTtyZXR1cm4gbnVsbD09PXBuP29uLnRvU3RyaW5nKCk6KHluPXJ0KG9uLmMpLHlu'@;
put 'PXBuPD1Pbnx8cG4+PXpyP3ZuKHluLHBuKTpDbih5bixwbiwiMCIpLG9uLnM8MD8iLSIreW46eW4pfXJldHVybiBIdC5jbG9uZT1CZSxIdC5ST1VORF9VUD0wLEh0LlJPVU5EX0RPV049MSxIdC5ST1VORF9DRUlMPTIsSHQuUk9VTkRfRkxPT1I9MyxIdC5ST1VORF9IQUxGX1VQPTQsSHQuUk9V'@;
put 'TkRfSEFMRl9ET1dOPTUsSHQuUk9VTkRfSEFMRl9FVkVOPTYsSHQuUk9VTkRfSEFMRl9DRUlMPTcsSHQuUk9VTkRfSEFMRl9GTE9PUj04LEh0LkVVQ0xJRD05LEh0LmNvbmZpZz1IdC5zZXQ9ZnVuY3Rpb24ob24pe3ZhciB5bixwbjtpZihudWxsIT1vbil7aWYoIm9iamVjdCIhPXR5cGVvZiBv'@;
put 'bil0aHJvdyBFcnJvcih2KyJPYmplY3QgZXhwZWN0ZWQ6ICIrb24pO2lmKG9uLmhhc093blByb3BlcnR5KHluPSJERUNJTUFMX1BMQUNFUyIpJiYoZHQocG49b25beW5dLDAsRWUseW4pLGFpPXBuKSxvbi5oYXNPd25Qcm9wZXJ0eSh5bj0iUk9VTkRJTkdfTU9ERSIpJiYoZHQocG49b25beW5d'@;
put 'LDAsOCx5biksX2k9cG4pLG9uLmhhc093blByb3BlcnR5KHluPSJFWFBPTkVOVElBTF9BVCIpJiYoKHBuPW9uW3luXSkmJnBuLnBvcD8oZHQocG5bMF0sLUVlLDAseW4pLGR0KHBuWzFdLDAsRWUseW4pLE9uPXBuWzBdLHpyPXBuWzFdKTooZHQocG4sLUVlLEVlLHluKSxPbj0tKHpyPXBuPDA/'@;
put 'LXBuOnBuKSkpLG9uLmhhc093blByb3BlcnR5KHluPSJSQU5HRSIpKWlmKChwbj1vblt5bl0pJiZwbi5wb3ApZHQocG5bMF0sLUVlLC0xLHluKSxkdChwblsxXSwxLEVlLHluKSxKbj1wblswXSxJcj1wblsxXTtlbHNle2lmKGR0KHBuLC1FZSxFZSx5biksIXBuKXRocm93IEVycm9yKHYreW4r'@;
put 'IiBjYW5ub3QgYmUgemVybzogIitwbik7Sm49LShJcj1wbjwwPy1wbjpwbil9aWYob24uaGFzT3duUHJvcGVydHkoeW49IkNSWVBUTyIpKXtpZigocG49b25beW5dKSE9PSEhcG4pdGhyb3cgRXJyb3Iodit5bisiIG5vdCB0cnVlIG9yIGZhbHNlOiAiK3BuKTtpZihwbil7aWYoISh0eXBlb2Yg'@;
put 'Y3J5cHRvPCJ1IiYmY3J5cHRvJiYoY3J5cHRvLmdldFJhbmRvbVZhbHVlc3x8Y3J5cHRvLnJhbmRvbUJ5dGVzKSkpdGhyb3cgJHI9IXBuLEVycm9yKHYrImNyeXB0byB1bmF2YWlsYWJsZSIpOyRyPXBufWVsc2UgJHI9cG59aWYob24uaGFzT3duUHJvcGVydHkoeW49Ik1PRFVMT19NT0RFIikm'@;
put 'JihkdChwbj1vblt5bl0sMCw5LHluKSx3aT1wbiksb24uaGFzT3duUHJvcGVydHkoeW49IlBPV19QUkVDSVNJT04iKSYmKGR0KHBuPW9uW3luXSwwLEVlLHluKSxlYT1wbiksb24uaGFzT3duUHJvcGVydHkoeW49IkZPUk1BVCIpKXtpZigib2JqZWN0IiE9dHlwZW9mKHBuPW9uW3luXSkpdGhy'@;
put 'b3cgRXJyb3Iodit5bisiIG5vdCBhbiBvYmplY3Q6ICIrcG4pO2ZhPXBufWlmKG9uLmhhc093blByb3BlcnR5KHluPSJBTFBIQUJFVCIpKXtpZigic3RyaW5nIiE9dHlwZW9mKHBuPW9uW3luXSl8fC9eLj8kfFsrXC0uXHNdfCguKS4qXDEvLnRlc3QocG4pKXRocm93IEVycm9yKHYreW4rIiBp'@;
put 'bnZhbGlkOiAiK3BuKTtOdD0iMDEyMzQ1Njc4OSI9PXBuLnNsaWNlKDAsMTApLHZ0PXBufX1yZXR1cm57REVDSU1BTF9QTEFDRVM6YWksUk9VTkRJTkdfTU9ERTpfaSxFWFBPTkVOVElBTF9BVDpbT24senJdLFJBTkdFOltKbixJcl0sQ1JZUFRPOiRyLE1PRFVMT19NT0RFOndpLFBPV19QUkVD'@;
put 'SVNJT046ZWEsRk9STUFUOmZhLEFMUEhBQkVUOnZ0fX0sSHQuaXNCaWdOdW1iZXI9ZnVuY3Rpb24ob24pe2lmKCFvbnx8ITAhPT1vbi5faXNCaWdOdW1iZXIpcmV0dXJuITE7aWYoIUh0LkRFQlVHKXJldHVybiEwO3ZhciB5bixwbixwcj1vbi5jLCRuPW9uLmUsZHI9b24ucztlOmlmKCJbb2Jq'@;
put 'ZWN0IEFycmF5XSI9PXt9LnRvU3RyaW5nLmNhbGwocHIpKXtpZigoMT09PWRyfHwtMT09PWRyKSYmJG4+PS1FZSYmJG48PUVlJiYkbj09PWYoJG4pKXtpZigwPT09cHJbMF0pe2lmKDA9PT0kbiYmMT09PXByLmxlbmd0aClyZXR1cm4hMDticmVhayBlfWlmKCh5bj0oJG4rMSklWik8MSYmKHlu'@;
put 'Kz1aKSxTdHJpbmcocHJbMF0pLmxlbmd0aD09eW4pe2Zvcih5bj0wO3luPHByLmxlbmd0aDt5bisrKWlmKChwbj1wclt5bl0pPDB8fHBuPj1EfHxwbiE9PWYocG4pKWJyZWFrIGU7aWYoMCE9PXBuKXJldHVybiEwfX19ZWxzZSBpZihudWxsPT09cHImJm51bGw9PT0kbiYmKG51bGw9PT1kcnx8'@;
put 'MT09PWRyfHwtMT09PWRyKSlyZXR1cm4hMDt0aHJvdyBFcnJvcih2KyJJbnZhbGlkIEJpZ051bWJlcjogIitvbil9LEh0Lm1heGltdW09SHQubWF4PWZ1bmN0aW9uKCl7cmV0dXJuIHRyKGFyZ3VtZW50cywtMSl9LEh0Lm1pbmltdW09SHQubWluPWZ1bmN0aW9uKCl7cmV0dXJuIHRyKGFyZ3Vt'@;
put 'ZW50cywxKX0sSHQucmFuZG9tPShvbj05MDA3MTk5MjU0NzQwOTkyLHluPU1hdGgucmFuZG9tKCkqb24mMjA5NzE1MT9mdW5jdGlvbigpe3JldHVybiBmKE1hdGgucmFuZG9tKCkqb24pfTpmdW5jdGlvbigpe3JldHVybiA4Mzg4NjA4KigxMDczNzQxODI0Kk1hdGgucmFuZG9tKCl8MCkrKDgz'@;
put 'ODg2MDgqTWF0aC5yYW5kb20oKXwwKX0sZnVuY3Rpb24ocG4pe3ZhciBwciwkbixkcixVcixabixzcj0wLE5yPVtdLE1yPW5ldyBIdChHbik7aWYobnVsbD09cG4/cG49YWk6ZHQocG4sMCxFZSksVXI9aChwbi9aKSwkcilpZihjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKXtmb3IocHI9Y3J5cHRv'@;
put 'LmdldFJhbmRvbVZhbHVlcyhuZXcgVWludDMyQXJyYXkoVXIqPTIpKTtzcjxVcjspKFpuPTEzMTA3Mipwcltzcl0rKHByW3NyKzFdPj4+MTEpKT49OWUxNT8oJG49Y3J5cHRvLmdldFJhbmRvbVZhbHVlcyhuZXcgVWludDMyQXJyYXkoMikpLHByW3NyXT0kblswXSxwcltzcisxXT0kblsxXSk6'@;
put 'KE5yLnB1c2goWm4lMWUxNCksc3IrPTIpO3NyPVVyLzJ9ZWxzZXtpZighY3J5cHRvLnJhbmRvbUJ5dGVzKXRocm93ICRyPSExLEVycm9yKHYrImNyeXB0byB1bmF2YWlsYWJsZSIpO2Zvcihwcj1jcnlwdG8ucmFuZG9tQnl0ZXMoVXIqPTcpO3NyPFVyOykoWm49MjgxNDc0OTc2NzEwNjU2Kigz'@;
put 'MSZwcltzcl0pKzEwOTk1MTE2Mjc3NzYqcHJbc3IrMV0rNDI5NDk2NzI5NipwcltzcisyXSsxNjc3NzIxNipwcltzciszXSsocHJbc3IrNF08PDE2KSsocHJbc3IrNV08PDgpK3ByW3NyKzZdKT49OWUxNT9jcnlwdG8ucmFuZG9tQnl0ZXMoNykuY29weShwcixzcik6KE5yLnB1c2goWm4lMWUx'@;
put 'NCksc3IrPTcpO3NyPVVyLzd9aWYoISRyKWZvcig7c3I8VXI7KShabj15bigpKTw5ZTE1JiYoTnJbc3IrK109Wm4lMWUxNCk7Zm9yKFVyPU5yWy0tc3JdLHBuJT1aLFVyJiZwbiYmKE5yW3NyXT1mKFVyLyhabj1jZVtaLXBuXSkpKlpuKTswPT09TnJbc3JdO05yLnBvcCgpLHNyLS0pO2lmKHNy'@;
put 'PDApTnI9W2RyPTBdO2Vsc2V7Zm9yKGRyPS0xOzA9PT1OclswXTtOci5zcGxpY2UoMCwxKSxkci09Wik7Zm9yKHNyPTEsWm49TnJbMF07Wm4+PTEwO1puLz0xMCxzcisrKTtzcjxaJiYoZHItPVotc3IpfXJldHVybiBNci5lPWRyLE1yLmM9TnIsTXJ9KSxIdC5zdW09ZnVuY3Rpb24oKXtmb3Io'@;
put 'dmFyIG9uPTEseW49YXJndW1lbnRzLHBuPW5ldyBIdCh5blswXSk7b248eW4ubGVuZ3RoOylwbj1wbi5wbHVzKHluW29uKytdKTtyZXR1cm4gcG59LENyPWZ1bmN0aW9uKCl7dmFyIG9uPSIwMTIzNDU2Nzg5IjtmdW5jdGlvbiB5bihwbixwciwkbixkcil7Zm9yKHZhciBVcixzcixabj1bMF0s'@;
put 'TnI9MCxNcj1wbi5sZW5ndGg7TnI8TXI7KXtmb3Ioc3I9Wm4ubGVuZ3RoO3NyLS07Wm5bc3JdKj1wcik7Zm9yKFpuWzBdKz1kci5pbmRleE9mKHBuLmNoYXJBdChOcisrKSksVXI9MDtVcjxabi5sZW5ndGg7VXIrKylabltVcl0+JG4tMSYmKG51bGw9PVpuW1VyKzFdJiYoWm5bVXIrMV09MCks'@;
put 'Wm5bVXIrMV0rPVpuW1VyXS8kbnwwLFpuW1VyXSU9JG4pfXJldHVybiBabi5yZXZlcnNlKCl9cmV0dXJuIGZ1bmN0aW9uKHBuLHByLCRuLGRyLFVyKXt2YXIgWm4sc3IsTnIsTXIsWnIsYWEsQmEsSW8sWm89cG4uaW5kZXhPZigiLiIpLHBzPWFpLE1vPV9pO2Zvcihabz49MCYmKE1yPWVhLGVh'@;
put 'PTAscG49cG4ucmVwbGFjZSgiLiIsIiIpLGFhPShJbz1uZXcgSHQocHIpKS5wb3cocG4ubGVuZ3RoLVpvKSxlYT1NcixJby5jPXluKENuKHJ0KGFhLmMpLGFhLmUsIjAiKSwxMCwkbixvbiksSW8uZT1Jby5jLmxlbmd0aCksTnI9TXI9KEJhPXluKHBuLHByLCRuLFVyPyhabj12dCxvbik6KFpu'@;
put 'PW9uLHZ0KSkpLmxlbmd0aDswPT1CYVstLU1yXTtCYS5wb3AoKSk7aWYoIUJhWzBdKXJldHVybiBabi5jaGFyQXQoMCk7aWYoWm88MD8tLU5yOihhYS5jPUJhLGFhLmU9TnIsYWEucz1kcixCYT0oYWE9TW4oYWEsSW8scHMsTW8sJG4pKS5jLFpyPWFhLnIsTnI9YWEuZSksWm89QmFbc3I9TnIr'@;
put 'cHMrMV0sTXI9JG4vMixacj1acnx8c3I8MHx8bnVsbCE9QmFbc3IrMV0sWnI9TW88ND8obnVsbCE9Wm98fFpyKSYmKDA9PU1vfHxNbz09KGFhLnM8MD8zOjIpKTpabz5Ncnx8Wm89PU1yJiYoND09TW98fFpyfHw2PT1NbyYmMSZCYVtzci0xXXx8TW89PShhYS5zPDA/ODo3KSksc3I8MXx8IUJh'@;
put 'WzBdKXBuPVpyP0NuKFpuLmNoYXJBdCgxKSwtcHMsWm4uY2hhckF0KDApKTpabi5jaGFyQXQoMCk7ZWxzZXtpZihCYS5sZW5ndGg9c3IsWnIpZm9yKC0tJG47KytCYVstLXNyXT4kbjspQmFbc3JdPTAsc3J8fCgrK05yLEJhPVsxXS5jb25jYXQoQmEpKTtmb3IoTXI9QmEubGVuZ3RoOyFCYVst'@;
put 'LU1yXTspO2Zvcihabz0wLHBuPSIiO1pvPD1Ncjtwbis9Wm4uY2hhckF0KEJhW1pvKytdKSk7cG49Q24ocG4sTnIsWm4uY2hhckF0KDApKX1yZXR1cm4gcG59fSgpLE1uPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gb24ocHIsJG4sZHIpe3ZhciBVcixabixzcixOcixNcj0wLFpyPXByLmxlbmd0aCxh'@;
put 'YT0kbiViZSxCYT0kbi9iZXwwO2Zvcihwcj1wci5zbGljZSgpO1pyLS07KU1yPSgoWm49YWEqKHNyPXByW1pyXSViZSkrKFVyPUJhKnNyKyhOcj1wcltacl0vYmV8MCkqYWEpJWJlKmJlK01yKS9kcnwwKSsoVXIvYmV8MCkrQmEqTnIscHJbWnJdPVpuJWRyO3JldHVybiBNciYmKHByPVtNcl0u'@;
put 'Y29uY2F0KHByKSkscHJ9ZnVuY3Rpb24geW4ocHIsJG4sZHIsVXIpe3ZhciBabixzcjtpZihkciE9VXIpc3I9ZHI+VXI/MTotMTtlbHNlIGZvcihabj1zcj0wO1puPGRyO1puKyspaWYocHJbWm5dIT0kbltabl0pe3NyPXByW1puXT4kbltabl0/MTotMTticmVha31yZXR1cm4gc3J9ZnVuY3Rp'@;
put 'b24gcG4ocHIsJG4sZHIsVXIpe2Zvcih2YXIgWm49MDtkci0tOylwcltkcl0tPVpuLHByW2RyXT0oWm49cHJbZHJdPCRuW2RyXT8xOjApKlVyK3ByW2RyXS0kbltkcl07Zm9yKDshcHJbMF0mJnByLmxlbmd0aD4xO3ByLnNwbGljZSgwLDEpKTt9cmV0dXJuIGZ1bmN0aW9uKHByLCRuLGRyLFVy'@;
put 'LFpuKXt2YXIgc3IsTnIsTXIsWnIsYWEsQmEsSW8sWm8scHMsTW8saHMsbmMsUW8sTTMsYWQsVXMsSmMscXM9cHIucz09JG4ucz8xOi0xLEJsPXByLmMsZXM9JG4uYztpZighKEJsJiZCbFswXSYmZXMmJmVzWzBdKSlyZXR1cm4gbmV3IEh0KHByLnMmJiRuLnMmJihCbD8hZXN8fEJsWzBdIT1l'@;
put 'c1swXTplcyk/QmwmJjA9PUJsWzBdfHwhZXM/MCpxczpxcy8wOk5hTik7Zm9yKHBzPShabz1uZXcgSHQocXMpKS5jPVtdLHFzPWRyKyhOcj1wci5lLSRuLmUpKzEsWm58fChabj1ELE5yPXFlKHByLmUvWiktcWUoJG4uZS9aKSxxcz1xcy9afDApLE1yPTA7ZXNbTXJdPT0oQmxbTXJdfHwwKTtN'@;
put 'cisrKTtpZihlc1tNcl0+KEJsW01yXXx8MCkmJk5yLS0scXM8MClwcy5wdXNoKDEpLFpyPSEwO2Vsc2V7Zm9yKE0zPUJsLmxlbmd0aCxVcz1lcy5sZW5ndGgsTXI9MCxxcys9MiwoYWE9Zihabi8oZXNbMF0rMSkpKT4xJiYoZXM9b24oZXMsYWEsWm4pLEJsPW9uKEJsLGFhLFpuKSxVcz1lcy5s'@;
put 'ZW5ndGgsTTM9QmwubGVuZ3RoKSxRbz1Vcyxocz0oTW89Qmwuc2xpY2UoMCxVcykpLmxlbmd0aDtoczxVcztNb1tocysrXT0wKTtKYz1lcy5zbGljZSgpLEpjPVswXS5jb25jYXQoSmMpLGFkPWVzWzBdLGVzWzFdPj1abi8yJiZhZCsrO2Rve2lmKGFhPTAsKHNyPXluKGVzLE1vLFVzLGhzKSk8'@;
put 'MCl7aWYobmM9TW9bMF0sVXMhPWhzJiYobmM9bmMqWm4rKE1vWzFdfHwwKSksKGFhPWYobmMvYWQpKT4xKWZvcihhYT49Wm4mJihhYT1abi0xKSxJbz0oQmE9b24oZXMsYWEsWm4pKS5sZW5ndGgsaHM9TW8ubGVuZ3RoOzE9PXluKEJhLE1vLElvLGhzKTspYWEtLSxwbihCYSxVczxJbz9KYzpl'@;
put 'cyxJbyxabiksSW89QmEubGVuZ3RoLHNyPTE7ZWxzZSAwPT1hYSYmKHNyPWFhPTEpLElvPShCYT1lcy5zbGljZSgpKS5sZW5ndGg7aWYoSW88aHMmJihCYT1bMF0uY29uY2F0KEJhKSkscG4oTW8sQmEsaHMsWm4pLGhzPU1vLmxlbmd0aCwtMT09c3IpZm9yKDt5bihlcyxNbyxVcyxocyk8MTsp'@;
put 'YWErKyxwbihNbyxVczxocz9KYzplcyxocyxabiksaHM9TW8ubGVuZ3RofWVsc2UgMD09PXNyJiYoYWErKyxNbz1bMF0pO3BzW01yKytdPWFhLE1vWzBdP01vW2hzKytdPUJsW1FvXXx8MDooTW89W0JsW1FvXV0saHM9MSl9d2hpbGUoKFFvKys8TTN8fG51bGwhPU1vWzBdKSYmcXMtLSk7WnI9'@;
put 'bnVsbCE9TW9bMF0scHNbMF18fHBzLnNwbGljZSgwLDEpfWlmKFpuPT1EKXtmb3IoTXI9MSxxcz1wc1swXTtxcz49MTA7cXMvPTEwLE1yKyspO0hyKFpvLGRyKyhaby5lPU1yK05yKlotMSkrMSxVcixacil9ZWxzZSBaby5lPU5yLFpvLnI9K1pyO3JldHVybiBab319KCksR3I9ZnVuY3Rpb24o'@;
put 'KXt2YXIgb249L14oLT8pMChbeGJvXSkoPz1cd1tcdy5dKiQpL2kseW49L14oW14uXSspXC4kLyxwbj0vXlwuKFteLl0rKSQvLHByPS9eLT8oSW5maW5pdHl8TmFOKSQvLCRuPS9eXHMqXCsoPz1bXHcuXSl8XlxzK3xccyskL2c7cmV0dXJuIGZ1bmN0aW9uKGRyLFVyLFpuLHNyKXt2YXIgTnIs'@;
put 'TXI9Wm4/VXI6VXIucmVwbGFjZSgkbiwiIik7aWYocHIudGVzdChNcikpZHIucz1pc05hTihNcik/bnVsbDpNcjwwPy0xOjE7ZWxzZXtpZighWm4mJihNcj1Nci5yZXBsYWNlKG9uLGZ1bmN0aW9uKFpyLGFhLEJhKXtyZXR1cm4gTnI9IngiPT0oQmE9QmEudG9Mb3dlckNhc2UoKSk/MTY6ImIi'@;
put 'PT1CYT8yOjgsc3ImJnNyIT1Ocj9acjphYX0pLHNyJiYoTnI9c3IsTXI9TXIucmVwbGFjZSh5biwiJDEiKS5yZXBsYWNlKHBuLCIwLiQxIikpLFVyIT1NcikpcmV0dXJuIG5ldyBIdChNcixOcik7aWYoSHQuREVCVUcpdGhyb3cgRXJyb3IodisiTm90IGEiKyhzcj8iIGJhc2UgIitzcjoiIikr'@;
put 'IiBudW1iZXI6ICIrVXIpO2RyLnM9bnVsbH1kci5jPWRyLmU9bnVsbH19KCksbXIuYWJzb2x1dGVWYWx1ZT1tci5hYnM9ZnVuY3Rpb24oKXt2YXIgb249bmV3IEh0KHRoaXMpO3JldHVybiBvbi5zPDAmJihvbi5zPTEpLG9ufSxtci5jb21wYXJlZFRvPWZ1bmN0aW9uKG9uLHluKXtyZXR1cm4g'@;
put 'cHQodGhpcyxuZXcgSHQob24seW4pKX0sbXIuZGVjaW1hbFBsYWNlcz1tci5kcD1mdW5jdGlvbihvbix5bil7dmFyIHBuLHByLCRuO2lmKG51bGwhPW9uKXJldHVybiBkdChvbiwwLEVlKSxudWxsPT15bj95bj1faTpkdCh5biwwLDgpLEhyKG5ldyBIdCh0aGlzKSxvbit0aGlzLmUrMSx5bik7'@;
put 'aWYoIShwbj10aGlzLmMpKXJldHVybiBudWxsO2lmKHByPSgoJG49cG4ubGVuZ3RoLTEpLXFlKHRoaXMuZS9aKSkqWiwkbj1wblskbl0pZm9yKDskbiUxMD09MDskbi89MTAscHItLSk7cmV0dXJuIHByPDAmJihwcj0wKSxwcn0sbXIuZGl2aWRlZEJ5PW1yLmRpdj1mdW5jdGlvbihvbix5bil7'@;
put 'cmV0dXJuIE1uKHRoaXMsbmV3IEh0KG9uLHluKSxhaSxfaSl9LG1yLmRpdmlkZWRUb0ludGVnZXJCeT1tci5pZGl2PWZ1bmN0aW9uKG9uLHluKXtyZXR1cm4gTW4odGhpcyxuZXcgSHQob24seW4pLDAsMSl9LG1yLmV4cG9uZW50aWF0ZWRCeT1tci5wb3c9ZnVuY3Rpb24ob24seW4pe3ZhciBw'@;
put 'bixwciwkbixkcixabixzcixOcixNcixacj10aGlzO2lmKChvbj1uZXcgSHQob24pKS5jJiYhb24uaXNJbnRlZ2VyKCkpdGhyb3cgRXJyb3IodisiRXhwb25lbnQgbm90IGFuIGludGVnZXI6ICIrcXIob24pKTtpZihudWxsIT15biYmKHluPW5ldyBIdCh5bikpLFpuPW9uLmU+MTQsIVpyLmN8'@;
put 'fCFaci5jWzBdfHwxPT1aci5jWzBdJiYhWnIuZSYmMT09WnIuYy5sZW5ndGh8fCFvbi5jfHwhb24uY1swXSlyZXR1cm4gTXI9bmV3IEh0KE1hdGgucG93KCtxcihaciksWm4/b24ucyooMi1KdChvbikpOitxcihvbikpKSx5bj9Nci5tb2QoeW4pOk1yO2lmKHNyPW9uLnM8MCx5bil7aWYoeW4u'@;
put 'Yz8heW4uY1swXToheW4ucylyZXR1cm4gbmV3IEh0KE5hTik7KHByPSFzciYmWnIuaXNJbnRlZ2VyKCkmJnluLmlzSW50ZWdlcigpKSYmKFpyPVpyLm1vZCh5bikpfWVsc2V7aWYob24uZT45JiYoWnIuZT4wfHxaci5lPC0xfHwoMD09WnIuZT9aci5jWzBdPjF8fFpuJiZaci5jWzFdPj0yNGU3'@;
put 'OlpyLmNbMF08OGUxM3x8Wm4mJlpyLmNbMF08PTk5OTk5NzVlNykpKXJldHVybiBkcj1aci5zPDAmJkp0KG9uKT8tMDowLFpyLmU+LTEmJihkcj0xL2RyKSxuZXcgSHQoc3I/MS9kcjpkcik7ZWEmJihkcj1oKGVhL1orMikpfWZvcihabj8ocG49bmV3IEh0KC41KSxzciYmKG9uLnM9MSksTnI9'@;
put 'SnQob24pKTpOcj0oJG49TWF0aC5hYnMoK3FyKG9uKSkpJTIsTXI9bmV3IEh0KEduKTs7KXtpZihOcil7aWYoIShNcj1Nci50aW1lcyhacikpLmMpYnJlYWs7ZHI/TXIuYy5sZW5ndGg+ZHImJihNci5jLmxlbmd0aD1kcik6cHImJihNcj1Nci5tb2QoeW4pKX1pZigkbil7aWYoMD09PSgkbj1m'@;
put 'KCRuLzIpKSlicmVhaztOcj0kbiUyfWVsc2UgaWYoSHIob249b24udGltZXMocG4pLG9uLmUrMSwxKSxvbi5lPjE0KU5yPUp0KG9uKTtlbHNle2lmKDA9PSgkbj0rcXIob24pKSlicmVhaztOcj0kbiUyfVpyPVpyLnRpbWVzKFpyKSxkcj9aci5jJiZaci5jLmxlbmd0aD5kciYmKFpyLmMubGVu'@;
put 'Z3RoPWRyKTpwciYmKFpyPVpyLm1vZCh5bikpfXJldHVybiBwcj9Ncjooc3ImJihNcj1Hbi5kaXYoTXIpKSx5bj9Nci5tb2QoeW4pOmRyP0hyKE1yLGVhLF9pLHZvaWQgMCk6TXIpfSxtci5pbnRlZ2VyVmFsdWU9ZnVuY3Rpb24ob24pe3ZhciB5bj1uZXcgSHQodGhpcyk7cmV0dXJuIG51bGw9'@;
put 'PW9uP29uPV9pOmR0KG9uLDAsOCksSHIoeW4seW4uZSsxLG9uKX0sbXIuaXNFcXVhbFRvPW1yLmVxPWZ1bmN0aW9uKG9uLHluKXtyZXR1cm4gMD09PXB0KHRoaXMsbmV3IEh0KG9uLHluKSl9LG1yLmlzRmluaXRlPWZ1bmN0aW9uKCl7cmV0dXJuISF0aGlzLmN9LG1yLmlzR3JlYXRlclRoYW49'@;
put 'bXIuZ3Q9ZnVuY3Rpb24ob24seW4pe3JldHVybiBwdCh0aGlzLG5ldyBIdChvbix5bikpPjB9LG1yLmlzR3JlYXRlclRoYW5PckVxdWFsVG89bXIuZ3RlPWZ1bmN0aW9uKG9uLHluKXtyZXR1cm4gMT09PSh5bj1wdCh0aGlzLG5ldyBIdChvbix5bikpKXx8MD09PXlufSxtci5pc0ludGVnZXI9'@;
put 'ZnVuY3Rpb24oKXtyZXR1cm4hIXRoaXMuYyYmcWUodGhpcy5lL1opPnRoaXMuYy5sZW5ndGgtMn0sbXIuaXNMZXNzVGhhbj1tci5sdD1mdW5jdGlvbihvbix5bil7cmV0dXJuIHB0KHRoaXMsbmV3IEh0KG9uLHluKSk8MH0sbXIuaXNMZXNzVGhhbk9yRXF1YWxUbz1tci5sdGU9ZnVuY3Rpb24o'@;
put 'b24seW4pe3JldHVybi0xPT09KHluPXB0KHRoaXMsbmV3IEh0KG9uLHluKSkpfHwwPT09eW59LG1yLmlzTmFOPWZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMuc30sbXIuaXNOZWdhdGl2ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnM8MH0sbXIuaXNQb3NpdGl2ZT1mdW5jdGlvbigpe3JldHVybiB0'@;
put 'aGlzLnM+MH0sbXIuaXNaZXJvPWZ1bmN0aW9uKCl7cmV0dXJuISF0aGlzLmMmJjA9PXRoaXMuY1swXX0sbXIubWludXM9ZnVuY3Rpb24ob24seW4pe3ZhciBwbixwciwkbixkcixVcj10aGlzLFpuPVVyLnM7aWYoeW49KG9uPW5ldyBIdChvbix5bikpLnMsIVpufHwheW4pcmV0dXJuIG5ldyBI'@;
put 'dChOYU4pO2lmKFpuIT15bilyZXR1cm4gb24ucz0teW4sVXIucGx1cyhvbik7dmFyIHNyPVVyLmUvWixOcj1vbi5lL1osTXI9VXIuYyxacj1vbi5jO2lmKCFzcnx8IU5yKXtpZighTXJ8fCFacilyZXR1cm4gTXI/KG9uLnM9LXluLG9uKTpuZXcgSHQoWnI/VXI6TmFOKTtpZighTXJbMF18fCFa'@;
put 'clswXSlyZXR1cm4gWnJbMF0/KG9uLnM9LXluLG9uKTpuZXcgSHQoTXJbMF0/VXI6Mz09X2k/LTA6MCl9aWYoc3I9cWUoc3IpLE5yPXFlKE5yKSxNcj1Nci5zbGljZSgpLFpuPXNyLU5yKXtmb3IoKGRyPVpuPDApPyhabj0tWm4sJG49TXIpOihOcj1zciwkbj1aciksJG4ucmV2ZXJzZSgpLHlu'@;
put 'PVpuO3luLS07JG4ucHVzaCgwKSk7JG4ucmV2ZXJzZSgpfWVsc2UgZm9yKHByPShkcj0oWm49TXIubGVuZ3RoKTwoeW49WnIubGVuZ3RoKSk/Wm46eW4sWm49eW49MDt5bjxwcjt5bisrKWlmKE1yW3luXSE9WnJbeW5dKXtkcj1Nclt5bl08WnJbeW5dO2JyZWFrfWlmKGRyJiYoJG49TXIsTXI9'@;
put 'WnIsWnI9JG4sb24ucz0tb24ucyksKHluPShwcj1aci5sZW5ndGgpLShwbj1Nci5sZW5ndGgpKT4wKWZvcig7eW4tLTtNcltwbisrXT0wKTtmb3IoeW49RC0xO3ByPlpuOyl7aWYoTXJbLS1wcl08WnJbcHJdKXtmb3IocG49cHI7cG4mJiFNclstLXBuXTtNcltwbl09eW4pOy0tTXJbcG5dLE1y'@;
put 'W3ByXSs9RH1Ncltwcl0tPVpyW3ByXX1mb3IoOzA9PU1yWzBdO01yLnNwbGljZSgwLDEpLC0tTnIpO3JldHVybiBNclswXT9hcihvbixNcixOcik6KG9uLnM9Mz09X2k/LTE6MSxvbi5jPVtvbi5lPTBdLG9uKX0sbXIubW9kdWxvPW1yLm1vZD1mdW5jdGlvbihvbix5bil7dmFyIHBuLHByLCRu'@;
put 'PXRoaXM7cmV0dXJuIG9uPW5ldyBIdChvbix5biksISRuLmN8fCFvbi5zfHxvbi5jJiYhb24uY1swXT9uZXcgSHQoTmFOKTohb24uY3x8JG4uYyYmISRuLmNbMF0/bmV3IEh0KCRuKTooOT09d2k/KHByPW9uLnMsb24ucz0xLHBuPU1uKCRuLG9uLDAsMyksb24ucz1wcixwbi5zKj1wcik6cG49'@;
put 'TW4oJG4sb24sMCx3aSksIShvbj0kbi5taW51cyhwbi50aW1lcyhvbikpKS5jWzBdJiYxPT13aSYmKG9uLnM9JG4ucyksb24pfSxtci5tdWx0aXBsaWVkQnk9bXIudGltZXM9ZnVuY3Rpb24ob24seW4pe3ZhciBwbixwciwkbixkcixVcixabixzcixOcixNcixacixhYSxCYSxJbyxabyxwcyxN'@;
put 'bz10aGlzLGhzPU1vLmMsbmM9KG9uPW5ldyBIdChvbix5bikpLmM7aWYoIShocyYmbmMmJmhzWzBdJiZuY1swXSkpcmV0dXJuIU1vLnN8fCFvbi5zfHxocyYmIWhzWzBdJiYhbmN8fG5jJiYhbmNbMF0mJiFocz9vbi5jPW9uLmU9b24ucz1udWxsOihvbi5zKj1Nby5zLGhzJiZuYz8ob24uYz1b'@;
put 'MF0sb24uZT0wKTpvbi5jPW9uLmU9bnVsbCksb247Zm9yKHByPXFlKE1vLmUvWikrcWUob24uZS9aKSxvbi5zKj1Nby5zLChzcj1ocy5sZW5ndGgpPChacj1uYy5sZW5ndGgpJiYoSW89aHMsaHM9bmMsbmM9SW8sJG49c3Isc3I9WnIsWnI9JG4pLCRuPXNyK1pyLElvPVtdOyRuLS07SW8ucHVz'@;
put 'aCgwKSk7Zm9yKFpvPUQscHM9YmUsJG49WnI7LS0kbj49MDspe2Zvcihwbj0wLGFhPW5jWyRuXSVwcyxCYT1uY1skbl0vcHN8MCxkcj0kbisoVXI9c3IpO2RyPiRuOylwbj0oKE5yPWFhKihOcj1oc1stLVVyXSVwcykrKFpuPUJhKk5yKyhNcj1oc1tVcl0vcHN8MCkqYWEpJXBzKnBzK0lvW2Ry'@;
put 'XStwbikvWm98MCkrKFpuL3BzfDApK0JhKk1yLElvW2RyLS1dPU5yJVpvO0lvW2RyXT1wbn1yZXR1cm4gcG4/KytwcjpJby5zcGxpY2UoMCwxKSxhcihvbixJbyxwcil9LG1yLm5lZ2F0ZWQ9ZnVuY3Rpb24oKXt2YXIgb249bmV3IEh0KHRoaXMpO3JldHVybiBvbi5zPS1vbi5zfHxudWxsLG9u'@;
put 'fSxtci5wbHVzPWZ1bmN0aW9uKG9uLHluKXt2YXIgcG4scHI9dGhpcywkbj1wci5zO2lmKHluPShvbj1uZXcgSHQob24seW4pKS5zLCEkbnx8IXluKXJldHVybiBuZXcgSHQoTmFOKTtpZigkbiE9eW4pcmV0dXJuIG9uLnM9LXluLHByLm1pbnVzKG9uKTt2YXIgZHI9cHIuZS9aLFVyPW9uLmUv'@;
put 'Wixabj1wci5jLHNyPW9uLmM7aWYoIWRyfHwhVXIpe2lmKCFabnx8IXNyKXJldHVybiBuZXcgSHQoJG4vMCk7aWYoIVpuWzBdfHwhc3JbMF0pcmV0dXJuIHNyWzBdP29uOm5ldyBIdChablswXT9wcjowKiRuKX1pZihkcj1xZShkciksVXI9cWUoVXIpLFpuPVpuLnNsaWNlKCksJG49ZHItVXIp'@;
put 'e2Zvcigkbj4wPyhVcj1kcixwbj1zcik6KCRuPS0kbixwbj1abikscG4ucmV2ZXJzZSgpOyRuLS07cG4ucHVzaCgwKSk7cG4ucmV2ZXJzZSgpfWZvcigoJG49Wm4ubGVuZ3RoKS0oeW49c3IubGVuZ3RoKTwwJiYocG49c3Isc3I9Wm4sWm49cG4seW49JG4pLCRuPTA7eW47KSRuPShablstLXlu'@;
put 'XT1ablt5bl0rc3JbeW5dKyRuKS9EfDAsWm5beW5dPUQ9PT1ablt5bl0/MDpablt5bl0lRDtyZXR1cm4gJG4mJihabj1bJG5dLmNvbmNhdChabiksKytVciksYXIob24sWm4sVXIpfSxtci5wcmVjaXNpb249bXIuc2Q9ZnVuY3Rpb24ob24seW4pe3ZhciBwbixwciwkbjtpZihudWxsIT1vbiYm'@;
put 'b24hPT0hIW9uKXJldHVybiBkdChvbiwxLEVlKSxudWxsPT15bj95bj1faTpkdCh5biwwLDgpLEhyKG5ldyBIdCh0aGlzKSxvbix5bik7aWYoIShwbj10aGlzLmMpKXJldHVybiBudWxsO2lmKHByPSgkbj1wbi5sZW5ndGgtMSkqWisxLCRuPXBuWyRuXSl7Zm9yKDskbiUxMD09MDskbi89MTAs'@;
put 'cHItLSk7Zm9yKCRuPXBuWzBdOyRuPj0xMDskbi89MTAscHIrKyk7fXJldHVybiBvbiYmdGhpcy5lKzE+cHImJihwcj10aGlzLmUrMSkscHJ9LG1yLnNoaWZ0ZWRCeT1mdW5jdGlvbihvbil7cmV0dXJuIGR0KG9uLC1yZSxyZSksdGhpcy50aW1lcygiMWUiK29uKX0sbXIuc3F1YXJlUm9vdD1t'@;
put 'ci5zcXJ0PWZ1bmN0aW9uKCl7dmFyIG9uLHluLHBuLHByLCRuLGRyPXRoaXMsVXI9ZHIuYyxabj1kci5zLHNyPWRyLmUsTnI9YWkrNCxNcj1uZXcgSHQoIjAuNSIpO2lmKDEhPT1abnx8IVVyfHwhVXJbMF0pcmV0dXJuIG5ldyBIdCghWm58fFpuPDAmJighVXJ8fFVyWzBdKT9OYU46VXI/ZHI6'@;
put 'MS8wKTtpZigwPT0oWm49TWF0aC5zcXJ0KCtxcihkcikpKXx8Wm49PTEvMD8oKCh5bj1ydChVcikpLmxlbmd0aCtzciklMj09MCYmKHluKz0iMCIpLFpuPU1hdGguc3FydCgreW4pLHNyPXFlKChzcisxKS8yKS0oc3I8MHx8c3IlMikscG49bmV3IEh0KHluPVpuPT0xLzA/IjVlIitzcjooeW49'@;
put 'Wm4udG9FeHBvbmVudGlhbCgpKS5zbGljZSgwLHluLmluZGV4T2YoImUiKSsxKStzcikpOnBuPW5ldyBIdChabisiIikscG4uY1swXSlmb3IoKFpuPShzcj1wbi5lKStOcik8MyYmKFpuPTApOzspaWYocG49TXIudGltZXMoKCRuPXBuKS5wbHVzKE1uKGRyLCRuLE5yLDEpKSkscnQoJG4uYyku'@;
put 'c2xpY2UoMCxabik9PT0oeW49cnQocG4uYykpLnNsaWNlKDAsWm4pKXtpZihwbi5lPHNyJiYtLVpuLCI5OTk5IiE9KHluPXluLnNsaWNlKFpuLTMsWm4rMSkpJiYocHJ8fCI0OTk5IiE9eW4pKXsoISt5bnx8ISt5bi5zbGljZSgxKSYmIjUiPT15bi5jaGFyQXQoMCkpJiYoSHIocG4scG4uZSth'@;
put 'aSsyLDEpLG9uPSFwbi50aW1lcyhwbikuZXEoZHIpKTticmVha31pZighcHImJihIcigkbiwkbi5lK2FpKzIsMCksJG4udGltZXMoJG4pLmVxKGRyKSkpe3BuPSRuO2JyZWFrfU5yKz00LFpuKz00LHByPTF9cmV0dXJuIEhyKHBuLHBuLmUrYWkrMSxfaSxvbil9LG1yLnRvRXhwb25lbnRpYWw9'@;
put 'ZnVuY3Rpb24ob24seW4pe3JldHVybiBudWxsIT1vbiYmKGR0KG9uLDAsRWUpLG9uKyspLEhuKHRoaXMsb24seW4sMSl9LG1yLnRvRml4ZWQ9ZnVuY3Rpb24ob24seW4pe3JldHVybiBudWxsIT1vbiYmKGR0KG9uLDAsRWUpLG9uPW9uK3RoaXMuZSsxKSxIbih0aGlzLG9uLHluKX0sbXIudG9G'@;
put 'b3JtYXQ9ZnVuY3Rpb24ob24seW4scG4pe3ZhciBwcjtpZihudWxsPT1wbiludWxsIT1vbiYmeW4mJiJvYmplY3QiPT10eXBlb2YgeW4/KHBuPXluLHluPW51bGwpOm9uJiYib2JqZWN0Ij09dHlwZW9mIG9uPyhwbj1vbixvbj15bj1udWxsKTpwbj1mYTtlbHNlIGlmKCJvYmplY3QiIT10eXBl'@;
put 'b2YgcG4pdGhyb3cgRXJyb3IodisiQXJndW1lbnQgbm90IGFuIG9iamVjdDogIitwbik7aWYocHI9dGhpcy50b0ZpeGVkKG9uLHluKSx0aGlzLmMpe3ZhciBkcixVcj1wci5zcGxpdCgiLiIpLFpuPStwbi5ncm91cFNpemUsc3I9K3BuLnNlY29uZGFyeUdyb3VwU2l6ZSxOcj1wbi5ncm91cFNl'@;
put 'cGFyYXRvcnx8IiIsTXI9VXJbMF0sWnI9VXJbMV0sYWE9dGhpcy5zPDAsQmE9YWE/TXIuc2xpY2UoMSk6TXIsSW89QmEubGVuZ3RoO2lmKHNyJiYoZHI9Wm4sWm49c3Isc3I9ZHIsSW8tPWRyKSxabj4wJiZJbz4wKXtmb3IoTXI9QmEuc3Vic3RyKDAsZHI9SW8lWm58fFpuKTtkcjxJbztkcis9'@;
put 'Wm4pTXIrPU5yK0JhLnN1YnN0cihkcixabik7c3I+MCYmKE1yKz1OcitCYS5zbGljZShkcikpLGFhJiYoTXI9Ii0iK01yKX1wcj1acj9NcisocG4uZGVjaW1hbFNlcGFyYXRvcnx8IiIpKygoc3I9K3BuLmZyYWN0aW9uR3JvdXBTaXplKT9aci5yZXBsYWNlKG5ldyBSZWdFeHAoIlxcZHsiK3Ny'@;
put 'KyJ9XFxCIiwiZyIpLCIkJiIrKHBuLmZyYWN0aW9uR3JvdXBTZXBhcmF0b3J8fCIiKSk6WnIpOk1yfXJldHVybihwbi5wcmVmaXh8fCIiKStwcisocG4uc3VmZml4fHwiIil9LG1yLnRvRnJhY3Rpb249ZnVuY3Rpb24ob24pe3ZhciB5bixwbixwciwkbixkcixVcixabixzcixOcixNcixacixh'@;
put 'YSxCYT10aGlzLElvPUJhLmM7aWYobnVsbCE9b24mJighKFpuPW5ldyBIdChvbikpLmlzSW50ZWdlcigpJiYoWm4uY3x8MSE9PVpuLnMpfHxabi5sdChHbikpKXRocm93IEVycm9yKHYrIkFyZ3VtZW50ICIrKFpuLmlzSW50ZWdlcigpPyJvdXQgb2YgcmFuZ2U6ICI6Im5vdCBhbiBpbnRlZ2Vy'@;
put 'OiAiKStxcihabikpO2lmKCFJbylyZXR1cm4gbmV3IEh0KEJhKTtmb3IoeW49bmV3IEh0KEduKSxOcj1wbj1uZXcgSHQoR24pLHByPXNyPW5ldyBIdChHbiksYWE9cnQoSW8pLGRyPXluLmU9YWEubGVuZ3RoLUJhLmUtMSx5bi5jWzBdPWNlWyhVcj1kciVaKTwwP1orVXI6VXJdLG9uPSFvbnx8'@;
put 'Wm4uY29tcGFyZWRUbyh5bik+MD9kcj4wP3luOk5yOlpuLFVyPUlyLElyPTEvMCxabj1uZXcgSHQoYWEpLHNyLmNbMF09MDtNcj1Nbihabix5biwwLDEpLDEhPSgkbj1wbi5wbHVzKE1yLnRpbWVzKHByKSkpLmNvbXBhcmVkVG8ob24pOylwbj1wcixwcj0kbixOcj1zci5wbHVzKE1yLnRpbWVz'@;
put 'KCRuPU5yKSksc3I9JG4seW49Wm4ubWludXMoTXIudGltZXMoJG49eW4pKSxabj0kbjtyZXR1cm4gJG49TW4ob24ubWludXMocG4pLHByLDAsMSksc3I9c3IucGx1cygkbi50aW1lcyhOcikpLHBuPXBuLnBsdXMoJG4udGltZXMocHIpKSxzci5zPU5yLnM9QmEucyxacj1NbihOcixwcixkcio9'@;
put 'MixfaSkubWludXMoQmEpLmFicygpLmNvbXBhcmVkVG8oTW4oc3IscG4sZHIsX2kpLm1pbnVzKEJhKS5hYnMoKSk8MT9bTnIscHJdOltzcixwbl0sSXI9VXIsWnJ9LG1yLnRvTnVtYmVyPWZ1bmN0aW9uKCl7cmV0dXJuK3FyKHRoaXMpfSxtci50b1ByZWNpc2lvbj1mdW5jdGlvbihvbix5bil7'@;
put 'cmV0dXJuIG51bGwhPW9uJiZkdChvbiwxLEVlKSxIbih0aGlzLG9uLHluLDIpfSxtci50b1N0cmluZz1mdW5jdGlvbihvbil7dmFyIHluLHBuPXRoaXMscHI9cG4ucywkbj1wbi5lO3JldHVybiBudWxsPT09JG4/cHI/KHluPSJJbmZpbml0eSIscHI8MCYmKHluPSItIit5bikpOnluPSJOYU4i'@;
put 'OihudWxsPT1vbj95bj0kbjw9T258fCRuPj16cj92bihydChwbi5jKSwkbik6Q24ocnQocG4uYyksJG4sIjAiKToxMD09PW9uJiZOdD95bj1DbihydCgocG49SHIobmV3IEh0KHBuKSxhaSskbisxLF9pKSkuYykscG4uZSwiMCIpOihkdChvbiwyLHZ0Lmxlbmd0aCwiQmFzZSIpLHluPUNyKENu'@;
put 'KHJ0KHBuLmMpLCRuLCIwIiksMTAsb24scHIsITApKSxwcjwwJiZwbi5jWzBdJiYoeW49Ii0iK3luKSkseW59LG1yLnZhbHVlT2Y9bXIudG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJuIHFyKHRoaXMpfSxtci5faXNCaWdOdW1iZXI9ITAsbnVsbCE9dG4mJkh0LnNldCh0biksSHR9KCksYS5kZWZh'@;
put 'dWx0PWEuQmlnTnVtYmVyPWEsYy5leHBvcnRzP2MuZXhwb3J0cz1hOihsfHwobD10eXBlb2Ygc2VsZjwidSImJnNlbGY/c2VsZjp3aW5kb3cpLGwuQmlnTnVtYmVyPWEpfShHYXQpfShjNGUpO3ZhciB1NGU9YzRlLmV4cG9ydHM7Y29uc3QgZjM9ckooKSxnb3Q9ZUooKSxtb3Q9dEosdm90PXU0'@;
put 'ZSxXMD17dHJpbGxpb246TWF0aC5wb3coMTAsMTIpLGJpbGxpb246TWF0aC5wb3coMTAsOSksbWlsbGlvbjpNYXRoLnBvdygxMCw2KSx0aG91c2FuZDpNYXRoLnBvdygxMCwzKX0sc1Q9e3RvdGFsTGVuZ3RoOjAsY2hhcmFjdGVyaXN0aWM6MCxmb3JjZUF2ZXJhZ2U6ITEsYXZlcmFnZTohMSxt'@;
put 'YW50aXNzYTotMSxvcHRpb25hbE1hbnRpc3NhOiEwLHRob3VzYW5kU2VwYXJhdGVkOiExLHNwYWNlU2VwYXJhdGVkOiExLG5lZ2F0aXZlOiJzaWduIixmb3JjZVNpZ246ITEscm91bmRpbmdGdW5jdGlvbjpNYXRoLnJvdW5kLHNwYWNlU2VwYXJhdGVkQWJicmV2aWF0aW9uOiExfSx7YmluYXJ5'@;
put 'U3VmZml4ZXM6ZDRlLGRlY2ltYWxTdWZmaXhlczpZUH09ZjMuY3VycmVudEJ5dGVzKCksaUo9e2dlbmVyYWw6e3NjYWxlOjEwMjQsc3VmZml4ZXM6WVAsbWFya2VyOiJiZCJ9LGJpbmFyeTp7c2NhbGU6MTAyNCxzdWZmaXhlczpkNGUsbWFya2VyOiJiIn0sZGVjaW1hbDp7c2NhbGU6MWUzLHN1'@;
put 'ZmZpeGVzOllQLG1hcmtlcjoiZCJ9fTtmdW5jdGlvbiBHUChjLGwsYSl7bGV0IGQ9bFswXSxoPU1hdGguYWJzKGMpO2lmKGg+PWEpe2ZvcihsZXQgZj0xO2Y8bC5sZW5ndGg7KytmKXtsZXQgdj1NYXRoLnBvdyhhLGYpLE09TWF0aC5wb3coYSxmKzEpO2lmKGg+PXYmJmg8TSl7ZD1sW2ZdLGMv'@;
put 'PXY7YnJlYWt9fWQ9PT1sWzBdJiYoYy89TWF0aC5wb3coYSxsLmxlbmd0aC0xKSxkPWxbbC5sZW5ndGgtMV0pfXJldHVybnt2YWx1ZTpjLHN1ZmZpeDpkfX1mdW5jdGlvbiAkUChjKXtsZXQgbD0iIjtmb3IobGV0IGE9MDthPGM7YSsrKWwrPSIwIjtyZXR1cm4gbH1mdW5jdGlvbiBsVCh7aW5z'@;
put 'dGFuY2U6Yyxwcm92aWRlZEZvcm1hdDpsLHN0YXRlOmE9ZjMsZGVjaW1hbFNlcGFyYXRvcjpkLGRlZmF1bHRzOmg9YS5jdXJyZW50RGVmYXVsdHMoKX0pe2xldCBmPWMuX3ZhbHVlO2lmKDA9PT1mJiZhLmhhc1plcm9Gb3JtYXQoKSlyZXR1cm4gYS5nZXRaZXJvRm9ybWF0KCk7aWYoIWlzRmlu'@;
put 'aXRlKGYpKXJldHVybiBmLnRvU3RyaW5nKCk7bGV0IHY9T2JqZWN0LmFzc2lnbih7fSxzVCxoLGwpLE09di50b3RhbExlbmd0aCxEPU0/MDp2LmNoYXJhY3RlcmlzdGljLFo9di5vcHRpb25hbENoYXJhY3RlcmlzdGljLHJlPXYuZm9yY2VBdmVyYWdlLGJlPSEhTXx8ISFyZXx8di5hdmVyYWdl'@;
put 'LEVlPU0/LTE6YmUmJnZvaWQgMD09PWwubWFudGlzc2E/MDp2Lm1hbnRpc3NhLEJlPSFNJiYodm9pZCAwPT09bC5vcHRpb25hbE1hbnRpc3NhPy0xPT09RWU6di5vcHRpb25hbE1hbnRpc3NhKSxxZT12LnRyaW1NYW50aXNzYSxydD12LnRob3VzYW5kU2VwYXJhdGVkLHB0PXYuc3BhY2VTZXBh'@;
put 'cmF0ZWQsZHQ9di5uZWdhdGl2ZSxKdD12LmZvcmNlU2lnbix2bj12LmV4cG9uZW50aWFsLENuPXYucm91bmRpbmdGdW5jdGlvbix0bj0iIjtpZihiZSl7bGV0IENyPWZ1bmN0aW9uIEFvdCh7dmFsdWU6Yyxmb3JjZUF2ZXJhZ2U6bCxsb3dQcmVjaXNpb246YT0hMCxhYmJyZXZpYXRpb25zOmQs'@;
put 'c3BhY2VTZXBhcmF0ZWQ6aD0hMSx0b3RhbExlbmd0aDpmPTAscm91bmRpbmdGdW5jdGlvbjp2PU1hdGgucm91bmR9KXtsZXQgTT0iIixEPU1hdGguYWJzKGMpLFo9LTE7aWYobCYmZFtsXSYmVzBbbF0/KE09ZFtsXSxjLz1XMFtsXSk6RD49VzAudHJpbGxpb258fGEmJjE9PT12KEQvVzAudHJp'@;
put 'bGxpb24pPyhNPWQudHJpbGxpb24sYy89VzAudHJpbGxpb24pOkQ8VzAudHJpbGxpb24mJkQ+PVcwLmJpbGxpb258fGEmJjE9PT12KEQvVzAuYmlsbGlvbik/KE09ZC5iaWxsaW9uLGMvPVcwLmJpbGxpb24pOkQ8VzAuYmlsbGlvbiYmRD49VzAubWlsbGlvbnx8YSYmMT09PXYoRC9XMC5taWxs'@;
put 'aW9uKT8oTT1kLm1pbGxpb24sYy89VzAubWlsbGlvbik6KEQ8VzAubWlsbGlvbiYmRD49VzAudGhvdXNhbmR8fGEmJjE9PT12KEQvVzAudGhvdXNhbmQpKSYmKE09ZC50aG91c2FuZCxjLz1XMC50aG91c2FuZCksTSYmKE09KGg/IiAiOiIiKStNKSxmKXtsZXQgY2U9YzwwLGJlPWMudG9TdHJp'@;
put 'bmcoKS5zcGxpdCgiLiIpWzBdO1o9TWF0aC5tYXgoZi0oY2U/YmUubGVuZ3RoLTE6YmUubGVuZ3RoKSwwKX1yZXR1cm57dmFsdWU6YyxhYmJyZXZpYXRpb246TSxtYW50aXNzYVByZWNpc2lvbjpafX0oe3ZhbHVlOmYsZm9yY2VBdmVyYWdlOnJlLGxvd1ByZWNpc2lvbjp2Lmxvd1ByZWNpc2lv'@;
put 'bixhYmJyZXZpYXRpb25zOmEuY3VycmVudEFiYnJldmlhdGlvbnMoKSxzcGFjZVNlcGFyYXRlZDpwdCxyb3VuZGluZ0Z1bmN0aW9uOkNuLHRvdGFsTGVuZ3RoOk19KTtmPUNyLnZhbHVlLHRuKz1Dci5hYmJyZXZpYXRpb24sTSYmKEVlPUNyLm1hbnRpc3NhUHJlY2lzaW9uKX1pZih2bil7bGV0'@;
put 'IENyPWZ1bmN0aW9uIGtvdCh7dmFsdWU6YyxjaGFyYWN0ZXJpc3RpY1ByZWNpc2lvbjpsfSl7bGV0W2EsZF09Yy50b0V4cG9uZW50aWFsKCkuc3BsaXQoImUiKSxoPSthO3JldHVybiBsPygxPGwmJihoKj1NYXRoLnBvdygxMCxsLTEpLGQ9K2QtKGwtMSksZD1kPj0wP2ArJHtkfWA6ZCkse3Zh'@;
put 'bHVlOmgsYWJicmV2aWF0aW9uOmBlJHtkfWB9KTp7dmFsdWU6aCxhYmJyZXZpYXRpb246YGUke2R9YH19KHt2YWx1ZTpmLGNoYXJhY3RlcmlzdGljUHJlY2lzaW9uOkR9KTtmPUNyLnZhbHVlLHRuPUNyLmFiYnJldmlhdGlvbit0bn1sZXQgTW49ZnVuY3Rpb24gUm90KGMsbCxhLGQsaCxmKXtp'@;
put 'ZigtMT09PWQpcmV0dXJuIGM7bGV0IHY9ZnVuY3Rpb24gSW90KGMsbCxhPU1hdGgucm91bmQpe3JldHVybi0xIT09Yy50b1N0cmluZygpLmluZGV4T2YoImUiKT9mdW5jdGlvbiBEb3QoYyxsKXtsZXQgYT1jLnRvU3RyaW5nKCksW2QsaF09YS5zcGxpdCgiZSIpLFtmLHY9IiJdPWQuc3BsaXQo'@;
put 'Ii4iKTtpZigraD4wKWE9Zit2KyRQKGgtdi5sZW5ndGgpO2Vsc2V7bGV0IE09Ii4iO009K2Y8MD9gLTAke019YDpgMCR7TX1gO2xldCBEPSgkUCgtaC0xKStNYXRoLmFicyhmKSt2KS5zdWJzdHIoMCxsKTtELmxlbmd0aDxsJiYoRCs9JFAobC1ELmxlbmd0aCkpLGE9TStEfXJldHVybitoPjAm'@;
put 'Jmw+MCYmKGErPWAuJHskUChsKX1gKSxhfShjLGwpOm5ldyB2b3QoYSgrYCR7Y31lKyR7bH1gKS9NYXRoLnBvdygxMCxsKSkudG9GaXhlZChsKX0obCxkLGYpLFtNLEQ9IiJdPXYudG9TdHJpbmcoKS5zcGxpdCgiLiIpO2lmKEQubWF0Y2goL14wKyQvKSYmKGF8fGgpKXJldHVybiBNO2xldCBa'@;
put 'PUQubWF0Y2goLzArJC8pO3JldHVybiBoJiZaP2Ake019LiR7RC50b1N0cmluZygpLnNsaWNlKDAsWi5pbmRleCl9YDp2LnRvU3RyaW5nKCl9KGYudG9TdHJpbmcoKSxmLEJlLEVlLHFlLENuKTtyZXR1cm4gTW49ZnVuY3Rpb24gTG90KGMsbCxhLGQpe2xldCBoPWMsW2Ysdl09aC50b1N0cmlu'@;
put 'ZygpLnNwbGl0KCIuIik7aWYoZi5tYXRjaCgvXi0/MCQvKSYmYSlyZXR1cm4gdj9gJHtmLnJlcGxhY2UoIjAiLCIiKX0uJHt2fWA6Zi5yZXBsYWNlKCIwIiwiIik7Y29uc3QgTT1sPDAmJjA9PT1mLmluZGV4T2YoIi0iKTtpZihNJiYoZj1mLnNsaWNlKDEpLGg9aC5zbGljZSgxKSksZi5sZW5n'@;
put 'dGg8ZCl7bGV0IEQ9ZC1mLmxlbmd0aDtmb3IobGV0IFo9MDtaPEQ7WisrKWg9YDAke2h9YH1yZXR1cm4gTSYmKGg9YC0ke2h9YCksaC50b1N0cmluZygpfShNbixmLFosRCksTW49ZnVuY3Rpb24gUG90KGMsbCxhLGQsaCl7bGV0IGY9ZC5jdXJyZW50RGVsaW1pdGVycygpLHY9Zi50aG91c2Fu'@;
put 'ZHM7aD1ofHxmLmRlY2ltYWw7bGV0IE09Zi50aG91c2FuZHNTaXplfHwzLEQ9Yy50b1N0cmluZygpLFo9RC5zcGxpdCgiLiIpWzBdLHJlPUQuc3BsaXQoIi4iKVsxXTtjb25zdCBjZT1sPDAmJjA9PT1aLmluZGV4T2YoIi0iKTtyZXR1cm4gYSYmKGNlJiYoWj1aLnNsaWNlKDEpKSxmdW5jdGlv'@;
put 'biBPb3QoYyxsKXtsZXQgYT1bXSxkPTA7Zm9yKGxldCBoPWM7aD4wO2gtLSlkPT09bCYmKGEudW5zaGlmdChoKSxkPTApLGQrKztyZXR1cm4gYX0oWi5sZW5ndGgsTSkuZm9yRWFjaCgoRWUsQmUpPT57Wj1aLnNsaWNlKDAsRWUrQmUpK3YrWi5zbGljZShFZStCZSl9KSxjZSYmKFo9YC0ke1p9'@;
put 'YCkpLEQ9cmU/WitoK3JlOlosRH0oTW4sZixydCxhLGQpLChiZXx8dm4pJiYoTW49ZnVuY3Rpb24gRm90KGMsbCl7cmV0dXJuIGMrbH0oTW4sdG4pKSwoSnR8fGY8MCkmJihNbj1mdW5jdGlvbiBIb3QoYyxsLGEpe3JldHVybiAwPT09bD9jOjA9PStjP2MucmVwbGFjZSgiLSIsIiIpOmw+MD9g'@;
put 'KyR7Y31gOiJzaWduIj09PWE/YzpgKCR7Yy5yZXBsYWNlKCItIiwiIil9KWB9KE1uLGYsZHQpKSxNbn1mdW5jdGlvbiBPXyhjLGwpe2lmKCFjKXJldHVybiBsO2xldCBhPU9iamVjdC5rZXlzKGMpO3JldHVybiAxPT09YS5sZW5ndGgmJiJvdXRwdXQiPT09YVswXT9sOmN9Y29uc3QgRGc9dTRl'@;
put 'O2Z1bmN0aW9uIGg0ZShjLGwsYSl7bGV0IGQ9bmV3IERnKGMuX3ZhbHVlKSxoPWw7cmV0dXJuIGEuaXNOdW1icm8obCkmJihoPWwuX3ZhbHVlKSxoPW5ldyBEZyhoKSxjLl92YWx1ZT1kLm1pbnVzKGgpLnRvTnVtYmVyKCksY31jb25zdCBWcD1ySigpLCRvdD1lSigpLEtvdD0oYz0+KHtsb2Fk'@;
put 'TGFuZ3VhZ2VzSW5Ob2RlOmw9PmZ1bmN0aW9uIGZvdChjLGwpe2MuZm9yRWFjaChhPT57bGV0IGQ7dHJ5e2Q9ZnVuY3Rpb24gaG90KGMpe3Rocm93IG5ldyBFcnJvcignQ291bGQgbm90IGR5bmFtaWNhbGx5IHJlcXVpcmUgIicrYysnIi4gUGxlYXNlIGNvbmZpZ3VyZSB0aGUgZHluYW1pY1Jl'@;
put 'cXVpcmVUYXJnZXRzIG9yL2FuZCBpZ25vcmVEeW5hbWljUmVxdWlyZXMgb3B0aW9uIG9mIEByb2xsdXAvcGx1Z2luLWNvbW1vbmpzIGFwcHJvcHJpYXRlbHkgZm9yIHRoaXMgcmVxdWlyZSBjYWxsIHRvIHdvcmsuJyl9KGAuLi9sYW5ndWFnZXMvJHthfWApfWNhdGNoe2NvbnNvbGUuZXJyb3Io'@;
put 'YFVuYWJsZSB0byBsb2FkICIke2F9Ii4gTm8gbWF0Y2hpbmcgbGFuZ3VhZ2UgZmlsZSBmb3VuZC5gKX1kJiZsLnJlZ2lzdGVyTGFuZ3VhZ2UoZCl9KX0obCxjKX0pKShjdSkscW90PW80ZSgpO2xldCBzOT0oYz0+KHtmb3JtYXQ6KC4uLmwpPT5mdW5jdGlvbiBib3QoYyxsPXt9LGEpe2lmKCJz'@;
put 'dHJpbmciPT10eXBlb2YgbCYmKGw9bW90LnBhcnNlRm9ybWF0KGwpKSwhZ290LnZhbGlkYXRlRm9ybWF0KGwpKXJldHVybiJFUlJPUjogaW52YWxpZCBmb3JtYXQiO2xldCBoPWwucHJlZml4fHwiIixmPWwucG9zdGZpeHx8IiIsdj1mdW5jdGlvbiB5b3QoYyxsLGEpe3N3aXRjaChsLm91dHB1'@;
put 'dCl7Y2FzZSJjdXJyZW5jeSI6cmV0dXJuIGZ1bmN0aW9uIFRvdChjLGwsYSl7Y29uc3QgZD1hLmN1cnJlbnRDdXJyZW5jeSgpO2xldCB2LGg9T2JqZWN0LmFzc2lnbih7fSxsKSxmPU9iamVjdC5hc3NpZ24oe30sc1QsaCksTT0iIixEPSEhZi50b3RhbExlbmd0aHx8ISFmLmZvcmNlQXZlcmFn'@;
put 'ZXx8Zi5hdmVyYWdlLFo9aC5jdXJyZW5jeVBvc2l0aW9ufHxkLnBvc2l0aW9uLHJlPWguY3VycmVuY3lTeW1ib2x8fGQuc3ltYm9sO2NvbnN0IGNlPXZvaWQgMCE9PWYuc3BhY2VTZXBhcmF0ZWRDdXJyZW5jeT9mLnNwYWNlU2VwYXJhdGVkQ3VycmVuY3k6Zi5zcGFjZVNlcGFyYXRlZDt2b2lk'@;
put 'IDA9PT1oLmxvd1ByZWNpc2lvbiYmKGgubG93UHJlY2lzaW9uPSExKSxjZSYmKE09IiAiKSwiaW5maXgiPT09WiYmKHY9TStyZStNKTtsZXQgYmU9bFQoe2luc3RhbmNlOmMscHJvdmlkZWRGb3JtYXQ6aCxzdGF0ZTphLGRlY2ltYWxTZXBhcmF0b3I6dn0pO3JldHVybiJwcmVmaXgiPT09WiYm'@;
put 'KGJlPWMuX3ZhbHVlPDAmJiJzaWduIj09PWYubmVnYXRpdmU/YC0ke019JHtyZX0ke2JlLnNsaWNlKDEpfWA6Yy5fdmFsdWU+MCYmZi5mb3JjZVNpZ24/YCske019JHtyZX0ke2JlLnNsaWNlKDEpfWA6cmUrTStiZSksKCFafHwicG9zdGZpeCI9PT1aKSYmKE09IWYuc3BhY2VTZXBhcmF0ZWRB'@;
put 'YmJyZXZpYXRpb24mJkQ/IiI6TSxiZT1iZStNK3JlKSxiZX0oYyxsPU9fKGwsZjMuY3VycmVudEN1cnJlbmN5RGVmYXVsdEZvcm1hdCgpKSxmMyk7Y2FzZSJwZXJjZW50IjpyZXR1cm4gZnVuY3Rpb24gRW90KGMsbCxhLGQpe2xldCBoPWwucHJlZml4U3ltYm9sLGY9bFQoe2luc3RhbmNlOmQo'@;
put 'MTAwKmMuX3ZhbHVlKSxwcm92aWRlZEZvcm1hdDpsLHN0YXRlOmF9KSx2PU9iamVjdC5hc3NpZ24oe30sc1QsbCk7cmV0dXJuIGg/YCUke3Yuc3BhY2VTZXBhcmF0ZWQ/IiAiOiIifSR7Zn1gOmAke2Z9JHt2LnNwYWNlU2VwYXJhdGVkPyIgIjoiIn0lYH0oYyxsPU9fKGwsZjMuY3VycmVudFBl'@;
put 'cmNlbnRhZ2VEZWZhdWx0Rm9ybWF0KCkpLGYzLGEpO2Nhc2UiYnl0ZSI6cmV0dXJuIGZ1bmN0aW9uIFNvdChjLGwsYSxkKXtsZXQgaD1sLmJhc2V8fCJiaW5hcnkiLGY9T2JqZWN0LmFzc2lnbih7fSxzVCxsKTtjb25zdHtiaW5hcnlTdWZmaXhlczp2LGRlY2ltYWxTdWZmaXhlczpNfT1hLmN1'@;
put 'cnJlbnRCeXRlcygpO2xldCBaPXtnZW5lcmFsOntzY2FsZToxMDI0LHN1ZmZpeGVzOk18fFlQLG1hcmtlcjoiYmQifSxiaW5hcnk6e3NjYWxlOjEwMjQsc3VmZml4ZXM6dnx8ZDRlLG1hcmtlcjoiYiJ9LGRlY2ltYWw6e3NjYWxlOjFlMyxzdWZmaXhlczpNfHxZUCxtYXJrZXI6ImQifX1baF0s'@;
put 'e3ZhbHVlOnJlLHN1ZmZpeDpjZX09R1AoYy5fdmFsdWUsWi5zdWZmaXhlcyxaLnNjYWxlKTtyZXR1cm5gJHtsVCh7aW5zdGFuY2U6ZChyZSkscHJvdmlkZWRGb3JtYXQ6bCxzdGF0ZTphLGRlZmF1bHRzOmEuY3VycmVudEJ5dGVEZWZhdWx0Rm9ybWF0KCl9KX0ke2Yuc3BhY2VTZXBhcmF0ZWQ/'@;
put 'IiAiOiIifSR7Y2V9YH0oYyxsPU9fKGwsZjMuY3VycmVudEJ5dGVEZWZhdWx0Rm9ybWF0KCkpLGYzLGEpO2Nhc2UidGltZSI6cmV0dXJuIGw9T18obCxmMy5jdXJyZW50VGltZURlZmF1bHRGb3JtYXQoKSksZnVuY3Rpb24geG90KGMpe2xldCBsPU1hdGguZmxvb3IoYy5fdmFsdWUvNjAvNjAp'@;
put 'LGE9TWF0aC5mbG9vcigoYy5fdmFsdWUtNjAqbCo2MCkvNjApLGQ9TWF0aC5yb3VuZChjLl92YWx1ZS02MCpsKjYwLTYwKmEpO3JldHVybmAke2x9OiR7YTwxMD8iMCI6IiJ9JHthfToke2Q8MTA/IjAiOiIifSR7ZH1gfShjKTtjYXNlIm9yZGluYWwiOnJldHVybiBmdW5jdGlvbiBNb3QoYyxs'@;
put 'LGEpe2xldCBkPWEuY3VycmVudE9yZGluYWwoKSxoPU9iamVjdC5hc3NpZ24oe30sc1QsbCksZj1sVCh7aW5zdGFuY2U6Yyxwcm92aWRlZEZvcm1hdDpsLHN0YXRlOmF9KSx2PWQoYy5fdmFsdWUpO3JldHVybmAke2Z9JHtoLnNwYWNlU2VwYXJhdGVkPyIgIjoiIn0ke3Z9YH0oYyxsPU9fKGws'@;
put 'ZjMuY3VycmVudE9yZGluYWxEZWZhdWx0Rm9ybWF0KCkpLGYzKTtkZWZhdWx0OnJldHVybiBsVCh7aW5zdGFuY2U6Yyxwcm92aWRlZEZvcm1hdDpsLG51bWJybzphfSl9fShjLGwsYSk7cmV0dXJuIHY9ZnVuY3Rpb24gTm90KGMsbCl7cmV0dXJuIGwrY30odixoKSx2PWZ1bmN0aW9uIFZvdChj'@;
put 'LGwpe3JldHVybiBjK2x9KHYsZiksdn0oLi4ubCxjKSxnZXRCeXRlVW5pdDooLi4ubCk9PmZ1bmN0aW9uIENvdChjKXtsZXQgbD1pSi5nZW5lcmFsO3JldHVybiBHUChjLl92YWx1ZSxsLnN1ZmZpeGVzLGwuc2NhbGUpLnN1ZmZpeH0oLi4ubCxjKSxnZXRCaW5hcnlCeXRlVW5pdDooLi4ubCk9'@;
put 'PmZ1bmN0aW9uIHdvdChjKXtsZXQgbD1pSi5iaW5hcnk7cmV0dXJuIEdQKGMuX3ZhbHVlLGwuc3VmZml4ZXMsbC5zY2FsZSkuc3VmZml4fSguLi5sLGMpLGdldERlY2ltYWxCeXRlVW5pdDooLi4ubCk9PmZ1bmN0aW9uIF9vdChjKXtsZXQgbD1pSi5kZWNpbWFsO3JldHVybiBHUChjLl92YWx1'@;
put 'ZSxsLnN1ZmZpeGVzLGwuc2NhbGUpLnN1ZmZpeH0oLi4ubCxjKSxmb3JtYXRPckRlZmF1bHQ6T199KSkoY3UpLGw5PShjPT4oe2FkZDoobCxhKT0+ZnVuY3Rpb24gam90KGMsbCxhKXtsZXQgZD1uZXcgRGcoYy5fdmFsdWUpLGg9bDtyZXR1cm4gYS5pc051bWJybyhsKSYmKGg9bC5fdmFsdWUp'@;
put 'LGg9bmV3IERnKGgpLGMuX3ZhbHVlPWQucGx1cyhoKS50b051bWJlcigpLGN9KGwsYSxjKSxzdWJ0cmFjdDoobCxhKT0+aDRlKGwsYSxjKSxtdWx0aXBseToobCxhKT0+ZnVuY3Rpb24gem90KGMsbCxhKXtsZXQgZD1uZXcgRGcoYy5fdmFsdWUpLGg9bDtyZXR1cm4gYS5pc051bWJybyhsKSYm'@;
put 'KGg9bC5fdmFsdWUpLGg9bmV3IERnKGgpLGMuX3ZhbHVlPWQudGltZXMoaCkudG9OdW1iZXIoKSxjfShsLGEsYyksZGl2aWRlOihsLGEpPT5mdW5jdGlvbiBVb3QoYyxsLGEpe2xldCBkPW5ldyBEZyhjLl92YWx1ZSksaD1sO3JldHVybiBhLmlzTnVtYnJvKGwpJiYoaD1sLl92YWx1ZSksaD1u'@;
put 'ZXcgRGcoaCksYy5fdmFsdWU9ZC5kaXZpZGVkQnkoaCkudG9OdW1iZXIoKSxjfShsLGEsYyksc2V0OihsLGEpPT5mdW5jdGlvbiBab3QoYyxsLGEpe2xldCBkPWw7cmV0dXJuIGEuaXNOdW1icm8obCkmJihkPWwuX3ZhbHVlKSxjLl92YWx1ZT1kLGN9KGwsYSxjKSxkaWZmZXJlbmNlOihsLGEp'@;
put 'PT5mdW5jdGlvbiBXb3QoYyxsLGEpe2xldCBkPWEoYy5fdmFsdWUpO3JldHVybiBoNGUoZCxsLGEpLE1hdGguYWJzKGQuX3ZhbHVlKX0obCxhLGMpLEJpZ051bWJlcjpEZ30pKShjdSk7Y29uc3QgWG90PXRKO2NsYXNzIGY0ZXtjb25zdHJ1Y3RvcihsKXt0aGlzLl92YWx1ZT1sfWNsb25lKCl7'@;
put 'cmV0dXJuIGN1KHRoaXMuX3ZhbHVlKX1mb3JtYXQobD17fSl7cmV0dXJuIHM5LmZvcm1hdCh0aGlzLGwpfWZvcm1hdEN1cnJlbmN5KGwpe3JldHVybiJzdHJpbmciPT10eXBlb2YgbCYmKGw9WG90LnBhcnNlRm9ybWF0KGwpKSwobD1zOS5mb3JtYXRPckRlZmF1bHQobCxWcC5jdXJyZW50Q3Vy'@;
put 'cmVuY3lEZWZhdWx0Rm9ybWF0KCkpKS5vdXRwdXQ9ImN1cnJlbmN5IixzOS5mb3JtYXQodGhpcyxsKX1mb3JtYXRUaW1lKGw9e30pe3JldHVybiBsLm91dHB1dD0idGltZSIsczkuZm9ybWF0KHRoaXMsbCl9YmluYXJ5Qnl0ZVVuaXRzKCl7cmV0dXJuIHM5LmdldEJpbmFyeUJ5dGVVbml0KHRo'@;
put 'aXMpfWRlY2ltYWxCeXRlVW5pdHMoKXtyZXR1cm4gczkuZ2V0RGVjaW1hbEJ5dGVVbml0KHRoaXMpfWJ5dGVVbml0cygpe3JldHVybiBzOS5nZXRCeXRlVW5pdCh0aGlzKX1kaWZmZXJlbmNlKGwpe3JldHVybiBsOS5kaWZmZXJlbmNlKHRoaXMsbCl9YWRkKGwpe3JldHVybiBsOS5hZGQodGhp'@;
put 'cyxsKX1zdWJ0cmFjdChsKXtyZXR1cm4gbDkuc3VidHJhY3QodGhpcyxsKX1tdWx0aXBseShsKXtyZXR1cm4gbDkubXVsdGlwbHkodGhpcyxsKX1kaXZpZGUobCl7cmV0dXJuIGw5LmRpdmlkZSh0aGlzLGwpfXNldChsKXtyZXR1cm4gbDkuc2V0KHRoaXMscDRlKGwpKX12YWx1ZSgpe3JldHVy'@;
put 'biB0aGlzLl92YWx1ZX12YWx1ZU9mKCl7cmV0dXJuIHRoaXMuX3ZhbHVlfX1mdW5jdGlvbiBwNGUoYyl7bGV0IGw9YztyZXR1cm4gY3UuaXNOdW1icm8oYyk/bD1jLl92YWx1ZToic3RyaW5nIj09dHlwZW9mIGM/bD1jdS51bmZvcm1hdChjKTppc05hTihjKSYmKGw9TmFOKSxsfWZ1bmN0aW9u'@;
put 'IGN1KGMpe3JldHVybiBuZXcgZjRlKHA0ZShjKSl9Y3UudmVyc2lvbj0iMi41LjAiLGN1LmlzTnVtYnJvPWZ1bmN0aW9uKGMpe3JldHVybiBjIGluc3RhbmNlb2YgZjRlfSxjdS5sYW5ndWFnZT1WcC5jdXJyZW50TGFuZ3VhZ2UsY3UucmVnaXN0ZXJMYW5ndWFnZT1WcC5yZWdpc3Rlckxhbmd1'@;
put 'YWdlLGN1LnNldExhbmd1YWdlPVZwLnNldExhbmd1YWdlLGN1Lmxhbmd1YWdlcz1WcC5sYW5ndWFnZXMsY3UubGFuZ3VhZ2VEYXRhPVZwLmxhbmd1YWdlRGF0YSxjdS56ZXJvRm9ybWF0PVZwLnNldFplcm9Gb3JtYXQsY3UuZGVmYXVsdEZvcm1hdD1WcC5jdXJyZW50RGVmYXVsdHMsY3Uuc2V0'@;
put 'RGVmYXVsdHM9VnAuc2V0RGVmYXVsdHMsY3UuZGVmYXVsdEN1cnJlbmN5Rm9ybWF0PVZwLmN1cnJlbnRDdXJyZW5jeURlZmF1bHRGb3JtYXQsY3UudmFsaWRhdGU9JG90LnZhbGlkYXRlLGN1LmxvYWRMYW5ndWFnZXNJbk5vZGU9S290LmxvYWRMYW5ndWFnZXNJbk5vZGUsY3UudW5mb3JtYXQ9'@;
put 'cW90LnVuZm9ybWF0LGN1LkJpZ051bWJlcj1sOS5CaWdOdW1iZXI7dmFyICRtPSRhdChjdSk7ZnVuY3Rpb24gZzRlKGMsbCl7aWYobTEoYykpe2NvbnN0IGE9bC5udW1lcmljRm9ybWF0LGQ9YSYmYS5jdWx0dXJlfHwiLSIsaD1hJiZhLnBhdHRlcm47aWYodHlwZW9mIGQ8InUiJiYhJG0ubGFu'@;
put 'Z3VhZ2VzKClbZF0pe2NvbnN0IGY9ZC5yZXBsYWNlKCItIiwiIiksdj0kbS5hbGxMYW5ndWFnZXM/JG0uYWxsTGFuZ3VhZ2VzW2RdOiRtW2ZdO3YmJiRtLnJlZ2lzdGVyTGFuZ3VhZ2Uodil9JG0uc2V0TGFuZ3VhZ2UoZCksYz0kbShjKS5mb3JtYXQoaHx8IjAiKX1yZXR1cm4gY31mdW5jdGlv'@;
put 'biBhSihjLGwsYSxkLGgsZix2KXtsZXQgTT1mO2lmKG0xKE0pKXtsZXQgWj1bXTtpZihBcnJheS5pc0FycmF5KHYuY2xhc3NOYW1lKSlaPXYuY2xhc3NOYW1lO2Vsc2V7dmFyIEQ7Y29uc3QgcmU9bnVsbCE9PShEPXYuY2xhc3NOYW1lKSYmdm9pZCAwIT09RD9EOiIiO3JlLmxlbmd0aCYmKFo9'@;
put 'cmUuc3BsaXQoIiAiKSl9TT1nNGUoTSx2KSxaLmluZGV4T2YoImh0TGVmdCIpPDAmJlouaW5kZXhPZigiaHRDZW50ZXIiKTwwJiZaLmluZGV4T2YoImh0UmlnaHQiKTwwJiZaLmluZGV4T2YoImh0SnVzdGlmeSIpPDAmJloucHVzaCgiaHRSaWdodCIpLFouaW5kZXhPZigiaHROdW1lcmljIik8'@;
put 'MCYmWi5wdXNoKCJodE51bWVyaWMiKSx2LmNsYXNzTmFtZT1aLmpvaW4oIiAiKSxsLmRpcj0ibHRyIn1BZyhjLGwsYSxkLGgsTSx2KX1mdW5jdGlvbiBvSihjLGwsYSxkLGgsZix2KXtBZy5hcHBseSh0aGlzLFtjLGwsYSxkLGgsZix2XSk7Y29uc3QgRD12Lmhhc2hTeW1ib2x8fCIqIjtsZXQg'@;
put 'Wj0iIjtHYSgodi5oYXNoTGVuZ3RofHxsLmlubmVySFRNTC5sZW5ndGgpLTEsKCk9PntaKz1EfSksejcobCxaKX1mdW5jdGlvbiBzSihjLGwsYSxkLGgsZix2KXtBZy5hcHBseSh0aGlzLFtjLGwsYSxkLGgsZix2XSl9ZnVuY3Rpb24gbEooYyxsLGEsZCxoLGYsdil7QWcuYXBwbHkodGhpcyxb'@;
put 'YyxsLGEsZCxoLGYsdl0pLGwuZGlyPSJsdHIifWZ1bmN0aW9uIGNUKGMsbCl7bGV0IGE9YztudWxsPT1hJiYoYT0iIiksdGhpcy5hbGxvd0VtcHR5JiYiIj09PWE/bCghMCk6dGhpcy5zdHJpY3QmJnRoaXMuc291cmNlPyJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzLnNvdXJjZT90aGlzLnNvdXJj'@;
put 'ZShhLG00ZShhLGwpKTptNGUoYSxsKSh0aGlzLnNvdXJjZSk6bCghMCl9ZnVuY3Rpb24gbTRlKGMsbCl7Y29uc3QgYT1jO3JldHVybiBmdW5jdGlvbihkKXtsZXQgaD0hMTtmb3IobGV0IGY9MCx2PWQubGVuZ3RoO2Y8djtmKyspaWYoYT09PWRbZl0pe2g9ITA7YnJlYWt9bChoKX19ZnVuY3Rp'@;
put 'b24gdjRlKGMpe2NvbnN0IGw9bmV3IERhdGUoYyk7cmV0dXJuIGlzTmFOKG5ldyBEYXRlKGAke2N9VDAwOjAwYCkuZ2V0RGF0ZSgpKT9sOm5ldyBEYXRlKGwuZ2V0VGltZSgpKzZlNCpsLmdldFRpbWV6b25lT2Zmc2V0KCkpfWZ1bmN0aW9uIEtQKGMsbCl7Y29uc3QgYT1oZmUoWXBlLHRoaXMu'@;
put 'aW5zdGFuY2UpO2xldCBkPWMsaD0hMDtudWxsPT1kJiYoZD0iIik7bGV0IGY9T28oZCx0aGlzLmRhdGVGb3JtYXR8fGEuZGVmYXVsdERhdGVGb3JtYXQsITApLmlzVmFsaWQoKSx2PU9vKG5ldyBEYXRlKGQpKS5pc1ZhbGlkKCl8fGY7aWYodGhpcy5hbGxvd0VtcHR5JiYiIj09PWQmJih2PSEw'@;
put 'LGY9ITApLHZ8fChoPSExKSwhdiYmZiYmKGg9ITApLHYmJiFmKWlmKCEwPT09dGhpcy5jb3JyZWN0Rm9ybWF0KXtjb25zdCBNPWZ1bmN0aW9uIG9zdChjLGwpe2NvbnN0IGE9T28odjRlKGMpKSxkPU9vKGMsbCksaD1jLnNlYXJjaCgvW0EtWmEtel0vZyk+LTE7bGV0IGY7cmV0dXJuIGY9YS5p'@;
put 'c1ZhbGlkKCkmJmEuZm9ybWF0KCJ4Iik9PT1kLmZvcm1hdCgieCIpfHwhZC5pc1ZhbGlkKCl8fGg/YTpkLGYuZm9ybWF0KGwpfShkLHRoaXMuZGF0ZUZvcm1hdCk7dGhpcy5pbnN0YW5jZS5zZXREYXRhQXRDZWxsKHRoaXMudmlzdWFsUm93LHRoaXMudmlzdWFsQ29sLE0sImRhdGVWYWxpZGF0'@;
put 'b3IiKSxoPSEwfWVsc2UgaD0hMTtsKGgpfWZ1bmN0aW9uIGNKKGMsbCl7Y1QuYXBwbHkodGhpcyxbYyxsXSl9ZnVuY3Rpb24gdUooYyxsKXtsZXQgYT1jO251bGw9PWEmJihhPSIiKSxsKCEoIXRoaXMuYWxsb3dFbXB0eXx8IiIhPT1hKXx8IiIhPT1hJiZtMShjKSl9YUouUkVOREVSRVJfVFlQ'@;
put 'RT0ibnVtZXJpYyIsb0ouUkVOREVSRVJfVFlQRT0icGFzc3dvcmQiLHNKLlJFTkRFUkVSX1RZUEU9InNlbGVjdCIsbEouUkVOREVSRVJfVFlQRT0idGltZSIsY1QuVkFMSURBVE9SX1RZUEU9ImF1dG9jb21wbGV0ZSIsS1AuVkFMSURBVE9SX1RZUEU9ImRhdGUiLGNKLlZBTElEQVRPUl9UWVBF'@;
put 'PSJkcm9wZG93biIsdUouVkFMSURBVE9SX1RZUEU9Im51bWVyaWMiO2NvbnN0IGNzdD1bIllZWVktTU0tRERUSEg6bW06c3MuU1NTWiIsIlgiLCJ4Il07ZnVuY3Rpb24gcVAoYyxsKXtjb25zdCBhPXRoaXMudGltZUZvcm1hdHx8Img6bW06c3MgYSI7bGV0IGQ9ITAsaD1jO251bGw9PT1oJiYo'@;
put 'aD0iIiksaD0vXlxkezMsfSQvLnRlc3QoaCk/cGFyc2VJbnQoaCwxMCk6aDtjb25zdCBmPS9eXGR7MSwyfSQvLnRlc3QoaCk7ZiYmKGgrPSI6MDAiKTtjb25zdCB2PU9vKGgsY3N0LCEwKS5pc1ZhbGlkKCk/T28oaCk6T28oaCxhKTtsZXQgTT12LmlzVmFsaWQoKSxEPU9vKGgsYSwhMCkuaXNW'@;
put 'YWxpZCgpJiYhZjtpZih0aGlzLmFsbG93RW1wdHkmJiIiPT09aCYmKE09ITAsRD0hMCksTXx8KGQ9ITEpLCFNJiZEJiYoZD0hMCksTSYmIUQpaWYoITA9PT10aGlzLmNvcnJlY3RGb3JtYXQpe2NvbnN0IFo9di5mb3JtYXQoYSk7dGhpcy5pbnN0YW5jZS5zZXREYXRhQXRDZWxsKHRoaXMudmlz'@;
put 'dWFsUm93LHRoaXMudmlzdWFsQ29sLFosInRpbWVWYWxpZGF0b3IiKSxkPSEwfWVsc2UgZD0hMTtsKGQpfXFQLlZBTElEQVRPUl9UWVBFPSJ0aW1lIjtjb25zdCBoc3Q9e0NFTExfVFlQRToiYXV0b2NvbXBsZXRlIixlZGl0b3I6SFgscmVuZGVyZXI6SV8sdmFsaWRhdG9yOmNUfSxmc3Q9e0NF'@;
put 'TExfVFlQRToiY2hlY2tib3giLGVkaXRvcjpCcGUscmVuZGVyZXI6JFh9O2Z1bmN0aW9uIGI0ZShjLGwsYSxkLGgsZix2KXtJXy5hcHBseSh0aGlzLFtjLGwsYSxkLGgsZix2XSl9YjRlLlJFTkRFUkVSX1RZUEU9ImRhdGUiO2NvbnN0IGdzdD17Q0VMTF9UWVBFOiJkYXRlIixlZGl0b3I6JHBl'@;
put 'LHJlbmRlcmVyOmI0ZSx2YWxpZGF0b3I6S1B9LG1zdD17Q0VMTF9UWVBFOiJkcm9wZG93biIsZWRpdG9yOktwZSxyZW5kZXJlcjpHWCx2YWxpZGF0b3I6Y0osZmlsdGVyOiExLHN0cmljdDohMH0sdnN0PXtDRUxMX1RZUEU6ImhhbmRzb250YWJsZSIsZWRpdG9yOlJYLHJlbmRlcmVyOnFYfSxi'@;
put 'c3Q9e0NFTExfVFlQRToibnVtZXJpYyIsZWRpdG9yOnFwZSxyZW5kZXJlcjphSix2YWxpZGF0b3I6dUosZGF0YVR5cGU6Im51bWJlciJ9LHlzdD17Q0VMTF9UWVBFOiJwYXNzd29yZCIsZWRpdG9yOlhwZSxyZW5kZXJlcjpvSixjb3B5YWJsZTohMX0sX3N0PXtDRUxMX1RZUEU6InNlbGVjdCIs'@;
put 'ZWRpdG9yOlFwZSxyZW5kZXJlcjpzSn0sd3N0PXtDRUxMX1RZUEU6InRpbWUiLGVkaXRvcjplNGUscmVuZGVyZXI6bEosdmFsaWRhdG9yOnFQfTtmdW5jdGlvbiB5NGUoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2'@;
put 'YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfWZ1bmN0aW9uIFBfKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiB4c3QoYyl7dmFyIGw9ZnVuY3Rpb24gRXN0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07'@;
put 'aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0'@;
put 'cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31mdW5jdGlv'@;
put 'biBGXyhjLGwpe3JldHVybiBjLmdldChfNGUoYyxsKSl9ZnVuY3Rpb24gXzRlKGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90'@;
put 'IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX1jb25zdCB3NGU9bmV3IE1hcChbWyJwbHVnaW4iLGZ1bmN0aW9uIG9KZShjKXtyZXR1cm4hIUlFKGMpfV0sWyJjZWxsLXR5cGUiLGFwZV0sWyJlZGl0b3IiLGRmZV0sWyJyZW5kZXJlciIsU2ZlXSxbInZhbGlkYXRvciIsTWZlXV0pLEM0ZT1TeW1i'@;
put 'b2woIm1haW5TZXR0aW5nIiksWFA9W107bGV0IGM5PW51bGw7dmFyIHU5PW5ldyBXZWFrTWFwLFM0ZT1uZXcgV2Vha1NldDtjbGFzcyBGc3tzdGF0aWMgZ2V0IFBMVUdJTl9LRVkoKXtyZXR1cm4iYmFzZSJ9c3RhdGljIGdldCBTRVRUSU5HX0tFWVMoKXtyZXR1cm5bdGhpcy5QTFVHSU5fS0VZ'@;
put 'XX1zdGF0aWMgZ2V0IERFRkFVTFRfU0VUVElOR1MoKXtyZXR1cm57fX1jb25zdHJ1Y3RvcihsKXsoZnVuY3Rpb24gU3N0KGMsbCl7eTRlKGMsbCksbC5hZGQoYyl9KSh0aGlzLFM0ZSksUF8odGhpcywiZXZlbnRNYW5hZ2VyIixuZXcgajIodGhpcykpLFBfKHRoaXMsInBsdWdpbk5hbWUiLG51'@;
put 'bGwpLFBfKHRoaXMsInBsdWdpbnNJbml0aWFsaXplZENhbGxiYWNrcyIsW10pLFBfKHRoaXMsImlzUGx1Z2luc1JlYWR5IiwhMSksUF8odGhpcywiZW5hYmxlZCIsITEpLFBfKHRoaXMsImluaXRpYWxpemVkIiwhMSksZnVuY3Rpb24gTXN0KGMsbCxhKXt5NGUoYyxsKSxsLnNldChjLGEpfSh0'@;
put 'aGlzLHU5LHt9KSxUcCh0aGlzLCJob3QiLGwse3dyaXRhYmxlOiExfSksYzk9bnVsbCx0aGlzLmhvdC5hZGRIb29rKCJhZnRlclBsdWdpbnNJbml0aWFsaXplZCIsKCk9PnRoaXMub25BZnRlclBsdWdpbnNJbml0aWFsaXplZCgpKSx0aGlzLmhvdC5hZGRIb29rKCJhZnRlclVwZGF0ZVNldHRp'@;
put 'bmdzIixhPT50aGlzLm9uVXBkYXRlU2V0dGluZ3MoYSkpLHRoaXMuaG90LmFkZEhvb2soImJlZm9yZUluaXQiLCgpPT50aGlzLmluaXQoKSl9aW5pdCgpe3RoaXMucGx1Z2luTmFtZT10aGlzLmhvdC5nZXRQbHVnaW5OYW1lKHRoaXMpO2NvbnN0IGw9dGhpcy5jb25zdHJ1Y3Rvci5QTFVHSU5f'@;
put 'REVQUyxhPUFycmF5LmlzQXJyYXkobCk/bDpbXTtpZihhLmxlbmd0aD4wKXtjb25zdCBoPVtdO2lmKGEuZm9yRWFjaChmPT57Y29uc3RbdixNXT1mLnNwbGl0KCI6Iik7aWYoIXc0ZS5oYXModikpdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIHBsdWdpbiBkZXBlbmRlbmN5IHR5cGUgIiR7dn0i'@;
put 'IHdhcyBmb3VuZC5gKTt3NGUuZ2V0KHYpKE0pfHxoLnB1c2goYCAtICR7TX0gKCR7dn0pYCl9KSxoLmxlbmd0aD4wKXtjb25zdCBmPVtgVGhlICR7dGhpcy5wbHVnaW5OYW1lfSBwbHVnaW4gcmVxdWlyZXMgdGhlIGZvbGxvd2luZyBtb2R1bGVzOlxuYCxgJHtoLmpvaW4oIlxuIil9XG5gXS5q'@;
put 'b2luKCIiKTtYUC5wdXNoKGYpfX1pZihjOXx8KGM5PW5LKCkpLGM5LmluZGV4T2YodGhpcy5wbHVnaW5OYW1lKT49MCYmYzkuc3BsaWNlKGM5LmluZGV4T2YodGhpcy5wbHVnaW5OYW1lKSwxKSx0aGlzLmhvdC5hZGRIb29rT25jZSgiYWZ0ZXJQbHVnaW5zSW5pdGlhbGl6ZWQiLCgpPT57dGhp'@;
put 'cy5pc0VuYWJsZWQmJnRoaXMuaXNFbmFibGVkKCkmJnRoaXMuZW5hYmxlUGx1Z2luKCl9KSwwPT09YzkubGVuZ3RoKXtpZihYUC5sZW5ndGg+MCl7Y29uc3QgaD1bYCR7WFAuam9pbigiXG4iKX1cbmAsIllvdSBoYXZlIHRvIGltcG9ydCBhbmQgcmVnaXN0ZXIgdGhlbSBtYW51YWxseS4iXS5q'@;
put 'b2luKCIiKTt0aHJvdyBYUC5sZW5ndGg9MCxuZXcgRXJyb3IoaCl9dGhpcy5ob3QucnVuSG9va3MoImFmdGVyUGx1Z2luc0luaXRpYWxpemVkIil9dGhpcy5pbml0aWFsaXplZD0hMH1lbmFibGVQbHVnaW4oKXt0aGlzLmVuYWJsZWQ9ITB9ZGlzYWJsZVBsdWdpbigpe3ZhciBsO251bGw9PT0o'@;
put 'bD10aGlzLmV2ZW50TWFuYWdlcil8fHZvaWQgMD09PWx8fGwuY2xlYXIoKSx0aGlzLmNsZWFySG9va3MoKSx0aGlzLmVuYWJsZWQ9ITF9Z2V0U2V0dGluZyhsKXtjb25zdCBhPXRoaXMuaG90LmdldFNldHRpbmdzKClbdGhpcy5jb25zdHJ1Y3Rvci5QTFVHSU5fS0VZXTtpZih2b2lkIDA9PT1s'@;
put 'KXJldHVybiBhO2NvbnN0IGQ9dGhpcy5jb25zdHJ1Y3Rvci5ERUZBVUxUX1NFVFRJTkdTO3ZhciBoLGY7cmV0dXJuKEFycmF5LmlzQXJyYXkoYSl8fHFvKGEpKSYmZFtDNGVdPT09bD9BcnJheS5pc0FycmF5KGEpP2E6bnVsbCE9PShoPWFbbF0pJiZ2b2lkIDAhPT1oP2g6ZFtsXTpxbyhhKSYm'@;
put 'bnVsbCE9PShmPWFbbF0pJiZ2b2lkIDAhPT1mP2Y6ZFtsXX1hZGRIb29rKGwsYSxkKXtGXyh1OSx0aGlzKVtsXT1GXyh1OSx0aGlzKVtsXXx8W107Y29uc3QgaD1GXyh1OSx0aGlzKVtsXTt0aGlzLmhvdC5hZGRIb29rKGwsYSxkKSxoLnB1c2goYSksRl8odTksdGhpcylbbF09aH1yZW1vdmVI'@;
put 'b29rcyhsKXtZbihGXyh1OSx0aGlzKVtsXXx8W10sYT0+e3RoaXMuaG90LnJlbW92ZUhvb2sobCxhKX0pfWNsZWFySG9va3MoKXtjb25zdCBsPUZfKHU5LHRoaXMpO1hvKGwsKGEsZCk9PnRoaXMucmVtb3ZlSG9va3MoZCkpLGwubGVuZ3RoPTB9Y2FsbE9uUGx1Z2luc1JlYWR5KGwpe3RoaXMu'@;
put 'aXNQbHVnaW5zUmVhZHk/bCgpOnRoaXMucGx1Z2luc0luaXRpYWxpemVkQ2FsbGJhY2tzLnB1c2gobCl9b25BZnRlclBsdWdpbnNJbml0aWFsaXplZCgpe1luKHRoaXMucGx1Z2luc0luaXRpYWxpemVkQ2FsbGJhY2tzLGw9PmwoKSksdGhpcy5wbHVnaW5zSW5pdGlhbGl6ZWRDYWxsYmFja3Mu'@;
put 'bGVuZ3RoPTAsdGhpcy5pc1BsdWdpbnNSZWFkeT0hMH1vblVwZGF0ZVNldHRpbmdzKGwpe2NvbnN0IGE9XzRlKFM0ZSx0aGlzLEFzdCkuY2FsbCh0aGlzLGwpO3RoaXMuaXNFbmFibGVkJiYodGhpcy5lbmFibGVkJiYhdGhpcy5pc0VuYWJsZWQoKSYmdGhpcy5kaXNhYmxlUGx1Z2luKCksIXRo'@;
put 'aXMuZW5hYmxlZCYmdGhpcy5pc0VuYWJsZWQoKSYmdGhpcy5lbmFibGVQbHVnaW4oKSx0aGlzLmVuYWJsZWQmJnRoaXMuaXNFbmFibGVkKCkmJmEmJnRoaXMudXBkYXRlUGx1Z2luKGwpKX11cGRhdGVQbHVnaW4oKXt9ZGVzdHJveSgpe3ZhciBsO251bGw9PT0obD10aGlzLmV2ZW50TWFuYWdl'@;
put 'cil8fHZvaWQgMD09PWx8fGwuZGVzdHJveSgpLHRoaXMuY2xlYXJIb29rcygpLFhvKHRoaXMsKGEsZCk9PnsiaG90IiE9PWQmJih0aGlzW2RdPW51bGwpfSksZGVsZXRlIHRoaXMudCxkZWxldGUgdGhpcy5ob3R9fWZ1bmN0aW9uIEFzdChjKXtpZighYylyZXR1cm4hMTtjb25zdCBsPXRoaXMu'@;
put 'Y29uc3RydWN0b3IuU0VUVElOR19LRVlTO2lmKCJib29sZWFuIj09dHlwZW9mIGwpcmV0dXJuIGw7Zm9yKGxldCBhPTA7YTxsLmxlbmd0aDthKyspaWYodm9pZCAwIT09Y1tsW2FdXSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBkOShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24ga3N0KGMp'@;
put 'e3ZhciBsPWZ1bmN0aW9uIERzdChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Ro'@;
put 'cm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3Qu'@;
put 'ZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y29uc3QgZEo9Y2xhc3MgSXN0e2NvbnN0cnVjdG9yKGwpe2Q5KHRoaXMsImhvdCIsbnVsbCksZDkodGhpcywiY29udGFpbmVyIixudWxsKSxkOSh0'@;
put 'aGlzLCJpbmplY3RlZCIsITEpLGQ5KHRoaXMsInJvd3MiLFtdKSxkOSh0aGlzLCJjb2x1bW5zIixbXSksZDkodGhpcywic2FtcGxlcyIsbnVsbCksZDkodGhpcywic2V0dGluZ3MiLHt1c2VIZWFkZXJzOiEwfSksdGhpcy5ob3Q9bH1hZGRSb3cobCxhKXtpZih0aGlzLmNvbHVtbnMubGVuZ3Ro'@;
put 'KXRocm93IG5ldyBFcnJvcigiRG9lc24ndCBzdXBwb3J0IG11bHRpLWRpbWVuc2lvbmFsIHRhYmxlIik7dGhpcy5yb3dzLmxlbmd0aHx8KHRoaXMuY29udGFpbmVyPXRoaXMuY3JlYXRlQ29udGFpbmVyKHRoaXMuaG90LnJvb3RFbGVtZW50LmNsYXNzTmFtZSkpO2NvbnN0IGQ9e3JvdzpsfTt0'@;
put 'aGlzLnJvd3MucHVzaChkKSx0aGlzLnNhbXBsZXM9YSx0aGlzLnRhYmxlPXRoaXMuY3JlYXRlVGFibGUodGhpcy5ob3QudGFibGUuY2xhc3NOYW1lKSx0aGlzLnRhYmxlLmNvbEdyb3VwLmFwcGVuZENoaWxkKHRoaXMuY3JlYXRlQ29sR3JvdXBzQ29sKGwpKSx0aGlzLnRhYmxlLnRyLmFwcGVu'@;
put 'ZENoaWxkKHRoaXMuY3JlYXRlUm93KGwpKSwwPT09bCYmVGkodGhpcy50YWJsZS50YWJsZSwiaHRHaG9zdFRhYmxlRmlyc3RSb3ciKSx0aGlzLmNvbnRhaW5lci5jb250YWluZXIuYXBwZW5kQ2hpbGQodGhpcy50YWJsZS5mcmFnbWVudCksZC50YWJsZT10aGlzLnRhYmxlLnRhYmxlfWFkZENv'@;
put 'bHVtbkhlYWRlcnNSb3cobCl7aWYobnVsbCE9dGhpcy5ob3QuZ2V0Q29sSGVhZGVyKDApKXtjb25zdCBkPXtyb3c6LTF9O3RoaXMucm93cy5wdXNoKGQpLHRoaXMuY29udGFpbmVyPXRoaXMuY3JlYXRlQ29udGFpbmVyKHRoaXMuaG90LnJvb3RFbGVtZW50LmNsYXNzTmFtZSksdGhpcy5zYW1w'@;
put 'bGVzPWwsdGhpcy50YWJsZT10aGlzLmNyZWF0ZVRhYmxlKHRoaXMuaG90LnRhYmxlLmNsYXNzTmFtZSksdGhpcy50YWJsZS5jb2xHcm91cC5hcHBlbmRDaGlsZCh0aGlzLmNyZWF0ZUNvbEdyb3Vwc0NvbCgpKSx0aGlzLmFwcGVuZENvbHVtbkhlYWRlcnNSb3coKSx0aGlzLmNvbnRhaW5lci5j'@;
put 'b250YWluZXIuYXBwZW5kQ2hpbGQodGhpcy50YWJsZS5mcmFnbWVudCksZC50YWJsZT10aGlzLnRhYmxlLnRhYmxlfX1hZGRDb2x1bW4obCxhKXtpZih0aGlzLnJvd3MubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiRG9lc24ndCBzdXBwb3J0IG11bHRpLWRpbWVuc2lvbmFsIHRhYmxlIik7dGhp'@;
put 'cy5jb2x1bW5zLmxlbmd0aHx8KHRoaXMuY29udGFpbmVyPXRoaXMuY3JlYXRlQ29udGFpbmVyKHRoaXMuaG90LnJvb3RFbGVtZW50LmNsYXNzTmFtZSkpO2NvbnN0IGQ9e2NvbDpsfTt0aGlzLmNvbHVtbnMucHVzaChkKSx0aGlzLnNhbXBsZXM9YSx0aGlzLnRhYmxlPXRoaXMuY3JlYXRlVGFi'@;
put 'bGUodGhpcy5ob3QudGFibGUuY2xhc3NOYW1lKSx0aGlzLmdldFNldHRpbmcoInVzZUhlYWRlcnMiKSYmbnVsbCE9PXRoaXMuaG90LmdldENvbEhlYWRlcihsKSYmdGhpcy5ob3Qudmlldy5hcHBlbmRDb2xIZWFkZXIobCx0aGlzLnRhYmxlLnRoLHZvaWQgMCwtMSksdGhpcy50YWJsZS50Qm9k'@;
put 'eS5hcHBlbmRDaGlsZCh0aGlzLmNyZWF0ZUNvbChsKSksdGhpcy5jb250YWluZXIuY29udGFpbmVyLmFwcGVuZENoaWxkKHRoaXMudGFibGUuZnJhZ21lbnQpLGQudGFibGU9dGhpcy50YWJsZS50YWJsZX1nZXRIZWlnaHRzKGwpe3RoaXMuaW5qZWN0ZWR8fHRoaXMuaW5qZWN0VGFibGUoKSxZ'@;
put 'bih0aGlzLnJvd3MsYT0+e2NvbnN0e2hlaWdodDpkfT1hLnRhYmxlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2woYS5yb3csTWF0aC5jZWlsKGQpKX0pfWdldFdpZHRocyhsKXt0aGlzLmluamVjdGVkfHx0aGlzLmluamVjdFRhYmxlKCksWW4odGhpcy5jb2x1bW5zLGE9Pntjb25zdHt3aWR0'@;
put 'aDpkfT1hLnRhYmxlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2woYS5jb2wsTWF0aC5jZWlsKGQpKX0pfXNldFNldHRpbmdzKGwpe3RoaXMuc2V0dGluZ3M9bH1zZXRTZXR0aW5nKGwsYSl7dGhpcy5zZXR0aW5nc3x8KHRoaXMuc2V0dGluZ3M9e30pLHRoaXMuc2V0dGluZ3NbbF09YX1nZXRT'@;
put 'ZXR0aW5ncygpe3JldHVybiB0aGlzLnNldHRpbmdzfWdldFNldHRpbmcobCl7cmV0dXJuIHRoaXMuc2V0dGluZ3M/dGhpcy5zZXR0aW5nc1tsXTpudWxsfWNyZWF0ZUNvbEdyb3Vwc0NvbChsKXtjb25zdCBhPXRoaXMuaG90LnJvb3REb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7'@;
put 'cmV0dXJuIHRoaXMuaG90Lmhhc1Jvd0hlYWRlcnMoKSYmYS5hcHBlbmRDaGlsZCh0aGlzLmNyZWF0ZUNvbEVsZW1lbnQoLTEsLTEpKSx0aGlzLnNhbXBsZXMuZm9yRWFjaChkPT57WW4oZC5zdHJpbmdzLGg9PnthLmFwcGVuZENoaWxkKHRoaXMuY3JlYXRlQ29sRWxlbWVudChoLmNvbCxsKSl9'@;
put 'KX0pLGF9Y3JlYXRlUm93KGwpe2NvbnN0e3Jvb3REb2N1bWVudDphfT10aGlzLmhvdCxkPWEuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLGg9YS5jcmVhdGVFbGVtZW50KCJ0aCIpO3JldHVybiB0aGlzLmhvdC5oYXNSb3dIZWFkZXJzKCkmJih0aGlzLmhvdC52aWV3LmFwcGVuZFJvd0hlYWRl'@;
put 'cihsLGgpLGQuYXBwZW5kQ2hpbGQoaCkpLHRoaXMuc2FtcGxlcy5mb3JFYWNoKGY9PntZbihmLnN0cmluZ3Msdj0+e2NvbnN0IE09di5jb2wsRD10aGlzLmhvdC5nZXRDZWxsTWV0YShsLE0pLFo9dGhpcy5ob3QuZ2V0Q2VsbFJlbmRlcmVyKEQpLHJlPWEuY3JlYXRlRWxlbWVudCgidGQiKTty'@;
put 'ZS5zZXRBdHRyaWJ1dGUoImdob3N0LXRhYmxlIiwxKSxaKHRoaXMuaG90LHJlLGwsTSx0aGlzLmhvdC5jb2xUb1Byb3AoTSksdi52YWx1ZSxEKSxkLmFwcGVuZENoaWxkKHJlKX0pfSksZH1hcHBlbmRDb2x1bW5IZWFkZXJzUm93KCl7Y29uc3R7cm9vdERvY3VtZW50Omx9PXRoaXMuaG90LGE9'@;
put 'bC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCksZD1bXTtpZih0aGlzLmhvdC5oYXNSb3dIZWFkZXJzKCkpe2NvbnN0IGg9bC5jcmVhdGVFbGVtZW50KCJ0aCIpO2QucHVzaChbLTEsaF0pLGEuYXBwZW5kQ2hpbGQoaCl9dGhpcy5zYW1wbGVzLmZvckVhY2goaD0+e1luKGguc3RyaW5ncyxmPT57'@;
put 'Y29uc3Qgdj1mLmNvbCxNPWwuY3JlYXRlRWxlbWVudCgidGgiKTtkLnB1c2goW3YsTV0pLGEuYXBwZW5kQ2hpbGQoTSl9KX0pLHRoaXMudGFibGUudEhlYWQuYXBwZW5kQ2hpbGQoYSksWW4oZCxoPT57Y29uc3RbZix2XT1oO3RoaXMuaG90LnZpZXcuYXBwZW5kQ29sSGVhZGVyKGYsdil9KX1j'@;
put 'cmVhdGVDb2wobCl7Y29uc3R7cm9vdERvY3VtZW50OmF9PXRoaXMuaG90LGQ9YS5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7cmV0dXJuIHRoaXMuc2FtcGxlcy5mb3JFYWNoKGg9PntZbihoLnN0cmluZ3MsZj0+e2NvbnN0IHY9Zi5yb3csTT10aGlzLmhvdC5nZXRDZWxsTWV0YSh2LGwpLEQ9'@;
put 'dGhpcy5ob3QuZ2V0Q2VsbFJlbmRlcmVyKE0pLFo9YS5jcmVhdGVFbGVtZW50KCJ0ZCIpLHJlPWEuY3JlYXRlRWxlbWVudCgidHIiKTtaLnNldEF0dHJpYnV0ZSgiZ2hvc3QtdGFibGUiLDEpLEQodGhpcy5ob3QsWix2LGwsdGhpcy5ob3QuY29sVG9Qcm9wKGwpLGYudmFsdWUsTSkscmUuYXBw'@;
put 'ZW5kQ2hpbGQoWiksZC5hcHBlbmRDaGlsZChyZSl9KX0pLGR9Y2xlYW4oKXt0aGlzLnJvd3MubGVuZ3RoPTAsdGhpcy5yb3dzWy0xXT12b2lkIDAsdGhpcy5jb2x1bW5zLmxlbmd0aD0wLHRoaXMuc2FtcGxlcyYmdGhpcy5zYW1wbGVzLmNsZWFyKCksdGhpcy5zYW1wbGVzPW51bGwsdGhpcy5y'@;
put 'ZW1vdmVUYWJsZSgpfWluamVjdFRhYmxlKCl7dGhpcy5pbmplY3RlZHx8KCgoYXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOm51bGwpfHx0aGlzLmhvdC5yb290RWxlbWVudCkuYXBwZW5kQ2hpbGQodGhpcy5jb250YWluZXIuZnJhZ21lbnQp'@;
put 'LHRoaXMuaW5qZWN0ZWQ9ITApfXJlbW92ZVRhYmxlKCl7dGhpcy5pbmplY3RlZCYmdGhpcy5jb250YWluZXIuY29udGFpbmVyLnBhcmVudE5vZGUmJih0aGlzLmNvbnRhaW5lci5jb250YWluZXIucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzLmNvbnRhaW5lci5jb250YWluZXIpLHRoaXMu'@;
put 'Y29udGFpbmVyPW51bGwsdGhpcy5pbmplY3RlZD0hMSl9Y3JlYXRlQ29sRWxlbWVudChsLGEpe2NvbnN0IGQ9dGhpcy5ob3Qucm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNvbCIpO2xldCBoPTA7YT49MCYmbD49MCYmKGg9dGhpcy5ob3QuZ2V0Q2VsbE1ldGEoYSxsKS5jb2xzcGFuKTts'@;
put 'ZXQgZj10aGlzLmhvdC5nZXRDb2xXaWR0aChsKTtpZihoPjEpZm9yKGxldCB2PWwrMTt2PGwraDt2KyspZis9dGhpcy5ob3QuZ2V0Q29sV2lkdGgodik7cmV0dXJuIGQuc3R5bGUud2lkdGg9YCR7Zn1weGAsZH1jcmVhdGVUYWJsZSgpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAw'@;
put 'IT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXToiIjtjb25zdHtyb290RG9jdW1lbnQ6YX09dGhpcy5ob3QsZD1hLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSxoPWEuY3JlYXRlRWxlbWVudCgidGFibGUiKSxmPWEuY3JlYXRlRWxlbWVudCgidGhlYWQiKSx2PWEuY3JlYXRlRWxlbWVudCgi'@;
put 'dGJvZHkiKSxNPWEuY3JlYXRlRWxlbWVudCgiY29sZ3JvdXAiKSxEPWEuY3JlYXRlRWxlbWVudCgidHIiKSxaPWEuY3JlYXRlRWxlbWVudCgidGgiKTtyZXR1cm4gdGhpcy5pc1ZlcnRpY2FsKCkmJmguYXBwZW5kQ2hpbGQoTSksdGhpcy5pc0hvcml6b250YWwoKSYmKEQuYXBwZW5kQ2hpbGQo'@;
put 'WiksZi5hcHBlbmRDaGlsZChEKSxoLnN0eWxlLnRhYmxlTGF5b3V0PSJhdXRvIixoLnN0eWxlLndpZHRoPSJhdXRvIiksaC5hcHBlbmRDaGlsZChmKSx0aGlzLmlzVmVydGljYWwoKSYmdi5hcHBlbmRDaGlsZChEKSxoLmFwcGVuZENoaWxkKHYpLFRpKGgsbCksZC5hcHBlbmRDaGlsZChoKSx7'@;
put 'ZnJhZ21lbnQ6ZCx0YWJsZTpoLHRIZWFkOmYsdEJvZHk6dixjb2xHcm91cDpNLHRyOkQsdGg6Wn19Y3JlYXRlQ29udGFpbmVyKCl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOiIiO2NvbnN0e3Jvb3REb2N1bWVudDphfT10aGlz'@;
put 'LmhvdCxkPWEuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLGg9YS5jcmVhdGVFbGVtZW50KCJkaXYiKTtyZXR1cm4gVGkoaCxgaHRHaG9zdFRhYmxlIGh0QXV0b1NpemUgJHtsLnRyaW0oKX1gKSxkLmFwcGVuZENoaWxkKGgpLHtmcmFnbWVudDpkLGNvbnRhaW5lcjpofX1pc1ZlcnRpY2FsKCl7'@;
put 'cmV0dXJuISghdGhpcy5yb3dzLmxlbmd0aHx8dGhpcy5jb2x1bW5zLmxlbmd0aCl9aXNIb3Jpem9udGFsKCl7cmV0dXJuISghdGhpcy5jb2x1bW5zLmxlbmd0aHx8dGhpcy5yb3dzLmxlbmd0aCl9fTtmdW5jdGlvbiBKUChjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gUnN0KGMpe3ZhciBsPWZ1'@;
put 'bmN0aW9uIExzdChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBU'@;
put 'eXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJv'@;
put 'cGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y2xhc3MgaEp7c3RhdGljIGdldCBTQU1QTEVfQ09VTlQoKXtyZXR1cm4gM31jb25zdHJ1Y3RvcihsKXtKUCh0aGlzLCJzYW1wbGVzIixudWxsKSxKUCh0aGlzLCJk'@;
put 'YXRhRmFjdG9yeSIsbnVsbCksSlAodGhpcywiY3VzdG9tU2FtcGxlQ291bnQiLG51bGwpLEpQKHRoaXMsImFsbG93RHVwbGljYXRlcyIsITEpLHRoaXMuZGF0YUZhY3Rvcnk9bH1nZXRTYW1wbGVDb3VudCgpe3JldHVybiB0aGlzLmN1c3RvbVNhbXBsZUNvdW50P3RoaXMuY3VzdG9tU2FtcGxl'@;
put 'Q291bnQ6aEouU0FNUExFX0NPVU5UfXNldFNhbXBsZUNvdW50KGwpe3RoaXMuY3VzdG9tU2FtcGxlQ291bnQ9bH1zZXRBbGxvd0R1cGxpY2F0ZXMobCl7dGhpcy5hbGxvd0R1cGxpY2F0ZXM9bH1nZW5lcmF0ZVJvd1NhbXBsZXMobCxhKXtyZXR1cm4gdGhpcy5nZW5lcmF0ZVNhbXBsZXMoInJv'@;
put 'dyIsYSxsKX1nZW5lcmF0ZUNvbHVtblNhbXBsZXMobCxhKXtyZXR1cm4gdGhpcy5nZW5lcmF0ZVNhbXBsZXMoImNvbCIsYSxsKX1nZW5lcmF0ZVNhbXBsZXMobCxhLGQpe2NvbnN0IGg9bmV3IE1hcCx7ZnJvbTpmLHRvOnZ9PSJudW1iZXIiPT10eXBlb2YgZD97ZnJvbTpkLHRvOmR9OmQ7cmV0'@;
put 'dXJuIEdhKGYsdixNPT57Y29uc3QgRD10aGlzLmdlbmVyYXRlU2FtcGxlKGwsYSxNKTtoLnNldChNLEQpfSksaH1nZW5lcmF0ZVNhbXBsZShsLGEsZCl7aWYoInJvdyIhPT1sJiYiY29sIiE9PWwpdGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCBzYW1wbGUgdHlwZSIpO2NvbnN0IGg9bmV3'@;
put 'IE1hcCxmPSJyb3ciPT09bD8iY29sIjoicm93Iix2PVtdO3JldHVybiBHYShhLmZyb20sYS50byxNPT57Y29uc3QgRD0icm93Ij09PWw/dGhpcy5kYXRhRmFjdG9yeShkLE0pOnRoaXMuZGF0YUZhY3RvcnkoTSxkKTtpZighMT09PUQpcmV0dXJuO2NvbnN0e3ZhbHVlOlosYnVuZGxlU2VlZDpy'@;
put 'ZX09RCxjZT0ic3RyaW5nIj09dHlwZW9mIHJlJiZyZS5sZW5ndGg+MDtsZXQgYmU7YmU9Y2U/cmU6cW8oWik/YCR7T2JqZWN0LmtleXMoWikubGVuZ3RofWA6QXJyYXkuaXNBcnJheShaKT9gJHtaLmxlbmd0aH1gOmAke2xjKFopLmxlbmd0aH1gLGguaGFzKGJlKXx8aC5zZXQoYmUse25lZWRl'@;
put 'ZDp0aGlzLmdldFNhbXBsZUNvdW50KCksc3RyaW5nczpbXX0pO2NvbnN0IEVlPWguZ2V0KGJlKTtFZS5uZWVkZWQmJighKHYuaW5kZXhPZihaKT4tMSl8fHRoaXMuYWxsb3dEdXBsaWNhdGVzfHxjZSkmJihFZS5zdHJpbmdzLnB1c2goe3ZhbHVlOlosW2ZdOk19KSx2LnB1c2goWiksRWUubmVl'@;
put 'ZGVkLT0xKX0pLGh9fWNvbnN0IE00ZT1oSjtmdW5jdGlvbiBmSihjLGwsYSl7eDRlKGMsbCksbC5zZXQoYyxhKX1mdW5jdGlvbiB4NGUoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNl'@;
put 'IG9uIGFuIG9iamVjdCIpfWZ1bmN0aW9uIHVUKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBQc3QoYyl7dmFyIGw9ZnVuY3Rpb24gRnN0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFy'@;
put 'IGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShj'@;
put 'LCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31mdW5jdGlvbiBLbShjLGwpe3JldHVybiBj'@;
put 'LmdldCh6ZChjLGwpKX1mdW5jdGlvbiBRUChjLGwsYSl7cmV0dXJuIGMuc2V0KHpkKGMsbCksYSksYX1mdW5jdGlvbiB6ZChjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJv'@;
put 'cigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9U2EuZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoIm1vZGlmeUF1dG9Db2x1bW5TaXplU2VlZCIpO2NvbnN0IHBKPSJhdXRvQ29sdW1uU2l6ZSI7dmFyIGdKPW5ldyBXZWFrTWFwLEhfPW5ldyBXZWFrTWFw'@;
put 'LE5fPW5ldyBXZWFrTWFwLE9oPW5ldyBXZWFrU2V0O2NsYXNzIGRUIGV4dGVuZHMgRnN7c3RhdGljIGdldCBQTFVHSU5fS0VZKCl7cmV0dXJuIHBKfXN0YXRpYyBnZXQgUExVR0lOX1BSSU9SSVRZKCl7cmV0dXJuIDEwfXN0YXRpYyBnZXQgU0VUVElOR19LRVlTKCl7cmV0dXJuITB9c3RhdGlj'@;
put 'IGdldCBERUZBVUxUX1NFVFRJTkdTKCl7cmV0dXJue3VzZUhlYWRlcnM6ITAsc2FtcGxpbmdSYXRpbzpudWxsLGFsbG93U2FtcGxlRHVwbGljYXRlczohMX19c3RhdGljIGdldCBDQUxDVUxBVElPTl9TVEVQKCl7cmV0dXJuIDUwfXN0YXRpYyBnZXQgU1lOQ19DQUxDVUxBVElPTl9MSU1JVCgp'@;
put 'e3JldHVybiA1MH1jb25zdHJ1Y3RvcihsKXtzdXBlcihsKSxmdW5jdGlvbiBPc3QoYyxsKXt4NGUoYyxsKSxsLmFkZChjKX0odGhpcyxPaCksdVQodGhpcywiZ2hvc3RUYWJsZSIsbmV3IGRKKHRoaXMuaG90KSksdVQodGhpcywic2FtcGxlc0dlbmVyYXRvciIsbmV3IE00ZSgoYSxkKT0+e2Nv'@;
put 'bnN0IGg9dGhpcy5ob3QudG9QaHlzaWNhbFJvdyhhKSxmPXRoaXMuaG90LnRvUGh5c2ljYWxDb2x1bW4oZCk7aWYodGhpcy5ob3Qucm93SW5kZXhNYXBwZXIuaXNIaWRkZW4oaCl8fHRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLmlzSGlkZGVuKGYpKXJldHVybiExO2NvbnN0IHY9dGhpcy5o'@;
put 'b3QuZ2V0Q2VsbE1ldGEoYSxkKTtsZXQgTT0iIjt2LnNwYW5uZWR8fChNPXRoaXMuaG90LmdldERhdGFBdENlbGwoYSxkKSk7bGV0IEQ9IiI7cmV0dXJuIHRoaXMuaG90Lmhhc0hvb2soIm1vZGlmeUF1dG9Db2x1bW5TaXplU2VlZCIpJiYoRD10aGlzLmhvdC5ydW5Ib29rcygibW9kaWZ5QXV0'@;
put 'b0NvbHVtblNpemVTZWVkIixELHYsTSkpLHt2YWx1ZTpNLGJ1bmRsZVNlZWQ6RH19KSksdVQodGhpcywiaW5Qcm9ncmVzcyIsITEpLHVUKHRoaXMsIm1lYXN1cmVkQ29sdW1ucyIsMCksdVQodGhpcywiY29sdW1uV2lkdGhzTWFwIixuZXcgWm0pLGZKKHRoaXMsZ0osITEpLGZKKHRoaXMsSF8s'@;
put 'W10pLGZKKHRoaXMsTl8sW10pLHRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLnJlZ2lzdGVyTWFwKCJhdXRvQ29sdW1uU2l6ZSIsdGhpcy5jb2x1bW5XaWR0aHNNYXApLHRoaXMuYWRkSG9vaygiYmVmb3JlQ29sdW1uUmVzaXplIiwoYSxkLGgpPT56ZChPaCx0aGlzLEE0ZSkuY2FsbCh0aGlz'@;
put 'LGEsZCxoKSl9aXNFbmFibGVkKCl7cmV0dXJuITEhPT10aGlzLmhvdC5nZXRTZXR0aW5ncygpW3BKXSYmIXRoaXMuaG90LmdldFNldHRpbmdzKCkuY29sV2lkdGhzfWVuYWJsZVBsdWdpbigpe3ZhciBsPXRoaXM7aWYodGhpcy5lbmFibGVkKXJldHVybjt0aGlzLmdob3N0VGFibGUuc2V0U2V0'@;
put 'dGluZygidXNlSGVhZGVycyIsdGhpcy5nZXRTZXR0aW5nKCJ1c2VIZWFkZXJzIikpLHRoaXMuc2FtcGxlc0dlbmVyYXRvci5zZXRBbGxvd0R1cGxpY2F0ZXModGhpcy5nZXRTZXR0aW5nKCJhbGxvd1NhbXBsZUR1cGxpY2F0ZXMiKSk7Y29uc3QgYT10aGlzLmdldFNldHRpbmcoInNhbXBsaW5n'@;
put 'UmF0aW8iKTthJiYhaXNOYU4oYSkmJnRoaXMuc2FtcGxlc0dlbmVyYXRvci5zZXRTYW1wbGVDb3VudChwYXJzZUludChhLDEwKSksdGhpcy5hZGRIb29rKCJhZnRlckxvYWREYXRhIixmdW5jdGlvbigpe2Zvcih2YXIgZD1hcmd1bWVudHMubGVuZ3RoLGg9bmV3IEFycmF5KGQpLGY9MDtmPGQ7'@;
put 'ZisrKWhbZl09YXJndW1lbnRzW2ZdO3JldHVybiB6ZChPaCxsLGpzdCkuY2FsbChsLC4uLmgpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVDaGFuZ2VSZW5kZXIiLGZ1bmN0aW9uKCl7Zm9yKHZhciBkPWFyZ3VtZW50cy5sZW5ndGgsaD1uZXcgQXJyYXkoZCksZj0wO2Y8ZDtmKyspaFtmXT1hcmd1'@;
put 'bWVudHNbZl07cmV0dXJuIHpkKE9oLGwsenN0KS5jYWxsKGwsLi4uaCl9KSx0aGlzLmFkZEhvb2soImFmdGVyRm9ybXVsYXNWYWx1ZXNVcGRhdGUiLGZ1bmN0aW9uKCl7Zm9yKHZhciBkPWFyZ3VtZW50cy5sZW5ndGgsaD1uZXcgQXJyYXkoZCksZj0wO2Y8ZDtmKyspaFtmXT1hcmd1bWVudHNb'@;
put 'Zl07cmV0dXJuIHpkKE9oLGwsWnN0KS5jYWxsKGwsLi4uaCl9KSx0aGlzLmFkZEhvb2soImJlZm9yZVJlbmRlciIsKCk9PnpkKE9oLHRoaXMsQnN0KS5jYWxsKHRoaXMpKSx0aGlzLmFkZEhvb2soIm1vZGlmeUNvbFdpZHRoIiwoZCxoKT0+dGhpcy5nZXRDb2x1bW5XaWR0aChoLGQpKSx0aGlz'@;
put 'LmFkZEhvb2soImluaXQiLCgpPT56ZChPaCx0aGlzLFVzdCkuY2FsbCh0aGlzKSksc3VwZXIuZW5hYmxlUGx1Z2luKCl9dXBkYXRlUGx1Z2luKCl7UVAoTl8sdGhpcyx0aGlzLmZpbmRDb2x1bW5zV2hlcmVIZWFkZXJXYXNDaGFuZ2VkKCkpLHN1cGVyLnVwZGF0ZVBsdWdpbigpfWRpc2FibGVQ'@;
put 'bHVnaW4oKXtzdXBlci5kaXNhYmxlUGx1Z2luKCksdGhpcy5hZGRIb29rKCJiZWZvcmVDb2x1bW5SZXNpemUiLChsLGEsZCk9PnpkKE9oLHRoaXMsQTRlKS5jYWxsKHRoaXMsbCxhLGQpKX1jYWxjdWxhdGVWaXNpYmxlQ29sdW1uc1dpZHRoKCl7aWYoIXRoaXMuaG90LmNvdW50Um93cygpKXJl'@;
put 'dHVybjtjb25zdCBsPXRoaXMuZ2V0Rmlyc3RWaXNpYmxlQ29sdW1uKCksYT10aGlzLmdldExhc3RWaXNpYmxlQ29sdW1uKCk7LTEhPT1sJiYtMSE9PWEmJnRoaXMuY2FsY3VsYXRlQ29sdW1uc1dpZHRoKHtmcm9tOmwsdG86YX0sdm9pZCAwLHRoaXMuaG90LmZvcmNlRnVsbFJlbmRlcil9Y2Fs'@;
put 'Y3VsYXRlQ29sdW1uc1dpZHRoKCl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOntmcm9tOjAsdG86dGhpcy5ob3QuY291bnRDb2xzKCktMX0sYT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1'@;
put 'bWVudHNbMV06e2Zyb206MCx0bzp0aGlzLmhvdC5jb3VudFJvd3MoKS0xfSxkPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdJiZhcmd1bWVudHNbMl07Y29uc3QgaD0ibnVtYmVyIj09dHlwZW9mIGw/e2Zyb206bCx0bzpsfTpsLGY9Im51bWJlciI9PXR5cGVvZiBh'@;
put 'P3tmcm9tOmEsdG86YX06YTtHYShoLmZyb20saC50byx2PT57bGV0IE09dGhpcy5ob3QudG9QaHlzaWNhbENvbHVtbih2KTtudWxsPT09TSYmKE09diksKGR8fG51bGw9PT10aGlzLmNvbHVtbldpZHRoc01hcC5nZXRWYWx1ZUF0SW5kZXgoTSkmJiF0aGlzLmhvdC5fZ2V0Q29sV2lkdGhGcm9t'@;
put 'U2V0dGluZ3MoTSkpJiZ6ZChPaCx0aGlzLEU0ZSkuY2FsbCh0aGlzLHYsZil9KSx0aGlzLmdob3N0VGFibGUuY29sdW1ucy5sZW5ndGgmJih6ZChPaCx0aGlzLFQ0ZSkuY2FsbCh0aGlzKSx0aGlzLm1lYXN1cmVkQ29sdW1ucz1oLnRvKzEsdGhpcy5naG9zdFRhYmxlLmNsZWFuKCkpfWNhbGN1'@;
put 'bGF0ZUFsbENvbHVtbnNXaWR0aCgpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp7ZnJvbTowLHRvOnRoaXMuaG90LmNvdW50Um93cygpLTF9LGE9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0mJmFy'@;
put 'Z3VtZW50c1sxXSxkPTA7Y29uc3QgaD10aGlzLmhvdC5jb3VudENvbHMoKS0xO2xldCBmPW51bGw7dGhpcy5pblByb2dyZXNzPSEwO2NvbnN0IHY9KCk9PntpZighdGhpcy5ob3QpcmV0dXJuIFRFKGYpLHZvaWQodGhpcy5pblByb2dyZXNzPSExKTt0aGlzLmNhbGN1bGF0ZUNvbHVtbnNXaWR0'@;
put 'aCh7ZnJvbTpkLHRvOk1hdGgubWluKGQrZFQuQ0FMQ1VMQVRJT05fU1RFUCxoKX0sbCxhKSxkPWQrZFQuQ0FMQ1VMQVRJT05fU1RFUCsxLGQ8aD9mPUVFKHYpOihURShmKSx0aGlzLmluUHJvZ3Jlc3M9ITEsdGhpcy5ob3Qudmlldy5hZGp1c3RFbGVtZW50c1NpemUoKSl9LE09dGhpcy5nZXRT'@;
put 'eW5jQ2FsY3VsYXRpb25MaW1pdCgpO00+PTAmJih0aGlzLmNhbGN1bGF0ZUNvbHVtbnNXaWR0aCh7ZnJvbTowLHRvOk19LGwsYSksZD1NKzEpLGQ8aD92KCk6dGhpcy5pblByb2dyZXNzPSExfXJlY2FsY3VsYXRlQWxsQ29sdW1uc1dpZHRoKCl7dGhpcy5ob3Qudmlldy5pc1Zpc2libGUoKSYm'@;
put 'dGhpcy5jYWxjdWxhdGVBbGxDb2x1bW5zV2lkdGgoe2Zyb206MCx0bzp0aGlzLmhvdC5jb3VudFJvd3MoKS0xfSwhMCl9Z2V0U3luY0NhbGN1bGF0aW9uTGltaXQoKXtjb25zdCBsPXRoaXMuaG90LmdldFNldHRpbmdzKClbcEpdO2xldCBhPWRULlNZTkNfQ0FMQ1VMQVRJT05fTElNSVQ7Y29u'@;
put 'c3QgZD10aGlzLmhvdC5jb3VudENvbHMoKS0xO3JldHVybiBxbyhsKSYmKGE9bC5zeW5jTGltaXQsZiQoYSk/YT1KJChkLGEpOmE+Pj0wKSxNYXRoLm1pbihhLGQpfWdldENvbHVtbldpZHRoKGwsYSl7bGV0IGQ9IShhcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXSl8'@;
put 'fGFyZ3VtZW50c1syXSxoPWE7cmV0dXJuIHZvaWQgMD09PWgmJihoPXRoaXMuY29sdW1uV2lkdGhzTWFwLmdldFZhbHVlQXRJbmRleCh0aGlzLmhvdC50b1BoeXNpY2FsQ29sdW1uKGwpKSxkJiYibnVtYmVyIj09dHlwZW9mIGgmJihoPU1hdGgubWF4KGgsX18pKSksaH1nZXRGaXJzdFZpc2li'@;
put 'bGVDb2x1bW4oKXt2YXIgbDtyZXR1cm4gbnVsbCE9PShsPXRoaXMuaG90LmdldEZpcnN0UmVuZGVyZWRWaXNpYmxlQ29sdW1uKCkpJiZ2b2lkIDAhPT1sP2w6LTF9Z2V0TGFzdFZpc2libGVDb2x1bW4oKXt2YXIgbDtyZXR1cm4gbnVsbCE9PShsPXRoaXMuaG90LmdldExhc3RSZW5kZXJlZFZp'@;
put 'c2libGVDb2x1bW4oKSkmJnZvaWQgMCE9PWw/bDotMX1maW5kQ29sdW1uc1doZXJlSGVhZGVyV2FzQ2hhbmdlZCgpe3JldHVybiB0aGlzLmhvdC5nZXRDb2xIZWFkZXIoKS5yZWR1Y2UoKGQsaCxmKT0+e2NvbnN0IHY9S20oSF8sdGhpcykubGVuZ3RoO3JldHVybih2LTE8Znx8S20oSF8sdGhp'@;
put 'cylbZl0hPT1oKSYmZC5wdXNoKHRoaXMuaG90LnRvVmlzdWFsQ29sdW1uKGYpKSx2LTE8Zj9LbShIXyx0aGlzKS5wdXNoKGgpOkttKEhfLHRoaXMpW2ZdPWgsZH0sW10pfWNsZWFyQ2FjaGUobCl7QXJyYXkuaXNBcnJheShsKT90aGlzLmhvdC5iYXRjaEV4ZWN1dGlvbigoKT0+e2wuZm9yRWFj'@;
put 'aChhPT57dGhpcy5jb2x1bW5XaWR0aHNNYXAuc2V0VmFsdWVBdEluZGV4KGEsbnVsbCl9KX0sITApOnRoaXMuY29sdW1uV2lkdGhzTWFwLmNsZWFyKCl9aXNOZWVkUmVjYWxjdWxhdGUoKXtyZXR1cm4hIXRoaXMuY29sdW1uV2lkdGhzTWFwLmdldFZhbHVlcygpLnNsaWNlKDAsdGhpcy5tZWFz'@;
put 'dXJlZENvbHVtbnMpLmZpbHRlcihsPT5udWxsPT09bCkubGVuZ3RofWRlc3Ryb3koKXt0aGlzLmdob3N0VGFibGUuY2xlYW4oKSxzdXBlci5kZXN0cm95KCl9fWZ1bmN0aW9uIFZzdChjKXtjb25zdCBsPXtmcm9tOjAsdG86dGhpcy5ob3QuY291bnRSb3dzKCktMX07Yy5mb3JFYWNoKGE9Pntj'@;
put 'b25zdCBkPXRoaXMuaG90LnRvUGh5c2ljYWxDb2x1bW4oYSk7bnVsbCE9PWQmJih0aGlzLmhvdC5fZ2V0Q29sV2lkdGhGcm9tU2V0dGluZ3MoZCl8fHpkKE9oLHRoaXMsRTRlKS5jYWxsKHRoaXMsYSxsKSl9KSx0aGlzLmdob3N0VGFibGUuY29sdW1ucy5sZW5ndGgmJih6ZChPaCx0aGlzLFQ0'@;
put 'ZSkuY2FsbCh0aGlzKSx0aGlzLmdob3N0VGFibGUuY2xlYW4oKSl9ZnVuY3Rpb24gRTRlKGMsbCl7dGhpcy5zYW1wbGVzR2VuZXJhdG9yLmdlbmVyYXRlQ29sdW1uU2FtcGxlcyhjLGwpLmZvckVhY2goKGQsaCk9PnRoaXMuZ2hvc3RUYWJsZS5hZGRDb2x1bW4oaCxkKSl9ZnVuY3Rpb24gVDRl'@;
put 'KCl7dGhpcy5ob3QuYmF0Y2hFeGVjdXRpb24oKCk9Pnt0aGlzLmdob3N0VGFibGUuZ2V0V2lkdGhzKChjLGwpPT57Y29uc3QgYT10aGlzLmhvdC50b1BoeXNpY2FsQ29sdW1uKGMpO3RoaXMuY29sdW1uV2lkdGhzTWFwLnNldFZhbHVlQXRJbmRleChhLGwpfSl9LCEwKX1mdW5jdGlvbiBCc3Qo'@;
put 'KXt0aGlzLmNhbGN1bGF0ZVZpc2libGVDb2x1bW5zV2lkdGgoKSx0aGlzLmluUHJvZ3Jlc3N8fCh6ZChPaCx0aGlzLFZzdCkuY2FsbCh0aGlzLEttKE5fLHRoaXMpKSxRUChOXyx0aGlzLFtdKSl9ZnVuY3Rpb24ganN0KGMsbCl7bHx8dGhpcy5yZWNhbGN1bGF0ZUFsbENvbHVtbnNXaWR0aCgp'@;
put 'fWZ1bmN0aW9uIHpzdChjKXtjb25zdCBsPWMucmVkdWNlKChhLGQpPT57bGV0WyxoXT1kO2NvbnN0IGY9dGhpcy5ob3QucHJvcFRvQ29sKGgpO3JldHVybiBOdW1iZXIuaXNJbnRlZ2VyKGYpJiYtMT09PWEuaW5kZXhPZihmKSYmYS5wdXNoKGYpLGF9LFtdKTtLbShOXyx0aGlzKS5wdXNoKC4u'@;
put 'LmwpfWZ1bmN0aW9uIEE0ZShjLGwsYSl7bGV0IGQ9YztyZXR1cm4gYSYmKHRoaXMuY2FsY3VsYXRlQ29sdW1uc1dpZHRoKGwsdm9pZCAwLCEwKSxkPXRoaXMuZ2V0Q29sdW1uV2lkdGgobCx2b2lkIDAsITEpKSxkfWZ1bmN0aW9uIFVzdCgpe1FQKEhfLHRoaXMsdGhpcy5ob3QuZ2V0Q29sSGVh'@;
put 'ZGVyKCkpLHRoaXMucmVjYWxjdWxhdGVBbGxDb2x1bW5zV2lkdGgoKSxRUChnSix0aGlzLCEwKX1mdW5jdGlvbiBac3QoYyl7aWYoIUttKGdKLHRoaXMpKXJldHVybjtjb25zdCBsPWMucmVkdWNlKChhLGQpPT57dmFyIGg7Y29uc3QgZj1udWxsPT09KGg9ZC5hZGRyZXNzKXx8dm9pZCAwPT09'@;
put 'aD92b2lkIDA6aC5jb2w7aWYoTnVtYmVyLmlzSW50ZWdlcihmKSl7Y29uc3Qgdj10aGlzLmhvdC50b1Zpc3VhbENvbHVtbihmKTstMT09PWEuaW5kZXhPZih2KSYmYS5wdXNoKHYpfXJldHVybiBhfSxbXSk7S20oTl8sdGhpcykucHVzaCguLi5sKX1jb25zdCBoOT17aG9yaXpvbnRhbDoiaG9y'@;
put 'aXpvbnRhbCIsdmVydGljYWw6InZlcnRpY2FsIn07ZnVuY3Rpb24gVl8oYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIEtzdChjKXt2YXIgbD1mdW5jdGlvbiBxc3QoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2'@;
put 'b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5n'@;
put 'Ok51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWZ1bmN0aW9uIGhU'@;
put 'KGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX1TYS5nZXRTaW5nbGV0b24oKS5y'@;
put 'ZWdpc3RlcigibW9kaWZ5QXV0b2ZpbGxSYW5nZSIpLFNhLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJiZWZvcmVBdXRvZmlsbCIpLFNhLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJhZnRlckF1dG9maWxsIik7Y29uc3QgSnN0PVsiZmlsbEhhbmRsZSJdO3ZhciBCXz1uZXcgV2Vha1NldDtj'@;
put 'bGFzcyB0bHQgZXh0ZW5kcyBGc3tjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksZnVuY3Rpb24gR3N0KGMsbCl7KGZ1bmN0aW9uICRzdChjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVu'@;
put 'dHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9KShjLGwpLGwuYWRkKGMpfSh0aGlzLEJfKSxWXyh0aGlzLCJhZGRpbmdTdGFydGVkIiwhMSksVl8odGhpcywibW91c2VEb3duT25DZWxsQ29ybmVyIiwhMSksVl8odGhpcywibW91c2VEcmFnT3V0c2lkZSIsITEpLFZfKHRoaXMsImhhbmRsZURyYWdn'@;
put 'ZWRDZWxscyIsMCksVl8odGhpcywiZGlyZWN0aW9ucyIsW10pLFZfKHRoaXMsImF1dG9JbnNlcnRSb3ciLCExKX1zdGF0aWMgZ2V0IFBMVUdJTl9LRVkoKXtyZXR1cm4iYXV0b2ZpbGwifXN0YXRpYyBnZXQgUExVR0lOX1BSSU9SSVRZKCl7cmV0dXJuIDIwfXN0YXRpYyBnZXQgU0VUVElOR19L'@;
put 'RVlTKCl7cmV0dXJuWyJhdXRvZmlsbCIsLi4uSnN0XX1pc0VuYWJsZWQoKXtyZXR1cm4gdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5maWxsSGFuZGxlfWVuYWJsZVBsdWdpbigpe3RoaXMuZW5hYmxlZHx8KHRoaXMubWFwU2V0dGluZ3MoKSx0aGlzLnJlZ2lzdGVyRXZlbnRzKCksdGhpcy5hZGRI'@;
put 'b29rKCJhZnRlck9uQ2VsbENvcm5lck1vdXNlRG93biIsbD0+aFQoQl8sdGhpcyxybHQpLmNhbGwodGhpcyxsKSksdGhpcy5hZGRIb29rKCJhZnRlck9uQ2VsbENvcm5lckRibENsaWNrIixsPT5oVChCXyx0aGlzLG5sdCkuY2FsbCh0aGlzLGwpKSx0aGlzLmFkZEhvb2soImJlZm9yZU9uQ2Vs'@;
put 'bE1vdXNlT3ZlciIsKGwsYSk9PmhUKEJfLHRoaXMsaWx0KS5jYWxsKHRoaXMsYSkpLHN1cGVyLmVuYWJsZVBsdWdpbigpKX11cGRhdGVQbHVnaW4oKXt0aGlzLmRpc2FibGVQbHVnaW4oKSx0aGlzLmVuYWJsZVBsdWdpbigpLHN1cGVyLnVwZGF0ZVBsdWdpbigpfWRpc2FibGVQbHVnaW4oKXt0'@;
put 'aGlzLmNsZWFyTWFwcGVkU2V0dGluZ3MoKSxzdXBlci5kaXNhYmxlUGx1Z2luKCl9Z2V0U2VsZWN0aW9uRGF0YSgpe2NvbnN0IGw9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSx7cm93OmEsY29sOmR9PWwuZ2V0VG9wU3RhcnRDb3JuZXIoKSx7cm93OmgsY29sOmZ9PWwuZ2V0Qm90'@;
put 'dG9tRW5kQ29ybmVyKCksdj10aGlzLmhvdC5ydW5Ib29rcygibW9kaWZ5Q29weWFibGVSYW5nZSIsW3tzdGFydFJvdzphLHN0YXJ0Q29sOmQsZW5kUm93OmgsZW5kQ29sOmZ9XSksTT1bXSxEPVtdLFo9W107cmV0dXJuIFluKHYscmU9Pntmb3IobGV0IGNlPXJlLnN0YXJ0Um93O2NlPD1yZS5l'@;
put 'bmRSb3c7Y2UrPTEpLTE9PT1NLmluZGV4T2YoY2UpJiZNLnB1c2goY2UpO2ZvcihsZXQgY2U9cmUuc3RhcnRDb2w7Y2U8PXJlLmVuZENvbDtjZSs9MSktMT09PUQuaW5kZXhPZihjZSkmJkQucHVzaChjZSl9KSxZbihNLHJlPT57Y29uc3QgY2U9W107WW4oRCxiZT0+e2NlLnB1c2godGhpcy5o'@;
put 'b3QuZ2V0Q29weWFibGVEYXRhKHJlLGJlKSl9KSxaLnB1c2goY2UpfSksWn1maWxsSW4oKXtpZih0aGlzLmhvdC5zZWxlY3Rpb24uaGlnaGxpZ2h0LmdldEZpbGwoKS5pc0VtcHR5KCkpcmV0dXJuITE7Y29uc3RbbCxhLGQsaF09dGhpcy5ob3Quc2VsZWN0aW9uLmhpZ2hsaWdodC5nZXRGaWxs'@;
put 'KCkuZ2V0VmlzdWFsQ29ybmVycygpLGY9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSx2PWYuZ2V0VG9wU3RhcnRDb3JuZXIoKSxNPWYuZ2V0Qm90dG9tRW5kQ29ybmVyKCk7dGhpcy5yZXNldFNlbGVjdGlvbk9mRHJhZ2dlZEFyZWEoKTtjb25zdCBEPVt2LnJvdyx2LmNvbCxNLnJv'@;
put 'dyxNLmNvbF0sWj10aGlzLmhvdC5ydW5Ib29rcygibW9kaWZ5QXV0b2ZpbGxSYW5nZSIsW01hdGgubWluKHYucm93LGwpLE1hdGgubWluKHYuY29sLGEpLE1hdGgubWF4KE0ucm93LGQpLE1hdGgubWF4KE0uY29sLGgpXSxEKSx7ZGlyZWN0aW9uT2ZEcmFnOnJlLHN0YXJ0T2ZEcmFnQ29vcmRz'@;
put 'OmNlLGVuZE9mRHJhZ0Nvb3JkczpiZX09ZnVuY3Rpb24gV3N0KGMsbCxhKXtsZXQgZCxoLGY7cmV0dXJuIGxbMF09PT1jWzBdJiZsWzFdPGNbMV0/KGY9ImxlZnQiLGQ9YShsWzBdLGxbMV0pLGg9YShsWzJdLGNbMV0tMSkpOmxbMl09PT1jWzJdJiZsWzBdPT09Y1swXSYmbFszXT5jWzNdPyhm'@;
put 'PSJyaWdodCIsZD1hKGxbMF0sY1szXSsxKSxoPWEobFsyXSxsWzNdKSk6bFswXTxjWzBdJiZsWzFdPT09Y1sxXT8oZj0idXAiLGQ9YShsWzBdLGxbMV0pLGg9YShjWzBdLTEsbFszXSkpOmxbMl0+Y1syXSYmbFsxXT09PWNbMV0mJihmPSJkb3duIixkPWEoY1syXSsxLGxbMV0pLGg9YShsWzJd'@;
put 'LGxbM10pKSxkJiZkLm5vcm1hbGl6ZSgpLGgmJmgubm9ybWFsaXplKCkse2RpcmVjdGlvbk9mRHJhZzpmLHN0YXJ0T2ZEcmFnQ29vcmRzOmQsZW5kT2ZEcmFnQ29vcmRzOmh9fShELFosKEVlLEJlKT0+dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMoRWUsQmUpKTtpZihjZSYmY2Uucm93Pi0x'@;
put 'JiZjZS5jb2w+LTEpe2NvbnN0IEVlPXRoaXMuZ2V0U2VsZWN0aW9uRGF0YSgpLEJlPWYuY2xvbmUoKSxxZT10aGlzLmhvdC5fY3JlYXRlQ2VsbFJhbmdlKGNlLGNlLGJlKSxydD10aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlQXV0b2ZpbGwiLEVlLEJlLHFlLHJlKTtpZighMT09PXJ0KXJldHVy'@;
put 'biB0aGlzLmhvdC5zZWxlY3Rpb24uaGlnaGxpZ2h0LmdldEZpbGwoKS5jbGVhcigpLHRoaXMuaG90LnJlbmRlcigpLCExO2xldCBwdD1ydDtjb25zdCBkdD1ydDtpZihbInVwIiwibGVmdCJdLmluZGV4T2YocmUpPi0xJiYoMSE9PWR0Lmxlbmd0aHx8MCE9PWR0WzBdLmxlbmd0aCkpaWYocHQ9'@;
put 'W10sInVwIj09PXJlKXtjb25zdCBKdD1iZS5yb3ctY2Uucm93KzEsdm49SnQlZHQubGVuZ3RoO2ZvcihsZXQgQ249MDtDbjxKdDtDbisrKXB0LnB1c2goZHRbKENuKyhkdC5sZW5ndGgtdm4pKSVkdC5sZW5ndGhdKX1lbHNle2NvbnN0IEp0PWJlLmNvbC1jZS5jb2wrMSx2bj1KdCVkdFswXS5s'@;
put 'ZW5ndGg7Zm9yKGxldCBDbj0wO0NuPGR0Lmxlbmd0aDtDbisrKXtwdC5wdXNoKFtdKTtmb3IobGV0IHRuPTA7dG48SnQ7dG4rKylwdFtDbl0ucHVzaChkdFtDbl1bKHRuKyhkdFtDbl0ubGVuZ3RoLXZuKSklZHRbQ25dLmxlbmd0aF0pfX10aGlzLmhvdC5wb3B1bGF0ZUZyb21BcnJheShjZS5y'@;
put 'b3csY2UuY29sLHB0LGJlLnJvdyxiZS5jb2wsYCR7dGhpcy5wbHVnaW5OYW1lfS5maWxsYCxudWxsKSx0aGlzLnNldFNlbGVjdGlvbihaKSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJBdXRvZmlsbCIscHQsQmUscWUscmUpLHRoaXMuaG90LnJlbmRlcigpfWVsc2UgdGhpcy5ob3Qudmlldy5y'@;
put 'ZW5kZXIoKTtyZXR1cm4hMH1yZWR1Y2VTZWxlY3Rpb25BcmVhSWZOZWVkZWQobCl7cmV0dXJuIGwucm93PDAmJihsLnJvdz0wKSxsLmNvbDwwJiYobC5jb2w9MCksbH1nZXRDb29yZHNPZkRyYWdBbmREcm9wQm9yZGVycyhsKXtjb25zdCBhPXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0'@;
put 'KCksZD1hLmdldEJvdHRvbUVuZENvcm5lcigpO2xldCBoPWw7aWYodGhpcy5kaXJlY3Rpb25zLmluY2x1ZGVzKGg5LnZlcnRpY2FsKSYmdGhpcy5kaXJlY3Rpb25zLmluY2x1ZGVzKGg5Lmhvcml6b250YWwpKXtjb25zdCBmPWEuZ2V0VG9wU3RhcnRDb3JuZXIoKTsoZC5jb2w8PWwuY29sfHxm'@;
put 'LmNvbD49bC5jb2wpJiYoaD10aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhkLnJvdyxsLmNvbCkpLChkLnJvdzxsLnJvd3x8Zi5yb3c+bC5yb3cpJiYoaD10aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhsLnJvdyxkLmNvbCkpfWVsc2UgaWYodGhpcy5kaXJlY3Rpb25zLmluY2x1ZGVzKGg5'@;
put 'LnZlcnRpY2FsKSloPXRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKGwucm93LGQuY29sKTtlbHNle2lmKCF0aGlzLmRpcmVjdGlvbnMuaW5jbHVkZXMoaDkuaG9yaXpvbnRhbCkpcmV0dXJuO2g9dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMoZC5yb3csbC5jb2wpfXJldHVybiB0aGlzLnJl'@;
put 'ZHVjZVNlbGVjdGlvbkFyZWFJZk5lZWRlZChoKX1zaG93Qm9yZGVyKGwpe2NvbnN0IGE9dGhpcy5nZXRDb29yZHNPZkRyYWdBbmREcm9wQm9yZGVycyhsKTthJiZ0aGlzLnJlZHJhd0JvcmRlcnMoYSl9YWRkUm93KCl7dGhpcy5ob3QuX3JlZ2lzdGVyVGltZW91dCgoKT0+e3RoaXMuaG90LmFs'@;
put 'dGVyKCJpbnNlcnRfcm93X2JlbG93Iix2b2lkIDAsMSxgJHt0aGlzLnBsdWdpbk5hbWV9LmZpbGxgKSx0aGlzLmFkZGluZ1N0YXJ0ZWQ9ITF9LDIwMCl9YWRkTmV3Um93SWZOZWVkZWQoKXtpZighdGhpcy5ob3Quc2VsZWN0aW9uLmhpZ2hsaWdodC5nZXRGaWxsKCkuaXNFbXB0eSgpJiYhMT09'@;
put 'PXRoaXMuYWRkaW5nU3RhcnRlZCYmdGhpcy5hdXRvSW5zZXJ0Um93KXtjb25zdCBsPXRoaXMuaG90LmdldFNlbGVjdGVkTGFzdCgpLGE9dGhpcy5ob3Quc2VsZWN0aW9uLmhpZ2hsaWdodC5nZXRGaWxsKCkuZ2V0VmlzdWFsQ29ybmVycygpLGQ9dGhpcy5ob3QuY291bnRSb3dzKCk7bFsyXTxk'@;
put 'LTEmJmFbMl09PT1kLTEmJih0aGlzLmFkZGluZ1N0YXJ0ZWQ9ITAsdGhpcy5hZGRSb3coKSl9fWdldEluZGV4T2ZMYXN0QWRqYWNlbnRGaWxsZWRJblJvdyhsKXtjb25zdCBhPXRoaXMuaG90LmdldERhdGEoKSxkPXRoaXMuaG90LmNvdW50Um93cygpO2xldCBoO2ZvcihsZXQgZj1sWzJdKzE7'@;
put 'ZjxkO2YrKyl7Zm9yKGxldCBEPWxbMV07RDw9bFszXTtEKyspaWYoIVVjKGFbZl1bRF0pKXJldHVybi0xO2NvbnN0IE09YVtmXVtsWzNdKzFdOyghVWMoYVtmXVtsWzFdLTFdKXx8IVVjKE0pKSYmKGg9Zil9cmV0dXJuIGh9YWRkU2VsZWN0aW9uRnJvbVN0YXJ0QXJlYVRvU3BlY2lmaWNSb3dJ'@;
put 'bmRleChsLGEpe3RoaXMuaG90LnNlbGVjdGlvbi5oaWdobGlnaHQuZ2V0RmlsbCgpLmNsZWFyKCkuYWRkKHRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKGxbMF0sbFsxXSkpLmFkZCh0aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhhLGxbM10pKS5jb21taXQoKX1zZXRTZWxlY3Rpb24obCl7'@;
put 'dGhpcy5ob3Quc2VsZWN0Q2VsbCguLi55cyhsLGE9Pk1hdGgubWF4KGEsMCkpLCExLCExKX1zZWxlY3RBZGphY2VudCgpe2NvbnN0IGw9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRMYXN0KCksYT10aGlzLmdldEluZGV4T2ZMYXN0QWRqYWNlbnRGaWxsZWRJblJvdyhsKTtyZXR1cm4tMSE9PWEmJnZv'@;
put 'aWQgMCE9PWEmJih0aGlzLmFkZFNlbGVjdGlvbkZyb21TdGFydEFyZWFUb1NwZWNpZmljUm93SW5kZXgobCxhKSwhMCl9cmVzZXRTZWxlY3Rpb25PZkRyYWdnZWRBcmVhKCl7dGhpcy5oYW5kbGVEcmFnZ2VkQ2VsbHM9MCx0aGlzLmhvdC5zZWxlY3Rpb24uaGlnaGxpZ2h0LmdldEZpbGwoKS5j'@;
put 'bGVhcigpfXJlZHJhd0JvcmRlcnMobCl7dGhpcy5ob3Quc2VsZWN0aW9uLmhpZ2hsaWdodC5nZXRGaWxsKCkuY2xlYXIoKS5hZGQodGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKS5mcm9tKS5hZGQodGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKS50bykuYWRkKGwpLmNvbW1p'@;
put 'dCgpLHRoaXMuaG90LnZpZXcucmVuZGVyKCl9Z2V0SWZNb3VzZVdhc0RyYWdnZWRPdXRzaWRlKGwpe2NvbnN0e2RvY3VtZW50RWxlbWVudDphfT10aGlzLmhvdC5yb290RG9jdW1lbnQsZD1VMCh0aGlzLmhvdC50YWJsZSkudG9wLSh0aGlzLmhvdC5yb290V2luZG93LnBhZ2VZT2Zmc2V0fHxh'@;
put 'LnNjcm9sbFRvcCkreHUodGhpcy5ob3QudGFibGUpLGg9VTAodGhpcy5ob3QudGFibGUpLmxlZnQtKHRoaXMuaG90LnJvb3RXaW5kb3cucGFnZVhPZmZzZXR8fGEuc2Nyb2xsTGVmdCkrc3UodGhpcy5ob3QudGFibGUpO3JldHVybiBsLmNsaWVudFk+ZCYmbC5jbGllbnRYPD1ofXJlZ2lzdGVy'@;
put 'RXZlbnRzKCl7Y29uc3R7ZG9jdW1lbnRFbGVtZW50Omx9PXRoaXMuaG90LnJvb3REb2N1bWVudDt0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGwsIm1vdXNldXAiLCgpPT5oVChCXyx0aGlzLGFsdCkuY2FsbCh0aGlzKSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0'@;
put 'ZW5lcihsLCJtb3VzZW1vdmUiLGE9PmhUKEJfLHRoaXMsb2x0KS5jYWxsKHRoaXMsYSkpfWNsZWFyTWFwcGVkU2V0dGluZ3MoKXt0aGlzLmRpcmVjdGlvbnMubGVuZ3RoPTAsdGhpcy5hdXRvSW5zZXJ0Um93PSExfW1hcFNldHRpbmdzKCl7Y29uc3QgbD1mdW5jdGlvbiBZc3QoYyl7Y29uc3Qg'@;
put 'bD17fTtyZXR1cm4hMD09PWM/KGwuZGlyZWN0aW9ucz1PYmplY3Qua2V5cyhoOSksbC5hdXRvSW5zZXJ0Um93PSEwKTpxbyhjKT8obC5hdXRvSW5zZXJ0Um93PSEhUGEoYy5hdXRvSW5zZXJ0Um93KSYmYy5kaXJlY3Rpb24hPT1oOS5ob3Jpem9udGFsJiZjLmF1dG9JbnNlcnRSb3csbC5kaXJl'@;
put 'Y3Rpb25zPVBhKGMuZGlyZWN0aW9uKT9bYy5kaXJlY3Rpb25dOk9iamVjdC5rZXlzKGg5KSk6InN0cmluZyI9PXR5cGVvZiBjPyhsLmRpcmVjdGlvbnM9W2NdLGwuYXV0b0luc2VydFJvdz0hMCk6KGwuZGlyZWN0aW9ucz1bXSxsLmF1dG9JbnNlcnRSb3c9ITEpLGx9KHRoaXMuaG90LmdldFNl'@;
put 'dHRpbmdzKCkuZmlsbEhhbmRsZSk7dGhpcy5kaXJlY3Rpb25zPWwuZGlyZWN0aW9ucyx0aGlzLmF1dG9JbnNlcnRSb3c9bC5hdXRvSW5zZXJ0Um93fWRlc3Ryb3koKXtzdXBlci5kZXN0cm95KCl9fWZ1bmN0aW9uIG5sdCgpe3RoaXMuc2VsZWN0QWRqYWNlbnQoKSYmdGhpcy5maWxsSW4oKX1m'@;
put 'dW5jdGlvbiBybHQoKXt0aGlzLmhhbmRsZURyYWdnZWRDZWxscz0xLHRoaXMubW91c2VEb3duT25DZWxsQ29ybmVyPSEwfWZ1bmN0aW9uIGlsdChjKXt0aGlzLm1vdXNlRG93bk9uQ2VsbENvcm5lciYmIXRoaXMuaG90LnZpZXcuaXNNb3VzZURvd24oKSYmdGhpcy5oYW5kbGVEcmFnZ2VkQ2Vs'@;
put 'bHMmJih0aGlzLmhhbmRsZURyYWdnZWRDZWxscys9MSx0aGlzLnNob3dCb3JkZXIoYyksdGhpcy5hZGROZXdSb3dJZk5lZWRlZCgpKX1mdW5jdGlvbiBhbHQoKXt0aGlzLmhhbmRsZURyYWdnZWRDZWxscyYmKHRoaXMuaGFuZGxlRHJhZ2dlZENlbGxzPjEmJnRoaXMuZmlsbEluKCksdGhpcy5o'@;
put 'YW5kbGVEcmFnZ2VkQ2VsbHM9MCx0aGlzLm1vdXNlRG93bk9uQ2VsbENvcm5lcj0hMSl9ZnVuY3Rpb24gb2x0KGMpe2NvbnN0IGw9dGhpcy5nZXRJZk1vdXNlV2FzRHJhZ2dlZE91dHNpZGUoYyk7ITE9PT10aGlzLmFkZGluZ1N0YXJ0ZWQmJnRoaXMuaGFuZGxlRHJhZ2dlZENlbGxzPjAmJmw/'@;
put 'KHRoaXMubW91c2VEcmFnT3V0c2lkZT0hMCx0aGlzLmFkZGluZ1N0YXJ0ZWQ9ITApOnRoaXMubW91c2VEcmFnT3V0c2lkZT0hMSx0aGlzLm1vdXNlRHJhZ091dHNpZGUmJnRoaXMuYXV0b0luc2VydFJvdyYmdGhpcy5hZGRSb3coKX1mdW5jdGlvbiBENGUoYyxsLGEpe0k0ZShjLGwpLGwuc2V0'@;
put 'KGMsYSl9ZnVuY3Rpb24gSTRlKGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX1mdW5jdGlvbiBqXyhjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gbGx0KGMp'@;
put 'e3ZhciBsPWZ1bmN0aW9uIGNsdChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Ro'@;
put 'cm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3Qu'@;
put 'ZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9ZnVuY3Rpb24gUjRlKGMsbCxhKXtyZXR1cm4gYy5zZXQoQnAoYyxsKSxhKSxhfWZ1bmN0aW9uIGVGKGMsbCl7cmV0dXJuIGMuZ2V0KEJwKGMsbCkp'@;
put 'fWZ1bmN0aW9uIEJwKGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX1jb25zdCBt'@;
put 'Sj0iYXV0b1Jvd1NpemUiO3ZhciBmVD1uZXcgV2Vha01hcCx2Sj1uZXcgV2Vha01hcCxJZz1uZXcgV2Vha1NldDtjbGFzcyBwVCBleHRlbmRzIEZze3N0YXRpYyBnZXQgUExVR0lOX0tFWSgpe3JldHVybiBtSn1zdGF0aWMgZ2V0IFBMVUdJTl9QUklPUklUWSgpe3JldHVybiA0MH1zdGF0aWMg'@;
put 'Z2V0IFNFVFRJTkdfS0VZUygpe3JldHVybiEwfXN0YXRpYyBnZXQgREVGQVVMVF9TRVRUSU5HUygpe3JldHVybnt1c2VIZWFkZXJzOiEwLHNhbXBsaW5nUmF0aW86bnVsbCxhbGxvd1NhbXBsZUR1cGxpY2F0ZXM6ITF9fXN0YXRpYyBnZXQgQ0FMQ1VMQVRJT05fU1RFUCgpe3JldHVybiA1MH1z'@;
put 'dGF0aWMgZ2V0IFNZTkNfQ0FMQ1VMQVRJT05fTElNSVQoKXtyZXR1cm4gNTAwfWNvbnN0cnVjdG9yKGwpe3N1cGVyKGwpLGZ1bmN0aW9uIHNsdChjLGwpe0k0ZShjLGwpLGwuYWRkKGMpfSh0aGlzLElnKSxqXyh0aGlzLCJoZWFkZXJIZWlnaHQiLG51bGwpLGpfKHRoaXMsImdob3N0VGFibGUi'@;
put 'LG5ldyBkSih0aGlzLmhvdCkpLGpfKHRoaXMsInNhbXBsZXNHZW5lcmF0b3IiLG5ldyBNNGUoKGEsZCk9Pntjb25zdCBoPXRoaXMuaG90LnRvUGh5c2ljYWxSb3coYSksZj10aGlzLmhvdC50b1BoeXNpY2FsQ29sdW1uKGQpO2lmKHRoaXMuaG90LnJvd0luZGV4TWFwcGVyLmlzSGlkZGVuKGgp'@;
put 'fHx0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5pc0hpZGRlbihmKXx8YT49MCYmZD49MCYmdGhpcy5ob3QuZ2V0Q2VsbE1ldGEoYSxkKS5oaWRkZW4pcmV0dXJuITE7bGV0IHY7cmV0dXJuIGE+PTA/dj10aGlzLmhvdC5nZXREYXRhQXRDZWxsKGEsZCk6LTE9PT1hJiYodj10aGlzLmhvdC5n'@;
put 'ZXRDb2xIZWFkZXIoZCkpLHt2YWx1ZTp2fX0pKSxqXyh0aGlzLCJpblByb2dyZXNzIiwhMSksal8odGhpcywibWVhc3VyZWRSb3dzIiwwKSxqXyh0aGlzLCJyb3dIZWlnaHRzTWFwIixuZXcgWm0pLEQ0ZSh0aGlzLGZULFtdKSxENGUodGhpcyx2SiwhMSksdGhpcy5ob3Qucm93SW5kZXhNYXBw'@;
put 'ZXIucmVnaXN0ZXJNYXAoImF1dG9Sb3dTaXplIix0aGlzLnJvd0hlaWdodHNNYXApLHRoaXMuYWRkSG9vaygiYmVmb3JlUm93UmVzaXplIiwoYSxkLGgpPT5CcChJZyx0aGlzLEw0ZSkuY2FsbCh0aGlzLGEsZCxoKSl9aXNFbmFibGVkKCl7Y29uc3QgbD10aGlzLmhvdC5nZXRTZXR0aW5ncygp'@;
put 'W21KXTtyZXR1cm4hMD09PWx8fHFvKGwpfWVuYWJsZVBsdWdpbigpe3ZhciBsPXRoaXM7aWYodGhpcy5lbmFibGVkKXJldHVybjt0aGlzLnNhbXBsZXNHZW5lcmF0b3Iuc2V0QWxsb3dEdXBsaWNhdGVzKHRoaXMuZ2V0U2V0dGluZygiYWxsb3dTYW1wbGVEdXBsaWNhdGVzIikpO2NvbnN0IGE9'@;
put 'dGhpcy5nZXRTZXR0aW5nKCJzYW1wbGluZ1JhdGlvIik7YSYmIWlzTmFOKGEpJiZ0aGlzLnNhbXBsZXNHZW5lcmF0b3Iuc2V0U2FtcGxlQ291bnQocGFyc2VJbnQoYSwxMCkpLHRoaXMuYWRkSG9vaygiYWZ0ZXJMb2FkRGF0YSIsZnVuY3Rpb24oKXtmb3IodmFyIGQ9YXJndW1lbnRzLmxlbmd0'@;
put 'aCxoPW5ldyBBcnJheShkKSxmPTA7ZjxkO2YrKyloW2ZdPWFyZ3VtZW50c1tmXTtyZXR1cm4gQnAoSWcsbCxwbHQpLmNhbGwobCwuLi5oKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlQ2hhbmdlUmVuZGVyIixmdW5jdGlvbigpe2Zvcih2YXIgZD1hcmd1bWVudHMubGVuZ3RoLGg9bmV3IEFycmF5'@;
put 'KGQpLGY9MDtmPGQ7ZisrKWhbZl09YXJndW1lbnRzW2ZdO3JldHVybiBCcChJZyxsLGdsdCkuY2FsbChsLC4uLmgpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVDb2x1bW5SZXNpemUiLCgpPT50aGlzLnJlY2FsY3VsYXRlQWxsUm93c0hlaWdodCgpKSx0aGlzLmFkZEhvb2soImFmdGVyRm9ybXVs'@;
put 'YXNWYWx1ZXNVcGRhdGUiLGZ1bmN0aW9uKCl7Zm9yKHZhciBkPWFyZ3VtZW50cy5sZW5ndGgsaD1uZXcgQXJyYXkoZCksZj0wO2Y8ZDtmKyspaFtmXT1hcmd1bWVudHNbZl07cmV0dXJuIEJwKElnLGwsdmx0KS5jYWxsKGwsLi4uaCl9KSx0aGlzLmFkZEhvb2soImJlZm9yZVJlbmRlciIsKCk9'@;
put 'PkJwKElnLHRoaXMsZmx0KS5jYWxsKHRoaXMpKSx0aGlzLmFkZEhvb2soIm1vZGlmeVJvd0hlaWdodCIsKGQsaCk9PnRoaXMuZ2V0Um93SGVpZ2h0KGgsZCkpLHRoaXMuYWRkSG9vaygiaW5pdCIsKCk9PkJwKElnLHRoaXMsbWx0KS5jYWxsKHRoaXMpKSx0aGlzLmFkZEhvb2soIm1vZGlmeUNv'@;
put 'bHVtbkhlYWRlckhlaWdodCIsKCk9PnRoaXMuZ2V0Q29sdW1uSGVhZGVySGVpZ2h0KCkpLHN1cGVyLmVuYWJsZVBsdWdpbigpfWRpc2FibGVQbHVnaW4oKXt0aGlzLmhlYWRlckhlaWdodD1udWxsLHN1cGVyLmRpc2FibGVQbHVnaW4oKSx0aGlzLmFkZEhvb2soImJlZm9yZVJvd1Jlc2l6ZSIs'@;
put 'KGwsYSxkKT0+QnAoSWcsdGhpcyxMNGUpLmNhbGwodGhpcyxsLGEsZCkpfWNhbGN1bGF0ZVZpc2libGVSb3dzSGVpZ2h0KCl7aWYoIXRoaXMuaG90LmNvdW50Q29scygpKXJldHVybjtjb25zdCBsPXRoaXMuZ2V0Rmlyc3RWaXNpYmxlUm93KCksYT10aGlzLmdldExhc3RWaXNpYmxlUm93KCk7'@;
put 'LTEhPT1sJiYtMSE9PWEmJnRoaXMuY2FsY3VsYXRlUm93c0hlaWdodCh7ZnJvbTpsLHRvOmF9LHZvaWQgMCx0aGlzLmhvdC5mb3JjZUZ1bGxSZW5kZXIpfWNhbGN1bGF0ZVJvd3NIZWlnaHQoKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVu'@;
put 'dHNbMF06e2Zyb206MCx0bzp0aGlzLmhvdC5jb3VudFJvd3MoKS0xfSxhPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp7ZnJvbTowLHRvOnRoaXMuaG90LmNvdW50Q29scygpLTF9LGQ9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1h'@;
put 'cmd1bWVudHNbMl0mJmFyZ3VtZW50c1syXTtjb25zdCBoPSJudW1iZXIiPT10eXBlb2YgbD97ZnJvbTpsLHRvOmx9OmwsZj0ibnVtYmVyIj09dHlwZW9mIGE/e2Zyb206YSx0bzphfTphO2lmKG51bGwhPT10aGlzLmhvdC5nZXRDb2xIZWFkZXIoMCkpe2NvbnN0IHY9dGhpcy5zYW1wbGVzR2Vu'@;
put 'ZXJhdG9yLmdlbmVyYXRlUm93U2FtcGxlcygtMSxmKTt0aGlzLmdob3N0VGFibGUuYWRkQ29sdW1uSGVhZGVyc1Jvdyh2LmdldCgtMSkpfUdhKGguZnJvbSxoLnRvLHY9PntsZXQgTT10aGlzLmhvdC50b1BoeXNpY2FsUm93KHYpO251bGw9PT1NJiYoTT12KSwoZHx8bnVsbD09PXRoaXMucm93'@;
put 'SGVpZ2h0c01hcC5nZXRWYWx1ZUF0SW5kZXgoTSkpJiZ0aGlzLnNhbXBsZXNHZW5lcmF0b3IuZ2VuZXJhdGVSb3dTYW1wbGVzKHYsZikuZm9yRWFjaCgoWixyZSk9PnRoaXMuZ2hvc3RUYWJsZS5hZGRSb3cocmUsWikpfSksdGhpcy5naG9zdFRhYmxlLnJvd3MubGVuZ3RoJiYodGhpcy5ob3Qu'@;
put 'YmF0Y2hFeGVjdXRpb24oKCk9Pnt0aGlzLmdob3N0VGFibGUuZ2V0SGVpZ2h0cygodixNKT0+e3Y8MD90aGlzLmhlYWRlckhlaWdodD1NOnRoaXMucm93SGVpZ2h0c01hcC5zZXRWYWx1ZUF0SW5kZXgodGhpcy5ob3QudG9QaHlzaWNhbFJvdyh2KSxNKX0pfSwhMCksdGhpcy5tZWFzdXJlZFJv'@;
put 'd3M9aC50bysxLHRoaXMuZ2hvc3RUYWJsZS5jbGVhbigpKX1jYWxjdWxhdGVBbGxSb3dzSGVpZ2h0KCl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOntmcm9tOjAsdG86dGhpcy5ob3QuY291bnRDb2xzKCktMX0sYT1hcmd1bWVu'@;
put 'dHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSYmYXJndW1lbnRzWzFdLGQ9MDtjb25zdCBoPXRoaXMuaG90LmNvdW50Um93cygpLTE7bGV0IGY9bnVsbDt0aGlzLmluUHJvZ3Jlc3M9ITA7Y29uc3Qgdj0oKT0+e2lmKCF0aGlzLmhvdClyZXR1cm4gVEUoZiksdm9pZCh0aGlzLmlu'@;
put 'UHJvZ3Jlc3M9ITEpO3RoaXMuY2FsY3VsYXRlUm93c0hlaWdodCh7ZnJvbTpkLHRvOk1hdGgubWluKGQrcFQuQ0FMQ1VMQVRJT05fU1RFUCxoKX0sbCxhKSxkPWQrcFQuQ0FMQ1VMQVRJT05fU1RFUCsxLGQ8aD9mPUVFKHYpOihURShmKSx0aGlzLmluUHJvZ3Jlc3M9ITEsdGhpcy5ob3Qudmll'@;
put 'dy5hZGp1c3RFbGVtZW50c1NpemUoKSl9LE09dGhpcy5nZXRTeW5jQ2FsY3VsYXRpb25MaW1pdCgpO00+PTAmJih0aGlzLmNhbGN1bGF0ZVJvd3NIZWlnaHQoe2Zyb206MCx0bzpNfSxsLGEpLGQ9TSsxKSxkPGg/digpOih0aGlzLmluUHJvZ3Jlc3M9ITEsdGhpcy5ob3Qudmlldy5hZGp1c3RF'@;
put 'bGVtZW50c1NpemUoKSl9cmVjYWxjdWxhdGVBbGxSb3dzSGVpZ2h0KCl7dGhpcy5ob3Qudmlldy5pc1Zpc2libGUoKSYmdGhpcy5jYWxjdWxhdGVBbGxSb3dzSGVpZ2h0KHtmcm9tOjAsdG86dGhpcy5ob3QuY291bnRDb2xzKCktMX0sITApfWdldFN5bmNDYWxjdWxhdGlvbkxpbWl0KCl7Y29u'@;
put 'c3QgbD10aGlzLmhvdC5nZXRTZXR0aW5ncygpW21KXTtsZXQgYT1wVC5TWU5DX0NBTENVTEFUSU9OX0xJTUlUO2NvbnN0IGQ9dGhpcy5ob3QuY291bnRSb3dzKCktMTtyZXR1cm4gcW8obCkmJihhPWwuc3luY0xpbWl0LGYkKGEpP2E9SiQoZCxhKTphPj49MCksTWF0aC5taW4oYSxkKX1nZXRS'@;
put 'b3dIZWlnaHQobCxhKXtjb25zdCBkPWw8MD90aGlzLmhlYWRlckhlaWdodDp0aGlzLnJvd0hlaWdodHNNYXAuZ2V0VmFsdWVBdEluZGV4KHRoaXMuaG90LnRvUGh5c2ljYWxSb3cobCkpO2xldCBoPWE7cmV0dXJuIG51bGwhPT1kJiZkPihhfHwwKSYmKGg9ZCksaH1nZXRDb2x1bW5IZWFkZXJI'@;
put 'ZWlnaHQoKXtyZXR1cm4gdGhpcy5oZWFkZXJIZWlnaHR9Z2V0Rmlyc3RWaXNpYmxlUm93KCl7dmFyIGw7cmV0dXJuIG51bGwhPT0obD10aGlzLmhvdC5nZXRGaXJzdFJlbmRlcmVkVmlzaWJsZVJvdygpKSYmdm9pZCAwIT09bD9sOi0xfWdldExhc3RWaXNpYmxlUm93KCl7dmFyIGw7cmV0dXJu'@;
put 'IG51bGwhPT0obD10aGlzLmhvdC5nZXRMYXN0UmVuZGVyZWRWaXNpYmxlUm93KCkpJiZ2b2lkIDAhPT1sP2w6LTF9Y2xlYXJDYWNoZShsKXt0aGlzLmhlYWRlckhlaWdodD1udWxsLEFycmF5LmlzQXJyYXkobCk/dGhpcy5ob3QuYmF0Y2hFeGVjdXRpb24oKCk9PntsLmZvckVhY2goYT0+e3Ro'@;
put 'aXMucm93SGVpZ2h0c01hcC5zZXRWYWx1ZUF0SW5kZXgoYSxudWxsKX0pfSwhMCk6dGhpcy5yb3dIZWlnaHRzTWFwLmNsZWFyKCl9Y2xlYXJDYWNoZUJ5UmFuZ2UobCl7Y29uc3R7ZnJvbTphLHRvOmR9PSJudW1iZXIiPT10eXBlb2YgbD97ZnJvbTpsLHRvOmx9Omw7dGhpcy5ob3QuYmF0Y2hF'@;
put 'eGVjdXRpb24oKCk9PntHYShNYXRoLm1pbihhLGQpLE1hdGgubWF4KGEsZCksaD0+e3RoaXMucm93SGVpZ2h0c01hcC5zZXRWYWx1ZUF0SW5kZXgoaCxudWxsKX0pfSwhMCl9aXNOZWVkUmVjYWxjdWxhdGUoKXtyZXR1cm4hIXRoaXMucm93SGVpZ2h0c01hcC5nZXRWYWx1ZXMoKS5zbGljZSgw'@;
put 'LHRoaXMubWVhc3VyZWRSb3dzKS5maWx0ZXIobD0+bnVsbD09PWwpLmxlbmd0aH1kZXN0cm95KCl7dGhpcy5naG9zdFRhYmxlLmNsZWFuKCksc3VwZXIuZGVzdHJveSgpfX1mdW5jdGlvbiBobHQoYyl7Y29uc3QgbD17ZnJvbTowLHRvOnRoaXMuaG90LmNvdW50Q29scygpLTF9O2MuZm9yRWFj'@;
put 'aChhPT57dGhpcy5zYW1wbGVzR2VuZXJhdG9yLmdlbmVyYXRlUm93U2FtcGxlcyhhLGwpLmZvckVhY2goKGgsZik9PnRoaXMuZ2hvc3RUYWJsZS5hZGRSb3coZixoKSl9KSx0aGlzLmdob3N0VGFibGUucm93cy5sZW5ndGgmJih0aGlzLmhvdC5iYXRjaEV4ZWN1dGlvbigoKT0+e3RoaXMuZ2hv'@;
put 'c3RUYWJsZS5nZXRIZWlnaHRzKChhLGQpPT57Y29uc3QgaD10aGlzLmhvdC50b1BoeXNpY2FsUm93KGEpO3RoaXMucm93SGVpZ2h0c01hcC5zZXRWYWx1ZUF0SW5kZXgoaCxkKX0pfSwhMCksdGhpcy5naG9zdFRhYmxlLmNsZWFuKCkpfWZ1bmN0aW9uIGZsdCgpe3RoaXMuY2FsY3VsYXRlVmlz'@;
put 'aWJsZVJvd3NIZWlnaHQoKSx0aGlzLmluUHJvZ3Jlc3N8fChCcChJZyx0aGlzLGhsdCkuY2FsbCh0aGlzLGVGKGZULHRoaXMpKSxSNGUoZlQsdGhpcyxbXSkpfWZ1bmN0aW9uIEw0ZShjLGwsYSl7bGV0IGQ9YztyZXR1cm4gYSYmKHRoaXMuY2FsY3VsYXRlUm93c0hlaWdodChsLHZvaWQgMCwh'@;
put 'MCksZD10aGlzLmdldFJvd0hlaWdodChsKSksZH1mdW5jdGlvbiBwbHQoYyxsKXtsfHx0aGlzLnJlY2FsY3VsYXRlQWxsUm93c0hlaWdodCgpfWZ1bmN0aW9uIGdsdChjKXtjb25zdCBsPWMucmVkdWNlKChhLGQpPT57bGV0W2hdPWQ7cmV0dXJuLTE9PT1hLmluZGV4T2YoaCkmJmEucHVzaCho'@;
put 'KSxhfSxbXSk7ZUYoZlQsdGhpcykucHVzaCguLi5sKX1mdW5jdGlvbiBtbHQoKXt0aGlzLnJlY2FsY3VsYXRlQWxsUm93c0hlaWdodCgpLFI0ZSh2Six0aGlzLCEwKX1mdW5jdGlvbiB2bHQoYyl7aWYoIWVGKHZKLHRoaXMpKXJldHVybjtjb25zdCBsPWMucmVkdWNlKChhLGQpPT57dmFyIGg7'@;
put 'Y29uc3QgZj1udWxsPT09KGg9ZC5hZGRyZXNzKXx8dm9pZCAwPT09aD92b2lkIDA6aC5yb3c7aWYoTnVtYmVyLmlzSW50ZWdlcihmKSl7Y29uc3Qgdj10aGlzLmhvdC50b1Zpc3VhbFJvdyhmKTstMT09PWEuaW5kZXhPZih2KSYmYS5wdXNoKHYpfXJldHVybiBhfSxbXSk7ZUYoZlQsdGhpcyku'@;
put 'cHVzaCguLi5sKX1jb25zdCBPNGU9bmV3IE1hcChbWyJpbmRleGVzU2VxdWVuY2UiLHtnZXRMaXN0V2l0aEluc2VydGVkSXRlbXM6SEssZ2V0TGlzdFdpdGhSZW1vdmVkSXRlbXM6S0V9XSxbInBoeXNpY2FsbHlJbmRleGVkIix7Z2V0TGlzdFdpdGhJbnNlcnRlZEl0ZW1zOkJLLGdldExpc3RX'@;
put 'aXRoUmVtb3ZlZEl0ZW1zOmpLfV1dKSxQNGU9Yz0+e2lmKCExPT09TzRlLmhhcyhjKSl0aHJvdyBuZXcgRXJyb3IoYEFsdGVyIHN0cmF0ZWd5IHdpdGggSUQgJyR7Y30nIGRvZXMgbm90IGV4aXN0LmApO3JldHVybiBPNGUuZ2V0KGMpfSx7Z2V0TGlzdFdpdGhJbnNlcnRlZEl0ZW1zOmJsdCxn'@;
put 'ZXRMaXN0V2l0aFJlbW92ZWRJdGVtczp5bHR9PVA0ZSgicGh5c2ljYWxseUluZGV4ZWQiKSx7Z2V0TGlzdFdpdGhJbnNlcnRlZEl0ZW1zOkNsdCxnZXRMaXN0V2l0aFJlbW92ZWRJdGVtczpTbHR9PVA0ZSgicGh5c2ljYWxseUluZGV4ZWQiKTtjb25zdCBGNGU9ImJpbmRSb3dzV2l0aEhlYWRl'@;
put 'cnMiLEg0ZT1uZXcgTWFwKFtbImxvb3NlIixjbGFzcyBfbHQgZXh0ZW5kcyBlOXtjb25zdHJ1Y3Rvcigpe3N1cGVyKGw9PmwpfWluc2VydChsLGEpe2NvbnN0IGQ9VksodGhpcy5pbmRleGVkVmFsdWVzLGEpO3RoaXMuaW5kZXhlZFZhbHVlcz1ibHQoZCxsLGEsdGhpcy5pbml0VmFsdWVPckZu'@;
put 'KSxzdXBlci5pbnNlcnQobCxhKX1yZW1vdmUobCl7Y29uc3QgYT15bHQodGhpcy5pbmRleGVkVmFsdWVzLGwpO3RoaXMuaW5kZXhlZFZhbHVlcz1OSyhhLGwpLHN1cGVyLnJlbW92ZShsKX19XSxbInN0cmljdCIsY2xhc3MgTWx0IGV4dGVuZHMgZTl7Y29uc3RydWN0b3IoKXtzdXBlcihsPT5s'@;
put 'KX1pbnNlcnQobCxhKXt0aGlzLmluZGV4ZWRWYWx1ZXM9Q2x0KHRoaXMuaW5kZXhlZFZhbHVlcyxsLGEsKGQsaCk9PnRoaXMuZ2V0TmV4dFZhbHVlKGgpKSxzdXBlci5pbnNlcnQobCxhKX1yZW1vdmUobCl7dGhpcy5pbmRleGVkVmFsdWVzPVNsdCh0aGlzLmluZGV4ZWRWYWx1ZXMsbCksc3Vw'@;
put 'ZXIucmVtb3ZlKGwpfWdldE5leHRWYWx1ZShsKXtyZXR1cm4gTWF0aC5tYXgoLi4udGhpcy5nZXRWYWx1ZXMoKSkrMStsfX1dXSk7dmFyIE40ZT1uZXcgV2Vha1NldDtjbGFzcyBPbHQgZXh0ZW5kcyBGc3tjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksZnVuY3Rpb24gRWx0KGMs'@;
put 'bCl7KGZ1bmN0aW9uIFRsdChjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9KShjLGwpLGwuYWRkKGMpfSh0aGlzLE40ZSksZnVuY3Rpb24gQWx0KGMsbCxh'@;
put 'KXtyZXR1cm4obD1mdW5jdGlvbiBrbHQoYyl7dmFyIGw9ZnVuY3Rpb24gRGx0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2Jq'@;
put 'ZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9m'@;
put 'IGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY30odGhpcywiaGVhZGVySW5kZXhlcyIsbnVsbCl9c3RhdGljIGdldCBQTFVHSU5fS0VZKCl7cmV0dXJu'@;
put 'IEY0ZX1zdGF0aWMgZ2V0IFBMVUdJTl9QUklPUklUWSgpe3JldHVybiAyMTB9aXNFbmFibGVkKCl7cmV0dXJuISF0aGlzLmhvdC5nZXRTZXR0aW5ncygpW0Y0ZV19ZW5hYmxlUGx1Z2luKCl7dmFyIGw7aWYodGhpcy5lbmFibGVkKXJldHVybjtjb25zdCBhPW51bGwhPT0obD1INGUuZ2V0KHRo'@;
put 'aXMuZ2V0U2V0dGluZygpKSkmJnZvaWQgMCE9PWw/bDpINGUuZ2V0KCJsb29zZSIpO3RoaXMuaGVhZGVySW5kZXhlcz10aGlzLmhvdC5yb3dJbmRleE1hcHBlci5yZWdpc3Rlck1hcCgiYmluZFJvd3NXaXRoSGVhZGVycyIsbmV3IGEpLHRoaXMuYWRkSG9vaygibW9kaWZ5Um93SGVhZGVyIixk'@;
put 'PT5mdW5jdGlvbiBJbHQoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfShONGUs'@;
put 'dGhpcyxQbHQpLmNhbGwodGhpcyxkKSksc3VwZXIuZW5hYmxlUGx1Z2luKCl9ZGlzYWJsZVBsdWdpbigpe3RoaXMuaG90LnJvd0luZGV4TWFwcGVyLnVucmVnaXN0ZXJNYXAoImJpbmRSb3dzV2l0aEhlYWRlcnMiKSxzdXBlci5kaXNhYmxlUGx1Z2luKCl9ZGVzdHJveSgpe3N1cGVyLmRlc3Ry'@;
put 'b3koKX19ZnVuY3Rpb24gUGx0KGMpe3JldHVybiB0aGlzLmhlYWRlckluZGV4ZXMuZ2V0VmFsdWVBdEluZGV4KHRoaXMuaG90LnRvUGh5c2ljYWxSb3coYykpfWZ1bmN0aW9uIFY0ZShjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBz'@;
put 'YW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9ZnVuY3Rpb24gQjRlKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBObHQoYyl7dmFyIGw9ZnVuY3Rpb24gVmx0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1By'@;
put 'aW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmlu'@;
put 'ZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEs'@;
put 'Y31mdW5jdGlvbiBqNGUoYyxsKXtyZXR1cm4gYy5nZXQoel8oYyxsKSl9ZnVuY3Rpb24gYkooYyxsLGEpe3JldHVybiBjLnNldCh6XyhjLGwpLGEpLGF9ZnVuY3Rpb24gel8oYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVu'@;
put 'Z3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfWNvbnN0IHRGPSJjb2xsYXBzaWJsZUNvbHVtbnMiLGpsdD1bIm5lc3RlZEhlYWRlcnMiXSxVXz0iY29sbGFwc2libGVJbmRpY2F0b3IiLHo0ZT10RixV'@;
put 'NGU9bmV3IE1hcChbWyJjb2xsYXBzZSIse2hpZGVDb2x1bW46ITAsYmVmb3JlSG9vazoiYmVmb3JlQ29sdW1uQ29sbGFwc2UiLGFmdGVySG9vazoiYWZ0ZXJDb2x1bW5Db2xsYXBzZSJ9XSxbImV4cGFuZCIse2hpZGVDb2x1bW46ITEsYmVmb3JlSG9vazoiYmVmb3JlQ29sdW1uRXhwYW5kIixh'@;
put 'ZnRlckhvb2s6ImFmdGVyQ29sdW1uRXhwYW5kIn1dXSk7dmFyIFpfPW5ldyBXZWFrTWFwLGdUPW5ldyBXZWFrU2V0O2NsYXNzIHpsdCBleHRlbmRzIEZze2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSxmdW5jdGlvbiBGbHQoYyxsKXtWNGUoYyxsKSxsLmFkZChjKX0odGhpcyxn'@;
put 'VCksQjRlKHRoaXMsIm5lc3RlZEhlYWRlcnNQbHVnaW4iLG51bGwpLEI0ZSh0aGlzLCJoZWFkZXJTdGF0ZU1hbmFnZXIiLG51bGwpLGZ1bmN0aW9uIEhsdChjLGwsYSl7VjRlKGMsbCksbC5zZXQoYyxhKX0odGhpcyxaXyxudWxsKX1zdGF0aWMgZ2V0IFBMVUdJTl9LRVkoKXtyZXR1cm4gdEZ9'@;
put 'c3RhdGljIGdldCBQTFVHSU5fUFJJT1JJVFkoKXtyZXR1cm4gMjkwfXN0YXRpYyBnZXQgUExVR0lOX0RFUFMoKXtyZXR1cm5bInBsdWdpbjpOZXN0ZWRIZWFkZXJzIl19c3RhdGljIGdldCBTRVRUSU5HX0tFWVMoKXtyZXR1cm5bdEYsLi4uamx0XX1pc0VuYWJsZWQoKXtyZXR1cm4hIXRoaXMu'@;
put 'aG90LmdldFNldHRpbmdzKClbdEZdfWVuYWJsZVBsdWdpbigpe3ZhciBsPXRoaXM7aWYodGhpcy5lbmFibGVkKXJldHVybjtjb25zdHtuZXN0ZWRIZWFkZXJzOmF9PXRoaXMuaG90LmdldFNldHRpbmdzKCk7YXx8aWwoIllvdSBuZWVkIHRvIGNvbmZpZ3VyZSB0aGUgTmVzdGVkIEhlYWRlcnMg'@;
put 'cGx1Z2luIGluIG9yZGVyIHRvIHVzZSBjb2xsYXBzaWJsZSBoZWFkZXJzLiIpLGJKKFpfLHRoaXMsdGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIuY3JlYXRlQW5kUmVnaXN0ZXJJbmRleE1hcCh0aGlzLnBsdWdpbk5hbWUsImhpZGluZyIpKSx0aGlzLm5lc3RlZEhlYWRlcnNQbHVnaW49dGhp'@;
put 'cy5ob3QuZ2V0UGx1Z2luKCJuZXN0ZWRIZWFkZXJzIiksdGhpcy5oZWFkZXJTdGF0ZU1hbmFnZXI9dGhpcy5uZXN0ZWRIZWFkZXJzUGx1Z2luLmdldFN0YXRlTWFuYWdlcigpLHRoaXMuYWRkSG9vaygiaW5pdCIsKCk9PnpfKGdULHRoaXMsV2x0KS5jYWxsKHRoaXMpKSx0aGlzLmFkZEhvb2so'@;
put 'ImFmdGVyTG9hZERhdGEiLGZ1bmN0aW9uKCl7Zm9yKHZhciBkPWFyZ3VtZW50cy5sZW5ndGgsaD1uZXcgQXJyYXkoZCksZj0wO2Y8ZDtmKyspaFtmXT1hcmd1bWVudHNbZl07cmV0dXJuIHpfKGdULGwsWWx0KS5jYWxsKGwsLi4uaCl9KSx0aGlzLmFkZEhvb2soImFmdGVyR2V0Q29sSGVhZGVy'@;
put 'IixmdW5jdGlvbigpe2Zvcih2YXIgZD1hcmd1bWVudHMubGVuZ3RoLGg9bmV3IEFycmF5KGQpLGY9MDtmPGQ7ZisrKWhbZl09YXJndW1lbnRzW2ZdO3JldHVybiB6XyhnVCxsLFVsdCkuY2FsbChsLC4uLmgpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVPbkNlbGxNb3VzZURvd24iLChkLGgsZik9'@;
put 'PnpfKGdULHRoaXMsWmx0KS5jYWxsKHRoaXMsZCxoLGYpKSx0aGlzLnJlZ2lzdGVyU2hvcnRjdXRzKCksc3VwZXIuZW5hYmxlUGx1Z2luKCksdGhpcy51cGRhdGVQbHVnaW4oKX11cGRhdGVQbHVnaW4oKXtpZih0aGlzLmhvdC52aWV3KXtpZighdGhpcy5uZXN0ZWRIZWFkZXJzUGx1Z2luLmRl'@;
put 'dGVjdGVkT3ZlcmxhcHBlZEhlYWRlcnMpe2NvbnN0e2NvbGxhcHNpYmxlQ29sdW1uczpsfT10aGlzLmhvdC5nZXRTZXR0aW5ncygpOyJib29sZWFuIj09dHlwZW9mIGw/dGhpcy5oZWFkZXJTdGF0ZU1hbmFnZXIubWFwU3RhdGUoYT0+KHtjb2xsYXBzaWJsZTphLm9yaWdDb2xzcGFuPjF9KSk6'@;
put 'QXJyYXkuaXNBcnJheShsKSYmKHRoaXMuaGVhZGVyU3RhdGVNYW5hZ2VyLm1hcFN0YXRlKCgpPT4oe2NvbGxhcHNpYmxlOiExfSkpLHRoaXMuaGVhZGVyU3RhdGVNYW5hZ2VyLm1lcmdlU3RhdGVXaXRoKGwpKX1zdXBlci51cGRhdGVQbHVnaW4oKX19ZGlzYWJsZVBsdWdpbigpe3RoaXMuaG90'@;
put 'LmNvbHVtbkluZGV4TWFwcGVyLnVucmVnaXN0ZXJNYXAodGhpcy5wbHVnaW5OYW1lKSxiSihaXyx0aGlzLG51bGwpLHRoaXMubmVzdGVkSGVhZGVyc1BsdWdpbj1udWxsLHRoaXMudW5yZWdpc3RlclNob3J0Y3V0cygpLHRoaXMuY2xlYXJCdXR0b25zKCksc3VwZXIuZGlzYWJsZVBsdWdpbigp'@;
put 'fXJlZ2lzdGVyU2hvcnRjdXRzKCl7dGhpcy5ob3QuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuZ2V0Q29udGV4dCgiZ3JpZCIpLmFkZFNob3J0Y3V0KHtrZXlzOltbIkVudGVyIl1dLGNhbGxiYWNrOigpPT57dmFyIGw7Y29uc3R7cm93OmEsY29sOmR9PXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VM'@;
put 'YXN0KCkuaGlnaGxpZ2h0LHtjb2xsYXBzaWJsZTpoLGlzQ29sbGFwc2VkOmYsY29sdW1uSW5kZXg6dn09bnVsbCE9PShsPXRoaXMuaGVhZGVyU3RhdGVNYW5hZ2VyLmdldEhlYWRlclRyZWVOb2RlRGF0YShhLGQpKSYmdm9pZCAwIT09bD9sOnt9O2lmKGgpcmV0dXJuIGY/dGhpcy5leHBhbmRT'@;
put 'ZWN0aW9uKHtyb3c6YSxjb2w6dn0pOnRoaXMuY29sbGFwc2VTZWN0aW9uKHtyb3c6YSxjb2w6dn0pLCExfSxydW5Pbmx5SWY6KCk9Pnt2YXIgbCxhO3JldHVybihudWxsPT09KGw9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSl8fHZvaWQgMD09PWw/dm9pZCAwOmwuaXNTaW5nbGUo'@;
put 'KSkmJihudWxsPT09KGE9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSl8fHZvaWQgMD09PWE/dm9pZCAwOmEuaGlnaGxpZ2h0LmlzSGVhZGVyKCkpfSxncm91cDp6NGUscmVsYXRpdmVUb0dyb3VwOldtLHBvc2l0aW9uOiJiZWZvcmUifSl9dW5yZWdpc3RlclNob3J0Y3V0cygpe3Ro'@;
put 'aXMuaG90LmdldFNob3J0Y3V0TWFuYWdlcigpLmdldENvbnRleHQoImdyaWQiKS5yZW1vdmVTaG9ydGN1dHNCeUdyb3VwKHo0ZSl9Y2xlYXJCdXR0b25zKCl7aWYoIXRoaXMuaG90LnZpZXcpcmV0dXJuO2NvbnN0IGw9dGhpcy5ob3Qudmlldy5fd3QuZ2V0U2V0dGluZygiY29sdW1uSGVhZGVy'@;
put 'cyIpLmxlbmd0aCxhPXRoaXMuaG90LnZpZXcuX3d0Lnd0VGFibGUuVEhFQUQsZD10aGlzLmhvdC52aWV3Ll93dC53dE92ZXJsYXlzLnRvcE92ZXJsYXkuY2xvbmUud3RUYWJsZS5USEVBRCxoPXRoaXMuaG90LnZpZXcuX3d0Lnd0T3ZlcmxheXMudG9wSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5'@;
put 'P3RoaXMuaG90LnZpZXcuX3d0Lnd0T3ZlcmxheXMudG9wSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5LmNsb25lLnd0VGFibGUuVEhFQUQ6bnVsbCxmPWZ1bmN0aW9uKHYpe3YmJnYucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh2KX07R2EoMCxsLTEsdj0+e2NvbnN0IE09YS5jaGlsZE5vZGVzW3Zd'@;
put 'LEQ9ZC5jaGlsZE5vZGVzW3ZdLFo9aD9oLmNoaWxkTm9kZXNbdl06bnVsbDtHYSgwLE0uY2hpbGROb2Rlcy5sZW5ndGgtMSxyZT0+e2xldCBjZT1NLmNoaWxkTm9kZXNbcmVdLnF1ZXJ5U2VsZWN0b3IoYC4ke1VffWApO2YoY2UpLEQmJkQuY2hpbGROb2Rlc1tyZV0mJihjZT1ELmNoaWxkTm9k'@;
put 'ZXNbcmVdLnF1ZXJ5U2VsZWN0b3IoYC4ke1VffWApLGYoY2UpKSxoJiZaJiZaLmNoaWxkTm9kZXNbcmVdJiYoY2U9Wi5jaGlsZE5vZGVzW3JlXS5xdWVyeVNlbGVjdG9yKGAuJHtVX31gKSxmKGNlKSl9KX0pfWV4cGFuZFNlY3Rpb24obCl7dGhpcy50b2dnbGVDb2xsYXBzaWJsZVNlY3Rpb24o'@;
put 'W2xdLCJleHBhbmQiKX1jb2xsYXBzZVNlY3Rpb24obCl7dGhpcy50b2dnbGVDb2xsYXBzaWJsZVNlY3Rpb24oW2xdLCJjb2xsYXBzZSIpfXRvZ2dsZUFsbENvbGxhcHNpYmxlU2VjdGlvbnMobCl7Y29uc3QgYT10aGlzLmhlYWRlclN0YXRlTWFuYWdlci5tYXBOb2RlcyhkPT57Y29uc3R7Y29s'@;
put 'bGFwc2libGU6aCxvcmlnQ29sc3BhbjpmLGhlYWRlckxldmVsOnYsY29sdW1uSW5kZXg6TSxpc0NvbGxhcHNlZDpEfT1kO2lmKCEwPT09aCYmZj4xJiYoRCYmImV4cGFuZCI9PT1sfHwhRCYmImNvbGxhcHNlIj09PWwpKXJldHVybntyb3c6dGhpcy5oZWFkZXJTdGF0ZU1hbmFnZXIubGV2ZWxU'@;
put 'b1Jvd0Nvb3Jkcyh2KSxjb2w6TX19KTt0aGlzLnRvZ2dsZUNvbGxhcHNpYmxlU2VjdGlvbihhLGwpfWNvbGxhcHNlQWxsKCl7dGhpcy50b2dnbGVBbGxDb2xsYXBzaWJsZVNlY3Rpb25zKCJjb2xsYXBzZSIpfWV4cGFuZEFsbCgpe3RoaXMudG9nZ2xlQWxsQ29sbGFwc2libGVTZWN0aW9ucygi'@;
put 'ZXhwYW5kIil9dG9nZ2xlQ29sbGFwc2libGVTZWN0aW9uKGwsYSl7aWYoIVU0ZS5oYXMoYSkpdGhyb3cgbmV3IEVycm9yKGBVbnN1cHBvcnRlZCBhY3Rpb24gaXMgcGFzc2VkICgke2F9KS5gKTtpZighQXJyYXkuaXNBcnJheShsKSlyZXR1cm47Y29uc3QgZD1JbShsLEVlPT57bGV0e3JvdzpC'@;
put 'ZX09RWU7cmV0dXJuIEJlPDB9KTtsZXQgaD1kLmxlbmd0aD4wO1luKGQsRWU9Pnt2YXIgQmU7bGV0e3JvdzpxZSxjb2w6cnR9PUVlO2NvbnN0e2NvbGxhcHNpYmxlOnB0LGlzQ29sbGFwc2VkOmR0fT1udWxsIT09KEJlPXRoaXMuaGVhZGVyU3RhdGVNYW5hZ2VyLmdldEhlYWRlclNldHRpbmdz'@;
put 'KHFlLHJ0KSkmJnZvaWQgMCE9PUJlP0JlOnt9O2lmKCFwdHx8ZHQmJiJjb2xsYXBzZSI9PT1hfHwhZHQmJiJleHBhbmQiPT09YSlyZXR1cm4gaD0hMSwhMX0pO2NvbnN0IGY9W10sdj1bXTtoJiZZbihkLEVlPT57bGV0e3JvdzpCZSxjb2w6cWV9PUVlO2NvbnN0e2NvbHNwYW5Db21wZW5zYXRp'@;
put 'b246cnQsYWZmZWN0ZWRDb2x1bW5zOnB0LHJvbGxiYWNrTW9kaWZpY2F0aW9uOmR0fT10aGlzLmhlYWRlclN0YXRlTWFuYWdlci50cmlnZ2VyTm9kZU1vZGlmaWNhdGlvbihhLEJlLHFlKTtydD4wJiYodi5wdXNoKC4uLnB0KSxmLnB1c2goZHQpKX0pO2NvbnN0IE09dGhpcy5nZXRDb2xsYXBz'@;
put 'ZWRDb2x1bW5zKCk7bGV0IEQ9W107ImNvbGxhcHNlIj09PWE/RD12MmUoWy4uLk0sLi4udl0pOiJleHBhbmQiPT09YSYmKEQ9SW0oTSxFZT0+IXYuaW5jbHVkZXMoRWUpKSk7Y29uc3QgWj1VNGUuZ2V0KGEpO2lmKCExPT09dGhpcy5ob3QucnVuSG9va3MoWi5iZWZvcmVIb29rLE0sRCxoKSly'@;
put 'ZXR1cm4gdm9pZCBZbihmLEVlPT57RWUoKX0pO3RoaXMuaG90LmJhdGNoRXhlY3V0aW9uKCgpPT57WW4odixFZT0+e2o0ZShaXyx0aGlzKS5zZXRWYWx1ZUF0SW5kZXgodGhpcy5ob3QudG9QaHlzaWNhbENvbHVtbihFZSksWi5oaWRlQ29sdW1uKX0pfSwhMCk7Y29uc3QgY2U9dGhpcy5nZXRD'@;
put 'b2xsYXBzZWRDb2x1bW5zKCkubGVuZ3RoIT09TS5sZW5ndGgsYmU9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKTtpZigiY29sbGFwc2UiPT09YSYmY2UmJmJlKXtjb25zdHtyb3c6RWUsY29sOkJlfT1iZS5oaWdobGlnaHQ7aWYoKHRoaXMuaG90LnJvd0luZGV4TWFwcGVyLmlzSGlk'@;
put 'ZGVuKEVlKXx8dGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIuaXNIaWRkZW4oQmUpKSYmdi5pbmNsdWRlcyhCZSkpe2NvbnN0IHJ0PUVlPj0wP3RoaXMuaG90LnJvd0luZGV4TWFwcGVyLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChFZSwxLCEwKTpFZSxwdD1CZT49MD90aGlzLmhvdC5jb2x1'@;
put 'bW5JbmRleE1hcHBlci5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoQmUsMSwhMCk6QmU7bnVsbCE9PXJ0JiZudWxsIT09cHQmJnRoaXMuaG90LnNlbGVjdENlbGwocnQscHQpfX10aGlzLmhvdC5ydW5Ib29rcyhaLmFmdGVySG9vayxNLEQsaCxjZSksdGhpcy5ob3QucmVuZGVyKCksdGhpcy5o'@;
put 'b3Qudmlldy5hZGp1c3RFbGVtZW50c1NpemUoKX1nZXRDb2xsYXBzZWRDb2x1bW5zKCl7cmV0dXJuIGo0ZShaXyx0aGlzKS5nZXRIaWRkZW5JbmRleGVzKCl9ZGVzdHJveSgpe2JKKFpfLHRoaXMsbnVsbCksc3VwZXIuZGVzdHJveSgpfX1mdW5jdGlvbiBVbHQoYyxsLGEpe3ZhciBkO2NvbnN0'@;
put 'e2NvbGxhcHNpYmxlOmgsb3JpZ0NvbHNwYW46Zixpc0NvbGxhcHNlZDp2fT1udWxsIT09KGQ9dGhpcy5oZWFkZXJTdGF0ZU1hbmFnZXIuZ2V0SGVhZGVyU2V0dGluZ3MoYSxjKSkmJnZvaWQgMCE9PWQ/ZDp7fSxNPWgmJmY+MSYmYz49dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5maXhlZENvbHVt'@;
put 'bnNTdGFydCxEPXRoaXMuaG90LmdldFNldHRpbmdzKCkuYXJpYVRhZ3M7bGV0IFo9bC5xdWVyeVNlbGVjdG9yKGAuJHtVX31gKTt2YXIgcmU7ajcobCxbTjIoIiIpWzBdXSksTT8oWnx8KFo9dGhpcy5ob3Qucm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLFRpKFosVV8pLGwucXVl'@;
put 'cnlTZWxlY3RvcigiZGl2OmZpcnN0LWNoaWxkIikuYXBwZW5kQ2hpbGQoWikpLGxvKFosWyJjb2xsYXBzZWQiLCJleHBhbmRlZCJdKSx2PyhUaShaLCJjb2xsYXBzZWQiKSxQbShaLCIrIiksRCYmdm8obCwuLi5OMighMSkpKTooVGkoWiwiZXhwYW5kZWQiKSxQbShaLCItIiksRCYmdm8obCwu'@;
put 'Li5OMighMCkpKSxEJiZ2byhaLC4uLlY3KCkpKTpudWxsPT09KHJlPVopfHx2b2lkIDA9PT1yZXx8cmUucmVtb3ZlKCl9ZnVuY3Rpb24gWmx0KGMsbCl7cG8oYy50YXJnZXQsVV8pJiYocG8oYy50YXJnZXQsImV4cGFuZGVkIik/KHRoaXMuZXZlbnRNYW5hZ2VyLmZpcmVFdmVudChjLnRhcmdl'@;
put 'dCwibW91c2V1cCIpLHRoaXMudG9nZ2xlQ29sbGFwc2libGVTZWN0aW9uKFtsXSwiY29sbGFwc2UiKSk6cG8oYy50YXJnZXQsImNvbGxhcHNlZCIpJiYodGhpcy5ldmVudE1hbmFnZXIuZmlyZUV2ZW50KGMudGFyZ2V0LCJtb3VzZXVwIiksdGhpcy50b2dnbGVDb2xsYXBzaWJsZVNlY3Rpb24o'@;
put 'W2xdLCJleHBhbmQiKSksQjIoYykpfWZ1bmN0aW9uIFdsdCgpe3RoaXMudXBkYXRlUGx1Z2luKCl9ZnVuY3Rpb24gWWx0KGMsbCl7bHx8dGhpcy51cGRhdGVQbHVnaW4oKX1mdW5jdGlvbiBmOShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gR2x0KGMpe3ZhciBsPWZ1bmN0aW9uICRsdChjLGwp'@;
put 'e2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9Q'@;
put 'cmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1'@;
put 'ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y29uc3QgS2x0PVsic29ydEVtcHR5Q2VsbHMiLCJpbmRpY2F0b3IiLCJoZWFkZXJBY3Rpb24iLCJjb21wYXJlRnVuY3Rpb25GYWN0b3J5Il07Y2xhc3MgUWx0e2NvbnN0cnVjdG9yKGwsYSl7'@;
put 'ZjkodGhpcywiaG90Iix2b2lkIDApLGY5KHRoaXMsInNvcnRpbmdTdGF0ZXMiLG5ldyBwUCksZjkodGhpcywic29ydEVtcHR5Q2VsbHMiLCExKSxmOSh0aGlzLCJpbmRpY2F0b3IiLCEwKSxmOSh0aGlzLCJoZWFkZXJBY3Rpb24iLCEwKSxmOSh0aGlzLCJjb21wYXJlRnVuY3Rpb25GYWN0b3J5'@;
put 'Iix2b2lkIDApLGY5KHRoaXMsIm1hcE5hbWUiLHZvaWQgMCksdGhpcy5ob3Q9bCx0aGlzLm1hcE5hbWU9YSx0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5yZWdpc3Rlck1hcChhLHRoaXMuc29ydGluZ1N0YXRlcyl9dXBkYXRlQWxsQ29sdW1uc1Byb3BlcnRpZXMobCl7cW8obCkmJlhvKGws'@;
put 'KGEsZCk9PntLbHQuaW5jbHVkZXMoZCkmJih0aGlzW2RdPWEpfSl9Z2V0QWxsQ29sdW1uc1Byb3BlcnRpZXMoKXtjb25zdCBsPXtzb3J0RW1wdHlDZWxsczp0aGlzLnNvcnRFbXB0eUNlbGxzLGluZGljYXRvcjp0aGlzLmluZGljYXRvcixoZWFkZXJBY3Rpb246dGhpcy5oZWFkZXJBY3Rpb259'@;
put 'O3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzLmNvbXBhcmVGdW5jdGlvbkZhY3RvcnkmJihsLmNvbXBhcmVGdW5jdGlvbkZhY3Rvcnk9dGhpcy5jb21wYXJlRnVuY3Rpb25GYWN0b3J5KSxsfWdldFNvcnRPcmRlck9mQ29sdW1uKGwpe3ZhciBhO3JldHVybiBudWxsPT09KGE9dGhpcy5z'@;
put 'b3J0aW5nU3RhdGVzLmdldFZhbHVlQXRJbmRleCh0aGlzLmhvdC50b1BoeXNpY2FsQ29sdW1uKGwpKSl8fHZvaWQgMD09PWE/dm9pZCAwOmEuc29ydE9yZGVyfWdldEluZGV4T2ZDb2x1bW5JblNvcnRRdWV1ZShsKXtyZXR1cm4gbD10aGlzLmhvdC50b1BoeXNpY2FsQ29sdW1uKGwpLHRoaXMu'@;
put 'c29ydGluZ1N0YXRlcy5nZXRFbnRyaWVzKCkuZmluZEluZGV4KGE9PntsZXRbZF09YTtyZXR1cm4gZD09PWx9KX1nZXROdW1iZXJPZlNvcnRlZENvbHVtbnMoKXtyZXR1cm4gdGhpcy5zb3J0aW5nU3RhdGVzLmdldExlbmd0aCgpfWlzTGlzdE9mU29ydGVkQ29sdW1uc0VtcHR5KCl7cmV0dXJu'@;
put 'IDA9PT10aGlzLmdldE51bWJlck9mU29ydGVkQ29sdW1ucygpfWlzQ29sdW1uU29ydGVkKGwpe3JldHVybiBxbyh0aGlzLnNvcnRpbmdTdGF0ZXMuZ2V0VmFsdWVBdEluZGV4KHRoaXMuaG90LnRvUGh5c2ljYWxDb2x1bW4obCkpKX1nZXRTb3J0U3RhdGVzKCl7cmV0dXJuIG51bGw9PT10aGlz'@;
put 'LnNvcnRpbmdTdGF0ZXM/W106dGhpcy5zb3J0aW5nU3RhdGVzLmdldEVudHJpZXMoKS5tYXAoYT0+e2xldFtkLGhdPWE7cmV0dXJue2NvbHVtbjp0aGlzLmhvdC50b1Zpc3VhbENvbHVtbihkKSwuLi5ofX0pfWdldENvbHVtblNvcnRTdGF0ZShsKXtjb25zdCBhPXRoaXMuZ2V0U29ydE9yZGVy'@;
put 'T2ZDb2x1bW4obCk7aWYoUGEoYSkpcmV0dXJue2NvbHVtbjpsLHNvcnRPcmRlcjphfX1zZXRTb3J0U3RhdGVzKGwpe3RoaXMuc29ydGluZ1N0YXRlcy5jbGVhcigpO2ZvcihsZXQgYT0wO2E8bC5sZW5ndGg7YSs9MSl0aGlzLnNvcnRpbmdTdGF0ZXMuc2V0VmFsdWVBdEluZGV4KHRoaXMuaG90'@;
put 'LnRvUGh5c2ljYWxDb2x1bW4obFthXS5jb2x1bW4pLHtzb3J0T3JkZXI6bFthXS5zb3J0T3JkZXJ9KX1kZXN0cm95KCl7dGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIudW5yZWdpc3Rlck1hcCh0aGlzLm1hcE5hbWUpLHRoaXMuc29ydGluZ1N0YXRlcz1udWxsfX1mdW5jdGlvbiBaNGUoYyxs'@;
put 'LGEpe2NvbnN0IGQ9bC5sb2NhbGU7cmV0dXJuIGZ1bmN0aW9uKGgsZil7Y29uc3R7c29ydEVtcHR5Q2VsbHM6dn09YTtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIGgmJihoPWgudG9Mb2NhbGVMb3dlckNhc2UoZCkpLCJzdHJpbmciPT10eXBlb2YgZiYmKGY9Zi50b0xvY2FsZUxvd2VyQ2FzZShk'@;
put 'KSksaD09PWY/anA6VWMoaCk/VWMoZik/anA6diYmImFzYyI9PT1jP1ljOkdjOlVjKGYpP3YmJiJhc2MiPT09Yz9HYzpZYzppc05hTihoKSYmIWlzTmFOKGYpPyJhc2MiPT09Yz9HYzpZYzohaXNOYU4oaCkmJmlzTmFOKGYpfHwoaXNOYU4oaCl8fGlzTmFOKGYpfHwoaD1wYXJzZUZsb2F0KGgp'@;
put 'LGY9cGFyc2VGbG9hdChmKSksaDxmKT8iYXNjIj09PWM/WWM6R2M6aD5mPyJhc2MiPT09Yz9HYzpZYzpqcH19Y29uc3R7cmVnaXN0ZXI6bVQsZ2V0SXRlbTpZNGUsaGFzSXRlbTpsY3R9PXIzKCJzb3J0aW5nLmNvbXBhcmVGdW5jdGlvbkZhY3RvcnkiKSx7cmVnaXN0ZXI6RzRlLGdldEl0ZW06'@;
put 'Y2N0fT1yMygic29ydGluZy5tYWluU29ydENvbXBhcmF0b3IiKTtmdW5jdGlvbiAkNGUoYyl7cmV0dXJuIGxjdChjKT9ZNGUoYyk6WTRlKCJkZWZhdWx0Iil9bVQoImNoZWNrYm94IixmdW5jdGlvbiBuY3QoYyxsLGEpe2NvbnN0IGQ9bC5jaGVja2VkVGVtcGxhdGUsaD1sLnVuY2hlY2tlZFRl'@;
put 'bXBsYXRlLHtzb3J0RW1wdHlDZWxsczpmfT1hO3JldHVybiBmdW5jdGlvbih2LE0pe2NvbnN0IEQ9VWModiksWj1VYyhNKSxyZT1EP2g6dixjZT1aP2g6TSxiZT1yZT09PWh8fHJlPT09ZCxFZT1jZT09PWh8fGNlPT09ZDtpZighMT09PWYpe2lmKEQmJiExPT09WilyZXR1cm4gR2M7aWYoITE9'@;
put 'PT1EJiZaKXJldHVybiBZY31yZXR1cm4hMT09PWJlJiZFZT8iYXNjIj09PWM/WWM6R2M6YmUmJiExPT09RWU/ImFzYyI9PT1jP0djOlljOiExPT09YmUmJiExPT09RWU/WjRlKGMsbCxhKSh2LE0pOnJlPT09aCYmY2U9PT1kPyJhc2MiPT09Yz9ZYzpHYzpyZT09PWQmJmNlPT09aD8iYXNjIj09'@;
put 'PWM/R2M6WWM6anB9fSksbVQoImRhdGUiLGZ1bmN0aW9uIGljdChjLGwsYSl7cmV0dXJuIFE0ZShjLGwuZGF0ZUZvcm1hdCxhKX0pLG1UKCJkZWZhdWx0IixaNGUpLG1UKCJudW1lcmljIixmdW5jdGlvbiBlY3QoYyxsLGEpe3JldHVybiBmdW5jdGlvbihkLGgpe2NvbnN0IGY9cGFyc2VGbG9h'@;
put 'dChkKSx2PXBhcnNlRmxvYXQoaCkse3NvcnRFbXB0eUNlbGxzOk19PWE7aWYoZj09PXZ8fGlzTmFOKGYpJiZpc05hTih2KSlyZXR1cm4ganA7aWYoTSl7aWYoVWMoZCkpcmV0dXJuImFzYyI9PT1jP1ljOkdjO2lmKFVjKGgpKXJldHVybiJhc2MiPT09Yz9HYzpZY31yZXR1cm4gaXNOYU4oZik/'@;
put 'R2M6aXNOYU4odik/WWM6Zjx2PyJhc2MiPT09Yz9ZYzpHYzpmPnY/ImFzYyI9PT1jP0djOlljOmpwfX0pLG1UKCJ0aW1lIixmdW5jdGlvbiBvY3QoYyxsLGEpe3JldHVybiBRNGUoYyxsLnRpbWVGb3JtYXQsYSl9KTtjb25zdCBqcD0wLFljPS0xLEdjPTEsbkY9ImFzYyIsckY9ImRlc2MiLEs0'@;
put 'ZT0iY29sSGVhZGVyIjtmdW5jdGlvbiBxNGUoYyl7aWYoYyE9PXJGKXJldHVybiBjPT09bkY/ckY6bkZ9ZnVuY3Rpb24gWDRlKGMpe3JldHVybiBjLnF1ZXJ5U2VsZWN0b3IoYC4ke0s0ZX1gKX1mdW5jdGlvbiBKNGUoYyxsKXtpZihjPDB8fCFsLnBhcmVudE5vZGUpcmV0dXJuITE7Y29uc3Qg'@;
put 'YT1sLnBhcmVudE5vZGUucGFyZW50Tm9kZS5jaGlsZE5vZGVzO3JldHVybiBBcnJheS5mcm9tKGEpLmluZGV4T2YobC5wYXJlbnROb2RlKS1hLmxlbmd0aD09LTF9ZnVuY3Rpb24geUooYyxsLGEpe3JldHVybi0xPT09YyYmbD49MCYmITE9PT1IbShhKX1mdW5jdGlvbiBRNGUoYyxsLGEpe3Jl'@;
put 'dHVybiBmdW5jdGlvbihkLGgpe2NvbnN0e3NvcnRFbXB0eUNlbGxzOmZ9PWE7aWYoZD09PWgpcmV0dXJuIGpwO2lmKFVjKGQpKXJldHVybiBVYyhoKT9qcDpmJiYiYXNjIj09PWM/WWM6R2M7aWYoVWMoaCkpcmV0dXJuIGYmJiJhc2MiPT09Yz9HYzpZYztjb25zdCB2PU9vKGQsbCksTT1Pbyho'@;
put 'LGwpO3JldHVybiB2LmlzVmFsaWQoKT9NLmlzVmFsaWQoKT9NLmlzQWZ0ZXIodik/ImFzYyI9PT1jP1ljOkdjOk0uaXNCZWZvcmUodik/ImFzYyI9PT1jP0djOlljOmpwOlljOkdjfX1jb25zdCBlZ2U9ImluZGljYXRvckRpc2FibGVkIix0Z2U9ImNvbHVtblNvcnRpbmciLG5nZT0ic29ydEFj'@;
put 'dGlvbiIscmdlPW5ldyBNYXAoW1tuRiwiYXNjZW5kaW5nIl0sW3JGLCJkZXNjZW5kaW5nIl1dKTtmdW5jdGlvbiBpRihjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gd2N0KGMpe3ZhciBsPWZ1bmN0aW9uIENjdChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9'@;
put 'Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9'@;
put 'cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxl'@;
put 'OiEwfSk6Y1tsXT1hLGN9ZnVuY3Rpb24gV18oYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9i'@;
put 'amVjdCIpfWNvbnN0IGFGPSJjb2x1bW5Tb3J0aW5nIixvRj0iYXBwZW5kIixpZ2U9YUY7RzRlKGFGLGZ1bmN0aW9uIGJjdChjLGwpe3JldHVybiBmdW5jdGlvbihhLGQpe2NvbnN0WywuLi5oXT1hLFssLi4uZl09ZDtyZXR1cm4gZnVuY3Rpb24oTSl7Y29uc3QgRD1jWzBdLFo9bFswXSxyZT1o'@;
put 'WzBdLGNlPWZbMF0sYmU9Wi5jb2x1bW5Tb3J0aW5nO3JldHVybihiZS5jb21wYXJlRnVuY3Rpb25GYWN0b3J5P2JlLmNvbXBhcmVGdW5jdGlvbkZhY3Rvcnk6JDRlKFoudHlwZSkpKEQsWixiZSkocmUsY2UpfSgpfX0pLFNhLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJiZWZvcmVDb2x1bW5T'@;
put 'b3J0IiksU2EuZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImFmdGVyQ29sdW1uU29ydCIpO2NvbnN0IHZUPW5ldyBXZWFrTWFwO3ZhciBwOT1uZXcgV2Vha1NldDtjbGFzcyBhZ2UgZXh0ZW5kcyBGc3tjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksZnVuY3Rpb24geWN0KGMsbCl7'@;
put 'KGZ1bmN0aW9uIF9jdChjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9KShjLGwpLGwuYWRkKGMpfSh0aGlzLHA5KSxpRih0aGlzLCJjb2x1bW5TdGF0ZXNN'@;
put 'YW5hZ2VyIixudWxsKSxpRih0aGlzLCJjb2x1bW5NZXRhQ2FjaGUiLG51bGwpLGlGKHRoaXMsInBsdWdpbktleSIsYUYpLGlGKHRoaXMsImluZGV4ZXNTZXF1ZW5jZUNhY2hlIixudWxsKX1zdGF0aWMgZ2V0IFBMVUdJTl9LRVkoKXtyZXR1cm4gYUZ9c3RhdGljIGdldCBQTFVHSU5fUFJJT1JJ'@;
put 'VFkoKXtyZXR1cm4gNTB9aXNFbmFibGVkKCl7cmV0dXJuISF0aGlzLmhvdC5nZXRTZXR0aW5ncygpW3RoaXMucGx1Z2luS2V5XX1lbmFibGVQbHVnaW4oKXt2YXIgbD10aGlzO2lmKHZULmhhcyh0aGlzLmhvdCkmJnZULmdldCh0aGlzLmhvdCkhPT10aGlzLnBsdWdpbktleSlyZXR1cm4gdGhp'@;
put 'cy5ob3QudXBkYXRlU2V0dGluZ3Moe1t0aGlzLnBsdWdpbktleV06ITF9KSx2b2lkIGZ1bmN0aW9uIGZjdChjLGwpe2lsKGdsYFBsdWdpbnMgXGBjb2x1bW5Tb3J0aW5nXGAgYW5kIFxgbXVsdGlDb2x1bW5Tb3J0aW5nXGAgc2hvdWxkIG5vdCBiZSBlbmFibGVkIHNpbXVsdGFuZW91c2x5Llx4'@;
put 'MjAKICAgIE9ubHkgXGAke2N9XGAgd2lsbCB3b3JrLiBUaGUgXGAke2x9XGAgcGx1Z2luIHdpbGwgcmVtYWluIGRpc2FibGVkLmApfSh2VC5nZXQodGhpcy5ob3QpLHRoaXMucGx1Z2luS2V5KTt0aGlzLmVuYWJsZWR8fCh2VC5zZXQodGhpcy5ob3QsdGhpcy5wbHVnaW5LZXkpLHRoaXMuY29s'@;
put 'dW1uU3RhdGVzTWFuYWdlcj1uZXcgUWx0KHRoaXMuaG90LGAke3RoaXMucGx1Z2luS2V5fS5zb3J0aW5nU3RhdGVzYCksdGhpcy5jb2x1bW5NZXRhQ2FjaGU9bmV3IFptKGE9PntsZXQgZD10aGlzLmhvdC50b1Zpc3VhbENvbHVtbihhKTtyZXR1cm4gbnVsbD09PWQmJihkPWEpLHRoaXMuZ2V0'@;
put 'TWVyZ2VkUGx1Z2luU2V0dGluZ3MoZCl9KSx0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5yZWdpc3Rlck1hcChgJHt0aGlzLnBsdWdpbktleX0uY29sdW1uTWV0YWAsdGhpcy5jb2x1bW5NZXRhQ2FjaGUpLHRoaXMuYWRkSG9vaygiYWZ0ZXJHZXRDb2xIZWFkZXIiLChhLGQpPT5XXyhwOSx0'@;
put 'aGlzLHhjdCkuY2FsbCh0aGlzLGEsZCkpLHRoaXMuYWRkSG9vaygiYmVmb3JlT25DZWxsTW91c2VEb3duIixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiBXXyhwOSxsLFRjdCku'@;
put 'Y2FsbChsLC4uLmQpfSksdGhpcy5hZGRIb29rKCJhZnRlck9uQ2VsbE1vdXNlRG93biIsKGEsZCk9PnRoaXMub25BZnRlck9uQ2VsbE1vdXNlRG93bihhLGQpKSx0aGlzLmFkZEhvb2soImFmdGVySW5pdCIsKCk9PldfKHA5LHRoaXMsX0opLmNhbGwodGhpcykpLHRoaXMuYWRkSG9vaygiYWZ0'@;
put 'ZXJMb2FkRGF0YSIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4gV18ocDksbCxFY3QpLmNhbGwobCwuLi5kKX0pLHRoaXMuaG90LnZpZXcmJldfKHA5LHRoaXMsX0opLmNhbGwo'@;
put 'dGhpcyksdGhpcy5yZWdpc3RlclNob3J0Y3V0cygpLHN1cGVyLmVuYWJsZVBsdWdpbigpKX1kaXNhYmxlUGx1Z2luKCl7Y29uc3QgbD0oYSxkKT0+e2NvbnN0IGg9WDRlKGQpOyExPT09SjRlKGEsZCl8fG51bGw9PT1ofHx0aGlzLnVwZGF0ZUhlYWRlckNsYXNzZXMoaCl9O3ZULmRlbGV0ZSh0'@;
put 'aGlzLmhvdCksdGhpcy5ob3QuYWRkSG9vaygiYWZ0ZXJHZXRDb2xIZWFkZXIiLGwpLHRoaXMuaG90LmFkZEhvb2tPbmNlKCJhZnRlclZpZXdSZW5kZXIiLCgpPT57dGhpcy5ob3QucmVtb3ZlSG9vaygiYWZ0ZXJHZXRDb2xIZWFkZXIiLGwpfSksdGhpcy5ob3QuYmF0Y2hFeGVjdXRpb24oKCk9'@;
put 'PntudWxsIT09dGhpcy5pbmRleGVzU2VxdWVuY2VDYWNoZSYmKHRoaXMuaG90LnJvd0luZGV4TWFwcGVyLnNldEluZGV4ZXNTZXF1ZW5jZSh0aGlzLmluZGV4ZXNTZXF1ZW5jZUNhY2hlLmdldFZhbHVlcygpKSx0aGlzLmhvdC5yb3dJbmRleE1hcHBlci51bnJlZ2lzdGVyTWFwKHRoaXMucGx1'@;
put 'Z2luS2V5KSx0aGlzLmluZGV4ZXNTZXF1ZW5jZUNhY2hlPW51bGwpfSwhMCksdGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIudW5yZWdpc3Rlck1hcChgJHt0aGlzLnBsdWdpbktleX0uY29sdW1uTWV0YWApLHRoaXMuY29sdW1uU3RhdGVzTWFuYWdlci5kZXN0cm95KCksdGhpcy5jb2x1bW5N'@;
put 'ZXRhQ2FjaGU9bnVsbCx0aGlzLmNvbHVtblN0YXRlc01hbmFnZXI9bnVsbCx0aGlzLnVucmVnaXN0ZXJTaG9ydGN1dHMoKSxzdXBlci5kaXNhYmxlUGx1Z2luKCl9cmVnaXN0ZXJTaG9ydGN1dHMoKXt0aGlzLmhvdC5nZXRTaG9ydGN1dE1hbmFnZXIoKS5nZXRDb250ZXh0KCJncmlkIikuYWRk'@;
put 'U2hvcnRjdXQoe2tleXM6W1siRW50ZXIiXV0sY2FsbGJhY2s6KCk9Pntjb25zdHtoaWdobGlnaHQ6bH09dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKTtyZXR1cm4gdGhpcy5zb3J0KHRoaXMuZ2V0Q29sdW1uTmV4dENvbmZpZyhsLmNvbCkpLCExfSxydW5Pbmx5SWY6KCk9Pnt2YXIg'@;
put 'bCxhO2NvbnN0IGQ9bnVsbD09PShsPXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCkpfHx2b2lkIDA9PT1sP3ZvaWQgMDpsLmhpZ2hsaWdodDtyZXR1cm4gZCYmKG51bGw9PT0oYT10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpKXx8dm9pZCAwPT09YT92b2lkIDA6YS5pc1Np'@;
put 'bmdsZSgpKSYmdGhpcy5ob3Quc2VsZWN0aW9uLmlzQ2VsbFZpc2libGUoZCkmJi0xPT09ZC5yb3cmJmQuY29sPj0wfSxyZWxhdGl2ZVRvR3JvdXA6V20scG9zaXRpb246ImJlZm9yZSIsZ3JvdXA6aWdlfSl9dW5yZWdpc3RlclNob3J0Y3V0cygpe3RoaXMuaG90LmdldFNob3J0Y3V0TWFuYWdl'@;
put 'cigpLmdldENvbnRleHQoImdyaWQiKS5yZW1vdmVTaG9ydGN1dHNCeUdyb3VwKGlnZSl9c29ydChsKXtjb25zdCBhPXRoaXMuZ2V0U29ydENvbmZpZygpLGQ9dGhpcy5nZXROb3JtYWxpemVkU29ydENvbmZpZ3MobCksaD10aGlzLmFyZVZhbGlkU29ydENvbmZpZ3MoZCk7ITEhPT10aGlzLmhv'@;
put 'dC5ydW5Ib29rcygiYmVmb3JlQ29sdW1uU29ydCIsYSxkLGgpJiYoMD09PWEubGVuZ3RoJiZudWxsPT09dGhpcy5pbmRleGVzU2VxdWVuY2VDYWNoZSYmKHRoaXMuaW5kZXhlc1NlcXVlbmNlQ2FjaGU9dGhpcy5ob3Qucm93SW5kZXhNYXBwZXIucmVnaXN0ZXJNYXAodGhpcy5wbHVnaW5LZXks'@;
put 'bmV3IEQzZSksdGhpcy5pbmRleGVzU2VxdWVuY2VDYWNoZS5zZXRWYWx1ZXModGhpcy5ob3Qucm93SW5kZXhNYXBwZXIuZ2V0SW5kZXhlc1NlcXVlbmNlKCkpKSxoJiYodGhpcy5jb2x1bW5TdGF0ZXNNYW5hZ2VyLnNldFNvcnRTdGF0ZXMoZCksdGhpcy5zb3J0QnlQcmVzZXRTb3J0U3RhdGVz'@;
put 'KGQpLHRoaXMuc2F2ZUFsbFNvcnRTZXR0aW5ncyhkKSksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyQ29sdW1uU29ydCIsYSxoP2Q6YSxoKSxoJiZ0aGlzLmhvdC5yZW5kZXIoKSl9Y2xlYXJTb3J0KCl7dGhpcy5zb3J0KFtdKX1pc1NvcnRlZCgpe3JldHVybiB0aGlzLmVuYWJsZWQmJiF0aGlz'@;
put 'LmNvbHVtblN0YXRlc01hbmFnZXIuaXNMaXN0T2ZTb3J0ZWRDb2x1bW5zRW1wdHkoKX1nZXRTb3J0Q29uZmlnKGwpe3JldHVybiBQYShsKT90aGlzLmNvbHVtblN0YXRlc01hbmFnZXIuZ2V0Q29sdW1uU29ydFN0YXRlKGwpOnRoaXMuY29sdW1uU3RhdGVzTWFuYWdlci5nZXRTb3J0U3RhdGVz'@;
put 'KCl9c2V0U29ydENvbmZpZyhsKXtjb25zdCBhPXRoaXMuZ2V0Tm9ybWFsaXplZFNvcnRDb25maWdzKGwpO3RoaXMuYXJlVmFsaWRTb3J0Q29uZmlncyhhKSYmdGhpcy5jb2x1bW5TdGF0ZXNNYW5hZ2VyLnNldFNvcnRTdGF0ZXMoYSl9Z2V0Tm9ybWFsaXplZFNvcnRDb25maWdzKCl7bGV0IGw9'@;
put 'YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOltdO3JldHVybiBBcnJheS5pc0FycmF5KGwpP2wuc2xpY2UoMCwxKTpbbF19YXJlVmFsaWRTb3J0Q29uZmlncyhsKXtjb25zdCBhPXRoaXMuaG90LmNvdW50Q29scygpO3JldHVybiBmdW5jdGlv'@;
put 'biBoY3QoYyl7aWYoYy5zb21lKGE9PiExPT09ZnVuY3Rpb24gZGN0KGMpe2lmKCExPT09cW8oYykpcmV0dXJuITE7Y29uc3R7Y29sdW1uOmwsc29ydE9yZGVyOmF9PWM7cmV0dXJuIE51bWJlci5pc0ludGVnZXIobCkmJltuRixyRl0uaW5jbHVkZXMoYSl9KGEpKSlyZXR1cm4hMTtjb25zdCBs'@;
put 'PWMubWFwKGE9PntsZXR7Y29sdW1uOmR9PWE7cmV0dXJuIGR9KTtyZXR1cm4gbmV3IFNldChsKS5zaXplPT09bC5sZW5ndGh9KGwpJiZsLmV2ZXJ5KGQ9PntsZXR7Y29sdW1uOmh9PWQ7cmV0dXJuIGg8PWEmJmg+PTB9KX1zYXZlQWxsU29ydFNldHRpbmdzKGwpe2NvbnN0IGE9dGhpcy5jb2x1'@;
put 'bW5TdGF0ZXNNYW5hZ2VyLmdldEFsbENvbHVtbnNQcm9wZXJ0aWVzKCk7YS5pbml0aWFsQ29uZmlnPXlzKGwsaD0+e2xldHtjb2x1bW46ZiwuLi52fT1oO3JldHVybntjb2x1bW46dGhpcy5ob3QudG9QaHlzaWNhbENvbHVtbihmKSwuLi52fX0pLHRoaXMuaG90LnJ1bkhvb2tzKCJwZXJzaXN0'@;
put 'ZW50U3RhdGVTYXZlIiwiY29sdW1uU29ydGluZyIsYSl9Z2V0QWxsU2F2ZWRTb3J0U2V0dGluZ3MoKXtjb25zdCBsPXt9O3RoaXMuaG90LnJ1bkhvb2tzKCJwZXJzaXN0ZW50U3RhdGVMb2FkIiwiY29sdW1uU29ydGluZyIsbCk7Y29uc3QgYT1sLnZhbHVlO3JldHVybiBQYShhKSYmQXJyYXku'@;
put 'aXNBcnJheShhLmluaXRpYWxDb25maWcpJiYoYS5pbml0aWFsQ29uZmlnPXlzKGEuaW5pdGlhbENvbmZpZyxoPT57bGV0e2NvbHVtbjpmLC4uLnZ9PWg7cmV0dXJue2NvbHVtbjp0aGlzLmhvdC50b1Zpc3VhbENvbHVtbihmKSwuLi52fX0pKSxhfWdldENvbHVtbk5leHRDb25maWcobCl7Y29u'@;
put 'c3QgYT10aGlzLmNvbHVtblN0YXRlc01hbmFnZXIuZ2V0U29ydE9yZGVyT2ZDb2x1bW4obCk7aWYoUGEoYSkpe2NvbnN0IGg9cTRlKGEpO3JldHVybiBQYShoKT97Y29sdW1uOmwsc29ydE9yZGVyOmh9OnZvaWQgMH1jb25zdCBkPXRoaXMuaG90LmNvdW50Q29scygpO2lmKE51bWJlci5pc0lu'@;
put 'dGVnZXIobCkmJmw+PTAmJmw8ZClyZXR1cm57Y29sdW1uOmwsc29ydE9yZGVyOnE0ZSgpfX1nZXROZXh0U29ydENvbmZpZyhsKXtsZXQgYT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06b0Y7Y29uc3QgZD10aGlzLmNvbHVtblN0YXRlc01h'@;
put 'bmFnZXIuZ2V0SW5kZXhPZkNvbHVtbkluU29ydFF1ZXVlKGwpLGg9LTEhPT1kLGY9dGhpcy5nZXRTb3J0Q29uZmlnKCksdj10aGlzLmdldENvbHVtbk5leHRDb25maWcobCk7aWYoaCl7aWYoX2ModikpcmV0dXJuWy4uLmYuc2xpY2UoMCxkKSwuLi5mLnNsaWNlKGQrMSldO2lmKGE9PT1vRily'@;
put 'ZXR1cm5bLi4uZi5zbGljZSgwLGQpLC4uLmYuc2xpY2UoZCsxKSx2XTtpZigicmVwbGFjZSI9PT1hKXJldHVyblsuLi5mLnNsaWNlKDAsZCksdiwuLi5mLnNsaWNlKGQrMSldfXJldHVybiBQYSh2KT9mLmNvbmNhdCh2KTpmfWdldFBsdWdpbkNvbHVtbkNvbmZpZyhsKXtpZihxbyhsKSl7Y29u'@;
put 'c3QgYT1sW3RoaXMucGx1Z2luS2V5XTtpZihxbyhhKSlyZXR1cm4gYX1yZXR1cm57fX1nZXRNZXJnZWRQbHVnaW5TZXR0aW5ncyhsKXtjb25zdCBhPXRoaXMuaG90LmdldFNldHRpbmdzKClbdGhpcy5wbHVnaW5LZXldLGQ9dGhpcy5jb2x1bW5TdGF0ZXNNYW5hZ2VyLmdldEFsbENvbHVtbnNQ'@;
put 'cm9wZXJ0aWVzKCksaD10aGlzLmhvdC5nZXRDZWxsTWV0YSgwLGwpLGY9T2JqZWN0LmdldFByb3RvdHlwZU9mKGgpO3JldHVybiBBcnJheS5pc0FycmF5KGYuY29sdW1ucyk/T2JqZWN0LmFzc2lnbihkLGEsdGhpcy5nZXRQbHVnaW5Db2x1bW5Db25maWcoZi5jb2x1bW5zW2xdKSk6bWwoZi5j'@;
put 'b2x1bW5zKT9PYmplY3QuYXNzaWduKGQsYSx0aGlzLmdldFBsdWdpbkNvbHVtbkNvbmZpZyhmLmNvbHVtbnMobCkpKTpPYmplY3QuYXNzaWduKGQsYSl9Z2V0Rmlyc3RDZWxsU2V0dGluZ3MobCl7Y29uc3QgYT10aGlzLmhvdC5nZXRDZWxsTWV0YSgwLGwpLGQ9T2JqZWN0LmNyZWF0ZShhKTty'@;
put 'ZXR1cm4gZFt0aGlzLnBsdWdpbktleV09dGhpcy5jb2x1bW5NZXRhQ2FjaGUuZ2V0VmFsdWVBdEluZGV4KHRoaXMuaG90LnRvUGh5c2ljYWxDb2x1bW4obCkpLGR9Z2V0TnVtYmVyT2ZSb3dzVG9Tb3J0KGwpe2NvbnN0IGE9dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKTtyZXR1cm4gYS5tYXhSb3dz'@;
put 'PD1sP2EubWF4Um93czpsLWEubWluU3BhcmVSb3dzfXNvcnRCeVByZXNldFNvcnRTdGF0ZXMobCl7aWYodGhpcy5ob3Qucm93SW5kZXhNYXBwZXIuc2V0SW5kZXhlc1NlcXVlbmNlKHRoaXMuaW5kZXhlc1NlcXVlbmNlQ2FjaGUuZ2V0VmFsdWVzKCkpLDA9PT1sLmxlbmd0aClyZXR1cm47Y29u'@;
put 'c3QgYT1bXSxkPXRoaXMuaG90LmNvdW50Um93cygpLGg9Wj0+eXMobCxyZT0+dGhpcy5ob3QuZ2V0RGF0YUF0Q2VsbChaLHJlLmNvbHVtbikpO2ZvcihsZXQgWj0wO1o8dGhpcy5nZXROdW1iZXJPZlJvd3NUb1NvcnQoZCk7Wis9MSlhLnB1c2goW3RoaXMuaG90LnRvUGh5c2ljYWxSb3coWild'@;
put 'LmNvbmNhdChoKFopKSk7Y29uc3QgZj15cyhhLFo9PlpbMF0pOyFmdW5jdGlvbiB1Y3QoYyxsKXtjb25zdCBhPWNjdChsKTtmb3IodmFyIGQ9YXJndW1lbnRzLmxlbmd0aCxoPW5ldyBBcnJheShkPjI/ZC0yOjApLGY9MjtmPGQ7ZisrKWhbZi0yXT1hcmd1bWVudHNbZl07Yy5zb3J0KGEoLi4u'@;
put 'aCkpfShhLHRoaXMucGx1Z2luS2V5LHlzKGwsWj0+Wi5zb3J0T3JkZXIpLHlzKGwsWj0+dGhpcy5nZXRGaXJzdENlbGxTZXR0aW5ncyhaLmNvbHVtbikpKTtmb3IobGV0IFo9YS5sZW5ndGg7WjxkO1orPTEpYS5wdXNoKFtaXS5jb25jYXQoaChaKSkpO2NvbnN0IHY9eXMoYSxaPT5aWzBdKSxN'@;
put 'PW5ldyBNYXAoeXMoZiwoWixyZSk9PltaLHZbcmVdXSkpLEQ9eXModGhpcy5ob3Qucm93SW5kZXhNYXBwZXIuZ2V0SW5kZXhlc1NlcXVlbmNlKCksWj0+TS5oYXMoWik/TS5nZXQoWik6Wik7dGhpcy5ob3Qucm93SW5kZXhNYXBwZXIuc2V0SW5kZXhlc1NlcXVlbmNlKEQpfXNvcnRCeVNldHRp'@;
put 'bmdzKGwpe2lmKHFvKGwpKXt0aGlzLmNvbHVtblN0YXRlc01hbmFnZXIudXBkYXRlQWxsQ29sdW1uc1Byb3BlcnRpZXMobCk7Y29uc3QgYT1sLmluaXRpYWxDb25maWc7KEFycmF5LmlzQXJyYXkoYSl8fHFvKGEpKSYmdGhpcy5zb3J0KGEpfWVsc2UgdGhpcy5ob3QucmVuZGVyKCl9dXBkYXRl'@;
put 'SGVhZGVyQ2xhc3NlcyhsKXtpZihsbyhsLGZ1bmN0aW9uIHZjdCgpe3JldHVybiBBcnJheS5mcm9tKHJnZS52YWx1ZXMoKSkuY29uY2F0KG5nZSxlZ2UsdGdlKX0oKSksITEhPT10aGlzLmVuYWJsZWQpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGE+MT9hLTE6MCks'@;
put 'aD0xO2g8YTtoKyspZFtoLTFdPWFyZ3VtZW50c1toXTtUaShsLGZ1bmN0aW9uIG1jdChjLGwsYSxkKXtjb25zdCBoPVt0Z2VdO2lmKGQmJmgucHVzaChuZ2UpLCExPT09YSlyZXR1cm4gaC5wdXNoKGVnZSksaDtjb25zdCBmPWMuZ2V0U29ydE9yZGVyT2ZDb2x1bW4obCk7cmV0dXJuIFBhKGYp'@;
put 'JiZoLnB1c2gocmdlLmdldChmKSksaH0oLi4uZCkpfX1vblVwZGF0ZVNldHRpbmdzKGwpe3N1cGVyLm9uVXBkYXRlU2V0dGluZ3MobCksbnVsbCE9PXRoaXMuY29sdW1uTWV0YUNhY2hlJiZ0aGlzLmNvbHVtbk1ldGFDYWNoZS5pbml0KHRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLmdldE51'@;
put 'bWJlck9mSW5kZXhlcygpKSxQYShsW3RoaXMucGx1Z2luS2V5XSkmJnRoaXMuc29ydEJ5U2V0dGluZ3MobFt0aGlzLnBsdWdpbktleV0pfXdhc0NsaWNrYWJsZUhlYWRlckNsaWNrZWQobCxhKXtyZXR1cm4gdGhpcy5nZXRGaXJzdENlbGxTZXR0aW5ncyhhKVt0aGlzLnBsdWdpbktleV0uaGVh'@;
put 'ZGVyQWN0aW9uJiZwbyhsLnRhcmdldCxLNGUpfW9uQWZ0ZXJPbkNlbGxNb3VzZURvd24obCxhKXtpZighMSE9PXlKKGEucm93LGEuY29sLGwpJiZ0aGlzLndhc0NsaWNrYWJsZUhlYWRlckNsaWNrZWQobCxhLmNvbCkpe3RoaXMuaG90LmdldFNob3J0Y3V0TWFuYWdlcigpLmlzQ3RybFByZXNz'@;
put 'ZWQoKSYmKHRoaXMuaG90LmRlc2VsZWN0Q2VsbCgpLHRoaXMuaG90LnNlbGVjdENvbHVtbnMoYS5jb2wpKTtjb25zdCBkPXRoaXMuaG90LmdldEFjdGl2ZUVkaXRvcigpLGg9dGhpcy5nZXRDb2x1bW5OZXh0Q29uZmlnKGEuY29sKTtudWxsIT1kJiZkLmlzT3BlbmVkKCkmJnRoaXMuaG90Lmdl'@;
put 'dENlbGxWYWxpZGF0b3IoZC5yb3csZC5jb2wpP3RoaXMuaG90LmFkZEhvb2tPbmNlKCJwb3N0QWZ0ZXJWYWxpZGF0ZSIsKCk9Pnt0aGlzLnNvcnQoaCl9KTp0aGlzLnNvcnQoaCl9fWRlc3Ryb3koKXt2YXIgbDtudWxsPT09KGw9dGhpcy5jb2x1bW5TdGF0ZXNNYW5hZ2VyKXx8dm9pZCAwPT09'@;
put 'bHx8bC5kZXN0cm95KCksc3VwZXIuZGVzdHJveSgpfX1mdW5jdGlvbiBfSigpe2NvbnN0IGM9dGhpcy5nZXRBbGxTYXZlZFNvcnRTZXR0aW5ncygpO2lmKHFvKGMpKXRoaXMuc29ydEJ5U2V0dGluZ3MoYyk7ZWxzZXtjb25zdCBsPXRoaXMuaG90LmdldFNldHRpbmdzKClbdGhpcy5wbHVnaW5L'@;
put 'ZXldO3RoaXMuc29ydEJ5U2V0dGluZ3MobCl9fWZ1bmN0aW9uIHhjdChjLGwpe2NvbnN0IGE9WDRlKGwpO2lmKCExPT09SjRlKGMsbCl8fG51bGw9PT1hKXJldHVybjtjb25zdCBkPXRoaXMuZ2V0Rmlyc3RDZWxsU2V0dGluZ3MoYylbdGhpcy5wbHVnaW5LZXldO2lmKHRoaXMudXBkYXRlSGVh'@;
put 'ZGVyQ2xhc3NlcyhhLHRoaXMuY29sdW1uU3RhdGVzTWFuYWdlcixjLGQuaW5kaWNhdG9yLGQuaGVhZGVyQWN0aW9uKSx0aGlzLmhvdC5nZXRTZXR0aW5ncygpLmFyaWFUYWdzKXtjb25zdCB2PXRoaXMuY29sdW1uU3RhdGVzTWFuYWdlci5nZXRTb3J0T3JkZXJPZkNvbHVtbihjKTt2byhsLC4u'@;
put 'LihjPT5bImFyaWEtc29ydCIsY10pKHY/YCR7dn1lbmRpbmdgOiJub25lIikpfX1mdW5jdGlvbiBFY3QoYyl7ITA9PT1jJiZ0aGlzLmhvdC52aWV3JiZXXyhwOSx0aGlzLF9KKS5jYWxsKHRoaXMpfWZ1bmN0aW9uIFRjdChjLGwsYSxkKXshMSE9PXlKKGwucm93LGwuY29sLGMpJiZ0aGlzLndh'@;
put 'c0NsaWNrYWJsZUhlYWRlckNsaWNrZWQoYyxsLmNvbCkmJnRoaXMuaG90LmdldFNob3J0Y3V0TWFuYWdlcigpLmlzQ3RybFByZXNzZWQoKSYmKGQuY29sdW1uPSEwKX1mdW5jdGlvbiBnOShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gQWN0KGMpe3ZhciBsPWZ1bmN0aW9uIGtjdChjLGwpe2lm'@;
put 'KCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9Qcmlt'@;
put 'aXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTph'@;
put 'LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y29uc3QgSWN0PWNsYXNzIERjdHtjb25zdHJ1Y3RvcihsLGEpe2c5KHRoaXMsInBsdWdpbiIsdm9pZCAwKSxnOSh0aGlzLCJob3QiLHZvaWQgMCksZzkodGhpcywiZW5kcG9pbnRzIixbXSksZzko'@;
put 'dGhpcywic2V0dGluZ3MiLHZvaWQgMCksZzkodGhpcywic2V0dGluZ3NUeXBlIiwiYXJyYXkiKSxnOSh0aGlzLCJjdXJyZW50RW5kcG9pbnQiLG51bGwpLGc5KHRoaXMsImNlbGxzVG9TZXRDYWNoZSIsW10pLHRoaXMucGx1Z2luPWwsdGhpcy5ob3Q9dGhpcy5wbHVnaW4uaG90LHRoaXMuc2V0'@;
put 'dGluZ3M9YX1pbml0RW5kcG9pbnRzKCl7dGhpcy5lbmRwb2ludHM9dGhpcy5wYXJzZVNldHRpbmdzKCksdGhpcy5yZWZyZXNoQWxsRW5kcG9pbnRzKCl9Z2V0RW5kcG9pbnQobCl7cmV0dXJuImZ1bmN0aW9uIj09PXRoaXMuc2V0dGluZ3NUeXBlP3RoaXMuZmlsbE1pc3NpbmdFbmRwb2ludERh'@;
put 'dGEodGhpcy5zZXR0aW5ncylbbF06dGhpcy5lbmRwb2ludHNbbF19Z2V0QWxsRW5kcG9pbnRzKCl7cmV0dXJuImZ1bmN0aW9uIj09PXRoaXMuc2V0dGluZ3NUeXBlP3RoaXMuZmlsbE1pc3NpbmdFbmRwb2ludERhdGEodGhpcy5zZXR0aW5ncyk6dGhpcy5lbmRwb2ludHN9ZmlsbE1pc3NpbmdF'@;
put 'bmRwb2ludERhdGEobCl7cmV0dXJuIHRoaXMucGFyc2VTZXR0aW5ncyhsLmNhbGwodGhpcykpfXBhcnNlU2V0dGluZ3MobCl7Y29uc3QgYT1bXTtsZXQgZD1sO2lmKGR8fCJmdW5jdGlvbiIhPXR5cGVvZiB0aGlzLnNldHRpbmdzKXJldHVybiBkfHwoZD10aGlzLnNldHRpbmdzKSxZbihkLGg9'@;
put 'Pntjb25zdCBmPXt9O3RoaXMuYXNzaWduU2V0dGluZyhoLGYsInJhbmdlcyIsW1swLHRoaXMuaG90LmNvdW50Um93cygpLTFdXSksdGhpcy5hc3NpZ25TZXR0aW5nKGgsZiwicmV2ZXJzZWRSb3dDb29yZHMiLCExKSx0aGlzLmFzc2lnblNldHRpbmcoaCxmLCJkZXN0aW5hdGlvblJvdyIsbmV3'@;
put 'IEVycm9yKCJcbiAgICAgICAgWW91IG11c3QgcHJvdmlkZSBhIGRlc3RpbmF0aW9uIHJvdyBmb3IgdGhlIENvbHVtbiBTdW1tYXJ5IHBsdWdpbiBpbiBvcmRlciB0byB3b3JrIHByb3Blcmx5IVxuICAgICAgIikpLHRoaXMuYXNzaWduU2V0dGluZyhoLGYsImRlc3RpbmF0aW9uQ29sdW1uIixu'@;
put 'ZXcgRXJyb3IoIlxuICAgICAgICBZb3UgbXVzdCBwcm92aWRlIGEgZGVzdGluYXRpb24gY29sdW1uIGZvciB0aGUgQ29sdW1uIFN1bW1hcnkgcGx1Z2luIGluIG9yZGVyIHRvIHdvcmsgcHJvcGVybHkhXG4gICAgICAiKSksdGhpcy5hc3NpZ25TZXR0aW5nKGgsZiwic291cmNlQ29sdW1uIixo'@;
put 'LmRlc3RpbmF0aW9uQ29sdW1uKSx0aGlzLmFzc2lnblNldHRpbmcoaCxmLCJ0eXBlIiwic3VtIiksdGhpcy5hc3NpZ25TZXR0aW5nKGgsZiwiZm9yY2VOdW1lcmljIiwhMSksdGhpcy5hc3NpZ25TZXR0aW5nKGgsZiwic3VwcHJlc3NEYXRhVHlwZUVycm9ycyIsITApLHRoaXMuYXNzaWduU2V0'@;
put 'dGluZyhoLGYsImN1c3RvbUZ1bmN0aW9uIixudWxsKSx0aGlzLmFzc2lnblNldHRpbmcoaCxmLCJyZWFkT25seSIsITApLHRoaXMuYXNzaWduU2V0dGluZyhoLGYsInJvdW5kRmxvYXQiLCExKSxhLnB1c2goZil9KSxhO3RoaXMuc2V0dGluZ3NUeXBlPSJmdW5jdGlvbiJ9YXNzaWduU2V0dGlu'@;
put 'ZyhsLGEsZCxoKXtpZigicmFuZ2VzIiE9PWR8fHZvaWQgMCE9PWxbZF0pe2lmKCJyYW5nZXMiIT09ZHx8MCE9PWxbZF0ubGVuZ3RoKWlmKHZvaWQgMD09PWxbZF0pe2lmKGggaW5zdGFuY2VvZiBFcnJvcil0aHJvdyBoO2FbZF09aH1lbHNlIGFbZF09ImRlc3RpbmF0aW9uUm93Ij09PWQmJmEu'@;
put 'cmV2ZXJzZWRSb3dDb29yZHM/dGhpcy5ob3QuY291bnRSb3dzKCktbFtkXS0xOmxbZF19ZWxzZSBhW2RdPWh9cmVzZXRTZXR1cEJlZm9yZVN0cnVjdHVyZUFsdGVyYXRpb24obCxhLGQpe2lmKCJmdW5jdGlvbiIhPT10aGlzLnNldHRpbmdzVHlwZSlyZXR1cm47Y29uc3QgaD1sLmluZGV4T2Yo'@;
put 'InJvdyIpPi0xPyJyb3ciOiJjb2wiLGY9dGhpcy5nZXRBbGxFbmRwb2ludHMoKTtZbihmLHY9Pnsicm93Ij09PWgmJnYuZGVzdGluYXRpb25Sb3c+PWEmJigiaW5zZXJ0X3JvdyI9PT1sP3YuYWx0ZXJSb3dPZmZzZXQ9ZDoicmVtb3ZlX3JvdyI9PT1sJiYodi5hbHRlclJvd09mZnNldD0tMSpk'@;
put 'KSksImNvbCI9PT1oJiZ2LmRlc3RpbmF0aW9uQ29sdW1uPj1hJiYoImluc2VydF9jb2wiPT09bD92LmFsdGVyQ29sdW1uT2Zmc2V0PWQ6InJlbW92ZV9jb2wiPT09bCYmKHYuYWx0ZXJDb2x1bW5PZmZzZXQ9LTEqZCkpfSksdGhpcy5yZXNldEFsbEVuZHBvaW50cyhmLCExKX1yZXNldFNldHVw'@;
put 'QWZ0ZXJTdHJ1Y3R1cmVBbHRlcmF0aW9uKGwsYSxkLGgsZil7bGV0IHY9IShhcmd1bWVudHMubGVuZ3RoPjUmJnZvaWQgMCE9PWFyZ3VtZW50c1s1XSl8fGFyZ3VtZW50c1s1XTtpZigiZnVuY3Rpb24iPT09dGhpcy5zZXR0aW5nc1R5cGUpe2NvbnN0IGJlPSgpPT4odGhpcy5ob3QucmVtb3Zl'@;
put 'SG9vaygiYmVmb3JlVmlld1JlbmRlciIsYmUpLHRoaXMucmVmcmVzaEFsbEVuZHBvaW50cygpKTtyZXR1cm4gdm9pZCB0aGlzLmhvdC5hZGRIb29rT25jZSgiYmVmb3JlVmlld1JlbmRlciIsYmUpfWNvbnN0IE09bC5pbmRleE9mKCJyb3ciKT4tMT8icm93IjoiY29sIixEPWwuaW5kZXhPZigi'@;
put 'cmVtb3ZlIik+LTE/LTE6MSxaPXRoaXMuZ2V0QWxsRW5kcG9pbnRzKCkscmU9MD09PWwuaW5kZXhPZigibW92ZV9yb3ciKSxjZT1hO1luKFosYmU9Pnsicm93Ij09PU0mJmJlLmRlc3RpbmF0aW9uUm93Pj1jZSYmKGJlLmFsdGVyUm93T2Zmc2V0PUQqZCksImNvbCI9PT1NJiZiZS5kZXN0aW5h'@;
put 'dGlvbkNvbHVtbj49Y2UmJihiZS5hbHRlckNvbHVtbk9mZnNldD1EKmQpfSksdGhpcy5yZXNldEFsbEVuZHBvaW50cyhaLCFyZSksWW4oWixyZT9iZT0+e3RoaXMuZXh0ZW5kRW5kcG9pbnRSYW5nZXMoYmUsY2UsaFswXSxoLmxlbmd0aCksdGhpcy5yZWNyZWF0ZVBoeXNpY2FsUmFuZ2VzKGJl'@;
put 'KSx0aGlzLmNsZWFyT2Zmc2V0SW5mb3JtYXRpb24oYmUpfTpiZT0+e3RoaXMuc2hpZnRFbmRwb2ludENvb3JkaW5hdGVzKGJlLGNlKX0pLHYmJnRoaXMucmVmcmVzaEFsbEVuZHBvaW50cygpfWNsZWFyT2Zmc2V0SW5mb3JtYXRpb24obCl7bC5hbHRlclJvd09mZnNldD12b2lkIDAsbC5hbHRl'@;
put 'ckNvbHVtbk9mZnNldD12b2lkIDB9ZXh0ZW5kRW5kcG9pbnRSYW5nZXMobCxhLGQsaCl7WW4obC5yYW5nZXMsZj0+e2ZbMV0mJihhPj1mWzBdJiZhPD1mWzFdP2Q+ZlsxXT9mWzFdKz1oOmQ8ZlswXSYmKGZbMF0tPWgpOmQ+PWZbMF0mJmQ8PWZbMV0mJihmWzFdLT1oLGE8PWZbMF0mJihmWzBd'@;
put 'Kz0xLGZbMV0rPTEpKSl9KX1yZWNyZWF0ZVBoeXNpY2FsUmFuZ2VzKGwpe2NvbnN0IGQ9W10saD1bXTtZbihsLnJhbmdlcyxmPT57Y29uc3Qgdj1bXTtpZihmWzFdKWZvcihsZXQgTT1mWzBdO008PWZbMV07TSsrKXYucHVzaCh0aGlzLmhvdC50b1BoeXNpY2FsUm93KE0pKTtlbHNlIHYucHVz'@;
put 'aCh0aGlzLmhvdC50b1BoeXNpY2FsUm93KGZbMF0pKTtoLnB1c2godil9KSxZbihoLGY9PntsZXQgdj1bXTtZbihmLChNLEQpPT57MD09PUQ/di5wdXNoKE0pOmZbRF0hPT1mW0QtMV0rMSYmKHYucHVzaChmW0QtMV0pLGQucHVzaCh2KSx2PVtdLHYucHVzaChNKSksRD09PWYubGVuZ3RoLTEm'@;
put 'Jih2LnB1c2goTSksZC5wdXNoKHYpKX0pfSksbC5yYW5nZXM9ZH1zaGlmdEVuZHBvaW50Q29vcmRpbmF0ZXMobCxhKXtsLmFsdGVyUm93T2Zmc2V0JiYwIT09bC5hbHRlclJvd09mZnNldD8obC5kZXN0aW5hdGlvblJvdys9bC5hbHRlclJvd09mZnNldHx8MCxZbihsLnJhbmdlcyxkPT57WW4o'@;
put 'ZCwoaCxmKT0+e2g+PWEmJihkW2ZdKz1sLmFsdGVyUm93T2Zmc2V0fHwwKX0pfSkpOmwuYWx0ZXJDb2x1bW5PZmZzZXQmJjAhPT1sLmFsdGVyQ29sdW1uT2Zmc2V0JiYobC5kZXN0aW5hdGlvbkNvbHVtbis9bC5hbHRlckNvbHVtbk9mZnNldHx8MCxsLnNvdXJjZUNvbHVtbis9bC5hbHRlckNv'@;
put 'bHVtbk9mZnNldHx8MCl9cmVzZXRBbGxFbmRwb2ludHMoKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06dGhpcy5nZXRBbGxFbmRwb2ludHMoKSxhPSEoYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0p'@;
put 'fHxhcmd1bWVudHNbMV07bC5zb21lKGg9Pntjb25zdCB2PWguYWx0ZXJDb2x1bW5PZmZzZXR8fDA7cmV0dXJuIGguZGVzdGluYXRpb25Sb3crKGguYWx0ZXJSb3dPZmZzZXR8fDApPj10aGlzLmhvdC5jb3VudFJvd3MoKXx8aC5kZXN0aW5hdGlvbkNvbHVtbit2Pj10aGlzLmhvdC5jb3VudENv'@;
put 'bHMoKX0pfHwodGhpcy5jZWxsc1RvU2V0Q2FjaGU9W10sWW4obCxoPT57dGhpcy5yZXNldEVuZHBvaW50VmFsdWUoaCxhKX0pLHRoaXMuaG90LnNldERhdGFBdENlbGwodGhpcy5jZWxsc1RvU2V0Q2FjaGUsIkNvbHVtblN1bW1hcnkucmVzZXQiKSx0aGlzLmNlbGxzVG9TZXRDYWNoZT1bXSl9'@;
put 'cmVmcmVzaEFsbEVuZHBvaW50cygpe3RoaXMuY2VsbHNUb1NldENhY2hlPVtdLFluKHRoaXMuZ2V0QWxsRW5kcG9pbnRzKCksbD0+e3RoaXMuY3VycmVudEVuZHBvaW50PWwsdGhpcy5wbHVnaW4uY2FsY3VsYXRlKGwpLHRoaXMuc2V0RW5kcG9pbnRWYWx1ZShsLCJpbml0Iil9KSx0aGlzLmN1'@;
put 'cnJlbnRFbmRwb2ludD1udWxsLHRoaXMuaG90LnNldERhdGFBdENlbGwodGhpcy5jZWxsc1RvU2V0Q2FjaGUsIkNvbHVtblN1bW1hcnkucmVzZXQiKSx0aGlzLmNlbGxzVG9TZXRDYWNoZT1bXX1yZWZyZXNoQ2hhbmdlZEVuZHBvaW50cyhsKXtjb25zdCBhPVtdO3RoaXMuY2VsbHNUb1NldENh'@;
put 'Y2hlPVtdLFluKGwsKGQsaCxmKT0+e2Ake2RbMl18fCIifWAhPWAke2RbM119YCYmWW4odGhpcy5nZXRBbGxFbmRwb2ludHMoKSwodixNKT0+e3RoaXMuaG90LnByb3BUb0NvbChmW2hdWzFdKT09PXYuc291cmNlQ29sdW1uJiYtMT09PWEuaW5kZXhPZihNKSYmYS5wdXNoKE0pfSl9KSxZbihh'@;
put 'LGQ9Pnt0aGlzLnJlZnJlc2hFbmRwb2ludCh0aGlzLmdldEVuZHBvaW50KGQpKX0pLHRoaXMuaG90LnNldERhdGFBdENlbGwodGhpcy5jZWxsc1RvU2V0Q2FjaGUsIkNvbHVtblN1bW1hcnkucmVzZXQiKSx0aGlzLmNlbGxzVG9TZXRDYWNoZT1bXX1yZWZyZXNoQ2VsbE1ldGFzKCl7dGhpcy5l'@;
put 'bmRwb2ludHMuZm9yRWFjaChsPT57Y29uc3QgYT10aGlzLmhvdC50b1Zpc3VhbFJvdyhsLmRlc3RpbmF0aW9uUm93KTtpZihudWxsIT09YSl7Y29uc3QgZD10aGlzLmhvdC5nZXRDZWxsTWV0YShhLGwuZGVzdGluYXRpb25Db2x1bW4pO2QucmVhZE9ubHk9bC5yZWFkT25seSxkLmNsYXNzTmFt'@;
put 'ZT0iY29sdW1uU3VtbWFyeVJlc3VsdCJ9fSl9cmVmcmVzaEVuZHBvaW50KGwpe3RoaXMuY3VycmVudEVuZHBvaW50PWwsdGhpcy5wbHVnaW4uY2FsY3VsYXRlKGwpLHRoaXMuc2V0RW5kcG9pbnRWYWx1ZShsKSx0aGlzLmN1cnJlbnRFbmRwb2ludD1udWxsfXJlc2V0RW5kcG9pbnRWYWx1ZShs'@;
put 'KXtsZXQgYT0hKGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdKXx8YXJndW1lbnRzWzFdO2NvbnN0IGg9bC5hbHRlckNvbHVtbk9mZnNldHx8MDt0aGlzLmNlbGxzVG9TZXRDYWNoZS5wdXNoKFt0aGlzLmhvdC50b1Zpc3VhbFJvdyhsLmRlc3RpbmF0aW9uUm93Kyhh'@;
put 'JiZsLmFsdGVyUm93T2Zmc2V0fHwwKSksdGhpcy5ob3QudG9WaXN1YWxDb2x1bW4obC5kZXN0aW5hdGlvbkNvbHVtbisoYT9oOjApKSwiIl0pfXNldEVuZHBvaW50VmFsdWUobCxhKXtsZXQgZD1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXSYmYXJndW1lbnRzWzJd'@;
put 'O2NvbnN0IGg9dGhpcy5ob3QudG9WaXN1YWxSb3cobC5kZXN0aW5hdGlvblJvdyk7aWYobC5kZXN0aW5hdGlvblJvdz49dGhpcy5ob3QuY291bnRSb3dzKCl8fGwuZGVzdGluYXRpb25Db2x1bW4+PXRoaXMuaG90LmNvdW50Q29scygpKXJldHVybiB2b2lkIHRoaXMudGhyb3dPdXRPZkJvdW5k'@;
put 'c1dhcm5pbmcoKTtjb25zdCBmPXRoaXMuaG90LnRvVmlzdWFsUm93KGwuZGVzdGluYXRpb25Sb3cpO2lmKG51bGwhPT1mKXtjb25zdCB2PXRoaXMuaG90LmdldENlbGxNZXRhKGYsbC5kZXN0aW5hdGlvbkNvbHVtbik7KCJpbml0Ij09PWF8fHYucmVhZE9ubHkhPT1sLnJlYWRPbmx5KSYmKHYu'@;
put 'cmVhZE9ubHk9bC5yZWFkT25seSx2LmNsYXNzTmFtZT0iY29sdW1uU3VtbWFyeVJlc3VsdCIpfWlmKCghMD09PWwucm91bmRGbG9hdHx8TnVtYmVyLmlzSW50ZWdlcihsLnJvdW5kRmxvYXQpKSYmIWlzTmFOKGwucmVzdWx0KSl7Y29uc3Qgdj1sLnJvdW5kRmxvYXQ7bGV0IE09MDtOdW1iZXIu'@;
put 'aXNJbnRlZ2VyKHYpJiYoTT1NYXRoLm1pbihNYXRoLm1heCgwLHYpLDEwMCkpLGwucmVzdWx0PWwucmVzdWx0LnRvRml4ZWQoTSl9ZD90aGlzLmhvdC5zZXREYXRhQXRDZWxsKGgsbC5kZXN0aW5hdGlvbkNvbHVtbixsLnJlc3VsdCwiQ29sdW1uU3VtbWFyeS5zZXQiKTp0aGlzLmNlbGxzVG9T'@;
put 'ZXRDYWNoZS5wdXNoKFtoLGwuZGVzdGluYXRpb25Db2x1bW4sbC5yZXN1bHRdKSxsLmFsdGVyUm93T2Zmc2V0PXZvaWQgMCxsLmFsdGVyQ29sdW1uT2Zmc2V0PXZvaWQgMH10aHJvd091dE9mQm91bmRzV2FybmluZygpe2lsKCJPbmUgb2YgdGhlIENvbHVtbiBTdW1tYXJ5IHBsdWdpbnMnIGRl'@;
put 'c3RpbmF0aW9uIHBvaW50cyB5b3UgcHJvdmlkZWQgaXMgYmV5b25kIHRoZSB0YWJsZSBib3VuZGFyaWVzISIpfX07ZnVuY3Rpb24gd0ooYyl7cmV0dXJuIG51bGw9PWN8fGlzTmFOKGMpfWZ1bmN0aW9uIHNGKGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSly'@;
put 'ZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX1jb25zdCBDSj0iY29sdW1uU3VtbWFyeSI7dmFyIGJUPW5ldyBXZWFrU2V0O2NsYXNzIE5jdCBleHRlbmRzIEZze2Nv'@;
put 'bnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSxmdW5jdGlvbiBSY3QoYyxsKXsoZnVuY3Rpb24gTGN0KGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3Qi'@;
put 'KX0pKGMsbCksbC5hZGQoYyl9KHRoaXMsYlQpLGZ1bmN0aW9uIE9jdChjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gUGN0KGMpe3ZhciBsPWZ1bmN0aW9uIEZjdChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZv'@;
put 'aWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6'@;
put 'TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9KHRoaXMsImVuZHBv'@;
put 'aW50cyIsbnVsbCl9c3RhdGljIGdldCBQTFVHSU5fS0VZKCl7cmV0dXJuIENKfXN0YXRpYyBnZXQgUExVR0lOX1BSSU9SSVRZKCl7cmV0dXJuIDIyMH1pc0VuYWJsZWQoKXtyZXR1cm4hIXRoaXMuaG90LmdldFNldHRpbmdzKClbQ0pdfWVuYWJsZVBsdWdpbigpe3ZhciBsPXRoaXM7dGhpcy5l'@;
put 'bmFibGVkfHwodGhpcy5zZXR0aW5ncz10aGlzLmhvdC5nZXRTZXR0aW5ncygpW0NKXSx0aGlzLmVuZHBvaW50cz1uZXcgSWN0KHRoaXMsdGhpcy5zZXR0aW5ncyksdGhpcy5hZGRIb29rKCJhZnRlckluaXQiLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJy'@;
put 'YXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIHNGKGJULGwsVmN0KS5jYWxsKGwsLi4uZCl9KSx0aGlzLmFkZEhvb2soImFmdGVyQ2hhbmdlIixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRb'@;
put 'aF09YXJndW1lbnRzW2hdO3JldHVybiBzRihiVCxsLGpjdCkuY2FsbChsLC4uLmQpfSksdGhpcy5hZGRIb29rKCJhZnRlclVwZGF0ZVNldHRpbmdzIixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRz'@;
put 'W2hdO3JldHVybiBzRihiVCxsLEJjdCkuY2FsbChsLC4uLmQpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVDcmVhdGVSb3ciLChhLGQsaCk9PnRoaXMuZW5kcG9pbnRzLnJlc2V0U2V0dXBCZWZvcmVTdHJ1Y3R1cmVBbHRlcmF0aW9uKCJpbnNlcnRfcm93IixhLGQsbnVsbCxoKSksdGhpcy5hZGRI'@;
put 'b29rKCJiZWZvcmVDcmVhdGVDb2wiLChhLGQsaCk9PnRoaXMuZW5kcG9pbnRzLnJlc2V0U2V0dXBCZWZvcmVTdHJ1Y3R1cmVBbHRlcmF0aW9uKCJpbnNlcnRfY29sIixhLGQsbnVsbCxoKSksdGhpcy5hZGRIb29rKCJiZWZvcmVSZW1vdmVSb3ciLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3Vt'@;
put 'ZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIGwuZW5kcG9pbnRzLnJlc2V0U2V0dXBCZWZvcmVTdHJ1Y3R1cmVBbHRlcmF0aW9uKCJyZW1vdmVfcm93IiwuLi5kKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlUmVtb3ZlQ29sIixm'@;
put 'dW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiBsLmVuZHBvaW50cy5yZXNldFNldHVwQmVmb3JlU3RydWN0dXJlQWx0ZXJhdGlvbigicmVtb3ZlX2NvbCIsLi4uZCl9KSx0aGlzLmFk'@;
put 'ZEhvb2soImFmdGVyQ3JlYXRlUm93IiwoYSxkLGgpPT50aGlzLmVuZHBvaW50cy5yZXNldFNldHVwQWZ0ZXJTdHJ1Y3R1cmVBbHRlcmF0aW9uKCJpbnNlcnRfcm93IixhLGQsbnVsbCxoKSksdGhpcy5hZGRIb29rKCJhZnRlckNyZWF0ZUNvbCIsKGEsZCxoKT0+dGhpcy5lbmRwb2ludHMucmVz'@;
put 'ZXRTZXR1cEFmdGVyU3RydWN0dXJlQWx0ZXJhdGlvbigiaW5zZXJ0X2NvbCIsYSxkLG51bGwsaCkpLHRoaXMuYWRkSG9vaygiYWZ0ZXJSZW1vdmVSb3ciLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVu'@;
put 'dHNbaF07cmV0dXJuIGwuZW5kcG9pbnRzLnJlc2V0U2V0dXBBZnRlclN0cnVjdHVyZUFsdGVyYXRpb24oInJlbW92ZV9yb3ciLC4uLmQpfSksdGhpcy5hZGRIb29rKCJhZnRlclJlbW92ZUNvbCIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxo'@;
put 'PTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4gbC5lbmRwb2ludHMucmVzZXRTZXR1cEFmdGVyU3RydWN0dXJlQWx0ZXJhdGlvbigicmVtb3ZlX2NvbCIsLi4uZCl9KSx0aGlzLmFkZEhvb2soImFmdGVyUm93TW92ZSIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxl'@;
put 'bmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4gc0YoYlQsbCx6Y3QpLmNhbGwobCwuLi5kKX0pLHN1cGVyLmVuYWJsZVBsdWdpbigpKX1kaXNhYmxlUGx1Z2luKCl7dGhpcy5lbmRwb2ludHM9bnVsbCx0aGlzLnNldHRpbmdzPW51bGwsdGhp'@;
put 'cy5jdXJyZW50RW5kcG9pbnQ9bnVsbCxzdXBlci5kaXNhYmxlUGx1Z2luKCl9dXBkYXRlUGx1Z2luKCl7dGhpcy5kaXNhYmxlUGx1Z2luKCksdGhpcy5lbmFibGVQbHVnaW4oKSx0aGlzLmVuZHBvaW50cy5pbml0RW5kcG9pbnRzKCksc3VwZXIudXBkYXRlUGx1Z2luKCl9Y2FsY3VsYXRlKGwp'@;
put 'e3N3aXRjaChsLnR5cGUudG9Mb3dlckNhc2UoKSl7Y2FzZSJzdW0iOmwucmVzdWx0PXRoaXMuY2FsY3VsYXRlU3VtKGwpO2JyZWFrO2Nhc2UibWluIjpjYXNlIm1heCI6bC5yZXN1bHQ9dGhpcy5jYWxjdWxhdGVNaW5NYXgobCxsLnR5cGUpO2JyZWFrO2Nhc2UiY291bnQiOmwucmVzdWx0PXRo'@;
put 'aXMuY291bnRFbnRyaWVzKGwpO2JyZWFrO2Nhc2UiYXZlcmFnZSI6bC5yZXN1bHQ9dGhpcy5jYWxjdWxhdGVBdmVyYWdlKGwpO2JyZWFrO2Nhc2UiY3VzdG9tIjpsLnJlc3VsdD1sLmN1c3RvbUZ1bmN0aW9uLmNhbGwodGhpcyxsKX19Y2FsY3VsYXRlU3VtKGwpe2xldCBhPTA7cmV0dXJuIFhv'@;
put 'KGwucmFuZ2VzLGQ9PnthKz10aGlzLmdldFBhcnRpYWxTdW0oZCxsLnNvdXJjZUNvbHVtbil9KSxhfWdldFBhcnRpYWxTdW0obCxhKXtsZXQgZD0wLGg9bFsxXXx8bFswXSxmPW51bGwsdj0wO2Rve2lmKGY9dGhpcy5nZXRDZWxsVmFsdWUoaCxhKSxmPXdKKGYpP251bGw6ZixudWxsIT09Zil7'@;
put 'Y29uc3QgTT0oYCR7Zn1gLnNwbGl0KCIuIilbMV18fFtdKS5sZW5ndGh8fDE7TT52JiYodj1NKX1kKz1mfHwwLGgtPTF9d2hpbGUoaD49bFswXSk7cmV0dXJuIE1hdGgucm91bmQoZCoxMCoqdikvMTAqKnZ9Y2FsY3VsYXRlTWluTWF4KGwsYSl7bGV0IGQ9bnVsbDtyZXR1cm4gWG8obC5yYW5n'@;
put 'ZXMsaD0+e2NvbnN0IGY9dGhpcy5nZXRQYXJ0aWFsTWluTWF4KGgsbC5zb3VyY2VDb2x1bW4sYSk7aWYobnVsbD09PWQmJm51bGwhPT1mJiYoZD1mKSxudWxsIT09Zilzd2l0Y2goYSl7Y2FzZSJtaW4iOmQ9TWF0aC5taW4oZCxmKTticmVhaztjYXNlIm1heCI6ZD1NYXRoLm1heChkLGYpfX0p'@;
put 'LG51bGw9PT1kPyJOb3QgZW5vdWdoIGRhdGEiOmR9Z2V0UGFydGlhbE1pbk1heChsLGEsZCl7bGV0IHYsaD1udWxsLGY9bFsxXXx8bFswXTtkb3tpZih2PXRoaXMuZ2V0Q2VsbFZhbHVlKGYsYSksdj13Sih2KT9udWxsOnYsbnVsbD09PWgpaD12O2Vsc2UgaWYobnVsbCE9PXYpc3dpdGNoKGQp'@;
put 'e2Nhc2UibWluIjpoPU1hdGgubWluKGgsdik7YnJlYWs7Y2FzZSJtYXgiOmg9TWF0aC5tYXgoaCx2KX1mLT0xfXdoaWxlKGY+PWxbMF0pO3JldHVybiBofWNvdW50RW1wdHkobCxhKXtsZXQgZCxoPTAsZj1sWzFdfHxsWzBdO2Rve2Q9dGhpcy5nZXRDZWxsVmFsdWUoZixhKSxkPXdKKGQpP251'@;
put 'bGw6ZCxudWxsPT09ZCYmKGgrPTEpLGYtPTF9d2hpbGUoZj49bFswXSk7cmV0dXJuIGh9Y291bnRFbnRyaWVzKGwpe2xldCBhPTA7cmV0dXJuIFhvKGwucmFuZ2VzLGg9Pntjb25zdCBmPXZvaWQgMD09PWhbMV0/MTpoWzFdLWhbMF0rMSx2PXRoaXMuY291bnRFbXB0eShoLGwuc291cmNlQ29s'@;
put 'dW1uKTthKz1mLGEtPXZ9KSxhfWNhbGN1bGF0ZUF2ZXJhZ2UobCl7cmV0dXJuIHRoaXMuY2FsY3VsYXRlU3VtKGwpL3RoaXMuY291bnRFbnRyaWVzKGwpfWdldENlbGxWYWx1ZShsLGEpe2NvbnN0IGQ9dGhpcy5ob3QudG9WaXN1YWxSb3cobCksaD10aGlzLmhvdC50b1Zpc3VhbENvbHVtbihh'@;
put 'KTtsZXQgZj10aGlzLmhvdC5nZXRTb3VyY2VEYXRhQXRDZWxsKGwsYSksdj0iIjtpZihudWxsIT09ZCYmbnVsbCE9PWgmJih2PXRoaXMuaG90LmdldENlbGxNZXRhKGQsaCkuY2xhc3NOYW1lfHwiIiksdi5pbmRleE9mKCJjb2x1bW5TdW1tYXJ5UmVzdWx0Iik+LTEpcmV0dXJuIG51bGw7aWYo'@;
put 'dGhpcy5lbmRwb2ludHMuY3VycmVudEVuZHBvaW50LmZvcmNlTnVtZXJpYyYmKCJzdHJpbmciPT10eXBlb2YgZiYmKGY9Zi5yZXBsYWNlKC8sLywiLiIpKSxmPXBhcnNlRmxvYXQoZikpLGlzTmFOKGYpJiYhdGhpcy5lbmRwb2ludHMuY3VycmVudEVuZHBvaW50LnN1cHByZXNzRGF0YVR5cGVF'@;
put 'cnJvcnMpdGhyb3cgbmV3IEVycm9yKGdsYENvbHVtblN1bW1hcnkgcGx1Z2luOiBjZWxsIGF0ICgke2x9LCAke2F9KSBpcyBub3QgaW4gYVx4MjAKICAgICAgICAgIG51bWVyaWMgZm9ybWF0LiBDYW5ub3QgZG8gdGhlIGNhbGN1bGF0aW9uLmApO3JldHVybiBmfX1mdW5jdGlvbiBWY3QoKXt0'@;
put 'aGlzLmVuZHBvaW50cy5pbml0RW5kcG9pbnRzKCl9ZnVuY3Rpb24gQmN0KGMpe3ZvaWQgMCE9PWMuY29sdW1ucyYmdGhpcy5lbmRwb2ludHMucmVmcmVzaENlbGxNZXRhcygpfWZ1bmN0aW9uIGpjdChjLGwpe2MmJiJDb2x1bW5TdW1tYXJ5LnJlc2V0IiE9PWwmJiJDb2x1bW5TdW1tYXJ5LnNl'@;
put 'dCIhPT1sJiYibG9hZERhdGEiIT09bCYmdGhpcy5lbmRwb2ludHMucmVmcmVzaENoYW5nZWRFbmRwb2ludHMoYyl9ZnVuY3Rpb24gemN0KGMsbCl7dGhpcy5lbmRwb2ludHMucmVzZXRTZXR1cEJlZm9yZVN0cnVjdHVyZUFsdGVyYXRpb24oIm1vdmVfcm93IixjWzBdLGMubGVuZ3RoLGMsdGhp'@;
put 'cy5wbHVnaW5OYW1lKSx0aGlzLmVuZHBvaW50cy5yZXNldFNldHVwQWZ0ZXJTdHJ1Y3R1cmVBbHRlcmF0aW9uKCJtb3ZlX3JvdyIsbCxjLmxlbmd0aCxjLHRoaXMucGx1Z2luTmFtZSl9ZnVuY3Rpb24gU0ooYyxsLGEpe29nZShjLGwpLGwuc2V0KGMsYSl9ZnVuY3Rpb24gb2dlKGMsbCl7aWYo'@;
put 'bC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX1mdW5jdGlvbiBZXyhjLGwpe3JldHVybiBjLmdldCh4SihjLGwpKX1mdW5jdGlvbiBNSihjLGwsYSl7cmV0dXJuIGMuc2V0'@;
put 'KHhKKGMsbCksYSksYX1mdW5jdGlvbiB4SihjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2Jq'@;
put 'ZWN0Iil9dmFyIGxGPW5ldyBXZWFrTWFwLGNGPW5ldyBXZWFrTWFwLHVGPW5ldyBXZWFrTWFwLHNnZT1uZXcgV2Vha1NldDtjbGFzcyBsZ2V7Y29uc3RydWN0b3IoKXsoZnVuY3Rpb24gVWN0KGMsbCl7b2dlKGMsbCksbC5hZGQoYyl9KSh0aGlzLHNnZSksU0oodGhpcyxsRiwhMCksU0oodGhp'@;
put 'cyxjRixudWxsKSxTSih0aGlzLHVGLG5ldyBSZXNpemVPYnNlcnZlcihsPT54SihzZ2UsdGhpcyxaY3QpLmNhbGwodGhpcyxsKSkpfXNldE9ic2VydmVkRWxlbWVudChsKXtNSihjRix0aGlzLGwpfXVub2JzZXJ2ZSgpe1lfKHVGLHRoaXMpLnVub2JzZXJ2ZShZXyhjRix0aGlzKSl9b2JzZXJ2'@;
put 'ZSgpe01KKGxGLHRoaXMsITApLFlfKHVGLHRoaXMpLm9ic2VydmUoWV8oY0YsdGhpcykpfWRlc3Ryb3koKXtZXyh1Rix0aGlzKS5kaXNjb25uZWN0KCl9fWZ1bmN0aW9uIFpjdChjKXshWV8obEYsdGhpcykmJkFycmF5LmlzQXJyYXkoYykmJmMubGVuZ3RoP2MuZm9yRWFjaChsPT57bGV0e2Jv'@;
put 'cmRlckJveFNpemU6YX09bDtjb25zdHtpbmxpbmVTaXplOmQsYmxvY2tTaXplOmh9PWFbMF07dGhpcy5ydW5Mb2NhbEhvb2tzKCJyZXNpemUiLGQsaCl9KTpNSihsRix0aGlzLCExKX1mdW5jdGlvbiBtOShjLGwsYSl7KGZ1bmN0aW9uIFdjdChjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBU'@;
put 'eXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9KShjLGwpLGwuc2V0KGMsYSl9ZnVuY3Rpb24gTmwoYyxsKXtyZXR1cm4gYy5nZXQoY2dlKGMsbCkpfWZ1bmN0aW9uIFJnKGMsbCxhKXtyZXR1cm4gYy5zZXQo'@;
put 'Y2dlKGMsbCksYSksYX1mdW5jdGlvbiBjZ2UoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9i'@;
put 'amVjdCIpfVRsKGxnZSx5MSk7dmFyIHY5PW5ldyBXZWFrTWFwLEVKPW5ldyBXZWFrTWFwLExnPW5ldyBXZWFrTWFwLHFtPW5ldyBXZWFrTWFwLFhtPW5ldyBXZWFrTWFwLGRGPW5ldyBXZWFrTWFwLEdfPW5ldyBXZWFrTWFwO2NsYXNzIGI5e3N0YXRpYyBnZXQgQ0xBU1NfRURJVE9SX0NPTlRB'@;
put 'SU5FUigpe3JldHVybiJodENvbW1lbnRzQ29udGFpbmVyIn1zdGF0aWMgZ2V0IENMQVNTX0VESVRPUigpe3JldHVybiJodENvbW1lbnRzIn1zdGF0aWMgZ2V0IENMQVNTX0lOUFVUKCl7cmV0dXJuImh0Q29tbWVudFRleHRBcmVhIn1zdGF0aWMgZ2V0IENMQVNTX0NFTEwoKXtyZXR1cm4iaHRD'@;
put 'b21tZW50Q2VsbCJ9Y29uc3RydWN0b3IobCxhKXt2YXIgZD10aGlzO205KHRoaXMsdjksdm9pZCAwKSxtOSh0aGlzLEVKLCExKSxtOSh0aGlzLExnLG51bGwpLG05KHRoaXMscW0sdm9pZCAwKSxtOSh0aGlzLFhtLHZvaWQgMCksbTkodGhpcyxkRiwhMCksbTkodGhpcyxHXyxuZXcgbGdlKSxS'@;
put 'Zyh2OSx0aGlzLGwpLFJnKEVKLHRoaXMsYSksUmcocW0sdGhpcyx0aGlzLmNyZWF0ZUVkaXRvcigpKSxSZyhYbSx0aGlzLE5sKHFtLHRoaXMpLnN0eWxlKSxObChHXyx0aGlzKS5zZXRPYnNlcnZlZEVsZW1lbnQodGhpcy5nZXRJbnB1dEVsZW1lbnQoKSksTmwoR18sdGhpcykuYWRkTG9jYWxI'@;
put 'b29rKCJyZXNpemUiLGZ1bmN0aW9uKCl7Zm9yKHZhciBoPWFyZ3VtZW50cy5sZW5ndGgsZj1uZXcgQXJyYXkoaCksdj0wO3Y8aDt2KyspZlt2XT1hcmd1bWVudHNbdl07cmV0dXJuIGQucnVuTG9jYWxIb29rcygicmVzaXplIiwuLi5mKX0pLHRoaXMuaGlkZSgpfXNldFBvc2l0aW9uKGwsYSl7'@;
put 'TmwoWG0sdGhpcykubGVmdD1gJHtsfXB4YCxObChYbSx0aGlzKS50b3A9YCR7YX1weGB9c2V0U2l6ZShsLGEpe2lmKGwmJmEpe2NvbnN0IGQ9dGhpcy5nZXRJbnB1dEVsZW1lbnQoKTtkLnN0eWxlLndpZHRoPWAke2x9cHhgLGQuc3R5bGUuaGVpZ2h0PWAke2F9cHhgfX1nZXRTaXplKCl7cmV0'@;
put 'dXJue3dpZHRoOnN1KHRoaXMuZ2V0SW5wdXRFbGVtZW50KCkpLGhlaWdodDp4dSh0aGlzLmdldElucHV0RWxlbWVudCgpKX19b2JzZXJ2ZVNpemUoKXtObChHXyx0aGlzKS5vYnNlcnZlKCl9cmVzZXRTaXplKCl7Y29uc3QgbD10aGlzLmdldElucHV0RWxlbWVudCgpO2wuc3R5bGUud2lkdGg9'@;
put 'IiIsbC5zdHlsZS5oZWlnaHQ9IiJ9c2V0UmVhZE9ubHlTdGF0ZShsKXt0aGlzLmdldElucHV0RWxlbWVudCgpLnJlYWRPbmx5PWx9c2hvdygpe05sKFhtLHRoaXMpLmRpc3BsYXk9ImJsb2NrIixSZyhkRix0aGlzLCExKX1oaWRlKCl7TmwoR18sdGhpcykudW5vYnNlcnZlKCksTmwoZEYsdGhp'@;
put 'cyl8fChObChYbSx0aGlzKS5kaXNwbGF5PSJub25lIiksUmcoZEYsdGhpcywhMCl9aXNWaXNpYmxlKCl7cmV0dXJuImJsb2NrIj09PU5sKFhtLHRoaXMpLmRpc3BsYXl9c2V0VmFsdWUoKXtjb25zdCBhPShhcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVu'@;
put 'dHNbMF06IiIpfHwiIjt0aGlzLmdldElucHV0RWxlbWVudCgpLnZhbHVlPWF9Z2V0VmFsdWUoKXtyZXR1cm4gdGhpcy5nZXRJbnB1dEVsZW1lbnQoKS52YWx1ZX1pc0ZvY3VzZWQoKXtyZXR1cm4gTmwodjksdGhpcykuYWN0aXZlRWxlbWVudD09PXRoaXMuZ2V0SW5wdXRFbGVtZW50KCl9Zm9j'@;
put 'dXMoKXt0aGlzLmdldElucHV0RWxlbWVudCgpLmZvY3VzKCl9Y3JlYXRlRWRpdG9yKCl7Y29uc3QgbD1ObCh2OSx0aGlzKS5jcmVhdGVFbGVtZW50KCJkaXYiKSxhPU5sKHY5LHRoaXMpLmNyZWF0ZUVsZW1lbnQoInRleHRhcmVhIik7cmV0dXJuIGwuc3R5bGUuZGlzcGxheT0ibm9uZSIsUmco'@;
put 'TGcsdGhpcyxObCh2OSx0aGlzKS5jcmVhdGVFbGVtZW50KCJkaXYiKSksTmwoTGcsdGhpcykuc2V0QXR0cmlidXRlKCJkaXIiLE5sKEVKLHRoaXMpPyJydGwiOiJsdHIiKSxUaShObChMZyx0aGlzKSxiOS5DTEFTU19FRElUT1JfQ09OVEFJTkVSKSxObCh2OSx0aGlzKS5ib2R5LmFwcGVuZENo'@;
put 'aWxkKE5sKExnLHRoaXMpKSxUaShsLGI5LkNMQVNTX0VESVRPUiksVGkoYSxiOS5DTEFTU19JTlBVVCksYS5zZXRBdHRyaWJ1dGUoImRhdGEtaG90LWlucHV0IiwhMCksbC5hcHBlbmRDaGlsZChhKSxObChMZyx0aGlzKS5hcHBlbmRDaGlsZChsKSxsfWdldElucHV0RWxlbWVudCgpe3JldHVy'@;
put 'biBObChxbSx0aGlzKS5xdWVyeVNlbGVjdG9yKGAuJHtiOS5DTEFTU19JTlBVVH1gKX1nZXRFZGl0b3JFbGVtZW50KCl7cmV0dXJuIE5sKHFtLHRoaXMpfWRlc3Ryb3koKXtjb25zdCBsPU5sKExnLHRoaXMpP05sKExnLHRoaXMpLnBhcmVudE5vZGU6bnVsbDtObChxbSx0aGlzKS5wYXJlbnRO'@;
put 'b2RlLnJlbW92ZUNoaWxkKE5sKHFtLHRoaXMpKSxSZyhxbSx0aGlzLG51bGwpLFJnKFhtLHRoaXMsbnVsbCksTmwoR18sdGhpcykuZGVzdHJveSgpLGwmJmwucmVtb3ZlQ2hpbGQoTmwoTGcsdGhpcykpfX1UbChiOSx5MSk7Y29uc3QgWWN0PWI5O2Z1bmN0aW9uIFRKKGMsbCxhKXtyZXR1cm4o'@;
put 'bD1mdW5jdGlvbiBHY3QoYyl7dmFyIGw9ZnVuY3Rpb24gJGN0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlw'@;
put 'ZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIi'@;
put 'fShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jbGFzcyB1Z2V7Y29uc3RydWN0b3IobCl7VEoodGhpcywid2FzTGFzdEFjdGlvblNob3ciLCEwKSxUSih0aGlzLCJz'@;
put 'aG93RGVib3VuY2VkIixudWxsKSxUSih0aGlzLCJoaWRpbmdUaW1lciIsbnVsbCksdGhpcy51cGRhdGVEZWxheShsKX1oaWRlKCl7dGhpcy53YXNMYXN0QWN0aW9uU2hvdz0hMSx0aGlzLmhpZGluZ1RpbWVyPXNldFRpbWVvdXQoKCk9PnshMT09PXRoaXMud2FzTGFzdEFjdGlvblNob3cmJnRo'@;
put 'aXMucnVuTG9jYWxIb29rcygiaGlkZSIpfSwyNTApfXNob3cobCl7dGhpcy53YXNMYXN0QWN0aW9uU2hvdz0hMCx0aGlzLnNob3dEZWJvdW5jZWQobCl9Y2FuY2VsSGlkaW5nKCl7dGhpcy53YXNMYXN0QWN0aW9uU2hvdz0hMCxjbGVhclRpbWVvdXQodGhpcy5oaWRpbmdUaW1lciksdGhpcy5o'@;
put 'aWRpbmdUaW1lcj1udWxsfXVwZGF0ZURlbGF5KCl7dGhpcy5zaG93RGVib3VuY2VkPU1FKGE9Pnt0aGlzLndhc0xhc3RBY3Rpb25TaG93JiZ0aGlzLnJ1bkxvY2FsSG9va3MoInNob3ciLGEuZnJvbS5yb3csYS5mcm9tLmNvbCl9LGFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1l'@;
put 'bnRzWzBdP2FyZ3VtZW50c1swXToyNTApfWRlc3Ryb3koKXt0aGlzLmNsZWFyTG9jYWxIb29rcygpfX1UbCh1Z2UseTEpO2NvbnN0IFhjdD11Z2Usc3M9Ii0tLS0tLS0tLSI7ZnVuY3Rpb24geTkoYyxsKXtjb25zdCBhPXt9O3JldHVybiBZbihjLGQ9PntkLmZvckFsbCgoaCxmKT0+e2g+PTAm'@;
put 'JmY+PTAmJihhW2hdfHwoYVtoXT1bXSksYVtoXVtmXT1sKGgsZikpfSl9KSxhfWZ1bmN0aW9uIEptKGMsbCxhLGQsaCl7WW4oYyxmPT57Zi5mb3JBbGwoKHYsTSk9Pnt2Pj0wJiZNPj0wJiZmdW5jdGlvbiBydXQoYyxsLGEsZCxoLGYpe2NvbnN0IHY9aChjLGwpO2xldCBNPWQ7di5jbGFzc05h'@;
put 'bWUmJihNPSJ2ZXJ0aWNhbCI9PT1hP2Z1bmN0aW9uIHR1dChjLGwpe3JldHVybi0xIT09Yy5pbmRleE9mKGwpP2M6YCR7Yy5yZXBsYWNlKCJodFRvcCIsIiIpLnJlcGxhY2UoImh0TWlkZGxlIiwiIikucmVwbGFjZSgiaHRCb3R0b20iLCIiKS5yZXBsYWNlKCIgICIsIiIpfSAke2x9YH0odi5j'@;
put 'bGFzc05hbWUsZCk6ZnVuY3Rpb24gbnV0KGMsbCl7cmV0dXJuLTEhPT1jLmluZGV4T2YobCk/YzpgJHtjLnJlcGxhY2UoImh0TGVmdCIsIiIpLnJlcGxhY2UoImh0Q2VudGVyIiwiIikucmVwbGFjZSgiaHRSaWdodCIsIiIpLnJlcGxhY2UoImh0SnVzdGlmeSIsIiIpLnJlcGxhY2UoIiAgIiwi'@;
put 'Iil9ICR7bH1gfSh2LmNsYXNzTmFtZSxkKSksZihjLGwsImNsYXNzTmFtZSIsTSl9KHYsTSxsLGEsZCxoKX0pfSl9ZnVuY3Rpb24gZGdlKGMpe3JldHVybmA8c3BhbiBjbGFzcz0ic2VsZWN0ZWQiPlx1MjcxMzwvc3Bhbj4ke2N9YH1mdW5jdGlvbiBoRihjLGwpe2xldCBhPSExO3JldHVybiBB'@;
put 'cnJheS5pc0FycmF5KGMpJiZZbihjLGQ9PihkLmZvckFsbCgoaCxmKT0+e2lmKGg+PTAmJmY+PTAmJmwoaCxmKSlyZXR1cm4gYT0hMCwhMX0pLGEpKSxhfWZ1bmN0aW9uIGZGKGMsbCl7Y29uc3QgYT17dG9wOjAsbGVmdDowfTtpZihsIT09Yy5vd25lckRvY3VtZW50KXtjb25zdHtmcmFtZUVs'@;
put 'ZW1lbnQ6ZH09bC5kZWZhdWx0Vmlldyx7dG9wOmgsbGVmdDpmfT1kLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2EudG9wPWgsYS5sZWZ0PWZ9cmV0dXJuIGF9ZnVuY3Rpb24gJF8oYyxsLGEpe2hnZShjLGwpLGwuc2V0KGMsYSl9ZnVuY3Rpb24gaGdlKGMsbCl7aWYobC5oYXMoYykpdGhyb3cg'@;
put 'bmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX1mdW5jdGlvbiBRbShjLGwsYSl7cmV0dXJuIGMuc2V0KFVkKGMsbCksYSksYX1mdW5jdGlvbiBKbyhjLGwpe3JldHVybiBjLmdldChVZChjLGwpKX1m'@;
put 'dW5jdGlvbiBVZChjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9Y29uc3QgcEY9'@;
put 'ImNvbW1lbnRzIixPZz0iY29tbWVudCIseVQ9InZhbHVlIixnRj0icmVhZE9ubHkiLF9UPXBGLEFKPWBwbHVnaW46JHtwRn1gO3ZhciBBbD1uZXcgV2Vha01hcCx6cD1uZXcgV2Vha01hcCxtRj1uZXcgV2Vha01hcCx2Rj1uZXcgV2Vha01hcCxrSj1uZXcgV2Vha01hcCxiRj1uZXcgV2Vha01h'@;
put 'cCxQaD1uZXcgV2Vha1NldDtjbGFzcyB1dXQgZXh0ZW5kcyBGc3tjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksZnVuY3Rpb24gYXV0KGMsbCl7aGdlKGMsbCksbC5hZGQoYyl9KHRoaXMsUGgpLGZ1bmN0aW9uIG91dChjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gc3V0KGMpe3Zh'@;
put 'ciBsPWZ1bmN0aW9uIGx1dChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93'@;
put 'IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVm'@;
put 'aW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9KHRoaXMsInJhbmdlIix7fSksJF8odGhpcyxBbCxudWxsKSwkXyh0aGlzLHpwLG51bGwpLCRfKHRoaXMsbUYsITEpLCRfKHRoaXMsdkYsITEpLCRfKHRo'@;
put 'aXMsa0osbnVsbCksJF8odGhpcyxiRiwiIil9c3RhdGljIGdldCBQTFVHSU5fS0VZKCl7cmV0dXJuIHBGfXN0YXRpYyBnZXQgUExVR0lOX1BSSU9SSVRZKCl7cmV0dXJuIDYwfXN0YXRpYyBnZXQgREVGQVVMVF9TRVRUSU5HUygpe3JldHVybntkaXNwbGF5RGVsYXk6MjUwfX1pc0VuYWJsZWQo'@;
put 'KXtyZXR1cm4hIXRoaXMuaG90LmdldFNldHRpbmdzKClbcEZdfWVuYWJsZVBsdWdpbigpe3ZhciBsPXRoaXM7dGhpcy5lbmFibGVkfHwoSm8oQWwsdGhpcyl8fChRbShBbCx0aGlzLG5ldyBZY3QodGhpcy5ob3Qucm9vdERvY3VtZW50LHRoaXMuaG90LmlzUnRsKCkpKSxKbyhBbCx0aGlzKS5h'@;
put 'ZGRMb2NhbEhvb2soInJlc2l6ZSIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4gVWQoUGgsbCxidXQpLmNhbGwobCwuLi5kKX0pKSxKbyh6cCx0aGlzKXx8UW0oenAsdGhpcyxu'@;
put 'ZXcgWGN0KHRoaXMuZ2V0U2V0dGluZygiZGlzcGxheURlbGF5IikpKSx0aGlzLmFkZEhvb2soImFmdGVyQ29udGV4dE1lbnVEZWZhdWx0T3B0aW9ucyIsYT0+dGhpcy5hZGRUb0NvbnRleHRNZW51KGEpKSx0aGlzLmFkZEhvb2soImFmdGVyUmVuZGVyZXIiLChhLGQsaCxmLHYsTSk9PlVkKFBo'@;
put 'LHRoaXMsZ3V0KS5jYWxsKHRoaXMsYSxNKSksdGhpcy5hZGRIb29rKCJhZnRlclNjcm9sbCIsKCk9PlVkKFBoLHRoaXMseXV0KS5jYWxsKHRoaXMpKSx0aGlzLmFkZEhvb2soImFmdGVyQmVnaW5FZGl0aW5nIiwoKT0+dGhpcy5oaWRlKCkpLHRoaXMuYWRkSG9vaygiYWZ0ZXJEb2N1bWVudEtl'@;
put 'eURvd24iLGE9PlVkKFBoLHRoaXMscGdlKS5jYWxsKHRoaXMsYSkpLHRoaXMuYWRkSG9vaygiYmVmb3JlQ29tcG9zaXRpb25TdGFydCIsYT0+VWQoUGgsdGhpcyxwZ2UpLmNhbGwodGhpcyxhKSksdGhpcy5hZGRIb29rKCJhZnRlclNldFRoZW1lIixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1'@;
put 'bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiBVZChQaCxsLF91dCkuY2FsbChsLC4uLmQpfSksSm8oenAsdGhpcykuYWRkTG9jYWxIb29rKCJoaWRlIiwoKT0+dGhpcy5oaWRlKCkpLEpvKHpwLHRoaXMpLmFkZExvY2FsSG9v'@;
put 'aygic2hvdyIsKGEsZCk9PnRoaXMuc2hvd0F0Q2VsbChhLGQpKSx0aGlzLnJlZ2lzdGVyU2hvcnRjdXRzKCksdGhpcy5yZWdpc3Rlckxpc3RlbmVycygpLHN1cGVyLmVuYWJsZVBsdWdpbigpKX11cGRhdGVQbHVnaW4oKXtKbyh6cCx0aGlzKS51cGRhdGVEZWxheSh0aGlzLmdldFNldHRpbmco'@;
put 'ImRpc3BsYXlEZWxheSIpKSxzdXBlci51cGRhdGVQbHVnaW4oKX1kaXNhYmxlUGx1Z2luKCl7dGhpcy51bnJlZ2lzdGVyU2hvcnRjdXRzKCksc3VwZXIuZGlzYWJsZVBsdWdpbigpfXJlZ2lzdGVyU2hvcnRjdXRzKCl7Y29uc3QgbD10aGlzLmhvdC5nZXRTaG9ydGN1dE1hbmFnZXIoKSxhPWwu'@;
put 'Z2V0Q29udGV4dCgiZ3JpZCIpLGQ9bC5hZGRDb250ZXh0KEFKKTthLmFkZFNob3J0Y3V0KHtrZXlzOltbIkNvbnRyb2wiLCJBbHQiLCJNIl1dLGNhbGxiYWNrOigpPT57Y29uc3QgaD10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpO1FtKHZGLHRoaXMsITApLHRoaXMuaG90LnNjcm9s'@;
put 'bFRvRm9jdXNlZENlbGwoKCk9Pnt0aGlzLnNldFJhbmdlKGgpLHRoaXMuc2hvdygpLHRoaXMuZm9jdXNFZGl0b3IoKSxsLnNldEFjdGl2ZUNvbnRleHROYW1lKEFKKSx0aGlzLmhvdC5fcmVnaXN0ZXJUaW1lb3V0KCgpPT57UW0odkYsdGhpcywhMSl9KX0pfSxzdG9wUHJvcGFnYXRpb246ITAs'@;
put 'cnVuT25seUlmOigpPT57dmFyIGg7cmV0dXJuIG51bGw9PT0oaD10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpKXx8dm9pZCAwPT09aD92b2lkIDA6aC5oaWdobGlnaHQuaXNDZWxsKCl9LGdyb3VwOl9UfSksZC5hZGRTaG9ydGN1dCh7a2V5czpbWyJFc2NhcGUiXV0sY2FsbGJhY2s6'@;
put 'KCk9PntKbyhBbCx0aGlzKS5zZXRWYWx1ZShKbyhiRix0aGlzKSksdGhpcy5oaWRlKCksbC5zZXRBY3RpdmVDb250ZXh0TmFtZSgiZ3JpZCIpfSxydW5Pbmx5SWY6KCk9PkpvKEFsLHRoaXMpLmlzVmlzaWJsZSgpJiZKbyhBbCx0aGlzKS5pc0ZvY3VzZWQoKSxncm91cDpfVH0pLGQuYWRkU2hv'@;
put 'cnRjdXQoe2tleXM6W1siQ29udHJvbC9NZXRhIiwiRW50ZXIiXV0sY2FsbGJhY2s6KCk9Pnt0aGlzLmhpZGUoKSxsLnNldEFjdGl2ZUNvbnRleHROYW1lKCJncmlkIil9LHJ1bk9ubHlJZjooKT0+Sm8oQWwsdGhpcykuaXNWaXNpYmxlKCkmJkpvKEFsLHRoaXMpLmlzRm9jdXNlZCgpLGdyb3Vw'@;
put 'Ol9UfSksZC5hZGRTaG9ydGN1dCh7a2V5czpbWyJTaGlmdCIsIlRhYiJdLFsiVGFiIl1dLGZvcndhcmRUb0NvbnRleHQ6bC5nZXRDb250ZXh0KCJncmlkIiksY2FsbGJhY2s6KCk9PntKbyhBbCx0aGlzKS5zZXRWYWx1ZShKbyhBbCx0aGlzKS5nZXRWYWx1ZSgpKSx0aGlzLmhpZGUoKSxsLnNl'@;
put 'dEFjdGl2ZUNvbnRleHROYW1lKCJncmlkIil9LGdyb3VwOl9UfSl9dW5yZWdpc3RlclNob3J0Y3V0cygpe3RoaXMuaG90LmdldFNob3J0Y3V0TWFuYWdlcigpLmdldENvbnRleHQoImdyaWQiKS5yZW1vdmVTaG9ydGN1dHNCeUdyb3VwKF9UKX1yZWdpc3Rlckxpc3RlbmVycygpe2NvbnN0e3Jv'@;
put 'b3REb2N1bWVudDpsfT10aGlzLmhvdCxhPXRoaXMuZ2V0RWRpdG9ySW5wdXRFbGVtZW50KCk7dGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihsLCJtb3VzZW92ZXIiLGQ9PlVkKFBoLHRoaXMsZnV0KS5jYWxsKHRoaXMsZCkpLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlz'@;
put 'dGVuZXIobCwibW91c2Vkb3duIixkPT5VZChQaCx0aGlzLGR1dCkuY2FsbCh0aGlzLGQpKSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGwsIm1vdXNldXAiLCgpPT5VZChQaCx0aGlzLHB1dCkuY2FsbCh0aGlzKSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5l'@;
put 'cihhLCJmb2N1cyIsKCk9PlVkKFBoLHRoaXMsdnV0KS5jYWxsKHRoaXMpKSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGEsImJsdXIiLCgpPT5VZChQaCx0aGlzLG11dCkuY2FsbCh0aGlzKSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcih0aGlzLmdldEVk'@;
put 'aXRvcklucHV0RWxlbWVudCgpLCJtb3VzZWRvd24iLGQ9PlVkKFBoLHRoaXMsaHV0KS5jYWxsKHRoaXMsZCkpfXNldFJhbmdlKGwpe3RoaXMucmFuZ2U9bH1jbGVhclJhbmdlKCl7dGhpcy5yYW5nZT17fX10YXJnZXRJc0NlbGxXaXRoQ29tbWVudChsKXtjb25zdCBhPVJtKGwudGFyZ2V0LCJU'@;
put 'RCIsIlRCT0RZIik7cmV0dXJuISEoYSYmcG8oYSwiaHRDb21tZW50Q2VsbCIpJiZSbShhLFt0aGlzLmhvdC5yb290RWxlbWVudF0pKX10YXJnZXRJc0NvbW1lbnRUZXh0QXJlYShsKXtyZXR1cm4gdGhpcy5nZXRFZGl0b3JJbnB1dEVsZW1lbnQoKT09PWwudGFyZ2V0fXNldENvbW1lbnQobCl7'@;
put 'aWYoIXRoaXMucmFuZ2UuZnJvbSl0aHJvdyBuZXcgRXJyb3IoJ0JlZm9yZSB1c2luZyB0aGlzIG1ldGhvZCwgZmlyc3Qgc2V0IGNlbGwgcmFuZ2UgKGhvdC5nZXRQbHVnaW4oImNvbW1lbnQiKS5zZXRSYW5nZSgpKScpO2NvbnN0IGE9Sm8oQWwsdGhpcykuZ2V0VmFsdWUoKTtsZXQgZD0iIjtu'@;
put 'dWxsIT1sP2Q9bDpudWxsIT1hJiYoZD1hKSx0aGlzLnVwZGF0ZUNvbW1lbnRNZXRhKHRoaXMucmFuZ2UuZnJvbS5yb3csdGhpcy5yYW5nZS5mcm9tLmNvbCx7W3lUXTpkfSksdGhpcy5ob3QucmVuZGVyKCl9c2V0Q29tbWVudEF0Q2VsbChsLGEsZCl7dGhpcy5zZXRSYW5nZSh7ZnJvbTp0aGlz'@;
put 'LmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhsLGEpfSksdGhpcy5zZXRDb21tZW50KGQpfXJlbW92ZUNvbW1lbnQoKXtsZXQgbD0hKGFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdKXx8YXJndW1lbnRzWzBdO2lmKCF0aGlzLnJhbmdlLmZyb20pdGhyb3cgbmV3IEVycm9y'@;
put 'KCdCZWZvcmUgdXNpbmcgdGhpcyBtZXRob2QsIGZpcnN0IHNldCBjZWxsIHJhbmdlIChob3QuZ2V0UGx1Z2luKCJjb21tZW50Iikuc2V0UmFuZ2UoKSknKTt0aGlzLmhvdC5zZXRDZWxsTWV0YSh0aGlzLnJhbmdlLmZyb20ucm93LHRoaXMucmFuZ2UuZnJvbS5jb2wsT2cpLGwmJnRoaXMuaG90'@;
put 'LnJlbmRlcigpLHRoaXMuaGlkZSgpfXJlbW92ZUNvbW1lbnRBdENlbGwobCxhKXtsZXQgZD0hKGFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdKXx8YXJndW1lbnRzWzJdO3RoaXMuc2V0UmFuZ2Uoe2Zyb206dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMobCxhKX0p'@;
put 'LHRoaXMucmVtb3ZlQ29tbWVudChkKX1nZXRDb21tZW50KCl7cmV0dXJuIHRoaXMuZ2V0Q29tbWVudE1ldGEodGhpcy5yYW5nZS5mcm9tLnJvdyx0aGlzLnJhbmdlLmZyb20uY29sLHlUKX1nZXRDb21tZW50QXRDZWxsKGwsYSl7cmV0dXJuIHRoaXMuZ2V0Q29tbWVudE1ldGEobCxhLHlUKX1z'@;
put 'aG93KCl7dmFyIGw7aWYoIXRoaXMucmFuZ2UuZnJvbSl0aHJvdyBuZXcgRXJyb3IoJ0JlZm9yZSB1c2luZyB0aGlzIG1ldGhvZCwgZmlyc3Qgc2V0IGNlbGwgcmFuZ2UgKGhvdC5nZXRQbHVnaW4oImNvbW1lbnQiKS5zZXRSYW5nZSgpKScpO2NvbnN0e2Zyb206e3JvdzphLGNvbDpkfX09dGhp'@;
put 'cy5yYW5nZTtpZihhPDB8fGE+dGhpcy5ob3QuY291bnRTb3VyY2VSb3dzKCktMXx8ZDwwfHxkPnRoaXMuaG90LmNvdW50U291cmNlQ29scygpLTEpcmV0dXJuITE7Y29uc3QgaD10aGlzLmhvdC5nZXRDZWxsTWV0YSh0aGlzLnJhbmdlLmZyb20ucm93LHRoaXMucmFuZ2UuZnJvbS5jb2wpO3Jl'@;
put 'dHVybiBKbyh6cCx0aGlzKS5jYW5jZWxIaWRpbmcoKSxKbyhBbCx0aGlzKS5zZXRWYWx1ZShudWxsIT09KGw9aFtPZ10/aFtPZ11beVRdOm51bGwpJiZ2b2lkIDAhPT1sP2w6IiIpLEpvKEFsLHRoaXMpLnNob3coKSx0aGlzLnJlZnJlc2hFZGl0b3IoITApLCEwfXNob3dBdENlbGwobCxhKXty'@;
put 'ZXR1cm4gdGhpcy5zZXRSYW5nZSh7ZnJvbTp0aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhsLGEpfSksdGhpcy5zaG93KCl9aGlkZSgpe0pvKEFsLHRoaXMpLmhpZGUoKX1yZWZyZXNoRWRpdG9yKCl7aWYoIShhcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSYmYXJn'@;
put 'dW1lbnRzWzBdfHx0aGlzLnJhbmdlLmZyb20mJkpvKEFsLHRoaXMpLmlzVmlzaWJsZSgpKSlyZXR1cm47Y29uc3R7cm93SW5kZXhNYXBwZXI6YSxjb2x1bW5JbmRleE1hcHBlcjpkfT10aGlzLmhvdCx7cm93OmgsY29sOmZ9PXRoaXMucmFuZ2UuZnJvbTtsZXQgdj1hLmdldFJlbmRlcmFibGVG'@;
put 'cm9tVmlzdWFsSW5kZXgoaCksTT1kLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoZik7Y29uc3QgRD1udWxsPT09djtKbyhBbCx0aGlzKS5zZXRQb3NpdGlvbigwLDApLG51bGw9PT12JiYodj1hLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoYS5nZXROZWFyZXN0Tm90SGlkZGVu'@;
put 'SW5kZXgoaCwtMSkpKSxudWxsPT09TSYmKE09ZC5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KGQuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGYsLTEpKSk7Y29uc3QgWj1udWxsPT09dixyZT1udWxsPT09TTt2PXY/PzAsTT1NPz8wO2NvbnN0e3Jvb3RXaW5kb3c6Y2Usdmlldzp7X3d0'@;
put 'OmJlfX09dGhpcy5ob3Qse3d0VGFibGU6RWV9PWJlLEJlPWJlLmdldENlbGwoe3Jvdzp2LGNvbDpNfSwhMCkscWU9dGhpcy5nZXRDb21tZW50TWV0YShoLGYsInN0eWxlIik7cWU/Sm8oQWwsdGhpcykuc2V0U2l6ZShxZS53aWR0aCxxZS5oZWlnaHQpOkpvKEFsLHRoaXMpLnJlc2V0U2l6ZSgp'@;
put 'O2NvbnN0IHJ0PXJlPzA6RWUuZ2V0Q29sdW1uV2lkdGgoTSkscHQ9RCYmIVo/eHUoQmUpOjAse2xlZnQ6ZHQsdG9wOkp0LHdpZHRoOnZuLGhlaWdodDpDbn09QmUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkse3dpZHRoOnRuLGhlaWdodDpNbn09Sm8oQWwsdGhpcykuZ2V0U2l6ZSgpLHtpbm5l'@;
put 'cldpZHRoOkNyLGlubmVySGVpZ2h0OkdyfT10aGlzLmhvdC5yb290V2luZG93LG1yPXRoaXMuaG90LnJvb3REb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsR249ZjAodGhpcy5ob3Qucm9vdERvY3VtZW50KSxhaT1FJCh0aGlzLmhvdC5yb290V2luZG93KT9HbjowLF9pPVQkKHRoaXMuaG90LnJv'@;
put 'b3RXaW5kb3cpP0duOjA7bGV0IE9uPWR0K2NlLnNjcm9sbFgrcnQsenI9SnQrY2Uuc2Nyb2xsWStwdDt0aGlzLmhvdC5pc1J0bCgpJiYoT24tPXRuK3J0KSx0aGlzLmhvdC5pc0x0cigpJiZkdCt2bit0bj5Dci1haT9Pbj1kdCtjZS5zY3JvbGxYLXRuLTE6dGhpcy5ob3QuaXNSdGwoKSYmT248'@;
put 'LShtci5zY3JvbGxXaWR0aC1tci5jbGllbnRXaWR0aCkmJihPbj1kdCtjZS5zY3JvbGxYK3J0KzEpLEp0K01uPkdyLV9pJiYoenItPU1uLUNuKzEpLEpvKEFsLHRoaXMpLnNldFBvc2l0aW9uKE9uLHpyKSxKbyhBbCx0aGlzKS5zZXRSZWFkT25seVN0YXRlKHRoaXMuZ2V0Q29tbWVudE1ldGEo'@;
put 'aCxmLGdGKSksSm8oQWwsdGhpcykub2JzZXJ2ZVNpemUoKX1mb2N1c0VkaXRvcigpe0pvKEFsLHRoaXMpLmZvY3VzKCl9dXBkYXRlQ29tbWVudE1ldGEobCxhLGQpe2NvbnN0IGg9dGhpcy5ob3QuZ2V0Q2VsbE1ldGEobCxhKVtPZ107bGV0IGY7aD8oZj1nMShoKSx4RShmLGQpKTpmPWQsdGhp'@;
put 'cy5ob3Quc2V0Q2VsbE1ldGEobCxhLE9nLGYpfWdldENvbW1lbnRNZXRhKGwsYSxkKXtjb25zdCBoPXRoaXMuaG90LmdldENlbGxNZXRhKGwsYSk7aWYoaFtPZ10pcmV0dXJuIGhbT2ddW2RdfWFkZFRvQ29udGV4dE1lbnUobCl7bC5pdGVtcy5wdXNoKHtuYW1lOnNzfSxmdW5jdGlvbiBRY3Qo'@;
put 'Yyl7cmV0dXJue2tleToiY29tbWVudHNBZGRFZGl0IixuYW1lKCl7dmFyIGw7Y29uc3QgYT1udWxsPT09KGw9dGhpcy5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpKXx8dm9pZCAwPT09bD92b2lkIDA6bC5oaWdobGlnaHQ7cmV0dXJuIG51bGwhPWEmJmEuaXNDZWxsKCkmJmMuZ2V0Q29tbWVudEF0'@;
put 'Q2VsbChhLnJvdyxhLmNvbCk/dGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKGZxKTp0aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UoaHEpfSxjYWxsYmFjaygpe2NvbnN0IGw9dGhpcy5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpO2Muc2V0UmFuZ2UobCksYy5zaG93KCksYy5mb2N1c0VkaXRvcigpfSxk'@;
put 'aXNhYmxlZCgpe2NvbnN0IGw9dGhpcy5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpO3JldHVybiEhKCFsfHxsLmhpZ2hsaWdodC5pc0hlYWRlcigpfHx0aGlzLnNlbGVjdGlvbi5pc0VudGlyZVJvd1NlbGVjdGVkKCkmJnRoaXMuc2VsZWN0aW9uLmlzRW50aXJlQ29sdW1uU2VsZWN0ZWQoKXx8MD09'@;
put 'PXRoaXMuY291bnRSZW5kZXJlZFJvd3MoKXx8MD09PXRoaXMuY291bnRSZW5kZXJlZENvbHMoKSl9fX0odGhpcyksZnVuY3Rpb24gZXV0KGMpe3JldHVybntrZXk6ImNvbW1lbnRzUmVtb3ZlIixuYW1lKCl7cmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShwcSl9LGNhbGxiYWNrKCl7'@;
put 'dGhpcy5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLmZvckFsbCgoYSxkKT0+e2E+PTAmJmQ+PTAmJmMucmVtb3ZlQ29tbWVudEF0Q2VsbChhLGQsITEpfSksdGhpcy5yZW5kZXIoKX0sZGlzYWJsZWQoKXtjb25zdCBsPXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKTtyZXR1cm4hISghbHx8bC5o'@;
put 'aWdobGlnaHQuaXNIZWFkZXIoKXx8dGhpcy5zZWxlY3Rpb24uaXNFbnRpcmVSb3dTZWxlY3RlZCgpJiZ0aGlzLnNlbGVjdGlvbi5pc0VudGlyZUNvbHVtblNlbGVjdGVkKCl8fDA9PT10aGlzLmNvdW50UmVuZGVyZWRSb3dzKCl8fDA9PT10aGlzLmNvdW50UmVuZGVyZWRDb2xzKCkpfX19KHRo'@;
put 'aXMpLGZ1bmN0aW9uIGl1dChjKXtyZXR1cm57a2V5OiJjb21tZW50c1JlYWRPbmx5IixuYW1lKCl7Y29uc3QgbD10aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UoZ3EpO3JldHVybiBoRih0aGlzLmdldFNlbGVjdGVkUmFuZ2UoKSwoZCxoKT0+Yy5nZXRDb21tZW50TWV0YShkLGgsZ0YpKT9kZ2Uo'@;
put 'bCk6bH0sY2FsbGJhY2soKXt0aGlzLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCkuZm9yQWxsKChhLGQpPT57aWYoYT49MCYmZD49MCl7Y29uc3QgaD0hIWMuZ2V0Q29tbWVudE1ldGEoYSxkLGdGKTtjLnVwZGF0ZUNvbW1lbnRNZXRhKGEsZCx7W2dGXTohaH0pfX0pfSxkaXNhYmxlZCgpe2NvbnN0'@;
put 'IGw9dGhpcy5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpO3JldHVybiEhKCFsfHxsLmhpZ2hsaWdodC5pc0hlYWRlcigpfHwhYy5nZXRDb21tZW50QXRDZWxsKGwuaGlnaGxpZ2h0LnJvdyxsLmhpZ2hsaWdodC5jb2wpfHx0aGlzLnNlbGVjdGlvbi5pc0VudGlyZVJvd1NlbGVjdGVkKCkmJnRoaXMu'@;
put 'c2VsZWN0aW9uLmlzRW50aXJlQ29sdW1uU2VsZWN0ZWQoKXx8MD09PXRoaXMuY291bnRSZW5kZXJlZFJvd3MoKXx8MD09PXRoaXMuY291bnRSZW5kZXJlZENvbHMoKSl9fX0odGhpcykpfWdldEVkaXRvcklucHV0RWxlbWVudCgpe3JldHVybiBKbyhBbCx0aGlzKS5nZXRJbnB1dEVsZW1lbnQo'@;
put 'KX1kZXN0cm95KCl7dmFyIGwsYTtudWxsPT09KGw9Sm8oQWwsdGhpcykpfHx2b2lkIDA9PT1sfHxsLmRlc3Ryb3koKSxudWxsPT09KGE9Sm8oenAsdGhpcykpfHx2b2lkIDA9PT1hfHxhLmRlc3Ryb3koKSxzdXBlci5kZXN0cm95KCl9fWZ1bmN0aW9uIGR1dChjKXtpZih0aGlzLmhvdC52aWV3'@;
put 'JiZ0aGlzLmhvdC52aWV3Ll93dCYmIUpvKG1GLHRoaXMpJiYhdGhpcy50YXJnZXRJc0NvbW1lbnRUZXh0QXJlYShjKSl7Y29uc3QgbD1SbShjLnRhcmdldCwiVEQiLCJUQk9EWSIpO2xldCBhPW51bGw7bCYmKGE9dGhpcy5ob3QuZ2V0Q29vcmRzKGwpKSwoIWx8fHRoaXMucmFuZ2UuZnJvbSYm'@;
put 'YSYmKHRoaXMucmFuZ2UuZnJvbS5yb3chPT1hLnJvd3x8dGhpcy5yYW5nZS5mcm9tLmNvbCE9PWEuY29sKSkmJnRoaXMuaGlkZSgpfX1mdW5jdGlvbiBodXQoYyl7Yy5zdG9wUHJvcGFnYXRpb24oKX1mdW5jdGlvbiBmdXQoYyl7Y29uc3R7cm9vdERvY3VtZW50Omx9PXRoaXMuaG90O2lmKCEo'@;
put 'Sm8obUYsdGhpcyl8fEpvKEFsLHRoaXMpLmlzRm9jdXNlZCgpfHxwbyhjLnRhcmdldCwid3RCb3JkZXIiKXx8Sm8oa0osdGhpcyk9PT1jLnRhcmdldCkmJkpvKEFsLHRoaXMpKWlmKFFtKGtKLHRoaXMsbC5lbGVtZW50RnJvbVBvaW50KGMuY2xpZW50WCxjLmNsaWVudFkpKSx0aGlzLnRhcmdl'@;
put 'dElzQ2VsbFdpdGhDb21tZW50KGMpKXtjb25zdCBhPXRoaXMuaG90Ll9jcmVhdGVDZWxsUmFuZ2UodGhpcy5ob3QuZ2V0Q29vcmRzKGMudGFyZ2V0KSk7Sm8oenAsdGhpcykuc2hvdyhhKX1lbHNlIExtKGMudGFyZ2V0LGwpJiYhdGhpcy50YXJnZXRJc0NvbW1lbnRUZXh0QXJlYShjKSYmSm8o'@;
put 'enAsdGhpcykuaGlkZSgpfWZ1bmN0aW9uIHB1dCgpe1FtKG1GLHRoaXMsITEpfWZ1bmN0aW9uIGd1dChjLGwpe2xbT2ddJiZsW09nXVt5VF0mJlRpKGMsbC5jb21tZW50ZWRDZWxsQ2xhc3NOYW1lKX1mdW5jdGlvbiBtdXQoKXtRbShiRix0aGlzLCIiKSx0aGlzLmhvdC5nZXRTaG9ydGN1dE1h'@;
put 'bmFnZXIoKS5zZXRBY3RpdmVDb250ZXh0TmFtZSgiZ3JpZCIpLHRoaXMuc2V0Q29tbWVudCgpfWZ1bmN0aW9uIHZ1dCgpe1FtKGJGLHRoaXMsdGhpcy5nZXRDb21tZW50KCkpLHRoaXMuaG90Lmxpc3RlbigpLHRoaXMuaG90LmdldFNob3J0Y3V0TWFuYWdlcigpLnNldEFjdGl2ZUNvbnRleHRO'@;
put 'YW1lKEFKKX1mdW5jdGlvbiBidXQoYyxsKXt0aGlzLnVwZGF0ZUNvbW1lbnRNZXRhKHRoaXMucmFuZ2UuZnJvbS5yb3csdGhpcy5yYW5nZS5mcm9tLmNvbCx7c3R5bGU6e3dpZHRoOmMsaGVpZ2h0Omx9fSl9ZnVuY3Rpb24gcGdlKGMpe0pvKEFsLHRoaXMpLmlzRm9jdXNlZCgpJiZCMihjKX1m'@;
put 'dW5jdGlvbiB5dXQoKXtKbyh2Rix0aGlzKXx8dGhpcy5oaWRlKCl9ZnVuY3Rpb24gX3V0KCl7Y29uc3QgYz1KbyhBbCx0aGlzKS5nZXRFZGl0b3JFbGVtZW50KCk7bG8oYywvaHQtdGhlbWUtLiovZyksVGkoYyx0aGlzLmhvdC5nZXRDdXJyZW50VGhlbWVOYW1lKCkpfWZ1bmN0aW9uIERKKGMs'@;
put 'bCxhKXtyZXR1cm4obD1mdW5jdGlvbiB3dXQoYyl7dmFyIGw9ZnVuY3Rpb24gQ3V0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigi'@;
put 'b2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlw'@;
put 'ZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jbGFzcyBnZ2V7Y29uc3RydWN0b3IobCl7REoodGhpcywiaG90Iix2b2lkIDApLERKKHRoaXMs'@;
put 'ImNvbW1hbmRzIix7fSksREoodGhpcywiY29tbW9uQ2FsbGJhY2siLG51bGwpLHRoaXMuaG90PWx9cmVnaXN0ZXJDb21tYW5kKGwsYSl7dGhpcy5jb21tYW5kc1tsXT1hfXNldENvbW1vbkNhbGxiYWNrKGwpe3RoaXMuY29tbW9uQ2FsbGJhY2s9bH1leGVjdXRlKGwpe2Zvcih2YXIgYT1hcmd1'@;
put 'bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGE+MT9hLTE6MCksaD0xO2g8YTtoKyspZFtoLTFdPWFyZ3VtZW50c1toXTtjb25zdCBmPWwuc3BsaXQoIjoiKSx2PWZbMF0sTT0yPT09Zi5sZW5ndGg/ZlsxXTpudWxsO2xldCBEPXRoaXMuY29tbWFuZHNbdl07aWYoIUQpdGhyb3cgbmV3IEVycm9y'@;
put 'KGBNZW51IGNvbW1hbmQgJyR7dn0nIG5vdCBleGlzdHMuYCk7aWYoTSYmRC5zdWJtZW51JiYoRD1mdW5jdGlvbiBTdXQoYyxsKXtsZXQgYTtyZXR1cm4gWW4obCxkPT57Y29uc3QgaD1kLmtleT9kLmtleS5zcGxpdCgiOiIpOm51bGw7aWYoQXJyYXkuaXNBcnJheShoKSYmaFsxXT09PWMpcmV0'@;
put 'dXJuIGE9ZCwhMX0pLGF9KE0sRC5zdWJtZW51Lml0ZW1zKSksITA9PT1ELmRpc2FibGVkfHwiZnVuY3Rpb24iPT10eXBlb2YgRC5kaXNhYmxlZCYmITA9PT1ELmRpc2FibGVkLmNhbGwodGhpcy5ob3QpfHxUdShELCJzdWJtZW51IikpcmV0dXJuO2NvbnN0IFo9W107ImZ1bmN0aW9uIj09dHlw'@;
put 'ZW9mIEQuY2FsbGJhY2smJloucHVzaChELmNhbGxiYWNrKSwiZnVuY3Rpb24iPT10eXBlb2YgdGhpcy5jb21tb25DYWxsYmFjayYmWi5wdXNoKHRoaXMuY29tbW9uQ2FsbGJhY2spLGQudW5zaGlmdChmLmpvaW4oIjoiKSksWW4oWixyZT0+cmUuYXBwbHkodGhpcy5ob3QsZCkpfX1jb25zdCBL'@;
put 'Mj0iYWxpZ25tZW50Iix5Rj0iY2xlYXJfY29sdW1uIix3VD0iY29sX2xlZnQiLENUPSJjb2xfcmlnaHQiLFNUPSJtYWtlX3JlYWRfb25seSIsX0Y9InJlZG8iLE1UPSJyZW1vdmVfY29sIix3Rj0icmVtb3ZlX3JvdyIsQ0Y9InJvd19hYm92ZSIsU0Y9InJvd19iZWxvdyIseFQ9Im5vX2l0ZW1z'@;
put 'IixNRj0idW5kbyIsbWdlPVtDRixTRix3VCxDVCx5Rix3RixNVCxNRixfRixTVCxLMixzcyx4VF0sdmdlPXtbc3NdOmZ1bmN0aW9uIEpjdCgpe3JldHVybntuYW1lOnNzfX0sW3hUXTpmdW5jdGlvbiBPdXQoKXtyZXR1cm57a2V5OnhULG5hbWUoKXtyZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGVk'@;
put 'UGhyYXNlKEdLKX0sZGlzYWJsZWQ6ITAsaXNDb21tYW5kOiExfX0sW0NGXTpmdW5jdGlvbiBSdXQoKXtyZXR1cm57a2V5OkNGLG5hbWUoKXtyZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKCRLKX0sY2FsbGJhY2soKXtjb25zdCBjPXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKS5n'@;
put 'ZXRUb3BMZWZ0Q29ybmVyKCk7dGhpcy5hbHRlcigiaW5zZXJ0X3Jvd19hYm92ZSIsYy5yb3csMSwiQ29udGV4dE1lbnUucm93QWJvdmUiKX0sZGlzYWJsZWQoKXtjb25zdCBjPXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKTtyZXR1cm4hISghY3x8dGhpcy5zZWxlY3Rpb24uaXNTZWxlY3Rl'@;
put 'ZEJ5Q29sdW1uSGVhZGVyKCl8fGMuaXNTaW5nbGVIZWFkZXIoKSYmYy5oaWdobGlnaHQucm93PDB8fHRoaXMuY291bnRTb3VyY2VSb3dzKCk+PXRoaXMuZ2V0U2V0dGluZ3MoKS5tYXhSb3dzKXx8ISF0aGlzLnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb3JuZXIoKSYmMD09PXRoaXMuY291bnRS'@;
put 'b3dzKCl9LGhpZGRlbigpe3JldHVybiF0aGlzLmdldFNldHRpbmdzKCkuYWxsb3dJbnNlcnRSb3d9fX0sW1NGXTpmdW5jdGlvbiBMdXQoKXtyZXR1cm57a2V5OlNGLG5hbWUoKXtyZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKEtLKX0sY2FsbGJhY2soKXtjb25zdCBjPXRoaXMuZ2V0'@;
put 'U2VsZWN0ZWRSYW5nZUxhc3QoKS5nZXRCb3R0b21SaWdodENvcm5lcigpO3RoaXMuYWx0ZXIoImluc2VydF9yb3dfYmVsb3ciLGMucm93LDEsIkNvbnRleHRNZW51LnJvd0JlbG93Iil9LGRpc2FibGVkKCl7Y29uc3QgYz10aGlzLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCk7cmV0dXJuISEoIWN8'@;
put 'fHRoaXMuc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvbHVtbkhlYWRlcigpfHxjLmlzU2luZ2xlSGVhZGVyKCkmJmMuaGlnaGxpZ2h0LnJvdzwwfHx0aGlzLmNvdW50U291cmNlUm93cygpPj10aGlzLmdldFNldHRpbmdzKCkubWF4Um93cyl9LGhpZGRlbigpe3JldHVybiF0aGlzLmdldFNldHRp'@;
put 'bmdzKCkuYWxsb3dJbnNlcnRSb3d9fX0sW3dUXTpmdW5jdGlvbiBFdXQoKXtyZXR1cm57a2V5OndULG5hbWUoKXtyZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKHFLKX0sY2FsbGJhY2soKXtjb25zdCBjPXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKS5nZXRUb3BMZWZ0Q29ybmVy'@;
put 'KCksbD10aGlzLmlzUnRsKCk/Imluc2VydF9jb2xfZW5kIjoiaW5zZXJ0X2NvbF9zdGFydCI7dGhpcy5hbHRlcihsLGMuY29sLDEsIkNvbnRleHRNZW51LmNvbHVtbkxlZnQiKX0sZGlzYWJsZWQoKXtpZighdGhpcy5pc0NvbHVtbk1vZGlmaWNhdGlvbkFsbG93ZWQoKSlyZXR1cm4hMDtjb25z'@;
put 'dCBjPXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKTtyZXR1cm4hISghY3x8dGhpcy5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Um93SGVhZGVyKCl8fGMuaXNTaW5nbGVIZWFkZXIoKSYmYy5oaWdobGlnaHQuY29sPDB8fHRoaXMuY291bnRTb3VyY2VDb2xzKCk+PXRoaXMuZ2V0U2V0dGluZ3Mo'@;
put 'KS5tYXhDb2xzKXx8ISF0aGlzLnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb3JuZXIoKSYmMD09PXRoaXMuY291bnRDb2xzKCl9LGhpZGRlbigpe3JldHVybiF0aGlzLmdldFNldHRpbmdzKCkuYWxsb3dJbnNlcnRDb2x1bW59fX0sW0NUXTpmdW5jdGlvbiBUdXQoKXtyZXR1cm57a2V5OkNULG5h'@;
put 'bWUoKXtyZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKFhLKX0sY2FsbGJhY2soKXtjb25zdCBjPXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKS5nZXRUb3BSaWdodENvcm5lcigpLGw9dGhpcy5pc1J0bCgpPyJpbnNlcnRfY29sX3N0YXJ0IjoiaW5zZXJ0X2NvbF9lbmQiO3RoaXMu'@;
put 'YWx0ZXIobCxjLmNvbCwxLCJDb250ZXh0TWVudS5jb2x1bW5SaWdodCIpfSxkaXNhYmxlZCgpe2lmKCF0aGlzLmlzQ29sdW1uTW9kaWZpY2F0aW9uQWxsb3dlZCgpKXJldHVybiEwO2NvbnN0IGM9dGhpcy5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpO3JldHVybiEhKCFjfHx0aGlzLnNlbGVjdGlv'@;
put 'bi5pc1NlbGVjdGVkQnlSb3dIZWFkZXIoKXx8Yy5pc1NpbmdsZUhlYWRlcigpJiZjLmhpZ2hsaWdodC5jb2w8MHx8dGhpcy5jb3VudFNvdXJjZUNvbHMoKT49dGhpcy5nZXRTZXR0aW5ncygpLm1heENvbHMpfSxoaWRkZW4oKXtyZXR1cm4hdGhpcy5nZXRTZXR0aW5ncygpLmFsbG93SW5zZXJ0'@;
put 'Q29sdW1ufX19LFt5Rl06ZnVuY3Rpb24geHV0KCl7cmV0dXJue2tleTp5RixuYW1lKCl7cmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShucSl9LGNhbGxiYWNrKGMsbCl7Y29uc3QgYT1sWzBdLnN0YXJ0LmNvbCxkPWxbMF0uZW5kLmNvbDt0aGlzLmNvdW50Um93cygpJiZ0aGlzLnBv'@;
put 'cHVsYXRlRnJvbUFycmF5KDAsYSxbW251bGxdXSxNYXRoLm1heChsWzBdLnN0YXJ0LnJvdyxsWzBdLmVuZC5yb3cpLGQsIkNvbnRleHRNZW51LmNsZWFyQ29sdW1uIil9LGRpc2FibGVkKCl7Y29uc3QgYz10aGlzLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCk7aWYoIWN8fGMuaXNTaW5nbGVIZWFk'@;
put 'ZXIoKSYmYy5oaWdobGlnaHQuY29sPDB8fCF0aGlzLnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb2x1bW5IZWFkZXIoKSlyZXR1cm4hMDtsZXQgbD0hMTtyZXR1cm4gYy5mb3JBbGwoKGEsZCk9PntpZihhPDB8fGQ8MClyZXR1cm4hMDtjb25zdHtyZWFkT25seTpofT10aGlzLmdldENlbGxNZXRh'@;
put 'KGEsZCk7cmV0dXJuISFofHwobD0hMCwhMSl9KSwhbH19fSxbd0ZdOmZ1bmN0aW9uIEl1dCgpe3JldHVybntrZXk6d0YsbmFtZSgpe2NvbnN0IGM9dGhpcy5nZXRTZWxlY3RlZCgpO2xldCBsPTA7aWYoYylpZihjLmxlbmd0aD4xKWw9MTtlbHNle2NvbnN0W2EsLGRdPWNbMF07YS1kIT0wJiYo'@;
put 'bD0xKX1yZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKEpLLGwpfSxjYWxsYmFjaygpe3RoaXMuYWx0ZXIoInJlbW92ZV9yb3ciLGZ1bmN0aW9uIFludChjKXtjb25zdCBsPXhfKGMuZ2V0U2VsZWN0ZWQoKSk7aWYoMD09PWx8fDE9PT1sKXJldHVybltdO2NvbnN0IGE9ZVQobCx7Y3Jl'@;
put 'YXRlQ2VsbENvb3JkczpjLl9jcmVhdGVDZWxsQ29vcmRzLmJpbmQoYyksY3JlYXRlQ2VsbFJhbmdlOmMuX2NyZWF0ZUNlbGxSYW5nZS5iaW5kKGMpfSksZD1uZXcgU2V0O3JldHVybiBZbihjLmdldFNlbGVjdGVkKCksdj0+e2NvbnN0e2Zyb206TSx0bzpEfT1hKHYpLFo9TWF0aC5tYXgoTS5y'@;
put 'b3csMCk7WW4oQXJyYXkuZnJvbShuZXcgQXJyYXkoRC5yb3ctWisxKSwoY2UsYmUpPT5aK2JlKSxjZT0+e2QuaGFzKGNlKXx8ZC5hZGQoY2UpfSl9KSxxdShBcnJheS5mcm9tKGQpLnNvcnQoKHYsTSk9PnYtTSksKHYsTSxELFopPT4oMCE9PUQmJk09PT1aW0QtMV0rMT92W3YubGVuZ3RoLTFd'@;
put 'WzFdKz0xOnYucHVzaChbTSwxXSksdiksW10pfSh0aGlzKSwxLCJDb250ZXh0TWVudS5yZW1vdmVSb3ciKX0sZGlzYWJsZWQoKXtjb25zdCBjPXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKTtpZighY3x8Yy5pc1NpbmdsZUhlYWRlcigpJiZjLmhpZ2hsaWdodC5yb3c8MClyZXR1cm4hMDtj'@;
put 'b25zdCBsPXRoaXMuY291bnRSb3dzKCk7cmV0dXJuIHRoaXMuc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvcm5lcigpPzA9PT1sOnRoaXMuc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvbHVtbkhlYWRlcigpfHwwPT09bH0saGlkZGVuKCl7cmV0dXJuIXRoaXMuZ2V0U2V0dGluZ3MoKS5hbGxvd1Jl'@;
put 'bW92ZVJvd319fSxbTVRdOmZ1bmN0aW9uIER1dCgpe3JldHVybntrZXk6TVQsbmFtZSgpe2NvbnN0IGM9dGhpcy5nZXRTZWxlY3RlZCgpO2xldCBsPTA7aWYoYylpZihjLmxlbmd0aD4xKWw9MTtlbHNle2NvbnN0WyxhLCxkXT1jWzBdO2EtZCE9MCYmKGw9MSl9cmV0dXJuIHRoaXMuZ2V0VHJh'@;
put 'bnNsYXRlZFBocmFzZShRSyxsKX0sY2FsbGJhY2soKXt0aGlzLmFsdGVyKCJyZW1vdmVfY29sIixmdW5jdGlvbiBXbnQoYyl7Y29uc3QgbD14XyhjLmdldFNlbGVjdGVkKCkpO2lmKDA9PT1sfHwxPT09bClyZXR1cm5bXTtjb25zdCBhPWVUKGwse2NyZWF0ZUNlbGxDb29yZHM6Yy5fY3JlYXRl'@;
put 'Q2VsbENvb3Jkcy5iaW5kKGMpLGNyZWF0ZUNlbGxSYW5nZTpjLl9jcmVhdGVDZWxsUmFuZ2UuYmluZChjKX0pLGQ9bmV3IFNldDtyZXR1cm4gWW4oYy5nZXRTZWxlY3RlZCgpLHY9Pntjb25zdHtmcm9tOk0sdG86RH09YSh2KSxaPU1hdGgubWF4KE0uY29sLDApO1luKEFycmF5LmZyb20obmV3'@;
put 'IEFycmF5KEQuY29sLVorMSksKGNlLGJlKT0+WitiZSksY2U9PntkLmhhcyhjZSl8fGQuYWRkKGNlKX0pfSkscXUoQXJyYXkuZnJvbShkKS5zb3J0KCh2LE0pPT52LU0pLCh2LE0sRCxaKT0+KDAhPT1EJiZNPT09WltELTFdKzE/dlt2Lmxlbmd0aC0xXVsxXSs9MTp2LnB1c2goW00sMV0pLHYp'@;
put 'LFtdKX0odGhpcyksbnVsbCwiQ29udGV4dE1lbnUucmVtb3ZlQ29sdW1uIil9LGRpc2FibGVkKCl7aWYoIXRoaXMuaXNDb2x1bW5Nb2RpZmljYXRpb25BbGxvd2VkKCkpcmV0dXJuITA7Y29uc3QgYz10aGlzLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCk7aWYoIWN8fGMuaXNTaW5nbGVIZWFkZXIo'@;
put 'KSYmYy5oaWdobGlnaHQuY29sPDApcmV0dXJuITA7Y29uc3QgbD10aGlzLmNvdW50Q29scygpO3JldHVybiB0aGlzLnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb3JuZXIoKT8wPT09bDp0aGlzLnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlSb3dIZWFkZXIoKXx8MD09PWx9LGhpZGRlbigpe3JldHVy'@;
put 'biF0aGlzLmdldFNldHRpbmdzKCkuYWxsb3dSZW1vdmVDb2x1bW59fX0sW01GXTpmdW5jdGlvbiBQdXQoKXtyZXR1cm57a2V5Ok1GLG5hbWUoKXtyZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKGVxKX0sY2FsbGJhY2soKXt0aGlzLmdldFBsdWdpbigidW5kb1JlZG8iKS51bmRvKCl9'@;
put 'LGhpZGRlbigpe2NvbnN0IGM9dGhpcy5nZXRQbHVnaW4oInVuZG9SZWRvIik7cmV0dXJuIWN8fCFjLmlzRW5hYmxlZCgpfSxkaXNhYmxlZCgpe3JldHVybiF0aGlzLmdldFBsdWdpbigidW5kb1JlZG8iKS5pc1VuZG9BdmFpbGFibGUoKX19fSxbX0ZdOmZ1bmN0aW9uIGt1dCgpe3JldHVybntr'@;
put 'ZXk6X0YsbmFtZSgpe3JldHVybiB0aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UodHEpfSxjYWxsYmFjaygpe3RoaXMuZ2V0UGx1Z2luKCJ1bmRvUmVkbyIpLnJlZG8oKX0saGlkZGVuKCl7Y29uc3QgYz10aGlzLmdldFBsdWdpbigidW5kb1JlZG8iKTtyZXR1cm4hY3x8IWMuaXNFbmFibGVkKCl9'@;
put 'LGRpc2FibGVkKCl7cmV0dXJuIXRoaXMuZ2V0UGx1Z2luKCJ1bmRvUmVkbyIpLmlzUmVkb0F2YWlsYWJsZSgpfX19LFtTVF06ZnVuY3Rpb24gQXV0KCl7cmV0dXJue2tleTpTVCxjaGVja2FibGU6ITAsYXJpYUNoZWNrZWQoKXtyZXR1cm4gaEYodGhpcy5nZXRTZWxlY3RlZFJhbmdlKCksKGws'@;
put 'YSk9PnRoaXMuZ2V0Q2VsbE1ldGEobCxhKS5yZWFkT25seSl9LGFyaWFMYWJlbCgpe3JldHVybiB0aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UoX1ApfSxuYW1lKCl7bGV0IGM9dGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKF9QKTtyZXR1cm4gaEYodGhpcy5nZXRTZWxlY3RlZFJhbmdlKCksKGEs'@;
put 'ZCk9PnRoaXMuZ2V0Q2VsbE1ldGEoYSxkKS5yZWFkT25seSkmJihjPWRnZShjKSksY30sY2FsbGJhY2soKXtjb25zdCBjPXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZSgpLGw9aEYoYywoYSxkKT0+dGhpcy5nZXRDZWxsTWV0YShhLGQpLnJlYWRPbmx5KTtZbihjLGE9PnthLmZvckFsbCgoZCxoKT0+'@;
put 'e2Q+PTAmJmg+PTAmJnRoaXMuc2V0Q2VsbE1ldGEoZCxoLCJyZWFkT25seSIsIWwpfSl9KSx0aGlzLnJlbmRlcigpfSxkaXNhYmxlZCgpe2NvbnN0IGM9dGhpcy5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpO3JldHVybiEoYyYmIWMuaXNTaW5nbGVIZWFkZXIoKSYmIXRoaXMuc2VsZWN0aW9uLmlz'@;
put 'U2VsZWN0ZWRCeUNvcm5lcigpJiYwIT09dGhpcy5jb3VudFJvd3MoKSYmMCE9PXRoaXMuY291bnRDb2xzKCkmJnRoaXMuZ2V0U2VsZWN0ZWRSYW5nZSgpJiYwIT09dGhpcy5nZXRTZWxlY3RlZFJhbmdlKCkubGVuZ3RoKX19fSxbSzJdOmZ1bmN0aW9uIE11dCgpe3JldHVybntrZXk6SzIsbmFt'@;
put 'ZSgpe3JldHVybiB0aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UobXEpfSxkaXNhYmxlZCgpe2lmKDA9PT10aGlzLmNvdW50Um93cygpfHwwPT09dGhpcy5jb3VudENvbHMoKSlyZXR1cm4hMDtjb25zdCBjPXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKTtyZXR1cm4hKGMmJiFjLmlzU2luZ2xl'@;
put 'SGVhZGVyKCkmJnRoaXMuZ2V0U2VsZWN0ZWRSYW5nZSgpJiYhdGhpcy5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Q29ybmVyKCkpfSxzdWJtZW51OntpdGVtczpbe2tleTpgJHtLMn06bGVmdGAsbmFtZSgpe3JldHVybiB0aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UodnEpfSxjYWxsYmFjaygpe2Nv'@;
put 'bnN0IGM9dGhpcy5nZXRTZWxlY3RlZFJhbmdlKCksbD15OShjLChoLGYpPT50aGlzLmdldENlbGxNZXRhKGgsZikuY2xhc3NOYW1lKSxhPSJob3Jpem9udGFsIixkPSJodExlZnQiO3RoaXMucnVuSG9va3MoImJlZm9yZUNlbGxBbGlnbm1lbnQiLGwsYyxhLGQpLEptKGMsYSxkLChoLGYpPT50'@;
put 'aGlzLmdldENlbGxNZXRhKGgsZiksKGgsZix2LE0pPT50aGlzLnNldENlbGxNZXRhKGgsZix2LE0pKSx0aGlzLnJlbmRlcigpfSxkaXNhYmxlZDohMX0se2tleTpgJHtLMn06Y2VudGVyYCxuYW1lKCl7cmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShicSl9LGNhbGxiYWNrKCl7Y29u'@;
put 'c3QgYz10aGlzLmdldFNlbGVjdGVkUmFuZ2UoKSxsPXk5KGMsKGgsZik9PnRoaXMuZ2V0Q2VsbE1ldGEoaCxmKS5jbGFzc05hbWUpLGE9Imhvcml6b250YWwiLGQ9Imh0Q2VudGVyIjt0aGlzLnJ1bkhvb2tzKCJiZWZvcmVDZWxsQWxpZ25tZW50IixsLGMsYSxkKSxKbShjLGEsZCwoaCxmKT0+'@;
put 'dGhpcy5nZXRDZWxsTWV0YShoLGYpLChoLGYsdixNKT0+dGhpcy5zZXRDZWxsTWV0YShoLGYsdixNKSksdGhpcy5yZW5kZXIoKX0sZGlzYWJsZWQ6ITF9LHtrZXk6YCR7SzJ9OnJpZ2h0YCxuYW1lKCl7cmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZSh5cSl9LGNhbGxiYWNrKCl7Y29u'@;
put 'c3QgYz10aGlzLmdldFNlbGVjdGVkUmFuZ2UoKSxsPXk5KGMsKGgsZik9PnRoaXMuZ2V0Q2VsbE1ldGEoaCxmKS5jbGFzc05hbWUpLGE9Imhvcml6b250YWwiLGQ9Imh0UmlnaHQiO3RoaXMucnVuSG9va3MoImJlZm9yZUNlbGxBbGlnbm1lbnQiLGwsYyxhLGQpLEptKGMsYSxkLChoLGYpPT50'@;
put 'aGlzLmdldENlbGxNZXRhKGgsZiksKGgsZix2LE0pPT50aGlzLnNldENlbGxNZXRhKGgsZix2LE0pKSx0aGlzLnJlbmRlcigpfSxkaXNhYmxlZDohMX0se2tleTpgJHtLMn06anVzdGlmeWAsbmFtZSgpe3JldHVybiB0aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UoX3EpfSxjYWxsYmFjaygpe2Nv'@;
put 'bnN0IGM9dGhpcy5nZXRTZWxlY3RlZFJhbmdlKCksbD15OShjLChoLGYpPT50aGlzLmdldENlbGxNZXRhKGgsZikuY2xhc3NOYW1lKSxhPSJob3Jpem9udGFsIixkPSJodEp1c3RpZnkiO3RoaXMucnVuSG9va3MoImJlZm9yZUNlbGxBbGlnbm1lbnQiLGwsYyxhLGQpLEptKGMsYSxkLChoLGYp'@;
put 'PT50aGlzLmdldENlbGxNZXRhKGgsZiksKGgsZix2LE0pPT50aGlzLnNldENlbGxNZXRhKGgsZix2LE0pKSx0aGlzLnJlbmRlcigpfSxkaXNhYmxlZDohMX0se25hbWU6c3N9LHtrZXk6YCR7SzJ9OnRvcGAsbmFtZSgpe3JldHVybiB0aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2Uod3EpfSxjYWxs'@;
put 'YmFjaygpe2NvbnN0IGM9dGhpcy5nZXRTZWxlY3RlZFJhbmdlKCksbD15OShjLChoLGYpPT50aGlzLmdldENlbGxNZXRhKGgsZikuY2xhc3NOYW1lKSxhPSJ2ZXJ0aWNhbCIsZD0iaHRUb3AiO3RoaXMucnVuSG9va3MoImJlZm9yZUNlbGxBbGlnbm1lbnQiLGwsYyxhLGQpLEptKGMsYSxkLCho'@;
put 'LGYpPT50aGlzLmdldENlbGxNZXRhKGgsZiksKGgsZix2LE0pPT50aGlzLnNldENlbGxNZXRhKGgsZix2LE0pKSx0aGlzLnJlbmRlcigpfSxkaXNhYmxlZDohMX0se2tleTpgJHtLMn06bWlkZGxlYCxuYW1lKCl7cmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShDcSl9LGNhbGxiYWNr'@;
put 'KCl7Y29uc3QgYz10aGlzLmdldFNlbGVjdGVkUmFuZ2UoKSxsPXk5KGMsKGgsZik9PnRoaXMuZ2V0Q2VsbE1ldGEoaCxmKS5jbGFzc05hbWUpLGE9InZlcnRpY2FsIixkPSJodE1pZGRsZSI7dGhpcy5ydW5Ib29rcygiYmVmb3JlQ2VsbEFsaWdubWVudCIsbCxjLGEsZCksSm0oYyxhLGQsKGgs'@;
put 'Zik9PnRoaXMuZ2V0Q2VsbE1ldGEoaCxmKSwoaCxmLHYsTSk9PnRoaXMuc2V0Q2VsbE1ldGEoaCxmLHYsTSkpLHRoaXMucmVuZGVyKCl9LGRpc2FibGVkOiExfSx7a2V5OmAke0syfTpib3R0b21gLG5hbWUoKXtyZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKFNxKX0sY2FsbGJhY2so'@;
put 'KXtjb25zdCBjPXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZSgpLGw9eTkoYywoaCxmKT0+dGhpcy5nZXRDZWxsTWV0YShoLGYpLmNsYXNzTmFtZSksYT0idmVydGljYWwiLGQ9Imh0Qm90dG9tIjt0aGlzLnJ1bkhvb2tzKCJiZWZvcmVDZWxsQWxpZ25tZW50IixsLGMsYSxkKSxKbShjLGEsZCwoaCxm'@;
put 'KT0+dGhpcy5nZXRDZWxsTWV0YShoLGYpLChoLGYsdixNKT0+dGhpcy5zZXRDZWxsTWV0YShoLGYsdixNKSksdGhpcy5yZW5kZXIoKX0sZGlzYWJsZWQ6ITF9XX19fX07ZnVuY3Rpb24gYmdlKCl7Y29uc3QgYz17fTtyZXR1cm4gWG8odmdlLChsLGEpPT57Y1thXT1sKCl9KSxjfWZ1bmN0aW9u'@;
put 'IElKKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBGdXQoYyl7dmFyIGw9ZnVuY3Rpb24gSHV0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQi'@;
put 'KTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9s'@;
put 'Ij09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jbGFzcyB5Z2V7Y29uc3RydWN0b3IobCl7bGV0IGE9YXJndW1lbnRzLmxlbmd0aD4x'@;
put 'JiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOm51bGw7SUoodGhpcywiaG90Iix2b2lkIDApLElKKHRoaXMsInByZWRlZmluZWRJdGVtcyIsYmdlKCkpLElKKHRoaXMsImRlZmF1bHRPcmRlclBhdHRlcm4iLHZvaWQgMCksdGhpcy5ob3Q9bCx0aGlzLmRlZmF1bHRPcmRlclBh'@;
put 'dHRlcm49YX1zZXRQcmVkZWZpbmVkSXRlbXMobCl7Y29uc3QgYT17fTt0aGlzLmRlZmF1bHRPcmRlclBhdHRlcm4ubGVuZ3RoPTAsWG8obCwoZCxoKT0+e2xldCBmPSIiO2QubmFtZT09PXNzPyhhW3NzXT1kLGY9c3MpOmlzTmFOKHBhcnNlSW50KGgsMTApKT8oZC5rZXk9dm9pZCAwPT09ZC5r'@;
put 'ZXk/aDpkLmtleSxhW2hdPWQsZj1kLmtleSk6KGFbZC5rZXldPWQsZj1kLmtleSksdGhpcy5kZWZhdWx0T3JkZXJQYXR0ZXJuLnB1c2goZil9KSx0aGlzLnByZWRlZmluZWRJdGVtcz1hfWdldEl0ZW1zKCl7cmV0dXJuIGZ1bmN0aW9uIE51dCgpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MSYm'@;
put 'dm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpbXSxhPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTp7fTtjb25zdCBkPVtdO2xldCBoPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50'@;
put 'c1swXTpudWxsO3JldHVybiBoJiZoLml0ZW1zP2g9aC5pdGVtczpBcnJheS5pc0FycmF5KGgpfHwoaD1sKSxxbyhoKT9YbyhoLChmLHYpPT57bGV0IE09YVsic3RyaW5nIj09dHlwZW9mIGY/Zjp2XTtNfHwoTT1mKSxxbyhmKT9FdShNLGYpOiJzdHJpbmciPT10eXBlb2YgTSYmKE09e25hbWU6'@;
put 'TX0pLHZvaWQgMD09PU0ua2V5JiYoTS5rZXk9diksZC5wdXNoKE0pfSk6WW4oaCwoZix2KT0+e2xldCBNPWFbZl07IU0mJm1nZS5pbmRleE9mKGYpPj0wfHwoTXx8KE09e25hbWU6ZixrZXk6YCR7dn1gfSkscW8oZikmJkV1KE0sZiksdm9pZCAwPT09TS5rZXkmJihNLmtleT12KSxkLnB1c2go'@;
put 'TSkpfSksZH0oYXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOm51bGwsdGhpcy5kZWZhdWx0T3JkZXJQYXR0ZXJuLHRoaXMucHJlZGVmaW5lZEl0ZW1zKX19ZnVuY3Rpb24gZTYoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIFZ1dChjKXt2YXIg'@;
put 'bD1mdW5jdGlvbiBCdXQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBu'@;
put 'ZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmlu'@;
put 'ZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNsYXNzIGp1dHtjb25zdHJ1Y3RvcihsLGEpe2U2KHRoaXMsInRvcCIsdm9pZCAwKSxlNih0aGlzLCJ0b3BSZWxhdGl2ZSIsdm9pZCAwKSxlNih0aGlzLCJs'@;
put 'ZWZ0Iix2b2lkIDApLGU2KHRoaXMsImxlZnRSZWxhdGl2ZSIsdm9pZCAwKSxlNih0aGlzLCJzY3JvbGxUb3AiLHZvaWQgMCksZTYodGhpcywic2Nyb2xsTGVmdCIsdm9pZCAwKSxlNih0aGlzLCJjZWxsSGVpZ2h0Iix2b2lkIDApLGU2KHRoaXMsImNlbGxXaWR0aCIsdm9pZCAwKTtjb25zdCBk'@;
put 'PWEuc2Nyb2xsWSxoPWEuc2Nyb2xsWDtsZXQgZix2LE0sRCxaLHJlO3RoaXMucm9vdFdpbmRvdz1hLHRoaXMudHlwZT10aGlzLmdldFNvdXJjZVR5cGUobCksImxpdGVyYWwiPT09dGhpcy50eXBlPyhmPXBhcnNlSW50KGwudG9wLDEwKSxNPXBhcnNlSW50KGwubGVmdCwxMCksWj1sLmhlaWdo'@;
put 'dHx8MCxyZT1sLndpZHRofHwwLHY9ZixEPU0sZis9ZCxNKz1oKToiZXZlbnQiPT09dGhpcy50eXBlJiYoZj1wYXJzZUludChsLnBhZ2VZLDEwKSxNPXBhcnNlSW50KGwucGFnZVgsMTApLFo9bC50YXJnZXQuY2xpZW50SGVpZ2h0LHJlPWwudGFyZ2V0LmNsaWVudFdpZHRoLHY9Zi1kLEQ9TS1o'@;
put 'KSx0aGlzLnRvcD1mLHRoaXMudG9wUmVsYXRpdmU9dix0aGlzLmxlZnQ9TSx0aGlzLmxlZnRSZWxhdGl2ZT1ELHRoaXMuc2Nyb2xsVG9wPWQsdGhpcy5zY3JvbGxMZWZ0PWgsdGhpcy5jZWxsSGVpZ2h0PVosdGhpcy5jZWxsV2lkdGg9cmV9Z2V0U291cmNlVHlwZShsKXtsZXQgYT0ibGl0ZXJh'@;
put 'bCI7cmV0dXJuIGwgaW5zdGFuY2VvZiBFdmVudCYmKGE9ImV2ZW50IiksYX1maXRzQWJvdmUobCl7cmV0dXJuIHRoaXMudG9wUmVsYXRpdmU+PWwub2Zmc2V0SGVpZ2h0fWZpdHNCZWxvdyhsKXtyZXR1cm4gdGhpcy50b3BSZWxhdGl2ZStsLm9mZnNldEhlaWdodDw9KGFyZ3VtZW50cy5sZW5n'@;
put 'dGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp0aGlzLnJvb3RXaW5kb3cuaW5uZXJIZWlnaHQpfWZpdHNPblJpZ2h0KGwpe3JldHVybiB0aGlzLmxlZnRSZWxhdGl2ZSt0aGlzLmNlbGxXaWR0aCtsLm9mZnNldFdpZHRoPD0oYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lk'@;
put 'IDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnRoaXMucm9vdFdpbmRvdy5pbm5lcldpZHRoKX1maXRzT25MZWZ0KGwpe3JldHVybiB0aGlzLmxlZnRSZWxhdGl2ZT49bC5vZmZzZXRXaWR0aH19ZnVuY3Rpb24gRVQoYyxsLGEpeyhmdW5jdGlvbiB6dXQoYyxsKXtpZihsLmhhcyhjKSl0'@;
put 'aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfSkoYyxsKSxsLnNldChjLGEpfWZ1bmN0aW9uIFVvKGMsbCl7cmV0dXJuIGMuZ2V0KF9nZShjLGwpKX1mdW5jdGlvbiB4RihjLGwsYSl7cmV0'@;
put 'dXJuIGMuc2V0KF9nZShjLGwpLGEpLGF9ZnVuY3Rpb24gX2dlKGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQg'@;
put 'b24gdGhpcyBvYmplY3QiKX12YXIgWDE9bmV3IFdlYWtNYXAsWmQ9bmV3IFdlYWtNYXAsV2Q9bmV3IFdlYWtNYXAsUko9bmV3IFdlYWtNYXAsS189bmV3IFdlYWtNYXA7Y2xhc3MgVXV0e2NvbnN0cnVjdG9yKGwpe0VUKHRoaXMsWDEsdm9pZCAwKSxFVCh0aGlzLFpkLHZvaWQgMCksRVQodGhp'@;
put 'cyxXZCx2b2lkIDApLEVUKHRoaXMsUkosITEpLEVUKHRoaXMsS18se2Fib3ZlOjAsYmVsb3c6MCxsZWZ0OjAscmlnaHQ6MH0pLHhGKFJKLHRoaXMsbCl9c2V0T2Zmc2V0KGwpe2xldCBhPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTowO3Jl'@;
put 'dHVybiBVbyhLXyx0aGlzKVtsXT1hLHRoaXN9c2V0RWxlbWVudChsKXtyZXR1cm4geEYoWDEsdGhpcyxsKSx0aGlzfXNldFBhcmVudEVsZW1lbnQobCl7cmV0dXJuIHhGKFpkLHRoaXMsbCksdGhpc311cGRhdGVQb3NpdGlvbihsKXt4RihXZCx0aGlzLG5ldyBqdXQobCxVbyhYMSx0aGlzKS5v'@;
put 'd25lckRvY3VtZW50LmRlZmF1bHRWaWV3KSksVW8oUkosdGhpcyk/KFVvKFdkLHRoaXMpLmZpdHNCZWxvdyhVbyhYMSx0aGlzKSk/dGhpcy5zZXRQb3NpdGlvbkJlbG93Q3Vyc29yKCk6VW8oV2QsdGhpcykuZml0c0Fib3ZlKFVvKFgxLHRoaXMpKT90aGlzLnNldFBvc2l0aW9uQWJvdmVDdXJz'@;
put 'b3IoKTp0aGlzLnNldFBvc2l0aW9uQmVsb3dDdXJzb3IoKSx0aGlzLnVwZGF0ZUhvcml6b250YWxQb3NpdGlvbigpKToodGhpcy5zZXRQb3NpdGlvbkJlbG93Q3Vyc29yKCksdGhpcy5zZXRQb3NpdGlvbk9uUmlnaHRPZkN1cnNvcigpKX11cGRhdGVIb3Jpem9udGFsUG9zaXRpb24oKXsicnRs'@;
put 'Ij09PVVvKFgxLHRoaXMpLmRpcj9VbyhXZCx0aGlzKS5maXRzT25MZWZ0KFVvKFgxLHRoaXMpKT90aGlzLnNldFBvc2l0aW9uT25MZWZ0T2ZDdXJzb3IoKTp0aGlzLnNldFBvc2l0aW9uT25SaWdodE9mQ3Vyc29yKCk6VW8oV2QsdGhpcykuZml0c09uUmlnaHQoVW8oWDEsdGhpcykpP3RoaXMu'@;
put 'c2V0UG9zaXRpb25PblJpZ2h0T2ZDdXJzb3IoKTp0aGlzLnNldFBvc2l0aW9uT25MZWZ0T2ZDdXJzb3IoKX1zZXRQb3NpdGlvbkFib3ZlQ3Vyc29yKCl7bGV0IGw9VW8oS18sdGhpcykuYWJvdmUrVW8oV2QsdGhpcykudG9wLVVvKFgxLHRoaXMpLm9mZnNldEhlaWdodDtpZihVbyhaZCx0aGlz'@;
put 'KSl7Y29uc3QgZD1VbyhaZCx0aGlzKS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3LmdldENvbXB1dGVkU3R5bGUoVW8oWmQsdGhpcykucXVlcnlTZWxlY3RvcigiLmh0X21hc3RlciIpKSxoPU51bWJlci5wYXJzZUludChkLnBhZGRpbmdUb3AsMTApLGY9TnVtYmVyLnBhcnNlSW50KGQuYm9y'@;
put 'ZGVyVG9wLDEwKTtsPVVvKFdkLHRoaXMpLnRvcCtVbyhXZCx0aGlzKS5jZWxsSGVpZ2h0LVVvKFgxLHRoaXMpLnNjcm9sbEhlaWdodCtoK2Z9VW8oWDEsdGhpcykuc3R5bGUudG9wPWAke2x9cHhgfXNldFBvc2l0aW9uQmVsb3dDdXJzb3IoKXtsZXQgbD1VbyhLXyx0aGlzKS5iZWxvdytVbyhX'@;
put 'ZCx0aGlzKS50b3ArMTtpZihVbyhaZCx0aGlzKSl7Y29uc3QgZD1VbyhaZCx0aGlzKS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3LmdldENvbXB1dGVkU3R5bGUoVW8oWmQsdGhpcykucXVlcnlTZWxlY3RvcigiLmh0X21hc3RlciIpKSxoPU51bWJlci5wYXJzZUludChkLnBhZGRpbmdUb3As'@;
put 'MTApLGY9TnVtYmVyLnBhcnNlSW50KGQuYm9yZGVyVG9wLDEwKTtsPVVvKFdkLHRoaXMpLnRvcC1oLWYtMX1VbyhYMSx0aGlzKS5zdHlsZS50b3A9YCR7bH1weGB9c2V0UG9zaXRpb25PblJpZ2h0T2ZDdXJzb3IoKXtsZXQgbD1VbyhXZCx0aGlzKS5sZWZ0O2lmKFVvKFpkLHRoaXMpKXtjb25z'@;
put 'dCBhPVVvKFpkLHRoaXMpLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcsZD1OdW1iZXIucGFyc2VJbnQoYS5nZXRDb21wdXRlZFN0eWxlKFVvKFpkLHRoaXMpLnF1ZXJ5U2VsZWN0b3IoIi5odENvcmUiKSkuYm9yZGVyUmlnaHRXaWR0aCwxMCk7bCs9VW8oV2QsdGhpcykuY2VsbFdpZHRoK2R9'@;
put 'ZWxzZSBsKz1VbyhLXyx0aGlzKS5yaWdodDtVbyhYMSx0aGlzKS5zdHlsZS5sZWZ0PWAke2x9cHhgfXNldFBvc2l0aW9uT25MZWZ0T2ZDdXJzb3IoKXtsZXQgbD1VbyhLXyx0aGlzKS5sZWZ0K1VvKFdkLHRoaXMpLmxlZnQtVW8oWDEsdGhpcykub2Zmc2V0V2lkdGg7aWYoVW8oWmQsdGhpcykp'@;
put 'e2NvbnN0IGE9VW8oWmQsdGhpcykub3duZXJEb2N1bWVudC5kZWZhdWx0VmlldztsLT1OdW1iZXIucGFyc2VJbnQoYS5nZXRDb21wdXRlZFN0eWxlKFVvKFpkLHRoaXMpLnF1ZXJ5U2VsZWN0b3IoIi5odENvcmUiKSkuYm9yZGVyTGVmdFdpZHRoLDEwKX1VbyhYMSx0aGlzKS5zdHlsZS5sZWZ0'@;
put 'PWAke2x9cHhgfX1mdW5jdGlvbiB3Z2UoYyl7bGV0e2luaXRpYWxQYWdlOmw9LTEsc2l6ZTphPSgoKT0+MCksb25JdGVtU2VsZWN0OmQ9KCgpPT57fSksb25DbGVhcjpoPSgoKT0+e30pfT1jO2NvbnN0IGY9bmV3IFNldDtsZXQgdj1rcyhsLC0xLEJlKCktMSk7ZnVuY3Rpb24gTShydCxwdCl7'@;
put 'Y29uc3QgZHQ9QmUoKS0xO3JldHVybiBydDwwJiYocnQ9ZHQpLHJ0PmR0JiYocnQ9MCksZi5oYXMocnQpPy0xOihmLmFkZChydCksITE9PT1kKHJ0LCExKSYmKHJ0PU0oMT09PXB0PysrcnQ6LS1ydCxwdCkpLHJ0KX1mdW5jdGlvbiBCZSgpe3JldHVybiBNYXRoLm1heChhKCksMCl9cmV0dXJu'@;
put 'e3NldEN1cnJlbnRQYWdlOmZ1bmN0aW9uIEQocnQpe3J0Pi0xJiZydDxCZSgpJiYhMSE9PWQocnQsITApJiYodj1ydCl9LGdldEN1cnJlbnRQYWdlOmZ1bmN0aW9uIFooKXtyZXR1cm4gdn0sdG9GaXJzdEl0ZW06ZnVuY3Rpb24gcmUoKXtCZSgpPjAmJihmLmNsZWFyKCksdj1NKDAsMSkpfSx0'@;
put 'b0xhc3RJdGVtOmZ1bmN0aW9uIGNlKCl7QmUoKT4wJiYoZi5jbGVhcigpLHY9TShCZSgpLTEsLTEpKX0sdG9OZXh0SXRlbTpmdW5jdGlvbiBiZSgpe0JlKCk+MCYmKGYuY2xlYXIoKSx2PU0oKyt2LDEpKX0sdG9QcmV2aW91c0l0ZW06ZnVuY3Rpb24gRWUoKXtCZSgpPjAmJihmLmNsZWFyKCks'@;
put 'dj1NKC0tdiwtMSkpfSxnZXRTaXplOkJlLGNsZWFyOmZ1bmN0aW9uIHFlKCl7Zi5jbGVhcigpLHY9bCxoKCl9fX1mdW5jdGlvbiBMSihjKXtyZXR1cm4gVHUoYywic3VibWVudSIpfWZ1bmN0aW9uIE9KKGMpe3JldHVybiBuZXcgUmVnRXhwKHNzLCJpIikudGVzdChjLm5hbWUpfWZ1bmN0aW9u'@;
put 'IEVGKGMsbCl7cmV0dXJuITA9PT1jLmRpc2FibGVkfHwiZnVuY3Rpb24iPT10eXBlb2YgYy5kaXNhYmxlZCYmITA9PT1jLmRpc2FibGVkLmNhbGwobCl9ZnVuY3Rpb24gQ2dlKGMpe3JldHVybiBUdShjLCJkaXNhYmxlU2VsZWN0aW9uIil9ZnVuY3Rpb24gU2dlKGMsbCl7Y29uc3QgYT1jLnNs'@;
put 'aWNlKDApO2ZvcihsZXQgZD0wO2Q8YS5sZW5ndGgmJmFbZF0ubmFtZT09PWw7KWEuc2hpZnQoKTtyZXR1cm4gYX1mdW5jdGlvbiBRdXQoYyl7cmV0dXJuITA9PT1jLmNoZWNrYWJsZX1mdW5jdGlvbiByMHQoYyl7cmV0dXJuKGwsYSxkLGgsZix2KT0+e2NvbnN0IE09bC5nZXRTb3VyY2VEYXRh'@;
put 'QXRSb3coZCksRD1jLnJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSxaPSJmdW5jdGlvbiI9PXR5cGVvZiB2P3YuY2FsbChjKTp2LHJlPSJmdW5jdGlvbiI9PXR5cGVvZiBNLmFyaWFMYWJlbD9NLmFyaWFMYWJlbC5jYWxsKGMpOk0uYXJpYUxhYmVsLGNlPSJmdW5jdGlvbiI9PXR5'@;
put 'cGVvZiBNLmFyaWFDaGVja2VkP00uYXJpYUNoZWNrZWQuY2FsbChjKTpNLmFyaWFDaGVja2VkO2lmKHhwKGEpLFRpKEQsImh0SXRlbVdyYXBwZXIiKSxjLmdldFNldHRpbmdzKCkuYXJpYVRhZ3Mpe2NvbnN0IGJlPSFFRihNLGMpJiYhQ2dlKE0pJiYhT0ooTSk7dm8oYSxbLi4uUXV0KE0pP1tb'@;
put 'InJvbGUiLCJtZW51aXRlbWNoZWNrYm94Il0sbUUocmUpLEkyZShjZSldOltbInJvbGUiLCJtZW51aXRlbSJdLG1FKFopXSwuLi5iZT9bTjcoLTEpXTpbXSwuLi5FRihNLGMpP1tbImFyaWEtZGlzYWJsZWQiLCJ0cnVlIl1dOltdLC4uLkxKKE0pP1tOMighMSldOltdXSl9YS5jbGFzc05hbWU9'@;
put 'IiIsYS5hcHBlbmRDaGlsZChEKSxPSihNKT9UaShhLCJodFNlcGFyYXRvciIpOiJmdW5jdGlvbiI9PXR5cGVvZiBNLnJlbmRlcmVyPyhUaShhLCJodEN1c3RvbU1lbnVSZW5kZXJlciIpLGEuYXBwZW5kQ2hpbGQoTS5yZW5kZXJlcihsLEQsZCxoLGYsWikpKTp6NyhELFopLEVGKE0sYyk/VGko'@;
put 'YSwiaHREaXNhYmxlZCIpOkNnZShNKT9UaShhLCJodFNlbGVjdGlvbkRpc2FibGVkIik6TEooTSkmJlRpKGEsImh0U3VibWVudSIpfX1mdW5jdGlvbiBQSihjLGwsYSl7KGZ1bmN0aW9uIGkwdChjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXpl'@;
put 'IHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9KShjLGwpLGwuc2V0KGMsYSl9ZnVuY3Rpb24gVXAoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIGEwdChjKXt2YXIgbD1mdW5jdGlvbiBvMHQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVy'@;
put 'biBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZl'@;
put 'IHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZToh'@;
put 'MCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWZ1bmN0aW9uIEZKKGMsbCxhKXtyZXR1cm4gYy5zZXQoRWdlKGMsbCksYSksYX1mdW5jdGlvbiBfOShjLGwpe3JldHVybiBjLmdldChFZ2UoYyxsKSl9ZnVuY3Rpb24gRWdlKGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhh'@;
put 'cyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX12YXIgVFQ9bmV3IFdlYWtNYXAsVEY9bmV3IFdlYWtNYXAsQUY9bmV3IFdlYWtNYXA7Y2xhc3MgcV97Z2V0'@;
put 'IHRhYmxlQm9yZGVyV2lkdGgoKXtyZXR1cm4gdm9pZCAwPT09XzkoQUYsdGhpcykmJnRoaXMuaG90TWVudSYmRkooQUYsdGhpcyxwYXJzZUludCh0aGlzLmhvdE1lbnUucm9vdFdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHRoaXMuaG90TWVudS52aWV3Ll93dC53dFRhYmxlLlRBQkxFKS5ib3Jk'@;
put 'ZXJXaWR0aCwxMCkpLF85KEFGLHRoaXMpfWNvbnN0cnVjdG9yKGwsYSl7dmFyIGQ9dGhpcztVcCh0aGlzLCJob3QiLHZvaWQgMCksVXAodGhpcywib3B0aW9ucyIsdm9pZCAwKSxVcCh0aGlzLCJldmVudE1hbmFnZXIiLG5ldyBqMih0aGlzKSksVXAodGhpcywiY29udGFpbmVyIix2b2lkIDAp'@;
put 'LFVwKHRoaXMsInBvc2l0aW9uZXIiLHZvaWQgMCksVXAodGhpcywiaG90TWVudSIsbnVsbCksVXAodGhpcywiaG90U3ViTWVudXMiLHt9KSxVcCh0aGlzLCJwYXJlbnRNZW51Iix2b2lkIDApLFVwKHRoaXMsIm1lbnVJdGVtcyIsbnVsbCksVXAodGhpcywib3JpZ091dHNpZGVDbGlja0Rlc2Vs'@;
put 'ZWN0cyIsbnVsbCksUEoodGhpcyxUVCx2b2lkIDApLFBKKHRoaXMsVEYsdm9pZCAwKSxQSih0aGlzLEFGLHZvaWQgMCksdGhpcy5ob3Q9bCx0aGlzLm9wdGlvbnM9YXx8e3BhcmVudDpudWxsLG5hbWU6bnVsbCxjbGFzc05hbWU6IiIsa2VlcEluVmlld3BvcnQ6ITAsc3RhbmRhbG9uZTohMSxt'@;
put 'aW5XaWR0aDoyMTUsY29udGFpbmVyOnRoaXMuaG90LnJvb3REb2N1bWVudC5kb2N1bWVudEVsZW1lbnR9LHRoaXMuY29udGFpbmVyPXRoaXMuY3JlYXRlQ29udGFpbmVyKHRoaXMub3B0aW9ucy5uYW1lKSx0aGlzLnBvc2l0aW9uZXI9bmV3IFV1dCh0aGlzLm9wdGlvbnMua2VlcEluVmlld3Bv'@;
put 'cnQpLHRoaXMucGFyZW50TWVudT10aGlzLm9wdGlvbnMucGFyZW50fHxudWxsLHRoaXMucmVnaXN0ZXJFdmVudHMoKSx0aGlzLmlzU3ViTWVudSgpJiZ0aGlzLmFkZExvY2FsSG9vaygiYWZ0ZXJTZWxlY3Rpb25DaGFuZ2UiLGZ1bmN0aW9uKCl7Zm9yKHZhciBoPWFyZ3VtZW50cy5sZW5ndGgs'@;
put 'Zj1uZXcgQXJyYXkoaCksdj0wO3Y8aDt2KyspZlt2XT1hcmd1bWVudHNbdl07cmV0dXJuIGQucGFyZW50TWVudS5ydW5Mb2NhbEhvb2tzKCJhZnRlclNlbGVjdGlvbkNoYW5nZSIsLi4uZil9KSx0aGlzLmhvdC5hZGRIb29rKCJhZnRlclNldFRoZW1lIiwoaCxmKT0+e3ZhciB2O2Z8fG51bGw9'@;
put 'PT0odj10aGlzLmhvdE1lbnUpfHx2b2lkIDA9PT12fHx2LnVzZVRoZW1lKGgpfSl9cmVnaXN0ZXJFdmVudHMoKXtsZXQgbD10aGlzLmhvdC5yb290V2luZG93O2Zvcig7bDspdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihsLmRvY3VtZW50LCJtb3VzZWRvd24iLGE9PnRoaXMu'@;
put 'b25Eb2N1bWVudE1vdXNlRG93bihhKSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihsLmRvY3VtZW50LCJ0b3VjaHN0YXJ0IixhPT50aGlzLm9uRG9jdW1lbnRNb3VzZURvd24oYSkpLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIobC5kb2N1bWVudCwiY29u'@;
put 'dGV4dG1lbnUiLGE9PnRoaXMub25Eb2N1bWVudENvbnRleHRNZW51KGEpKSxsPUI3KGwpfXNldE1lbnVJdGVtcyhsKXt0aGlzLm1lbnVJdGVtcz1sfWdldE5hdmlnYXRvcigpe3JldHVybiBfOShUVCx0aGlzKX1nZXRLZXlib2FyZFNob3J0Y3V0c0N0cmwoKXtyZXR1cm4gXzkoVEYsdGhpcyl9'@;
put 'Z2V0U2VsZWN0ZWRJdGVtKCl7cmV0dXJuIHRoaXMuaGFzU2VsZWN0ZWRJdGVtKCk/dGhpcy5ob3RNZW51LmdldFNvdXJjZURhdGFBdFJvdyh0aGlzLmhvdE1lbnUuZ2V0U2VsZWN0ZWRMYXN0KClbMF0pOm51bGx9aGFzU2VsZWN0ZWRJdGVtKCl7cmV0dXJuIEFycmF5LmlzQXJyYXkodGhpcy5o'@;
put 'b3RNZW51LmdldFNlbGVjdGVkTGFzdCgpKX1pc1N1Yk1lbnUoKXtyZXR1cm4gbnVsbCE9PXRoaXMucGFyZW50TWVudX1vcGVuKCl7dGhpcy5ydW5Mb2NhbEhvb2tzKCJiZWZvcmVPcGVuIiksdGhpcy5jb250YWluZXIucmVtb3ZlQXR0cmlidXRlKCJzdHlsZSIpLHRoaXMuY29udGFpbmVyLnN0'@;
put 'eWxlLmRpc3BsYXk9ImJsb2NrIjtjb25zdCBsPU1FKE09PnRoaXMub3BlblN1Yk1lbnUoTSksMzAwKSxhPXRoaXMub3B0aW9ucy5taW5XaWR0aHx8MjE1O2xldCBkPSExLGg9SW0odGhpcy5tZW51SXRlbXMsTT0+KE0ua2V5PT09eFQmJihkPSEwKSxmdW5jdGlvbiBLdXQoYyxsKXtyZXR1cm4h'@;
put 'Yy5oaWRkZW58fCEoImZ1bmN0aW9uIj09dHlwZW9mIGMuaGlkZGVuJiZjLmhpZGRlbi5jYWxsKGwpKX0oTSx0aGlzLmhvdCkpKTtpZihoLmxlbmd0aDwxJiYhZCloLnB1c2goYmdlKClbeFRdKTtlbHNlIGlmKDA9PT1oLmxlbmd0aClyZXR1cm47aD1mdW5jdGlvbiBKdXQoYyl7bGV0IGw9YXJn'@;
put 'dW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnNzLGE9Yy5zbGljZSgwKTtyZXR1cm4gYT1TZ2UoYSxsKSxhPWZ1bmN0aW9uIHF1dChjLGwpe2xldCBhPWMuc2xpY2UoMCk7cmV0dXJuIGEucmV2ZXJzZSgpLGE9U2dlKGEsbCksYS5yZXZlcnNlKCks'@;
put 'YX0oYSxsKSxhPWZ1bmN0aW9uIFh1dChjKXtjb25zdCBsPVtdO3JldHVybiBZbihjLChhLGQpPT57ZD4wP2xbbC5sZW5ndGgtMV0ubmFtZSE9PWEubmFtZSYmbC5wdXNoKGEpOmwucHVzaChhKX0pLGx9KGEpLGF9KGgsc3MpO2xldCBmPSExO2NvbnN0IHY9e2RhdGE6aCxjb2xIZWFkZXJzOiEx'@;
put 'LGF1dG9Db2x1bW5TaXplOiEwLGF1dG9XcmFwUm93OiExLG1vZGlmeUNvbFdpZHRoOk09PlBhKE0pJiZNPGE/YTpNLGF1dG9Sb3dTaXplOiExLHJlYWRPbmx5OiEwLGVkaXRvcjohMSxjb3B5UGFzdGU6ITEsaGlkZGVuUm93czohMCxtYXhDb2xzOjEsY29sdW1uczpbe2RhdGE6Im5hbWUiLHJl'@;
put 'bmRlcmVyOnIwdCh0aGlzLmhvdCl9XSxyZW5kZXJBbGxSb3dzOiEwLGZyYWdtZW50U2VsZWN0aW9uOiExLG91dHNpZGVDbGlja0Rlc2VsZWN0czohMSxkaXNhYmxlVmlzdWFsU2VsZWN0aW9uOiJhcmVhIixsYXlvdXREaXJlY3Rpb246dGhpcy5ob3QuaXNSdGwoKT8icnRsIjoibHRyIixhcmlh'@;
put 'VGFnczohMSx0aGVtZU5hbWU6dGhpcy5ob3QuZ2V0Q3VycmVudFRoZW1lTmFtZSgpLGJlZm9yZVJlZnJlc2hEaW1lbnNpb25zOigpPT4hMSxiZWZvcmVPbkNlbGxNb3VzZU92ZXI6KE0sRCk9PntfOShUVCx0aGlzKS5zZXRDdXJyZW50UGFnZShELnJvdyl9LGFmdGVyT25DZWxsTW91c2VPdmVy'@;
put 'OihNLEQpPT57dGhpcy5pc0FsbFN1Yk1lbnVzQ2xvc2VkKCk/bChELnJvdyk6dGhpcy5vcGVuU3ViTWVudShELnJvdyl9LGFmdGVyT25DZWxsQ29udGV4dE1lbnU6TT0+e00ucHJldmVudERlZmF1bHQoKSxGJCgpJiZmJiZ0aGlzLmhhc1NlbGVjdGVkSXRlbSgpJiZ0aGlzLmNsb3NlKCEwKX0s'@;
put 'YWZ0ZXJTZWxlY3Rpb246KE0sRCxaLHJlLGNlKT0+e3RoaXMuaG90TWVudS52aWV3LmlzTW91c2VEb3duKCkmJihjZS52YWx1ZT0hMCksdGhpcy5ydW5Mb2NhbEhvb2tzKCJhZnRlclNlbGVjdGlvbkNoYW5nZSIsdGhpcy5nZXRTZWxlY3RlZEl0ZW0oKSl9LGJlZm9yZU9uQ2VsbE1vdXNlVXA6'@;
put 'TT0+e3RoaXMuaGFzU2VsZWN0ZWRJdGVtKCkmJihmPSF0aGlzLmlzQ29tbWFuZFBhc3NpdmUodGhpcy5nZXRTZWxlY3RlZEl0ZW0oKSksdGhpcy5leGVjdXRlQ29tbWFuZChNKSl9LGFmdGVyT25DZWxsTW91c2VVcDpNPT57KCFGJCgpfHwhSG0oTSkpJiZmJiZ0aGlzLmhhc1NlbGVjdGVkSXRl'@;
put 'bSgpJiYoQXAoKXx8UCQoKT90aGlzLmhvdC5fcmVnaXN0ZXJUaW1lb3V0KCgpPT50aGlzLmNsb3NlKCEwKSwzMjUpOnRoaXMuY2xvc2UoITApKX0sYWZ0ZXJVbmxpc3RlbjooKT0+eyF0aGlzLmhhc1NlbGVjdGVkSXRlbSgpJiZ0aGlzLmlzT3BlbmVkKCkmJnRoaXMuaG90TWVudS5saXN0ZW4o'@;
put 'KX19O3RoaXMub3JpZ091dHNpZGVDbGlja0Rlc2VsZWN0cz10aGlzLmhvdC5nZXRTZXR0aW5ncygpLm91dHNpZGVDbGlja0Rlc2VsZWN0cyx0aGlzLmhvdC5nZXRTZXR0aW5ncygpLm91dHNpZGVDbGlja0Rlc2VsZWN0cz0hMSx0aGlzLmhvdE1lbnU9bmV3IHRoaXMuaG90LmNvbnN0cnVjdG9y'@;
put 'KHRoaXMuY29udGFpbmVyLHYpLHRoaXMuaG90TWVudS5hZGRIb29rKCJhZnRlckluaXQiLCgpPT50aGlzLm9uQWZ0ZXJJbml0KCkpLHRoaXMuaG90TWVudS5pbml0KCksRkooVFQsdGhpcyxmdW5jdGlvbiBlMHQoYyl7cmV0dXJuIHdnZSh7c2l6ZTooKT0+Yy5jb3VudFJvd3MoKSxvbkl0ZW1T'@;
put 'ZWxlY3QobCxhKXtjb25zdCBkPWMuZ2V0Q2VsbChsLDApO2lmKCFkfHxmdW5jdGlvbiBXdXQoYyl7cmV0dXJuIHBvKGMsImh0U2VwYXJhdG9yIil9KGQpfHxmdW5jdGlvbiBHdXQoYyl7cmV0dXJuIHBvKGMsImh0RGlzYWJsZWQiKX0oZCl8fGZ1bmN0aW9uICR1dChjKXtyZXR1cm4gcG8oYywi'@;
put 'aHRTZWxlY3Rpb25EaXNhYmxlZCIpfShkKSlyZXR1cm4hMTtjLnNlbGVjdENlbGwobCwwLC4uLmE/W2wsMCwhMSwhMV06W10pfSxvbkNsZWFyKCl7Yy5kZXNlbGVjdENlbGwoKX19KX0odGhpcy5ob3RNZW51KSksRkooVEYsdGhpcyxmdW5jdGlvbiBuMHQoYyl7bGV0IGw9YXJndW1lbnRzLmxl'@;
put 'bmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOltdO2NvbnN0IGE9W107ZnVuY3Rpb24gZChaLHJlKXtNKHJlKS5hZGRTaG9ydGN1dHMoWix7Z3JvdXA6Im1lbnUifSl9ZnVuY3Rpb24gaChaLHJlKXtjb25zdCBjZT1NKHJlKTtaLmZvckVhY2goYmU9PntsZXR7a2V5'@;
put 'czpFZX09YmU7RWUuZm9yRWFjaChCZT0+Y2UucmVtb3ZlU2hvcnRjdXRzQnlLZXlzKEJlKSl9KSxhLnB1c2goe3Nob3J0Y3V0czpaLGNvbnRleHROYW1lOnJlfSksZChaLHJlKX1mdW5jdGlvbiB2KFope3JldHVybiBaP2BtZW51OiR7Wn1gOiJtZW51In1mdW5jdGlvbiBNKFope3ZhciByZTtj'@;
put 'b25zdCBjZT1jLmhvdE1lbnUuZ2V0U2hvcnRjdXRNYW5hZ2VyKCksYmU9dihaKTtyZXR1cm4gbnVsbCE9PShyZT1jZS5nZXRDb250ZXh0KGJlKSkmJnZvaWQgMCE9PXJlP3JlOmNlLmFkZENvbnRleHQoYmUpfXJldHVybiBkKGZ1bmN0aW9uIHQwdChjKXtjb25zdHtob3Q6bCxob3RNZW51OmF9'@;
put 'PWM7cmV0dXJuW3trZXlzOltbIkNvbnRyb2wvTWV0YSIsIkEiXV0sZm9yd2FyZFRvQ29udGV4dDpsLmdldFNob3J0Y3V0TWFuYWdlcigpLmdldENvbnRleHQoImdyaWQiKSxjYWxsYmFjazooKT0+Yy5jbG9zZSghMCl9LHtrZXlzOltbIlRhYiJdLFsiU2hpZnQiLCJUYWIiXV0sY2FsbGJhY2s6'@;
put 'KGQsaCk9Pntjb25zdCBmPWwuZ2V0U2V0dGluZ3MoKSx2PSJmdW5jdGlvbiI9PXR5cGVvZiBmLnRhYk1vdmVzP2YudGFiTW92ZXMoZCk6Zi50YWJNb3ZlcztoLmluY2x1ZGVzKCJzaGlmdCIpP2wuc2VsZWN0aW9uLnRyYW5zZm9ybVN0YXJ0KC12LnJvdywtdi5jb2wpOmwuc2VsZWN0aW9uLnRy'@;
put 'YW5zZm9ybVN0YXJ0KHYucm93LHYuY29sKSxjLmNsb3NlKCEwKX19LHtrZXlzOltbIkVzY2FwZSJdXSxjYWxsYmFjazooKT0+Yy5jbG9zZSgpfSx7a2V5czpbWyJBcnJvd0Rvd24iXV0sY2FsbGJhY2s6KCk9PmMuZ2V0TmF2aWdhdG9yKCkudG9OZXh0SXRlbSgpfSx7a2V5czpbWyJBcnJvd1Vw'@;
put 'Il1dLGNhbGxiYWNrOigpPT5jLmdldE5hdmlnYXRvcigpLnRvUHJldmlvdXNJdGVtKCl9LHtrZXlzOltbbC5pc1J0bCgpPyJBcnJvd0xlZnQiOiJBcnJvd1JpZ2h0Il1dLGNhbGxiYWNrOigpPT57Y29uc3QgZD1hLmdldFNlbGVjdGVkTGFzdCgpO2lmKGQpe2NvbnN0IGg9Yy5vcGVuU3ViTWVu'@;
put 'dShkWzBdKTtoJiZoLmdldE5hdmlnYXRvcigpLnRvRmlyc3RJdGVtKCl9fX0se2tleXM6W1tsLmlzUnRsKCk/IkFycm93UmlnaHQiOiJBcnJvd0xlZnQiXV0sY2FsbGJhY2s6KCk9PnthLmdldFNlbGVjdGVkTGFzdCgpJiZjLmlzU3ViTWVudSgpJiYoYy5jbG9zZSgpLGMuaXNTdWJNZW51KCkm'@;
put 'JmMucGFyZW50TWVudS5ob3RNZW51Lmxpc3RlbigpKX19LHtrZXlzOltbIkNvbnRyb2wvTWV0YSIsIkFycm93VXAiXSxbIkhvbWUiXV0sY2FsbGJhY2s6KCk9PmMuZ2V0TmF2aWdhdG9yKCkudG9GaXJzdEl0ZW0oKX0se2tleXM6W1siQ29udHJvbC9NZXRhIiwiQXJyb3dEb3duIl0sWyJFbmQi'@;
put 'XV0sY2FsbGJhY2s6KCk9PmMuZ2V0TmF2aWdhdG9yKCkudG9MYXN0SXRlbSgpfSx7a2V5czpbWyJFbnRlciJdLFsiU3BhY2UiXV0sY2FsbGJhY2s6ZD0+e2NvbnN0IGg9YS5nZXRTZWxlY3RlZExhc3QoKTtoJiYoYS5nZXRTb3VyY2VEYXRhQXRSb3coaFswXSkuc3VibWVudT9jLm9wZW5TdWJN'@;
put 'ZW51KGhbMF0pLmdldE5hdmlnYXRvcigpLnRvRmlyc3RJdGVtKCk6KGMuZXhlY3V0ZUNvbW1hbmQoZCksYy5jbG9zZSghMCkpKX19LHtrZXlzOltbIlBhZ2VVcCJdXSxjYWxsYmFjazooKT0+e2EuZ2V0U2VsZWN0ZWRMYXN0KCk/YS5zZWxlY3Rpb24udHJhbnNmb3JtU3RhcnQoLWEuY291bnRW'@;
put 'aXNpYmxlUm93cygpLDApOmMuZ2V0TmF2aWdhdG9yKCkudG9GaXJzdEl0ZW0oKX19LHtrZXlzOltbIlBhZ2VEb3duIl1dLGNhbGxiYWNrOigpPT57YS5nZXRTZWxlY3RlZExhc3QoKT9hLnNlbGVjdGlvbi50cmFuc2Zvcm1TdGFydChhLmNvdW50VmlzaWJsZVJvd3MoKSwwKTpjLmdldE5hdmln'@;
put 'YXRvcigpLnRvTGFzdEl0ZW0oKX19XX0oYykpLGwuZm9yRWFjaChaPT57bGV0e3Nob3J0Y3V0czpyZSxjb250ZXh0TmFtZTpjZX09WjtoKHJlLGNlKX0pLHthZGRDdXN0b21TaG9ydGN1dHM6aCxnZXRDdXN0b21TaG9ydGN1dHM6ZnVuY3Rpb24gZigpe3JldHVyblsuLi5hXX0sZ2V0Q29udGV4'@;
put 'dDpNLGxpc3RlbjpmdW5jdGlvbiBEKFope2MuaG90TWVudS5nZXRTaG9ydGN1dE1hbmFnZXIoKS5zZXRBY3RpdmVDb250ZXh0TmFtZSh2KFopKX19fSh0aGlzKSksXzkoVEYsdGhpcykubGlzdGVuKCksdGhpcy5mb2N1cygpLHRoaXMuaXNTdWJNZW51KCkmJnRoaXMuYWRkTG9jYWxIb29rKCJh'@;
put 'ZnRlck9wZW4iLCgpPT50aGlzLnBhcmVudE1lbnUucnVuTG9jYWxIb29rcygiYWZ0ZXJTdWJtZW51T3BlbiIsdGhpcykpLHRoaXMucnVuTG9jYWxIb29rcygiYWZ0ZXJPcGVuIix0aGlzKX1jbG9zZSgpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdJiZh'@;
put 'cmd1bWVudHNbMF07aWYodGhpcy5pc09wZW5lZCgpKWlmKGwmJnRoaXMuaXNTdWJNZW51KCkpdGhpcy5wYXJlbnRNZW51LmNsb3NlKCk7ZWxzZSBpZihfOShUVCx0aGlzKS5jbGVhcigpLHRoaXMuY2xvc2VBbGxTdWJNZW51cygpLHRoaXMuY29udGFpbmVyLnN0eWxlLmRpc3BsYXk9Im5vbmUi'@;
put 'LHRoaXMuaG90TWVudS5kZXN0cm95KCksdGhpcy5ob3RNZW51PW51bGwsdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5vdXRzaWRlQ2xpY2tEZXNlbGVjdHM9dGhpcy5vcmlnT3V0c2lkZUNsaWNrRGVzZWxlY3RzLHRoaXMucnVuTG9jYWxIb29rcygiYWZ0ZXJDbG9zZSIpLHRoaXMuaXNTdWJNZW51'@;
put 'KCkpe2lmKHRoaXMuaG90LmdldFNldHRpbmdzKCkuYXJpYVRhZ3Mpe2NvbnN0IGE9dGhpcy5wYXJlbnRNZW51LmhvdE1lbnUuZ2V0U2VsZWN0ZWRMYXN0KCk7YSYmdm8odGhpcy5wYXJlbnRNZW51LmhvdE1lbnUuZ2V0Q2VsbChhWzBdLDApLFtOMighMSldKX10aGlzLnBhcmVudE1lbnUuaG90'@;
put 'TWVudS5saXN0ZW4oKX19b3BlblN1Yk1lbnUobCl7aWYoIXRoaXMuaG90TWVudSlyZXR1cm4hMTtjb25zdCBhPXRoaXMuaG90TWVudS5nZXRDZWxsKGwsMCk7aWYodGhpcy5jbG9zZUFsbFN1Yk1lbnVzKCksIWF8fCFmdW5jdGlvbiBZdXQoYyl7cmV0dXJuIHBvKGMsImh0U3VibWVudSIpfShh'@;
put 'KSlyZXR1cm4hMTtjb25zdCBkPXRoaXMuaG90TWVudS5nZXRTb3VyY2VEYXRhQXRSb3cobCksaD1uZXcgcV8odGhpcy5ob3Qse3BhcmVudDp0aGlzLG5hbWU6ZC5uYW1lLGNsYXNzTmFtZTp0aGlzLm9wdGlvbnMuY2xhc3NOYW1lLGtlZXBJblZpZXdwb3J0OiEwLGNvbnRhaW5lcjp0aGlzLm9w'@;
put 'dGlvbnMuY29udGFpbmVyfSk7cmV0dXJuIGguc2V0TWVudUl0ZW1zKGQuc3VibWVudS5pdGVtcyksaC5vcGVuKCksaC5zZXRQb3NpdGlvbihhLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpKSx0aGlzLmhvdFN1Yk1lbnVzW2Qua2V5XT1oLHRoaXMuaG90LmdldFNldHRpbmdzKCkuYXJpYVRhZ3Mm'@;
put 'JnZvKGEsW04yKCEwKV0pLGh9Y2xvc2VTdWJNZW51KGwpe2NvbnN0IGE9dGhpcy5ob3RNZW51LmdldFNvdXJjZURhdGFBdFJvdyhsKSxkPXRoaXMuaG90U3ViTWVudXNbYS5rZXldO2lmKGQpe2QuZGVzdHJveSgpLGRlbGV0ZSB0aGlzLmhvdFN1Yk1lbnVzW2Eua2V5XTtjb25zdCBoPXRoaXMu'@;
put 'aG90TWVudS5nZXRDZWxsKGwsMCk7dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5hcmlhVGFncyYmdm8oaCxbTjIoITEpXSl9fWNsb3NlQWxsU3ViTWVudXMoKXtZbih0aGlzLmhvdE1lbnUuZ2V0RGF0YSgpLChsLGEpPT50aGlzLmNsb3NlU3ViTWVudShhKSl9aXNBbGxTdWJNZW51c0Nsb3NlZCgp'@;
put 'e3JldHVybiAwPT09T2JqZWN0LmtleXModGhpcy5ob3RTdWJNZW51cykubGVuZ3RofWZvY3VzKCl7dGhpcy5pc09wZW5lZCgpJiYodGhpcy5ob3RNZW51LnJvb3RFbGVtZW50LmZvY3VzKHtwcmV2ZW50U2Nyb2xsOiEwfSksdGhpcy5nZXRLZXlib2FyZFNob3J0Y3V0c0N0cmwoKS5saXN0ZW4o'@;
put 'KSx0aGlzLmhvdE1lbnUubGlzdGVuKCkpfWRlc3Ryb3koKXtjb25zdCBsPXRoaXMuY29udGFpbmVyLnBhcmVudE5vZGU7dGhpcy5jbGVhckxvY2FsSG9va3MoKSx0aGlzLmNsb3NlKCksdGhpcy5wYXJlbnRNZW51PW51bGwsdGhpcy5ldmVudE1hbmFnZXIuZGVzdHJveSgpLGwmJmwucmVtb3Zl'@;
put 'Q2hpbGQodGhpcy5jb250YWluZXIpfWlzT3BlbmVkKCl7cmV0dXJuIG51bGwhPT10aGlzLmhvdE1lbnV9ZXhlY3V0ZUNvbW1hbmQobCl7aWYoIXRoaXMuaXNPcGVuZWQoKXx8IXRoaXMuaGFzU2VsZWN0ZWRJdGVtKCkpcmV0dXJuO2NvbnN0IGE9dGhpcy5nZXRTZWxlY3RlZEl0ZW0oKTtpZih0'@;
put 'aGlzLnJ1bkxvY2FsSG9va3MoInNlbGVjdCIsYSxsKSx0aGlzLmlzQ29tbWFuZFBhc3NpdmUoYSkpcmV0dXJuO2NvbnN0IGQ9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZSgpLGg9ZD9mdW5jdGlvbiBadXQoYyl7cmV0dXJuIHlzKGMsbD0+KHtzdGFydDpsLmdldFRvcFN0YXJ0Q29ybmVyKCks'@;
put 'ZW5kOmwuZ2V0Qm90dG9tRW5kQ29ybmVyKCl9KSl9KGQpOltdO3RoaXMucnVuTG9jYWxIb29rcygiZXhlY3V0ZUNvbW1hbmQiLGEua2V5LGgsbCksdGhpcy5pc1N1Yk1lbnUoKSYmdGhpcy5wYXJlbnRNZW51LnJ1bkxvY2FsSG9va3MoImV4ZWN1dGVDb21tYW5kIixhLmtleSxoLGwpfWlzQ29t'@;
put 'bWFuZFBhc3NpdmUobCl7cmV0dXJuITE9PT1sLmlzQ29tbWFuZHx8T0oobCl8fEVGKGwsdGhpcy5ob3QpfHxMSihsKX1zZXRPZmZzZXQobCl7dGhpcy5wb3NpdGlvbmVyLnNldE9mZnNldChsLGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTow'@;
put 'KX1zZXRQb3NpdGlvbihsKXt0aGlzLmlzU3ViTWVudSgpJiZ0aGlzLnBvc2l0aW9uZXIuc2V0UGFyZW50RWxlbWVudCh0aGlzLnBhcmVudE1lbnUuY29udGFpbmVyKSx0aGlzLnBvc2l0aW9uZXIuc2V0RWxlbWVudCh0aGlzLmNvbnRhaW5lcikudXBkYXRlUG9zaXRpb24obCl9dXBkYXRlTWVu'@;
put 'dURpbWVuc2lvbnMoKXtjb25zdCBsPXRoaXMuaG90TWVudS52aWV3LmdldFN0eWxlc0hhbmRsZXIoKSx7d3RUYWJsZTphfT10aGlzLmhvdE1lbnUudmlldy5fd3QsZD10aGlzLmhvdE1lbnUuZ2V0U2V0dGluZ3MoKS5kYXRhLGg9YS5oaWRlci5zdHlsZSxmPWEuaG9sZGVyLnN0eWxlLHY9cGFy'@;
put 'c2VJbnQoaC53aWR0aCwxMCksTT1xdShkLChELFoscmUpPT57Y29uc3QgYmU9dGhpcy5ob3RNZW51LmdldENlbGwocmUsMCk/eHUodGhpcy5ob3RNZW51LmdldENlbGwocmUsMCkpOjA7cmV0dXJuIEQrKFoubmFtZT09PXNzPzE6YmUpfSwwKTtsLmlzQ2xhc3NpY1RoZW1lKCk/KGYud2lkdGg9'@;
put 'YCR7diszfXB4YCxmLmhlaWdodD1gJHtNKzN9cHhgKTooZi53aWR0aD1gJHt2fXB4YCxmLmhlaWdodD1gJHtNfXB4YCksaC5oZWlnaHQ9Zi5oZWlnaHR9Y3JlYXRlQ29udGFpbmVyKCl7Y29uc3QgYT10aGlzLm9wdGlvbnMuY29udGFpbmVyLm93bmVyRG9jdW1lbnQ7bGV0IGgsZD1hcmd1bWVu'@;
put 'dHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06bnVsbDtyZXR1cm4gZCYmKG1sKGQpJiYoZD1kLmNhbGwodGhpcy5ob3QpLGQ9bnVsbD09PWR8fF9jKGQpPyIiOmQudG9TdHJpbmcoKSksZD1kLnJlcGxhY2UoL1teQS1aYS16MC05XS9nLCJfIiksZD1gJHt0'@;
put 'aGlzLm9wdGlvbnMuY2xhc3NOYW1lfVN1Yl8ke2R9YCxoPWEucXVlcnlTZWxlY3RvcihgLiR7dGhpcy5vcHRpb25zLmNsYXNzTmFtZX0uJHtkfWApKSxofHwoaD1hLmNyZWF0ZUVsZW1lbnQoImRpdiIpLFRpKGgsYGh0TWVudSBoYW5kc29udGFibGUgJHt0aGlzLm9wdGlvbnMuY2xhc3NOYW1l'@;
put 'fWApLGQmJlRpKGgsZCksdGhpcy5vcHRpb25zLmNvbnRhaW5lci5hcHBlbmRDaGlsZChoKSksaH1vbkFmdGVySW5pdCgpe3RoaXMudXBkYXRlTWVudURpbWVuc2lvbnMoKSx0aGlzLmhvdC5nZXRTZXR0aW5ncygpLmFyaWFUYWdzJiZ2byh0aGlzLmhvdE1lbnUucm9vdEVsZW1lbnQsW1sicm9s'@;
put 'ZSIsIm1lbnUiXSxONygtMSldKX1vbkRvY3VtZW50TW91c2VEb3duKGwpe3RoaXMuaXNPcGVuZWQoKSYmKHRoaXMub3B0aW9ucy5zdGFuZGFsb25lJiZ0aGlzLmhvdE1lbnUmJiFMbShsLnRhcmdldCx0aGlzLmhvdE1lbnUucm9vdEVsZW1lbnQpfHwodGhpcy5pc0FsbFN1Yk1lbnVzQ2xvc2Vk'@;
put 'KCl8fHRoaXMuaXNTdWJNZW51KCkpJiYhTG0obC50YXJnZXQsIi5odE1lbnUiKSkmJnRoaXMuY2xvc2UoITApfW9uRG9jdW1lbnRDb250ZXh0TWVudShsKXt0aGlzLmlzT3BlbmVkKCkmJnBvKGwudGFyZ2V0LCJodENvcmUiKSYmTG0obC50YXJnZXQsdGhpcy5ob3RNZW51LnJvb3RFbGVtZW50'@;
put 'KSYmbC5wcmV2ZW50RGVmYXVsdCgpfX1mdW5jdGlvbiBISihjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gYzB0KGMpe3ZhciBsPWZ1bmN0aW9uIHUwdChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9'@;
put 'PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVy'@;
put 'KShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9ZnVuY3Rpb24ga0YoYyxsLGEp'@;
put 'e2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfVRsKHFfLHkxKTtjb25zdCBBVD0iY29udGV4'@;
put 'dE1lbnUiLEFnZT1BVDtTYS5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYWZ0ZXJDb250ZXh0TWVudURlZmF1bHRPcHRpb25zIiksU2EuZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImJlZm9yZUNvbnRleHRNZW51U2hvdyIpLFNhLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJhZnRlckNvbnRl'@;
put 'eHRNZW51U2hvdyIpLFNhLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJhZnRlckNvbnRleHRNZW51SGlkZSIpLFNhLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJhZnRlckNvbnRleHRNZW51RXhlY3V0ZSIpO3ZhciBrVD1uZXcgV2Vha1NldDtjbGFzcyBERiBleHRlbmRzIEZze2NvbnN0cnVj'@;
put 'dG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSxmdW5jdGlvbiBzMHQoYyxsKXsoZnVuY3Rpb24gbDB0KGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX0pKGMs'@;
put 'bCksbC5hZGQoYyl9KHRoaXMsa1QpLEhKKHRoaXMsImNvbW1hbmRFeGVjdXRvciIsbmV3IGdnZSh0aGlzLmhvdCkpLEhKKHRoaXMsIml0ZW1zRmFjdG9yeSIsbnVsbCksSEoodGhpcywibWVudSIsbnVsbCl9c3RhdGljIGdldCBQTFVHSU5fS0VZKCl7cmV0dXJuIEFUfXN0YXRpYyBnZXQgUExV'@;
put 'R0lOX1BSSU9SSVRZKCl7cmV0dXJuIDcwfXN0YXRpYyBnZXQgUExVR0lOX0RFUFMoKXtyZXR1cm5bInBsdWdpbjpBdXRvQ29sdW1uU2l6ZSJdfXN0YXRpYyBnZXQgREVGQVVMVF9JVEVNUygpe3JldHVybltDRixTRixzcyx3VCxDVCxzcyx3RixNVCxzcyxNRixfRixzcyxTVCxzcyxLMl19aXNF'@;
put 'bmFibGVkKCl7cmV0dXJuISF0aGlzLmhvdC5nZXRTZXR0aW5ncygpW0FUXX1lbmFibGVQbHVnaW4oKXt2YXIgbD10aGlzO2lmKHRoaXMuZW5hYmxlZClyZXR1cm47Y29uc3QgYT10aGlzLmhvdC5nZXRTZXR0aW5ncygpW0FUXTsiZnVuY3Rpb24iPT10eXBlb2YgYS5jYWxsYmFjayYmdGhpcy5j'@;
put 'b21tYW5kRXhlY3V0b3Iuc2V0Q29tbW9uQ2FsbGJhY2soYS5jYWxsYmFjayksdGhpcy5tZW51PW5ldyBxXyh0aGlzLmhvdCx7Y2xhc3NOYW1lOiJodENvbnRleHRNZW51IixrZWVwSW5WaWV3cG9ydDohMCxjb250YWluZXI6YS51aUNvbnRhaW5lcnx8dGhpcy5ob3Qucm9vdERvY3VtZW50LmJv'@;
put 'ZHl9KSx0aGlzLm1lbnUuYWRkTG9jYWxIb29rKCJiZWZvcmVPcGVuIiwoKT0+a0Yoa1QsdGhpcyxmMHQpLmNhbGwodGhpcykpLHRoaXMubWVudS5hZGRMb2NhbEhvb2soImFmdGVyT3BlbiIsKCk9PmtGKGtULHRoaXMscDB0KS5jYWxsKHRoaXMpKSx0aGlzLm1lbnUuYWRkTG9jYWxIb29rKCJh'@;
put 'ZnRlckNsb3NlIiwoKT0+a0Yoa1QsdGhpcyxnMHQpLmNhbGwodGhpcykpLHRoaXMubWVudS5hZGRMb2NhbEhvb2soImV4ZWN1dGVDb21tYW5kIixmdW5jdGlvbigpe2Zvcih2YXIgZD1hcmd1bWVudHMubGVuZ3RoLGg9bmV3IEFycmF5KGQpLGY9MDtmPGQ7ZisrKWhbZl09YXJndW1lbnRzW2Zd'@;
put 'O3JldHVybiBsLmV4ZWN1dGVDb21tYW5kLmNhbGwobCwuLi5oKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJPbkNlbGxDb250ZXh0TWVudSIsZD0+a0Yoa1QsdGhpcyxoMHQpLmNhbGwodGhpcyxkKSksdGhpcy5yZWdpc3RlclNob3J0Y3V0cygpLHN1cGVyLmVuYWJsZVBsdWdpbigpfXVwZGF0ZVBs'@;
put 'dWdpbigpe3RoaXMuZGlzYWJsZVBsdWdpbigpLHRoaXMuZW5hYmxlUGx1Z2luKCksc3VwZXIudXBkYXRlUGx1Z2luKCl9ZGlzYWJsZVBsdWdpbigpe3RoaXMuY2xvc2UoKSx0aGlzLm1lbnUmJih0aGlzLm1lbnUuZGVzdHJveSgpLHRoaXMubWVudT1udWxsKSx0aGlzLnVucmVnaXN0ZXJTaG9y'@;
put 'dGN1dHMoKSxzdXBlci5kaXNhYmxlUGx1Z2luKCl9cmVnaXN0ZXJTaG9ydGN1dHMoKXt0aGlzLmhvdC5nZXRTaG9ydGN1dE1hbmFnZXIoKS5nZXRDb250ZXh0KCJncmlkIikuYWRkU2hvcnRjdXQoe2tleXM6W1siQ29udHJvbC9NZXRhIiwiU2hpZnQiLCJCYWNrc2xhc2giXSxbIlNoaWZ0Iiwi'@;
put 'RjEwIl1dLGNhbGxiYWNrOigpPT57Y29uc3R7aGlnaGxpZ2h0Omx9PXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCk7dGhpcy5ob3Quc2Nyb2xsVG9Gb2N1c2VkQ2VsbCgpO2NvbnN0IGE9dGhpcy5ob3QuZ2V0Q2VsbChsLnJvdyxsLmNvbCwhMCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0'@;
put 'KCksZD1mRih0aGlzLm1lbnUuY29udGFpbmVyLHRoaXMuaG90LnJvb3REb2N1bWVudCk7dGhpcy5vcGVuKHtsZWZ0OmEubGVmdCtkLmxlZnQsdG9wOmEudG9wK2QudG9wLTErYS5oZWlnaHR9LHtsZWZ0OmEud2lkdGgsYWJvdmU6LWEuaGVpZ2h0fSksdGhpcy5tZW51LmdldE5hdmlnYXRvcigp'@;
put 'LnRvRmlyc3RJdGVtKCl9LHJ1bk9ubHlJZjooKT0+e3ZhciBsO2NvbnN0IGE9bnVsbD09PShsPXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCkpfHx2b2lkIDA9PT1sP3ZvaWQgMDpsLmhpZ2hsaWdodDtyZXR1cm4gYSYmdGhpcy5ob3Quc2VsZWN0aW9uLmlzQ2VsbFZpc2libGUoYSkm'@;
put 'JiF0aGlzLm1lbnUuaXNPcGVuZWQoKX0sZ3JvdXA6QWdlfSl9dW5yZWdpc3RlclNob3J0Y3V0cygpe3RoaXMuaG90LmdldFNob3J0Y3V0TWFuYWdlcigpLmdldENvbnRleHQoImdyaWQiKS5yZW1vdmVTaG9ydGN1dHNCeUdyb3VwKEFnZSl9b3BlbihsKXt2YXIgYTtsZXQgZD1hcmd1bWVudHMu'@;
put 'bGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06e2Fib3ZlOjAsYmVsb3c6MCxsZWZ0OjAscmlnaHQ6MH07aWYobnVsbCE9PShhPXRoaXMubWVudSkmJnZvaWQgMCE9PWEmJmEuaXNPcGVuZWQoKSlyZXR1cm47dGhpcy5wcmVwYXJlTWVudUl0ZW1zKCksdGhpcy5t'@;
put 'ZW51Lm9wZW4oKTtjb25zdCBoPXRoaXMubWVudS50YWJsZUJvcmRlcldpZHRoPjA7WG8oZCwoZix2KT0+e2NvbnN0IE09WyJiZWxvdyIsInJpZ2h0Il0uaW5jbHVkZXModik/ZisxOmYtMTt0aGlzLm1lbnUuc2V0T2Zmc2V0KHYsaD9mOk0pfSksdGhpcy5tZW51LnNldFBvc2l0aW9uKGwpfWNs'@;
put 'b3NlKCl7dmFyIGw7bnVsbD09PShsPXRoaXMubWVudSl8fHZvaWQgMD09PWx8fGwuY2xvc2UoKSx0aGlzLml0ZW1zRmFjdG9yeT1udWxsfWV4ZWN1dGVDb21tYW5kKGwpe251bGw9PT10aGlzLml0ZW1zRmFjdG9yeSYmdGhpcy5wcmVwYXJlTWVudUl0ZW1zKCk7Zm9yKHZhciBhPWFyZ3VtZW50'@;
put 'cy5sZW5ndGgsZD1uZXcgQXJyYXkoYT4xP2EtMTowKSxoPTE7aDxhO2grKylkW2gtMV09YXJndW1lbnRzW2hdO3RoaXMuY29tbWFuZEV4ZWN1dG9yLmV4ZWN1dGUobCwuLi5kKX1wcmVwYXJlTWVudUl0ZW1zKCl7dGhpcy5pdGVtc0ZhY3Rvcnk9bmV3IHlnZSh0aGlzLmhvdCxERi5ERUZBVUxU'@;
put 'X0lURU1TKTtjb25zdCBsPXRoaXMuaG90LmdldFNldHRpbmdzKClbQVRdLGE9e2l0ZW1zOnRoaXMuaXRlbXNGYWN0b3J5LmdldEl0ZW1zKGwpfTt0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJDb250ZXh0TWVudURlZmF1bHRPcHRpb25zIixhKSx0aGlzLml0ZW1zRmFjdG9yeS5zZXRQcmVkZWZp'@;
put 'bmVkSXRlbXMoYS5pdGVtcyk7Y29uc3QgZD10aGlzLml0ZW1zRmFjdG9yeS5nZXRJdGVtcyhsKTt0aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlQ29udGV4dE1lbnVTZXRJdGVtcyIsZCksdGhpcy5tZW51LnNldE1lbnVJdGVtcyhkKSxZbihkLGg9PnRoaXMuY29tbWFuZEV4ZWN1dG9yLnJlZ2lz'@;
put 'dGVyQ29tbWFuZChoLmtleSxoKSl9ZGVzdHJveSgpe3RoaXMuY2xvc2UoKSx0aGlzLm1lbnUmJnRoaXMubWVudS5kZXN0cm95KCksc3VwZXIuZGVzdHJveSgpfX1mdW5jdGlvbiBoMHQoYyl7Y29uc3QgbD10aGlzLmhvdC5nZXRTZXR0aW5ncygpLGE9bC5yb3dIZWFkZXJzLGQ9bC5jb2xIZWFk'@;
put 'ZXJzLGY9Yy50YXJnZXQ7aWYodGhpcy5jbG9zZSgpLHBvKGYsImhhbmRzb250YWJsZUlucHV0Iil8fChjLnByZXZlbnREZWZhdWx0KCksYy5zdG9wUHJvcGFnYXRpb24oKSwhKGF8fGR8fGZ1bmN0aW9uIGgoTSl7cmV0dXJuIlREIj09PU0ubm9kZU5hbWV8fCJURCI9PT1NLnBhcmVudE5vZGUu'@;
put 'bm9kZU5hbWV9KGYpfHxwbyhmLCJjdXJyZW50IikmJnBvKGYsInd0Qm9yZGVyIikpKSlyZXR1cm47Y29uc3Qgdj1mRih0aGlzLm1lbnUuY29udGFpbmVyLHRoaXMuaG90LnJvb3REb2N1bWVudCk7dGhpcy5vcGVuKHt0b3A6Yy5jbGllbnRZK3YudG9wLGxlZnQ6Yy5jbGllbnRYK3YubGVmdH0p'@;
put 'fWZ1bmN0aW9uIGYwdCgpe3RoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVDb250ZXh0TWVudVNob3ciLHRoaXMpfWZ1bmN0aW9uIHAwdCgpe3RoaXMuaG90LnJ1bkhvb2tzKCJhZnRlckNvbnRleHRNZW51U2hvdyIsdGhpcyl9ZnVuY3Rpb24gZzB0KCl7dGhpcy5ob3QubGlzdGVuKCksdGhpcy5o'@;
put 'b3QucnVuSG9va3MoImFmdGVyQ29udGV4dE1lbnVIaWRlIix0aGlzKX1ERi5TRVBBUkFUT1I9e25hbWU6c3N9O2NsYXNzIHcwdHtjb25zdHJ1Y3Rvcigpe3RoaXMuZGF0YT17fX1zZXREYXRhKGwsYSl7dGhpcy5kYXRhW2xdPWF9Z2V0RGF0YShsKXtyZXR1cm4gdGhpcy5kYXRhW2xdfHx2b2lk'@;
put 'IDB9fWNsYXNzIEMwdHtjb25zdHJ1Y3Rvcigpe3RoaXMuY2xpcGJvYXJkRGF0YT1uZXcgdzB0fXByZXZlbnREZWZhdWx0KCl7fWNvbXBvc2VkUGF0aCgpe3JldHVybltdfX1mdW5jdGlvbiBYXyhjLGwsYSl7a2dlKGMsbCksbC5zZXQoYyxhKX1mdW5jdGlvbiBrZ2UoYyxsKXtpZihsLmhhcyhj'@;
put 'KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfWZ1bmN0aW9uIEoxKGMsbCl7cmV0dXJuIGMuZ2V0KFFfKGMsbCkpfWZ1bmN0aW9uIEpfKGMsbCxhKXtyZXR1cm4gYy5zZXQoUV8oYyxs'@;
put 'KSxhKSxhfWZ1bmN0aW9uIFFfKGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX12'@;
put 'YXIgdDY9bmV3IFdlYWtNYXAsTko9bmV3IFdlYWtNYXAsRFQ9bmV3IFdlYWtNYXAsVko9bmV3IFdlYWtNYXAsQko9bmV3IFdlYWtNYXAsSVQ9bmV3IFdlYWtNYXAsUlQ9bmV3IFdlYWtTZXQ7Y2xhc3MgTTB0e2NvbnN0cnVjdG9yKGwpe2xldHtjb3VudFJvd3M6YSxjb3VudENvbHVtbnM6ZCxy'@;
put 'b3dzTGltaXQ6aCxjb2x1bW5zTGltaXQ6Zixjb3VudENvbHVtbkhlYWRlcnM6dn09bDsoZnVuY3Rpb24gUzB0KGMsbCl7a2dlKGMsbCksbC5hZGQoYyl9KSh0aGlzLFJUKSxYXyh0aGlzLHQ2LHZvaWQgMCksWF8odGhpcyxOSix2b2lkIDApLFhfKHRoaXMsRFQsdm9pZCAwKSxYXyh0aGlzLFZK'@;
put 'LHZvaWQgMCksWF8odGhpcyxCSix2b2lkIDApLFhfKHRoaXMsSVQsdm9pZCAwKSxKXyhOSix0aGlzLGEpLEpfKERULHRoaXMsZCksSl8oVkosdGhpcyxoKSxKXyhCSix0aGlzLGYpLEpfKElULHRoaXMsdil9c2V0U2VsZWN0ZWRSYW5nZShsKXtKXyh0Nix0aGlzLGwpfWdldENlbGxzUmFuZ2Uo'@;
put 'KXtpZigwPT09SjEoTkosdGhpcykuY2FsbCh0aGlzKXx8MD09PUoxKERULHRoaXMpLmNhbGwodGhpcykpcmV0dXJuIG51bGw7Y29uc3R7cm93OmwsY29sOmF9PUoxKHQ2LHRoaXMpLmdldFRvcFN0YXJ0Q29ybmVyKCkse3JvdzpkLGNvbDpofT1KMSh0Nix0aGlzKS5nZXRCb3R0b21FbmRDb3Ju'@;
put 'ZXIoKSxmPVFfKFJULHRoaXMseDB0KS5jYWxsKHRoaXMsbCxkKSx2PVFfKFJULHRoaXMsakopLmNhbGwodGhpcyxhLGgpO3JldHVybntpc1JhbmdlVHJpbW1lZDpkIT09Znx8aCE9PXYsc3RhcnRSb3c6bCxzdGFydENvbDphLGVuZFJvdzpmLGVuZENvbDp2fX1nZXRNb3N0Qm90dG9tQ29sdW1u'@;
put 'SGVhZGVyc1JhbmdlKCl7aWYoMD09PUoxKERULHRoaXMpLmNhbGwodGhpcyl8fDA9PT1KMShJVCx0aGlzKS5jYWxsKHRoaXMpKXJldHVybiBudWxsO2NvbnN0e2NvbDpsfT1KMSh0Nix0aGlzKS5nZXRUb3BTdGFydENvcm5lcigpLHtjb2w6YX09SjEodDYsdGhpcykuZ2V0Qm90dG9tRW5kQ29y'@;
put 'bmVyKCksZD1RXyhSVCx0aGlzLGpKKS5jYWxsKHRoaXMsbCxhKTtyZXR1cm57aXNSYW5nZVRyaW1tZWQ6YSE9PWQsc3RhcnRSb3c6LTEsc3RhcnRDb2w6bCxlbmRSb3c6LTEsZW5kQ29sOmR9fWdldEFsbENvbHVtbkhlYWRlcnNSYW5nZSgpe2lmKDA9PT1KMShEVCx0aGlzKS5jYWxsKHRoaXMp'@;
put 'fHwwPT09SjEoSVQsdGhpcykuY2FsbCh0aGlzKSlyZXR1cm4gbnVsbDtjb25zdHtjb2w6bH09SjEodDYsdGhpcykuZ2V0VG9wU3RhcnRDb3JuZXIoKSx7Y29sOmF9PUoxKHQ2LHRoaXMpLmdldEJvdHRvbUVuZENvcm5lcigpLGQ9UV8oUlQsdGhpcyxqSikuY2FsbCh0aGlzLGwsYSk7cmV0dXJu'@;
put 'e2lzUmFuZ2VUcmltbWVkOmEhPT1kLHN0YXJ0Um93Oi1KMShJVCx0aGlzKS5jYWxsKHRoaXMpLHN0YXJ0Q29sOmwsZW5kUm93Oi0xLGVuZENvbDpkfX19ZnVuY3Rpb24gakooYyxsKXtyZXR1cm4gTWF0aC5taW4obCxNYXRoLm1heChjK0oxKEJKLHRoaXMpLmNhbGwodGhpcyktMSxjKSl9ZnVu'@;
put 'Y3Rpb24geDB0KGMsbCl7cmV0dXJuIE1hdGgubWluKGwsTWF0aC5tYXgoYytKMShWSix0aGlzKS5jYWxsKHRoaXMpLTEsYykpfWZ1bmN0aW9uIERnZShjKXtjb25zdCBsPVtdLGE9W107cmV0dXJuIFluKGMsZD0+e0dhKE1hdGgubWluKGQuc3RhcnRSb3csZC5lbmRSb3cpLE1hdGgubWF4KGQu'@;
put 'c3RhcnRSb3csZC5lbmRSb3cpLEQ9PnstMT09PWwuaW5kZXhPZihEKSYmbC5wdXNoKEQpfSksR2EoTWF0aC5taW4oZC5zdGFydENvbCxkLmVuZENvbCksTWF0aC5tYXgoZC5zdGFydENvbCxkLmVuZENvbCksRD0+ey0xPT09YS5pbmRleE9mKEQpJiZhLnB1c2goRCl9KX0pLHtyb3dzOmwsY29s'@;
put 'dW1uczphfX1mdW5jdGlvbiBuNihjLGwsYSl7SWdlKGMsbCksbC5zZXQoYyxhKX1mdW5jdGlvbiBJZ2UoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfWZ1'@;
put 'bmN0aW9uIExUKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBUMHQoYyl7dmFyIGw9ZnVuY3Rpb24gQTB0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRl'@;
put 'ZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4i'@;
put 'c3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31mdW5jdGlvbiBZZChjLGwpe3JldHVybiBjLmdldChHZChjLGwpKX1mdW5j'@;
put 'dGlvbiBwMyhjLGwsYSl7cmV0dXJuIGMuc2V0KEdkKGMsbCksYSksYX1mdW5jdGlvbiBHZChjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50'@;
put 'IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9U2EuZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImFmdGVyQ29weUxpbWl0IiksU2EuZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoIm1vZGlmeUNvcHlhYmxlUmFuZ2UiKSxTYS5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYmVmb3JlQ3V0'@;
put 'IiksU2EuZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImFmdGVyQ3V0IiksU2EuZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImJlZm9yZVBhc3RlIiksU2EuZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImFmdGVyUGFzdGUiKSxTYS5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYmVmb3JlQ29weSIp'@;
put 'LFNhLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJhZnRlckNvcHkiKTtjb25zdCB6Sj0iY29weVBhc3RlIixEMHQ9WyJmcmFnbWVudFNlbGVjdGlvbiJdLFJnZT1bJzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iSGFuZHNvbnRhYmxlIi8+JywnPHN0eWxlIHR5cGU9InRleHQvY3Nz'@;
put 'Ij50ZHt3aGl0ZS1zcGFjZTpub3JtYWx9YnJ7bXNvLWRhdGEtcGxhY2VtZW50OnNhbWUtY2VsbH08L3N0eWxlPiddLmpvaW4oIiIpO3ZhciBVSj1uZXcgV2Vha01hcCxaSj1uZXcgV2Vha01hcCxXSj1uZXcgV2Vha01hcCxldz1uZXcgV2Vha01hcCxJRj1uZXcgV2Vha01hcCxSRj1uZXcgV2Vh'@;
put 'a01hcCx0dz1uZXcgV2Vha01hcCxMRj1uZXcgV2Vha01hcCxGaD1uZXcgV2Vha1NldDtjbGFzcyBJMHQgZXh0ZW5kcyBGc3tjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksZnVuY3Rpb24gRTB0KGMsbCl7SWdlKGMsbCksbC5hZGQoYyl9KHRoaXMsRmgpLExUKHRoaXMsImNvbHVt'@;
put 'bnNMaW1pdCIsMS8wKSxMVCh0aGlzLCJyb3dzTGltaXQiLDEvMCksTFQodGhpcywicGFzdGVNb2RlIiwib3ZlcndyaXRlIiksTFQodGhpcywidWlDb250YWluZXIiLHRoaXMuaG90LnJvb3REb2N1bWVudC5ib2R5KSxuNih0aGlzLFVKLCExKSxuNih0aGlzLFpKLCExKSxuNih0aGlzLFdKLCEx'@;
put 'KSxuNih0aGlzLGV3LCJjZWxscy1vbmx5IiksbjYodGhpcyxJRiwhMSksbjYodGhpcyxSRiwhMSksbjYodGhpcyx0dyxuZXcgTTB0KHtjb3VudFJvd3M6KCk9PnRoaXMuaG90LmNvdW50Um93cygpLGNvdW50Q29sdW1uczooKT0+dGhpcy5ob3QuY291bnRDb2xzKCkscm93c0xpbWl0OigpPT50'@;
put 'aGlzLnJvd3NMaW1pdCxjb2x1bW5zTGltaXQ6KCk9PnRoaXMuY29sdW1uc0xpbWl0LGNvdW50Q29sdW1uSGVhZGVyczooKT0+dGhpcy5ob3Qudmlldy5nZXRDb2x1bW5IZWFkZXJzQ291bnQoKX0pKSxuNih0aGlzLExGLCExKSxMVCh0aGlzLCJjb3B5YWJsZVJhbmdlcyIsW10pfXN0YXRpYyBn'@;
put 'ZXQgUExVR0lOX0tFWSgpe3JldHVybiB6Sn1zdGF0aWMgZ2V0IFNFVFRJTkdfS0VZUygpe3JldHVyblt6SiwuLi5EMHRdfXN0YXRpYyBnZXQgUExVR0lOX1BSSU9SSVRZKCl7cmV0dXJuIDgwfXN0YXRpYyBnZXQgREVGQVVMVF9TRVRUSU5HUygpe3JldHVybntwYXN0ZU1vZGU6Im92ZXJ3cml0'@;
put 'ZSIscm93c0xpbWl0OjEvMCxjb2x1bW5zTGltaXQ6MS8wLGNvcHlDb2x1bW5IZWFkZXJzOiExLGNvcHlDb2x1bW5Hcm91cEhlYWRlcnM6ITEsY29weUNvbHVtbkhlYWRlcnNPbmx5OiExfX1pc0VuYWJsZWQoKXtyZXR1cm4hIXRoaXMuaG90LmdldFNldHRpbmdzKClbekpdfWVuYWJsZVBsdWdp'@;
put 'bigpe3ZhciBsLGEsZD10aGlzO3RoaXMuZW5hYmxlZHx8KHRoaXMucGFzdGVNb2RlPW51bGwhPT0obD10aGlzLmdldFNldHRpbmcoInBhc3RlTW9kZSIpKSYmdm9pZCAwIT09bD9sOnRoaXMucGFzdGVNb2RlLHRoaXMucm93c0xpbWl0PWlzTmFOKHRoaXMuZ2V0U2V0dGluZygicm93c0xpbWl0'@;
put 'IikpP3RoaXMucm93c0xpbWl0OnRoaXMuZ2V0U2V0dGluZygicm93c0xpbWl0IiksdGhpcy5jb2x1bW5zTGltaXQ9aXNOYU4odGhpcy5nZXRTZXR0aW5nKCJjb2x1bW5zTGltaXQiKSk/dGhpcy5jb2x1bW5zTGltaXQ6dGhpcy5nZXRTZXR0aW5nKCJjb2x1bW5zTGltaXQiKSxwMyhVSix0aGlz'@;
put 'LHRoaXMuZ2V0U2V0dGluZygiY29weUNvbHVtbkhlYWRlcnMiKSkscDMoWkosdGhpcyx0aGlzLmdldFNldHRpbmcoImNvcHlDb2x1bW5Hcm91cEhlYWRlcnMiKSkscDMoV0osdGhpcyx0aGlzLmdldFNldHRpbmcoImNvcHlDb2x1bW5IZWFkZXJzT25seSIpKSx0aGlzLnVpQ29udGFpbmVyPW51'@;
put 'bGwhPT0oYT10aGlzLmdldFNldHRpbmcoInVpQ29udGFpbmVyIikpJiZ2b2lkIDAhPT1hP2E6dGhpcy51aUNvbnRhaW5lcix0aGlzLmFkZEhvb2soImFmdGVyQ29udGV4dE1lbnVEZWZhdWx0T3B0aW9ucyIsaD0+R2QoRmgsdGhpcyxPMHQpLmNhbGwodGhpcyxoKSksdGhpcy5hZGRIb29rKCJh'@;
put 'ZnRlclNlbGVjdGlvbiIsZnVuY3Rpb24oKXtmb3IodmFyIGg9YXJndW1lbnRzLmxlbmd0aCxmPW5ldyBBcnJheShoKSx2PTA7djxoO3YrKylmW3ZdPWFyZ3VtZW50c1t2XTtyZXR1cm4gR2QoRmgsZCxQMHQpLmNhbGwoZCwuLi5mKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJTZWxlY3Rpb25FbmQi'@;
put 'LCgpPT5HZChGaCx0aGlzLEYwdCkuY2FsbCh0aGlzKSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcih0aGlzLmhvdC5yb290RG9jdW1lbnQsImNvcHkiLGZ1bmN0aW9uKCl7cmV0dXJuIGQub25Db3B5KC4uLmFyZ3VtZW50cyl9KSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVu'@;
put 'dExpc3RlbmVyKHRoaXMuaG90LnJvb3REb2N1bWVudCwiY3V0IixmdW5jdGlvbigpe3JldHVybiBkLm9uQ3V0KC4uLmFyZ3VtZW50cyl9KSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKHRoaXMuaG90LnJvb3REb2N1bWVudCwicGFzdGUiLGZ1bmN0aW9uKCl7cmV0dXJuIGQu'@;
put 'b25QYXN0ZSguLi5hcmd1bWVudHMpfSksQUUoKSYmKHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIodGhpcy5ob3Qucm9vdERvY3VtZW50LmJvZHksIm1vdXNlZW50ZXIiLGZ1bmN0aW9uKCl7Zm9yKHZhciBoPWFyZ3VtZW50cy5sZW5ndGgsZj1uZXcgQXJyYXkoaCksdj0wO3Y8'@;
put 'aDt2KyspZlt2XT1hcmd1bWVudHNbdl07cmV0dXJuIEdkKEZoLGQsSDB0KS5jYWxsKGQsLi4uZil9KSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKHRoaXMuaG90LnJvb3REb2N1bWVudC5ib2R5LCJtb3VzZWxlYXZlIixmdW5jdGlvbigpe2Zvcih2YXIgaD1hcmd1bWVudHMu'@;
put 'bGVuZ3RoLGY9bmV3IEFycmF5KGgpLHY9MDt2PGg7disrKWZbdl09YXJndW1lbnRzW3ZdO3JldHVybiBHZChGaCxkLE4wdCkuY2FsbChkLC4uLmYpfSksdGhpcy5hZGRIb29rKCJhZnRlclNlbGVjdGlvbiIsKCk9PkdkKEZoLHRoaXMsVjB0KS5jYWxsKHRoaXMpKSksc3VwZXIuZW5hYmxlUGx1'@;
put 'Z2luKCkpfXVwZGF0ZVBsdWdpbigpe3RoaXMuZGlzYWJsZVBsdWdpbigpLHRoaXMuZW5hYmxlUGx1Z2luKCksc3VwZXIudXBkYXRlUGx1Z2luKCl9ZGlzYWJsZVBsdWdpbigpe3N1cGVyLmRpc2FibGVQbHVnaW4oKX1jb3B5KCl7cDMoZXcsdGhpcyxhcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQg'@;
put 'MCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06ImNlbGxzLW9ubHkiKSxwMyhJRix0aGlzLCEwKSxHZChGaCx0aGlzLExnZSkuY2FsbCh0aGlzLCJjb3B5Iil9Y29weUNlbGxzT25seSgpe3RoaXMuY29weSgiY2VsbHMtb25seSIpfWNvcHlDb2x1bW5IZWFkZXJzT25seSgpe3RoaXMuY29w'@;
put 'eSgiY29sdW1uLWhlYWRlcnMtb25seSIpfWNvcHlXaXRoQWxsQ29sdW1uSGVhZGVycygpe3RoaXMuY29weSgid2l0aC1jb2x1bW4tZ3JvdXAtaGVhZGVycyIpfWNvcHlXaXRoQ29sdW1uSGVhZGVycygpe3RoaXMuY29weSgid2l0aC1jb2x1bW4taGVhZGVycyIpfWN1dCgpe3AzKFJGLHRoaXMs'@;
put 'ITApLEdkKEZoLHRoaXMsTGdlKS5jYWxsKHRoaXMsImN1dCIpfWdldFJhbmdlZENvcHlhYmxlRGF0YShsKXtyZXR1cm4gclQodGhpcy5nZXRSYW5nZWREYXRhKGwpKX1nZXRSYW5nZWREYXRhKGwpe2NvbnN0IGE9W10se3Jvd3M6ZCxjb2x1bW5zOmh9PURnZShsKTtyZXR1cm4gWW4oZCxmPT57'@;
put 'Y29uc3Qgdj1bXTtZbihoLE09Pnt2LnB1c2goZjwwP3RoaXMuaG90LmdldENvbEhlYWRlcihNLGYpOnRoaXMuaG90LmdldENvcHlhYmxlRGF0YShmLE0pKX0pLGEucHVzaCh2KX0pLGF9cGFzdGUoKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1'@;
put 'bWVudHNbMF06IiIsYT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06bDtpZighbCYmIWEpcmV0dXJuO2NvbnN0IGQ9bmV3IEMwdDtsJiZkLmNsaXBib2FyZERhdGEuc2V0RGF0YSgidGV4dC9wbGFpbiIsbCksYSYmZC5jbGlwYm9hcmREYXRh'@;
put 'LnNldERhdGEoInRleHQvaHRtbCIsYSksdGhpcy5vblBhc3RlKGQpfXNldENvcHlhYmxlVGV4dCgpe2NvbnN0IGw9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKTtpZighbClyZXR1cm47aWYobC5pc1NpbmdsZUhlYWRlcigpKXJldHVybiB2b2lkKHRoaXMuY29weWFibGVSYW5nZXM9'@;
put 'W10pO1lkKHR3LHRoaXMpLnNldFNlbGVjdGVkUmFuZ2UobCk7Y29uc3QgYT1uZXcgTWFwKFtbImhlYWRlcnMiLG51bGxdLFsiY2VsbHMiLG51bGxdXSk7ImNvbHVtbi1oZWFkZXJzLW9ubHkiPT09WWQoZXcsdGhpcyk/YS5zZXQoImhlYWRlcnMiLFlkKHR3LHRoaXMpLmdldE1vc3RCb3R0b21D'@;
put 'b2x1bW5IZWFkZXJzUmFuZ2UoKSk6KCJ3aXRoLWNvbHVtbi1oZWFkZXJzIj09PVlkKGV3LHRoaXMpP2Euc2V0KCJoZWFkZXJzIixZZCh0dyx0aGlzKS5nZXRNb3N0Qm90dG9tQ29sdW1uSGVhZGVyc1JhbmdlKCkpOiJ3aXRoLWNvbHVtbi1ncm91cC1oZWFkZXJzIj09PVlkKGV3LHRoaXMpJiZh'@;
put 'LnNldCgiaGVhZGVycyIsWWQodHcsdGhpcykuZ2V0QWxsQ29sdW1uSGVhZGVyc1JhbmdlKCkpLGEuc2V0KCJjZWxscyIsWWQodHcsdGhpcykuZ2V0Q2VsbHNSYW5nZSgpKSksdGhpcy5jb3B5YWJsZVJhbmdlcz1BcnJheS5mcm9tKGEudmFsdWVzKCkpLmZpbHRlcihoPT5udWxsIT09aCkubWFw'@;
put 'KGg9PntsZXR7c3RhcnRSb3c6ZixzdGFydENvbDp2LGVuZFJvdzpNLGVuZENvbDpEfT1oO3JldHVybntzdGFydFJvdzpmLHN0YXJ0Q29sOnYsZW5kUm93Ok0sZW5kQ29sOkR9fSksdGhpcy5jb3B5YWJsZVJhbmdlcz10aGlzLmhvdC5ydW5Ib29rcygibW9kaWZ5Q29weWFibGVSYW5nZSIsdGhp'@;
put 'cy5jb3B5YWJsZVJhbmdlcyk7Y29uc3QgZD1hLmdldCgiY2VsbHMiKTtpZihudWxsIT09ZCYmZC5pc1JhbmdlVHJpbW1lZCl7Y29uc3R7c3RhcnRSb3c6aCxzdGFydENvbDpmLGVuZFJvdzp2LGVuZENvbDpNfT1kO3RoaXMuaG90LnJ1bkhvb2tzKCJhZnRlckNvcHlMaW1pdCIsdi1oKzEsTS1m'@;
put 'KzEsdGhpcy5yb3dzTGltaXQsdGhpcy5jb2x1bW5zTGltaXQpfX1pc0VkaXRvck9wZW5lZCgpe3ZhciBsO3JldHVybiBudWxsPT09KGw9dGhpcy5ob3QuZ2V0QWN0aXZlRWRpdG9yKCkpfHx2b2lkIDA9PT1sP3ZvaWQgMDpsLmlzT3BlbmVkKCl9cG9wdWxhdGVWYWx1ZXMobCl7bGV0IGE9YXJn'@;
put 'dW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCk7aWYoIWwubGVuZ3RoKXJldHVybjtjb25zdCBkPWwubGVuZ3RoLGg9bFswXS5sZW5ndGgsZj1bXSx7cm93OnYsY29sOk19PWEuZ2V0VG9wU3Rh'@;
put 'cnRDb3JuZXIoKSx7cm93OkQsY29sOlp9PWEuZ2V0Qm90dG9tRW5kQ29ybmVyKCk7bGV0IHJlPXYsY2U9TSxiZT12LEVlPU07Zm9yKDtmLmxlbmd0aDxkfHxyZTw9RDspe2NvbnN0e3NraXBSb3dPblBhc3RlOkJlLHZpc3VhbFJvdzpxZX09dGhpcy5ob3QuZ2V0Q2VsbE1ldGEocmUsTSk7aWYo'@;
put 'cmU9cWUrMSwhMD09PUJlKWNvbnRpbnVlO2JlPXFlLGNlPU07Y29uc3QgcnQ9W10scHQ9Zi5sZW5ndGglZDtmb3IoO3J0Lmxlbmd0aDxofHxjZTw9Wjspe2NvbnN0e3NraXBDb2x1bW5PblBhc3RlOmR0LHZpc3VhbENvbDpKdH09dGhpcy5ob3QuZ2V0Q2VsbE1ldGEodixjZSk7KGNlPUp0KzEs'@;
put 'ITAhPT1kdCkmJihFZT1KdCxydC5wdXNoKGxbcHRdW3J0Lmxlbmd0aCVoXSkpfWYucHVzaChydCl9cmV0dXJuIHAzKExGLHRoaXMsITApLHRoaXMuaG90LnBvcHVsYXRlRnJvbUFycmF5KHYsTSxmLHZvaWQgMCx2b2lkIDAsIkNvcHlQYXN0ZS5wYXN0ZSIsdGhpcy5wYXN0ZU1vZGUpLFt2LE0s'@;
put 'YmUsRWVdfW9uQ29weShsKXtjb25zdCBhPWwuY29tcG9zZWRQYXRoKClbMF0sZD10aGlzLmhvdC5nZXRGb2N1c01hbmFnZXIoKS5nZXRSZWZvY3VzRWxlbWVudCgpLGg9YT8uaGFzQXR0cmlidXRlKCJkYXRhLWhvdC1pbnB1dCIpO2lmKCF0aGlzLmhvdC5pc0xpc3RlbmluZygpJiYhWWQoSUYs'@;
put 'dGhpcyl8fHRoaXMuaXNFZGl0b3JPcGVuZWQoKXx8RXAoYSkmJihoJiZhIT09ZHx8IWgmJmEhPT10aGlzLmhvdC5yb290RG9jdW1lbnQuYm9keSYmIXZFKGEsdGhpcy5ob3Qucm9vdEVsZW1lbnQpKSlyZXR1cm47bC5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuc2V0Q29weWFibGVUZXh0KCkscDMo'@;
put 'SUYsdGhpcywhMSk7Y29uc3QgZj10aGlzLmdldFJhbmdlZERhdGEodGhpcy5jb3B5YWJsZVJhbmdlcyksdj1HZChGaCx0aGlzLFIwdCkuY2FsbCh0aGlzLHRoaXMuY29weWFibGVSYW5nZXMpO2lmKHRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVDb3B5IixmLHRoaXMuY29weWFibGVSYW5nZXMs'@;
put 'dikpe2NvbnN0IEQ9clQoZik7aWYobCYmbC5jbGlwYm9hcmREYXRhKXtjb25zdCBaPXEkKGYpO2wuY2xpcGJvYXJkRGF0YS5zZXREYXRhKCJ0ZXh0L3BsYWluIixEKSxsLmNsaXBib2FyZERhdGEuc2V0RGF0YSgidGV4dC9odG1sIixbUmdlLFpdLmpvaW4oIiIpKX1lbHNlIHR5cGVvZiBDbGlw'@;
put 'Ym9hcmRFdmVudD4idSImJnRoaXMuaG90LnJvb3RXaW5kb3cuY2xpcGJvYXJkRGF0YS5zZXREYXRhKCJUZXh0IixEKTt0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJDb3B5IixmLHRoaXMuY29weWFibGVSYW5nZXMsdil9cDMoZXcsdGhpcywiY2VsbHMtb25seSIpfW9uQ3V0KGwpe2NvbnN0IGE9'@;
put 'bC5jb21wb3NlZFBhdGgoKVswXSxkPXRoaXMuaG90LmdldEZvY3VzTWFuYWdlcigpLmdldFJlZm9jdXNFbGVtZW50KCksaD1hPy5oYXNBdHRyaWJ1dGUoImRhdGEtaG90LWlucHV0Iik7aWYoIXRoaXMuaG90LmlzTGlzdGVuaW5nKCkmJiFZZChSRix0aGlzKXx8dGhpcy5pc0VkaXRvck9wZW5l'@;
put 'ZCgpfHxFcChhKSYmKGgmJmEhPT1kfHwhaCYmYSE9PXRoaXMuaG90LnJvb3REb2N1bWVudC5ib2R5JiYhdkUoYSx0aGlzLmhvdC5yb290RWxlbWVudCkpKXJldHVybjtsLnByZXZlbnREZWZhdWx0KCksdGhpcy5zZXRDb3B5YWJsZVRleHQoKSxwMyhSRix0aGlzLCExKTtjb25zdCBmPXRoaXMu'@;
put 'Z2V0UmFuZ2VkRGF0YSh0aGlzLmNvcHlhYmxlUmFuZ2VzKTtpZih0aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlQ3V0IixmLHRoaXMuY29weWFibGVSYW5nZXMpKXtjb25zdCBNPXJUKGYpO2lmKGwmJmwuY2xpcGJvYXJkRGF0YSl7Y29uc3QgRD1xJChmKTtsLmNsaXBib2FyZERhdGEuc2V0RGF0'@;
put 'YSgidGV4dC9wbGFpbiIsTSksbC5jbGlwYm9hcmREYXRhLnNldERhdGEoInRleHQvaHRtbCIsW1JnZSxEXS5qb2luKCIiKSl9ZWxzZSB0eXBlb2YgQ2xpcGJvYXJkRXZlbnQ+InUiJiZ0aGlzLmhvdC5yb290V2luZG93LmNsaXBib2FyZERhdGEuc2V0RGF0YSgiVGV4dCIsTSk7dGhpcy5ob3Qu'@;
put 'ZW1wdHlTZWxlY3RlZENlbGxzKCJDb3B5UGFzdGUuY3V0IiksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyQ3V0IixmLHRoaXMuY29weWFibGVSYW5nZXMpfX1vblBhc3RlKGwpe2NvbnN0IGE9bC5jb21wb3NlZFBhdGgoKVswXSxkPXRoaXMuaG90LmdldEZvY3VzTWFuYWdlcigpLmdldFJlZm9j'@;
put 'dXNFbGVtZW50KCksaD1hPy5oYXNBdHRyaWJ1dGUoImRhdGEtaG90LWlucHV0Iik7aWYoIXRoaXMuaG90LmlzTGlzdGVuaW5nKCl8fHRoaXMuaXNFZGl0b3JPcGVuZWQoKXx8IXRoaXMuaG90LmdldFNlbGVjdGVkKCl8fEVwKGEpJiYoaCYmYSE9PWR8fCFoJiZhIT09dGhpcy5ob3Qucm9vdERv'@;
put 'Y3VtZW50LmJvZHkmJiF2RShhLHRoaXMuaG90LnJvb3RFbGVtZW50KSkpcmV0dXJuO2xldCBmO2lmKGwucHJldmVudERlZmF1bHQoKSxsJiZ0eXBlb2YgbC5jbGlwYm9hcmREYXRhPCJ1Iil7Y29uc3QgcmU9SU8obC5jbGlwYm9hcmREYXRhLmdldERhdGEoInRleHQvaHRtbCIpLHtBRERfVEFH'@;
put 'UzpbIm1ldGEiXSxBRERfQVRUUjpbImNvbnRlbnQiXSxGT1JDRV9CT0RZOiEwfSk7Zj1yZSYmLyg8dGFibGUpfCg8VEFCTEUpL2cudGVzdChyZSk/YmZlKHJlLHRoaXMuaG90LnJvb3REb2N1bWVudCkuZGF0YTpsLmNsaXBib2FyZERhdGEuZ2V0RGF0YSgidGV4dC9wbGFpbiIpfWVsc2UgdHlw'@;
put 'ZW9mIENsaXBib2FyZEV2ZW50PiJ1IiYmdHlwZW9mIHRoaXMuaG90LnJvb3RXaW5kb3cuY2xpcGJvYXJkRGF0YTwidSImJihmPXRoaXMuaG90LnJvb3RXaW5kb3cuY2xpcGJvYXJkRGF0YS5nZXREYXRhKCJUZXh0IikpO2lmKCJzdHJpbmciPT10eXBlb2YgZiYmKGY9ZnVuY3Rpb24gRHJ0KGMp'@;
put 'e2NvbnN0IGw9W1siIl1dO2lmKDA9PT1jLmxlbmd0aClyZXR1cm4gbDtsZXQgaCxhPTAsZD0wO2Zvcig7Yy5sZW5ndGg+MCYmaCE9PWMubGVuZ3RoOylpZihoPWMubGVuZ3RoLGMubWF0Y2gocHBlKSljPWMucmVwbGFjZShwcGUsIiIpLGErPTEsbFtkXVthXT0iIjtlbHNlIGlmKGMubWF0Y2go'@;
put 'ZnBlKSljPWMucmVwbGFjZShmcGUsIiIpLGE9MCxkKz0xLGxbZF09WyIiXTtlbHNle2xldCBmPSIiO2lmKGMuc3RhcnRzV2l0aCgnIicpKXtsZXQgdj0wLE09ITA7Zm9yKDtNOyl7Y29uc3QgRD1jLnNsaWNlKDAsMSk7JyInPT09RCYmKHYrPTEpLGYrPUQsKDA9PT0oYz1jLnNsaWNlKDEpKS5s'@;
put 'ZW5ndGh8fGMubWF0Y2goL15bXHRcclxuXS8pJiZ2JTI9PTApJiYoTT0hMSl9Zj1mLnJlcGxhY2UoL14iLywiIikucmVwbGFjZSgvIiQvLCIiKS5yZXBsYWNlKC9bIl0qL2csRD0+bmV3IEFycmF5KE1hdGguZmxvb3IoRC5sZW5ndGgvMikpLmZpbGwoJyInKS5qb2luKCIiKSl9ZWxzZXtjb25z'@;
put 'dCB2PWMubWF0Y2goa3J0KTtmPXY/dlswXToiIixjPWMuc2xpY2UoZi5sZW5ndGgpfWxbZF1bYV09Zn1yZXR1cm4gbH0oZikpLHZvaWQgMD09PWZ8fGYmJjA9PT1mLmxlbmd0aHx8ITE9PT10aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlUGFzdGUiLGYsdGhpcy5jb3B5YWJsZVJhbmdlcykpcmV0'@;
put 'dXJuO2NvbnN0W3YsTSxELFpdPXRoaXMucG9wdWxhdGVWYWx1ZXMoZik7dGhpcy5ob3Quc2VsZWN0Q2VsbCh2LE0sTWF0aC5taW4odGhpcy5ob3QuY291bnRSb3dzKCktMSxEKSxNYXRoLm1pbih0aGlzLmhvdC5jb3VudENvbHMoKS0xLFopKSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJQYXN0'@;
put 'ZSIsZix0aGlzLmNvcHlhYmxlUmFuZ2VzKX1kZXN0cm95KCl7c3VwZXIuZGVzdHJveSgpfX1mdW5jdGlvbiBMZ2UoYyl7aWYoQUUoKSl7Y29uc3QgbD10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpO2lmKGwpe2NvbnN0e3JvdzphLGNvbDpkfT1sLmhpZ2hsaWdodCxoPXRoaXMuaG90'@;
put 'LmdldENlbGwoYSxkLCEwKTtoJiZaMmUoaCwoKT0+e3RoaXMuaG90LnJvb3REb2N1bWVudC5leGVjQ29tbWFuZChjKX0pfX1lbHNlIHRoaXMuaG90LnJvb3REb2N1bWVudC5leGVjQ29tbWFuZChjKX1mdW5jdGlvbiBSMHQoYyl7Y29uc3R7cm93czpsfT1EZ2UoYyk7bGV0IGE9MDtmb3IobGV0'@;
put 'IGQ9MDtkPGwubGVuZ3RoJiYhKGxbZF0+PTApO2QrKylhKz0xO3JldHVybntjb2x1bW5IZWFkZXJzQ291bnQ6YX19ZnVuY3Rpb24gTDB0KCl7aWYodGhpcy5ob3QuaXNMaXN0ZW5pbmcoKSl7Y29uc3QgYz10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpO2lmKGMpe2NvbnN0e3Jvdzps'@;
put 'LGNvbDphfT1jLmhpZ2hsaWdodCxkPXRoaXMuaG90LmdldENlbGwobCxhLCEwKTtkJiZrJChkKX19fWZ1bmN0aW9uIE9nZSgpe2lmKHRoaXMuaG90LmlzTGlzdGVuaW5nKCkpe2NvbnN0IGM9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKTtpZihjKXtjb25zdHtyb3c6bCxjb2w6YX09'@;
put 'Yy5oaWdobGlnaHQsZD10aGlzLmhvdC5nZXRDZWxsKGwsYSwhMCk7bnVsbCE9ZCYmZC5oYXNBdHRyaWJ1dGUoImNvbnRlbnRlZGl0YWJsZSIpJiZEJChkKX19fWZ1bmN0aW9uIE8wdChjKXtjLml0ZW1zLnB1c2goe25hbWU6Ii0tLS0tLS0tLSJ9LGZ1bmN0aW9uIG0wdChjKXtyZXR1cm57a2V5'@;
put 'OiJjb3B5IixuYW1lKCl7cmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShycSl9LGNhbGxiYWNrKCl7Yy5jb3B5Q2VsbHNPbmx5KCl9LGRpc2FibGVkKCl7aWYoMD09PXRoaXMuY291bnRSb3dzKCl8fDA9PT10aGlzLmNvdW50Q29scygpKXJldHVybiEwO2NvbnN0IGw9dGhpcy5nZXRT'@;
put 'ZWxlY3RlZFJhbmdlTGFzdCgpO2lmKCFsfHxsLmlzU2luZ2xlSGVhZGVyKCkpcmV0dXJuITA7Y29uc3QgYT10aGlzLmdldFNlbGVjdGVkKCk7cmV0dXJuIWF8fGEubGVuZ3RoPjF9LGhpZGRlbjohMX19KHRoaXMpKSxZZChVSix0aGlzKSYmYy5pdGVtcy5wdXNoKGZ1bmN0aW9uIHkwdChjKXty'@;
put 'ZXR1cm57a2V5OiJjb3B5X3dpdGhfY29sdW1uX2hlYWRlcnMiLG5hbWUoKXtjb25zdCBsPXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSxhPWw/a3MobC5nZXRXaWR0aCgpLTEsMCwxKTowO3JldHVybiB0aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UoaXEsYSl9LGNhbGxiYWNrKCl7Yy5jb3B5'@;
put 'V2l0aENvbHVtbkhlYWRlcnMoKX0sZGlzYWJsZWQoKXtpZighdGhpcy5oYXNDb2xIZWFkZXJzKCkpcmV0dXJuITA7Y29uc3QgbD10aGlzLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCk7aWYoIWx8fGwuaXNTaW5nbGVIZWFkZXIoKSlyZXR1cm4hMDtjb25zdCBhPXRoaXMuZ2V0U2VsZWN0ZWQoKTty'@;
put 'ZXR1cm4hYXx8YS5sZW5ndGg+MX0saGlkZGVuOiExfX0odGhpcykpLFlkKFpKLHRoaXMpJiZjLml0ZW1zLnB1c2goZnVuY3Rpb24gYjB0KGMpe3JldHVybntrZXk6ImNvcHlfd2l0aF9jb2x1bW5fZ3JvdXBfaGVhZGVycyIsbmFtZSgpe2NvbnN0IGw9dGhpcy5nZXRTZWxlY3RlZFJhbmdlTGFz'@;
put 'dCgpLGE9bD9rcyhsLmdldFdpZHRoKCktMSwwLDEpOjA7cmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShhcSxhKX0sY2FsbGJhY2soKXtjLmNvcHlXaXRoQWxsQ29sdW1uSGVhZGVycygpfSxkaXNhYmxlZCgpe2lmKCF0aGlzLmhhc0NvbEhlYWRlcnMoKXx8IXRoaXMuZ2V0U2V0dGlu'@;
put 'Z3MoKS5uZXN0ZWRIZWFkZXJzKXJldHVybiEwO2NvbnN0IGw9dGhpcy5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpO2lmKCFsfHxsLmlzU2luZ2xlSGVhZGVyKCkpcmV0dXJuITA7Y29uc3QgYT10aGlzLmdldFNlbGVjdGVkKCk7cmV0dXJuIWF8fGEubGVuZ3RoPjF9LGhpZGRlbjohMX19KHRoaXMp'@;
put 'KSxZZChXSix0aGlzKSYmYy5pdGVtcy5wdXNoKGZ1bmN0aW9uIHYwdChjKXtyZXR1cm57a2V5OiJjb3B5X2NvbHVtbl9oZWFkZXJzX29ubHkiLG5hbWUoKXtjb25zdCBsPXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSxhPWw/a3MobC5nZXRXaWR0aCgpLTEsMCwxKTowO3JldHVybiB0aGlz'@;
put 'LmdldFRyYW5zbGF0ZWRQaHJhc2Uob3EsYSl9LGNhbGxiYWNrKCl7Yy5jb3B5Q29sdW1uSGVhZGVyc09ubHkoKX0sZGlzYWJsZWQoKXtpZighdGhpcy5oYXNDb2xIZWFkZXJzKCkpcmV0dXJuITA7Y29uc3QgbD10aGlzLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCk7aWYoIWx8fGwuaXNTaW5nbGVI'@;
put 'ZWFkZXIoKSlyZXR1cm4hMDtjb25zdCBhPXRoaXMuZ2V0U2VsZWN0ZWQoKTtyZXR1cm4hYXx8YS5sZW5ndGg+MX0saGlkZGVuOiExfX0odGhpcykpLGMuaXRlbXMucHVzaChmdW5jdGlvbiBfMHQoYyl7cmV0dXJue2tleToiY3V0IixuYW1lKCl7cmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFBo'@;
put 'cmFzZShzcSl9LGNhbGxiYWNrKCl7Yy5jdXQoKX0sZGlzYWJsZWQoKXtpZigwPT09dGhpcy5jb3VudFJvd3MoKXx8MD09PXRoaXMuY291bnRDb2xzKCkpcmV0dXJuITA7Y29uc3QgbD10aGlzLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCk7aWYoIWx8fGwuaXNTaW5nbGVIZWFkZXIoKSlyZXR1cm4h'@;
put 'MDtjb25zdCBhPXRoaXMuZ2V0U2VsZWN0ZWQoKTtyZXR1cm4hYXx8YS5sZW5ndGg+MX0saGlkZGVuOiExfX0odGhpcykpfWZ1bmN0aW9uIFAwdChjLGwsYSxkLGgpe1lkKExGLHRoaXMpJiYoaC52YWx1ZT0hMCkscDMoTEYsdGhpcywhMSl9ZnVuY3Rpb24gRjB0KCl7dGhpcy5pc0VkaXRvck9w'@;
put 'ZW5lZCgpfHx0aGlzLmhvdC5nZXRTZXR0aW5ncygpLmZyYWdtZW50U2VsZWN0aW9ufHx0aGlzLnNldENvcHlhYmxlVGV4dCgpfWZ1bmN0aW9uIEgwdCgpe0dkKEZoLHRoaXMsT2dlKS5jYWxsKHRoaXMpfWZ1bmN0aW9uIE4wdCgpe0dkKEZoLHRoaXMsTDB0KS5jYWxsKHRoaXMpfWZ1bmN0aW9u'@;
put 'IFYwdCgpe0dkKEZoLHRoaXMsT2dlKS5jYWxsKHRoaXMpfWZ1bmN0aW9uIFBnZShjLGwpe3JldHVybmBib3JkZXJfcm93JHtjfWNvbCR7bH1gfWZ1bmN0aW9uIFlKKGMpe3ZhciBsLGE7cmV0dXJuKFBhKGMuc3RhcnQpfHxQYShjLmxlZnQpKSYmKGMuc3RhcnQ9bnVsbCE9PShsPWMuc3RhcnQp'@;
put 'JiZ2b2lkIDAhPT1sP2w6Yy5sZWZ0KSwoUGEoYy5lbmQpfHxQYShjLnJpZ2h0KSkmJihjLmVuZD1udWxsIT09KGE9Yy5lbmQpJiZ2b2lkIDAhPT1hP2E6Yy5yaWdodCksZGVsZXRlIGMubGVmdCxkZWxldGUgYy5yaWdodCxjfWZ1bmN0aW9uIFBUKGMpe3JldHVybiBQYShjLnN0YXJ0KSYmKGMu'@;
put 'bGVmdD1jLnN0YXJ0KSxQYShjLmVuZCkmJihjLnJpZ2h0PWMuZW5kKSxjfWZ1bmN0aW9uIEdKKGMsbCl7cmV0dXJue2lkOlBnZShjLGwpLGJvcmRlcjp7d2lkdGg6MSxjb2xvcjoiIzAwMCIsY29ybmVyVmlzaWJsZTohMX0scm93OmMsY29sOmwsdG9wOntoaWRlOiEwfSxib3R0b206e2hpZGU6'@;
put 'ITB9LHN0YXJ0OntoaWRlOiEwfSxlbmQ6e2hpZGU6ITB9fX1mdW5jdGlvbiBGZyhjLGwpe2xldCBhPSExO3JldHVybiBZbihjLmdldFNlbGVjdGVkUmFuZ2UoKSxkPT57ZC5mb3JBbGwoKGgsZik9PntpZihoPDB8fGY8MClyZXR1cm47Y29uc3Qgdj1jLmdldENlbGxNZXRhKGgsZikuYm9yZGVy'@;
put 'cztpZih2KXtpZighbClyZXR1cm4gYT0hMCwhMTtpZighVHUodltsXSwiaGlkZSIpfHwhMT09PXZbbF0uaGlkZSlyZXR1cm4gYT0hMCwhMX19KX0pLGF9ZnVuY3Rpb24gT0YoYyl7cmV0dXJuYDxzcGFuIGNsYXNzPSJzZWxlY3RlZCI+XHUyNzEzPC9zcGFuPiR7Y31gfWNvbnN0IFowdD1uZXcg'@;
put 'TWFwKFtbImxlZnQiLCJzdGFydCJdLFsicmlnaHQiLCJlbmQiXV0pO2Z1bmN0aW9uIFkwdChjKXtyZXR1cm57a2V5OiJib3JkZXJzOnRvcCIsbmFtZSgpe2xldCBsPXRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZSh4cSk7cmV0dXJuIEZnKHRoaXMsInRvcCIpJiYobD1PRihsKSksbH0sY2FsbGJh'@;
put 'Y2sobCxhKXtjb25zdCBkPUZnKHRoaXMsInRvcCIpO2MucHJlcGFyZUJvcmRlcihhLCJ0b3AiLGQpfX19ZnVuY3Rpb24gRzB0KGMpe2NvbnN0IGw9Yy5ob3QuaXNSdGwoKT8ic3RhcnQiOiJlbmQiO3JldHVybntrZXk6ImJvcmRlcnM6cmlnaHQiLG5hbWUoKXtsZXQgYT10aGlzLmdldFRyYW5z'@;
put 'bGF0ZWRQaHJhc2UoRXEpO3JldHVybiBGZyh0aGlzLGwpJiYoYT1PRihhKSksYX0sY2FsbGJhY2soYSxkKXtjb25zdCBoPUZnKHRoaXMsbCk7Yy5wcmVwYXJlQm9yZGVyKGQsbCxoKX19fWZ1bmN0aW9uICQwdChjKXtyZXR1cm57a2V5OiJib3JkZXJzOmJvdHRvbSIsbmFtZSgpe2xldCBsPXRo'@;
put 'aXMuZ2V0VHJhbnNsYXRlZFBocmFzZShUcSk7cmV0dXJuIEZnKHRoaXMsImJvdHRvbSIpJiYobD1PRihsKSksbH0sY2FsbGJhY2sobCxhKXtjb25zdCBkPUZnKHRoaXMsImJvdHRvbSIpO2MucHJlcGFyZUJvcmRlcihhLCJib3R0b20iLGQpfX19ZnVuY3Rpb24gSzB0KGMpe2NvbnN0IGw9Yy5o'@;
put 'b3QuaXNSdGwoKT8iZW5kIjoic3RhcnQiO3JldHVybntrZXk6ImJvcmRlcnM6bGVmdCIsbmFtZSgpe2xldCBhPXRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShBcSk7cmV0dXJuIEZnKHRoaXMsbCkmJihhPU9GKGEpKSxhfSxjYWxsYmFjayhhLGQpe2NvbnN0IGg9RmcodGhpcyxsKTtjLnByZXBh'@;
put 'cmVCb3JkZXIoZCxsLGgpfX19ZnVuY3Rpb24gcTB0KGMpe3JldHVybntrZXk6ImJvcmRlcnM6bm9fYm9yZGVycyIsbmFtZSgpe3JldHVybiB0aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2Uoa3EpfSxjYWxsYmFjayhsLGEpe2MucHJlcGFyZUJvcmRlcihhLCJub0JvcmRlcnMiKX0sZGlzYWJsZWQo'@;
put 'KXtyZXR1cm4hRmcodGhpcyl9fX1mdW5jdGlvbiBGZ2UoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0'@;
put 'aGlzIG9iamVjdCIpfWNvbnN0IFBGPSJjdXN0b21Cb3JkZXJzIjt2YXIgJEo9bmV3IFdlYWtTZXQ7Y2xhc3MgcjF0IGV4dGVuZHMgRnN7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLGZ1bmN0aW9uIFgwdChjLGwpeyhmdW5jdGlvbiBKMHQoYyxsKXtpZihsLmhhcyhjKSl0aHJv'@;
put 'dyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfSkoYyxsKSxsLmFkZChjKX0odGhpcywkSiksZnVuY3Rpb24gUTB0KGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBlMXQoYyl7dmFyIGw9ZnVuY3Rp'@;
put 'b24gdDF0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVF'@;
put 'cnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0'@;
put 'eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY30odGhpcywic2F2ZWRCb3JkZXJzIixbXSl9c3RhdGljIGdldCBQTFVHSU5fS0VZKCl7cmV0dXJuIFBGfXN0YXRpYyBnZXQgUExVR0lOX1BSSU9SSVRZKCl7cmV0dXJuIDkw'@;
put 'fWlzRW5hYmxlZCgpe3JldHVybiEhdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtQRl19ZW5hYmxlUGx1Z2luKCl7dGhpcy5lbmFibGVkfHwodGhpcy5hZGRIb29rKCJhZnRlckNvbnRleHRNZW51RGVmYXVsdE9wdGlvbnMiLGw9PkZnZSgkSix0aGlzLGkxdCkuY2FsbCh0aGlzLGwpKSx0aGlzLmFk'@;
put 'ZEhvb2soImluaXQiLCgpPT5GZ2UoJEosdGhpcyxhMXQpLmNhbGwodGhpcykpLHN1cGVyLmVuYWJsZVBsdWdpbigpKX1kaXNhYmxlUGx1Z2luKCl7dGhpcy5oaWRlQm9yZGVycygpLHN1cGVyLmRpc2FibGVQbHVnaW4oKX11cGRhdGVQbHVnaW4oKXt0aGlzLmRpc2FibGVQbHVnaW4oKSx0aGlz'@;
put 'LmVuYWJsZVBsdWdpbigpLHRoaXMuY2hhbmdlQm9yZGVyU2V0dGluZ3MoKSxzdXBlci51cGRhdGVQbHVnaW4oKX1zZXRCb3JkZXJzKGwsYSl7bGV0IGQ9WyJ0b3AiLCJib3R0b20iLCJzdGFydCIsImVuZCJdLGg9bnVsbDthJiYodGhpcy5jaGVja1NldHRpbmdzQ29oZXNpb24oW2FdKSxkPU9i'@;
put 'amVjdC5rZXlzKGEpLGg9WUooYSkpO2NvbnN0IHY9ZVQoeF8obCkse2NyZWF0ZUNlbGxDb29yZHM6dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMuYmluZCh0aGlzLmhvdCksY3JlYXRlQ2VsbFJhbmdlOnRoaXMuaG90Ll9jcmVhdGVDZWxsUmFuZ2UuYmluZCh0aGlzLmhvdCl9KTtZbihsLE09'@;
put 'Pnt2KE0pLmZvckFsbCgoRCxaKT0+e1luKGQscmU9Pnt0aGlzLnByZXBhcmVCb3JkZXJGcm9tQ3VzdG9tQWRkZWQoRCxaLGgsZnVuY3Rpb24gVzB0KGMpe3ZhciBsO3JldHVybiBudWxsIT09KGw9WjB0LmdldChjKSkmJnZvaWQgMCE9PWw/bDpjfShyZSkpfSl9KX0pLHRoaXMuaG90LnZpZXcu'@;
put 'cmVuZGVyKCl9Z2V0Qm9yZGVycyhsKXtpZighQXJyYXkuaXNBcnJheShsKSlyZXR1cm4gdGhpcy5zYXZlZEJvcmRlcnM7Y29uc3QgZD1lVCh4XyhsKSx7Y3JlYXRlQ2VsbENvb3Jkczp0aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3Jkcy5iaW5kKHRoaXMuaG90KSxjcmVhdGVDZWxsUmFuZ2U6dGhp'@;
put 'cy5ob3QuX2NyZWF0ZUNlbGxSYW5nZS5iaW5kKHRoaXMuaG90KX0pLGg9W107cmV0dXJuIFluKGwsZj0+e2QoZikuZm9yQWxsKCh2LE0pPT57WW4odGhpcy5zYXZlZEJvcmRlcnMsRD0+e0Qucm93PT09diYmRC5jb2w9PT1NJiZoLnB1c2goUFQoRCkpfSl9KX0pLGh9Y2xlYXJCb3JkZXJzKGwp'@;
put 'e2w/dGhpcy5zZXRCb3JkZXJzKGwpOihZbih0aGlzLnNhdmVkQm9yZGVycyxhPT57dGhpcy5jbGVhckJvcmRlcnNGcm9tU2VsZWN0aW9uU2V0dGluZ3MoYS5pZCksdGhpcy5jbGVhck51bGxDZWxsUmFuZ2UoKSx0aGlzLmhvdC5yZW1vdmVDZWxsTWV0YShhLnJvdyxhLmNvbCwiYm9yZGVycyIp'@;
put 'fSksdGhpcy5zYXZlZEJvcmRlcnMubGVuZ3RoPTApfWluc2VydEJvcmRlckludG9TZXR0aW5ncyhsLGEpe3RoaXMuY2hlY2tTYXZlZEJvcmRlcnMobCl8fHRoaXMuc2F2ZWRCb3JkZXJzLnB1c2gobCk7Y29uc3QgaD10aGlzLmhvdC5fY3JlYXRlQ2VsbFJhbmdlKHRoaXMuaG90Ll9jcmVhdGVD'@;
put 'ZWxsQ29vcmRzKGwucm93LGwuY29sKSk7dGhpcy5jaGVja0N1c3RvbVNlbGVjdGlvbnMobCxoLGEpfHx0aGlzLmhvdC5zZWxlY3Rpb24uaGlnaGxpZ2h0LmFkZEN1c3RvbVNlbGVjdGlvbih7Ym9yZGVyOmwsdmlzdWFsQ2VsbFJhbmdlOmh9KX1wcmVwYXJlQm9yZGVyRnJvbUN1c3RvbUFkZGVk'@;
put 'KGwsYSxkLGgpe2NvbnN0IGY9dGhpcy5ob3QuY291bnRSb3dzKCksdj10aGlzLmhvdC5jb3VudENvbHMoKTtpZihsPj1mfHxhPj12KXJldHVybjtsZXQgTT1HSihsLGEpO2QmJihNPWZ1bmN0aW9uIGowdChjLGwpe3JldHVybiBUdShsLCJib3JkZXIiKSYmbC5ib3JkZXImJihjLmJvcmRlcj1s'@;
put 'LmJvcmRlciksVHUobCwidG9wIikmJlBhKGwudG9wKSYmKGwudG9wPyhxbyhsLnRvcCl8fChsLnRvcD17d2lkdGg6MSxjb2xvcjoiIzAwMCJ9KSxjLnRvcD1sLnRvcCk6KGwudG9wPXtoaWRlOiEwfSxjLnRvcD1sLnRvcCkpLFR1KGwsImJvdHRvbSIpJiZQYShsLmJvdHRvbSkmJihsLmJvdHRv'@;
put 'bT8ocW8obC5ib3R0b20pfHwobC5ib3R0b209e3dpZHRoOjEsY29sb3I6IiMwMDAifSksYy5ib3R0b209bC5ib3R0b20pOihsLmJvdHRvbT17aGlkZTohMH0sYy5ib3R0b209bC5ib3R0b20pKSxUdShsLCJzdGFydCIpJiZQYShsLnN0YXJ0KSYmKGwuc3RhcnQ/KHFvKGwuc3RhcnQpfHwobC5z'@;
put 'dGFydD17d2lkdGg6MSxjb2xvcjoiIzAwMCJ9KSxjLnN0YXJ0PWwuc3RhcnQpOihsLnN0YXJ0PXtoaWRlOiEwfSxjLnN0YXJ0PWwuc3RhcnQpKSxUdShsLCJlbmQiKSYmUGEobC5lbmQpJiYobC5lbmQ/KHFvKGwuZW5kKXx8KGwuZW5kPXt3aWR0aDoxLGNvbG9yOiIjMDAwIn0pLGMuZW5kPWwu'@;
put 'ZW5kKToobC5lbmQ9e2hpZGU6ITB9LGMuZW5kPWwuZW5kKSksY30oTSxkKSxZbih0aGlzLmhvdC5zZWxlY3Rpb24uaGlnaGxpZ2h0LmN1c3RvbVNlbGVjdGlvbnMsRD0+e2lmKE0uaWQ9PT1ELnNldHRpbmdzLmlkKXJldHVybiBPYmplY3QuYXNzaWduKEQuc2V0dGluZ3MsZCksTS5pZD1ELnNl'@;
put 'dHRpbmdzLmlkLE0udG9wPUQuc2V0dGluZ3MudG9wLE0uYm90dG9tPUQuc2V0dGluZ3MuYm90dG9tLE0uc3RhcnQ9RC5zZXR0aW5ncy5zdGFydCxNLmVuZD1ELnNldHRpbmdzLmVuZCwhMX0pKSx0aGlzLmhvdC5zZXRDZWxsTWV0YShsLGEsImJvcmRlcnMiLFBUKE0pKSx0aGlzLmluc2VydEJv'@;
put 'cmRlckludG9TZXR0aW5ncyhNLGgpfXByZXBhcmVCb3JkZXJGcm9tQ3VzdG9tQWRkZWRSYW5nZShsLGEpe2NvbnN0IGQ9TWF0aC5taW4obC50by5yb3csdGhpcy5ob3QuY291bnRSb3dzKCktMSksaD1NYXRoLm1pbihsLnRvLmNvbCx0aGlzLmhvdC5jb3VudENvbHMoKS0xKTtHYShsLmZyb20u'@;
put 'cm93LGQsZj0+e0dhKGwuZnJvbS5jb2wsaCx2PT57Y29uc3QgTT1HSihmLHYpO2xldCBEPTA7Zj09PWwuZnJvbS5yb3cmJlR1KGEsInRvcCIpJiYoRCs9MSxNLnRvcD1hLnRvcCksZj09PWwudG8ucm93JiZUdShhLCJib3R0b20iKSYmKEQrPTEsTS5ib3R0b209YS5ib3R0b20pLHY9PT1sLmZy'@;
put 'b20uY29sJiZUdShhLCJzdGFydCIpJiYoRCs9MSxNLnN0YXJ0PWEuc3RhcnQpLHY9PT1sLnRvLmNvbCYmVHUoYSwiZW5kIikmJihEKz0xLE0uZW5kPWEuZW5kKSxEPjAmJih0aGlzLmhvdC5zZXRDZWxsTWV0YShmLHYsImJvcmRlcnMiLFBUKE0pKSx0aGlzLmluc2VydEJvcmRlckludG9TZXR0'@;
put 'aW5ncyhNKSl9KX0pfXJlbW92ZUFsbEJvcmRlcnMobCxhKXtjb25zdCBkPVBnZShsLGEpO3RoaXMuc3BsaWNlQm9yZGVyKGQpLHRoaXMuY2xlYXJCb3JkZXJzRnJvbVNlbGVjdGlvblNldHRpbmdzKGQpLHRoaXMuY2xlYXJOdWxsQ2VsbFJhbmdlKCksdGhpcy5ob3QucmVtb3ZlQ2VsbE1ldGEo'@;
put 'bCxhLCJib3JkZXJzIil9c2V0Qm9yZGVyKGwsYSxkLGgpe2xldCBmPXRoaXMuaG90LmdldENlbGxNZXRhKGwsYSkuYm9yZGVycztmPWYmJnZvaWQgMCE9PWYuYm9yZGVyP1lKKGYpOkdKKGwsYSksaD8oZltkXT17aGlkZTohMH0sND09PXRoaXMuY291bnRIaWRlKGYpP3RoaXMucmVtb3ZlQWxs'@;
put 'Qm9yZGVycyhsLGEpOih0aGlzLmNoZWNrQ3VzdG9tU2VsZWN0aW9uc0Zyb21Db250ZXh0TWVudShmLGQsaCl8fHRoaXMuaW5zZXJ0Qm9yZGVySW50b1NldHRpbmdzKGYpLHRoaXMuaG90LnNldENlbGxNZXRhKGwsYSwiYm9yZGVycyIsUFQoZikpKSk6KGZbZF09e3dpZHRoOjEsY29sb3I6IiMw'@;
put 'MDAifSx0aGlzLmNoZWNrQ3VzdG9tU2VsZWN0aW9uc0Zyb21Db250ZXh0TWVudShmLGQsaCl8fHRoaXMuaW5zZXJ0Qm9yZGVySW50b1NldHRpbmdzKGYpLHRoaXMuaG90LnNldENlbGxNZXRhKGwsYSwiYm9yZGVycyIsUFQoZikpKX1wcmVwYXJlQm9yZGVyKGwsYSxkKXtZbihsLGg9PntsZXR7'@;
put 'c3RhcnQ6ZixlbmQ6dn09aDtpZihmLnJvdz09PXYucm93JiZmLmNvbD09PXYuY29sKSJub0JvcmRlcnMiPT09YT90aGlzLnJlbW92ZUFsbEJvcmRlcnMoZi5yb3csZi5jb2wpOnRoaXMuc2V0Qm9yZGVyKGYucm93LGYuY29sLGEsZCk7ZWxzZSBzd2l0Y2goYSl7Y2FzZSJub0JvcmRlcnMiOkdh'@;
put 'KGYuY29sLHYuY29sLE09PntHYShmLnJvdyx2LnJvdyxEPT57dGhpcy5yZW1vdmVBbGxCb3JkZXJzKEQsTSl9KX0pO2JyZWFrO2Nhc2UidG9wIjpHYShmLmNvbCx2LmNvbCxNPT57dGhpcy5zZXRCb3JkZXIoZi5yb3csTSxhLGQpfSk7YnJlYWs7Y2FzZSJib3R0b20iOkdhKGYuY29sLHYuY29s'@;
put 'LE09Pnt0aGlzLnNldEJvcmRlcih2LnJvdyxNLGEsZCl9KTticmVhaztjYXNlInN0YXJ0IjpHYShmLnJvdyx2LnJvdyxNPT57dGhpcy5zZXRCb3JkZXIoTSxmLmNvbCxhLGQpfSk7YnJlYWs7Y2FzZSJlbmQiOkdhKGYucm93LHYucm93LE09Pnt0aGlzLnNldEJvcmRlcihNLHYuY29sLGEsZCl9'@;
put 'KX19KX1jcmVhdGVDdXN0b21Cb3JkZXJzKGwpe1luKGwsYT0+e2NvbnN0IGQ9WUooYSk7YS5yYW5nZT90aGlzLnByZXBhcmVCb3JkZXJGcm9tQ3VzdG9tQWRkZWRSYW5nZShhLnJhbmdlLGQpOnRoaXMucHJlcGFyZUJvcmRlckZyb21DdXN0b21BZGRlZChhLnJvdyxhLmNvbCxkKX0pfWNvdW50'@;
put 'SGlkZShsKXtjb25zdHt0b3A6YSxib3R0b206ZCxzdGFydDpoLGVuZDpmfT1sO3JldHVybiBxdShbYSxkLGgsZl0sKE0sRCk9PntsZXQgWj1NO3JldHVybiBEJiZELmhpZGUmJihaKz0xKSxafSwwKX1jbGVhckJvcmRlcnNGcm9tU2VsZWN0aW9uU2V0dGluZ3MobCl7Y29uc3QgYT15cyh0aGlz'@;
put 'LmhvdC5zZWxlY3Rpb24uaGlnaGxpZ2h0LmN1c3RvbVNlbGVjdGlvbnMsZD0+ZC5zZXR0aW5ncy5pZCkuaW5kZXhPZihsKTthPi0xJiZ0aGlzLmhvdC5zZWxlY3Rpb24uaGlnaGxpZ2h0LmN1c3RvbVNlbGVjdGlvbnNbYV0uY2xlYXIoKX1jbGVhck51bGxDZWxsUmFuZ2UoKXtZbih0aGlzLmhv'@;
put 'dC5zZWxlY3Rpb24uaGlnaGxpZ2h0LmN1c3RvbVNlbGVjdGlvbnMsKGwsYSk9PntpZihudWxsPT09bC5jZWxsUmFuZ2UpcmV0dXJuIHRoaXMuaG90LnNlbGVjdGlvbi5oaWdobGlnaHQuY3VzdG9tU2VsZWN0aW9uc1thXS5kZXN0cm95KCksdGhpcy5ob3Quc2VsZWN0aW9uLmhpZ2hsaWdodC5j'@;
put 'dXN0b21TZWxlY3Rpb25zLnNwbGljZShhLDEpLCExfSl9aGlkZUJvcmRlcnMoKXtZbih0aGlzLnNhdmVkQm9yZGVycyxsPT57dGhpcy5jbGVhckJvcmRlcnNGcm9tU2VsZWN0aW9uU2V0dGluZ3MobC5pZCksdGhpcy5jbGVhck51bGxDZWxsUmFuZ2UoKX0pfXNwbGljZUJvcmRlcihsKXtjb25z'@;
put 'dCBhPXlzKHRoaXMuc2F2ZWRCb3JkZXJzLGQ9PmQuaWQpLmluZGV4T2YobCk7YT4tMSYmdGhpcy5zYXZlZEJvcmRlcnMuc3BsaWNlKGEsMSl9Y2hlY2tTYXZlZEJvcmRlcnMobCl7bGV0IGE9ITE7cmV0dXJuIDQ9PT10aGlzLmNvdW50SGlkZShsKT8odGhpcy5zcGxpY2VCb3JkZXIobC5pZCks'@;
put 'YT0hMCk6WW4odGhpcy5zYXZlZEJvcmRlcnMsKGgsZik9PntpZihsLmlkPT09aC5pZClyZXR1cm4gdGhpcy5zYXZlZEJvcmRlcnNbZl09bCxhPSEwLCExfSksYX1jaGVja0N1c3RvbVNlbGVjdGlvbnNGcm9tQ29udGV4dE1lbnUobCxhLGQpe2xldCBoPSExO3JldHVybiBZbih0aGlzLmhvdC5z'@;
put 'ZWxlY3Rpb24uaGlnaGxpZ2h0LmN1c3RvbVNlbGVjdGlvbnMsZj0+e2lmKGwuaWQ9PT1mLnNldHRpbmdzLmlkKXJldHVybiBZbih0aGlzLmhvdC52aWV3Ll93dC5zZWxlY3Rpb25NYW5hZ2VyLmdldEJvcmRlckluc3RhbmNlcyhmKSxNPT57TS50b2dnbGVIaWRkZW5DbGFzcyhhLGQpfSksaD0h'@;
put 'MCwhMX0pLGh9Y2hlY2tDdXN0b21TZWxlY3Rpb25zKGwsYSxkKXtjb25zdCBoPXRoaXMuY291bnRIaWRlKGwpO2xldCBmPSExO3JldHVybiA0PT09aD8odGhpcy5yZW1vdmVBbGxCb3JkZXJzKGwucm93LGwuY29sKSxmPSEwKTpZbih0aGlzLmhvdC5zZWxlY3Rpb24uaGlnaGxpZ2h0LmN1c3Rv'@;
put 'bVNlbGVjdGlvbnMsdj0+e2lmKGwuaWQ9PT12LnNldHRpbmdzLmlkKXJldHVybiB2LnZpc3VhbENlbGxSYW5nZT1hLHYuY29tbWl0KCksZCYmWW4odGhpcy5ob3Qudmlldy5fd3Quc2VsZWN0aW9uTWFuYWdlci5nZXRCb3JkZXJJbnN0YW5jZXModiksRD0+e0QuY2hhbmdlQm9yZGVyU3R5bGUo'@;
put 'ZCxsKX0pLGY9ITAsITF9KSxmfWNoYW5nZUJvcmRlclNldHRpbmdzKCl7Y29uc3QgbD10aGlzLmhvdC5nZXRTZXR0aW5ncygpW1BGXTtpZihBcnJheS5pc0FycmF5KGwpKXtjb25zdCBhPWcxKGwpO3RoaXMuY2hlY2tTZXR0aW5nc0NvaGVzaW9uKGEpLGEubGVuZ3RofHwodGhpcy5zYXZlZEJv'@;
put 'cmRlcnM9YSksdGhpcy5jcmVhdGVDdXN0b21Cb3JkZXJzKGEpfWVsc2Ugdm9pZCAwIT09bCYmdGhpcy5jcmVhdGVDdXN0b21Cb3JkZXJzKHRoaXMuc2F2ZWRCb3JkZXJzKX1jaGVja1NldHRpbmdzQ29oZXNpb24obCl7Y29uc3QgYT1mdW5jdGlvbiB6MHQoYyl7cmV0dXJuIGMuc29tZShsPT5Q'@;
put 'YShsLmxlZnQpfHxQYShsLnJpZ2h0KSl9KGwpLGQ9ZnVuY3Rpb24gVTB0KGMpe3JldHVybiBjLnNvbWUobD0+UGEobC5zdGFydCl8fFBhKGwuZW5kKSl9KGwpO2lmKGEmJmQpdGhyb3cgbmV3IEVycm9yKCdUaGUgImxlZnQiLyJyaWdodCIgYW5kICJzdGFydCIvImVuZCIgb3B0aW9ucyBzaG91'@;
put 'bGQgbm90IGJlIHVzZWQgdG9nZXRoZXIuIFBsZWFzZSB1c2Ugb25seSB0aGUgb3B0aW9uICJzdGFydCIvImVuZCIuJyk7aWYodGhpcy5ob3QuaXNSdGwoKSYmYSl0aHJvdyBuZXcgRXJyb3IoJ1RoZSAibGVmdCIvInJpZ2h0IiBwcm9wZXJ0aWVzIGFyZSBub3Qgc3VwcG9ydGVkIGZvciBSVEwu'@;
put 'IFBsZWFzZSB1c2Ugb3B0aW9uICJzdGFydCIvImVuZCIuJyl9ZGVzdHJveSgpe3N1cGVyLmRlc3Ryb3koKX19ZnVuY3Rpb24gaTF0KGMpe3RoaXMuaG90LmdldFNldHRpbmdzKClbUEZdJiZjLml0ZW1zLnB1c2goe25hbWU6Ii0tLS0tLS0tLSJ9LHtrZXk6ImJvcmRlcnMiLG5hbWUoKXtyZXR1'@;
put 'cm4gdGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKE1xKX0sZGlzYWJsZWQoKXtjb25zdCBsPXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKTtyZXR1cm4hKGwmJiFsLmlzU2luZ2xlSGVhZGVyKCkpfHx0aGlzLnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb3JuZXIoKX0sc3VibWVudTp7aXRlbXM6'@;
put 'W1kwdCh0aGlzKSxHMHQodGhpcyksJDB0KHRoaXMpLEswdCh0aGlzKSxxMHQodGhpcyldfX0pfWZ1bmN0aW9uIGExdCgpe3RoaXMuY2hhbmdlQm9yZGVyU2V0dGluZ3MoKX1mdW5jdGlvbiBLSihjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gbDF0KGMpe3ZhciBsPWZ1bmN0aW9uIGMxdChjLGwp'@;
put 'e2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9Q'@;
put 'cmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1'@;
put 'ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9ZnVuY3Rpb24gSGdlKGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9y'@;
put 'KCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX1jb25zdCBOZ2U9ImRyYWdUb1Njcm9sbCI7dmFyIHFKPW5ldyBXZWFrU2V0O2NsYXNzIGQxdCBleHRlbmRzIEZze2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSxmdW5jdGlvbiBvMXQoYyxs'@;
put 'KXsoZnVuY3Rpb24gczF0KGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX0pKGMsbCksbC5hZGQoYyl9KHRoaXMscUopLEtKKHRoaXMsImJvdW5kYXJpZXMi'@;
put 'LG51bGwpLEtKKHRoaXMsImNhbGxiYWNrIixudWxsKSxLSih0aGlzLCJsaXN0ZW5pbmciLCExKX1zdGF0aWMgZ2V0IFBMVUdJTl9LRVkoKXtyZXR1cm4gTmdlfXN0YXRpYyBnZXQgUExVR0lOX1BSSU9SSVRZKCl7cmV0dXJuIDEwMH1pc0VuYWJsZWQoKXtyZXR1cm4hIXRoaXMuaG90LmdldFNl'@;
put 'dHRpbmdzKClbTmdlXX1lbmFibGVQbHVnaW4oKXt0aGlzLmVuYWJsZWR8fCh0aGlzLmFkZEhvb2soImFmdGVyT25DZWxsTW91c2VEb3duIixsPT5IZ2UocUosdGhpcyxWZ2UpLmNhbGwodGhpcyxsKSksdGhpcy5hZGRIb29rKCJhZnRlck9uQ2VsbENvcm5lck1vdXNlRG93biIsbD0+SGdlKHFK'@;
put 'LHRoaXMsVmdlKS5jYWxsKHRoaXMsbCkpLHRoaXMucmVnaXN0ZXJFdmVudHMoKSxzdXBlci5lbmFibGVQbHVnaW4oKSl9dXBkYXRlUGx1Z2luKCl7dGhpcy5kaXNhYmxlUGx1Z2luKCksdGhpcy5lbmFibGVQbHVnaW4oKSxzdXBlci51cGRhdGVQbHVnaW4oKX1kaXNhYmxlUGx1Z2luKCl7dGhp'@;
put 'cy51bnJlZ2lzdGVyRXZlbnRzKCksc3VwZXIuZGlzYWJsZVBsdWdpbigpfXNldEJvdW5kYXJpZXMoKXt0aGlzLmJvdW5kYXJpZXM9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOntsZWZ0OjAscmlnaHQ6dGhpcy5ob3Qucm9vdFdpbmRvdy5p'@;
put 'bm5lcldpZHRoLHRvcDowLGJvdHRvbTp0aGlzLmhvdC5yb290V2luZG93LmlubmVySGVpZ2h0fX1zZXRDYWxsYmFjayhsKXt0aGlzLmNhbGxiYWNrPWx9Y2hlY2sobCxhKXtsZXQgZD0wLGg9MDthPHRoaXMuYm91bmRhcmllcy50b3A/aD1hLXRoaXMuYm91bmRhcmllcy50b3A6YT50aGlzLmJv'@;
put 'dW5kYXJpZXMuYm90dG9tJiYoaD1hLXRoaXMuYm91bmRhcmllcy5ib3R0b20pLGw8dGhpcy5ib3VuZGFyaWVzLmxlZnQ/ZD1sLXRoaXMuYm91bmRhcmllcy5sZWZ0Omw+dGhpcy5ib3VuZGFyaWVzLnJpZ2h0JiYoZD1sLXRoaXMuYm91bmRhcmllcy5yaWdodCksdGhpcy5jYWxsYmFjayhkLGgp'@;
put 'fWxpc3Rlbigpe3RoaXMubGlzdGVuaW5nPSEwfXVubGlzdGVuKCl7dGhpcy5saXN0ZW5pbmc9ITF9aXNMaXN0ZW5pbmcoKXtyZXR1cm4gdGhpcy5saXN0ZW5pbmd9cmVnaXN0ZXJFdmVudHMoKXtjb25zdHtyb290V2luZG93Omx9PXRoaXMuaG90O2xldCBhPWw7Zm9yKDthOyl0aGlzLmV2ZW50'@;
put 'TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGEuZG9jdW1lbnQsImNvbnRleHRtZW51IiwoKT0+dGhpcy51bmxpc3RlbigpKSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGEuZG9jdW1lbnQsIm1vdXNldXAiLCgpPT50aGlzLnVubGlzdGVuKCkpLHRoaXMuZXZlbnRNYW5hZ2Vy'@;
put 'LmFkZEV2ZW50TGlzdGVuZXIoYS5kb2N1bWVudCwibW91c2Vtb3ZlIixkPT50aGlzLm9uTW91c2VNb3ZlKGQpKSxhPUI3KGEpfXVucmVnaXN0ZXJFdmVudHMoKXt0aGlzLmV2ZW50TWFuYWdlci5jbGVhcigpfW9uTW91c2VNb3ZlKGwpe3RoaXMuaXNMaXN0ZW5pbmcoKSYmdGhpcy5jaGVjayhs'@;
put 'LmNsaWVudFgsbC5jbGllbnRZKX1kZXN0cm95KCl7c3VwZXIuZGVzdHJveSgpfX1mdW5jdGlvbiBWZ2UoYyl7aWYoSG0oYykpcmV0dXJuO2NvbnN0IGw9dGhpcy5ob3Qudmlldy5fd3Qud3RPdmVybGF5cy50b3BPdmVybGF5Lm1haW5UYWJsZVNjcm9sbGFibGVFbGVtZW50O3RoaXMuc2V0Qm91'@;
put 'bmRhcmllcyhsIT09dGhpcy5ob3Qucm9vdFdpbmRvdz9sLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOnZvaWQgMCksdGhpcy5zZXRDYWxsYmFjaygoYSxkKT0+e3ZhciBoLGY7Y29uc3Qgdj1udWxsIT09KGg9bC5zY3JvbGxMZWZ0KSYmdm9pZCAwIT09aD9oOmwuc2Nyb2xsWCxNPW51bGwhPT0o'@;
put 'Zj1sLnNjcm9sbFRvcCkmJnZvaWQgMCE9PWY/ZjpsLnNjcm9sbFk7bC5zY3JvbGwodis1MCpNYXRoLnNpZ24oYSksTSsyMCpNYXRoLnNpZ24oZCkpfSksdGhpcy5saXN0ZW4oKX1mdW5jdGlvbiBCZ2UoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlh'@;
put 'bGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfWZ1bmN0aW9uIFhKKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBwMXQoYyl7dmFyIGw9ZnVuY3Rpb24gZzF0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5'@;
put 'bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1'@;
put 'cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9'@;
put 'KTpjW2xdPWEsY31mdW5jdGlvbiBqZ2UoYyxsLGEpe3JldHVybiBjLnNldChxMihjLGwpLGEpLGF9ZnVuY3Rpb24gcTIoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3Io'@;
put 'IlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfVNhLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJhZnRlckRyb3Bkb3duTWVudURlZmF1bHRPcHRpb25zIiksU2EuZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImJlZm9yZURyb3Bkb3duTWVudVNob3ciKSxT'@;
put 'YS5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYWZ0ZXJEcm9wZG93bk1lbnVTaG93IiksU2EuZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImFmdGVyRHJvcGRvd25NZW51SGlkZSIpLFNhLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJhZnRlckRyb3Bkb3duTWVudUV4ZWN1dGUiKTtjb25zdCBG'@;
put 'Rj0iZHJvcGRvd25NZW51IixGVD0iY2hhbmdlVHlwZSIsSko9RkY7dmFyIEhGPW5ldyBXZWFrTWFwLGczPW5ldyBXZWFrU2V0O2NsYXNzIE5GIGV4dGVuZHMgRnN7c3RhdGljIGdldCBQTFVHSU5fS0VZKCl7cmV0dXJuIEZGfXN0YXRpYyBnZXQgUExVR0lOX1BSSU9SSVRZKCl7cmV0dXJuIDIz'@;
put 'MH1zdGF0aWMgZ2V0IFBMVUdJTl9ERVBTKCl7cmV0dXJuWyJwbHVnaW46QXV0b0NvbHVtblNpemUiXX1zdGF0aWMgZ2V0IERFRkFVTFRfSVRFTVMoKXtyZXR1cm5bd1QsQ1Qsc3MsTVQsc3MseUYsc3MsU1Qsc3MsSzJdfWNvbnN0cnVjdG9yKGwpe3N1cGVyKGwpLGZ1bmN0aW9uIGgxdChjLGwp'@;
put 'e0JnZShjLGwpLGwuYWRkKGMpfSh0aGlzLGczKSxYSih0aGlzLCJjb21tYW5kRXhlY3V0b3IiLG5ldyBnZ2UodGhpcy5ob3QpKSxYSih0aGlzLCJpdGVtc0ZhY3RvcnkiLG51bGwpLFhKKHRoaXMsIm1lbnUiLG51bGwpLGZ1bmN0aW9uIGYxdChjLGwsYSl7QmdlKGMsbCksbC5zZXQoYyxhKX0o'@;
put 'dGhpcyxIRiwhMSksdGhpcy5ob3QuYWRkSG9vaygiYWZ0ZXJHZXRDb2xIZWFkZXIiLChhLGQpPT5xMihnMyx0aGlzLHkxdCkuY2FsbCh0aGlzLGEsZCkpfWlzRW5hYmxlZCgpe3JldHVybiB0aGlzLmhvdC5nZXRTZXR0aW5ncygpW0ZGXX1lbmFibGVQbHVnaW4oKXt2YXIgbD10aGlzO2lmKHRo'@;
put 'aXMuZW5hYmxlZClyZXR1cm47dGhpcy5pdGVtc0ZhY3Rvcnk9bmV3IHlnZSh0aGlzLmhvdCxORi5ERUZBVUxUX0lURU1TKSx0aGlzLmFkZEhvb2soImJlZm9yZU9uQ2VsbE1vdXNlRG93biIsZnVuY3Rpb24oKXtmb3IodmFyIGg9YXJndW1lbnRzLmxlbmd0aCxmPW5ldyBBcnJheShoKSx2PTA7'@;
put 'djxoO3YrKylmW3ZdPWFyZ3VtZW50c1t2XTtyZXR1cm4gcTIoZzMsbCx4MXQpLmNhbGwobCwuLi5mKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlVmlld3BvcnRTY3JvbGxIb3Jpem9udGFsbHkiLGZ1bmN0aW9uKCl7Zm9yKHZhciBoPWFyZ3VtZW50cy5sZW5ndGgsZj1uZXcgQXJyYXkoaCksdj0w'@;
put 'O3Y8aDt2KyspZlt2XT1hcmd1bWVudHNbdl07cmV0dXJuIHEyKGczLGwsTTF0KS5jYWxsKGwsLi4uZil9KTtjb25zdCBhPXRoaXMuaG90LmdldFNldHRpbmdzKClbRkZdLGQ9e2l0ZW1zOnRoaXMuaXRlbXNGYWN0b3J5LmdldEl0ZW1zKGEpfTt0aGlzLnJlZ2lzdGVyRXZlbnRzKCksImZ1bmN0'@;
put 'aW9uIj09dHlwZW9mIGEuY2FsbGJhY2smJnRoaXMuY29tbWFuZEV4ZWN1dG9yLnNldENvbW1vbkNhbGxiYWNrKGEuY2FsbGJhY2spLHRoaXMucmVnaXN0ZXJTaG9ydGN1dHMoKSxzdXBlci5lbmFibGVQbHVnaW4oKSx0aGlzLmNhbGxPblBsdWdpbnNSZWFkeSgoKT0+e3RoaXMuaG90LnJ1bkhv'@;
put 'b2tzKCJhZnRlckRyb3Bkb3duTWVudURlZmF1bHRPcHRpb25zIixkKSx0aGlzLml0ZW1zRmFjdG9yeS5zZXRQcmVkZWZpbmVkSXRlbXMoZC5pdGVtcyk7Y29uc3QgaD10aGlzLml0ZW1zRmFjdG9yeS5nZXRJdGVtcyhhKTt0aGlzLm1lbnUmJnRoaXMubWVudS5kZXN0cm95KCksdGhpcy5tZW51'@;
put 'PW5ldyBxXyh0aGlzLmhvdCx7Y2xhc3NOYW1lOiJodERyb3Bkb3duTWVudSIsa2VlcEluVmlld3BvcnQ6ITAsY29udGFpbmVyOmEudWlDb250YWluZXJ8fHRoaXMuaG90LnJvb3REb2N1bWVudC5ib2R5fSksdGhpcy5ob3QucnVuSG9va3MoImJlZm9yZURyb3Bkb3duTWVudVNldEl0ZW1zIixo'@;
put 'KSx0aGlzLm1lbnUuc2V0TWVudUl0ZW1zKGgpLHRoaXMubWVudS5hZGRMb2NhbEhvb2soImJlZm9yZU9wZW4iLCgpPT5xMihnMyx0aGlzLF8xdCkuY2FsbCh0aGlzKSksdGhpcy5tZW51LmFkZExvY2FsSG9vaygiYWZ0ZXJPcGVuIiwoKT0+cTIoZzMsdGhpcyx3MXQpLmNhbGwodGhpcykpLHRo'@;
put 'aXMubWVudS5hZGRMb2NhbEhvb2soImFmdGVyU3VibWVudU9wZW4iLGY9PnEyKGczLHRoaXMsQzF0KS5jYWxsKHRoaXMsZikpLHRoaXMubWVudS5hZGRMb2NhbEhvb2soImFmdGVyQ2xvc2UiLCgpPT5xMihnMyx0aGlzLFMxdCkuY2FsbCh0aGlzKSksdGhpcy5tZW51LmFkZExvY2FsSG9vaygi'@;
put 'ZXhlY3V0ZUNvbW1hbmQiLGZ1bmN0aW9uKCl7Zm9yKHZhciBmPWFyZ3VtZW50cy5sZW5ndGgsdj1uZXcgQXJyYXkoZiksTT0wO008ZjtNKyspdltNXT1hcmd1bWVudHNbTV07cmV0dXJuIGwuZXhlY3V0ZUNvbW1hbmQuY2FsbChsLC4uLnYpfSksWW4oaCxmPT50aGlzLmNvbW1hbmRFeGVjdXRv'@;
put 'ci5yZWdpc3RlckNvbW1hbmQoZi5rZXksZikpfSl9dXBkYXRlUGx1Z2luKCl7dGhpcy5kaXNhYmxlUGx1Z2luKCksdGhpcy5lbmFibGVQbHVnaW4oKSxzdXBlci51cGRhdGVQbHVnaW4oKX1kaXNhYmxlUGx1Z2luKCl7dGhpcy5jbG9zZSgpLHRoaXMubWVudSYmdGhpcy5tZW51LmRlc3Ryb3ko'@;
put 'KSx0aGlzLnVucmVnaXN0ZXJTaG9ydGN1dHMoKSxzdXBlci5kaXNhYmxlUGx1Z2luKCl9cmVnaXN0ZXJTaG9ydGN1dHMoKXtjb25zdCBhPSgpPT57Y29uc3R7aGlnaGxpZ2h0OmR9PXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCk7aWYoKGQuaXNIZWFkZXIoKSYmLTE9PT1kLnJvd3x8'@;
put 'ZC5pc0NlbGwoKSkmJmQuY29sPj0wKXt0aGlzLmhvdC5zZWxlY3RDb2x1bW5zKGQuY29sLGQuY29sLC0xKTtjb25zdHtmcm9tOmh9PXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCksZj1mRih0aGlzLm1lbnUuY29udGFpbmVyLHRoaXMuaG90LnJvb3REb2N1bWVudCksdj10aGlzLmhv'@;
put 'dC5nZXRDZWxsKC0xLGguY29sLCEwKS5xdWVyeVNlbGVjdG9yKGAuJHtGVH1gKSxNPXYuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7dGhpcy5vcGVuKHtsZWZ0Ok0ubGVmdCtmLmxlZnQsdG9wOk0udG9wK3Yub2Zmc2V0SGVpZ2h0K2YudG9wfSx7bGVmdDpNLndpZHRoLHJpZ2h0OjAsYWJvdmU6'@;
put 'MCxiZWxvdzozfSksdGhpcy5tZW51LmdldE5hdmlnYXRvcigpLnRvRmlyc3RJdGVtKCl9fTt0aGlzLmhvdC5nZXRTaG9ydGN1dE1hbmFnZXIoKS5nZXRDb250ZXh0KCJncmlkIikuYWRkU2hvcnRjdXRzKFt7a2V5czpbWyJTaGlmdCIsIkFsdCIsIkFycm93RG93biJdLFsiQ29udHJvbC9NZXRh'@;
put 'IiwiRW50ZXIiXV0sY2FsbGJhY2s6YSxydW5Pbmx5SWY6KCk9Pnt2YXIgZDtjb25zdCBoPW51bGw9PT0oZD10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpKXx8dm9pZCAwPT09ZD92b2lkIDA6ZC5oaWdobGlnaHQ7cmV0dXJuIGgmJnRoaXMuaG90LnNlbGVjdGlvbi5pc0NlbGxWaXNp'@;
put 'YmxlKGgpJiZoLmlzSGVhZGVyKCkmJiF0aGlzLm1lbnUuaXNPcGVuZWQoKX0sY2FwdHVyZUN0cmw6ITAsZ3JvdXA6Skp9LHtrZXlzOltbIlNoaWZ0IiwiQWx0IiwiQXJyb3dEb3duIl1dLGNhbGxiYWNrOmEscnVuT25seUlmOigpPT57dmFyIGQ7Y29uc3QgaD1udWxsPT09KGQ9dGhpcy5ob3Qu'@;
put 'Z2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSl8fHZvaWQgMD09PWQ/dm9pZCAwOmQuaGlnaGxpZ2h0O3JldHVybiBoJiZ0aGlzLmhvdC5zZWxlY3Rpb24uaXNDZWxsVmlzaWJsZShoKSYmaC5pc0NlbGwoKSYmIXRoaXMubWVudS5pc09wZW5lZCgpfSxncm91cDpKSn1dKX11bnJlZ2lzdGVyU2hvcnRj'@;
put 'dXRzKCl7dGhpcy5ob3QuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuZ2V0Q29udGV4dCgiZ3JpZCIpLnJlbW92ZVNob3J0Y3V0c0J5R3JvdXAoSkopfXJlZ2lzdGVyRXZlbnRzKCl7dGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcih0aGlzLmhvdC5yb290RWxlbWVudCwiY2xpY2siLGw9'@;
put 'PnEyKGczLHRoaXMsYjF0KS5jYWxsKHRoaXMsbCkpfW9wZW4obCl7dmFyIGE7bGV0IGQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnthYm92ZTowLGJlbG93OjAsbGVmdDowLHJpZ2h0OjB9O251bGwhPT0oYT10aGlzLm1lbnUpJiZ2b2lk'@;
put 'IDAhPT1hJiZhLmlzT3BlbmVkKCl8fCh0aGlzLm1lbnUub3BlbigpLFhvKGQsKGgsZik9Pnt0aGlzLm1lbnUuc2V0T2Zmc2V0KGYsaCl9KSx0aGlzLm1lbnUuc2V0UG9zaXRpb24obCkpfWNsb3NlKCl7dmFyIGw7bnVsbD09PShsPXRoaXMubWVudSl8fHZvaWQgMD09PWx8fGwuY2xvc2UoKX1l'@;
put 'eGVjdXRlQ29tbWFuZChsKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhPjE/YS0xOjApLGg9MTtoPGE7aCsrKWRbaC0xXT1hcmd1bWVudHNbaF07dGhpcy5jb21tYW5kRXhlY3V0b3IuZXhlY3V0ZShsLC4uLmQpfXNldExpc3RlbmluZygpe2xldCBsPSEoYXJndW1l'@;
put 'bnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0pfHxhcmd1bWVudHNbMF07dGhpcy5tZW51LmlzT3BlbmVkKCkmJihsP3RoaXMubWVudS5ob3RNZW51Lmxpc3RlbigpOnRoaXMubWVudS5ob3RNZW51LnVubGlzdGVuKCkpfWRlc3Ryb3koKXt0aGlzLmNsb3NlKCksdGhpcy5tZW51'@;
put 'JiZ0aGlzLm1lbnUuZGVzdHJveSgpLHN1cGVyLmRlc3Ryb3koKX19ZnVuY3Rpb24gemdlKGMpe2MuZ2V0S2V5Ym9hcmRTaG9ydGN1dHNDdHJsKCkuYWRkQ3VzdG9tU2hvcnRjdXRzKFt7a2V5czpbWyJDb250cm9sL01ldGEiLCJBIl1dLGNhbGxiYWNrOigpPT4hMX1dKX1mdW5jdGlvbiBiMXQo'@;
put 'Yyl7aWYocG8oYy50YXJnZXQsRlQpKXtjb25zdCBsPWZGKHRoaXMubWVudS5jb250YWluZXIsdGhpcy5ob3Qucm9vdERvY3VtZW50KSxhPWMudGFyZ2V0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2Muc3RvcFByb3BhZ2F0aW9uKCksamdlKEhGLHRoaXMsITEpLHRoaXMub3Blbih7bGVmdDph'@;
put 'LmxlZnQrbC5sZWZ0LHRvcDphLnRvcCtjLnRhcmdldC5vZmZzZXRIZWlnaHQrbC50b3B9LHtsZWZ0OmEud2lkdGgscmlnaHQ6MCxhYm92ZTowLGJlbG93OjN9KX19ZnVuY3Rpb24geTF0KGMsbCl7Y29uc3QgYT1sLnBhcmVudE5vZGU7aWYoIWEpcmV0dXJuO2NvbnN0IGQ9YS5wYXJlbnROb2Rl'@;
put 'LmNoaWxkTm9kZXMsaD1BcnJheS5wcm90b3R5cGUuaW5kZXhPZi5jYWxsKGQsYSk7aWYoYzwwfHxoIT09ZC5sZW5ndGgtMSlyZXR1cm47Y29uc3QgZj1sLnF1ZXJ5U2VsZWN0b3IoYC4ke0ZUfWApO2lmKHRoaXMuZW5hYmxlZCYmZilyZXR1cm47aWYoIXRoaXMuZW5hYmxlZClyZXR1cm4gdm9p'@;
put 'ZChmJiZmLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoZikpO2NvbnN0IHY9dGhpcy5ob3Qucm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImJ1dHRvbiIpO3YuY2xhc3NOYW1lPUZULHYudHlwZT0iYnV0dG9uIix2LnRhYkluZGV4PS0xLHRoaXMuaG90LmdldFNldHRpbmdzKCkuYXJpYVRhZ3Mm'@;
put 'Jih2byh2LFtWNygpLG1FKCIgIildKSx2byhsLFtFMmUoIm1lbnUiKV0pKSx2Lm9uY2xpY2s9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sbC5maXJzdENoaWxkLmluc2VydEJlZm9yZSh2LGwuZmlyc3RDaGlsZC5maXJzdENoaWxkKX1mdW5jdGlvbiBfMXQoKXt0aGlzLmhvdC5ydW5Ib29rcygiYmVm'@;
put 'b3JlRHJvcGRvd25NZW51U2hvdyIsdGhpcyl9ZnVuY3Rpb24gdzF0KCl7dGhpcy5ob3QucnVuSG9va3MoImFmdGVyRHJvcGRvd25NZW51U2hvdyIsdGhpcykscTIoZzMsdGhpcyx6Z2UpLmNhbGwodGhpcyx0aGlzLm1lbnUpfWZ1bmN0aW9uIEMxdChjKXtxMihnMyx0aGlzLHpnZSkuY2FsbCh0'@;
put 'aGlzLGMpfWZ1bmN0aW9uIFMxdCgpe3RoaXMuaG90Lmxpc3RlbigpLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlckRyb3Bkb3duTWVudUhpZGUiLHRoaXMpfWZ1bmN0aW9uIE0xdChjKXtyZXR1cm4gZnVuY3Rpb24gbTF0KGMsbCl7cmV0dXJuIGMuZ2V0KHEyKGMsbCkpfShIRix0aGlzKT9udWxs'@;
put 'OmN9ZnVuY3Rpb24geDF0KGMpe3BvKGMudGFyZ2V0LEZUKSYmamdlKEhGLHRoaXMsITApfWZ1bmN0aW9uIFVnZShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gRTF0KGMpe3ZhciBsPWZ1bmN0aW9uIFQxdChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tT'@;
put 'eW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0'@;
put 'dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEw'@;
put 'fSk6Y1tsXT1hLGN9TkYuU0VQQVJBVE9SPXtuYW1lOnNzfTtjb25zdCBrMXQ9Y2xhc3MgQTF0e2NvbnN0cnVjdG9yKGwpe1VnZSh0aGlzLCJob3QiLHZvaWQgMCksVWdlKHRoaXMsIm9wdGlvbnMiLHt9KSx0aGlzLmhvdD1sfXNldE9wdGlvbnMobCl7dGhpcy5vcHRpb25zPWx9Z2V0RGF0YSgp'@;
put 'e2NvbnN0e3N0YXJ0Um93Omwsc3RhcnRDb2w6YSxlbmRSb3c6ZCxlbmRDb2w6aH09dGhpcy5fZ2V0RGF0YVJhbmdlKCksZj10aGlzLm9wdGlvbnMsdj1bXTtyZXR1cm4gR2EobCxkLE09Pntjb25zdCBEPVtdOyFmLmV4cG9ydEhpZGRlblJvd3MmJnRoaXMuX2lzSGlkZGVuUm93KE0pfHwoR2Eo'@;
put 'YSxoLFo9PnshZi5leHBvcnRIaWRkZW5Db2x1bW5zJiZ0aGlzLl9pc0hpZGRlbkNvbHVtbihaKXx8RC5wdXNoKHRoaXMuaG90LmdldERhdGFBdENlbGwoTSxaKSl9KSx2LnB1c2goRCkpfSksdn1nZXRSb3dIZWFkZXJzKCl7Y29uc3QgbD1bXTtpZih0aGlzLm9wdGlvbnMucm93SGVhZGVycyl7'@;
put 'Y29uc3R7c3RhcnRSb3c6YSxlbmRSb3c6ZH09dGhpcy5fZ2V0RGF0YVJhbmdlKCksaD10aGlzLmhvdC5nZXRSb3dIZWFkZXIoKTtHYShhLGQsZj0+eyF0aGlzLm9wdGlvbnMuZXhwb3J0SGlkZGVuUm93cyYmdGhpcy5faXNIaWRkZW5Sb3coZil8fGwucHVzaChoW2ZdKX0pfXJldHVybiBsfWdl'@;
put 'dENvbHVtbkhlYWRlcnMoKXtjb25zdCBsPVtdO2lmKHRoaXMub3B0aW9ucy5jb2x1bW5IZWFkZXJzKXtjb25zdHtzdGFydENvbDphLGVuZENvbDpkfT10aGlzLl9nZXREYXRhUmFuZ2UoKSxoPXRoaXMuaG90LmdldENvbEhlYWRlcigpO0dhKGEsZCxmPT57IXRoaXMub3B0aW9ucy5leHBvcnRI'@;
put 'aWRkZW5Db2x1bW5zJiZ0aGlzLl9pc0hpZGRlbkNvbHVtbihmKXx8bC5wdXNoKGhbZl0pfSl9cmV0dXJuIGx9X2dldERhdGFSYW5nZSgpe2NvbnN0IGw9dGhpcy5ob3QuY291bnRDb2xzKCktMSxhPXRoaXMuaG90LmNvdW50Um93cygpLTE7bGV0W2Q9MCxoPTAsZj1hLHY9bF09dGhpcy5vcHRp'@;
put 'b25zLnJhbmdlO3JldHVybiBkPU1hdGgubWF4KGQsMCksaD1NYXRoLm1heChoLDApLGY9TWF0aC5taW4oZixhKSx2PU1hdGgubWluKHYsbCkse3N0YXJ0Um93OmQsc3RhcnRDb2w6aCxlbmRSb3c6ZixlbmRDb2w6dn19X2lzSGlkZGVuUm93KGwpe3JldHVybiB0aGlzLmhvdC5yb3dJbmRleE1h'@;
put 'cHBlci5pc0hpZGRlbih0aGlzLmhvdC50b1BoeXNpY2FsUm93KGwpKX1faXNIaWRkZW5Db2x1bW4obCl7cmV0dXJuIHRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLmlzSGlkZGVuKHRoaXMuaG90LnRvUGh5c2ljYWxDb2x1bW4obCkpfX07ZnVuY3Rpb24gWmdlKGMsbCxhKXtyZXR1cm4obD1m'@;
put 'dW5jdGlvbiBEMXQoYyl7dmFyIGw9ZnVuY3Rpb24gSTF0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9m'@;
put 'IGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShs'@;
put 'KSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jbGFzcyBRSntzdGF0aWMgZ2V0IERFRkFVTFRfT1BUSU9OUygpe3JldHVybnttaW1lVHlwZToidGV4dC9wbGFpbiIsZmls'@;
put 'ZUV4dGVuc2lvbjoidHh0IixmaWxlbmFtZToiSGFuZHNvbnRhYmxlIFtZWVlZXS1bTU1dLVtERF0iLGVuY29kaW5nOiJ1dGYtOCIsYm9tOiExLGNvbHVtbkhlYWRlcnM6ITEscm93SGVhZGVyczohMSxleHBvcnRIaWRkZW5Db2x1bW5zOiExLGV4cG9ydEhpZGRlblJvd3M6ITEscmFuZ2U6W119'@;
put 'fWNvbnN0cnVjdG9yKGwsYSl7WmdlKHRoaXMsImRhdGFQcm92aWRlciIsdm9pZCAwKSxaZ2UodGhpcywib3B0aW9ucyIsdm9pZCAwKSx0aGlzLmRhdGFQcm92aWRlcj1sLHRoaXMub3B0aW9ucz10aGlzLl9tZXJnZU9wdGlvbnMoYSksdGhpcy5kYXRhUHJvdmlkZXIuc2V0T3B0aW9ucyh0aGlz'@;
put 'Lm9wdGlvbnMpfV9tZXJnZU9wdGlvbnMobCl7bGV0IGE9bjModGhpcy5jb25zdHJ1Y3Rvci5ERUZBVUxUX09QVElPTlMpO2NvbnN0IGQ9bmV3IERhdGU7cmV0dXJuIGE9RXUobjMoUUouREVGQVVMVF9PUFRJT05TKSxhKSxhPUV1KGEsbCksYS5maWxlbmFtZT1wJChhLmZpbGVuYW1lLHtZWVlZ'@;
put 'OmQuZ2V0RnVsbFllYXIoKSxNTTpgJHtkLmdldE1vbnRoKCkrMX1gLnBhZFN0YXJ0KDIsIjAiKSxERDpgJHtkLmdldERhdGUoKX1gLnBhZFN0YXJ0KDIsIjAiKX0pLGF9fWNvbnN0IFIxdD1RSjtmdW5jdGlvbiBXZ2UoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFz'@;
put 'KGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfXZhciBlUT1uZXcgV2Vha1NldDtmdW5jdGlvbiBVMXQoYyl7cmV0dXJuIGMuc3RhcnRzV2l0aCgiPSIpfHxj'@;
put 'LnN0YXJ0c1dpdGgoIisiKXx8Yy5zdGFydHNXaXRoKCItIil8fGMuc3RhcnRzV2l0aCgiQCIpfHxjLnN0YXJ0c1dpdGgoIlx0Iil8fGMuc3RhcnRzV2l0aCgiXHIiKT9gJyR7Y31gOmN9ZnVuY3Rpb24gWjF0KGMsbCl7cmV0dXJuIGwudGVzdChjKT9gJyR7Y31gOmN9Y29uc3QgdFE9e2Nzdjpj'@;
put 'bGFzcyB6MXQgZXh0ZW5kcyBSMXR7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLGZ1bmN0aW9uIEwxdChjLGwpeyhmdW5jdGlvbiBPMXQoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1l'@;
put 'bnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfSkoYyxsKSxsLmFkZChjKX0odGhpcyxlUSl9c3RhdGljIGdldCBERUZBVUxUX09QVElPTlMoKXtyZXR1cm57bWltZVR5cGU6InRleHQvY3N2IixmaWxlRXh0ZW5zaW9uOiJjc3YiLGJvbTohMCxjb2x1bW5EZWxpbWl0ZXI6IiwiLHJvd0RlbGltaXRl'@;
put 'cjoiXHJcbiIsc2FuaXRpemVWYWx1ZXM6ITF9fWV4cG9ydCgpe2NvbnN0IGw9dGhpcy5vcHRpb25zLGE9dGhpcy5kYXRhUHJvdmlkZXIuZ2V0RGF0YSgpO2xldCBkPXRoaXMuZGF0YVByb3ZpZGVyLmdldENvbHVtbkhlYWRlcnMoKTtjb25zdCBoPWQubGVuZ3RoPjAsZj10aGlzLmRhdGFQcm92'@;
put 'aWRlci5nZXRSb3dIZWFkZXJzKCksdj1mLmxlbmd0aD4wO2xldCBNPWwuYm9tPyJcdWZlZmYiOiIiO3JldHVybiBoJiYoZD15cyhkLEQ9PnRoaXMuX2VzY2FwZUNlbGwoRCx7Zm9yY2U6ITAsc2FuaXRpemVWYWx1ZTpsLnNhbml0aXplVmFsdWVzfSkpLHYmJihNKz1sLmNvbHVtbkRlbGltaXRl'@;
put 'ciksTSs9ZC5qb2luKGwuY29sdW1uRGVsaW1pdGVyKSxNKz1sLnJvd0RlbGltaXRlciksWW4oYSwoRCxaKT0+e1o+MCYmKE0rPWwucm93RGVsaW1pdGVyKSx2JiYoTSs9dGhpcy5fZXNjYXBlQ2VsbChmW1pdLHtzYW5pdGl6ZVZhbHVlOmwuc2FuaXRpemVWYWx1ZXN9KSxNKz1sLmNvbHVtbkRl'@;
put 'bGltaXRlcik7Y29uc3QgcmU9RC5tYXAoY2U9PnRoaXMuX2VzY2FwZUNlbGwoY2Use3Nhbml0aXplVmFsdWU6bC5zYW5pdGl6ZVZhbHVlc30pKS5qb2luKGwuY29sdW1uRGVsaW1pdGVyKTtNKz1yZX0pLE19X2VzY2FwZUNlbGwobCl7bGV0e2ZvcmNlOmE9ITEsc2FuaXRpemVWYWx1ZTpkPSEx'@;
put 'fT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06e30saD1sYyhsKTtyZXR1cm4iIj09PWh8fChkJiYoYT0hMCksZCBpbnN0YW5jZW9mIFJlZ0V4cD9oPVdnZShlUSx0aGlzLFoxdCkuY2FsbCh0aGlzLGgsZCk6ImZ1bmN0aW9uIj09dHlwZW9m'@;
put 'IGQ/aD1kKGgpOmQmJihoPVdnZShlUSx0aGlzLFUxdCkuY2FsbCh0aGlzLGgpKSwoYXx8aC5pbmRleE9mKCJcciIpPj0wfHxoLmluZGV4T2YoJyInKT49MHx8aC5pbmRleE9mKCJcbiIpPj0wfHxoLmluZGV4T2YodGhpcy5vcHRpb25zLmNvbHVtbkRlbGltaXRlcik+PTApJiYoaD1oLnJlcGxh'@;
put 'Y2UobmV3IFJlZ0V4cCgnIicsImciKSwnIiInKSxoPWAiJHtofSJgKSksaH19fTtjbGFzcyBxMXQgZXh0ZW5kcyBGc3tzdGF0aWMgZ2V0IFBMVUdJTl9LRVkoKXtyZXR1cm4iZXhwb3J0RmlsZSJ9c3RhdGljIGdldCBQTFVHSU5fUFJJT1JJVFkoKXtyZXR1cm4gMjQwfWlzRW5hYmxlZCgpe3Jl'@;
put 'dHVybiEwfWV4cG9ydEFzU3RyaW5nKGwpe3JldHVybiB0aGlzLl9jcmVhdGVUeXBlRm9ybWF0dGVyKGwsYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnt9KS5leHBvcnQoKX1leHBvcnRBc0Jsb2IobCl7cmV0dXJuIHRoaXMuX2NyZWF0ZUJs'@;
put 'b2IodGhpcy5fY3JlYXRlVHlwZUZvcm1hdHRlcihsLGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp7fSkpfWRvd25sb2FkRmlsZShsKXtsZXQgYT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNb'@;
put 'MV06e307Y29uc3R7cm9vdERvY3VtZW50OmQscm9vdFdpbmRvdzpofT10aGlzLmhvdCxmPXRoaXMuX2NyZWF0ZVR5cGVGb3JtYXR0ZXIobCxhKSx2PXRoaXMuX2NyZWF0ZUJsb2IoZiksTT1oLlVSTHx8aC53ZWJraXRVUkwsRD1kLmNyZWF0ZUVsZW1lbnQoImEiKSxaPWAke2Yub3B0aW9ucy5m'@;
put 'aWxlbmFtZX0uJHtmLm9wdGlvbnMuZmlsZUV4dGVuc2lvbn1gO2lmKHZvaWQgMCE9PUQuZG93bmxvYWQpe2NvbnN0IHJlPU0uY3JlYXRlT2JqZWN0VVJMKHYpO0Quc3R5bGUuZGlzcGxheT0ibm9uZSIsRC5zZXRBdHRyaWJ1dGUoImhyZWYiLHJlKSxELnNldEF0dHJpYnV0ZSgiZG93bmxvYWQi'@;
put 'LFopLGQuYm9keS5hcHBlbmRDaGlsZChEKSxELmRpc3BhdGNoRXZlbnQobmV3IE1vdXNlRXZlbnQoImNsaWNrIikpLGQuYm9keS5yZW1vdmVDaGlsZChEKSxzZXRUaW1lb3V0KCgpPT57TS5yZXZva2VPYmplY3RVUkwocmUpfSwxMDApfWVsc2UgbmF2aWdhdG9yLm1zU2F2ZU9yT3BlbkJsb2Im'@;
put 'Jm5hdmlnYXRvci5tc1NhdmVPck9wZW5CbG9iKHYsWil9X2NyZWF0ZVR5cGVGb3JtYXR0ZXIobCl7bGV0IGE9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnt9O2lmKCF0UVtsXSl0aHJvdyBuZXcgRXJyb3IoYEV4cG9ydCBmb3JtYXQgdHlw'@;
put 'ZSAiJHtsfSIgaXMgbm90IHN1cHBvcnRlZC5gKTtyZXR1cm4gZnVuY3Rpb24gRzF0KGMsbCxhKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgdFFbY10/bmV3IHRRW2NdKGwsYSk6bnVsbH0obCxuZXcgazF0KHRoaXMuaG90KSxhKX1fY3JlYXRlQmxvYihsKXtsZXQgYT1udWxsO3JldHVybiB0'@;
put 'eXBlb2YgQmxvYjwidSImJihhPW5ldyBCbG9iKFtsLmV4cG9ydCgpXSx7dHlwZTpgJHtsLm9wdGlvbnMubWltZVR5cGV9O2NoYXJzZXQ9JHtsLm9wdGlvbnMuZW5jb2Rpbmd9YH0pKSxhfX1mdW5jdGlvbiBudyhjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gWDF0KGMpe3ZhciBsPWZ1bmN0aW9u'@;
put 'IEoxdChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJy'@;
put 'b3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHko'@;
put 'YyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y2xhc3MgSFR7Y29uc3RydWN0b3IobCxhKXtsZXR7aWQ6ZCxzdGF0ZWxlc3M6aD0hMH09YTtudyh0aGlzLCJob3QiLHZvaWQgMCksbncodGhpcywiaWQiLHZvaWQgMCksbnco'@;
put 'dGhpcywiZWxlbWVudHMiLFtdKSxudyh0aGlzLCJoaWRkZW4iLCExKSxudyh0aGlzLCJzdGF0ZUlkIiwiIiksbncodGhpcywic3RhdGUiLHZvaWQgMCksdGhpcy5ob3Q9bCx0aGlzLmlkPWQsdGhpcy5zdGF0ZUlkPWBGaWx0ZXJzLmNvbXBvbmVudC4ke3RoaXMuaWR9YCx0aGlzLnN0YXRlPWg/'@;
put 'bnVsbDp0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5yZWdpc3Rlck1hcCh0aGlzLnN0YXRlSWQsbmV3IHBQKX1nZXRFbGVtZW50cygpe3JldHVybiB0aGlzLmVsZW1lbnRzfXJlc2V0KCl7WW4odGhpcy5lbGVtZW50cyxsPT5sLnJlc2V0KCkpfWhpZGUoKXt0aGlzLmhpZGRlbj0hMH1zaG93'@;
put 'KCl7dGhpcy5oaWRkZW49ITF9aXNIaWRkZW4oKXtyZXR1cm4gbnVsbD09PXRoaXMuaG90fHx0aGlzLmhpZGRlbn1yZXN0b3JlU3RhdGUobCl7dGhpcy5zdGF0ZSYmdGhpcy5zZXRTdGF0ZSh0aGlzLnN0YXRlLmdldFZhbHVlQXRJbmRleChsKSl9c2V0U3RhdGUoKXt0aHJvdyBuZXcgRXJyb3Io'@;
put 'IlRoZSBzdGF0ZSBzZXR0aW5nIGxvZ2ljIGlzIG5vdCBpbXBsZW1lbnRlZCIpfXNhdmVTdGF0ZShsKXt0aGlzLnN0YXRlJiZ0aGlzLnN0YXRlLnNldFZhbHVlQXRJbmRleChsLHRoaXMuZ2V0U3RhdGUoKSl9Z2V0U3RhdGUoKXt0aHJvdyBuZXcgRXJyb3IoIlRoZSBzdGF0ZSBnYXRoZXJpbmcg'@;
put 'bG9naWMgaXMgbm90IGltcGxlbWVudGVkIil9ZGVzdHJveSgpe3RoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLnVucmVnaXN0ZXJNYXAodGhpcy5zdGF0ZUlkKSx0aGlzLmNsZWFyTG9jYWxIb29rcygpLFluKHRoaXMuZWxlbWVudHMsbD0+bC5kZXN0cm95KCkpLHRoaXMuc3RhdGU9bnVsbCx0'@;
put 'aGlzLmVsZW1lbnRzPW51bGwsdGhpcy5ob3Q9bnVsbH19VGwoSFQseTEpO2NvbnN0IE5UPXt9O2Z1bmN0aW9uIHI2KGMsbCl7aWYoIU5UW2NdKXRocm93IEVycm9yKGBGaWx0ZXIgY29uZGl0aW9uICIke2N9IiBkb2VzIG5vdCBleGlzdC5gKTtjb25zdHtjb25kaXRpb246YSxkZXNjcmlwdG9y'@;
put 'OmR9PU5UW2NdO2xldCBoPWw7cmV0dXJuIGQuaW5wdXRWYWx1ZXNEZWNvcmF0b3ImJihoPWQuaW5wdXRWYWx1ZXNEZWNvcmF0b3IoaCkpLGZ1bmN0aW9uKGYpe3JldHVybiBhLmFwcGx5KGYubWV0YS5pbnN0YW5jZSxbXS5jb25jYXQoW2ZdLFtoXSkpfX1mdW5jdGlvbiB3OShjKXtpZighTlRb'@;
put 'Y10pdGhyb3cgRXJyb3IoYEZpbHRlciBjb25kaXRpb24gIiR7Y30iIGRvZXMgbm90IGV4aXN0LmApO3JldHVybiBOVFtjXS5kZXNjcmlwdG9yfWZ1bmN0aW9uIGt1KGMsbCxhKXthLmtleT1jLE5UW2NdPXtjb25kaXRpb246bCxkZXNjcmlwdG9yOmF9fWNvbnN0IEUwPSJub25lIjtrdShFMCxm'@;
put 'dW5jdGlvbiBRMXQoKXtyZXR1cm4hMH0se25hbWU6d1AsaW5wdXRzQ291bnQ6MCxzaG93T3BlcmF0b3JzOiExfSk7Y29uc3QgVlQ9ImVtcHR5IjtrdShWVCxmdW5jdGlvbiBlZHQoYyl7cmV0dXJuIFVjKGMudmFsdWUpfSx7bmFtZTpGcSxpbnB1dHNDb3VudDowLHNob3dPcGVyYXRvcnM6ITB9'@;
put 'KTtjb25zdCBWRj0ibm90X2VtcHR5IjtrdShWRixmdW5jdGlvbiB0ZHQoYyxsKXtyZXR1cm4hcjYoVlQsbCkoYyl9LHtuYW1lOkhxLGlucHV0c0NvdW50OjAsc2hvd09wZXJhdG9yczohMH0pO2NvbnN0IEJUPSJlcSI7a3UoQlQsZnVuY3Rpb24gbmR0KGMsbCl7bGV0W2FdPWw7cmV0dXJuIGxj'@;
put 'KGMudmFsdWUpLnRvTG9jYWxlTG93ZXJDYXNlKGMubWV0YS5sb2NhbGUpPT09bGMoYSl9LHtuYW1lOk5xLGlucHV0c0NvdW50OjEsc2hvd09wZXJhdG9yczohMH0pO2NvbnN0IEJGPSJuZXEiO2t1KEJGLGZ1bmN0aW9uIHJkdChjLGwpe3JldHVybiFyNihCVCxsKShjKX0se25hbWU6VnEsaW5w'@;
put 'dXRzQ291bnQ6MSxzaG93T3BlcmF0b3JzOiEwfSksa3UoImd0IixmdW5jdGlvbiBpZHQoYyxsKXtsZXRbYV09bCxkPWE7cmV0dXJuIm51bWVyaWMiPT09Yy5tZXRhLnR5cGUmJihkPXBhcnNlRmxvYXQoZCwxMCkpLGMudmFsdWU+ZH0se25hbWU6WnEsaW5wdXRzQ291bnQ6MSxzaG93T3BlcmF0'@;
put 'b3JzOiEwfSksa3UoImd0ZSIsZnVuY3Rpb24gYWR0KGMsbCl7bGV0W2FdPWwsZD1hO3JldHVybiJudW1lcmljIj09PWMubWV0YS50eXBlJiYoZD1wYXJzZUZsb2F0KGQsMTApKSxjLnZhbHVlPj1kfSx7bmFtZTpXcSxpbnB1dHNDb3VudDoxLHNob3dPcGVyYXRvcnM6ITB9KSxrdSgibHQiLGZ1'@;
put 'bmN0aW9uIG9kdChjLGwpe2xldFthXT1sLGQ9YTtyZXR1cm4ibnVtZXJpYyI9PT1jLm1ldGEudHlwZSYmKGQ9cGFyc2VGbG9hdChkLDEwKSksYy52YWx1ZTxkfSx7bmFtZTpZcSxpbnB1dHNDb3VudDoxLHNob3dPcGVyYXRvcnM6ITB9KSxrdSgibHRlIixmdW5jdGlvbiBzZHQoYyxsKXtsZXRb'@;
put 'YV09bCxkPWE7cmV0dXJuIm51bWVyaWMiPT09Yy5tZXRhLnR5cGUmJihkPXBhcnNlRmxvYXQoZCwxMCkpLGMudmFsdWU8PWR9LHtuYW1lOkdxLGlucHV0c0NvdW50OjEsc2hvd09wZXJhdG9yczohMH0pO2NvbnN0IG5RPSJkYXRlX2FmdGVyIjtrdShuUSxmdW5jdGlvbiBsZHQoYyxsKXtsZXRb'@;
put 'YV09bDtjb25zdCBkPU9vKGMudmFsdWUsYy5tZXRhLmRhdGVGb3JtYXQpLGg9T28oYSxjLm1ldGEuZGF0ZUZvcm1hdCk7cmV0dXJuISghZC5pc1ZhbGlkKCl8fCFoLmlzVmFsaWQoKSkmJmQuZGlmZihoKT49MH0se25hbWU6cXEsaW5wdXRzQ291bnQ6MSxzaG93T3BlcmF0b3JzOiEwfSk7Y29u'@;
put 'c3QgclE9ImRhdGVfYmVmb3JlIjtrdShyUSxmdW5jdGlvbiBjZHQoYyxsKXtsZXRbYV09bDtjb25zdCBkPU9vKGMudmFsdWUsYy5tZXRhLmRhdGVGb3JtYXQpLGg9T28oYSxjLm1ldGEuZGF0ZUZvcm1hdCk7cmV0dXJuISghZC5pc1ZhbGlkKCl8fCFoLmlzVmFsaWQoKSkmJmQuZGlmZihoKTw9'@;
put 'MH0se25hbWU6WHEsaW5wdXRzQ291bnQ6MSxzaG93T3BlcmF0b3JzOiEwfSk7Y29uc3QgakY9ImJldHdlZW4iO2t1KGpGLGZ1bmN0aW9uIHVkdChjLGwpe2xldFthLGRdPWwsaD1hLGY9ZDtpZigibnVtZXJpYyI9PT1jLm1ldGEudHlwZSl7Y29uc3Qgdj1wYXJzZUZsb2F0KGgsMTApLE09cGFy'@;
put 'c2VGbG9hdChmLDEwKTtoPU1hdGgubWluKHYsTSksZj1NYXRoLm1heCh2LE0pfWVsc2UgaWYoImRhdGUiPT09Yy5tZXRhLnR5cGUpe2NvbnN0IHY9cjYoclEsW2ZdKSxNPXI2KG5RLFtoXSk7cmV0dXJuIHYoYykmJk0oYyl9cmV0dXJuIGMudmFsdWU+PWgmJmMudmFsdWU8PWZ9LHtuYW1lOiRx'@;
put 'LGlucHV0c0NvdW50OjIsc2hvd09wZXJhdG9yczohMH0pO2NvbnN0IFhnZT0ibm90X2JldHdlZW4iO2t1KFhnZSxmdW5jdGlvbiBkZHQoYyxsKXtyZXR1cm4hcjYoakYsbCkoYyl9LHtuYW1lOktxLGlucHV0c0NvdW50OjIsc2hvd09wZXJhdG9yczohMH0pO2NvbnN0IEpnZT0iYmVnaW5zX3dp'@;
put 'dGgiO2t1KEpnZSxmdW5jdGlvbiBoZHQoYyxsKXtsZXRbYV09bDtyZXR1cm4gbGMoYy52YWx1ZSkudG9Mb2NhbGVMb3dlckNhc2UoYy5tZXRhLmxvY2FsZSkuc3RhcnRzV2l0aChsYyhhKSl9LHtuYW1lOkJxLGlucHV0c0NvdW50OjEsc2hvd09wZXJhdG9yczohMH0pLGt1KCJlbmRzX3dpdGgi'@;
put 'LGZ1bmN0aW9uIGZkdChjLGwpe2xldFthXT1sO3JldHVybiBsYyhjLnZhbHVlKS50b0xvY2FsZUxvd2VyQ2FzZShjLm1ldGEubG9jYWxlKS5lbmRzV2l0aChsYyhhKSl9LHtuYW1lOmpxLGlucHV0c0NvdW50OjEsc2hvd09wZXJhdG9yczohMH0pO2NvbnN0IGlRPSJjb250YWlucyI7a3UoaVEs'@;
put 'ZnVuY3Rpb24gcGR0KGMsbCl7bGV0W2FdPWw7cmV0dXJuIGxjKGMudmFsdWUpLnRvTG9jYWxlTG93ZXJDYXNlKGMubWV0YS5sb2NhbGUpLmluZGV4T2YobGMoYSkpPj0wfSx7bmFtZTp6cSxpbnB1dHNDb3VudDoxLHNob3dPcGVyYXRvcnM6ITB9KTtjb25zdCBlNWU9Im5vdF9jb250YWlucyI7'@;
put 'a3UoZTVlLGZ1bmN0aW9uIGdkdChjLGwpe3JldHVybiFyNihpUSxsKShjKX0se25hbWU6VXEsaW5wdXRzQ291bnQ6MSxzaG93T3BlcmF0b3JzOiEwfSk7Y29uc3QgdDVlPSJkYXRlX3RvbW9ycm93IjtrdSh0NWUsZnVuY3Rpb24gbWR0KGMpe2NvbnN0IGw9T28oYy52YWx1ZSxjLm1ldGEuZGF0'@;
put 'ZUZvcm1hdCk7cmV0dXJuISFsLmlzVmFsaWQoKSYmbC5pc1NhbWUoT28oKS5zdWJ0cmFjdCgtMSwiZGF5cyIpLnN0YXJ0T2YoImRheSIpLCJkIil9LHtuYW1lOlFxLGlucHV0c0NvdW50OjB9KTtjb25zdCBuNWU9ImRhdGVfdG9kYXkiO2t1KG41ZSxmdW5jdGlvbiB2ZHQoYyl7Y29uc3QgbD1P'@;
put 'byhjLnZhbHVlLGMubWV0YS5kYXRlRm9ybWF0KTtyZXR1cm4hIWwuaXNWYWxpZCgpJiZsLmlzU2FtZShPbygpLnN0YXJ0T2YoImRheSIpLCJkIil9LHtuYW1lOkpxLGlucHV0c0NvdW50OjB9KTtjb25zdCByNWU9ImRhdGVfeWVzdGVyZGF5IjtrdShyNWUsZnVuY3Rpb24gYmR0KGMpe2NvbnN0'@;
put 'IGw9T28oYy52YWx1ZSxjLm1ldGEuZGF0ZUZvcm1hdCk7cmV0dXJuISFsLmlzVmFsaWQoKSYmbC5pc1NhbWUoT28oKS5zdWJ0cmFjdCgxLCJkYXlzIikuc3RhcnRPZigiZGF5IiksImQiKX0se25hbWU6ZVgsaW5wdXRzQ291bnQ6MH0pO2NvbnN0IGE1ZT17bnVtZXJpYzpbRTAsc3MsVlQsVkYs'@;
put 'c3MsQlQsQkYsc3MsImd0IiwiZ3RlIiwibHQiLCJsdGUiLGpGLFhnZV0sdGV4dDpbRTAsc3MsVlQsVkYsc3MsQlQsQkYsc3MsSmdlLCJlbmRzX3dpdGgiLHNzLGlRLGU1ZV0sZGF0ZTpbRTAsc3MsVlQsVkYsc3MsQlQsQkYsc3MsclEsblEsakYsc3MsdDVlLG41ZSxyNWVdfTtmdW5jdGlvbiBq'@;
put 'VChjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gQ2R0KGMpe3ZhciBsPWZ1bmN0aW9uIFNkdChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7'@;
put 'aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9'@;
put 'PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y29uc3QgYVE9ImJ1aWx0IixvUT0iYnVpbGRpbmciLG81ZT1bImNsaWNrIiwiaW5wdXQi'@;
put 'LCJrZXlkb3duIiwia2V5cHJlc3MiLCJrZXl1cCIsImZvY3VzIiwiYmx1ciIsImNoYW5nZSJdO2NsYXNzIEhoe3N0YXRpYyBnZXQgREVGQVVMVFMoKXtyZXR1cm4gbjMoe2NsYXNzTmFtZToiIix2YWx1ZToiIix0YWdOYW1lOiJkaXYiLGNoaWxkcmVuOltdLHdyYXBJdDohMH0pfWNvbnN0cnVj'@;
put 'dG9yKGwsYSl7alQodGhpcywiaG90Iix2b2lkIDApLGpUKHRoaXMsImV2ZW50TWFuYWdlciIsbmV3IGoyKHRoaXMpKSxqVCh0aGlzLCJvcHRpb25zIix2b2lkIDApLGpUKHRoaXMsIl9lbGVtZW50Iix2b2lkIDApLGpUKHRoaXMsImJ1aWxkU3RhdGUiLHZvaWQgMCksdGhpcy5ob3Q9bCx0aGlz'@;
put 'Lm9wdGlvbnM9RXUoSGguREVGQVVMVFMsYSksdGhpcy5fZWxlbWVudD10aGlzLmhvdC5yb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0aGlzLm9wdGlvbnMud3JhcEl0PyJkaXYiOnRoaXMub3B0aW9ucy50YWdOYW1lKX1zZXRWYWx1ZShsKXt0aGlzLm9wdGlvbnMudmFsdWU9bCx0aGlzLnVw'@;
put 'ZGF0ZSgpfWdldFZhbHVlKCl7cmV0dXJuIHRoaXMub3B0aW9ucy52YWx1ZX1nZXQgZWxlbWVudCgpe3JldHVybiB0aGlzLmJ1aWxkU3RhdGU9PT1vUT90aGlzLl9lbGVtZW50OnRoaXMuYnVpbGRTdGF0ZT09PWFRPyh0aGlzLnVwZGF0ZSgpLHRoaXMuX2VsZW1lbnQpOih0aGlzLmJ1aWxkU3Rh'@;
put 'dGU9b1EsdGhpcy5idWlsZCgpLHRoaXMuYnVpbGRTdGF0ZT1hUSx0aGlzLl9lbGVtZW50KX1pc0J1aWx0KCl7cmV0dXJuIHRoaXMuYnVpbGRTdGF0ZT09PWFRfXRyYW5zbGF0ZUlmUG9zc2libGUobCl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBsJiZsLnN0YXJ0c1dpdGgocTEpP3RoaXMuaG90'@;
put 'LmdldFRyYW5zbGF0ZWRQaHJhc2UobCk6bH1idWlsZCgpe2NvbnN0IGw9KGEsZCk9Pnt0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGEsZCxoPT50aGlzLnJ1bkxvY2FsSG9va3MoZCxoLHRoaXMpKX07aWYodGhpcy5idWlsZFN0YXRlfHwodGhpcy5idWlsZFN0YXRlPW9RKSx0'@;
put 'aGlzLl9lbGVtZW50LnNldEF0dHJpYnV0ZSgiZGF0YS1ob3QtaW5wdXQiLCEwKSx2b2lkIDAhPT10aGlzLm9wdGlvbnMudGFiSW5kZXgmJnRoaXMuX2VsZW1lbnQuc2V0QXR0cmlidXRlKCJ0YWJpbmRleCIsdGhpcy5vcHRpb25zLnRhYkluZGV4KSx2b2lkIDAhPT10aGlzLm9wdGlvbnMucm9s'@;
put 'ZSYmdGhpcy5fZWxlbWVudC5zZXRBdHRyaWJ1dGUoInJvbGUiLHRoaXMub3B0aW9ucy5yb2xlKSx0aGlzLm9wdGlvbnMuY2xhc3NOYW1lJiZUaSh0aGlzLl9lbGVtZW50LHRoaXMub3B0aW9ucy5jbGFzc05hbWUpLHRoaXMub3B0aW9ucy5jaGlsZHJlbi5sZW5ndGgpWW4odGhpcy5vcHRpb25z'@;
put 'LmNoaWxkcmVuLGE9PnRoaXMuX2VsZW1lbnQuYXBwZW5kQ2hpbGQoYS5lbGVtZW50KSk7ZWxzZSBpZih0aGlzLm9wdGlvbnMud3JhcEl0KXtjb25zdCBhPXRoaXMuaG90LnJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50KHRoaXMub3B0aW9ucy50YWdOYW1lKTthLnNldEF0dHJpYnV0ZSgiZGF0'@;
put 'YS1ob3QtaW5wdXQiLCEwKSxYbyh0aGlzLm9wdGlvbnMsKGQsaCk9Pnt2b2lkIDAhPT1hW2hdJiYiY2xhc3NOYW1lIiE9PWgmJiJ0YWdOYW1lIiE9PWgmJiJjaGlsZHJlbiIhPT1oJiYoYVtoXT10aGlzLnRyYW5zbGF0ZUlmUG9zc2libGUoZCkpfSksdGhpcy5fZWxlbWVudC5hcHBlbmRDaGls'@;
put 'ZChhKSxZbihvNWUsZD0+bChhLGQpKX1lbHNlIFluKG81ZSxhPT5sKHRoaXMuX2VsZW1lbnQsYSkpfXVwZGF0ZSgpe31yZXNldCgpe3RoaXMub3B0aW9ucy52YWx1ZT0iIix0aGlzLnVwZGF0ZSgpfXNob3coKXt0aGlzLmVsZW1lbnQuc3R5bGUuZGlzcGxheT0iIn1oaWRlKCl7dGhpcy5lbGVt'@;
put 'ZW50LnN0eWxlLmRpc3BsYXk9Im5vbmUifWZvY3VzKCl7fWRlc3Ryb3koKXt0aGlzLmV2ZW50TWFuYWdlci5kZXN0cm95KCksdGhpcy5ldmVudE1hbmFnZXI9bnVsbCx0aGlzLmhvdD1udWxsLHRoaXMuX2VsZW1lbnQucGFyZW50Tm9kZSYmdGhpcy5fZWxlbWVudC5wYXJlbnROb2RlLnJlbW92'@;
put 'ZUNoaWxkKHRoaXMuX2VsZW1lbnQpLHRoaXMuX2VsZW1lbnQ9bnVsbH19ZnVuY3Rpb24gczVlKGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX1mdW5jdGlv'@;
put 'biB6RihjLGwpe3JldHVybiBjLmdldChzUShjLGwpKX1mdW5jdGlvbiBzUShjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBw'@;
put 'cmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9VGwoSGgseTEpO3ZhciBydz1uZXcgV2Vha01hcCxsNWU9bmV3IFdlYWtTZXQ7Y2xhc3MgaTYgZXh0ZW5kcyBIaHtzdGF0aWMgZ2V0IERFRkFVTFRTKCl7cmV0dXJuIG4zKHtwbGFjZWhvbGRlcjoiIix0eXBlOiJ0ZXh0Iix0YWdOYW1lOiJpbnB1dCIs'@;
put 'dGFiSW5kZXg6LTF9KX1jb25zdHJ1Y3RvcihsLGEpe3N1cGVyKGwsRXUoaTYuREVGQVVMVFMsYSkpLGZ1bmN0aW9uIE1kdChjLGwpe3M1ZShjLGwpLGwuYWRkKGMpfSh0aGlzLGw1ZSksZnVuY3Rpb24geGR0KGMsbCxhKXtzNWUoYyxsKSxsLnNldChjLGEpfSh0aGlzLHJ3LHZvaWQgMCksdGhp'@;
put 'cy5yZWdpc3Rlckhvb2tzKCl9cmVnaXN0ZXJIb29rcygpe3RoaXMuYWRkTG9jYWxIb29rKCJrZXl1cCIsbD0+c1EobDVlLHRoaXMsVGR0KS5jYWxsKHRoaXMsbCkpfWJ1aWxkKCl7c3VwZXIuYnVpbGQoKTtjb25zdCBsPXRoaXMuaG90LnJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYi'@;
put 'KTsoZnVuY3Rpb24gRWR0KGMsbCxhKXtjLnNldChzUShjLGwpLGEpfSkocncsdGhpcyx0aGlzLl9lbGVtZW50LmZpcnN0Q2hpbGQpLFRpKHRoaXMuX2VsZW1lbnQsImh0VUlJbnB1dCIpLFRpKGwsImh0VUlJbnB1dEljb24iKSx0aGlzLl9lbGVtZW50LmFwcGVuZENoaWxkKGwpLHRoaXMudXBk'@;
put 'YXRlKCl9dXBkYXRlKCl7dGhpcy5pc0J1aWx0KCkmJih6Rihydyx0aGlzKS50eXBlPXRoaXMub3B0aW9ucy50eXBlLHpGKHJ3LHRoaXMpLnBsYWNlaG9sZGVyPXRoaXMudHJhbnNsYXRlSWZQb3NzaWJsZSh0aGlzLm9wdGlvbnMucGxhY2Vob2xkZXIpLHpGKHJ3LHRoaXMpLnZhbHVlPXRoaXMu'@;
put 'dHJhbnNsYXRlSWZQb3NzaWJsZSh0aGlzLm9wdGlvbnMudmFsdWUpKX1mb2N1cygpe3RoaXMuaXNCdWlsdCgpJiZ6Rihydyx0aGlzKS5mb2N1cygpfX1mdW5jdGlvbiBUZHQoYyl7dGhpcy5vcHRpb25zLnZhbHVlPWMudGFyZ2V0LnZhbHVlfWZ1bmN0aW9uIHpUKGMsbCxhKXtjNWUoYyxsKSxs'@;
put 'LnNldChjLGEpfWZ1bmN0aW9uIGM1ZShjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9ZnVuY3Rpb24gaXcoYyxsLGEpe3JldHVybiBjLnNldChVVChjLGwp'@;
put 'LGEpLGF9ZnVuY3Rpb24gJGMoYyxsKXtyZXR1cm4gYy5nZXQoVVQoYyxsKSl9ZnVuY3Rpb24gVVQoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxl'@;
put 'bWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfXZhciBnMD1uZXcgV2Vha01hcCxVRj1uZXcgV2Vha01hcCxaRj1uZXcgV2Vha01hcCxsUT1uZXcgV2Vha01hcCxXRj1uZXcgV2Vha01hcCxZRj1uZXcgV2Vha1NldDtjbGFzcyBaVCBleHRlbmRzIEhoe3N0YXRpYyBnZXQgREVG'@;
put 'QVVMVFMoKXtyZXR1cm4gbjMoe2NsYXNzTmFtZToiaHRVSVNlbGVjdCIsd3JhcEl0OiExLHRhYkluZGV4Oi0xfSl9Y29uc3RydWN0b3IobCxhKXtzdXBlcihsLEV1KFpULkRFRkFVTFRTLGEpKSxmdW5jdGlvbiBBZHQoYyxsKXtjNWUoYyxsKSxsLmFkZChjKX0odGhpcyxZRikselQodGhpcyxn'@;
put 'MCxudWxsKSx6VCh0aGlzLFVGLFtdKSx6VCh0aGlzLFpGLHZvaWQgMCkselQodGhpcyxsUSx2b2lkIDApLHpUKHRoaXMsV0Ysdm9pZCAwKSx0aGlzLnJlZ2lzdGVySG9va3MoKX1nZXRNZW51KCl7cmV0dXJuICRjKGcwLHRoaXMpfXJlZ2lzdGVySG9va3MoKXt0aGlzLmFkZExvY2FsSG9vaygi'@;
put 'Y2xpY2siLCgpPT5VVChZRix0aGlzLElkdCkuY2FsbCh0aGlzKSl9c2V0SXRlbXMobCl7aXcoVUYsdGhpcyx0aGlzLnRyYW5zbGF0ZU5hbWVzKGwpKSwkYyhnMCx0aGlzKSYmJGMoZzAsdGhpcykuc2V0TWVudUl0ZW1zKCRjKFVGLHRoaXMpKX10cmFuc2xhdGVOYW1lcyhsKXtyZXR1cm4gWW4o'@;
put 'bCxhPT57YS5uYW1lPXRoaXMudHJhbnNsYXRlSWZQb3NzaWJsZShhLm5hbWUpfSksbH1idWlsZCgpe3N1cGVyLmJ1aWxkKCksaXcoZzAsdGhpcyxuZXcgcV8odGhpcy5ob3Qse2NsYXNzTmFtZToiaHRTZWxlY3RVSSBodEZpbHRlcnNDb25kaXRpb25zTWVudSIsa2VlcEluVmlld3BvcnQ6ITEs'@;
put 'c3RhbmRhbG9uZTohMCxjb250YWluZXI6dGhpcy5vcHRpb25zLm1lbnVDb250YWluZXJ9KSksJGMoZzAsdGhpcykuc2V0TWVudUl0ZW1zKCRjKFVGLHRoaXMpKTtjb25zdCBsPW5ldyBIaCh0aGlzLmhvdCx7Y2xhc3NOYW1lOiJodFVJU2VsZWN0Q2FwdGlvbiJ9KSxhPW5ldyBIaCh0aGlzLmhv'@;
put 'dCx7Y2xhc3NOYW1lOiJodFVJU2VsZWN0RHJvcGRvd24ifSk7aXcoWkYsdGhpcyxsKSxpdyhsUSx0aGlzLGwuZWxlbWVudCksaXcoV0YsdGhpcyxhKSx0aGlzLmhvdC5nZXRTZXR0aW5ncygpLmFyaWFUYWdzJiYodm8oYS5lbGVtZW50LFtWNygpXSksdm8odGhpcy5fZWxlbWVudCxbWyJyb2xl'@;
put 'IiwibGlzdGJveCJdXSkpLFluKFtsLGFdLGQ9PnRoaXMuX2VsZW1lbnQuYXBwZW5kQ2hpbGQoZC5lbGVtZW50KSksJGMoZzAsdGhpcykuYWRkTG9jYWxIb29rKCJzZWxlY3QiLGQ9PlVUKFlGLHRoaXMsa2R0KS5jYWxsKHRoaXMsZCkpLCRjKGcwLHRoaXMpLmFkZExvY2FsSG9vaygiYWZ0ZXJD'@;
put 'bG9zZSIsKCk9PlVUKFlGLHRoaXMsRGR0KS5jYWxsKHRoaXMpKSx0aGlzLnVwZGF0ZSgpfXVwZGF0ZSgpe2lmKCF0aGlzLmlzQnVpbHQoKSlyZXR1cm47bGV0IGw7bD10aGlzLm9wdGlvbnMudmFsdWU/dGhpcy5vcHRpb25zLnZhbHVlLm5hbWU6JGMoZzAsdGhpcykuaG90LmdldFRyYW5zbGF0'@;
put 'ZWRQaHJhc2Uod1ApLCRjKGxRLHRoaXMpLnRleHRDb250ZW50PWwsc3VwZXIudXBkYXRlKCl9b3Blbk9wdGlvbnMoKXtjb25zdCBsPXRoaXMuZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTskYyhnMCx0aGlzKSYmKCRjKGcwLHRoaXMpLm9wZW4oKSwkYyhnMCx0aGlzKS5zZXRQb3Np'@;
put 'dGlvbih7bGVmdDp0aGlzLmhvdC5pc0x0cigpP2wubGVmdC01OmwubGVmdC0zMSx0b3A6bC50b3AtMSx3aWR0aDpsLndpZHRoLGhlaWdodDpsLmhlaWdodH0pLCRjKGcwLHRoaXMpLmdldE5hdmlnYXRvcigpLnRvRmlyc3RJdGVtKCksJGMoZzAsdGhpcykuZ2V0S2V5Ym9hcmRTaG9ydGN1dHND'@;
put 'dHJsKCkuYWRkQ3VzdG9tU2hvcnRjdXRzKFt7a2V5czpbWyJUYWIiXSxbIlNoaWZ0IiwiVGFiIl1dLGNhbGxiYWNrOmE9Pnt0aGlzLmNsb3NlT3B0aW9ucygpLHRoaXMucnVuTG9jYWxIb29rcygidGFiS2V5ZG93biIsYSl9fSx7a2V5czpbWyJDb250cm9sL01ldGEiLCJBIl1dLGNhbGxiYWNr'@;
put 'OigpPT4hMX1dKSl9Y2xvc2VPcHRpb25zKCl7JGMoZzAsdGhpcykmJiRjKGcwLHRoaXMpLmNsb3NlKCl9Zm9jdXMoKXt0aGlzLmlzQnVpbHQoKSYmdGhpcy5lbGVtZW50LmZvY3VzKCl9ZGVzdHJveSgpeyRjKGcwLHRoaXMpJiYoJGMoZzAsdGhpcykuZGVzdHJveSgpLGl3KGcwLHRoaXMsbnVs'@;
put 'bCkpLCRjKFpGLHRoaXMpJiYkYyhaRix0aGlzKS5kZXN0cm95KCksJGMoV0YsdGhpcykmJiRjKFdGLHRoaXMpLmRlc3Ryb3koKSxzdXBlci5kZXN0cm95KCl9fWZ1bmN0aW9uIGtkdChjKXtjLm5hbWUhPT1zcyYmKHRoaXMub3B0aW9ucy52YWx1ZT1jLHRoaXMudXBkYXRlKCksdGhpcy5ydW5M'@;
put 'b2NhbEhvb2tzKCJzZWxlY3QiLHRoaXMub3B0aW9ucy52YWx1ZSkpfWZ1bmN0aW9uIERkdCgpe3RoaXMucnVuTG9jYWxIb29rcygiYWZ0ZXJDbG9zZSIpfWZ1bmN0aW9uIElkdCgpe3RoaXMub3Blbk9wdGlvbnMoKX1mdW5jdGlvbiB1NWUoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIE9kdChj'@;
put 'KXt2YXIgbD1mdW5jdGlvbiBQZHQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0'@;
put 'aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0'@;
put 'LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWZ1bmN0aW9uIGQ1ZShjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8'@;
put 'Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9dmFyIGNRPW5ldyBXZWFrU2V0O2NsYXNzIHVRIGV4dGVuZHMgSFR7Y29uc3RydWN0b3IobCxhKXtzdXBlcihsLHtpZDphLmlkLHN0YXRlbGVzczohMX0pLGZ1'@;
put 'bmN0aW9uIFJkdChjLGwpeyhmdW5jdGlvbiBMZHQoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfSkoYyxsKSxsLmFkZChjKX0odGhpcyxjUSksdTVlKHRo'@;
put 'aXMsIm5hbWUiLCIiKSx1NWUodGhpcywiYWRkU2VwYXJhdG9yIiwhMSksdGhpcy5uYW1lPWEubmFtZSx0aGlzLmFkZFNlcGFyYXRvcj1hLmFkZFNlcGFyYXRvcix0aGlzLmVsZW1lbnRzLnB1c2gobmV3IFpUKHRoaXMuaG90LHttZW51Q29udGFpbmVyOmEubWVudUNvbnRhaW5lcn0pKSx0aGlz'@;
put 'LmVsZW1lbnRzLnB1c2gobmV3IGk2KHRoaXMuaG90LHtwbGFjZWhvbGRlcjpjWH0pKSx0aGlzLmVsZW1lbnRzLnB1c2gobmV3IGk2KHRoaXMuaG90LHtwbGFjZWhvbGRlcjp1WH0pKSx0aGlzLnJlZ2lzdGVySG9va3MoKX1yZWdpc3Rlckhvb2tzKCl7dGhpcy5nZXRTZWxlY3RFbGVtZW50KCku'@;
put 'YWRkTG9jYWxIb29rKCJzZWxlY3QiLGw9PmQ1ZShjUSx0aGlzLEZkdCkuY2FsbCh0aGlzLGwpKS5hZGRMb2NhbEhvb2soImFmdGVyQ2xvc2UiLCgpPT50aGlzLnJ1bkxvY2FsSG9va3MoImFmdGVyQ2xvc2UiKSkuYWRkTG9jYWxIb29rKCJ0YWJLZXlkb3duIixsPT50aGlzLnJ1bkxvY2FsSG9v'@;
put 'a3MoInNlbGVjdFRhYktleWRvd24iLGwpKSxZbih0aGlzLmdldElucHV0RWxlbWVudHMoKSxsPT57bC5hZGRMb2NhbEhvb2soImtleWRvd24iLGE9PmQ1ZShjUSx0aGlzLEhkdCkuY2FsbCh0aGlzLGEpKX0pfXNldFN0YXRlKGwpe2lmKHRoaXMucmVzZXQoKSwhbClyZXR1cm47Y29uc3QgYT1u'@;
put 'MyhsLmNvbW1hbmQpO2EubmFtZS5zdGFydHNXaXRoKFdjKSYmKGEubmFtZT10aGlzLmhvdC5nZXRUcmFuc2xhdGVkUGhyYXNlKGEubmFtZSkpLHRoaXMuZ2V0U2VsZWN0RWxlbWVudCgpLnNldFZhbHVlKGEpLFluKGwuYXJncywoZCxoKT0+e2lmKGg+YS5pbnB1dHNDb3VudC0xKXJldHVybiEx'@;
put 'O2NvbnN0IGY9dGhpcy5nZXRJbnB1dEVsZW1lbnQoaCk7Zi5zZXRWYWx1ZShkKSxmW2EuaW5wdXRzQ291bnQ+aD8ic2hvdyI6ImhpZGUiXSgpLGh8fHRoaXMuaG90Ll9yZWdpc3RlclRpbWVvdXQoKCk9PmYuZm9jdXMoKSwxMCl9KX1nZXRTdGF0ZSgpe2NvbnN0IGw9dGhpcy5nZXRTZWxlY3RF'@;
put 'bGVtZW50KCkuZ2V0VmFsdWUoKXx8dzkoRTApLGE9W107cmV0dXJuIFluKHRoaXMuZ2V0SW5wdXRFbGVtZW50cygpLChkLGgpPT57bC5pbnB1dHNDb3VudD5oJiZhLnB1c2goZC5nZXRWYWx1ZSgpKX0pLHtjb21tYW5kOmwsYXJnczphfX11cGRhdGVTdGF0ZShsLGEpe2NvbnN0IGQ9dzkobD9s'@;
put 'Lm5hbWU6RTApO3RoaXMuc3RhdGUuc2V0VmFsdWVBdEluZGV4KGEse2NvbW1hbmQ6ZCxhcmdzOmw/bC5hcmdzOltdfSksbHx8WW4odGhpcy5nZXRJbnB1dEVsZW1lbnRzKCksaD0+aC5zZXRWYWx1ZShudWxsKSl9Z2V0U2VsZWN0RWxlbWVudCgpe3JldHVybiB0aGlzLmVsZW1lbnRzLmZpbHRl'@;
put 'cihsPT5sIGluc3RhbmNlb2YgWlQpWzBdfWdldElucHV0RWxlbWVudCgpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTowO3JldHVybiB0aGlzLmdldElucHV0RWxlbWVudHMoKVtsXX1nZXRJbnB1dEVsZW1lbnRzKCl7cmV0dXJu'@;
put 'IHRoaXMuZWxlbWVudHMuZmlsdGVyKGw9PmwgaW5zdGFuY2VvZiBpNil9Z2V0TWVudUl0ZW1EZXNjcmlwdG9yKCl7cmV0dXJue2tleTp0aGlzLmlkLG5hbWU6dGhpcy5uYW1lLGlzQ29tbWFuZDohMSxkaXNhYmxlU2VsZWN0aW9uOiEwLGhpZGRlbjooKT0+dGhpcy5pc0hpZGRlbigpLHJlbmRl'@;
put 'cmVyOihsLGEsZCxoLGYsdik9PntUaShhLnBhcmVudE5vZGUsImh0RmlsdGVyc01lbnVDb25kaXRpb24iKSx0aGlzLmFkZFNlcGFyYXRvciYmVGkoYS5wYXJlbnROb2RlLCJib3JkZXIiKTtjb25zdCBNPXRoaXMuaG90LnJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtyZXR1cm4g'@;
put 'VGkoTSwiaHRGaWx0ZXJzTWVudUxhYmVsIiksTS50ZXh0Q29udGVudD12LGEuYXBwZW5kQ2hpbGQoTSksYS5wYXJlbnRFbGVtZW50Lmhhc0F0dHJpYnV0ZSgiZ2hvc3QtdGFibGUiKXx8WW4odGhpcy5lbGVtZW50cyxEPT5hLmFwcGVuZENoaWxkKEQuZWxlbWVudCkpLGF9fX1yZXNldCgpe2Nv'@;
put 'bnN0IGw9dGhpcy5ob3QuZ2V0UGx1Z2luKCJmaWx0ZXJzIikuZ2V0U2VsZWN0ZWRDb2x1bW4oKTtsZXQgYT1bdzkoRTApXTtpZihudWxsIT09bCl7Y29uc3R7dmlzdWFsSW5kZXg6ZH09bDthPWZ1bmN0aW9uIHdkdChjKXtjb25zdCBsPVtdO2xldCBhPWM7cmV0dXJuIGE1ZVthXXx8KGE9InRl'@;
put 'eHQiKSxZbihhNWVbYV0sZD0+e2xldCBoO2g9ZD09PXNzP3tuYW1lOnNzfTpuMyh3OShkKSksbC5wdXNoKGgpfSksbH0odGhpcy5ob3QuZ2V0RGF0YVR5cGUoMCxkLHRoaXMuaG90LmNvdW50Um93cygpLGQpKX1Zbih0aGlzLmdldElucHV0RWxlbWVudHMoKSxkPT5kLmhpZGUoKSksdGhpcy5n'@;
put 'ZXRTZWxlY3RFbGVtZW50KCkuc2V0SXRlbXMoYSksc3VwZXIucmVzZXQoKSx0aGlzLmdldFNlbGVjdEVsZW1lbnQoKS5zZXRWYWx1ZShhWzBdKX19ZnVuY3Rpb24gRmR0KGMpe1luKHRoaXMuZ2V0SW5wdXRFbGVtZW50cygpLChsLGEpPT57bFtjLmlucHV0c0NvdW50PmE/InNob3ciOiJoaWRl'@;
put 'Il0oKSwwPT09YSYmdGhpcy5ob3QuX3JlZ2lzdGVyVGltZW91dCgoKT0+bC5mb2N1cygpLDEwKX0pLHRoaXMucnVuTG9jYWxIb29rcygiY2hhbmdlIixjKX1mdW5jdGlvbiBIZHQoYyl7dV8oYy5rZXlDb2RlLCJFU0NBUEUiKSYmKHRoaXMucnVuTG9jYWxIb29rcygiY2FuY2VsIiksQjIoYykp'@;
put 'fWNvbnN0IFdUPXt9O2Z1bmN0aW9uIFZkdChjKXtyZXR1cm4gV1RbY10ubmFtZX1mdW5jdGlvbiBkUShjLGwsYSl7V1RbY109e25hbWU6bCxmdW5jOmF9fWNvbnN0IGE2PSJjb25qdW5jdGlvbiI7ZFEoYTYsclgsZnVuY3Rpb24gamR0KGMsbCl7cmV0dXJuIGMuZXZlcnkoYT0+YS5mdW5jKGwp'@;
put 'KX0pO2NvbnN0IEdGPSJkaXNqdW5jdGlvbiI7ZFEoR0YsQ1AsZnVuY3Rpb24gVWR0KGMsbCl7cmV0dXJuIGMuc29tZShhPT5hLmZ1bmMobCkpfSk7Y29uc3QgaFE9ImRpc2p1bmN0aW9uV2l0aEV4dHJhQ29uZGl0aW9uIjtmdW5jdGlvbiBoNWUoYyxsLGEpeyhmdW5jdGlvbiBZZHQoYyxsKXtp'@;
put 'ZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfSkoYyxsKSxsLnNldChjLGEpfWZ1bmN0aW9uIFlUKGMsbCl7cmV0dXJuIGMuZ2V0KHA1ZShjLGwpKX1mdW5jdGlvbiBm'@;
put 'NWUoYyxsLGEpe3JldHVybiBjLnNldChwNWUoYyxsKSxhKSxhfWZ1bmN0aW9uIHA1ZShjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlz'@;
put 'IG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9ZFEoaFEsQ1AsZnVuY3Rpb24gV2R0KGMsbCl7aWYoYy5sZW5ndGg8Myl0aHJvdyBFcnJvcigiT3BlcmF0aW9uIGRvZXNuJ3Qgd29yayBvbiBsZXNzIHRoZW4gdGhyZWUgY29uZGl0aW9ucy4iKTtyZXR1cm4gYy5zbGljZSgwLGMubGVuZ3Ro'@;
put 'LTEpLnNvbWUoYT0+YS5mdW5jKGwpKSYmY1tjLmxlbmd0aC0xXS5mdW5jKGwpfSk7dmFyIGF3PW5ldyBXZWFrTWFwLGZRPW5ldyBXZWFrTWFwO2NsYXNzICRGIGV4dGVuZHMgSGh7c3RhdGljIGdldCBERUZBVUxUUygpe3JldHVybiBuMyh7dHlwZToicmFkaW8iLHRhZ05hbWU6ImlucHV0Iixj'@;
put 'bGFzc05hbWU6Imh0VUlSYWRpbyIsbGFiZWw6e319KX1jb25zdHJ1Y3RvcihsLGEpe3N1cGVyKGwsRXUoJEYuREVGQVVMVFMsYSkpLGg1ZSh0aGlzLGF3LHZvaWQgMCksaDVlKHRoaXMsZlEsdm9pZCAwKX1idWlsZCgpe3N1cGVyLmJ1aWxkKCk7Y29uc3QgbD10aGlzLmhvdC5yb290RG9jdW1l'@;
put 'bnQuY3JlYXRlRWxlbWVudCgibGFiZWwiKTtsLnRleHRDb250ZW50PXRoaXMudHJhbnNsYXRlSWZQb3NzaWJsZSh0aGlzLm9wdGlvbnMubGFiZWwudGV4dENvbnRlbnQpLGwuaHRtbEZvcj10aGlzLnRyYW5zbGF0ZUlmUG9zc2libGUodGhpcy5vcHRpb25zLmxhYmVsLmh0bWxGb3IpLGY1ZShm'@;
put 'USx0aGlzLGwpLGY1ZShhdyx0aGlzLHRoaXMuX2VsZW1lbnQuZmlyc3RDaGlsZCksWVQoYXcsdGhpcykuY2hlY2tlZD10aGlzLm9wdGlvbnMuY2hlY2tlZCx0aGlzLl9lbGVtZW50LmFwcGVuZENoaWxkKGwpLHRoaXMudXBkYXRlKCl9dXBkYXRlKCl7dGhpcy5pc0J1aWx0KCkmJihZVChmUSx0'@;
put 'aGlzKS50ZXh0Q29udGVudD10aGlzLnRyYW5zbGF0ZUlmUG9zc2libGUodGhpcy5vcHRpb25zLmxhYmVsLnRleHRDb250ZW50KSl9aXNDaGVja2VkKCl7cmV0dXJuISF0aGlzLmlzQnVpbHQoKSYmWVQoYXcsdGhpcykuY2hlY2tlZH1zZXRDaGVja2VkKCl7bGV0IGw9IShhcmd1bWVudHMubGVu'@;
put 'Z3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSl8fGFyZ3VtZW50c1swXTt0aGlzLmlzQnVpbHQoKSYmKFlUKGF3LHRoaXMpLmNoZWNrZWQ9bCl9Zm9jdXMoKXt0aGlzLmlzQnVpbHQoKSYmWVQoYXcsdGhpcykuZm9jdXMoKX19dmFyIG01ZT1uZXcgV2Vha1NldDtjbGFzcyBRZHQgZXh0ZW5k'@;
put 'cyBIVHtjb25zdHJ1Y3RvcihsLGEpe3N1cGVyKGwse2lkOmEuaWQsc3RhdGVsZXNzOiExfSksZnVuY3Rpb24gR2R0KGMsbCl7KGZ1bmN0aW9uICRkdChjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVu'@;
put 'dHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9KShjLGwpLGwuYWRkKGMpfSh0aGlzLG01ZSksZnVuY3Rpb24gS2R0KGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBxZHQoYyl7dmFyIGw9ZnVuY3Rpb24gWGR0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5'@;
put 'bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1'@;
put 'cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9'@;
put 'KTpjW2xdPWEsY30odGhpcywibmFtZSIsIiIpLHRoaXMubmFtZT1hLm5hbWUsdGhpcy5idWlsZE9wZXJhdG9yc0VsZW1lbnQoKX1nZXRNZW51SXRlbURlc2NyaXB0b3IoKXtyZXR1cm57a2V5OnRoaXMuaWQsbmFtZTp0aGlzLm5hbWUsaXNDb21tYW5kOiExLGRpc2FibGVTZWxlY3Rpb246ITAs'@;
put 'aGlkZGVuOigpPT50aGlzLmlzSGlkZGVuKCkscmVuZGVyZXI6KGwsYSk9PihUaShhLnBhcmVudE5vZGUsImh0RmlsdGVyc01lbnVPcGVyYXRvcnMiKSxZbih0aGlzLmVsZW1lbnRzLGQ9PmEuYXBwZW5kQ2hpbGQoZC5lbGVtZW50KSksYSl9fWJ1aWxkT3BlcmF0b3JzRWxlbWVudCgpe2NvbnN0'@;
put 'IGw9W2E2LEdGXTtZbihsLGE9Pntjb25zdCBkPW5ldyAkRih0aGlzLmhvdCx7bmFtZToib3BlcmF0b3IiLGxhYmVsOntodG1sRm9yOmEsdGV4dENvbnRlbnQ6VmR0KGEpfSx2YWx1ZTphLGNoZWNrZWQ6YT09PWxbMF0saWQ6YX0pO2QuYWRkTG9jYWxIb29rKCJjaGFuZ2UiLGg9PmZ1bmN0aW9u'@;
put 'IEpkdChjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9KG01ZSx0aGlzLGVodCku'@;
put 'Y2FsbCh0aGlzLGgpKSx0aGlzLmVsZW1lbnRzLnB1c2goZCl9KX1zZXRDaGVja2VkKGwpe2lmKHRoaXMuZWxlbWVudHMubGVuZ3RoPGwpdGhyb3cgRXJyb3IoZ2xgUmFkaW8gYnV0dG9uIHdpdGggaW5kZXggJHtsfSBkb2Vzbid0IGV4aXN0LmApO1luKHRoaXMuZWxlbWVudHMsKGEsZCk9Pnth'@;
put 'LnNldENoZWNrZWQoZD09PWwpfSl9Z2V0QWN0aXZlT3BlcmF0aW9uSWQoKXtjb25zdCBsPXRoaXMuZWxlbWVudHMuZmluZChhPT5hIGluc3RhbmNlb2YgJEYmJmEuaXNDaGVja2VkKCkpO3JldHVybiBsP2wuZ2V0VmFsdWUoKTphNn1nZXRTdGF0ZSgpe3JldHVybiB0aGlzLmdldEFjdGl2ZU9w'@;
put 'ZXJhdGlvbklkKCl9c2V0U3RhdGUobCl7dGhpcy5yZXNldCgpLGwmJnRoaXMuZ2V0QWN0aXZlT3BlcmF0aW9uSWQoKSE9PWwmJlluKHRoaXMuZWxlbWVudHMsYT0+e2Euc2V0Q2hlY2tlZChhLmdldFZhbHVlKCk9PT1sKX0pfXVwZGF0ZVN0YXRlKCl7bGV0IGQ9YXJndW1lbnRzLmxlbmd0aD4w'@;
put 'JiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOmE2O2Q9PT1oUSYmKGQ9R0YpLHRoaXMuc3RhdGUuc2V0VmFsdWVBdEluZGV4KGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwLGQpfXJlc2V0KCl7dGhpcy5zZXRDaGVja2VkKDApfX1mdW5jdGlvbiBlaHQo'@;
put 'Yyl7dGhpcy5zZXRTdGF0ZShjLnRhcmdldC52YWx1ZSl9ZnVuY3Rpb24gbmh0KGMsbCl7bGV0IGE9YztyZXR1cm4iIj09PWEmJihhPWAoJHtsfSlgKSxhfWZ1bmN0aW9uIEdUKGMpe2NvbnN0IGw9bmV3IFNldChjKTtyZXR1cm4gZnVuY3Rpb24oYSl7cmV0dXJuIGwuaGFzKGEpfX1mdW5jdGlv'@;
put 'biBwUShjKXtyZXR1cm4gYz8/IiJ9ZnVuY3Rpb24gZ1EoYyl7cmV0dXJuIEFycmF5LmZyb20obmV3IFNldChjKSkubWFwKGw9PnBRKGwpKS5zb3J0KChsLGEpPT4ibnVtYmVyIj09dHlwZW9mIGwmJiJudW1iZXIiPT10eXBlb2YgYT9sLWE6bD09PWE/MDpsPmE/MTotMSl9ZnVuY3Rpb24gdjVl'@;
put 'KGMsbCxhLGQpe2NvbnN0IGg9W10sZj1jPT09bDtsZXQgdjtyZXR1cm4gZnx8KHY9R1QobCkpLGMuZm9yRWFjaChNPT57bGV0IEQ9ITE7KGZ8fHYoTSkpJiYoRD0hMCk7Y29uc3QgWj17Y2hlY2tlZDpELHZhbHVlOk0sdmlzdWFsVmFsdWU6bmh0KE0sYSl9O2QmJmQoWiksaC5wdXNoKFopfSks'@;
put 'aH1mdW5jdGlvbiBtUShjLGwpe3JldHVybiBjLmdldChiNWUoYyxsKSl9ZnVuY3Rpb24gYjVlKGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1l'@;
put 'bnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX1xMmUoKTt2YXIgJFQ9bmV3IFdlYWtNYXA7Y2xhc3MgS1QgZXh0ZW5kcyBIaHtzdGF0aWMgZ2V0IERFRkFVTFRTKCl7cmV0dXJuIG4zKHtocmVmOiIjIix0YWdOYW1lOiJhIix0YWJJbmRleDotMSxyb2xlOiJidXR0b24ifSl9Y29u'@;
put 'c3RydWN0b3IobCxhKXtzdXBlcihsLEV1KEtULkRFRkFVTFRTLGEpKSxmdW5jdGlvbiByaHQoYyxsLGEpeyhmdW5jdGlvbiBpaHQoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9u'@;
put 'IGFuIG9iamVjdCIpfSkoYyxsKSxsLnNldChjLGEpfSh0aGlzLCRULHZvaWQgMCl9YnVpbGQoKXtzdXBlci5idWlsZCgpLGZ1bmN0aW9uIGFodChjLGwsYSl7Yy5zZXQoYjVlKGMsbCksYSl9KCRULHRoaXMsdGhpcy5fZWxlbWVudC5maXJzdENoaWxkKX11cGRhdGUoKXt0aGlzLmlzQnVpbHQo'@;
put 'KSYmKG1RKCRULHRoaXMpLnRleHRDb250ZW50PXRoaXMudHJhbnNsYXRlSWZQb3NzaWJsZSh0aGlzLm9wdGlvbnMudGV4dENvbnRlbnQpKX1mb2N1cygpe3RoaXMuaXNCdWlsdCgpJiZtUSgkVCx0aGlzKS5mb2N1cygpfWFjdGl2YXRlKCl7bVEoJFQsdGhpcykuY2xpY2soKX19ZnVuY3Rpb24g'@;
put 'b3coYyxsLGEpe3k1ZShjLGwpLGwuc2V0KGMsYSl9ZnVuY3Rpb24geTVlKGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX1mdW5jdGlvbiBqbyhjLGwpe3Jl'@;
put 'dHVybiBjLmdldChzdyhjLGwpKX1mdW5jdGlvbiBtMyhjLGwsYSl7cmV0dXJuIGMuc2V0KHN3KGMsbCksYSksYX1mdW5jdGlvbiBzdyhjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5'@;
put 'cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9Y29uc3QgXzVlPSJtdWx0aXBsZVNlbGVjdC5pdGVtQm94Ijt2YXIgdjM9bmV3IFdlYWtNYXAsdXU9bmV3IFdlYWtNYXAsdlE9bmV3IFdlYWtNYXAsSGc9bmV3IFdlYWtNYXAsbzY9bmV3IFdl'@;
put 'YWtNYXAsczY9bmV3IFdlYWtNYXAscVQ9bmV3IFdlYWtTZXQ7Y2xhc3MgWFQgZXh0ZW5kcyBIaHtzdGF0aWMgZ2V0IERFRkFVTFRTKCl7cmV0dXJuIG4zKHtjbGFzc05hbWU6Imh0VUlNdWx0aXBsZVNlbGVjdCIsdmFsdWU6W119KX1jb25zdHJ1Y3RvcihsLGEpe3N1cGVyKGwsRXUoWFQuREVG'@;
put 'QVVMVFMsYSkpLGZ1bmN0aW9uIG9odChjLGwpe3k1ZShjLGwpLGwuYWRkKGMpfSh0aGlzLHFUKSxvdyh0aGlzLHYzLFtdKSxvdyh0aGlzLHV1LHZvaWQgMCksb3codGhpcyx2USx2b2lkIDApLG93KHRoaXMsSGcsdm9pZCAwKSxvdyh0aGlzLG82LHZvaWQgMCksb3codGhpcyxzNix2b2lkIDAp'@;
put 'LG0zKEhnLHRoaXMsbmV3IGk2KHRoaXMuaG90LHtwbGFjZWhvbGRlcjpsWCxjbGFzc05hbWU6Imh0VUlNdWx0aXBsZVNlbGVjdFNlYXJjaCJ9KSksbTMobzYsdGhpcyxuZXcgS1QodGhpcy5ob3Qse3RleHRDb250ZW50OmlYLGNsYXNzTmFtZToiaHRVSVNlbGVjdEFsbCJ9KSksbTMoczYsdGhp'@;
put 'cyxuZXcgS1QodGhpcy5ob3Qse3RleHRDb250ZW50OmFYLGNsYXNzTmFtZToiaHRVSUNsZWFyQWxsIn0pKSx0aGlzLnJlZ2lzdGVySG9va3MoKX1nZXRJdGVtc0JveCgpe3JldHVybiBqbyh1dSx0aGlzKX1yZWdpc3Rlckhvb2tzKCl7am8oSGcsdGhpcykuYWRkTG9jYWxIb29rKCJrZXlkb3du'@;
put 'IixsPT5zdyhxVCx0aGlzLGxodCkuY2FsbCh0aGlzLGwpKSxqbyhIZyx0aGlzKS5hZGRMb2NhbEhvb2soImlucHV0IixsPT5zdyhxVCx0aGlzLHNodCkuY2FsbCh0aGlzLGwpKSxqbyhvNix0aGlzKS5hZGRMb2NhbEhvb2soImNsaWNrIixsPT5zdyhxVCx0aGlzLGNodCkuY2FsbCh0aGlzLGwp'@;
put 'KSxqbyhzNix0aGlzKS5hZGRMb2NhbEhvb2soImNsaWNrIixsPT5zdyhxVCx0aGlzLHVodCkuY2FsbCh0aGlzLGwpKX1zZXRJdGVtcyhsKXt2YXIgYTttMyh2Myx0aGlzLGwpLG51bGw9PT0oYT1qbyh1dSx0aGlzKSl8fHZvaWQgMD09PWF8fGEubG9hZERhdGEoam8odjMsdGhpcykpfXNldExv'@;
put 'Y2FsZShsKXttMyh2USx0aGlzLGwpfWdldExvY2FsZSgpe3JldHVybiBqbyh2USx0aGlzKX1nZXRJdGVtcygpe3JldHVyblsuLi5qbyh2Myx0aGlzKV19Z2V0VmFsdWUoKXtyZXR1cm4gZnVuY3Rpb24gaGh0KGMpe2NvbnN0IGw9W107cmV0dXJuIGMuZm9yRWFjaChhPT57YS5jaGVja2VkJiZs'@;
put 'LnB1c2goYS52YWx1ZSl9KSxsfShqbyh2Myx0aGlzKSl9Z2V0U2VhcmNoSW5wdXRFbGVtZW50KCl7cmV0dXJuIGpvKEhnLHRoaXMpfWdldFNlbGVjdEFsbEVsZW1lbnQoKXtyZXR1cm4gam8obzYsdGhpcyl9Z2V0Q2xlYXJBbGxFbGVtZW50KCl7cmV0dXJuIGpvKHM2LHRoaXMpfWlzU2VsZWN0'@;
put 'ZWRBbGxWYWx1ZXMoKXtyZXR1cm4gam8odjMsdGhpcykubGVuZ3RoPT09dGhpcy5nZXRWYWx1ZSgpLmxlbmd0aH1idWlsZCgpe3N1cGVyLmJ1aWxkKCk7Y29uc3R7cm9vdERvY3VtZW50Omx9PXRoaXMuaG90LGE9bC5jcmVhdGVFbGVtZW50KCJkaXYiKSxkPW5ldyBIaCh0aGlzLmhvdCx7Y2xh'@;
put 'c3NOYW1lOiJodFVJU2VsZWN0aW9uQ29udHJvbHMiLGNoaWxkcmVuOltqbyhvNix0aGlzKSxqbyhzNix0aGlzKV19KTt0aGlzLl9lbGVtZW50LmFwcGVuZENoaWxkKGpvKEhnLHRoaXMpLmVsZW1lbnQpLHRoaXMuX2VsZW1lbnQuYXBwZW5kQ2hpbGQoZC5lbGVtZW50KSx0aGlzLl9lbGVtZW50'@;
put 'LmFwcGVuZENoaWxkKGEpO2NvbnN0IGg9Zj0+e3ZhciB2O2lmKCF0aGlzLl9lbGVtZW50KXJldHVybjtudWxsPT09KHY9am8odXUsdGhpcykpfHx2b2lkIDA9PT12fHx2LmRlc3Ryb3koKSxUaShmLCJodFVJTXVsdGlwbGVTZWxlY3RIb3QiKSxtMyh1dSx0aGlzLG5ldyB0aGlzLmhvdC5jb25z'@;
put 'dHJ1Y3RvcihmLHtkYXRhOmpvKHYzLHRoaXMpLGNvbHVtbnM6W3tkYXRhOiJjaGVja2VkIix0eXBlOiJjaGVja2JveCIsbGFiZWw6e3Byb3BlcnR5OiJ2aXN1YWxWYWx1ZSIscG9zaXRpb246ImFmdGVyIn19XSxiZWZvcmVSZW5kZXJlcjooWixyZSxjZSxiZSxFZSxCZSk9PntaLnRpdGxlPUJl'@;
put 'Lmluc3RhbmNlLmdldERhdGFBdFJvd1Byb3AocmUsQmUubGFiZWwucHJvcGVydHkpfSxhZnRlckxpc3RlbjooKT0+e3RoaXMucnVuTG9jYWxIb29rcygiZm9jdXMiLHRoaXMpfSxiZWZvcmVPbkNlbGxNb3VzZVVwOigpPT57am8odXUsdGhpcykubGlzdGVuKCl9LG1vZGlmeUNvbFdpZHRoOlo9'@;
put 'Pntjb25zdCByZT1qbyh1dSx0aGlzKS5jb250YWluZXIuc2Nyb2xsV2lkdGgtZjAobCk7cmV0dXJuIHZvaWQgMCE9PVomJlo8cmU/cmU6Wn0sbWF4Q29sczoxLGF1dG9XcmFwQ29sOiEwLGhlaWdodDoxMTAsY29weVBhc3RlOiExLGRpc2FibGVWaXN1YWxTZWxlY3Rpb246ImFyZWEiLGZpbGxI'@;
put 'YW5kbGU6ITEsZnJhZ21lbnRTZWxlY3Rpb246ImNlbGwiLHRhYk1vdmVzOntyb3c6MSxjb2w6MH0sdGhlbWVOYW1lOnRoaXMuaG90LmdldEN1cnJlbnRUaGVtZU5hbWUoKSxsYXlvdXREaXJlY3Rpb246dGhpcy5ob3QuaXNSdGwoKT8icnRsIjoibHRyIn0pKSxqbyh1dSx0aGlzKS5pbml0KCks'@;
put 'dGhpcy5ob3QuYWRkSG9vaygiYWZ0ZXJTZXRUaGVtZSIsKFoscmUpPT57cmV8fGpvKHV1LHRoaXMpLnVzZVRoZW1lKFopfSk7Y29uc3QgRD1qbyh1dSx0aGlzKS5nZXRTaG9ydGN1dE1hbmFnZXIoKS5nZXRDb250ZXh0KCJncmlkIik7RC5yZW1vdmVTaG9ydGN1dHNCeUtleXMoWyJUYWIiXSks'@;
put 'RC5yZW1vdmVTaG9ydGN1dHNCeUtleXMoWyJTaGlmdCIsIlRhYiJdKSxELmFkZFNob3J0Y3V0KHtrZXlzOltbIkVzY2FwZSJdXSxjYWxsYmFjazpaPT57dGhpcy5ydW5Mb2NhbEhvb2tzKCJrZXlkb3duIixaLHRoaXMpfSxncm91cDpfNWV9KSxELmFkZFNob3J0Y3V0KHtrZXlzOltbIlRhYiJd'@;
put 'LFsiU2hpZnQiLCJUYWIiXV0sY2FsbGJhY2s6Wj0+e2pvKHV1LHRoaXMpLmRlc2VsZWN0Q2VsbCgpLHRoaXMucnVuTG9jYWxIb29rcygia2V5ZG93biIsWix0aGlzKSx0aGlzLnJ1bkxvY2FsSG9va3MoImxpc3RUYWJLZXlkb3duIixaLHRoaXMpfSxncm91cDpfNWV9KX07aChhKSx0aGlzLmhv'@;
put 'dC5fcmVnaXN0ZXJUaW1lb3V0KCgpPT5oKGEpLDEwMCl9Zm9jdXMoKXt0aGlzLmlzQnVpbHQoKSYmam8odXUsdGhpcykubGlzdGVuKCl9cmVzZXQoKXtqbyhIZyx0aGlzKS5yZXNldCgpLGpvKG82LHRoaXMpLnJlc2V0KCksam8oczYsdGhpcykucmVzZXQoKX11cGRhdGUoKXt0aGlzLmlzQnVp'@;
put 'bHQoKSYmKGpvKHV1LHRoaXMpLmxvYWREYXRhKGZ1bmN0aW9uIGRodChjLGwpe2NvbnN0IGE9R1QobCk7cmV0dXJuIGMubWFwKGQ9PihkLmNoZWNrZWQ9YShkLnZhbHVlKSxkKSl9KGpvKHYzLHRoaXMpLHRoaXMub3B0aW9ucy52YWx1ZSkpLHN1cGVyLnVwZGF0ZSgpKX1kZXN0cm95KCl7dmFy'@;
put 'IGw7bnVsbD09PShsPWpvKHV1LHRoaXMpKXx8dm9pZCAwPT09bHx8bC5kZXN0cm95KCksam8oSGcsdGhpcykuZGVzdHJveSgpLGpvKHM2LHRoaXMpLmRlc3Ryb3koKSxqbyhvNix0aGlzKS5kZXN0cm95KCksbTMoSGcsdGhpcyxudWxsKSxtMyhzNix0aGlzLG51bGwpLG0zKG82LHRoaXMsbnVs'@;
put 'bCksbTModXUsdGhpcyxudWxsKSxtMyh2Myx0aGlzLG51bGwpLHN1cGVyLmRlc3Ryb3koKX19ZnVuY3Rpb24gc2h0KGMpe2NvbnN0IGw9Yy50YXJnZXQudmFsdWUudG9Mb2NhbGVMb3dlckNhc2UodGhpcy5nZXRMb2NhbGUoKSk7bGV0IGE7YT0iIj09PWw/Wy4uLmpvKHYzLHRoaXMpXTpqbyh2'@;
put 'Myx0aGlzKS5maWx0ZXIoZD0+YCR7ZC52YWx1ZX1gLnRvTG9jYWxlTG93ZXJDYXNlKHRoaXMuZ2V0TG9jYWxlKCkpLmluZGV4T2YobCk+PTApLGpvKHV1LHRoaXMpLmxvYWREYXRhKGEpfWZ1bmN0aW9uIGxodChjKXt0aGlzLnJ1bkxvY2FsSG9va3MoImtleWRvd24iLGMsdGhpcyksSSQodV8s'@;
put 'Yy5rZXlDb2RlKSgiQVJST1dfRE9XTiIpJiYoYy5wcmV2ZW50RGVmYXVsdCgpLEIyKGMpLGpvKHV1LHRoaXMpLmxpc3RlbigpLGpvKHV1LHRoaXMpLnNlbGVjdENlbGwoMCwwKSl9ZnVuY3Rpb24gY2h0KGMpe2NvbnN0IGw9W107Yy5wcmV2ZW50RGVmYXVsdCgpLGpvKHV1LHRoaXMpLmdldFNv'@;
put 'dXJjZURhdGEoKS5mb3JFYWNoKChhLGQpPT57YS5jaGVja2VkPSEwLGwucHVzaChQSyhhLGQpWzBdKX0pLGpvKHV1LHRoaXMpLnNldFNvdXJjZURhdGFBdENlbGwobCl9ZnVuY3Rpb24gdWh0KGMpe2NvbnN0IGw9W107Yy5wcmV2ZW50RGVmYXVsdCgpLGpvKHV1LHRoaXMpLmdldFNvdXJjZURh'@;
put 'dGEoKS5mb3JFYWNoKChhLGQpPT57YS5jaGVja2VkPSExLGwucHVzaChQSyhhLGQpWzBdKX0pLGpvKHV1LHRoaXMpLnNldFNvdXJjZURhdGFBdENlbGwobCl9Y29uc3QgQzk9ImJ5X3ZhbHVlIjtmdW5jdGlvbiBLRihjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMo'@;
put 'bCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9a3UoQzksZnVuY3Rpb24gZmh0KGMsbCl7bGV0W2FdPWw7cmV0dXJuIGEoYy52YWx1ZSl9LHtuYW1lOiJCeSB2'@;
put 'YWx1ZSIsaW5wdXRzQ291bnQ6MCxpbnB1dFZhbHVlc0RlY29yYXRvcihjKXtsZXRbbF09YztyZXR1cm5bR1QobCldfSxzaG93T3BlcmF0b3JzOiExfSk7dmFyIEM1ZSxKVD1uZXcgV2Vha1NldDtjbGFzcyB5aHQgZXh0ZW5kcyBIVHtjb25zdHJ1Y3RvcihsLGEpe3N1cGVyKGwse2lkOmEuaWQs'@;
put 'c3RhdGVsZXNzOiExfSksZnVuY3Rpb24gcGh0KGMsbCl7KGZ1bmN0aW9uIGdodChjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9KShjLGwpLGwuYWRkKGMp'@;
put 'fSh0aGlzLEpUKSxmdW5jdGlvbiBtaHQoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIHZodChjKXt2YXIgbD1mdW5jdGlvbiBiaHQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1h'@;
put 'LmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0'@;
put 'cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfSh0aGlzLCJuYW1lIiwiIiksdGhpcy5uYW1lPWEu'@;
put 'bmFtZSx0aGlzLmVsZW1lbnRzLnB1c2gobmV3IFhUKHRoaXMuaG90KSksdGhpcy5yZWdpc3Rlckhvb2tzKCl9cmVnaXN0ZXJIb29rcygpe3RoaXMuZ2V0TXVsdGlwbGVTZWxlY3RFbGVtZW50KCkuYWRkTG9jYWxIb29rKCJrZXlkb3duIixsPT5LRihKVCx0aGlzLF9odCkuY2FsbCh0aGlzLGwp'@;
put 'KS5hZGRMb2NhbEhvb2soImxpc3RUYWJLZXlkb3duIixsPT50aGlzLnJ1bkxvY2FsSG9va3MoImxpc3RUYWJLZXlkb3duIixsKSksdGhpcy5ob3QuYWRkSG9vaygibW9kaWZ5RmlsdGVyc011bHRpU2VsZWN0VmFsdWUiLChsLGEpPT5LRihKVCx0aGlzLHdodCkuY2FsbCh0aGlzLGwsYSkpfWdl'@;
put 'dEVsZW1lbnRzKCl7Y29uc3QgbD10aGlzLmdldE11bHRpcGxlU2VsZWN0RWxlbWVudCgpO3JldHVybltsLmdldFNlYXJjaElucHV0RWxlbWVudCgpLGwuZ2V0U2VsZWN0QWxsRWxlbWVudCgpLGwuZ2V0Q2xlYXJBbGxFbGVtZW50KCksdGhpcy5nZXRNdWx0aXBsZVNlbGVjdEVsZW1lbnQoKV19'@;
put 'c2V0U3RhdGUobCl7aWYodGhpcy5yZXNldCgpLGwmJmwuY29tbWFuZC5rZXk9PT1DOSl7Y29uc3QgYT10aGlzLmdldE11bHRpcGxlU2VsZWN0RWxlbWVudCgpO2Euc2V0SXRlbXMobC5pdGVtc1NuYXBzaG90KSxhLnNldFZhbHVlKGwuYXJnc1swXSksYS5zZXRMb2NhbGUobC5sb2NhbGUpfX1n'@;
put 'ZXRTdGF0ZSgpe2NvbnN0IGw9dGhpcy5nZXRNdWx0aXBsZVNlbGVjdEVsZW1lbnQoKSxhPWwuZ2V0SXRlbXMoKTtyZXR1cm57Y29tbWFuZDp7a2V5OmwuaXNTZWxlY3RlZEFsbFZhbHVlcygpfHwhYS5sZW5ndGg/RTA6Qzl9LGFyZ3M6W2wuZ2V0VmFsdWUoKV0saXRlbXNTbmFwc2hvdDphfX11'@;
put 'cGRhdGVTdGF0ZShsKXtjb25zdCBhPShkLGgsZix2LE0pPT57Y29uc3RbRF09SW0oaCxjZT0+Y2UubmFtZT09PUM5KSxaPXt9LHJlPXRoaXMuaG90LmdldFRyYW5zbGF0ZWRQaHJhc2UoU1ApO2lmKEQpe2NvbnN0IGNlPXYoZCxNKSxiZT15cyhjZSxkdD0+ZHQudmFsdWUpLEVlPW5ldyBNYXAo'@;
put 'Y2UubWFwKGR0PT5bZHQudmFsdWUsdGhpcy5ob3QuZ2V0Q2VsbE1ldGEoZHQubWV0YS52aXN1YWxSb3csZHQubWV0YS52aXN1YWxDb2wpXSkpLEJlPWdRKGJlKTtmJiYoRC5hcmdzWzBdPWYpO2NvbnN0IHFlPVtdLHJ0PXY1ZShCZSxELmFyZ3NbMF0scmUsZHQ9PntkdC5jaGVja2VkJiZxZS5w'@;
put 'dXNoKGR0LnZhbHVlKSxLRihKVCx0aGlzLHc1ZSkuY2FsbCh0aGlzLGR0LEVlKX0pO1oubG9jYWxlPXRoaXMuaG90LmdldENlbGxNZXRhKDAsbC5lZGl0ZWRDb25kaXRpb25TdGFjay5jb2x1bW4pLmxvY2FsZSxaLmFyZ3M9W3FlXSxaLmNvbW1hbmQ9dzkoQzkpLFouaXRlbXNTbmFwc2hvdD1y'@;
put 'dH1lbHNlIFouYXJncz1bXSxaLmNvbW1hbmQ9dzkoRTApO3RoaXMuc3RhdGUuc2V0VmFsdWVBdEluZGV4KGQsWil9O2EobC5lZGl0ZWRDb25kaXRpb25TdGFjay5jb2x1bW4sbC5lZGl0ZWRDb25kaXRpb25TdGFjay5jb25kaXRpb25zLGwuY29uZGl0aW9uQXJnc0NoYW5nZSxsLmZpbHRlcmVk'@;
put 'Um93c0ZhY3RvcnkpLGwuZGVwZW5kZW50Q29uZGl0aW9uU3RhY2tzLmxlbmd0aCYmYShsLmRlcGVuZGVudENvbmRpdGlvblN0YWNrc1swXS5jb2x1bW4sbC5kZXBlbmRlbnRDb25kaXRpb25TdGFja3NbMF0uY29uZGl0aW9ucyxsLmNvbmRpdGlvbkFyZ3NDaGFuZ2UsbC5maWx0ZXJlZFJvd3NG'@;
put 'YWN0b3J5LGwuZWRpdGVkQ29uZGl0aW9uU3RhY2spfWdldE11bHRpcGxlU2VsZWN0RWxlbWVudCgpe3JldHVybiB0aGlzLmVsZW1lbnRzLmZpbHRlcihsPT5sIGluc3RhbmNlb2YgWFQpWzBdfWdldE1lbnVJdGVtRGVzY3JpcHRvcigpe3JldHVybntrZXk6dGhpcy5pZCxuYW1lOnRoaXMubmFt'@;
put 'ZSxpc0NvbW1hbmQ6ITEsZGlzYWJsZVNlbGVjdGlvbjohMCxoaWRkZW46KCk9PnRoaXMuaXNIaWRkZW4oKSxyZW5kZXJlcjoobCxhLGQsaCxmLHYpPT57VGkoYS5wYXJlbnROb2RlLCJodEZpbHRlcnNNZW51VmFsdWUiKTtjb25zdCBNPXRoaXMuaG90LnJvb3REb2N1bWVudC5jcmVhdGVFbGVt'@;
put 'ZW50KCJkaXYiKTtyZXR1cm4gVGkoTSwiaHRGaWx0ZXJzTWVudUxhYmVsIiksTS50ZXh0Q29udGVudD12LGEuYXBwZW5kQ2hpbGQoTSksYS5wYXJlbnRFbGVtZW50Lmhhc0F0dHJpYnV0ZSgiZ2hvc3QtdGFibGUiKXx8WW4odGhpcy5lbGVtZW50cyxEPT5hLmFwcGVuZENoaWxkKEQuZWxlbWVu'@;
put 'dCkpLGF9fX1yZXNldCgpe2NvbnN0IGw9dGhpcy5ob3QuZ2V0VHJhbnNsYXRlZFBocmFzZShTUCksYT10aGlzLl9nZXRDb2x1bW5WaXNpYmxlVmFsdWVzKCksZD1hLm1hcChEPT5ELnZhbHVlKSxoPW5ldyBNYXAoYS5tYXAoRD0+W0QudmFsdWUsRC5tZXRhXSkpLGY9Z1EoZCksdj12NWUoZixm'@;
put 'LGwsRD0+e0tGKEpULHRoaXMsdzVlKS5jYWxsKHRoaXMsRCxoKX0pO3RoaXMuZ2V0TXVsdGlwbGVTZWxlY3RFbGVtZW50KCkuc2V0SXRlbXModiksc3VwZXIucmVzZXQoKSx0aGlzLmdldE11bHRpcGxlU2VsZWN0RWxlbWVudCgpLnNldFZhbHVlKGYpO2NvbnN0IE09dGhpcy5ob3QuZ2V0UGx1'@;
put 'Z2luKCJmaWx0ZXJzIikuZ2V0U2VsZWN0ZWRDb2x1bW4oKTtudWxsIT09TSYmdGhpcy5nZXRNdWx0aXBsZVNlbGVjdEVsZW1lbnQoKS5zZXRMb2NhbGUodGhpcy5ob3QuZ2V0Q2VsbE1ldGEoMCxNLnZpc3VhbEluZGV4KS5sb2NhbGUpfV9nZXRDb2x1bW5WaXNpYmxlVmFsdWVzKCl7Y29uc3Qg'@;
put 'bD10aGlzLmhvdC5nZXRQbHVnaW4oImZpbHRlcnMiKS5nZXRTZWxlY3RlZENvbHVtbigpO3JldHVybiBudWxsPT09bD9bXTp5cyh0aGlzLmhvdC5nZXREYXRhQXRDb2wobC52aXN1YWxJbmRleCksKGEsZCk9Pih7dmFsdWU6cFEoYSksbWV0YTp0aGlzLmhvdC5nZXRDZWxsTWV0YShkLGwudmlz'@;
put 'dWFsSW5kZXgpfSkpfX1mdW5jdGlvbiBfaHQoYyl7dV8oYy5rZXlDb2RlLCJFU0NBUEUiKSYmKHRoaXMucnVuTG9jYWxIb29rcygiY2FuY2VsIiksQjIoYykpfWZ1bmN0aW9uIHc1ZShjLGwpe3RoaXMuaG90Lmhhc0hvb2soIm1vZGlmeUZpbHRlcnNNdWx0aVNlbGVjdFZhbHVlIikmJihjLnZp'@;
put 'c3VhbFZhbHVlPXRoaXMuaG90LnJ1bkhvb2tzKCJtb2RpZnlGaWx0ZXJzTXVsdGlTZWxlY3RWYWx1ZSIsYy52aXN1YWxWYWx1ZSxsLmdldChjLnZhbHVlKSkpfWZ1bmN0aW9uIHdodChjLGwpe3JldHVybiJudW1lcmljIj09PWwudHlwZT9nNGUoYyxsKTpjfXZhciBTNWU9bmV3IFdlYWtTZXQ7'@;
put 'Y2xhc3MgUVQgZXh0ZW5kcyBIVHtzdGF0aWMgZ2V0IEJVVFRPTl9PSygpe3JldHVybiJvayJ9c3RhdGljIGdldCBCVVRUT05fQ0FOQ0VMKCl7cmV0dXJuImNhbmNlbCJ9Y29uc3RydWN0b3IobCxhKXtzdXBlcihsLHtpZDphLmlkLHN0YXRlbGVzczohMH0pLGZ1bmN0aW9uIENodChjLGwpeyhm'@;
put 'dW5jdGlvbiBTaHQoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfSkoYyxsKSxsLmFkZChjKX0odGhpcyxTNWUpLGZ1bmN0aW9uIE1odChjLGwsYSl7cmV0'@;
put 'dXJuKGw9ZnVuY3Rpb24geGh0KGMpe3ZhciBsPWZ1bmN0aW9uIEVodChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIh'@;
put 'PXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6'@;
put 'bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9KHRoaXMsIm5hbWUiLCIiKSx0aGlzLm5hbWU9YS5uYW1lLHRoaXMuZWxlbWVudHMucHVzaChuZXcgaTYodGhp'@;
put 'cy5ob3Qse3R5cGU6ImJ1dHRvbiIsdmFsdWU6b1gsY2xhc3NOYW1lOiJodFVJQnV0dG9uIGh0VUlCdXR0b25PSyIsaWRlbnRpZmllcjpRVC5CVVRUT05fT0t9KSksdGhpcy5lbGVtZW50cy5wdXNoKG5ldyBpNih0aGlzLmhvdCx7dHlwZToiYnV0dG9uIix2YWx1ZTpzWCxjbGFzc05hbWU6Imh0'@;
put 'VUlCdXR0b24gaHRVSUJ1dHRvbkNhbmNlbCIsaWRlbnRpZmllcjpRVC5CVVRUT05fQ0FOQ0VMfSkpLHRoaXMucmVnaXN0ZXJIb29rcygpfXJlZ2lzdGVySG9va3MoKXtZbih0aGlzLmVsZW1lbnRzLGw9PntsLmFkZExvY2FsSG9vaygiY2xpY2siLChhLGQpPT5mdW5jdGlvbiBUaHQoYyxsLGEp'@;
put 'e2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfShTNWUsdGhpcyxBaHQpLmNhbGwodGhpcyxh'@;
put 'LGQpKX0pfWdldE1lbnVJdGVtRGVzY3JpcHRvcigpe3JldHVybntrZXk6dGhpcy5pZCxuYW1lOnRoaXMubmFtZSxpc0NvbW1hbmQ6ITEsZGlzYWJsZVNlbGVjdGlvbjohMCxoaWRkZW46KCk9PnRoaXMuaXNIaWRkZW4oKSxyZW5kZXJlcjoobCxhKT0+KFRpKGEucGFyZW50Tm9kZSwiaHRGaWx0'@;
put 'ZXJzTWVudUFjdGlvbkJhciIpLFluKHRoaXMuZWxlbWVudHMsZD0+YS5hcHBlbmRDaGlsZChkLmVsZW1lbnQpKSxhKX19YWNjZXB0KCl7dGhpcy5ydW5Mb2NhbEhvb2tzKCJhY2NlcHQiKX1jYW5jZWwoKXt0aGlzLnJ1bkxvY2FsSG9va3MoImNhbmNlbCIpfX1mdW5jdGlvbiBBaHQoYyxsKXts'@;
put 'Lm9wdGlvbnMuaWRlbnRpZmllcj09PUM1ZS5CVVRUT05fT0s/dGhpcy5hY2NlcHQoKTp0aGlzLmNhbmNlbCgpfWZ1bmN0aW9uIGJRKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBraHQoYyl7dmFyIGw9ZnVuY3Rpb24gRGh0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4g'@;
put 'Yzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2'@;
put 'YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAs'@;
put 'd3JpdGFibGU6ITB9KTpjW2xdPWEsY31DNWU9UVQ7Y29uc3QgTTVlPSJDb25kaXRpb25Db2xsZWN0aW9uLmZpbHRlcmluZ1N0YXRlcyI7Y2xhc3MgeDVle2NvbnN0cnVjdG9yKGwpe2xldCBhPSEoYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0pfHxhcmd1bWVudHNb'@;
put 'MV07YlEodGhpcywiaG90Iix2b2lkIDApLGJRKHRoaXMsImlzTWFwUmVnaXN0cmFibGUiLHZvaWQgMCksYlEodGhpcywiZmlsdGVyaW5nU3RhdGVzIixuZXcgcFApLHRoaXMuaG90PWwsdGhpcy5pc01hcFJlZ2lzdHJhYmxlPWEsITA9PT10aGlzLmlzTWFwUmVnaXN0cmFibGU/dGhpcy5ob3Qu'@;
put 'Y29sdW1uSW5kZXhNYXBwZXIucmVnaXN0ZXJNYXAoTTVlLHRoaXMuZmlsdGVyaW5nU3RhdGVzKTp0aGlzLmZpbHRlcmluZ1N0YXRlcy5pbml0KHRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLmdldE51bWJlck9mSW5kZXhlcygpKX1pc0VtcHR5KCl7cmV0dXJuIDA9PT10aGlzLmdldEZpbHRl'@;
put 'cmVkQ29sdW1ucygpLmxlbmd0aH1pc01hdGNoKGwsYSl7dmFyIGQ7Y29uc3QgaD10aGlzLmZpbHRlcmluZ1N0YXRlcy5nZXRWYWx1ZUF0SW5kZXgoYSksZj1udWxsIT09KGQ9aD8uY29uZGl0aW9ucykmJnZvaWQgMCE9PWQ/ZDpbXSx2PWg/Lm9wZXJhdGlvbjtyZXR1cm4gdGhpcy5pc01hdGNo'@;
put 'SW5Db25kaXRpb25zKGYsbCx2KX1pc01hdGNoSW5Db25kaXRpb25zKGwsYSl7cmV0dXJuIWwubGVuZ3RofHxmdW5jdGlvbiBOZHQoYyl7aWYoIVdUW2NdKXRocm93IEVycm9yKGBPcGVyYXRpb24gd2l0aCBpZCAiJHtjfSIgZG9lcyBub3QgZXhpc3QuYCk7Y29uc3QgbD1XVFtjXS5mdW5jO3Jl'@;
put 'dHVybiBmdW5jdGlvbihhLGQpe3JldHVybiBsKGEsZCl9fShhcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06YTYpKGwsYSl9YWRkQ29uZGl0aW9uKGwsYSl7bGV0IGQ9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/'@;
put 'YXJndW1lbnRzWzJdOmE2LGg9YXJndW1lbnRzLmxlbmd0aD4zP2FyZ3VtZW50c1szXTp2b2lkIDA7Y29uc3QgZj10aGlzLmhvdC5nZXRDZWxsTWV0YSgwLGwpLmxvY2FsZSx2PWEuYXJncy5tYXAocmU9PiJzdHJpbmciPT10eXBlb2YgcmU/cmUudG9Mb2NhbGVMb3dlckNhc2UoZik6cmUpLE09'@;
put 'YS5uYW1lfHxhLmNvbW1hbmQua2V5O3RoaXMucnVuTG9jYWxIb29rcygiYmVmb3JlQWRkIixsKTtjb25zdCBEPXRoaXMuZ2V0T3BlcmF0aW9uKGwpO2lmKEQpe2lmKEQhPT1kKXRocm93IEVycm9yKGdsYFRoZSBjb2x1bW4gb2YgaW5kZXggJHtsfSBoYXMgYmVlbiBhbHJlYWR5IGFwcGxpZWQg'@;
put 'd2l0aCBhIFxgJHtEfVxgXHgyMAogICAgICAgIGZpbHRlciBvcGVyYXRpb24uIFVzZSBcYHJlbW92ZUNvbmRpdGlvbnNcYCB0byBjbGVhciB0aGUgY3VycmVudCBjb25kaXRpb25zIGFuZCB0aGVuIGFkZCBuZXcgb25lcy5ceDIwCiAgICAgICAgTWluZCB0aGF0IHlvdSBjYW5ub3QgbWl4IGRp'@;
put 'ZmZlcmVudCB0eXBlcyBvZiBvcGVyYXRpb25zIChmb3IgaW5zdGFuY2UsIGlmIHlvdSB1c2UgXGBjb25qdW5jdGlvblxgLFx4MjAKICAgICAgICB1c2UgaXQgY29uc2VxdWVudGx5IGZvciBhIHBhcnRpY3VsYXIgY29sdW1uKS5gKX1lbHNlIGlmKF9jKFdUW2RdKSl0aHJvdyBuZXcgRXJyb3Io'@;
put 'Z2xgVW5leHBlY3RlZCBvcGVyYXRpb24gbmFtZWQgXGAke2R9XGAuIFBvc3NpYmxlIG9uZXMgYXJlXHgyMAogICAgICAgIFxgZGlzanVuY3Rpb25cYCBhbmQgXGBjb25qdW5jdGlvblxgLmApO2NvbnN0IFo9dGhpcy5nZXRDb25kaXRpb25zKGwpOzA9PT1aLmxlbmd0aD90aGlzLmZpbHRlcmlu'@;
put 'Z1N0YXRlcy5zZXRWYWx1ZUF0SW5kZXgobCx7b3BlcmF0aW9uOmQsY29uZGl0aW9uczpbe25hbWU6TSxhcmdzOnYsZnVuYzpyNihNLHYpfV19LGgpOloucHVzaCh7bmFtZTpNLGFyZ3M6dixmdW5jOnI2KE0sdil9KSx0aGlzLnJ1bkxvY2FsSG9va3MoImFmdGVyQWRkIixsKX1nZXRDb25kaXRp'@;
put 'b25zKGwpe3ZhciBhLGQ7cmV0dXJuIG51bGwhPT0oYT1udWxsPT09KGQ9dGhpcy5maWx0ZXJpbmdTdGF0ZXMuZ2V0VmFsdWVBdEluZGV4KGwpKXx8dm9pZCAwPT09ZD92b2lkIDA6ZC5jb25kaXRpb25zKSYmdm9pZCAwIT09YT9hOltdfWdldE9wZXJhdGlvbihsKXt2YXIgYTtyZXR1cm4gbnVs'@;
put 'bD09PShhPXRoaXMuZmlsdGVyaW5nU3RhdGVzLmdldFZhbHVlQXRJbmRleChsKSl8fHZvaWQgMD09PWE/dm9pZCAwOmEub3BlcmF0aW9ufWdldEZpbHRlcmVkQ29sdW1ucygpe3JldHVybiB0aGlzLmZpbHRlcmluZ1N0YXRlcy5nZXRFbnRyaWVzKCkubWFwKGw9PntsZXRbYV09bDtyZXR1cm4g'@;
put 'YX0pfWdldENvbHVtblN0YWNrUG9zaXRpb24obCl7cmV0dXJuIHRoaXMuZ2V0RmlsdGVyZWRDb2x1bW5zKCkuaW5kZXhPZihsKX1leHBvcnRBbGxDb25kaXRpb25zKCl7cmV0dXJuIHRoaXMuZmlsdGVyaW5nU3RhdGVzLmdldEVudHJpZXMoKS5yZWR1Y2UoKGwsYSk9PntsZXRbZCx7b3BlcmF0'@;
put 'aW9uOmgsY29uZGl0aW9uczpmfV09YTtyZXR1cm4gbC5wdXNoKHtjb2x1bW46ZCxvcGVyYXRpb246aCxjb25kaXRpb25zOmYubWFwKHY9PntsZXR7bmFtZTpNLGFyZ3M6RH09djtyZXR1cm57bmFtZTpNLGFyZ3M6Wy4uLkRdfX0pfSksbH0sW10pfWltcG9ydEFsbENvbmRpdGlvbnMobCl7dGhp'@;
put 'cy5jbGVhbigpLGwuZm9yRWFjaChhPT57YS5jb25kaXRpb25zLmZvckVhY2goZD0+dGhpcy5hZGRDb25kaXRpb24oYS5jb2x1bW4sZCkpfSl9cmVtb3ZlQ29uZGl0aW9ucyhsKXt0aGlzLnJ1bkxvY2FsSG9va3MoImJlZm9yZVJlbW92ZSIsbCksdGhpcy5maWx0ZXJpbmdTdGF0ZXMuY2xlYXJW'@;
put 'YWx1ZShsKSx0aGlzLnJ1bkxvY2FsSG9va3MoImFmdGVyUmVtb3ZlIixsKX1jbGVhbigpe3RoaXMucnVuTG9jYWxIb29rcygiYmVmb3JlQ2xlYW4iKSx0aGlzLmZpbHRlcmluZ1N0YXRlcy5jbGVhcigpLHRoaXMucnVuTG9jYWxIb29rcygiYWZ0ZXJDbGVhbiIpfWhhc0NvbmRpdGlvbnMobCxh'@;
put 'KXtjb25zdCBkPXRoaXMuZ2V0Q29uZGl0aW9ucyhsKTtyZXR1cm4gYT9kLnNvbWUoaD0+aC5uYW1lPT09YSk6ZC5sZW5ndGg+MH1kZXN0cm95KCl7dGhpcy5pc01hcFJlZ2lzdHJhYmxlJiZ0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci51bnJlZ2lzdGVyTWFwKE01ZSksdGhpcy5maWx0ZXJp'@;
put 'bmdTdGF0ZXM9bnVsbCx0aGlzLmNsZWFyTG9jYWxIb29rcygpfX1UbCh4NWUseTEpO2NvbnN0IEU1ZT14NWU7ZnVuY3Rpb24gVDVlKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBJaHQoYyl7dmFyIGw9ZnVuY3Rpb24gUmh0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4g'@;
put 'Yzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2'@;
put 'YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAs'@;
put 'd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jb25zdCBBNWU9Y2xhc3MgTGh0e2NvbnN0cnVjdG9yKGwpe2xldCBhPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTooKT0+W107VDVlKHRoaXMsImNvbmRpdGlvbkNvbGxlY3Rpb24iLHZvaWQgMCks'@;
put 'VDVlKHRoaXMsImNvbHVtbkRhdGFGYWN0b3J5Iix2b2lkIDApLHRoaXMuY29uZGl0aW9uQ29sbGVjdGlvbj1sLHRoaXMuY29sdW1uRGF0YUZhY3Rvcnk9YX1maWx0ZXIoKXtsZXQgbD1bXTtyZXR1cm4gWW4odGhpcy5jb25kaXRpb25Db2xsZWN0aW9uLmdldEZpbHRlcmVkQ29sdW1ucygpLChh'@;
put 'LGQpPT57bGV0IGg9dGhpcy5jb2x1bW5EYXRhRmFjdG9yeShhKTtkJiYoaD10aGlzLl9nZXRJbnRlcnNlY3REYXRhKGgsbCkpLGw9dGhpcy5maWx0ZXJCeUNvbHVtbihhLGgpfSksbH1maWx0ZXJCeUNvbHVtbihsKXtjb25zdCBkPVtdO3JldHVybiBZbihhcmd1bWVudHMubGVuZ3RoPjEmJnZv'@;
put 'aWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06W10saD0+e3ZvaWQgMCE9PWgmJnRoaXMuY29uZGl0aW9uQ29sbGVjdGlvbi5pc01hdGNoKGgsbCkmJmQucHVzaChoKX0pLGR9X2dldEludGVyc2VjdERhdGEobCxhKXtjb25zdCBkPVtdO3JldHVybiBZbihhLGg9Pntjb25zdCBmPWgu'@;
put 'bWV0YS52aXN1YWxSb3c7dm9pZCAwIT09bFtmXSYmKGRbZl09bFtmXSl9KSxkfX07ZnVuY3Rpb24gUzkoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIEZodChjKXt2YXIgbD1mdW5jdGlvbiBIaHQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9s'@;
put 'LnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigi'@;
put 'c3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNb'@;
put 'bF09YSxjfWZ1bmN0aW9uIHlRKGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX12'@;
put 'YXIgcUY9bmV3IFdlYWtTZXQ7Y2xhc3MgazVle2NvbnN0cnVjdG9yKGwsYSl7bGV0IGQ9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOigpPT5bXTsoZnVuY3Rpb24gT2h0KGMsbCl7KGZ1bmN0aW9uIFBodChjLGwpe2lmKGwuaGFzKGMpKXRo'@;
put 'cm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9KShjLGwpLGwuYWRkKGMpfSkodGhpcyxxRiksUzkodGhpcywiaG90Iix2b2lkIDApLFM5KHRoaXMsImNvbmRpdGlvbkNvbGxlY3Rpb24iLHZv'@;
put 'aWQgMCksUzkodGhpcywiY29sdW1uRGF0YUZhY3RvcnkiLHZvaWQgMCksUzkodGhpcywiY2hhbmdlcyIsW10pLFM5KHRoaXMsImdyb3VwaW5nIiwhMSksUzkodGhpcywibGF0ZXN0RWRpdGVkQ29sdW1uUG9zaXRpb24iLC0xKSxTOSh0aGlzLCJsYXRlc3RPcmRlclN0YWNrIixbXSksdGhpcy5o'@;
put 'b3Q9bCx0aGlzLmNvbmRpdGlvbkNvbGxlY3Rpb249YSx0aGlzLmNvbHVtbkRhdGFGYWN0b3J5PWQsdGhpcy5jb25kaXRpb25Db2xsZWN0aW9uLmFkZExvY2FsSG9vaygiYmVmb3JlUmVtb3ZlIixoPT55UShxRix0aGlzLE5odCkuY2FsbCh0aGlzLGgpKSx0aGlzLmNvbmRpdGlvbkNvbGxlY3Rp'@;
put 'b24uYWRkTG9jYWxIb29rKCJhZnRlclJlbW92ZSIsaD0+dGhpcy51cGRhdGVTdGF0ZXNBdENvbHVtbihoKSksdGhpcy5jb25kaXRpb25Db2xsZWN0aW9uLmFkZExvY2FsSG9vaygiYWZ0ZXJBZGQiLGg9PnRoaXMudXBkYXRlU3RhdGVzQXRDb2x1bW4oaCkpLHRoaXMuY29uZGl0aW9uQ29sbGVj'@;
put 'dGlvbi5hZGRMb2NhbEhvb2soImJlZm9yZUNsZWFuIiwoKT0+eVEocUYsdGhpcyxWaHQpLmNhbGwodGhpcykpLHRoaXMuY29uZGl0aW9uQ29sbGVjdGlvbi5hZGRMb2NhbEhvb2soImFmdGVyQ2xlYW4iLCgpPT55UShxRix0aGlzLEJodCkuY2FsbCh0aGlzKSl9Z3JvdXBDaGFuZ2VzKCl7dGhp'@;
put 'cy5ncm91cGluZz0hMH1mbHVzaCgpe3RoaXMuZ3JvdXBpbmc9ITEsWW4odGhpcy5jaGFuZ2VzLGw9Pnt0aGlzLnVwZGF0ZVN0YXRlc0F0Q29sdW1uKGwpfSksdGhpcy5jaGFuZ2VzLmxlbmd0aD0wfXVwZGF0ZVN0YXRlc0F0Q29sdW1uKGwsYSl7dmFyIGQ9dGhpcztpZih0aGlzLmdyb3VwaW5n'@;
put 'KXJldHVybiB2b2lkKC0xPT09dGhpcy5jaGFuZ2VzLmluZGV4T2YobCkmJnRoaXMuY2hhbmdlcy5wdXNoKGwpKTtjb25zdCBoPXRoaXMuY29uZGl0aW9uQ29sbGVjdGlvbi5leHBvcnRBbGxDb25kaXRpb25zKCk7bGV0IGY9dGhpcy5jb25kaXRpb25Db2xsZWN0aW9uLmdldENvbHVtblN0YWNr'@;
put 'UG9zaXRpb24obCk7LTE9PT1mJiYoZj10aGlzLmxhdGVzdEVkaXRlZENvbHVtblBvc2l0aW9uKTtjb25zdCB2PWguc2xpY2UoMCxmKSxNPWguc2xpY2UoZik7TS5sZW5ndGgmJk1bMF0uY29sdW1uPT09bCYmTS5zaGlmdCgpO2NvbnN0IEQ9WTJlKGZ1bmN0aW9uKHJlLGNlKXtsZXQgYmU9YXJn'@;
put 'dW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOltdO2NvbnN0IEVlPW5ldyBFNWUoZC5ob3QsITEpLEJlPVtdLmNvbmNhdChyZSxiZSk7RWUuaW1wb3J0QWxsQ29uZGl0aW9ucyhCZSk7Y29uc3QgcWU9ZC5jb2x1bW5EYXRhRmFjdG9yeShjZSk7bGV0'@;
put 'IHJ0O3J0PUVlLmlzRW1wdHkoKT9xZTpuZXcgQTVlKEVlLGR0PT5kLmNvbHVtbkRhdGFGYWN0b3J5KGR0KSkuZmlsdGVyKCkscnQ9eXMocnQsZHQ9PmR0Lm1ldGEudmlzdWFsUm93KTtjb25zdCBwdD1HVChydCk7cmV0dXJuIEVlLmRlc3Ryb3koKSxJbShxZSxkdD0+cHQoZHQubWV0YS52aXN1'@;
put 'YWxSb3cpKX0pKHYpLFo9W10uY29uY2F0KHRoaXMuY29uZGl0aW9uQ29sbGVjdGlvbi5nZXRDb25kaXRpb25zKGwpKTt0aGlzLnJ1bkxvY2FsSG9va3MoInVwZGF0ZSIse2VkaXRlZENvbmRpdGlvblN0YWNrOntjb2x1bW46bCxjb25kaXRpb25zOlp9LGRlcGVuZGVudENvbmRpdGlvblN0YWNr'@;
put 'czpNLGZpbHRlcmVkUm93c0ZhY3Rvcnk6RCxjb25kaXRpb25BcmdzQ2hhbmdlOmF9KX1kZXN0cm95KCl7dGhpcy5jbGVhckxvY2FsSG9va3MoKSxYbyh0aGlzLChsLGEpPT57dGhpc1thXT1udWxsfSl9fWZ1bmN0aW9uIE5odChjKXt0aGlzLmxhdGVzdEVkaXRlZENvbHVtblBvc2l0aW9uPXRo'@;
put 'aXMuY29uZGl0aW9uQ29sbGVjdGlvbi5nZXRDb2x1bW5TdGFja1Bvc2l0aW9uKGMpfWZ1bmN0aW9uIFZodCgpe3RoaXMubGF0ZXN0T3JkZXJTdGFjaz10aGlzLmNvbmRpdGlvbkNvbGxlY3Rpb24uZ2V0RmlsdGVyZWRDb2x1bW5zKCl9ZnVuY3Rpb24gQmh0KCl7WW4odGhpcy5sYXRlc3RPcmRl'@;
put 'clN0YWNrLGM9Pnt0aGlzLnVwZGF0ZVN0YXRlc0F0Q29sdW1uKGMpfSl9VGwoazVlLHkxKTtjb25zdCBqaHQ9azVlLGVBPSJmaWx0ZXJzIjtmdW5jdGlvbiBfUShjLGwsYSl7RDVlKGMsbCksbC5zZXQoYyxhKX1mdW5jdGlvbiBENWUoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVy'@;
put 'cm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfWZ1bmN0aW9uIHRBKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBXaHQoYyl7dmFyIGw9ZnVuY3Rpb24gWWh0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYyly'@;
put 'ZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1p'@;
put 'dGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFi'@;
put 'bGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31mdW5jdGlvbiBYRihjLGwsYSl7cmV0dXJuIGMuc2V0KCRkKGMsbCksYSksYX1mdW5jdGlvbiBYMihjLGwpe3JldHVybiBjLmdldCgkZChjLGwpKX1mdW5jdGlvbiAkZChjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5o'@;
put 'YXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9Y29uc3Qgd1E9ImZpbHRlcnMiLEk1ZT13UTt2YXIgTmc9bmV3IFdlYWtNYXAsQ1E9bmV3IFdlYWtNYXAs'@;
put 'TTk9bmV3IFdlYWtNYXAsTmg9bmV3IFdlYWtTZXQ7Y2xhc3MgJGh0IGV4dGVuZHMgRnN7c3RhdGljIGdldCBQTFVHSU5fS0VZKCl7cmV0dXJuIHdRfXN0YXRpYyBnZXQgUExVR0lOX1BSSU9SSVRZKCl7cmV0dXJuIDI1MH1zdGF0aWMgZ2V0IFBMVUdJTl9ERVBTKCl7cmV0dXJuWyJwbHVnaW46'@;
put 'RHJvcGRvd25NZW51IiwicGx1Z2luOkhpZGRlblJvd3MiLCJjZWxsLXR5cGU6Y2hlY2tib3giXX1jb25zdHJ1Y3RvcihsKXt2YXIgYTtzdXBlcihsKSxhPXRoaXMsZnVuY3Rpb24gWmh0KGMsbCl7RDVlKGMsbCksbC5hZGQoYyl9KHRoaXMsTmgpLHRBKHRoaXMsImRyb3Bkb3duTWVudVBsdWdp'@;
put 'biIsbnVsbCksdEEodGhpcywiY29uZGl0aW9uQ29sbGVjdGlvbiIsbnVsbCksdEEodGhpcywiY29uZGl0aW9uVXBkYXRlT2JzZXJ2ZXIiLG51bGwpLHRBKHRoaXMsImNvbXBvbmVudHMiLG5ldyBNYXAoW1siZmlsdGVyX2J5X2NvbmRpdGlvbiIsbnVsbF0sWyJmaWx0ZXJfb3BlcmF0b3JzIixu'@;
put 'dWxsXSxbImZpbHRlcl9ieV9jb25kaXRpb24yIixudWxsXSxbImZpbHRlcl9ieV92YWx1ZSIsbnVsbF0sWyJmaWx0ZXJfYWN0aW9uX2JhciIsbnVsbF1dKSksdEEodGhpcywiZmlsdGVyc1Jvd3NNYXAiLG51bGwpLF9RKHRoaXMsTmcsdm9pZCAwKSxfUSh0aGlzLENRLG5ldyBXZWFrU2V0KSxf'@;
put 'USh0aGlzLE05LFtdKSx0aGlzLmhvdC5hZGRIb29rKCJhZnRlckdldENvbEhlYWRlciIsZnVuY3Rpb24oKXtmb3IodmFyIGQ9YXJndW1lbnRzLmxlbmd0aCxoPW5ldyBBcnJheShkKSxmPTA7ZjxkO2YrKyloW2ZdPWFyZ3VtZW50c1tmXTtyZXR1cm4gJGQoTmgsYSx0MnQpLmNhbGwoYSwuLi5o'@;
put 'KX0pfWlzRW5hYmxlZCgpe3JldHVybiEhdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVt3UV19ZW5hYmxlUGx1Z2luKCl7dmFyIGw9dGhpcztpZih0aGlzLmVuYWJsZWQpcmV0dXJuO3RoaXMuZmlsdGVyc1Jvd3NNYXA9dGhpcy5ob3Qucm93SW5kZXhNYXBwZXIucmVnaXN0ZXJNYXAodGhpcy5wbHVn'@;
put 'aW5OYW1lLG5ldyBxRSksdGhpcy5kcm9wZG93bk1lbnVQbHVnaW49dGhpcy5ob3QuZ2V0UGx1Z2luKCJkcm9wZG93bk1lbnUiKTtjb25zdCBhPXRoaXMuaG90LmdldFNldHRpbmdzKCkuZHJvcGRvd25NZW51LGQ9YSYmYS51aUNvbnRhaW5lcnx8dGhpcy5ob3Qucm9vdERvY3VtZW50LmJvZHks'@;
put 'aD1NPT4oTS5hZGRMb2NhbEhvb2soImFjY2VwdCIsKCk9PiRkKE5oLHRoaXMsUjVlKS5jYWxsKHRoaXMsImFjY2VwdCIpKSxNLmFkZExvY2FsSG9vaygiY2FuY2VsIiwoKT0+JGQoTmgsdGhpcyxSNWUpLmNhbGwodGhpcywiY2FuY2VsIikpLE0uYWRkTG9jYWxIb29rKCJjaGFuZ2UiLEQ9PiRk'@;
put 'KE5oLHRoaXMsZTJ0KS5jYWxsKHRoaXMsTSxEKSksTSksZj0oKT0+YCR7dGhpcy5ob3QuZ2V0VHJhbnNsYXRlZFBocmFzZSh0WCl9OmA7aWYoIXRoaXMuY29tcG9uZW50cy5nZXQoImZpbHRlcl9ieV9jb25kaXRpb24iKSl7Y29uc3QgTT1uZXcgdVEodGhpcy5ob3Qse2lkOiJmaWx0ZXJfYnlf'@;
put 'Y29uZGl0aW9uIixuYW1lOmYsYWRkU2VwYXJhdG9yOiExLG1lbnVDb250YWluZXI6ZH0pO00uYWRkTG9jYWxIb29rKCJhZnRlckNsb3NlIiwoKT0+JGQoTmgsdGhpcyxMNWUpLmNhbGwodGhpcykpLHRoaXMuY29tcG9uZW50cy5zZXQoImZpbHRlcl9ieV9jb25kaXRpb24iLGgoTSkpfWlmKHRo'@;
put 'aXMuY29tcG9uZW50cy5nZXQoImZpbHRlcl9vcGVyYXRvcnMiKXx8dGhpcy5jb21wb25lbnRzLnNldCgiZmlsdGVyX29wZXJhdG9ycyIsbmV3IFFkdCh0aGlzLmhvdCx7aWQ6ImZpbHRlcl9vcGVyYXRvcnMiLG5hbWU6Ik9wZXJhdG9ycyJ9KSksIXRoaXMuY29tcG9uZW50cy5nZXQoImZpbHRl'@;
put 'cl9ieV9jb25kaXRpb24yIikpe2NvbnN0IE09bmV3IHVRKHRoaXMuaG90LHtpZDoiZmlsdGVyX2J5X2NvbmRpdGlvbjIiLG5hbWU6IiIsYWRkU2VwYXJhdG9yOiEwLG1lbnVDb250YWluZXI6ZH0pO00uYWRkTG9jYWxIb29rKCJhZnRlckNsb3NlIiwoKT0+JGQoTmgsdGhpcyxMNWUpLmNhbGwo'@;
put 'dGhpcykpLHRoaXMuY29tcG9uZW50cy5zZXQoImZpbHRlcl9ieV9jb25kaXRpb24yIixoKE0pKX1pZih0aGlzLmNvbXBvbmVudHMuZ2V0KCJmaWx0ZXJfYnlfdmFsdWUiKXx8dGhpcy5jb21wb25lbnRzLnNldCgiZmlsdGVyX2J5X3ZhbHVlIixoKG5ldyB5aHQodGhpcy5ob3Qse2lkOiJmaWx0'@;
put 'ZXJfYnlfdmFsdWUiLG5hbWU6KCk9PmAke3RoaXMuaG90LmdldFRyYW5zbGF0ZWRQaHJhc2UoblgpfTpgfSkpKSx0aGlzLmNvbXBvbmVudHMuZ2V0KCJmaWx0ZXJfYWN0aW9uX2JhciIpfHx0aGlzLmNvbXBvbmVudHMuc2V0KCJmaWx0ZXJfYWN0aW9uX2JhciIsaChuZXcgUVQodGhpcy5ob3Qs'@;
put 'e2lkOiJmaWx0ZXJfYWN0aW9uX2JhciIsbmFtZToiQWN0aW9uIGJhciJ9KSkpLHRoaXMuY29uZGl0aW9uQ29sbGVjdGlvbnx8KHRoaXMuY29uZGl0aW9uQ29sbGVjdGlvbj1uZXcgRTVlKHRoaXMuaG90KSksdGhpcy5jb25kaXRpb25VcGRhdGVPYnNlcnZlcnx8KHRoaXMuY29uZGl0aW9uVXBk'@;
put 'YXRlT2JzZXJ2ZXI9bmV3IGpodCh0aGlzLmhvdCx0aGlzLmNvbmRpdGlvbkNvbGxlY3Rpb24sTT0+dGhpcy5nZXREYXRhTWFwQXRDb2x1bW4oTSkpLHRoaXMuY29uZGl0aW9uVXBkYXRlT2JzZXJ2ZXIuYWRkTG9jYWxIb29rKCJ1cGRhdGUiLE09PiRkKE5oLHRoaXMsbjJ0KS5jYWxsKHRoaXMs'@;
put 'TSkpKSx0aGlzLmNvbXBvbmVudHMuZm9yRWFjaChNPT5NLnNob3coKSksdGhpcy5hZGRIb29rKCJhZnRlckRyb3Bkb3duTWVudURlZmF1bHRPcHRpb25zIixmdW5jdGlvbigpe2Zvcih2YXIgTT1hcmd1bWVudHMubGVuZ3RoLEQ9bmV3IEFycmF5KE0pLFo9MDtaPE07WisrKURbWl09YXJndW1l'@;
put 'bnRzW1pdO3JldHVybiAkZChOaCxsLFFodCkuY2FsbChsLC4uLkQpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVEcm9wZG93bk1lbnVTaG93IiwoKT0+JGQoTmgsdGhpcyxKaHQpLmNhbGwodGhpcykpLHRoaXMuYWRkSG9vaygiYWZ0ZXJEcm9wZG93bk1lbnVTaG93IiwoKT0+JGQoTmgsdGhpcyxx'@;
put 'aHQpLmNhbGwodGhpcykpLHRoaXMuYWRkSG9vaygiYWZ0ZXJEcm9wZG93bk1lbnVIaWRlIiwoKT0+JGQoTmgsdGhpcyxYaHQpLmNhbGwodGhpcykpLHRoaXMuYWRkSG9vaygiYWZ0ZXJDaGFuZ2UiLE09PiRkKE5oLHRoaXMsS2h0KS5jYWxsKHRoaXMsTSkpLHRoaXMuaG90LmdldFNldHRpbmdz'@;
put 'KCkuZHJvcGRvd25NZW51JiZ0aGlzLmRyb3Bkb3duTWVudVBsdWdpbiYmKHRoaXMuZHJvcGRvd25NZW51UGx1Z2luLmRpc2FibGVQbHVnaW4oKSx0aGlzLmRyb3Bkb3duTWVudVBsdWdpbi5lbmFibGVQbHVnaW4oKSksIVgyKE5nLHRoaXMpJiZ0aGlzLmRyb3Bkb3duTWVudVBsdWdpbi5lbmFi'@;
put 'bGVkKXtjb25zdCBNPVt7Zm9jdXM6KCk9Pntjb25zdCBaPVgyKE5nLHRoaXMpLmdldE1lbnUoKSxyZT1aLmdldE5hdmlnYXRvcigpLGNlPVgyKE5nLHRoaXMpLmdldExhc3RNZW51UGFnZSgpO1ouZm9jdXMoKSxjZT4wP3JlLnNldEN1cnJlbnRQYWdlKGNlKTpyZS50b0ZpcnN0SXRlbSgpfX0s'@;
put 'Li4uQXJyYXkuZnJvbSh0aGlzLmNvbXBvbmVudHMpLm1hcChaPT57bGV0WyxyZV09WjtyZXR1cm4gcmUuZ2V0RWxlbWVudHMoKX0pLmZsYXQoKV07WEYoTmcsdGhpcyxmdW5jdGlvbiBVaHQoYyxsKXtsZXQgZCxhPS0xO2NvbnN0IGg9ZnVuY3Rpb24gemh0KGMpe3JldHVybiB3Z2Uoe2luaXRp'@;
put 'YWxQYWdlOjAsc2l6ZTooKT0+Yy5sZW5ndGgsb25JdGVtU2VsZWN0OihhLGQpPT57Y29uc3QgaD1jW2FdO3JldHVybiBoIGluc3RhbmNlb2YgWFQ/ZDohKGguZWxlbWVudCYmIVU3KGguZWxlbWVudCkpJiZ2b2lkIGguZm9jdXMoKX19KX0obCksZj1jZT0+KCk9PntkLmlzT3BlbmVkKCkmJmQu'@;
put 'Z2V0S2V5Ym9hcmRTaG9ydGN1dHNDdHJsKCkubGlzdGVuKGVBKSxoLnNldEN1cnJlbnRQYWdlKGwuaW5kZXhPZihjZSkpfTtmdW5jdGlvbiB2KGNlKXtjb25zdCBiZT1kLmdldEtleWJvYXJkU2hvcnRjdXRzQ3RybCgpLEVlPWNlLmdldEtleWJvYXJkU2hvcnRjdXRzQ3RybCgpO2guY2xlYXIo'@;
put 'KSxFZS5hZGRDdXN0b21TaG9ydGN1dHMoW3trZXlzOltbIlRhYiJdLFsiU2hpZnQiLCJUYWIiXV0sZm9yd2FyZFRvQ29udGV4dDpiZS5nZXRDb250ZXh0KGVBKSxjYWxsYmFjazooKT0+e2NlLmlzU3ViTWVudSgpJiZjZS5jbG9zZSgpLGJlLmxpc3RlbihlQSl9fV0pLCFjZS5pc1N1Yk1lbnUo'@;
put 'KSYmYmUuYWRkQ3VzdG9tU2hvcnRjdXRzKFt7a2V5czpbWyJUYWIiXSxbIlNoaWZ0IiwiVGFiIl1dLGNhbGxiYWNrOkJlPT57Y29uc3QgcWU9ZC5nZXROYXZpZ2F0b3IoKTtxZS5nZXRDdXJyZW50UGFnZSgpPi0xJiYoYT1xZS5nZXRDdXJyZW50UGFnZSgpKSxxZS5jbGVhcigpLEJlLnNoaWZ0'@;
put 'S2V5P2gudG9QcmV2aW91c0l0ZW0oKTpoLnRvTmV4dEl0ZW0oKX19LHtrZXlzOltbIkVzY2FwZSJdXSxjYWxsYmFjazooKT0+e2QuY2xvc2UoKX19LHtrZXlzOltbIkVudGVyIl0sWyJTcGFjZSJdXSxwcmV2ZW50RGVmYXVsdDohMSxjYWxsYmFjazpCZT0+e2NvbnN0IHFlPWxbaC5nZXRDdXJy'@;
put 'ZW50UGFnZSgpXTtxZSBpbnN0YW5jZW9mIFpUJiYocWUub3Blbk9wdGlvbnMoKSxCZS5wcmV2ZW50RGVmYXVsdCgpKSxxZSBpbnN0YW5jZW9mIEtUJiYocWUuYWN0aXZhdGUoKSxCZS5wcmV2ZW50RGVmYXVsdCgpKSxxZSBpbnN0YW5jZW9mIEhofHxCZS5wcmV2ZW50RGVmYXVsdCgpfX1dLGVB'@;
put 'KX1mdW5jdGlvbiBEKGNlKXtjZS5hZGRMb2NhbEhvb2soImFmdGVyU2VsZWN0aW9uQ2hhbmdlIixiZT0+e2JlLmtleS5zdGFydHNXaXRoKCJmaWx0ZXJfIil8fGguY2xlYXIoKX0pLGNlLmFkZExvY2FsSG9vaygiYWZ0ZXJTdWJtZW51T3BlbiIsdiksY2UuYWRkTG9jYWxIb29rKCJhZnRlck9w'@;
put 'ZW4iLHYpLGQ9Y2V9cmV0dXJuIGwuZm9yRWFjaChjZT0+e2NlIGluc3RhbmNlb2YgSGgmJihjZS5hZGRMb2NhbEhvb2soImNsaWNrIixmKGNlKSksY2UuYWRkTG9jYWxIb29rKCJmb2N1cyIsZihjZSkpLGNlLmFkZExvY2FsSG9vaygiYWZ0ZXJDbG9zZSIsZihjZSkpKX0pLEQoYyksey4uLmgs'@;
put 'bGlzdGVuOmZ1bmN0aW9uIE0oKXtkLmZvY3VzKCksZC5nZXRLZXlib2FyZFNob3J0Y3V0c0N0cmwoKS5saXN0ZW4oZUEpfSxzZXRNZW51OkQsZ2V0TWVudTpmdW5jdGlvbiBaKCl7cmV0dXJuIGR9LGdldExhc3RNZW51UGFnZTpmdW5jdGlvbiByZSgpe3JldHVybiBhfX19KHRoaXMuZHJvcGRv'@;
put 'd25NZW51UGx1Z2luLm1lbnUsTSkpO2NvbnN0IEQ9Wj0+e1gyKE5nLHRoaXMpLmxpc3RlbigpLFoucHJldmVudERlZmF1bHQoKSx1XyhaLmtleUNvZGUsIlRBQiIpJiYoWi5zaGlmdEtleT9YMihOZyx0aGlzKS50b1ByZXZpb3VzSXRlbSgpOlgyKE5nLHRoaXMpLnRvTmV4dEl0ZW0oKSl9O3Ro'@;
put 'aXMuY29tcG9uZW50cy5nZXQoImZpbHRlcl9ieV92YWx1ZSIpLmFkZExvY2FsSG9vaygibGlzdFRhYktleWRvd24iLEQpLHRoaXMuY29tcG9uZW50cy5nZXQoImZpbHRlcl9ieV9jb25kaXRpb24iKS5hZGRMb2NhbEhvb2soInNlbGVjdFRhYktleWRvd24iLEQpfXRoaXMucmVnaXN0ZXJTaG9y'@;
put 'dGN1dHMoKSxzdXBlci5lbmFibGVQbHVnaW4oKX1kaXNhYmxlUGx1Z2luKCl7dmFyIGw7dGhpcy5lbmFibGVkJiYobnVsbCE9PShsPXRoaXMuZHJvcGRvd25NZW51UGx1Z2luKSYmdm9pZCAwIT09bCYmbC5lbmFibGVkJiZ0aGlzLmRyb3Bkb3duTWVudVBsdWdpbi5tZW51LmNsZWFyTG9jYWxI'@;
put 'b29rcygpLHRoaXMuY29tcG9uZW50cy5mb3JFYWNoKChhLGQpPT57YS5kZXN0cm95KCksdGhpcy5jb21wb25lbnRzLnNldChkLG51bGwpfSksdGhpcy5jb25kaXRpb25Db2xsZWN0aW9uLmRlc3Ryb3koKSx0aGlzLmNvbmRpdGlvbkNvbGxlY3Rpb249bnVsbCx0aGlzLmhvdC5yb3dJbmRleE1h'@;
put 'cHBlci51bnJlZ2lzdGVyTWFwKHRoaXMucGx1Z2luTmFtZSkpLHRoaXMudW5yZWdpc3RlclNob3J0Y3V0cygpLHN1cGVyLmRpc2FibGVQbHVnaW4oKX1yZWdpc3RlclNob3J0Y3V0cygpe3RoaXMuaG90LmdldFNob3J0Y3V0TWFuYWdlcigpLmdldENvbnRleHQoImdyaWQiKS5hZGRTaG9ydGN1'@;
put 'dCh7a2V5czpbWyJBbHQiLCJBIl1dLHN0b3BQcm9wYWdhdGlvbjohMCxjYWxsYmFjazooKT0+e2NvbnN0IGw9dGhpcy5ob3QuZ2V0U2VsZWN0ZWQoKTt0aGlzLmNsZWFyQ29uZGl0aW9ucygpLHRoaXMuZmlsdGVyKCksbCYmdGhpcy5ob3Quc2VsZWN0Q2VsbHMobCl9LGdyb3VwOkk1ZX0pfXVu'@;
put 'cmVnaXN0ZXJTaG9ydGN1dHMoKXt0aGlzLmhvdC5nZXRTaG9ydGN1dE1hbmFnZXIoKS5nZXRDb250ZXh0KCJncmlkIikucmVtb3ZlU2hvcnRjdXRzQnlHcm91cChJNWUpfWFkZENvbmRpdGlvbihsLGEsZCl7bGV0IGg9YXJndW1lbnRzLmxlbmd0aD4zJiZ2b2lkIDAhPT1hcmd1bWVudHNbM10/'@;
put 'YXJndW1lbnRzWzNdOmE2O2NvbnN0IGY9dGhpcy5ob3QudG9QaHlzaWNhbENvbHVtbihsKTt0aGlzLmNvbmRpdGlvbkNvbGxlY3Rpb24uYWRkQ29uZGl0aW9uKGYse2NvbW1hbmQ6e2tleTphfSxhcmdzOmR9LGgpfXJlbW92ZUNvbmRpdGlvbnMobCl7Y29uc3QgYT10aGlzLmhvdC50b1BoeXNp'@;
put 'Y2FsQ29sdW1uKGwpO3RoaXMuY29uZGl0aW9uQ29sbGVjdGlvbi5yZW1vdmVDb25kaXRpb25zKGEpfWNsZWFyQ29uZGl0aW9ucyhsKXtpZih2b2lkIDA9PT1sKXRoaXMuY29uZGl0aW9uQ29sbGVjdGlvbi5jbGVhbigpO2Vsc2V7Y29uc3QgYT10aGlzLmhvdC50b1BoeXNpY2FsQ29sdW1uKGwp'@;
put 'O3RoaXMuY29uZGl0aW9uQ29sbGVjdGlvbi5yZW1vdmVDb25kaXRpb25zKGEpfX1pbXBvcnRDb25kaXRpb25zKGwpe3RoaXMuY29uZGl0aW9uQ29sbGVjdGlvbi5pbXBvcnRBbGxDb25kaXRpb25zKGwpfWV4cG9ydENvbmRpdGlvbnMoKXtyZXR1cm4gdGhpcy5jb25kaXRpb25Db2xsZWN0aW9u'@;
put 'LmV4cG9ydEFsbENvbmRpdGlvbnMoKX1maWx0ZXIoKXtjb25zdHtuYXZpZ2FibGVIZWFkZXJzOmx9PXRoaXMuaG90LmdldFNldHRpbmdzKCksYT10aGlzLl9jcmVhdGVEYXRhRmlsdGVyKCksZD0hdGhpcy5jb25kaXRpb25Db2xsZWN0aW9uLmlzRW1wdHkoKTtsZXQgaD1bXTtjb25zdCBmPXRo'@;
put 'aXMuZXhwb3J0Q29uZGl0aW9ucygpLHY9dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZUZpbHRlciIsZixYMihNOSx0aGlzKSk7aWYoITEhPT12JiZkKXtjb25zdCBNPVtdO3RoaXMuaG90LmJhdGNoRXhlY3V0aW9uKCgpPT57dGhpcy5maWx0ZXJzUm93c01hcC5jbGVhcigpLGg9eXMoYS5maWx0'@;
put 'ZXIoKSxaPT5aLm1ldGEudmlzdWFsUm93KTtjb25zdCBEPUdUKGgpO0dhKHRoaXMuaG90LmNvdW50U291cmNlUm93cygpLTEsWj0+e0QoWil8fE0ucHVzaChaKX0pLFluKE0sWj0+e3RoaXMuZmlsdGVyc1Jvd3NNYXAuc2V0VmFsdWVBdEluZGV4KFosITApfSl9LCEwKSwhbCYmIWgubGVuZ3Ro'@;
put 'JiZ0aGlzLmhvdC5kZXNlbGVjdENlbGwoKSxYRihNOSx0aGlzLHRoaXMuZXhwb3J0Q29uZGl0aW9ucygpKX1lbHNlITE9PT12fHxkP3RoaXMuaW1wb3J0Q29uZGl0aW9ucyhYMihNOSx0aGlzKSk6KFhGKE05LHRoaXMsdGhpcy5leHBvcnRDb25kaXRpb25zKCkpLHRoaXMuZmlsdGVyc1Jvd3NN'@;
put 'YXAuY2xlYXIoKSk7dGhpcy5ob3Quc2VsZWN0aW9uLmlzU2VsZWN0ZWQoKSYmdGhpcy5ob3Quc2VsZWN0Q2VsbChsPy0xOjAsdGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKS5oaWdobGlnaHQuY29sKSwhMSE9PXYmJih0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJGaWx0ZXIiLGYpLHRo'@;
put 'aXMuaG90LnZpZXcuYWRqdXN0RWxlbWVudHNTaXplKCksdGhpcy5ob3QucmVuZGVyKCkpfWdldFNlbGVjdGVkQ29sdW1uKCl7dmFyIGw7Y29uc3QgYT1udWxsPT09KGw9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSl8fHZvaWQgMD09PWw/dm9pZCAwOmwuaGlnaGxpZ2h0O3JldHVy'@;
put 'biBhP3t2aXN1YWxJbmRleDphLmNvbCxwaHlzaWNhbEluZGV4OnRoaXMuaG90LnRvUGh5c2ljYWxDb2x1bW4oYS5jb2wpfTpudWxsfWdldERhdGFNYXBBdENvbHVtbihsKXtjb25zdCBhPXRoaXMuaG90LnRvVmlzdWFsQ29sdW1uKGwpLGQ9W107cmV0dXJuIFluKHRoaXMuaG90LmdldFNvdXJj'@;
put 'ZURhdGFBdENvbChhKSwoaCxmKT0+e3ZhciB2O2NvbnN0e3JvdzpNLGNvbDpELHZpc3VhbENvbDpaLHZpc3VhbFJvdzpyZSx0eXBlOmNlLGluc3RhbmNlOmJlLGRhdGVGb3JtYXQ6RWUsbG9jYWxlOkJlfT10aGlzLmhvdC5nZXRDZWxsTWV0YShmLGEpLHFlPW51bGwhPT0odj10aGlzLmhvdC5n'@;
put 'ZXREYXRhQXRDZWxsKHRoaXMuaG90LnRvVmlzdWFsUm93KGYpLGEpKSYmdm9pZCAwIT09dj92Omg7ZC5wdXNoKHttZXRhOntyb3c6TSxjb2w6RCx2aXN1YWxDb2w6Wix2aXN1YWxSb3c6cmUsdHlwZTpjZSxpbnN0YW5jZTpiZSxkYXRlRm9ybWF0OkVlLGxvY2FsZTpCZX0sdmFsdWU6cFEocWUp'@;
put 'fSl9KSxkfXVwZGF0ZVZhbHVlQ29tcG9uZW50Q29uZGl0aW9uKGwpe2NvbnN0IGQ9Z1EodGhpcy5ob3QuZ2V0RGF0YUF0Q29sKGwpKTt0aGlzLmNvbmRpdGlvblVwZGF0ZU9ic2VydmVyLnVwZGF0ZVN0YXRlc0F0Q29sdW1uKGwsZCl9cmVzdG9yZUNvbXBvbmVudHMobCl7dmFyIGE7Y29uc3Qg'@;
put 'ZD1udWxsPT09KGE9dGhpcy5nZXRTZWxlY3RlZENvbHVtbigpKXx8dm9pZCAwPT09YT92b2lkIDA6YS5waHlzaWNhbEluZGV4O2wuZm9yRWFjaChoPT57aC5pc0hpZGRlbigpfHxoLnJlc3RvcmVTdGF0ZShkKX0pLHRoaXMudXBkYXRlRGVwZW5kZW50Q29tcG9uZW50c1Zpc2liaWxpdHkoKX1n'@;
put 'ZXRPcGVyYXRpb25CYXNlZE9uQXJndW1lbnRzKGwsYSxkLGgpe2xldCBmPWw7cmV0dXJuIGY9PT1HRiYmYS5jb21tYW5kLmtleSE9PUUwJiZkLmNvbW1hbmQua2V5IT09RTAmJmguY29tbWFuZC5rZXkhPT1FMD9mPWhROmguY29tbWFuZC5rZXkhPT1FMCYmKGEuY29tbWFuZC5rZXk9PT1FMHx8'@;
put 'ZC5jb21tYW5kLmtleT09PUUwKSYmKGY9YTYpLGZ9c2V0TGlzdGVuaW5nRHJvcGRvd25NZW51KCl7dGhpcy5kcm9wZG93bk1lbnVQbHVnaW4mJnRoaXMuZHJvcGRvd25NZW51UGx1Z2luLnNldExpc3RlbmluZygpfXVwZGF0ZURlcGVuZGVudENvbXBvbmVudHNWaXNpYmlsaXR5KCl7Y29uc3Qg'@;
put 'bD10aGlzLmNvbXBvbmVudHMuZ2V0KCJmaWx0ZXJfYnlfY29uZGl0aW9uIikse2NvbW1hbmQ6YX09bC5nZXRTdGF0ZSgpLGQ9W3RoaXMuY29tcG9uZW50cy5nZXQoImZpbHRlcl9ieV9jb25kaXRpb24yIiksdGhpcy5jb21wb25lbnRzLmdldCgiZmlsdGVyX29wZXJhdG9ycyIpXTthLnNob3dP'@;
put 'cGVyYXRvcnM/dGhpcy5zaG93Q29tcG9uZW50cyguLi5kKTp0aGlzLmhpZGVDb21wb25lbnRzKC4uLmQpfV9jcmVhdGVEYXRhRmlsdGVyKCl7cmV0dXJuIG5ldyBBNWUoYXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnRoaXMuY29uZGl0aW9u'@;
put 'Q29sbGVjdGlvbixhPT50aGlzLmdldERhdGFNYXBBdENvbHVtbihhKSl9Z2V0SW5kZXhlc09mQ29tcG9uZW50cygpe2NvbnN0IGw9W107aWYoIXRoaXMuZHJvcGRvd25NZW51UGx1Z2luKXJldHVybiBsO2NvbnN0IGE9dGhpcy5kcm9wZG93bk1lbnVQbHVnaW4ubWVudTtmb3IodmFyIGQ9YXJn'@;
put 'dW1lbnRzLmxlbmd0aCxoPW5ldyBBcnJheShkKSxmPTA7ZjxkO2YrKyloW2ZdPWFyZ3VtZW50c1tmXTtyZXR1cm4gWW4oaCx2PT57WW4oYS5tZW51SXRlbXMsKE0sRCk9PntNLmtleT09PXYuZ2V0TWVudUl0ZW1EZXNjcmlwdG9yKCkua2V5JiZsLnB1c2goRCl9KX0pLGx9Y2hhbmdlQ29tcG9u'@;
put 'ZW50c1Zpc2liaWxpdHkoKXtsZXQgbD0hKGFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdKXx8YXJndW1lbnRzWzBdO2lmKCF0aGlzLmRyb3Bkb3duTWVudVBsdWdpbilyZXR1cm47Y29uc3QgZD10aGlzLmRyb3Bkb3duTWVudVBsdWdpbi5tZW51LmhvdE1lbnUsaD1k'@;
put 'LmdldFBsdWdpbigiaGlkZGVuUm93cyIpO2Zvcih2YXIgZj1hcmd1bWVudHMubGVuZ3RoLHY9bmV3IEFycmF5KGY+MT9mLTE6MCksTT0xO008ZjtNKyspdltNLTFdPWFyZ3VtZW50c1tNXTtjb25zdCBEPXRoaXMuZ2V0SW5kZXhlc09mQ29tcG9uZW50cyguLi52KTtsP2guc2hvd1Jvd3MoRCk6'@;
put 'aC5oaWRlUm93cyhEKSxkLnJlbmRlcigpfWhpZGVDb21wb25lbnRzKCl7Zm9yKHZhciBsPWFyZ3VtZW50cy5sZW5ndGgsYT1uZXcgQXJyYXkobCksZD0wO2Q8bDtkKyspYVtkXT1hcmd1bWVudHNbZF07dGhpcy5jaGFuZ2VDb21wb25lbnRzVmlzaWJpbGl0eSghMSwuLi5hKX1zaG93Q29tcG9u'@;
put 'ZW50cygpe2Zvcih2YXIgbD1hcmd1bWVudHMubGVuZ3RoLGE9bmV3IEFycmF5KGwpLGQ9MDtkPGw7ZCsrKWFbZF09YXJndW1lbnRzW2RdO3RoaXMuY2hhbmdlQ29tcG9uZW50c1Zpc2liaWxpdHkoITAsLi4uYSl9ZGVzdHJveSgpe3RoaXMuZW5hYmxlZCYmKHRoaXMuY29tcG9uZW50cy5mb3JF'@;
put 'YWNoKChsLGEpPT57bnVsbCE9PWwmJihsLmRlc3Ryb3koKSx0aGlzLmNvbXBvbmVudHMuc2V0KGEsbnVsbCkpfSksdGhpcy5jb25kaXRpb25Db2xsZWN0aW9uLmRlc3Ryb3koKSx0aGlzLmNvbmRpdGlvblVwZGF0ZU9ic2VydmVyLmRlc3Ryb3koKSx0aGlzLmhvdC5yb3dJbmRleE1hcHBlci51'@;
put 'bnJlZ2lzdGVyTWFwKHRoaXMucGx1Z2luTmFtZSkpLHN1cGVyLmRlc3Ryb3koKX19ZnVuY3Rpb24gS2h0KGMpe2MmJlluKGMsbD0+e2NvbnN0WyxhXT1sLGQ9dGhpcy5ob3QucHJvcFRvQ29sKGEpO3RoaXMuY29uZGl0aW9uQ29sbGVjdGlvbi5oYXNDb25kaXRpb25zKGQpJiZ0aGlzLnVwZGF0'@;
put 'ZVZhbHVlQ29tcG9uZW50Q29uZGl0aW9uKGQpfSl9ZnVuY3Rpb24gcWh0KCl7Y29uc3QgYz10aGlzLmRyb3Bkb3duTWVudVBsdWdpbi5tZW51O3RoaXMucmVzdG9yZUNvbXBvbmVudHMoQXJyYXkuZnJvbSh0aGlzLmNvbXBvbmVudHMudmFsdWVzKCkpKSxjLnVwZGF0ZU1lbnVEaW1lbnNpb25z'@;
put 'KCl9ZnVuY3Rpb24gWGh0KCl7dGhpcy5jb21wb25lbnRzLmdldCgiZmlsdGVyX2J5X2NvbmRpdGlvbiIpLmdldFNlbGVjdEVsZW1lbnQoKS5jbG9zZU9wdGlvbnMoKSx0aGlzLmNvbXBvbmVudHMuZ2V0KCJmaWx0ZXJfYnlfY29uZGl0aW9uMiIpLmdldFNlbGVjdEVsZW1lbnQoKS5jbG9zZU9w'@;
put 'dGlvbnMoKX1mdW5jdGlvbiBKaHQoKXtjb25zdCBjPXRoaXMuZHJvcGRvd25NZW51UGx1Z2luLm1lbnU7WDIoQ1EsdGhpcykuaGFzKGMpfHxYMihOZyx0aGlzKS5zZXRNZW51KGMpLFgyKENRLHRoaXMpLmFkZChjKX1mdW5jdGlvbiBRaHQoYyl7Yy5pdGVtcy5wdXNoKHtuYW1lOnNzfSksdGhp'@;
put 'cy5jb21wb25lbnRzLmZvckVhY2gobD0+e2MuaXRlbXMucHVzaChsLmdldE1lbnVJdGVtRGVzY3JpcHRvcigpKX0pfWZ1bmN0aW9uIFI1ZShjKXt2YXIgbDtpZigiYWNjZXB0Ij09PWMpe2NvbnN0IGQ9dGhpcy5nZXRTZWxlY3RlZENvbHVtbigpO3ZhciBhO2lmKG51bGw9PT1kKXJldHVybiB2'@;
put 'b2lkKG51bGw9PT0oYT10aGlzLmRyb3Bkb3duTWVudVBsdWdpbil8fHZvaWQgMD09PWF8fGEuY2xvc2UoKSk7Y29uc3R7cGh5c2ljYWxJbmRleDpofT1kLGY9dGhpcy5jb21wb25lbnRzLmdldCgiZmlsdGVyX2J5X2NvbmRpdGlvbiIpLmdldFN0YXRlKCksdj10aGlzLmNvbXBvbmVudHMuZ2V0'@;
put 'KCJmaWx0ZXJfYnlfY29uZGl0aW9uMiIpLmdldFN0YXRlKCksTT10aGlzLmNvbXBvbmVudHMuZ2V0KCJmaWx0ZXJfYnlfdmFsdWUiKS5nZXRTdGF0ZSgpLEQ9dGhpcy5nZXRPcGVyYXRpb25CYXNlZE9uQXJndW1lbnRzKHRoaXMuY29tcG9uZW50cy5nZXQoImZpbHRlcl9vcGVyYXRvcnMiKS5n'@;
put 'ZXRBY3RpdmVPcGVyYXRpb25JZCgpLGYsdixNKTt0aGlzLmNvbmRpdGlvblVwZGF0ZU9ic2VydmVyLmdyb3VwQ2hhbmdlcygpO2xldCBaPXRoaXMuY29uZGl0aW9uQ29sbGVjdGlvbi5nZXRDb2x1bW5TdGFja1Bvc2l0aW9uKGgpOy0xPT09WiYmKFo9dm9pZCAwKSx0aGlzLmNvbmRpdGlvbkNv'@;
put 'bGxlY3Rpb24ucmVtb3ZlQ29uZGl0aW9ucyhoKSxmLmNvbW1hbmQua2V5IT09RTAmJih0aGlzLmNvbmRpdGlvbkNvbGxlY3Rpb24uYWRkQ29uZGl0aW9uKGgsZixELFopLHYuY29tbWFuZC5rZXkhPT1FMCYmdGhpcy5jb25kaXRpb25Db2xsZWN0aW9uLmFkZENvbmRpdGlvbihoLHYsRCxaKSks'@;
put 'TS5jb21tYW5kLmtleSE9PUUwJiZ0aGlzLmNvbmRpdGlvbkNvbGxlY3Rpb24uYWRkQ29uZGl0aW9uKGgsTSxELFopLHRoaXMuY29uZGl0aW9uVXBkYXRlT2JzZXJ2ZXIuZmx1c2goKSx0aGlzLmNvbXBvbmVudHMuZm9yRWFjaChyZT0+cmUuc2F2ZVN0YXRlKGgpKSx0aGlzLmZpbHRlcigpfW51'@;
put 'bGw9PT0obD10aGlzLmRyb3Bkb3duTWVudVBsdWdpbil8fHZvaWQgMD09PWx8fGwuY2xvc2UoKX1mdW5jdGlvbiBlMnQoYyxsKXtjb25zdCBhPXRoaXMuZHJvcGRvd25NZW51UGx1Z2luLm1lbnU7dGhpcy51cGRhdGVEZXBlbmRlbnRDb21wb25lbnRzVmlzaWJpbGl0eSgpLGMuY29uc3RydWN0'@;
put 'b3I9PT11USYmIWwuaW5wdXRzQ291bnQmJnRoaXMuc2V0TGlzdGVuaW5nRHJvcGRvd25NZW51KCksYS51cGRhdGVNZW51RGltZW5zaW9ucygpfWZ1bmN0aW9uIEw1ZSgpe3RoaXMuc2V0TGlzdGVuaW5nRHJvcGRvd25NZW51KCl9ZnVuY3Rpb24gdDJ0KGMsbCxhKXtjb25zdCBkPXRoaXMuaG90'@;
put 'LnRvUGh5c2ljYWxDb2x1bW4oYyk7dGhpcy5lbmFibGVkJiZ0aGlzLmNvbmRpdGlvbkNvbGxlY3Rpb24uaGFzQ29uZGl0aW9ucyhkKSYmYT09PXRoaXMuaG90LnZpZXcuZ2V0Q29sdW1uSGVhZGVyc0NvdW50KCktMT9UaShsLCJodEZpbHRlcnNBY3RpdmUiKTpsbyhsLCJodEZpbHRlcnNBY3Rp'@;
put 'dmUiKX1mdW5jdGlvbiBuMnQoYyl7dmFyIGw7aWYobnVsbD09PShsPXRoaXMuZHJvcGRvd25NZW51UGx1Z2luKXx8dm9pZCAwPT09bHx8IWwuZW5hYmxlZClyZXR1cm47Y29uc3R7ZWRpdGVkQ29uZGl0aW9uU3RhY2s6e2NvbmRpdGlvbnM6YSxjb2x1bW46ZH0sY29uZGl0aW9uQXJnc0NoYW5n'@;
put 'ZTpofT1jO0FycmF5LmlzQXJyYXkoaCkmJlhGKE05LHRoaXMsWDIoTTksdGhpcykubWFwKE09PihNLmNvbHVtbj09PWQmJmEubGVuZ3RoPjAmJk0uY29uZGl0aW9ucy5mb3JFYWNoKEQ9PnsiYnlfdmFsdWUiPT09RC5uYW1lJiYoRC5hcmdzPVtbLi4uaF1dKX0pLE0pKSk7Y29uc3QgZj1hLmZp'@;
put 'bHRlcihNPT5NLm5hbWU9PT1DOSksdj1hLmZpbHRlcihNPT5NLm5hbWUhPT1DOSk7aWYoZi5sZW5ndGg+PTJ8fHYubGVuZ3RoPj0zKWlsKGdsYFRoZSBmaWx0ZXIgY29uZGl0aW9ucyBoYXZlIGJlZW4gYXBwbGllZCBwcm9wZXJseSwgYnV0IGNvdWxkbuKAmXQgYmUgZGlzcGxheWVkIHZpc3Vh'@;
put 'bGx5Llx4MjAKICAgICAgICBUaGUgb3ZlcmFsbCBhbW91bnQgb2YgY29uZGl0aW9ucyBleGNlZWQgdGhlIGNhcGFiaWxpdHkgb2YgdGhlIGRyb3Bkb3duIG1lbnUuXHgyMAogICAgICAgIEZvciBtb3JlIGRldGFpbHMgc2VlIHRoZSBkb2N1bWVudGF0aW9uLmApO2Vsc2V7Y29uc3QgTT10aGlz'@;
put 'LmNvbmRpdGlvbkNvbGxlY3Rpb24uZ2V0T3BlcmF0aW9uKGQpO3RoaXMuY29tcG9uZW50cy5nZXQoImZpbHRlcl9ieV9jb25kaXRpb24iKS51cGRhdGVTdGF0ZSh2WzBdLGQpLHRoaXMuY29tcG9uZW50cy5nZXQoImZpbHRlcl9ieV9jb25kaXRpb24yIikudXBkYXRlU3RhdGUodlsxXSxkKSx0'@;
put 'aGlzLmNvbXBvbmVudHMuZ2V0KCJmaWx0ZXJfb3BlcmF0b3JzIikudXBkYXRlU3RhdGUoTSxkKSx0aGlzLmNvbXBvbmVudHMuZ2V0KCJmaWx0ZXJfYnlfdmFsdWUiKS51cGRhdGVTdGF0ZShjKX19Y29uc3QgTzVlPSJpbnRlcm5hbC11c2UtaW4taGFuZHNvbnRhYmxlIixTUT17bGljZW5zZUtl'@;
put 'eTpPNWUsdXNlQXJyYXlBcml0aG1ldGljOiEwLHVzZUNvbHVtbkluZGV4OiExLHVzZVN0YXRzOiExLGV2YWx1YXRlTnVsbFRvWmVybzohMCxwcmVjaXNpb25FcHNpbG9uOjFlLTEzLHByZWNpc2lvblJvdW5kaW5nOjE0LHNtYXJ0Um91bmRpbmc6ITAsbGVhcFllYXIxOTAwOiExLG51bGxEYXRl'@;
put 'Ont5ZWFyOjE4OTksbW9udGg6MTIsZGF5OjMwfSxudWxsWWVhcjozMCxkYXRlRm9ybWF0czpbIkREL01NL1lZWVkiLCJERC9NTS9ZWSJdLHRpbWVGb3JtYXRzOlsiaGg6bW0iLCJoaDptbTpzcy5zc3MiXSxtYXRjaFdob2xlQ2VsbDohMCx1c2VSZWd1bGFyRXhwcmVzc2lvbnM6ITEsdXNlV2ls'@;
put 'ZGNhcmRzOiEwLGZ1bmN0aW9uQXJnU2VwYXJhdG9yOiIsIix0aG91c2FuZFNlcGFyYXRvcjoiIixkZWNpbWFsU2VwYXJhdG9yOiIuIixsYW5ndWFnZToiZW5HQiJ9O2Z1bmN0aW9uIFA1ZShjKXt2YXIgbDtyZXR1cm57bWF4Q29sdW1uczpjLm1heENvbHVtbnMsbWF4Um93czpjLm1heFJvd3Ms'@;
put 'bGFuZ3VhZ2U6bnVsbD09PShsPWNbdzFdKXx8dm9pZCAwPT09bHx8bnVsbD09PShsPWwubGFuZ3VhZ2UpfHx2b2lkIDA9PT1sP3ZvaWQgMDpsLmxhbmdDb2RlfX1mdW5jdGlvbiBGNWUoYyl7cmV0dXJuIE9iamVjdC5rZXlzKGMpLnJlZHVjZSgobCxhKT0+KCJoeXBlcmZvcm11bGEiIT09YSYm'@;
put 'KGxbYV09Y1thXSksbCkse30pfWZ1bmN0aW9uIEpGKCl7Y29uc3QgYz0iZW5naW5lX3JlbGF0aW9uc2hpcCIsbD1yMyh3MSk7cmV0dXJuIGwuaGFzSXRlbShjKXx8bC5yZWdpc3RlcihjLG5ldyBNYXApLGwuZ2V0SXRlbShjKX1mdW5jdGlvbiBNUSgpe2NvbnN0IGM9InNoYXJlZF9lbmdpbmVf'@;
put 'dXNhZ2UiLGw9cjModzEpO3JldHVybiBsLmhhc0l0ZW0oYyl8fGwucmVnaXN0ZXIoYyxuZXcgTWFwKSxsLmdldEl0ZW0oYyl9ZnVuY3Rpb24gSDVlKGMpe3ZhciBsO2NvbnN0IGE9SkYoKSxkPTA9PT1hLnNpemU/W106QXJyYXkuZnJvbShudWxsIT09KGw9YS5nZXQoYykpJiZ2b2lkIDAhPT1s'@;
put 'P2w6W10pO3JldHVybiBuZXcgTWFwKGQubWFwKGg9PltoLmdldFBsdWdpbigiZm9ybXVsYXMiKS5zaGVldElkLGhdKSl9ZnVuY3Rpb24gTjVlKGMsbCl7aWYoYyl7Y29uc3QgYT1KRigpLGQ9YS5nZXQoYyksaD1NUSgpLGY9aC5nZXQoYyk7ZCYmZC5pbmNsdWRlcyhsKSYmKGQuc3BsaWNlKGQu'@;
put 'aW5kZXhPZihsKSwxKSwwPT09ZC5sZW5ndGgmJmEuZGVsZXRlKGMpKSxmJiZmLmluY2x1ZGVzKGwuZ3VpZCkmJihmLnNwbGljZShmLmluZGV4T2YobC5ndWlkKSwxKSwwPT09Zi5sZW5ndGgmJihoLmRlbGV0ZShjKSxjLmRlc3Ryb3koKSkpfX1jb25zdCBWNWU9IkREL01NL1lZWVkiO2Z1bmN0'@;
put 'aW9uIHhRKGMsbCl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBjJiYiZGF0ZSI9PT1sfWZ1bmN0aW9uIEI1ZShjLGwpe3JldHVybiBPbyhjLGwsITApLmlzVmFsaWQoKX1mdW5jdGlvbiBqNWUoYyxsKXtyZXR1cm4gT28oYyxsLCEwKS5mb3JtYXQoVjVlKX1mdW5jdGlvbiBnMnQoYyxsKXtyZXR1'@;
put 'cm4gT28oYyxWNWUsITApLmZvcm1hdChsKX1mdW5jdGlvbiB6NWUoYyxsKXtjb25zdCBkPW5ldyBEYXRlKERhdGUuVVRDKDAsMCxjKy0xKSk7cmV0dXJuIE9vKGQpLmZvcm1hdChsKX1mdW5jdGlvbiBFUShjLGwsYSl7Y29uc3QgZD1mdW5jdGlvbiB2MnQoYyxsKXtjb25zdCBhPVtdO3JldHVy'@;
put 'biBjLmZvckVhY2goZD0+e2NvbnN0IGg9e2Zyb206ZCx0bzpsfTthLmZvckVhY2goZj0+e2YuZnJvbT5oLmZyb20mJmYudG88PWguZnJvbSYmZi5mcm9tPmYudG8mJihoLmZyb20rPTEpfSksaC5mcm9tPj1sJiYobCs9MSksYS5wdXNoKGgpfSksYX0oYyxmdW5jdGlvbiBtMnQoYyxsLGEpe2Nv'@;
put 'bnN0IGQ9QXJyYXkuZnJvbShBcnJheShhKS5rZXlzKCkpLmZpbHRlcihmPT4hMT09PWMuaW5jbHVkZXMoZikpO3ZhciBoO3JldHVybiAwPT09bD9udWxsIT09KGg9ZFtsXSkmJnZvaWQgMCE9PWg/aDowOmRbbC0xXSsxfShjLGwsYSkpO3JldHVybiBmdW5jdGlvbiBiMnQoYyl7cmV0dXJuIGMu'@;
put 'Zm9yRWFjaCgobCxhKT0+e2Muc2xpY2UoYSsxKS5mb3JFYWNoKGg9PntoLmZyb20+bC5mcm9tJiZoLmZyb208aC50byYmKGguZnJvbS09MSl9KX0pLGN9KGQpfWZ1bmN0aW9uIHg5KGMsbCxhKXsoZnVuY3Rpb24geTJ0KGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fu'@;
put 'bm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX0pKGMsbCksbC5zZXQoYyxhKX1mdW5jdGlvbiBTYyhjLGwpe3JldHVybiBjLmdldChVNWUoYyxsKSl9ZnVuY3Rpb24gbDYoYyxsLGEpe3JldHVybiBjLnNldChVNWUoYyxsKSxhKSxh'@;
put 'fWZ1bmN0aW9uIFU1ZShjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9dmFyIG5B'@;
put 'PW5ldyBXZWFrTWFwLGM2PW5ldyBXZWFrTWFwLFZoPW5ldyBXZWFrTWFwLFFGPW5ldyBXZWFrTWFwLFRRPW5ldyBXZWFrTWFwLEFRPW5ldyBXZWFrTWFwLGVIPW5ldyBXZWFrTWFwO2NvbnN0IFo1ZT1jbGFzcyBfMnR7Y29uc3RydWN0b3IobCxhLGQpe3g5KHRoaXMsbkEsdm9pZCAwKSx4OSh0'@;
put 'aGlzLGM2LHZvaWQgMCkseDkodGhpcyxWaCx2b2lkIDApLHg5KHRoaXMsUUYsW10pLHg5KHRoaXMsVFEsW10pLHg5KHRoaXMsQVEsdm9pZCAwKSx4OSh0aGlzLGVILFtdKSxsNihuQSx0aGlzLGwpLGw2KGM2LHRoaXMsYSksbDYoVmgsdGhpcyxkKX1zZXRSZW1vdmVkSGZJbmRleGVzKGwpe3Jl'@;
put 'dHVybiBsNihlSCx0aGlzLGwubWFwKGE9Pntjb25zdCBkPVNjKGM2LHRoaXMpLmdldFZpc3VhbEZyb21QaHlzaWNhbEluZGV4KGEpO3JldHVybiB0aGlzLmdldEhmSW5kZXhGcm9tVmlzdWFsSW5kZXgoZCl9KSksU2MoZUgsdGhpcyl9Z2V0UmVtb3ZlZEhmSW5kZXhlcygpe3JldHVybiBTYyhl'@;
put 'SCx0aGlzKX1nZXRIZkluZGV4RnJvbVZpc3VhbEluZGV4KGwpe2NvbnN0IGE9U2MoYzYsdGhpcykuZ2V0SW5kZXhlc1NlcXVlbmNlKCksZD1TYyhjNix0aGlzKS5nZXROb3RUcmltbWVkSW5kZXhlcygpO3JldHVybiBhLmluZGV4T2YoZFtsXSxsKX1zeW5jTW92ZXMobCl7Y29uc3QgZD1gbW92'@;
put 'ZSR7cDEoU2MobkEsdGhpcykpfXNgO1NjKFZoLHRoaXMpLmdldEVuZ2luZSgpLmJhdGNoKCgpPT57bC5mb3JFYWNoKGg9PntoLmZyb20hPT1oLnRvJiZoLmZyb20rMSE9PWgudG8mJlNjKFZoLHRoaXMpLmdldEVuZ2luZSgpW2RdKFNjKFZoLHRoaXMpLmdldFNoZWV0SWQoKSxoLmZyb20sMSxo'@;
put 'LnRvKX0pfSl9c3RvcmVNb3Zlc0luZm9ybWF0aW9uKGwsYSxkKXshMSE9PWQmJihsNihUUSx0aGlzLGwubWFwKGg9PnRoaXMuZ2V0SGZJbmRleEZyb21WaXN1YWxJbmRleChoKSkpLGw2KEFRLHRoaXMsdGhpcy5nZXRIZkluZGV4RnJvbVZpc3VhbEluZGV4KGEpKSl9Y2FsY3VsYXRlQW5kU3lu'@;
put 'Y01vdmVzKGwsYSl7aWYoU2MoVmgsdGhpcykuaXNQZXJmb3JtaW5nVW5kb1JlZG8oKXx8ITE9PT1sfHwhMT09PWEpcmV0dXJuO2NvbnN0IGQ9RVEoU2MoVFEsdGhpcyksU2MoQVEsdGhpcyksU2MoYzYsdGhpcykuZ2V0TnVtYmVyT2ZJbmRleGVzKCkpO251bGw9PT1TYyhWaCx0aGlzKS5nZXRT'@;
put 'aGVldElkKCk/U2MoVmgsdGhpcykuZ2V0UG9zdHBvbmVBY3Rpb24oKCk9PnRoaXMuc3luY01vdmVzKGQpKTp0aGlzLnN5bmNNb3ZlcyhkKX1nZXRJbmRleGVzQ2hhbmdlU3luY01ldGhvZCgpe2NvbnN0IGw9YHNldCR7cDEoU2MobkEsdGhpcykpfU9yZGVyYDtyZXR1cm4gYT0+e2lmKFNjKFZo'@;
put 'LHRoaXMpLmlzUGVyZm9ybWluZ1VuZG9SZWRvKCkpcmV0dXJuO2NvbnN0IGQ9U2MoYzYsdGhpcykuZ2V0SW5kZXhlc1NlcXVlbmNlKCk7aWYoInVwZGF0ZSI9PT1hJiZkLmxlbmd0aD4wKXtjb25zdCBoPVNjKFFGLHRoaXMpLm1hcChEPT5kLmluZGV4T2YoRCkpLGY9U2MoVmgsdGhpcykuZ2V0'@;
put 'RW5naW5lKCkuZ2V0U2hlZXREaW1lbnNpb25zKFNjKFZoLHRoaXMpLmdldFNoZWV0SWQoKSk7bGV0IHY7dj0icm93Ij09PVNjKG5BLHRoaXMpP2YuaGVpZ2h0OmYud2lkdGg7Zm9yKGxldCBEPWgubGVuZ3RoO0Q8djtEKz0xKWgucHVzaChEKTtTYyhWaCx0aGlzKS5nZXRFbmdpbmUoKVtsXShT'@;
put 'YyhWaCx0aGlzKS5nZXRTaGVldElkKCksaCl9bDYoUUYsdGhpcyxkKX19aW5pdCgpe2w2KFFGLHRoaXMsU2MoYzYsdGhpcykuZ2V0SW5kZXhlc1NlcXVlbmNlKCkpfX07ZnVuY3Rpb24gRTkoYyxsLGEpeyhmdW5jdGlvbiB3MnQoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9y'@;
put 'KCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfSkoYyxsKSxsLnNldChjLGEpfWZ1bmN0aW9uIFZnKGMsbCl7cmV0dXJuIGMuZ2V0KFc1ZShjLGwpKX1mdW5jdGlvbiBUOShjLGwsYSl7cmV0dXJuIGMuc2V0KFc1ZShjLGwp'@;
put 'LGEpLGF9ZnVuY3Rpb24gVzVlKGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX12'@;
put 'YXIgdEg9bmV3IFdlYWtNYXAsbkg9bmV3IFdlYWtNYXAsa1E9bmV3IFdlYWtNYXAsRFE9bmV3IFdlYWtNYXAsSVE9bmV3IFdlYWtNYXAsUlE9bmV3IFdlYWtNYXAsTFE9bmV3IFdlYWtNYXA7Y29uc3QgUzJ0PWNsYXNzIEMydHtjb25zdHJ1Y3RvcihsLGEsZCl7RTkodGhpcyx0SCx2b2lkIDAp'@;
put 'LEU5KHRoaXMsbkgsdm9pZCAwKSxFOSh0aGlzLGtRLHZvaWQgMCksRTkodGhpcyxEUSwhMSksRTkodGhpcyxJUSwhMSksRTkodGhpcyxSUSxudWxsKSxFOSh0aGlzLExRLG51bGwpLFQ5KHRILHRoaXMsbmV3IFo1ZSgicm93IixsLHRoaXMpKSxUOShuSCx0aGlzLG5ldyBaNWUoImNvbHVtbiIs'@;
put 'YSx0aGlzKSksVDkoa1EsdGhpcyxkKX1nZXRGb3JBeGlzKGwpe3JldHVybiBWZygicm93Ij09PWw/dEg6bkgsdGhpcyl9c2V0UGVyZm9ybVVuZG8obCl7VDkoRFEsdGhpcyxsKX1zZXRQZXJmb3JtUmVkbyhsKXtUOShJUSx0aGlzLGwpfWlzUGVyZm9ybWluZ1VuZG9SZWRvKCl7cmV0dXJuIFZn'@;
put 'KERRLHRoaXMpfHxWZyhJUSx0aGlzKX1nZXRTaGVldElkKCl7cmV0dXJuIFZnKExRLHRoaXMpfWdldEVuZ2luZSgpe3JldHVybiBWZyhSUSx0aGlzKX1nZXRQb3N0cG9uZUFjdGlvbigpe3JldHVybiBWZyhrUSx0aGlzKX1zZXR1cFN5bmNFbmRwb2ludChsLGEpe1Q5KFJRLHRoaXMsbCksVDko'@;
put 'TFEsdGhpcyxhKSxWZyh0SCx0aGlzKS5pbml0KCksVmcobkgsdGhpcykuaW5pdCgpfX07ZnVuY3Rpb24gQTkoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIHgydChjKXt2YXIgbD1mdW5jdGlvbiBFMnQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3lt'@;
put 'Ym9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVy'@;
put 'bigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0p'@;
put 'OmNbbF09YSxjfWZ1bmN0aW9uIE9RKGMsbCxhKXtZNWUoYyxsKSxsLnNldChjLGEpfWZ1bmN0aW9uIFk1ZShjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9'@;
put 'ZnVuY3Rpb24gdTYoYyxsLGEpe3JldHVybiBjLnNldCh6cyhjLGwpLGEpLGF9ZnVuY3Rpb24gazkoYyxsKXtyZXR1cm4gYy5nZXQoenMoYyxsKSl9ZnVuY3Rpb24genMoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3Ro'@;
put 'PDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfWNvbnN0IHcxPSJmb3JtdWxhcyIsVDJ0PVsibWF4Um93cyIsIm1heENvbHVtbnMiLCJsYW5ndWFnZSJdO1NhLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJh'@;
put 'ZnRlck5hbWVkRXhwcmVzc2lvbkFkZGVkIiksU2EuZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImFmdGVyTmFtZWRFeHByZXNzaW9uUmVtb3ZlZCIpLFNhLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJhZnRlclNoZWV0QWRkZWQiKSxTYS5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYWZ0ZXJT'@;
put 'aGVldFJlbW92ZWQiKSxTYS5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYWZ0ZXJTaGVldFJlbmFtZWQiKSxTYS5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYWZ0ZXJGb3JtdWxhc1ZhbHVlc1VwZGF0ZSIpO2NvbnN0IGx3PWM9PiJVbmRvUmVkby51bmRvIj09PWN8fCJVbmRvUmVkby5yZWRv'@;
put 'Ij09PWN8fCJhdXRvIj09PWM7dmFyIEJnPW5ldyBXZWFrTWFwLHJIPW5ldyBXZWFrTWFwLHJBPW5ldyBXZWFrTWFwLEtzPW5ldyBXZWFrU2V0O2NsYXNzIGsydCBleHRlbmRzIEZze2NvbnN0cnVjdG9yKCl7dmFyIGw7c3VwZXIoLi4uYXJndW1lbnRzKSxsPXRoaXMsZnVuY3Rpb24gTTJ0KGMs'@;
put 'bCl7WTVlKGMsbCksbC5hZGQoYyl9KHRoaXMsS3MpLE9RKHRoaXMsQmcsITEpLE9RKHRoaXMsckgsITEpLE9RKHRoaXMsckEsW1sidmFsdWVzVXBkYXRlZCIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3Vt'@;
put 'ZW50c1toXTtyZXR1cm4genMoS3MsbCxXMnQpLmNhbGwobCwuLi5kKX1dLFsibmFtZWRFeHByZXNzaW9uQWRkZWQiLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIHpzKEtzLGws'@;
put 'WTJ0KS5jYWxsKGwsLi4uZCl9XSxbIm5hbWVkRXhwcmVzc2lvblJlbW92ZWQiLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIHpzKEtzLGwsRzJ0KS5jYWxsKGwsLi4uZCl9XSxb'@;
put 'InNoZWV0QWRkZWQiLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIHpzKEtzLGwsJDJ0KS5jYWxsKGwsLi4uZCl9XSxbInNoZWV0UmVuYW1lZCIsZnVuY3Rpb24oKXtmb3IodmFy'@;
put 'IGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4genMoS3MsbCxLMnQpLmNhbGwobCwuLi5kKX1dLFsic2hlZXRSZW1vdmVkIixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5'@;
put 'KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiB6cyhLcyxsLHEydCkuY2FsbChsLC4uLmQpfV1dKSxBOSh0aGlzLCJzdGF0aWNSZWdpc3RlciIscjMoImZvcm11bGFzIikpLEE5KHRoaXMsImVuZ2luZSIsbnVsbCksQTkodGhpcywic2hlZXRJZCIsbnVsbCksQTkodGhp'@;
put 'cywic2hlZXROYW1lIixudWxsKSxBOSh0aGlzLCJpbmRleFN5bmNlciIsbnVsbCksQTkodGhpcywicm93QXhpc1N5bmNlciIsbnVsbCksQTkodGhpcywiY29sdW1uQXhpc1N5bmNlciIsbnVsbCl9c3RhdGljIGdldCBQTFVHSU5fS0VZKCl7cmV0dXJuIHcxfXN0YXRpYyBnZXQgUExVR0lOX1BS'@;
put 'SU9SSVRZKCl7cmV0dXJuIDI2MH1zdGF0aWMgZ2V0IFNFVFRJTkdfS0VZUygpe3JldHVyblt3MSwuLi5UMnRdfWlzRW5hYmxlZCgpe3JldHVybiEhdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVt3MV19ZW5hYmxlUGx1Z2luKCl7dmFyIGwsYT10aGlzO2lmKCF0aGlzLmVuYWJsZWQpe2lmKHRoaXMu'@;
put 'ZW5naW5lPW51bGwhPT0obD1mdW5jdGlvbiBvMnQoYyl7Y29uc3QgbD1jLmdldFNldHRpbmdzKCksYT1sW3cxXSxkPWE/LmVuZ2luZTtpZighMD09PWF8fF9jKGQpKXJldHVybiBudWxsO3ZhciBoO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBkLmh5cGVyZm9ybXVsYXx8ImZ1bmN0aW9uIj09dHlw'@;
put 'ZW9mIGQpcmV0dXJuIGZ1bmN0aW9uIHMydChjLGwsYSl7Y29uc3QgZD1sW3cxXSxoPWZ1bmN0aW9uIHIydChjKXt2YXIgbDtjb25zdCBhPWNbdzFdLGQ9RjVlKG51bGwhPWEmJm51bGwhPT0obD1hLmVuZ2luZSkmJnZvaWQgMCE9PWwmJmwuaHlwZXJmb3JtdWxhP2EuZW5naW5lOnt9KSxoPVA1'@;
put 'ZShjKTtyZXR1cm57Li4uU1EsLi4uZCwuLi5ofX0obCksZj1KRigpLHY9TVEoKTsoZnVuY3Rpb24gbDJ0KGMsbCl7bCYmbC5mb3JFYWNoKGE9Pntjb25zdHtuYW1lOmQscGx1Z2luOmgsdHJhbnNsYXRpb25zOmZ9PWE7dHJ5e2MucmVnaXN0ZXJGdW5jdGlvbihkLGgsZil9Y2F0Y2godil7aWwo'@;
put 'di5tZXNzYWdlKX19KX0pKGMsZC5mdW5jdGlvbnMpLGZ1bmN0aW9uIGMydChjLGwpe2lmKGwpe2NvbnN0e2xhbmdDb2RlOmF9PWw7dHJ5e2MucmVnaXN0ZXJMYW5ndWFnZShhLGwpfWNhdGNoKGQpe2lsKGQubWVzc2FnZSl9fX0oYyxkLmxhbmd1YWdlKTtjb25zdCBNPWMuYnVpbGRFbXB0eSho'@;
put 'KTtyZXR1cm4gZi5zZXQoTSxbYV0pLHYuc2V0KE0sW2EuZ3VpZF0pLGZ1bmN0aW9uIHUydChjLGwpe2wmJihjLnN1c3BlbmRFdmFsdWF0aW9uKCksbC5mb3JFYWNoKGE9Pntjb25zdHtuYW1lOmQsZXhwcmVzc2lvbjpoLHNjb3BlOmYsb3B0aW9uczp2fT1hO3RyeXtjLmFkZE5hbWVkRXhwcmVz'@;
put 'c2lvbihkLGgsZix2KX1jYXRjaChNKXtpbChNLm1lc3NhZ2UpfX0pLGMucmVzdW1lRXZhbHVhdGlvbigpKX0oTSxkLm5hbWVkRXhwcmVzc2lvbnMpLE0ub24oInNoZWV0QWRkZWQiLCgpPT57TS5yZWJ1aWxkQW5kUmVjYWxjdWxhdGUoKX0pLE0ub24oInNoZWV0UmVtb3ZlZCIsKCk9PntNLnJl'@;
put 'YnVpbGRBbmRSZWNhbGN1bGF0ZSgpfSksTX0obnVsbCE9PShoPWQuaHlwZXJmb3JtdWxhKSYmdm9pZCAwIT09aD9oOmQsbCxjKTtpZigib2JqZWN0Ij09dHlwZW9mIGQmJl9jKGQuaHlwZXJmb3JtdWxhKSl7Y29uc3QgZj1KRigpLHY9TVEoKS5nZXQoZCk7cmV0dXJuIGYuaGFzKGQpfHxmLnNl'@;
put 'dChkLFtdKSxmLmdldChkKS5wdXNoKGMpLHYmJnYucHVzaChjLmd1aWQpLGQuZ2V0Q29uZmlnKCkubGljZW5zZUtleXx8ZC51cGRhdGVDb25maWcoe2xpY2Vuc2VLZXk6TzVlfSksKGQuZ2V0Q29uZmlnKCkubGVhcFllYXIxOTAwIT09U1EubGVhcFllYXIxOTAwfHwhMT09PU5PKGQuZ2V0Q29u'@;
put 'ZmlnKCkubnVsbERhdGUsU1EubnVsbERhdGUpKSYmaWwoZ2xgSWYgeW91IHVzZSBIeXBlckZvcm11bGEgd2l0aCBIYW5kc29udGFibGUsIGtlZXAgdGhlIGRlZmF1bHQgXGBsZWFwWWVhcjE5MDBcYCBhbmQgXGBudWxsRGF0ZVxgIAogICAgICBzZXR0aW5ncy4gT3RoZXJ3aXNlLCBIeXBlckZv'@;
put 'cm11bGEncyBkYXRlcyBtYXkgbm90IHN5bmMgY29ycmVjdGx5IHdpdGggSGFuZHNvbnRhYmxlJ3MgZGF0ZXMuYCksZH1yZXR1cm4gbnVsbH0odGhpcy5ob3QpKSYmdm9pZCAwIT09bD9sOnRoaXMuZW5naW5lLCF0aGlzLmVuZ2luZSlyZXR1cm4gdm9pZCBpbCgiTWlzc2luZyB0aGUgcmVxdWly'@;
put 'ZWQgYGVuZ2luZWAga2V5IGluIHRoZSBGb3JtdWxhcyBzZXR0aW5ncy4gUGxlYXNlIGZpbGwgaXQgd2l0aCBlaXRoZXIgYW4gZW5naW5lIGNsYXNzIG9yIGFuIGVuZ2luZSBpbnN0YW5jZS4iKTtpZihudWxsIT09dGhpcy5zaGVldE5hbWUmJiF0aGlzLmVuZ2luZS5kb2VzU2hlZXRFeGlzdCh0'@;
put 'aGlzLnNoZWV0TmFtZSkpe2NvbnN0IGQ9dGhpcy5hZGRTaGVldCh0aGlzLnNoZWV0TmFtZSx0aGlzLmhvdC5nZXRTb3VyY2VEYXRhQXJyYXkoKSk7ITEhPT1kJiZ6cyhLcyx0aGlzLGlBKS5jYWxsKHRoaXMsZCl9dGhpcy5hZGRIb29rKCJiZWZvcmVMb2FkRGF0YSIsZnVuY3Rpb24oKXtmb3Io'@;
put 'dmFyIGQ9YXJndW1lbnRzLmxlbmd0aCxoPW5ldyBBcnJheShkKSxmPTA7ZjxkO2YrKyloW2ZdPWFyZ3VtZW50c1tmXTtyZXR1cm4genMoS3MsYSxHNWUpLmNhbGwoYSwuLi5oKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJMb2FkRGF0YSIsZnVuY3Rpb24oKXtmb3IodmFyIGQ9YXJndW1lbnRzLmxl'@;
put 'bmd0aCxoPW5ldyBBcnJheShkKSxmPTA7ZjxkO2YrKyloW2ZdPWFyZ3VtZW50c1tmXTtyZXR1cm4genMoS3MsYSwkNWUpLmNhbGwoYSwuLi5oKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlVXBkYXRlRGF0YSIsZnVuY3Rpb24oKXtmb3IodmFyIGQ9YXJndW1lbnRzLmxlbmd0aCxoPW5ldyBBcnJh'@;
put 'eShkKSxmPTA7ZjxkO2YrKyloW2ZdPWFyZ3VtZW50c1tmXTtyZXR1cm4genMoS3MsYSxHNWUpLmNhbGwoYSwuLi5oKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJVcGRhdGVEYXRhIixmdW5jdGlvbigpe2Zvcih2YXIgZD1hcmd1bWVudHMubGVuZ3RoLGg9bmV3IEFycmF5KGQpLGY9MDtmPGQ7Zisr'@;
put 'KWhbZl09YXJndW1lbnRzW2ZdO3JldHVybiB6cyhLcyxhLCQ1ZSkuY2FsbChhLC4uLmgpfSksdGhpcy5hZGRIb29rKCJtb2RpZnlEYXRhIixmdW5jdGlvbigpe2Zvcih2YXIgZD1hcmd1bWVudHMubGVuZ3RoLGg9bmV3IEFycmF5KGQpLGY9MDtmPGQ7ZisrKWhbZl09YXJndW1lbnRzW2ZdO3Jl'@;
put 'dHVybiB6cyhLcyxhLEwydCkuY2FsbChhLC4uLmgpfSksdGhpcy5hZGRIb29rKCJtb2RpZnlTb3VyY2VEYXRhIixmdW5jdGlvbigpe2Zvcih2YXIgZD1hcmd1bWVudHMubGVuZ3RoLGg9bmV3IEFycmF5KGQpLGY9MDtmPGQ7ZisrKWhbZl09YXJndW1lbnRzW2ZdO3JldHVybiB6cyhLcyxhLE8y'@;
put 'dCkuY2FsbChhLC4uLmgpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVWYWxpZGF0ZSIsZnVuY3Rpb24oKXtmb3IodmFyIGQ9YXJndW1lbnRzLmxlbmd0aCxoPW5ldyBBcnJheShkKSxmPTA7ZjxkO2YrKyloW2ZdPWFyZ3VtZW50c1tmXTtyZXR1cm4genMoS3MsYSxEMnQpLmNhbGwoYSwuLi5oKX0p'@;
put 'LHRoaXMuYWRkSG9vaygiYWZ0ZXJTZXRTb3VyY2VEYXRhQXRDZWxsIixmdW5jdGlvbigpe2Zvcih2YXIgZD1hcmd1bWVudHMubGVuZ3RoLGg9bmV3IEFycmF5KGQpLGY9MDtmPGQ7ZisrKWhbZl09YXJndW1lbnRzW2ZdO3JldHVybiB6cyhLcyxhLFAydCkuY2FsbChhLC4uLmgpfSksdGhpcy5h'@;
put 'ZGRIb29rKCJhZnRlclNldERhdGFBdENlbGwiLGZ1bmN0aW9uKCl7Zm9yKHZhciBkPWFyZ3VtZW50cy5sZW5ndGgsaD1uZXcgQXJyYXkoZCksZj0wO2Y8ZDtmKyspaFtmXT1hcmd1bWVudHNbZl07cmV0dXJuIHpzKEtzLGEsSzVlKS5jYWxsKGEsLi4uaCl9KSx0aGlzLmFkZEhvb2soImFmdGVy'@;
put 'U2V0RGF0YUF0Um93UHJvcCIsZnVuY3Rpb24oKXtmb3IodmFyIGQ9YXJndW1lbnRzLmxlbmd0aCxoPW5ldyBBcnJheShkKSxmPTA7ZjxkO2YrKyloW2ZdPWFyZ3VtZW50c1tmXTtyZXR1cm4genMoS3MsYSxLNWUpLmNhbGwoYSwuLi5oKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlQ3JlYXRlUm93'@;
put 'IixmdW5jdGlvbigpe2Zvcih2YXIgZD1hcmd1bWVudHMubGVuZ3RoLGg9bmV3IEFycmF5KGQpLGY9MDtmPGQ7ZisrKWhbZl09YXJndW1lbnRzW2ZdO3JldHVybiB6cyhLcyxhLEYydCkuY2FsbChhLC4uLmgpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVDcmVhdGVDb2wiLGZ1bmN0aW9uKCl7Zm9y'@;
put 'KHZhciBkPWFyZ3VtZW50cy5sZW5ndGgsaD1uZXcgQXJyYXkoZCksZj0wO2Y8ZDtmKyspaFtmXT1hcmd1bWVudHNbZl07cmV0dXJuIHpzKEtzLGEsSDJ0KS5jYWxsKGEsLi4uaCl9KSx0aGlzLmFkZEhvb2soImFmdGVyQ3JlYXRlUm93IixmdW5jdGlvbigpe2Zvcih2YXIgZD1hcmd1bWVudHMu'@;
put 'bGVuZ3RoLGg9bmV3IEFycmF5KGQpLGY9MDtmPGQ7ZisrKWhbZl09YXJndW1lbnRzW2ZdO3JldHVybiB6cyhLcyxhLEIydCkuY2FsbChhLC4uLmgpfSksdGhpcy5hZGRIb29rKCJhZnRlckNyZWF0ZUNvbCIsZnVuY3Rpb24oKXtmb3IodmFyIGQ9YXJndW1lbnRzLmxlbmd0aCxoPW5ldyBBcnJh'@;
put 'eShkKSxmPTA7ZjxkO2YrKyloW2ZdPWFyZ3VtZW50c1tmXTtyZXR1cm4genMoS3MsYSxqMnQpLmNhbGwoYSwuLi5oKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlUmVtb3ZlUm93IixmdW5jdGlvbigpe2Zvcih2YXIgZD1hcmd1bWVudHMubGVuZ3RoLGg9bmV3IEFycmF5KGQpLGY9MDtmPGQ7Zisr'@;
put 'KWhbZl09YXJndW1lbnRzW2ZdO3JldHVybiB6cyhLcyxhLE4ydCkuY2FsbChhLC4uLmgpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVSZW1vdmVDb2wiLGZ1bmN0aW9uKCl7Zm9yKHZhciBkPWFyZ3VtZW50cy5sZW5ndGgsaD1uZXcgQXJyYXkoZCksZj0wO2Y8ZDtmKyspaFtmXT1hcmd1bWVudHNb'@;
put 'Zl07cmV0dXJuIHpzKEtzLGEsVjJ0KS5jYWxsKGEsLi4uaCl9KSx0aGlzLmFkZEhvb2soImFmdGVyUmVtb3ZlUm93IixmdW5jdGlvbigpe2Zvcih2YXIgZD1hcmd1bWVudHMubGVuZ3RoLGg9bmV3IEFycmF5KGQpLGY9MDtmPGQ7ZisrKWhbZl09YXJndW1lbnRzW2ZdO3JldHVybiB6cyhLcyxh'@;
put 'LHoydCkuY2FsbChhLC4uLmgpfSksdGhpcy5hZGRIb29rKCJhZnRlclJlbW92ZUNvbCIsZnVuY3Rpb24oKXtmb3IodmFyIGQ9YXJndW1lbnRzLmxlbmd0aCxoPW5ldyBBcnJheShkKSxmPTA7ZjxkO2YrKyloW2ZdPWFyZ3VtZW50c1tmXTtyZXR1cm4genMoS3MsYSxVMnQpLmNhbGwoYSwuLi5o'@;
put 'KX0pLHRoaXMuaW5kZXhTeW5jZXI9bmV3IFMydCh0aGlzLmhvdC5yb3dJbmRleE1hcHBlcix0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlcixkPT57dGhpcy5ob3QuYWRkSG9va09uY2UoImluaXQiLCgpPT57ZCgpfSl9KSx0aGlzLnJvd0F4aXNTeW5jZXI9dGhpcy5pbmRleFN5bmNlci5nZXRG'@;
put 'b3JBeGlzKCJyb3ciKSx0aGlzLmNvbHVtbkF4aXNTeW5jZXI9dGhpcy5pbmRleFN5bmNlci5nZXRGb3JBeGlzKCJjb2x1bW4iKSx0aGlzLmhvdC5hZGRIb29rKCJhZnRlclJvd1NlcXVlbmNlQ2hhbmdlIix0aGlzLnJvd0F4aXNTeW5jZXIuZ2V0SW5kZXhlc0NoYW5nZVN5bmNNZXRob2QoKSks'@;
put 'dGhpcy5ob3QuYWRkSG9vaygiYWZ0ZXJDb2x1bW5TZXF1ZW5jZUNoYW5nZSIsdGhpcy5jb2x1bW5BeGlzU3luY2VyLmdldEluZGV4ZXNDaGFuZ2VTeW5jTWV0aG9kKCkpLHRoaXMuaG90LmFkZEhvb2soImJlZm9yZVJvd01vdmUiLChkLGgsZix2KT0+e3RoaXMucm93QXhpc1N5bmNlci5zdG9y'@;
put 'ZU1vdmVzSW5mb3JtYXRpb24oZCxoLHYpfSksdGhpcy5ob3QuYWRkSG9vaygiYmVmb3JlQ29sdW1uTW92ZSIsKGQsaCxmLHYpPT57dGhpcy5jb2x1bW5BeGlzU3luY2VyLnN0b3JlTW92ZXNJbmZvcm1hdGlvbihkLGgsdil9KSx0aGlzLmhvdC5hZGRIb29rKCJhZnRlclJvd01vdmUiLChkLGgs'@;
put 'Zix2LE0pPT57dGhpcy5yb3dBeGlzU3luY2VyLmNhbGN1bGF0ZUFuZFN5bmNNb3Zlcyh2LE0pfSksdGhpcy5ob3QuYWRkSG9vaygiYWZ0ZXJDb2x1bW5Nb3ZlIiwoZCxoLGYsdixNKT0+e3RoaXMuY29sdW1uQXhpc1N5bmNlci5jYWxjdWxhdGVBbmRTeW5jTW92ZXModixNKX0pLHRoaXMuaG90'@;
put 'LmFkZEhvb2soImJlZm9yZUNvbHVtbkZyZWV6ZSIsKGQsaCk9Pnt0aGlzLmNvbHVtbkF4aXNTeW5jZXIuc3RvcmVNb3Zlc0luZm9ybWF0aW9uKFtkXSx0aGlzLmhvdC5nZXRTZXR0aW5ncygpLmZpeGVkQ29sdW1uc1N0YXJ0LGgpfSksdGhpcy5ob3QuYWRkSG9vaygiYWZ0ZXJDb2x1bW5GcmVl'@;
put 'emUiLChkLGgpPT57dGhpcy5jb2x1bW5BeGlzU3luY2VyLmNhbGN1bGF0ZUFuZFN5bmNNb3ZlcyhoLGgpfSksdGhpcy5ob3QuYWRkSG9vaygiYmVmb3JlQ29sdW1uVW5mcmVlemUiLChkLGgpPT57dGhpcy5jb2x1bW5BeGlzU3luY2VyLnN0b3JlTW92ZXNJbmZvcm1hdGlvbihbZF0sdGhpcy5o'@;
put 'b3QuZ2V0U2V0dGluZ3MoKS5maXhlZENvbHVtbnNTdGFydC0xLGgpfSksdGhpcy5ob3QuYWRkSG9vaygiYWZ0ZXJDb2x1bW5VbmZyZWV6ZSIsKGQsaCk9Pnt0aGlzLmNvbHVtbkF4aXNTeW5jZXIuY2FsY3VsYXRlQW5kU3luY01vdmVzKGgsaCl9KSx0aGlzLmFkZEhvb2soImFmdGVyQ2VsbE1l'@;
put 'dGFSZXNldCIsZnVuY3Rpb24oKXtmb3IodmFyIGQ9YXJndW1lbnRzLmxlbmd0aCxoPW5ldyBBcnJheShkKSxmPTA7ZjxkO2YrKyloW2ZdPWFyZ3VtZW50c1tmXTtyZXR1cm4genMoS3MsYSxSMnQpLmNhbGwoYSwuLi5oKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlVW5kbyIsKCk9Pnt0aGlzLmlu'@;
put 'ZGV4U3luY2VyLnNldFBlcmZvcm1VbmRvKCEwKSx0aGlzLmVuZ2luZS51bmRvKCl9KSx0aGlzLmFkZEhvb2soImJlZm9yZVJlZG8iLCgpPT57dGhpcy5pbmRleFN5bmNlci5zZXRQZXJmb3JtUmVkbyghMCksdGhpcy5lbmdpbmUucmVkbygpfSksdGhpcy5hZGRIb29rKCJhZnRlclVuZG8iLCgp'@;
put 'PT57dGhpcy5pbmRleFN5bmNlci5zZXRQZXJmb3JtVW5kbyghMSl9KSx0aGlzLmFkZEhvb2soImFmdGVyVW5kbyIsKCk9Pnt0aGlzLmluZGV4U3luY2VyLnNldFBlcmZvcm1SZWRvKCExKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJEZXRhY2hDaGlsZCIsZnVuY3Rpb24oKXtmb3IodmFyIGQ9YXJn'@;
put 'dW1lbnRzLmxlbmd0aCxoPW5ldyBBcnJheShkKSxmPTA7ZjxkO2YrKyloW2ZdPWFyZ3VtZW50c1tmXTtyZXR1cm4genMoS3MsYSxaMnQpLmNhbGwoYSwuLi5oKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlQXV0b2ZpbGwiLGZ1bmN0aW9uKCl7Zm9yKHZhciBkPWFyZ3VtZW50cy5sZW5ndGgsaD1u'@;
put 'ZXcgQXJyYXkoZCksZj0wO2Y8ZDtmKyspaFtmXT1hcmd1bWVudHNbZl07cmV0dXJuIHpzKEtzLGEsSTJ0KS5jYWxsKGEsLi4uaCl9KSxrOShyQSx0aGlzKS5mb3JFYWNoKGQ9PntsZXRbaCxmXT1kO3JldHVybiB0aGlzLmVuZ2luZS5vbihoLGYpfSksc3VwZXIuZW5hYmxlUGx1Z2luKCl9fWRp'@;
put 'c2FibGVQbHVnaW4oKXtrOShyQSx0aGlzKS5mb3JFYWNoKGw9PntsZXRbYSxkXT1sO3JldHVybiB0aGlzLmVuZ2luZS5vZmYoYSxkKX0pLE41ZSh0aGlzLmVuZ2luZSx0aGlzLmhvdCksdGhpcy5lbmdpbmU9bnVsbCxzdXBlci5kaXNhYmxlUGx1Z2luKCl9dXBkYXRlUGx1Z2luKGwpe2NvbnN0'@;
put 'IGE9ZnVuY3Rpb24gaTJ0KGMpe3ZhciBsO2NvbnN0IGE9Y1t3MV07cmV0dXJuey4uLkY1ZShudWxsIT1hJiZudWxsIT09KGw9YS5lbmdpbmUpJiZ2b2lkIDAhPT1sJiZsLmh5cGVyZm9ybXVsYT9hLmVuZ2luZTp7fSksLi4uUDVlKGMpfX0odGhpcy5ob3QuZ2V0U2V0dGluZ3MoKSk7KGZ1bmN0'@;
put 'aW9uIGEydChjLGwpe3JldHVybiBPYmplY3Qua2V5cyhsKS5zb21lKGE9PnZvaWQgMCE9PWxbYV0mJmxbYV0hPT1jW2FdKX0pKHRoaXMuZW5naW5lLmdldENvbmZpZygpLGEpJiZ0aGlzLmVuZ2luZS51cGRhdGVDb25maWcoYSk7Y29uc3QgZD10aGlzLmhvdC5nZXRTZXR0aW5ncygpW3cxXTtp'@;
put 'ZihQYShkKSYmUGEoZC5zaGVldE5hbWUpJiZkLnNoZWV0TmFtZSE9PXRoaXMuc2hlZXROYW1lJiZ0aGlzLnN3aXRjaFNoZWV0KGQuc2hlZXROYW1lKSwhbC5kYXRhJiZudWxsPT09dGhpcy5zaGVldE5hbWUpe2NvbnN0IGg9dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVt3MV0uc2hlZXROYW1lO2lm'@;
put 'KGgmJnRoaXMuZW5naW5lLmRvZXNTaGVldEV4aXN0KGgpKXRoaXMuc3dpdGNoU2hlZXQodGhpcy5zaGVldE5hbWUpO2Vsc2V7Y29uc3QgZj10aGlzLmFkZFNoZWV0KGg/P3ZvaWQgMCx0aGlzLmhvdC5nZXRTb3VyY2VEYXRhQXJyYXkoKSk7enMoS3MsdGhpcyxpQSkuY2FsbCh0aGlzLGYpfX1z'@;
put 'dXBlci51cGRhdGVQbHVnaW4obCl9ZGVzdHJveSgpe2s5KHJBLHRoaXMpLmZvckVhY2gobD0+e3ZhciBhO2xldFtkLGhdPWw7cmV0dXJuIG51bGw9PT0oYT10aGlzLmVuZ2luZSl8fHZvaWQgMD09PWE/dm9pZCAwOmEub2ZmKGQsaCl9KSx1NihyQSx0aGlzLG51bGwpLE41ZSh0aGlzLmVuZ2lu'@;
put 'ZSx0aGlzLmhvdCksdGhpcy5lbmdpbmU9bnVsbCxzdXBlci5kZXN0cm95KCl9YWRkU2hlZXQobCxhKXtpZihQYShhKSYmIUUzZShhKSlyZXR1cm4gaWwoIlRoZSBwcm92aWRlZCBkYXRhIHNob3VsZCBiZSBhbiBhcnJheSBvZiBhcnJheXMuIiksITE7aWYobnVsbCE9bCYmdGhpcy5lbmdpbmUu'@;
put 'ZG9lc1NoZWV0RXhpc3QobCkpcmV0dXJuIGlsKCJTaGVldCB3aXRoIHRoZSBwcm92aWRlZCBuYW1lIGFscmVhZHkgZXhpc3RzLiIpLCExO3RyeXtjb25zdCBkPXRoaXMuZW5naW5lLmFkZFNoZWV0KGw/P3ZvaWQgMCk7cmV0dXJuIGEmJnRoaXMuZW5naW5lLnNldFNoZWV0Q29udGVudCh0aGlz'@;
put 'LmVuZ2luZS5nZXRTaGVldElkKGQpLGEpLGR9Y2F0Y2goZCl7cmV0dXJuIGlsKGQubWVzc2FnZSksITF9fXN3aXRjaFNoZWV0KGwpe2lmKCF0aGlzLmVuZ2luZS5kb2VzU2hlZXRFeGlzdChsKSlyZXR1cm4gdm9pZCBOJChgVGhlIHNoZWV0IG5hbWVkIFxgJHtsfVxgIGRvZXMgbm90IGV4aXN0'@;
put 'LCBzd2l0Y2ggYWJvcnRlZC5gKTt6cyhLcyx0aGlzLGlBKS5jYWxsKHRoaXMsbCk7Y29uc3QgYT10aGlzLmVuZ2luZS5nZXRTaGVldFNlcmlhbGl6ZWQodGhpcy5zaGVldElkKTthLmxlbmd0aD4wJiZ0aGlzLmhvdC5sb2FkRGF0YShhLGAke3AxKHcxKX0uc3dpdGNoU2hlZXRgKX1nZXRDZWxs'@;
put 'VHlwZShsLGEpe2xldCBkPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTp0aGlzLnNoZWV0SWQ7Y29uc3QgaD10aGlzLmhvdC50b1BoeXNpY2FsUm93KGwpLGY9dGhpcy5ob3QudG9QaHlzaWNhbENvbHVtbihhKTtyZXR1cm4gbnVsbCE9PWgm'@;
put 'Jm51bGwhPT1mP3RoaXMuZW5naW5lLmdldENlbGxUeXBlKHtzaGVldDpkLHJvdzp0aGlzLnJvd0F4aXNTeW5jZXIuZ2V0SGZJbmRleEZyb21WaXN1YWxJbmRleChsKSxjb2w6dGhpcy5jb2x1bW5BeGlzU3luY2VyLmdldEhmSW5kZXhGcm9tVmlzdWFsSW5kZXgoYSl9KToiRU1QVFkifWlzRm9y'@;
put 'bXVsYUNlbGxUeXBlKGwsYSl7cmV0dXJuIHRoaXMuZW5naW5lLmRvZXNDZWxsSGF2ZUZvcm11bGEoe3NoZWV0OmFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTp0aGlzLnNoZWV0SWQscm93OnRoaXMucm93QXhpc1N5bmNlci5nZXRIZkluZGV4'@;
put 'RnJvbVZpc3VhbEluZGV4KGwpLGNvbDp0aGlzLmNvbHVtbkF4aXNTeW5jZXIuZ2V0SGZJbmRleEZyb21WaXN1YWxJbmRleChhKX0pfXJlbmRlckRlcGVuZGVudFNoZWV0cyhsKXtsZXQgYT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSYmYXJndW1lbnRzWzFdO2Nv'@;
put 'bnN0IGQ9bmV3IFNldDtsLmZvckVhY2goaD0+e3ZhciBmO2NvbnN0IHY9bnVsbD09aHx8bnVsbD09PShmPWguYWRkcmVzcyl8fHZvaWQgMD09PWY/dm9pZCAwOmYuc2hlZXQ7dm9pZCAwIT09diYmKGQuaGFzKHYpfHxkLmFkZCh2KSl9KSxINWUodGhpcy5lbmdpbmUpLmZvckVhY2goKGgsZik9'@;
put 'Pnt2YXIgdjsoYXx8ZiE9PXRoaXMuc2hlZXRJZCkmJmQuaGFzKGYpJiYoaC5yZW5kZXIoKSxudWxsPT09KHY9aC52aWV3KXx8dm9pZCAwPT09dnx8di5hZGp1c3RFbGVtZW50c1NpemUoKSl9KX12YWxpZGF0ZURlcGVuZGVudENlbGxzKGwpe2NvbnN0IGQ9Zj0+e3ZhciB2O2NvbnN0e3JvdzpN'@;
put 'LGNvbDpELHNoZWV0Olp9PW51bGwhPT0odj1mPy5hZGRyZXNzKSYmdm9pZCAwIT09dj92Ont9O3JldHVybiBQYShaKT9gJHtafToke019eCR7RH1gOiIifSxoPW5ldyBTZXQoKGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpbXSkubWFwKGY9'@;
put 'PmQoZikpKTtsLmZvckVhY2goZj0+e3ZhciB2LE07Y29uc3R7cm93OkQsY29sOlp9PW51bGwhPT0odj1mLmFkZHJlc3MpJiZ2b2lkIDAhPT12P3Y6e307aWYoITE9PT1QYShEKXx8ITE9PT1QYShaKXx8RD49dGhpcy5ob3QuY291bnRSb3dzKCl8fFo+PXRoaXMuaG90LmNvdW50Q29scygpKXJl'@;
put 'dHVybjtjb25zdCByZT1udWxsPT1mfHxudWxsPT09KE09Zi5hZGRyZXNzKXx8dm9pZCAwPT09TT92b2lkIDA6TS5zaGVldCxjZT1kKGYpO2lmKHZvaWQgMCE9PXJlJiYhaC5oYXMoY2UpKXtjb25zdCBiZT1INWUodGhpcy5lbmdpbmUpLmdldChyZSk7aWYoIWJlKXJldHVybjtiZS52YWxpZGF0'@;
put 'ZUNlbGwoYmUuZ2V0RGF0YUF0Q2VsbChELFopLGJlLmdldENlbGxNZXRhKEQsWiksKCk9Pnt9KX19KX1zeW5jQ2hhbmdlV2l0aEVuZ2luZShsLGEsZCl7Y29uc3QgaD17cm93OnRoaXMucm93QXhpc1N5bmNlci5nZXRIZkluZGV4RnJvbVZpc3VhbEluZGV4KGwpLGNvbDp0aGlzLmNvbHVtbkF4'@;
put 'aXNTeW5jZXIuZ2V0SGZJbmRleEZyb21WaXN1YWxJbmRleChhKSxzaGVldDp0aGlzLnNoZWV0SWR9O2lmKCF0aGlzLmVuZ2luZS5pc0l0UG9zc2libGVUb1NldENlbGxDb250ZW50cyhoKSlyZXR1cm4gdm9pZCBpbChgTm90IHBvc3NpYmxlIHRvIHNldCBjZWxsIGRhdGEgYXQgJHtKU09OLnN0'@;
put 'cmluZ2lmeShoKX1gKTtjb25zdCBmPXRoaXMuaG90LmdldENlbGxNZXRhKGwsYSk7cmV0dXJuIHhRKGQsZi50eXBlKSYmKEI1ZShkLGYuZGF0ZUZvcm1hdCk/ZD1qNWUoZCxmLmRhdGVGb3JtYXQpOiExPT09ZnVuY3Rpb24gcDJ0KGMpe3JldHVybiJzdHJpbmciPT10eXBlb2YgYyYmYy5zdGFy'@;
put 'dHNXaXRoKCI9Iil9KGQpJiYoZD1gJyR7ZH1gKSksdGhpcy5lbmdpbmUuc2V0Q2VsbENvbnRlbnRzKGgsZCl9fWZ1bmN0aW9uIGlBKGMpe3RoaXMuc2hlZXROYW1lPWMsdGhpcy5zaGVldElkPXRoaXMuZW5naW5lLmdldFNoZWV0SWQodGhpcy5zaGVldE5hbWUpfWZ1bmN0aW9uIEQydChjLGws'@;
put 'YSl7Y29uc3QgZD10aGlzLmhvdC5wcm9wVG9Db2woYSk7aWYodGhpcy5pc0Zvcm11bGFDZWxsVHlwZShsLGQpKXtjb25zdCBoPXtyb3c6dGhpcy5yb3dBeGlzU3luY2VyLmdldEhmSW5kZXhGcm9tVmlzdWFsSW5kZXgobCksY29sOnRoaXMuY29sdW1uQXhpc1N5bmNlci5nZXRIZkluZGV4RnJv'@;
put 'bVZpc3VhbEluZGV4KGQpLHNoZWV0OnRoaXMuc2hlZXRJZH0sZj10aGlzLmhvdC5nZXRDZWxsTWV0YShsLGQpO2xldCB2PXRoaXMuZW5naW5lLmdldENlbGxWYWx1ZShoKTtyZXR1cm4iZGF0ZSI9PT1mLnR5cGUmJm0xKHYpJiYodj16NWUodixmLmRhdGVGb3JtYXQpKSwib2JqZWN0Ij09dHlw'@;
put 'ZW9mIHYmJm51bGwhPT12P3YudmFsdWU6dn1yZXR1cm4gY31mdW5jdGlvbiBJMnQoYyxsLGEpe2NvbnN0e3JvdzpkLGNvbDpofT1sLmdldFRvcFN0YXJ0Q29ybmVyKCkse3JvdzpmLGNvbDp2fT1sLmdldEJvdHRvbUVuZENvcm5lcigpLHtyb3c6TSxjb2w6RH09YS5nZXRUb3BTdGFydENvcm5l'@;
put 'cigpLHtyb3c6Wixjb2w6cmV9PWEuZ2V0Qm90dG9tRW5kQ29ybmVyKCksY2U9e3N0YXJ0Ontyb3c6dGhpcy5yb3dBeGlzU3luY2VyLmdldEhmSW5kZXhGcm9tVmlzdWFsSW5kZXgoZCksY29sOnRoaXMuY29sdW1uQXhpc1N5bmNlci5nZXRIZkluZGV4RnJvbVZpc3VhbEluZGV4KGgpLHNoZWV0'@;
put 'OnRoaXMuc2hlZXRJZH0sZW5kOntyb3c6dGhpcy5yb3dBeGlzU3luY2VyLmdldEhmSW5kZXhGcm9tVmlzdWFsSW5kZXgoZiksY29sOnRoaXMuY29sdW1uQXhpc1N5bmNlci5nZXRIZkluZGV4RnJvbVZpc3VhbEluZGV4KHYpLHNoZWV0OnRoaXMuc2hlZXRJZH19LGJlPXtzdGFydDp7cm93OnRo'@;
put 'aXMucm93QXhpc1N5bmNlci5nZXRIZkluZGV4RnJvbVZpc3VhbEluZGV4KE0pLGNvbDp0aGlzLmNvbHVtbkF4aXNTeW5jZXIuZ2V0SGZJbmRleEZyb21WaXN1YWxJbmRleChEKSxzaGVldDp0aGlzLnNoZWV0SWR9LGVuZDp7cm93OnRoaXMucm93QXhpc1N5bmNlci5nZXRIZkluZGV4RnJvbVZp'@;
put 'c3VhbEluZGV4KFopLGNvbDp0aGlzLmNvbHVtbkF4aXNTeW5jZXIuZ2V0SGZJbmRleEZyb21WaXN1YWxJbmRleChyZSksc2hlZXQ6dGhpcy5zaGVldElkfX07aWYoITE9PT10aGlzLmVuZ2luZS5pc0l0UG9zc2libGVUb1NldENlbGxDb250ZW50cyhiZSkpcmV0dXJuITE7Y29uc3QgRWU9dGhp'@;
put 'cy5lbmdpbmUuZ2V0RmlsbFJhbmdlRGF0YShjZSxiZSkse3JvdzpCZSxjb2w6cWV9PWNlLnN0YXJ0LHtyb3c6cnQsY29sOnB0fT1jZS5lbmQsZHQ9cnQtQmUrMSxKdD1wdC1xZSsxO2ZvcihsZXQgdm49MDt2bjxFZS5sZW5ndGg7dm4rPTEpZm9yKGxldCBDbj0wO0NuPEVlW3ZuXS5sZW5ndGg7'@;
put 'Q24rPTEpe2NvbnN0IHRuPUVlW3ZuXVtDbl0sTW49QmUrdm4lZHQsQ3I9cWUrQ24lSnQsR3I9dGhpcy5ob3QuZ2V0Q2VsbE1ldGEoTW4sQ3IpO3hRKHRuLEdyLnR5cGUpJiYodG4uc3RhcnRzV2l0aCgiJyIpP0VlW3ZuXVtDbl09dG4uc2xpY2UoMSk6ITE9PT10aGlzLmlzRm9ybXVsYUNlbGxU'@;
put 'eXBlKE1uLENyLHRoaXMuc2hlZXRJZCkmJihFZVt2bl1bQ25dPWcydCh0bixHci5kYXRlRm9ybWF0KSkpfXJldHVybiBFZX1mdW5jdGlvbiBHNWUoYyxsKXsoYXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOiIiKS5pbmNsdWRlcyhwMSh3MSkp'@;
put 'fHx1NihySCx0aGlzLF9jKHRoaXMuaG90LmdldFNldHRpbmdzKCkuZGF0YSkpfWZ1bmN0aW9uIFIydCgpe2lmKGs5KHJILHRoaXMpKXJldHVybiB2b2lkIHRoaXMuc3dpdGNoU2hlZXQodGhpcy5zaGVldE5hbWUpO2NvbnN0IGM9dGhpcy5ob3QuZ2V0U291cmNlRGF0YUFycmF5KCk7Yy5mb3JF'@;
put 'YWNoKChhLGQpPT57YS5mb3JFYWNoKChoLGYpPT57Y29uc3Qgdj10aGlzLmhvdC5nZXRDZWxsTWV0YShkLGYse3NraXBNZXRhRXh0ZW5zaW9uOiEwfSksTT12LmRhdGVGb3JtYXQ7eFEoaCx2LnR5cGUpJiYoQjVlKGgsTSk/Y1tkXVtmXT1qNWUoaCxNKTpoLnN0YXJ0c1dpdGgoIj0iKXx8KGNb'@;
put 'ZF1bZl09YCcke2h9YCkpfSl9KSx1NihCZyx0aGlzLCEwKTtjb25zdCBsPXRoaXMuZW5naW5lLnNldFNoZWV0Q29udGVudCh0aGlzLnNoZWV0SWQsYyk7dGhpcy5pbmRleFN5bmNlci5zZXR1cFN5bmNFbmRwb2ludCh0aGlzLmVuZ2luZSx0aGlzLnNoZWV0SWQpLHRoaXMucmVuZGVyRGVwZW5k'@;
put 'ZW50U2hlZXRzKGwpLHU2KEJnLHRoaXMsITEpfWZ1bmN0aW9uICQ1ZShjLGwpe2xldCBhPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXToiIjtpZihhLmluY2x1ZGVzKHAxKHcxKSkpcmV0dXJuO2NvbnN0IGQ9ZnVuY3Rpb24gZDJ0KGMsbCl7'@;
put 'cmV0dXJuKF9jKGwpfHwhYy5kb2VzU2hlZXRFeGlzdChsKSkmJihsPWMuYWRkU2hlZXQobCkpLGx9KHRoaXMuZW5naW5lLHRoaXMuaG90LmdldFNldHRpbmdzKClbdzFdLnNoZWV0TmFtZSk7aWYoenMoS3MsdGhpcyxpQSkuY2FsbCh0aGlzLGQpLCJ1cGRhdGVTZXR0aW5ncyIhPT1hKWlmKGs5'@;
put 'KHJILHRoaXMpKXRoaXMuc3dpdGNoU2hlZXQodGhpcy5zaGVldE5hbWUpO2Vsc2V7Y29uc3QgaD10aGlzLmhvdC5nZXRTb3VyY2VEYXRhQXJyYXkoKTtpZih0aGlzLmVuZ2luZS5pc0l0UG9zc2libGVUb1JlcGxhY2VTaGVldENvbnRlbnQodGhpcy5zaGVldElkLGgpKXt1NihCZyx0aGlzLCEw'@;
put 'KTtjb25zdCBmPXRoaXMuZW5naW5lLnNldFNoZWV0Q29udGVudCh0aGlzLnNoZWV0SWQsaCk7dGhpcy5pbmRleFN5bmNlci5zZXR1cFN5bmNFbmRwb2ludCh0aGlzLmVuZ2luZSx0aGlzLnNoZWV0SWQpLHRoaXMucmVuZGVyRGVwZW5kZW50U2hlZXRzKGYpLHU2KEJnLHRoaXMsITEpfX19ZnVu'@;
put 'Y3Rpb24gTDJ0KGMsbCxhLGQpe2lmKCJnZXQiIT09ZHx8azkoQmcsdGhpcyl8fG51bGw9PT10aGlzLnNoZWV0TmFtZXx8IXRoaXMuZW5naW5lLmRvZXNTaGVldEV4aXN0KHRoaXMuc2hlZXROYW1lKSlyZXR1cm47Y29uc3QgaD10aGlzLmhvdC50b1Zpc3VhbFJvdyhjKTtpZihudWxsPT09aHx8'@;
put 'bnVsbD09PWwpcmV0dXJuO2NvbnN0IGY9dGhpcy5nZXRDZWxsVHlwZShoLGwpO2lmKCJWQUxVRSI9PT1mfHwiRU1QVFkiPT09ZilyZXR1cm4gdm9pZChhLnZhbHVlPWZ1bmN0aW9uIGYydChjKXtyZXR1cm4gZnVuY3Rpb24gaDJ0KGMpe3JldHVybiJzdHJpbmciPT10eXBlb2YgYyYmIiciPT09'@;
put 'Yy5jaGFyQXQoMCkmJiI9Ij09PWMuY2hhckF0KDEpfShjKT9jLnN1YnN0cigxKTpjfShhLnZhbHVlKSk7Y29uc3Qgdj17cm93OnRoaXMucm93QXhpc1N5bmNlci5nZXRIZkluZGV4RnJvbVZpc3VhbEluZGV4KGgpLGNvbDp0aGlzLmNvbHVtbkF4aXNTeW5jZXIuZ2V0SGZJbmRleEZyb21WaXN1'@;
put 'YWxJbmRleChsKSxzaGVldDp0aGlzLnNoZWV0SWR9O2xldCBNPXRoaXMuZW5naW5lLmdldENlbGxWYWx1ZSh2KTtjb25zdCBEPXRoaXMuaG90LmdldENlbGxNZXRhKGgsbCx7c2tpcE1ldGFFeHRlbnNpb246ITB9KTsiZGF0ZSI9PT1ELnR5cGUmJm0xKE0pJiYoTT16NWUoTSxELmRhdGVGb3Jt'@;
put 'YXQpKSxhLnZhbHVlPSJvYmplY3QiPT10eXBlb2YgTSYmbnVsbCE9PU0/TS52YWx1ZTpNfWZ1bmN0aW9uIE8ydChjLGwsYSxkKXtpZigiZ2V0IiE9PWR8fGs5KEJnLHRoaXMpfHxudWxsPT09dGhpcy5zaGVldE5hbWV8fCF0aGlzLmVuZ2luZS5kb2VzU2hlZXRFeGlzdCh0aGlzLnNoZWV0TmFt'@;
put 'ZSkpcmV0dXJuO2NvbnN0IGg9dGhpcy5ob3QudG9WaXN1YWxSb3coYyksZj10aGlzLmhvdC5wcm9wVG9Db2wobCk7aWYobnVsbD09PWh8fG51bGw9PT1mKXJldHVybjtjb25zdCB2PXRoaXMuZ2V0Q2VsbFR5cGUoaCxmKTtpZigiVkFMVUUiPT09dnx8IkVNUFRZIj09PXYpcmV0dXJuO2NvbnN0'@;
put 'IE09dGhpcy5lbmdpbmUuZ2V0U2hlZXREaW1lbnNpb25zKHRoaXMuZW5naW5lLmdldFNoZWV0SWQodGhpcy5zaGVldE5hbWUpKTtpZigwPT09TS53aWR0aCYmMD09PU0uaGVpZ2h0KXJldHVybjtjb25zdCBEPXtyb3c6dGhpcy5yb3dBeGlzU3luY2VyLmdldEhmSW5kZXhGcm9tVmlzdWFsSW5k'@;
put 'ZXgoaCksY29sOnRoaXMuY29sdW1uQXhpc1N5bmNlci5nZXRIZkluZGV4RnJvbVZpc3VhbEluZGV4KGYpLHNoZWV0OnRoaXMuc2hlZXRJZH07YS52YWx1ZT10aGlzLmVuZ2luZS5nZXRDZWxsU2VyaWFsaXplZChEKX1mdW5jdGlvbiBLNWUoYyxsKXtpZihsdyhsKSlyZXR1cm47Y29uc3QgYT1b'@;
put 'XSxkPVtdLGg9dGhpcy5lbmdpbmUuYmF0Y2goKCk9PntjLmZvckVhY2goZj0+e2xldFt2LE0sLERdPWY7Y29uc3QgWj10aGlzLmhvdC5wcm9wVG9Db2woTSkscmU9dGhpcy5ob3QudG9QaHlzaWNhbFJvdyh2KSxjZT10aGlzLmhvdC50b1BoeXNpY2FsQ29sdW1uKFopLGJlPXtyb3c6dGhpcy5y'@;
put 'b3dBeGlzU3luY2VyLmdldEhmSW5kZXhGcm9tVmlzdWFsSW5kZXgodiksY29sOnRoaXMuY29sdW1uQXhpc1N5bmNlci5nZXRIZkluZGV4RnJvbVZpc3VhbEluZGV4KFopLHNoZWV0OnRoaXMuc2hlZXRJZH07bnVsbCE9PXJlJiZudWxsIT09Y2U/dGhpcy5zeW5jQ2hhbmdlV2l0aEVuZ2luZSh2'@;
put 'LFosRCk6YS5wdXNoKFt2LFosRF0pLGQucHVzaCh7YWRkcmVzczpiZX0pfSl9KTthLmxlbmd0aCYmdGhpcy5ob3QuYWRkSG9va09uY2UoImFmdGVyQ2hhbmdlIiwoKT0+e2NvbnN0IGY9dGhpcy5lbmdpbmUuYmF0Y2goKCk9PnthLmZvckVhY2godj0+e2xldFtNLEQsWl09djt0aGlzLnN5bmND'@;
put 'aGFuZ2VXaXRoRW5naW5lKE0sRCxaKX0pfSk7dGhpcy5yZW5kZXJEZXBlbmRlbnRTaGVldHMoZiwhMCl9KSx0aGlzLnJlbmRlckRlcGVuZGVudFNoZWV0cyhoKSx0aGlzLnZhbGlkYXRlRGVwZW5kZW50Q2VsbHMoaCxkKX1mdW5jdGlvbiBQMnQoYyxsKXtpZihsdyhsKSlyZXR1cm47Y29uc3Qg'@;
put 'YT1bXSxkPVtdO2MuZm9yRWFjaChoPT57bGV0W2YsdiwsTV09aDtjb25zdCBEPXRoaXMuaG90LnByb3BUb0NvbCh2KTtpZighbTEoRCkpcmV0dXJuO2NvbnN0IFo9e3Jvdzp0aGlzLnJvd0F4aXNTeW5jZXIuZ2V0SGZJbmRleEZyb21WaXN1YWxJbmRleChmKSxjb2w6dGhpcy5jb2x1bW5BeGlz'@;
put 'U3luY2VyLmdldEhmSW5kZXhGcm9tVmlzdWFsSW5kZXgoRCksc2hlZXQ6dGhpcy5zaGVldElkfTt0aGlzLmVuZ2luZS5pc0l0UG9zc2libGVUb1NldENlbGxDb250ZW50cyhaKT8oZC5wdXNoKHthZGRyZXNzOlp9KSxhLnB1c2goLi4udGhpcy5lbmdpbmUuc2V0Q2VsbENvbnRlbnRzKFosTSkp'@;
put 'KTppbChgTm90IHBvc3NpYmxlIHRvIHNldCBzb3VyY2UgY2VsbCBkYXRhIGF0ICR7SlNPTi5zdHJpbmdpZnkoWil9YCl9KSx0aGlzLnJlbmRlckRlcGVuZGVudFNoZWV0cyhhKSx0aGlzLnZhbGlkYXRlRGVwZW5kZW50Q2VsbHMoYSxkKX1mdW5jdGlvbiBGMnQoYyxsKXtsZXQgYT10aGlzLnJv'@;
put 'd0F4aXNTeW5jZXIuZ2V0SGZJbmRleEZyb21WaXN1YWxJbmRleChjKTtpZihjPj10aGlzLmhvdC5jb3VudFJvd3MoKSYmKGE9YyksbnVsbD09PXRoaXMuc2hlZXRJZHx8IXRoaXMuZW5naW5lLmRvZXNTaGVldEV4aXN0KHRoaXMuc2hlZXROYW1lKXx8IXRoaXMuZW5naW5lLmlzSXRQb3NzaWJs'@;
put 'ZVRvQWRkUm93cyh0aGlzLnNoZWV0SWQsW2EsbF0pKXJldHVybiExfWZ1bmN0aW9uIEgydChjLGwpe2xldCBhPXRoaXMuY29sdW1uQXhpc1N5bmNlci5nZXRIZkluZGV4RnJvbVZpc3VhbEluZGV4KGMpO2lmKGM+PXRoaXMuaG90LmNvdW50Q29scygpJiYoYT1jKSxudWxsPT09dGhpcy5zaGVl'@;
put 'dElkfHwhdGhpcy5lbmdpbmUuZG9lc1NoZWV0RXhpc3QodGhpcy5zaGVldE5hbWUpfHwhdGhpcy5lbmdpbmUuaXNJdFBvc3NpYmxlVG9BZGRDb2x1bW5zKHRoaXMuc2hlZXRJZCxbYSxsXSkpcmV0dXJuITF9ZnVuY3Rpb24gTjJ0KGMsbCxhKXtyZXR1cm4hMSE9PXRoaXMucm93QXhpc1N5bmNl'@;
put 'ci5zZXRSZW1vdmVkSGZJbmRleGVzKGEpLmV2ZXJ5KGY9PnRoaXMuZW5naW5lLmlzSXRQb3NzaWJsZVRvUmVtb3ZlUm93cyh0aGlzLnNoZWV0SWQsW2YsMV0pKSYmdm9pZCAwfWZ1bmN0aW9uIFYydChjLGwsYSl7cmV0dXJuITEhPT10aGlzLmNvbHVtbkF4aXNTeW5jZXIuc2V0UmVtb3ZlZEhm'@;
put 'SW5kZXhlcyhhKS5ldmVyeShmPT50aGlzLmVuZ2luZS5pc0l0UG9zc2libGVUb1JlbW92ZUNvbHVtbnModGhpcy5zaGVldElkLFtmLDFdKSkmJnZvaWQgMH1mdW5jdGlvbiBCMnQoYyxsLGEpe2lmKGx3KGEpKXJldHVybjtjb25zdCBkPXRoaXMuZW5naW5lLmFkZFJvd3ModGhpcy5zaGVldElk'@;
put 'LFt0aGlzLnJvd0F4aXNTeW5jZXIuZ2V0SGZJbmRleEZyb21WaXN1YWxJbmRleChjKSxsXSk7dGhpcy5yZW5kZXJEZXBlbmRlbnRTaGVldHMoZCl9ZnVuY3Rpb24gajJ0KGMsbCxhKXtpZihsdyhhKSlyZXR1cm47Y29uc3QgZD10aGlzLmVuZ2luZS5hZGRDb2x1bW5zKHRoaXMuc2hlZXRJZCxb'@;
put 'dGhpcy5jb2x1bW5BeGlzU3luY2VyLmdldEhmSW5kZXhGcm9tVmlzdWFsSW5kZXgoYyksbF0pO3RoaXMucmVuZGVyRGVwZW5kZW50U2hlZXRzKGQpfWZ1bmN0aW9uIHoydChjLGwsYSxkKXtpZihsdyhkKSlyZXR1cm47Y29uc3QgaD10aGlzLnJvd0F4aXNTeW5jZXIuZ2V0UmVtb3ZlZEhmSW5k'@;
put 'ZXhlcygpLnNvcnQoKHYsTSk9Pk0tdiksZj10aGlzLmVuZ2luZS5iYXRjaCgoKT0+e2guZm9yRWFjaCh2PT57dGhpcy5lbmdpbmUucmVtb3ZlUm93cyh0aGlzLnNoZWV0SWQsW3YsMV0pfSl9KTt0aGlzLnJlbmRlckRlcGVuZGVudFNoZWV0cyhmKX1mdW5jdGlvbiBVMnQoYyxsLGEsZCl7aWYo'@;
put 'bHcoZCkpcmV0dXJuO2NvbnN0IGg9dGhpcy5jb2x1bW5BeGlzU3luY2VyLmdldFJlbW92ZWRIZkluZGV4ZXMoKS5zb3J0KCh2LE0pPT5NLXYpLGY9dGhpcy5lbmdpbmUuYmF0Y2goKCk9PntoLmZvckVhY2godj0+e3RoaXMuZW5naW5lLnJlbW92ZUNvbHVtbnModGhpcy5zaGVldElkLFt2LDFd'@;
put 'KX0pfSk7dGhpcy5yZW5kZXJEZXBlbmRlbnRTaGVldHMoZil9ZnVuY3Rpb24gWjJ0KGMsbCxhKXt2YXIgZDt1NihCZyx0aGlzLCEwKTtjb25zdCBoPXRoaXMuaG90LmdldFNvdXJjZURhdGFBcnJheShhLDAsYSsoKG51bGw9PT0oZD1sLl9fY2hpbGRyZW4pfHx2b2lkIDA9PT1kP3ZvaWQgMDpk'@;
put 'Lmxlbmd0aCl8fDApLHRoaXMuaG90LmNvdW50U291cmNlQ29scygpKTt1NihCZyx0aGlzLCExKSxoLmZvckVhY2goKGYsdik9PntmLmZvckVhY2goKE0sRCk9Pnt0aGlzLmVuZ2luZS5zZXRDZWxsQ29udGVudHMoe2NvbDpELHJvdzphK3Ysc2hlZXQ6dGhpcy5zaGVldElkfSxbW01dXSl9KX0p'@;
put 'fWZ1bmN0aW9uIFcydChjKXt0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJGb3JtdWxhc1ZhbHVlc1VwZGF0ZSIsYyl9ZnVuY3Rpb24gWTJ0KGMsbCl7dGhpcy5ob3QucnVuSG9va3MoImFmdGVyTmFtZWRFeHByZXNzaW9uQWRkZWQiLGMsbCl9ZnVuY3Rpb24gRzJ0KGMsbCl7dGhpcy5ob3QucnVu'@;
put 'SG9va3MoImFmdGVyTmFtZWRFeHByZXNzaW9uUmVtb3ZlZCIsYyxsKX1mdW5jdGlvbiAkMnQoYyl7dGhpcy5ob3QucnVuSG9va3MoImFmdGVyU2hlZXRBZGRlZCIsYyl9ZnVuY3Rpb24gSzJ0KGMsbCl7enMoS3MsdGhpcyxpQSkuY2FsbCh0aGlzLGwpLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRl'@;
put 'clNoZWV0UmVuYW1lZCIsYyxsKX1mdW5jdGlvbiBxMnQoYyxsKXt0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJTaGVldFJlbW92ZWQiLGMsbCl9ZnVuY3Rpb24gcTVlKGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0'@;
put 'ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX1mdW5jdGlvbiBEOShjLGwpe3JldHVybiBjLmdldChkNihjLGwpKX1mdW5jdGlvbiBYNWUoYyxsLGEpe3JldHVybiBjLnNldChkNihjLGwpLGEpLGF9ZnVuY3Rpb24gZDYoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1s'@;
put 'OmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfVNhLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJiZWZvcmVIaWRlQ29sdW1ucyIpLFNhLmdldFNp'@;
put 'bmdsZXRvbigpLnJlZ2lzdGVyKCJhZnRlckhpZGVDb2x1bW5zIiksU2EuZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImJlZm9yZVVuaGlkZUNvbHVtbnMiKSxTYS5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYWZ0ZXJVbmhpZGVDb2x1bW5zIik7Y29uc3QgSjVlPSJoaWRkZW5Db2x1bW5zIjt2'@;
put 'YXIgWnA9bmV3IFdlYWtNYXAsSTk9bmV3IFdlYWtTZXQ7Y2xhc3MgbmZ0IGV4dGVuZHMgRnN7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLGZ1bmN0aW9uIFEydChjLGwpe3E1ZShjLGwpLGwuYWRkKGMpfSh0aGlzLEk5KSxmdW5jdGlvbiBlZnQoYyxsLGEpe3E1ZShjLGwpLGwu'@;
put 'c2V0KGMsYSl9KHRoaXMsWnAsbnVsbCl9c3RhdGljIGdldCBQTFVHSU5fS0VZKCl7cmV0dXJuIEo1ZX1zdGF0aWMgZ2V0IFBMVUdJTl9QUklPUklUWSgpe3JldHVybiAzMTB9c3RhdGljIGdldCBERUZBVUxUX1NFVFRJTkdTKCl7cmV0dXJue2NvcHlQYXN0ZUVuYWJsZWQ6ITAsaW5kaWNhdG9y'@;
put 'czohMSxjb2x1bW5zOltdfX1pc0VuYWJsZWQoKXtyZXR1cm4hIXRoaXMuaG90LmdldFNldHRpbmdzKClbSjVlXX1lbmFibGVQbHVnaW4oKXt2YXIgbD10aGlzO3RoaXMuZW5hYmxlZHx8KFg1ZShacCx0aGlzLG5ldyBmUCksRDkoWnAsdGhpcykuYWRkTG9jYWxIb29rKCJpbml0IiwoKT0+ZDYo'@;
put 'STksdGhpcyxsZnQpLmNhbGwodGhpcykpLHRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLnJlZ2lzdGVyTWFwKHRoaXMucGx1Z2luTmFtZSxEOShacCx0aGlzKSksdGhpcy5hZGRIb29rKCJhZnRlckNvbnRleHRNZW51RGVmYXVsdE9wdGlvbnMiLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3Vt'@;
put 'ZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIGQ2KEk5LGwsc2Z0KS5jYWxsKGwsLi4uZCl9KSx0aGlzLmFkZEhvb2soImFmdGVyR2V0Q2VsbE1ldGEiLChhLGQsaCk9PmQ2KEk5LHRoaXMsaWZ0KS5jYWxsKHRoaXMsYSxkLGgp'@;
put 'KSx0aGlzLmFkZEhvb2soIm1vZGlmeUNvbFdpZHRoIiwoYSxkKT0+ZDYoSTksdGhpcyxyZnQpLmNhbGwodGhpcyxhLGQpLDIpLHRoaXMuYWRkSG9vaygiYWZ0ZXJHZXRDb2xIZWFkZXIiLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8'@;
put 'YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIGQ2KEk5LGwsb2Z0KS5jYWxsKGwsLi4uZCl9KSx0aGlzLmFkZEhvb2soIm1vZGlmeUNvcHlhYmxlUmFuZ2UiLGE9PmQ2KEk5LHRoaXMsYWZ0KS5jYWxsKHRoaXMsYSkpLHN1cGVyLmVuYWJsZVBsdWdpbigpKX11cGRhdGVQbHVnaW4oKXt0'@;
put 'aGlzLmRpc2FibGVQbHVnaW4oKSx0aGlzLmVuYWJsZVBsdWdpbigpLHN1cGVyLnVwZGF0ZVBsdWdpbigpfWRpc2FibGVQbHVnaW4oKXtzdXBlci5kaXNhYmxlUGx1Z2luKCksdGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIudW5yZWdpc3Rlck1hcCh0aGlzLnBsdWdpbk5hbWUpLHRoaXMucmVz'@;
put 'ZXRDZWxsc01ldGEoKX1zaG93Q29sdW1ucyhsKXtjb25zdCBhPXRoaXMuZ2V0SGlkZGVuQ29sdW1ucygpLGQ9dGhpcy5pc1ZhbGlkQ29uZmlnKGwpO2xldCBoPWE7Y29uc3QgZj1EOShacCx0aGlzKS5nZXRWYWx1ZXMoKS5zbGljZSgpLHY9bC5sZW5ndGg+MDtkJiZ2JiYoWW4obC5tYXAoWj0+'@;
put 'dGhpcy5ob3QudG9QaHlzaWNhbENvbHVtbihaKSksWj0+e2ZbWl09ITF9KSxoPXF1KGYsKFoscmUsY2UpPT4ocmUmJloucHVzaCh0aGlzLmhvdC50b1Zpc3VhbENvbHVtbihjZSkpLFopLFtdKSksITEhPT10aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlVW5oaWRlQ29sdW1ucyIsYSxoLGQmJnYp'@;
put 'JiYoZCYmdiYmRDkoWnAsdGhpcykuc2V0VmFsdWVzKGYpLHRoaXMuaG90LnZpZXcuYWRqdXN0RWxlbWVudHNTaXplKCksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyVW5oaWRlQ29sdW1ucyIsYSxoLGQmJnYsZCYmaC5sZW5ndGg8YS5sZW5ndGgpKX1zaG93Q29sdW1uKCl7Zm9yKHZhciBsPWFy'@;
put 'Z3VtZW50cy5sZW5ndGgsYT1uZXcgQXJyYXkobCksZD0wO2Q8bDtkKyspYVtkXT1hcmd1bWVudHNbZF07dGhpcy5zaG93Q29sdW1ucyhhKX1oaWRlQ29sdW1ucyhsKXtjb25zdCBhPXRoaXMuZ2V0SGlkZGVuQ29sdW1ucygpLGQ9dGhpcy5pc1ZhbGlkQ29uZmlnKGwpO2xldCBoPWE7ZCYmKGg9'@;
put 'QXJyYXkuZnJvbShuZXcgU2V0KGEuY29uY2F0KGwpKSkpLCExIT09dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZUhpZGVDb2x1bW5zIixhLGgsZCkmJihkJiZ0aGlzLmhvdC5iYXRjaEV4ZWN1dGlvbigoKT0+e1luKGwsdj0+e0Q5KFpwLHRoaXMpLnNldFZhbHVlQXRJbmRleCh0aGlzLmhvdC50'@;
put 'b1BoeXNpY2FsQ29sdW1uKHYpLCEwKX0pfSwhMCksdGhpcy5ob3QucnVuSG9va3MoImFmdGVySGlkZUNvbHVtbnMiLGEsaCxkLGQmJmgubGVuZ3RoPmEubGVuZ3RoKSl9aGlkZUNvbHVtbigpe2Zvcih2YXIgbD1hcmd1bWVudHMubGVuZ3RoLGE9bmV3IEFycmF5KGwpLGQ9MDtkPGw7ZCsrKWFb'@;
put 'ZF09YXJndW1lbnRzW2RdO3RoaXMuaGlkZUNvbHVtbnMoYSl9Z2V0SGlkZGVuQ29sdW1ucygpe3JldHVybiB5cyhEOShacCx0aGlzKS5nZXRIaWRkZW5JbmRleGVzKCksbD0+dGhpcy5ob3QudG9WaXN1YWxDb2x1bW4obCkpfWlzSGlkZGVuKGwpe3JldHVybiBEOShacCx0aGlzKS5nZXRWYWx1'@;
put 'ZUF0SW5kZXgodGhpcy5ob3QudG9QaHlzaWNhbENvbHVtbihsKSl8fCExfWlzVmFsaWRDb25maWcobCl7Y29uc3QgYT10aGlzLmhvdC5jb3VudENvbHMoKTtyZXR1cm4hIShBcnJheS5pc0FycmF5KGwpJiZsLmxlbmd0aD4wKSYmbC5ldmVyeShkPT5OdW1iZXIuaXNJbnRlZ2VyKGQpJiZkPj0w'@;
put 'JiZkPGEpfXJlc2V0Q2VsbHNNZXRhKCl7WW4odGhpcy5ob3QuZ2V0Q2VsbHNNZXRhKCksbD0+e2wuc2tpcENvbHVtbk9uUGFzdGU9ITF9KX1kZXN0cm95KCl7WDVlKFpwLHRoaXMsbnVsbCksc3VwZXIuZGVzdHJveSgpfX1mdW5jdGlvbiByZnQoYyxsKXtyZXR1cm4gdGhpcy5pc0hpZGRlbihs'@;
put 'KT8wOnRoaXMuZ2V0U2V0dGluZygiaW5kaWNhdG9ycyIpJiYodGhpcy5pc0hpZGRlbihsKzEpfHx0aGlzLmlzSGlkZGVuKGwtMSkpJiYibnVtYmVyIj09dHlwZW9mIGMmJnRoaXMuaG90Lmhhc0NvbEhlYWRlcnMoKT9jKzE1OnZvaWQgMH1mdW5jdGlvbiBpZnQoYyxsLGEpe2lmKCExPT09dGhp'@;
put 'cy5nZXRTZXR0aW5nKCJjb3B5UGFzdGVFbmFibGVkIikmJnRoaXMuaXNIaWRkZW4obCkmJihhLnNraXBDb2x1bW5PblBhc3RlPSEwKSx0aGlzLmlzSGlkZGVuKGwtMSkpYS5jbGFzc05hbWU9YS5jbGFzc05hbWV8fCIiLC0xPT09YS5jbGFzc05hbWUuaW5kZXhPZigiYWZ0ZXJIaWRkZW5Db2x1'@;
put 'bW4iKSYmKGEuY2xhc3NOYW1lKz0iIGFmdGVySGlkZGVuQ29sdW1uIik7ZWxzZSBpZihhLmNsYXNzTmFtZSl7Y29uc3QgZD1hLmNsYXNzTmFtZS5zcGxpdCgiICIpO2lmKGQubGVuZ3RoPjApe2NvbnN0IGg9ZC5pbmRleE9mKCJhZnRlckhpZGRlbkNvbHVtbiIpO2g+LTEmJmQuc3BsaWNlKGgs'@;
put 'MSksYS5jbGFzc05hbWU9ZC5qb2luKCIgIil9fX1mdW5jdGlvbiBhZnQoYyl7aWYodGhpcy5nZXRTZXR0aW5nKCJjb3B5UGFzdGVFbmFibGVkIikpcmV0dXJuIGM7Y29uc3QgbD1bXSxhPShkLGgsZix2KT0+e2wucHVzaCh7c3RhcnRSb3c6ZCxlbmRSb3c6aCxzdGFydENvbDpmLGVuZENvbDp2'@;
put 'fSl9O3JldHVybiBZbihjLGQ9PntsZXQgaD0hMCxmPTA7R2EoZC5zdGFydENvbCxkLmVuZENvbCx2PT57dGhpcy5pc0hpZGRlbih2KT8oaHx8YShkLnN0YXJ0Um93LGQuZW5kUm93LGYsdi0xKSxoPSEwKTooaCYmKGY9diksdj09PWQuZW5kQ29sJiZhKGQuc3RhcnRSb3csZC5lbmRSb3csZix2'@;
put 'KSxoPSExKX0pfSksbH1mdW5jdGlvbiBvZnQoYyxsKXtpZighdGhpcy5nZXRTZXR0aW5nKCJpbmRpY2F0b3JzIil8fGM8MClyZXR1cm47Y29uc3QgYT1bXTtjPj0xJiZ0aGlzLmlzSGlkZGVuKGMtMSkmJmEucHVzaCgiYWZ0ZXJIaWRkZW5Db2x1bW4iKSxjPHRoaXMuaG90LmNvdW50Q29scygp'@;
put 'LTEmJnRoaXMuaXNIaWRkZW4oYysxKSYmYS5wdXNoKCJiZWZvcmVIaWRkZW5Db2x1bW4iKSxUaShsLGEpfWZ1bmN0aW9uIHNmdChjKXtjLml0ZW1zLnB1c2goe25hbWU6c3N9LGZ1bmN0aW9uIFgydChjKXtyZXR1cm57a2V5OiJoaWRkZW5fY29sdW1uc19oaWRlIixuYW1lKCl7Y29uc3QgbD10'@;
put 'aGlzLmdldFNlbGVjdGVkTGFzdCgpO2xldCBhPTA7aWYoQXJyYXkuaXNBcnJheShsKSl7Y29uc3RbLGQsLGhdPWw7ZC1oIT0wJiYoYT0xKX1yZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKFJxLGEpfSxjYWxsYmFjaygpe2NvbnN0e2Zyb206bCx0bzphfT10aGlzLmdldFNlbGVjdGVk'@;
put 'UmFuZ2VMYXN0KCksZD1NYXRoLm1heChNYXRoLm1pbihsLmNvbCxhLmNvbCksMCksaD1NYXRoLm1heChsLmNvbCxhLmNvbCksZj1bXTtmb3IobGV0IEQ9ZDtEPD1oO0QrPTEpZi5wdXNoKEQpO2MuaGlkZUNvbHVtbnMoZik7Y29uc3QgTT10aGlzLmNvbHVtbkluZGV4TWFwcGVyLmdldE5lYXJl'@;
put 'c3ROb3RIaWRkZW5JbmRleChmW2YubGVuZ3RoLTFdLDEsITApO051bWJlci5pc0ludGVnZXIoTSkmJk0+PTA/dGhpcy5zZWxlY3RDb2x1bW5zKE0pOnRoaXMuZGVzZWxlY3RDZWxsKCksdGhpcy5yZW5kZXIoKSx0aGlzLnZpZXcuYWRqdXN0RWxlbWVudHNTaXplKCl9LGRpc2FibGVkOiExLGhp'@;
put 'ZGRlbigpe3JldHVybiEodGhpcy5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Q29sdW1uSGVhZGVyKCl8fHRoaXMuc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvcm5lcigpKX19fSh0aGlzKSxmdW5jdGlvbiBKMnQoYyl7Y29uc3QgbD1bXTtyZXR1cm57a2V5OiJoaWRkZW5fY29sdW1uc19zaG93Iixu'@;
put 'YW1lKCl7cmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShMcSxsLmxlbmd0aD4xPzE6MCl9LGNhbGxiYWNrKCl7dmFyIGEsZDtpZigwPT09bC5sZW5ndGgpcmV0dXJuO2xldCBoPWxbMF0sZj1sW2wubGVuZ3RoLTFdO2g9bnVsbCE9PShhPXRoaXMuY29sdW1uSW5kZXhNYXBwZXIuZ2V0'@;
put 'TmVhcmVzdE5vdEhpZGRlbkluZGV4KGgtMSwtMSkpJiZ2b2lkIDAhPT1hP2E6MCxmPW51bGwhPT0oZD10aGlzLmNvbHVtbkluZGV4TWFwcGVyLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChmKzEsMSkpJiZ2b2lkIDAhPT1kP2Q6dGhpcy5jb3VudENvbHMoKS0xLGMuc2hvd0NvbHVtbnMobCks'@;
put 'dGhpcy5yZW5kZXIoKSx0aGlzLnZpZXcuYWRqdXN0RWxlbWVudHNTaXplKCksZi1oKzE9PT10aGlzLmNvdW50Q29scygpfHx0aGlzLnNlbGVjdENvbHVtbnMoaCxmKX0sZGlzYWJsZWQ6ITEsaGlkZGVuKCl7Y29uc3QgYT15cyhjLmdldEhpZGRlbkNvbHVtbnMoKSxjZT0+dGhpcy50b1BoeXNp'@;
put 'Y2FsQ29sdW1uKGNlKSk7aWYoIXRoaXMuc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvbHVtbkhlYWRlcigpJiYhdGhpcy5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Q29ybmVyKCl8fGEubGVuZ3RoPDEpcmV0dXJuITA7bC5sZW5ndGg9MDtjb25zdCBkPXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3Qo'@;
put 'KSxoPWQuZ2V0VG9wU3RhcnRDb3JuZXIoKS5jb2wsZj1kLmdldEJvdHRvbUVuZENvcm5lcigpLmNvbCx2PXRoaXMuY29sdW1uSW5kZXhNYXBwZXIsTT12LmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoaCksRD12LmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoZiksWj12LmdldE5v'@;
put 'dFRyaW1tZWRJbmRleGVzKCkscmU9W107aWYoaCE9PWYpe2lmKGYtaCsxPkQtTSsxKXtjb25zdCBFZT1aLnNsaWNlKGgsZisxKTtyZS5wdXNoKC4uLkVlLmZpbHRlcihCZT0+YS5pbmNsdWRlcyhCZSkpKX19ZWxzZSBpZigwPT09TSYmTTxoKXJlLnB1c2goLi4uWi5zbGljZSgwLGgpKTtlbHNl'@;
put 'IGlmKG51bGw9PT1NKXJlLnB1c2goLi4uWi5zbGljZSgwLHRoaXMuY291bnRDb2xzKCkpKTtlbHNle2NvbnN0IGNlPXRoaXMuY291bnRDb2xzKCktMTtEPT09di5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KHYuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGNlLC0xKSkmJmNlPmYmJnJl'@;
put 'LnB1c2goLi4uWi5zbGljZShmKzEpKX1yZXR1cm4gWW4ocmUsY2U9PntsLnB1c2godGhpcy50b1Zpc3VhbENvbHVtbihjZSkpfSksMD09PWwubGVuZ3RofX19KHRoaXMpKX1mdW5jdGlvbiBsZnQoKXtjb25zdCBjPXRoaXMuZ2V0U2V0dGluZygiY29sdW1ucyIpO0FycmF5LmlzQXJyYXkoYykm'@;
put 'JnRoaXMuaGlkZUNvbHVtbnMoYyl9ZnVuY3Rpb24gUTVlKGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX1mdW5jdGlvbiBSOShjLGwpe3JldHVybiBjLmdl'@;
put 'dChoNihjLGwpKX1mdW5jdGlvbiBlbWUoYyxsLGEpe3JldHVybiBjLnNldChoNihjLGwpLGEpLGF9ZnVuY3Rpb24gaDYoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3Io'@;
put 'IlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfVNhLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJiZWZvcmVIaWRlUm93cyIpLFNhLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJhZnRlckhpZGVSb3dzIiksU2EuZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIo'@;
put 'ImJlZm9yZVVuaGlkZVJvd3MiKSxTYS5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYWZ0ZXJVbmhpZGVSb3dzIik7Y29uc3QgdG1lPSJoaWRkZW5Sb3dzIjt2YXIgV3A9bmV3IFdlYWtNYXAsTDk9bmV3IFdlYWtTZXQ7Y2xhc3MgcGZ0IGV4dGVuZHMgRnN7Y29uc3RydWN0b3IoKXtzdXBlcigu'@;
put 'Li5hcmd1bWVudHMpLGZ1bmN0aW9uIGRmdChjLGwpe1E1ZShjLGwpLGwuYWRkKGMpfSh0aGlzLEw5KSxmdW5jdGlvbiBoZnQoYyxsLGEpe1E1ZShjLGwpLGwuc2V0KGMsYSl9KHRoaXMsV3AsbnVsbCl9c3RhdGljIGdldCBQTFVHSU5fS0VZKCl7cmV0dXJuIHRtZX1zdGF0aWMgZ2V0IFBMVUdJ'@;
put 'Tl9QUklPUklUWSgpe3JldHVybiAzMjB9c3RhdGljIGdldCBERUZBVUxUX1NFVFRJTkdTKCl7cmV0dXJue2NvcHlQYXN0ZUVuYWJsZWQ6ITAsaW5kaWNhdG9yczohMSxyb3dzOltdfX1pc0VuYWJsZWQoKXtyZXR1cm4hIXRoaXMuaG90LmdldFNldHRpbmdzKClbdG1lXX1lbmFibGVQbHVnaW4o'@;
put 'KXt2YXIgbD10aGlzO3RoaXMuZW5hYmxlZHx8KGVtZShXcCx0aGlzLG5ldyBmUCksUjkoV3AsdGhpcykuYWRkTG9jYWxIb29rKCJpbml0IiwoKT0+aDYoTDksdGhpcyxfZnQpLmNhbGwodGhpcykpLHRoaXMuaG90LnJvd0luZGV4TWFwcGVyLnJlZ2lzdGVyTWFwKHRoaXMucGx1Z2luTmFtZSxS'@;
put 'OShXcCx0aGlzKSksdGhpcy5hZGRIb29rKCJhZnRlckNvbnRleHRNZW51RGVmYXVsdE9wdGlvbnMiLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIGg2KEw5LGwseWZ0KS5jYWxs'@;
put 'KGwsLi4uZCl9KSx0aGlzLmFkZEhvb2soImFmdGVyR2V0Q2VsbE1ldGEiLChhLGQsaCk9Pmg2KEw5LHRoaXMsbWZ0KS5jYWxsKHRoaXMsYSxkLGgpKSx0aGlzLmFkZEhvb2soIm1vZGlmeVJvd0hlaWdodCIsKGEsZCk9Pmg2KEw5LHRoaXMsZ2Z0KS5jYWxsKHRoaXMsYSxkKSksdGhpcy5hZGRI'@;
put 'b29rKCJhZnRlckdldFJvd0hlYWRlciIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4gaDYoTDksbCxiZnQpLmNhbGwobCwuLi5kKX0pLHRoaXMuYWRkSG9vaygibW9kaWZ5Q29w'@;
put 'eWFibGVSYW5nZSIsYT0+aDYoTDksdGhpcyx2ZnQpLmNhbGwodGhpcyxhKSksc3VwZXIuZW5hYmxlUGx1Z2luKCkpfXVwZGF0ZVBsdWdpbigpe3RoaXMuZGlzYWJsZVBsdWdpbigpLHRoaXMuZW5hYmxlUGx1Z2luKCksc3VwZXIudXBkYXRlUGx1Z2luKCl9ZGlzYWJsZVBsdWdpbigpe3N1cGVy'@;
put 'LmRpc2FibGVQbHVnaW4oKSx0aGlzLmhvdC5yb3dJbmRleE1hcHBlci51bnJlZ2lzdGVyTWFwKHRoaXMucGx1Z2luTmFtZSksdGhpcy5yZXNldENlbGxzTWV0YSgpfXNob3dSb3dzKGwpe2NvbnN0IGE9dGhpcy5nZXRIaWRkZW5Sb3dzKCksZD10aGlzLmlzVmFsaWRDb25maWcobCk7bGV0IGg9'@;
put 'YTtjb25zdCBmPVI5KFdwLHRoaXMpLmdldFZhbHVlcygpLnNsaWNlKCksdj1sLmxlbmd0aD4wO2QmJnYmJihZbihsLm1hcChaPT50aGlzLmhvdC50b1BoeXNpY2FsUm93KFopKSxaPT57ZltaXT0hMX0pLGg9cXUoZiwoWixyZSxjZSk9PihyZSYmWi5wdXNoKHRoaXMuaG90LnRvVmlzdWFsUm93'@;
put 'KGNlKSksWiksW10pKSwhMSE9PXRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVVbmhpZGVSb3dzIixhLGgsZCYmdikmJihkJiZ2JiZSOShXcCx0aGlzKS5zZXRWYWx1ZXMoZiksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyVW5oaWRlUm93cyIsYSxoLGQmJnYsZCYmaC5sZW5ndGg8YS5sZW5ndGgp'@;
put 'KX1zaG93Um93KCl7Zm9yKHZhciBsPWFyZ3VtZW50cy5sZW5ndGgsYT1uZXcgQXJyYXkobCksZD0wO2Q8bDtkKyspYVtkXT1hcmd1bWVudHNbZF07dGhpcy5zaG93Um93cyhhKX1oaWRlUm93cyhsKXtjb25zdCBhPXRoaXMuZ2V0SGlkZGVuUm93cygpLGQ9dGhpcy5pc1ZhbGlkQ29uZmlnKGwp'@;
put 'O2xldCBoPWE7ZCYmKGg9QXJyYXkuZnJvbShuZXcgU2V0KGEuY29uY2F0KGwpKSkpLCExIT09dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZUhpZGVSb3dzIixhLGgsZCkmJihkJiZ0aGlzLmhvdC5iYXRjaEV4ZWN1dGlvbigoKT0+e1luKGwsdj0+e1I5KFdwLHRoaXMpLnNldFZhbHVlQXRJbmRl'@;
put 'eCh0aGlzLmhvdC50b1BoeXNpY2FsUm93KHYpLCEwKX0pfSwhMCksdGhpcy5ob3QucnVuSG9va3MoImFmdGVySGlkZVJvd3MiLGEsaCxkLGQmJmgubGVuZ3RoPmEubGVuZ3RoKSl9aGlkZVJvdygpe2Zvcih2YXIgbD1hcmd1bWVudHMubGVuZ3RoLGE9bmV3IEFycmF5KGwpLGQ9MDtkPGw7ZCsr'@;
put 'KWFbZF09YXJndW1lbnRzW2RdO3RoaXMuaGlkZVJvd3MoYSl9Z2V0SGlkZGVuUm93cygpe3JldHVybiB5cyhSOShXcCx0aGlzKS5nZXRIaWRkZW5JbmRleGVzKCksbD0+dGhpcy5ob3QudG9WaXN1YWxSb3cobCkpfWlzSGlkZGVuKGwpe3JldHVybiBSOShXcCx0aGlzKS5nZXRWYWx1ZUF0SW5k'@;
put 'ZXgodGhpcy5ob3QudG9QaHlzaWNhbFJvdyhsKSl8fCExfWlzVmFsaWRDb25maWcobCl7Y29uc3QgYT10aGlzLmhvdC5jb3VudFJvd3MoKTtyZXR1cm4hIShBcnJheS5pc0FycmF5KGwpJiZsLmxlbmd0aD4wKSYmbC5ldmVyeShkPT5OdW1iZXIuaXNJbnRlZ2VyKGQpJiZkPj0wJiZkPGEpfXJl'@;
put 'c2V0Q2VsbHNNZXRhKCl7WW4odGhpcy5ob3QuZ2V0Q2VsbHNNZXRhKCksbD0+e2wuc2tpcFJvd09uUGFzdGU9ITF9KX1kZXN0cm95KCl7ZW1lKFdwLHRoaXMsbnVsbCksc3VwZXIuZGVzdHJveSgpfX1mdW5jdGlvbiBnZnQoYyxsKXtyZXR1cm4gdGhpcy5pc0hpZGRlbihsKT8wOmN9ZnVuY3Rp'@;
put 'b24gbWZ0KGMsbCxhKXtpZighMT09PXRoaXMuZ2V0U2V0dGluZygiY29weVBhc3RlRW5hYmxlZCIpJiZ0aGlzLmlzSGlkZGVuKGMpJiYoYS5za2lwUm93T25QYXN0ZT0hMCksdGhpcy5pc0hpZGRlbihjLTEpKWEuY2xhc3NOYW1lPWEuY2xhc3NOYW1lfHwiIiwtMT09PWEuY2xhc3NOYW1lLmlu'@;
put 'ZGV4T2YoImFmdGVySGlkZGVuUm93IikmJihhLmNsYXNzTmFtZSs9IiBhZnRlckhpZGRlblJvdyIpO2Vsc2UgaWYoYS5jbGFzc05hbWUpe2NvbnN0IGQ9YS5jbGFzc05hbWUuc3BsaXQoIiAiKTtpZihkLmxlbmd0aD4wKXtjb25zdCBoPWQuaW5kZXhPZigiYWZ0ZXJIaWRkZW5Sb3ciKTtoPi0x'@;
put 'JiZkLnNwbGljZShoLDEpLGEuY2xhc3NOYW1lPWQuam9pbigiICIpfX19ZnVuY3Rpb24gdmZ0KGMpe2lmKHRoaXMuZ2V0U2V0dGluZygiY29weVBhc3RlRW5hYmxlZCIpKXJldHVybiBjO2NvbnN0IGw9W10sYT0oZCxoLGYsdik9PntsLnB1c2goe3N0YXJ0Um93OmQsZW5kUm93Omgsc3RhcnRD'@;
put 'b2w6ZixlbmRDb2w6dn0pfTtyZXR1cm4gWW4oYyxkPT57bGV0IGg9ITAsZj0wO0dhKGQuc3RhcnRSb3csZC5lbmRSb3csdj0+e3RoaXMuaXNIaWRkZW4odik/KGh8fGEoZix2LTEsZC5zdGFydENvbCxkLmVuZENvbCksaD0hMCk6KGgmJihmPXYpLHY9PT1kLmVuZFJvdyYmYShmLHYsZC5zdGFy'@;
put 'dENvbCxkLmVuZENvbCksaD0hMSl9KX0pLGx9ZnVuY3Rpb24gYmZ0KGMsbCl7aWYoIXRoaXMuZ2V0U2V0dGluZygiaW5kaWNhdG9ycyIpfHxjPDApcmV0dXJuO2NvbnN0IGE9W107Yz49MSYmdGhpcy5pc0hpZGRlbihjLTEpJiZhLnB1c2goImFmdGVySGlkZGVuUm93IiksYzx0aGlzLmhvdC5j'@;
put 'b3VudFJvd3MoKS0xJiZ0aGlzLmlzSGlkZGVuKGMrMSkmJmEucHVzaCgiYmVmb3JlSGlkZGVuUm93IiksVGkobCxhKX1mdW5jdGlvbiB5ZnQoYyl7Yy5pdGVtcy5wdXNoKHtuYW1lOnNzfSxmdW5jdGlvbiBjZnQoYyl7cmV0dXJue2tleToiaGlkZGVuX3Jvd3NfaGlkZSIsbmFtZSgpe2NvbnN0'@;
put 'IGw9dGhpcy5nZXRTZWxlY3RlZExhc3QoKTtsZXQgYT0wO2lmKEFycmF5LmlzQXJyYXkobCkpe2NvbnN0W2QsLGhdPWw7ZC1oIT0wJiYoYT0xKX1yZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKE9xLGEpfSxjYWxsYmFjaygpe2NvbnN0e2Zyb206bCx0bzphfT10aGlzLmdldFNlbGVj'@;
put 'dGVkUmFuZ2VMYXN0KCksZD1NYXRoLm1heChNYXRoLm1pbihsLnJvdyxhLnJvdyksMCksaD1NYXRoLm1heChsLnJvdyxhLnJvdyksZj1bXTtmb3IobGV0IEQ9ZDtEPD1oO0QrPTEpZi5wdXNoKEQpO2MuaGlkZVJvd3MoZik7Y29uc3QgTT10aGlzLnJvd0luZGV4TWFwcGVyLmdldE5lYXJlc3RO'@;
put 'b3RIaWRkZW5JbmRleChmW2YubGVuZ3RoLTFdLDEsITApO051bWJlci5pc0ludGVnZXIoTSkmJk0+PTA/dGhpcy5zZWxlY3RSb3dzKE0pOnRoaXMuZGVzZWxlY3RDZWxsKCksdGhpcy5yZW5kZXIoKSx0aGlzLnZpZXcuYWRqdXN0RWxlbWVudHNTaXplKCl9LGRpc2FibGVkOiExLGhpZGRlbigp'@;
put 'e3JldHVybiEodGhpcy5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Um93SGVhZGVyKCl8fHRoaXMuc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvcm5lcigpKX19fSh0aGlzKSxmdW5jdGlvbiB1ZnQoYyl7Y29uc3QgbD1bXTtyZXR1cm57a2V5OiJoaWRkZW5fcm93c19zaG93IixuYW1lKCl7cmV0dXJu'@;
put 'IHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShQcSxsLmxlbmd0aD4xPzE6MCl9LGNhbGxiYWNrKCl7dmFyIGEsZDtpZigwPT09bC5sZW5ndGgpcmV0dXJuO2xldCBoPWxbMF0sZj1sW2wubGVuZ3RoLTFdO2g9bnVsbCE9PShhPXRoaXMucm93SW5kZXhNYXBwZXIuZ2V0TmVhcmVzdE5vdEhpZGRl'@;
put 'bkluZGV4KGgtMSwtMSkpJiZ2b2lkIDAhPT1hP2E6MCxmPW51bGwhPT0oZD10aGlzLnJvd0luZGV4TWFwcGVyLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChmKzEsMSkpJiZ2b2lkIDAhPT1kP2Q6dGhpcy5jb3VudFJvd3MoKS0xLGMuc2hvd1Jvd3MobCksdGhpcy5yZW5kZXIoKSx0aGlzLnZp'@;
put 'ZXcuYWRqdXN0RWxlbWVudHNTaXplKCksZi1oKzE9PT10aGlzLmNvdW50Um93cygpfHx0aGlzLnNlbGVjdFJvd3MoaCxmKX0sZGlzYWJsZWQ6ITEsaGlkZGVuKCl7Y29uc3QgYT15cyhjLmdldEhpZGRlblJvd3MoKSxjZT0+dGhpcy50b1BoeXNpY2FsUm93KGNlKSk7aWYoIXRoaXMuc2VsZWN0'@;
put 'aW9uLmlzU2VsZWN0ZWRCeVJvd0hlYWRlcigpJiYhdGhpcy5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Q29ybmVyKCl8fGEubGVuZ3RoPDEpcmV0dXJuITA7bC5sZW5ndGg9MDtjb25zdCBkPXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSxoPWQuZ2V0VG9wU3RhcnRDb3JuZXIoKS5yb3csZj1k'@;
put 'LmdldEJvdHRvbUVuZENvcm5lcigpLnJvdyx2PXRoaXMucm93SW5kZXhNYXBwZXIsTT12LmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoaCksRD12LmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoZiksWj12LmdldE5vdFRyaW1tZWRJbmRleGVzKCkscmU9W107aWYoaCE9PWYpe2lm'@;
put 'KGYtaCsxPkQtTSsxKXtjb25zdCBFZT1aLnNsaWNlKGgsZisxKTtyZS5wdXNoKC4uLkVlLmZpbHRlcihCZT0+YS5pbmNsdWRlcyhCZSkpKX19ZWxzZSBpZigwPT09TSYmTTxoKXJlLnB1c2goLi4uWi5zbGljZSgwLGgpKTtlbHNlIGlmKG51bGw9PT1NKXJlLnB1c2goLi4uWi5zbGljZSgwLHRo'@;
put 'aXMuY291bnRSb3dzKCkpKTtlbHNle2NvbnN0IGNlPXRoaXMuY291bnRSb3dzKCktMTtEPT09di5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KHYuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGNlLC0xKSkmJmNlPmYmJnJlLnB1c2goLi4uWi5zbGljZShmKzEpKX1yZXR1cm4gWW4ocmUs'@;
put 'Y2U9PntsLnB1c2godGhpcy50b1Zpc3VhbFJvdyhjZSkpfSksMD09PWwubGVuZ3RofX19KHRoaXMpKX1mdW5jdGlvbiBfZnQoKXtjb25zdCBjPXRoaXMuZ2V0U2V0dGluZygicm93cyIpO0FycmF5LmlzQXJyYXkoYykmJnRoaXMuaGlkZVJvd3MoYyl9ZnVuY3Rpb24gbm1lKGMsbCl7aWYobC5o'@;
put 'YXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX1mdW5jdGlvbiBQUShjLGwpe3JldHVybiBjLmdldChpSChjLGwpKX1mdW5jdGlvbiBGUShjLGwsYSl7cmV0dXJuIGMuc2V0KGlI'@;
put 'KGMsbCksYSksYX1mdW5jdGlvbiBpSChjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0'@;
put 'Iil9U2EuZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImJlZm9yZUNvbHVtbkZyZWV6ZSIpLFNhLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJhZnRlckNvbHVtbkZyZWV6ZSIpLFNhLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJiZWZvcmVDb2x1bW5VbmZyZWV6ZSIpLFNhLmdldFNpbmdsZXRv'@;
put 'bigpLnJlZ2lzdGVyKCJhZnRlckNvbHVtblVuZnJlZXplIik7Y29uc3Qgcm1lPSJtYW51YWxDb2x1bW5GcmVlemUiO3ZhciBPOT1uZXcgV2Vha01hcCxIUT1uZXcgV2Vha1NldDtjbGFzcyBFZnQgZXh0ZW5kcyBGc3tjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksZnVuY3Rpb24g'@;
put 'U2Z0KGMsbCl7bm1lKGMsbCksbC5hZGQoYyl9KHRoaXMsSFEpLGZ1bmN0aW9uIE1mdChjLGwsYSl7bm1lKGMsbCksbC5zZXQoYyxhKX0odGhpcyxPOSwhMSl9c3RhdGljIGdldCBQTFVHSU5fS0VZKCl7cmV0dXJuIHJtZX1zdGF0aWMgZ2V0IFBMVUdJTl9QUklPUklUWSgpe3JldHVybiAxMTB9'@;
put 'aXNFbmFibGVkKCl7cmV0dXJuISF0aGlzLmhvdC5nZXRTZXR0aW5ncygpW3JtZV19ZW5hYmxlUGx1Z2luKCl7dGhpcy5lbmFibGVkfHwodGhpcy5hZGRIb29rKCJhZnRlckNvbnRleHRNZW51RGVmYXVsdE9wdGlvbnMiLGw9PmlIKEhRLHRoaXMsVGZ0KS5jYWxsKHRoaXMsbCkpLHRoaXMuYWRk'@;
put 'SG9vaygiYmVmb3JlQ29sdW1uTW92ZSIsKGwsYSk9PmlIKEhRLHRoaXMsQWZ0KS5jYWxsKHRoaXMsbCxhKSksc3VwZXIuZW5hYmxlUGx1Z2luKCkpfWRpc2FibGVQbHVnaW4oKXtGUShPOSx0aGlzLCExKSxzdXBlci5kaXNhYmxlUGx1Z2luKCl9dXBkYXRlUGx1Z2luKCl7dGhpcy5kaXNhYmxl'@;
put 'UGx1Z2luKCksdGhpcy5lbmFibGVQbHVnaW4oKSxzdXBlci51cGRhdGVQbHVnaW4oKX1mcmVlemVDb2x1bW4obCl7Y29uc3QgYT10aGlzLmhvdC5nZXRTZXR0aW5ncygpLGQ9YS5maXhlZENvbHVtbnNTdGFydDx0aGlzLmhvdC5jb3VudENvbHMoKSYmbD5hLmZpeGVkQ29sdW1uc1N0YXJ0LTE7'@;
put 'UFEoTzksdGhpcyl8fEZRKE85LHRoaXMsITApLCExIT09dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZUNvbHVtbkZyZWV6ZSIsbCxkKSYmKGQmJih0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5tb3ZlSW5kZXhlcyhsLGEuZml4ZWRDb2x1bW5zU3RhcnQpLGEuX2ZpeGVkQ29sdW1uc1N0YXJ0'@;
put 'Kz0xKSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJDb2x1bW5GcmVlemUiLGwsZCkpfXVuZnJlZXplQ29sdW1uKGwpe2NvbnN0IGE9dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKSxkPWEuZml4ZWRDb2x1bW5zU3RhcnQ+MCYmbDw9YS5maXhlZENvbHVtbnNTdGFydC0xO1BRKE85LHRoaXMpfHxGUShP'@;
put 'OSx0aGlzLCEwKSwhMSE9PXRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVDb2x1bW5VbmZyZWV6ZSIsbCxkKSYmKGQmJihhLl9maXhlZENvbHVtbnNTdGFydC09MSx0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5tb3ZlSW5kZXhlcyhsLGEuZml4ZWRDb2x1bW5zU3RhcnQpKSx0aGlzLmhvdC5y'@;
put 'dW5Ib29rcygiYWZ0ZXJDb2x1bW5VbmZyZWV6ZSIsbCxkKSl9fWZ1bmN0aW9uIFRmdChjKXtjLml0ZW1zLnB1c2goe25hbWU6Ii0tLS0tLS0tLSJ9LGZ1bmN0aW9uIHdmdChjKXtyZXR1cm57a2V5OiJmcmVlemVfY29sdW1uIixuYW1lKCl7cmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFz'@;
put 'ZShscSl9LGNhbGxiYWNrKGwsYSl7Y29uc3Rbe3N0YXJ0Ontjb2w6ZH19XT1hO2MuZnJlZXplQ29sdW1uKGQpLHRoaXMucmVuZGVyKCksdGhpcy52aWV3LmFkanVzdEVsZW1lbnRzU2l6ZSgpfSxoaWRkZW4oKXtjb25zdCBsPXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZSgpO2xldCBhPSExO3JldHVy'@;
put 'bih2b2lkIDA9PT1sfHxsLmxlbmd0aD4xfHxsWzBdLmZyb20uY29sIT09bFswXS50by5jb2x8fGxbMF0uZnJvbS5jb2w8PXRoaXMuZ2V0U2V0dGluZ3MoKS5maXhlZENvbHVtbnNTdGFydC0xKSYmKGE9ITApLGF9fX0odGhpcyksZnVuY3Rpb24gQ2Z0KGMpe3JldHVybntrZXk6InVuZnJlZXpl'@;
put 'X2NvbHVtbiIsbmFtZSgpe3JldHVybiB0aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UoY3EpfSxjYWxsYmFjayhsLGEpe2NvbnN0W3tzdGFydDp7Y29sOmR9fV09YTtjLnVuZnJlZXplQ29sdW1uKGQpLHRoaXMucmVuZGVyKCksdGhpcy52aWV3LmFkanVzdEVsZW1lbnRzU2l6ZSgpfSxoaWRkZW4o'@;
put 'KXtjb25zdCBsPXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZSgpO2xldCBhPSExO3JldHVybih2b2lkIDA9PT1sfHxsLmxlbmd0aD4xfHxsWzBdLmZyb20uY29sIT09bFswXS50by5jb2x8fGxbMF0uZnJvbS5jb2w+PXRoaXMuZ2V0U2V0dGluZ3MoKS5maXhlZENvbHVtbnNTdGFydCkmJihhPSEwKSxh'@;
put 'fX19KHRoaXMpKX1mdW5jdGlvbiBBZnQoYyxsKXtpZihQUShPOSx0aGlzKSl7Y29uc3QgYT10aGlzLmhvdC5nZXRTZXR0aW5ncygpLmZpeGVkQ29sdW1uc1N0YXJ0O2lmKGw8YXx8Yy5zb21lKGQ9PmQ8YSkpcmV0dXJuITF9fWZ1bmN0aW9uIGFIKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBr'@;
put 'ZnQoYyl7dmFyIGw9ZnVuY3Rpb24gRGZ0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJu'@;
put 'IGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09i'@;
put 'amVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jb25zdCBjdz0icHgiLG9tZT1jbGFzcyBJZnR7Y29uc3RydWN0b3IobCl7YUgodGhpcywiaG90Iix2b2lkIDApLGFIKHRoaXMsIl9lbGVt'@;
put 'ZW50IixudWxsKSxhSCh0aGlzLCJzdGF0ZSIsMCksYUgodGhpcywiaW5saW5lUHJvcGVydHkiLHZvaWQgMCksdGhpcy5ob3Q9bCx0aGlzLmlubGluZVByb3BlcnR5PWwuaXNSdGwoKT8icmlnaHQiOiJsZWZ0In1hcHBlbmRUbyhsKXtsLmFwcGVuZENoaWxkKHRoaXMuX2VsZW1lbnQpLHRoaXMu'@;
put 'c3RhdGU9Mn1idWlsZCgpezA9PT10aGlzLnN0YXRlJiYodGhpcy5fZWxlbWVudD10aGlzLmhvdC5yb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksdGhpcy5zdGF0ZT0xKX1kZXN0cm95KCl7dGhpcy5pc0FwcGVuZGVkKCkmJnRoaXMuX2VsZW1lbnQucGFyZW50RWxlbWVudC5yZW1v'@;
put 'dmVDaGlsZCh0aGlzLl9lbGVtZW50KSx0aGlzLl9lbGVtZW50PW51bGwsdGhpcy5zdGF0ZT0wfWlzQXBwZW5kZWQoKXtyZXR1cm4gMj09PXRoaXMuc3RhdGV9aXNCdWlsdCgpe3JldHVybiB0aGlzLnN0YXRlPj0xfXNldFBvc2l0aW9uKGwsYSl7bTEobCkmJih0aGlzLl9lbGVtZW50LnN0eWxl'@;
put 'LnRvcD1sK2N3KSxtMShhKSYmKHRoaXMuX2VsZW1lbnQuc3R5bGVbdGhpcy5pbmxpbmVQcm9wZXJ0eV09YStjdyl9Z2V0UG9zaXRpb24oKXtjb25zdCBsPXRoaXMuX2VsZW1lbnQuc3R5bGU7cmV0dXJue3RvcDpsLnRvcD9wYXJzZUludChsLnRvcCwxMCk6MCxzdGFydDpsW3RoaXMuaW5saW5l'@;
put 'UHJvcGVydHldP3BhcnNlSW50KGxbdGhpcy5pbmxpbmVQcm9wZXJ0eV0sMTApOjB9fXNldFNpemUobCxhKXttMShsKSYmKHRoaXMuX2VsZW1lbnQuc3R5bGUud2lkdGg9bCtjdyksbTEoYSkmJih0aGlzLl9lbGVtZW50LnN0eWxlLmhlaWdodD1hK2N3KX1nZXRTaXplKCl7cmV0dXJue3dpZHRo'@;
put 'OnRoaXMuX2VsZW1lbnQuc3R5bGUud2lkdGg/cGFyc2VJbnQodGhpcy5fZWxlbWVudC5zdHlsZS53aWR0aCwxMCk6MCxoZWlnaHQ6dGhpcy5fZWxlbWVudC5zdHlsZS5oZWlnaHQ/cGFyc2VJbnQodGhpcy5fZWxlbWVudC5zdHlsZS5oZWlnaHQsMTApOjB9fXNldE9mZnNldChsLGEpe20xKGwp'@;
put 'JiYodGhpcy5fZWxlbWVudC5zdHlsZS5tYXJnaW5Ub3A9bCtjdyksbTEoYSkmJih0aGlzLl9lbGVtZW50LnN0eWxlW2BtYXJnaW4ke3AxKHRoaXMuaW5saW5lUHJvcGVydHkpfWBdPWErY3cpfWdldE9mZnNldCgpe2NvbnN0IGw9dGhpcy5fZWxlbWVudC5zdHlsZSxhPWBtYXJnaW4ke3AxKHRo'@;
put 'aXMuaW5saW5lUHJvcGVydHkpfWA7cmV0dXJue3RvcDpsLm1hcmdpblRvcD9wYXJzZUludChsLm1hcmdpblRvcCwxMCk6MCxzdGFydDpsW2FdP3BhcnNlSW50KGxbYV0sMTApOjB9fX0sT2Z0PWNsYXNzIExmdCBleHRlbmRzIG9tZXtidWlsZCgpe3N1cGVyLmJ1aWxkKCksVGkodGhpcy5fZWxl'@;
put 'bWVudCwiaHRfX21hbnVhbENvbHVtbk1vdmUtLWJhY2tsaWdodCIpfX0sSGZ0PWNsYXNzIEZmdCBleHRlbmRzIG9tZXtidWlsZCgpe3N1cGVyLmJ1aWxkKCksVGkodGhpcy5fZWxlbWVudCwiaHRfX21hbnVhbENvbHVtbk1vdmUtLWd1aWRlbGluZSIpfX07ZnVuY3Rpb24gYjMoYyxsLGEpe3Nt'@;
put 'ZShjLGwpLGwuc2V0KGMsYSl9ZnVuY3Rpb24gc21lKGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX1mdW5jdGlvbiBLZChjLGwsYSl7cmV0dXJuIGMuc2V0'@;
put 'KGY2KGMsbCksYSksYX1mdW5jdGlvbiB6YShjLGwpe3JldHVybiBjLmdldChmNihjLGwpKX1mdW5jdGlvbiBmNihjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJp'@;
put 'dmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9U2EuZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImJlZm9yZUNvbHVtbk1vdmUiKSxTYS5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYWZ0ZXJDb2x1bW5Nb3ZlIik7Y29uc3QgVlE9Im1hbnVhbENvbHVtbk1vdmUi'@;
put 'LGxtZT0iaHRfX21hbnVhbENvbHVtbk1vdmUiLG9IPSJzaG93LXVpIixCUT0ib24tbW92aW5nLS1jb2x1bW5zIixqUT0iYWZ0ZXItc2VsZWN0aW9uLS1jb2x1bW5zIjt2YXIgUTE9bmV3IFdlYWtNYXAscDY9bmV3IFdlYWtNYXAsamc9bmV3IFdlYWtNYXAsc0g9bmV3IFdlYWtNYXAsZzY9bmV3'@;
put 'IFdlYWtNYXAsZWQ9bmV3IFdlYWtNYXAsbEg9bmV3IFdlYWtNYXAsSjI9bmV3IFdlYWtNYXAsdXc9bmV3IFdlYWtNYXAsY0g9bmV3IFdlYWtNYXAsYUE9bmV3IFdlYWtNYXAsUDk9bmV3IFdlYWtTZXQ7Y2xhc3MgQmZ0IGV4dGVuZHMgRnN7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVu'@;
put 'dHMpLGZ1bmN0aW9uIE5mdChjLGwpe3NtZShjLGwpLGwuYWRkKGMpfSh0aGlzLFA5KSxiMyh0aGlzLFExLG5ldyBPZnQodGhpcy5ob3QpKSxiMyh0aGlzLHA2LG5ldyBIZnQodGhpcy5ob3QpKSxiMyh0aGlzLGpnLFtdKSxiMyh0aGlzLHNILDApLGIzKHRoaXMsZzYsITEpLGIzKHRoaXMsZWQs'@;
put 'e30pLGIzKHRoaXMsbEgsdm9pZCAwKSxiMyh0aGlzLEoyLHZvaWQgMCksYjModGhpcyx1dyx2b2lkIDApLGIzKHRoaXMsY0gsdm9pZCAwKSxiMyh0aGlzLGFBLHZvaWQgMCl9c3RhdGljIGdldCBQTFVHSU5fS0VZKCl7cmV0dXJuIFZRfXN0YXRpYyBnZXQgUExVR0lOX1BSSU9SSVRZKCl7cmV0'@;
put 'dXJuIDEyMH1pc0VuYWJsZWQoKXtyZXR1cm4hIXRoaXMuaG90LmdldFNldHRpbmdzKClbVlFdfWVuYWJsZVBsdWdpbigpe3ZhciBsPXRoaXM7dGhpcy5lbmFibGVkfHwodGhpcy5hZGRIb29rKCJiZWZvcmVPbkNlbGxNb3VzZURvd24iLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5s'@;
put 'ZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIGY2KFA5LGwsamZ0KS5jYWxsKGwsLi4uZCl9KSx0aGlzLmFkZEhvb2soImJlZm9yZU9uQ2VsbE1vdXNlT3ZlciIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5l'@;
put 'dyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4gZjYoUDksbCxVZnQpLmNhbGwobCwuLi5kKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJTY3JvbGxWZXJ0aWNhbGx5IiwoKT0+ZjYoUDksdGhpcyxXZnQpLmNhbGwodGhpcykpLHRoaXMuYWRkSG9vaygiYWZ0ZXJM'@;
put 'b2FkRGF0YSIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4gZjYoUDksbCxZZnQpLmNhbGwobCwuLi5kKX0pLHRoaXMuYnVpbGRQbHVnaW5VSSgpLHRoaXMucmVnaXN0ZXJFdmVu'@;
put 'dHMoKSxUaSh0aGlzLmhvdC5yb290RWxlbWVudCxsbWUpLHN1cGVyLmVuYWJsZVBsdWdpbigpKX11cGRhdGVQbHVnaW4oKXt0aGlzLmRpc2FibGVQbHVnaW4oKSx0aGlzLmVuYWJsZVBsdWdpbigpLHRoaXMubW92ZUJ5U2V0dGluZ3NPckxvYWQoKSxzdXBlci51cGRhdGVQbHVnaW4oKX1kaXNh'@;
put 'YmxlUGx1Z2luKCl7bG8odGhpcy5ob3Qucm9vdEVsZW1lbnQsbG1lKSx0aGlzLnVucmVnaXN0ZXJFdmVudHMoKSx6YShRMSx0aGlzKS5kZXN0cm95KCksemEocDYsdGhpcykuZGVzdHJveSgpLHN1cGVyLmRpc2FibGVQbHVnaW4oKX1tb3ZlQ29sdW1uKGwsYSl7cmV0dXJuIHRoaXMubW92ZUNv'@;
put 'bHVtbnMoW2xdLGEpfW1vdmVDb2x1bW5zKGwsYSl7Y29uc3QgZD16YShsSCx0aGlzKSxoPXRoaXMuaXNNb3ZlUG9zc2libGUobCxhKSxmPXRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVDb2x1bW5Nb3ZlIixsLGEsZCxoKTtpZihLZChsSCx0aGlzLHZvaWQgMCksITE9PT1mKXJldHVybjtoJiZ0'@;
put 'aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5tb3ZlSW5kZXhlcyhsLGEpO2NvbnN0IHY9aCYmdGhpcy5pc0NvbHVtbk9yZGVyQ2hhbmdlZChsLGEpO3JldHVybiB0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJDb2x1bW5Nb3ZlIixsLGEsZCxoLHYpLHZ9ZHJhZ0NvbHVtbihsLGEpe3JldHVybiB0'@;
put 'aGlzLmRyYWdDb2x1bW5zKFtsXSxhKX1kcmFnQ29sdW1ucyhsLGEpe2NvbnN0IGQ9dGhpcy5jb3VudEZpbmFsSW5kZXgobCxhKTtyZXR1cm4gS2QobEgsdGhpcyxhKSx0aGlzLm1vdmVDb2x1bW5zKGwsZCl9aXNNb3ZlUG9zc2libGUobCxhKXtjb25zdCBkPXRoaXMuaG90LmNvbHVtbkluZGV4'@;
put 'TWFwcGVyLmdldE5vdFRyaW1tZWRJbmRleGVzTGVuZ3RoKCksaD1sLmxlbmd0aCthPmQsZj1hPDAsdj1sLnNvbWUoRD0+RDwwKSxNPWwuc29tZShEPT5EPj1kKTtyZXR1cm4hKGh8fGZ8fHZ8fE0pfWlzQ29sdW1uT3JkZXJDaGFuZ2VkKGwsYSl7cmV0dXJuIGwuc29tZSgoZCxoKT0+ZC1oIT09'@;
put 'YSl9Y291bnRGaW5hbEluZGV4KGwsYSl7Y29uc3QgZD1xdShsLChoLGYpPT4oZjxhJiYoaCs9MSksaCksMCk7cmV0dXJuIGEtZH1nZXRDb2x1bW5zV2lkdGgobCxhKXtjb25zdCBkPXRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyO2xldCBoPTA7Zm9yKGxldCBmPWw7Zjw9YTtmKz0xKXtjb25z'@;
put 'dCB2PWQuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChmKTtmPDA/aCs9dGhpcy5ob3Qudmlldy5fd3Qud3RWaWV3cG9ydC5nZXRSb3dIZWFkZXJXaWR0aCgpfHwwOm51bGwhPT12JiYoaCs9dGhpcy5ob3Qudmlldy5fd3Qud3RUYWJsZS5nZXRDb2x1bW5XaWR0aCh2KXx8MCl9cmV0dXJu'@;
put 'IGh9bW92ZUJ5U2V0dGluZ3NPckxvYWQoKXtjb25zdCBsPXRoaXMuaG90LmdldFNldHRpbmdzKClbVlFdO2lmKEFycmF5LmlzQXJyYXkobCkpdGhpcy5tb3ZlQ29sdW1ucyhsLDApO2Vsc2UgaWYodm9pZCAwIT09bCl7Y29uc3QgYT10aGlzLnBlcnNpc3RlbnRTdGF0ZUxvYWQoKTthLmxlbmd0'@;
put 'aCYmdGhpcy5tb3ZlQ29sdW1ucyhhLDApfX1pc0ZpeGVkQ29sdW1uc1N0YXJ0KGwpe3JldHVybiBsPHRoaXMuaG90LmdldFNldHRpbmdzKCkuZml4ZWRDb2x1bW5zU3RhcnR9cGVyc2lzdGVudFN0YXRlU2F2ZSgpe3RoaXMuaG90LnJ1bkhvb2tzKCJwZXJzaXN0ZW50U3RhdGVTYXZlIiwibWFu'@;
put 'dWFsQ29sdW1uTW92ZSIsdGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIuZ2V0SW5kZXhlc1NlcXVlbmNlKCkpfXBlcnNpc3RlbnRTdGF0ZUxvYWQoKXtjb25zdCBsPXt9O3JldHVybiB0aGlzLmhvdC5ydW5Ib29rcygicGVyc2lzdGVudFN0YXRlTG9hZCIsIm1hbnVhbENvbHVtbk1vdmUiLGwp'@;
put 'LGwudmFsdWU/bC52YWx1ZTpbXX1wcmVwYXJlQ29sdW1uc1RvTW92aW5nKGwsYSl7Y29uc3QgZD1bXTtyZXR1cm4gR2EobCxhLGg9PntkLnB1c2goaCl9KSxkfXJlZnJlc2hQb3NpdGlvbnMoKXtjb25zdCBsPXRoaXMuaG90LnZpZXcuZ2V0Rmlyc3RGdWxseVZpc2libGVDb2x1bW4oKTt0aGlz'@;
put 'LmlzRml4ZWRDb2x1bW5zU3RhcnQoemEoSjIsdGhpcykpJiZsPjAmJnRoaXMuaG90LnNjcm9sbFZpZXdwb3J0VG8oe2NvbDp0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgobC0xLC0xKX0pO2NvbnN0IGE9dGhpcy5ob3Qudmlldy5fd3Qud3RUYWJs'@;
put 'ZSxkPXRoaXMuaG90LnZpZXcuX3d0Lnd0T3ZlcmxheXMuc2Nyb2xsYWJsZUVsZW1lbnQsaD0ibnVtYmVyIj09dHlwZW9mIGQuc2Nyb2xsWD9kLnNjcm9sbFg6ZC5zY3JvbGxMZWZ0O2xldCBmPXRoaXMuaG90LnZpZXcuVEhFQUQub2Zmc2V0TGVmdCt0aGlzLmdldENvbHVtbnNXaWR0aCgwLHph'@;
put 'KEoyLHRoaXMpLTEpO2NvbnN0IHY9YS5oaWRlci5vZmZzZXRXaWR0aCxNPWEuVEJPRFkub2Zmc2V0TGVmdCxEPXphKFExLHRoaXMpLmdldE9mZnNldCgpLnN0YXJ0LFo9emEoUTEsdGhpcykuZ2V0U2l6ZSgpLndpZHRoO2xldCByZT0wLGNlPTA7aWYodGhpcy5ob3QuaXNSdGwoKSl7Y29uc3Qg'@;
put 'QmU9dGhpcy5ob3Qucm9vdFdpbmRvdyxxZT1zdSh0aGlzLmhvdC5yb290RWxlbWVudCkscnQ9QmUuaW5uZXJXaWR0aC16YSh1dyx0aGlzKS1xZTtjZT1CZS5pbm5lcldpZHRoLXphKGVkLHRoaXMpLmV2ZW50UGFnZVgtcnQtKHZvaWQgMD09PWQuc2Nyb2xsWD9oOjApfWVsc2UgY2U9emEoZWQs'@;
put 'dGhpcykuZXZlbnRQYWdlWC0oemEodXcsdGhpcyktKHZvaWQgMD09PWQuc2Nyb2xsWD9oOjApKTtpZih6YShjSCx0aGlzKSYmKHJlPXRoaXMuaG90LnZpZXcuX3d0Lnd0T3ZlcmxheXMuaW5saW5lU3RhcnRPdmVybGF5LmNsb25lLnd0VGFibGUuZ2V0Q29sdW1uSGVhZGVyKC0xKS5vZmZzZXRX'@;
put 'aWR0aCksdGhpcy5pc0ZpeGVkQ29sdW1uc1N0YXJ0KHphKEoyLHRoaXMpKSYmKGYrPWgpLGYrPXJlLHphKEoyLHRoaXMpPDApemEoYUEsdGhpcyk+MD96YShlZCx0aGlzKS5jb2w9MDp6YShlZCx0aGlzKS5jb2w9bD4wP2wtMTpsO2Vsc2UgaWYoemEoZWQsdGhpcykuVEQub2Zmc2V0V2lkdGgv'@;
put 'MitmPD1jZSl7Y29uc3QgQmU9emEoSjIsdGhpcyk+PXphKHNILHRoaXMpP3phKHNILHRoaXMpLTE6emEoSjIsdGhpcyk7emEoZWQsdGhpcykuY29sPUJlKzEsZis9emEoZWQsdGhpcykuVEQub2Zmc2V0V2lkdGh9ZWxzZSB6YShlZCx0aGlzKS5jb2w9emEoSjIsdGhpcyk7bGV0IGJlPWNlLEVl'@;
put 'PWY7Y2UrWitEPj12P2JlPXYtWi1EOmNlK0Q8TStyZSYmKGJlPU0rcmUrTWF0aC5hYnMoRCkpLGY+PXYtMT9FZT12LTE6MD09PUVlP0VlPTE6dm9pZCAwIT09ZC5zY3JvbGxYJiZ6YShKMix0aGlzKTx6YShhQSx0aGlzKSYmKEVlLT16YSh1dyx0aGlzKTw9ZC5zY3JvbGxYP3phKHV3LHRoaXMp'@;
put 'OjApLHphKFExLHRoaXMpLnNldFBvc2l0aW9uKG51bGwsYmUpLHphKHA2LHRoaXMpLnNldFBvc2l0aW9uKG51bGwsRWUpfXJlZ2lzdGVyRXZlbnRzKCl7Y29uc3R7ZG9jdW1lbnRFbGVtZW50Omx9PXRoaXMuaG90LnJvb3REb2N1bWVudDt0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3Rl'@;
put 'bmVyKGwsIm1vdXNlbW92ZSIsYT0+ZjYoUDksdGhpcyx6ZnQpLmNhbGwodGhpcyxhKSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihsLCJtb3VzZXVwIiwoKT0+ZjYoUDksdGhpcyxaZnQpLmNhbGwodGhpcykpfXVucmVnaXN0ZXJFdmVudHMoKXt0aGlzLmV2ZW50TWFuYWdl'@;
put 'ci5jbGVhcigpfWJ1aWxkUGx1Z2luVUkoKXt6YShRMSx0aGlzKS5idWlsZCgpLHphKHA2LHRoaXMpLmJ1aWxkKCl9ZGVzdHJveSgpe3phKFExLHRoaXMpLmRlc3Ryb3koKSx6YShwNix0aGlzKS5kZXN0cm95KCksc3VwZXIuZGVzdHJveSgpfX1mdW5jdGlvbiBqZnQoYyxsLGEsZCl7Y29uc3Qg'@;
put 'aD10aGlzLmhvdC52aWV3Ll93dC53dFRhYmxlLGY9dGhpcy5ob3Quc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvbHVtbkhlYWRlcigpLHY9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSxNPXBvKGMudGFyZ2V0LCJzb3J0QWN0aW9uIik7aWYoIXZ8fCFmfHx6YShnNix0aGlzKXx8MCE9'@;
put 'PWMuYnV0dG9ufHxNKXJldHVybiBLZChnNix0aGlzLCExKSx6YShqZyx0aGlzKS5sZW5ndGg9MCx2b2lkIGxvKHRoaXMuaG90LnJvb3RFbGVtZW50LFtCUSxvSF0pO2NvbnN0IEQ9emEocDYsdGhpcykuaXNCdWlsdCgpJiYhemEocDYsdGhpcykuaXNBcHBlbmRlZCgpLFo9emEoUTEsdGhpcyku'@;
put 'aXNCdWlsdCgpJiYhemEoUTEsdGhpcykuaXNBcHBlbmRlZCgpO0QmJlomJih6YShwNix0aGlzKS5hcHBlbmRUbyhoLmhpZGVyKSx6YShRMSx0aGlzKS5hcHBlbmRUbyhoLmhpZGVyKSk7Y29uc3R7ZnJvbTpyZSx0bzpjZX09dixiZT1NYXRoLm1pbihyZS5jb2wsY2UuY29sKSxFZT1NYXRoLm1h'@;
put 'eChyZS5jb2wsY2UuY29sKTtpZihsLnJvdzwwJiZsLmNvbD49YmUmJmwuY29sPD1FZSl7ZC5jb2x1bW49ITAsS2QoZzYsdGhpcywhMCk7Y29uc3QgQmU9YS5maXJzdENoaWxkP2FmZShjLGEuZmlyc3RDaGlsZCkueDpjLm9mZnNldFg7emEoZWQsdGhpcykuZXZlbnRQYWdlWD1jLnBhZ2VYLEtk'@;
put 'KEoyLHRoaXMsbC5jb2wpLHphKGVkLHRoaXMpLlREPWEsemEoZWQsdGhpcykuY29sPWwuY29sLEtkKGpnLHRoaXMsdGhpcy5wcmVwYXJlQ29sdW1uc1RvTW92aW5nKGJlLEVlKSksS2QoY0gsdGhpcywhIXRoaXMuaG90LmdldFNldHRpbmdzKCkucm93SGVhZGVycyksS2Qoc0gsdGhpcyx0aGlz'@;
put 'LmhvdC5jb3VudENvbHMoKSksS2QoYUEsdGhpcyx0aGlzLmhvdC5nZXRTZXR0aW5ncygpLmZpeGVkQ29sdW1uc1N0YXJ0KSxLZCh1dyx0aGlzLFUwKHRoaXMuaG90LnJvb3RFbGVtZW50KS5sZWZ0KTtjb25zdCBxZT16YShjSCx0aGlzKT8tMTowLHJ0PWguaG9sZGVyLnNjcm9sbFRvcCtoLmdl'@;
put 'dENvbHVtbkhlYWRlckhlaWdodCgwKSsxLHB0PWwuY29sPHphKGFBLHRoaXMpLGR0PXRoaXMuaG90LnZpZXcuX3d0Lnd0T3ZlcmxheXMuaW5saW5lU3RhcnRPdmVybGF5LmdldE92ZXJsYXlPZmZzZXQoKSxKdD1NYXRoLmFicyhCZS0odGhpcy5ob3QuaXNSdGwoKT9hLm9mZnNldFdpZHRoOjAp'@;
put 'KSx2bj10aGlzLmdldENvbHVtbnNXaWR0aChiZSxsLmNvbC0xKStKdCxDbj10aGlzLmdldENvbHVtbnNXaWR0aChxZSxiZS0xKSsocHQ/ZHQ6MCkrdm47emEoUTEsdGhpcykuc2V0UG9zaXRpb24ocnQsQ24pLHphKFExLHRoaXMpLnNldFNpemUodGhpcy5nZXRDb2x1bW5zV2lkdGgoYmUsRWUp'@;
put 'LGguaGlkZXIub2Zmc2V0SGVpZ2h0LXJ0KSx6YShRMSx0aGlzKS5zZXRPZmZzZXQobnVsbCwtdm4pLFRpKHRoaXMuaG90LnJvb3RFbGVtZW50LEJRKX1lbHNlIGxvKHRoaXMuaG90LnJvb3RFbGVtZW50LGpRKSxLZChnNix0aGlzLCExKSx6YShqZyx0aGlzKS5sZW5ndGg9MH1mdW5jdGlvbiB6'@;
put 'ZnQoYyl7emEoZzYsdGhpcykmJih6YShlZCx0aGlzKS5ldmVudFBhZ2VYPWMucGFnZVgsdGhpcy5yZWZyZXNoUG9zaXRpb25zKCkpfWZ1bmN0aW9uIFVmdChjLGwsYSxkKXshdGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKXx8IXphKGc2LHRoaXMpfHwoemEoamcsdGhpcykuaW5kZXhP'@;
put 'ZihsLmNvbCk+LTE/bG8odGhpcy5ob3Qucm9vdEVsZW1lbnQsb0gpOlRpKHRoaXMuaG90LnJvb3RFbGVtZW50LG9IKSxkLnJvdz0hMCxkLmNvbHVtbj0hMCxkLmNlbGw9ITAsS2QoSjIsdGhpcyxsLmNvbCksemEoZWQsdGhpcykuVEQ9YSl9ZnVuY3Rpb24gWmZ0KCl7Y29uc3QgYz16YShlZCx0'@;
put 'aGlzKS5jb2wsbD16YShqZyx0aGlzKS5sZW5ndGg7aWYoS2QoSjIsdGhpcyx2b2lkIDApLEtkKGc2LHRoaXMsITEpLGxvKHRoaXMuaG90LnJvb3RFbGVtZW50LFtCUSxvSCxqUV0pLHRoaXMuaG90LnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb2x1bW5IZWFkZXIoKSYmVGkodGhpcy5ob3Qucm9v'@;
put 'dEVsZW1lbnQsalEpLGw8MXx8dm9pZCAwPT09YylyZXR1cm47Y29uc3QgYT16YShqZyx0aGlzKVswXSxkPXRoaXMuaG90LnRvUGh5c2ljYWxDb2x1bW4oYSksaD10aGlzLmRyYWdDb2x1bW5zKHphKGpnLHRoaXMpLGMpO2lmKHphKGpnLHRoaXMpLmxlbmd0aD0wLCEwPT09aCl7dGhpcy5wZXJz'@;
put 'aXN0ZW50U3RhdGVTYXZlKCksdGhpcy5ob3QucmVuZGVyKCksdGhpcy5ob3Qudmlldy5hZGp1c3RFbGVtZW50c1NpemUoKTtjb25zdCBmPXRoaXMuaG90LnRvVmlzdWFsQ29sdW1uKGQpO3RoaXMuaG90LnNlbGVjdENvbHVtbnMoZixmK2wtMSl9fWZ1bmN0aW9uIFdmdCgpe2NvbnN0IGM9dGhp'@;
put 'cy5ob3Qudmlldy5fd3Qud3RUYWJsZSxkPWMuZ2V0Q29sdW1uSGVhZGVySGVpZ2h0KDApKzErYy5ob2xkZXIuc2Nyb2xsVG9wO3phKFExLHRoaXMpLnNldFBvc2l0aW9uKGQpLHphKFExLHRoaXMpLnNldFNpemUobnVsbCxjLmhpZGVyLm9mZnNldEhlaWdodC1kKX1mdW5jdGlvbiBZZnQoKXt0'@;
put 'aGlzLm1vdmVCeVNldHRpbmdzT3JMb2FkKCl9ZnVuY3Rpb24gQzEoYyxsLGEpe2NtZShjLGwpLGwuc2V0KGMsYSl9ZnVuY3Rpb24gY21lKGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2lj'@;
put 'ZSBvbiBhbiBvYmplY3QiKX1mdW5jdGlvbiBkdShjLGwsYSl7cmV0dXJuIGMuc2V0KHkzKGMsbCksYSksYX1mdW5jdGlvbiBFYShjLGwpe3JldHVybiBjLmdldCh5MyhjLGwpKX1mdW5jdGlvbiB5MyhjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJu'@;
put 'IGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9Y29uc3QgdUg9Im1hbnVhbENvbHVtblJlc2l6ZSIsdW1lPSJtYW51YWxDb2x1bW5XaWR0aHMiO3ZhciB6Zz1uZXcgV2Vha01h'@;
put 'cCxkSD1uZXcgV2Vha01hcCxCaD1uZXcgV2Vha01hcCxoSD1uZXcgV2Vha01hcCxZcD1uZXcgV2Vha01hcCxLZnQ9bmV3IFdlYWtNYXAsZHc9bmV3IFdlYWtNYXAsZkg9bmV3IFdlYWtNYXAscWQ9bmV3IFdlYWtNYXAsVWc9bmV3IFdlYWtNYXAsRjk9bmV3IFdlYWtNYXAscEg9bmV3IFdlYWtN'@;
put 'YXAsb0E9bmV3IFdlYWtNYXAsc0E9bmV3IFdlYWtNYXAsamg9bmV3IFdlYWtNYXAsbEE9bmV3IFdlYWtNYXAsR3A9bmV3IFdlYWtTZXQ7Y2xhc3MgcWZ0IGV4dGVuZHMgRnN7c3RhdGljIGdldCBQTFVHSU5fS0VZKCl7cmV0dXJuIHVIfXN0YXRpYyBnZXQgUExVR0lOX1BSSU9SSVRZKCl7cmV0'@;
put 'dXJuIDEzMH1jb25zdHJ1Y3RvcihsKXtzdXBlcihsKSxmdW5jdGlvbiBHZnQoYyxsKXtjbWUoYyxsKSxsLmFkZChjKX0odGhpcyxHcCksQzEodGhpcyx6ZyxudWxsKSxDMSh0aGlzLGRILG51bGwpLEMxKHRoaXMsQmgsW10pLEMxKHRoaXMsaEgsbnVsbCksQzEodGhpcyxZcCxudWxsKSxDMSh0'@;
put 'aGlzLEtmdCxudWxsKSxDMSh0aGlzLGR3LG51bGwpLEMxKHRoaXMsZkgsbnVsbCksQzEodGhpcyxxZCx0aGlzLmhvdC5yb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiRElWIikpLEMxKHRoaXMsVWcsdGhpcy5ob3Qucm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIkRJViIpKSxDMSh0aGlz'@;
put 'LEY5LG51bGwpLEMxKHRoaXMscEgsITEpLEMxKHRoaXMsb0EsMCksQzEodGhpcyxzQSxudWxsKSxDMSh0aGlzLGpoLHZvaWQgMCksQzEodGhpcyxsQSx2b2lkIDApLFRpKEVhKHFkLHRoaXMpLCJtYW51YWxDb2x1bW5SZXNpemVyIiksVGkoRWEoVWcsdGhpcyksIm1hbnVhbENvbHVtblJlc2l6'@;
put 'ZXJHdWlkZSIpfWdldCBpbmxpbmVEaXIoKXtyZXR1cm4gdGhpcy5ob3QuaXNSdGwoKT8icmlnaHQiOiJsZWZ0In1pc0VuYWJsZWQoKXtyZXR1cm4gdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVt1SF19ZW5hYmxlUGx1Z2luKCl7dmFyIGw9dGhpczt0aGlzLmVuYWJsZWR8fChkdShqaCx0aGlzLG5l'@;
put 'dyBabSksRWEoamgsdGhpcykuYWRkTG9jYWxIb29rKCJpbml0IiwoKT0+eTMoR3AsdGhpcyxYZnQpLmNhbGwodGhpcykpLHRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLnJlZ2lzdGVyTWFwKHRoaXMucGx1Z2luTmFtZSxFYShqaCx0aGlzKSksdGhpcy5hZGRIb29rKCJtb2RpZnlDb2xXaWR0'@;
put 'aCIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4geTMoR3AsbCxyM3QpLmNhbGwobCwuLi5kKX0sMSksdGhpcy5hZGRIb29rKCJiZWZvcmVTdHJldGNoaW5nQ29sdW1uV2lkdGgi'@;
put 'LGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIHkzKEdwLGwsaTN0KS5jYWxsKGwsLi4uZCl9LDEpLHRoaXMuYWRkSG9vaygiYmVmb3JlQ29sdW1uUmVzaXplIixmdW5jdGlvbigp'@;
put 'e2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiB5MyhHcCxsLGEzdCkuY2FsbChsLC4uLmQpfSksdGhpcy5iaW5kRXZlbnRzKCksc3VwZXIuZW5hYmxlUGx1Z2luKCkpfXVwZGF0ZVBsdWdpbigpe3Ro'@;
put 'aXMuZGlzYWJsZVBsdWdpbigpLHRoaXMuZW5hYmxlUGx1Z2luKCksc3VwZXIudXBkYXRlUGx1Z2luKCl9ZGlzYWJsZVBsdWdpbigpe2R1KGxBLHRoaXMsRWEoamgsdGhpcykuZ2V0VmFsdWVzKCkpLHRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLnVucmVnaXN0ZXJNYXAodGhpcy5wbHVnaW5O'@;
put 'YW1lKSxzdXBlci5kaXNhYmxlUGx1Z2luKCl9c2F2ZU1hbnVhbENvbHVtbldpZHRocygpe3RoaXMuaG90LnJ1bkhvb2tzKCJwZXJzaXN0ZW50U3RhdGVTYXZlIix1bWUsRWEoamgsdGhpcykuZ2V0VmFsdWVzKCkpfWxvYWRNYW51YWxDb2x1bW5XaWR0aHMoKXtjb25zdCBsPXt9O3JldHVybiB0'@;
put 'aGlzLmhvdC5ydW5Ib29rcygicGVyc2lzdGVudFN0YXRlTG9hZCIsdW1lLGwpLGwudmFsdWV9c2V0TWFudWFsU2l6ZShsLGEpe2NvbnN0IGQ9TWF0aC5tYXgoYSwyMCksaD10aGlzLmhvdC50b1BoeXNpY2FsQ29sdW1uKGwpO3JldHVybiBFYShqaCx0aGlzKS5zZXRWYWx1ZUF0SW5kZXgoaCxk'@;
put 'KSxkfWNsZWFyTWFudWFsU2l6ZShsKXtjb25zdCBhPXRoaXMuaG90LnRvUGh5c2ljYWxDb2x1bW4obCk7RWEoamgsdGhpcykuc2V0VmFsdWVBdEluZGV4KGEsbnVsbCl9c2V0dXBIYW5kbGVQb3NpdGlvbihsKXtpZighbC5wYXJlbnROb2RlKXJldHVybjtkdSh6Zyx0aGlzLGwpO2NvbnN0e193'@;
put 'dDphfT10aGlzLmhvdC52aWV3LGQ9YS53dFRhYmxlLmdldENvb3JkcyhFYSh6Zyx0aGlzKSksaD1kLmNvbDtpZihoPDApcmV0dXJuO2NvbnN0IGY9eHUoRWEoemcsdGhpcykpLHY9RWEoemcsdGhpcykuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7bGV0IEQ7aDxhLmdldFNldHRpbmcoImZpeGVk'@;
put 'Q29sdW1uc1N0YXJ0IikmJihEPWEud3RPdmVybGF5cy50b3BJbmxpbmVTdGFydENvcm5lck92ZXJsYXkuZ2V0UmVsYXRpdmVDZWxsUG9zaXRpb24oRWEoemcsdGhpcyksZC5yb3csZC5jb2wpKSxEfHwoRD1hLnd0T3ZlcmxheXMudG9wT3ZlcmxheS5nZXRSZWxhdGl2ZUNlbGxQb3NpdGlvbihF'@;
put 'YSh6Zyx0aGlzKSxkLnJvdyxkLmNvbCkpLGR1KGRILHRoaXMsdGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleChoKSksZHUoQmgsdGhpcyxbXSk7Y29uc3QgWj10aGlzLmhvdC5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Q29ybmVyKCl8fHRoaXMu'@;
put 'aG90LnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb2x1bW5IZWFkZXIoKTt0aGlzLmhvdC5zZWxlY3Rpb24uaXNTZWxlY3RlZCgpJiZaJiZZbih0aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlKCksY2U9PntHYShjZS5nZXRUb3BTdGFydENvcm5lcigpLmNvbCxjZS5nZXRCb3R0b21FbmRDb3JuZXIo'@;
put 'KS5jb2wsQmU9PntFYShCaCx0aGlzKS5pbmNsdWRlcyhCZSl8fEVhKEJoLHRoaXMpLnB1c2goQmUpfSl9KSxFYShCaCx0aGlzKS5pbmNsdWRlcyhFYShkSCx0aGlzKSl8fGR1KEJoLHRoaXMsW0VhKGRILHRoaXMpXSksZHUoZkgsdGhpcyxELnN0YXJ0LTYpLGR1KGR3LHRoaXMscGFyc2VJbnQo'@;
put 'di53aWR0aCwxMCkpLEVhKHFkLHRoaXMpLnN0eWxlLnRvcD1gJHtELnRvcH1weGAsRWEocWQsdGhpcykuc3R5bGVbdGhpcy5pbmxpbmVEaXJdPWAke0VhKGZILHRoaXMpK0VhKGR3LHRoaXMpfXB4YCxFYShxZCx0aGlzKS5zdHlsZS5oZWlnaHQ9YCR7Zn1weGAsdGhpcy5ob3Qucm9vdEVsZW1l'@;
put 'bnQuYXBwZW5kQ2hpbGQoRWEocWQsdGhpcykpfXJlZnJlc2hIYW5kbGVQb3NpdGlvbigpe0VhKHFkLHRoaXMpLnN0eWxlW3RoaXMuaW5saW5lRGlyXT1gJHtFYShmSCx0aGlzKStFYShoSCx0aGlzKX1weGB9c2V0dXBHdWlkZVBvc2l0aW9uKCl7Y29uc3QgbD1wYXJzZUludCh4dShFYShxZCx0'@;
put 'aGlzKSksMTApLGE9cGFyc2VJbnQoRWEocWQsdGhpcykuc3R5bGUudG9wLDEwKStsLGQ9dGhpcy5ob3Qudmlldy5nZXRUYWJsZUhlaWdodCgpO1RpKEVhKHFkLHRoaXMpLCJhY3RpdmUiKSxUaShFYShVZyx0aGlzKSwiYWN0aXZlIiksRWEoVWcsdGhpcykuc3R5bGUudG9wPWAke2F9cHhgLHRo'@;
put 'aXMucmVmcmVzaEd1aWRlUG9zaXRpb24oKSxFYShVZyx0aGlzKS5zdHlsZS5oZWlnaHQ9ZC1sKyJweCIsdGhpcy5ob3Qucm9vdEVsZW1lbnQuYXBwZW5kQ2hpbGQoRWEoVWcsdGhpcykpfXJlZnJlc2hHdWlkZVBvc2l0aW9uKCl7RWEoVWcsdGhpcykuc3R5bGVbdGhpcy5pbmxpbmVEaXJdPUVh'@;
put 'KHFkLHRoaXMpLnN0eWxlW3RoaXMuaW5saW5lRGlyXX1oaWRlSGFuZGxlQW5kR3VpZGUoKXtsbyhFYShxZCx0aGlzKSwiYWN0aXZlIiksbG8oRWEoVWcsdGhpcyksImFjdGl2ZSIpfWNoZWNrSWZDb2x1bW5IZWFkZXIobCl7Y29uc3QgYT1SbShsLFsiVEhFQUQiXSx0aGlzLmhvdC5yb290RWxl'@;
put 'bWVudCkse3RvcE92ZXJsYXk6ZCx0b3BJbmxpbmVTdGFydENvcm5lck92ZXJsYXk6aH09dGhpcy5ob3Qudmlldy5fd3Qud3RPdmVybGF5cztyZXR1cm5bZC5jbG9uZS53dFRhYmxlLlRIRUFELGguY2xvbmUud3RUYWJsZS5USEVBRF0uaW5jbHVkZXMoYSl9Z2V0Q2xvc2VzdFRIUGFyZW50KGwp'@;
put 'e3JldHVybiJUQUJMRSIhPT1sLnRhZ05hbWU/IlRIIj09PWwudGFnTmFtZT9sOnRoaXMuZ2V0Q2xvc2VzdFRIUGFyZW50KGwucGFyZW50Tm9kZSk6bnVsbH1hZnRlck1vdXNlRG93blRpbWVvdXQoKXtjb25zdCBsPSgpPT57dGhpcy5ob3QucmVuZGVyKCksdGhpcy5ob3Qudmlldy5hZGp1c3RF'@;
put 'bGVtZW50c1NpemUoKX0sYT0oZCxoKT0+e2NvbnN0IGY9dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZUNvbHVtblJlc2l6ZSIsRWEoWXAsdGhpcyksZCwhMCk7dm9pZCAwIT09ZiYmZHUoWXAsdGhpcyxmKSx0aGlzLnNldE1hbnVhbFNpemUoZCxFYShZcCx0aGlzKSksdGhpcy5zYXZlTWFudWFs'@;
put 'Q29sdW1uV2lkdGhzKCksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyQ29sdW1uUmVzaXplIixFYShZcCx0aGlzKSxkLCEwKSxoJiZsKCl9O0VhKG9BLHRoaXMpPj0yJiYoRWEoQmgsdGhpcykubGVuZ3RoPjE/KFluKEVhKEJoLHRoaXMpLGg9PnthKGgpfSksbCgpKTpZbihFYShCaCx0aGlzKSxo'@;
put 'PT57YShoLCEwKX0pKSxkdShvQSx0aGlzLDApLGR1KHNBLHRoaXMsbnVsbCl9YmluZEV2ZW50cygpe2NvbnN0e3Jvb3RXaW5kb3c6bCxyb290RWxlbWVudDphfT10aGlzLmhvdDt0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGEsIm1vdXNlb3ZlciIsZD0+eTMoR3AsdGhpcyxK'@;
put 'ZnQpLmNhbGwodGhpcyxkKSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihhLCJtb3VzZWRvd24iLGQ9PnkzKEdwLHRoaXMsUWZ0KS5jYWxsKHRoaXMsZCkpLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIobCwibW91c2Vtb3ZlIixkPT55MyhHcCx0aGlzLGUz'@;
put 'dCkuY2FsbCh0aGlzLGQpKSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGwsIm1vdXNldXAiLCgpPT55MyhHcCx0aGlzLHQzdCkuY2FsbCh0aGlzKSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihFYShxZCx0aGlzKSwiY29udGV4dG1lbnUiLCgpPT55MyhH'@;
put 'cCx0aGlzLG4zdCkuY2FsbCh0aGlzKSl9ZGVzdHJveSgpe3N1cGVyLmRlc3Ryb3koKX19ZnVuY3Rpb24gWGZ0KCl7Y29uc3QgYz10aGlzLmhvdC5nZXRTZXR0aW5ncygpW3VIXSxsPXRoaXMubG9hZE1hbnVhbENvbHVtbldpZHRocygpO3R5cGVvZiBsPCJ1Ij90aGlzLmhvdC5iYXRjaEV4ZWN1'@;
put 'dGlvbigoKT0+e2wuZm9yRWFjaCgoYSxkKT0+e0VhKGpoLHRoaXMpLnNldFZhbHVlQXRJbmRleChkLGEpfSl9LCEwKTpBcnJheS5pc0FycmF5KGMpPyh0aGlzLmhvdC5iYXRjaEV4ZWN1dGlvbigoKT0+e2MuZm9yRWFjaCgoYSxkKT0+e0VhKGpoLHRoaXMpLnNldFZhbHVlQXRJbmRleChkLGEp'@;
put 'fSl9LCEwKSxkdShsQSx0aGlzLGMpKTohMD09PWMmJkFycmF5LmlzQXJyYXkoRWEobEEsdGhpcykpJiZ0aGlzLmhvdC5iYXRjaEV4ZWN1dGlvbigoKT0+e0VhKGxBLHRoaXMpLmZvckVhY2goKGEsZCk9PntFYShqaCx0aGlzKS5zZXRWYWx1ZUF0SW5kZXgoZCxhKX0pfSwhMCl9ZnVuY3Rpb24g'@;
put 'SmZ0KGMpe2lmKCFBJChjLnRhcmdldCkmJiEwIT09RWEocEgsdGhpcykmJnRoaXMuY2hlY2tJZkNvbHVtbkhlYWRlcihjLnRhcmdldCkpe2NvbnN0IGw9dGhpcy5nZXRDbG9zZXN0VEhQYXJlbnQoYy50YXJnZXQpO2lmKCFsKXJldHVybjtjb25zdCBhPWwuZ2V0QXR0cmlidXRlKCJjb2xzcGFu'@;
put 'Iik7bCYmKG51bGw9PT1hfHwiMSI9PT1hKSYmKEVhKEY5LHRoaXMpfHx0aGlzLnNldHVwSGFuZGxlUG9zaXRpb24obCkpfX1mdW5jdGlvbiBRZnQoYyl7Yy50YXJnZXQucGFyZW50Tm9kZT09PXRoaXMuaG90LnJvb3RFbGVtZW50JiZwbyhjLnRhcmdldCwibWFudWFsQ29sdW1uUmVzaXplciIp'@;
put 'JiYodGhpcy5zZXR1cEhhbmRsZVBvc2l0aW9uKEVhKHpnLHRoaXMpKSx0aGlzLnNldHVwR3VpZGVQb3NpdGlvbigpLGR1KEY5LHRoaXMsITApLG51bGw9PT1FYShzQSx0aGlzKSYmKGR1KHNBLHRoaXMsc2V0VGltZW91dCgoKT0+dGhpcy5hZnRlck1vdXNlRG93blRpbWVvdXQoKSw1MDApKSx0'@;
put 'aGlzLmhvdC5fcmVnaXN0ZXJUaW1lb3V0KEVhKHNBLHRoaXMpKSksZHUob0EsdGhpcyxFYShvQSx0aGlzKSsxKSx0aGlzLnN0YXJ0WD1jLnBhZ2VYLGR1KFlwLHRoaXMsRWEoZHcsdGhpcykpKX1mdW5jdGlvbiBlM3QoYyl7aWYoRWEoRjksdGhpcykpe2NvbnN0IGw9KGMucGFnZVgtdGhpcy5z'@;
put 'dGFydFgpKnRoaXMuaG90LmdldERpcmVjdGlvbkZhY3RvcigpO2R1KGhILHRoaXMsRWEoZHcsdGhpcykrbCksWW4oRWEoQmgsdGhpcyksYT0+e2R1KFlwLHRoaXMsdGhpcy5zZXRNYW51YWxTaXplKGEsRWEoaEgsdGhpcykpKX0pLHRoaXMucmVmcmVzaEhhbmRsZVBvc2l0aW9uKCksdGhpcy5y'@;
put 'ZWZyZXNoR3VpZGVQb3NpdGlvbigpfX1mdW5jdGlvbiB0M3QoKXtjb25zdCBjPSgpPT57dGhpcy5ob3QucmVuZGVyKCksdGhpcy5ob3Qudmlldy5hZGp1c3RFbGVtZW50c1NpemUoKX0sbD0oYSxkKT0+e3RoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVDb2x1bW5SZXNpemUiLEVhKFlwLHRoaXMp'@;
put 'LGEsITEpLGQmJmMoKSx0aGlzLnNhdmVNYW51YWxDb2x1bW5XaWR0aHMoKSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJDb2x1bW5SZXNpemUiLEVhKFlwLHRoaXMpLGEsITEpfTtFYShGOSx0aGlzKSYmKHRoaXMuaGlkZUhhbmRsZUFuZEd1aWRlKCksZHUoRjksdGhpcywhMSksRWEoWXAsdGhp'@;
put 'cykhPT1FYShkdyx0aGlzKSYmKEVhKEJoLHRoaXMpLmxlbmd0aD4xPyhZbihFYShCaCx0aGlzKSxkPT57bChkKX0pLGMoKSk6WW4oRWEoQmgsdGhpcyksZD0+e2woZCwhMCl9KSksdGhpcy5zZXR1cEhhbmRsZVBvc2l0aW9uKEVhKHpnLHRoaXMpKSl9ZnVuY3Rpb24gbjN0KCl7dGhpcy5oaWRl'@;
put 'SGFuZGxlQW5kR3VpZGUoKSx0aGlzLmhvdC5yb290RWxlbWVudC5yZW1vdmVDaGlsZChFYShxZCx0aGlzKSksdGhpcy5ob3Qucm9vdEVsZW1lbnQucmVtb3ZlQ2hpbGQoRWEoVWcsdGhpcykpLGR1KEY5LHRoaXMsITEpLGR1KHBILHRoaXMsITApLHRoaXMuaG90Ll9yZWdpc3RlckltbWVkaWF0'@;
put 'ZSgoKT0+e2R1KHBILHRoaXMsITEpfSl9ZnVuY3Rpb24gcjN0KGMsbCl7bGV0IGE9YztpZih0aGlzLmVuYWJsZWQpe2NvbnN0IGQ9dGhpcy5ob3QudG9QaHlzaWNhbENvbHVtbihsKSxoPUVhKGpoLHRoaXMpLmdldFZhbHVlQXRJbmRleChkKTt0aGlzLmhvdC5nZXRTZXR0aW5ncygpW3VIXSYm'@;
put 'aCYmKGE9aCl9cmV0dXJuIGF9ZnVuY3Rpb24gaTN0KGMsbCl7Y29uc3QgYT1FYShqaCx0aGlzKS5nZXRWYWx1ZUF0SW5kZXgodGhpcy5ob3QudG9QaHlzaWNhbENvbHVtbihsKSk7cmV0dXJuIm51bWJlciI9PXR5cGVvZiBhP2E6Y31mdW5jdGlvbiBhM3QoKXt0aGlzLmhvdC52aWV3Ll93dC53'@;
put 'dFZpZXdwb3J0LnJlc2V0SGFzT3ZlcnNpemVkQ29sdW1uSGVhZGVyc01hcmtlZCgpfWZ1bmN0aW9uIHpRKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBvM3QoYyl7dmFyIGw9ZnVuY3Rpb24gczN0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJv'@;
put 'bC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4o'@;
put 'InN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpj'@;
put 'W2xdPWEsY31jb25zdCBodz0icHgiLGZtZT1jbGFzcyBsM3R7Y29uc3RydWN0b3IobCl7elEodGhpcywiaG90Iix2b2lkIDApLHpRKHRoaXMsIl9lbGVtZW50IixudWxsKSx6USh0aGlzLCJzdGF0ZSIsMCksdGhpcy5ob3Q9bH1hcHBlbmRUbyhsKXtsLmFwcGVuZENoaWxkKHRoaXMuX2VsZW1l'@;
put 'bnQpLHRoaXMuc3RhdGU9Mn1idWlsZCgpezA9PT10aGlzLnN0YXRlJiYodGhpcy5fZWxlbWVudD10aGlzLmhvdC5yb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksdGhpcy5zdGF0ZT0xKX1kZXN0cm95KCl7dGhpcy5pc0FwcGVuZGVkKCkmJnRoaXMuX2VsZW1lbnQucGFyZW50RWxl'@;
put 'bWVudC5yZW1vdmVDaGlsZCh0aGlzLl9lbGVtZW50KSx0aGlzLl9lbGVtZW50PW51bGwsdGhpcy5zdGF0ZT0wfWlzQXBwZW5kZWQoKXtyZXR1cm4gMj09PXRoaXMuc3RhdGV9aXNCdWlsdCgpe3JldHVybiB0aGlzLnN0YXRlPj0xfXNldFBvc2l0aW9uKGwsYSl7dm9pZCAwIT09bCYmKHRoaXMu'@;
put 'X2VsZW1lbnQuc3R5bGUudG9wPWwraHcpLHZvaWQgMCE9PWEmJih0aGlzLl9lbGVtZW50LnN0eWxlLmxlZnQ9YStodyl9Z2V0UG9zaXRpb24oKXtyZXR1cm57dG9wOnRoaXMuX2VsZW1lbnQuc3R5bGUudG9wP3BhcnNlSW50KHRoaXMuX2VsZW1lbnQuc3R5bGUudG9wLDEwKTowLGxlZnQ6dGhp'@;
put 'cy5fZWxlbWVudC5zdHlsZS5sZWZ0P3BhcnNlSW50KHRoaXMuX2VsZW1lbnQuc3R5bGUubGVmdCwxMCk6MH19c2V0U2l6ZShsLGEpe2wmJih0aGlzLl9lbGVtZW50LnN0eWxlLndpZHRoPWwraHcpLGEmJih0aGlzLl9lbGVtZW50LnN0eWxlLmhlaWdodD1hK2h3KX1nZXRTaXplKCl7cmV0dXJu'@;
put 'e3dpZHRoOnRoaXMuX2VsZW1lbnQuc3R5bGUud2lkdGg/cGFyc2VJbnQodGhpcy5fZWxlbWVudC5zdHlsZS53aWR0aCwxMCk6MCxoZWlnaHQ6dGhpcy5fZWxlbWVudC5zdHlsZS5oZWlnaHQ/cGFyc2VJbnQodGhpcy5fZWxlbWVudC5zdHlsZS5oZWlnaHQsMTApOjB9fXNldE9mZnNldChsLGEp'@;
put 'e2wmJih0aGlzLl9lbGVtZW50LnN0eWxlLm1hcmdpblRvcD1sK2h3KSxhJiYodGhpcy5fZWxlbWVudC5zdHlsZS5tYXJnaW5MZWZ0PWEraHcpfWdldE9mZnNldCgpe3JldHVybnt0b3A6dGhpcy5fZWxlbWVudC5zdHlsZS5tYXJnaW5Ub3A/cGFyc2VJbnQodGhpcy5fZWxlbWVudC5zdHlsZS5t'@;
put 'YXJnaW5Ub3AsMTApOjAsbGVmdDp0aGlzLl9lbGVtZW50LnN0eWxlLm1hcmdpbkxlZnQ/cGFyc2VJbnQodGhpcy5fZWxlbWVudC5zdHlsZS5tYXJnaW5MZWZ0LDEwKTowfX19LGQzdD1jbGFzcyB1M3QgZXh0ZW5kcyBmbWV7YnVpbGQoKXtzdXBlci5idWlsZCgpLFRpKHRoaXMuX2VsZW1lbnQs'@;
put 'Imh0X19tYW51YWxSb3dNb3ZlLS1iYWNrbGlnaHQiKX19LHAzdD1jbGFzcyBmM3QgZXh0ZW5kcyBmbWV7YnVpbGQoKXtzdXBlci5idWlsZCgpLFRpKHRoaXMuX2VsZW1lbnQsImh0X19tYW51YWxSb3dNb3ZlLS1ndWlkZWxpbmUiKX19O2Z1bmN0aW9uIGZ3KGMsbCxhKXtwbWUoYyxsKSxsLnNl'@;
put 'dChjLGEpfWZ1bmN0aW9uIHBtZShjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9ZnVuY3Rpb24gSDkoYyxsLGEpe3JldHVybiBjLnNldChtNihjLGwpLGEp'@;
put 'LGF9ZnVuY3Rpb24gRm8oYyxsKXtyZXR1cm4gYy5nZXQobTYoYyxsKSl9ZnVuY3Rpb24gbTYoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVu'@;
put 'dCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfVNhLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJiZWZvcmVSb3dNb3ZlIiksU2EuZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImFmdGVyUm93TW92ZSIpO2NvbnN0IFpRPSJtYW51YWxSb3dNb3ZlIixnbWU9Imh0X19tYW51YWxSb3dN'@;
put 'b3ZlIixnSD0ic2hvdy11aSIsV1E9Im9uLW1vdmluZy0tcm93cyIsWVE9ImFmdGVyLXNlbGVjdGlvbi0tcm93cyI7dmFyIHRkPW5ldyBXZWFrTWFwLHY2PW5ldyBXZWFrTWFwLFpnPW5ldyBXZWFrTWFwLGI2PW5ldyBXZWFrTWFwLFhkPW5ldyBXZWFrTWFwLG1IPW5ldyBXZWFrTWFwLE45PW5l'@;
put 'dyBXZWFrU2V0O2NsYXNzIHYzdCBleHRlbmRzIEZze2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSxmdW5jdGlvbiBnM3QoYyxsKXtwbWUoYyxsKSxsLmFkZChjKX0odGhpcyxOOSksZncodGhpcyx0ZCxuZXcgZDN0KHRoaXMuaG90KSksZncodGhpcyx2NixuZXcgcDN0KHRoaXMu'@;
put 'aG90KSksZncodGhpcyxaZyxbXSksZncodGhpcyxiNix2b2lkIDApLGZ3KHRoaXMsWGQse30pLGZ3KHRoaXMsbUgsdm9pZCAwKX1zdGF0aWMgZ2V0IFBMVUdJTl9LRVkoKXtyZXR1cm4gWlF9c3RhdGljIGdldCBQTFVHSU5fUFJJT1JJVFkoKXtyZXR1cm4gMTQwfWlzRW5hYmxlZCgpe3JldHVy'@;
put 'biEhdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtaUV19ZW5hYmxlUGx1Z2luKCl7dmFyIGw9dGhpczt0aGlzLmVuYWJsZWR8fCh0aGlzLmFkZEhvb2soImJlZm9yZU9uQ2VsbE1vdXNlRG93biIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7'@;
put 'aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4gbTYoTjksbCxiM3QpLmNhbGwobCwuLi5kKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlT25DZWxsTW91c2VPdmVyIixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRb'@;
put 'aF09YXJndW1lbnRzW2hdO3JldHVybiBtNihOOSxsLF8zdCkuY2FsbChsLC4uLmQpfSksdGhpcy5hZGRIb29rKCJhZnRlclNjcm9sbEhvcml6b250YWxseSIsKCk9Pm02KE45LHRoaXMsQzN0KS5jYWxsKHRoaXMpKSx0aGlzLmFkZEhvb2soImFmdGVyTG9hZERhdGEiLGZ1bmN0aW9uKCl7Zm9y'@;
put 'KHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIG02KE45LGwsUzN0KS5jYWxsKGwsLi4uZCl9KSx0aGlzLmJ1aWxkUGx1Z2luVUkoKSx0aGlzLnJlZ2lzdGVyRXZlbnRzKCksVGkodGhpcy5ob3Qucm9vdEVs'@;
put 'ZW1lbnQsZ21lKSxzdXBlci5lbmFibGVQbHVnaW4oKSl9dXBkYXRlUGx1Z2luKCl7dGhpcy5kaXNhYmxlUGx1Z2luKCksdGhpcy5lbmFibGVQbHVnaW4oKSx0aGlzLm1vdmVCeVNldHRpbmdzT3JMb2FkKCksc3VwZXIudXBkYXRlUGx1Z2luKCl9ZGlzYWJsZVBsdWdpbigpe2xvKHRoaXMuaG90'@;
put 'LnJvb3RFbGVtZW50LGdtZSksdGhpcy51bnJlZ2lzdGVyRXZlbnRzKCksRm8odGQsdGhpcykuZGVzdHJveSgpLEZvKHY2LHRoaXMpLmRlc3Ryb3koKSxzdXBlci5kaXNhYmxlUGx1Z2luKCl9bW92ZVJvdyhsLGEpe3JldHVybiB0aGlzLm1vdmVSb3dzKFtsXSxhKX1tb3ZlUm93cyhsLGEpe2Nv'@;
put 'bnN0IGQ9Rm8obUgsdGhpcyksaD10aGlzLmlzTW92ZVBvc3NpYmxlKGwsYSksZj10aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlUm93TW92ZSIsbCxhLGQsaCk7aWYoSDkobUgsdGhpcyx2b2lkIDApLCExPT09ZilyZXR1cm47aCYmdGhpcy5ob3Qucm93SW5kZXhNYXBwZXIubW92ZUluZGV4ZXMo'@;
put 'bCxhKTtjb25zdCB2PWgmJnRoaXMuaXNSb3dPcmRlckNoYW5nZWQobCxhKTtyZXR1cm4gdGhpcy5ob3QucnVuSG9va3MoImFmdGVyUm93TW92ZSIsbCxhLGQsaCx2KSx2fWRyYWdSb3cobCxhKXtyZXR1cm4gdGhpcy5kcmFnUm93cyhbbF0sYSl9ZHJhZ1Jvd3MobCxhKXtjb25zdCBkPXRoaXMu'@;
put 'Y291bnRGaW5hbEluZGV4KGwsYSk7cmV0dXJuIEg5KG1ILHRoaXMsYSksdGhpcy5tb3ZlUm93cyhsLGQpfWlzTW92ZVBvc3NpYmxlKGwsYSl7Y29uc3QgZD10aGlzLmhvdC5yb3dJbmRleE1hcHBlci5nZXROb3RUcmltbWVkSW5kZXhlc0xlbmd0aCgpLGg9bC5sZW5ndGgrYT5kLGY9YTwwLHY9'@;
put 'bC5zb21lKEQ9PkQ8MCksTT1sLnNvbWUoRD0+RD49ZCk7cmV0dXJuIShofHxmfHx2fHxNKX1pc1Jvd09yZGVyQ2hhbmdlZChsLGEpe3JldHVybiBsLnNvbWUoKGQsaCk9PmQtaCE9PWEpfWNvdW50RmluYWxJbmRleChsLGEpe2NvbnN0IGQ9cXUobCwoaCxmKT0+KGY8YSYmKGgrPTEpLGgpLDAp'@;
put 'O3JldHVybiBhLWR9Z2V0Um93c0hlaWdodChsLGEpe2NvbnN0IGQ9dGhpcy5ob3Qucm93SW5kZXhNYXBwZXI7bGV0IGg9MDtmb3IobGV0IGY9bDtmPD1hO2YrKyl7Y29uc3Qgdj1kLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoZik7bnVsbCE9PXYmJihoKz10aGlzLmhvdC52aWV3Ll93'@;
put 'dC53dFRhYmxlLmdldFJvd0hlaWdodCh2KXx8dGhpcy5ob3Qudmlldy5nZXREZWZhdWx0Um93SGVpZ2h0KCkpfXJldHVybiBofW1vdmVCeVNldHRpbmdzT3JMb2FkKCl7Y29uc3QgbD10aGlzLmhvdC5nZXRTZXR0aW5ncygpW1pRXTtpZihBcnJheS5pc0FycmF5KGwpKXRoaXMubW92ZVJvd3Mo'@;
put 'bCwwKTtlbHNlIGlmKHZvaWQgMCE9PWwpe2NvbnN0IGE9dGhpcy5wZXJzaXN0ZW50U3RhdGVMb2FkKCk7YS5sZW5ndGgmJnRoaXMubW92ZVJvd3MoYSwwKX19aXNGaXhlZFJvd1RvcChsKXtyZXR1cm4gbDx0aGlzLmhvdC5nZXRTZXR0aW5ncygpLmZpeGVkUm93c1RvcH1pc0ZpeGVkUm93Qm90'@;
put 'dG9tKGwpe3JldHVybiBsPnRoaXMuaG90LmNvdW50Um93cygpLTEtdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5maXhlZFJvd3NCb3R0b219cGVyc2lzdGVudFN0YXRlU2F2ZSgpe3RoaXMuaG90LnJ1bkhvb2tzKCJwZXJzaXN0ZW50U3RhdGVTYXZlIiwibWFudWFsUm93TW92ZSIsdGhpcy5ob3Qu'@;
put 'cm93SW5kZXhNYXBwZXIuZ2V0SW5kZXhlc1NlcXVlbmNlKCkpfXBlcnNpc3RlbnRTdGF0ZUxvYWQoKXtjb25zdCBsPXt9O3JldHVybiB0aGlzLmhvdC5ydW5Ib29rcygicGVyc2lzdGVudFN0YXRlTG9hZCIsIm1hbnVhbFJvd01vdmUiLGwpLGwudmFsdWU/bC52YWx1ZTpbXX1wcmVwYXJlUm93'@;
put 'c1RvTW92aW5nKCl7Y29uc3QgbD10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLGE9W107aWYoIWwpcmV0dXJuIGE7Y29uc3R7ZnJvbTpkLHRvOmh9PWw7cmV0dXJuIEdhKE1hdGgubWluKGQucm93LGgucm93KSxNYXRoLm1heChkLnJvdyxoLnJvdyksTT0+e2EucHVzaChNKX0pLGF9'@;
put 'cmVmcmVzaFBvc2l0aW9ucygpe2NvbnN0IGw9Rm8oWGQsdGhpcykuY29vcmRzLGE9dGhpcy5ob3QuZ2V0Rmlyc3RGdWxseVZpc2libGVSb3coKSxkPXRoaXMuaG90LmdldExhc3RGdWxseVZpc2libGVSb3coKSxoPXRoaXMuaG90LmNvdW50Um93cygpO3RoaXMuaXNGaXhlZFJvd1RvcChsLnJv'@;
put 'dykmJmE+MCYmdGhpcy5ob3Quc2Nyb2xsVmlld3BvcnRUbyh0aGlzLmhvdC5yb3dJbmRleE1hcHBlci5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoYS0xLC0xKSksdGhpcy5pc0ZpeGVkUm93Qm90dG9tKGwucm93KSYmZDxoJiZ0aGlzLmhvdC5zY3JvbGxWaWV3cG9ydFRvKHRoaXMuaG90LnJv'@;
put 'd0luZGV4TWFwcGVyLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChkKzEsMSksdm9pZCAwLCEwKTtjb25zdCBmPXRoaXMuaG90LnZpZXcuX3d0Lnd0VGFibGUsdj1GbyhYZCx0aGlzKS5URCxNPXRoaXMuaG90LnJvb3RFbGVtZW50LEQ9VTAoTSksWj1hXyhNKSxyZT1mLmhvbGRlci5zY3JvbGxU'@;
put 'b3AsYmU9RC50b3AtKHRoaXMuaG90LnJvb3RXaW5kb3chPT1aP1ouc2Nyb2xsVG9wOjApLEVlPUZvKFhkLHRoaXMpLmV2ZW50UGFnZVktYmUrcmUsQmU9Zi5oaWRlci5vZmZzZXRIZWlnaHQscWU9Zi5UQk9EWS5vZmZzZXRUb3AscnQ9Rm8odGQsdGhpcykuZ2V0T2Zmc2V0KCkudG9wLHB0PUZv'@;
put 'KHRkLHRoaXMpLmdldFNpemUoKS5oZWlnaHQsZHQ9di5vZmZzZXRIZWlnaHQvMixKdD12Lm9mZnNldEhlaWdodDtsZXQgdm49dGhpcy5ob3Qudmlldy5USEVBRC5vZmZzZXRIZWlnaHQrdGhpcy5nZXRSb3dzSGVpZ2h0KDAsbC5yb3ctMSk7Y29uc3QgQ249RWU+PXZuK2R0O3RoaXMuaXNGaXhl'@;
put 'ZFJvd1RvcChsLnJvdykmJih2bis9dGhpcy5ob3Qudmlldy5fd3Qud3RPdmVybGF5cy50b3BPdmVybGF5LmdldE92ZXJsYXlPZmZzZXQoKSksbC5yb3c8MD9GbyhYZCx0aGlzKS5yb3c9YT4wP2EtMTphOkNuPyhGbyhYZCx0aGlzKS5yb3c9bC5yb3crMSx2bis9MD09PWwucm93P0p0LTE6SnQp'@;
put 'OkZvKFhkLHRoaXMpLnJvdz1sLnJvdztsZXQgdG49RWUsTW49dm47RWUrcHQrcnQ+PUJlP3RuPUJlLXB0LXJ0OkVlK3J0PHFlJiYodG49cWUrTWF0aC5hYnMocnQpKSx2bj49QmUtMSYmKE1uPUJlLTEpLEZvKHRkLHRoaXMpLnNldFBvc2l0aW9uKHRuKSxGbyh2Nix0aGlzKS5zZXRQb3NpdGlv'@;
put 'bihNbil9cmVnaXN0ZXJFdmVudHMoKXtjb25zdHtkb2N1bWVudEVsZW1lbnQ6bH09dGhpcy5ob3Qucm9vdERvY3VtZW50O3RoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIobCwibW91c2Vtb3ZlIixhPT5tNihOOSx0aGlzLHkzdCkuY2FsbCh0aGlzLGEpKSx0aGlzLmV2ZW50TWFu'@;
put 'YWdlci5hZGRFdmVudExpc3RlbmVyKGwsIm1vdXNldXAiLCgpPT5tNihOOSx0aGlzLHczdCkuY2FsbCh0aGlzKSl9dW5yZWdpc3RlckV2ZW50cygpe3RoaXMuZXZlbnRNYW5hZ2VyLmNsZWFyKCl9YnVpbGRQbHVnaW5VSSgpe0ZvKHRkLHRoaXMpLmJ1aWxkKCksRm8odjYsdGhpcykuYnVpbGQo'@;
put 'KX1kZXN0cm95KCl7Rm8odGQsdGhpcykuZGVzdHJveSgpLEZvKHY2LHRoaXMpLmRlc3Ryb3koKSxzdXBlci5kZXN0cm95KCl9fWZ1bmN0aW9uIGIzdChjLGwsYSxkKXtjb25zdHt3dFRhYmxlOmgsd3RWaWV3cG9ydDpmfT10aGlzLmhvdC52aWV3Ll93dCx2PXRoaXMuaG90LnNlbGVjdGlvbi5p'@;
put 'c1NlbGVjdGVkQnlSb3dIZWFkZXIoKSxNPXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCk7aWYoIU18fCF2fHxGbyhiNix0aGlzKXx8MCE9PWMuYnV0dG9uKXJldHVybiBIOShiNix0aGlzLCExKSxGbyhaZyx0aGlzKS5sZW5ndGg9MCx2b2lkIGxvKHRoaXMuaG90LnJvb3RFbGVtZW50'@;
put 'LFtXUSxnSF0pO2NvbnN0IEQ9Rm8odjYsdGhpcykuaXNCdWlsdCgpJiYhRm8odjYsdGhpcykuaXNBcHBlbmRlZCgpLFo9Rm8odGQsdGhpcykuaXNCdWlsdCgpJiYhRm8odGQsdGhpcykuaXNBcHBlbmRlZCgpO0QmJlomJihGbyh2Nix0aGlzKS5hcHBlbmRUbyhoLmhpZGVyKSxGbyh0ZCx0aGlz'@;
put 'KS5hcHBlbmRUbyhoLmhpZGVyKSk7Y29uc3R7ZnJvbTpyZSx0bzpjZX09TSxiZT1NYXRoLm1pbihyZS5yb3csY2Uucm93KSxFZT1NYXRoLm1heChyZS5yb3csY2Uucm93KTtpZihsLmNvbDwwJiZsLnJvdz49YmUmJmwucm93PD1FZSl7ZC5yb3c9ITAsSDkoYjYsdGhpcywhMCksRm8oWGQsdGhp'@;
put 'cykuZXZlbnRQYWdlWT1jLnBhZ2VZLEZvKFhkLHRoaXMpLmNvb3Jkcz1sLEZvKFhkLHRoaXMpLlREPWEsSDkoWmcsdGhpcyx0aGlzLnByZXBhcmVSb3dzVG9Nb3ZpbmcoKSk7Y29uc3QgQmU9aC5ob2xkZXIuc2Nyb2xsTGVmdCtmLmdldFJvd0hlYWRlcldpZHRoKCkscWU9dGhpcy5nZXRSb3dz'@;
put 'SGVpZ2h0KGJlLGwucm93LTEpKyhjLmNsaWVudFktYS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3ApO0ZvKHRkLHRoaXMpLnNldFBvc2l0aW9uKG51bGwsQmUpLEZvKHRkLHRoaXMpLnNldFNpemUoaC5oaWRlci5vZmZzZXRXaWR0aC1CZSx0aGlzLmdldFJvd3NIZWlnaHQoYmUsRWUpKSxG'@;
put 'byh0ZCx0aGlzKS5zZXRPZmZzZXQoLXFlLG51bGwpLFRpKHRoaXMuaG90LnJvb3RFbGVtZW50LFdRKSx0aGlzLnJlZnJlc2hQb3NpdGlvbnMoKX1lbHNlIGxvKHRoaXMuaG90LnJvb3RFbGVtZW50LFlRKSxIOShiNix0aGlzLCExKSxGbyhaZyx0aGlzKS5sZW5ndGg9MH1mdW5jdGlvbiB5M3Qo'@;
put 'Yyl7Rm8oYjYsdGhpcykmJihGbyhYZCx0aGlzKS5ldmVudFBhZ2VZPWMucGFnZVksdGhpcy5yZWZyZXNoUG9zaXRpb25zKCkpfWZ1bmN0aW9uIF8zdChjLGwsYSxkKXshdGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKXx8IUZvKGI2LHRoaXMpfHwoRm8oWmcsdGhpcykuaW5kZXhPZihs'@;
put 'LnJvdyk+LTE/bG8odGhpcy5ob3Qucm9vdEVsZW1lbnQsZ0gpOlRpKHRoaXMuaG90LnJvb3RFbGVtZW50LGdIKSxkLnJvdz0hMCxkLmNvbHVtbj0hMCxkLmNlbGw9ITAsRm8oWGQsdGhpcykuY29vcmRzPWwsRm8oWGQsdGhpcykuVEQ9YSl9ZnVuY3Rpb24gdzN0KCl7Y29uc3QgYz1GbyhYZCx0'@;
put 'aGlzKS5yb3csbD1GbyhaZyx0aGlzKS5sZW5ndGg7aWYoSDkoYjYsdGhpcywhMSksbG8odGhpcy5ob3Qucm9vdEVsZW1lbnQsW1dRLGdILFlRXSksdGhpcy5ob3Quc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeVJvd0hlYWRlcigpJiZUaSh0aGlzLmhvdC5yb290RWxlbWVudCxZUSksbDwxfHx2b2lk'@;
put 'IDA9PT1jKXJldHVybjtjb25zdCBhPUZvKFpnLHRoaXMpWzBdLGQ9dGhpcy5ob3QudG9QaHlzaWNhbFJvdyhhKSxoPXRoaXMuZHJhZ1Jvd3MoRm8oWmcsdGhpcyksYyk7aWYoRm8oWmcsdGhpcykubGVuZ3RoPTAsITA9PT1oKXt0aGlzLnBlcnNpc3RlbnRTdGF0ZVNhdmUoKSx0aGlzLmhvdC5y'@;
put 'ZW5kZXIoKSx0aGlzLmhvdC52aWV3LmFkanVzdEVsZW1lbnRzU2l6ZSgpO2NvbnN0IGY9dGhpcy5ob3QudG9WaXN1YWxSb3coZCk7dGhpcy5ob3Quc2VsZWN0Um93cyhmLGYrbC0xKX19ZnVuY3Rpb24gQzN0KCl7Y29uc3QgYz10aGlzLmhvdC52aWV3Ll93dC53dFRhYmxlLGQ9dGhpcy5ob3Qu'@;
put 'dmlldy5fd3Qud3RWaWV3cG9ydC5nZXRSb3dIZWFkZXJXaWR0aCgpK2MuaG9sZGVyLnNjcm9sbExlZnQ7Rm8odGQsdGhpcykuc2V0UG9zaXRpb24obnVsbCxkKSxGbyh0ZCx0aGlzKS5zZXRTaXplKGMuaGlkZXIub2Zmc2V0V2lkdGgtZCl9ZnVuY3Rpb24gUzN0KCl7dGhpcy5tb3ZlQnlTZXR0'@;
put 'aW5nc09yTG9hZCgpfWZ1bmN0aW9uIFMxKGMsbCxhKXttbWUoYyxsKSxsLnNldChjLGEpfWZ1bmN0aW9uIG1tZShjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0'@;
put 'Iil9ZnVuY3Rpb24gS2MoYyxsLGEpe3JldHVybiBjLnNldChXZyhjLGwpLGEpLGF9ZnVuY3Rpb24gTWEoYyxsKXtyZXR1cm4gYy5nZXQoV2coYyxsKSl9ZnVuY3Rpb24gV2coYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVu'@;
put 'Z3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfWNvbnN0IHZIPSJtYW51YWxSb3dSZXNpemUiLHZtZT0ibWFudWFsUm93SGVpZ2h0cyI7dmFyICRwPW5ldyBXZWFrTWFwLGJIPW5ldyBXZWFrTWFwLHpo'@;
put 'PW5ldyBXZWFrTWFwLGNBPW5ldyBXZWFrTWFwLHk2PW5ldyBXZWFrTWFwLEdRPW5ldyBXZWFrTWFwLHB3PW5ldyBXZWFrTWFwLHlIPW5ldyBXZWFrTWFwLG5kPW5ldyBXZWFrTWFwLEtwPW5ldyBXZWFrTWFwLFY5PW5ldyBXZWFrTWFwLF9IPW5ldyBXZWFrTWFwLHVBPW5ldyBXZWFrTWFwLGRB'@;
put 'PW5ldyBXZWFrTWFwLF8zPW5ldyBXZWFrTWFwLGhBPW5ldyBXZWFrTWFwLF82PW5ldyBXZWFrU2V0O2NsYXNzIEUzdCBleHRlbmRzIEZze3N0YXRpYyBnZXQgUExVR0lOX0tFWSgpe3JldHVybiB2SH1zdGF0aWMgZ2V0IFBMVUdJTl9QUklPUklUWSgpe3JldHVybiAzMH1jb25zdHJ1Y3Rvcihs'@;
put 'KXtzdXBlcihsKSxmdW5jdGlvbiBNM3QoYyxsKXttbWUoYyxsKSxsLmFkZChjKX0odGhpcyxfNiksUzEodGhpcywkcCxudWxsKSxTMSh0aGlzLGJILG51bGwpLFMxKHRoaXMsemgsW10pLFMxKHRoaXMsY0EsbnVsbCksUzEodGhpcyx5NixudWxsKSxTMSh0aGlzLEdRLG51bGwpLFMxKHRoaXMs'@;
put 'cHcsbnVsbCksUzEodGhpcyx5SCxudWxsKSxTMSh0aGlzLG5kLHRoaXMuaG90LnJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50KCJESVYiKSksUzEodGhpcyxLcCx0aGlzLmhvdC5yb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiRElWIikpLFMxKHRoaXMsVjksITEpLFMxKHRoaXMsX0gsITEp'@;
put 'LFMxKHRoaXMsdUEsMCksUzEodGhpcyxkQSxudWxsKSxTMSh0aGlzLF8zLHZvaWQgMCksUzEodGhpcyxoQSx2b2lkIDApLFRpKE1hKG5kLHRoaXMpLCJtYW51YWxSb3dSZXNpemVyIiksVGkoTWEoS3AsdGhpcyksIm1hbnVhbFJvd1Jlc2l6ZXJHdWlkZSIpfWdldCBpbmxpbmVEaXIoKXtyZXR1'@;
put 'cm4gdGhpcy5ob3QuaXNSdGwoKT8icmlnaHQiOiJsZWZ0In1pc0VuYWJsZWQoKXtyZXR1cm4gdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVt2SF19ZW5hYmxlUGx1Z2luKCl7dGhpcy5lbmFibGVkfHwoS2MoXzMsdGhpcyxuZXcgWm0pLE1hKF8zLHRoaXMpLmFkZExvY2FsSG9vaygiaW5pdCIsKCk9'@;
put 'PldnKF82LHRoaXMsTDN0KS5jYWxsKHRoaXMpKSx0aGlzLmhvdC5yb3dJbmRleE1hcHBlci5yZWdpc3Rlck1hcCh0aGlzLnBsdWdpbk5hbWUsTWEoXzMsdGhpcykpLHRoaXMuYWRkSG9vaygibW9kaWZ5Um93SGVpZ2h0IiwobCxhKT0+V2coXzYsdGhpcyxSM3QpLmNhbGwodGhpcyxsLGEpKSx0'@;
put 'aGlzLmJpbmRFdmVudHMoKSxzdXBlci5lbmFibGVQbHVnaW4oKSl9dXBkYXRlUGx1Z2luKCl7dGhpcy5kaXNhYmxlUGx1Z2luKCksdGhpcy5lbmFibGVQbHVnaW4oKSxzdXBlci51cGRhdGVQbHVnaW4oKX1kaXNhYmxlUGx1Z2luKCl7S2MoaEEsdGhpcyxNYShfMyx0aGlzKS5nZXRWYWx1ZXMo'@;
put 'KSksdGhpcy5ob3Qucm93SW5kZXhNYXBwZXIudW5yZWdpc3Rlck1hcCh0aGlzLnBsdWdpbk5hbWUpLHN1cGVyLmRpc2FibGVQbHVnaW4oKX1zYXZlTWFudWFsUm93SGVpZ2h0cygpe3RoaXMuaG90LnJ1bkhvb2tzKCJwZXJzaXN0ZW50U3RhdGVTYXZlIix2bWUsTWEoXzMsdGhpcykuZ2V0VmFs'@;
put 'dWVzKCkpfWxvYWRNYW51YWxSb3dIZWlnaHRzKCl7Y29uc3QgbD17fTtyZXR1cm4gdGhpcy5ob3QucnVuSG9va3MoInBlcnNpc3RlbnRTdGF0ZUxvYWQiLHZtZSxsKSxsLnZhbHVlfXNldE1hbnVhbFNpemUobCxhKXtjb25zdCBkPXRoaXMuaG90LnRvUGh5c2ljYWxSb3cobCksaD1NYXRoLm1h'@;
put 'eChhLHRoaXMuaG90LnZpZXcuZ2V0RGVmYXVsdFJvd0hlaWdodCgpKTtyZXR1cm4gTWEoXzMsdGhpcykuc2V0VmFsdWVBdEluZGV4KGQsaCksaH1nZXRMYXN0RGVzaXJlZFJvd0hlaWdodCgpe3JldHVybiBNYShjQSx0aGlzKX1zZXR1cEhhbmRsZVBvc2l0aW9uKGwpe0tjKCRwLHRoaXMsbCk7'@;
put 'Y29uc3R7dmlldzphfT10aGlzLmhvdCx7X3d0OmR9PWEsaD1kLnd0VGFibGUuZ2V0Q29vcmRzKE1hKCRwLHRoaXMpKSxmPWgucm93O2lmKGY8MClyZXR1cm47Y29uc3Qgdj1zdShNYSgkcCx0aGlzKSksTT1NYSgkcCx0aGlzKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxEPWY8ZC5nZXRTZXR0'@;
put 'aW5nKCJmaXhlZFJvd3NUb3AiKSxaPWY+PWEuY291bnROb3RIaWRkZW5Sb3dJbmRleGVzKDAsMSktZC5nZXRTZXR0aW5nKCJmaXhlZFJvd3NCb3R0b20iKTtsZXQgcmU7RD9yZT1kLnd0T3ZlcmxheXMudG9wSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5LmdldFJlbGF0aXZlQ2VsbFBvc2l0aW9u'@;
put 'KE1hKCRwLHRoaXMpLGgucm93LGguY29sKTpaJiYocmU9ZC53dE92ZXJsYXlzLmJvdHRvbUlubGluZVN0YXJ0Q29ybmVyT3ZlcmxheS5nZXRSZWxhdGl2ZUNlbGxQb3NpdGlvbihNYSgkcCx0aGlzKSxoLnJvdyxoLmNvbCkpLHJlfHwocmU9ZC53dE92ZXJsYXlzLmlubGluZVN0YXJ0T3Zlcmxh'@;
put 'eS5nZXRSZWxhdGl2ZUNlbGxQb3NpdGlvbihNYSgkcCx0aGlzKSxoLnJvdyxoLmNvbCkpLEtjKGJILHRoaXMsdGhpcy5ob3Qucm93SW5kZXhNYXBwZXIuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleChmKSksS2MoemgsdGhpcyxbXSk7Y29uc3QgY2U9dGhpcy5ob3Quc2VsZWN0aW9uLmlz'@;
put 'U2VsZWN0ZWRCeUNvcm5lcigpfHx0aGlzLmhvdC5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Um93SGVhZGVyKCk7dGhpcy5ob3Quc2VsZWN0aW9uLmlzU2VsZWN0ZWQoKSYmY2UmJlluKHRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2UoKSxFZT0+e0dhKEVlLmdldFRvcFN0YXJ0Q29ybmVyKCkucm93'@;
put 'LEVlLmdldEJvdHRvbVN0YXJ0Q29ybmVyKCkucm93LHJ0PT57TWEoemgsdGhpcykuaW5jbHVkZXMocnQpfHxNYSh6aCx0aGlzKS5wdXNoKHJ0KX0pfSksTWEoemgsdGhpcykuaW5jbHVkZXMoTWEoYkgsdGhpcykpfHxLYyh6aCx0aGlzLFtNYShiSCx0aGlzKV0pLEtjKHlILHRoaXMscmUudG9w'@;
put 'LTYpLEtjKHB3LHRoaXMscGFyc2VJbnQoTS5oZWlnaHQsMTApKSxNYShuZCx0aGlzKS5zdHlsZS50b3A9YCR7TWEoeUgsdGhpcykrTWEocHcsdGhpcyl9cHhgLE1hKG5kLHRoaXMpLnN0eWxlW3RoaXMuaW5saW5lRGlyXT1gJHtyZS5zdGFydH1weGAsTWEobmQsdGhpcykuc3R5bGUud2lkdGg9'@;
put 'YCR7dn1weGAsdGhpcy5ob3Qucm9vdEVsZW1lbnQuYXBwZW5kQ2hpbGQoTWEobmQsdGhpcykpfXJlZnJlc2hIYW5kbGVQb3NpdGlvbigpe01hKG5kLHRoaXMpLnN0eWxlLnRvcD1gJHtNYSh5SCx0aGlzKStNYShjQSx0aGlzKX1weGB9c2V0dXBHdWlkZVBvc2l0aW9uKCl7Y29uc3QgbD1wYXJz'@;
put 'ZUludChzdShNYShuZCx0aGlzKSksMTApLGE9cGFyc2VJbnQoTWEobmQsdGhpcykuc3R5bGVbdGhpcy5pbmxpbmVEaXJdLDEwKStsLGQ9dGhpcy5ob3Qudmlldy5nZXRUYWJsZVdpZHRoKCk7VGkoTWEobmQsdGhpcyksImFjdGl2ZSIpLFRpKE1hKEtwLHRoaXMpLCJhY3RpdmUiKSxNYShLcCx0'@;
put 'aGlzKS5zdHlsZS50b3A9TWEobmQsdGhpcykuc3R5bGUudG9wLE1hKEtwLHRoaXMpLnN0eWxlW3RoaXMuaW5saW5lRGlyXT1gJHthfXB4YCxNYShLcCx0aGlzKS5zdHlsZS53aWR0aD1kLWwrInB4Iix0aGlzLmhvdC5yb290RWxlbWVudC5hcHBlbmRDaGlsZChNYShLcCx0aGlzKSl9cmVmcmVz'@;
put 'aEd1aWRlUG9zaXRpb24oKXtNYShLcCx0aGlzKS5zdHlsZS50b3A9TWEobmQsdGhpcykuc3R5bGUudG9wfWhpZGVIYW5kbGVBbmRHdWlkZSgpe2xvKE1hKG5kLHRoaXMpLCJhY3RpdmUiKSxsbyhNYShLcCx0aGlzKSwiYWN0aXZlIil9Y2hlY2tJZlJvd0hlYWRlcihsKXtjb25zdCBhPVJtKGws'@;
put 'WyJUQk9EWSJdLHRoaXMuaG90LnJvb3RFbGVtZW50KSx7aW5saW5lU3RhcnRPdmVybGF5OmQsdG9wSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5OmgsYm90dG9tSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5OmZ9PXRoaXMuaG90LnZpZXcuX3d0Lnd0T3ZlcmxheXM7cmV0dXJuW2QuY2xvbmUud3RU'@;
put 'YWJsZS5UQk9EWSxoLmNsb25lLnd0VGFibGUuVEJPRFksZi5jbG9uZS53dFRhYmxlLlRCT0RZXS5pbmNsdWRlcyhhKX1nZXRDbG9zZXN0VEhQYXJlbnQobCl7cmV0dXJuIlRBQkxFIiE9PWwudGFnTmFtZT8iVEgiPT09bC50YWdOYW1lP2w6dGhpcy5nZXRDbG9zZXN0VEhQYXJlbnQobC5wYXJl'@;
put 'bnROb2RlKTpudWxsfWdldEFjdHVhbFJvd0hlaWdodChsKXtjb25zdCBhPXRoaXMuaG90LnZpZXcuX3d0Lnd0VGFibGUuZ2V0Um93SGVpZ2h0KGwpO3JldHVybiB2b2lkIDAhPT1hJiZNYSh5Nix0aGlzKTxhP2E6TWEoeTYsdGhpcyl9YWZ0ZXJNb3VzZURvd25UaW1lb3V0KCl7Y29uc3QgbD0o'@;
put 'KT0+e3RoaXMuaG90LnJlbmRlcigpLHRoaXMuaG90LnZpZXcuYWRqdXN0RWxlbWVudHNTaXplKCl9LGE9KGQsaCk9Pntjb25zdCBmPXRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVSb3dSZXNpemUiLHRoaXMuZ2V0QWN0dWFsUm93SGVpZ2h0KGQpLGQsITApO3ZvaWQgMCE9PWYmJktjKHk2LHRo'@;
put 'aXMsZiksdGhpcy5zZXRNYW51YWxTaXplKGQsTWEoeTYsdGhpcykpLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlclJvd1Jlc2l6ZSIsdGhpcy5nZXRBY3R1YWxSb3dIZWlnaHQoZCksZCwhMCksaCYmbCgpfTtNYSh1QSx0aGlzKT49MiYmKE1hKHpoLHRoaXMpLmxlbmd0aD4xPyhZbihNYSh6aCx0'@;
put 'aGlzKSxoPT57YShoKX0pLGwoKSk6WW4oTWEoemgsdGhpcyksaD0+e2EoaCwhMCl9KSksS2ModUEsdGhpcywwKSxLYyhkQSx0aGlzLG51bGwpfWJpbmRFdmVudHMoKXtjb25zdHtyb290RWxlbWVudDpsLHJvb3RXaW5kb3c6YX09dGhpcy5ob3Q7dGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRM'@;
put 'aXN0ZW5lcihsLCJtb3VzZW92ZXIiLGQ9PldnKF82LHRoaXMsVDN0KS5jYWxsKHRoaXMsZCkpLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIobCwibW91c2Vkb3duIixkPT5XZyhfNix0aGlzLEEzdCkuY2FsbCh0aGlzLGQpKSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExp'@;
put 'c3RlbmVyKGEsIm1vdXNlbW92ZSIsZD0+V2coXzYsdGhpcyxrM3QpLmNhbGwodGhpcyxkKSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihhLCJtb3VzZXVwIiwoKT0+V2coXzYsdGhpcyxEM3QpLmNhbGwodGhpcykpLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVu'@;
put 'ZXIoTWEobmQsdGhpcyksImNvbnRleHRtZW51IiwoKT0+V2coXzYsdGhpcyxJM3QpLmNhbGwodGhpcykpfWRlc3Ryb3koKXtzdXBlci5kZXN0cm95KCl9fWZ1bmN0aW9uIFQzdChjKXtpZighQSQoYy50YXJnZXQpJiYhMCE9PU1hKF9ILHRoaXMpJiZ0aGlzLmNoZWNrSWZSb3dIZWFkZXIoYy50'@;
put 'YXJnZXQpKXtjb25zdCBsPXRoaXMuZ2V0Q2xvc2VzdFRIUGFyZW50KGMudGFyZ2V0KTtsJiYoTWEoVjksdGhpcyl8fHRoaXMuc2V0dXBIYW5kbGVQb3NpdGlvbihsKSl9fWZ1bmN0aW9uIEEzdChjKXtwbyhjLnRhcmdldCwibWFudWFsUm93UmVzaXplciIpJiYodGhpcy5zZXR1cEhhbmRsZVBv'@;
put 'c2l0aW9uKE1hKCRwLHRoaXMpKSx0aGlzLnNldHVwR3VpZGVQb3NpdGlvbigpLEtjKFY5LHRoaXMsITApLG51bGw9PT1NYShkQSx0aGlzKSYmKEtjKGRBLHRoaXMsc2V0VGltZW91dCgoKT0+dGhpcy5hZnRlck1vdXNlRG93blRpbWVvdXQoKSw1MDApKSx0aGlzLmhvdC5fcmVnaXN0ZXJUaW1l'@;
put 'b3V0KE1hKGRBLHRoaXMpKSksS2ModUEsdGhpcyxNYSh1QSx0aGlzKSsxKSxLYyhHUSx0aGlzLGMucGFnZVkpLEtjKHk2LHRoaXMsTWEocHcsdGhpcykpKX1mdW5jdGlvbiBrM3QoYyl7TWEoVjksdGhpcykmJihLYyhjQSx0aGlzLE1hKHB3LHRoaXMpKyhjLnBhZ2VZLU1hKEdRLHRoaXMpKSks'@;
put 'WW4oTWEoemgsdGhpcyksbD0+e0tjKHk2LHRoaXMsdGhpcy5zZXRNYW51YWxTaXplKGwsTWEoY0EsdGhpcykpKX0pLHRoaXMucmVmcmVzaEhhbmRsZVBvc2l0aW9uKCksdGhpcy5yZWZyZXNoR3VpZGVQb3NpdGlvbigpKX1mdW5jdGlvbiBEM3QoKXtjb25zdCBjPSgpPT57dGhpcy5ob3QucmVu'@;
put 'ZGVyKCksdGhpcy5ob3Qudmlldy5hZGp1c3RFbGVtZW50c1NpemUoKX0sbD0oYSxkKT0+e3RoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVSb3dSZXNpemUiLHRoaXMuZ2V0QWN0dWFsUm93SGVpZ2h0KGEpLGEsITEpLGQmJmMoKSx0aGlzLnNhdmVNYW51YWxSb3dIZWlnaHRzKCksdGhpcy5ob3Qu'@;
put 'cnVuSG9va3MoImFmdGVyUm93UmVzaXplIix0aGlzLmdldEFjdHVhbFJvd0hlaWdodChhKSxhLCExKX07TWEoVjksdGhpcykmJih0aGlzLmhpZGVIYW5kbGVBbmRHdWlkZSgpLEtjKFY5LHRoaXMsITEpLE1hKHk2LHRoaXMpIT09TWEocHcsdGhpcykmJihNYSh6aCx0aGlzKS5sZW5ndGg+MT8o'@;
put 'WW4oTWEoemgsdGhpcyksZD0+e2woZCl9KSxjKCkpOlluKE1hKHpoLHRoaXMpLGQ9PntsKGQsITApfSkpLHRoaXMuc2V0dXBIYW5kbGVQb3NpdGlvbihNYSgkcCx0aGlzKSkpfWZ1bmN0aW9uIEkzdCgpe3RoaXMuaGlkZUhhbmRsZUFuZEd1aWRlKCksdGhpcy5ob3Qucm9vdEVsZW1lbnQucmVt'@;
put 'b3ZlQ2hpbGQoTWEobmQsdGhpcykpLHRoaXMuaG90LnJvb3RFbGVtZW50LnJlbW92ZUNoaWxkKE1hKEtwLHRoaXMpKSxLYyhWOSx0aGlzLCExKSxLYyhfSCx0aGlzLCEwKSx0aGlzLmhvdC5fcmVnaXN0ZXJJbW1lZGlhdGUoKCk9PntLYyhfSCx0aGlzLCExKX0pfWZ1bmN0aW9uIFIzdChjLGwp'@;
put 'e2xldCBhPWM7aWYodGhpcy5lbmFibGVkKXtjb25zdCBkPXRoaXMuaG90LnRvUGh5c2ljYWxSb3cobCksaD1NYShfMyx0aGlzKS5nZXRWYWx1ZUF0SW5kZXgoZCk7dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVt2SF0mJmgmJihhPWgpfXJldHVybiBhfWZ1bmN0aW9uIEwzdCgpe2NvbnN0IGM9dGhp'@;
put 'cy5ob3QuZ2V0U2V0dGluZ3MoKVt2SF0sbD10aGlzLmxvYWRNYW51YWxSb3dIZWlnaHRzKCk7dGhpcy5ob3QuYmF0Y2hFeGVjdXRpb24oKCk9Pnt0eXBlb2YgbDwidSI/bC5mb3JFYWNoKChhLGQpPT57TWEoXzMsdGhpcykuc2V0VmFsdWVBdEluZGV4KGQsYSl9KTpBcnJheS5pc0FycmF5KGMp'@;
put 'PyhjLmZvckVhY2goKGEsZCk9PntNYShfMyx0aGlzKS5zZXRWYWx1ZUF0SW5kZXgoZCxhKX0pLEtjKGhBLHRoaXMsYykpOiEwPT09YyYmQXJyYXkuaXNBcnJheShNYShoQSx0aGlzKSkmJk1hKGhBLHRoaXMpLmZvckVhY2goKGEsZCk9PntNYShfMyx0aGlzKS5zZXRWYWx1ZUF0SW5kZXgoZCxh'@;
put 'KX0pfSwhMCl9ZnVuY3Rpb24gQjkoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIEYzdChjKXt2YXIgbD1mdW5jdGlvbiBIM3QoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNh'@;
put 'bGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmlu'@;
put 'ZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWZ1bmN0aW9uIGJtZShjLGwpe3JldHVybiBjLmdldCh5'@;
put 'bWUoYyxsKSl9ZnVuY3Rpb24gd0goYyxsLGEpe3JldHVybiBjLnNldCh5bWUoYyxsKSxhKSxhfWZ1bmN0aW9uIHltZShjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigi'@;
put 'UHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9eSg2ODE0NikseSg3NDk5KTt2YXIgajk9bmV3IFdlYWtNYXA7Y29uc3QgcXA9Y2xhc3MgTjN0e2NvbnN0cnVjdG9yKGwsYSxkLGgsZix2KXtCOSh0aGlzLCJyb3ciLHZvaWQgMCksQjkodGhpcywiY29sIix2'@;
put 'b2lkIDApLEI5KHRoaXMsInJvd3NwYW4iLHZvaWQgMCksQjkodGhpcywiY29sc3BhbiIsdm9pZCAwKSxCOSh0aGlzLCJyZW1vdmVkIiwhMSksQjkodGhpcywiY2VsbENvb3Jkc0ZhY3RvcnkiLHZvaWQgMCksQjkodGhpcywiY2VsbFJhbmdlRmFjdG9yeSIsdm9pZCAwKSxmdW5jdGlvbiBPM3Qo'@;
put 'YyxsLGEpeyhmdW5jdGlvbiBQM3QoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfSkoYyxsKSxsLnNldChjLGEpfSh0aGlzLGo5LG51bGwpLHRoaXMucm93'@;
put 'PWwsdGhpcy5jb2w9YSx0aGlzLnJvd3NwYW49ZCx0aGlzLmNvbHNwYW49aCx0aGlzLmNlbGxDb29yZHNGYWN0b3J5PWYsdGhpcy5jZWxsUmFuZ2VGYWN0b3J5PXZ9c3RhdGljIE5FR0FUSVZFX1ZBTFVFU19XQVJOSU5HKGwpe2xldHtyb3c6YSxjb2w6ZCxyb3dzcGFuOmgsY29sc3BhbjpmfT1s'@;
put 'O3JldHVybiBnbGBUaGUgbWVyZ2VkIGNlbGwgZGVjbGFyZWQgd2l0aCB7cm93OiAke2F9LCBjb2w6ICR7ZH0sXHgyMAogICAgICByb3dzcGFuOiAke2h9LCBjb2xzcGFuOiAke2Z9fSBjb250YWlucyBuZWdhdGl2ZSB2YWx1ZXMsIHdoaWNoIGlzXHgyMAogICAgICBub3Qgc3VwcG9ydGVkLiBJ'@;
put 'dCB3aWxsIG5vdCBiZSBhZGRlZCB0byB0aGUgY29sbGVjdGlvbi5gfXN0YXRpYyBJU19PVVRfT0ZfQk9VTkRTX1dBUk5JTkcobCl7bGV0e3JvdzphLGNvbDpkfT1sO3JldHVybiBnbGBUaGUgbWVyZ2VkIGNlbGwgZGVjbGFyZWQgYXQgWyR7YX0sICR7ZH1dIGlzIHBvc2l0aW9uZWRceDIwCiAg'@;
put 'ICAgIChvciBwb3NpdGlvbmVkIHBhcnRpYWxseSkgb3V0c2lkZSBvZiB0aGUgdGFibGUgcmFuZ2UuIEl0IHdhcyBub3QgYWRkZWQgdG8gdGhlIHRhYmxlLCBwbGVhc2UgZml4IHlvdXIgc2V0dXAuYH1zdGF0aWMgSVNfU0lOR0xFX0NFTEwobCl7bGV0e3JvdzphLGNvbDpkfT1sO3JldHVybiBn'@;
put 'bGBUaGUgbWVyZ2VkIGNlbGwgZGVjbGFyZWQgYXQgWyR7YX0sICR7ZH1dIGhhcyBib3RoICJyb3dzcGFuIlx4MjAKICAgICAgYW5kICJjb2xzcGFuIiBkZWNsYXJlZCBhcyAiMSIsIHdoaWNoIG1ha2VzIGl0IGEgc2luZ2xlIGNlbGwuIEl0IGNhbm5vdCBiZSBhZGRlZCB0byB0aGUgY29sbGVj'@;
put 'dGlvbi5gfXN0YXRpYyBaRVJPX1NQQU5fV0FSTklORyhsKXtsZXR7cm93OmEsY29sOmR9PWw7cmV0dXJuIGdsYFRoZSBtZXJnZWQgY2VsbCBkZWNsYXJlZCBhdCBbJHthfSwgJHtkfV0gaGFzICJyb3dzcGFuIlx4MjAKICAgICAgb3IgImNvbHNwYW4iIGRlY2xhcmVkIGFzICIwIiwgd2hpY2gg'@;
put 'aXMgbm90IHN1cHBvcnRlZC4gSXQgY2Fubm90IGJlIGFkZGVkIHRvIHRoZSBjb2xsZWN0aW9uLmB9c3RhdGljIGNvbnRhaW5zTmVnYXRpdmVWYWx1ZXMobCl7bGV0e3JvdzphLGNvbDpkLHJvd3NwYW46aCxjb2xzcGFuOmZ9PWw7cmV0dXJuIGE8MHx8ZDwwfHxoPDB8fGY8MH1zdGF0aWMgaXNT'@;
put 'aW5nbGVDZWxsKGwpe2xldHtyb3dzcGFuOmEsY29sc3BhbjpkfT1sO3JldHVybiAxPT09ZCYmMT09PWF9c3RhdGljIGNvbnRhaW5zWmVyb1NwYW4obCl7bGV0e3Jvd3NwYW46YSxjb2xzcGFuOmR9PWw7cmV0dXJuIDA9PT1kfHwwPT09YX1zdGF0aWMgaXNPdXRPZkJvdW5kcyhsLGEsZCl7cmV0'@;
put 'dXJuIGwucm93PDB8fGwuY29sPDB8fGwucm93Pj1hfHxsLnJvdytsLnJvd3NwYW4tMT49YXx8bC5jb2w+PWR8fGwuY29sK2wuY29sc3Bhbi0xPj1kfW5vcm1hbGl6ZShsKXtjb25zdCBhPWwuY291bnRSb3dzKCksZD1sLmNvdW50Q29scygpO3RoaXMucm93PDA/dGhpcy5yb3c9MDp0aGlzLnJv'@;
put 'dz5hLTEmJih0aGlzLnJvdz1hLTEpLHRoaXMuY29sPDA/dGhpcy5jb2w9MDp0aGlzLmNvbD5kLTEmJih0aGlzLmNvbD1kLTEpLHRoaXMucm93K3RoaXMucm93c3Bhbj5hLTEmJih0aGlzLnJvd3NwYW49YS10aGlzLnJvdyksdGhpcy5jb2wrdGhpcy5jb2xzcGFuPmQtMSYmKHRoaXMuY29sc3Bh'@;
put 'bj1kLXRoaXMuY29sKSx3SChqOSx0aGlzLG51bGwpfWluY2x1ZGVzKGwsYSl7cmV0dXJuIHRoaXMucm93PD1sJiZ0aGlzLmNvbDw9YSYmdGhpcy5yb3crdGhpcy5yb3dzcGFuLTE+PWwmJnRoaXMuY29sK3RoaXMuY29sc3Bhbi0xPj1hfWluY2x1ZGVzSG9yaXpvbnRhbGx5KGwpe3JldHVybiB0'@;
put 'aGlzLmNvbDw9bCYmdGhpcy5jb2wrdGhpcy5jb2xzcGFuLTE+PWx9aW5jbHVkZXNWZXJ0aWNhbGx5KGwpe3JldHVybiB0aGlzLnJvdzw9bCYmdGhpcy5yb3crdGhpcy5yb3dzcGFuLTE+PWx9c2hpZnQobCxhKXtjb25zdCBkPWxbMF18fGxbMV0saD1hK01hdGguYWJzKGxbMF18fGxbMV0pLTEs'@;
put 'Zj1sWzBdPyJjb2xzcGFuIjoicm93c3BhbiIsdj1sWzBdPyJjb2wiOiJyb3ciLE09TWF0aC5taW4oYSxoKSxEPU1hdGgubWF4KGEsaCksWj10aGlzW3ZdLHJlPXRoaXNbdl0rdGhpc1tmXS0xO2lmKFo+PWEmJih0aGlzW3ZdKz1kKSxkPjApYTw9cmUmJmE+WiYmKHRoaXNbZl0rPWQpO2Vsc2Ug'@;
put 'aWYoZDwwKXtpZihNPD1aJiZEPj1yZSlyZXR1cm4gdGhpcy5yZW1vdmVkPSEwLHdIKGo5LHRoaXMsbnVsbCksITE7aWYoWj49TSYmWjw9RCl7Y29uc3QgY2U9RC1aKzEsYmU9TWF0aC5hYnMoZCktY2U7dGhpc1t2XS09YmUrZCx0aGlzW2ZdLT1jZX1lbHNlIFo8PU0mJnJlPj1EP3RoaXNbZl0r'@;
put 'PWQ6Wjw9TSYmcmU+PU0mJnJlPEQmJih0aGlzW2ZdLT1yZS1NKzEpfXJldHVybiB3SChqOSx0aGlzLG51bGwpLCEwfWlzRmFydGhlcihsLGEpe3JldHVybiFsfHwoImRvd24iPT09YT9sLnJvdytsLnJvd3NwYW4tMTx0aGlzLnJvdyt0aGlzLnJvd3NwYW4tMToidXAiPT09YT9sLnJvdz50aGlz'@;
put 'LnJvdzoicmlnaHQiPT09YT9sLmNvbCtsLmNvbHNwYW4tMTx0aGlzLmNvbCt0aGlzLmNvbHNwYW4tMToibGVmdCI9PT1hP2wuY29sPnRoaXMuY29sOm51bGwpfWdldExhc3RSb3coKXtyZXR1cm4gdGhpcy5yb3crdGhpcy5yb3dzcGFuLTF9Z2V0TGFzdENvbHVtbigpe3JldHVybiB0aGlzLmNv'@;
put 'bCt0aGlzLmNvbHNwYW4tMX1nZXRSYW5nZSgpe3JldHVybiBibWUoajksdGhpcyl8fHdIKGo5LHRoaXMsdGhpcy5jZWxsUmFuZ2VGYWN0b3J5KHRoaXMuY2VsbENvb3Jkc0ZhY3RvcnkodGhpcy5yb3csdGhpcy5jb2wpLHRoaXMuY2VsbENvb3Jkc0ZhY3RvcnkodGhpcy5yb3csdGhpcy5jb2wp'@;
put 'LHRoaXMuY2VsbENvb3Jkc0ZhY3RvcnkodGhpcy5nZXRMYXN0Um93KCksdGhpcy5nZXRMYXN0Q29sdW1uKCkpKSksYm1lKGo5LHRoaXMpfX07ZnVuY3Rpb24gQ0goYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIGozdChjKXt2YXIgbD1mdW5jdGlvbiB6M3QoYyxsKXtpZigib2JqZWN0IiE9dHlw'@;
put 'ZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0'@;
put 'dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEw'@;
put 'LGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWZ1bmN0aW9uIHo5KGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQg'@;
put 'aXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX12YXIgdzY9bmV3IFdlYWtTZXQ7Y2xhc3MgU0h7Y29uc3RydWN0b3IobCl7KGZ1bmN0aW9uIFYzdChjLGwpeyhmdW5jdGlvbiBCM3QoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0'@;
put 'aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfSkoYyxsKSxsLmFkZChjKX0pKHRoaXMsdzYpLENIKHRoaXMsInBsdWdpbiIsdm9pZCAwKSxDSCh0aGlzLCJtZXJnZWRDZWxscyIsW10pLENIKHRoaXMsIm1lcmdlZENlbGxzTWF0cml4IixuZXcgTWFwKSxDSCh0'@;
put 'aGlzLCJob3QiLHZvaWQgMCksdGhpcy5wbHVnaW49bCx0aGlzLmhvdD1sLmhvdH1zdGF0aWMgSVNfT1ZFUkxBUFBJTkdfV0FSTklORyhsKXtsZXR7cm93OmEsY29sOmR9PWw7cmV0dXJuIGdsYFRoZSBtZXJnZWQgY2VsbCBkZWNsYXJlZCBhdCBbJHthfSwgJHtkfV0sIG92ZXJsYXBzXHgyMAog'@;
put 'ICAgICB3aXRoIHRoZSBvdGhlciBkZWNsYXJlZCBtZXJnZWQgY2VsbC4gVGhlIG92ZXJsYXBwaW5nIG1lcmdlZCBjZWxsIHdhcyBub3QgYWRkZWQgdG8gdGhlIHRhYmxlLCBwbGVhc2VceDIwCiAgICAgIGZpeCB5b3VyIHNldHVwLmB9Z2V0KGwsYSl7dmFyIGQ7cmV0dXJuISghdGhpcy5tZXJn'@;
put 'ZWRDZWxsc01hdHJpeC5oYXMobCl8fG51bGw9PT0oZD10aGlzLm1lcmdlZENlbGxzTWF0cml4LmdldChsKS5nZXQoYSkpfHx2b2lkIDA9PT1kKSYmZH1nZXRCeVJhbmdlKGwpe2NvbnN0e3JvdzphLGNvbDpkfT1sLmdldFRvcFN0YXJ0Q29ybmVyKCkse3JvdzpoLGNvbDpmfT1sLmdldEJvdHRv'@;
put 'bUVuZENvcm5lcigpLHY9dGhpcy5tZXJnZWRDZWxscy5sZW5ndGg7bGV0IE09ITE7Zm9yKGxldCBEPTA7RDx2O0QrKyl7Y29uc3QgWj10aGlzLm1lcmdlZENlbGxzW0RdLHtyb3c6cmUsY29sOmNlLHJvd3NwYW46YmUsY29sc3BhbjpFZX09WjtpZihyZT49YSYmcmUrYmUtMTw9aCYmY2U+PWQm'@;
put 'JmNlK0VlLTE8PWYpe009WjticmVha319cmV0dXJuIE19ZmlsdGVyT3ZlcmxhcHBpbmdNZXJnZUNlbGxzKGwpe2NvbnN0IGE9bmV3IFNldDtyZXR1cm4gdGhpcy5tZXJnZWRDZWxscy5mb3JFYWNoKGg9Pntjb25zdHtyb3c6Zixjb2w6dixjb2xzcGFuOk0scm93c3BhbjpEfT1oO2ZvcihsZXQg'@;
put 'Wj1mO1o8ZitEO1orKylmb3IobGV0IHJlPXY7cmU8ditNO3JlKyspYS5hZGQoYHIke1p9LGMke3JlfWApfSksbC5maWx0ZXIoaD0+e2NvbnN0e3JvdzpmLGNvbDp2LGNvbHNwYW46TSxyb3dzcGFuOkR9PWgsWj1uZXcgU2V0O2xldCByZT0hMTtmb3IobGV0IGNlPWY7Y2U8ZitEO2NlKyspe2Zv'@;
put 'cihsZXQgYmU9djtiZTx2K007YmUrKyl7Y29uc3QgRWU9YHIke2NlfSxjJHtiZX1gO2lmKGEuaGFzKEVlKSl7aWwoU0guSVNfT1ZFUkxBUFBJTkdfV0FSTklORyhoKSkscmU9ITA7YnJlYWt9Wi5hZGQoRWUpfWlmKHJlKWJyZWFrfXJldHVybiByZXx8YS5hZGQoLi4uWiksIXJlfSl9Z2V0V2l0'@;
put 'aGluUmFuZ2UobCl7bGV0IGE9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0mJmFyZ3VtZW50c1sxXTtjb25zdHtyb3c6ZCxjb2w6aH09bC5nZXRUb3BTdGFydENvcm5lcigpLHtyb3c6Zixjb2w6dn09bC5nZXRCb3R0b21FbmRDb3JuZXIoKSxNPVtdO2ZvcihsZXQg'@;
put 'RD1kO0Q8PWY7RCsrKWZvcihsZXQgWj1oO1o8PXY7WisrKXtjb25zdCByZT10aGlzLmdldChELFopO3JlJiYoYXx8IWEmJnJlLnJvdz09PUQmJnJlLmNvbD09PVopJiZNLnB1c2gocmUpfXJldHVybiBNfWFkZChsKXtsZXQgYT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50'@;
put 'c1sxXSYmYXJndW1lbnRzWzFdO2NvbnN0IGQ9bC5yb3csaD1sLmNvbCxNPW5ldyBxcChkLGgsbC5yb3dzcGFuLGwuY29sc3Bhbix0aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3Jkcyx0aGlzLmhvdC5fY3JlYXRlQ2VsbFJhbmdlKSxEPXRoaXMuZ2V0KGQsaCksWj0hYSYmdGhpcy5pc092ZXJsYXBw'@;
put 'aW5nKE0pO3JldHVybiBEfHxaPyhaJiZpbChTSC5JU19PVkVSTEFQUElOR19XQVJOSU5HKE0pKSwhMSk6KHRoaXMuaG90JiZNLm5vcm1hbGl6ZSh0aGlzLmhvdCksdGhpcy5tZXJnZWRDZWxscy5wdXNoKE0pLHo5KHc2LHRoaXMsX21lKS5jYWxsKHRoaXMsTSksTSl9cmVtb3ZlKGwsYSl7Y29u'@;
put 'c3QgZD10aGlzLmdldChsLGEpLGg9ZD90aGlzLm1lcmdlZENlbGxzLmluZGV4T2YoZCk6LTE7cmV0dXJuISghZHx8LTE9PT1oKSYmKHRoaXMubWVyZ2VkQ2VsbHMuc3BsaWNlKGgsMSksejkodzYsdGhpcyxVM3QpLmNhbGwodGhpcyxkKSxkKX1jbGVhcigpe1luKHRoaXMubWVyZ2VkQ2VsbHMs'@;
put 'bD0+e2xldHtyb3c6YSxjb2w6ZCxyb3dzcGFuOmgsY29sc3BhbjpmfT1sO0dhKGEsYStoLHY9PntHYShkLGQrZixNPT57Y29uc3QgRD10aGlzLmhvdC5nZXRDZWxsKHYsTSk7RCYmKEQucmVtb3ZlQXR0cmlidXRlKCJyb3dzcGFuIiksRC5yZW1vdmVBdHRyaWJ1dGUoImNvbHNwYW4iKSxELnN0'@;
put 'eWxlLmRpc3BsYXk9IiIpfSl9KX0pLHRoaXMubWVyZ2VkQ2VsbHMubGVuZ3RoPTAsdGhpcy5tZXJnZWRDZWxsc01hdHJpeD1uZXcgTWFwfWlzT3ZlcmxhcHBpbmcobCl7Y29uc3QgYT1sLmdldFJhbmdlKCk7Zm9yKGxldCBkPTA7ZDx0aGlzLm1lcmdlZENlbGxzLmxlbmd0aDtkKyspaWYodGhp'@;
put 'cy5tZXJnZWRDZWxsc1tkXS5nZXRSYW5nZSgpLm92ZXJsYXBzKGEpKXJldHVybiEwO3JldHVybiExfWlzRmlyc3RSZW5kZXJhYmxlTWVyZ2VkQ2VsbChsLGEpe2NvbnN0IGQ9dGhpcy5nZXQobCxhKTtpZighZClyZXR1cm4hMTtjb25zdHtyb3c6aCxjb2w6Zixyb3dzcGFuOnYsY29sc3BhbjpN'@;
put 'fT1kLEQ9dGhpcy5ob3Qudmlldy5nZXRBY3RpdmVPdmVybGF5TmFtZSgpLFo9WyJ0b3AiLCJ0b3BfaW5saW5lX3N0YXJ0X2Nvcm5lciJdLmluY2x1ZGVzKEQpPzA6dGhpcy5ob3QuZ2V0Rmlyc3RSZW5kZXJlZFZpc2libGVSb3coKSxyZT1bImlubGluZV9zdGFydCIsInRvcF9pbmxpbmVfc3Rh'@;
put 'cnRfY29ybmVyIiwiYm90dG9tX2lubGluZV9zdGFydF9jb3JuZXIiXS5pbmNsdWRlcyhEKT8wOnRoaXMuaG90LmdldEZpcnN0UmVuZGVyZWRWaXNpYmxlQ29sdW1uKCksY2U9a3MoWixoLGgrdi0xKSxiZT1rcyhyZSxmLGYrTS0xKTtyZXR1cm4gdGhpcy5ob3Qucm93SW5kZXhNYXBwZXIuZ2V0'@;
put 'TmVhcmVzdE5vdEhpZGRlbkluZGV4KGNlLDEpPT09bCYmdGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGJlLDEpPT09YX1nZXRGaXJzdFJlbmRlcmFibGVDb29yZHMobCxhKXtjb25zdCBkPXRoaXMuZ2V0KGwsYSk7aWYoIWR8fHRoaXMuaXNGaXJz'@;
put 'dFJlbmRlcmFibGVNZXJnZWRDZWxsKGwsYSkpcmV0dXJuIHRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKGwsYSk7Y29uc3QgaD10aGlzLmhvdC5yb3dJbmRleE1hcHBlci5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoZC5yb3csMSksZj10aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5nZXRO'@;
put 'ZWFyZXN0Tm90SGlkZGVuSW5kZXgoZC5jb2wsMSk7cmV0dXJuIHRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKGgsZil9Z2V0U3RhcnRNb3N0Q29sdW1uSW5kZXgobCxhKXtjb25zdCBkPXo5KHc2LHRoaXMsTUgpLmNhbGwodGhpcyxsLCJjb2wiLC0xKTtsZXQgaD1hO2ZvcihsZXQgZj0wO2Y8'@;
put 'ZC5sZW5ndGg7ZisrKWlmKGRbZl08PWEpe2g9ZFtmXTticmVha31yZXR1cm4gaH1nZXRFbmRNb3N0Q29sdW1uSW5kZXgobCxhKXtjb25zdCBkPXo5KHc2LHRoaXMsTUgpLmNhbGwodGhpcyxsLCJjb2wiLDEpO2xldCBoPWE7Zm9yKGxldCBmPTA7ZjxkLmxlbmd0aDtmKyspaWYoZFtmXT49YSl7'@;
put 'aD1kW2ZdO2JyZWFrfXJldHVybiBofWdldFRvcE1vc3RSb3dJbmRleChsLGEpe2NvbnN0IGQ9ejkodzYsdGhpcyxNSCkuY2FsbCh0aGlzLGwsInJvdyIsLTEpO2xldCBoPWE7Zm9yKGxldCBmPTA7ZjxkLmxlbmd0aDtmKyspaWYoZFtmXTw9YSl7aD1kW2ZdO2JyZWFrfXJldHVybiBofWdldEJv'@;
put 'dHRvbU1vc3RSb3dJbmRleChsLGEpe2NvbnN0IGQ9ejkodzYsdGhpcyxNSCkuY2FsbCh0aGlzLGwsInJvdyIsMSk7bGV0IGg9YTtmb3IobGV0IGY9MDtmPGQubGVuZ3RoO2YrKylpZihkW2ZdPj1hKXtoPWRbZl07YnJlYWt9cmV0dXJuIGh9c2hpZnRDb2xsZWN0aW9ucyhsLGEsZCl7Y29uc3Qg'@;
put 'aD1bMCwwXTtzd2l0Y2gobCl7Y2FzZSJyaWdodCI6aFswXSs9ZDticmVhaztjYXNlImxlZnQiOmhbMF0tPWQ7YnJlYWs7Y2FzZSJkb3duIjpoWzFdKz1kO2JyZWFrO2Nhc2UidXAiOmhbMV0tPWR9Y29uc3QgZj1bXTt0aGlzLm1lcmdlZENlbGxzLmZvckVhY2godj0+e3Yuc2hpZnQoaCxhKSx2'@;
put 'LnJlbW92ZWQmJmYucHVzaCh2KX0pLGYuZm9yRWFjaCh2PT57dGhpcy5tZXJnZWRDZWxscy5zcGxpY2UodGhpcy5tZXJnZWRDZWxscy5pbmRleE9mKHYpLDEpfSksdGhpcy5tZXJnZWRDZWxsc01hdHJpeC5jbGVhcigpLHRoaXMubWVyZ2VkQ2VsbHMuZm9yRWFjaCh2PT57ejkodzYsdGhpcyxf'@;
put 'bWUpLmNhbGwodGhpcyx2KX0pfX1mdW5jdGlvbiBNSChjLGwpe2xldCBhPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXToxO2NvbnN0IGQ9bmV3IE1hcCxoPTE9PT1hP2MuZ2V0VG9wU3RhcnRDb3JuZXIoKTpjLmdldEJvdHRvbUVuZENvcm5l'@;
put 'cigpLGY9MT09PWE/Yy5nZXRCb3R0b21FbmRDb3JuZXIoKTpjLmdldFRvcFN0YXJ0Q29ybmVyKCk7Zm9yKGxldCB2PWgucm93OzE9PT1hP3Y8PWYucm93OnY+PWYucm93O3YrPWEpZm9yKGxldCBNPWguY29sOzE9PT1hP008PWYuY29sOk0+PWYuY29sO00rPWEpe2NvbnN0IEQ9InJvdyI9PT1s'@;
put 'P3Y6TSxaPXRoaXMuZ2V0KHYsTSk7bGV0IHJlPUQ7WiYmKHJlPTE9PT1hP1pbbF0rWltgJHtsfXNwYW5gXS0xOlpbbF0pLGQuaGFzKEQpfHxkLnNldChELG5ldyBTZXQpLGQuZ2V0KEQpLmFkZChyZSl9cmV0dXJuIEFycmF5LmZyb20obmV3IFNldChBcnJheS5mcm9tKGQuZW50cmllcygpKS5m'@;
put 'aWx0ZXIodj0+e2xldFssTV09djtyZXR1cm4gMT09PU0uc2l6ZX0pLmZsYXRNYXAodj0+e2xldFssTV09djtyZXR1cm4gQXJyYXkuZnJvbShNKX0pKSl9ZnVuY3Rpb24gX21lKGMpe2ZvcihsZXQgbD1jLnJvdztsPGMucm93K2Mucm93c3BhbjtsKyspZm9yKGxldCBhPWMuY29sO2E8Yy5jb2wr'@;
put 'Yy5jb2xzcGFuO2ErKyl0aGlzLm1lcmdlZENlbGxzTWF0cml4LmhhcyhsKXx8dGhpcy5tZXJnZWRDZWxsc01hdHJpeC5zZXQobCxuZXcgTWFwKSx0aGlzLm1lcmdlZENlbGxzTWF0cml4LmdldChsKS5zZXQoYSxjKX1mdW5jdGlvbiBVM3QoYyl7Zm9yKGxldCBsPWMucm93O2w8Yy5yb3crYy5y'@;
put 'b3dzcGFuO2wrKylmb3IobGV0IGE9Yy5jb2w7YTxjLmNvbCtjLmNvbHNwYW47YSsrKXRoaXMubWVyZ2VkQ2VsbHNNYXRyaXguZ2V0KGwpLmRlbGV0ZShhKX1jb25zdCBaM3Q9U0g7ZnVuY3Rpb24gJFEoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIFczdChjKXt2YXIgbD1mdW5jdGlvbiBZM3Qo'@;
put 'YyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJA'@;
put 'QHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7'@;
put 'dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNvbnN0ICQzdD1jbGFzcyBHM3R7Y29uc3RydWN0b3IobCl7JFEodGhpcywicGx1Z2luIix2b2lkIDApLCRRKHRoaXMsIm1lcmdlZENlbGxzQ29sbGVjdGlvbiIsdm9pZCAwKSwkUSh0'@;
put 'aGlzLCJjdXJyZW50RmlsbERhdGEiLG51bGwpLHRoaXMucGx1Z2luPWwsdGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb249dGhpcy5wbHVnaW4ubWVyZ2VkQ2VsbHNDb2xsZWN0aW9ufWdldERpcmVjdGlvbihsLGEpe2xldCBkPW51bGw7cmV0dXJuIGQ9YVswXT09PWxbMF0mJmFbMV09PT1sWzFd'@;
put 'JiZhWzNdPT09bFszXT8iZG93biI6YVsyXT09PWxbMl0mJmFbMV09PT1sWzFdJiZhWzNdPT09bFszXT8idXAiOmFbMV09PT1sWzFdJiZhWzJdPT09bFsyXT8icmlnaHQiOiJsZWZ0IixkfXNuYXBEcmFnQXJlYShsLGEsZCxoKXtjb25zdCBmPWEuc2xpY2UoMCksdj10aGlzLmdldEF1dG9maWxs'@;
put 'U2l6ZShsLGEsZCksW00sRCxaLHJlXT1sLGJlPVsidXAiLCJkb3duIl0uaW5kZXhPZihkKT4tMT9aLU0rMTpyZS1EKzEsQmU9di1NYXRoLmZsb29yKHYvYmUpKmJlLHFlPXRoaXMuZ2V0RmFydGhlc3RDb2xsZWN0aW9uKGwsYSxkLGgpO2lmKHFlKWlmKCJkb3duIj09PWQpe2NvbnN0IHJ0PXFl'@;
put 'LnJvdytxZS5yb3dzcGFuLU0tQmU7ZlsyXStydD49dGhpcy5wbHVnaW4uaG90LmNvdW50Um93cygpP2ZbMl0tPUJlOmZbMl0rPUJlP3J0OjB9ZWxzZSBpZigicmlnaHQiPT09ZCl7Y29uc3QgcnQ9cWUuY29sK3FlLmNvbHNwYW4tRC1CZTtmWzNdK3J0Pj10aGlzLnBsdWdpbi5ob3QuY291bnRD'@;
put 'b2xzKCk/ZlszXS09QmU6ZlszXSs9QmU/cnQ6MH1lbHNlIGlmKCJ1cCI9PT1kKXtjb25zdCBydD1aLUJlLXFlLnJvdysxO2ZbMF0rcnQ8MD9mWzBdKz1CZTpmWzBdLT1CZT9ydDowfWVsc2UgaWYoImxlZnQiPT09ZCl7Y29uc3QgcnQ9cmUtQmUtcWUuY29sKzE7ZlsxXStydDwwP2ZbMV0rPUJl'@;
put 'OmZbMV0tPUJlP3J0OjB9cmV0dXJuIHRoaXMudXBkYXRlQ3VycmVudEZpbGxDYWNoZSh7YmFzZUFyZWE6bCxkcmFnRGlyZWN0aW9uOmQsZm91bmRNZXJnZWRDZWxsczpoLGZpbGxTaXplOnYsZHJhZ0FyZWE6ZixjeWNsZUxlbmd0aDpiZX0pLGZ9dXBkYXRlQ3VycmVudEZpbGxDYWNoZShsKXt0'@;
put 'aGlzLmN1cnJlbnRGaWxsRGF0YXx8KHRoaXMuY3VycmVudEZpbGxEYXRhPXt9KSxFdSh0aGlzLmN1cnJlbnRGaWxsRGF0YSxsKX1nZXRBdXRvZmlsbFNpemUobCxhLGQpe2NvbnN0W2gsZix2LE1dPWwsW0QsWixyZSxjZV09YTtzd2l0Y2goZCl7Y2FzZSJ1cCI6cmV0dXJuIGgtRDtjYXNlImRv'@;
put 'd24iOnJldHVybiByZS12O2Nhc2UibGVmdCI6cmV0dXJuIGYtWjtjYXNlInJpZ2h0IjpyZXR1cm4gY2UtTTtkZWZhdWx0OnJldHVybiBudWxsfX1nZXREcmFnQXJlYShsLGEsZCl7Y29uc3RbaCxmLHYsTV09bCxbRCxaLHJlLGNlXT1hO3N3aXRjaChkKXtjYXNlInVwIjpyZXR1cm5bRCxaLGgt'@;
put 'MSxNXTtjYXNlImRvd24iOntjb25zdCBiZT10aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5nZXQocmUsTSk7cmV0dXJuW3YrMSxmLHJlKyhiZT9iZS5yb3dzcGFuLTE6MCksTV19Y2FzZSJsZWZ0IjpyZXR1cm5bRCxaLHYsZi0xXTtjYXNlInJpZ2h0Ijp7Y29uc3QgYmU9dGhpcy5tZXJnZWRD'@;
put 'ZWxsc0NvbGxlY3Rpb24uZ2V0KHJlLE0pO3JldHVybltoLE0rKGJlP2JlLmNvbHNwYW4tMTowKSxyZSxjZV19ZGVmYXVsdDpyZXR1cm4gbnVsbH19Z2V0RmFydGhlc3RDb2xsZWN0aW9uKGwsYSxkLGgpe2NvbnN0W2YsdixNLERdPWwsWj1bInVwIiwiZG93biJdLmluZGV4T2YoZCk+LTEscmU9'@;
put 'Wj9NOkQsY2U9Wj9mOnYsYmU9dGhpcy5nZXRBdXRvZmlsbFNpemUobCxhLGQpLEVlPVo/TS1mKzE6RC12KzEscWU9YmUtTWF0aC5mbG9vcihiZS9FZSkqRWU7bGV0IHJ0PW51bGwscHQ9bnVsbCxkdD1udWxsO3N3aXRjaChkKXtjYXNlInVwIjpydD0iaW5jbHVkZXNWZXJ0aWNhbGx5IixkdD1y'@;
put 'ZS1xZSsxO2JyZWFrO2Nhc2UibGVmdCI6cnQ9ImluY2x1ZGVzSG9yaXpvbnRhbGx5IixkdD1yZS1xZSsxO2JyZWFrO2Nhc2UiZG93biI6cnQ9ImluY2x1ZGVzVmVydGljYWxseSIsZHQ9Y2UrcWUtMTticmVhaztjYXNlInJpZ2h0IjpydD0iaW5jbHVkZXNIb3Jpem9udGFsbHkiLGR0PWNlK3Fl'@;
put 'LTF9cmV0dXJuIFluKGgsSnQ9PntKdFtydF0oZHQpJiZKdC5pc0ZhcnRoZXIocHQsZCkmJihwdD1KdCl9KSxwdH1yZWNyZWF0ZUFmdGVyRGF0YVBvcHVsYXRpb24obCl7aWYoIXRoaXMuY3VycmVudEZpbGxEYXRhKXJldHVybjtjb25zdCBhPXRoaXMuZ2V0UmFuZ2VGcm9tQ2hhbmdlcyhsKSxk'@;
put 'PXRoaXMuY3VycmVudEZpbGxEYXRhLmZvdW5kTWVyZ2VkQ2VsbHMsaD10aGlzLmN1cnJlbnRGaWxsRGF0YS5kcmFnRGlyZWN0aW9uLGY9KFoscmUpPT57c3dpdGNoKGgpe2Nhc2UidXAiOnJldHVybiBaLnJvdy1yZT49YS5mcm9tLnJvdztjYXNlImRvd24iOnJldHVybiBaLnJvdytaLnJvd3Nw'@;
put 'YW4tMStyZTw9YS50by5yb3c7Y2FzZSJsZWZ0IjpyZXR1cm4gWi5jb2wtcmU+PWEuZnJvbS5jb2x1bW47Y2FzZSJyaWdodCI6cmV0dXJuIFouY29sK1ouY29sc3Bhbi0xK3JlPD1hLnRvLmNvbHVtbjtkZWZhdWx0OnJldHVybiBudWxsfX07bGV0IHY9MCxNPW51bGwsRD0xO2Rve2ZvcihsZXQg'@;
put 'Wj0wO1o8ZC5sZW5ndGg7Wis9MSl7aWYoTT1kW1pdLHY9RCp0aGlzLmN1cnJlbnRGaWxsRGF0YS5jeWNsZUxlbmd0aCxmKE0sdikpc3dpdGNoKGgpe2Nhc2UidXAiOnRoaXMucGx1Z2luLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5hZGQoe3JvdzpNLnJvdy12LHJvd3NwYW46TS5yb3dzcGFuLGNv'@;
put 'bDpNLmNvbCxjb2xzcGFuOk0uY29sc3Bhbn0sITApO2JyZWFrO2Nhc2UiZG93biI6dGhpcy5wbHVnaW4ubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLmFkZCh7cm93Ok0ucm93K3Yscm93c3BhbjpNLnJvd3NwYW4sY29sOk0uY29sLGNvbHNwYW46TS5jb2xzcGFufSwhMCk7YnJlYWs7Y2FzZSJsZWZ0'@;
put 'Ijp0aGlzLnBsdWdpbi5tZXJnZWRDZWxsc0NvbGxlY3Rpb24uYWRkKHtyb3c6TS5yb3cscm93c3BhbjpNLnJvd3NwYW4sY29sOk0uY29sLXYsY29sc3BhbjpNLmNvbHNwYW59LCEwKTticmVhaztjYXNlInJpZ2h0Ijp0aGlzLnBsdWdpbi5tZXJnZWRDZWxsc0NvbGxlY3Rpb24uYWRkKHtyb3c6'@;
put 'TS5yb3cscm93c3BhbjpNLnJvd3NwYW4sY29sOk0uY29sK3YsY29sc3BhbjpNLmNvbHNwYW59LCEwKX1aPT09ZC5sZW5ndGgtMSYmKEQrPTEpfX13aGlsZShmKE0sdikpO3RoaXMuY3VycmVudEZpbGxEYXRhPW51bGwsdGhpcy5wbHVnaW4uaG90LnJlbmRlcigpLGQubGVuZ3RoPjAmJnRoaXMu'@;
put 'cGx1Z2luLmlmQ2hyb21lRm9yY2VSZXBhaW50KCl9Z2V0UmFuZ2VGcm9tQ2hhbmdlcyhsKXtjb25zdCBhPXttaW46bnVsbCxtYXg6bnVsbH0sZD17bWluOm51bGwsbWF4Om51bGx9O3JldHVybiBZbihsLGg9Pntjb25zdCBmPWhbMF0sdj10aGlzLnBsdWdpbi5ob3QucHJvcFRvQ29sKGhbMV0p'@;
put 'OyhudWxsPT09YS5taW58fGY8YS5taW4pJiYoYS5taW49ZiksKG51bGw9PT1hLm1heHx8Zj5hLm1heCkmJihhLm1heD1mKSwobnVsbD09PWQubWlufHx2PGQubWluKSYmKGQubWluPXYpLChudWxsPT09ZC5tYXh8fHY+ZC5tYXgpJiYoZC5tYXg9dil9KSx7ZnJvbTp7cm93OmEubWluLGNvbHVt'@;
put 'bjpkLm1pbn0sdG86e3JvdzphLm1heCxjb2x1bW46ZC5tYXh9fX1kcmFnQXJlYU92ZXJsYXBzQ29sbGVjdGlvbnMobCxhLGQpe2NvbnN0IGg9dGhpcy5nZXREcmFnQXJlYShsLGEsZCksW2YsdixNLERdPWgsWj10aGlzLnBsdWdpbi5ob3QuX2NyZWF0ZUNlbGxDb29yZHMoZix2KSxyZT10aGlz'@;
put 'LnBsdWdpbi5ob3QuX2NyZWF0ZUNlbGxDb29yZHMoTSxEKSxjZT10aGlzLnBsdWdpbi5ob3QuX2NyZWF0ZUNlbGxSYW5nZShaLFoscmUpO2lmKDA9PT10aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5nZXRXaXRoaW5SYW5nZShjZSwhMCkubGVuZ3RoKXJldHVybiExO2NvbnN0IEVlPXRoaXMu'@;
put 'bWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLmdldFdpdGhpblJhbmdlKGNlLCExKTtyZXR1cm4gMD09PUVlLmxlbmd0aHx8KCJ1cCI9PT1kfHwiZG93biI9PT1kPyFFZS5ldmVyeShCZT0+e2xldHtjb2xzcGFuOnFlfT1CZTtyZXR1cm4gcWU9PT1jZS5nZXRXaWR0aCgpfSk6IUVlLmV2ZXJ5KEJlPT57'@;
put 'bGV0e3Jvd3NwYW46cWV9PUJlO3JldHVybiBxZT09PWNlLmdldEhlaWdodCgpfSkpfX07ZnVuY3Rpb24gS1EoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIEszdChjKXt2YXIgbD1mdW5jdGlvbiBxM3QoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3lt'@;
put 'Ym9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVy'@;
put 'bigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0p'@;
put 'OmNbbF09YSxjfWNvbnN0IEozdD1jbGFzcyBYM3R7Y29uc3RydWN0b3IobCl7S1EodGhpcywicGx1Z2luIix2b2lkIDApLEtRKHRoaXMsImhvdCIsdm9pZCAwKSxLUSh0aGlzLCJmdWxseVNlbGVjdGVkTWVyZ2VkQ2VsbENsYXNzTmFtZSIsImZ1bGx5U2VsZWN0ZWRNZXJnZWRDZWxsIiksdGhp'@;
put 'cy5wbHVnaW49bCx0aGlzLmhvdD1sLmhvdH1nZXRTZWxlY3RlZE1lcmdlZENlbGxDbGFzc05hbWUobCxhLGQsaCl7Y29uc3QgZj1NYXRoLm1pbihkWzBdLGRbMl0pLHY9TWF0aC5taW4oZFsxXSxkWzNdKSxNPU1hdGgubWF4KGRbMF0sZFsyXSksRD1NYXRoLm1heChkWzFdLGRbM10pO2lmKHZv'@;
put 'aWQgMD09PWh8fCF0aGlzLnBsdWdpbi5tZXJnZWRDZWxsc0NvbGxlY3Rpb24uaXNGaXJzdFJlbmRlcmFibGVNZXJnZWRDZWxsKGwsYSkpcmV0dXJuO2NvbnN0IHJlPXRoaXMucGx1Z2luLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5nZXQobCxhKTtpZighcmUpcmV0dXJuO2NvbnN0IGNlPXJlLmdl'@;
put 'dExhc3RSb3coKSxiZT1yZS5nZXRMYXN0Q29sdW1uKCk7cmV0dXJuIGY8PXJlLnJvdyYmdjw9cmUuY29sJiZNPj1jZSYmRD49YmU/YCR7dGhpcy5mdWxseVNlbGVjdGVkTWVyZ2VkQ2VsbENsYXNzTmFtZX0tJHtofWA6dGhpcy5pc01lcmdlQ2VsbEZ1bGx5U2VsZWN0ZWQocmUsdGhpcy5wbHVn'@;
put 'aW4uaG90LmdldFNlbGVjdGVkUmFuZ2UoKSk/YCR7dGhpcy5mdWxseVNlbGVjdGVkTWVyZ2VkQ2VsbENsYXNzTmFtZX0tbXVsdGlwbGVgOnZvaWQgMH1pc01lcmdlQ2VsbEZ1bGx5U2VsZWN0ZWQobCxhKXtjb25zdCBkPVtdO2lmKCFhfHwhbClyZXR1cm4hMTtmb3IobGV0IGg9MDtoPGwucm93'@;
put 'c3BhbjtoKz0xKWZvcihsZXQgZj0wO2Y8bC5jb2xzcGFuO2YrPTEpZC5wdXNoKHRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKGwucm93K2gsbC5jb2wrZikpO2ZvcihsZXQgaD0wO2g8ZC5sZW5ndGg7aCs9MSl7Y29uc3QgZj1bXTtmb3IobGV0IHY9MDt2PGEubGVuZ3RoO3YrPTEpZlt2XT1h'@;
put 'W3ZdLmluY2x1ZGVzKGRbaF0pO2lmKCFmLmluY2x1ZGVzKCEwKSlyZXR1cm4hMX1yZXR1cm4hMH1nZXRTZWxlY3RlZE1lcmdlZENlbGxDbGFzc05hbWVUb1JlbW92ZSgpe2NvbnN0IGw9W107Zm9yKGxldCBhPTA7YTw9NzthKz0xKWwucHVzaChgJHt0aGlzLmZ1bGx5U2VsZWN0ZWRNZXJnZWRD'@;
put 'ZWxsQ2xhc3NOYW1lfS0ke2F9YCk7cmV0dXJuIGwucHVzaChgJHt0aGlzLmZ1bGx5U2VsZWN0ZWRNZXJnZWRDZWxsQ2xhc3NOYW1lfS1tdWx0aXBsZWApLGx9fTtmdW5jdGlvbiBmQShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gZXB0KGMpe3ZhciBsPWZ1bmN0aW9uIHRwdChjLGwpe2lmKCJv'@;
put 'YmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRp'@;
put 'dmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVu'@;
put 'dW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y2xhc3Mgd21le2NvbnN0cnVjdG9yKGwpe2ZBKHRoaXMsImRhdGEiLHZvaWQgMCksZkEodGhpcywibmV4dCIsbnVsbCksZkEodGhpcywicHJldiIsbnVsbCksdGhpcy5kYXRhPWx9fWNvbnN0IHhIPWNs'@;
put 'YXNzIG5wdHtjb25zdHJ1Y3Rvcigpe2ZBKHRoaXMsImZpcnN0IixudWxsKSxmQSh0aGlzLCJsYXN0IixudWxsKX1wdXNoKGwpe2NvbnN0IGE9bmV3IHdtZShsKTtpZihudWxsPT09dGhpcy5maXJzdCl0aGlzLmZpcnN0PWEsdGhpcy5sYXN0PWE7ZWxzZXtjb25zdCBkPXRoaXMubGFzdDt0aGlz'@;
put 'Lmxhc3Q9YSxhLnByZXY9ZCxkLm5leHQ9YX1yZXR1cm4gYX11bnNoaWZ0KGwpe2NvbnN0IGE9bmV3IHdtZShsKTtpZihudWxsPT09dGhpcy5maXJzdCl0aGlzLmZpcnN0PWEsdGhpcy5sYXN0PWE7ZWxzZXtjb25zdCBkPXRoaXMuZmlyc3Q7dGhpcy5maXJzdD1hLGEubmV4dD1kLGQucHJldj1h'@;
put 'fX1pbm9yZGVyKGwpe2xldCBhPXRoaXMuZmlyc3Q7Zm9yKDthOyl7Y29uc3QgZD1sKGEpO2lmKGE9PT10aGlzLmxhc3R8fCEwPT09ZClicmVhazthPWEubmV4dH19cmVtb3ZlKGwpe2lmKG51bGw9PT10aGlzLmZpcnN0KXJldHVybiExO2xldCBkLGgsYT10aGlzLmZpcnN0O2Zvcig7YTspe2lm'@;
put 'KGEuZGF0YT09PWwpcmV0dXJuIGQ9YS5uZXh0LGg9YS5wcmV2LGQmJihkLnByZXY9aCksaCYmKGgubmV4dD1kKSxhPT09dGhpcy5maXJzdCYmKHRoaXMuZmlyc3Q9ZCksYT09PXRoaXMubGFzdCYmKHRoaXMubGFzdD1oKSwhMDthPWEubmV4dH1yZXR1cm4hMX1oYXNDeWNsZSgpe2xldCBsPXRo'@;
put 'aXMuZmlyc3QsYT10aGlzLmZpcnN0O2Zvcig7Oyl7aWYobnVsbD09PWx8fChsPWwubmV4dCxudWxsPT09bCkpcmV0dXJuITE7aWYobD1sLm5leHQsYT1hLm5leHQsbD09PWEpcmV0dXJuITB9fXBvcCgpe2lmKG51bGw9PT10aGlzLmxhc3QpcmV0dXJuIG51bGw7Y29uc3QgbD10aGlzLmxhc3Q7'@;
put 'cmV0dXJuIHRoaXMubGFzdD10aGlzLmxhc3QucHJldixsfXNoaWZ0KCl7aWYobnVsbD09PXRoaXMuZmlyc3QpcmV0dXJuIG51bGw7Y29uc3QgbD10aGlzLmZpcnN0O3JldHVybiB0aGlzLmZpcnN0PXRoaXMuZmlyc3QubmV4dCxsfXJlY3Vyc2l2ZVJldmVyc2UoKXtpZighdGhpcy5maXJzdCly'@;
put 'ZXR1cm47KGZ1bmN0aW9uIGwoZCxoKXtoJiYobChoLGgubmV4dCksaC5uZXh0PWQpfSkodGhpcy5maXJzdCx0aGlzLmZpcnN0Lm5leHQpLHRoaXMuZmlyc3QubmV4dD1udWxsO2NvbnN0IGE9dGhpcy5maXJzdDt0aGlzLmZpcnN0PXRoaXMubGFzdCx0aGlzLmxhc3Q9YX1yZXZlcnNlKCl7aWYo'@;
put 'IXRoaXMuZmlyc3R8fCF0aGlzLmZpcnN0Lm5leHQpcmV0dXJuO2xldCBkLGw9dGhpcy5maXJzdC5uZXh0LGE9dGhpcy5maXJzdDtmb3IoO2w7KWQ9bC5uZXh0LGwubmV4dD1hLGEucHJldj1sLGE9bCxsPWQ7dGhpcy5maXJzdC5uZXh0PW51bGwsdGhpcy5sYXN0LnByZXY9bnVsbCxkPXRoaXMu'@;
put 'Zmlyc3QsdGhpcy5maXJzdD1hLHRoaXMubGFzdD1kfX07ZnVuY3Rpb24gVTkoYyxsLGEpe0NtZShjLGwpLGwuc2V0KGMsYSl9ZnVuY3Rpb24gQ21lKGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50'@;
put 'cyB0d2ljZSBvbiBhbiBvYmplY3QiKX1mdW5jdGlvbiB2bChjLGwpe3JldHVybiBjLmdldChFSChjLGwpKX1mdW5jdGlvbiBVaChjLGwsYSl7cmV0dXJuIGMuc2V0KEVIKGMsbCksYSksYX1mdW5jdGlvbiBFSChjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkp'@;
put 'cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9dmFyIFhwPW5ldyBXZWFrTWFwLEpwPW5ldyBXZWFrTWFwLFFwPW5ldyBXZWFrTWFwLGU0PW5ldyBXZWFrTWFwLHFR'@;
put 'PW5ldyBXZWFrTWFwLFRIPW5ldyBXZWFrTWFwLEFIPW5ldyBXZWFrTWFwLFhRPW5ldyBXZWFrU2V0O2NsYXNzIGlwdHtjb25zdHJ1Y3RvcihsKXtsZXR7bWVyZ2VkQ2VsbHNHZXR0ZXI6YSxyb3dJbmRleE1hcHBlcjpkLGNvbHVtbkluZGV4TWFwcGVyOmh9PWw7KGZ1bmN0aW9uIHJwdChjLGwp'@;
put 'e0NtZShjLGwpLGwuYWRkKGMpfSkodGhpcyxYUSksVTkodGhpcyxYcCxuZXcgeEgpLFU5KHRoaXMsSnAsbmV3IHhIKSxVOSh0aGlzLFFwLG51bGwpLFU5KHRoaXMsZTQsbnVsbCksVTkodGhpcyxxUSxudWxsKSxVOSh0aGlzLFRILG51bGwpLFU5KHRoaXMsQUgsbnVsbCksVWgocVEsdGhpcyxh'@;
put 'KSxVaChUSCx0aGlzLGQpLFVoKEFILHRoaXMsaCl9Z2V0Q3VycmVudFZlcnRpY2FsTm9kZSgpe3JldHVybiB2bChlNCx0aGlzKS5kYXRhfWdldEZpcnN0VmVydGljYWxOb2RlKCl7cmV0dXJuIHZsKEpwLHRoaXMpLmZpcnN0LmRhdGF9Z2V0TmV4dFZlcnRpY2FsTm9kZSgpe3JldHVybiB2bChl'@;
put 'NCx0aGlzKS5uZXh0LmRhdGF9Z2V0UHJldlZlcnRpY2FsTm9kZSgpe3JldHVybiB2bChlNCx0aGlzKS5wcmV2LmRhdGF9Z2V0Q3VycmVudEhvcml6b250YWxOb2RlKCl7cmV0dXJuIHZsKFFwLHRoaXMpLmRhdGF9Z2V0Rmlyc3RIb3Jpem9udGFsTm9kZSgpe3JldHVybiB2bChYcCx0aGlzKS5m'@;
put 'aXJzdC5kYXRhfWdldE5leHRIb3Jpem9udGFsTm9kZSgpe3JldHVybiB2bChRcCx0aGlzKS5uZXh0LmRhdGF9Z2V0UHJldkhvcml6b250YWxOb2RlKCl7cmV0dXJuIHZsKFFwLHRoaXMpLnByZXYuZGF0YX1zZXRQcmV2Tm9kZUFzQWN0aXZlKCl7VWgoZTQsdGhpcyx2bChlNCx0aGlzKS5wcmV2'@;
put 'KSxVaChRcCx0aGlzLHZsKFFwLHRoaXMpLnByZXYpfXNldE5leHROb2RlQXNBY3RpdmUoKXtVaChlNCx0aGlzLHZsKGU0LHRoaXMpLm5leHQpLFVoKFFwLHRoaXMsdmwoUXAsdGhpcykubmV4dCl9YnVpbGRGb2N1c09yZGVyKGwpe2NvbnN0IGE9bC5nZXRUb3BTdGFydENvcm5lcigpLGQ9bC5n'@;
put 'ZXRCb3R0b21FbmRDb3JuZXIoKSxoPW5ldyBXZWFrU2V0O1VoKFhwLHRoaXMsbmV3IHhIKTtmb3IobGV0IHY9YS5yb3c7djw9ZC5yb3c7disrKWlmKCF2bChUSCx0aGlzKS5pc0hpZGRlbih2KSlmb3IobGV0IE09YS5jb2w7TTw9ZC5jb2w7TSsrKXtpZih2bChBSCx0aGlzKS5pc0hpZGRlbihN'@;
put 'KSljb250aW51ZTtjb25zdCBEPUVIKFhRLHRoaXMsU21lKS5jYWxsKHRoaXMsbCx2bChYcCx0aGlzKSxoLHYsTSk7RCYmVWgoUXAsdGhpcyxEKX12bChYcCx0aGlzKS5maXJzdCYmKHZsKFhwLHRoaXMpLmZpcnN0LnByZXY9dmwoWHAsdGhpcykubGFzdCx2bChYcCx0aGlzKS5sYXN0Lm5leHQ9'@;
put 'dmwoWHAsdGhpcykuZmlyc3QpO2NvbnN0IGY9bmV3IFdlYWtTZXQ7VWgoSnAsdGhpcyxuZXcgeEgpO2ZvcihsZXQgdj1hLmNvbDt2PD1kLmNvbDt2KyspaWYoIXZsKEFILHRoaXMpLmlzSGlkZGVuKHYpKWZvcihsZXQgTT1hLnJvdztNPD1kLnJvdztNKyspe2lmKHZsKFRILHRoaXMpLmlzSGlk'@;
put 'ZGVuKE0pKWNvbnRpbnVlO2NvbnN0IEQ9RUgoWFEsdGhpcyxTbWUpLmNhbGwodGhpcyxsLHZsKEpwLHRoaXMpLGYsTSx2KTtEJiZVaChlNCx0aGlzLEQpfXZsKEpwLHRoaXMpLmZpcnN0JiYodmwoSnAsdGhpcykuZmlyc3QucHJldj12bChKcCx0aGlzKS5sYXN0LHZsKEpwLHRoaXMpLmxhc3Qu'@;
put 'bmV4dD12bChKcCx0aGlzKS5maXJzdCl9c2V0QWN0aXZlTm9kZShsLGEpe3JldHVybiB2bChYcCx0aGlzKS5pbm9yZGVyKGQ9Pntjb25zdHtyb3dTdGFydDpoLHJvd0VuZDpmLGNvbFN0YXJ0OnYsY29sRW5kOk19PWQuZGF0YTtpZihsPj1oJiZsPD1mJiZhPj12JiZhPD1NKXJldHVybiBVaChR'@;
put 'cCx0aGlzLGQpLCExfSksdmwoSnAsdGhpcykuaW5vcmRlcihkPT57Y29uc3R7cm93U3RhcnQ6aCxyb3dFbmQ6Zixjb2xTdGFydDp2LGNvbEVuZDpNfT1kLmRhdGE7aWYobD49aCYmbDw9ZiYmYT49diYmYTw9TSlyZXR1cm4gVWgoZTQsdGhpcyxkKSwhMX0pLHRoaXN9fWZ1bmN0aW9uIFNtZShj'@;
put 'LGwsYSxkLGgpe2NvbnN0IGY9Yy5nZXRUb3BTdGFydENvcm5lcigpLHY9Yy5nZXRCb3R0b21FbmRDb3JuZXIoKSxNPWMuaGlnaGxpZ2h0LmNsb25lKCkubm9ybWFsaXplKCksRD12bChxUSx0aGlzKS5jYWxsKHRoaXMsZCxoKTtpZihEJiZhLmhhcyhEKSlyZXR1cm4gbnVsbDtjb25zdCBaPXtj'@;
put 'b2xTdGFydDpoLGNvbEVuZDpoLHJvd1N0YXJ0OmQscm93RW5kOmR9O2lmKEQpe2lmKGEuYWRkKEQpLEQucm93PGYucm93fHxELnJvdytELnJvd3NwYW4tMT52LnJvd3x8RC5jb2w8Zi5jb2x8fEQuY29sK0QuY29sc3Bhbi0xPnYuY29sKXJldHVybiBudWxsO1ouY29sU3RhcnQ9RC5jb2wsWi5j'@;
put 'b2xFbmQ9RC5jb2wrRC5jb2xzcGFuLTEsWi5yb3dTdGFydD1ELnJvdyxaLnJvd0VuZD1ELnJvdytELnJvd3NwYW4tMX1jb25zdCByZT1sLnB1c2goWik7cmV0dXJuIGQ9PT1NLnJvdyYmaD09PU0uY29sfHxEJiZNLnJvdz49RC5yb3cmJk0ucm93PD1ELnJvdytELnJvd3NwYW4tMSYmTS5jb2w+'@;
put 'PUQuY29sJiZNLmNvbDw9RC5jb2wrRC5jb2xzcGFuLTE/cmU6bnVsbH1mdW5jdGlvbiBNbWUoYyxsLGEpe2NvbnN0e3ZpZXc6ZCxyb3dJbmRleE1hcHBlcjpofT1jLGY9ZC5nZXRTdHlsZXNIYW5kbGVyKCksdj1kLmdldERlZmF1bHRSb3dIZWlnaHQoKTtsZXQgTT0wO2ZvcihsZXQgWj1sO1o8'@;
put 'bCthO1orKylpZighaC5pc0hpZGRlbihaKSl7dmFyIEQ7TSs9bnVsbCE9PShEPWMuZ2V0Um93SGVpZ2h0KFopKSYmdm9pZCAwIT09RD9EOnYsMD09PVomJiFmLmlzQ2xhc3NpY1RoZW1lKCkmJihNKz0xKX1yZXR1cm4gTX1mdW5jdGlvbiBrSChjLGwsYSl7eG1lKGMsbCksbC5zZXQoYyxhKX1m'@;
put 'dW5jdGlvbiB4bWUoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfWZ1bmN0aW9uIEpRKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBzcHQoYyl7dmFyIGw9'@;
put 'ZnVuY3Rpb24gbHB0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3'@;
put 'IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQ'@;
put 'cm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31mdW5jdGlvbiBwQShjLGwsYSl7cmV0dXJuIGMuc2V0KGtsKGMsbCksYSksYX1mdW5jdGlvbiB0YyhjLGwpe3JldHVybiBjLmdldChrbChjLGwpKX1mdW5jdGlv'@;
put 'biBrbChjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9U2EuZ2V0U2luZ2xldG9u'@;
put 'KCkucmVnaXN0ZXIoImJlZm9yZU1lcmdlQ2VsbHMiKSxTYS5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYWZ0ZXJNZXJnZUNlbGxzIiksU2EuZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImJlZm9yZVVubWVyZ2VDZWxscyIpLFNhLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJhZnRlclVubWVy'@;
put 'Z2VDZWxscyIpO2NvbnN0IFFRPSJtZXJnZUNlbGxzIixFbWU9UVE7dmFyIFEyPW5ldyBXZWFrTWFwLGVmPW5ldyBXZWFrTWFwLHQ0PW5ldyBXZWFrTWFwLFRtZT1uZXcgV2Vha01hcCxWbD1uZXcgV2Vha1NldDtjbGFzcyB1cHQgZXh0ZW5kcyBGc3tjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFy'@;
put 'Z3VtZW50cyksZnVuY3Rpb24gb3B0KGMsbCl7eG1lKGMsbCksbC5hZGQoYyl9KHRoaXMsVmwpLEpRKHRoaXMsIm1lcmdlZENlbGxzQ29sbGVjdGlvbiIsbnVsbCksSlEodGhpcywiYXV0b2ZpbGxDYWxjdWxhdGlvbnMiLG51bGwpLEpRKHRoaXMsInNlbGVjdGlvbkNhbGN1bGF0aW9ucyIsbnVs'@;
put 'bCksa0godGhpcyxRMixudWxsKSxrSCh0aGlzLGVmLHtyb3c6MCxjb2w6MH0pLGtIKHRoaXMsdDQsbmV3IGlwdCh7bWVyZ2VkQ2VsbHNHZXR0ZXI6KGwsYSk9PnRoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLmdldChsLGEpLHJvd0luZGV4TWFwcGVyOnRoaXMuaG90LnJvd0luZGV4TWFwcGVy'@;
put 'LGNvbHVtbkluZGV4TWFwcGVyOnRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyfSkpLGtIKHRoaXMsVG1lLGZ1bmN0aW9uIGFwdChjKXtjb25zdHtob3Q6bH09Yyx7cm93SW5kZXhNYXBwZXI6YSxjb2x1bW5JbmRleE1hcHBlcjpkfT1sLGg9bmV3IE1hcDtyZXR1cm57YmVmb3JlOmZ1bmN0aW9u'@;
put 'IGYoKXt9LGFmdGVyOmZ1bmN0aW9uIHYoTSxELFope2NvbnN0IHJlPWMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLmdldChELFopO2lmKCFxbyhyZSkpcmV0dXJuIE0ucmVtb3ZlQXR0cmlidXRlKCJyb3dzcGFuIiksTS5yZW1vdmVBdHRyaWJ1dGUoImNvbHNwYW4iKSxBRSgpJiZoLmhhcyhEKSYm'@;
put 'IWwuZ2V0U2V0dGluZ3MoKS5yb3dIZWFkZXJzJiYoTS5zdHlsZS5oZWlnaHQ9YCR7aC5nZXQoRCl9cHhgLGguZGVsZXRlKEQpKSx2b2lkKE0uc3R5bGUuZGlzcGxheT0iIik7Y29uc3R7cm93OmNlLGNvbDpiZSxjb2xzcGFuOkVlLHJvd3NwYW46QmV9PXJlLFtxZSxydF09Yy50cmFuc2xhdGVN'@;
put 'ZXJnZWRDZWxsVG9SZW5kZXJhYmxlKGNlLEJlLGJlLEVlKSxwdD1jLmdldFNldHRpbmcoInZpcnR1YWxpemVkIik7aWYoQUUoKSYmMD09PWJlJiYhbC5nZXRTZXR0aW5ncygpLnJvd0hlYWRlcnMpe2NvbnN0IG1yPU1tZShsLGNlLEJlKTtoLnNldChELG1yL0JlKX1jb25zdCB2bj1xZS1hLmdl'@;
put 'dFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoRCkrMSxDbj1ydC1kLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoWikrMTtsZXQgdG49YS5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoY2UsMSksTW49ZC5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoYmUsMSk7aWYocHQpe2NvbnN0IG1y'@;
put 'PWwudmlldy5nZXRBY3RpdmVPdmVybGF5TmFtZSgpO1sidG9wIiwidG9wX2lubGluZV9zdGFydF9jb3JuZXIiXS5pbmNsdWRlcyhtcil8fCh0bj1NYXRoLm1heCh0bixsLmdldEZpcnN0UmVuZGVyZWRWaXNpYmxlUm93KCkpKSxbImlubGluZV9zdGFydCIsInRvcF9pbmxpbmVfc3RhcnRfY29y'@;
put 'bmVyIiwiYm90dG9tX2lubGluZV9zdGFydF9jb3JuZXIiXS5pbmNsdWRlcyhtcil8fChNbj1NYXRoLm1heChNbixsLmdldEZpcnN0UmVuZGVyZWRWaXNpYmxlQ29sdW1uKCkpKX1jb25zdCBDcj1NYXRoLm1pbihCZSx2biksR3I9TWF0aC5taW4oRWUsQ24pO3RuPT09RCYmTW49PT1aPyhNLnNl'@;
put 'dEF0dHJpYnV0ZSgicm93c3BhbiIsQ3IpLE0uc2V0QXR0cmlidXRlKCJjb2xzcGFuIixHcikpOihNLnJlbW92ZUF0dHJpYnV0ZSgicm93c3BhbiIpLE0ucmVtb3ZlQXR0cmlidXRlKCJjb2xzcGFuIiksTS5zdHlsZS5kaXNwbGF5PSJub25lIil9fX0odGhpcykpfXN0YXRpYyBnZXQgUExVR0lO'@;
put 'X0tFWSgpe3JldHVybiBRUX1zdGF0aWMgZ2V0IFBMVUdJTl9QUklPUklUWSgpe3JldHVybiAxNTB9c3RhdGljIGdldCBERUZBVUxUX1NFVFRJTkdTKCl7cmV0dXJue1tDNGVdOiJjZWxscyIsdmlydHVhbGl6ZWQ6ITEsY2VsbHM6W119fWlzRW5hYmxlZCgpe3JldHVybiEhdGhpcy5ob3QuZ2V0'@;
put 'U2V0dGluZ3MoKVtRUV19ZW5hYmxlUGx1Z2luKCl7dmFyIGw9dGhpczt0aGlzLmVuYWJsZWR8fCh0aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbj1uZXcgWjN0KHRoaXMpLHRoaXMuYXV0b2ZpbGxDYWxjdWxhdGlvbnM9bmV3ICQzdCh0aGlzKSx0aGlzLnNlbGVjdGlvbkNhbGN1bGF0aW9ucz1u'@;
put 'ZXcgSjN0KHRoaXMpLHRoaXMuYWRkSG9vaygiYWZ0ZXJJbml0IixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiBrbChWbCxsLGRwdCkuY2FsbChsLC4uLmQpfSksdGhpcy5hZGRI'@;
put 'b29rKCJtb2RpZnlUcmFuc2Zvcm1Gb2N1cyIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4ga2woVmwsbCxmcHQpLmNhbGwobCwuLi5kKX0pLHRoaXMuYWRkSG9vaygibW9kaWZ5'@;
put 'VHJhbnNmb3JtU3RhcnQiLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIGtsKFZsLGwscHB0KS5jYWxsKGwsLi4uZCl9KSx0aGlzLmFkZEhvb2soIm1vZGlmeVRyYW5zZm9ybUVu'@;
put 'ZCIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4ga2woVmwsbCxncHQpLmNhbGwobCwuLi5kKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlU2VsZWN0aW9uSGlnaGxpZ2h0U2V0Iixm'@;
put 'dW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiBrbChWbCxsLG1wdCkuY2FsbChsLC4uLmQpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVTZXRSYW5nZVN0YXJ0IixmdW5jdGlvbigpe2Zv'@;
put 'cih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiBrbChWbCxsLGttZSkuY2FsbChsLC4uLmQpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVTZXRSYW5nZVN0YXJ0T25seSIsZnVuY3Rpb24oKXtmb3IodmFyIGE9'@;
put 'YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4ga2woVmwsbCxrbWUpLmNhbGwobCwuLi5kKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlU2VsZWN0aW9uRm9jdXNTZXQiLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50'@;
put 'cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIGtsKFZsLGwsYnB0KS5jYWxsKGwsLi4uZCl9KSx0aGlzLmFkZEhvb2soImFmdGVyU2VsZWN0aW9uRm9jdXNTZXQiLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgs'@;
put 'ZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIGtsKFZsLGwseXB0KS5jYWxsKGwsLi4uZCl9KSx0aGlzLmFkZEhvb2soImFmdGVyU2VsZWN0aW9uRW5kIixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEp'@;
put 'LGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiBrbChWbCxsLF9wdCkuY2FsbChsLC4uLmQpfSksdGhpcy5hZGRIb29rKCJtb2RpZnlHZXRDZWxsQ29vcmRzIixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsr'@;
put 'KWRbaF09YXJndW1lbnRzW2hdO3JldHVybiBrbChWbCxsLEFtZSkuY2FsbChsLC4uLmQpfSksdGhpcy5hZGRIb29rKCJtb2RpZnlHZXRDb29yZHNFbGVtZW50IixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJn'@;
put 'dW1lbnRzW2hdO3JldHVybiBrbChWbCxsLEFtZSkuY2FsbChsLC4uLmQpfSksdGhpcy5hZGRIb29rKCJhZnRlcklzTXVsdGlwbGVTZWxlY3Rpb24iLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNb'@;
put 'aF07cmV0dXJuIGtsKFZsLGwsaHB0KS5jYWxsKGwsLi4uZCl9KSx0aGlzLmFkZEhvb2soImFmdGVyUmVuZGVyZXIiLGZ1bmN0aW9uKCl7cmV0dXJuIHRjKFRtZSxsKS5hZnRlciguLi5hcmd1bWVudHMpfSksdGhpcy5hZGRIb29rKCJhZnRlckNvbnRleHRNZW51RGVmYXVsdE9wdGlvbnMiLGZ1'@;
put 'bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIGtsKFZsLGwsdnB0KS5jYWxsKGwsLi4uZCl9KSx0aGlzLmFkZEhvb2soImFmdGVyR2V0Q2VsbE1ldGEiLGZ1bmN0aW9uKCl7Zm9yKHZh'@;
put 'ciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIGtsKFZsLGwsd3B0KS5jYWxsKGwsLi4uZCl9KSx0aGlzLmFkZEhvb2soImFmdGVyVmlld3BvcnRSb3dDYWxjdWxhdG9yT3ZlcnJpZGUiLGZ1bmN0aW9uKCl7Zm9y'@;
put 'KHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIGtsKFZsLGwsQ3B0KS5jYWxsKGwsLi4uZCl9KSx0aGlzLmFkZEhvb2soImFmdGVyVmlld3BvcnRDb2x1bW5DYWxjdWxhdG9yT3ZlcnJpZGUiLGZ1bmN0aW9u'@;
put 'KCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIGtsKFZsLGwsU3B0KS5jYWxsKGwsLi4uZCl9KSx0aGlzLmFkZEhvb2soIm1vZGlmeUF1dG9maWxsUmFuZ2UiLGZ1bmN0aW9uKCl7Zm9yKHZhciBh'@;
put 'PWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIGtsKFZsLGwsTXB0KS5jYWxsKGwsLi4uZCl9KSx0aGlzLmFkZEhvb2soImFmdGVyQ3JlYXRlQ29sIixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3Ro'@;
put 'LGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiBrbChWbCxsLHhwdCkuY2FsbChsLC4uLmQpfSksdGhpcy5hZGRIb29rKCJhZnRlclJlbW92ZUNvbCIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxo'@;
put 'PTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4ga2woVmwsbCxFcHQpLmNhbGwobCwuLi5kKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJDcmVhdGVSb3ciLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1h'@;
put 'cmd1bWVudHNbaF07cmV0dXJuIGtsKFZsLGwsVHB0KS5jYWxsKGwsLi4uZCl9KSx0aGlzLmFkZEhvb2soImFmdGVyUmVtb3ZlUm93IixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVy'@;
put 'biBrbChWbCxsLEFwdCkuY2FsbChsLC4uLmQpfSksdGhpcy5hZGRIb29rKCJhZnRlckNoYW5nZSIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4ga2woVmwsbCxrcHQpLmNhbGwo'@;
put 'bCwuLi5kKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlRHJhd0JvcmRlcnMiLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIGtsKFZsLGwsRHB0KS5jYWxsKGwsLi4uZCl9KSx0aGlz'@;
put 'LmFkZEhvb2soImFmdGVyRHJhd1NlbGVjdGlvbiIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4ga2woVmwsbCxJcHQpLmNhbGwobCwuLi5kKX0pLHRoaXMuYWRkSG9vaygiYmVm'@;
put 'b3JlUmVtb3ZlQ2VsbENsYXNzTmFtZXMiLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIGtsKFZsLGwsUnB0KS5jYWxsKGwsLi4uZCl9KSx0aGlzLmFkZEhvb2soImJlZm9yZUJl'@;
put 'Z2luRWRpdGluZyIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4ga2woVmwsbCxMcHQpLmNhbGwobCwuLi5kKX0pLHRoaXMuYWRkSG9vaygibW9kaWZ5Um93SGVpZ2h0QnlPdmVy'@;
put 'bGF5TmFtZSIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4ga2woVmwsbCxPcHQpLmNhbGwobCwuLi5kKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlVW5kb1N0YWNrQ2hhbmdlIiwo'@;
put 'YSxkKT0+e2lmKCJNZXJnZUNlbGxzIj09PWQpcmV0dXJuITF9KSx0aGlzLnJlZ2lzdGVyU2hvcnRjdXRzKCksc3VwZXIuZW5hYmxlUGx1Z2luKCkpfWRpc2FibGVQbHVnaW4oKXt0aGlzLmNsZWFyQ29sbGVjdGlvbnMoKSx0aGlzLnVucmVnaXN0ZXJTaG9ydGN1dHMoKSx0aGlzLmhvdC5yZW5k'@;
put 'ZXIoKSxzdXBlci5kaXNhYmxlUGx1Z2luKCl9dXBkYXRlUGx1Z2luKCl7dGhpcy5kaXNhYmxlUGx1Z2luKCksdGhpcy5lbmFibGVQbHVnaW4oKSx0aGlzLmdlbmVyYXRlRnJvbVNldHRpbmdzKCksc3VwZXIudXBkYXRlUGx1Z2luKCl9aWZDaHJvbWVGb3JjZVJlcGFpbnQoKXtpZighTCQoKSly'@;
put 'ZXR1cm47Y29uc3QgbD1bXTtsZXQgYT1bXTt0aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5tZXJnZWRDZWxscy5mb3JFYWNoKGQ9Pntjb25zdHtyb3c6aCxyb3dzcGFuOmZ9PWQ7Zm9yKGxldCB2PWgrMTt2PGgrZjt2KyspYS5wdXNoKHYpfSksYT1bLi4ubmV3IFNldChhKV0sYS5mb3JFYWNo'@;
put 'KGQ9Pntjb25zdCBoPXRoaXMuaG90LnJvd0luZGV4TWFwcGVyLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoZCk7dGhpcy5ob3Qudmlldy5fd3Qud3RPdmVybGF5cy5nZXRPdmVybGF5cyghMCkubWFwKGY9PiJtYXN0ZXIiPT09Zj8ubmFtZT9mOmYuY2xvbmUud3RUYWJsZSkuZm9yRWFj'@;
put 'aChmPT57Y29uc3Qgdj1mLmdldFJvdyhoKTt2JiYodi5zdHlsZS5iYWNrZ3JvdW5kPV9FKHYsImJhY2tncm91bmRDb2xvciIpLnJlcGxhY2UoIikiLCIsIDAuOTkpIiksbC5wdXNoKHYpKX0pfSksdGhpcy5ob3QuX3JlZ2lzdGVyVGltZW91dCgoKT0+e2wuZm9yRWFjaChkPT57dmFyIGg7ZC5z'@;
put 'dHlsZS5iYWNrZ3JvdW5kPW51bGw9PT0oaD1fRShkLCJiYWNrZ3JvdW5kQ29sb3IiKSl8fHZvaWQgMD09PWg/dm9pZCAwOmgucmVwbGFjZSgiLCAwLjk5KSIsIikiKX0pfSwxKX12YWxpZGF0ZVNldHRpbmcobCl7cmV0dXJuISghbHx8KHFwLmNvbnRhaW5zTmVnYXRpdmVWYWx1ZXMobCk/KGls'@;
put 'KHFwLk5FR0FUSVZFX1ZBTFVFU19XQVJOSU5HKGwpKSwxKTpxcC5pc091dE9mQm91bmRzKGwsdGhpcy5ob3QuY291bnRSb3dzKCksdGhpcy5ob3QuY291bnRDb2xzKCkpPyhpbChxcC5JU19PVVRfT0ZfQk9VTkRTX1dBUk5JTkcobCkpLDEpOnFwLmlzU2luZ2xlQ2VsbChsKT8oaWwocXAuSVNf'@;
put 'U0lOR0xFX0NFTEwobCkpLDEpOnFwLmNvbnRhaW5zWmVyb1NwYW4obCkmJihpbChxcC5aRVJPX1NQQU5fV0FSTklORyhsKSksMSkpKX1nZW5lcmF0ZUZyb21TZXR0aW5ncygpe2NvbnN0IGw9dGhpcy5nZXRTZXR0aW5nKCJjZWxscyIpLmZpbHRlcihoPT50aGlzLnZhbGlkYXRlU2V0dGluZyho'@;
put 'KSksYT10aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5maWx0ZXJPdmVybGFwcGluZ01lcmdlQ2VsbHMobCksZD1bXTthLmZvckVhY2goaD0+e2NvbnN0e3JvdzpmLGNvbDp2LHJvd3NwYW46TSxjb2xzcGFuOkR9PWgsWj10aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhmLHYpLHJlPXRoaXMu'@;
put 'aG90Ll9jcmVhdGVDZWxsQ29vcmRzKGYrTS0xLHYrRC0xKSxjZT10aGlzLmhvdC5fY3JlYXRlQ2VsbFJhbmdlKFosWixyZSk7dGhpcy5tZXJnZVJhbmdlKGNlLCEwLCEwKTtmb3IobGV0IGJlPWY7YmU8ZitNO2JlKyspZm9yKGxldCBFZT12O0VlPHYrRDtFZSsrKShiZSE9PWZ8fEVlIT09dikm'@;
put 'JmQucHVzaChbYmUsRWUsbnVsbF0pfSksMCE9PWQubGVuZ3RoJiZ0aGlzLmhvdC5zZXREYXRhQXRDZWxsKGQsdm9pZCAwLHZvaWQgMCx0aGlzLnBsdWdpbk5hbWUpfWNsZWFyQ29sbGVjdGlvbnMoKXt0aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5jbGVhcigpfWNhbk1lcmdlUmFuZ2UobCl7'@;
put 'cmV0dXJuISEoYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0mJmFyZ3VtZW50c1sxXSl8fHRoaXMudmFsaWRhdGVTZXR0aW5nKGwpfW1lcmdlU2VsZWN0aW9uKCl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRz'@;
put 'WzBdOnRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCk7aWYoIWwpcmV0dXJuO2wuc2V0RGlyZWN0aW9uKHRoaXMuaG90LmlzUnRsKCk/Ik5FLVNXIjoiTlctU0UiKTtjb25zdHtmcm9tOmEsdG86ZH09bDt0aGlzLnVubWVyZ2VSYW5nZShsLCEwKSx0aGlzLm1lcmdlUmFuZ2UobCksdGhp'@;
put 'cy5ob3Quc2VsZWN0Q2VsbChhLnJvdyxhLmNvbCxkLnJvdyxkLmNvbCwhMSl9dW5tZXJnZVNlbGVjdGlvbigpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp0aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpO2lmKCFsKXJl'@;
put 'dHVybjtjb25zdHtmcm9tOmEsdG86ZH09bDt0aGlzLnVubWVyZ2VSYW5nZShsLCEwKSx0aGlzLmhvdC5zZWxlY3RDZWxsKGEucm93LGEuY29sLGQucm93LGQuY29sLCExKX1tZXJnZVJhbmdlKGwpe2xldCBhPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdJiZhcmd1'@;
put 'bWVudHNbMV0sZD1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXSYmYXJndW1lbnRzWzJdO2NvbnN0IGg9bC5nZXRUb3BTdGFydENvcm5lcigpLGY9bC5nZXRCb3R0b21FbmRDb3JuZXIoKSx2PXtyb3c6aC5yb3csY29sOmguY29sLHJvd3NwYW46Zi5yb3ctaC5yb3cr'@;
put 'MSxjb2xzcGFuOmYuY29sLWguY29sKzF9LE09W107bGV0IEQ9bnVsbDtyZXR1cm4hIXRoaXMuY2FuTWVyZ2VSYW5nZSh2LGEpJiYodGhpcy5ob3QucnVuSG9va3MoImJlZm9yZU1lcmdlQ2VsbHMiLGwsYSksR2EoMCx2LnJvd3NwYW4tMSxyZT0+e0dhKDAsdi5jb2xzcGFuLTEsY2U9PntsZXQg'@;
put 'YmU9bnVsbDtNW3JlXXx8KE1bcmVdPVtdKSwwPT09cmUmJjA9PT1jZT9iZT10aGlzLmhvdC5nZXRTb3VyY2VEYXRhQXRDZWxsKHRoaXMuaG90LnRvUGh5c2ljYWxSb3codi5yb3cpLHRoaXMuaG90LnRvUGh5c2ljYWxDb2x1bW4odi5jb2wpKTp0aGlzLmhvdC5zZXRDZWxsTWV0YSh2LnJvdyty'@;
put 'ZSx2LmNvbCtjZSwiaGlkZGVuIiwhMCksTVtyZV1bY2VdPWJlfSl9KSx0aGlzLmhvdC5zZXRDZWxsTWV0YSh2LnJvdyx2LmNvbCwic3Bhbm5lZCIsITApLCF0aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5hZGQodixhKXx8KGQ/RD1bdi5yb3csdi5jb2wsTV06dGhpcy5ob3QucG9wdWxhdGVG'@;
put 'cm9tQXJyYXkodi5yb3csdi5jb2wsTSx2b2lkIDAsdm9pZCAwLHRoaXMucGx1Z2luTmFtZSksYXx8dGhpcy5pZkNocm9tZUZvcmNlUmVwYWludCgpLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlck1lcmdlQ2VsbHMiLGwsdixhKSxEKSl9dW5tZXJnZVJhbmdlKGwpe2xldCBhPWFyZ3VtZW50cy5s'@;
put 'ZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdJiZhcmd1bWVudHNbMV07Y29uc3QgZD10aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5nZXRXaXRoaW5SYW5nZShsKTswIT09ZC5sZW5ndGgmJih0aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlVW5tZXJnZUNlbGxzIixsLGEpLFluKGQsaD0+'@;
put 'e3RoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLnJlbW92ZShoLnJvdyxoLmNvbCksR2EoMCxoLnJvd3NwYW4tMSxmPT57R2EoMCxoLmNvbHNwYW4tMSx2PT57dGhpcy5ob3QucmVtb3ZlQ2VsbE1ldGEoaC5yb3crZixoLmNvbCt2LCJoaWRkZW4iKSx0aGlzLmhvdC5yZW1vdmVDZWxsTWV0YSho'@;
put 'LnJvdytmLGguY29sK3YsImNvcHlhYmxlIil9KX0pLHRoaXMuaG90LnJlbW92ZUNlbGxNZXRhKGgucm93LGguY29sLCJzcGFubmVkIil9KSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJVbm1lcmdlQ2VsbHMiLGwsYSksdGhpcy5ob3QucmVuZGVyKCkpfXRvZ2dsZU1lcmdlKGwpe2NvbnN0e2Zy'@;
put 'b206YSx0bzpkfT1sLmNsb25lKCkubm9ybWFsaXplKCksaD10aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5nZXQoYS5yb3csYS5jb2wpO2gucm93PT09YS5yb3cmJmguY29sPT09YS5jb2wmJmgucm93K2gucm93c3Bhbi0xPT09ZC5yb3cmJmguY29sK2guY29sc3Bhbi0xPT09ZC5jb2w/dGhp'@;
put 'cy51bm1lcmdlUmFuZ2UobCk6dGhpcy5tZXJnZVNlbGVjdGlvbihsKX1tZXJnZShsLGEsZCxoKXtjb25zdCBmPXRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKGwsYSksdj10aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhkLGgpO3RoaXMubWVyZ2VSYW5nZSh0aGlzLmhvdC5fY3JlYXRlQ2Vs'@;
put 'bFJhbmdlKGYsZix2KSl9dW5tZXJnZShsLGEsZCxoKXtjb25zdCBmPXRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKGwsYSksdj10aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhkLGgpO3RoaXMudW5tZXJnZVJhbmdlKHRoaXMuaG90Ll9jcmVhdGVDZWxsUmFuZ2UoZixmLHYpKX1yZWdpc3Rl'@;
put 'clNob3J0Y3V0cygpe3RoaXMuaG90LmdldFNob3J0Y3V0TWFuYWdlcigpLmdldENvbnRleHQoImdyaWQiKS5hZGRTaG9ydGN1dCh7a2V5czpbWyJDb250cm9sIiwibSJdXSxjYWxsYmFjazooKT0+e2NvbnN0IGQ9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKTtkJiYhZC5pc1Npbmds'@;
put 'ZUhlYWRlcigpJiYodGhpcy50b2dnbGVNZXJnZShkKSx0aGlzLmhvdC5yZW5kZXIoKSl9LHJ1bk9ubHlJZjpkPT4hZC5hbHRLZXksZ3JvdXA6RW1lfSl9dW5yZWdpc3RlclNob3J0Y3V0cygpe3RoaXMuaG90LmdldFNob3J0Y3V0TWFuYWdlcigpLmdldENvbnRleHQoImdyaWQiKS5yZW1vdmVT'@;
put 'aG9ydGN1dHNCeUdyb3VwKEVtZSl9bW9kaWZ5Vmlld3BvcnRSb3dTdGFydChsLGEpe2NvbnN0IGQ9dGhpcy5ob3Qucm93SW5kZXhNYXBwZXIsaD1kLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgobC5zdGFydFJvdyk7Zm9yKGxldCBmPTA7ZjxhO2YrPTEpe2NvbnN0IHY9dGhpcy5tZXJn'@;
put 'ZWRDZWxsc0NvbGxlY3Rpb24uZ2V0KGgsZik7aWYocW8odikpe2NvbnN0IE09ZC5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KGQuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KHYucm93LDEpKTtpZihNPGwuc3RhcnRSb3cpcmV0dXJuIGwuc3RhcnRSb3c9TSx2b2lkIHRoaXMubW9kaWZ5'@;
put 'Vmlld3BvcnRSb3dTdGFydChsLGEpfX19bW9kaWZ5Vmlld3BvcnRSb3dFbmQobCxhKXtjb25zdCBkPXRoaXMuaG90LnJvd0luZGV4TWFwcGVyLGg9ZC5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KGwuZW5kUm93KTtmb3IobGV0IGY9MDtmPGE7Zis9MSl7Y29uc3Qgdj10aGlzLm1lcmdl'@;
put 'ZENlbGxzQ29sbGVjdGlvbi5nZXQoaCxmKTtpZihxbyh2KSl7Y29uc3QgRD1kLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoZC5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgodi5yb3crdi5yb3dzcGFuLTEsLTEpKTtpZihEPmwuZW5kUm93KXJldHVybiBsLmVuZFJvdz1ELHZvaWQgdGhp'@;
put 'cy5tb2RpZnlWaWV3cG9ydFJvd0VuZChsLGEpfX19bW9kaWZ5Vmlld3BvcnRDb2x1bW5TdGFydChsLGEpe2NvbnN0IGQ9dGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIsaD1kLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgobC5zdGFydENvbHVtbik7Zm9yKGxldCBmPTA7ZjxhO2YrPTEp'@;
put 'e2NvbnN0IHY9dGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24uZ2V0KGYsaCk7aWYocW8odikpe2NvbnN0IE09ZC5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KGQuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KHYuY29sLDEpKTtpZihNPGwuc3RhcnRDb2x1bW4pcmV0dXJuIGwuc3RhcnRD'@;
put 'b2x1bW49TSx2b2lkIHRoaXMubW9kaWZ5Vmlld3BvcnRDb2x1bW5TdGFydChsLGEpfX19bW9kaWZ5Vmlld3BvcnRDb2x1bW5FbmQobCxhKXtjb25zdCBkPXRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLGg9ZC5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KGwuZW5kQ29sdW1uKTtmb3Io'@;
put 'bGV0IGY9MDtmPGE7Zis9MSl7Y29uc3Qgdj10aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5nZXQoZixoKTtpZihxbyh2KSl7Y29uc3QgRD1kLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoZC5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgodi5jb2wrdi5jb2xzcGFuLTEsLTEpKTtpZihE'@;
put 'PmwuZW5kQ29sdW1uKXJldHVybiBsLmVuZENvbHVtbj1ELHZvaWQgdGhpcy5tb2RpZnlWaWV3cG9ydENvbHVtbkVuZChsLGEpfX19dHJhbnNsYXRlTWVyZ2VkQ2VsbFRvUmVuZGVyYWJsZShsLGEsZCxoKXtjb25zdHtyb3dJbmRleE1hcHBlcjpmLGNvbHVtbkluZGV4TWFwcGVyOnZ9PXRoaXMu'@;
put 'aG90O2xldCBNLEQ7cmV0dXJuIE09MD09PWE/Zi5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgobCwxKTpmLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChsK2EtMSwtMSksRD0wPT09aD92LmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChkLDEpOnYuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGQr'@;
put 'aC0xLC0xKSxbbD49MD9mLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoTSk6bCxkPj0wP3YuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChEKTpkXX19ZnVuY3Rpb24gZHB0KCl7dGhpcy5nZW5lcmF0ZUZyb21TZXR0aW5ncygpLHRoaXMuaG90LnJlbmRlcigpfWZ1bmN0aW9uIGhw'@;
put 'dChjKXtpZihjKXtjb25zdCBsPXRoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLm1lcmdlZENlbGxzLGE9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSxkPWEuZ2V0VG9wU3RhcnRDb3JuZXIoKSxoPWEuZ2V0Qm90dG9tRW5kQ29ybmVyKCk7Zm9yKGxldCBmPTA7ZjxsLmxlbmd0aDtm'@;
put 'Kz0xKWlmKGQucm93PT09bFtmXS5yb3cmJmQuY29sPT09bFtmXS5jb2wmJmgucm93PT09bFtmXS5yb3crbFtmXS5yb3dzcGFuLTEmJmguY29sPT09bFtmXS5jb2wrbFtmXS5jb2xzcGFuLTEpcmV0dXJuITF9cmV0dXJuIGN9ZnVuY3Rpb24gZnB0KGMpe3RjKGVmLHRoaXMpLnJvdz1jLnJvdyx0'@;
put 'YyhlZix0aGlzKS5jb2w9Yy5jb2x9ZnVuY3Rpb24gcHB0KGMpe2NvbnN0IGw9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSx7aGlnaGxpZ2h0OmF9PWwse2NvbHVtbkluZGV4TWFwcGVyOmQscm93SW5kZXhNYXBwZXI6aH09dGhpcy5ob3Q7dGMoUTIsdGhpcykmJihudWxsIT09aC5n'@;
put 'ZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KHRjKFEyLHRoaXMpLnJvdykmJihhLnJvdz10YyhRMix0aGlzKS5yb3cpLG51bGwhPT1kLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgodGMoUTIsdGhpcykuY29sKSYmKGEuY29sPXRjKFEyLHRoaXMpLmNvbCkscEEoUTIsdGhpcyxudWxs'@;
put 'KSk7Y29uc3QgZj10aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5nZXQoYS5yb3csYS5jb2wpO2lmKCFmKXJldHVybjtjb25zdCB2PWYuY29sLE09Zi5jb2wrZi5jb2xzcGFuLTE7aWYoYy5jb2w8MCl7Y29uc3QgY2U9ZC5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoYS5jb2w+PXYmJmEuY29s'@;
put 'PD1NP3YtMTpNLC0xKTtjLmNvbD1udWxsPT09Y2U/LXRoaXMuaG90LnZpZXcuY291bnRSZW5kZXJhYmxlQ29sdW1uc0luUmFuZ2UoMCxhLmNvbCk6LU1hdGgubWF4KHRoaXMuaG90LnZpZXcuY291bnRSZW5kZXJhYmxlQ29sdW1uc0luUmFuZ2UoY2UsYS5jb2wpLTEsMSl9ZWxzZSBpZihjLmNv'@;
put 'bD4wKXtjb25zdCBjZT1kLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChhLmNvbD49diYmYS5jb2w8PU0/TSsxOnYsMSk7Yy5jb2w9bnVsbD09PWNlP3RoaXMuaG90LnZpZXcuY291bnRSZW5kZXJhYmxlQ29sdW1uc0luUmFuZ2UoYS5jb2wsdGhpcy5ob3QuY291bnRDb2xzKCkpOk1hdGgubWF4'@;
put 'KHRoaXMuaG90LnZpZXcuY291bnRSZW5kZXJhYmxlQ29sdW1uc0luUmFuZ2UoYS5jb2wsY2UpLTEsMSl9Y29uc3QgRD1mLnJvdyxaPWYucm93K2Yucm93c3Bhbi0xO2lmKGMucm93PDApe2NvbnN0IGNlPWguZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGEucm93Pj1EJiZhLnJvdzw9Wj9ELTE6'@;
put 'WiwtMSk7Yy5yb3c9bnVsbD09PWNlPy10aGlzLmhvdC52aWV3LmNvdW50UmVuZGVyYWJsZVJvd3NJblJhbmdlKDAsYS5yb3cpOi1NYXRoLm1heCh0aGlzLmhvdC52aWV3LmNvdW50UmVuZGVyYWJsZVJvd3NJblJhbmdlKGNlLGEucm93KS0xLDEpfWVsc2UgaWYoYy5yb3c+MCl7Y29uc3QgY2U9'@;
put 'aC5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoYS5yb3c+PUQmJmEucm93PD1aP1orMTpELDEpO2Mucm93PW51bGw9PT1jZT90aGlzLmhvdC52aWV3LmNvdW50UmVuZGVyYWJsZVJvd3NJblJhbmdlKGEucm93LHRoaXMuaG90LmNvdW50Um93cygpKTpNYXRoLm1heCh0aGlzLmhvdC52aWV3LmNv'@;
put 'dW50UmVuZGVyYWJsZVJvd3NJblJhbmdlKGEucm93LGNlKS0xLDEpfX1mdW5jdGlvbiBncHQoYyl7Y29uc3QgbD10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLGE9bC5jbG9uZSgpLHt0bzpkfT1sLHtjb2x1bW5JbmRleE1hcHBlcjpoLHJvd0luZGV4TWFwcGVyOmZ9PXRoaXMuaG90'@;
put 'LHY9KE0sRCk9PnthLmV4cGFuZCh0aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhNLEQpKTtmb3IobGV0IFo9MDtaPHRoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLm1lcmdlZENlbGxzLmxlbmd0aDtaKz0xKWEuZXhwYW5kQnlSYW5nZSh0aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5tZXJn'@;
put 'ZWRDZWxsc1taXS5nZXRSYW5nZSgpKX07aWYoYy5jb2w8MCl7bGV0IE09dGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24uZ2V0U3RhcnRNb3N0Q29sdW1uSW5kZXgobCxkLmNvbCkrYy5jb2w7dihkLnJvdyxNKSwiRS1XIj09PWwuZ2V0SG9yaXpvbnRhbERpcmVjdGlvbigpJiYiRS1XIj09PWEu'@;
put 'Z2V0SG9yaXpvbnRhbERpcmVjdGlvbigpJiYoTT1hLmdldFRvcFN0YXJ0Q29ybmVyKCkuY29sKTtjb25zdCBEPWguZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KE0sMSk7bnVsbCE9PUQmJihjLmNvbD0tTWF0aC5tYXgodGhpcy5ob3Qudmlldy5jb3VudFJlbmRlcmFibGVDb2x1bW5zSW5SYW5n'@;
put 'ZShELGQuY29sKS0xLDEpKX1lbHNlIGlmKGMuY29sPjApe2xldCBNPXRoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLmdldEVuZE1vc3RDb2x1bW5JbmRleChsLGQuY29sKStjLmNvbDt2KGQucm93LE0pLCJXLUUiPT09bC5nZXRIb3Jpem9udGFsRGlyZWN0aW9uKCkmJiJXLUUiPT09YS5nZXRI'@;
put 'b3Jpem9udGFsRGlyZWN0aW9uKCkmJihNPWEuZ2V0Qm90dG9tRW5kQ29ybmVyKCkuY29sKTtjb25zdCBEPWguZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KE0sLTEpO251bGwhPT1EJiYoYy5jb2w9TWF0aC5tYXgodGhpcy5ob3Qudmlldy5jb3VudFJlbmRlcmFibGVDb2x1bW5zSW5SYW5nZShk'@;
put 'LmNvbCxEKS0xLDEpKX1pZihjLnJvdzwwKXtsZXQgTT10aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5nZXRUb3BNb3N0Um93SW5kZXgobCxkLnJvdykrYy5yb3c7dihNLGQuY29sKSwiUy1OIj09PWwuZ2V0VmVydGljYWxEaXJlY3Rpb24oKSYmIlMtTiI9PT1hLmdldFZlcnRpY2FsRGlyZWN0'@;
put 'aW9uKCkmJihNPWEuZ2V0VG9wU3RhcnRDb3JuZXIoKS5yb3cpO2NvbnN0IEQ9Zi5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoTSwxKTtudWxsIT09RCYmKGMucm93PS1NYXRoLm1heCh0aGlzLmhvdC52aWV3LmNvdW50UmVuZGVyYWJsZVJvd3NJblJhbmdlKEQsZC5yb3cpLTEsMSkpfWVsc2Ug'@;
put 'aWYoYy5yb3c+MCl7bGV0IE09dGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24uZ2V0Qm90dG9tTW9zdFJvd0luZGV4KGwsZC5yb3cpK2Mucm93O3YoTSxkLmNvbCksIk4tUyI9PT1sLmdldFZlcnRpY2FsRGlyZWN0aW9uKCkmJiJOLVMiPT09YS5nZXRWZXJ0aWNhbERpcmVjdGlvbigpJiYoTT1h'@;
put 'LmdldEJvdHRvbVN0YXJ0Q29ybmVyKCkucm93KTtjb25zdCBEPWYuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KE0sLTEpO251bGwhPT1EJiYoYy5yb3c9TWF0aC5tYXgodGhpcy5ob3Qudmlldy5jb3VudFJlbmRlcmFibGVSb3dzSW5SYW5nZShkLnJvdyxEKS0xLDEpKX19ZnVuY3Rpb24gbXB0'@;
put 'KCl7Y29uc3QgYz10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLHtoaWdobGlnaHQ6bH09YztpZih0aGlzLmhvdC5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Q29sdW1uSGVhZGVyKCl8fHRoaXMuaG90LnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlSb3dIZWFkZXIoKSlyZXR1cm4gdm9pZCBw'@;
put 'QShRMix0aGlzLGwuY2xvbmUoKSk7Zm9yKGxldCBkPTA7ZDx0aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5tZXJnZWRDZWxscy5sZW5ndGg7ZCs9MSljLmV4cGFuZEJ5UmFuZ2UodGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24ubWVyZ2VkQ2VsbHNbZF0uZ2V0UmFuZ2UoKSwhMSk7Zm9yKGxl'@;
put 'dCBkPTA7ZDx0aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5tZXJnZWRDZWxscy5sZW5ndGg7ZCs9MSljLmV4cGFuZEJ5UmFuZ2UodGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24ubWVyZ2VkQ2VsbHNbZF0uZ2V0UmFuZ2UoKSwhMSk7Y29uc3QgYT10aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlv'@;
put 'bi5nZXQobC5yb3csbC5jb2wpO3BBKFEyLHRoaXMsbC5jbG9uZSgpKSxhJiZsLmFzc2lnbihhKX1mdW5jdGlvbiBBbWUoYyxsLGEsZCl7aWYoYzwwfHxsPDApcmV0dXJuO2NvbnN0IGg9dGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24uZ2V0KGMsbCk7aWYoIWgpcmV0dXJuO2NvbnN0e3Jvdzpm'@;
put 'LGNvbDp2LGNvbHNwYW46TSxyb3dzcGFuOkR9PWgsWj1mLHJlPXYsY2U9ZitELTEsYmU9ditNLTE7aWYoInJlbmRlciI9PT1kJiZ0aGlzLmdldFNldHRpbmcoInZpcnR1YWxpemVkIikpe2NvbnN0IEVlPXRoaXMuaG90LnZpZXcuZ2V0QWN0aXZlT3ZlcmxheU5hbWUoKSxCZT1bInRvcCIsInRv'@;
put 'cF9pbmxpbmVfc3RhcnRfY29ybmVyIl0uaW5jbHVkZXMoRWUpPzA6dGhpcy5ob3QuZ2V0Rmlyc3RSZW5kZXJlZFZpc2libGVSb3coKSxxZT1bImlubGluZV9zdGFydCIsInRvcF9pbmxpbmVfc3RhcnRfY29ybmVyIiwiYm90dG9tX2lubGluZV9zdGFydF9jb3JuZXIiXS5pbmNsdWRlcyhFZSk/'@;
put 'MDp0aGlzLmhvdC5nZXRGaXJzdFJlbmRlcmVkVmlzaWJsZUNvbHVtbigpO3JldHVybltrcyhCZSxaLGNlKSxrcyhxZSxyZSxiZSksa3ModGhpcy5ob3QuZ2V0TGFzdFJlbmRlcmVkVmlzaWJsZVJvdygpLFosY2UpLGtzKHRoaXMuaG90LmdldExhc3RSZW5kZXJlZFZpc2libGVDb2x1bW4oKSxy'@;
put 'ZSxiZSldfXJldHVybltaLHJlLGNlLGJlXX1mdW5jdGlvbiB2cHQoYyl7Yy5pdGVtcy5wdXNoKHtuYW1lOiItLS0tLS0tLS0ifSxmdW5jdGlvbiBRM3QoYyl7cmV0dXJue2tleToibWVyZ2VDZWxscyIsbmFtZSgpe2NvbnN0IGw9dGhpcy5nZXRTZWxlY3RlZExhc3QoKTtpZihsKXtjb25zdCBh'@;
put 'PWMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLmdldChsWzBdLGxbMV0pO2lmKGEucm93PT09bFswXSYmYS5jb2w9PT1sWzFdJiZhLnJvdythLnJvd3NwYW4tMT09PWxbMl0mJmEuY29sK2EuY29sc3Bhbi0xPT09bFszXSlyZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKGRxKX1yZXR1cm4g'@;
put 'dGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKHVxKX0sY2FsbGJhY2soKXtjb25zdCBsPXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKTtpZighbClyZXR1cm47bC5zZXREaXJlY3Rpb24odGhpcy5pc1J0bCgpPyJORS1TVyI6Ik5XLVNFIik7Y29uc3R7ZnJvbTphLHRvOmR9PWw7Yy50b2dnbGVN'@;
put 'ZXJnZShsKSx0aGlzLnNlbGVjdENlbGwoYS5yb3csYS5jb2wsZC5yb3csZC5jb2wsITEpfSxkaXNhYmxlZCgpe2NvbnN0IGw9dGhpcy5nZXRTZWxlY3RlZExhc3QoKTtyZXR1cm4hbHx8cXAuaXNTaW5nbGVDZWxsKHtyb3c6bFswXSxjb2w6bFsxXSxyb3dzcGFuOmxbMl0tbFswXSsxLGNvbHNw'@;
put 'YW46bFszXS1sWzFdKzF9KXx8dGhpcy5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Q29ybmVyKCl9LGhpZGRlbjohMX19KHRoaXMpKX1mdW5jdGlvbiBrbWUoKXtwQShRMix0aGlzLG51bGwpfWZ1bmN0aW9uIGJwdCgpe2lmKHRjKFEyLHRoaXMpLmlzQ2VsbCgpKXJldHVybjtjb25zdCBjPXRoaXMu'@;
put 'aG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCksbD1jLmdldFZlcnRpY2FsRGlyZWN0aW9uKCksYT1jLmdldEhvcml6b250YWxEaXJlY3Rpb24oKSxkPXRjKFEyLHRoaXMpLmNsb25lKCkubm9ybWFsaXplKCk7dGModDQsdGhpcykuc2V0QWN0aXZlTm9kZShkLnJvdyxkLmNvbCksdGMoZWYsdGhp'@;
put 'cykucm93PjB8fHRjKGVmLHRoaXMpLmNvbD4wP3RjKHQ0LHRoaXMpLnNldFByZXZOb2RlQXNBY3RpdmUoKTooIkUtVyI9PT1hJiZ0YyhlZix0aGlzKS5jb2w8MHx8IlMtTiI9PT1sJiZ0YyhlZix0aGlzKS5yb3c8MCkmJnRjKHQ0LHRoaXMpLnNldE5leHROb2RlQXNBY3RpdmUoKX1mdW5jdGlv'@;
put 'biB5cHQoYyxsKXtjb25zdCBhPXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCkse2NvbHVtbkluZGV4TWFwcGVyOmQscm93SW5kZXhNYXBwZXI6aH09dGhpcy5ob3Q7bGV0IGY9bnVsbCx2PW51bGw7aWYodGMoZWYsdGhpcykuY29sPDApe2NvbnN0e3Jvd0VuZDpNLGNvbEVuZDpEfT10'@;
put 'Yyh0NCx0aGlzKS5nZXRQcmV2SG9yaXpvbnRhbE5vZGUoKTt2PWQuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KEQsLTEpLGY9aC5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoTSwtMSl9ZWxzZSBpZih0YyhlZix0aGlzKS5jb2w+MCl7Y29uc3R7cm93U3RhcnQ6TSxjb2xTdGFydDpEfT10Yyh0'@;
put 'NCx0aGlzKS5nZXROZXh0SG9yaXpvbnRhbE5vZGUoKTt2PWQuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KEQsMSksZj1oLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChNLDEpfWVsc2UgaWYodGMoZWYsdGhpcykucm93PDApe2NvbnN0e3Jvd0VuZDpNLGNvbEVuZDpEfT10Yyh0NCx0aGlzKS5n'@;
put 'ZXRQcmV2VmVydGljYWxOb2RlKCk7dj1kLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChELC0xKSxmPWguZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KE0sLTEpfWVsc2UgaWYodGMoZWYsdGhpcykucm93PjApe2NvbnN0e3Jvd1N0YXJ0Ok0sY29sU3RhcnQ6RH09dGModDQsdGhpcykuZ2V0TmV4'@;
put 'dFZlcnRpY2FsTm9kZSgpO3Y9ZC5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoRCwxKSxmPWguZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KE0sMSl9aWYobnVsbCE9PWZ8fG51bGwhPT12KXtjb25zdCBNPXRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKGYsdiksRD10aGlzLm1lcmdlZENlbGxz'@;
put 'Q29sbGVjdGlvbi5nZXQoTS5yb3csTS5jb2wpLFo9dGhpcy5ob3Quc2VsZWN0aW9uLmhpZ2hsaWdodC5nZXRGb2N1cygpO2M9TS5yb3csbD1NLmNvbCxhLmhpZ2hsaWdodC5hc3NpZ24oRD97cm93OnRoaXMuaG90LnJvd0luZGV4TWFwcGVyLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChELnJv'@;
put 'dywxKSxjb2w6dGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KEQuY29sLDEpfTpNKSxaLmNsZWFyKCksWi5hZGQoTSkuY29tbWl0KCl9dGModDQsdGhpcykuc2V0QWN0aXZlTm9kZShjLGwpLHBBKGVmLHRoaXMse3JvdzowLGNvbDowfSl9ZnVuY3Rp'@;
put 'b24gX3B0KCl7dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKS5pc0hlYWRlcigpfHx0Yyh0NCx0aGlzKS5idWlsZEZvY3VzT3JkZXIodGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSl9ZnVuY3Rpb24gd3B0KGMsbCxhKXtjb25zdCBkPXRoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0'@;
put 'aW9uLmdldChjLGwpO2QmJihkLnJvdyE9PWN8fGQuY29sIT09bD9hLmNvcHlhYmxlPSExOihhLnJvd3NwYW49ZC5yb3dzcGFuLGEuY29sc3Bhbj1kLmNvbHNwYW4pKX1mdW5jdGlvbiBDcHQoYyl7aWYodGhpcy5nZXRTZXR0aW5nKCJ2aXJ0dWFsaXplZCIpKXJldHVybjtjb25zdCBsPXRoaXMu'@;
put 'aG90LmNvdW50Q29scygpO3RoaXMubW9kaWZ5Vmlld3BvcnRSb3dTdGFydChjLGwpLHRoaXMubW9kaWZ5Vmlld3BvcnRSb3dFbmQoYyxsKX1mdW5jdGlvbiBTcHQoYyl7aWYodGhpcy5nZXRTZXR0aW5nKCJ2aXJ0dWFsaXplZCIpKXJldHVybjtjb25zdCBsPXRoaXMuaG90LmNvdW50Um93cygp'@;
put 'O3RoaXMubW9kaWZ5Vmlld3BvcnRDb2x1bW5TdGFydChjLGwpLHRoaXMubW9kaWZ5Vmlld3BvcnRDb2x1bW5FbmQoYyxsKX1mdW5jdGlvbiBNcHQoYyxsKXtjb25zdCBhPXRoaXMuYXV0b2ZpbGxDYWxjdWxhdGlvbnMuZ2V0RGlyZWN0aW9uKGwsYyk7aWYodGhpcy5hdXRvZmlsbENhbGN1bGF0'@;
put 'aW9ucy5kcmFnQXJlYU92ZXJsYXBzQ29sbGVjdGlvbnMobCxjLGEpKXJldHVybiBsO2NvbnN0IGQ9dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMobFswXSxsWzFdKSxoPXRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKGxbMl0sbFszXSksZj10aGlzLmhvdC5fY3JlYXRlQ2VsbFJhbmdlKGQs'@;
put 'ZCxoKSx2PXRoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLmdldFdpdGhpblJhbmdlKGYpO3JldHVybiAwPT09di5sZW5ndGg/Yzp0aGlzLmF1dG9maWxsQ2FsY3VsYXRpb25zLnNuYXBEcmFnQXJlYShsLGMsYSx2KX1mdW5jdGlvbiB4cHQoYyxsKXt0aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlv'@;
put 'bi5zaGlmdENvbGxlY3Rpb25zKCJyaWdodCIsYyxsKX1mdW5jdGlvbiBFcHQoYyxsKXt0aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5zaGlmdENvbGxlY3Rpb25zKCJsZWZ0IixjLGwpfWZ1bmN0aW9uIFRwdChjLGwsYSl7ImF1dG8iIT09YSYmdGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24u'@;
put 'c2hpZnRDb2xsZWN0aW9ucygiZG93biIsYyxsKX1mdW5jdGlvbiBBcHQoYyxsKXt0aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5zaGlmdENvbGxlY3Rpb25zKCJ1cCIsYyxsKX1mdW5jdGlvbiBrcHQoYyxsKXsiQXV0b2ZpbGwuZmlsbCI9PT1sJiZ0aGlzLmF1dG9maWxsQ2FsY3VsYXRpb25z'@;
put 'LnJlY3JlYXRlQWZ0ZXJEYXRhUG9wdWxhdGlvbihjKX1mdW5jdGlvbiBEcHQoYyxsKXtpZihsJiYiYXJlYSI9PT1sKXtjb25zdCBhPXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCk7WW4odGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24uZ2V0V2l0aGluUmFuZ2UoYSksaD0+e2EuZ2V0'@;
put 'Qm90dG9tRW5kQ29ybmVyKCkucm93PT09aC5nZXRMYXN0Um93KCkmJmEuZ2V0Qm90dG9tRW5kQ29ybmVyKCkuY29sPT09aC5nZXRMYXN0Q29sdW1uKCkmJihjWzJdPWgucm93LGNbM109aC5jb2wpfSl9fWZ1bmN0aW9uIElwdChjLGwsYSxkKXtpZihhKXJldHVybiB0aGlzLnNlbGVjdGlvbkNh'@;
put 'bGN1bGF0aW9ucy5nZXRTZWxlY3RlZE1lcmdlZENlbGxDbGFzc05hbWUoYyxsLGEsZCl9ZnVuY3Rpb24gUnB0KCl7cmV0dXJuIHRoaXMuc2VsZWN0aW9uQ2FsY3VsYXRpb25zLmdldFNlbGVjdGVkTWVyZ2VkQ2VsbENsYXNzTmFtZVRvUmVtb3ZlKCl9ZnVuY3Rpb24gTHB0KGMsbCxhLGQpe2lm'@;
put 'KCEoZCBpbnN0YW5jZW9mIE1vdXNlRXZlbnQpKXJldHVybjtjb25zdCBoPXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCksZj10aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5nZXRCeVJhbmdlKGgpO2lmKCFmKXJldHVybjtjb25zdCB2PXRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRz'@;
put 'KGYucm93LGYuY29sKSxNPXRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKGYucm93K2Yucm93c3Bhbi0xLGYuY29sK2YuY29sc3Bhbi0xKTtyZXR1cm4gMD09PXRoaXMuaG90LnNlbGVjdGlvbi5nZXRMYXllckxldmVsKCkmJmguaXNFcXVhbCh0aGlzLmhvdC5fY3JlYXRlQ2VsbFJhbmdlKHYs'@;
put 'dixNKSl9ZnVuY3Rpb24gT3B0KGMsbCxhKXtpZih0aGlzLmhvdC5nZXRTZXR0aW5ncygpLnJvd0hlYWRlcnN8fCJib3R0b20iPT09YXx8ImJvdHRvbV9pbmxpbmVfc3RhcnRfY29ybmVyIj09PWEpcmV0dXJuIGM7bGV0IGQsaDtpZigibWFzdGVyIj09PWEpZD10aGlzLmhvdC5nZXRGaXJzdFJl'@;
put 'bmRlcmVkVmlzaWJsZUNvbHVtbigpLGg9dGhpcy5ob3QuZ2V0TGFzdFJlbmRlcmVkVmlzaWJsZUNvbHVtbigpO2Vsc2V7Y29uc3QgYmU9dGhpcy5ob3Qudmlldy5nZXRPdmVybGF5QnlOYW1lKGEpO2Q9dGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJ'@;
put 'bmRleChiZS5jbG9uZS53dFRhYmxlLmdldEZpcnN0UmVuZGVyZWRDb2x1bW4oKSksaD10aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KGJlLmNsb25lLnd0VGFibGUuZ2V0TGFzdFJlbmRlcmVkQ29sdW1uKCkpfWlmKCF0aGlzLm1lcmdlZENl'@;
put 'bGxzQ29sbGVjdGlvbi5nZXQobCxkKSlyZXR1cm4gYztjb25zdCB2PXRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKGwsZCksTT10aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhsLGgpLEQ9dGhpcy5ob3QuX2NyZWF0ZUNlbGxSYW5nZSh2LHYsTSksWj10aGlzLm1lcmdlZENlbGxzQ29sbGVj'@;
put 'dGlvbi5nZXRXaXRoaW5SYW5nZShELCEwKSxyZT1aLnJlZHVjZSgoYmUsRWUpPT57bGV0e3Jvd3NwYW46QmV9PUVlO3JldHVybiBNYXRoLm1heChiZSxCZSl9LDEpO2xldCBjZT0wO3JldHVybiBaLmxlbmd0aD4xJiZaWzBdLnJvd3NwYW48cmUmJihjZT1yZS1aWzBdLnJvd3NwYW4pLFouZm9y'@;
put 'RWFjaChiZT0+e2xldHtyb3dzcGFuOkVlfT1iZSxCZT0wO0JlPSJ0b3AiPT09YXx8InRvcF9pbmxpbmVfc3RhcnRfY29ybmVyIj09PWE/TWF0aC5taW4ocmUsdGhpcy5ob3Qudmlldy5jb3VudE5vdEhpZGRlbkZpeGVkUm93c1RvcCgpLWwpOkVlLWNlLGM9TWF0aC5tYXgoYz8/MCxNbWUodGhp'@;
put 'cy5ob3QsbCxCZSkpfSksY31jb25zdCBESD0ibXVsdGlDb2x1bW5Tb3J0aW5nIixJbWU9REg7RzRlKERILGZ1bmN0aW9uIFBwdChjLGwpe3JldHVybiBmdW5jdGlvbihhLGQpe2NvbnN0WywuLi5oXT1hLFssLi4uZl09ZDtyZXR1cm4gZnVuY3Rpb24gdihNKXtjb25zdCBEPWNbTV0sWj1sW01d'@;
put 'LHJlPWhbTV0sY2U9ZltNXSxiZT1aLm11bHRpQ29sdW1uU29ydGluZyxCZT0oYmUuY29tcGFyZUZ1bmN0aW9uRmFjdG9yeT9iZS5jb21wYXJlRnVuY3Rpb25GYWN0b3J5OiQ0ZShaLnR5cGUpKShELFosYmUpKHJlLGNlKTtpZihCZT09PWpwKXtjb25zdCBxZT1NKzE7aWYodHlwZW9mIGxbcWVd'@;
put 'PCJ1IilyZXR1cm4gdihxZSl9cmV0dXJuIEJlfSgwKX19KTtjbGFzcyB6cHQgZXh0ZW5kcyBhZ2V7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLGZ1bmN0aW9uIE5wdChjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gVnB0KGMpe3ZhciBsPWZ1bmN0aW9uIEJwdChjLGwpe2lmKCJv'@;
put 'YmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRp'@;
put 'dmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVu'@;
put 'dW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9KHRoaXMsInBsdWdpbktleSIsREgpfXN0YXRpYyBnZXQgUExVR0lOX0tFWSgpe3JldHVybiBESH1zdGF0aWMgZ2V0IFBMVUdJTl9QUklPUklUWSgpe3JldHVybiAxNzB9aXNFbmFibGVkKCl7cmV0dXJu'@;
put 'ISF0aGlzLmhvdC5nZXRTZXR0aW5ncygpW3RoaXMucGx1Z2luS2V5XX1lbmFibGVQbHVnaW4oKXtzdXBlci5lbmFibGVQbHVnaW4oKX1kaXNhYmxlUGx1Z2luKCl7c3VwZXIuZGlzYWJsZVBsdWdpbigpfXJlZ2lzdGVyU2hvcnRjdXRzKCl7c3VwZXIucmVnaXN0ZXJTaG9ydGN1dHMoKSx0aGlz'@;
put 'LmhvdC5nZXRTaG9ydGN1dE1hbmFnZXIoKS5nZXRDb250ZXh0KCJncmlkIikuYWRkU2hvcnRjdXQoe2tleXM6W1siU2hpZnQiLCJFbnRlciJdXSxjYWxsYmFjazooKT0+e2NvbnN0e2hpZ2hsaWdodDpsfT10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpO3JldHVybi0xPT09bC5yb3cm'@;
put 'JmwuY29sPj0wJiZ0aGlzLnNvcnQodGhpcy5nZXROZXh0U29ydENvbmZpZyhsLmNvbCxvRikpLCExfSxydW5Pbmx5SWY6KCk9Pnt2YXIgbCxhO2NvbnN0IGQ9bnVsbD09PShsPXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCkpfHx2b2lkIDA9PT1sP3ZvaWQgMDpsLmhpZ2hsaWdodDty'@;
put 'ZXR1cm4gZCYmKG51bGw9PT0oYT10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpKXx8dm9pZCAwPT09YT92b2lkIDA6YS5pc1NpbmdsZSgpKSYmdGhpcy5ob3Quc2VsZWN0aW9uLmlzQ2VsbFZpc2libGUoZCkmJmQuaXNIZWFkZXIoKX0scmVsYXRpdmVUb0dyb3VwOldtLHBvc2l0aW9u'@;
put 'OiJiZWZvcmUiLGdyb3VwOkltZX0pfXVucmVnaXN0ZXJTaG9ydGN1dHMoKXtzdXBlci51bnJlZ2lzdGVyU2hvcnRjdXRzKCksdGhpcy5ob3QuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuZ2V0Q29udGV4dCgiZ3JpZCIpLnJlbW92ZVNob3J0Y3V0c0J5R3JvdXAoSW1lKX1zb3J0KGwpe3N1cGVyLnNv'@;
put 'cnQobCl9Y2xlYXJTb3J0KCl7c3VwZXIuY2xlYXJTb3J0KCl9aXNTb3J0ZWQoKXtyZXR1cm4gc3VwZXIuaXNTb3J0ZWQoKX1nZXRTb3J0Q29uZmlnKGwpe3JldHVybiBzdXBlci5nZXRTb3J0Q29uZmlnKGwpfXNldFNvcnRDb25maWcobCl7c3VwZXIuc2V0U29ydENvbmZpZyhsKX1nZXROb3Jt'@;
put 'YWxpemVkU29ydENvbmZpZ3MoKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06W107cmV0dXJuIEFycmF5LmlzQXJyYXkobCk/bDpbbF19dXBkYXRlSGVhZGVyQ2xhc3NlcyhsKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxk'@;
put 'PW5ldyBBcnJheShhPjE/YS0xOjApLGg9MTtoPGE7aCsrKWRbaC0xXT1hcmd1bWVudHNbaF07c3VwZXIudXBkYXRlSGVhZGVyQ2xhc3NlcyhsLC4uLmQpLGxvKGwsZnVuY3Rpb24gSHB0KGMpe2NvbnN0IGw9Yy5jbGFzc05hbWUuc3BsaXQoIiAiKSxhPW5ldyBSZWdFeHAoIl5zb3J0LVswLTld'@;
put 'ezEsMn0kIik7cmV0dXJuIGwuZmlsdGVyKGQ9PmEudGVzdChkKSl9KGwpKSwhMSE9PXRoaXMuZW5hYmxlZCYmVGkobCxmdW5jdGlvbiBGcHQoYyxsLGEpe2NvbnN0IGQ9W107cmV0dXJuITE9PT1hfHxjLmlzQ29sdW1uU29ydGVkKGwpJiZjLmdldE51bWJlck9mU29ydGVkQ29sdW1ucygpPjEm'@;
put 'JmQucHVzaChgc29ydC0ke2MuZ2V0SW5kZXhPZkNvbHVtbkluU29ydFF1ZXVlKGwpKzF9YCksZH0oLi4uZCkpfW9uQWZ0ZXJPbkNlbGxNb3VzZURvd24obCxhKXshMSE9PXlKKGEucm93LGEuY29sLGwpJiZ0aGlzLndhc0NsaWNrYWJsZUhlYWRlckNsaWNrZWQobCxhLmNvbCkmJih0aGlzLmhv'@;
put 'dC5nZXRTaG9ydGN1dE1hbmFnZXIoKS5pc0N0cmxQcmVzc2VkKCk/KHRoaXMuaG90LmRlc2VsZWN0Q2VsbCgpLHRoaXMuaG90LnNlbGVjdENvbHVtbnMoYS5jb2wpLHRoaXMuc29ydCh0aGlzLmdldE5leHRTb3J0Q29uZmlnKGEuY29sLG9GKSkpOnRoaXMuc29ydCh0aGlzLmdldENvbHVtbk5l'@;
put 'eHRDb25maWcoYS5jb2wpKSl9fWZ1bmN0aW9uIFJtZShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gVXB0KGMpe3ZhciBsPWZ1bmN0aW9uIFpwdChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEp'@;
put 'e3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShj'@;
put 'KX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y2xhc3MgR3B0IGV4dGVuZHMgRnN7'@;
put 'Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLFJtZSh0aGlzLCJkcmFnZ2VkIixbXSksUm1lKHRoaXMsImxhc3RTZXRDZWxsIixudWxsKX1zdGF0aWMgZ2V0IFBMVUdJTl9LRVkoKXtyZXR1cm4ibXVsdGlwbGVTZWxlY3Rpb25IYW5kbGVzIn1zdGF0aWMgZ2V0IFBMVUdJTl9QUklP'@;
put 'UklUWSgpe3JldHVybiAxNjB9aXNFbmFibGVkKCl7cmV0dXJuIEFwKCl9ZW5hYmxlUGx1Z2luKCl7dGhpcy5lbmFibGVkfHwodGhpcy5yZWdpc3Rlckxpc3RlbmVycygpLHN1cGVyLmVuYWJsZVBsdWdpbigpKX1yZWdpc3Rlckxpc3RlbmVycygpe2NvbnN0IGw9dGhpcyx7cm9vdEVsZW1lbnQ6'@;
put 'YX09dGhpcy5ob3Q7ZnVuY3Rpb24gZChoKXtpZigxPT09bC5kcmFnZ2VkLmxlbmd0aClyZXR1cm4gbC5kcmFnZ2VkLnNwbGljZSgwLGwuZHJhZ2dlZC5sZW5ndGgpLCEwO2NvbnN0IGY9bC5kcmFnZ2VkLmluZGV4T2YoaCk7aWYoLTE9PT1mKXJldHVybiExOzA9PT1mP2wuZHJhZ2dlZD1sLmRy'@;
put 'YWdnZWQuc2xpY2UoMCwxKToxPT09ZiYmKGwuZHJhZ2dlZD1sLmRyYWdnZWQuc2xpY2UoLTEpKX10aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGEsInRvdWNoc3RhcnQiLGg9PntsZXQgZjtyZXR1cm4gcG8oaC50YXJnZXQsInRvcFNlbGVjdGlvbkhhbmRsZS1IaXRBcmVhIik/'@;
put 'KGY9bC5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSxsLmRyYWdnZWQucHVzaCgidG9wIiksbC50b3VjaFN0YXJ0UmFuZ2U9e3dpZHRoOmYuZ2V0V2lkdGgoKSxoZWlnaHQ6Zi5nZXRIZWlnaHQoKSxkaXJlY3Rpb246Zi5nZXREaXJlY3Rpb24oKX0saC5wcmV2ZW50RGVmYXVsdCgpLCExKTpw'@;
put 'byhoLnRhcmdldCwiYm90dG9tU2VsZWN0aW9uSGFuZGxlLUhpdEFyZWEiKT8oZj1sLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLGwuZHJhZ2dlZC5wdXNoKCJib3R0b20iKSxsLnRvdWNoU3RhcnRSYW5nZT17d2lkdGg6Zi5nZXRXaWR0aCgpLGhlaWdodDpmLmdldEhlaWdodCgpLGRpcmVj'@;
put 'dGlvbjpmLmdldERpcmVjdGlvbigpfSxoLnByZXZlbnREZWZhdWx0KCksITEpOnZvaWQgMH0pLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoYSwidG91Y2hlbmQiLGg9PnBvKGgudGFyZ2V0LCJ0b3BTZWxlY3Rpb25IYW5kbGUtSGl0QXJlYSIpPyhkLmNhbGwobCwidG9wIiks'@;
put 'bC50b3VjaFN0YXJ0UmFuZ2U9dm9pZCAwLGgucHJldmVudERlZmF1bHQoKSwhMSk6cG8oaC50YXJnZXQsImJvdHRvbVNlbGVjdGlvbkhhbmRsZS1IaXRBcmVhIik/KGQuY2FsbChsLCJib3R0b20iKSxsLnRvdWNoU3RhcnRSYW5nZT12b2lkIDAsaC5wcmV2ZW50RGVmYXVsdCgpLCExKTp2b2lk'@;
put 'IDApLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoYSwidG91Y2htb3ZlIixoPT57Y29uc3R7cm9vdERvY3VtZW50OmZ9PXRoaXMuaG90O2xldCB2LE0sRCxaLHJlLGNlO2lmKDA9PT1sLmRyYWdnZWQubGVuZ3RoKXJldHVybjtjb25zdCBiZT1mLmVsZW1lbnRGcm9tUG9pbnQo'@;
put 'aC50b3VjaGVzWzBdLmNsaWVudFgsaC50b3VjaGVzWzBdLmNsaWVudFkpOyFiZXx8YmU9PT1sLmxhc3RTZXRDZWxsfHwoKCJURCI9PT1iZS5ub2RlTmFtZXx8IlRIIj09PWJlLm5vZGVOYW1lKSYmKHY9bC5ob3QuZ2V0Q29vcmRzKGJlKSwtMT09PXYuY29sJiYodi5jb2w9MCksTT1sLmhvdC5n'@;
put 'ZXRTZWxlY3RlZFJhbmdlTGFzdCgpLEQ9TS5nZXRXaWR0aCgpLFo9TS5nZXRIZWlnaHQoKSxyZT1NLmdldERpcmVjdGlvbigpLDE9PT1EJiYxPT09WiYmbC5ob3Quc2VsZWN0aW9uLnNldFJhbmdlRW5kKHYpLGNlPWwuZ2V0Q3VycmVudFJhbmdlQ29vcmRzKE0sdixsLnRvdWNoU3RhcnRSYW5n'@;
put 'ZS5kaXJlY3Rpb24scmUsbC5kcmFnZ2VkWzBdKSxudWxsIT09Y2Uuc3RhcnQmJmwuaG90LnNlbGVjdGlvbi5zZXRSYW5nZVN0YXJ0KGNlLnN0YXJ0KSxsLmhvdC5zZWxlY3Rpb24uc2V0UmFuZ2VFbmQoY2UuZW5kKSxsLmxhc3RTZXRDZWxsPWJlKSxoLnByZXZlbnREZWZhdWx0KCkpfSl9Z2V0'@;
put 'Q3VycmVudFJhbmdlQ29vcmRzKGwsYSxkLGgsZil7Y29uc3Qgdj1sLmdldFRvcFN0YXJ0Q29ybmVyKCksTT1sLmdldEJvdHRvbUVuZENvcm5lcigpLEQ9bC5nZXRCb3R0b21TdGFydENvcm5lcigpLFo9bC5nZXRUb3BFbmRDb3JuZXIoKTtsZXQgcmU9e3N0YXJ0Om51bGwsZW5kOm51bGx9O3N3'@;
put 'aXRjaChkKXtjYXNlIk5FLVNXIjpzd2l0Y2goaCl7Y2FzZSJORS1TVyI6Y2FzZSJOVy1TRSI6cmU9InRvcCI9PT1mP3tzdGFydDp0aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhhLnJvdyxsLmhpZ2hsaWdodC5jb2wpLGVuZDp0aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhELnJvdyxhLmNv'@;
put 'bCl9OntzdGFydDp0aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhsLmhpZ2hsaWdodC5yb3csYS5jb2wpLGVuZDp0aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhhLnJvdyx2LmNvbCl9O2JyZWFrO2Nhc2UiU0UtTlciOiJib3R0b20iPT09ZiYmKHJlPXtzdGFydDp0aGlzLmhvdC5fY3JlYXRl'@;
put 'Q2VsbENvb3JkcyhNLnJvdyxhLmNvbCksZW5kOnRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKGEucm93LHYuY29sKX0pfWJyZWFrO2Nhc2UiTlctU0UiOnN3aXRjaChoKXtjYXNlIk5FLVNXIjoidG9wIj09PWY/cmU9e3N0YXJ0OmEsZW5kOkR9OnJlLmVuZD1hO2JyZWFrO2Nhc2UiTlctU0Ui'@;
put 'OiJ0b3AiPT09Zj9yZT17c3RhcnQ6YSxlbmQ6TX06cmUuZW5kPWE7YnJlYWs7Y2FzZSJTRS1OVyI6InRvcCI9PT1mP3JlPXtzdGFydDphLGVuZDp2fTpyZS5lbmQ9YTticmVhaztjYXNlIlNXLU5FIjoidG9wIj09PWY/cmU9e3N0YXJ0OmEsZW5kOlp9OnJlLmVuZD1hfWJyZWFrO2Nhc2UiU1ct'@;
put 'TkUiOnN3aXRjaChoKXtjYXNlIk5XLVNFIjpyZT0iYm90dG9tIj09PWY/e3N0YXJ0OnRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKGEucm93LHYuY29sKSxlbmQ6dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMoRC5yb3csYS5jb2wpfTp7c3RhcnQ6dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29y'@;
put 'ZHModi5yb3csYS5jb2wpLGVuZDp0aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhhLnJvdyxNLmNvbCl9O2JyZWFrO2Nhc2UiU1ctTkUiOnJlPSJ0b3AiPT09Zj97c3RhcnQ6dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMobC5oaWdobGlnaHQucm93LGEuY29sKSxlbmQ6dGhpcy5ob3QuX2Ny'@;
put 'ZWF0ZUNlbGxDb29yZHMoYS5yb3csTS5jb2wpfTp7c3RhcnQ6dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMoYS5yb3csdi5jb2wpLGVuZDp0aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3Jkcyh2LnJvdyxhLmNvbCl9O2JyZWFrO2Nhc2UiU0UtTlciOiJib3R0b20iPT09Zj9yZT17c3RhcnQ6dGhp'@;
put 'cy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMoYS5yb3csWi5jb2wpLGVuZDp0aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3Jkcyh2LnJvdyxhLmNvbCl9OiJ0b3AiPT09ZiYmKHJlPXtzdGFydDpELGVuZDphfSl9YnJlYWs7Y2FzZSJTRS1OVyI6c3dpdGNoKGgpe2Nhc2UiTlctU0UiOmNhc2UiTkUtU1ci'@;
put 'OmNhc2UiU1ctTkUiOiJ0b3AiPT09ZiYmKHJlLmVuZD1hKTticmVhaztjYXNlIlNFLU5XIjoidG9wIj09PWY/cmUuZW5kPWE6cmU9e3N0YXJ0OmEsZW5kOnZ9fX1yZXR1cm4gcmV9aXNEcmFnZ2VkKCl7cmV0dXJuIHRoaXMuZHJhZ2dlZC5sZW5ndGg+MH19ZnVuY3Rpb24gZWVlKCl7bGV0e2xh'@;
put 'YmVsOmM9IiIsY29sc3BhbjpsPTEsb3JpZ0NvbHNwYW46YT0xLGNvbGxhcHNpYmxlOmQ9ITEsY3Jvc3NIaWRkZW5Db2x1bW5zOmg9W10saXNDb2xsYXBzZWQ6Zj0hMSxpc0hpZGRlbjp2PSExLGlzUm9vdDpNPSExLGlzUGxhY2Vob2xkZXI6RD0hMSxoZWFkZXJDbGFzc05hbWVzOlo9W119PWFy'@;
put 'Z3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp7fTtyZXR1cm57bGFiZWw6Yyxjb2xzcGFuOmwsb3JpZ0NvbHNwYW46YSxjb2xsYXBzaWJsZTpkLGlzQ29sbGFwc2VkOmYsY3Jvc3NIaWRkZW5Db2x1bW5zOmgsaXNIaWRkZW46dixpc1Jvb3Q6TSxp'@;
put 'c1BsYWNlaG9sZGVyOkQsaGVhZGVyQ2xhc3NOYW1lczpafX1mdW5jdGlvbiB0ZWUoYyxsLGEpeyhmdW5jdGlvbiBLcHQoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9i'@;
put 'amVjdCIpfSkoYyxsKSxsLnNldChjLGEpfWZ1bmN0aW9uIHczKGMsbCl7cmV0dXJuIGMuZ2V0KE9tZShjLGwpKX1mdW5jdGlvbiBnQShjLGwsYSl7cmV0dXJuIGMuc2V0KE9tZShjLGwpLGEpLGF9ZnVuY3Rpb24gT21lKGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhh'@;
put 'cyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX1jb25zdCBQbWU9WyJsYWJlbCIsImNvbGxhcHNpYmxlIl07dmFyIFlnPW5ldyBXZWFrTWFwLFo5PW5ldyBX'@;
put 'ZWFrTWFwLG5lZT1uZXcgV2Vha01hcDtjbGFzcyBxcHR7Y29uc3RydWN0b3IoKXt0ZWUodGhpcyxZZyxbXSksdGVlKHRoaXMsWjksMCksdGVlKHRoaXMsbmVlLDEvMCl9c2V0Q29sdW1uc0xpbWl0KGwpe2dBKG5lZSx0aGlzLGwpfXNldERhdGEoKXtnQShZZyx0aGlzLGZ1bmN0aW9uICRwdChj'@;
put 'KXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06MS8wO2NvbnN0IGE9W107aWYoMD09PWwpcmV0dXJuIGE7WW4oYyxoPT57Y29uc3QgZj1bXTtsZXQgdj0wO2EucHVzaChmKSxZbihoLE09Pntjb25zdCBEPWVlZSgpO2lmKHFvKE0p'@;
put 'KXtjb25zdHtsYWJlbDpyZSxjb2xzcGFuOmNlLGhlYWRlckNsYXNzTmFtZTpiZX09TTtELmxhYmVsPWxjKHJlKSwibnVtYmVyIj09dHlwZW9mIGNlJiZjZT4xJiYoRC5jb2xzcGFuPWNlLEQub3JpZ0NvbHNwYW49Y2UpLCJzdHJpbmciPT10eXBlb2YgYmUmJihELmhlYWRlckNsYXNzTmFtZXM9'@;
put 'Wy4uLmJlLnNwbGl0KCIgIildKX1lbHNlIEQubGFiZWw9bGMoTSk7dis9RC5vcmlnQ29sc3BhbjtsZXQgWj0hMTtpZih2Pj1sJiYoRC5jb2xzcGFuPUQub3JpZ0NvbHNwYW4tKHYtbCksRC5vcmlnQ29sc3Bhbj1ELmNvbHNwYW4sWj0hMCksZi5wdXNoKEQpLEQuY29sc3Bhbj4xKWZvcihsZXQg'@;
put 'cmU9MDtyZTxELmNvbHNwYW4tMTtyZSsrKWYucHVzaCh7bGFiZWw6IiIsaXNQbGFjZWhvbGRlcjohMH0pO3JldHVybiFafSl9KTtjb25zdCBkPU1hdGgubWF4KC4uLnlzKGEsaD0+aC5sZW5ndGgpKTtyZXR1cm4gWW4oYSxoPT57aWYoaC5sZW5ndGg8ZCl7Y29uc3QgZj15cyhuZXcgQXJyYXko'@;
put 'ZC1oLmxlbmd0aCksKCk9PmVlZSgpKTtoLnNwbGljZShoLmxlbmd0aCwwLC4uLmYpfX0pLGF9KGFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTpbXSx3MyhuZWUsdGhpcykpKSxnQShaOSx0aGlzLHczKFlnLHRoaXMpLmxlbmd0aCl9Z2V0RGF0'@;
put 'YSgpe3JldHVybiB3MyhZZyx0aGlzKX1tZXJnZVdpdGgobCl7WW4obCxhPT57bGV0e3JvdzpkLGNvbDpoLC4uLmZ9PWE7Y29uc3Qgdj10aGlzLmdldEhlYWRlclNldHRpbmdzKGQsaCk7bnVsbCE9PXYmJkV1KHYsZixQbWUpfSl9bWFwKGwpe1luKHczKFlnLHRoaXMpLGE9PntZbihhLGQ9Pntj'@;
put 'b25zdCBoPWwoey4uLmR9KTtxbyhoKSYmRXUoZCxoLFBtZSl9KX0pfWdldEhlYWRlclNldHRpbmdzKGwsYSl7dmFyIGQ7aWYobD49dzMoWjksdGhpcyl8fGw8MClyZXR1cm4gbnVsbDtjb25zdCBoPXczKFlnLHRoaXMpW2xdO3JldHVybiExPT09QXJyYXkuaXNBcnJheShoKXx8YT49aC5sZW5n'@;
put 'dGg/bnVsbDpudWxsIT09KGQ9aFthXSkmJnZvaWQgMCE9PWQ/ZDpudWxsfWdldEhlYWRlcnNTZXR0aW5ncyhsLGEpe2xldCBkPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXToxO2NvbnN0IGg9W107aWYobD49dzMoWjksdGhpcyl8fGw8MCly'@;
put 'ZXR1cm4gaDtjb25zdCBmPXczKFlnLHRoaXMpW2xdO2xldCB2PTA7Zm9yKGxldCBNPWE7TTxmLmxlbmd0aDtNKyspe2NvbnN0IEQ9ZltNXTtpZihELmlzUGxhY2Vob2xkZXIpdGhyb3cgbmV3IEVycm9yKCJUaGUgZmlyc3QgY29sdW1uIHNldHRpbmdzIGNhbm5vdCBvdmVybGFwIHRoZSBvdGhl'@;
put 'ciBoZWFkZXIgbGF5ZXJzIik7aWYodis9RC5jb2xzcGFuLGgucHVzaChEKSxELmNvbHNwYW4+MSYmKE0rPUQuY29sc3Bhbi0xKSx2PT09ZClicmVhaztpZih2PmQpdGhyb3cgbmV3IEVycm9yKCJUaGUgbGFzdCBjb2x1bW4gc2V0dGluZ3MgY2Fubm90IG92ZXJsYXAgdGhlIG90aGVyIGhlYWRl'@;
put 'ciBsYXllcnMiKX1yZXR1cm4gaH1nZXRMYXllcnNDb3VudCgpe3JldHVybiB3MyhaOSx0aGlzKX1nZXRDb2x1bW5zQ291bnQoKXtyZXR1cm4gdzMoWjksdGhpcyk+MD93MyhZZyx0aGlzKVswXS5sZW5ndGg6MH1jbGVhcigpe2dBKFlnLHRoaXMsW10pLGdBKFo5LHRoaXMsMCl9fWZ1bmN0aW9u'@;
put 'IHJlZShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gWHB0KGMpe3ZhciBsPWZ1bmN0aW9uIEpwdChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0'@;
put 'Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJv'@;
put 'bCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y29uc3QgRm1lPSJERi1wcmUtb3JkZXIiLEJtZT1uZXcgTWFwKFtbRm1lLGZ1bmN0'@;
put 'aW9uIEhtZShjLGwpe2xldCBhPWMuY2FsbChsLHRoaXMpO2ZvcihsZXQgZD0wO2Q8dGhpcy5jaGlsZHMubGVuZ3RoO2QrKyl7aWYoITE9PT1hKXJldHVybiExO2E9SG1lLmNhbGwodGhpcy5jaGlsZHNbZF0sYyxsKX1yZXR1cm4gYX1dLFsiREYtcG9zdC1vcmRlciIsZnVuY3Rpb24gTm1lKGMs'@;
put 'bCl7Zm9yKGxldCBhPTA7YTx0aGlzLmNoaWxkcy5sZW5ndGg7YSsrKWlmKCExPT09Tm1lLmNhbGwodGhpcy5jaGlsZHNbYV0sYyxsKSlyZXR1cm4hMTtyZXR1cm4gYy5jYWxsKGwsdGhpcyl9XSxbIkJGIixmdW5jdGlvbiBlNHQoYyxsKXtjb25zdCBhPVt0aGlzXTshZnVuY3Rpb24gZCgpe2lm'@;
put 'KDA9PT1hLmxlbmd0aClyZXR1cm47Y29uc3QgaD1hLnNoaWZ0KCk7YS5wdXNoKC4uLmguY2hpbGRzKSwhMSE9PWMuY2FsbChsLGgpJiZkKCl9KCl9XV0pO2NsYXNzIElIe2NvbnN0cnVjdG9yKGwpe3JlZSh0aGlzLCJkYXRhIix7fSkscmVlKHRoaXMsInBhcmVudCIsbnVsbCkscmVlKHRoaXMs'@;
put 'ImNoaWxkcyIsW10pLHRoaXMuZGF0YT1sfWFkZENoaWxkKGwpe2wucGFyZW50PXRoaXMsdGhpcy5jaGlsZHMucHVzaChsKX1jbG9uZVRyZWUoKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06dGhpcztjb25zdCBhPW5ldyBJSCh7'@;
put 'Li4ubC5kYXRhfSk7Zm9yKGxldCBkPTA7ZDxsLmNoaWxkcy5sZW5ndGg7ZCsrKWEuYWRkQ2hpbGQodGhpcy5jbG9uZVRyZWUobC5jaGlsZHNbZF0pKTtyZXR1cm4gYX1yZXBsYWNlVHJlZVdpdGgobCl7dGhpcy5kYXRhPXsuLi5sLmRhdGF9LHRoaXMuY2hpbGRzPVtdO2ZvcihsZXQgYT0wO2E8'@;
put 'bC5jaGlsZHMubGVuZ3RoO2ErKyl0aGlzLmFkZENoaWxkKGwuY2hpbGRzW2FdKX13YWxrRG93bihsKXtsZXQgYT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06IkJGIjtpZighQm1lLmhhcyhhKSl0aHJvdyBuZXcgRXJyb3IoYFRyYXZlcnNh'@;
put 'bCBzdHJhdGVneSAiJHthfSIgZG9lcyBub3QgZXhpc3RgKTtCbWUuZ2V0KGEpLmNhbGwodGhpcyxsLHRoaXMpfXdhbGtVcChsKXtjb25zdCBhPXRoaXMsZD1oPT57ITEhPT1sLmNhbGwoYSxoKSYmbnVsbCE9PWgucGFyZW50JiZkKGgucGFyZW50KX07ZCh0aGlzKX19ZnVuY3Rpb24gaWVlKGMs'@;
put 'bCxhKXsoZnVuY3Rpb24gbjR0KGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX0pKGMsbCksbC5zZXQoYyxhKX1mdW5jdGlvbiByZChjLGwpe3JldHVybiBj'@;
put 'LmdldChqbWUoYyxsKSl9ZnVuY3Rpb24gam1lKGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBv'@;
put 'YmplY3QiKX12YXIgZ3c9bmV3IFdlYWtNYXAsVzk9bmV3IFdlYWtNYXAsbXc9bmV3IFdlYWtNYXA7Y2xhc3MgaTR0e2NvbnN0cnVjdG9yKGwpe2llZSh0aGlzLGd3LG5ldyBNYXApLGllZSh0aGlzLFc5LG5ldyBNYXApLGllZSh0aGlzLG13LG51bGwpLGZ1bmN0aW9uIHI0dChjLGwsYSl7Yy5z'@;
put 'ZXQoam1lKGMsbCksYSl9KG13LHRoaXMsbCl9Z2V0Um9vdHMoKXtyZXR1cm4gQXJyYXkuZnJvbShyZChndyx0aGlzKS52YWx1ZXMoKSl9Z2V0Um9vdEJ5Q29sdW1uKGwpe2xldCBhO3JldHVybiByZChXOSx0aGlzKS5oYXMobCkmJihhPXJkKGd3LHRoaXMpLmdldChyZChXOSx0aGlzKS5nZXQo'@;
put 'bCkpKSxhfWdldE5vZGUobCxhKXtjb25zdCBkPXRoaXMuZ2V0Um9vdEJ5Q29sdW1uKGEpO2lmKCFkKXJldHVybjtjb25zdCBoPWEtcmQoVzksdGhpcykuZ2V0KGEpO2xldCB2LGY9MDtyZXR1cm4gZC53YWxrRG93bihNPT57Y29uc3R7ZGF0YTp7b3JpZ0NvbHNwYW46RCxoZWFkZXJMZXZlbDpa'@;
put 'fX09TTtpZihsPT09Wil7aWYoaD49ZiYmaDw9ZitELTEpcmV0dXJuIHY9TSx2LmRhdGEuaXNSb290PWE9PT12LmRhdGEuY29sdW1uSW5kZXgsITE7Zis9RH19KSx2fXJlYnVpbGRUcmVlSW5kZXgoKXtsZXQgbD0wO3JkKFc5LHRoaXMpLmNsZWFyKCksWW4ocmQoZ3csdGhpcyksYT0+e2xldFss'@;
put 'e2RhdGE6e2NvbHNwYW46ZH19XT1hO2ZvcihsZXQgaD1sO2g8bCtkO2grKylyZChXOSx0aGlzKS5zZXQoaCxsKTtsKz1kfSl9YnVpbGRUcmVlKCl7dGhpcy5jbGVhcigpO2NvbnN0IGw9cmQobXcsdGhpcykuZ2V0Q29sdW1uc0NvdW50KCk7bGV0IGE9MDtmb3IoO2E8bDspe2NvbnN0IGQ9cmQo'@;
put 'bXcsdGhpcykuZ2V0SGVhZGVyU2V0dGluZ3MoMCxhKSxoPW5ldyBJSDtyZChndyx0aGlzKS5zZXQoYSxoKSx0aGlzLmJ1aWxkTGVhdmVzKGgsYSwwLGQub3JpZ0NvbHNwYW4pLGErPWQub3JpZ0NvbHNwYW59dGhpcy5yZWJ1aWxkVHJlZUluZGV4KCl9YnVpbGRMZWF2ZXMobCxhLGQpe2xldCBo'@;
put 'PWFyZ3VtZW50cy5sZW5ndGg+MyYmdm9pZCAwIT09YXJndW1lbnRzWzNdP2FyZ3VtZW50c1szXToxO2NvbnN0IGY9cmQobXcsdGhpcykuZ2V0SGVhZGVyc1NldHRpbmdzKGQsYSxoKTtkKz0xLFluKGYsdj0+e2NvbnN0IE09ey4uLnYsaGVhZGVyTGV2ZWw6ZC0xLGNvbHVtbkluZGV4OmF9O2xl'@;
put 'dCBEOzE9PT1kPyhsLmRhdGE9TSxEPWwpOihEPW5ldyBJSChNKSxsLmFkZENoaWxkKEQpKSxkPHJkKG13LHRoaXMpLmdldExheWVyc0NvdW50KCkmJnRoaXMuYnVpbGRMZWF2ZXMoRCxhLGQsdi5vcmlnQ29sc3BhbiksYSs9di5vcmlnQ29sc3Bhbn0pfWNsZWFyKCl7cmQoZ3csdGhpcykuY2xl'@;
put 'YXIoKSxyZChXOSx0aGlzKS5jbGVhcigpfX1mdW5jdGlvbiB6bWUoYyxsKXtjLndhbGtEb3duKGE9PntsZXR7ZGF0YTpkLGNoaWxkczpofT1hO2lmKCFkLmlzSGlkZGVuJiYobChkLmNvbHVtbkluZGV4KSwwPT09aC5sZW5ndGgpKWZvcihsZXQgZj0xO2Y8ZC5jb2xzcGFuO2YrKylsKGQuY29s'@;
put 'dW1uSW5kZXgrZil9KX1mdW5jdGlvbiBSSChjLGwpe2xldHtjaGlsZHM6YX09YztpZigwIT09YS5sZW5ndGgpcmV0dXJuIGFbMF0uZGF0YVtsXX1mdW5jdGlvbiBMSChjKXtyZXR1cm4gUkgoYywib3JpZ0NvbHNwYW4iKT09PWMuZGF0YS5vcmlnQ29sc3Bhbn1mdW5jdGlvbiBhZWUoYyl7Y29u'@;
put 'c3R7ZGF0YTpsLGNoaWxkczphfT1jO2lmKCFsLmlzQ29sbGFwc2VkfHxsLmlzSGlkZGVufHxsLm9yaWdDb2xzcGFuPD0xKXJldHVybntyb2xsYmFja01vZGlmaWNhdGlvbjooKT0+e30sYWZmZWN0ZWRDb2x1bW5zOltdLGNvbHNwYW5Db21wZW5zYXRpb246MH07aWYoTEgoYykpcmV0dXJuIGFl'@;
put 'ZShhWzBdKTtsLmlzQ29sbGFwc2VkPSExO2NvbnN0IGg9YS5zbGljZSgxKSxmPW5ldyBTZXQ7bGV0IHY9MDtpZihoLmxlbmd0aD4wKVluKGgsTT0+e00ucmVwbGFjZVRyZWVXaXRoKE0uZGF0YS5jbG9uZWRUcmVlKSxNLmRhdGEuY2xvbmVkVHJlZT1udWxsLHYrPU0uZGF0YS5jb2xzcGFuLHpt'@;
put 'ZShNLFo9PntmLmFkZChaKX0pfSk7ZWxzZXtjb25zdHtjb2xzcGFuOk0sb3JpZ0NvbHNwYW46RCxjb2x1bW5JbmRleDpafT1sO3Y9RC1NO2ZvcihsZXQgcmU9MTtyZTxEO3JlKyspZi5hZGQoWityZSl9cmV0dXJuIGMud2Fsa1VwKE09Pntjb25zdHtkYXRhOkR9PU07RC5jb2xzcGFuKz12LEQu'@;
put 'Y29sc3Bhbj49RC5vcmlnQ29sc3Bhbj8oRC5jb2xzcGFuPUQub3JpZ0NvbHNwYW4sRC5pc0NvbGxhcHNlZD0hMSk6TEgoTSkmJihELmlzQ29sbGFwc2VkPVJIKE0sImlzQ29sbGFwc2VkIikpfSkse3JvbGxiYWNrTW9kaWZpY2F0aW9uOigpPT5vZWUoYyksYWZmZWN0ZWRDb2x1bW5zOkFycmF5'@;
put 'LmZyb20oZiksY29sc3BhbkNvbXBlbnNhdGlvbjp2fX1mdW5jdGlvbiBvZWUoYyl7dmFyIGw7Y29uc3R7ZGF0YTphLGNoaWxkczpkfT1jO2lmKGEuaXNDb2xsYXBzZWR8fGEuaXNIaWRkZW58fGEub3JpZ0NvbHNwYW48PTEpcmV0dXJue3JvbGxiYWNrTW9kaWZpY2F0aW9uOigpPT57fSxhZmZl'@;
put 'Y3RlZENvbHVtbnM6W10sY29sc3BhbkNvbXBlbnNhdGlvbjowfTtpZihMSChjKSlyZXR1cm4gb2VlKGRbMF0pO2EuaXNDb2xsYXBzZWQ9ITA7Y29uc3QgZj1kLnNsaWNlKDEpLHY9bmV3IFNldDtpZihmLmxlbmd0aD4wKVluKGYsRD0+e3ptZShELFo9Pnt2LmFkZChaKX0pLEQuZGF0YS5jbG9u'@;
put 'ZWRUcmVlPUQuY2xvbmVUcmVlKCksRC53YWxrRG93bihaPT57bGV0e2RhdGE6cmV9PVo7cmUuaXNIaWRkZW49ITB9KX0pO2Vsc2V7Y29uc3R7b3JpZ0NvbHNwYW46RCxjb2x1bW5JbmRleDpafT1hO2ZvcihsZXQgcmU9MTtyZTxEO3JlKyspdi5hZGQoWityZSl9Y29uc3QgTT1hLmNvbHNwYW4t'@;
put 'KG51bGwhPT0obD1SSChjLCJjb2xzcGFuIikpJiZ2b2lkIDAhPT1sP2w6MSk7cmV0dXJuIGMud2Fsa1VwKEQ9Pntjb25zdHtkYXRhOlp9PUQ7Wi5jb2xzcGFuLT1NLFouY29sc3Bhbjw9MT8oWi5jb2xzcGFuPTEsWi5pc0NvbGxhcHNlZD0hMCk6TEgoRCkmJihaLmlzQ29sbGFwc2VkPVJIKEQs'@;
put 'ImlzQ29sbGFwc2VkIikpfSkse3JvbGxiYWNrTW9kaWZpY2F0aW9uOigpPT5hZWUoYyksYWZmZWN0ZWRDb2x1bW5zOkFycmF5LmZyb20odiksY29sc3BhbkNvbXBlbnNhdGlvbjpNfX1jb25zdCBVbWU9bmV3IE1hcChbWyJjb2xsYXBzZSIsb2VlXSxbImV4cGFuZCIsYWVlXSxbImhpZGUtY29s'@;
put 'dW1uIixmdW5jdGlvbiBhNHQoYyxsKXtpZighTnVtYmVyLmlzSW50ZWdlcihsKSl0aHJvdyBuZXcgRXJyb3IoIlRoZSBwYXNzZWQgZ3JpZENvbHVtbkluZGV4IGFyZ3VtZW50IGhhcyBpbnZhbGlkIHR5cGUuIik7aWYoYy5jaGlsZHMubGVuZ3RoPjApdGhyb3cgbmV3IEVycm9yKGdsYFRoZSBw'@;
put 'YXNzZWQgbm9kZSBpcyBub3QgdGhlIGxhc3Qgbm9kZSBvbiB0aGUgdHJlZS4gT25seSBmb3JceDIwCnRoZSBsYXN0IG5vZGUsIHRoZSBoaWRlIGNvbHVtbiBtb2RpZmljYXRpb24gY2FuIGJlIGFwcGxpZWQuYCk7Y29uc3R7Y3Jvc3NIaWRkZW5Db2x1bW5zOmF9PWMuZGF0YTtpZihhLmluY2x1'@;
put 'ZGVzKGwpKXJldHVybjtsZXQgZD0hMTtjLndhbGtVcChoPT57Y29uc3R7ZGF0YTp7Y29sbGFwc2libGU6Zn19PWg7aWYoZilyZXR1cm4gZD0hMCwhMX0pLCFkJiZjLndhbGtVcChoPT57Y29uc3R7ZGF0YTpmfT1oO2YuY3Jvc3NIaWRkZW5Db2x1bW5zLnB1c2gobCksZi5jb2xzcGFuPjE/Zi5j'@;
put 'b2xzcGFuLT0xOmYuaXNIaWRkZW49ITB9KX1dLFsic2hvdy1jb2x1bW4iLGZ1bmN0aW9uIG80dChjLGwpe2lmKCFOdW1iZXIuaXNJbnRlZ2VyKGwpKXRocm93IG5ldyBFcnJvcigiVGhlIHBhc3NlZCBncmlkQ29sdW1uSW5kZXggYXJndW1lbnQgaGFzIGludmFsaWQgdHlwZS4iKTtpZihjLmNo'@;
put 'aWxkcy5sZW5ndGg+MCl0aHJvdyBuZXcgRXJyb3IoZ2xgVGhlIHBhc3NlZCBub2RlIGlzIG5vdCB0aGUgbGFzdCBub2RlIG9uIHRoZSB0cmVlLiBPbmx5IGZvclx4MjAKdGhlIGxhc3Qgbm9kZSwgdGhlIHNob3cgY29sdW1uIG1vZGlmaWNhdGlvbiBjYW4gYmUgYXBwbGllZC5gKTtjb25zdHtj'@;
put 'cm9zc0hpZGRlbkNvbHVtbnM6YX09Yy5kYXRhO2lmKCFhLmluY2x1ZGVzKGwpKXJldHVybjtsZXQgZD0hMTtjLndhbGtVcChoPT57Y29uc3R7ZGF0YTp7Y29sbGFwc2libGU6Zn19PWg7aWYoZilyZXR1cm4gZD0hMCwhMX0pLCFkJiZjLndhbGtVcChoPT57Y29uc3R7ZGF0YTpmfT1oO2YuY3Jv'@;
put 'c3NIaWRkZW5Db2x1bW5zLnNwbGljZShmLmNyb3NzSGlkZGVuQ29sdW1ucy5pbmRleE9mKGwpLDEpLCFmLmlzSGlkZGVuJiZmLmNvbHNwYW48Zi5vcmlnQ29sc3BhbiYmKGYuY29sc3Bhbis9MSksZi5pc0hpZGRlbj0hMX0pfV1dKTtmdW5jdGlvbiBPSChjKXtjb25zdCBsPVtdO3JldHVybiBZ'@;
put 'bihjLGE9PnthLndhbGtEb3duKGQ9Pntjb25zdCBoPWQuZGF0YSx7b3JpZ0NvbHNwYW46Zixjb2x1bW5JbmRleDp2LGhlYWRlckxldmVsOk0sY3Jvc3NIaWRkZW5Db2x1bW5zOkR9PWgsWj1mdW5jdGlvbiBjNHQoYyxsKXtsZXQgYTtyZXR1cm4gQXJyYXkuaXNBcnJheShjW2xdKT9hPWNbbF06'@;
put 'KGE9W10sY1tsXT1hKSxhfShsLE0pO2xldCByZT0hMTtmb3IobGV0IGNlPXY7Y2U8ditmO2NlKyspaWYoRC5pbmNsdWRlcyhjZSl8fHJlKVoucHVzaCh7bGFiZWw6IiIsaXNQbGFjZWhvbGRlcjohMH0pO2Vsc2V7Y29uc3QgRWU9bDR0KGgpO0VlLmlzUm9vdD0hMCxaLnB1c2goRWUpLHJlPSEw'@;
put 'fX0pfSksbH1mdW5jdGlvbiBsNHQoYyl7Y29uc3R7Y3Jvc3NIaWRkZW5Db2x1bW5zOmwsLi4uYX09ZWVlKGMpO3JldHVybiBhfWZ1bmN0aW9uIHNlZShjLGwsYSl7KGZ1bmN0aW9uIHU0dChjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRo'@;
put 'ZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9KShjLGwpLGwuc2V0KGMsYSl9ZnVuY3Rpb24gbUEoYyxsLGEpe3JldHVybiBjLnNldChabWUoYyxsKSxhKSxhfWZ1bmN0aW9uIHFjKGMsbCl7cmV0dXJuIGMuZ2V0KFptZShjLGwpKX1mdW5jdGlvbiBabWUoYyxs'@;
put 'LGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfXZhciBuND1uZXcgV2Vha01hcCxKZD1u'@;
put 'ZXcgV2Vha01hcCxZOT1uZXcgV2Vha01hcDtjbGFzcyBkNHR7Y29uc3RydWN0b3IoKXtzZWUodGhpcyxuNCxuZXcgcXB0KSxzZWUodGhpcyxKZCxuZXcgaTR0KHFjKG40LHRoaXMpKSksc2VlKHRoaXMsWTksW1tdXSl9c2V0U3RhdGUobCl7cWMobjQsdGhpcykuc2V0RGF0YShsKTtsZXQgYT0h'@;
put 'MTt0cnl7cWMoSmQsdGhpcykuYnVpbGRUcmVlKCl9Y2F0Y2h7cWMoSmQsdGhpcykuY2xlYXIoKSxxYyhuNCx0aGlzKS5jbGVhcigpLGE9ITB9cmV0dXJuIG1BKFk5LHRoaXMsT0gocWMoSmQsdGhpcykuZ2V0Um9vdHMoKSkpLGF9c2V0Q29sdW1uc0xpbWl0KGwpe3FjKG40LHRoaXMpLnNldENv'@;
put 'bHVtbnNMaW1pdChsKX1tZXJnZVN0YXRlV2l0aChsKXtjb25zdCBhPXlzKGwsZD0+e2xldHtyb3c6aCwuLi5mfT1kO3JldHVybntyb3c6aDwwP3RoaXMucm93Q29vcmRzVG9MZXZlbChoKTpoLC4uLmZ9fSk7cWMobjQsdGhpcykubWVyZ2VXaXRoKGEpLHFjKEpkLHRoaXMpLmJ1aWxkVHJlZSgp'@;
put 'LG1BKFk5LHRoaXMsT0gocWMoSmQsdGhpcykuZ2V0Um9vdHMoKSkpfW1hcFN0YXRlKGwpe3FjKG40LHRoaXMpLm1hcChsKSxxYyhKZCx0aGlzKS5idWlsZFRyZWUoKSxtQShZOSx0aGlzLE9IKHFjKEpkLHRoaXMpLmdldFJvb3RzKCkpKX1tYXBOb2RlcyhsKXtyZXR1cm4gcXUocWMoSmQsdGhp'@;
put 'cykuZ2V0Um9vdHMoKSwoYSxkKT0+KGQud2Fsa0Rvd24oaD0+e2NvbnN0IGY9bChoLmRhdGEpO3ZvaWQgMCE9PWYmJmEucHVzaChmKX0pLGEpLFtdKX10cmlnZ2VyTm9kZU1vZGlmaWNhdGlvbihsLGEsZCl7YTwwJiYoYT10aGlzLnJvd0Nvb3Jkc1RvTGV2ZWwoYSkpO2NvbnN0IGg9cWMoSmQs'@;
put 'dGhpcykuZ2V0Tm9kZShhLGQpO2xldCBmO3JldHVybiBoJiYoZj1mdW5jdGlvbiBzNHQoYyxsLGEpe2lmKCFVbWUuaGFzKGMpKXRocm93IG5ldyBFcnJvcihgVGhlIG5vZGUgbW9kaWZpZXIgYWN0aW9uICgiJHtjfSIpIGRvZXMgbm90IGV4aXN0LmApO3JldHVybiBVbWUuZ2V0KGMpKGwsYSl9'@;
put 'KGwsaCxkKSxtQShZOSx0aGlzLE9IKHFjKEpkLHRoaXMpLmdldFJvb3RzKCkpKSksZn10cmlnZ2VyQ29sdW1uTW9kaWZpY2F0aW9uKGwsYSl7cmV0dXJuIHRoaXMudHJpZ2dlck5vZGVNb2RpZmljYXRpb24obCwtMSxhKX1yb3dDb29yZHNUb0xldmVsKGwpe2lmKGw+PTApcmV0dXJuIG51bGw7'@;
put 'Y29uc3QgYT1sK01hdGgubWF4KHRoaXMuZ2V0TGF5ZXJzQ291bnQoKSwxKTtyZXR1cm4gYTwwP251bGw6YX1sZXZlbFRvUm93Q29vcmRzKGwpe2lmKGw8MClyZXR1cm4gbnVsbDtjb25zdCBhPWwtTWF0aC5tYXgodGhpcy5nZXRMYXllcnNDb3VudCgpLDEpO3JldHVybiBhPj0wP251bGw6YX1n'@;
put 'ZXRIZWFkZXJTZXR0aW5ncyhsLGEpe3ZhciBkLGg7cmV0dXJuIGw8MCYmKGw9dGhpcy5yb3dDb29yZHNUb0xldmVsKGwpKSxudWxsPT09bHx8bD49dGhpcy5nZXRMYXllcnNDb3VudCgpP251bGw6bnVsbCE9PShkPW51bGw9PT0oaD1xYyhZOSx0aGlzKVtsXSl8fHZvaWQgMD09PWg/dm9pZCAw'@;
put 'OmhbYV0pJiZ2b2lkIDAhPT1kP2Q6bnVsbH1nZXRIZWFkZXJUcmVlTm9kZURhdGEobCxhKXtjb25zdCBkPXRoaXMuZ2V0SGVhZGVyVHJlZU5vZGUobCxhKTtyZXR1cm4gZD97Li4uZC5kYXRhfTpudWxsfWdldEhlYWRlclRyZWVOb2RlKGwsYSl7cmV0dXJuIGw8MCYmKGw9dGhpcy5yb3dDb29y'@;
put 'ZHNUb0xldmVsKGwpKSxudWxsPT09bHx8bD49dGhpcy5nZXRMYXllcnNDb3VudCgpP251bGw6cWMoSmQsdGhpcykuZ2V0Tm9kZShsLGEpfHxudWxsfWZpbmRUb3BNb3N0RW50aXJlSGVhZGVyTGV2ZWwobCl7bGV0IGE9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/'@;
put 'YXJndW1lbnRzWzFdOmw7Y29uc3QgZD1hLWwrMTtsZXQgaD0hMSxmPW51bGw7Zm9yKGxldCB2PWw7djw9YTt2Kyspe2NvbnN0IE09cWMoSmQsdGhpcykuZ2V0Um9vdEJ5Q29sdW1uKHYpO2lmKCFNKWJyZWFrO2g9ITAsTS53YWxrRG93bihEPT57Y29uc3R7Y29sdW1uSW5kZXg6WixoZWFkZXJM'@;
put 'ZXZlbDpyZSxvcmlnQ29sc3BhbjpjZSxpc0hpZGRlbjpiZX09RC5kYXRhO2JlfHxjZTw9ZCYmWj49bCYmWitjZS0xPD1hJiYobnVsbD09PWZ8fHJlPGYpJiYoZj1yZSl9LEZtZSl9cmV0dXJuIGgmJm51bGw9PT1mPy0xOnRoaXMubGV2ZWxUb1Jvd0Nvb3JkcyhmPz8wKX1maW5kTGVmdE1vc3RD'@;
put 'b2x1bW5JbmRleChsLGEpe3ZhciBkO2NvbnN0e2lzUm9vdDpofT1udWxsIT09KGQ9dGhpcy5nZXRIZWFkZXJTZXR0aW5ncyhsLGEpKSYmdm9pZCAwIT09ZD9kOntpc1Jvb3Q6ITB9O2lmKGgpcmV0dXJuIGE7bGV0IGY9YS0xO2Zvcig7Zj49MDspe3ZhciB2O2NvbnN0e2lzUm9vdDpNfT1udWxs'@;
put 'IT09KHY9dGhpcy5nZXRIZWFkZXJTZXR0aW5ncyhsLGYpKSYmdm9pZCAwIT09dj92Ontpc1Jvb3Q6ITB9O2lmKE0pYnJlYWs7Zi09MX1yZXR1cm4gZn1maW5kUmlnaHRNb3N0Q29sdW1uSW5kZXgobCxhKXt2YXIgZDtjb25zdHtpc1Jvb3Q6aCxvcmlnQ29sc3BhbjpmfT1udWxsIT09KGQ9dGhp'@;
put 'cy5nZXRIZWFkZXJTZXR0aW5ncyhsLGEpKSYmdm9pZCAwIT09ZD9kOntpc1Jvb3Q6ITAsb3JpZ0NvbHNwYW46MX07aWYoaClyZXR1cm4gYStmLTE7bGV0IHY9YSsxO2Zvcig7djx0aGlzLmdldENvbHVtbnNDb3VudCgpOyl7dmFyIE07Y29uc3R7aXNSb290OkR9PW51bGwhPT0oTT10aGlzLmdl'@;
put 'dEhlYWRlclNldHRpbmdzKGwsdikpJiZ2b2lkIDAhPT1NP006e2lzUm9vdDohMH07aWYoRClicmVhazt2Kz0xfXJldHVybiB2LTF9Z2V0TGF5ZXJzQ291bnQoKXtyZXR1cm4gcWMobjQsdGhpcykuZ2V0TGF5ZXJzQ291bnQoKX1nZXRDb2x1bW5zQ291bnQoKXtyZXR1cm4gcWMobjQsdGhpcyku'@;
put 'Z2V0Q29sdW1uc0NvdW50KCl9Y2xlYXIoKXttQShZOSx0aGlzLFtdKSxxYyhuNCx0aGlzKS5jbGVhcigpLHFjKEpkLHRoaXMpLmNsZWFyKCl9fWZ1bmN0aW9uIHZBKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBoNHQoYyl7dmFyIGw9ZnVuY3Rpb24gZjR0KGMsbCl7aWYoIm9iamVjdCIhPXR5'@;
put 'cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJl'@;
put 'dHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZToh'@;
put 'MCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jb25zdCBnNHQ9Y2xhc3MgcDR0e2NvbnN0cnVjdG9yKGwsYSl7dkEodGhpcywiaG90Iix2b2lkIDApLHZBKHRoaXMsIm5lc3RlZEhlYWRlclNldHRpbmdzR2V0dGVyIix2b2lkIDApLHZBKHRoaXMsImxheWVyc0NvdW50'@;
put 'IiwwKSx2QSh0aGlzLCJjb250YWluZXIiLHZvaWQgMCksdkEodGhpcywid2lkdGhzTWFwIix2b2lkIDApLHRoaXMuaG90PWwsdGhpcy5uZXN0ZWRIZWFkZXJTZXR0aW5nc0dldHRlcj1hLHRoaXMud2lkdGhzTWFwPXRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLmNyZWF0ZUFuZFJlZ2lzdGVy'@;
put 'SW5kZXhNYXAoIm5lc3RlZEhlYWRlcnMud2lkdGhzTWFwIiwicGh5c2ljYWxJbmRleFRvVmFsdWUiKX1zZXRMYXllcnNDb3VudChsKXtyZXR1cm4gdGhpcy5sYXllcnNDb3VudD1sLHRoaXN9Z2V0V2lkdGgobCl7cmV0dXJuIHRoaXMud2lkdGhzTWFwLmdldFZhbHVlQXRJbmRleCh0aGlzLmhv'@;
put 'dC50b1BoeXNpY2FsQ29sdW1uKGwpKX1idWlsZFdpZHRoc01hcCgpe2NvbnN0IGw9dGhpcy5ob3QuZ2V0Q3VycmVudFRoZW1lTmFtZSgpO3RoaXMuY29udGFpbmVyPXRoaXMuaG90LnJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSx0aGlzLmNvbnRhaW5lci5jbGFzc0xpc3QuYWRk'@;
put 'KCJoYW5kc29udGFibGUiLCJodEdob3N0VGFibGUiLCJodEF1dG9TaXplIiksbCYmdGhpcy5jb250YWluZXIuY2xhc3NMaXN0LmFkZChsKSx0aGlzLl9idWlsZEdob3N0VGFibGUodGhpcy5jb250YWluZXIpLHRoaXMuaG90LnJvb3REb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHRoaXMuY29u'@;
put 'dGFpbmVyKTtjb25zdCBhPXRoaXMuY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwoInRyOmxhc3Qtb2YtdHlwZSB0aCIpLGQ9YS5sZW5ndGg7dGhpcy53aWR0aHNNYXAuY2xlYXIoKTtmb3IobGV0IGg9MDtoPGQ7aCsrKXtjb25zdCBmPXRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLmdldFZp'@;
put 'c3VhbEZyb21SZW5kZXJhYmxlSW5kZXgoaCksdj10aGlzLmhvdC50b1BoeXNpY2FsQ29sdW1uKGYpO3RoaXMud2lkdGhzTWFwLnNldFZhbHVlQXRJbmRleCh2LGFbaF0ub2Zmc2V0V2lkdGgpfXRoaXMuY29udGFpbmVyLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5jb250YWluZXIpLHRo'@;
put 'aXMuY29udGFpbmVyPW51bGx9X2J1aWxkR2hvc3RUYWJsZShsKXtjb25zdHtyb290RG9jdW1lbnQ6YSxjb2x1bW5JbmRleE1hcHBlcjpkfT10aGlzLmhvdCxoPWEuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLGY9YS5jcmVhdGVFbGVtZW50KCJ0YWJsZSIpLHY9ISF0aGlzLmhvdC5nZXRTZXR0'@;
put 'aW5ncygpLmRyb3Bkb3duTWVudSxNPWQuZ2V0UmVuZGVyYWJsZUluZGV4ZXNMZW5ndGgoKTtmb3IobGV0IEQ9MDtEPHRoaXMubGF5ZXJzQ291bnQ7RCsrKXtjb25zdCBaPWEuY3JlYXRlRWxlbWVudCgidHIiKTtmb3IobGV0IHJlPTA7cmU8TTtyZSsrKXtsZXQgY2U9ZC5nZXRWaXN1YWxGcm9t'@;
put 'UmVuZGVyYWJsZUluZGV4KHJlKTtudWxsPT09Y2UmJihjZT1yZSk7Y29uc3QgYmU9YS5jcmVhdGVFbGVtZW50KCJ0aCIpLEVlPXRoaXMubmVzdGVkSGVhZGVyU2V0dGluZ3NHZXR0ZXIoRCxjZSk7aWYoRWUmJighRWUuaXNQbGFjZWhvbGRlcnx8RWUuaXNIaWRkZW4pKXtsZXQgQmU9RWUubGFi'@;
put 'ZWw7diYmKEJlKz0nPGJ1dHRvbiBjbGFzcz0iY2hhbmdlVHlwZSI+PC9idXR0b24+JyksejcoYmUsQmUpLGJlLmNvbFNwYW49RWUuY29sc3BhbixaLmFwcGVuZENoaWxkKGJlKX19Zi5hcHBlbmRDaGlsZChaKX1oLmFwcGVuZENoaWxkKGYpLGwuYXBwZW5kQ2hpbGQoaCl9Y2xlYXIoKXt0aGlz'@;
put 'LndpZHRoc01hcC5jbGVhcigpLHRoaXMuY29udGFpbmVyPW51bGx9fTtmdW5jdGlvbiBXbWUoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIHY0dChjKXt2YXIgbD1mdW5jdGlvbiBiNHQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJp'@;
put 'bWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5n'@;
put 'Ij09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxj'@;
put 'fWZ1bmN0aW9uIGJBKGMsbCxhKXtZbWUoYyxsKSxsLnNldChjLGEpfWZ1bmN0aW9uIFltZShjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9ZnVuY3Rpb24g'@;
put 'R2coYyxsLGEpe3JldHVybiBjLnNldChYYyhjLGwpLGEpLGF9ZnVuY3Rpb24gX3MoYyxsKXtyZXR1cm4gYy5nZXQoWGMoYyxsKSl9ZnVuY3Rpb24gWGMoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Ro'@;
put 'cm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfWNvbnN0IEdtZT0ibmVzdGVkSGVhZGVycyI7dmFyIERsPW5ldyBXZWFrTWFwLEM2PW5ldyBXZWFrTWFwLHlBPW5ldyBXZWFrTWFwLFBIPW5ldyBXZWFrTWFwLEZIPW5ldyBX'@;
put 'ZWFrTWFwLGh1PW5ldyBXZWFrU2V0O2NsYXNzIF80dCBleHRlbmRzIEZze2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSxmdW5jdGlvbiBtNHQoYyxsKXtZbWUoYyxsKSxsLmFkZChjKX0odGhpcyxodSksYkEodGhpcyxEbCxuZXcgZDR0KSxiQSh0aGlzLEM2LG51bGwpLGJBKHRo'@;
put 'aXMseUEsbnVsbCksYkEodGhpcyxQSCwhMSksYkEodGhpcyxGSCxudWxsKSxXbWUodGhpcywiZ2hvc3RUYWJsZSIsbmV3IGc0dCh0aGlzLmhvdCwobCxhKT0+dGhpcy5nZXRIZWFkZXJTZXR0aW5ncyhsLGEpKSksV21lKHRoaXMsImRldGVjdGVkT3ZlcmxhcHBlZEhlYWRlcnMiLCExKX1zdGF0'@;
put 'aWMgZ2V0IFBMVUdJTl9LRVkoKXtyZXR1cm4gR21lfXN0YXRpYyBnZXQgUExVR0lOX1BSSU9SSVRZKCl7cmV0dXJuIDI4MH1pc0VuYWJsZWQoKXtyZXR1cm4hIXRoaXMuaG90LmdldFNldHRpbmdzKClbR21lXX1lbmFibGVQbHVnaW4oKXt2YXIgbD10aGlzO2lmKHRoaXMuZW5hYmxlZClyZXR1'@;
put 'cm47Y29uc3R7bmVzdGVkSGVhZGVyczphfT10aGlzLmhvdC5nZXRTZXR0aW5ncygpOyghQXJyYXkuaXNBcnJheShhKXx8IUFycmF5LmlzQXJyYXkoYVswXSkpJiZpbChnbGBZb3VyIE5lc3RlZCBIZWFkZXJzIHBsdWdpbiBjb25maWd1cmF0aW9uIGlzIGludmFsaWQuIFRoZSBzZXR0aW5ncyBo'@;
put 'YXMgdG8gYmVceDIwCiAgICAgICAgICAgICAgICAgICAgICAgIHBhc3NlZCBhcyBhbiBhcnJheSBvZiBhcnJheXMgZS5xLiBbWydBMScsIHsgbGFiZWw6ICdBMicsIGNvbHNwYW46IDIgfV1dYCksdGhpcy5hZGRIb29rKCJpbml0IiwoKT0+WGMoaHUsdGhpcyxGNHQpLmNhbGwodGhpcykpLHRo'@;
put 'aXMuYWRkSG9vaygiYWZ0ZXJMb2FkRGF0YSIsZnVuY3Rpb24oKXtmb3IodmFyIGQ9YXJndW1lbnRzLmxlbmd0aCxoPW5ldyBBcnJheShkKSxmPTA7ZjxkO2YrKyloW2ZdPWFyZ3VtZW50c1tmXTtyZXR1cm4gWGMoaHUsbCxINHQpLmNhbGwobCwuLi5oKX0pLHRoaXMuYWRkSG9vaygiYmVmb3Jl'@;
put 'T25DZWxsTW91c2VEb3duIixmdW5jdGlvbigpe2Zvcih2YXIgZD1hcmd1bWVudHMubGVuZ3RoLGg9bmV3IEFycmF5KGQpLGY9MDtmPGQ7ZisrKWhbZl09YXJndW1lbnRzW2ZdO3JldHVybiBYYyhodSxsLE00dCkuY2FsbChsLC4uLmgpfSksdGhpcy5hZGRIb29rKCJhZnRlck9uQ2VsbE1vdXNl'@;
put 'RG93biIsZnVuY3Rpb24oKXtmb3IodmFyIGQ9YXJndW1lbnRzLmxlbmd0aCxoPW5ldyBBcnJheShkKSxmPTA7ZjxkO2YrKyloW2ZdPWFyZ3VtZW50c1tmXTtyZXR1cm4gWGMoaHUsbCx4NHQpLmNhbGwobCwuLi5oKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlT25DZWxsTW91c2VPdmVyIixmdW5j'@;
put 'dGlvbigpe2Zvcih2YXIgZD1hcmd1bWVudHMubGVuZ3RoLGg9bmV3IEFycmF5KGQpLGY9MDtmPGQ7ZisrKWhbZl09YXJndW1lbnRzW2ZdO3JldHVybiBYYyhodSxsLEU0dCkuY2FsbChsLC4uLmgpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVPbkNlbGxNb3VzZVVwIixmdW5jdGlvbigpe2Zvcih2'@;
put 'YXIgZD1hcmd1bWVudHMubGVuZ3RoLGg9bmV3IEFycmF5KGQpLGY9MDtmPGQ7ZisrKWhbZl09YXJndW1lbnRzW2ZdO3JldHVybiBYYyhodSxsLFQ0dCkuY2FsbChsLC4uLmgpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVTZWxlY3Rpb25IaWdobGlnaHRTZXQiLGZ1bmN0aW9uKCl7Zm9yKHZhciBk'@;
put 'PWFyZ3VtZW50cy5sZW5ndGgsaD1uZXcgQXJyYXkoZCksZj0wO2Y8ZDtmKyspaFtmXT1hcmd1bWVudHNbZl07cmV0dXJuIFhjKGh1LGwsQTR0KS5jYWxsKGwsLi4uaCl9KSx0aGlzLmFkZEhvb2soIm1vZGlmeVRyYW5zZm9ybVN0YXJ0IixmdW5jdGlvbigpe2Zvcih2YXIgZD1hcmd1bWVudHMu'@;
put 'bGVuZ3RoLGg9bmV3IEFycmF5KGQpLGY9MDtmPGQ7ZisrKWhbZl09YXJndW1lbnRzW2ZdO3JldHVybiBYYyhodSxsLGs0dCkuY2FsbChsLC4uLmgpfSksdGhpcy5hZGRIb29rKCJhZnRlclNlbGVjdGlvbiIsKCk9PlhjKGh1LHRoaXMsSEgpLmNhbGwodGhpcykpLHRoaXMuYWRkSG9vaygiYWZ0'@;
put 'ZXJTZWxlY3Rpb25Gb2N1c1NldCIsKCk9PlhjKGh1LHRoaXMsSEgpLmNhbGwodGhpcykpLHRoaXMuYWRkSG9vaygiYmVmb3JlVmlld3BvcnRTY3JvbGxIb3Jpem9udGFsbHkiLGZ1bmN0aW9uKCl7Zm9yKHZhciBkPWFyZ3VtZW50cy5sZW5ndGgsaD1uZXcgQXJyYXkoZCksZj0wO2Y8ZDtmKysp'@;
put 'aFtmXT1hcmd1bWVudHNbZl07cmV0dXJuIFhjKGh1LGwsdzR0KS5jYWxsKGwsLi4uaCl9KSx0aGlzLmFkZEhvb2soImFmdGVyR2V0Q29sdW1uSGVhZGVyUmVuZGVyZXJzIixkPT5YYyhodSx0aGlzLEk0dCkuY2FsbCh0aGlzLGQpKSx0aGlzLmFkZEhvb2soIm1vZGlmeUNvbFdpZHRoIixmdW5j'@;
put 'dGlvbigpe2Zvcih2YXIgZD1hcmd1bWVudHMubGVuZ3RoLGg9bmV3IEFycmF5KGQpLGY9MDtmPGQ7ZisrKWhbZl09YXJndW1lbnRzW2ZdO3JldHVybiBYYyhodSxsLEw0dCkuY2FsbChsLC4uLmgpfSksdGhpcy5hZGRIb29rKCJtb2RpZnlDb2x1bW5IZWFkZXJWYWx1ZSIsZnVuY3Rpb24oKXtm'@;
put 'b3IodmFyIGQ9YXJndW1lbnRzLmxlbmd0aCxoPW5ldyBBcnJheShkKSxmPTA7ZjxkO2YrKyloW2ZdPWFyZ3VtZW50c1tmXTtyZXR1cm4gWGMoaHUsbCxPNHQpLmNhbGwobCwuLi5oKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlSGlnaGxpZ2h0aW5nQ29sdW1uSGVhZGVyIixmdW5jdGlvbigpe2Zv'@;
put 'cih2YXIgZD1hcmd1bWVudHMubGVuZ3RoLGg9bmV3IEFycmF5KGQpLGY9MDtmPGQ7ZisrKWhbZl09YXJndW1lbnRzW2ZdO3JldHVybiBYYyhodSxsLEM0dCkuY2FsbChsLC4uLmgpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVDb3B5IixmdW5jdGlvbigpe2Zvcih2YXIgZD1hcmd1bWVudHMubGVu'@;
put 'Z3RoLGg9bmV3IEFycmF5KGQpLGY9MDtmPGQ7ZisrKWhbZl09YXJndW1lbnRzW2ZdO3JldHVybiBYYyhodSxsLFM0dCkuY2FsbChsLC4uLmgpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVTZWxlY3RDb2x1bW5zIixmdW5jdGlvbigpe2Zvcih2YXIgZD1hcmd1bWVudHMubGVuZ3RoLGg9bmV3IEFy'@;
put 'cmF5KGQpLGY9MDtmPGQ7ZisrKWhbZl09YXJndW1lbnRzW2ZdO3JldHVybiBYYyhodSxsLEQ0dCkuY2FsbChsLC4uLmgpfSksdGhpcy5hZGRIb29rKCJhZnRlclZpZXdwb3J0Q29sdW1uQ2FsY3VsYXRvck92ZXJyaWRlIixmdW5jdGlvbigpe2Zvcih2YXIgZD1hcmd1bWVudHMubGVuZ3RoLGg9'@;
put 'bmV3IEFycmF5KGQpLGY9MDtmPGQ7ZisrKWhbZl09YXJndW1lbnRzW2ZdO3JldHVybiBYYyhodSxsLFI0dCkuY2FsbChsLC4uLmgpfSksdGhpcy5hZGRIb29rKCJtb2RpZnlGb2N1c2VkRWxlbWVudCIsZnVuY3Rpb24oKXtmb3IodmFyIGQ9YXJndW1lbnRzLmxlbmd0aCxoPW5ldyBBcnJheShk'@;
put 'KSxmPTA7ZjxkO2YrKyloW2ZdPWFyZ3VtZW50c1tmXTtyZXR1cm4gWGMoaHUsbCxQNHQpLmNhbGwobCwuLi5oKX0pLHRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLmFkZExvY2FsSG9vaygiY2FjaGVVcGRhdGVkIiwoKT0+WGMoaHUsdGhpcyxISCkuY2FsbCh0aGlzKSksdGhpcy5ob3Qucm93'@;
put 'SW5kZXhNYXBwZXIuYWRkTG9jYWxIb29rKCJjYWNoZVVwZGF0ZWQiLCgpPT5YYyhodSx0aGlzLEhIKS5jYWxsKHRoaXMpKSxzdXBlci5lbmFibGVQbHVnaW4oKSx0aGlzLnVwZGF0ZVBsdWdpbigpfXVwZGF0ZVBsdWdpbigpe2lmKCF0aGlzLmhvdC52aWV3KXJldHVybjtjb25zdHtuZXN0ZWRI'@;
put 'ZWFkZXJzOmx9PXRoaXMuaG90LmdldFNldHRpbmdzKCk7X3MoRGwsdGhpcykuc2V0Q29sdW1uc0xpbWl0KHRoaXMuaG90LmNvdW50Q29scygpKSxBcnJheS5pc0FycmF5KGwpJiYodGhpcy5kZXRlY3RlZE92ZXJsYXBwZWRIZWFkZXJzPV9zKERsLHRoaXMpLnNldFN0YXRlKGwpKSx0aGlzLmRl'@;
put 'dGVjdGVkT3ZlcmxhcHBlZEhlYWRlcnMmJmlsKGdsYFlvdXIgTmVzdGVkIEhlYWRlcnMgcGx1Z2luIHNldHVwIGNvbnRhaW5zIG92ZXJsYXBwaW5nIGhlYWRlcnMuIFRoaXMga2luZCBvZiBjb25maWd1cmF0aW9uXHgyMAogICAgICAgICAgICAgICAgICAgICAgICBpcyBjdXJyZW50bHkgbm90'@;
put 'IHN1cHBvcnRlZC5gKSx0aGlzLmVuYWJsZWQmJnRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLmhpZGluZ01hcHNDb2xsZWN0aW9uLmdldE1lcmdlZFZhbHVlcygpLmZvckVhY2goKGEsZCk9Pntjb25zdCBoPSEwPT09YT8iaGlkZS1jb2x1bW4iOiJzaG93LWNvbHVtbiI7X3MoRGwsdGhpcyku'@;
put 'dHJpZ2dlckNvbHVtbk1vZGlmaWNhdGlvbihoLGQpfSksIV9zKEM2LHRoaXMpJiZ0aGlzLmVuYWJsZWQmJkdnKEM2LHRoaXMsdGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIuY3JlYXRlQ2hhbmdlc09ic2VydmVyKCJoaWRpbmciKS5zdWJzY3JpYmUoYT0+e2EuZm9yRWFjaChkPT57bGV0e29w'@;
put 'OmgsaW5kZXg6ZixuZXdWYWx1ZTp2fT1kO2lmKCJyZXBsYWNlIj09PWgpe2NvbnN0IE09ITA9PT12PyJoaWRlLWNvbHVtbiI6InNob3ctY29sdW1uIjtfcyhEbCx0aGlzKS50cmlnZ2VyQ29sdW1uTW9kaWZpY2F0aW9uKE0sZil9fSksdGhpcy5naG9zdFRhYmxlLmJ1aWxkV2lkdGhzTWFwKCl9'@;
put 'KSksdGhpcy5naG9zdFRhYmxlLnNldExheWVyc0NvdW50KHRoaXMuZ2V0TGF5ZXJzQ291bnQoKSkuYnVpbGRXaWR0aHNNYXAoKSxzdXBlci51cGRhdGVQbHVnaW4oKX1kaXNhYmxlUGx1Z2luKCl7dGhpcy5jbGVhckNvbHNwYW5zKCksX3MoRGwsdGhpcykuY2xlYXIoKSxfcyhDNix0aGlzKS51'@;
put 'bnN1YnNjcmliZSgpLEdnKEM2LHRoaXMsbnVsbCksdGhpcy5naG9zdFRhYmxlLmNsZWFyKCksc3VwZXIuZGlzYWJsZVBsdWdpbigpfWdldFN0YXRlTWFuYWdlcigpe3JldHVybiBfcyhEbCx0aGlzKX1nZXRMYXllcnNDb3VudCgpe3JldHVybiBfcyhEbCx0aGlzKS5nZXRMYXllcnNDb3VudCgp'@;
put 'fWdldEhlYWRlclNldHRpbmdzKGwsYSl7cmV0dXJuIF9zKERsLHRoaXMpLmdldEhlYWRlclNldHRpbmdzKGwsYSl9Y2xlYXJDb2xzcGFucygpe2lmKCF0aGlzLmhvdC52aWV3KXJldHVybjtjb25zdHtfd3Q6bH09dGhpcy5ob3QudmlldyxhPWwuZ2V0U2V0dGluZygiY29sdW1uSGVhZGVycyIp'@;
put 'Lmxlbmd0aCxkPWwud3RUYWJsZS5USEVBRCxoPWwud3RPdmVybGF5cy50b3BPdmVybGF5LmNsb25lLnd0VGFibGUuVEhFQUQsZj1sLnd0T3ZlcmxheXMudG9wSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5P2wud3RPdmVybGF5cy50b3BJbmxpbmVTdGFydENvcm5lck92ZXJsYXkuY2xvbmUud3RU'@;
put 'YWJsZS5USEVBRDpudWxsO2ZvcihsZXQgdj0wO3Y8YTt2Kyspe2NvbnN0IE09ZC5jaGlsZE5vZGVzW3ZdO2lmKCFNKWJyZWFrO2NvbnN0IEQ9aC5jaGlsZE5vZGVzW3ZdLFo9Zj9mLmNoaWxkTm9kZXNbdl06bnVsbDtmb3IobGV0IHJlPTAsY2U9TS5jaGlsZE5vZGVzLmxlbmd0aDtyZTxjZTty'@;
put 'ZSsrKU0uY2hpbGROb2Rlc1tyZV0ucmVtb3ZlQXR0cmlidXRlKCJjb2xzcGFuIiksbG8oTS5jaGlsZE5vZGVzW3JlXSwiaGlkZGVuSGVhZGVyIiksRCYmRC5jaGlsZE5vZGVzW3JlXSYmKEQuY2hpbGROb2Rlc1tyZV0ucmVtb3ZlQXR0cmlidXRlKCJjb2xzcGFuIiksbG8oRC5jaGlsZE5vZGVz'@;
put 'W3JlXSwiaGlkZGVuSGVhZGVyIikpLGYmJlomJlouY2hpbGROb2Rlc1tyZV0mJihaLmNoaWxkTm9kZXNbcmVdLnJlbW92ZUF0dHJpYnV0ZSgiY29sc3BhbiIpLGxvKFouY2hpbGROb2Rlc1tyZV0sImhpZGRlbkhlYWRlciIpKX19aGVhZGVyUmVuZGVyZXJGYWN0b3J5KGwpe3ZhciBhPXRoaXM7'@;
put 'Y29uc3QgZD10aGlzLmhvdC52aWV3Ll93dC5nZXRTZXR0aW5nKCJmaXhlZENvbHVtbnNTdGFydCIpO3JldHVybihoLGYpPT57dmFyIHY7Y29uc3R7Y29sdW1uSW5kZXhNYXBwZXI6TSx2aWV3OkR9PXRoaXMuaG90O2xldCBaPU0uZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleChoKTtudWxs'@;
put 'PT09WiYmKFo9aCksZi5yZW1vdmVBdHRyaWJ1dGUoImNvbHNwYW4iKSxsbyhmLCJoaWRkZW5IZWFkZXIiKSxsbyhmLCJoaWRkZW5IZWFkZXJUZXh0Iik7Y29uc3R7Y29sc3BhbjpyZSxpc0hpZGRlbjpjZSxpc1BsYWNlaG9sZGVyOmJlLGhlYWRlckNsYXNzTmFtZXM6RWV9PW51bGwhPT0odj1f'@;
put 'cyhEbCx0aGlzKS5nZXRIZWFkZXJTZXR0aW5ncyhsLFopKSYmdm9pZCAwIT09dj92OntsYWJlbDoiIn07aWYoYmV8fGNlKVRpKGYsImhpZGRlbkhlYWRlciIpO2Vsc2UgaWYocmU+MSl7dmFyIEJlLHFlLHJ0O2NvbnN0e3d0T3ZlcmxheXM6cHR9PUQuX3d0LGR0PW51bGw9PT0oQmU9cHQudG9w'@;
put 'SW5saW5lU3RhcnRDb3JuZXJPdmVybGF5KXx8dm9pZCAwPT09QmU/dm9pZCAwOkJlLmNsb25lLnd0VGFibGUuVEhFQUQuY29udGFpbnMoZiksSnQ9bnVsbD09PShxZT1wdC5pbmxpbmVTdGFydE92ZXJsYXkpfHx2b2lkIDA9PT1xZT92b2lkIDA6cWUuY2xvbmUud3RUYWJsZS5USEVBRC5jb250'@;
put 'YWlucyhmKTsobnVsbD09PShydD1wdC50b3BPdmVybGF5KXx8dm9pZCAwPT09cnQ/dm9pZCAwOnJ0LmNsb25lLnd0VGFibGUuVEhFQUQuY29udGFpbnMoZikpJiZaPGQmJlRpKGYsImhpZGRlbkhlYWRlclRleHQiKTtjb25zdCBDbj1kdHx8SnQ/TWF0aC5taW4ocmUsZC1oKTpyZTtDbj4xJiZm'@;
put 'LnNldEF0dHJpYnV0ZSgiY29sc3BhbiIsQ24pfWlmKHRoaXMuaG90LnZpZXcuYXBwZW5kQ29sSGVhZGVyKFosZixmdW5jdGlvbigpe3JldHVybiBhLmdldENvbHVtbkhlYWRlclZhbHVlKC4uLmFyZ3VtZW50cyl9LGwpLCFiZSYmIWNlKXtjb25zdCBwdD1mLnF1ZXJ5U2VsZWN0b3IoImRpdi5y'@;
put 'ZWxhdGl2ZSIpO3B0JiZFZSYmRWUubGVuZ3RoPjAmJihsbyhwdCx0aGlzLmhvdC5nZXRDb2x1bW5NZXRhKFopLmhlYWRlckNsYXNzTmFtZSksVGkocHQsRWUpKX19fWdldENvbHVtbkhlYWRlclZhbHVlKGwsYSl7dmFyIGQ7Y29uc3R7aXNIaWRkZW46aCxpc1BsYWNlaG9sZGVyOmZ9PW51bGwh'@;
put 'PT0oZD1fcyhEbCx0aGlzKS5nZXRIZWFkZXJTZXR0aW5ncyhhLGwpKSYmdm9pZCAwIT09ZD9kOnt9O3JldHVybiBmfHxoPyIiOnRoaXMuaG90LmdldENvbEhlYWRlcihsLGEpfWRlc3Ryb3koKXtHZyhEbCx0aGlzLG51bGwpLG51bGwhPT1fcyhDNix0aGlzKSYmKF9zKEM2LHRoaXMpLnVuc3Vi'@;
put 'c2NyaWJlKCksR2coQzYsdGhpcyxudWxsKSksc3VwZXIuZGVzdHJveSgpfV9nZXRIZWFkZXJUcmVlTm9kZURhdGFCeUNvb3JkcyhsKXtpZighKGwucm93Pj0wfHxsLmNvbDwwKSlyZXR1cm4gX3MoRGwsdGhpcykuZ2V0SGVhZGVyVHJlZU5vZGVEYXRhKGwucm93LGwuY29sKX19ZnVuY3Rpb24g'@;
put 'SEgoKXt2YXIgYztjb25zdCBsPW51bGw9PT0oYz10aGlzLmhvdCl8fHZvaWQgMD09PWM/dm9pZCAwOmMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKTtpZighbClyZXR1cm47Y29uc3R7aGlnaGxpZ2h0OmF9PWw7aWYoYS5pc0hlYWRlcigpJiZhLmNvbD49MCl7Y29uc3QgaD1fcyhEbCx0aGlzKS5m'@;
put 'aW5kTGVmdE1vc3RDb2x1bW5JbmRleChhLnJvdyxhLmNvbCksZj10aGlzLmhvdC5zZWxlY3Rpb24uaGlnaGxpZ2h0LmdldEZvY3VzKCk7Zi52aXN1YWxDZWxsUmFuZ2UuaGlnaGxpZ2h0LmNvbD1oLGYudmlzdWFsQ2VsbFJhbmdlLmZyb20uY29sPWgsZi52aXN1YWxDZWxsUmFuZ2UudG8uY29s'@;
put 'PWgsZi5jb21taXQoKX19ZnVuY3Rpb24gdzR0KGMsbCl7dmFyIGE7Y29uc3QgZD10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpO2lmKCFkKXJldHVybiBjO2NvbnN0e2hpZ2hsaWdodDpofT1kLHtuYXZpZ2FibGVIZWFkZXJzOmZ9PXRoaXMuaG90LmdldFNldHRpbmdzKCksdj10aGlz'@;
put 'LmhvdC5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Q29sdW1uSGVhZGVyKCksTT1mP2gucm93Om51bGw9PT0oYT1fcyhGSCx0aGlzKSl8fHZvaWQgMD09PWE/dm9pZCAwOmEucm93LEQ9dj9jOmguY29sLFo9TTwwJiZEPj0wO2lmKEdnKEZILHRoaXMsbnVsbCksIVopcmV0dXJuIGM7Y29uc3QgcmU9'@;
put 'dGhpcy5ob3QuZ2V0Rmlyc3RGdWxseVZpc2libGVDb2x1bW4oKSxjZT10aGlzLmhvdC5nZXRMYXN0RnVsbHlWaXNpYmxlQ29sdW1uKCksYmU9Y2UtcmUrMSxFZT1fcyhEbCx0aGlzKS5maW5kTGVmdE1vc3RDb2x1bW5JbmRleChNLEQpLEJlPV9zKERsLHRoaXMpLmZpbmRSaWdodE1vc3RDb2x1'@;
put 'bW5JbmRleChNLEQpLHFlPUJlLUVlKzE7aWYoRWU8cmUmJkJlPmNlKXJldHVybiBFZTtpZih2KXtsZXQgcnQ9bnVsbDtyZXR1cm4gRWU+PXJlJiZCZT5jZT9xZT5iZT8obC52YWx1ZT0ic3RhcnQiLHJ0PUVlKToobC52YWx1ZT0iZW5kIixydD1CZSk6RWU8cmUmJkJlPD1jZSYmKHFlPmJlPyhs'@;
put 'LnZhbHVlPSJlbmQiLHJ0PUJlKToobC52YWx1ZT0ic3RhcnQiLHJ0PUVlKSkscnR9cmV0dXJuIEVlPD1yZT9FZTpCZX1mdW5jdGlvbiBDNHQoYyxsLGEpe2NvbnN0IGQ9X3MoRGwsdGhpcykuZ2V0SGVhZGVyVHJlZU5vZGVEYXRhKGwsYyk7aWYoIWQpcmV0dXJuIGM7Y29uc3R7Y29sdW1uQ3Vy'@;
put 'c29yOmgsc2VsZWN0aW9uVHlwZTpmLHNlbGVjdGlvbldpZHRoOnZ9PWEse2lzUm9vdDpNLGNvbHNwYW46RH09X3MoRGwsdGhpcykuZ2V0SGVhZGVyU2V0dGluZ3MobCxjKTtpZihmPT09bVgpe2lmKCFNKXJldHVybiBkLmNvbHVtbkluZGV4fWVsc2UgaWYoZj09PVczZSYmKEQ+di1ofHwhTSkp'@;
put 'cmV0dXJuIG51bGw7cmV0dXJuIGN9ZnVuY3Rpb24gUzR0KGMsbCxhKXtsZXR7Y29sdW1uSGVhZGVyc0NvdW50OmR9PWE7aWYoMCE9PWQpZm9yKGxldCBmPTA7ZjxsLmxlbmd0aDtmKyspe2NvbnN0e3N0YXJ0Um93OnYsc3RhcnRDb2w6TSxlbmRSb3c6RCxlbmRDb2w6Wn09bFtmXSxyZT1ELXYr'@;
put 'MTtpZih2Pj0wfHwxPT1NLVorMSlicmVhaztmb3IobGV0IGJlPU07YmU8PVo7YmUrKylmb3IobGV0IEVlPXY7RWU8PUQ7RWUrKyl7dmFyIGg7Y29uc3QgQmU9cmUrRWUscWU9YmUtTTswIT09cWUmJiExPT09KG51bGw9PT0oaD1fcyhEbCx0aGlzKS5nZXRIZWFkZXJUcmVlTm9kZURhdGEoRWUs'@;
put 'YmUpKXx8dm9pZCAwPT09aD92b2lkIDA6aC5pc1Jvb3QpJiYoY1tCZV1bcWVdPSIiKX19fWZ1bmN0aW9uIE00dChjLGwsYSxkKXt0aGlzLl9nZXRIZWFkZXJUcmVlTm9kZURhdGFCeUNvb3JkcyhsKSYmKGQuY29sdW1uPSEwKX1mdW5jdGlvbiB4NHQoYyxsKXtjb25zdCBhPXRoaXMuX2dldEhl'@;
put 'YWRlclRyZWVOb2RlRGF0YUJ5Q29vcmRzKGwpO2lmKCFhKXJldHVybjtHZyh5QSx0aGlzLGwuY2xvbmUoKSksR2coUEgsdGhpcywhMCk7Y29uc3R7c2VsZWN0aW9uOmR9PXRoaXMuaG90LGg9ZC5pc1NlbGVjdGVkKCk/ZC5nZXRTZWxlY3RlZFJhbmdlKCkuY3VycmVudCgpOm51bGwsZj1bXSx7'@;
put 'Y29sdW1uSW5kZXg6dixvcmlnQ29sc3BhbjpNfT1hLEQ9IWQuaW5JblNlbGVjdGlvbihsKTtjLnNoaWZ0S2V5JiZoP2wuY29sPGguZnJvbS5jb2w/Zi5wdXNoKGguZ2V0VG9wRW5kQ29ybmVyKCkuY29sLHYsbC5yb3cpOmYucHVzaChsLmNvbD5oLmZyb20uY29sP2guZ2V0VG9wU3RhcnRDb3Ju'@;
put 'ZXIoKS5jb2w6dix2K00tMSxsLnJvdyk6KFVPKGMpfHxIbShjKSYmRHx8aWZlKGMpKSYmZi5wdXNoKHYsditNLTEsbC5yb3cpLGQuc2VsZWN0Q29sdW1ucyguLi5mKX1mdW5jdGlvbiBFNHQoYyxsLGEsZCl7aWYoIXRoaXMuaG90LnZpZXcuaXNNb3VzZURvd24oKXx8ZC5jb2x1bW4pcmV0dXJu'@;
put 'O2NvbnN0IGg9dGhpcy5fZ2V0SGVhZGVyVHJlZU5vZGVEYXRhQnlDb29yZHMobCk7aWYoIWgpcmV0dXJuO2NvbnN0e2NvbHVtbkluZGV4OmYsb3JpZ0NvbHNwYW46dn09aCxNPXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCksRD1NLmdldFRvcFN0YXJ0Q29ybmVyKCksWj1NLmdldEJv'@;
put 'dHRvbUVuZENvcm5lcigpLHtmcm9tOnJlfT1NO2QuY29sdW1uPSEwLGQuY2VsbD0hMDtjb25zdCBjZT1bXSxiZT1rcyhsLnJvdywtMS8wLC0xKTtsLmNvbDxyZS5jb2w/Y2UucHVzaChaLmNvbCxmLGJlKTpjZS5wdXNoKGwuY29sPnJlLmNvbD9ELmNvbDpmLGYrdi0xLGJlKSx0aGlzLmhvdC5z'@;
put 'ZWxlY3Rpb24uc2VsZWN0Q29sdW1ucyguLi5jZSl9ZnVuY3Rpb24gVDR0KCl7R2coUEgsdGhpcywhMSl9ZnVuY3Rpb24gQTR0KCl7Y29uc3R7bmF2aWdhYmxlSGVhZGVyczpjfT10aGlzLmhvdC5nZXRTZXR0aW5ncygpO2lmKCF0aGlzLmhvdC52aWV3LmlzTW91c2VEb3duKCl8fCFfcyhQSCx0'@;
put 'aGlzKXx8IWMpcmV0dXJuO2NvbnN0IGw9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSxhPWwuZ2V0VG9wU3RhcnRDb3JuZXIoKS5jb2wsZD1sLmdldEJvdHRvbUVuZENvcm5lcigpLmNvbCx7Y29sdW1uSW5kZXg6aCxvcmlnQ29sc3BhbjpmfT1fcyhEbCx0aGlzKS5nZXRIZWFkZXJU'@;
put 'cmVlTm9kZURhdGEoX3MoeUEsdGhpcykucm93LF9zKHlBLHRoaXMpLmNvbCk7aWYobC5zZXRIaWdobGlnaHQoX3MoeUEsdGhpcykpLGY+bC5nZXRXaWR0aCgpfHxoPGF8fGgrZi0xPmQpe2NvbnN0IHY9X3MoRGwsdGhpcykuZmluZFRvcE1vc3RFbnRpcmVIZWFkZXJMZXZlbChrcyhhLGgsaCtm'@;
put 'LTEpLGtzKGQsaCxoK2YtMSkpO2wuaGlnaGxpZ2h0LnJvdz12LGwuaGlnaGxpZ2h0LmNvbD1sLmZyb20uY29sfX1mdW5jdGlvbiBrNHQoYyl7Y29uc3R7aGlnaGxpZ2h0Omx9PXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCksYT10aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhsLnJv'@;
put 'dytjLnJvdyxsLmNvbCtjLmNvbCk7aWYoIShhLmlzSGVhZGVyKCkmJmEuY29sPj0wKSlyZXR1cm47Y29uc3QgaD1fcyhEbCx0aGlzKS5maW5kTGVmdE1vc3RDb2x1bW5JbmRleChhLnJvdyxhLmNvbCksZj1fcyhEbCx0aGlzKS5maW5kUmlnaHRNb3N0Q29sdW1uSW5kZXgoYS5yb3csYS5jb2wp'@;
put 'O2lmKGMuY29sPDApe2NvbnN0IE09dGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGwuY29sPj1oJiZsLmNvbDw9Zj9oLTE6ZiwtMSk7Yy5jb2w9bnVsbD09PU0/LXRoaXMuaG90LnZpZXcuY291bnRSZW5kZXJhYmxlQ29sdW1uc0luUmFuZ2UoMCxs'@;
put 'LmNvbCk6LU1hdGgubWF4KHRoaXMuaG90LnZpZXcuY291bnRSZW5kZXJhYmxlQ29sdW1uc0luUmFuZ2UoTSxsLmNvbCktMSwxKX1lbHNlIGlmKGMuY29sPjApe2NvbnN0IE09dGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGwuY29sPj1oJiZsLmNv'@;
put 'bDw9Zj9mKzE6aCwxKTtjLmNvbD1udWxsPT09TT90aGlzLmhvdC52aWV3LmNvdW50UmVuZGVyYWJsZUNvbHVtbnNJblJhbmdlKGwuY29sLHRoaXMuaG90LmNvdW50Q29scygpKTpNYXRoLm1heCh0aGlzLmhvdC52aWV3LmNvdW50UmVuZGVyYWJsZUNvbHVtbnNJblJhbmdlKGwuY29sLE0pLTEs'@;
put 'MSl9fWZ1bmN0aW9uIEQ0dChjLGwsYSl7Y29uc3QgZD1jLnJvdyxoPXRoaXMuX2dldEhlYWRlclRyZWVOb2RlRGF0YUJ5Q29vcmRzKHtyb3c6ZCxjb2w6Yy5jb2x9KSxmPXRoaXMuX2dldEhlYWRlclRyZWVOb2RlRGF0YUJ5Q29vcmRzKHtyb3c6ZCxjb2w6bC5jb2x9KTtHZyhGSCx0aGlzLGEu'@;
put 'Y2xvbmUoKSksbC5jb2w8Yy5jb2w/KGgmJihjLmNvbD1oLmNvbHVtbkluZGV4K2gub3JpZ0NvbHNwYW4tMSksZiYmKGwuY29sPWYuY29sdW1uSW5kZXgpKTpsLmNvbD49Yy5jb2wmJihoJiYoYy5jb2w9aC5jb2x1bW5JbmRleCksZiYmKGwuY29sPWYuY29sdW1uSW5kZXgrZi5vcmlnQ29sc3Bh'@;
put 'bi0xKSl9ZnVuY3Rpb24gSTR0KGMpe2lmKF9zKERsLHRoaXMpLmdldExheWVyc0NvdW50KCk+MCl7Yy5sZW5ndGg9MDtmb3IobGV0IGw9MDtsPF9zKERsLHRoaXMpLmdldExheWVyc0NvdW50KCk7bCsrKWMucHVzaCh0aGlzLmhlYWRlclJlbmRlcmVyRmFjdG9yeShsKSl9fWZ1bmN0aW9uIFI0'@;
put 'dChjKXtjb25zdCBsPV9zKERsLHRoaXMpLmdldExheWVyc0NvdW50KCk7bGV0IGE9Yy5zdGFydENvbHVtbixkPSEhbDtmb3IobGV0IGg9MDtoPGw7aCsrKXtjb25zdCBmPV9zKERsLHRoaXMpLmZpbmRMZWZ0TW9zdENvbHVtbkluZGV4KGgsYy5zdGFydENvbHVtbiksdj10aGlzLmhvdC5jb2x1'@;
put 'bW5JbmRleE1hcHBlci5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KGYpO2lmKGY+PTAmJihkPSExKSxtMSh2KSYmdjxjLnN0YXJ0Q29sdW1uKXthPXY7YnJlYWt9fWMuc3RhcnRDb2x1bW49ZD9fcyhEbCx0aGlzKS5nZXRIZWFkZXJUcmVlTm9kZURhdGEoMCxhKS5jb2x1bW5JbmRleDph'@;
put 'fWZ1bmN0aW9uIEw0dChjLGwpe2NvbnN0IGE9dGhpcy5naG9zdFRhYmxlLmdldFdpZHRoKGwpO3JldHVybiBjPmE/YzphfWZ1bmN0aW9uIE80dChjLGwsYSl7dmFyIGQ7Y29uc3R7bGFiZWw6aH09bnVsbCE9PShkPV9zKERsLHRoaXMpLmdldEhlYWRlclRyZWVOb2RlRGF0YShhLGwpKSYmdm9p'@;
put 'ZCAwIT09ZD9kOntsYWJlbDoiIn07cmV0dXJuIGh9ZnVuY3Rpb24gUDR0KGMsbCl7aWYoYzwwKXJldHVybiB0aGlzLmhvdC5nZXRDZWxsKGMsX3MoRGwsdGhpcykuZmluZExlZnRNb3N0Q29sdW1uSW5kZXgoYyxsKSwhMCl9ZnVuY3Rpb24gRjR0KCl7dGhpcy51cGRhdGVQbHVnaW4oKX1mdW5j'@;
put 'dGlvbiBINHQoYyxsKXtsfHx0aGlzLnVwZGF0ZVBsdWdpbigpfWZ1bmN0aW9uIF9BKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBONHQoYyl7dmFyIGw9ZnVuY3Rpb24gVjR0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2'@;
put 'ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1s'@;
put 'P1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jb25z'@;
put 'dCBqNHQ9Y2xhc3MgQjR0e2NvbnN0cnVjdG9yKGwsYSl7X0EodGhpcywiaG90Iix2b2lkIDApLF9BKHRoaXMsImRhdGEiLG51bGwpLF9BKHRoaXMsInBsdWdpbiIsdm9pZCAwKSxfQSh0aGlzLCJwYXJlbnRSZWZlcmVuY2UiLG5ldyBXZWFrTWFwKSxfQSh0aGlzLCJjYWNoZSIse2xldmVsczpb'@;
put 'XSxsZXZlbENvdW50OjAscm93czpbXSxub2RlSW5mbzpuZXcgV2Vha01hcH0pLHRoaXMuaG90PWEsdGhpcy5wbHVnaW49bH1zZXREYXRhKGwpe3RoaXMuZGF0YT1sfWdldERhdGEoKXtyZXR1cm4gdGhpcy5kYXRhfWdldFJhd1NvdXJjZURhdGEoKXtsZXQgbD1udWxsO3JldHVybiB0aGlzLnBs'@;
put 'dWdpbi5kaXNhYmxlQ29yZUFQSU1vZGlmaWVycygpLGw9dGhpcy5ob3QuZ2V0U291cmNlRGF0YSgpLHRoaXMucGx1Z2luLmVuYWJsZUNvcmVBUElNb2RpZmllcnMoKSxsfXVwZGF0ZVdpdGhEYXRhKGwpe3RoaXMuc2V0RGF0YShsKSx0aGlzLnJld3JpdGVDYWNoZSgpfXJld3JpdGVDYWNoZSgp'@;
put 'e3RoaXMuY2FjaGU9e2xldmVsczpbXSxsZXZlbENvdW50OjAscm93czpbXSxub2RlSW5mbzpuZXcgV2Vha01hcH0sR2EoMCx0aGlzLmRhdGEubGVuZ3RoLTEsbD0+e3RoaXMuY2FjaGVOb2RlKHRoaXMuZGF0YVtsXSwwLG51bGwpfSl9Y2FjaGVOb2RlKGwsYSxkKXt0aGlzLmNhY2hlLmxldmVs'@;
put 'c1thXXx8KHRoaXMuY2FjaGUubGV2ZWxzW2FdPVtdLHRoaXMuY2FjaGUubGV2ZWxDb3VudCs9MSksdGhpcy5jYWNoZS5sZXZlbHNbYV0ucHVzaChsKSx0aGlzLmNhY2hlLnJvd3MucHVzaChsKSx0aGlzLmNhY2hlLm5vZGVJbmZvLnNldChsLHtwYXJlbnQ6ZCxyb3c6dGhpcy5jYWNoZS5yb3dz'@;
put 'Lmxlbmd0aC0xLGxldmVsOmF9KSx0aGlzLmhhc0NoaWxkcmVuKGwpJiZZbihsLl9fY2hpbGRyZW4saD0+e3RoaXMuY2FjaGVOb2RlKGgsYSsxLGwpfSl9Z2V0RGF0YU9iamVjdChsKXtyZXR1cm4gbnVsbD09bD9udWxsOnRoaXMuY2FjaGUucm93c1tsXX1yZWFkVHJlZU5vZGVzKGwsYSxkLGgp'@;
put 'e2xldCBmPSExLHY9YTtpZihpc05hTih2KSYmdi5lbmQpcmV0dXJuIHY7bGV0IE09bDtyZXR1cm4gTXx8KE09e19fY2hpbGRyZW46dGhpcy5kYXRhfSxmPSEwLHYtPTEpLG51bGwhPWQmJnY9PT1kP3tyZXN1bHQ6TSxlbmQ6ITB9Om51bGwhPWgmJk09PT1oP3tyZXN1bHQ6dixlbmQ6ITB9Oih2'@;
put 'Kz0xLE0uX19jaGlsZHJlbiYmWW4oTS5fX2NoaWxkcmVuLEQ9PntpZih0aGlzLnBhcmVudFJlZmVyZW5jZS5zZXQoRCxmP251bGw6TSksdj10aGlzLnJlYWRUcmVlTm9kZXMoRCx2LGQsaCksaXNOYU4odikmJnYuZW5kKXJldHVybiExfSksdil9bW9ja1BhcmVudCgpe2NvbnN0IGw9dGhpcy5t'@;
put 'b2NrTm9kZSgpO3JldHVybiBsLl9fY2hpbGRyZW49dGhpcy5kYXRhLGx9bW9ja05vZGUoKXtjb25zdCBsPXt9O3JldHVybiBYbyh0aGlzLmRhdGFbMF0sKGEsZCk9PntsW2RdPW51bGx9KSxsfWdldFJvd0luZGV4KGwpe3JldHVybiBudWxsPT1sP251bGw6dGhpcy5jYWNoZS5ub2RlSW5mby5n'@;
put 'ZXQobCkucm93fWdldFJvd0luZGV4V2l0aGluUGFyZW50KGwpe2xldCBhPW51bGw7YT1pc05hTihsKT9sOnRoaXMuZ2V0RGF0YU9iamVjdChsKTtjb25zdCBkPXRoaXMuZ2V0Um93UGFyZW50KGwpO3JldHVybiBudWxsPT1kP3RoaXMuZGF0YS5pbmRleE9mKGEpOmQuX19jaGlsZHJlbi5pbmRl'@;
put 'eE9mKGEpfWNvdW50QWxsUm93cygpe3JldHVybiB0aGlzLmNvdW50Q2hpbGRyZW4oe19fY2hpbGRyZW46dGhpcy5kYXRhfSl9Y291bnRDaGlsZHJlbihsKXtsZXQgYT0wLGQ9bDtyZXR1cm4gaXNOYU4oZCl8fChkPXRoaXMuZ2V0RGF0YU9iamVjdChkKSksZCYmZC5fX2NoaWxkcmVuPyhZbihk'@;
put 'Ll9fY2hpbGRyZW4saD0+e2ErPTEsaC5fX2NoaWxkcmVuJiYoYSs9dGhpcy5jb3VudENoaWxkcmVuKGgpKX0pLGEpOjB9Z2V0Um93UGFyZW50KGwpe2xldCBhO3JldHVybiBhPWlzTmFOKGwpP2w6dGhpcy5nZXREYXRhT2JqZWN0KGwpLHRoaXMuZ2V0Um93T2JqZWN0UGFyZW50KGEpfWdldFJv'@;
put 'd09iamVjdFBhcmVudChsKXtyZXR1cm4gbCYmIm9iamVjdCI9PXR5cGVvZiBsP3RoaXMuY2FjaGUubm9kZUluZm8uZ2V0KGwpLnBhcmVudDpudWxsfWdldFJvd0xldmVsKGwpe2xldCBhPW51bGw7cmV0dXJuIGE9aXNOYU4obCk/bDp0aGlzLmdldERhdGFPYmplY3QobCksYT90aGlzLmdldFJv'@;
put 'd09iamVjdExldmVsKGEpOm51bGx9Z2V0Um93T2JqZWN0TGV2ZWwobCl7cmV0dXJuIG51bGw9PWw/bnVsbDp0aGlzLmNhY2hlLm5vZGVJbmZvLmdldChsKS5sZXZlbH1oYXNDaGlsZHJlbihsKXtsZXQgYT1sO3JldHVybiBpc05hTihhKXx8KGE9dGhpcy5nZXREYXRhT2JqZWN0KGEpKSwhKCFh'@;
put 'Ll9fY2hpbGRyZW58fCFhLl9fY2hpbGRyZW4ubGVuZ3RoKX1pc0NoaWxkKGwpe3JldHVybiBudWxsIT09dGhpcy5nZXRSb3dQYXJlbnQobCl9Z2V0Q2hpbGQobCxhKXt2YXIgZDtyZXR1cm4obnVsbD09PShkPWwuX19jaGlsZHJlbil8fHZvaWQgMD09PWQ/dm9pZCAwOmRbYV0pfHxudWxsfWlz'@;
put 'Um93SGlnaGVzdExldmVsKGwpe3JldHVybiF0aGlzLmlzQ2hpbGQobCl9aXNQYXJlbnQobCl7dmFyIGE7bGV0IGQ9bDtyZXR1cm4gaXNOYU4oZCl8fChkPXRoaXMuZ2V0RGF0YU9iamVjdChkKSksZCYmISFkLl9fY2hpbGRyZW4mJjAhPT0obnVsbD09PShhPWQuX19jaGlsZHJlbil8fHZvaWQg'@;
put 'MD09PWE/dm9pZCAwOmEubGVuZ3RoKX1hZGRDaGlsZChsLGEpe2xldCBkPWE7dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZUFkZENoaWxkIixsLGQpO2xldCBoPW51bGw7bCYmKGg9dGhpcy5nZXRSb3dJbmRleChsKSksdGhpcy5ob3QucnVuSG9va3MoImJlZm9yZUNyZWF0ZVJvdyIsaCt0aGlz'@;
put 'LmNvdW50Q2hpbGRyZW4obCkrMSwxKTtsZXQgZj1sO2x8fChmPXRoaXMubW9ja1BhcmVudCgpKSxmLl9fY2hpbGRyZW58fChmLl9fY2hpbGRyZW49W10pLGR8fChkPXRoaXMubW9ja05vZGUoKSksZi5fX2NoaWxkcmVuLnB1c2goZCksdGhpcy5yZXdyaXRlQ2FjaGUoKTtjb25zdCB2PXRoaXMu'@;
put 'Z2V0Um93SW5kZXgoZCk7dGhpcy5ob3Qucm93SW5kZXhNYXBwZXIuaW5zZXJ0SW5kZXhlcyh2LDEpLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlckNyZWF0ZVJvdyIsdiwxKSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJBZGRDaGlsZCIsbCxkKX1hZGRDaGlsZEF0SW5kZXgobCxhLGQpe2xldCBm'@;
put 'LGg9ZDtpZihofHwoaD10aGlzLm1vY2tOb2RlKCkpLHRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVBZGRDaGlsZCIsbCxoLGEpLGwpe2NvbnN0IE09dGhpcy5nZXRSb3dJbmRleChsKSthKzE7dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZUNyZWF0ZVJvdyIsTSwxKSxsLl9fY2hpbGRyZW4uc3Bs'@;
put 'aWNlKGEsbnVsbCxoKSx0aGlzLnJld3JpdGVDYWNoZSgpLHRoaXMucGx1Z2luLmRpc2FibGVDb3JlQVBJTW9kaWZpZXJzKCksdGhpcy5ob3Quc2V0U291cmNlRGF0YUF0Q2VsbCh0aGlzLmdldFJvd0luZGV4V2l0aGluUGFyZW50KGwpLCJfX2NoaWxkcmVuIixsLl9fY2hpbGRyZW4sIk5lc3Rl'@;
put 'ZFJvd3MuYWRkQ2hpbGRBdEluZGV4IiksdGhpcy5ob3Qucm93SW5kZXhNYXBwZXIuaW5zZXJ0SW5kZXhlcyhNLDEpLHRoaXMucGx1Z2luLmVuYWJsZUNvcmVBUElNb2RpZmllcnMoKSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJDcmVhdGVSb3ciLE0sMSksZj1NfWVsc2UgdGhpcy5wbHVnaW4u'@;
put 'ZGlzYWJsZUNvcmVBUElNb2RpZmllcnMoKSx0aGlzLmhvdC5hbHRlcigiaW5zZXJ0X3Jvd19hYm92ZSIsYSwxLCJOZXN0ZWRSb3dzLmFkZENoaWxkQXRJbmRleCIpLHRoaXMucGx1Z2luLmVuYWJsZUNvcmVBUElNb2RpZmllcnMoKSxmPXRoaXMuZ2V0Um93SW5kZXgodGhpcy5kYXRhW2FdKTto'@;
put 'PXRoaXMuZ2V0RGF0YU9iamVjdChmKSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJBZGRDaGlsZCIsbCxoLGEpfWFkZFNpYmxpbmcobCl7bGV0IGE9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOiJiZWxvdyI7Y29uc3QgZD10aGlzLnRyYW5z'@;
put 'bGF0ZVRyaW1tZWRSb3cobCksaD10aGlzLmdldFJvd1BhcmVudChkKSxmPXRoaXMuZ2V0Um93SW5kZXhXaXRoaW5QYXJlbnQoZCk7c3dpdGNoKGEpe2Nhc2UiYmVsb3ciOnRoaXMuYWRkQ2hpbGRBdEluZGV4KGgsZisxLG51bGwpO2JyZWFrO2Nhc2UiYWJvdmUiOnRoaXMuYWRkQ2hpbGRBdElu'@;
put 'ZGV4KGgsZixudWxsKX19ZGV0YWNoRnJvbVBhcmVudChsKXtsZXQgYT0hKGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdKXx8YXJndW1lbnRzWzFdLGQ9bnVsbDtjb25zdCBoPVtdO0FycmF5LmlzQXJyYXkobCk/KEdhKGxbMF0sbFsyXSxiZT0+e2NvbnN0IEVlPXRo'@;
put 'aXMudHJhbnNsYXRlVHJpbW1lZFJvdyhiZSk7aC5wdXNoKHRoaXMuZ2V0RGF0YU9iamVjdChFZSkpfSksR2EoMCxoLmxlbmd0aC0yLGJlPT57dGhpcy5kZXRhY2hGcm9tUGFyZW50KGhbYmVdLCExKX0pLGQ9aFtoLmxlbmd0aC0xXSk6ZD1sO2NvbnN0IGY9dGhpcy5nZXRSb3dJbmRleChkKSx2'@;
put 'PXRoaXMuY291bnRDaGlsZHJlbihkKSxNPXRoaXMuZ2V0Um93SW5kZXhXaXRoaW5QYXJlbnQoZCksRD10aGlzLmdldFJvd1BhcmVudChkKSxaPXRoaXMuZ2V0Um93UGFyZW50KEQpLHJlPXRoaXMuZ2V0Um93SW5kZXgoWik7bGV0IGNlPW51bGw7aWYodGhpcy5ob3QucnVuSG9va3MoImJlZm9y'@;
put 'ZURldGFjaENoaWxkIixELGQpLG51bGwhPU0pe2NvbnN0IGJlPUFycmF5LmZyb20obmV3IEFycmF5KGYrdisxKS5rZXlzKCkpLnNwbGljZSgtMSoodisxKSk7aWYodGhpcy5ob3QucnVuSG9va3MoImJlZm9yZVJlbW92ZVJvdyIsZix2KzEsYmUsdGhpcy5wbHVnaW4ucGx1Z2luTmFtZSksRC5f'@;
put 'X2NoaWxkcmVuLnNwbGljZShNLDEpLHRoaXMucmV3cml0ZUNhY2hlKCksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyUmVtb3ZlUm93IixmLHYrMSxiZSx0aGlzLnBsdWdpbi5wbHVnaW5OYW1lKSxaKXtjZT1yZSt0aGlzLmNvdW50Q2hpbGRyZW4oWik7Y29uc3QgRWU9dGhpcy5nZXRDaGlsZCha'@;
put 'LHRoaXMuY291bnRDaGlsZHJlbihaKS0xKSxCZT10aGlzLmdldFJvd0luZGV4KEVlKTt0aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlQ3JlYXRlUm93IixCZSsxLHYrMSx0aGlzLnBsdWdpbi5wbHVnaW5OYW1lKSxaLl9fY2hpbGRyZW4ucHVzaChkKX1lbHNlIGNlPXRoaXMuaG90LmNvdW50Um93'@;
put 'cygpKzEsdGhpcy5ob3QucnVuSG9va3MoImJlZm9yZUNyZWF0ZVJvdyIsY2UtMix2KzEsdGhpcy5wbHVnaW4ucGx1Z2luTmFtZSksdGhpcy5kYXRhLnB1c2goZCl9dGhpcy5yZXdyaXRlQ2FjaGUoKSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJDcmVhdGVSb3ciLGNlLTIsdisxLHRoaXMucGx1'@;
put 'Z2luLnBsdWdpbk5hbWUpLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlckRldGFjaENoaWxkIixELGQsdGhpcy5nZXRSb3dJbmRleChkKSksYSYmdGhpcy5ob3QucmVuZGVyKCl9ZmlsdGVyRGF0YShsLGEsZCl7Y29uc3QgaD1bXTtZbihkLGY9PntoLnB1c2godGhpcy5nZXREYXRhT2JqZWN0KGYp'@;
put 'KX0pLFluKGgsZj0+e2NvbnN0IHY9dGhpcy5nZXRSb3dJbmRleFdpdGhpblBhcmVudChmKSxNPXRoaXMuZ2V0Um93UGFyZW50KGYpO251bGw9PT1NP3RoaXMuZGF0YS5zcGxpY2UodiwxKTpNLl9fY2hpbGRyZW4uc3BsaWNlKHYsMSl9KSx0aGlzLnJld3JpdGVDYWNoZSgpfXNwbGljZURhdGEo'@;
put 'bCxhLGQpe2NvbnN0IGg9dGhpcy5nZXREYXRhT2JqZWN0KGwtMSk7bGV0IGY9bnVsbCx2PWw7aCYmaC5fX2NoaWxkcmVuJiYwPT09aC5fX2NoaWxkcmVuLmxlbmd0aD8oZj1oLHY9MCk6bDx0aGlzLmNvdW50QWxsUm93cygpJiYoZj10aGlzLmdldFJvd1BhcmVudChsKSx2PXRoaXMuZ2V0Um93'@;
put 'SW5kZXhXaXRoaW5QYXJlbnQobCkpLGY/ZD9mLl9fY2hpbGRyZW4uc3BsaWNlKHYsYSwuLi5kKTpmLl9fY2hpbGRyZW4uc3BsaWNlKHYsYSk6ZD90aGlzLmRhdGEuc3BsaWNlKHYsYSwuLi5kKTp0aGlzLmRhdGEuc3BsaWNlKHYsYSksdGhpcy5yZXdyaXRlQ2FjaGUoKX1zeW5jUm93V2l0aFJh'@;
put 'd1NvdXJjZShsKXtsZXQgYT1sLGQ9YTtkb3tkPXRoaXMuZ2V0Um93UGFyZW50KGQpLG51bGwhPT1kJiYoYT1kKX13aGlsZShudWxsIT09ZCk7dGhpcy5wbHVnaW4uZGlzYWJsZUNvcmVBUElNb2RpZmllcnMoKSx0aGlzLmhvdC5zZXRTb3VyY2VEYXRhQXRDZWxsKHRoaXMuZ2V0Um93SW5kZXhX'@;
put 'aXRoaW5QYXJlbnQoYSksIl9fY2hpbGRyZW4iLGEuX19jaGlsZHJlbiwiTmVzdGVkUm93cy5zeW5jUm93V2l0aFJhd1NvdXJjZSIpLHRoaXMucGx1Z2luLmVuYWJsZUNvcmVBUElNb2RpZmllcnMoKX1tb3ZlUm93KGwsYSxkLGgpe2NvbnN0IGY9YT09PXRoaXMuaG90LmNvdW50Um93cygpLHY9'@;
put 'dGhpcy5nZXRSb3dQYXJlbnQobCksTT10aGlzLmdldFJvd0luZGV4V2l0aGluUGFyZW50KGwpLEQ9di5fX2NoaWxkcmVuLnNsaWNlKE0sTSsxKSxaPWw+YTtsZXQgcmU9dGhpcy5nZXRSb3dQYXJlbnQoZj9hLTE6YSk7bnVsbD09cmUmJihyZT10aGlzLmdldFJvd1BhcmVudChhLTEpKSxudWxs'@;
put 'PT1yZSYmKHJlPXRoaXMuZ2V0RGF0YU9iamVjdChhLTEpKSxyZT9yZS5fX2NoaWxkcmVufHwocmUuX19jaGlsZHJlbj1bXSk6KHJlPXRoaXMuZ2V0RGF0YU9iamVjdChhKSxyZS5fX2NoaWxkcmVuPVtdKTtjb25zdCBjZT1mfHxkfHxoP3JlLl9fY2hpbGRyZW4ubGVuZ3RoOnRoaXMuZ2V0Um93'@;
put 'SW5kZXhXaXRoaW5QYXJlbnQoYSksYmU9dj09PXJlO3JlLl9fY2hpbGRyZW4uc3BsaWNlKGNlLDAsRFswXSksdi5fX2NoaWxkcmVuLnNwbGljZShNKyhaJiZiZT8xOjApLDEpLHRoaXMuc3luY1Jvd1dpdGhSYXdTb3VyY2UodiksYmV8fHRoaXMuc3luY1Jvd1dpdGhSYXdTb3VyY2UocmUpfXRy'@;
put 'YW5zbGF0ZVRyaW1tZWRSb3cobCl7cmV0dXJuIHRoaXMucGx1Z2luLmNvbGxhcHNpbmdVST90aGlzLnBsdWdpbi5jb2xsYXBzaW5nVUkudHJhbnNsYXRlVHJpbW1lZFJvdyhsKTpsfXVudHJhbnNsYXRlVHJpbW1lZFJvdyhsKXtyZXR1cm4gdGhpcy5wbHVnaW4uY29sbGFwc2luZ1VJP3RoaXMu'@;
put 'cGx1Z2luLmNvbGxhcHNpbmdVSS51bnRyYW5zbGF0ZVRyaW1tZWRSb3cobCk6bH19O2Z1bmN0aW9uICRtZShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gejR0KGMpe3ZhciBsPWZ1bmN0aW9uIFU0dChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1i'@;
put 'b2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJu'@;
put 'KCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6'@;
put 'Y1tsXT1hLGN9Y29uc3QgbGVlPWNsYXNzIFo0dHtjb25zdHJ1Y3RvcihsLGEpeyRtZSh0aGlzLCJob3QiLHZvaWQgMCksJG1lKHRoaXMsInBsdWdpbiIsdm9pZCAwKSx0aGlzLmhvdD1hLHRoaXMucGx1Z2luPWx9fTtjbGFzcyAkZyBleHRlbmRzIGxlZXtzdGF0aWMgZ2V0IENTU19DTEFTU0VT'@;
put 'KCl7cmV0dXJue2luZGljYXRvckNvbnRhaW5lcjoiaHRfbmVzdGluZ0xldmVscyIscGFyZW50OiJodF9uZXN0aW5nUGFyZW50IixpbmRpY2F0b3I6Imh0X25lc3RpbmdMZXZlbCIsZW1wdHlJbmRpY2F0b3I6Imh0X25lc3RpbmdMZXZlbF9lbXB0eSIsYnV0dG9uOiJodF9uZXN0aW5nQnV0dG9u'@;
put 'IixleHBhbmRCdXR0b246Imh0X25lc3RpbmdFeHBhbmQiLGNvbGxhcHNlQnV0dG9uOiJodF9uZXN0aW5nQ29sbGFwc2UifX1jb25zdHJ1Y3RvcihsLGEpe3N1cGVyKGwsYSksdGhpcy5kYXRhTWFuYWdlcj10aGlzLnBsdWdpbi5kYXRhTWFuYWdlcix0aGlzLmNvbGxhcHNpbmdVST10aGlzLnBs'@;
put 'dWdpbi5jb2xsYXBzaW5nVUksdGhpcy5yb3dIZWFkZXJXaWR0aENhY2hlPW51bGx9YXBwZW5kTGV2ZWxJbmRpY2F0b3JzKGwsYSl7Y29uc3QgZD10aGlzLmhvdC50b1BoeXNpY2FsUm93KGwpLGg9dGhpcy5kYXRhTWFuYWdlci5nZXRSb3dMZXZlbChkKSxmPXRoaXMuZGF0YU1hbmFnZXIuZ2V0'@;
put 'RGF0YU9iamVjdChkKSx2PWEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIkRJViIpWzBdLE09di5xdWVyeVNlbGVjdG9yKCJzcGFuLnJvd0hlYWRlciIpLEQ9di5xdWVyeVNlbGVjdG9yQWxsKCdbY2xhc3NePSJodF9uZXN0aW5nIl0nKSxaPXRoaXMuaG90LmdldFNldHRpbmdzKCkuYXJpYVRhZ3M7'@;
put 'aWYoWW4oRCxyZT0+e3JlJiZ2LnJlbW92ZUNoaWxkKHJlKX0pLFRpKGEsJGcuQ1NTX0NMQVNTRVMuaW5kaWNhdG9yQ29udGFpbmVyKSxoKXtjb25zdHtyb290RG9jdW1lbnQ6cmV9PXRoaXMuaG90LGNlPU0uY2xvbmVOb2RlKCEwKTt2LmlubmVySFRNTD0iIixHYSgwLGgtMSwoKT0+e2NvbnN0'@;
put 'IGJlPXJlLmNyZWF0ZUVsZW1lbnQoIlNQQU4iKTtUaShiZSwkZy5DU1NfQ0xBU1NFUy5lbXB0eUluZGljYXRvciksdi5hcHBlbmRDaGlsZChiZSl9KSx2LmFwcGVuZENoaWxkKGNlKX1pZih0aGlzLmRhdGFNYW5hZ2VyLmhhc0NoaWxkcmVuKGYpKXtjb25zdCByZT10aGlzLmhvdC5yb290RG9j'@;
put 'dW1lbnQuY3JlYXRlRWxlbWVudCgiRElWIik7WiYmdm8ocmUsW1Y3KCldKSxUaShhLCRnLkNTU19DTEFTU0VTLnBhcmVudCksdGhpcy5jb2xsYXBzaW5nVUkuYXJlQ2hpbGRyZW5Db2xsYXBzZWQoZCk/KFRpKHJlLGAkeyRnLkNTU19DTEFTU0VTLmJ1dHRvbn0gJHskZy5DU1NfQ0xBU1NFUy5l'@;
put 'eHBhbmRCdXR0b259YCksWiYmdm8oYSxbTjIoITEpXSkpOihUaShyZSxgJHskZy5DU1NfQ0xBU1NFUy5idXR0b259ICR7JGcuQ1NTX0NMQVNTRVMuY29sbGFwc2VCdXR0b259YCksWiYmdm8oYSxbTjIoITApXSkpLHYuYXBwZW5kQ2hpbGQocmUpfX11cGRhdGVSb3dIZWFkZXJXaWR0aChsKXts'@;
put 'ZXQgYT1sO2F8fChhPXRoaXMuZGF0YU1hbmFnZXIuY2FjaGUubGV2ZWxDb3VudCk7Y29uc3QgZD10aGlzLmhvdC52aWV3LmdldFN0eWxlc0hhbmRsZXIoKTtsZXQgaD0xMTtkLmlzQ2xhc3NpY1RoZW1lKCl8fChoPTIqZC5nZXRDU1NWYXJpYWJsZVZhbHVlKCJjZWxsLWhvcml6b250YWwtcGFk'@;
put 'ZGluZyIpKSx0aGlzLnJvd0hlYWRlcldpZHRoQ2FjaGU9TWF0aC5tYXgoNTAsaCsxMCphKzI1KSx0aGlzLmhvdC5yZW5kZXIoKX19Y29uc3QgS21lPSRnLFk0dD1jbGFzcyBXNHQgZXh0ZW5kcyBsZWV7Y29uc3RydWN0b3IobCxhKXt2YXIgZDtzdXBlcihsLGEpLGQ9dGhpcyx0aGlzLmRhdGFN'@;
put 'YW5hZ2VyPXRoaXMucGx1Z2luLmRhdGFNYW5hZ2VyLHRoaXMuY29sbGFwc2VkUm93cz1bXSx0aGlzLmNvbGxhcHNlZFJvd3NTdGFzaD17c3Rhc2g6ZnVuY3Rpb24oKXtsZXQgaD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSYmYXJndW1lbnRzWzBdO2QubGFzdENv'@;
put 'bGxhcHNlZFJvd3M9ZC5jb2xsYXBzZWRSb3dzLnNsaWNlKDApLGQuZXhwYW5kTXVsdGlwbGVDaGlsZHJlbihkLmxhc3RDb2xsYXBzZWRSb3dzLGgpfSxzaGlmdFN0YXNoOmZ1bmN0aW9uKGgsZil7bGV0IHY9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1l'@;
put 'bnRzWzJdOjE7bnVsbD09ZiYmKGY9MS8wKSxZbihkLmxhc3RDb2xsYXBzZWRSb3dzLChNLEQpPT57TT49aCYmTTxmJiYoZC5sYXN0Q29sbGFwc2VkUm93c1tEXT1NK3YpfSl9LGFwcGx5U3Rhc2g6ZnVuY3Rpb24oKXtkLmNvbGxhcHNlTXVsdGlwbGVDaGlsZHJlbihkLmxhc3RDb2xsYXBzZWRS'@;
put 'b3dzLCEoYXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0pfHxhcmd1bWVudHNbMF0pLGQubGFzdENvbGxhcHNlZFJvd3M9dm9pZCAwfSx0cmltU3Rhc2g6KGgsZik9PntHYShoLGgrZi0xLHY9Pntjb25zdCBNPXRoaXMubGFzdENvbGxhcHNlZFJvd3MuaW5kZXhPZih2'@;
put 'KTtNPi0xJiZ0aGlzLmxhc3RDb2xsYXBzZWRSb3dzLnNwbGljZShNLDEpfSl9fX1jb2xsYXBzZUNoaWxkcmVuKGwpe2xldCBhPSEoYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0pfHxhcmd1bWVudHNbMV0sZD0hKGFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09'@;
put 'YXJndW1lbnRzWzJdKXx8YXJndW1lbnRzWzJdO2NvbnN0IGg9W107bGV0IGY9bnVsbCx2PW51bGwsTT1udWxsO3JldHVybiBpc05hTihsKT8oZj1sLHY9dGhpcy5kYXRhTWFuYWdlci5nZXRSb3dJbmRleChmKSk6KGY9dGhpcy5kYXRhTWFuYWdlci5nZXREYXRhT2JqZWN0KGwpLHY9bCksdGhp'@;
put 'cy5kYXRhTWFuYWdlci5oYXNDaGlsZHJlbihmKSYmWW4oZi5fX2NoaWxkcmVuLEQ9PntoLnB1c2godGhpcy5kYXRhTWFuYWdlci5nZXRSb3dJbmRleChEKSl9KSxNPXRoaXMuY29sbGFwc2VSb3dzKGgsITAsITEpLGQmJnRoaXMudHJpbVJvd3MoTSksYSYmdGhpcy5yZW5kZXJBbmRBZGp1c3Qo'@;
put 'KSwtMT09PXRoaXMuY29sbGFwc2VkUm93cy5pbmRleE9mKHYpJiZ0aGlzLmNvbGxhcHNlZFJvd3MucHVzaCh2KSxNfWNvbGxhcHNlTXVsdGlwbGVDaGlsZHJlbihsKXtsZXQgYT0hKGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdKXx8YXJndW1lbnRzWzFdLGQ9IShh'@;
put 'cmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXSl8fGFyZ3VtZW50c1syXTtjb25zdCBoPVtdO1luKGwsZj0+e2gucHVzaCguLi50aGlzLmNvbGxhcHNlQ2hpbGRyZW4oZiwhMSwhMSkpfSksZCYmdGhpcy50cmltUm93cyhoKSxhJiZ0aGlzLnJlbmRlckFuZEFkanVzdCgp'@;
put 'fWNvbGxhcHNlUm93KGwpe3RoaXMuY29sbGFwc2VSb3dzKFtsXSwhKGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdKXx8YXJndW1lbnRzWzFdKX1jb2xsYXBzZVJvd3MobCl7bGV0IGE9IShhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSl8'@;
put 'fGFyZ3VtZW50c1sxXSxkPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdJiZhcmd1bWVudHNbMl07Y29uc3QgaD1bXTtyZXR1cm4gWW4obCxmPT57aC5wdXNoKGYpLGEmJnRoaXMuY29sbGFwc2VDaGlsZFJvd3MoZixoKX0pLGQmJnRoaXMudHJpbVJvd3MoaCksaH1j'@;
put 'b2xsYXBzZUNoaWxkUm93cyhsKXtsZXQgYT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06W10saD1hcmd1bWVudHMubGVuZ3RoPjMmJnZvaWQgMCE9PWFyZ3VtZW50c1szXSYmYXJndW1lbnRzWzNdO3RoaXMuZGF0YU1hbmFnZXIuaGFzQ2hp'@;
put 'bGRyZW4obCkmJlluKHRoaXMuZGF0YU1hbmFnZXIuZ2V0RGF0YU9iamVjdChsKS5fX2NoaWxkcmVuLHY9Pntjb25zdCBNPXRoaXMuZGF0YU1hbmFnZXIuZ2V0Um93SW5kZXgodik7YS5wdXNoKE0pLHRoaXMuY29sbGFwc2VDaGlsZFJvd3MoTSxhKX0pLGgmJnRoaXMudHJpbVJvd3MoYSl9ZXhw'@;
put 'YW5kUm93KGwpe3RoaXMuZXhwYW5kUm93cyhbbF0sIShhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSl8fGFyZ3VtZW50c1sxXSl9ZXhwYW5kUm93cyhsKXtsZXQgYT0hKGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdKXx8YXJndW1lbnRz'@;
put 'WzFdLGQ9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0mJmFyZ3VtZW50c1syXTtjb25zdCBoPVtdO3JldHVybiBZbihsLGY9PntoLnB1c2goZiksYSYmdGhpcy5leHBhbmRDaGlsZFJvd3MoZixoKX0pLGQmJnRoaXMudW50cmltUm93cyhoKSxofWV4cGFuZENoaWxk'@;
put 'Um93cyhsKXtsZXQgYT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06W10saD1hcmd1bWVudHMubGVuZ3RoPjMmJnZvaWQgMCE9PWFyZ3VtZW50c1szXSYmYXJndW1lbnRzWzNdO3RoaXMuZGF0YU1hbmFnZXIuaGFzQ2hpbGRyZW4obCkmJllu'@;
put 'KHRoaXMuZGF0YU1hbmFnZXIuZ2V0RGF0YU9iamVjdChsKS5fX2NoaWxkcmVuLHY9PntpZighdGhpcy5pc0FueVBhcmVudENvbGxhcHNlZCh2KSl7Y29uc3QgTT10aGlzLmRhdGFNYW5hZ2VyLmdldFJvd0luZGV4KHYpO2EucHVzaChNKSx0aGlzLmV4cGFuZENoaWxkUm93cyhNLGEpfX0pLGgm'@;
put 'JnRoaXMudW50cmltUm93cyhhKX1leHBhbmRDaGlsZHJlbihsKXtsZXQgYT0hKGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdKXx8YXJndW1lbnRzWzFdLGQ9IShhcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXSl8fGFyZ3VtZW50c1syXTtj'@;
put 'b25zdCBoPVtdO2xldCBmPW51bGwsdj1udWxsLE09bnVsbDtyZXR1cm4gaXNOYU4obCk/KGY9bCx2PXRoaXMuZGF0YU1hbmFnZXIuZ2V0Um93SW5kZXgobCkpOihmPXRoaXMuZGF0YU1hbmFnZXIuZ2V0RGF0YU9iamVjdChsKSx2PWwpLHRoaXMuY29sbGFwc2VkUm93cy5zcGxpY2UodGhpcy5j'@;
put 'b2xsYXBzZWRSb3dzLmluZGV4T2YodiksMSksdGhpcy5kYXRhTWFuYWdlci5oYXNDaGlsZHJlbihmKSYmWW4oZi5fX2NoaWxkcmVuLEQ9Pntjb25zdCBaPXRoaXMuZGF0YU1hbmFnZXIuZ2V0Um93SW5kZXgoRCk7aC5wdXNoKFopfSksTT10aGlzLmV4cGFuZFJvd3MoaCwhMCwhMSksZCYmdGhp'@;
put 'cy51bnRyaW1Sb3dzKE0pLGEmJnRoaXMucmVuZGVyQW5kQWRqdXN0KCksTX1leHBhbmRNdWx0aXBsZUNoaWxkcmVuKGwpe2xldCBhPSEoYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0pfHxhcmd1bWVudHNbMV0sZD0hKGFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAw'@;
put 'IT09YXJndW1lbnRzWzJdKXx8YXJndW1lbnRzWzJdO2NvbnN0IGg9W107WW4obCxmPT57aC5wdXNoKC4uLnRoaXMuZXhwYW5kQ2hpbGRyZW4oZiwhMSwhMSkpfSksZCYmdGhpcy51bnRyaW1Sb3dzKGgpLGEmJnRoaXMucmVuZGVyQW5kQWRqdXN0KCl9Y29sbGFwc2VBbGwoKXtjb25zdCBsPXRo'@;
put 'aXMuZGF0YU1hbmFnZXIuZ2V0RGF0YSgpLGE9W107WW4obCxkPT57dGhpcy5kYXRhTWFuYWdlci5oYXNDaGlsZHJlbihkKSYmYS5wdXNoKGQpfSksdGhpcy5jb2xsYXBzZU11bHRpcGxlQ2hpbGRyZW4oYSksdGhpcy5yZW5kZXJBbmRBZGp1c3QoKX1leHBhbmRBbGwoKXtjb25zdCBsPXRoaXMu'@;
put 'ZGF0YU1hbmFnZXIuZ2V0RGF0YSgpLGE9W107WW4obCxkPT57dGhpcy5kYXRhTWFuYWdlci5oYXNDaGlsZHJlbihkKSYmYS5wdXNoKGQpfSksdGhpcy5leHBhbmRNdWx0aXBsZUNoaWxkcmVuKGEpLHRoaXMucmVuZGVyQW5kQWRqdXN0KCl9dHJpbVJvd3MobCl7dGhpcy5ob3QuYmF0Y2hFeGVj'@;
put 'dXRpb24oKCk9PntZbihsLGE9Pnt0aGlzLnBsdWdpbi5jb2xsYXBzZWRSb3dzTWFwLnNldFZhbHVlQXRJbmRleChhLCEwKX0pfSwhMCl9dW50cmltUm93cyhsKXt0aGlzLmhvdC5iYXRjaEV4ZWN1dGlvbigoKT0+e1luKGwsYT0+e3RoaXMucGx1Z2luLmNvbGxhcHNlZFJvd3NNYXAuc2V0VmFs'@;
put 'dWVBdEluZGV4KGEsITEpfSl9LCEwKX1hcmVDaGlsZHJlbkNvbGxhcHNlZChsKXtsZXQgYT1pc05hTihsKT9sOnRoaXMuZGF0YU1hbmFnZXIuZ2V0RGF0YU9iamVjdChsKSxkPSEwO3JldHVybiBudWxsPT09YSYmKGE9e19fY2hpbGRyZW46dGhpcy5kYXRhTWFuYWdlci5kYXRhfSksdGhpcy5k'@;
put 'YXRhTWFuYWdlci5oYXNDaGlsZHJlbihhKSYmWW4oYS5fX2NoaWxkcmVuLGg9Pntjb25zdCBmPXRoaXMuZGF0YU1hbmFnZXIuZ2V0Um93SW5kZXgoaCk7aWYoIXRoaXMucGx1Z2luLmNvbGxhcHNlZFJvd3NNYXAuZ2V0VmFsdWVBdEluZGV4KGYpKXJldHVybiBkPSExLCExfSksZH1pc0FueVBh'@;
put 'cmVudENvbGxhcHNlZChsKXtsZXQgYT1sO2Zvcig7bnVsbCE9PWE7KXthPXRoaXMuZGF0YU1hbmFnZXIuZ2V0Um93UGFyZW50KGEpO2NvbnN0IGQ9dGhpcy5kYXRhTWFuYWdlci5nZXRSb3dJbmRleChhKTtpZih0aGlzLmNvbGxhcHNlZFJvd3MuaW5kZXhPZihkKT4tMSlyZXR1cm4hMH1yZXR1'@;
put 'cm4hMX10b2dnbGVTdGF0ZShsLGEpe2lmKGEuY29sPj0wKXJldHVybjtjb25zdCBkPXRoaXMudHJhbnNsYXRlVHJpbW1lZFJvdyhhLnJvdyk7cG8obC50YXJnZXQsS21lLkNTU19DTEFTU0VTLmJ1dHRvbikmJih0aGlzLmFyZUNoaWxkcmVuQ29sbGFwc2VkKGQpP3RoaXMuZXhwYW5kQ2hpbGRy'@;
put 'ZW4oZCk6dGhpcy5jb2xsYXBzZUNoaWxkcmVuKGQpLEIyKGwpKX10cmFuc2xhdGVUcmltbWVkUm93KGwpe3JldHVybiB0aGlzLmhvdC50b1BoeXNpY2FsUm93KGwpfXVudHJhbnNsYXRlVHJpbW1lZFJvdyhsKXtyZXR1cm4gdGhpcy5ob3QudG9WaXN1YWxSb3cobCl9cmVuZGVyQW5kQWRqdXN0'@;
put 'KCl7dGhpcy5ob3QucmVuZGVyKCksdGhpcy5ob3Qudmlldy5hZGp1c3RFbGVtZW50c1NpemUoKX19O3ZhciBxbWU9bmV3IFdlYWtNYXA7Y29uc3QgdGd0PWNsYXNzIGVndCBleHRlbmRzIGxlZXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksZnVuY3Rpb24gSzR0KGMsbCxhKXty'@;
put 'ZXR1cm4obD1mdW5jdGlvbiBxNHQoYyl7dmFyIGw9ZnVuY3Rpb24gWDR0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0'@;
put 'IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/'@;
put 'bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY30odGhpcywiZGF0YU1hbmFnZXIiLHRoaXMucGx1Z2luLmRhdGFNYW5hZ2VyKSxmdW5jdGlvbiBHNHQoYyxs'@;
put 'LGEpeyhmdW5jdGlvbiAkNHQoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfSkoYyxsKSxsLnNldChjLGEpfSh0aGlzLHFtZSx7cm93X2Fib3ZlOihsLGEp'@;
put 'PT57dGhpcy5kYXRhTWFuYWdlci5hZGRTaWJsaW5nKGFbYS5sZW5ndGgtMV0uc3RhcnQucm93LCJhYm92ZSIpfSxyb3dfYmVsb3c6KGwsYSk9Pnt0aGlzLmRhdGFNYW5hZ2VyLmFkZFNpYmxpbmcoYVthLmxlbmd0aC0xXS5zdGFydC5yb3csImJlbG93Iil9fSl9YXBwZW5kT3B0aW9ucyhsKXtj'@;
put 'b25zdCBhPVt7a2V5OiJhZGRfY2hpbGQiLG5hbWUoKXtyZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKERxKX0sY2FsbGJhY2s6KCk9Pntjb25zdCBkPXRoaXMuZGF0YU1hbmFnZXIudHJhbnNsYXRlVHJpbW1lZFJvdyh0aGlzLmhvdC5nZXRTZWxlY3RlZExhc3QoKVswXSksaD10aGlz'@;
put 'LmRhdGFNYW5hZ2VyLmdldERhdGFPYmplY3QoZCk7dGhpcy5kYXRhTWFuYWdlci5hZGRDaGlsZChoKX0sZGlzYWJsZWQ6KCk9Pntjb25zdCBkPXRoaXMuaG90LmdldFNlbGVjdGVkTGFzdCgpO3JldHVybiFkfHxkWzBdPDB8fHRoaXMuaG90LnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb2x1bW5I'@;
put 'ZWFkZXIoKXx8dGhpcy5ob3QuY291bnRSb3dzKCk+PXRoaXMuaG90LmdldFNldHRpbmdzKCkubWF4Um93c319LHtrZXk6ImRldGFjaF9mcm9tX3BhcmVudCIsbmFtZSgpe3JldHVybiB0aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UoSXEpfSxjYWxsYmFjazooKT0+e3RoaXMuZGF0YU1hbmFnZXIu'@;
put 'ZGV0YWNoRnJvbVBhcmVudCh0aGlzLmhvdC5nZXRTZWxlY3RlZExhc3QoKSl9LGRpc2FibGVkOigpPT57Y29uc3QgZD10aGlzLmhvdC5nZXRTZWxlY3RlZExhc3QoKSxoPXRoaXMuZGF0YU1hbmFnZXIudHJhbnNsYXRlVHJpbW1lZFJvdyhkWzBdKTtyZXR1cm4hdGhpcy5kYXRhTWFuYWdlci5n'@;
put 'ZXRSb3dQYXJlbnQoaCl8fCFkfHxkWzBdPDB8fHRoaXMuaG90LnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb2x1bW5IZWFkZXIoKXx8dGhpcy5ob3QuY291bnRSb3dzKCk+PXRoaXMuaG90LmdldFNldHRpbmdzKCkubWF4Um93c319LHtuYW1lOiItLS0tLS0tLS0ifV07cmV0dXJuIEdhKDAsbC5p'@;
put 'dGVtcy5sZW5ndGgtMSxkPT57aWYoMD09PWQpcmV0dXJuIFluKGEsKGgsZik9PntsLml0ZW1zLnNwbGljZShkK2YsMCxoKX0pLCExfSksdGhpcy5tb2RpZnlSb3dJbnNlcnRpbmdPcHRpb25zKGwpfW1vZGlmeVJvd0luc2VydGluZ09wdGlvbnMobCl7cmV0dXJuIEdhKDAsbC5pdGVtcy5sZW5n'@;
put 'dGgtMSxhPT57Y29uc3QgZD1mdW5jdGlvbiBKNHQoYyxsKXtyZXR1cm4gYy5nZXQoZnVuY3Rpb24gUTR0KGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRl'@;
put 'IGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX0oYyxsKSl9KHFtZSx0aGlzKVtsLml0ZW1zW2FdLmtleV07bnVsbCE9ZCYmKGwuaXRlbXNbYV0uY2FsbGJhY2s9ZCl9KSxsfX07ZnVuY3Rpb24gTkgoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIG5ndChjKXt2YXIgbD1m'@;
put 'dW5jdGlvbiByZ3QoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcg'@;
put 'VHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVBy'@;
put 'b3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNsYXNzIGlndHtjb25zdHJ1Y3RvcihsKXtOSCh0aGlzLCJwbHVnaW4iLHZvaWQgMCksTkgodGhpcywiaG90Iix2b2lkIDApLE5IKHRoaXMsImRhdGFNYW5hZ2Vy'@;
put 'Iix2b2lkIDApLE5IKHRoaXMsImNvbGxhcHNpbmdVSSIsdm9pZCAwKSx0aGlzLnBsdWdpbj1sLHRoaXMuaG90PWwuaG90LHRoaXMuZGF0YU1hbmFnZXI9bC5kYXRhTWFuYWdlcix0aGlzLmNvbGxhcHNpbmdVST1sLmNvbGxhcHNpbmdVSX1vbkJlZm9yZVJvd01vdmUobCxhLGQsaCl7aWYodGhp'@;
put 'cy5kaXNwbGF5QVBJQ29tcGF0aWJpbGl0eVdhcm5pbmcoe3Jvd3M6bCxmaW5hbEluZGV4OmEsZHJvcEluZGV4OmQsbW92ZVBvc3NpYmxlOmh9KSlyZXR1cm4hMTt0aGlzLm1vdmVkVG9Db2xsYXBzZWQ9ITE7Y29uc3Qgdj1kPT09dGhpcy5ob3QuY291bnRSb3dzKCksTT12P3RoaXMuaG90LmNv'@;
put 'dW50U291cmNlUm93cygpOnRoaXMuZGF0YU1hbmFnZXIudHJhbnNsYXRlVHJpbW1lZFJvdyhkKTtsZXQgRD0hMDtjb25zdCBaPWwubWFwKEJlPT57aWYoIUQpcmV0dXJuITE7Y29uc3QgcWU9dGhpcy5kYXRhTWFuYWdlci50cmFuc2xhdGVUcmltbWVkUm93KEJlKTtyZXR1cm4gRD10aGlzLnNo'@;
put 'b3VsZEFsbG93TW92aW5nKHFlLE0pLHFlfSkscmU9LTE9PT1aLmluZGV4T2YoTSk7aWYoIUR8fCFyZSlyZXR1cm4hMTtjb25zdCBjZT10aGlzLmdldEJhc2VQYXJlbnQoWiksYmU9dGhpcy5nZXRUYXJnZXRQYXJlbnQodixNKSxFZT1jZT09PWJlO3JldHVybiB0aGlzLm1vdmVkVG9Db2xsYXBz'@;
put 'ZWQ9dGhpcy5jb2xsYXBzaW5nVUkuYXJlQ2hpbGRyZW5Db2xsYXBzZWQoYmUpLHRoaXMuY29sbGFwc2luZ1VJLmNvbGxhcHNlZFJvd3NTdGFzaC5zdGFzaCgpLHRoaXMuc2hpZnRDb2xsYXBzaWJsZVBhcmVudHNMb2NhdGlvbnMoWixNLEVlKSx0aGlzLm1vdmVSb3dzKFosTSxiZSksdGhpcy5k'@;
put 'YXRhTWFuYWdlci5yZXdyaXRlQ2FjaGUoKSx0aGlzLm1vdmVDZWxsc01ldGEoWixNKSx0aGlzLmNvbGxhcHNpbmdVSS5jb2xsYXBzZWRSb3dzU3Rhc2guYXBwbHlTdGFzaCghMSksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyUm93TW92ZSIsbCxhLGQsaCxoJiZ0aGlzLmlzUm93T3JkZXJDaGFu'@;
put 'Z2VkKGwsYSkpLHRoaXMuaG90LnJlbmRlcigpLHRoaXMuc2VsZWN0Q2VsbHMobCxkKSwhMX1kaXNwbGF5QVBJQ29tcGF0aWJpbGl0eVdhcm5pbmcobCl7Y29uc3R7cm93czphLGZpbmFsSW5kZXg6ZCxkcm9wSW5kZXg6aCxtb3ZlUG9zc2libGU6Zn09bDtsZXQgdj0hMTtyZXR1cm4gX2MoaCkm'@;
put 'JihpbChnbGBTaW5jZSB2ZXJzaW9uIDguMC4wIG9mIHRoZSBIYW5kc29udGFibGUgdGhlICdtb3ZlUm93cycgbWV0aG9kIGlzbid0IHVzZWQgZm9yIG1vdmluZyByb3dzXHgyMAogICAgICB3aGVuIHRoZSBOZXN0ZWRSb3dzIHBsdWdpbiBpcyBlbmFibGVkLiBQbGVhc2UgdXNlIHRoZSAnZHJh'@;
put 'Z1Jvd3MnIG1ldGhvZCBpbnN0ZWFkLmApLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlclJvd01vdmUiLGEsZCxoLGYsITEpLHY9ITApLHZ9c2hvdWxkQWxsb3dNb3ZpbmcobCxhKXtyZXR1cm4hKHRoaXMuZGF0YU1hbmFnZXIuaXNQYXJlbnQobCl8fHRoaXMuZGF0YU1hbmFnZXIuaXNSb3dIaWdo'@;
put 'ZXN0TGV2ZWwobCl8fGw9PT1hfHwwPT09YSl9Z2V0QmFzZVBhcmVudChsKXtyZXR1cm4gdGhpcy5kYXRhTWFuYWdlci5nZXRSb3dQYXJlbnQobFswXSl9Z2V0VGFyZ2V0UGFyZW50KGwsYSl7bGV0IGQ9dGhpcy5kYXRhTWFuYWdlci5nZXRSb3dQYXJlbnQobD9hLTE6YSk7cmV0dXJuIG51bGw9'@;
put 'PWQmJihkPXRoaXMuZGF0YU1hbmFnZXIuZ2V0Um93UGFyZW50KGEtMSkpLGR9c2hpZnRDb2xsYXBzaWJsZVBhcmVudHNMb2NhdGlvbnMobCxhLGQpe2R8fChNYXRoLm1heCguLi5sKTw9YT90aGlzLmNvbGxhcHNpbmdVSS5jb2xsYXBzZWRSb3dzU3Rhc2guc2hpZnRTdGFzaChsWzBdLGEsLTEq'@;
put 'bC5sZW5ndGgpOnRoaXMuY29sbGFwc2luZ1VJLmNvbGxhcHNlZFJvd3NTdGFzaC5zaGlmdFN0YXNoKGEsbFswXSxsLmxlbmd0aCkpfW1vdmVSb3dzKGwsYSxkKXtjb25zdCBoPWE9PT10aGlzLmRhdGFNYW5hZ2VyLmdldFJvd0luZGV4KGQpK3RoaXMuZGF0YU1hbmFnZXIuY291bnRDaGlsZHJl'@;
put 'bihkKSsxO3RoaXMuaG90LmJhdGNoUmVuZGVyKCgpPT57bC5mb3JFYWNoKGY9Pnt0aGlzLmRhdGFNYW5hZ2VyLm1vdmVSb3coZixhLHRoaXMubW92ZWRUb0NvbGxhcHNlZCxoKX0pfSl9bW92ZUNlbGxzTWV0YShsLGEpe2NvbnN0IGQ9W10saD1NYXRoLm1heCguLi5sKTxhO2wuZm9yRWFjaChm'@;
put 'PT57ZC5wdXNoKHRoaXMuaG90LmdldENlbGxNZXRhQXRSb3coZikpfSksdGhpcy5ob3Quc3BsaWNlQ2VsbHNNZXRhKGxbMF0sbC5sZW5ndGgpLHRoaXMuaG90LnNwbGljZUNlbGxzTWV0YShhLShoP2QubGVuZ3RoOjApLDAsLi4uZCl9c2VsZWN0Q2VsbHMobCxhKXtjb25zdCBkPWwubGVuZ3Ro'@;
put 'O2xldCBoPTAsZj0wO2lmKHRoaXMubW92ZWRUb0NvbGxhcHNlZCl7bGV0IHY9bnVsbDt2PXRoaXMuZGF0YU1hbmFnZXIudHJhbnNsYXRlVHJpbW1lZFJvdyhsW2QtMV08YT9hLWQ6YSk7Y29uc3QgTT10aGlzLmRhdGFNYW5hZ2VyLmdldFJvd1BhcmVudChudWxsPT09dj90aGlzLmhvdC5jb3Vu'@;
put 'dFNvdXJjZVJvd3MoKS0xOnYtMSksRD10aGlzLmRhdGFNYW5hZ2VyLmdldFJvd0luZGV4KE0pO2g9dGhpcy5kYXRhTWFuYWdlci51bnRyYW5zbGF0ZVRyaW1tZWRSb3coRCksZj1ofWVsc2UgbFtkLTFdPGE/KGY9YS0xLGg9Zi1kKzEpOihoPWEsZj1oK2QtMSk7dGhpcy5ob3Quc2VsZWN0Q2Vs'@;
put 'bHMoW1toLDAsZix0aGlzLmhvdC5jb3VudENvbHMoKS0xXV0sITEpfWlzUm93T3JkZXJDaGFuZ2VkKGwsYSl7cmV0dXJuIGwuc29tZSgoZCxoKT0+ZC1oIT09YSl9fWZ1bmN0aW9uIFhtZShjLGwsYSl7Sm1lKGMsbCksbC5zZXQoYyxhKX1mdW5jdGlvbiBKbWUoYyxsKXtpZihsLmhhcyhjKSl0'@;
put 'aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfWZ1bmN0aW9uIGNlZShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gb2d0KGMpe3ZhciBsPWZ1bmN0aW9uIHNndChjLGwpe2lmKCJvYmplY3Qi'@;
put 'IT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVz'@;
put 'dCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFi'@;
put 'bGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9ZnVuY3Rpb24gVkgoYyxsKXtyZXR1cm4gYy5nZXQobTAoYyxsKSl9ZnVuY3Rpb24gQkgoYyxsLGEpe3JldHVybiBjLnNldChtMChjLGwpLGEpLGF9ZnVuY3Rpb24gbTAoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5'@;
put 'cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfWNvbnN0IGpIPSJuZXN0ZWRSb3dzIixRbWU9akg7dmFyIHpIPW5ldyBXZWFr'@;
put 'TWFwLHZ3PW5ldyBXZWFrTWFwLFQwPW5ldyBXZWFrU2V0O2NsYXNzIHVndCBleHRlbmRzIEZze2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSxmdW5jdGlvbiBhZ3QoYyxsKXtKbWUoYyxsKSxsLmFkZChjKX0odGhpcyxUMCksY2VlKHRoaXMsImRhdGFNYW5hZ2VyIixudWxsKSxj'@;
put 'ZWUodGhpcywiaGVhZGVyc1VJIixudWxsKSxjZWUodGhpcywiY29sbGFwc2VkUm93c01hcCIsbnVsbCksWG1lKHRoaXMsekgsITEpLFhtZSh0aGlzLHZ3LCExKX1zdGF0aWMgZ2V0IFBMVUdJTl9LRVkoKXtyZXR1cm4gakh9c3RhdGljIGdldCBQTFVHSU5fUFJJT1JJVFkoKXtyZXR1cm4gMzAw'@;
put 'fWlzRW5hYmxlZCgpe3JldHVybiEhdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtqSF19ZW5hYmxlUGx1Z2luKCl7dmFyIGw9dGhpczt0aGlzLmVuYWJsZWR8fCh0aGlzLmNvbGxhcHNlZFJvd3NNYXA9dGhpcy5ob3Qucm93SW5kZXhNYXBwZXIucmVnaXN0ZXJNYXAoIm5lc3RlZFJvd3MiLG5ldyBx'@;
put 'RSksdGhpcy5kYXRhTWFuYWdlcj1uZXcgajR0KHRoaXMsdGhpcy5ob3QpLHRoaXMuY29sbGFwc2luZ1VJPW5ldyBZNHQodGhpcyx0aGlzLmhvdCksdGhpcy5oZWFkZXJzVUk9bmV3IEttZSh0aGlzLHRoaXMuaG90KSx0aGlzLmNvbnRleHRNZW51VUk9bmV3IHRndCh0aGlzLHRoaXMuaG90KSx0'@;
put 'aGlzLnJvd01vdmVDb250cm9sbGVyPW5ldyBpZ3QodGhpcyksdGhpcy5hZGRIb29rKCJhZnRlckluaXQiLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIG0wKFQwLGwsTWd0KS5j'@;
put 'YWxsKGwsLi4uZCl9KSx0aGlzLmFkZEhvb2soImJlZm9yZVZpZXdSZW5kZXIiLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIG0wKFQwLGwseGd0KS5jYWxsKGwsLi4uZCl9KSx0'@;
put 'aGlzLmFkZEhvb2soIm1vZGlmeVJvd0RhdGEiLGZ1bmN0aW9uKCl7cmV0dXJuIGwub25Nb2RpZnlSb3dEYXRhKC4uLmFyZ3VtZW50cyl9KSx0aGlzLmFkZEhvb2soIm1vZGlmeVNvdXJjZUxlbmd0aCIsZnVuY3Rpb24oKXtyZXR1cm4gbC5vbk1vZGlmeVNvdXJjZUxlbmd0aCguLi5hcmd1bWVu'@;
put 'dHMpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVEYXRhU3BsaWNlIixmdW5jdGlvbigpe3JldHVybiBsLm9uQmVmb3JlRGF0YVNwbGljZSguLi5hcmd1bWVudHMpfSksdGhpcy5hZGRIb29rKCJmaWx0ZXJEYXRhIixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFy'@;
put 'cmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiBtMChUMCxsLGZndCkuY2FsbChsLC4uLmQpfSksdGhpcy5hZGRIb29rKCJhZnRlckNvbnRleHRNZW51RGVmYXVsdE9wdGlvbnMiLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJy'@;
put 'YXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIG0wKFQwLGwscGd0KS5jYWxsKGwsLi4uZCl9KSx0aGlzLmFkZEhvb2soImFmdGVyR2V0Um93SGVhZGVyIixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7'@;
put 'aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiBtMChUMCxsLGdndCkuY2FsbChsLC4uLmQpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVPbkNlbGxNb3VzZURvd24iLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1h'@;
put 'cmd1bWVudHNbaF07cmV0dXJuIG0wKFQwLGwsaGd0KS5jYWxsKGwsLi4uZCl9KSx0aGlzLmFkZEhvb2soImJlZm9yZVJlbW92ZVJvdyIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1'@;
put 'cm4gbTAoVDAsbCxiZ3QpLmNhbGwobCwuLi5kKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJSZW1vdmVSb3ciLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIG0wKFQwLGwsdmd0KS5j'@;
put 'YWxsKGwsLi4uZCl9KSx0aGlzLmFkZEhvb2soImJlZm9yZUFkZENoaWxkIixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiBtMChUMCxsLHlndCkuY2FsbChsLC4uLmQpfSksdGhp'@;
put 'cy5hZGRIb29rKCJhZnRlckFkZENoaWxkIixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiBtMChUMCxsLF9ndCkuY2FsbChsLC4uLmQpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVE'@;
put 'ZXRhY2hDaGlsZCIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4gbTAoVDAsbCx3Z3QpLmNhbGwobCwuLi5kKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJEZXRhY2hDaGlsZCIsZnVu'@;
put 'Y3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4gbTAoVDAsbCxDZ3QpLmNhbGwobCwuLi5kKX0pLHRoaXMuYWRkSG9vaygibW9kaWZ5Um93SGVhZGVyV2lkdGgiLGZ1bmN0aW9uKCl7Zm9y'@;
put 'KHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIG0wKFQwLGwsbWd0KS5jYWxsKGwsLi4uZCl9KSx0aGlzLmFkZEhvb2soImFmdGVyQ3JlYXRlUm93IixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMu'@;
put 'bGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiBtMChUMCxsLFNndCkuY2FsbChsLC4uLmQpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVSb3dNb3ZlIixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5'@;
put 'KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiBtMChUMCxsLGRndCkuY2FsbChsLC4uLmQpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVMb2FkRGF0YSIsYT0+bTAoVDAsdGhpcyxlNmUpLmNhbGwodGhpcyxhKSksdGhpcy5hZGRIb29rKCJiZWZvcmVVcGRhdGVEYXRhIixh'@;
put 'PT5tMChUMCx0aGlzLGU2ZSkuY2FsbCh0aGlzLGEpKSx0aGlzLnJlZ2lzdGVyU2hvcnRjdXRzKCksc3VwZXIuZW5hYmxlUGx1Z2luKCkpfWRpc2FibGVQbHVnaW4oKXt0aGlzLmhvdC5yb3dJbmRleE1hcHBlci51bnJlZ2lzdGVyTWFwKCJuZXN0ZWRSb3dzIiksdGhpcy51bnJlZ2lzdGVyU2hv'@;
put 'cnRjdXRzKCksc3VwZXIuZGlzYWJsZVBsdWdpbigpfXVwZGF0ZVBsdWdpbigpe3RoaXMuZGlzYWJsZVBsdWdpbigpO2NvbnN0IGw9dGhpcy5kYXRhTWFuYWdlci5nZXREYXRhKCk7dGhpcy5lbmFibGVQbHVnaW4oKSx0aGlzLmRhdGFNYW5hZ2VyLnVwZGF0ZVdpdGhEYXRhKGwpLHN1cGVyLnVw'@;
put 'ZGF0ZVBsdWdpbigpfXJlZ2lzdGVyU2hvcnRjdXRzKCl7dGhpcy5ob3QuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuZ2V0Q29udGV4dCgiZ3JpZCIpLmFkZFNob3J0Y3V0KHtrZXlzOltbIkVudGVyIl1dLGNhbGxiYWNrOigpPT57Y29uc3R7aGlnaGxpZ2h0Omx9PXRoaXMuaG90LmdldFNlbGVjdGVk'@;
put 'UmFuZ2VMYXN0KCksYT10aGlzLmNvbGxhcHNpbmdVSS50cmFuc2xhdGVUcmltbWVkUm93KGwucm93KTtyZXR1cm4gdGhpcy5jb2xsYXBzaW5nVUkuYXJlQ2hpbGRyZW5Db2xsYXBzZWQoYSk/dGhpcy5jb2xsYXBzaW5nVUkuZXhwYW5kQ2hpbGRyZW4oYSk6dGhpcy5jb2xsYXBzaW5nVUkuY29s'@;
put 'bGFwc2VDaGlsZHJlbihhKSwhMX0scnVuT25seUlmOigpPT57dmFyIGwsYTtjb25zdCBkPW51bGw9PT0obD10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpKXx8dm9pZCAwPT09bD92b2lkIDA6bC5oaWdobGlnaHQ7cmV0dXJuIGQmJihudWxsPT09KGE9dGhpcy5ob3QuZ2V0U2VsZWN0'@;
put 'ZWRSYW5nZUxhc3QoKSl8fHZvaWQgMD09PWE/dm9pZCAwOmEuaXNTaW5nbGUoKSkmJnRoaXMuaG90LnNlbGVjdGlvbi5pc0NlbGxWaXNpYmxlKGQpJiYtMT09PWQuY29sJiZkLnJvdz49MH0sZ3JvdXA6UW1lLHJlbGF0aXZlVG9Hcm91cDpXbSxwb3NpdGlvbjoiYmVmb3JlIn0pfXVucmVnaXN0'@;
put 'ZXJTaG9ydGN1dHMoKXt0aGlzLmhvdC5nZXRTaG9ydGN1dE1hbmFnZXIoKS5nZXRDb250ZXh0KCJncmlkIikucmVtb3ZlU2hvcnRjdXRzQnlHcm91cChRbWUpfWRpc2FibGVDb3JlQVBJTW9kaWZpZXJzKCl7QkgodncsdGhpcywhMCl9ZW5hYmxlQ29yZUFQSU1vZGlmaWVycygpe0JIKHZ3LHRo'@;
put 'aXMsITEpfW9uTW9kaWZ5Um93RGF0YShsKXtpZighVkgodncsdGhpcykpcmV0dXJuIHRoaXMuZGF0YU1hbmFnZXIuZ2V0RGF0YU9iamVjdChsKX1vbk1vZGlmeVNvdXJjZUxlbmd0aCgpe2lmKCFWSCh2dyx0aGlzKSlyZXR1cm4gdGhpcy5kYXRhTWFuYWdlci5jb3VudEFsbFJvd3MoKX1vbkJl'@;
put 'Zm9yZURhdGFTcGxpY2UobCxhLGQpe3JldHVybiEoIVZIKHZ3LHRoaXMpJiYhdGhpcy5kYXRhTWFuYWdlci5pc1Jvd0hpZ2hlc3RMZXZlbChsKSYmKHRoaXMuZGF0YU1hbmFnZXIuc3BsaWNlRGF0YShsLGEsZCksMSkpfWRlc3Ryb3koKXtzdXBlci5kZXN0cm95KCl9fWZ1bmN0aW9uIGRndChj'@;
put 'LGwsYSxkKXtyZXR1cm4gdGhpcy5yb3dNb3ZlQ29udHJvbGxlci5vbkJlZm9yZVJvd01vdmUoYyxsLGEsZCl9ZnVuY3Rpb24gaGd0KGMsbCxhKXt0aGlzLmNvbGxhcHNpbmdVSS50b2dnbGVTdGF0ZShjLGwsYSl9ZnVuY3Rpb24gZmd0KGMsbCxhKXtyZXR1cm4gdGhpcy5jb2xsYXBzaW5nVUku'@;
put 'Y29sbGFwc2VkUm93c1N0YXNoLnN0YXNoKCksdGhpcy5jb2xsYXBzaW5nVUkuY29sbGFwc2VkUm93c1N0YXNoLnRyaW1TdGFzaChhWzBdLGwpLHRoaXMuY29sbGFwc2luZ1VJLmNvbGxhcHNlZFJvd3NTdGFzaC5zaGlmdFN0YXNoKGFbMF0sbnVsbCwtMSpsKSx0aGlzLmRhdGFNYW5hZ2VyLmZp'@;
put 'bHRlckRhdGEoYyxsLGEpLEJIKHpILHRoaXMsITApLHRoaXMuZGF0YU1hbmFnZXIuZ2V0RGF0YSgpLnNsaWNlKCl9ZnVuY3Rpb24gcGd0KGMpe3JldHVybiB0aGlzLmNvbnRleHRNZW51VUkuYXBwZW5kT3B0aW9ucyhjKX1mdW5jdGlvbiBnZ3QoYyxsKXt0aGlzLmhlYWRlcnNVSS5hcHBlbmRM'@;
put 'ZXZlbEluZGljYXRvcnMoYyxsKX1mdW5jdGlvbiBtZ3QoYyl7cmV0dXJuIE1hdGgubWF4KHRoaXMuaGVhZGVyc1VJLnJvd0hlYWRlcldpZHRoQ2FjaGUsYyl9ZnVuY3Rpb24gdmd0KGMsbCxhLGQpe2QhPT10aGlzLnBsdWdpbk5hbWUmJnRoaXMuaG90Ll9yZWdpc3RlclRpbWVvdXQoKCk9PntC'@;
put 'SCh6SCx0aGlzLCExKSx0aGlzLmhlYWRlcnNVSS51cGRhdGVSb3dIZWFkZXJXaWR0aCgpLHRoaXMuY29sbGFwc2luZ1VJLmNvbGxhcHNlZFJvd3NTdGFzaC5hcHBseVN0YXNoKCl9KX1mdW5jdGlvbiBiZ3QoYyxsLGEpe2NvbnN0IGQ9QXJyYXkuZnJvbShhLnJlZHVjZSgoaCxmKT0+e2lmKHRo'@;
put 'aXMuZGF0YU1hbmFnZXIuaXNQYXJlbnQoZikpe2NvbnN0IHY9dGhpcy5kYXRhTWFuYWdlci5nZXREYXRhT2JqZWN0KGYpLl9fY2hpbGRyZW47cmV0dXJuIGguYWRkKGYpLEFycmF5LmlzQXJyYXkodikmJnYuZm9yRWFjaChNPT5oLmFkZCh0aGlzLmRhdGFNYW5hZ2VyLmdldFJvd0luZGV4KE0p'@;
put 'KSksaH1yZXR1cm4gaC5hZGQoZil9LG5ldyBTZXQpKTthLmxlbmd0aD0wLGEucHVzaCguLi5kKX1mdW5jdGlvbiB5Z3QoKXt0aGlzLmNvbGxhcHNpbmdVSS5jb2xsYXBzZWRSb3dzU3Rhc2guc3Rhc2goKX1mdW5jdGlvbiBfZ3QoYyxsKXt0aGlzLmNvbGxhcHNpbmdVSS5jb2xsYXBzZWRSb3dz'@;
put 'U3Rhc2guc2hpZnRTdGFzaCh0aGlzLmRhdGFNYW5hZ2VyLmdldFJvd0luZGV4KGwpKSx0aGlzLmNvbGxhcHNpbmdVSS5jb2xsYXBzZWRSb3dzU3Rhc2guYXBwbHlTdGFzaCgpLHRoaXMuaGVhZGVyc1VJLnVwZGF0ZVJvd0hlYWRlcldpZHRoKCl9ZnVuY3Rpb24gd2d0KCl7dGhpcy5jb2xsYXBz'@;
put 'aW5nVUkuY29sbGFwc2VkUm93c1N0YXNoLnN0YXNoKCl9ZnVuY3Rpb24gQ2d0KGMsbCxhKXt0aGlzLmNvbGxhcHNpbmdVSS5jb2xsYXBzZWRSb3dzU3Rhc2guc2hpZnRTdGFzaChhLG51bGwsLTEpLHRoaXMuY29sbGFwc2luZ1VJLmNvbGxhcHNlZFJvd3NTdGFzaC5hcHBseVN0YXNoKCksdGhp'@;
put 'cy5oZWFkZXJzVUkudXBkYXRlUm93SGVhZGVyV2lkdGgoKX1mdW5jdGlvbiBTZ3QoKXt0aGlzLmRhdGFNYW5hZ2VyLnJld3JpdGVDYWNoZSgpfWZ1bmN0aW9uIE1ndCgpe3RoaXMuaGVhZGVyc1VJLnVwZGF0ZVJvd0hlYWRlcldpZHRoKCl9ZnVuY3Rpb24geGd0KGMsbCl7VkgoekgsdGhpcykm'@;
put 'JihsLnNraXBSZW5kZXI9ITApfWZ1bmN0aW9uIGU2ZShjKXtpZighVDNlKGMpKXJldHVybiBOJCgiVGhlIE5lc3RlZCBSb3dzIHBsdWdpbiByZXF1aXJlcyBhbiBBcnJheSBvZiBPYmplY3RzIGFzIGEgZGF0YXNldCB0byBiZSBwcm92aWRlZC4gVGhlIHBsdWdpbiBoYXMgYmVlbiBkaXNhYmxl'@;
put 'ZC4iKSx0aGlzLmhvdC5nZXRTZXR0aW5ncygpW2pIXT0hMSx2b2lkIHRoaXMuZGlzYWJsZVBsdWdpbigpO3RoaXMuZGF0YU1hbmFnZXIuc2V0RGF0YShjKSx0aGlzLmRhdGFNYW5hZ2VyLnJld3JpdGVDYWNoZSgpfWZ1bmN0aW9uIHVlZShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gRWd0KGMp'@;
put 'e3ZhciBsPWZ1bmN0aW9uIFRndChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Ro'@;
put 'cm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3Qu'@;
put 'ZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y29uc3Qga2d0PWNsYXNzIEFndHtjb25zdHJ1Y3RvcihsKXtsZXQgYT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9h'@;
put 'cmd1bWVudHNbMV06d2luZG93O3VlZSh0aGlzLCJyb290V2luZG93Iix2b2lkIDApLHVlZSh0aGlzLCJwcmVmaXgiLHZvaWQgMCksdWVlKHRoaXMsInNhdmVkS2V5cyIsW10pLHRoaXMucm9vdFdpbmRvdz1hLHRoaXMucHJlZml4PWwsdGhpcy5sb2FkU2F2ZWRLZXlzKCl9c2F2ZVZhbHVlKGws'@;
put 'YSl7dGhpcy5yb290V2luZG93LmxvY2FsU3RvcmFnZS5zZXRJdGVtKGAke3RoaXMucHJlZml4fV8ke2x9YCxKU09OLnN0cmluZ2lmeShhKSksLTE9PT10aGlzLnNhdmVkS2V5cy5pbmRleE9mKGwpJiYodGhpcy5zYXZlZEtleXMucHVzaChsKSx0aGlzLnNhdmVTYXZlZEtleXMoKSl9bG9hZFZh'@;
put 'bHVlKGwsYSl7Y29uc3QgaD10aGlzLnJvb3RXaW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0oYCR7dGhpcy5wcmVmaXh9XyR7dHlwZW9mIGw+InUiP2E6bH1gKTtyZXR1cm4gbnVsbD09PWg/dm9pZCAwOkpTT04ucGFyc2UoaCl9cmVzZXQobCl7dGhpcy5yb290V2luZG93LmxvY2FsU3RvcmFn'@;
put 'ZS5yZW1vdmVJdGVtKGAke3RoaXMucHJlZml4fV8ke2x9YCl9cmVzZXRBbGwoKXtZbih0aGlzLnNhdmVkS2V5cywobCxhKT0+e3RoaXMucm9vdFdpbmRvdy5sb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShgJHt0aGlzLnByZWZpeH1fJHt0aGlzLnNhdmVkS2V5c1thXX1gKX0pLHRoaXMuY2xlYXJT'@;
put 'YXZlZEtleXMoKX1sb2FkU2F2ZWRLZXlzKCl7Y29uc3QgbD10aGlzLnJvb3RXaW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0oYCR7dGhpcy5wcmVmaXh9X19wZXJzaXN0ZW50U3RhdGVLZXlzYCksYT0ic3RyaW5nIj09dHlwZW9mIGw/SlNPTi5wYXJzZShsKTp2b2lkIDA7dGhpcy5zYXZlZEtl'@;
put 'eXM9YXx8W119c2F2ZVNhdmVkS2V5cygpe3RoaXMucm9vdFdpbmRvdy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbShgJHt0aGlzLnByZWZpeH1fX3BlcnNpc3RlbnRTdGF0ZUtleXNgLEpTT04uc3RyaW5naWZ5KHRoaXMuc2F2ZWRLZXlzKSl9Y2xlYXJTYXZlZEtleXMoKXt0aGlzLnNhdmVkS2V5cy5s'@;
put 'ZW5ndGg9MCx0aGlzLnNhdmVTYXZlZEtleXMoKX19O1NhLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJwZXJzaXN0ZW50U3RhdGVTYXZlIiksU2EuZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoInBlcnNpc3RlbnRTdGF0ZUxvYWQiKSxTYS5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigicGVyc2lz'@;
put 'dGVudFN0YXRlUmVzZXQiKTtjb25zdCB0NmU9InBlcnNpc3RlbnRTdGF0ZSI7Y2xhc3MgT2d0IGV4dGVuZHMgRnN7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLGZ1bmN0aW9uIERndChjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gSWd0KGMpe3ZhciBsPWZ1bmN0aW9uIFJndChj'@;
put 'LGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBA'@;
put 'dG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2'@;
put 'YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9KHRoaXMsInN0b3JhZ2UiLHZvaWQgMCl9c3RhdGljIGdldCBQTFVHSU5fS0VZKCl7cmV0dXJuIHQ2ZX1zdGF0aWMgZ2V0IFBMVUdJTl9QUklPUklUWSgpe3JldHVybiAwfWlzRW5hYmxl'@;
put 'ZCgpe3JldHVybiEhdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVt0NmVdfWVuYWJsZVBsdWdpbigpe3RoaXMuZW5hYmxlZHx8KHRoaXMuc3RvcmFnZXx8KHRoaXMuc3RvcmFnZT1uZXcga2d0KHRoaXMuaG90LnJvb3RFbGVtZW50LmlkLHRoaXMuaG90LnJvb3RXaW5kb3cpKSx0aGlzLmFkZEhvb2so'@;
put 'InBlcnNpc3RlbnRTdGF0ZVNhdmUiLChsLGEpPT50aGlzLnNhdmVWYWx1ZShsLGEpKSx0aGlzLmFkZEhvb2soInBlcnNpc3RlbnRTdGF0ZUxvYWQiLChsLGEpPT50aGlzLmxvYWRWYWx1ZShsLGEpKSx0aGlzLmFkZEhvb2soInBlcnNpc3RlbnRTdGF0ZVJlc2V0IiwoKT0+dGhpcy5yZXNldFZh'@;
put 'bHVlKCkpLHN1cGVyLmVuYWJsZVBsdWdpbigpKX1kaXNhYmxlUGx1Z2luKCl7dGhpcy5zdG9yYWdlPXZvaWQgMCxzdXBlci5kaXNhYmxlUGx1Z2luKCl9dXBkYXRlUGx1Z2luKCl7dGhpcy5kaXNhYmxlUGx1Z2luKCksdGhpcy5lbmFibGVQbHVnaW4oKSxzdXBlci51cGRhdGVQbHVnaW4oKX1s'@;
put 'b2FkVmFsdWUobCxhKXthLnZhbHVlPXRoaXMuc3RvcmFnZS5sb2FkVmFsdWUobCl9c2F2ZVZhbHVlKGwsYSl7dGhpcy5zdG9yYWdlLnNhdmVWYWx1ZShsLGEpfXJlc2V0VmFsdWUobCl7dHlwZW9mIGw+InUiP3RoaXMuc3RvcmFnZS5yZXNldEFsbCgpOnRoaXMuc3RvcmFnZS5yZXNldChsKX1k'@;
put 'ZXN0cm95KCl7c3VwZXIuZGVzdHJveSgpfX1mdW5jdGlvbiBkZWUoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIEhndChjKXt2YXIgbD1mdW5jdGlvbiBOZ3QoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lk'@;
put 'IDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51'@;
put 'bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWZ1bmN0aW9uIG42ZShj'@;
put 'LGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9Y29uc3QgaGVlPSJzZWFyY2giLGpn'@;
put 'dD1mdW5jdGlvbihjLGwsYSxkLGgpe2MuZ2V0Q2VsbE1ldGEobCxhKS5pc1NlYXJjaFJlc3VsdD1ofSx6Z3Q9ZnVuY3Rpb24oYyxsLGEpe3JldHVybiEoX2MoYyl8fG51bGw9PT1jfHwhYy50b0xvY2FsZUxvd2VyQ2FzZXx8MD09PWMubGVuZ3RofHxfYyhsKXx8bnVsbD09PWwpJiYtMSE9PWwu'@;
put 'dG9TdHJpbmcoKS50b0xvY2FsZUxvd2VyQ2FzZShhLmxvY2FsZSkuaW5kZXhPZihjLnRvTG9jYWxlTG93ZXJDYXNlKGEubG9jYWxlKSl9O3ZhciBmZWU9bmV3IFdlYWtTZXQ7Y2xhc3MgVWd0IGV4dGVuZHMgRnN7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLGZ1bmN0aW9uIFBn'@;
put 'dChjLGwpeyhmdW5jdGlvbiBGZ3QoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfSkoYyxsKSxsLmFkZChjKX0odGhpcyxmZWUpLGRlZSh0aGlzLCJjYWxs'@;
put 'YmFjayIsamd0KSxkZWUodGhpcywicXVlcnlNZXRob2QiLHpndCksZGVlKHRoaXMsInNlYXJjaFJlc3VsdENsYXNzIiwiaHRTZWFyY2hSZXN1bHQiKX1zdGF0aWMgZ2V0IFBMVUdJTl9LRVkoKXtyZXR1cm4gaGVlfXN0YXRpYyBnZXQgUExVR0lOX1BSSU9SSVRZKCl7cmV0dXJuIDE5MH1pc0Vu'@;
put 'YWJsZWQoKXtyZXR1cm4gdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtoZWVdfWVuYWJsZVBsdWdpbigpe3ZhciBsPXRoaXM7aWYodGhpcy5lbmFibGVkKXJldHVybjtjb25zdCBhPXRoaXMuaG90LmdldFNldHRpbmdzKClbaGVlXTt0aGlzLnVwZGF0ZVBsdWdpblNldHRpbmdzKGEpLHRoaXMuYWRk'@;
put 'SG9vaygiYmVmb3JlUmVuZGVyZXIiLGZ1bmN0aW9uKCl7Zm9yKHZhciBkPWFyZ3VtZW50cy5sZW5ndGgsaD1uZXcgQXJyYXkoZCksZj0wO2Y8ZDtmKyspaFtmXT1hcmd1bWVudHNbZl07cmV0dXJuIG42ZShmZWUsbCxyNmUpLmNhbGwobCwuLi5oKX0pLHN1cGVyLmVuYWJsZVBsdWdpbigpfWRp'@;
put 'c2FibGVQbHVnaW4oKXt2YXIgbD10aGlzO2NvbnN0IGE9ZnVuY3Rpb24oKXtmb3IodmFyIGQ9YXJndW1lbnRzLmxlbmd0aCxoPW5ldyBBcnJheShkKSxmPTA7ZjxkO2YrKyloW2ZdPWFyZ3VtZW50c1tmXTtyZXR1cm4gbjZlKGZlZSxsLHI2ZSkuY2FsbChsLC4uLmgpfTt0aGlzLmhvdC5hZGRI'@;
put 'b29rKCJiZWZvcmVSZW5kZXJlciIsYSksdGhpcy5ob3QuYWRkSG9va09uY2UoImFmdGVyVmlld1JlbmRlciIsKCk9Pnt0aGlzLmhvdC5yZW1vdmVIb29rKCJiZWZvcmVSZW5kZXJlciIsYSl9KSxzdXBlci5kaXNhYmxlUGx1Z2luKCl9dXBkYXRlUGx1Z2luKCl7dGhpcy5kaXNhYmxlUGx1Z2lu'@;
put 'KCksdGhpcy5lbmFibGVQbHVnaW4oKSxzdXBlci51cGRhdGVQbHVnaW4oKX1xdWVyeShsKXtsZXQgYT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06dGhpcy5nZXRDYWxsYmFjaygpLGQ9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1h'@;
put 'cmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOnRoaXMuZ2V0UXVlcnlNZXRob2QoKTtjb25zdCBoPXRoaXMuaG90LmNvdW50Um93cygpLGY9dGhpcy5ob3QuY291bnRDb2xzKCksdj1bXSxNPXRoaXMuaG90O3JldHVybiBHYSgwLGgtMSxEPT57R2EoMCxmLTEsWj0+e2NvbnN0IHJlPXRoaXMuaG90'@;
put 'LmdldERhdGFBdENlbGwoRCxaKSxjZT10aGlzLmhvdC5nZXRDZWxsTWV0YShELFopLGJlPWNlLnNlYXJjaC5jYWxsYmFja3x8YSxCZT0oY2Uuc2VhcmNoLnF1ZXJ5TWV0aG9kfHxkKShsLHJlLGNlKTtCZSYmdi5wdXNoKHtyb3c6RCxjb2w6WixkYXRhOnJlfSksYmUmJmJlKE0sRCxaLHJlLEJl'@;
put 'KX0pfSksdn1nZXRDYWxsYmFjaygpe3JldHVybiB0aGlzLmNhbGxiYWNrfXNldENhbGxiYWNrKGwpe3RoaXMuY2FsbGJhY2s9bH1nZXRRdWVyeU1ldGhvZCgpe3JldHVybiB0aGlzLnF1ZXJ5TWV0aG9kfXNldFF1ZXJ5TWV0aG9kKGwpe3RoaXMucXVlcnlNZXRob2Q9bH1nZXRTZWFyY2hSZXN1'@;
put 'bHRDbGFzcygpe3JldHVybiB0aGlzLnNlYXJjaFJlc3VsdENsYXNzfXNldFNlYXJjaFJlc3VsdENsYXNzKGwpe3RoaXMuc2VhcmNoUmVzdWx0Q2xhc3M9bH11cGRhdGVQbHVnaW5TZXR0aW5ncyhsKXtxbyhsKSYmKGwuc2VhcmNoUmVzdWx0Q2xhc3MmJnRoaXMuc2V0U2VhcmNoUmVzdWx0Q2xh'@;
put 'c3MobC5zZWFyY2hSZXN1bHRDbGFzcyksbC5xdWVyeU1ldGhvZCYmdGhpcy5zZXRRdWVyeU1ldGhvZChsLnF1ZXJ5TWV0aG9kKSxsLmNhbGxiYWNrJiZ0aGlzLnNldENhbGxiYWNrKGwuY2FsbGJhY2spKX1kZXN0cm95KCl7c3VwZXIuZGVzdHJveSgpfX1mdW5jdGlvbiByNmUoYyxsLGEsZCxo'@;
put 'LGYpe2NvbnN0IHY9Zi5jbGFzc05hbWV8fFtdO2xldCBNPVtdOyJzdHJpbmciPT10eXBlb2Ygdj9NPXYuc3BsaXQoIiAiKTpNLnB1c2goLi4udiksdGhpcy5pc0VuYWJsZWQoKSYmZi5pc1NlYXJjaFJlc3VsdD9NLmluY2x1ZGVzKHRoaXMuc2VhcmNoUmVzdWx0Q2xhc3MpfHxNLnB1c2goYCR7'@;
put 'dGhpcy5zZWFyY2hSZXN1bHRDbGFzc31gKTpNLmluY2x1ZGVzKHRoaXMuc2VhcmNoUmVzdWx0Q2xhc3MpJiZNLnNwbGljZShNLmluZGV4T2YodGhpcy5zZWFyY2hSZXN1bHRDbGFzcyksMSksZi5jbGFzc05hbWU9TS5qb2luKCIgIil9ZnVuY3Rpb24gVUgoYyxsLGEpe3JldHVybihsPWZ1bmN0'@;
put 'aW9uIFpndChjKXt2YXIgbD1mdW5jdGlvbiBXZ3QoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZCly'@;
put 'ZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWlu'@;
put 'IGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNsYXNzIGk2ZXtjb25zdHJ1Y3RvcihsKXtVSCh0aGlzLCJ2aWV3cG9ydFdpZHRoIix2b2lkIDApLFVIKHRoaXMsIm92ZXJ3cml0'@;
put 'ZUNvbHVtbldpZHRoRm4iLHZvaWQgMCksVUgodGhpcywiYmFzZVdpZHRocyIsbmV3IE1hcCksVUgodGhpcywic3RyZXRjaGVkV2lkdGhzIixuZXcgTWFwKSx0aGlzLm92ZXJ3cml0ZUNvbHVtbldpZHRoRm49bH1wcmVwYXJlKGwpe2xldHt2aWV3cG9ydFdpZHRoOmF9PWw7dGhpcy52aWV3cG9y'@;
put 'dFdpZHRoPWEsdGhpcy5iYXNlV2lkdGhzLmNsZWFyKCksdGhpcy5zdHJldGNoZWRXaWR0aHMuY2xlYXIoKX1zZXRDb2x1bW5CYXNlV2lkdGgobCxhKXt0aGlzLmJhc2VXaWR0aHMuc2V0KGwsYSl9Y2FsY3VsYXRlKCl7fWdldFdpZHRocygpe3JldHVybiBBcnJheS5mcm9tKHRoaXMuc3RyZXRj'@;
put 'aGVkV2lkdGhzKX19Y2xhc3MgWWd0IGV4dGVuZHMgaTZle2NhbGN1bGF0ZSgpe2NvbnN0IGw9QXJyYXkuZnJvbSh0aGlzLmJhc2VXaWR0aHMpLnJlZHVjZSgoY2UsYmUpPT57bGV0WyxFZV09YmU7cmV0dXJuIGNlK0VlfSwwKTtpZih0aGlzLnZpZXdwb3J0V2lkdGgtbDwwKXJldHVybiB2b2lk'@;
put 'IHRoaXMuc3RyZXRjaGVkV2lkdGhzLmNsZWFyKCk7Y29uc3QgZD10aGlzLnZpZXdwb3J0V2lkdGgvbCxoPVtdLGY9W107bGV0IHY9dGhpcy52aWV3cG9ydFdpZHRoLE09MDtpZih0aGlzLmJhc2VXaWR0aHMuZm9yRWFjaCgoY2UsYmUpPT57Y29uc3QgRWU9TWF0aC5yb3VuZChjZSpkKSxCZT10'@;
put 'aGlzLm92ZXJ3cml0ZUNvbHVtbldpZHRoRm4oRWUsYmUpO0VlPT09QmUmJkVlPj1fXz8oaC5wdXNoKFtiZSxCZV0pLE0rPUJlKTpFZSE9PUJlJiYoaC5wdXNoKFtiZSxCZV0pLGYucHVzaChiZSksdi09QmUpfSksdjw9X18pcmV0dXJuIHZvaWQgdGhpcy5zdHJldGNoZWRXaWR0aHMuY2xlYXIo'@;
put 'KTtjb25zdCBEPXYvTTtsZXQgWj0tMSxyZT0wO2guZm9yRWFjaCgoY2UsYmUpPT57bGV0W0VlLEJlXT1jZSxxZT1CZTtmLmluY2x1ZGVzKEVlKXx8KHFlPU1hdGgucm91bmQoQmUqRCkpLHRoaXMuc3RyZXRjaGVkV2lkdGhzLnNldChFZSxxZSksWj1FZSxiZTxoLmxlbmd0aC0xJiYocmUrPXFl'@;
put 'KX0pLHRoaXMuc3RyZXRjaGVkV2lkdGhzLnNpemU+MSYmdGhpcy5zdHJldGNoZWRXaWR0aHMuc2V0KFosTWF0aC5yb3VuZCh0aGlzLnZpZXdwb3J0V2lkdGgtcmUpKX19ZnVuY3Rpb24gYTZlKGMsbCxhKXsoZnVuY3Rpb24gR2d0KGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJv'@;
put 'cigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX0pKGMsbCksbC5zZXQoYyxhKX1mdW5jdGlvbiBwZWUoYyxsKXtyZXR1cm4gYy5nZXQobzZlKGMsbCkpfWZ1bmN0aW9uIFpIKGMsbCxhKXtyZXR1cm4gYy5zZXQobzZlKGMs'@;
put 'bCksYSksYX1mdW5jdGlvbiBvNmUoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIp'@;
put 'fXZhciBXSD1uZXcgV2Vha01hcCx3QT1uZXcgV2Vha01hcDtjbGFzcyAkZ3QgZXh0ZW5kcyBpNmV7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLGE2ZSh0aGlzLFdILDApLGE2ZSh0aGlzLHdBLC0xKX1wcmVwYXJlKGwpe3N1cGVyLnByZXBhcmUobCksWkgoV0gsdGhpcywwKSxa'@;
put 'SCh3QSx0aGlzLC0xKX1zZXRDb2x1bW5CYXNlV2lkdGgobCxhKXtzdXBlci5zZXRDb2x1bW5CYXNlV2lkdGgobCxhKSxaSCh3QSx0aGlzLGwpLFpIKFdILHRoaXMsYSl9Y2FsY3VsYXRlKCl7aWYoLTE9PT1wZWUod0EsdGhpcykpcmV0dXJuO2NvbnN0IGw9QXJyYXkuZnJvbSh0aGlzLmJhc2VX'@;
put 'aWR0aHMpLnJlZHVjZSgoZCxoKT0+e2xldFssZl09aDtyZXR1cm4gZCtmfSwwKSxhPU1hdGgubWF4KHRoaXMudmlld3BvcnRXaWR0aC1sK3BlZShXSCx0aGlzKSwwKTt0aGlzLnN0cmV0Y2hlZFdpZHRocy5zZXQocGVlKHdBLHRoaXMpLGEpfX1mdW5jdGlvbiBZSChjLGwsYSl7czZlKGMsbCks'@;
put 'bC5zZXQoYyxhKX1mdW5jdGlvbiBzNmUoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfWZ1bmN0aW9uIGZ1KGMsbCl7cmV0dXJuIGMuZ2V0KGJ3KGMsbCkp'@;
put 'fWZ1bmN0aW9uIGdlZShjLGwsYSl7cmV0dXJuIGMuc2V0KGJ3KGMsbCksYSksYX1mdW5jdGlvbiBidyhjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBl'@;
put 'bGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9dmFyIE0xPW5ldyBXZWFrTWFwLHl3PW5ldyBXZWFrTWFwLG1lZT1uZXcgV2Vha01hcCxHSD1uZXcgV2Vha01hcCxDQT1uZXcgV2Vha1NldDtjbGFzcyBYZ3R7Y29uc3RydWN0b3IobCl7KGZ1bmN0aW9uIEtndChjLGwpe3M2'@;
put 'ZShjLGwpLGwuYWRkKGMpfSkodGhpcyxDQSksWUgodGhpcyxNMSx2b2lkIDApLFlIKHRoaXMseXcsdm9pZCAwKSxZSCh0aGlzLG1lZSxuZXcgTWFwKFtbImFsbCIsbmV3IFlndChidyhDQSx0aGlzLGw2ZSkuYmluZCh0aGlzKSldLFsibGFzdCIsbmV3ICRndChidyhDQSx0aGlzLGw2ZSkuYmlu'@;
put 'ZCh0aGlzKSldXSkpLFlIKHRoaXMsR0gsIm5vbmUiKSxnZWUoTTEsdGhpcyxsKSxnZWUoeXcsdGhpcyxmdShNMSx0aGlzKS5jb2x1bW5JbmRleE1hcHBlci5jcmVhdGVBbmRSZWdpc3RlckluZGV4TWFwKCJzdHJldGNoQ29sdW1ucyIsInBoeXNpY2FsSW5kZXhUb1ZhbHVlIikpfXVzZVN0cmF0'@;
put 'ZWd5KGwpe2dlZShHSCx0aGlzLGZ1KG1lZSx0aGlzKS5oYXMobCk/bDoibm9uZSIpfXJlZnJlc2hTdHJldGNoaW5nKCl7Im5vbmUiIT09ZnUoR0gsdGhpcyk/ZnUoTTEsdGhpcykuYmF0Y2hFeGVjdXRpb24oKCk9PntmdSh5dyx0aGlzKS5jbGVhcigpO2NvbnN0IGw9ZnUobWVlLHRoaXMpLmdl'@;
put 'dChmdShHSCx0aGlzKSk7bGV0IGQ9ZnUoTTEsdGhpcykudmlldy5nZXRWaWV3cG9ydFdpZHRoKCk7YncoQ0EsdGhpcyxKZ3QpLmNhbGwodGhpcykmJihkLT1mMChmdShNMSx0aGlzKS5yb290RG9jdW1lbnQpKSxsLnByZXBhcmUoe3ZpZXdwb3J0V2lkdGg6ZH0pO2ZvcihsZXQgaD0wO2g8ZnUo'@;
put 'TTEsdGhpcykuY291bnRDb2xzKCk7aCsrKWZ1KE0xLHRoaXMpLmNvbHVtbkluZGV4TWFwcGVyLmlzSGlkZGVuKGZ1KE0xLHRoaXMpLnRvUGh5c2ljYWxDb2x1bW4oaCkpfHxsLnNldENvbHVtbkJhc2VXaWR0aChoLGJ3KENBLHRoaXMsUWd0KS5jYWxsKHRoaXMsaCkpO2wuY2FsY3VsYXRlKCks'@;
put 'bC5nZXRXaWR0aHMoKS5mb3JFYWNoKGg9PntsZXRbZix2XT1oO2Z1KHl3LHRoaXMpLnNldFZhbHVlQXRJbmRleChmdShNMSx0aGlzKS50b1BoeXNpY2FsQ29sdW1uKGYpLHYpfSl9LCEwKTpmdSh5dyx0aGlzKS5jbGVhcigpfWdldFN0cmV0Y2hlZFdpZHRoKGwpe3JldHVybiBmdSh5dyx0aGlz'@;
put 'KS5nZXRWYWx1ZUF0SW5kZXgoZnUoTTEsdGhpcykudG9QaHlzaWNhbENvbHVtbihsKSl9fWZ1bmN0aW9uIEpndCgpe2NvbnN0e3ZpZXc6Y309ZnUoTTEsdGhpcyk7aWYoYy5pc1ZlcnRpY2FsbHlTY3JvbGxhYmxlQnlXaW5kb3coKSlyZXR1cm4hMTtjb25zdCBsPWMuZ2V0Vmlld3BvcnRIZWln'@;
put 'aHQoKSxhPWZ1KE0xLHRoaXMpLmNvdW50Um93cygpLGQ9Yy5nZXRTdHlsZXNIYW5kbGVyKCkuZ2V0RGVmYXVsdFJvd0hlaWdodCgpO2xldCBoPTAsZj0hMTtmb3IobGV0IE09MDtNPGE7TSsrKXt2YXIgdjtpZihoKz0obnVsbCE9PSh2PWZ1KE0xLHRoaXMpLmdldFJvd0hlaWdodChNKSkmJnZv'@;
put 'aWQgMCE9PXY/djpkKSsoMD09PU0/MTowKSxoPmwpe2Y9ITA7YnJlYWt9fXJldHVybiBmfWZ1bmN0aW9uIFFndChjKXt2YXIgbDtyZXR1cm4gbnVsbCE9PShsPWZ1KE0xLHRoaXMpLmdldENvbFdpZHRoKGMsIlN0cmV0Y2hDb2x1bW5zIikpJiZ2b2lkIDAhPT1sP2w6X199ZnVuY3Rpb24gbDZl'@;
put 'KGMsbCl7cmV0dXJuIGZ1KE0xLHRoaXMpLnJ1bkhvb2tzKCJiZWZvcmVTdHJldGNoaW5nQ29sdW1uV2lkdGgiLGMsbCl9ZnVuY3Rpb24gdmVlKGMsbCxhKXtjNmUoYyxsKSxsLnNldChjLGEpfWZ1bmN0aW9uIGM2ZShjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5v'@;
put 'dCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9ZnVuY3Rpb24gYmVlKGMsbCxhKXtyZXR1cm4gYy5zZXQoJEgoYyxsKSxhKSxhfWZ1bmN0aW9uIEtnKGMsbCl7cmV0dXJuIGMuZ2V0KCRIKGMsbCkpfWZ1bmN0aW9uICRIKGMsbCxhKXtp'@;
put 'ZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX12YXIgX3c9bmV3IFdlYWtNYXAsS0g9bmV3IFdl'@;
put 'YWtNYXAsU0E9bmV3IFdlYWtNYXAseWVlPW5ldyBXZWFrU2V0O2NsYXNzIHI1dCBleHRlbmRzIEZze2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSxmdW5jdGlvbiBlNXQoYyxsKXtjNmUoYyxsKSxsLmFkZChjKX0odGhpcyx5ZWUpLHZlZSh0aGlzLF93LG5ldyBYZ3QodGhpcy5o'@;
put 'b3QpKSx2ZWUodGhpcyxLSCxudWxsKSx2ZWUodGhpcyxTQSxuZXcgUmVzaXplT2JzZXJ2ZXIobD0+e3JlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+e3ZhciBhO251bGwhPT0oYT10aGlzLmhvdCkmJnZvaWQgMCE9PWEmJmEudmlldy5pc0hvcml6b250YWxseVNjcm9sbGFibGVCeVdpbmRvdygp'@;
put 'JiZsLmZvckVhY2goZD0+e2xldHtjb250ZW50UmVjdDpofT1kO251bGwhPT1LZyhLSCx0aGlzKSYmS2coS0gsdGhpcykhPT1oLndpZHRoJiYodGhpcy5ob3QucmVmcmVzaERpbWVuc2lvbnMoKSx0aGlzLmhvdC52aWV3LmFkanVzdEVsZW1lbnRzU2l6ZSgpKSxiZWUoS0gsdGhpcyxoLndpZHRo'@;
put 'KX0pfSl9KSl9c3RhdGljIGdldCBQTFVHSU5fS0VZKCl7cmV0dXJuInN0cmV0Y2hDb2x1bW5zIn1zdGF0aWMgZ2V0IFBMVUdJTl9QUklPUklUWSgpe3JldHVybiAxNTV9c3RhdGljIGdldCBTRVRUSU5HX0tFWVMoKXtyZXR1cm4hMH1pc0VuYWJsZWQoKXtyZXR1cm5bImFsbCIsImxhc3QiXS5p'@;
put 'bmNsdWRlcyh0aGlzLmhvdC5nZXRTZXR0aW5ncygpLnN0cmV0Y2hIKX1lbmFibGVQbHVnaW4oKXt2YXIgbD10aGlzO3RoaXMuZW5hYmxlZHx8KEtnKF93LHRoaXMpLnVzZVN0cmF0ZWd5KHRoaXMuaG90LmdldFNldHRpbmdzKCkuc3RyZXRjaEgpLEtnKFNBLHRoaXMpLm9ic2VydmUodGhpcy5o'@;
put 'b3Qucm9vdEVsZW1lbnQpLHRoaXMuYWRkSG9vaygiYmVmb3JlUmVuZGVyIixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiAkSCh5ZWUsbCxhNXQpLmNhbGwobCwuLi5kKX0pLHRo'@;
put 'aXMuYWRkSG9vaygibW9kaWZ5Q29sV2lkdGgiLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuICRIKHllZSxsLGk1dCkuY2FsbChsLC4uLmQpfSwxMCksc3VwZXIuZW5hYmxlUGx1'@;
put 'Z2luKCkpfXVwZGF0ZVBsdWdpbigpe0tnKF93LHRoaXMpLnVzZVN0cmF0ZWd5KHRoaXMuaG90LmdldFNldHRpbmdzKCkuc3RyZXRjaEgpLHN1cGVyLnVwZGF0ZVBsdWdpbigpfWRpc2FibGVQbHVnaW4oKXtzdXBlci5kaXNhYmxlUGx1Z2luKCksS2coU0EsdGhpcykudW5vYnNlcnZlKHRoaXMu'@;
put 'aG90LnJvb3RFbGVtZW50KX1nZXRDb2x1bW5XaWR0aChsKXtyZXR1cm4gS2coX3csdGhpcykuZ2V0U3RyZXRjaGVkV2lkdGgobCl9ZGVzdHJveSgpe0tnKFNBLHRoaXMpLmRpc2Nvbm5lY3QoKSxiZWUoU0EsdGhpcyxudWxsKSxiZWUoX3csdGhpcyxudWxsKSxzdXBlci5kZXN0cm95KCl9fWZ1'@;
put 'bmN0aW9uIGk1dChjLGwsYSl7aWYoYT09PXRoaXMucGx1Z2luTmFtZSlyZXR1cm47Y29uc3QgZD10aGlzLmdldENvbHVtbldpZHRoKGwpO3JldHVybiJudW1iZXIiPT10eXBlb2YgZD9kOmN9ZnVuY3Rpb24gYTV0KGMpe2MmJktnKF93LHRoaXMpLnJlZnJlc2hTdHJldGNoaW5nKCl9ZnVuY3Rp'@;
put 'b24gcUgoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIGw1dChjKXt2YXIgbD1mdW5jdGlvbiBjNXQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVs'@;
put 'dCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1i'@;
put 'b2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWZ1bmN0aW9uIF9lZShjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09'@;
put 'PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9dmFyIFhIPW5ldyBXZWFrU2V0O2NsYXNzIGg1dCBleHRlbmRzIEZze2NvbnN0cnVjdG9yKCl7'@;
put 'c3VwZXIoLi4uYXJndW1lbnRzKSxmdW5jdGlvbiBvNXQoYyxsKXsoZnVuY3Rpb24gczV0KGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX0pKGMsbCksbC5h'@;
put 'ZGQoYyl9KHRoaXMsWEgpLHFIKHRoaXMsInNjcm9sbGJhcnMiLFtdKSxxSCh0aGlzLCJjbG9uZXMiLFtdKSxxSCh0aGlzLCJsb2NrZWRDb2xsZWN0aW9uIiwhMSkscUgodGhpcywiZnJlZXplT3ZlcmxheXMiLCExKX1zdGF0aWMgZ2V0IFBMVUdJTl9LRVkoKXtyZXR1cm4idG91Y2hTY3JvbGwi'@;
put 'fXN0YXRpYyBnZXQgUExVR0lOX1BSSU9SSVRZKCl7cmV0dXJuIDIwMH1zdGF0aWMgZ2V0IFNFVFRJTkdfS0VZUygpe3JldHVybiEwfWlzRW5hYmxlZCgpe3JldHVybiBSJCgpfWVuYWJsZVBsdWdpbigpe3RoaXMuZW5hYmxlZHx8KHRoaXMuYWRkSG9vaygiYWZ0ZXJWaWV3UmVuZGVyIiwoKT0+'@;
put 'X2VlKFhILHRoaXMsZjV0KS5jYWxsKHRoaXMpKSx0aGlzLnJlZ2lzdGVyRXZlbnRzKCksc3VwZXIuZW5hYmxlUGx1Z2luKCkpfXVwZGF0ZVBsdWdpbigpe3RoaXMubG9ja2VkQ29sbGVjdGlvbj0hMSxzdXBlci51cGRhdGVQbHVnaW4oKX1kaXNhYmxlUGx1Z2luKCl7c3VwZXIuZGlzYWJsZVBs'@;
put 'dWdpbigpfXJlZ2lzdGVyRXZlbnRzKCl7dGhpcy5hZGRIb29rKCJiZWZvcmVUb3VjaFNjcm9sbCIsKCk9Pl9lZShYSCx0aGlzLHA1dCkuY2FsbCh0aGlzKSksdGhpcy5hZGRIb29rKCJhZnRlck1vbWVudHVtU2Nyb2xsIiwoKT0+X2VlKFhILHRoaXMsZzV0KS5jYWxsKHRoaXMpKX19ZnVuY3Rp'@;
put 'b24gZjV0KCl7aWYodGhpcy5sb2NrZWRDb2xsZWN0aW9uKXJldHVybjtjb25zdHt0b3BPdmVybGF5OmMsYm90dG9tT3ZlcmxheTpsLGlubGluZVN0YXJ0T3ZlcmxheTphLHRvcElubGluZVN0YXJ0Q29ybmVyT3ZlcmxheTpkLGJvdHRvbUlubGluZVN0YXJ0Q29ybmVyT3ZlcmxheTpofT10aGlz'@;
put 'LmhvdC52aWV3Ll93dC53dE92ZXJsYXlzO3RoaXMubG9ja2VkQ29sbGVjdGlvbj0hMCx0aGlzLnNjcm9sbGJhcnMubGVuZ3RoPTAsdGhpcy5zY3JvbGxiYXJzLnB1c2goYyksbC5jbG9uZSYmdGhpcy5zY3JvbGxiYXJzLnB1c2gobCksdGhpcy5zY3JvbGxiYXJzLnB1c2goYSksZCYmdGhpcy5z'@;
put 'Y3JvbGxiYXJzLnB1c2goZCksaCYmaC5jbG9uZSYmdGhpcy5zY3JvbGxiYXJzLnB1c2goaCksdGhpcy5jbG9uZXM9W10sYy5uZWVkRnVsbFJlbmRlciYmdGhpcy5jbG9uZXMucHVzaChjLmNsb25lLnd0VGFibGUuaG9sZGVyLnBhcmVudE5vZGUpLGwubmVlZEZ1bGxSZW5kZXImJnRoaXMuY2xv'@;
put 'bmVzLnB1c2gobC5jbG9uZS53dFRhYmxlLmhvbGRlci5wYXJlbnROb2RlKSxhLm5lZWRGdWxsUmVuZGVyJiZ0aGlzLmNsb25lcy5wdXNoKGEuY2xvbmUud3RUYWJsZS5ob2xkZXIucGFyZW50Tm9kZSksZCYmdGhpcy5jbG9uZXMucHVzaChkLmNsb25lLnd0VGFibGUuaG9sZGVyLnBhcmVudE5v'@;
put 'ZGUpLGgmJmguY2xvbmUmJnRoaXMuY2xvbmVzLnB1c2goaC5jbG9uZS53dFRhYmxlLmhvbGRlci5wYXJlbnROb2RlKX1mdW5jdGlvbiBwNXQoKXt0aGlzLmZyZWV6ZU92ZXJsYXlzPSEwLFluKHRoaXMuY2xvbmVzLGM9PntUaShjLCJoaWRlLXR3ZWVuIil9KX1mdW5jdGlvbiBnNXQoKXt0aGlz'@;
put 'LmZyZWV6ZU92ZXJsYXlzPSExLFluKHRoaXMuY2xvbmVzLGM9PntsbyhjLCJoaWRlLXR3ZWVuIiksVGkoYywic2hvdy10d2VlbiIpfSksdGhpcy5ob3QuX3JlZ2lzdGVyVGltZW91dCgoKT0+e1luKHRoaXMuY2xvbmVzLGM9PntsbyhjLCJzaG93LXR3ZWVuIil9KX0sNDAwKSxZbih0aGlzLnNj'@;
put 'cm9sbGJhcnMsYz0+e2MucmVmcmVzaCgpLGMucmVzZXRGaXhlZFBvc2l0aW9uKCl9KSx0aGlzLmhvdC52aWV3Ll93dC53dE92ZXJsYXlzLnN5bmNTY3JvbGxXaXRoTWFzdGVyKCl9Y29uc3QgSkg9InRyaW1Sb3dzIjt2YXIgdTZlPW5ldyBXZWFrU2V0O2NsYXNzIFM1dCBleHRlbmRzIEZze2Nv'@;
put 'bnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSxmdW5jdGlvbiBtNXQoYyxsKXsoZnVuY3Rpb24gdjV0KGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3Qi'@;
put 'KX0pKGMsbCksbC5hZGQoYyl9KHRoaXMsdTZlKSxmdW5jdGlvbiBiNXQoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIHk1dChjKXt2YXIgbD1mdW5jdGlvbiBfNXQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2'@;
put 'b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5n'@;
put 'Ok51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfSh0aGlzLCJ0cmlt'@;
put 'bWVkUm93c01hcCIsbnVsbCl9c3RhdGljIGdldCBQTFVHSU5fS0VZKCl7cmV0dXJuIEpIfXN0YXRpYyBnZXQgUExVR0lOX1BSSU9SSVRZKCl7cmV0dXJuIDMzMH1pc0VuYWJsZWQoKXtyZXR1cm4hIXRoaXMuaG90LmdldFNldHRpbmdzKClbSkhdfWVuYWJsZVBsdWdpbigpe3RoaXMuZW5hYmxl'@;
put 'ZHx8KHRoaXMudHJpbW1lZFJvd3NNYXA9dGhpcy5ob3Qucm93SW5kZXhNYXBwZXIucmVnaXN0ZXJNYXAoInRyaW1Sb3dzIixuZXcgcUUpLHRoaXMudHJpbW1lZFJvd3NNYXAuYWRkTG9jYWxIb29rKCJpbml0IiwoKT0+ZnVuY3Rpb24gdzV0KGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2Yg'@;
put 'Yz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX0odTZlLHRoaXMsTTV0KS5jYWxsKHRoaXMpKSxzdXBlci5lbmFibGVQbHVnaW4oKSl9'@;
put 'dXBkYXRlUGx1Z2luKCl7Y29uc3QgbD10aGlzLmhvdC5nZXRTZXR0aW5ncygpW0pIXTtBcnJheS5pc0FycmF5KGwpJiZ0aGlzLmhvdC5iYXRjaEV4ZWN1dGlvbigoKT0+e3RoaXMudHJpbW1lZFJvd3NNYXAuY2xlYXIoKSxZbihsLGE9Pnt0aGlzLnRyaW1tZWRSb3dzTWFwLnNldFZhbHVlQXRJ'@;
put 'bmRleChhLCEwKX0pfSwhMCksc3VwZXIudXBkYXRlUGx1Z2luKCl9ZGlzYWJsZVBsdWdpbigpe3RoaXMuaG90LnJvd0luZGV4TWFwcGVyLnVucmVnaXN0ZXJNYXAoInRyaW1Sb3dzIiksc3VwZXIuZGlzYWJsZVBsdWdpbigpfWdldFRyaW1tZWRSb3dzKCl7cmV0dXJuIHRoaXMudHJpbW1lZFJv'@;
put 'd3NNYXAuZ2V0VHJpbW1lZEluZGV4ZXMoKX10cmltUm93cyhsKXtjb25zdCBhPXRoaXMuZ2V0VHJpbW1lZFJvd3MoKSxkPXRoaXMuaXNWYWxpZENvbmZpZyhsKTtsZXQgaD1hO2QmJihoPUFycmF5LmZyb20obmV3IFNldChhLmNvbmNhdChsKSkpKSwhMSE9PXRoaXMuaG90LnJ1bkhvb2tzKCJi'@;
put 'ZWZvcmVUcmltUm93IixhLGgsZCkmJihkJiZ0aGlzLmhvdC5iYXRjaEV4ZWN1dGlvbigoKT0+e1luKGwsdj0+e3RoaXMudHJpbW1lZFJvd3NNYXAuc2V0VmFsdWVBdEluZGV4KHYsITApfSl9LCEwKSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJUcmltUm93IixhLGgsZCxkJiZoLmxlbmd0aD5h'@;
put 'Lmxlbmd0aCkpfXRyaW1Sb3coKXtmb3IodmFyIGw9YXJndW1lbnRzLmxlbmd0aCxhPW5ldyBBcnJheShsKSxkPTA7ZDxsO2QrKylhW2RdPWFyZ3VtZW50c1tkXTt0aGlzLnRyaW1Sb3dzKGEpfXVudHJpbVJvd3MobCl7Y29uc3QgYT10aGlzLmdldFRyaW1tZWRSb3dzKCksZD10aGlzLmlzVmFs'@;
put 'aWRDb25maWcobCk7bGV0IGg9YTtjb25zdCBmPXRoaXMudHJpbW1lZFJvd3NNYXAuZ2V0VmFsdWVzKCkuc2xpY2UoKSx2PWwubGVuZ3RoPjA7ZCYmdiYmKFluKGwsRD0+e2ZbRF09ITF9KSxoPXF1KGYsKEQsWixyZSk9PihaJiZELnB1c2gocmUpLEQpLFtdKSksITEhPT10aGlzLmhvdC5ydW5I'@;
put 'b29rcygiYmVmb3JlVW50cmltUm93IixhLGgsZCYmdikmJihkJiZ2JiZ0aGlzLnRyaW1tZWRSb3dzTWFwLnNldFZhbHVlcyhmKSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJVbnRyaW1Sb3ciLGEsaCxkJiZ2LGQmJmgubGVuZ3RoPGEubGVuZ3RoKSl9dW50cmltUm93KCl7Zm9yKHZhciBsPWFy'@;
put 'Z3VtZW50cy5sZW5ndGgsYT1uZXcgQXJyYXkobCksZD0wO2Q8bDtkKyspYVtkXT1hcmd1bWVudHNbZF07dGhpcy51bnRyaW1Sb3dzKGEpfWlzVHJpbW1lZChsKXtyZXR1cm4gdGhpcy50cmltbWVkUm93c01hcC5nZXRWYWx1ZUF0SW5kZXgobCl8fCExfXVudHJpbUFsbCgpe3RoaXMudW50cmlt'@;
put 'Um93cyh0aGlzLmdldFRyaW1tZWRSb3dzKCkpfWlzVmFsaWRDb25maWcobCl7Y29uc3QgYT10aGlzLmhvdC5jb3VudFNvdXJjZVJvd3MoKTtyZXR1cm4gbC5ldmVyeShkPT5OdW1iZXIuaXNJbnRlZ2VyKGQpJiZkPj0wJiZkPGEpfWRlc3Ryb3koKXtzdXBlci5kZXN0cm95KCl9fWZ1bmN0aW9u'@;
put 'IE01dCgpe2NvbnN0IGM9dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtKSF07QXJyYXkuaXNBcnJheShjKSYmdGhpcy5ob3QuYmF0Y2hFeGVjdXRpb24oKCk9PntZbihjLGw9Pnt0aGlzLnRyaW1tZWRSb3dzTWFwLnNldFZhbHVlQXRJbmRleChsLCEwKX0pfSwhMCl9Y2xhc3MgdGZ7Y29uc3RydWN0'@;
put 'b3IobCl7KGZ1bmN0aW9uIHg1dChjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gRTV0KGMpe3ZhciBsPWZ1bmN0aW9uIFQ1dChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2Fs'@;
put 'bChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5n'@;
put 'Iik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9KSh0aGlzLCJhY3Rpb25UeXBlIiwiIiksdGhpcy5hY3Rp'@;
put 'b25UeXBlPWx9dW5kbygpe3Rocm93IG5ldyBFcnJvcigiTm90IGltcGxlbWVudGVkIil9cmVkbygpe3Rocm93IG5ldyBFcnJvcigiTm90IGltcGxlbWVudGVkIil9fWZ1bmN0aW9uIFFIKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBBNXQoYyl7dmFyIGw9ZnVuY3Rpb24gazV0KGMsbCl7aWYo'@;
put 'Im9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1p'@;
put 'dGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEs'@;
put 'ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jbGFzcyB3ZWUgZXh0ZW5kcyB0Zntjb25zdHJ1Y3RvcihsKXtsZXR7c3RhdGVCZWZvcmU6YSxyYW5nZTpkLHR5cGU6aCxhbGlnbm1lbnQ6Zn09bDtzdXBlcigiY2VsbF9hbGlnbm1lbnQiKSxRSCh0'@;
put 'aGlzLCJzdGF0ZUJlZm9yZSIsdm9pZCAwKSxRSCh0aGlzLCJyYW5nZSIsdm9pZCAwKSxRSCh0aGlzLCJ0eXBlIix2b2lkIDApLFFIKHRoaXMsImFsaWdubWVudCIsdm9pZCAwKSx0aGlzLnN0YXRlQmVmb3JlPWEsdGhpcy5yYW5nZT1kLHRoaXMudHlwZT1oLHRoaXMuYWxpZ25tZW50PWZ9c3Rh'@;
put 'dGljIHN0YXJ0UmVnaXN0ZXJpbmdFdmVudHMobCxhKXtsLmFkZEhvb2soImJlZm9yZUNlbGxBbGlnbm1lbnQiLChkLGgsZix2KT0+e2EuZG9uZSgoKT0+bmV3IHdlZSh7c3RhdGVCZWZvcmU6ZCxyYW5nZTpoLHR5cGU6ZixhbGlnbm1lbnQ6dn0pKX0pfXVuZG8obCxhKXtZbih0aGlzLnJhbmdl'@;
put 'LGQ9PntkLmZvckFsbCgoaCxmKT0+e2g+PTAmJmY+PTAmJmwuc2V0Q2VsbE1ldGEoaCxmLCJjbGFzc05hbWUiLHRoaXMuc3RhdGVCZWZvcmVbaF1bZl18fCIgaHRMZWZ0Iil9KX0pLGwuYWRkSG9va09uY2UoImFmdGVyVmlld1JlbmRlciIsYSksbC5yZW5kZXIoKX1yZWRvKGwsYSl7Sm0odGhp'@;
put 'cy5yYW5nZSx0aGlzLnR5cGUsdGhpcy5hbGlnbm1lbnQsKGQsaCk9PmwuZ2V0Q2VsbE1ldGEoZCxoKSwoZCxoLGYsdik9Pmwuc2V0Q2VsbE1ldGEoZCxoLGYsdikpLGwuYWRkSG9va09uY2UoImFmdGVyVmlld1JlbmRlciIsYSksbC5yZW5kZXIoKX19ZnVuY3Rpb24gZDZlKGMsbCxhKXtyZXR1'@;
put 'cm4obD1mdW5jdGlvbiBENXQoYyl7dmFyIGw9ZnVuY3Rpb24gSTV0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9'@;
put 'dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDps'@;
put 'KyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jbGFzcyBDZWUgZXh0ZW5kcyB0Zntjb25zdHJ1Y3RvcihsKXtsZXR7Y29sdW1uczphLGZpbmFsSW5kZXg6ZH09'@;
put 'bDtzdXBlcigiY29sX21vdmUiKSxkNmUodGhpcywiY29sdW1ucyIsdm9pZCAwKSxkNmUodGhpcywiZmluYWxDb2x1bW5JbmRleCIsdm9pZCAwKSx0aGlzLmNvbHVtbnM9YS5zbGljZSgpLHRoaXMuZmluYWxDb2x1bW5JbmRleD1kfXN0YXRpYyBzdGFydFJlZ2lzdGVyaW5nRXZlbnRzKGwsYSl7'@;
put 'bC5hZGRIb29rKCJiZWZvcmVDb2x1bW5Nb3ZlIiwoZCxoKT0+eyExIT09ZCYmYS5kb25lKCgpPT5uZXcgQ2VlKHtjb2x1bW5zOmQsZmluYWxJbmRleDpofSkpfSl9dW5kbyhsLGEpe2NvbnN0IGQ9bC5nZXRQbHVnaW4oIm1hbnVhbENvbHVtbk1vdmUiKTtsLmFkZEhvb2tPbmNlKCJhZnRlclZp'@;
put 'ZXdSZW5kZXIiLGEpLEVRKHRoaXMuY29sdW1ucyx0aGlzLmZpbmFsQ29sdW1uSW5kZXgsbC5jb2x1bW5JbmRleE1hcHBlci5nZXROdW1iZXJPZkluZGV4ZXMoKSkucmV2ZXJzZSgpLmZvckVhY2goZj0+e2xldHtmcm9tOnYsdG86TX09Zjt2PE0mJihNLT0xKSxkLm1vdmVDb2x1bW4oTSx2KX0p'@;
put 'LGwucmVuZGVyKCksbC5kZXNlbGVjdENlbGwoKSxsLnNlbGVjdENvbHVtbnModGhpcy5jb2x1bW5zWzBdLHRoaXMuY29sdW1uc1swXSt0aGlzLmNvbHVtbnMubGVuZ3RoLTEpfXJlZG8obCxhKXtjb25zdCBkPWwuZ2V0UGx1Z2luKCJtYW51YWxDb2x1bW5Nb3ZlIik7bC5hZGRIb29rT25jZSgi'@;
put 'YWZ0ZXJWaWV3UmVuZGVyIixhKSxkLm1vdmVDb2x1bW5zKHRoaXMuY29sdW1ucy5zbGljZSgpLHRoaXMuZmluYWxDb2x1bW5JbmRleCksbC5yZW5kZXIoKSxsLmRlc2VsZWN0Q2VsbCgpLGwuc2VsZWN0Q29sdW1ucyh0aGlzLmZpbmFsQ29sdW1uSW5kZXgsdGhpcy5maW5hbENvbHVtbkluZGV4'@;
put 'K3RoaXMuY29sdW1ucy5sZW5ndGgtMSl9fWZ1bmN0aW9uIGg2ZShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gUjV0KGMpe3ZhciBsPWZ1bmN0aW9uIEw1dChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQg'@;
put 'MCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVt'@;
put 'YmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y2xhc3MgU2VlIGV4dGVu'@;
put 'ZHMgdGZ7Y29uc3RydWN0b3IobCl7bGV0e2N1cnJlbnRTb3J0U3RhdGU6YSxuZXdTb3J0U3RhdGU6ZH09bDtzdXBlcigiY29sX3NvcnQiKSxoNmUodGhpcywicHJldmlvdXNTb3J0U3RhdGUiLHZvaWQgMCksaDZlKHRoaXMsIm5leHRTb3J0U3RhdGUiLHZvaWQgMCksdGhpcy5wcmV2aW91c1Nv'@;
put 'cnRTdGF0ZT1hLHRoaXMubmV4dFNvcnRTdGF0ZT1kfXN0YXRpYyBzdGFydFJlZ2lzdGVyaW5nRXZlbnRzKGwsYSl7bC5hZGRIb29rKCJiZWZvcmVDb2x1bW5Tb3J0IiwoZCxoLGYpPT57ZiYmYS5kb25lKCgpPT5uZXcgU2VlKHtjdXJyZW50U29ydFN0YXRlOmQsbmV3U29ydFN0YXRlOmh9KSl9'@;
put 'KX11bmRvKGwsYSl7Y29uc3QgZD1sLmdldFBsdWdpbigiY29sdW1uU29ydGluZyIpLGg9bC5nZXRQbHVnaW4oIm11bHRpQ29sdW1uU29ydGluZyIpLGY9aC5pc0VuYWJsZWQoKT9oOmQ7dGhpcy5wcmV2aW91c1NvcnRTdGF0ZS5sZW5ndGg/Zi5zb3J0KHRoaXMucHJldmlvdXNTb3J0U3RhdGUp'@;
put 'OmYuY2xlYXJTb3J0KCksYSgpfXJlZG8obCxhKXtjb25zdCBkPWwuZ2V0UGx1Z2luKCJjb2x1bW5Tb3J0aW5nIiksaD1sLmdldFBsdWdpbigibXVsdGlDb2x1bW5Tb3J0aW5nIik7KGguaXNFbmFibGVkKCk/aDpkKS5zb3J0KHRoaXMubmV4dFNvcnRTdGF0ZSksYSgpfX1mdW5jdGlvbiBmNmUo'@;
put 'YyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIE81dChjKXt2YXIgbD1mdW5jdGlvbiBQNXQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lm'@;
put 'KCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10'@;
put 'eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNsYXNzIE1lZSBleHRlbmRzIHRme2NvbnN0cnVjdG9yKGwpe2xldHtpbmRleDphLGFtb3Vu'@;
put 'dDpkfT1sO3N1cGVyKCJpbnNlcnRfY29sIiksZjZlKHRoaXMsImluZGV4Iix2b2lkIDApLGY2ZSh0aGlzLCJhbW91bnQiLHZvaWQgMCksdGhpcy5pbmRleD1hLHRoaXMuYW1vdW50PWR9c3RhdGljIHN0YXJ0UmVnaXN0ZXJpbmdFdmVudHMobCxhKXtsLmFkZEhvb2soImFmdGVyQ3JlYXRlQ29s'@;
put 'IiwoZCxoLGYpPT57YS5kb25lKCgpPT5uZXcgTWVlKHtpbmRleDpkLGFtb3VudDpofSksZil9KX11bmRvKGwsYSl7bC5hZGRIb29rT25jZSgiYWZ0ZXJSZW1vdmVDb2wiLGEpLGwuYWx0ZXIoInJlbW92ZV9jb2wiLHRoaXMuaW5kZXgsdGhpcy5hbW91bnQsIlVuZG9SZWRvLnVuZG8iKX1yZWRv'@;
put 'KGwsYSl7bC5hZGRIb29rT25jZSgiYWZ0ZXJDcmVhdGVDb2wiLGEpLGwuYWx0ZXIoImluc2VydF9jb2xfc3RhcnQiLHRoaXMuaW5kZXgsdGhpcy5hbW91bnQsIlVuZG9SZWRvLnJlZG8iKX19ZnVuY3Rpb24gcDZlKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBGNXQoYyl7dmFyIGw9ZnVuY3Rp'@;
put 'b24gSDV0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVF'@;
put 'cnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0'@;
put 'eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jbGFzcyB4ZWUgZXh0ZW5kcyB0Zntjb25zdHJ1Y3RvcihsKXtsZXR7aW5kZXg6YSxhbW91bnQ6ZH09bDtzdXBlcigiaW5zZXJ0X3JvdyIpLHA2ZSh0aGlzLCJpbmRleCIs'@;
put 'dm9pZCAwKSxwNmUodGhpcywiYW1vdW50Iix2b2lkIDApLHRoaXMuaW5kZXg9YSx0aGlzLmFtb3VudD1kfXN0YXRpYyBzdGFydFJlZ2lzdGVyaW5nRXZlbnRzKGwsYSl7bC5hZGRIb29rKCJhZnRlckNyZWF0ZVJvdyIsKGQsaCxmKT0+e2EuZG9uZSgoKT0+bmV3IHhlZSh7aW5kZXg6ZCxhbW91'@;
put 'bnQ6aH0pLGYpfSl9dW5kbyhsLGEpe2NvbnN0IGQ9bC5jb3VudFJvd3MoKSxoPWwuZ2V0U2V0dGluZ3MoKS5taW5TcGFyZVJvd3M7dGhpcy5pbmRleD49ZCYmdGhpcy5pbmRleC1oPGQmJih0aGlzLmluZGV4LT1oKSxsLmFkZEhvb2tPbmNlKCJhZnRlclJlbW92ZVJvdyIsYSksbC5hbHRlcigi'@;
put 'cmVtb3ZlX3JvdyIsdGhpcy5pbmRleCx0aGlzLmFtb3VudCwiVW5kb1JlZG8udW5kbyIpfXJlZG8obCxhKXtsLmFkZEhvb2tPbmNlKCJhZnRlckNyZWF0ZVJvdyIsYSksbC5hbHRlcigiaW5zZXJ0X3Jvd19hYm92ZSIsdGhpcy5pbmRleCx0aGlzLmFtb3VudCwiVW5kb1JlZG8ucmVkbyIpfX1m'@;
put 'dW5jdGlvbiBlTihjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gTjV0KGMpe3ZhciBsPWZ1bmN0aW9uIFY1dChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJk'@;
put 'ZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJu'@;
put 'InN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y2xhc3MgRWVlIGV4dGVuZHMgdGZ7Y29uc3RydWN0b3IobCl7bGV0e2No'@;
put 'YW5nZXM6YSxzZWxlY3RlZDpkLGNvdW50Q29sczpoLGNvdW50Um93czpmfT1sO3N1cGVyKCJjaGFuZ2UiKSxlTih0aGlzLCJjaGFuZ2VzIix2b2lkIDApLGVOKHRoaXMsInNlbGVjdGVkIix2b2lkIDApLGVOKHRoaXMsImNvdW50Q29scyIsdm9pZCAwKSxlTih0aGlzLCJjb3VudFJvd3MiLHZv'@;
put 'aWQgMCksdGhpcy5jaGFuZ2VzPWEsdGhpcy5zZWxlY3RlZD1kLHRoaXMuY291bnRDb2xzPWgsdGhpcy5jb3VudFJvd3M9Zn1zdGF0aWMgc3RhcnRSZWdpc3RlcmluZ0V2ZW50cyhsLGEpe2wuYWRkSG9vaygiYmVmb3JlQ2hhbmdlIixmdW5jdGlvbihkLGgpe2NvbnN0IGY9ZCYmZC5sZW5ndGg7'@;
put 'ZiYmZC5maW5kKEQ9Pntjb25zdFssLFoscmVdPUQ7cmV0dXJuIFohPT1yZX0pJiZhLmRvbmUoKCk9Pntjb25zdCBEPWQucmVkdWNlKChyZSxjZSk9PihyZS5wdXNoKFsuLi5jZV0pLHJlKSxbXSk7RC5mb3JFYWNoKHJlPT57cmVbMV09bC5wcm9wVG9Db2wocmVbMV0pfSk7Y29uc3QgWj1mPjE/'@;
put 'dGhpcy5nZXRTZWxlY3RlZCgpOltbRFswXVswXSxEWzBdWzFdXV07cmV0dXJuIG5ldyBFZWUoe2NoYW5nZXM6RCxzZWxlY3RlZDpaLGNvdW50Q29sczpsLmNvdW50Q29scygpLGNvdW50Um93czpsLmNvdW50Um93cygpfSl9LGgpfSl9dW5kbyhsLGEpe2NvbnN0IGQ9ZzEodGhpcy5jaGFuZ2Vz'@;
put 'KTtmb3IobGV0IHY9MCxNPWQubGVuZ3RoO3Y8TTt2KyspZFt2XS5zcGxpY2UoMywxKTtsLmFkZEhvb2tPbmNlKCJhZnRlckNoYW5nZSIsYSksbC5zZXREYXRhQXRDZWxsKGQsbnVsbCxudWxsLCJVbmRvUmVkby51bmRvIik7Y29uc3QgaD1sLmNvdW50Um93cygpLXRoaXMuY291bnRSb3dzO2g+'@;
put 'MCYmbC5hbHRlcigicmVtb3ZlX3JvdyIsbnVsbCxoLCJVbmRvUmVkby51bmRvIik7Y29uc3QgZj1sLmNvdW50Q29scygpLXRoaXMuY291bnRDb2xzO2Y+MCYmbC5pc0NvbHVtbk1vZGlmaWNhdGlvbkFsbG93ZWQoKSYmbC5hbHRlcigicmVtb3ZlX2NvbCIsbnVsbCxmLCJVbmRvUmVkby51bmRv'@;
put 'IiksbC5zY3JvbGxUb0ZvY3VzZWRDZWxsKCksbC5zZWxlY3RDZWxscyh0aGlzLnNlbGVjdGVkLCExLCExKX1yZWRvKGwsYSl7Y29uc3QgZD1nMSh0aGlzLmNoYW5nZXMpO2ZvcihsZXQgaD0wLGY9ZC5sZW5ndGg7aDxmO2grKylkW2hdLnNwbGljZSgyLDEpO2wuYWRkSG9va09uY2UoImFmdGVy'@;
put 'Q2hhbmdlIixhKSxsLnNldERhdGFBdENlbGwoZCxudWxsLG51bGwsIlVuZG9SZWRvLnJlZG8iKSx0aGlzLnNlbGVjdGVkJiZsLnNlbGVjdENlbGxzKHRoaXMuc2VsZWN0ZWQsITEsITEpfX1mdW5jdGlvbiBnNmUoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIEI1dChjKXt2YXIgbD1mdW5jdGlv'@;
put 'biBqNXQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVy'@;
put 'cm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5'@;
put 'KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNsYXNzIFRlZSBleHRlbmRzIHRme2NvbnN0cnVjdG9yKGwpe2xldHtjb25kaXRpb25zU3RhY2s6YSxwcmV2aW91c0NvbmRpdGlvbnNTdGFjazpkfT1sO3N1cGVyKCJmaWx0'@;
put 'ZXIiKSxnNmUodGhpcywiY29uZGl0aW9uc1N0YWNrIix2b2lkIDApLGc2ZSh0aGlzLCJwcmV2aW91c0NvbmRpdGlvbnNTdGFjayIsdm9pZCAwKSx0aGlzLmNvbmRpdGlvbnNTdGFjaz1hLHRoaXMucHJldmlvdXNDb25kaXRpb25zU3RhY2s9ZH1zdGF0aWMgc3RhcnRSZWdpc3RlcmluZ0V2ZW50'@;
put 'cyhsLGEpe2wuYWRkSG9vaygiYmVmb3JlRmlsdGVyIiwoZCxoKT0+e2EuZG9uZSgoKT0+bmV3IFRlZSh7Y29uZGl0aW9uc1N0YWNrOmQscHJldmlvdXNDb25kaXRpb25zU3RhY2s6aH0pKX0pfXVuZG8obCxhKXtjb25zdCBkPWwuZ2V0UGx1Z2luKCJmaWx0ZXJzIik7bC5hZGRIb29rT25jZSgi'@;
put 'YWZ0ZXJWaWV3UmVuZGVyIixhKSxkLmltcG9ydENvbmRpdGlvbnModGhpcy5wcmV2aW91c0NvbmRpdGlvbnNTdGFjayksZC5maWx0ZXIoKX1yZWRvKGwsYSl7Y29uc3QgZD1sLmdldFBsdWdpbigiZmlsdGVycyIpO2wuYWRkSG9va09uY2UoImFmdGVyVmlld1JlbmRlciIsYSksZC5pbXBvcnRD'@;
put 'b25kaXRpb25zKHRoaXMuY29uZGl0aW9uc1N0YWNrKSxkLmZpbHRlcigpfX1jbGFzcyBBZWUgZXh0ZW5kcyB0Zntjb25zdHJ1Y3RvcihsKXtsZXR7ZGF0YTphLGNlbGxSYW5nZTpkfT1sO3N1cGVyKCJtZXJnZV9jZWxscyIpLGZ1bmN0aW9uIHo1dChjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24g'@;
put 'VTV0KGMpe3ZhciBsPWZ1bmN0aW9uIFo1dChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVy'@;
put 'biBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9P'@;
put 'YmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9KHRoaXMsImNlbGxSYW5nZSIsdm9pZCAwKSx0aGlzLmNlbGxSYW5nZT1kLHRoaXMuZGF0YT1hfXN0YXRpYyBzdGFydFJlZ2lzdGVyaW5n'@;
put 'RXZlbnRzKGwsYSl7bC5hZGRIb29rKCJiZWZvcmVNZXJnZUNlbGxzIiwoZCxoKT0+e2lmKGgpcmV0dXJuO2NvbnN0IGY9ZC5nZXRUb3BTdGFydENvcm5lcigpLHY9ZC5nZXRCb3R0b21FbmRDb3JuZXIoKSxNPWwuZ2V0RGF0YShmLnJvdyxmLmNvbCx2LnJvdyx2LmNvbCk7YS5kb25lKCgpPT5u'@;
put 'ZXcgQWVlKHtkYXRhOk0sY2VsbFJhbmdlOmR9KSl9KX11bmRvKGwsYSl7Y29uc3QgZD1sLmdldFBsdWdpbigibWVyZ2VDZWxscyIpO2wuYWRkSG9va09uY2UoImFmdGVyVmlld1JlbmRlciIsYSksZC51bm1lcmdlUmFuZ2UodGhpcy5jZWxsUmFuZ2UsITApO2NvbnN0IGg9dGhpcy5jZWxsUmFu'@;
put 'Z2UuZ2V0VG9wU3RhcnRDb3JuZXIoKTtsLnBvcHVsYXRlRnJvbUFycmF5KGgucm93LGguY29sLHRoaXMuZGF0YSx2b2lkIDAsdm9pZCAwLCJNZXJnZUNlbGxzIil9cmVkbyhsLGEpe2NvbnN0IGQ9bC5nZXRQbHVnaW4oIm1lcmdlQ2VsbHMiKTtsLmFkZEhvb2tPbmNlKCJhZnRlclZpZXdSZW5k'@;
put 'ZXIiLGEpLGQubWVyZ2VSYW5nZSh0aGlzLmNlbGxSYW5nZSl9fWZ1bmN0aW9uIG02ZShjLGwsYSxkLGgpe2NvbnN0IGY9WyJ2aXN1YWxSb3ciLCJ2aXN1YWxDb2wiLCJyb3ciLCJjb2wiLCJwcm9wIl0sdj1mLmxlbmd0aCxNPVtdO3JldHVybiBHYShkLGgsRD0+e0dhKGwsYSxaPT57Y29uc3Qg'@;
put 'cmU9Yy5nZXRDZWxsTWV0YShaLEQpO2lmKE9iamVjdC5rZXlzKHJlKS5sZW5ndGghPT12KXtjb25zdCBjZT1PYmplY3QuZnJvbUVudHJpZXMoT2JqZWN0LmVudHJpZXMocmUpLmZpbHRlcihiZT0+e2xldFtFZV09YmU7cmV0dXJuITE9PT1mLmluY2x1ZGVzKEVlKX0pKTtNLnB1c2goW3JlLnZp'@;
put 'c3VhbFJvdyxyZS52aXN1YWxDb2wsY2VdKX19KX0pLE19ZnVuY3Rpb24gcWcoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIFc1dChjKXt2YXIgbD1mdW5jdGlvbiBZNXQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtp'@;
put 'Zih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3Ry'@;
put 'aW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNsYXNzIGtl'@;
put 'ZSBleHRlbmRzIHRme2NvbnN0cnVjdG9yKGwpe2xldHtpbmRleDphLGluZGV4ZXM6ZCxkYXRhOmgsYW1vdW50OmYsaGVhZGVyczp2LGNvbHVtblBvc2l0aW9uczpNLHJvd1Bvc2l0aW9uczpELGZpeGVkQ29sdW1uc1N0YXJ0OloscmVtb3ZlZENlbGxNZXRhczpyZX09bDtzdXBlcigicmVtb3Zl'@;
put 'X2NvbCIpLHFnKHRoaXMsImluZGV4Iix2b2lkIDApLHFnKHRoaXMsImluZGV4ZXMiLHZvaWQgMCkscWcodGhpcywiZGF0YSIsdm9pZCAwKSxxZyh0aGlzLCJhbW91bnQiLHZvaWQgMCkscWcodGhpcywiaGVhZGVycyIsdm9pZCAwKSxxZyh0aGlzLCJjb2x1bW5Qb3NpdGlvbnMiLHZvaWQgMCks'@;
put 'cWcodGhpcywicm93UG9zaXRpb25zIix2b2lkIDApLHFnKHRoaXMsImZpeGVkQ29sdW1uc1N0YXJ0Iix2b2lkIDApLHFnKHRoaXMsInJlbW92ZWRDZWxsTWV0YXMiLHZvaWQgMCksdGhpcy5pbmRleD1hLHRoaXMuaW5kZXhlcz1kLHRoaXMuZGF0YT1oLHRoaXMuYW1vdW50PWYsdGhpcy5oZWFk'@;
put 'ZXJzPXYsdGhpcy5jb2x1bW5Qb3NpdGlvbnM9TS5zbGljZSgwKSx0aGlzLnJvd1Bvc2l0aW9ucz1ELnNsaWNlKDApLHRoaXMuZml4ZWRDb2x1bW5zU3RhcnQ9Wix0aGlzLnJlbW92ZWRDZWxsTWV0YXM9cmV9c3RhdGljIHN0YXJ0UmVnaXN0ZXJpbmdFdmVudHMobCxhKXtsLmFkZEhvb2soImJl'@;
put 'Zm9yZVJlbW92ZUNvbCIsKGQsaCxmLHYpPT57YS5kb25lKCgpPT57Y29uc3QgRD1sLmdldFNvdXJjZURhdGFBcnJheSgpLFo9KGwuY291bnRDb2xzKCkrZCklbC5jb3VudENvbHMoKSxyZT1aK2gtMSxjZT1bXSxiZT1bXSxFZT1bXTtyZXR1cm4gR2EoRC5sZW5ndGgtMSxCZT0+e2NvbnN0IHFl'@;
put 'PVtdLHJ0PURbQmVdO0dhKFoscmUscHQ9PntxZS5wdXNoKHJ0W2wudG9QaHlzaWNhbENvbHVtbihwdCldKX0pLGNlLnB1c2gocWUpfSksR2EoaC0xLEJlPT57RWUucHVzaChsLnRvUGh5c2ljYWxDb2x1bW4oWitCZSkpfSksQXJyYXkuaXNBcnJheShsLmdldFNldHRpbmdzKCkuY29sSGVhZGVy'@;
put 'cykmJkdhKGgtMSxCZT0+e2JlLnB1c2gobC5nZXRTZXR0aW5ncygpLmNvbEhlYWRlcnNbbC50b1BoeXNpY2FsQ29sdW1uKForQmUpXXx8bnVsbCl9KSxuZXcga2VlKHtpbmRleDpaLGluZGV4ZXM6RWUsZGF0YTpjZSxhbW91bnQ6aCxoZWFkZXJzOmJlLGNvbHVtblBvc2l0aW9uczpsLmNvbHVt'@;
put 'bkluZGV4TWFwcGVyLmdldEluZGV4ZXNTZXF1ZW5jZSgpLHJvd1Bvc2l0aW9uczpsLnJvd0luZGV4TWFwcGVyLmdldEluZGV4ZXNTZXF1ZW5jZSgpLGZpeGVkQ29sdW1uc1N0YXJ0OmwuZ2V0U2V0dGluZ3MoKS5maXhlZENvbHVtbnNTdGFydCxyZW1vdmVkQ2VsbE1ldGFzOm02ZShsLDAsbC5j'@;
put 'b3VudFJvd3MoKSxaLHJlKX0pfSx2KX0pfXVuZG8obCxhKXtsLmdldFNldHRpbmdzKCkuZml4ZWRDb2x1bW5zU3RhcnQ9dGhpcy5maXhlZENvbHVtbnNTdGFydDtjb25zdCBoPXRoaXMuaW5kZXhlcy5zbGljZSgwKS5zb3J0KCksZj0ocmUsY2UsYmUpPT5iZVt0aGlzLmluZGV4ZXMuaW5kZXhP'@;
put 'ZihoW2NlXSldLHY9dGhpcy5kYXRhLmxlbmd0aCxNPVtdO2ZvcihsZXQgcmU9MDtyZTx2O3JlKyspTS5wdXNoKHlzKHRoaXMuZGF0YVtyZV0sZikpO2NvbnN0IEQ9eXModGhpcy5oZWFkZXJzLGYpLFo9W107bC5jb2x1bW5JbmRleE1hcHBlci5zZXRJbmRleGVzU2VxdWVuY2UodGhpcy5jb2x1'@;
put 'bW5Qb3NpdGlvbnMpLGwuYWx0ZXIoImluc2VydF9jb2xfc3RhcnQiLGwudG9WaXN1YWxDb2x1bW4odGhpcy5pbmRleGVzWzBdKSx0aGlzLmluZGV4ZXMubGVuZ3RoLCJVbmRvUmVkby51bmRvIiksbC5iYXRjaEV4ZWN1dGlvbigoKT0+e2wucm93SW5kZXhNYXBwZXIuc2V0SW5kZXhlc1NlcXVl'@;
put 'bmNlKHRoaXMucm93UG9zaXRpb25zKSxsLmNvbHVtbkluZGV4TWFwcGVyLnNldEluZGV4ZXNTZXF1ZW5jZSh0aGlzLmNvbHVtblBvc2l0aW9ucyl9LCEwKSxZbihsLmdldFNvdXJjZURhdGFBcnJheSgpLChyZSxjZSk9PntZbihoLChiZSxFZSk9PntyZVtiZV09TVtjZV1bRWVdLFoucHVzaChb'@;
put 'Y2UsYmUscmVbYmVdXSl9KX0pLHR5cGVvZiB0aGlzLmhlYWRlcnM8InUiJiZZbihELChyZSxjZSk9PntsLmdldFNldHRpbmdzKCkuY29sSGVhZGVyc1toW2NlXV09cmV9KSx0aGlzLnJlbW92ZWRDZWxsTWV0YXMuZm9yRWFjaChyZT0+e2xldFtjZSxiZSxFZV09cmU7bC5zZXRDZWxsTWV0YU9i'@;
put 'amVjdChjZSxiZSxFZSl9KSxsLmFkZEhvb2tPbmNlKCJhZnRlclZpZXdSZW5kZXIiLGEpLGwuc2V0U291cmNlRGF0YUF0Q2VsbChaLG51bGwsbnVsbCwiVW5kb1JlZG8udW5kbyIpfXJlZG8obCxhKXtsLmFkZEhvb2tPbmNlKCJhZnRlclJlbW92ZUNvbCIsYSksbC5hbHRlcigicmVtb3ZlX2Nv'@;
put 'bCIsdGhpcy5pbmRleCx0aGlzLmFtb3VudCwiVW5kb1JlZG8ucmVkbyIpfX1mdW5jdGlvbiB3dyhjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gRzV0KGMpe3ZhciBsPWZ1bmN0aW9uICQ1dChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9Q'@;
put 'cmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJp'@;
put 'bmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1h'@;
put 'LGN9Y2xhc3MgRGVlIGV4dGVuZHMgdGZ7Y29uc3RydWN0b3IobCl7bGV0e2luZGV4OmEsZGF0YTpkLGZpeGVkUm93c0JvdHRvbTpoLGZpeGVkUm93c1RvcDpmLHJvd0luZGV4ZXNTZXF1ZW5jZTp2LHJlbW92ZWRDZWxsTWV0YXM6TX09bDtzdXBlcigicmVtb3ZlX3JvdyIpLHd3KHRoaXMsImlu'@;
put 'ZGV4Iix2b2lkIDApLHd3KHRoaXMsImRhdGEiLHZvaWQgMCksd3codGhpcywiZml4ZWRSb3dzQm90dG9tIix2b2lkIDApLHd3KHRoaXMsImZpeGVkUm93c1RvcCIsdm9pZCAwKSx3dyh0aGlzLCJyb3dJbmRleGVzU2VxdWVuY2UiLHZvaWQgMCksd3codGhpcywicmVtb3ZlZENlbGxNZXRhcyIs'@;
put 'dm9pZCAwKSx0aGlzLmluZGV4PWEsdGhpcy5kYXRhPWQsdGhpcy5maXhlZFJvd3NCb3R0b209aCx0aGlzLmZpeGVkUm93c1RvcD1mLHRoaXMucm93SW5kZXhlc1NlcXVlbmNlPXYsdGhpcy5yZW1vdmVkQ2VsbE1ldGFzPU19c3RhdGljIHN0YXJ0UmVnaXN0ZXJpbmdFdmVudHMobCxhKXtsLmFk'@;
put 'ZEhvb2soImJlZm9yZVJlbW92ZVJvdyIsKGQsaCxmLHYpPT57YS5kb25lKCgpPT57Y29uc3QgRD1sLnRvUGh5c2ljYWxSb3coZCksWj1EK2gtMSxyZT1nMShsLmdldFNvdXJjZURhdGEoRCwwLEQraC0xLGwuY291bnRTb3VyY2VDb2xzKCktMSkpO3JldHVybiBuZXcgRGVlKHtpbmRleDpELGRh'@;
put 'dGE6cmUsZml4ZWRSb3dzQm90dG9tOmwuZ2V0U2V0dGluZ3MoKS5maXhlZFJvd3NCb3R0b20sZml4ZWRSb3dzVG9wOmwuZ2V0U2V0dGluZ3MoKS5maXhlZFJvd3NUb3Ascm93SW5kZXhlc1NlcXVlbmNlOmwucm93SW5kZXhNYXBwZXIuZ2V0SW5kZXhlc1NlcXVlbmNlKCkscmVtb3ZlZENlbGxN'@;
put 'ZXRhczptNmUobCxELFosMCxsLmNvdW50Q29scygpLTEpfSl9LHYpfSl9dW5kbyhsLGEpe2NvbnN0IGQ9bC5nZXRTZXR0aW5ncygpLGg9W107ZC5maXhlZFJvd3NCb3R0b209dGhpcy5maXhlZFJvd3NCb3R0b20sZC5maXhlZFJvd3NUb3A9dGhpcy5maXhlZFJvd3NUb3AsdGhpcy5kYXRhLmZv'@;
put 'ckVhY2goKGYsdik9PntPYmplY3Qua2V5cyhmKS5mb3JFYWNoKE09Pntjb25zdCBEPXBhcnNlSW50KE0sMTApO2gucHVzaChbdGhpcy5pbmRleCt2LGlzTmFOKEQpP006RCxmW01dXSl9KX0pLGwucm93SW5kZXhNYXBwZXIuc2V0SW5kZXhlc1NlcXVlbmNlKHRoaXMucm93SW5kZXhlc1NlcXVl'@;
put 'bmNlKSxsLmFsdGVyKCJpbnNlcnRfcm93X2Fib3ZlIixsLnRvVmlzdWFsUm93KHRoaXMuaW5kZXgpLHRoaXMuZGF0YS5sZW5ndGgsIlVuZG9SZWRvLnVuZG8iKSxsLnJvd0luZGV4TWFwcGVyLnNldEluZGV4ZXNTZXF1ZW5jZSh0aGlzLnJvd0luZGV4ZXNTZXF1ZW5jZSksdGhpcy5yZW1vdmVk'@;
put 'Q2VsbE1ldGFzLmZvckVhY2goZj0+e2xldFt2LE0sRF09ZjtsLnNldENlbGxNZXRhT2JqZWN0KHYsTSxEKX0pLGwuYWRkSG9va09uY2UoImFmdGVyVmlld1JlbmRlciIsYSksbC5zZXRTb3VyY2VEYXRhQXRDZWxsKGgsbnVsbCxudWxsLCJVbmRvUmVkby51bmRvIil9cmVkbyhsLGEpe2wuYWRk'@;
put 'SG9va09uY2UoImFmdGVyUmVtb3ZlUm93IixhKSxsLmFsdGVyKCJyZW1vdmVfcm93IixsLnRvVmlzdWFsUm93KHRoaXMuaW5kZXgpLHRoaXMuZGF0YS5sZW5ndGgsIlVuZG9SZWRvLnJlZG8iKX19ZnVuY3Rpb24gdjZlKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBLNXQoYyl7dmFyIGw9ZnVu'@;
put 'Y3Rpb24gcTV0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5'@;
put 'cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9w'@;
put 'ZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jbGFzcyBJZWUgZXh0ZW5kcyB0Zntjb25zdHJ1Y3RvcihsKXtsZXR7cm93czphLGZpbmFsSW5kZXg6ZH09bDtzdXBlcigicm93X21vdmUiKSx2NmUodGhpcywicm93'@;
put 'cyIsdm9pZCAwKSx2NmUodGhpcywiZmluYWxSb3dJbmRleCIsdm9pZCAwKSx0aGlzLnJvd3M9YS5zbGljZSgpLHRoaXMuZmluYWxSb3dJbmRleD1kfXN0YXRpYyBzdGFydFJlZ2lzdGVyaW5nRXZlbnRzKGwsYSl7bC5hZGRIb29rKCJiZWZvcmVSb3dNb3ZlIiwoZCxoKT0+eyExIT09ZCYmYS5k'@;
put 'b25lKCgpPT5uZXcgSWVlKHtyb3dzOmQsZmluYWxJbmRleDpofSkpfSl9dW5kbyhsLGEpe2NvbnN0IGQ9bC5nZXRQbHVnaW4oIm1hbnVhbFJvd01vdmUiKTtsLmFkZEhvb2tPbmNlKCJhZnRlclZpZXdSZW5kZXIiLGEpLEVRKHRoaXMucm93cyx0aGlzLmZpbmFsUm93SW5kZXgsbC5yb3dJbmRl'@;
put 'eE1hcHBlci5nZXROdW1iZXJPZkluZGV4ZXMoKSkucmV2ZXJzZSgpLmZvckVhY2goZj0+e2xldHtmcm9tOnYsdG86TX09Zjt2PE0mJihNLT0xKSxkLm1vdmVSb3coTSx2KX0pLGwucmVuZGVyKCksbC5kZXNlbGVjdENlbGwoKSxsLnNlbGVjdFJvd3ModGhpcy5yb3dzWzBdLHRoaXMucm93c1sw'@;
put 'XSt0aGlzLnJvd3MubGVuZ3RoLTEpfXJlZG8obCxhKXtjb25zdCBkPWwuZ2V0UGx1Z2luKCJtYW51YWxSb3dNb3ZlIik7bC5hZGRIb29rT25jZSgiYWZ0ZXJWaWV3UmVuZGVyIixhKSxkLm1vdmVSb3dzKHRoaXMucm93cy5zbGljZSgpLHRoaXMuZmluYWxSb3dJbmRleCksbC5yZW5kZXIoKSxs'@;
put 'LmRlc2VsZWN0Q2VsbCgpLGwuc2VsZWN0Um93cyh0aGlzLmZpbmFsUm93SW5kZXgsdGhpcy5maW5hbFJvd0luZGV4K3RoaXMucm93cy5sZW5ndGgtMSl9fWNsYXNzIFJlZSBleHRlbmRzIHRme2NvbnN0cnVjdG9yKGwpe2xldHtjZWxsUmFuZ2U6YX09bDtzdXBlcigidW5tZXJnZV9jZWxscyIp'@;
put 'LGZ1bmN0aW9uIFg1dChjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gSjV0KGMpe3ZhciBsPWZ1bmN0aW9uIFE1dChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8'@;
put 'fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0'@;
put 'dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9KHRoaXMsImNlbGxSYW5nZSIsdm9pZCAwKSx0aGlzLmNlbGxSYW5n'@;
put 'ZT1hfXN0YXRpYyBzdGFydFJlZ2lzdGVyaW5nRXZlbnRzKGwsYSl7bC5hZGRIb29rKCJhZnRlclVubWVyZ2VDZWxscyIsKGQsaCk9PntofHxhLmRvbmUoKCk9Pm5ldyBSZWUoe2NlbGxSYW5nZTpkfSkpfSl9dW5kbyhsLGEpe2NvbnN0IGQ9bC5nZXRQbHVnaW4oIm1lcmdlQ2VsbHMiKTtsLmFk'@;
put 'ZEhvb2tPbmNlKCJhZnRlclZpZXdSZW5kZXIiLGEpLGQubWVyZ2VSYW5nZSh0aGlzLmNlbGxSYW5nZSwhMCl9cmVkbyhsLGEpe2NvbnN0IGQ9bC5nZXRQbHVnaW4oIm1lcmdlQ2VsbHMiKTtsLmFkZEhvb2tPbmNlKCJhZnRlclZpZXdSZW5kZXIiLGEpLGQudW5tZXJnZVJhbmdlKHRoaXMuY2Vs'@;
put 'bFJhbmdlLCEwKSxsLnJlbmRlcigpfX1mdW5jdGlvbiBMZWUoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIHJtdChjKXt2YXIgbD1mdW5jdGlvbiBpbXQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAh'@;
put 'PT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJl'@;
put 'cikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWZ1bmN0aW9uIE9lZShjLGws'@;
put 'YSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9U2EuZ2V0U2luZ2xldG9uKCkucmVnaXN0'@;
put 'ZXIoImJlZm9yZVVuZG8iKSxTYS5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYWZ0ZXJVbmRvIiksU2EuZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImJlZm9yZVJlZG8iKSxTYS5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYWZ0ZXJSZWRvIik7Y29uc3QgeTZlPW5ldyBTZXQ7dmFyIHROPW5l'@;
put 'dyBXZWFrU2V0O2NsYXNzIHNtdCBleHRlbmRzIEZze3N0YXRpYyBnZXQgUExVR0lOX0tFWSgpe3JldHVybiJ1bmRvUmVkbyJ9c3RhdGljIGdldCBQTFVHSU5fUFJJT1JJVFkoKXtyZXR1cm4gMWUzfXN0YXRpYyBnZXQgU0VUVElOR19LRVlTKCl7cmV0dXJuITB9Y29uc3RydWN0b3IobCl7c3Vw'@;
put 'ZXIobCksZnVuY3Rpb24gdG10KGMsbCl7KGZ1bmN0aW9uIG5tdChjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9KShjLGwpLGwuYWRkKGMpfSh0aGlzLHRO'@;
put 'KSxMZWUodGhpcywiZG9uZUFjdGlvbnMiLFtdKSxMZWUodGhpcywidW5kb25lQWN0aW9ucyIsW10pLExlZSh0aGlzLCJpZ25vcmVOZXdBY3Rpb25zIiwhMSksZnVuY3Rpb24gZW10KGMsbCl7W3dlZSxDZWUsU2VlLE1lZSx4ZWUsRWVlLFRlZSxBZWUsa2VlLERlZSxJZWUsUmVlXS5mb3JFYWNo'@;
put 'KGE9PmEuc3RhcnRSZWdpc3RlcmluZ0V2ZW50cyhjLGwpKX0obCx0aGlzKX1pc0VuYWJsZWQoKXtyZXR1cm4hIXRoaXMuaG90LmdldFNldHRpbmdzKCkudW5kb31lbmFibGVQbHVnaW4oKXt2YXIgbD10aGlzO3RoaXMuZW5hYmxlZHx8KHRoaXMuYWRkSG9vaygiYWZ0ZXJDaGFuZ2UiLGZ1bmN0'@;
put 'aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIE9lZSh0TixsLGxtdCkuY2FsbChsLC4uLmQpfSksdGhpcy5yZWdpc3RlclNob3J0Y3V0cygpLE9lZSh0Tix0aGlzLGNtdCkuY2FsbCh0aGlz'@;
put 'KSxzdXBlci5lbmFibGVQbHVnaW4oKSl9ZGlzYWJsZVBsdWdpbigpe3N1cGVyLmRpc2FibGVQbHVnaW4oKSx0aGlzLmNsZWFyKCksdGhpcy51bnJlZ2lzdGVyU2hvcnRjdXRzKCksT2VlKHROLHRoaXMsdW10KS5jYWxsKHRoaXMpfXJlZ2lzdGVyU2hvcnRjdXRzKCl7dGhpcy5ob3QuZ2V0U2hv'@;
put 'cnRjdXRNYW5hZ2VyKCkuZ2V0Q29udGV4dCgiZ3JpZCIpLmFkZFNob3J0Y3V0cyhbe2tleXM6W1siQ29udHJvbC9NZXRhIiwieiJdXSxjYWxsYmFjazooKT0+e3RoaXMudW5kbygpfX0se2tleXM6W1siQ29udHJvbC9NZXRhIiwieSJdLFsiQ29udHJvbC9NZXRhIiwiU2hpZnQiLCJ6Il1dLGNh'@;
put 'bGxiYWNrOigpPT57dGhpcy5yZWRvKCl9fV0se3J1bk9ubHlJZjpmPT4hZi5hbHRLZXksZ3JvdXA6InVuZG9SZWRvIn0pfXVucmVnaXN0ZXJTaG9ydGN1dHMoKXt0aGlzLmhvdC5nZXRTaG9ydGN1dE1hbmFnZXIoKS5nZXRDb250ZXh0KCJncmlkIikucmVtb3ZlU2hvcnRjdXRzQnlHcm91cCgi'@;
put 'dW5kb1JlZG8iKX1kb25lKGwsYSl7aWYodGhpcy5pZ25vcmVOZXdBY3Rpb25zfHwiVW5kb1JlZG8udW5kbyI9PT1hfHwiVW5kb1JlZG8ucmVkbyI9PT1hfHwiYXV0byI9PT1hKXJldHVybjtjb25zdCBoPXRoaXMuZG9uZUFjdGlvbnMuc2xpY2UoKTtpZighMT09PXRoaXMuaG90LnJ1bkhvb2tz'@;
put 'KCJiZWZvcmVVbmRvU3RhY2tDaGFuZ2UiLGgsYSkpcmV0dXJuO2NvbnN0IHY9bCgpLE09dGhpcy51bmRvbmVBY3Rpb25zLnNsaWNlKCk7dGhpcy5kb25lQWN0aW9ucy5wdXNoKHYpLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlclVuZG9TdGFja0NoYW5nZSIsaCx0aGlzLmRvbmVBY3Rpb25zLnNs'@;
put 'aWNlKCkpLHRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVSZWRvU3RhY2tDaGFuZ2UiLE0pLHRoaXMudW5kb25lQWN0aW9ucy5sZW5ndGg9MCx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJSZWRvU3RhY2tDaGFuZ2UiLE0sdGhpcy51bmRvbmVBY3Rpb25zLnNsaWNlKCkpfXVuZG8oKXtpZighdGhp'@;
put 'cy5pc1VuZG9BdmFpbGFibGUoKSlyZXR1cm47Y29uc3QgbD10aGlzLmRvbmVBY3Rpb25zLnNsaWNlKCk7dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZVVuZG9TdGFja0NoYW5nZSIsbCk7Y29uc3QgYT10aGlzLmRvbmVBY3Rpb25zLnBvcCgpO3RoaXMuaG90LnJ1bkhvb2tzKCJhZnRlclVuZG9T'@;
put 'dGFja0NoYW5nZSIsbCx0aGlzLmRvbmVBY3Rpb25zLnNsaWNlKCkpO2NvbnN0IGQ9ZzEoYSk7aWYoITE9PT10aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlVW5kbyIsZCkpcmV0dXJuO3RoaXMuaWdub3JlTmV3QWN0aW9ucz0hMDtjb25zdCBmPXRoaXMudW5kb25lQWN0aW9ucy5zbGljZSgpO3Ro'@;
put 'aXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVSZWRvU3RhY2tDaGFuZ2UiLGYpLGEudW5kbyh0aGlzLmhvdCwoKT0+e3RoaXMuaWdub3JlTmV3QWN0aW9ucz0hMSx0aGlzLnVuZG9uZUFjdGlvbnMucHVzaChhKX0pLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlclJlZG9TdGFja0NoYW5nZSIsZix0aGlz'@;
put 'LnVuZG9uZUFjdGlvbnMuc2xpY2UoKSksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyVW5kbyIsZCl9cmVkbygpe2lmKCF0aGlzLmlzUmVkb0F2YWlsYWJsZSgpKXJldHVybjtjb25zdCBsPXRoaXMudW5kb25lQWN0aW9ucy5zbGljZSgpO3RoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVSZWRvU3Rh'@;
put 'Y2tDaGFuZ2UiLGwpO2NvbnN0IGE9dGhpcy51bmRvbmVBY3Rpb25zLnBvcCgpO3RoaXMuaG90LnJ1bkhvb2tzKCJhZnRlclJlZG9TdGFja0NoYW5nZSIsbCx0aGlzLnVuZG9uZUFjdGlvbnMuc2xpY2UoKSk7Y29uc3QgZD1nMShhKTtpZighMT09PXRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVS'@;
put 'ZWRvIixkKSlyZXR1cm47dGhpcy5pZ25vcmVOZXdBY3Rpb25zPSEwO2NvbnN0IGY9dGhpcy5kb25lQWN0aW9ucy5zbGljZSgpO3RoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVVbmRvU3RhY2tDaGFuZ2UiLGYpLGEucmVkbyh0aGlzLmhvdCwoKT0+e3RoaXMuaWdub3JlTmV3QWN0aW9ucz0hMSx0'@;
put 'aGlzLmRvbmVBY3Rpb25zLnB1c2goYSl9KSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJVbmRvU3RhY2tDaGFuZ2UiLGYsdGhpcy5kb25lQWN0aW9ucy5zbGljZSgpKSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJSZWRvIixkKX1pc1VuZG9BdmFpbGFibGUoKXtyZXR1cm4gdGhpcy5kb25lQWN0'@;
put 'aW9ucy5sZW5ndGg+MH1pc1JlZG9BdmFpbGFibGUoKXtyZXR1cm4gdGhpcy51bmRvbmVBY3Rpb25zLmxlbmd0aD4wfWNsZWFyKCl7dGhpcy5kb25lQWN0aW9ucy5sZW5ndGg9MCx0aGlzLnVuZG9uZUFjdGlvbnMubGVuZ3RoPTB9ZGVzdHJveSgpe3RoaXMuY2xlYXIoKSx0aGlzLmRvbmVBY3Rp'@;
put 'b25zPW51bGwsdGhpcy51bmRvbmVBY3Rpb25zPW51bGwsc3VwZXIuZGVzdHJveSgpfX1mdW5jdGlvbiBsbXQoYyxsKXsibG9hZERhdGEiPT09bCYmdGhpcy5jbGVhcigpfWZ1bmN0aW9uIGNtdCgpe2NvbnN0IGM9bD0+e3k2ZS5oYXMobCl8fChpbChnbGBUaGUgIiR7bH0iIG1ldGhvZCBpcyBk'@;
put 'ZXByZWNhdGVkIGFuZCBpdCB3aWxsIGJlIHJlbW92ZWRceDIwCiAgICAgICAgICBmcm9tIHRoZSBDb3JlIEFQSSBpbiB0aGUgZnV0dXJlLiBQbGVhc2UgdXNlIHRoZSBtZXRob2QgZnJvbSB0aGUgVW5kb1JlZG8gcGx1Z2luXHgyMAogICAgICAgICAgKGUuZy4gXGBob3RJbnN0YW5jZS5nZXRQ'@;
put 'bHVnaW4oInVuZG9SZWRvIikuJHtsfSgpXGApLmApLHk2ZS5hZGQobCkpfTt0aGlzLmhvdC51bmRvPSgpPT57YygidW5kbyIpLHRoaXMudW5kbygpfSx0aGlzLmhvdC5yZWRvPSgpPT57YygicmVkbyIpLHRoaXMucmVkbygpfSx0aGlzLmhvdC5pc1VuZG9BdmFpbGFibGU9KCk9PihjKCJpc1Vu'@;
put 'ZG9BdmFpbGFibGUiKSx0aGlzLmlzVW5kb0F2YWlsYWJsZSgpKSx0aGlzLmhvdC5pc1JlZG9BdmFpbGFibGU9KCk9PihjKCJpc1JlZG9BdmFpbGFibGUiKSx0aGlzLmlzUmVkb0F2YWlsYWJsZSgpKSx0aGlzLmhvdC5jbGVhclVuZG89KCk9PntjKCJjbGVhciIpLHRoaXMuY2xlYXIoKX0sdGhp'@;
put 'cy5ob3QudW5kb1JlZG89dGhpc31mdW5jdGlvbiB1bXQoKXtkZWxldGUgdGhpcy5ob3QudW5kbyxkZWxldGUgdGhpcy5ob3QucmVkbyxkZWxldGUgdGhpcy5ob3QuaXNVbmRvQXZhaWxhYmxlLGRlbGV0ZSB0aGlzLmhvdC5pc1JlZG9BdmFpbGFibGUsZGVsZXRlIHRoaXMuaG90LmNsZWFyVW5k'@;
put 'byxkZWxldGUgdGhpcy5ob3QudW5kb1JlZG99ZnVuY3Rpb24gbk4oKXsoZnVuY3Rpb24gT2F0KCl7SGQoa18pLEhkKEhYKSxIZChCcGUpLEhkKCRwZSksSGQoS3BlKSxIZChSWCksSGQocXBlKSxIZChYcGUpLEhkKFFwZSksSGQoYTkpLEhkKGU0ZSl9KSgpLGZ1bmN0aW9uIHJzdCgpe0loKElf'@;
put 'KSxJaChvVCksSWgoJFgpLEloKEdYKSxJaChxWCksSWgoWVgpLEloKGFKKSxJaChvSiksSWgoc0opLEloKEFnKSxJaChsSil9KCksZnVuY3Rpb24gZHN0KCl7WTcoY1QpLFk3KGNKKSxZNyhLUCksWTcodUopLFk3KHFQKX0oKSxmdW5jdGlvbiBDc3QoKXtHMihoc3QpLEcyKGZzdCksRzIoZ3N0'@;
put 'KSxHMihtc3QpLEcyKHZzdCksRzIoYnN0KSxHMih5c3QpLEcyKF9zdCksRzIoSXBlKSxHMih3c3QpfSgpLGZ1bmN0aW9uIGRtdCgpe1BzKGRUKSxQcyh0bHQpLFBzKHBUKSxQcyhPbHQpLFBzKHpsdCksUHMoYWdlKSxQcyhOY3QpLFBzKHV1dCksUHMoREYpLFBzKEkwdCksUHMocjF0KSxQcyhk'@;
put 'MXQpLFBzKE5GKSxQcyhxMXQpLFBzKCRodCksUHMoazJ0KSxQcyhuZnQpLFBzKHBmdCksUHMoRWZ0KSxQcyhCZnQpLFBzKHFmdCksUHModjN0KSxQcyhFM3QpLFBzKHVwdCksUHMoenB0KSxQcyhHcHQpLFBzKF80dCksUHModWd0KSxQcyhPZ3QpLFBzKFVndCksUHMocjV0KSxQcyhoNXQpLFBz'@;
put 'KFM1dCksUHMoc210KX0oKX1sZXQgbmY9KCgpPT57Y2xhc3MgY3tzdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1bW9kPWtpKHt0eXBlOmN9KX1zdGF0aWN7dGhpcy5cdTAyNzVpbmo9QXIoe2ltcG9ydHM6W1JhXX0p'@;
put 'fX1yZXR1cm4gY30pKCksQ3c9KCgpPT57Y2xhc3MgY3tuZ09uSW5pdCgpe31zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1bW9kPWtpKHt0eXBlOmN9KX1zdGF0aWN7dGhpcy5cdTAyNzVpbmo9QXIoe3Byb3ZpZGVy'@;
put 'czpbX1csZGhlXSxpbXBvcnRzOltSYSxSYyx6Yyx6MCxuZl19KX19cmV0dXJuIGN9KSgpLE1BPSgoKT0+e2NsYXNzIGN7c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NW1vZD1raSh7dHlwZTpjfSl9c3RhdGlje3Ro'@;
put 'aXMuXHUwMjc1aW5qPUFyKHtpbXBvcnRzOltSYV19KX19cmV0dXJuIGN9KSgpLF82ZT0oKCk9PntjbGFzcyBje3N0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVtb2Q9a2koe3R5cGU6Y30pfXN0YXRpY3t0aGlzLlx1'@;
put 'MDI3NWluaj1Bcih7aW1wb3J0czpbUmEsejAsUmEsUmNdfSl9fXJldHVybiBjfSkoKSxHOT0oKCk9PntjbGFzcyBje3N0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVtb2Q9a2koe3R5cGU6Y30pfXN0YXRpY3t0aGlz'@;
put 'Llx1MDI3NWluaj1Bcih7aW1wb3J0czpbUmEsUmMsejAsemMsQ3csTUEsbmYsXzZlXX0pfX1yZXR1cm4gY30pKCk7Y2xhc3MgUGVle2NvbnN0cnVjdG9yKCl7dGhpcy5xdWV1ZT1bXX1hZGRUb1F1ZXVlKGwpe3RoaXMucXVldWUucHVzaCguLi5sKX19dmFyIEZlZSxIZWUsTmVlLFZlZSxCZWU7'@;
put 'bk4oKSxmdW5jdGlvbiBobXQoYyl7Y29uc3QgbD0hKHR5cGVvZiB3aW5kb3c+InUiKSYmd2luZG93LmpRdWVyeTtsJiYobC5mbi5oYW5kc29udGFibGU9ZnVuY3Rpb24oYSl7Y29uc3QgZD10aGlzLmZpcnN0KCk7bGV0IGYsaD1kLmRhdGEoImhhbmRzb250YWJsZSIpO2lmKCJzdHJpbmciIT10'@;
put 'eXBlb2YgYSl7Y29uc3QgWj1hfHx7fTtyZXR1cm4gaD9oLnVwZGF0ZVNldHRpbmdzKFopOihoPW5ldyBjLkNvcmUoZFswXSxaKSxkLmRhdGEoImhhbmRzb250YWJsZSIsaCksaC5pbml0KCkpLGR9aWYoaCl7aWYoISh0eXBlb2YgaFthXTwidSIpKXRocm93IG5ldyBFcnJvcihgSGFuZHNvbnRh'@;
put 'YmxlIGRvIG5vdCBwcm92aWRlIGFjdGlvbjogJHthfWApO2Zvcih2YXIgdj1hcmd1bWVudHMubGVuZ3RoLE09bmV3IEFycmF5KHY+MT92LTE6MCksRD0xO0Q8djtEKyspTVtELTFdPWFyZ3VtZW50c1tEXTtmPWhbYV0uY2FsbChoLC4uLk0pLCJkZXN0cm95Ij09PWEmJmQucmVtb3ZlRGF0YSgp'@;
put 'fXJldHVybiBmfSl9KG9zKSxvcy5fX0dob3N0VGFibGU9ZEosb3MuX2dldExpc3RlbmVyc0NvdW50ZXI9ZnVuY3Rpb24gQlhlKCl7cmV0dXJuIFlPfSxvcy5fZ2V0UmVnaXN0ZXJlZE1hcHNDb3VudGVyPWZ1bmN0aW9uIFp0dCgpe3JldHVybiB6S30sb3MuRXZlbnRNYW5hZ2VyPWoyO2NvbnN0'@;
put 'IGZtdD1bSSxPLFUsWSxGLHcsXyxLLFAsZyx6LExdLHBtdD1bQixOXTtvcy5oZWxwZXI9e30sb3MuZG9tPXt9LFluKGZtdCxjPT57WW4oT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoYyksbD0+eyJfIiE9PWwuY2hhckF0KDApJiYob3MuaGVscGVyW2xdPWNbbF0pfSl9KSxZbihwbXQsYz0+'@;
put 'e1luKE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGMpLGw9PnsiXyIhPT1sLmNoYXJBdCgwKSYmKG9zLmRvbVtsXT1jW2xdKX0pfSksb3MuY2VsbFR5cGVzPW51bGwhPT0oRmVlPW9zLmNlbGxUeXBlcykmJnZvaWQgMCE9PUZlZT9GZWU6e30sWW4oUW50KCksYz0+e29zLmNlbGxUeXBlc1tj'@;
put 'XT1NWChjKX0pLG9zLmNlbGxUeXBlcy5yZWdpc3RlckNlbGxUeXBlPUcyLG9zLmNlbGxUeXBlcy5nZXRDZWxsVHlwZT1NWCxvcy5lZGl0b3JzPW51bGwhPT0oSGVlPW9zLmVkaXRvcnMpJiZ2b2lkIDAhPT1IZWU/SGVlOnt9LFluKExYZSgpLGM9Pntvcy5lZGl0b3JzW2Ake3AxKGMpfUVkaXRv'@;
put 'cmBdPVdPKGMpfSksb3MuZWRpdG9ycy5yZWdpc3RlckVkaXRvcj1IZCxvcy5lZGl0b3JzLmdldEVkaXRvcj1XTyxvcy5yZW5kZXJlcnM9bnVsbCE9PShOZWU9b3MucmVuZGVyZXJzKSYmdm9pZCAwIT09TmVlP05lZTp7fSxZbihkSmUoKSxjPT57Y29uc3QgbD1RTyhjKTsiYmFzZSI9PT1jJiYo'@;
put 'b3MucmVuZGVyZXJzLmNlbGxEZWNvcmF0b3I9bCksb3MucmVuZGVyZXJzW2Ake3AxKGMpfVJlbmRlcmVyYF09bH0pLG9zLnJlbmRlcmVycy5yZWdpc3RlclJlbmRlcmVyPUloLG9zLnJlbmRlcmVycy5nZXRSZW5kZXJlcj1RTyxvcy52YWxpZGF0b3JzPW51bGwhPT0oVmVlPW9zLnZhbGlkYXRv'@;
put 'cnMpJiZ2b2lkIDAhPT1WZWU/VmVlOnt9LFluKHBKZSgpLGM9Pntvcy52YWxpZGF0b3JzW2Ake3AxKGMpfVZhbGlkYXRvcmBdPXJLKGMpfSksb3MudmFsaWRhdG9ycy5yZWdpc3RlclZhbGlkYXRvcj1ZNyxvcy52YWxpZGF0b3JzLmdldFZhbGlkYXRvcj1ySyxvcy5wbHVnaW5zPW51bGwhPT0o'@;
put 'QmVlPW9zLnBsdWdpbnMpJiZ2b2lkIDAhPT1CZWU/QmVlOnt9LFluKG5LKCksYz0+e29zLnBsdWdpbnNbY109SUUoYyl9KSxvcy5wbHVnaW5zW2Ake3AxKEZzLlBMVUdJTl9LRVkpfVBsdWdpbmBdPUZzLG9zLnBsdWdpbnMucmVnaXN0ZXJQbHVnaW49UHMsb3MucGx1Z2lucy5nZXRQbHVnaW49'@;
put 'SUU7Y29uc3QgamVlPW9zLHplZT0oYyxsLGEpPT57Zm9yKGxldCBkIG9mIGMpe2NvbnN0IGg9bC5maW5kKHY9PnYuZGF0YT09PWQuTkFNRSksZj1hLnZhcnNbZC5OQU1FXTtmJiYoZC5UWVBFPVsiREFURSIsIkRBVEVUSU1FIiwiVElNRSJdLmluY2x1ZGVzKGQuRERUWVBFKT8ibnVtIjpmLnR5'@;
put 'cGUpLGgmJmQuREVTQyYmKGguZGVzYz1kLkRFU0MpLGgmJmYubGVuZ3RoJiYoaC5sZW5ndGg9cGFyc2VJbnQoZi5sZW5ndGgpKSxoJiZkLkNMU19SVUxFJiYoaC5jbHNSdWxlPWQuQ0xTX1JVTEUpfXJldHVybiBsfTtmdW5jdGlvbiBVZWUoYyxsKXtpZihudWxsPT1jfHwhaXNOYU4oYykmJmlz'@;
put 'RmluaXRlKGMpKXJldHVybiBsJiZsKCEwKSwhMDtjb25zdCBhPSgwLGdnLmlzU3BlY2lhbE1pc3NpbmcpKGMpO3JldHVybiBsJiZsKGEpLGF9Y29uc3QgdzZlPXtDQVNFOihjLGwpPT57c3dpdGNoKGwpe2Nhc2UiVVBDQVNFIjpyZXR1cm4hIVt2b2lkIDAsbnVsbF0uaW5jbHVkZXMoYyl8fCJz'@;
put 'dHJpbmciPT10eXBlb2YgYyYmYy50b1N0cmluZygpPT09Yy50b1N0cmluZygpLnRvVXBwZXJDYXNlKCk7Y2FzZSJMT1dDQVNFIjpyZXR1cm4hIVt2b2lkIDAsbnVsbF0uaW5jbHVkZXMoYyl8fCJzdHJpbmciPT10eXBlb2YgYyYmYy50b1N0cmluZygpPT09Yy50b1N0cmluZygpLnRvTG93ZXJD'@;
put 'YXNlKCl9cmV0dXJuITB9LE1JTlZBTDooYyxsKT0+e2NvbnN0IGE9VWVlKGMpLGQ9cGFyc2VGbG9hdChjKTtyZXR1cm4oIWF8fCFpc05hTihkKSkmJmQ+PU51bWJlcihsLnRvU3RyaW5nKCkpfSxNQVhWQUw6KGMsbCk9Pntjb25zdCBhPVVlZShjKSxkPXBhcnNlRmxvYXQoYyk7cmV0dXJuISgh'@;
put 'YXx8IWlzTmFOKGQpKXx8ZDw9TnVtYmVyKGwudG9TdHJpbmcoKSl9LE5PVE5VTEw6KGMsbCk9Pm51bGwhPWMmJmMudG9TdHJpbmcoKS5sZW5ndGg+MH07dmFyIFplZT15KDc4Mzc1KTtjbGFzcyB5bXQgZXh0ZW5kcyBqZWUuZWRpdG9ycy5BdXRvY29tcGxldGVFZGl0b3J7Y29uc3RydWN0b3Io'@;
put 'bCl7c3VwZXIobCl9Y3JlYXRlRWxlbWVudHMoKXtzdXBlci5jcmVhdGVFbGVtZW50cygpfW9wZW4obCl7c3VwZXIub3BlbihsKSx0aGlzLmlzQ2VsbE51bWVyaWMoKT90aGlzLmh0Q29udGFpbmVyLmNsYXNzTGlzdC5hZGQoIm51bWVyaWNMaXN0Ym94Iik6dGhpcy5odENvbnRhaW5lci5jbGFz'@;
put 'c0xpc3QucmVtb3ZlKCJudW1lcmljTGlzdGJveCIpfWlzQ2VsbE51bWVyaWMoKXtyZXR1cm4gdGhpcy5jZWxsUHJvcGVydGllcz8uY2xhc3NOYW1lPy5pbmNsdWRlcygiaHROdW1lcmljIil9fWNsYXNzIEM2ZXtjb25zdHJ1Y3RvcihsLGEsZCxoLGYsdil7dGhpcy5ydWxlcz1bXSx0aGlzLmRx'@;
put 'cnVsZXM9W10sdGhpcy5kcWRhdGE9W10sdGhpcy5oaWRkZW5Db2x1bW5zPVtdLHRoaXMucHJpbWFyeUtleXM9W10sdGhpcy5leGVjdXRlSG90VmFsaWRhdG9yPShNLEQsWik9Pntjb25zdCByZT17Li4uTSx2YWxpZGF0b3I6dm9pZCAwLGNvcnJlY3RGb3JtYXQ6ITEscm93OjAsY29sOjAsaW5z'@;
put 'dGFuY2U6bmV3IGplZShkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSx7fSksdmlzdWFsUm93OjAsdmlzdWFsQ29sOjAscHJvcDowfTtudWxsPT1EJiYoRD0iIiksTSYmTS52YWxpZGF0b3ImJiJmdW5jdGlvbiI9PXR5cGVvZiBNLnZhbGlkYXRvcj9NLnZhbGlkYXRvci5jYWxsKHJlLEQs'@;
put 'Y2U9PntaJiZaKGNlKX0pOlomJlooITEpfSx0aGlzLnJlZ2lzdGVyQ3VzdG9tRWRpdG9ycygpLHRoaXMuc2FzcGFyYW1zPWwsdGhpcy5ob3RJbnN0YW5jZT12LHRoaXMucnVsZXM9KGM9Pnt0cnl7cmV0dXJuIEpTT04ucGFyc2UoYFske2N9XWApfWNhdGNoe3JldHVybltdfX0pKGwuQ09MVFlQ'@;
put 'RSksdGhpcy5ydWxlcz16ZWUoZCx0aGlzLnJ1bGVzLGEpLHRoaXMucnVsZXM9KGM9PntpZighWmVlW3dpbmRvdy5uYXZpZ2F0b3IubGFuZ3VhZ2VdKXJldHVybiBjO2ZvcihsZXQgYSBvZiBjKSJudW1lcmljIj09PWEudHlwZSYmKGEubnVtZXJpY0Zvcm1hdD17cGF0dGVybjoiMCwwIixjdWx0'@;
put 'dXJlOndpbmRvdy5uYXZpZ2F0b3IubGFuZ3VhZ2V9KTtyZXR1cm4gY30pKHRoaXMucnVsZXMpLHRoaXMuZHFydWxlcz1oLHRoaXMuZHFkYXRhPWYsdGhpcy5wcmltYXJ5S2V5cz1sLlBLLnNwbGl0KCIgIiksdGhpcy51cGRhdGVEcURhdGEoKSx0aGlzLnNldHVwVmFsaWRhdGlvbnMoKX1yZWdp'@;
put 'c3RlckN1c3RvbUVkaXRvcnMoKXtqZWUuZWRpdG9ycy5yZWdpc3RlckVkaXRvcigiYXV0b2NvbXBsZXRlLmN1c3RvbSIseW10KX1nZXRSdWxlcygpe3JldHVybiB0aGlzLnJ1bGVzfWdldFJ1bGUobCl7Y29uc3QgYT10aGlzLmdldFJ1bGVJbmRleChsKTtyZXR1cm4gdGhpcy5ydWxlc1thXX1n'@;
put 'ZXRIaWRkZW5Db2x1bW5zKCl7cmV0dXJuIHRoaXMuaGlkZGVuQ29sdW1uc311cGRhdGVSdWxlKGwsYSl7bGV0IGQ9dGhpcy5nZXRSdWxlSW5kZXgobCk7dGhpcy5ydWxlc1tkXT17Li4udGhpcy5ydWxlc1tkXSwuLi5hfX1yZW1vdmVSdWxlKGwpe2NvbnN0IGE9dGhpcy5nZXRSdWxlSW5kZXgo'@;
put 'bCk7dGhpcy5ydWxlcy5zcGxpY2UoYSwxKX1nZXREcURldGFpbHMobCl7cmV0dXJuIGw/dGhpcy5kcXJ1bGVzLmZpbHRlcihhPT5hLkJBU0VfQ09MPT09bCk6dGhpcy5kcXJ1bGVzfWlzRHFDb2wobCl7cmV0dXJuISF0aGlzLmRxcnVsZXMuZmluZChhPT5hLkJBU0VfQ09MPT09bCl9aGFzRHFS'@;
put 'dWxlcyhsLGEsZD0hMSl7cmV0dXJuIGQ/dGhpcy5kcXJ1bGVzLmZpbHRlcihoPT5oLkJBU0VfQ09MPT09bCYmYS5pbmNsdWRlcyhoLlJVTEVfVFlQRSkpLmxlbmd0aD09PWEubGVuZ3RoOiEhdGhpcy5kcXJ1bGVzLmZpbmQoaD0+aC5CQVNFX0NPTD09PWwmJmEuaW5jbHVkZXMoaC5SVUxFX1RZ'@;
put 'UEUpKX1nZXREcURyb3Bkb3duU291cmNlKGwpe2xldCBhPVtdO3JldHVybiB0aGlzLmRxcnVsZXMuZm9yRWFjaChkPT57ZC5CQVNFX0NPTC50b1N0cmluZygpPT09bC5kYXRhJiZsLmRhdGEudG9TdHJpbmcoKSYmWyJIQVJEU0VMRUNUIiwiU09GVFNFTEVDVCIsIkhBUkRTRUxFQ1RfSE9PSyIs'@;
put 'IlNPRlRTRUxFQ1RfSE9PSyJdLmluY2x1ZGVzKGQuUlVMRV9UWVBFLnRvU3RyaW5nKCkpJiZ0aGlzLmRxZGF0YS5maWx0ZXIoaD0+aC5CQVNFX0NPTD09PWQuQkFTRV9DT0wpLmZvckVhY2goaD0+e2EucHVzaChsLnR5cGUmJiJudW1lcmljIj09PWwudHlwZT9OdW1iZXIoaC5SVUxFX0RBVEEp'@;
put 'OmguUlVMRV9EQVRBKX0pfSksYX11cGRhdGVEcURhdGEoKXt0aGlzLmRxZGF0YS5sZW5ndGg+MCYmKGM9Pntjb25zdCBsPVtdO3JldHVybiB0aGlzLmRxZGF0YS5mb3JFYWNoKGE9PntsLmluY2x1ZGVzKGEuQkFTRV9DT0wpfHxsLnB1c2goYS5CQVNFX0NPTCl9KSxsfSkoKS5mb3JFYWNoKGE9'@;
put 'PntsZXQgZD0hMTt0aGlzLmRxcnVsZXMubGVuZ3RoPjAmJnRoaXMuZHFydWxlcy5mb3JFYWNoKGg9PntoLkJBU0VfQ09MPT09YSYmKCJTT0ZUU0VMRUNUIj09PWguUlVMRV9UWVBFfHwiSEFSRFNFTEVDVCI9PT1oLlJVTEVfVFlQRSkmJihkPSEwKX0pLGR8fHRoaXMuZHFydWxlcy5wdXNoKHtC'@;
put 'QVNFX0NPTDphLFJVTEVfVFlQRToiU09GVFNFTEVDVCIsUlVMRV9WQUxVRTphLFg6MX0pfSl9c2V0dXBWYWxpZGF0aW9ucygpe2ZvcihsZXQgbD0wO2w8dGhpcy5ydWxlcy5sZW5ndGg7bCsrKXtjb25zdCBhPXRoaXMucnVsZXNbbF0uZGF0YXx8IiI7aWYoIl9fX19fREVMRVRFX19USElTX19S'@;
put 'RUNPUkRfX19fXyIhPT1hKXtpZih0aGlzLmlzRHFDb2woYSkpe2xldCBoPXRoaXMuZ2V0RHFEcm9wZG93blNvdXJjZSh0aGlzLnJ1bGVzW2xdKTtoLmxlbmd0aD4wJiYodGhpcy5ydWxlc1tsXS5zb3VyY2U9aCx0aGlzLnJ1bGVzW2xdLnR5cGU9ImF1dG9jb21wbGV0ZSIsdGhpcy5ydWxlc1ts'@;
put 'XS5lZGl0b3I9ImF1dG9jb21wbGV0ZS5jdXN0b20iLHRoaXMucnVsZXNbbF0uZmlsdGVyPSExKSx0aGlzLmhhc0RxUnVsZXMoYSxbIlNPRlRTRUxFQ1QiXSkmJih0aGlzLnJ1bGVzW2xdLnN0cmljdD0hMSksdGhpcy5oYXNEcVJ1bGVzKGEsWyJIQVJEU0VMRUNUIl0pJiYodGhpcy5ydWxlc1ts'@;
put 'XS5zdHJpY3Q9ITApLHRoaXMuaGFzRHFSdWxlcyhhLFsiU09GVFNFTEVDVF9IT09LIl0pJiYodGhpcy5ydWxlc1tsXS5zdHJpY3Q9ITEpLHRoaXMuaGFzRHFSdWxlcyhhLFsiSEFSRFNFTEVDVF9IT09LIl0pJiYodGhpcy5ydWxlc1tsXS5zdHJpY3Q9ITApLHRoaXMuaGFzRHFSdWxlcyhhLFsi'@;
put 'Tk9UTlVMTCJdKSYmKHRoaXMucnVsZXNbbF0uYWxsb3dFbXB0eT0hMSl9InRydWUiPT09dGhpcy5ydWxlc1tsXS5jb3JyZWN0Rm9ybWF0JiYodGhpcy5ydWxlc1tsXS5jb3JyZWN0Rm9ybWF0PSEwKSx0aGlzLnNldERlZmF1bHRWYWxpZGF0b3IodGhpcyxsKSx0aGlzLnNldENvbHVtbkxldmVs'@;
put 'U2VjdXJpdHkobCl9fXRoaXMuc2FzcGFyYW1zPy5DTFNfRkxBRyYmdGhpcy5oaWRkZW5Db2x1bW5zLnB1c2goMCl9c2V0RGVmYXVsdFZhbGlkYXRvcihsLGEpe3RoaXMucnVsZXNbYV0udmFsaWRhdG9yPWZ1bmN0aW9uKGQsaCl7Y29uc3QgZj1sLnJ1bGVzW2FdLmRhdGE/LnRvU3RyaW5nKCks'@;
put 'dj1sLnJ1bGVzW2FdLnR5cGV8fCIiO2xldCBNPW51bGw7cmV0dXJuImF1dG9jb21wbGV0ZSIhPT10aGlzLmVkaXRvciYmImF1dG9jb21wbGV0ZS5jdXN0b20iIT09dGhpcy5lZGl0b3J8fChsLmdldEhhbmRzb250YWJsZVZhbGlkYXRvcigiYXV0b2NvbXBsZXRlIikuY2FsbCh0aGlzLGQsRD0+'@;
put 'e009RH0pLE0pPyhsLmdldEhhbmRzb250YWJsZVZhbGlkYXRvcih2KS5jYWxsKHRoaXMsZCxEPT57TT1EfSksTT9sLmxlbmd0aENoZWNrKGQsbC5ydWxlc1thXS5sZW5ndGgsdik/bC5pc0RxQ29sKGZ8fCIiKSYmISgoYyxsKT0+e2ZvcihsZXQgYSBvZiBjKWlmKHc2ZVthLlJVTEVfVFlQRV0m'@;
put 'JiF3NmVbYS5SVUxFX1RZUEVdKGwsYS5SVUxFX1ZBTFVFKSlyZXR1cm4gY29uc29sZS53YXJuKGBEUSBJbnZhbGlkIFJlYXNvbjogJHthLlJVTEVfVFlQRX1cblZhbHVlOiAke2x9KVxuUnVsZSBWYWx1ZTogJHthLlJVTEVfVkFMVUUubGVuZ3RoPjAmJiIgIiE9PWEuUlVMRV9WQUxVRT9hLlJV'@;
put 'TEVfVkFMVUU6Ik5vdCBkZWZpbmVkIn1gKSwhMTtyZXR1cm4hMH0pKGwuZ2V0RHFEZXRhaWxzKGZ8fCIiKSxkKT8oY29uc29sZS53YXJuKGBEUSBWYWxpZGF0aW9uIC0gaW52YWxpZCAoVmFsdWU6ICR7ZH0pYCksdm9pZCBoKCExKSk6dm9pZCBoKCEwKTooY29uc29sZS53YXJuKGBMZW5ndGgg'@;
put 'VmFsaWRhdGlvbiAtIGludmFsaWQgKFZhbHVlOiAke2R9KWApLHZvaWQgaCghMSkpOihjb25zb2xlLndhcm4oYEhPVCBOYXRpdmUgVmFsaWRhdGlvbiAtIGludmFsaWQgKFZhbHVlOiAke2R9KWApLHZvaWQgaCghMSkpKTooY29uc29sZS53YXJuKGBIT1QgTmF0aXZlIFZhbGlkYXRpb24gKGF1'@;
put 'dG9jb21wbGV0ZSkgLSBpbnZhbGlkIChWYWx1ZTogJHtkfSlgKSx2b2lkIGgoITEpKX19bGVuZ3RoQ2hlY2sobCxhLGQpe2lmKCgwLGdnLmlzU3BlY2lhbE1pc3NpbmcpKGwpfHxudWxsPT1sfHxudWxsPT1hKXJldHVybiEwO2lmKCJudW1lcmljIj09PWQpe2lmKDg9PT1hKXJldHVybiEwO2lm'@;
put 'KGE8M3x8YT44fHwhTnVtYmVyLmlzSW50ZWdlcihhKSlyZXR1cm4gY29uc29sZS53YXJuKCJpbnZhbGlkIGxlbmd0aCBmcm9tIFNBUywgcnVsZSBsZW5ndGggY2FuIG9ubHkgYmUgYW4gaW50ZWdlciBiZXR3ZWVuIDMtOCIpLCExO2NvbnN0IGg9TnVtYmVyKGwpPT09bCYmbCUxIT0wO2lmKGE8'@;
put 'OCYmaClyZXR1cm4gY29uc29sZS53YXJuKCJyZWR1Y2VkIGxlbmd0aCBudW1lcmljcyBjYW5ub3QgY29udGFpbiBkZWNpbWFscyBlbHNlIHByZWNpc2lvbiB3aWxsIGJlIGFmZmVjdGVkIiksITE7c3dpdGNoKGEpe2Nhc2UgMzpyZXR1cm4gbDw9ODE5MjtjYXNlIDQ6cmV0dXJuIGw8PTIwOTcx'@;
put 'NTI7Y2FzZSA1OnJldHVybiBsPD01MzY4NzA5MTI7Y2FzZSA2OnJldHVybiBsPD0xMzc0Mzg5NTM0NzI7Y2FzZSA3OnJldHVybiBsPD0zNTE4NDM3MjA4ODgzMn19cmV0dXJuIGwudG9TdHJpbmcoKS5sZW5ndGg8PWF9Z2V0SGFuZHNvbnRhYmxlVmFsaWRhdG9yKGwpe3N3aXRjaChsKXtjYXNl'@;
put 'ImF1dG9jb21wbGV0ZSI6cmV0dXJuIGNUO2Nhc2UibnVtZXJpYyI6cmV0dXJuIFVlZTtjYXNlImRhdGUiOnJldHVybiBLUDtjYXNlInRpbWUiOnJldHVybiBxUDtkZWZhdWx0OnJldHVybihhLGQpPT5kP2QoITApOm51bGx9fWdldFJ1bGVJbmRleChsKXtyZXR1cm4ibnVtYmVyIj09dHlwZW9m'@;
put 'IGw/bDp0aGlzLnJ1bGVzLmZpbmRJbmRleChhPT5hLmRhdGE9PT1sKX1zZXRDb2x1bW5MZXZlbFNlY3VyaXR5KGwpe2lmKCF0aGlzLnNhc3BhcmFtcz8uQ0xTX0ZMQUcpcmV0dXJuO2NvbnN0IGE9dGhpcy5ydWxlc1tsXTtpZih0aGlzLnByaW1hcnlLZXlzLmluY2x1ZGVzKGEuZGF0YSkmJihh'@;
put 'LmNsc1J1bGU9IlJFQUQiKSwiSElERSI9PT1hLmNsc1J1bGUmJnRoaXMuaGlkZGVuQ29sdW1ucy5wdXNoKGwpLCJSRUFEIj09PWEuY2xzUnVsZSYmKGEucmVhZE9ubHk9ITApLCJFRElUIj09PWEuY2xzUnVsZSl7YS5yZWFkT25seT0hMTtjb25zdCBkPXRoaXMuaGlkZGVuQ29sdW1ucy5pbmRl'@;
put 'eE9mKGwpO3RoaXMuaGlkZGVuQ29sdW1ucy5zcGxpY2UoZCwxKX19fWNvbnN0IHJOPXtudW1lcmljOiIiLGRlZmF1bHQ6IiJ9LF9tdD0oYyxsKT0+Yz8iYXV0b2NvbXBsZXRlIj09PWM/bCYmbC5zb3VyY2U/bC5zb3VyY2VbMF06W106ck4uaGFzT3duUHJvcGVydHkoYyk/ck5bY106ck4uZGVm'@;
put 'YXVsdDpyTi5kZWZhdWx0LFdlZT1jPT5uZXcgRGF0ZShNYXRoLnJvdW5kKDg2NDAwKihjLTI1NTY5KSoxZTMpKSxDbXQ9KGMsbCxhLGQsaCxmLHYpPT4oR2VlKGwpLGwuaW5uZXJIVE1MPWAke2Y/Zi50b1N0cmluZygpOiIifSA8Y2RzLWljb24gc2hhcGU9ImV4Y2xhbWF0aW9uLXRyaWFuZ2xl'@;
put 'IiBzdGF0dXM9Indhcm5pbmciPjwvY2RzLWljb24+YCxsKSxZZWU9KGMsbCxhLGQsaCxmLHYpPT4oR2VlKGwpLGwuaW5uZXJIVE1MPWZ8fCIiLGwpLFNtdD0oYyxsLGEsZCxoLGYsdik9PihHZWUobCksbC5pbm5lckhUTUw9YCR7Zj9mLnRvU3RyaW5nKCk6IiJ9IDxzcGFuIGNsYXNzPSJzcGlu'@;
put 'bmVyIHNwaW5uZXItc20gdmVydGljYWwtYWxpZ24tbWlkZGxlIj48L3NwYW4+YCxsKSxHZWU9Yz0+e2MuY2xhc3NMaXN0LmNvbnRhaW5zKCJodERhcmsiKXx8Yy5jbGFzc0xpc3QuYWRkKCJodERhcmsiKX0sUzZlPWM9PntsZXQgbD0oIjAiK2MuZ2V0VVRDSG91cnMoKSkuc2xpY2UoLTIpKyI6'@;
put 'IjtyZXR1cm4gbD1sKygiMCIrYy5nZXRVVENNaW51dGVzKCkpLnNsaWNlKC0yKSsiOiIsbCs9KCIwIitjLmdldFVUQ1NlY29uZHMoKSkuc2xpY2UoLTIpLGx9LCRlZT1jPT5jLmdldEZ1bGxZZWFyKCkrIi0iKygiMCIrKGMuZ2V0TW9udGgoKSsxKSkuc2xpY2UoLTIpKyItIisoIjAiK2MuZ2V0'@;
put 'RGF0ZSgpKS5zbGljZSgtMiksS2VlPWM9PiEhL14tezAsMX1cZCskLy50ZXN0KGMpLE02ZT1jPT4hIS9eXGQrXC5cZCskLy50ZXN0KGMpLHFlZT0oYyxsKT0+bmV3IEZpbGUoW2NdLGwse2xhc3RNb2RpZmllZDoobmV3IERhdGUpLmdldFRpbWUoKX0pO3ZhciBEdT15KDYzNTc4KSx4NmU9eSg5'@;
put 'NDI0OCksRTZlPXkoODM4MzgpO2NsYXNzIFQ2ZXtjb25zdHJ1Y3RvcihsKXt0aGlzLmxpY2VuY2VTdGF0ZT1sLmxpY2VuY2VTdGF0ZX1wYXJzZVNwcmVhZHNoZWV0RmlsZShsLGEsZCxoKXt2YXIgZj10aGlzO3JldHVybiBuZXcgUHJvbWlzZSgodixNKT0+e2NvbnN0IEQ9bC51cGxvYWRlcnx8'@;
put 'bmV3IFBlZTtpZihsLndvcmtib29rKXRoaXMucGFyc2VFeGNlbEZpbGUobCxsLndvcmtib29rLEQsaCkudGhlbihaPT57dihaKX0pLmNhdGNoKFo9PntNKFopfSk7ZWxzZXtjb25zdCByZT1sLmZpbGU7bC5lbmNvZGluZ3x8KGwuZW5jb2Rpbmc9IlVURi04IiksZCYmZChgTG9hZGluZyAke3Jl'@;
put 'Lm5hbWV9IGludG8gdGhlIGJyb3dzZXJgKTtsZXQgY2U9cmUubmFtZS5zbGljZShyZS5uYW1lLmxhc3RJbmRleE9mKCIuIikrMSxyZS5uYW1lLmxhc3RJbmRleE9mKCIuIikrNCk7aWYoInhscyIhPT1jZS50b0xvd2VyQ2FzZSgpKXtpZigiY3N2Ij09PWNlLnRvTG93ZXJDYXNlKCkpcmV0dXJu'@;
put 'IHRoaXMucGFyc2VDc3ZGaWxlKGwsRCxjZSkudGhlbihiZT0+dihiZSkpLmNhdGNoKGJlPT5NKGJlKSk7e2xldCBiZT0nSW52YWxpZCBmaWxlIHR5cGUgIjxiPicrbC5maWxlLm5hbWUrJzwvYj4iLiBQbGVhc2UgdXBsb2FkIGNzdiBvciBleGNlbCBmaWxlLic7cmV0dXJuIEQucXVldWUucG9w'@;
put 'KCksTShiZSl9fXtsZXQgYmU9bmV3IEZpbGVSZWFkZXI7YmUub25sb2FkPWZ1bmN0aW9uKCl7dmFyIEJlPWVlKGZ1bmN0aW9uKihxZSl7Y29uc3QgcnQ9eWllbGQgZi54c2x4U3RhcnRSZWFkaW5nKHFlLGEsbC5wYXNzd29yZCk7aWYoIXJ0KXJldHVybiBNKCJObyB3b3JrYm9vayBmb3VuZC4i'@;
put 'KTtmLnBhcnNlRXhjZWxGaWxlKGwscnQsRCxoKS50aGVuKHB0PT57dihwdCl9KS5jYXRjaChwdD0+e00ocHQpfSl9KTtyZXR1cm4gZnVuY3Rpb24ocWUpe3JldHVybiBCZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSgpLGJlLnJlYWRBc0FycmF5QnVmZmVyKHJlKX19fSl9cGFyc2VFeGNlbEZp'@;
put 'bGUobCxhLGQsaCl7cmV0dXJuIG5ldyBQcm9taXNlKChmLHYpPT57bGV0IE09ITEsRD1bXTtjb25zdCBaPVsiX19fX19ERUxFVEVfX1RISVNfX1JFQ09SRF9fX19fIiwuLi5sLmhlYWRlckFycmF5XSxyZT10aGlzLnNlYXJjaERhdGFJbkV4Y2VsKGEsbCk7bGV0IGNlPVtdO2lmKHJlLmZvdW5k'@;
put 'PyhNPSEwLGNlPXJlLmZvdW5kLmFycmF5RGF0YSxyZS5mb3VuZC5oZWFkZXJzLmluY2x1ZGVzKCJfX19fX2RlbGV0ZV9fdGhpc19fcmVjb3JkX19fX18iKXx8KGNlPWNlLm1hcChCZT0+KEJlLnVuc2hpZnQoe3Y6IiJ9KSxCZSkpKSxoJiZoKGBTaGVldDogJHtyZS5mb3VuZC5zaGVldE5hbWV9'@;
put 'XG5SYW5nZTogJHtyZS5mb3VuZC5zdGFydEFkZHJlc3N9OiR7cmUuZm91bmQuZW5kQWRkcmVzc31gKSk6RD1yZS5taXNzaW5nfHxbXSxELmxlbmd0aD4wKXtsZXQgQmU9RC5tYXAocWU9PmBTaGVldDogJHtxZS5zaGVldE5hbWV9LlxuTWlzc2luZyBjb2x1bW5zOiAke3FlLm1pc3NpbmdIZWFk'@;
put 'ZXJzLmpvaW4oIiwiKX1gKS5qb2luKCJcblxuIik7cmV0dXJuIGQucXVldWUucG9wKCksdihCZSl9aWYoMD09PWNlLmxlbmd0aHx8MD09PWNlWzBdLmxlbmd0aCl7bGV0IEJlPSJObyByZWxldmFudCBkYXRhIGZvdW5kIGluIEZpbGUgISI7cmV0dXJuIGQucXVldWUucG9wKCksdihCZSl9aWYo'@;
put 'KGwuZGF0ZVRpbWVIZWFkZXJzLmxlbmd0aD4wfHxsLmRhdGVIZWFkZXJzLmxlbmd0aD4wfHxsLnRpbWVIZWFkZXJzLmxlbmd0aD4wKSYmKGNlPXRoaXMudXBkYXRlRGF0ZVRpbWVDb2xzKFosY2UsbCkpLGwueGxSdWxlcy5sZW5ndGg+MCYmKGNlPXRoaXMudXBkYXRlWExSdWxlQ29scyhaLGNl'@;
put 'LGwpKSwhTSl7bGV0IEJlPSIiO3JldHVybiBCZT0wPT09RC5sZW5ndGg/Ik5vIHJlbGV2YW50IGRhdGEgZm91bmQgaW4gRmlsZSAhIjpELm1hcChxZT0+YFNoZWV0OiAke3FlLnNoZWV0TmFtZX0uXG5NaXNzaW5nIGNvbHVtbnM6ICR7cWUubWlzc2luZ0hlYWRlcnMuam9pbigiLCIpfWApLmpv'@;
put 'aW4oIlxuXG4iKSxkLnF1ZXVlLnBvcCgpLHYoQmUpfXtsLmhlYWRlclNob3c9WixjZT1jZS5tYXAoSnQ9Pkp0Lm1hcCh2bj0+Im4iPT09dm4udHx8dm4udz92bi52OiJzdHJpbmciPT10eXBlb2Ygdm4udj92bi52LnRyaW0oKTp2bi52KSksY2U9Y2UubWFwKEp0PT5KdC5tYXAoKHZuLENuKT0+'@;
put 'eyF2biYmMCE9PXZuJiYodm49IiIpO2NvbnN0IHRuPWwuaGVhZGVyU2hvd1tDbl07cmV0dXJuIm51bWVyaWMiPT09bC5kY1ZhbGlkYXRvcj8uZ2V0UnVsZSh0bik/LnR5cGUmJigwLGdnLmlzU3BlY2lhbE1pc3NpbmcpKHZuKSYmIXZuLmluY2x1ZGVzKCIuIikmJih2bj0iLiIrdm4pLHZufSkp'@;
put 'O2NvbnN0IEJlPWNlLnNsaWNlKDAsdGhpcy5saWNlbmNlU3RhdGUudmFsdWUuc3VibWl0X3Jvd3NfbGltaXQpO2xldCBwdCxxZT1EdS51dGlscy5qc29uX3RvX3NoZWV0KEJlLHtza2lwSGVhZGVyOiEwfSkscnQ9RHUudXRpbHMuc2hlZXRfdG9fY3N2KHFlKTtpZihydD1aLmpvaW4oIiwiKSsi'@;
put 'XG4iK3J0LCJXTEFUSU4xIj09PWwuZW5jb2Rpbmcpe2xldCBKdD14NmUuZGVjb2RlKEU2ZS5CdWZmZXIuZnJvbShydCksIkNQLTEyNTIiKTtwdD1uZXcgQmxvYihbSnRdLHt0eXBlOiJhcHBsaWNhdGlvbi9jc3YifSl9ZWxzZSBwdD1uZXcgQmxvYihbcnRdLHt0eXBlOiJhcHBsaWNhdGlvbi9j'@;
put 'c3YifSk7bGV0IGR0PXFlZShwdCxsLmZpbGUubmFtZSsiLmNzdiIpO2QuYWRkVG9RdWV1ZShbZHRdKX1pZigwPT09Y2UubGVuZ3RoKXJldHVybiB2KGBUYWJsZSBpbiB0aGUgZmlsZSBpcyBlbXB0eS4gRGF0YSBmb3VuZCBvbiBzaGVldDogJHtyZS5mb3VuZD8uc2hlZXROYW1lfHwiIn1gKTtp'@;
put 'ZighcmUuZm91bmQpcmV0dXJuIHYoIk5vIHJlbGV2YW50IGRhdGEgZm91bmQuICdmb3VuZCcgb2JqZWN0IGlzIGVtcHR5LCB1bmV4cGVjdGVkIGVycm9yIG9jY3VycmVkLiIpO2NvbnN0IGJlPXJlLmZvdW5kLnN0YXJ0QWRkcmVzc3x8IiIsRWU9cmUuZm91bmQuZW5kQWRkcmVzc3x8IiI7cmV0'@;
put 'dXJuIGYoe3VwbG9hZGVyOmQsZGF0YTpjZSxyYW5nZVNoZWV0UmVzOntmb3VuZDohIXJlLmZvdW5kLHNoZWV0TmFtZTpyZS5mb3VuZC5zaGVldE5hbWUscmFuZ2VTdGFydEFkZHJlc3M6YmUscmFuZ2VFbmRBZGRyZXNzOkVlLHJhbmdlQWRkcmVzczpgJHtiZX06JHtFZX1gLG1pc3NpbmdIZWFk'@;
put 'ZXJzOkR9LGhlYWRlclNob3c6bC5oZWFkZXJTaG93fSl9KX1wYXJzZUNzdkZpbGUobCxhLGQpe3JldHVybiBuZXcgUHJvbWlzZSgoaCxmKT0+e2lmKHRoaXMubGljZW5jZVN0YXRlLnZhbHVlLnN1Ym1pdF9yb3dzX2xpbWl0IT09MS8wKXJldHVybiBhLnF1ZXVlLnBvcCgpLGYoIkV4Y2VsIGZp'@;
put 'bGVzIG9ubHkuIFRvIHVubG9jayBDU1YgdXBsb2FkcywgcGxlYXNlIGNvbnRhY3Qgc3VwcG9ydEBkYXRhY29udHJvbGxlci5pbyIpO2lmKCJXTEFUSU4xIiE9PWwuZW5jb2RpbmcpcmV0dXJuIGgoe3VwbG9hZGVyOmF9KTt7bGV0IHY9bmV3IEZpbGVSZWFkZXI7di5vbmxvYWQ9RD0+e2xldCBa'@;
put 'PXg2ZS5kZWNvZGUoRTZlLkJ1ZmZlci5mcm9tKEQudGFyZ2V0LnJlc3VsdCksIkNQLTEyNTIiKSxyZT1uZXcgQmxvYihbWl0se3R5cGU6ZH0pLGNlPXFlZShyZSxsLmZpbGUubmFtZSk7cmV0dXJuIGEucXVldWUucG9wKCksYS5hZGRUb1F1ZXVlKFtjZV0pLGgoe3VwbG9hZGVyOmF9KX0sdi5y'@;
put 'ZWFkQXNBcnJheUJ1ZmZlcihsLmZpbGUpfX0pfWJ5dGVzVG9NQihsKXtyZXR1cm4gcGFyc2VGbG9hdCgobC8xMDQ4NTc2KS50b0ZpeGVkKDIpKX14c2x4U3RhcnRSZWFkaW5nKGwsYSxkKXt2YXIgaD10aGlzO3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbigpe3ZhciBmPWVlKGZ1bmN0aW9u'@;
put 'Kih2LE0pe2NvbnN0IEQ9aC50b0JzdHIobC50YXJnZXQucmVzdWx0KTtsZXQgWixyZT0hMTtjb25zdCBjZT17dHlwZToiYmluYXJ5IixjZWxsRGF0ZXM6ITEsY2VsbEZvcm11bGE6ITAsY2VsbFN0eWxlczohMCxjZWxsTkY6ITEsY2VsbFRleHQ6ITEscGFzc3dvcmQ6ZH07dHJ5e1o9eWllbGQg'@;
put 'aC54bHN4UmVhZChELHsuLi5jZX0pfWNhdGNoKGJlKXtpZighYmUubWVzc2FnZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKCJwYXNzd29yZCIpKXJldHVybiBNKCJFcnJvciByZWFkaW5nIHRoZSBmaWxlIik7e3JlPSEwO2xldCBFZT0hMTtmb3IoO3JlOyl7Y29uc3QgQmU9eWllbGQgYSh7ZXJy'@;
put 'b3I6RWV9KTtpZihCZSl0cnl7Wj15aWVsZCBoLnhsc3hSZWFkKEQsey4uLmNlLHBhc3N3b3JkOkJlfSkscmU9ITEsRWU9ITF9Y2F0Y2gocWUpe0VlPSEwLHFlLm1lc3NhZ2UudG9Mb3dlckNhc2UoKS5pbmNsdWRlcygicGFzc3dvcmQiKXx8KHJlPSExKX1lbHNlIHJlPSExfX19cmV0dXJuIFo/'@;
put 'dihaKTpNKCJGYWlsZWQgdG8gcGFyc2UgYSB3b3JrYm9vayIpfSk7cmV0dXJuIGZ1bmN0aW9uKHYsTSl7cmV0dXJuIGYuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0oKSl9eGxzeFJlYWQobCxhKXtyZXR1cm4gbmV3IFByb21pc2UoKGQsaCk9PntpZihhJiZhLnBhc3N3b3JkKXJldHVybiBjb25z'@;
put 'b2xlLmluZm8oIk5vdCB1c2luZyB3b3JrZXIgdG8gcGFyc2UgdGhlIFhMU1ggLSBoYXMgcGFzc3dvcmQiKSxkKER1LnJlYWQobCxhKSk7aWYodHlwZW9mIFdvcmtlcj4idSIpcmV0dXJuIGNvbnNvbGUuaW5mbygiTm90IHVzaW5nIHdvcmtlciB0byBwYXJzZSB0aGUgWExTWCAtIG5vIFdvcmtl'@;
put 'ciBhdmFpbGFibGUgaW4gdGhpcyBlbnZpcm9ubWVudCIpLGQoRHUucmVhZChsLGEpKTtjb25zb2xlLmluZm8oIlVzaW5nIHdvcmtlciB0byBwYXJzZSB0aGUgWExTWCIpO2NvbnN0IGY9bmV3IFdvcmtlcih5LnR1KG5ldyBVUkwoeS5wK3kudSg0MTEpLHkuYikpKTtmLm9ubWVzc2FnZT0oe2Rh'@;
put 'dGE6dn0pPT57InJlYWRpbmdfZW5kIj09PXYuZXZlbnQ/ZCh2Lndvcmtib29rKTp2LmVycm9yP2godi5lcnJvcik6KGNvbnNvbGUuaW5mbygiV29ya2VyIGZhaWxlZCB0byBwYXJzZSB0aGUgWExTWCAtIGZhbGxiYWNrIHRvIG5vbiB3b3JrZXIgcGFyc2luZyIpLGQoRHUucmVhZCh2LGEpKSl9'@;
put 'LGYucG9zdE1lc3NhZ2Uoe2RhdGE6bCxvcHRzOmF9KSxzZXRUaW1lb3V0KCgpPT5kKER1LnJlYWQobCxhKSksNmU1KX0pfXNlYXJjaERhdGFJbkV4Y2VsKGwsYSl7bGV0IGQsaCxmLHYsTT0iIixEPVtdLHJlPVsiX19fX19ERUxFVEVfX1RISVNfX1JFQ09SRF9fX19fIiwuLi5hLmhlYWRlckFy'@;
put 'cmF5XS5tYXAoYmU9PmJlLnRvTG93ZXJDYXNlKCkpLGNlPXJlLnJlZHVjZSgoYmUsRWUpPT4oYmVbRWVdPS0xLGJlKSx7fSk7Zm9yKGxldCBiZSBvZiBsLlNoZWV0TmFtZXMpe2Q9dm9pZCAwLGg9dm9pZCAwLGNlPXJlLnJlZHVjZSgodG4sTW4pPT4odG5bTW5dPS0xLHRuKSx7fSk7bGV0IEVl'@;
put 'PVtdO009YmU7Y29uc3QgQmU9bC5TaGVldHNbTV07aWYoT2JqZWN0LmtleXMoQmUpLmZvckVhY2godG49Pntjb25zdCBNbj1CZVt0bl0udjtpZihNbiYmInN0cmluZyI9PXR5cGVvZiBNbil7Y29uc3QgQ3I9TW4udG9Mb3dlckNhc2UoKTtyZS5pbmRleE9mKENyKT4tMSYmKGNlW0NyXT10bixk'@;
put 'fHwoZD10biksaD10bil9fSksLTE9PT1jZS5fX19fX2RlbGV0ZV9fdGhpc19fcmVjb3JkX19fX18mJmRlbGV0ZSBjZS5fX19fX2RlbGV0ZV9fdGhpc19fcmVjb3JkX19fX18sRWU9T2JqZWN0LmtleXMoY2UpLmZpbHRlcih0bj0+LTE9PT1jZVt0bl0pLEVlLmxlbmd0aD4wKXtELnB1c2goe3No'@;
put 'ZWV0TmFtZTpNLG1pc3NpbmdIZWFkZXJzOkVlLm1hcCh0bj0+dG4udG9VcHBlckNhc2UoKSl9KTtjb250aW51ZX1jb25zdCBxZT1PYmplY3Qua2V5cyhjZSk7bGV0IGR0LHJ0PVtdLHB0PVtdO3FlLnNvcnQoKHRuLE1uKT0+e2NvbnN0IENyPWEuaGVhZGVyUGtzLmluY2x1ZGVzKHRuKT8xOjA7'@;
put 'cmV0dXJuKGEuaGVhZGVyUGtzLmluY2x1ZGVzKE1uKT8xOjApLUNyfSkuZm9yRWFjaCh0bj0+e2NvbnN0IE1uPWNlW3RuXSxDcj1Nbi5tYXRjaCgvXEQrLyksR3I9TW4ubWF0Y2goL1xkKy8pLG1yPShDcj9DclswXTotMSl8fC0xLGFpPXBhcnNlSW50KChHcj9HclswXTotMSl8fC0xKSsxO2xl'@;
put 'dCBfaT0wO2lmKGR0KWZvcihsZXQgT249YWk7T248PWR0O09uKyspe2NvbnN0IEpuPUJlW2Ake21yfSR7T259YF07aWYoYS5oZWFkZXJQa3MuaW5jbHVkZXModG4pJiYodm9pZCAwPT09Sm58fHZvaWQgMD09PUpuLnYpKXtkdD1PbjticmVha31ydFtfaV18fHJ0LnB1c2goe30pLEpuJiYocnRb'@;
put 'X2ldW3RuXT0ic3RyaW5nIj09dHlwZW9mIEpuLnY/Sm4udi50cmltKCk6Sm4udikscHRbX2ldfHxwdC5wdXNoKFtdKSxwdFtfaV0ucHVzaChKbj8/e3Y6IiJ9KSxfaSsrfWVsc2V7bGV0IE9uPWFpO2Zvcig7dm9pZCAwPT09ZHQ7KXtjb25zdCB6cj1gJHttcn0ke09ufWAsSm49QmVbenJdO2lm'@;
put 'KCFKbnx8dm9pZCAwPT09Sm4udil7ZHQ9T24tMTticmVha31ydFtfaV18fHJ0LnB1c2goe30pLHJ0W19pXVt0bl09Im4iPT09QmVbenJdLnQ/QmVbenJdLnY6QmVbenJdLnc/QmVbenJdLnc6InN0cmluZyI9PXR5cGVvZiBCZVt6cl0udj9CZVt6cl0udi50cmltKCk6QmVbenJdLnYscHRbX2ld'@;
put 'fHxwdC5wdXNoKFtdKSxwdFtfaV0ucHVzaChKbj8/e3Y6IiJ9KSxPbisrLF9pKyt9fWlmKGQmJmgpe2NvbnN0IE9uPWgubWF0Y2goL1xEKy8pO2Y9ZCx2PWAke09ufSR7ZHR9YH19KTtjb25zdCB2bj1bXTtsZXQgQ247cmV0dXJuIHJ0LmZvckVhY2goKHRuLE1uKT0+e2xldCBDcj0hMTthLmhl'@;
put 'YWRlclBrcy5mb3JFYWNoKEdyPT57dm9pZCAwPT09dG5bR3IudG9Mb3dlckNhc2UoKV0mJihDcj0hMCl9KSxDciYmKHZuLnB1c2goTW4pLENufHwoQ249TW4pKX0pLENuPyhydC5zcGxpY2UoQ24sMS8wKSxwdC5zcGxpY2UoQ24sMS8wKSk6dm4uc29ydCgodG4sTW4pPT5Nbi10bikuZm9yRWFj'@;
put 'aCh0bj0+e3J0LnNwbGljZSh0biwxKSxwdC5zcGxpY2UodG4sMSl9KSxwdC5sZW5ndGg/e2ZvdW5kOntkYXRhOnJ0LGFycmF5RGF0YTpwdCxzaGVldE5hbWU6TSxzdGFydEFkZHJlc3M6ZixlbmRBZGRyZXNzOnYsaGVhZGVyczpxZX19Ont9fXJldHVybnttaXNzaW5nOkR9fXVwZGF0ZURhdGVU'@;
put 'aW1lQ29scyhsLGEsZCl7aWYoZC5kYXRlSGVhZGVycy5sZW5ndGg+MCl7Y29uc3QgaD1bXTtkLmRhdGVIZWFkZXJzLmZvckVhY2goZj0+ey0xIT09bC5pbmRleE9mKGYpJiZoLnB1c2gobC5pbmRleE9mKGYpKX0pLGEuZm9yRWFjaChmPT57aC5mb3JFYWNoKHY9Pntjb25zdCBNPWZbdl07aWYo'@;
put 'S2VlKE0udikpe2NvbnN0IEQ9V2VlKE51bWJlcihNLnYpKTtNLnY9RC5nZXRGdWxsWWVhcigpKyItIisoIjAiKyhELmdldE1vbnRoKCkrMSkpLnNsaWNlKC0yKSsiLSIrKCIwIitELmdldERhdGUoKSkuc2xpY2UoLTIpfWVsc2UgaWYoTSYmTS52JiYtMT09PU0udi50b1N0cmluZygpLmluZGV4'@;
put 'T2YoIjoiKSl7Y29uc3QgRD1uZXcgRGF0ZShNLnYpOyJJbnZhbGlkIERhdGUiIT09RC50b1VUQ1N0cmluZygpJiYoTS52PSRlZShEKSl9Zlt2XT1NfSl9KX1pZihkLnRpbWVIZWFkZXJzLmxlbmd0aD4wKXtsZXQgaD1bXTtkLnRpbWVIZWFkZXJzLmZvckVhY2goZj0+ey0xIT09bC5pbmRleE9m'@;
put 'KGYpJiZoLnB1c2gobC5pbmRleE9mKGYpKX0pLGEuZm9yRWFjaChmPT57aC5mb3JFYWNoKHY9Pntjb25zdCBNPWZbdl07aWYoS2VlKE0udil8fE02ZShNLnYpfHxNLnYuaW5jbHVkZXMoIkUtIikpe2NvbnN0IEQ9V2VlKE51bWJlcihNLnYpKTtNLnY9UzZlKEQpfWZbdl09TX0pfSl9aWYoZC5k'@;
put 'YXRlVGltZUhlYWRlcnMubGVuZ3RoPjApe2xldCBoPVtdO2QuZGF0ZVRpbWVIZWFkZXJzLmZvckVhY2goZj0+ey0xIT09bC5pbmRleE9mKGYpJiZoLnB1c2gobC5pbmRleE9mKGYpKX0pLGEuZm9yRWFjaChmPT57aC5mb3JFYWNoKHY9Pntjb25zdCBNPWZbdl07aWYoS2VlKE0udil8fE02ZShN'@;
put 'LnYpKXtjb25zdCBEPVdlZShOdW1iZXIoTS52KSk7TS52PSRlZShEKSsiICIrUzZlKEQpfWVsc2V7aWYoLTE9PT1NLnYuaW5kZXhPZigiICIpJiYtMSE9PU0udi5pbmRleE9mKCI6Iikpe2xldCBaPU0udi5zdWJzdHJpbmcoMCxNLnYuaW5kZXhPZigiOiIpKTtaPVorIiAiK00udi5zdWJzdHJp'@;
put 'bmcoTS52LmluZGV4T2YoIjoiKSsxKSxNLnY9Wn1jb25zdCBEPW5ldyBEYXRlKE0udik7IkludmFsaWQgRGF0ZSIhPT1ELnRvVVRDU3RyaW5nKCkmJihNLnY9JGVlKEQpKyIgIisoYz0+e2xldCBsPSgiMCIrYy5nZXRIb3VycygpKS5zbGljZSgtMikrIjoiO3JldHVybiBsPWwrKCIwIitjLmdl'@;
put 'dE1pbnV0ZXMoKSkuc2xpY2UoLTIpKyI6IixsKz0oIjAiK2MuZ2V0U2Vjb25kcygpKS5zbGljZSgtMiksbH0pKEQpKX1mW3ZdPU19KX0pfXJldHVybiBhfXVwZGF0ZVhMUnVsZUNvbHMobCxhLGQpe2lmKGQueGxSdWxlcy5sZW5ndGg+MCl7Y29uc3QgaD1bXTtkLnhsUnVsZXMuZm9yRWFjaChm'@;
put 'PT57LTEhPT1sLmluZGV4T2YoZi5YTF9DT0xVTU4pJiYoZi5pbmRleD1sLmluZGV4T2YoZi5YTF9DT0xVTU4pLGgucHVzaChmKSl9KSxhLmZvckVhY2goZj0+e2guZm9yRWFjaCh2PT57Y29uc3QgTT1mW3YuaW5kZXhdOyJGT1JNVUxBIj09PXYuWExfUlVMRSYmImYiaW4gTSYmKCJuIj09PU0u'@;
put 'dD9NLnY9Ij0iK00uZjpNLnc9Ij0iK00uZiksZlt2XT1NfSl9KX1yZXR1cm4gYX10b0JzdHIobCl7bGV0IGE9bmV3IFVpbnQ4QXJyYXkobCksZD0iIixoPWEuYnl0ZUxlbmd0aDtmb3IobGV0IGY9MDtmPGg7ZisrKWQrPVN0cmluZy5mcm9tQ2hhckNvZGUoYVtmXSk7cmV0dXJuIGR9fWxldCBB'@;
put 'NmU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCl7dGhpcy5leGNlbFBhc3N3b3JkTW9kYWxTZXJ2aWNlPWEsdGhpcy5ldmVudFNlcnZpY2U9ZCx0aGlzLmxpY2VuY2VTZXJ2aWNlPWgsdGhpcy5saWNlbmNlU3RhdGU9dGhpcy5saWNlbmNlU2VydmljZS5saWNlbmNlU3RhdGUsdGhp'@;
put 'cy5wcm9tcHRFeGNlbFBhc3N3b3JkPWY9Pm5ldyBQcm9taXNlKCh2LE0pPT57dGhpcy5leGNlbFBhc3N3b3JkTW9kYWxTZXJ2aWNlLm9wZW4oZikuc3Vic2NyaWJlKEQ9Pnt2KEQucGFzc3dvcmQpfSl9KX1wYXJzZUV4Y2VsRmlsZShhLGQsaCl7cmV0dXJuIG5ldyBUNmUoe2xpY2VuY2VTdGF0'@;
put 'ZTp0aGlzLmxpY2VuY2VTdGF0ZX0pLnBhcnNlU3ByZWFkc2hlZXRGaWxlKGEsdGhpcy5wcm9tcHRFeGNlbFBhc3N3b3JkLGQsaCl9eGxzeFJlYWRGaWxlKGEpe3JldHVybiBuZXcgUHJvbWlzZSgoZCxoKT0+e2NvbnN0IGY9bmV3IFQ2ZSh7bGljZW5jZVN0YXRlOnRoaXMubGljZW5jZVN0YXRl'@;
put 'fSk7bGV0IHY9bmV3IEZpbGVSZWFkZXI7di5vbmxvYWQ9TT0+e2YueHNseFN0YXJ0UmVhZGluZyhNLHRoaXMucHJvbXB0RXhjZWxQYXNzd29yZCkudGhlbihEPT57ZChEKX0pLmNhdGNoKEQ9PntoKEQpfSl9LHYucmVhZEFzQXJyYXlCdWZmZXIoYSl9KX1wYXJzZUV4Y2VsU2hlZXROYW1lcyhh'@;
put 'KXt2YXIgZD10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXtyZXR1cm4gbmV3IFByb21pc2UoKGgsZik9Pntjb25zdCB2PW5ldyBGaWxlUmVhZGVyO2lmKCFhKXJldHVybiBjb25zb2xlLndhcm4oImZpbGUgaXMgbWlzc2luZyIpLGgoe3NoZWV0TmFtZXM6W119KTt2Lm9ubG9hZD1mdW5jdGlv'@;
put 'bigpe3ZhciBNPWVlKGZ1bmN0aW9uKihEKXtpZighRD8udGFyZ2V0KXJldHVybiB2b2lkIGNvbnNvbGUud2FybigiRmlsZSByZWFkZXIgZXZlbnQudGFyZ2V0IGlzIG1pc3NpbmciKTtsZXQgWixjZSxyZT0hMTtjb25zdCBiZT1ELnRhcmdldC5yZXN1bHQ7dHJ5e1o9RHUucmVhZChiZSx7Ym9v'@;
put 'a1NoZWV0czohMCx0eXBlOiJiaW5hcnkifSl9Y2F0Y2goRWUpe2lmKCFFZS5tZXNzYWdlLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoInBhc3N3b3JkIikpcmV0dXJuIGYoIkVycm9yIHJlYWRpbmcgdGhlIGZpbGUiKTt7cmU9ITA7bGV0IEJlPSExO2Zvcig7cmU7KXtpZihjZT15aWVsZCBkLnBy'@;
put 'b21wdEV4Y2VsUGFzc3dvcmQoe2Vycm9yOkJlfSksIWNlKXJldHVybiByZT0hMSxmKCJObyBwYXNzd29yZCBwcm92aWRlZCIpO3RyeXtaPUR1LnJlYWQoYmUse2Jvb2tTaGVldHM6ITAsdHlwZToiYmluYXJ5IixwYXNzd29yZDpjZX0pLHJlPSExLEJlPSExfWNhdGNoKHFlKXtCZT0hMCxxZS5t'@;
put 'ZXNzYWdlLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoInBhc3N3b3JkIil8fChyZT0hMSl9aWYoIWNlKXJldHVybiBmKCJJbnZhbGlkIHBhc3N3b3JkLCBmYWlsZWQgdG8gZGVjcnlwdCB0aGUgZmlsZSIpfX19aWYoIVopcmV0dXJuIGYoIkVycm9yIHBhcnNpbmcgdGhlIHdvcmtib29rIik7dHJ5'@;
put 'e3JldHVybiBoKHtzaGVldE5hbWVzOlouU2hlZXROYW1lcyxwYXNzd29yZDpjZX0pfWNhdGNoKEVlKXtjb25zb2xlLmVycm9yKEVlKX19KTtyZXR1cm4gZnVuY3Rpb24oRCl7cmV0dXJuIE0uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0oKSx2Lm9uZXJyb3I9ZnVuY3Rpb24oTSl7Y29uc29sZS5s'@;
put 'b2coTSl9LHYucmVhZEFzQmluYXJ5U3RyaW5nKGEpfSl9KSgpfWJ5dGVzVG9NQihhKXtyZXR1cm4gcGFyc2VGbG9hdCgoYS8xMDQ4NTc2KS50b0ZpeGVkKDIpKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKSh4cihoaGUpLHhyKHZjKSx4cih1MSkp'@;
put 'fX1zdGF0aWN7dGhpcy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KX19cmV0dXJuIGN9KSgpO2NvbnN0ICQ5PXZvaWQgMCxUbXQ9WyJlbi1HQiIsW1siYSIsInAiXSxbImFtIiwicG0iXSwkOV0sW1siYW0iLCJwbSJdLCQ5LCQ5'@;
put 'XSxbWyJTIiwiTSIsIlQiLCJXIiwiVCIsIkYiLCJTIl0sWyJTdW4iLCJNb24iLCJUdWUiLCJXZWQiLCJUaHUiLCJGcmkiLCJTYXQiXSxbIlN1bmRheSIsIk1vbmRheSIsIlR1ZXNkYXkiLCJXZWRuZXNkYXkiLCJUaHVyc2RheSIsIkZyaWRheSIsIlNhdHVyZGF5Il0sWyJTdSIsIk1vIiwiVHUi'@;
put 'LCJXZSIsIlRoIiwiRnIiLCJTYSJdXSwkOSxbWyJKIiwiRiIsIk0iLCJBIiwiTSIsIkoiLCJKIiwiQSIsIlMiLCJPIiwiTiIsIkQiXSxbIkphbiIsIkZlYiIsIk1hciIsIkFwciIsIk1heSIsIkp1biIsIkp1bCIsIkF1ZyIsIlNlcHQiLCJPY3QiLCJOb3YiLCJEZWMiXSxbIkphbnVhcnkiLCJG'@;
put 'ZWJydWFyeSIsIk1hcmNoIiwiQXByaWwiLCJNYXkiLCJKdW5lIiwiSnVseSIsIkF1Z3VzdCIsIlNlcHRlbWJlciIsIk9jdG9iZXIiLCJOb3ZlbWJlciIsIkRlY2VtYmVyIl1dLCQ5LFtbIkIiLCJBIl0sWyJCQyIsIkFEIl0sWyJCZWZvcmUgQ2hyaXN0IiwiQW5ubyBEb21pbmkiXV0sMSxbNiww'@;
put 'XSxbImRkL01NL3kiLCJkIE1NTSB5IiwiZCBNTU1NIHkiLCJFRUVFLCBkIE1NTU0geSJdLFsiSEg6bW0iLCJISDptbTpzcyIsIkhIOm1tOnNzIHoiLCJISDptbTpzcyB6enp6Il0sWyJ7MX0sIHswfSIsJDksInsxfSAnYXQnIHswfSIsJDldLFsiLiIsIiwiLCI7IiwiJSIsIisiLCItIiwiRSIs'@;
put 'Ilx4ZDciLCJcdTIwMzAiLCJcdTIyMWUiLCJOYU4iLCI6Il0sWyIjLCMjMC4jIyMiLCIjLCMjMCUiLCJceGE0IywjIzAuMDAiLCIjRTAiXSwiR0JQIiwiXHhhMyIsIkJyaXRpc2ggUG91bmQiLHtKUFk6WyJKUFx4YTUiLCJceGE1Il0sVVNEOlsiVVMkIiwiJCJdfSwibHRyIixmdW5jdGlvbiBF'@;
put 'bXQoYyl7Y29uc3QgYT1NYXRoLmZsb29yKE1hdGguYWJzKGMpKSxkPWMudG9TdHJpbmcoKS5yZXBsYWNlKC9eW14uXSpcLj8vLCIiKS5sZW5ndGg7cmV0dXJuIDE9PT1hJiYwPT09ZD8xOjV9XSxBbXQ9WyJpbnB1dCJdLGttdD1bIioiXSxEbXQ9KGMsbCk9Pih7IndpZHRoLnB4IjpjLCJtYXgt'@;
put 'aGVpZ2h0LnB4IjpsfSk7ZnVuY3Rpb24gSW10KGMsbCl7aWYoMSZjJiYoZGUoMCwib3B0aW9uIiw3KSxMZSgxKSxoZSgpKSwyJmMpe2NvbnN0IGE9UmUoKTtmZSgpLERyKCIgIixhLmxvYWRpbmdNb3JlPyJMb2FkaW5nLi4uIjoiTE9BRCBNT1JFIiwiICIpfX1sZXQgazZlPSgoKT0+e2NsYXNz'@;
put 'IGN7Y29uc3RydWN0b3IoYSl7dGhpcy5jZHI9YSx0aGlzLmlucHV0SWQ9IiIsdGhpcy5wbGFjZWhvbGRlcj0iIix0aGlzLnZhbHVlPSIiLHRoaXMuZGlzYWJsZWQ9ITEsdGhpcy50eXBlPSJ0ZXh0Iix0aGlzLmF1dG9jb21wbGV0ZT0ib2ZmIix0aGlzLnRhYmluZGV4PSIiLHRoaXMuZW1pdE9u'@;
put 'bHlTZWxlY3RlZD0hMSx0aGlzLmVuYWJsZUxvYWRNb3JlPSExLHRoaXMub25JbnB1dEtleWRvd249bmV3IEtyLHRoaXMub25JbnB1dENoYW5nZT1uZXcgS3IsdGhpcy52YWx1ZUNoYW5nZT1uZXcgS3IsdGhpcy5vbkxvYWRpbmdNb3JlPW5ldyBLcix0aGlzLmRhdGFsaXN0T3Blbj0hMSx0aGlz'@;
put 'LmFmdGVyT3BlbkxvY2tEZWxheT0xNTAsdGhpcy5hZnRlck9wZW5Mb2NrPSExLHRoaXMuaW5wdXRGb2N1c2VkPSExLHRoaXMuaW5wdXRDbGllbnRSZWN0PXt9LHRoaXMucHJldmVudERhdGFsaXN0Q2xvc2U9ITEsdGhpcy5sb2FkaW5nTW9yZT0hMX1uZ09uSW5pdCgpe31uZ0FmdGVyVmlld0lu'@;
put 'aXQoKXtzZXRUaW1lb3V0KCgpPT57dGhpcy5jYWxjdWxhdGVJbnB1dFBvc2l0aW9uKCl9LDUwMCl9b25JbnB1dEZpcmVkKGEsZCxoKXt0aGlzLm9wZW5EYXRhbGlzdCgiY2xpY2siIT09aCksdGhpcy51bnNlbGVjdEFsbE9wdGlvbnMoKSx0aGlzLmZpbHRlck9wdGlvbnNMaXN0KCksKCF0aGlz'@;
put 'LmVtaXRPbmx5U2VsZWN0ZWR8fGQpJiYodGhpcy5vbklucHV0Q2hhbmdlLmVtaXQoe3RhcmdldDp7dmFsdWU6dGhpcy52YWx1ZX19KSx0aGlzLnZhbHVlQ2hhbmdlLmVtaXQodGhpcy52YWx1ZSkpfW9uSW5wdXRDbGljayhhKXt0aGlzLm9wZW5EYXRhbGlzdCgpfW9wZW5EYXRhbGlzdChhPSEw'@;
put 'KXt0aGlzLmRhdGFsaXN0T3Blbj0hMCxhJiYodGhpcy5hZnRlck9wZW5Mb2NrPSEwLHRoaXMuYWZ0ZXJPcGVuTG9ja0RlbGF5VGltZW91dD1zZXRUaW1lb3V0KCgpPT57dGhpcy5hZnRlck9wZW5Mb2NrPSExfSx0aGlzLmFmdGVyT3BlbkxvY2tEZWxheSkpfWNsb3NlRGF0YWxpc3QoKXtjbGVh'@;
put 'clRpbWVvdXQodGhpcy5hZnRlck9wZW5Mb2NrRGVsYXlUaW1lb3V0KSx0aGlzLmFmdGVyT3BlbkxvY2s9ITEsdGhpcy5kYXRhbGlzdE9wZW49ITF9cmVzZXREYXRhbGlzdEZpbHRlcigpe3RoaXMuZmlsdGVyT3B0aW9uc0xpc3QoITApfW9uSW5wdXRGb2N1c2luKGEpe3RoaXMuaW5wdXRGb2N1'@;
put 'c2VkPSEwfW9uSW5wdXRGb2N1c291dChhKXt0aGlzLmlucHV0Rm9jdXNlZD0hMSx0aGlzLnNldFRvQ2xvc2VEYXRhbGlzdCgpfW9uSW5wdXRNb3VzZWVudGVyKGEpe3RoaXMuaW5wdXRDbGllbnRSZWN0LndpZHRofHx0aGlzLmNhbGN1bGF0ZUlucHV0UG9zaXRpb24oKX1maWx0ZXJPcHRpb25z'@;
put 'TGlzdChhKXtjb25zdCBkPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoYCNkYXRhbGlzdF8ke3RoaXMuaW5wdXRJZH0gb3B0aW9uYCk7Zm9yKGxldCBoPTA7aDxkLmxlbmd0aDtoKyspe2NvbnN0IGY9ZFtoXTtpZigwPT09dGhpcy52YWx1ZS5sZW5ndGgpe2YuY2xhc3NMaXN0LnJlbW92ZSgi'@;
put 'aGlkZGVuIik7Y29udGludWV9aWYoYSl7Zi5jbGFzc0xpc3QucmVtb3ZlKCJoaWRkZW4iKTtjb250aW51ZX1jb25zdCB2PWYuaW5uZXJUZXh0fHwiIixNPWYudmFsdWV8fCIiOyh2K00pPy50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHRoaXMudmFsdWUudG9Mb3dlckNhc2UoKSk/Zi5jbGFzc0xp'@;
put 'c3QucmVtb3ZlKCJoaWRkZW4iKTpmLmNsYXNzTGlzdC5hZGQoImhpZGRlbiIpfX1zZXRUb0Nsb3NlRGF0YWxpc3QoKXt0aGlzLmRhdGFsaXN0Q2xvc2VUaW1lb3V0PXNldFRpbWVvdXQoKCk9Pnt0aGlzLnByZXZlbnREYXRhbGlzdENsb3NlfHx0aGlzLmFmdGVyT3BlbkxvY2t8fCh0aGlzLmNs'@;
put 'b3NlRGF0YWxpc3QoKSx0aGlzLnVuc2VsZWN0QWxsT3B0aW9ucygpLHRoaXMucmVzZXREYXRhbGlzdEZpbHRlcigpKX0sMTAwKX1jYWxjdWxhdGVJbnB1dFBvc2l0aW9uKCl7Y29uc3QgZD10aGlzLmlucHV0RWxlbWVudC5uYXRpdmVFbGVtZW50Py5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtk'@;
put 'LndpZHRoPjAmJmQuaGVpZ2h0PjAmJih0aGlzLmlucHV0Q2xpZW50UmVjdD17d2lkdGg6ZC53aWR0aCxib3R0b206ZC5ib3R0b219KSx0aGlzLmlubmVySGVpZ2h0PXdpbmRvdy5pbm5lckhlaWdodH1vbkRhdGFMaXN0TW91c2VFbnRlcihhKXt0aGlzLnByZXZlbnREYXRhbGlzdENsb3NlPSEw'@;
put 'fW9uRGF0YUxpc3RNb3VzZUxlYXZlKGEpe3RoaXMucHJldmVudERhdGFsaXN0Q2xvc2U9ITEsdGhpcy5pbnB1dEVsZW1lbnQubmF0aXZlRWxlbWVudC5mb2N1cygpfW9uRGF0YUxpc3RTY3JvbGwoYSl7dGhpcy5zZXRUb0Nsb3NlRGF0YWxpc3QoKX1vbkRhdGFMaXN0Q2xpY2soYSl7Y29uc3Qg'@;
put 'ZD1hLnRhcmdldDsibG9hZC1tb3JlIiE9PWQuZGF0YXNldD8udHlwZT8iT1BUSU9OIiE9PWQudGFnTmFtZXx8dGhpcy5zZXRPcHRpb25WYWx1ZShkLmlubmVyVGV4dCxkLnZhbHVlKTp0aGlzLmxvYWRNb3JlKCl9bG9hZE1vcmUoKXt0aGlzLm9uTG9hZGluZ01vcmUuZW1pdCh7bG9hZE1vcmVG'@;
put 'aW5pc2hlZDphPT57dGhpcy5sb2FkaW5nTW9yZT0hMSx0aGlzLmVuYWJsZUxvYWRNb3JlPWF9fSksdGhpcy5sb2FkaW5nTW9yZT0hMH1zZXRPcHRpb25WYWx1ZShhLGQpeyhhfHxkKSYmKGR8fChkPWEpKSxkJiYodGhpcy5wcmV2ZW50RGF0YWxpc3RDbG9zZT0hMSx0aGlzLnZhbHVlPWQsdGhp'@;
put 'cy5vbklucHV0RmlyZWQobnVsbCwhMCwiY2xpY2siKSx0aGlzLnNldFRvQ2xvc2VEYXRhbGlzdCgpKX1vbk1haW5LZXlkb3duKGEpe3N3aXRjaChhLmtleSl7Y2FzZSJBcnJvd1VwIjp0aGlzLmdldE9wdGlvbnNNb3ZlRm9jdXMoInVwIik7YnJlYWs7Y2FzZSJBcnJvd0Rvd24iOnRoaXMuZ2V0'@;
put 'T3B0aW9uc01vdmVGb2N1cygiZG93biIpO2JyZWFrO2Nhc2UiRW50ZXIiOnRoaXMuc2VsZWN0Rm9jdXNlZE9wdGlvbigpfX1vbklucHV0S2V5dXAoYSl7cmV0dXJuIXRoaXMuZGF0YWxpc3RPcGVufHwoIkVzY2FwZSI9PT1hLmtleT8oYS5zdG9wUHJvcGFnYXRpb24oKSxhLnN0b3BJbW1lZGlh'@;
put 'dGVQcm9wYWdhdGlvbigpLHRoaXMuc2V0VG9DbG9zZURhdGFsaXN0KCksITEpOnZvaWQgMCl9dW5zZWxlY3RBbGxPcHRpb25zKCl7Y29uc3QgYT1kb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKGAjZGF0YWxpc3RfJHt0aGlzLmlucHV0SWR9IG9wdGlvbmApO2ZvcihsZXQgZD0wO2Q8YS5sZW5n'@;
put 'dGg7ZCsrKWFbZF0uY2xhc3NMaXN0LnJlbW92ZSgiZm9jdXNlZCIpfXNlbGVjdEZvY3VzZWRPcHRpb24oKXtjb25zdCBhPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYCNkYXRhbGlzdF8ke3RoaXMuaW5wdXRJZH0gb3B0aW9uLmZvY3VzZWRgKTthJiZ0aGlzLm9uRGF0YUxpc3RDbGljayh7dGFy'@;
put 'Z2V0OmF9KSx0aGlzLnNldFRvQ2xvc2VEYXRhbGlzdCgpfWdldE9wdGlvbnNNb3ZlRm9jdXMoYSl7Y29uc3QgZD1kb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKGAjZGF0YWxpc3RfJHt0aGlzLmlucHV0SWR9IG9wdGlvbjpub3QoLmhpZGRlbilgKTtsZXQgaD0wO2ZvcihsZXQgZj0wO2Y8ZC5s'@;
put 'ZW5ndGg7ZisrKXtjb25zdCB2PWRbZl07aWYodi5jbGFzc0xpc3QuY29udGFpbnMoImZvY3VzZWQiKSl7aD0iZG93biI9PT1hP2YrMTpmLTEsaDwwJiYoaD1kLmxlbmd0aC0xKSxoPmQubGVuZ3RoLTEmJihoPTApLHYuY2xhc3NMaXN0LnJlbW92ZSgiZm9jdXNlZCIpO2JyZWFrfX1kW2hdLmNs'@;
put 'YXNzTGlzdC5hZGQoImZvY3VzZWQiKX1vblJlc2l6ZShhKXt0aGlzLmNhbGN1bGF0ZUlucHV0UG9zaXRpb24oKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShHZShFcykpfX1zdGF0aWN7dGhpcy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3Rv'@;
put 'cnM6W1siYXBwLWF1dG9jb21wbGV0ZSJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24oZCxoKXtpZigxJmQmJnFhKEFtdCw1KSwyJmQpe2xldCBmO0NpKGY9U2koKSkmJihoLmlucHV0RWxlbWVudD1mLmZpcnN0KX19LGhvc3RCaW5kaW5nczpmdW5jdGlvbihkLGgpezEmZCYmRnQoInJlc2l6ZSIsZnVu'@;
put 'Y3Rpb24odil7cmV0dXJuIGgub25SZXNpemUodil9LDAscUMpfSxpbnB1dHM6e2lucHV0SWQ6ImlucHV0SWQiLHBsYWNlaG9sZGVyOiJwbGFjZWhvbGRlciIsdmFsdWU6InZhbHVlIixkaXNhYmxlZDoiZGlzYWJsZWQiLHR5cGU6InR5cGUiLGF1dG9jb21wbGV0ZToiYXV0b2NvbXBsZXRlIix0'@;
put 'YWJpbmRleDoidGFiaW5kZXgiLGVtaXRPbmx5U2VsZWN0ZWQ6ImVtaXRPbmx5U2VsZWN0ZWQiLGVuYWJsZUxvYWRNb3JlOiJlbmFibGVMb2FkTW9yZSJ9LG91dHB1dHM6e29uSW5wdXRLZXlkb3duOiJvbklucHV0S2V5ZG93biIsb25JbnB1dENoYW5nZToib25JbnB1dENoYW5nZSIsdmFsdWVD'@;
put 'aGFuZ2U6InZhbHVlQ2hhbmdlIixvbkxvYWRpbmdNb3JlOiJvbkxvYWRpbmdNb3JlIn0sbmdDb250ZW50U2VsZWN0b3JzOmttdCxkZWNsczo5LHZhcnM6MTUsY29uc3RzOltbImlucHV0IiwiIl0sWyJvcHRpb25zIiwiIl0sWzEsImF1dG9jb21wbGV0ZS13cmFwcGVyIiwzLCJrZXlkb3duIl0s'@;
put 'WyJ0eXBlIiwidGV4dCIsImF1dG9jb21wbGV0ZSIsIm9mZiIsImF1dG9mb2N1cyIsIiIsInRhYmluZGV4IiwiMCIsMSwiaW5wdXQtdmFsIiwzLCJuZ01vZGVsQ2hhbmdlIiwiY2xpY2siLCJtb3VzZWVudGVyIiwiZm9jdXMiLCJmb2N1c291dCIsImtleXVwIiwiaWQiLCJwbGFjZWhvbGRlciIs'@;
put 'Im5nTW9kZWwiLCJkaXNhYmxlZCJdLFsxLCJvdmVybGF5Il0sWzEsImRhdGFsaXN0IiwzLCJjbGljayIsIm1vdXNlZW50ZXIiLCJtb3VzZWxlYXZlIiwic2Nyb2xsIiwibmdTdHlsZSIsImlkIl0sWyJkYXRhLXR5cGUiLCJsb2FkLW1vcmUiLCJjbGFzcyIsImxvYWQtbW9yZSIsNCwibmdJZiJd'@;
put 'LFsiZGF0YS10eXBlIiwibG9hZC1tb3JlIiwxLCJsb2FkLW1vcmUiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZCxoKXtpZigxJmQpe2NvbnN0IGY9TG4oKTtzYSgpLGRlKDAsImRpdiIsMiksRnQoImtleWRvd24iLGZ1bmN0aW9uKE0pe3JldHVybiB3dChmKSxDdChoLm9uTWFpbktleWRvd24oTSkp'@;
put 'fSksZGUoMSwiaW5wdXQiLDMsMCksZ2koIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKE0pe3JldHVybiB3dChmKSxtaShoLnZhbHVlLE0pfHwoaC52YWx1ZT1NKSxDdChNKX0pLEZ0KCJjbGljayIsZnVuY3Rpb24oTSl7cmV0dXJuIHd0KGYpLEN0KGgub25JbnB1dENsaWNrKE0pKX0pKCJuZ01v'@;
put 'ZGVsQ2hhbmdlIixmdW5jdGlvbihNKXtyZXR1cm4gd3QoZiksQ3QoaC5vbklucHV0RmlyZWQoTSkpfSkoIm1vdXNlZW50ZXIiLGZ1bmN0aW9uKE0pe3JldHVybiB3dChmKSxDdChoLm9uSW5wdXRNb3VzZWVudGVyKE0pKX0pKCJmb2N1cyIsZnVuY3Rpb24oTSl7cmV0dXJuIHd0KGYpLEN0KGgu'@;
put 'b25JbnB1dEZvY3VzaW4oTSkpfSkoImZvY3Vzb3V0IixmdW5jdGlvbihNKXtyZXR1cm4gd3QoZiksQ3QoaC5vbklucHV0Rm9jdXNvdXQoTSkpfSkoImtleXVwIixmdW5jdGlvbihNKXtyZXR1cm4gd3QoZiksQ3QoaC5vbklucHV0S2V5dXAoTSkpfSksaGUoKSxHdCgzLCJkaXYiLDQpLGRlKDQs'@;
put 'ImRpdiIsNSksRnQoImNsaWNrIixmdW5jdGlvbihNKXtyZXR1cm4gd3QoZiksQ3QoaC5vbkRhdGFMaXN0Q2xpY2soTSkpfSkoIm1vdXNlZW50ZXIiLGZ1bmN0aW9uKE0pe3JldHVybiB3dChmKSxDdChoLm9uRGF0YUxpc3RNb3VzZUVudGVyKE0pKX0pKCJtb3VzZWxlYXZlIixmdW5jdGlvbihN'@;
put 'KXtyZXR1cm4gd3QoZiksQ3QoaC5vbkRhdGFMaXN0TW91c2VMZWF2ZShNKSl9KSgic2Nyb2xsIixmdW5jdGlvbihNKXtyZXR1cm4gd3QoZiksQ3QoaC5vbkRhdGFMaXN0U2Nyb2xsKE0pKX0pLGRlKDUsImRpdiIsbnVsbCwxKSxZcig3KSxoZSgpLGd0KDgsSW10LDIsMSwib3B0aW9uIiw2KSxo'@;
put 'ZSgpKCl9aWYoMiZkKXtjb25zdCBmPWhhKDYpO2ZlKCksTWUoImlkIixoLmlucHV0SWQpKCJwbGFjZWhvbGRlciIsaC5wbGFjZWhvbGRlcikscGkoIm5nTW9kZWwiLGgudmFsdWUpLE1lKCJkaXNhYmxlZCIsaC5kaXNhYmxlZCksaHIoImxpc3QiLCJkYXRhbGlzdF8iK2guaW5wdXRJZCksZmUo'@;
put 'MiksVHIoImhpZGRlbiIsIWguZGF0YWxpc3RPcGVuKSxmZSgpLFRyKCJoaWRkZW4iLCFoLmRhdGFsaXN0T3BlbiksTWUoIm5nU3R5bGUiLGxwKDEyLERtdCxoLmlucHV0Q2xpZW50UmVjdC53aWR0aCxoLmlubmVySGVpZ2h0JiZoLmlucHV0Q2xpZW50UmVjdC5ib3R0b20/aC5pbm5lckhlaWdo'@;
put 'dC1oLmlucHV0Q2xpZW50UmVjdC5ib3R0b206dm9pZCAwKSkoImlkIiwiZGF0YWxpc3RfIitoLmlucHV0SWQpLGZlKDQpLE1lKCJuZ0lmIixmLmNoaWxkcmVuLmxlbmd0aD4wJiZoLmVuYWJsZUxvYWRNb3JlKX19LGRlcGVuZGVuY2llczpbYmEsbm9lLEEyLGsyLHFsLG5sLCRzXSxlbmNhcHN1'@;
put 'bGF0aW9uOjJ9KX19cmV0dXJuIGN9KSgpLFJtdD0oKCk9PntjbGFzcyBje3RyYW5zZm9ybShhLGQpe2lmKCJzdHJpbmciPT10eXBlb2YgYSYmYS5sZW5ndGg8MSlyZXR1cm4gYTtzd2l0Y2goZCl7Y2FzZSJkYXRlIjpyZXR1cm4gT28oYSwiRERNTU1ZWVlZOmhoOm1tOnNzIikuZm9ybWF0KCJE'@;
put 'RC9NTS9ZWVlZIik7Y2FzZSJ0aW1lIjp7aWYoInN0cmluZyIhPXR5cGVvZiBhKXRocm93IG5ldyBFcnJvcigiRXJyb3IgcGFyc2luZyB0aW1lLiBWYWx1ZSBpcyBub3Qgc3RyaW5nLiIpO2NvbnN0IGg9cGFyc2VJbnQoYS5zcGxpdCgiOiIpWzBdKSxmPXBhcnNlSW50KGEuc3BsaXQoIjoiKVsx'@;
put 'XSksdj1wYXJzZUludChhLnNwbGl0KCI6IilbMl0pO3JldHVybmAke2g8MTA/IjAiK2g6aH06JHtmPDEwPyIwIitmOmZ9OiR7djwxMD8iMCIrdjp2fWB9fXJldHVybiJzdHJpbmciPT10eXBlb2YgYT9hOmEudG9TdHJpbmcoKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0'@;
put 'dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1cGlwZT1sbCh7bmFtZToiZGF0ZVRpbWVGb3JtYXR0ZXIiLHR5cGU6YyxwdXJlOiEwfSl9fXJldHVybiBjfSkoKTtjb25zdCBMbXQ9WyJpbnB1dCJdLE9tdD1bIioiXTtmdW5jdGlvbiBQbXQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4o'@;
put 'KTtzaSgwKSxMZSgxLCIgLyAiKSxkZSgyLCJzcGFuIiw1KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KFJlKDIpLm9uQ2hhbmdlTGFiZWwoInNlY29uZCIpKX0pLExlKDMpLGhlKCksbGkoKX1pZigyJmMpe2NvbnN0IGE9UmUoMik7ZmUoMiksVHIoInZhbHVlLXR5cGUt'@;
put 'c2VsZWN0ZWQiLCJzZWNvbmQiPT09YS5sYWJlbFNlbGVjdGVkKSxmZSgpLHdyKGEuc2Vjb25kTGFiZWwpfX1mdW5jdGlvbiBGbXQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJsYWJlbCIsNCkoMSwic3BhbiIsNSksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxD'@;
put 'dChSZSgpLm9uQ2hhbmdlTGFiZWwoImZpcnN0IikpfSksTGUoMiksaGUoKSxndCgzLFBtdCw0LDMsIm5nLWNvbnRhaW5lciIsNiksaGUoKX1pZigyJmMpe2NvbnN0IGE9UmUoKTtUcigic2Vjb25kTGFiZWxBY3RpdmUiLGEuc2Vjb25kTGFiZWwmJmEuc2Vjb25kTGFiZWwubGVuZ3RoPjApLGZl'@;
put 'KCksVHIoInZhbHVlLXR5cGUtc2VsZWN0ZWQiLCJmaXJzdCI9PT1hLmxhYmVsU2VsZWN0ZWQpLGZlKCksd3IoYS5sYWJlbCksZmUoKSxNZSgibmdJZiIsYS5zZWNvbmRMYWJlbCl9fWZ1bmN0aW9uIEhtdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO3NpKDApLGRlKDEsImNsci1kYXRlLWNv'@;
put 'bnRhaW5lciIpKDIsImlucHV0Iiw3KSxlbCgzLCJkYXRlVGltZUZvcm1hdHRlciIpLEZ0KCJjbHJEYXRlQ2hhbmdlIixmdW5jdGlvbihoKXtyZXR1cm4gd3QoYSksQ3QoUmUoKS5vbkRhdGVJbnB1dEZpcmVkKGgpKX0pKCJmb2N1cyIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoUmUoKS5p'@;
put 'bnB1dEZvY3VzZWQ9ITApfSkoImZvY3Vzb3V0IixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChSZSgpLmlucHV0Rm9jdXNlZD0hMSl9KSgiZm9jdXNpbiIsZnVuY3Rpb24oaCl7cmV0dXJuIHd0KGEpLEN0KFJlKCkub25Gb2N1c2luSW5wdXQoaCkpfSkoIm1vdXNlb3ZlciIsZnVuY3Rpb24o'@;
put 'KXtyZXR1cm4gd3QoYSksQ3QoUmUoKS5vbklucHV0TW91c2VPdmVyKCkpfSkoIm1vdXNlb3V0IixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChSZSgpLm9uSW5wdXRNb3VzZU91dCgpKX0pLGhlKCkoKSxsaSgpfWlmKDImYyl7Y29uc3QgYT1SZSgpO2ZlKDIpLE1lKCJpZCIsYS5pbnB1dElk'@;
put 'KSgicGxhY2Vob2xkZXIiLHo4KDMsNSxhLnRlbXAsImRhdGUiKSkoImNsckRhdGUiLGEudmFsdWUpKCJkaXNhYmxlZCIsYS5kaXNhYmxlZCksaHIoImxpc3QiLCJkYXRhbGlzdF8iK2EuaW5wdXRJZCl9fWZ1bmN0aW9uIE5tdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO3NpKDApLGRlKDEs'@;
put 'ImlucHV0Iiw4KSxGdCgiaW5wdXQiLGZ1bmN0aW9uKGgpe3JldHVybiB3dChhKSxDdChSZSgpLm9uSW5wdXRGaXJlZChoKSl9KSgiZm9jdXMiLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KFJlKCkuaW5wdXRGb2N1c2VkPSEwKX0pKCJmb2N1c291dCIsZnVuY3Rpb24oKXtyZXR1cm4gd3Qo'@;
put 'YSksQ3QoUmUoKS5pbnB1dEZvY3VzZWQ9ITEpfSkoImZvY3VzaW4iLGZ1bmN0aW9uKGgpe3JldHVybiB3dChhKSxDdChSZSgpLm9uRm9jdXNpbklucHV0KGgpKX0pKCJtb3VzZW92ZXIiLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KFJlKCkub25JbnB1dE1vdXNlT3ZlcigpKX0pKCJtb3Vz'@;
put 'ZW91dCIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoUmUoKS5vbklucHV0TW91c2VPdXQoKSl9KSxoZSgpLGxpKCl9aWYoMiZjKXtjb25zdCBhPVJlKCk7ZmUoKSxNZSgidmFsdWUiLGEudmFsdWUpKCJpZCIsYS5pbnB1dElkKSgiZGlzYWJsZWQiLGEuZGlzYWJsZWQpLGhyKCJsaXN0Iiwi'@;
put 'ZGF0YWxpc3RfIithLmlucHV0SWQpfX1mdW5jdGlvbiBWbXQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtzaSgwKSxkZSgxLCJhcHAtYXV0b2NvbXBsZXRlIiw5LDApLEZ0KCJvbklucHV0Q2hhbmdlIixmdW5jdGlvbihoKXtyZXR1cm4gd3QoYSksQ3QoUmUoKS5vbklucHV0RmlyZWQoaCkp'@;
put 'fSkoIm9uTG9hZGluZ01vcmUiLGZ1bmN0aW9uKGgpe3JldHVybiB3dChhKSxDdChSZSgpLmF1dG9jb21wbGV0ZUxvYWRpbmdNb3JlKGgpKX0pLFlyKDMpLGhlKCksbGkoKX1pZigyJmMpe2NvbnN0IGE9UmUoKTtmZSgpLE1lKCJpbnB1dElkIixhLmlucHV0SWQpKCJ2YWx1ZSIsKG51bGw9PWEu'@;
put 'dmFsdWU/bnVsbDphLnZhbHVlLnRvU3RyaW5nKCkpfHwiIikoImVuYWJsZUxvYWRNb3JlIixhLmVuYWJsZUxvYWRNb3JlKSgiZW1pdE9ubHlTZWxlY3RlZCIsYS5lbWl0T25seVNlbGVjdGVkKSgiZGlzYWJsZWQiLGEuZGlzYWJsZWQpfX1sZXQgRDZlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0'@;
put 'b3IoKXt0aGlzLmlucHV0SWQ9IiIsdGhpcy52YWx1ZT0iIix0aGlzLmRpc2FibGVkPSExLHRoaXMudHlwZT0idGV4dCIsdGhpcy5kaXNhYmxlU29mdHNlbGVjdD0hMSx0aGlzLmVtaXRPbmx5U2VsZWN0ZWQ9ITEsdGhpcy5lbmFibGVMb2FkTW9yZT0hMSx0aGlzLnZhbHVlQ2hhbmdlPW5ldyBL'@;
put 'cix0aGlzLm9uSW5wdXRFdmVudD1uZXcgS3IsdGhpcy5mb2N1c2luSW5wdXQ9bmV3IEtyLHRoaXMub25BdXRvY29tcGxldGVMb2FkaW5nTW9yZT1uZXcgS3IsdGhpcy5zZWxlY3RlZExhYmVsQ2hhbmdlPW5ldyBLcix0aGlzLnRlbXA9IiIsdGhpcy5pbnB1dEZvY3VzZWQ9ITEsdGhpcy5sYWJl'@;
put 'bFNlbGVjdGVkPSJmaXJzdCJ9bmdPbkNoYW5nZXMoYSl7YS52YWx1ZSYmYS52YWx1ZS5jdXJyZW50VmFsdWUhPT1hLnZhbHVlLnByZXZpb3VzVmFsdWUmJnRoaXMudmFsdWVDaGFuZ2UuZW1pdChhLnZhbHVlLmN1cnJlbnRWYWx1ZSl9bmdPbkluaXQoKXt9YXV0b2NvbXBsZXRlTG9hZGluZ01v'@;
put 'cmUoYSl7dGhpcy5vbkF1dG9jb21wbGV0ZUxvYWRpbmdNb3JlLmVtaXQoYSl9b25JbnB1dEZpcmVkKGEpe2NvbnN0IGQ9YS50YXJnZXQudmFsdWU7dGhpcy50ZW1wPWQsdGhpcy52YWx1ZUNoYW5nZS5lbWl0KGQpLHRoaXMub25JbnB1dEV2ZW50LmVtaXQoYSl9b25EYXRlSW5wdXRGaXJlZChh'@;
put 'KXt0aGlzLnRlbXA9YSx0aGlzLnZhbHVlQ2hhbmdlLmVtaXQoYSksdGhpcy5vbklucHV0RXZlbnQuZW1pdChhKX1vbklucHV0TW91c2VPdXQoKXt0aGlzLmRpc2FibGVTb2Z0c2VsZWN0fHwodGhpcy52YWx1ZT10aGlzLnRlbXAsdGhpcy50ZW1wPSIiKX1vbklucHV0TW91c2VPdmVyKCl7dGhp'@;
put 'cy5kaXNhYmxlU29mdHNlbGVjdHx8KHRoaXMudGVtcD10aGlzLnZhbHVlP3RoaXMudmFsdWU6IiIsdGhpcy52YWx1ZT0iIil9b25Gb2N1c2luSW5wdXQoYSl7dGhpcy5mb2N1c2luSW5wdXQuZW1pdChhKX1vbkNoYW5nZUxhYmVsKGEpe3RoaXMubGFiZWxTZWxlY3RlZD1hLHRoaXMuc2VsZWN0'@;
put 'ZWRMYWJlbENoYW5nZS5lbWl0KCJmaXJzdCI9PT1hP3RoaXMubGFiZWw6dGhpcy5zZWNvbmRMYWJlbCl9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAtc29m'@;
put 'dC1zZWxlY3QiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGQsaCl7aWYoMSZkJiZxYShMbXQsNSksMiZkKXtsZXQgZjtDaShmPVNpKCkpJiYoaC5pbnB1dEVsZW1lbnQ9Zi5maXJzdCl9fSxpbnB1dHM6e2lucHV0SWQ6ImlucHV0SWQiLGxhYmVsOiJsYWJlbCIsc2Vjb25kTGFiZWw6InNlY29uZExh'@;
put 'YmVsIix2YWx1ZToidmFsdWUiLGRpc2FibGVkOiJkaXNhYmxlZCIsdHlwZToidHlwZSIsZGlzYWJsZVNvZnRzZWxlY3Q6ImRpc2FibGVTb2Z0c2VsZWN0IixlbWl0T25seVNlbGVjdGVkOiJlbWl0T25seVNlbGVjdGVkIixlbmFibGVMb2FkTW9yZToiZW5hYmxlTG9hZE1vcmUifSxvdXRwdXRz'@;
put 'Ont2YWx1ZUNoYW5nZToidmFsdWVDaGFuZ2UiLG9uSW5wdXRFdmVudDoib25JbnB1dEV2ZW50Iixmb2N1c2luSW5wdXQ6ImZvY3VzaW5JbnB1dCIsb25BdXRvY29tcGxldGVMb2FkaW5nTW9yZToib25BdXRvY29tcGxldGVMb2FkaW5nTW9yZSIsc2VsZWN0ZWRMYWJlbENoYW5nZToic2VsZWN0'@;
put 'ZWRMYWJlbENoYW5nZSJ9LGZlYXR1cmVzOlt3bF0sbmdDb250ZW50U2VsZWN0b3JzOk9tdCxkZWNsczo1LHZhcnM6NSxjb25zdHM6W1siaW5wdXQiLCIiXSxbImNsYXNzIiwiY2xyLWNvbnRyb2wtbGFiZWwiLDMsInNlY29uZExhYmVsQWN0aXZlIiw0LCJuZ0lmIl0sWzMsIm5nU3dpdGNoIl0s'@;
put 'WzQsIm5nU3dpdGNoQ2FzZSJdLFsxLCJjbHItY29udHJvbC1sYWJlbCJdLFszLCJjbGljayJdLFs0LCJuZ0lmIl0sWyJ0eXBlIiwiZGF0ZSIsImNsckRhdGUiLCIiLDMsImNsckRhdGVDaGFuZ2UiLCJmb2N1cyIsImZvY3Vzb3V0IiwiZm9jdXNpbiIsIm1vdXNlb3ZlciIsIm1vdXNlb3V0Iiwi'@;
put 'aWQiLCJwbGFjZWhvbGRlciIsImNsckRhdGUiLCJkaXNhYmxlZCJdLFsidHlwZSIsInRpbWUiLCJzdGVwIiwiMSIsMSwiaW5wdXQtdmFsIiwzLCJpbnB1dCIsImZvY3VzIiwiZm9jdXNvdXQiLCJmb2N1c2luIiwibW91c2VvdmVyIiwibW91c2VvdXQiLCJ2YWx1ZSIsImlkIiwiZGlzYWJsZWQi'@;
put 'XSxbInR5cGUiLCJ0ZXh0IiwiYXV0b2NvbXBsZXRlIiwib2ZmIiwiYXV0b2ZvY3VzIiwiIiwxLCJpbnB1dC12YWwiLDMsIm9uSW5wdXRDaGFuZ2UiLCJvbkxvYWRpbmdNb3JlIiwiaW5wdXRJZCIsInZhbHVlIiwiZW5hYmxlTG9hZE1vcmUiLCJlbWl0T25seVNlbGVjdGVkIiwiZGlzYWJsZWQi'@;
put 'XV0sdGVtcGxhdGU6ZnVuY3Rpb24oZCxoKXsxJmQmJihzYSgpLGd0KDAsRm10LDQsNiwibGFiZWwiLDEpLHNpKDEsMiksZ3QoMixIbXQsNCw4LCJuZy1jb250YWluZXIiLDMpKDMsTm10LDIsNCwibmctY29udGFpbmVyIiwzKSg0LFZtdCw0LDUsIm5nLWNvbnRhaW5lciIsMyksbGkoKSksMiZk'@;
put 'JiYoTWUoIm5nSWYiLGgubGFiZWwpLGZlKCksTWUoIm5nU3dpdGNoIixoLnR5cGUpLGZlKCksTWUoIm5nU3dpdGNoQ2FzZSIsImRhdGUiKSxmZSgpLE1lKCJuZ1N3aXRjaENhc2UiLCJ0aW1lIiksZmUoKSxNZSgibmdTd2l0Y2hDYXNlIiwidGV4dCIpKX0sZGVwZW5kZW5jaWVzOltiYSxTMixj'@;
put 'cCxkcyxZeCxKTCxzRyxrNmUsUm10XSxlbmNhcHN1bGF0aW9uOjJ9KX19cmV0dXJuIGN9KSgpLFN3PSgoKT0+e2NsYXNzIGN7c2V0IG5nVmFyKGEpe3RoaXMuY29udGV4dC4kaW1wbGljaXQ9dGhpcy5jb250ZXh0Lm5nVmFyPWEsdGhpcy5oYXNWaWV3fHwodGhpcy52Y1JlZi5jcmVhdGVFbWJl'@;
put 'ZGRlZFZpZXcodGhpcy50ZW1wbGF0ZVJlZix0aGlzLmNvbnRleHQpLHRoaXMuaGFzVmlldz0hMCl9Y29uc3RydWN0b3IoYSxkKXt0aGlzLnRlbXBsYXRlUmVmPWEsdGhpcy52Y1JlZj1kLHRoaXMuY29udGV4dD17JGltcGxpY2l0Om51bGwsbmdWYXI6bnVsbH0sdGhpcy5oYXNWaWV3PSExfXN0'@;
put 'YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKEdlKFNsKSxHZShEbykpfX1zdGF0aWN7dGhpcy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwibmdWYXIiLCIiXV0saW5wdXRzOntuZ1ZhcjoibmdWYXIifX0pfX1yZXR1cm4gY30pKCks'@;
put 'Qm10PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5oZWxwZXJTZXJ2aWNlPWF9dHJhbnNmb3JtKGEsZD0iZGF5cyIsaD0hMSl7aWYodm9pZCAwPT09YSYmKGE9IiIpLCJzdHJpbmciIT10eXBlb2YgYSYmKGE9YS50b1N0cmluZygpKSwwPT09YS5sZW5ndGgpe2lmKCJkYXlzIj09'@;
put 'PWQpcmV0dXJuIG51bGw7aWYoInNlY29uZHMiPT09ZClyZXR1cm4gaD8iMTE6MDA6MDAiOm51bGx9bGV0IGY9dGhpcy5oZWxwZXJTZXJ2aWNlLmNvbnZlcnRTYXNEYXlzVG9Kc0RhdGUoYSxkKTtpZig0PT09YS5zcGxpdCgiOiIpLmxlbmd0aCl7Y29uc3QgTT1hLnNwbGl0KCI6Iik7Zj1uZXcg'@;
put 'RGF0ZShNWzBdKSxmLnNldEhvdXJzKHBhcnNlSW50KE1bMV0pKSxmLnNldE1pbnV0ZXMocGFyc2VJbnQoTVsyXSkpLGYuc2V0U2Vjb25kcyhwYXJzZUludChNWzNdKSl9ZWxzZSBpc05hTihOdW1iZXIoYSkpJiYoZj1uZXcgRGF0ZShhKSk7bGV0IHY9YCR7dGhpcy5oZWxwZXJTZXJ2aWNlLmFk'@;
put 'ZExlYWRpbmdaZXJvKGYuZ2V0SG91cnMoKS50b1N0cmluZygpKX06JHt0aGlzLmhlbHBlclNlcnZpY2UuYWRkTGVhZGluZ1plcm8oZi5nZXRNaW51dGVzKCkudG9TdHJpbmcoKSl9OiR7dGhpcy5oZWxwZXJTZXJ2aWNlLmFkZExlYWRpbmdaZXJvKGYuZ2V0U2Vjb25kcygpLnRvU3RyaW5nKCkp'@;
put 'fWA7cmV0dXJuIGg/djpmfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKEdlKFN1LDE2KSl9fXN0YXRpY3t0aGlzLlx1MDI3NXBpcGU9bGwoe25hbWU6InNhc1RvSnNEYXRlIix0eXBlOmMscHVyZTohMH0pfX1yZXR1cm4gY30pKCksam10PSgoKT0+'@;
put 'e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5oZWxwZXJTZXJ2aWNlPWF9dHJhbnNmb3JtKGEpe2lmKG51bGw9PWF8fCIiPT09YSlyZXR1cm4iIjtsZXQgZCxoLGY7aWYoInN0cmluZyI9PXR5cGVvZiBhJiYzPT09YS5zcGxpdCgiOiIpLmxlbmd0aCl7Y29uc3Qgdj1hLnNwbGl0KCI6Iik7'@;
put 'ZD12WzBdLGg9dlsxXSxmPXZbMl19ZWxzZSJudW1iZXIiIT10eXBlb2YgYSYmKGE9cGFyc2VJbnQoYSkpLGQ9TWF0aC5mbG9vcihhLzM2MDApLGg9TWF0aC5mbG9vcihhJTM2MDAvNjApLGY9TWF0aC5mbG9vcihhJTM2MDAlNjApO3JldHVybmAke3RoaXMuaGVscGVyU2VydmljZS5hZGRMZWFk'@;
put 'aW5nWmVybyhkKX06JHt0aGlzLmhlbHBlclNlcnZpY2UuYWRkTGVhZGluZ1plcm8oaCl9OiR7dGhpcy5oZWxwZXJTZXJ2aWNlLmFkZExlYWRpbmdaZXJvKGYpfWB9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoR2UoU3UsMTYpKX19c3RhdGlje3Ro'@;
put 'aXMuXHUwMjc1cGlwZT1sbCh7bmFtZToic2Vjb25kc1BhcnNlciIsdHlwZTpjLHB1cmU6ITB9KX19cmV0dXJuIGN9KSgpO2NvbnN0IHptdD0oYyxsLGEpPT4oe3F1ZXJ5OmMscXVlcnlJbmRleDpsLGNsYXVzZUluZGV4OmF9KSxVbXQ9KGMsbCxhLGQpPT4oe3F1ZXJ5OmMscXVlcnlJbmRleDps'@;
put 'LGNsYXVzZUluZGV4OmEsaXNEYXRlVGltZTpkfSksWm10PShjLGwsYSxkKT0+KHtyYW5nZToic3RhcnQiLHF1ZXJ5OmMscXVlcnlWYWx1ZUluZGV4OjAscXVlcnlJbmRleDpsLGNsYXVzZUluZGV4OmEsaXNEYXRlVGltZTpkfSksV210PShjLGwsYSxkKT0+KHtyYW5nZToiZW5kIixxdWVyeTpj'@;
put 'LHF1ZXJ5VmFsdWVJbmRleDoxLHF1ZXJ5SW5kZXg6bCxjbGF1c2VJbmRleDphLGlzRGF0ZVRpbWU6ZH0pO2Z1bmN0aW9uIFltdChjLGwpe2lmKDEmYyYmKGRlKDAsIm9wdGlvbiIsMjIpLExlKDEpLGhlKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtNZSgic2VsZWN0ZWQiLFJlKCkubG9n'@;
put 'aWNPcGVyYXRvcnNbMF0pLGZlKCksRHIoIiAiLGEsIiAiKX19ZnVuY3Rpb24gR210KGMsbCl7MSZjJiYoZGUoMCwiZGl2IiwyMyksTGUoMSwiXG4gICAgICAgICIpLEd0KDIsInByb2dyZXNzIiksTGUoMywiXG4gICAgICAiKSxoZSgpKX1mdW5jdGlvbiAkbXQoYyxsKXsxJmMmJkd0KDAsImRp'@;
put 'diIpfWZ1bmN0aW9uIEttdChjLGwpe2lmKDEmYyYmKGRlKDAsIm9wdGlvbiIsMjIpLExlKDEpLGhlKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtNZSgic2VsZWN0ZWQiLFJlKDIpLmxvZ2ljT3BlcmF0b3JzWzBdKSxmZSgpLERyKCIgIixhLCIgIil9fWZ1bmN0aW9uIHFtdChjLGwpe2lm'@;
put 'KDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImJ1dHRvbiIsMzIpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoUmUoMikuYWRkR3JvdXBDbGF1c2UoKSl9KSxHdCgxLCJjbHItaWNvbiIsMzMpLGRlKDIsInNwYW4iKSxMZSgzLCJHcm91cCIpLGhlKCkoKX19ZnVuY3Rpb24g'@;
put 'WG10KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiY2xyLWljb24iLDM0KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1SZSgpLmluZGV4O3JldHVybiBDdChSZSgpLnJlbW92ZUdyb3VwQ2xhdXNlKGgpKX0pLGhlKCl9fWZ1bmN0aW9uIEptdChjLGwpe2lmKDEm'@;
put 'YyYmKGRlKDAsIm9wdGlvbiIpLExlKDEpLGhlKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtmZSgpLERyKCIgIixhLk5BTUUsIiAiKX19ZnVuY3Rpb24gUW10KGMsbCl7aWYoMSZjJiYoZGUoMCwib3B0aW9uIiksTGUoMSksaGUoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O2ZlKCks'@;
put 'd3IoYSl9fWZ1bmN0aW9uIGU2dChjLGwpezEmYyYmRmwoMCl9ZnVuY3Rpb24gdDZ0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiZGl2Iiw1MSkoMSwiYnV0dG9uIiw1MiksRnQoImNsaWNrIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9UmUoMikuaW5kZXgsZj1SZSgpLmluZGV4'@;
put 'LHY9UmUoKTtyZXR1cm4gdi5jdXJyZW50UXVlcnlJbmRleD1oLEN0KHYuY3VycmVudENsYXVzZUluZGV4PWYpfSksTGUoMiwiIENob29zZSB2YWx1ZXMgIiksaGUoKSxndCgzLGU2dCwxLDAsIm5nLWNvbnRhaW5lciIsNTMpLGhlKCl9aWYoMiZjKXtjb25zdCBhPVJlKDIpLGQ9YS4kaW1wbGlj'@;
put 'aXQsaD1hLmluZGV4LGY9UmUoKS5pbmRleDtSZSgpO2NvbnN0IHY9aGEoMzcpO2ZlKDMpLE1lKCJuZ1RlbXBsYXRlT3V0bGV0Iix2KSgibmdUZW1wbGF0ZU91dGxldENvbnRleHQiLHBNKDIsem10LGQsaCxmKSl9fWZ1bmN0aW9uIG42dChjLGwpezEmYyYmRmwoMCl9ZnVuY3Rpb24gcjZ0KGMs'@;
put 'bCl7aWYoMSZjJiYoZGUoMCwiZGl2Iiw1NCksZ3QoMSxuNnQsMSwwLCJuZy1jb250YWluZXIiLDUzKSxoZSgpKSwyJmMpe2NvbnN0IGE9UmUoKS5uZ1ZhcixkPVJlKCksaD1kLiRpbXBsaWNpdCxmPWQuaW5kZXgsdj1SZSgpLmluZGV4LE09UmUoKSxEPWhhKDMxKSxaPWhhKDMzKTtmZSgpLE1l'@;
put 'KCJuZ1RlbXBsYXRlT3V0bGV0IixhJiZNLnVzZVBpY2tlcnM/RDpaKSgibmdUZW1wbGF0ZU91dGxldENvbnRleHQiLEpJKDIsVW10LGgsZix2LGEpKX19ZnVuY3Rpb24gaTZ0KGMsbCl7MSZjJiZGbCgwKX1mdW5jdGlvbiBhNnQoYyxsKXsxJmMmJkZsKDApfWZ1bmN0aW9uIG82dChjLGwpe2lm'@;
put 'KDEmYyYmKGRlKDAsImRpdiIsNTUpKDEsImRpdiIsNTYpLGd0KDIsaTZ0LDEsMCwibmctY29udGFpbmVyIiw1MyksaGUoKSxkZSgzLCJkaXYiLDU3KSxndCg0LGE2dCwxLDAsIm5nLWNvbnRhaW5lciIsNTMpLGhlKCkoKSksMiZjKXtjb25zdCBhPVJlKCkubmdWYXIsZD1SZSgpLGg9ZC4kaW1w'@;
put 'bGljaXQsZj1kLmluZGV4LHY9UmUoKS5pbmRleCxNPVJlKCksRD1oYSgzMSksWj1oYSgzNSk7ZmUoMiksTWUoIm5nVGVtcGxhdGVPdXRsZXQiLGEmJk0udXNlUGlja2Vycz9EOlopKCJuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dCIsSkkoNCxabXQsaCxmLHYsYSkpLGZlKDIpLE1lKCJuZ1RlbXBs'@;
put 'YXRlT3V0bGV0IixhJiZNLnVzZVBpY2tlcnM/RDpaKSgibmdUZW1wbGF0ZU91dGxldENvbnRleHQiLEpJKDksV210LGgsZix2LGEpKX19ZnVuY3Rpb24gczZ0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiZGl2Iiw1OCkoMSwibGFiZWwiLDcpLExlKDIsIlZhbHVlIiksaGUoKSxk'@;
put 'ZSgzLCJpbnB1dCIsNTkpLGdpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPVJlKDIpLiRpbXBsaWNpdDtyZXR1cm4gbWkoZi52YWx1ZSxoKXx8KGYudmFsdWU9aCksQ3QoaCl9KSxGdCgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1S'@;
put 'ZSgyKS5pbmRleCx2PVJlKCkuaW5kZXg7cmV0dXJuIEN0KFJlKCkuc2V0VmFyaWFibGVWYWx1ZXMoaCxmLHYpKX0pLGhlKCkoKX1pZigyJmMpe2NvbnN0IGE9UmUoMikuJGltcGxpY2l0O2ZlKDMpLHBpKCJuZ01vZGVsIixhLnZhbHVlKX19ZnVuY3Rpb24gbDZ0KGMsbCl7aWYoMSZjJiYoZGUo'@;
put 'MCwiZGl2Iiw0NiksZ3QoMSx0NnQsNCw2LCJkaXYiLDQ3KSgyLHI2dCwyLDcsImRpdiIsNDgpKDMsbzZ0LDUsMTQsImRpdiIsNDkpKDQsczZ0LDQsMSwiZGl2Iiw1MCksaGUoKSksMiZjKXtjb25zdCBhPVJlKCkuJGltcGxpY2l0O2ZlKCksTWUoIm5nSWYiLCJJTiI9PT1hLm9wZXJhdG9yfHwi'@;
put 'Tk9UIElOIj09PWEub3BlcmF0b3IpLGZlKCksTWUoIm5nSWYiLCJCRVRXRUVOIiE9PWEub3BlcmF0b3ImJiJJTiIhPT1hLm9wZXJhdG9yJiYiTk9UIElOIiE9PWEub3BlcmF0b3ImJiJMSUtFIiE9PWEub3BlcmF0b3ImJiJDT05UQUlOUyIhPT1hLm9wZXJhdG9yJiYiQkVHSU5TX1dJVEgiIT09'@;
put 'YS5vcGVyYXRvciksZmUoKSxNZSgibmdJZiIsIkJFVFdFRU4iPT09YS5vcGVyYXRvciksZmUoKSxNZSgibmdJZiIsIkxJS0UiPT09YS5vcGVyYXRvcnx8IkJFR0lOU19XSVRIIj09PWEub3BlcmF0b3J8fCJDT05UQUlOUyI9PT1hLm9wZXJhdG9yKX19ZnVuY3Rpb24gYzZ0KGMsbCl7aWYoMSZj'@;
put 'KXtjb25zdCBhPUxuKCk7ZGUoMCwiZGl2IiwxMCkoMSwiZGl2IiwzNSkoMiwiZGl2IiwzNikoMywiYXBwLXNvZnQtc2VsZWN0IiwzNyksZ2koInZhbHVlQ2hhbmdlIixmdW5jdGlvbihoKXtjb25zdCBmPXd0KGEpLiRpbXBsaWNpdDtyZXR1cm4gbWkoZi52YXJpYWJsZSxoKXx8KGYudmFyaWFi'@;
put 'bGU9aCksQ3QoaCl9KSxGdCgib25JbnB1dEV2ZW50IixmdW5jdGlvbihoKXtjb25zdCBmPXd0KGEpLHY9Zi4kaW1wbGljaXQsTT1mLmluZGV4LEQ9UmUoKS5pbmRleDtyZXR1cm4gQ3QoUmUoKS52YXJpYWJsZUlucHV0Q2hhbmdlKHYudmFyaWFibGUsTSxELGgpKX0pLGd0KDQsSm10LDIsMSwi'@;
put 'b3B0aW9uIiwzOCksaGUoKSgpKCksZGUoNSwiZGl2IiwzOSkoNiwiY2xyLXNlbGVjdC1jb250YWluZXIiKSg3LCJsYWJlbCIpLExlKDgsIk9wZXJhdG9yIiksaGUoKSxkZSg5LCJzZWxlY3QiLDQwKSxnaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7Y29uc3QgZj13dChhKS4kaW1wbGlj'@;
put 'aXQ7cmV0dXJuIG1pKGYub3BlcmF0b3IsaCl8fChmLm9wZXJhdG9yPWgpLEN0KGgpfSksRnQoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKCl7Y29uc3QgaD13dChhKSxmPWguJGltcGxpY2l0LHY9aC5pbmRleCxNPVJlKCkuaW5kZXg7cmV0dXJuIEN0KFJlKCkuc2V0VmFyaWFibGVPcGVyYXRv'@;
put 'cih2LGYub3BlcmF0b3IsTSkpfSksZ3QoMTAsUW10LDIsMSwib3B0aW9uIiwzOCksaGUoKSgpKCksZ3QoMTEsbDZ0LDUsNCwiZGl2Iiw0MSksZGUoMTIsImRpdiIsNDIpKDEzLCJidXR0b24iLDQzKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7Y29uc3QgaD13dChhKS5pbmRleCxmPVJlKCkuaW5k'@;
put 'ZXg7cmV0dXJuIEN0KFJlKCkucmVtb3ZlQ2xhdXNlKGgsZikpfSksR3QoMTQsImNsci1pY29uIiw0NCkoMTUsInNwYW4iKSxoZSgpLGRlKDE2LCJidXR0b24iLDQ1KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1SZSgpLmluZGV4O3JldHVybiBDdChSZSgpLmFkZENsYXVz'@;
put 'ZShoKSl9KSxHdCgxNywiY2xyLWljb24iLDMzKSgxOCwic3BhbiIpLGhlKCkoKSgpfWlmKDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdCxkPWwuaW5kZXgsaD1SZSgpLmluZGV4LGY9UmUoKTtUcigiaW52YWxpZC1jbGF1c2UiLGEuaW52YWxpZENsYXVzZSksZmUoMyksTWUoImlkIiwic2VsZWN0'@;
put 'X3ZhbHNfdmFyX2lkIitkKyJfIitoKSgiaW5wdXRJZCIsInZhbHNfdmFyX2lkIitkKyJfIitoKSgiZW1pdE9ubHlTZWxlY3RlZCIsITApLHBpKCJ2YWx1ZSIsYS52YXJpYWJsZSksZmUoKSxNZSgibmdGb3JPZiIsZi5jb2xzKSxmZSg1KSxwaSgibmdNb2RlbCIsYS5vcGVyYXRvciksZmUoKSxN'@;
put 'ZSgibmdGb3JPZiIsYS5vcGVyYXRvcnMpLGZlKCksTWUoIm5nVmFyIiwiREFURSI9PT1hLmRkdHlwZXx8IkRBVEVUSU1FIj09PWEuZGR0eXBlfHwiVElNRSI9PT1hLmRkdHlwZSksZmUoMiksTWUoImRpc2FibGVkIiwxPT09Zi5jbGF1c2VzLnF1ZXJ5T2JqW2hdLmVsZW1lbnRzLmxlbmd0aCl9'@;
put 'fWZ1bmN0aW9uIHU2dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImRpdiIsMjQpKDEsImRpdiIsMTApKDIsImRpdiIsMjUpKDMsImRpdiIsMjYpKDQsImNsci1zZWxlY3QtY29udGFpbmVyIikoNSwibGFiZWwiKSxMZSg2LCJMb2dpYyIpLGhlKCksZGUoNywic2VsZWN0IiwyNyks'@;
put 'Z2koIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe2NvbnN0IGY9d3QoYSkuJGltcGxpY2l0O3JldHVybiBtaShmLmNsYXVzZUxvZ2ljLGgpfHwoZi5jbGF1c2VMb2dpYz1oKSxDdChoKX0pLEZ0KCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChSZSgpLnNldExv'@;
put 'Z2ljKCkpfSksZ3QoOCxLbXQsMiwyLCJvcHRpb24iLDEzKSxoZSgpKCkoKSxHdCg5LCJiciIpLGd0KDEwLHFtdCw0LDAsImJ1dHRvbiIsMjgpLGhlKCksZGUoMTEsImRpdiIsMjkpLGd0KDEyLFhtdCwxLDAsImNsci1pY29uIiwzMCkoMTMsYzZ0LDE5LDExLCJkaXYiLDMxKSxoZSgpKCksR3Qo'@;
put 'MTQsImJyIiksaGUoKX1pZigyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQsZD1SZSgpO2ZlKCksVHIoImludmFsaWQtY2xhdXNlIixhLmludmFsaWRDbGF1c2UpLGZlKDYpLHBpKCJuZ01vZGVsIixhLmNsYXVzZUxvZ2ljKSxNZSgiZGlzYWJsZWQiLGEuZWxlbWVudHMubGVuZ3RoPDIpLGZlKCks'@;
put 'TWUoIm5nRm9yT2YiLGQubG9naWNPcGVyYXRvcnMpLGZlKDIpLE1lKCJuZ0lmIixkLmlubmVyV2lkdGg+NzY4KSxmZSgyKSxNZSgibmdJZiIsZC5jbGF1c2VzLnF1ZXJ5T2JqLmxlbmd0aD4xKSxmZSgpLE1lKCJuZ0Zvck9mIixhLmVsZW1lbnRzKX19ZnVuY3Rpb24gZDZ0KGMsbCl7aWYoMSZj'@;
put 'KXtjb25zdCBhPUxuKCk7c2koMCksZGUoMSwiYXBwLXNvZnQtc2VsZWN0Iiw2MiksZWwoMiwic2FzVG9Kc0RhdGUiKSxlbCgzLCJzYXNUb0pzRGF0ZSIpLEZ0KCJ2YWx1ZUNoYW5nZSIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1SZSgpLHY9Zi5xdWVyeSxNPWYucXVlcnlWYWx1ZUluZGV4'@;
put 'LEQ9Zi5xdWVyeUluZGV4LFo9Zi5jbGF1c2VJbmRleDtyZXR1cm4gQ3QoUmUoKS5kYXRlQ2hhbmdlKGgsdixELFosTSkpfSksaGUoKSxsaSgpfWlmKDImYyl7Y29uc3QgYT1SZSgpLGQ9YS5xdWVyeSxoPWEucXVlcnlWYWx1ZUluZGV4LGY9YS5xdWVyeUluZGV4LHY9YS5jbGF1c2VJbmRleDtm'@;
put 'ZSgpLE1lKCJkaXNhYmxlU29mdHNlbGVjdCIsITApKCJpbnB1dElkIiwidmFsc19kYXRlIitmKyJfIit2KSgidmFsdWUiLHZvaWQgMCE9PWg/RGMoMiwzLGQudmFsdWVbaF0pOkRjKDMsNSxkLnZhbHVlKSl9fWZ1bmN0aW9uIGg2dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO3NpKDApLGRl'@;
put 'KDEsImFwcC1zb2Z0LXNlbGVjdCIsNjMpLGVsKDIsInNhc1RvSnNEYXRlIiksZWwoMywic2FzVG9Kc0RhdGUiKSxGdCgidmFsdWVDaGFuZ2UiLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9UmUoKSx2PWYucXVlcnlJbmRleCxNPWYuY2xhdXNlSW5kZXg7cmV0dXJuIEN0KFJlKCkuZ2V0UXVl'@;
put 'cnlEYXRlVGltZShNLHYpLmRhdGU9aCl9KSgib25JbnB1dEV2ZW50IixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9UmUoKSxmPWgucXVlcnksdj1oLnF1ZXJ5VmFsdWVJbmRleCxNPWgucXVlcnlJbmRleCxEPWguY2xhdXNlSW5kZXg7cmV0dXJuIEN0KFJlKCkuZGF0ZVRpbWVDaGFuZ2UoZixN'@;
put 'LEQsdikpfSksaGUoKSxkZSg0LCJhcHAtc29mdC1zZWxlY3QiLDY0KSxlbCg1LCJzYXNUb0pzRGF0ZSIpLGVsKDYsInNhc1RvSnNEYXRlIiksRnQoInZhbHVlQ2hhbmdlIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPVJlKCksdj1mLnF1ZXJ5SW5kZXgsTT1mLmNsYXVzZUluZGV4O3JldHVy'@;
put 'biBDdChSZSgpLmdldFF1ZXJ5RGF0ZVRpbWUoTSx2KS50aW1lPWgpfSkoIm9uSW5wdXRFdmVudCIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPVJlKCksZj1oLnF1ZXJ5LHY9aC5xdWVyeVZhbHVlSW5kZXgsTT1oLnF1ZXJ5SW5kZXgsRD1oLmNsYXVzZUluZGV4O3JldHVybiBDdChSZSgpLmRh'@;
put 'dGVUaW1lQ2hhbmdlKGYsTSxELHYpKX0pLGhlKCksbGkoKX1pZigyJmMpe2NvbnN0IGE9UmUoKSxkPWEucXVlcnksaD1hLnF1ZXJ5VmFsdWVJbmRleCxmPWEucXVlcnlJbmRleCx2PWEuY2xhdXNlSW5kZXg7ZmUoKSxNZSgiZGlzYWJsZVNvZnRzZWxlY3QiLCEwKSgiaW5wdXRJZCIsInZhbHNf'@;
put 'ZGF0ZSIrZisiXyIrdikoInZhbHVlIix2b2lkIDAhPT1oP3o4KDIsNixkLnZhbHVlW2hdLCJzZWNvbmRzIik6ejgoMyw5LGQudmFsdWUsInNlY29uZHMiKSksZmUoMyksTWUoImRpc2FibGVTb2Z0c2VsZWN0IiwhMCkoImlucHV0SWQiLCJ2YWxzX3RpbWUiK2YrIl8iK3YpKCJ2YWx1ZSIsdm9p'@;
put 'ZCAwIT09aD9iVSg1LDEyLGQudmFsdWVbaF0sInNlY29uZHMiLCEwKTpiVSg2LDE2LGQudmFsdWUsInNlY29uZHMiLCEwKSl9fWZ1bmN0aW9uIGY2dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO3NpKDApLGRlKDEsImFwcC1zb2Z0LXNlbGVjdCIsNjUpLGVsKDIsInNlY29uZHNQYXJzZXIi'@;
put 'KSxlbCgzLCJzZWNvbmRzUGFyc2VyIiksRnQoIm9uSW5wdXRFdmVudCIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1SZSgpLHY9Zi5xdWVyeSxNPWYucXVlcnlWYWx1ZUluZGV4LEQ9Zi5xdWVyeUluZGV4LFo9Zi5jbGF1c2VJbmRleDtyZXR1cm4gQ3QoUmUoKS50aW1lQ2hhbmdlKGgsdixE'@;
put 'LFosTSkpfSksaGUoKSxsaSgpfWlmKDImYyl7Y29uc3QgYT1SZSgpLGQ9YS5xdWVyeSxoPWEucXVlcnlWYWx1ZUluZGV4LGY9YS5xdWVyeUluZGV4LHY9YS5jbGF1c2VJbmRleDtmZSgpLE1lKCJkaXNhYmxlU29mdHNlbGVjdCIsITApKCJpbnB1dElkIiwidmFsc18iK2YrIl8iK3YpKCJ2YWx1'@;
put 'ZSIsdm9pZCAwIT09aD9EYygyLDMsZC52YWx1ZVtoXSk6RGMoMyw1LGQudmFsdWUpKX19ZnVuY3Rpb24gcDZ0KGMsbCl7MSZjJiYoc2koMCw2MCksZ3QoMSxkNnQsNCw3LCJuZy1jb250YWluZXIiLDYxKSgyLGg2dCw3LDIwLCJuZy1jb250YWluZXIiLDYxKSgzLGY2dCw0LDcsIm5nLWNvbnRh'@;
put 'aW5lciIsNjEpLGxpKCkpLDImYyYmKE1lKCJuZ1N3aXRjaCIsbC5xdWVyeS5kZHR5cGUpLGZlKCksTWUoIm5nU3dpdGNoQ2FzZSIsIkRBVEUiKSxmZSgpLE1lKCJuZ1N3aXRjaENhc2UiLCJEQVRFVElNRSIpLGZlKCksTWUoIm5nU3dpdGNoQ2FzZSIsIlRJTUUiKSl9ZnVuY3Rpb24gZzZ0KGMs'@;
put 'bCl7aWYoMSZjJiYoZGUoMCwib3B0aW9uIiw2OCksTGUoMSksaGUoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O01lKCJ2YWx1ZSIsYS51bmZvcm1hdHRlZCksZmUoKSxEcigiICIsYS5mb3JtYXR0ZWQudHJpbSgpLCIgIil9fWZ1bmN0aW9uIG02dChjLGwpe2lmKDEmYyYmKGRlKDAsImRp'@;
put 'diIpLGd0KDEsZzZ0LDIsMiwib3B0aW9uIiw2NyksaGUoKSksMiZjKXtjb25zdCBhPVJlKCkucXVlcnk7ZmUoKSxNZSgibmdGb3JPZiIsYS52YWx1ZXMpfX1mdW5jdGlvbiB2NnQoYyxsKXtpZigxJmMmJihkZSgwLCJvcHRpb24iLDY4KSxMZSgxKSxoZSgpKSwyJmMpe2NvbnN0IGE9UmUoKS4k'@;
put 'aW1wbGljaXQ7TWUoInZhbHVlIixhLk5BTUUpLGZlKCksRHIoIiAiLGEuTkFNRSwiICIpfX1mdW5jdGlvbiBiNnQoYyxsKXtpZigxJmMmJihzaSgwKSxndCgxLHY2dCwyLDIsIm9wdGlvbiIsNjkpLGxpKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdCxkPVJlKDIpLnF1ZXJ5O2ZlKCksTWUo'@;
put 'Im5nSWYiLGEuVFlQRT09PWQudHlwZSl9fWZ1bmN0aW9uIHk2dChjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIpLGd0KDEsYjZ0LDIsMSwibmctY29udGFpbmVyIiwzOCksaGUoKSksMiZjKXtjb25zdCBhPVJlKDIpO2ZlKCksTWUoIm5nRm9yT2YiLGEuY29scyl9fWZ1bmN0aW9uIF82dChjLGwp'@;
put 'e2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImFwcC1zb2Z0LXNlbGVjdCIsNjYpLEZ0KCJzZWxlY3RlZExhYmVsQ2hhbmdlIixmdW5jdGlvbihoKXtjb25zdCBmPXd0KGEpLnF1ZXJ5O3JldHVybiBDdChSZSgpLnNlbGVjdGVkTGFiZWxDaGFuZ2UoaCxmKSl9KSxnaSgidmFsdWVDaGFuZ2Ui'@;
put 'LGZ1bmN0aW9uKGgpe2NvbnN0IGY9d3QoYSkucXVlcnk7cmV0dXJuIG1pKGYudmFsdWUsaCl8fChmLnZhbHVlPWgpLEN0KGgpfSksRnQoIm9uSW5wdXRFdmVudCIsZnVuY3Rpb24oaCl7Y29uc3QgZj13dChhKSx2PWYucXVlcnlJbmRleCxNPWYuY2xhdXNlSW5kZXg7cmV0dXJuIEN0KFJlKCku'@;
put 'c2V0VmFyaWFibGVWYWx1ZXMoaC50YXJnZXQudmFsdWUsdixNKSl9KSgib25BdXRvY29tcGxldGVMb2FkaW5nTW9yZSIsZnVuY3Rpb24oaCl7Y29uc3QgZj13dChhKSx2PWYucXVlcnksTT1mLnF1ZXJ5SW5kZXgsRD1mLmNsYXVzZUluZGV4O3JldHVybiBDdChSZSgpLm9uQXV0b2NvbXBsZXRl'@;
put 'TG9hZGluZ01vcmUoaCx2LnZhcmlhYmxlLE0sRCkpfSksZ3QoMSxtNnQsMiwxLCJkaXYiLDIwKSgyLHk2dCwyLDEsImRpdiIsMjApLGhlKCl9aWYoMiZjKXtjb25zdCBhPWwucXVlcnksZD1sLnF1ZXJ5SW5kZXgsaD1sLmNsYXVzZUluZGV4O01lKCJzZWNvbmRMYWJlbCIsIlZhcmlhYmxlIiko'@;
put 'ImVtaXRPbmx5U2VsZWN0ZWQiLGEudmFsdWVWYXJpYWJsZSkoImlucHV0SWQiLCJ2YWxzXyIrZCsiXyIraCkscGkoInZhbHVlIixhLnZhbHVlKSxNZSgiZW5hYmxlTG9hZE1vcmUiLGEubm9icz5hLnZhbHVlcy5sZW5ndGgpLGZlKCksTWUoIm5nSWYiLCFhLnZhbHVlVmFyaWFibGUpLGZlKCks'@;
put 'TWUoIm5nSWYiLGEudmFsdWVWYXJpYWJsZSl9fWZ1bmN0aW9uIHc2dChjLGwpe2lmKDEmYyYmKGRlKDAsIm9wdGlvbiIsNjgpLExlKDEpLGhlKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtNZSgidmFsdWUiLGEuZm9ybWF0dGVkKSxmZSgpLERyKCIgIixhLmZvcm1hdHRlZCwiICIpfX1m'@;
put 'dW5jdGlvbiBDNnQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJhcHAtc29mdC1zZWxlY3QiLDcwKSxnaSgidmFsdWVDaGFuZ2UiLGZ1bmN0aW9uKGgpe2NvbnN0IGY9d3QoYSksdj1mLnF1ZXJ5LE09Zi5xdWVyeVZhbHVlSW5kZXg7cmV0dXJuIG1pKHYudmFsdWVbTV0saCl8fCh2'@;
put 'LnZhbHVlW01dPWgpLEN0KGgpfSksRnQoIm9uSW5wdXRFdmVudCIsZnVuY3Rpb24oKXtjb25zdCBoPXd0KGEpLGY9aC5xdWVyeSx2PWgucXVlcnlJbmRleCxNPWguY2xhdXNlSW5kZXg7cmV0dXJuIEN0KFJlKCkuc2V0VmFyaWFibGVWYWx1ZXMoZi52YWx1ZSx2LE0pKX0pKCJvbkF1dG9jb21w'@;
put 'bGV0ZUxvYWRpbmdNb3JlIixmdW5jdGlvbihoKXtjb25zdCBmPXd0KGEpLHY9Zi5xdWVyeSxNPWYucXVlcnlJbmRleCxEPWYuY2xhdXNlSW5kZXg7cmV0dXJuIEN0KFJlKCkub25BdXRvY29tcGxldGVMb2FkaW5nTW9yZShoLHYudmFyaWFibGUsTSxEKSl9KSxndCgxLHc2dCwyLDIsIm9wdGlv'@;
put 'biIsNjcpLGhlKCl9aWYoMiZjKXtjb25zdCBhPWwucmFuZ2UsZD1sLnF1ZXJ5LGg9bC5xdWVyeVZhbHVlSW5kZXg7TWUoImlucHV0SWQiLCJ2YWxzLSIrYSsiXyIrbC5xdWVyeUluZGV4KyJfIitsLmNsYXVzZUluZGV4KSxwaSgidmFsdWUiLGQudmFsdWVbaF0pLE1lKCJlbmFibGVMb2FkTW9y'@;
put 'ZSIsZC5ub2JzPmQudmFsdWVzLmxlbmd0aCkoImRpc2FibGVkIix2b2lkIDAhPT1oJiYic3RhcnQiIT09YSYmIWQudmFsdWVbMF0pLGZlKCksTWUoIm5nRm9yT2YiLGQudmFsdWVzKX19ZnVuY3Rpb24gUzZ0KGMsbCl7MSZjJiYoZGUoMCwiaDUiLDc4KSxMZSgxLCIgTm8gdmFsdWVzIGF2YWls'@;
put 'YWJsZS4gIiksaGUoKSl9ZnVuY3Rpb24gTTZ0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiY2xyLWNoZWNrYm94LXdyYXBwZXIiKSgxLCJpbnB1dCIsODApLGdpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXtjb25zdCBmPXd0KGEpLmluZGV4LHY9UmUoMikucXVlcnk7cmV0'@;
put 'dXJuIG1pKHYudmFsdWVbZl0uY2hlY2tlZCxoKXx8KHYudmFsdWVbZl0uY2hlY2tlZD1oKSxDdChoKX0pLEZ0KCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPVJlKDIpLHY9Zi5xdWVyeUluZGV4LE09Zi5jbGF1c2VJbmRleDtyZXR1cm4gQ3QoUmUoKS5zZXRWYXJp'@;
put 'YWJsZVZhbHVlcyhoLHYsTSkpfSksaGUoKSxkZSgyLCJsYWJlbCIpLExlKDMpLGhlKCkoKX1pZigyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQsZD1sLmluZGV4LGg9UmUoMikucXVlcnk7ZmUoKSxwaSgibmdNb2RlbCIsaC52YWx1ZVtkXS5jaGVja2VkKSxmZSgyKSxEcigiICIsYS5mb3JtYXR0'@;
put 'ZWQsIiAiKX19ZnVuY3Rpb24geDZ0KGMsbCl7aWYoMSZjJiYoZGUoMCwic2VjdGlvbiIsNzkpKDEsImNsci1jaGVja2JveC1jb250YWluZXIiKSxndCgyLE02dCw0LDIsImNsci1jaGVja2JveC13cmFwcGVyIiwzOCksaGUoKSgpKSwyJmMpe2NvbnN0IGE9UmUoKS5xdWVyeTtmZSgyKSxNZSgi'@;
put 'bmdGb3JPZiIsYS52YWx1ZXMpfX1mdW5jdGlvbiBFNnQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJjbHItbW9kYWwiLDcxKSgxLCJoMyIsNzIpLExlKDIsIlNlbGVjdCB2YWx1ZXMiKSxoZSgpLGRlKDMsImRpdiIsNzMpLGd0KDQsUzZ0LDIsMCwiaDUiLDc0KSg1LHg2dCwzLDEs'@;
put 'InNlY3Rpb24iLDc1KSxoZSgpLGRlKDYsImRpdiIsNzYpKDcsImJ1dHRvbiIsNzcpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPVJlKCk7cmV0dXJuIGguY3VycmVudFF1ZXJ5SW5kZXg9LTEsQ3QoaC5jdXJyZW50Q2xhdXNlSW5kZXg9LTEpfSksTGUoOCwiIEFwcGx5ICIp'@;
put 'LGhlKCkoKSgpfWlmKDImYyl7Y29uc3QgYT1sLnF1ZXJ5LGQ9bC5xdWVyeUluZGV4LGg9bC5jbGF1c2VJbmRleCxmPVJlKCk7TWUoImNsck1vZGFsT3BlbiIsZi5jdXJyZW50UXVlcnlJbmRleD09PWQmJmYuY3VycmVudENsYXVzZUluZGV4PT09aCkoImNsck1vZGFsQ2xvc2FibGUiLCExKSxm'@;
put 'ZSg0KSxNZSgibmdJZiIsIWYuaXNBcnIoYS52YWx1ZSkpLGZlKCksTWUoIm5nSWYiLGYuaXNBcnIoYS52YWx1ZSkpfX0hZnVuY3Rpb24gcndlKGMsbCxhKXsoZnVuY3Rpb24gUjllKGMsbCxhKXsic3RyaW5nIiE9dHlwZW9mIGwmJihhPWwsbD1jW2VjLkxvY2FsZUlkXSksbD1sLnRvTG93ZXJD'@;
put 'YXNlKCkucmVwbGFjZSgvXy9nLCItIiksVWJbbF09YyxhJiYoVWJbbF1bZWMuRXh0cmFEYXRhXT1hKX0pKGMsbCxhKX0oVG10KTtsZXQgWGVlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZil7dGhpcy5zYXNTdG9yZVNlcnZpY2U9YSx0aGlzLmV2ZW50U2VydmljZT1kLHRoaXMu'@;
put 'aGVscGVyU2VydmljZT1oLHRoaXMuY2RmPWYsdGhpcy5jYWNoaW5nPSEwLHRoaXMucm93c19pbmNyZW1lbnQ9MTAwLHRoaXMuaW5pdGlhbF9yb3dzPTFlMyx0aGlzLmNsYXVzZUFtdD1bIiJdLHRoaXMubnVtT3BlcmF0b3JzPVsiPSIsIjwiLCI+IiwiPD0iLCI+PSIsIkJFVFdFRU4iLCJJTiIs'@;
put 'Ik5PVCBJTiIsIk5FIl0sdGhpcy5jaGFyT3BlcmF0b3JzPVsiPSIsIjwiLCI+IiwiPD0iLCI+PSIsIkNPTlRBSU5TIiwiSU4iLCJOT1QgSU4iLCJORSJdLHRoaXMubm90SW49ITEsdGhpcy5ub3RBcnI9ITAsdGhpcy53YXNCZXR3ZWVuPSExLHRoaXMud2hlcmVDbGF1c2VMb2FkaW5nPSExLHRo'@;
put 'aXMuZHluYW1pY1doZXJlQ2xhdXNlPSEwLHRoaXMudXNlUGlja2Vycz0hMSx0aGlzLnF1ZXJ5T2JqPXtlbGVtZW50czpbe2xvZ2ljOm51bGwsdHlwZTpudWxsLGRkdHlwZTpudWxsLHZhcmlhYmxlOm51bGwsb3BlcmF0b3I6bnVsbCx2YWx1ZTpudWxsLHZhbHVlVmFyaWFibGU6ITEsc3RhcnRy'@;
put 'b3c6MCxyb3dzOjAsbm9iczowLHZhbHVlczpbXSxvcGVyYXRvcnM6W119XSxjbGF1c2VMb2dpYzoiIixpbnZhbGlkQ2xhdXNlOiExfSx0aGlzLnNlbFZhcj17aW5kZXg6bnVsbCxmb3JtYXQ6bnVsbCx0eXBlOm51bGx9LHRoaXMuaW5PYmo9W3tjaGVja2VkOiExLHZhbHVlOm51bGx9XSx0aGlz'@;
put 'Lmdyb3VwTG9naWM9IkFORCIsdGhpcy5jbGF1c2VzPXtxdWVyeU9iajpbdGhpcy5xdWVyeU9ial0sY2xhdXNlTG9naWM6W10sZ3JvdXBMb2dpYzp0aGlzLmdyb3VwTG9naWN9LHRoaXMubG9naWNPcGVyYXRvcnM9WyJBTkQiLCJPUiJdLHRoaXMucXVlcnlEYXRlVGltZT1bXSx0aGlzLmN1cnJl'@;
put 'bnRDbGF1c2VJbmRleD0tMSx0aGlzLmN1cnJlbnRRdWVyeUluZGV4PS0xLHRoaXMucGVuZGluZ0lOVmFsdWVzU2V0PW51bGwsdGhpcy5pbm5lcldpZHRoPXdpbmRvdy5zY3JlZW4ud2lkdGgsdGhpcy5pbm5lcldpZHRoPjc2OCYmKHRoaXMubm9Cb3JkZXI9ImJvcmRlci1sZWZ0OiAycHggc29s'@;
put 'aWQgZ3JheTsiKX1nZXRRdWVyeURhdGVUaW1lKGEsZCl7bGV0IGg9dGhpcy5xdWVyeURhdGVUaW1lLmZpbmQoZj0+Zi5jbGF1c2VJbmRleD09PWEmJmYucXVlcnlJbmRleD09PWQpO2lmKCFoKXtjb25zdCBmPXRoaXMucXVlcnlEYXRlVGltZS5wdXNoKHtjbGF1c2VJbmRleDphLHF1ZXJ5SW5k'@;
put 'ZXg6ZCxkYXRlOiIiLHRpbWU6IiJ9KS0xO2g9dGhpcy5xdWVyeURhdGVUaW1lW2ZdfXJldHVybiBofXVzZVBpY2tlcnNDaGFuZ2UoKXt0aGlzLnF1ZXJ5RGF0ZVRpbWU9W10sdGhpcy51c2VQaWNrZXJzJiZ0aGlzLmNsYXVzZXMucXVlcnlPYmouZm9yRWFjaChhPT57YS5lbGVtZW50cy5mb3JF'@;
put 'YWNoKGQ9PntbIkRBVEVUSU1FIiwiVElNRSIsIkRBVEUiXS5pbmNsdWRlcyhkLmRkdHlwZSkmJmQudmFsdWVWYXJpYWJsZSYmKGQudmFsdWU9IiIsZC52YWx1ZVZhcmlhYmxlPSExKX0pfSl9cmVzZXRGaWx0ZXIoKXt0aGlzLndoZXJlU3RyaW5nPXZvaWQgMCx0aGlzLndoZXJlQ2xhdXNlPXZv'@;
put 'aWQgMCx0aGlzLnF1ZXJ5T2JqPXtlbGVtZW50czpbe2xvZ2ljOm51bGwsdHlwZTpudWxsLGRkdHlwZTpudWxsLHZhcmlhYmxlOm51bGwsb3BlcmF0b3I6bnVsbCx2YWx1ZTpudWxsLHZhbHVlczpbXSxvcGVyYXRvcnM6W119XX0sdGhpcy5jbGF1c2VzPXtxdWVyeU9iajpbdGhpcy5xdWVyeU9i'@;
put 'al0sY2xhdXNlTG9naWM6W10sZ3JvdXBMb2dpYzp0aGlzLmdyb3VwTG9naWN9LHRoaXMud2hlcmVDbGF1c2VGbighMCl9c2V0VG9HbG9iYWxzKCl7aWYoIXRoaXMuY2FjaGluZylyZXR1cm47bGV0IGE9IiI7ImhvbWUiPT09S24ucm9vdFBhcmFtfHwiZWRpdG9yIj09PUtuLnJvb3RQYXJhbT9h'@;
put 'PXRoaXMudmlld2JveElkP2B2aWV3Ym94ZXMuJHt0aGlzLnZpZXdib3hJZH1gOiJlZGl0b3IiOiJ2aWV3Ij09PUtuLnJvb3RQYXJhbSYmKGE9InZpZXdlciIpLHljKEtuLGEpLmZpbHRlci5ncm91cExvZ2ljPXRoaXMuZ3JvdXBMb2dpYywic3RyaW5nIj09dHlwZW9mIHRoaXMud2hlcmVDbGF1'@;
put 'c2UmJih5YyhLbixhKS5maWx0ZXIud2hlcmVDbGF1c2U9dGhpcy53aGVyZUNsYXVzZSksInN0cmluZyI9PXR5cGVvZiB0aGlzLmxpYmRzJiYoeWMoS24sYSkuZmlsdGVyLmxpYmRzPXRoaXMubGliZHMpLHljKEtuLGEpLmZpbHRlci5jbGF1c2VzPXRoaXMuY2xhdXNlc31nZXRGcm9tR2xvYmFs'@;
put 'cygpe2lmKCF0aGlzLmNhY2hpbmcpcmV0dXJuO2xldCBhPSIiOyJob21lIj09PUtuLnJvb3RQYXJhbXx8ImVkaXRvciI9PT1Lbi5yb290UGFyYW0/YT10aGlzLnZpZXdib3hJZD9gdmlld2JveGVzLiR7dGhpcy52aWV3Ym94SWR9YDoiZWRpdG9yIjoidmlldyI9PT1Lbi5yb290UGFyYW0mJihh'@;
put 'PSJ2aWV3ZXIiKSx5YyhLbixhKS5maWx0ZXIuY29scy5sZW5ndGg+MCYmKHRoaXMuY29scz1KU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHljKEtuLGEpLmZpbHRlci5jb2xzKSkpLHljKEtuLGEpLmZpbHRlci52YWxzLmxlbmd0aD4wJiYodGhpcy52YWxzPUpTT04ucGFyc2UoSlNPTi5zdHJp'@;
put 'bmdpZnkoeWMoS24sYSkuZmlsdGVyLnZhbHMpKSksIiIhPT15YyhLbixhKS5maWx0ZXIuZ3JvdXBMb2dpYyYmKHRoaXMuZ3JvdXBMb2dpYz15YyhLbixhKS5maWx0ZXIuZ3JvdXBMb2dpYyx0aGlzLndoZXJlQ2xhdXNlPXljKEtuLGEpLmZpbHRlci53aGVyZUNsYXVzZSx0aGlzLmxpYmRzPXlj'@;
put 'KEtuLGEpLmZpbHRlci5saWJkcyx0aGlzLmNsYXVzZXM9eWMoS24sYSkuZmlsdGVyLmNsYXVzZXMsdGhpcy53aGVyZUNsYXVzZUZuKCkpfXNldEdyb3VwTG9naWMoYSl7dGhpcy5ncm91cExvZ2ljPWEsdGhpcy5jbGF1c2VzLmdyb3VwTG9naWM9YSx0aGlzLndoZXJlQ2xhdXNlRm4oKSx0aGlz'@;
put 'LnNldFRvR2xvYmFscygpfWRhdGVDaGFuZ2UoYSxkLGgsZix2KXtsZXQgTT10aGlzLmhlbHBlclNlcnZpY2UuY29udmVydEpzRGF0ZVRvU2FzRGF0ZShhKTsiQkVUV0VFTiI9PT1kLm9wZXJhdG9yJiZ2b2lkIDAhPT12JiYodGhpcy5jbGF1c2VzLnF1ZXJ5T2JqW2ZdLmVsZW1lbnRzW2hdLnZh'@;
put 'bHVlW3ZdPU0pLHRoaXMuc2V0VmFyaWFibGVWYWx1ZXMoTSxoLGYpfWRhdGVUaW1lQ2hhbmdlKGEsZCxoLGYpe2NvbnN0IHY9dGhpcy5nZXRRdWVyeURhdGVUaW1lKGgsZCk7aWYoIiI9PT12LmRhdGUpe2lmKCIiPT09YS52YWx1ZSlyZXR1cm47di5kYXRlPWEudmFsdWUuc3BsaXQoIjoiKVsw'@;
put 'XX1jb25zdCBNPXBhcnNlSW50KHYudGltZS5zcGxpdCgiOiIpWzBdKSxEPXBhcnNlSW50KHYudGltZS5zcGxpdCgiOiIpWzFdKSxaPXBhcnNlSW50KHYudGltZS5zcGxpdCgiOiIpWzJdKXx8MDtsZXQgcmU9bmV3IERhdGUodi5kYXRlKSxjZT1uZXcgRGF0ZShyZS5nZXRGdWxsWWVhcigpLHJl'@;
put 'LmdldE1vbnRoKCkscmUuZ2V0RGF0ZSgpLE0sRCxaKSxiZT10aGlzLmhlbHBlclNlcnZpY2UuY29udmVydEpzRGF0ZVRvU2FzRGF0ZShjZSwic2Vjb25kcyIpOyJCRVRXRUVOIj09PWEub3BlcmF0b3ImJnZvaWQgMCE9PWYmJih0aGlzLmNsYXVzZXMucXVlcnlPYmpbaF0uZWxlbWVudHNbZF0u'@;
put 'dmFsdWVbZl09YmUpLHRoaXMuc2V0VmFyaWFibGVWYWx1ZXMoYmUsZCxoKX10aW1lQ2hhbmdlKGEsZCxoLGYsdil7YT1hLnRhcmdldC52YWx1ZTtsZXQgYmU9NjAqcGFyc2VJbnQoYS5zcGxpdCgiOiIpWzBdKSo2MCs2MCpwYXJzZUludChhLnNwbGl0KCI6IilbMV0pKyhwYXJzZUludChhLnNw'@;
put 'bGl0KCI6IilbMl0pfHwwKTsiQkVUV0VFTiI9PT1kLm9wZXJhdG9yJiZ2b2lkIDAhPT12JiYodGhpcy5jbGF1c2VzLnF1ZXJ5T2JqW2ZdLmVsZW1lbnRzW2hdLnZhbHVlW3ZdPWJlKSx0aGlzLnNldFZhcmlhYmxlVmFsdWVzKGJlLGgsZil9ZHluYW1pY1doZXJlQ2xhdXNlQ3JlYXRvcihhLGQp'@;
put 'e2xldCBoPVtdO2lmKHRoaXMuY2xhdXNlcy5xdWVyeU9iai5sZW5ndGg+MXx8dGhpcy5jbGF1c2VzLnF1ZXJ5T2JqW2FdLmVsZW1lbnRzLmxlbmd0aD4xKWZvcihsZXQgZj0wO2Y8dGhpcy5jbGF1c2VzLnF1ZXJ5T2JqLmxlbmd0aDtmKyspZm9yKGxldCB2PTA7djx0aGlzLmNsYXVzZXMucXVl'@;
put 'cnlPYmpbZl0uZWxlbWVudHMubGVuZ3RoO3YrKyl7aWYoZj09PWEmJnY9PT1kfHxbbnVsbCx2b2lkIDBdLmluY2x1ZGVzKHRoaXMuY2xhdXNlcy5xdWVyeU9ialtmXS5lbGVtZW50c1t2XS52YXJpYWJsZSl8fFtudWxsLHZvaWQgMF0uaW5jbHVkZXModGhpcy5jbGF1c2VzLnF1ZXJ5T2JqW2Zd'@;
put 'LmVsZW1lbnRzW3ZdLm9wZXJhdG9yKXx8W251bGwsdm9pZCAwXS5pbmNsdWRlcyh0aGlzLmNsYXVzZXMucXVlcnlPYmpbZl0uZWxlbWVudHNbdl0udmFsdWUpKWNvbnRpbnVlO2xldCBNPSIiO2NvbnN0IEQ9dGhpcy5jbGF1c2VzLnF1ZXJ5T2JqW2ZdLmVsZW1lbnRzW3ZdLm9wZXJhdG9yLFo9'@;
put 'dGhpcy5jbGF1c2VzLnF1ZXJ5T2JqW2ZdLmVsZW1lbnRzW3ZdLnZhcmlhYmxlOyJCRVRXRUVOIj09PUQ/TT1gJHt0aGlzLmNsYXVzZXMucXVlcnlPYmpbZl0uZWxlbWVudHNbdl0udmFsdWVbMF19IEFORCAke3RoaXMuY2xhdXNlcy5xdWVyeU9ialtmXVt2XS52YWx1ZVsxXX1gOiJJTiI9PT1E'@;
put 'fHwiTk9UIElOIj09PUQ/KHRoaXMuY2xhdXNlcy5xdWVyeU9ialtmXVt2XS52YWx1ZS5mb3JFYWNoKHJlPT57aWYocmUuY2hlY2tlZCl7bGV0IGNlPXJlLnZhbDsic3RyaW5nIiE9dHlwZW9mIGNlfHwoMCxnZy5pc1NwZWNpYWxNaXNzaW5nKShjZSk/TS5sZW5ndGg+MD9NKz1gLCR7Y2V9YDpN'@;
put 'PWAoJHtjZX1gOk0ubGVuZ3RoPjA/TSs9YCwnJHtjZX0nYDpNPWAoJyR7Y2V9J2B9fSksTS5sZW5ndGg+MCYmKE0rPSIpIikpOiIiPT09dGhpcy5jbGF1c2VzLnF1ZXJ5T2JqW2ZdLmVsZW1lbnRzW3ZdLnZhbHVlP009ImNoYXIiPT09dGhpcy5jbGF1c2VzLnF1ZXJ5T2JqW2ZdLmVsZW1lbnRz'@;
put 'W3ZdLnR5cGU/IicgJyI6Ii4iOiJjaGFyIj09PXRoaXMuY2xhdXNlcy5xdWVyeU9ialtmXS5lbGVtZW50c1t2XS50eXBlJiYoTT1gJyR7dGhpcy5jbGF1c2VzLnF1ZXJ5T2JqW2ZdLmVsZW1lbnRzW3ZdLnZhbHVlfSdgKSxoLnB1c2goe0dST1VQX0xPR0lDOnRoaXMuY2xhdXNlcy5ncm91cExv'@;
put 'Z2ljLFNVQkdST1VQX0xPR0lDOnRoaXMuY2xhdXNlcy5xdWVyeU9ialtmXS5jbGF1c2VMb2dpY3x8IkFORCIsU1VCR1JPVVBfSUQ6ZixWQVJJQUJMRV9OTTpaLE9QRVJBVE9SX05NOkQsUkFXX1ZBTFVFOk18fHRoaXMuY2xhdXNlcy5xdWVyeU9ialtmXS5lbGVtZW50c1t2XS52YWx1ZX0pfXJl'@;
put 'dHVybiBofWdldFZhbHVlc0xvYWRNb3JlKGEsZCxoLGYpe3ZhciB2PXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe2NvbnN0IE09di5saWJkc3x8IiI7dHJ5e2lmKHZvaWQgMCE9PXYuY29scyl7Zm9yKGxldCBxZT0wO3FlPHYuY29scy5sZW5ndGg7cWUrKyl2LmNvbHNbcWVdLk5BTUU9PT1k'@;
put 'JiYodi5zZWxWYXIuaW5kZXg9cWUpO2NvbnN0IEQ9di5jb2xzW3Yuc2VsVmFyLmluZGV4XS5ERFRZUEUse3N0YXJ0cm93Oloscm93czpyZX09di5jbGF1c2VzLnF1ZXJ5T2JqW2ZdLmVsZW1lbnRzW2hdLGNlPXYucm93c19pbmNyZW1lbnQsYmU9WityZTtsZXQgRWU9W107di5keW5hbWljV2hl'@;
put 'cmVDbGF1c2UmJihFZT12LmR5bmFtaWNXaGVyZUNsYXVzZUNyZWF0b3IoZixoKSk7Y29uc3QgQmU9WyJEQVRFVElNRSIsIlRJTUUiLCJEQVRFIl0uaW5jbHVkZXMoRCk7di5zYXNTdG9yZVNlcnZpY2UuZ2V0UXVlcnlWYWx1ZXMoZCxNLEVlLGJlLGNlKS50aGVuKHFlPT57Y29uc3QgcnQ9cWUu'@;
put 'dmFscyx7U1RBUlRST1c6cHQsUk9XUzpkdCxOT0JTOkp0fT1xZS5tZXRhWzBdO2lmKHYuY2xhdXNlcy5xdWVyeU9ialtmXS5lbGVtZW50c1toXS5zdGFydHJvdz1wdCx2LmNsYXVzZXMucXVlcnlPYmpbZl0uZWxlbWVudHNbaF0ucm93cz1kdCx2LmNsYXVzZXMucXVlcnlPYmpbZl0uZWxlbWVu'@;
put 'dHNbaF0ubm9icz1KdCwxPT09cnQubGVuZ3RoJiYiIj09PXJ0WzBdLkZPUk1BVFRFRCYmIiI9PT1ydFswXS5VTkZPUk1BVFRFRD9hLmxvYWRNb3JlRmluaXNoZWQoITEpOih2LmNsYXVzZXMucXVlcnlPYmpbZl0uZWxlbWVudHNbaF0udmFsdWVzLnB1c2goLi4ucnQubWFwKHRuPT57Y29uc3Qg'@;
put 'TW49Im51bSI9PT1xZS4kdmFscy52YXJzLlVORk9STUFUVEVELnR5cGU7bGV0IEdyPU1uJiYoMCxnZy5pc1NwZWNpYWxNaXNzaW5nKSh0bi5VTkZPUk1BVFRFRCk/Ii4iK3RuLlVORk9STUFUVEVEOnRuLlVORk9STUFUVEVEO3JldHVybiBNbiYmbnVsbD09PUdyJiYoR3I9Ii4iKSx7Zm9ybWF0'@;
put 'dGVkOkJlP3RuLkZPUk1BVFRFRC5zcGxpdCgiLiIpWzBdOnRuLkZPUk1BVFRFRCx1bmZvcm1hdHRlZDpHcn19KSksYS5sb2FkTW9yZUZpbmlzaGVkKEp0LXYuY2xhdXNlcy5xdWVyeU9ialtmXS5lbGVtZW50c1toXS52YWx1ZXMubGVuZ3RoPjApKSx2LndoZXJlQ2xhdXNlRm4oKSx2LnNldFRv'@;
put 'R2xvYmFscygpLHYud2hlcmVDbGF1c2VMb2FkaW5nPSExLG51bGwhPT12LnBlbmRpbmdJTlZhbHVlc1NldCl7Y29uc3R7Y2xhdXNlSW5kZXg6dm4scXVlcnlJbmRleDpDbn09di5wZW5kaW5nSU5WYWx1ZXNTZXQ7di5zZXRJTlZhbHVlcyh2bixDbiksdi5wZW5kaW5nSU5WYWx1ZXNTZXQ9bnVs'@;
put 'bH12LmNkZi5kZXRlY3RDaGFuZ2VzKCl9KS5jYXRjaChxZT0+e3Yud2hlcmVDbGF1c2VMb2FkaW5nPSExfSl9fWNhdGNoKEQpe3YuZXZlbnRTZXJ2aWNlLmNhdGNoUmVzcG9uc2VFcnJvcigicHVibGljL2dldGNvbHZhbHMiLEQpfX0pKCl9Z2V0VmFsdWVzKGEsZCxoKXt2YXIgZj10aGlzO3Jl'@;
put 'dHVybiBlZShmdW5jdGlvbiooKXtmLndoZXJlQ2xhdXNlTG9hZGluZz0hMDtsZXQgdj0iIjt2b2lkIDAhPT1mLmxpYmRzJiYodj1mLmxpYmRzKSxmLmNsZWFyVmFsdWVzKGQsaCksZi5jbGF1c2VzLnF1ZXJ5T2JqW2hdLmVsZW1lbnRzW2RdLnZhbHVlcz1bXSxmLmNsYXVzZXMucXVlcnlPYmpb'@;
put 'aF0uZWxlbWVudHNbZF0udmFsdWU9IiIsZi5jbGF1c2VzLnF1ZXJ5T2JqW2hdLmVsZW1lbnRzW2RdLm9wZXJhdG9yPSI9IixmLmNsYXVzZXMucXVlcnlPYmpbaF0uZWxlbWVudHNbZF0udmFyaWFibGU9YTt0cnl7aWYodm9pZCAwIT09Zi5jb2xzKXtmb3IobGV0IHJlPTA7cmU8Zi5jb2xzLmxl'@;
put 'bmd0aDtyZSsrKWYuY29sc1tyZV0uTkFNRT09PWEmJihmLnNlbFZhci5pbmRleD1yZSk7Y29uc3QgTT1mLmNvbHNbZi5zZWxWYXIuaW5kZXhdLkREVFlQRTtmLmNsYXVzZXMucXVlcnlPYmpbaF0uZWxlbWVudHNbZF0uZGR0eXBlPU0sZi5jbGF1c2VzLnF1ZXJ5T2JqW2hdLmVsZW1lbnRzW2Rd'@;
put 'LnR5cGU9Zi5jb2xzW2Yuc2VsVmFyLmluZGV4XS5UWVBFLGYuY2xhdXNlcy5xdWVyeU9ialtoXS5lbGVtZW50c1tkXS5vcGVyYXRvcnM9Im51bSI9PT1mLmNsYXVzZXMucXVlcnlPYmpbaF0uZWxlbWVudHNbZF0udHlwZT9mLm51bU9wZXJhdG9yczpmLmNoYXJPcGVyYXRvcnM7bGV0IEQ9W107'@;
put 'Zi5keW5hbWljV2hlcmVDbGF1c2UmJihEPWYuZHluYW1pY1doZXJlQ2xhdXNlQ3JlYXRvcihoLGQpKTtjb25zdCBaPVsiREFURVRJTUUiLCJUSU1FIiwiREFURSJdLmluY2x1ZGVzKE0pO2Yuc2FzU3RvcmVTZXJ2aWNlLmdldFF1ZXJ5VmFsdWVzKGEsdixELDEsZi5pbml0aWFsX3Jvd3MpLnRo'@;
put 'ZW4ocmU9Pntjb25zdCBjZT1yZS52YWxzLHtTVEFSVFJPVzpiZSxST1dTOkVlLE5PQlM6QmV9PXJlLm1ldGFbMF07aWYoZi5jbGF1c2VzLnF1ZXJ5T2JqW2hdLmVsZW1lbnRzW2RdLnN0YXJ0cm93PWJlLGYuY2xhdXNlcy5xdWVyeU9ialtoXS5lbGVtZW50c1tkXS5yb3dzPUVlLGYuY2xhdXNl'@;
put 'cy5xdWVyeU9ialtoXS5lbGVtZW50c1tkXS5ub2JzPUJlLGYuY2xhdXNlcy5xdWVyeU9ialtoXS5lbGVtZW50c1tkXS52YWx1ZXM9Y2UubWFwKHFlPT57Y29uc3QgcnQ9Im51bSI9PT1yZS4kdmFscy52YXJzLlVORk9STUFUVEVELnR5cGU7bGV0IGR0PXJ0JiYoMCxnZy5pc1NwZWNpYWxNaXNz'@;
put 'aW5nKShxZS5VTkZPUk1BVFRFRCk/Ii4iK3FlLlVORk9STUFUVEVEOnFlLlVORk9STUFUVEVEO3JldHVybiBydCYmbnVsbD09PWR0JiYoZHQ9Ii4iKSx7Zm9ybWF0dGVkOlo/cWUuRk9STUFUVEVELnNwbGl0KCIuIilbMF06cWUuRk9STUFUVEVELHVuZm9ybWF0dGVkOmR0fX0pLnNsaWNlKDAs'@;
put 'MmUzKSxmLndoZXJlQ2xhdXNlRm4oKSxmLnNldFRvR2xvYmFscygpLGYud2hlcmVDbGF1c2VMb2FkaW5nPSExLG51bGwhPT1mLnBlbmRpbmdJTlZhbHVlc1NldCl7Y29uc3R7Y2xhdXNlSW5kZXg6cWUscXVlcnlJbmRleDpydH09Zi5wZW5kaW5nSU5WYWx1ZXNTZXQ7Zi5zZXRJTlZhbHVlcyhx'@;
put 'ZSxydCksZi5wZW5kaW5nSU5WYWx1ZXNTZXQ9bnVsbH1mLmNkZi5kZXRlY3RDaGFuZ2VzKCl9KS5jYXRjaChyZT0+e2Yud2hlcmVDbGF1c2VMb2FkaW5nPSExfSl9fWNhdGNoKE0pe2YuZXZlbnRTZXJ2aWNlLmNhdGNoUmVzcG9uc2VFcnJvcigicHVibGljL2dldGNvbHZhbHMiLE0pfX0pKCl9'@;
put 'Z2V0bG9naWMoYSl7dGhpcy5sb2dpYz1hLHRoaXMud2hlcmVDbGF1c2VGbigpfXNldExvZ2ljKCl7dGhpcy53aGVyZUNsYXVzZUZuKCksdGhpcy5zZXRUb0dsb2JhbHMoKX1pc0FycihhKXtyZXR1cm4gYSBpbnN0YW5jZW9mIEFycmF5JiZhLmxlbmd0aD4wJiZ0eXBlb2YgYVswXS5jaGVja2Vk'@;
put 'PCJ1In1zZWxlY3RlZExhYmVsQ2hhbmdlKGEsZCl7ZC52YWx1ZVZhcmlhYmxlPSJWYXJpYWJsZSI9PT1hLGQudmFsdWU9IiIsdGhpcy53aGVyZUNsYXVzZUZuKCl9dmFyaWFibGVJbnB1dENoYW5nZShhLGQsaCxmKXt0aGlzLmdldFZhbHVlcyhhLGQsaCl9c2V0VmFyaWFibGVWYWx1ZXMoYSxk'@;
put 'LGgpe2xldCBmPXRoaXMuY2xhdXNlcy5xdWVyeU9ialtoXS5lbGVtZW50c1tkXS5vcGVyYXRvcjsiQkVUV0VFTiIhPT1mJiYiSU4iIT09ZiYmIk5PVCBJTiIhPT1mJiYodGhpcy5jbGF1c2VzLnF1ZXJ5T2JqW2hdLmVsZW1lbnRzW2RdLnZhbHVlPWEudG9TdHJpbmcoKSksdGhpcy53aGVyZUNs'@;
put 'YXVzZUZuKCksdGhpcy5zZXRUb0dsb2JhbHMoKX1zZXRWYXJpYWJsZU9wZXJhdG9yKGEsZCxoKXtsZXQgZj10aGlzLmNsYXVzZXMucXVlcnlPYmpbaF0uZWxlbWVudHNbYV0udmFsdWU7ZiBpbnN0YW5jZW9mIEFycmF5JiYiSU4iIT09ZCYmIk5PVCBJTiIhPT1kJiYoZj1mIGluc3RhbmNlb2Yg'@;
put 'QXJyYXkmJjI9PT1mLmxlbmd0aCYmInN0cmluZyI9PXR5cGVvZiBmWzBdP2ZbMF06IiIpLHRoaXMuY2xlYXJWYWx1ZXNPcGVyYXRvcihhLGgpLHRoaXMuY2xhdXNlcy5xdWVyeU9ialtoXS5lbGVtZW50c1thXS5vcGVyYXRvcj1kLCgiPSI9PT1kfHwiPiI9PT1kfHwiPCI9PT1kfHwiPD0iPT09'@;
put 'ZHx8Ij49Ij09PWR8fCJORSI9PT1kKSYmKHRoaXMuY2xhdXNlcy5xdWVyeU9ialtoXS5lbGVtZW50c1thXS52YWx1ZT1mKSwiQkVUV0VFTiI9PT1kJiYodGhpcy5jbGF1c2VzLnF1ZXJ5T2JqW2hdLmVsZW1lbnRzW2FdLnZhbHVlPVtdLHRoaXMuY2xhdXNlcy5xdWVyeU9ialtoXS5lbGVtZW50'@;
put 'c1thXS52YWx1ZS5wdXNoKGYpLHRoaXMuY2xhdXNlcy5xdWVyeU9ialtoXS5lbGVtZW50c1thXS52YWx1ZS5wdXNoKCIiKSksKCJJTiI9PT1kfHwiTk9UIElOIj09PWQpJiZ0aGlzLnNldElOVmFsdWVzKGgsYSksdGhpcy53aGVyZUNsYXVzZUZuKCksdGhpcy5zZXRUb0dsb2JhbHMoKX1zZXRJ'@;
put 'TlZhbHVlcyhhLGQpe2NvbnN0IGg9W10sZj10aGlzLmNsYXVzZXMucXVlcnlPYmpbYV0uZWxlbWVudHNbZF0udmFsdWVzO2YubGVuZ3RoPDEmJih0aGlzLnBlbmRpbmdJTlZhbHVlc1NldD17Y2xhdXNlSW5kZXg6YSxxdWVyeUluZGV4OmR9KTtmb3IobGV0IHY9MDt2PGYubGVuZ3RoO3YrKylo'@;
put 'LnB1c2goe2NoZWNrZWQ6ITEsdmFsOmZbdl0uZm9ybWF0dGVkfSk7dGhpcy5jbGF1c2VzLnF1ZXJ5T2JqW2FdLmVsZW1lbnRzW2RdLnZhbHVlPWh9Y2xlYXJWYWx1ZXMoYSxkKXt0aGlzLmNsYXVzZXMucXVlcnlPYmpbZF0uZWxlbWVudHNbYV0udmFsdWU9IiJ9Y2xlYXJWYWx1ZXNPcGVyYXRv'@;
put 'cihhLGQpe2xldCBoPXRoaXMuY2xhdXNlcy5xdWVyeU9ialtkXS5lbGVtZW50c1thXS5vcGVyYXRvcjsoIkJFVFdFRU4iPT09aHx8IklOIj09PWh8fCJOT1QgSU4iPT09aHx8IkNPTlRBSU5TIj09PWgpJiZ0aGlzLmNsZWFyVmFsdWVzKGEsZCl9aGFzSW52YWxpZENsdWFzZShhKXtmb3IobGV0'@;
put 'IGQgb2YgYSlpZihkLmludmFsaWRDbGF1c2U9ITEsIiI9PT1kLnZhbHVlJiYiTkUiIT09ZC5vcGVyYXRvciYmIkNPTlRBSU5TIiE9PWQub3BlcmF0b3J8fG51bGw9PT1kLnZhcmlhYmxlfHxudWxsPT09ZC5vcGVyYXRvcnx8bnVsbD09PWQudmFsdWUpcmV0dXJuIGQuaW52YWxpZENsYXVzZT0h'@;
put 'MCwhMDtyZXR1cm4gYS5pbnZhbGlkQ2xhdXNlPSExLCExfWhhc0ludmFsaWRHcm91cENsdWFzZSgpe2ZvcihsZXQgYT0wO2E8dGhpcy5jbGF1c2VzLnF1ZXJ5T2JqLmxlbmd0aDthKyspe2lmKHRoaXMuaGFzSW52YWxpZENsdWFzZSh0aGlzLmNsYXVzZXMucXVlcnlPYmpbYV0uZWxlbWVudHMp'@;
put 'KXJldHVybiB0aGlzLmNsYXVzZXMucXVlcnlPYmpbYV0uaW52YWxpZENsYXVzZT0hMCwhMDt0aGlzLmNsYXVzZXMucXVlcnlPYmpbYV0uaW52YWxpZENsYXVzZT0hMX1yZXR1cm4hMX1hZGRDbGF1c2UoYSl7aWYodGhpcy5oYXNJbnZhbGlkQ2x1YXNlKHRoaXMuY2xhdXNlcy5xdWVyeU9ialth'@;
put 'XS5lbGVtZW50cykpcmV0dXJuIHZvaWQgdGhpcy5ldmVudFNlcnZpY2Uuc2hvd0luZm9Nb2RhbCgiRXJyb3IiLCJDYW5ub3QgYWRkIG5ldyBjbGF1c2UsIHdoZW4gb25lIG9yIG1vcmUgY2xhdXNlcyBhcmUgaW52YWxpZCBvciBlbXB0eS4iKTt0aGlzLmNsYXVzZUFtdC5wdXNoKCIiKSx0aGlz'@;
put 'LmNsYXVzZXMucXVlcnlPYmpbYV0uZWxlbWVudHMucHVzaCh7bG9naWM6bnVsbCx0eXBlOm51bGwsdmFyaWFibGU6bnVsbCxvcGVyYXRvcjpudWxsLHZhbHVlOm51bGwsdmFsdWVzOltdLG9wZXJhdG9yczpbXX0pO2xldCBkPXRoaXMuY2xhdXNlcy5xdWVyeU9ialthXS5jbGF1c2VMb2dpYzt0'@;
put 'aGlzLmNsYXVzZXMucXVlcnlPYmpbYV0uY2xhdXNlTG9naWM9dHlwZW9mIGQ+InUiPyJBTkQiOiJPUiI9PT1kPyJPUiI6IkFORCIsdGhpcy53aGVyZUNsYXVzZUZuKCksdGhpcy5zZXRUb0dsb2JhbHMoKX1hZGRHcm91cENsYXVzZSgpe3RoaXMuaGFzSW52YWxpZEdyb3VwQ2x1YXNlKCk/dGhp'@;
put 'cy5ldmVudFNlcnZpY2Uuc2hvd0luZm9Nb2RhbCgiRXJyb3IiLCJDYW5ub3QgYWRkIG5ldyBjbGF1c2UsIHdoZW4gb25lIG9yIG1vcmUgY2xhdXNlcyBhcmUgaW52YWxpZCBvciBlbXB0eS4iKToodGhpcy5jbGF1c2VzLnF1ZXJ5T2JqLnB1c2goe2VsZW1lbnRzOlt7bG9naWM6bnVsbCx0eXBl'@;
put 'Om51bGwsdmFyaWFibGU6bnVsbCxvcGVyYXRvcjpudWxsLHZhbHVlOm51bGwsdmFsdWVzOltdLG9wZXJhdG9yczpbXX1dfSksdGhpcy5zZXRUb0dsb2JhbHMoKSl9aXNJbkh0bWxDb2xsZWN0aW9uKGEsZCl7Zm9yKGxldCBoPTA7aDxkLmxlbmd0aDtoKyspaWYoZFtoXS52YWx1ZT09PWEpcmV0'@;
put 'dXJuITA7cmV0dXJuITF9cmVtb3ZlR3JvdXBDbGF1c2UoYSl7dGhpcy5jbGF1c2VzLnF1ZXJ5T2JqLnNwbGljZShhLDEpLHRoaXMud2hlcmVDbGF1c2VGbigpfXJlbW92ZUNsYXVzZShhLGQpe3RoaXMuY2xhdXNlcy5xdWVyeU9ialtkXS5lbGVtZW50cy5zcGxpY2UoYSwxKSx0aGlzLndoZXJl'@;
put 'Q2xhdXNlRm4oKSx0aGlzLnNldFRvR2xvYmFscygpfXdoZXJlQ2xhdXNlRm4oYT0hMSl7Y29uc3QgZD10aGlzLmhlbHBlclNlcnZpY2UuZGVlcENsb25lKHRoaXMuY2xhdXNlcyk7aWYoYSYmKGQucXVlcnlPYmpbMF0uZWxlbWVudHM9W10pLHZvaWQgMCE9PXRoaXMubGliZHMpe2xldCBoPXRo'@;
put 'aXMuc2FzU3RvcmVTZXJ2aWNlLndoZXJlQ2xhdXNlQ3JlYXRvcihkLHRoaXMuZ3JvdXBMb2dpYyx0aGlzLmxpYmRzKTthfHwodGhpcy53aGVyZUNsYXVzZT1oLndoZXJlQ2xhdXNlLHRoaXMud2hlcmVTdHJpbmc9aC5zdHJpbmcpfX1uZ0FmdGVyVmlld0luaXQoKXt2YXIgYT10aGlzO3JldHVy'@;
put 'biBlZShmdW5jdGlvbiooKXthLl9yZW1vdmVRcnk9YS5zYXNTdG9yZVNlcnZpY2UucmVtb3ZlUXVlcnkuc3Vic2NyaWJlKGQ9PnthLmNsYXVzZXMucXVlcnlPYmoubGVuZ3RoPj0xJiYoYS5jbGF1c2VzLnF1ZXJ5T2JqLmxlbmd0aD0xLGEuY2xhdXNlcy5xdWVyeU9ialswXS5lbGVtZW50cy5s'@;
put 'ZW5ndGg+PTEmJihhLmNsYXVzZXMucXVlcnlPYmpbMF0uZWxlbWVudHMubGVuZ3RoPTEsYS5jbGF1c2VzLnF1ZXJ5T2JqWzBdLmVsZW1lbnRzPVtdLGEuY2xhdXNlcy5xdWVyeU9ialswXS5lbGVtZW50cy5wdXNoKHtsb2dpYzpudWxsLHR5cGU6bnVsbCx2YXJpYWJsZTpudWxsLG9wZXJhdG9y'@;
put 'Om51bGwsdmFsdWU6bnVsbCx2YWx1ZXM6W10sb3BlcmF0b3JzOltdfSksYS53aGVyZUNsYXVzZUZuKCkpKX0pLGEuY29sdW1uc1N1Yj1hLnNhc1N0b3JlU2VydmljZS5jb2x1bW5zLnN1YnNjcmliZShkPT57bGV0IGg9ZC5kYXRhLmNvbHM7ImhvbWUiIT09S24ucm9vdFBhcmFtJiYiZWRpdG9y'@;
put 'IiE9PUtuLnJvb3RQYXJhbXx8KGEuY29scz1oLGEubGliZHM9ZC5saWJkcyxLbi5lZGl0b3IuZmlsdGVyLmNvbHM9SlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShoKSkpLCJ2aWV3Ij09PUtuLnJvb3RQYXJhbSYmS24udmlld2VyLmZpbHRlci5jb2xzLmxlbmd0aDwxJiYoYS5jb2xzPWgsYS5s'@;
put 'aWJkcz1kLmxpYmRzLEtuLnZpZXdlci5maWx0ZXIuY29scz1KU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGgpKSksYS5saWJkc3x8KGEubGliZHM9ZC5saWJkcyl9KSxhLnZhbHVlc1N1Yj1hLnNhc1N0b3JlU2VydmljZS52YWx1ZXMuc3Vic2NyaWJlKGQ9PnsoImhvbWUiPT09S24ucm9vdFBh'@;
put 'cmFtfHwiZWRpdG9yIj09PUtuLnJvb3RQYXJhbSkmJktuLmVkaXRvci5maWx0ZXIudmFscy5sZW5ndGg8MSYmKGEudmFscz1kLnZhbHMsS24uZWRpdG9yLmZpbHRlci52YWxzPUpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoZC52YWxzKSkpLCJ2aWV3Ij09PUtuLnJvb3RQYXJhbSYmS24udmll'@;
put 'd2VyLmZpbHRlci52YWxzLmxlbmd0aDwxJiYoYS52YWxzPWQudmFscyxLbi52aWV3ZXIuZmlsdGVyLnZhbHM9SlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShkLnZhbHMpKSl9KX0pKCl9b25BdXRvY29tcGxldGVMb2FkaW5nTW9yZShhLGQsaCxmKXt0aGlzLmdldFZhbHVlc0xvYWRNb3JlKGEs'@;
put 'ZCxoLGYpfW5nQWZ0ZXJDb250ZW50SW5pdCgpe3RoaXMuZ2V0RnJvbUdsb2JhbHMoKSxzZXRUaW1lb3V0KCgpPT57bGV0IGE9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiI3ZhbHNfdmFyX2lkMF8wIik7YSYmYS5mb2N1cygpfSw1MDApfW5nT25EZXN0cm95KCl7dGhpcy5jb2x1bW5zU3ViJiZ0'@;
put 'aGlzLmNvbHVtbnNTdWIudW5zdWJzY3JpYmUoKSx0aGlzLnZhbHVlc1N1YiYmdGhpcy52YWx1ZXNTdWIudW5zdWJzY3JpYmUoKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShHZShraCksR2UodmMpLEdlKFN1KSxHZShFcykpfX1zdGF0aWN7dGhp'@;
put 'cy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siYXBwLXF1ZXJ5Il1dLGlucHV0czp7Y2FjaGluZzoiY2FjaGluZyIsdmlld2JveElkOiJ2aWV3Ym94SWQifSxmZWF0dXJlczpbZGEoW3twcm92aWRlOkJmLHVzZVZhbHVlOiJlbi1HQiJ9XSldLGRlY2xzOjM4LHZhcnM6MTEsY29u'@;
put 'c3RzOltbInBpY2tlciIsIiJdLFsibm90UGlja2VyIiwiIl0sWyJub3RQaWNrZXJSYW5nZSIsIiJdLFsiY2hlY2tib3hWYWx1ZXMiLCIiXSxbMSwiY2xyLWZsZXgtcm93IiwiY2xyLWZvcm0tY29udHJvbCIsIm0tMCJdLFsxLCJjbHItY29udHJvbC1jb250YWluZXIiXSxbImNsckNoZWNrYm94'@;
put 'IiwiIiwidHlwZSIsImNoZWNrYm94IiwzLCJuZ01vZGVsQ2hhbmdlIiwibmdNb2RlbCJdLFsxLCJjbHItY29udHJvbC1sYWJlbCJdLFsxLCJjbHItY29udHJvbC1jb250YWluZXIiLCJtbC0xNSJdLFsiY2xyQ2hlY2tib3giLCIiLCJ0eXBlIiwiY2hlY2tib3giLCJpZCIsInVzZVBpY2tlcnMi'@;
put 'LDMsIm5nTW9kZWxDaGFuZ2UiLCJjaGFuZ2UiLCJuZ01vZGVsIl0sWzEsImNsci1yb3ciXSxbMSwic2VsZWN0IiwiY2xyLWNvbC1tZC0yIiwibWItMzAiXSxbImNsclNlbGVjdCIsIiIsMywibmdNb2RlbENoYW5nZSIsImRpc2FibGVkIiwibmdNb2RlbCJdLFszLCJzZWxlY3RlZCIsNCwibmdG'@;
put 'b3IiLCJuZ0Zvck9mIl0sWzEsImNsci1jb2wtbWQtMTAiLCJtYi0zMCJdLFsxLCJsaW5lLW51bWJlcnMiLCJsYW5ndWFnZS1tYXJrdXAiXSxbImNsYXNzIiwicHJvZ3Jlc1N0YXRpYyBwcm9ncmVzcyBsb29wIiw0LCJuZ0lmIl0sWzEsImxhbmd1YWdlLXNxbCJdLFsxLCJjb250ZW50Il0sWzEs'@;
put 'ImNsYXVzZXMtY29udGFpbmVyIiwiY2xyLWNvbC1tZC0xMiJdLFs0LCJuZ0lmIl0sWyJjbGFzcyIsImNsYXVzZS1yb3ciLDQsIm5nRm9yIiwibmdGb3JPZiJdLFszLCJzZWxlY3RlZCJdLFsxLCJwcm9ncmVzU3RhdGljIiwicHJvZ3Jlc3MiLCJsb29wIl0sWzEsImNsYXVzZS1yb3ciXSxbMSwi'@;
put 'Y2xhdXNlLWxvZ2ljIiwiY2xyLWNvbC1tZC0yIl0sWzEsInNlbGVjdCJdLFsiY2xyU2VsZWN0IiwiIiwzLCJuZ01vZGVsQ2hhbmdlIiwibmdNb2RlbCIsImRpc2FibGVkIl0sWyJjbGFzcyIsImJ0biBidG4tcHJpbWFyeSBidG4tYmxvY2sgbXQtMTAiLDMsImNsaWNrIiw0LCJuZ0lmIl0sWzEs'@;
put 'ImNsYXVzZS1xdWVyeSIsImNsci1jb2wtbWQtMTAiXSxbInNoYXBlIiwidGltZXMiLCJzaXplIiwiMzYiLCJjbGFzcyIsInJlbW92ZS1ncm91cC1jbGF1c2UtYnV0dG9uIiwzLCJjbGljayIsNCwibmdJZiJdLFsiY2xhc3MiLCJjbHItcm93IiwzLCJpbnZhbGlkLWNsYXVzZSIsNCwibmdGb3Ii'@;
put 'LCJuZ0Zvck9mIl0sWzEsImJ0biIsImJ0bi1wcmltYXJ5IiwiYnRuLWJsb2NrIiwibXQtMTAiLDMsImNsaWNrIl0sWyJzaGFwZSIsInBsdXMiXSxbInNoYXBlIiwidGltZXMiLCJzaXplIiwiMzYiLDEsInJlbW92ZS1ncm91cC1jbGF1c2UtYnV0dG9uIiwzLCJjbGljayJdLFsxLCJ2YXJpYWJs'@;
put 'ZS1jb2wiLCJmb3JtLWdyb3VwIiwiY2xyLWNvbC1tZC0zIl0sWzEsImRhdGFsaXN0LXdyYXBwZXIiXSxbImxhYmVsIiwiVmFyaWFibGUiLDMsInZhbHVlQ2hhbmdlIiwib25JbnB1dEV2ZW50IiwiaWQiLCJpbnB1dElkIiwiZW1pdE9ubHlTZWxlY3RlZCIsInZhbHVlIl0sWzQsIm5nRm9yIiwi'@;
put 'bmdGb3JPZiJdLFsxLCJvcGVyYXRvci1jb2wiLCJmb3JtLWdyb3VwIiwiY2xyLWNvbC1tZC0zIl0sWyJjbHJTZWxlY3QiLCIiLDMsIm5nTW9kZWxDaGFuZ2UiLCJuZ01vZGVsIl0sWyJjbGFzcyIsInZhbHVlLWNvbCBmb3JtLWdyb3VwIGNsci1jb2wtbWQtMyIsNCwibmdWYXIiXSxbMSwiY2xh'@;
put 'dXNlLWJ1dHRvbnMiLCJjbHItY29sLW1kLTIiLCJidG4tZ3JvdXAiXSxbMSwiYnRuIiwiYnRuLXdhcm5pbmciLCJidG4tYmxvY2siLDMsImNsaWNrIiwiZGlzYWJsZWQiXSxbInNoYXBlIiwibWludXMiXSxbMSwiYnRuIiwiYnRuLXN1Y2Nlc3MiLCJidG4tYmxvY2siLDMsImNsaWNrIl0sWzEs'@;
put 'InZhbHVlLWNvbCIsImZvcm0tZ3JvdXAiLCJjbHItY29sLW1kLTMiXSxbImNsYXNzIiwiY2hlY2tib3gtdmFscyIsNCwibmdJZiJdLFsiY2xhc3MiLCJzaW5nbGUtZmllbGQtdmFscyIsNCwibmdJZiJdLFsiY2xhc3MiLCJyYW5nZS12YWxzIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImNvbnRhaW5z'@;
put 'LXZhbHMiLDQsIm5nSWYiXSxbMSwiY2hlY2tib3gtdmFscyJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLWxpbmsiLDMsImNsaWNrIl0sWzQsIm5nVGVtcGxhdGVPdXRsZXQiLCJuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dCJdLFsxLCJzaW5nbGUtZmllbGQtdmFscyJdLFsxLCJyYW5n'@;
put 'ZS12YWxzIl0sWzEsImZyb20iXSxbMSwidG8iXSxbMSwiY29udGFpbnMtdmFscyJdLFsidHlwZSIsInRleHQiLDEsImlucHV0LXZhbCIsMywibmdNb2RlbENoYW5nZSIsIm5nTW9kZWwiXSxbMywibmdTd2l0Y2giXSxbNCwibmdTd2l0Y2hDYXNlIl0sWyJsYWJlbCIsIlZhbHVlIiwidHlwZSIs'@;
put 'ImRhdGUiLDMsInZhbHVlQ2hhbmdlIiwiZGlzYWJsZVNvZnRzZWxlY3QiLCJpbnB1dElkIiwidmFsdWUiXSxbImxhYmVsIiwiVmFsdWUiLCJ0eXBlIiwiZGF0ZSIsMywidmFsdWVDaGFuZ2UiLCJvbklucHV0RXZlbnQiLCJkaXNhYmxlU29mdHNlbGVjdCIsImlucHV0SWQiLCJ2YWx1ZSJdLFsi'@;
put 'dHlwZSIsInRpbWUiLDMsInZhbHVlQ2hhbmdlIiwib25JbnB1dEV2ZW50IiwiZGlzYWJsZVNvZnRzZWxlY3QiLCJpbnB1dElkIiwidmFsdWUiXSxbImxhYmVsIiwiVmFsdWUiLCJ0eXBlIiwidGltZSIsMywib25JbnB1dEV2ZW50IiwiZGlzYWJsZVNvZnRzZWxlY3QiLCJpbnB1dElkIiwidmFs'@;
put 'dWUiXSxbImxhYmVsIiwiVmFsdWUiLDMsInNlbGVjdGVkTGFiZWxDaGFuZ2UiLCJ2YWx1ZUNoYW5nZSIsIm9uSW5wdXRFdmVudCIsIm9uQXV0b2NvbXBsZXRlTG9hZGluZ01vcmUiLCJzZWNvbmRMYWJlbCIsImVtaXRPbmx5U2VsZWN0ZWQiLCJpbnB1dElkIiwidmFsdWUiLCJlbmFibGVMb2Fk'@;
put 'TW9yZSJdLFszLCJ2YWx1ZSIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzMsInZhbHVlIl0sWzMsInZhbHVlIiw0LCJuZ0lmIl0sWyJsYWJlbCIsIlZhbHVlIiwzLCJ2YWx1ZUNoYW5nZSIsIm9uSW5wdXRFdmVudCIsIm9uQXV0b2NvbXBsZXRlTG9hZGluZ01vcmUiLCJpbnB1dElkIiwidmFsdWUi'@;
put 'LCJlbmFibGVMb2FkTW9yZSIsImRpc2FibGVkIl0sWzEsImluLXZhbHVlcy1tb2RhbCIsMywiY2xyTW9kYWxPcGVuIiwiY2xyTW9kYWxDbG9zYWJsZSJdLFsxLCJtb2RhbC10aXRsZSJdLFsxLCJtb2RhbC1ib2R5Il0sWyJjbGFzcyIsIm5vLXZhbHVlcyIsNCwibmdJZiJdLFsiY2xhc3MiLCJm'@;
put 'b3JtLWJsb2NrIiw0LCJuZ0lmIl0sWzEsIm1vZGFsLWZvb3RlciJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLW91dGxpbmUiLDMsImNsaWNrIl0sWzEsIm5vLXZhbHVlcyJdLFsxLCJmb3JtLWJsb2NrIl0sWyJ0eXBlIiwiY2hlY2tib3giLCJjbHJDaGVja2JveCIsIiIsMywibmdN'@;
put 'b2RlbENoYW5nZSIsIm5nTW9kZWwiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZCxoKXtpZigxJmQpe2NvbnN0IGY9TG4oKTtkZSgwLCJkaXYiLDQpKDEsImRpdiIsNSkoMiwiY2xyLWNoZWNrYm94LXdyYXBwZXIiKSgzLCJpbnB1dCIsNiksZ2koIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKE0pe3Jl'@;
put 'dHVybiB3dChmKSxtaShoLmR5bmFtaWNXaGVyZUNsYXVzZSxNKXx8KGguZHluYW1pY1doZXJlQ2xhdXNlPU0pLEN0KE0pfSksaGUoKSxkZSg0LCJsYWJlbCIsNyksTGUoNSwiRHluYW1pYyB3aGVyZSBjbGF1c2UiKSxoZSgpKCkoKSxkZSg2LCJkaXYiLDgpKDcsImNsci1jaGVja2JveC13cmFw'@;
put 'cGVyIikoOCwiaW5wdXQiLDkpLGdpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihNKXtyZXR1cm4gd3QoZiksbWkoaC51c2VQaWNrZXJzLE0pfHwoaC51c2VQaWNrZXJzPU0pLEN0KE0pfSksRnQoImNoYW5nZSIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoZiksQ3QoaC51c2VQaWNrZXJzQ2hhbmdl'@;
put 'KCkpfSksaGUoKSxkZSg5LCJsYWJlbCIsNyksTGUoMTAsIiBVc2UgcGlja2VycyAiKSxoZSgpKCkoKSgpLGRlKDExLCJkaXYiLDEwKSgxMiwiZGl2IiwxMSkoMTMsImNsci1zZWxlY3QtY29udGFpbmVyIikoMTQsImxhYmVsIiksTGUoMTUsIkdyb3VwIGxvZ2ljIiksaGUoKSxkZSgxNiwic2Vs'@;
put 'ZWN0IiwxMiksZ2koIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKE0pe3JldHVybiB3dChmKSxtaShoLmdyb3VwTG9naWMsTSl8fChoLmdyb3VwTG9naWM9TSksQ3QoTSl9KSxGdCgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoZiksQ3QoaC5zZXRHcm91cExvZ2ljKGguZ3Jv'@;
put 'dXBMb2dpYykpfSksZ3QoMTcsWW10LDIsMiwib3B0aW9uIiwxMyksaGUoKSgpKCksZGUoMTgsImRpdiIsMTQpKDE5LCJwcmUiLDE1KSxMZSgyMCwiICAgICAgIiksZ3QoMjEsR210LDQsMCwiZGl2IiwxNiksTGUoMjIsIlxuXG4gICAgICAiKSxkZSgyMywiY29kZSIsMTcpLExlKDI0KSxoZSgp'@;
put 'LExlKDI1LCJcbiAgICAiKSxoZSgpKCkoKSxkZSgyNiwiZGl2IiwxOCkoMjcsImRpdiIsMTkpLGd0KDI4LCRtdCwxLDAsImRpdiIsMjApKDI5LHU2dCwxNSw4LCJkaXYiLDIxKSxoZSgpKCksZ3QoMzAscDZ0LDQsNCwibmctdGVtcGxhdGUiLG51bGwsMCxJYykoMzIsXzZ0LDMsNywibmctdGVt'@;
put 'cGxhdGUiLG51bGwsMSxJYykoMzQsQzZ0LDIsNSwibmctdGVtcGxhdGUiLG51bGwsMixJYykoMzYsRTZ0LDksNCwibmctdGVtcGxhdGUiLG51bGwsMyxJYyl9MiZkJiYoZmUoMykscGkoIm5nTW9kZWwiLGguZHluYW1pY1doZXJlQ2xhdXNlKSxmZSg1KSxwaSgibmdNb2RlbCIsaC51c2VQaWNr'@;
put 'ZXJzKSxmZSg4KSxNZSgiZGlzYWJsZWQiLChudWxsPT1oLmNsYXVzZXN8fG51bGw9PWguY2xhdXNlcy5xdWVyeU9iaj9udWxsOmguY2xhdXNlcy5xdWVyeU9iai5sZW5ndGgpPDEpLHBpKCJuZ01vZGVsIixoLmdyb3VwTG9naWMpLGZlKCksTWUoIm5nRm9yT2YiLGgubG9naWNPcGVyYXRvcnMp'@;
put 'LGZlKDQpLE1lKCJuZ0lmIixoLndoZXJlQ2xhdXNlTG9hZGluZyksZmUoMyksd3IoaC53aGVyZUNsYXVzZSksZmUoMyksVHIoImNsci1jb2wtbWQtMTAiLChudWxsPT1oLmNsYXVzZXN8fG51bGw9PWguY2xhdXNlcy5xdWVyeU9iaj9udWxsOmguY2xhdXNlcy5xdWVyeU9iai5sZW5ndGgpPjEp'@;
put 'LGZlKCksTWUoIm5nSWYiLChudWxsPT1oLmNsYXVzZXN8fG51bGw9PWguY2xhdXNlcy5xdWVyeU9iaj9udWxsOmguY2xhdXNlcy5xdWVyeU9iai5sZW5ndGgpPjEpLGZlKCksTWUoIm5nRm9yT2YiLGguY2xhdXNlcy5xdWVyeU9iaikpfSxkZXBlbmRlbmNpZXM6W25zLGJhLE4xLFMyLGNwLEhs'@;
put 'LG91LEt1LGRzLElkLEJ5LFNoLEU3LCR5LEEyLGsyLHFsLE1kLFQyLG5sLCRzLEQ2ZSxTdyxCbXQsam10XSxlbmNhcHN1bGF0aW9uOjJ9KX19cmV0dXJuIGN9KSgpLHI0PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt9b25DbGljayhhKXthLnRhcmdldC5mb2N1cygpfXN0YXRpY3t0aGlz'@;
put 'Llx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwiYXBwU3RlYWxGb2N1cyIsIiJdXSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZCxoKXsxJmQmJkZ0KCJjbGljayIsZnVuY3Rpb24odil7'@;
put 'cmV0dXJuIGgub25DbGljayh2KX0pfX0pfX1yZXR1cm4gY30pKCk7Y29uc3QgVDZ0PVsic2VhcmNoTGliVHJlZUlucHV0Il07ZnVuY3Rpb24gQTZ0KGMsbCl7MSZjJiZHdCgwLCJjbHItaWNvbiIsMTEpfWZ1bmN0aW9uIGs2dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImNsci1p'@;
put 'Y29uIiwxMiksRnQoImNsaWNrIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9UmUoMik7cmV0dXJuIGgubGlicmFyaWVzU2VhcmNoPSIiLEN0KGgubGlicmFyeU9uRmlsdGVyKCkpfSksaGUoKX19ZnVuY3Rpb24gRDZ0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiY2xyLXRyZWUt'@;
put 'bm9kZSIsNikoMSwiZGl2Iiw3KSgyLCJpbnB1dCIsOCwwKSxnaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1SZSgpO3JldHVybiBtaShmLmxpYnJhcmllc1NlYXJjaCxoKXx8KGYubGlicmFyaWVzU2VhcmNoPWgpLEN0KGgpfSksRnQoImtleXVwIixmdW5jdGlv'@;
put 'bigpe3JldHVybiB3dChhKSxDdChSZSgpLmxpYnJhcnlPbkZpbHRlcigpKX0pLGhlKCksZ3QoNCxBNnQsMSwwLCJjbHItaWNvbiIsOSkoNSxrNnQsMSwwLCJjbHItaWNvbiIsMTApLGhlKCkoKX1pZigyJmMpe2NvbnN0IGE9aGEoMyksZD1SZSgpO2ZlKDIpLHBpKCJuZ01vZGVsIixkLmxpYnJh'@;
put 'cmllc1NlYXJjaCksZmUoMiksTWUoIm5nSWYiLGEudmFsdWUubGVuZ3RoPDEpLGZlKCksTWUoIm5nSWYiLGEudmFsdWUubGVuZ3RoPjApfX1mdW5jdGlvbiBJNnQoYyxsKXsxJmMmJkd0KDAsImNsci1pY29uIiwxMSl9ZnVuY3Rpb24gUjZ0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUo'@;
put 'MCwiY2xyLWljb24iLDEyKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSksUmUoKTtjb25zdCBoPWhhKDMpLGY9UmUoMikuJGltcGxpY2l0LHY9UmUoKTtyZXR1cm4gaC52YWx1ZT0iIixmLnNlYXJjaFN0cmluZz0iIixDdCh2LnRyZWVPbkZpbHRlcihmLCJ0YWJsZXMuVEFCTEVOQU1FIikp'@;
put 'fSksaGUoKX19ZnVuY3Rpb24gTDZ0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiY2xyLXRyZWUtbm9kZSIsNikoMSwiZGl2Iiw3KSgyLCJpbnB1dCIsMTgsMiksZ2koIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9UmUoMikuJGltcGxpY2l0O3JldHVy'@;
put 'biBtaShmLnNlYXJjaFN0cmluZyxoKXx8KGYuc2VhcmNoU3RyaW5nPWgpLEN0KGgpfSksRnQoImtleXVwIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9UmUoMikuJGltcGxpY2l0O3JldHVybiBDdChSZSgpLnRyZWVPbkZpbHRlcihoLCJ0YWJsZXMiKSl9KSxoZSgpLGd0KDQsSTZ0LDEsMCwi'@;
put 'Y2xyLWljb24iLDkpKDUsUjZ0LDEsMCwiY2xyLWljb24iLDEwKSxoZSgpKCl9aWYoMiZjKXtjb25zdCBhPWhhKDMpLGQ9UmUoMikuJGltcGxpY2l0O2ZlKDIpLHBpKCJuZ01vZGVsIixkLnNlYXJjaFN0cmluZyksZmUoMiksTWUoIm5nSWYiLGEudmFsdWUubGVuZ3RoPDEpLGZlKCksTWUoIm5n'@;
put 'SWYiLGEudmFsdWUubGVuZ3RoPjApfX1mdW5jdGlvbiBPNnQoYyxsKXsxJmMmJkd0KDAsImNsci1pY29uIiwyNil9ZnVuY3Rpb24gUDZ0KGMsbCl7MSZjJiZHdCgwLCJjbHItaWNvbiIsMjcpfWZ1bmN0aW9uIEY2dChjLGwpezEmYyYmKGRlKDAsInNwYW4iKSxMZSgxLCIgVG8gdW5sb2NrIGFs'@;
put 'bCB0YWJsZXMsIGNvbnRhY3Qgc3VwcG9ydEBkYXRhY29udHJvbGxlci5pbyAiKSxoZSgpKX1mdW5jdGlvbiBINnQoYyxsKXtpZigxJmMmJihkZSgwLCJjbHItdG9vbHRpcC1jb250ZW50IiwyOCksZ3QoMSxGNnQsMiwwLCJzcGFuIiwyNSksaGUoKSksMiZjKXtjb25zdCBhPVJlKCkubmdWYXI7'@;
put 'ZmUoKSxNZSgibmdJZiIsYSl9fWZ1bmN0aW9uIE42dChjLGwpezEmYyYmR3QoMCwiY2xyLWljb24iLDExKX1mdW5jdGlvbiBWNnQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJjbHItaWNvbiIsMTIpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKSxSZSgpO2NvbnN0IGg9aGEo'@;
put 'MyksZj1SZSgzKS4kaW1wbGljaXQsdj1SZSgzKTtyZXR1cm4gaC52YWx1ZT0iIixmLnNlYXJjaFN0cmluZz0iIixDdCh2LnRyZWVPbkZpbHRlcihmLCJjb2x1bW5zLkNPTE5BTUUiKSl9KSxoZSgpfX1mdW5jdGlvbiBCNnQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJjbHItdHJl'@;
put 'ZS1ub2RlIiw2KSgxLCJkaXYiLDcpKDIsImlucHV0IiwyOSwyKSxnaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1SZSgzKS4kaW1wbGljaXQ7cmV0dXJuIG1pKGYuc2VhcmNoU3RyaW5nLGgpfHwoZi5zZWFyY2hTdHJpbmc9aCksQ3QoaCl9KSxGdCgia2V5dXAi'@;
put 'LGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1SZSgzKS4kaW1wbGljaXQ7cmV0dXJuIEN0KFJlKDMpLnRyZWVPbkZpbHRlcihoLCJjb2x1bW5zLkNPTE5BTUUiKSl9KSxoZSgpLGd0KDQsTjZ0LDEsMCwiY2xyLWljb24iLDkpKDUsVjZ0LDEsMCwiY2xyLWljb24iLDEwKSxoZSgpKCl9aWYoMiZj'@;
put 'KXtjb25zdCBhPWhhKDMpLGQ9UmUoMykuJGltcGxpY2l0O2ZlKDIpLHBpKCJuZ01vZGVsIixkLnNlYXJjaFN0cmluZyksZmUoMiksTWUoIm5nSWYiLGEudmFsdWUubGVuZ3RoPDEpLGZlKCksTWUoIm5nSWYiLGEudmFsdWUubGVuZ3RoPjApfX1mdW5jdGlvbiBqNnQoYyxsKXtpZigxJmMpe2Nv'@;
put 'bnN0IGE9TG4oKTtkZSgwLCJjbHItdHJlZS1ub2RlIikoMSwiYnV0dG9uIiwzMCksRnQoImNsaWNrIixmdW5jdGlvbigpe2NvbnN0IGg9d3QoYSkuJGltcGxpY2l0LGY9UmUoMykuJGltcGxpY2l0LHY9UmUoMikuJGltcGxpY2l0O3JldHVybiBDdChSZSgpLmNvbHVtbk9uQ2xpY2soaCx2LGYp'@;
put 'KX0pLEd0KDIsImNsci1pY29uIiwzMSksTGUoMyksaGUoKSgpfWlmKDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdCxkPVJlKDYpO2ZlKCksVHIoImNvbHVtbi1hY3RpdmUiLGQubGliQ29sdW1uQWN0aXZlKGEuQ09MVVJJKSksZmUoMiksRHIoIiAiLGEuQ09MTkFNRSwiICIpfX1mdW5jdGlvbiB6'@;
put 'NnQoYyxsKXtpZigxJmMmJihzaSgwKSxndCgxLEI2dCw2LDMsImNsci10cmVlLW5vZGUiLDMpKDIsajZ0LDQsMywiY2xyLXRyZWUtbm9kZSIsNCksbGkoKSksMiZjKXtjb25zdCBhPVJlKDIpLiRpbXBsaWNpdDtmZSgpLE1lKCJuZ0lmIixhLmNvbHVtbnMpLGZlKCksTWUoIm5nRm9yT2YiLGEu'@;
put 'Y29sdW1ucyl9fWZ1bmN0aW9uIFU2dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImNsci10b29sdGlwIikoMSwiYnV0dG9uIiwyMCksRnQoImNsaWNrIixmdW5jdGlvbigpe2NvbnN0IGg9d3QoYSkubmdWYXIsZj1SZSgpLiRpbXBsaWNpdCx2PVJlKDIpLiRpbXBsaWNpdCxNPVJl'@;
put 'KCk7cmV0dXJuIEN0KGg/IiI6TS50YWJsZU9uQ2xpY2soZi5UQUJMRVVSSSxmLHYpKX0pLHNpKDIsMjEpLGd0KDMsTzZ0LDEsMCwiY2xyLWljb24iLDIyKSg0LFA2dCwxLDAsImNsci1pY29uIiwyMyksbGkoKSxMZSg1KSxoZSgpLGd0KDYsSDZ0LDIsMSwiY2xyLXRvb2x0aXAtY29udGVudCIs'@;
put 'MjQpKDcsejZ0LDMsMiwibmctY29udGFpbmVyIiwyNSksaGUoKX1pZigyJmMpe2NvbnN0IGE9bC5uZ1ZhcixkPVJlKCkuJGltcGxpY2l0LGg9UmUoMikuJGltcGxpY2l0LGY9UmUoKTtmZSgpLFRyKCJkYy1sb2NrZWQtY29udHJvbCIsYSkoImFjdGl2ZSIsZi5saWJUYWJBY3RpdmUoaC5MSUJS'@;
put 'QVJZUkVGLGQpKSxmZSgpLE1lKCJuZ1N3aXRjaCIsZC5pbmNsdWRlcygiLUZDIikpLGZlKCksTWUoIm5nU3dpdGNoQ2FzZSIsITApLGZlKCksTWUoIm5nU3dpdGNoQ2FzZSIsITEpLGZlKCksRHIoIiAiLGQucmVwbGFjZSgiLUZDIiwiIiksIiAiKSxmZSgyKSxNZSgibmdJZiIsZi5oYXNDb2x1'@;
put 'bW5zKX19ZnVuY3Rpb24gWjZ0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiY2xyLXRyZWUtbm9kZSIsMTQpLEZ0KCJjbGljayIsZnVuY3Rpb24oaCl7Y29uc3QgZj13dChhKS4kaW1wbGljaXQsdj1SZSgyKS4kaW1wbGljaXQ7cmV0dXJuIEN0KFJlKCkudHJlZU5vZGVDbGlja2Vk'@;
put 'KGgsZix2LnRhYmxlcykpfSksZ2koImNsckV4cGFuZGVkQ2hhbmdlIixmdW5jdGlvbihoKXtjb25zdCBmPXd0KGEpLiRpbXBsaWNpdDtyZXR1cm4gbWkoZi5leHBhbmRlZCxoKXx8KGYuZXhwYW5kZWQ9aCksQ3QoaCl9KSxndCgxLFU2dCw4LDksImNsci10b29sdGlwIiwxOSksaGUoKX1pZigy'@;
put 'JmMpe2NvbnN0IGE9bC4kaW1wbGljaXQsZD1sLmluZGV4LGg9UmUoMyk7VHIoImNsci1leHBhbmRlZCIsYS5leHBhbmRlZCkscGkoImNsckV4cGFuZGVkIixhLmV4cGFuZGVkKSxNZSgiY2xyTG9hZGluZyIsYS5sb2FkaW5nQ29sdW1ucyYmIWEuY29sdW1ucyksZmUoKSxNZSgibmdWYXIiLGQr'@;
put 'MT5oLmxpY2VuY2VTdGF0ZS52YWx1ZS50YWJsZXNfaW5fbGlicmFyeV9saW1pdCl9fWZ1bmN0aW9uIFc2dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImNsci10cmVlLW5vZGUiLDE0LDEpLEZ0KCJjbGljayIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1SZSgpLiRpbXBsaWNp'@;
put 'dCx2PVJlKCk7cmV0dXJuIEN0KHYudHJlZU5vZGVDbGlja2VkKGgsZix2LmxpYnJhcnlMaXN0KSl9KSxnaSgiY2xyRXhwYW5kZWRDaGFuZ2UiLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9UmUoKS4kaW1wbGljaXQ7cmV0dXJuIG1pKGYuZXhwYW5kZWQsaCl8fChmLmV4cGFuZGVkPWgpLEN0'@;
put 'KGgpfSksZGUoMiwicCIsMTUpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPWhhKDEpLGY9UmUoKS4kaW1wbGljaXQsdj1SZSgpO3JldHVybiB2LmxpYj1mLkxJQlJBUllJRCxDdCh2LmxpYnJhcnlPbkNsaWNrKHYubGlifHwiIixmLGgpKX0pLEd0KDMsImNsci1pY29uIiwx'@;
put 'NiksTGUoNCksaGUoKSxndCg1LEw2dCw2LDMsImNsci10cmVlLW5vZGUiLDMpKDYsWjZ0LDIsNSwiY2xyLXRyZWUtbm9kZSIsMTcpLGhlKCl9aWYoMiZjKXtjb25zdCBhPVJlKCkuJGltcGxpY2l0O1RyKCJjbHItZXhwYW5kZWQiLGEuZXhwYW5kZWQpLHBpKCJjbHJFeHBhbmRlZCIsYS5leHBh'@;
put 'bmRlZCksTWUoImNsckxvYWRpbmciLGEubG9hZGluZ1RhYmxlcyYmIWEudGFibGVzKSxmZSg0KSxEcigiICIsYS5MSUJSQVJZTkFNRSwiICIpLGZlKCksTWUoIm5nSWYiLGEudGFibGVzKSxmZSgpLE1lKCJuZ0Zvck9mIixhLnRhYmxlcyl9fWZ1bmN0aW9uIFk2dChjLGwpe2lmKDEmYyYmKHNp'@;
put 'KDApLGd0KDEsVzZ0LDcsNywiY2xyLXRyZWUtbm9kZSIsMTMpLGxpKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtmZSgpLE1lKCJuZ0lmIiwhYS5oaWRkZW4mJmEuaW5Gb3JlZ3JvdW5kKX19ZnVuY3Rpb24gRzZ0KGMsbCl7MSZjJiYoZGUoMCwiZGl2IiwzMikoMSwic3BhbiIsMzMpLExl'@;
put 'KDIsIiBMb2FkaW5nLi4uICIpLGhlKCkoKSl9bGV0ICQ2dD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCl7dGhpcy5oZWxwZXJTZXJ2aWNlPWEsdGhpcy5saWNlbmNlU2VydmljZT1kLHRoaXMuc2VhcmNoTGliSW5wdXRMaXN0PW5ldyBmZCx0aGlzLnRhYmxlT25DbGlja0VtaXR0ZXI9'@;
put 'bmV3IEtyLHRoaXMubGlicmFyeU9uQ2xpY2tFbWl0dGVyPW5ldyBLcix0aGlzLmhhc0NvbHVtbnM9ITEsdGhpcy5wYWdpbmc9ITAsdGhpcy5saWJyYXJpZXNTZWFyY2g9IiIsdGhpcy5saWI9IiIsdGhpcy50YWJsZT0iIix0aGlzLmxpYnJhcmllc1BhZ2luZz0hMSx0aGlzLmxpY2VuY2VTdGF0'@;
put 'ZT10aGlzLmxpY2VuY2VTZXJ2aWNlLmxpY2VuY2VTdGF0ZX1uZ09uSW5pdCgpe31uZ0FmdGVyVmlld0luaXQoKXtzZXRUaW1lb3V0KCgpPT57dGhpcy5zZWFyY2hMaWJJbnB1dExpc3QuZmlyc3QubmF0aXZlRWxlbWVudC5mb2N1cygpfSl9bmdPbkNoYW5nZXMoYSl7YS5saWJyYXJ5TGlzdD8u'@;
put 'Y3VycmVudFZhbHVlJiZ0aGlzLmxpYnJhcnlMaXN0JiZ0aGlzLmhlbHBlclNlcnZpY2UuZGlzcGxheUxpYnJhcmllcyh0aGlzLmxpYnJhcnlMaXN0KX10cmVlT25GaWx0ZXIoYSxkKXt0aGlzLmhlbHBlclNlcnZpY2UudHJlZU9uRmlsdGVyKGEsZCl9bGlicmFyeU9uRmlsdGVyKCl7dGhpcy5o'@;
put 'ZWxwZXJTZXJ2aWNlLmxpYnJhcnlPbkZpbHRlcih0aGlzLmxpYnJhcnlMaXN0LHRoaXMubGlicmFyaWVzU2VhcmNoLCJMSUJSQVJZTkFNRSIpLEtuLmxpbmVhZ2UubGlicmFyaWVzU2VhcmNoPXRoaXMubGlicmFyaWVzU2VhcmNofXRyZWVOb2RlQ2xpY2tlZChhLGQsaCl7IkNvbGxhcHNlIj09'@;
put 'PWEudGFyZ2V0LnRpdGxlJiZ0aGlzLmNvbGxhcHNlVHJlZUl0ZW1zKGgsZCl9bGlicmFyeU9uQ2xpY2soYSxkLGgpe2QuaW5Gb3JlZ3JvdW5kPSEwO2NvbnN0IGY9KCk9PnNldFRpbWVvdXQoKCk9PmguY29udGVudENvbnRhaW5lci5uYXRpdmVFbGVtZW50LnBhcmVudEVsZW1lbnQucXVlcnlT'@;
put 'ZWxlY3RvcigiaW5wdXQiKS5mb2N1cygpKTtpZihkLnRhYmxlcylkLmV4cGFuZGVkPSFkLmV4cGFuZGVkLHRoaXMubGlicmFyeU9uQ2xpY2tFbWl0dGVyLmVtaXQoe2xpYmlkOmEsbGlicmFyeTpkLHRhYmxlc0xvYWRlZDohMH0pO2Vsc2V7ZC5sb2FkaW5nVGFibGVzPSEwLHRoaXMubGlicmFy'@;
put 'eU9uQ2xpY2tFbWl0dGVyLmVtaXQoe2xpYmlkOmEsbGlicmFyeTpkLHRhYmxlc0xvYWRlZDohMX0pO2NvbnN0IHY9c2V0SW50ZXJ2YWwoKCk9PntkLmxvYWRpbmdUYWJsZXN8fChmKCksY2xlYXJJbnRlcnZhbCh2KSl9LDUwMCl9ZC5leHBhbmRlZCYmZigpLHRoaXMuY29sbGFwc2VUcmVlSXRl'@;
put 'bXModGhpcy5saWJyYXJ5TGlzdCxkKX10YWJsZU9uQ2xpY2soYSxkLGgpe3ZhciBmPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe2YuaGVscGVyU2VydmljZS5kZWJvdW5jZUNhbGwoNTAsKCk9PntmLmhhc0NvbHVtbnM/KGQuY29sdW1ucz8oZC5leHBhbmRlZD0hZC5leHBhbmRlZCwhMD09'@;
put 'PWQuZXhwYW5kZWQmJihmLnRhYmxlPWEsZi50YWJsZU9uQ2xpY2tFbWl0dGVyLmVtaXQoe3RhYmxldXJpOmEsbGliVGFibGU6ZCxsaWJyYXJ5OmgsY29sdW1uc0xvYWRlZDohMH0pKSk6KGQuZXhwYW5kZWQ9IWQuZXhwYW5kZWQsZC5sb2FkaW5nQ29sdW1ucz0hMCxmLnRhYmxlPWEsZi50YWJs'@;
put 'ZU9uQ2xpY2tFbWl0dGVyLmVtaXQoe3RhYmxldXJpOmEsbGliVGFibGU6ZCxsaWJyYXJ5OmgsY29sdW1uc0xvYWRlZDohMX0pKSxmLmNvbGxhcHNlVHJlZUl0ZW1zKGgudGFibGVzLGQpKTpmLnRhYmxlT25DbGlja0VtaXR0ZXIuZW1pdCh7dGFibGV1cmk6YSxsaWJUYWJsZTpkLGxpYnJhcnk6'@;
put 'aCxjb2x1bW5zTG9hZGVkOiExfSl9KX0pKCl9Y29sdW1uT25DbGljayhhLGQsaCl7dGhpcy5saWI9ZC5MSUJSQVJZSUQsdGhpcy50YWJsZT1oLlRBQkxFVVJJLHRoaXMuY29sdW1uPWEuQ09MVVJJfWxpYlRhYkFjdGl2ZShhLGQpe3JldHVybiEoIXRoaXMubGlifHwhdGhpcy50YWJsZSkmJmE9'@;
put 'PT10aGlzLmxpYiYmZD09PXRoaXMudGFibGV9bGliQ29sdW1uQWN0aXZlKGEpe2lmKCF0aGlzLmNvbHVtbilyZXR1cm4hMTtsZXQgZD1hLnNwbGl0KCJcXCIpLGg9dGhpcy5jb2x1bW4uc3BsaXQoIlxcIik7cmV0dXJuIGRbZC5sZW5ndGgtMV09PWhbaC5sZW5ndGgtMV19Y29sbGFwc2VUcmVl'@;
put 'SXRlbXMoYSxkKXthLmZvckVhY2goaD0+e0pTT04uc3RyaW5naWZ5KGgpIT09SlNPTi5zdHJpbmdpZnkoZCkmJihoLmV4cGFuZGVkPSExKX0pfWxvYWRNb3JlTGlicmFyaWVzKCl7dGhpcy5saWJyYXJpZXNQYWdpbmd8fCh0aGlzLmxpYnJhcmllc1BhZ2luZz0hMCx0aGlzLmhlbHBlclNlcnZp'@;
put 'Y2UuZGlzcGxheUxpYnJhcmllcyh0aGlzLmxpYnJhcnlMaXN0LCEwKSx0aGlzLmxpYnJhcmllc1BhZ2luZz0hMSl9aGFuZGxlU2Nyb2xsKGEpe2xldCBkPWEudGFyZ2V0O2QmJmQuc2Nyb2xsVG9wPj1kLnNjcm9sbEhlaWdodC1kLm9mZnNldEhlaWdodC0xMCYmdGhpcy5sb2FkTW9yZUxpYnJh'@;
put 'cmllcygpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKEdlKFN1KSxHZSh1MSkpfX1zdGF0aWN7dGhpcy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siZGMtdHJlZSJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24oZCxoKXtpZigxJmQmJnFh'@;
put 'KFQ2dCw1KSwyJmQpe2xldCBmO0NpKGY9U2koKSkmJihoLnNlYXJjaExpYklucHV0TGlzdD1mKX19LGhvc3RCaW5kaW5nczpmdW5jdGlvbihkLGgpezEmZCYmRnQoInNjcm9sbCIsZnVuY3Rpb24odil7cmV0dXJuIGguaGFuZGxlU2Nyb2xsKHYpfSl9LGlucHV0czp7aGFzQ29sdW1uczoiaGFz'@;
put 'Q29sdW1ucyIscGFnaW5nOiJwYWdpbmciLGxpYnJhcnlMaXN0OiJsaWJyYXJ5TGlzdCJ9LG91dHB1dHM6e3RhYmxlT25DbGlja0VtaXR0ZXI6InRhYmxlT25DbGlja0VtaXR0ZXIiLGxpYnJhcnlPbkNsaWNrRW1pdHRlcjoibGlicmFyeU9uQ2xpY2tFbWl0dGVyIn0sZmVhdHVyZXM6W3dsXSxk'@;
put 'ZWNsczo0LHZhcnM6Myxjb25zdHM6W1sic2VhcmNoTGliVHJlZUlucHV0IiwiIl0sWyJsaWJUcmVlTm9kZSIsIiJdLFsic2VhcmNoVHJlZUlucHV0IiwiIl0sWyJjbGFzcyIsInNlYXJjaC1ub2RlIiw0LCJuZ0lmIl0sWzQsIm5nRm9yIiwibmdGb3JPZiJdLFsiY2xhc3MiLCJ3LTEwMCB0ZXh0'@;
put 'LWNlbnRlciIsNCwibmdJZiJdLFsxLCJzZWFyY2gtbm9kZSJdLFsxLCJ0cmVlLXNlYXJjaC13cmFwcGVyIl0sWyJhcHBTdGVhbEZvY3VzIiwiIiwiY2xySW5wdXQiLCIiLCJwbGFjZWhvbGRlciIsIkxpYnJhcmllcyIsIm5hbWUiLCJpbnB1dCIsImF1dG9jb21wbGV0ZSIsIm9mZiIsMywibmdN'@;
put 'b2RlbENoYW5nZSIsImtleXVwIiwibmdNb2RlbCJdLFsic2hhcGUiLCJzZWFyY2giLDQsIm5nSWYiXSxbInNoYXBlIiwidGltZXMiLDMsImNsaWNrIiw0LCJuZ0lmIl0sWyJzaGFwZSIsInNlYXJjaCJdLFsic2hhcGUiLCJ0aW1lcyIsMywiY2xpY2siXSxbMywiY2xyRXhwYW5kZWQiLCJjbHJM'@;
put 'b2FkaW5nIiwiY2xyLWV4cGFuZGVkIiwiY2xpY2siLCJjbHJFeHBhbmRlZENoYW5nZSIsNCwibmdJZiJdLFszLCJjbGljayIsImNsckV4cGFuZGVkQ2hhbmdlIiwiY2xyRXhwYW5kZWQiLCJjbHJMb2FkaW5nIl0sWzEsIm0tMCIsImN1cnNvci1wb2ludGVyIiwzLCJjbGljayJdLFsic2hhcGUi'@;
put 'LCJyYWNrLXNlcnZlciJdLFszLCJjbHJFeHBhbmRlZCIsImNsckxvYWRpbmciLCJjbHItZXhwYW5kZWQiLCJjbGljayIsImNsckV4cGFuZGVkQ2hhbmdlIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbImFwcFN0ZWFsRm9jdXMiLCIiLCJjbHJJbnB1dCIsIiIsInBsYWNlaG9sZGVyIiwiVGFibGVz'@;
put 'IiwibmFtZSIsImlucHV0IiwiYXV0b2NvbXBsZXRlIiwib2ZmIiwzLCJuZ01vZGVsQ2hhbmdlIiwia2V5dXAiLCJuZ01vZGVsIl0sWzQsIm5nVmFyIl0sWyJjbHJUb29sdGlwVHJpZ2dlciIsIiIsMSwiY2xyLXRyZWVub2RlLWxpbmsiLDMsImNsaWNrIl0sWzMsIm5nU3dpdGNoIl0sWyJzaGFw'@;
put 'ZSIsImJvbHQiLDQsIm5nU3dpdGNoQ2FzZSJdLFsic2hhcGUiLCJ0YWJsZSIsNCwibmdTd2l0Y2hDYXNlIl0sWyJjbHJQb3NpdGlvbiIsImJvdHRvbS1yaWdodCIsImNsclNpemUiLCJsZyIsNCwiY2xySWZPcGVuIl0sWzQsIm5nSWYiXSxbInNoYXBlIiwiYm9sdCJdLFsic2hhcGUiLCJ0YWJs'@;
put 'ZSJdLFsiY2xyUG9zaXRpb24iLCJib3R0b20tcmlnaHQiLCJjbHJTaXplIiwibGciXSxbImFwcFN0ZWFsRm9jdXMiLCIiLCJjbHJJbnB1dCIsIiIsInBsYWNlaG9sZGVyIiwiQ29sdW1ucyIsIm5hbWUiLCJpbnB1dCIsImF1dG9jb21wbGV0ZSIsIm9mZiIsMywibmdNb2RlbENoYW5nZSIsImtl'@;
put 'eXVwIiwibmdNb2RlbCJdLFsxLCJjbHItdHJlZW5vZGUtbGluayIsMywiY2xpY2siXSxbInNoYXBlIiwib2JqZWN0cyJdLFsxLCJ3LTEwMCIsInRleHQtY2VudGVyIl0sWzEsInNwaW5uZXIiLCJzcGlubmVyLXNtIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGQsaCl7MSZkJiYoZGUoMCwiY2xyLXRy'@;
put 'ZWUiKSxndCgxLEQ2dCw2LDMsImNsci10cmVlLW5vZGUiLDMpKDIsWTZ0LDIsMSwibmctY29udGFpbmVyIiw0KSxoZSgpLGd0KDMsRzZ0LDMsMCwiZGl2Iiw1KSksMiZkJiYoZmUoKSxNZSgibmdJZiIsaC5saWJyYXJ5TGlzdCksZmUoKSxNZSgibmdGb3JPZiIsaC5saWJyYXJ5TGlzdCksZmUo'@;
put 'KSxNZSgibmdJZiIsaC5saWJyYXJpZXNQYWdpbmcpKX0sZGVwZW5kZW5jaWVzOltucyxiYSxTMixjcCxFaCxQZCxmZyxIbCxqMCxMMixaMSx2Nyx5NyxiNyxxbCxubCwkcyxTdyxyNF0sZW5jYXBzdWxhdGlvbjoyfSl9fXJldHVybiBjfSkoKTtjb25zdCBLNnQ9WyJyZXNpemVCb3giXSxxNnQ9'@;
put 'WyJkcmFnSGFuZGxlQ29ybmVyIl0sWDZ0PShjLGwsYSk9Pih7Y29sSGVhZGVyc0hpZGRlbjpjLGNvbEhlYWRlcnNWaXNpYmxlOmwsaGVhZGVyUGtzOmF9KSxKNnQ9KGMsbCk9Pih7eDpjLHk6bH0pO2Z1bmN0aW9uIFE2dChjLGwpe2lmKDEmYyYmKGRlKDAsInNwYW4iLDM3KSxMZSgxKSxoZSgp'@;
put 'KSwyJmMpe2NvbnN0IGE9UmUoKTtmZSgpLFV1KCJUbyB1bmxvY2sgbW9yZSB0aGVuICIsYS5saWNlbmNlU3RhdGUudmFsdWUudmlld2JveF9saW1pdCwiICIsMT09PWEubGljZW5jZVN0YXRlLnZhbHVlLnZpZXdib3hfbGltaXQ/InZpZXdib3giOiJ2aWV3Ym94ZXMiLCIsIGNvbnRhY3Qgc3Vw'@;
put 'cG9ydEBkYXRhY29udHJvbGxlci5pbyIpfX1mdW5jdGlvbiBlOHQoYyxsKXsxJmMmJihkZSgwLCJkaXYiLDM4KSxHdCgxLCJjbHItc3Bpbm5lciIsMzkpLGhlKCkpfWZ1bmN0aW9uIHQ4dChjLGwpezEmYyYmKGRlKDAsInAiLDQwKSxMZSgxLCIgVmlld2JveCBvcGVuIGxpbWl0IHJlYWNoZWQg'@;
put 'IiksaGUoKSl9ZnVuY3Rpb24gbjh0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiZGMtdHJlZSIsNDEpLEZ0KCJsaWJyYXJ5T25DbGlja0VtaXR0ZXIiLGZ1bmN0aW9uKGgpe3JldHVybiB3dChhKSxDdChSZSgpLmxpYnJhcnlPbkNsaWNrKGgpKX0pKCJ0YWJsZU9uQ2xpY2tFbWl0'@;
put 'dGVyIixmdW5jdGlvbihoKXtyZXR1cm4gd3QoYSksQ3QoUmUoKS50YWJsZU9uQ2xpY2soaCkpfSksaGUoKX0yJmMmJk1lKCJsaWJyYXJ5TGlzdCIsUmUoKS5saWJyYXJpZXMpfWZ1bmN0aW9uIHI4dChjLGwpezEmYyYmKGRlKDAsInAiLDQyKSxMZSgxLCIgUGljayB0YWJsZSBmcm9tIHRoZSBs'@;
put 'aXN0IG9uIHRoZSBsZWZ0ICIpLGhlKCkpfWZ1bmN0aW9uIGk4dChjLGwpezEmYyYmR3QoMCwiY2xyLXNwaW5uZXIiLDUwKX1mdW5jdGlvbiBhOHQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJhIiwxNyksRnQoImNsaWNrIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPVJlKCku'@;
put 'JGltcGxpY2l0LHY9UmUoKTtyZXR1cm4gdi5taW5pbWl6ZShmKSxDdCh2LnN0b3BQcm9wYWdhdGlvbihoKSl9KSxHdCgxLCJjbHItaWNvbiIsMjApLGRlKDIsInNwYW4iLDE5KSxMZSgzLCJNaW5pbWl6ZSB2aWV3Ym94IiksaGUoKSgpfX1mdW5jdGlvbiBvOHQoYyxsKXtpZigxJmMpe2NvbnN0'@;
put 'IGE9TG4oKTtkZSgwLCJhIiwxNyksRnQoImNsaWNrIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPVJlKCkuJGltcGxpY2l0LHY9UmUoKTtyZXR1cm4gdi5yZXN0b3JlKGYpLEN0KHYuc3RvcFByb3BhZ2F0aW9uKGgpKX0pLEd0KDEsImNsci1pY29uIiwyMSksZGUoMiwic3BhbiIsMTkpLExl'@;
put 'KDMsIlJlc3RvcmUgdmlld2JveCIpLGhlKCkoKX19ZnVuY3Rpb24gczh0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiZGl2Iiw0MyksRnQoImNsaWNrIixmdW5jdGlvbigpe2NvbnN0IGg9d3QoYSkuJGltcGxpY2l0O3JldHVybiBDdChSZSgpLnNlbGVjdFZpZXdib3goaCkpfSks'@;
put 'ZGUoMSwiZGl2Iiw0NCksTGUoMiksZ3QoMyxpOHQsMSwwLCJjbHItc3Bpbm5lciIsNDUpLGhlKCksZGUoNCwiZGl2IikoNSwiYSIsNDYpLEZ0KCJjbGljayIsZnVuY3Rpb24oaCl7Y29uc3QgZj13dChhKS4kaW1wbGljaXQsdj1SZSgpO3JldHVybiB2LnJlc2V0UG9zU2l6ZShmKSxDdCh2LnN0'@;
put 'b3BQcm9wYWdhdGlvbihoKSl9KSxHdCg2LCJjbHItaWNvbiIsNDcpLGRlKDcsInNwYW4iLDE5KSxMZSg4LCJSZXNldCBwb3NpdGlvbiBhbmQgc2l6ZSIpLGhlKCkoKSxndCg5LGE4dCw0LDAsImEiLDQ4KSgxMCxvOHQsNCwwLCJhIiw0OCksZGUoMTEsImEiLDE3KSxGdCgiY2xpY2siLGZ1bmN0'@;
put 'aW9uKGgpe2NvbnN0IGY9d3QoYSkuJGltcGxpY2l0LHY9UmUoKTtyZXR1cm4gdi5jbG9zZShmKSxDdCh2LnN0b3BQcm9wYWdhdGlvbihoKSl9KSxHdCgxMiwiY2xyLWljb24iLDQ5KSxkZSgxMywic3BhbiIsMTkpLExlKDE0LCJDbG9zZSB2aWV3Ym94IiksaGUoKSgpKCkoKX1pZigyJmMpe2Nv'@;
put 'bnN0IGE9bC4kaW1wbGljaXQsZD1SZSgpO1RyKCJzZWxlY3RlZCIsKG51bGw9PWQuc2VsZWN0ZWRWaWV3Ym94P251bGw6ZC5zZWxlY3RlZFZpZXdib3guaWQpPT09YS5pZCksZmUoMiksVmYoIiAjIixhLmlkLCIgIixhLmxpYnJhcnksIi4iLGEudGFibGUsIiAiKSxmZSgpLE1lKCJuZ0lmIixh'@;
put 'LmxvYWRpbmdEYXRhKSxmZSgyKSxUcigiZGlzYWJsZWQiLDA9PT1hLngmJjA9PT1hLnkpLGZlKDQpLE1lKCJuZ0lmIiwhYS5taW5pbWl6ZWQpLGZlKCksTWUoIm5nSWYiLGEubWluaW1pemVkKX19ZnVuY3Rpb24gbDh0KGMsbCl7aWYoMSZjJiYoZGUoMCwib3B0aW9uIiksTGUoMSksaGUoKSks'@;
put 'MiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O2ZlKCksRHIoIiAiLGEsIiAiKX19ZnVuY3Rpb24gYzh0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7c2koMCksZGUoMSwiZGl2Iiw1MykoMiwiYXBwLWF1dG9jb21wbGV0ZSIsNTQsMCksRnQoInZhbHVlQ2hhbmdlIixmdW5jdGlvbihoKXt3dChh'@;
put 'KTtjb25zdCBmPWhhKDMpLHY9UmUoKS5uZ1ZhcjtyZXR1cm4gQ3QoUmUoKS5vbkNvbHNlYXJjaENoYW5nZShmLGgsdi5jb2xIZWFkZXJzSGlkZGVuKSl9KSxndCg0LGw4dCwyLDEsIm9wdGlvbiIsNTUpLGhlKCkoKSxsaSgpfWlmKDImYyl7Y29uc3QgYT1SZSgpLm5nVmFyO2ZlKDIpLE1lKCJp'@;
put 'bnB1dElkIiwidmlld2JveC1jb2x1bW4tc2VhcmNoIikoImVtaXRPbmx5U2VsZWN0ZWQiLCEwKSxmZSgyKSxNZSgibmdGb3JPZiIsYS5jb2xIZWFkZXJzSGlkZGVuKX19ZnVuY3Rpb24gdTh0KGMsbCl7MSZjJiZHdCgwLCJjbHItaWNvbiIsNjEpfWZ1bmN0aW9uIGQ4dChjLGwpe2lmKDEmYyl7'@;
put 'Y29uc3QgYT1MbigpO2RlKDAsImNsci1pY29uIiw2MiksRnQoImNsaWNrIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9UmUoKS4kaW1wbGljaXQ7cmV0dXJuIEN0KFJlKDMpLm9uQ29sUmVtb3ZlKGgpKX0pLGhlKCl9fWZ1bmN0aW9uIGg4dChjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIsNTgp'@;
put 'KDEsInNwYW4iKSxMZSgyKSxndCgzLHU4dCwxLDAsImNsci1pY29uIiw1OSksaGUoKSxndCg0LGQ4dCwxLDAsImNsci1pY29uIiw2MCksaGUoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0LGQ9UmUoMikubmdWYXIsaD1SZSgpO2RyZSgiY29sLWJveCBjb2x1bW4tIixhLCIiKSxUcigiY3Vy'@;
put 'c29yLWRlZmF1bHQtaSIsZC5oZWFkZXJQa3MuaW5jbHVkZXMoYSkpKCJwcmltYXJ5S2V5SGVhZGVyU3R5bGUiLGQuaGVhZGVyUGtzLmluY2x1ZGVzKGEpKSxNZSgiY2RrRHJhZ0RhdGEiLGEpKCJjZGtEcmFnRGlzYWJsZWQiLGQuaGVhZGVyUGtzLmluY2x1ZGVzKGEpKSxmZSgyKSxVdSgiICIs'@;
put 'YSwiICIsIm51bSI9PT0obnVsbD09aC5zZWxlY3RlZFZpZXdib3hUYWJsZXx8bnVsbD09aC5zZWxlY3RlZFZpZXdib3hUYWJsZS5ob3RUYWJsZT9udWxsOmguc2VsZWN0ZWRWaWV3Ym94VGFibGUuaG90VGFibGUuJGRhdGFmb3JtYXRzLnZhcnNbYV0udHlwZSk/IihudW1lcmljKSI6IiIsIiAi'@;
put 'KSxmZSgpLE1lKCJuZ0lmIixkLmhlYWRlclBrcy5pbmNsdWRlcyhhKSksZmUoKSxNZSgibmdJZiIsIWQuaGVhZGVyUGtzLmluY2x1ZGVzKGEpKX19ZnVuY3Rpb24gZjh0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7c2koMCksZGUoMSwicCIsMTApLExlKDIsIkNvbHVtbnMgVG8gRGlzcGxh'@;
put 'eSAoZHJhZyBhbmQgcmUtb3JkZXIpIiksaGUoKSxkZSgzLCJkaXYiLDU2KSxGdCgiY2RrRHJvcExpc3REcm9wcGVkIixmdW5jdGlvbihoKXtyZXR1cm4gd3QoYSksQ3QoUmUoMikuY29sdW1uc0Ryb3AoaCkpfSksZ3QoNCxoOHQsNSwxMywiZGl2Iiw1NyksaGUoKSxsaSgpfWlmKDImYyl7Y29u'@;
put 'c3QgYT1SZSgpLm5nVmFyO2ZlKDMpLE1lKCJjZGtEcm9wTGlzdERhdGEiLGEuY29sSGVhZGVyc1Zpc2libGUpLGZlKCksTWUoIm5nRm9yT2YiLGEuY29sSGVhZGVyc1Zpc2libGUpfX1mdW5jdGlvbiBwOHQoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiLDUxKSxndCgxLGM4dCw1LDMsIm5nLWNv'@;
put 'bnRhaW5lciIsNTIpKDIsZjh0LDUsMiwibmctY29udGFpbmVyIiw1MiksaGUoKSksMiZjKXtjb25zdCBhPWwubmdWYXI7ZmUoKSxNZSgibmdJZiIsYS5jb2xIZWFkZXJzSGlkZGVuKSxmZSgpLE1lKCJuZ0lmIixhLmNvbEhlYWRlcnNWaXNpYmxlKX19ZnVuY3Rpb24gZzh0KGMsbCl7aWYoMSZj'@;
put 'KXtjb25zdCBhPUxuKCk7ZGUoMCwiY2xyLWljb24iLDg2KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1SZSgpLiRpbXBsaWNpdDtyZXR1cm4gQ3QoUmUoKS5jb2xsYXBzZShoKSl9KSxoZSgpfX1mdW5jdGlvbiBtOHQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgw'@;
put 'LCJjbHItaWNvbiIsODcpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPVJlKCkuJGltcGxpY2l0O3JldHVybiBDdChSZSgpLmV4cGFuZChoKSl9KSxoZSgpfX1mdW5jdGlvbiB2OHQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJjbHItaWNvbiIsODgpLEZ0KCJj'@;
put 'bGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPVJlKCkuJGltcGxpY2l0LGY9aGEoMTYpO3JldHVybiBDdChSZSgpLnNlYXJjaFRhYmxlKGYsaCkpfSksaGUoKX19ZnVuY3Rpb24gYjh0KGMsbCl7MSZjJiYoZGUoMCwic3BhbiIsODkpLExlKDEsIiBMb2FkaW5nLi4uICIpLGhlKCkpfWZ1'@;
put 'bmN0aW9uIHk4dChjLGwpezEmYyYmKGRlKDAsInNwYW4iLDkwKSxMZSgxLCJMb2FkaW5nLi4uIiksaGUoKSl9ZnVuY3Rpb24gXzh0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiY2xyLWljb24iLDkxKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1SZSgpLiRp'@;
put 'bXBsaWNpdCxmPWhhKDE2KTtyZXR1cm4gUmUoKS5yZWxvYWRUYWJsZURhdGEoaCksQ3QoZi52YWx1ZT0iIil9KSxoZSgpfX1mdW5jdGlvbiB3OHQoYyxsKXsxJmMmJihkZSgwLCJkaXYiLDk1KSxHdCgxLCJjbHItc3Bpbm5lciIsMzkpLGhlKCkpfWZ1bmN0aW9uIEM4dChjLGwpe2lmKDEmYyYm'@;
put 'R3QoMCwiaG90LXRhYmxlIiw5NiksMiZjKXtjb25zdCBhPVJlKCkubmdWYXIsZD1SZSgpLiRpbXBsaWNpdCxoPVJlKCk7TWUoImhvdElkIiwiaG90SW5zdGFuY2Vfdmlld2JveF8iK2QuaWQpKCJyZWFkT25seSIsITApKCJtb2RpZnlDb2xXaWR0aCIsaC5tYXhXaWR0aENoZWtlcikoImNvcHlQ'@;
put 'YXN0ZSIsaC52aWV3Ym94VGFibGVzW2FdLmhvdFRhYmxlLmNvcHlQYXN0ZSkoImNvbnRleHRNZW51IixoLnZpZXdib3hUYWJsZXNbYV0uaG90VGFibGUuY29udGV4dE1lbnUpKCJtdWx0aUNvbHVtblNvcnRpbmciLCEwKSgidmlld3BvcnRSb3dSZW5kZXJpbmdPZmZzZXQiLDUwKSgiZGF0YSIs'@;
put 'aC52aWV3Ym94VGFibGVzW2FdLmhvdFRhYmxlLmRhdGEpKCJjb2xIZWFkZXJzIixoLnZpZXdib3hUYWJsZXNbYV0uaG90VGFibGUuY29sSGVhZGVycykoImNvbHVtbnMiLGgudmlld2JveFRhYmxlc1thXS5ob3RUYWJsZS5jb2x1bW5zKSgiZmlsdGVycyIsITApKCJkcm9wZG93bk1lbnUiLGgu'@;
put 'dmlld2JveFRhYmxlc1thXS5ob3RUYWJsZS5kcm9wZG93bk1lbnUpKCJoZWlnaHQiLGgudmlld2JveFRhYmxlc1thXS5ob3RUYWJsZS5oZWlnaHQpKCJjZWxscyIsaC52aWV3Ym94VGFibGVzW2FdLmhvdFRhYmxlLmNlbGxzKSgibWF4Um93cyIsaC52aWV3Ym94VGFibGVzW2FdLmhvdFRhYmxl'@;
put 'Lm1heFJvd3MpKCJtYW51YWxDb2x1bW5SZXNpemUiLCEwKSgibGljZW5zZUtleSIsaC52aWV3Ym94VGFibGVzW2FdLmhvdFRhYmxlLmxpY2Vuc2VLZXkpfX1mdW5jdGlvbiBTOHQoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiLDkyKSxndCgxLHc4dCwyLDAsImRpdiIsOTMpKDIsQzh0LDEsMTcs'@;
put 'ImhvdC10YWJsZSIsOTQpLGhlKCkpLDImYyl7Y29uc3QgYT1sLm5nVmFyLGQ9UmUoKS4kaW1wbGljaXQ7X2QoImRpc3BsYXkiLGQuY29sbGFwc2VkPyJub25lIjoiIiksZmUoKSxNZSgibmdJZiIsZC5sb2FkaW5nRGF0YSYmYTwwKSxmZSgpLE1lKCJuZ0lmIixhPi0xKX19ZnVuY3Rpb24gTTh0'@;
put 'KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiZGl2Iiw2MywxKSxGdCgibW91c2Vkb3duIixmdW5jdGlvbigpe2NvbnN0IGg9d3QoYSkuJGltcGxpY2l0O3JldHVybiBDdChSZSgpLmZvY3VzVmlld2JveChoKSl9KSgiY2RrRHJhZ0VuZGVkIixmdW5jdGlvbihoKXtjb25zdCBmPXd0'@;
put 'KGEpLiRpbXBsaWNpdDtyZXR1cm4gQ3QoUmUoKS52aWV3Ym94RHJhZ0VuZGVkKGgsZikpfSksZGUoMiwiZGl2Iiw2NCkoMywic3BhbiIsNjUpLExlKDQpLGhlKCksZGUoNSwiZGl2Iiw2NiksZ3QoNixnOHQsMSwwLCJjbHItaWNvbiIsNjcpKDcsbTh0LDEsMCwiY2xyLWljb24iLDY4KSxkZSg4'@;
put 'LCJjbHItaWNvbiIsNjkpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtjb25zdCBoPXd0KGEpLiRpbXBsaWNpdDtyZXR1cm4gQ3QoUmUoKS5taW5pbWl6ZShoKSl9KSxoZSgpLGRlKDksImNsci1pY29uIiw3MCksRnQoImNsaWNrIixmdW5jdGlvbigpe2NvbnN0IGg9d3QoYSkuJGltcGxpY2l0O3Jl'@;
put 'dHVybiBDdChSZSgpLmNsb3NlKGgpKX0pLGhlKCkoKSgpLGRlKDEwLCJzcGFuIiw3MSwyKSxGdCgiY2RrRHJhZ01vdmVkIixmdW5jdGlvbihoKXtjb25zdCBmPXd0KGEpLiRpbXBsaWNpdCx2PWhhKDEpLE09aGEoMTEpO3JldHVybiBDdChSZSgpLmRyYWdNb3ZlKE0sdixmLGgpKX0pLGhlKCks'@;
put 'ZGUoMTIsImZvcm0iLDcyKSgxMywiZGl2Iiw3MykoMTQsImRpdiIsNzQpKDE1LCJpbnB1dCIsNzUsMyksRnQoImtleXVwLmVudGVyIixmdW5jdGlvbigpe2NvbnN0IGg9d3QoYSkuJGltcGxpY2l0LGY9aGEoMTYpO3JldHVybiBDdChSZSgpLnNlYXJjaFRhYmxlKGYsaCkpfSksaGUoKSxndCgx'@;
put 'Nyx2OHQsMSwwLCJjbHItaWNvbiIsNzYpKDE4LGI4dCwyLDAsInNwYW4iLDc3KSxoZSgpLGRlKDE5LCJjbHItY2hlY2tib3gtY29udGFpbmVyIikoMjAsImNsci1jaGVja2JveC13cmFwcGVyIikoMjEsImlucHV0Iiw3OCksZ2koIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe2NvbnN0IGY9'@;
put 'd3QoYSkuJGltcGxpY2l0O3JldHVybiBtaShmLnNlYXJjaE51bWVyaWMsaCl8fChmLnNlYXJjaE51bWVyaWM9aCksQ3QoaCl9KSxoZSgpLGRlKDIyLCJsYWJlbCIpLExlKDIzLCJOdW1lcmljIiksaGUoKSgpKCkoKSxkZSgyNCwiZGl2Iiw0NCksZ3QoMjUseTh0LDIsMCwic3BhbiIsNzkpKDI2'@;
put 'LF84dCwxLDAsImNsci1pY29uIiw4MCksZGUoMjcsImEiLDgxKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7Y29uc3QgaD13dChhKS4kaW1wbGljaXQsZj1oYSgxNik7cmV0dXJuIFJlKCkub3BlbkZpbHRlcihoKSxDdChmLnZhbHVlPSIiKX0pLEd0KDI4LCJjbHItaWNvbiIsODIpLGRlKDI5LCJz'@;
put 'cGFuIiw4MyksTGUoMzApLGhlKCkoKSxkZSgzMSwiY2xyLWljb24iLDg0KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7Y29uc3QgaD13dChhKS4kaW1wbGljaXQ7cmV0dXJuIEN0KFJlKCkub3BlblRhYmxlRWRpdChoKSl9KSxoZSgpKCkoKSxndCgzMixTOHQsMyw0LCJkaXYiLDg1KSxoZSgpfWlm'@;
put 'KDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdCxkPVJlKCk7X2QoImRpc3BsYXkiLGEubWluaW1pemVkPyJub25lIjoiIikoIndpZHRoIixhLndpZHRoLCJweCIpKCJoZWlnaHQiLGEuaGVpZ2h0LCJweCIpKCJwb2ludGVyLWV2ZW50cyIsYS5jb2xsYXBzZWQ/Im5vbmUiOiIiKSgiYm94LXNoYWRv'@;
put 'dyIsYS5jb2xsYXBzZWQ/Im5vbmUiOiIiKSxUcigiZm9jdXNlZCIsYS5mb2N1c2VkKSxNZSgiY2RrRHJhZ0ZyZWVEcmFnUG9zaXRpb24iLGxwKDM0LEo2dCxhLngsYS55KSkoImlkIiwidmlld2JveF8iK2EuaWQpLGZlKDQpLFZmKCIgIyIsYS5pZCwiICIsYS5saWJyYXJ5LCIuIixhLnRhYmxl'@;
put 'LCIgIiksZmUoMiksTWUoIm5nSWYiLCFhLmNvbGxhcHNlZCksZmUoKSxNZSgibmdJZiIsYS5jb2xsYXBzZWQpLGZlKDMpLE1lKCJpZCIsImhhbmRsZV92aWV3Ym94XyIrYS5pZCksZmUoMiksX2QoImRpc3BsYXkiLGEuY29sbGFwc2VkPyJub25lIjoiIiksZmUoMyksTWUoInR5cGUiLGEuc2Vh'@;
put 'cmNoTnVtZXJpYz8ibnVtYmVyIjoidGV4dCIpLGZlKDIpLE1lKCJuZ0lmIiwhYS5zZWFyY2hMb2FkaW5nKSxmZSgpLE1lKCJuZ0lmIixhLnNlYXJjaExvYWRpbmcpLGZlKDMpLHBpKCJuZ01vZGVsIixhLnNlYXJjaE51bWVyaWMpLGZlKDQpLE1lKCJuZ0lmIixhLmxvYWRpbmdEYXRhKSxmZSgp'@;
put 'LE1lKCJuZ0lmIiwhYS5sb2FkaW5nRGF0YSksZmUoMiksVHIoImZpbHRlci1hY3RpdmUiLCIwIiE9PWEuZmlsdGVyX3BrKSxmZSgyKSx3cihhLmZpbHRlclRleHQpLGZlKCksVHIoImRpc2FibGVkIiwhZC50YWJsZUVkaXRFeGlzdHMoYSkpLGZlKCksTWUoIm5nVmFyIixkLmdldFZpZXdib3hU'@;
put 'YWJsZUluZGV4KGEpKX19ZnVuY3Rpb24geDh0KGMsbCl7aWYoMSZjJiZHdCgwLCJhcHAtcXVlcnkiLDk3LDQpLDImYyl7Y29uc3QgYT1SZSgpO01lKCJ2aWV3Ym94SWQiLG51bGw9PWEuZmlsdGVyaW5nVmlld2JveD9udWxsOmEuZmlsdGVyaW5nVmlld2JveC5pZCl9fWxldCBJNmU9KCgpPT57'@;
put 'Y2xhc3MgY3tnZXQgdmlld2JveE1vZGFsKCl7cmV0dXJuIHRoaXMuX3ZpZXdib3hNb2RhbH1zZXQgdmlld2JveE1vZGFsKGEpe2lmKCExPT09dGhpcy5saWNlbmNlU3RhdGUudmFsdWUudmlld2JveCYmYSlyZXR1cm4gdGhpcy5ldmVudFNlcnZpY2Uuc2hvd0RlbW9MaW1pdE1vZGFsKCJWaWV3'@;
put 'Ym94ZXMiKSx2b2lkIHRoaXMudmlld2JveE1vZGFsQ2hhbmdlLmVtaXQoITEpO3RoaXMuX3ZpZXdib3hNb2RhbD1hLGEmJnRoaXMudW5zZXRTZWxlY3RlZFZpZXdib3goKX1jb25zdHJ1Y3RvcihhLGQsaCxmLHYsTSxELFoscmUsY2Upe3RoaXMubmdab25lPWEsdGhpcy5saWNlbmNlU2Vydmlj'@;
put 'ZT1kLHRoaXMuc2FzU2VydmljZT1oLHRoaXMuZXZlbnRTZXJ2aWNlPWYsdGhpcy5zYXNTdG9yZVNlcnZpY2U9dix0aGlzLmxvZ2dlclNlcnZpY2U9TSx0aGlzLmhlbHBlclNlcnZpY2U9RCx0aGlzLnJvdXRlcj1aLHRoaXMuYWN0aXZhdGVkUm91dGU9cmUsdGhpcy5jZGY9Y2UsdGhpcy5fdmll'@;
put 'd2JveE1vZGFsPSExLHRoaXMudmlld2JveE1vZGFsQ2hhbmdlPW5ldyBLcix0aGlzLmxpYmluZm89bnVsbCx0aGlzLmxpYnJhcmllc0xvYWRpbmc9ITAsdGhpcy52aWV3Ym94ZXM9W10sdGhpcy5kZWZhdWx0Q29uZmlnPXtpZDotMSxsaWJyYXJ5OiIiLHRhYmxlOiIiLHdpZHRoOjUwMCxoZWln'@;
put 'aHQ6MzAwLHg6MCx5OjE1MCxjb2x1bW5zOltdfSx0aGlzLnNhc2pzQ29uZmlnPW5ldyBtaC5TQVNqc0NvbmZpZyx0aGlzLmhvdFRhYmxlRGVmYXVsdD17ZGF0YTpbXSxoZWFkZXJQa3M6W10sJGRhdGFmb3JtYXRzOnt9LGFsbENvbEhlYWRlcnM6W10sY29sSGVhZGVyc0hpZGRlbjpbXSxjb2xI'@;
put 'ZWFkZXJzVmlzaWJsZTpbXSxjb2xIZWFkZXJzOltdLGNvbnRleHRNZW51OlsiY29weV93aXRoX2NvbHVtbl9oZWFkZXJzIiwiY29weV9jb2x1bW5faGVhZGVyc19vbmx5Il0sY29weVBhc3RlOntjb3B5Q29sdW1uSGVhZGVyczohMCxjb3B5Q29sdW1uSGVhZGVyc09ubHk6ITB9LGNvbHVtbnM6'@;
put 'W10sY29sczpbXSxoZWlnaHQ6IjEwMCUiLHNldHRpbmdzOnt9LGhpZGRlbkNvbHVtbnM6ITAsbWFudWFsQ29sdW1uTW92ZTohMSxhZnRlckdldENvbEhlYWRlcjp2b2lkIDAsbGljZW5zZUtleTp2b2lkIDAsZHJvcGRvd25NZW51OnZvaWQgMH0sdGhpcy52aWV3Ym94VGFibGVzPVtdLHRoaXMu'@;
put 'ZmlsdGVyPSExLHRoaXMuZmlsdGVyTG9hZGluZz0hMSx0aGlzLm51bGxWYXJpYWJsZXM9ITEsdGhpcy5saWNlbmNlU3RhdGU9dGhpcy5saWNlbmNlU2VydmljZS5saWNlbmNlU3RhdGUsdGhpcy5JbmZpbml0eT0xLzAsdGhpcy5tYXhWaWV3Ym94ZXM9dGhpcy5saWNlbmNlU3RhdGUudmFsdWUu'@;
put 'dmlld2JveF9saW1pdD09PTEvMD82OnRoaXMubGljZW5jZVN0YXRlLnZhbHVlLnZpZXdib3hfbGltaXR8fDYsdGhpcy5ob3RUYWJsZVJlZ2lzdGVyZXI9bmV3IFltfW5nT25Jbml0KCl7dGhpcy5zYXNTdG9yZVNlcnZpY2Uudmlld0xpYnMoKS50aGVuKGQ9Pnt0aGlzLmxpYnJhcmllcz1kLnNh'@;
put 'c2xpYnN9KS5jYXRjaChkPT57dGhpcy5sb2dnZXJTZXJ2aWNlLmVycm9yKGQpfSkuZmluYWxseSgoKT0+e3RoaXMubGlicmFyaWVzTG9hZGluZz0hMX0pLHRoaXMuX3F1ZXJ5PXRoaXMuc2FzU3RvcmVTZXJ2aWNlLnF1ZXJ5LnN1YnNjcmliZShkPT57dGhpcy5jbGF1c2VzPWQub2JqLHRoaXMu'@;
put 'ZmlsdGVyTGliZHM9ZC5saWJkc30pLHRoaXMuc2FzanNDb25maWc9dGhpcy5zYXNTZXJ2aWNlLmdldFNhc2pzQ29uZmlnKCksdGhpcy5saWNlbmNlU2VydmljZS5ob3RfbGljZW5zZV9rZXkuc3Vic2NyaWJlKGQ9Pnt0aGlzLmhvdFRhYmxlRGVmYXVsdC5saWNlbnNlS2V5PWR9KTtjb25zdCBh'@;
put 'PXRoaXMuYWN0aXZhdGVkUm91dGUuc25hcHNob3QucXVlcnlQYXJhbXMudmlld2JveGVzO2EmJighMT09PXRoaXMubGljZW5jZVN0YXRlLnZhbHVlLnZpZXdib3g/KHNldFRpbWVvdXQoKCk9PnRoaXMuZXZlbnRTZXJ2aWNlLnNob3dEZW1vTGltaXRNb2RhbCgiTGlua2luZyBWaWV3Ym94ZXMi'@;
put 'KSksdGhpcy5yb3V0ZXIubmF2aWdhdGUoW10se3JlbGF0aXZlVG86dGhpcy5hY3RpdmF0ZWRSb3V0ZSxxdWVyeVBhcmFtczp7fX0pKToodGhpcy52aWV3Ym94ZXM9dGhpcy5kZWNvZGVVcmxEYXRhKGEpLHNldFRpbWVvdXQoKCk9Pnt0aGlzLnNldEFsbEhhbmRsZVRyYW5zZm9ybSgpfSkpKSx0'@;
put 'aGlzLnJlTG9hZFZpZXdib3h0YWJsZXModGhpcy52aWV3Ym94ZXMpfW5nQWZ0ZXJWaWV3SW5pdCgpe31nZXQgdmlld2JveExpbWl0UmVhY2hlZCgpe3JldHVybiB0aGlzLnZpZXdib3hlcy5sZW5ndGg+PXRoaXMubWF4Vmlld2JveGVzfWNsck1vZGFsT3BlbkNoYW5nZShhKXt0aGlzLnZpZXdi'@;
put 'b3hNb2RhbENoYW5nZS5lbWl0KGEpfWxpYnJhcnlPbkNsaWNrKGEpe2EudGFibGVzTG9hZGVkfHx0aGlzLmxvYWRUYWJsZXMoYS5saWJyYXJ5LkxJQlJBUllSRUYsYS5saWJyYXJ5KX10YWJsZU9uQ2xpY2soYSl7dmFyIGQ9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7aWYoZC52aWV3Ym94'@;
put 'TGltaXRSZWFjaGVkKXJldHVybjtjb25zdCBoPXsuLi5kLmRlZmF1bHRDb25maWcsdGFibGU6YS5saWJUYWJsZSxsaWJyYXJ5OmEubGlicmFyeS5MSUJSQVJZTkFNRSxsb2FkaW5nRGF0YTohMCxmaWx0ZXJfcGs6IjAiLGlkOmQudmlld2JveGVzLmxlbmd0aCsxLHg6d2luZG93LmlubmVyV2lk'@;
put 'dGgtZC5kZWZhdWx0Q29uZmlnLndpZHRoLHk6MTUwfTtkLnZpZXdib3hlcy5wdXNoKGgpLHNldFRpbWVvdXQoKCk9PntkLnNldEFsbEhhbmRsZVRyYW5zZm9ybSgpfSk7Y29uc3QgZj1gJHthLmxpYnJhcnkuTElCUkFSWVJFRn0uJHthLmxpYlRhYmxlfWA7eWllbGQgZC5sb2FkRGF0YShmLGgp'@;
put 'LGgubG9hZGluZ0RhdGE9ITEsZC5ldmVudFNlcnZpY2UuZGlzcGF0Y2hFdmVudCgicmVzaXplIiksZC5zbmFwVG9HcmlkKCl9KSgpfWxvYWRUYWJsZXMoYSxkKXt0aGlzLnNhc1N0b3JlU2VydmljZS52aWV3VGFibGVzKGEpLnRoZW4oaD0+e2xldCBmPWgubXB0YWJsZXMubWFwKGZ1bmN0aW9u'@;
put 'KHYpe3JldHVybiB2Lk1FTU5BTUV9KTt0aGlzLmxpYmluZm89aC5saWJpbmZvfHxbXSx0aGlzLnRhYmxlcz1mLGQmJihkLnRhYmxlcz1mLGQubGliaW5mbz10aGlzLmxpYmluZm8sZC5sb2FkaW5nVGFibGVzPSExLGYubGVuZ3RoPjAmJihkLmV4cGFuZGVkPSEwKSl9KS5jYXRjaChoPT57dGhp'@;
put 'cy5sb2dnZXJTZXJ2aWNlLmVycm9yKGgpfSl9cmVsb2FkRGF0YShhLGQpe3ZhciBoPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe3JldHVybiBuZXcgUHJvbWlzZSgoZix2KT0+e2xldCBNPWgudmlld2JveFRhYmxlcy5maW5kKEQ9PkQudmlld2JveElkPT09ZC5pZCk7aC5zYXNTdG9yZVNl'@;
put 'cnZpY2Uudmlld0RhdGEoYSxwYXJzZUludChkLmZpbHRlcl9wa3x8IjAiKSkudGhlbihEPT57TSYmKE0uaG90VGFibGUuZGF0YT1ELnZpZXdkYXRhKSxmKG51bGwpfSkuY2F0Y2goKCk9Pnt2KCl9KX0pfSkoKX1sb2FkRGF0YShhLGQpe3ZhciBoPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigp'@;
put 'e3JldHVybiBuZXcgUHJvbWlzZSgoZix2KT0+e2xldCBNPSExLEQ9aC52aWV3Ym94VGFibGVzLmZpbmQoWj0+Wi52aWV3Ym94SWQ9PT1kLmlkKTtEJiYoIjAiPT09ZC5maWx0ZXJfcGt8fCFkLmZpbHRlcl9waykmJmYoKSxoLnNhc1N0b3JlU2VydmljZS52aWV3RGF0YShhLHBhcnNlSW50KGQu'@;
put 'ZmlsdGVyX3BrfHwiMCIpKS50aGVuKFo9PntEP009ITA6RD17dmlld2JveElkOmQuaWQsdmlld2JveExpYkRhdGFzZXQ6YSxob3RUYWJsZTphTChoLmhvdFRhYmxlRGVmYXVsdCl9LEQuaG90VGFibGUuZGF0YT1aLnZpZXdkYXRhLEQuaG90VGFibGUuJGRhdGFmb3JtYXRzPVouJHZpZXdkYXRh'@;
put 'LEQuaG90VGFibGUuY29scz1aLmNvbHMsemVlKEQuaG90VGFibGUuY29scyxbXSxaLiR2aWV3ZGF0YSk7bGV0IHJlPVtdLGNlPVtdO2ZvcihsZXQgYmUgaW4gWi52aWV3ZGF0YVswXSliZSYmY2UucHVzaChiZSk7Zm9yKGxldCBiZT0wO2JlPGNlLmxlbmd0aDtiZSsrKXJlLnB1c2goe2RhdGE6'@;
put 'Y2VbYmVdfSk7RC5ob3RUYWJsZS5oZWFkZXJQa3M9YUwoWi5zYXNwYXJhbXNbMF0uUEtfRklFTERTLnNwbGl0KCIgIikpLEQuaG90VGFibGUuYWxsQ29sSGVhZGVycz1jZS5maWx0ZXIoYmU9PiFELmhvdFRhYmxlLmhlYWRlclBrcy5pbmNsdWRlcyhiZSkpLEQuaG90VGFibGUuY29sSGVhZGVy'@;
put 'c0hpZGRlbj1hTChELmhvdFRhYmxlLmFsbENvbEhlYWRlcnMpLEQuaG90VGFibGUuY29sSGVhZGVyc1Zpc2libGU9Y2UuZmlsdGVyKGJlPT5ELmhvdFRhYmxlLmhlYWRlclBrcy5pbmNsdWRlcyhiZSkpLEQuaG90VGFibGUuY29sSGVhZGVycz1jZSxELmhvdFRhYmxlLmNvbHVtbnM9cmUsZC5j'@;
put 'b2x1bW5zJiZkLmNvbHVtbnMubGVuZ3RoPjA/KEQuaG90VGFibGUubWFudWFsQ29sdW1uTW92ZT1kLmNvbHVtbnMsZC5jb2x1bW5zPy5tYXAoKGJlLEVlKT0+e2NvbnN0IEJlPWNlW2JlXSxxZT1ELmhvdFRhYmxlLmNvbEhlYWRlcnNIaWRkZW4uaW5kZXhPZihCZSk7cWU+LTEmJihELmhvdFRh'@;
put 'YmxlLmNvbEhlYWRlcnNIaWRkZW4uc3BsaWNlKHFlLDEpLEQuaG90VGFibGUuY29sSGVhZGVyc1Zpc2libGVbRWVdPUJlKX0pKTpELmhvdFRhYmxlLmNvbEhlYWRlcnNWaXNpYmxlLnB1c2goLi4uRC5ob3RUYWJsZS5jb2xIZWFkZXJzSGlkZGVuLnNwbGljZSgwLDEwKSksRC5ob3RUYWJsZS5j'@;
put 'b2xIZWFkZXJzVmlzaWJsZT1ELmhvdFRhYmxlLmNvbEhlYWRlcnNWaXNpYmxlLmZpbHRlcihiZT0+YmUpLE18fGgudmlld2JveFRhYmxlcy5wdXNoKEQpLGQucXVlcnk9aC5oZWxwZXJTZXJ2aWNlLmRlZXBDbG9uZShaLnF1ZXJ5KSxkLmZpbHRlclRleHQ9Wi5zYXNwYXJhbXNbMF0uRklMVEVS'@;
put 'X1RFWFQsc2V0VGltZW91dCgoKT0+e2gudXBkYXRlSG90Q29sdW1ucyhELmhvdFRhYmxlLmNvbEhlYWRlcnNIaWRkZW58fFtdLGQuaWQpO2NvbnN0IGJlPWguZ2V0Vmlld2JveEhvdEluc3RhbmNlKGQuaWQpO2JlPy51cGRhdGVTZXR0aW5ncyh7bWFudWFsQ29sdW1uTW92ZTpELmhvdFRhYmxl'@;
put 'Lm1hbnVhbENvbHVtbk1vdmUsYWZ0ZXJHZXRDb2xIZWFkZXI6KEVlLEJlKT0+e2NvbnN0IHFlPWJlPy5jb2xUb1Byb3AoRWUpO3FlJiZELmhvdFRhYmxlLmhlYWRlclBrcy5pbmRleE9mKHFlKT4tMSYmQmUuY2xhc3NMaXN0LmFkZCgicHJpbWFyeUtleUhlYWRlclN0eWxlIiksQmUuY2xhc3NM'@;
put 'aXN0LmFkZChLbi5oYW5kc29udGFibGUuZGFya1RhYmxlSGVhZGVyQ2xhc3MpfX0pLGJlPy5yZW5kZXIoKSxoLnNlbGVjdGVkVmlld2JveCYmaC5yZXNldFNlbGVjdGVkVmlld2JveChkKX0pLGYoKX0pLmNhdGNoKFo9PntoLmxvZ2dlclNlcnZpY2UuZXJyb3IoWiksdigpfSl9KX0pKCl9cmVM'@;
put 'b2FkVmlld2JveHRhYmxlcyhhKXthLm1hcChkPT57Y29uc3QgaD1gJHtkLmxpYnJhcnl9LiR7ZC50YWJsZX1gO2QubG9hZGluZ0RhdGE9ITAsdGhpcy5sb2FkRGF0YShoLGQpLnRoZW4oKCk9PntkLmxvYWRpbmdEYXRhPSExfSl9KX1tYXhXaWR0aENoZWtlcihhLGQpe3JldHVybiBhPjIwMD8y'@;
put 'MDA6YX1nZXRWaWV3Ym94VGFibGVJbmRleChhKXtyZXR1cm4gdGhpcy52aWV3Ym94VGFibGVzLmZpbmRJbmRleChoPT5oLnZpZXdib3hJZD09PWEuaWQpfXJlc2l6ZShhLGQpe2NvbnN0IGg9YS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxmPWQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksdj1o'@;
put 'LmxlZnQtZi5sZWZ0K2gud2lkdGgsTT1oLnRvcC1mLnRvcCtoLmhlaWdodDtyZXR1cm4gZC5zdHlsZS53aWR0aD12KyJweCIsZC5zdHlsZS5oZWlnaHQ9TSsicHgiLHRoaXMuc2V0QWxsSGFuZGxlVHJhbnNmb3JtKCksdGhpcy5oZWxwZXJTZXJ2aWNlLmRlYm91bmNlQ2FsbCgxZTMsKCk9Pnt0'@;
put 'aGlzLnZpZXdib3hDaGFuZ2VkKCksdGhpcy5ldmVudFNlcnZpY2UuZGlzcGF0Y2hFdmVudCgicmVzaXplIil9KSx7d2lkdGg6dixoZWlnaHQ6TX19ZHJhZ01vdmUoYSxkLGgsZil7dGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9Pntjb25zdCB2PXRoaXMucmVzaXplKGEsZCk7aC53'@;
put 'aWR0aD12LndpZHRoLGguaGVpZ2h0PXYuaGVpZ2h0fSl9c2V0QWxsSGFuZGxlVHJhbnNmb3JtKCl7dGhpcy5yZXNpemVCb3hRdWVyeS5mb3JFYWNoKGE9Pntjb25zdCBkPWEubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxoPWBoYW5kbGVfJHthLm5hdGl2ZUVsZW1lbnQu'@;
put 'aWR9YCxmPXRoaXMuZHJhZ0hhbmRsZUNvcm5lclF1ZXJ5LmZpbmQoKHYsTSk9PnYubmF0aXZlRWxlbWVudC5pZD09PWgpO3RoaXMuc2V0SGFuZGxlVHJhbnNmb3JtKGY/Lm5hdGl2ZUVsZW1lbnQsZCwiYm90aCIpfSl9c2V0SGFuZGxlVHJhbnNmb3JtKGEsZCxoKXtjb25zdCBmPWEuZ2V0Qm91'@;
put 'bmRpbmdDbGllbnRSZWN0KCk7bGV0IHY9ZC53aWR0aC1mLndpZHRoLE09ZC5oZWlnaHQtZi5oZWlnaHQ7dis9NSxNKz01LCJ4Ij09PWgmJihhLnN0eWxlLnRyYW5zZm9ybT1gdHJhbnNsYXRlKCR7dn1weCwgMClgKSwieSI9PT1oJiYoYS5zdHlsZS50cmFuc2Zvcm09YHRyYW5zbGF0ZSgwLCAk'@;
put 'e019cHgpYCksImJvdGgiPT09aCYmKGEuc3R5bGUudHJhbnNmb3JtPWB0cmFuc2xhdGUoJHt2fXB4LCAke019cHgpYCl9Zm9jdXNWaWV3Ym94KGEpe3RoaXMudmlld2JveGVzLm1hcChkPT57ZC5mb2N1c2VkPSExfSksYS5mb2N1c2VkPSEwfXZpZXdib3hEcmFnRW5kZWQoYSxkKXtsZXQgZj1h'@;
put 'LnNvdXJjZS5nZXRSb290RWxlbWVudCgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2QueD1mLmxlZnQsZC55PWYudG9wLHRoaXMudmlld2JveENoYW5nZWQoKX1zbmFwVG9HcmlkKCl7Y29uc3QgYT13aW5kb3cuaW5uZXJXaWR0aCxkPXdpbmRvdy5pbm5lckhlaWdodCxNPU1hdGguY2VpbCh0'@;
put 'aGlzLnZpZXdib3hlcy5sZW5ndGgvMiksRD1NYXRoLmZsb29yKHRoaXMudmlld2JveGVzLmxlbmd0aC8yKSxjZT0oYS01KihNKzEpKS9NLGJlPShhLTUqKEQrMSkpL0Q7bGV0IEJlPTAscnQ9KGQtMjUwLTYwKS8yLHB0PTAsZHQ9MDtmb3IobGV0IEp0PTA7SnQ8dGhpcy52aWV3Ym94ZXMubGVu'@;
put 'Z3RoO0p0Kyspe2xldCB2bj10aGlzLnZpZXdib3hlc1tKdF0sQ249IShKdD5NLTEpO2NvbnN0IHRuPUNuP2NlOmJlOyFDbiYmMD09PWR0JiYocHQ9MCxkdCsrLEJlPTApLHZuLng9NStCZStwdCoodG4rNSksdm4ueT0yNTArZHQqKHJ0KzUpLHZuLndpZHRoPXRuLHZuLmhlaWdodD1ydCxwdCsr'@;
put 'fXRoaXMudmlld2JveENoYW5nZWQoKSxzZXRUaW1lb3V0KCgpPT57dGhpcy5zZXRBbGxIYW5kbGVUcmFuc2Zvcm0oKX0pfW1pbmltaXplQWxsKCl7dGhpcy52aWV3Ym94ZXMuZm9yRWFjaChhPT57YS5taW5pbWl6ZWQ9ITB9KSx0aGlzLnZpZXdib3hDaGFuZ2VkKCl9cmVzdG9yZUFsbCgpe3Ro'@;
put 'aXMudmlld2JveGVzLmZvckVhY2goYT0+e2EubWluaW1pemVkPSExfSksdGhpcy52aWV3Ym94Q2hhbmdlZCgpfXJlc2V0UG9zU2l6ZShhKXthLng9d2luZG93LmlubmVyV2lkdGgtdGhpcy5kZWZhdWx0Q29uZmlnLndpZHRoLGEueT10aGlzLmRlZmF1bHRDb25maWcueSxhLndpZHRoPXRoaXMu'@;
put 'ZGVmYXVsdENvbmZpZy53aWR0aCxhLmhlaWdodD10aGlzLmRlZmF1bHRDb25maWcuaGVpZ2h0LHRoaXMudmlld2JveENoYW5nZWQoKX1taW5pbWl6ZShhKXthLm1pbmltaXplZD0hMCx0aGlzLnZpZXdib3hDaGFuZ2VkKCl9cmVzdG9yZShhKXthLm1pbmltaXplZD0hMSx0aGlzLnZpZXdib3hD'@;
put 'aGFuZ2VkKCl9Y29sbGFwc2UoYSl7YS5jb2xsYXBzZWQ9ITAsdGhpcy52aWV3Ym94Q2hhbmdlZCgpfWV4cGFuZChhKXthLmNvbGxhcHNlZD0hMSx0aGlzLnZpZXdib3hDaGFuZ2VkKCl9Y2xvc2UoYSl7Y29uc3QgZD10aGlzLnZpZXdib3hlcy5maW5kSW5kZXgoZj0+Zi5pZD09PWEuaWQpLGg9'@;
put 'dGhpcy52aWV3Ym94VGFibGVzLmZpbmRJbmRleChmPT5mLnZpZXdib3hJZD09PWEuaWQpO2Q+LTEmJnRoaXMudmlld2JveGVzLnNwbGljZShkLDEpLGg+LTEmJnRoaXMudmlld2JveFRhYmxlcy5zcGxpY2UoaCwxKSx0aGlzLnNlbGVjdGVkVmlld2JveD8uaWQ9PT1hLmlkJiZ0aGlzLnVuc2V0'@;
put 'U2VsZWN0ZWRWaWV3Ym94KCksS24udmlld2JveGVzW2EuaWRdPXRoaXMuaGVscGVyU2VydmljZS5kZWVwQ2xvbmUoaFopLHRoaXMudmlld2JveENoYW5nZWQoKX1zZWxlY3RWaWV3Ym94KGEpe3ZvaWQgMD09PXRoaXMuc2VsZWN0ZWRWaWV3Ym94VGFibGUmJnZvaWQgMD09PXRoaXMuc2VsZWN0'@;
put 'ZWRWaWV3Ym94P3RoaXMucmVzZXRTZWxlY3RlZFZpZXdib3goYSk6YS5pZD09PXRoaXMuc2VsZWN0ZWRWaWV3Ym94Py5pZD90aGlzLnVuc2V0U2VsZWN0ZWRWaWV3Ym94KCk6dGhpcy5yZXNldFNlbGVjdGVkVmlld2JveChhKX1jb2x1bW5zRHJvcChhKXt0aGlzLnNlbGVjdGVkVmlld2JveFRh'@;
put 'YmxlPy5ob3RUYWJsZS5jb2xIZWFkZXJzSGlkZGVuJiYoYS5wcmV2aW91c0NvbnRhaW5lcj09PWEuY29udGFpbmVyP2QxZShhLmNvbnRhaW5lci5kYXRhLGEucHJldmlvdXNJbmRleCxhLmN1cnJlbnRJbmRleCk6ZnVuY3Rpb24gVkZlKGMsbCxhLGQpe2NvbnN0IGg9QXgoYSxjLmxlbmd0aC0x'@;
put 'KSxmPUF4KGQsbC5sZW5ndGgpO2MubGVuZ3RoJiZsLnNwbGljZShmLDAsYy5zcGxpY2UoaCwxKVswXSl9KGEucHJldmlvdXNDb250YWluZXIuZGF0YSxhLmNvbnRhaW5lci5kYXRhLGEucHJldmlvdXNJbmRleCxhLmN1cnJlbnRJbmRleCksdGhpcy5zZWxlY3RlZFZpZXdib3hUYWJsZS5ob3RU'@;
put 'YWJsZSYmIm9iamVjdCI9PXR5cGVvZiB0aGlzLnNlbGVjdGVkVmlld2JveFRhYmxlLmhvdFRhYmxlLmNvbEhlYWRlcnMpJiZ0aGlzLnVwZGF0ZUNvbHVtbk9yZGVySG90KGEuaXRlbS5kYXRhLGEuY3VycmVudEluZGV4LHRoaXMuc2VsZWN0ZWRWaWV3Ym94VGFibGUudmlld2JveElkKX1vbkNv'@;
put 'bHNlYXJjaENoYW5nZShhLGQsaCl7Y29uc3QgZj1oLmluZGV4T2YoZCk7aC5zcGxpY2UoZiwxKSxhLnZhbHVlPSIiLHRoaXMuc2VsZWN0ZWRWaWV3Ym94VGFibGU/LmhvdFRhYmxlJiYodGhpcy5zZWxlY3RlZFZpZXdib3hUYWJsZS5ob3RUYWJsZS5jb2xIZWFkZXJzVmlzaWJsZS5wdXNoKGQp'@;
put 'LHRoaXMudXBkYXRlSG90Q29sdW1ucyh0aGlzLnNlbGVjdGVkVmlld2JveFRhYmxlPy5ob3RUYWJsZS5jb2xIZWFkZXJzSGlkZGVuLHRoaXMuc2VsZWN0ZWRWaWV3Ym94VGFibGUudmlld2JveElkKSx0aGlzLnVwZGF0ZUNvbHVtbk9yZGVySG90KGQsdGhpcy5zZWxlY3RlZFZpZXdib3hUYWJs'@;
put 'ZS5ob3RUYWJsZS5jb2xIZWFkZXJzVmlzaWJsZS5sZW5ndGgtMSx0aGlzLnNlbGVjdGVkVmlld2JveFRhYmxlLnZpZXdib3hJZCkpfW9uQ29sUmVtb3ZlKGEpe2lmKHRoaXMuc2VsZWN0ZWRWaWV3Ym94VGFibGU/LmhvdFRhYmxlKXtjb25zdCBkPXRoaXMuc2VsZWN0ZWRWaWV3Ym94VGFibGUu'@;
put 'aG90VGFibGUuY29sSGVhZGVyc1Zpc2libGUuaW5kZXhPZihhKTt0aGlzLnNlbGVjdGVkVmlld2JveFRhYmxlLmhvdFRhYmxlLmNvbEhlYWRlcnNWaXNpYmxlLnNwbGljZShkLDEpLHRoaXMuc2VsZWN0ZWRWaWV3Ym94VGFibGUuaG90VGFibGUuY29sSGVhZGVyc0hpZGRlbi5wdXNoKGEpLHRo'@;
put 'aXMudXBkYXRlSG90Q29sdW1ucyh0aGlzLnNlbGVjdGVkVmlld2JveFRhYmxlPy5ob3RUYWJsZS5jb2xIZWFkZXJzSGlkZGVuLHRoaXMuc2VsZWN0ZWRWaWV3Ym94VGFibGUudmlld2JveElkKSx0aGlzLnVwZGF0ZUNvbHVtbk9yZGVySG90KGEsdGhpcy5zZWxlY3RlZFZpZXdib3hUYWJsZS5o'@;
put 'b3RUYWJsZS5jb2xIZWFkZXJzVmlzaWJsZS5sZW5ndGgsdGhpcy5zZWxlY3RlZFZpZXdib3hUYWJsZS52aWV3Ym94SWQpfX1yZXNldFNlbGVjdGVkVmlld2JveChhKXt0aGlzLnNlbGVjdGVkVmlld2JveD1hLHRoaXMuc2VsZWN0ZWRWaWV3Ym94VGFibGU9dGhpcy52aWV3Ym94VGFibGVzLmZp'@;
put 'bmQoZD0+ZC52aWV3Ym94SWQ9PT1hLmlkKX11bnNldFNlbGVjdGVkVmlld2JveCgpe3RoaXMuc2VsZWN0ZWRWaWV3Ym94PXZvaWQgMCx0aGlzLnNlbGVjdGVkVmlld2JveFRhYmxlPXZvaWQgMH1zdG9wUHJvcGFnYXRpb24oYSl7YS5zdG9wUHJvcGFnYXRpb24oKX1vcGVuRmlsdGVyKGEpe3Ro'@;
put 'aXMuc2VsZWN0Vmlld2JveChhKTtjb25zdCBkPXRoaXMudmlld2JveFRhYmxlc1t0aGlzLmdldFZpZXdib3hUYWJsZUluZGV4KGEpXTt0aGlzLmZpbHRlckxpYmRzPWAke2EubGlicmFyeX0uJHthLnRhYmxlfWAsdGhpcy5maWx0ZXJpbmdWaWV3Ym94PWEsdGhpcy5maWx0ZXI9ITAsdGhpcy5j'@;
put 'ZGYuZGV0ZWN0Q2hhbmdlcygpLHRoaXMuc2FzU3RvcmVTZXJ2aWNlLnNldFF1ZXJ5VmFyaWFibGVzKHRoaXMuZmlsdGVyTGliZHMsZC5ob3RUYWJsZS5jb2xzKX1vcGVuVGFibGVFZGl0KGEpe2NvbnN0IGQ9YS5saWJyYXJ5KyIuIithLnRhYmxlO2xldCBoPWxvY2F0aW9uLmhyZWYuc2xpY2Uo'@;
put 'MCxsb2NhdGlvbi5ocmVmLmluZGV4T2YoIiMiKSk7aD1gJHtofSMvZWRpdG9yLyR7ZH1gLHdpbmRvdy5vcGVuKGgsIl9ibGFuayIpfXJlc2V0RmlsdGVyKCl7dGhpcy5maWx0ZXJpbmdWaWV3Ym94JiYodGhpcy5maWx0ZXJpbmdWaWV3Ym94LmZpbHRlcl9waz0iMCIsdGhpcy5yZWxvYWRUYWJs'@;
put 'ZURhdGEodGhpcy5maWx0ZXJpbmdWaWV3Ym94KSx0aGlzLmZpbHRlcj0hMSx0aGlzLnZpZXdib3hDaGFuZ2VkKCksS24udmlld2JveGVzW3RoaXMuZmlsdGVyaW5nVmlld2JveC5pZF09dGhpcy5oZWxwZXJTZXJ2aWNlLmRlZXBDbG9uZShoWikpfXNlbmRDbGF1c2UoKXt0aGlzLmZpbHRlckxv'@;
put 'YWRpbmc9ITA7bGV0IGE9W10sZD1bXTtpZih0eXBlb2YgdGhpcy5jbGF1c2VzPiJ1IilyZXR1cm4gdGhpcy5udWxsVmFyaWFibGVzPSEwLHZvaWQodGhpcy5maWx0ZXJMb2FkaW5nPSExKTt7bGV0IGg9dGhpcy5jbGF1c2VzLnF1ZXJ5T2JqO2ZvcihsZXQgZj0wO2Y8aC5sZW5ndGg7ZisrKXtj'@;
put 'b25zdCB2PWhbZl0uZWxlbWVudHM7YT12LmZpbHRlcihmdW5jdGlvbihNKXtyZXR1cm4gbnVsbD09PU0udmFyaWFibGV9KSxhLmxlbmd0aCYmZC5wdXNoKHYpfX1pZihkLmxlbmd0aClyZXR1cm4gdGhpcy5udWxsVmFyaWFibGVzPSEwLHZvaWQodGhpcy5maWx0ZXJMb2FkaW5nPSExKTt0cnl7'@;
put 'aWYodm9pZCAwIT09dGhpcy5jbGF1c2VzJiZ0aGlzLmZpbHRlckxpYmRzKXtjb25zdCBoPXtncm91cExvZ2ljOnRoaXMuY2xhdXNlcy5ncm91cExvZ2ljLGZpbHRlckdyb3VwczpbXX07dGhpcy5jbGF1c2VzLnF1ZXJ5T2JqLmZvckVhY2godj0+e2NvbnN0IE09e2ZpbHRlckNsYXVzZXM6W119'@;
put 'O3YuZWxlbWVudHMuZm9yRWFjaChEPT57TS5maWx0ZXJDbGF1c2VzLnB1c2godGhpcy5oZWxwZXJTZXJ2aWNlLmRlZXBDbG9uZShEKSl9KSxNLmNsYXVzZUxvZ2ljPXYuY2xhdXNlTG9naWMsaC5maWx0ZXJHcm91cHMucHVzaCh0aGlzLmhlbHBlclNlcnZpY2UuZGVlcENsb25lKE0pKX0pO2Nv'@;
put 'bnN0IGY9dGhpcy5zYXNTdG9yZVNlcnZpY2UuY3JlYXRlRmlsdGVyUXVlcnlUYWJsZShoKTt0aGlzLnNhc1N0b3JlU2VydmljZS5zYXZlUXVlcnkodGhpcy5maWx0ZXJMaWJkcyxmKS50aGVuKHY9Pnt0aGlzLmZpbHRlcmluZ1ZpZXdib3guZmlsdGVyX3BrPXYucmVzdWx0WzBdLkZJTFRFUl9S'@;
put 'Syx0aGlzLmxvYWREYXRhKHRoaXMuZmlsdGVyTGliZHMsdGhpcy5maWx0ZXJpbmdWaWV3Ym94KS50aGVuKCgpPT57dGhpcy5maWx0ZXI9ITEsdGhpcy5maWx0ZXJMb2FkaW5nPSExfSksdGhpcy52aWV3Ym94Q2hhbmdlZCgpfSkuY2F0Y2godj0+e3RoaXMuZmlsdGVyTG9hZGluZz0hMX0pfX1j'@;
put 'YXRjaHt0aGlzLmZpbHRlckxvYWRpbmc9ITF9fXNlYXJjaFRhYmxlKGEsZCl7dmFyIGg9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7ZC5zZWFyY2hMb2FkaW5nPSEwO2xldCBmPWEudmFsdWUsdj1kLmxpYnJhcnkrIi4iK2QudGFibGUsTT1wYXJzZUludChkLmZpbHRlcl9wa3x8IjAiKTtj'@;
put 'b25zdCBEPWgudmlld2JveFRhYmxlcy5maW5kKFo9Ploudmlld2JveElkPT09ZC5pZCk7RCYmKHlpZWxkIGguc2FzU3RvcmVTZXJ2aWNlLnZpZXdEYXRhU2VhcmNoKGYsZC5zZWFyY2hOdW1lcmljLHYsTSkudGhlbihaPT57Wi5zYXNwYXJhbXN8fFoudmlld0RhdGE/RC5ob3RUYWJsZS5kYXRh'@;
put 'PVoudmlld2RhdGE6ZC5zZWFyY2hMb2FkaW5nPSEwfSkuY2F0Y2goWj0+e2gubG9nZ2VyU2VydmljZS5lcnJvcihaKX0pLGQuc2VhcmNoTG9hZGluZz0hMSl9KSgpfXJlbG9hZFRhYmxlRGF0YShhKXt2YXIgZD10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXtjb25zdCBoPWAke2EubGlicmFy'@;
put 'eX0uJHthLnRhYmxlfWA7YS5sb2FkaW5nRGF0YT0hMCx5aWVsZCBkLnJlbG9hZERhdGEoaCxhKSxhLmxvYWRpbmdEYXRhPSExLGQuZXZlbnRTZXJ2aWNlLmRpc3BhdGNoRXZlbnQoInJlc2l6ZSIpfSkoKX11cGRhdGVIb3RDb2x1bW5zKGEsZCl7dGhpcy51cGRhdGVIaWRkZW5Db2x1bW5zSG90'@;
put 'KGEsZCksdGhpcy5zZXRDb2x1bW5PcmRlcihkKX11cGRhdGVDb2x1bW5PcmRlckhvdChhLGQsaCl7Y29uc3QgZj10aGlzLmdldFZpZXdib3hIb3RJbnN0YW5jZShoKTtpZihmKXtjb25zdCB2PWYucHJvcFRvQ29sKGEpO2YuZ2V0UGx1Z2luKCJtYW51YWxDb2x1bW5Nb3ZlIikubW92ZUNvbHVt'@;
put 'bih2LGQpLGYucmVuZGVyKCksdGhpcy5zZXRDb2x1bW5PcmRlcihoKX19dGFibGVFZGl0RXhpc3RzKGEpe2NvbnN0IGQ9S24uZWRpdG9yLmxpYnNBbmRUYWJsZXMsaD1hLmxpYnJhcnk7cmV0dXJuISFkW2hdJiZkW2hdLmluY2x1ZGVzKGEudGFibGUpfXNldENvbHVtbk9yZGVyKGEpe2NvbnN0'@;
put 'IGQ9dGhpcy52aWV3Ym94ZXMuZmluZChoPT5oLmlkPT09YSk7aWYoZCl7Y29uc3QgaD10aGlzLmNyZWF0ZUNvbHVtbk9yZGVyKGEpO2QuY29sdW1ucz1oLmxlbmd0aD4wP2g6ZC5jb2x1bW5zfXRoaXMudmlld2JveENoYW5nZWQoKX1jcmVhdGVDb2x1bW5PcmRlcihhKXtjb25zdCBkPXRoaXMu'@;
put 'Z2V0Vmlld2JveEhvdEluc3RhbmNlKGEpO2lmKCFkKXJldHVybltdO2NvbnN0IGg9ZC5nZXRDb2xIZWFkZXIoKSxmPXRoaXMuc2VsZWN0ZWRWaWV3Ym94VGFibGU/LmhvdFRhYmxlLmNvbEhlYWRlcnM7aWYoIWYpcmV0dXJuW107Y29uc3Qgdj10aGlzLnNlbGVjdGVkVmlld2JveFRhYmxlPy5o'@;
put 'b3RUYWJsZT8uY29sSGVhZGVyc1Zpc2libGUubGVuZ3RofHw1LE09W107cmV0dXJuIGgubWFwKChELFopPT57aWYoWjx2KXtjb25zdCByZT1mLmluZGV4T2YoRCk7cmU+LTEmJk0ucHVzaChyZSl9fSksTX11cGRhdGVIaWRkZW5Db2x1bW5zSG90KGEsZCl7Y29uc3QgaD10aGlzLmdldFZpZXdi'@;
put 'b3hIb3RJbnN0YW5jZShkKTtpZihoKXtjb25zdCBmPWEubWFwKHY9PmgucHJvcFRvQ29sKHYpKTtoLnVwZGF0ZVNldHRpbmdzKHtoaWRkZW5Db2x1bW5zOntjb2x1bW5zOmZ9fSksaC5yZW5kZXIoKX19Z2V0Vmlld2JveEhvdEluc3RhbmNlKGEpe3JldHVybiBhP3RoaXMuaG90VGFibGVSZWdp'@;
put 'c3RlcmVyLmdldEluc3RhbmNlKGBob3RJbnN0YW5jZV92aWV3Ym94XyR7YX1gKTp2b2lkIDB9dmlld2JveENoYW5nZWQoKXtsZXQgYTtjb25zdCBkPXRoaXMuZW5jb2RlVXJsRGF0YSh0aGlzLnZpZXdib3hlcyk7ZC5sZW5ndGg+MCYmKGE9e3ZpZXdib3hlczpkfSksdGhpcy5yb3V0ZXIubmF2'@;
put 'aWdhdGUoW10se3JlbGF0aXZlVG86dGhpcy5hY3RpdmF0ZWRSb3V0ZSxxdWVyeVBhcmFtczphfSksdGhpcy5wcmVwYXJlRmlsdGVyQ2FjaGUoKX1wcmVwYXJlRmlsdGVyQ2FjaGUoKXtmb3IobGV0IGEgb2YgdGhpcy52aWV3Ym94ZXMpaWYoS24udmlld2JveGVzW2EuaWRdfHwoS24udmlld2Jv'@;
put 'eGVzW2EuaWRdPXRoaXMuaGVscGVyU2VydmljZS5kZWVwQ2xvbmUoaFopKSxhLnF1ZXJ5JiZhLnF1ZXJ5Lmxlbmd0aD4wKXtjb25zdCBkPXRoaXMudmlld2JveFRhYmxlcy5maW5kKGY9PmYudmlld2JveElkPT09YS5pZCksaD1gdmlld2JveGVzLiR7YS5pZH1gO0tuLnZpZXdib3hlc1thLmlk'@;
put 'XS5maWx0ZXIucXVlcnk9YS5xdWVyeSxLbi52aWV3Ym94ZXNbYS5pZF0uZmlsdGVyLmxpYmRzPWEubGlicmFyeSsiLiIrYS50YWJsZSx0aGlzLnNhc1N0b3JlU2VydmljZS5pbml0aWFsaXplR2xvYmFsRmlsdGVyQ2xhdXNlKGgsZD8uaG90VGFibGUuY29scyl9fWVuY29kZVVybERhdGEoYSl7'@;
put 'bGV0IGQ9IiI7cmV0dXJuIGEubWFwKChoLGYpPT57ZCs9YCR7aC5pZH0tJHtoLmxpYnJhcnl9LSR7aC50YWJsZX0tJHtoLndpZHRofS0ke2guaGVpZ2h0fS0ke2gueH0tJHtoLnl9LSR7aC5jb2xsYXBzZWQ/MTowfS0ke2gubWluaW1pemVkPzE6MH0tJHtoLmZpbHRlcl9wa3x8MH0ke2guY29s'@;
put 'dW1ucyYmaC5jb2x1bW5zLmxlbmd0aD4wPyItIitoLmNvbHVtbnM/LmpvaW4oIiwiKToiIn1gLGYhPT1hLmxlbmd0aC0xJiYoZCs9IjsiKX0pLGR9ZGVjb2RlVXJsRGF0YShhKXtsZXQgaD1bXTtyZXR1cm4gYS5zcGxpdCgiOyIpLm1hcCh2PT57Y29uc3QgTT12LnNwbGl0KCItIik7aC5wdXNo'@;
put 'KHtpZDpwYXJzZUludChNWzBdKSxsaWJyYXJ5Ok1bMV0sdGFibGU6TVsyXSx3aWR0aDpwYXJzZUludChNWzNdKSxoZWlnaHQ6cGFyc2VJbnQoTVs0XSkseDpwYXJzZUludChNWzVdKSx5OnBhcnNlSW50KE1bNl0pLGNvbGxhcHNlZDohIXBhcnNlSW50KE1bN10pLG1pbmltaXplZDohIXBhcnNl'@;
put 'SW50KE1bOF0pLGNvbHVtbnM6TVsxMF0/LnNwbGl0KCIsIikubWFwKEQ9PnBhcnNlSW50KEQpKXx8W10sZmlsdGVyX3BrOk1bOV19KX0pLGh9bmdPbkRlc3Ryb3koKXt0aGlzLl9xdWVyeT8udW5zdWJzY3JpYmUoKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5l'@;
put 'dyhkfHxjKShHZShXYSksR2UodTEpLEdlKEJzKSxHZSh2YyksR2Uoa2gpLEdlKFNkKSxHZShTdSksR2UoTHMpLEdlKEN1KSxHZShFcykpfX1zdGF0aWN7dGhpcy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siYXBwLXZpZXdib3hlcyJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24oZCxo'@;
put 'KXtpZigxJmQmJihxYShLNnQsNSkscWEocTZ0LDUpKSwyJmQpe2xldCBmO0NpKGY9U2koKSkmJihoLnJlc2l6ZUJveFF1ZXJ5PWYpLENpKGY9U2koKSkmJihoLmRyYWdIYW5kbGVDb3JuZXJRdWVyeT1mKX19LGlucHV0czp7dmlld2JveE1vZGFsOiJ2aWV3Ym94TW9kYWwifSxvdXRwdXRzOnt2'@;
put 'aWV3Ym94TW9kYWxDaGFuZ2U6InZpZXdib3hNb2RhbENoYW5nZSJ9LGRlY2xzOjU2LHZhcnM6MjMsY29uc3RzOltbImlucHV0IiwiIl0sWyJyZXNpemVCb3giLCIiXSxbImRyYWdIYW5kbGVDb3JuZXIiLCIiXSxbInNlYXJjaEVsIiwiIl0sWyJxdWVyeUZpbHRlciIsIiJdLFsiYXBwRHJhZ05k'@;
put 'cm9wIiwiIiwxLCJyb290LW1vZGFsIiwicG9zaXRpb24tcmVsYXRpdmUiLDMsImNsck1vZGFsT3BlbkNoYW5nZSIsImNsck1vZGFsT3BlbiIsImNsck1vZGFsQ2xvc2FibGUiLCJjbHJNb2RhbFNpemUiXSxbMSwibW9kYWwtdGl0bGUiXSxbImNsYXNzIiwibGljZW5jZS1ub3RpY2UiLDQsIm5n'@;
put 'SWYiXSxbMSwibW9kYWwtYm9keSIsImQtZmxleCJdLFsxLCJhZGQtbmV3IiwiZC1mbGV4IiwiY2xyLWZsZXgtY29sdW1uIl0sWzEsIm10LTAiXSxbMSwidy0xMDAiXSxbImNsYXNzIiwibXktMTAtbXgtYXV0byB0ZXh0LWNlbnRlciIsNCwibmdJZiJdLFsiY2xhc3MiLCJtLTAgdmlld2JveC1s'@;
put 'aW1pdC1ub3RpY2UiLDQsIm5nSWYiXSxbMywibGlicmFyeUxpc3QiLCJsaWJyYXJ5T25DbGlja0VtaXR0ZXIiLCJ0YWJsZU9uQ2xpY2tFbWl0dGVyIiw0LCJuZ0lmIl0sWzEsImN1cnJlbnRseS1vcGVuIl0sWzEsImQtZmxleCIsImNsci1qdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiJdLFsicm9s'@;
put 'ZSIsInRvb2x0aXAiLCJhcmlhLWhhc3BvcHVwIiwidHJ1ZSIsMSwidG9vbHRpcCIsInRvb2x0aXAtbWQiLCJ0b29sdGlwLWJvdHRvbS1sZWZ0IiwibWwtMyIsMywiY2xpY2siXSxbInNoYXBlIiwiZ3JpZC12aWV3Iiwic2l6ZSIsIjE5Il0sWzEsInRvb2x0aXAtY29udGVudCJdLFsic2hhcGUi'@;
put 'LCJtaW51cyIsInNpemUiLCIxOSJdLFsic2hhcGUiLCJ3aW5kb3ctcmVzdG9yZSIsInNpemUiLCIxOSJdLFsiY2xhc3MiLCJ0ZXh0LWNlbnRlciB3LTEwMCBtLTAiLDQsIm5nSWYiXSxbImNsYXNzIiwib3Blbi12aWV3Ym94IGQtZmxleCBjbHItanVzdGlmeS1jb250ZW50LWJldHdlZW4gY2xy'@;
put 'LWFsaWduLWl0ZW1zLWNlbnRlciIsMywic2VsZWN0ZWQiLCJjbGljayIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzEsImQtZmxleCIsImNsci1qdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiIsImNsci1hbGlnbi1pdGVtcy1jZW50ZXIiLCJtdC0xMCJdLFsxLCJtLTAiXSxbImNsYXNzIiwiY29uZmln'@;
put 'dXJhdGlvbi13cmFwcGVyIiwiY2RrRHJvcExpc3RHcm91cCIsIiIsNCwibmdWYXIiXSxbMSwibW9kYWwtZm9vdGVyIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tc20iLCJidG4tb3V0bGluZSIsMywiY2xpY2siXSxbMSwidmlld2JveGVzLWNvbnRhaW5lciJdLFsiY2xhc3MiLCJ2'@;
put 'aWV3Ym94IiwiY2RrRHJhZ0JvdW5kYXJ5IiwiLnZpZXdib3hlcy1jb250YWluZXIiLCJjZGtEcmFnIiwiIiwidGFiaW5kZXgiLCIwIiwzLCJmb2N1c2VkIiwiZGlzcGxheSIsIndpZHRoIiwiaGVpZ2h0IiwicG9pbnRlci1ldmVudHMiLCJib3gtc2hhZG93IiwiY2RrRHJhZ0ZyZWVEcmFnUG9z'@;
put 'aXRpb24iLCJpZCIsIm1vdXNlZG93biIsImNka0RyYWdFbmRlZCIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzEsImZpbHRlci1tb2RhbCIsMywiY2xyTW9kYWxPcGVuQ2hhbmdlIiwiY2xyTW9kYWxPcGVuIiwiY2xyTW9kYWxTaXplIiwiY2xyTW9kYWxDbG9zYWJsZSJdLFsxLCJtb2RhbC10aXRs'@;
put 'ZSIsImNlbnRlciIsInRleHQtY2VudGVyIiwiY29sb3ItZGFya2VyLWdyYXkiXSxbMSwibW9kYWwtYm9keSJdLFszLCJ2aWV3Ym94SWQiLDQsIm5nSWYiXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1saW5rIiwzLCJjbGljayJdLFsidHlwZSIsImJ1dHRvbiIsMSwi'@;
put 'YnRuIiwiYnRuLXNtIiwiYnRuLXN1Y2Nlc3Mtb3V0bGluZSIsMywiY2xpY2siLCJjbHJMb2FkaW5nIl0sWzEsImxpY2VuY2Utbm90aWNlIl0sWzEsIm15LTEwLW14LWF1dG8iLCJ0ZXh0LWNlbnRlciJdLFsiY2xyTWVkaXVtIiwiIl0sWzEsIm0tMCIsInZpZXdib3gtbGltaXQtbm90aWNlIl0s'@;
put 'WzMsImxpYnJhcnlPbkNsaWNrRW1pdHRlciIsInRhYmxlT25DbGlja0VtaXR0ZXIiLCJsaWJyYXJ5TGlzdCJdLFsxLCJ0ZXh0LWNlbnRlciIsInctMTAwIiwibS0wIl0sWzEsIm9wZW4tdmlld2JveCIsImQtZmxleCIsImNsci1qdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiIsImNsci1hbGlnbi1p'@;
put 'dGVtcy1jZW50ZXIiLDMsImNsaWNrIl0sWzEsImQtZmxleCIsImNsci1hbGlnbi1pdGVtcy1jZW50ZXIiXSxbImNsclNtYWxsIiwiIiwiY2xhc3MiLCJtbC0zIiw0LCJuZ0lmIl0sWyJyb2xlIiwidG9vbHRpcCIsImFyaWEtaGFzcG9wdXAiLCJ0cnVlIiwxLCJ0b29sdGlwIiwidG9vbHRpcC1t'@;
put 'ZCIsInRvb2x0aXAtYm90dG9tLWxlZnQiLDMsImNsaWNrIl0sWyJzaGFwZSIsImN1cnNvci1tb3ZlIiwic2l6ZSIsIjEzIl0sWyJyb2xlIiwidG9vbHRpcCIsImFyaWEtaGFzcG9wdXAiLCJ0cnVlIiwiY2xhc3MiLCJ0b29sdGlwIHRvb2x0aXAtbWQgdG9vbHRpcC1ib3R0b20tbGVmdCBtbC0z'@;
put 'IiwzLCJjbGljayIsNCwibmdJZiJdLFsic2hhcGUiLCJ0aW1lcyIsInNpemUiLCIxOSJdLFsiY2xyU21hbGwiLCIiLDEsIm1sLTMiXSxbImNka0Ryb3BMaXN0R3JvdXAiLCIiLDEsImNvbmZpZ3VyYXRpb24td3JhcHBlciJdLFs0LCJuZ0lmIl0sWzEsImNvbHMtc2VhcmNoIl0sWyJ0eXBlIiwi'@;
put 'dGV4dCIsImF1dG9jb21wbGV0ZSIsIm9mZiIsImF1dG9mb2N1cyIsIiIsInBsYWNlaG9sZGVyIiwiU2VhcmNoIGNvbHVtbnMiLCJ0YWJpbmRleCIsIjAiLDMsInZhbHVlQ2hhbmdlIiwiaW5wdXRJZCIsImVtaXRPbmx5U2VsZWN0ZWQiXSxbNCwibmdGb3IiLCJuZ0Zvck9mIl0sWyJjZGtEcm9w'@;
put 'TGlzdCIsIiIsMSwiY29scy1saXN0IiwzLCJjZGtEcm9wTGlzdERyb3BwZWQiLCJjZGtEcm9wTGlzdERhdGEiXSxbImNka0RyYWciLCIiLDMsImNsYXNzIiwiY3Vyc29yLWRlZmF1bHQtaSIsInByaW1hcnlLZXlIZWFkZXJTdHlsZSIsImNka0RyYWdEYXRhIiwiY2RrRHJhZ0Rpc2FibGVkIiw0'@;
put 'LCJuZ0ZvciIsIm5nRm9yT2YiXSxbImNka0RyYWciLCIiLDMsImNka0RyYWdEYXRhIiwiY2RrRHJhZ0Rpc2FibGVkIl0sWyJzaGFwZSIsImtleSIsNCwibmdJZiJdLFsic2hhcGUiLCJ0cmFzaCIsImNsYXNzIiwiY3Vyc29yLXBvaW50ZXIiLDMsImNsaWNrIiw0LCJuZ0lmIl0sWyJzaGFwZSIs'@;
put 'ImtleSJdLFsic2hhcGUiLCJ0cmFzaCIsMSwiY3Vyc29yLXBvaW50ZXIiLDMsImNsaWNrIl0sWyJjZGtEcmFnQm91bmRhcnkiLCIudmlld2JveGVzLWNvbnRhaW5lciIsImNka0RyYWciLCIiLCJ0YWJpbmRleCIsIjAiLDEsInZpZXdib3giLDMsIm1vdXNlZG93biIsImNka0RyYWdFbmRlZCIs'@;
put 'ImNka0RyYWdGcmVlRHJhZ1Bvc2l0aW9uIiwiaWQiXSxbImNka0RyYWdIYW5kbGUiLCIiLDEsImRyYWctaGFuZGxlIiwiZC1mbGV4IiwiY2xyLWp1c3RpZnktY29udGVudC1iZXR3ZWVuIiwiY2xyLWFsaWduLWl0ZW1zLWNlbnRlciJdLFsxLCJ0YWJsZS10aXRsZSJdLFsxLCJhY3Rpb25zIl0s'@;
put 'WyJzaGFwZSIsImFuZ2xlIHRvcCIsMywiY2xpY2siLDQsIm5nSWYiXSxbInNoYXBlIiwiYW5nbGUgZG93biIsMywiY2xpY2siLDQsIm5nSWYiXSxbInNoYXBlIiwibWludXMiLDMsImNsaWNrIl0sWyJzaGFwZSIsInRpbWVzIiwzLCJjbGljayJdLFsiY2RrRHJhZyIsIiIsMSwiZHJhZ0hhbmRs'@;
put 'ZSIsImNvcm5lciIsMywiY2RrRHJhZ01vdmVkIiwiaWQiXSxbImNsckZvcm0iLCIiLDEsImQtZmxleCIsImFsaWduLWl0ZW1zLWNlbnRlciIsImNsci1qdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiIsImNsci1mbGV4LXdyYXAiLCJ0YWJsZS1zZWFyY2gtd3JhcHBlciJdLFsxLCJkLWZsZXgiLCJh'@;
put 'bGlnbi1pdGVtcy1jZW50ZXIiLCJjbHItZmxleC13cmFwIl0sWzEsImlucHV0LXdyYXBwZXIiXSxbImNscklucHV0IiwiIiwicGxhY2Vob2xkZXIiLCJTZWFyY2giLCJuYW1lIiwic2VhcmNoLWlucHV0IiwzLCJrZXl1cC5lbnRlciIsInR5cGUiXSxbInNoYXBlIiwic2VhcmNoIiwzLCJjbGlj'@;
put 'ayIsNCwibmdJZiJdLFsiY2xhc3MiLCJzcGlubmVyIHNwaW5uZXItaW5saW5lIiw0LCJuZ0lmIl0sWyJ0eXBlIiwiY2hlY2tib3giLCJjbHJDaGVja2JveCIsIiIsIm5hbWUiLCJudW1lcmljX2NoZWNrIiwzLCJuZ01vZGVsQ2hhbmdlIiwibmdNb2RlbCJdLFsiY2xhc3MiLCJzcGlubmVyIHNw'@;
put 'aW5uZXItc20iLDQsIm5nSWYiXSxbInNoYXBlIiwicmVmcmVzaCIsImNsYXNzIiwiY2xpY2staWNvbiIsMywiY2xpY2siLDQsIm5nSWYiXSxbInJvbGUiLCJ0b29sdGlwIiwiYXJpYS1oYXNwb3B1cCIsInRydWUiLDEsInRvb2x0aXAiLCJ0b29sdGlwLWxnIiwidG9vbHRpcC1ib3R0b20tbGVm'@;
put 'dCIsIm1sLTUiLDMsImNsaWNrIl0sWyJzaGFwZSIsImZpbHRlciIsMSwiY2xpY2staWNvbiJdLFsxLCJ0b29sdGlwLWNvbnRlbnQiLCJ0b29sdGlwLWxvbmciXSxbInNoYXBlIiwicGVuY2lsIiwxLCJjbGljay1pY29uIiwibWwtNSIsMywiY2xpY2siXSxbImNsYXNzIiwiY29udGVudCIsMywi'@;
put 'ZGlzcGxheSIsNCwibmdWYXIiXSxbInNoYXBlIiwiYW5nbGUgdG9wIiwzLCJjbGljayJdLFsic2hhcGUiLCJhbmdsZSBkb3duIiwzLCJjbGljayJdLFsic2hhcGUiLCJzZWFyY2giLDMsImNsaWNrIl0sWzEsInNwaW5uZXIiLCJzcGlubmVyLWlubGluZSJdLFsxLCJzcGlubmVyIiwic3Bpbm5l'@;
put 'ci1zbSJdLFsic2hhcGUiLCJyZWZyZXNoIiwxLCJjbGljay1pY29uIiwzLCJjbGljayJdLFsxLCJjb250ZW50Il0sWyJjbGFzcyIsImhvdC1zcGlubmVyIG15LTEwLW14LWF1dG8gdGV4dC1jZW50ZXIiLDQsIm5nSWYiXSxbImlkIiwiaG90VGFibGUiLCJjbGFzc05hbWUiLCJodERhcmsiLCJz'@;
put 'dHJldGNoSCIsImFsbCIsMywiaG90SWQiLCJyZWFkT25seSIsIm1vZGlmeUNvbFdpZHRoIiwiY29weVBhc3RlIiwiY29udGV4dE1lbnUiLCJtdWx0aUNvbHVtblNvcnRpbmciLCJ2aWV3cG9ydFJvd1JlbmRlcmluZ09mZnNldCIsImRhdGEiLCJjb2xIZWFkZXJzIiwiY29sdW1ucyIsImZpbHRl'@;
put 'cnMiLCJkcm9wZG93bk1lbnUiLCJoZWlnaHQiLCJjZWxscyIsIm1heFJvd3MiLCJtYW51YWxDb2x1bW5SZXNpemUiLCJsaWNlbnNlS2V5Iiw0LCJuZ0lmIl0sWzEsImhvdC1zcGlubmVyIiwibXktMTAtbXgtYXV0byIsInRleHQtY2VudGVyIl0sWyJpZCIsImhvdFRhYmxlIiwiY2xhc3NOYW1l'@;
put 'IiwiaHREYXJrIiwic3RyZXRjaEgiLCJhbGwiLDMsImhvdElkIiwicmVhZE9ubHkiLCJtb2RpZnlDb2xXaWR0aCIsImNvcHlQYXN0ZSIsImNvbnRleHRNZW51IiwibXVsdGlDb2x1bW5Tb3J0aW5nIiwidmlld3BvcnRSb3dSZW5kZXJpbmdPZmZzZXQiLCJkYXRhIiwiY29sSGVhZGVycyIsImNv'@;
put 'bHVtbnMiLCJmaWx0ZXJzIiwiZHJvcGRvd25NZW51IiwiaGVpZ2h0IiwiY2VsbHMiLCJtYXhSb3dzIiwibWFudWFsQ29sdW1uUmVzaXplIiwibGljZW5zZUtleSJdLFszLCJ2aWV3Ym94SWQiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZCxoKXsxJmQmJihkZSgwLCJjbHItbW9kYWwiLDUpLEZ0KCJj'@;
put 'bHJNb2RhbE9wZW5DaGFuZ2UiLGZ1bmN0aW9uKHYpe3JldHVybiBoLmNsck1vZGFsT3BlbkNoYW5nZSh2KX0pLGRlKDEsImgzIiw2KSxMZSgyLCIgVmlld2JveGVzICIpLGd0KDMsUTZ0LDIsMiwic3BhbiIsNyksaGUoKSxkZSg0LCJkaXYiLDgpKDUsImRpdiIsOSkoNiwicCIsMTApLExlKDcs'@;
put 'IkFkZCBuZXciKSxoZSgpLEd0KDgsImhyIiwxMSksZ3QoOSxlOHQsMiwwLCJkaXYiLDEyKSgxMCx0OHQsMiwwLCJwIiwxMykoMTEsbjh0LDEsMSwiZGMtdHJlZSIsMTQpLGhlKCksZGUoMTIsImRpdiIsMTUpKDEzLCJkaXYiLDE2KSgxNCwicCIsMTApLExlKDE1LCJDdXJyZW50bHkgb3BlbiIp'@;
put 'LGhlKCksZGUoMTYsImRpdiIpKDE3LCJhIiwxNyksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBoLnNuYXBUb0dyaWQoKX0pLEd0KDE4LCJjbHItaWNvbiIsMTgpLGRlKDE5LCJzcGFuIiwxOSksTGUoMjAsIlNuYXAgdmlld2JveGVzIHRvIGdyaWQiKSxoZSgpKCksZGUoMjEsImEiLDE3'@;
put 'KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGgubWluaW1pemVBbGwoKX0pLEd0KDIyLCJjbHItaWNvbiIsMjApLGRlKDIzLCJzcGFuIiwxOSksTGUoMjQsIk1pbmltaXplIGFsbCB2aWV3Ym94ZXMiKSxoZSgpKCksZGUoMjUsImEiLDE3KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0'@;
put 'dXJuIGgucmVzdG9yZUFsbCgpfSksR3QoMjYsImNsci1pY29uIiwyMSksZGUoMjcsInNwYW4iLDE5KSxMZSgyOCwiUmVzdG9yZSBhbGwgdmlld2JveGVzIiksaGUoKSgpKCkoKSxHdCgyOSwiaHIiKSxndCgzMCxyOHQsMiwwLCJwIiwyMikoMzEsczh0LDE1LDEwLCJkaXYiLDIzKSxkZSgzMiwi'@;
put 'ZGl2IiwyNCkoMzMsInAiLDI1KSxMZSgzNCksaGUoKSgpLEd0KDM1LCJociIpLGd0KDM2LHA4dCwzLDIsImRpdiIsMjYpLGhlKCkoKSxkZSgzNywiZGl2IiwyNykoMzgsImJ1dHRvbiIsMjgpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gaC52aWV3Ym94TW9kYWw9ITF9KSxMZSgzOSwi'@;
put 'IE9rICIpLGhlKCkoKSgpLGRlKDQwLCJkaXYiLDI5KSxndCg0MSxNOHQsMzMsMzcsImRpdiIsMzApLGhlKCksZGUoNDIsImNsci1tb2RhbCIsMzEpLGdpKCJjbHJNb2RhbE9wZW5DaGFuZ2UiLGZ1bmN0aW9uKHYpe3JldHVybiBtaShoLmZpbHRlcix2KXx8KGguZmlsdGVyPXYpLHZ9KSxkZSg0'@;
put 'MywiaDMiLDMyKSxMZSg0NCwiIEZpbHRlciBmb3Igdmlld2JveCB0YWJsZTogIiksZGUoNDUsInNwYW4iKSxMZSg0NiksaGUoKSgpLGRlKDQ3LCJkaXYiLDMzKSxndCg0OCx4OHQsMiwxLCJhcHAtcXVlcnkiLDM0KSxoZSgpLGRlKDQ5LCJkaXYiLDI3KSg1MCwiYnV0dG9uIiwzNSksRnQoImNs'@;
put 'aWNrIixmdW5jdGlvbigpe3JldHVybiBoLnJlc2V0RmlsdGVyKCl9KSxMZSg1MSwiIHJlc2V0IGZpbHRlciAiKSxoZSgpLGRlKDUyLCJidXR0b24iLDI4KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGguZmlsdGVyPSExfSksTGUoNTMsIiBDYW5jZWwgIiksaGUoKSxkZSg1NCwiYnV0'@;
put 'dG9uIiwzNiksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBoLnNlbmRDbGF1c2UoKX0pLExlKDU1LCIgT2sgIiksaGUoKSgpKCkpLDImZCYmKE1lKCJjbHJNb2RhbE9wZW4iLGgudmlld2JveE1vZGFsKSgiY2xyTW9kYWxDbG9zYWJsZSIsITApKCJjbHJNb2RhbFNpemUiLCJsZyIpLGZl'@;
put 'KDMpLE1lKCJuZ0lmIixoLmxpY2VuY2VTdGF0ZS52YWx1ZS52aWV3Ym94X2xpbWl0IT09aC5JbmZpbml0eSksZmUoNiksTWUoIm5nSWYiLGgubGlicmFyaWVzTG9hZGluZyksZmUoKSxNZSgibmdJZiIsaC52aWV3Ym94TGltaXRSZWFjaGVkKSxmZSgpLE1lKCJuZ0lmIixoLnZpZXdib3hNb2Rh'@;
put 'bCksZmUoMTkpLE1lKCJuZ0lmIixoLnZpZXdib3hlcy5sZW5ndGg8MSksZmUoKSxNZSgibmdGb3JPZiIsaC52aWV3Ym94ZXMpLGZlKDMpLERyKCIgQ29uZmlndXJhdGlvbiAoIixudWxsIT1oLnNlbGVjdGVkVmlld2JveFRhYmxlJiZoLnNlbGVjdGVkVmlld2JveFRhYmxlLnZpZXdib3hMaWJE'@;
put 'YXRhc2V0PyIjIisobnVsbD09aC5zZWxlY3RlZFZpZXdib3hUYWJsZT9udWxsOmguc2VsZWN0ZWRWaWV3Ym94VGFibGUudmlld2JveElkKSsiICIrKG51bGw9PWguc2VsZWN0ZWRWaWV3Ym94VGFibGU/bnVsbDpoLnNlbGVjdGVkVmlld2JveFRhYmxlLnZpZXdib3hMaWJEYXRhc2V0KToic2Vs'@;
put 'ZWN0IHZpZXdib3ggZnJvbSBhYm92ZSIsIikgIiksZmUoMiksTWUoIm5nVmFyIixwTSgxOSxYNnQsbnVsbD09aC5zZWxlY3RlZFZpZXdib3hUYWJsZXx8bnVsbD09aC5zZWxlY3RlZFZpZXdib3hUYWJsZS5ob3RUYWJsZT9udWxsOmguc2VsZWN0ZWRWaWV3Ym94VGFibGUuaG90VGFibGUuY29s'@;
put 'SGVhZGVyc0hpZGRlbixudWxsPT1oLnNlbGVjdGVkVmlld2JveFRhYmxlfHxudWxsPT1oLnNlbGVjdGVkVmlld2JveFRhYmxlLmhvdFRhYmxlP251bGw6aC5zZWxlY3RlZFZpZXdib3hUYWJsZS5ob3RUYWJsZS5jb2xIZWFkZXJzVmlzaWJsZSxudWxsPT1oLnNlbGVjdGVkVmlld2JveFRhYmxl'@;
put 'fHxudWxsPT1oLnNlbGVjdGVkVmlld2JveFRhYmxlLmhvdFRhYmxlP251bGw6aC5zZWxlY3RlZFZpZXdib3hUYWJsZS5ob3RUYWJsZS5oZWFkZXJQa3MpKSxmZSg1KSxNZSgibmdGb3JPZiIsaC52aWV3Ym94ZXMpLGZlKCkscGkoImNsck1vZGFsT3BlbiIsaC5maWx0ZXIpLE1lKCJjbHJNb2Rh'@;
put 'bFNpemUiLCJ4bCIpKCJjbHJNb2RhbENsb3NhYmxlIiwhMSksZmUoNCksVXUoIiAjIixudWxsPT1oLmZpbHRlcmluZ1ZpZXdib3g/bnVsbDpoLmZpbHRlcmluZ1ZpZXdib3guaWQsIiAiLGguZmlsdGVyTGliZHMsIiAiKSxmZSgyKSxNZSgibmdJZiIsaC5maWx0ZXIpLGZlKDYpLE1lKCJjbHJM'@;
put 'b2FkaW5nIixoLmZpbHRlckxvYWRpbmcpKX0sZGVwZW5kZW5jaWVzOltucyxiYSxIbCxvdSxLdSxqMCxQMixkcyxRMWUsSWQsQnksU2gsWjEsUmQsbDcsQTIsazIsTWQsbmwsbzcsJHMseXAsWGVlLERfLHkxZSxiMWUsVFksdjFlLGs2ZSwkNnQsU3csdEVdLGVuY2Fwc3VsYXRpb246Mn0pfX1y'@;
put 'ZXR1cm4gY30pKCksUjZlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5maWxlT3Zlcj1uZXcgS3IsdGhpcy5maWxlRHJvcD1uZXcgS3IsdGhpcy5lbGVtZW50PWF9b25Ecm9wKGEpe3RoaXMuX3ByZXZlbnRBbmRTdG9wKGEpO2NvbnN0IGQ9YS5kYXRhVHJhbnNmZXI/LmZpbGVz'@;
put 'LGg9W107aWYoZClmb3IobGV0IGY9MDtmPGQubGVuZ3RoO2YrKyloLnB1c2goZFtmXSk7dGhpcy51cGxvYWRlcj8uYWRkVG9RdWV1ZShoKSx0aGlzLmZpbGVPdmVyLmVtaXQoITEpLHRoaXMuZmlsZURyb3AuZW1pdChoKX1vbkRyYWdPdmVyKGEpe3RoaXMuX3ByZXZlbnRBbmRTdG9wKGEpO2Nv'@;
put 'bnN0IGQ9YS5kYXRhVHJhbnNmZXI7aWYoZCl7aWYoLTE9PT1kLnR5cGVzLmluZGV4T2YoIkZpbGVzIikpcmV0dXJuO2QuZHJvcEVmZmVjdD0iY29weSJ9dGhpcy5maWxlT3Zlci5lbWl0KCEwKX1vbkRyYWdMZWF2ZShhKXt0aGlzLl9wcmV2ZW50QW5kU3RvcChhKSx0aGlzLmZpbGVPdmVyLmVt'@;
put 'aXQoITEpfV9wcmV2ZW50QW5kU3RvcChhKXthLnByZXZlbnREZWZhdWx0KCksYS5zdG9wUHJvcGFnYXRpb24oKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShHZShKaSkpfX1zdGF0aWN7dGhpcy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxlY3Rv'@;
put 'cnM6W1siIiwiYXBwRmlsZURyb3AiLCIiXV0saG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGQsaCl7MSZkJiZGdCgiZHJvcCIsZnVuY3Rpb24odil7cmV0dXJuIGgub25Ecm9wKHYpfSkoImRyYWdvdmVyIixmdW5jdGlvbih2KXtyZXR1cm4gaC5vbkRyYWdPdmVyKHYpfSkoImRyYWdsZWF2ZSIsZnVu'@;
put 'Y3Rpb24odil7cmV0dXJuIGgub25EcmFnTGVhdmUodil9KX0saW5wdXRzOnt1cGxvYWRlcjoidXBsb2FkZXIifSxvdXRwdXRzOntmaWxlT3ZlcjoiZmlsZU92ZXIiLGZpbGVEcm9wOiJmaWxlRHJvcCJ9fSl9fXJldHVybiBjfSkoKSxMNmU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0'@;
put 'aGlzLmZpbGVTZWxlY3RlZD1uZXcgS3IsdGhpcy5lbGVtZW50PWF9aXNFbXB0eUFmdGVyU2VsZWN0aW9uKCl7cmV0dXJuISF0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudC5hdHRyaWJ1dGVzLm11bHRpcGxlfW9uQ2hhbmdlKCl7Y29uc3QgYT10aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudC5m'@;
put 'aWxlczt0aGlzLnVwbG9hZGVyPy5hZGRUb1F1ZXVlKGEpLHRoaXMuZmlsZVNlbGVjdGVkLmVtaXQoYSksdGhpcy5pc0VtcHR5QWZ0ZXJTZWxlY3Rpb24oKSYmKHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LnZhbHVlPSIiKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0'@;
put 'dXJuIG5ldyhkfHxjKShHZShKaSkpfX1zdGF0aWN7dGhpcy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwiYXBwRmlsZVNlbGVjdCIsIiJdXSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZCxoKXsxJmQmJkZ0KCJjaGFuZ2UiLGZ1bmN0aW9uKCl7cmV0dXJuIGgub25DaGFuZ2Uo'@;
put 'KX0pfSxpbnB1dHM6e3VwbG9hZGVyOiJ1cGxvYWRlciJ9LG91dHB1dHM6e2ZpbGVTZWxlY3RlZDoiZmlsZVNlbGVjdGVkIn19KX19cmV0dXJuIGN9KSgpO2Z1bmN0aW9uIEU4dChjLGwpezEmYyYmKGRlKDAsInAiLDgpLExlKDEsIiBObyBkYXRhc2V0IG1ldGEgdG8gc2hvdy4gIiksaGUoKSl9'@;
put 'ZnVuY3Rpb24gVDh0KGMsbCl7aWYoMSZjJiYoc2koMCksZGUoMSwiY2xyLWRnLWNvbHVtbiIpLExlKDIpLGhlKCksbGkoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O2ZlKDIpLHdyKGEuY29sTmFtZXx8YS5jb2xLZXkpfX1mdW5jdGlvbiBBOHQoYyxsKXtpZigxJmMmJihzaSgwKSxkZSgx'@;
put 'LCJjbHItZGctY2VsbCIpLExlKDIpLGhlKCksbGkoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0LGQ9UmUoKS4kaW1wbGljaXQ7ZmUoMiksd3IoZFthLmNvbEtleV0pfX1mdW5jdGlvbiBrOHQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJjbHItZGctcm93IiwxMyksRnQoImNs'@;
put 'aWNrIixmdW5jdGlvbigpe2NvbnN0IGg9d3QoYSkuJGltcGxpY2l0LGY9UmUoMikuJGltcGxpY2l0O3JldHVybiBDdChmLm9uUm93Q2xpY2s/Zi5vblJvd0NsaWNrKGgpOiIiKX0pLGd0KDEsQTh0LDMsMSwibmctY29udGFpbmVyIiw1KSxoZSgpfWlmKDImYyl7Y29uc3QgYT1SZSgyKS4kaW1w'@;
put 'bGljaXQ7ZmUoKSxNZSgibmdGb3JPZiIsYS5jb2xzVG9EaXNwbGF5KX19ZnVuY3Rpb24gRDh0KGMsbCl7aWYoMSZjJiYoZGUoMCwiY2xyLXRhYi1jb250ZW50IiwxMSkoMSwiY2xyLWRhdGFncmlkIiksZ3QoMixUOHQsMywxLCJuZy1jb250YWluZXIiLDUpKDMsazh0LDIsMSwiY2xyLWRnLXJv'@;
put 'dyIsMTIpLGhlKCkoKSksMiZjKXtjb25zdCBhPVJlKCkuJGltcGxpY2l0O2ZlKDIpLE1lKCJuZ0Zvck9mIixhLmNvbHNUb0Rpc3BsYXkpLGZlKCksTWUoIm5nRm9yT2YiLGEubWV0YSl9fWZ1bmN0aW9uIEk4dChjLGwpe2lmKDEmYyYmKGRlKDAsImNsci10YWIiKSgxLCJidXR0b24iLDkpLExl'@;
put 'KDIpLGhlKCksZ3QoMyxEOHQsNCwyLCJjbHItdGFiLWNvbnRlbnQiLDEwKSxoZSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQsZD1sLmluZGV4O2ZlKDIpLHdyKGEubmFtZSksZmUoKSxNZSgiY2xySWZBY3RpdmUiLDA9PT1kKX19bGV0IE82ZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9y'@;
put 'KCl7dGhpcy5vcGVuPSExLHRoaXMuZHNtZXRhPVtdLHRoaXMudmVyc2lvbnM9W10sdGhpcy5vcGVuQ2hhbmdlPW5ldyBLcix0aGlzLnJvd0NsaWNrZWQ9bmV3IEtyLHRoaXMuZHNtZXRhVGFicz1bXSx0aGlzLnZlcnNpb25zVGFicz1bXSx0aGlzLnRhYnM9W119bmdPbkluaXQoKXt9bmdPbkNo'@;
put 'YW5nZXMoYSl7YS5kc21ldGE/LmN1cnJlbnRWYWx1ZT8ubGVuZ3RoPjAmJih0aGlzLnBhcnNlRFNNZXRhKCksdGhpcy5wYXJzZVZlcnNpb25zKCksdGhpcy50YWJzPVsuLi50aGlzLmRzbWV0YVRhYnMsLi4udGhpcy52ZXJzaW9uc1RhYnNdKX1wYXJzZURTTWV0YSgpe3RoaXMuZHNtZXRhVGFi'@;
put 'cz1bXTtmb3IobGV0IGEgb2YgdGhpcy5kc21ldGEpe2xldCBkPXRoaXMuZHNtZXRhVGFicy5maW5kSW5kZXgoaD0+aC5uYW1lPT09YS5PRFNfVEFCTEUpO2Q8MCYmKGQ9dGhpcy5kc21ldGFUYWJzLnB1c2goe25hbWU6YS5PRFNfVEFCTEUsdGl0bGU6IkRhdGFzZXQgTWV0YSIsY29sc1RvRGlz'@;
put 'cGxheTpbe2NvbEtleToiTkFNRSJ9LHtjb2xLZXk6IlZBTFVFIn1dLG1ldGE6W10sb25Sb3dDbGljazpoPT57dGhpcy5yb3dDbGlja2VkLmVtaXQoaCl9fSktMSksdGhpcy5kc21ldGFUYWJzW2RdLm1ldGEucHVzaChhKX19cGFyc2VWZXJzaW9ucygpe3RoaXMudmVyc2lvbnNUYWJzPVt7bmFt'@;
put 'ZToiVkVSU0lPTlMiLHRpdGxlOiJEYXRhc2V0IE1ldGEiLGNvbHNUb0Rpc3BsYXk6W3tjb2xLZXk6IkxPQURfUkVGIn0se2NvbEtleToiVVNFUl9OTSJ9LHtjb2xLZXk6IlZFUlNJT05fRFRUTSJ9LHtjb2xLZXk6Ik5FV19SRUNPUkRTIixjb2xOYW1lOiJBREQifSx7Y29sS2V5OiJDSEFOR0VE'@;
put 'X1JFQ09SRFMiLGNvbE5hbWU6Ik1PRCJ9LHtjb2xLZXk6IkRFTEVURURfUkVDT1JEUyIsY29sTmFtZToiREVMIn0se2NvbEtleToiVkVSU0lPTl9ERVNDIn1dLG1ldGE6dGhpcy52ZXJzaW9ucyxvblJvd0NsaWNrOmE9Pnt0aGlzLnJvd0NsaWNrZWQuZW1pdChhKX19XX1vbk9wZW5DaGFuZ2Uo'@;
put 'YSl7dGhpcy5vcGVuPWEsdGhpcy5vcGVuQ2hhbmdlLmVtaXQoYSl9b25DbG9zZUNsaWNrKCl7dGhpcy5vbk9wZW5DaGFuZ2UoITEpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxl'@;
put 'Y3RvcnM6W1siYXBwLWRhdGFzZXQtaW5mbyJdXSxpbnB1dHM6e29wZW46Im9wZW4iLGRzbWV0YToiZHNtZXRhIix2ZXJzaW9uczoidmVyc2lvbnMifSxvdXRwdXRzOntvcGVuQ2hhbmdlOiJvcGVuQ2hhbmdlIixyb3dDbGlja2VkOiJyb3dDbGlja2VkIn0sZmVhdHVyZXM6W3dsXSxkZWNsczox'@;
put 'MCx2YXJzOjUsY29uc3RzOltbMywiY2xyTW9kYWxPcGVuQ2hhbmdlIiwiY2xyTW9kYWxPcGVuIiwiY2xyTW9kYWxTaXplIiwiY2xyTW9kYWxDbG9zYWJsZSJdLFsxLCJtb2RhbC10aXRsZSIsImNlbnRlciIsInRleHQtY2VudGVyIiwiY29sb3ItZGFya2VyLWdyYXkiXSxbMSwibW9kYWwtYm9k'@;
put 'eSJdLFsiY2xhc3MiLCJ0ZXh0LWNlbnRlciIsNCwibmdJZiJdLFsiY2xyTGF5b3V0IiwidmVydGljYWwiXSxbNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzEsIm1vZGFsLWZvb3RlciJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLWluZm8tb3V0bGluZSIsMywiY2xpY2si'@;
put 'XSxbMSwidGV4dC1jZW50ZXIiXSxbImNsclRhYkxpbmsiLCIiLCJpZCIsImxpbmsxIl0sWyJpZCIsImNvbnRlbnQxIiwiY2xhc3MiLCJkLWZsZXggY2xyLWp1c3RpZnktY29udGVudC1jZW50ZXIgdy0xMDAiLDQsImNscklmQWN0aXZlIl0sWyJpZCIsImNvbnRlbnQxIiwxLCJkLWZsZXgiLCJj'@;
put 'bHItanVzdGlmeS1jb250ZW50LWNlbnRlciIsInctMTAwIl0sWyJjbGFzcyIsImNsaWNrYWJsZS1yb3ciLDMsImNsaWNrIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMSwiY2xpY2thYmxlLXJvdyIsMywiY2xpY2siXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZCxoKXsxJmQmJihkZSgwLCJjbHItbW9k'@;
put 'YWwiLDApLEZ0KCJjbHJNb2RhbE9wZW5DaGFuZ2UiLGZ1bmN0aW9uKHYpe3JldHVybiBoLm9uT3BlbkNoYW5nZSh2KX0pLGRlKDEsImgzIiwxKSxMZSgyLCJEYXRhc2V0IE1ldGEiKSxoZSgpLGRlKDMsImRpdiIsMiksZ3QoNCxFOHQsMiwwLCJwIiwzKSxkZSg1LCJjbHItdGFicyIsNCksZ3Qo'@;
put 'NixJOHQsNCwyLCJjbHItdGFiIiw1KSxoZSgpKCksZGUoNywiZGl2Iiw2KSg4LCJidXR0b24iLDcpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gaC5vbkNsb3NlQ2xpY2soKX0pLExlKDksIiBDbG9zZSAiKSxoZSgpKCkoKSksMiZkJiYoTWUoImNsck1vZGFsT3BlbiIsaC5vcGVuKSgi'@;
put 'Y2xyTW9kYWxTaXplIiwieGwiKSgiY2xyTW9kYWxDbG9zYWJsZSIsITApLGZlKDQpLE1lKCJuZ0lmIixoLmRzbWV0YVRhYnMubGVuZ3RoPDEpLGZlKDIpLE1lKCJuZ0Zvck9mIixoLnRhYnMpKX0sZGVwZW5kZW5jaWVzOltucyxiYSxBbSxRZixSNyxFbSxTcCxMNyx0XyxUbSxrNyx4bSxENyxv'@;
put 'dSxLdSxIeSxfbSxDbSx4Nyx3bSx5bSxTN10sZW5jYXBzdWxhdGlvbjoyfSl9fXJldHVybiBjfSkoKTtjb25zdCBSOHQ9KCk9PlsibnVtZXJpYyIsdm9pZCAwXSxQNmU9KCk9PlsiYXV0b2NvbXBsZXRlIiwiYXV0b2NvbXBsZXRlLmN1c3RvbSJdLEplZT0oYyxsKT0+KHtjb2w6Yyxjb2xJbmRl'@;
put 'eDpsfSksTDh0PSgpPT5bdm9pZCAwXSxPOHQ9KCk9PlsiU09GVFNFTEVDVCIsIlNPRlRTRUxFQ1RfSE9PSyJdO2Z1bmN0aW9uIFA4dChjLGwpe2lmKDEmYyYmKGRlKDAsInNwYW4iLDE1KSxMZSgxKSxoZSgpKSwyJmMpe2NvbnN0IGE9UmUoMik7ZmUoKSx3cihhLmdlbmVyYXRlZFJlY29yZFVy'@;
put 'bCl9fWZ1bmN0aW9uIEY4dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImJ1dHRvbiIsMTYpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoUmUoMikuZ2VuZXJhdGVFZGl0UmVjb3JkVXJsKCkpfSksTGUoMSksaGUoKX1pZigyJmMpe2NvbnN0IGE9UmUoMik7'@;
put 'TWUoImRpc2FibGVkIixhLmdlbmVyYXRlRWRpdFJlY29yZFVybExvYWRpbmcpLGZlKCksRHIoIiAiLGEuZ2VuZXJhdGVkUmVjb3JkVXJsPyJjb3B5IHRvIGNsaXBib2FyZCI6YS5nZW5lcmF0ZUVkaXRSZWNvcmRVcmxMb2FkaW5nPyJHZW5lcmF0aW5nIHVybC4uLiI6IkxpbmsgdG8gdGhpcyBy'@;
put 'ZWNvcmQiLCIgIil9fWZ1bmN0aW9uIEg4dChjLGwpe2lmKDEmYyYmKHNpKDApLGd0KDEsUDh0LDIsMSwic3BhbiIsMTMpKDIsRjh0LDIsMiwiYnV0dG9uIiwxNCksbGkoKSksMiZjKXtjb25zdCBhPVJlKCk7ZmUoKSxNZSgibmdJZiIsIShudWxsIT1hLmN1cnJlbnRSZWNvcmQmJmEuY3VycmVu'@;
put 'dFJlY29yZC5ub0xpbmtPcHRpb24pKSxmZSgpLE1lKCJuZ0lmIiwhKG51bGwhPWEuY3VycmVudFJlY29yZCYmYS5jdXJyZW50UmVjb3JkLm5vTGlua09wdGlvbikpfX1mdW5jdGlvbiBOOHQoYyxsKXsxJmMmJihkZSgwLCJkaXYiLDE3KSgxLCJzcGFuIiwxOCksTGUoMiwiIExvYWRpbmcuLi4g'@;
put 'IiksaGUoKSgpKX1mdW5jdGlvbiBWOHQoYyxsKXsxJmMmJkd0KDAsImNsci1pY29uIiwzMSl9ZnVuY3Rpb24gQjh0KGMsbCl7MSZjJiYoZGUoMCwic3BhbiIsMzIpLExlKDEsIiBMb2FkaW5nLi4uICIpLGhlKCkpfWZ1bmN0aW9uIGo4dChjLGwpezEmYyYmR3QoMCwiY2xyLWljb24iLDMzKX1m'@;
put 'dW5jdGlvbiB6OHQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJjbHItaW5wdXQtY29udGFpbmVyIiwzNSkoMSwiaW5wdXQiLDM2KSxGdCgiZm9jdXNpbiIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1SZSgzKS5pbmRleDtyZXR1cm4gQ3QoUmUoMikub25SZWNvcmRJbnB1dEZv'@;
put 'Y3VzKGgsZikpfSkoInBhc3RlIixmdW5jdGlvbihoKXtyZXR1cm4gd3QoYSksQ3QoUmUoNSkucmVjb3JkSW5wdXRQYXN0ZShoKSl9KSgiaW5wdXQiLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9UmUoMykuJGltcGxpY2l0LHY9UmUoMik7cmV0dXJuIHYucmVjb3JkSW5wdXRDaGFuZ2UoaCxm'@;
put 'LmtleSksQ3Qodi5jdXJyZW50UmVjb3JkLm5vTGlua09wdGlvbj0hMCl9KSxnaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1SZSgzKS4kaW1wbGljaXQsdj1SZSgyKTtyZXR1cm4gbWkodi5jdXJyZW50UmVjb3JkW2Yua2V5XSxoKXx8KHYuY3VycmVudFJlY29y'@;
put 'ZFtmLmtleV09aCksQ3QoaCl9KSxoZSgpKCl9aWYoMiZjKXtjb25zdCBhPVJlKDMpLiRpbXBsaWNpdCxkPVJlKDIpO1RyKCJpbnZhbGlkLWRhdGEiLGQuY3VycmVudFJlY29yZEludmFsaWRDb2xzLmluY2x1ZGVzKGEua2V5KSksZmUoKSxwaSgibmdNb2RlbCIsZC5jdXJyZW50UmVjb3JkW2Eu'@;
put 'a2V5XSl9fWZ1bmN0aW9uIFU4dChjLGwpezEmYyYmRmwoMCl9ZnVuY3Rpb24gWjh0KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2IiksZ3QoMSxVOHQsMSwwLCJuZy1jb250YWluZXIiLDM3KSxoZSgpKSwyJmMpe2NvbnN0IGE9UmUoMyksZD1hLiRpbXBsaWNpdCxoPWEuaW5kZXg7UmUoMik7Y29u'@;
put 'c3QgZj1oYSgxNik7ZmUoKSxNZSgibmdUZW1wbGF0ZU91dGxldCIsZikoIm5nVGVtcGxhdGVPdXRsZXRDb250ZXh0IixscCgyLEplZSxkLGgpKX19ZnVuY3Rpb24gVzh0KGMsbCl7aWYoMSZjJiYoc2koMCksZ3QoMSx6OHQsMiwzLCJjbHItaW5wdXQtY29udGFpbmVyIiwzNCkoMixaOHQsMiw1'@;
put 'LCJkaXYiLDUpLGxpKCkpLDImYyl7bGV0IGEsZDtjb25zdCBoPVJlKDIpLiRpbXBsaWNpdCxmPVJlKDIpO2ZlKCksTWUoIm5nSWYiLEdzKDIsUjh0KS5pbmNsdWRlcyhudWxsPT1mLmN1cnJlbnRSZWNvcmRWYWxpZGF0b3J8fG51bGw9PShhPWYuY3VycmVudFJlY29yZFZhbGlkYXRvci5nZXRS'@;
put 'dWxlKGgua2V5KSk/bnVsbDphLmVkaXRvcikpLGZlKCksTWUoIm5nSWYiLEdzKDMsUDZlKS5pbmNsdWRlcyhudWxsPT1mLmN1cnJlbnRSZWNvcmRWYWxpZGF0b3J8fG51bGw9PShkPWYuY3VycmVudFJlY29yZFZhbGlkYXRvci5nZXRSdWxlKGgua2V5KSk/bnVsbDpkLmVkaXRvcikpfX1mdW5j'@;
put 'dGlvbiBZOHQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJjbHItdGV4dGFyZWEtY29udGFpbmVyIikoMSwidGV4dGFyZWEiLDM4LDEpLEZ0KCJmb2N1c2luIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPVJlKDMpLmluZGV4O3JldHVybiBDdChSZSgyKS5vblJlY29yZElucHV0'@;
put 'Rm9jdXMoaCxmKSl9KSgicGFzdGUiLGZ1bmN0aW9uKGgpe3JldHVybiB3dChhKSxDdChSZSg1KS5yZWNvcmRJbnB1dFBhc3RlKGgpKX0pKCJpbnB1dCIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1SZSgzKS4kaW1wbGljaXQ7cmV0dXJuIEN0KFJlKDIpLnJlY29yZElucHV0Q2hhbmdlKGgs'@;
put 'Zi5rZXkpKX0pLGdpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPVJlKDMpLiRpbXBsaWNpdCx2PVJlKDIpO3JldHVybiBtaSh2LmN1cnJlbnRSZWNvcmRbZi5rZXldLGgpfHwodi5jdXJyZW50UmVjb3JkW2Yua2V5XT1oKSxDdChoKX0pLExlKDMsIiAgICAgICAg'@;
put 'ICAgICAgICAgICIpLGhlKCksZGUoNCwiY2xyLWNvbnRyb2wtaGVscGVyIiksTGUoNSksaGUoKSgpfWlmKDImYyl7bGV0IGEsZCxoO2NvbnN0IGY9aGEoMiksdj1SZSgzKS4kaW1wbGljaXQsTT1SZSgyKTtmZSgpLFRyKCJpbnZhbGlkLWRhdGEiLE0uY3VycmVudFJlY29yZEludmFsaWRDb2xz'@;
put 'LmluY2x1ZGVzKHYua2V5KSkoIm5vdC1jaGFyIixudWxsPT1NLmN1cnJlbnRSZWNvcmRWYWxpZGF0b3J8fG51bGw9PShhPU0uY3VycmVudFJlY29yZFZhbGlkYXRvci5nZXRSdWxlKHYua2V5KSk/bnVsbDphLnR5cGUpLE1lKCJyb3dzIix2LnZhbHVlLmxlbmd0aD44MD82OjEpLHBpKCJuZ01v'@;
put 'ZGVsIixNLmN1cnJlbnRSZWNvcmRbdi5rZXldKSxNZSgibWF4TGVuZ3RoIixudWxsPT1NLmN1cnJlbnRSZWNvcmRWYWxpZGF0b3J8fG51bGw9PShkPU0uY3VycmVudFJlY29yZFZhbGlkYXRvci5nZXRSdWxlKHYua2V5KSk/bnVsbDpkLmxlbmd0aCksZmUoNCksVXUoIiIsZi52YWx1ZS5sZW5n'@;
put 'dGgsIiAvICIsbnVsbD09TS5jdXJyZW50UmVjb3JkVmFsaWRhdG9yfHxudWxsPT0oaD1NLmN1cnJlbnRSZWNvcmRWYWxpZGF0b3IuZ2V0UnVsZSh2LmtleSkpP251bGw6aC5sZW5ndGgsIiIpfX1mdW5jdGlvbiBHOHQoYyxsKXsxJmMmJkZsKDApfWZ1bmN0aW9uICQ4dChjLGwpe2lmKDEmYyYm'@;
put 'KGRlKDAsImRpdiIpLGd0KDEsRzh0LDEsMCwibmctY29udGFpbmVyIiwzNyksaGUoKSksMiZjKXtjb25zdCBhPVJlKDMpLGQ9YS4kaW1wbGljaXQsaD1hLmluZGV4O1JlKDIpO2NvbnN0IGY9aGEoMTYpO2ZlKCksTWUoIm5nVGVtcGxhdGVPdXRsZXQiLGYpKCJuZ1RlbXBsYXRlT3V0bGV0Q29u'@;
put 'dGV4dCIsbHAoMixKZWUsZCxoKSl9fWZ1bmN0aW9uIEs4dChjLGwpe2lmKDEmYyYmKHNpKDApLGd0KDEsWTh0LDYsOSwiY2xyLXRleHRhcmVhLWNvbnRhaW5lciIsNSkoMiwkOHQsMiw1LCJkaXYiLDUpLGxpKCkpLDImYyl7bGV0IGEsZDtjb25zdCBoPVJlKDIpLiRpbXBsaWNpdCxmPVJlKDIp'@;
put 'O2ZlKCksTWUoIm5nSWYiLEdzKDIsTDh0KS5pbmNsdWRlcyhudWxsPT1mLmN1cnJlbnRSZWNvcmRWYWxpZGF0b3J8fG51bGw9PShhPWYuY3VycmVudFJlY29yZFZhbGlkYXRvci5nZXRSdWxlKGgua2V5KSk/bnVsbDphLmVkaXRvcikpLGZlKCksTWUoIm5nSWYiLEdzKDMsUDZlKS5pbmNsdWRl'@;
put 'cyhudWxsPT1mLmN1cnJlbnRSZWNvcmRWYWxpZGF0b3J8fG51bGw9PShkPWYuY3VycmVudFJlY29yZFZhbGlkYXRvci5nZXRSdWxlKGgua2V5KSk/bnVsbDpkLmVkaXRvcikpfX1mdW5jdGlvbiBxOHQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJjbHItdGV4dGFyZWEtY29udGFp'@;
put 'bmVyIiwzOSkoMSwidGV4dGFyZWEiLDQwKSxGdCgicGFzdGUiLGZ1bmN0aW9uKGgpe3JldHVybiB3dChhKSxDdChSZSg0KS5yZWNvcmRJbnB1dFBhc3RlKGgpKX0pKCJpbnB1dCIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1SZSgyKS4kaW1wbGljaXQ7cmV0dXJuIEN0KFJlKDIpLnJlY29y'@;
put 'ZElucHV0Q2hhbmdlKGgsZi5rZXkpKX0pLGdpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPVJlKDIpLiRpbXBsaWNpdCx2PVJlKDIpO3JldHVybiBtaSh2LmN1cnJlbnRSZWNvcmRbZi5rZXldLGgpfHwodi5jdXJyZW50UmVjb3JkW2Yua2V5XT1oKSxDdChoKX0p'@;
put 'LGhlKCksZGUoMiwiY2xyLWNvbnRyb2wtaGVscGVyIiksTGUoMywiSEg6bW06c3MiKSxoZSgpKCl9aWYoMiZjKXtsZXQgYTtjb25zdCBkPVJlKDIpLiRpbXBsaWNpdCxoPVJlKDIpO2ZlKCksVHIoImludmFsaWQtZGF0YSIsaC5jdXJyZW50UmVjb3JkSW52YWxpZENvbHMuaW5jbHVkZXMoZC5r'@;
put 'ZXkpKSgibm90LWNoYXIiLG51bGw9PWguY3VycmVudFJlY29yZFZhbGlkYXRvcnx8bnVsbD09KGE9aC5jdXJyZW50UmVjb3JkVmFsaWRhdG9yLmdldFJ1bGUoZC5rZXkpKT9udWxsOmEudHlwZSksTWUoInJvd3MiLGQudmFsdWUubGVuZ3RoPjgwPzY6MSkscGkoIm5nTW9kZWwiLGguY3VycmVu'@;
put 'dFJlY29yZFtkLmtleV0pfX1mdW5jdGlvbiBYOHQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJkaXYiLDM5KSgxLCJ0ZXh0YXJlYSIsNDEpLEZ0KCJwYXN0ZSIsZnVuY3Rpb24oaCl7cmV0dXJuIHd0KGEpLEN0KFJlKDQpLnJlY29yZElucHV0UGFzdGUoaCkpfSkoImlucHV0Iixm'@;
put 'dW5jdGlvbihoKXt3dChhKTtjb25zdCBmPVJlKDIpLiRpbXBsaWNpdDtyZXR1cm4gQ3QoUmUoMikucmVjb3JkSW5wdXRDaGFuZ2UoaCxmLmtleSkpfSksZ2koIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9UmUoMikuJGltcGxpY2l0LHY9UmUoMik7cmV0dXJuIG1p'@;
put 'KHYuY3VycmVudFJlY29yZFtmLmtleV0saCl8fCh2LmN1cnJlbnRSZWNvcmRbZi5rZXldPWgpLEN0KGgpfSksaGUoKSxkZSgyLCJjbHItZGF0ZS1jb250YWluZXIiLDQyKSgzLCJpbnB1dCIsNDMpLEZ0KCJjbHJEYXRlQ2hhbmdlIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPVJlKDIpLiRp'@;
put 'bXBsaWNpdDtyZXR1cm4gQ3QoUmUoMikucmVjb3JkRGF0ZUNoYW5nZShoLGYua2V5KSl9KSxoZSgpKCkoKX1pZigyJmMpe2NvbnN0IGE9UmUoMikuJGltcGxpY2l0LGQ9UmUoMik7ZmUoKSxUcigiaW52YWxpZC1kYXRhIixkLmN1cnJlbnRSZWNvcmRJbnZhbGlkQ29scy5pbmNsdWRlcyhhLmtl'@;
put 'eSkpLHBpKCJuZ01vZGVsIixkLmN1cnJlbnRSZWNvcmRbYS5rZXldKX19ZnVuY3Rpb24gSjh0KGMsbCl7MSZjJiZGbCgwKX1mdW5jdGlvbiBROHQoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiKSxndCgxLEo4dCwxLDAsIm5nLWNvbnRhaW5lciIsMzcpLGhlKCkpLDImYyl7Y29uc3QgYT1SZSgy'@;
put 'KSxkPWEuJGltcGxpY2l0LGg9YS5pbmRleDtSZSgyKTtjb25zdCBmPWhhKDE2KTtmZSgpLE1lKCJuZ1RlbXBsYXRlT3V0bGV0IixmKSgibmdUZW1wbGF0ZU91dGxldENvbnRleHQiLGxwKDIsSmVlLGQsaCkpfX1mdW5jdGlvbiBlN3QoYyxsKXtpZigxJmMmJihzaSgwKSxkZSgxLCJkaXYiLDIw'@;
put 'KSgyLCJkaXYiLDIxKSgzLCJwIiwyMiksTGUoNCksZ3QoNSxWOHQsMSwwLCJjbHItaWNvbiIsMjMpLGhlKCksZGUoNiwicCIsMjQpLExlKDcpLGhlKCkoKSxkZSg4LCJkaXYiLDI1KSxndCg5LEI4dCwyLDAsInNwYW4iLDI2KSgxMCxqOHQsMSwwLCJjbHItaWNvbiIsMjcpKDExLFc4dCwzLDQs'@;
put 'Im5nLWNvbnRhaW5lciIsMjgpKDEyLEs4dCwzLDQsIm5nLWNvbnRhaW5lciIsMjgpKDEzLHE4dCw0LDYsImNsci10ZXh0YXJlYS1jb250YWluZXIiLDI5KSgxNCxYOHQsNCwzLCJkaXYiLDI5KSgxNSxROHQsMiw1LCJkaXYiLDI4KSxoZSgpKCksR3QoMTYsImhyIiwzMCksbGkoKSksMiZjKXts'@;
put 'ZXQgYSxkO2NvbnN0IGg9UmUoKSxmPWguJGltcGxpY2l0LHY9aC5pbmRleCxNPVJlKDIpO2ZlKDQpLERyKCIgIixmLmtleSwiICIpLGZlKCksTWUoIm5nSWYiLE0uaXNDb2xQayhmLmtleSkpLGZlKDIpLERyKCIgIixudWxsPT1NLmN1cnJlbnRSZWNvcmRWYWxpZGF0b3J8fG51bGw9PShhPU0u'@;
put 'Y3VycmVudFJlY29yZFZhbGlkYXRvci5nZXRSdWxlKGYua2V5KSk/bnVsbDphLmRlc2MsIiAiKSxmZSgpLE1lKCJuZ1N3aXRjaCIsbnVsbD09TS5jdXJyZW50UmVjb3JkVmFsaWRhdG9yfHxudWxsPT0oZD1NLmN1cnJlbnRSZWNvcmRWYWxpZGF0b3IuZ2V0UnVsZShmLmtleSkpP251bGw6ZC50'@;
put 'eXBlKSxmZSgpLE1lKCJuZ0lmIixNLmN1cnJlbnRSZWNvcmRMb2FkaW5ncy5pbmNsdWRlcyh2KSksZmUoKSxNZSgibmdJZiIsTS5jdXJyZW50UmVjb3JkRXJyb3JzLmluY2x1ZGVzKHYpKSxmZSgpLE1lKCJuZ1N3aXRjaENhc2UiLCJudW1lcmljIiksZmUoKSxNZSgibmdTd2l0Y2hDYXNlIix2'@;
put 'b2lkIDApLGZlKCksTWUoIm5nU3dpdGNoQ2FzZSIsInRpbWUiKSxmZSgpLE1lKCJuZ1N3aXRjaENhc2UiLCJkYXRlIiksZmUoKSxNZSgibmdTd2l0Y2hDYXNlIiwiYXV0b2NvbXBsZXRlIil9fWZ1bmN0aW9uIHQ3dChjLGwpe2lmKDEmYyYmKHNpKDApLGd0KDEsZTd0LDE3LDExLCJuZy1jb250'@;
put 'YWluZXIiLDUpLGxpKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtmZSgpLE1lKCJuZ0lmIiwiQWN0aW9uIiE9PWEua2V5JiYiX19fX19ERUxFVEVfX1RISVNfX1JFQ09SRF9fX19fIiE9PWEua2V5JiYibm9MaW5rT3B0aW9uIiE9PWEua2V5KX19ZnVuY3Rpb24gbjd0KGMsbCl7aWYoMSZj'@;
put 'JiYoc2koMCksZ3QoMSx0N3QsMiwxLCJuZy1jb250YWluZXIiLDE5KSxlbCgyLCJrZXl2YWx1ZSIpLGxpKCkpLDImYyl7Y29uc3QgYT1SZSgpO2ZlKCksTWUoIm5nRm9yT2YiLHo4KDIsMixhLmN1cnJlbnRSZWNvcmQsYS5vcmlnaW5hbE9yZGVyKSkoIm5nRm9yVHJhY2tCeSIsYS50cmFja0J5'@;
put 'Rm4pfX1mdW5jdGlvbiByN3QoYyxsKXsxJmMmJihkZSgwLCJjbHItYWxlcnQiLDQ0KSgxLCJjbHItYWxlcnQtaXRlbSIpKDIsInNwYW4iLDQ1KSxMZSgzLCIgRGF0YSBWYWxpZGF0aW9uIEVycm9ycyAtIFBsZWFzZSBSZXZpZXcgIiksaGUoKSgpKCkpLDImYyYmKF9kKCJ2aXNpYmlsaXR5IixS'@;
put 'ZSgpLmN1cnJlbnRSZWNvcmRJbnZhbGlkQ29scy5sZW5ndGg+MD8idmlzaWJsZSI6ImhpZGRlbiIpLE1lKCJjbHJBbGVydENsb3NhYmxlIiwhMSkoImNsckFsZXJ0VHlwZSIsImRhbmdlciIpKX1mdW5jdGlvbiBpN3QoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJkaXYiLDQ2KSgx'@;
put 'LCJidXR0b24iLDQ3KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KFJlKCkub25QcmV2aW91c1JlY29yZENsaWNrKCkpfSksR3QoMiwiY2xyLWljb24iLDQ4KSxoZSgpLGRlKDMsInAiKSxMZSg0LCIgQ3VycmVudCByb3c6ICIpLGRlKDUsInN0cm9uZyIpLExlKDYpLGhl'@;
put 'KCkoKSxkZSg3LCJidXR0b24iLDQ3KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KFJlKCkub25OZXh0UmVjb3JkQ2xpY2soKSl9KSxHdCg4LCJjbHItaWNvbiIsNDkpLGhlKCkoKX1pZigyJmMpe2NvbnN0IGE9UmUoKTtmZSgpLE1lKCJkaXNhYmxlZCIsYS5jdXJyZW50'@;
put 'UmVjb3JkSW52YWxpZENvbHMubGVuZ3RoPjApLGZlKDUpLERyKCIgIixhLmN1cnJlbnRSZWNvcmRJbmRleCsxLCIgIiksZmUoKSxNZSgiZGlzYWJsZWQiLGEuY3VycmVudFJlY29yZEludmFsaWRDb2xzLmxlbmd0aD4wKX19ZnVuY3Rpb24gYTd0KGMsbCl7aWYoMSZjJiYoZGUoMCwib3B0aW9u'@;
put 'Iiw1MyksTGUoMSksaGUoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O01lKCJuZ1ZhbHVlIixhKSxmZSgpLERyKCIgIixhLCIgIil9fWZ1bmN0aW9uIG83dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImRpdiIpKDEsImFwcC1zb2Z0LXNlbGVjdCIsNTEpLEZ0KCJmb2N1c2lu'@;
put 'IixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPVJlKCkuY29sSW5kZXg7cmV0dXJuIEN0KFJlKCkub25SZWNvcmRJbnB1dEZvY3VzKGgsZikpfSksZ2koInZhbHVlQ2hhbmdlIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPVJlKCkuY29sLHY9UmUoKTtyZXR1cm4gbWkodi5jdXJyZW50UmVj'@;
put 'b3JkW2Yua2V5XSxoKXx8KHYuY3VycmVudFJlY29yZFtmLmtleV09aCksQ3QoaCl9KSxGdCgib25JbnB1dEV2ZW50IixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9UmUoKSxmPWguY29sLHY9aC5jb2xJbmRleDtyZXR1cm4gQ3QoUmUoKS5vblJlY29yZERyb3Bkb3duQ2hhbmdlKGYua2V5LHYp'@;
put 'KX0pLGd0KDIsYTd0LDIsMiwib3B0aW9uIiw1MiksaGUoKSgpfWlmKDImYyl7bGV0IGE7Y29uc3QgZD1SZSgpLmNvbCxoPVJlKCk7ZmUoKSxwaSgidmFsdWUiLGguY3VycmVudFJlY29yZFtkLmtleV0pLE1lKCJpbnB1dElkIixkLmtleSksZmUoKSxNZSgibmdGb3JPZiIsbnVsbD09aC5jdXJy'@;
put 'ZW50UmVjb3JkVmFsaWRhdG9yfHxudWxsPT0oYT1oLmN1cnJlbnRSZWNvcmRWYWxpZGF0b3IuZ2V0UnVsZShkLmtleSkpP251bGw6YS5zb3VyY2UpfX1mdW5jdGlvbiBzN3QoYyxsKXtpZigxJmMmJihkZSgwLCJvcHRpb24iLDU2KSxMZSgxKSxoZSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGlj'@;
put 'aXQ7TWUoInZhbHVlIixhKSxmZSgpLERyKCIgIixhLCIgIil9fWZ1bmN0aW9uIGw3dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsInNlbGVjdCIsNTQpLEZ0KCJmb2N1c2luIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPVJlKCkuY29sSW5kZXg7cmV0dXJuIEN0KFJlKCkub25S'@;
put 'ZWNvcmRJbnB1dEZvY3VzKGgsZikpfSksZ2koIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9UmUoKS5jb2wsdj1SZSgpO3JldHVybiBtaSh2LmN1cnJlbnRSZWNvcmRbZi5rZXldLGgpfHwodi5jdXJyZW50UmVjb3JkW2Yua2V5XT1oKSxDdChoKX0pLGd0KDEsczd0'@;
put 'LDIsMiwib3B0aW9uIiw1NSksaGUoKX1pZigyJmMpe2xldCBhO2NvbnN0IGQ9UmUoKS5jb2wsaD1SZSgpO3BpKCJuZ01vZGVsIixoLmN1cnJlbnRSZWNvcmRbZC5rZXldKSxmZSgpLE1lKCJuZ0Zvck9mIixudWxsPT1oLmN1cnJlbnRSZWNvcmRWYWxpZGF0b3J8fG51bGw9PShhPWguY3VycmVu'@;
put 'dFJlY29yZFZhbGlkYXRvci5nZXRSdWxlKGQua2V5KSk/bnVsbDphLnNvdXJjZSl9fWZ1bmN0aW9uIGM3dChjLGwpe2lmKDEmYyYmZ3QoMCxvN3QsMywzLCJkaXYiLDUwKSgxLGw3dCwyLDIsIm5nLXRlbXBsYXRlIixudWxsLDIsSWMpLDImYyl7Y29uc3QgYT1sLmNvbCxkPWhhKDIpLGg9UmUo'@;
put 'KTtNZSgibmdJZiIsbnVsbD09aC5jdXJyZW50UmVjb3JkVmFsaWRhdG9yP251bGw6aC5jdXJyZW50UmVjb3JkVmFsaWRhdG9yLmhhc0RxUnVsZXMoYS5rZXksR3MoMixPOHQpKSkoIm5nSWZFbHNlIixkKX19bGV0IHU3dD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCl7dGhpcy5zYXNT'@;
put 'dG9yZVNlcnZpY2U9YSx0aGlzLmhlbHBlclNlcnZpY2U9ZCx0aGlzLnJlY29yZEFjdGlvbj1udWxsLHRoaXMuZmlsdGVyPSExLHRoaXMuc3VibWl0TG9hZGluZz0hMSx0aGlzLmhlYWRlclBrcz1bXSx0aGlzLmNlbGxWYWxpZGF0aW9uPVtdLHRoaXMuY3VycmVudFJlY29yZEluZGV4PS0xLHRo'@;
put 'aXMuY3VycmVudFJlY29yZExvYWRpbmdzPVtdLHRoaXMuY3VycmVudFJlY29yZEVycm9ycz1bXSx0aGlzLm9uUmVjb3JkQ2hhbmdlPW5ldyBLcix0aGlzLm9uUmVjb3JkSW5wdXRGb2N1c2VkPW5ldyBLcix0aGlzLm9uUmVjb3JkRHJvcGRvd25DaGFuZ2VkPW5ldyBLcix0aGlzLm9uUmVjb3Jk'@;
put 'RWRpdENsb3NlPW5ldyBLcix0aGlzLm9uUmVjb3JkRWRpdENvbmZpcm09bmV3IEtyLHRoaXMub25OZXh0UmVjb3JkPW5ldyBLcix0aGlzLm9uUHJldmlvdXNSZWNvcmQ9bmV3IEtyLHRoaXMuY3VycmVudFJlY29yZEludmFsaWRDb2xzPVtdLHRoaXMuZ2VuZXJhdGVFZGl0UmVjb3JkVXJsTG9h'@;
put 'ZGluZz0hMSx0aGlzLmdlbmVyYXRlZFJlY29yZFVybD1udWxsLHRoaXMuYWRkUmVjb3JkVXJsPW51bGwsdGhpcy5yZWNvcmROZXdPclBrTW9kaWZpZWQ9ITEsdGhpcy5hZGRSZWNvcmRMb2FkaW5nPSExLHRoaXMub3JpZ2luYWxPcmRlcj0oaCxmKT0+MH1uZ09uSW5pdCgpe312YWxpZGF0ZVJl'@;
put 'Y29yZENvbChhLGQpe3ZhciBoPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe3JldHVybiBuZXcgUHJvbWlzZSgoZix2KT0+e2guY3VycmVudFJlY29yZFZhbGlkYXRvcj8uZXhlY3V0ZUhvdFZhbGlkYXRvcihhLGQsTT0+e2YoTSl9KX0pfSkoKX1yZWNvcmREYXRlQ2hhbmdlKGEsZCl7bGV0'@;
put 'IGg9dGhpcy5jdXJyZW50UmVjb3JkVmFsaWRhdG9yPy5nZXRSdWxlKGQpLGY9aD9oLmRhdGVGb3JtYXQ6IiI7dGhpcy5jdXJyZW50UmVjb3JkJiYodGhpcy5jdXJyZW50UmVjb3JkW2RdPUlvZSgpKGEpLmZvcm1hdChmKSl9Y29uZmlybVJlY29yZEVkaXQoKXt0aGlzLmN1cnJlbnRSZWNvcmRJ'@;
put 'bnZhbGlkQ29scy5sZW5ndGg8MSYmdGhpcy5vblJlY29yZENoYW5nZS5lbWl0KHRoaXMuY3VycmVudFJlY29yZCl9Y2xvc2VSZWNvcmRFZGl0KCl7dGhpcy5vblJlY29yZEVkaXRDbG9zZS5lbWl0KCl9b25SZWNvcmREcm9wZG93bkNoYW5nZShhLGQpe3RoaXMub25SZWNvcmREcm9wZG93bkNo'@;
put 'YW5nZWQuZW1pdCh7Y29sTmFtZTphLGNvbDpkfSl9b25SZWNvcmRJbnB1dEZvY3VzKGEsZCl7dGhpcy5vblJlY29yZElucHV0Rm9jdXNlZC5lbWl0KHtldmVudDphLGNvbE5hbWU6ZH0pfXJlY29yZElucHV0UGFzdGUoYSl7c2V0VGltZW91dCgoKT0+e2EudGFyZ2V0LnZhbHVlPWEudGFyZ2V0'@;
put 'LnZhbHVlLnJlcGxhY2UoL1xzKyQvLCIiKX0sMCl9cmVjb3JkSW5wdXRDaGFuZ2UoYSxkKXt2YXIgaD10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXtjb25zdCBmPWguY3VycmVudFJlY29yZFZhbGlkYXRvcj8uZ2V0UnVsZShkKSx2PWEudGFyZ2V0LnZhbHVlO2guaGVscGVyU2VydmljZS5k'@;
put 'ZWJvdW5jZUNhbGwoMzAwLCgpPT57aC52YWxpZGF0ZVJlY29yZENvbChmLHYpLnRoZW4oTT0+e2NvbnN0IEQ9aC5jdXJyZW50UmVjb3JkSW52YWxpZENvbHMuaW5kZXhPZihkKTtNP0Q+LTEmJmguY3VycmVudFJlY29yZEludmFsaWRDb2xzLnNwbGljZShELDEpOkQ8MCYmaC5jdXJyZW50UmVj'@;
put 'b3JkSW52YWxpZENvbHMucHVzaChkKX0pfSl9KSgpfW9uTmV4dFJlY29yZENsaWNrKCl7dGhpcy5vbk5leHRSZWNvcmQuZW1pdCgpfW9uUHJldmlvdXNSZWNvcmRDbGljaygpe3RoaXMub25QcmV2aW91c1JlY29yZC5lbWl0KCl9Y29weVRvQ2xpcChhKXtjb25zdCBkPWRvY3VtZW50LnF1ZXJ5'@;
put 'U2VsZWN0b3IoIiNyZWNvcmRNb2RhbFJlZiAubW9kYWwtdGl0bGUiKTtpZihkKXtjb25zdCBoPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRleHRhcmVhIik7aC5zdHlsZS5wb3NpdGlvbj0iZml4ZWQiLGguc3R5bGUubGVmdD0iMCIsaC5zdHlsZS50b3A9IjAiLGguc3R5bGUub3BhY2l0eT0i'@;
put 'MCIsaC5zdHlsZS56SW5kZXg9IjUwMDAiLGgudmFsdWU9YSxkLmFwcGVuZENoaWxkKGgpLGguZm9jdXMoKSxoLnNlbGVjdCgpLGRvY3VtZW50LmV4ZWNDb21tYW5kKCJjb3B5IiksZC5yZW1vdmVDaGlsZChoKSx0aGlzLmdlbmVyYXRlZFJlY29yZFVybD1hfX1nZW5lcmF0ZUVkaXRSZWNvcmRV'@;
put 'cmwoKXt2YXIgYT10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXtpZihhLmdlbmVyYXRlZFJlY29yZFVybClhLmNvcHlUb0NsaXAoYS5nZW5lcmF0ZWRSZWNvcmRVcmwpO2Vsc2V7YS5nZW5lcmF0ZUVkaXRSZWNvcmRVcmxMb2FkaW5nPSEwO2NvbnN0IGQ9W107YS5oZWFkZXJQa3MuZm9yRWFj'@;
put 'aChoPT57bGV0IGY9IkMiLHY9IiI7Zm9yKGxldCBNPTA7TTxhLmNlbGxWYWxpZGF0aW9uLmxlbmd0aDtNKyspe2NvbnN0IEQ9YS5jZWxsVmFsaWRhdGlvbltNXTtpZihELmRhdGE9PT1oKXsoIm51bWVyaWMiPT09RC50eXBlfHwiZGF0ZSI9PT1ELnR5cGV8fCJ0aW1lIj09PUQudHlwZSkmJihm'@;
put 'PSJOIik7YnJlYWt9fXY9IkMiPT09Zj9gJyR7YS5jdXJyZW50UmVjb3JkW2hdfSdgOmEuY3VycmVudFJlY29yZFtoXS50b1N0cmluZygpLGQucHVzaCh7R1JPVVBfTE9HSUM6IkFORCIsU1VCR1JPVVBfTE9HSUM6IkFORCIsU1VCR1JPVVBfSUQ6MCxWQVJJQUJMRV9OTTpoLE9QRVJBVE9SX05N'@;
put 'OiI9IixSQVdfVkFMVUU6dn0pfSksZC5sZW5ndGg+MCYmYS5saWJkcyYmKHlpZWxkIGEuc2FzU3RvcmVTZXJ2aWNlLnNhdmVRdWVyeShhLmxpYmRzLGQpLnRoZW4oaD0+e2EucXVlcnlGaWx0ZXI9e2lkOmgucmVzdWx0WzBdLkZJTFRFUl9SSyx0YWJsZTpoLnJlc3VsdFswXS5GSUxURVJfVEFC'@;
put 'TEV9O2NvbnN0IE09bG9jYXRpb24uaHJlZi5zcGxpdCgiIyIpWzBdKyIjL2VkaXRvci9lZGl0LXJlY29yZC8iK2EucXVlcnlGaWx0ZXIudGFibGUrIi8iK2EucXVlcnlGaWx0ZXIuaWQ7YS5jb3B5VG9DbGlwKE0pLGEuZ2VuZXJhdGVFZGl0UmVjb3JkVXJsTG9hZGluZz0hMSxhLmZpbHRlcj0h'@;
put 'MX0pLmNhdGNoKGg9PnthLnN1Ym1pdExvYWRpbmc9ITF9KSl9fSkoKX1pc0NvbFBrKGEpe3JldHVybiB0aGlzLmhlYWRlclBrcy5pbmRleE9mKGEpPi0xfXRyYWNrQnlGbihhLGQpe3JldHVybiBhfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKEdl'@;
put 'KGtoKSxHZShTdSkpfX1zdGF0aWN7dGhpcy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siYXBwLWVkaXQtcmVjb3JkIl1dLGlucHV0czp7Y3VycmVudFJlY29yZDoiY3VycmVudFJlY29yZCIscmVjb3JkQWN0aW9uOiJyZWNvcmRBY3Rpb24iLGxpYmRzOiJsaWJkcyIscXVlcnlG'@;
put 'aWx0ZXI6InF1ZXJ5RmlsdGVyIixmaWx0ZXI6ImZpbHRlciIsc3VibWl0TG9hZGluZzoic3VibWl0TG9hZGluZyIsaGVhZGVyUGtzOiJoZWFkZXJQa3MiLGNlbGxWYWxpZGF0aW9uOiJjZWxsVmFsaWRhdGlvbiIsY3VycmVudFJlY29yZEluZGV4OiJjdXJyZW50UmVjb3JkSW5kZXgiLGN1cnJl'@;
put 'bnRSZWNvcmRMb2FkaW5nczoiY3VycmVudFJlY29yZExvYWRpbmdzIixjdXJyZW50UmVjb3JkRXJyb3JzOiJjdXJyZW50UmVjb3JkRXJyb3JzIixjdXJyZW50UmVjb3JkVmFsaWRhdG9yOiJjdXJyZW50UmVjb3JkVmFsaWRhdG9yIn0sb3V0cHV0czp7b25SZWNvcmRDaGFuZ2U6Im9uUmVjb3Jk'@;
put 'Q2hhbmdlIixvblJlY29yZElucHV0Rm9jdXNlZDoib25SZWNvcmRJbnB1dEZvY3VzZWQiLG9uUmVjb3JkRHJvcGRvd25DaGFuZ2VkOiJvblJlY29yZERyb3Bkb3duQ2hhbmdlZCIsb25SZWNvcmRFZGl0Q2xvc2U6Im9uUmVjb3JkRWRpdENsb3NlIixvblJlY29yZEVkaXRDb25maXJtOiJvblJl'@;
put 'Y29yZEVkaXRDb25maXJtIixvbk5leHRSZWNvcmQ6Im9uTmV4dFJlY29yZCIsb25QcmV2aW91c1JlY29yZDoib25QcmV2aW91c1JlY29yZCJ9LGRlY2xzOjE3LHZhcnM6MTEsY29uc3RzOltbImF1dG9jb21wbGV0ZSIsIiJdLFsiY2hhclRleHRhcmVhIiwiIl0sWyJvdGhlcl90aGFuX3NvZnRf'@;
put 'c2VsZWN0IiwiIl0sWyJpZCIsInJlY29yZE1vZGFsUmVmIiwxLCJyZWNvcmQtZWRpdC1tb2RhbCIsInBvc2l0aW9uLXJlbGF0aXZlIiwzLCJjbHJNb2RhbE9wZW4iLCJjbHJNb2RhbENsb3NhYmxlIl0sWzEsIm1vZGFsLXRpdGxlIl0sWzQsIm5nSWYiXSxbMSwibW9kYWwtYm9keSJdLFsiY2xh'@;
put 'c3MiLCJkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXIgdy0xMDAgcHktMTAiLDQsIm5nSWYiXSxbMSwibW9kYWwtZm9vdGVyIiwicC0wIiwiY2xyLWdhcC01IiwiY2xyLWdhcC1tZC0wIiwiY2xyLWZsZXgtY29sdW1uIiwiY2xyLWZsZXgtbWQtcm93Il0s'@;
put 'WyJjbGFzcyIsInZhbGlkYXRpb24taW5mby1hbGVydCIsMywidmlzaWJpbGl0eSIsImNsckFsZXJ0Q2xvc2FibGUiLCJjbHJBbGVydFR5cGUiLDQsIm5nSWYiXSxbImNsYXNzIiwicHJldi1uZXh0Iiw0LCJuZ0lmIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tb3V0bGluZSIsImZv'@;
put 'Y3VzYWJsZSIsIm1yLTVpIiwzLCJjbGljayJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLXByaW1hcnkiLCJmb2N1c2FibGUiLDMsImNsaWNrIiwiZGlzYWJsZWQiXSxbImNsYXNzIiwicG9zaXRpb24tYWJzb2x1dGUgZ2VuZXJhdGUtcmVjb3JkLXVybCIsNCwibmdJZiJdLFsiY2xh'@;
put 'c3MiLCJidG4gYnRuLWxpbmsgZ2VuZXJhdGUtcmVjb3JkLXVybC1idXR0b24gcG9zaXRpb24tYWJzb2x1dGUiLDMsImRpc2FibGVkIiwiY2xpY2siLDQsIm5nSWYiXSxbMSwicG9zaXRpb24tYWJzb2x1dGUiLCJnZW5lcmF0ZS1yZWNvcmQtdXJsIl0sWzEsImJ0biIsImJ0bi1saW5rIiwiZ2Vu'@;
put 'ZXJhdGUtcmVjb3JkLXVybC1idXR0b24iLCJwb3NpdGlvbi1hYnNvbHV0ZSIsMywiY2xpY2siLCJkaXNhYmxlZCJdLFsxLCJkLWZsZXgiLCJqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIiwiYWxpZ24taXRlbXMtY2VudGVyIiwidy0xMDAiLCJweS0xMCJdLFsxLCJzcGlubmVyIl0sWzQsIm5nRm9y'@;
put 'IiwibmdGb3JPZiIsIm5nRm9yVHJhY2tCeSJdLFsxLCJjb2x1bW4tZW50cnkiLCJjbHItZmxleC1jb2x1bW4iLCJjbHItZmxleC1tZC1yb3ciXSxbMSwibmFtZS1pbnB1dC1yb3ciXSxbMSwiZm9udC13ZWlnaHQtYm9sZCJdLFsic2hhcGUiLCJrZXkiLDQsIm5nSWYiXSxbMSwiY2VsbC1kZXNj'@;
put 'Il0sWzEsImlucHV0cy13cmFwcGVyIiwicG9zaXRpb24tcmVsYXRpdmUiLDMsIm5nU3dpdGNoIl0sWyJjbGFzcyIsInNwaW5uZXIgc3Bpbm5lci1pbmxpbmUgZmxleC11bnNldCBwb3NpdGlvbi1hYnNvbHV0ZSBlbnRyeS1pbnB1dC1sZWZ0LW9mZnNldCIsNCwibmdJZiJdLFsiY2xhc3MiLCJm'@;
put 'bGV4LXVuc2V0IHBvc2l0aW9uLWFic29sdXRlIGVudHJ5LWlucHV0LWxlZnQtb2Zmc2V0Iiwic2hhcGUiLCJlcnJvci1zdGFuZGFyZCIsInN0YXR1cyIsIndhcm5pbmciLDQsIm5nSWYiXSxbNCwibmdTd2l0Y2hDYXNlIl0sWyJjbGFzcyIsImRhdGUtZmllbGQiLDQsIm5nU3dpdGNoQ2FzZSJd'@;
put 'LFsxLCJtdC0xMCJdLFsic2hhcGUiLCJrZXkiXSxbMSwic3Bpbm5lciIsInNwaW5uZXItaW5saW5lIiwiZmxleC11bnNldCIsInBvc2l0aW9uLWFic29sdXRlIiwiZW50cnktaW5wdXQtbGVmdC1vZmZzZXQiXSxbInNoYXBlIiwiZXJyb3Itc3RhbmRhcmQiLCJzdGF0dXMiLCJ3YXJuaW5nIiwx'@;
put 'LCJmbGV4LXVuc2V0IiwicG9zaXRpb24tYWJzb2x1dGUiLCJlbnRyeS1pbnB1dC1sZWZ0LW9mZnNldCJdLFsiY2xhc3MiLCJudW1lcmljLWlucHV0IiwzLCJpbnZhbGlkLWRhdGEiLDQsIm5nSWYiXSxbMSwibnVtZXJpYy1pbnB1dCJdLFsiY2xySW5wdXQiLCIiLCJ0eXBlIiwidGV4dCIsMSwi'@;
put 'bm90LWNoYXIiLDMsImZvY3VzaW4iLCJwYXN0ZSIsImlucHV0IiwibmdNb2RlbENoYW5nZSIsIm5nTW9kZWwiXSxbNCwibmdUZW1wbGF0ZU91dGxldCIsIm5nVGVtcGxhdGVPdXRsZXRDb250ZXh0Il0sWyJjbHJUZXh0YXJlYSIsIiIsMywiZm9jdXNpbiIsInBhc3RlIiwiaW5wdXQiLCJuZ01v'@;
put 'ZGVsQ2hhbmdlIiwicm93cyIsIm5nTW9kZWwiLCJtYXhMZW5ndGgiXSxbMSwiZGF0ZS1maWVsZCJdLFsiY2xyVGV4dGFyZWEiLCIiLDMsInBhc3RlIiwiaW5wdXQiLCJuZ01vZGVsQ2hhbmdlIiwicm93cyIsIm5nTW9kZWwiXSxbImNsclRleHRhcmVhIiwiIiwicm93cyIsIjEiLCJjb2xzIiwi'@;
put 'YXV0byIsMSwibm90LWNoYXIiLDMsInBhc3RlIiwiaW5wdXQiLCJuZ01vZGVsQ2hhbmdlIiwibmdNb2RlbCJdLFsxLCJkYXRlLXBpY2tlciJdLFsidHlwZSIsImRhdGUiLCJuYW1lIiwiZGF0ZSIsImNsckRhdGUiLCIiLDEsImQtbm9uZSIsMywiY2xyRGF0ZUNoYW5nZSJdLFsxLCJ2YWxpZGF0'@;
put 'aW9uLWluZm8tYWxlcnQiLDMsImNsckFsZXJ0Q2xvc2FibGUiLCJjbHJBbGVydFR5cGUiXSxbMSwiYWxlcnQtdGV4dCJdLFsxLCJwcmV2LW5leHQiXSxbInR5cGUiLCJidXR0b24iLCJ0YWJpbmRleCIsIjAiLDEsImJ0biIsImJ0bi1vdXRsaW5lIiwiZm9jdXNhYmxlIiwzLCJjbGljayIsImRp'@;
put 'c2FibGVkIl0sWyJzaGFwZSIsImFuZ2xlIGxlZnQiLCJzaXplIiwiMjMiXSxbInNoYXBlIiwiYW5nbGUgcmlnaHQiLCJzaXplIiwiMjMiXSxbNCwibmdJZiIsIm5nSWZFbHNlIl0sWzMsImZvY3VzaW4iLCJ2YWx1ZUNoYW5nZSIsIm9uSW5wdXRFdmVudCIsInZhbHVlIiwiaW5wdXRJZCJdLFsz'@;
put 'LCJuZ1ZhbHVlIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMywibmdWYWx1ZSJdLFsiY2xyU2VsZWN0IiwiIiwzLCJmb2N1c2luIiwibmdNb2RlbENoYW5nZSIsIm5nTW9kZWwiXSxbMywidmFsdWUiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFszLCJ2YWx1ZSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihk'@;
put 'LGgpe2lmKDEmZCl7Y29uc3QgZj1MbigpO2RlKDAsImNsci1tb2RhbCIsMykoMSwiaDMiLDQpLExlKDIpLGd0KDMsSDh0LDMsMiwibmctY29udGFpbmVyIiw1KSxoZSgpLGRlKDQsImRpdiIsNiksZ3QoNSxOOHQsMywwLCJkaXYiLDcpKDYsbjd0LDMsNSwibmctY29udGFpbmVyIiw1KSxoZSgp'@;
put 'LGRlKDcsImRpdiIsOCksZ3QoOCxyN3QsNCw0LCJjbHItYWxlcnQiLDkpKDksaTd0LDksMywiZGl2IiwxMCksZGUoMTAsImRpdiIpKDExLCJidXR0b24iLDExKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGYpLGguY3VycmVudFJlY29yZC5ub0xpbmtPcHRpb249ITEsQ3QoaC5j'@;
put 'bG9zZVJlY29yZEVkaXQoKSl9KSxMZSgxMiwiIENhbmNlbCAiKSxoZSgpLGRlKDEzLCJidXR0b24iLDEyKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGYpLEN0KGguY29uZmlybVJlY29yZEVkaXQoKSl9KSxMZSgxNCwiIENvbmZpcm0gIiksaGUoKSgpKCksZ3QoMTUsYzd0LDMs'@;
put 'MywibmctdGVtcGxhdGUiLG51bGwsMCxJYyksaGUoKX0yJmQmJihNZSgiY2xyTW9kYWxPcGVuIiwhMCkoImNsck1vZGFsQ2xvc2FibGUiLCExKSxmZSgyKSxWZigiICIsIkFERCI9PT1oLnJlY29yZEFjdGlvbj8iQWRkIjoiRWRpdCIsIiByZWNvcmQgaW4gIixudWxsPT1oLmxpYmRzP251bGw6'@;
put 'aC5saWJkcy5zcGxpdCgiLiIpWzBdLCIuIixudWxsPT1oLmxpYmRzP251bGw6aC5saWJkcy5zcGxpdCgiLiIpWzFdLCIgIiksZmUoKSxNZSgibmdJZiIsIkVESVQiPT09aC5yZWNvcmRBY3Rpb24pLGZlKDIpLE1lKCJuZ0lmIixoLmFkZFJlY29yZExvYWRpbmcpLGZlKCksTWUoIm5nSWYiLCFo'@;
put 'LmFkZFJlY29yZExvYWRpbmcpLGZlKDIpLE1lKCJuZ0lmIixoLmN1cnJlbnRSZWNvcmRJbnZhbGlkQ29scy5sZW5ndGg+MCksZmUoKSxNZSgibmdJZiIsaC5jdXJyZW50UmVjb3JkSW52YWxpZENvbHMubGVuZ3RoPDEpLGZlKDQpLE1lKCJkaXNhYmxlZCIsaC5jdXJyZW50UmVjb3JkSW52YWxp'@;
put 'ZENvbHMubGVuZ3RoPjApKX0sZGVwZW5kZW5jaWVzOltucyxiYSxOMSxTMixjcCxBMixrMixxbCxUMixubCwkcyxKeCxZZGUsUXgsSGwsb3UsS3UsakwsWXgsSkwsc0csWjEsR0wsRTcsUUwsd2RlLEQ2ZSx3Ul0sZW5jYXBzdWxhdGlvbjoyfSl9fXJldHVybiBjfSkoKTtmdW5jdGlvbiBkN3Qo'@;
put 'YyxsKXtpZigxJmMmJihkZSgwLCJwIiwzKSxMZSgxKSxoZSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7ZmUoKSxEcigiICIsYSwiICIpfX1sZXQgaDd0PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLnN0YXRlc0xpc3Q9W10sdGhpcy5wcm9jZXNzZWRTdGF0ZXM9W10sdGhp'@;
put 'cy5zdGF0ZXJJblByb2dyZXNzPSExLHRoaXMubWluRGVsYXk9MWUzfW5nT25Jbml0KCl7fWFwcGVuZFN0YXRlKGEpe2lmKCJ7ZmluaXNofSI9PT1hKXJldHVybiB0aGlzLnN0YXRlckluUHJvZ3Jlc3M9ITEsdm9pZCBjbGVhckludGVydmFsKHRoaXMuc3RhdGVJbnRlcnZhbCk7dGhpcy5zdGF0'@;
put 'ZXNMaXN0LnB1c2goYSksdGhpcy5wcm9jZXNzZWRTdGF0ZXMucHVzaChhKX1yZXBsYWNlTGFzdFN0YXRlKGEpe3RoaXMuc3RhdGVzTGlzdC5sZW5ndGg+MD8odGhpcy5zdGF0ZXNMaXN0LnBvcCgpLHRoaXMuc3RhdGVzTGlzdC5wdXNoKGEpKTp0aGlzLnByb2Nlc3NlZFN0YXRlc1t0aGlzLnBy'@;
put 'b2Nlc3NlZFN0YXRlcy5sZW5ndGgtMV09YX1jbGVhclN0YXRlcygpe3RoaXMucHJvY2Vzc2VkU3RhdGVzPVtdfXN0YXJ0U3RhdGVyKCl7dGhpcy5zdGF0ZXJJblByb2dyZXNzPSEwLHRoaXMuc3RhdGVzTGlzdC5sZW5ndGg+MCYmdGhpcy5wcm9jZXNzZWRTdGF0ZXMucHVzaCh0aGlzLnN0YXRl'@;
put 'c0xpc3Quc2hpZnQoKXx8IiIpLHRoaXMuc3RhdGVJbnRlcnZhbD1zZXRJbnRlcnZhbCgoKT0+e3RoaXMuc3RhdGVzTGlzdC5sZW5ndGg+MCYmdGhpcy5wcm9jZXNzZWRTdGF0ZXMucHVzaCh0aGlzLnN0YXRlc0xpc3Quc2hpZnQoKXx8IiIpfSx0aGlzLm1pbkRlbGF5KX1zdGF0aWN7dGhpcy5c'@;
put 'dTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1Y21wPVZyKHt0eXBlOmMsc2VsZWN0b3JzOltbImFwcC11cGxvYWQtc3RhdGVyIl1dLGRlY2xzOjUsdmFyczoxLGNvbnN0czpbWyJjbGFzcyIsIm0tMCIsNCwibmdGb3IiLCJuZ0Zvck9mIl0s'@;
put 'WzEsInRleHQtY2VudGVyIl0sWzEsInNwaW5uZXIiLCJzcGlubmVyLXNtIiwidmVydGljYWwtYWxpZ24tbWlkZGxlIl0sWzEsIm0tMCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihkLGgpezEmZCYmKGRlKDAsImRpdiIpLGd0KDEsZDd0LDIsMSwicCIsMCksaGUoKSxkZSgyLCJkaXYiLDEpKDMsInNw'@;
put 'YW4iLDIpLExlKDQsIkxvYWRpbmcuLi4iKSxoZSgpKCkpLDImZCYmKGZlKCksTWUoIm5nRm9yT2YiLGgucHJvY2Vzc2VkU3RhdGVzKSl9LGRlcGVuZGVuY2llczpbbnNdLGVuY2Fwc3VsYXRpb246Mn0pfX1yZXR1cm4gY30pKCksZjd0PSgoKT0+e2NsYXNzIGN7dHJhbnNmb3JtKGEpe3JldHVy'@;
put 'biBhLnJlcGxhY2UoL1x8L2csIiB8ICIpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVwaXBlPWxsKHtuYW1lOiJwa1NwYWNlU2VwYXJhdGUiLHR5cGU6YyxwdXJlOiEwfSl9fXJldHVybiBjfSkoKSxGNmU9KCgp'@;
put 'PT57Y2xhc3MgY3t0cmFuc2Zvcm0oYSxkKXtyZXR1cm4gdGhpcy5hZGRTZXBhcmF0b3JzKGEudG9TdHJpbmcoKSxkKX1hZGRTZXBhcmF0b3JzKGEsZD0iICIpe2NvbnN0IGg9KGErPSIiKS5zcGxpdCgiLiIpO2xldCBmPWhbMF07Y29uc3Qgdj1oLmxlbmd0aD4xPyIuIitoWzFdOiIiLE09Lyhc'@;
put 'ZCspKFxkezN9KS87Zm9yKDtNLnRlc3QoZik7KWY9Zi5yZXBsYWNlKE0sIiQxIitkKyIkMiIpO3JldHVybiBmK3Z9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NXBpcGU9bGwoe25hbWU6InRob3VzYW5kU2VwYXJh'@;
put 'dG9yIix0eXBlOmMscHVyZTohMH0pfX1yZXR1cm4gY30pKCk7Y29uc3QgcDd0PVsiaHQiXSxnN3Q9WyJ1cGxvYWRTdGF0ZXIiXSxtN3Q9WyJxdWVyeUZpbHRlciJdLHY3dD1bImhvdEluc3RhbmNlIl0sYjd0PVsiZmlsZVVwbG9hZElucHV0Il0seTd0PShjLGwpPT4oe2xpYk5hbWU6Yyx0YWJs'@;
put 'ZU5hbWU6bH0pLEg2ZT0oKT0+WyIiLCIgIl0sXzd0PWM9Pih7aGVhZGVyQmFyRmlsdGVyOmN9KSx3N3Q9KCk9PlsiL2hvbWUiXTtmdW5jdGlvbiBDN3QoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJkaXYiLDY0KSgxLCJzcGFuIiw2NSkoMiwibGFiZWwiLDY2KSxMZSgzLCIgQnJv'@;
put 'd3NlICIpLGhlKCkoKSxkZSg0LCJpbnB1dCIsNjcsMyksRnQoImNoYW5nZSIsZnVuY3Rpb24oaCl7cmV0dXJuIHd0KGEpLEN0KFJlKCkuYXR0YWNoRmlsZShoKSl9KSxoZSgpKCl9aWYoMiZjKXtjb25zdCBhPVJlKCk7ZmUoNCksTWUoInVwbG9hZGVyIixhLnVwbG9hZGVyKX19ZnVuY3Rpb24g'@;
put 'Uzd0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiZGl2Iiw2OCkoMSwiYnV0dG9uIiw2OSksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChSZSgpLnVwbG9hZFBhcnNlZEZpbGVzKCkpfSksTGUoMiwiIFVwbG9hZCAiKSxoZSgpKCl9MiZjJiYoZmUoKSxNZSgi'@;
put 'ZGlzYWJsZWQiLCEwKSl9ZnVuY3Rpb24gTTd0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiYnV0dG9uIiw3MCksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChSZSgpLnNob3dVcGxvYWRNb2RhbD0hMSl9KSxMZSgxLCIgQ2xvc2UgIiksaGUoKX1pZigyJmMp'@;
put 'e2NvbnN0IGE9UmUoKTtNZSgiZGlzYWJsZWQiLGEuZXhjZWxGaWxlUGFyc2luZ3x8YS51cGxvYWRMb2FkaW5nKX19ZnVuY3Rpb24geDd0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiYnV0dG9uIiw3MSksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChSZSgp'@;
put 'LnNob3dVcGxvYWRNb2RhbD0hMSl9KSxMZSgxLCIgU2tpcCAiKSxoZSgpfX1mdW5jdGlvbiBFN3QoYyxsKXsxJmMmJihkZSgwLCJkaXYiLDcyKSxHdCgxLCJhcHAtdXBsb2FkLXN0YXRlciIsbnVsbCw0KSxoZSgpKX1mdW5jdGlvbiBUN3QoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgw'@;
put 'LCJhcHAtZWRpdC1yZWNvcmQiLDczKSxGdCgib25SZWNvcmRDaGFuZ2UiLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KFJlKCkuY29uZmlybVJlY29yZEVkaXQoKSl9KSgib25SZWNvcmRJbnB1dEZvY3VzZWQiLGZ1bmN0aW9uKGgpe3JldHVybiB3dChhKSxDdChSZSgpLm9uUmVjb3JkSW5w'@;
put 'dXRGb2N1cyhoKSl9KSgib25SZWNvcmRFZGl0Q2xvc2UiLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KFJlKCkuY2xvc2VSZWNvcmRFZGl0KCkpfSkoIm9uTmV4dFJlY29yZCIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoUmUoKS5vbk5leHRSZWNvcmQoKSl9KSgib25QcmV2aW91c1Jl'@;
put 'Y29yZCIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoUmUoKS5vblByZXZpb3VzUmVjb3JkKCkpfSksaGUoKX1pZigyJmMpe2NvbnN0IGE9UmUoKTtNZSgiY3VycmVudFJlY29yZCIsYS5jdXJyZW50RWRpdFJlY29yZCkoInJlY29yZEFjdGlvbiIsYS5yZWNvcmRBY3Rpb24pKCJsaWJkcyIs'@;
put 'YS5saWJkcykoInF1ZXJ5RmlsdGVyIixhLnF1ZXJ5RmlsdGVyKSgiZmlsdGVyIixhLmZpbHRlcikoInN1Ym1pdExvYWRpbmciLGEuc3VibWl0TG9hZGluZykoImhlYWRlclBrcyIsYS5oZWFkZXJQa3MpKCJjZWxsVmFsaWRhdGlvbiIsYS5jZWxsVmFsaWRhdGlvbikoImN1cnJlbnRSZWNvcmRJ'@;
put 'bmRleCIsYS5jdXJyZW50RWRpdFJlY29yZEluZGV4KSgiY3VycmVudFJlY29yZExvYWRpbmdzIixhLmN1cnJlbnRFZGl0UmVjb3JkTG9hZGluZ3MpKCJjdXJyZW50UmVjb3JkRXJyb3JzIixhLmN1cnJlbnRFZGl0UmVjb3JkRXJyb3JzKSgiY3VycmVudFJlY29yZFZhbGlkYXRvciIsYS5jdXJy'@;
put 'ZW50RWRpdFJlY29yZFZhbGlkYXRvcil9fWZ1bmN0aW9uIEE3dChjLGwpezEmYyYmKGRlKDAsImRpdiIsNzQpLEd0KDEsInByb2dyZXNzIiksaGUoKSl9ZnVuY3Rpb24gazd0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiZGl2Iiw3NSkoMSwic3BhbiIsNzYpLEd0KDIsImNsci1p'@;
put 'Y29uIiw3NyksZGUoMywic3BhbiIsNzgpLExlKDQsIkJhY2sgdG8gdGFibGUgc2VsZWN0aW9uIiksaGUoKSgpLGRlKDUsInNwYW4iLDc5KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KFJlKCkudmlld2JveE1hbmFnZXIoKSl9KSxHdCg2LCJjbHItaWNvbiIsODApLGRl'@;
put 'KDcsInNwYW4iLDc4KSxMZSg4LCJWaWV3Ym94ZXMiKSxoZSgpKCkoKX0yJmMmJihmZSgpLE1lKCJyb3V0ZXJMaW5rIixHcygxLHc3dCkpKX1mdW5jdGlvbiBEN3QoYyxsKXsxJmMmJkd0KDAsImNsci1pY29uIiw4Nil9ZnVuY3Rpb24gSTd0KGMsbCl7aWYoMSZjJiYoZGUoMCwiY2xyLXRvb2x0'@;
put 'aXAtY29udGVudCIsODgpLExlKDEpLGhlKCkpLDImYyl7Y29uc3QgYT1SZSgzKTtmZSgpLERyKCIgIixhLmRzTm90ZSwiICIpfX1mdW5jdGlvbiBSN3QoYyxsKXsxJmMmJihzaSgwKSxndCgxLEk3dCwyLDEsImNsci10b29sdGlwLWNvbnRlbnQiLDg3KSxsaSgpKX1mdW5jdGlvbiBMN3QoYyxs'@;
put 'KXtpZigxJmMmJihzaSgwKSxMZSgxKSxlbCgyLCJ0aG91c2FuZFNlcGFyYXRvciIpLGxpKCkpLDImYyl7Y29uc3QgYT1SZSgzKTtmZSgpLEtJKCIgKCIsejgoMiw0LGEuZGF0YVNvdXJjZS5sZW5ndGgsIiwiKSwiICIsMT09PWEuZGF0YVNvdXJjZS5sZW5ndGg/InJvdyI6InJvd3MiLCIsICIs'@;
put 'YS5jb2xzLmxlbmd0aCwiIiwxPT09YS5jb2xzLmxlbmd0aD8iIGNvbCI6IiBjb2xzIiwiKSAiKX19ZnVuY3Rpb24gTzd0KGMsbCl7MSZjJiYoc2koMCksTGUoMSwiICgwIHJvd3MpICIpLGxpKCkpfWZ1bmN0aW9uIFA3dChjLGwpe2lmKDEmYyYmKHNpKDApLGd0KDEsTDd0LDMsNywibmctY29u'@;
put 'dGFpbmVyIiwzOSkoMixPN3QsMiwwLCJuZy1jb250YWluZXIiLDM5KSxsaSgpKSwyJmMpe2NvbnN0IGE9UmUoMik7ZmUoKSxNZSgibmdJZiIsIWEuemVyb0ZpbHRlclJvd3MpLGZlKCksTWUoIm5nSWYiLGEuemVyb0ZpbHRlclJvd3MpfX1mdW5jdGlvbiBGN3QoYyxsKXtpZigxJmMpe2NvbnN0'@;
put 'IGE9TG4oKTtkZSgwLCJoNCIsODEpKDEsImNsci10b29sdGlwIikoMiwiY2xyLWljb24iLDgyKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KFJlKCkuZGF0YXNldEluZm89ITApfSksaGUoKSxndCgzLEQ3dCwxLDAsImNsci1pY29uIiw4MyksZGUoNCwic3BhbiIsODQp'@;
put 'LExlKDUpLGRlKDYsImEiLDg1KSxMZSg3KSxoZSgpKCksZ3QoOCxSN3QsMiwwLCJuZy1jb250YWluZXIiLDM5KSxoZSgpLGd0KDksUDd0LDMsMiwibmctY29udGFpbmVyIiwzOSksaGUoKX1pZigyJmMpe2NvbnN0IGE9bC5uZ1ZhcixkPVJlKCk7ZmUoMyksTWUoIm5nSWYiLGEudGFibGVOYW1l'@;
put 'LmluY2x1ZGVzKCItRkMiKSksZmUoMiksRHIoIiAiLGEubGliTmFtZSwiLiIpLGZlKCksTWUoInJvdXRlckxpbmsiLCIvdmlldy9kYXRhLyIrZC5saWJkcyksZmUoKSx3cihhLnRhYmxlTmFtZS5yZXBsYWNlKCItRkMiLCIiKSksZmUoKSxNZSgibmdJZiIsZC5kc05vdGUmJmQuZHNOb3RlLmxl'@;
put 'bmd0aD4wKSxmZSgpLE1lKCJuZ0lmIixkLmRhdGFTb3VyY2UpfX1mdW5jdGlvbiBIN3QoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJidXR0b24iLDk1KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KFJlKDMpLm9uU2hvd1VwbG9hZE1vZGFsKCkpfSksR3Qo'@;
put 'MSwiY2xyLWljb24iLDk2KSxkZSgyLCJzcGFuIiw3OCksTGUoMywiVXBsb2FkIiksaGUoKSgpfX1mdW5jdGlvbiBON3QoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtzaSgwKSxkZSgxLCJidXR0b24iLDkwKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KFJlKDIpLm9w'@;
put 'ZW5RYigpKX0pLEd0KDIsImNsci1pY29uIiw5MSksZGUoMywic3BhbiIsNzgpLExlKDQsIkZpbHRlciIpLGhlKCkoKSxkZSg1LCJidXR0b24iLDkyKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KFJlKDIpLmVkaXRUYWJsZSgpKX0pLEd0KDYsImNsci1pY29uIiw5Myks'@;
put 'ZGUoNywic3BhbiIsNzgpLExlKDgsIkVkaXQiKSxoZSgpKCksZ3QoOSxIN3QsNCwwLCJidXR0b24iLDk0KSxsaSgpfWlmKDImYyl7Y29uc3QgYT1SZSgyKTtmZSg5KSxNZSgibmdJZiIsIWEuY29sdW1uTGV2ZWxTZWN1cml0eUZsYWcpfX1mdW5jdGlvbiBWN3QoYyxsKXtpZigxJmMmJihkZSgw'@;
put 'LCJzcGFuIiksTGUoMSksaGUoKSksMiZjKXtjb25zdCBhPVJlKDQpO2ZlKCksVXUoIlRvIHVubG9jayBtb3JlIHRoYW4gIixhLmxpY2VuY2VTdGF0ZS52YWx1ZS5lZGl0b3Jfcm93c19hbGxvd2VkLCIgIiwxPT09YS5saWNlbmNlU3RhdGUudmFsdWUuZWRpdG9yX3Jvd3NfYWxsb3dlZD8icm93'@;
put 'Ijoicm93cyIsIiwgY29udGFjdCBzdXBwb3J0QGRhdGFjb250cm9sbGVyLmlvIil9fWZ1bmN0aW9uIEI3dChjLGwpe2lmKDEmYyYmKGRlKDAsImNsci10b29sdGlwLWNvbnRlbnQiLDg4KSxndCgxLFY3dCwyLDIsInNwYW4iLDM5KSxoZSgpKSwyJmMpe2NvbnN0IGE9UmUoMyk7ZmUoKSxNZSgi'@;
put 'bmdJZiIsYS5yZXN0cmljdGlvbnMucmVzdHJpY3RBZGRSb3cpfX1mdW5jdGlvbiBqN3QoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtzaSgwKSxkZSgxLCJidXR0b24iLDk3KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KFJlKDIpLmNhbmNlbEVkaXQoKSl9KSxHdCgy'@;
put 'LCJjbHItaWNvbiIsOTgpLGRlKDMsInNwYW4iKSxMZSg0LCJDYW5jZWwiKSxoZSgpKCksZGUoNSwiY2xyLXRvb2x0aXAiKSg2LCJidXR0b24iLDk5KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1SZSgyKTtyZXR1cm4gQ3QoaC5yZXN0cmljdGlvbnMucmVzdHJpY3RBZGRS'@;
put 'b3c/IiI6aC5hZGRSb3coKSl9KSxHdCg3LCJjbHItaWNvbiIsMTAwKSxMZSg4LCJBZGQgUm93ICIpLGhlKCksZ3QoOSxCN3QsMiwxLCJjbHItdG9vbHRpcC1jb250ZW50Iiw4NyksaGUoKSxkZSgxMCwiYnV0dG9uIiw0NCksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChS'@;
put 'ZSgyKS5jaGVja1NhdmUoKSl9KSxHdCgxMSwiY2xyLWljb24iLDEwMSksTGUoMTIsIlN1Ym1pdCAiKSxoZSgpLGxpKCl9aWYoMiZjKXtjb25zdCBhPVJlKDIpO2ZlKDYpLFRyKCJkYy1sb2NrZWQtY29udHJvbCIsYS5yZXN0cmljdGlvbnMucmVzdHJpY3RBZGRSb3cpLE1lKCJjbHJMb2FkaW5n'@;
put 'IixhLmFkZGluZ05ld1Jvdyl9fWZ1bmN0aW9uIHo3dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImJ1dHRvbiIsMTA1KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KFJlKDMpLm1hbnVhbEZpbGVFZGl0TW9kYWw9ITApfSksR3QoMSwiY2xyLWljb24iLDkz'@;
put 'KSxkZSgyLCJzcGFuIiksTGUoMywiRWRpdCIpLGhlKCkoKX19ZnVuY3Rpb24gVTd0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7c2koMCksZGUoMSwiYnV0dG9uIiwxMDIpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoUmUoMikuZGlzY2FyZFNvdXJjZUZpbGU9ITAp'@;
put 'fSksR3QoMiwiY2xyLWljb24iLDk4KSxkZSgzLCJzcGFuIiksTGUoNCwiRGlzY2FyZCBmaWxlIiksaGUoKSgpLGd0KDUsejd0LDQsMCwiYnV0dG9uIiwxMDMpLGRlKDYsImJ1dHRvbiIsMTA0KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KFJlKDIpLnN1Ym1pdEV4Y2Vs'@;
put 'KCkpfSksR3QoNywiY2xyLWljb24iLDEwMSksTGUoOCwiIFN1Ym1pdCAiKSxoZSgpLGxpKCl9aWYoMiZjKXtjb25zdCBhPVJlKDIpO2ZlKDUpLE1lKCJuZ0lmIixhLmhvdFRhYmxlLnJlYWRPbmx5KSxmZSgpLE1lKCJjbHJMb2FkaW5nIixhLnVwbG9hZExvYWRpbmcpfX1mdW5jdGlvbiBaN3Qo'@;
put 'YyxsKXtpZigxJmMmJihkZSgwLCJkaXYiLDg5KSxndCgxLE43dCwxMCwxLCJuZy1jb250YWluZXIiLDM5KSgyLGo3dCwxMywzLCJuZy1jb250YWluZXIiLDM5KSgzLFU3dCw5LDIsIm5nLWNvbnRhaW5lciIsMzkpLGhlKCkpLDImYyl7Y29uc3QgYT1SZSgpO2ZlKCksTWUoIm5nSWYiLGEuaG90'@;
put 'VGFibGUucmVhZE9ubHkmJiFhLnVwbG9hZFByZXZpZXcpLGZlKCksTWUoIm5nSWYiLCFhLmhvdFRhYmxlLnJlYWRPbmx5JiYhYS51cGxvYWRQcmV2aWV3KSxmZSgpLE1lKCJuZ0lmIixhLnVwbG9hZFByZXZpZXcpfX1mdW5jdGlvbiBXN3QoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiLDEwNiko'@;
put 'MSwic3BhbiIpLExlKDIsIkZJTFRFUiA6ICIpLGRlKDMsImIiKSxMZSg0KSxoZSgpKCkoKSksMiZjKXtjb25zdCBhPVJlKCk7ZmUoNCksd3IoYS5xdWVyeVRleHQpfX1mdW5jdGlvbiBZN3QoYyxsKXsxJmMmJihzaSgwKSxkZSgxLCJzcGFuIiwxMDkpLExlKDIsIiBMb2FkaW5nLi4uICIpLGhl'@;
put 'KCksZGUoMywiZGl2IiwxMTApKDQsInAiLDExMSksTGUoNSwiTG9hZGluZyB0YWJsZSIpLGhlKCkoKSxsaSgpKX1mdW5jdGlvbiBHN3QoYyxsKXsxJmMmJihzaSgwKSxkZSgxLCJzcGFuIiksR3QoMiwiY2xyLWljb24iLDExMiksaGUoKSxkZSgzLCJkaXYiLDExMCkoNCwicCIsMTExKSxMZSg1'@;
put 'LCJMb2FkaW5nIHRhYmxlIGVycm9yIiksaGUoKSgpLGxpKCkpfWZ1bmN0aW9uICQ3dChjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIsMTA3KSgxLCJkaXYiLDEwOCksZ3QoMixZN3QsNiwwLCJuZy1jb250YWluZXIiLDM5KSgzLEc3dCw2LDAsIm5nLWNvbnRhaW5lciIsMzkpLGhlKCkoKSksMiZj'@;
put 'KXtjb25zdCBhPVJlKCk7ZmUoMiksTWUoIm5nSWYiLCFhLmdldGRhdGFFcnJvciksZmUoKSxNZSgibmdJZiIsYS5nZXRkYXRhRXJyb3IpfX1mdW5jdGlvbiBLN3QoYyxsKXtpZigxJmMmJihkZSgwLCJzcGFuIiksTGUoMSksaGUoKSksMiZjKXtjb25zdCBhPVJlKDMpO2ZlKCksVXUoIlRvIHVu'@;
put 'bG9jayBtb3JlIHRoYW4gIixhLmxpY2VuY2VTdGF0ZS52YWx1ZS5lZGl0b3Jfcm93c19hbGxvd2VkLCIgIiwxPT09YS5saWNlbmNlU3RhdGUudmFsdWUuZWRpdG9yX3Jvd3NfYWxsb3dlZD8icm93Ijoicm93cyIsIiwgY29udGFjdCBzdXBwb3J0QGRhdGFjb250cm9sbGVyLmlvIil9fWZ1bmN0'@;
put 'aW9uIHE3dChjLGwpe2lmKDEmYyYmKGRlKDAsImNsci10b29sdGlwLWNvbnRlbnQiLDExNSksZ3QoMSxLN3QsMiwyLCJzcGFuIiwzOSksaGUoKSksMiZjKXtjb25zdCBhPVJlKDIpO2ZlKCksTWUoIm5nSWYiLGEucmVzdHJpY3Rpb25zLnJlc3RyaWN0QWRkUm93KX19ZnVuY3Rpb24gWDd0KGMs'@;
put 'bCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiY2xyLXRvb2x0aXAiKSgxLCJidXR0b24iLDExMyksRnQoImNsaWNrIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9UmUoKTtyZXR1cm4gQ3QoaC5yZXN0cmljdGlvbnMucmVzdHJpY3RBZGRSb3c/IiI6aC5hZGRSZWNvcmRCdXR0b25DbGlj'@;
put 'aygpKX0pLEd0KDIsImNsci1pY29uIiwxMDApLExlKDMsIiBBZGQgUmVjb3JkICIpLGhlKCksZ3QoNCxxN3QsMiwxLCJjbHItdG9vbHRpcC1jb250ZW50IiwxMTQpLGhlKCl9aWYoMiZjKXtjb25zdCBhPVJlKCk7ZmUoKSxUcigiZGMtbG9ja2VkLWNvbnRyb2wiLGEucmVzdHJpY3Rpb25zLnJl'@;
put 'c3RyaWN0QWRkUm93KX19ZnVuY3Rpb24gSjd0KGMsbCl7aWYoMSZjJiYoZGUoMCwicCIsMTE2KSxMZSgxKSxHdCgyLCJjb250YWN0LWxpbmsiKSxoZSgpKSwyJmMpe2NvbnN0IGE9UmUoKTtmZSgpLERyKCIgVG8gZGlzcGxheSBtb3JlIHRoYW4gIixhLmxpY2VuY2VTdGF0ZS52YWx1ZS5lZGl0'@;
put 'b3Jfcm93c19hbGxvd2VkLCIgcm93cywgY29udGFjdCAiKX19ZnVuY3Rpb24gUTd0KGMsbCl7aWYoMSZjJiYoZGUoMCwic3BhbiIsMTI4KSxMZSgxKSxoZSgpKSwyJmMpe2NvbnN0IGE9UmUoMik7ZmUoKSxVdSgiT25seSAiLGEubGljZW5jZVN0YXRlLnZhbHVlLnN1Ym1pdF9yb3dzX2xpbWl0'@;
put 'LCIgIiwxPT09YS5saWNlbmNlU3RhdGUudmFsdWUuc3VibWl0X3Jvd3NfbGltaXQ/InJvdyI6InJvd3MiLCIgd2lsbCBiZSBzdWJtaXR0ZWQuIFRvIHJlbW92ZSB0aGUgcmVzdHJpY3Rpb24sIGNvbnRhY3Qgc3VwcG9ydEBkYXRhY29udHJvbGxlci5pbyIpfX1mdW5jdGlvbiBlOXQoYyxsKXtp'@;
put 'ZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJkaXYiLDEyOSkoMSwiZGl2IiwxMzApKDIsImxhYmVsIiwxMzEpLExlKDMsIk1lc3NhZ2UiKSxoZSgpLGRlKDQsInRleHRhcmVhIiwxMzIpLGdpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPVJlKDIpO3JldHVybiBt'@;
put 'aShmLm1lc3NhZ2UsaCl8fChmLm1lc3NhZ2U9aCksQ3QoaCl9KSxoZSgpKCkoKX1pZigyJmMpe2NvbnN0IGE9UmUoMik7ZmUoNCkscGkoIm5nTW9kZWwiLGEubWVzc2FnZSksTWUoImRpc2FibGVkIiwhYS52YWxpZGF0aW9uRG9uZSkoInZhbHVlIixhLnZhbGlkYXRpb25Eb25lPyIiOiJQbGVh'@;
put 'c2Ugd2FpdCB3aGlsZSB3ZSB2YWxpZGF0ZSAiK2EuY29scy5sZW5ndGgqYS5tb2RpZmVkUm93c0luZGV4ZXMubGVuZ3RoKyIgY2VsbHMuIil9fWZ1bmN0aW9uIHQ5dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImRpdiIsMTE3KSgxLCJkaXYiLDExOCkoMiwiZGl2IiwxMTkpKDMs'@;
put 'ImRpdiIsMTIwKSg0LCJidXR0b24iLDEyMSksR3QoNSwiY2xyLWljb24iLDEyMiksaGUoKSxkZSg2LCJoMyIsOCksTGUoNyksaGUoKSgpLGRlKDgsImRpdiIsOSksZ3QoOSxRN3QsMiwyLCJzcGFuIiwxMjMpKDEwLGU5dCw1LDMsImRpdiIsMTI0KSxoZSgpLGRlKDExLCJkaXYiLDEyNSkoMTIs'@;
put 'ImJ1dHRvbiIsMTI2KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1SZSgpO3JldHVybiBDdChoLnNhdmVUYWJsZShoLmhvdFRhYmxlLmRhdGEpKX0pLExlKDEzLCIgU3VibWl0ICIpLGhlKCksZGUoMTQsImJ1dHRvbiIsMTI3KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3Qo'@;
put 'YSk7Y29uc3QgaD1SZSgpO3JldHVybiBoLmNhbmNlbFN1Ym1pdCgpLGguc3VibWl0PSExLEN0KGgudmFsaWRhdGlvbkRvbmU9MCl9KSxMZSgxNSwiIENhbmNlbCAiKSxoZSgpKCkoKSgpKCl9aWYoMiZjKXtjb25zdCBhPVJlKCk7ZmUoNyksVmYoIiBTdWJtaXQgZm9yIEFwcHJvdmFsICgiLGEu'@;
put 'cm93c0NoYW5nZWQucm93c0FkZGVkLCIgYWRkZWQsICIsYS5yb3dzQ2hhbmdlZC5yb3dzVXBkYXRlZCwiIHVwZGF0ZWQsICIsYS5yb3dzQ2hhbmdlZC5yb3dzRGVsZXRlZCwiIGRlbGV0ZWQpICIpLGZlKDIpLE1lKCJuZ0lmIixhLnRvdGFsUm93c0NoYW5nZWQ+YS5saWNlbmNlU3RhdGUudmFs'@;
put 'dWUuc3VibWl0X3Jvd3NfbGltaXQmJmEubGljZW5jZVN0YXRlLnZhbHVlLnN1Ym1pdF9yb3dzX2xpbWl0IT09YS5JbmZpbml0eSksZmUoKSxNZSgibmdJZiIsYS50YWJsZVRydWUpLGZlKDIpLE1lKCJkaXNhYmxlZCIsIWEudmFsaWRhdGlvbkRvbmUpfX1mdW5jdGlvbiBuOXQoYyxsKXtpZigx'@;
put 'JmMmJihkZSgwLCJzcGFuIiwxMzMpLExlKDEpLGVsKDIsInBrU3BhY2VTZXBhcmF0ZSIpLGhlKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdCxkPVJlKCk7ZmUoKSxVdSgiIE9uIHJvdyAiLGErMSwiOiAiLERjKDIsMixkLnBrRmllbGRzW2FdLnJlcGxhY2UoInwiLCIiKSksIiAiKX19ZnVu'@;
put 'Y3Rpb24gcjl0KGMsbCl7aWYoMSZjJiYoZGUoMCwicCIpLExlKDEpLGhlKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtmZSgpLFZmKCIgIixhLmNvbCwiKCIsYS5sZW4sIiksICIsYS52YWwsIiAiKX19ZnVuY3Rpb24gaTl0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiZGl2'@;
put 'IiwxMzQpKDEsImRpdiIsMTM1KSgyLCJkaXYiLDExOSkoMywiZGl2IiwxMjApKDQsImJ1dHRvbiIsMTIxKSxHdCg1LCJjbHItaWNvbiIsMTIyKSxoZSgpLGRlKDYsImgzIiw4KSxMZSg3LCJFcnJvciIpLGhlKCkoKSxkZSg4LCJkaXYiLDkpKDksInAiKSxMZSgxMCwiWW91IGNhbm5vdCBzdWJt'@;
put 'aXQgZW1wdHkgY2xhdXNlcyIpLGhlKCkoKSxkZSgxMSwiZGl2IiwyMykoMTIsImJ1dHRvbiIsNDQpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoUmUoKS5udWxsVmFyaWFibGVzPSExKX0pLExlKDEzLCIgT2sgIiksaGUoKSgpKCkoKSgpfX1mdW5jdGlvbiBhOXQoYyxs'@;
put 'KXsxJmMmJkd0KDAsImFwcC1xdWVyeSIsbnVsbCw1KX1mdW5jdGlvbiBvOXQoYyxsKXsxJmMmJihkZSgwLCJwIiwxMzYpLExlKDEsIiBTb3JyeSB0aGF0IGRpZG4ndCB3b3JrLCB0cnkgYWdhaW4uICIpLGhlKCkpfWxldCBpTj0oKCk9PntjbGFzcyBje3N0YXRpY3t0aGlzLmNudD0wfXN0YXRp'@;
put 'Y3t0aGlzLm5vblBrQ250PTB9c3RhdGlje3RoaXMubGFzdENlbGw9MH1jb25zdHJ1Y3RvcihhLGQsaCxmLHYsTSxELFoscmUsY2UsYmUpe3RoaXMubGljZW5jZVNlcnZpY2U9YSx0aGlzLmV2ZW50U2VydmljZT1kLHRoaXMubG9nZ2VyU2VydmljZT1oLHRoaXMuc2FzU3RvcmVTZXJ2aWNlPWYs'@;
put 'dGhpcy5oZWxwZXJTZXJ2aWNlPXYsdGhpcy5yb3V0ZXI9TSx0aGlzLnJvdXRlPUQsdGhpcy5zYXNTZXJ2aWNlPVosdGhpcy5jZGY9cmUsdGhpcy5ob3RSZWdpc3RlcmVyPWNlLHRoaXMuc3ByZWFkc2hlZXRTZXJ2aWNlPWJlLHRoaXMudXBsb2FkU3RhdGVyQ29tcExpc3Q9bmV3IGZkLHRoaXMu'@;
put 'cXVlcnlGaWx0ZXJDb21wTGlzdD1uZXcgZmQsdGhpcy5ob3RJbnN0YW5jZUNvbXBMaXN0PW5ldyBmZCx0aGlzLmZpbGVVcGxvYWRJbnB1dENvbXBMaXN0PW5ldyBmZCx0aGlzLm1lc3NhZ2U9IiIsdGhpcy4kZGF0YUZvcm1hdHM9bnVsbCx0aGlzLmNvbHM9W10sdGhpcy5yZXN0cmljdGlvbnM9'@;
put 'e30sdGhpcy5kYXRhc2V0SW5mbz0hMSx0aGlzLmRzbWV0YT1bXSx0aGlzLnZlcnNpb25zPVtdLHRoaXMuZHNOb3RlPSIiLHRoaXMudmlld2JveGVzPSExLHRoaXMuSW5maW5pdHk9MS8wLHRoaXMuaG90VGFibGU9e2RhdGE6W10sY29sSGVhZGVyczpbXSxoaWRkZW46ITAsY29sdW1uczpbXSxo'@;
put 'ZWlnaHQ6IjEwMCUiLG1pblNwYXJlUm93czoxLGxpY2Vuc2VLZXk6dm9pZCAwLHJlYWRPbmx5OiEwLGNvcHlQYXN0ZTp7Y29weUNvbHVtbkhlYWRlcnM6ITAsY29weUNvbHVtbkhlYWRlcnNPbmx5OiEwfSxzZXR0aW5nczp7Y29udGV4dE1lbnU6e2l0ZW1zOntlZGl0X3Jvdzp7bmFtZToiRWRp'@;
put 'dCByb3ciLGhpZGRlbigpe2NvbnN0IHFlPXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZSgpO2lmKCFxZSlyZXR1cm4hMTtjb25zdCBydD1xZVswXTtyZXR1cm4gcnQuZnJvbS5yb3chPT1ydC50by5yb3d9LGNhbGxiYWNrOihCZSxxZSxydCk9Pntjb25zdCBwdD1xZVswXTtwdC5zdGFydC5yb3c9PT1w'@;
put 'dC5lbmQucm93JiZ0aGlzLmVkaXRSZWNvcmQobnVsbCxwdC5zdGFydC5yb3cpfX0scm93X2Fib3ZlOntuYW1lOiJJbnNlcnQgUm93IGFib3ZlIn0scm93X2JlbG93OntuYW1lOiJJbnNlcnQgUm93IGJlbG93In0scmVtb3ZlX3Jvdzp7bmFtZToiSWdub3JlIHJvdyJ9LGNvcHk6e25hbWU6IkNv'@;
put 'cHkgd2l0aG91dCBoZWFkZXJzIn0sY29weV93aXRoX2NvbHVtbl9oZWFkZXJzOntuYW1lOiJDb3B5IHdpdGggaGVhZGVycyJ9LGNvcHlfY29sdW1uX2hlYWRlcnNfb25seTp7bmFtZToiQ29weSBoZWFkZXJzIG9ubHkifSxzcDE6e25hbWU6Ii0tLS0tLS0tLSJ9LHVuZG86e25hbWU6IlVuZG8i'@;
put 'fSxyZWRvOntuYW1lOiJSZWRvIn19fX19LHRoaXMuaG90Q2VsbHNQcm9wUm93PW51bGwsdGhpcy5maWx0ZXI9ITEsdGhpcy5zdWJtaXRMb2FkaW5nPSExLHRoaXMudXBsb2FkTG9hZGluZz0hMSx0aGlzLnJvd3NDaGFuZ2VkPXtyb3dzVXBkYXRlZDowLHJvd3NEZWxldGVkOjAscm93c0FkZGVk'@;
put 'OjB9LHRoaXMubW9kaWZlZFJvd3NJbmRleGVzPVtdLHRoaXMucXVlcnlFcnI9ITEsdGhpcy5zdWNjZXNzRW5hYmxlPSExLHRoaXMubnVsbFZhcmlhYmxlcz0hMSx0aGlzLnBrRmllbGRzPVtdLHRoaXMuZmlsZW5hbWU9IiIsdGhpcy5zdWJtaXRMaW1pdE5vdGljZT0hMSx0aGlzLmJhZEVkaXQ9'@;
put 'ITEsdGhpcy5zYXZlTG9hZGluZz0hMSx0aGlzLmFwcHJvdmVycz1bXSx0aGlzLmVyclZhbGlkYXRpb249ITEsdGhpcy5wa051bGw9ITEsdGhpcy5ub1BrTnVsbD0hMSx0aGlzLnRhYmxlRGF0YT1bXSx0aGlzLnF1ZXJ5VGV4dD0iIix0aGlzLnF1ZXJ5VGV4dFNhdmVkPSIiLHRoaXMuc2hvd0Fw'@;
put 'cHJvdmVycz0hMSx0aGlzLnBrRHVwcz0hMSx0aGlzLnZhbGlkYXRpb25Eb25lPTAsdGhpcy5kdXBsaWNhdGVQa0luZGV4ZXM9W10sdGhpcy5jb2x1bW5IZWFkZXI9W10sdGhpcy5zcGVjSW5mbz1bXSx0aGlzLnRvb0xvbmc9ITEsdGhpcy5leGNlZWRDZWxscz1bXSx0aGlzLnVwbG9hZGVyPW5l'@;
put 'dyBQZWUsdGhpcy51cGxvYWRVcmw9IiIsdGhpcy5leGNlbEZpbGVSZWFkeT0hMSx0aGlzLnVwbG9hZFByZXZpZXc9ITEsdGhpcy5leGNlbEZpbGVQYXJzaW5nPSExLHRoaXMuZXhjZWxVcGxvYWRTdGF0ZT1udWxsLHRoaXMuZGF0YT1bXSx0aGlzLmhlYWRlckFycmF5PVtdLHRoaXMuaG90RGF0'@;
put 'YVNjaGVtYT17fSx0aGlzLmhlYWRlclNob3c9W10sdGhpcy5oZWFkZXJWaXNpYmxlPSExLHRoaXMuaGFzQmFzZURyb3Bab25lT3Zlcj0hMSx0aGlzLmhhc0Fub3RoZXJEcm9wWm9uZU92ZXI9ITEsdGhpcy5oZWFkZXJQa3M9W10sdGhpcy5jb2x1bW5MZXZlbFNlY3VyaXR5RmxhZz0hMSx0aGlz'@;
put 'LmRhdGVUaW1lSGVhZGVycz1bXSx0aGlzLnRpbWVIZWFkZXJzPVtdLHRoaXMuZGF0ZUhlYWRlcnM9W10sdGhpcy54bFJ1bGVzPVtdLHRoaXMuZW5jb2Rpbmc9IlVURi04Iix0aGlzLmhlYWRlckNvbHVtbnM9W10sdGhpcy5jZWxsVmFsaWRhdGlvbj1bXSx0aGlzLmZpbGVQYXNzd29yZFN1Ympl'@;
put 'Y3Q9bmV3IFduLHRoaXMuZmlsZVVubG9ja0Vycm9yPSExLHRoaXMuZmlsZVBhc3N3b3JkTW9kYWw9ITEsdGhpcy5zaG93VXBsb2FkTW9kYWw9ITEsdGhpcy5kaXNjYXJkU291cmNlRmlsZT0hMSx0aGlzLm1hbnVhbEZpbGVFZGl0TW9kYWw9ITEsdGhpcy5yZWNvcmRBY3Rpb249bnVsbCx0aGlz'@;
put 'LmN1cnJlbnRFZGl0UmVjb3JkTG9hZGluZ3M9W10sdGhpcy5jdXJyZW50RWRpdFJlY29yZEVycm9ycz1bXSx0aGlzLmN1cnJlbnRFZGl0UmVjb3JkSW5kZXg9LTEsdGhpcy5nZW5lcmF0ZUVkaXRSZWNvcmRVcmxMb2FkaW5nPSExLHRoaXMuZ2VuZXJhdGVkUmVjb3JkVXJsPW51bGwsdGhpcy5h'@;
put 'ZGRSZWNvcmRVcmw9bnVsbCx0aGlzLnJlY29yZE5ld09yUGtNb2RpZmllZD0hMSx0aGlzLmFkZFJlY29yZExvYWRpbmc9ITEsdGhpcy5zaW5nbGVSb3dTZWxlY3RlZD0hMSx0aGlzLmFkZGluZ05ld1Jvdz0hMSx0aGlzLmdldGRhdGFFcnJvcj0hMSx0aGlzLnplcm9GaWx0ZXJSb3dzPSExLHRo'@;
put 'aXMudGFibGVGaWxlRHJhZ092ZXI9ITEsdGhpcy5jZWxsVmFsaWRhdGlvblNvdXJjZT1bXSx0aGlzLnZhbGlkYXRpb25UYWJsZUxpbWl0PTIwLHRoaXMuZXh0ZW5kZWRDZWxsVmFsaWRhdGlvbkZpZWxkcz17RElTUExBWV9JTkRFWDowLEVYVFJBX0NPTF9OQU1FOjEsRElTUExBWV9WQUxVRToy'@;
put 'LERJU1BMQVlfVFlQRTozLFJBV19WQUxVRV9OVU06NCxSQVdfVkFMVUVfQ0hBUjo1LEZPUkNFX0ZMQUc6Nn0sdGhpcy5jZWxsVmFsaWRhdGlvbkZpZWxkcz17RElTUExBWV9JTkRFWDowLERJU1BMQVlfVkFMVUU6MSxSQVdfVkFMVUU6Mn0sdGhpcy5kaXNhYmxlZEJhc2ljRHluYW1pY0NlbGxW'@;
put 'YWxpZGF0aW9uTWFwPVtdLHRoaXMubGljZW5jZVN0YXRlPXRoaXMubGljZW5jZVNlcnZpY2UubGljZW5jZVN0YXRlLHRoaXMudGltZXNDbGlja2VkPTAsWmVlW3dpbmRvdy5uYXZpZ2F0b3IubGFuZ3VhZ2VdJiYkbS5yZWdpc3Rlckxhbmd1YWdlKFplZVt3aW5kb3cubmF2aWdhdG9yLmxhbmd1'@;
put 'YWdlXSksdGhpcy5ob3RSZWdpc3RlcmVyPW5ldyBZbSx0aGlzLnBhcnNlUmVzdHJpY3Rpb25zKCksdGhpcy5zZXRSZXN0cmljdGlvbnMoKX1wYXJzZVJlc3RyaWN0aW9ucygpe3RoaXMucmVzdHJpY3Rpb25zLnJlc3RyaWN0QWRkUmVjb3JkPSExPT09dGhpcy5saWNlbmNlU3RhdGUudmFsdWUu'@;
put 'YWRkUmVjb3JkLHRoaXMucmVzdHJpY3Rpb25zLnJlc3RyaWN0RWRpdFJlY29yZD0hMT09PXRoaXMubGljZW5jZVN0YXRlLnZhbHVlLmVkaXRSZWNvcmQsdGhpcy5yZXN0cmljdGlvbnMucmVzdHJpY3RGaWxlVXBsb2FkPSExPT09dGhpcy5saWNlbmNlU3RhdGUudmFsdWUuZmlsZVVwbG9hZH1z'@;
put 'ZXRSZXN0cmljdGlvbnMoYSl7YSYmKHRoaXMucmVzdHJpY3Rpb25zPXsuLi50aGlzLnJlc3RyaWN0aW9ucywuLi5hfSksdGhpcy5yZXN0cmljdGlvbnMucmVtb3ZlRWRpdFJlY29yZEJ1dHRvbiYmZGVsZXRlKHRoaXMuaG90VGFibGU/LnNldHRpbmdzPy5jb250ZXh0TWVudSkuaXRlbXMuZWRp'@;
put 'dF9yb3csdGhpcy5yZXN0cmljdGlvbnMucmVzdHJpY3RBZGRSb3cmJihkZWxldGUodGhpcy5ob3RUYWJsZT8uc2V0dGluZ3M/LmNvbnRleHRNZW51KS5pdGVtcy5yb3dfYWJvdmUsZGVsZXRlKHRoaXMuaG90VGFibGU/LnNldHRpbmdzPy5jb250ZXh0TWVudSkuaXRlbXMucm93X2JlbG93LGRl'@;
put 'bGV0ZSh0aGlzLmhvdFRhYmxlPy5zZXR0aW5ncz8uY29udGV4dE1lbnUpLml0ZW1zLnJlbW92ZV9yb3cpfWNoZWNrUm93TGltaXQoKXt0aGlzLmNvbHVtbkxldmVsU2VjdXJpdHlGbGFnfHx0aGlzLmxpY2VuY2VTdGF0ZS52YWx1ZS5lZGl0b3Jfcm93c19hbGxvd2VkIT09MS8wJiYodGhpcy5y'@;
put 'ZXN0cmljdGlvbnMucmVzdHJpY3RBZGRSb3c9dGhpcy5kYXRhU291cmNlPy5sZW5ndGg+PXRoaXMubGljZW5jZVN0YXRlLnZhbHVlLmVkaXRvcl9yb3dzX2FsbG93ZWQpfXJlc2V0RmlsdGVyKCl7dGhpcy5xdWVyeUZpbHRlckNvbXBMaXN0LmZpcnN0JiZ0aGlzLnF1ZXJ5RmlsdGVyQ29tcExp'@;
put 'c3QuZmlyc3QucmVzZXRGaWx0ZXIoKX1vblNob3dVcGxvYWRNb2RhbCgpe3RoaXMucmVzdHJpY3Rpb25zLnJlc3RyaWN0RmlsZVVwbG9hZD90aGlzLmV2ZW50U2VydmljZS5zaG93RGVtb0xpbWl0TW9kYWwoIkZpbGUgVXBsb2FkIik6dGhpcy5jb2x1bW5MZXZlbFNlY3VyaXR5RmxhZz90aGlz'@;
put 'LmV2ZW50U2VydmljZS5zaG93SW5mb01vZGFsKCJJbmZvcm1hdGlvbiIsIlVwbG9hZCBmZWF0dXJlIGlzIGRpc2FibGVkIHdoaWxlIENvbHVtbiBMZXZlbCBTZWN1cml0eSBydWxlcyBhcmUgYWN0aXZlIik6dGhpcy51cGxvYWRQcmV2aWV3fHwodGhpcy5zaG93VXBsb2FkTW9kYWw9ITApfWZp'@;
put 'bGVPdmVyQmFzZShhKXt0aGlzLmhhc0Jhc2VEcm9wWm9uZU92ZXI9YX1hdHRhY2hGaWxlKGEsZD0hMSl7dmFyIGg9dGhpcztjb25zdCBmPWQ/YVswXTphLnRhcmdldC5maWxlc1swXTt0aGlzLmV4Y2VsVXBsb2FkU3RhdGU9IkxvYWRpbmciLHRoaXMuZXhjZWxGaWxlUGFyc2luZz0hMCx0aGlz'@;
put 'LmV4Y2VsRmlsZVJlYWR5PSExLHRoaXMuZmlsZW5hbWU9Zi5uYW1lLHRoaXMuc3ByZWFkc2hlZXRTZXJ2aWNlLnBhcnNlRXhjZWxGaWxlKHtmaWxlOmYsdXBsb2FkZXI6dGhpcy51cGxvYWRlcixkY1ZhbGlkYXRvcjp0aGlzLmRjVmFsaWRhdG9yLGhlYWRlclBrczp0aGlzLmhlYWRlclBrcyxo'@;
put 'ZWFkZXJBcnJheTp0aGlzLmhlYWRlckFycmF5LGhlYWRlclNob3c6dGhpcy5oZWFkZXJTaG93LHRpbWVIZWFkZXJzOnRoaXMudGltZUhlYWRlcnMsZGF0ZUhlYWRlcnM6dGhpcy5kYXRlSGVhZGVycyxkYXRlVGltZUhlYWRlcnM6dGhpcy5kYXRlVGltZUhlYWRlcnMseGxSdWxlczp0aGlzLnhs'@;
put 'UnVsZXMsZW5jb2Rpbmc6dGhpcy5lbmNvZGluZ30sdj0+e3RoaXMuYXBwZW5kVXBsb2FkU3RhdGUodil9LHY9Pnt0aGlzLmV2ZW50U2VydmljZS5zaG93SW5mb01vZGFsKCJUYWJsZSBGb3VuZCIsdil9KS50aGVuKGZ1bmN0aW9uKCl7dmFyIHY9ZWUoZnVuY3Rpb24qKE0pe00mJihoLmV4Y2Vs'@;
put 'RmlsZVJlYWR5PSEwLGgudXBsb2FkZXI9TS51cGxvYWRlcixNLmRhdGEmJk0uaGVhZGVyU2hvdz8oaC5kYXRhPU0uZGF0YSxoLmhlYWRlclNob3c9TS5oZWFkZXJTaG93LGguZ2V0UGVuZGluZ0V4Y2VsUHJldmlldygpKTp5aWVsZCBoLnVwbG9hZFBhcnNlZEZpbGVzKCkpfSk7cmV0dXJuIGZ1'@;
put 'bmN0aW9uKE0pe3JldHVybiB2LmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KCkpLmNhdGNoKHY9Pnt0aGlzLmV2ZW50U2VydmljZS5zaG93QWJvcnRNb2RhbChudWxsLHYsbnVsbCksdGhpcy5zaG93VXBsb2FkTW9kYWw9ITEsdGhpcy51cGxvYWRQcmV2aWV3PSExLHNldFRpbWVvdXQoKCk9Pnt0'@;
put 'aGlzLmZpbGVuYW1lPSIifSl9KS5maW5hbGx5KCgpPT57dGhpcy5leGNlbEZpbGVQYXJzaW5nPSExfSl9c3VibWl0RXhjZWwoKXt0aGlzLmxpY2VuY2VTdGF0ZS52YWx1ZS5zdWJtaXRfcm93c19saW1pdD09PTEvMD90aGlzLnVwbG9hZFBhcnNlZEZpbGVzKCk6dGhpcy5zdWJtaXRMaW1pdE5v'@;
put 'dGljZT0hMH11cGxvYWRQYXJzZWRGaWxlcygpe3ZhciBhPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe2lmKGEuY2hlY2tJbnZhbGlkKCkpcmV0dXJuIHZvaWQgYS5ldmVudFNlcnZpY2Uuc2hvd0Fib3J0TW9kYWwobnVsbCwiSW52YWxpZCB2YWx1ZXMgYXJlIHByZXNlbnQuIik7aWYoYS52'@;
put 'YWxpZGF0ZVByaW1hcnlLZXlzKCksMCE9PWEuZHVwbGljYXRlUGtJbmRleGVzLmxlbmd0aClyZXR1cm4gYS5wa0R1cHM9ITAsdm9pZChhLnN1Ym1pdD0hMSk7YS5wa0R1cHM9ITEsYS51cGxvYWRMb2FkaW5nPSEwO2NvbnN0IGQ9W107Zm9yKGNvbnN0IGggb2YgYS51cGxvYWRlci5xdWV1ZSlk'@;
put 'LnB1c2goe2ZpbGU6aCxmaWxlTmFtZTpoLm5hbWV9KTt5aWVsZCBhLnNhc1NlcnZpY2UudXBsb2FkRmlsZShhLnVwbG9hZFVybCxkLHt0YWJsZTphLmxpYmRzfSkudGhlbihoPT57aWYodHlwZW9mIGguYWRhcHRlclJlc3BvbnNlLnNhc2pzQWJvcnQ+InUiKXtpZih0eXBlb2YgaC5hZGFwdGVy'@;
put 'UmVzcG9uc2Uuc2FzcGFyYW1zPiJ1IilyZXR1cm47e2EudXBsb2FkTG9hZGluZz0hMTtjb25zdCBmPWguYWRhcHRlclJlc3BvbnNlLnNhc3BhcmFtc1swXTthLnN1Y2Nlc3NFbmFibGU9ITAsYS50YWJsZUlkPWYuRFNJRCxhLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKCIvc3RhZ2UvIithLnRhYmxl'@;
put 'SWQpfX1lbHNle2NvbnN0IGY9aC5hZGFwdGVyUmVzcG9uc2Usdj1mLnNhc2pzQWJvcnRbMF0uTVNHLE09Zi5zYXNqc0Fib3J0WzBdLk1BQzthLnVwbG9hZExvYWRpbmc9ITEsYS5maWxlbmFtZT0iIixhLmZpbGVVcGxvYWRJbnB1dENvbXBMaXN0LmZpcnN0JiYoYS5maWxlVXBsb2FkSW5wdXRD'@;
put 'b21wTGlzdC5maXJzdC5uYXRpdmVFbGVtZW50LnZhbHVlPSIiKSxhLnVwbG9hZGVyLnF1ZXVlPVtdLGEuZXZlbnRTZXJ2aWNlLnNob3dBYm9ydE1vZGFsKCIiLHYse1NZU1dBUk5JTkdURVhUOmYuU1lTV0FSTklOR1RFWFQsU1lTRVJST1JURVhUOmYuU1lTRVJST1JURVhULE1BQzpNfSl9fSxo'@;
put 'PT57YS51cGxvYWRMb2FkaW5nPSExLGEuZmlsZVVwbG9hZElucHV0Q29tcExpc3QuZmlyc3QmJihhLmZpbGVVcGxvYWRJbnB1dENvbXBMaXN0LmZpcnN0Lm5hdGl2ZUVsZW1lbnQudmFsdWU9IiIpLGEudXBsb2FkZXIucXVldWU9W10sYS5ldmVudFNlcnZpY2UuY2F0Y2hSZXNwb25zZUVycm9y'@;
put 'KCJmaWxlIHVwbG9hZCIsaC5hZGFwdGVyUmVzcG9uc2UpfSl9KSgpfWdldFBlbmRpbmdFeGNlbFByZXZpZXcoKXt0aGlzLnF1ZXJ5VGV4dFNhdmVkPXRoaXMucXVlcnlUZXh0LHRoaXMucXVlcnlUZXh0PSIiLHRoaXMuZXhjZWxVcGxvYWRTdGF0ZT0iUGFyc2luZyIsdGhpcy50b2dnbGVIb3RQ'@;
put 'bHVnaW4oImNvbnRleHRNZW51IiwhMSk7Y29uc3QgYT1bXTt0aGlzLmRhdGEubWFwKGg9Pntjb25zdCBmPXt9O3RoaXMuaGVhZGVyU2hvdy5tYXAoKHYsTSk9PntmW3ZdPWhbTV19KSxmLl9fX19fREVMRVRFX19USElTX19SRUNPUkRfX19fX3x8KGYuX19fX19ERUxFVEVfX1RISVNfX1JFQ09S'@;
put 'RF9fX19fPSJObyIpLGEucHVzaChmKX0pLHRoaXMuZGF0YVNvdXJjZVVuY2hhbmdlZD10aGlzLmhlbHBlclNlcnZpY2UuZGVlcENsb25lKHRoaXMuZGF0YVNvdXJjZSksdGhpcy5kYXRhU291cmNlPWEsdGhpcy5ob3RUYWJsZS5kYXRhPWE7Y29uc3QgZD10aGlzLmhvdEluc3RhbmNlO3RoaXMu'@;
put 'ZXhjZWxVcGxvYWRTdGF0ZT0iVmFsaWRhdGluZy1IT1QiLGQudXBkYXRlU2V0dGluZ3Moe2RhdGE6dGhpcy5kYXRhU291cmNlLG1heFJvd3M6MS8wfSwhMSksZC5yZW5kZXIoKSx0aGlzLmFwcGVuZFVwbG9hZFN0YXRlKCJWYWxpZGF0aW5nIHJvd3MiKSxkLnZhbGlkYXRlQ2VsbHMoKCk9Pnt0'@;
put 'aGlzLnNob3dVcGxvYWRNb2RhbD0hMSx0aGlzLnVwbG9hZFByZXZpZXc9ITAsdGhpcy5leGNlbEZpbGVQYXJzaW5nPSExLHRoaXMuZXhjZWxVcGxvYWRTdGF0ZT1udWxsfSl9ZGlzY2FyZFBlbmRpbmdFeGNlbChhKXt0aGlzLmhvdEluc3RhbmNlLnVwZGF0ZVNldHRpbmdzKHttYXhSb3dzOnRo'@;
put 'aXMubGljZW5jZVN0YXRlLnZhbHVlLmVkaXRvcl9yb3dzX2FsbG93ZWR9KSxhJiZ0aGlzLmNhbmNlbEVkaXQoKSx0aGlzLmZpbGVVcGxvYWRJbnB1dENvbXBMaXN0LmZpcnN0JiYodGhpcy5maWxlVXBsb2FkSW5wdXRDb21wTGlzdC5maXJzdC5uYXRpdmVFbGVtZW50LnZhbHVlPSIiKSx0aGlz'@;
put 'LnVwbG9hZFByZXZpZXc9ITEsdGhpcy5leGNlbEZpbGVSZWFkeT0hMSx0aGlzLnVwbG9hZGVyLnF1ZXVlPVtdLGlzTmFOKHBhcnNlSW50KHRoaXMucm91dGVyLnVybC5zcGxpdCgiLyIpLnBvcCgpfHwiIikpfHx0aGlzLnF1ZXJ5VGV4dFNhdmVkLmxlbmd0aD4wJiYodGhpcy5xdWVyeVRleHQ9'@;
put 'dGhpcy5xdWVyeVRleHRTYXZlZCx0aGlzLnF1ZXJ5VGV4dFNhdmVkPSIiKX1wcmV2aWV3VGFibGVFZGl0Q29uZmlybSgpe3RoaXMuZGlzY2FyZFBlbmRpbmdFeGNlbCgpLHRoaXMuY29udmVydFRvQ29ycmVjdFR5cGVzKHRoaXMuZGF0YVNvdXJjZSksdGhpcy5lZGl0VGFibGUoITApfWFwcGVu'@;
put 'ZFVwbG9hZFN0YXRlKGEsZD0hMSl7dGhpcy5jZGYuZGV0ZWN0Q2hhbmdlcygpLHRoaXMudXBsb2FkU3RhdGVyQ29tcExpc3QuZmlyc3QmJihkP3RoaXMudXBsb2FkU3RhdGVyQ29tcExpc3QuZmlyc3QucmVwbGFjZUxhc3RTdGF0ZShhKTp0aGlzLnVwbG9hZFN0YXRlckNvbXBMaXN0LmZpcnN0'@;
put 'LmFwcGVuZFN0YXRlKGEpKX1pc0NvbFBrKGEpe3JldHVybiB0aGlzLmhlYWRlclBrcy5pbmRleE9mKGEpPi0xfWlzUmVhZG9ubHlDb2woYSl7cmV0dXJuIHRoaXMuZGNWYWxpZGF0b3I/LmdldFJ1bGUoYSk/LnJlYWRPbmx5fWlzQ29sSGVhZGVyKGEpe3JldHVybiB0aGlzLmhlYWRlckFycmF5'@;
put 'LmluZGV4T2YoYS50b1VwcGVyQ2FzZSgpKT4tMX1yZW1vdmVRdWVyeSgpe3RoaXMuc2FzU3RvcmVTZXJ2aWNlLnJlbW92ZUNsYXVzZSgpfXNlbmRDbGF1c2UoKXt2YXIgYT10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXthLnN1Ym1pdExvYWRpbmc9ITA7bGV0IGQ9W107Y29uc3QgaD1bXTtp'@;
put 'Zih0eXBlb2YgYS5jbGF1c2VzPiJ1IilyZXR1cm4gYS5udWxsVmFyaWFibGVzPSEwLHZvaWQoYS5zdWJtaXRMb2FkaW5nPSExKTt7Y29uc3QgZj1hLmNsYXVzZXMucXVlcnlPYmo7aWYoZlswXS5lbGVtZW50cy5sZW5ndGg8MSlyZXR1cm4oImhvbWUiPT09S24ucm9vdFBhcmFtfHwiZWRpdG9y'@;
put 'Ij09PUtuLnJvb3RQYXJhbSkmJihLbi5lZGl0b3IuZmlsdGVyLmNsYXVzZXM9W10sS24uZWRpdG9yLmZpbHRlci5xdWVyeT1bXSxLbi5lZGl0b3IuZmlsdGVyLmdyb3VwTG9naWM9IiIpLHZvaWQgYS5yb3V0ZXIubmF2aWdhdGUoWyIvZWRpdG9yLyIrYS5saWJkc10se3F1ZXJ5UGFyYW1zSGFu'@;
put 'ZGxpbmc6InByZXNlcnZlIn0pO2ZvcihsZXQgdj0wO3Y8Zi5sZW5ndGg7disrKXtjb25zdCBNPWZbdl0uZWxlbWVudHM7ZD1NLmZpbHRlcihmdW5jdGlvbihEKXtyZXR1cm4gbnVsbD09PUQudmFyaWFibGV9KSxkLmxlbmd0aCYmaC5wdXNoKE0pfX1pZihoLmxlbmd0aClyZXR1cm4gYS5udWxs'@;
put 'VmFyaWFibGVzPSEwLHZvaWQoYS5zdWJtaXRMb2FkaW5nPSExKTt0cnl7aWYodm9pZCAwIT09YS5jbGF1c2VzJiZhLmxpYmRzKXtjb25zdCBmPXtncm91cExvZ2ljOmEuY2xhdXNlcy5ncm91cExvZ2ljLGZpbHRlckdyb3VwczpbXX07YS5jbGF1c2VzLnF1ZXJ5T2JqLmZvckVhY2goTT0+e2Nv'@;
put 'bnN0IEQ9e2ZpbHRlckNsYXVzZXM6W119O00uZWxlbWVudHMuZm9yRWFjaChaPT57RC5maWx0ZXJDbGF1c2VzLnB1c2goYS5oZWxwZXJTZXJ2aWNlLmRlZXBDbG9uZShaKSl9KSxELmNsYXVzZUxvZ2ljPU0uY2xhdXNlTG9naWMsZi5maWx0ZXJHcm91cHMucHVzaChhLmhlbHBlclNlcnZpY2Uu'@;
put 'ZGVlcENsb25lKEQpKX0pO2NvbnN0IHY9YS5zYXNTdG9yZVNlcnZpY2UuY3JlYXRlRmlsdGVyUXVlcnlUYWJsZShmKTt5aWVsZCBhLnNhc1N0b3JlU2VydmljZS5zYXZlUXVlcnkoYS5saWJkcyx2KS50aGVuKE09PnthLnF1ZXJ5RmlsdGVyPXtpZDpNLnJlc3VsdFswXS5GSUxURVJfUkssdGFi'@;
put 'bGU6TS5yZXN1bHRbMF0uRklMVEVSX1RBQkxFfSxhLnJvdXRlci5uYXZpZ2F0ZShbIi8iXSx7c2tpcExvY2F0aW9uQ2hhbmdlOiEwLHF1ZXJ5UGFyYW1zSGFuZGxpbmc6InByZXNlcnZlIn0pLnRoZW4oKCk9PmEucm91dGVyLm5hdmlnYXRlKFsiL2VkaXRvci8iK2EucXVlcnlGaWx0ZXIudGFi'@;
put 'bGUrIi8iK2EucXVlcnlGaWx0ZXIuaWRdLHtxdWVyeVBhcmFtc0hhbmRsaW5nOiJwcmVzZXJ2ZSJ9KSksYS5maWx0ZXI9ITF9KS5jYXRjaChNPT57YS5zdWJtaXRMb2FkaW5nPSExfSl9fWNhdGNoKGYpe2EucXVlcnlFcnI9ITAsYS5zdWJtaXRMb2FkaW5nPSExLGEucXVlcnlFcnJNZXNzYWdl'@;
put 'PWZ9fSkoKX1vcGVuUWIoKXt0aGlzLmxpYmRzJiYodGhpcy5maWx0ZXI9ITAsdGhpcy5jZGYuZGV0ZWN0Q2hhbmdlcygpLHRoaXMuc3VibWl0TG9hZGluZz0hMSx0aGlzLnNhc1N0b3JlU2VydmljZS5zZXRRdWVyeVZhcmlhYmxlcyh0aGlzLmxpYmRzLHRoaXMuY29scykpfWVkaXRUYWJsZShh'@;
put 'LGQpe3RoaXMudG9nZ2xlSG90UGx1Z2luKCJjb250ZXh0TWVudSIsITApO2NvbnN0IGg9dGhpcy5ob3RJbnN0YW5jZSxmPWguZ2V0UGx1Z2luKCJtdWx0aUNvbHVtblNvcnRpbmciKSx2PWYuZ2V0U29ydENvbmZpZygpLE09QXJyYXkuaXNBcnJheSh2KT92Olt2XTtzZXRUaW1lb3V0KCgpPT57'@;
put 'YXx8KHRoaXMuZGF0YVNvdXJjZVVuY2hhbmdlZD10aGlzLmhlbHBlclNlcnZpY2UuZGVlcENsb25lKHRoaXMuZGF0YVNvdXJjZSksZCYmdGhpcy5kYXRhU291cmNlVW5jaGFuZ2VkLnBvcCgpKSx0aGlzLmhvdFRhYmxlLnJlYWRPbmx5PSExLHRoaXMuaG90VGFibGUuZGF0YT10aGlzLmRhdGFT'@;
put 'b3VyY2UsaC51cGRhdGVTZXR0aW5ncyh7cmVhZE9ubHk6dGhpcy5ob3RUYWJsZS5yZWFkT25seX0sITEpLGgucmVuZGVyKCk7Zm9yKGNvbnN0IEQgb2YgTSlmLnNvcnQoRCk7dGhpcy5yZVNldENlbGxWYWxpZGF0aW9uVmFsdWVzKCl9LDApfWNvbnZlcnRUb0NvcnJlY3RUeXBlcyhhKXtmb3Io'@;
put 'Y29uc3QgZCBvZiBhKWZvcihjb25zdCBoIGluIGQpe2NvbnN0IGY9dGhpcy5jb2xzLmZpbmQodj0+di5OQU1FPT09aCk7ZiYmIiIhPT1kW2hdJiYibnVtIj09PWYuVFlQRSYmIWYuRERUWVBFLmluY2x1ZGVzKCJUSU1FIikmJiFmLkREVFlQRS5pbmNsdWRlcygiREFURSIpJiYoZFtoXT1wYXJz'@;
put 'ZUludChkW2hdKSl9fWNhbmNlbEVkaXQoKXt0aGlzLnRvZ2dsZUhvdFBsdWdpbigiY29udGV4dE1lbnUiLCExKSx0aGlzLmNlbGxWYWxpZGF0aW9uU291cmNlPVtdO2NvbnN0IGE9dGhpcy5ob3RJbnN0YW5jZSxkPWEuZ2V0UGx1Z2luKCJtdWx0aUNvbHVtblNvcnRpbmciKSxoPWQuZ2V0U29y'@;
put 'dENvbmZpZygpLGY9QXJyYXkuaXNBcnJheShoKT9oOltoXTt0aGlzLmRhdGFTb3VyY2VVbmNoYW5nZWQmJih0aGlzLmRhdGFTb3VyY2U9dGhpcy5oZWxwZXJTZXJ2aWNlLmRlZXBDbG9uZSh0aGlzLmRhdGFTb3VyY2VVbmNoYW5nZWQpKSx0aGlzLmhvdFRhYmxlLmRhdGE9dGhpcy5kYXRhU291'@;
put 'cmNlLHRoaXMuaG90VGFibGUucmVhZE9ubHk9ITAsYS51cGRhdGVTZXR0aW5ncyh7cmVhZE9ubHk6dGhpcy5ob3RUYWJsZS5yZWFkT25seSxkYXRhOnRoaXMuZGF0YVNvdXJjZX0sITEpLGEudmFsaWRhdGVSb3dzKHRoaXMubW9kaWZlZFJvd3NJbmRleGVzKTtmb3IoY29uc3QgdiBvZiBmKWQu'@;
put 'c29ydCh2KTt0aGlzLmNoZWNrUm93TGltaXQoKX1ob3RDbGlja2VkKCl7MT09PXRoaXMudGltZXNDbGlja2VkJiZ0aGlzLmhvdFRhYmxlLnJlYWRPbmx5JiZ0aGlzLmVkaXRUYWJsZSgpLDA9PT10aGlzLnRpbWVzQ2xpY2tlZCYmKHRoaXMudGltZXNDbGlja2VkKyssc2V0VGltZW91dCgoKT0+'@;
put 'e3RoaXMudGltZXNDbGlja2VkPTB9LDIwMCkpfWNsZWFuRXhjZWVkKCl7dGhpcy5leGNlZWRDZWxscz1bXX1hcHByb3ZlcnNUb2dnbGUoKXt0aGlzLnNob3dBcHByb3ZlcnM9IXRoaXMuc2hvd0FwcHJvdmVyc31hZGRSb3coKXt0aGlzLmFkZGluZ05ld1Jvdz0hMCxzZXRUaW1lb3V0KCgpPT57'@;
put 'Y29uc3QgYT10aGlzLmhvdEluc3RhbmNlLGQ9dGhpcy5kYXRhU291cmNlLmxlbmd0aDthLmFsdGVyKCJpbnNlcnRfcm93X2JlbG93IixkLDEpLGEudXBkYXRlU2V0dGluZ3Moe2RhdGE6dGhpcy5kYXRhU291cmNlfSwhMSksYS5zZWxlY3RDZWxsKHRoaXMuZGF0YVNvdXJjZS5sZW5ndGgtMSww'@;
put 'KSxhLnJlbmRlcigpLHRoaXMuZGF0YVNvdXJjZVtkXSYmKHRoaXMuZGF0YVNvdXJjZVtkXS5ub0xpbmtPcHRpb249ITApLHRoaXMuYWRkaW5nTmV3Um93PSExLHRoaXMucmVTZXRDZWxsVmFsaWRhdGlvblZhbHVlcygpfSl9Y2FuY2VsU3VibWl0KCl7dGhpcy5kYXRhU291cmNlPXRoaXMuaGVs'@;
put 'cGVyU2VydmljZS5kZWVwQ2xvbmUodGhpcy5kYXRhU291cmNlQmVmb3JlU3VibWl0KSx0aGlzLmRhdGFTb3VyY2VCZWZvcmVTdWJtaXQ9W10sdGhpcy5ob3RUYWJsZS5kYXRhPXRoaXMuZGF0YVNvdXJjZTtjb25zdCBhPXRoaXMuaG90SW5zdGFuY2U7YS51cGRhdGVTZXR0aW5ncyh7ZGF0YTp0'@;
put 'aGlzLmRhdGFTb3VyY2UsY29sSGVhZGVyczp0aGlzLmhlYWRlckNvbHVtbnMsY29sdW1uczp0aGlzLmNlbGxWYWxpZGF0aW9uLG1vZGlmeUNvbFdpZHRoOmZ1bmN0aW9uKGQsaCl7cmV0dXJuIDA9PT1oPzYwOmQ+NTAwPzUwMDpkfX0sITEpLGEuc2VsZWN0Q2VsbCgwLDApLGEucmVuZGVyKCks'@;
put 'YS52YWxpZGF0ZVJvd3ModGhpcy5tb2RpZmVkUm93c0luZGV4ZXMpLHRoaXMucmVTZXRDZWxsVmFsaWRhdGlvblZhbHVlcygpfWdldFJvd3NTdWJtaXR0aW5nQ291bnQoKXt0aGlzLnNhc1NlcnZpY2UuZ2V0U2FzanNDb25maWcoKS5kZWJ1ZyYmKHRoaXMubG9nZ2VyU2VydmljZS5sb2codGhp'@;
put 'cy5kYXRhU291cmNlKSx0aGlzLmxvZ2dlclNlcnZpY2UubG9nKHRoaXMuZGF0YVNvdXJjZVVuY2hhbmdlZCkpO2xldCBhPTAsZD0wLGg9MDt0aGlzLm1vZGlmZWRSb3dzSW5kZXhlcz1bXSx0aGlzLmRhdGFNb2RpZmllZD1bXTtmb3IobGV0IGY9MDtmPHRoaXMuZGF0YVNvdXJjZS5sZW5ndGg7'@;
put 'ZisrKXtjb25zdCB2PXRoaXMuaGVscGVyU2VydmljZS5kZWVwQ2xvbmUodGhpcy5kYXRhU291cmNlW2ZdKTtpZigiWWVzIj09PXYuX19fX19ERUxFVEVfX1RISVNfX1JFQ09SRF9fX19fKXRoaXMuZGF0YU1vZGlmaWVkLnB1c2godiksZCsrO2Vsc2V7Y29uc3QgTT10aGlzLmRhdGFTb3VyY2VV'@;
put 'bmNoYW5nZWQuZmluZChEPT57Zm9yKGNvbnN0IFogb2YgdGhpcy5oZWFkZXJQa3MpaWYoRFtaXSE9PXZbWl0pcmV0dXJuITE7cmV0dXJuITB9KTtNP0pTT04uc3RyaW5naWZ5KHYpIT09SlNPTi5zdHJpbmdpZnkoTSkmJih0aGlzLmRhdGFNb2RpZmllZC5wdXNoKHYpLHRoaXMubW9kaWZlZFJv'@;
put 'd3NJbmRleGVzLnB1c2goZiksYSsrKToodGhpcy5kYXRhTW9kaWZpZWQucHVzaCh2KSx0aGlzLm1vZGlmZWRSb3dzSW5kZXhlcy5wdXNoKGYpLGgrKyl9fXRoaXMucm93c0NoYW5nZWQ9e3Jvd3NVcGRhdGVkOmEscm93c0RlbGV0ZWQ6ZCxyb3dzQWRkZWQ6aH19dmFsaWRhdGVQcmltYXJ5S2V5'@;
put 'cygpe2NvbnN0IGE9dGhpcy5ob3RJbnN0YW5jZSxkPWEuZ2V0RGF0YSgpO3RoaXMucGtGaWVsZHM9W107Zm9yKGxldCBNPTA7TTxkLmxlbmd0aDtNKyspe2xldCBEPSIiO2ZvcihsZXQgWj0xO1o8dGhpcy5yZWFkT25seUZpZWxkcysxO1orKylEPUQrInwiK2RbTV1bWl07dGhpcy5wa0ZpZWxk'@;
put 'cy5wdXNoKEQpfWNvbnN0IGg9W10sZj10aGlzLmRhdGFTb3VyY2UubGVuZ3RoO2ZvcihsZXQgTT0wO008dGhpcy5wa0ZpZWxkcy5sZW5ndGg7TSsrKWZvcihsZXQgRD0wO0Q8dGhpcy5wa0ZpZWxkcy5sZW5ndGg7RCsrKXRoaXMucGtGaWVsZHNbTV09PT10aGlzLnBrRmllbGRzW0RdJiZEIT09'@;
put 'TSYmaC5wdXNoKEQpO2lmKHRoaXMucGtGaWVsZHMubGVuZ3RoPmYpZm9yKGxldCBNPWY7TTx0aGlzLnBrRmllbGRzLmxlbmd0aDtNKyspZm9yKGxldCBEPWY7RDx0aGlzLnBrRmllbGRzLmxlbmd0aDtEKyspTTxEJiZ0aGlzLnBrRmllbGRzW01dPT09dGhpcy5wa0ZpZWxkc1tEXSYmaC5wdXNo'@;
put 'KEQpO2xldCB2O2ZvcihsZXQgTT0wO008aC5sZW5ndGg7TSsrKWZvcihsZXQgRD0xO0Q8dGhpcy5yZWFkT25seUZpZWxkcysxO0QrKyl2PWEuZ2V0Q2VsbE1ldGEoaFtNXSxEKSx2LnZhbGlkPSExLHYuZHVwS2V5PSEwLGEucmVuZGVyKCk7dGhpcy5kdXBsaWNhdGVQa0luZGV4ZXM9Wy4uLm5l'@;
put 'dyBTZXQoaC5zb3J0KCkpXX1yZVNldENlbGxWYWxpZGF0aW9uVmFsdWVzKGE9ITEsZCl7Y29uc3QgaD10aGlzLmhvdEluc3RhbmNlO2Zvcihjb25zdCBmIG9mIHRoaXMuY2VsbFZhbGlkYXRpb25Tb3VyY2Upe2NvbnN0IHY9Zi52YWx1ZXMubWFwKE09Pk1bdGhpcy5jZWxsVmFsaWRhdGlvbkZp'@;
put 'ZWxkcy5SQVdfVkFMVUVdKTtoLmJhdGNoKCgpPT57Y29uc3QgTT1oLmdldENlbGxNZXRhKGYucm93LGYuY29sKSxEPXRoaXMuZGNWYWxpZGF0b3I/LmdldFJ1bGUoTS5kYXRhfHwiIik7bGV0IFo7RCYmKFo9dGhpcy5kY1ZhbGlkYXRvcj8uZ2V0RHFEcm9wZG93blNvdXJjZShEKSksWnx8KFo9'@;
put 'W10pO2NvbnN0IHJlPVsuLi5uZXcgU2V0KFsuLi5aLC4uLnZdKV07dGhpcy5jdXJyZW50RWRpdFJlY29yZFZhbGlkYXRvcj8udXBkYXRlUnVsZShmLmNvbCx7c291cmNlOnJlfSksaC5zZXRDZWxsTWV0YShmLnJvdyxmLmNvbCwic291cmNlIixyZSksZi52YWx1ZXMubGVuZ3RoPjAmJihoLnNl'@;
put 'dENlbGxNZXRhKGYucm93LGYuY29sLCJyZW5kZXJlciIsImF1dG9jb21wbGV0ZSIpLGguc2V0Q2VsbE1ldGEoZi5yb3csZi5jb2wsImVkaXRvciIsImF1dG9jb21wbGV0ZS5jdXN0b20iKSxoLnNldENlbGxNZXRhKGYucm93LGYuY29sLCJzdHJpY3QiLGYuc3RyaWN0KSxoLnNldENlbGxNZXRh'@;
put 'KGYucm93LGYuY29sLCJmaWx0ZXIiLCExKSx0aGlzLmN1cnJlbnRFZGl0UmVjb3JkVmFsaWRhdG9yPy51cGRhdGVSdWxlKGYuY29sLHtyZW5kZXJlcjoiYXV0b2NvbXBsZXRlIixlZGl0b3I6ImF1dG9jb21wbGV0ZS5jdXN0b20iLHN0cmljdDpmLnN0cmljdCxmaWx0ZXI6ITF9KSksdGhpcy5y'@;
put 'ZVNldEV4dGVuZGVkQ2VsbFZhbGlkYXRpb25WYWx1ZXMoZix2b2lkIDAsYSxkKSxoLnJlbmRlcigpfSl9fXJlU2V0RXh0ZW5kZWRDZWxsVmFsaWRhdGlvblZhbHVlcyhhLGQsaD0hMSxmKXtpZihhKXtkfHwoZD1hLnJvdyk7Y29uc3QgTT10aGlzLmdldEV4dGVuZGVkVmFsdWVzQnlDZWxsVmFs'@;
put 'dWUoYSk7dGhpcy5zZXRFeHRlbmRlZFZhbHVlc1RvQ2VsbHMoYSxkLE0saCxmKX1lbHNlIGZvcihjb25zdCBNIG9mIHRoaXMuY2VsbFZhbGlkYXRpb25Tb3VyY2Upe2NvbnN0IEQ9dGhpcy5nZXRFeHRlbmRlZFZhbHVlc0J5Q2VsbFZhbHVlKE0pO3RoaXMuc2V0RXh0ZW5kZWRWYWx1ZXNUb0Nl'@;
put 'bGxzKE0sTS5yb3csRCxoLGYpfX1zZXRFeHRlbmRlZFZhbHVlc1RvQ2VsbHMoYSxkLGgsZj0hMSx2KXtjb25zdCBNPXRoaXMuaG90SW5zdGFuY2UsRD1bXTtmb3IoY29uc3QgWiBvZiBoKUQuaW5kZXhPZihaLkVYVFJBX0NPTF9OQU1FKTwwJiZELnB1c2goWi5FWFRSQV9DT0xfTkFNRSk7Zm9y'@;
put 'KGNvbnN0IFogb2YgRCl7Y29uc3QgcmU9aC5maWx0ZXIoZHQ9PmR0LkVYVFJBX0NPTF9OQU1FPT09Wik7bGV0IGNlPXJlLm1hcChkdD0+IkMiPT09ZHQuRElTUExBWV9UWVBFP2R0LlJBV19WQUxVRV9DSEFSOmR0LlJBV19WQUxVRV9OVU0pO2NvbnN0IGJlPU0ucHJvcFRvQ29sKFopO3RoaXMu'@;
put 'ZGlzYWJsZWRCYXNpY0R5bmFtaWNDZWxsVmFsaWRhdGlvbk1hcC5maW5kKGR0PT5kdC5yb3c9PT1kJiZkdC5jb2w9PT1iZSl8fHRoaXMuZGlzYWJsZWRCYXNpY0R5bmFtaWNDZWxsVmFsaWRhdGlvbk1hcC5wdXNoKHtyb3c6ZCxjb2w6YmUsYWN0aXZlOiExfSksTS5zZXRDZWxsTWV0YShkLGJl'@;
put 'LCJyZW5kZXJlciIsImF1dG9jb21wbGV0ZSIpLE0uc2V0Q2VsbE1ldGEoZCxiZSwiZWRpdG9yIiwiYXV0b2NvbXBsZXRlLmN1c3RvbSIpLE0uc2V0Q2VsbE1ldGEoZCxiZSwic3RyaWN0IixhLnN0cmljdCksTS5zZXRDZWxsTWV0YShkLGJlLCJmaWx0ZXIiLCExKSx0aGlzLmN1cnJlbnRFZGl0'@;
put 'UmVjb3JkVmFsaWRhdG9yPy51cGRhdGVSdWxlKGJlLHtyZW5kZXJlcjoiYXV0b2NvbXBsZXRlIixlZGl0b3I6ImF1dG9jb21wbGV0ZS5jdXN0b20iLHN0cmljdDphLnN0cmljdCxmaWx0ZXI6ITF9KTtjb25zdCBCZT1NLmdldENlbGxNZXRhKGQsYmUpLHFlPXRoaXMuZGNWYWxpZGF0b3I/Lmdl'@;
put 'dFJ1bGUoQmUuZGF0YXx8IiIpO2xldCBydDtxZSYmKHJ0PXRoaXMuZGNWYWxpZGF0b3I/LmdldERxRHJvcGRvd25Tb3VyY2UocWUpKSxydHx8KHJ0PVtdKSwibnVtZXJpYyI9PT1xZT8udHlwZT8ocnQ9dGhpcy5oZWxwZXJTZXJ2aWNlLmNvbnZlcnRBcnJheVZhbHVlcyhydCwibnVtYmVyIiks'@;
put 'Y2U9dGhpcy5oZWxwZXJTZXJ2aWNlLmNvbnZlcnRBcnJheVZhbHVlcyhjZSwibnVtYmVyIikpOihydD10aGlzLmhlbHBlclNlcnZpY2UuY29udmVydEFycmF5VmFsdWVzKHJ0LCJzdHJpbmciKSxjZT10aGlzLmhlbHBlclNlcnZpY2UuY29udmVydEFycmF5VmFsdWVzKGNlLCJzdHJpbmciKSk7'@;
put 'Y29uc3QgcHQ9Wy4uLm5ldyBTZXQoWy4uLnJ0LC4uLmNlXSldO2lmKE0uc2V0Q2VsbE1ldGEoZCxiZSwic291cmNlIixwdCksdGhpcy5jdXJyZW50RWRpdFJlY29yZFZhbGlkYXRvcj8udXBkYXRlUnVsZShiZSx7c291cmNlOnB0fSksZil7aWYodiYmdiE9PWQpcmV0dXJuO2NvbnN0IGR0PXJl'@;
put 'LmZpbmQoSnQ9PjE9PT1KdC5GT1JDRV9GTEFHKTtkdCYmc2V0VGltZW91dCgoKT0+e00uc2V0RGF0YUF0Q2VsbChkLGJlLCJDIj09PWR0LkRJU1BMQVlfVFlQRT9kdC5SQVdfVkFMVUVfQ0hBUjpkdC5SQVdfVkFMVUVfTlVNLCJmb3JjZV9jZWxsX3ZhbGlkYXRpb25fdmFsdWUiKSx0aGlzLmN1'@;
put 'cnJlbnRFZGl0UmVjb3JkSW5kZXg9PT1kJiYodGhpcy5kYXRhU291cmNlW3RoaXMuY3VycmVudEVkaXRSZWNvcmRJbmRleF1bWl09IkMiPT09ZHQuRElTUExBWV9UWVBFP2R0LlJBV19WQUxVRV9DSEFSOmR0LlJBV19WQUxVRV9OVU0pfSl9fX1nZXRFeHRlbmRlZFZhbHVlc0J5Q2VsbFZhbHVl'@;
put 'KGEsZCl7Y29uc3QgZj10aGlzLmhvdEluc3RhbmNlLmdldERhdGFBdENlbGwoZHx8YS5yb3csYS5jb2wpLHY9KGEudmFsdWVzLmZpbmQocmU9PnJlW3RoaXMuY2VsbFZhbGlkYXRpb25GaWVsZHMuUkFXX1ZBTFVFXT09PWYpfHxbXSlbdGhpcy5jZWxsVmFsaWRhdGlvbkZpZWxkcy5ESVNQTEFZ'@;
put 'X0lOREVYXSxNPWEuZXh0ZW5kZWRfdmFsdWVzPy5maWx0ZXIocmU9PnJlWzBdPT09diksRD10aGlzLmhlbHBlclNlcnZpY2UuZGVlcENsb25lKHRoaXMuZXh0ZW5kZWRDZWxsVmFsaWRhdGlvbkZpZWxkcyksWj1bXTtmb3IoY29uc3QgcmUgb2YgTXx8W10pe2NvbnN0IGNlPXt9O2Zvcihjb25z'@;
put 'dCBiZSBvZiBPYmplY3Qua2V5cyhEKSljZVtiZV09cmVbRFtiZV1dO1oucHVzaChjZSl9cmV0dXJuIFp9Y2hlY2tTYXZlKCl7aWYodGhpcy5nZXRSb3dzU3VibWl0dGluZ0NvdW50KCksMD09PXRoaXMucm93c0NoYW5nZWQucm93c0FkZGVkJiYwPT09dGhpcy5yb3dzQ2hhbmdlZC5yb3dzVXBk'@;
put 'YXRlZCYmMD09PXRoaXMucm93c0NoYW5nZWQucm93c0RlbGV0ZWQpcmV0dXJuIHRoaXMuYmFkRWRpdFRpdGxlPSJObyBjaGFuZ2VzIHRvIHN1Ym1pdCIsdGhpcy5iYWRFZGl0Q2F1c2U9IlBsZWFzZSBtb2RpZnkgc29tZSB2YWx1ZXMgYW5kIHRyeSBhZ2Fpbi4iLHZvaWQodGhpcy5iYWRFZGl0'@;
put 'PSEwKTtjb25zdCBhPXRoaXMuaG90SW5zdGFuY2U7dGhpcy5kYXRhU291cmNlQmVmb3JlU3VibWl0PXRoaXMuaGVscGVyU2VydmljZS5kZWVwQ2xvbmUodGhpcy5kYXRhU291cmNlKTtmb3IobGV0IGg9MDtoPHRoaXMuZGF0YVNvdXJjZS5sZW5ndGg7aCsrKWRlbGV0ZSB0aGlzLmRhdGFTb3Vy'@;
put 'Y2VbaF0ubm9MaW5rT3B0aW9uO2EudXBkYXRlU2V0dGluZ3Moe2RhdGE6dGhpcy5kYXRhU291cmNlLGNvbEhlYWRlcnM6dGhpcy5oZWFkZXJDb2x1bW5zLGNvbHVtbnM6dGhpcy5jZWxsVmFsaWRhdGlvbixtb2RpZnlDb2xXaWR0aDpmdW5jdGlvbihoLGYpe3JldHVybiBoPjUwMD81MDA6aH19'@;
put 'LCExKSx0aGlzLnJlU2V0Q2VsbFZhbGlkYXRpb25WYWx1ZXMoKSxjLmNudD0wLGMubm9uUGtDbnQ9MDtjb25zdCBkPWEuZ2V0RGF0YSgpO2lmKGQubGVuZ3RoPjEmJmEuaXNFbXB0eVJvdyhkLmxlbmd0aC0xKSYmYS5hbHRlcigicmVtb3ZlX3JvdyIsZC5sZW5ndGgtMSksdGhpcy52YWxpZGF0'@;
put 'ZVByaW1hcnlLZXlzKCksMCE9PXRoaXMuZHVwbGljYXRlUGtJbmRleGVzLmxlbmd0aClyZXR1cm4gdGhpcy5wa0R1cHM9ITAsdGhpcy5zdWJtaXQ9ITEsdm9pZCB0aGlzLmNhbmNlbFN1Ym1pdCgpO3RoaXMucGtEdXBzPSExLGEudmFsaWRhdGVSb3dzKHRoaXMubW9kaWZlZFJvd3NJbmRleGVz'@;
put 'LCgpPT57dGhpcy5jaGVja0ludmFsaWQoKT90aGlzLmV2ZW50U2VydmljZS5zaG93SW5mb01vZGFsKCJWYWxpZGF0aW9uIGVycm9yIiwiSW52YWxpZCBWYWx1ZXMgYXJlIFByZXNlbnQiKToodGhpcy5zdWJtaXQ9ITAsdGhpcy52YWxpZGF0aW9uRG9uZT0xLHNldFRpbWVvdXQoKCk9Pntjb25z'@;
put 'dCBoPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJmb3JtRmllbGRzXzgiKTtoJiZoLmZvY3VzKCl9LDIwMCkpfSl9c2F2ZVRhYmxlKGEpe3ZhciBkPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe2lmKGQuaG90SW5zdGFuY2UuZ2V0RGF0YSgpLGE9KGE9YS5maWx0ZXIodj0+ISFkLmRhdGFN'@;
put 'b2RpZmllZC5maW5kKEQ9Pntmb3IoY29uc3QgWiBvZiBkLmhlYWRlclBrcylpZihEW1pdIT09dltaXSlyZXR1cm4hMTtyZXR1cm4hMH0pKSkubWFwKHY9Pntjb25zdCBNPXYuX19fX19ERUxFVEVfX1RISVNfX1JFQ09SRF9fX19fO3JldHVybiBkZWxldGUgdi5fX19fX0RFTEVURV9fVEhJU19f'@;
put 'UkVDT1JEX19fX18sdi5fX19fX0RFTEVURV9fVEhJU19fUkVDT1JEX19fX189TSxPYmplY3Qua2V5cyh2KS5tYXAoRD0+eyJudW1lcmljIj09PWQuZGNWYWxpZGF0b3I/LmdldFJ1bGUoRCk/LnR5cGUmJiIuIj09PXZbRF0mJih2W0RdPW51bGwpfSksdn0pLGQubG9nZ2VyU2VydmljZS5sb2co'@;
put 'IkRhdGEgc3VibWl0dGVkIixhKSxkLmNoZWNrSW52YWxpZCgpKXJldHVybiBkLmV2ZW50U2VydmljZS5zaG93SW5mb01vZGFsKCJWYWxpZGF0aW9uIGVycm9yIiwiSW52YWxpZCBWYWx1ZXMgYXJlIFByZXNlbnQiKSxkLmNhbmNlbFN1Ym1pdCgpLHZvaWQoZC5zdWJtaXQ9ITEpO2lmKGQudmFs'@;
put 'aWRhdGlvbkRvbmU9MCxkLnNhdmVMb2FkaW5nPSEwLGMuY250PDEmJjA9PT1kLmR1cGxpY2F0ZVBrSW5kZXhlcy5sZW5ndGgmJmMubm9uUGtDbnQ8MSl7ZC5zYXZlTG9hZGluZz0hMCxkLmRpc2FibGVTdWJtaXQ9ITEsZC5zdWJtaXQ9ITA7Y29uc3Qgdj17QUNUSU9OOiJMT0FEIn07aWYoZC5t'@;
put 'ZXNzYWdlPWQubWVzc2FnZS5yZXBsYWNlKC9cbi9nLCIuICIpLHYuTUVTU0FHRT1kLm1lc3NhZ2Usdi5MSUJEUz1kLmxpYmRzLGQuY29scyl7Y29uc3QgTT1hLnNsaWNlKDAsZC5saWNlbmNlU3RhdGUudmFsdWUuc3VibWl0X3Jvd3NfbGltaXQpO2lmKHlpZWxkIGQuc2FzU3RvcmVTZXJ2aWNl'@;
put 'LnVwZGF0ZVRhYmxlKHYsTSwiU0FTQ29udHJvbFRhYmxlIiwiZWRpdG9ycy9zdGFnZWRhdGEiLGQuJGRhdGFGb3JtYXRzKS50aGVuKFo9PntpZih0eXBlb2YgWi5hZGFwdGVyUmVzcG9uc2Uuc2FzcGFyYW1zPCJ1IilyZXR1cm4gZC5yb3V0ZXIubmF2aWdhdGVCeVVybCgiL3N0YWdlLyIrWi5h'@;
put 'ZGFwdGVyUmVzcG9uc2Uuc2FzcGFyYW1zWzBdLkRTSUQpLCEwO2xldCByZT0iU3VibWl0IHJlcXVlc3QgZmFpbGVkIjtaJiYocmUrPWBcbiR7InN0cmluZyI9PXR5cGVvZiBaP1o6SlNPTi5zdHJpbmdpZnkoWil9YCksZC5ldmVudFNlcnZpY2Uuc2hvd0Fib3J0TW9kYWwoImVkaXRvcnMvc3Rh'@;
put 'Z2VkYXRhIixyZSxudWxsLCJTdWJtaXQgZXJyb3IiKX0pLmNhdGNoKFo9Pntjb25zb2xlLmxvZygiZXJyIixaKSxjLmNudD0wLGMubm9uUGtDbnQ9MCxkLmRpc2FibGVTdWJtaXQ9ITAsZC5zdWJtaXQ9ITE7Y29uc3QgcmU9InN0cmluZyI9PXR5cGVvZiBaLmFkYXB0ZXJSZXNwbnNlP1ouYWRh'@;
put 'cHRlclJlc3Buc2U6SlNPTi5zdHJpbmdpZnkoWi5hZGFwdGVyUmVzcG5zZSk7cmV0dXJuIGQuZXZlbnRTZXJ2aWNlLnNob3dBYm9ydE1vZGFsKCJlZGl0b3JzL3N0YWdlZGF0YSIsYFN1Ym1pdCByZXF1ZXN0IGZhaWxlZFxuJHtyZX1gLG51bGwsIlN1Ym1pdCBlcnJvciIpLCExfSkpcmV0dXJu'@;
put 'fX1jLmNudD49MT8oZC5wa051bGw9ITAsZC5zdWJtaXQ9ITApOmQuc3VibWl0PSExLGMubm9uUGtDbnQ+PTE/KGQubm9Qa051bGw9ITAsZC5zdWJtaXQ9ITApOmQuc3VibWl0PSExLGQuY2FuY2VsU3VibWl0KCksYy5jbnQ9MCxjLm5vblBrQ250PTAsZC5kaXNhYmxlU3VibWl0PSEwfSkoKX12'@;
put 'YWxpZGF0b3JSdWxlU291cmNlKGEpe3JldHVybiB0aGlzLmRjVmFsaWRhdG9yPy5nZXRSdWxlKGEpfWNoZWNrSW52YWxpZCgpe3JldHVybiB0aGlzLmhvdEluc3RhbmNlQ29tcExpc3QuZmlyc3QuY29udGFpbmVyLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvckFsbCgiLmh0SW52YWxpZCIp'@;
put 'Lmxlbmd0aD4wfWdvVG9FZGl0b3IoKXt0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKCIvIil9Y2xvc2VSZWNvcmRFZGl0KGEpe3RoaXMuY3VycmVudEVkaXRSZWNvcmRJbmRleD0tMSx0aGlzLmN1cnJlbnRFZGl0UmVjb3JkPXZvaWQgMCx0aGlzLmN1cnJlbnRFZGl0UmVjb3JkVmFsaWRhdG9y'@;
put 'PXZvaWQgMCwiQUREIj09PXRoaXMucmVjb3JkQWN0aW9uJiYhYSYmKHRoaXMuZGF0YVNvdXJjZT10aGlzLmhlbHBlclNlcnZpY2UuZGVlcENsb25lKHRoaXMucHJldkRhdGFTb3VyY2UpLHRoaXMuaG90SW5zdGFuY2UudXBkYXRlU2V0dGluZ3Moe2RhdGE6dGhpcy5kYXRhU291cmNlfSwhMSkp'@;
put 'fWNvbmZpcm1SZWNvcmRFZGl0KGE9ITApe2NvbnN0IGQ9dGhpcy5jdXJyZW50RWRpdFJlY29yZEluZGV4O2EmJih0aGlzLmN1cnJlbnRFZGl0UmVjb3JkSW5kZXg9LTEpLHRoaXMuY29sdW1uSGVhZGVyLm1hcChmPT57Y29uc3Qgdj10aGlzLmN1cnJlbnRFZGl0UmVjb3JkW2ZdLE09Im51bSI9'@;
put 'PT10aGlzLiRkYXRhRm9ybWF0cz8udmFyc1tmXT8udHlwZSxEPSgwLGdnLmlzU3BlY2lhbE1pc3NpbmcpKHYpO00mJiFpc05hTih2KSYmIUQmJih0aGlzLmN1cnJlbnRFZGl0UmVjb3JkW2ZdPTEqdil9KSx0aGlzLmRhdGFTb3VyY2VbZF09dGhpcy5jdXJyZW50RWRpdFJlY29yZCx0aGlzLmhv'@;
put 'dFRhYmxlLmRhdGFbZF09dGhpcy5jdXJyZW50RWRpdFJlY29yZCx0aGlzLmhvdEluc3RhbmNlLnVwZGF0ZVNldHRpbmdzKHtkYXRhOnRoaXMuZGF0YVNvdXJjZX0sITEpLGEmJih0aGlzLmN1cnJlbnRFZGl0UmVjb3JkPXZvaWQgMCl9b25OZXh0UmVjb3JkKCl7dGhpcy5jb25maXJtUmVjb3Jk'@;
put 'RWRpdCghMSksdGhpcy5jdXJyZW50RWRpdFJlY29yZEluZGV4PXRoaXMuY3VycmVudEVkaXRSZWNvcmRJbmRleD49dGhpcy5kYXRhU291cmNlLmxlbmd0aC0xPzA6dGhpcy5jdXJyZW50RWRpdFJlY29yZEluZGV4KzEsdGhpcy5lZGl0UmVjb3JkKG51bGwsdGhpcy5jdXJyZW50RWRpdFJlY29y'@;
put 'ZEluZGV4KX1vblByZXZpb3VzUmVjb3JkKCl7dGhpcy5jb25maXJtUmVjb3JkRWRpdCghMSksdGhpcy5jdXJyZW50RWRpdFJlY29yZEluZGV4PXRoaXMuY3VycmVudEVkaXRSZWNvcmRJbmRleDw9MD90aGlzLmRhdGFTb3VyY2UubGVuZ3RoLTE6dGhpcy5jdXJyZW50RWRpdFJlY29yZEluZGV4'@;
put 'LTEsdGhpcy5lZGl0UmVjb3JkKG51bGwsdGhpcy5jdXJyZW50RWRpdFJlY29yZEluZGV4KX1hZGRSZWNvcmRCdXR0b25DbGljaygpe3RoaXMucmVzdHJpY3Rpb25zLnJlc3RyaWN0QWRkUmVjb3JkP3RoaXMuZXZlbnRTZXJ2aWNlLnNob3dEZW1vTGltaXRNb2RhbCgiQWRkIFJlY29yZCIpOnRo'@;
put 'aXMuYWRkRWRpdE5ld1JlY29yZCgpfWFkZEVkaXROZXdSZWNvcmQoKXt0aGlzLmFkZFJlY29yZCgpLHNldFRpbWVvdXQoKCk9Pnt0aGlzLmVkaXRSZWNvcmQobnVsbCx0aGlzLmRhdGFTb3VyY2UubGVuZ3RoLTEsITApfSwxZTMpfWFkZFJlY29yZCgpe3RoaXMuYWRkUm93KCl9ZWRpdFJlY29y'@;
put 'ZChhLGQsaCl7aWYodGhpcy5yZXN0cmljdGlvbnMucmVzdHJpY3RFZGl0UmVjb3JkKXRoaXMuZXZlbnRTZXJ2aWNlLnNob3dEZW1vTGltaXRNb2RhbCgiRWRpdCBSZWNvcmQiKTtlbHNlIGlmKCEodm9pZCAwPT09ZHx8ZDwwfHx0aGlzLnJlc3RyaWN0aW9ucy5yZXN0cmljdEVkaXRSZWNvcmQp'@;
put 'KXtpZih0aGlzLnJlY29yZEFjdGlvbj1oPyJBREQiOiJFRElUIix0aGlzLmhvdFRhYmxlLnJlYWRPbmx5JiZ0aGlzLmVkaXRUYWJsZSghMSxoKSx0aGlzLmN1cnJlbnRFZGl0UmVjb3JkVmFsaWRhdG9yPXRoaXMuaGVscGVyU2VydmljZS5kZWVwQ2xvbmUodGhpcy5kY1ZhbGlkYXRvciksaCl0'@;
put 'aGlzLnByZXZEYXRhU291cmNlPXRoaXMuaGVscGVyU2VydmljZS5kZWVwQ2xvbmUodGhpcy5kYXRhU291cmNlKSx0aGlzLnByZXZEYXRhU291cmNlLnBvcCgpO2Vsc2V7Y29uc3QgZj10aGlzLmhlbHBlclNlcnZpY2UuZGVlcENsb25lKHRoaXMuaG90SW5zdGFuY2UuZ2V0Q2VsbE1ldGFBdFJv'@;
put 'dyhkKSk7Zm9yKGNvbnN0IHYgb2YgZilpZih2KXtjb25zdCBNPXYucHJvcD8udG9TdHJpbmcoKTtkZWxldGUgdi5wcm9wLGRlbGV0ZSB2LmRhdGEsdGhpcy5jdXJyZW50RWRpdFJlY29yZFZhbGlkYXRvcj8udXBkYXRlUnVsZSh2LmNvbCx7Li4udixkYXRhOk19KX19dGhpcy5jdXJyZW50RWRp'@;
put 'dFJlY29yZEluZGV4PWQsdGhpcy5jdXJyZW50RWRpdFJlY29yZD10aGlzLmhlbHBlclNlcnZpY2UuZGVlcENsb25lKHRoaXMuZGF0YVNvdXJjZVtkXSl9fXRvZ2dsZUhvdFBsdWdpbihhLGQpe2NvbnN0IGg9dGhpcy5ob3RJbnN0YW5jZTtoLmJhdGNoKCgpPT57Y29uc3QgZj1oLmdldFBsdWdp'@;
put 'bihhKTtmPyhzZXRUaW1lb3V0KCgpPT57ZD9mLmVuYWJsZVBsdWdpbigpOmYuZGlzYWJsZVBsdWdpbigpfSwxMDApLGgucmVuZGVyKCkpOmNvbnNvbGUud2FybigiVG9nZ2xlIEhvdCBQbHVnaW4gZmFpbGVkIC0gUGx1Z2luIG5hbWVkOiAiK2ErIiAtIGNvdWxkIG5vdCBiZSBmb3VuZC4iKX0p'@;
put 'fWR5bmFtaWNDZWxsVmFsaWRhdGlvbkRpc2FibGVkKGEsZCl7cmV0dXJuISF0aGlzLmRpc2FibGVkQmFzaWNEeW5hbWljQ2VsbFZhbGlkYXRpb25NYXAuZmluZChmPT5mLnJvdz09PWEmJmYuY29sPT09ZCYmIWYuYWN0aXZlKX1keW5hbWljQ2VsbFZhbGlkYXRpb24oYSxkKXtpZih0aGlzLmR5'@;
put 'bmFtaWNDZWxsVmFsaWRhdGlvbkRpc2FibGVkKGEsZCkpcmV0dXJuO2NvbnN0IGg9dGhpcy5ob3RJbnN0YW5jZTtpZihoLmdldENlbGxNZXRhKGEsZCkucmVhZE9ubHkpcmV0dXJuO2NvbnN0IHY9aC5nZXREYXRhQXRDZWxsKGEsZCksTT10aGlzLmhlbHBlclNlcnZpY2UuZGVlcENsb25lKHRo'@;
put 'aXMuZGF0YVNvdXJjZVthXSksRD1PYmplY3Qua2V5cyhNKVtkXSxaPXRoaXMuaGVscGVyU2VydmljZS5kZWxldGVLZXlzQW5kSGFzaChNLFtELCJub0xpbmtPcHRpb24iXSwhMSkscmU9dGhpcy5jZWxsVmFsaWRhdGlvblNvdXJjZS5maW5kSW5kZXgoY2U9PmNlLmhhc2g9PT1aKTtpZihyZT4t'@;
put 'MSl7bGV0IGNlPXRoaXMuY2VsbFZhbGlkYXRpb25Tb3VyY2VbcmVdLnZhbHVlcy5tYXAoQmU9PkJlW3RoaXMuY2VsbFZhbGlkYXRpb25GaWVsZHMuUkFXX1ZBTFVFXSk7Y29uc3QgYmU9KGguZ2V0Q2VsbE1ldGEoYSxkKS5zb3VyY2V8fFtdKS5sZW5ndGg8MSxFZT0iICIhPT12O2guYmF0Y2go'@;
put 'KCk9Pntjb25zdCBCZT1oLmdldENlbGxNZXRhKGEsZCkscWU9dGhpcy5kY1ZhbGlkYXRvcj8uZ2V0UnVsZShCZS5kYXRhfHwiIik7bGV0IHJ0O3FlJiYocnQ9dGhpcy5kY1ZhbGlkYXRvcj8uZ2V0RHFEcm9wZG93blNvdXJjZShxZSkpLHJ0fHwocnQ9W10pLCJudW1lcmljIj09PXFlPy50eXBl'@;
put 'PyhydD10aGlzLmhlbHBlclNlcnZpY2UuY29udmVydEFycmF5VmFsdWVzKHJ0LCJudW1iZXIiKSxjZT10aGlzLmhlbHBlclNlcnZpY2UuY29udmVydEFycmF5VmFsdWVzKGNlLCJudW1iZXIiKSk6KHJ0PXRoaXMuaGVscGVyU2VydmljZS5jb252ZXJ0QXJyYXlWYWx1ZXMocnQsInN0cmluZyIp'@;
put 'LGNlPXRoaXMuaGVscGVyU2VydmljZS5jb252ZXJ0QXJyYXlWYWx1ZXMoY2UsInN0cmluZyIpKTtjb25zdCBwdD1bLi4ubmV3IFNldChbLi4ucnQsLi4uY2VdKV07aWYoaC5zZXRDZWxsTWV0YShhLGQsInNvdXJjZSIscHQpLHRoaXMuY3VycmVudEVkaXRSZWNvcmRWYWxpZGF0b3I/LnVwZGF0'@;
put 'ZVJ1bGUoZCx7c291cmNlOnB0fSksdGhpcy5jZWxsVmFsaWRhdGlvblNvdXJjZVtyZV0udmFsdWVzLmxlbmd0aD4wKXtjb25zdCBkdD10aGlzLmNlbGxWYWxpZGF0aW9uU291cmNlW3JlXS5zdHJpY3Q7aC5zZXRDZWxsTWV0YShhLGQsInJlbmRlcmVyIiwiYXV0b2NvbXBsZXRlIiksaC5zZXRD'@;
put 'ZWxsTWV0YShhLGQsImVkaXRvciIsImF1dG9jb21wbGV0ZS5jdXN0b20iKSxoLnNldENlbGxNZXRhKGEsZCwic3RyaWN0IixkdCksaC5zZXRDZWxsTWV0YShhLGQsImZpbHRlciIsITEpLHRoaXMuY3VycmVudEVkaXRSZWNvcmRWYWxpZGF0b3I/LnVwZGF0ZVJ1bGUoZCx7cmVuZGVyZXI6ImF1'@;
put 'dG9jb21wbGV0ZSIsZWRpdG9yOiJhdXRvY29tcGxldGUuY3VzdG9tIixzdHJpY3Q6ZHQsZmlsdGVyOiExfSl9dGhpcy5yZVNldEV4dGVuZGVkQ2VsbFZhbGlkYXRpb25WYWx1ZXModGhpcy5jZWxsVmFsaWRhdGlvblNvdXJjZVtyZV0sYSxiZSYmRWUpLGgucmVuZGVyKCl9KX1pZihyZTwwKXtj'@;
put 'b25zdCBjZT17U0FTQ29udHJvbFRhYmxlOlt7bGliZHM6dGhpcy5saWJkcyx2YXJpYWJsZV9ubTpEfV0sc291cmNlX3JvdzpbTV19LGJlPXRoaXMuZGNWYWxpZGF0b3I/LmdldERxRGV0YWlscyhEKS5maW5kKEVlPT4iU09GVFNFTEVDVF9IT09LIj09PUVlLlJVTEVfVFlQRXx8IkhBUkRTRUxF'@;
put 'Q1RfSE9PSyI9PT1FZS5SVUxFX1RZUEUpO2JlJiYodGhpcy5jZWxsVmFsaWRhdGlvblNvdXJjZS5wdXNoKHtyb3c6YSxjb2w6ZCxzdHJpY3Q6IkhBUkRTRUxFQ1RfSE9PSyI9PT1iZS5SVUxFX1RZUEUsdmFsdWVzOltdLGhhc2g6Wixjb3VudDp0aGlzLmNlbGxWYWxpZGF0aW9uU291cmNlLmxl'@;
put 'bmd0aCsxfSksaC5zZXRDZWxsTWV0YShhLGQsInJlbmRlcmVyIixTbXQpLHRoaXMuY3VycmVudEVkaXRSZWNvcmRMb2FkaW5ncy5wdXNoKGQpLGgucmVuZGVyKCksdGhpcy5zYXNTZXJ2aWNlLnJlcXVlc3QoImVkaXRvcnMvZ2V0ZHluYW1pY2NvbHZhbHMiLGNlLHZvaWQgMCx7c3VwcHJlc3NT'@;
put 'dWNjZXNzQWJvcnRNb2RhbDohMCxzdXBwcmVzc0Vycm9yQWJvcnRNb2RhbDohMH0pLnRoZW4oRWU9PntpZihFZS5hZGFwdGVyUmVzcG9uc2UuZHluYW1pY192YWx1ZXMubWFwKHFlPT5xZVt0aGlzLmNlbGxWYWxpZGF0aW9uRmllbGRzLlJBV19WQUxVRV0pLmxlbmd0aD4wKXtjb25zdCBxZT10'@;
put 'aGlzLmNlbGxWYWxpZGF0aW9uU291cmNlLmZpbmRJbmRleChydD0+cnQuaGFzaD09PVopO3FlPi0xJiYodGhpcy5jZWxsVmFsaWRhdGlvblNvdXJjZVtxZV09ey4uLnRoaXMuY2VsbFZhbGlkYXRpb25Tb3VyY2VbcWVdLHJvdzphLGNvbDpkLHZhbHVlczpFZS5hZGFwdGVyUmVzcG9uc2UuZHlu'@;
put 'YW1pY192YWx1ZXMsZXh0ZW5kZWRfdmFsdWVzOkVlLmFkYXB0ZXJSZXNwb25zZS5keW5hbWljX2V4dGVuZGVkX3ZhbHVlc30pLGguc2V0Q2VsbE1ldGEoYSxkLCJyZW5kZXJlciIsWWVlKSx0aGlzLmN1cnJlbnRFZGl0UmVjb3JkTG9hZGluZ3Muc3BsaWNlKHRoaXMuY3VycmVudEVkaXRSZWNv'@;
put 'cmRMb2FkaW5ncy5pbmRleE9mKGQpLDEpLGguZGVzZWxlY3RDZWxsKCksaC5yZW5kZXIoKSxoLmJhdGNoKCgpPT57c2V0VGltZW91dCgoKT0+e3RoaXMucmVTZXRDZWxsVmFsaWRhdGlvblZhbHVlcyghMCxhKSxoLnJlbmRlcigpLGgudmFsaWRhdGVSb3dzKFthXSl9LDEwMCl9KX1pZihoLnNl'@;
put 'dENlbGxNZXRhKGEsZCwicmVuZGVyZXIiLFllZSksdGhpcy5jdXJyZW50RWRpdFJlY29yZExvYWRpbmdzLnNwbGljZSh0aGlzLmN1cnJlbnRFZGl0UmVjb3JkTG9hZGluZ3MuaW5kZXhPZihkKSwxKSxoLmRlc2VsZWN0Q2VsbCgpLGgucmVuZGVyKCksdGhpcy5jZWxsVmFsaWRhdGlvblNvdXJj'@;
put 'ZS5sZW5ndGg+dGhpcy52YWxpZGF0aW9uVGFibGVMaW1pdCl7Y29uc3QgcWU9dGhpcy5jZWxsVmFsaWRhdGlvblNvdXJjZS5yZWR1Y2UoKHB0LGR0KT0+cHQuY291bnQ8ZHQuY291bnQ/cHQ6ZHQpLHJ0PXRoaXMuY2VsbFZhbGlkYXRpb25Tb3VyY2UuaW5kZXhPZihxZSk7dGhpcy5jZWxsVmFs'@;
put 'aWRhdGlvblNvdXJjZS5zcGxpY2UocnQsMSl9fSkuY2F0Y2goRWU9Pntjb25zdCBCZT10aGlzLmNlbGxWYWxpZGF0aW9uU291cmNlLmZpbmRJbmRleChxZT0+cWUuaGFzaD09PVopO3RoaXMuY2VsbFZhbGlkYXRpb25Tb3VyY2Uuc3BsaWNlKEJlLDEpLGguYmF0Y2goKCk9PntoLnNldENlbGxN'@;
put 'ZXRhKGEsZCwicmVuZGVyZXIiLENtdCksaC5yZW5kZXIoKX0pLHRoaXMuY3VycmVudEVkaXRSZWNvcmRMb2FkaW5ncy5zcGxpY2UodGhpcy5jdXJyZW50RWRpdFJlY29yZExvYWRpbmdzLmluZGV4T2YoZCksMSksdGhpcy5jdXJyZW50RWRpdFJlY29yZEVycm9ycy5wdXNoKGQpLHNldFRpbWVv'@;
put 'dXQoKCk9PntoLnNldENlbGxNZXRhKGEsZCwicmVuZGVyZXIiLFllZSksaC5yZW5kZXIoKSx0aGlzLmN1cnJlbnRFZGl0UmVjb3JkRXJyb3JzLnNwbGljZSh0aGlzLmN1cnJlbnRFZGl0UmVjb3JkRXJyb3JzLmluZGV4T2YoZCksMSl9LDNlMyksdGhpcy5yZVNldENlbGxWYWxpZGF0aW9uVmFs'@;
put 'dWVzKCksdGhpcy5sb2dnZXJTZXJ2aWNlLmxvZygiZ2V0ZHluYW1pY2NvbHZhbHMgZXJyb3I6IixFZSl9KSl9fWNoZWNrRW1wdHlSb3dXaGVuRmlsdGVyKCl7dGhpcy56ZXJvRmlsdGVyUm93cz0hMSx0eXBlb2YgdGhpcy5maWx0ZXJfcGs8InUiJiYxPT09dGhpcy5ob3RUYWJsZS5kYXRhLmxl'@;
put 'bmd0aCYmW251bGwsIiJdLmluY2x1ZGVzKHRoaXMuaG90VGFibGUuZGF0YVswXVt0aGlzLmhlYWRlclBrc1swXV0pJiYodGhpcy56ZXJvRmlsdGVyUm93cz0hMCl9b25SZWNvcmRJbnB1dEZvY3VzKGEpe3RoaXMuZHluYW1pY0NlbGxWYWxpZGF0aW9uKHRoaXMuY3VycmVudEVkaXRSZWNvcmRJ'@;
put 'bmRleCxhLmNvbE5hbWUpfWV4ZWN1dGVEeW5hbWljQ2VsbFZhbGlkYXRpb25JZkFwcGxpY2FibGUoYSxkLGgpe2NvbnN0IGY9dGhpcy5oZWxwZXJTZXJ2aWNlLmRlbGV0ZUtleXNBbmRIYXNoKHRoaXMuZGF0YVNvdXJjZVtoXSxbYSwibm9MaW5rT3B0aW9uIl0pLHY9dGhpcy5jZWxsVmFsaWRh'@;
put 'dGlvblNvdXJjZS5maW5kKE09Pk0uaGFzaD09PWYmJmQ9PT1NLmNvbCk7aWYodiYmdi5leHRlbmRlZF92YWx1ZXMmJnYuZXh0ZW5kZWRfdmFsdWVzLmxlbmd0aD4wKXtjb25zdCBNPXRoaXMuZ2V0RXh0ZW5kZWRWYWx1ZXNCeUNlbGxWYWx1ZSh2LGgpO3RoaXMuc2V0RXh0ZW5kZWRWYWx1ZXNU'@;
put 'b0NlbGxzKHYsaCxNLCEwKX19ZGF0YXNldEluZm9Nb2RhbFJvd0NsaWNrZWQoYSl7dm9pZCAwIT09YS5MT0FEX1JFRiYmdGhpcy5yb3V0ZXIubmF2aWdhdGUoW2Avc3RhZ2UvJHthLkxPQURfUkVGfWBdKX12aWV3Ym94TWFuYWdlcigpe3RoaXMudmlld2JveGVzPSEwfWdldCB0b3RhbFJvd3ND'@;
put 'aGFuZ2VkKCl7cmV0dXJuIHRoaXMucm93c0NoYW5nZWQucm93c1VwZGF0ZWQrdGhpcy5yb3dzQ2hhbmdlZC5yb3dzRGVsZXRlZCt0aGlzLnJvd3NDaGFuZ2VkLnJvd3NBZGRlZH1zZXRDZWxsRmlsdGVyKGEpe2NvbnN0IGQ9dGhpcy5ob3RJbnN0YW5jZS5nZXRTZWxlY3RlZCgpLGg9ZCYmZFsw'@;
put 'XTtpZihoKXtjb25zdCBmPWhbMF0sTT1oWzFdO2lmKGY9PT1oWzJdJiZNPT09aFszXSl7Y29uc3QgWj10aGlzLmhvdEluc3RhbmNlLmdldENlbGxNZXRhKGYsTSk7WiYmWi5maWx0ZXI9PT0hYSYmdGhpcy5ob3RJbnN0YW5jZS5zZXRDZWxsTWV0YShmLE0sImZpbHRlciIsYSl9fX1uZ09uSW5p'@;
put 'dCgpe3ZhciBhPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe2EubGljZW5jZVNlcnZpY2UuaG90X2xpY2Vuc2Vfa2V5LnN1YnNjcmliZShoPT57YS5ob3RUYWJsZS5saWNlbnNlS2V5PWh9KSxhLl9xdWVyeT1hLnNhc1N0b3JlU2VydmljZS5xdWVyeS5zdWJzY3JpYmUoaD0+e2gubGliZHM9'@;
put 'PT1hLmxpYmRzJiYoYS53aGVyZVN0cmluZz1oLnN0cmluZyxhLmNsYXVzZXM9aC5vYmopfSk7Y29uc3QgZD17fTt0eXBlb2YgYS5yb3V0ZS5zbmFwc2hvdC5wYXJhbXMubGliTWVtPCJ1IiYmKGEubGliZHM9YS5yb3V0ZS5zbmFwc2hvdC5wYXJhbXMubGliTWVtLGEuZmlsdGVyX3BrPWEucm91'@;
put 'dGUuc25hcHNob3QucGFyYW1zLmZpbHRlcklkLCJlZGl0LXJlY29yZCI9PT1hLnJvdXRlLnNuYXBzaG90LnVybFswXS5wYXRoJiYoYS5yZWNvcmRBY3Rpb249dHlwZW9mIGEuZmlsdGVyX3BrPCJ1Ij8iRURJVCI6IkFERCIpLGQuTElCRFM9YS5saWJkcyx0eXBlb2YgYS5maWx0ZXJfcGs8InUi'@;
put 'JiYoZC5GSUxURVJfUks9cGFyc2VJbnQoYS5maWx0ZXJfcGspKSxkLk9VVERFU1Q9IldFQiIsYS5saWJkcyYmKEtuLmVkaXRvci5saWJyYXJ5PWEubGliZHMuc3BsaXQoIi4iKVswXSxLbi5lZGl0b3IudGFibGU9YS5saWJkcy5zcGxpdCgiLiIpWzFdKSksYS5saWJkcyYmKGEuZ2V0ZGF0YUVy'@;
put 'cm9yPSExLHlpZWxkIGEuc2FzU3RvcmVTZXJ2aWNlLmNhbGxTZXJ2aWNlKGQsIlNBU0NvbnRyb2xUYWJsZSIsImVkaXRvcnMvZ2V0ZGF0YSIsYS5saWJkcykudGhlbihoPT57YS5pbml0U2V0dXAoaCl9KS5jYXRjaChoPT57YS5nZXRkYXRhRXJyb3I9ITAsYS50YWJsZVRydWU9ITB9KSl9KSgp'@;
put 'fW5nQWZ0ZXJWaWV3SW5pdCgpe31pbml0U2V0dXAoYSl7aWYodGhpcy5ob3RJbnN0YW5jZT10aGlzLmhvdFJlZ2lzdGVyZXIuZ2V0SW5zdGFuY2UoImhvdEluc3RhbmNlIiksdGhpcy5nZXRkYXRhRXJyb3J8fCFhfHwhYS5kYXRhKXJldHVybjt0aGlzLmNvbHM9YS5kYXRhLmNvbHMsdGhpcy5k'@;
put 'c21ldGE9YS5kYXRhLmRzbWV0YSx0aGlzLnZlcnNpb25zPWEuZGF0YS52ZXJzaW9uc3x8W107Y29uc3QgZD10aGlzLmRzbWV0YS5maW5kKFo9PiJOT1RFUyI9PT1aLk5BTUUpLGg9dGhpcy5kc21ldGEuZmluZChaPT4iRERfTE9OR0RFU0MiPT09Wi5OQU1FKSxmPXRoaXMuZHNtZXRhLmZpbmQo'@;
put 'Wj0+IkREX1NIT1JUREVTQyI9PT1aLk5BTUUpO3RoaXMuZHNOb3RlPWQmJmQuVkFMVUU/ZC5WQUxVRTpoJiZoLlZBTFVFP2guVkFMVUU6ZiYmZi5WQUxVRT9mLlZBTFVFOiIiO2NvbnN0IHY9dGhpcy5ob3RJbnN0YW5jZSxNPWEuZGF0YS5hcHByb3ZlcnM7dGhpcy5jb2xzJiYodGhpcy5oZWFk'@;
put 'ZXJBcnJheT0oYz0+e2NvbnN0IGw9W107Zm9yKGxldCBhIG9mIGMpIl9fX19fREVMRVRFX19USElTX19SRUNPUkRfX19fXyIhPT1hLk5BTUUmJmwucHVzaChhLk5BTUUpO3JldHVybiBsfSkodGhpcy5jb2xzKSksTS5mb3JFYWNoKFo9Pnt0aGlzLmFwcHJvdmVycy5wdXNoKFouUEVSU09OTkFN'@;
put 'RSl9KSx0aGlzLnRhYmxlVHJ1ZT0hMCx0aGlzLmxpYmRzPWEubGliZHMsdGhpcy5ob3RUYWJsZS5kYXRhPWEuZGF0YS5zYXNkYXRhLHRoaXMuaGVhZGVyQ29sdW1ucz1hLmRhdGEuc2FzcGFyYW1zWzBdLkNPTEhFQURFUlMuc3BsaXQoIiwiKSx0aGlzLmhlYWRlclBrcz1hLmRhdGEuc2FzcGFy'@;
put 'YW1zWzBdLlBLLnNwbGl0KCIgIiksdGhpcy5jb2x1bW5MZXZlbFNlY3VyaXR5RmxhZz0hIWEuZGF0YS5zYXNwYXJhbXNbMF0uQ0xTX0ZMQUcsdGhpcy5jb2x1bW5MZXZlbFNlY3VyaXR5RmxhZyYmdGhpcy5zZXRSZXN0cmljdGlvbnMoe3Jlc3RyaWN0QWRkUm93OiEwLHJlbW92ZUVkaXRSZWNv'@;
put 'cmRCdXR0b246ITAscmVtb3ZlQWRkUmVjb3JkQnV0dG9uOiEwfSksdGhpcy5jaGVja0VtcHR5Um93V2hlbkZpbHRlcigpLC0xIT09dGhpcy5oZWFkZXJDb2x1bW5zLmluZGV4T2YoIl9fX19fREVMRVRFX19USElTX19SRUNPUkRfX19fXyIpJiYodGhpcy5oZWFkZXJDb2x1bW5zW3RoaXMuaGVh'@;
put 'ZGVyQ29sdW1ucy5pbmRleE9mKCJfX19fX0RFTEVURV9fVEhJU19fUkVDT1JEX19fX18iKV09IkRlbGV0ZT8iKSx0aGlzLmhlYWRlckFycmF5PXRoaXMuaGVhZGVyQ29sdW1ucy5zbGljZSgxKSwiIiE9PWEuZGF0YS5zYXNwYXJhbXNbMF0uRFRWQVJTJiYodGhpcy5kYXRlSGVhZGVycz1hLmRh'@;
put 'dGEuc2FzcGFyYW1zWzBdLkRUVkFSUy5zcGxpdCgiICIpKSwiIiE9PWEuZGF0YS5zYXNwYXJhbXNbMF0uVE1WQVJTJiYodGhpcy50aW1lSGVhZGVycz1hLmRhdGEuc2FzcGFyYW1zWzBdLlRNVkFSUy5zcGxpdCgiICIpKSwiIiE9PWEuZGF0YS5zYXNwYXJhbXNbMF0uRFRUTVZBUlMmJih0aGlz'@;
put 'LmRhdGVUaW1lSGVhZGVycz1hLmRhdGEuc2FzcGFyYW1zWzBdLkRUVE1WQVJTLnNwbGl0KCIgIikpLGEuZGF0YS54bF9ydWxlcy5sZW5ndGg+MCYmKHRoaXMueGxSdWxlcz10aGlzLmhlbHBlclNlcnZpY2UuZGVlcENsb25lKGEuZGF0YS54bF9ydWxlcykpLHRoaXMuZGNWYWxpZGF0b3I9bmV3'@;
put 'IEM2ZShhLmRhdGEuc2FzcGFyYW1zWzBdLGEuZGF0YS4kc2FzZGF0YSx0aGlzLmNvbHMsYS5kYXRhLmRxcnVsZXMsYS5kYXRhLmRxZGF0YSksdGhpcy5jZWxsVmFsaWRhdGlvbj10aGlzLmRjVmFsaWRhdG9yLmdldFJ1bGVzKCksdGhpcy5kYXRhU291cmNlPWEuZGF0YS5zYXNkYXRhLHRoaXMu'@;
put 'JGRhdGFGb3JtYXRzPWEuZGF0YS4kc2FzZGF0YTtmb3IobGV0IFo9MDtaPHRoaXMuaGVhZGVyQ29sdW1ucy5sZW5ndGg7WisrKXRoaXMuaG90RGF0YVNjaGVtYVt0aGlzLmNlbGxWYWxpZGF0aW9uW1pdLmRhdGFdPV9tdCh0aGlzLmNlbGxWYWxpZGF0aW9uW1pdLnR5cGUsdGhpcy5jZWxsVmFs'@;
put 'aWRhdGlvbltaXSk7dGhpcy5jaGVja1Jvd0xpbWl0KCksdi51cGRhdGVTZXR0aW5ncyh7ZGF0YTp0aGlzLmRhdGFTb3VyY2UsY29sSGVhZGVyczp0aGlzLmhlYWRlckNvbHVtbnMsY29sdW1uczp0aGlzLmNlbGxWYWxpZGF0aW9uLGhlaWdodDp0aGlzLmhvdFRhYmxlLmhlaWdodCxmb3JtdWxh'@;
put 'czp0aGlzLmhvdFRhYmxlLmZvcm11bGFzLHN0cmV0Y2hIOiJhbGwiLHJlYWRPbmx5OnRoaXMuaG90VGFibGUucmVhZE9ubHksaGlkZGVuQ29sdW1uczp7aW5kaWNhdG9yczohMCxjb2x1bW5zOnRoaXMuZGNWYWxpZGF0b3IuZ2V0SGlkZGVuQ29sdW1ucygpfSxtb2RpZnlDb2xXaWR0aDpmdW5j'@;
put 'dGlvbihaLHJlKXtyZXR1cm4gMD09PXJlPzYwOlo+NTAwPzUwMDpafSxjb3B5UGFzdGU6dGhpcy5ob3RUYWJsZS5jb3B5UGFzdGUsbWFudWFsQ29sdW1uRnJlZXplOiExLG11bHRpQ29sdW1uU29ydGluZzohMCxtYW51YWxDb2x1bW5SZXNpemU6ITAsZmlsdGVyczohMSxtYW51YWxSb3dSZXNp'@;
put 'emU6ITAsdmlld3BvcnRSb3dSZW5kZXJpbmdPZmZzZXQ6NTAscm93SGVhZGVyczpaPT4iICIscm93SGVhZGVyV2lkdGg6MTUscm93SGVpZ2h0czoyNCxtYXhSb3dzOnRoaXMubGljZW5jZVN0YXRlLnZhbHVlLmVkaXRvcl9yb3dzX2FsbG93ZWR8fDEvMCxpbnZhbGlkQ2VsbENsYXNzTmFtZToi'@;
put 'aHRJbnZhbGlkIixkcm9wZG93bk1lbnU6e2l0ZW1zOnttYWtlX3JlYWRfb25seTp7bmFtZToibWFrZV9yZWFkX29ubHkifSxhbGlnbm1lbnQ6e25hbWU6ImFsaWdubWVudCJ9LHNwMTp7bmFtZToiLS0tLS0tLS0tIn0saW5mbzp7bmFtZToidGVzdCBpbmZvIixyZW5kZXJlcjooWixyZSxjZSxi'@;
put 'ZSxFZSxCZSk9Pntjb25zdCBxZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIik7bGV0IHJ0LHB0PSJObyBpbmZvIGZvdW5kIjtpZih0aGlzLmhvdEluc3RhbmNlKXtjb25zdCBkdD10aGlzLmhvdEluc3RhbmNlLmdldFNlbGVjdGVkKCl8fFtdLEp0PWR0P2R0WzBdWzFdOi0xLHZuPXRo'@;
put 'aXMuaG90SW5zdGFuY2U/LmNvbFRvUHJvcChKdCk7cnQ9dGhpcy4kZGF0YUZvcm1hdHM/LnZhcnNbdm5dLHJ0JiYocHQ9YExBQkVMOiAke3J0Py5sYWJlbH08YnI+VFlQRTogJHtydD8udHlwZX08YnI+TEVOR1RIOiAke3J0Py5sZW5ndGh9PGJyPkZPUk1BVDogJHtydD8uZm9ybWF0fWApfXJl'@;
put 'dHVybiBxZS5pbm5lckhUTUw9cHQscWV9fX19LGRhdGFTY2hlbWE6dGhpcy5ob3REYXRhU2NoZW1hLGNvbnRleHRNZW51OnRoaXMuaG90VGFibGUuc2V0dGluZ3MuY29udGV4dE1lbnUsY3VycmVudEhlYWRlckNsYXNzTmFtZToiY3VzdG9tSCIsYWZ0ZXJHZXRDb2xIZWFkZXI6KFoscmUpPT57'@;
put 'Y29uc3QgY2U9dGhpcy5jb2x1bW5IZWFkZXJbWl0sYmU9Y2UmJnRoaXMuaXNDb2xQayhjZSksRWU9Y2UmJnRoaXMuaXNSZWFkb25seUNvbChjZSk7YmUmJnJlLmNsYXNzTGlzdC5hZGQoInByaW1hcnlLZXlIZWFkZXJTdHlsZSIpLEVlJiYhYmUmJnJlLmNsYXNzTGlzdC5hZGQoInJlYWRvbmx5'@;
put 'Q2VsbCIpLDA9PT1aJiZyZS5jbGFzc0xpc3QuYWRkKCJmaXJzdENvbHVtbkhlYWRlclN0eWxlIikscmUuY2xhc3NMaXN0LmFkZChLbi5oYW5kc29udGFibGUuZGFya1RhYmxlSGVhZGVyQ2xhc3MpfSxhZnRlckdldENlbGxNZXRhOihaLHJlLGNlKT0+e3JlJiZ0aGlzLmlzUmVhZG9ubHlDb2wo'@;
put 'cmUpJiYoY2UuY2xhc3NOYW1lPSJyZWFkb25seUNlbGwiKX19LCExKSx0aGlzLmhvdFRhYmxlLmhpZGRlbj0hMSx0aGlzLnRvZ2dsZUhvdFBsdWdpbigiY29udGV4dE1lbnUiLCExKSx0aGlzLnF1ZXJ5VGV4dD1hLmRhdGEuc2FzcGFyYW1zWzBdLkZJTFRFUl9URVhULHRoaXMuY29sdW1uSGVh'@;
put 'ZGVyPWEuZGF0YS5zYXNwYXJhbXNbMF0uQ09MSEVBREVSUy5zcGxpdCgiLCIpLHRoaXMuY29sdW1uSGVhZGVyWzBdPSJEZWxldGU/Iix0aGlzLnJlYWRPbmx5RmllbGRzPWEuZGF0YS5zYXNwYXJhbXNbMF0uUEtDTlQ7Y29uc3QgRD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiaG90SW5zdGFu'@;
put 'Y2UiKTtEJiZELmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsWj0+e3RoaXMudXBsb2FkUHJldmlld3x8dGhpcy5ob3RDbGlja2VkKCksc2V0VGltZW91dCgoKT0+e2NvbnN0IHJlPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIi5kZWJ1Zy1zd2l0Y2gtaXRlbSIpfHx2b2lkIDA7cmUmJnJl'@;
put 'LmNsaWNrKCl9LDEwMCl9KSx2LmFkZEhvb2soImFmdGVyU2VsZWN0aW9uIiwoWixyZSxjZSxiZSxFZSxCZSk9PntaPT09Y2UmJnJlPT09YmUmJiExPT09dGhpcy5ob3RUYWJsZS5yZWFkT25seSYmdGhpcy5keW5hbWljQ2VsbFZhbGlkYXRpb24oWixyZSl9KSx2LmFkZEhvb2soImFmdGVyQmVn'@;
put 'aW5FZGl0aW5nIiwoKT0+e3RoaXMuc2V0Q2VsbEZpbHRlcighMSl9KSx2LmFkZEhvb2soImJlZm9yZUtleURvd24iLCgpPT57dGhpcy5zZXRDZWxsRmlsdGVyKCEwKX0pLHYuYWRkSG9vaygiYWZ0ZXJDaGFuZ2UiLChaLHJlKT0+e2lmKCJlZGl0Ij09PXJlKXtjb25zdCBjZT10aGlzLmhvdElu'@;
put 'c3RhbmNlLGJlPVpbMF1bMF0sRWU9WlswXVsxXSxCZT1jZS5wcm9wVG9Db2woRWUpLHFlPWNlLmdldENlbGxNZXRhKGJlLEJlKTtxZSYmITE9PT1xZS5maWx0ZXImJmNlLnNldENlbGxNZXRhKGJlLEJlLCJmaWx0ZXIiLCEwKSx0aGlzLmV4ZWN1dGVEeW5hbWljQ2VsbFZhbGlkYXRpb25JZkFw'@;
put 'cGxpY2FibGUoRWUsQmUsYmUpfX0pLHYuYWRkSG9vaygiYWZ0ZXJSZW5kZXIiLFo9Pnt0aGlzLmV2ZW50U2VydmljZS5kaXNwYXRjaEV2ZW50KCJyZXNpemUiKX0pLHYuYWRkSG9vaygiYWZ0ZXJDcmVhdGVSb3ciLChaLHJlKT0+e2lmKFo+dGhpcy5kYXRhU291cmNlLmxlbmd0aCl7Y29uc3Qg'@;
put 'Y2U9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiLnd0SG9sZGVyIik7c2V0VGltZW91dCgoKT0+e2NlJiYoY2Uuc2Nyb2xsVG9wPWNlLnNjcm9sbEhlaWdodCl9KX19KSx2LmFkZEhvb2soImJlZm9yZVBhc3RlIiwoWixyZSk9Pntjb25zdCBjZT1yZVswXS5zdGFydENvbDtaWzBdPVpbMF0ubWFw'@;
put 'KChiZSxFZSk9Pntjb25zdCBCZT10aGlzLmNvbHVtbkhlYWRlcltjZStFZV0scWU9Im51bSI9PT10aGlzLiRkYXRhRm9ybWF0cz8udmFyc1tCZV0/LnR5cGUscnQ9KDAsZ2cuaXNTcGVjaWFsTWlzc2luZykoYmUpO3JldHVybiBxZSYmIWlzTmFOKGJlKSYmIXJ0JiYoYmUqPTEpLGJlfSl9KSx2'@;
put 'LmFkZEhvb2soImFmdGVyUmVtb3ZlUm93IiwoKT0+e3RoaXMuY2hlY2tSb3dMaW1pdCgpfSksdi5hZGRIb29rKCJhZnRlckNyZWF0ZVJvdyIsKCk9Pnt0aGlzLmNoZWNrUm93TGltaXQoKX0pLHRoaXMudXBsb2FkVXJsPSJzZXJ2aWNlcy9lZGl0b3JzL2xvYWRmaWxlIixudWxsIT09dGhpcy5y'@;
put 'ZWNvcmRBY3Rpb24mJigiQUREIj09PXRoaXMucmVjb3JkQWN0aW9uPyh0aGlzLmFkZFJlY29yZCgpLHRoaXMuZWRpdFJlY29yZChudWxsLHRoaXMuZGF0YVNvdXJjZS5sZW5ndGgtMSwhMCkpOjE9PT10aGlzLmRhdGFTb3VyY2UubGVuZ3RoJiZ0aGlzLmVkaXRSZWNvcmQobnVsbCwwKSksYS5k'@;
put 'YXRhLnF1ZXJ5Lmxlbmd0aD4wJiYoImhvbWUiPT09S24ucm9vdFBhcmFtfHwiZWRpdG9yIj09PUtuLnJvb3RQYXJhbSkmJjA9PT1Lbi5lZGl0b3IuZmlsdGVyLmNsYXVzZXMubGVuZ3RoJiYoS24uZWRpdG9yLmZpbHRlci5xdWVyeT10aGlzLmhlbHBlclNlcnZpY2UuZGVlcENsb25lKGEuZGF0'@;
put 'YS5xdWVyeSksS24uZWRpdG9yLmZpbHRlci5saWJkcz10aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtcy5saWJNZW0sdGhpcy5zYXNTdG9yZVNlcnZpY2UuaW5pdGlhbGl6ZUdsb2JhbEZpbHRlckNsYXVzZSgiZWRpdG9yIix0aGlzLmNvbHMpKSx2LnJlbmRlcigpfXN0YXRpY3t0aGlzLlx1MDI3'@;
put 'NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKEdlKHUxKSxHZSh2YyksR2UoU2QpLEdlKGtoKSxHZShTdSksR2UoTHMpLEdlKEN1KSxHZShCcyksR2UoRXMpLEdlKFltKSxHZShBNmUpKX19c3RhdGlje3RoaXMuXHUwMjc1Y21wPVZyKHt0eXBlOmMsc2VsZWN0b3JzOltbImFwcC1l'@;
put 'ZGl0b3IiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGQsaCl7aWYoMSZkJiYocWEocDd0LDcpLHFhKGc3dCw1KSxxYShtN3QsNSkscWEodjd0LDUpLHFhKGI3dCw1KSksMiZkKXtsZXQgZjtDaShmPVNpKCkpJiYoaC5odD1mLmZpcnN0KSxDaShmPVNpKCkpJiYoaC51cGxvYWRTdGF0ZXJDb21wTGlz'@;
put 'dD1mKSxDaShmPVNpKCkpJiYoaC5xdWVyeUZpbHRlckNvbXBMaXN0PWYpLENpKGY9U2koKSkmJihoLmhvdEluc3RhbmNlQ29tcExpc3Q9ZiksQ2koZj1TaSgpKSYmKGguZmlsZVVwbG9hZElucHV0Q29tcExpc3Q9Zil9fSxob3N0QXR0cnM6WzEsImNvbnRlbnQtY29udGFpbmVyIl0sZGVjbHM6'@;
put 'MTc3LHZhcnM6NzQsY29uc3RzOltbImh0IiwiIl0sWyJob3RJbnN0YW5jZSIsIiJdLFsiZmlsZVBhc3N3b3JkSW5wdXQiLCIiXSxbImZpbGVVcGxvYWRJbnB1dCIsIiJdLFsidXBsb2FkU3RhdGVyIiwiIl0sWyJxdWVyeUZpbHRlciIsIiJdLFsxLCJjb250ZW50LWFyZWEiLCJkLWZsZXgiLCJj'@;
put 'bHItZmxleC1jb2x1bW4iXSxbImFwcEZpbGVEcm9wIiwiIiwxLCJyZWxhdGl2ZSIsMywiZmlsZU92ZXIiLCJmaWxlRHJvcCIsImNsck1vZGFsT3BlbkNoYW5nZSIsInVwbG9hZGVyIiwiY2xyTW9kYWxTaXplIiwiY2xyTW9kYWxTdGF0aWNCYWNrZHJvcCIsImNsck1vZGFsQ2xvc2FibGUiLCJj'@;
put 'bHJNb2RhbE9wZW4iXSxbMSwibW9kYWwtdGl0bGUiXSxbMSwibW9kYWwtYm9keSJdLFsxLCJkcm9wLWFyZWEiXSxbMSwiY2xyLWNvbC1tZC0xMiJdLFsxLCJjbHItcm93IiwiY2FyZC1ibG9jayIsIm10LTE1IiwiZC1mbGV4IiwianVzdGlmeS1jb250ZW50LWJldHdlZW4iXSxbMSwiY2xyLWNv'@;
put 'bC1tZC1hdXRvIl0sWzEsImVuY29kaW5nLWJsb2NrIl0sWyJjbHJJbmxpbmUiLCIiLDEsIm10LTAiXSxbInR5cGUiLCJyYWRpbyIsImNsclJhZGlvIiwiIiwidmFsdWUiLCJVVEYtOCIsIm5hbWUiLCJlbmNvZGluZyIsMywibmdNb2RlbENoYW5nZSIsIm5nTW9kZWwiLCJkaXNhYmxlZCJdLFsi'@;
put 'dHlwZSIsInJhZGlvIiwiY2xyUmFkaW8iLCIiLCJ2YWx1ZSIsIldMQVRJTjEiLCJuYW1lIiwiZW5jb2RpbmciLDMsIm5nTW9kZWxDaGFuZ2UiLCJuZ01vZGVsIiwiZGlzYWJsZWQiXSxbImNsYXNzIiwiY2xyLWNvbC1tZC0zIGZpbHRlckJ0biIsNCwibmdJZiJdLFsiY2xhc3MiLCJjbHItY29s'@;
put 'LW1kLTMgZWRpdEJ0biIsNCwibmdJZiJdLFsidHlwZSIsImJ1dHRvbiIsImNsYXNzIiwiYnRuIGJ0bi1wcmltYXJ5IG1yLTAiLDMsImRpc2FibGVkIiwiY2xpY2siLDQsIm5nSWYiXSxbInR5cGUiLCJidXR0b24iLCJjbGFzcyIsImJ0biBidG4tcHJpbWFyeSBtci0wIiwzLCJjbGljayIsNCwi'@;
put 'bmdJZiJdLFsiY2xhc3MiLCJleGNlbC1wYXJzaW5nIGNsci1jb2wtbWQtMTIiLDQsIm5nSWYiXSxbMSwibW9kYWwtZm9vdGVyIl0sWzMsImN1cnJlbnRSZWNvcmQiLCJyZWNvcmRBY3Rpb24iLCJsaWJkcyIsInF1ZXJ5RmlsdGVyIiwiZmlsdGVyIiwic3VibWl0TG9hZGluZyIsImhlYWRlclBr'@;
put 'cyIsImNlbGxWYWxpZGF0aW9uIiwiY3VycmVudFJlY29yZEluZGV4IiwiY3VycmVudFJlY29yZExvYWRpbmdzIiwiY3VycmVudFJlY29yZEVycm9ycyIsImN1cnJlbnRSZWNvcmRWYWxpZGF0b3IiLCJvblJlY29yZENoYW5nZSIsIm9uUmVjb3JkSW5wdXRGb2N1c2VkIiwib25SZWNvcmRFZGl0'@;
put 'Q2xvc2UiLCJvbk5leHRSZWNvcmQiLCJvblByZXZpb3VzUmVjb3JkIiw0LCJuZ0lmIl0sWzEsImNsci1mbGV4LTEiXSxbImNsYXNzIiwicHJvZ3Jlc1N0YXRpYyBwcm9ncmVzcyBsb29wIiw0LCJuZ0lmIl0sWyJhcHBEcmFnTmRyb3AiLCIiLDEsImNhcmQiLCJib3JkZXItMCIsImJveC1zaGFk'@;
put 'b3ctbm9uZS1pIiwicG9zaXRpb24tcmVsYXRpdmUiLCJoLTEwMCIsImQtZmxleCIsImNsci1mbGV4LWNvbHVtbiIsImJhY2tncm91bmQtdHJhbnNwYXJlbnQiLDMsImZpbGVEcmFnZ2VkT3ZlciJdLFsxLCJjYXJkLWhlYWRlciIsImNsci1yb3ciLCJidXR0b25CYXIiLCJoZWFkZXJCYXIiLCJj'@;
put 'bHItZmxleC1tZC1yb3ciLCJjbHItanVzdGlmeS1jb250ZW50LWNlbnRlciIsImNsci1qdXN0aWZ5LWNvbnRlbnQtbGctZW5kIl0sWyJjbGFzcyIsImNsci1jb2wtMTIgY2xyLWNvbC1tZC0zIGNsci1jb2wtbGctNCBiYWNrQnRuIiw0LCJuZ0lmIl0sWzEsImNsci1jb2wtMTIiLCJjbHItY29s'@;
put 'LW1kLTUiLCJjbHItY29sLWxnLTQiLCJkLWZsZXgiLCJmbGV4LWNvbHVtbiIsImFsaWduLWl0ZW1zLWNlbnRlciJdLFsiY2xhc3MiLCJlZGl0b3ItdGl0bGUgdGV4dC1jZW50ZXIgbXQtMCIsNCwibmdWYXIiXSxbImNsYXNzIiwiY2xyLWNvbC0xMiBjbHItY29sLW1kLTQgY2xyLWNvbC1sZy00'@;
put 'IGJ0bkN0cmwiLDQsIm5nSWYiXSxbImNsYXNzIiwiY2xyLWNvbC1tZC0xMiBpbmZvQmFyIiw0LCJuZ0lmIl0sWzEsImNhcmQtYmxvY2siLCJwLTAiLCJjbHItZmxleC0xIiwiYmFja2dyb3VuZC10cmFuc3BhcmVudCIsMywibmdDbGFzcyJdLFsiY2xhc3MiLCJjYXJkLXRleHQiLDQsIm5nSWYi'@;
put 'XSxbMSwiY2FyZC10ZXh0IiwiaG90RWRpdG9yIiwiaC0xMDAiLCJkLWZsZXgiLCJjbHItZmxleC1jb2x1bW4iLCJiYWNrZ3JvdW5kLXRyYW5zcGFyZW50Il0sWzEsImhvdC13cmFwcGVyIiwiY2xyLWZsZXgtMSJdLFsiaG90SWQiLCJob3RJbnN0YW5jZSIsImlkIiwiaG90VGFibGUiLCJjbGFz'@;
put 'c05hbWUiLCJodERhcmsiLDEsImVkaXQtaG90IiwzLCJsaWNlbnNlS2V5Il0sWzQsIm5nSWYiXSxbImNsYXNzIiwibXQtMi1pIHctMTAwIHRleHQtY2VudGVyIiw0LCJuZ0lmIl0sWyJjbGFzcyIsIm1vZGFsIiw0LCJuZ0lmIl0sWzMsImNsck1vZGFsT3BlbkNoYW5nZSIsImNsck1vZGFsT3Bl'@;
put 'biJdLFsxLCJtLTAiXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1wcmltYXJ5IiwzLCJjbGljayJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLXByaW1hcnkiLDMsImNsaWNrIl0sWzEsImR1cGxpY2F0ZS1rZXlzLW1vZGFsIiwzLCJjbHJNb2RhbE9wZW5D'@;
put 'aGFuZ2UiLCJjbHJNb2RhbE9wZW4iXSxbImNsYXNzIiwiZC1ibG9jayIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzQsIm5nRm9yIiwibmdGb3JPZiJdLFsiY2xhc3MiLCJtb2RhbCB6LWluZGV4LWhpZ2hlc3QiLDQsIm5nSWYiXSxbMSwiZmlsdGVyLW1vZGFsIiwzLCJjbHJNb2RhbE9wZW5DaGFu'@;
put 'Z2UiLCJjbHJNb2RhbE9wZW4iLCJjbHJNb2RhbFNpemUiLCJjbHJNb2RhbENsb3NhYmxlIl0sWzEsIm1vZGFsLXRpdGxlIiwiY2VudGVyIiwidGV4dC1jZW50ZXIiLCJjb2xvci1kYXJrZXItZ3JheSJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLWxpbmsiLDMsImNs'@;
put 'aWNrIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tc20iLCJidG4tb3V0bGluZSIsMywiY2xpY2siXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1zdWNjZXNzLW91dGxpbmUiLDMsImNsaWNrIiwiY2xyTG9hZGluZyJdLFsidHlwZSIsImJ1dHRvbiIsMSwi'@;
put 'YnRuIiwiYnRuLW91dGxpbmUiLDMsImNsaWNrIl0sWzMsImNsck1vZGFsT3BlbkNoYW5nZSIsImNsck1vZGFsT3BlbiIsImNsck1vZGFsU2l6ZSIsImNsck1vZGFsQ2xvc2FibGUiXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1zdWNjZXNzLW91dGxpbmUiLDMsImNs'@;
put 'aWNrIl0sWzEsIm1vZGFsLWJvZHkiLCJkLWZsZXgiLCJjbHItanVzdGlmeS1jb250ZW50LWNlbnRlciJdLFsiZGF0YS1scGlnbm9yZSIsInRydWUiLCJhdXRvY29tcGxldGUiLCJvZmYiLCJpZCIsImZpbGVQYXNzd29yZElucHV0IiwidHlwZSIsInRleHQiLDEsImNsci1pbnB1dCIsImRpc2Fi'@;
put 'bGUtcGFzc3dvcmQtbWFuYWdlciJdLFsiY2xhc3MiLCJtLTAgY29sb3ItcmVkIiw0LCJuZ0lmIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tc20iLCJidG4tc3VjY2Vzcy1vdXRsaW5lIiwzLCJjbGljayIsImRpc2FibGVkIl0sWzMsIm9wZW5DaGFuZ2UiLCJyb3dDbGlja2VkIiwi'@;
put 'b3BlbiIsImRzbWV0YSIsInZlcnNpb25zIl0sWzMsInZpZXdib3hNb2RhbENoYW5nZSIsInZpZXdib3hNb2RhbCJdLFsxLCJjbHItY29sLW1kLTMiLCJmaWx0ZXJCdG4iXSxbMSwiZmlsdGVyQnRuIiwidy0xMDAiXSxbImZvciIsImZpbGUtdXBsb2FkIiwxLCJidG4iLCJidG4tc20iLCJidG4t'@;
put 'b3V0bGluZSIsInByb2ZpbGUtYnV0dG9ucyIsInctMTAwIl0sWyJoaWRkZW4iLCIiLCJpZCIsImZpbGUtdXBsb2FkIiwidHlwZSIsImZpbGUiLCJhcHBGaWxlU2VsZWN0IiwiIiwzLCJjaGFuZ2UiLCJ1cGxvYWRlciJdLFsxLCJjbHItY29sLW1kLTMiLCJlZGl0QnRuIl0sWzEsImJ0blZpZXci'@;
put 'LCJidG4iLCJidG4tc20iLCJidG4tc3VjY2VzcyIsInByb2ZpbGUtYnV0dG9ucyIsInctMTAwIiwzLCJjbGljayIsImRpc2FibGVkIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tcHJpbWFyeSIsIm1yLTAiLDMsImNsaWNrIiwiZGlzYWJsZWQiXSxbInR5cGUiLCJidXR0b24iLDEs'@;
put 'ImJ0biIsImJ0bi1wcmltYXJ5IiwibXItMCIsMywiY2xpY2siXSxbMSwiZXhjZWwtcGFyc2luZyIsImNsci1jb2wtbWQtMTIiXSxbMywib25SZWNvcmRDaGFuZ2UiLCJvblJlY29yZElucHV0Rm9jdXNlZCIsIm9uUmVjb3JkRWRpdENsb3NlIiwib25OZXh0UmVjb3JkIiwib25QcmV2aW91c1Jl'@;
put 'Y29yZCIsImN1cnJlbnRSZWNvcmQiLCJyZWNvcmRBY3Rpb24iLCJsaWJkcyIsInF1ZXJ5RmlsdGVyIiwiZmlsdGVyIiwic3VibWl0TG9hZGluZyIsImhlYWRlclBrcyIsImNlbGxWYWxpZGF0aW9uIiwiY3VycmVudFJlY29yZEluZGV4IiwiY3VycmVudFJlY29yZExvYWRpbmdzIiwiY3VycmVu'@;
put 'dFJlY29yZEVycm9ycyIsImN1cnJlbnRSZWNvcmRWYWxpZGF0b3IiXSxbMSwicHJvZ3Jlc1N0YXRpYyIsInByb2dyZXNzIiwibG9vcCJdLFsxLCJjbHItY29sLTEyIiwiY2xyLWNvbC1tZC0zIiwiY2xyLWNvbC1sZy00IiwiYmFja0J0biJdLFsxLCJidG4iLCJpY29uLWNvbGxhcHNlIiwiYnRu'@;
put 'LXNtIiwiYnRuLWljb24iLCJidG4tZGltbWVkIiwzLCJyb3V0ZXJMaW5rIl0sWyJzaGFwZSIsImNhcmV0IiwiZGlyIiwibGVmdCIsInNpemUiLCIyMCJdLFsxLCJ0ZXh0Il0sWzEsImJ0biIsImljb24tY29sbGFwc2UiLCJidG4tc20iLCJidG4taWNvbiIsImJ0bi1kaW1tZWQiLCJ2aWV3Ym94'@;
put 'LW9wZW4iLDMsImNsaWNrIl0sWyJzaGFwZSIsInZpZXctY2FyZHMiLCJzaXplIiwiMjAiXSxbMSwiZWRpdG9yLXRpdGxlIiwidGV4dC1jZW50ZXIiLCJtdC0wIl0sWyJjbHJUb29sdGlwVHJpZ2dlciIsIiIsInNoYXBlIiwiaW5mby1jaXJjbGUiLCJhcmlhLWxhYmVsIiwiVmlldyBkYXRhc2V0'@;
put 'IG1ldGEgaW5mbyIsInNpemUiLCIyNCIsMSwiaXMtaGlnaGxpZ2h0IiwiY3Vyc29yLXBvaW50ZXIiLDMsImNsaWNrIl0sWyJzaGFwZSIsImJvbHQiLCJjbGFzcyIsImNvbG9yLXllbGxvdyIsNCwibmdJZiJdLFsiY2xyVG9vbHRpcFRyaWdnZXIiLCIiXSxbMSwibXItMTAiLCJ2aWV3LXRhYmxl'@;
put 'IiwzLCJyb3V0ZXJMaW5rIl0sWyJzaGFwZSIsImJvbHQiLDEsImNvbG9yLXllbGxvdyJdLFsiY2xyUG9zaXRpb24iLCJib3R0b20tbGVmdCIsImNsclNpemUiLCJsZyIsNCwiY2xySWZPcGVuIl0sWyJjbHJQb3NpdGlvbiIsImJvdHRvbS1sZWZ0IiwiY2xyU2l6ZSIsImxnIl0sWzEsImNsci1j'@;
put 'b2wtMTIiLCJjbHItY29sLW1kLTQiLCJjbHItY29sLWxnLTQiLCJidG5DdHJsIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG5WaWV3IiwiYnRuIiwiaWNvbi1jb2xsYXBzZSIsImJ0bi1zbSIsImJ0bi1pY29uIiwiYnRuLWJsb2NrIiwiYnRuLWRpbW1lZCIsMywiY2xpY2siXSxbInNoYXBlIiwi'@;
put 'ZmlsdGVyIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJpY29uLWNvbGxhcHNlIiwiYnRuLXNtIiwiYnRuLXByaW1hcnkiLCJidG4tYmxvY2siLDMsImNsaWNrIl0sWyJzaGFwZSIsIm5vdGUiXSxbInR5cGUiLCJidXR0b24iLCJjbGFzcyIsImJ0biBpY29uLWNvbGxhcHNlIGJ0bi1zbSBi'@;
put 'dG4tc3VjY2VzcyBidG4tYmxvY2sgbXItMCIsMywiY2xpY2siLDQsIm5nSWYiXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImljb24tY29sbGFwc2UiLCJidG4tc20iLCJidG4tc3VjY2VzcyIsImJ0bi1ibG9jayIsIm1yLTAiLDMsImNsaWNrIl0sWyJzaGFwZSIsInVwbG9hZCJdLFsidHlw'@;
put 'ZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLWljb24iLCJidG4tb3V0bGluZS1kYW5nZXIiLDMsImNsaWNrIl0sWyJzaGFwZSIsInRpbWVzIl0sWyJjbHJUb29sdGlwVHJpZ2dlciIsIiIsInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1zdWNjZXNzIiwzLCJj'@;
put 'bGljayIsImNsckxvYWRpbmciXSxbInNoYXBlIiwicGx1cyIsInNpemUiLCIxNiJdLFsic2hhcGUiLCJjaGVjayIsInNpemUiLCIyMCJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLWljb24iLCJidG4tb3V0bGluZS1kYW5nZXIiLCJidG4tdXBsb2FkLXByZXZpZXci'@;
put 'LDMsImNsaWNrIl0sWyJ0eXBlIiwiYnV0dG9uIiwiY2xhc3MiLCJidG4gYnRuLXNtIGJ0bi1wcmltYXJ5IGJ0bi11cGxvYWQtcHJldmlldyIsMywiY2xpY2siLDQsIm5nSWYiXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1zdWNjZXNzIiwicHJldmlldy1zdWJtaXQi'@;
put 'LDMsImNsaWNrIiwiY2xyTG9hZGluZyJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLXByaW1hcnkiLCJidG4tdXBsb2FkLXByZXZpZXciLDMsImNsaWNrIl0sWzEsImNsci1jb2wtbWQtMTIiLCJpbmZvQmFyIl0sWzEsImNhcmQtdGV4dCJdLFsxLCJoLTcwdmgiLCJk'@;
put 'LWZsZXgiLCJqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIiwiZmxleC1jb2x1bW4iLCJhbGlnbi1pdGVtcy1jZW50ZXIiXSxbMSwic3Bpbm5lciJdLFsxLCJtdC0xMCJdLFsiY2RzLXRleHQiLCJzZWN0aW9uIl0sWyJzaGFwZSIsImVycm9yLXN0YW5kYXJkIiwxLCJlcnJvci1pY29uIl0sWyJjbHJU'@;
put 'b29sdGlwVHJpZ2dlciIsIiIsInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1zdWNjZXNzIiwibXQtNS1pIiwzLCJjbGljayJdLFsiY2xyUG9zaXRpb24iLCJ0b3AtcmlnaHQiLCJjbHJTaXplIiwibGciLDQsImNscklmT3BlbiJdLFsiY2xyUG9zaXRpb24iLCJ0b3Atcmln'@;
put 'aHQiLCJjbHJTaXplIiwibGciXSxbMSwibXQtMi1pIiwidy0xMDAiLCJ0ZXh0LWNlbnRlciJdLFsxLCJtb2RhbCJdLFsicm9sZSIsImRpYWxvZyIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsMSwibW9kYWwtZGlhbG9nIiwibW9kYWwtbGciXSxbMSwibW9kYWwtY29udGVudCJdLFsxLCJtb2RhbC1o'@;
put 'ZWFkZXIiXSxbImFyaWEtbGFiZWwiLCJDbG9zZSIsInR5cGUiLCJidXR0b24iLDEsImNsb3NlIl0sWyJhcmlhLWhpZGRlbiIsInRydWUiLCJzaGFwZSIsImNsb3NlIl0sWyJjbGFzcyIsImQtYmxvY2sgdy0xMDAgdGV4dC1jZW50ZXIgY29sb3ItcmVkIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImNs'@;
put 'ci1vZmZzZXQtbWQtMiBjbHItY29sLW1kLTgiLDQsIm5nSWYiXSxbMSwibW9kYWwtZm9vdGVyIiwianVzdGlmeS1jb250ZW50LWNlbnRlci1pIl0sWyJpZCIsInN1Ym1pdEJ0biIsInR5cGUiLCJzdWJtaXQiLCJ0YWJpbmRleCIsIjAiLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1zdWNjZXNzLW91'@;
put 'dGxpbmUiLCJtLTAiLDMsImNsaWNrIiwiZGlzYWJsZWQiXSxbImlkIiwiY2FuY2VsU3VibWl0QnRuIiwidHlwZSIsImJ1dHRvbiIsInRhYmluZGV4IiwiMCIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLW91dGxpbmUiLDMsImNsaWNrIl0sWzEsImQtYmxvY2siLCJ3LTEwMCIsInRleHQtY2VudGVy'@;
put 'IiwiY29sb3ItcmVkIl0sWzEsImNsci1vZmZzZXQtbWQtMiIsImNsci1jb2wtbWQtOCJdLFsxLCJ0ZXh0LWFyZWEtZnVsbC13aWR0aCJdLFsiZm9yIiwiZm9ybUZpZWxkc184IiwxLCJtYi01IiwiZC1ibG9jayJdLFsiY2xyVGV4dGFyZWEiLCIiLCJ0YWJpbmRleCIsIjAiLCJ0eXBlIiwidGV4'@;
put 'dCIsImlkIiwiZm9ybUZpZWxkc184IiwxLCJzdWJtaXQtcmVhc29uIiwzLCJuZ01vZGVsQ2hhbmdlIiwibmdNb2RlbCIsImRpc2FibGVkIiwidmFsdWUiXSxbMSwiZC1ibG9jayJdLFsxLCJtb2RhbCIsInotaW5kZXgtaGlnaGVzdCJdLFsicm9sZSIsImRpYWxvZyIsImFyaWEtaGlkZGVuIiwi'@;
put 'dHJ1ZSIsMSwibW9kYWwtZGlhbG9nIl0sWzEsIm0tMCIsImNvbG9yLXJlZCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihkLGgpe2lmKDEmZCl7Y29uc3QgZj1MbigpO2RlKDAsImRpdiIsNikoMSwiY2xyLW1vZGFsIiw3KSxGdCgiZmlsZU92ZXIiLGZ1bmN0aW9uKE0pe3JldHVybiB3dChmKSxDdCho'@;
put 'LmZpbGVPdmVyQmFzZShNKSl9KSgiZmlsZURyb3AiLGZ1bmN0aW9uKE0pe3JldHVybiB3dChmKSxDdChoLmF0dGFjaEZpbGUoTSwhMCkpfSksZ2koImNsck1vZGFsT3BlbkNoYW5nZSIsZnVuY3Rpb24oTSl7cmV0dXJuIHd0KGYpLG1pKGguc2hvd1VwbG9hZE1vZGFsLE0pfHwoaC5zaG93VXBs'@;
put 'b2FkTW9kYWw9TSksQ3QoTSl9KSxkZSgyLCJoMyIsOCksTGUoMywiVXBsb2FkIEZpbGUiKSxoZSgpLGRlKDQsImRpdiIsOSkoNSwiZGl2IiwxMCkoNiwic3BhbiIpLExlKDcsIkRyb3AgZmlsZSBhbnl3aGVyZSB0byB1cGxvYWQhIiksaGUoKSgpLGRlKDgsImRpdiIsMTEpKDksImRpdiIsMTIp'@;
put 'KDEwLCJkaXYiLDEzKSgxMSwiZGl2IiwxNCkoMTIsImNsci1yYWRpby1jb250YWluZXIiLDE1KSgxMywiY2xyLXJhZGlvLXdyYXBwZXIiKSgxNCwiaW5wdXQiLDE2KSxnaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oTSl7cmV0dXJuIHd0KGYpLG1pKGguZW5jb2RpbmcsTSl8fChoLmVuY29k'@;
put 'aW5nPU0pLEN0KE0pfSksaGUoKSxkZSgxNSwibGFiZWwiKSxMZSgxNiwiVVRGLTgiKSxoZSgpKCksZGUoMTcsImNsci1yYWRpby13cmFwcGVyIikoMTgsImlucHV0IiwxNyksZ2koIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKE0pe3JldHVybiB3dChmKSxtaShoLmVuY29kaW5nLE0pfHwoaC5l'@;
put 'bmNvZGluZz1NKSxDdChNKX0pLGhlKCksZGUoMTksImxhYmVsIiksTGUoMjAsIldMQVRJTjEiKSxoZSgpKCkoKSgpKCksZ3QoMjEsQzd0LDYsMSwiZGl2IiwxOCkoMjIsUzd0LDMsMSwiZGl2IiwxOSksZGUoMjMsImRpdiIsMTMpLGd0KDI0LE03dCwyLDEsImJ1dHRvbiIsMjApKDI1LHg3dCwy'@;
put 'LDAsImJ1dHRvbiIsMjEpLGhlKCksZ3QoMjYsRTd0LDMsMCwiZGl2IiwyMiksaGUoKSgpKCksR3QoMjcsImRpdiIsMjMpLGhlKCksZ3QoMjgsVDd0LDEsMTIsImFwcC1lZGl0LXJlY29yZCIsMjQpLGRlKDI5LCJkaXYiLDI1LDApLGd0KDMxLEE3dCwyLDAsImRpdiIsMjYpLGRlKDMyLCJkaXYi'@;
put 'LDI3KSxGdCgiZmlsZURyYWdnZWRPdmVyIixmdW5jdGlvbigpe3JldHVybiB3dChmKSxDdChoLm9uU2hvd1VwbG9hZE1vZGFsKCkpfSksZGUoMzMsImRpdiIsMjgpLGd0KDM0LGs3dCw5LDIsImRpdiIsMjkpLGRlKDM1LCJkaXYiLDMwKSxndCgzNixGN3QsMTAsNiwiaDQiLDMxKSxoZSgpLGd0'@;
put 'KDM3LFo3dCw0LDMsImRpdiIsMzIpKDM4LFc3dCw1LDEsImRpdiIsMzMpLGhlKCksZGUoMzksImRpdiIsMzQpLGd0KDQwLCQ3dCw0LDIsImRpdiIsMzUpLGRlKDQxLCJkaXYiLDM2KSg0MiwiZGl2IiwzNyksR3QoNDMsImhvdC10YWJsZSIsMzgsMSksaGUoKSxkZSg0NSwiZGl2IiksZ3QoNDYs'@;
put 'WDd0LDUsMiwiY2xyLXRvb2x0aXAiLDM5KSg0NyxKN3QsMywxLCJwIiw0MCksaGUoKSxndCg0OCx0OXQsMTYsNiwiZGl2Iiw0MSksZGUoNDksImNsci1tb2RhbCIsNDIpLGdpKCJjbHJNb2RhbE9wZW5DaGFuZ2UiLGZ1bmN0aW9uKE0pe3JldHVybiB3dChmKSxtaShoLnN1Ym1pdExpbWl0Tm90'@;
put 'aWNlLE0pfHwoaC5zdWJtaXRMaW1pdE5vdGljZT1NKSxDdChNKX0pLGRlKDUwLCJoMyIsOCksTGUoNTEsIk5vdGljZSIpLGhlKCksZGUoNTIsImRpdiIsOSkoNTMsInAiLDQzKSxMZSg1NCksaGUoKSgpLGRlKDU1LCJkaXYiLDIzKSg1NiwiYnV0dG9uIiw0NCksRnQoImNsaWNrIixmdW5jdGlv'@;
put 'bigpe3JldHVybiB3dChmKSxDdChoLnN1Ym1pdExpbWl0Tm90aWNlPSExKX0pLExlKDU3LCIgQ2FuY2VsICIpLGhlKCksZGUoNTgsImJ1dHRvbiIsNDQpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoZiksaC51cGxvYWRQYXJzZWRGaWxlcygpLEN0KGguc3VibWl0TGltaXROb3Rp'@;
put 'Y2U9ITEpfSksTGUoNTksIiBTdWJtaXQgIiksaGUoKSgpKCksZGUoNjAsImNsci1tb2RhbCIsNDIpLGdpKCJjbHJNb2RhbE9wZW5DaGFuZ2UiLGZ1bmN0aW9uKE0pe3JldHVybiB3dChmKSxtaShoLmJhZEVkaXQsTSl8fChoLmJhZEVkaXQ9TSksQ3QoTSl9KSxkZSg2MSwiaDMiLDgpLExlKDYy'@;
put 'KSxoZSgpLGRlKDYzLCJkaXYiLDkpKDY0LCJwIiksTGUoNjUpLGhlKCkoKSxkZSg2NiwiZGl2IiwyMykoNjcsImJ1dHRvbiIsNDQpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoZiksQ3QoaC5iYWRFZGl0PSExKX0pLExlKDY4LCIgT2sgIiksaGUoKSgpKCksZGUoNjksImNsci1t'@;
put 'b2RhbCIsNDIpLGdpKCJjbHJNb2RhbE9wZW5DaGFuZ2UiLGZ1bmN0aW9uKE0pe3JldHVybiB3dChmKSxtaShoLnBrTnVsbCxNKXx8KGgucGtOdWxsPU0pLEN0KE0pfSksZGUoNzAsImgzIiw4KSxMZSg3MSwiRXJyb3IiKSxoZSgpLGRlKDcyLCJkaXYiLDkpKDczLCJwIiksTGUoNzQsIiBOdWxs'@;
put 'IHZhbHVlcyBvciBpbmNvcnJlY3QgZGF0YSB0eXBlcyBjYW5ub3QgYmUgc3VibWl0dGVkIGZvciBQcmltYXJ5IEtleSBjb2x1bW5zICIpLGhlKCkoKSxkZSg3NSwiZGl2IiwyMykoNzYsImJ1dHRvbiIsNDUpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoZiksaC5wa051bGw9ITEs'@;
put 'Q3QoaC5iYWRFZGl0PSExKX0pLExlKDc3LCIgT2sgIiksaGUoKSgpKCksZGUoNzgsImNsci1tb2RhbCIsNDIpLGdpKCJjbHJNb2RhbE9wZW5DaGFuZ2UiLGZ1bmN0aW9uKE0pe3JldHVybiB3dChmKSxtaShoLm5vUGtOdWxsLE0pfHwoaC5ub1BrTnVsbD1NKSxDdChNKX0pLGRlKDc5LCJoMyIs'@;
put 'OCksTGUoODAsIkVycm9yIiksaGUoKSxkZSg4MSwiZGl2Iiw5KSg4MiwicCIpLExlKDgzLCJJbmNvcnJlY3QgZGF0YSB0eXBlcyBpbiBub24tUHJpbWFyeSBLZXkgY29sdW1ucyIpLGhlKCkoKSxkZSg4NCwiZGl2IiwyMykoODUsImJ1dHRvbiIsNDUpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXty'@;
put 'ZXR1cm4gd3QoZiksaC5ub1BrTnVsbD0hMSxDdChoLmJhZEVkaXQ9ITEpfSksTGUoODYsIiBPayAiKSxoZSgpKCkoKSxkZSg4NywiY2xyLW1vZGFsIiw0NiksZ2koImNsck1vZGFsT3BlbkNoYW5nZSIsZnVuY3Rpb24oTSl7cmV0dXJuIHd0KGYpLG1pKGgucGtEdXBzLE0pfHwoaC5wa0R1cHM9'@;
put 'TSksQ3QoTSl9KSxkZSg4OCwiaDMiLDgpLExlKDg5LCJFcnJvciIpLGhlKCksZGUoOTAsImRpdiIsOSkoOTEsInAiKSxMZSg5MiwiIER1cGxpY2F0ZSB2YWx1ZXMgY2Fubm90IGJlIHN1Ym1pdHRlZCBmb3IgUHJpbWFyeSBLZXkgY29sdW1ucyAiKSxoZSgpLGRlKDkzLCJwIiksTGUoOTQsIkR1'@;
put 'cGxpY2F0ZXMgZm91bmQ6IiksaGUoKSxndCg5NSxuOXQsMyw0LCJzcGFuIiw0NyksaGUoKSxkZSg5NiwiZGl2IiwyMykoOTcsImJ1dHRvbiIsNDUpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoZiksQ3QoaC5wa0R1cHM9ITEpfSksTGUoOTgsIiBPayAiKSxoZSgpKCkoKSxkZSg5'@;
put 'OSwiY2xyLW1vZGFsIiw0MiksZ2koImNsck1vZGFsT3BlbkNoYW5nZSIsZnVuY3Rpb24oTSl7cmV0dXJuIHd0KGYpLG1pKGgudG9vTG9uZyxNKXx8KGgudG9vTG9uZz1NKSxDdChNKX0pLGRlKDEwMCwiaDMiLDgpLExlKDEwMSwiRXJyb3IiKSxoZSgpLGRlKDEwMiwiZGl2Iiw5KSgxMDMsInAi'@;
put 'KSxMZSgxMDQsIiBUaGUgZm9sbG93aW5nIGNvbHVtbnMgaGF2ZSB2YWx1ZXMgdGhhdCBleGNlZWQgbGVuZ3RoIGxpbWl0czogIiksaGUoKSxndCgxMDUscjl0LDIsMywicCIsNDgpLGhlKCksZGUoMTA2LCJkaXYiLDIzKSgxMDcsImJ1dHRvbiIsNDUpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXty'@;
put 'ZXR1cm4gd3QoZiksaC50b29Mb25nPSExLEN0KGguY2xlYW5FeGNlZWQoKSl9KSxMZSgxMDgsIiBPayAiKSxoZSgpKCkoKSgpKCkoKSgpKCksZ3QoMTA5LGk5dCwxNCwwLCJkaXYiLDQ5KSxkZSgxMTAsImNsci1tb2RhbCIsNTApLGdpKCJjbHJNb2RhbE9wZW5DaGFuZ2UiLGZ1bmN0aW9uKE0p'@;
put 'e3JldHVybiB3dChmKSxtaShoLmZpbHRlcixNKXx8KGguZmlsdGVyPU0pLEN0KE0pfSksZGUoMTExLCJoMyIsNTEpLExlKDExMiwiIEZpbHRlciBmb3IgdGFibGU6ICIpLGRlKDExMywic3BhbiIpLExlKDExNCksaGUoKSgpLGRlKDExNSwiZGl2Iiw5KSxndCgxMTYsYTl0LDIsMCwiYXBwLXF1'@;
put 'ZXJ5IiwzOSksaGUoKSxkZSgxMTcsImRpdiIsMjMpKDExOCwiYnV0dG9uIiw1MiksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChmKSxDdChoLnJlc2V0RmlsdGVyKCkpfSksTGUoMTE5LCIgcmVzZXQgZmlsdGVyICIpLGhlKCksZGUoMTIwLCJidXR0b24iLDUzKSxGdCgiY2xpY2si'@;
put 'LGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGYpLEN0KGguZmlsdGVyPSExKX0pLExlKDEyMSwiIENhbmNlbCAiKSxoZSgpLGRlKDEyMiwiYnV0dG9uIiw1NCksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChmKSxDdChoLnNlbmRDbGF1c2UoKSl9KSxMZSgxMjMsIiBPayAiKSxoZSgpKCko'@;
put 'KSxkZSgxMjQsImNsci1tb2RhbCIsNDIpLGdpKCJjbHJNb2RhbE9wZW5DaGFuZ2UiLGZ1bmN0aW9uKE0pe3JldHVybiB3dChmKSxtaShoLnF1ZXJ5RXJyLE0pfHwoaC5xdWVyeUVycj1NKSxDdChNKX0pLGRlKDEyNSwiaDMiLDgpLExlKDEyNiwiRXJyb3IiKSxoZSgpLGRlKDEyNywiZGl2Iiw5'@;
put 'KSgxMjgsInAiKSxMZSgxMjkpLGhlKCkoKSxkZSgxMzAsImRpdiIsMjMpKDEzMSwiYnV0dG9uIiw1NSksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChmKSxDdChoLnF1ZXJ5RXJyPSExKX0pLExlKDEzMiwiIENhbmNlbCAiKSxoZSgpLGRlKDEzMywiYnV0dG9uIiw0NSksRnQoImNs'@;
put 'aWNrIixmdW5jdGlvbigpe3JldHVybiB3dChmKSxDdChoLnF1ZXJ5RXJyPSExKX0pLExlKDEzNCwiIE9rICIpLGhlKCkoKSgpLGRlKDEzNSwiY2xyLW1vZGFsIiw1NiksZ2koImNsck1vZGFsT3BlbkNoYW5nZSIsZnVuY3Rpb24oTSl7cmV0dXJuIHd0KGYpLG1pKGguZGlzY2FyZFNvdXJjZUZp'@;
put 'bGUsTSl8fChoLmRpc2NhcmRTb3VyY2VGaWxlPU0pLEN0KE0pfSksZGUoMTM2LCJoMyIsNTEpLExlKDEzNywiV2FybmluZyIpLGhlKCksZGUoMTM4LCJkaXYiLDkpLExlKDEzOSwiIFRoaXMgYWN0aW9uIHdpbGwgZGlzY2FyZCB0aGUgc291cmNlIGZpbGUgYW5kIGl0J3MgbG9hZGVkIGRhdGEg'@;
put 'IiksZGUoMTQwLCJiIiksTGUoMTQxKSxoZSgpLExlKDE0MiwiIERvIHlvdSB3aXNoIHRvIHByb2NlZWQ/ICIpLGhlKCksZGUoMTQzLCJkaXYiLDIzKSgxNDQsImJ1dHRvbiIsNTMpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoZiksQ3QoaC5kaXNjYXJkU291cmNlRmlsZT0hMSl9'@;
put 'KSxMZSgxNDUsIiBDYW5jZWwgIiksaGUoKSxkZSgxNDYsImJ1dHRvbiIsNTcpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoZiksaC5kaXNjYXJkU291cmNlRmlsZT0hMSxDdChoLmRpc2NhcmRQZW5kaW5nRXhjZWwoITApKX0pLExlKDE0NywiIE9rICIpLGhlKCkoKSgpLGRlKDE0'@;
put 'OCwiY2xyLW1vZGFsIiw1NiksZ2koImNsck1vZGFsT3BlbkNoYW5nZSIsZnVuY3Rpb24oTSl7cmV0dXJuIHd0KGYpLG1pKGguZmlsZVBhc3N3b3JkTW9kYWwsTSl8fChoLmZpbGVQYXNzd29yZE1vZGFsPU0pLEN0KE0pfSksZGUoMTQ5LCJoMyIsNTEpLExlKDE1MCwiIFBhc3N3b3JkIFByb3Rl'@;
put 'Y3RlZCBGaWxlICIpLGhlKCksZGUoMTUxLCJkaXYiLDU4KSgxNTIsInAiLDQzKSxMZSgxNTMsIlBsZWFzZSBlbnRlciBwYXNzd29yZDoiKSxoZSgpLEd0KDE1NCwiaW5wdXQiLDU5LDIpLGhlKCksZGUoMTU2LCJkaXYiLDIzKSxndCgxNTcsbzl0LDIsMCwicCIsNjApLGRlKDE1OCwiYnV0dG9u'@;
put 'Iiw1MyksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChmKSxoLmZpbGVQYXNzd29yZE1vZGFsPSExLEN0KGguZmlsZVBhc3N3b3JkU3ViamVjdC5uZXh0KHZvaWQgMCkpfSksTGUoMTU5LCIgQ2FuY2VsIHVwbG9hZCAiKSxoZSgpLGRlKDE2MCwiYnV0dG9uIiw2MSksRnQoImNsaWNr'@;
put 'IixmdW5jdGlvbigpe3d0KGYpO2NvbnN0IE09aGEoMTU1KTtyZXR1cm4gaC5maWxlUGFzc3dvcmRNb2RhbD0hMSxDdChoLmZpbGVQYXNzd29yZFN1YmplY3QubmV4dChNLnZhbHVlKSl9KSxMZSgxNjEsIiBVbmxvY2sgIiksaGUoKSgpKCksZGUoMTYyLCJjbHItbW9kYWwiLDU2KSxnaSgiY2xy'@;
put 'TW9kYWxPcGVuQ2hhbmdlIixmdW5jdGlvbihNKXtyZXR1cm4gd3QoZiksbWkoaC5tYW51YWxGaWxlRWRpdE1vZGFsLE0pfHwoaC5tYW51YWxGaWxlRWRpdE1vZGFsPU0pLEN0KE0pfSksZGUoMTYzLCJoMyIsNTEpLExlKDE2NCwiV2FybmluZyIpLGhlKCksZGUoMTY1LCJkaXYiLDkpLExlKDE2'@;
put 'NiwiIE1hbnVhbGx5IGVkaXRpbmcgdGhpcyBkYXRhIHdpbGwgbWVhbiB0aGUgc291cmNlIGZpbGUgIiksZGUoMTY3LCJiIiksTGUoMTY4KSxoZSgpLExlKDE2OSwiIHdpbGwgYmUgZGlzY2FyZGVkLiBEbyB5b3Ugd2lzaCB0byBwcm9jZWVkPyAiKSxoZSgpLGRlKDE3MCwiZGl2IiwyMykoMTcx'@;
put 'LCJidXR0b24iLDUzKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGYpLEN0KGgubWFudWFsRmlsZUVkaXRNb2RhbD0hMSl9KSxMZSgxNzIsIiBDYW5jZWwgIiksaGUoKSxkZSgxNzMsImJ1dHRvbiIsNTcpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoZiksaC5tYW51'@;
put 'YWxGaWxlRWRpdE1vZGFsPSExLEN0KGgucHJldmlld1RhYmxlRWRpdENvbmZpcm0oKSl9KSxMZSgxNzQsIiBPayAiKSxoZSgpKCkoKSxkZSgxNzUsImFwcC1kYXRhc2V0LWluZm8iLDYyKSxnaSgib3BlbkNoYW5nZSIsZnVuY3Rpb24oTSl7cmV0dXJuIHd0KGYpLG1pKGguZGF0YXNldEluZm8s'@;
put 'TSl8fChoLmRhdGFzZXRJbmZvPU0pLEN0KE0pfSksRnQoInJvd0NsaWNrZWQiLGZ1bmN0aW9uKE0pe3JldHVybiB3dChmKSxDdChoLmRhdGFzZXRJbmZvTW9kYWxSb3dDbGlja2VkKE0pKX0pLGhlKCksZGUoMTc2LCJhcHAtdmlld2JveGVzIiw2MyksZ2koInZpZXdib3hNb2RhbENoYW5nZSIs'@;
put 'ZnVuY3Rpb24oTSl7cmV0dXJuIHd0KGYpLG1pKGgudmlld2JveGVzLE0pfHwoaC52aWV3Ym94ZXM9TSksQ3QoTSl9KSxoZSgpfWlmKDImZCl7Y29uc3QgZj1oYSgxNTUpO2ZlKCksTWUoInVwbG9hZGVyIixoLnVwbG9hZGVyKSgiY2xyTW9kYWxTaXplIiwieGwiKSgiY2xyTW9kYWxTdGF0aWNC'@;
put 'YWNrZHJvcCIsITEpKCJjbHJNb2RhbENsb3NhYmxlIiwiVmFsaWRhdGluZy1EUSI9PT1oLmV4Y2VsVXBsb2FkU3RhdGUpLHBpKCJjbHJNb2RhbE9wZW4iLGguc2hvd1VwbG9hZE1vZGFsKSxmZSgxMykscGkoIm5nTW9kZWwiLGguZW5jb2RpbmcpLE1lKCJkaXNhYmxlZCIsIiIhPWguZmlsZW5h'@;
put 'bWUpLGZlKDQpLHBpKCJuZ01vZGVsIixoLmVuY29kaW5nKSxNZSgiZGlzYWJsZWQiLCIiIT1oLmZpbGVuYW1lKSxmZSgzKSxNZSgibmdJZiIsIWguZXhjZWxGaWxlUGFyc2luZyYmIWgudXBsb2FkTG9hZGluZyksZmUoKSxNZSgibmdJZiIsIWguZXhjZWxGaWxlUGFyc2luZyYmIWgudXBsb2Fk'@;
put 'TG9hZGluZyksZmUoMiksTWUoIm5nSWYiLCJWYWxpZGF0aW5nIiE9PWguZXhjZWxVcGxvYWRTdGF0ZSksZmUoKSxNZSgibmdJZiIsIlZhbGlkYXRpbmctRFEiPT09aC5leGNlbFVwbG9hZFN0YXRlKSxmZSgpLE1lKCJuZ0lmIixoLmV4Y2VsRmlsZVBhcnNpbmcpLGZlKDIpLE1lKCJuZ0lmIixo'@;
put 'LmN1cnJlbnRFZGl0UmVjb3JkSW5kZXg+LTEpLGZlKDMpLE1lKCJuZ0lmIiwhaC52YWxpZGF0aW9uRG9uZSYmaC5zdWJtaXQpLGZlKDMpLE1lKCJuZ0lmIixoLnRhYmxlVHJ1ZSksZmUoKSxUcigiY2xyLWNvbC1sZy0xMiIsIWgudGFibGVUcnVlKSxmZSgpLE1lKCJuZ1ZhciIsbHAoNjcseTd0'@;
put 'LG51bGw9PWgubGliZHM/bnVsbDpoLmxpYmRzLnNwbGl0KCIuIilbMF0sbnVsbD09aC5saWJkcz9udWxsOmgubGliZHMuc3BsaXQoIi4iKVsxXSkpLGZlKCksTWUoIm5nSWYiLGgudGFibGVUcnVlKSxmZSgpLE1lKCJuZ0lmIiwhR3MoNzAsSDZlKS5pbmNsdWRlcyhoLnF1ZXJ5VGV4dCkpLGZl'@;
put 'KCksTWUoIm5nQ2xhc3MiLHNwKDcyLF83dCwhR3MoNzEsSDZlKS5pbmNsdWRlcyhoLnF1ZXJ5VGV4dCkpKSxmZSgpLE1lKCJuZ0lmIiwhaC50YWJsZVRydWUpLGZlKDMpLFRyKCJoaWRkZW4iLGguaG90VGFibGUuaGlkZGVuKSxNZSgibGljZW5zZUtleSIsaC5ob3RUYWJsZS5saWNlbnNlS2V5'@;
put 'KSxmZSgzKSxNZSgibmdJZiIsaC50YWJsZVRydWUmJiFoLnJlc3RyaWN0aW9ucy5yZW1vdmVBZGRSZWNvcmRCdXR0b24pLGZlKCksTWUoIm5nSWYiLGgubGljZW5jZVN0YXRlLnZhbHVlLmVkaXRvcl9yb3dzX2FsbG93ZWQhPT1oLkluZmluaXR5JiZoLmRhdGFTb3VyY2UmJmguZGF0YVNvdXJj'@;
put 'ZS5sZW5ndGg+aC5saWNlbmNlU3RhdGUudmFsdWUuZWRpdG9yX3Jvd3NfYWxsb3dlZCksZmUoKSxNZSgibmdJZiIsaC5zdWJtaXQpLGZlKCkscGkoImNsck1vZGFsT3BlbiIsaC5zdWJtaXRMaW1pdE5vdGljZSksZmUoNSksRHIoIiBEdWUgdG8gY3VycmVudCBsaWNlbmNlLCBvbmx5ICIsaC5s'@;
put 'aWNlbmNlU3RhdGUudmFsdWUuc3VibWl0X3Jvd3NfbGltaXQsIiByb3dzIGluIGEgZmlsZSB3aWxsIGJlIHN1Ym1pdHRlZC4gVG8gcmVtb3ZlIHRoZSByZXN0cmljdGlvbiwgY29udGFjdCBzdXBwb3J0QGRhdGFjb250cm9sbGVyLmlvICIpLGZlKDYpLHBpKCJjbHJNb2RhbE9wZW4iLGguYmFk'@;
put 'RWRpdCksZmUoMiksd3IoaC5iYWRFZGl0VGl0bGV8fCJFcnJvciIpLGZlKDMpLHdyKGguYmFkRWRpdENhdXNlKSxmZSg0KSxwaSgiY2xyTW9kYWxPcGVuIixoLnBrTnVsbCksZmUoOSkscGkoImNsck1vZGFsT3BlbiIsaC5ub1BrTnVsbCksZmUoOSkscGkoImNsck1vZGFsT3BlbiIsaC5wa0R1'@;
put 'cHMpLGZlKDgpLE1lKCJuZ0Zvck9mIixoLmR1cGxpY2F0ZVBrSW5kZXhlcyksZmUoNCkscGkoImNsck1vZGFsT3BlbiIsaC50b29Mb25nKSxmZSg2KSxNZSgibmdGb3JPZiIsaC5leGNlZWRDZWxscyksZmUoNCksTWUoIm5nSWYiLGgubnVsbFZhcmlhYmxlcyksZmUoKSxwaSgiY2xyTW9kYWxP'@;
put 'cGVuIixoLmZpbHRlciksTWUoImNsck1vZGFsU2l6ZSIsInhsIikoImNsck1vZGFsQ2xvc2FibGUiLCExKSxmZSg0KSxEcigiICIsaC5saWJkcywiICIpLGZlKDIpLE1lKCJuZ0lmIixoLmZpbHRlciksZmUoNiksTWUoImNsckxvYWRpbmciLGguc3VibWl0TG9hZGluZyksZmUoMikscGkoImNs'@;
put 'ck1vZGFsT3BlbiIsaC5xdWVyeUVyciksZmUoNSksd3IoaC5xdWVyeUVyck1lc3NhZ2UpLGZlKDYpLHBpKCJjbHJNb2RhbE9wZW4iLGguZGlzY2FyZFNvdXJjZUZpbGUpLE1lKCJjbHJNb2RhbFNpemUiLCJ4bCIpKCJjbHJNb2RhbENsb3NhYmxlIiwhMSksZmUoNiksd3IoaC5maWxlbmFtZSks'@;
put 'ZmUoNykscGkoImNsck1vZGFsT3BlbiIsaC5maWxlUGFzc3dvcmRNb2RhbCksTWUoImNsck1vZGFsU2l6ZSIsIm1kIikoImNsck1vZGFsQ2xvc2FibGUiLCExKSxmZSg5KSxNZSgibmdJZiIsaC5maWxlVW5sb2NrRXJyb3IpLGZlKDMpLE1lKCJkaXNhYmxlZCIsZi52YWx1ZS5sZW5ndGg8MSks'@;
put 'ZmUoMikscGkoImNsck1vZGFsT3BlbiIsaC5tYW51YWxGaWxlRWRpdE1vZGFsKSxNZSgiY2xyTW9kYWxTaXplIiwieGwiKSgiY2xyTW9kYWxDbG9zYWJsZSIsITEpLGZlKDYpLHdyKGguZmlsZW5hbWUpLGZlKDcpLHBpKCJvcGVuIixoLmRhdGFzZXRJbmZvKSxNZSgiZHNtZXRhIixoLmRzbWV0'@;
put 'YSkoInZlcnNpb25zIixoLnZlcnNpb25zKSxmZSgpLHBpKCJ2aWV3Ym94TW9kYWwiLGgudmlld2JveGVzKX19LGRlcGVuZGVuY2llczpbSTZlLHd1LG5zLGJhLHFsLGJMLG5sLCRzLGMxLEhsLG91LEt1LGowLEwyLFAyLGRzLGNHLEVaZSxsRyxRTCx2Nyx5NyxiNyxEXyxTdyx0RSxSNmUsTDZl'@;
put 'LE82ZSxwTyxYZWUsdTd0LGg3dCxmN3QsRjZlXSxlbmNhcHN1bGF0aW9uOjJ9KX19cmV0dXJuIGN9KSgpO2NvbnN0IHM5dD1be3BhdGg6IjpsaWJNZW0iLGNvbXBvbmVudDppTn0se3BhdGg6IjpsaWJNZW0vOmZpbHRlcklkIixjb21wb25lbnQ6aU59LHtwYXRoOiJlZGl0LXJlY29yZC86bGli'@;
put 'TWVtIixjb21wb25lbnQ6aU59LHtwYXRoOiJlZGl0LXJlY29yZC86bGliTWVtLzpmaWx0ZXJJZCIsY29tcG9uZW50OmlOfV07bGV0IGw5dD0oKCk9PntjbGFzcyBje3N0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVt'@;
put 'b2Q9a2koe3R5cGU6Y30pfXN0YXRpY3t0aGlzLlx1MDI3NWluaj1Bcih7aW1wb3J0czpbUmEsemMuZm9yQ2hpbGQoczl0KSx6Y119KX19cmV0dXJuIGN9KSgpLHhBPSgoKT0+e2NsYXNzIGN7c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRp'@;
put 'Y3t0aGlzLlx1MDI3NW1vZD1raSh7dHlwZTpjfSl9c3RhdGlje3RoaXMuXHUwMjc1aW5qPUFyKHtpbXBvcnRzOltSYSx6MCxSYSxSYyxuZl19KX19cmV0dXJuIGN9KSgpLFFlZT0oKCk9PntjbGFzcyBje3N0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMp'@;
put 'fX1zdGF0aWN7dGhpcy5cdTAyNzVtb2Q9a2koe3R5cGU6Y30pfXN0YXRpY3t0aGlzLlx1MDI3NWluaj1Bcih7aW1wb3J0czpbUmEsejAsUmEsUmMsRzksTUEsbmZdfSl9fXJldHVybiBjfSkoKSxONmU9KCgpPT57Y2xhc3MgY3tzdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0'@;
put 'dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1bW9kPWtpKHt0eXBlOmN9KX1zdGF0aWN7dGhpcy5cdTAyNzVpbmo9QXIoe2ltcG9ydHM6W1JhLHowLFJhLFJjLFFlZSxvOSxfMWUsXzZlLHhBLG5mXX0pfX1yZXR1cm4gY30pKCk7bk4oKTtsZXQgYzl0PSgoKT0+e2NsYXNzIGN7c3Rh'@;
put 'dGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NW1vZD1raSh7dHlwZTpjfSl9c3RhdGlje3RoaXMuXHUwMjc1aW5qPUFyKHtpbXBvcnRzOltONmUsUmEsUmMsbDl0LHowLG85LmZvclJvb3QoKSxHOSxuZixDdyxNQSx4QSxf'@;
put 'MWUsUWVlXX0pfX1yZXR1cm4gY30pKCksdTl0PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt9bmdPbkluaXQoKXt9bmdPbkRlc3Ryb3koKXt9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NWNtcD1Wcih7dHlw'@;
put 'ZTpjLHNlbGVjdG9yczpbWyJhcHAtaG9tZS1yb3V0ZSJdXSxob3N0QXR0cnM6WzEsImNvbnRlbnQtY29udGFpbmVyIl0sZGVjbHM6MSx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24oZCxoKXsxJmQmJkd0KDAsInJvdXRlci1vdXRsZXQiKX0sZGVwZW5kZW5jaWVzOltyZ10sZW5jYXBzdWxhdGlv'@;
put 'bjoyfSl9fXJldHVybiBjfSkoKTtjb25zdCBkOXQ9WyJzaWRlYmFyTmF2Il0saDl0PVsiKiJdLGY5dD0oKT0+WyIvdmlldy91c2VybmF2L3VzZXJzIl0scDl0PSgpPT5bIi92aWV3L3VzZXJuYXYvZ3JvdXBzIl0sZzl0PSgpPT5bIi92aWV3L3VzZXJuYXYvcm9sZXMiXTtmdW5jdGlvbiBtOXQo'@;
put 'YyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJhIiwxOCksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChSZSgzKS5uYXZpZ2F0ZVRvVmlld2VyKCkpfSksTGUoMSwiRGF0YSIpLGhlKCl9fWZ1bmN0aW9uIHY5dChjLGwpezEmYyYmKGRlKDAsImEiLDE5KSxMZSgx'@;
put 'LCJBUEkgRXhwbG9yZXIiKSxoZSgpKX1mdW5jdGlvbiBiOXQoYyxsKXsxJmMmJihkZSgwLCJhIiwyMCksTGUoMSwiTGluZWFnZSIpLGhlKCkpfWZ1bmN0aW9uIHk5dChjLGwpezEmYyYmKGRlKDAsImEiLDIxKSxMZSgxLCJNZXRhZGF0YSIpLGhlKCkpfWZ1bmN0aW9uIF85dChjLGwpezEmYyYm'@;
put 'KGRlKDAsImEiLDIyKSxMZSgxLCIgVXNlcnMiKSxoZSgpKX1mdW5jdGlvbiB3OXQoYyxsKXsxJmMmJihkZSgwLCJhIiwyMyksTGUoMSwiU3VibWl0dGVkIiksaGUoKSl9ZnVuY3Rpb24gQzl0KGMsbCl7MSZjJiYoZGUoMCwiYSIsMjQpLExlKDEsIlRvIEFwcHJvdmUiKSxoZSgpKX1mdW5jdGlv'@;
put 'biBTOXQoYyxsKXtpZigxJmMmJihkZSgwLCJjbHItZHJvcGRvd24tbWVudSIpLGd0KDEsbTl0LDIsMCwiYSIsMTEpKDIsdjl0LDIsMCwiYSIsMTIpKDMsYjl0LDIsMCwiYSIsMTMpKDQseTl0LDIsMCwiYSIsMTQpKDUsXzl0LDIsMCwiYSIsMTUpKDYsdzl0LDIsMCwiYSIsMTYpKDcsQzl0LDIs'@;
put 'MCwiYSIsMTcpLGhlKCkpLDImYyl7Y29uc3QgYT1SZSgyKTtmZSgpLE1lKCJuZ0lmIixhLmlzTWFpblJvdXRlKCJ2aWV3IikpLGZlKCksTWUoIm5nSWYiLGEuaXNNYWluUm91dGUoInZpZXciKSYmIlNBU1ZJWUEiPT09YS5zZXJ2ZXJUeXBlKSxmZSgpLE1lKCJuZ0lmIixhLmlzTWFpblJvdXRl'@;
put 'KCJ2aWV3IikmJiJTQVM5Ij09PWEuc2VydmVyVHlwZSksZmUoKSxNZSgibmdJZiIsYS5pc01haW5Sb3V0ZSgidmlldyIpJiYiU0FTOSI9PT1hLnNlcnZlclR5cGUpLGZlKCksTWUoIm5nSWYiLGEuaXNNYWluUm91dGUoInZpZXciKSksZmUoKSxNZSgibmdJZiIsYS5pc01haW5Sb3V0ZSgiYXBw'@;
put 'cm92ZSIpKSxmZSgpLE1lKCJuZ0lmIixhLmlzTWFpblJvdXRlKCJhcHByb3ZlIikpfX1mdW5jdGlvbiBNOXQoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiLDcpKDEsImNsci1kcm9wZG93biIpKDIsImJ1dHRvbiIsOCksTGUoMyksR3QoNCwiY2xyLWljb24iLDkpLGhlKCksZ3QoNSxTOXQsOCw3'@;
put 'LCJjbHItZHJvcGRvd24tbWVudSIsMTApLGhlKCkoKSksMiZjKXtjb25zdCBhPVJlKCk7ZmUoMyksRHIoIiAiLGEuZ2V0U3ViUGFnZSgpLCIgIil9fWZ1bmN0aW9uIHg5dChjLGwpezEmYyYmR3QoMCwiY2xyLXRhYi1jb250ZW50Iil9ZnVuY3Rpb24gRTl0KGMsbCl7MSZjJiZHdCgwLCJjbHIt'@;
put 'dGFiLWNvbnRlbnQiKX1mdW5jdGlvbiBUOXQoYyxsKXtpZigxJmMmJihkZSgwLCJjbHItdGFiIikoMSwiYnV0dG9uIiwyNikoMiwicCIsMjcpLEd0KDMsImNsci1pY29uIiwzMiksTGUoNCwiIFJvbGVzICIpLGhlKCkoKSxndCg1LEU5dCwxLDAsImNsci10YWItY29udGVudCIsMzApLGhlKCkp'@;
put 'LDImYyl7Y29uc3QgYT1SZSgyKTtmZSgpLE1lKCJyb3V0ZXJMaW5rIixHcygyLGc5dCkpLGZlKDQpLE1lKCJjbHJJZkFjdGl2ZSIsYS5pc01haW5Sb3V0ZSgiL3ZpZXcvdXNlcm5hdi9yb2xlcyIpKX19ZnVuY3Rpb24gQTl0KGMsbCl7aWYoMSZjJiYoZGUoMCwiY2xyLXRhYnMiLDI1KSgxLCJj'@;
put 'bHItdGFiIikoMiwiYnV0dG9uIiwyNikoMywicCIsMjcpLEd0KDQsImNsci1pY29uIiwyOCksTGUoNSwiIFVzZXJzIiksaGUoKSgpLEd0KDYsImNsci10YWItY29udGVudCIpLGhlKCksZGUoNywiY2xyLXRhYiIpKDgsImJ1dHRvbiIsMjYpKDksInAiLDI3KSxHdCgxMCwiY2xyLWljb24iLDI5'@;
put 'KSxMZSgxMSwiIEdyb3VwcyIpLGhlKCkoKSxndCgxMix4OXQsMSwwLCJjbHItdGFiLWNvbnRlbnQiLDMwKSxoZSgpLGd0KDEzLFQ5dCw2LDMsImNsci10YWIiLDMxKSxoZSgpKSwyJmMpe2NvbnN0IGE9UmUoKTtmZSgyKSxNZSgicm91dGVyTGluayIsR3MoNCxmOXQpKSxmZSg2KSxNZSgicm91'@;
put 'dGVyTGluayIsR3MoNSxwOXQpKSxmZSg0KSxNZSgiY2xySWZBY3RpdmUiLGEuaXNNYWluUm91dGUoIi92aWV3L3VzZXJuYXYvZ3JvdXBzIikpLGZlKCksTWUoIm5nSWYiLCJTQVM5Ij09PWEuc2VydmVyVHlwZSl9fWZ1bmN0aW9uIGs5dChjLGwpezEmYyYmKGRlKDAsImNsci1kcm9wZG93bi1t'@;
put 'ZW51IikoMSwiYSIsMzMpLExlKDIsIlRhYmxlcyIpLGhlKCksZGUoMywiYSIsMzQpLExlKDQsIkV4Y2VsIE1hcHMiKSxoZSgpLGRlKDUsImEiLDM1KSxMZSg2LCJNdWx0aSBMb2FkIiksaGUoKSgpKX1mdW5jdGlvbiBEOXQoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiLDcpKDEsImNsci1kcm9w'@;
put 'ZG93biIpKDIsImJ1dHRvbiIsOCksTGUoMyksR3QoNCwiY2xyLWljb24iLDkpLGhlKCksZ3QoNSxrOXQsNywwLCJjbHItZHJvcGRvd24tbWVudSIsMTApLGhlKCkoKSksMiZjKXtjb25zdCBhPVJlKCk7ZmUoMyksRHIoIiAiLGEuZ2V0U3ViUGFnZSgpLCIgIil9fWxldCBpND0oKCk9PntjbGFz'@;
put 'cyBje2NvbnN0cnVjdG9yKGEsZCxoKXt0aGlzLl9yb3V0ZXI9YSx0aGlzLmV2ZW50U2VydmljZT1kLHRoaXMuX3Nhc1NlcnZpY2U9aCx0aGlzLnNjcm9sbGVkVG9Cb3R0b209bmV3IEtyLHRoaXMuc2lkZWJhck9wZW49ITAsdGhpcy5zaWRlYmFyV2lkdGg9bnVsbCx0aGlzLnNpZGViYXJNYXhX'@;
put 'aWR0aD1udWxsLHRoaXMucmVzaXppbmc9ITEsdGhpcy5zYXNqc0NvbmZpZz1uZXcgbWguU0FTanNDb25maWcsdGhpcy5zYXNqc0NvbmZpZz10aGlzLl9zYXNTZXJ2aWNlLmdldFNhc2pzQ29uZmlnKCksdGhpcy5zZXJ2ZXJUeXBlPXRoaXMuX3Nhc1NlcnZpY2UuZ2V0U2VydmVyVHlwZSgpfW5n'@;
put 'T25Jbml0KCl7dGhpcy5ldmVudFNlcnZpY2Uub25TaWRlYmFyVG9nZ2xlLnN1YnNjcmliZShhPT57dGhpcy5zaWRlYmFyT3Blbj1hP2Eub3BlbjohdGhpcy5zaWRlYmFyT3Blbix0aGlzLmV2ZW50U2VydmljZS5kaXNwYXRjaEV2ZW50KCJyZXNpemUiKX0pfW9uVHJlZVNjcm9sbChhKXtsZXQg'@;
put 'ZD1hLnRhcmdldDtkLnNjcm9sbFRvcD49ZC5zY3JvbGxIZWlnaHQtZC5vZmZzZXRIZWlnaHQtMTAmJnRoaXMuc2Nyb2xsZWRUb0JvdHRvbS5lbWl0KCl9aXNNYWluUm91dGUoYSl7cmV0dXJuIHRoaXMuX3JvdXRlci51cmwuaW5jbHVkZXMoYSl9Z2V0U3ViUGFnZSgpe3JldHVybiB0aGlzLl9y'@;
put 'b3V0ZXIudXJsLnNwbGl0KCIvIilbMl19bmF2aWdhdGVUb1ZpZXdlcigpe0tuLnZpZXdlci5jdXJyZW50U2VsZWN0aW9uPSIiLHRoaXMuX3JvdXRlci5uYXZpZ2F0ZUJ5VXJsKCIvdmlldy9kYXRhIil9cmVzaXplU3RhcnQoKXt0aGlzLnJlc2l6aW5nPSEwLGRvY3VtZW50LmdldEVsZW1lbnRz'@;
put 'QnlUYWdOYW1lKCJib2R5IilbMF0uc3R5bGUuY3NzVGV4dD0idXNlci1zZWxlY3Q6IG5vbmUifXJlc2l6ZUVuZCgpe3RoaXMucmVzaXppbmc9ITEsZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImJvZHkiKVswXS5zdHlsZS5jc3NUZXh0PSIifW9uTW91c2VNb3ZlKGEpe2lmKHRoaXMu'@;
put 'cmVzaXppbmcpe3RoaXMuc2lkZWJhcldpZHRoPWEuY2xpZW50WDtsZXQgZD1kb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCJuYXYtdHJlZSIpWzBdO3RoaXMuc2lkZWJhcldpZHRoJiZ0aGlzLmlzT3ZlcmZsb3duKGQpJiYodGhpcy5zaWRlYmFyTWF4V2lkdGg9dGhpcy5zaWRlYmFy'@;
put 'V2lkdGg+PTM3NT90aGlzLnNpZGViYXJXaWR0aCsxMDp0aGlzLnNpZGViYXJNYXhXaWR0aCl9fW9uTW91c2VVcChhKXt0aGlzLnJlc2l6aW5nJiZ0aGlzLnJlc2l6ZUVuZCgpfWlzT3ZlcmZsb3duKGEpe3JldHVybiBhLnNjcm9sbFdpZHRoPmEuY2xpZW50V2lkdGh9c3RhdGlje3RoaXMuXHUw'@;
put 'Mjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoR2UoTHMpLEdlKHZjKSxHZShCcykpfX1zdGF0aWN7dGhpcy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siYXBwLXNpZGViYXIiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGQsaCl7aWYoMSZkJiZxYShkOXQsNSksMiZk'@;
put 'KXtsZXQgZjtDaShmPVNpKCkpJiYoaC5zaWRlYmFyTmF2PWYuZmlyc3QpfX0saG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGQsaCl7MSZkJiZGdCgibW91c2Vtb3ZlIixmdW5jdGlvbih2KXtyZXR1cm4gaC5vbk1vdXNlTW92ZSh2KX0sMCwkMykoIm1vdXNldXAiLGZ1bmN0aW9uKHYpe3JldHVybiBo'@;
put 'Lm9uTW91c2VVcCh2KX0sITEsJDMpfSxvdXRwdXRzOntzY3JvbGxlZFRvQm90dG9tOiJzY3JvbGxlZFRvQm90dG9tIn0sbmdDb250ZW50U2VsZWN0b3JzOmg5dCxkZWNsczo5LHZhcnM6MTMsY29uc3RzOltbInNpZGViYXJOYXYiLCIiXSxbImlkIiwic2lkZWJhck5hdiJdLFsiY2xhc3MiLCJk'@;
put 'LWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBzdWItZHJvcGRvd24iLDQsIm5nSWYiXSxbImNsYXNzIiwicC0xMCIsNCwibmdJZiJdLFsxLCJuYXYtZGl2aWRlciJdLFsxLCJuYXYtdHJlZSIsMywic2Nyb2xsIl0sWzEsInJlc2l6ZS1oYW5kbGUiLDMsIm1vdXNlZG93biJdLFsxLCJkLWZs'@;
put 'ZXgiLCJqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIiwic3ViLWRyb3Bkb3duIl0sWyJjbHJEcm9wZG93blRyaWdnZXIiLCIiLDEsImRyb3Bkb3duLXRvZ2dsZSIsImJ0biIsImJ0bi1wcmltYXJ5Il0sWyJzaGFwZSIsImNhcmV0IGRvd24iXSxbNCwiY2xySWZPcGVuIl0sWyJjbHJWZXJ0aWNhbE5h'@;
put 'dkxpbmsiLCIiLCJyb3V0ZXJMaW5rQWN0aXZlIiwiYWN0aXZlIiwzLCJjbGljayIsNCwibmdJZiJdLFsiY2xyVmVydGljYWxOYXZMaW5rIiwiIiwicm91dGVyTGluayIsIi92aWV3L3ZpeWEtYXBpLWV4cGxvcmVyIiwicm91dGVyTGlua0FjdGl2ZSIsImFjdGl2ZSIsNCwibmdJZiJdLFsiY2xy'@;
put 'VmVydGljYWxOYXZMaW5rIiwiIiwicm91dGVyTGluayIsIi92aWV3L2xpbmVhZ2UiLCJyb3V0ZXJMaW5rQWN0aXZlIiwiYWN0aXZlIiw0LCJuZ0lmIl0sWyJjbHJWZXJ0aWNhbE5hdkxpbmsiLCIiLCJyb3V0ZXJMaW5rIiwiL3ZpZXcvbWV0YWRhdGEiLCJyb3V0ZXJMaW5rQWN0aXZlIiwiYWN0'@;
put 'aXZlIiw0LCJuZ0lmIl0sWyJjbHJWZXJ0aWNhbE5hdkxpbmsiLCIiLCJyb3V0ZXJMaW5rIiwiL3ZpZXcvdXNlcm5hdiIsInJvdXRlckxpbmtBY3RpdmUiLCJhY3RpdmUiLDQsIm5nSWYiXSxbImNsclZlcnRpY2FsTmF2TGluayIsIiIsInJvdXRlckxpbmsiLCIvcmV2aWV3L2FwcHJvdmUvc3Vi'@;
put 'bWl0dGVkIiwicm91dGVyTGlua0FjdGl2ZSIsImFjdGl2ZSIsNCwibmdJZiJdLFsiY2xyVmVydGljYWxOYXZMaW5rIiwiIiwicm91dGVyTGluayIsIi9yZXZpZXcvYXBwcm92ZS90b2FwcHJvdmUiLCJyb3V0ZXJMaW5rQWN0aXZlIiwiYWN0aXZlIiw0LCJuZ0lmIl0sWyJjbHJWZXJ0aWNhbE5h'@;
put 'dkxpbmsiLCIiLCJyb3V0ZXJMaW5rQWN0aXZlIiwiYWN0aXZlIiwzLCJjbGljayJdLFsiY2xyVmVydGljYWxOYXZMaW5rIiwiIiwicm91dGVyTGluayIsIi92aWV3L3ZpeWEtYXBpLWV4cGxvcmVyIiwicm91dGVyTGlua0FjdGl2ZSIsImFjdGl2ZSJdLFsiY2xyVmVydGljYWxOYXZMaW5rIiwi'@;
put 'Iiwicm91dGVyTGluayIsIi92aWV3L2xpbmVhZ2UiLCJyb3V0ZXJMaW5rQWN0aXZlIiwiYWN0aXZlIl0sWyJjbHJWZXJ0aWNhbE5hdkxpbmsiLCIiLCJyb3V0ZXJMaW5rIiwiL3ZpZXcvbWV0YWRhdGEiLCJyb3V0ZXJMaW5rQWN0aXZlIiwiYWN0aXZlIl0sWyJjbHJWZXJ0aWNhbE5hdkxpbmsi'@;
put 'LCIiLCJyb3V0ZXJMaW5rIiwiL3ZpZXcvdXNlcm5hdiIsInJvdXRlckxpbmtBY3RpdmUiLCJhY3RpdmUiXSxbImNsclZlcnRpY2FsTmF2TGluayIsIiIsInJvdXRlckxpbmsiLCIvcmV2aWV3L2FwcHJvdmUvc3VibWl0dGVkIiwicm91dGVyTGlua0FjdGl2ZSIsImFjdGl2ZSJdLFsiY2xyVmVy'@;
put 'dGljYWxOYXZMaW5rIiwiIiwicm91dGVyTGluayIsIi9yZXZpZXcvYXBwcm92ZS90b2FwcHJvdmUiLCJyb3V0ZXJMaW5rQWN0aXZlIiwiYWN0aXZlIl0sWzEsInAtMTAiXSxbImNsclRhYkxpbmsiLCIiLDEsInVzZXItbmF2LWJ0biIsMywicm91dGVyTGluayJdLFsxLCJ6ZXJvLW1hcmdpbiJd'@;
put 'LFsic2hhcGUiLCJ1c2VyIl0sWyJzaGFwZSIsInVzZXJzIl0sWzQsImNscklmQWN0aXZlIl0sWzQsIm5nSWYiXSxbInNoYXBlIiwiYmxvY2tzLWdyb3VwIl0sWyJjbHJWZXJ0aWNhbE5hdkxpbmsiLCIiLCJyb3V0ZXJMaW5rIiwiL2hvbWUvdGFibGVzIiwicm91dGVyTGlua0FjdGl2ZSIsImFj'@;
put 'dGl2ZSJdLFsiY2xyVmVydGljYWxOYXZMaW5rIiwiIiwicm91dGVyTGluayIsIi9ob21lL2V4Y2VsLW1hcHMiLCJyb3V0ZXJMaW5rQWN0aXZlIiwiYWN0aXZlIl0sWyJjbHJWZXJ0aWNhbE5hdkxpbmsiLCIiLCJyb3V0ZXJMaW5rIiwiL2hvbWUvbXVsdGktbG9hZCIsInJvdXRlckxpbmtBY3Rp'@;
put 'dmUiLCJhY3RpdmUiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZCxoKXtpZigxJmQpe2NvbnN0IGY9TG4oKTtzYSgpLGRlKDAsImNsci12ZXJ0aWNhbC1uYXYiLDEsMCksZ3QoMixNOXQsNiwxLCJkaXYiLDIpKDMsQTl0LDE0LDYsImNsci10YWJzIiwzKSg0LEQ5dCw2LDEsImRpdiIsMiksR3QoNSwi'@;
put 'ZGl2Iiw0KSxkZSg2LCJkaXYiLDUpLEZ0KCJzY3JvbGwiLGZ1bmN0aW9uKE0pe3JldHVybiB3dChmKSxDdChoLm9uVHJlZVNjcm9sbChNKSl9KSxZcig3KSxoZSgpLGRlKDgsInNwYW4iLDYpLEZ0KCJtb3VzZWRvd24iLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGYpLEN0KGgucmVzaXplU3RhcnQo'@;
put 'KSl9KSxoZSgpKCl9MiZkJiYoX2QoIndpZHRoIixoLnNpZGViYXJXaWR0aCwicHgiKSgibWF4LXdpZHRoIixoLnNpZGViYXJNYXhXaWR0aCwicHgiKSxUcigiY2xvc2VkIiwhaC5zaWRlYmFyT3BlbikoInJlc2l6aW5nIixoLnJlc2l6aW5nKSxmZSgyKSxNZSgibmdJZiIsaC5pc01haW5Sb3V0'@;
put 'ZSgidmlldyIpKSxmZSgpLE1lKCJuZ0lmIixoLmlzTWFpblJvdXRlKCJ2aWV3L3VzZXJuYXYiKSksZmUoKSxNZSgibmdJZiIsaC5pc01haW5Sb3V0ZSgiaG9tZSIpKSxmZSg0KSxUcigicmVzaXppbmciLGgucmVzaXppbmcpKX0sZGVwZW5kZW5jaWVzOltiYSxIbCxIeSxMMixfbSxDbSx4Nyx3'@;
put 'bSx5bSxTNyxRWSx0RyxzZyxnNyxtNyxjMSxweV0sZW5jYXBzdWxhdGlvbjoyfSl9fXJldHVybiBjfSkoKTtmdW5jdGlvbiBJOXQoYyxsKXsxJmMmJkd0KDAsImNsci1pY29uIiwxMyl9ZnVuY3Rpb24gUjl0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiY2xyLWljb24iLDE0KSxG'@;
put 'dCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1SZSgyKTtyZXR1cm4gaC5saWJyYXJpZXNTZWFyY2g9IiIsQ3QoaC5saWJyYXJ5T25GaWx0ZXIoKSl9KSxoZSgpfX1mdW5jdGlvbiBMOXQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJjbHItdHJlZS1ub2RlIiw4KSgx'@;
put 'LCJkaXYiLDkpKDIsImlucHV0IiwxMCwwKSxnaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1SZSgpO3JldHVybiBtaShmLmxpYnJhcmllc1NlYXJjaCxoKXx8KGYubGlicmFyaWVzU2VhcmNoPWgpLEN0KGgpfSksRnQoImtleXVwIixmdW5jdGlvbigpe3JldHVy'@;
put 'biB3dChhKSxDdChSZSgpLmxpYnJhcnlPbkZpbHRlcigpKX0pLGhlKCksZ3QoNCxJOXQsMSwwLCJjbHItaWNvbiIsMTEpKDUsUjl0LDEsMCwiY2xyLWljb24iLDEyKSxoZSgpKCl9aWYoMiZjKXtjb25zdCBhPWhhKDMpLGQ9UmUoKTtmZSgyKSxwaSgibmdNb2RlbCIsZC5saWJyYXJpZXNTZWFy'@;
put 'Y2gpLGZlKDIpLE1lKCJuZ0lmIixhLnZhbHVlLmxlbmd0aDwxKSxmZSgpLE1lKCJuZ0lmIixhLnZhbHVlLmxlbmd0aD4wKX19ZnVuY3Rpb24gTzl0KGMsbCl7MSZjJiZHdCgwLCJjbHItaWNvbiIsMTMpfWZ1bmN0aW9uIFA5dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImNsci1p'@;
put 'Y29uIiwxNCksRnQoImNsaWNrIixmdW5jdGlvbigpe3d0KGEpLFJlKCk7Y29uc3QgaD1oYSgzKSxmPVJlKDIpLiRpbXBsaWNpdCx2PVJlKCk7cmV0dXJuIGgudmFsdWU9IiIsZi5zZWFyY2hTdHJpbmc9IiIsQ3Qodi50cmVlT25GaWx0ZXIoZiwidGFibGVzIikpfSksaGUoKX19ZnVuY3Rpb24g'@;
put 'Rjl0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiY2xyLXRyZWUtbm9kZSIsOCkoMSwiZGl2Iiw5KSgyLCJpbnB1dCIsMTksMSksZ2koIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9UmUoMikuJGltcGxpY2l0O3JldHVybiBtaShmLnNlYXJjaFN0cmlu'@;
put 'ZyxoKXx8KGYuc2VhcmNoU3RyaW5nPWgpLEN0KGgpfSksRnQoImtleXVwIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9UmUoMikuJGltcGxpY2l0O3JldHVybiBDdChSZSgpLnRyZWVPbkZpbHRlcihoLCJ0YWJsZXMiKSl9KSxoZSgpLGd0KDQsTzl0LDEsMCwiY2xyLWljb24iLDExKSg1LFA5'@;
put 'dCwxLDAsImNsci1pY29uIiwxMiksaGUoKSgpfWlmKDImYyl7Y29uc3QgYT1oYSgzKSxkPVJlKDIpLiRpbXBsaWNpdDtmZSgyKSxwaSgibmdNb2RlbCIsZC5zZWFyY2hTdHJpbmcpLGZlKDIpLE1lKCJuZ0lmIixhLnZhbHVlLmxlbmd0aDwxKSxmZSgpLE1lKCJuZ0lmIixhLnZhbHVlLmxlbmd0'@;
put 'aD4wKX19ZnVuY3Rpb24gSDl0KGMsbCl7MSZjJiZHdCgwLCJjbHItaWNvbiIsMjYpfWZ1bmN0aW9uIE45dChjLGwpezEmYyYmR3QoMCwiY2xyLWljb24iLDI3KX1mdW5jdGlvbiBWOXQoYyxsKXsxJmMmJihkZSgwLCJjbHItdG9vbHRpcC1jb250ZW50IiwyOSkoMSwic3BhbiIpLExlKDIsIiBU'@;
put 'byB1bmxvY2sgYWxsIHRhYmxlcywgY29udGFjdCBzdXBwb3J0QGRhdGFjb250cm9sbGVyLmlvICIpLGhlKCkoKSl9ZnVuY3Rpb24gQjl0KGMsbCl7MSZjJiYoc2koMCksZ3QoMSxWOXQsMywwLCJjbHItdG9vbHRpcC1jb250ZW50IiwyOCksbGkoKSl9ZnVuY3Rpb24gajl0KGMsbCl7aWYoMSZj'@;
put 'KXtjb25zdCBhPUxuKCk7ZGUoMCwiY2xyLXRvb2x0aXAiKSgxLCJidXR0b24iLDIxKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7Y29uc3QgaD13dChhKS5uZ1ZhcixmPVJlKCkuJGltcGxpY2l0LHY9UmUoMikuJGltcGxpY2l0LE09UmUoKTtyZXR1cm4gQ3QoaD8iIjpNLm9uVGFibGVDbGljayhm'@;
put 'LHYpKX0pLHNpKDIsMjIpLGd0KDMsSDl0LDEsMCwiY2xyLWljb24iLDIzKSg0LE45dCwxLDAsImNsci1pY29uIiwyNCksbGkoKSxMZSg1KSxoZSgpLGd0KDYsQjl0LDIsMCwibmctY29udGFpbmVyIiwyNSksaGUoKX1pZigyJmMpe2NvbnN0IGE9bC5uZ1ZhcixkPVJlKCkuJGltcGxpY2l0LGg9'@;
put 'UmUoMikuJGltcGxpY2l0LGY9UmUoKTtmZSgpLFRyKCJkYy1sb2NrZWQtY29udHJvbCIsYSkoImFjdGl2ZSIsZi5saWJUYWJBY3RpdmUoaC5MSUJSQVJZUkVGLGQpKSxmZSgpLE1lKCJuZ1N3aXRjaCIsZC5pbmNsdWRlcygiLUZDIikpLGZlKCksTWUoIm5nU3dpdGNoQ2FzZSIsITApLGZlKCks'@;
put 'TWUoIm5nU3dpdGNoQ2FzZSIsITEpLGZlKCksRHIoIiAiLGQucmVwbGFjZSgiLUZDIiwiIiksIiAiKSxmZSgpLE1lKCJuZ0lmIixhKX19ZnVuY3Rpb24gejl0KGMsbCl7aWYoMSZjJiYoZGUoMCwiY2xyLXRyZWUtbm9kZSIpLGd0KDEsajl0LDcsOSwiY2xyLXRvb2x0aXAiLDIwKSxoZSgpKSwy'@;
put 'JmMpe2NvbnN0IGE9bC5pbmRleCxkPVJlKDMpO2ZlKCksTWUoIm5nVmFyIixhKzE+ZC5saWNlbmNlU3RhdGUudmFsdWUudGFibGVzX2luX2xpYnJhcnlfbGltaXQpfX1mdW5jdGlvbiBVOXQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJjbHItdHJlZS1ub2RlIiwxNiksRnQoImNs'@;
put 'aWNrIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPVJlKCkuJGltcGxpY2l0LHY9UmUoKTtyZXR1cm4gdi50cmVlTm9kZUNsaWNrZWQoaCxmKSxDdCh2LmxpYj1mLkxJQlJBUllSRUYpfSksZ2koImNsckV4cGFuZGVkQ2hhbmdlIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPVJlKCkuJGlt'@;
put 'cGxpY2l0O3JldHVybiBtaShmLmV4cGFuZGVkLGgpfHwoZi5leHBhbmRlZD1oKSxDdChoKX0pLGRlKDEsInAiLDE3KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1SZSgpLiRpbXBsaWNpdCxmPVJlKCk7cmV0dXJuIGYubGliPWguTElCUkFSWVJFRixDdChmLmxpYnJhcnlP'@;
put 'bkNsaWNrKGguTElCUkFSWVJFRixoKSl9KSxHdCgyLCJjbHItaWNvbiIsMTgpLExlKDMpLGhlKCksZ3QoNCxGOXQsNiwzLCJjbHItdHJlZS1ub2RlIiwyKSg1LHo5dCwyLDEsImNsci10cmVlLW5vZGUiLDMpLGhlKCl9aWYoMiZjKXtjb25zdCBhPVJlKCkuJGltcGxpY2l0O1RyKCJjbHItZXhw'@;
put 'YW5kZWQiLGEuZXhwYW5kZWQpLHBpKCJjbHJFeHBhbmRlZCIsYS5leHBhbmRlZCksTWUoImNsckxvYWRpbmciLGEubG9hZGluZ1RhYmxlcyYmIWEudGFibGVzKSxmZSgzKSxEcigiICIsYS5MSUJSQVJZUkVGLCIgIiksZmUoKSxNZSgibmdJZiIsYS50YWJsZXMpLGZlKCksTWUoIm5nRm9yT2Yi'@;
put 'LGEudGFibGVzKX19ZnVuY3Rpb24gWjl0KGMsbCl7aWYoMSZjJiYoc2koMCksZ3QoMSxVOXQsNiw3LCJjbHItdHJlZS1ub2RlIiwxNSksbGkoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O2ZlKCksTWUoIm5nSWYiLCFhLmhpZGRlbil9fWZ1bmN0aW9uIFc5dChjLGwpezEmYyYmKGRlKDAs'@;
put 'ImRpdiIsMzApKDEsImRpdiIsMzEpKDIsInNwYW4iLDMyKSxMZSgzLCIgTG9hZGluZy4uLiAiKSxoZSgpKCkoKSl9ZnVuY3Rpb24gWTl0KGMsbCl7MSZjJiYoZGUoMCwicCIsMzYpLExlKDEsIiBQbGVhc2Ugc2VsZWN0IGEgdGFibGUgIiksaGUoKSl9ZnVuY3Rpb24gRzl0KGMsbCl7MSZjJiYo'@;
put 'ZGUoMCwicCIsMzYpLExlKDEsIiBObyBFZGl0YWJsZSBUYWJsZXMgQ29uZmlndXJlZCAiKSxoZSgpKX1mdW5jdGlvbiAkOXQoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiLDMzKSxHdCgxLCJpbWciLDM0KSxndCgyLFk5dCwyLDAsInAiLDM1KSgzLEc5dCwyLDAsInAiLDM1KSxoZSgpKSwyJmMp'@;
put 'e2NvbnN0IGE9UmUoKTtmZSgyKSxNZSgibmdJZiIsKG51bGw9PWEudHJlZU5vZGVMaWJyYXJpZXM/bnVsbDphLnRyZWVOb2RlTGlicmFyaWVzLmxlbmd0aCk+MCksZmUoKSxNZSgibmdJZiIsKG51bGw9PWEudHJlZU5vZGVMaWJyYXJpZXM/bnVsbDphLnRyZWVOb2RlTGlicmFyaWVzLmxlbmd0'@;
put 'aCk8MSl9fWxldCBLOXQ9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmLHYsTSl7dGhpcy5yb3V0ZT1hLHRoaXMucm91dGVyPWQsdGhpcy5saWNlbmNlU2VydmljZT1oLHRoaXMuaGVscGVyU2VydmljZT1mLHRoaXMuZXZlbnRTZXJ2aWNlPXYsdGhpcy5zYXNTZXJ2aWNlPU0sdGhp'@;
put 'cy50cmVlTm9kZUxpYnJhcmllcz1udWxsLHRoaXMubGlicmFyaWVzU2VhcmNoPSIiLHRoaXMubGliPSIiLHRoaXMudGFibGU9IiIsdGhpcy5lbmNvZGluZz0iVVRGLTgiLHRoaXMubG9hZGluZz0hMCx0aGlzLmxpY2VuY2VTdGF0ZT10aGlzLmxpY2VuY2VTZXJ2aWNlLmxpY2VuY2VTdGF0ZX1j'@;
put 'b2xsYXBzZUxpYnJhcnlJdGVtcyhhLGQpe2EuZm9yRWFjaChoPT57aC5MSUJSQVJZSUQhPT1kLkxJQlJBUllJRCYmKGguZXhwYW5kZWQ9ITEpfSl9dHJlZU5vZGVDbGlja2VkKGEsZCl7IkNvbGxhcHNlIj09PWEudGFyZ2V0LnRpdGxlJiZ0aGlzLmNvbGxhcHNlTGlicmFyeUl0ZW1zKHRoaXMu'@;
put 'bGlicmFyaWVzLGQpfWxpYnJhcnlPbkNsaWNrKGEsZCl7ZC5leHBhbmRlZD0hZC5leHBhbmRlZCxkLmV4cGFuZGVkJiYhdGhpcy50YWJsZSYmdGhpcy5zZWxlY3RMaWJyYXJ5KGEsITEsZCksdGhpcy5jb2xsYXBzZUxpYnJhcnlJdGVtcyh0aGlzLmxpYnJhcmllcyxkKX1zZWxlY3RMaWJyYXJ5'@;
put 'KGEsZCxoKXtoLmxvYWRpbmdUYWJsZXM9ITA7bGV0IGYsdj1bXTtpZih0aGlzLmxpYnNBbmRUYWJsZXMmJihmPXRoaXMubGlic0FuZFRhYmxlc1thXSx0aGlzLnRhYmxlPXZvaWQgMCwiUGxlYXNlIHNlbGVjdCBsaWJyYXJ5IiE9PWEpKXtsZXQgTT1mLmZpbHRlcihmdW5jdGlvbihEKXtyZXR1'@;
put 'cm4tMT09PXYuaW5kZXhPZihEKSYmKHYucHVzaChEKSwhMCl9KTt0aGlzLnRhYmxlcz1NLEtuLmVkaXRvci5saWJyYXJpZXM9dGhpcy5saWJyYXJpZXN9S24uZWRpdG9yLmxpYnJhcnk9YSxkfHx0aGlzLmNsZWFyR2xvYmFsc0ZpbHRlcigpLGgubG9hZGluZ1RhYmxlcz0hMSxoLmV4cGFuZGVk'@;
put 'PSEwfXNlbGVjdFRhYmxlKGEsZCl7dmFyIGg9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7aC5saWJUYWI9aC5saWIrIi4iK2gudGFibGUsaC5zYXNTZXJ2aWNlLmdldFNhc2pzQ29uZmlnKCksS24uZWRpdG9yLnRhYmxlPWEsZHx8aC5jbGVhckdsb2JhbHNGaWx0ZXIoKX0pKCl9Y2xlYXJH'@;
put 'bG9iYWxzRmlsdGVyKCl7S24uZWRpdG9yLmZpbHRlci5saWJkcz0iIixLbi5lZGl0b3IuZmlsdGVyLndoZXJlQ2xhdXNlPSIiLEtuLmVkaXRvci5maWx0ZXIuZ3JvdXBMb2dpYz0iIixLbi5lZGl0b3IuZmlsdGVyLmNsYXVzZXM9W10sS24uZWRpdG9yLmZpbHRlci52YWxzPVtdLEtuLmVkaXRv'@;
put 'ci5maWx0ZXIuY29scz1bXX1saWJUYWJBY3RpdmUoYSxkKXtyZXR1cm4hKCF0aGlzLmxpYnx8IXRoaXMudGFibGUpJiZhPT09dGhpcy5saWImJmQ9PT10aGlzLnRhYmxlfXRyZWVPbkZpbHRlcihhLGQpe3RoaXMuaGVscGVyU2VydmljZS50cmVlT25GaWx0ZXIoYSxkKX1saWJyYXJ5T25GaWx0'@;
put 'ZXIoKXt0aGlzLmhlbHBlclNlcnZpY2UubGlicmFyeU9uRmlsdGVyKHRoaXMudHJlZU5vZGVMaWJyYXJpZXMsdGhpcy5saWJyYXJpZXNTZWFyY2gsIkxJQlJBUllSRUYiKSxLbi5saW5lYWdlLmxpYnJhcmllc1NlYXJjaD10aGlzLmxpYnJhcmllc1NlYXJjaH1vblRhYmxlQ2xpY2soYSxkKXt0'@;
put 'aGlzLnRhYmxlPWEsdGhpcy5saWI9ZC5MSUJSQVJZUkVGLHRoaXMuc2VsZWN0VGFibGUoYSksdGhpcy5lZGl0VGFibGUoKX1lZGl0VGFibGUoKXt0aGlzLnJvdXRlLm5hdmlnYXRlQnlVcmwoIi9lZGl0b3IvIit0aGlzLmxpYisiLiIrdGhpcy50YWJsZSl9Z2V0TGlicmFyeVRhYmxlU3RhdGUo'@;
put 'KXtpZihudWxsIT09S24uZWRpdG9yLnRyZWVOb2RlTGlicmFyaWVzJiYodGhpcy50cmVlTm9kZUxpYnJhcmllcz1Lbi5lZGl0b3IudHJlZU5vZGVMaWJyYXJpZXMpLCIiIT09S24uZWRpdG9yLmxpYnJhcnkpe3RoaXMubGliPUtuLmVkaXRvci5saWJyYXJ5O2xldCBhPW51bGw7dGhpcy50cmVl'@;
put 'Tm9kZUxpYnJhcmllcyYmKGE9dGhpcy50cmVlTm9kZUxpYnJhcmllcy5maW5kKGQ9PmQuTElCUkFSWVJFRj09PXRoaXMubGliKSksdGhpcy5zZWxlY3RMaWJyYXJ5KEtuLmVkaXRvci5saWJyYXJ5LCEwLGEpfX1nZXRGcm9tR2xvYmFscygpe3RoaXMubGlic0FuZFRhYmxlcz1Lbi5lZGl0b3Iu'@;
put 'bGlic0FuZFRhYmxlcyx0aGlzLmxpYnJhcmllcz1Lbi5lZGl0b3IubGlicmFyaWVzLHRoaXMuZ2V0TGlicmFyeVRhYmxlU3RhdGUoKSx0aGlzLmxvYWRpbmc9ITF9bmdBZnRlckNvbnRlbnRJbml0KCl7S24uZWRpdG9yLnN0YXJ0dXBTZXQ/dGhpcy5nZXRGcm9tR2xvYmFscygpOnRoaXMuZXZl'@;
put 'bnRTZXJ2aWNlLm9uU3RhcnR1cERhdGFMb2FkZWQuc3Vic2NyaWJlKCgpPT57dGhpcy5nZXRGcm9tR2xvYmFscygpfSl9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoR2UoTHMpLEdlKEN1KSxHZSh1MSksR2UoU3UpLEdlKHZjKSxHZShCcykpfX1z'@;
put 'dGF0aWN7dGhpcy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siaG9tZS1jb21wb25lbnQiXV0saG9zdEF0dHJzOlsxLCJjb250ZW50LWNvbnRhaW5lciJdLGRlY2xzOjgsdmFyczo0LGNvbnN0czpbWyJzZWFyY2hMaWJUcmVlSW5wdXQiLCIiXSxbInNlYXJjaFRyZWVJbnB1dCIs'@;
put 'IiJdLFsiY2xhc3MiLCJzZWFyY2gtbm9kZSIsNCwibmdJZiJdLFs0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMSwiY29udGVudC1hcmVhIl0sWzEsImNhcmQtYmxvY2siXSxbImNsYXNzIiwic3Bpbm5lci13cmFwcGVyLWZ1bGxwYWdlIiw0LCJuZ0lmIl0sWyJjbGFzcyIsIm5vLXRhYmxlLXNlbGVj'@;
put 'dGVkIiw0LCJuZ0lmIl0sWzEsInNlYXJjaC1ub2RlIl0sWzEsInRyZWUtc2VhcmNoLXdyYXBwZXIiXSxbImNscklucHV0IiwiIiwiYXBwU3RlYWxGb2N1cyIsIiIsInBsYWNlaG9sZGVyIiwiTGlicmFyaWVzIiwibmFtZSIsImlucHV0IiwiYXV0b2NvbXBsZXRlIiwib2ZmIiwzLCJuZ01vZGVs'@;
put 'Q2hhbmdlIiwia2V5dXAiLCJuZ01vZGVsIl0sWyJzaGFwZSIsInNlYXJjaCIsNCwibmdJZiJdLFsic2hhcGUiLCJ0aW1lcyIsMywiY2xpY2siLDQsIm5nSWYiXSxbInNoYXBlIiwic2VhcmNoIl0sWyJzaGFwZSIsInRpbWVzIiwzLCJjbGljayJdLFszLCJjbHJFeHBhbmRlZCIsImNsckxvYWRp'@;
put 'bmciLCJjbHItZXhwYW5kZWQiLCJjbGljayIsImNsckV4cGFuZGVkQ2hhbmdlIiw0LCJuZ0lmIl0sWzMsImNsaWNrIiwiY2xyRXhwYW5kZWRDaGFuZ2UiLCJjbHJFeHBhbmRlZCIsImNsckxvYWRpbmciXSxbMSwibS0wIiwiY3Vyc29yLXBvaW50ZXIiLDMsImNsaWNrIl0sWyJzaGFwZSIsInJh'@;
put 'Y2stc2VydmVyIl0sWyJhcHBTdGVhbEZvY3VzIiwiIiwiY2xySW5wdXQiLCIiLCJwbGFjZWhvbGRlciIsIlRhYmxlcyIsIm5hbWUiLCJpbnB1dCIsImF1dG9jb21wbGV0ZSIsIm9mZiIsMywibmdNb2RlbENoYW5nZSIsImtleXVwIiwibmdNb2RlbCJdLFs0LCJuZ1ZhciJdLFsiY2xyVG9vbHRp'@;
put 'cFRyaWdnZXIiLCIiLDEsImNsci10cmVlbm9kZS1saW5rIiwzLCJjbGljayJdLFszLCJuZ1N3aXRjaCJdLFsic2hhcGUiLCJib2x0Iiw0LCJuZ1N3aXRjaENhc2UiXSxbInNoYXBlIiwidGFibGUiLDQsIm5nU3dpdGNoQ2FzZSJdLFs0LCJuZ0lmIl0sWyJzaGFwZSIsImJvbHQiXSxbInNoYXBl'@;
put 'IiwidGFibGUiXSxbImNsclBvc2l0aW9uIiwiYm90dG9tLXJpZ2h0IiwiY2xyU2l6ZSIsImxnIiw0LCJjbHJJZk9wZW4iXSxbImNsclBvc2l0aW9uIiwiYm90dG9tLXJpZ2h0IiwiY2xyU2l6ZSIsImxnIl0sWzEsInNwaW5uZXItd3JhcHBlci1mdWxscGFnZSJdLFsxLCJsb2FkaW5nU3Bpbm5l'@;
put 'ciJdLFsxLCJzcGlubmVyIl0sWzEsIm5vLXRhYmxlLXNlbGVjdGVkIl0sWyJzcmMiLCIvU0FTSm9iRXhlY3V0aW9uP19GSUxFPS9QdWJsaWMvYXBwL2RjcGxhY2Vob2xkZXIvc2VydmljZXMvd2ViL2ltYWdlcy9zZWxlY3QtdGFibGUucG5nIiwiYWx0Iiwic2VsZWN0IHRhYmxlIGljb24iLDEs'@;
put 'InNlbGVjdC10YWJsZS1pY29uIl0sWyJjbGFzcyIsInRleHQtY2VudGVyIGNvbG9yLWdyYXkgbXQtMTAiLCJjZHMtdGV4dCIsInNlY3Rpb24iLDQsIm5nSWYiXSxbImNkcy10ZXh0Iiwic2VjdGlvbiIsMSwidGV4dC1jZW50ZXIiLCJjb2xvci1ncmF5IiwibXQtMTAiXV0sdGVtcGxhdGU6ZnVu'@;
put 'Y3Rpb24oZCxoKXsxJmQmJihkZSgwLCJhcHAtc2lkZWJhciIpKDEsImNsci10cmVlIiksZ3QoMixMOXQsNiwzLCJjbHItdHJlZS1ub2RlIiwyKSgzLFo5dCwyLDEsIm5nLWNvbnRhaW5lciIsMyksaGUoKSgpLGRlKDQsImRpdiIsNCkoNSwiZGl2Iiw1KSxndCg2LFc5dCw0LDAsImRpdiIsNiko'@;
put 'NywkOXQsNCwyLCJkaXYiLDcpLGhlKCkoKSksMiZkJiYoZmUoMiksTWUoIm5nSWYiLChudWxsPT1oLnRyZWVOb2RlTGlicmFyaWVzP251bGw6aC50cmVlTm9kZUxpYnJhcmllcy5sZW5ndGgpPjApLGZlKCksTWUoIm5nRm9yT2YiLGgudHJlZU5vZGVMaWJyYXJpZXMpLGZlKDMpLE1lKCJuZ0lm'@;
put 'IixoLmxvYWRpbmcpLGZlKCksTWUoIm5nSWYiLCFoLmxvYWRpbmcpKX0sZGVwZW5kZW5jaWVzOltxbCxubCwkcyxFaCxQZCxmZyxIbCxqMCxMMixaMSx2Nyx5NyxiNyxpNCxucyxiYSxTMixjcCxTdyxyNF0sZW5jYXBzdWxhdGlvbjoyfSl9fXJldHVybiBjfSkoKTtjb25zdCBxOXQ9Yz0+e2Zv'@;
put 'cihjb25zdCBsIGluIGMpaWYoIl9fcm93TnVtX18iIT09bClyZXR1cm4hMTtyZXR1cm4hMH0sZXRlPWM9Pntjb25zdCBhPWMubWF0Y2goL1JcWyhcZCspXF1DXFsoXGQrKVxdLyk7cmV0dXJuIGE/e3JvdzpwYXJzZUludChhWzFdLDEwKSxjb2x1bW46cGFyc2VJbnQoYVsyXSwxMCl9Om51bGx9'@;
put 'LFY2ZT0oYyxsKT0+e2lmKGMuc3RhcnRzV2l0aCgiQUJTT0xVVEUgIikmJihjPWMucmVwbGFjZSgiQUJTT0xVVEUgIiwiIikpLGMuc3RhcnRzV2l0aCgiUkVMQVRJVkUgIikpe2NvbnN0IGE9ZXRlKGMpO2lmKGEpe2NvbnN0e3JvdzpkLGNvbHVtbjpofT1hO2M9RHUudXRpbHMuZW5jb2RlX2Nl'@;
put 'bGwoe3I6ZC0xLGM6aC0xfSl9fWlmKGMuc3RhcnRzV2l0aCgiTUFUQ0ggIikpe2xldCBhPSIiO2NvbnN0IGQ9Yy5tYXRjaCgvQ1xbXGQrXF06KC4rKS8pO2QmJihhPWRbMV0pO2NvbnN0IGY9Yy5zcGxpdCgiICIpWzFdO2xldCB2PSIiLE09LTEsRD0iIjtpZihpc05hTihOdW1iZXIoZikpP3Y9'@;
put 'ZjpNPXBhcnNlSW50KGYpLC0xIT09TSl7Y29uc3QgY2U9bFtNLTFdO2Zvcihjb25zdCBiZSBpbiBjZSlpZigiX19yb3dOdW1fXyIhPT1iZSYmY2VbYmVdPT09YSl7RD1iZStNO2JyZWFrfX1lbHNlIGZvcihsZXQgY2U9MDtjZTxsLmxlbmd0aDtjZSsrKWlmKGxbY2VdW3ZdPT09YSl7RD12Kyhj'@;
put 'ZSsxKTticmVha31jb25zdCBaPUR1LnV0aWxzLmRlY29kZV9jZWxsKEQpLHJlPWV0ZShjKTtpZihyZSl7Y29uc3R7cm93OmNlLGNvbHVtbjpiZX09cmU7Yz1EdS51dGlscy5lbmNvZGVfY2VsbCh7cjpaLnIrY2UsYzpaLmMrYmV9KX19cmV0dXJuIGN9LEo5dD1bImZpbGVVcGxvYWRJbnB1dCJd'@;
put 'O2Z1bmN0aW9uIFE5dChjLGwpezEmYyYmKGRlKDAsImRpdiIsMjgpLEd0KDEsImNsci1zcGlubmVyIiwyOSksaGUoKSl9ZnVuY3Rpb24gZXZ0KGMsbCl7MSZjJiZHdCgwLCJjbHItaWNvbiIsMzApfWZ1bmN0aW9uIHR2dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImNsci1pY29u'@;
put 'IiwzMSksRnQoImNsaWNrIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9UmUoKTtyZXR1cm4gaC5zZWFyY2hTdHJpbmc9IiIsQ3QoaC54bG1hcExpc3RPbkZpbHRlcigpKX0pLGhlKCl9fWZ1bmN0aW9uIG52dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO3NpKDApLGRlKDEsImNsci10cmVl'@;
put 'LW5vZGUiKSgyLCJidXR0b24iLDMyKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7Y29uc3QgaD13dChhKS4kaW1wbGljaXQ7cmV0dXJuIEN0KFJlKCkueGxtYXBPbkNsaWNrKGgpKX0pLEd0KDMsImNsci1pY29uIiwzMyksTGUoNCksaGUoKSgpLGxpKCl9aWYoMiZjKXtjb25zdCBhPWwuJGltcGxp'@;
put 'Y2l0LGQ9UmUoKTtmZSgyKSxUcigiYWN0aXZlIixkLmlzQWN0aXZlWExNYXAoYS5pZCkpLGZlKDIpLERyKCIgIixhLmlkLCIgIil9fWZ1bmN0aW9uIHJ2dChjLGwpezEmYyYmKGRlKDAsInAiLDM3KSxMZSgxLCIgUGxlYXNlIHNlbGVjdCBhIG1hcCAiKSxoZSgpKX1mdW5jdGlvbiBpdnQoYyxs'@;
put 'KXsxJmMmJihkZSgwLCJwIiwzNyksTGUoMSwiIE5vIGV4Y2VsIG1hcCBpcyBmb3VuZCAiKSxoZSgpKX1mdW5jdGlvbiBhdnQoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiLDM0KSxHdCgxLCJpbWciLDM1KSxndCgyLHJ2dCwyLDAsInAiLDM2KSgzLGl2dCwyLDAsInAiLDM2KSxoZSgpKSwyJmMp'@;
put 'e2NvbnN0IGE9UmUoKTtmZSgyKSxNZSgibmdJZiIsYS54bG1hcHMubGVuZ3RoPjApLGZlKCksTWUoIm5nSWYiLGEueGxtYXBzLmxlbmd0aDwxKX19ZnVuY3Rpb24gb3Z0KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2IiwzOCkoMSwic3BhbiIsMzkpLExlKDIsIiBMb2FkaW5nLi4uICIpLGhlKCks'@;
put 'ZGUoMywiZGl2IikoNCwiaDQiKSxMZSg1KSxoZSgpKCkoKSksMiZjKXtjb25zdCBhPVJlKCk7ZmUoNSksd3IoYS5pc0xvYWRpbmdEZXNjKX19ZnVuY3Rpb24gc3Z0KGMsbCl7MSZjJiZHdCgwLCJjbHItdGFiLWNvbnRlbnQiKX1mdW5jdGlvbiBsdnQoYyxsKXsxJmMmJkd0KDAsImNsci10YWIt'@;
put 'Y29udGVudCIpfWZ1bmN0aW9uIGN2dChjLGwpezEmYyYmRmwoMCl9ZnVuY3Rpb24gdXZ0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiZGl2Iiw0MCksRnQoImZpbGVEcmFnZ2VkT3ZlciIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoUmUoKS5vblNob3dVcGxvYWRNb2RhbCgp'@;
put 'KX0pLGRlKDEsImNsci10YWJzIikoMiwiY2xyLXRhYiIpKDMsImJ1dHRvbiIsNDEpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPVJlKCk7cmV0dXJuIEN0KGguc2VsZWN0ZWRUYWI9aC5UYWJzRW51bS5SdWxlcyl9KSxMZSg0LCJSdWxlcyIpLGhlKCksZ3QoNSxzdnQsMSww'@;
put 'LCJjbHItdGFiLWNvbnRlbnQiLDQyKSxoZSgpLGRlKDYsImNsci10YWIiKSg3LCJidXR0b24iLDQxKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1SZSgpO3JldHVybiBDdChoLnNlbGVjdGVkVGFiPWguVGFic0VudW0uRGF0YSl9KSxMZSg4LCJEYXRhIiksaGUoKSxndCg5'@;
put 'LGx2dCwxLDAsImNsci10YWItY29udGVudCIsNDIpLGhlKCkoKSxndCgxMCxjdnQsMSwwLCJuZy1jb250YWluZXIiLDQzKSxkZSgxMSwiZGl2Iiw0NCkoMTIsImgzIiw0NSksTGUoMTMpLGhlKCksZGUoMTQsImkiLDQ1KSxMZSgxNSksaGUoKSxkZSgxNiwicCIsNDUpLExlKDE3LCIgUnVsZXMg'@;
put 'U291cmNlOiAiKSxkZSgxOCwiYSIsNDYpLExlKDE5KSxoZSgpKCksZGUoMjAsInAiLDQ1KSxMZSgyMSwiIFRhcmdldCBkYXRhc2V0OiAiKSxkZSgyMiwiYSIsNDYpLExlKDIzKSxoZSgpKCkoKSxkZSgyNCwiZGl2Iiw0NyksR3QoMjUsImhvdC10YWJsZSIsNDgpLGhlKCkoKX1pZigyJmMpe2Nv'@;
put 'bnN0IGE9UmUoKSxkPWhhKDQxKTtmZSg1KSxNZSgiY2xySWZBY3RpdmUiLGEuc2VsZWN0ZWRUYWI9PT1hLlRhYnNFbnVtLlJ1bGVzKSxmZSg0KSxNZSgiY2xySWZBY3RpdmUiLGEuc2VsZWN0ZWRUYWI9PT1hLlRhYnNFbnVtLkRhdGEpLGZlKCksTWUoIm5nVGVtcGxhdGVPdXRsZXQiLGQpLGZl'@;
put 'KDMpLERyKCIgIixhLnNlbGVjdGVkWExNYXAuaWQsIiAiKSxmZSgyKSx3cihhLnNlbGVjdGVkWExNYXAuZGVzY3JpcHRpb24pLGZlKDMpLE1lKCJyb3V0ZXJMaW5rIiwiL3ZpZXcvZGF0YS8iK2EucnVsZXNTb3VyY2UpLGZlKCksRHIoIiAiLGEucnVsZXNTb3VyY2UsIiAiKSxmZSgzKSxNZSgi'@;
put 'cm91dGVyTGluayIsIi92aWV3L2RhdGEvIithLnNlbGVjdGVkWExNYXAudGFyZ2V0RFMpLGZlKCksRHIoIiAiLGEuc2VsZWN0ZWRYTE1hcC50YXJnZXREUywiICIpLGZlKDIpLE1lKCJtdWx0aUNvbHVtblNvcnRpbmciLCEwKSgidmlld3BvcnRSb3dSZW5kZXJpbmdPZmZzZXQiLDUwKSgiZGF0'@;
put 'YSIsYS5zZWxlY3RlZFRhYj09PWEuVGFic0VudW0uUnVsZXM/YS54bG1hcFJ1bGVzOmEueGxEYXRhKSgiY29sSGVhZGVycyIsYS5zZWxlY3RlZFRhYj09PWEuVGFic0VudW0uUnVsZXM/YS54bG1hcFJ1bGVzSGVhZGVyczphLnhsVXBsb2FkSGVhZGVyKSgiY29sdW1ucyIsYS5zZWxlY3RlZFRh'@;
put 'Yj09PWEuVGFic0VudW0uUnVsZXM/YS54bG1hcFJ1bGVzQ29sdW1uczphLnhsVXBsb2FkQ29sdW1ucykoImZpbHRlcnMiLCEwKSgiaGVpZ2h0IiwiMTAwJSIpKCJhZnRlckdldENvbEhlYWRlciIsYS5hZnRlckdldENvbEhlYWRlcikoIm1vZGlmeUNvbFdpZHRoIixhLm1heFdpZHRoQ2hlY2tl'@;
put 'cikoImNlbGxzIixhLmdldENlbGxDb25maWd1cmF0aW9uKSgibWF4Um93cyIsYS5ob3RUYWJsZU1heFJvd3MpKCJtYW51YWxDb2x1bW5SZXNpemUiLCEwKSgicm93SGVhZGVycyIsYS5yb3dIZWFkZXJzKSgicm93SGVhZGVyV2lkdGgiLDE1KSgicm93SGVpZ2h0cyIsMjApKCJsaWNlbnNlS2V5'@;
put 'IixhLmhvdFRhYmxlTGljZW5zZUtleSl9fWZ1bmN0aW9uIGR2dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImRpdiIsNTEpKDEsImJ1dHRvbiIsNTIpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoUmUoMikub25TaG93VXBsb2FkTW9kYWwoKSl9KSxHdCgy'@;
put 'LCJjbHItaWNvbiIsNTMpLGRlKDMsInNwYW4iKSxMZSg0LCJVcGxvYWQiKSxoZSgpKCkoKX19ZnVuY3Rpb24gaHZ0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiZGl2Iiw1MSkoMSwiYnV0dG9uIiw1MiksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChSZSgy'@;
put 'KS5zdWJtaXRFeGNlbCgpKX0pLEd0KDIsImNsci1pY29uIiw1MyksZGUoMywic3BhbiIpLExlKDQsIlN1Ym1pdCIpLGhlKCkoKSgpfX1mdW5jdGlvbiBmdnQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJkaXYiLDUxKSgxLCJidXR0b24iLDU0KSxGdCgiY2xpY2siLGZ1bmN0aW9u'@;
put 'KCl7cmV0dXJuIHd0KGEpLEN0KFJlKDIpLmRpc2NhcmRFeHRyYWN0ZWREYXRhKCkpfSksR3QoMiwiY2xyLWljb24iLDU1KSxkZSgzLCJzcGFuIiksTGUoNCwiRGlzY2FyZCIpLGhlKCkoKSgpfX1mdW5jdGlvbiBwdnQoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiLDQ5KSxndCgxLGR2dCw1LDAs'@;
put 'ImRpdiIsNTApKDIsaHZ0LDUsMCwiZGl2Iiw1MCkoMyxmdnQsNSwwLCJkaXYiLDUwKSxoZSgpKSwyJmMpe2NvbnN0IGE9UmUoKTtmZSgpLE1lKCJuZ0lmIixhLnN0YXR1cz09PWEuU3RhdHVzRW51bS5SZWFkeVRvVXBsb2FkKSxmZSgpLE1lKCJuZ0lmIixhLnN0YXR1cz09PWEuU3RhdHVzRW51'@;
put 'bS5SZWFkeVRvU3VibWl0KSxmZSgpLE1lKCJuZ0lmIixhLnN0YXR1cz09PWEuU3RhdHVzRW51bS5SZWFkeVRvU3VibWl0KX19dmFyIHJmPWZ1bmN0aW9uKGMpe3JldHVybiBjW2MuTm9NYXBTZWxlY3RlZD0wXT0iTm9NYXBTZWxlY3RlZCIsY1tjLkZldGNoaW5nUnVsZXM9MV09IkZldGNoaW5n'@;
put 'UnVsZXMiLGNbYy5SZWFkeVRvVXBsb2FkPTJdPSJSZWFkeVRvVXBsb2FkIixjW2MuRXh0cmFjdGluZ0RhdGE9M109IkV4dHJhY3RpbmdEYXRhIixjW2MuUmVhZHlUb1N1Ym1pdD00XT0iUmVhZHlUb1N1Ym1pdCIsY1tjLlN1Ym1pdHRpbmdFeHRyYWN0ZWREYXRhPTVdPSJTdWJtaXR0aW5nRXh0'@;
put 'cmFjdGVkRGF0YSIsY1tjLlN1Ym1pdHRpbmc9Nl09IlN1Ym1pdHRpbmciLGN9KHJmfHx7fSksTXc9ZnVuY3Rpb24oYyl7cmV0dXJuIGNbYy5SdWxlcz0wXT0iUnVsZXMiLGNbYy5EYXRhPTFdPSJEYXRhIixjfShNd3x8e30pO2xldCBCNmU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQs'@;
put 'aCxmLHYsTSxEKXt0aGlzLmV2ZW50U2VydmljZT1hLHRoaXMubGljZW5jZVNlcnZpY2U9ZCx0aGlzLmxvZ2dlclNlcnZpY2U9aCx0aGlzLnJvdXRlPWYsdGhpcy5yb3V0ZXI9dix0aGlzLnNhc1N0b3JlU2VydmljZT1NLHRoaXMuc2FzU2VydmljZT1ELHRoaXMuY29udGVudENvbnRhaW5lckNs'@;
put 'YXNzPSEwLHRoaXMuZmlsZVVwbG9hZElucHV0Q29tcExpc3Q9bmV3IGZkLHRoaXMuU3RhdHVzRW51bT1yZix0aGlzLlRhYnNFbnVtPU13LHRoaXMuc2VsZWN0ZWRUYWI9TXcuUnVsZXMsdGhpcy5ydWxlc1NvdXJjZT1Lbi5kY0xpYisiLk1QRV9YTE1BUF9SVUxFUyIsdGhpcy54bG1hcHM9W10s'@;
put 'dGhpcy5zZWxlY3RlZFhMTWFwPXZvaWQgMCx0aGlzLnNlYXJjaFN0cmluZz0iIix0aGlzLnhsbWFwc0xvYWRpbmc9ITAsdGhpcy5pc0xvYWRpbmc9ITEsdGhpcy5pc0xvYWRpbmdEZXNjPSIiLHRoaXMuc3RhdHVzPXJmLk5vTWFwU2VsZWN0ZWQsdGhpcy54bG1hcFJ1bGVzSGVhZGVycz1bIlhM'@;
put 'TUFQX1NIRUVUIiwiWExNQVBfUkFOR0VfSUQiLCJYTE1BUF9TVEFSVCIsIlhMTUFQX0ZJTklTSCJdLHRoaXMueGxtYXBSdWxlc0NvbHVtbnM9W3tkYXRhOiJYTE1BUF9TSEVFVCJ9LHtkYXRhOiJYTE1BUF9SQU5HRV9JRCJ9LHtkYXRhOiJYTE1BUF9TVEFSVCJ9LHtkYXRhOiJYTE1BUF9GSU5J'@;
put 'U0gifV0sdGhpcy54bG1hcFJ1bGVzPVtdLHRoaXMueGxVcGxvYWRIZWFkZXI9WyJYTE1BUF9SQU5HRV9JRCIsIlJPV19OTyIsIkNPTF9OTyIsIlZBTFVFX1RYVCJdLHRoaXMueGxVcGxvYWRDb2x1bW5zPVt7ZGF0YToiWExNQVBfUkFOR0VfSUQifSx7ZGF0YToiUk9XX05PIn0se2RhdGE6IkNP'@;
put 'TF9OTyJ9LHtkYXRhOiJWQUxVRV9UWFQifV0sdGhpcy54bERhdGE9W10sdGhpcy5zaG93VXBsb2FkTW9kYWw9ITEsdGhpcy5oYXNCYXNlRHJvcFpvbmVPdmVyPSExLHRoaXMuZmlsZW5hbWU9IiIsdGhpcy5zdWJtaXRMaW1pdE5vdGljZT0hMSx0aGlzLnVwbG9hZGVyPW5ldyBQZWUsdGhpcy5s'@;
put 'aWNlbmNlU3RhdGU9dGhpcy5saWNlbmNlU2VydmljZS5saWNlbmNlU3RhdGUsdGhpcy5ob3RUYWJsZUxpY2Vuc2VLZXk9dm9pZCAwLHRoaXMuaG90VGFibGVNYXhSb3dzPXRoaXMubGljZW5jZVN0YXRlLnZhbHVlLnZpZXdlcl9yb3dzX2FsbG93ZWR8fDEvMH1hZnRlckdldENvbEhlYWRlcihh'@;
put 'LGQpe2QuY2xhc3NMaXN0LmFkZChLbi5oYW5kc29udGFibGUuZGFya1RhYmxlSGVhZGVyQ2xhc3MpfXhsbWFwT25DbGljayhhKXthLmlkIT09dGhpcy5zZWxlY3RlZFhMTWFwPy5pZCYmKHRoaXMuc2VsZWN0ZWRYTE1hcD1hLHRoaXMueGxEYXRhPVtdLHRoaXMuZmlsZW5hbWU9IiIsdGhpcy51'@;
put 'cGxvYWRlci5xdWV1ZT1bXSx0aGlzLmZpbGVVcGxvYWRJbnB1dENvbXBMaXN0LmZpcnN0JiYodGhpcy5maWxlVXBsb2FkSW5wdXRDb21wTGlzdC5maXJzdC5uYXRpdmVFbGVtZW50LnZhbHVlPSIiKSx0aGlzLnNlbGVjdGVkVGFiPU13LlJ1bGVzLHRoaXMudmlld1hMTWFwUnVsZXMoKSx0aGlz'@;
put 'LnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKCIvaG9tZS9leGNlbC1tYXBzLyIrYS5pZCkpfXhsbWFwTGlzdE9uRmlsdGVyKCl7dGhpcy54bG1hcHM9dGhpcy5zZWFyY2hTdHJpbmcubGVuZ3RoPjA/S24ueGxtYXBzLmZpbHRlcihkPT5kLmlkLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXModGhpcy5zZWFy'@;
put 'Y2hTdHJpbmcudG9Mb3dlckNhc2UoKSkpOktuLnhsbWFwc31pc0FjdGl2ZVhMTWFwKGEpe3JldHVybiB0aGlzLnNlbGVjdGVkWExNYXA/LmlkPT09YX1tYXhXaWR0aENoZWNrZXIoYSxkKXtyZXR1cm4gYT4yMDA/MjAwOmF9Z2V0Q2VsbENvbmZpZ3VyYXRpb24oKXtyZXR1cm57cmVhZE9ubHk6'@;
put 'ITB9fXJvd0hlYWRlcnMoKXtyZXR1cm4iICJ9b25TaG93VXBsb2FkTW9kYWwoKXt0aGlzLnNob3dVcGxvYWRNb2RhbD0hMH1maWxlT3ZlckJhc2UoYSl7dGhpcy5oYXNCYXNlRHJvcFpvbmVPdmVyPWF9Z2V0RmlsZURlc2MoYSxkPSExKXt2YXIgaD10aGlzO2NvbnN0IGY9ZD9hWzBdOmEudGFy'@;
put 'Z2V0LmZpbGVzWzBdO2lmKCFmKXJldHVybjtjb25zdCB2PWYubmFtZTtpZih0aGlzLmZpbGVuYW1lPXYsInhscyI9PT12LnNsaWNlKHYubGFzdEluZGV4T2YoIi4iKSsxLHYubGFzdEluZGV4T2YoIi4iKSs0KS50b0xvd2VyQ2FzZSgpKXt0aGlzLnNob3dVcGxvYWRNb2RhbD0hMSx0aGlzLmlz'@;
put 'TG9hZGluZz0hMCx0aGlzLmlzTG9hZGluZ0Rlc2M9IkV4dHJhY3RpbmcgRGF0YSIsdGhpcy5zdGF0dXM9cmYuRXh0cmFjdGluZ0RhdGE7Y29uc3QgRD1uZXcgRmlsZVJlYWRlcjtELm9ubG9hZD1mdW5jdGlvbigpe3ZhciBaPWVlKGZ1bmN0aW9uKihyZSl7Y29uc3QgY2U9KGM9Pntjb25zdCBs'@;
put 'PW5ldyBVaW50OEFycmF5KGMpO2xldCBhPSIiO2NvbnN0IGQ9bC5ieXRlTGVuZ3RoO2ZvcihsZXQgaD0wO2g8ZDtoKyspYSs9U3RyaW5nLmZyb21DaGFyQ29kZShsW2hdKTtyZXR1cm4gYX0pKHJlLnRhcmdldC5yZXN1bHQpO2xldCBiZTtjb25zdCBFZT17dHlwZToiYmluYXJ5IixjZWxsRGF0'@;
put 'ZXM6ITEsY2VsbEZvcm11bGE6ITAsY2VsbFN0eWxlczohMCxjZWxsTkY6ITEsY2VsbFRleHQ6ITF9O3RyeXtiZT1EdS5yZWFkKGNlLHsuLi5FZX0pfWNhdGNoKEJlKXtoLmV2ZW50U2VydmljZS5zaG93QWJvcnRNb2RhbChudWxsLEJlLHZvaWQgMCwiRXJyb3IgcmVhZGluZyBmaWxlIil9aWYo'@;
put 'IWJlKXJldHVybiBoLmlzTG9hZGluZz0hMSxoLmlzTG9hZGluZ0Rlc2M9IiIsaC5zdGF0dXM9cmYuUmVhZHlUb1VwbG9hZCx2b2lkIGgudXBsb2FkZXIucXVldWUucG9wKCk7aC5leHRyYWN0RGF0YShiZSl9KTtyZXR1cm4gZnVuY3Rpb24ocmUpe3JldHVybiBaLmFwcGx5KHRoaXMsYXJndW1l'@;
put 'bnRzKX19KCksRC5yZWFkQXNBcnJheUJ1ZmZlcihmKX1lbHNlIHRoaXMuaXNMb2FkaW5nPSExLHRoaXMuaXNMb2FkaW5nRGVzYz0iIix0aGlzLnN0YXR1cz1yZi5SZWFkeVRvVXBsb2FkLHRoaXMuc2hvd1VwbG9hZE1vZGFsPSEwLHRoaXMudXBsb2FkZXIucXVldWUucG9wKCksdGhpcy5ldmVu'@;
put 'dFNlcnZpY2Uuc2hvd0Fib3J0TW9kYWwobnVsbCwnSW52YWxpZCBmaWxlIHR5cGUgIjxiPicrdGhpcy5maWxlbmFtZSsnPC9iPiIuIFBsZWFzZSB1cGxvYWQgZXhjZWwgZmlsZS4nKX1kaXNjYXJkRXh0cmFjdGVkRGF0YSgpe3RoaXMuaXNMb2FkaW5nPSExLHRoaXMuaXNMb2FkaW5nRGVzYz0i'@;
put 'Iix0aGlzLnN0YXR1cz1yZi5SZWFkeVRvVXBsb2FkLHRoaXMueGxEYXRhPVtdLHRoaXMuc2VsZWN0ZWRUYWI9TXcuUnVsZXMsdGhpcy5maWxlbmFtZT0iIix0aGlzLnVwbG9hZGVyLnF1ZXVlPVtdLHRoaXMuZmlsZVVwbG9hZElucHV0Q29tcExpc3QuZmlyc3QmJih0aGlzLmZpbGVVcGxvYWRJ'@;
put 'bnB1dENvbXBMaXN0LmZpcnN0Lm5hdGl2ZUVsZW1lbnQudmFsdWU9IiIpfXN1Ym1pdEV4Y2VsKCl7dGhpcy5saWNlbmNlU3RhdGUudmFsdWUuc3VibWl0X3Jvd3NfbGltaXQ9PT0xLzA/dGhpcy5zdWJtaXQoKTp0aGlzLnN1Ym1pdExpbWl0Tm90aWNlPSEwfXN1Ym1pdCgpe2lmKCF0aGlzLnNl'@;
put 'bGVjdGVkWExNYXB8fCF0aGlzLnhsRGF0YS5sZW5ndGgpcmV0dXJuO3RoaXMuc3RhdHVzPXJmLlN1Ym1pdHRpbmcsdGhpcy5pc0xvYWRpbmc9ITAsdGhpcy5pc0xvYWRpbmdEZXNjPSJTdWJtaXR0aW5nIGV4dHJhY3RlZCBkYXRhIjtjb25zdCBhPVtdO2Zvcihjb25zdCBNIG9mIHRoaXMudXBs'@;
put 'b2FkZXIucXVldWUpYS5wdXNoKHtmaWxlOk0sZmlsZU5hbWU6TS5uYW1lfSk7Y29uc3QgZD1PYmplY3Qua2V5cyh0aGlzLnhsRGF0YVswXSkuam9pbigiLCIpKyJcbiIrdGhpcy54bERhdGEuc2xpY2UoMCx0aGlzLmxpY2VuY2VTdGF0ZS52YWx1ZS5zdWJtaXRfcm93c19saW1pdCkubWFwKE09'@;
put 'Pk9iamVjdC52YWx1ZXMoTSkuam9pbigiLCIpKS5qb2luKCJcbiIpLGg9bmV3IEJsb2IoW2RdLHt0eXBlOiJhcHBsaWNhdGlvbi9jc3YifSksZj1xZWUoaCx0aGlzLmZpbGVuYW1lKyIuY3N2Iik7YS5wdXNoKHtmaWxlOmYsZmlsZU5hbWU6Zi5uYW1lfSksdGhpcy5zYXNTZXJ2aWNlLnVwbG9h'@;
put 'ZEZpbGUoInNlcnZpY2VzL2VkaXRvcnMvbG9hZGZpbGUiLGEse3RhYmxlOnRoaXMuc2VsZWN0ZWRYTE1hcC50YXJnZXREU30pLnRoZW4oTT0+e2lmKE0uYWRhcHRlclJlc3BvbnNlLnNhc2pzQWJvcnQpe2NvbnN0IEQ9TS5hZGFwdGVyUmVzcG9uc2U7dGhpcy5ldmVudFNlcnZpY2Uuc2hvd0Fi'@;
put 'b3J0TW9kYWwoIiIsRC5zYXNqc0Fib3J0WzBdLk1TRyx7U1lTV0FSTklOR1RFWFQ6RC5TWVNXQVJOSU5HVEVYVCxTWVNFUlJPUlRFWFQ6RC5TWVNFUlJPUlRFWFQsTUFDOkQuc2FzanNBYm9ydFswXS5NQUN9KX1lbHNlIE0uYWRhcHRlclJlc3BvbnNlLnNhc3BhcmFtcyYmdGhpcy5yb3V0ZXIu'@;
put 'bmF2aWdhdGVCeVVybCgiL3N0YWdlLyIrTS5hZGFwdGVyUmVzcG9uc2Uuc2FzcGFyYW1zWzBdLkRTSUQpfSkuY2F0Y2goTT0+e3RoaXMuZXZlbnRTZXJ2aWNlLmNhdGNoUmVzcG9uc2VFcnJvcigiZmlsZSB1cGxvYWQiLE0ucmVzcG9uc2UpfSkuZmluYWxseSgoKT0+e3RoaXMuc3RhdHVzPXJm'@;
put 'LlJlYWR5VG9TdWJtaXQsdGhpcy5pc0xvYWRpbmc9ITEsdGhpcy5pc0xvYWRpbmdEZXNjPSIifSl9ZXh0cmFjdERhdGEoYSl7Y29uc3QgZD1bXTt0aGlzLnhsbWFwUnVsZXMuZm9yRWFjaChoPT57bGV0IGY9aC5YTE1BUF9TSEVFVDtpZihmLnN0YXJ0c1dpdGgoIi8iKSl7Y29uc3QgRWU9Zi5z'@;
put 'cGxpdCgiLyIpWzFdLEJlPXBhcnNlSW50KEVlKS0xO2Y9YS5TaGVldE5hbWVzW0JlXX1jb25zdCB2PWEuU2hlZXRzW2ZdLE09RHUudXRpbHMuc2hlZXRfdG9fanNvbih2LHtyYXc6ITAsaGVhZGVyOiJBIixibGFua3Jvd3M6ITB9KSxEPVY2ZShoLlhMTUFQX1NUQVJULE0pLFo9KChjLGwsYSk9'@;
put 'PntpZigiIj09PWwpcmV0dXJuIGM7aWYobC5zdGFydHNXaXRoKCJBQlNPTFVURSAiKSYmKGw9bC5yZXBsYWNlKCJBQlNPTFVURSAiLCIiKSksbC5zdGFydHNXaXRoKCJSRUxBVElWRSAiKSl7Y29uc3QgZD1ldGUobCk7aWYoZCl7Y29uc3R7cm93OmgsY29sdW1uOmZ9PWQse3I6dixjOk19PUR1'@;
put 'LnV0aWxzLmRlY29kZV9jZWxsKGMpO2w9RHUudXRpbHMuZW5jb2RlX2NlbGwoe3I6ditoLGM6TStmfSl9fWlmKGwuc3RhcnRzV2l0aCgiTUFUQ0ggIikmJihsPVY2ZShsLGEpKSwiTEFTVERPV04iPT09bCl7Y29uc3R7cjpkLGM6aH09RHUudXRpbHMuZGVjb2RlX2NlbGwoYyksZj1EdS51dGls'@;
put 'cy5lbmNvZGVfY29sKGgpO2xldCB2PWQ7Zm9yKGxldCBNPWQrMTtNPGEubGVuZ3RoJiZhW01dW2ZdO00rKyl2PU07bD1mKyh2KzEpfWlmKCJCTEFOS1JPVyI9PT1sKXtjb25zdHtyOmR9PUR1LnV0aWxzLmRlY29kZV9jZWxsKGMpO2xldCBoPWQ7Zm9yKGxldCBEPWQrMTtEPGEubGVuZ3RoJiYh'@;
put 'cTl0KGFbRF0pO0QrKyloPUQ7bD1PYmplY3Qua2V5cyhhW2hdKS5maWx0ZXIoRD0+Il9fcm93TnVtX18iIT09RCkucmVkdWNlKChELFopPT5aPkQ/WjpELCIiKSsoaCsxKX1yZXR1cm4gbH0pKEQsaC5YTE1BUF9GSU5JU0gsTSkscmU9YCR7RH06JHtafWAsY2U9RHUudXRpbHMuZGVjb2RlX3Jh'@;
put 'bmdlKHJlKSxiZT1EdS51dGlscy5zaGVldF90b19qc29uKHYse3JhdzohMCxyYW5nZTpyZSxoZWFkZXI6IkEiLGJsYW5rcm93czohMH0pO2ZvcihsZXQgRWU9MDtFZTxiZS5sZW5ndGg7RWUrKyl7Y29uc3QgQmU9YmVbRWVdO2ZvcihsZXQgcWU9Y2Uucy5jLHJ0PTA7cWU8PWNlLmUuYztxZSsr'@;
put 'LHJ0Kyspe2NvbnN0IHB0PUR1LnV0aWxzLmVuY29kZV9jb2wocWUpO3B0IGluIEJlJiZkLnB1c2goe0xPQURfUkVGOiIwIixYTE1BUF9JRDpoLlhMTUFQX0lELFhMTUFQX1JBTkdFX0lEOmguWExNQVBfUkFOR0VfSUQsUk9XX05POkVlKzEsQ09MX05POnJ0KzEsVkFMVUVfVFhUOkJlW3B0XX0p'@;
put 'fX19KSx0aGlzLnN0YXR1cz1yZi5SZWFkeVRvU3VibWl0LHRoaXMuaXNMb2FkaW5nPSExLHRoaXMuaXNMb2FkaW5nRGVzYz0iIix0aGlzLnhsRGF0YT1kLHRoaXMuc2VsZWN0ZWRUYWI9TXcuRGF0YX12aWV3WExNYXBSdWxlcygpe3ZhciBhPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe2Eu'@;
put 'c2VsZWN0ZWRYTE1hcCYmKGEuaXNMb2FkaW5nPSEwLGEuaXNMb2FkaW5nRGVzYz0iTG9hZGluZyBleGNlbCBydWxlcyIsYS5zdGF0dXM9cmYuRmV0Y2hpbmdSdWxlcyx5aWVsZCBhLnNhc1N0b3JlU2VydmljZS5nZXRYTE1hcFJ1bGVzKGEuc2VsZWN0ZWRYTE1hcC5pZCkudGhlbihkPT57YS54'@;
put 'bG1hcFJ1bGVzPWQueGxtYXBydWxlcyxhLnN0YXR1cz1yZi5SZWFkeVRvVXBsb2FkfSkuY2F0Y2goZD0+e2EubG9nZ2VyU2VydmljZS5lcnJvcihkKX0pLGEuaXNMb2FkaW5nPSExLGEuaXNMb2FkaW5nRGVzYz0iIil9KSgpfWxvYWQoKXt0aGlzLnhsbWFwcz1Lbi54bG1hcHMsdGhpcy54bG1h'@;
put 'cHNMb2FkaW5nPSExO2NvbnN0IGE9dGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbXMuaWQ7aWYoYSl7Y29uc3QgZD10aGlzLnhsbWFwcy5maW5kKGg9PmguaWQ9PT1hKTtkJiYodGhpcy5zZWxlY3RlZFhMTWFwPWQsdGhpcy52aWV3WExNYXBSdWxlcygpKX19bmdPbkluaXQoKXt0aGlzLmxpY2Vu'@;
put 'Y2VTZXJ2aWNlLmhvdF9saWNlbnNlX2tleS5zdWJzY3JpYmUoYT0+e3RoaXMuaG90VGFibGVMaWNlbnNlS2V5PWF9KX1uZ0FmdGVyVmlld0luaXQoKXt9bmdBZnRlckNvbnRlbnRJbml0KCl7S24uZWRpdG9yLnN0YXJ0dXBTZXQ/dGhpcy5sb2FkKCk6dGhpcy5ldmVudFNlcnZpY2Uub25TdGFy'@;
put 'dHVwRGF0YUxvYWRlZC5zdWJzY3JpYmUoKCk9Pnt0aGlzLmxvYWQoKX0pfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKEdlKHZjKSxHZSh1MSksR2UoU2QpLEdlKEN1KSxHZShMcyksR2Uoa2gpLEdlKEJzKSl9fXN0YXRpY3t0aGlzLlx1MDI3NWNt'@;
put 'cD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAteGxtYXAiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGQsaCl7aWYoMSZkJiZxYShKOXQsNSksMiZkKXtsZXQgZjtDaShmPVNpKCkpJiYoaC5maWxlVXBsb2FkSW5wdXRDb21wTGlzdD1mKX19LGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0'@;
put 'aW9uKGQsaCl7MiZkJiZUcigiY29udGVudC1jb250YWluZXIiLGguY29udGVudENvbnRhaW5lckNsYXNzKX0sZGVjbHM6NDIsdmFyczoxNixjb25zdHM6W1sic2VhcmNoWExNYXBUcmVlSW5wdXQiLCIiXSxbImZpbGVVcGxvYWRJbnB1dCIsIiJdLFsiYWN0aW9uQnV0dG9ucyIsIiJdLFsiY2xh'@;
put 'c3MiLCJteS0xMC1teC1hdXRvIHRleHQtY2VudGVyIiw0LCJuZ0lmIl0sWzEsInNlYXJjaC1ub2RlIl0sWzEsInRyZWUtc2VhcmNoLXdyYXBwZXIiXSxbImFwcFN0ZWFsRm9jdXMiLCIiLCJjbHJJbnB1dCIsIiIsInBsYWNlaG9sZGVyIiwiRmlsdGVyIGJ5IElkIiwibmFtZSIsImlucHV0Iiwi'@;
put 'YXV0b2NvbXBsZXRlIiwib2ZmIiwzLCJuZ01vZGVsQ2hhbmdlIiwia2V5dXAiLCJuZ01vZGVsIl0sWyJzaGFwZSIsInNlYXJjaCIsNCwibmdJZiJdLFsic2hhcGUiLCJ0aW1lcyIsMywiY2xpY2siLDQsIm5nSWYiXSxbNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzEsImNvbnRlbnQtYXJlYSJdLFsi'@;
put 'Y2xhc3MiLCJuby10YWJsZS1zZWxlY3RlZCIsNCwibmdJZiJdLFsiY2xhc3MiLCJsb2FkaW5nU3Bpbm5lciIsNCwibmdJZiJdLFsiYXBwRHJhZ05kcm9wIiwiIiwiY2xhc3MiLCJjYXJkIGgtMTAwIGQtZmxleCBjbHItZmxleC1jb2x1bW4iLDMsImZpbGVEcmFnZ2VkT3ZlciIsNCwibmdJZiJd'@;
put 'LFsiYXBwRmlsZURyb3AiLCIiLDEsInJlbGF0aXZlIiwzLCJmaWxlT3ZlciIsImZpbGVEcm9wIiwiY2xyTW9kYWxPcGVuQ2hhbmdlIiwidXBsb2FkZXIiLCJjbHJNb2RhbFNpemUiLCJjbHJNb2RhbFN0YXRpY0JhY2tkcm9wIiwiY2xyTW9kYWxDbG9zYWJsZSIsImNsck1vZGFsT3BlbiJdLFsx'@;
put 'LCJtb2RhbC10aXRsZSJdLFsxLCJtb2RhbC1ib2R5Il0sWzEsImRyb3AtYXJlYSJdLFsxLCJjbHItY29sLW1kLTEyIl0sWzEsImNsci1yb3ciLCJjYXJkLWJsb2NrIiwibXQtMTUiLCJkLWZsZXgiLCJqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiJdLFsxLCJjbHItY29sLW1kLTMiLCJmaWx0ZXJC'@;
put 'dG4iXSxbMSwiZmlsdGVyQnRuIiwidy0xMDAiXSxbImZvciIsImZpbGUtdXBsb2FkIiwxLCJidG4iLCJidG4tc20iLCJidG4tb3V0bGluZSIsInByb2ZpbGUtYnV0dG9ucyIsInctMTAwIl0sWyJoaWRkZW4iLCIiLCJpZCIsImZpbGUtdXBsb2FkIiwidHlwZSIsImZpbGUiLCJhcHBGaWxlU2Vs'@;
put 'ZWN0IiwiIiwzLCJjaGFuZ2UiLCJ1cGxvYWRlciJdLFszLCJjbHJNb2RhbE9wZW5DaGFuZ2UiLCJjbHJNb2RhbE9wZW4iXSxbMSwibS0wIl0sWzEsIm1vZGFsLWZvb3RlciJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLXByaW1hcnkiLDMsImNsaWNrIl0sWzEsIm15'@;
put 'LTEwLW14LWF1dG8iLCJ0ZXh0LWNlbnRlciJdLFsiY2xyTWVkaXVtIiwiIl0sWyJzaGFwZSIsInNlYXJjaCJdLFsic2hhcGUiLCJ0aW1lcyIsMywiY2xpY2siXSxbMSwiY2xyLXRyZWVub2RlLWxpbmsiLDMsImNsaWNrIl0sWyJzaGFwZSIsImZpbGUiXSxbMSwibm8tdGFibGUtc2VsZWN0ZWQi'@;
put 'XSxbInNyYyIsIi9TQVNKb2JFeGVjdXRpb24/X0ZJTEU9L1B1YmxpYy9hcHAvZGNwbGFjZWhvbGRlci9zZXJ2aWNlcy93ZWIvaW1hZ2VzL3NlbGVjdC10YWJsZS5wbmciLCJhbHQiLCJzZWxlY3QgdGFibGUgaWNvbiIsMSwic2VsZWN0LXRhYmxlLWljb24iXSxbImNsYXNzIiwidGV4dC1jZW50'@;
put 'ZXIgY29sb3ItZ3JheSBtdC0xMCIsImNkcy10ZXh0Iiwic2VjdGlvbiIsNCwibmdJZiJdLFsiY2RzLXRleHQiLCJzZWN0aW9uIiwxLCJ0ZXh0LWNlbnRlciIsImNvbG9yLWdyYXkiLCJtdC0xMCJdLFsxLCJsb2FkaW5nU3Bpbm5lciJdLFsxLCJzcGlubmVyIl0sWyJhcHBEcmFnTmRyb3AiLCIi'@;
put 'LDEsImNhcmQiLCJoLTEwMCIsImQtZmxleCIsImNsci1mbGV4LWNvbHVtbiIsMywiZmlsZURyYWdnZWRPdmVyIl0sWyJjbHJUYWJMaW5rIiwiIiwzLCJjbGljayJdLFs0LCJjbHJJZkFjdGl2ZSJdLFs0LCJuZ1RlbXBsYXRlT3V0bGV0Il0sWzEsImNsci1yb3ciLCJtLTAiLCJtYi0xMC1pIiwi'@;
put 'dmlld2VyVGl0bGUiXSxbMSwiZC1mbGV4IiwiY2xyLWNvbC0xMiIsImNsci1qdXN0aWZ5LWNvbnRlbnQtY2VudGVyIiwibXQtNS1pIl0sWyJjZHMtdGV4dCIsImxhYmVsTGluayIsMSwibWwtMTAiLDMsInJvdXRlckxpbmsiXSxbMSwiY2xyLWZsZXgtMSJdLFsiaG90SWQiLCJob3RJbnN0YW5j'@;
put 'ZSIsImlkIiwiaG90LXRhYmxlIiwiY2xhc3NOYW1lIiwiaHREYXJrIiwic3RyZXRjaEgiLCJhbGwiLDMsIm11bHRpQ29sdW1uU29ydGluZyIsInZpZXdwb3J0Um93UmVuZGVyaW5nT2Zmc2V0IiwiZGF0YSIsImNvbEhlYWRlcnMiLCJjb2x1bW5zIiwiZmlsdGVycyIsImhlaWdodCIsImFmdGVy'@;
put 'R2V0Q29sSGVhZGVyIiwibW9kaWZ5Q29sV2lkdGgiLCJjZWxscyIsIm1heFJvd3MiLCJtYW51YWxDb2x1bW5SZXNpemUiLCJyb3dIZWFkZXJzIiwicm93SGVhZGVyV2lkdGgiLCJyb3dIZWlnaHRzIiwibGljZW5zZUtleSJdLFsxLCJjbHItcm93IiwibS0wIiwiY2xyLWp1c3RpZnktY29udGVu'@;
put 'dC1jZW50ZXIiXSxbImNsYXNzIiwiZC1mbGV4IGNsci1qdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGNsci1jb2wtMTIgY2xyLWNvbC1sZy00Iiw0LCJuZ0lmIl0sWzEsImQtZmxleCIsImNsci1qdXN0aWZ5LWNvbnRlbnQtY2VudGVyIiwiY2xyLWNvbC0xMiIsImNsci1jb2wtbGctNCJdLFsidHlw'@;
put 'ZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLXN1Y2Nlc3MiLCJidG4tYmxvY2siLCJtci0wIiwzLCJjbGljayJdLFsic2hhcGUiLCJ1cGxvYWQiXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1vdXRsaW5lLWRhbmdlciIsImJ0bi1ibG9jayIsIm1yLTAi'@;
put 'LDMsImNsaWNrIl0sWyJzaGFwZSIsInRpbWVzIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGQsaCl7aWYoMSZkKXtjb25zdCBmPUxuKCk7ZGUoMCwiYXBwLXNpZGViYXIiKSxndCgxLFE5dCwyLDAsImRpdiIsMyksZGUoMiwiY2xyLXRyZWUiKSgzLCJjbHItdHJlZS1ub2RlIiw0KSg0LCJkaXYiLDUp'@;
put 'KDUsImlucHV0Iiw2LDApLGdpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihNKXtyZXR1cm4gd3QoZiksbWkoaC5zZWFyY2hTdHJpbmcsTSl8fChoLnNlYXJjaFN0cmluZz1NKSxDdChNKX0pLEZ0KCJrZXl1cCIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoZiksQ3QoaC54bG1hcExpc3RPbkZpbHRl'@;
put 'cigpKX0pLGhlKCksZ3QoNyxldnQsMSwwLCJjbHItaWNvbiIsNykoOCx0dnQsMSwwLCJjbHItaWNvbiIsOCksaGUoKSgpLGd0KDksbnZ0LDUsMywibmctY29udGFpbmVyIiw5KSxoZSgpKCksZGUoMTAsImRpdiIsMTApLGd0KDExLGF2dCw0LDIsImRpdiIsMTEpKDEyLG92dCw2LDEsImRpdiIs'@;
put 'MTIpKDEzLHV2dCwyNiwyNSwiZGl2IiwxMyksZGUoMTQsImNsci1tb2RhbCIsMTQpLEZ0KCJmaWxlT3ZlciIsZnVuY3Rpb24oTSl7cmV0dXJuIHd0KGYpLEN0KGguZmlsZU92ZXJCYXNlKE0pKX0pKCJmaWxlRHJvcCIsZnVuY3Rpb24oTSl7cmV0dXJuIHd0KGYpLEN0KGguZ2V0RmlsZURlc2Mo'@;
put 'TSwhMCkpfSksZ2koImNsck1vZGFsT3BlbkNoYW5nZSIsZnVuY3Rpb24oTSl7cmV0dXJuIHd0KGYpLG1pKGguc2hvd1VwbG9hZE1vZGFsLE0pfHwoaC5zaG93VXBsb2FkTW9kYWw9TSksQ3QoTSl9KSxkZSgxNSwiaDMiLDE1KSxMZSgxNiwiVXBsb2FkIEZpbGUiKSxoZSgpLGRlKDE3LCJkaXYi'@;
put 'LDE2KSgxOCwiZGl2IiwxNykoMTksInNwYW4iKSxMZSgyMCwiRHJvcCBmaWxlIGFueXdoZXJlIHRvIHVwbG9hZCEiKSxoZSgpKCksZGUoMjEsImRpdiIsMTgpKDIyLCJkaXYiLDE5KSgyMywiZGl2IiwyMCkoMjQsInNwYW4iLDIxKSgyNSwibGFiZWwiLDIyKSxMZSgyNiwiIEJyb3dzZSAiKSxo'@;
put 'ZSgpKCksZGUoMjcsImlucHV0IiwyMywxKSxGdCgiY2hhbmdlIixmdW5jdGlvbihNKXtyZXR1cm4gd3QoZiksQ3QoaC5nZXRGaWxlRGVzYyhNKSl9KSxoZSgpKCkoKSgpKCkoKSxkZSgyOSwiY2xyLW1vZGFsIiwyNCksZ2koImNsck1vZGFsT3BlbkNoYW5nZSIsZnVuY3Rpb24oTSl7cmV0dXJu'@;
put 'IHd0KGYpLG1pKGguc3VibWl0TGltaXROb3RpY2UsTSl8fChoLnN1Ym1pdExpbWl0Tm90aWNlPU0pLEN0KE0pfSksZGUoMzAsImgzIiwxNSksTGUoMzEsIk5vdGljZSIpLGhlKCksZGUoMzIsImRpdiIsMTYpKDMzLCJwIiwyNSksTGUoMzQpLGhlKCkoKSxkZSgzNSwiZGl2IiwyNikoMzYsImJ1'@;
put 'dHRvbiIsMjcpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoZiksQ3QoaC5zdWJtaXRMaW1pdE5vdGljZT0hMSl9KSxMZSgzNywiIENhbmNlbCAiKSxoZSgpLGRlKDM4LCJidXR0b24iLDI3KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGYpLGguc3VibWl0KCksQ3Qo'@;
put 'aC5zdWJtaXRMaW1pdE5vdGljZT0hMSl9KSxMZSgzOSwiIFN1Ym1pdCAiKSxoZSgpKCkoKSgpLGd0KDQwLHB2dCw0LDMsIm5nLXRlbXBsYXRlIixudWxsLDIsSWMpfWlmKDImZCl7Y29uc3QgZj1oYSg2KTtmZSgpLE1lKCJuZ0lmIixoLnhsbWFwc0xvYWRpbmcpLGZlKDQpLHBpKCJuZ01vZGVs'@;
put 'IixoLnNlYXJjaFN0cmluZyksZmUoMiksTWUoIm5nSWYiLGYudmFsdWUubGVuZ3RoPDEpLGZlKCksTWUoIm5nSWYiLGYudmFsdWUubGVuZ3RoPjApLGZlKCksTWUoIm5nRm9yT2YiLGgueGxtYXBzKSxmZSgyKSxNZSgibmdJZiIsIWguc2VsZWN0ZWRYTE1hcCksZmUoKSxNZSgibmdJZiIsaC5p'@;
put 'c0xvYWRpbmcpLGZlKCksTWUoIm5nSWYiLCFoLmlzTG9hZGluZyYmaC5zZWxlY3RlZFhMTWFwKSxmZSgpLE1lKCJ1cGxvYWRlciIsaC51cGxvYWRlcikoImNsck1vZGFsU2l6ZSIsInhsIikoImNsck1vZGFsU3RhdGljQmFja2Ryb3AiLCExKSgiY2xyTW9kYWxDbG9zYWJsZSIsITApLHBpKCJj'@;
put 'bHJNb2RhbE9wZW4iLGguc2hvd1VwbG9hZE1vZGFsKSxmZSgxMyksTWUoInVwbG9hZGVyIixoLnVwbG9hZGVyKSxmZSgyKSxwaSgiY2xyTW9kYWxPcGVuIixoLnN1Ym1pdExpbWl0Tm90aWNlKSxmZSg1KSxEcigiIER1ZSB0byBjdXJyZW50IGxpY2VuY2UsIG9ubHkgIixoLmxpY2VuY2VTdGF0'@;
put 'ZS52YWx1ZS5zdWJtaXRfcm93c19saW1pdCwiIHJvd3MgaW4gYSBmaWxlIHdpbGwgYmUgc3VibWl0dGVkLiBUbyByZW1vdmUgdGhlIHJlc3RyaWN0aW9uLCBjb250YWN0IHN1cHBvcnRAZGF0YWNvbnRyb2xsZXIuaW8gIil9fSxkZXBlbmRlbmNpZXM6W0RfLGMxLHFsLG5sLCRzLEVoLFBkLGZn'@;
put 'LEhsLG91LEt1LEh5LGRzLFoxLF9tLENtLHg3LHdtLHltLFM3LFJkLGk0LG5zLGJhLE4xLHRFLFI2ZSxMNmUscjRdLGVuY2Fwc3VsYXRpb246Mn0pfX1yZXR1cm4gY30pKCk7Y29uc3QgZ3Z0PVt7cGF0aDoiIixjb21wb25lbnQ6KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe31uZ09uSW5p'@;
put 'dCgpe31uZ09uRGVzdHJveSgpe31zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1Y21wPVZyKHt0eXBlOmMsc2VsZWN0b3JzOltbImFwcC14bG1hcC1yb3V0ZSJdXSxob3N0QXR0cnM6WzEsImNvbnRlbnQtY29udGFp'@;
put 'bmVyIl0sZGVjbHM6MSx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24oZCxoKXsxJmQmJkd0KDAsInJvdXRlci1vdXRsZXQiKX0sZGVwZW5kZW5jaWVzOltyZ10sZW5jYXBzdWxhdGlvbjoyfSl9fXJldHVybiBjfSkoKSxjaGlsZHJlbjpbe3BhdGg6IiIsY29tcG9uZW50OkI2ZX0se3BhdGg6Ijpp'@;
put 'ZCIsY29tcG9uZW50OkI2ZX1dfV07bGV0IG12dD0oKCk9PntjbGFzcyBje3N0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVtb2Q9a2koe3R5cGU6Y30pfXN0YXRpY3t0aGlzLlx1MDI3NWluaj1Bcih7aW1wb3J0czpb'@;
put 'emMuZm9yQ2hpbGQoZ3Z0KSx6Y119KX19cmV0dXJuIGN9KSgpO25OKCk7bGV0IHZ2dD0oKCk9PntjbGFzcyBje3N0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVtb2Q9a2koe3R5cGU6Y30pfXN0YXRpY3t0aGlzLlx1'@;
put 'MDI3NWluaj1Bcih7aW1wb3J0czpbbzksbXZ0LFJjLHowLEc5LFJhLHhBLG5mXX0pfX1yZXR1cm4gY30pKCksYnZ0PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt9bmdPbkluaXQoKXt9bmdPbkRlc3Ryb3koKXt9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBu'@;
put 'ZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAtbXVsdGktZGF0YXNldC1yb3V0ZSJdXSxob3N0QXR0cnM6WzEsImNvbnRlbnQtY29udGFpbmVyIl0sZGVjbHM6MSx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24oZCxoKXsxJmQmJkd0KDAs'@;
put 'InJvdXRlci1vdXRsZXQiKX0sZGVwZW5kZW5jaWVzOltyZ10sZW5jYXBzdWxhdGlvbjoyfSl9fXJldHVybiBjfSkoKTtjb25zdCB5dnQ9KGMsbCxhKT0+e2wuY2xhc3NMaXN0LmFkZChLbi5oYW5kc29udGFibGUuZGFya1RhYmxlSGVhZGVyQ2xhc3MpfSxfdnQ9WyJjb250ZW50QXJlYSJdLHd2'@;
put 'dD0oKT0+WyJodERhcmsiLCJodEN1c3RvbUhpZGRlbiJdO2Z1bmN0aW9uIEN2dChjLGwpezEmYyYmKGRlKDAsImRpdiIsMjQpLEd0KDEsImNsci1zcGlubmVyIiwyMiksaGUoKSl9ZnVuY3Rpb24gU3Z0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiZGl2IiwyNSkoMSwiYnV0dG9u'@;
put 'IiwyNiksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChoYSg0KS5jbGljaygpKX0pLExlKDIsIiBCcm93c2UgZmlsZSAiKSxoZSgpLGRlKDMsImlucHV0IiwyNywxKSxGdCgiY2hhbmdlIixmdW5jdGlvbihoKXtyZXR1cm4gd3QoYSksQ3QoUmUoKS5vbkZpbGVDaGFuZ2Uo'@;
put 'aCkpfSksaGUoKSgpfWlmKDImYyl7Y29uc3QgYT1SZSgpO2ZlKCksTWUoImRpc2FibGVkIixudWxsIT09YS5zZWxlY3RlZEZpbGV8fGEuc3VibWl0dGluZ0Nzdil9fWZ1bmN0aW9uIE12dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImRpdiIsMjUpKDEsImJ1dHRvbiIsMzApLEZ0'@;
put 'KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoUmUoMikub25EaXNjYXJkKCkpfSksTGUoMiwiIERpc2NhcmQgIiksaGUoKSxkZSgzLCJidXR0b24iLDMxKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KFJlKDIpLm9uU3VibWl0QWxsKCkpfSksTGUoNCwi'@;
put 'IFN1Ym1pdCBBbGwgIiksaGUoKSgpfX1mdW5jdGlvbiB4dnQoYyxsKXsxJmMmJkd0KDAsImNkcy1pY29uIiwzNil9ZnVuY3Rpb24gRXZ0KGMsbCl7MSZjJiZHdCgwLCJjZHMtaWNvbiIsMzcpfWZ1bmN0aW9uIFR2dChjLGwpe2lmKDEmYyYmKHNpKDApLGd0KDEseHZ0LDEsMCwiY2RzLWljb24i'@;
put 'LDM0KSgyLEV2dCwxLDAsImNkcy1pY29uIiwzNSksbGkoKSksMiZjKXtjb25zdCBhPVJlKCkuJGltcGxpY2l0O2ZlKCksTWUoIm5nSWYiLGEuc3VibWl0UmVzdWx0LmVycm9yKSxmZSgpLE1lKCJuZ0lmIixhLnN1Ym1pdFJlc3VsdC5zdWNjZXNzKX19ZnVuY3Rpb24gQXZ0KGMsbCl7MSZjJiZH'@;
put 'dCgwLCJjZHMtaWNvbiIsMzYpfWZ1bmN0aW9uIGt2dChjLGwpezEmYyYmR3QoMCwiY2RzLWljb24iLDM5KX1mdW5jdGlvbiBEdnQoYyxsKXtpZigxJmMmJihzaSgwKSxndCgxLEF2dCwxLDAsImNkcy1pY29uIiwzNCkoMixrdnQsMSwwLCJjZHMtaWNvbiIsMzgpLGxpKCkpLDImYyl7Y29uc3Qg'@;
put 'YT1SZSgyKS4kaW1wbGljaXQ7ZmUoKSxNZSgibmdJZiIsIShhLmRhdGFzb3VyY2UubGVuZ3RoJiZhLnBhcnNlUmVzdWx0KSksZmUoKSxNZSgibmdJZiIsYS5kYXRhc291cmNlLmxlbmd0aCYmYS5wYXJzZVJlc3VsdCl9fWZ1bmN0aW9uIEl2dChjLGwpezEmYyYmR3QoMCwiY2RzLWljb24iLDM5'@;
put 'KX1mdW5jdGlvbiBSdnQoYyxsKXsxJmMmJkd0KDAsImNsci1zcGlubmVyIiw0MSl9ZnVuY3Rpb24gTHZ0KGMsbCl7aWYoMSZjJiYoc2koMCksZ3QoMSxJdnQsMSwwLCJjZHMtaWNvbiIsMzgpKDIsUnZ0LDEsMCwiY2xyLXNwaW5uZXIiLDQwKSxsaSgpKSwyJmMpe2NvbnN0IGE9UmUoMikuJGlt'@;
put 'cGxpY2l0O2ZlKCksTWUoIm5nSWYiLCFhLnBhcnNpbmdUYWJsZSksZmUoKSxNZSgibmdJZiIsYS5wYXJzaW5nVGFibGUpfX1mdW5jdGlvbiBPdnQoYyxsKXtpZigxJmMmJihzaSgwKSxndCgxLER2dCwzLDIsIm5nLWNvbnRhaW5lciIsNCkoMixMdnQsMywyLCJuZy1jb250YWluZXIiLDQpLGxp'@;
put 'KCkpLDImYyl7Y29uc3QgYT1SZSgpLiRpbXBsaWNpdDtmZSgpLE1lKCJuZ0lmIixhLmRhdGFzb3VyY2UpLGZlKCksTWUoIm5nSWYiLCFhLmRhdGFzb3VyY2UpfX1mdW5jdGlvbiBQdnQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJjbHItdHJlZS1ub2RlIikoMSwiYnV0dG9uIiwz'@;
put 'MiksRnQoImNsaWNrIixmdW5jdGlvbigpe2NvbnN0IGg9d3QoYSkuJGltcGxpY2l0O3JldHVybiBDdChSZSgyKS5vblBhcnNlZERhdGFzZXRDbGljayhoKSl9KSxndCgyLFR2dCwzLDIsIm5nLWNvbnRhaW5lciIsNCkoMyxPdnQsMywyLCJuZy1jb250YWluZXIiLDQpLGRlKDQsInNwYW4iLDMz'@;
put 'KSxMZSg1KSxoZSgpKCkoKX1pZigyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7ZmUoKSxUcigiYWN0aXZlIixhLmFjdGl2ZSksZmUoKSxNZSgibmdJZiIsYS5zdWJtaXRSZXN1bHQpLGZlKCksTWUoIm5nSWYiLCFhLnN1Ym1pdFJlc3VsdCksZmUoMiksRHIoIiAiLGEubGliZHMsIiAiKX19ZnVu'@;
put 'Y3Rpb24gRnZ0KGMsbCl7aWYoMSZjJiYoc2koMCksZ3QoMSxNdnQsNSwwLCJkaXYiLDMpLGRlKDIsInAiLDI4KSxMZSgzLCJGb3VuZCB0YWJsZXM6IiksaGUoKSxkZSg0LCJjbHItdHJlZSIpLGd0KDUsUHZ0LDYsNSwiY2xyLXRyZWUtbm9kZSIsMjkpLGhlKCksbGkoKSksMiZjKXtjb25zdCBh'@;
put 'PVJlKCk7ZmUoKSxNZSgibmdJZiIsIWEuZXhjZWxzU3VibWl0dGVkKSxmZSg0KSxNZSgibmdGb3JPZiIsYS5wYXJzZWREYXRhc2V0cyl9fWZ1bmN0aW9uIEh2dChjLGwpezEmYyYmR3QoMCwiY2RzLWljb24iLDM2KX1mdW5jdGlvbiBOdnQoYyxsKXsxJmMmJkd0KDAsImNkcy1pY29uIiwzNyl9'@;
put 'ZnVuY3Rpb24gVnZ0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiY2xyLXRyZWUtbm9kZSIpKDEsImJ1dHRvbiIsNDMpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtjb25zdCBoPXd0KGEpLiRpbXBsaWNpdDtyZXR1cm4gQ3QoUmUoMikub25TdWJtaXR0ZWRDc3ZEYXRhc2V0Q2xpY2so'@;
put 'aCkpfSksZ3QoMixIdnQsMSwwLCJjZHMtaWNvbiIsMzQpKDMsTnZ0LDEsMCwiY2RzLWljb24iLDM1KSxHdCg0LCJjZHMtaWNvbiIsMzkpLExlKDUpLGhlKCkoKX1pZigyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7ZmUoKSxUcigiYWN0aXZlIixhLmFjdGl2ZSksZmUoKSxNZSgibmdJZiIsYS5l'@;
put 'cnJvciksZmUoKSxNZSgibmdJZiIsYS5zdWNjZXNzKSxmZSgyKSxEcigiICIsYS5saWJkcywiICIpfX1mdW5jdGlvbiBCdnQoYyxsKXtpZigxJmMmJihzaSgwKSxkZSgxLCJwIiw0MiksTGUoMiwiU3VibWl0dGVkIHRhYmxlczoiKSxoZSgpLGRlKDMsImNsci10cmVlIiksZ3QoNCxWdnQsNiw1'@;
put 'LCJjbHItdHJlZS1ub2RlIiwyOSksaGUoKSxsaSgpKSwyJmMpe2NvbnN0IGE9UmUoKTtmZSg0KSxNZSgibmdGb3JPZiIsYS5zdWJtaXR0ZWRDc3ZEYXRhc2V0cyl9fWZ1bmN0aW9uIGp2dChjLGwpezEmYyYmKGRlKDAsImRpdiIsNDQpLEd0KDEsImNsci1pY29uIiw0NSksZGUoMiwicCIsNDYp'@;
put 'LExlKDMsIiBQbGVhc2UgdXBsb2FkIGEgZmlsZSAiKSxoZSgpKCkpfWZ1bmN0aW9uIHp2dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO3NpKDApLGRlKDEsImRpdiIsNDcpKDIsImRpdiIsNDgpKDMsInAiLDQ5KSxMZSg0LCIgU2VsZWN0ZWQgZmlsZTogIiksZGUoNSwic3Ryb25nIiksTGUo'@;
put 'NiksaGUoKSxkZSg3LCJjbHItdG9vbHRpcCIpKDgsImNkcy1pY29uIiw1MCksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChSZSgyKS5vbkRpc2NhcmRGaWxlKCkpfSksaGUoKSxkZSg5LCJjbHItdG9vbHRpcC1jb250ZW50IiksTGUoMTAsIiBEaXNjYXJkIHRoZSBmaWxl'@;
put 'ICIpLGhlKCkoKSgpLGRlKDExLCJwIiw1MSksTGUoMTIsIiBGaWxlIHNpemU6ICIpLGRlKDEzLCJzdHJvbmciKSxMZSgxNCksaGUoKSgpLGRlKDE1LCJwIiw1MiksTGUoMTYsIiBQYXN0ZSBvciB0eXBlIHRoZSBsaXN0IG9mIGRhdGFzZXRzIHRvIHVwbG9hZDogIiksaGUoKSxkZSgxNywiY2xy'@;
put 'LWNvbnRyb2wtaGVscGVyIiw1MyksTGUoMTgsIkVhY2ggcm93IGlzIG9uZSBkYXRhc2V0LiBXZSB3aWxsIGF1dG9tYXRpY2FsbHkgZGV0ZWN0IHRhYmxlcyBieSB0aGUgc2hlZXRuYW1lIGFuZCBwb3B1bGF0ZSBpZiBhbnkuIiksaGUoKSxHdCgxOSwiaG90LXRhYmxlIiw1NCksZGUoMjAsImRp'@;
put 'diIsNTUpKDIxLCJidXR0b24iLDU2KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KFJlKDIpLm9uU3RhcnRQYXJzaW5nRmlsZSgpKX0pLExlKDIyLCIgQ29udGludWUgIiksaGUoKSgpKCkoKSxsaSgpfWlmKDImYyl7Y29uc3QgYT1SZSgyKTtmZSg2KSx3cihhLnNlbGVj'@;
put 'dGVkRmlsZS5uYW1lKSxmZSg4KSxEcigiIixhLnNlbGVjdGVkRmlsZS5zaXplTUIsIiBNQiIpLGZlKDUpLE1lKCJhZnRlckdldENvbEhlYWRlciIsYS5hZnRlckdldENvbEhlYWRlcikoInNldHRpbmdzIixhLmhvdFVzZXJEYXRhc2V0cykoImxpY2Vuc2VLZXkiLGEuaG90VGFibGVMaWNlbnNl'@;
put 'S2V5KSxmZSgyKSxNZSgiZGlzYWJsZWQiLCFhLm1hdGNoZWREYXRhc2V0cy5sZW5ndGgpKCJjbHJMb2FkaW5nIixhLnVwbG9hZExvYWRpbmcpfX1mdW5jdGlvbiBVdnQoYyxsKXtpZigxJmMmJihzaSgwKSxHdCgxLCJjbHItaWNvbiIsNTcpLGRlKDIsInAiLDQ2KSxMZSgzKSxoZSgpLGxpKCkp'@;
put 'LDImYyl7Y29uc3QgYT1SZSg0KTtmZSgzKSxEcigiICIsYS5maWxlTG9hZGluZ1N0YXRlLCIuLi4gIil9fWZ1bmN0aW9uIFp2dChjLGwpezEmYyYmKHNpKDApLEd0KDEsImNsci1pY29uIiw1OCksZGUoMiwicCIsNDYpLExlKDMsIiBQbGVhc2Ugc2VsZWN0IGEgZGF0YXNldCBvbiB0aGUgbGVm'@;
put 'dCB0byByZXZpZXcgdGhlIGRhdGEgIiksaGUoKSxsaSgpKX1mdW5jdGlvbiBXdnQoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiLDQ0KSxndCgxLFV2dCw0LDEsIm5nLWNvbnRhaW5lciIsNCkoMixadnQsNCwwLCJuZy1jb250YWluZXIiLDQpLGhlKCkpLDImYyl7Y29uc3QgYT1SZSgzKTtmZSgp'@;
put 'LE1lKCJuZ0lmIixhLmZpbGVMb2FkaW5nU3RhdGUhPT1hLkZpbGVMb2FkaW5nU3RhdGUucGFyc2VkKSxmZSgpLE1lKCJuZ0lmIixhLmZpbGVMb2FkaW5nU3RhdGU9PT1hLkZpbGVMb2FkaW5nU3RhdGUucGFyc2VkKX19ZnVuY3Rpb24gWXZ0KGMsbCl7MSZjJiYoZGUoMCwic3BhbiIsNzUpKDEs'@;
put 'InN0cm9uZyIpLExlKDIsIlNVQ0NFU1MiKSxoZSgpKCkpfWZ1bmN0aW9uIEd2dChjLGwpezEmYyYmKGRlKDAsInNwYW4iLDc2KSgxLCJzdHJvbmciKSxMZSgyLCJFUlJPUiIpLGhlKCkoKSl9ZnVuY3Rpb24gJHZ0KGMsbCl7MSZjJiYoZGUoMCwicCIsNjMpLExlKDEsIiBFcnJvciBkZXRhaWxz'@;
put 'OiAiKSxoZSgpKX1mdW5jdGlvbiBLdnQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJidXR0b24iLDc3KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1SZSg1KTtyZXR1cm4gQ3QoaC5yZVN1Ym1pdFRhYmxlKGguYWN0aXZlUGFyc2VkRGF0YXNldCkpfSksTGUo'@;
put 'MSwiIFJlc3VibWl0ICIpLGhlKCl9MiZjJiZNZSgiY2xyTG9hZGluZyIsUmUoNSkuc3VibWl0TG9hZGluZyl9ZnVuY3Rpb24gcXZ0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiZGl2Iiw2OSkoMSwiZGl2IikoMiwicCIsNjIpLExlKDMsIiBTdWJtaXQgU3RhdHVzOiAiKSxndCg0'@;
put 'LFl2dCwzLDAsInNwYW4iLDcwKSg1LEd2dCwzLDAsInNwYW4iLDcxKSxoZSgpLGd0KDYsJHZ0LDIsMCwicCIsNzIpLGhlKCksZGUoNywiZGl2IiksZ3QoOCxLdnQsMiwxLCJidXR0b24iLDczKSxkZSg5LCJidXR0b24iLDc0KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1S'@;
put 'ZSg0KTtyZXR1cm4gQ3QoaC5kb3dubG9hZEZpbGUoaC5hY3RpdmVQYXJzZWREYXRhc2V0LnN1Ym1pdFJlc3VsdC5sb2d8fGguYWN0aXZlUGFyc2VkRGF0YXNldC5zdWJtaXRSZXN1bHQuc3VjY2Vzc3x8aC5hY3RpdmVQYXJzZWREYXRhc2V0LnN1Ym1pdFJlc3VsdC5lcnJvcikpfSksTGUoMTAs'@;
put 'IiBEb3dubG9hZCBsb2cgIiksaGUoKSgpKCl9aWYoMiZjKXtjb25zdCBhPVJlKDQpO2ZlKDQpLE1lKCJuZ0lmIixudWxsPT1hLmFjdGl2ZVBhcnNlZERhdGFzZXQuc3VibWl0UmVzdWx0P251bGw6YS5hY3RpdmVQYXJzZWREYXRhc2V0LnN1Ym1pdFJlc3VsdC5zdWNjZXNzKSxmZSgpLE1lKCJu'@;
put 'Z0lmIixudWxsPT1hLmFjdGl2ZVBhcnNlZERhdGFzZXQuc3VibWl0UmVzdWx0P251bGw6YS5hY3RpdmVQYXJzZWREYXRhc2V0LnN1Ym1pdFJlc3VsdC5lcnJvciksZmUoKSxNZSgibmdJZiIsbnVsbD09YS5hY3RpdmVQYXJzZWREYXRhc2V0LnN1Ym1pdFJlc3VsdD9udWxsOmEuYWN0aXZlUGFy'@;
put 'c2VkRGF0YXNldC5zdWJtaXRSZXN1bHQuZXJyb3IpLGZlKDIpLE1lKCJuZ0lmIiwhYS5zdWJtaXR0aW5nQ3N2JiYobnVsbD09YS5hY3RpdmVQYXJzZWREYXRhc2V0LnN1Ym1pdFJlc3VsdD9udWxsOmEuYWN0aXZlUGFyc2VkRGF0YXNldC5zdWJtaXRSZXN1bHQuZXJyb3IpKX19ZnVuY3Rpb24g'@;
put 'WHZ0KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2Iiw3OCkoMSwiZGl2Iiw3OSksTGUoMiksZWwoMywianNvbiIpLGhlKCkoKSksMiZjKXtjb25zdCBhPVJlKDQpO2ZlKDIpLERyKCIgIixEYygzLDEsbnVsbD09YS5hY3RpdmVQYXJzZWREYXRhc2V0LnN1Ym1pdFJlc3VsdD9udWxsOmEuYWN0aXZl'@;
put 'UGFyc2VkRGF0YXNldC5zdWJtaXRSZXN1bHQuZXJyb3IpLCIgIil9fWZ1bmN0aW9uIEp2dChjLGwpe2lmKDEmYyYmKHNpKDApLGRlKDEsInN0cm9uZyIpLExlKDIpLGhlKCksbGkoKSksMiZjKXtjb25zdCBhPVJlKDQpO2ZlKDIpLFV1KCciJyxudWxsPT1hLmFjdGl2ZVBhcnNlZERhdGFzZXQu'@;
put 'cGFyc2VSZXN1bHQucmFuZ2VTaGVldFJlcz9udWxsOmEuYWN0aXZlUGFyc2VkRGF0YXNldC5wYXJzZVJlc3VsdC5yYW5nZVNoZWV0UmVzLnNoZWV0TmFtZSwnIiEnLG51bGw9PWEuYWN0aXZlUGFyc2VkRGF0YXNldC5wYXJzZVJlc3VsdC5yYW5nZVNoZWV0UmVzP251bGw6YS5hY3RpdmVQYXJz'@;
put 'ZWREYXRhc2V0LnBhcnNlUmVzdWx0LnJhbmdlU2hlZXRSZXMucmFuZ2VBZGRyZXNzLCIiKX19ZnVuY3Rpb24gUXZ0KGMsbCl7MSZjJiYoZGUoMCwic3Ryb25nIiksTGUoMSwiTm8gZGF0YSBmb3VuZCIpLGhlKCkpfWZ1bmN0aW9uIGVidChjLGwpezEmYyYmKGRlKDAsInNwYW4iLDgxKSgxLCJz'@;
put 'dHJvbmciKSxMZSgyLCJTZWFyY2hpbmcgZm9yIHRoZSBkYXRhLi4uIiksaGUoKSxHdCgzLCJjbHItc3Bpbm5lciIsODIpLGhlKCkpfWZ1bmN0aW9uIHRidChjLGwpe2lmKDEmYyYmKHNpKDApLGd0KDEsUXZ0LDIsMCwic3Ryb25nIiw0KSgyLGVidCw0LDAsInNwYW4iLDgwKSxsaSgpKSwyJmMp'@;
put 'e2NvbnN0IGE9UmUoNCk7ZmUoKSxNZSgibmdJZiIsIWEuYWN0aXZlUGFyc2VkRGF0YXNldC5wYXJzaW5nVGFibGUpLGZlKCksTWUoIm5nSWYiLGEuYWN0aXZlUGFyc2VkRGF0YXNldC5wYXJzaW5nVGFibGUpfX1mdW5jdGlvbiBuYnQoYyxsKXsxJmMmJihkZSgwLCJkaXYiLDgzKSxHdCgxLCJj'@;
put 'bHItc3Bpbm5lciIsODQpLGhlKCkpfWZ1bmN0aW9uIHJidChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO3NpKDApLGd0KDEscXZ0LDExLDQsImRpdiIsNTkpKDIsWHZ0LDQsMywiZGl2Iiw2MCksZGUoMywiZGl2Iiw2MSkoNCwiZGl2IikoNSwicCIsNjIpLExlKDYsIiBGb3VuZCBpbiByYW5n'@;
put 'ZTogIiksZ3QoNyxKdnQsMywyLCJuZy1jb250YWluZXIiLDQpKDgsdGJ0LDMsMiwibmctY29udGFpbmVyIiw0KSxoZSgpLGRlKDksInAiLDYzKSxMZSgxMCwiIERhdGFzZXQ6ICIpLGRlKDExLCJzdHJvbmciKSgxMiwiY2xyLXRvb2x0aXAiKSgxMywiYSIsNjQpLExlKDE0KSxoZSgpLGRlKDE1'@;
put 'LCJjbHItdG9vbHRpcC1jb250ZW50Iiw2NSksTGUoMTYsIiBDbGljayB0byBlZGl0IHRoZSB0YWJsZSAiKSxoZSgpKCkoKSgpKCksZGUoMTcsImRpdiIpKDE4LCJjbHItdG9nZ2xlLXdyYXBwZXIiKSgxOSwiaW5wdXQiLDY2KSxnaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7d3QoYSk7'@;
put 'Y29uc3QgZj1SZSgzKTtyZXR1cm4gbWkoZi5hY3RpdmVQYXJzZWREYXRhc2V0LmluY2x1ZGVJblN1Ym1pc3Npb24saCl8fChmLmFjdGl2ZVBhcnNlZERhdGFzZXQuaW5jbHVkZUluU3VibWlzc2lvbj1oKSxDdChoKX0pLGhlKCksZGUoMjAsImxhYmVsIiksTGUoMjEsIkluY2x1ZGUgaW4gc3Vi'@;
put 'bWlzc2lvbiIpLGhlKCkoKSgpKCksZ3QoMjIsbmJ0LDIsMCwiZGl2Iiw2NyksR3QoMjMsImhvdC10YWJsZSIsNjgpLGxpKCl9aWYoMiZjKXtjb25zdCBhPVJlKDMpO2ZlKCksTWUoIm5nSWYiLGEuYWN0aXZlUGFyc2VkRGF0YXNldC5zdWJtaXRSZXN1bHQpLGZlKCksTWUoIm5nSWYiLG51bGw9'@;
put 'PWEuYWN0aXZlUGFyc2VkRGF0YXNldC5zdWJtaXRSZXN1bHQ/bnVsbDphLmFjdGl2ZVBhcnNlZERhdGFzZXQuc3VibWl0UmVzdWx0LmVycm9yKSxmZSg1KSxNZSgibmdJZiIsYS5hY3RpdmVQYXJzZWREYXRhc2V0LnBhcnNlUmVzdWx0KSxmZSgpLE1lKCJuZ0lmIiwhYS5hY3RpdmVQYXJzZWRE'@;
put 'YXRhc2V0LnBhcnNlUmVzdWx0KSxmZSg1KSxNZSgicm91dGVyTGluayIsIi9lZGl0b3IvIithLmFjdGl2ZVBhcnNlZERhdGFzZXQubGliZHMpLGZlKCksd3IoYS5hY3RpdmVQYXJzZWREYXRhc2V0LmxpYmRzKSxmZSgpLE1lKCJjbHJQb3NpdGlvbiIsInRvcC1yaWdodCIpKCJjbHJTaXplIiwi'@;
put 'c20iKSxmZSg0KSxwaSgibmdNb2RlbCIsYS5hY3RpdmVQYXJzZWREYXRhc2V0LmluY2x1ZGVJblN1Ym1pc3Npb24pLE1lKCJkaXNhYmxlZCIsIShhLmFjdGl2ZVBhcnNlZERhdGFzZXQuZGF0YXNvdXJjZSYmYS5hY3RpdmVQYXJzZWREYXRhc2V0LnBhcnNlUmVzdWx0KSksZmUoMyksTWUoIm5n'@;
put 'SWYiLGEuaXNIb3RIaWRkZW4pLGZlKCksTWUoImFmdGVyR2V0Q29sSGVhZGVyIixhLmFmdGVyR2V0Q29sSGVhZGVyKSgiY2xhc3NOYW1lIixHcygxOCx3dnQpKSgibGljZW5zZUtleSIsYS5ob3RUYWJsZUxpY2Vuc2VLZXkpKCJtdWx0aUNvbHVtblNvcnRpbmciLCEwKSgidmlld3BvcnRSb3dS'@;
put 'ZW5kZXJpbmdPZmZzZXQiLDUwKSgibWFudWFsQ29sdW1uUmVzaXplIiwhMCkoImZpbHRlcnMiLCEwKX19ZnVuY3Rpb24gaWJ0KGMsbCl7aWYoMSZjJiYoc2koMCksZ3QoMSxXdnQsMywyLCJkaXYiLDkpKDIscmJ0LDI0LDE5LCJuZy1jb250YWluZXIiLDQpLGxpKCkpLDImYyl7Y29uc3QgYT1S'@;
put 'ZSgyKTtmZSgpLE1lKCJuZ0lmIiwhYS5hY3RpdmVQYXJzZWREYXRhc2V0KSxmZSgpLE1lKCJuZ0lmIixhLmFjdGl2ZVBhcnNlZERhdGFzZXQpfX1mdW5jdGlvbiBhYnQoYyxsKXsxJmMmJihkZSgwLCJkaXYiLDQ0KSxHdCgxLCJjbHItaWNvbiIsNTgpLGRlKDIsInAiLDQ2KSxMZSgzLCIgUGxl'@;
put 'YXNlIHNlbGVjdCBhIGRhdGFzZXQgb24gdGhlIGxlZnQgdG8gcmV2aWV3IHRoZSBzdWJtaXQgcmVzdWx0cyAiKSxoZSgpKCkpfWZ1bmN0aW9uIG9idChjLGwpe2lmKDEmYyYmKHNpKDApLGd0KDEsYWJ0LDQsMCwiZGl2Iiw5KSxsaSgpKSwyJmMpe2NvbnN0IGE9UmUoMik7ZmUoKSxNZSgibmdJ'@;
put 'ZiIsIWEuYWN0aXZlU3VibWl0dGVkQ3N2RGF0YXNldCl9fWZ1bmN0aW9uIHNidChjLGwpezEmYyYmKGRlKDAsInNwYW4iLDc1KSgxLCJzdHJvbmciKSxMZSgyLCJTVUNDRVNTIiksaGUoKSgpKX1mdW5jdGlvbiBsYnQoYyxsKXsxJmMmJihkZSgwLCJzcGFuIiw3NikoMSwic3Ryb25nIiksTGUo'@;
put 'MiwiRVJST1IiKSxoZSgpKCkpfWZ1bmN0aW9uIGNidChjLGwpezEmYyYmKGRlKDAsInAiLDYzKSxMZSgxLCIgRXJyb3IgZGV0YWlsczogIiksaGUoKSl9ZnVuY3Rpb24gdWJ0KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2Iiw3OCkoMSwiZGl2Iiw3OSksTGUoMiksZWwoMywianNvbiIpLGhlKCko'@;
put 'KSksMiZjKXtjb25zdCBhPVJlKDMpO2ZlKDIpLERyKCIgIixEYygzLDEsYS5hY3RpdmVTdWJtaXR0ZWRDc3ZEYXRhc2V0LmVycm9yKSwiICIpfX1mdW5jdGlvbiBkYnQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtzaSgwKSxkZSgxLCJkaXYiLDg1KSgyLCJkaXYiKSgzLCJwIiw2MiksTGUo'@;
put 'NCwiIE1hdGNoZWQgd2l0aCBkYXRhc2V0OiAiKSxkZSg1LCJzdHJvbmciKSg2LCJjbHItdG9vbHRpcCIpKDcsImEiLDY0KSxMZSg4KSxoZSgpLGRlKDksImNsci10b29sdGlwLWNvbnRlbnQiLDY1KSxMZSgxMCwiIENsaWNrIHRvIGVkaXQgdGhlIHRhYmxlICIpLGhlKCkoKSgpKCksZGUoMTEs'@;
put 'InAiLDYyKSxMZSgxMiwiIFN0YXR1czogIiksZ3QoMTMsc2J0LDMsMCwic3BhbiIsNzApKDE0LGxidCwzLDAsInNwYW4iLDcxKSxoZSgpLGd0KDE1LGNidCwyLDAsInAiLDcyKSxoZSgpLGRlKDE2LCJkaXYiKSgxNywiYnV0dG9uIiw3NCksRnQoImNsaWNrIixmdW5jdGlvbigpe3d0KGEpO2Nv'@;
put 'bnN0IGg9UmUoMik7cmV0dXJuIEN0KGguZG93bmxvYWRGaWxlKGguYWN0aXZlU3VibWl0dGVkQ3N2RGF0YXNldC5zdWNjZXNzfHxoLmFjdGl2ZVN1Ym1pdHRlZENzdkRhdGFzZXQuZXJyb3IpKX0pLExlKDE4LCIgRG93bmxvYWQgbG9nICIpLGhlKCkoKSgpLGd0KDE5LHVidCw0LDMsImRpdiIs'@;
put 'NjApLGxpKCl9aWYoMiZjKXtjb25zdCBhPVJlKDIpO2ZlKDcpLE1lKCJyb3V0ZXJMaW5rIiwiL2VkaXRvci8iK2EuYWN0aXZlU3VibWl0dGVkQ3N2RGF0YXNldC5saWJkcyksZmUoKSx3cihhLmFjdGl2ZVN1Ym1pdHRlZENzdkRhdGFzZXQubGliZHMpLGZlKCksTWUoImNsclBvc2l0aW9uIiwi'@;
put 'dG9wLXJpZ2h0IikoImNsclNpemUiLCJzbSIpLGZlKDQpLE1lKCJuZ0lmIixhLmFjdGl2ZVN1Ym1pdHRlZENzdkRhdGFzZXQuc3VjY2VzcyksZmUoKSxNZSgibmdJZiIsYS5hY3RpdmVTdWJtaXR0ZWRDc3ZEYXRhc2V0LmVycm9yKSxmZSgpLE1lKCJuZ0lmIixhLmFjdGl2ZVN1Ym1pdHRlZENz'@;
put 'dkRhdGFzZXQuZXJyb3IpLGZlKDQpLE1lKCJuZ0lmIixhLmFjdGl2ZVN1Ym1pdHRlZENzdkRhdGFzZXQuZXJyb3IpfX1mdW5jdGlvbiBoYnQoYyxsKXtpZigxJmMmJihzaSgwKSxndCgxLHp2dCwyMyw3LCJuZy1jb250YWluZXIiLDQpKDIsaWJ0LDMsMiwibmctY29udGFpbmVyIiw0KSgzLG9i'@;
put 'dCwyLDEsIm5nLWNvbnRhaW5lciIsNCkoNCxkYnQsMjAsOCwibmctY29udGFpbmVyIiw0KSxsaSgpKSwyJmMpe2NvbnN0IGE9UmUoKTtmZSgpLE1lKCJuZ0lmIiwhYS5wYXJzZWREYXRhc2V0cy5sZW5ndGgmJm51bGwhPT1hLnNlbGVjdGVkRmlsZSksZmUoKSxNZSgibmdJZiIsYS5wYXJzZWRE'@;
put 'YXRhc2V0cy5sZW5ndGgmJiFhLnN1Ym1pdHRlZENzdkRhdGFzZXRzLmxlbmd0aCksZmUoKSxNZSgibmdJZiIsYS5zdWJtaXR0ZWRDc3ZEYXRhc2V0cy5sZW5ndGgpLGZlKCksTWUoIm5nSWYiLGEuYWN0aXZlU3VibWl0dGVkQ3N2RGF0YXNldCl9fWZ1bmN0aW9uIGZidChjLGwpe2lmKDEmYyYm'@;
put 'KGRlKDAsInAiLDg2KSxMZSgxKSxoZSgpKSwyJmMpe2NvbnN0IGE9UmUoKTtmZSgpLERyKCIgRHVlIHRvIGN1cnJlbnQgbGljZW5jZSwgb25seSAiLGEubGljZW5jZVN0YXRlLnZhbHVlLnN1Ym1pdF9yb3dzX2xpbWl0LCIgcm93cyBpbiBlYWNoIGZpbGUgd2lsbCBiZSBzdWJtaXR0ZWQuIFRv'@;
put 'IHJlbW92ZSB0aGUgcmVzdHJpY3Rpb24sIGNvbnRhY3Qgc3VwcG9ydEBkYXRhY29udHJvbGxlci5pby4gIil9fXZhciB4dz1mdW5jdGlvbihjKXtyZXR1cm4gYy5yZWFkaW5nPSJSZWFkaW5nIHRoZSBmaWxlIixjLnBhcnNpbmc9IlNlYXJjaGluZyBmb3IgdGhlIGRhdGEgaW4gdGhlIGZpbGUi'@;
put 'LGMucGFyc2VkPSJTZWFyY2hpbmcgZm9yIHRoZSBkYXRhIGZpbmlzaGVkIixjLm5vdFNlbGVjdGVkPSJGaWxlIG5vdCBzZWxlY3RlZCIsY30oeHd8fHt9KTtjb25zdCBwYnQ9W3twYXRoOiIiLGNvbXBvbmVudDpidnQsY2hpbGRyZW46W3twYXRoOiIiLGNvbXBvbmVudDooKCk9PntjbGFzcyBj'@;
put 'e2NvbnN0cnVjdG9yKGEsZCxoLGYsdixNLEQpe3RoaXMuZXZlbnRTZXJ2aWNlPWEsdGhpcy5saWNlbmNlU2VydmljZT1kLHRoaXMuaGVscGVyU2VydmljZT1oLHRoaXMuc2FzU3RvcmVTZXJ2aWNlPWYsdGhpcy5zcHJlYWRzaGVldFNlcnZpY2U9dix0aGlzLnNhc1NlcnZpY2U9TSx0aGlzLmNk'@;
put 'cj1ELHRoaXMuY29udGVudENvbnRhaW5lckNsYXNzPSEwLHRoaXMubGljZW5jZVN0YXRlPXRoaXMubGljZW5jZVNlcnZpY2UubGljZW5jZVN0YXRlLHRoaXMuSW5maW5pdHk9MS8wLHRoaXMuZmlsZUxvYWRpbmdTdGF0ZT14dy5ub3RTZWxlY3RlZCx0aGlzLkZpbGVMb2FkaW5nU3RhdGU9eHcs'@;
put 'dGhpcy5ob3RUYWJsZUxpY2Vuc2VLZXk9dm9pZCAwLHRoaXMuaG90VGFibGVNYXhSb3dzPXRoaXMubGljZW5jZVN0YXRlLnZhbHVlLnZpZXdlcl9yb3dzX2FsbG93ZWR8fDEvMCx0aGlzLmNzdkZpbGVzPVtdLHRoaXMuY3N2U3VibWl0dGluZz0hMSx0aGlzLmF1dG9EZXRlY3RpbmdDb2x1bW5z'@;
put 'PSExLHRoaXMuc2VsZWN0ZWRGaWxlPW51bGwsdGhpcy5wYXJzZWREYXRhc2V0cz1bXSx0aGlzLnN1Ym1pdHRlZENzdkRhdGFzZXRzPVtdLHRoaXMuZGF0YXNldHNMb2FkaW5nPSExLHRoaXMudXBsb2FkTG9hZGluZz0hMSx0aGlzLnN1Ym1pdExvYWRpbmc9ITEsdGhpcy5tYXRjaGVkRGF0YXNl'@;
put 'dHM9W10sdGhpcy5zaGVldE5hbWVzPVtdLHRoaXMudXNlcklucHV0RGF0YXNldHM9IiIsdGhpcy5saWJzQW5kVGFibGVzPXt9LHRoaXMuc2hvd1N1Ym1pdFJlYXNvbk1vZGFsPSExLHRoaXMuc3VibWl0UmVhc29uTWVzc2FnZT0iIix0aGlzLmhvdFVzZXJEYXRhc2V0cz17Y29sSGVhZGVyczpb'@;
put 'IkxpYnJhcnkiLCJUYWJsZSJdLGRhdGE6W1siIiwiIl0sWyIiLCIiXSxbIiIsIiJdLFsiIiwiIl0sWyIiLCIiXSxbIiIsIiJdLFsiIiwiIl0sWyIiLCIiXSxbIiIsIiJdLFsiIiwiIl0sWyIiLCIiXSxbIiIsIiJdXSxjb2x1bW5zOlt7dHlwZToiYXV0b2NvbXBsZXRlIixmaWx0ZXI6ITEsc291'@;
put 'cmNlOltdfSx7dHlwZToiYXV0b2NvbXBsZXRlIixmaWx0ZXI6ITEsc291cmNlOltdfV0sd2lkdGg6IjEwMCUiLGhlaWdodDoiMzA1cHgiLGNsYXNzTmFtZTpbImh0RGFyayJdLGNvbnRleHRNZW51OntpdGVtczp7cm93X2Fib3ZlOntuYW1lOiJJbnNlcnQgUm93IGFib3ZlIn0scm93X2JlbG93'@;
put 'OntuYW1lOiJJbnNlcnQgUm93IGJlbG93In19fSxtYW51YWxSb3dNb3ZlOiEwLGNvbHVtblNvcnRpbmc6ITB9LHRoaXMuYWZ0ZXJHZXRDb2xIZWFkZXI9eXZ0LHRoaXMuaG90UmVnaXN0ZXJlcj1uZXcgWW19bmdPbkluaXQoKXt0aGlzLmxpY2VuY2VTZXJ2aWNlLmhvdF9saWNlbnNlX2tleS5z'@;
put 'dWJzY3JpYmUoYT0+e3RoaXMuaG90VGFibGVMaWNlbnNlS2V5PWF9KX1uZ0FmdGVyQ29udGVudEluaXQoKXtLbi5lZGl0b3Iuc3RhcnR1cFNldD90aGlzLmdldEZyb21HbG9iYWxzKCk6dGhpcy5ldmVudFNlcnZpY2Uub25TdGFydHVwRGF0YUxvYWRlZC5zdWJzY3JpYmUoKCk9Pnt0aGlzLmdl'@;
put 'dEZyb21HbG9iYWxzKCl9KX1nZXRGcm9tR2xvYmFscygpe3RoaXMubGlic0FuZFRhYmxlcz1Lbi5lZGl0b3IubGlic0FuZFRhYmxlcztjb25zdCBhPU9iamVjdC5rZXlzKHRoaXMubGlic0FuZFRhYmxlcyk7dGhpcy5ob3RVc2VyRGF0YXNldHM/LmNvbHVtbnMmJih0aGlzLmhvdFVzZXJEYXRh'@;
put 'c2V0cy5jb2x1bW5zWzBdLnNvdXJjZT1hKX1vbkZpbGVDaGFuZ2UoYSl7dmFyIGQ9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7Y29uc3QgaD1hPy50YXJnZXQ/LmZpbGVzfHxbXTtpZihoLmxlbmd0aDwxKXJldHVybiB2b2lkIGQuZXZlbnRTZXJ2aWNlLnNob3dBYm9ydE1vZGFsKG51bGws'@;
put 'Ik5vIGZpbGUgZm91bmQuIixudWxsLCJGaWxlIFVwbG9hZCIpO2xldCBmPSIiO2ZvcihsZXQgdiBvZiBoKXtjb25zdCBNPXYubmFtZS5zcGxpdCgiLiIpLnBvcCgpO2lmKGZ8fChmPU0pLGYhPT1NKXJldHVybiB2b2lkIGQuZXZlbnRTZXJ2aWNlLnNob3dJbmZvTW9kYWwoIk1peGVkIGV4dGVu'@;
put 'c2lvbnMgZXJyb3IiLCJQbGVhc2Ugc2VsZWN0IGZpbGVzIHdpdGggc2FtZSBleHRlbnNpb24uIik7Zj1NfWlmKFsieGxzeCIsInhsc20iLCJ4bG0iXS5pbmNsdWRlcyhmKSlkLnNlbGVjdGVkRmlsZT1hLnRhcmdldC5maWxlc1swXSxkLnNlbGVjdGVkRmlsZSYmKGQuZmlsZUxvYWRpbmdTdGF0'@;
put 'ZT14dy5yZWFkaW5nLGQuc2VsZWN0ZWRGaWxlLnNpemVNQj1kLnNwcmVhZHNoZWV0U2VydmljZS5ieXRlc1RvTUIoZC5zZWxlY3RlZEZpbGUuc2l6ZSksZC5zcHJlYWRzaGVldFNlcnZpY2UueGxzeFJlYWRGaWxlKGQuc2VsZWN0ZWRGaWxlKS50aGVuKHY9PntkLmZpbGVMb2FkaW5nU3RhdGU9'@;
put 'eHcucGFyc2luZyxkLnNlbGVjdGVkRmlsZS53b3JrYm9vaz12fSkpLGQuaW5pdFVzZXJJbnB1dEhvdCgpLGQub25BdXRvRGV0ZWN0Q29sdW1ucygpO2Vsc2V7aWYoImNzdiIhPT1mKXJldHVybiB2b2lkIGQuZXZlbnRTZXJ2aWNlLnNob3dBYm9ydE1vZGFsKG51bGwsIk9ubHkgZXhjZWwgZXh0'@;
put 'ZW5zaW9ucyBhcmUgYWxsb3dlZC4gKHhsc3gpIixudWxsLCJFeHRlbnNpb24gRXJyb3IiKTtkLm9uTXVsdGlDc3ZGaWxlcyhhLnRhcmdldC5maWxlcyl9YS50YXJnZXQudmFsdWU9IiJ9KSgpfW9uTXVsdGlDc3ZGaWxlcyhhKXt2YXIgZD10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXtmb3Io'@;
put 'bGV0IGggb2YgYSl7Y29uc3QgZj1kLnBhcnNlRGF0YXNldEZyb21Dc3ZOYW1lKGgubmFtZSk7ZC5pc1ZhbGlkRGF0YXNldEZvcm1hdChmKSYmZC5pc1ZhbGlkRGF0YXNldFJlZmVyZW5jZShmKSYmZC5jc3ZGaWxlcy5wdXNoKHtmaWxlOmgsZmlsZU5hbWU6aC5uYW1lfSl9ZC5jc3ZGaWxlcy5s'@;
put 'ZW5ndGg/KGQuY3N2U3VibWl0dGluZz0hMCx5aWVsZCBkLnN1Ym1pdENzdkZpbGVzKCksZC5jc3ZTdWJtaXR0aW5nPSExKTpkLmV2ZW50U2VydmljZS5zaG93SW5mb01vZGFsKCJDU1YgVXBsb2FkIiwiTm9uZSBvZiB0aGUgYXR0YWNoZWQgQ1NWIGZpbGUgbmFtZXMgbWF0Y2hlZCBhbiBhY3R1'@;
put 'YWwgZGF0YXNldC4iKX0pKCl9b25EaXNjYXJkRmlsZSgpe3RoaXMuc2VsZWN0ZWRGaWxlPW51bGwsdGhpcy51c2VySW5wdXREYXRhc2V0cz0iIn1vblN0YXJ0UGFyc2luZ0ZpbGUoKXt2YXIgYT10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXthLnVwbG9hZExvYWRpbmc9ITA7Y29uc3QgZD1b'@;
put 'XTtsZXQgaD1bXTtmb3IobGV0IGYgb2YgYS5tYXRjaGVkRGF0YXNldHMpe2NvbnN0IHY9YS5mZXRjaERhdGFzZXQoZik7ZC5wdXNoKHYpfVByb21pc2UuYWxsU2V0dGxlZChkKS50aGVuKGY9PntmLmZvckVhY2goTT0+eyJmdWxmaWxsZWQiPT09TS5zdGF0dXMmJk0udmFsdWUmJmgucHVzaChN'@;
put 'LnZhbHVlKX0pLGEudXBsb2FkTG9hZGluZz0hMSxhLmJ1aWxkRGF0YXNldHNPYmplY3RzKGgpLmZvckVhY2goTT0+e2EucGFyc2VkRGF0YXNldHMucHVzaCh7bGliZHM6TS5saWJkcyxpbmNsdWRlSW5TdWJtaXNzaW9uOiEwLGRhdGFzZXRJbmZvOk0scGFyc2luZ1RhYmxlOiEwfSl9KSxhLndv'@;
put 'cmtib29rTG9hZGVkKCkudGhlbihNPT57Zm9yKGxldCBEIG9mIGEucGFyc2VkRGF0YXNldHMpYS5zcHJlYWRzaGVldFNlcnZpY2UucGFyc2VFeGNlbEZpbGUoe2ZpbGU6YS5zZWxlY3RlZEZpbGUsd29ya2Jvb2s6TSxwYXNzd29yZDphLnNlbGVjdGVkRmlsZS5wYXNzd29yZHx8dm9pZCAwLGRj'@;
put 'VmFsaWRhdG9yOkQuZGF0YXNldEluZm8uZGNWYWxpZGF0b3IsaGVhZGVyUGtzOkQuZGF0YXNldEluZm8uaGVhZGVyUGtzLGhlYWRlckFycmF5OkQuZGF0YXNldEluZm8uaGVhZGVyQXJyYXksaGVhZGVyU2hvdzpbXSx0aW1lSGVhZGVyczpELmRhdGFzZXRJbmZvLnRpbWVIZWFkZXJzLGRhdGVI'@;
put 'ZWFkZXJzOkQuZGF0YXNldEluZm8uZGF0ZUhlYWRlcnMsZGF0ZVRpbWVIZWFkZXJzOkQuZGF0YXNldEluZm8uZGF0ZVRpbWVIZWFkZXJzLHhsUnVsZXM6RC5kYXRhc2V0SW5mby54bFJ1bGVzfSkudGhlbihaPT57aWYoYS5maWxlTG9hZGluZ1N0YXRlPXh3LnBhcnNlZCxaJiZaLmRhdGEpe2xl'@;
put 'dCByZT1bXTtaLmRhdGEubWFwKGNlPT57bGV0IGJlPXt9O1ouaGVhZGVyU2hvdy5tYXAoKEVlLEJlKT0+e2JlW0VlXT1jZVtCZV19KSxiZS5fX19fX0RFTEVURV9fVEhJU19fUkVDT1JEX19fX198fChiZS5fX19fX0RFTEVURV9fVEhJU19fUkVDT1JEX19fX189Ik5vIikscmUucHVzaChiZSl9'@;
put 'KSxELmRhdGFzb3VyY2U9cmUsRC5wYXJzZVJlc3VsdD1aLEQucGFyc2luZ1RhYmxlPSExfX0pLmNhdGNoKFo9Pntjb25zb2xlLndhcm4oIlBhcnNpbmcgZXhjZWwgZmlsZSBlcnJvci4iLFopLEQuZGF0YXNvdXJjZT1bXSxELmluY2x1ZGVJblN1Ym1pc3Npb249ITEsRC5wYXJzaW5nVGFibGU9'@;
put 'ITF9KX0pfSl9KSgpfW9uU3VibWl0QWxsKCl7dGhpcy50YWJsZXNUb1N1Ym1pdC5sZW5ndGg/dGhpcy5zaG93U3VibWl0UmVhc29uTW9kYWw9ITA6dGhpcy5ldmVudFNlcnZpY2Uuc2hvd0luZm9Nb2RhbCgiTm8gdGFibGVzIHRvIHN1Ym1pdCIsIlBsZWFzZSBpbmNsdWRlIGF0IGxlYXN0IG9u'@;
put 'ZSB0YWJsZSB0byBwcm9jZWVkLiIpfW9uRGlzY2FyZCgpe3RoaXMucGFyc2VkRGF0YXNldHM9W10sdGhpcy5tYXRjaGVkRGF0YXNldHM9W10sdGhpcy5zZWxlY3RlZEZpbGU9bnVsbCx0aGlzLnVzZXJJbnB1dERhdGFzZXRzPSIiLHRoaXMuc3VibWl0UmVhc29uTWVzc2FnZT0iIn1pbml0SG90'@;
put 'KCl7c2V0VGltZW91dCgoKT0+e3RoaXMuaG90SW5zdGFuY2U9dGhpcy5ob3RSZWdpc3RlcmVyLmdldEluc3RhbmNlKCJob3RJbnN0YW5jZSIpO2NvbnN0IGQ9dGhpcy5jb250ZW50QXJlYVJlZi5uYXRpdmVFbGVtZW50LmNsaWVudEhlaWdodC0xNjArInB4Ijt0aGlzLmFjdGl2ZVBhcnNlZERh'@;
put 'dGFzZXQmJnRoaXMuaG90SW5zdGFuY2UudXBkYXRlU2V0dGluZ3Moe2RhdGE6dGhpcy5hY3RpdmVQYXJzZWREYXRhc2V0LmRhdGFzb3VyY2V8fFtdLGNvbEhlYWRlcnM6dGhpcy5hY3RpdmVQYXJzZWREYXRhc2V0LmRhdGFzZXRJbmZvLmhlYWRlckNvbHVtbnMsY29sdW1uczp0aGlzLmFjdGl2'@;
put 'ZVBhcnNlZERhdGFzZXQuZGF0YXNldEluZm8uZGNWYWxpZGF0b3I/LmdldFJ1bGVzKCkscmVhZE9ubHk6ITAsaGVpZ2h0OmR8fCIzMDBweCIsY2xhc3NOYW1lOiJodERhcmsifSl9KX1pbml0VXNlcklucHV0SG90KCl7dmFyIGE9dGhpcztzZXRUaW1lb3V0KCgpPT57dGhpcy5ob3RJbnN0YW5j'@;
put 'ZVVzZXJEYXRhc2V0PXRoaXMuaG90UmVnaXN0ZXJlci5nZXRJbnN0YW5jZSgiaG90SW5zdGFuY2VVc2VyRGF0YXNldCIpLHRoaXMuaG90SW5zdGFuY2VVc2VyRGF0YXNldC5hZGRIb29rKCJiZWZvcmVDaGFuZ2UiLChkLGgpPT57aWYoZClmb3IobGV0IGYgb2YgZClmJiZmWzNdJiYoZlszXT1m'@;
put 'WzNdLnRvVXBwZXJDYXNlKCkpfSksdGhpcy5ob3RJbnN0YW5jZVVzZXJEYXRhc2V0LmFkZEhvb2soImFmdGVyQ2hhbmdlIixmdW5jdGlvbigpe3ZhciBkPWVlKGZ1bmN0aW9uKihoLGYpe2lmKGgpeyJlZGl0Ij09PWYmJih5aWVsZCBhLm9uVXNlcklucHV0RGF0YXNldHNDaGFuZ2UoKSk7Zm9y'@;
put 'KGxldCB2IG9mIGgpYS5tYXJrVW5tYXRjaGVkUm93cyh2WzBdKTthLmR5bmFtaWNDZWxsVmFsaWRhdGlvbnMoKSxhLmhvdEluc3RhbmNlVXNlckRhdGFzZXQucmVuZGVyKCl9fSk7cmV0dXJuIGZ1bmN0aW9uKGgsZil7cmV0dXJuIGQuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0oKSksdGhpcy5o'@;
put 'b3RJbnN0YW5jZVVzZXJEYXRhc2V0LmFkZEhvb2soImFmdGVyUmVtb3ZlUm93IixmdW5jdGlvbigpe3ZhciBkPWVlKGZ1bmN0aW9uKihoLGYsdixNKXt5aWVsZCBhLm9uVXNlcklucHV0RGF0YXNldHNDaGFuZ2UoKTtmb3IobGV0IEQgb2YgdilhLm1hcmtVbm1hdGNoZWRSb3dzKEQpfSk7cmV0'@;
put 'dXJuIGZ1bmN0aW9uKGgsZix2LE0pe3JldHVybiBkLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KCkpfSl9ZHluYW1pY0NlbGxWYWxpZGF0aW9ucygpe3RoaXMuaG90SW5zdGFuY2VVc2VyRGF0YXNldC5nZXREYXRhKCkuZm9yRWFjaCgoZCxoKT0+e2NvbnN0IGY9ZFswXTtmJiZmLmxlbmd0aCYm'@;
put 'dGhpcy5ob3RJbnN0YW5jZVVzZXJEYXRhc2V0LnNldENlbGxNZXRhKGgsMSwic291cmNlIix0aGlzLmxpYnNBbmRUYWJsZXNbZl0pfSl9bWFya1VubWF0Y2hlZFJvd3MoYSl7Y29uc3QgZD10aGlzLmhvdEluc3RhbmNlVXNlckRhdGFzZXQuZ2V0RGF0YUF0Um93KGEpLGg9YCR7ZFswXX0uJHtk'@;
put 'WzFdfWAsZj10aGlzLmhvdEluc3RhbmNlVXNlckRhdGFzZXQuZ2V0Q2VsbE1ldGFBdFJvdyhhKTtkJiZkWzBdJiZkWzFdP3RoaXMubWF0Y2hlZERhdGFzZXRzLmluY2x1ZGVzKGgpP2YuZm9yRWFjaCh2PT57dGhpcy5ob3RJbnN0YW5jZVVzZXJEYXRhc2V0LnNldENlbGxNZXRhKGEsdi5jb2ws'@;
put 'ImNsYXNzTmFtZSIsIiIpfSk6Zi5mb3JFYWNoKHY9Pnt0aGlzLmhvdEluc3RhbmNlVXNlckRhdGFzZXQuc2V0Q2VsbE1ldGEoYSx2LmNvbCwiY2xhc3NOYW1lIiwibm90LW1hdGNoZWQiKX0pOmYuZm9yRWFjaCh2PT57dGhpcy5ob3RJbnN0YW5jZVVzZXJEYXRhc2V0LnNldENlbGxNZXRhKGEs'@;
put 'di5jb2wsImNsYXNzTmFtZSIsIiIpfSl9b25Vc2VySW5wdXREYXRhc2V0c0NoYW5nZSgpe3JldHVybiBuZXcgUHJvbWlzZSgoYSxkKT0+e3RoaXMuaGVscGVyU2VydmljZS5kZWJvdW5jZUNhbGwoMTAwLCgpPT57Y29uc3QgaD10aGlzLmdldERhdGFzZXRzRnJvbUhvdCgpO3RoaXMubWF0Y2hl'@;
put 'ZERhdGFzZXRzPVtdLGguZm9yRWFjaChmPT57Y29uc3Qgdj1mLnRyaW0oKTt0aGlzLmlzVmFsaWREYXRhc2V0Rm9ybWF0KHYpJiZ0aGlzLmlzVmFsaWREYXRhc2V0UmVmZXJlbmNlKHYpJiYhdGhpcy5tYXRjaGVkRGF0YXNldHMuaW5jbHVkZXModik/dGhpcy5tYXRjaGVkRGF0YXNldHMucHVz'@;
put 'aCh2KTpjb25zb2xlLndhcm4oYFNoZWV0IG5hbWU6ICR7dn0gaXMgbm90IGFuIGFjdHVhbCBkYXRhc2V0IHJlZmVyZW5jZS5gKX0pLHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKSxhKHZvaWQgMCl9KX0pfW9uQXV0b0RldGVjdENvbHVtbnMoKXt2YXIgYT10aGlzO3JldHVybiBlZShmdW5jdGlv'@;
put 'biooKXtsZXQgZD0hMTtpZih5aWVsZCBhLnBhcnNlRXhjZWxTaGVldE5hbWVzKCkudGhlbih2PT57YS5zaGVldE5hbWVzPXZ9KS5jYXRjaCh2PT57di5pbmNsdWRlcygicGFzc3dvcmQiKSYmKGQ9ITApfSksZClyZXR1cm4gYS5vbkRpc2NhcmRGaWxlKCksdm9pZCBhLmV2ZW50U2VydmljZS5z'@;
put 'aG93SW5mb01vZGFsKCJMb2NrZWQgZmlsZSIsIldlIGZhaWxlZCB0byB1bmxvY2sgdGhlIGZpbGUuIik7YS5zaGVldE5hbWVzJiYoYS5tYXRjaGVkRGF0YXNldHM9W10sYS51c2VySW5wdXREYXRhc2V0cz0iIixhLnNoZWV0TmFtZXMuZm9yRWFjaCgodixNKT0+e2NvbnN0IEQ9di50cmltKCk7'@;
put 'YS5pc1ZhbGlkRGF0YXNldEZvcm1hdChEKSYmYS5pc1ZhbGlkRGF0YXNldFJlZmVyZW5jZShEKT9hLm1hdGNoZWREYXRhc2V0cy5wdXNoKEQpOmNvbnNvbGUud2FybihgU2hlZXQgbmFtZTogJHtEfSBpcyBub3QgYW4gYWN0dWFsIGRhdGFzZXQgcmVmZXJlbmNlLmApfSkpLGEudXNlcklucHV0'@;
put 'RGF0YXNldHM9YS5tYXRjaGVkRGF0YXNldHMuam9pbigiXG4iKTtjb25zdCBoPWEubWF0Y2hlZERhdGFzZXRzLm1hcCh2PT5bdi5zcGxpdCgiLiIpWzBdLHYuc3BsaXQoIi4iKVsxXV0pLGY9YS5ob3RVc2VyRGF0YXNldHMuZGF0YS5sZW5ndGg7aWYoaC5sZW5ndGg8Zil7Y29uc3Qgdj1mLWgu'@;
put 'bGVuZ3RoO2ZvcihsZXQgTT0wO008djtNKyspaC5wdXNoKFsiIiwiIl0pfWEuaG90SW5zdGFuY2VVc2VyRGF0YXNldC51cGRhdGVEYXRhKGgpLGEuZHluYW1pY0NlbGxWYWxpZGF0aW9ucygpfSkoKX1vblBhcnNlZERhdGFzZXRDbGljayhhKXt0aGlzLmRlc2VsZWN0QWxsUGFyc2VkRGF0YXNl'@;
put 'dHMoKSxhLmFjdGl2ZT0hMCx0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCksdGhpcy5pbml0SG90KCl9b25TdWJtaXR0ZWRDc3ZEYXRhc2V0Q2xpY2soYSl7dGhpcy5kZXNlbGVjdEFsbFN1Ym1pdHRlZENzdkRhdGFzZXRzKCksYS5hY3RpdmU9ITB9Z2V0IGFjdGl2ZVBhcnNlZERhdGFzZXQoKXty'@;
put 'ZXR1cm4gdGhpcy5wYXJzZWREYXRhc2V0cy5maW5kKGE9PmEuYWN0aXZlKX1nZXQgYWN0aXZlU3VibWl0dGVkQ3N2RGF0YXNldCgpe3JldHVybiB0aGlzLnN1Ym1pdHRlZENzdkRhdGFzZXRzLmZpbmQoYT0+YS5hY3RpdmUpfWdldCBub3RGb3VuZERhdGFzZXRzKCl7cmV0dXJuIHRoaXMuZ2V0'@;
put 'RGF0YXNldHNGcm9tSG90KCkuZmlsdGVyKGQ9PiF0aGlzLm1hdGNoZWREYXRhc2V0cy5pbmNsdWRlcyhkLnRyaW0oKSkpLmZpbHRlcihkPT5kLmxlbmd0aCl9Z2V0IGlzSG90SGlkZGVuKCl7aWYoIXRoaXMuaG90SW5zdGFuY2UpcmV0dXJuITA7dHJ5e2NvbnN0IGE9dGhpcy5ob3RJbnN0YW5j'@;
put 'ZS5nZXRTZXR0aW5ncygpLmNsYXNzTmFtZTtyZXR1cm4hIWEmJmEuaW5jbHVkZXMoImh0Q3VzdG9tSGlkZGVuIil9Y2F0Y2h7cmV0dXJuITB9fWdldCB0YWJsZXNUb1N1Ym1pdCgpe3JldHVybiB0aGlzLnBhcnNlZERhdGFzZXRzLmZpbHRlcihhPT5hLmRhdGFzb3VyY2UmJmEucGFyc2VSZXN1'@;
put 'bHQmJmEuaW5jbHVkZUluU3VibWlzc2lvbil9Z2V0IHN1Ym1pdHRpbmdDc3YoKXtyZXR1cm4gdGhpcy5jc3ZGaWxlcy5sZW5ndGg+MH1nZXQgZXhjZWxzU3VibWl0dGVkKCl7cmV0dXJuISF0aGlzLnBhcnNlZERhdGFzZXRzLmZpbHRlcihhPT5hLnN1Ym1pdFJlc3VsdCkubGVuZ3RofWRvd25s'@;
put 'b2FkRmlsZShhKXt0aGlzLmhlbHBlclNlcnZpY2UuZG93bmxvYWRUZXh0RmlsZShgc3RhZ2VkYXRhLSR7dGhpcy5hY3RpdmVTdWJtaXR0ZWRDc3ZEYXRhc2V0Py5saWJkc30tbG9nYCxKU09OLnN0cmluZ2lmeShhKSl9c3VibWl0Q3N2RmlsZXMoKXt2YXIgYT10aGlzO3JldHVybiBlZShmdW5j'@;
put 'dGlvbiooKXtsZXQgZD1bXTtmb3IobGV0IGggb2YgYS5jc3ZGaWxlcyl7Y29uc3QgZj1hLnBhcnNlRGF0YXNldEZyb21Dc3ZOYW1lKGguZmlsZU5hbWUpO2xldCB2LE07eWllbGQgYS5zYXNTZXJ2aWNlLnVwbG9hZEZpbGUoInNlcnZpY2VzL2VkaXRvcnMvbG9hZGZpbGUiLFtoXSx7dGFibGU6'@;
put 'Zn0pLnRoZW4oRD0+e3R5cGVvZiBELmFkYXB0ZXJSZXNwb25zZS5zYXNqc0Fib3J0PCJ1Ij92PUQuYWRhcHRlclJlc3BvbnNlLnNhc2pzQWJvcnQ6TT1ELmFkYXB0ZXJSZXNwb25zZX0sRD0+e2NvbnNvbGUuZXJyb3IoImVyciIsRCksdj1ELmFkYXB0ZXJSZXNwb25zZX0pLGQucHVzaCh7c3Vj'@;
put 'Y2VzczpNLGVycm9yOnYsbGliZHM6Zn0pfWEuc3VibWl0dGVkQ3N2RGF0YXNldHM9ZH0pKCl9ZmV0Y2hEYXRhc2V0KGEpe3ZhciBkPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe2lmKGEpcmV0dXJuIGQuc2FzU3RvcmVTZXJ2aWNlLmNhbGxTZXJ2aWNlKHtMSUJEUzphLE9VVERFU1Q6IldF'@;
put 'QiJ9LCJTQVNDb250cm9sVGFibGUiLCJlZGl0b3JzL2dldGRhdGEiLGEpLnRoZW4oZj0+ZikuY2F0Y2goZj0+e2NvbnNvbGUud2FybihgRXJyb3IgZmV0Y2hpbmcgJHthfWAsZil9KX0pKCl9c3VibWl0VGFibGVzKGEpe3ZhciBkPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe2NvbnNvbGUu'@;
put 'aW5mbygiU3VibWl0dGluZyBtdWx0aXBsZSB0YWJsZXMiLGQucGFyc2VkRGF0YXNldHMpLGQuc3VibWl0TG9hZGluZz0hMDtmb3IobGV0IGggb2YgZC5wYXJzZWREYXRhc2V0cyl7aWYoIWgucGFyc2VSZXN1bHR8fCFoLmRhdGFzb3VyY2V8fCFoLmluY2x1ZGVJblN1Ym1pc3Npb258fGEmJiFh'@;
put 'LmluY2x1ZGVzKGgubGliZHMpKWNvbnRpbnVlO2xldCBmPXt9O2Quc3VibWl0UmVhc29uTWVzc2FnZT1kLnN1Ym1pdFJlYXNvbk1lc3NhZ2UucmVwbGFjZSgvXG4vZywiLiAiKSxmLkFDVElPTj0iTE9BRCIsZi5NRVNTQUdFPWQuc3VibWl0UmVhc29uTWVzc2FnZSxmLkxJQkRTPWgubGliZHM7'@;
put 'bGV0IHY9aC5kYXRhc291cmNlO2lmKHYpe3Y9di5tYXAoYmU9PntsZXQgRWU9YmUuX19fX19ERUxFVEVfX1RISVNfX1JFQ09SRF9fX19fO3JldHVybiBkZWxldGUgYmUuX19fX19ERUxFVEVfX1RISVNfX1JFQ09SRF9fX19fLGJlLl9fX19fREVMRVRFX19USElTX19SRUNPUkRfX19fXz1FZSxP'@;
put 'YmplY3Qua2V5cyhiZSkubWFwKEJlPT57Im51bWVyaWMiPT09aC5kYXRhc2V0SW5mby5kY1ZhbGlkYXRvcj8uZ2V0UnVsZShCZSk/LnR5cGUmJiIuIj09PWJlW0JlXSYmKGJlW0JlXT1udWxsKX0pLGJlfSk7Y29uc3QgTT12LnNsaWNlKDAsZC5saWNlbmNlU3RhdGUudmFsdWUuc3VibWl0X3Jv'@;
put 'd3NfbGltaXQpO2xldCBELFoscmU7eWllbGQgZC5zYXNTdG9yZVNlcnZpY2UudXBkYXRlVGFibGUoZixNLCJTQVNDb250cm9sVGFibGUiLCJlZGl0b3JzL3N0YWdlZGF0YSIsaC5kYXRhc2V0SW5mby5kYXRhLiRzYXNkYXRhLCEwLHtkZWJ1ZzohMH0pLnRoZW4oYmU9PntaPWJlLmFkYXB0ZXJS'@;
put 'ZXNwb25zZSxyZT1iZS5sb2d9KS5jYXRjaChiZT0+e2NvbnNvbGUuZXJyb3IoImVyciIsYmUpLEQ9YmUuYWRhcHRlclJlc3BvbnNlLHJlPWJlLmxvZ30pLGguc3VibWl0UmVzdWx0PXtzdWNjZXNzOlosZXJyb3I6RCxsb2c6cmUscGFyc2VSZXN1bHQ6aC5wYXJzZVJlc3VsdCxsaWJkczpoLmxp'@;
put 'YmRzfX19ZC5zaG93U3VibWl0UmVhc29uTW9kYWw9ITEsZC5zdWJtaXRMb2FkaW5nPSExLGQuZGVzZWxlY3RBbGxQYXJzZWREYXRhc2V0cygpfSkoKX1yZVN1Ym1pdFRhYmxlKGEpe3ZhciBkPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe3lpZWxkIGQuc3VibWl0VGFibGVzKFthLmxpYmRz'@;
put 'XSk7Y29uc3QgaD1kLnBhcnNlZERhdGFzZXRzLmZpbmQoZj0+Zi5saWJkcz09PWEubGliZHMpO2gmJihoLmFjdGl2ZT0hMCl9KSgpfXdvcmtib29rTG9hZGVkKCl7cmV0dXJuIG5ldyBQcm9taXNlKChhLGQpPT57dGhpcy5zZWxlY3RlZEZpbGV8fGQoIk5vIGZpbGUgc2VsZWN0ZWQiKSx0aGlz'@;
put 'Lndvcmtib29rSW50ZXJ2YWw9c2V0SW50ZXJ2YWwoKCk9Pnt0aGlzLnNlbGVjdGVkRmlsZS53b3JrYm9vayYmKGNsZWFySW50ZXJ2YWwodGhpcy53b3JrYm9va0ludGVydmFsKSxhKHRoaXMuc2VsZWN0ZWRGaWxlLndvcmtib29rKSl9LDUwMCl9KX1wYXJzZURhdGFzZXRGcm9tQ3N2TmFtZShh'@;
put 'KXtjb25zdCBkPWEuc3BsaXQoIi4iKTtyZXR1cm4gZC5wb3AoKSxkLmpvaW4oIi4iKX1nZXREYXRhc2V0c0Zyb21Ib3QoKXtyZXR1cm4gdGhpcy5ob3RJbnN0YW5jZVVzZXJEYXRhc2V0P3RoaXMuaG90SW5zdGFuY2VVc2VyRGF0YXNldC5nZXREYXRhKCkuZmlsdGVyKGQ9PmRbMF0/Lmxlbmd0'@;
put 'aCYmZFsxXT8ubGVuZ3RoKS5tYXAoZD0+ZD9gJHtkWzBdfS4ke2RbMV19YDoiIik6W119cGFyc2VFeGNlbFNoZWV0TmFtZXMoKXt2YXIgYT10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXtyZXR1cm4gbmV3IFByb21pc2UoKGQsaCk9PntpZighYS5zZWxlY3RlZEZpbGUpcmV0dXJuIGQoW10p'@;
put 'O2Euc3ByZWFkc2hlZXRTZXJ2aWNlLnBhcnNlRXhjZWxTaGVldE5hbWVzKGEuc2VsZWN0ZWRGaWxlKS50aGVuKGY9PihmLnBhc3N3b3JkJiYoYS5zZWxlY3RlZEZpbGUucGFzc3dvcmQ9Zi5wYXNzd29yZCksZChmLnNoZWV0TmFtZXMpKSkuY2F0Y2goZj0+aChmKSl9KX0pKCl9aXNWYWxpZERh'@;
put 'dGFzZXRGb3JtYXQoYSl7cmV0dXJuL15cd3sxLDh9XC5cd3sxLDMyfSQvZ2ltLnRlc3QoYSl9aXNWYWxpZERhdGFzZXRSZWZlcmVuY2UoYSl7Y29uc3QgZD1hLnNwbGl0KCIuIilbMF0saD1hLnNwbGl0KCIuIilbMV07cmV0dXJuISF0aGlzLmxpYnNBbmRUYWJsZXNbZF0/LmluY2x1ZGVzKGgp'@;
put 'fWJ1aWxkRGF0YXNldHNPYmplY3RzKGEpe2lmKCFhKXJldHVybltdO2NvbnN0IGQ9W107Zm9yKGxldCBoIG9mIGEpaWYoaC5kYXRhKXtjb25zdCBmPXsuLi5oLGhvdFRhYmxlOntkYXRhOmguZGF0YS5zYXNkYXRhLHNldHRpbmdzOnt9fSxjb2xzOltdLGhlYWRlckNvbHVtbnM6W10saGVhZGVy'@;
put 'UGtzOltdLGhlYWRlckFycmF5OltdLGRhdGVIZWFkZXJzOltdLHRpbWVIZWFkZXJzOltdLGRhdGVUaW1lSGVhZGVyczpbXSx4bFJ1bGVzOltdLGNvbHVtbkhlYWRlcjpbXX07Zi5jb2xzPWguZGF0YS5jb2xzLGYuaGVhZGVyQ29sdW1ucz1oLmRhdGEuc2FzcGFyYW1zWzBdLkNPTEhFQURFUlMu'@;
put 'c3BsaXQoIiwiKSxmLmhlYWRlclBrcz1oLmRhdGEuc2FzcGFyYW1zWzBdLlBLLnNwbGl0KCIgIiksLTEhPT1mLmhlYWRlckNvbHVtbnMuaW5kZXhPZigiX19fX19ERUxFVEVfX1RISVNfX1JFQ09SRF9fX19fIikmJihmLmhlYWRlckNvbHVtbnNbZi5oZWFkZXJDb2x1bW5zLmluZGV4T2YoIl9f'@;
put 'X19fREVMRVRFX19USElTX19SRUNPUkRfX19fXyIpXT0iRGVsZXRlPyIpLGYuaGVhZGVyQXJyYXk9Zi5oZWFkZXJDb2x1bW5zLnNsaWNlKDEpLCIiIT09aC5kYXRhLnNhc3BhcmFtc1swXS5EVFZBUlMmJihmLmRhdGVIZWFkZXJzPWguZGF0YS5zYXNwYXJhbXNbMF0uRFRWQVJTLnNwbGl0KCIg'@;
put 'IikpLCIiIT09aC5kYXRhLnNhc3BhcmFtc1swXS5UTVZBUlMmJihmLnRpbWVIZWFkZXJzPWguZGF0YS5zYXNwYXJhbXNbMF0uVE1WQVJTLnNwbGl0KCIgIikpLCIiIT09aC5kYXRhLnNhc3BhcmFtc1swXS5EVFRNVkFSUyYmKGYuZGF0ZVRpbWVIZWFkZXJzPWguZGF0YS5zYXNwYXJhbXNbMF0u'@;
put 'RFRUTVZBUlMuc3BsaXQoIiAiKSksaC5kYXRhLnhsX3J1bGVzLmxlbmd0aD4wJiYoZi54bFJ1bGVzPXRoaXMuaGVscGVyU2VydmljZS5kZWVwQ2xvbmUoaC5kYXRhLnhsX3J1bGVzKSksZi5kY1ZhbGlkYXRvcj1uZXcgQzZlKGguZGF0YS5zYXNwYXJhbXNbMF0saC5kYXRhLiRzYXNkYXRhLGgu'@;
put 'ZGF0YS5jb2xzLGguZGF0YS5kcXJ1bGVzLGguZGF0YS5kcWRhdGEpLGYuY29sdW1uSGVhZGVyPWguZGF0YS5zYXNwYXJhbXNbMF0uQ09MSEVBREVSUy5zcGxpdCgiLCIpLGQucHVzaChmKX1yZXR1cm4gZH1kZXNlbGVjdEFsbFBhcnNlZERhdGFzZXRzKCl7Zm9yKGxldCBhIG9mIHRoaXMucGFy'@;
put 'c2VkRGF0YXNldHMpYS5hY3RpdmU9ITF9ZGVzZWxlY3RBbGxTdWJtaXR0ZWRDc3ZEYXRhc2V0cygpe2ZvcihsZXQgYSBvZiB0aGlzLnN1Ym1pdHRlZENzdkRhdGFzZXRzKWEuYWN0aXZlPSExfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKEdlKHZj'@;
put 'KSxHZSh1MSksR2UoU3UpLEdlKGtoKSxHZShBNmUpLEdlKEJzKSxHZShFcykpfX1zdGF0aWN7dGhpcy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siYXBwLW11bHRpLWRhdGFzZXQiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGQsaCl7aWYoMSZkJiZxYShfdnQsNyksMiZkKXtsZXQg'@;
put 'ZjtDaShmPVNpKCkpJiYoaC5jb250ZW50QXJlYVJlZj1mLmZpcnN0KX19LGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGQsaCl7MiZkJiZUcigiY29udGVudC1jb250YWluZXIiLGguY29udGVudENvbnRhaW5lckNsYXNzKX0sZGVjbHM6MzcsdmFyczoxOCxjb25zdHM6W1siY29u'@;
put 'dGVudEFyZWEiLCIiXSxbImZpbGVVcGxvYWRJbnB1dCIsIiJdLFsiY2xhc3MiLCJteS0xMC1teC1hdXRvIHRleHQtY2VudGVyIiw0LCJuZ0lmIl0sWyJjbGFzcyIsInRleHQtY2VudGVyIG1iLTEwIiw0LCJuZ0lmIl0sWzQsIm5nSWYiXSxbMSwiY29udGVudC1hcmVhIl0sWzEsImNhcmQiLCJu'@;
put 'by1ib3JkZXJzIiwiaC0xMDAiLCJkLWZsZXgiLCJjbHItZmxleC1jb2x1bW4iXSxbMSwiaGVhZGVyLXJvdyIsImNsci1yb3ciLCJqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiIsImNsci1qdXN0aWZ5LWNvbnRlbnQtY2VudGVyIiwidy0xMDAiLCJtLTAiXSxbImNkcy10ZXh0Iiwic2VjdGlvbiJd'@;
put 'LFsiY2xhc3MiLCJuby10YWJsZS1zZWxlY3RlZCBwb2ludGVyLWV2ZW50cy1ub25lIiw0LCJuZ0lmIl0sWzMsImNsck1vZGFsT3BlbkNoYW5nZSIsImNsck1vZGFsT3BlbiIsImNsck1vZGFsQ2xvc2FibGUiXSxbMSwibW9kYWwtdGl0bGUiXSxbMSwibW9kYWwtYm9keSJdLFsiY2RzLXRleHQi'@;
put 'LCJib2R5IiwiY2xhc3MiLCJsaWNlbmNlLWxpbWl0LW5vdGljZSBtdC0wIG1iLTE1Iiw0LCJuZ0lmIl0sWzEsInRleHQtYXJlYS1mdWxsLXdpZHRoIl0sWyJmb3IiLCJmb3JtRmllbGRzXzgiLDEsIm1iLTUiLCJkLWJsb2NrIl0sWyJjbHJUZXh0YXJlYSIsIiIsInRhYmluZGV4IiwiMCIsInR5'@;
put 'cGUiLCJ0ZXh0IiwiaWQiLCJmb3JtRmllbGRzXzgiLDEsInN1Ym1pdC1yZWFzb24iLDMsIm5nTW9kZWxDaGFuZ2UiLCJuZ01vZGVsIl0sWyJjZHMtdGV4dCIsImNhcHRpb25fY2xlYW4iLDEsIm10LTEwIl0sWzEsIm1vZGFsLWZvb3RlciJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRu'@;
put 'LW91dGxpbmUiLDMsImNsaWNrIiwiZGlzYWJsZWQiXSxbInR5cGUiLCJidXR0b24iLCJpZCIsInN1Ym1pdC10YWJsZXMiLDEsImJ0biIsImJ0bi1wcmltYXJ5IiwzLCJjbGljayIsImNsckxvYWRpbmciXSxbMSwidGV4dC1jZW50ZXIiXSxbImNsck1lZGl1bSIsIiJdLFsiY2RzLXRleHQiLCJj'@;
put 'YXB0aW9uX2NsZWFuIiwxLCJtdC0xMCIsInRleHQtY2VudGVyIl0sWzEsIm15LTEwLW14LWF1dG8iLCJ0ZXh0LWNlbnRlciJdLFsxLCJ0ZXh0LWNlbnRlciIsIm1iLTEwIl0sWyJpZCIsImJyb3dzZS1maWxlIiwxLCJidG4iLCJidG4tcHJpbWFyeSIsImJ0bi1zbSIsMywiY2xpY2siLCJkaXNh'@;
put 'YmxlZCJdLFsiaGlkZGVuIiwiIiwiaWQiLCJmaWxlLXVwbG9hZCIsInR5cGUiLCJmaWxlIiwibXVsdGlwbGUiLCIiLDMsImNoYW5nZSJdLFsiY2RzLXRleHQiLCJjYXB0aW9uIiwxLCJtbC0xMCIsIm1iLTEwIl0sWzQsIm5nRm9yIiwibmdGb3JPZiJdLFsxLCJidG4iLCJidG4tZGFuZ2VyIiwi'@;
put 'YnRuLXNtIiwibXItMTAiLDMsImNsaWNrIl0sWyJpZCIsInN1Ym1pdC1hbGwiLDEsImJ0biIsImJ0bi1wcmltYXJ5IiwiYnRuLXNtIiwzLCJjbGljayJdLFsxLCJjbHItdHJlZW5vZGUtbGluayIsIndoaXRlc3BhY2Utbm93cmFwIiwiZC1mbGV4IiwiY2xyLWFsaWduLWl0ZW1zLWNlbnRlciIs'@;
put 'MywiY2xpY2siXSxbMSwibWwtNSJdLFsic3RhdHVzIiwiZGFuZ2VyIiwic2hhcGUiLCJleGNsYW1hdGlvbi1jaXJjbGUiLDQsIm5nSWYiXSxbInN0YXR1cyIsInN1Y2Nlc3MiLCJzaGFwZSIsImNoZWNrLWNpcmNsZSIsNCwibmdJZiJdLFsic3RhdHVzIiwiZGFuZ2VyIiwic2hhcGUiLCJleGNs'@;
put 'YW1hdGlvbi1jaXJjbGUiXSxbInN0YXR1cyIsInN1Y2Nlc3MiLCJzaGFwZSIsImNoZWNrLWNpcmNsZSJdLFsic2hhcGUiLCJ0YWJsZSIsNCwibmdJZiJdLFsic2hhcGUiLCJ0YWJsZSJdLFsiY2xyU21hbGwiLCIiLDQsIm5nSWYiXSxbImNsclNtYWxsIiwiIl0sWyJjZHMtdGV4dCIsImNhcHRp'@;
put 'b24iLDEsIm1sLTEwIiwibWItMTAiLCJtdC0xMCJdLFsxLCJjbHItdHJlZW5vZGUtbGluayIsIndoaXRlc3BhY2Utbm93cmFwIiwzLCJjbGljayJdLFsxLCJuby10YWJsZS1zZWxlY3RlZCIsInBvaW50ZXItZXZlbnRzLW5vbmUiXSxbInNoYXBlIiwidXBsb2FkLWNsb3VkIiwic2l6ZSIsIjQw'@;
put 'IiwxLCJpcy1pbmZvIiwiaWNvbi1kYy1maWxsIl0sWyJjZHMtdGV4dCIsInNlY3Rpb24iLDEsInRleHQtY2VudGVyIiwiY29sb3ItZ3JheSIsIm10LTEwIl0sWzEsImQtZmxleCIsImNsci1qdXN0aWZ5LWNvbnRlbnQtY2VudGVyIiwibXQtMTUiXSxbMSwiZGF0YXNldC1pbnB1dC13cmFwcGVy'@;
put 'Il0sWyJjZHMtdGV4dCIsInNlY29uZGFyeSByZWd1bGFyIiwxLCJtYi01Il0sWyJjbHJUb29sdGlwVHJpZ2dlciIsIiIsInNoYXBlIiwidHJhc2giLCJzdGF0dXMiLCJkYW5nZXIiLDEsIm1sLTUiLCJjdXJzb3ItcG9pbnRlciIsMywiY2xpY2siXSxbImNkcy10ZXh0Iiwic2Vjb25kYXJ5IHJl'@;
put 'Z3VsYXIiLDEsIm1iLTIwIl0sWyJjZHMtdGV4dCIsInNlY29uZGFyeSByZWd1bGFyIiwxLCJtYi0xNSJdLFsxLCJtYi01Il0sWyJob3RJZCIsImhvdEluc3RhbmNlVXNlckRhdGFzZXQiLCJpZCIsImhvdFRhYmxlVXNlckRhdGFzZXQiLCJzdHJldGNoSCIsImFsbCIsMSwibXQtMTUiLDMsImFm'@;
put 'dGVyR2V0Q29sSGVhZGVyIiwic2V0dGluZ3MiLCJsaWNlbnNlS2V5Il0sWzEsImRhdGFzZXQtc2VsZWN0aW9uLWFjdGlvbnMiLCJ0ZXh0LXJpZ2h0IiwibXQtMTAiXSxbImlkIiwiY29udGludWUtYnRuIiwxLCJidG4iLCJidG4tcHJpbWFyeSIsImJ0bi1zbSIsMywiY2xpY2siLCJkaXNhYmxl'@;
put 'ZCIsImNsckxvYWRpbmciXSxbInNoYXBlIiwicHJvY2Vzcy1vbi12bSIsInNpemUiLCI0MCIsMSwiaXMtaW5mbyIsImljb24tZGMtZmlsbCJdLFsic2hhcGUiLCJ3YXJuaW5nLXN0YW5kYXJkIiwic2l6ZSIsIjQwIiwxLCJpcy1pbmZvIiwiaWNvbi1kYy1maWxsIl0sWyJjbGFzcyIsImQtZmxl'@;
put 'eCBjbHItanVzdGlmeS1jb250ZW50LWJldHdlZW4gcC0xMCBtdC0xNSBzdWJtaXNzaW9uLXJlc3VsdHMiLDQsIm5nSWYiXSxbImNsYXNzIiwiZXJyb3ItZmllbGQgbXQtMTUiLDQsIm5nSWYiXSxbMSwiZC1mbGV4IiwiY2xyLWp1c3RpZnktY29udGVudC1iZXR3ZWVuIiwicC0xMCIsIm10LTE1'@;
put 'Il0sWyJjZHMtdGV4dCIsInNlY29uZGFyeSByZWd1bGFyIiwxLCJtYi0xMCJdLFsiY2RzLXRleHQiLCJzZWNvbmRhcnkgcmVndWxhciJdLFsiY2xyVG9vbHRpcFRyaWdnZXIiLCIiLDMsInJvdXRlckxpbmsiXSxbMywiY2xyUG9zaXRpb24iLCJjbHJTaXplIl0sWyJ0eXBlIiwiY2hlY2tib3gi'@;
put 'LCJjbHJUb2dnbGUiLCIiLCJuYW1lIiwib3B0aW9ucyIsInJlcXVpcmVkIiwiIiwidmFsdWUiLCJvcHRpb24xIiwzLCJuZ01vZGVsQ2hhbmdlIiwibmdNb2RlbCIsImRpc2FibGVkIl0sWyJjbGFzcyIsInRleHQtY2VudGVyIHctMTAwIiw0LCJuZ0lmIl0sWyJob3RJZCIsImhvdEluc3RhbmNl'@;
put 'IiwiaWQiLCJob3RUYWJsZSIsInN0cmV0Y2hIIiwiYWxsIiwxLCJtdC0xNSIsMywiYWZ0ZXJHZXRDb2xIZWFkZXIiLCJjbGFzc05hbWUiLCJsaWNlbnNlS2V5IiwibXVsdGlDb2x1bW5Tb3J0aW5nIiwidmlld3BvcnRSb3dSZW5kZXJpbmdPZmZzZXQiLCJtYW51YWxDb2x1bW5SZXNpemUiLCJm'@;
put 'aWx0ZXJzIl0sWzEsImQtZmxleCIsImNsci1qdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiIsInAtMTAiLCJtdC0xNSIsInN1Ym1pc3Npb24tcmVzdWx0cyJdLFsiY2xhc3MiLCJjb2xvci1ncmVlbiIsNCwibmdJZiJdLFsiY2xhc3MiLCJjb2xvci1yZWQiLDQsIm5nSWYiXSxbImNkcy10ZXh0Iiwi'@;
put 'c2Vjb25kYXJ5IHJlZ3VsYXIiLDQsIm5nSWYiXSxbImNsYXNzIiwiYnRuIGJ0bi1wcmltYXJ5IG10LTEwIiwzLCJjbHJMb2FkaW5nIiwiY2xpY2siLDQsIm5nSWYiXSxbMSwiYnRuIiwiYnRuLXByaW1hcnktb3V0bGluZSIsIm10LTEwIiwzLCJjbGljayJdLFsxLCJjb2xvci1ncmVlbiJdLFsx'@;
put 'LCJjb2xvci1yZWQiXSxbMSwiYnRuIiwiYnRuLXByaW1hcnkiLCJtdC0xMCIsMywiY2xpY2siLCJjbHJMb2FkaW5nIl0sWzEsImVycm9yLWZpZWxkIiwibXQtMTUiXSxbMSwibG9nLXdyYXBwZXIiXSxbImNsYXNzIiwiZC1mbGV4IGNsci1hbGlnbi1pdGVtcy1jZW50ZXIiLDQsIm5nSWYiXSxb'@;
put 'MSwiZC1mbGV4IiwiY2xyLWFsaWduLWl0ZW1zLWNlbnRlciJdLFsiY2xyU21hbGwiLCIiLDEsIm1sLTUiXSxbMSwidGV4dC1jZW50ZXIiLCJ3LTEwMCJdLFsxLCJzcGlubmVyLW1kIl0sWzEsImQtZmxleCIsImNsci1qdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiIsInAtMTAiXSxbImNkcy10ZXh0'@;
put 'IiwiYm9keSIsMSwibGljZW5jZS1saW1pdC1ub3RpY2UiLCJtdC0wIiwibWItMTUiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZCxoKXtpZigxJmQpe2NvbnN0IGY9TG4oKTtkZSgwLCJhcHAtc2lkZWJhciIpLGd0KDEsQ3Z0LDIsMCwiZGl2IiwyKSgyLFN2dCw1LDEsImRpdiIsMykoMyxGdnQsNiwy'@;
put 'LCJuZy1jb250YWluZXIiLDQpKDQsQnZ0LDUsMSwibmctY29udGFpbmVyIiw0KSxoZSgpLGRlKDUsImRpdiIsNSwwKSg3LCJkaXYiLDYpKDgsImRpdiIsNykoOSwicCIsOCksTGUoMTAsIk11bHRpIERhdGFzZXQgTG9hZCIpLGhlKCkoKSxndCgxMSxqdnQsNCwwLCJkaXYiLDkpKDEyLGhidCw1'@;
put 'LDQsIm5nLWNvbnRhaW5lciIsNCksaGUoKSgpLGRlKDEzLCJjbHItbW9kYWwiLDEwKSxnaSgiY2xyTW9kYWxPcGVuQ2hhbmdlIixmdW5jdGlvbihNKXtyZXR1cm4gd3QoZiksbWkoaC5zaG93U3VibWl0UmVhc29uTW9kYWwsTSl8fChoLnNob3dTdWJtaXRSZWFzb25Nb2RhbD1NKSxDdChNKX0p'@;
put 'LGRlKDE0LCJoMyIsMTEpLExlKDE1KSxoZSgpLGRlKDE2LCJkaXYiLDEyKSxndCgxNyxmYnQsMiwxLCJwIiwxMyksZGUoMTgsImRpdiIsMTQpKDE5LCJsYWJlbCIsMTUpLExlKDIwLCJNZXNzYWdlIiksaGUoKSxkZSgyMSwidGV4dGFyZWEiLDE2KSxnaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rp'@;
put 'b24oTSl7cmV0dXJuIHd0KGYpLG1pKGguc3VibWl0UmVhc29uTWVzc2FnZSxNKXx8KGguc3VibWl0UmVhc29uTWVzc2FnZT1NKSxDdChNKX0pLGhlKCkoKSxkZSgyMiwicCIsMTcpLExlKDIzLCIgVGFibGVzIHdpbGwgYmUgc2VudCBzZXF1ZW50aWFsbHksIGxvZ3Mgd2lsbCBiZSBhdmFpbGFi'@;
put 'bGUgYWZ0ZXIgYWxsIHRhYmxlcyBhcmUgc3VibWl0dGVkLiAiKSxoZSgpKCksZGUoMjQsImRpdiIsMTgpKDI1LCJidXR0b24iLDE5KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGYpLEN0KGguc2hvd1N1Ym1pdFJlYXNvbk1vZGFsPSExKX0pLExlKDI2LCIgQ2FuY2VsICIpLGhl'@;
put 'KCksZGUoMjcsImJ1dHRvbiIsMjApLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoZiksQ3QoaC5zdWJtaXRUYWJsZXMoKSl9KSxMZSgyOCwiIFN1Ym1pdCAiKSxoZSgpKCkoKSxkZSgyOSwiY2xyLW1vZGFsIiwxMCksZ2koImNsck1vZGFsT3BlbkNoYW5nZSIsZnVuY3Rpb24oTSl7'@;
put 'cmV0dXJuIHd0KGYpLG1pKGguY3N2U3VibWl0dGluZyxNKXx8KGguY3N2U3VibWl0dGluZz1NKSxDdChNKX0pLGRlKDMwLCJoMyIsMTEpLExlKDMxKSxoZSgpLGRlKDMyLCJkaXYiLDEyKSgzMywiZGl2IiwyMSksR3QoMzQsImNsci1zcGlubmVyIiwyMiksaGUoKSxkZSgzNSwicCIsMjMpLExl'@;
put 'KDM2LCIgVGhpcyB3aWxsIHRha2UgZmV3IG1vbWVudHMgIiksaGUoKSgpKCl9MiZkJiYoZmUoKSxNZSgibmdJZiIsaC5kYXRhc2V0c0xvYWRpbmcpLGZlKCksTWUoIm5nSWYiLCFoLnBhcnNlZERhdGFzZXRzLmxlbmd0aCksZmUoKSxNZSgibmdJZiIsaC5wYXJzZWREYXRhc2V0cy5sZW5ndGgm'@;
put 'JiFoLnN1Ym1pdHRlZENzdkRhdGFzZXRzLmxlbmd0aCksZmUoKSxNZSgibmdJZiIsaC5zdWJtaXR0ZWRDc3ZEYXRhc2V0cy5sZW5ndGgpLGZlKDcpLE1lKCJuZ0lmIixudWxsPT09aC5zZWxlY3RlZEZpbGUmJiFoLnN1Ym1pdHRpbmdDc3YpLGZlKCksTWUoIm5nSWYiLG51bGwhPT1oLnNlbGVj'@;
put 'dGVkRmlsZXx8aC5zdWJtaXR0aW5nQ3N2KSxmZSgpLHBpKCJjbHJNb2RhbE9wZW4iLGguc2hvd1N1Ym1pdFJlYXNvbk1vZGFsKSxNZSgiY2xyTW9kYWxDbG9zYWJsZSIsITEpLGZlKDIpLFV1KCIgU3VibWl0ICIsaC50YWJsZXNUb1N1Ym1pdC5sZW5ndGgsIiAiLDE9PT1oLnRhYmxlc1RvU3Vi'@;
put 'bWl0Lmxlbmd0aD8idGFibGUiOiJ0YWJsZXMiLCIgZm9yIGFwcHJvdmFsICIpLGZlKDIpLE1lKCJuZ0lmIixoLmxpY2VuY2VTdGF0ZS52YWx1ZS5zdWJtaXRfcm93c19saW1pdCE9PWguSW5maW5pdHkpLGZlKDQpLHBpKCJuZ01vZGVsIixoLnN1Ym1pdFJlYXNvbk1lc3NhZ2UpLGZlKDQpLE1l'@;
put 'KCJkaXNhYmxlZCIsaC5zdWJtaXRMb2FkaW5nKSxmZSgyKSxNZSgiY2xyTG9hZGluZyIsaC5zdWJtaXRMb2FkaW5nKSxmZSgyKSxwaSgiY2xyTW9kYWxPcGVuIixoLmNzdlN1Ym1pdHRpbmcpLE1lKCJjbHJNb2RhbENsb3NhYmxlIiwhMSksZmUoMiksVXUoIiBTdWJtaXR0aW5nICIsaC5jc3ZG'@;
put 'aWxlcy5sZW5ndGgsIiBDU1YgIiwxPT09aC5jc3ZGaWxlcy5sZW5ndGg/ImZpbGUiOiJmaWxlcyIsIiAiKSl9LGRlcGVuZGVuY2llczpbRF8sYzEscWwsTWQsbmwsb1ksJHMsRWgsUGQsZmcsSGwscnMsb3UsS3UsajAsUDIsZHMsakwsSWQsU2gsUUwsdjcseTcsYjcsUmQsaTQsbnMsYmEsZVpd'@;
put 'LGVuY2Fwc3VsYXRpb246Mn0pfX1yZXR1cm4gY30pKCl9XX1dO2xldCBnYnQ9KCgpPT57Y2xhc3MgY3tzdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1bW9kPWtpKHt0eXBlOmN9KX1zdGF0aWN7dGhpcy5cdTAyNzVp'@;
put 'bmo9QXIoe2ltcG9ydHM6W3pjLmZvckNoaWxkKHBidCksemNdfSl9fXJldHVybiBjfSkoKTtuTigpO2xldCBtYnQ9KCgpPT57Y2xhc3MgY3tzdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1bW9kPWtpKHt0eXBlOmN9'@;
put 'KX1zdGF0aWN7dGhpcy5cdTAyNzVpbmo9QXIoe2ltcG9ydHM6W285LGdidCxSYyx6MCxHOSxSYSx4QSxuZl19KX19cmV0dXJuIGN9KSgpO2NvbnN0IHZidD1be3BhdGg6IiIsY29tcG9uZW50OnU5dCxjaGlsZHJlbjpbe3BhdGg6IiIscGF0aE1hdGNoOiJmdWxsIixyZWRpcmVjdFRvOiJ0YWJs'@;
put 'ZXMifSx7cGF0aDoidGFibGVzIixjb21wb25lbnQ6Szl0fSx7cGF0aDoiZXhjZWwtbWFwcyIsbG9hZENoaWxkcmVuOigpPT52dnR9LHtwYXRoOiJtdWx0aS1sb2FkIixsb2FkQ2hpbGRyZW46KCk9Pm1idH1dfV07bGV0IGJidD0oKCk9PntjbGFzcyBje3N0YXRpY3t0aGlzLlx1MDI3NWZhYz1m'@;
put 'dW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVtb2Q9a2koe3R5cGU6Y30pfXN0YXRpY3t0aGlzLlx1MDI3NWluaj1Bcih7aW1wb3J0czpbemMuZm9yQ2hpbGQodmJ0KSx6Y119KX19cmV0dXJuIGN9KSgpLHlidD0oKCk9PntjbGFzcyBje3N0YXRpY3t0aGlz'@;
put 'Llx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVtb2Q9a2koe3R5cGU6Y30pfXN0YXRpY3t0aGlzLlx1MDI3NWluaj1Bcih7aW1wb3J0czpbYmJ0LFJjLHowLEc5LFJhLHhBLG5mXX0pfX1yZXR1cm4gY30pKCksdHRlPSgoKT0+e2NsYXNz'@;
put 'IGN7Y29uc3RydWN0b3IoYSxkKXt0aGlzLmxpY2VuY2VTZXJ2aWNlPWEsdGhpcy5yb3V0ZXI9ZH1jYW5BY3RpdmF0ZShhLGQpe3JldHVybiEhKHZvaWQgMCE9PWQ/LnJvb3QucXVlcnlQYXJhbXMuZm9yY2V8fGQ/LnVybC5pbmNsdWRlcygibGljZW5zaW5nL3VwZGF0ZSIpJiZ0aGlzLmxpY2Vu'@;
put 'Y2VTZXJ2aWNlLmlzQXBwQWN0aXZhdGVkfHxudWxsIT09dGhpcy5saWNlbmNlU2VydmljZS5pc0FwcEFjdGl2YXRlZC52YWx1ZSYmITE9PT10aGlzLmxpY2VuY2VTZXJ2aWNlLmlzQXBwQWN0aXZhdGVkLnZhbHVlKXx8KHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoIi9ob21lIiksITEpfWNh'@;
put 'bkRlYWN0aXZhdGUoYSxkLGgsZil7cmV0dXJuIShoPy51cmwuaW5jbHVkZXMoImxpY2Vuc2luZy9yZWdpc3RlciIpfHx0aGlzLmxpY2VuY2VTZXJ2aWNlLmFwcExvY2tlZC52YWx1ZSl9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoeHIodTEpLHhy'@;
put 'KExzKSl9fXN0YXRpY3t0aGlzLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pfX1yZXR1cm4gY30pKCk7bGV0IFM2PXthc3luYzohMSxiYXNlVXJsOm51bGwsYnJlYWtzOiExLGV4dGVuc2lvbnM6bnVsbCxnZm06ITAsaGVhZGVySWRzOiEwLGhlYWRlclByZWZp'@;
put 'eDoiIixoaWdobGlnaHQ6bnVsbCxob29rczpudWxsLGxhbmdQcmVmaXg6Imxhbmd1YWdlLSIsbWFuZ2xlOiEwLHBlZGFudGljOiExLHJlbmRlcmVyOm51bGwsc2FuaXRpemU6ITEsc2FuaXRpemVyOm51bGwsc2lsZW50OiExLHNtYXJ0eXBhbnRzOiExLHRva2VuaXplcjpudWxsLHdhbGtUb2tl'@;
put 'bnM6bnVsbCx4aHRtbDohMX07ZnVuY3Rpb24gajZlKGMpe1M2PWN9Y29uc3QgejZlPS9bJjw+IiddLyxfYnQ9bmV3IFJlZ0V4cCh6NmUuc291cmNlLCJnIiksVTZlPS9bPD4iJ118Jig/ISgjXGR7MSw3fXwjW1h4XVthLWZBLUYwLTldezEsNn18XHcrKTspLyx3YnQ9bmV3IFJlZ0V4cChVNmUu'@;
put 'c291cmNlLCJnIiksQ2J0PXsiJiI6IiZhbXA7IiwiPCI6IiZsdDsiLCI+IjoiJmd0OyIsJyInOiImcXVvdDsiLCInIjoiJiMzOTsifSxaNmU9Yz0+Q2J0W2NdO2Z1bmN0aW9uIHgxKGMsbCl7aWYobCl7aWYoejZlLnRlc3QoYykpcmV0dXJuIGMucmVwbGFjZShfYnQsWjZlKX1lbHNlIGlmKFU2'@;
put 'ZS50ZXN0KGMpKXJldHVybiBjLnJlcGxhY2Uod2J0LFo2ZSk7cmV0dXJuIGN9Y29uc3QgU2J0PS8mKCMoPzpcZCspfCg/OiN4WzAtOUEtRmEtZl0rKXwoPzpcdyspKTs/L2dpO2Z1bmN0aW9uIFc2ZShjKXtyZXR1cm4gYy5yZXBsYWNlKFNidCwobCxhKT0+ImNvbG9uIj09PShhPWEudG9Mb3dl'@;
put 'ckNhc2UoKSk/IjoiOiIjIj09PWEuY2hhckF0KDApPyJ4Ij09PWEuY2hhckF0KDEpP1N0cmluZy5mcm9tQ2hhckNvZGUocGFyc2VJbnQoYS5zdWJzdHJpbmcoMiksMTYpKTpTdHJpbmcuZnJvbUNoYXJDb2RlKCthLnN1YnN0cmluZygxKSk6IiIpfWNvbnN0IE1idD0vKF58W15cW10pXF4vZztm'@;
put 'dW5jdGlvbiBJbChjLGwpe2M9InN0cmluZyI9PXR5cGVvZiBjP2M6Yy5zb3VyY2UsbD1sfHwiIjtjb25zdCBhPXtyZXBsYWNlOihkLGgpPT4oaD0oaD1oLnNvdXJjZXx8aCkucmVwbGFjZShNYnQsIiQxIiksYz1jLnJlcGxhY2UoZCxoKSxhKSxnZXRSZWdleDooKT0+bmV3IFJlZ0V4cChjLGwp'@;
put 'fTtyZXR1cm4gYX1jb25zdCB4YnQ9L1teXHc6XS9nLEVidD0vXiR8XlthLXpdW2EtejAtOSsuLV0qOnxeWz8jXS9pO2Z1bmN0aW9uIFk2ZShjLGwsYSl7aWYoYyl7bGV0IGQ7dHJ5e2Q9ZGVjb2RlVVJJQ29tcG9uZW50KFc2ZShhKSkucmVwbGFjZSh4YnQsIiIpLnRvTG93ZXJDYXNlKCl9Y2F0'@;
put 'Y2h7cmV0dXJuIG51bGx9aWYoMD09PWQuaW5kZXhPZigiamF2YXNjcmlwdDoiKXx8MD09PWQuaW5kZXhPZigidmJzY3JpcHQ6Iil8fDA9PT1kLmluZGV4T2YoImRhdGE6IikpcmV0dXJuIG51bGx9bCYmIUVidC50ZXN0KGEpJiYoYT1mdW5jdGlvbiBEYnQoYyxsKXthTlsiICIrY118fChhTlsi'@;
put 'ICIrY109VGJ0LnRlc3QoYyk/YysiLyI6c04oYywiLyIsITApKTtjb25zdCBhPS0xPT09KGM9YU5bIiAiK2NdKS5pbmRleE9mKCI6Iik7cmV0dXJuIi8vIj09PWwuc3Vic3RyaW5nKDAsMik/YT9sOmMucmVwbGFjZShBYnQsIiQxIikrbDoiLyI9PT1sLmNoYXJBdCgwKT9hP2w6Yy5yZXBsYWNl'@;
put 'KGtidCwiJDEiKStsOmMrbH0obCxhKSk7dHJ5e2E9ZW5jb2RlVVJJKGEpLnJlcGxhY2UoLyUyNS9nLCIlIil9Y2F0Y2h7cmV0dXJuIG51bGx9cmV0dXJuIGF9Y29uc3QgYU49e30sVGJ0PS9eW146XSs6XC8qW14vXSokLyxBYnQ9L14oW146XSs6KVtcc1xTXSokLyxrYnQ9L14oW146XSs6XC8q'@;
put 'W14vXSopW1xzXFNdKiQvLG9OPXtleGVjOmZ1bmN0aW9uKCl7fX07ZnVuY3Rpb24gRzZlKGMsbCl7Y29uc3QgZD1jLnJlcGxhY2UoL1x8L2csKGYsdixNKT0+e2xldCBEPSExLFo9djtmb3IoOy0tWj49MCYmIlxcIj09PU1bWl07KUQ9IUQ7cmV0dXJuIEQ/InwiOiIgfCJ9KS5zcGxpdCgvIFx8'@;
put 'Lyk7bGV0IGg9MDtpZihkWzBdLnRyaW0oKXx8ZC5zaGlmdCgpLGQubGVuZ3RoPjAmJiFkW2QubGVuZ3RoLTFdLnRyaW0oKSYmZC5wb3AoKSxkLmxlbmd0aD5sKWQuc3BsaWNlKGwpO2Vsc2UgZm9yKDtkLmxlbmd0aDxsOylkLnB1c2goIiIpO2Zvcig7aDxkLmxlbmd0aDtoKyspZFtoXT1kW2hd'@;
put 'LnRyaW0oKS5yZXBsYWNlKC9cXFx8L2csInwiKTtyZXR1cm4gZH1mdW5jdGlvbiBzTihjLGwsYSl7Y29uc3QgZD1jLmxlbmd0aDtpZigwPT09ZClyZXR1cm4iIjtsZXQgaD0wO2Zvcig7aDxkOyl7Y29uc3QgZj1jLmNoYXJBdChkLWgtMSk7aWYoZiE9PWx8fGEpe2lmKGY9PT1sfHwhYSlicmVh'@;
put 'aztoKyt9ZWxzZSBoKyt9cmV0dXJuIGMuc2xpY2UoMCxkLWgpfWZ1bmN0aW9uICQ2ZShjLGwsYSxkKXtjb25zdCBoPWwuaHJlZixmPWwudGl0bGU/eDEobC50aXRsZSk6bnVsbCx2PWNbMV0ucmVwbGFjZSgvXFwoW1xbXF1dKS9nLCIkMSIpO2lmKCIhIiE9PWNbMF0uY2hhckF0KDApKXtkLnN0'@;
put 'YXRlLmluTGluaz0hMDtjb25zdCBNPXt0eXBlOiJsaW5rIixyYXc6YSxocmVmOmgsdGl0bGU6Zix0ZXh0OnYsdG9rZW5zOmQuaW5saW5lVG9rZW5zKHYpfTtyZXR1cm4gZC5zdGF0ZS5pbkxpbms9ITEsTX1yZXR1cm57dHlwZToiaW1hZ2UiLHJhdzphLGhyZWY6aCx0aXRsZTpmLHRleHQ6eDEo'@;
put 'dil9fWNsYXNzIGxOe2NvbnN0cnVjdG9yKGwpe3RoaXMub3B0aW9ucz1sfHxTNn1zcGFjZShsKXtjb25zdCBhPXRoaXMucnVsZXMuYmxvY2submV3bGluZS5leGVjKGwpO2lmKGEmJmFbMF0ubGVuZ3RoPjApcmV0dXJue3R5cGU6InNwYWNlIixyYXc6YVswXX19Y29kZShsKXtjb25zdCBhPXRo'@;
put 'aXMucnVsZXMuYmxvY2suY29kZS5leGVjKGwpO2lmKGEpe2NvbnN0IGQ9YVswXS5yZXBsYWNlKC9eIHsxLDR9L2dtLCIiKTtyZXR1cm57dHlwZToiY29kZSIscmF3OmFbMF0sY29kZUJsb2NrU3R5bGU6ImluZGVudGVkIix0ZXh0OnRoaXMub3B0aW9ucy5wZWRhbnRpYz9kOnNOKGQsIlxuIil9'@;
put 'fX1mZW5jZXMobCl7Y29uc3QgYT10aGlzLnJ1bGVzLmJsb2NrLmZlbmNlcy5leGVjKGwpO2lmKGEpe2NvbnN0IGQ9YVswXSxoPWZ1bmN0aW9uIExidChjLGwpe2NvbnN0IGE9Yy5tYXRjaCgvXihccyspKD86YGBgKS8pO2lmKG51bGw9PT1hKXJldHVybiBsO2NvbnN0IGQ9YVsxXTtyZXR1cm4g'@;
put 'bC5zcGxpdCgiXG4iKS5tYXAoaD0+e2NvbnN0IGY9aC5tYXRjaCgvXlxzKy8pO2lmKG51bGw9PT1mKXJldHVybiBoO2NvbnN0W3ZdPWY7cmV0dXJuIHYubGVuZ3RoPj1kLmxlbmd0aD9oLnNsaWNlKGQubGVuZ3RoKTpofSkuam9pbigiXG4iKX0oZCxhWzNdfHwiIik7cmV0dXJue3R5cGU6ImNv'@;
put 'ZGUiLHJhdzpkLGxhbmc6YVsyXT9hWzJdLnRyaW0oKS5yZXBsYWNlKHRoaXMucnVsZXMuaW5saW5lLl9lc2NhcGVzLCIkMSIpOmFbMl0sdGV4dDpofX19aGVhZGluZyhsKXtjb25zdCBhPXRoaXMucnVsZXMuYmxvY2suaGVhZGluZy5leGVjKGwpO2lmKGEpe2xldCBkPWFbMl0udHJpbSgpO2lm'@;
put 'KC8jJC8udGVzdChkKSl7Y29uc3QgaD1zTihkLCIjIik7KHRoaXMub3B0aW9ucy5wZWRhbnRpY3x8IWh8fC8gJC8udGVzdChoKSkmJihkPWgudHJpbSgpKX1yZXR1cm57dHlwZToiaGVhZGluZyIscmF3OmFbMF0sZGVwdGg6YVsxXS5sZW5ndGgsdGV4dDpkLHRva2Vuczp0aGlzLmxleGVyLmlu'@;
put 'bGluZShkKX19fWhyKGwpe2NvbnN0IGE9dGhpcy5ydWxlcy5ibG9jay5oci5leGVjKGwpO2lmKGEpcmV0dXJue3R5cGU6ImhyIixyYXc6YVswXX19YmxvY2txdW90ZShsKXtjb25zdCBhPXRoaXMucnVsZXMuYmxvY2suYmxvY2txdW90ZS5leGVjKGwpO2lmKGEpe2NvbnN0IGQ9YVswXS5yZXBs'@;
put 'YWNlKC9eICo+WyBcdF0/L2dtLCIiKSxoPXRoaXMubGV4ZXIuc3RhdGUudG9wO3RoaXMubGV4ZXIuc3RhdGUudG9wPSEwO2NvbnN0IGY9dGhpcy5sZXhlci5ibG9ja1Rva2VucyhkKTtyZXR1cm4gdGhpcy5sZXhlci5zdGF0ZS50b3A9aCx7dHlwZToiYmxvY2txdW90ZSIscmF3OmFbMF0sdG9r'@;
put 'ZW5zOmYsdGV4dDpkfX19bGlzdChsKXtsZXQgYT10aGlzLnJ1bGVzLmJsb2NrLmxpc3QuZXhlYyhsKTtpZihhKXtsZXQgZCxoLGYsdixNLEQsWixyZSxjZSxiZSxFZSxCZSxxZT1hWzFdLnRyaW0oKTtjb25zdCBydD1xZS5sZW5ndGg+MSxwdD17dHlwZToibGlzdCIscmF3OiIiLG9yZGVyZWQ6'@;
put 'cnQsc3RhcnQ6cnQ/K3FlLnNsaWNlKDAsLTEpOiIiLGxvb3NlOiExLGl0ZW1zOltdfTtxZT1ydD9gXFxkezEsOX1cXCR7cWUuc2xpY2UoLTEpfWA6YFxcJHtxZX1gLHRoaXMub3B0aW9ucy5wZWRhbnRpYyYmKHFlPXJ0P3FlOiJbKistXSIpO2NvbnN0IGR0PW5ldyBSZWdFeHAoYF4oIHswLDN9'@;
put 'JHtxZX0pKCg/OltcdCBdW15cXG5dKik/KD86XFxufCQpKWApO2Zvcig7bCYmKEJlPSExLChhPWR0LmV4ZWMobCkpJiYhdGhpcy5ydWxlcy5ibG9jay5oci50ZXN0KGwpKTspe2lmKGQ9YVswXSxsPWwuc3Vic3RyaW5nKGQubGVuZ3RoKSxyZT1hWzJdLnNwbGl0KCJcbiIsMSlbMF0ucmVwbGFj'@;
put 'ZSgvXlx0Ky8sdm49PiIgIi5yZXBlYXQoMyp2bi5sZW5ndGgpKSxjZT1sLnNwbGl0KCJcbiIsMSlbMF0sdGhpcy5vcHRpb25zLnBlZGFudGljPyh2PTIsRWU9cmUudHJpbUxlZnQoKSk6KHY9YVsyXS5zZWFyY2goL1teIF0vKSx2PXY+ND8xOnYsRWU9cmUuc2xpY2Uodiksdis9YVsxXS5sZW5n'@;
put 'dGgpLEQ9ITEsIXJlJiYvXiAqJC8udGVzdChjZSkmJihkKz1jZSsiXG4iLGw9bC5zdWJzdHJpbmcoY2UubGVuZ3RoKzEpLEJlPSEwKSwhQmUpe2NvbnN0IHZuPW5ldyBSZWdFeHAoYF4gezAsJHtNYXRoLm1pbigzLHYtMSl9fSg/OlsqKy1dfFxcZHsxLDl9Wy4pXSkoKD86WyBcdF1bXlxcbl0q'@;
put 'KT8oPzpcXG58JCkpYCksQ249bmV3IFJlZ0V4cChgXiB7MCwke01hdGgubWluKDMsdi0xKX19KCg/Oi0gKil7Myx9fCg/Ol8gKil7Myx9fCg/OlxcKiAqKXszLH0pKD86XFxuK3wkKWApLHRuPW5ldyBSZWdFeHAoYF4gezAsJHtNYXRoLm1pbigzLHYtMSl9fSg/OlxgXGBcYHx+fn4pYCksTW49'@;
put 'bmV3IFJlZ0V4cChgXiB7MCwke01hdGgubWluKDMsdi0xKX19I2ApO2Zvcig7bCYmKGJlPWwuc3BsaXQoIlxuIiwxKVswXSxjZT1iZSx0aGlzLm9wdGlvbnMucGVkYW50aWMmJihjZT1jZS5yZXBsYWNlKC9eIHsxLDR9KD89KCB7NH0pKlteIF0pL2csIiAgIikpLCEodG4udGVzdChjZSl8fE1u'@;
put 'LnRlc3QoY2UpfHx2bi50ZXN0KGNlKXx8Q24udGVzdChsKSkpOyl7aWYoY2Uuc2VhcmNoKC9bXiBdLyk+PXZ8fCFjZS50cmltKCkpRWUrPSJcbiIrY2Uuc2xpY2Uodik7ZWxzZXtpZihEfHxyZS5zZWFyY2goL1teIF0vKT49NHx8dG4udGVzdChyZSl8fE1uLnRlc3QocmUpfHxDbi50ZXN0KHJl'@;
put 'KSlicmVhaztFZSs9IlxuIitjZX0hRCYmIWNlLnRyaW0oKSYmKEQ9ITApLGQrPWJlKyJcbiIsbD1sLnN1YnN0cmluZyhiZS5sZW5ndGgrMSkscmU9Y2Uuc2xpY2Uodil9fXB0Lmxvb3NlfHwoWj9wdC5sb29zZT0hMDovXG4gKlxuICokLy50ZXN0KGQpJiYoWj0hMCkpLHRoaXMub3B0aW9ucy5n'@;
put 'Zm0mJihoPS9eXFtbIHhYXVxdIC8uZXhlYyhFZSksaCYmKGY9IlsgXSAiIT09aFswXSxFZT1FZS5yZXBsYWNlKC9eXFtbIHhYXVxdICsvLCIiKSkpLHB0Lml0ZW1zLnB1c2goe3R5cGU6Imxpc3RfaXRlbSIscmF3OmQsdGFzazohIWgsY2hlY2tlZDpmLGxvb3NlOiExLHRleHQ6RWV9KSxwdC5y'@;
put 'YXcrPWR9cHQuaXRlbXNbcHQuaXRlbXMubGVuZ3RoLTFdLnJhdz1kLnRyaW1SaWdodCgpLHB0Lml0ZW1zW3B0Lml0ZW1zLmxlbmd0aC0xXS50ZXh0PUVlLnRyaW1SaWdodCgpLHB0LnJhdz1wdC5yYXcudHJpbVJpZ2h0KCk7Y29uc3QgSnQ9cHQuaXRlbXMubGVuZ3RoO2ZvcihNPTA7TTxKdDtN'@;
put 'KyspaWYodGhpcy5sZXhlci5zdGF0ZS50b3A9ITEscHQuaXRlbXNbTV0udG9rZW5zPXRoaXMubGV4ZXIuYmxvY2tUb2tlbnMocHQuaXRlbXNbTV0udGV4dCxbXSksIXB0Lmxvb3NlKXtjb25zdCB2bj1wdC5pdGVtc1tNXS50b2tlbnMuZmlsdGVyKHRuPT4ic3BhY2UiPT09dG4udHlwZSksQ249'@;
put 'dm4ubGVuZ3RoPjAmJnZuLnNvbWUodG49Pi9cbi4qXG4vLnRlc3QodG4ucmF3KSk7cHQubG9vc2U9Q259aWYocHQubG9vc2UpZm9yKE09MDtNPEp0O00rKylwdC5pdGVtc1tNXS5sb29zZT0hMDtyZXR1cm4gcHR9fWh0bWwobCl7Y29uc3QgYT10aGlzLnJ1bGVzLmJsb2NrLmh0bWwuZXhlYyhs'@;
put 'KTtpZihhKXtjb25zdCBkPXt0eXBlOiJodG1sIixibG9jazohMCxyYXc6YVswXSxwcmU6IXRoaXMub3B0aW9ucy5zYW5pdGl6ZXImJigicHJlIj09PWFbMV18fCJzY3JpcHQiPT09YVsxXXx8InN0eWxlIj09PWFbMV0pLHRleHQ6YVswXX07aWYodGhpcy5vcHRpb25zLnNhbml0aXplKXtjb25z'@;
put 'dCBoPXRoaXMub3B0aW9ucy5zYW5pdGl6ZXI/dGhpcy5vcHRpb25zLnNhbml0aXplcihhWzBdKTp4MShhWzBdKTtkLnR5cGU9InBhcmFncmFwaCIsZC50ZXh0PWgsZC50b2tlbnM9dGhpcy5sZXhlci5pbmxpbmUoaCl9cmV0dXJuIGR9fWRlZihsKXtjb25zdCBhPXRoaXMucnVsZXMuYmxvY2su'@;
put 'ZGVmLmV4ZWMobCk7aWYoYSl7Y29uc3QgZD1hWzFdLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvXHMrL2csIiAiKSxoPWFbMl0/YVsyXS5yZXBsYWNlKC9ePCguKik+JC8sIiQxIikucmVwbGFjZSh0aGlzLnJ1bGVzLmlubGluZS5fZXNjYXBlcywiJDEiKToiIixmPWFbM10/YVszXS5zdWJzdHJp'@;
put 'bmcoMSxhWzNdLmxlbmd0aC0xKS5yZXBsYWNlKHRoaXMucnVsZXMuaW5saW5lLl9lc2NhcGVzLCIkMSIpOmFbM107cmV0dXJue3R5cGU6ImRlZiIsdGFnOmQscmF3OmFbMF0saHJlZjpoLHRpdGxlOmZ9fX10YWJsZShsKXtjb25zdCBhPXRoaXMucnVsZXMuYmxvY2sudGFibGUuZXhlYyhsKTtp'@;
put 'ZihhKXtjb25zdCBkPXt0eXBlOiJ0YWJsZSIsaGVhZGVyOkc2ZShhWzFdKS5tYXAoaD0+KHt0ZXh0Omh9KSksYWxpZ246YVsyXS5yZXBsYWNlKC9eICp8XHwgKiQvZywiIikuc3BsaXQoLyAqXHwgKi8pLHJvd3M6YVszXSYmYVszXS50cmltKCk/YVszXS5yZXBsYWNlKC9cblsgXHRdKiQvLCIi'@;
put 'KS5zcGxpdCgiXG4iKTpbXX07aWYoZC5oZWFkZXIubGVuZ3RoPT09ZC5hbGlnbi5sZW5ndGgpe2QucmF3PWFbMF07bGV0IGYsdixNLEQsaD1kLmFsaWduLmxlbmd0aDtmb3IoZj0wO2Y8aDtmKyspZC5hbGlnbltmXT0vXiAqLSs6ICokLy50ZXN0KGQuYWxpZ25bZl0pPyJyaWdodCI6L14gKjot'@;
put 'KzogKiQvLnRlc3QoZC5hbGlnbltmXSk/ImNlbnRlciI6L14gKjotKyAqJC8udGVzdChkLmFsaWduW2ZdKT8ibGVmdCI6bnVsbDtmb3IoaD1kLnJvd3MubGVuZ3RoLGY9MDtmPGg7ZisrKWQucm93c1tmXT1HNmUoZC5yb3dzW2ZdLGQuaGVhZGVyLmxlbmd0aCkubWFwKFo9Pih7dGV4dDpafSkp'@;
put 'O2ZvcihoPWQuaGVhZGVyLmxlbmd0aCx2PTA7djxoO3YrKylkLmhlYWRlclt2XS50b2tlbnM9dGhpcy5sZXhlci5pbmxpbmUoZC5oZWFkZXJbdl0udGV4dCk7Zm9yKGg9ZC5yb3dzLmxlbmd0aCx2PTA7djxoO3YrKylmb3IoRD1kLnJvd3Nbdl0sTT0wO008RC5sZW5ndGg7TSsrKURbTV0udG9r'@;
put 'ZW5zPXRoaXMubGV4ZXIuaW5saW5lKERbTV0udGV4dCk7cmV0dXJuIGR9fX1saGVhZGluZyhsKXtjb25zdCBhPXRoaXMucnVsZXMuYmxvY2subGhlYWRpbmcuZXhlYyhsKTtpZihhKXJldHVybnt0eXBlOiJoZWFkaW5nIixyYXc6YVswXSxkZXB0aDoiPSI9PT1hWzJdLmNoYXJBdCgwKT8xOjIs'@;
put 'dGV4dDphWzFdLHRva2Vuczp0aGlzLmxleGVyLmlubGluZShhWzFdKX19cGFyYWdyYXBoKGwpe2NvbnN0IGE9dGhpcy5ydWxlcy5ibG9jay5wYXJhZ3JhcGguZXhlYyhsKTtpZihhKXtjb25zdCBkPSJcbiI9PT1hWzFdLmNoYXJBdChhWzFdLmxlbmd0aC0xKT9hWzFdLnNsaWNlKDAsLTEpOmFb'@;
put 'MV07cmV0dXJue3R5cGU6InBhcmFncmFwaCIscmF3OmFbMF0sdGV4dDpkLHRva2Vuczp0aGlzLmxleGVyLmlubGluZShkKX19fXRleHQobCl7Y29uc3QgYT10aGlzLnJ1bGVzLmJsb2NrLnRleHQuZXhlYyhsKTtpZihhKXJldHVybnt0eXBlOiJ0ZXh0IixyYXc6YVswXSx0ZXh0OmFbMF0sdG9r'@;
put 'ZW5zOnRoaXMubGV4ZXIuaW5saW5lKGFbMF0pfX1lc2NhcGUobCl7Y29uc3QgYT10aGlzLnJ1bGVzLmlubGluZS5lc2NhcGUuZXhlYyhsKTtpZihhKXJldHVybnt0eXBlOiJlc2NhcGUiLHJhdzphWzBdLHRleHQ6eDEoYVsxXSl9fXRhZyhsKXtjb25zdCBhPXRoaXMucnVsZXMuaW5saW5lLnRh'@;
put 'Zy5leGVjKGwpO2lmKGEpcmV0dXJuIXRoaXMubGV4ZXIuc3RhdGUuaW5MaW5rJiYvXjxhIC9pLnRlc3QoYVswXSk/dGhpcy5sZXhlci5zdGF0ZS5pbkxpbms9ITA6dGhpcy5sZXhlci5zdGF0ZS5pbkxpbmsmJi9ePFwvYT4vaS50ZXN0KGFbMF0pJiYodGhpcy5sZXhlci5zdGF0ZS5pbkxpbms9'@;
put 'ITEpLCF0aGlzLmxleGVyLnN0YXRlLmluUmF3QmxvY2smJi9ePChwcmV8Y29kZXxrYmR8c2NyaXB0KShcc3w+KS9pLnRlc3QoYVswXSk/dGhpcy5sZXhlci5zdGF0ZS5pblJhd0Jsb2NrPSEwOnRoaXMubGV4ZXIuc3RhdGUuaW5SYXdCbG9jayYmL148XC8ocHJlfGNvZGV8a2JkfHNjcmlwdCko'@;
put 'XHN8PikvaS50ZXN0KGFbMF0pJiYodGhpcy5sZXhlci5zdGF0ZS5pblJhd0Jsb2NrPSExKSx7dHlwZTp0aGlzLm9wdGlvbnMuc2FuaXRpemU/InRleHQiOiJodG1sIixyYXc6YVswXSxpbkxpbms6dGhpcy5sZXhlci5zdGF0ZS5pbkxpbmssaW5SYXdCbG9jazp0aGlzLmxleGVyLnN0YXRlLmlu'@;
put 'UmF3QmxvY2ssYmxvY2s6ITEsdGV4dDp0aGlzLm9wdGlvbnMuc2FuaXRpemU/dGhpcy5vcHRpb25zLnNhbml0aXplcj90aGlzLm9wdGlvbnMuc2FuaXRpemVyKGFbMF0pOngxKGFbMF0pOmFbMF19fWxpbmsobCl7Y29uc3QgYT10aGlzLnJ1bGVzLmlubGluZS5saW5rLmV4ZWMobCk7aWYoYSl7'@;
put 'Y29uc3QgZD1hWzJdLnRyaW0oKTtpZighdGhpcy5vcHRpb25zLnBlZGFudGljJiYvXjwvLnRlc3QoZCkpe2lmKCEvPiQvLnRlc3QoZCkpcmV0dXJuO2NvbnN0IHY9c04oZC5zbGljZSgwLC0xKSwiXFwiKTtpZigoZC5sZW5ndGgtdi5sZW5ndGgpJTI9PTApcmV0dXJufWVsc2V7Y29uc3Qgdj1m'@;
put 'dW5jdGlvbiBJYnQoYyxsKXtpZigtMT09PWMuaW5kZXhPZihsWzFdKSlyZXR1cm4tMTtjb25zdCBhPWMubGVuZ3RoO2xldCBkPTAsaD0wO2Zvcig7aDxhO2grKylpZigiXFwiPT09Y1toXSloKys7ZWxzZSBpZihjW2hdPT09bFswXSlkKys7ZWxzZSBpZihjW2hdPT09bFsxXSYmKGQtLSxkPDAp'@;
put 'KXJldHVybiBoO3JldHVybi0xfShhWzJdLCIoKSIpO2lmKHY+LTEpe2NvbnN0IEQ9KDA9PT1hWzBdLmluZGV4T2YoIiEiKT81OjQpK2FbMV0ubGVuZ3RoK3Y7YVsyXT1hWzJdLnN1YnN0cmluZygwLHYpLGFbMF09YVswXS5zdWJzdHJpbmcoMCxEKS50cmltKCksYVszXT0iIn19bGV0IGg9YVsy'@;
put 'XSxmPSIiO2lmKHRoaXMub3B0aW9ucy5wZWRhbnRpYyl7Y29uc3Qgdj0vXihbXiciXSpbXlxzXSlccysoWyciXSkoLiopXDIvLmV4ZWMoaCk7diYmKGg9dlsxXSxmPXZbM10pfWVsc2UgZj1hWzNdP2FbM10uc2xpY2UoMSwtMSk6IiI7cmV0dXJuIGg9aC50cmltKCksL148Ly50ZXN0KGgpJiYo'@;
put 'aD10aGlzLm9wdGlvbnMucGVkYW50aWMmJiEvPiQvLnRlc3QoZCk/aC5zbGljZSgxKTpoLnNsaWNlKDEsLTEpKSwkNmUoYSx7aHJlZjpoJiZoLnJlcGxhY2UodGhpcy5ydWxlcy5pbmxpbmUuX2VzY2FwZXMsIiQxIiksdGl0bGU6ZiYmZi5yZXBsYWNlKHRoaXMucnVsZXMuaW5saW5lLl9lc2Nh'@;
put 'cGVzLCIkMSIpfSxhWzBdLHRoaXMubGV4ZXIpfX1yZWZsaW5rKGwsYSl7bGV0IGQ7aWYoKGQ9dGhpcy5ydWxlcy5pbmxpbmUucmVmbGluay5leGVjKGwpKXx8KGQ9dGhpcy5ydWxlcy5pbmxpbmUubm9saW5rLmV4ZWMobCkpKXtsZXQgaD0oZFsyXXx8ZFsxXSkucmVwbGFjZSgvXHMrL2csIiAi'@;
put 'KTtpZihoPWFbaC50b0xvd2VyQ2FzZSgpXSwhaCl7Y29uc3QgZj1kWzBdLmNoYXJBdCgwKTtyZXR1cm57dHlwZToidGV4dCIscmF3OmYsdGV4dDpmfX1yZXR1cm4gJDZlKGQsaCxkWzBdLHRoaXMubGV4ZXIpfX1lbVN0cm9uZyhsLGEsZD0iIil7bGV0IGg9dGhpcy5ydWxlcy5pbmxpbmUuZW1T'@;
put 'dHJvbmcubERlbGltLmV4ZWMobCk7aWYoISghaHx8aFszXSYmZC5tYXRjaCgvW1xwe0x9XHB7Tn1dL3UpKSYmKCFoWzFdJiYhaFsyXXx8IWR8fHRoaXMucnVsZXMuaW5saW5lLnB1bmN0dWF0aW9uLmV4ZWMoZCkpKXtjb25zdCB2PWhbMF0ubGVuZ3RoLTE7bGV0IE0sRCxaPXYscmU9MDtjb25z'@;
put 'dCBjZT0iKiI9PT1oWzBdWzBdP3RoaXMucnVsZXMuaW5saW5lLmVtU3Ryb25nLnJEZWxpbUFzdDp0aGlzLnJ1bGVzLmlubGluZS5lbVN0cm9uZy5yRGVsaW1VbmQ7Zm9yKGNlLmxhc3RJbmRleD0wLGE9YS5zbGljZSgtMSpsLmxlbmd0aCt2KTtudWxsIT0oaD1jZS5leGVjKGEpKTspe2lmKE09'@;
put 'aFsxXXx8aFsyXXx8aFszXXx8aFs0XXx8aFs1XXx8aFs2XSwhTSljb250aW51ZTtpZihEPU0ubGVuZ3RoLGhbM118fGhbNF0pe1orPUQ7Y29udGludWV9aWYoKGhbNV18fGhbNl0pJiZ2JTMmJiEoKHYrRCklMykpe3JlKz1EO2NvbnRpbnVlfWlmKFotPUQsWj4wKWNvbnRpbnVlO0Q9TWF0aC5t'@;
put 'aW4oRCxEK1orcmUpO2NvbnN0IGJlPWwuc2xpY2UoMCx2K2guaW5kZXgrRCsxKTtpZihNYXRoLm1pbih2LEQpJTIpe2NvbnN0IEJlPWJlLnNsaWNlKDEsLTEpO3JldHVybnt0eXBlOiJlbSIscmF3OmJlLHRleHQ6QmUsdG9rZW5zOnRoaXMubGV4ZXIuaW5saW5lVG9rZW5zKEJlKX19Y29uc3Qg'@;
put 'RWU9YmUuc2xpY2UoMiwtMik7cmV0dXJue3R5cGU6InN0cm9uZyIscmF3OmJlLHRleHQ6RWUsdG9rZW5zOnRoaXMubGV4ZXIuaW5saW5lVG9rZW5zKEVlKX19fX1jb2Rlc3BhbihsKXtjb25zdCBhPXRoaXMucnVsZXMuaW5saW5lLmNvZGUuZXhlYyhsKTtpZihhKXtsZXQgZD1hWzJdLnJlcGxh'@;
put 'Y2UoL1xuL2csIiAiKTtjb25zdCBoPS9bXiBdLy50ZXN0KGQpLGY9L14gLy50ZXN0KGQpJiYvICQvLnRlc3QoZCk7cmV0dXJuIGgmJmYmJihkPWQuc3Vic3RyaW5nKDEsZC5sZW5ndGgtMSkpLGQ9eDEoZCwhMCkse3R5cGU6ImNvZGVzcGFuIixyYXc6YVswXSx0ZXh0OmR9fX1icihsKXtjb25z'@;
put 'dCBhPXRoaXMucnVsZXMuaW5saW5lLmJyLmV4ZWMobCk7aWYoYSlyZXR1cm57dHlwZToiYnIiLHJhdzphWzBdfX1kZWwobCl7Y29uc3QgYT10aGlzLnJ1bGVzLmlubGluZS5kZWwuZXhlYyhsKTtpZihhKXJldHVybnt0eXBlOiJkZWwiLHJhdzphWzBdLHRleHQ6YVsyXSx0b2tlbnM6dGhpcy5s'@;
put 'ZXhlci5pbmxpbmVUb2tlbnMoYVsyXSl9fWF1dG9saW5rKGwsYSl7Y29uc3QgZD10aGlzLnJ1bGVzLmlubGluZS5hdXRvbGluay5leGVjKGwpO2lmKGQpe2xldCBoLGY7cmV0dXJuIkAiPT09ZFsyXT8oaD14MSh0aGlzLm9wdGlvbnMubWFuZ2xlP2EoZFsxXSk6ZFsxXSksZj0ibWFpbHRvOiIr'@;
put 'aCk6KGg9eDEoZFsxXSksZj1oKSx7dHlwZToibGluayIscmF3OmRbMF0sdGV4dDpoLGhyZWY6Zix0b2tlbnM6W3t0eXBlOiJ0ZXh0IixyYXc6aCx0ZXh0Omh9XX19fXVybChsLGEpe2xldCBkO2lmKGQ9dGhpcy5ydWxlcy5pbmxpbmUudXJsLmV4ZWMobCkpe2xldCBoLGY7aWYoIkAiPT09ZFsy'@;
put 'XSloPXgxKHRoaXMub3B0aW9ucy5tYW5nbGU/YShkWzBdKTpkWzBdKSxmPSJtYWlsdG86IitoO2Vsc2V7bGV0IHY7ZG97dj1kWzBdLGRbMF09dGhpcy5ydWxlcy5pbmxpbmUuX2JhY2twZWRhbC5leGVjKGRbMF0pWzBdfXdoaWxlKHYhPT1kWzBdKTtoPXgxKGRbMF0pLGY9Ind3dy4iPT09ZFsx'@;
put 'XT8iaHR0cDovLyIrZFswXTpkWzBdfXJldHVybnt0eXBlOiJsaW5rIixyYXc6ZFswXSx0ZXh0OmgsaHJlZjpmLHRva2Vuczpbe3R5cGU6InRleHQiLHJhdzpoLHRleHQ6aH1dfX19aW5saW5lVGV4dChsLGEpe2NvbnN0IGQ9dGhpcy5ydWxlcy5pbmxpbmUudGV4dC5leGVjKGwpO2lmKGQpe2xl'@;
put 'dCBoO3JldHVybiBoPXRoaXMubGV4ZXIuc3RhdGUuaW5SYXdCbG9jaz90aGlzLm9wdGlvbnMuc2FuaXRpemU/dGhpcy5vcHRpb25zLnNhbml0aXplcj90aGlzLm9wdGlvbnMuc2FuaXRpemVyKGRbMF0pOngxKGRbMF0pOmRbMF06eDEodGhpcy5vcHRpb25zLnNtYXJ0eXBhbnRzP2EoZFswXSk6'@;
put 'ZFswXSkse3R5cGU6InRleHQiLHJhdzpkWzBdLHRleHQ6aH19fX1jb25zdCBtbz17bmV3bGluZTovXig/OiAqKD86XG58JCkpKy8sY29kZTovXiggezR9W15cbl0rKD86XG4oPzogKig/OlxufCQpKSopPykrLyxmZW5jZXM6L14gezAsM30oYHszLH0oPz1bXmBcbl0qKD86XG58JCkpfH57Myx9'@;
put 'KShbXlxuXSopKD86XG58JCkoPzp8KFtcc1xTXSo/KSg/OlxufCQpKSg/OiB7MCwzfVwxW35gXSogKig/PVxufCQpfCQpLyxocjovXiB7MCwzfSgoPzotW1x0IF0qKXszLH18KD86X1sgXHRdKil7Myx9fCg/OlwqWyBcdF0qKXszLH0pKD86XG4rfCQpLyxoZWFkaW5nOi9eIHswLDN9KCN7MSw2'@;
put 'fSkoPz1cc3wkKSguKikoPzpcbit8JCkvLGJsb2NrcXVvdGU6L14oIHswLDN9PiA/KHBhcmFncmFwaHxbXlxuXSopKD86XG58JCkpKy8sbGlzdDovXiggezAsM31idWxsKShbIFx0XVteXG5dKz8pPyg/OlxufCQpLyxodG1sOiJeIHswLDN9KD86PChzY3JpcHR8cHJlfHN0eWxlfHRleHRhcmVh'@;
put 'KVtcXHM+XVtcXHNcXFNdKj8oPzo8L1xcMT5bXlxcbl0qXFxuK3wkKXxjb21tZW50W15cXG5dKihcXG4rfCQpfDxcXD9bXFxzXFxTXSo/KD86XFw/Plxcbip8JCl8PCFbQS1aXVtcXHNcXFNdKj8oPzo+XFxuKnwkKXw8IVxcW0NEQVRBXFxbW1xcc1xcU10qPyg/OlxcXVxcXT5cXG4qfCQpfDwv'@;
put 'Pyh0YWcpKD86ICt8XFxufC8/PilbXFxzXFxTXSo/KD86KD86XFxuICopK1xcbnwkKXw8KD8hc2NyaXB0fHByZXxzdHlsZXx0ZXh0YXJlYSkoW2Etel1bXFx3LV0qKSg/OmF0dHJpYnV0ZSkqPyAqLz8+KD89WyBcXHRdKig/OlxcbnwkKSlbXFxzXFxTXSo/KD86KD86XFxuICopK1xcbnwkKXw8'@;
put 'Lyg/IXNjcmlwdHxwcmV8c3R5bGV8dGV4dGFyZWEpW2Etel1bXFx3LV0qXFxzKj4oPz1bIFxcdF0qKD86XFxufCQpKVtcXHNcXFNdKj8oPzooPzpcXG4gKikrXFxufCQpKSIsZGVmOi9eIHswLDN9XFsobGFiZWwpXF06ICooPzpcbiAqKT8oW148XHNdW15cc10qfDwuKj8+KSg/Oig/OiArKD86'@;
put 'XG4gKik/fCAqXG4gKikodGl0bGUpKT8gKig/OlxuK3wkKS8sdGFibGU6b04sbGhlYWRpbmc6L14oKD86KD8hXmJ1bGwgKS58XG4oPyFcbnxidWxsICkpKz8pXG4gezAsM30oPSt8LSspICooPzpcbit8JCkvLF9wYXJhZ3JhcGg6L14oW15cbl0rKD86XG4oPyFocnxoZWFkaW5nfGxoZWFkaW5n'@;
put 'fGJsb2NrcXVvdGV8ZmVuY2VzfGxpc3R8aHRtbHx0YWJsZXwgK1xuKVteXG5dKykqKS8sdGV4dDovXlteXG5dKy8sX2xhYmVsOi8oPyFccypcXSkoPzpcXC58W15cW1xdXFxdKSsvLF90aXRsZTovKD86Iig/OlxcIj98W14iXFxdKSoifCdbXidcbl0qKD86XG5bXidcbl0rKSpcbj8nfFwoW14o'@;
put 'KV0qXCkpL307bW8uZGVmPUlsKG1vLmRlZikucmVwbGFjZSgibGFiZWwiLG1vLl9sYWJlbCkucmVwbGFjZSgidGl0bGUiLG1vLl90aXRsZSkuZ2V0UmVnZXgoKSxtby5idWxsZXQ9Lyg/OlsqKy1dfFxkezEsOX1bLildKS8sbW8ubGlzdEl0ZW1TdGFydD1JbCgvXiggKikoYnVsbCkgKi8pLnJl'@;
put 'cGxhY2UoImJ1bGwiLG1vLmJ1bGxldCkuZ2V0UmVnZXgoKSxtby5saXN0PUlsKG1vLmxpc3QpLnJlcGxhY2UoL2J1bGwvZyxtby5idWxsZXQpLnJlcGxhY2UoImhyIiwiXFxuKyg/PVxcMT8oPzooPzotICopezMsfXwoPzpfICopezMsfXwoPzpcXCogKil7Myx9KSg/Olxcbit8JCkpIikucmVw'@;
put 'bGFjZSgiZGVmIiwiXFxuKyg/PSIrbW8uZGVmLnNvdXJjZSsiKSIpLmdldFJlZ2V4KCksbW8uX3RhZz0iYWRkcmVzc3xhcnRpY2xlfGFzaWRlfGJhc2V8YmFzZWZvbnR8YmxvY2txdW90ZXxib2R5fGNhcHRpb258Y2VudGVyfGNvbHxjb2xncm91cHxkZHxkZXRhaWxzfGRpYWxvZ3xkaXJ8ZGl2'@;
put 'fGRsfGR0fGZpZWxkc2V0fGZpZ2NhcHRpb258ZmlndXJlfGZvb3Rlcnxmb3JtfGZyYW1lfGZyYW1lc2V0fGhbMS02XXxoZWFkfGhlYWRlcnxocnxodG1sfGlmcmFtZXxsZWdlbmR8bGl8bGlua3xtYWlufG1lbnV8bWVudWl0ZW18bWV0YXxuYXZ8bm9mcmFtZXN8b2x8b3B0Z3JvdXB8b3B0aW9u'@;
put 'fHB8cGFyYW18c2VjdGlvbnxzb3VyY2V8c3VtbWFyeXx0YWJsZXx0Ym9keXx0ZHx0Zm9vdHx0aHx0aGVhZHx0aXRsZXx0cnx0cmFja3x1bCIsbW8uX2NvbW1lbnQ9LzwhLS0oPyEtPz4pW1xzXFNdKj8oPzotLT58JCkvLG1vLmh0bWw9SWwobW8uaHRtbCwiaSIpLnJlcGxhY2UoImNvbW1lbnQi'@;
put 'LG1vLl9jb21tZW50KS5yZXBsYWNlKCJ0YWciLG1vLl90YWcpLnJlcGxhY2UoImF0dHJpYnV0ZSIsLyArW2EtekEtWjpfXVtcdy46LV0qKD86ICo9ICoiW14iXG5dKiJ8ICo9IConW14nXG5dKid8ICo9ICpbXlxzIic9PD5gXSspPy8pLmdldFJlZ2V4KCksbW8ubGhlYWRpbmc9SWwobW8ubGhl'@;
put 'YWRpbmcpLnJlcGxhY2UoL2J1bGwvZyxtby5idWxsZXQpLmdldFJlZ2V4KCksbW8ucGFyYWdyYXBoPUlsKG1vLl9wYXJhZ3JhcGgpLnJlcGxhY2UoImhyIixtby5ocikucmVwbGFjZSgiaGVhZGluZyIsIiB7MCwzfSN7MSw2fSAiKS5yZXBsYWNlKCJ8bGhlYWRpbmciLCIiKS5yZXBsYWNlKCJ8'@;
put 'dGFibGUiLCIiKS5yZXBsYWNlKCJibG9ja3F1b3RlIiwiIHswLDN9PiIpLnJlcGxhY2UoImZlbmNlcyIsIiB7MCwzfSg/OmB7Myx9KD89W15gXFxuXSpcXG4pfH57Myx9KVteXFxuXSpcXG4iKS5yZXBsYWNlKCJsaXN0IiwiIHswLDN9KD86WyorLV18MVsuKV0pICIpLnJlcGxhY2UoImh0bWwi'@;
put 'LCI8Lz8oPzp0YWcpKD86ICt8XFxufC8/Pil8PCg/OnNjcmlwdHxwcmV8c3R5bGV8dGV4dGFyZWF8IS0tKSIpLnJlcGxhY2UoInRhZyIsbW8uX3RhZykuZ2V0UmVnZXgoKSxtby5ibG9ja3F1b3RlPUlsKG1vLmJsb2NrcXVvdGUpLnJlcGxhY2UoInBhcmFncmFwaCIsbW8ucGFyYWdyYXBoKS5n'@;
put 'ZXRSZWdleCgpLG1vLm5vcm1hbD17Li4ubW99LG1vLmdmbT17Li4ubW8ubm9ybWFsLHRhYmxlOiJeICooW15cXG4gXS4qXFx8LiopXFxuIHswLDN9KD86XFx8ICopPyg6Py0rOj8gKig/OlxcfCAqOj8tKzo/ICopKikoPzpcXHwgKik/KD86XFxuKCg/Oig/ISAqXFxufGhyfGhlYWRpbmd8Ymxv'@;
put 'Y2txdW90ZXxjb2RlfGZlbmNlc3xsaXN0fGh0bWwpLiooPzpcXG58JCkpKilcXG4qfCQpIn0sbW8uZ2ZtLnRhYmxlPUlsKG1vLmdmbS50YWJsZSkucmVwbGFjZSgiaHIiLG1vLmhyKS5yZXBsYWNlKCJoZWFkaW5nIiwiIHswLDN9I3sxLDZ9ICIpLnJlcGxhY2UoImJsb2NrcXVvdGUiLCIgezAs'@;
put 'M30+IikucmVwbGFjZSgiY29kZSIsIiB7NH1bXlxcbl0iKS5yZXBsYWNlKCJmZW5jZXMiLCIgezAsM30oPzpgezMsfSg/PVteYFxcbl0qXFxuKXx+ezMsfSlbXlxcbl0qXFxuIikucmVwbGFjZSgibGlzdCIsIiB7MCwzfSg/OlsqKy1dfDFbLildKSAiKS5yZXBsYWNlKCJodG1sIiwiPC8/KD86'@;
put 'dGFnKSg/OiArfFxcbnwvPz4pfDwoPzpzY3JpcHR8cHJlfHN0eWxlfHRleHRhcmVhfCEtLSkiKS5yZXBsYWNlKCJ0YWciLG1vLl90YWcpLmdldFJlZ2V4KCksbW8uZ2ZtLnBhcmFncmFwaD1JbChtby5fcGFyYWdyYXBoKS5yZXBsYWNlKCJociIsbW8uaHIpLnJlcGxhY2UoImhlYWRpbmciLCIg'@;
put 'ezAsM30jezEsNn0gIikucmVwbGFjZSgifGxoZWFkaW5nIiwiIikucmVwbGFjZSgidGFibGUiLG1vLmdmbS50YWJsZSkucmVwbGFjZSgiYmxvY2txdW90ZSIsIiB7MCwzfT4iKS5yZXBsYWNlKCJmZW5jZXMiLCIgezAsM30oPzpgezMsfSg/PVteYFxcbl0qXFxuKXx+ezMsfSlbXlxcbl0qXFxu'@;
put 'IikucmVwbGFjZSgibGlzdCIsIiB7MCwzfSg/OlsqKy1dfDFbLildKSAiKS5yZXBsYWNlKCJodG1sIiwiPC8/KD86dGFnKSg/OiArfFxcbnwvPz4pfDwoPzpzY3JpcHR8cHJlfHN0eWxlfHRleHRhcmVhfCEtLSkiKS5yZXBsYWNlKCJ0YWciLG1vLl90YWcpLmdldFJlZ2V4KCksbW8ucGVkYW50'@;
put 'aWM9ey4uLm1vLm5vcm1hbCxodG1sOklsKCJeICooPzpjb21tZW50ICooPzpcXG58XFxzKiQpfDwodGFnKVtcXHNcXFNdKz88L1xcMT4gKig/OlxcbnsyLH18XFxzKiQpfDx0YWcoPzpcIlteXCJdKlwifCdbXiddKid8XFxzW14nXCIvPlxcc10qKSo/Lz8+ICooPzpcXG57Mix9fFxccyokKSki'@;
put 'KS5yZXBsYWNlKCJjb21tZW50Iixtby5fY29tbWVudCkucmVwbGFjZSgvdGFnL2csIig/ISg/OmF8ZW18c3Ryb25nfHNtYWxsfHN8Y2l0ZXxxfGRmbnxhYmJyfGRhdGF8dGltZXxjb2RlfHZhcnxzYW1wfGtiZHxzdWJ8c3VwfGl8Ynx1fG1hcmt8cnVieXxydHxycHxiZGl8YmRvfHNwYW58YnJ8'@;
put 'd2JyfGluc3xkZWx8aW1nKVxcYilcXHcrKD8hOnxbXlxcd1xcc0BdKkApXFxiIikuZ2V0UmVnZXgoKSxkZWY6L14gKlxbKFteXF1dKylcXTogKjw/KFteXHM+XSspPj8oPzogKyhbIihdW15cbl0rWyIpXSkpPyAqKD86XG4rfCQpLyxoZWFkaW5nOi9eKCN7MSw2fSkoLiopKD86XG4rfCQpLyxm'@;
put 'ZW5jZXM6b04sbGhlYWRpbmc6L14oLis/KVxuIHswLDN9KD0rfC0rKSAqKD86XG4rfCQpLyxwYXJhZ3JhcGg6SWwobW8ubm9ybWFsLl9wYXJhZ3JhcGgpLnJlcGxhY2UoImhyIixtby5ocikucmVwbGFjZSgiaGVhZGluZyIsIiAqI3sxLDZ9ICpbXlxuXSIpLnJlcGxhY2UoImxoZWFkaW5nIixt'@;
put 'by5saGVhZGluZykucmVwbGFjZSgiYmxvY2txdW90ZSIsIiB7MCwzfT4iKS5yZXBsYWNlKCJ8ZmVuY2VzIiwiIikucmVwbGFjZSgifGxpc3QiLCIiKS5yZXBsYWNlKCJ8aHRtbCIsIiIpLmdldFJlZ2V4KCl9O2NvbnN0IEFhPXtlc2NhcGU6L15cXChbISIjJCUmJygpKissXC0uLzo7PD0+P0Bc'@;
put 'W1xdXFxeX2B7fH1+XSkvLGF1dG9saW5rOi9ePChzY2hlbWU6W15cc1x4MDAtXHgxZjw+XSp8ZW1haWwpPi8sdXJsOm9OLHRhZzoiXmNvbW1lbnR8XjwvW2EtekEtWl1bXFx3Oi1dKlxccyo+fF48W2EtekEtWl1bXFx3LV0qKD86YXR0cmlidXRlKSo/XFxzKi8/PnxePFxcP1tcXHNcXFNdKj9c'@;
put 'XD8+fF48IVthLXpBLVpdK1xcc1tcXHNcXFNdKj8+fF48IVxcW0NEQVRBXFxbW1xcc1xcU10qP1xcXVxcXT4iLGxpbms6L14hP1xbKGxhYmVsKVxdXChccyooaHJlZikoPzpccysodGl0bGUpKT9ccypcKS8scmVmbGluazovXiE/XFsobGFiZWwpXF1cWyhyZWYpXF0vLG5vbGluazovXiE/XFso'@;
put 'cmVmKVxdKD86XFtcXSk/LyxyZWZsaW5rU2VhcmNoOiJyZWZsaW5rfG5vbGluayg/IVxcKCkiLGVtU3Ryb25nOntsRGVsaW06L14oPzpcKisoPzooKD8hXCopW3B1bmN0XSl8W15ccypdKSl8Xl8rKD86KCg/IV8pW3B1bmN0XSl8KFteXHNfXSkpLyxyRGVsaW1Bc3Q6L15bXl8qXSo/X19bXl8q'@;
put 'XSo/XCpbXl8qXSo/KD89X18pfFteKl0rKD89W14qXSl8KD8hXCopW3B1bmN0XShcKispKD89W1xzXXwkKXxbXnB1bmN0XHNdKFwqKykoPyFcKikoPz1bcHVuY3Rcc118JCl8KD8hXCopW3B1bmN0XHNdKFwqKykoPz1bXnB1bmN0XHNdKXxbXHNdKFwqKykoPyFcKikoPz1bcHVuY3RdKXwoPyFc'@;
put 'KilbcHVuY3RdKFwqKykoPyFcKikoPz1bcHVuY3RdKXxbXnB1bmN0XHNdKFwqKykoPz1bXnB1bmN0XHNdKS8sckRlbGltVW5kOi9eW15fKl0qP1wqXCpbXl8qXSo/X1teXypdKj8oPz1cKlwqKXxbXl9dKyg/PVteX10pfCg/IV8pW3B1bmN0XShfKykoPz1bXHNdfCQpfFtecHVuY3Rcc10oXysp'@;
put 'KD8hXykoPz1bcHVuY3Rcc118JCl8KD8hXylbcHVuY3Rcc10oXyspKD89W15wdW5jdFxzXSl8W1xzXShfKykoPyFfKSg/PVtwdW5jdF0pfCg/IV8pW3B1bmN0XShfKykoPyFfKSg/PVtwdW5jdF0pL30sY29kZTovXihgKykoW15gXXxbXmBdW1xzXFNdKj9bXmBdKVwxKD8hYCkvLGJyOi9eKCB7'@;
put 'Mix9fFxcKVxuKD8hXHMqJCkvLGRlbDpvTix0ZXh0Oi9eKGArfFteYF0pKD86KD89IHsyLH1cbil8W1xzXFNdKj8oPzooPz1bXFw8IVxbYCpfXXxcYl98JCl8W14gXSg/PSB7Mix9XG4pKSkvLHB1bmN0dWF0aW9uOi9eKCg/IVsqX10pW1xzcHVuY3R1YXRpb25dKS99O2Z1bmN0aW9uIE9idChj'@;
put 'KXtyZXR1cm4gYy5yZXBsYWNlKC8tLS0vZywiXHUyMDE0IikucmVwbGFjZSgvLS0vZywiXHUyMDEzIikucmVwbGFjZSgvKF58Wy1cdTIwMTQvKFxbeyJcc10pJy9nLCIkMVx1MjAxOCIpLnJlcGxhY2UoLycvZywiXHUyMDE5IikucmVwbGFjZSgvKF58Wy1cdTIwMTQvKFxbe1x1MjAxOFxzXSki'@;
put 'L2csIiQxXHUyMDFjIikucmVwbGFjZSgvIi9nLCJcdTIwMWQiKS5yZXBsYWNlKC9cLnszfS9nLCJcdTIwMjYiKX1mdW5jdGlvbiBLNmUoYyl7bGV0IGEsZCxsPSIiO2NvbnN0IGg9Yy5sZW5ndGg7Zm9yKGE9MDthPGg7YSsrKWQ9Yy5jaGFyQ29kZUF0KGEpLE1hdGgucmFuZG9tKCk+LjUmJihk'@;
put 'PSJ4IitkLnRvU3RyaW5nKDE2KSksbCs9IiYjIitkKyI7IjtyZXR1cm4gbH1BYS5fcHVuY3R1YXRpb249IlxccHtQfSQrPD0+YF58fiIsQWEucHVuY3R1YXRpb249SWwoQWEucHVuY3R1YXRpb24sInUiKS5yZXBsYWNlKC9wdW5jdHVhdGlvbi9nLEFhLl9wdW5jdHVhdGlvbikuZ2V0UmVnZXgo'@;
put 'KSxBYS5ibG9ja1NraXA9L1xbW15bXF1dKj9cXVwoW15cKFwpXSo/XCl8YFteYF0qP2B8PFtePD5dKj8+L2csQWEuYW55UHVuY3R1YXRpb249L1xcW3B1bmN0XS9nLEFhLl9lc2NhcGVzPS9cXChbcHVuY3RdKS9nLEFhLl9jb21tZW50PUlsKG1vLl9jb21tZW50KS5yZXBsYWNlKCIoPzotLVx4'@;
put 'M2V8JCkiLCItLVx4M2UiKS5nZXRSZWdleCgpLEFhLmVtU3Ryb25nLmxEZWxpbT1JbChBYS5lbVN0cm9uZy5sRGVsaW0sInUiKS5yZXBsYWNlKC9wdW5jdC9nLEFhLl9wdW5jdHVhdGlvbikuZ2V0UmVnZXgoKSxBYS5lbVN0cm9uZy5yRGVsaW1Bc3Q9SWwoQWEuZW1TdHJvbmcuckRlbGltQXN0'@;
put 'LCJndSIpLnJlcGxhY2UoL3B1bmN0L2csQWEuX3B1bmN0dWF0aW9uKS5nZXRSZWdleCgpLEFhLmVtU3Ryb25nLnJEZWxpbVVuZD1JbChBYS5lbVN0cm9uZy5yRGVsaW1VbmQsImd1IikucmVwbGFjZSgvcHVuY3QvZyxBYS5fcHVuY3R1YXRpb24pLmdldFJlZ2V4KCksQWEuYW55UHVuY3R1YXRp'@;
put 'b249SWwoQWEuYW55UHVuY3R1YXRpb24sImd1IikucmVwbGFjZSgvcHVuY3QvZyxBYS5fcHVuY3R1YXRpb24pLmdldFJlZ2V4KCksQWEuX2VzY2FwZXM9SWwoQWEuX2VzY2FwZXMsImd1IikucmVwbGFjZSgvcHVuY3QvZyxBYS5fcHVuY3R1YXRpb24pLmdldFJlZ2V4KCksQWEuX3NjaGVtZT0v'@;
put 'W2EtekEtWl1bYS16QS1aMC05Ky4tXXsxLDMxfS8sQWEuX2VtYWlsPS9bYS16QS1aMC05LiEjJCUmJyorLz0/Xl9ge3x9fi1dKyhAKVthLXpBLVowLTldKD86W2EtekEtWjAtOS1dezAsNjF9W2EtekEtWjAtOV0pPyg/OlwuW2EtekEtWjAtOV0oPzpbYS16QS1aMC05LV17MCw2MX1bYS16QS1a'@;
put 'MC05XSk/KSsoPyFbLV9dKS8sQWEuYXV0b2xpbms9SWwoQWEuYXV0b2xpbmspLnJlcGxhY2UoInNjaGVtZSIsQWEuX3NjaGVtZSkucmVwbGFjZSgiZW1haWwiLEFhLl9lbWFpbCkuZ2V0UmVnZXgoKSxBYS5fYXR0cmlidXRlPS9ccytbYS16QS1aOl9dW1x3LjotXSooPzpccyo9XHMqIlteIl0q'@;
put 'Inxccyo9XHMqJ1teJ10qJ3xccyo9XHMqW15ccyInPTw+YF0rKT8vLEFhLnRhZz1JbChBYS50YWcpLnJlcGxhY2UoImNvbW1lbnQiLEFhLl9jb21tZW50KS5yZXBsYWNlKCJhdHRyaWJ1dGUiLEFhLl9hdHRyaWJ1dGUpLmdldFJlZ2V4KCksQWEuX2xhYmVsPS8oPzpcWyg/OlxcLnxbXlxbXF1c'@;
put 'XF0pKlxdfFxcLnxgW15gXSpgfFteXFtcXVxcYF0pKj8vLEFhLl9ocmVmPS88KD86XFwufFteXG48PlxcXSkrPnxbXlxzXHgwMC1ceDFmXSovLEFhLl90aXRsZT0vIig/OlxcIj98W14iXFxdKSoifCcoPzpcXCc/fFteJ1xcXSkqJ3xcKCg/OlxcXCk/fFteKVxcXSkqXCkvLEFhLmxpbms9SWwo'@;
put 'QWEubGluaykucmVwbGFjZSgibGFiZWwiLEFhLl9sYWJlbCkucmVwbGFjZSgiaHJlZiIsQWEuX2hyZWYpLnJlcGxhY2UoInRpdGxlIixBYS5fdGl0bGUpLmdldFJlZ2V4KCksQWEucmVmbGluaz1JbChBYS5yZWZsaW5rKS5yZXBsYWNlKCJsYWJlbCIsQWEuX2xhYmVsKS5yZXBsYWNlKCJyZWYi'@;
put 'LG1vLl9sYWJlbCkuZ2V0UmVnZXgoKSxBYS5ub2xpbms9SWwoQWEubm9saW5rKS5yZXBsYWNlKCJyZWYiLG1vLl9sYWJlbCkuZ2V0UmVnZXgoKSxBYS5yZWZsaW5rU2VhcmNoPUlsKEFhLnJlZmxpbmtTZWFyY2gsImciKS5yZXBsYWNlKCJyZWZsaW5rIixBYS5yZWZsaW5rKS5yZXBsYWNlKCJu'@;
put 'b2xpbmsiLEFhLm5vbGluaykuZ2V0UmVnZXgoKSxBYS5ub3JtYWw9ey4uLkFhfSxBYS5wZWRhbnRpYz17Li4uQWEubm9ybWFsLHN0cm9uZzp7c3RhcnQ6L15fX3xcKlwqLyxtaWRkbGU6L15fXyg/PVxTKShbXHNcU10qP1xTKV9fKD8hXyl8XlwqXCooPz1cUykoW1xzXFNdKj9cUylcKlwqKD8h'@;
put 'XCopLyxlbmRBc3Q6L1wqXCooPyFcKikvZyxlbmRVbmQ6L19fKD8hXykvZ30sZW06e3N0YXJ0Oi9eX3xcKi8sbWlkZGxlOi9eKClcKig/PVxTKShbXHNcU10qP1xTKVwqKD8hXCopfF5fKD89XFMpKFtcc1xTXSo/XFMpXyg/IV8pLyxlbmRBc3Q6L1wqKD8hXCopL2csZW5kVW5kOi9fKD8hXykv'@;
put 'Z30sbGluazpJbCgvXiE/XFsobGFiZWwpXF1cKCguKj8pXCkvKS5yZXBsYWNlKCJsYWJlbCIsQWEuX2xhYmVsKS5nZXRSZWdleCgpLHJlZmxpbms6SWwoL14hP1xbKGxhYmVsKVxdXHMqXFsoW15cXV0qKVxdLykucmVwbGFjZSgibGFiZWwiLEFhLl9sYWJlbCkuZ2V0UmVnZXgoKX0sQWEuZ2Zt'@;
put 'PXsuLi5BYS5ub3JtYWwsZXNjYXBlOklsKEFhLmVzY2FwZSkucmVwbGFjZSgiXSkiLCJ+fF0pIikuZ2V0UmVnZXgoKSxfZXh0ZW5kZWRfZW1haWw6L1tBLVphLXowLTkuXystXSsoQClbYS16QS1aMC05LV9dKyg/OlwuW2EtekEtWjAtOS1fXSpbYS16QS1aMC05XSkrKD8hWy1fXSkvLHVybDov'@;
put 'XigoPzpmdHB8aHR0cHM/KTpcL1wvfHd3d1wuKSg/OlthLXpBLVowLTlcLV0rXC4/KStbXlxzPF0qfF5lbWFpbC8sX2JhY2twZWRhbDovKD86W14/IS4sOjsqXycifigpJl0rfFwoW14pXSpcKXwmKD8hW2EtekEtWjAtOV0rOyQpfFs/IS4sOjsqXycifildKyg/ISQpKSsvLGRlbDovXih+fj8p'@;
put 'KD89W15cc35dKShbXHNcU10qP1teXHN+XSlcMSg/PVtefl18JCkvLHRleHQ6L14oW2B+XSt8W15gfl0pKD86KD89IHsyLH1cbil8KD89W2EtekEtWjAtOS4hIyQlJicqK1wvPT9fYHtcfH1+LV0rQCl8W1xzXFNdKj8oPzooPz1bXFw8IVxbYCp+X118XGJffGh0dHBzPzpcL1wvfGZ0cDpcL1wv'@;
put 'fHd3d1wufCQpfFteIF0oPz0gezIsfVxuKXxbXmEtekEtWjAtOS4hIyQlJicqK1wvPT9fYHtcfH1+LV0oPz1bYS16QS1aMC05LiEjJCUmJyorXC89P19ge1x8fX4tXStAKSkpL30sQWEuZ2ZtLnVybD1JbChBYS5nZm0udXJsLCJpIikucmVwbGFjZSgiZW1haWwiLEFhLmdmbS5fZXh0ZW5kZWRf'@;
put 'ZW1haWwpLmdldFJlZ2V4KCksQWEuYnJlYWtzPXsuLi5BYS5nZm0sYnI6SWwoQWEuYnIpLnJlcGxhY2UoInsyLH0iLCIqIikuZ2V0UmVnZXgoKSx0ZXh0OklsKEFhLmdmbS50ZXh0KS5yZXBsYWNlKCJcXGJfIiwiXFxiX3wgezIsfVxcbiIpLnJlcGxhY2UoL1x7MixcfS9nLCIqIikuZ2V0UmVn'@;
put 'ZXgoKX07Y2xhc3MgYTR7Y29uc3RydWN0b3IobCl7dGhpcy50b2tlbnM9W10sdGhpcy50b2tlbnMubGlua3M9T2JqZWN0LmNyZWF0ZShudWxsKSx0aGlzLm9wdGlvbnM9bHx8UzYsdGhpcy5vcHRpb25zLnRva2VuaXplcj10aGlzLm9wdGlvbnMudG9rZW5pemVyfHxuZXcgbE4sdGhpcy50b2tl'@;
put 'bml6ZXI9dGhpcy5vcHRpb25zLnRva2VuaXplcix0aGlzLnRva2VuaXplci5vcHRpb25zPXRoaXMub3B0aW9ucyx0aGlzLnRva2VuaXplci5sZXhlcj10aGlzLHRoaXMuaW5saW5lUXVldWU9W10sdGhpcy5zdGF0ZT17aW5MaW5rOiExLGluUmF3QmxvY2s6ITEsdG9wOiEwfTtjb25zdCBhPXti'@;
put 'bG9jazptby5ub3JtYWwsaW5saW5lOkFhLm5vcm1hbH07dGhpcy5vcHRpb25zLnBlZGFudGljPyhhLmJsb2NrPW1vLnBlZGFudGljLGEuaW5saW5lPUFhLnBlZGFudGljKTp0aGlzLm9wdGlvbnMuZ2ZtJiYoYS5ibG9jaz1tby5nZm0sYS5pbmxpbmU9dGhpcy5vcHRpb25zLmJyZWFrcz9BYS5i'@;
put 'cmVha3M6QWEuZ2ZtKSx0aGlzLnRva2VuaXplci5ydWxlcz1hfXN0YXRpYyBnZXQgcnVsZXMoKXtyZXR1cm57YmxvY2s6bW8saW5saW5lOkFhfX1zdGF0aWMgbGV4KGwsYSl7cmV0dXJuIG5ldyBhNChhKS5sZXgobCl9c3RhdGljIGxleElubGluZShsLGEpe3JldHVybiBuZXcgYTQoYSkuaW5s'@;
put 'aW5lVG9rZW5zKGwpfWxleChsKXtsZXQgYTtmb3IobD1sLnJlcGxhY2UoL1xyXG58XHIvZywiXG4iKSx0aGlzLmJsb2NrVG9rZW5zKGwsdGhpcy50b2tlbnMpO2E9dGhpcy5pbmxpbmVRdWV1ZS5zaGlmdCgpOyl0aGlzLmlubGluZVRva2VucyhhLnNyYyxhLnRva2Vucyk7cmV0dXJuIHRoaXMu'@;
put 'dG9rZW5zfWJsb2NrVG9rZW5zKGwsYT1bXSl7bGV0IGQsaCxmLHY7Zm9yKGw9dGhpcy5vcHRpb25zLnBlZGFudGljP2wucmVwbGFjZSgvXHQvZywiICAgICIpLnJlcGxhY2UoL14gKyQvZ20sIiIpOmwucmVwbGFjZSgvXiggKikoXHQrKS9nbSwoTSxELFopPT5EKyIgICAgIi5yZXBlYXQoWi5s'@;
put 'ZW5ndGgpKTtsOylpZighKHRoaXMub3B0aW9ucy5leHRlbnNpb25zJiZ0aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucy5ibG9jayYmdGhpcy5vcHRpb25zLmV4dGVuc2lvbnMuYmxvY2suc29tZShNPT4hIShkPU0uY2FsbCh7bGV4ZXI6dGhpc30sbCxhKSkmJihsPWwuc3Vic3RyaW5nKGQucmF3Lmxl'@;
put 'bmd0aCksYS5wdXNoKGQpLCEwKSkpKXtpZihkPXRoaXMudG9rZW5pemVyLnNwYWNlKGwpKXtsPWwuc3Vic3RyaW5nKGQucmF3Lmxlbmd0aCksMT09PWQucmF3Lmxlbmd0aCYmYS5sZW5ndGg+MD9hW2EubGVuZ3RoLTFdLnJhdys9IlxuIjphLnB1c2goZCk7Y29udGludWV9aWYoZD10aGlzLnRv'@;
put 'a2VuaXplci5jb2RlKGwpKXtsPWwuc3Vic3RyaW5nKGQucmF3Lmxlbmd0aCksaD1hW2EubGVuZ3RoLTFdLCFofHwicGFyYWdyYXBoIiE9PWgudHlwZSYmInRleHQiIT09aC50eXBlP2EucHVzaChkKTooaC5yYXcrPSJcbiIrZC5yYXcsaC50ZXh0Kz0iXG4iK2QudGV4dCx0aGlzLmlubGluZVF1'@;
put 'ZXVlW3RoaXMuaW5saW5lUXVldWUubGVuZ3RoLTFdLnNyYz1oLnRleHQpO2NvbnRpbnVlfWlmKGQ9dGhpcy50b2tlbml6ZXIuZmVuY2VzKGwpKXtsPWwuc3Vic3RyaW5nKGQucmF3Lmxlbmd0aCksYS5wdXNoKGQpO2NvbnRpbnVlfWlmKGQ9dGhpcy50b2tlbml6ZXIuaGVhZGluZyhsKSl7bD1s'@;
put 'LnN1YnN0cmluZyhkLnJhdy5sZW5ndGgpLGEucHVzaChkKTtjb250aW51ZX1pZihkPXRoaXMudG9rZW5pemVyLmhyKGwpKXtsPWwuc3Vic3RyaW5nKGQucmF3Lmxlbmd0aCksYS5wdXNoKGQpO2NvbnRpbnVlfWlmKGQ9dGhpcy50b2tlbml6ZXIuYmxvY2txdW90ZShsKSl7bD1sLnN1YnN0cmlu'@;
put 'ZyhkLnJhdy5sZW5ndGgpLGEucHVzaChkKTtjb250aW51ZX1pZihkPXRoaXMudG9rZW5pemVyLmxpc3QobCkpe2w9bC5zdWJzdHJpbmcoZC5yYXcubGVuZ3RoKSxhLnB1c2goZCk7Y29udGludWV9aWYoZD10aGlzLnRva2VuaXplci5odG1sKGwpKXtsPWwuc3Vic3RyaW5nKGQucmF3Lmxlbmd0'@;
put 'aCksYS5wdXNoKGQpO2NvbnRpbnVlfWlmKGQ9dGhpcy50b2tlbml6ZXIuZGVmKGwpKXtsPWwuc3Vic3RyaW5nKGQucmF3Lmxlbmd0aCksaD1hW2EubGVuZ3RoLTFdLCFofHwicGFyYWdyYXBoIiE9PWgudHlwZSYmInRleHQiIT09aC50eXBlP3RoaXMudG9rZW5zLmxpbmtzW2QudGFnXXx8KHRo'@;
put 'aXMudG9rZW5zLmxpbmtzW2QudGFnXT17aHJlZjpkLmhyZWYsdGl0bGU6ZC50aXRsZX0pOihoLnJhdys9IlxuIitkLnJhdyxoLnRleHQrPSJcbiIrZC5yYXcsdGhpcy5pbmxpbmVRdWV1ZVt0aGlzLmlubGluZVF1ZXVlLmxlbmd0aC0xXS5zcmM9aC50ZXh0KTtjb250aW51ZX1pZihkPXRoaXMu'@;
put 'dG9rZW5pemVyLnRhYmxlKGwpKXtsPWwuc3Vic3RyaW5nKGQucmF3Lmxlbmd0aCksYS5wdXNoKGQpO2NvbnRpbnVlfWlmKGQ9dGhpcy50b2tlbml6ZXIubGhlYWRpbmcobCkpe2w9bC5zdWJzdHJpbmcoZC5yYXcubGVuZ3RoKSxhLnB1c2goZCk7Y29udGludWV9aWYoZj1sLHRoaXMub3B0aW9u'@;
put 'cy5leHRlbnNpb25zJiZ0aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucy5zdGFydEJsb2NrKXtsZXQgTT0xLzA7Y29uc3QgRD1sLnNsaWNlKDEpO2xldCBaO3RoaXMub3B0aW9ucy5leHRlbnNpb25zLnN0YXJ0QmxvY2suZm9yRWFjaChmdW5jdGlvbihyZSl7Wj1yZS5jYWxsKHtsZXhlcjp0aGlzfSxE'@;
put 'KSwibnVtYmVyIj09dHlwZW9mIFomJlo+PTAmJihNPU1hdGgubWluKE0sWikpfSksTTwxLzAmJk0+PTAmJihmPWwuc3Vic3RyaW5nKDAsTSsxKSl9aWYodGhpcy5zdGF0ZS50b3AmJihkPXRoaXMudG9rZW5pemVyLnBhcmFncmFwaChmKSkpe2g9YVthLmxlbmd0aC0xXSx2JiYicGFyYWdyYXBo'@;
put 'Ij09PWgudHlwZT8oaC5yYXcrPSJcbiIrZC5yYXcsaC50ZXh0Kz0iXG4iK2QudGV4dCx0aGlzLmlubGluZVF1ZXVlLnBvcCgpLHRoaXMuaW5saW5lUXVldWVbdGhpcy5pbmxpbmVRdWV1ZS5sZW5ndGgtMV0uc3JjPWgudGV4dCk6YS5wdXNoKGQpLHY9Zi5sZW5ndGghPT1sLmxlbmd0aCxsPWwu'@;
put 'c3Vic3RyaW5nKGQucmF3Lmxlbmd0aCk7Y29udGludWV9aWYoZD10aGlzLnRva2VuaXplci50ZXh0KGwpKXtsPWwuc3Vic3RyaW5nKGQucmF3Lmxlbmd0aCksaD1hW2EubGVuZ3RoLTFdLGgmJiJ0ZXh0Ij09PWgudHlwZT8oaC5yYXcrPSJcbiIrZC5yYXcsaC50ZXh0Kz0iXG4iK2QudGV4dCx0'@;
put 'aGlzLmlubGluZVF1ZXVlLnBvcCgpLHRoaXMuaW5saW5lUXVldWVbdGhpcy5pbmxpbmVRdWV1ZS5sZW5ndGgtMV0uc3JjPWgudGV4dCk6YS5wdXNoKGQpO2NvbnRpbnVlfWlmKGwpe2NvbnN0IE09IkluZmluaXRlIGxvb3Agb24gYnl0ZTogIitsLmNoYXJDb2RlQXQoMCk7aWYodGhpcy5vcHRp'@;
put 'b25zLnNpbGVudCl7Y29uc29sZS5lcnJvcihNKTticmVha310aHJvdyBuZXcgRXJyb3IoTSl9fXJldHVybiB0aGlzLnN0YXRlLnRvcD0hMCxhfWlubGluZShsLGE9W10pe3JldHVybiB0aGlzLmlubGluZVF1ZXVlLnB1c2goe3NyYzpsLHRva2VuczphfSksYX1pbmxpbmVUb2tlbnMobCxhPVtd'@;
put 'KXtsZXQgZCxoLGYsTSxELFosdj1sO2lmKHRoaXMudG9rZW5zLmxpbmtzKXtjb25zdCByZT1PYmplY3Qua2V5cyh0aGlzLnRva2Vucy5saW5rcyk7aWYocmUubGVuZ3RoPjApZm9yKDtudWxsIT0oTT10aGlzLnRva2VuaXplci5ydWxlcy5pbmxpbmUucmVmbGlua1NlYXJjaC5leGVjKHYpKTsp'@;
put 'cmUuaW5jbHVkZXMoTVswXS5zbGljZShNWzBdLmxhc3RJbmRleE9mKCJbIikrMSwtMSkpJiYodj12LnNsaWNlKDAsTS5pbmRleCkrIlsiKyJhIi5yZXBlYXQoTVswXS5sZW5ndGgtMikrIl0iK3Yuc2xpY2UodGhpcy50b2tlbml6ZXIucnVsZXMuaW5saW5lLnJlZmxpbmtTZWFyY2gubGFzdElu'@;
put 'ZGV4KSl9Zm9yKDtudWxsIT0oTT10aGlzLnRva2VuaXplci5ydWxlcy5pbmxpbmUuYmxvY2tTa2lwLmV4ZWModikpOyl2PXYuc2xpY2UoMCxNLmluZGV4KSsiWyIrImEiLnJlcGVhdChNWzBdLmxlbmd0aC0yKSsiXSIrdi5zbGljZSh0aGlzLnRva2VuaXplci5ydWxlcy5pbmxpbmUuYmxvY2tT'@;
put 'a2lwLmxhc3RJbmRleCk7Zm9yKDtudWxsIT0oTT10aGlzLnRva2VuaXplci5ydWxlcy5pbmxpbmUuYW55UHVuY3R1YXRpb24uZXhlYyh2KSk7KXY9di5zbGljZSgwLE0uaW5kZXgpKyIrKyIrdi5zbGljZSh0aGlzLnRva2VuaXplci5ydWxlcy5pbmxpbmUuYW55UHVuY3R1YXRpb24ubGFzdElu'@;
put 'ZGV4KTtmb3IoO2w7KWlmKER8fChaPSIiKSxEPSExLCEodGhpcy5vcHRpb25zLmV4dGVuc2lvbnMmJnRoaXMub3B0aW9ucy5leHRlbnNpb25zLmlubGluZSYmdGhpcy5vcHRpb25zLmV4dGVuc2lvbnMuaW5saW5lLnNvbWUocmU9PiEhKGQ9cmUuY2FsbCh7bGV4ZXI6dGhpc30sbCxhKSkmJihs'@;
put 'PWwuc3Vic3RyaW5nKGQucmF3Lmxlbmd0aCksYS5wdXNoKGQpLCEwKSkpKXtpZihkPXRoaXMudG9rZW5pemVyLmVzY2FwZShsKSl7bD1sLnN1YnN0cmluZyhkLnJhdy5sZW5ndGgpLGEucHVzaChkKTtjb250aW51ZX1pZihkPXRoaXMudG9rZW5pemVyLnRhZyhsKSl7bD1sLnN1YnN0cmluZyhk'@;
put 'LnJhdy5sZW5ndGgpLGg9YVthLmxlbmd0aC0xXSxoJiYidGV4dCI9PT1kLnR5cGUmJiJ0ZXh0Ij09PWgudHlwZT8oaC5yYXcrPWQucmF3LGgudGV4dCs9ZC50ZXh0KTphLnB1c2goZCk7Y29udGludWV9aWYoZD10aGlzLnRva2VuaXplci5saW5rKGwpKXtsPWwuc3Vic3RyaW5nKGQucmF3Lmxl'@;
put 'bmd0aCksYS5wdXNoKGQpO2NvbnRpbnVlfWlmKGQ9dGhpcy50b2tlbml6ZXIucmVmbGluayhsLHRoaXMudG9rZW5zLmxpbmtzKSl7bD1sLnN1YnN0cmluZyhkLnJhdy5sZW5ndGgpLGg9YVthLmxlbmd0aC0xXSxoJiYidGV4dCI9PT1kLnR5cGUmJiJ0ZXh0Ij09PWgudHlwZT8oaC5yYXcrPWQu'@;
put 'cmF3LGgudGV4dCs9ZC50ZXh0KTphLnB1c2goZCk7Y29udGludWV9aWYoZD10aGlzLnRva2VuaXplci5lbVN0cm9uZyhsLHYsWikpe2w9bC5zdWJzdHJpbmcoZC5yYXcubGVuZ3RoKSxhLnB1c2goZCk7Y29udGludWV9aWYoZD10aGlzLnRva2VuaXplci5jb2Rlc3BhbihsKSl7bD1sLnN1YnN0'@;
put 'cmluZyhkLnJhdy5sZW5ndGgpLGEucHVzaChkKTtjb250aW51ZX1pZihkPXRoaXMudG9rZW5pemVyLmJyKGwpKXtsPWwuc3Vic3RyaW5nKGQucmF3Lmxlbmd0aCksYS5wdXNoKGQpO2NvbnRpbnVlfWlmKGQ9dGhpcy50b2tlbml6ZXIuZGVsKGwpKXtsPWwuc3Vic3RyaW5nKGQucmF3Lmxlbmd0'@;
put 'aCksYS5wdXNoKGQpO2NvbnRpbnVlfWlmKGQ9dGhpcy50b2tlbml6ZXIuYXV0b2xpbmsobCxLNmUpKXtsPWwuc3Vic3RyaW5nKGQucmF3Lmxlbmd0aCksYS5wdXNoKGQpO2NvbnRpbnVlfWlmKCF0aGlzLnN0YXRlLmluTGluayYmKGQ9dGhpcy50b2tlbml6ZXIudXJsKGwsSzZlKSkpe2w9bC5z'@;
put 'dWJzdHJpbmcoZC5yYXcubGVuZ3RoKSxhLnB1c2goZCk7Y29udGludWV9aWYoZj1sLHRoaXMub3B0aW9ucy5leHRlbnNpb25zJiZ0aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucy5zdGFydElubGluZSl7bGV0IHJlPTEvMDtjb25zdCBjZT1sLnNsaWNlKDEpO2xldCBiZTt0aGlzLm9wdGlvbnMuZXh0'@;
put 'ZW5zaW9ucy5zdGFydElubGluZS5mb3JFYWNoKGZ1bmN0aW9uKEVlKXtiZT1FZS5jYWxsKHtsZXhlcjp0aGlzfSxjZSksIm51bWJlciI9PXR5cGVvZiBiZSYmYmU+PTAmJihyZT1NYXRoLm1pbihyZSxiZSkpfSkscmU8MS8wJiZyZT49MCYmKGY9bC5zdWJzdHJpbmcoMCxyZSsxKSl9aWYoZD10'@;
put 'aGlzLnRva2VuaXplci5pbmxpbmVUZXh0KGYsT2J0KSl7bD1sLnN1YnN0cmluZyhkLnJhdy5sZW5ndGgpLCJfIiE9PWQucmF3LnNsaWNlKC0xKSYmKFo9ZC5yYXcuc2xpY2UoLTEpKSxEPSEwLGg9YVthLmxlbmd0aC0xXSxoJiYidGV4dCI9PT1oLnR5cGU/KGgucmF3Kz1kLnJhdyxoLnRleHQr'@;
put 'PWQudGV4dCk6YS5wdXNoKGQpO2NvbnRpbnVlfWlmKGwpe2NvbnN0IHJlPSJJbmZpbml0ZSBsb29wIG9uIGJ5dGU6ICIrbC5jaGFyQ29kZUF0KDApO2lmKHRoaXMub3B0aW9ucy5zaWxlbnQpe2NvbnNvbGUuZXJyb3IocmUpO2JyZWFrfXRocm93IG5ldyBFcnJvcihyZSl9fXJldHVybiBhfX1j'@;
put 'bGFzcyBjTntjb25zdHJ1Y3RvcihsKXt0aGlzLm9wdGlvbnM9bHx8UzZ9Y29kZShsLGEsZCl7Y29uc3QgaD0oYXx8IiIpLm1hdGNoKC9cUyovKVswXTtpZih0aGlzLm9wdGlvbnMuaGlnaGxpZ2h0KXtjb25zdCBmPXRoaXMub3B0aW9ucy5oaWdobGlnaHQobCxoKTtudWxsIT1mJiZmIT09bCYm'@;
put 'KGQ9ITAsbD1mKX1yZXR1cm4gbD1sLnJlcGxhY2UoL1xuJC8sIiIpKyJcbiIsaD8nPHByZT48Y29kZSBjbGFzcz0iJyt0aGlzLm9wdGlvbnMubGFuZ1ByZWZpeCt4MShoKSsnIj4nKyhkP2w6eDEobCwhMCkpKyI8L2NvZGU+PC9wcmU+XG4iOiI8cHJlPjxjb2RlPiIrKGQ/bDp4MShsLCEwKSkr'@;
put 'IjwvY29kZT48L3ByZT5cbiJ9YmxvY2txdW90ZShsKXtyZXR1cm5gPGJsb2NrcXVvdGU+XG4ke2x9PC9ibG9ja3F1b3RlPlxuYH1odG1sKGwsYSl7cmV0dXJuIGx9aGVhZGluZyhsLGEsZCxoKXtyZXR1cm4gdGhpcy5vcHRpb25zLmhlYWRlcklkcz9gPGgke2F9IGlkPSIke3RoaXMub3B0aW9u'@;
put 'cy5oZWFkZXJQcmVmaXgraC5zbHVnKGQpfSI+JHtsfTwvaCR7YX0+XG5gOmA8aCR7YX0+JHtsfTwvaCR7YX0+XG5gfWhyKCl7cmV0dXJuIHRoaXMub3B0aW9ucy54aHRtbD8iPGhyLz5cbiI6Ijxocj5cbiJ9bGlzdChsLGEsZCl7Y29uc3QgaD1hPyJvbCI6InVsIjtyZXR1cm4iPCIraCsoYSYm'@;
put 'MSE9PWQ/JyBzdGFydD0iJytkKyciJzoiIikrIj5cbiIrbCsiPC8iK2grIj5cbiJ9bGlzdGl0ZW0obCl7cmV0dXJuYDxsaT4ke2x9PC9saT5cbmB9Y2hlY2tib3gobCl7cmV0dXJuIjxpbnB1dCAiKyhsPydjaGVja2VkPSIiICc6IiIpKydkaXNhYmxlZD0iIiB0eXBlPSJjaGVja2JveCInKyh0'@;
put 'aGlzLm9wdGlvbnMueGh0bWw/IiAvIjoiIikrIj4gIn1wYXJhZ3JhcGgobCl7cmV0dXJuYDxwPiR7bH08L3A+XG5gfXRhYmxlKGwsYSl7cmV0dXJuIGEmJihhPWA8dGJvZHk+JHthfTwvdGJvZHk+YCksIjx0YWJsZT5cbjx0aGVhZD5cbiIrbCsiPC90aGVhZD5cbiIrYSsiPC90YWJsZT5cbiJ9'@;
put 'dGFibGVyb3cobCl7cmV0dXJuYDx0cj5cbiR7bH08L3RyPlxuYH10YWJsZWNlbGwobCxhKXtjb25zdCBkPWEuaGVhZGVyPyJ0aCI6InRkIjtyZXR1cm4oYS5hbGlnbj9gPCR7ZH0gYWxpZ249IiR7YS5hbGlnbn0iPmA6YDwke2R9PmApK2wrYDwvJHtkfT5cbmB9c3Ryb25nKGwpe3JldHVybmA8'@;
put 'c3Ryb25nPiR7bH08L3N0cm9uZz5gfWVtKGwpe3JldHVybmA8ZW0+JHtsfTwvZW0+YH1jb2Rlc3BhbihsKXtyZXR1cm5gPGNvZGU+JHtsfTwvY29kZT5gfWJyKCl7cmV0dXJuIHRoaXMub3B0aW9ucy54aHRtbD8iPGJyLz4iOiI8YnI+In1kZWwobCl7cmV0dXJuYDxkZWw+JHtsfTwvZGVsPmB9'@;
put 'bGluayhsLGEsZCl7aWYobnVsbD09PShsPVk2ZSh0aGlzLm9wdGlvbnMuc2FuaXRpemUsdGhpcy5vcHRpb25zLmJhc2VVcmwsbCkpKXJldHVybiBkO2xldCBoPSc8YSBocmVmPSInK2wrJyInO3JldHVybiBhJiYoaCs9JyB0aXRsZT0iJythKyciJyksaCs9Ij4iK2QrIjwvYT4iLGh9aW1hZ2Uo'@;
put 'bCxhLGQpe2lmKG51bGw9PT0obD1ZNmUodGhpcy5vcHRpb25zLnNhbml0aXplLHRoaXMub3B0aW9ucy5iYXNlVXJsLGwpKSlyZXR1cm4gZDtsZXQgaD1gPGltZyBzcmM9IiR7bH0iIGFsdD0iJHtkfSJgO3JldHVybiBhJiYoaCs9YCB0aXRsZT0iJHthfSJgKSxoKz10aGlzLm9wdGlvbnMueGh0'@;
put 'bWw/Ii8+IjoiPiIsaH10ZXh0KGwpe3JldHVybiBsfX1jbGFzcyBydGV7c3Ryb25nKGwpe3JldHVybiBsfWVtKGwpe3JldHVybiBsfWNvZGVzcGFuKGwpe3JldHVybiBsfWRlbChsKXtyZXR1cm4gbH1odG1sKGwpe3JldHVybiBsfXRleHQobCl7cmV0dXJuIGx9bGluayhsLGEsZCl7cmV0dXJu'@;
put 'IiIrZH1pbWFnZShsLGEsZCl7cmV0dXJuIiIrZH1icigpe3JldHVybiIifX1jbGFzcyBpdGV7Y29uc3RydWN0b3IoKXt0aGlzLnNlZW49e319c2VyaWFsaXplKGwpe3JldHVybiBsLnRvTG93ZXJDYXNlKCkudHJpbSgpLnJlcGxhY2UoLzxbIVwvYS16XS4qPz4vZ2ksIiIpLnJlcGxhY2UoL1tc'@;
put 'dTIwMDAtXHUyMDZGXHUyRTAwLVx1MkU3RlxcJyEiIyQlJigpKissLi86Ozw9Pj9AW1xdXmB7fH1+XS9nLCIiKS5yZXBsYWNlKC9ccy9nLCItIil9Z2V0TmV4dFNhZmVTbHVnKGwsYSl7bGV0IGQ9bCxoPTA7aWYodGhpcy5zZWVuLmhhc093blByb3BlcnR5KGQpKXtoPXRoaXMuc2VlbltsXTtk'@;
put 'b3toKyssZD1sKyItIitofXdoaWxlKHRoaXMuc2Vlbi5oYXNPd25Qcm9wZXJ0eShkKSl9cmV0dXJuIGF8fCh0aGlzLnNlZW5bbF09aCx0aGlzLnNlZW5bZF09MCksZH1zbHVnKGwsYT17fSl7Y29uc3QgZD10aGlzLnNlcmlhbGl6ZShsKTtyZXR1cm4gdGhpcy5nZXROZXh0U2FmZVNsdWcoZCxh'@;
put 'LmRyeXJ1bil9fWNsYXNzIG80e2NvbnN0cnVjdG9yKGwpe3RoaXMub3B0aW9ucz1sfHxTNix0aGlzLm9wdGlvbnMucmVuZGVyZXI9dGhpcy5vcHRpb25zLnJlbmRlcmVyfHxuZXcgY04sdGhpcy5yZW5kZXJlcj10aGlzLm9wdGlvbnMucmVuZGVyZXIsdGhpcy5yZW5kZXJlci5vcHRpb25zPXRo'@;
put 'aXMub3B0aW9ucyx0aGlzLnRleHRSZW5kZXJlcj1uZXcgcnRlLHRoaXMuc2x1Z2dlcj1uZXcgaXRlfXN0YXRpYyBwYXJzZShsLGEpe3JldHVybiBuZXcgbzQoYSkucGFyc2UobCl9c3RhdGljIHBhcnNlSW5saW5lKGwsYSl7cmV0dXJuIG5ldyBvNChhKS5wYXJzZUlubGluZShsKX1wYXJzZShs'@;
put 'LGE9ITApe2xldCBoLGYsdixNLEQsWixyZSxjZSxiZSxFZSxCZSxxZSxydCxwdCxkdCxKdCx2bixDbix0bixkPSIiO2NvbnN0IE1uPWwubGVuZ3RoO2ZvcihoPTA7aDxNbjtoKyspaWYoRWU9bFtoXSx0aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucyYmdGhpcy5vcHRpb25zLmV4dGVuc2lvbnMucmVu'@;
put 'ZGVyZXJzJiZ0aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucy5yZW5kZXJlcnNbRWUudHlwZV0mJih0bj10aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucy5yZW5kZXJlcnNbRWUudHlwZV0uY2FsbCh7cGFyc2VyOnRoaXN9LEVlKSwhMSE9PXRufHwhWyJzcGFjZSIsImhyIiwiaGVhZGluZyIsImNvZGUiLCJ0'@;
put 'YWJsZSIsImJsb2NrcXVvdGUiLCJsaXN0IiwiaHRtbCIsInBhcmFncmFwaCIsInRleHQiXS5pbmNsdWRlcyhFZS50eXBlKSkpZCs9dG58fCIiO2Vsc2Ugc3dpdGNoKEVlLnR5cGUpe2Nhc2Uic3BhY2UiOmNvbnRpbnVlO2Nhc2UiaHIiOmQrPXRoaXMucmVuZGVyZXIuaHIoKTtjb250aW51ZTtj'@;
put 'YXNlImhlYWRpbmciOmQrPXRoaXMucmVuZGVyZXIuaGVhZGluZyh0aGlzLnBhcnNlSW5saW5lKEVlLnRva2VucyksRWUuZGVwdGgsVzZlKHRoaXMucGFyc2VJbmxpbmUoRWUudG9rZW5zLHRoaXMudGV4dFJlbmRlcmVyKSksdGhpcy5zbHVnZ2VyKTtjb250aW51ZTtjYXNlImNvZGUiOmQrPXRo'@;
put 'aXMucmVuZGVyZXIuY29kZShFZS50ZXh0LEVlLmxhbmcsRWUuZXNjYXBlZCk7Y29udGludWU7Y2FzZSJ0YWJsZSI6Zm9yKGNlPSIiLHJlPSIiLE09RWUuaGVhZGVyLmxlbmd0aCxmPTA7ZjxNO2YrKylyZSs9dGhpcy5yZW5kZXJlci50YWJsZWNlbGwodGhpcy5wYXJzZUlubGluZShFZS5oZWFk'@;
put 'ZXJbZl0udG9rZW5zKSx7aGVhZGVyOiEwLGFsaWduOkVlLmFsaWduW2ZdfSk7Zm9yKGNlKz10aGlzLnJlbmRlcmVyLnRhYmxlcm93KHJlKSxiZT0iIixNPUVlLnJvd3MubGVuZ3RoLGY9MDtmPE07ZisrKXtmb3IoWj1FZS5yb3dzW2ZdLHJlPSIiLEQ9Wi5sZW5ndGgsdj0wO3Y8RDt2KyspcmUr'@;
put 'PXRoaXMucmVuZGVyZXIudGFibGVjZWxsKHRoaXMucGFyc2VJbmxpbmUoWlt2XS50b2tlbnMpLHtoZWFkZXI6ITEsYWxpZ246RWUuYWxpZ25bdl19KTtiZSs9dGhpcy5yZW5kZXJlci50YWJsZXJvdyhyZSl9ZCs9dGhpcy5yZW5kZXJlci50YWJsZShjZSxiZSk7Y29udGludWU7Y2FzZSJibG9j'@;
put 'a3F1b3RlIjpiZT10aGlzLnBhcnNlKEVlLnRva2VucyksZCs9dGhpcy5yZW5kZXJlci5ibG9ja3F1b3RlKGJlKTtjb250aW51ZTtjYXNlImxpc3QiOmZvcihCZT1FZS5vcmRlcmVkLHFlPUVlLnN0YXJ0LHJ0PUVlLmxvb3NlLE09RWUuaXRlbXMubGVuZ3RoLGJlPSIiLGY9MDtmPE07ZisrKWR0'@;
put 'PUVlLml0ZW1zW2ZdLEp0PWR0LmNoZWNrZWQsdm49ZHQudGFzayxwdD0iIixkdC50YXNrJiYoQ249dGhpcy5yZW5kZXJlci5jaGVja2JveChKdCkscnQ/ZHQudG9rZW5zLmxlbmd0aD4wJiYicGFyYWdyYXBoIj09PWR0LnRva2Vuc1swXS50eXBlPyhkdC50b2tlbnNbMF0udGV4dD1DbisiICIr'@;
put 'ZHQudG9rZW5zWzBdLnRleHQsZHQudG9rZW5zWzBdLnRva2VucyYmZHQudG9rZW5zWzBdLnRva2Vucy5sZW5ndGg+MCYmInRleHQiPT09ZHQudG9rZW5zWzBdLnRva2Vuc1swXS50eXBlJiYoZHQudG9rZW5zWzBdLnRva2Vuc1swXS50ZXh0PUNuKyIgIitkdC50b2tlbnNbMF0udG9rZW5zWzBd'@;
put 'LnRleHQpKTpkdC50b2tlbnMudW5zaGlmdCh7dHlwZToidGV4dCIsdGV4dDpDbn0pOnB0Kz1DbikscHQrPXRoaXMucGFyc2UoZHQudG9rZW5zLHJ0KSxiZSs9dGhpcy5yZW5kZXJlci5saXN0aXRlbShwdCx2bixKdCk7ZCs9dGhpcy5yZW5kZXJlci5saXN0KGJlLEJlLHFlKTtjb250aW51ZTtj'@;
put 'YXNlImh0bWwiOmQrPXRoaXMucmVuZGVyZXIuaHRtbChFZS50ZXh0LEVlLmJsb2NrKTtjb250aW51ZTtjYXNlInBhcmFncmFwaCI6ZCs9dGhpcy5yZW5kZXJlci5wYXJhZ3JhcGgodGhpcy5wYXJzZUlubGluZShFZS50b2tlbnMpKTtjb250aW51ZTtjYXNlInRleHQiOmZvcihiZT1FZS50b2tl'@;
put 'bnM/dGhpcy5wYXJzZUlubGluZShFZS50b2tlbnMpOkVlLnRleHQ7aCsxPE1uJiYidGV4dCI9PT1sW2grMV0udHlwZTspRWU9bFsrK2hdLGJlKz0iXG4iKyhFZS50b2tlbnM/dGhpcy5wYXJzZUlubGluZShFZS50b2tlbnMpOkVlLnRleHQpO2QrPWE/dGhpcy5yZW5kZXJlci5wYXJhZ3JhcGgo'@;
put 'YmUpOmJlO2NvbnRpbnVlO2RlZmF1bHQ6e2NvbnN0IENyPSdUb2tlbiB3aXRoICInK0VlLnR5cGUrJyIgdHlwZSB3YXMgbm90IGZvdW5kLic7aWYodGhpcy5vcHRpb25zLnNpbGVudClyZXR1cm4gdm9pZCBjb25zb2xlLmVycm9yKENyKTt0aHJvdyBuZXcgRXJyb3IoQ3IpfX1yZXR1cm4gZH1w'@;
put 'YXJzZUlubGluZShsLGEpe2E9YXx8dGhpcy5yZW5kZXJlcjtsZXQgaCxmLHYsZD0iIjtjb25zdCBNPWwubGVuZ3RoO2ZvcihoPTA7aDxNO2grKylpZihmPWxbaF0sdGhpcy5vcHRpb25zLmV4dGVuc2lvbnMmJnRoaXMub3B0aW9ucy5leHRlbnNpb25zLnJlbmRlcmVycyYmdGhpcy5vcHRpb25z'@;
put 'LmV4dGVuc2lvbnMucmVuZGVyZXJzW2YudHlwZV0mJih2PXRoaXMub3B0aW9ucy5leHRlbnNpb25zLnJlbmRlcmVyc1tmLnR5cGVdLmNhbGwoe3BhcnNlcjp0aGlzfSxmKSwhMSE9PXZ8fCFbImVzY2FwZSIsImh0bWwiLCJsaW5rIiwiaW1hZ2UiLCJzdHJvbmciLCJlbSIsImNvZGVzcGFuIiwi'@;
put 'YnIiLCJkZWwiLCJ0ZXh0Il0uaW5jbHVkZXMoZi50eXBlKSkpZCs9dnx8IiI7ZWxzZSBzd2l0Y2goZi50eXBlKXtjYXNlImVzY2FwZSI6Y2FzZSJ0ZXh0IjpkKz1hLnRleHQoZi50ZXh0KTticmVhaztjYXNlImh0bWwiOmQrPWEuaHRtbChmLnRleHQpO2JyZWFrO2Nhc2UibGluayI6ZCs9YS5s'@;
put 'aW5rKGYuaHJlZixmLnRpdGxlLHRoaXMucGFyc2VJbmxpbmUoZi50b2tlbnMsYSkpO2JyZWFrO2Nhc2UiaW1hZ2UiOmQrPWEuaW1hZ2UoZi5ocmVmLGYudGl0bGUsZi50ZXh0KTticmVhaztjYXNlInN0cm9uZyI6ZCs9YS5zdHJvbmcodGhpcy5wYXJzZUlubGluZShmLnRva2VucyxhKSk7YnJl'@;
put 'YWs7Y2FzZSJlbSI6ZCs9YS5lbSh0aGlzLnBhcnNlSW5saW5lKGYudG9rZW5zLGEpKTticmVhaztjYXNlImNvZGVzcGFuIjpkKz1hLmNvZGVzcGFuKGYudGV4dCk7YnJlYWs7Y2FzZSJiciI6ZCs9YS5icigpO2JyZWFrO2Nhc2UiZGVsIjpkKz1hLmRlbCh0aGlzLnBhcnNlSW5saW5lKGYudG9r'@;
put 'ZW5zLGEpKTticmVhaztkZWZhdWx0Ontjb25zdCBEPSdUb2tlbiB3aXRoICInK2YudHlwZSsnIiB0eXBlIHdhcyBub3QgZm91bmQuJztpZih0aGlzLm9wdGlvbnMuc2lsZW50KXJldHVybiB2b2lkIGNvbnNvbGUuZXJyb3IoRCk7dGhyb3cgbmV3IEVycm9yKEQpfX1yZXR1cm4gZH19Y2xhc3Mg'@;
put 'dU57Y29uc3RydWN0b3IobCl7dGhpcy5vcHRpb25zPWx8fFM2fXN0YXRpYyBwYXNzVGhyb3VnaEhvb2tzPW5ldyBTZXQoWyJwcmVwcm9jZXNzIiwicG9zdHByb2Nlc3MiXSk7cHJlcHJvY2VzcyhsKXtyZXR1cm4gbH1wb3N0cHJvY2VzcyhsKXtyZXR1cm4gbH19Y29uc3QgSzk9bmV3IGNsYXNz'@;
put 'IFBidHtkZWZhdWx0cz17YXN5bmM6ITEsYmFzZVVybDpudWxsLGJyZWFrczohMSxleHRlbnNpb25zOm51bGwsZ2ZtOiEwLGhlYWRlcklkczohMCxoZWFkZXJQcmVmaXg6IiIsaGlnaGxpZ2h0Om51bGwsaG9va3M6bnVsbCxsYW5nUHJlZml4OiJsYW5ndWFnZS0iLG1hbmdsZTohMCxwZWRhbnRp'@;
put 'YzohMSxyZW5kZXJlcjpudWxsLHNhbml0aXplOiExLHNhbml0aXplcjpudWxsLHNpbGVudDohMSxzbWFydHlwYW50czohMSx0b2tlbml6ZXI6bnVsbCx3YWxrVG9rZW5zOm51bGwseGh0bWw6ITF9O29wdGlvbnM9dGhpcy5zZXRPcHRpb25zO3BhcnNlPXRoaXMuI2UoYTQubGV4LG80LnBhcnNl'@;
put 'KTtwYXJzZUlubGluZT10aGlzLiNlKGE0LmxleElubGluZSxvNC5wYXJzZUlubGluZSk7UGFyc2VyPW80O3BhcnNlcj1vNC5wYXJzZTtSZW5kZXJlcj1jTjtUZXh0UmVuZGVyZXI9cnRlO0xleGVyPWE0O2xleGVyPWE0LmxleDtUb2tlbml6ZXI9bE47U2x1Z2dlcj1pdGU7SG9va3M9dU47Y29u'@;
put 'c3RydWN0b3IoLi4ubCl7dGhpcy51c2UoLi4ubCl9d2Fsa1Rva2VucyhsLGEpe2xldCBkPVtdO2Zvcihjb25zdCBoIG9mIGwpc3dpdGNoKGQ9ZC5jb25jYXQoYS5jYWxsKHRoaXMsaCkpLGgudHlwZSl7Y2FzZSJ0YWJsZSI6Zm9yKGNvbnN0IGYgb2YgaC5oZWFkZXIpZD1kLmNvbmNhdCh0aGlz'@;
put 'LndhbGtUb2tlbnMoZi50b2tlbnMsYSkpO2Zvcihjb25zdCBmIG9mIGgucm93cylmb3IoY29uc3QgdiBvZiBmKWQ9ZC5jb25jYXQodGhpcy53YWxrVG9rZW5zKHYudG9rZW5zLGEpKTticmVhaztjYXNlImxpc3QiOmQ9ZC5jb25jYXQodGhpcy53YWxrVG9rZW5zKGguaXRlbXMsYSkpO2JyZWFr'@;
put 'O2RlZmF1bHQ6dGhpcy5kZWZhdWx0cy5leHRlbnNpb25zJiZ0aGlzLmRlZmF1bHRzLmV4dGVuc2lvbnMuY2hpbGRUb2tlbnMmJnRoaXMuZGVmYXVsdHMuZXh0ZW5zaW9ucy5jaGlsZFRva2Vuc1toLnR5cGVdP3RoaXMuZGVmYXVsdHMuZXh0ZW5zaW9ucy5jaGlsZFRva2Vuc1toLnR5cGVdLmZv'@;
put 'ckVhY2goZj0+e2Q9ZC5jb25jYXQodGhpcy53YWxrVG9rZW5zKGhbZl0sYSkpfSk6aC50b2tlbnMmJihkPWQuY29uY2F0KHRoaXMud2Fsa1Rva2VucyhoLnRva2VucyxhKSkpfXJldHVybiBkfXVzZSguLi5sKXtjb25zdCBhPXRoaXMuZGVmYXVsdHMuZXh0ZW5zaW9uc3x8e3JlbmRlcmVyczp7'@;
put 'fSxjaGlsZFRva2Vuczp7fX07cmV0dXJuIGwuZm9yRWFjaChkPT57Y29uc3QgaD17Li4uZH07aWYoaC5hc3luYz10aGlzLmRlZmF1bHRzLmFzeW5jfHxoLmFzeW5jfHwhMSxkLmV4dGVuc2lvbnMmJihkLmV4dGVuc2lvbnMuZm9yRWFjaChmPT57aWYoIWYubmFtZSl0aHJvdyBuZXcgRXJyb3Io'@;
put 'ImV4dGVuc2lvbiBuYW1lIHJlcXVpcmVkIik7aWYoZi5yZW5kZXJlcil7Y29uc3Qgdj1hLnJlbmRlcmVyc1tmLm5hbWVdO2EucmVuZGVyZXJzW2YubmFtZV09dj9mdW5jdGlvbiguLi5NKXtsZXQgRD1mLnJlbmRlcmVyLmFwcGx5KHRoaXMsTSk7cmV0dXJuITE9PT1EJiYoRD12LmFwcGx5KHRo'@;
put 'aXMsTSkpLER9OmYucmVuZGVyZXJ9aWYoZi50b2tlbml6ZXIpe2lmKCFmLmxldmVsfHwiYmxvY2siIT09Zi5sZXZlbCYmImlubGluZSIhPT1mLmxldmVsKXRocm93IG5ldyBFcnJvcigiZXh0ZW5zaW9uIGxldmVsIG11c3QgYmUgJ2Jsb2NrJyBvciAnaW5saW5lJyIpO2FbZi5sZXZlbF0/YVtm'@;
put 'LmxldmVsXS51bnNoaWZ0KGYudG9rZW5pemVyKTphW2YubGV2ZWxdPVtmLnRva2VuaXplcl0sZi5zdGFydCYmKCJibG9jayI9PT1mLmxldmVsP2Euc3RhcnRCbG9jaz9hLnN0YXJ0QmxvY2sucHVzaChmLnN0YXJ0KTphLnN0YXJ0QmxvY2s9W2Yuc3RhcnRdOiJpbmxpbmUiPT09Zi5sZXZlbCYm'@;
put 'KGEuc3RhcnRJbmxpbmU/YS5zdGFydElubGluZS5wdXNoKGYuc3RhcnQpOmEuc3RhcnRJbmxpbmU9W2Yuc3RhcnRdKSl9Zi5jaGlsZFRva2VucyYmKGEuY2hpbGRUb2tlbnNbZi5uYW1lXT1mLmNoaWxkVG9rZW5zKX0pLGguZXh0ZW5zaW9ucz1hKSxkLnJlbmRlcmVyKXtjb25zdCBmPXRoaXMu'@;
put 'ZGVmYXVsdHMucmVuZGVyZXJ8fG5ldyBjTih0aGlzLmRlZmF1bHRzKTtmb3IoY29uc3QgdiBpbiBkLnJlbmRlcmVyKXtjb25zdCBNPWZbdl07Zlt2XT0oLi4uRCk9PntsZXQgWj1kLnJlbmRlcmVyW3ZdLmFwcGx5KGYsRCk7cmV0dXJuITE9PT1aJiYoWj1NLmFwcGx5KGYsRCkpLFp9fWgucmVu'@;
put 'ZGVyZXI9Zn1pZihkLnRva2VuaXplcil7Y29uc3QgZj10aGlzLmRlZmF1bHRzLnRva2VuaXplcnx8bmV3IGxOKHRoaXMuZGVmYXVsdHMpO2Zvcihjb25zdCB2IGluIGQudG9rZW5pemVyKXtjb25zdCBNPWZbdl07Zlt2XT0oLi4uRCk9PntsZXQgWj1kLnRva2VuaXplclt2XS5hcHBseShmLEQp'@;
put 'O3JldHVybiExPT09WiYmKFo9TS5hcHBseShmLEQpKSxafX1oLnRva2VuaXplcj1mfWlmKGQuaG9va3Mpe2NvbnN0IGY9dGhpcy5kZWZhdWx0cy5ob29rc3x8bmV3IHVOO2Zvcihjb25zdCB2IGluIGQuaG9va3Mpe2NvbnN0IE09Zlt2XTtmW3ZdPXVOLnBhc3NUaHJvdWdoSG9va3MuaGFzKHYp'@;
put 'P0Q9PntpZih0aGlzLmRlZmF1bHRzLmFzeW5jKXJldHVybiBQcm9taXNlLnJlc29sdmUoZC5ob29rc1t2XS5jYWxsKGYsRCkpLnRoZW4ocmU9Pk0uY2FsbChmLHJlKSk7Y29uc3QgWj1kLmhvb2tzW3ZdLmNhbGwoZixEKTtyZXR1cm4gTS5jYWxsKGYsWil9OiguLi5EKT0+e2xldCBaPWQuaG9v'@;
put 'a3Nbdl0uYXBwbHkoZixEKTtyZXR1cm4hMT09PVomJihaPU0uYXBwbHkoZixEKSksWn19aC5ob29rcz1mfWlmKGQud2Fsa1Rva2Vucyl7Y29uc3QgZj10aGlzLmRlZmF1bHRzLndhbGtUb2tlbnM7aC53YWxrVG9rZW5zPWZ1bmN0aW9uKHYpe2xldCBNPVtdO3JldHVybiBNLnB1c2goZC53YWxr'@;
put 'VG9rZW5zLmNhbGwodGhpcyx2KSksZiYmKE09TS5jb25jYXQoZi5jYWxsKHRoaXMsdikpKSxNfX10aGlzLmRlZmF1bHRzPXsuLi50aGlzLmRlZmF1bHRzLC4uLmh9fSksdGhpc31zZXRPcHRpb25zKGwpe3JldHVybiB0aGlzLmRlZmF1bHRzPXsuLi50aGlzLmRlZmF1bHRzLC4uLmx9LHRoaXN9'@;
put 'I2UobCxhKXtyZXR1cm4oZCxoLGYpPT57ImZ1bmN0aW9uIj09dHlwZW9mIGgmJihmPWgsaD1udWxsKTtjb25zdCB2PXsuLi5ofTtoPXsuLi50aGlzLmRlZmF1bHRzLC4uLnZ9O2NvbnN0IE09dGhpcy4jdChoLnNpbGVudCxoLmFzeW5jLGYpO2lmKHR5cGVvZiBkPiJ1Inx8bnVsbD09PWQpcmV0'@;
put 'dXJuIE0obmV3IEVycm9yKCJtYXJrZWQoKTogaW5wdXQgcGFyYW1ldGVyIGlzIHVuZGVmaW5lZCBvciBudWxsIikpO2lmKCJzdHJpbmciIT10eXBlb2YgZClyZXR1cm4gTShuZXcgRXJyb3IoIm1hcmtlZCgpOiBpbnB1dCBwYXJhbWV0ZXIgaXMgb2YgdHlwZSAiK09iamVjdC5wcm90b3R5cGUu'@;
put 'dG9TdHJpbmcuY2FsbChkKSsiLCBzdHJpbmcgZXhwZWN0ZWQiKSk7aWYoZnVuY3Rpb24gUmJ0KGMsbCl7IWN8fGMuc2lsZW50fHwobCYmY29uc29sZS53YXJuKCJtYXJrZWQoKTogY2FsbGJhY2sgaXMgZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDUuMC4wLCBzaG91bGQgbm90IGJlIHVzZWQg'@;
put 'YW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgZnV0dXJlLiBSZWFkIG1vcmUgaGVyZTogaHR0cHM6Ly9tYXJrZWQuanMub3JnL3VzaW5nX3BybyNhc3luYyIpLChjLnNhbml0aXplfHxjLnNhbml0aXplcikmJmNvbnNvbGUud2FybigibWFya2VkKCk6IHNhbml0aXplIGFuZCBzYW5pdGl6ZXIg'@;
put 'cGFyYW1ldGVycyBhcmUgZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDAuNy4wLCBzaG91bGQgbm90IGJlIHVzZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgZnV0dXJlLiBSZWFkIG1vcmUgaGVyZTogaHR0cHM6Ly9tYXJrZWQuanMub3JnLyMvVVNJTkdfQURWQU5DRUQubWQjb3B0aW9u'@;
put 'cyIpLChjLmhpZ2hsaWdodHx8Imxhbmd1YWdlLSIhPT1jLmxhbmdQcmVmaXgpJiZjb25zb2xlLndhcm4oIm1hcmtlZCgpOiBoaWdobGlnaHQgYW5kIGxhbmdQcmVmaXggcGFyYW1ldGVycyBhcmUgZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDUuMC4wLCBzaG91bGQgbm90IGJlIHVzZWQgYW5k'@;
put 'IHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgZnV0dXJlLiBJbnN0ZWFkIHVzZSBodHRwczovL3d3dy5ucG1qcy5jb20vcGFja2FnZS9tYXJrZWQtaGlnaGxpZ2h0LiIpLGMubWFuZ2xlJiZjb25zb2xlLndhcm4oIm1hcmtlZCgpOiBtYW5nbGUgcGFyYW1ldGVyIGlzIGVuYWJsZWQgYnkgZGVmYXVs'@;
put 'dCwgYnV0IGlzIGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiA1LjAuMCwgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgZnV0dXJlLiBUbyBjbGVhciB0aGlzIHdhcm5pbmcsIGluc3RhbGwgaHR0cHM6Ly93d3cubnBtanMuY29tL3BhY2thZ2UvbWFya2VkLW1hbmdsZSwgb3IgZGlzYWJsZSBi'@;
put 'eSBzZXR0aW5nIGB7bWFuZ2xlOiBmYWxzZX1gLiIpLGMuYmFzZVVybCYmY29uc29sZS53YXJuKCJtYXJrZWQoKTogYmFzZVVybCBwYXJhbWV0ZXIgaXMgZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDUuMC4wLCBzaG91bGQgbm90IGJlIHVzZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUg'@;
put 'ZnV0dXJlLiBJbnN0ZWFkIHVzZSBodHRwczovL3d3dy5ucG1qcy5jb20vcGFja2FnZS9tYXJrZWQtYmFzZS11cmwuIiksYy5zbWFydHlwYW50cyYmY29uc29sZS53YXJuKCJtYXJrZWQoKTogc21hcnR5cGFudHMgcGFyYW1ldGVyIGlzIGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiA1LjAuMCwg'@;
put 'c2hvdWxkIG5vdCBiZSB1c2VkIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIGZ1dHVyZS4gSW5zdGVhZCB1c2UgaHR0cHM6Ly93d3cubnBtanMuY29tL3BhY2thZ2UvbWFya2VkLXNtYXJ0eXBhbnRzLiIpLGMueGh0bWwmJmNvbnNvbGUud2FybigibWFya2VkKCk6IHhodG1sIHBhcmFtZXRl'@;
put 'ciBpcyBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gNS4wLjAsIHNob3VsZCBub3QgYmUgdXNlZCBhbmQgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBmdXR1cmUuIEluc3RlYWQgdXNlIGh0dHBzOi8vd3d3Lm5wbWpzLmNvbS9wYWNrYWdlL21hcmtlZC14aHRtbC4iKSwoYy5oZWFkZXJJZHN8fGMu'@;
put 'aGVhZGVyUHJlZml4KSYmY29uc29sZS53YXJuKCJtYXJrZWQoKTogaGVhZGVySWRzIGFuZCBoZWFkZXJQcmVmaXggcGFyYW1ldGVycyBlbmFibGVkIGJ5IGRlZmF1bHQsIGJ1dCBhcmUgZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDUuMC4wLCBhbmQgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBm'@;
put 'dXR1cmUuIFRvIGNsZWFyIHRoaXMgd2FybmluZywgaW5zdGFsbCAgaHR0cHM6Ly93d3cubnBtanMuY29tL3BhY2thZ2UvbWFya2VkLWdmbS1oZWFkaW5nLWlkLCBvciBkaXNhYmxlIGJ5IHNldHRpbmcgYHtoZWFkZXJJZHM6IGZhbHNlfWAuIikpfShoLGYpLGguaG9va3MmJihoLmhvb2tzLm9w'@;
put 'dGlvbnM9aCksZil7Y29uc3QgRD1oLmhpZ2hsaWdodDtsZXQgWjt0cnl7aC5ob29rcyYmKGQ9aC5ob29rcy5wcmVwcm9jZXNzKGQpKSxaPWwoZCxoKX1jYXRjaChiZSl7cmV0dXJuIE0oYmUpfWNvbnN0IHJlPWJlPT57bGV0IEVlO2lmKCFiZSl0cnl7aC53YWxrVG9rZW5zJiZ0aGlzLndhbGtU'@;
put 'b2tlbnMoWixoLndhbGtUb2tlbnMpLEVlPWEoWixoKSxoLmhvb2tzJiYoRWU9aC5ob29rcy5wb3N0cHJvY2VzcyhFZSkpfWNhdGNoKEJlKXtiZT1CZX1yZXR1cm4gaC5oaWdobGlnaHQ9RCxiZT9NKGJlKTpmKG51bGwsRWUpfTtpZighRHx8RC5sZW5ndGg8M3x8KGRlbGV0ZSBoLmhpZ2hsaWdo'@;
put 'dCwhWi5sZW5ndGgpKXJldHVybiByZSgpO2xldCBjZT0wO3JldHVybiB0aGlzLndhbGtUb2tlbnMoWixiZT0+eyJjb2RlIj09PWJlLnR5cGUmJihjZSsrLHNldFRpbWVvdXQoKCk9PntEKGJlLnRleHQsYmUubGFuZywoRWUsQmUpPT57aWYoRWUpcmV0dXJuIHJlKEVlKTtudWxsIT1CZSYmQmUh'@;
put 'PT1iZS50ZXh0JiYoYmUudGV4dD1CZSxiZS5lc2NhcGVkPSEwKSxjZS0tLDA9PT1jZSYmcmUoKX0pfSwwKSl9KSx2b2lkKDA9PT1jZSYmcmUoKSl9aWYoaC5hc3luYylyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGguaG9va3M/aC5ob29rcy5wcmVwcm9jZXNzKGQpOmQpLnRoZW4oRD0+bChELGgp'@;
put 'KS50aGVuKEQ9Pmgud2Fsa1Rva2Vucz9Qcm9taXNlLmFsbCh0aGlzLndhbGtUb2tlbnMoRCxoLndhbGtUb2tlbnMpKS50aGVuKCgpPT5EKTpEKS50aGVuKEQ9PmEoRCxoKSkudGhlbihEPT5oLmhvb2tzP2guaG9va3MucG9zdHByb2Nlc3MoRCk6RCkuY2F0Y2goTSk7dHJ5e2guaG9va3MmJihk'@;
put 'PWguaG9va3MucHJlcHJvY2VzcyhkKSk7Y29uc3QgRD1sKGQsaCk7aC53YWxrVG9rZW5zJiZ0aGlzLndhbGtUb2tlbnMoRCxoLndhbGtUb2tlbnMpO2xldCBaPWEoRCxoKTtyZXR1cm4gaC5ob29rcyYmKFo9aC5ob29rcy5wb3N0cHJvY2VzcyhaKSksWn1jYXRjaChEKXtyZXR1cm4gTShEKX19'@;
put 'fSN0KGwsYSxkKXtyZXR1cm4gaD0+e2lmKGgubWVzc2FnZSs9IlxuUGxlYXNlIHJlcG9ydCB0aGlzIHRvIGh0dHBzOi8vZ2l0aHViLmNvbS9tYXJrZWRqcy9tYXJrZWQuIixsKXtjb25zdCBmPSI8cD5BbiBlcnJvciBvY2N1cnJlZDo8L3A+PHByZT4iK3gxKGgubWVzc2FnZSsiIiwhMCkrIjwv'@;
put 'cHJlPiI7cmV0dXJuIGE/UHJvbWlzZS5yZXNvbHZlKGYpOmQ/dm9pZCBkKG51bGwsZik6Zn1pZihhKXJldHVybiBQcm9taXNlLnJlamVjdChoKTtpZighZCl0aHJvdyBoO2QoaCl9fX0oUzYpO2Z1bmN0aW9uIFJsKGMsbCxhKXtyZXR1cm4gSzkucGFyc2UoYyxsLGEpfVJsLm9wdGlvbnM9Umwu'@;
put 'c2V0T3B0aW9ucz1mdW5jdGlvbihjKXtyZXR1cm4gSzkuc2V0T3B0aW9ucyhjKSxqNmUoUmwuZGVmYXVsdHM9SzkuZGVmYXVsdHMpLFJsfSxSbC5nZXREZWZhdWx0cz1mdW5jdGlvbiBudGUoKXtyZXR1cm57YXN5bmM6ITEsYmFzZVVybDpudWxsLGJyZWFrczohMSxleHRlbnNpb25zOm51bGws'@;
put 'Z2ZtOiEwLGhlYWRlcklkczohMCxoZWFkZXJQcmVmaXg6IiIsaGlnaGxpZ2h0Om51bGwsaG9va3M6bnVsbCxsYW5nUHJlZml4OiJsYW5ndWFnZS0iLG1hbmdsZTohMCxwZWRhbnRpYzohMSxyZW5kZXJlcjpudWxsLHNhbml0aXplOiExLHNhbml0aXplcjpudWxsLHNpbGVudDohMSxzbWFydHlw'@;
put 'YW50czohMSx0b2tlbml6ZXI6bnVsbCx3YWxrVG9rZW5zOm51bGwseGh0bWw6ITF9fSxSbC5kZWZhdWx0cz1TNixSbC51c2U9ZnVuY3Rpb24oLi4uYyl7cmV0dXJuIEs5LnVzZSguLi5jKSxqNmUoUmwuZGVmYXVsdHM9SzkuZGVmYXVsdHMpLFJsfSxSbC53YWxrVG9rZW5zPWZ1bmN0aW9uKGMs'@;
put 'bCl7cmV0dXJuIEs5LndhbGtUb2tlbnMoYyxsKX0sUmwucGFyc2VJbmxpbmU9SzkucGFyc2VJbmxpbmUsUmwuUGFyc2VyPW80LFJsLnBhcnNlcj1vNC5wYXJzZSxSbC5SZW5kZXJlcj1jTixSbC5UZXh0UmVuZGVyZXI9cnRlLFJsLkxleGVyPWE0LFJsLmxleGVyPWE0LmxleCxSbC5Ub2tlbml6'@;
put 'ZXI9bE4sUmwuU2x1Z2dlcj1pdGUsUmwuSG9va3M9dU4sUmwucGFyc2U9Umw7Y29uc3QgSGJ0PVsibWFya2Rvd25DYXJkIl07ZnVuY3Rpb24gTmJ0KGMsbCl7MSZjJiZHdCgwLCJjbHItc3Bpbm5lciIsOCl9bGV0IFZidD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMuc2FzU2Vy'@;
put 'dmljZT1hLHRoaXMuYWdyZWVDaGVja2VkPSExLHRoaXMuYWdyZWVCb3hMb2NrZWQ9ITAsdGhpcy5hZ3JlZUNsaWNrZWQ9ITEsdGhpcy5ldWxhX21hcmtkb3duPSdcbkxpY2VuY2UgQWdyZWVtZW50IGZvciBEYXRhIENvbnRyb2xsZXIgZm9yIFNBU1x4YWVcbj09PT09PT09PT09PT09PT09PT09'@;
put 'XG5cbkNvcHlyaWdodCAoYykgQm93ZSBJTyBMdGRcblxuRGF0YSBDb250cm9sbGVyIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIGJ5IDRHTCBBcHBzLCBhIGJyYW5kIG93bmVkIGJ5IEJvd2UgSU8gTHRkLCBhIFVLIExpbWl0ZWQgQ29tcGFueSBoZWFkcXVhcnRlZCBpbiAyOSBPbGRmaWVsZCBS'@;
put 'ZCwgQ3VtYnJpYSwgcmVnaXN0ZXJlZCBhdCBDb21wYW5pZXMgSG91c2Ugd2l0aCBjb21wYW55IG51bWJlciAwODc3NzE3MSwgVkFUIG51bWJlcjogMjAzOTE0MjQwXG5cblRoaXMgc29mdHdhcmUgaXMgcHJvdGVjdGVkIGJ5IGFwcGxpY2FibGUgY29weXJpZ2h0IGxhd3MsIGluY2x1ZGluZyBp'@;
put 'bnRlcm5hdGlvbmFsIHRyZWF0aWVzLCBhbmQgZHVhbC1saWNlbnNlZCBcdTIwMTMgZGVwZW5kaW5nIG9uIHdoZXRoZXIgeW91ciB1c2UgZm9yIGNvbW1lcmNpYWwgcHVycG9zZXMsIG1lYW5pbmcgaW50ZW5kZWQgZm9yIG9yIHJlc3VsdGluZyBpbiBjb21tZXJjaWFsIGFkdmFudGFnZSBvciBt'@;
put 'b25ldGFyeSBjb21wZW5zYXRpb24sIG9yIG5vdC5cblxuSWYgeW91ciB1c2UgaXMgc3RyaWN0bHkgcGVyc29uYWwgb3Igc29sZWx5IGZvciBldmFsdWF0aW9uIHB1cnBvc2VzLCBtZWFuaW5nIGZvciB0aGUgcHVycG9zZXMgb2YgdGVzdGluZyB0aGUgc3VpdGFiaWxpdHksIHBlcmZvcm1hbmNl'@;
put 'LCBhbmQgdXNlZnVsbmVzcyBvZiB0aGlzIHNvZnR3YXJlIG91dHNpZGUgdGhlIHByb2R1Y3Rpb24gZW52aXJvbm1lbnQsIHlvdSBhZ3JlZSB0byBiZSBib3VuZCBieSB0aGUgdGVybXMgaW5jbHVkZWQgaW4gdGhlICJsaWNlbmNlLW5vbi1jb21tZXJjaWFsLWRhdGFjb250cm9sbGVyLm1kIiBm'@;
put 'aWxlIGF2YWlsYWJsZSBoZXJlOiAgaHR0cHM6Ly9naXQuZGF0YWNvbnRyb2xsZXIuaW8vZGMvZGMvc3JjL2JyYW5jaC9tYWluL2xpY2VuY2Utbm9uLWNvbW1lcmNpYWwtZGF0YWNvbnRyb2xsZXIubWRcblxuWW91ciB1c2Ugb2YgdGhpcyBzb2Z0d2FyZSBmb3IgY29tbWVyY2lhbCBwdXJwb3Nl'@;
put 'cyBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBpbmNsdWRlZCBpbiBhbiBhcHBsaWNhYmxlIGxpY2Vuc2UgYWdyZWVtZW50LlxuXG5JbiBhbnkgY2FzZSwgeW91IG11c3Qgbm90IG1ha2UgYW55IHN1Y2ggdXNlIG9mIHRoaXMgc29mdHdhcmUgYXMgdG8gZGV2ZWxvcCBzb2Z0d2FyZSB3aGljaCBt'@;
put 'YXkgYmUgY29uc2lkZXJlZCBjb21wZXRpdGl2ZSB3aXRoIHRoaXMgc29mdHdhcmUuXG5cblVOTEVTUyBFWFBSRVNTTFkgQUdSRUVEIE9USEVSV0lTRSwgNEdMIEFQUFMgUFJPVklERVMgVEhJUyBTT0ZUV0FSRSBPTiBBTiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09O'@;
put 'RElUSU9OUyBPRiBBTlkgS0lORCwgQU5EIElOIE5PIEVWRU5UIEFORCBVTkRFUiBOTyBMRUdBTCBUSEVPUlksIFNIQUxMIDRHTCBBUFBTIEJFIExJQUJMRSBUTyBZT1UgRk9SIERBTUFHRVMsIElOQ0xVRElORyBBTlkgRElSRUNULCBJTkRJUkVDVCwgU1BFQ0lBTCwgSU5DSURFTlRBTCwgT1Ig'@;
put 'Q09OU0VRVUVOVElBTCBEQU1BR0VTIE9GIEFOWSBDSEFSQUNURVIgQVJJU0lORyBGUk9NIFVTRSBPUiBJTkFCSUxJVFkgVE8gVVNFIFRISVMgU09GVFdBUkUuXG5cblxuJ31uZ09uSW5pdCgpe2NvbnN0IGE9Umwuc2V0T3B0aW9ucyh7fSk7dGhpcy5ldWxhX21hcmtkb3duPWEucGFyc2UodGhp'@;
put 'cy5ldWxhX21hcmtkb3duKX1uZ0FmdGVyVmlld0luaXQoKXtzZXRUaW1lb3V0KCgpPT57dGhpcy5tYXJrZG93bkNhcmQmJnRoaXMubWFya2Rvd25DYXJkLm5hdGl2ZUVsZW1lbnQuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoInNjcm9sbCIpKX0pfXRlcm1zQWdyZWVDaGFuZ2UoKXt0'@;
put 'aGlzLmFncmVlQ2hlY2tlZCYmKHRoaXMuYWdyZWVCb3hMb2NrZWQ9ITAsdGhpcy5hZ3JlZUNsaWNrZWQ9ITAsdGhpcy5zYXNTZXJ2aWNlLnJlcXVlc3QoInB1YmxpYy9yZWdpc3RlcnVzZXIiLHtTQVNDb250cm9sVGFibGU6W3tBQ0NFUFRFRDoieWVzIn1dfSkudGhlbihkPT57ZC5hZGFwdGVy'@;
put 'UmVzcG9uc2UucmV0dXJuJiZkLmFkYXB0ZXJSZXNwb25zZS5yZXR1cm5bMF0mJiJTVUNDRVNTIj09PWQuYWRhcHRlclJlc3BvbnNlLnJldHVyblswXS5NU0cmJmxvY2F0aW9uLnJlbG9hZCgpfSkuY2F0Y2goZD0+ZCkuZmluYWxseSgoKT0+e3NldFRpbWVvdXQoKCk9Pnt0aGlzLmFncmVlQm94'@;
put 'TG9ja2VkPSExLHRoaXMuYWdyZWVDbGlja2VkPSExLHRoaXMuYWdyZWVDaGVja2VkPSExfSwxZTMpfSkpfW9uQ2FyZEJsb2NrU2Nyb2xsKGEpe2lmKCF0aGlzLmFncmVlQ2xpY2tlZCl7bGV0IGQ9YS50YXJnZXQ7ZCYmKHRoaXMuYWdyZWVCb3hMb2NrZWQ9IShkLnNjcm9sbFRvcCtkLm9mZnNl'@;
put 'dEhlaWdodD49ZC5zY3JvbGxIZWlnaHQtMjApKX19c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoR2UoQnMpKX19c3RhdGlje3RoaXMuXHUwMjc1Y21wPVZyKHt0eXBlOmMsc2VsZWN0b3JzOltbImFwcC10ZXJtcyJdXSx2aWV3UXVlcnk6ZnVuY3Rp'@;
put 'b24oZCxoKXtpZigxJmQmJnFhKEhidCw1KSwyJmQpe2xldCBmO0NpKGY9U2koKSkmJihoLm1hcmtkb3duQ2FyZD1mLmZpcnN0KX19LGRlY2xzOjEzLHZhcnM6Nixjb25zdHM6W1sibWFya2Rvd25DYXJkIiwiIl0sWzEsImNhcmQiXSxbMSwiY2FyZC1oZWFkZXIiXSxbMSwiY2FyZC1ibG9jayIs'@;
put 'Mywic2Nyb2xsIiwiaW5uZXJIVE1MIl0sWzEsImQtZmxleCIsImNsci1hbGlnbi1pdGVtcy1jZW50ZXIiXSxbMSwiYWNjZXB0LWNoZWNrYm94Il0sWyJjbHJDaGVja2JveCIsIiIsInR5cGUiLCJjaGVja2JveCIsMywibmdNb2RlbENoYW5nZSIsImNoYW5nZSIsIm5nTW9kZWwiLCJkaXNhYmxl'@;
put 'ZCJdLFsiY2xySW5saW5lIiwic21hbGwiLDQsIm5nSWYiXSxbImNscklubGluZSIsInNtYWxsIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGQsaCl7aWYoMSZkKXtjb25zdCBmPUxuKCk7ZGUoMCwiZGl2IiwxKSgxLCJkaXYiLDIpLExlKDIsIiBFbmQgVXNlciBMaWNlbnNlIEFncmVlbWVudCAiKSxk'@;
put 'ZSgzLCJwIiksTGUoNCwiIFdlbGNvbWUgdG8gRGF0YSBDb250cm9sbGVyIGZvciBTQVMhIFBsZWFzZSByZXZpZXcgYW5kIGFjY2VwdCBhZ3JlZW1lbnQgYmVsb3cgaW4gb3JkZXIgdG8gcHJvY2VlZC4gIiksaGUoKSgpLGRlKDUsImRpdiIsMywwKSxGdCgic2Nyb2xsIixmdW5jdGlvbihNKXty'@;
put 'ZXR1cm4gd3QoZiksQ3QoaC5vbkNhcmRCbG9ja1Njcm9sbChNKSl9KSxoZSgpLGRlKDcsImRpdiIsNCkoOCwiY2xyLWNoZWNrYm94LXdyYXBwZXIiLDUpKDksImlucHV0Iiw2KSxnaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oTSl7cmV0dXJuIHd0KGYpLG1pKGguYWdyZWVDaGVja2VkLE0p'@;
put 'fHwoaC5hZ3JlZUNoZWNrZWQ9TSksQ3QoTSl9KSxGdCgiY2hhbmdlIixmdW5jdGlvbigpe3JldHVybiB3dChmKSxDdChoLnRlcm1zQWdyZWVDaGFuZ2UoKSl9KSxoZSgpLGRlKDEwLCJsYWJlbCIpLExlKDExLCJJIGhhdmUgcmVhZCBhbmQgYWdyZWUgdG8gdGhlIHRlcm1zIG9mIGFib3ZlLiIp'@;
put 'LGhlKCkoKSxndCgxMixOYnQsMSwwLCJjbHItc3Bpbm5lciIsNyksaGUoKSgpfTImZCYmKGZlKDUpLE1lKCJpbm5lckhUTUwiLGguZXVsYV9tYXJrZG93bixWNCksZmUoMyksVHIoImRpc2FibGVkIixoLmFncmVlQm94TG9ja2VkKSxmZSgpLHBpKCJuZ01vZGVsIixoLmFncmVlQ2hlY2tlZCks'@;
put 'TWUoImRpc2FibGVkIixoLmFncmVlQm94TG9ja2VkKSxmZSgzKSxNZSgibmdJZiIsaC5hZ3JlZUJveExvY2tlZCYmaC5hZ3JlZUNsaWNrZWQpKX0sZGVwZW5kZW5jaWVzOltiYSxNZCxubCwkcyxkcyxJZCxTaCxSZF0sZW5jYXBzdWxhdGlvbjoyfSl9fXJldHVybiBjfSkoKTtmdW5jdGlvbiBC'@;
put 'YnQoYyxsKXsxJmMmJihkZSgwLCJwIiwyOSksTGUoMSwiIExpY2VuY2Uga2V5IGlzIGludmFsaWQuIFdlIGNhbid0IHByb3ZpZGUgeW91IG1vcmUgZGV0YWlscyBhdCB0aGUgbW9tZW50ICIpLGhlKCkpfWZ1bmN0aW9uIGpidChjLGwpe2lmKDEmYyYmR3QoMCwicCIsMzApLDImYyl7Y29uc3Qg'@;
put 'YT1SZSgzKTtNZSgiaW5uZXJIVE1MIixhLmxpY2Vuc2VFcnJvcnNbYS5rZXlFcnJvcl0sVjQpfX1mdW5jdGlvbiB6YnQoYyxsKXtpZigxJmMmJihkZSgwLCJwIikoMSwic3Ryb25nIiksTGUoMiwiRGV0YWlsczoiKSxoZSgpLExlKDMpLGhlKCkpLDImYyl7Y29uc3QgYT1SZSgzKTtmZSgzKSxE'@;
put 'cigiICIsYS5lcnJvckRldGFpbHMsIiIpfX1mdW5jdGlvbiBVYnQoYyxsKXtpZigxJmMmJihzaSgwKSxndCgxLEJidCwyLDAsInAiLDI3KSgyLGpidCwxLDEsInAiLDI4KSgzLHpidCw0LDEsInAiLDQpLGxpKCkpLDImYyl7Y29uc3QgYT1SZSgyKTtmZSgpLE1lKCJuZ0lmIiwhYS5rZXlFcnJv'@;
put 'ciksZmUoKSxNZSgibmdJZiIsYS5rZXlFcnJvciksZmUoKSxNZSgibmdJZiIsYS5lcnJvckRldGFpbHMpfX1mdW5jdGlvbiBaYnQoYyxsKXsxJmMmJihzaSgwKSxkZSgxLCJwIiwyOSksTGUoMiwiIFRoZSByZWdpc3RlcmVkIG51bWJlciBvZiB1c2VycyByZWFjaGVkIHRoZSBsaW1pdCBzcGVj'@;
put 'aWZpZWQgZm9yIHlvdXIgbGljZW5jZS4gUGxlYXNlIGNvbnRhY3QgIiksR3QoMywiY29udGFjdC1saW5rIiwzMSksTGUoNCwiIG9yIHlvdXIgcmVzZWxsZXIgdG8gYXJyYW5nZSBhZGRpdGlvbmFsIGxpY2VuY2VzIGZvciB0aGlzIHByb2R1Y3QuICIpLGhlKCksbGkoKSl9ZnVuY3Rpb24gV2J0'@;
put 'KGMsbCl7MSZjJiYoc2koMCksZGUoMSwicCIsMjkpLExlKDIsIiBVcGRhdGUgdGhlIGxpY2Vuc2Uga2V5IGJ5IHVwbG9hZGluZyB0aGUgbGljZW5jZSBmaWxlIG9yIGJ5IHBhc3RpbmcgYSBsaWNlbnNlIGtleSBhbmQgYWN0aXZhdGlvbiBrZXkgaW4gdGhlIGlucHV0cyBiZWxvdy4gIiksaGUo'@;
put 'KSxsaSgpKX1mdW5jdGlvbiBZYnQoYyxsKXtpZigxJmMmJihkZSgwLCJzcGFuIiksTGUoMSksaGUoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0LGQ9bC5pbmRleCxoPVJlKDIpO1RyKCJtaXNza2V5IixoLm1pc3NtYXRjaGVkS2V5JiZoLm1pc3NtYXRjaGVkS2V5PT09YSksZmUoKSxVdSgi'@;
put 'ICIsYSwiIixkPT09KG51bGw9PWguc3lzc2l0ZS52YWx1ZT9udWxsOmguc3lzc2l0ZS52YWx1ZS5sZW5ndGgpLTE/IiI6IiwiLCIgIil9fWZ1bmN0aW9uIEdidChjLGwpe2lmKDEmYyYmKGRlKDAsInAiLDMyKSgxLCJzdHJvbmciKSxMZSgyLCJBbGxvd2VkIHVzZXJzOiIpLGhlKCksTGUoMyks'@;
put 'aGUoKSksMiZjKXtjb25zdCBhPVJlKDIpO2ZlKDMpLERyKCIgIixhLmxpY2Vuc2VLZXlEYXRhLnVzZXJzX2FsbG93ZWQsIiAiKX19ZnVuY3Rpb24gJGJ0KGMsbCl7MSZjJiZHdCgwLCJjbHItc3Bpbm5lciIsMzMpfWZ1bmN0aW9uIEtidChjLGwpezEmYyYmKGRlKDAsImRpdiIpLExlKDEsIiBE'@;
put 'cm9wIC8gQnJvd3NlIGxpY2VuY2UgZmlsZSAiKSxoZSgpKX1mdW5jdGlvbiBxYnQoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiKSxMZSgxLCIgU2VsZWN0ZWQgZmlsZTogIiksZGUoMiwic3Ryb25nIiksTGUoMyksaGUoKSgpKSwyJmMpe2NvbnN0IGE9UmUoMyk7ZmUoMyksd3IoYS5saWNlbmNl'@;
put 'ZmlsZS5maWxlbmFtZSl9fWZ1bmN0aW9uIFhidChjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIpKDEsInN0cm9uZyIpLExlKDIpLGhlKCkoKSksMiZjKXtjb25zdCBhPVJlKDMpO2ZlKDIpLHdyKGEubGljZW5jZUZpbGVFcnJvcil9fWZ1bmN0aW9uIEpidChjLGwpe2lmKDEmYyYmKHNpKDApLGd0'@;
put 'KDEsS2J0LDIsMCwiZGl2Iiw0KSgyLHFidCw0LDEsImRpdiIsNCkoMyxYYnQsMywxLCJkaXYiLDQpLGxpKCkpLDImYyl7Y29uc3QgYT1SZSgyKTtmZSgpLE1lKCJuZ0lmIiwiIj09PWEubGljZW5jZWZpbGUuZmlsZW5hbWUpLGZlKCksTWUoIm5nSWYiLCIiIT09YS5saWNlbmNlZmlsZS5maWxl'@;
put 'bmFtZSksZmUoKSxNZSgibmdJZiIsYS5saWNlbmNlRmlsZUVycm9yKX19ZnVuY3Rpb24gUWJ0KGMsbCl7MSZjJiYoZGUoMCwiYnV0dG9uIiwzNCksTGUoMSwiIENvbnRpbnVlIHdpdGggZnJlZSB0aWVyICIpLGhlKCkpfWZ1bmN0aW9uIGV5dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2Rl'@;
put 'KDAsImRpdiIsNSkoMSwiZGl2Iiw2KSxMZSgyLCJMaWNlbmNpbmciKSxoZSgpLGRlKDMsImRpdiIsNykoNCwiZGl2Iiw4KSxndCg1LFVidCw0LDMsIm5nLWNvbnRhaW5lciIsOSkoNixaYnQsNSwwLCJuZy1jb250YWluZXIiLDkpKDcsV2J0LDMsMCwibmctY29udGFpbmVyIiw5KSxkZSg4LCJw'@;
put 'IikoOSwic3Ryb25nIiksTGUoMTAsIlNZU1NJVEU6IiksaGUoKSxndCgxMSxZYnQsMiw0LCJzcGFuIiwxMCksZGUoMTIsImEiLDExKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1oYSgxNCksZj1oYSgxNiksdj1SZSgpO3JldHVybiBDdCh2LmNvcHlTeXNzaXRlKGgsZix2'@;
put 'LnN5c3NpdGUudmFsdWV8fFtdKSl9KSxHdCgxMywiY2xyLWljb24iLDEyLDApLGRlKDE1LCJzcGFuIiwxMywxKSxMZSgxNywiQ29weSB0byBjbGlwYm9hcmQiKSxoZSgpKCkoKSxndCgxOCxHYnQsNCwxLCJwIiwxNCksZGUoMTksImNsci10YWJzIikoMjAsImNsci10YWIiKSgyMSwiYnV0dG9u'@;
put 'IiwxNSksTGUoMjIsIlVwbG9hZCBsaWNlbmNlIiksaGUoKSxkZSgyMywiY2xyLXRhYi1jb250ZW50IikoMjQsImlucHV0IiwxNiwyKSxGdCgiY2hhbmdlIixmdW5jdGlvbihoKXtyZXR1cm4gd3QoYSksQ3QoUmUoKS5vbkZpbGVDYXB0dXJlKGgpKX0pLGhlKCksZGUoMjYsImRpdiIsMTcpLEZ0'@;
put 'KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoaGEoMjUpLmNsaWNrKCkpfSkoImZpbGVEcm9wIixmdW5jdGlvbihoKXtyZXR1cm4gd3QoYSksQ3QoUmUoKS5vbkZpbGVDYXB0dXJlKGgsITApKX0pLGd0KDI3LCRidCwxLDAsImNsci1zcGlubmVyIiwxOCkoMjgsSmJ0LDQsMywi'@;
put 'bmctY29udGFpbmVyIiw0KSxoZSgpKCkoKSxkZSgyOSwiY2xyLXRhYiIpKDMwLCJidXR0b24iLDE1KSxMZSgzMSwiUGFzdGUgbGljZW5jZSIpLGhlKCksZGUoMzIsImNsci10YWItY29udGVudCIpKDMzLCJmb3JtIiwxOSkoMzQsInAiKSxMZSgzNSwiTGljZW5jZSBrZXk6IiksaGUoKSxkZSgz'@;
put 'NiwiZGl2IiwyMCkoMzcsInRleHRhcmVhIiwyMSksZ2koIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9UmUoKTtyZXR1cm4gbWkoZi5saWNlbmNlS2V5VmFsdWUsaCl8fChmLmxpY2VuY2VLZXlWYWx1ZT1oKSxDdChoKX0pLEZ0KCJtb3VzZWxlYXZlIixmdW5jdGlv'@;
put 'bigpe3JldHVybiB3dChhKSxDdChSZSgpLnRyaW1LZXlzKCkpfSksaGUoKSgpKCksZGUoMzgsImZvcm0iLDIyKSgzOSwicCIpLExlKDQwLCJBY3RpdmF0aW9uIGtleToiKSxoZSgpLGRlKDQxLCJkaXYiLDIwKSg0MiwidGV4dGFyZWEiLDIzKSxnaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24o'@;
put 'aCl7d3QoYSk7Y29uc3QgZj1SZSgpO3JldHVybiBtaShmLmFjdGl2YXRpb25LZXlWYWx1ZSxoKXx8KGYuYWN0aXZhdGlvbktleVZhbHVlPWgpLEN0KGgpfSksRnQoIm1vdXNlbGVhdmUiLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KFJlKCkudHJpbUtleXMoKSl9KSxoZSgpKCkoKSgpKCko'@;
put 'KSgpLGRlKDQzLCJkaXYiLDI0KSg0NCwiYnV0dG9uIiwyNSksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChSZSgpLmFwcGx5S2V5cygpKX0pLExlKDQ1LCIgQXBwbHkgbGljZW5jZSBrZXlzICIpLGhlKCksZ3QoNDYsUWJ0LDIsMCwiYnV0dG9uIiwyNiksaGUoKSgpKCl9'@;
put 'aWYoMiZjKXtjb25zdCBhPVJlKCk7ZmUoMyksTWUoIm5nU3dpdGNoIixhLmFjdGlvbiksZmUoMiksTWUoIm5nU3dpdGNoQ2FzZSIsImtleSIpLGZlKCksTWUoIm5nU3dpdGNoQ2FzZSIsImxpbWl0IiksZmUoKSxNZSgibmdTd2l0Y2hDYXNlIiwidXBkYXRlIiksZmUoNCksTWUoIm5nRm9yT2Yi'@;
put 'LGEuc3lzc2l0ZS52YWx1ZSksZmUoNyksTWUoIm5nSWYiLGEubGljZW5zZUtleURhdGEmJmEudXNlckNvdW50TGltaXRhdGlvbiksZmUoOSksTWUoIm5nSWYiLGEubGljZW5jZUZpbGVMb2FkaW5nKSxmZSgpLE1lKCJuZ0lmIiwhYS5saWNlbmNlRmlsZUxvYWRpbmcpLGZlKDkpLHBpKCJuZ01v'@;
put 'ZGVsIixhLmxpY2VuY2VLZXlWYWx1ZSksZmUoNSkscGkoIm5nTW9kZWwiLGEuYWN0aXZhdGlvbktleVZhbHVlKSxmZSgyKSxNZSgiY2xyTG9hZGluZyIsYS5hcHBseWluZ0tleXMpKCJkaXNhYmxlZCIsYS5kaXNhYmxlQXBwbHlCdXR0b24pLGZlKDIpLE1lKCJuZ0lmIixhLmlzQXBwRnJlZVRp'@;
put 'ZXIudmFsdWUpfX1mdW5jdGlvbiB0eXQoYyxsKXsxJmMmJkd0KDAsImFwcC10ZXJtcyIpfXZhciBxNmU9ZnVuY3Rpb24oYyl7cmV0dXJuIGMua2V5PSJrZXkiLGMucmVnaXN0ZXI9InJlZ2lzdGVyIixjLmxpbWl0PSJsaW1pdCIsYy51cGRhdGU9InVwZGF0ZSIsY30ocTZlfHx7fSk7Y29uc3Qg'@;
put 'bnl0PVt7cGF0aDoiOmFjdGlvbiIsY29tcG9uZW50OigoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZil7dGhpcy5yb3V0ZT1hLHRoaXMubGljZW5jZVNlcnZpY2U9ZCx0aGlzLnNhc1NlcnZpY2U9aCx0aGlzLmFwcFNlcnZpY2U9Zix0aGlzLmFjdGlvbj1udWxsLHRoaXMubGljZW5z'@;
put 'ZUVycm9ycz17bWlzc2luZzonTGljZW5jZSBrZXkgaXMgbWlzc2luZyAtIHBsZWFzZSBjb250YWN0IDxhIGNsYXNzPSJjb2xvci1ncmVlbiIgaHJlZj0ibWFpbHRvOiBzdXBwb3J0QGRhdGFjb250cm9sbGVyLmlvIj5zdXBwb3J0QGRhdGFjb250cm9sbGVyLmlvPC9hPiBhbmQgZW50ZXIgdmFs'@;
put 'aWQga2V5cyBiZWxvdy4nLGV4cGlyZWQ6J0xpY2VuY2Uga2V5IGlzIGV4cGlyZWQgLSBwbGVhc2UgY29udGFjdCA8YSBjbGFzcz0iY29sb3ItZ3JlZW4iIGhyZWY9Im1haWx0bzogc3VwcG9ydEBkYXRhY29udHJvbGxlci5pbyI+c3VwcG9ydEBkYXRhY29udHJvbGxlci5pbzwvYT4gYW5kIGVu'@;
put 'dGVyIHZhbGlkIGtleXMgYmVsb3cuJyxpbnZhbGlkOidMaWNlbmNlIGtleSBpcyBpbnZhbGlkIC0gcGxlYXNlIGNvbnRhY3QgPGEgY2xhc3M9ImNvbG9yLWdyZWVuIiBocmVmPSJtYWlsdG86IHN1cHBvcnRAZGF0YWNvbnRyb2xsZXIuaW8iPnN1cHBvcnRAZGF0YWNvbnRyb2xsZXIuaW88L2E+'@;
put 'IGFuZCBlbnRlciB2YWxpZCBrZXlzIGJlbG93LicsbWlzc21hdGNoOidZb3VyIFNZU1NJVEUgKGJlbG93KSBpcyBub3QgZm91bmQgaW4gdGhlIGxpY2VuY2Uga2V5IC0gcGxlYXNlIGNvbnRhY3QgPGEgY2xhc3M9ImNvbG9yLWdyZWVuIiBocmVmPSJtYWlsdG86IHN1cHBvcnRAZGF0YWNvbnRy'@;
put 'b2xsZXIuaW8iPnN1cHBvcnRAZGF0YWNvbnRyb2xsZXIuaW88L2E+IGFuZCBlbnRlciB2YWxpZCBrZXlzIGJlbG93Lid9LHRoaXMubGljZW5jZUtleVZhbHVlPSIiLHRoaXMuYWN0aXZhdGlvbktleVZhbHVlPSIiLHRoaXMuYXBwbHlpbmdLZXlzPSExLHRoaXMuc3lzc2l0ZT10aGlzLmFwcFNl'@;
put 'cnZpY2Uuc3lzc2l0ZSx0aGlzLmN1cnJlbnRMaWNlbmNlS2V5PXRoaXMubGljZW5jZVNlcnZpY2UubGljZW5jZUtleSx0aGlzLmN1cnJlbnRBY3RpdmF0aW9uS2V5PXRoaXMubGljZW5jZVNlcnZpY2UuYWN0aXZhdGlvbktleSx0aGlzLmlzQXBwRnJlZVRpZXI9dGhpcy5saWNlbmNlU2Vydmlj'@;
put 'ZS5pc0FwcEZyZWVUaWVyLHRoaXMudXNlckNvdW50TGltaXRhdGlvbj10aGlzLmxpY2VuY2VTZXJ2aWNlLnVzZXJDb3VudExpbWl0YXRpb24sdGhpcy5saWNlbnNlS2V5RGF0YT1udWxsLHRoaXMuaW5wdXRUeXBlPSJmaWxlIix0aGlzLmxpY2VuY2VGaWxlTG9hZGluZz0hMSx0aGlzLmxpY2Vu'@;
put 'Y2VmaWxlPXtmaWxlbmFtZToiIn19bmdPbkluaXQoKXt0aGlzLmxpY2VuY2VLZXlWYWx1ZT10aGlzLmN1cnJlbnRMaWNlbmNlS2V5fHwiIix0aGlzLmFjdGl2YXRpb25LZXlWYWx1ZT10aGlzLmN1cnJlbnRBY3RpdmF0aW9uS2V5fHwiIix0aGlzLnJvdXRlLnF1ZXJ5UGFyYW1zLnN1YnNjcmli'@;
put 'ZShhPT57dGhpcy5rZXlFcnJvcj1hLmVycm9yLHRoaXMubWlzc21hdGNoZWRLZXk9YS5taXNzbWF0Y2hJZCxhLmRldGFpbHMmJih0aGlzLmVycm9yRGV0YWlscz1hdG9iKGEuZGV0YWlscykpfSksdGhpcy5yb3V0ZS5wYXJhbXMuc3Vic2NyaWJlKGE9PntsZXQgZD1hLmFjdGlvbjtkJiZPYmpl'@;
put 'Y3QudmFsdWVzKHE2ZSkuaW5jbHVkZXMoZCkmJih0aGlzLmFjdGlvbj1kKX0pLHRoaXMubGljZW5zZUtleURhdGE9dGhpcy5saWNlbmNlU2VydmljZS5nZXRMaWNlbnNlS2V5RGF0YSgpfXRyaW1LZXlzKCl7dGhpcy5saWNlbmNlS2V5VmFsdWU9dGhpcy5saWNlbmNlS2V5VmFsdWUudHJpbSgp'@;
put 'LHRoaXMuYWN0aXZhdGlvbktleVZhbHVlPXRoaXMuYWN0aXZhdGlvbktleVZhbHVlLnRyaW0oKX1jb3B5U3lzc2l0ZShhLGQsaCl7Y29uc3QgZj1oLmpvaW4oIlxuIik7bmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQoZikudGhlbigoKT0+e2Euc2V0QXR0cmlidXRlKCJzaGFwZSIsImNo'@;
put 'ZWNrIiksYS5zZXRBdHRyaWJ1dGUoImNsYXNzIiwiaXMtc3VjY2VzcyIpLGQuaW5uZXJUZXh0PSJDb3BpZWQhIixzZXRUaW1lb3V0KCgpPT57YS5zZXRBdHRyaWJ1dGUoInNoYXBlIiwiY29weSIpLGEucmVtb3ZlQXR0cmlidXRlKCJjbGFzcyIpLGQuaW5uZXJUZXh0PSJDb3B5IHRvIGNsaXBi'@;
put 'b2FyZCJ9LDFlMyl9KX1hcHBseUtleXMoKXt0aGlzLmFwcGx5aW5nS2V5cz0hMCx0aGlzLnNhc1NlcnZpY2UucmVxdWVzdCgiYWRtaW4vcmVnaXN0ZXJrZXkiLHtrZXl1cGxvYWQ6W3tBQ1RJVkFUSU9OX0tFWTp0aGlzLmFjdGl2YXRpb25LZXlWYWx1ZSxMSUNFTkNFX0tFWTp0aGlzLmxpY2Vu'@;
put 'Y2VLZXlWYWx1ZX1dfSkudGhlbihkPT57ZC5hZGFwdGVyUmVzcG9uc2UucmV0dXJuJiZkLmFkYXB0ZXJSZXNwb25zZS5yZXR1cm5bMF0mJiJTVUNDRVNTIj09PWQuYWRhcHRlclJlc3BvbnNlLnJldHVyblswXS5NU0cmJmxvY2F0aW9uLnJlcGxhY2UobG9jYXRpb24uaHJlZi5zcGxpdCgiIyIp'@;
put 'WzBdKX0pLmZpbmFsbHkoKCk9Pnt0aGlzLmFwcGx5aW5nS2V5cz0hMX0pfW9uRmlsZUNhcHR1cmUoYSxkPSExKXtsZXQgaD1kP2FbMF06YS50YXJnZXQuZmlsZXNbMF07aWYodGhpcy5saWNlbmNlZmlsZS5maWxlbmFtZT1oLm5hbWUsIWgpcmV0dXJuO3RoaXMubGljZW5jZUZpbGVMb2FkaW5n'@;
put 'PSEwO2NvbnN0IGY9bmV3IEZpbGVSZWFkZXI7Zi5vbmxvYWQ9dj0+e2lmKHRoaXMubGljZW5jZUZpbGVFcnJvcj0iRXJyb3IgcmVhZGluZyBmaWxlLiIsIXZ8fCF2LnRhcmdldHx8MiE9di50YXJnZXQucmVhZHlTdGF0ZXx8di50YXJnZXQuZXJyb3J8fCF2LnRhcmdldC5yZXN1bHQpcmV0dXJu'@;
put 'O3RoaXMubGljZW5jZUZpbGVMb2FkaW5nPSExLHRoaXMubGljZW5jZUZpbGVFcnJvcj12b2lkIDA7Y29uc3QgTT12LnRhcmdldC5yZXN1bHQudG9TdHJpbmcoKS5zcGxpdCgiXG4iKTt0aGlzLmFjdGl2YXRpb25LZXlWYWx1ZT1NWzFdLHRoaXMubGljZW5jZUtleVZhbHVlPU1bMF19LGYucmVh'@;
put 'ZEFzVGV4dChoKX1zd2l0Y2hUeXBlKGEpe3RoaXMuaW5wdXRUeXBlPWF9Z2V0IGRpc2FibGVBcHBseUJ1dHRvbigpe3JldHVybiB0aGlzLmxpY2VuY2VLZXlWYWx1ZS5sZW5ndGg8MXx8dGhpcy5hY3RpdmF0aW9uS2V5VmFsdWUubGVuZ3RoPDF8fHRoaXMubGljZW5jZUtleVZhbHVlPT09dGhp'@;
put 'cy5jdXJyZW50TGljZW5jZUtleSYmdGhpcy5hY3RpdmF0aW9uS2V5VmFsdWU9PT10aGlzLmN1cnJlbnRBY3RpdmF0aW9uS2V5fXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKEdlKEN1KSxHZSh1MSksR2UoQnMpLEdlKG9MKSl9fXN0YXRpY3t0aGlz'@;
put 'Llx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAtbGljZW5zaW5nIl1dLGRlY2xzOjIsdmFyczoyLGNvbnN0czpbWyJjb3B5SWNvbiIsIiJdLFsiY29weVRvb2x0aXAiLCIiXSxbImxpY2VuY2VGaWxlIiwiIl0sWyJjbGFzcyIsImNhcmQiLDQsIm5nSWYiXSxbNCwibmdJZiJd'@;
put 'LFsxLCJjYXJkIl0sWzEsImNhcmQtaGVhZGVyIl0sWzEsImNhcmQtYmxvY2siLDMsIm5nU3dpdGNoIl0sWzEsImNhcmQtdGV4dCJdLFs0LCJuZ1N3aXRjaENhc2UiXSxbMywibWlzc2tleSIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzEsInRvb2x0aXAiLCJ0b29sdGlwLW1kIiwidG9vbHRpcC10'@;
put 'b3AtcmlnaHQiLDMsImNsaWNrIl0sWyJzaGFwZSIsImNvcHkiLCJzaXplIiwiMTUiLDEsImN1cnNvci1wb2ludGVyIl0sWzEsInRvb2x0aXAtY29udGVudCJdLFsiY2xhc3MiLCJtLTAiLDQsIm5nSWYiXSxbImNsclRhYkxpbmsiLCIiXSxbInR5cGUiLCJmaWxlIiwiaGlkZGVuIiwiIiwzLCJj'@;
put 'aGFuZ2UiXSxbImFwcEZpbGVEcm9wIiwiIiwxLCJkcm9wLWFyZWEiLDMsImNsaWNrIiwiZmlsZURyb3AiXSxbImNsYXNzIiwic3Bpbm5lci1zbSIsNCwibmdJZiJdLFsxLCJjbHItZm9ybSIsImxpY2Vuc2Uta2V5LWZvcm0iXSxbMSwiY2xyLWNvbnRyb2wtY29udGFpbmVyIl0sWyJuYW1lIiwi'@;
put 'bGljZW5zZS1rZXktYXJlYSIsInBsYWNlaG9sZGVyIiwiUGFzdGUgbGljZW5jZSBrZXkgaGVyZSIsMSwiY2xyLXRleHRhcmVhIiwzLCJuZ01vZGVsQ2hhbmdlIiwibW91c2VsZWF2ZSIsIm5nTW9kZWwiXSxbMSwiY2xyLWZvcm0iLCJhY3RpdmF0aW9uLWtleS1mb3JtIl0sWyJuYW1lIiwiYWN0'@;
put 'aXZhdGlvbi1rZXktYXJlYSIsInBsYWNlaG9sZGVyIiwiUGFzdGUgYWN0aXZhdGlvbiBrZXkgaGVyZSIsMSwiY2xyLXRleHRhcmVhIiwzLCJuZ01vZGVsQ2hhbmdlIiwibW91c2VsZWF2ZSIsIm5nTW9kZWwiXSxbMSwiY2FyZC1mb290ZXIiLCJkLWZsZXgiLCJjbHItYWxpZ24taXRlbXMtY2Vu'@;
put 'dGVyIl0sWzEsImJ0biIsImJ0bi1wcmltYXJ5IiwiYXBwbHkta2V5cyIsMywiY2xpY2siLCJjbHJMb2FkaW5nIiwiZGlzYWJsZWQiXSxbInJvdXRlckxpbmsiLCIvIiwiY2xhc3MiLCJidG4gYnRuLXNtIGJ0bi1saW5rIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImtleS1lcnJvciIsNCwibmdJZiJd'@;
put 'LFsiY2xhc3MiLCJrZXktZXJyb3IiLDMsImlubmVySFRNTCIsNCwibmdJZiJdLFsxLCJrZXktZXJyb3IiXSxbMSwia2V5LWVycm9yIiwzLCJpbm5lckhUTUwiXSxbImNsYXNzZXMiLCJjb2xvci1ncmVlbiJdLFsxLCJtLTAiXSxbMSwic3Bpbm5lci1zbSJdLFsicm91dGVyTGluayIsIi8iLDEs'@;
put 'ImJ0biIsImJ0bi1zbSIsImJ0bi1saW5rIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGQsaCl7MSZkJiZndCgwLGV5dCw0NywxMywiZGl2IiwzKSgxLHR5dCwxLDAsImFwcC10ZXJtcyIsNCksMiZkJiYoTWUoIm5nSWYiLCJyZWdpc3RlciIhPT1oLmFjdGlvbiksZmUoKSxNZSgibmdJZiIsInJlZ2lz'@;
put 'dGVyIj09PWguYWN0aW9uKSl9LGRlcGVuZGVuY2llczpbbnMsYmEsUzIsY3AsbDcscWwsbmwsbzcsJHMseXAsSGwsajAsUDIsX20sQ20seDcsd20seW0sUzcsUmQsYzEsVmJ0LHBPXSxlbmNhcHN1bGF0aW9uOjJ9KX19cmV0dXJuIGN9KSgpLGNhbkFjdGl2YXRlOlt0dGVdLGNhbkRlYWN0aXZh'@;
put 'dGU6W3R0ZV19XTtsZXQgcnl0PSgoKT0+e2NsYXNzIGN7c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NW1vZD1raSh7dHlwZTpjfSl9c3RhdGlje3RoaXMuXHUwMjc1aW5qPUFyKHtpbXBvcnRzOlt6Yy5mb3JDaGls'@;
put 'ZChueXQpLHpjXX0pfX1yZXR1cm4gY30pKCksaXl0PSgoKT0+e2NsYXNzIGN7c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NW1vZD1raSh7dHlwZTpjfSl9c3RhdGlje3RoaXMuXHUwMjc1aW5qPUFyKHtpbXBvcnRz'@;
put 'OltSYSxSYyx6MCxyeXQsQ3ddfSl9fXJldHVybiBjfSkoKTtjb25zdCBheXQ9KCk9Pih7c3RhbmRhbG9uZTohMH0pLFg2ZT0oYyxsLGEpPT4oe2FkZGVkUm93OmMsZGVsZXRlZFJvdzpsLHVwZGF0ZWRSb3c6YX0pLEo2ZT1jPT4oeyJjaCB0b29sdGlwIHRvb2x0aXAtbWQgdG9vbHRpcC10b3At'@;
put 'cmlnaHQiOmN9KTtmdW5jdGlvbiBveXQoYyxsKXtpZigxJmMmJihkZSgwLCJ0ZCIsMTkpLExlKDEpLGhlKCkpLDImYyl7Y29uc3QgYT1SZSgpLiRpbXBsaWNpdCxkPVJlKCk7TWUoInJvdXRlckxpbmsiLCIvc3RhZ2UvIitkLmpzUGFyYW1zW2FdKSxmZSgpLERyKCIgIixkLmpzUGFyYW1zW2Fd'@;
put 'LCIgIil9fWZ1bmN0aW9uIHN5dChjLGwpe2lmKDEmYyYmKGRlKDAsInRkIiw0KSxMZSgxKSxoZSgpKSwyJmMpe2NvbnN0IGE9UmUoKS4kaW1wbGljaXQsZD1SZSgpO2ZlKCksRHIoIiAiLGQuanNQYXJhbXNbYV0sIiAiKX19ZnVuY3Rpb24gbHl0KGMsbCl7aWYoMSZjJiYoZGUoMCwidHIiKSgx'@;
put 'LCJ0ZCIsNCksTGUoMiksaGUoKSxndCgzLG95dCwyLDIsInRkIiwxNykoNCxzeXQsMiwxLCJ0ZCIsMTgpLGhlKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtmZSgyKSx3cihhKSxmZSgpLE1lKCJuZ0lmIixhLmluY2x1ZGVzKCJUQUJMRV9JRCIpKSxmZSgpLE1lKCJuZ0lmIiwhYS5pbmNs'@;
put 'dWRlcygiVEFCTEVfSUQiKSl9fWZ1bmN0aW9uIGN5dChjLGwpe2lmKDEmYyYmKGRlKDAsInRyIikoMSwidGQiLDQpLExlKDIpLGhlKCksZGUoMywidGQiLDQpLExlKDQpLGhlKCkoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0LGQ9UmUoMyk7ZmUoMiksd3IoYSksZmUoMiksd3IoZC5zdWJt'@;
put 'aXREZXRhaWxzW2FdKX19ZnVuY3Rpb24gdXl0KGMsbCl7aWYoMSZjJiYoZGUoMCwiY2xyLXRhYi1jb250ZW50IikoMSwiZGl2IiwyMikoMiwidGFibGUiLDMpKDMsInRoZWFkIikoNCwidHIiKSg1LCJ0aCIsNCksTGUoNiwiTmFtZSIpLGhlKCksZGUoNywidGgiLDQpLExlKDgsIlZhbHVlIiks'@;
put 'aGUoKSgpKCksZGUoOSwidGJvZHkiKSxndCgxMCxjeXQsNSwyLCJ0ciIsNSksaGUoKSgpKCkoKSksMiZjKXtjb25zdCBhPVJlKDIpO2ZlKDEwKSxNZSgibmdGb3JPZiIsYS5zdWJtaXRBcnIpfX1mdW5jdGlvbiBkeXQoYyxsKXtpZigxJmMmJihkZSgwLCJ0ciIpKDEsInRkIiw0KSxMZSgyKSxo'@;
put 'ZSgpLGRlKDMsInRkIiw0KSxMZSg0KSxoZSgpKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdCxkPVJlKDIpO2ZlKDIpLHdyKGEpLGZlKDIpLHdyKGQuanNQYXJhbXNbYV0pfX1mdW5jdGlvbiBoeXQoYyxsKXtpZigxJmMmJihkZSgwLCJjbHItdGFicyIpKDEsImNsci10YWIiKSgyLCJidXR0'@;
put 'b24iLDIwKSxMZSgzLCJTdWJtaXR0ZWQgVGFibGUgRGV0YWlscyIpLGhlKCksZ3QoNCx1eXQsMTEsMSwiY2xyLXRhYi1jb250ZW50IiwyMSksaGUoKSxkZSg1LCJjbHItdGFiIikoNiwiYnV0dG9uIiwyMCksTGUoNywiQmFzZSBUYWJsZSBEZXRhaWxzIiksaGUoKSxkZSg4LCJjbHItdGFiLWNv'@;
put 'bnRlbnQiKSg5LCJkaXYiLDIyKSgxMCwidGFibGUiLDMpKDExLCJ0aGVhZCIpKDEyLCJ0ciIpKDEzLCJ0aCIsNCksTGUoMTQsIk5hbWUiKSxoZSgpLGRlKDE1LCJ0aCIsNCksTGUoMTYsIlZhbHVlIiksaGUoKSgpKCksZGUoMTcsInRib2R5IiksZ3QoMTgsZHl0LDUsMiwidHIiLDUpLGhlKCko'@;
put 'KSgpKCkoKSgpKSwyJmMpe2NvbnN0IGE9UmUoKTtmZSg0KSxNZSgiY2xySWZBY3RpdmUiLCEwKSxmZSgxNCksTWUoIm5nRm9yT2YiLGEua2V5c0FycmF5KX19ZnVuY3Rpb24gZnl0KGMsbCl7MSZjJiYoZGUoMCwicCIsNzIpLExlKDEsIiBUaGVyZSBhcmUgbm8gZGV0YWlscyB0byBzaG93ICIp'@;
put 'LGhlKCkpfWZ1bmN0aW9uIHB5dChjLGwpe2lmKDEmYyYmKHNpKDApLGRlKDEsImRpdiIsNzMpKDIsInNwYW4iKSxMZSgzLCJUYWJsZSBJZDoiKSxoZSgpLGRlKDQsInN0cm9uZyIsNzQpLExlKDUpLGhlKCkoKSxkZSg2LCJkaXYiKSg3LCJzcGFuIiksTGUoOCwiU3VibWl0dGVyOiIpLGhlKCks'@;
put 'ZGUoOSwic3BhbiIsNzUpLExlKDEwKSxoZSgpKCksZGUoMTEsImRpdiIpKDEyLCJzcGFuIiksTGUoMTMsIlN1Ym1pdHRlZCBvbjoiKSxoZSgpLGRlKDE0LCJzcGFuIiw3NSksTGUoMTUpLGhlKCkoKSxkZSgxNiwiZGl2IikoMTcsInNwYW4iKSxMZSgxOCwiU3VibWl0dGVkIFJlYXNvbjoiKSxo'@;
put 'ZSgpLGRlKDE5LCJzcGFuIiw3NSksTGUoMjApLGhlKCkoKSxsaSgpKSwyJmMpe2NvbnN0IGE9UmUoNSk7ZmUoNCksTWUoInJvdXRlckxpbmsiLCIvc3RhZ2UvIisobnVsbD09YS50YWJsZURldGFpbHM/bnVsbDphLnRhYmxlRGV0YWlscy5UQUJMRV9JRCkpLGZlKCksRHIoIiAiLG51bGw9PWEu'@;
put 'dGFibGVEZXRhaWxzP251bGw6YS50YWJsZURldGFpbHMuVEFCTEVfSUQsIiAiKSxmZSg1KSxEcigiICIsbnVsbD09YS50YWJsZURldGFpbHM/bnVsbDphLnRhYmxlRGV0YWlscy5TVUJNSVRURURfQllfTk0sIiAiKSxmZSg1KSxEcigiICIsbnVsbD09YS50YWJsZURldGFpbHM/bnVsbDphLnRh'@;
put 'YmxlRGV0YWlscy5TVUJNSVRURURfT05fRFRUTSwiICIpLGZlKDUpLERyKCIgIixudWxsPT1hLnRhYmxlRGV0YWlscz9udWxsOmEudGFibGVEZXRhaWxzLlNVQk1JVFRFRF9SRUFTT05fVFhULCIgIil9fWZ1bmN0aW9uIGd5dChjLGwpezEmYyYmKGRlKDAsInNwYW4iLDc2KSxHdCgxLCJjbHIt'@;
put 'aWNvbiIsNzcpLExlKDIsIiBPbmx5IHRoZSBmaXJzdCAxMDAgaW5zZXJ0cywgdXBkYXRlcyBvciBkZWxldGVzIGFyZSBkaXNwbGF5ZWQgIiksaGUoKSl9ZnVuY3Rpb24gbXl0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiZGl2Iiw0OSkoMSwiZGl2Iiw1MCkoMiwiZGl2Iiw1MSks'@;
put 'Z3QoMyxmeXQsMiwwLCJwIiw0NSkoNCxweXQsMjEsNSwibmctY29udGFpbmVyIiw4KSxoZSgpLGRlKDUsImRpdiIsNTIpKDYsImRpdiIsNTMpKDcsImRpdiIsNTQpKDgsImRpdiIsNTUpKDksImJ1dHRvbiIsNTYpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPVJlKDQpO3Jl'@;
put 'dHVybiBDdChoLmdvVG9CYXNlKG51bGw9PWguanNQYXJhbXM/bnVsbDpoLmpzUGFyYW1zLlRBQkxFX05NKSl9KSxMZSgxMCwiIFZpZXcgYmFzZSB0YWJsZSAiKSxoZSgpLGRlKDExLCJidXR0b24iLDU3KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1SZSg0KTtyZXR1cm4g'@;
put 'Q3QoaC5nZXRUYWJsZShoLnRhYmxlSWQpKX0pLExlKDEyLCIgVmlldyBzdGFnZWQgZGF0YSAiKSxoZSgpLGRlKDEzLCJidXR0b24iLDU4KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1SZSg0KTtyZXR1cm4gQ3QoaC5nb0JhY2sobnVsbD09aC5qc1BhcmFtcz9udWxsOmgu'@;
put 'anNQYXJhbXMuVEFCTEVfTk0pKX0pLExlKDE0LCIgRWRpdCBiYXNlIHRhYmxlICIpLGhlKCkoKSgpKCksZGUoMTUsImRpdiIsNTkpKDE2LCJidXR0b24iLDYwKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KFJlKDQpLmFwcHJvdmVUYWJsZSgpKX0pLExlKDE3LCIgQUND'@;
put 'RVBUICIpLGhlKCksZGUoMTgsImJ1dHRvbiIsNjEpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoUmUoNCkucmVqZWN0T3Blbj0hMCl9KSxMZSgxOSwiIFJFSkVDVCAiKSxoZSgpLGRlKDIwLCJjbHItdG9nZ2xlLWNvbnRhaW5lciIsNjIpKDIxLCJjbHItdG9nZ2xlLXdy'@;
put 'YXBwZXIiKSgyMiwiaW5wdXQiLDYzKSxnaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1SZSg0KTtyZXR1cm4gbWkoZi5mb3JtYXR0ZWRWYWx1ZXMsaCl8fChmLmZvcm1hdHRlZFZhbHVlcz1oKSxDdChoKX0pLEZ0KCJjaGFuZ2UiLGZ1bmN0aW9uKCl7cmV0dXJu'@;
put 'IHd0KGEpLEN0KFJlKDQpLmZvcm1hdHRpbmdDaGFuZ2VkKCkpfSksaGUoKSxkZSgyMywibGFiZWwiLDY0KSxMZSgyNCksaGUoKSgpKCkoKSxkZSgyNSwiZGl2Iiw2NSksZ3QoMjYsZ3l0LDMsMCwic3BhbiIsNjYpLGRlKDI3LCJkaXYiLDMxKSgyOCwiZGl2Iiw2NykoMjksInNwYW4iLDY4KSxM'@;
put 'ZSgzMCwiIENoYW5nZWQgUm93cyAiKSxkZSgzMSwic3BhbiIsNjkpLExlKDMyKSxoZSgpKCksZGUoMzMsInNwYW4iLDcwKSxMZSgzNCwiIEFkZGVkIFJvd3MgIiksZGUoMzUsInNwYW4iLDY5KSxMZSgzNiksaGUoKSgpLGRlKDM3LCJzcGFuIiw3MSksTGUoMzgsIiBEZWxldGVkIFJvd3MgIiks'@;
put 'ZGUoMzksInNwYW4iLDY5KSxMZSg0MCksaGUoKSgpKCkoKSgpKCkoKSgpfWlmKDImYyl7Y29uc3QgYT1SZSg0KTtmZSgzKSxNZSgibmdJZiIsIWEudGFibGVEZXRhaWxzKSxmZSgpLE1lKCJuZ0lmIixhLnRhYmxlRGV0YWlscyksZmUoMTIpLE1lKCJjbHJMb2FkaW5nIixhLmFjY2VwdExvYWRp'@;
put 'bmcpKCJkaXNhYmxlZCIsIWEubG9hZGluZ1RhYmxlfHwiTk8iPT09KG51bGw9PWEucGFyYW1zP251bGw6YS5wYXJhbXMuSVNBUFBST1ZFUil8fGEubm9DaGFuZ2VzKSxmZSgyKSxNZSgiZGlzYWJsZWQiLCFhLmxvYWRpbmdUYWJsZXx8Ik5PIj09PShudWxsPT1hLnBhcmFtcz9udWxsOmEucGFy'@;
put 'YW1zLklTQVBQUk9WRVIpfHxhLm5vQ2hhbmdlcyksZmUoNCkscGkoIm5nTW9kZWwiLGEuZm9ybWF0dGVkVmFsdWVzKSxmZSgyKSx3cihhLmZvcm1hdHRlZFZhbHVlcz8iRm9ybWF0dGVkIjoiVW5mb3JtYXR0ZWQiKSxmZSgyKSxNZSgibmdJZiIsYS5kaWZmc0xpbWl0KSxmZSg2KSx3cihhLmxl'@;
put 'bnMudXBkYXRlZCksZmUoNCksd3IoYS5sZW5zLm5ldyksZmUoNCksd3IoYS5sZW5zLmRlbGV0ZWQpfX1mdW5jdGlvbiB2eXQoYyxsKXsxJmMmJihkZSgwLCJkaXYiLDc1KSgxLCJwIiw4MSksTGUoMiwiTG9hZGluZyB0YWJsZSIpLGhlKCkoKSl9ZnVuY3Rpb24gYnl0KGMsbCl7aWYoMSZjJiYo'@;
put 'ZGUoMCwiZGl2Iiw3OCkoMSwic3BhbiIsNzkpLExlKDIsIiBMb2FkaW5nLi4uICIpLGhlKCksZ3QoMyx2eXQsMywwLCJkaXYiLDgwKSxoZSgpKSwyJmMpe2NvbnN0IGE9UmUoNCk7ZmUoMyksTWUoIm5nSWYiLCFhLmxvYWRpbmdUYWJsZSl9fWZ1bmN0aW9uIHl5dChjLGwpezEmYyYmKGRlKDAs'@;
put 'InAiLDcyKSxMZSgxLCIgVGhlcmUgYXJlIG5vIGNoYW5nZXMgdG8gc2hvdyAiKSxoZSgpKX1mdW5jdGlvbiBfeXQoYyxsKXtpZigxJmMmJihkZSgwLCJ0aCIsNCksTGUoMSksaGUoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O2ZlKCksd3IoYSl9fWZ1bmN0aW9uIHd5dChjLGwpe2lmKDEm'@;
put 'YyYmKGRlKDAsInNwYW4iLDg2KSxMZSgxKSxoZSgpKSwyJmMpe2NvbnN0IGE9UmUoKS5pbmRleCxkPVJlKDIpLmluZGV4LGg9UmUoNCk7ZmUoKSxEcigiT3JpZ2luYWwgdmFsdWUgaXM6ICIsaC5hcnJPZkNoYW5nZXNbZF1bYV0sIiIpfX1mdW5jdGlvbiBDeXQoYyxsKXtpZigxJmMmJihkZSgw'@;
put 'LCJ0ZCIsODQpLExlKDEpLGd0KDIsd3l0LDIsMSwic3BhbiIsODUpLGhlKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdCxkPWwuaW5kZXgsaD1SZSgyKS5pbmRleCxmPVJlKDQpO01lKCJuZ0NsYXNzIixzcCgzLEo2ZSwxPT1mLmFyckNoYW5nZWRbaF1bZF0mJiJ1cGRhdGVkIj09Zi5jaEFy'@;
put 'cltoXSkpLGZlKCksRHIoIiAiLGYuZGlmZlRhYmxlLmRhdGFbaF1bYV0sIiAiKSxmZSgpLE1lKCJuZ0lmIiwxPT1mLmFyckNoYW5nZWRbaF1bZF0mJiJ1cGRhdGVkIj09Zi5jaEFycltoXSl9fWZ1bmN0aW9uIFN5dChjLGwpe2lmKDEmYyYmKHNpKDApLGd0KDEsQ3l0LDMsNSwidGQiLDgzKSxs'@;
put 'aSgpKSwyJmMpe2NvbnN0IGE9UmUoKS5pbmRleCxkPVJlKDQpO2ZlKCksTWUoIm5nRm9yT2YiLGQucm93S2V5c1thXSl9fWZ1bmN0aW9uIE15dChjLGwpe2lmKDEmYyYmKGRlKDAsInRkIiw0KSxMZSgxKSxoZSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQsZD1SZSgyKS5pbmRleCxoPVJl'@;
put 'KDQpO2ZlKCksRHIoIiAiLGguZGlmZlRhYmxlLmRhdGFbZF1bYV0sIiAiKX19ZnVuY3Rpb24geHl0KGMsbCl7aWYoMSZjJiYoc2koMCksZ3QoMSxNeXQsMiwxLCJ0ZCIsNDcpLGxpKCkpLDImYyl7Y29uc3QgYT1SZSgpLmluZGV4LGQ9UmUoNCk7ZmUoKSxNZSgibmdGb3JPZiIsZC5yb3dLZXlz'@;
put 'W2FdKX19ZnVuY3Rpb24gRXl0KGMsbCl7aWYoMSZjJiYoZGUoMCwidHIiLDgyKSxndCgxLFN5dCwyLDEsIm5nLWNvbnRhaW5lciIsOCkoMix4eXQsMiwxLCJuZy1jb250YWluZXIiLDgpLGhlKCkpLDImYyl7Y29uc3QgYT1sLmluZGV4LGQ9UmUoNCk7TWUoIm5nQ2xhc3MiLHBNKDMsWDZlLCJh'@;
put 'ZGRlZCI9PWQuY2hBcnJbYV0sImRlbGV0ZWQiPT1kLmNoQXJyW2FdLCJ1cGRhdGVkIj09ZC5jaEFyclthXSkpLGZlKCksTWUoIm5nSWYiLCJ1cGRhdGVkIj09PWQuY2hBcnJbYV0pLGZlKCksTWUoIm5nSWYiLCJ1cGRhdGVkIiE9PWQuY2hBcnJbYV0pfX1mdW5jdGlvbiBUeXQoYyxsKXtpZigx'@;
put 'JmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJkaXYiLDI5KSgxLCJkaXYiLDMwKSgyLCJkaXYiLDMxKSgzLCJkaXYiLDMyKSg0LCJzcGFuIiwzMyksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChSZSgzKS5nb1RvQXBwcm92YWxzTGlzdCgpKX0pLEd0KDUsImNsci1pY29uIiwz'@;
put 'NCksTGUoNiwiQmFjayB0byBhcHByb3ZhbHMgbGlzdCAiKSxoZSgpKCksZGUoNywiZGl2IiwzNSkoOCwiaDMiLDM2KSxMZSg5KSxoZSgpKCksZGUoMTAsImRpdiIsMzcpKDExLCJhIiwzOCksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChSZSgzKS5nZXREZXRhaWxzKCkp'@;
put 'fSksR3QoMTIsImNsci1pY29uIiwzOSksaGUoKSgpKCksZGUoMTMsInAiLDQwKSxMZSgxNCksaGUoKSgpLGRlKDE1LCJkaXYiLDQxKSxndCgxNixteXQsNDEsMTEsImRpdiIsNDIpLGhlKCksZ3QoMTcsYnl0LDQsMSwiZGl2Iiw0MyksZGUoMTgsImRpdiIsNDQpLGd0KDE5LHl5dCwyLDAsInAi'@;
put 'LDQ1KSxkZSgyMCwidGFibGUiLDMpKDIxLCJ0aGVhZCIpKDIyLCJ0ciIsNDYpLGd0KDIzLF95dCwyLDEsInRoIiw0NyksaGUoKSgpLGRlKDI0LCJ0Ym9keSIpLGd0KDI1LEV5dCwzLDcsInRyIiw0OCksaGUoKSgpKCkoKX1pZigyJmMpe2NvbnN0IGE9UmUoMyk7ZmUoOSksRHIoIiAiLG51bGw9'@;
put 'PWEuanNQYXJhbXM/bnVsbDphLmpzUGFyYW1zLlRBQkxFX05NLCIgIiksZmUoNSksRHIoIiAiLG51bGw9PWEuanNQYXJhbXM/bnVsbDphLmpzUGFyYW1zLlRBQkxFX0RFU0MsIiAiKSxmZSgyKSxNZSgibmdJZiIsYS5sb2FkZWQpLGZlKCksTWUoIm5nSWYiLCFhLmxvYWRpbmdUYWJsZSksZmUo'@;
put 'MiksTWUoIm5nSWYiLGEubG9hZGluZ1RhYmxlJiZhLm5vQ2hhbmdlcyksZmUoNCksTWUoIm5nRm9yT2YiLGEucm93SGVhZGVyKSxmZSgyKSxNZSgibmdGb3JPZiIsYS5yb3dLZXlzKX19ZnVuY3Rpb24gQXl0KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2IiwyNyksZ3QoMSxUeXQsMjYsNywiZGl2'@;
put 'IiwyOCksaGUoKSksMiZjKXtjb25zdCBhPVJlKDIpO2ZlKCksTWUoIm5nSWYiLGEubG9hZGVkKX19ZnVuY3Rpb24ga3l0KGMsbCl7MSZjJiYoZGUoMCwic3BhbiIsNzkpLExlKDEsIiBMb2FkaW5nLi4uICIpLGhlKCkpfWZ1bmN0aW9uIER5dChjLGwpezEmYyYmKGRlKDAsImRpdiIpKDEsImgz'@;
put 'IiksTGUoMiwiTG9hZGluZyBwcmV2aWV3IiksaGUoKSgpKX1mdW5jdGlvbiBJeXQoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiLDg3KSxndCgxLGt5dCwyLDAsInNwYW4iLDg4KSgyLER5dCwzLDAsImRpdiIsOCksaGUoKSksMiZjKXtjb25zdCBhPVJlKDIpO2ZlKCksTWUoIm5nSWYiLCFhLmxv'@;
put 'YWRlZCksZmUoKSxNZSgibmdJZiIsIWEubG9hZGVkKX19ZnVuY3Rpb24gUnl0KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2IiwyMyksZ3QoMSxBeXQsMiwxLCJkaXYiLDI0KSxkZSgyLCJkaXYiLDI1KSxndCgzLEl5dCwzLDIsImRpdiIsMjYpLGhlKCkoKSksMiZjKXtjb25zdCBhPVJlKCk7ZmUo'@;
put 'KSxNZSgibmdJZiIsYS5sb2FkZWQpLGZlKDIpLE1lKCJuZ0lmIiwhYS5sb2FkZWQpfX1mdW5jdGlvbiBMeXQoYyxsKXsxJmMmJihkZSgwLCJzcGFuIiw3NiksR3QoMSwiY2xyLWljb24iLDc3KSxMZSgyLCIgT25seSB0aGUgZmlyc3QgMTAwIGluc2VydHMsIHVwZGF0ZXMgb3IgZGVsZXRlcyBh'@;
put 'cmUgZGlzcGxheWVkICIpLGhlKCkpfWZ1bmN0aW9uIE95dChjLGwpezEmYyYmR3QoMCwiZGl2Iiw0OSl9ZnVuY3Rpb24gUHl0KGMsbCl7MSZjJiYoZGUoMCwiZGl2Iiw3NSkoMSwicCIsODEpLExlKDIsIkxvYWRpbmcgdGFibGUiKSxoZSgpKCkpfWZ1bmN0aW9uIEZ5dChjLGwpe2lmKDEmYyYm'@;
put 'KGRlKDAsImRpdiIsMTA0KSgxLCJzcGFuIiw3OSksTGUoMiwiIExvYWRpbmcuLi4gIiksaGUoKSxndCgzLFB5dCwzLDAsImRpdiIsODApLGhlKCkpLDImYyl7Y29uc3QgYT1SZSg0KTtmZSgzKSxNZSgibmdJZiIsIWEubG9hZGluZ1RhYmxlKX19ZnVuY3Rpb24gSHl0KGMsbCl7aWYoMSZjJiYo'@;
put 'ZGUoMCwidGgiLDQpLExlKDEpLGhlKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtmZSgpLHdyKGEpfX1mdW5jdGlvbiBOeXQoYyxsKXtpZigxJmMmJihkZSgwLCJzcGFuIiw4NiksTGUoMSksaGUoKSksMiZjKXtjb25zdCBhPVJlKCkuaW5kZXgsZD1SZSgyKS5pbmRleCxoPVJlKDQpO2Zl'@;
put 'KCksRHIoIk9yaWdpbmFsIHZhbHVlIGlzOiAiLGguYXJyT2ZDaGFuZ2VzW2RdW2FdLCIiKX19ZnVuY3Rpb24gVnl0KGMsbCl7aWYoMSZjJiYoZGUoMCwidGQiLDg0KSxMZSgxKSxndCgyLE55dCwyLDEsInNwYW4iLDg1KSxoZSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQsZD1sLmluZGV4'@;
put 'LGg9UmUoMikuaW5kZXgsZj1SZSg0KTtNZSgibmdDbGFzcyIsc3AoMyxKNmUsMT09Zi5hcnJDaGFuZ2VkW2hdW2RdJiYidXBkYXRlZCI9PWYuY2hBcnJbaF0pKSxmZSgpLERyKCIgIixmLmRpZmZUYWJsZS5kYXRhW2hdW2FdLCIgIiksZmUoKSxNZSgibmdJZiIsMT09Zi5hcnJDaGFuZ2VkW2hd'@;
put 'W2RdJiYidXBkYXRlZCI9PWYuY2hBcnJbaF0pfX1mdW5jdGlvbiBCeXQoYyxsKXtpZigxJmMmJihzaSgwKSxndCgxLFZ5dCwzLDUsInRkIiw4MyksbGkoKSksMiZjKXtjb25zdCBhPVJlKCkuaW5kZXgsZD1SZSg0KTtmZSgpLE1lKCJuZ0Zvck9mIixkLnJvd0tleXNbYV0pfX1mdW5jdGlvbiBq'@;
put 'eXQoYyxsKXtpZigxJmMmJihkZSgwLCJ0ZCIsNCksTGUoMSksaGUoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0LGQ9UmUoMikuaW5kZXgsaD1SZSg0KTtmZSgpLERyKCIgIixoLmRpZmZUYWJsZS5kYXRhW2RdW2FdLCIgIil9fWZ1bmN0aW9uIHp5dChjLGwpe2lmKDEmYyYmKHNpKDApLGd0'@;
put 'KDEsanl0LDIsMSwidGQiLDQ3KSxsaSgpKSwyJmMpe2NvbnN0IGE9UmUoKS5pbmRleCxkPVJlKDQpO2ZlKCksTWUoIm5nRm9yT2YiLGQucm93S2V5c1thXSl9fWZ1bmN0aW9uIFV5dChjLGwpe2lmKDEmYyYmKGRlKDAsInRyIiw4MiksZ3QoMSxCeXQsMiwxLCJuZy1jb250YWluZXIiLDgpKDIs'@;
put 'enl0LDIsMSwibmctY29udGFpbmVyIiw4KSxoZSgpKSwyJmMpe2NvbnN0IGE9bC5pbmRleCxkPVJlKDQpO01lKCJuZ0NsYXNzIixwTSgzLFg2ZSwiYWRkZWQiPT1kLmNoQXJyW2FdLCJkZWxldGVkIj09ZC5jaEFyclthXSwidXBkYXRlZCI9PWQuY2hBcnJbYV0pKSxmZSgpLE1lKCJuZ0lmIiwi'@;
put 'dXBkYXRlZCI9PT1kLmNoQXJyW2FdKSxmZSgpLE1lKCJuZ0lmIiwidXBkYXRlZCIhPT1kLmNoQXJyW2FdKX19ZnVuY3Rpb24gWnl0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiZGl2Iiw5MykoMSwiZGl2Iiw5NCkoMiwiZGl2IiwzMSkoMywiZGl2IiwzMikoNCwic3BhbiIsOTUp'@;
put 'LEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoUmUoMykuZ29Ub1N1Ym1pdExpc3QoKSl9KSxHdCg1LCJjZHMtaWNvbiIsOTYpLExlKDYsIkJhY2sgdG8gc3VibWl0dGVkIGxpc3QgIiksaGUoKSgpLGRlKDcsImRpdiIsOTcpKDgsImgzIiw5OCksTGUoOSksaGUoKSgpLGRl'@;
put 'KDEwLCJkaXYiLDM3KSgxMSwiYSIsMzgpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoUmUoMykudGFibGVGbGFnPSEwKX0pLEd0KDEyLCJjbHItaWNvbiIsMzkpLGhlKCkoKSgpLGRlKDEzLCJwIiw5OSksTGUoMTQpLGhlKCkoKSxkZSgxNSwiZGl2Iiw1MCkoMTYsImRp'@;
put 'diIsNTEpKDE3LCJkaXYiLDczKSgxOCwic3BhbiIpLExlKDE5LCJUYWJsZSBJZDoiKSxoZSgpLGRlKDIwLCJzdHJvbmciLDc0KSgyMSwic3BhbiIpLExlKDIyKSxoZSgpKCkoKSxkZSgyMywiZGl2IikoMjQsInNwYW4iKSxMZSgyNSwiU3VibWl0dGVkIG9uOiIpLGhlKCksZGUoMjYsInNwYW4i'@;
put 'LDc1KSxMZSgyNyksaGUoKSgpLGRlKDI4LCJkaXYiKSgyOSwic3BhbiIpLExlKDMwLCJTdWJtaXQgTWVzc2FnZToiKSxoZSgpLGRlKDMxLCJzcGFuIiksTGUoMzIpLGhlKCkoKSgpLGRlKDMzLCJkaXYiLDUyKSgzNCwiZGl2Iiw1MykoMzUsImRpdiIsNTQpKDM2LCJkaXYiLDU1KSgzNywiYnV0'@;
put 'dG9uIiw1NiksRnQoImNsaWNrIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9UmUoMyk7cmV0dXJuIEN0KGguZ29Ub0Jhc2UoaC5zdWJPYmouYmFzZSkpfSksTGUoMzgsIiBWaWV3IGJhc2UgdGFibGUgIiksaGUoKSxkZSgzOSwiYnV0dG9uIiw1NyksRnQoImNsaWNrIixmdW5jdGlvbigpe3d0'@;
put 'KGEpO2NvbnN0IGg9UmUoMyk7cmV0dXJuIEN0KGguZ2V0VGFibGUoaC5zdWJPYmoudGFibGVJZCkpfSksTGUoNDAsIiBWaWV3IHN0YWdlZCBkYXRhICIpLGhlKCksZGUoNDEsImJ1dHRvbiIsNTgpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPVJlKDMpO3JldHVybiBDdCho'@;
put 'LmdvQmFjayhoLnN1Yk9iai5iYXNlKSl9KSxMZSg0MiwiIEVkaXQgYmFzZSB0YWJsZSAiKSxoZSgpKCkoKSgpLGRlKDQzLCJkaXYiLDY1KSxndCg0NCxMeXQsMywwLCJzcGFuIiw2NiksZGUoNDUsImRpdiIsMzEpKDQ2LCJkaXYiLDY3KSg0Nywic3BhbiIsNjgpLExlKDQ4LCIgQ2hhbmdlZCBS'@;
put 'b3dzICIpLGRlKDQ5LCJzcGFuIiw2OSksTGUoNTApLGhlKCkoKSxkZSg1MSwic3BhbiIsNzApLExlKDUyLCIgQWRkZWQgUm93cyAiKSxkZSg1Mywic3BhbiIsNjkpLExlKDU0KSxoZSgpKCksZGUoNTUsInNwYW4iLDcxKSxMZSg1NiwiIERlbGV0ZWQgUm93cyAiKSxkZSg1Nywic3BhbiIsNjkp'@;
put 'LExlKDU4KSxoZSgpKCkoKSgpKCksZGUoNTksImRpdiIsNTMpKDYwLCJjbHItdG9nZ2xlLWNvbnRhaW5lciIsMTAwKSg2MSwiY2xyLXRvZ2dsZS13cmFwcGVyIikoNjIsImlucHV0Iiw2MyksZ2koIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9UmUoMyk7cmV0dXJu'@;
put 'IG1pKGYuZm9ybWF0dGVkVmFsdWVzLGgpfHwoZi5mb3JtYXR0ZWRWYWx1ZXM9aCksQ3QoaCl9KSxGdCgiY2hhbmdlIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChSZSgzKS5mb3JtYXR0aW5nQ2hhbmdlZCgpKX0pLGhlKCksZGUoNjMsImxhYmVsIiksTGUoNjQpLGhlKCkoKSgpKCkoKSgp'@;
put 'LGRlKDY1LCJkaXYiLDEwMSksZ3QoNjYsT3l0LDEsMCwiZGl2Iiw0MiksaGUoKSxndCg2NyxGeXQsNCwxLCJkaXYiLDEwMiksZGUoNjgsImRpdiIsMTAzKSg2OSwidGFibGUiLDMpKDcwLCJ0aGVhZCIpKDcxLCJ0ciIsNDYpLGd0KDcyLEh5dCwyLDEsInRoIiw0NyksaGUoKSgpLGRlKDczLCJ0'@;
put 'Ym9keSIpLGd0KDc0LFV5dCwzLDcsInRyIiw0OCksaGUoKSgpKCkoKX1pZigyJmMpe2NvbnN0IGE9UmUoMyk7ZmUoOSksRHIoIiAiLGEuc3ViT2JqLmJhc2UsIiAiKSxmZSg1KSxEcigiICIsYS50YWJsZURlc2NyaXB0aW9uLCIgIiksZmUoNiksTWUoInJvdXRlckxpbmsiLCIvc3RhZ2UvIith'@;
put 'LnN1Yk9iai50YWJsZUlkKSxmZSgyKSxEcigiICIsYS5zdWJPYmoudGFibGVJZCwiIiksZmUoNSksRHIoIiAiLGEuc3ViT2JqLnN1Ym1pdHRlZCwiICIpLGZlKDUpLERyKCIgIixhLnN1Yk9iai5zdWJtaXRSZWFzb24sIiAiKSxmZSgxMiksTWUoIm5nSWYiLGEuZGlmZnNMaW1pdCksZmUoNiks'@;
put 'd3IoYS5sZW5zLnVwZGF0ZWQpLGZlKDQpLHdyKGEubGVucy5uZXcpLGZlKDQpLHdyKGEubGVucy5kZWxldGVkKSxmZSg0KSxwaSgibmdNb2RlbCIsYS5mb3JtYXR0ZWRWYWx1ZXMpLGZlKDIpLHdyKGEuZm9ybWF0dGVkVmFsdWVzPyJGb3JtYXR0ZWQiOiJVbmZvcm1hdHRlZCIpLGZlKDIpLE1l'@;
put 'KCJuZ0lmIixhLmxvYWRlZCksZmUoKSxNZSgibmdJZiIsIWEubG9hZGluZ1RhYmxlKSxmZSg1KSxNZSgibmdGb3JPZiIsYS5yb3dIZWFkZXIpLGZlKDIpLE1lKCJuZ0Zvck9mIixhLnJvd0tleXMpfX1mdW5jdGlvbiBXeXQoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiLDkxKSxndCgxLFp5dCw3'@;
put 'NSwxNiwiZGl2Iiw5MiksaGUoKSksMiZjKXtjb25zdCBhPVJlKDIpO2ZlKCksTWUoIm5nSWYiLGEubG9hZGVkKX19ZnVuY3Rpb24gWXl0KGMsbCl7MSZjJiYoZGUoMCwiZGl2IikoMSwiaDMiKSxMZSgyLCJMb2FkaW5nIHN1Ym1pdHRlZCB0YWJsZSIpLGhlKCkoKSl9ZnVuY3Rpb24gR3l0KGMs'@;
put 'bCl7aWYoMSZjJiYoZGUoMCwiZGl2IiwxMDUpKDEsImRpdiIsMTA2KSgyLCJzcGFuIiw3OSksTGUoMywiIExvYWRpbmcuLi4gIiksaGUoKSxndCg0LFl5dCwzLDAsImRpdiIsOCksaGUoKSgpKSwyJmMpe2NvbnN0IGE9UmUoMik7ZmUoNCksTWUoIm5nSWYiLCFhLmxvYWRlZCl9fWZ1bmN0aW9u'@;
put 'ICR5dChjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIpLGd0KDEsV3l0LDIsMSwiZGl2Iiw4OSkoMixHeXQsNSwxLCJkaXYiLDkwKSxoZSgpKSwyJmMpe2NvbnN0IGE9UmUoKTtmZSgpLE1lKCJuZ0lmIixhLmxvYWRlZCksZmUoKSxNZSgibmdJZiIsIWEubG9hZGVkKX19bGV0IFE2ZT0oKCk9Pntj'@;
put 'bGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYsdil7dGhpcy5zYXNTdG9yZVNlcnZpY2U9YSx0aGlzLnNhc1NlcnZpY2U9ZCx0aGlzLmV2ZW50U2VydmljZT1oLHRoaXMucm91dGVyPWYsdGhpcy5yb3V0ZT12LHRoaXMuZGV0YWlsc09wZW49ITEsdGhpcy5yZWplY3RPcGVuPSExLHRoaXMubGVu'@;
put 'cz17bmV3OjAsdXBkYXRlZDowLGRlbGV0ZWQ6MH0sdGhpcy5sb2FkZWQ9ITEsdGhpcy5sb2FkaW5nVGFibGU9ITEsdGhpcy5zdWJtaXRSZWFzb249IiIsdGhpcy5pbnN0YW5jZT0iaG90SW5zdGFuY2UiLHRoaXMuYWNjZXB0TG9hZGluZz0hMSx0aGlzLnJlamVjdExvYWRpbmc9ITEsdGhpcy5z'@;
put 'dWJtaXR0ZWQ9ITEsdGhpcy50YWJsZUZsYWc9ITEsdGhpcy5yb3dLZXlzPVtdLHRoaXMuY2hBcnI9W10sdGhpcy5zZWNvbmRPcGVuPSExLHRoaXMuZm9ybWF0dGVkVmFsdWVzPSEwLHRoaXMuY2hhbmdlc0Fycj1bXSx0aGlzLmRpZmZUYWJsZT17ZGF0YTpbXX0sdGhpcy5kaWZmc0xpbWl0PSEx'@;
put 'LHRoaXMucmVjb3Jkc0xpbWl0PTEwMCx0aGlzLnJlZnJlc2hTdGFydHVwc2VydmljZUFmdGVyQXBwcm92ZT0hMX1nZXQgbm9DaGFuZ2VzKCl7cmV0dXJuIDA9PT10aGlzLmxlbnMubmV3JiYwPT09dGhpcy5sZW5zLnVwZGF0ZWQmJjA9PT10aGlzLmxlbnMuZGVsZXRlZH1nb1RvQmFzZShhKXt0'@;
put 'aGlzLnJvdXRlLm5hdmlnYXRlQnlVcmwoIi92aWV3L2RhdGEvIithKX1nb1RvQXBwcm92YWxzTGlzdCgpe3RoaXMucm91dGUubmF2aWdhdGVCeVVybCgiL3Jldmlldy9hcHByb3ZlIil9Z2V0VGFibGUoYSl7dGhpcy5yb3V0ZS5uYXZpZ2F0ZUJ5VXJsKCIvc3RhZ2UvIithKX1nb0JhY2soYSl7'@;
put 'dGhpcy5yb3V0ZS5uYXZpZ2F0ZUJ5VXJsKCIvZWRpdG9yLyIrYSl9Z29Ub1ZpZXdlcigpe3RoaXMucm91dGUubmF2aWdhdGVCeVVybCgiL3ZpZXcvZGF0YSIpfXNob3dEZXRhaWxzU2VsZWN0KGEpe2EucHJldmVudERlZmF1bHQoKSx0aGlzLnRhYmxlRmxhZz0hdGhpcy50YWJsZUZsYWd9Z2V0'@;
put 'RGV0YWlscygpe3RoaXMuZGV0YWlsc09wZW49ITB9b25Ib3RTZWxlY3Rpb24oYSl7dGhpcy5ob3RTZWxlY3Rpb249YS5zbGljZSgwLDQpfW9uSG90RGVzZWxlY3QoKXtzZXRUaW1lb3V0KCgpPT57dGhpcy5ob3RTZWxlY3Rpb249bnVsbH0sMTAwKX1yZWplY3RpbmcoKXt2YXIgYT10aGlzO3Jl'@;
put 'dHVybiBlZShmdW5jdGlvbiooKXthLnJlamVjdExvYWRpbmc9ITAsYS5zdWJtaXRSZWFzb249YS5zdWJtaXRSZWFzb24ucmVwbGFjZSgvXG4vZywiLiAiKTtsZXQgZD17U1RQX0FDVElPTjoiUkVKRUNUX1RBQkxFIixUQUJMRTphLnRhYmxlSWQsU1RQX1JFQVNPTjphLnN1Ym1pdFJlYXNvbn07'@;
put 'eWllbGQgYS5zYXNTdG9yZVNlcnZpY2UucmVqZWN0aW5nKGQsIkJyb3dzZXJQYXJhbXMiLCJhcHByb3ZlcnMvcmVqZWN0aW9uIikudGhlbihoPT57YS5yb3V0ZS5uYXZpZ2F0ZUJ5VXJsKCIvcmV2aWV3L2hpc3RvcnkiKX0pLmNhdGNoKGg9PnthLmFjY2VwdExvYWRpbmc9ITEsYS5yZWplY3RM'@;
put 'b2FkaW5nPSExfSl9KSgpfWFwcHJvdmVUYWJsZSgpe3ZhciBhPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe2EuYWNjZXB0TG9hZGluZz0hMDtsZXQgZD17QUNUSU9OOiJBUFBST1ZFX1RBQkxFIixUQUJMRTphLnRhYmxlSWQsRElGRlRJTUU6YS5wYXJhbXM/LkRJRkZUSU1FLExJQkRTOmEu'@;
put 'cGFyYW1zPy5MSUJEU307eWllbGQgYS5zYXNTdG9yZVNlcnZpY2UuYXBwcm92ZVRhYmxlKGQsIlNBU0NvbnRyb2xUYWJsZSIsImF1ZGl0b3JzL3Bvc3RkYXRhIikudGhlbihoPT57YS5yZWZyZXNoU3RhcnR1cHNlcnZpY2VBZnRlckFwcHJvdmUmJmEuc2FzU2VydmljZS5yZWxvYWRTdGFydHVw'@;
put 'RGF0YSgpLGEucm91dGUubmF2aWdhdGVCeVVybCgiL3Jldmlldy9oaXN0b3J5Iil9KS5jYXRjaChoPT57YS5hY2NlcHRMb2FkaW5nPSExfSl9KSgpfWdvVG9TdWJtaXRMaXN0KCl7dGhpcy5yb3V0ZS5uYXZpZ2F0ZUJ5VXJsKCIvcmV2aWV3L3N1Ym1pdHRlZCIpfWNhbGxDaGFuZ2VzSW5mbyhh'@;
put 'KXt2YXIgZD10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXt5aWVsZCBkLnNhc1N0b3JlU2VydmljZS5nZXRDaGFuZ2VJbmZvKGEpLnRoZW4oaD0+e2QudGFibGVEZXRhaWxzPWguanNwYXJhbXNbMF0sZC5qc1BhcmFtcz1oLmpzcGFyYW1zWzBdO2xldCBmPVtdO2Zvcihjb25zdCB2IGluIGQu'@;
put 'anNQYXJhbXMpZC5qc1BhcmFtcy5oYXNPd25Qcm9wZXJ0eSh2KSYmZi5wdXNoKHYpO2Qua2V5c0FycmF5PWYsIk1QRV9UQUJMRVMiPT09aC5qc3BhcmFtc1swXS5CQVNFX0RTJiYoZC5yZWZyZXNoU3RhcnR1cHNlcnZpY2VBZnRlckFwcHJvdmU9ITApfSkuY2F0Y2goaD0+e2QuYWNjZXB0TG9h'@;
put 'ZGluZz0hMX0pLmZpbmFsbHkoKCk9PntkLmxvYWRlZD0hMH0pfSkoKX1mb3JtYXR0aW5nQ2hhbmdlZCgpe3RoaXMuY2FsY0RpZmYoKX1jYWxjRGlmZigpe2lmKCF0aGlzLnJlc3BvbnNlKXJldHVybjtsZXQgYT10aGlzLnJlc3BvbnNlLm5ldyxkPXRoaXMucmVzcG9uc2UudXBkYXRlcyxoPXRo'@;
put 'aXMucmVzcG9uc2UuZGVsZXRlZCxmPXRoaXMucmVzcG9uc2Uub3JpZ2luYWxzO3RoaXMuZm9ybWF0dGVkVmFsdWVzJiYoYT10aGlzLnJlc3BvbnNlLmZtdF9uZXcsZD10aGlzLnJlc3BvbnNlLmZtdF91cGRhdGVzLGg9dGhpcy5yZXNwb25zZS5mbXRfZGVsZXRlZCxmPXRoaXMucmVzcG9uc2Uu'@;
put 'Zm10X29yaWdpbmFscyksdGhpcy5vcmlnaW5hbHM9Zix0aGlzLnJvd0tleXM9W107Zm9yKGxldCBkdD0wO2R0PGQubGVuZ3RoO2R0Kyspe2xldCBKdD1PYmplY3Qua2V5cyhkW2R0XSk7Zm9yKGxldCB2bj0wO3ZuPEp0Lmxlbmd0aDt2bisrKWRbZHRdW0p0W3ZuXV0hPT1mW2R0XVtKdFt2bl1d'@;
put 'JiZ0aGlzLmNoYW5nZXNBcnIucHVzaCh7aW5kOmR0LGZpZWxkOkp0W3ZuXSxwcm9wOmRbZHRdW0p0W3ZuXV0sb3JpZ2luYWw6ZltkdF1bSnRbdm5dXX0pfXRoaXMubGVucz17bmV3OnRoaXMucGFyYW1zPy5OVU1fQURERUR8fDAsdXBkYXRlZDp0aGlzLnBhcmFtcz8uTlVNX1VQREFURUR8fDAs'@;
put 'ZGVsZXRlZDp0aGlzLnBhcmFtcz8uTlVNX0RFTEVURUR8fDB9O2xldCBaPVtdLHJlPWQuY29uY2F0KGEsaCk7Zm9yKGxldCBkdD0wO2R0PHRoaXMucmVzcG9uc2UuY29scy5sZW5ndGg7ZHQrKylaLnB1c2godGhpcy5yZXNwb25zZS5jb2xzW2R0XS5OQU1FKTtsZXQgY2U9dGhpcy5sZW5zLm5l'@;
put 'dz50aGlzLnJlY29yZHNMaW1pdD90aGlzLnJlY29yZHNMaW1pdDp0aGlzLmxlbnMubmV3LGJlPXRoaXMubGVucy51cGRhdGVkPnRoaXMucmVjb3Jkc0xpbWl0P3RoaXMucmVjb3Jkc0xpbWl0OnRoaXMubGVucy51cGRhdGVkO3RoaXMuZGlmZnNMaW1pdD10aGlzLmxlbnMubmV3PnRoaXMucmVj'@;
put 'b3Jkc0xpbWl0fHx0aGlzLmxlbnMudXBkYXRlZD50aGlzLnJlY29yZHNMaW1pdHx8dGhpcy5sZW5zLmRlbGV0ZWQ+dGhpcy5yZWNvcmRzTGltaXQsdGhpcy5hZGRDb3VudD1jZTtsZXQgQmU9W10scWU9W107Zm9yKGxldCBkdD0wO2R0PFoubGVuZ3RoO2R0KyspcWUucHVzaCh7ZGF0YTpaW2R0'@;
put 'XSxyZWFkT25seTohMH0pO3RoaXMuZGlmZlRhYmxlLmRhdGE9cmU7Zm9yKGxldCBkdD0wO2R0PHJlLmxlbmd0aDtkdCsrKXtsZXQgdm49T2JqZWN0LmtleXMocmVbZHRdKTt0aGlzLnJvd0tleXMucHVzaCh2bil9bGV0IHJ0PVtdLHB0PVtdO2ZvcihsZXQgZHQ9MDtkdDx0aGlzLmRpZmZUYWJs'@;
put 'ZS5kYXRhLmxlbmd0aDtkdCsrKXtpZihkdDxiZSYmMCE9PWJlKXtydC5wdXNoKFtdKSxwdC5wdXNoKFtdKSxCZS5wdXNoKCJ1cGRhdGVkIik7bGV0IEp0PU9iamVjdC5rZXlzKHRoaXMuZGlmZlRhYmxlLmRhdGFbZHRdKTtmb3IobGV0IHZuPTA7dm48SnQubGVuZ3RoO3ZuKyspe2xldCBDbj1K'@;
put 'dFt2bl07ZltkdF1bQ25dIT09ZFtkdF1bQ25dPyhydFtkdF0ucHVzaCghMCkscHRbZHRdLnB1c2goZltkdF1bQ25dKSk6KHJ0W2R0XS5wdXNoKCExKSxwdFtkdF0ucHVzaChudWxsKSl9dGhpcy5hcnJDaGFuZ2VkPXJ0LHRoaXMuYXJyT2ZDaGFuZ2VzPXB0fWR0Pj1iZSYmZHQ8YmUrY2UmJkJl'@;
put 'LnB1c2goImFkZGVkIiksZHQ+Y2UrYmUtMSYmQmUucHVzaCgiZGVsZXRlZCIpfXRoaXMuY2hBcnI9QmUsdGhpcy5yb3dIZWFkZXI9dGhpcy5yb3dLZXlzWzBdLHRoaXMuZGlmZlRhYmxlLmRhdGE9cmV9bmdBZnRlclZpZXdJbml0KCl7dmFyIGE9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7'@;
put 'aWYoYS5fZGV0YWlsc1N1Yj1hLnNhc1N0b3JlU2VydmljZS5zdWJtaXR0RGV0YWlsLnN1YnNjcmliZShmdW5jdGlvbigpe3ZhciBoPWVlKGZ1bmN0aW9uKihmKXthLnN1Yk9iaj1mLnZpZXdEYXRhLGEudGFibGVJZD1mLnZpZXdEYXRhLnRhYmxlSWQsYS5zdWJtaXR0ZWQ9Zi52aWV3RGF0YS5z'@;
put 'dWIsYS5zdWJtaXREZXRhaWxzPWYuZGF0YSxhLnN1Ym1pdEFycj1bXTtmb3IobGV0IE0gaW4gYS5zdWJtaXREZXRhaWxzKSJzdWIiIT09TSYmYS5zdWJtaXRBcnIucHVzaChNKTtsZXQgdj17QUNUSU9OOiJTSE9XX0RJRkZTIixUQUJMRTphLnRhYmxlSWQsRElGRlRJTUU6KG5ldyBEYXRlKS50'@;
put 'b1VUQ1N0cmluZygpfTthLnNhc1N0b3JlU2VydmljZS5zaG93RGlmZnModiwiU0FTQ29udHJvbFRhYmxlIiwiYXVkaXRvcnMvcG9zdGRhdGEiKS50aGVuKE09PnthLnBhcmFtcz1NLnBhcmFtc1swXSxhLnJlc3BvbnNlPU0sYS5jYWxjRGlmZigpLGEuY2FsbENoYW5nZXNJbmZvKGEudGFibGVJ'@;
put 'ZCl9KS5jYXRjaChNPT5NKS5maW5hbGx5KCgpPT57YS5sb2FkaW5nVGFibGU9ITB9KX0pO3JldHVybiBmdW5jdGlvbihmKXtyZXR1cm4gaC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSgpKSx0eXBlb2YgYS5yb3V0ZXIuc25hcHNob3QucGFyYW1zLnRhYmxlSWQ+InUiKXJldHVybjthLnRhYmxl'@;
put 'SWQ9YS5yb3V0ZXIuc25hcHNob3QucGFyYW1zLnRhYmxlSWQ7bGV0IGQ9e0FDVElPTjoiU0hPV19ESUZGUyIsVEFCTEU6YS50YWJsZUlkLERJRkZUSU1FOihuZXcgRGF0ZSkudG9VVENTdHJpbmcoKX07YS5zYXNTdG9yZVNlcnZpY2Uuc2hvd0RpZmZzKGQsIlNBU0NvbnRyb2xUYWJsZSIsImF1'@;
put 'ZGl0b3JzL3Bvc3RkYXRhIikudGhlbihoPT57YS5wYXJhbXM9aC5wYXJhbXNbMF0sYS5yZXNwb25zZT1oLGEuY2FsY0RpZmYoKSxhLmNhbGxDaGFuZ2VzSW5mbyhhLnRhYmxlSWQpfSkuY2F0Y2goaD0+e2EuYWNjZXB0TG9hZGluZz0hMX0pLmZpbmFsbHkoKCk9PnthLmxvYWRpbmdUYWJsZT0h'@;
put 'MCxhLnNldEZvY3VzKCl9KX0pKCl9bmdPbkRlc3Ryb3koKXt0aGlzLl9kZXRhaWxzU3ViJiZ0aGlzLl9kZXRhaWxzU3ViLnVuc3Vic2NyaWJlKCl9c2V0Rm9jdXMoKXtzZXRUaW1lb3V0KCgpPT57bGV0IGE9d2luZG93LmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJhY2NlcHRCdG4iKTthJiZh'@;
put 'LmZvY3VzKCl9LDIwMCl9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoR2Uoa2gpLEdlKEJzKSxHZSh2YyksR2UoQ3UpLEdlKExzKSl9fXN0YXRpY3t0aGlzLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAtYXBwcm92ZS1kZXRh'@;
put 'aWxzIl1dLGhvc3RBdHRyczpbMSwiY29udGVudC1jb250YWluZXIiXSxkZWNsczo0Mix2YXJzOjEyLGNvbnN0czpbWzMsImNsck1vZGFsT3BlbkNoYW5nZSIsImNsck1vZGFsT3BlbiJdLFsxLCJtb2RhbC10aXRsZSJdLFsxLCJtb2RhbC1ib2R5Il0sWzEsInRhYmxlIl0sWzEsImxlZnQiXSxb'@;
put 'NCwibmdGb3IiLCJuZ0Zvck9mIl0sWzEsIm1vZGFsLWZvb3RlciJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLXByaW1hcnkiLDMsImNsaWNrIl0sWzQsIm5nSWYiXSxbMSwiZm9ybS1ibG9jayJdLFsxLCJmb3JtLWdyb3VwIl0sWyJmb3IiLCJmb3JtRmllbGRzXzgi'@;
put 'XSxbImlkIiwiZm9ybUZpZWxkc184Iiwicm93cyIsIjUiLDEsInctMTAwIiwzLCJuZ01vZGVsQ2hhbmdlIiwibmdNb2RlbCIsIm5nTW9kZWxPcHRpb25zIiwiaW5uZXJIVE1MIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tb3V0bGluZSIsMywiY2xpY2siXSxbInR5cGUiLCJzdWJt'@;
put 'aXQiLDEsImJ0biIsImJ0bi1zdWNjZXNzLW91dGxpbmUiLDMsImNsaWNrIiwiY2xyTG9hZGluZyJdLFsxLCJjb250ZW50LWFyZWEiXSxbImNsYXNzIiwiY2FyZCIsNCwibmdJZiJdLFsiY2xhc3MiLCJsZWZ0IGxpbmstaXQiLDMsInJvdXRlckxpbmsiLDQsIm5nSWYiXSxbImNsYXNzIiwibGVm'@;
put 'dCIsNCwibmdJZiJdLFsxLCJsZWZ0IiwibGluay1pdCIsMywicm91dGVyTGluayJdLFsiY2xyVGFiTGluayIsIiJdLFs0LCJjbHJJZkFjdGl2ZSJdLFsxLCJvdmVyZmxvdy1hdXRvIl0sWzEsImNhcmQiXSxbImNsYXNzIiwiY2FyZC1oZWFkZXIgZC1mbGV4IGZsZXgtY29sdW1uIGp1c3RpZnkt'@;
put 'Y29udGVudC1jZW50ZXIiLDQsIm5nSWYiXSxbMSwib3ZlcmZsb3ctYXV0byIsIm1yLTEyIl0sWyJjbGFzcyIsImgtNzB2aCBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBmbGV4LWNvbHVtbiBhbGlnbi1pdGVtcy1jZW50ZXIiLDQsIm5nSWYiXSxbMSwiY2FyZC1oZWFkZXIiLCJkLWZs'@;
put 'ZXgiLCJmbGV4LWNvbHVtbiIsImp1c3RpZnktY29udGVudC1jZW50ZXIiXSxbImNsYXNzIiwibXQtMCIsNCwibmdJZiJdLFsxLCJtdC0wIl0sWzEsImNhcmQtaGVhZGVyIiwicC0wIl0sWzEsImNsci1yb3ciXSxbMSwiY2xyLWNvbC1tZC00IiwiYXBwcm92YWxCYWNrIl0sWzEsImJ0biIsImJ0'@;
put 'bi1vdXRsaW5lIiwibS0wIiwzLCJjbGljayJdLFsic2hhcGUiLCJjYXJldCIsImRpciIsImxlZnQiLCJzaXplIiwiMjAiXSxbMSwiY2xyLWNvbC1tZC00IiwiZC1mbGV4IiwianVzdGlmeS1jb250ZW50LWNlbnRlciJdLFsxLCJtdC0wIiwiZm9udC13ZWlnaHQtMzAwIl0sWzEsImNsci1jb2wt'@;
put 'bWQtNCIsImFwcHJvdmFsSW5mbyJdLFsxLCJ0b29sdGlwIiwidG9vbHRpcC1zbSIsInRvb2x0aXAtdG9wLWxlZnQiLDMsImNsaWNrIl0sWyJzaGFwZSIsImluZm8tc3RhbmRhcmQiLCJzaXplIiwiMjgiXSxbMSwidGV4dC1jZW50ZXIiLCJtdC0xMCJdLFsxLCJjYXJkLWJsb2NrIiwicC0wIl0s'@;
put 'WyJjbGFzcyIsImNhcmQtdGV4dCIsNCwibmdJZiJdLFsiY2xhc3MiLCJoLTI0dmggZC1mbGV4IGZsZXgtY29sdW1uIGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyIiw0LCJuZ0lmIl0sWzEsInRhYmxlQ29udCIsIm10LTAiXSxbImNsYXNzIiwidGV4dC1jZW50ZXIg'@;
put 'Zm9udC1zaXplLTE4Iiw0LCJuZ0lmIl0sWzEsImQtZmxleCJdLFsiY2xhc3MiLCJsZWZ0Iiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbImNsYXNzIiwiZC1mbGV4IiwzLCJuZ0NsYXNzIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMSwiY2FyZC10ZXh0Il0sWzEsImNsci1yb3ciLCJmb250LXNpemUt'@;
put 'MTUiXSxbMSwiY2xyLWNvbC1tZC01Il0sWzEsImNsci1jb2wtbWQtNyJdLFsxLCJjYXJkLWJsb2NrIiwiZC1mbGV4IiwianVzdGlmeS1jb250ZW50LWNlbnRlciJdLFsxLCJkLWZsZXgiLCJqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIiwibXQtMCJdLFsxLCJjbHItcm93IiwiY2xyLWdhcC01Iiwi'@;
put 'Y2xyLWdhcC1zbS0wIl0sWzEsImJ0biIsImJ0bi1zbSIsImJ0bi1vdXRsaW5lIiwidGV4dC1jZW50ZXIiLCJtdC01IiwibXItNWkiLDMsImNsaWNrIl0sWzEsImJ0biIsImJ0bi1zbSIsImJ0bi1zdWNjZXNzLW91dGxpbmUiLCJ0ZXh0LWNlbnRlciIsIm10LTUiLCJtci01aSIsMywiY2xpY2si'@;
put 'XSxbMSwiYnRuIiwiYnRuLXNtIiwiYnRuLWluZm8tb3V0bGluZSIsInRleHQtY2VudGVyIiwibXQtNSIsMywiY2xpY2siXSxbMSwiY2FyZC1ibG9jayIsImQtZmxleCIsImp1c3RpZnktY29udGVudC1jZW50ZXIiLCJjbHItZmxleC1jb2x1bW4iLCJjbHItZ2FwLTUiLCJjbHItZmxleC1zbS1y'@;
put 'b3ciLCJjbHItZ2FwLXNtLTAiLCJjbHItYWxpZ24taXRlbXMtY2VudGVyIl0sWyJpZCIsImFjY2VwdEJ0biIsInR5cGUiLCJzdWJtaXQiLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1zdWNjZXNzIiwibXItNWkiLDMsImNsaWNrIiwiY2xyTG9hZGluZyIsImRpc2FibGVkIl0sWyJpZCIsInJlamVj'@;
put 'dEJ0biIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuIiwiYnRuLWRhbmdlciIsIm1yLTVpIiwzLCJjbGljayIsImRpc2FibGVkIl0sWzEsIm0tMCIsIm1sLTIwaSJdLFsidHlwZSIsImNoZWNrYm94IiwiY2xyVG9nZ2xlIiwiIiwiY2hlY2tlZCIsIiIsMywibmdNb2RlbENoYW5nZSIsImNoYW5nZSIs'@;
put 'Im5nTW9kZWwiXSxbMSwiZm9ybWF0dGVkLXZhbHVlcy10b2dnbGUiXSxbMSwiY2FyZC1ibG9jayIsImQtZmxleCIsImNsci1hbGlnbi1pdGVtcy1jZW50ZXIiLCJjbHItZmxleC1jb2x1bW4iXSxbImNsYXNzIiwicm93cy1ub3RpY2UiLDQsIm5nSWYiXSxbMSwiZC1mbGV4IiwiY2xyLWZsZXgt'@;
put 'Y29sdW1uIiwiY2xyLWdhcC01IiwiY2xyLWZsZXgtc20tcm93IiwiY2xyLWdhcC1zbS0wIl0sWzEsImxhYmVsIiwibGFiZWwtd2FybmluZyJdLFsxLCJiYWRnZSJdLFsxLCJsYWJlbCIsImxhYmVsLXN1Y2Nlc3MiXSxbMSwibGFiZWwiLCJsYWJlbC1kYW5nZXIiXSxbMSwidGV4dC1jZW50ZXIi'@;
put 'LCJmb250LXNpemUtMTgiXSxbMSwibXQtMTUiXSxbMSwibGluay1pdCIsMywicm91dGVyTGluayJdLFsxLCJtdC0xMCJdLFsxLCJyb3dzLW5vdGljZSJdLFsic2hhcGUiLCJleGNsYW1hdGlvbi10cmlhbmdsZSIsMSwibWItNSIsImNvbG9yLW9yYW5nZSJdLFsxLCJoLTI0dmgiLCJkLWZsZXgi'@;
put 'LCJmbGV4LWNvbHVtbiIsImp1c3RpZnktY29udGVudC1jZW50ZXIiLCJhbGlnbi1pdGVtcy1jZW50ZXIiXSxbMSwic3Bpbm5lciJdLFsiY2xhc3MiLCJtdC0xMCIsNCwibmdJZiJdLFsiY2RzLXRleHQiLCJzZWN0aW9uIl0sWzEsImQtZmxleCIsMywibmdDbGFzcyJdLFsiY2xhc3MiLCJsZWZ0'@;
put 'IiwzLCJuZ0NsYXNzIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMSwibGVmdCIsMywibmdDbGFzcyJdLFsiY2xhc3MiLCJ0b29sdGlwLWNvbnRlbnQiLDQsIm5nSWYiXSxbMSwidG9vbHRpcC1jb250ZW50Il0sWzEsImgtNzB2aCIsImQtZmxleCIsImp1c3RpZnktY29udGVudC1jZW50ZXIiLCJm'@;
put 'bGV4LWNvbHVtbiIsImFsaWduLWl0ZW1zLWNlbnRlciJdLFsiY2xhc3MiLCJzcGlubmVyIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImQtZmxleCBmbGV4LWNvbHVtbiBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImNhcmQtYmxvY2siLDQsIm5nSWYiXSxbMSwiZC1m'@;
put 'bGV4IiwiZmxleC1jb2x1bW4iLCJqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIl0sWyJjbGFzcyIsImNhcmQgbS0wIiw0LCJuZ0lmIl0sWzEsImNhcmQiLCJtLTAiXSxbMSwiY2FyZC1oZWFkZXIiXSxbMSwiYnRuIiwiYnRuLW91dGxpbmUiLDMsImNsaWNrIl0sWyJzaGFwZSIsImFuZ2xlIiwiZGly'@;
put 'ZWN0aW9uIiwibGVmdCIsInNpemUiLCIyMCJdLFsxLCJjbHItY29sLW1kLTQiXSxbMSwibXQtMCIsImZvbnQtd2VpZ2h0LTMwMCIsInRleHQtY2VudGVyIl0sWzEsIm0tMCIsInRleHQtY2VudGVyIiwiY29sb3ItZGFya2VyLWdyYXkiXSxbMSwibS0wIiwibWwtMjAtaSJdLFsxLCJjYXJkLWJs'@;
put 'b2NrIiwicC0wIiwib3ZlcmZsb3ctYXV0byIsIm1yLTEyIl0sWyJjbGFzcyIsImgtMjV2aCBkLWZsZXggZmxleC1jb2x1bW4ganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXIiLDQsIm5nSWYiXSxbMSwidGFibGVDb250Il0sWzEsImgtMjV2aCIsImQtZmxleCIsImZs'@;
put 'ZXgtY29sdW1uIiwianVzdGlmeS1jb250ZW50LWNlbnRlciIsImFsaWduLWl0ZW1zLWNlbnRlciJdLFsxLCJjYXJkLWJsb2NrIl0sWzEsImxvYWRlciJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihkLGgpezEmZCYmKGRlKDAsImNsci1tb2RhbCIsMCksZ2koImNsck1vZGFsT3BlbkNoYW5nZSIsZnVu'@;
put 'Y3Rpb24odil7cmV0dXJuIG1pKGguZGV0YWlsc09wZW4sdil8fChoLmRldGFpbHNPcGVuPXYpLHZ9KSxkZSgxLCJoMyIsMSksTGUoMiwiQXBwcm92YWwgRGV0YWlscyIpLGhlKCksZGUoMywiZGl2IiwyKSg0LCJ0YWJsZSIsMykoNSwidGhlYWQiKSg2LCJ0ciIpKDcsInRoIiw0KSxMZSg4LCJO'@;
put 'YW1lIiksaGUoKSxkZSg5LCJ0aCIsNCksTGUoMTAsIlZhbHVlIiksaGUoKSgpKCksZGUoMTEsInRib2R5IiksZ3QoMTIsbHl0LDUsMywidHIiLDUpLGhlKCkoKSgpLGRlKDEzLCJkaXYiLDYpKDE0LCJidXR0b24iLDcpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gaC5kZXRhaWxzT3Bl'@;
put 'bj0hMX0pLExlKDE1LCIgT2sgIiksaGUoKSgpKCksZGUoMTYsImNsci1tb2RhbCIsMCksZ2koImNsck1vZGFsT3BlbkNoYW5nZSIsZnVuY3Rpb24odil7cmV0dXJuIG1pKGgudGFibGVGbGFnLHYpfHwoaC50YWJsZUZsYWc9diksdn0pLGRlKDE3LCJoMyIsMSksTGUoMTgsIkFsbCBEZXRhaWxz'@;
put 'IiksaGUoKSxkZSgxOSwiZGl2IiwyKSxndCgyMCxoeXQsMTksMiwiY2xyLXRhYnMiLDgpLGhlKCksZGUoMjEsImRpdiIsNikoMjIsImJ1dHRvbiIsNyksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBoLnRhYmxlRmxhZz0hMX0pLExlKDIzLCIgT2sgIiksaGUoKSgpKCksZGUoMjQsImNs'@;
put 'ci1tb2RhbCIsMCksZ2koImNsck1vZGFsT3BlbkNoYW5nZSIsZnVuY3Rpb24odil7cmV0dXJuIG1pKGgucmVqZWN0T3Blbix2KXx8KGgucmVqZWN0T3Blbj12KSx2fSksZGUoMjUsImgzIiwxKSxMZSgyNiwiUmVhc29uIE1lc3NhZ2UiKSxoZSgpLGRlKDI3LCJkaXYiLDIpKDI4LCJmb3JtIiko'@;
put 'MjksInNlY3Rpb24iLDkpKDMwLCJkaXYiLDEwKSgzMSwibGFiZWwiLDExKSxMZSgzMiwiUmVhc29uIGZvciByZWplY3Rpbmc/IiksaGUoKSxkZSgzMywidGV4dGFyZWEiLDEyKSxnaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24odil7cmV0dXJuIG1pKGguc3VibWl0UmVhc29uLHYpfHwoaC5z'@;
put 'dWJtaXRSZWFzb249diksdn0pLGhlKCkoKSgpKCkoKSxkZSgzNCwiZGl2Iiw2KSgzNSwiYnV0dG9uIiwxMyksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBoLnJlamVjdE9wZW49ITF9KSxMZSgzNiwiIENhbmNlbCAiKSxoZSgpLGRlKDM3LCJidXR0b24iLDE0KSxGdCgiY2xpY2siLGZ1'@;
put 'bmN0aW9uKCl7cmV0dXJuIGgucmVqZWN0aW5nKCl9KSxMZSgzOCwiIE9LICIpLGhlKCkoKSgpLGRlKDM5LCJkaXYiLDE1KSxndCg0MCxSeXQsNCwyLCJkaXYiLDE2KSg0MSwkeXQsMywyLCJkaXYiLDgpLGhlKCkpLDImZCYmKHBpKCJjbHJNb2RhbE9wZW4iLGguZGV0YWlsc09wZW4pLGZlKDEy'@;
put 'KSxNZSgibmdGb3JPZiIsaC5rZXlzQXJyYXkpLGZlKDQpLHBpKCJjbHJNb2RhbE9wZW4iLGgudGFibGVGbGFnKSxmZSg0KSxNZSgibmdJZiIsaC50YWJsZUZsYWcpLGZlKDQpLHBpKCJjbHJNb2RhbE9wZW4iLGgucmVqZWN0T3BlbiksZmUoOSkscGkoIm5nTW9kZWwiLGguc3VibWl0UmVhc29u'@;
put 'KSxNZSgibmdNb2RlbE9wdGlvbnMiLEdzKDExLGF5dCkpKCJpbm5lckhUTUwiLGguc3VibWl0UmVhc29uLFY0KSxmZSg0KSxNZSgiY2xyTG9hZGluZyIsaC5yZWplY3RMb2FkaW5nKSxmZSgzKSxNZSgibmdJZiIsIWguc3VibWl0dGVkKSxmZSgpLE1lKCJuZ0lmIixoLnN1Ym1pdHRlZCkpfSxk'@;
put 'ZXBlbmRlbmNpZXM6W3d1LG5zLGJhLGw3LHFsLE1kLG5sLG83LCRzLHlwLGMxLEhsLHJzLG91LEt1LGowLEh5LFAyLGRzLElkLEJ5LFNoLF9tLENtLHg3LHdtLHltLFM3XSxlbmNhcHN1bGF0aW9uOjJ9KX19cmV0dXJuIGN9KSgpO2NvbnN0IEt5dD1jPT4oe25vQm9yZGVyOmN9KSxxeXQ9KCk9'@;
put 'PlszLDUsMTAsMTVdO2Z1bmN0aW9uIFh5dChjLGwpezEmYyYmKGRlKDAsImRpdiIsMTApKDEsImRpdiIsMTEpLEd0KDIsImNsci1pY29uIiwxMiksZGUoMywiaDMiLDEzKSxMZSg0LCJUaGVyZSBhcmUgbm8gYXBwcm92YWxzIHJlbWFpbmluZyIpLGhlKCkoKSgpKX1mdW5jdGlvbiBKeXQoYyxs'@;
put 'KXsxJmMmJihkZSgwLCJoMyIsMTQpLExlKDEsIiBSRVZJRVcgIiksaGUoKSl9ZnVuY3Rpb24gUXl0KGMsbCl7aWYoMSZjJiYoZGUoMCwicCIsMTUpLExlKDEsIiBZb3UgaGF2ZSAiKSxkZSgyLCJzcGFuIiksTGUoMyksaGUoKSxMZSg0LCJhcHByb3ZhbHMgcmVtYWluaW5nICIpLGhlKCkpLDIm'@;
put 'Yyl7Y29uc3QgYT1SZSgpO2ZlKDMpLERyKCIiLGEucmVtYWluZWQsIiAiKX19ZnVuY3Rpb24gZV90KGMsbCl7MSZjJiYoZGUoMCwic3BhbiIsMTgpLExlKDEsIiBMb2FkaW5nLi4uICIpLGhlKCkpfWZ1bmN0aW9uIHRfdChjLGwpezEmYyYmKGRlKDAsImRpdiIpKDEsImgzIiksTGUoMiwiTG9h'@;
put 'ZGluZyBhcHByb3ZhbHMgbGlzdCIpLGhlKCkoKSl9ZnVuY3Rpb24gbl90KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2IiwxNiksZ3QoMSxlX3QsMiwwLCJzcGFuIiwxNykoMix0X3QsMywwLCJkaXYiLDkpLGhlKCkpLDImYyl7Y29uc3QgYT1SZSgpO2ZlKCksTWUoIm5nSWYiLCFhLmxvYWRlZCks'@;
put 'ZmUoKSxNZSgibmdJZiIsIWEubG9hZGVkKX19ZnVuY3Rpb24gcl90KGMsbCl7MSZjJiZHdCgwLCJjbHItaWNvbiIsMzYpfWZ1bmN0aW9uIGlfdChjLGwpezEmYyYmR3QoMCwiY2xyLXNwaW5uZXIiLDM3KSwyJmMmJk1lKCJjbHJTbWFsbCIsITApfWZ1bmN0aW9uIGFfdChjLGwpe2lmKDEmYyl7'@;
put 'Y29uc3QgYT1MbigpO2RlKDAsImNsci1kZy1yb3ciKSgxLCJjbHItZGctY2VsbCIpLExlKDIpLGhlKCksZGUoMywiY2xyLWRnLWNlbGwiKSxMZSg0KSxoZSgpLGRlKDUsImNsci1kZy1jZWxsIiksTGUoNiksaGUoKSxkZSg3LCJjbHItZGctY2VsbCIpLExlKDgpLGhlKCksZGUoOSwiY2xyLWRn'@;
put 'LWNlbGwiKSgxMCwiZGl2IiwyNCkoMTEsImEiLDI1KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7Y29uc3QgaD13dChhKS5pbmRleDtyZXR1cm4gQ3QoUmUoMikuZ2V0Q2xpY2tlZChoKSl9KSxHdCgxMiwiY2xyLWljb24iLDI2KSxkZSgxMywic3BhbiIsMjcpLExlKDE0LCJHbyB0byByZXZpZXcg'@;
put 'cGFnZSBzY3JlZW4iKSxoZSgpKCksZGUoMTUsImEiLDI4KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7Y29uc3QgaD13dChhKSxmPWguJGltcGxpY2l0LHY9aC5pbmRleCxNPVJlKDIpO3JldHVybiBDdChmLnJlamVjdExvYWRpbmc/IiI6TS5yZWplY3RpbmcodikpfSksZ3QoMTYscl90LDEsMCwi'@;
put 'Y2xyLWljb24iLDI5KSgxNyxpX3QsMSwxLCJjbHItc3Bpbm5lciIsMzApLGRlKDE4LCJzcGFuIiwyNyksTGUoMTksIlJlamVjdCIpLGhlKCkoKSxkZSgyMCwiYSIsMzEpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtjb25zdCBoPXd0KGEpLiRpbXBsaWNpdDtyZXR1cm4gQ3QoUmUoMikuZ2V0VGFi'@;
put 'bGUoaC50YWJsZUlkKSl9KSxHdCgyMSwiY2xyLWljb24iLDMyKSxkZSgyMiwic3BhbiIsMjcpLExlKDIzLCJHbyB0byBzdGFnZWQgZGF0YSBzY3JlZW4iKSxoZSgpKCkoKSgpLGRlKDI0LCJjbHItZGctY2VsbCIsMzMpKDI1LCJidXR0b24iLDM0KSxGdCgiY2xpY2siLGZ1bmN0aW9uKGgpe2Nv'@;
put 'bnN0IGY9d3QoYSkuJGltcGxpY2l0O3JldHVybiBSZSgyKS5kb3dubG9hZChmLnRhYmxlSWQpLEN0KGguc3RvcFByb3BhZ2F0aW9uKCkpfSksR3QoMjYsImNsci1pY29uIiwzNSksaGUoKSgpKCl9aWYoMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O2ZlKDIpLHdyKGEuc3VibWl0dGVyKSxmZSgy'@;
put 'KSx3cihhLmJhc2VUYWJsZSksZmUoMiksd3IoYS5zdWJtaXR0ZWQpLGZlKDIpLHdyKGEuc3VibWl0UmVhc29uKSxmZSg4KSxNZSgibmdJZiIsIWEucmVqZWN0TG9hZGluZyksZmUoKSxNZSgibmdJZiIsYS5yZWplY3RMb2FkaW5nKSxmZSg4KSxNZSgiaWQiLGEudGFibGVJZCl9fWZ1bmN0aW9u'@;
put 'IG9fdChjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIpKDEsImNsci1kYXRhZ3JpZCIsMTkpKDIsImNsci1kZy1jb2x1bW4iLDIwKSxMZSgzLCJTVUJNSVRURVIiKSxoZSgpLGRlKDQsImNsci1kZy1jb2x1bW4iLDIwKSxMZSg1LCJCQVNFIFRBQkxFIiksaGUoKSxkZSg2LCJjbHItZGctY29sdW1u'@;
put 'IiwyMCksTGUoNywiU1VCTUlUVEVEIiksaGUoKSxkZSg4LCJjbHItZGctY29sdW1uIiwyMCksTGUoOSwiU1VCTUlUIFJFQVNPTiIpLGhlKCksZGUoMTAsImNsci1kZy1jb2x1bW4iKSxMZSgxMSwiQUNUSU9OIiksaGUoKSxkZSgxMiwiY2xyLWRnLWNvbHVtbiIpLExlKDEzLCJET1dOTE9BRCIp'@;
put 'LGhlKCksZ3QoMTQsYV90LDI3LDcsImNsci1kZy1yb3ciLDIxKSxkZSgxNSwiY2xyLWRnLWZvb3RlciIpKDE2LCJjbHItZGctcGFnaW5hdGlvbiIsMjIsMCkoMTgsImNsci1kZy1wYWdlLXNpemUiLDIzKSxMZSgxOSwiSXRlbXMgcGVyIHBhZ2UiKSxoZSgpLExlKDIwKSxoZSgpKCkoKSgpKSwy'@;
put 'JmMpe2NvbnN0IGE9aGEoMTcpLGQ9UmUoKTtmZSgyKSxNZSgiY2xyRGdGaWVsZCIsInN1Ym1pdHRlciIpLGZlKDIpLE1lKCJjbHJEZ0ZpZWxkIiwiYmFzZVRhYmxlIiksZmUoMiksTWUoImNsckRnRmllbGQiLCJzdWJtaXR0ZWQiKSxmZSgyKSxNZSgiY2xyRGdGaWVsZCIsInN1Ym1pdFJlYXNv'@;
put 'biIpLGZlKDYpLE1lKCJjbHJEZ0l0ZW1zT2YiLGQuYXBwcm92ZUxpc3QpLGZlKDIpLE1lKCJjbHJEZ1BhZ2VTaXplIiwxMCksZmUoMiksTWUoImNsclBhZ2VTaXplT3B0aW9ucyIsR3MoMTAscXl0KSksZmUoMiksVmYoIiAiLGEuZmlyc3RJdGVtKzEsIiAtICIsYS5sYXN0SXRlbSsxLCIgb2Yg'@;
put 'IixhLnRvdGFsSXRlbXMsIiBhcHByb3ZhbHMgIil9fWxldCBzX3Q9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmLHYpe3RoaXMuc2FzU3RvcmVTZXJ2aWNlPWEsdGhpcy5ldmVudFNlcnZpY2U9ZCx0aGlzLnJvdXRlPWgsdGhpcy5zYXNTZXJ2aWNlPWYsdGhpcy5jZHI9dix0aGlz'@;
put 'LmxvYWRlZD0hMSx0aGlzLml0ZW1zTnVtPTEwfWdldFRhYmxlKGEpe3RoaXMucm91dGUubmF2aWdhdGVCeVVybCgiL3N0YWdlLyIrYSl9Z2V0Q2xpY2tlZChhKXt2b2lkIDAhPT10aGlzLmFwcHJvdmVMaXN0JiYodGhpcy50YWJsZUlkPXRoaXMuYXBwcm92ZUxpc3RbYV0udGFibGVJZCx0aGlz'@;
put 'LnJvdXRlLm5hdmlnYXRlQnlVcmwoInJldmlldy9hcHByb3ZlRGV0LyIrdGhpcy5hcHByb3ZlTGlzdFthXS50YWJsZUlkKSl9cmVqZWN0aW5nKGEpe3ZhciBkPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe3ZvaWQgMCE9PWQuYXBwcm92ZUxpc3QmJihkLnRhYmxlSWQ9ZC5hcHByb3ZlTGlz'@;
put 'dFthXS50YWJsZUlkKTtsZXQgaD17U1RQX0FDVElPTjoiUkVKRUNUX1RBQkxFIixUQUJMRTpkLnRhYmxlSWQsU1RQX1JFQVNPTjoicXVpY2sgcmVqZWN0aW9uIn07dHJ5eyhkLmFwcHJvdmVMaXN0fHxbXSlbYV0ucmVqZWN0TG9hZGluZz0hMCwoeWllbGQgZC5zYXNTdG9yZVNlcnZpY2UucmVq'@;
put 'ZWN0aW5nKGgsIkJyb3dzZXJQYXJhbXMiLCJhcHByb3ZlcnMvcmVqZWN0aW9uIikpLmZyb21zYXNbMF0uUkVTUE9OU0UuaW5jbHVkZXMoIlNVQ0NFU1MiKSYmKChkLmFwcHJvdmVMaXN0fHxbXSlbYV0ucmVqZWN0TG9hZGluZz0hMSxkLmFwcHJvdmVMaXN0Py5zcGxpY2UoYSwxKSxkLnJlbWFp'@;
put 'bmVkLS0sZC5jZHIuZGV0ZWN0Q2hhbmdlcygpKX1jYXRjaChmKXtkLmV2ZW50U2VydmljZS5jYXRjaFJlc3BvbnNlRXJyb3IoImFwcHJvdmVycy9yZWplY3Rpb24iLGYpfX0pKCl9bmdPbkluaXQoKXt2YXIgYT10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXthLmZldGNoQXBwcm92YWxzKCl9'@;
put 'KSgpfWZldGNoQXBwcm92YWxzKCl7dmFyIGE9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7YS5pdGVtc051bT0xMDtsZXQgZD17U1RQX0FDVElPTjoiT1BFTl9BUFBST1ZBTFMifTt0cnl7bGV0IGg9eWllbGQgYS5zYXNTdG9yZVNlcnZpY2UuZ2V0QXBwcm92YWxzKGQsIkJyb3dzZXJQYXJh'@;
put 'bXMiLCJhcHByb3ZlcnMvZ2V0YXBwcm92YWxzIik7YS5yZW1haW5lZD1oLmZyb21zYXMubGVuZ3RoO2xldCBmPWguZnJvbXNhcy5tYXAoZnVuY3Rpb24odil7cmV0dXJue3RhYmxlSWQ6di5UQUJMRV9JRCxzdWJtaXR0ZXI6di5TVUJNSVRURURfQllfTk0sc3VibWl0dGVkOnYuU1VCTUlUVEVE'@;
put 'X09OX0RUVE0sYmFzZVRhYmxlOnYuQkFTRV9UQUJMRSxzdWJtaXRSZWFzb246di5TVUJNSVRURURfUkVBU09OX1RYVH19KTthLmFwcHJvdmVMaXN0PWYsYS5sb2FkZWQ9ITB9Y2F0Y2goaCl7YS5ldmVudFNlcnZpY2UuY2F0Y2hSZXNwb25zZUVycm9yKCJhcHByb3ZlcnMvZ2V0YXBwcm92YWxz'@;
put 'IixoKX19KSgpfWRvd25sb2FkKGEpe2xldCBkPXRoaXMuc2FzU2VydmljZS5nZXRTYXNqc0NvbmZpZygpLGg9ZC5zZXJ2ZXJVcmwsZj1kLmFwcExvYyx2PXRoaXMuc2FzU2VydmljZS5nZXRFeGVjdXRpb25QYXRoKCk7d2luZG93Lm9wZW4oaCt2KyIvP19wcm9ncmFtPSIrZisiL3NlcnZpY2Vz'@;
put 'L2F1ZGl0b3JzL2dldGF1ZGl0ZmlsZSZ0YWJsZT0iK2EpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKEdlKGtoKSxHZSh2YyksR2UoTHMpLEdlKEJzKSxHZShFcykpfX1zdGF0aWN7dGhpcy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6'@;
put 'W1siYXBwLWFwcHJvdmUiXV0saG9zdEF0dHJzOlsxLCJjb250ZW50LWNvbnRhaW5lciJdLGRlY2xzOjksdmFyczo4LGNvbnN0czpbWyJwYWdpbmF0aW9uIiwiIl0sWzEsImNvbnRlbnQtYXJlYSJdLFsxLCJjYXJkIl0sWyJjbGFzcyIsImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIiw0'@;
put 'LCJuZ0lmIl0sWzEsImNhcmQtaGVhZGVyIiwzLCJuZ0NsYXNzIl0sWyJjbGFzcyIsImNlbnRlciBjbHItY29sLW1kLTEyIHRleHQtY2VudGVyIiw0LCJuZ0lmIl0sWyJjbGFzcyIsInRleHQtY2VudGVyIGZvbnQtd2VpZ2h0LTcwMCBjb2xvci1kYXJrLWdyYXkiLDQsIm5nSWYiXSxbImNsYXNz'@;
put 'IiwiYXBwcm92YWxzLWxpc3Qtd3JhcHBlciIsNCwibmdJZiJdLFsibmctaWYiLCJsb2FkZWQiLDEsImNsci1jb2wtbWQtMTIiXSxbNCwibmdJZiJdLFsxLCJkLWZsZXgiLCJqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIl0sWzEsImNhcmQtYmxvY2siLCJub2FwcHJvdmFscy1pbmZvLXdyYXBwZXIi'@;
put 'XSxbInNoYXBlIiwid2FybmluZy1zdGFuZGFyZCIsInNpemUiLCI2MCIsMSwiaXMtaW5mbyIsImljb24tZGMtZmlsbCJdLFsxLCJ0ZXh0LWNlbnRlciIsImNvbG9yLWdyYXkiXSxbMSwiY2VudGVyIiwiY2xyLWNvbC1tZC0xMiIsInRleHQtY2VudGVyIl0sWzEsInRleHQtY2VudGVyIiwiZm9u'@;
put 'dC13ZWlnaHQtNzAwIiwiY29sb3ItZGFyay1ncmF5Il0sWzEsImFwcHJvdmFscy1saXN0LXdyYXBwZXIiXSxbImNsYXNzIiwic3Bpbm5lciIsNCwibmdJZiJdLFsxLCJzcGlubmVyIl0sWzEsImRhdGFncmlkLWNvbXBhY3QiLCJkYXRhZ3JpZC1jdXN0b20tZm9vdGVyIl0sWzMsImNsckRnRmll'@;
put 'bGQiXSxbNCwiY2xyRGdJdGVtcyIsImNsckRnSXRlbXNPZiJdLFszLCJjbHJEZ1BhZ2VTaXplIl0sWzMsImNsclBhZ2VTaXplT3B0aW9ucyJdLFsicm9sZSIsInRvb2x0aXAiLDEsImQtZmxleCIsImp1c3RpZnktY29udGVudC1hcm91bmQiXSxbMSwiY29sdW1uLWNlbnRlciIsImxpbmtzIiwi'@;
put 'dG9vbHRpcCIsInRvb2x0aXAtbWQiLCJ0b29sdGlwLWJvdHRvbS1sZWZ0IiwiY29sb3ItZ3JlZW4iLDMsImNsaWNrIl0sWyJzaGFwZSIsImNoZWNrIiwic2l6ZSIsIjI0Il0sWzEsInRvb2x0aXAtY29udGVudCJdLFsxLCJjb2x1bW4tY2VudGVyIiwibGlua3MiLCJ0b29sdGlwIiwidG9vbHRp'@;
put 'cC1tZCIsInRvb2x0aXAtYm90dG9tLWxlZnQiLCJjb2xvci1yZWQiLDMsImNsaWNrIl0sWyJzaGFwZSIsImJhbiIsInNpemUiLCIyMiIsNCwibmdJZiJdLFszLCJjbHJTbWFsbCIsNCwibmdJZiJdLFsxLCJjb2x1bW4tY2VudGVyIiwibGlua3MiLCJ0b29sdGlwIiwidG9vbHRpcC1tZCIsInRv'@;
put 'b2x0aXAtYm90dG9tLWxlZnQiLCJjb2xvci1ibHVlIiwzLCJjbGljayJdLFsic2hhcGUiLCJjb2RlIiwic2l6ZSIsIjI4Il0sWzEsInAtMCIsImQtZmxleCIsImp1c3RpZnktY29udGVudC1jZW50ZXIiXSxbImFyaWEtbGFiZWwiLCJEb3dubG9hZCBhdWRpdCBmaWxlIiwxLCJidG4iLCJidG4t'@;
put 'c3VjY2VzcyIsMywiY2xpY2siLCJpZCJdLFsic2hhcGUiLCJkb3dubG9hZCJdLFsic2hhcGUiLCJiYW4iLCJzaXplIiwiMjIiXSxbMywiY2xyU21hbGwiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZCxoKXsxJmQmJihkZSgwLCJkaXYiLDEpKDEsImRpdiIsMiksZ3QoMixYeXQsNSwwLCJkaXYiLDMp'@;
put 'LGRlKDMsImRpdiIsNCksZ3QoNCxKeXQsMiwwLCJoMyIsNSkoNSxReXQsNSwxLCJwIiw2KSxoZSgpLGd0KDYsbl90LDMsMiwiZGl2Iiw3KSxkZSg3LCJkaXYiLDgpLGd0KDgsb190LDIxLDExLCJkaXYiLDkpLGhlKCkoKSgpKSwyJmQmJihmZSgyKSxNZSgibmdJZiIsMD09PWgucmVtYWluZWQp'@;
put 'LGZlKCksTWUoIm5nQ2xhc3MiLHNwKDYsS3l0LCFoLmxvYWRlZCkpLGZlKCksTWUoIm5nSWYiLGgubG9hZGVkJiYwIT09aC5yZW1haW5lZCksZmUoKSxNZSgibmdJZiIsaC5sb2FkZWQmJjAhPT1oLnJlbWFpbmVkKSxmZSgpLE1lKCJuZ0lmIiwhaC5sb2FkZWQpLGZlKDIpLE1lKCJuZ0lmIixo'@;
put 'LmFwcHJvdmVMaXN0JiYwIT09aC5yZW1haW5lZCkpfSxkZXBlbmRlbmNpZXM6W3d1LGJhLEFtLFFmLFI3LGNPLEp5LFh4LHVPLEVtLFNwLEw3LHRfLFRtLGs3LHhtLEQ3LEhsLFJkXSxlbmNhcHN1bGF0aW9uOjJ9KX19cmV0dXJuIGN9KSgpO2NvbnN0IGxfdD1jPT4oe25vQm9yZGVyOmN9KSxj'@;
put 'X3Q9KCk9PlszLDUsMTAsMTVdO2Z1bmN0aW9uIHVfdChjLGwpezEmYyYmKGRlKDAsImRpdiIsMTMpKDEsImRpdiIsMTQpLEd0KDIsImNsci1pY29uIiwxNSksZGUoMywiaDMiLDE2KSxMZSg0LCIgWW91IGhhdmUgbm90IHN1Ym1pdHRlZCBhbnkgdGFibGVzICIpLGhlKCkoKSgpKX1mdW5jdGlv'@;
put 'biBkX3QoYyxsKXsxJmMmJihkZSgwLCJoMyIsMTcpLExlKDEsIiBTVUJNSVQgUVVFVUUgIiksaGUoKSl9ZnVuY3Rpb24gaF90KGMsbCl7aWYoMSZjJiYoZGUoMCwicCIsMTgpLExlKDEsIiBZb3UgaGF2ZSAiKSxkZSgyLCJzcGFuIiksTGUoMyksaGUoKSxMZSg0LCJzdWJtaXNzaW9ucyB3YWl0'@;
put 'aW5nIHRvIGJlIGFwcHJvdmVkICIpLGhlKCkpLDImYyl7Y29uc3QgYT1SZSgzKTtmZSgzKSxEcigiIixhLnJlbWFpbmVkLCIgIil9fWZ1bmN0aW9uIGZfdChjLGwpezEmYyYmKGRlKDAsInNwYW4iLDIxKSxMZSgxLCIgTG9hZGluZy4uLiAiKSxoZSgpKX1mdW5jdGlvbiBwX3QoYyxsKXsxJmMm'@;
put 'JihkZSgwLCJkaXYiKSgxLCJoMyIpLExlKDIsIkxvYWRpbmcgc3VibWl0dGVkIGxpc3QiKSxoZSgpKCkpfWZ1bmN0aW9uIGdfdChjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIsMTkpLGd0KDEsZl90LDIsMCwic3BhbiIsMjApKDIscF90LDMsMCwiZGl2IiwzKSxoZSgpKSwyJmMpe2NvbnN0IGE9'@;
put 'UmUoMyk7ZmUoKSxNZSgibmdJZiIsIWEubG9hZGVkKSxmZSgpLE1lKCJuZ0lmIiwhYS5sb2FkZWQpfX1mdW5jdGlvbiBtX3QoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJjbHItZGctcm93IiwyOCksRnQoImNsaWNrIixmdW5jdGlvbigpe2NvbnN0IGg9d3QoYSkuJGltcGxpY2l0'@;
put 'O3JldHVybiBDdChSZSg1KS5nb1RvRGV0YWlscyhoLnRhYmxlSWQpKX0pLGRlKDEsImNsci1kZy1jZWxsIiksTGUoMiksaGUoKSxkZSgzLCJjbHItZGctY2VsbCIpLExlKDQpLGhlKCksZGUoNSwiY2xyLWRnLWNlbGwiKSxMZSg2KSxoZSgpLGRlKDcsImNsci1kZy1jZWxsIikoOCwiZGl2Iiwy'@;
put 'OSkoOSwiYSIsMzApLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtjb25zdCBoPXd0KGEpLiRpbXBsaWNpdDtyZXR1cm4gQ3QoUmUoNSkuZ29Ub1N0YWdlKGgudGFibGVJZCkpfSksR3QoMTAsImNsci1pY29uIiwzMSksZGUoMTEsInNwYW4iLDMyKSxMZSgxMiwiR28gdG8gc3RhZ2VkIGRhdGEgc2Ny'@;
put 'ZWVuIiksaGUoKSgpKCkoKSxkZSgxMywiY2xyLWRnLWNlbGwiLDMzKSgxNCwiYnV0dG9uIiwzNCksRnQoImNsaWNrIixmdW5jdGlvbihoKXtjb25zdCBmPXd0KGEpLiRpbXBsaWNpdDtyZXR1cm4gUmUoNSkuZG93bmxvYWQoZi50YWJsZUlkKSxDdChoLnN0b3BQcm9wYWdhdGlvbigpKX0pLEd0'@;
put 'KDE1LCJjbHItaWNvbiIsMzUpLGhlKCkoKSgpfWlmKDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtmZSgyKSx3cihhLmJhc2UpLGZlKDIpLHdyKGEuc3VibWl0dGVkKSxmZSgyKSx3cihhLnN1Ym1pdFJlYXNvbil9fWZ1bmN0aW9uIHZfdChjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIpKDEsImNs'@;
put 'ci1kYXRhZ3JpZCIsMjMpKDIsImNsci1kZy1jb2x1bW4iKSxMZSgzLCJCQVNFIFRBQkxFIiksaGUoKSxkZSg0LCJjbHItZGctY29sdW1uIiwyNCksTGUoNSwiU1VCTUlUVEVEIiksaGUoKSxkZSg2LCJjbHItZGctY29sdW1uIiwyNCksTGUoNywiU1VCTUlUIFJFQVNPTiIpLGhlKCksZGUoOCwi'@;
put 'Y2xyLWRnLWNvbHVtbiIsMTMpLExlKDksIkFDVElPTiIpLGhlKCksZGUoMTAsImNsci1kZy1jb2x1bW4iLDEzKSxMZSgxMSwiRE9XTkxPQUQiKSxoZSgpLGd0KDEyLG1fdCwxNiwzLCJjbHItZGctcm93IiwyNSksZGUoMTMsImNsci1kZy1mb290ZXIiKSgxNCwiY2xyLWRnLXBhZ2luYXRpb24i'@;
put 'LDI2LDApKDE2LCJjbHItZGctcGFnZS1zaXplIiwyNyksTGUoMTcsIkl0ZW1zIHBlciBwYWdlIiksaGUoKSxMZSgxOCksaGUoKSgpKCkoKSksMiZjKXtjb25zdCBhPWhhKDE1KSxkPVJlKDQpO2ZlKDQpLE1lKCJjbHJEZ0ZpZWxkIiwic3VibWl0dGVkIiksZmUoMiksTWUoImNsckRnRmllbGQi'@;
put 'LCJzdWJtaXRSZWFzb24iKSxmZSg2KSxNZSgiY2xyRGdJdGVtc09mIixkLnN1Ym1pdHRlckxpc3QpLGZlKDIpLE1lKCJjbHJEZ1BhZ2VTaXplIiwxMCksZmUoMiksTWUoImNsclBhZ2VTaXplT3B0aW9ucyIsR3MoOCxjX3QpKSxmZSgyKSxWZigiICIsYS5maXJzdEl0ZW0rMSwiIC0gIixhLmxh'@;
put 'c3RJdGVtKzEsIiBvZiAiLGEudG90YWxJdGVtcywiIHN1Ym1pc3Npb25zICIpfX1mdW5jdGlvbiBiX3QoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiLDIyKSxndCgxLHZfdCwxOSw5LCJkaXYiLDMpLGhlKCkpLDImYyl7Y29uc3QgYT1SZSgzKTtmZSgpLE1lKCJuZ0lmIixhLnN1Ym1pdHRlckxp'@;
put 'c3QmJjAhPT1hLnJlbWFpbmVkKX19ZnVuY3Rpb24geV90KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2Iiw2KSxndCgxLHVfdCw1LDAsImRpdiIsNyksZGUoMiwiZGl2Iiw4KSxndCgzLGRfdCwyLDAsImgzIiw5KSg0LGhfdCw1LDEsInAiLDEwKSxoZSgpLGd0KDUsZ190LDMsMiwiZGl2IiwxMSko'@;
put 'NixiX3QsMiwxLCJkaXYiLDEyKSxoZSgpKSwyJmMpe2NvbnN0IGE9UmUoMik7ZmUoKSxNZSgibmdJZiIsMD09PWEucmVtYWluZWQmJmEubG9hZGVkKSxmZSgpLE1lKCJuZ0NsYXNzIixzcCg2LGxfdCwhYS5sb2FkZWQpKSxmZSgpLE1lKCJuZ0lmIiwwIT09YS5yZW1haW5lZCksZmUoKSxNZSgi'@;
put 'bmdJZiIsYS5sb2FkZWQmJjAhPT1hLnJlbWFpbmVkKSxmZSgpLE1lKCJuZ0lmIiwhYS5sb2FkZWQpLGZlKCksTWUoIm5nSWYiLGEubG9hZGVkKX19ZnVuY3Rpb24gX190KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2Iiw0KSxndCgxLHlfdCw3LDgsImRpdiIsNSksaGUoKSksMiZjKXtjb25zdCBh'@;
put 'PVJlKCk7ZmUoKSxNZSgibmdJZiIsIWEuc3ViUmVhZHkpfX1mdW5jdGlvbiB3X3QoYyxsKXsxJmMmJihkZSgwLCJkaXYiKSxHdCgxLCJhcHAtYXBwcm92ZS1kZXRhaWxzIiksaGUoKSl9bGV0IGU4ZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYsdil7dGhpcy5zYXNTdG9yZVNl'@;
put 'cnZpY2U9YSx0aGlzLmV2ZW50U2VydmljZT1kLHRoaXMucm91dGVyPWgsdGhpcy5yb3V0ZT1mLHRoaXMuc2FzU2VydmljZT12LHRoaXMucmVtYWluZWQ9MCx0aGlzLmxvYWRlZD0hMSx0aGlzLnN1YlJlYWR5PSExLHRoaXMuZGV0YWlsc09wZW49ITF9Z29Ub1N0YWdlKGEpe3RoaXMucm91dGVy'@;
put 'Lm5hdmlnYXRlQnlVcmwoIi9zdGFnZS8iK2EpfWdvVG9EZXRhaWxzKGEpe3RoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoIi9yZXZpZXcvc3VibWl0dGVkLyIrYSl9Z2V0RGV0YWlscyhhLGQpe3RoaXMuc3ViUmVhZHk9ITAsc2V0VGltZW91dCgoKT0+e3RoaXMuc2FzU3RvcmVTZXJ2aWNlLnNl'@;
put 'bmREZXRhaWxzKGEsZCx0aGlzLnN1Ym1pdERhdGEpfSwwKX1uZ09uSW5pdCgpe3ZhciBhPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe2NvbnN0IGQ9YS5yb3V0ZS5zbmFwc2hvdC5wYXJhbXMudGFibGVJZDthLml0ZW1zTnVtPTEwO3RyeXtsZXQgaD15aWVsZCBhLnNhc1N0b3JlU2Vydmlj'@;
put 'ZS5nZXRTdWJtaXR0cygpO2lmKGEucmVtYWluZWQ9aC5mcm9tc2FzLmxlbmd0aCxhLnJlbWFpbmVkPjApe2Euc3VibWl0dGVyPWguZnJvbXNhc1swXS5TVUJNSVRURURfQllfTk07bGV0IGY9aC5mcm9tc2FzLm1hcChmdW5jdGlvbih2KXtyZXR1cm57dGFibGVJZDp2LlRBQkxFX0lELGJhc2U6'@;
put 'di5CQVNFX1RBQkxFLHN1Ym1pdHRlZDp2LlNVQk1JVFRFRF9PTl9EVFRNLHN1Ym1pdHRlcjp2LlNVQk1JVFRFRF9CWV9OTSxzdWJtaXRSZWFzb246di5TVUJNSVRURURfUkVBU09OX1RYVH19KTtpZihhLnN1Ym1pdHRlckxpc3Q9ZixhLnN1Ym1pdERhdGE9aC5mcm9tc2FzLHR5cGVvZiBkPCJ1'@;
put 'Iil7Y29uc3Qgdj1hLnN1Ym1pdHRlckxpc3QuZmluZEluZGV4KE09Pk0udGFibGVJZD09PWQpO3Y+LTEmJmEuZ2V0RGV0YWlscyhhLnN1Ym1pdHRlckxpc3Rbdl0sdil9fWEubG9hZGVkPSEwfWNhdGNoKGgpe2EuZXZlbnRTZXJ2aWNlLmNhdGNoUmVzcG9uc2VFcnJvcigiZWRpdG9ycy9nZXRz'@;
put 'dWJtaXRzIixoKX19KSgpfW5nQWZ0ZXJWaWV3SW5pdCgpe3RoaXMuX3JlYWR5U3ViPXRoaXMuc2FzU3RvcmVTZXJ2aWNlLnNldFN1Ym1pdC5zdWJzY3JpYmUoYT0+e3RoaXMuc3ViUmVhZHk9YX0pLHRoaXMuX2JhY2tUb1N1Yj10aGlzLnNhc1N0b3JlU2VydmljZS5zZXRTdWJtaXRMaXN0LnN1'@;
put 'YnNjcmliZShhPT57dGhpcy5zdWJSZWFkeT0hdGhpcy5zdWJSZWFkeSx0aGlzLmRldGFpbHNPcGVuPSExfSl9ZG93bmxvYWQoYSl7bGV0IGQ9dGhpcy5zYXNTZXJ2aWNlLmdldFNhc2pzQ29uZmlnKCksaD1kLnNlcnZlclVybCxmPWQuYXBwTG9jLHY9dGhpcy5zYXNTZXJ2aWNlLmdldEV4ZWN1'@;
put 'dGlvblBhdGgoKTt3aW5kb3cub3BlbihoK3YrIi8/X3Byb2dyYW09IitmKyIvc2VydmljZXMvYXVkaXRvcnMvZ2V0YXVkaXRmaWxlJnRhYmxlPSIrYSl9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoR2Uoa2gpLEdlKHZjKSxHZShMcyksR2UoQ3Up'@;
put 'LEdlKEJzKSl9fXN0YXRpY3t0aGlzLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAtc3VibWl0dGVyIl1dLGhvc3RBdHRyczpbMSwiY29udGVudC1jb250YWluZXIiXSxkZWNsczozLHZhcnM6Mixjb25zdHM6W1sicGFnaW5hdGlvbiIsIiJdLFsxLCJ3LTEwMCJdLFsiY2xh'@;
put 'c3MiLCJjb250ZW50LWFyZWEiLDQsIm5nSWYiXSxbNCwibmdJZiJdLFsxLCJjb250ZW50LWFyZWEiXSxbImNsYXNzIiwiY2FyZCIsNCwibmdJZiJdLFsxLCJjYXJkIl0sWyJjbGFzcyIsImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIiw0LCJuZ0lmIl0sWzEsImNhcmQtaGVhZGVyIiwz'@;
put 'LCJuZ0NsYXNzIl0sWyJjbGFzcyIsImNlbnRlciBjbHItY29sLW1kLTEyIHRleHQtY2VudGVyIiw0LCJuZ0lmIl0sWyJjbGFzcyIsInRleHQtY2VudGVyIGZvbnQtd2VpZ2h0LTcwMCBjb2xvci1kYXJrLWdyYXkiLDQsIm5nSWYiXSxbImNsYXNzIiwiaC03MHZoIGQtZmxleCBqdXN0aWZ5LWNv'@;
put 'bnRlbnQtY2VudGVyIGZsZXgtY29sdW1uIGFsaWduLWl0ZW1zLWNlbnRlciIsNCwibmdJZiJdLFsiY2xhc3MiLCJjbHItY29sLW1kLTEyIiw0LCJuZ0lmIl0sWzEsImQtZmxleCIsImp1c3RpZnktY29udGVudC1jZW50ZXIiXSxbMSwibm8tc3VibWl0dGVkLXRhYmxlcyIsImNhcmQtYmxvY2si'@;
put 'LCJkLWZsZXgiLCJqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIiwiZmxleC1jb2x1bW4iLCJhbGlnbi1pdGVtcy1jZW50ZXIiXSxbInNoYXBlIiwid2FybmluZy1zdGFuZGFyZCIsInNpemUiLCI2MCIsMSwiaXMtaW5mbyJdLFsxLCJ0ZXh0LWNlbnRlciIsImNvbG9yLWdyYXkiXSxbMSwiY2VudGVy'@;
put 'IiwiY2xyLWNvbC1tZC0xMiIsInRleHQtY2VudGVyIl0sWzEsInRleHQtY2VudGVyIiwiZm9udC13ZWlnaHQtNzAwIiwiY29sb3ItZGFyay1ncmF5Il0sWzEsImgtNzB2aCIsImQtZmxleCIsImp1c3RpZnktY29udGVudC1jZW50ZXIiLCJmbGV4LWNvbHVtbiIsImFsaWduLWl0ZW1zLWNlbnRl'@;
put 'ciJdLFsiY2xhc3MiLCJzcGlubmVyIiw0LCJuZ0lmIl0sWzEsInNwaW5uZXIiXSxbMSwiY2xyLWNvbC1tZC0xMiJdLFsxLCJkYXRhZ3JpZC1jb21wYWN0IiwiZGF0YWdyaWQtY3VzdG9tLWZvb3RlciJdLFszLCJjbHJEZ0ZpZWxkIl0sWyJjbGFzcyIsImN1cnNvci1wb2ludGVyIiwzLCJjbGlj'@;
put 'ayIsNCwiY2xyRGdJdGVtcyIsImNsckRnSXRlbXNPZiJdLFszLCJjbHJEZ1BhZ2VTaXplIl0sWzMsImNsclBhZ2VTaXplT3B0aW9ucyJdLFsxLCJjdXJzb3ItcG9pbnRlciIsMywiY2xpY2siXSxbInJvbGUiLCJ0b29sdGlwIiwiYXJpYS1sYWJlbCIsIkdvIHRvIHN0YWdlZCBkYXRhIHNjcmVl'@;
put 'biIsMSwicm93IiwianVzdGlmeS1jb250ZW50LWFyb3VuZCJdLFsxLCJjb2x1bW4tY2VudGVyIiwibGlua3MiLCJ0b29sdGlwIiwidG9vbHRpcC1tZCIsInRvb2x0aXAtYm90dG9tLWxlZnQiLCJjb2xvci1ibHVlIiwzLCJjbGljayJdLFsic2hhcGUiLCJjb2RlIiwic2l6ZSIsIjI4Il0sWzEs'@;
put 'InRvb2x0aXAtY29udGVudCJdLFsxLCJwLTAiLCJkLWZsZXgiLCJqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIl0sWyJhcmlhLWxhYmVsIiwiRG93bmxvYWQgYXVkaXQgZmlsZSBmb3IgdGFibGUgcmVjb3JkIiwxLCJidG4iLCJidG4tc3VjY2VzcyIsMywiY2xpY2siXSxbInNoYXBlIiwiZG93bmxv'@;
put 'YWQiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZCxoKXsxJmQmJihkZSgwLCJkaXYiLDEpLGd0KDEsX190LDIsMSwiZGl2IiwyKSgyLHdfdCwyLDAsImRpdiIsMyksaGUoKSksMiZkJiYoZmUoKSxNZSgibmdJZiIsIWguc3ViUmVhZHkpLGZlKCksTWUoIm5nSWYiLGguc3ViUmVhZHkpKX0sZGVwZW5k'@;
put 'ZW5jaWVzOlt3dSxiYSxBbSxRZixSNyxjTyxKeSxYeCx1TyxFbSxTcCxMNyx0XyxUbSxrNyx4bSxENyxIbCxRNmVdLGVuY2Fwc3VsYXRpb246Mn0pfX1yZXR1cm4gY30pKCk7Y29uc3QgQ190PShjLGwpPT4oe3JlamVjdGVkOmMsYWNjZXB0ZWQ6bH0pO2Z1bmN0aW9uIFNfdChjLGwpezEmYyYm'@;
put 'KGRlKDAsImRpdiIsMTIpLEd0KDEsImNsci1pY29uIiwxMyksZGUoMiwiaDMiLDE0KSxMZSgzLCJUaGVyZSBpcyBubyBoaXN0b3J5IHRvIHNob3ciKSxoZSgpKCkpfWZ1bmN0aW9uIE1fdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImEiLDE3KSxGdCgiY2xpY2siLGZ1bmN0aW9u'@;
put 'KCl7d3QoYSk7Y29uc3QgaD1SZSgpLiRpbXBsaWNpdCxmPVJlKCk7cmV0dXJuIEN0KGYuZ2V0VGFibGUoZi5hcHByb3ZlRGF0YVtoXSkpfSksTGUoMSksaGUoKX1pZigyJmMpe2NvbnN0IGE9UmUoKS4kaW1wbGljaXQsZD1SZSgpO2ZlKCksd3IoZC5hcHByb3ZlRGF0YVthXSl9fWZ1bmN0aW9u'@;
put 'IHhfdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImRpdiIpKDEsImEiLDE3KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1SZSgpLiRpbXBsaWNpdCxmPVJlKCk7cmV0dXJuIEN0KGYuZ2V0QmFzZVRhYmxlKGYuYXBwcm92ZURhdGFbaF0pKX0pLExlKDIsIlZJ'@;
put 'RVciKSxoZSgpLGRlKDMsInNwYW4iKSxMZSg0LCIgLyAiKSxoZSgpLGRlKDUsImEiLDE3KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1SZSgpLiRpbXBsaWNpdCxmPVJlKCk7cmV0dXJuIEN0KGYuZ2V0RWRpdFRhYmxlKGYuYXBwcm92ZURhdGFbaF0pKX0pLExlKDYsIkVE'@;
put 'SVQiKSxoZSgpKCl9fWZ1bmN0aW9uIEVfdChjLGwpe2lmKDEmYyYmKGRlKDAsInNwYW4iKSxMZSgxKSxoZSgpKSwyJmMpe2NvbnN0IGE9UmUoKS4kaW1wbGljaXQsZD1SZSgpO2ZlKCksd3IoZC5hcHByb3ZlRGF0YVthXSl9fWZ1bmN0aW9uIFRfdChjLGwpe2lmKDEmYyYmKGRlKDAsInRyIiko'@;
put 'MSwidGQiLDYpLExlKDIpLGhlKCksZGUoMywidGQiLDYpLGd0KDQsTV90LDIsMSwiYSIsMTUpKDUseF90LDcsMCwiZGl2IiwxNikoNixFX3QsMiwxLCJzcGFuIiwxNiksaGUoKSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQsZD1sLmluZGV4O2ZlKDIpLHdyKGEpLGZlKDIpLE1lKCJuZ0lm'@;
put 'IixkPDEpLGZlKCksTWUoIm5nSWYiLGQ8MiYmZD49MSksZmUoKSxNZSgibmdJZiIsZD49Mil9fWZ1bmN0aW9uIEFfdChjLGwpezEmYyYmKGRlKDAsInNwYW4iLDIwKSxMZSgxLCIgTG9hZGluZy4uLiAiKSxoZSgpKX1mdW5jdGlvbiBrX3QoYyxsKXsxJmMmJihkZSgwLCJkaXYiKSgxLCJoMyIp'@;
put 'LExlKDIsIkxvYWRpbmcgaGlzdG9yeSIpLGhlKCkoKSl9ZnVuY3Rpb24gRF90KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2IiwxOCksZ3QoMSxBX3QsMiwwLCJzcGFuIiwxOSkoMixrX3QsMywwLCJkaXYiLDE2KSxoZSgpKSwyJmMpe2NvbnN0IGE9UmUoKTtmZSgpLE1lKCJuZ0lmIiwhYS5sb2Fk'@;
put 'ZWQpLGZlKCksTWUoIm5nSWYiLCFhLmxvYWRlZCl9fWZ1bmN0aW9uIElfdChjLGwpezEmYyYmKGRlKDAsImgzIiwyOCksTGUoMSwiSElTVE9SWSIpLGhlKCkpfWZ1bmN0aW9uIFJfdChjLGwpe2lmKDEmYyYmKGRlKDAsInAiLDI5KSxMZSgxKSxoZSgpKSwyJmMpe2NvbnN0IGE9UmUoMik7ZmUo'@;
put 'KSxEcigiIFRvIHVubG9jayBtb3JlIHRoYW4gIixhLmxpY2VuY2VTdGF0ZS52YWx1ZS5oaXN0b3J5X3Jvd3NfYWxsb3dlZCwiIHJlY29yZHMsIGNvbnRhY3Qgc3VwcG9ydEBkYXRhY29udHJvbGxlci5pbyAiKX19ZnVuY3Rpb24gTF90KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwi'@;
put 'Y2xyLWRnLXJvdyIsMzMpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtjb25zdCBoPXd0KGEpLiRpbXBsaWNpdDtyZXR1cm4gQ3QoUmUoMykuZ2V0QXBwckluZGV4KGgpKX0pLGRlKDEsImNsci1kZy1jZWxsIiwzNCkoMiwiYSIsMzUpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtjb25zdCBoPXd0KGEp'@;
put 'LiRpbXBsaWNpdDtyZXR1cm4gQ3QoUmUoMykuZ2V0QmFzZVRhYmxlKGguYmFzZXRhYmxlKSl9KSxMZSgzKSxoZSgpKCksZGUoNCwiY2xyLWRnLWNlbGwiLDM2KSxMZSg1KSxoZSgpLGRlKDYsImNsci1kZy1jZWxsIiwzNCksTGUoNyksaGUoKSxkZSg4LCJjbHItZGctY2VsbCIsMzQpLExlKDkp'@;
put 'LGhlKCksZGUoMTAsImNsci1kZy1jZWxsIiwzNCksTGUoMTEpLGhlKCksZGUoMTIsImNsci1kZy1jZWxsIiwzNCksTGUoMTMpLGhlKCksZGUoMTQsImNsci1kZy1jZWxsIiwzNykoMTUsImJ1dHRvbiIsMzgpLEZ0KCJjbGljayIsZnVuY3Rpb24oaCl7Y29uc3QgZj13dChhKS4kaW1wbGljaXQ7'@;
put 'cmV0dXJuIFJlKDMpLmRvd25sb2FkKGYudGFibGVJZCksQ3QoaC5zdG9wUHJvcGFnYXRpb24oKSl9KSxHdCgxNiwiY2xyLWljb24iLDM5KSxoZSgpKCkoKX1pZigyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7ZmUoMyksd3IoYS5iYXNldGFibGUpLGZlKCksTWUoIm5nQ2xhc3MiLGxwKDcsQ190'@;
put 'LCJSRUpFQ1RFRCI9PT1hLnN0YXR1cywiQVBQUk9WRUQiPT09YS5zdGF0dXMpKSxmZSgpLHdyKGEuc3RhdHVzKSxmZSgyKSx3cihhLnN1Ym1pdHRlciksZmUoMiksd3IoYS5zdWJtaXR0ZWRSZWFzb24pLGZlKDIpLHdyKGEuc3VibWl0dGVkKSxmZSgyKSx3cihhLnJldmlld2VkKX19ZnVuY3Rp'@;
put 'b24gT190KGMsbCl7aWYoMSZjJiYoZGUoMCwiY2xyLWRhdGFncmlkIiwzMCkoMSwiY2xyLWRnLWNvbHVtbiIsMzEpLExlKDIsIkJBU0VfVEFCTEUiKSxoZSgpLGRlKDMsImNsci1kZy1jb2x1bW4iLDMxKSxMZSg0LCJTVEFUVVMiKSxoZSgpLGRlKDUsImNsci1kZy1jb2x1bW4iLDMxKSxMZSg2'@;
put 'LCJTVUJNSVRURVIiKSxoZSgpLGRlKDcsImNsci1kZy1jb2x1bW4iLDMxKSxMZSg4LCJTVUJNSVQgUkVBU09OIiksaGUoKSxkZSg5LCJjbHItZGctY29sdW1uIiwzMSksTGUoMTAsIlNVQk1JVFRFRCIpLGhlKCksZGUoMTEsImNsci1kZy1jb2x1bW4iLDMxKSxMZSgxMiwiQVBQUk9WRUQgLyBS'@;
put 'RUpFQ1RFRCIpLGhlKCksZGUoMTMsImNsci1kZy1jb2x1bW4iKSxMZSgxNCwiRE9XTkxPQUQiKSxoZSgpLGd0KDE1LExfdCwxNywxMCwiY2xyLWRnLXJvdyIsMzIpLGhlKCkpLDImYyl7Y29uc3QgYT1SZSgyKTtmZSgpLE1lKCJjbHJEZ0ZpZWxkIiwiYmFzZXRhYmxlIiksZmUoMiksTWUoImNs'@;
put 'ckRnRmllbGQiLCJzdGF0dXMiKSxmZSgyKSxNZSgiY2xyRGdGaWVsZCIsInN1Ym1pdHRlciIpLGZlKDIpLE1lKCJjbHJEZ0ZpZWxkIiwic3VibWl0dGVkUmVhc29uIiksZmUoMiksTWUoImNsckRnRmllbGQiLCJzdWJtaXR0ZWQiKSxmZSgyKSxNZSgiY2xyRGdGaWVsZCIsInJldmlld2VkIiks'@;
put 'ZmUoNCksTWUoImNsckRnSXRlbXNPZiIsYS5oaXN0b3J5KX19ZnVuY3Rpb24gUF90KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiYnV0dG9uIiw0MCksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChSZSgyKS5sb2FkRGF0YSgpKX0pLExlKDEpLGhlKCl9aWYo'@;
put 'MiZjKXtjb25zdCBhPVJlKDIpO01lKCJjbHJMb2FkaW5nIixhLmxvYWRpbmdNb3JlKSxmZSgpLERyKCIgTG9hZCAiLGEucm93c0xlZnRUb0xvYWQsIiBtb3JlICIpfX1mdW5jdGlvbiBGX3QoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiLDIxKSgxLCJkaXYiLDIyKSxndCgyLElfdCwyLDAsImgz'@;
put 'IiwyMykoMyxSX3QsMiwxLCJwIiwyNCksaGUoKSxndCg0LE9fdCwxNiw3LCJjbHItZGF0YWdyaWQiLDI1KSxkZSg1LCJkaXYiLDI2KSxndCg2LFBfdCwyLDIsImJ1dHRvbiIsMjcpLGhlKCkoKSksMiZjKXtjb25zdCBhPVJlKCk7ZmUoMiksTWUoIm5nSWYiLGEubG9hZGVkKSxmZSgpLE1lKCJu'@;
put 'Z0lmIixhLmxpY2VuY2VTdGF0ZS52YWx1ZS5oaXN0b3J5X3Jvd3NfYWxsb3dlZCE9PWEuSW5maW5pdHkpLGZlKCksTWUoIm5nSWYiLGEubG9hZGVkKSxmZSgyKSxNZSgibmdJZiIsYS5saWNlbmNlU3RhdGUudmFsdWUuaGlzdG9yeV9yb3dzX2FsbG93ZWQ9PT1hLkluZmluaXR5JiZhLnJvd3NM'@;
put 'ZWZ0VG9Mb2FkPjApfX1jb25zdCBIX3Q9W3twYXRoOiJhcHByb3ZlIixjb21wb25lbnQ6c190fSx7cGF0aDoiYXBwcm92ZURldC86dGFibGVJZCIsY29tcG9uZW50OlE2ZX0se3BhdGg6InN1Ym1pdHRlZCIsY29tcG9uZW50OmU4ZX0se3BhdGg6InN1Ym1pdHRlZC86dGFibGVJZCIsY29tcG9u'@;
put 'ZW50OmU4ZX0se3BhdGg6Imhpc3RvcnkiLGNvbXBvbmVudDooKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYsdil7dGhpcy5saWNlbmNlU2VydmljZT1hLHRoaXMuc2FzU3RvcmVTZXJ2aWNlPWQsdGhpcy5ldmVudFNlcnZpY2U9aCx0aGlzLnJvdXRlcj1mLHRoaXMuc2FzU2Vydmlj'@;
put 'ZT12LHRoaXMuaGlzdG9yeT1bXSx0aGlzLnRhYmxlVGl0bGVzPVtdLHRoaXMuaGlzdG9yeUFycj1bXSx0aGlzLmxvYWRlZD0hMSx0aGlzLml0ZW1zTnVtPTEwLHRoaXMub3Blbk1vZGFsPSExLHRoaXMubm9EYXRhPSExLHRoaXMuYXBwcm92ZURhdGE9e30sdGhpcy5zYXNqc0NvbmZpZz1uZXcg'@;
put 'bWguU0FTanNDb25maWcsdGhpcy5oaXN0UGFyYW1zPXtISVNUOjAsU1RBUlRST1c6MSxOT0JTOi0xfSx0aGlzLmxvYWRpbmdNb3JlPSExLHRoaXMubGljZW5jZVN0YXRlPXRoaXMubGljZW5jZVNlcnZpY2UubGljZW5jZVN0YXRlLHRoaXMuSW5maW5pdHk9MS8wLHRoaXMuc2FzanNDb25maWc9'@;
put 'dGhpcy5zYXNTZXJ2aWNlLmdldFNhc2pzQ29uZmlnKCl9Z2V0VGFibGUoYSl7dGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCgiL3N0YWdlLyIrYSl9Z2V0QmFzZVRhYmxlKGEpe3RoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoIi92aWV3L2RhdGEvIithKX1nZXRFZGl0VGFibGUoYSl7dGhpcy5y'@;
put 'b3V0ZXIubmF2aWdhdGVCeVVybCgiL2VkaXRvci8iK2EpfWdldEFwcHJJbmRleChhKXtjb25zdCBkPXRoaXMuaGlzdG9yeUFyci5maW5kSW5kZXgoaD0+aC5UQUJMRV9JRD09PWEudGFibGVJZCk7ZD4tMSYmKHRoaXMuYXBwcm92ZURhdGE9dGhpcy5oaXN0b3J5QXJyW2RdLHRoaXMub3Blbk1v'@;
put 'ZGFsPSEwKX1nZXQgcm93c0xlZnRUb0xvYWQoKXtjb25zdCBhPXRoaXMuaGlzdFBhcmFtcy5OT0JTLXRoaXMuaGlzdG9yeS5sZW5ndGgsZD10aGlzLmhpc3RQYXJhbXMuSElTVDtyZXR1cm4gYTw9MD8wOmE+ZD9kOmF9ZG93bmxvYWQoYSl7bGV0IGQ9dGhpcy5zYXNTZXJ2aWNlLmdldFNhc2pz'@;
put 'Q29uZmlnKCksaD1kLnNlcnZlclVybCxmPWQuYXBwTG9jLHY9dGhpcy5zYXNTZXJ2aWNlLmdldEV4ZWN1dGlvblBhdGgoKTt3aW5kb3cub3BlbihoK3YrIi8/X3Byb2dyYW09IitmKyIvc2VydmljZXMvYXVkaXRvcnMvZ2V0YXVkaXRmaWxlJnRhYmxlPSIrYSsiJl9jb250ZXh0bmFtZT0iK3Ro'@;
put 'aXMuc2FzanNDb25maWcuY29udGV4dE5hbWUpfWxvYWREYXRhKCl7dmFyIGE9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7bGV0IGQ9e1NUQVJUUk9XOmEuaGlzdFBhcmFtcy5ISVNUK2EuaGlzdFBhcmFtcy5TVEFSVFJPV307YS5sb2FkaW5nTW9yZT0hMDt0cnl7bGV0IGYsaD15aWVsZCBh'@;
put 'LnNhc1N0b3JlU2VydmljZS5nZXRIaXN0b3J5KGQsIkJyb3dzZXJQYXJhbXMiLCJhcHByb3ZlcnMvZ2V0aGlzdG9yeSIpO2EubG9hZGluZ01vcmU9ITEsYS5oaXN0UGFyYW1zPWguaGlzdHBhcmFtc1swXTtjb25zdCB2PWguZnJvbXNhcy5zbGljZSgwLGEubGljZW5jZVN0YXRlLnZhbHVlLmhp'@;
put 'c3Rvcnlfcm93c19hbGxvd2VkKTtpZih2Lmxlbmd0aD4wKXtjb25zdCBNPXY7YS5oaXN0b3J5QXJyPXYsZj1PYmplY3Qua2V5cyhNWzBdKSxhLnRhYmxlVGl0bGVzPWY7bGV0IEQ9di5tYXAoZnVuY3Rpb24oWil7cmV0dXJue3RhYmxlSWQ6Wi5UQUJMRV9JRCxzdWJtaXR0ZXI6Wi5TVUJNSVRU'@;
put 'RVIsc3VibWl0dGVkUmVhc29uOlouU1VCTUlUVEVEX1JFQVNPTl9UWFQsc3VibWl0dGVkOlouU1VCTUlUVEVELHN0YXR1czpaLlNUQVRVUyxyZXZpZXdSZWFzb246Wi5SRVZJRVdfUkVBU09OX1RYVCxyZXZpZXdlcjpaLlJFVklFV0VSLHJldmlld2VkOlouUkVWSUVXRUQsbnVtT2ZBcHByb3Zh'@;
put 'bHM6Wi5OVU1fT0ZfQVBQUk9WQUxTX1JFUVVJUkVELGJhc2V0YWJsZTpaLkJBU0VfVEFCTEV9fSk7YS5oaXN0b3J5LnB1c2goLi4uRCksYS5sb2FkZWQ9ITB9ZWxzZSBhLmxvYWRlZD0hMCwwPT09YS5oaXN0b3J5Lmxlbmd0aCYmKGEubm9EYXRhPSEwKX1jYXRjaChoKXthLmV2ZW50U2Vydmlj'@;
put 'ZS5jYXRjaFJlc3BvbnNlRXJyb3IoImFwcHJvdmVycy9nZXRoaXN0b3J5IixoKSxhLmxvYWRpbmdNb3JlPSExfX0pKCl9bmdPbkluaXQoKXt2YXIgYT10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXthLmxvYWREYXRhKCl9KSgpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXty'@;
put 'ZXR1cm4gbmV3KGR8fGMpKEdlKHUxKSxHZShraCksR2UodmMpLEdlKExzKSxHZShCcykpfX1zdGF0aWN7dGhpcy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siYXBwLWhpc3RvcnkiXV0saG9zdEF0dHJzOlsxLCJjb250ZW50LWNvbnRhaW5lciJdLGRlY2xzOjIwLHZhcnM6Nixj'@;
put 'b25zdHM6W1sxLCJjb250ZW50LWFyZWEiXSxbImlkIiwibm9EYXRhQ29udGFpbmVyIiwiY2xhc3MiLCJjYXJkLWJsb2NrIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGZsZXgtY29sdW1uIGFsaWduLWl0ZW1zLWNlbnRlciIsNCwibmdJZiJdLFszLCJjbHJNb2RhbE9wZW5DaGFuZ2Ui'@;
put 'LCJjbHJNb2RhbE9wZW4iLCJjbHJNb2RhbFNpemUiXSxbMSwibW9kYWwtdGl0bGUiXSxbMSwibW9kYWwtYm9keSJdLFsxLCJ0YWJsZSJdLFsxLCJsZWZ0Il0sWzQsIm5nRm9yIiwibmdGb3JPZiJdLFsxLCJtb2RhbC1mb290ZXIiXSxbInR5cGUiLCJidXR0b24iLCJhcmlhLWxhYmVsIiwiQ2xv'@;
put 'c2UgbW9kYWwiLDEsImJ0biIsImJ0bi1vdXRsaW5lIiwzLCJjbGljayJdLFsiY2xhc3MiLCJoLTcwdmggZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgZmxleC1jb2x1bW4gYWxpZ24taXRlbXMtY2VudGVyIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImNhcmQiLDQsIm5nSWYiXSxbImlkIiwi'@;
put 'bm9EYXRhQ29udGFpbmVyIiwxLCJjYXJkLWJsb2NrIiwiZC1mbGV4IiwianVzdGlmeS1jb250ZW50LWNlbnRlciIsImZsZXgtY29sdW1uIiwiYWxpZ24taXRlbXMtY2VudGVyIl0sWyJzaGFwZSIsIndhcm5pbmctc3RhbmRhcmQiLCJzaXplIiwiNjAiLDEsImlzLWluZm8iXSxbMSwidGV4dC1j'@;
put 'ZW50ZXIiLCJjb2xvci1ncmF5Il0sWyJjbGFzcyIsImN1cnNvci1wb2ludGVyIHRhYmxlLWxpbmsiLDMsImNsaWNrIiw0LCJuZ0lmIl0sWzQsIm5nSWYiXSxbMSwiY3Vyc29yLXBvaW50ZXIiLCJ0YWJsZS1saW5rIiwzLCJjbGljayJdLFsxLCJoLTcwdmgiLCJkLWZsZXgiLCJqdXN0aWZ5LWNv'@;
put 'bnRlbnQtY2VudGVyIiwiZmxleC1jb2x1bW4iLCJhbGlnbi1pdGVtcy1jZW50ZXIiXSxbImNsYXNzIiwic3Bpbm5lciIsNCwibmdJZiJdLFsxLCJzcGlubmVyIl0sWzEsImNhcmQiXSxbMSwiY2FyZC1oZWFkZXIiXSxbImNsYXNzIiwiY2VudGVyIGNsci1jb2wtbWQtMTIgdGV4dC1jZW50ZXIi'@;
put 'LDQsIm5nSWYiXSxbImNsYXNzIiwidGV4dC1jZW50ZXIgZm9udC13ZWlnaHQtNzAwIGNvbG9yLWRhcmstZ3JheSIsNCwibmdJZiJdLFsiY2xhc3MiLCJkYXRhZ3JpZC1oaXN0b3J5IGRhdGFncmlkLWN1c3RvbS1mb290ZXIiLDQsIm5nSWYiXSxbMSwibG9hZC1tb3JlIiwiZC1mbGV4IiwiY2xy'@;
put 'LWp1c3RpZnktY29udGVudC1jZW50ZXIiLCJjbHItYWxpZ24taXRlbXMtY2VudGVyIl0sWyJjbGFzcyIsImJ0biBidG4tc3VjY2VzcyIsMywiY2xyTG9hZGluZyIsImNsaWNrIiw0LCJuZ0lmIl0sWzEsImNlbnRlciIsImNsci1jb2wtbWQtMTIiLCJ0ZXh0LWNlbnRlciJdLFsxLCJ0ZXh0LWNl'@;
put 'bnRlciIsImZvbnQtd2VpZ2h0LTcwMCIsImNvbG9yLWRhcmstZ3JheSJdLFsxLCJkYXRhZ3JpZC1oaXN0b3J5IiwiZGF0YWdyaWQtY3VzdG9tLWZvb3RlciJdLFszLCJjbHJEZ0ZpZWxkIl0sWzMsImNsaWNrIiw0LCJjbHJEZ0l0ZW1zIiwiY2xyRGdJdGVtc09mIl0sWzMsImNsaWNrIl0sWzEs'@;
put 'InZlckNlbnRlciJdLFsxLCJidG4iLCJidG4tc20iLCJidG4tbGluayIsIm0tMCIsMywiY2xpY2siXSxbMSwidmVyQ2VudGVyIiwzLCJuZ0NsYXNzIl0sWzEsInZlckNlbnRlciIsInAtMCIsImQtZmxleCIsImp1c3RpZnktY29udGVudC1jZW50ZXIiXSxbImFyaWEtbGFiZWwiLCJEb3dubG9h'@;
put 'ZCBhdWRpdCBmaWxlIiwxLCJidG4iLCJidG4tc3VjY2VzcyIsMywiY2xpY2siXSxbInNoYXBlIiwiZG93bmxvYWQiXSxbMSwiYnRuIiwiYnRuLXN1Y2Nlc3MiLDMsImNsaWNrIiwiY2xyTG9hZGluZyJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihkLGgpezEmZCYmKGRlKDAsImRpdiIsMCksZ3QoMSxT'@;
put 'X3QsNCwwLCJkaXYiLDEpLGRlKDIsImNsci1tb2RhbCIsMiksZ2koImNsck1vZGFsT3BlbkNoYW5nZSIsZnVuY3Rpb24odil7cmV0dXJuIG1pKGgub3Blbk1vZGFsLHYpfHwoaC5vcGVuTW9kYWw9diksdn0pLGRlKDMsImg0IiwzKSxMZSg0LCJBcHByb3ZhbCBkZXRhaWxzIiksaGUoKSxkZSg1'@;
put 'LCJkaXYiLDQpKDYsInRhYmxlIiw1KSg3LCJ0aGVhZCIpKDgsInRyIikoOSwidGgiLDYpLExlKDEwLCJOYW1lIiksaGUoKSxkZSgxMSwidGgiLDYpLExlKDEyLCJWYWx1ZSIpLGhlKCkoKSgpLGRlKDEzLCJ0Ym9keSIpLGd0KDE0LFRfdCw3LDQsInRyIiw3KSxoZSgpKCkoKSxkZSgxNSwiZGl2'@;
put 'Iiw4KSgxNiwiYnV0dG9uIiw5KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGgub3Blbk1vZGFsPSExfSksTGUoMTcsIiBPSyAiKSxoZSgpKCkoKSxndCgxOCxEX3QsMywyLCJkaXYiLDEwKSgxOSxGX3QsNyw0LCJkaXYiLDExKSxoZSgpKSwyJmQmJihmZSgpLE1lKCJuZ0lmIixoLm5v'@;
put 'RGF0YSksZmUoKSxwaSgiY2xyTW9kYWxPcGVuIixoLm9wZW5Nb2RhbCksTWUoImNsck1vZGFsU2l6ZSIsInhsIiksZmUoMTIpLE1lKCJuZ0Zvck9mIixoLnRhYmxlVGl0bGVzKSxmZSg0KSxNZSgibmdJZiIsIWgubG9hZGVkKSxmZSgpLE1lKCJuZ0lmIiwhaC5ub0RhdGEmJmgubG9hZGVkKSl9'@;
put 'LGRlcGVuZGVuY2llczpbd3UsbnMsYmEsQW0sUWYsUjcsSnksRW0sU3AsTDcsdF8sVG0sazcseG0sRDcsSGwsb3UsS3UsajAsUDJdLGVuY2Fwc3VsYXRpb246Mn0pfX1yZXR1cm4gY30pKCl9XTtsZXQgTl90PSgoKT0+e2NsYXNzIGN7c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQp'@;
put 'e3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NW1vZD1raSh7dHlwZTpjfSl9c3RhdGlje3RoaXMuXHUwMjc1aW5qPUFyKHtpbXBvcnRzOltSYSx6Yy5mb3JDaGlsZChIX3QpLHpjXX0pfX1yZXR1cm4gY30pKCksVl90PSgoKT0+e2NsYXNzIGN7c3RhdGlje3RoaXMuXHUwMjc1'@;
put 'ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NW1vZD1raSh7dHlwZTpjfSl9c3RhdGlje3RoaXMuXHUwMjc1aW5qPUFyKHtpbXBvcnRzOltSYSxSYyxOX3QsejAsbzkuZm9yUm9vdCgpLG5mLEN3XX0pfX1yZXR1cm4gY30pKCksQl90PSgoKT0+e2Ns'@;
put 'YXNzIGN7Y29uc3RydWN0b3IoKXt9bmdPbkluaXQoKXt9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAtcmV2aWV3LXJvdXRlIl1dLGhvc3RBdHRyczpbMSwi'@;
put 'Y29udGVudC1jb250YWluZXIiXSxkZWNsczoxLHZhcnM6MCx0ZW1wbGF0ZTpmdW5jdGlvbihkLGgpezEmZCYmR3QoMCwicm91dGVyLW91dGxldCIpfSxkZXBlbmRlbmNpZXM6W3JnXSxlbmNhcHN1bGF0aW9uOjJ9KX19cmV0dXJuIGN9KSgpO2NvbnN0IGpfdD0oYyxsKT0+KHtyZWplY3RlZDpj'@;
put 'LGFjY2VwdGVkOmx9KTtmdW5jdGlvbiB6X3QoYyxsKXsxJmMmJihkZSgwLCJzcGFuIiw2KSxMZSgxLCIgTG9hZGluZy4uLiAiKSxoZSgpKX1mdW5jdGlvbiBVX3QoYyxsKXsxJmMmJihkZSgwLCJkaXYiKSgxLCJoMyIpLExlKDIsIkxvYWRpbmcgc3VibWl0dGVkIHRhYmxlIiksaGUoKSgpKX1m'@;
put 'dW5jdGlvbiBaX3QoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiLDQpLGd0KDEsel90LDIsMCwic3BhbiIsNSkoMixVX3QsMywwLCJkaXYiLDMpLGhlKCkpLDImYyl7Y29uc3QgYT1SZSgpO2ZlKCksTWUoIm5nSWYiLCFhLmxvYWRlZCksZmUoKSxNZSgibmdJZiIsIWEubG9hZGVkKX19ZnVuY3Rp'@;
put 'b24gV190KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiYnV0dG9uIiwyOCksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChSZSgyKS5hcHByb3ZlVGFibGVTY3JlZW4oKSl9KSxMZSgxLCIgQXBwcm92ZSAiKSxoZSgpfWlmKDImYyl7Y29uc3QgYT1SZSgyKTtN'@;
put 'ZSgiZGlzYWJsZWQiLCJBUFBST1ZFRCI9PT0obnVsbD09YS50YWJsZURldGFpbHM/bnVsbDphLnRhYmxlRGV0YWlscy5SRVZJRVdfU1RBVFVTX0lEKXx8IlJFSkVDVEVEIj09PShudWxsPT1hLnRhYmxlRGV0YWlscz9udWxsOmEudGFibGVEZXRhaWxzLlJFVklFV19TVEFUVVNfSUQpKSgiZGlz'@;
put 'YWJsZWQiLGEucmV2ZXJ0aW5nQ2hhbmdlcyl9fWZ1bmN0aW9uIFlfdChjLGwpezEmYyYmKGRlKDAsImNsci10b29sdGlwLWNvbnRlbnQiLDMxKSgxLCJzcGFuIiksTGUoMiwiIFJldmVydCB0aGlzIGFuZCBhbGwgc3Vic2VxdWVudCBjaGFuZ2VzICIpLGhlKCkoKSl9ZnVuY3Rpb24gR190KGMs'@;
put 'bCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiYnV0dG9uIiwyOSksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChSZSgyKS5yZXZlcnRDaGFuZ2VzKCkpfSksTGUoMSwiIFJFVkVSVCAiKSxndCgyLFlfdCwzLDAsImNsci10b29sdGlwLWNvbnRlbnQiLDMwKSxoZSgp'@;
put 'fTImYyYmTWUoImNsckxvYWRpbmciLFJlKDIpLnJldmVydGluZ0NoYW5nZXMpfWZ1bmN0aW9uICRfdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImRpdiIpKDEsImRpdiIsNykoMiwiZGl2Iiw4KSgzLCJoNCIsOSksTGUoNCwiU3RhZ2VkIERhdGEiKSxoZSgpKCkoKSxkZSg1LCJk'@;
put 'aXYiLDEwKSg2LCJkaXYiLDExKSg3LCJkaXYiLDEyKSg4LCJkaXYiLDgpLExlKDksIkJhc2ljIFN1Ym1pdHRlZCBEZXRhaWxzIiksaGUoKSgpLGRlKDEwLCJkaXYiKSgxMSwic3BhbiIpLExlKDEyLCJUYWJsZSBJZDoiKSxoZSgpLGRlKDEzLCJzdHJvbmciKSgxNCwic3BhbiIpLExlKDE1KSxo'@;
put 'ZSgpKCkoKSxkZSgxNiwiZGl2IikoMTcsInNwYW4iKSxMZSgxOCwiQmFzZSBUYWJsZToiKSxoZSgpLGRlKDE5LCJhIiwxMyksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChSZSgpLnZpZXdlclRhYmxlU2NyZWVuKCkpfSksTGUoMjApLGhlKCkoKSxkZSgyMSwiZGl2Iiko'@;
put 'MjIsInNwYW4iKSxMZSgyMywiU3VibWl0IERhdGU6IiksaGUoKSxkZSgyNCwic3BhbiIsMTQpLExlKDI1KSxoZSgpKCksZGUoMjYsImRpdiIpKDI3LCJzcGFuIiksTGUoMjgsIlJldmlldyBTdGF0dXM6IiksaGUoKSxkZSgyOSwic3BhbiIsMTUpLExlKDMwKSxoZSgpKCkoKSxkZSgzMSwiZGl2'@;
put 'IiwxNikoMzIsImRpdiIsMTIpKDMzLCJkaXYiLDgpLExlKDM0LCJBY3Rpb25zIiksaGUoKSgpLGRlKDM1LCJkaXYiLDE3KSgzNiwiZGl2IiwxOCkoMzcsImJ1dHRvbiIsMTkpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoUmUoKS52aWV3ZXJUYWJsZVNjcmVlbigpKX0p'@;
put 'LExlKDM4LCIgVmlldyBiYXNlIHRhYmxlICIpLGhlKCksZ3QoMzksV190LDIsMiwiYnV0dG9uIiwyMCksZGUoNDAsImJ1dHRvbiIsMjEpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoUmUoKS5nb0JhY2soKSl9KSxMZSg0MSwiIEVkaXQgYmFzZSB0YWJsZSAiKSxoZSgp'@;
put 'LGRlKDQyLCJidXR0b24iLDIyKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1SZSgpO3JldHVybiBDdChoLmRvd25sb2FkKG51bGw9PWgudGFibGVEZXRhaWxzP251bGw6aC50YWJsZURldGFpbHMuVEFCTEVfSUQpKX0pLEd0KDQzLCJjbHItaWNvbiIsMjMpLGhlKCksZGUo'@;
put 'NDQsImNsci10b29sdGlwIiksZ3QoNDUsR190LDMsMSwiYnV0dG9uIiwyNCksaGUoKSgpKCkoKSgpLGRlKDQ2LCJkaXYiLDI1KSxHdCg0NywiaG90LXRhYmxlIiwyNiksaGUoKSxHdCg0OCwiZGl2IiwyNyksaGUoKX1pZigyJmMpe2NvbnN0IGE9UmUoKTtmZSgxNSksRHIoIiAiLG51bGw9PWEu'@;
put 'dGFibGVEZXRhaWxzP251bGw6YS50YWJsZURldGFpbHMuVEFCTEVfSUQsIiIpLGZlKDUpLERyKCIgIixudWxsPT1hLnRhYmxlRGV0YWlscz9udWxsOmEudGFibGVEZXRhaWxzLkJBU0VfVEFCTEUsIiAiKSxmZSg1KSxEcigiICIsbnVsbD09YS50YWJsZURldGFpbHM/bnVsbDphLnRhYmxlRGV0'@;
put 'YWlscy5TVUJNSVRURURfT05fRFRUTSwiICIpLGZlKDQpLE1lKCJuZ0NsYXNzIixscCgxNyxqX3QsIlJFSkVDVEVEIj09PShudWxsPT1hLnRhYmxlRGV0YWlscz9udWxsOmEudGFibGVEZXRhaWxzLlJFVklFV19TVEFUVVNfSUQpLCJBUFBST1ZFRCI9PT0obnVsbD09YS50YWJsZURldGFpbHM/'@;
put 'bnVsbDphLnRhYmxlRGV0YWlscy5SRVZJRVdfU1RBVFVTX0lEKSkpLGZlKCksRHIoIiAiLG51bGw9PWEudGFibGVEZXRhaWxzP251bGw6YS50YWJsZURldGFpbHMuUkVWSUVXX1NUQVRVU19JRCwiICIpLGZlKDcpLE1lKCJkaXNhYmxlZCIsYS5yZXZlcnRpbmdDaGFuZ2VzKSxmZSgyKSxNZSgi'@;
put 'bmdJZiIsIllFUyIhPT0obnVsbD09YS50YWJsZURldGFpbHM/bnVsbDphLnRhYmxlRGV0YWlscy5BTExPV19SRVNUT1JFKSksZmUoKSxNZSgiZGlzYWJsZWQiLGEucmV2ZXJ0aW5nQ2hhbmdlcyksZmUoNSksTWUoIm5nSWYiLCJZRVMiPT09KG51bGw9PWEudGFibGVEZXRhaWxzP251bGw6YS50'@;
put 'YWJsZURldGFpbHMuQUxMT1dfUkVTVE9SRSkpLGZlKDIpLE1lKCJkYXRhIixhLmhvdFRhYmxlLmRhdGEpKCJjb2xIZWFkZXJzIixhLmhvdFRhYmxlLmNvbEhlYWRlcnMpKCJjb2x1bW5zIixhLmhvdFRhYmxlLmNvbHVtbnMpKCJtYXhSb3dzIixhLmhvdFRhYmxlLm1heFJvd3MpKCJoZWlnaHQi'@;
put 'LGEuaG90VGFibGUuaGVpZ2h0KSgibGljZW5zZUtleSIsYS5ob3RUYWJsZS5saWNlbnNlS2V5KSgiYWZ0ZXJHZXRDb2xIZWFkZXIiLGEuaG90VGFibGUuYWZ0ZXJHZXRDb2xIZWFkZXIpKCJjZWxscyIsYS5ob3RUYWJsZS5jZWxscyl9fWNvbnN0IEtfdD1be3BhdGg6Ijp0YWJsZUlkIixjb21w'@;
put 'b25lbnQ6KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmLHYsTSl7dGhpcy5saWNlbmNlU2VydmljZT1hLHRoaXMuc2FzU3RvcmVTZXJ2aWNlPWQsdGhpcy5ldmVudFNlcnZpY2U9aCx0aGlzLnJvdXRlPWYsdGhpcy5yb3V0ZXI9dix0aGlzLnNhc1NlcnZpY2U9TSx0aGlzLmxvYWRl'@;
put 'ZD0hMSx0aGlzLnJldmVydGluZ0NoYW5nZXM9ITEsdGhpcy5saWNlbmNlU3RhdGU9dGhpcy5saWNlbmNlU2VydmljZS5saWNlbmNlU3RhdGUsdGhpcy5ob3RUYWJsZT17ZGF0YTpbXSxjb2xIZWFkZXJzOltdLGNvbHVtbnM6W10saGVpZ2h0OjUwMCxzZXR0aW5nczp7fSxsaWNlbnNlS2V5OnZv'@;
put 'aWQgMCxtYXhSb3dzOnRoaXMubGljZW5jZVN0YXRlLnZhbHVlLnN0YWdlX3Jvd3NfYWxsb3dlZHx8MS8wLGFmdGVyR2V0Q29sSGVhZGVyOihELFoscmUpPT57Wi5jbGFzc0xpc3QuYWRkKEtuLmhhbmRzb250YWJsZS5kYXJrVGFibGVIZWFkZXJDbGFzcyl9fX1zdWJtaXR0ZWRUYWJsZVNjcmVl'@;
put 'bigpe3RoaXMucm91dGUubmF2aWdhdGVCeVVybCgiL3N0YWdlLyIrdGhpcy50YWJsZV9pZCl9YXBwcm92ZVRhYmxlU2NyZWVuKCl7dGhpcy5yb3V0ZS5uYXZpZ2F0ZUJ5VXJsKCIvcmV2aWV3L2FwcHJvdmVEZXQvIit0aGlzLnRhYmxlX2lkKX12aWV3ZXJUYWJsZVNjcmVlbigpe3RoaXMucm91'@;
put 'dGUubmF2aWdhdGVCeVVybCgiL3ZpZXcvZGF0YS8iK3RoaXMudGFibGVEZXRhaWxzLkJBU0VfVEFCTEUpfWdvQmFjaygpe0tuLnhsbWFwcy5maW5kKGQ9PmQudGFyZ2V0RFM9PT10aGlzLnRhYmxlRGV0YWlscy5CQVNFX1RBQkxFKT90aGlzLnJvdXRlLm5hdmlnYXRlQnlVcmwoIi9ob21lL2V4'@;
put 'Y2VsLW1hcHMvIit0aGlzLmhvdFRhYmxlLmRhdGFbMF0uWExNQVBfSUQpOnRoaXMucm91dGUubmF2aWdhdGVCeVVybCgiL2VkaXRvci8iK3RoaXMudGFibGVEZXRhaWxzLkJBU0VfVEFCTEUpfWRvd25sb2FkKGEpe2xldCBkPXRoaXMuc2FzU2VydmljZS5nZXRTYXNqc0NvbmZpZygpLGg9ZC5z'@;
put 'ZXJ2ZXJVcmwsZj1kLmFwcExvYyx2PXRoaXMuc2FzU2VydmljZS5nZXRFeGVjdXRpb25QYXRoKCk7d2luZG93Lm9wZW4oaCt2KyIvP19wcm9ncmFtPSIrZisiL3NlcnZpY2VzL2F1ZGl0b3JzL2dldGF1ZGl0ZmlsZSZ0YWJsZT0iK2EpfW5nT25Jbml0KCl7dmFyIGE9dGhpcztyZXR1cm4gZWUo'@;
put 'ZnVuY3Rpb24qKCl7aWYoYS5saWNlbmNlU2VydmljZS5ob3RfbGljZW5zZV9rZXkuc3Vic2NyaWJlKGQ9PnthLmhvdFRhYmxlLmxpY2Vuc2VLZXk9ZH0pLHR5cGVvZiBhLnJvdXRlci5zbmFwc2hvdC5wYXJhbXMudGFibGVJZDwidSIpe2EudGFibGVfaWQ9YS5yb3V0ZXIuc25hcHNob3QucGFy'@;
put 'YW1zLnRhYmxlSWQ7dHJ5e2xldCBkPXlpZWxkIGEuc2FzU3RvcmVTZXJ2aWNlLmdldENoYW5nZUluZm8oYS50YWJsZV9pZCk7aWYoIWR8fCFkLmpzcGFyYW1zKXRocm93IG5ldyBFcnJvcigianNwYXJhbXMgcHJvcGVydHkgaXMgbWlzc2luZyBmcm9tIHJlc3BvbnNlLiIpO2EudGFibGVEZXRh'@;
put 'aWxzPWQuanNwYXJhbXNbMF19Y2F0Y2goZCl7bGV0IGg9e307ZC5NRVNTQUdFP2g9ZDpoLk1FU1NBR0U9ZCxhLmV2ZW50U2VydmljZS5jYXRjaFJlc3BvbnNlRXJyb3IoInB1YmxpYy9nZXRjaGFuZ2VpbmZvIixoKX10cnl7bGV0IGQ9eWllbGQgYS5zYXNTdG9yZVNlcnZpY2Uub3BlblRhYmxl'@;
put 'KGEudGFibGVfaWQpO2lmKCFkfHwhZC5zdGFnZXRhYmxlKXRocm93IG5ldyBFcnJvcigiU3RhZ2V0YWJsZSBwcm9wZXJ0eSBpcyBtaXNzaW5nIGZyb20gcmVzcG9uc2UuIik7bGV0IGg9ZC5zdGFnZXRhYmxlWzBdLGY9W10sdj1bXTtmb3IobGV0IEQgaW4gaCloJiZmLnB1c2goRCk7Zm9yKGxl'@;
put 'dCBEPTA7RDxmLmxlbmd0aDtEKyspdi5wdXNoKHtkYXRhOmZbRF19KTtsZXQgTT1mdW5jdGlvbigpe3JldHVybntyZWFkT25seTohMH19O2EuaG90VGFibGUuZGF0YT1kLnN0YWdldGFibGUsYS5ob3RUYWJsZS5jb2xIZWFkZXJzPWYsYS5ob3RUYWJsZS5jb2x1bW5zPXYsYS5ob3RUYWJsZS5j'@;
put 'ZWxscz1NLGEubG9hZGVkPSEwLGEuc2V0Rm9jdXMoKX1jYXRjaChkKXtsZXQgaD17fTtkLk1FU1NBR0V8fChoLk1FU1NBR0U9ZCksYS5ldmVudFNlcnZpY2UuY2F0Y2hSZXNwb25zZUVycm9yKCJhdWRpdG9ycy9nZXRzdGFnZXRhYmxlIixoKSxhLmxvYWRlZD0hMX19fSkoKX1yZXZlcnRDaGFu'@;
put 'Z2VzKCl7dGhpcy5yZXZlcnRpbmdDaGFuZ2VzPSEwLHRoaXMuc2FzU2VydmljZS5yZXF1ZXN0KCJlZGl0b3JzL3Jlc3RvcmUiLHtyZXN0b3JlX2luOlt7bG9hZF9yZWY6dGhpcy50YWJsZV9pZH1dfSkudGhlbihkPT57ZC5hZGFwdGVyUmVzcG9uc2UucmVzdG9yZV9vdXQmJnRoaXMucm91dGUu'@;
put 'bmF2aWdhdGUoWyIvc3RhZ2UiXSkudGhlbigoKT0+e3RoaXMucm91dGUubmF2aWdhdGUoW2Avc3RhZ2UvJHtkLmFkYXB0ZXJSZXNwb25zZS5yZXN0b3JlX291dFswXS5MT0FEUkVGfWBdKX0pfSkuZmluYWxseSgoKT0+e3RoaXMucmV2ZXJ0aW5nQ2hhbmdlcz0hMX0pfXNldEZvY3VzKCl7c2V0'@;
put 'VGltZW91dCgoKT0+e2xldCBhPXdpbmRvdy5kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiYXBwcm92YWwtYnRuIik7YSYmYS5mb2N1cygpfSwyMDApfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKEdlKHUxKSxHZShraCksR2UodmMpLEdlKExzKSxH'@;
put 'ZShDdSksR2UoQnMpKX19c3RhdGlje3RoaXMuXHUwMjc1Y21wPVZyKHt0eXBlOmMsc2VsZWN0b3JzOltbImFwcC1zdGFnZSJdXSxob3N0QXR0cnM6WzEsImNvbnRlbnQtY29udGFpbmVyIl0sZGVjbHM6NCx2YXJzOjIsY29uc3RzOltbMSwiY29udGVudC1hcmVhIl0sWzEsImNsci1jb2wtbWQt'@;
put 'MTIiLCJjYXJkIl0sWyJjbGFzcyIsImgtODB2aCBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBmbGV4LWNvbHVtbiBhbGlnbi1pdGVtcy1jZW50ZXIiLDQsIm5nSWYiXSxbNCwibmdJZiJdLFsxLCJoLTgwdmgiLCJkLWZsZXgiLCJqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIiwiZmxleC1j'@;
put 'b2x1bW4iLCJhbGlnbi1pdGVtcy1jZW50ZXIiXSxbImNsYXNzIiwic3Bpbm5lciIsNCwibmdJZiJdLFsxLCJzcGlubmVyIl0sWyJuZy1pZiIsImxvYWRlZCIsMSwiY2FyZC1oZWFkZXIiXSxbMSwiY2FyZC10aXRsZSIsInRleHQtY2VudGVyIl0sWzEsIm10LTAiXSxbIm5nLWlmIiwibG9hZGVk'@;
put 'IiwxLCJjbHItcm93Il0sWzEsImNhcmQtYmxvY2siLCJjbHItY29sLW1kLTYiLCJuby1ib3JkZXJzIl0sWzEsImNhcmQtaGVhZGVyIiwicHktNSJdLFsxLCJiYXNlVGFibGVMaW5rIiwzLCJjbGljayJdLFsxLCJtdC0xMCJdLFsxLCJtdC0xMCIsMywibmdDbGFzcyJdLFsxLCJjbHItY29sLW1k'@;
put 'LTYiLCJjYXJkLWJsb2NrIiwibm8tYm9yZGVycyJdLFsxLCJtdC0yMCJdLFsxLCJyb3ciXSxbMSwiYnRuIiwiYnRuLXNtIiwiYnRuLW91dGxpbmUiLCJ0ZXh0LWNlbnRlciIsIm1yLTVpIiwzLCJjbGljayIsImRpc2FibGVkIl0sWyJpZCIsImFwcHJvdmFsLWJ0biIsImNsYXNzIiwiYnRuIGJ0'@;
put 'bi1zbSBidG4tc3VjY2Vzcy1vdXRsaW5lIHRleHQtY2VudGVyIG1yLTVpIiwzLCJkaXNhYmxlZCIsImNsaWNrIiw0LCJuZ0lmIl0sWzEsImJ0biIsImJ0bi1zbSIsImJ0bi1pbmZvLW91dGxpbmUiLCJ0ZXh0LWNlbnRlciIsIm1yLTVpIiwzLCJjbGljayIsImRpc2FibGVkIl0sWzEsImJ0biIs'@;
put 'ImJ0bi1zbSIsImJ0bi1zdWNjZXNzIiwidGV4dC1jZW50ZXIiLCJtci01aSIsIm1pbi13LTAiLDMsImNsaWNrIl0sWyJzaGFwZSIsImRvd25sb2FkIl0sWyJjbHJUb29sdGlwVHJpZ2dlciIsIiIsImNsYXNzIiwiYnRuIGJ0bi1zbSBidG4tZGFuZ2VyIHRleHQtY2VudGVyIG10LTIwIiwzLCJj'@;
put 'bHJMb2FkaW5nIiwiY2xpY2siLDQsIm5nSWYiXSxbMSwiY2FyZC1ibG9jayJdLFsiaG90SWQiLCJob3RJbnN0YW5jZSIsImlkIiwiaG90VGFibGUiLCJjbGFzc05hbWUiLCJodERhcmsiLCJzdHJldGNoSCIsImFsbCIsMywiZGF0YSIsImNvbEhlYWRlcnMiLCJjb2x1bW5zIiwibWF4Um93cyIs'@;
put 'ImhlaWdodCIsImxpY2Vuc2VLZXkiLCJhZnRlckdldENvbEhlYWRlciIsImNlbGxzIl0sWzEsImNhcmQtZm9vdGVyIiwiZC1mbGV4IiwianVzdGlmeS1jb250ZW50LWNlbnRlciJdLFsiaWQiLCJhcHByb3ZhbC1idG4iLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1zdWNjZXNzLW91dGxpbmUiLCJ0'@;
put 'ZXh0LWNlbnRlciIsIm1yLTVpIiwzLCJjbGljayIsImRpc2FibGVkIl0sWyJjbHJUb29sdGlwVHJpZ2dlciIsIiIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLWRhbmdlciIsInRleHQtY2VudGVyIiwibXQtMjAiLDMsImNsaWNrIiwiY2xyTG9hZGluZyJdLFsiY2xyUG9zaXRpb24iLCJib3R0b20t'@;
put 'bGVmdCIsImNsclNpemUiLCJsZyIsNCwiY2xySWZPcGVuIl0sWyJjbHJQb3NpdGlvbiIsImJvdHRvbS1sZWZ0IiwiY2xyU2l6ZSIsImxnIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGQsaCl7MSZkJiYoZGUoMCwiZGl2IiwwKSgxLCJkaXYiLDEpLGd0KDIsWl90LDMsMiwiZGl2IiwyKSgzLCRfdCw0'@;
put 'OSwyMCwiZGl2IiwzKSxoZSgpKCkpLDImZCYmKGZlKDIpLE1lKCJuZ0lmIiwhaC5sb2FkZWQpLGZlKCksTWUoIm5nSWYiLGgubG9hZGVkKSl9LGRlcGVuZGVuY2llczpbd3UsYmEsSGwsajAsTDIsUDIsdjcseTcsYjcsRF9dLGVuY2Fwc3VsYXRpb246Mn0pfX1yZXR1cm4gY30pKCl9XTtsZXQg'@;
put 'cV90PSgoKT0+e2NsYXNzIGN7c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NW1vZD1raSh7dHlwZTpjfSl9c3RhdGlje3RoaXMuXHUwMjc1aW5qPUFyKHtpbXBvcnRzOltSYSx6MCx6Yy5mb3JDaGlsZChLX3QpLG85'@;
put 'LmZvclJvb3QoKV19KX19cmV0dXJuIGN9KSgpO2Z1bmN0aW9uIFhfdChjLGwpe2lmKDEmYyYmKGRlKDAsInAiLDE3KSxMZSgxLCIgVmlld2VyIHJvd3MgbGltaXQ6ICIpLGRlKDIsInNwYW4iLDcpLExlKDMpLGhlKCkoKSksMiZjKXtjb25zdCBhPVJlKCk7ZmUoMyksd3IoYS5saWNlbmNlU3Rh'@;
put 'dGUudmFsdWUudmlld2VyX3Jvd3NfYWxsb3dlZCl9fWZ1bmN0aW9uIEpfdChjLGwpe2lmKDEmYyYmKGRlKDAsInAiLDE3KSxMZSgxLCIgRWRpdG9yIHJvd3MgbGltaXQ6ICIpLGRlKDIsInNwYW4iLDcpLExlKDMpLGhlKCkoKSksMiZjKXtjb25zdCBhPVJlKCk7ZmUoMyksd3IoYS5saWNlbmNl'@;
put 'U3RhdGUudmFsdWUuZWRpdG9yX3Jvd3NfYWxsb3dlZCl9fWZ1bmN0aW9uIFFfdChjLGwpe2lmKDEmYyYmKGRlKDAsInAiLDE3KSxMZSgxLCIgU3RhZ2Ugcm93cyBsaW1pdDogIiksZGUoMiwic3BhbiIsNyksTGUoMyksaGUoKSgpKSwyJmMpe2NvbnN0IGE9UmUoKTtmZSgzKSx3cihhLmxpY2Vu'@;
put 'Y2VTdGF0ZS52YWx1ZS5zdGFnZV9yb3dzX2FsbG93ZWQpfX1mdW5jdGlvbiBld3QoYyxsKXtpZigxJmMmJihkZSgwLCJwIiwxNyksTGUoMSwiIEhpc3Rvcnkgcm93cyBsaW1pdDogIiksZGUoMiwic3BhbiIsNyksTGUoMyksaGUoKSgpKSwyJmMpe2NvbnN0IGE9UmUoKTtmZSgzKSx3cihhLmxp'@;
put 'Y2VuY2VTdGF0ZS52YWx1ZS5oaXN0b3J5X3Jvd3NfYWxsb3dlZCl9fWZ1bmN0aW9uIHR3dChjLGwpe2lmKDEmYyYmKGRlKDAsInAiLDE3KSxMZSgxLCIgU3VibWl0IHJvd3MgbGltaXQ6ICIpLGRlKDIsInNwYW4iLDcpLExlKDMpLGhlKCkoKSksMiZjKXtjb25zdCBhPVJlKCk7ZmUoMyksd3Io'@;
put 'YS5saWNlbmNlU3RhdGUudmFsdWUuc3VibWl0X3Jvd3NfbGltaXQpfX1mdW5jdGlvbiBud3QoYyxsKXtpZigxJmMmJihkZSgwLCJwIiwxNyksTGUoMSwiIFRhYmxlcyBpbiBsaWJyYXJ5IGxpbWl0OiAiKSxkZSgyLCJzcGFuIiw3KSxMZSgzKSxoZSgpKCkpLDImYyl7Y29uc3QgYT1SZSgpO2Zl'@;
put 'KDMpLHdyKGEubGljZW5jZVN0YXRlLnZhbHVlLnRhYmxlc19pbl9saWJyYXJ5X2xpbWl0KX19ZnVuY3Rpb24gcnd0KGMsbCl7aWYoMSZjJiYoZGUoMCwicCIsMTcpLExlKDEsIiBWaWV3Ym94ZXMgbGltaXQ6ICIpLGRlKDIsInNwYW4iLDcpLExlKDMpLGhlKCkoKSksMiZjKXtjb25zdCBhPVJl'@;
put 'KCk7ZmUoMyksd3IoYS5saWNlbmNlU3RhdGUudmFsdWUudmlld2JveF9saW1pdCl9fWZ1bmN0aW9uIGl3dChjLGwpe2lmKDEmYyYmKGRlKDAsInAiLDE3KSxMZSgxLCIgTGluZWFnZSBkYWlseSBsaW1pdDogIiksZGUoMiwic3BhbiIsNyksTGUoMyksaGUoKSgpKSwyJmMpe2NvbnN0IGE9UmUo'@;
put 'KTtmZSgzKSx3cihhLmxpY2VuY2VTdGF0ZS52YWx1ZS5saW5lYWdlX2RhaWx5X2xpbWl0KX19ZnVuY3Rpb24gYXd0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiZGl2IiwxOSksTGUoMSwiIFJlZnJlc2ggRGF0YSBMaW5lYWdlICIpLGRlKDIsImJ1dHRvbiIsMjApLEZ0KCJjbGlj'@;
put 'ayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoUmUoMikucmVmcmVzaERhdGFMaW5lYWdlKCkpfSksTGUoMywiIFJFRlJFU0ggIiksaGUoKSgpfWlmKDImYyl7Y29uc3QgYT1SZSgyKTtmZSgyKSxNZSgiY2xyTG9hZGluZyIsYS5yZWZyZXNoaW5nRGF0YUxpbmVhZ2UpfX1mdW5jdGlvbiBv'@;
put 'd3QoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtzaSgwKSxndCgxLGF3dCw0LDEsImRpdiIsMTgpLGRlKDIsImRpdiIsMTkpLExlKDMsIiBSZWZyZXNoIERhdGEgQ2F0YWxvZyAiKSxkZSg0LCJidXR0b24iLDIwKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KFJlKCku'@;
put 'cmVmcmVzaERhdGFDYXRhbG9nKCkpfSksTGUoNSwiIFJFRlJFU0ggIiksaGUoKSgpLGRlKDYsImRpdiIsMTkpLExlKDcsIiBEb3dubG9hZCBDb25maWd1cmF0aW9uICIpLGRlKDgsImJ1dHRvbiIsMjEpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoUmUoKS5kb3dubG9h'@;
put 'ZENvbmZpZ3VyYXRpb24oKSl9KSxMZSg5LCIgRE9XTkxPQUQgIiksaGUoKSgpLGRlKDEwLCJkaXYiLDE5KSxMZSgxMSwiIFVwZGF0ZSBMaWNlbmNlIEtleSAiKSxkZSgxMiwiYnV0dG9uIiwyMiksTGUoMTMsIiBVUERBVEUgIiksaGUoKSgpLGxpKCl9aWYoMiZjKXtjb25zdCBhPVJlKCk7ZmUo'@;
put 'KSxNZSgibmdJZiIsIlNBUzkiPT09YS5zZXJ2ZXJUeXBlKSxmZSgzKSxNZSgiY2xyTG9hZGluZyIsYS5yZWZyZXNoaW5nRGF0YUNhdGFsb2cpfX1jb25zdCBzd3Q9W3twYXRoOiIiLGNvbXBvbmVudDooKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYpe3RoaXMuYXBwU2VydmljZT1h'@;
put 'LHRoaXMuc2FzU2VydmljZT1kLHRoaXMubGljZW5jZVNlcnZpY2U9aCx0aGlzLmFwcFNldHRpbmdzU2VydmljZT1mLHRoaXMuYXBwSW5mbz17YWRhcHRlclZlcnNpb246IjQuMTIuMSIsYXBwVmVyc2lvbjoidjcuMC4wIi5yZXBsYWNlKCJ2IiwiIiksYnVpbGRUaW1lc3RhbXA6SW9lKCkocGFy'@;
put 'c2VJbnQoIjE3NDk2NDk1NzgwODkiKSkuZm9ybWF0KCJERC1NTU0tWVlZWSBISDpNTSIpfSx0aGlzLmh0dHA9Imh0dHA6Ij09PWxvY2F0aW9uLnByb3RvY29sLHRoaXMucmVmcmVzaGluZ0RhdGFDYXRhbG9nPSExLHRoaXMucmVmcmVzaGluZ0RhdGFMaW5lYWdlPSExLHRoaXMucmVzcG9uc2U9'@;
put 'Ik5vIHJlc3BvbnNlIix0aGlzLnJlc3BvbnNlTW9kYWw9ITEsdGhpcy5JbmZpbml0eT0xLzAsdGhpcy5saWNlbmNlU3RhdGU9dGhpcy5saWNlbmNlU2VydmljZS5saWNlbmNlU3RhdGUsdGhpcy5zZXJ2ZXJUeXBlPXRoaXMuc2FzU2VydmljZS5nZXRTZXJ2ZXJUeXBlKCksdGhpcy5saWNlbmNl'@;
put 'SW5mbz10aGlzLmxpY2VuY2VTZXJ2aWNlLmdldExpY2Vuc2VLZXlEYXRhKCksdGhpcy5lbnZpcm9ubWVudEluZm89dGhpcy5hcHBTZXJ2aWNlLmdldEVudmlyb25tZW50SW5mbygpLHRoaXMuc2V0dGluZ3M9dGhpcy5hcHBTZXR0aW5nc1NlcnZpY2Uuc2V0dGluZ3MudmFsdWUsdGhpcy5lbnZp'@;
put 'cm9ubWVudEluZm8uQVVUT0VYRUMmJih0aGlzLmVudmlyb25tZW50SW5mby5BVVRPRVhFQz1kZWNvZGVVUklDb21wb25lbnQodGhpcy5lbnZpcm9ubWVudEluZm8uQVVUT0VYRUMpKSx0aGlzLmFwcFNldHRpbmdzU2VydmljZS5zZXR0aW5ncy5zdWJzY3JpYmUodj0+e3RoaXMuc2V0dGluZ3M9'@;
put 'dn0pfW5nT25Jbml0KCl7fXNldHRpbmdDaGFuZ2UoYSl7dGhpcy5hcHBTZXR0aW5nc1NlcnZpY2Uuc2V0QXBwU2V0dGluZ3ModGhpcy5zZXR0aW5ncyl9ZG93bmxvYWRDb25maWd1cmF0aW9uKCl7bGV0IGE9dGhpcy5zYXNTZXJ2aWNlLmdldFNhc2pzQ29uZmlnKCksZD1hLnNlcnZlclVybCxo'@;
put 'PWEuYXBwTG9jLGY9dGhpcy5zYXNTZXJ2aWNlLmdldEV4ZWN1dGlvblBhdGgoKTt3aW5kb3cub3BlbihkK2YrIi8/X3Byb2dyYW09IitoKyIvc2VydmljZXMvYWRtaW4vZXhwb3J0Y29uZmlnIil9cmVmcmVzaERhdGFDYXRhbG9nKCl7dGhpcy5yZWZyZXNoaW5nRGF0YUNhdGFsb2c9ITAsdGhp'@;
put 'cy5zYXNTZXJ2aWNlLnJlcXVlc3QoImFkbWluL3JlZnJlc2hjYXRhbG9nIixudWxsKS50aGVuKGE9Pnt0aGlzLnJlc3BvbnNlPXRoaXMucGFyc2VSZXNwb25zZShhLmFkYXB0ZXJSZXNwb25zZSksdGhpcy5yZXNwb25zZU1vZGFsPSEwfSkuY2F0Y2goYT0+e3RoaXMucmVzcG9uc2U9dGhpcy5w'@;
put 'YXJzZVJlc3BvbnNlKGEuYWRhcHRlclJlc3BvbnNlKSx0aGlzLnJlc3BvbnNlTW9kYWw9ITB9KS5maW5hbGx5KCgpPT57dGhpcy5yZWZyZXNoaW5nRGF0YUNhdGFsb2c9ITF9KX1yZWZyZXNoRGF0YUxpbmVhZ2UoKXt0aGlzLnJlZnJlc2hpbmdEYXRhTGluZWFnZT0hMCx0aGlzLnNhc1NlcnZp'@;
put 'Y2UucmVxdWVzdCgiYWRtaW4vcmVmcmVzaHRhYmxlbGluZWFnZSIsbnVsbCkudGhlbihhPT57dGhpcy5yZXNwb25zZT10aGlzLnBhcnNlUmVzcG9uc2UoYS5hZGFwdGVyUmVzcG9uc2UpLHRoaXMucmVzcG9uc2VNb2RhbD0hMH0pLmNhdGNoKGE9Pnt0aGlzLnJlc3BvbnNlPXRoaXMucGFyc2VS'@;
put 'ZXNwb25zZShhLmFkYXB0ZXJSZXNwb25zZSksdGhpcy5yZXNwb25zZU1vZGFsPSEwfSkuZmluYWxseSgoKT0+e3RoaXMucmVmcmVzaGluZ0RhdGFMaW5lYWdlPSExfSl9cGFyc2VSZXNwb25zZShhKXtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIGE/SlNPTi5zdHJpbmdpZnkoYSk6YX1zdGF0aWN7'@;
put 'dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShHZShvTCksR2UoQnMpLEdlKHUxKSxHZSgkUikpfX1zdGF0aWN7dGhpcy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siYXBwLXN5c3RlbSJdXSxob3N0QXR0cnM6WzEsImNvbnRlbnQtY29udGFpbmVy'@;
put 'Il0sZGVjbHM6MTM4LHZhcnM6MzYsY29uc3RzOltbMSwiY29udGVudC1hcmVhIl0sWzEsImNhcmQiLCJwLTEwIiwiZC1mbGV4IiwiY2xyLWZsZXgtY29sdW1uIiwiY2xyLWFsaWduLWl0ZW1zLWNlbnRlciIsImNsci1qdXN0aWZ5LWNvbnRlbnQtY2VudGVyIl0sWzEsInRleHQtY2VudGVyIiwi'@;
put 'bS0wIl0sWzEsInctMTAwIiwibGlnaHQiXSxbMSwiY29udGVudC1ib3giLCJkLWZsZXgiLCJjbHItZmxleC1jb2x1bW4iXSxbMSwic3lzLWluZm8iLCJkLWZsZXgiLCJjbHItanVzdGlmeS1jb250ZW50LWNlbnRlciIsImNsci1mbGV4LWNvbHVtbiIsImNsci1mbGV4LWxnLXJvdyJdLFsiY2Rz'@;
put 'LXRleHQiLCJzdWJzZWN0aW9uIiwxLCJtYi0xMCJdLFsxLCJkYXJrIl0sWyJjZHMtdGV4dCIsImxhYmVsIiwxLCJtLTAiXSxbMSwiZC1mbGV4IiwiY2xyLWp1c3RpZnktY29udGVudC1sZy1jZW50ZXIiXSxbImNsYXNzIiwibS0wIiw0LCJuZ0lmIl0sWzQsIm5nSWYiXSxbMywiY2xyTW9kYWxP'@;
put 'cGVuQ2hhbmdlIiwiY2xyTW9kYWxPcGVuIl0sWzEsIm1vZGFsLXRpdGxlIl0sWzEsIm1vZGFsLWJvZHkiXSxbMSwibW9kYWwtZm9vdGVyIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tc20iLCJidG4tcHJpbWFyeSIsMywiY2xpY2siXSxbMSwibS0wIl0sWyJjbGFzcyIsImFkbWlu'@;
put 'LWFjdGlvbiIsNCwibmdJZiJdLFsxLCJhZG1pbi1hY3Rpb24iXSxbMSwiYnRuIiwiYnRuLWluZm8iLCJidG4tc20iLDMsImNsaWNrIiwiY2xyTG9hZGluZyJdLFsxLCJidG4iLCJidG4taW5mbyIsImJ0bi1zbSIsMywiY2xpY2siXSxbInJvdXRlckxpbmsiLCIvbGljZW5zaW5nL3VwZGF0ZSIs'@;
put 'MSwiYnRuIiwiYnRuLWluZm8iLCJidG4tc20iXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZCxoKXsxJmQmJihkZSgwLCJkaXYiLDApKDEsImRpdiIsMSkoMiwiaDQiLDIpLExlKDMsIlN5c3RlbSBpbmZvcm1hdGlvbiIpLGhlKCksR3QoNCwiaHIiLDMpLGRlKDUsImRpdiIsNCkoNiwiZGl2Iiw1KSg3'@;
put 'LCJkaXYiKSg4LCJoNiIsNiksTGUoOSwiIEVudmlyb25tZW50IERldGFpbHMgIiksR3QoMTAsInNwYW4iLDcpLGhlKCksZGUoMTEsInAiLDgpLExlKDEyLCIgU1lTU0lURTogIiksZGUoMTMsInNwYW4iLDcpLExlKDE0KSxoZSgpKCksZGUoMTUsInAiLDgpLExlKDE2LCIgU1lTU0NQTDogIiks'@;
put 'ZGUoMTcsInNwYW4iLDcpLExlKDE4KSxoZSgpKCksZGUoMTksInAiLDgpLExlKDIwLCIgU1lTVENQSVBIT1NUTkFNRTogIiksZGUoMjEsInNwYW4iLDcpLExlKDIyKSxoZSgpKCksZGUoMjMsInAiLDgpLExlKDI0LCIgU1lTVkxPTkc6ICIpLGRlKDI1LCJzcGFuIiw3KSxMZSgyNiksaGUoKSgp'@;
put 'LGRlKDI3LCJwIiw4KSxMZSgyOCwiIE1FTVNJWkU6ICIpLGRlKDI5LCJzcGFuIiw3KSxMZSgzMCksaGUoKSgpLGRlKDMxLCJwIiw4KSxMZSgzMiwiIFNZU1BST0NFU1NNT0RFOiAiKSxkZSgzMywic3BhbiIsNyksTGUoMzQpLGhlKCkoKSxkZSgzNSwicCIsOCksTGUoMzYsIiBTWVNIT1NUTkFN'@;
put 'RTogIiksZGUoMzcsInNwYW4iLDcpLExlKDM4KSxoZSgpKCksZGUoMzksInAiLDgpLExlKDQwLCIgU1lTVVNFUklEOiAiKSxkZSg0MSwic3BhbiIsNyksTGUoNDIpLGhlKCkoKSxkZSg0MywicCIsOCksTGUoNDQsIiBTWVNIT1NUSU5GT0xPTkc6ICIpLGRlKDQ1LCJzcGFuIiw3KSxMZSg0Niks'@;
put 'aGUoKSgpLGRlKDQ3LCJwIiw4KSxMZSg0OCwiIFNZU0VOQ09ESU5HOiAiKSxkZSg0OSwic3BhbiIsNyksTGUoNTApLGhlKCkoKSxkZSg1MSwicCIsOCksTGUoNTIsIiBBVVRPRVhFQzogIiksZGUoNTMsInNwYW4iLDcpLExlKDU0KSxoZSgpKCkoKSxkZSg1NSwiZGl2Iiw5KSg1NiwiZGl2Iiko'@;
put 'NTcsImg2Iiw2KSxMZSg1OCwiIERhdGEgQ29udHJvbGxlciBEZXRhaWxzICIpLEd0KDU5LCJzcGFuIiw3KSxoZSgpLGRlKDYwLCJwIiw4KSxMZSg2MSwiIEFwcGxpY2F0aW9uIHZlcnNpb246ICIpLGRlKDYyLCJzcGFuIiw3KSxMZSg2MyksaGUoKSgpLGRlKDY0LCJwIiw4KSxMZSg2NSwiIEJ1'@;
put 'aWxkIHRpbWVzdGFtcDogIiksZGUoNjYsInNwYW4iLDcpLExlKDY3KSxoZSgpKCksZGUoNjgsInAiLDgpLExlKDY5LCIgQWRhcHRlciB2ZXJzaW9uOiAiKSxkZSg3MCwic3BhbiIsNyksTGUoNzEpLGhlKCkoKSxkZSg3MiwicCIsOCksTGUoNzMsIiBIVFRQOiAiKSxkZSg3NCwic3BhbiIsNyks'@;
put 'TGUoNzUpLGhlKCkoKSxkZSg3NiwicCIsOCksTGUoNzcsIiBEQyBBZG1pbiBHcm91cDogIiksZGUoNzgsInNwYW4iLDcpLExlKDc5KSxoZSgpKCksZGUoODAsInAiLDgpLExlKDgxLCIgQXBwIExvY2F0aW9uOiAiKSxkZSg4Miwic3BhbiIsNyksTGUoODMpLGhlKCkoKSgpKCksZGUoODQsImRp'@;
put 'diIpKDg1LCJoNiIsNiksTGUoODYsIiBMaWNlbmNlIGRldGFpbHMgIiksR3QoODcsInNwYW4iLDcpLGhlKCksZGUoODgsInAiLDgpLExlKDg5LCIgVmFsaWQgdW50aWw6ICIpLGRlKDkwLCJzcGFuIiw3KSxMZSg5MSksaGUoKSgpLGRlKDkyLCJwIiw4KSxMZSg5MywiIFVzZXJzIGFsbG93ZWQ6'@;
put 'ICIpLGRlKDk0LCJzcGFuIiw3KSxMZSg5NSksaGUoKSgpLGRlKDk2LCJwIiw4KSxMZSg5NywiIFNpdGUgSURzOiAiKSxkZSg5OCwic3BhbiIsNyksTGUoOTkpLGhlKCkoKSxkZSgxMDAsInAiLDgpLExlKDEwMSwiIEZyZWUgVGllcjogIiksZGUoMTAyLCJzcGFuIiw3KSxMZSgxMDMpLGhlKCko'@;
put 'KSxndCgxMDQsWF90LDQsMSwicCIsMTApKDEwNSxKX3QsNCwxLCJwIiwxMCkoMTA2LFFfdCw0LDEsInAiLDEwKSgxMDcsZXd0LDQsMSwicCIsMTApKDEwOCx0d3QsNCwxLCJwIiwxMCkoMTA5LG53dCw0LDEsInAiLDEwKSgxMTAscnd0LDQsMSwicCIsMTApKDExMSxpd3QsNCwxLCJwIiwxMCks'@;
put 'ZGUoMTEyLCJwIiw4KSxMZSgxMTMsIiBWaWV3Ym94ZXM6ICIpLGRlKDExNCwic3BhbiIsNyksTGUoMTE1KSxoZSgpKCksZGUoMTE2LCJwIiw4KSxMZSgxMTcsIiBGaWxlIFVwbG9hZDogIiksZGUoMTE4LCJzcGFuIiw3KSxMZSgxMTkpLGhlKCkoKSxkZSgxMjAsInAiLDgpLExlKDEyMSwiIEVk'@;
put 'aXQgcmVjb3JkOiAiKSxkZSgxMjIsInNwYW4iLDcpLExlKDEyMyksaGUoKSgpLGRlKDEyNCwicCIsOCksTGUoMTI1LCIgQWRkIHJlY29yZDogIiksZGUoMTI2LCJzcGFuIiw3KSxMZSgxMjcpLGhlKCkoKSgpKCksR3QoMTI4LCJociIsMyksZ3QoMTI5LG93dCwxNCwyLCJuZy1jb250YWluZXIi'@;
put 'LDExKSxoZSgpKCkoKSxkZSgxMzAsImNsci1tb2RhbCIsMTIpLGdpKCJjbHJNb2RhbE9wZW5DaGFuZ2UiLGZ1bmN0aW9uKHYpe3JldHVybiBtaShoLnJlc3BvbnNlTW9kYWwsdil8fChoLnJlc3BvbnNlTW9kYWw9diksdn0pLGRlKDEzMSwiaDMiLDEzKSxMZSgxMzIsIlJlc3BvbnNlIiksaGUo'@;
put 'KSxkZSgxMzMsImRpdiIsMTQpLExlKDEzNCksaGUoKSxkZSgxMzUsImRpdiIsMTUpKDEzNiwiYnV0dG9uIiwxNiksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBoLnJlc3BvbnNlTW9kYWw9ITF9KSxMZSgxMzcsIiBPayAiKSxoZSgpKCkoKSksMiZkJiYoZmUoMTQpLHdyKG51bGw9PWgu'@;
put 'ZW52aXJvbm1lbnRJbmZvP251bGw6aC5lbnZpcm9ubWVudEluZm8uU1lTU0lURSksZmUoNCksd3IobnVsbD09aC5lbnZpcm9ubWVudEluZm8/bnVsbDpoLmVudmlyb25tZW50SW5mby5TWVNTQ1BMKSxmZSg0KSx3cihudWxsPT1oLmVudmlyb25tZW50SW5mbz9udWxsOmguZW52aXJvbm1lbnRJ'@;
put 'bmZvLlNZU1RDUElQSE9TVE5BTUUpLGZlKDQpLHdyKG51bGw9PWguZW52aXJvbm1lbnRJbmZvP251bGw6aC5lbnZpcm9ubWVudEluZm8uU1lTVkxPTkcpLGZlKDQpLHdyKG51bGw9PWguZW52aXJvbm1lbnRJbmZvP251bGw6aC5lbnZpcm9ubWVudEluZm8uTUVNU0laRSksZmUoNCksd3IobnVs'@;
put 'bD09aC5lbnZpcm9ubWVudEluZm8/bnVsbDpoLmVudmlyb25tZW50SW5mby5TWVNQUk9DRVNTTU9ERSksZmUoNCksd3IobnVsbD09aC5lbnZpcm9ubWVudEluZm8/bnVsbDpoLmVudmlyb25tZW50SW5mby5TWVNIT1NUTkFNRSksZmUoNCksd3IobnVsbD09aC5lbnZpcm9ubWVudEluZm8/bnVs'@;
put 'bDpoLmVudmlyb25tZW50SW5mby5TWVNVU0VSSUQpLGZlKDQpLHdyKG51bGw9PWguZW52aXJvbm1lbnRJbmZvP251bGw6aC5lbnZpcm9ubWVudEluZm8uU1lTSE9TVElORk9MT05HKSxmZSg0KSx3cihudWxsPT1oLmVudmlyb25tZW50SW5mbz9udWxsOmguZW52aXJvbm1lbnRJbmZvLlNZU0VO'@;
put 'Q09ESU5HKSxmZSg0KSx3cihudWxsPT1oLmVudmlyb25tZW50SW5mbz9udWxsOmguZW52aXJvbm1lbnRJbmZvLkFVVE9FWEVDKSxmZSg5KSx3cihoLmFwcEluZm8uYXBwVmVyc2lvbiksZmUoNCksd3IoaC5hcHBJbmZvLmJ1aWxkVGltZXN0YW1wKSxmZSg0KSx3cihoLmFwcEluZm8uYWRhcHRl'@;
put 'clZlcnNpb24pLGZlKDQpLHdyKGguaHR0cD8iWUVTIjoiTk8iKSxmZSg0KSx3cihudWxsPT1oLmVudmlyb25tZW50SW5mbz9udWxsOmguZW52aXJvbm1lbnRJbmZvLkRDX0FETUlOX0dST1VQKSxmZSg0KSx3cihudWxsPT1oLmVudmlyb25tZW50SW5mbz9udWxsOmguZW52aXJvbm1lbnRJbmZv'@;
put 'LkFQUF9MT0MpLGZlKDgpLHdyKG51bGw9PWgubGljZW5jZUluZm8/bnVsbDpoLmxpY2VuY2VJbmZvLnZhbGlkX3VudGlsKSxmZSg0KSx3cihudWxsPT1oLmxpY2VuY2VJbmZvP251bGw6aC5saWNlbmNlSW5mby51c2Vyc19hbGxvd2VkKSxmZSg0KSx3cihudWxsPT1oLmxpY2VuY2VJbmZvP251'@;
put 'bGw6aC5saWNlbmNlSW5mby5zaXRlX2lkX211bHRpcGxlKSxmZSg0KSx3cihudWxsIT1oLmxpY2VuY2VJbmZvJiZoLmxpY2VuY2VJbmZvLmRlbW8/IllFUyI6Ik5PIiksZmUoKSxNZSgibmdJZiIsaC5saWNlbmNlU3RhdGUudmFsdWUudmlld2VyX3Jvd3NfYWxsb3dlZCE9PWguSW5maW5pdHkp'@;
put 'LGZlKCksTWUoIm5nSWYiLGgubGljZW5jZVN0YXRlLnZhbHVlLmVkaXRvcl9yb3dzX2FsbG93ZWQhPT1oLkluZmluaXR5KSxmZSgpLE1lKCJuZ0lmIixoLmxpY2VuY2VTdGF0ZS52YWx1ZS5zdGFnZV9yb3dzX2FsbG93ZWQhPT1oLkluZmluaXR5KSxmZSgpLE1lKCJuZ0lmIixoLmxpY2VuY2VT'@;
put 'dGF0ZS52YWx1ZS5oaXN0b3J5X3Jvd3NfYWxsb3dlZCE9PWguSW5maW5pdHkpLGZlKCksTWUoIm5nSWYiLGgubGljZW5jZVN0YXRlLnZhbHVlLnN1Ym1pdF9yb3dzX2xpbWl0IT09aC5JbmZpbml0eSksZmUoKSxNZSgibmdJZiIsaC5saWNlbmNlU3RhdGUudmFsdWUudGFibGVzX2luX2xpYnJh'@;
put 'cnlfbGltaXQhPT1oLkluZmluaXR5KSxmZSgpLE1lKCJuZ0lmIixoLmxpY2VuY2VTdGF0ZS52YWx1ZS52aWV3Ym94X2xpbWl0IT09aC5JbmZpbml0eSksZmUoKSxNZSgibmdJZiIsaC5saWNlbmNlU3RhdGUudmFsdWUubGluZWFnZV9kYWlseV9saW1pdCE9PWguSW5maW5pdHkpLGZlKDQpLHdy'@;
put 'KGgubGljZW5jZVN0YXRlLnZhbHVlLnZpZXdib3g/IllFUyI6Ik5PIiksZmUoNCksd3IoaC5saWNlbmNlU3RhdGUudmFsdWUuZmlsZVVwbG9hZD8iWUVTIjoiTk8iKSxmZSg0KSx3cihoLmxpY2VuY2VTdGF0ZS52YWx1ZS5lZGl0UmVjb3JkPyJZRVMiOiJOTyIpLGZlKDQpLHdyKGgubGljZW5j'@;
put 'ZVN0YXRlLnZhbHVlLmFkZFJlY29yZD8iWUVTIjoiTk8iKSxmZSgyKSxNZSgibmdJZiIsMT09PShudWxsPT1oLmVudmlyb25tZW50SW5mbz9udWxsOmguZW52aXJvbm1lbnRJbmZvLklTQURNSU4pKSxmZSgpLHBpKCJjbHJNb2RhbE9wZW4iLGgucmVzcG9uc2VNb2RhbCksZmUoNCksRHIoIiAi'@;
put 'LGgucmVzcG9uc2UsIiAiKSl9LGRlcGVuZGVuY2llczpbYmEsYzEsb3UsS3UsajAsUDJdLGVuY2Fwc3VsYXRpb246Mn0pfX1yZXR1cm4gY30pKCl9XTtsZXQgbHd0PSgoKT0+e2NsYXNzIGN7c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRp'@;
put 'Y3t0aGlzLlx1MDI3NW1vZD1raSh7dHlwZTpjfSl9c3RhdGlje3RoaXMuXHUwMjc1aW5qPUFyKHtpbXBvcnRzOlt6Yy5mb3JDaGlsZChzd3QpLHpjXX0pfX1yZXR1cm4gY30pKCksY3d0PSgoKT0+e2NsYXNzIGN7c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXco'@;
put 'ZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NW1vZD1raSh7dHlwZTpjfSl9c3RhdGlje3RoaXMuXHUwMjc1aW5qPUFyKHtpbXBvcnRzOltSYSxsd3QsejAsUmNdfSl9fXJldHVybiBjfSkoKTtmdW5jdGlvbiB1d3QoYyxsKXsxJmMmJkd0KDAsImNsci1pY29uIiwxMil9ZnVuY3Rpb24gZHd0KGMs'@;
put 'bCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiY2xyLWljb24iLDEzKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1SZSgyKTtyZXR1cm4gaC5ncm91cFNlYXJjaD0iIixDdChoLmdyb3VwTGlzdE9uRmlsdGVyKCkpfSksaGUoKX19ZnVuY3Rpb24gaHd0KGMsbCl7aWYo'@;
put 'MSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiY2xyLXRyZWUtbm9kZSIsNykoMSwiZGl2Iiw4KSgyLCJpbnB1dCIsOSwwKSxnaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1SZSgpO3JldHVybiBtaShmLmdyb3VwU2VhcmNoLGgpfHwoZi5ncm91cFNlYXJjaD1oKSxD'@;
put 'dChoKX0pLEZ0KCJrZXl1cCIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoUmUoKS5ncm91cExpc3RPbkZpbHRlcigpKX0pLGhlKCksZ3QoNCx1d3QsMSwwLCJjbHItaWNvbiIsMTApKDUsZHd0LDEsMCwiY2xyLWljb24iLDExKSxoZSgpKCl9aWYoMiZjKXtjb25zdCBhPWhhKDMpLGQ9UmUo'@;
put 'KTtmZSgyKSxwaSgibmdNb2RlbCIsZC5ncm91cFNlYXJjaCksZmUoMiksTWUoIm5nSWYiLGEudmFsdWUubGVuZ3RoPDEpLGZlKCksTWUoIm5nSWYiLGEudmFsdWUubGVuZ3RoPjApfX1mdW5jdGlvbiBmd3QoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJjbHItdHJlZS1ub2RlIiwx'@;
put 'NSksRnQoImNsaWNrIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9UmUoKS4kaW1wbGljaXQ7cmV0dXJuIEN0KFJlKCkuZ3JvdXBPbkNsaWNrKGgpKX0pLGRlKDEsInAiLDE2KSxHdCgyLCJjbHItaWNvbiIsMTcpLExlKDMpLGhlKCkoKX1pZigyJmMpe2NvbnN0IGE9UmUoKS4kaW1wbGljaXQs'@;
put 'ZD1SZSgpO1RyKCJhY3RpdmUiLGEuR1JPVVBVUkk9PT1kLmdyb3VwVXJpKSxmZSgzKSxEcigiICIsYS5HUk9VUE5BTUUsIiAiKX19ZnVuY3Rpb24gcHd0KGMsbCl7aWYoMSZjJiYoc2koMCksZ3QoMSxmd3QsNCwzLCJjbHItdHJlZS1ub2RlIiwxNCksbGkoKSksMiZjKXtjb25zdCBhPWwuJGlt'@;
put 'cGxpY2l0O2ZlKCksTWUoIm5nSWYiLCFhLmhpZGRlbil9fWZ1bmN0aW9uIGd3dChjLGwpezEmYyYmKGRlKDAsImRpdiIsMTgpKDEsInNwYW4iLDE5KSxMZSgyLCIgTG9hZGluZy4uLiAiKSxoZSgpKCkpfWZ1bmN0aW9uIG13dChjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIsMjEpKDEsImRpdiIs'@;
put 'MjIpKDIsInRhYmxlIiwyNCkoMywidGJvZHkiKSg0LCJ0ciIpKDUsInRkIiwyNSkoNiwicCIsMjYpKDcsImIiKSxMZSg4KSxoZSgpKCkoKSgpLGRlKDksInRyIikoMTAsInRkIiwyNSkoMTEsImkiKSxMZSgxMiksaGUoKSgpKCkoKSgpKCkoKSksMiZjKXtjb25zdCBhPVJlKDIpO2ZlKDgpLHdy'@;
put 'KGEuZ3JvdXBOYW1lKSxmZSg0KSx3cihhLmdyb3VwRGVzY3x8Im5vIGRlc2NyaXB0aW9uIil9fWZ1bmN0aW9uIHZ3dChjLGwpezEmYyYmKGRlKDAsImg1IiksTGUoMSwiTm8gTWVtYmVycyBQcmVzZW50IiksaGUoKSl9ZnVuY3Rpb24gYnd0KGMsbCl7MSZjJiYoc2koMCksZGUoMSwidGQiLDMx'@;
put 'KSgyLCJiIiksTGUoMywiTkFNRSIpLGhlKCkoKSxkZSg0LCJ0ZCIsMzEpKDUsImIiKSxMZSg2LCJFTUFJTCIpLGhlKCkoKSxkZSg3LCJ0ZCIsMzEpKDgsImIiKSxMZSg5LCJDUkVBVEVEIiksaGUoKSgpLGRlKDEwLCJ0ZCIsMzIpKDExLCJiIiksTGUoMTIsIlVQREFURUQiKSxoZSgpKCksbGko'@;
put 'KSl9ZnVuY3Rpb24geXd0KGMsbCl7MSZjJiYoc2koMCksZGUoMSwidGQiLDMxKSgyLCJiIiksTGUoMywiSUQiKSxoZSgpKCksZGUoNCwidGQiLDMxKSg1LCJiIiksTGUoNiwiRElTUExBWSBOQU1FIiksaGUoKSgpLGRlKDcsInRkIiwzMSkoOCwiYiIpLExlKDksIlVTRVIgTkFNRSIpLGhlKCko'@;
put 'KSxsaSgpKX1mdW5jdGlvbiBfd3QoYyxsKXtpZigxJmMmJihzaSgwKSxkZSgxLCJ0ZCIsMzIpLExlKDIpLGhlKCksZGUoMywidGQiLDMyKSxMZSg0KSxoZSgpLGRlKDUsInRkIiwzMiksTGUoNiksaGUoKSxkZSg3LCJ0ZCIsMzIpLExlKDgpLGhlKCksbGkoKSksMiZjKXtjb25zdCBhPVJlKCku'@;
put 'JGltcGxpY2l0O2ZlKDIpLHdyKGEuTUVNQkVSTkFNRSksZmUoMiksd3IoYS5FTUFJTCksZmUoMiksd3IoYS5NRU1CRVJDUkVBVEVEKSxmZSgyKSx3cihhLk1FTUJFUlVQREFURUQpfX1mdW5jdGlvbiB3d3QoYyxsKXtpZigxJmMmJihzaSgwKSxkZSgxLCJ0ZCIsMzIpLExlKDIpLGhlKCksZGUo'@;
put 'MywidGQiLDMyKSxMZSg0KSxoZSgpLGRlKDUsInRkIiwzMiksTGUoNiksaGUoKSxsaSgpKSwyJmMpe2NvbnN0IGE9UmUoKS4kaW1wbGljaXQ7ZmUoMiksd3IoYS5JRCksZmUoMiksd3IoYS5ESVNQTEFZTkFNRSksZmUoMiksd3IoYS5VU0VSTkFNRSl9fWZ1bmN0aW9uIEN3dChjLGwpe2lmKDEm'@;
put 'YyYmKGRlKDAsInRyIiwzMyksZ3QoMSxfd3QsOSw0LCJuZy1jb250YWluZXIiLDYpKDIsd3d0LDcsMywibmctY29udGFpbmVyIiw2KSxoZSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQsZD1SZSg0KTtNZSgicm91dGVyTGluayIsIi92aWV3L3VzZXJuYXYvdXNlcnMvIisoYS5VUklNRU18'@;
put 'fGEuSUQpKSxmZSgpLE1lKCJuZ0lmIixkLnNlcnZlclR5cGU9PT1kLlNlcnZlclR5cGUuU2FzOSksZmUoKSxNZSgibmdJZiIsZC5zZXJ2ZXJUeXBlPT09ZC5TZXJ2ZXJUeXBlLlNhc2pzKX19ZnVuY3Rpb24gU3d0KGMsbCl7aWYoMSZjJiYoZGUoMCwidGFibGUiLDI5KSgxLCJ0aGVhZCIpKDIs'@;
put 'InRyIiksZ3QoMyxid3QsMTMsMCwibmctY29udGFpbmVyIiw2KSg0LHl3dCwxMCwwLCJuZy1jb250YWluZXIiLDYpLGhlKCkoKSxkZSg1LCJ0Ym9keSIpLGd0KDYsQ3d0LDMsMywidHIiLDMwKSxoZSgpKCkpLDImYyl7Y29uc3QgYT1SZSgzKTtmZSgzKSxNZSgibmdJZiIsYS5zZXJ2ZXJUeXBl'@;
put 'PT09YS5TZXJ2ZXJUeXBlLlNhczkpLGZlKCksTWUoIm5nSWYiLGEuc2VydmVyVHlwZT09PWEuU2VydmVyVHlwZS5TYXNqcyksZmUoMiksTWUoIm5nRm9yT2YiLGEuZ3JvdXBNZW1iZXJzKX19ZnVuY3Rpb24gTXd0KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2IikoMSwiaDMiKSxMZSgyKSxoZSgp'@;
put 'LGd0KDMsdnd0LDIsMCwiaDUiLDYpLGRlKDQsImRpdiIsMjcpLGd0KDUsU3d0LDcsMywidGFibGUiLDI4KSxoZSgpKCkpLDImYyl7Y29uc3QgYT1SZSgyKTtmZSgyKSxEcigiTUVNQkVSUyAoIixhLmdyb3VwTWVtYmVyQ291bnQsIikiKSxmZSgpLE1lKCJuZ0lmIiwwPT1hLmdyb3VwTWVtYmVy'@;
put 'Q291bnQpLGZlKDIpLE1lKCJuZ0lmIiwwIT1hLmdyb3VwTWVtYmVyQ291bnQpfX1mdW5jdGlvbiB4d3QoYyxsKXsxJmMmJihkZSgwLCJoNSIpLExlKDEsIk5vIE1lbWJlcnMgUHJlc2VudCIpLGhlKCkpfWZ1bmN0aW9uIEV3dChjLGwpe2lmKDEmYyYmKGRlKDAsInRyIiwzMykoMSwidGQiLDMy'@;
put 'KSxMZSgyKSxoZSgpKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtNZSgicm91dGVyTGluayIsIi92aWV3L3VzZXJuYXYvdXNlcnMvIithLk1FTUJFUklEKSxmZSgyKSx3cihhLk1FTUJFUk5BTUUpfX1mdW5jdGlvbiBUd3QoYyxsKXtpZigxJmMmJihkZSgwLCJ0YWJsZSIsMjkpKDEsInRo'@;
put 'ZWFkIikoMiwidHIiKSgzLCJ0ZCIpKDQsImIiKSxMZSg1KSxoZSgpKCkoKSgpLGRlKDYsInRib2R5IiksZ3QoNyxFd3QsMywyLCJ0ciIsMzApLGhlKCkoKSksMiZjKXtjb25zdCBhPVJlKDMpO2ZlKDUpLERyKCJNRU1CRVJTICgiLGEuZ3JvdXBNZW1iZXJDb3VudCwiKSIpLGZlKDIpLE1lKCJu'@;
put 'Z0Zvck9mIixhLmdyb3VwTWVtYmVycyl9fWZ1bmN0aW9uIEF3dChjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIpKDEsImgzIiksTGUoMiksaGUoKSxndCgzLHh3dCwyLDAsImg1Iiw2KSxkZSg0LCJkaXYiLDI3KSxndCg1LFR3dCw4LDIsInRhYmxlIiwyOCksaGUoKSgpKSwyJmMpe2NvbnN0IGE9'@;
put 'UmUoMik7ZmUoMiksd3IoYS5ncm91cE5hbWUpLGZlKCksTWUoIm5nSWYiLDA9PWEuZ3JvdXBNZW1iZXJDb3VudCksZmUoMiksTWUoIm5nSWYiLDAhPWEuZ3JvdXBNZW1iZXJDb3VudCl9fWZ1bmN0aW9uIGt3dChjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIpLGd0KDEsbXd0LDEzLDIsImRpdiIs'@;
put 'MjApLGRlKDIsImRpdiIsMjEpKDMsImRpdiIsMjIpKDQsImRpdiIsMjMpLGd0KDUsTXd0LDYsMywiZGl2Iiw2KSg2LEF3dCw2LDMsImRpdiIsNiksR3QoNywiYnIiKSxoZSgpKCkoKSgpKSwyJmMpe2NvbnN0IGE9UmUoKTtmZSgpLE1lKCJuZ0lmIixhLnNlcnZlclR5cGUhPT1hLlNlcnZlclR5'@;
put 'cGUuU2FzVml5YSksZmUoNCksTWUoIm5nSWYiLGEuc2VydmVyVHlwZSE9PWEuU2VydmVyVHlwZS5TYXNWaXlhKSxmZSgpLE1lKCJuZ0lmIixhLnNlcnZlclR5cGU9PT1hLlNlcnZlclR5cGUuU2FzVml5YSl9fWxldCB0OGU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmLHYpe3Ro'@;
put 'aXMuc2FzU2VydmljZT1hLHRoaXMuaGVscGVyU2VydmljZT1kLHRoaXMucm91dGVyPWgsdGhpcy5sb2NhdGlvbj1mLHRoaXMucm91dGU9dix0aGlzLmdyb3VwU2VhcmNoPSIiLHRoaXMucGFyYW1QcmVzZW50PSExLHRoaXMucGFyYW1VUkk9IiIsdGhpcy5ncm91cFVyaT0iIix0aGlzLmdyb3Vw'@;
put 'TmFtZT0iIix0aGlzLmdyb3VwRGVzYz0iIix0aGlzLnNhc2pzQ29uZmlnPW5ldyBtaC5TQVNqc0NvbmZpZyx0aGlzLmlzVml5YT0hMSx0aGlzLmxvYWRpbmc9ITEsdGhpcy5TZXJ2ZXJUeXBlPUIwLlksdGhpcy5zYXNqc0NvbmZpZz10aGlzLnNhc1NlcnZpY2UuZ2V0U2FzanNDb25maWcoKSx0'@;
put 'aGlzLnNlcnZlclR5cGU9dGhpcy5zYXNTZXJ2aWNlLmdldFNlcnZlclR5cGUoKSwiU0FTVklZQSI9PT10aGlzLnNhc2pzQ29uZmlnLnNlcnZlclR5cGUmJih0aGlzLmlzVml5YT0hMCl9bmdPbkluaXQoKXtLbi52aWV3ZXIuY3VycmVudFNlbGVjdGlvbj0idmlldy91c2VybmF2L2dyb3VwcyIs'@;
put 'dm9pZCAwIT09dGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbXMudXJpJiYodGhpcy5wYXJhbVByZXNlbnQ9ITAsdGhpcy5wYXJhbVVSST10aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtcy51cmkpLEtuLnVzZXJuYXYuZ3JvdXBMaXN0JiYhdGhpcy5wYXJhbVByZXNlbnQ/KHRoaXMuZ3JvdXBzPUtu'@;
put 'LnVzZXJuYXYuZ3JvdXBMaXN0LHRoaXMuZ3JvdXBTZWFyY2g9S24udXNlcm5hdi5ncm91cFNlYXJjaCk6KHZvaWQgMD09PUtuLnVzZXJuYXYuZ3JvdXBMaXN0Pyh0aGlzLmxvYWRpbmc9ITAsdGhpcy5pc1ZpeWE/ZmV0Y2godGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJVcmwrIi9pZGVudGl0aWVz'@;
put 'L2dyb3Vwcz9saW1pdD0yMDAwIix7aGVhZGVyczp7QWNjZXB0OiJhcHBsaWNhdGlvbi9qc29uIn19KS50aGVuKGE9PmEudGV4dCgpKS50aGVuKGE9PntsZXQgaD1KU09OLnBhcnNlKGEpLml0ZW1zLm1hcChmPT4oe0dST1VQVVJJOmYuaWQsR1JPVVBOQU1FOmYubmFtZSxHUk9VUERFU0M6Zi5k'@;
put 'ZXNjcmlwdGlvbn0pKTt0aGlzLmxvYWRpbmc9ITEsdGhpcy5ncm91cHM9aCxLbi51c2VybmF2Lmdyb3VwTGlzdD1ofSk6dGhpcy5zYXNTZXJ2aWNlLnJlcXVlc3QoInB1YmxpYy9nZXRncm91cHMiLG51bGwpLnRoZW4oYT0+e3RoaXMubG9hZGluZz0hMSx0aGlzLmdyb3Vwcz1hLmFkYXB0ZXJS'@;
put 'ZXNwb25zZS5ncm91cHMsS24udXNlcm5hdi5ncm91cExpc3Q9YS5hZGFwdGVyUmVzcG9uc2UuZ3JvdXBzfSkpOih0aGlzLmdyb3Vwcz1Lbi51c2VybmF2Lmdyb3VwTGlzdCx0aGlzLmdyb3VwU2VhcmNoPUtuLnVzZXJuYXYuZ3JvdXBTZWFyY2gpLHRoaXMucGFyYW1QcmVzZW50JiYodGhpcy5s'@;
put 'b2FkaW5nPSEwLHRoaXMuaXNWaXlhP2ZldGNoKHRoaXMuc2FzanNDb25maWcuc2VydmVyVXJsKyIvaWRlbnRpdGllcy9ncm91cHMvIit0aGlzLnBhcmFtVVJJKyIvbWVtYmVycz9saW1pdD0yMDAwIix7aGVhZGVyczp7QWNjZXB0OiJhcHBsaWNhdGlvbi9qc29uIn19KS50aGVuKGE9PmEudGV4'@;
put 'dCgpKS50aGVuKGE9PntsZXQgZD1KU09OLnBhcnNlKGEpO3RoaXMubG9hZGluZz0hMTtsZXQgaD1kLml0ZW1zLm1hcChmPT4oe01FTUJFUk5BTUU6Zi5uYW1lLE1FTUJFUklEOmYuaWR9KSk7dGhpcy5ncm91cE1lbWJlcnM9aCx0aGlzLmdyb3VwTWVtYmVyQ291bnQ9aC5sZW5ndGgsdGhpcy5n'@;
put 'cm91cFVyaT10aGlzLnBhcmFtVVJJLHRoaXMuZ3JvdXBOYW1lPXRoaXMucGFyYW1VUkl9KTp0aGlzLnNhc1NlcnZpY2UucmVxdWVzdCgidXNlcm5hdi91c2VybWVtYmVyc2J5Z3JvdXAiLHtpd2FudDpbe2dyb3VwaWQ6dGhpcy5wYXJhbVVSSX1dfSkudGhlbihkPT57dGhpcy5ncm91cE1lbWJl'@;
put 'cnM9ZC5hZGFwdGVyUmVzcG9uc2Uuc2FzbWVtYmVycyx0aGlzLmdyb3VwTWVtYmVyQ291bnQ9ZC5hZGFwdGVyUmVzcG9uc2Uuc2FzbWVtYmVycy5sZW5ndGgsdm9pZCAwIT09ZC5hZGFwdGVyUmVzcG9uc2Uuc2FzbWVtYmVyc1swXSYmKHRoaXMubG9hZGluZz0hMSx0aGlzLmdyb3VwVXJpPWQu'@;
put 'YWRhcHRlclJlc3BvbnNlLnNhc21lbWJlcnNbMF0uVVJJTUVNfHx0aGlzLnBhcmFtVVJJLHRoaXMuZ3JvdXBOYW1lPWQuYWRhcHRlclJlc3BvbnNlLnNhc21lbWJlcnNbMF0uR1JPVVBOQU1FLHRoaXMuZ3JvdXBEZXNjPWQuYWRhcHRlclJlc3BvbnNlLnNhc21lbWJlcnNbMF0uR1JPVVBERVND'@;
put 'LHRoaXMuZ3JvdXBOYW1lfHwodGhpcy5ncm91cE5hbWU9dGhpcy5wYXJhbVVSSSkpfSkpKX1ncm91cExpc3RPbkZpbHRlcigpe3RoaXMuaGVscGVyU2VydmljZS5saWJyYXJ5T25GaWx0ZXIodGhpcy5ncm91cHMsdGhpcy5ncm91cFNlYXJjaCwiR1JPVVBOQU1FIiksS24udXNlcm5hdi5ncm91'@;
put 'cFNlYXJjaD10aGlzLmdyb3VwU2VhcmNofWdyb3VwT25DbGljayhhKXt0aGlzLmxvYWRpbmc9ITA7bGV0IGQ9dGhpcy5yb3V0ZXIudXJsO3RoaXMubG9jYXRpb24ucmVwbGFjZVN0YXRlKHRoaXMucGFyYW1QcmVzZW50P2Quc2xpY2UoMCxkLmxhc3RJbmRleE9mKCIvIikpKyIvIitlbmNvZGVV'@;
put 'UkkoYS5HUk9VUFVSSSk6ZCsiLyIrZW5jb2RlVVJJKGEuR1JPVVBVUkkpKSx0aGlzLmlzVml5YT9mZXRjaCh0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclVybCsiL2lkZW50aXRpZXMvZ3JvdXBzLyIrYS5HUk9VUFVSSSsiL21lbWJlcnM/bGltaXQ9MjAwMCIse2hlYWRlcnM6e0FjY2VwdDoiYXBw'@;
put 'bGljYXRpb24vanNvbiJ9fSkudGhlbihoPT5oLnRleHQoKSkudGhlbihoPT57bGV0IGY9SlNPTi5wYXJzZShoKTt0aGlzLmxvYWRpbmc9ITEsdGhpcy5ncm91cFVyaT1hLkdST1VQVVJJLHRoaXMuZ3JvdXBOYW1lPWEuR1JPVVBOQU1FLHRoaXMuZ3JvdXBEZXNjPWEuR1JPVVBERVNDO2xldCB2'@;
put 'PWYuaXRlbXMubWFwKE09Pih7TUVNQkVSTkFNRTpNLm5hbWUsTUVNQkVSSUQ6TS5pZH0pKTt0aGlzLmdyb3VwTWVtYmVycz12LHRoaXMuZ3JvdXBNZW1iZXJDb3VudD12Lmxlbmd0aH0pOnRoaXMuc2FzU2VydmljZS5yZXF1ZXN0KCJ1c2VybmF2L3VzZXJtZW1iZXJzYnlncm91cCIse2l3YW50'@;
put 'Olt7Z3JvdXBpZDphLkdST1VQVVJJfV19KS50aGVuKGY9Pnt0aGlzLmxvYWRpbmc9ITEsdGhpcy5ncm91cFVyaT1hLkdST1VQVVJJLHRoaXMuZ3JvdXBOYW1lPWEuR1JPVVBOQU1FLHRoaXMuZ3JvdXBEZXNjPWEuR1JPVVBERVNDLHRoaXMuZ3JvdXBNZW1iZXJzPWYuYWRhcHRlclJlc3BvbnNl'@;
put 'LnNhc21lbWJlcnMsdGhpcy5ncm91cE1lbWJlckNvdW50PWYuYWRhcHRlclJlc3BvbnNlLnNhc21lbWJlcnMubGVuZ3RofSl9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoR2UoQnMpLEdlKFN1KSxHZShMcyksR2UoZmgpLEdlKEN1KSl9fXN0YXRp'@;
put 'Y3t0aGlzLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAtZ3JvdXAiXV0saG9zdEF0dHJzOlsxLCJjb250ZW50LWNvbnRhaW5lciJdLGRlY2xzOjcsdmFyczo0LGNvbnN0czpbWyJzZWFyY2hMaWJUcmVlSW5wdXQiLCIiXSxbMSwic2lkZWJhci1oZWlnaHQiXSxbImNsYXNz'@;
put 'Iiwic2VhcmNoLW5vZGUiLDQsIm5nSWYiXSxbNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzEsImNvbnRlbnQtYXJlYSJdLFsiY2xhc3MiLCJsb2FkaW5nU3Bpbm5lciIsNCwibmdJZiJdLFs0LCJuZ0lmIl0sWzEsInNlYXJjaC1ub2RlIl0sWzEsInRyZWUtc2VhcmNoLXdyYXBwZXIiXSxbImFwcFN0'@;
put 'ZWFsRm9jdXMiLCIiLCJjbHJJbnB1dCIsIiIsInBsYWNlaG9sZGVyIiwiRmlsdGVyIGJ5IEdyb3VwcyIsIm5hbWUiLCJpbnB1dCIsImF1dG9jb21wbGV0ZSIsIm9mZiIsMywibmdNb2RlbENoYW5nZSIsImtleXVwIiwibmdNb2RlbCJdLFsic2hhcGUiLCJzZWFyY2giLDQsIm5nSWYiXSxbInNo'@;
put 'YXBlIiwidGltZXMiLDMsImNsaWNrIiw0LCJuZ0lmIl0sWyJzaGFwZSIsInNlYXJjaCJdLFsic2hhcGUiLCJ0aW1lcyIsMywiY2xpY2siXSxbMywiYWN0aXZlIiwiY2xpY2siLDQsIm5nSWYiXSxbMywiY2xpY2siXSxbMSwibS0wIiwiY3Vyc29yLXBvaW50ZXIiLCJsaXN0LXBhZGRpbmciXSxb'@;
put 'InNoYXBlIiwidXNlcnMiXSxbMSwibG9hZGluZ1NwaW5uZXIiXSxbMSwic3Bpbm5lciJdLFsiY2xhc3MiLCJjbHItcm93Iiw0LCJuZ0lmIl0sWzEsImNsci1yb3ciXSxbMSwiY2xyLWNvbC04Il0sWzEsImNhcmQiLCJncm91cC1kYXRhIl0sWzEsInRhYmxlIiwiZ3JvdXAtaW5mbyJdLFsxLCJs'@;
put 'ZWZ0Il0sWzEsImdyb3VwLWluZm8tdGV4dCJdLFsxLCJ0YWJsZS1jb250YWluZXIiXSxbImNsYXNzIiwidGFibGUgbWVtYmVyLXRhYmxlIiw0LCJuZ0lmIl0sWzEsInRhYmxlIiwibWVtYmVyLXRhYmxlIl0sWzMsInJvdXRlckxpbmsiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsxLCJ3aWR0aC0y'@;
put 'NSJdLFsxLCIiXSxbMywicm91dGVyTGluayJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihkLGgpezEmZCYmKGRlKDAsImFwcC1zaWRlYmFyIiwxKSgxLCJjbHItdHJlZSIpLGd0KDIsaHd0LDYsMywiY2xyLXRyZWUtbm9kZSIsMikoMyxwd3QsMiwxLCJuZy1jb250YWluZXIiLDMpLGhlKCkoKSxkZSg0'@;
put 'LCJkaXYiLDQpLGd0KDUsZ3d0LDMsMCwiZGl2Iiw1KSg2LGt3dCw4LDMsImRpdiIsNiksaGUoKSksMiZkJiYoZmUoMiksTWUoIm5nSWYiLGguZ3JvdXBzKSxmZSgpLE1lKCJuZ0Zvck9mIixoLmdyb3VwcyksZmUoMiksTWUoIm5nSWYiLGgubG9hZGluZyksZmUoKSxNZSgibmdJZiIsaC5ncm91'@;
put 'cE1lbWJlcnMmJiFoLmxvYWRpbmcpKX0sZGVwZW5kZW5jaWVzOltucyxiYSxjMSxxbCxubCwkcyxFaCxQZCxIbCxaMSxpNCxyNF0sZW5jYXBzdWxhdGlvbjoyfSl9fXJldHVybiBjfSkoKTtmdW5jdGlvbiBEd3QoKXt9ZnVuY3Rpb24gYXRlKGMpe3JldHVybiBudWxsPT1jP0R3dDpmdW5jdGlv'@;
put 'bigpe3JldHVybiB0aGlzLnF1ZXJ5U2VsZWN0b3IoYyl9fWZ1bmN0aW9uIG44ZShjKXtyZXR1cm4gbnVsbD09Yz9bXTpBcnJheS5pc0FycmF5KGMpP2M6QXJyYXkuZnJvbShjKX1mdW5jdGlvbiBSd3QoKXtyZXR1cm5bXX1mdW5jdGlvbiByOGUoYyl7cmV0dXJuIG51bGw9PWM/Und0OmZ1bmN0'@;
put 'aW9uKCl7cmV0dXJuIHRoaXMucXVlcnlTZWxlY3RvckFsbChjKX19ZnVuY3Rpb24gaThlKGMpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0aGlzLm1hdGNoZXMoYyl9fWZ1bmN0aW9uIGE4ZShjKXtyZXR1cm4gZnVuY3Rpb24obCl7cmV0dXJuIGwubWF0Y2hlcyhjKX19dmFyIFB3dD1BcnJh'@;
put 'eS5wcm90b3R5cGUuZmluZDtmdW5jdGlvbiBId3QoKXtyZXR1cm4gdGhpcy5maXJzdEVsZW1lbnRDaGlsZH12YXIgVnd0PUFycmF5LnByb3RvdHlwZS5maWx0ZXI7ZnVuY3Rpb24gQnd0KCl7cmV0dXJuIEFycmF5LmZyb20odGhpcy5jaGlsZHJlbil9ZnVuY3Rpb24gbzhlKGMpe3JldHVybiBu'@;
put 'ZXcgQXJyYXkoYy5sZW5ndGgpfWZ1bmN0aW9uIGROKGMsbCl7dGhpcy5vd25lckRvY3VtZW50PWMub3duZXJEb2N1bWVudCx0aGlzLm5hbWVzcGFjZVVSST1jLm5hbWVzcGFjZVVSSSx0aGlzLl9uZXh0PW51bGwsdGhpcy5fcGFyZW50PWMsdGhpcy5fX2RhdGFfXz1sfWZ1bmN0aW9uIFl3dChj'@;
put 'LGwsYSxkLGgsZil7Zm9yKHZhciBNLHY9MCxEPWwubGVuZ3RoLFo9Zi5sZW5ndGg7djxaOysrdikoTT1sW3ZdKT8oTS5fX2RhdGFfXz1mW3ZdLGRbdl09TSk6YVt2XT1uZXcgZE4oYyxmW3ZdKTtmb3IoO3Y8RDsrK3YpKE09bFt2XSkmJihoW3ZdPU0pfWZ1bmN0aW9uIEd3dChjLGwsYSxkLGgs'@;
put 'Zix2KXt2YXIgTSxELEVlLFo9bmV3IE1hcCxyZT1sLmxlbmd0aCxjZT1mLmxlbmd0aCxiZT1uZXcgQXJyYXkocmUpO2ZvcihNPTA7TTxyZTsrK00pKEQ9bFtNXSkmJihiZVtNXT1FZT12LmNhbGwoRCxELl9fZGF0YV9fLE0sbCkrIiIsWi5oYXMoRWUpP2hbTV09RDpaLnNldChFZSxEKSk7Zm9y'@;
put 'KE09MDtNPGNlOysrTSlFZT12LmNhbGwoYyxmW01dLE0sZikrIiIsKEQ9Wi5nZXQoRWUpKT8oZFtNXT1ELEQuX19kYXRhX189ZltNXSxaLmRlbGV0ZShFZSkpOmFbTV09bmV3IGROKGMsZltNXSk7Zm9yKE09MDtNPHJlOysrTSkoRD1sW01dKSYmWi5nZXQoYmVbTV0pPT09RCYmKGhbTV09RCl9'@;
put 'ZnVuY3Rpb24gJHd0KGMpe3JldHVybiBjLl9fZGF0YV9ffWZ1bmN0aW9uIHF3dChjKXtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIGMmJiJsZW5ndGgiaW4gYz9jOkFycmF5LmZyb20oYyl9ZnVuY3Rpb24gbkN0KGMsbCl7cmV0dXJuIGM8bD8tMTpjPmw/MTpjPj1sPzA6TmFOfWROLnByb3RvdHlw'@;
put 'ZT17Y29uc3RydWN0b3I6ZE4sYXBwZW5kQ2hpbGQ6ZnVuY3Rpb24oYyl7cmV0dXJuIHRoaXMuX3BhcmVudC5pbnNlcnRCZWZvcmUoYyx0aGlzLl9uZXh0KX0saW5zZXJ0QmVmb3JlOmZ1bmN0aW9uKGMsbCl7cmV0dXJuIHRoaXMuX3BhcmVudC5pbnNlcnRCZWZvcmUoYyxsKX0scXVlcnlTZWxl'@;
put 'Y3RvcjpmdW5jdGlvbihjKXtyZXR1cm4gdGhpcy5fcGFyZW50LnF1ZXJ5U2VsZWN0b3IoYyl9LHF1ZXJ5U2VsZWN0b3JBbGw6ZnVuY3Rpb24oYyl7cmV0dXJuIHRoaXMuX3BhcmVudC5xdWVyeVNlbGVjdG9yQWxsKGMpfX07dmFyIG90ZT0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCI7'@;
put 'Y29uc3QgczhlPXtzdmc6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIix4aHRtbDpvdGUseGxpbms6Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiLHhtbDoiaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIix4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC94'@;
put 'bWxucy8ifTtmdW5jdGlvbiBoTihjKXt2YXIgbD1jKz0iIixhPWwuaW5kZXhPZigiOiIpO3JldHVybiBhPj0wJiYieG1sbnMiIT09KGw9Yy5zbGljZSgwLGEpKSYmKGM9Yy5zbGljZShhKzEpKSxzOGUuaGFzT3duUHJvcGVydHkobCk/e3NwYWNlOnM4ZVtsXSxsb2NhbDpjfTpjfWZ1bmN0aW9u'@;
put 'IGNDdChjKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnJlbW92ZUF0dHJpYnV0ZShjKX19ZnVuY3Rpb24gdUN0KGMpe3JldHVybiBmdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlTlMoYy5zcGFjZSxjLmxvY2FsKX19ZnVuY3Rpb24gZEN0KGMsbCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhp'@;
put 'cy5zZXRBdHRyaWJ1dGUoYyxsKX19ZnVuY3Rpb24gaEN0KGMsbCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zZXRBdHRyaWJ1dGVOUyhjLnNwYWNlLGMubG9jYWwsbCl9fWZ1bmN0aW9uIGZDdChjLGwpe3JldHVybiBmdW5jdGlvbigpe3ZhciBhPWwuYXBwbHkodGhpcyxhcmd1bWVudHMpO251'@;
put 'bGw9PWE/dGhpcy5yZW1vdmVBdHRyaWJ1dGUoYyk6dGhpcy5zZXRBdHRyaWJ1dGUoYyxhKX19ZnVuY3Rpb24gcEN0KGMsbCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGE9bC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7bnVsbD09YT90aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKGMuc3BhY2UsYy5sb2Nh'@;
put 'bCk6dGhpcy5zZXRBdHRyaWJ1dGVOUyhjLnNwYWNlLGMubG9jYWwsYSl9fWZ1bmN0aW9uIGw4ZShjKXtyZXR1cm4gYy5vd25lckRvY3VtZW50JiZjLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXd8fGMuZG9jdW1lbnQmJmN8fGMuZGVmYXVsdFZpZXd9ZnVuY3Rpb24gbUN0KGMpe3JldHVybiBm'@;
put 'dW5jdGlvbigpe3RoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkoYyl9fWZ1bmN0aW9uIHZDdChjLGwsYSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zdHlsZS5zZXRQcm9wZXJ0eShjLGwsYSl9fWZ1bmN0aW9uIGJDdChjLGwsYSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGQ9bC5hcHBseSh0aGlz'@;
put 'LGFyZ3VtZW50cyk7bnVsbD09ZD90aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KGMpOnRoaXMuc3R5bGUuc2V0UHJvcGVydHkoYyxkLGEpfX1mdW5jdGlvbiBFdyhjLGwpe3JldHVybiBjLnN0eWxlLmdldFByb3BlcnR5VmFsdWUobCl8fGw4ZShjKS5nZXRDb21wdXRlZFN0eWxlKGMsbnVsbCku'@;
put 'Z2V0UHJvcGVydHlWYWx1ZShsKX1mdW5jdGlvbiBfQ3QoYyl7cmV0dXJuIGZ1bmN0aW9uKCl7ZGVsZXRlIHRoaXNbY119fWZ1bmN0aW9uIHdDdChjLGwpe3JldHVybiBmdW5jdGlvbigpe3RoaXNbY109bH19ZnVuY3Rpb24gQ0N0KGMsbCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGE9bC5hcHBs'@;
put 'eSh0aGlzLGFyZ3VtZW50cyk7bnVsbD09YT9kZWxldGUgdGhpc1tjXTp0aGlzW2NdPWF9fWZ1bmN0aW9uIGM4ZShjKXtyZXR1cm4gYy50cmltKCkuc3BsaXQoL158XHMrLyl9ZnVuY3Rpb24gc3RlKGMpe3JldHVybiBjLmNsYXNzTGlzdHx8bmV3IHU4ZShjKX1mdW5jdGlvbiB1OGUoYyl7dGhp'@;
put 'cy5fbm9kZT1jLHRoaXMuX25hbWVzPWM4ZShjLmdldEF0dHJpYnV0ZSgiY2xhc3MiKXx8IiIpfWZ1bmN0aW9uIGQ4ZShjLGwpe2Zvcih2YXIgYT1zdGUoYyksZD0tMSxoPWwubGVuZ3RoOysrZDxoOylhLmFkZChsW2RdKX1mdW5jdGlvbiBoOGUoYyxsKXtmb3IodmFyIGE9c3RlKGMpLGQ9LTEs'@;
put 'aD1sLmxlbmd0aDsrK2Q8aDspYS5yZW1vdmUobFtkXSl9ZnVuY3Rpb24gTUN0KGMpe3JldHVybiBmdW5jdGlvbigpe2Q4ZSh0aGlzLGMpfX1mdW5jdGlvbiB4Q3QoYyl7cmV0dXJuIGZ1bmN0aW9uKCl7aDhlKHRoaXMsYyl9fWZ1bmN0aW9uIEVDdChjLGwpe3JldHVybiBmdW5jdGlvbigpeyhs'@;
put 'LmFwcGx5KHRoaXMsYXJndW1lbnRzKT9kOGU6aDhlKSh0aGlzLGMpfX1mdW5jdGlvbiBBQ3QoKXt0aGlzLnRleHRDb250ZW50PSIifWZ1bmN0aW9uIGtDdChjKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnRleHRDb250ZW50PWN9fWZ1bmN0aW9uIERDdChjKXtyZXR1cm4gZnVuY3Rpb24oKXt2'@;
put 'YXIgbD1jLmFwcGx5KHRoaXMsYXJndW1lbnRzKTt0aGlzLnRleHRDb250ZW50PWw/PyIifX1mdW5jdGlvbiBSQ3QoKXt0aGlzLmlubmVySFRNTD0iIn1mdW5jdGlvbiBMQ3QoYyl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5pbm5lckhUTUw9Y319ZnVuY3Rpb24gT0N0KGMpe3JldHVybiBmdW5j'@;
put 'dGlvbigpe3ZhciBsPWMuYXBwbHkodGhpcyxhcmd1bWVudHMpO3RoaXMuaW5uZXJIVE1MPWw/PyIifX1mdW5jdGlvbiBGQ3QoKXt0aGlzLm5leHRTaWJsaW5nJiZ0aGlzLnBhcmVudE5vZGUuYXBwZW5kQ2hpbGQodGhpcyl9ZnVuY3Rpb24gTkN0KCl7dGhpcy5wcmV2aW91c1NpYmxpbmcmJnRo'@;
put 'aXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodGhpcyx0aGlzLnBhcmVudE5vZGUuZmlyc3RDaGlsZCl9ZnVuY3Rpb24gQkN0KGMpe3JldHVybiBmdW5jdGlvbigpe3ZhciBsPXRoaXMub3duZXJEb2N1bWVudCxhPXRoaXMubmFtZXNwYWNlVVJJO3JldHVybiBhPT09b3RlJiZsLmRvY3VtZW50'@;
put 'RWxlbWVudC5uYW1lc3BhY2VVUkk9PT1vdGU/bC5jcmVhdGVFbGVtZW50KGMpOmwuY3JlYXRlRWxlbWVudE5TKGEsYyl9fWZ1bmN0aW9uIGpDdChjKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhjLnNwYWNlLGMubG9jYWwpfX1m'@;
put 'dW5jdGlvbiBmOGUoYyl7dmFyIGw9aE4oYyk7cmV0dXJuKGwubG9jYWw/akN0OkJDdCkobCl9ZnVuY3Rpb24gVUN0KCl7cmV0dXJuIG51bGx9ZnVuY3Rpb24gV0N0KCl7dmFyIGM9dGhpcy5wYXJlbnROb2RlO2MmJmMucmVtb3ZlQ2hpbGQodGhpcyl9ZnVuY3Rpb24gR0N0KCl7dmFyIGM9dGhp'@;
put 'cy5jbG9uZU5vZGUoITEpLGw9dGhpcy5wYXJlbnROb2RlO3JldHVybiBsP2wuaW5zZXJ0QmVmb3JlKGMsdGhpcy5uZXh0U2libGluZyk6Y31mdW5jdGlvbiAkQ3QoKXt2YXIgYz10aGlzLmNsb25lTm9kZSghMCksbD10aGlzLnBhcmVudE5vZGU7cmV0dXJuIGw/bC5pbnNlcnRCZWZvcmUoYyx0'@;
put 'aGlzLm5leHRTaWJsaW5nKTpjfWZ1bmN0aW9uIFFDdChjKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbD10aGlzLl9fb247aWYobCl7Zm9yKHZhciBmLGE9MCxkPS0xLGg9bC5sZW5ndGg7YTxoOysrYSlmPWxbYV0sYy50eXBlJiZmLnR5cGUhPT1jLnR5cGV8fGYubmFtZSE9PWMubmFtZT9sWysr'@;
put 'ZF09Zjp0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoZi50eXBlLGYubGlzdGVuZXIsZi5vcHRpb25zKTsrK2Q/bC5sZW5ndGg9ZDpkZWxldGUgdGhpcy5fX29ufX19ZnVuY3Rpb24gZVN0KGMsbCxhKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgaCxkPXRoaXMuX19vbixmPWZ1bmN0aW9uIFhDdChj'@;
put 'KXtyZXR1cm4gZnVuY3Rpb24obCl7Yy5jYWxsKHRoaXMsbCx0aGlzLl9fZGF0YV9fKX19KGwpO2lmKGQpZm9yKHZhciB2PTAsTT1kLmxlbmd0aDt2PE07Kyt2KWlmKChoPWRbdl0pLnR5cGU9PT1jLnR5cGUmJmgubmFtZT09PWMubmFtZSlyZXR1cm4gdGhpcy5yZW1vdmVFdmVudExpc3RlbmVy'@;
put 'KGgudHlwZSxoLmxpc3RlbmVyLGgub3B0aW9ucyksdGhpcy5hZGRFdmVudExpc3RlbmVyKGgudHlwZSxoLmxpc3RlbmVyPWYsaC5vcHRpb25zPWEpLHZvaWQoaC52YWx1ZT1sKTt0aGlzLmFkZEV2ZW50TGlzdGVuZXIoYy50eXBlLGYsYSksaD17dHlwZTpjLnR5cGUsbmFtZTpjLm5hbWUsdmFs'@;
put 'dWU6bCxsaXN0ZW5lcjpmLG9wdGlvbnM6YX0sZD9kLnB1c2goaCk6dGhpcy5fX29uPVtoXX19ZnVuY3Rpb24gcDhlKGMsbCxhKXt2YXIgZD1sOGUoYyksaD1kLkN1c3RvbUV2ZW50OyJmdW5jdGlvbiI9PXR5cGVvZiBoP2g9bmV3IGgobCxhKTooaD1kLmRvY3VtZW50LmNyZWF0ZUV2ZW50KCJF'@;
put 'dmVudCIpLGE/KGguaW5pdEV2ZW50KGwsYS5idWJibGVzLGEuY2FuY2VsYWJsZSksaC5kZXRhaWw9YS5kZXRhaWwpOmguaW5pdEV2ZW50KGwsITEsITEpKSxjLmRpc3BhdGNoRXZlbnQoaCl9ZnVuY3Rpb24gblN0KGMsbCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHA4ZSh0aGlzLGMsbCl9'@;
put 'fWZ1bmN0aW9uIHJTdChjLGwpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBwOGUodGhpcyxjLGwuYXBwbHkodGhpcyxhcmd1bWVudHMpKX19dThlLnByb3RvdHlwZT17YWRkOmZ1bmN0aW9uKGMpe3RoaXMuX25hbWVzLmluZGV4T2YoYyk8MCYmKHRoaXMuX25hbWVzLnB1c2goYyksdGhpcy5f'@;
put 'bm9kZS5zZXRBdHRyaWJ1dGUoImNsYXNzIix0aGlzLl9uYW1lcy5qb2luKCIgIikpKX0scmVtb3ZlOmZ1bmN0aW9uKGMpe3ZhciBsPXRoaXMuX25hbWVzLmluZGV4T2YoYyk7bD49MCYmKHRoaXMuX25hbWVzLnNwbGljZShsLDEpLHRoaXMuX25vZGUuc2V0QXR0cmlidXRlKCJjbGFzcyIsdGhp'@;
put 'cy5fbmFtZXMuam9pbigiICIpKSl9LGNvbnRhaW5zOmZ1bmN0aW9uKGMpe3JldHVybiB0aGlzLl9uYW1lcy5pbmRleE9mKGMpPj0wfX07dmFyIGx0ZT1bbnVsbF07ZnVuY3Rpb24gaWQoYyxsKXt0aGlzLl9ncm91cHM9Yyx0aGlzLl9wYXJlbnRzPWx9ZnVuY3Rpb24gZzhlKCl7cmV0dXJuIG5l'@;
put 'dyBpZChbW2RvY3VtZW50LmRvY3VtZW50RWxlbWVudF1dLGx0ZSl9aWQucHJvdG90eXBlPWc4ZS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmlkLHNlbGVjdDpmdW5jdGlvbiBJd3QoYyl7ImZ1bmN0aW9uIiE9dHlwZW9mIGMmJihjPWF0ZShjKSk7Zm9yKHZhciBsPXRoaXMuX2dyb3VwcyxhPWwu'@;
put 'bGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7KytoKWZvcih2YXIgRCxaLGY9bFtoXSx2PWYubGVuZ3RoLE09ZFtoXT1uZXcgQXJyYXkodikscmU9MDtyZTx2OysrcmUpKEQ9ZltyZV0pJiYoWj1jLmNhbGwoRCxELl9fZGF0YV9fLHJlLGYpKSYmKCJfX2RhdGFfXyJpbiBEJiYoWi5fX2Rh'@;
put 'dGFfXz1ELl9fZGF0YV9fKSxNW3JlXT1aKTtyZXR1cm4gbmV3IGlkKGQsdGhpcy5fcGFyZW50cyl9LHNlbGVjdEFsbDpmdW5jdGlvbiBPd3QoYyl7Yz0iZnVuY3Rpb24iPT10eXBlb2YgYz9mdW5jdGlvbiBMd3QoYyl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIG44ZShjLmFwcGx5KHRoaXMs'@;
put 'YXJndW1lbnRzKSl9fShjKTpyOGUoYyk7Zm9yKHZhciBsPXRoaXMuX2dyb3VwcyxhPWwubGVuZ3RoLGQ9W10saD1bXSxmPTA7ZjxhOysrZilmb3IodmFyIEQsdj1sW2ZdLE09di5sZW5ndGgsWj0wO1o8TTsrK1opKEQ9dltaXSkmJihkLnB1c2goYy5jYWxsKEQsRC5fX2RhdGFfXyxaLHYpKSxo'@;
put 'LnB1c2goRCkpO3JldHVybiBuZXcgaWQoZCxoKX0sc2VsZWN0Q2hpbGQ6ZnVuY3Rpb24gTnd0KGMpe3JldHVybiB0aGlzLnNlbGVjdChudWxsPT1jP0h3dDpmdW5jdGlvbiBGd3QoYyl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIFB3dC5jYWxsKHRoaXMuY2hpbGRyZW4sYyl9fSgiZnVuY3Rp'@;
put 'b24iPT10eXBlb2YgYz9jOmE4ZShjKSkpfSxzZWxlY3RDaGlsZHJlbjpmdW5jdGlvbiB6d3QoYyl7cmV0dXJuIHRoaXMuc2VsZWN0QWxsKG51bGw9PWM/Qnd0OmZ1bmN0aW9uIGp3dChjKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gVnd0LmNhbGwodGhpcy5jaGlsZHJlbixjKX19KCJmdW5j'@;
put 'dGlvbiI9PXR5cGVvZiBjP2M6YThlKGMpKSl9LGZpbHRlcjpmdW5jdGlvbiBVd3QoYyl7ImZ1bmN0aW9uIiE9dHlwZW9mIGMmJihjPWk4ZShjKSk7Zm9yKHZhciBsPXRoaXMuX2dyb3VwcyxhPWwubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7KytoKWZvcih2YXIgRCxmPWxbaF0sdj1m'@;
put 'Lmxlbmd0aCxNPWRbaF09W10sWj0wO1o8djsrK1opKEQ9ZltaXSkmJmMuY2FsbChELEQuX19kYXRhX18sWixmKSYmTS5wdXNoKEQpO3JldHVybiBuZXcgaWQoZCx0aGlzLl9wYXJlbnRzKX0sZGF0YTpmdW5jdGlvbiBLd3QoYyxsKXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gQXJyYXku'@;
put 'ZnJvbSh0aGlzLCR3dCk7dmFyIGE9bD9Hd3Q6WXd0LGQ9dGhpcy5fcGFyZW50cyxoPXRoaXMuX2dyb3VwczsiZnVuY3Rpb24iIT10eXBlb2YgYyYmKGM9ZnVuY3Rpb24gV3d0KGMpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBjfX0oYykpO2Zvcih2YXIgZj1oLmxlbmd0aCx2PW5ldyBBcnJh'@;
put 'eShmKSxNPW5ldyBBcnJheShmKSxEPW5ldyBBcnJheShmKSxaPTA7WjxmOysrWil7dmFyIHJlPWRbWl0sY2U9aFtaXSxiZT1jZS5sZW5ndGgsRWU9cXd0KGMuY2FsbChyZSxyZSYmcmUuX19kYXRhX18sWixkKSksQmU9RWUubGVuZ3RoLHFlPU1bWl09bmV3IEFycmF5KEJlKSxydD12W1pdPW5l'@;
put 'dyBBcnJheShCZSk7YShyZSxjZSxxZSxydCxEW1pdPW5ldyBBcnJheShiZSksRWUsbCk7Zm9yKHZhciB2bixDbixkdD0wLEp0PTA7ZHQ8QmU7KytkdClpZih2bj1xZVtkdF0pe2ZvcihkdD49SnQmJihKdD1kdCsxKTshKENuPXJ0W0p0XSkmJisrSnQ8QmU7KTt2bi5fbmV4dD1Dbnx8bnVsbH19'@;
put 'cmV0dXJuKHY9bmV3IGlkKHYsZCkpLl9lbnRlcj1NLHYuX2V4aXQ9RCx2fSxlbnRlcjpmdW5jdGlvbiBad3QoKXtyZXR1cm4gbmV3IGlkKHRoaXMuX2VudGVyfHx0aGlzLl9ncm91cHMubWFwKG84ZSksdGhpcy5fcGFyZW50cyl9LGV4aXQ6ZnVuY3Rpb24gWHd0KCl7cmV0dXJuIG5ldyBpZCh0'@;
put 'aGlzLl9leGl0fHx0aGlzLl9ncm91cHMubWFwKG84ZSksdGhpcy5fcGFyZW50cyl9LGpvaW46ZnVuY3Rpb24gSnd0KGMsbCxhKXt2YXIgZD10aGlzLmVudGVyKCksaD10aGlzLGY9dGhpcy5leGl0KCk7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIGM/KGQ9YyhkKSkmJihkPWQuc2VsZWN0aW9u'@;
put 'KCkpOmQ9ZC5hcHBlbmQoYysiIiksbnVsbCE9bCYmKGg9bChoKSkmJihoPWguc2VsZWN0aW9uKCkpLG51bGw9PWE/Zi5yZW1vdmUoKTphKGYpLGQmJmg/ZC5tZXJnZShoKS5vcmRlcigpOmh9LG1lcmdlOmZ1bmN0aW9uIFF3dChjKXtmb3IodmFyIGw9Yy5zZWxlY3Rpb24/Yy5zZWxlY3Rpb24o'@;
put 'KTpjLGE9dGhpcy5fZ3JvdXBzLGQ9bC5fZ3JvdXBzLGg9YS5sZW5ndGgsdj1NYXRoLm1pbihoLGQubGVuZ3RoKSxNPW5ldyBBcnJheShoKSxEPTA7RDx2OysrRClmb3IodmFyIEVlLFo9YVtEXSxyZT1kW0RdLGNlPVoubGVuZ3RoLGJlPU1bRF09bmV3IEFycmF5KGNlKSxCZT0wO0JlPGNlOysr'@;
put 'QmUpKEVlPVpbQmVdfHxyZVtCZV0pJiYoYmVbQmVdPUVlKTtmb3IoO0Q8aDsrK0QpTVtEXT1hW0RdO3JldHVybiBuZXcgaWQoTSx0aGlzLl9wYXJlbnRzKX0sc2VsZWN0aW9uOmZ1bmN0aW9uIG9TdCgpe3JldHVybiB0aGlzfSxvcmRlcjpmdW5jdGlvbiBlQ3QoKXtmb3IodmFyIGM9dGhpcy5f'@;
put 'Z3JvdXBzLGw9LTEsYT1jLmxlbmd0aDsrK2w8YTspZm9yKHZhciB2LGQ9Y1tsXSxoPWQubGVuZ3RoLTEsZj1kW2hdOy0taD49MDspKHY9ZFtoXSkmJihmJiY0XnYuY29tcGFyZURvY3VtZW50UG9zaXRpb24oZikmJmYucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodixmKSxmPXYpO3JldHVybiB0'@;
put 'aGlzfSxzb3J0OmZ1bmN0aW9uIHRDdChjKXtmdW5jdGlvbiBsKGNlLGJlKXtyZXR1cm4gY2UmJmJlP2MoY2UuX19kYXRhX18sYmUuX19kYXRhX18pOiFjZS0hYmV9Y3x8KGM9bkN0KTtmb3IodmFyIGE9dGhpcy5fZ3JvdXBzLGQ9YS5sZW5ndGgsaD1uZXcgQXJyYXkoZCksZj0wO2Y8ZDsrK2Yp'@;
put 'e2Zvcih2YXIgWix2PWFbZl0sTT12Lmxlbmd0aCxEPWhbZl09bmV3IEFycmF5KE0pLHJlPTA7cmU8TTsrK3JlKShaPXZbcmVdKSYmKERbcmVdPVopO0Quc29ydChsKX1yZXR1cm4gbmV3IGlkKGgsdGhpcy5fcGFyZW50cykub3JkZXIoKX0sY2FsbDpmdW5jdGlvbiByQ3QoKXt2YXIgYz1hcmd1'@;
put 'bWVudHNbMF07cmV0dXJuIGFyZ3VtZW50c1swXT10aGlzLGMuYXBwbHkobnVsbCxhcmd1bWVudHMpLHRoaXN9LG5vZGVzOmZ1bmN0aW9uIGlDdCgpe3JldHVybiBBcnJheS5mcm9tKHRoaXMpfSxub2RlOmZ1bmN0aW9uIGFDdCgpe2Zvcih2YXIgYz10aGlzLl9ncm91cHMsbD0wLGE9Yy5sZW5n'@;
put 'dGg7bDxhOysrbClmb3IodmFyIGQ9Y1tsXSxoPTAsZj1kLmxlbmd0aDtoPGY7KytoKXt2YXIgdj1kW2hdO2lmKHYpcmV0dXJuIHZ9cmV0dXJuIG51bGx9LHNpemU6ZnVuY3Rpb24gb0N0KCl7bGV0IGM9MDtmb3IoY29uc3QgbCBvZiB0aGlzKSsrYztyZXR1cm4gY30sZW1wdHk6ZnVuY3Rpb24g'@;
put 'c0N0KCl7cmV0dXJuIXRoaXMubm9kZSgpfSxlYWNoOmZ1bmN0aW9uIGxDdChjKXtmb3IodmFyIGw9dGhpcy5fZ3JvdXBzLGE9MCxkPWwubGVuZ3RoO2E8ZDsrK2EpZm9yKHZhciBNLGg9bFthXSxmPTAsdj1oLmxlbmd0aDtmPHY7KytmKShNPWhbZl0pJiZjLmNhbGwoTSxNLl9fZGF0YV9fLGYs'@;
put 'aCk7cmV0dXJuIHRoaXN9LGF0dHI6ZnVuY3Rpb24gZ0N0KGMsbCl7dmFyIGE9aE4oYyk7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXt2YXIgZD10aGlzLm5vZGUoKTtyZXR1cm4gYS5sb2NhbD9kLmdldEF0dHJpYnV0ZU5TKGEuc3BhY2UsYS5sb2NhbCk6ZC5nZXRBdHRyaWJ1dGUoYSl9cmV0dXJu'@;
put 'IHRoaXMuZWFjaCgobnVsbD09bD9hLmxvY2FsP3VDdDpjQ3Q6ImZ1bmN0aW9uIj09dHlwZW9mIGw/YS5sb2NhbD9wQ3Q6ZkN0OmEubG9jYWw/aEN0OmRDdCkoYSxsKSl9LHN0eWxlOmZ1bmN0aW9uIHlDdChjLGwsYSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MT90aGlzLmVhY2goKG51bGw9'@;
put 'PWw/bUN0OiJmdW5jdGlvbiI9PXR5cGVvZiBsP2JDdDp2Q3QpKGMsbCxhPz8iIikpOkV3KHRoaXMubm9kZSgpLGMpfSxwcm9wZXJ0eTpmdW5jdGlvbiBTQ3QoYyxsKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD4xP3RoaXMuZWFjaCgobnVsbD09bD9fQ3Q6ImZ1bmN0aW9uIj09dHlwZW9mIGw/'@;
put 'Q0N0OndDdCkoYyxsKSk6dGhpcy5ub2RlKClbY119LGNsYXNzZWQ6ZnVuY3Rpb24gVEN0KGMsbCl7dmFyIGE9YzhlKGMrIiIpO2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil7Zm9yKHZhciBkPXN0ZSh0aGlzLm5vZGUoKSksaD0tMSxmPWEubGVuZ3RoOysraDxmOylpZighZC5jb250YWlucyhhW2hd'@;
put 'KSlyZXR1cm4hMTtyZXR1cm4hMH1yZXR1cm4gdGhpcy5lYWNoKCgiZnVuY3Rpb24iPT10eXBlb2YgbD9FQ3Q6bD9NQ3Q6eEN0KShhLGwpKX0sdGV4dDpmdW5jdGlvbiBJQ3QoYyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKG51bGw9PWM/QUN0OigiZnVuY3Rpb24iPT10eXBl'@;
put 'b2YgYz9EQ3Q6a0N0KShjKSk6dGhpcy5ub2RlKCkudGV4dENvbnRlbnR9LGh0bWw6ZnVuY3Rpb24gUEN0KGMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaChudWxsPT1jP1JDdDooImZ1bmN0aW9uIj09dHlwZW9mIGM/T0N0OkxDdCkoYykpOnRoaXMubm9kZSgpLmlubmVySFRN'@;
put 'TH0scmFpc2U6ZnVuY3Rpb24gSEN0KCl7cmV0dXJuIHRoaXMuZWFjaChGQ3QpfSxsb3dlcjpmdW5jdGlvbiBWQ3QoKXtyZXR1cm4gdGhpcy5lYWNoKE5DdCl9LGFwcGVuZDpmdW5jdGlvbiB6Q3QoYyl7dmFyIGw9ImZ1bmN0aW9uIj09dHlwZW9mIGM/YzpmOGUoYyk7cmV0dXJuIHRoaXMuc2Vs'@;
put 'ZWN0KGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYXBwZW5kQ2hpbGQobC5hcHBseSh0aGlzLGFyZ3VtZW50cykpfSl9LGluc2VydDpmdW5jdGlvbiBaQ3QoYyxsKXt2YXIgYT0iZnVuY3Rpb24iPT10eXBlb2YgYz9jOmY4ZShjKSxkPW51bGw9PWw/VUN0OiJmdW5jdGlvbiI9PXR5cGVvZiBsP2w6'@;
put 'YXRlKGwpO3JldHVybiB0aGlzLnNlbGVjdChmdW5jdGlvbigpe3JldHVybiB0aGlzLmluc2VydEJlZm9yZShhLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxkLmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8bnVsbCl9KX0scmVtb3ZlOmZ1bmN0aW9uIFlDdCgpe3JldHVybiB0aGlzLmVhY2goV0N0KX0s'@;
put 'Y2xvbmU6ZnVuY3Rpb24gS0N0KGMpe3JldHVybiB0aGlzLnNlbGVjdChjPyRDdDpHQ3QpfSxkYXR1bTpmdW5jdGlvbiBxQ3QoYyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5wcm9wZXJ0eSgiX19kYXRhX18iLGMpOnRoaXMubm9kZSgpLl9fZGF0YV9ffSxvbjpmdW5jdGlvbiB0U3Qo'@;
put 'YyxsLGEpe3ZhciBoLHYsZD1mdW5jdGlvbiBKQ3QoYyl7cmV0dXJuIGMudHJpbSgpLnNwbGl0KC9efFxzKy8pLm1hcChmdW5jdGlvbihsKXt2YXIgYT0iIixkPWwuaW5kZXhPZigiLiIpO3JldHVybiBkPj0wJiYoYT1sLnNsaWNlKGQrMSksbD1sLnNsaWNlKDAsZCkpLHt0eXBlOmwsbmFtZTph'@;
put 'fX0pfShjKyIiKSxmPWQubGVuZ3RoO2lmKCEoYXJndW1lbnRzLmxlbmd0aDwyKSl7Zm9yKE09bD9lU3Q6UUN0LGg9MDtoPGY7KytoKXRoaXMuZWFjaChNKGRbaF0sbCxhKSk7cmV0dXJuIHRoaXN9dmFyIE09dGhpcy5ub2RlKCkuX19vbjtpZihNKWZvcih2YXIgcmUsRD0wLFo9TS5sZW5ndGg7'@;
put 'RDxaOysrRClmb3IoaD0wLHJlPU1bRF07aDxmOysraClpZigodj1kW2hdKS50eXBlPT09cmUudHlwZSYmdi5uYW1lPT09cmUubmFtZSlyZXR1cm4gcmUudmFsdWV9LGRpc3BhdGNoOmZ1bmN0aW9uIGlTdChjLGwpe3JldHVybiB0aGlzLmVhY2goKCJmdW5jdGlvbiI9PXR5cGVvZiBsP3JTdDpu'@;
put 'U3QpKGMsbCkpfSxbU3ltYm9sLml0ZXJhdG9yXTpmdW5jdGlvbiphU3QoKXtmb3IodmFyIGM9dGhpcy5fZ3JvdXBzLGw9MCxhPWMubGVuZ3RoO2w8YTsrK2wpZm9yKHZhciB2LGQ9Y1tsXSxoPTAsZj1kLmxlbmd0aDtoPGY7KytoKSh2PWRbaF0pJiYoeWllbGQgdil9fTtjb25zdCBxOT1nOGU7'@;
put 'ZnVuY3Rpb24gY3RlKGMpe3JldHVybiJzdHJpbmciPT10eXBlb2YgYz9uZXcgaWQoW2RvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoYyldLFtkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRdKTpuZXcgaWQoW244ZShjKV0sbHRlKX1mdW5jdGlvbiB3cyhjKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9m'@;
put 'IGM/bmV3IGlkKFtbZG9jdW1lbnQucXVlcnlTZWxlY3RvcihjKV1dLFtkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRdKTpuZXcgaWQoW1tjXV0sbHRlKX12YXIgc1N0PXt2YWx1ZTooKT0+e319O2Z1bmN0aW9uIG04ZSgpe2Zvcih2YXIgZCxjPTAsbD1hcmd1bWVudHMubGVuZ3RoLGE9e307Yzxs'@;
put 'OysrYyl7aWYoIShkPWFyZ3VtZW50c1tjXSsiIil8fGQgaW4gYXx8L1tccy5dLy50ZXN0KGQpKXRocm93IG5ldyBFcnJvcigiaWxsZWdhbCB0eXBlOiAiK2QpO2FbZF09W119cmV0dXJuIG5ldyBmTihhKX1mdW5jdGlvbiBmTihjKXt0aGlzLl89Y31mdW5jdGlvbiBjU3QoYyxsKXtmb3IodmFy'@;
put 'IGgsYT0wLGQ9Yy5sZW5ndGg7YTxkOysrYSlpZigoaD1jW2FdKS5uYW1lPT09bClyZXR1cm4gaC52YWx1ZX1mdW5jdGlvbiB2OGUoYyxsLGEpe2Zvcih2YXIgZD0wLGg9Yy5sZW5ndGg7ZDxoOysrZClpZihjW2RdLm5hbWU9PT1sKXtjW2RdPXNTdCxjPWMuc2xpY2UoMCxkKS5jb25jYXQoYy5z'@;
put 'bGljZShkKzEpKTticmVha31yZXR1cm4gbnVsbCE9YSYmYy5wdXNoKHtuYW1lOmwsdmFsdWU6YX0pLGN9Zk4ucHJvdG90eXBlPW04ZS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmZOLG9uOmZ1bmN0aW9uKGMsbCl7dmFyIGgsYT10aGlzLl8sZD1mdW5jdGlvbiBsU3QoYyxsKXtyZXR1cm4gYy50'@;
put 'cmltKCkuc3BsaXQoL158XHMrLykubWFwKGZ1bmN0aW9uKGEpe3ZhciBkPSIiLGg9YS5pbmRleE9mKCIuIik7aWYoaD49MCYmKGQ9YS5zbGljZShoKzEpLGE9YS5zbGljZSgwLGgpKSxhJiYhbC5oYXNPd25Qcm9wZXJ0eShhKSl0aHJvdyBuZXcgRXJyb3IoInVua25vd24gdHlwZTogIithKTty'@;
put 'ZXR1cm57dHlwZTphLG5hbWU6ZH19KX0oYysiIixhKSxmPS0xLHY9ZC5sZW5ndGg7aWYoIShhcmd1bWVudHMubGVuZ3RoPDIpKXtpZihudWxsIT1sJiYiZnVuY3Rpb24iIT10eXBlb2YgbCl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgY2FsbGJhY2s6ICIrbCk7Zm9yKDsrK2Y8djspaWYoaD0o'@;
put 'Yz1kW2ZdKS50eXBlKWFbaF09djhlKGFbaF0sYy5uYW1lLGwpO2Vsc2UgaWYobnVsbD09bClmb3IoaCBpbiBhKWFbaF09djhlKGFbaF0sYy5uYW1lLG51bGwpO3JldHVybiB0aGlzfWZvcig7KytmPHY7KWlmKChoPShjPWRbZl0pLnR5cGUpJiYoaD1jU3QoYVtoXSxjLm5hbWUpKSlyZXR1cm4g'@;
put 'aH0sY29weTpmdW5jdGlvbigpe3ZhciBjPXt9LGw9dGhpcy5fO2Zvcih2YXIgYSBpbiBsKWNbYV09bFthXS5zbGljZSgpO3JldHVybiBuZXcgZk4oYyl9LGNhbGw6ZnVuY3Rpb24oYyxsKXtpZigoaD1hcmd1bWVudHMubGVuZ3RoLTIpPjApZm9yKHZhciBoLGYsYT1uZXcgQXJyYXkoaCksZD0w'@;
put 'O2Q8aDsrK2QpYVtkXT1hcmd1bWVudHNbZCsyXTtpZighdGhpcy5fLmhhc093blByb3BlcnR5KGMpKXRocm93IG5ldyBFcnJvcigidW5rbm93biB0eXBlOiAiK2MpO2ZvcihkPTAsaD0oZj10aGlzLl9bY10pLmxlbmd0aDtkPGg7KytkKWZbZF0udmFsdWUuYXBwbHkobCxhKX0sYXBwbHk6ZnVu'@;
put 'Y3Rpb24oYyxsLGEpe2lmKCF0aGlzLl8uaGFzT3duUHJvcGVydHkoYykpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIHR5cGU6ICIrYyk7Zm9yKHZhciBkPXRoaXMuX1tjXSxoPTAsZj1kLmxlbmd0aDtoPGY7KytoKWRbaF0udmFsdWUuYXBwbHkobCxhKX19O2NvbnN0IHV0ZT1tOGU7dmFyIHBO'@;
put 'LEFBLFR3PTAsRUE9MCxUQT0wLGI4ZT0xZTMsZ049MCxYOT0wLG1OPTAsa0E9Im9iamVjdCI9PXR5cGVvZiBwZXJmb3JtYW5jZSYmcGVyZm9ybWFuY2Uubm93P3BlcmZvcm1hbmNlOkRhdGUseThlPSJvYmplY3QiPT10eXBlb2Ygd2luZG93JiZ3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1l'@;
put 'P3dpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUuYmluZCh3aW5kb3cpOmZ1bmN0aW9uKGMpe3NldFRpbWVvdXQoYywxNyl9O2Z1bmN0aW9uIGR0ZSgpe3JldHVybiBYOXx8KHk4ZSh1U3QpLFg5PWtBLm5vdygpK21OKX1mdW5jdGlvbiB1U3QoKXtYOT0wfWZ1bmN0aW9uIHZOKCl7dGhpcy5f'@;
put 'Y2FsbD10aGlzLl90aW1lPXRoaXMuX25leHQ9bnVsbH1mdW5jdGlvbiBfOGUoYyxsLGEpe3ZhciBkPW5ldyB2TjtyZXR1cm4gZC5yZXN0YXJ0KGMsbCxhKSxkfWZ1bmN0aW9uIHc4ZSgpe1g5PShnTj1rQS5ub3coKSkrbU4sVHc9RUE9MDt0cnl7IWZ1bmN0aW9uIGRTdCgpe2R0ZSgpLCsrVHc7'@;
put 'Zm9yKHZhciBsLGM9cE47YzspKGw9WDktYy5fdGltZSk+PTAmJmMuX2NhbGwuY2FsbCh2b2lkIDAsbCksYz1jLl9uZXh0Oy0tVHd9KCl9ZmluYWxseXtUdz0wLGZ1bmN0aW9uIGZTdCgpe2Zvcih2YXIgYyxhLGw9cE4sZD0xLzA7bDspbC5fY2FsbD8oZD5sLl90aW1lJiYoZD1sLl90aW1lKSxj'@;
put 'PWwsbD1sLl9uZXh0KTooYT1sLl9uZXh0LGwuX25leHQ9bnVsbCxsPWM/Yy5fbmV4dD1hOnBOPWEpO0FBPWMsaHRlKGQpfSgpLFg5PTB9fWZ1bmN0aW9uIGhTdCgpe3ZhciBjPWtBLm5vdygpLGw9Yy1nTjtsPmI4ZSYmKG1OLT1sLGdOPWMpfWZ1bmN0aW9uIGh0ZShjKXtUd3x8KEVBJiYoRUE9'@;
put 'Y2xlYXJUaW1lb3V0KEVBKSksYy1YOT4yND8oYzwxLzAmJihFQT1zZXRUaW1lb3V0KHc4ZSxjLWtBLm5vdygpLW1OKSksVEEmJihUQT1jbGVhckludGVydmFsKFRBKSkpOihUQXx8KGdOPWtBLm5vdygpLFRBPXNldEludGVydmFsKGhTdCxiOGUpKSxUdz0xLHk4ZSh3OGUpKSl9ZnVuY3Rpb24g'@;
put 'Yk4oYyxsLGEpe3ZhciBkPW5ldyB2TjtyZXR1cm4gZC5yZXN0YXJ0KGg9PntkLnN0b3AoKSxjKGgrbCl9LGw9bnVsbD09bD8wOitsLGEpLGR9dk4ucHJvdG90eXBlPV84ZS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOnZOLHJlc3RhcnQ6ZnVuY3Rpb24oYyxsLGEpe2lmKCJmdW5jdGlvbiIhPXR5'@;
put 'cGVvZiBjKXRocm93IG5ldyBUeXBlRXJyb3IoImNhbGxiYWNrIGlzIG5vdCBhIGZ1bmN0aW9uIik7YT0obnVsbD09YT9kdGUoKTorYSkrKG51bGw9PWw/MDorbCksIXRoaXMuX25leHQmJkFBIT09dGhpcyYmKEFBP0FBLl9uZXh0PXRoaXM6cE49dGhpcyxBQT10aGlzKSx0aGlzLl9jYWxsPWMs'@;
put 'dGhpcy5fdGltZT1hLGh0ZSgpfSxzdG9wOmZ1bmN0aW9uKCl7dGhpcy5fY2FsbCYmKHRoaXMuX2NhbGw9bnVsbCx0aGlzLl90aW1lPTEvMCxodGUoKSl9fTt2YXIgcFN0PXV0ZSgic3RhcnQiLCJlbmQiLCJjYW5jZWwiLCJpbnRlcnJ1cHQiKSxnU3Q9W10sQzhlPTAscHRlPTIseU49MyxndGU9'@;
put 'NSxfTj02O2Z1bmN0aW9uIHdOKGMsbCxhLGQsaCxmKXt2YXIgdj1jLl9fdHJhbnNpdGlvbjtpZih2KXtpZihhIGluIHYpcmV0dXJufWVsc2UgYy5fX3RyYW5zaXRpb249e307IWZ1bmN0aW9uIG1TdChjLGwsYSl7dmFyIGgsZD1jLl9fdHJhbnNpdGlvbjtmdW5jdGlvbiB2KFope3ZhciByZSxj'@;
put 'ZSxiZSxFZTtpZigxIT09YS5zdGF0ZSlyZXR1cm4gRCgpO2ZvcihyZSBpbiBkKWlmKChFZT1kW3JlXSkubmFtZT09PWEubmFtZSl7aWYoRWUuc3RhdGU9PT15TilyZXR1cm4gYk4odik7ND09PUVlLnN0YXRlPyhFZS5zdGF0ZT1fTixFZS50aW1lci5zdG9wKCksRWUub24uY2FsbCgiaW50ZXJy'@;
put 'dXB0IixjLGMuX19kYXRhX18sRWUuaW5kZXgsRWUuZ3JvdXApLGRlbGV0ZSBkW3JlXSk6K3JlPGwmJihFZS5zdGF0ZT1fTixFZS50aW1lci5zdG9wKCksRWUub24uY2FsbCgiY2FuY2VsIixjLGMuX19kYXRhX18sRWUuaW5kZXgsRWUuZ3JvdXApLGRlbGV0ZSBkW3JlXSl9aWYoYk4oZnVuY3Rp'@;
put 'b24oKXthLnN0YXRlPT09eU4mJihhLnN0YXRlPTQsYS50aW1lci5yZXN0YXJ0KE0sYS5kZWxheSxhLnRpbWUpLE0oWikpfSksYS5zdGF0ZT1wdGUsYS5vbi5jYWxsKCJzdGFydCIsYyxjLl9fZGF0YV9fLGEuaW5kZXgsYS5ncm91cCksYS5zdGF0ZT09PXB0ZSl7Zm9yKGEuc3RhdGU9eU4saD1u'@;
put 'ZXcgQXJyYXkoYmU9YS50d2Vlbi5sZW5ndGgpLHJlPTAsY2U9LTE7cmU8YmU7KytyZSkoRWU9YS50d2VlbltyZV0udmFsdWUuY2FsbChjLGMuX19kYXRhX18sYS5pbmRleCxhLmdyb3VwKSkmJihoWysrY2VdPUVlKTtoLmxlbmd0aD1jZSsxfX1mdW5jdGlvbiBNKFope2Zvcih2YXIgcmU9Wjxh'@;
put 'LmR1cmF0aW9uP2EuZWFzZS5jYWxsKG51bGwsWi9hLmR1cmF0aW9uKTooYS50aW1lci5yZXN0YXJ0KEQpLGEuc3RhdGU9Z3RlLDEpLGNlPS0xLGJlPWgubGVuZ3RoOysrY2U8YmU7KWhbY2VdLmNhbGwoYyxyZSk7YS5zdGF0ZT09PWd0ZSYmKGEub24uY2FsbCgiZW5kIixjLGMuX19kYXRhX18s'@;
put 'YS5pbmRleCxhLmdyb3VwKSxEKCkpfWZ1bmN0aW9uIEQoKXtmb3IodmFyIFogaW4gYS5zdGF0ZT1fTixhLnRpbWVyLnN0b3AoKSxkZWxldGUgZFtsXSxkKXJldHVybjtkZWxldGUgYy5fX3RyYW5zaXRpb259ZFtsXT1hLGEudGltZXI9XzhlKGZ1bmN0aW9uIGYoWil7YS5zdGF0ZT0xLGEudGlt'@;
put 'ZXIucmVzdGFydCh2LGEuZGVsYXksYS50aW1lKSxhLmRlbGF5PD1aJiZ2KFotYS5kZWxheSl9LDAsYS50aW1lKX0oYyxhLHtuYW1lOmwsaW5kZXg6ZCxncm91cDpoLG9uOnBTdCx0d2VlbjpnU3QsdGltZTpmLnRpbWUsZGVsYXk6Zi5kZWxheSxkdXJhdGlvbjpmLmR1cmF0aW9uLGVhc2U6Zi5l'@;
put 'YXNlLHRpbWVyOm51bGwsc3RhdGU6QzhlfSl9ZnVuY3Rpb24gbXRlKGMsbCl7dmFyIGE9QzMoYyxsKTtpZihhLnN0YXRlPkM4ZSl0aHJvdyBuZXcgRXJyb3IoInRvbyBsYXRlOyBhbHJlYWR5IHNjaGVkdWxlZCIpO3JldHVybiBhfWZ1bmN0aW9uIHM0KGMsbCl7dmFyIGE9QzMoYyxsKTtpZihh'@;
put 'LnN0YXRlPnlOKXRocm93IG5ldyBFcnJvcigidG9vIGxhdGU7IGFscmVhZHkgcnVubmluZyIpO3JldHVybiBhfWZ1bmN0aW9uIEMzKGMsbCl7dmFyIGE9Yy5fX3RyYW5zaXRpb247aWYoIWF8fCEoYT1hW2xdKSl0aHJvdyBuZXcgRXJyb3IoInRyYW5zaXRpb24gbm90IGZvdW5kIik7cmV0dXJu'@;
put 'IGF9ZnVuY3Rpb24gQ04oYyxsKXt2YXIgZCxoLHYsYT1jLl9fdHJhbnNpdGlvbixmPSEwO2lmKGEpe2Zvcih2IGluIGw9bnVsbD09bD9udWxsOmwrIiIsYSkoZD1hW3ZdKS5uYW1lPT09bD8oaD1kLnN0YXRlPnB0ZSYmZC5zdGF0ZTxndGUsZC5zdGF0ZT1fTixkLnRpbWVyLnN0b3AoKSxkLm9u'@;
put 'LmNhbGwoaD8iaW50ZXJydXB0IjoiY2FuY2VsIixjLGMuX19kYXRhX18sZC5pbmRleCxkLmdyb3VwKSxkZWxldGUgYVt2XSk6Zj0hMTtmJiZkZWxldGUgYy5fX3RyYW5zaXRpb259fWZ1bmN0aW9uIGw0KGMsbCl7cmV0dXJuIGM9K2MsbD0rbCxmdW5jdGlvbihhKXtyZXR1cm4gYyooMS1hKSts'@;
put 'KmF9fXZhciBTTixNOGU9MTgwL01hdGguUEksdnRlPXt0cmFuc2xhdGVYOjAsdHJhbnNsYXRlWTowLHJvdGF0ZTowLHNrZXdYOjAsc2NhbGVYOjEsc2NhbGVZOjF9O2Z1bmN0aW9uIHg4ZShjLGwsYSxkLGgsZil7dmFyIHYsTSxEO3JldHVybih2PU1hdGguc3FydChjKmMrbCpsKSkmJihjLz12'@;
put 'LGwvPXYpLChEPWMqYStsKmQpJiYoYS09YypELGQtPWwqRCksKE09TWF0aC5zcXJ0KGEqYStkKmQpKSYmKGEvPU0sZC89TSxELz1NKSxjKmQ8bCphJiYoYz0tYyxsPS1sLEQ9LUQsdj0tdikse3RyYW5zbGF0ZVg6aCx0cmFuc2xhdGVZOmYscm90YXRlOk1hdGguYXRhbjIobCxjKSpNOGUsc2tl'@;
put 'd1g6TWF0aC5hdGFuKEQpKk04ZSxzY2FsZVg6dixzY2FsZVk6TX19ZnVuY3Rpb24gRThlKGMsbCxhLGQpe2Z1bmN0aW9uIGgoWil7cmV0dXJuIFoubGVuZ3RoP1oucG9wKCkrIiAiOiIifXJldHVybiBmdW5jdGlvbihaLHJlKXt2YXIgY2U9W10sYmU9W107cmV0dXJuIFo9YyhaKSxyZT1jKHJl'@;
put 'KSxmdW5jdGlvbiBmKFoscmUsY2UsYmUsRWUsQmUpe2lmKFohPT1jZXx8cmUhPT1iZSl7dmFyIHFlPUVlLnB1c2goInRyYW5zbGF0ZSgiLG51bGwsbCxudWxsLGEpO0JlLnB1c2goe2k6cWUtNCx4Omw0KFosY2UpfSx7aTpxZS0yLHg6bDQocmUsYmUpfSl9ZWxzZShjZXx8YmUpJiZFZS5wdXNo'@;
put 'KCJ0cmFuc2xhdGUoIitjZStsK2JlK2EpfShaLnRyYW5zbGF0ZVgsWi50cmFuc2xhdGVZLHJlLnRyYW5zbGF0ZVgscmUudHJhbnNsYXRlWSxjZSxiZSksZnVuY3Rpb24gdihaLHJlLGNlLGJlKXtaIT09cmU/KFotcmU+MTgwP3JlKz0zNjA6cmUtWj4xODAmJihaKz0zNjApLGJlLnB1c2goe2k6'@;
put 'Y2UucHVzaChoKGNlKSsicm90YXRlKCIsbnVsbCxkKS0yLHg6bDQoWixyZSl9KSk6cmUmJmNlLnB1c2goaChjZSkrInJvdGF0ZSgiK3JlK2QpfShaLnJvdGF0ZSxyZS5yb3RhdGUsY2UsYmUpLGZ1bmN0aW9uIE0oWixyZSxjZSxiZSl7WiE9PXJlP2JlLnB1c2goe2k6Y2UucHVzaChoKGNlKSsi'@;
put 'c2tld1goIixudWxsLGQpLTIseDpsNChaLHJlKX0pOnJlJiZjZS5wdXNoKGgoY2UpKyJza2V3WCgiK3JlK2QpfShaLnNrZXdYLHJlLnNrZXdYLGNlLGJlKSxmdW5jdGlvbiBEKFoscmUsY2UsYmUsRWUsQmUpe2lmKFohPT1jZXx8cmUhPT1iZSl7dmFyIHFlPUVlLnB1c2goaChFZSkrInNjYWxl'@;
put 'KCIsbnVsbCwiLCIsbnVsbCwiKSIpO0JlLnB1c2goe2k6cWUtNCx4Omw0KFosY2UpfSx7aTpxZS0yLHg6bDQocmUsYmUpfSl9ZWxzZSgxIT09Y2V8fDEhPT1iZSkmJkVlLnB1c2goaChFZSkrInNjYWxlKCIrY2UrIiwiK2JlKyIpIil9KFouc2NhbGVYLFouc2NhbGVZLHJlLnNjYWxlWCxyZS5z'@;
put 'Y2FsZVksY2UsYmUpLFo9cmU9bnVsbCxmdW5jdGlvbihFZSl7Zm9yKHZhciBydCxCZT0tMSxxZT1iZS5sZW5ndGg7KytCZTxxZTspY2VbKHJ0PWJlW0JlXSkuaV09cnQueChFZSk7cmV0dXJuIGNlLmpvaW4oIiIpfX19dmFyIF9TdD1FOGUoZnVuY3Rpb24gYlN0KGMpe2NvbnN0IGw9bmV3KCJm'@;
put 'dW5jdGlvbiI9PXR5cGVvZiBET01NYXRyaXg/RE9NTWF0cml4OldlYktpdENTU01hdHJpeCkoYysiIik7cmV0dXJuIGwuaXNJZGVudGl0eT92dGU6eDhlKGwuYSxsLmIsbC5jLGwuZCxsLmUsbC5mKX0sInB4LCAiLCJweCkiLCJkZWcpIiksVDhlPUU4ZShmdW5jdGlvbiB5U3QoYyl7cmV0dXJu'@;
put 'IG51bGwhPWMmJihTTnx8KFNOPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJnIikpLFNOLnNldEF0dHJpYnV0ZSgidHJhbnNmb3JtIixjKSxjPVNOLnRyYW5zZm9ybS5iYXNlVmFsLmNvbnNvbGlkYXRlKCkpP3g4ZSgoYz1jLm1hdHJpeCku'@;
put 'YSxjLmIsYy5jLGMuZCxjLmUsYy5mKTp2dGV9LCIsICIsIikiLCIpIik7ZnVuY3Rpb24gd1N0KGMsbCl7dmFyIGEsZDtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgaD1zNCh0aGlzLGMpLGY9aC50d2VlbjtpZihmIT09YSlmb3IodmFyIHY9MCxNPShkPWE9ZikubGVuZ3RoO3Y8TTsrK3YpaWYoZFt2'@;
put 'XS5uYW1lPT09bCl7KGQ9ZC5zbGljZSgpKS5zcGxpY2UodiwxKTticmVha31oLnR3ZWVuPWR9fWZ1bmN0aW9uIENTdChjLGwsYSl7dmFyIGQsaDtpZigiZnVuY3Rpb24iIT10eXBlb2YgYSl0aHJvdyBuZXcgRXJyb3I7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGY9czQodGhpcyxjKSx2PWYudHdl'@;
put 'ZW47aWYodiE9PWQpe2g9KGQ9dikuc2xpY2UoKTtmb3IodmFyIE09e25hbWU6bCx2YWx1ZTphfSxEPTAsWj1oLmxlbmd0aDtEPFo7KytEKWlmKGhbRF0ubmFtZT09PWwpe2hbRF09TTticmVha31EPT09WiYmaC5wdXNoKE0pfWYudHdlZW49aH19ZnVuY3Rpb24gYnRlKGMsbCxhKXt2YXIgZD1j'@;
put 'Ll9pZDtyZXR1cm4gYy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGg9czQodGhpcyxkKTsoaC52YWx1ZXx8KGgudmFsdWU9e30pKVtsXT1hLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pLGZ1bmN0aW9uKGgpe3JldHVybiBDMyhoLGQpLnZhbHVlW2xdfX1mdW5jdGlvbiB5dGUoYyxsLGEpe2MucHJvdG90'@;
put 'eXBlPWwucHJvdG90eXBlPWEsYS5jb25zdHJ1Y3Rvcj1jfWZ1bmN0aW9uIEE4ZShjLGwpe3ZhciBhPU9iamVjdC5jcmVhdGUoYy5wcm90b3R5cGUpO2Zvcih2YXIgZCBpbiBsKWFbZF09bFtkXTtyZXR1cm4gYX1mdW5jdGlvbiBEQSgpe312YXIgTU49MS8uNyxBdz0iXFxzKihbKy1dP1xcZCsp'@;
put 'XFxzKiIsUkE9IlxccyooWystXT8oPzpcXGQqXFwuKT9cXGQrKD86W2VFXVsrLV0/XFxkKyk/KVxccyoiLGM0PSJcXHMqKFsrLV0/KD86XFxkKlxcLik/XFxkKyg/OltlRV1bKy1dP1xcZCspPyklXFxzKiIsTVN0PS9eIyhbMC05YS1mXXszLDh9KSQvLHhTdD1uZXcgUmVnRXhwKGBecmdiXFwo'@;
put 'JHtBd30sJHtBd30sJHtBd31cXCkkYCksRVN0PW5ldyBSZWdFeHAoYF5yZ2JcXCgke2M0fSwke2M0fSwke2M0fVxcKSRgKSxUU3Q9bmV3IFJlZ0V4cChgXnJnYmFcXCgke0F3fSwke0F3fSwke0F3fSwke1JBfVxcKSRgKSxBU3Q9bmV3IFJlZ0V4cChgXnJnYmFcXCgke2M0fSwke2M0fSwke2M0'@;
put 'fSwke1JBfVxcKSRgKSxrU3Q9bmV3IFJlZ0V4cChgXmhzbFxcKCR7UkF9LCR7YzR9LCR7YzR9XFwpJGApLERTdD1uZXcgUmVnRXhwKGBeaHNsYVxcKCR7UkF9LCR7YzR9LCR7YzR9LCR7UkF9XFwpJGApLGs4ZT17YWxpY2VibHVlOjE1NzkyMzgzLGFudGlxdWV3aGl0ZToxNjQ0NDM3NSxhcXVh'@;
put 'OjY1NTM1LGFxdWFtYXJpbmU6ODM4ODU2NCxhenVyZToxNTc5NDE3NSxiZWlnZToxNjExOTI2MCxiaXNxdWU6MTY3NzAyNDQsYmxhY2s6MCxibGFuY2hlZGFsbW9uZDoxNjc3MjA0NSxibHVlOjI1NSxibHVldmlvbGV0OjkwNTUyMDIsYnJvd246MTA4MjQyMzQsYnVybHl3b29kOjE0NTk2MjMx'@;
put 'LGNhZGV0Ymx1ZTo2MjY2NTI4LGNoYXJ0cmV1c2U6ODM4ODM1MixjaG9jb2xhdGU6MTM3ODk0NzAsY29yYWw6MTY3NDQyNzIsY29ybmZsb3dlcmJsdWU6NjU5MTk4MSxjb3Juc2lsazoxNjc3NTM4OCxjcmltc29uOjE0NDIzMTAwLGN5YW46NjU1MzUsZGFya2JsdWU6MTM5LGRhcmtjeWFuOjM1'@;
put 'NzIzLGRhcmtnb2xkZW5yb2Q6MTIwOTI5MzksZGFya2dyYXk6MTExMTkwMTcsZGFya2dyZWVuOjI1NjAwLGRhcmtncmV5OjExMTE5MDE3LGRhcmtraGFraToxMjQzMzI1OSxkYXJrbWFnZW50YTo5MTA5NjQzLGRhcmtvbGl2ZWdyZWVuOjU1OTc5OTksZGFya29yYW5nZToxNjc0NzUyMCxkYXJr'@;
put 'b3JjaGlkOjEwMDQwMDEyLGRhcmtyZWQ6OTEwOTUwNCxkYXJrc2FsbW9uOjE1MzA4NDEwLGRhcmtzZWFncmVlbjo5NDE5OTE5LGRhcmtzbGF0ZWJsdWU6NDczNDM0NyxkYXJrc2xhdGVncmF5OjMxMDA0OTUsZGFya3NsYXRlZ3JleTozMTAwNDk1LGRhcmt0dXJxdW9pc2U6NTI5NDUsZGFya3Zp'@;
put 'b2xldDo5Njk5NTM5LGRlZXBwaW5rOjE2NzE2OTQ3LGRlZXBza3libHVlOjQ5MTUxLGRpbWdyYXk6NjkwODI2NSxkaW1ncmV5OjY5MDgyNjUsZG9kZ2VyYmx1ZToyMDAzMTk5LGZpcmVicmljazoxMTY3NDE0NixmbG9yYWx3aGl0ZToxNjc3NTkyMCxmb3Jlc3RncmVlbjoyMjYzODQyLGZ1Y2hz'@;
put 'aWE6MTY3MTE5MzUsZ2FpbnNib3JvOjE0NDc0NDYwLGdob3N0d2hpdGU6MTYzMTY2NzEsZ29sZDoxNjc2NjcyMCxnb2xkZW5yb2Q6MTQzMjkxMjAsZ3JheTo4NDIxNTA0LGdyZWVuOjMyNzY4LGdyZWVueWVsbG93OjExNDAzMDU1LGdyZXk6ODQyMTUwNCxob25leWRldzoxNTc5NDE2MCxob3Rw'@;
put 'aW5rOjE2NzM4NzQwLGluZGlhbnJlZDoxMzQ1ODUyNCxpbmRpZ286NDkxNTMzMCxpdm9yeToxNjc3NzIwMCxraGFraToxNTc4NzY2MCxsYXZlbmRlcjoxNTEzMjQxMCxsYXZlbmRlcmJsdXNoOjE2NzczMzY1LGxhd25ncmVlbjo4MTkwOTc2LGxlbW9uY2hpZmZvbjoxNjc3NTg4NSxsaWdodGJs'@;
put 'dWU6MTEzOTMyNTQsbGlnaHRjb3JhbDoxNTc2MTUzNixsaWdodGN5YW46MTQ3NDU1OTksbGlnaHRnb2xkZW5yb2R5ZWxsb3c6MTY0NDgyMTAsbGlnaHRncmF5OjEzODgyMzIzLGxpZ2h0Z3JlZW46OTQ5ODI1NixsaWdodGdyZXk6MTM4ODIzMjMsbGlnaHRwaW5rOjE2NzU4NDY1LGxpZ2h0c2Fs'@;
put 'bW9uOjE2NzUyNzYyLGxpZ2h0c2VhZ3JlZW46MjE0Mjg5MCxsaWdodHNreWJsdWU6ODkwMDM0NixsaWdodHNsYXRlZ3JheTo3ODMzNzUzLGxpZ2h0c2xhdGVncmV5Ojc4MzM3NTMsbGlnaHRzdGVlbGJsdWU6MTE1ODQ3MzQsbGlnaHR5ZWxsb3c6MTY3NzcxODQsbGltZTo2NTI4MCxsaW1lZ3Jl'@;
put 'ZW46MzMyOTMzMCxsaW5lbjoxNjQ0NTY3MCxtYWdlbnRhOjE2NzExOTM1LG1hcm9vbjo4Mzg4NjA4LG1lZGl1bWFxdWFtYXJpbmU6NjczNzMyMixtZWRpdW1ibHVlOjIwNSxtZWRpdW1vcmNoaWQ6MTIyMTE2NjcsbWVkaXVtcHVycGxlOjk2NjI2ODMsbWVkaXVtc2VhZ3JlZW46Mzk3ODA5Nyxt'@;
put 'ZWRpdW1zbGF0ZWJsdWU6ODA4Nzc5MCxtZWRpdW1zcHJpbmdncmVlbjo2NDE1NCxtZWRpdW10dXJxdW9pc2U6NDc3MjMwMCxtZWRpdW12aW9sZXRyZWQ6MTMwNDcxNzMsbWlkbmlnaHRibHVlOjE2NDQ5MTIsbWludGNyZWFtOjE2MTIxODUwLG1pc3R5cm9zZToxNjc3MDI3Myxtb2NjYXNpbjox'@;
put 'Njc3MDIyOSxuYXZham93aGl0ZToxNjc2ODY4NSxuYXZ5OjEyOCxvbGRsYWNlOjE2NjQzNTU4LG9saXZlOjg0MjEzNzYsb2xpdmVkcmFiOjcwNDg3Mzksb3JhbmdlOjE2NzUzOTIwLG9yYW5nZXJlZDoxNjcyOTM0NCxvcmNoaWQ6MTQzMTU3MzQscGFsZWdvbGRlbnJvZDoxNTY1NzEzMCxwYWxl'@;
put 'Z3JlZW46MTAwMjU4ODAscGFsZXR1cnF1b2lzZToxMTUyOTk2NixwYWxldmlvbGV0cmVkOjE0MzgxMjAzLHBhcGF5YXdoaXA6MTY3NzMwNzcscGVhY2hwdWZmOjE2NzY3NjczLHBlcnU6MTM0Njg5OTEscGluazoxNjc2MTAzNSxwbHVtOjE0NTI0NjM3LHBvd2RlcmJsdWU6MTE1OTE5MTAscHVy'@;
put 'cGxlOjgzODg3MzYscmViZWNjYXB1cnBsZTo2Njk3ODgxLHJlZDoxNjcxMTY4MCxyb3N5YnJvd246MTIzNTc1MTkscm95YWxibHVlOjQyODY5NDUsc2FkZGxlYnJvd246OTEyNzE4NyxzYWxtb246MTY0MTY4ODIsc2FuZHlicm93bjoxNjAzMjg2NCxzZWFncmVlbjozMDUwMzI3LHNlYXNoZWxs'@;
put 'OjE2Nzc0NjM4LHNpZW5uYToxMDUwNjc5NyxzaWx2ZXI6MTI2MzIyNTYsc2t5Ymx1ZTo4OTAwMzMxLHNsYXRlYmx1ZTo2OTcwMDYxLHNsYXRlZ3JheTo3MzcyOTQ0LHNsYXRlZ3JleTo3MzcyOTQ0LHNub3c6MTY3NzU5MzAsc3ByaW5nZ3JlZW46NjU0MDcsc3RlZWxibHVlOjQ2MjA5ODAsdGFu'@;
put 'OjEzODA4NzgwLHRlYWw6MzI4OTYsdGhpc3RsZToxNDIwNDg4OCx0b21hdG86MTY3MzcwOTUsdHVycXVvaXNlOjQyNTE4NTYsdmlvbGV0OjE1NjMxMDg2LHdoZWF0OjE2MTEzMzMxLHdoaXRlOjE2Nzc3MjE1LHdoaXRlc21va2U6MTYxMTkyODUseWVsbG93OjE2Nzc2OTYwLHllbGxvd2dyZWVu'@;
put 'OjEwMTQ1MDc0fTtmdW5jdGlvbiBEOGUoKXtyZXR1cm4gdGhpcy5yZ2IoKS5mb3JtYXRIZXgoKX1mdW5jdGlvbiBJOGUoKXtyZXR1cm4gdGhpcy5yZ2IoKS5mb3JtYXRSZ2IoKX1mdW5jdGlvbiBKOShjKXt2YXIgbCxhO3JldHVybiBjPShjKyIiKS50cmltKCkudG9Mb3dlckNhc2UoKSwobD1N'@;
put 'U3QuZXhlYyhjKSk/KGE9bFsxXS5sZW5ndGgsbD1wYXJzZUludChsWzFdLDE2KSw2PT09YT9SOGUobCk6Mz09PWE/bmV3IFFkKGw+PjgmMTV8bD4+NCYyNDAsbD4+NCYxNXwyNDAmbCwoMTUmbCk8PDR8MTUmbCwxKTo4PT09YT94TihsPj4yNCYyNTUsbD4+MTYmMjU1LGw+PjgmMjU1LCgyNTUm'@;
put 'bCkvMjU1KTo0PT09YT94TihsPj4xMiYxNXxsPj44JjI0MCxsPj44JjE1fGw+PjQmMjQwLGw+PjQmMTV8MjQwJmwsKCgxNSZsKTw8NHwxNSZsKS8yNTUpOm51bGwpOihsPXhTdC5leGVjKGMpKT9uZXcgUWQobFsxXSxsWzJdLGxbM10sMSk6KGw9RVN0LmV4ZWMoYykpP25ldyBRZCgyNTUqbFsx'@;
put 'XS8xMDAsMjU1KmxbMl0vMTAwLDI1NSpsWzNdLzEwMCwxKToobD1UU3QuZXhlYyhjKSk/eE4obFsxXSxsWzJdLGxbM10sbFs0XSk6KGw9QVN0LmV4ZWMoYykpP3hOKDI1NSpsWzFdLzEwMCwyNTUqbFsyXS8xMDAsMjU1KmxbM10vMTAwLGxbNF0pOihsPWtTdC5leGVjKGMpKT9QOGUobFsxXSxs'@;
put 'WzJdLzEwMCxsWzNdLzEwMCwxKToobD1EU3QuZXhlYyhjKSk/UDhlKGxbMV0sbFsyXS8xMDAsbFszXS8xMDAsbFs0XSk6azhlLmhhc093blByb3BlcnR5KGMpP1I4ZShrOGVbY10pOiJ0cmFuc3BhcmVudCI9PT1jP25ldyBRZChOYU4sTmFOLE5hTiwwKTpudWxsfWZ1bmN0aW9uIFI4ZShjKXty'@;
put 'ZXR1cm4gbmV3IFFkKGM+PjE2JjI1NSxjPj44JjI1NSwyNTUmYywxKX1mdW5jdGlvbiB4TihjLGwsYSxkKXtyZXR1cm4gZDw9MCYmKGM9bD1hPU5hTiksbmV3IFFkKGMsbCxhLGQpfWZ1bmN0aW9uIEVOKGMsbCxhLGQpe3JldHVybiAxPT09YXJndW1lbnRzLmxlbmd0aD9mdW5jdGlvbiBMU3Qo'@;
put 'Yyl7cmV0dXJuIGMgaW5zdGFuY2VvZiBEQXx8KGM9SjkoYykpLGM/bmV3IFFkKChjPWMucmdiKCkpLnIsYy5nLGMuYixjLm9wYWNpdHkpOm5ldyBRZH0oYyk6bmV3IFFkKGMsbCxhLGQ/PzEpfWZ1bmN0aW9uIFFkKGMsbCxhLGQpe3RoaXMucj0rYyx0aGlzLmc9K2wsdGhpcy5iPSthLHRoaXMu'@;
put 'b3BhY2l0eT0rZH1mdW5jdGlvbiBMOGUoKXtyZXR1cm5gIyR7ZXYodGhpcy5yKX0ke2V2KHRoaXMuZyl9JHtldih0aGlzLmIpfWB9ZnVuY3Rpb24gTzhlKCl7Y29uc3QgYz1UTih0aGlzLm9wYWNpdHkpO3JldHVybmAkezE9PT1jPyJyZ2IoIjoicmdiYSgifSR7UTkodGhpcy5yKX0sICR7UTko'@;
put 'dGhpcy5nKX0sICR7UTkodGhpcy5iKX0kezE9PT1jPyIpIjpgLCAke2N9KWB9YH1mdW5jdGlvbiBUTihjKXtyZXR1cm4gaXNOYU4oYyk/MTpNYXRoLm1heCgwLE1hdGgubWluKDEsYykpfWZ1bmN0aW9uIFE5KGMpe3JldHVybiBNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKGMp'@;
put 'fHwwKSl9ZnVuY3Rpb24gZXYoYyl7cmV0dXJuKChjPVE5KGMpKTwxNj8iMCI6IiIpK2MudG9TdHJpbmcoMTYpfWZ1bmN0aW9uIFA4ZShjLGwsYSxkKXtyZXR1cm4gZDw9MD9jPWw9YT1OYU46YTw9MHx8YT49MT9jPWw9TmFOOmw8PTAmJihjPU5hTiksbmV3IFMzKGMsbCxhLGQpfWZ1bmN0aW9u'@;
put 'IEY4ZShjKXtpZihjIGluc3RhbmNlb2YgUzMpcmV0dXJuIG5ldyBTMyhjLmgsYy5zLGMubCxjLm9wYWNpdHkpO2lmKGMgaW5zdGFuY2VvZiBEQXx8KGM9SjkoYykpLCFjKXJldHVybiBuZXcgUzM7aWYoYyBpbnN0YW5jZW9mIFMzKXJldHVybiBjO3ZhciBsPShjPWMucmdiKCkpLnIvMjU1LGE9'@;
put 'Yy5nLzI1NSxkPWMuYi8yNTUsaD1NYXRoLm1pbihsLGEsZCksZj1NYXRoLm1heChsLGEsZCksdj1OYU4sTT1mLWgsRD0oZitoKS8yO3JldHVybiBNPyh2PWw9PT1mPyhhLWQpL00rNiooYTxkKTphPT09Zj8oZC1sKS9NKzI6KGwtYSkvTSs0LE0vPUQ8LjU/ZitoOjItZi1oLHYqPTYwKTpNPUQ+'@;
put 'MCYmRDwxPzA6dixuZXcgUzModixNLEQsYy5vcGFjaXR5KX1mdW5jdGlvbiBTMyhjLGwsYSxkKXt0aGlzLmg9K2MsdGhpcy5zPStsLHRoaXMubD0rYSx0aGlzLm9wYWNpdHk9K2R9ZnVuY3Rpb24gSDhlKGMpe3JldHVybihjPShjfHwwKSUzNjApPDA/YyszNjA6Y31mdW5jdGlvbiBBTihjKXty'@;
put 'ZXR1cm4gTWF0aC5tYXgoMCxNYXRoLm1pbigxLGN8fDApKX1mdW5jdGlvbiBfdGUoYyxsLGEpe3JldHVybiAyNTUqKGM8NjA/bCsoYS1sKSpjLzYwOmM8MTgwP2E6YzwyNDA/bCsoYS1sKSooMjQwLWMpLzYwOmwpfWZ1bmN0aW9uIE44ZShjLGwsYSxkLGgpe3ZhciBmPWMqYyx2PWYqYztyZXR1'@;
put 'cm4oKDEtMypjKzMqZi12KSpsKyg0LTYqZiszKnYpKmErKDErMypjKzMqZi0zKnYpKmQrdipoKS82fXl0ZShEQSxKOSx7Y29weShjKXtyZXR1cm4gT2JqZWN0LmFzc2lnbihuZXcgdGhpcy5jb25zdHJ1Y3Rvcix0aGlzLGMpfSxkaXNwbGF5YWJsZSgpe3JldHVybiB0aGlzLnJnYigpLmRpc3Bs'@;
put 'YXlhYmxlKCl9LGhleDpEOGUsZm9ybWF0SGV4OkQ4ZSxmb3JtYXRIZXg4OmZ1bmN0aW9uIElTdCgpe3JldHVybiB0aGlzLnJnYigpLmZvcm1hdEhleDgoKX0sZm9ybWF0SHNsOmZ1bmN0aW9uIFJTdCgpe3JldHVybiBGOGUodGhpcykuZm9ybWF0SHNsKCl9LGZvcm1hdFJnYjpJOGUsdG9TdHJp'@;
put 'bmc6SThlfSkseXRlKFFkLEVOLEE4ZShEQSx7YnJpZ2h0ZXIoYyl7cmV0dXJuIGM9bnVsbD09Yz9NTjpNYXRoLnBvdyhNTixjKSxuZXcgUWQodGhpcy5yKmMsdGhpcy5nKmMsdGhpcy5iKmMsdGhpcy5vcGFjaXR5KX0sZGFya2VyKGMpe3JldHVybiBjPW51bGw9PWM/Ljc6TWF0aC5wb3coLjcs'@;
put 'YyksbmV3IFFkKHRoaXMucipjLHRoaXMuZypjLHRoaXMuYipjLHRoaXMub3BhY2l0eSl9LHJnYigpe3JldHVybiB0aGlzfSxjbGFtcCgpe3JldHVybiBuZXcgUWQoUTkodGhpcy5yKSxROSh0aGlzLmcpLFE5KHRoaXMuYiksVE4odGhpcy5vcGFjaXR5KSl9LGRpc3BsYXlhYmxlKCl7cmV0dXJu'@;
put 'LS41PD10aGlzLnImJnRoaXMucjwyNTUuNSYmLS41PD10aGlzLmcmJnRoaXMuZzwyNTUuNSYmLS41PD10aGlzLmImJnRoaXMuYjwyNTUuNSYmMDw9dGhpcy5vcGFjaXR5JiZ0aGlzLm9wYWNpdHk8PTF9LGhleDpMOGUsZm9ybWF0SGV4Okw4ZSxmb3JtYXRIZXg4OmZ1bmN0aW9uIE9TdCgpe3Jl'@;
put 'dHVybmAjJHtldih0aGlzLnIpfSR7ZXYodGhpcy5nKX0ke2V2KHRoaXMuYil9JHtldigyNTUqKGlzTmFOKHRoaXMub3BhY2l0eSk/MTp0aGlzLm9wYWNpdHkpKX1gfSxmb3JtYXRSZ2I6TzhlLHRvU3RyaW5nOk84ZX0pKSx5dGUoUzMsZnVuY3Rpb24gUFN0KGMsbCxhLGQpe3JldHVybiAxPT09'@;
put 'YXJndW1lbnRzLmxlbmd0aD9GOGUoYyk6bmV3IFMzKGMsbCxhLGQ/PzEpfSxBOGUoREEse2JyaWdodGVyKGMpe3JldHVybiBjPW51bGw9PWM/TU46TWF0aC5wb3coTU4sYyksbmV3IFMzKHRoaXMuaCx0aGlzLnMsdGhpcy5sKmMsdGhpcy5vcGFjaXR5KX0sZGFya2VyKGMpe3JldHVybiBjPW51'@;
put 'bGw9PWM/Ljc6TWF0aC5wb3coLjcsYyksbmV3IFMzKHRoaXMuaCx0aGlzLnMsdGhpcy5sKmMsdGhpcy5vcGFjaXR5KX0scmdiKCl7dmFyIGM9dGhpcy5oJTM2MCszNjAqKHRoaXMuaDwwKSxsPWlzTmFOKGMpfHxpc05hTih0aGlzLnMpPzA6dGhpcy5zLGE9dGhpcy5sLGQ9YSsoYTwuNT9hOjEt'@;
put 'YSkqbCxoPTIqYS1kO3JldHVybiBuZXcgUWQoX3RlKGM+PTI0MD9jLTI0MDpjKzEyMCxoLGQpLF90ZShjLGgsZCksX3RlKGM8MTIwP2MrMjQwOmMtMTIwLGgsZCksdGhpcy5vcGFjaXR5KX0sY2xhbXAoKXtyZXR1cm4gbmV3IFMzKEg4ZSh0aGlzLmgpLEFOKHRoaXMucyksQU4odGhpcy5sKSxU'@;
put 'Tih0aGlzLm9wYWNpdHkpKX0sZGlzcGxheWFibGUoKXtyZXR1cm4oMDw9dGhpcy5zJiZ0aGlzLnM8PTF8fGlzTmFOKHRoaXMucykpJiYwPD10aGlzLmwmJnRoaXMubDw9MSYmMDw9dGhpcy5vcGFjaXR5JiZ0aGlzLm9wYWNpdHk8PTF9LGZvcm1hdEhzbCgpe2NvbnN0IGM9VE4odGhpcy5vcGFj'@;
put 'aXR5KTtyZXR1cm5gJHsxPT09Yz8iaHNsKCI6ImhzbGEoIn0ke0g4ZSh0aGlzLmgpfSwgJHsxMDAqQU4odGhpcy5zKX0lLCAkezEwMCpBTih0aGlzLmwpfSUkezE9PT1jPyIpIjpgLCAke2N9KWB9YH19KSk7Y29uc3Qgd3RlPWM9PigpPT5jO2Z1bmN0aW9uIEI4ZShjLGwpe3ZhciBhPWwtYzty'@;
put 'ZXR1cm4gYT9mdW5jdGlvbiBWOGUoYyxsKXtyZXR1cm4gZnVuY3Rpb24oYSl7cmV0dXJuIGMrYSpsfX0oYyxhKTp3dGUoaXNOYU4oYyk/bDpjKX1jb25zdCBrTj1mdW5jdGlvbiBjKGwpe3ZhciBhPWZ1bmN0aW9uIFZTdChjKXtyZXR1cm4gMT09KGM9K2MpP0I4ZTpmdW5jdGlvbihsLGEpe3Jl'@;
put 'dHVybiBhLWw/ZnVuY3Rpb24gTlN0KGMsbCxhKXtyZXR1cm4gYz1NYXRoLnBvdyhjLGEpLGw9TWF0aC5wb3cobCxhKS1jLGE9MS9hLGZ1bmN0aW9uKGQpe3JldHVybiBNYXRoLnBvdyhjK2QqbCxhKX19KGwsYSxjKTp3dGUoaXNOYU4obCk/YTpsKX19KGwpO2Z1bmN0aW9uIGQoaCxmKXt2YXIg'@;
put 'dj1hKChoPUVOKGgpKS5yLChmPUVOKGYpKS5yKSxNPWEoaC5nLGYuZyksRD1hKGguYixmLmIpLFo9QjhlKGgub3BhY2l0eSxmLm9wYWNpdHkpO3JldHVybiBmdW5jdGlvbihyZSl7cmV0dXJuIGgucj12KHJlKSxoLmc9TShyZSksaC5iPUQocmUpLGgub3BhY2l0eT1aKHJlKSxoKyIifX1yZXR1'@;
put 'cm4gZC5nYW1tYT1jLGR9KDEpO2Z1bmN0aW9uIGo4ZShjKXtyZXR1cm4gZnVuY3Rpb24obCl7dmFyIHYsTSxhPWwubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9bmV3IEFycmF5KGEpLGY9bmV3IEFycmF5KGEpO2Zvcih2PTA7djxhOysrdilNPUVOKGxbdl0pLGRbdl09TS5yfHwwLGhbdl09TS5n'@;
put 'fHwwLGZbdl09TS5ifHwwO3JldHVybiBkPWMoZCksaD1jKGgpLGY9YyhmKSxNLm9wYWNpdHk9MSxmdW5jdGlvbihEKXtyZXR1cm4gTS5yPWQoRCksTS5nPWgoRCksTS5iPWYoRCksTSsiIn19fWo4ZShmdW5jdGlvbiBGU3QoYyl7dmFyIGw9Yy5sZW5ndGgtMTtyZXR1cm4gZnVuY3Rpb24oYSl7'@;
put 'dmFyIGQ9YTw9MD9hPTA6YT49MT8oYT0xLGwtMSk6TWF0aC5mbG9vcihhKmwpLGg9Y1tkXSxmPWNbZCsxXTtyZXR1cm4gTjhlKChhLWQvbCkqbCxkPjA/Y1tkLTFdOjIqaC1mLGgsZixkPGwtMT9jW2QrMl06MipmLWgpfX0pLGo4ZShmdW5jdGlvbiBIU3QoYyl7dmFyIGw9Yy5sZW5ndGg7cmV0'@;
put 'dXJuIGZ1bmN0aW9uKGEpe3ZhciBkPU1hdGguZmxvb3IoKChhJT0xKTwwPysrYTphKSpsKTtyZXR1cm4gTjhlKChhLWQvbCkqbCxjWyhkK2wtMSklbF0sY1tkJWxdLGNbKGQrMSklbF0sY1soZCsyKSVsXSl9fSk7dmFyIEN0ZT0vWy0rXT8oPzpcZCtcLj9cZCp8XC4/XGQrKSg/OltlRV1bLStd'@;
put 'P1xkKyk/L2csU3RlPW5ldyBSZWdFeHAoQ3RlLnNvdXJjZSwiZyIpO2Z1bmN0aW9uIHo4ZShjLGwpe3ZhciBkLGgsZixhPUN0ZS5sYXN0SW5kZXg9U3RlLmxhc3RJbmRleD0wLHY9LTEsTT1bXSxEPVtdO2ZvcihjKz0iIixsKz0iIjsoZD1DdGUuZXhlYyhjKSkmJihoPVN0ZS5leGVjKGwpKTsp'@;
put 'KGY9aC5pbmRleCk+YSYmKGY9bC5zbGljZShhLGYpLE1bdl0/TVt2XSs9ZjpNWysrdl09ZiksKGQ9ZFswXSk9PT0oaD1oWzBdKT9NW3ZdP01bdl0rPWg6TVsrK3ZdPWg6KE1bKyt2XT1udWxsLEQucHVzaCh7aTp2LHg6bDQoZCxoKX0pKSxhPVN0ZS5sYXN0SW5kZXg7cmV0dXJuIGE8bC5sZW5n'@;
put 'dGgmJihmPWwuc2xpY2UoYSksTVt2XT9NW3ZdKz1mOk1bKyt2XT1mKSxNLmxlbmd0aDwyP0RbMF0/ZnVuY3Rpb24galN0KGMpe3JldHVybiBmdW5jdGlvbihsKXtyZXR1cm4gYyhsKSsiIn19KERbMF0ueCk6ZnVuY3Rpb24gQlN0KGMpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBjfX0obCk6'@;
put 'KGw9RC5sZW5ndGgsZnVuY3Rpb24oWil7Zm9yKHZhciBjZSxyZT0wO3JlPGw7KytyZSlNWyhjZT1EW3JlXSkuaV09Y2UueChaKTtyZXR1cm4gTS5qb2luKCIiKX0pfWZ1bmN0aW9uIFU4ZShjLGwpe3ZhciBhO3JldHVybigibnVtYmVyIj09dHlwZW9mIGw/bDQ6bCBpbnN0YW5jZW9mIEo5P2tO'@;
put 'OihhPUo5KGwpKT8obD1hLGtOKTp6OGUpKGMsbCl9ZnVuY3Rpb24gelN0KGMpe3JldHVybiBmdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlKGMpfX1mdW5jdGlvbiBVU3QoYyl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyhjLnNwYWNlLGMubG9jYWwpfX1m'@;
put 'dW5jdGlvbiBaU3QoYyxsLGEpe3ZhciBkLGYsaD1hKyIiO3JldHVybiBmdW5jdGlvbigpe3ZhciB2PXRoaXMuZ2V0QXR0cmlidXRlKGMpO3JldHVybiB2PT09aD9udWxsOnY9PT1kP2Y6Zj1sKGQ9dixhKX19ZnVuY3Rpb24gV1N0KGMsbCxhKXt2YXIgZCxmLGg9YSsiIjtyZXR1cm4gZnVuY3Rp'@;
put 'b24oKXt2YXIgdj10aGlzLmdldEF0dHJpYnV0ZU5TKGMuc3BhY2UsYy5sb2NhbCk7cmV0dXJuIHY9PT1oP251bGw6dj09PWQ/ZjpmPWwoZD12LGEpfX1mdW5jdGlvbiBZU3QoYyxsLGEpe3ZhciBkLGgsZjtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdixELE09YSh0aGlzKTtyZXR1cm4gbnVsbD09'@;
put 'TT92b2lkIHRoaXMucmVtb3ZlQXR0cmlidXRlKGMpOih2PXRoaXMuZ2V0QXR0cmlidXRlKGMpKT09PShEPU0rIiIpP251bGw6dj09PWQmJkQ9PT1oP2Y6KGg9RCxmPWwoZD12LE0pKX19ZnVuY3Rpb24gR1N0KGMsbCxhKXt2YXIgZCxoLGY7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHYsRCxNPWEo'@;
put 'dGhpcyk7cmV0dXJuIG51bGw9PU0/dm9pZCB0aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKGMuc3BhY2UsYy5sb2NhbCk6KHY9dGhpcy5nZXRBdHRyaWJ1dGVOUyhjLnNwYWNlLGMubG9jYWwpKT09PShEPU0rIiIpP251bGw6dj09PWQmJkQ9PT1oP2Y6KGg9RCxmPWwoZD12LE0pKX19ZnVuY3Rpb24g'@;
put 'WFN0KGMsbCl7dmFyIGEsZDtmdW5jdGlvbiBoKCl7dmFyIGY9bC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGYhPT1kJiYoYT0oZD1mKSYmZnVuY3Rpb24gcVN0KGMsbCl7cmV0dXJuIGZ1bmN0aW9uKGEpe3RoaXMuc2V0QXR0cmlidXRlTlMoYy5zcGFjZSxjLmxvY2FsLGwuY2FsbCh0'@;
put 'aGlzLGEpKX19KGMsZikpLGF9cmV0dXJuIGguX3ZhbHVlPWwsaH1mdW5jdGlvbiBKU3QoYyxsKXt2YXIgYSxkO2Z1bmN0aW9uIGgoKXt2YXIgZj1sLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gZiE9PWQmJihhPShkPWYpJiZmdW5jdGlvbiBLU3QoYyxsKXtyZXR1cm4gZnVuY3Rpb24o'@;
put 'YSl7dGhpcy5zZXRBdHRyaWJ1dGUoYyxsLmNhbGwodGhpcyxhKSl9fShjLGYpKSxhfXJldHVybiBoLl92YWx1ZT1sLGh9ZnVuY3Rpb24gZU10KGMsbCl7cmV0dXJuIGZ1bmN0aW9uKCl7bXRlKHRoaXMsYykuZGVsYXk9K2wuYXBwbHkodGhpcyxhcmd1bWVudHMpfX1mdW5jdGlvbiB0TXQoYyxs'@;
put 'KXtyZXR1cm4gbD0rbCxmdW5jdGlvbigpe210ZSh0aGlzLGMpLmRlbGF5PWx9fWZ1bmN0aW9uIHJNdChjLGwpe3JldHVybiBmdW5jdGlvbigpe3M0KHRoaXMsYykuZHVyYXRpb249K2wuYXBwbHkodGhpcyxhcmd1bWVudHMpfX1mdW5jdGlvbiBpTXQoYyxsKXtyZXR1cm4gbD0rbCxmdW5jdGlv'@;
put 'bigpe3M0KHRoaXMsYykuZHVyYXRpb249bH19dmFyIHlNdD1xOS5wcm90b3R5cGUuY29uc3RydWN0b3I7ZnVuY3Rpb24gWjhlKGMpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkoYyl9fXZhciBITXQ9MDtmdW5jdGlvbiB1NChjLGwsYSxkKXt0aGlzLl9ncm91'@;
put 'cHM9Yyx0aGlzLl9wYXJlbnRzPWwsdGhpcy5fbmFtZT1hLHRoaXMuX2lkPWR9ZnVuY3Rpb24gTXRlKGMpe3JldHVybiBxOSgpLnRyYW5zaXRpb24oYyl9ZnVuY3Rpb24gVzhlKCl7cmV0dXJuKytITXR9dmFyIFhnPXE5LnByb3RvdHlwZTt1NC5wcm90b3R5cGU9TXRlLnByb3RvdHlwZT17Y29u'@;
put 'c3RydWN0b3I6dTQsc2VsZWN0OmZ1bmN0aW9uIHZNdChjKXt2YXIgbD10aGlzLl9uYW1lLGE9dGhpcy5faWQ7ImZ1bmN0aW9uIiE9dHlwZW9mIGMmJihjPWF0ZShjKSk7Zm9yKHZhciBkPXRoaXMuX2dyb3VwcyxoPWQubGVuZ3RoLGY9bmV3IEFycmF5KGgpLHY9MDt2PGg7Kyt2KWZvcih2YXIg'@;
put 'cmUsY2UsTT1kW3ZdLEQ9TS5sZW5ndGgsWj1mW3ZdPW5ldyBBcnJheShEKSxiZT0wO2JlPEQ7KytiZSkocmU9TVtiZV0pJiYoY2U9Yy5jYWxsKHJlLHJlLl9fZGF0YV9fLGJlLE0pKSYmKCJfX2RhdGFfXyJpbiByZSYmKGNlLl9fZGF0YV9fPXJlLl9fZGF0YV9fKSxaW2JlXT1jZSx3TihaW2Jl'@;
put 'XSxsLGEsYmUsWixDMyhyZSxhKSkpO3JldHVybiBuZXcgdTQoZix0aGlzLl9wYXJlbnRzLGwsYSl9LHNlbGVjdEFsbDpmdW5jdGlvbiBiTXQoYyl7dmFyIGw9dGhpcy5fbmFtZSxhPXRoaXMuX2lkOyJmdW5jdGlvbiIhPXR5cGVvZiBjJiYoYz1yOGUoYykpO2Zvcih2YXIgZD10aGlzLl9ncm91'@;
put 'cHMsaD1kLmxlbmd0aCxmPVtdLHY9W10sTT0wO008aDsrK00pZm9yKHZhciByZSxEPWRbTV0sWj1ELmxlbmd0aCxjZT0wO2NlPFo7KytjZSlpZihyZT1EW2NlXSl7Zm9yKHZhciBFZSxiZT1jLmNhbGwocmUscmUuX19kYXRhX18sY2UsRCksQmU9QzMocmUsYSkscWU9MCxydD1iZS5sZW5ndGg7'@;
put 'cWU8cnQ7KytxZSkoRWU9YmVbcWVdKSYmd04oRWUsbCxhLHFlLGJlLEJlKTtmLnB1c2goYmUpLHYucHVzaChyZSl9cmV0dXJuIG5ldyB1NChmLHYsbCxhKX0sc2VsZWN0Q2hpbGQ6WGcuc2VsZWN0Q2hpbGQsc2VsZWN0Q2hpbGRyZW46WGcuc2VsZWN0Q2hpbGRyZW4sZmlsdGVyOmZ1bmN0aW9u'@;
put 'IHVNdChjKXsiZnVuY3Rpb24iIT10eXBlb2YgYyYmKGM9aThlKGMpKTtmb3IodmFyIGw9dGhpcy5fZ3JvdXBzLGE9bC5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTsrK2gpZm9yKHZhciBELGY9bFtoXSx2PWYubGVuZ3RoLE09ZFtoXT1bXSxaPTA7Wjx2OysrWikoRD1mW1pdKSYmYy5j'@;
put 'YWxsKEQsRC5fX2RhdGFfXyxaLGYpJiZNLnB1c2goRCk7cmV0dXJuIG5ldyB1NChkLHRoaXMuX3BhcmVudHMsdGhpcy5fbmFtZSx0aGlzLl9pZCl9LG1lcmdlOmZ1bmN0aW9uIGRNdChjKXtpZihjLl9pZCE9PXRoaXMuX2lkKXRocm93IG5ldyBFcnJvcjtmb3IodmFyIGw9dGhpcy5fZ3JvdXBz'@;
put 'LGE9Yy5fZ3JvdXBzLGQ9bC5sZW5ndGgsZj1NYXRoLm1pbihkLGEubGVuZ3RoKSx2PW5ldyBBcnJheShkKSxNPTA7TTxmOysrTSlmb3IodmFyIGJlLEQ9bFtNXSxaPWFbTV0scmU9RC5sZW5ndGgsY2U9dltNXT1uZXcgQXJyYXkocmUpLEVlPTA7RWU8cmU7KytFZSkoYmU9RFtFZV18fFpbRWVd'@;
put 'KSYmKGNlW0VlXT1iZSk7Zm9yKDtNPGQ7KytNKXZbTV09bFtNXTtyZXR1cm4gbmV3IHU0KHYsdGhpcy5fcGFyZW50cyx0aGlzLl9uYW1lLHRoaXMuX2lkKX0sc2VsZWN0aW9uOmZ1bmN0aW9uIF9NdCgpe3JldHVybiBuZXcgeU10KHRoaXMuX2dyb3Vwcyx0aGlzLl9wYXJlbnRzKX0sdHJhbnNp'@;
put 'dGlvbjpmdW5jdGlvbiBQTXQoKXtmb3IodmFyIGM9dGhpcy5fbmFtZSxsPXRoaXMuX2lkLGE9VzhlKCksZD10aGlzLl9ncm91cHMsaD1kLmxlbmd0aCxmPTA7ZjxoOysrZilmb3IodmFyIEQsdj1kW2ZdLE09di5sZW5ndGgsWj0wO1o8TTsrK1opaWYoRD12W1pdKXt2YXIgcmU9QzMoRCxsKTt3'@;
put 'TihELGMsYSxaLHYse3RpbWU6cmUudGltZStyZS5kZWxheStyZS5kdXJhdGlvbixkZWxheTowLGR1cmF0aW9uOnJlLmR1cmF0aW9uLGVhc2U6cmUuZWFzZX0pfXJldHVybiBuZXcgdTQoZCx0aGlzLl9wYXJlbnRzLGMsYSl9LGNhbGw6WGcuY2FsbCxub2RlczpYZy5ub2Rlcyxub2RlOlhnLm5v'@;
put 'ZGUsc2l6ZTpYZy5zaXplLGVtcHR5OlhnLmVtcHR5LGVhY2g6WGcuZWFjaCxvbjpmdW5jdGlvbiBwTXQoYyxsKXt2YXIgYT10aGlzLl9pZDtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwyP0MzKHRoaXMubm9kZSgpLGEpLm9uLm9uKGMpOnRoaXMuZWFjaChmdW5jdGlvbiBmTXQoYyxsLGEpe3Zh'@;
put 'ciBkLGgsZj1mdW5jdGlvbiBoTXQoYyl7cmV0dXJuKGMrIiIpLnRyaW0oKS5zcGxpdCgvXnxccysvKS5ldmVyeShmdW5jdGlvbihsKXt2YXIgYT1sLmluZGV4T2YoIi4iKTtyZXR1cm4gYT49MCYmKGw9bC5zbGljZSgwLGEpKSwhbHx8InN0YXJ0Ij09PWx9KX0obCk/bXRlOnM0O3JldHVybiBm'@;
put 'dW5jdGlvbigpe3ZhciB2PWYodGhpcyxjKSxNPXYub247TSE9PWQmJihoPShkPU0pLmNvcHkoKSkub24obCxhKSx2Lm9uPWh9fShhLGMsbCkpfSxhdHRyOmZ1bmN0aW9uICRTdChjLGwpe3ZhciBhPWhOKGMpLGQ9InRyYW5zZm9ybSI9PT1hP1Q4ZTpVOGU7cmV0dXJuIHRoaXMuYXR0clR3ZWVu'@;
put 'KGMsImZ1bmN0aW9uIj09dHlwZW9mIGw/KGEubG9jYWw/R1N0OllTdCkoYSxkLGJ0ZSh0aGlzLCJhdHRyLiIrYyxsKSk6bnVsbD09bD8oYS5sb2NhbD9VU3Q6elN0KShhKTooYS5sb2NhbD9XU3Q6WlN0KShhLGQsbCkpfSxhdHRyVHdlZW46ZnVuY3Rpb24gUVN0KGMsbCl7dmFyIGE9ImF0dHIu'@;
put 'IitjO2lmKGFyZ3VtZW50cy5sZW5ndGg8MilyZXR1cm4oYT10aGlzLnR3ZWVuKGEpKSYmYS5fdmFsdWU7aWYobnVsbD09bClyZXR1cm4gdGhpcy50d2VlbihhLG51bGwpO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBsKXRocm93IG5ldyBFcnJvcjt2YXIgZD1oTihjKTtyZXR1cm4gdGhpcy50d2Vl'@;
put 'bihhLChkLmxvY2FsP1hTdDpKU3QpKGQsbCkpfSxzdHlsZTpmdW5jdGlvbiB4TXQoYyxsLGEpe3ZhciBkPSJ0cmFuc2Zvcm0iPT0oYys9IiIpP19TdDpVOGU7cmV0dXJuIG51bGw9PWw/dGhpcy5zdHlsZVR3ZWVuKGMsZnVuY3Rpb24gd010KGMsbCl7dmFyIGEsZCxoO3JldHVybiBmdW5jdGlv'@;
put 'bigpe3ZhciBmPUV3KHRoaXMsYyksdj0odGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eShjKSxFdyh0aGlzLGMpKTtyZXR1cm4gZj09PXY/bnVsbDpmPT09YSYmdj09PWQ/aDpoPWwoYT1mLGQ9dil9fShjLGQpKS5vbigiZW5kLnN0eWxlLiIrYyxaOGUoYykpOiJmdW5jdGlvbiI9PXR5cGVvZiBs'@;
put 'P3RoaXMuc3R5bGVUd2VlbihjLGZ1bmN0aW9uIFNNdChjLGwsYSl7dmFyIGQsaCxmO3JldHVybiBmdW5jdGlvbigpe3ZhciB2PUV3KHRoaXMsYyksTT1hKHRoaXMpLEQ9TSsiIjtyZXR1cm4gbnVsbD09TSYmKHRoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkoYyksRD1NPUV3KHRoaXMsYykpLHY9'@;
put 'PT1EP251bGw6dj09PWQmJkQ9PT1oP2Y6KGg9RCxmPWwoZD12LE0pKX19KGMsZCxidGUodGhpcywic3R5bGUuIitjLGwpKSkuZWFjaChmdW5jdGlvbiBNTXQoYyxsKXt2YXIgYSxkLGgsTSxmPSJzdHlsZS4iK2wsdj0iZW5kLiIrZjtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgRD1zNCh0aGlzLGMp'@;
put 'LFo9RC5vbixyZT1udWxsPT1ELnZhbHVlW2ZdP018fChNPVo4ZShsKSk6dm9pZCAwOyhaIT09YXx8aCE9PXJlKSYmKGQ9KGE9WikuY29weSgpKS5vbih2LGg9cmUpLEQub249ZH19KHRoaXMuX2lkLGMpKTp0aGlzLnN0eWxlVHdlZW4oYyxmdW5jdGlvbiBDTXQoYyxsLGEpe3ZhciBkLGYsaD1h'@;
put 'KyIiO3JldHVybiBmdW5jdGlvbigpe3ZhciB2PUV3KHRoaXMsYyk7cmV0dXJuIHY9PT1oP251bGw6dj09PWQ/ZjpmPWwoZD12LGEpfX0oYyxkLGwpLGEpLm9uKCJlbmQuc3R5bGUuIitjLG51bGwpfSxzdHlsZVR3ZWVuOmZ1bmN0aW9uIEFNdChjLGwsYSl7dmFyIGQ9InN0eWxlLiIrKGMrPSIi'@;
put 'KTtpZihhcmd1bWVudHMubGVuZ3RoPDIpcmV0dXJuKGQ9dGhpcy50d2VlbihkKSkmJmQuX3ZhbHVlO2lmKG51bGw9PWwpcmV0dXJuIHRoaXMudHdlZW4oZCxudWxsKTtpZigiZnVuY3Rpb24iIT10eXBlb2YgbCl0aHJvdyBuZXcgRXJyb3I7cmV0dXJuIHRoaXMudHdlZW4oZCxmdW5jdGlvbiBU'@;
put 'TXQoYyxsLGEpe3ZhciBkLGg7ZnVuY3Rpb24gZigpe3ZhciB2PWwuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiB2IT09aCYmKGQ9KGg9dikmJmZ1bmN0aW9uIEVNdChjLGwsYSl7cmV0dXJuIGZ1bmN0aW9uKGQpe3RoaXMuc3R5bGUuc2V0UHJvcGVydHkoYyxsLmNhbGwodGhpcyxkKSxh'@;
put 'KX19KGMsdixhKSksZH1yZXR1cm4gZi5fdmFsdWU9bCxmfShjLGwsYT8/IiIpKX0sdGV4dDpmdW5jdGlvbiBJTXQoYyl7cmV0dXJuIHRoaXMudHdlZW4oInRleHQiLCJmdW5jdGlvbiI9PXR5cGVvZiBjP2Z1bmN0aW9uIERNdChjKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbD1jKHRoaXMpO3Ro'@;
put 'aXMudGV4dENvbnRlbnQ9bD8/IiJ9fShidGUodGhpcywidGV4dCIsYykpOmZ1bmN0aW9uIGtNdChjKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnRleHRDb250ZW50PWN9fShudWxsPT1jPyIiOmMrIiIpKX0sdGV4dFR3ZWVuOmZ1bmN0aW9uIE9NdChjKXt2YXIgbD0idGV4dCI7aWYoYXJndW1l'@;
put 'bnRzLmxlbmd0aDwxKXJldHVybihsPXRoaXMudHdlZW4obCkpJiZsLl92YWx1ZTtpZihudWxsPT1jKXJldHVybiB0aGlzLnR3ZWVuKGwsbnVsbCk7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGMpdGhyb3cgbmV3IEVycm9yO3JldHVybiB0aGlzLnR3ZWVuKGwsZnVuY3Rpb24gTE10KGMpe3ZhciBs'@;
put 'LGE7ZnVuY3Rpb24gZCgpe3ZhciBoPWMuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBoIT09YSYmKGw9KGE9aCkmJmZ1bmN0aW9uIFJNdChjKXtyZXR1cm4gZnVuY3Rpb24obCl7dGhpcy50ZXh0Q29udGVudD1jLmNhbGwodGhpcyxsKX19KGgpKSxsfXJldHVybiBkLl92YWx1ZT1jLGR9'@;
put 'KGMpKX0scmVtb3ZlOmZ1bmN0aW9uIG1NdCgpe3JldHVybiB0aGlzLm9uKCJlbmQucmVtb3ZlIixmdW5jdGlvbiBnTXQoYyl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGw9dGhpcy5wYXJlbnROb2RlO2Zvcih2YXIgYSBpbiB0aGlzLl9fdHJhbnNpdGlvbilpZigrYSE9PWMpcmV0dXJuO2wmJmwu'@;
put 'cmVtb3ZlQ2hpbGQodGhpcyl9fSh0aGlzLl9pZCkpfSx0d2VlbjpmdW5jdGlvbiBTU3QoYyxsKXt2YXIgYT10aGlzLl9pZDtpZihjKz0iIixhcmd1bWVudHMubGVuZ3RoPDIpe2Zvcih2YXIgdixkPUMzKHRoaXMubm9kZSgpLGEpLnR3ZWVuLGg9MCxmPWQubGVuZ3RoO2g8ZjsrK2gpaWYoKHY9'@;
put 'ZFtoXSkubmFtZT09PWMpcmV0dXJuIHYudmFsdWU7cmV0dXJuIG51bGx9cmV0dXJuIHRoaXMuZWFjaCgobnVsbD09bD93U3Q6Q1N0KShhLGMsbCkpfSxkZWxheTpmdW5jdGlvbiBuTXQoYyl7dmFyIGw9dGhpcy5faWQ7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKCgiZnVuY3Rp'@;
put 'b24iPT10eXBlb2YgYz9lTXQ6dE10KShsLGMpKTpDMyh0aGlzLm5vZGUoKSxsKS5kZWxheX0sZHVyYXRpb246ZnVuY3Rpb24gYU10KGMpe3ZhciBsPXRoaXMuX2lkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaCgoImZ1bmN0aW9uIj09dHlwZW9mIGM/ck10OmlNdCkobCxjKSk6'@;
put 'QzModGhpcy5ub2RlKCksbCkuZHVyYXRpb259LGVhc2U6ZnVuY3Rpb24gc010KGMpe3ZhciBsPXRoaXMuX2lkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaChmdW5jdGlvbiBvTXQoYyxsKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgbCl0aHJvdyBuZXcgRXJyb3I7cmV0dXJuIGZ1'@;
put 'bmN0aW9uKCl7czQodGhpcyxjKS5lYXNlPWx9fShsLGMpKTpDMyh0aGlzLm5vZGUoKSxsKS5lYXNlfSxlYXNlVmFyeWluZzpmdW5jdGlvbiBjTXQoYyl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGMpdGhyb3cgbmV3IEVycm9yO3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24gbE10KGMsbCl7cmV0'@;
put 'dXJuIGZ1bmN0aW9uKCl7dmFyIGE9bC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGEpdGhyb3cgbmV3IEVycm9yO3M0KHRoaXMsYykuZWFzZT1hfX0odGhpcy5faWQsYykpfSxlbmQ6ZnVuY3Rpb24gRk10KCl7dmFyIGMsbCxhPXRoaXMsZD1hLl9pZCxoPWEu'@;
put 'c2l6ZSgpO3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihmLHYpe3ZhciBNPXt2YWx1ZTp2fSxEPXt2YWx1ZTpmdW5jdGlvbigpezA9PS0taCYmZigpfX07YS5lYWNoKGZ1bmN0aW9uKCl7dmFyIFo9czQodGhpcyxkKSxyZT1aLm9uO3JlIT09YyYmKChsPShjPXJlKS5jb3B5KCkpLl8uY2Fu'@;
put 'Y2VsLnB1c2goTSksbC5fLmludGVycnVwdC5wdXNoKE0pLGwuXy5lbmQucHVzaChEKSksWi5vbj1sfSksMD09PWgmJmYoKX0pfSxbU3ltYm9sLml0ZXJhdG9yXTpYZ1tTeW1ib2wuaXRlcmF0b3JdfTt2YXIgVk10PXt0aW1lOm51bGwsZGVsYXk6MCxkdXJhdGlvbjoyNTAsZWFzZTpmdW5jdGlv'@;
put 'biBOTXQoYyl7cmV0dXJuKChjKj0yKTw9MT9jKmMqYzooYy09MikqYypjKzIpLzJ9fTtmdW5jdGlvbiBCTXQoYyxsKXtmb3IodmFyIGE7IShhPWMuX190cmFuc2l0aW9uKXx8IShhPWFbbF0pOylpZighKGM9Yy5wYXJlbnROb2RlKSl0aHJvdyBuZXcgRXJyb3IoYHRyYW5zaXRpb24gJHtsfSBu'@;
put 'b3QgZm91bmRgKTtyZXR1cm4gYX1xOS5wcm90b3R5cGUuaW50ZXJydXB0PWZ1bmN0aW9uIHZTdChjKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7Q04odGhpcyxjKX0pfSxxOS5wcm90b3R5cGUudHJhbnNpdGlvbj1mdW5jdGlvbiBqTXQoYyl7dmFyIGwsYTtjIGluc3RhbmNlb2YgdTQ/'@;
put 'KGw9Yy5faWQsYz1jLl9uYW1lKToobD1XOGUoKSwoYT1WTXQpLnRpbWU9ZHRlKCksYz1udWxsPT1jP251bGw6YysiIik7Zm9yKHZhciBkPXRoaXMuX2dyb3VwcyxoPWQubGVuZ3RoLGY9MDtmPGg7KytmKWZvcih2YXIgRCx2PWRbZl0sTT12Lmxlbmd0aCxaPTA7WjxNOysrWikoRD12W1pdKSYm'@;
put 'd04oRCxjLGwsWix2LGF8fEJNdChELGwpKTtyZXR1cm4gbmV3IHU0KGQsdGhpcy5fcGFyZW50cyxjLGwpfTt2YXIgek10PVtudWxsXTtjb25zdCB4dGU9e2NhcHR1cmU6ITAscGFzc2l2ZTohMX07ZnVuY3Rpb24gRXRlKGMpe2MucHJldmVudERlZmF1bHQoKSxjLnN0b3BJbW1lZGlhdGVQcm9w'@;
put 'YWdhdGlvbigpfWZ1bmN0aW9uIFk4ZShjKXtyZXR1cm4oKGM9TWF0aC5leHAoYykpKzEvYykvMn1jb25zdCBLTXQ9ZnVuY3Rpb24gYyhsLGEsZCl7ZnVuY3Rpb24gaChmLHYpe3ZhciBydCxwdCxNPWZbMF0sRD1mWzFdLFo9ZlsyXSxiZT12WzJdLEVlPXZbMF0tTSxCZT12WzFdLUQscWU9RWUq'@;
put 'RWUrQmUqQmU7aWYocWU8MWUtMTIpcHQ9TWF0aC5sb2coYmUvWikvbCxydD1mdW5jdGlvbihNbil7cmV0dXJuW00rTW4qRWUsRCtNbipCZSxaKk1hdGguZXhwKGwqTW4qcHQpXX07ZWxzZXt2YXIgZHQ9TWF0aC5zcXJ0KHFlKSxKdD0oYmUqYmUtWipaK2QqcWUpLygyKloqYSpkdCksdm49KGJl'@;
put 'KmJlLVoqWi1kKnFlKS8oMipiZSphKmR0KSxDbj1NYXRoLmxvZyhNYXRoLnNxcnQoSnQqSnQrMSktSnQpLHRuPU1hdGgubG9nKE1hdGguc3FydCh2bip2bisxKS12bik7cHQ9KHRuLUNuKS9sLHJ0PWZ1bmN0aW9uKE1uKXt2YXIgQ3I9TW4qcHQsR3I9WThlKENuKSxtcj1aLyhhKmR0KSooR3Iq'@;
put 'ZnVuY3Rpb24gJE10KGMpe3JldHVybigoYz1NYXRoLmV4cCgyKmMpKS0xKS8oYysxKX0obCpDcitDbiktZnVuY3Rpb24gR010KGMpe3JldHVybigoYz1NYXRoLmV4cChjKSktMS9jKS8yfShDbikpO3JldHVybltNK21yKkVlLEQrbXIqQmUsWipHci9ZOGUobCpDcitDbildfX1yZXR1cm4gcnQu'@;
put 'ZHVyYXRpb249MWUzKnB0KmwvTWF0aC5TUVJUMixydH1yZXR1cm4gaC5yaG89ZnVuY3Rpb24oZil7dmFyIHY9TWF0aC5tYXgoLjAwMSwrZiksTT12KnY7cmV0dXJuIGModixNLE0qTSl9LGh9KE1hdGguU1FSVDIsMiw0KTtmdW5jdGlvbiB0dihjLGwpe2lmKGM9ZnVuY3Rpb24gcU10KGMpe2xl'@;
put 'dCBsO2Zvcig7bD1jLnNvdXJjZUV2ZW50OyljPWw7cmV0dXJuIGN9KGMpLHZvaWQgMD09PWwmJihsPWMuY3VycmVudFRhcmdldCksbCl7dmFyIGE9bC5vd25lclNWR0VsZW1lbnR8fGw7aWYoYS5jcmVhdGVTVkdQb2ludCl7dmFyIGQ9YS5jcmVhdGVTVkdQb2ludCgpO3JldHVybiBkLng9Yy5j'@;
put 'bGllbnRYLGQueT1jLmNsaWVudFksWyhkPWQubWF0cml4VHJhbnNmb3JtKGwuZ2V0U2NyZWVuQ1RNKCkuaW52ZXJzZSgpKSkueCxkLnldfWlmKGwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KXt2YXIgaD1sLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3JldHVybltjLmNsaWVudFgtaC5sZWZ0LWwu'@;
put 'Y2xpZW50TGVmdCxjLmNsaWVudFktaC50b3AtbC5jbGllbnRUb3BdfX1yZXR1cm5bYy5wYWdlWCxjLnBhZ2VZXX1jb25zdCBETj1jPT4oKT0+YztmdW5jdGlvbiBYTXQoYyx7c291cmNlRXZlbnQ6bCx0YXJnZXQ6YSx0cmFuc2Zvcm06ZCxkaXNwYXRjaDpofSl7T2JqZWN0LmRlZmluZVByb3Bl'@;
put 'cnRpZXModGhpcyx7dHlwZTp7dmFsdWU6YyxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0sc291cmNlRXZlbnQ6e3ZhbHVlOmwsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9LHRhcmdldDp7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0sdHJhbnNmb3Jt'@;
put 'Ont2YWx1ZTpkLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSxfOnt2YWx1ZTpofX0pfWZ1bmN0aW9uIEpnKGMsbCxhKXt0aGlzLms9Yyx0aGlzLng9bCx0aGlzLnk9YX1KZy5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOkpnLHNjYWxlOmZ1bmN0aW9uKGMpe3JldHVybiAxPT09Yz90aGlz'@;
put 'Om5ldyBKZyh0aGlzLmsqYyx0aGlzLngsdGhpcy55KX0sdHJhbnNsYXRlOmZ1bmN0aW9uKGMsbCl7cmV0dXJuIDA9PT1jJjA9PT1sP3RoaXM6bmV3IEpnKHRoaXMuayx0aGlzLngrdGhpcy5rKmMsdGhpcy55K3RoaXMuaypsKX0sYXBwbHk6ZnVuY3Rpb24oYyl7cmV0dXJuW2NbMF0qdGhpcy5r'@;
put 'K3RoaXMueCxjWzFdKnRoaXMuayt0aGlzLnldfSxhcHBseVg6ZnVuY3Rpb24oYyl7cmV0dXJuIGMqdGhpcy5rK3RoaXMueH0sYXBwbHlZOmZ1bmN0aW9uKGMpe3JldHVybiBjKnRoaXMuayt0aGlzLnl9LGludmVydDpmdW5jdGlvbihjKXtyZXR1cm5bKGNbMF0tdGhpcy54KS90aGlzLmssKGNb'@;
put 'MV0tdGhpcy55KS90aGlzLmtdfSxpbnZlcnRYOmZ1bmN0aW9uKGMpe3JldHVybihjLXRoaXMueCkvdGhpcy5rfSxpbnZlcnRZOmZ1bmN0aW9uKGMpe3JldHVybihjLXRoaXMueSkvdGhpcy5rfSxyZXNjYWxlWDpmdW5jdGlvbihjKXtyZXR1cm4gYy5jb3B5KCkuZG9tYWluKGMucmFuZ2UoKS5t'@;
put 'YXAodGhpcy5pbnZlcnRYLHRoaXMpLm1hcChjLmludmVydCxjKSl9LHJlc2NhbGVZOmZ1bmN0aW9uKGMpe3JldHVybiBjLmNvcHkoKS5kb21haW4oYy5yYW5nZSgpLm1hcCh0aGlzLmludmVydFksdGhpcykubWFwKGMuaW52ZXJ0LGMpKX0sdG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4idHJh'@;
put 'bnNsYXRlKCIrdGhpcy54KyIsIit0aGlzLnkrIikgc2NhbGUoIit0aGlzLmsrIikifX07dmFyIElOPW5ldyBKZygxLDAsMCk7ZnVuY3Rpb24gUk4oYyl7Zm9yKDshYy5fX3pvb207KWlmKCEoYz1jLnBhcmVudE5vZGUpKXJldHVybiBJTjtyZXR1cm4gYy5fX3pvb219ZnVuY3Rpb24gVHRlKGMp'@;
put 'e2Muc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCl9ZnVuY3Rpb24gTEEoYyl7Yy5wcmV2ZW50RGVmYXVsdCgpLGMuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCl9ZnVuY3Rpb24gSk10KGMpe3JldHVybiEoYy5jdHJsS2V5JiYid2hlZWwiIT09Yy50eXBlfHxjLmJ1dHRvbil9ZnVuY3Rpb24g'@;
put 'UU10KCl7dmFyIGM9dGhpcztyZXR1cm4gYyBpbnN0YW5jZW9mIFNWR0VsZW1lbnQ/KGM9Yy5vd25lclNWR0VsZW1lbnR8fGMpLmhhc0F0dHJpYnV0ZSgidmlld0JveCIpP1tbKGM9Yy52aWV3Qm94LmJhc2VWYWwpLngsYy55XSxbYy54K2Mud2lkdGgsYy55K2MuaGVpZ2h0XV06W1swLDBdLFtj'@;
put 'LndpZHRoLmJhc2VWYWwudmFsdWUsYy5oZWlnaHQuYmFzZVZhbC52YWx1ZV1dOltbMCwwXSxbYy5jbGllbnRXaWR0aCxjLmNsaWVudEhlaWdodF1dfWZ1bmN0aW9uIEc4ZSgpe3JldHVybiB0aGlzLl9fem9vbXx8SU59ZnVuY3Rpb24gZXh0KGMpe3JldHVybi1jLmRlbHRhWSooMT09PWMuZGVs'@;
put 'dGFNb2RlPy4wNTpjLmRlbHRhTW9kZT8xOi4wMDIpKihjLmN0cmxLZXk/MTA6MSl9ZnVuY3Rpb24gdHh0KCl7cmV0dXJuIG5hdmlnYXRvci5tYXhUb3VjaFBvaW50c3x8Im9udG91Y2hzdGFydCJpbiB0aGlzfWZ1bmN0aW9uIG54dChjLGwsYSl7dmFyIGQ9Yy5pbnZlcnRYKGxbMF1bMF0pLWFb'@;
put 'MF1bMF0saD1jLmludmVydFgobFsxXVswXSktYVsxXVswXSxmPWMuaW52ZXJ0WShsWzBdWzFdKS1hWzBdWzFdLHY9Yy5pbnZlcnRZKGxbMV1bMV0pLWFbMV1bMV07cmV0dXJuIGMudHJhbnNsYXRlKGg+ZD8oZCtoKS8yOk1hdGgubWluKDAsZCl8fE1hdGgubWF4KDAsaCksdj5mPyhmK3YpLzI6'@;
put 'TWF0aC5taW4oMCxmKXx8TWF0aC5tYXgoMCx2KSl9ZnVuY3Rpb24gJDhlKGMpe3ZhciBsPXt9LGE9Yy5ub2RlKCkubm9kZU5hbWU7bC50YWc9YSwiI3RleHQiPT1hP2wudGV4dD1jLnRleHQoKToiI2NvbW1lbnQiPT1hJiYobC5jb21tZW50PWMudGV4dCgpKSxsLmF0dHJpYnV0ZXM9e307dmFy'@;
put 'IGQ9Yy5ub2RlKCkuYXR0cmlidXRlcztpZihkKWZvcih2YXIgaD0wO2g8ZC5sZW5ndGg7aCsrKXt2YXIgZj1kW2hdO2wuYXR0cmlidXRlc1tmLm5hbWVdPWYudmFsdWV9dmFyIHJlLEQ9Yy5ub2RlKCkudHJhbnNmb3JtO2lmKEQmJjAhPUQuYmFzZVZhbC5udW1iZXJPZkl0ZW1zKXt2YXIgWj1E'@;
put 'LmJhc2VWYWwuY29uc29saWRhdGUoKS5tYXRyaXg7bC50cmFuc2xhdGlvbj17eDpaLmUseTpaLmZ9LGwuc2NhbGU9Wi5hfWlmKCJlbGxpcHNlIj09YSYmKGwuY2VudGVyPXt4OmwuYXR0cmlidXRlcy5jeCx5OmwuYXR0cmlidXRlcy5jeX0pLCJwb2x5Z29uIj09YSl7dmFyIGNlPShyZT1jLmF0'@;
put 'dHIoInBvaW50cyIpLnNwbGl0KCIgIikpLm1hcChmdW5jdGlvbihKdCl7cmV0dXJuIEp0LnNwbGl0KCIsIilbMF19KSxiZT1yZS5tYXAoZnVuY3Rpb24oSnQpe3JldHVybiBKdC5zcGxpdCgiLCIpWzFdfSksRWU9TWF0aC5taW4uYXBwbHkobnVsbCxjZSksQmU9TWF0aC5tYXguYXBwbHkobnVs'@;
put 'bCxjZSkscWU9TWF0aC5taW4uYXBwbHkobnVsbCxiZSkscnQ9TWF0aC5tYXguYXBwbHkobnVsbCxiZSk7bC5iYm94PXt4OkVlLHk6cWUsd2lkdGg6QmUtRWUsaGVpZ2h0OnJ0LXFlfSxsLmNlbnRlcj17eDooRWUrQmUpLzIseToocWUrcnQpLzJ9fSJwYXRoIj09YSYmKChyZT1jLmF0dHIoImQi'@;
put 'KS5zcGxpdCgvW0EtWiBdLykpLnNoaWZ0KCksY2U9cmUubWFwKGZ1bmN0aW9uKEduKXtyZXR1cm4rR24uc3BsaXQoIiwiKVswXX0pLGJlPXJlLm1hcChmdW5jdGlvbihHbil7cmV0dXJuK0duLnNwbGl0KCIsIilbMV19KSxFZT1NYXRoLm1pbi5hcHBseShudWxsLGNlKSxCZT1NYXRoLm1heC5h'@;
put 'cHBseShudWxsLGNlKSxxZT1NYXRoLm1pbi5hcHBseShudWxsLGJlKSxydD1NYXRoLm1heC5hcHBseShudWxsLGJlKSxsLmJib3g9e3g6RWUseTpxZSx3aWR0aDpCZS1FZSxoZWlnaHQ6cnQtcWV9LGwuY2VudGVyPXt4OihFZStCZSkvMix5OihxZStydCkvMn0sbC50b3RhbExlbmd0aD1jLm5v'@;
put 'ZGUoKS5nZXRUb3RhbExlbmd0aCgpKTtyZXR1cm4idGV4dCI9PWEmJihsLmNlbnRlcj17eDpjLmF0dHIoIngiKSx5OmMuYXR0cigieSIpfSksIiN0ZXh0Ij09YT9sLnRleHQ9Yy50ZXh0KCk6IiNjb21tZW50Ij09YSYmKGwuY29tbWVudD1jLnRleHQoKSksbH1mdW5jdGlvbiBudihjKXt2YXIg'@;
put 'bD0kOGUoYyk7cmV0dXJuIGwuY2hpbGRyZW49W10sY3RlKGMubm9kZSgpLmNoaWxkTm9kZXMpLmVhY2goZnVuY3Rpb24oKXt2YXIgZD1udih3cyh0aGlzKSk7ZC5wYXJlbnQ9bCxsLmNoaWxkcmVuLnB1c2goZCl9KSxsfWZ1bmN0aW9uIEF0ZShjKXtyZXR1cm4iI3RleHQiPT1jLnRhZz9kb2N1'@;
put 'bWVudC5jcmVhdGVUZXh0Tm9kZSgiIik6IiNjb21tZW50Ij09Yy50YWc/ZG9jdW1lbnQuY3JlYXRlQ29tbWVudChjLmNvbW1lbnQpOmRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLGMudGFnKX1mdW5jdGlvbiBrdGUoYyl7dmFyIGw9QXRlKGMp'@;
put 'LGE9d3MobCksZD1jLmF0dHJpYnV0ZXM7Zm9yKHZhciBoIG9mIE9iamVjdC5rZXlzKGQpKWEuYXR0cihoLGRbaF0pO3JldHVybiBsfWZ1bmN0aW9uIEs4ZShjLGwpe3ZhciBhPXdzKGMubm9kZSgpLnBhcmVudE5vZGUpLGQ9a3RlKGwpLGg9YS5pbnNlcnQoZnVuY3Rpb24oKXtyZXR1cm4gZH0s'@;
put 'ZnVuY3Rpb24oKXtyZXR1cm4gYy5ub2RlKCl9KTtyZXR1cm4gYy5yZW1vdmUoKSxofWZ1bmN0aW9uIER0ZShjLGwpeyFmdW5jdGlvbiBpeHQoYyxsKXtjLmRhdHVtKGwpLGMuZGF0YShbbF0sZnVuY3Rpb24oYSl7cmV0dXJuIGEua2V5fSl9KGMsbCksY3RlKGMubm9kZSgpLmNoaWxkTm9kZXMp'@;
put 'LmVhY2goZnVuY3Rpb24oZCxoKXtEdGUod3ModGhpcyksbC5jaGlsZHJlbltoXSl9KX1mdW5jdGlvbiBPQShjLGw9MCl7dmFyIGE9d3ModGhpcyksaD1jLmF0dHJpYnV0ZXMsZj1hLm5vZGUoKS5hdHRyaWJ1dGVzO2lmKGYpZm9yKHZhciB2PTA7djxmLmxlbmd0aDt2Kyspe3ZhciBNPWZbdl0s'@;
put 'RD1NLm5hbWU7aWYoInhtbG5zIiE9RC5zcGxpdCgiOiIpWzBdJiZNLm5hbWVzcGFjZVVSSSl7dmFyIFo9TS5uYW1lc3BhY2VVUkkuc3BsaXQoIi8iKTtEPVpbWi5sZW5ndGgtMV0rIjoiK0R9RCBpbiBofHwoaFtEXT1udWxsKX1mb3IodmFyIGNlIG9mIE9iamVjdC5rZXlzKGgpKWEuYXR0cihj'@;
put 'ZSxoW2NlXSk7Yy50ZXh0JiZhLnRleHQoYy50ZXh0KSxmdW5jdGlvbiBheHQoYyxsKXt2YXIgYT1jLnNlbGVjdEFsbChmdW5jdGlvbigpe3JldHVybiBjLm5vZGUoKS5jaGlsZE5vZGVzfSksZD0oYT1hLmRhdGEoZnVuY3Rpb24odil7cmV0dXJuIHYuY2hpbGRyZW59LGZ1bmN0aW9uKHYpe3Jl'@;
put 'dHVybiB2LnRhZysiLSIrbH0pKS5lbnRlcigpLmFwcGVuZChmdW5jdGlvbih2KXtyZXR1cm4gQXRlKHYpfSksaD1hLmV4aXQoKTtoPWgucmVtb3ZlKCksYT1kLm1lcmdlKGEpO3ZhciBmPXt9O2EuZWFjaChmdW5jdGlvbih2KXt2YXIgTT12LnRhZztudWxsPT1mW01dJiYoZltNXT0wKTt2YXIg'@;
put 'RD1mW01dKys7T0EuY2FsbCh0aGlzLHYsRCl9KX0oYSxsKX1mdW5jdGlvbiBxOGUoYyxsKXt2YXIgdixhPWw/bC5sZW5ndGg6MCxkPWM/TWF0aC5taW4oYSxjLmxlbmd0aCk6MCxoPW5ldyBBcnJheShkKSxmPW5ldyBBcnJheShhKTtmb3Iodj0wO3Y8ZDsrK3YpaFt2XT1MTihjW3ZdLGxbdl0p'@;
put 'O2Zvcig7djxhOysrdilmW3ZdPWxbdl07cmV0dXJuIGZ1bmN0aW9uKE0pe2Zvcih2PTA7djxkOysrdilmW3ZdPWhbdl0oTSk7cmV0dXJuIGZ9fWZ1bmN0aW9uIG94dChjLGwpe3ZhciBhPW5ldyBEYXRlO3JldHVybiBjPStjLGw9K2wsZnVuY3Rpb24oZCl7cmV0dXJuIGEuc2V0VGltZShjKigx'@;
put 'LWQpK2wqZCksYX19ZnVuY3Rpb24gc3h0KGMsbCl7dmFyIGgsYT17fSxkPXt9O2ZvcihoIGluKG51bGw9PT1jfHwib2JqZWN0IiE9dHlwZW9mIGMpJiYoYz17fSksKG51bGw9PT1sfHwib2JqZWN0IiE9dHlwZW9mIGwpJiYobD17fSksbCloIGluIGM/YVtoXT1MTihjW2hdLGxbaF0pOmRbaF09'@;
put 'bFtoXTtyZXR1cm4gZnVuY3Rpb24oZil7Zm9yKGggaW4gYSlkW2hdPWFbaF0oZik7cmV0dXJuIGR9fWZ1bmN0aW9uIGx4dChjLGwpe2x8fChsPVtdKTt2YXIgaCxhPWM/TWF0aC5taW4obC5sZW5ndGgsYy5sZW5ndGgpOjAsZD1sLnNsaWNlKCk7cmV0dXJuIGZ1bmN0aW9uKGYpe2ZvcihoPTA7'@;
put 'aDxhOysraClkW2hdPWNbaF0qKDEtZikrbFtoXSpmO3JldHVybiBkfX1mdW5jdGlvbiBMTihjLGwpe3ZhciBkLGE9dHlwZW9mIGw7cmV0dXJuIG51bGw9PWx8fCJib29sZWFuIj09PWE/d3RlKGwpOigibnVtYmVyIj09PWE/bDQ6InN0cmluZyI9PT1hPyhkPUo5KGwpKT8obD1kLGtOKTp6OGU6'@;
put 'bCBpbnN0YW5jZW9mIEo5P2tOOmwgaW5zdGFuY2VvZiBEYXRlP294dDpmdW5jdGlvbiBjeHQoYyl7cmV0dXJuIEFycmF5QnVmZmVyLmlzVmlldyhjKSYmIShjIGluc3RhbmNlb2YgRGF0YVZpZXcpfShsKT9seHQ6QXJyYXkuaXNBcnJheShsKT9xOGU6ImZ1bmN0aW9uIiE9dHlwZW9mIGwudmFs'@;
put 'dWVPZiYmImZ1bmN0aW9uIiE9dHlwZW9mIGwudG9TdHJpbmd8fGlzTmFOKGwpP3N4dDpsNCkoYyxsKX1mdW5jdGlvbiBYOGUoKXt2YXIgYz10aGlzLGQ9d3ModGhpcy5fc2VsZWN0aW9uLm5vZGUoKS5xdWVyeVNlbGVjdG9yKCJzdmciKSk7aWYoMD09ZC5zaXplKCkpcmV0dXJuIHRoaXM7dGhp'@;
put 'cy5fem9vbVNlbGVjdGlvbj1kO3ZhciBoPWZ1bmN0aW9uIHJ4dCgpe3ZhciByZSxjZSxiZSxjPUpNdCxsPVFNdCxhPW54dCxkPWV4dCxoPXR4dCxmPVswLDEvMF0sdj1bWy0xLzAsLTEvMF0sWzEvMCwxLzBdXSxNPTI1MCxEPUtNdCxaPXV0ZSgic3RhcnQiLCJ6b29tIiwiZW5kIiksRWU9NTAw'@;
put 'LEJlPTE1MCxxZT0wLHJ0PTEwO2Z1bmN0aW9uIHB0KE9uKXtPbi5wcm9wZXJ0eSgiX196b29tIixHOGUpLm9uKCJ3aGVlbC56b29tIixDcix7cGFzc2l2ZTohMX0pLm9uKCJtb3VzZWRvd24uem9vbSIsR3IpLm9uKCJkYmxjbGljay56b29tIixtcikuZmlsdGVyKGgpLm9uKCJ0b3VjaHN0YXJ0'@;
put 'Lnpvb20iLEduKS5vbigidG91Y2htb3ZlLnpvb20iLGFpKS5vbigidG91Y2hlbmQuem9vbSB0b3VjaGNhbmNlbC56b29tIixfaSkuc3R5bGUoIi13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvciIsInJnYmEoMCwwLDAsMCkiKX1mdW5jdGlvbiBkdChPbix6cil7cmV0dXJuKHpyPU1hdGgubWF4'@;
put 'KGZbMF0sTWF0aC5taW4oZlsxXSx6cikpKT09PU9uLms/T246bmV3IEpnKHpyLE9uLngsT24ueSl9ZnVuY3Rpb24gSnQoT24senIsSm4pe3ZhciBJcj16clswXS1KblswXSpPbi5rLCRyPXpyWzFdLUpuWzFdKk9uLms7cmV0dXJuIElyPT09T24ueCYmJHI9PT1Pbi55P09uOm5ldyBKZyhPbi5r'@;
put 'LElyLCRyKX1mdW5jdGlvbiB2bihPbil7cmV0dXJuWygrT25bMF1bMF0rICtPblsxXVswXSkvMiwoK09uWzBdWzFdKyArT25bMV1bMV0pLzJdfWZ1bmN0aW9uIENuKE9uLHpyLEpuLElyKXtPbi5vbigic3RhcnQuem9vbSIsZnVuY3Rpb24oKXt0bih0aGlzLGFyZ3VtZW50cykuZXZlbnQoSXIp'@;
put 'LnN0YXJ0KCl9KS5vbigiaW50ZXJydXB0Lnpvb20gZW5kLnpvb20iLGZ1bmN0aW9uKCl7dG4odGhpcyxhcmd1bWVudHMpLmV2ZW50KElyKS5lbmQoKX0pLnR3ZWVuKCJ6b29tIixmdW5jdGlvbigpe3ZhciAkcj10aGlzLHdpPWFyZ3VtZW50cyxlYT10bigkcix3aSkuZXZlbnQoSXIpLGZhPWwu'@;
put 'YXBwbHkoJHIsd2kpLHZ0PW51bGw9PUpuP3ZuKGZhKToiZnVuY3Rpb24iPT10eXBlb2YgSm4/Sm4uYXBwbHkoJHIsd2kpOkpuLE50PU1hdGgubWF4KGZhWzFdWzBdLWZhWzBdWzBdLGZhWzFdWzFdLWZhWzBdWzFdKSxIdD0kci5fX3pvb20sSG49ImZ1bmN0aW9uIj09dHlwZW9mIHpyP3pyLmFw'@;
put 'cGx5KCRyLHdpKTp6cix0cj1EKEh0LmludmVydCh2dCkuY29uY2F0KE50L0h0LmspLEhuLmludmVydCh2dCkuY29uY2F0KE50L0huLmspKTtyZXR1cm4gZnVuY3Rpb24oYXIpe2lmKDE9PT1hcilhcj1IbjtlbHNle3ZhciBIcj10cihhcikscXI9TnQvSHJbMl07YXI9bmV3IEpnKHFyLHZ0WzBd'@;
put 'LUhyWzBdKnFyLHZ0WzFdLUhyWzFdKnFyKX1lYS56b29tKG51bGwsYXIpfX0pfWZ1bmN0aW9uIHRuKE9uLHpyLEpuKXtyZXR1cm4hSm4mJk9uLl9fem9vbWluZ3x8bmV3IE1uKE9uLHpyKX1mdW5jdGlvbiBNbihPbix6cil7dGhpcy50aGF0PU9uLHRoaXMuYXJncz16cix0aGlzLmFjdGl2ZT0w'@;
put 'LHRoaXMuc291cmNlRXZlbnQ9bnVsbCx0aGlzLmV4dGVudD1sLmFwcGx5KE9uLHpyKSx0aGlzLnRhcHM9MH1mdW5jdGlvbiBDcihPbiwuLi56cil7aWYoYy5hcHBseSh0aGlzLGFyZ3VtZW50cykpe3ZhciBKbj10bih0aGlzLHpyKS5ldmVudChPbiksSXI9dGhpcy5fX3pvb20sJHI9TWF0aC5t'@;
put 'YXgoZlswXSxNYXRoLm1pbihmWzFdLElyLmsqTWF0aC5wb3coMixkLmFwcGx5KHRoaXMsYXJndW1lbnRzKSkpKSx3aT10dihPbik7aWYoSm4ud2hlZWwpKEpuLm1vdXNlWzBdWzBdIT09d2lbMF18fEpuLm1vdXNlWzBdWzFdIT09d2lbMV0pJiYoSm4ubW91c2VbMV09SXIuaW52ZXJ0KEpuLm1v'@;
put 'dXNlWzBdPXdpKSksY2xlYXJUaW1lb3V0KEpuLndoZWVsKTtlbHNle2lmKElyLms9PT0kcilyZXR1cm47Sm4ubW91c2U9W3dpLElyLmludmVydCh3aSldLENOKHRoaXMpLEpuLnN0YXJ0KCl9TEEoT24pLEpuLndoZWVsPXNldFRpbWVvdXQoZnVuY3Rpb24gZWEoKXtKbi53aGVlbD1udWxsLEpu'@;
put 'LmVuZCgpfSxCZSksSm4uem9vbSgibW91c2UiLGEoSnQoZHQoSXIsJHIpLEpuLm1vdXNlWzBdLEpuLm1vdXNlWzFdKSxKbi5leHRlbnQsdikpfX1mdW5jdGlvbiBHcihPbiwuLi56cil7aWYoIWJlJiZjLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl7dmFyIEpuPU9uLmN1cnJlbnRUYXJnZXQsSXI9'@;
put 'dG4odGhpcyx6ciwhMCkuZXZlbnQoT24pLCRyPXdzKE9uLnZpZXcpLm9uKCJtb3VzZW1vdmUuem9vbSIsZnVuY3Rpb24gdnQoSHQpe2lmKExBKEh0KSwhSXIubW92ZWQpe3ZhciBIbj1IdC5jbGllbnRYLWVhLHRyPUh0LmNsaWVudFktZmE7SXIubW92ZWQ9SG4qSG4rdHIqdHI+cWV9SXIuZXZl'@;
put 'bnQoSHQpLnpvb20oIm1vdXNlIixhKEp0KElyLnRoYXQuX196b29tLElyLm1vdXNlWzBdPXR2KEh0LEpuKSxJci5tb3VzZVsxXSksSXIuZXh0ZW50LHYpKX0sITApLm9uKCJtb3VzZXVwLnpvb20iLGZ1bmN0aW9uIE50KEh0KXskci5vbigibW91c2Vtb3ZlLnpvb20gbW91c2V1cC56b29tIixu'@;
put 'dWxsKSxmdW5jdGlvbiBXTXQoYyxsKXt2YXIgYT1jLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxkPXdzKGMpLm9uKCJkcmFnc3RhcnQuZHJhZyIsbnVsbCk7bCYmKGQub24oImNsaWNrLmRyYWciLEV0ZSx4dGUpLHNldFRpbWVvdXQoZnVuY3Rpb24oKXtkLm9uKCJjbGljay5kcmFnIixudWxs'@;
put 'KX0sMCkpLCJvbnNlbGVjdHN0YXJ0ImluIGE/ZC5vbigic2VsZWN0c3RhcnQuZHJhZyIsbnVsbCk6KGEuc3R5bGUuTW96VXNlclNlbGVjdD1hLl9fbm9zZWxlY3QsZGVsZXRlIGEuX19ub3NlbGVjdCl9KEh0LnZpZXcsSXIubW92ZWQpLExBKEh0KSxJci5ldmVudChIdCkuZW5kKCl9LCEwKSx3'@;
put 'aT10dihPbixKbiksZWE9T24uY2xpZW50WCxmYT1Pbi5jbGllbnRZOyhmdW5jdGlvbiBaTXQoYyl7dmFyIGw9Yy5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsYT13cyhjKS5vbigiZHJhZ3N0YXJ0LmRyYWciLEV0ZSx4dGUpOyJvbnNlbGVjdHN0YXJ0ImluIGw/YS5vbigic2VsZWN0c3RhcnQu'@;
put 'ZHJhZyIsRXRlLHh0ZSk6KGwuX19ub3NlbGVjdD1sLnN0eWxlLk1velVzZXJTZWxlY3QsbC5zdHlsZS5Nb3pVc2VyU2VsZWN0PSJub25lIil9KShPbi52aWV3KSxUdGUoT24pLElyLm1vdXNlPVt3aSx0aGlzLl9fem9vbS5pbnZlcnQod2kpXSxDTih0aGlzKSxJci5zdGFydCgpfX1mdW5jdGlv'@;
put 'biBtcihPbiwuLi56cil7aWYoYy5hcHBseSh0aGlzLGFyZ3VtZW50cykpe3ZhciBKbj10aGlzLl9fem9vbSxJcj10dihPbi5jaGFuZ2VkVG91Y2hlcz9Pbi5jaGFuZ2VkVG91Y2hlc1swXTpPbix0aGlzKSwkcj1Kbi5pbnZlcnQoSXIpLGVhPWEoSnQoZHQoSm4sSm4uayooT24uc2hpZnRLZXk/'@;
put 'LjU6MikpLElyLCRyKSxsLmFwcGx5KHRoaXMsenIpLHYpO0xBKE9uKSxNPjA/d3ModGhpcykudHJhbnNpdGlvbigpLmR1cmF0aW9uKE0pLmNhbGwoQ24sZWEsSXIsT24pOndzKHRoaXMpLmNhbGwocHQudHJhbnNmb3JtLGVhLElyLE9uKX19ZnVuY3Rpb24gR24oT24sLi4uenIpe2lmKGMuYXBw'@;
put 'bHkodGhpcyxhcmd1bWVudHMpKXt2YXIgd2ksZWEsZmEsdnQsSm49T24udG91Y2hlcyxJcj1Kbi5sZW5ndGgsJHI9dG4odGhpcyx6cixPbi5jaGFuZ2VkVG91Y2hlcy5sZW5ndGg9PT1JcikuZXZlbnQoT24pO2ZvcihUdGUoT24pLGVhPTA7ZWE8SXI7KytlYSl2dD1bdnQ9dHYoZmE9Sm5bZWFd'@;
put 'LHRoaXMpLHRoaXMuX196b29tLmludmVydCh2dCksZmEuaWRlbnRpZmllcl0sJHIudG91Y2gwPyEkci50b3VjaDEmJiRyLnRvdWNoMFsyXSE9PXZ0WzJdJiYoJHIudG91Y2gxPXZ0LCRyLnRhcHM9MCk6KCRyLnRvdWNoMD12dCx3aT0hMCwkci50YXBzPTErISFyZSk7cmUmJihyZT1jbGVhclRp'@;
put 'bWVvdXQocmUpKSx3aSYmKCRyLnRhcHM8MiYmKGNlPXZ0WzBdLHJlPXNldFRpbWVvdXQoZnVuY3Rpb24oKXtyZT1udWxsfSxFZSkpLENOKHRoaXMpLCRyLnN0YXJ0KCkpfX1mdW5jdGlvbiBhaShPbiwuLi56cil7aWYodGhpcy5fX3pvb21pbmcpe3ZhciB3aSxlYSxmYSx2dCxKbj10bih0aGlz'@;
put 'LHpyKS5ldmVudChPbiksSXI9T24uY2hhbmdlZFRvdWNoZXMsJHI9SXIubGVuZ3RoO2ZvcihMQShPbiksd2k9MDt3aTwkcjsrK3dpKWZhPXR2KGVhPUlyW3dpXSx0aGlzKSxKbi50b3VjaDAmJkpuLnRvdWNoMFsyXT09PWVhLmlkZW50aWZpZXI/Sm4udG91Y2gwWzBdPWZhOkpuLnRvdWNoMSYm'@;
put 'Sm4udG91Y2gxWzJdPT09ZWEuaWRlbnRpZmllciYmKEpuLnRvdWNoMVswXT1mYSk7aWYoZWE9Sm4udGhhdC5fX3pvb20sSm4udG91Y2gxKXt2YXIgTnQ9Sm4udG91Y2gwWzBdLEh0PUpuLnRvdWNoMFsxXSxIbj1Kbi50b3VjaDFbMF0sdHI9Sm4udG91Y2gxWzFdLGFyPShhcj1IblswXS1OdFsw'@;
put 'XSkqYXIrKGFyPUhuWzFdLU50WzFdKSphcixIcj0oSHI9dHJbMF0tSHRbMF0pKkhyKyhIcj10clsxXS1IdFsxXSkqSHI7ZWE9ZHQoZWEsTWF0aC5zcXJ0KGFyL0hyKSksZmE9WyhOdFswXStIblswXSkvMiwoTnRbMV0rSG5bMV0pLzJdLHZ0PVsoSHRbMF0rdHJbMF0pLzIsKEh0WzFdK3RyWzFd'@;
put 'KS8yXX1lbHNle2lmKCFKbi50b3VjaDApcmV0dXJuO2ZhPUpuLnRvdWNoMFswXSx2dD1Kbi50b3VjaDBbMV19Sm4uem9vbSgidG91Y2giLGEoSnQoZWEsZmEsdnQpLEpuLmV4dGVudCx2KSl9fWZ1bmN0aW9uIF9pKE9uLC4uLnpyKXtpZih0aGlzLl9fem9vbWluZyl7dmFyIHdpLGVhLEpuPXRu'@;
put 'KHRoaXMsenIpLmV2ZW50KE9uKSxJcj1Pbi5jaGFuZ2VkVG91Y2hlcywkcj1Jci5sZW5ndGg7Zm9yKFR0ZShPbiksYmUmJmNsZWFyVGltZW91dChiZSksYmU9c2V0VGltZW91dChmdW5jdGlvbigpe2JlPW51bGx9LEVlKSx3aT0wO3dpPCRyOysrd2kpZWE9SXJbd2ldLEpuLnRvdWNoMCYmSm4u'@;
put 'dG91Y2gwWzJdPT09ZWEuaWRlbnRpZmllcj9kZWxldGUgSm4udG91Y2gwOkpuLnRvdWNoMSYmSm4udG91Y2gxWzJdPT09ZWEuaWRlbnRpZmllciYmZGVsZXRlIEpuLnRvdWNoMTtpZihKbi50b3VjaDEmJiFKbi50b3VjaDAmJihKbi50b3VjaDA9Sm4udG91Y2gxLGRlbGV0ZSBKbi50b3VjaDEp'@;
put 'LEpuLnRvdWNoMClKbi50b3VjaDBbMV09dGhpcy5fX3pvb20uaW52ZXJ0KEpuLnRvdWNoMFswXSk7ZWxzZSBpZihKbi5lbmQoKSwyPT09Sm4udGFwcyYmKGVhPXR2KGVhLHRoaXMpLE1hdGguaHlwb3QoY2VbMF0tZWFbMF0sY2VbMV0tZWFbMV0pPHJ0KSl7dmFyIGZhPXdzKHRoaXMpLm9uKCJk'@;
put 'YmxjbGljay56b29tIik7ZmEmJmZhLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19fXJldHVybiBwdC50cmFuc2Zvcm09ZnVuY3Rpb24oT24senIsSm4sSXIpe3ZhciAkcj1Pbi5zZWxlY3Rpb24/T24uc2VsZWN0aW9uKCk6T247JHIucHJvcGVydHkoIl9fem9vbSIsRzhlKSxPbiE9PSRyP0NuKE9u'@;
put 'LHpyLEpuLElyKTokci5pbnRlcnJ1cHQoKS5lYWNoKGZ1bmN0aW9uKCl7dG4odGhpcyxhcmd1bWVudHMpLmV2ZW50KElyKS5zdGFydCgpLnpvb20obnVsbCwiZnVuY3Rpb24iPT10eXBlb2YgenI/enIuYXBwbHkodGhpcyxhcmd1bWVudHMpOnpyKS5lbmQoKX0pfSxwdC5zY2FsZUJ5PWZ1bmN0'@;
put 'aW9uKE9uLHpyLEpuLElyKXtwdC5zY2FsZVRvKE9uLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX196b29tLmsqKCJmdW5jdGlvbiI9PXR5cGVvZiB6cj96ci5hcHBseSh0aGlzLGFyZ3VtZW50cyk6enIpfSxKbixJcil9LHB0LnNjYWxlVG89ZnVuY3Rpb24oT24senIsSm4sSXIpe3B0LnRyYW5z'@;
put 'Zm9ybShPbixmdW5jdGlvbigpe3ZhciAkcj1sLmFwcGx5KHRoaXMsYXJndW1lbnRzKSx3aT10aGlzLl9fem9vbSxlYT1udWxsPT1Kbj92bigkcik6ImZ1bmN0aW9uIj09dHlwZW9mIEpuP0puLmFwcGx5KHRoaXMsYXJndW1lbnRzKTpKbixmYT13aS5pbnZlcnQoZWEpLHZ0PSJmdW5jdGlvbiI9'@;
put 'PXR5cGVvZiB6cj96ci5hcHBseSh0aGlzLGFyZ3VtZW50cyk6enI7cmV0dXJuIGEoSnQoZHQod2ksdnQpLGVhLGZhKSwkcix2KX0sSm4sSXIpfSxwdC50cmFuc2xhdGVCeT1mdW5jdGlvbihPbix6cixKbixJcil7cHQudHJhbnNmb3JtKE9uLGZ1bmN0aW9uKCl7cmV0dXJuIGEodGhpcy5fX3pv'@;
put 'b20udHJhbnNsYXRlKCJmdW5jdGlvbiI9PXR5cGVvZiB6cj96ci5hcHBseSh0aGlzLGFyZ3VtZW50cyk6enIsImZ1bmN0aW9uIj09dHlwZW9mIEpuP0puLmFwcGx5KHRoaXMsYXJndW1lbnRzKTpKbiksbC5hcHBseSh0aGlzLGFyZ3VtZW50cyksdil9LG51bGwsSXIpfSxwdC50cmFuc2xhdGVU'@;
put 'bz1mdW5jdGlvbihPbix6cixKbixJciwkcil7cHQudHJhbnNmb3JtKE9uLGZ1bmN0aW9uKCl7dmFyIHdpPWwuYXBwbHkodGhpcyxhcmd1bWVudHMpLGVhPXRoaXMuX196b29tLGZhPW51bGw9PUlyP3ZuKHdpKToiZnVuY3Rpb24iPT10eXBlb2YgSXI/SXIuYXBwbHkodGhpcyxhcmd1bWVudHMp'@;
put 'OklyO3JldHVybiBhKElOLnRyYW5zbGF0ZShmYVswXSxmYVsxXSkuc2NhbGUoZWEuaykudHJhbnNsYXRlKCJmdW5jdGlvbiI9PXR5cGVvZiB6cj8tenIuYXBwbHkodGhpcyxhcmd1bWVudHMpOi16ciwiZnVuY3Rpb24iPT10eXBlb2YgSm4/LUpuLmFwcGx5KHRoaXMsYXJndW1lbnRzKTotSm4p'@;
put 'LHdpLHYpfSxJciwkcil9LE1uLnByb3RvdHlwZT17ZXZlbnQ6ZnVuY3Rpb24oT24pe3JldHVybiBPbiYmKHRoaXMuc291cmNlRXZlbnQ9T24pLHRoaXN9LHN0YXJ0OmZ1bmN0aW9uKCl7cmV0dXJuIDE9PSsrdGhpcy5hY3RpdmUmJih0aGlzLnRoYXQuX196b29taW5nPXRoaXMsdGhpcy5lbWl0'@;
put 'KCJzdGFydCIpKSx0aGlzfSx6b29tOmZ1bmN0aW9uKE9uLHpyKXtyZXR1cm4gdGhpcy5tb3VzZSYmIm1vdXNlIiE9PU9uJiYodGhpcy5tb3VzZVsxXT16ci5pbnZlcnQodGhpcy5tb3VzZVswXSkpLHRoaXMudG91Y2gwJiYidG91Y2giIT09T24mJih0aGlzLnRvdWNoMFsxXT16ci5pbnZlcnQo'@;
put 'dGhpcy50b3VjaDBbMF0pKSx0aGlzLnRvdWNoMSYmInRvdWNoIiE9PU9uJiYodGhpcy50b3VjaDFbMV09enIuaW52ZXJ0KHRoaXMudG91Y2gxWzBdKSksdGhpcy50aGF0Ll9fem9vbT16cix0aGlzLmVtaXQoInpvb20iKSx0aGlzfSxlbmQ6ZnVuY3Rpb24oKXtyZXR1cm4gMD09LS10aGlzLmFj'@;
put 'dGl2ZSYmKGRlbGV0ZSB0aGlzLnRoYXQuX196b29taW5nLHRoaXMuZW1pdCgiZW5kIikpLHRoaXN9LGVtaXQ6ZnVuY3Rpb24oT24pe3ZhciB6cj13cyh0aGlzLnRoYXQpLmRhdHVtKCk7Wi5jYWxsKE9uLHRoaXMudGhhdCxuZXcgWE10KE9uLHtzb3VyY2VFdmVudDp0aGlzLnNvdXJjZUV2ZW50'@;
put 'LHRhcmdldDpwdCx0eXBlOk9uLHRyYW5zZm9ybTp0aGlzLnRoYXQuX196b29tLGRpc3BhdGNoOlp9KSx6cil9fSxwdC53aGVlbERlbHRhPWZ1bmN0aW9uKE9uKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZD0iZnVuY3Rpb24iPT10eXBlb2YgT24/T246RE4oK09uKSxwdCk6ZH0scHQuZmls'@;
put 'dGVyPWZ1bmN0aW9uKE9uKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz0iZnVuY3Rpb24iPT10eXBlb2YgT24/T246RE4oISFPbikscHQpOmN9LHB0LnRvdWNoYWJsZT1mdW5jdGlvbihPbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGg9ImZ1bmN0aW9uIj09dHlwZW9mIE9uP09uOkRO'@;
put 'KCEhT24pLHB0KTpofSxwdC5leHRlbnQ9ZnVuY3Rpb24oT24pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPSJmdW5jdGlvbiI9PXR5cGVvZiBPbj9PbjpETihbWytPblswXVswXSwrT25bMF1bMV1dLFsrT25bMV1bMF0sK09uWzFdWzFdXV0pLHB0KTpsfSxwdC5zY2FsZUV4dGVudD1mdW5j'@;
put 'dGlvbihPbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGZbMF09K09uWzBdLGZbMV09K09uWzFdLHB0KTpbZlswXSxmWzFdXX0scHQudHJhbnNsYXRlRXh0ZW50PWZ1bmN0aW9uKE9uKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odlswXVswXT0rT25bMF1bMF0sdlsxXVswXT0rT25bMV1b'@;
put 'MF0sdlswXVsxXT0rT25bMF1bMV0sdlsxXVsxXT0rT25bMV1bMV0scHQpOltbdlswXVswXSx2WzBdWzFdXSxbdlsxXVswXSx2WzFdWzFdXV19LHB0LmNvbnN0cmFpbj1mdW5jdGlvbihPbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9T24scHQpOmF9LHB0LmR1cmF0aW9uPWZ1bmN0aW9u'@;
put 'KE9uKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oTT0rT24scHQpOk19LHB0LmludGVycG9sYXRlPWZ1bmN0aW9uKE9uKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oRD1PbixwdCk6RH0scHQub249ZnVuY3Rpb24oKXt2YXIgT249Wi5vbi5hcHBseShaLGFyZ3VtZW50cyk7cmV0dXJuIE9u'@;
put 'PT09Wj9wdDpPbn0scHQuY2xpY2tEaXN0YW5jZT1mdW5jdGlvbihPbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHFlPShPbj0rT24pKk9uLHB0KTpNYXRoLnNxcnQocWUpfSxwdC50YXBEaXN0YW5jZT1mdW5jdGlvbihPbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHJ0PStPbixwdCk6'@;
put 'cnR9LHB0fSgpLnNjYWxlRXh0ZW50KHRoaXMuX29wdGlvbnMuem9vbVNjYWxlRXh0ZW50KS50cmFuc2xhdGVFeHRlbnQodGhpcy5fb3B0aW9ucy56b29tVHJhbnNsYXRlRXh0ZW50KS5pbnRlcnBvbGF0ZShMTikub24oInpvb20iLGZ1bmN0aW9uIGwodil7d3MoZC5ub2RlKCkucXVlcnlTZWxl'@;
put 'Y3RvcigiZyIpKS5hdHRyKCJ0cmFuc2Zvcm0iLHYudHJhbnNmb3JtKSxjLl9kaXNwYXRjaC5jYWxsKCJ6b29tIixjKX0pO3RoaXMuX3pvb21CZWhhdmlvcj1oO3ZhciBmPXdzKGQubm9kZSgpLnF1ZXJ5U2VsZWN0b3IoImciKSk7cmV0dXJuIGQuY2FsbChoKSx0aGlzLl9hY3RpdmV8fFJ0ZS5j'@;
put 'YWxsKHRoaXMsZiksdGhpcy5fb3JpZ2luYWxUcmFuc2Zvcm09Uk4oZC5ub2RlKCkpLHRoaXN9ZnVuY3Rpb24gSXRlKGMpe3ZhciBsPXRoaXMuX3RyYW5zbGF0aW9uLGE9dGhpcy5fc2NhbGUsZD1jLmRhdHVtKCkudHJhbnNsYXRpb24saD1jLmRhdHVtKCkuc2NhbGUsZj1STih0aGlzLl96b29t'@;
put 'U2VsZWN0aW9uLm5vZGUoKSk7cmV0dXJuIGwmJihmPShmPWYuc2NhbGUoMS9hKSkudHJhbnNsYXRlKC1sLngsLWwueSkpLChmPWYudHJhbnNsYXRlKGQueCxkLnkpKS5zY2FsZShoKX1mdW5jdGlvbiBSdGUoYyl7dGhpcy5fem9vbUJlaGF2aW9yLnRyYW5zZm9ybSh0aGlzLl96b29tU2VsZWN0'@;
put 'aW9uLEl0ZS5jYWxsKHRoaXMsYykpLHRoaXMuX3RyYW5zbGF0aW9uPWMuZGF0dW0oKS50cmFuc2xhdGlvbix0aGlzLl9zY2FsZT1jLmRhdHVtKCkuc2NhbGUsdGhpcy5fb3JpZ2luYWxUcmFuc2Zvcm09SU4udHJhbnNsYXRlKGMuZGF0dW0oKS50cmFuc2xhdGlvbi54LGMuZGF0dW0oKS50cmFu'@;
put 'c2xhdGlvbi55KS5zY2FsZShjLmRhdHVtKCkuc2NhbGUpfWZ1bmN0aW9uIG14dChjLGwpe3JldHVybiBmdW5jdGlvbigpe2NvbnN0IGE9Yy5tYXAoZnVuY3Rpb24oZCl7cmV0dXJuIExOKFtkWzBdWzBdLGRbMF1bMV1dLFtkWzFdWzBdLGRbMV1bMV1dKX0pO3JldHVybiBmdW5jdGlvbihkKXty'@;
put 'ZXR1cm4gZDwxPyJNIithLm1hcChmdW5jdGlvbihoKXtyZXR1cm4gaChkKX0pLmpvaW4oIkwiKTpsfX19ZnVuY3Rpb24gSjhlKGMpe3JldHVybiJlZGdlIj09Yy5hdHRyaWJ1dGVzLmNsYXNzfHwiYSI9PWMudGFnJiYiZyI9PWMucGFyZW50LnRhZyYmImVkZ2UiPT1jLnBhcmVudC5wYXJlbnQu'@;
put 'YXR0cmlidXRlcy5jbGFzc31mdW5jdGlvbiBROGUoYyl7cmV0dXJuIGMucGFyZW50JiZKOGUoYy5wYXJlbnQpfWZ1bmN0aW9uIGU3ZShjKXt2YXIgbD10aGlzLl90cmFuc2l0aW9uLGE9dGhpcy5fb3B0aW9ucy5mYWRlJiZudWxsIT1sLGQ9dGhpcy5fb3B0aW9ucy50d2VlblBhdGhzLGg9dGhp'@;
put 'cy5fb3B0aW9ucy50d2VlblNoYXBlcyxmPXRoaXMuX29wdGlvbnMuY29udmVydEVxdWFsU2lkZWRQb2x5Z29ucyx2PXRoaXMuX29wdGlvbnMuZ3Jvd0VudGVyaW5nRWRnZXMmJm51bGwhPWwsTT10aGlzLl9hdHRyaWJ1dGVyLEQ9dGhpczt2YXIgY2U9dGhpcy5fc2VsZWN0aW9uO2lmKG51bGwh'@;
put 'PWwpe3ZhciBiZT10aGlzLl9qb2JzO2lmKEQuX2FjdGl2ZSlyZXR1cm4gYmUucHVzaChudWxsKSx0aGlzO2NlLnRyYW5zaXRpb24obCkudHJhbnNpdGlvbigpLmR1cmF0aW9uKDApLm9uKCJlbmQiLGZ1bmN0aW9uKCl7RC5fYWN0aXZlPSExLDAhPWJlLmxlbmd0aCYmKGJlLnNoaWZ0KCksRC5y'@;
put 'ZW5kZXIoKSl9KSx0aGlzLl9hY3RpdmU9ITB9bnVsbCE9bCYmY2UudHJhbnNpdGlvbihsKS5vbigic3RhcnQiLGZ1bmN0aW9uKCl7RC5fZGlzcGF0Y2guY2FsbCgidHJhbnNpdGlvblN0YXJ0IixEKX0pLm9uKCJlbmQiLGZ1bmN0aW9uKCl7RC5fZGlzcGF0Y2guY2FsbCgidHJhbnNpdGlvbkVu'@;
put 'ZCIsRCl9KS50cmFuc2l0aW9uKCkuZHVyYXRpb24oMCkub24oInN0YXJ0IixmdW5jdGlvbigpe0QuX2Rpc3BhdGNoLmNhbGwoInJlc3RvcmVFbmQiLEQpLEQuX2Rpc3BhdGNoLmNhbGwoImVuZCIsRCksYyYmYy5jYWxsKEQpfSk7dmFyIEVlPXRoaXMuX2RhdGEsQmU9Y2Uuc2VsZWN0QWxsKCJz'@;
put 'dmciKS5kYXRhKFtFZV0sZnVuY3Rpb24ocWUpe3JldHVybiBxZS5rZXl9KTtyZXR1cm4gQmU9QmUuZW50ZXIoKS5hcHBlbmQoInN2ZyIpLm1lcmdlKEJlKSxmdW5jdGlvbiByZShxZSl7dmFyIHJ0PXdzKHRoaXMpO2lmKCJzdmciPT1xZS50YWcpe3ZhciBwdD1ELl9vcHRpb25zO2lmKG51bGwh'@;
put 'PXB0LndpZHRofHxudWxsIT1wdC5oZWlnaHQpe3ZhciBkdD1wdC53aWR0aCxKdD1wdC5oZWlnaHQ7bnVsbD09ZHQ/ZHQ9NCpxZS5hdHRyaWJ1dGVzLndpZHRoLnJlcGxhY2UoInB0IiwiIikvMzoocnQuYXR0cigid2lkdGgiLGR0KSxxZS5hdHRyaWJ1dGVzLndpZHRoPWR0KSxudWxsPT1KdD9K'@;
put 'dD00KnFlLmF0dHJpYnV0ZXMuaGVpZ2h0LnJlcGxhY2UoInB0IiwiIikvMzoocnQuYXR0cigiaGVpZ2h0IixKdCkscWUuYXR0cmlidXRlcy5oZWlnaHQ9SnQpLHB0LmZpdHx8KHJ0LmF0dHIoInZpZXdCb3giLGAwIDAgJHszKmR0LzQvcHQuc2NhbGV9ICR7MypKdC80L3B0LnNjYWxlfWApLHFl'@;
put 'LmF0dHJpYnV0ZXMudmlld0JveD1gMCAwICR7MypkdC80L3B0LnNjYWxlfSAkezMqSnQvNC9wdC5zY2FsZX1gKX0xIT1wdC5zY2FsZSYmKHB0LmZpdHx8bnVsbD09cHQud2lkdGgmJm51bGw9PXB0LmhlaWdodCkmJihkdD1xZS5hdHRyaWJ1dGVzLnZpZXdCb3guc3BsaXQoIiAiKVsyXSxKdD1x'@;
put 'ZS5hdHRyaWJ1dGVzLnZpZXdCb3guc3BsaXQoIiAiKVszXSxydC5hdHRyKCJ2aWV3Qm94IixgMCAwICR7ZHQvcHQuc2NhbGV9ICR7SnQvcHQuc2NhbGV9YCkscWUuYXR0cmlidXRlcy52aWV3Qm94PWAwIDAgJHtkdC9wdC5zY2FsZX0gJHtKdC9wdC5zY2FsZX1gKX1NJiZydC5lYWNoKE0pO3Zh'@;
put 'ciB2bj1xZS50YWcsQ249cWUuYXR0cmlidXRlcyx0bj1ydC5ub2RlKCkuYXR0cmlidXRlcztpZih0bilmb3IodmFyIE1uPTA7TW48dG4ubGVuZ3RoO01uKyspe3ZhciBDcj10bltNbl0sR3I9Q3IubmFtZTtpZigieG1sbnMiIT1Hci5zcGxpdCgiOiIpWzBdJiZDci5uYW1lc3BhY2VVUkkpe3Zh'@;
put 'ciBtcj1Dci5uYW1lc3BhY2VVUkkuc3BsaXQoIi8iKTtHcj1tclttci5sZW5ndGgtMV0rIjoiK0dyfUdyIGluIENufHwoQ25bR3JdPW51bGwpfXZhciBhaT0hMSxfaT0hMTtpZihoJiZsKXtpZigoInBvbHlnb24iPT10aGlzLm5vZGVOYW1lfHwiZWxsaXBzZSI9PXRoaXMubm9kZU5hbWUpJiZx'@;
put 'ZS5hbHRlcm5hdGl2ZU9sZCYmKF9pPSEwKSwoInBvbHlnb24iPT12bnx8ImVsbGlwc2UiPT12bikmJnFlLmFsdGVybmF0aXZlTmV3JiYoYWk9ITApLCJwb2x5Z29uIj09dGhpcy5ub2RlTmFtZSYmInBvbHlnb24iPT12biYmcWUuYWx0ZXJuYXRpdmVPbGQpe3ZhciBPbj0kOGUocnQpO2lmKCFm'@;
put 'KXt2YXIgSm49T24uYXR0cmlidXRlcy5wb2ludHMuc3BsaXQoIiAiKS5sZW5ndGg7KElyPXFlLmF0dHJpYnV0ZXMucG9pbnRzKS5zcGxpdCgiICIpLmxlbmd0aD09Sm4mJihhaT0hMSxfaT0hMSl9fWlmKF9pKXt2YXIgZWE9SzhlKHJ0LHFlLmFsdGVybmF0aXZlT2xkKTtlYS5kYXRhKFtxZV0s'@;
put 'ZnVuY3Rpb24oKXtyZXR1cm4gcWUua2V5fSkscnQ9ZWF9YWkmJih2bj0icGF0aCIsQ249cWUuYWx0ZXJuYXRpdmVOZXcuYXR0cmlidXRlcyl9dmFyIHZ0PXJ0O2lmKGwmJih2dD12dC50cmFuc2l0aW9uKGwpLGEmJnZ0LmZpbHRlcihmdW5jdGlvbihabil7cmV0dXJuIiMiPT1abi50YWdbMF0/'@;
put 'bnVsbDp0aGlzfSkuc3R5bGUoIm9wYWNpdHkiLDEpLHZ0LmZpbHRlcihmdW5jdGlvbihabil7cmV0dXJuIiMiPT1abi50YWdbMF0/bnVsbDp0aGlzfSkub24oImVuZCIsZnVuY3Rpb24oWm4pe3dzKHRoaXMpLmF0dHIoInN0eWxlIixabiYmWm4uYXR0cmlidXRlcyYmWm4uYXR0cmlidXRlcy5z'@;
put 'dHlsZXx8bnVsbCl9KSksdiYmInBhdGgiPT12biYmcWUub2Zmc2V0KXt2YXIgSHQ9cWUudG90YWxMZW5ndGg7cnQuYXR0cigic3Ryb2tlLWRhc2hhcnJheSIsSHQrIiAiK0h0KS5hdHRyKCJzdHJva2UtZGFzaG9mZnNldCIsSHQpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK3FlLm9m'@;
put 'ZnNldC54KyIsIitxZS5vZmZzZXQueSsiKSIpLENuWyJzdHJva2UtZGFzaG9mZnNldCJdPTAsQ24udHJhbnNmb3JtPSJ0cmFuc2xhdGUoMCwwKSIsdnQuYXR0cigic3Ryb2tlLWRhc2hvZmZzZXQiLENuWyJzdHJva2UtZGFzaG9mZnNldCJdKS5hdHRyKCJ0cmFuc2Zvcm0iLENuLnRyYW5zZm9y'@;
put 'bSkub24oInN0YXJ0IixmdW5jdGlvbigpe3dzKHRoaXMpLnN0eWxlKCJvcGFjaXR5IixudWxsKX0pLm9uKCJlbmQiLGZ1bmN0aW9uKCl7d3ModGhpcykuYXR0cigic3Ryb2tlLWRhc2hvZmZzZXQiLG51bGwpLmF0dHIoInN0cm9rZS1kYXNoYXJyYXkiLG51bGwpLmF0dHIoInRyYW5zZm9ybSIs'@;
put 'bnVsbCl9KX1pZih2JiYicG9seWdvbiI9PXZuJiZROGUocWUpJiZxZS5vZmZzZXQmJiJwYXRoIj09cWUucGFyZW50LmNoaWxkcmVuWzNdLnRhZyl7dmFyIHRyPXdzKHJ0Lm5vZGUoKS5wYXJlbnROb2RlLnF1ZXJ5U2VsZWN0b3IoInBhdGgiKSksYXI9dHIubm9kZSgpLmdldFBvaW50QXRMZW5n'@;
put 'dGgoMCksSHI9dHIubm9kZSgpLmdldFBvaW50QXRMZW5ndGgocWUudG90YWxMZW5ndGgpLHFyPXRyLm5vZGUoKS5nZXRQb2ludEF0TGVuZ3RoKHFlLnRvdGFsTGVuZ3RoLTEpLG9uPTE4MCpNYXRoLmF0YW4yKEhyLnktcXIueSxIci54LXFyLngpL01hdGguUEkseW49YXIueC1Ici54K3FlLm9m'@;
put 'ZnNldC54LHBuPWFyLnktSHIueStxZS5vZmZzZXQueTtydC5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIit5bisiLCIrcG4rIikiKSx2dC5hdHRyVHdlZW4oInRyYW5zZm9ybSIsZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24oWm4pe3ZhciBzcj10ci5ub2RlKCkuZ2V0UG9pbnRBdExl'@;
put 'bmd0aChxZS50b3RhbExlbmd0aCpabiksTnI9dHIubm9kZSgpLmdldFBvaW50QXRMZW5ndGgocWUudG90YWxMZW5ndGgqWm4rMSksTXI9MTgwKk1hdGguYXRhbjIoTnIueS1zci55LE5yLngtc3IueCkvTWF0aC5QSS1vbjtyZXR1cm4idHJhbnNsYXRlKCIrKHluPXNyLngtSHIueCtxZS5vZmZz'@;
put 'ZXQueCooMS1abikpKyIsIisocG49c3IueS1Ici55K3FlLm9mZnNldC55KigxLVpuKSkrIikgcm90YXRlKCIrTXIrIiAiK0hyLngrIiAiK0hyLnkrIikifX0pLm9uKCJzdGFydCIsZnVuY3Rpb24oKXt3cyh0aGlzKS5zdHlsZSgib3BhY2l0eSIsbnVsbCl9KS5vbigiZW5kIixmdW5jdGlvbigp'@;
put 'e3dzKHRoaXMpLmF0dHIoInRyYW5zZm9ybSIsbnVsbCl9KX12YXIgcHI9ZCYmbCYmInBhdGgiPT12biYmbnVsbCE9cnQuYXR0cigiZCIpO2Zvcih2YXIgJG4gb2YgT2JqZWN0LmtleXMoQ24pKXt2YXIgZHI9Q25bJG5dO2lmKHByJiYiZCI9PSRuKXt2YXIgSXI7KElyPShxZS5hbHRlcm5hdGl2'@;
put 'ZU9sZHx8cWUpLnBvaW50cykmJnZ0LmF0dHJUd2VlbigiZCIsbXh0KElyLGRyKSl9ZWxzZXtpZigidHJhbnNmb3JtIj09JG4mJnFlLnRyYW5zbGF0aW9uKWlmKGwpe3ZhciBVcj12dC5vbigiZW5kIik7dnQub24oInN0YXJ0IixmdW5jdGlvbigpe0QuX3pvb21CZWhhdmlvciYmdnQudHdlZW4o'@;
put 'ImF0dHIudHJhbnNmb3JtIixmdW5jdGlvbigpe3ZhciBabj10aGlzO3JldHVybiBmdW5jdGlvbihzcil7Wm4uc2V0QXR0cmlidXRlKCJ0cmFuc2Zvcm0iLFQ4ZShSTihELl96b29tU2VsZWN0aW9uLm5vZGUoKSkudG9TdHJpbmcoKSxJdGUuY2FsbChELHJ0KS50b1N0cmluZygpKShzcikpfX0p'@;
put 'fSkub24oImVuZCIsZnVuY3Rpb24oKXtVci5jYWxsKHRoaXMpLEQuX3pvb21CZWhhdmlvciYmUnRlLmNhbGwoRCxydCl9KX1lbHNlIEQuX3pvb21CZWhhdmlvciYmKFJ0ZS5jYWxsKEQscnQpLGRyPUl0ZS5jYWxsKEQscnQpLnRvU3RyaW5nKCkpO3Z0LmF0dHIoJG4sZHIpfX1haSYmdnQub24o'@;
put 'ImVuZCIsZnVuY3Rpb24oWm4sc3IsTnIpe0s4ZShlYT13cyh0aGlzKSxabikuZGF0YShbWm5dLGZ1bmN0aW9uKCl7cmV0dXJuIFpuLmtleX0pfSkscWUudGV4dCYmdnQudGV4dChxZS50ZXh0KSxmdW5jdGlvbiBaKHFlKXt2YXIgcnQ9cWUuc2VsZWN0QWxsKGZ1bmN0aW9uKCl7cmV0dXJuIHFl'@;
put 'Lm5vZGUoKS5jaGlsZE5vZGVzfSkscHQ9KHJ0PXJ0LmRhdGEoZnVuY3Rpb24odm4pe3JldHVybiB2bi5jaGlsZHJlbn0sZnVuY3Rpb24odm4pe3JldHVybiB2bi5rZXl9KSkuZW50ZXIoKS5hcHBlbmQoZnVuY3Rpb24odm4pe3ZhciBDbj1BdGUodm4pO3JldHVybiIjdGV4dCI9PXZuLnRhZyYm'@;
put 'YSYmKENuLm5vZGVWYWx1ZT12bi50ZXh0KSxDbn0pOyhhfHx2JiZKOGUocWUuZGF0dW0oKSkpJiZwdC5maWx0ZXIoZnVuY3Rpb24odm4pe3JldHVybiIjIj09dm4udGFnWzBdP251bGw6dGhpc30pLmVhY2goZnVuY3Rpb24odm4pe3ZhciBDbj13cyh0aGlzKTtmb3IodmFyIHRuIG9mIE9iamVj'@;
put 'dC5rZXlzKHZuLmF0dHJpYnV0ZXMpKUNuLmF0dHIodG4sdm4uYXR0cmlidXRlc1t0bl0pfSkuZmlsdGVyKGZ1bmN0aW9uKHZuKXtyZXR1cm4ic3ZnIj09dm4udGFnfHwiZyI9PXZuLnRhZz9udWxsOnRoaXN9KS5zdHlsZSgib3BhY2l0eSIsMCk7dmFyIEp0PXJ0LmV4aXQoKTtNJiZKdC5lYWNo'@;
put 'KE0pLGwmJihKdD1KdC50cmFuc2l0aW9uKGwpLGEmJkp0LmZpbHRlcihmdW5jdGlvbih2bil7cmV0dXJuIiMiPT12bi50YWdbMF0/bnVsbDp0aGlzfSkuc3R5bGUoIm9wYWNpdHkiLDApKSxKdD1KdC5yZW1vdmUoKSwocnQ9cHQubWVyZ2UocnQpLm9yZGVyKCkpLmVhY2gocmUpfShydCl9LmNh'@;
put 'bGwoQmUubm9kZSgpLEVlKSx0aGlzLl9vcHRpb25zLnpvb20mJiF0aGlzLl96b29tQmVoYXZpb3ImJlg4ZS5jYWxsKHRoaXMpLEQuX2Rpc3BhdGNoLmNhbGwoInJlbmRlckVuZCIsRCksbnVsbD09bCYmKHRoaXMuX2Rpc3BhdGNoLmNhbGwoImVuZCIsdGhpcyksYyYmYy5jYWxsKHRoaXMpKSx0'@;
put 'aGlzfVJOLnByb3RvdHlwZT1KZy5wcm90b3R5cGU7dmFyIE5BLEZ0ZSxTeHQ9QXJyYXlCdWZmZXIsSXU9VWludDhBcnJheSxPTj1VaW50MTZBcnJheSxNeHQ9SW50MTZBcnJheSxQTj1JbnQzMkFycmF5LEx0ZT1mdW5jdGlvbihjLGwsYSl7aWYoSXUucHJvdG90eXBlLnNsaWNlKXJldHVybiBJ'@;
put 'dS5wcm90b3R5cGUuc2xpY2UuY2FsbChjLGwsYSk7KG51bGw9PWx8fGw8MCkmJihsPTApLChudWxsPT1hfHxhPmMubGVuZ3RoKSYmKGE9Yy5sZW5ndGgpO3ZhciBkPW5ldyBJdShhLWwpO3JldHVybiBkLnNldChjLnN1YmFycmF5KGwsYSkpLGR9LFBBPWZ1bmN0aW9uKGMsbCxhLGQpe2lmKEl1'@;
put 'LnByb3RvdHlwZS5maWxsKXJldHVybiBJdS5wcm90b3R5cGUuZmlsbC5jYWxsKGMsbCxhLGQpO2ZvcigobnVsbD09YXx8YTwwKSYmKGE9MCksKG51bGw9PWR8fGQ+Yy5sZW5ndGgpJiYoZD1jLmxlbmd0aCk7YTxkOysrYSljW2FdPWw7cmV0dXJuIGN9LHh4dD1mdW5jdGlvbihjLGwsYSxkKXtp'@;
put 'ZihJdS5wcm90b3R5cGUuY29weVdpdGhpbilyZXR1cm4gSXUucHJvdG90eXBlLmNvcHlXaXRoaW4uY2FsbChjLGwsYSxkKTtmb3IoKG51bGw9PWF8fGE8MCkmJihhPTApLChudWxsPT1kfHxkPmMubGVuZ3RoKSYmKGQ9Yy5sZW5ndGgpO2E8ZDspY1tsKytdPWNbYSsrXX0sRXh0PVsiaW52YWxp'@;
put 'ZCB6c3RkIGRhdGEiLCJ3aW5kb3cgc2l6ZSB0b28gbGFyZ2UgKD4yMDQ2TUIpIiwiaW52YWxpZCBibG9jayB0eXBlIiwiRlNFIGFjY3VyYWN5IHRvbyBoaWdoIiwibWF0Y2ggZGlzdGFuY2UgdG9vIGZhciBiYWNrIiwidW5leHBlY3RlZCBFT0YiXSxlMD1mdW5jdGlvbihjLGwsYSl7dmFyIGQ9'@;
put 'bmV3IEVycm9yKGx8fEV4dFtjXSk7aWYoZC5jb2RlPWMsRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UmJkVycm9yLmNhcHR1cmVTdGFja1RyYWNlKGQsZTApLCFhKXRocm93IGQ7cmV0dXJuIGR9LHQ3ZT1mdW5jdGlvbihjLGwsYSl7Zm9yKHZhciBkPTAsaD0wO2Q8YTsrK2QpaHw9Y1tsKytdPDwo'@;
put 'ZDw8Myk7cmV0dXJuIGh9LEF4dD1mdW5jdGlvbihjLGwpe3ZhciBhPWNbMF18Y1sxXTw8OHxjWzJdPDwxNjtpZigzMTI2NTY4PT1hJiYyNTM9PWNbM10pe3ZhciBkPWNbNF0saD1kPj41JjEsZj1kPj4yJjEsdj0zJmQsTT1kPj42OzgmZCYmZTAoMCk7dmFyIEQ9Ni1oLFo9Mz09dj80OnYscmU9'@;
put 'dDdlKGMsRCxaKSxjZT1NPzE8PE06aCxiZT10N2UoYyxEKz1aLGNlKSsoMT09TSYmMjU2KSxFZT1iZTtpZighaCl7dmFyIEJlPTE8PDEwKyhjWzVdPj4zKTtFZT1CZSsoQmU+PjMpKig3JmNbNV0pfUVlPjIxNDUzODY0OTYmJmUwKDEpO3ZhciBxZT1uZXcgSXUoKDE9PWw/YmV8fEVlOmw/MDpF'@;
put 'ZSkrMTIpO3JldHVybiBxZVswXT0xLHFlWzRdPTQscWVbOF09OCx7YjpEK2NlLHk6MCxsOjAsZDpyZSx3OmwmJjEhPWw/bDpxZS5zdWJhcnJheSgxMiksZTpFZSxvOm5ldyBQTihxZS5idWZmZXIsMCwzKSx1OmJlLGM6ZixtOk1hdGgubWluKDEzMTA3MixFZSl9fWlmKDI1NDgxODkzPT0oYT4+'@;
put 'NHxjWzNdPDwyMCkpcmV0dXJuIGZ1bmN0aW9uKGMsbCl7cmV0dXJuKGNbNF18Y1s1XTw8OHxjWzZdPDwxNnxjWzddPDwyNCk+Pj4wfShjKSs4O2UwKDApfSxydj1mdW5jdGlvbihjKXtmb3IodmFyIGw9MDsxPDxsPD1jOysrbCk7cmV0dXJuIGwtMX0sRkE9ZnVuY3Rpb24oYyxsLGEpe3ZhciBk'@;
put 'PTQrKGw8PDMpLGg9NSsoMTUmY1tsXSk7aD5hJiZlMCgzKTtmb3IodmFyIGY9MTw8aCx2PWYsTT0tMSxEPS0xLFo9LTEscmU9ZixjZT1uZXcgU3h0KDUxMisoZjw8MikpLGJlPW5ldyBNeHQoY2UsMCwyNTYpLEVlPW5ldyBPTihjZSwwLDI1NiksQmU9bmV3IE9OKGNlLDUxMixmKSxxZT01MTIr'@;
put 'KGY8PDEpLHJ0PW5ldyBJdShjZSxxZSxmKSxwdD1uZXcgSXUoY2UscWUrZik7TTwyNTUmJnY+MDspe3ZhciBkdD1ydih2KzEpLEp0PWQ+PjMsdm49KDE8PGR0KzEpLTEsQ249KGNbSnRdfGNbSnQrMV08PDh8Y1tKdCsyXTw8MTYpPj4oNyZkKSZ2bix0bj0oMTw8ZHQpLTEsTW49dm4tdi0xLENy'@;
put 'PUNuJnRuO2lmKENyPE1uPyhkKz1kdCxDbj1Dcik6KGQrPWR0KzEsQ24+dG4mJihDbi09TW4pKSxiZVsrK01dPS0tQ24sLTE9PUNuPyh2Kz1DbixydFstLXJlXT1NKTp2LT1DbiwhQ24pZG97dmFyIEdyPWQ+PjM7RD0oY1tHcl18Y1tHcisxXTw8OCk+Pig3JmQpJjMsZCs9MixNKz1EfXdoaWxl'@;
put 'KDM9PUQpfShNPjI1NXx8dikmJmUwKDApO2Zvcih2YXIgbXI9MCxHbj0oZj4+MSkrKGY+PjMpKzMsYWk9Zi0xLF9pPTA7X2k8PU07KytfaSl7dmFyIE9uPWJlW19pXTtpZihPbjwxKUVlW19pXT0tT247ZWxzZSBmb3IoWj0wO1o8T247KytaKXtydFttcl09X2k7ZG97bXI9bXIrR24mYWl9d2hp'@;
put 'bGUobXI+PXJlKX19Zm9yKG1yJiZlMCgwKSxaPTA7WjxmOysrWil7dmFyIHpyPUVlW3J0W1pdXSsrLEpuPXB0W1pdPWgtcnYoenIpO0JlW1pdPSh6cjw8Sm4pLWZ9cmV0dXJuW2QrNz4+Myx7YjpoLHM6cnQsbjpwdCx0OkJlfV19LER4dD1GQShuZXcgSXUoWzgxLDE2LDk5LDE0MCw0OSwxOTgs'@;
put 'MjQsOTksMTIsMzMsMTk2LDI0LDk5LDEwMiwxMDIsMTM0LDcwLDE0Niw0XSksMCw2KVsxXSxJeHQ9RkEobmV3IEl1KFszMywyMCwxOTYsMjQsOTksMTQwLDMzLDEzMiwxNiw2Niw4LDMzLDEzMiwxNiw2Niw4LDMzLDY4LDY4LDY4LDY4LDY4LDY4LDY4LDY4LDM2LDldKSwwLDYpWzFdLFJ4dD1G'@;
put 'QShuZXcgSXUoWzMyLDEzMiwxNiw2NiwxMDIsNzAsNjgsNjgsNjgsNjgsMzYsNzMsMl0pLDAsNSlbMV0sbjdlPWZ1bmN0aW9uKGMsbCl7Zm9yKHZhciBhPWMubGVuZ3RoLGQ9bmV3IFBOKGEpLGg9MDtoPGE7KytoKWRbaF09bCxsKz0xPDxjW2hdO3JldHVybiBkfSxPdGU9bmV3IEl1KG5ldyBQ'@;
put 'TihbMCwwLDAsMCwxNjg0MzAwOSw1MDUyODc3MCwxMzQ2NzgwMjAsMjAyMDUwMDU3LDI2OTQyMjA5M10pLmJ1ZmZlciwwLDM2KSxMeHQ9bjdlKE90ZSwwKSxQdGU9bmV3IEl1KG5ldyBQTihbMCwwLDAsMCwwLDAsMCwwLDE2ODQzMDA5LDUwNTI4NzcwLDExNzc2OTIyMCwxODUyMDcwNDgsMjUy'@;
put 'NTc5MDg0LDE2XSkuYnVmZmVyLDAsNTMpLE94dD1uN2UoUHRlLDMpLEhBPWZ1bmN0aW9uKGMsbCxhKXt2YXIgZD1jLmxlbmd0aCxoPWwubGVuZ3RoLGY9Y1tkLTFdLHY9KDE8PGEuYiktMSxNPS1hLmI7Znx8ZTAoMCk7Zm9yKHZhciBEPTAsWj1hLmIscmU9KGQ8PDMpLTgrcnYoZiktWixjZT0t'@;
put 'MTtyZT5NJiZjZTxoOyl7dmFyIGJlPXJlPj4zO2xbKytjZV09YS5zW0Q9KEQ8PFp8KGNbYmVdfGNbYmUrMV08PDh8Y1tiZSsyXTw8MTYpPj4oNyZyZSkpJnZdLHJlLT1aPWEubltEXX0ocmUhPU18fGNlKzEhPWgpJiZlMCgwKX0sUHh0PWZ1bmN0aW9uKGMsbCxhKXt2YXIgZD02LGY9bC5sZW5n'@;
put 'dGgrMz4+Mix2PWY8PDEsTT1mK3Y7SEEoYy5zdWJhcnJheShkLGQrPWNbMF18Y1sxXTw8OCksbC5zdWJhcnJheSgwLGYpLGEpLEhBKGMuc3ViYXJyYXkoZCxkKz1jWzJdfGNbM108PDgpLGwuc3ViYXJyYXkoZix2KSxhKSxIQShjLnN1YmFycmF5KGQsZCs9Y1s0XXxjWzVdPDw4KSxsLnN1YmFy'@;
put 'cmF5KHYsTSksYSksSEEoYy5zdWJhcnJheShkKSxsLnN1YmFycmF5KE0pLGEpfSxGeHQ9ZnVuY3Rpb24oYyxsLGEpe3ZhciBkLGg9bC5iLGY9Y1toXSx2PWY+PjEmMztsLmw9MSZmO3ZhciBNPWY+PjN8Y1toKzFdPDw1fGNbaCsyXTw8MTMsRD0oaCs9MykrTTtpZigxPT12KXJldHVybiBoPj1j'@;
put 'Lmxlbmd0aD92b2lkIDA6KGwuYj1oKzEsYT8oUEEoYSxjW2hdLGwueSxsLnkrPU0pLGEpOlBBKG5ldyBJdShNKSxjW2hdKSk7aWYoIShEPmMubGVuZ3RoKSl7aWYoMD09dilyZXR1cm4gbC5iPUQsYT8oYS5zZXQoYy5zdWJhcnJheShoLEQpLGwueSksbC55Kz1NLGEpOkx0ZShjLGgsRCk7aWYo'@;
put 'Mj09dil7dmFyIFo9Y1toXSxyZT0zJlosY2U9Wj4+MiYzLGJlPVo+PjQsRWU9MCxCZT0wO3JlPDI/MSZjZT9iZXw9Y1srK2hdPDw0fCgyJmNlJiZjWysraF08PDEyKTpiZT1aPj4zOihCZT1jZSxjZTwyPyhiZXw9KDYzJmNbKytoXSk8PDQsRWU9Y1toXT4+NnxjWysraF08PDIpOjI9PWNlPyhi'@;
put 'ZXw9Y1srK2hdPDw0fCgzJmNbKytoXSk8PDEyLEVlPWNbaF0+PjJ8Y1srK2hdPDw2KTooYmV8PWNbKytoXTw8NHwoNjMmY1srK2hdKTw8MTIsRWU9Y1toXT4+NnxjWysraF08PDJ8Y1srK2hdPDwxMCkpLCsraDt2YXIgcWU9YT9hLnN1YmFycmF5KGwueSxsLnkrbC5tKTpuZXcgSXUobC5tKSxy'@;
put 'dD1xZS5sZW5ndGgtYmU7aWYoMD09cmUpcWUuc2V0KGMuc3ViYXJyYXkoaCxoKz1iZSkscnQpO2Vsc2UgaWYoMT09cmUpUEEocWUsY1toKytdLHJ0KTtlbHNle3ZhciBwdD1sLmg7aWYoMj09cmUpe3ZhciBkdD1mdW5jdGlvbihjLGwpe3ZhciBhPTAsZD0tMSxoPW5ldyBJdSgyOTIpLGY9Y1ts'@;
put 'XSx2PWguc3ViYXJyYXkoMCwyNTYpLE09aC5zdWJhcnJheSgyNTYsMjY4KSxEPW5ldyBPTihoLmJ1ZmZlciwyNjgpO2lmKGY8MTI4KXt2YXIgWj1GQShjLGwrMSw2KSxjZT1aWzFdLGJlPVpbMF08PDMsRWU9Y1tsKz1mXTtFZXx8ZTAoMCk7Zm9yKHZhciBCZT0wLHFlPTAscnQ9Y2UuYixwdD1y'@;
put 'dCxkdD0oKytsPDwzKS04K3J2KEVlKTshKChkdC09cnQpPGJlKTspe3ZhciBKdD1kdD4+MztpZih2WysrZF09Y2Uuc1tCZSs9KGNbSnRdfGNbSnQrMV08PDgpPj4oNyZkdCkmKDE8PHJ0KS0xXSwoZHQtPXB0KTxiZSlicmVhazt2WysrZF09Y2Uuc1txZSs9KGNbSnQ9ZHQ+PjNdfGNbSnQrMV08'@;
put 'PDgpPj4oNyZkdCkmKDE8PHB0KS0xXSxydD1jZS5uW0JlXSxCZT1jZS50W0JlXSxwdD1jZS5uW3FlXSxxZT1jZS50W3FlXX0rK2Q+MjU1JiZlMCgwKX1lbHNle2ZvcihkPWYtMTI3O2E8ZDthKz0yKXt2YXIgdm49Y1srK2xdO3ZbYV09dm4+PjQsdlthKzFdPTE1JnZufSsrbH12YXIgQ249MDtm'@;
put 'b3IoYT0wO2E8ZDsrK2EpKHRuPXZbYV0pPjExJiZlMCgwKSxDbis9dG4mJjE8PHRuLTE7dmFyIE1uPXJ2KENuKSsxLENyPTE8PE1uLEdyPUNyLUNuO2ZvcihHciZHci0xJiZlMCgwKSx2W2QrK109cnYoR3IpKzEsYT0wO2E8ZDsrK2Epe3ZhciB0bjsrK01bdlthXT0odG49dlthXSkmJk1uKzEt'@;
put 'dG5dfXZhciBtcj1uZXcgSXUoQ3I8PDEpLEduPW1yLnN1YmFycmF5KDAsQ3IpLGFpPW1yLnN1YmFycmF5KENyKTtmb3IoRFtNbl09MCxhPU1uO2E+MDstLWEpe3ZhciBfaT1EW2FdO1BBKGFpLGEsX2ksRFthLTFdPV9pK01bYV0qKDE8PE1uLWEpKX1mb3IoRFswXSE9Q3ImJmUwKDApLGE9MDth'@;
put 'PGQ7KythKXt2YXIgT249dlthXTtpZihPbil7dmFyIHpyPURbT25dO1BBKEduLGEsenIsRFtPbl09enIrKDE8PE1uLU9uKSl9fXJldHVybltsLHtuOmFpLGI6TW4sczpHbn1dfShjLGgpO0VlKz1oLShoPWR0WzBdKSxsLmg9cHQ9ZHRbMV19ZWxzZSBwdHx8ZTAoMCk7KEJlP1B4dDpIQSkoYy5z'@;
put 'dWJhcnJheShoLGgrPUVlKSxxZS5zdWJhcnJheShydCkscHQpfXZhciBKdD1jW2grK107aWYoSnQpezI1NT09SnQ/SnQ9MzI1MTIrKGNbaCsrXXxjW2grK108PDgpOkp0PjEyNyYmKEp0PUp0LTEyODw8OHxjW2grK10pO3ZhciB2bj1jW2grK107MyZ2biYmZTAoMCk7Zm9yKHZhciBDbj1bSXh0'@;
put 'LFJ4dCxEeHRdLHRuPTI7dG4+LTE7LS10bil7dmFyIE1uPXZuPj4yKyh0bjw8MSkmMztpZigxPT1Nbil7dmFyIENyPW5ldyBJdShbMCwwLGNbaCsrXV0pO0NuW3RuXT17czpDci5zdWJhcnJheSgyLDMpLG46Q3Iuc3ViYXJyYXkoMCwxKSx0Om5ldyBPTihDci5idWZmZXIsMCwxKSxiOjB9fWVs'@;
put 'c2UgMj09TW4/KGg9KGQ9RkEoYyxoLDktKDEmdG4pKSlbMF0sQ25bdG5dPWRbMV0pOjM9PU1uJiYobC50fHxlMCgwKSxDblt0bl09bC50W3RuXSl9dmFyIEdyPWwudD1Dbixtcj1HclswXSxHbj1HclsxXSxhaT1HclsyXSxfaT1jW0QtMV07X2l8fGUwKDApO3ZhciBPbj0oRDw8MyktOCtydihf'@;
put 'aSktYWkuYix6cj1Pbj4+MyxKbj0wLElyPShjW3pyXXxjW3pyKzFdPDw4KT4+KDcmT24pJigxPDxhaS5iKS0xLCRyPShjW3pyPShPbi09R24uYik+PjNdfGNbenIrMV08PDgpPj4oNyZPbikmKDE8PEduLmIpLTEsd2k9KGNbenI9KE9uLT1tci5iKT4+M118Y1t6cisxXTw8OCk+Pig3Jk9uKSYo'@;
put 'MTw8bXIuYiktMTtmb3IoKytKdDstLUp0Oyl7dmFyIGVhPWFpLnNbSXJdLGZhPWFpLm5bSXJdLHZ0PW1yLnNbd2ldLE50PW1yLm5bd2ldLEh0PUduLnNbJHJdLEhuPUduLm5bJHJdLHRyPTE8PEh0LGFyPXRyKygoY1t6cj0oT24tPUh0KT4+M118Y1t6cisxXTw8OHxjW3pyKzJdPDwxNnxjW3py'@;
put 'KzNdPDwyNCk+Pj4oNyZPbikmdHItMSk7enI9KE9uLT1QdGVbdnRdKT4+Mzt2YXIgSHI9T3h0W3Z0XSsoKGNbenJdfGNbenIrMV08PDh8Y1t6cisyXTw8MTYpPj4oNyZPbikmKDE8PFB0ZVt2dF0pLTEpO3pyPShPbi09T3RlW2VhXSk+PjM7dmFyIHFyPUx4dFtlYV0rKChjW3pyXXxjW3pyKzFd'@;
put 'PDw4fGNbenIrMl08PDE2KT4+KDcmT24pJigxPDxPdGVbZWFdKS0xKTtpZih6cj0oT24tPWZhKT4+MyxJcj1haS50W0lyXSsoKGNbenJdfGNbenIrMV08PDgpPj4oNyZPbikmKDE8PGZhKS0xKSx6cj0oT24tPU50KT4+Myx3aT1tci50W3dpXSsoKGNbenJdfGNbenIrMV08PDgpPj4oNyZPbikm'@;
put 'KDE8PE50KS0xKSx6cj0oT24tPUhuKT4+Mywkcj1Hbi50WyRyXSsoKGNbenJdfGNbenIrMV08PDgpPj4oNyZPbikmKDE8PEhuKS0xKSxhcj4zKWwub1syXT1sLm9bMV0sbC5vWzFdPWwub1swXSxsLm9bMF09YXItPTM7ZWxzZXt2YXIgb249YXItKDAhPXFyKTtvbj8oYXI9Mz09b24/bC5vWzBd'@;
put 'LTE6bC5vW29uXSxvbj4xJiYobC5vWzJdPWwub1sxXSksbC5vWzFdPWwub1swXSxsLm9bMF09YXIpOmFyPWwub1swXX1mb3IodG49MDt0bjxxcjsrK3RuKXFlW0puK3RuXT1xZVtydCt0bl07cnQrPXFyO3ZhciB5bj0oSm4rPXFyKS1hcjtpZih5bjwwKXt2YXIgcG49LXluLHByPWwuZSt5bjtm'@;
put 'b3IocG4+SHImJihwbj1IciksdG49MDt0bjxwbjsrK3RuKXFlW0puK3RuXT1sLndbcHIrdG5dO0puKz1wbixIci09cG4seW49MH1mb3IodG49MDt0bjxIcjsrK3RuKXFlW0puK3RuXT1xZVt5bit0bl07Sm4rPUhyfWlmKEpuIT1ydClmb3IoO3J0PHFlLmxlbmd0aDspcWVbSm4rK109cWVbcnQr'@;
put 'K107ZWxzZSBKbj1xZS5sZW5ndGg7YT9sLnkrPUpuOnFlPUx0ZShxZSwwLEpuKX1lbHNlIGlmKGEpe2lmKGwueSs9YmUscnQpZm9yKHRuPTA7dG48YmU7Kyt0bilxZVt0bl09cWVbcnQrdG5dfWVsc2UgcnQmJihxZT1MdGUocWUscnQpKTtyZXR1cm4gbC5iPUQscWV9ZTAoMil9fSxCeHQ9KHR5'@;
put 'cGVvZiBkb2N1bWVudDwidSImJmRvY3VtZW50LGZ1bmN0aW9uKGw9e30pe3ZhciBoLGYsQmUsZD1sLHY9bmV3IFByb21pc2UoKFplLGx0KT0+e2g9WmUsZj1sdH0pLEQ9T2JqZWN0LmFzc2lnbih7fSxkKSxxZT1jb25zb2xlLmxvZy5iaW5kKGNvbnNvbGUpLHJ0PWNvbnNvbGUuZXJyb3IuYmlu'@;
put 'ZChjb25zb2xlKTtPYmplY3QuYXNzaWduKGQsRCksRD1udWxsO3ZhciBkdCx0bixNbixDcixtcixHbixfaSxwdD1kLndhc21CaW5hcnksSnQ9ITE7ZnVuY3Rpb24gQ24oWmUsbHQpe1plfHxxcihsdCl9ZnVuY3Rpb24gT24oKXt2YXIgWmU9ZHQuYnVmZmVyO2QuSEVBUDg9dG49bmV3IEludDhB'@;
put 'cnJheShaZSksZC5IRUFQMTY9Q3I9bmV3IEludDE2QXJyYXkoWmUpLGQuSEVBUFU4PU1uPW5ldyBVaW50OEFycmF5KFplKSxkLkhFQVBVMTY9bmV3IFVpbnQxNkFycmF5KFplKSxkLkhFQVAzMj1tcj1uZXcgSW50MzJBcnJheShaZSksZC5IRUFQVTMyPUduPW5ldyBVaW50MzJBcnJheShaZSks'@;
put 'ZC5IRUFQRjMyPW5ldyBGbG9hdDMyQXJyYXkoWmUpLGQuSEVBUEY2ND1faT1uZXcgRmxvYXQ2NEFycmF5KFplKX12YXIgenI9W10sSm49W10sSXI9W10sTnQ9MCxIdD1udWxsLEhuPW51bGw7ZnVuY3Rpb24gYXIoWmUpe050Kyt9ZnVuY3Rpb24gSHIoWmUpe2lmKDA9PS0tTnQmJihudWxsIT09'@;
put 'SHQmJihjbGVhckludGVydmFsKEh0KSxIdD1udWxsKSxIbikpe3ZhciBsdD1IbjtIbj1udWxsLGx0KCl9fWZ1bmN0aW9uIHFyKFplKXtydChaZT0iQWJvcnRlZCgiK1plKyIpIiksSnQ9ITAsWmUrPSIuIEJ1aWxkIHdpdGggLXNBU1NFUlRJT05TIGZvciBtb3JlIGluZm8uIjt2YXIgbHQ9bmV3'@;
put 'IFdlYkFzc2VtYmx5LlJ1bnRpbWVFcnJvcihaZSk7dGhyb3cgZihsdCksbHR9dmFyICRuLHluPVplPT5aZS5zdGFydHNXaXRoKCJkYXRhOmFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbTtiYXNlNjQsIik7ZnVuY3Rpb24gZHIoWmUpe2lmKFplPT0kbiYmcHQpcmV0dXJuIG5ldyBVaW50OEFycmF5'@;
put 'KHB0KTtpZihCZSlyZXR1cm4gQmUoWmUpO3Rocm93ImJvdGggYXN5bmMgYW5kIHN5bmMgZmV0Y2hpbmcgb2YgdGhlIHdhc20gZmFpbGVkIn1mdW5jdGlvbiBabihaZSxsdCxMdCl7cmV0dXJuIGZ1bmN0aW9uIFVyKFplKXtyZXR1cm4gcHQ/UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+ZHIo'@;
put 'WmUpKToodm9pZCAwKShaZSkudGhlbihsdD0+bmV3IFVpbnQ4QXJyYXkobHQpLCgpPT5kcihaZSkpfShaZSkudGhlbigkdD0+V2ViQXNzZW1ibHkuaW5zdGFudGlhdGUoJHQsbHQpKS50aGVuKEx0LCR0PT57cnQoYGZhaWxlZCB0byBhc3luY2hyb25vdXNseSBwcmVwYXJlIHdhc206ICR7JHR9'@;
put 'YCkscXIoJHQpfSl9dmFyIFpyLGFhLEJhPXsxNzMwNjQ6KFplLGx0KT0+e3ZhciBMdD12MChaZSksJHQ9djAobHQpO1l0LmNyZWF0ZVBhdGgoIi8iLFFvLmRpcm5hbWUoTHQpKSxZdC53cml0ZUZpbGUoUW8uam9pbigiLyIsTHQpLCR0KX19O2NsYXNzIElve25hbWU9IkV4aXRTdGF0dXMiO2Nv'@;
put 'bnN0cnVjdG9yKGx0KXt0aGlzLm1lc3NhZ2U9YFByb2dyYW0gdGVybWluYXRlZCB3aXRoIGV4aXQoJHtsdH0pYCx0aGlzLnN0YXR1cz1sdH19dmFyIFpvPVplPT57Zm9yKDtaZS5sZW5ndGg+MDspWmUuc2hpZnQoKShkKX07Y2xhc3MgcHN7Y29uc3RydWN0b3IobHQpe3RoaXMuZXhjUHRyPWx0'@;
put 'LHRoaXMucHRyPWx0LTI0fXNldF90eXBlKGx0KXtHblt0aGlzLnB0cis0Pj4yXT1sdH1nZXRfdHlwZSgpe3JldHVybiBHblt0aGlzLnB0cis0Pj4yXX1zZXRfZGVzdHJ1Y3RvcihsdCl7R25bdGhpcy5wdHIrOD4+Ml09bHR9Z2V0X2Rlc3RydWN0b3IoKXtyZXR1cm4gR25bdGhpcy5wdHIrOD4+'@;
put 'Ml19c2V0X2NhdWdodChsdCl7dG5bdGhpcy5wdHIrMTJdPWx0PWx0PzE6MH1nZXRfY2F1Z2h0KCl7cmV0dXJuIDAhPXRuW3RoaXMucHRyKzEyXX1zZXRfcmV0aHJvd24obHQpe3RuW3RoaXMucHRyKzEzXT1sdD1sdD8xOjB9Z2V0X3JldGhyb3duKCl7cmV0dXJuIDAhPXRuW3RoaXMucHRyKzEz'@;
put 'XX1pbml0KGx0LEx0KXt0aGlzLnNldF9hZGp1c3RlZF9wdHIoMCksdGhpcy5zZXRfdHlwZShsdCksdGhpcy5zZXRfZGVzdHJ1Y3RvcihMdCl9c2V0X2FkanVzdGVkX3B0cihsdCl7R25bdGhpcy5wdHIrMTY+PjJdPWx0fWdldF9hZGp1c3RlZF9wdHIoKXtyZXR1cm4gR25bdGhpcy5wdHIrMTY+'@;
put 'PjJdfX12YXIgUW89e2lzQWJzOlplPT4iLyI9PT1aZS5jaGFyQXQoMCksc3BsaXRQYXRoOlplPT4vXihcLz98KShbXHNcU10qPykoKD86XC57MSwyfXxbXlwvXSs/fCkoXC5bXi5cL10qfCkpKD86W1wvXSopJC8uZXhlYyhaZSkuc2xpY2UoMSksbm9ybWFsaXplQXJyYXk6KFplLGx0KT0+e2Zv'@;
put 'cih2YXIgTHQ9MCwkdD1aZS5sZW5ndGgtMTskdD49MDskdC0tKXt2YXIgRG49WmVbJHRdOyIuIj09PURuP1plLnNwbGljZSgkdCwxKToiLi4iPT09RG4/KFplLnNwbGljZSgkdCwxKSxMdCsrKTpMdCYmKFplLnNwbGljZSgkdCwxKSxMdC0tKX1pZihsdClmb3IoO0x0O0x0LS0pWmUudW5zaGlm'@;
put 'dCgiLi4iKTtyZXR1cm4gWmV9LG5vcm1hbGl6ZTpaZT0+e3ZhciBsdD1Rby5pc0FicyhaZSksTHQ9Ii8iPT09WmUuc3Vic3RyKC0xKTtyZXR1cm4hKFplPVFvLm5vcm1hbGl6ZUFycmF5KFplLnNwbGl0KCIvIikuZmlsdGVyKCR0PT4hISR0KSwhbHQpLmpvaW4oIi8iKSkmJiFsdCYmKFplPSIu'@;
put 'IiksWmUmJkx0JiYoWmUrPSIvIiksKGx0PyIvIjoiIikrWmV9LGRpcm5hbWU6WmU9Pnt2YXIgbHQ9UW8uc3BsaXRQYXRoKFplKSxMdD1sdFswXSwkdD1sdFsxXTtyZXR1cm4gTHR8fCR0PygkdCYmKCR0PSR0LnN1YnN0cigwLCR0Lmxlbmd0aC0xKSksTHQrJHQpOiIuIn0sYmFzZW5hbWU6WmU9'@;
put 'PntpZigiLyI9PT1aZSlyZXR1cm4iLyI7dmFyIGx0PShaZT0oWmU9UW8ubm9ybWFsaXplKFplKSkucmVwbGFjZSgvXC8kLywiIikpLmxhc3RJbmRleE9mKCIvIik7cmV0dXJuLTE9PT1sdD9aZTpaZS5zdWJzdHIobHQrMSl9LGpvaW46KC4uLlplKT0+UW8ubm9ybWFsaXplKFplLmpvaW4oIi8i'@;
put 'KSksam9pbjI6KFplLGx0KT0+UW8ubm9ybWFsaXplKFplKyIvIitsdCl9LGFkPVplPT4oYWQ9KCgpPT57aWYoIm9iamVjdCI9PXR5cGVvZiBjcnlwdG8mJiJmdW5jdGlvbiI9PXR5cGVvZiBjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKXJldHVybiBaZT0+Y3J5cHRvLmdldFJhbmRvbVZhbHVlcyha'@;
put 'ZSk7cXIoImluaXRSYW5kb21EZXZpY2UiKX0pKCkpKFplKSxVcz17cmVzb2x2ZTooLi4uWmUpPT57Zm9yKHZhciBsdD0iIixMdD0hMSwkdD1aZS5sZW5ndGgtMTskdD49LTEmJiFMdDskdC0tKXt2YXIgRG49JHQ+PTA/WmVbJHRdOll0LmN3ZCgpO2lmKCJzdHJpbmciIT10eXBlb2YgRG4pdGhy'@;
put 'b3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnRzIHRvIHBhdGgucmVzb2x2ZSBtdXN0IGJlIHN0cmluZ3MiKTtpZighRG4pcmV0dXJuIiI7bHQ9RG4rIi8iK2x0LEx0PVFvLmlzQWJzKERuKX1yZXR1cm4oTHQ/Ii8iOiIiKSsobHQ9UW8ubm9ybWFsaXplQXJyYXkobHQuc3BsaXQoIi8iKS5maWx0'@;
put 'ZXIoY3I9PiEhY3IpLCFMdCkuam9pbigiLyIpKXx8Ii4ifSxyZWxhdGl2ZTooWmUsbHQpPT57ZnVuY3Rpb24gTHQoR28pe2Zvcih2YXIgSHM9MDtIczxHby5sZW5ndGgmJiIiPT09R29bSHNdO0hzKyspO2Zvcih2YXIgYWw9R28ubGVuZ3RoLTE7YWw+PTAmJiIiPT09R29bYWxdO2FsLS0pO3Jl'@;
put 'dHVybiBIcz5hbD9bXTpHby5zbGljZShIcyxhbC1IcysxKX1aZT1Vcy5yZXNvbHZlKFplKS5zdWJzdHIoMSksbHQ9VXMucmVzb2x2ZShsdCkuc3Vic3RyKDEpO2Zvcih2YXIgJHQ9THQoWmUuc3BsaXQoIi8iKSksRG49THQobHQuc3BsaXQoIi8iKSksY3I9TWF0aC5taW4oJHQubGVuZ3RoLERu'@;
put 'Lmxlbmd0aCksUnI9Y3IsWHI9MDtYcjxjcjtYcisrKWlmKCR0W1hyXSE9PURuW1hyXSl7UnI9WHI7YnJlYWt9dmFyIGthPVtdO2ZvcihYcj1ScjtYcjwkdC5sZW5ndGg7WHIrKylrYS5wdXNoKCIuLiIpO3JldHVybihrYT1rYS5jb25jYXQoRG4uc2xpY2UoUnIpKSkuam9pbigiLyIpfX0sSmM9'@;
put 'dHlwZW9mIFRleHREZWNvZGVyPCJ1Ij9uZXcgVGV4dERlY29kZXI6dm9pZCAwLHFzPShaZSxsdD0wLEx0PU5hTik9Pntmb3IodmFyICR0PWx0K0x0LERuPWx0O1plW0RuXSYmIShEbj49JHQpOykrK0RuO2lmKERuLWx0PjE2JiZaZS5idWZmZXImJkpjKXJldHVybiBKYy5kZWNvZGUoWmUuc3Vi'@;
put 'YXJyYXkobHQsRG4pKTtmb3IodmFyIGNyPSIiO2x0PERuOyl7dmFyIFJyPVplW2x0KytdO2lmKDEyOCZScil7dmFyIFhyPTYzJlplW2x0KytdO2lmKDE5MiE9KDIyNCZScikpe3ZhciBrYT02MyZaZVtsdCsrXTtpZigoUnI9MjI0PT0oMjQwJlJyKT8oMTUmUnIpPDwxMnxYcjw8NnxrYTooNyZS'@;
put 'cik8PDE4fFhyPDwxMnxrYTw8Nnw2MyZaZVtsdCsrXSk8NjU1MzYpY3IrPVN0cmluZy5mcm9tQ2hhckNvZGUoUnIpO2Vsc2V7dmFyIEdvPVJyLTY1NTM2O2NyKz1TdHJpbmcuZnJvbUNoYXJDb2RlKDU1Mjk2fEdvPj4xMCw1NjMyMHwxMDIzJkdvKX19ZWxzZSBjcis9U3RyaW5nLmZyb21DaGFy'@;
put 'Q29kZSgoMzEmUnIpPDw2fFhyKX1lbHNlIGNyKz1TdHJpbmcuZnJvbUNoYXJDb2RlKFJyKX1yZXR1cm4gY3J9LEJsPVtdLGVzPVplPT57Zm9yKHZhciBsdD0wLEx0PTA7THQ8WmUubGVuZ3RoOysrTHQpe3ZhciAkdD1aZS5jaGFyQ29kZUF0KEx0KTskdDw9MTI3P2x0Kys6JHQ8PTIwNDc/bHQr'@;
put 'PTI6JHQ+PTU1Mjk2JiYkdDw9NTczNDM/KGx0Kz00LCsrTHQpOmx0Kz0zfXJldHVybiBsdH0sRTE9KFplLGx0LEx0LCR0KT0+e2lmKCEoJHQ+MCkpcmV0dXJuIDA7Zm9yKHZhciBEbj1MdCxjcj1MdCskdC0xLFJyPTA7UnI8WmUubGVuZ3RoOysrUnIpe3ZhciBYcj1aZS5jaGFyQ29kZUF0KFJy'@;
put 'KTtpZihYcj49NTUyOTYmJlhyPD01NzM0MyYmKFhyPTY1NTM2KygoMTAyMyZYcik8PDEwKXwxMDIzJlplLmNoYXJDb2RlQXQoKytScikpLFhyPD0xMjcpe2lmKEx0Pj1jcilicmVhaztsdFtMdCsrXT1Ycn1lbHNlIGlmKFhyPD0yMDQ3KXtpZihMdCsxPj1jcilicmVhaztsdFtMdCsrXT0xOTJ8'@;
put 'WHI+PjYsbHRbTHQrK109MTI4fDYzJlhyfWVsc2UgaWYoWHI8PTY1NTM1KXtpZihMdCsyPj1jcilicmVhaztsdFtMdCsrXT0yMjR8WHI+PjEyLGx0W0x0KytdPTEyOHxYcj4+NiY2MyxsdFtMdCsrXT0xMjh8NjMmWHJ9ZWxzZXtpZihMdCszPj1jcilicmVhaztsdFtMdCsrXT0yNDB8WHI+PjE4'@;
put 'LGx0W0x0KytdPTEyOHxYcj4+MTImNjMsbHRbTHQrK109MTI4fFhyPj42JjYzLGx0W0x0KytdPTEyOHw2MyZYcn19cmV0dXJuIGx0W0x0XT0wLEx0LURufSxkND17dHR5czpbXSxpbml0KCl7fSxzaHV0ZG93bigpe30scmVnaXN0ZXIoWmUsbHQpe2Q0LnR0eXNbWmVdPXtpbnB1dDpbXSxvdXRw'@;
put 'dXQ6W10sb3BzOmx0fSxZdC5yZWdpc3RlckRldmljZShaZSxkNC5zdHJlYW1fb3BzKX0sc3RyZWFtX29wczp7b3BlbihaZSl7dmFyIGx0PWQ0LnR0eXNbWmUubm9kZS5yZGV2XTtpZighbHQpdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoNDMpO1plLnR0eT1sdCxaZS5zZWVrYWJsZT0hMX0sY2xv'@;
put 'c2UoWmUpe1plLnR0eS5vcHMuZnN5bmMoWmUudHR5KX0sZnN5bmMoWmUpe1plLnR0eS5vcHMuZnN5bmMoWmUudHR5KX0scmVhZChaZSxsdCxMdCwkdCxEbil7aWYoIVplLnR0eXx8IVplLnR0eS5vcHMuZ2V0X2NoYXIpdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoNjApO2Zvcih2YXIgY3I9MCxS'@;
put 'cj0wO1JyPCR0O1JyKyspe3ZhciBYcjt0cnl7WHI9WmUudHR5Lm9wcy5nZXRfY2hhcihaZS50dHkpfWNhdGNoe3Rocm93IG5ldyBZdC5FcnJub0Vycm9yKDI5KX1pZih2b2lkIDA9PT1YciYmMD09PWNyKXRocm93IG5ldyBZdC5FcnJub0Vycm9yKDYpO2lmKG51bGw9PVhyKWJyZWFrO2NyKyss'@;
put 'bHRbTHQrUnJdPVhyfXJldHVybiBjciYmKFplLm5vZGUudGltZXN0YW1wPURhdGUubm93KCkpLGNyfSx3cml0ZShaZSxsdCxMdCwkdCxEbil7aWYoIVplLnR0eXx8IVplLnR0eS5vcHMucHV0X2NoYXIpdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoNjApO3RyeXtmb3IodmFyIGNyPTA7Y3I8JHQ7'@;
put 'Y3IrKylaZS50dHkub3BzLnB1dF9jaGFyKFplLnR0eSxsdFtMdCtjcl0pfWNhdGNoe3Rocm93IG5ldyBZdC5FcnJub0Vycm9yKDI5KX1yZXR1cm4gJHQmJihaZS5ub2RlLnRpbWVzdGFtcD1EYXRlLm5vdygpKSxjcn19LGRlZmF1bHRfdHR5X29wczp7Z2V0X2NoYXI6WmU9PkJsLmxlbmd0aD9C'@;
put 'bC5zaGlmdCgpOm51bGwscHV0X2NoYXIoWmUsbHQpe251bGw9PT1sdHx8MTA9PT1sdD8ocWUocXMoWmUub3V0cHV0KSksWmUub3V0cHV0PVtdKTowIT1sdCYmWmUub3V0cHV0LnB1c2gobHQpfSxmc3luYyhaZSl7WmUub3V0cHV0JiZaZS5vdXRwdXQubGVuZ3RoPjAmJihxZShxcyhaZS5vdXRw'@;
put 'dXQpKSxaZS5vdXRwdXQ9W10pfSxpb2N0bF90Y2dldHM6WmU9Pih7Y19pZmxhZzoyNTg1NixjX29mbGFnOjUsY19jZmxhZzoxOTEsY19sZmxhZzozNTM4NyxjX2NjOlszLDI4LDEyNywyMSw0LDAsMSwwLDE3LDE5LDI2LDAsMTgsMTUsMjMsMjIsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCww'@;
put 'LDAsMF19KSxpb2N0bF90Y3NldHM6KFplLGx0LEx0KT0+MCxpb2N0bF90aW9jZ3dpbnN6OlplPT5bMjQsODBdfSxkZWZhdWx0X3R0eTFfb3BzOntwdXRfY2hhcihaZSxsdCl7bnVsbD09PWx0fHwxMD09PWx0PyhydChxcyhaZS5vdXRwdXQpKSxaZS5vdXRwdXQ9W10pOjAhPWx0JiZaZS5vdXRw'@;
put 'dXQucHVzaChsdCl9LGZzeW5jKFplKXtaZS5vdXRwdXQmJlplLm91dHB1dC5sZW5ndGg+MCYmKHJ0KHFzKFplLm91dHB1dCkpLFplLm91dHB1dD1bXSl9fX0sVkE9KFplLGx0KT0+TWF0aC5jZWlsKFplL2x0KSpsdCxVTj1aZT0+e1plPVZBKFplLDY1NTM2KTt2YXIgbHQ9VzdlKDY1NTM2LFpl'@;
put 'KTtyZXR1cm4gbHQmJigoWmUsbHQpPT57TW4uZmlsbCgwLFplLFplK2x0KX0pKGx0LFplKSxsdH0sJGE9e29wc190YWJsZTpudWxsLG1vdW50OlplPT4kYS5jcmVhdGVOb2RlKG51bGwsIi8iLDE2ODk1LDApLGNyZWF0ZU5vZGUoWmUsbHQsTHQsJHQpe2lmKFl0LmlzQmxrZGV2KEx0KXx8WXQu'@;
put 'aXNGSUZPKEx0KSl0aHJvdyBuZXcgWXQuRXJybm9FcnJvcig2Myk7JGEub3BzX3RhYmxlfHw9e2Rpcjp7bm9kZTp7Z2V0YXR0cjokYS5ub2RlX29wcy5nZXRhdHRyLHNldGF0dHI6JGEubm9kZV9vcHMuc2V0YXR0cixsb29rdXA6JGEubm9kZV9vcHMubG9va3VwLG1rbm9kOiRhLm5vZGVfb3Bz'@;
put 'Lm1rbm9kLHJlbmFtZTokYS5ub2RlX29wcy5yZW5hbWUsdW5saW5rOiRhLm5vZGVfb3BzLnVubGluayxybWRpcjokYS5ub2RlX29wcy5ybWRpcixyZWFkZGlyOiRhLm5vZGVfb3BzLnJlYWRkaXIsc3ltbGluazokYS5ub2RlX29wcy5zeW1saW5rfSxzdHJlYW06e2xsc2VlazokYS5zdHJlYW1f'@;
put 'b3BzLmxsc2Vla319LGZpbGU6e25vZGU6e2dldGF0dHI6JGEubm9kZV9vcHMuZ2V0YXR0cixzZXRhdHRyOiRhLm5vZGVfb3BzLnNldGF0dHJ9LHN0cmVhbTp7bGxzZWVrOiRhLnN0cmVhbV9vcHMubGxzZWVrLHJlYWQ6JGEuc3RyZWFtX29wcy5yZWFkLHdyaXRlOiRhLnN0cmVhbV9vcHMud3Jp'@;
put 'dGUsYWxsb2NhdGU6JGEuc3RyZWFtX29wcy5hbGxvY2F0ZSxtbWFwOiRhLnN0cmVhbV9vcHMubW1hcCxtc3luYzokYS5zdHJlYW1fb3BzLm1zeW5jfX0sbGluazp7bm9kZTp7Z2V0YXR0cjokYS5ub2RlX29wcy5nZXRhdHRyLHNldGF0dHI6JGEubm9kZV9vcHMuc2V0YXR0cixyZWFkbGluazok'@;
put 'YS5ub2RlX29wcy5yZWFkbGlua30sc3RyZWFtOnt9fSxjaHJkZXY6e25vZGU6e2dldGF0dHI6JGEubm9kZV9vcHMuZ2V0YXR0cixzZXRhdHRyOiRhLm5vZGVfb3BzLnNldGF0dHJ9LHN0cmVhbTpZdC5jaHJkZXZfc3RyZWFtX29wc319O3ZhciBEbj1ZdC5jcmVhdGVOb2RlKFplLGx0LEx0LCR0'@;
put 'KTtyZXR1cm4gWXQuaXNEaXIoRG4ubW9kZSk/KERuLm5vZGVfb3BzPSRhLm9wc190YWJsZS5kaXIubm9kZSxEbi5zdHJlYW1fb3BzPSRhLm9wc190YWJsZS5kaXIuc3RyZWFtLERuLmNvbnRlbnRzPXt9KTpZdC5pc0ZpbGUoRG4ubW9kZSk/KERuLm5vZGVfb3BzPSRhLm9wc190YWJsZS5maWxl'@;
put 'Lm5vZGUsRG4uc3RyZWFtX29wcz0kYS5vcHNfdGFibGUuZmlsZS5zdHJlYW0sRG4udXNlZEJ5dGVzPTAsRG4uY29udGVudHM9bnVsbCk6WXQuaXNMaW5rKERuLm1vZGUpPyhEbi5ub2RlX29wcz0kYS5vcHNfdGFibGUubGluay5ub2RlLERuLnN0cmVhbV9vcHM9JGEub3BzX3RhYmxlLmxpbmsu'@;
put 'c3RyZWFtKTpZdC5pc0NocmRldihEbi5tb2RlKSYmKERuLm5vZGVfb3BzPSRhLm9wc190YWJsZS5jaHJkZXYubm9kZSxEbi5zdHJlYW1fb3BzPSRhLm9wc190YWJsZS5jaHJkZXYuc3RyZWFtKSxEbi50aW1lc3RhbXA9RGF0ZS5ub3coKSxaZSYmKFplLmNvbnRlbnRzW2x0XT1EbixaZS50aW1l'@;
put 'c3RhbXA9RG4udGltZXN0YW1wKSxEbn0sZ2V0RmlsZURhdGFBc1R5cGVkQXJyYXk6WmU9PlplLmNvbnRlbnRzP1plLmNvbnRlbnRzLnN1YmFycmF5P1plLmNvbnRlbnRzLnN1YmFycmF5KDAsWmUudXNlZEJ5dGVzKTpuZXcgVWludDhBcnJheShaZS5jb250ZW50cyk6bmV3IFVpbnQ4QXJyYXko'@;
put 'MCksZXhwYW5kRmlsZVN0b3JhZ2UoWmUsbHQpe3ZhciBMdD1aZS5jb250ZW50cz9aZS5jb250ZW50cy5sZW5ndGg6MDtpZighKEx0Pj1sdCkpe2x0PU1hdGgubWF4KGx0LEx0KihMdDwxMDQ4NTc2PzI6MS4xMjUpPj4+MCksMCE9THQmJihsdD1NYXRoLm1heChsdCwyNTYpKTt2YXIgRG49WmUu'@;
put 'Y29udGVudHM7WmUuY29udGVudHM9bmV3IFVpbnQ4QXJyYXkobHQpLFplLnVzZWRCeXRlcz4wJiZaZS5jb250ZW50cy5zZXQoRG4uc3ViYXJyYXkoMCxaZS51c2VkQnl0ZXMpLDApfX0scmVzaXplRmlsZVN0b3JhZ2UoWmUsbHQpe2lmKFplLnVzZWRCeXRlcyE9bHQpaWYoMD09bHQpWmUuY29u'@;
put 'dGVudHM9bnVsbCxaZS51c2VkQnl0ZXM9MDtlbHNle3ZhciBMdD1aZS5jb250ZW50cztaZS5jb250ZW50cz1uZXcgVWludDhBcnJheShsdCksTHQmJlplLmNvbnRlbnRzLnNldChMdC5zdWJhcnJheSgwLE1hdGgubWluKGx0LFplLnVzZWRCeXRlcykpKSxaZS51c2VkQnl0ZXM9bHR9fSxub2Rl'@;
put 'X29wczp7Z2V0YXR0cihaZSl7dmFyIGx0PXt9O3JldHVybiBsdC5kZXY9WXQuaXNDaHJkZXYoWmUubW9kZSk/WmUuaWQ6MSxsdC5pbm89WmUuaWQsbHQubW9kZT1aZS5tb2RlLGx0Lm5saW5rPTEsbHQudWlkPTAsbHQuZ2lkPTAsbHQucmRldj1aZS5yZGV2LGx0LnNpemU9WXQuaXNEaXIoWmUu'@;
put 'bW9kZSk/NDA5NjpZdC5pc0ZpbGUoWmUubW9kZSk/WmUudXNlZEJ5dGVzOll0LmlzTGluayhaZS5tb2RlKT9aZS5saW5rLmxlbmd0aDowLGx0LmF0aW1lPW5ldyBEYXRlKFplLnRpbWVzdGFtcCksbHQubXRpbWU9bmV3IERhdGUoWmUudGltZXN0YW1wKSxsdC5jdGltZT1uZXcgRGF0ZShaZS50'@;
put 'aW1lc3RhbXApLGx0LmJsa3NpemU9NDA5NixsdC5ibG9ja3M9TWF0aC5jZWlsKGx0LnNpemUvbHQuYmxrc2l6ZSksbHR9LHNldGF0dHIoWmUsbHQpe3ZvaWQgMCE9PWx0Lm1vZGUmJihaZS5tb2RlPWx0Lm1vZGUpLHZvaWQgMCE9PWx0LnRpbWVzdGFtcCYmKFplLnRpbWVzdGFtcD1sdC50aW1l'@;
put 'c3RhbXApLHZvaWQgMCE9PWx0LnNpemUmJiRhLnJlc2l6ZUZpbGVTdG9yYWdlKFplLGx0LnNpemUpfSxsb29rdXAoWmUsbHQpe3Rocm93ICRhLmRvZXNOb3RFeGlzdEVycm9yfSxta25vZDooWmUsbHQsTHQsJHQpPT4kYS5jcmVhdGVOb2RlKFplLGx0LEx0LCR0KSxyZW5hbWUoWmUsbHQsTHQp'@;
put 'e2lmKFl0LmlzRGlyKFplLm1vZGUpKXt2YXIgJHQ7dHJ5eyR0PVl0Lmxvb2t1cE5vZGUobHQsTHQpfWNhdGNoe31pZigkdClmb3IodmFyIERuIGluICR0LmNvbnRlbnRzKXRocm93IG5ldyBZdC5FcnJub0Vycm9yKDU1KX1kZWxldGUgWmUucGFyZW50LmNvbnRlbnRzW1plLm5hbWVdLFplLnBh'@;
put 'cmVudC50aW1lc3RhbXA9RGF0ZS5ub3coKSxaZS5uYW1lPUx0LGx0LmNvbnRlbnRzW0x0XT1aZSxsdC50aW1lc3RhbXA9WmUucGFyZW50LnRpbWVzdGFtcH0sdW5saW5rKFplLGx0KXtkZWxldGUgWmUuY29udGVudHNbbHRdLFplLnRpbWVzdGFtcD1EYXRlLm5vdygpfSxybWRpcihaZSxsdCl7'@;
put 'dmFyIEx0PVl0Lmxvb2t1cE5vZGUoWmUsbHQpO2Zvcih2YXIgJHQgaW4gTHQuY29udGVudHMpdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoNTUpO2RlbGV0ZSBaZS5jb250ZW50c1tsdF0sWmUudGltZXN0YW1wPURhdGUubm93KCl9LHJlYWRkaXIoWmUpe3ZhciBsdD1bIi4iLCIuLiJdO2Zvcih2'@;
put 'YXIgTHQgb2YgT2JqZWN0LmtleXMoWmUuY29udGVudHMpKWx0LnB1c2goTHQpO3JldHVybiBsdH0sc3ltbGluayhaZSxsdCxMdCl7dmFyICR0PSRhLmNyZWF0ZU5vZGUoWmUsbHQsNDE0NzEsMCk7cmV0dXJuICR0Lmxpbms9THQsJHR9LHJlYWRsaW5rKFplKXtpZighWXQuaXNMaW5rKFplLm1v'@;
put 'ZGUpKXRocm93IG5ldyBZdC5FcnJub0Vycm9yKDI4KTtyZXR1cm4gWmUubGlua319LHN0cmVhbV9vcHM6e3JlYWQoWmUsbHQsTHQsJHQsRG4pe3ZhciBjcj1aZS5ub2RlLmNvbnRlbnRzO2lmKERuPj1aZS5ub2RlLnVzZWRCeXRlcylyZXR1cm4gMDt2YXIgUnI9TWF0aC5taW4oWmUubm9kZS51'@;
put 'c2VkQnl0ZXMtRG4sJHQpO2lmKFJyPjgmJmNyLnN1YmFycmF5KWx0LnNldChjci5zdWJhcnJheShEbixEbitSciksTHQpO2Vsc2UgZm9yKHZhciBYcj0wO1hyPFJyO1hyKyspbHRbTHQrWHJdPWNyW0RuK1hyXTtyZXR1cm4gUnJ9LHdyaXRlKFplLGx0LEx0LCR0LERuLGNyKXtpZihsdC5idWZm'@;
put 'ZXI9PT10bi5idWZmZXImJihjcj0hMSksISR0KXJldHVybiAwO3ZhciBScj1aZS5ub2RlO2lmKFJyLnRpbWVzdGFtcD1EYXRlLm5vdygpLGx0LnN1YmFycmF5JiYoIVJyLmNvbnRlbnRzfHxSci5jb250ZW50cy5zdWJhcnJheSkpe2lmKGNyKXJldHVybiBSci5jb250ZW50cz1sdC5zdWJhcnJh'@;
put 'eShMdCxMdCskdCksUnIudXNlZEJ5dGVzPSR0LCR0O2lmKDA9PT1Sci51c2VkQnl0ZXMmJjA9PT1EbilyZXR1cm4gUnIuY29udGVudHM9bHQuc2xpY2UoTHQsTHQrJHQpLFJyLnVzZWRCeXRlcz0kdCwkdDtpZihEbiskdDw9UnIudXNlZEJ5dGVzKXJldHVybiBSci5jb250ZW50cy5zZXQobHQu'@;
put 'c3ViYXJyYXkoTHQsTHQrJHQpLERuKSwkdH1pZigkYS5leHBhbmRGaWxlU3RvcmFnZShScixEbiskdCksUnIuY29udGVudHMuc3ViYXJyYXkmJmx0LnN1YmFycmF5KVJyLmNvbnRlbnRzLnNldChsdC5zdWJhcnJheShMdCxMdCskdCksRG4pO2Vsc2UgZm9yKHZhciBYcj0wO1hyPCR0O1hyKysp'@;
put 'UnIuY29udGVudHNbRG4rWHJdPWx0W0x0K1hyXTtyZXR1cm4gUnIudXNlZEJ5dGVzPU1hdGgubWF4KFJyLnVzZWRCeXRlcyxEbiskdCksJHR9LGxsc2VlayhaZSxsdCxMdCl7dmFyICR0PWx0O2lmKDE9PT1MdD8kdCs9WmUucG9zaXRpb246Mj09PUx0JiZZdC5pc0ZpbGUoWmUubm9kZS5tb2Rl'@;
put 'KSYmKCR0Kz1aZS5ub2RlLnVzZWRCeXRlcyksJHQ8MCl0aHJvdyBuZXcgWXQuRXJybm9FcnJvcigyOCk7cmV0dXJuICR0fSxhbGxvY2F0ZShaZSxsdCxMdCl7JGEuZXhwYW5kRmlsZVN0b3JhZ2UoWmUubm9kZSxsdCtMdCksWmUubm9kZS51c2VkQnl0ZXM9TWF0aC5tYXgoWmUubm9kZS51c2Vk'@;
put 'Qnl0ZXMsbHQrTHQpfSxtbWFwKFplLGx0LEx0LCR0LERuKXtpZighWXQuaXNGaWxlKFplLm5vZGUubW9kZSkpdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoNDMpO3ZhciBjcixScixYcj1aZS5ub2RlLmNvbnRlbnRzO2lmKDImRG58fCFYcnx8WHIuYnVmZmVyIT09dG4uYnVmZmVyKXtpZihScj0h'@;
put 'MCwhKGNyPVVOKGx0KSkpdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoNDgpO1hyJiYoKEx0PjB8fEx0K2x0PFhyLmxlbmd0aCkmJihYcj1Yci5zdWJhcnJheT9Yci5zdWJhcnJheShMdCxMdCtsdCk6QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoWHIsTHQsTHQrbHQpKSx0bi5zZXQoWHIsY3Ip'@;
put 'KX1lbHNlIFJyPSExLGNyPVhyLmJ5dGVPZmZzZXQ7cmV0dXJue3B0cjpjcixhbGxvY2F0ZWQ6UnJ9fSxtc3luYzooWmUsbHQsTHQsJHQsRG4pPT4oJGEuc3RyZWFtX29wcy53cml0ZShaZSxsdCwwLCR0LEx0LCExKSwwKX19LFpOPVtdLGpBPShaZSxsdCk9Pnt2YXIgTHQ9MDtyZXR1cm4gWmUm'@;
put 'JihMdHw9MzY1KSxsdCYmKEx0fD0xNDYpLEx0fSxZdD17cm9vdDpudWxsLG1vdW50czpbXSxkZXZpY2VzOnt9LHN0cmVhbXM6W10sbmV4dElub2RlOjEsbmFtZVRhYmxlOm51bGwsY3VycmVudFBhdGg6Ii8iLGluaXRpYWxpemVkOiExLGlnbm9yZVBlcm1pc3Npb25zOiEwLEVycm5vRXJyb3I6'@;
put 'Y2xhc3N7bmFtZT0iRXJybm9FcnJvciI7Y29uc3RydWN0b3IoWmUpe3RoaXMuZXJybm89WmV9fSxmaWxlc3lzdGVtczpudWxsLHN5bmNGU1JlcXVlc3RzOjAsRlNTdHJlYW06Y2xhc3N7c2hhcmVkPXt9O2dldCBvYmplY3QoKXtyZXR1cm4gdGhpcy5ub2RlfXNldCBvYmplY3QoWmUpe3RoaXMu'@;
put 'bm9kZT1aZX1nZXQgaXNSZWFkKCl7cmV0dXJuIDEhPSgyMDk3MTU1JnRoaXMuZmxhZ3MpfWdldCBpc1dyaXRlKCl7cmV0dXJuISEoMjA5NzE1NSZ0aGlzLmZsYWdzKX1nZXQgaXNBcHBlbmQoKXtyZXR1cm4gMTAyNCZ0aGlzLmZsYWdzfWdldCBmbGFncygpe3JldHVybiB0aGlzLnNoYXJlZC5m'@;
put 'bGFnc31zZXQgZmxhZ3MoWmUpe3RoaXMuc2hhcmVkLmZsYWdzPVplfWdldCBwb3NpdGlvbigpe3JldHVybiB0aGlzLnNoYXJlZC5wb3NpdGlvbn1zZXQgcG9zaXRpb24oWmUpe3RoaXMuc2hhcmVkLnBvc2l0aW9uPVplfX0sRlNOb2RlOmNsYXNze25vZGVfb3BzPXt9O3N0cmVhbV9vcHM9e307'@;
put 'cmVhZE1vZGU9MzY1O3dyaXRlTW9kZT0xNDY7bW91bnRlZD1udWxsO2NvbnN0cnVjdG9yKFplLGx0LEx0LCR0KXtaZXx8KFplPXRoaXMpLHRoaXMucGFyZW50PVplLHRoaXMubW91bnQ9WmUubW91bnQsdGhpcy5pZD1ZdC5uZXh0SW5vZGUrKyx0aGlzLm5hbWU9bHQsdGhpcy5tb2RlPUx0LHRo'@;
put 'aXMucmRldj0kdH1nZXQgcmVhZCgpe3JldHVybih0aGlzLm1vZGUmdGhpcy5yZWFkTW9kZSk9PT10aGlzLnJlYWRNb2RlfXNldCByZWFkKFplKXtaZT90aGlzLm1vZGV8PXRoaXMucmVhZE1vZGU6dGhpcy5tb2RlJj1+dGhpcy5yZWFkTW9kZX1nZXQgd3JpdGUoKXtyZXR1cm4odGhpcy5tb2Rl'@;
put 'JnRoaXMud3JpdGVNb2RlKT09PXRoaXMud3JpdGVNb2RlfXNldCB3cml0ZShaZSl7WmU/dGhpcy5tb2RlfD10aGlzLndyaXRlTW9kZTp0aGlzLm1vZGUmPX50aGlzLndyaXRlTW9kZX1nZXQgaXNGb2xkZXIoKXtyZXR1cm4gWXQuaXNEaXIodGhpcy5tb2RlKX1nZXQgaXNEZXZpY2UoKXtyZXR1'@;
put 'cm4gWXQuaXNDaHJkZXYodGhpcy5tb2RlKX19LGxvb2t1cFBhdGgoWmUsbHQ9e30pe2lmKCEoWmU9VXMucmVzb2x2ZShaZSkpKXJldHVybntwYXRoOiIiLG5vZGU6bnVsbH07aWYoKGx0PU9iamVjdC5hc3NpZ24oe2ZvbGxvd19tb3VudDohMCxyZWN1cnNlX2NvdW50OjB9LGx0KSkucmVjdXJz'@;
put 'ZV9jb3VudD44KXRocm93IG5ldyBZdC5FcnJub0Vycm9yKDMyKTtmb3IodmFyICR0PVplLnNwbGl0KCIvIikuZmlsdGVyKGFsPT4hIWFsKSxEbj1ZdC5yb290LGNyPSIvIixScj0wO1JyPCR0Lmxlbmd0aDtScisrKXt2YXIgWHI9UnI9PT0kdC5sZW5ndGgtMTtpZihYciYmbHQucGFyZW50KWJy'@;
put 'ZWFrO2lmKERuPVl0Lmxvb2t1cE5vZGUoRG4sJHRbUnJdKSxjcj1Rby5qb2luMihjciwkdFtScl0pLFl0LmlzTW91bnRwb2ludChEbikmJighWHJ8fFhyJiZsdC5mb2xsb3dfbW91bnQpJiYoRG49RG4ubW91bnRlZC5yb290KSwhWHJ8fGx0LmZvbGxvdylmb3IodmFyIGthPTA7WXQuaXNMaW5r'@;
put 'KERuLm1vZGUpOyl7dmFyIEdvPVl0LnJlYWRsaW5rKGNyKTtpZihjcj1Vcy5yZXNvbHZlKFFvLmRpcm5hbWUoY3IpLEdvKSxEbj1ZdC5sb29rdXBQYXRoKGNyLHtyZWN1cnNlX2NvdW50Omx0LnJlY3Vyc2VfY291bnQrMX0pLm5vZGUsa2ErKz40MCl0aHJvdyBuZXcgWXQuRXJybm9FcnJvcigz'@;
put 'Mil9fXJldHVybntwYXRoOmNyLG5vZGU6RG59fSxnZXRQYXRoKFplKXtmb3IodmFyIGx0Ozspe2lmKFl0LmlzUm9vdChaZSkpe3ZhciBMdD1aZS5tb3VudC5tb3VudHBvaW50O3JldHVybiBsdD8iLyIhPT1MdFtMdC5sZW5ndGgtMV0/YCR7THR9LyR7bHR9YDpMdCtsdDpMdH1sdD1sdD9gJHta'@;
put 'ZS5uYW1lfS8ke2x0fWA6WmUubmFtZSxaZT1aZS5wYXJlbnR9fSxoYXNoTmFtZShaZSxsdCl7Zm9yKHZhciBMdD0wLCR0PTA7JHQ8bHQubGVuZ3RoOyR0KyspTHQ9KEx0PDw1KS1MdCtsdC5jaGFyQ29kZUF0KCR0KXwwO3JldHVybihaZStMdD4+PjApJVl0Lm5hbWVUYWJsZS5sZW5ndGh9LGhh'@;
put 'c2hBZGROb2RlKFplKXt2YXIgbHQ9WXQuaGFzaE5hbWUoWmUucGFyZW50LmlkLFplLm5hbWUpO1plLm5hbWVfbmV4dD1ZdC5uYW1lVGFibGVbbHRdLFl0Lm5hbWVUYWJsZVtsdF09WmV9LGhhc2hSZW1vdmVOb2RlKFplKXt2YXIgbHQ9WXQuaGFzaE5hbWUoWmUucGFyZW50LmlkLFplLm5hbWUp'@;
put 'O2lmKFl0Lm5hbWVUYWJsZVtsdF09PT1aZSlZdC5uYW1lVGFibGVbbHRdPVplLm5hbWVfbmV4dDtlbHNlIGZvcih2YXIgTHQ9WXQubmFtZVRhYmxlW2x0XTtMdDspe2lmKEx0Lm5hbWVfbmV4dD09PVplKXtMdC5uYW1lX25leHQ9WmUubmFtZV9uZXh0O2JyZWFrfUx0PUx0Lm5hbWVfbmV4dH19'@;
put 'LGxvb2t1cE5vZGUoWmUsbHQpe3ZhciBMdD1ZdC5tYXlMb29rdXAoWmUpO2lmKEx0KXRocm93IG5ldyBZdC5FcnJub0Vycm9yKEx0KTtmb3IodmFyICR0PVl0Lmhhc2hOYW1lKFplLmlkLGx0KSxEbj1ZdC5uYW1lVGFibGVbJHRdO0RuO0RuPURuLm5hbWVfbmV4dClpZihEbi5wYXJlbnQuaWQ9'@;
put 'PT1aZS5pZCYmRG4ubmFtZT09PWx0KXJldHVybiBEbjtyZXR1cm4gWXQubG9va3VwKFplLGx0KX0sY3JlYXRlTm9kZShaZSxsdCxMdCwkdCl7dmFyIERuPW5ldyBZdC5GU05vZGUoWmUsbHQsTHQsJHQpO3JldHVybiBZdC5oYXNoQWRkTm9kZShEbiksRG59LGRlc3Ryb3lOb2RlKFplKXtZdC5o'@;
put 'YXNoUmVtb3ZlTm9kZShaZSl9LGlzUm9vdDpaZT0+WmU9PT1aZS5wYXJlbnQsaXNNb3VudHBvaW50OlplPT4hIVplLm1vdW50ZWQsaXNGaWxlOlplPT4zMjc2OD09KDYxNDQwJlplKSxpc0RpcjpaZT0+MTYzODQ9PSg2MTQ0MCZaZSksaXNMaW5rOlplPT40MDk2MD09KDYxNDQwJlplKSxpc0No'@;
put 'cmRldjpaZT0+ODE5Mj09KDYxNDQwJlplKSxpc0Jsa2RldjpaZT0+MjQ1NzY9PSg2MTQ0MCZaZSksaXNGSUZPOlplPT40MDk2PT0oNjE0NDAmWmUpLGlzU29ja2V0OlplPT4hKDQ5MTUyJn5aZSksZmxhZ3NUb1Blcm1pc3Npb25TdHJpbmcoWmUpe3ZhciBsdD1bInIiLCJ3IiwicnciXVszJlpl'@;
put 'XTtyZXR1cm4gNTEyJlplJiYobHQrPSJ3IiksbHR9LG5vZGVQZXJtaXNzaW9uczooWmUsbHQpPT5ZdC5pZ25vcmVQZXJtaXNzaW9ucz8wOmx0LmluY2x1ZGVzKCJyIikmJiEoMjkyJlplLm1vZGUpfHxsdC5pbmNsdWRlcygidyIpJiYhKDE0NiZaZS5tb2RlKXx8bHQuaW5jbHVkZXMoIngiKSYm'@;
put 'ISg3MyZaZS5tb2RlKT8yOjAsbWF5TG9va3VwOlplPT5ZdC5pc0RpcihaZS5tb2RlKT9ZdC5ub2RlUGVybWlzc2lvbnMoWmUsIngiKXx8KFplLm5vZGVfb3BzLmxvb2t1cD8wOjIpOjU0LG1heUNyZWF0ZShaZSxsdCl7dHJ5e3JldHVybiBZdC5sb29rdXBOb2RlKFplLGx0KSwyMH1jYXRjaHt9'@;
put 'cmV0dXJuIFl0Lm5vZGVQZXJtaXNzaW9ucyhaZSwid3giKX0sbWF5RGVsZXRlKFplLGx0LEx0KXt2YXIgJHQ7dHJ5eyR0PVl0Lmxvb2t1cE5vZGUoWmUsbHQpfWNhdGNoKGNyKXtyZXR1cm4gY3IuZXJybm99dmFyIERuPVl0Lm5vZGVQZXJtaXNzaW9ucyhaZSwid3giKTtpZihEbilyZXR1cm4g'@;
put 'RG47aWYoTHQpe2lmKCFZdC5pc0RpcigkdC5tb2RlKSlyZXR1cm4gNTQ7aWYoWXQuaXNSb290KCR0KXx8WXQuZ2V0UGF0aCgkdCk9PT1ZdC5jd2QoKSlyZXR1cm4gMTB9ZWxzZSBpZihZdC5pc0RpcigkdC5tb2RlKSlyZXR1cm4gMzE7cmV0dXJuIDB9LG1heU9wZW46KFplLGx0KT0+WmU/WXQu'@;
put 'aXNMaW5rKFplLm1vZGUpPzMyOll0LmlzRGlyKFplLm1vZGUpJiYoInIiIT09WXQuZmxhZ3NUb1Blcm1pc3Npb25TdHJpbmcobHQpfHw1MTImbHQpPzMxOll0Lm5vZGVQZXJtaXNzaW9ucyhaZSxZdC5mbGFnc1RvUGVybWlzc2lvblN0cmluZyhsdCkpOjQ0LE1BWF9PUEVOX0ZEUzo0MDk2LG5l'@;
put 'eHRmZCgpe2Zvcih2YXIgWmU9MDtaZTw9WXQuTUFYX09QRU5fRkRTO1plKyspaWYoIVl0LnN0cmVhbXNbWmVdKXJldHVybiBaZTt0aHJvdyBuZXcgWXQuRXJybm9FcnJvcigzMyl9LGdldFN0cmVhbUNoZWNrZWQoWmUpe3ZhciBsdD1ZdC5nZXRTdHJlYW0oWmUpO2lmKCFsdCl0aHJvdyBuZXcg'@;
put 'WXQuRXJybm9FcnJvcig4KTtyZXR1cm4gbHR9LGdldFN0cmVhbTpaZT0+WXQuc3RyZWFtc1taZV0sY3JlYXRlU3RyZWFtOihaZSxsdD0tMSk9PihaZT1PYmplY3QuYXNzaWduKG5ldyBZdC5GU1N0cmVhbSxaZSksLTE9PWx0JiYobHQ9WXQubmV4dGZkKCkpLFplLmZkPWx0LFl0LnN0cmVhbXNb'@;
put 'bHRdPVplLFplKSxjbG9zZVN0cmVhbShaZSl7WXQuc3RyZWFtc1taZV09bnVsbH0sZHVwU3RyZWFtKFplLGx0PS0xKXt2YXIgTHQ9WXQuY3JlYXRlU3RyZWFtKFplLGx0KTtyZXR1cm4gTHQuc3RyZWFtX29wcz8uZHVwPy4oTHQpLEx0fSxjaHJkZXZfc3RyZWFtX29wczp7b3BlbihaZSl7dmFy'@;
put 'IGx0PVl0LmdldERldmljZShaZS5ub2RlLnJkZXYpO1plLnN0cmVhbV9vcHM9bHQuc3RyZWFtX29wcyxaZS5zdHJlYW1fb3BzLm9wZW4/LihaZSl9LGxsc2Vlaygpe3Rocm93IG5ldyBZdC5FcnJub0Vycm9yKDcwKX19LG1ham9yOlplPT5aZT4+OCxtaW5vcjpaZT0+MjU1JlplLG1ha2VkZXY6'@;
put 'KFplLGx0KT0+WmU8PDh8bHQscmVnaXN0ZXJEZXZpY2UoWmUsbHQpe1l0LmRldmljZXNbWmVdPXtzdHJlYW1fb3BzOmx0fX0sZ2V0RGV2aWNlOlplPT5ZdC5kZXZpY2VzW1plXSxnZXRNb3VudHMoWmUpe2Zvcih2YXIgbHQ9W10sTHQ9W1plXTtMdC5sZW5ndGg7KXt2YXIgJHQ9THQucG9wKCk7'@;
put 'bHQucHVzaCgkdCksTHQucHVzaCguLi4kdC5tb3VudHMpfXJldHVybiBsdH0sc3luY2ZzKFplLGx0KXsiZnVuY3Rpb24iPT10eXBlb2YgWmUmJihsdD1aZSxaZT0hMSksWXQuc3luY0ZTUmVxdWVzdHMrKyxZdC5zeW5jRlNSZXF1ZXN0cz4xJiZydChgd2FybmluZzogJHtZdC5zeW5jRlNSZXF1'@;
put 'ZXN0c30gRlMuc3luY2ZzIG9wZXJhdGlvbnMgaW4gZmxpZ2h0IGF0IG9uY2UsIHByb2JhYmx5IGp1c3QgZG9pbmcgZXh0cmEgd29ya2ApO3ZhciBMdD1ZdC5nZXRNb3VudHMoWXQucm9vdC5tb3VudCksJHQ9MDtmdW5jdGlvbiBEbihScil7cmV0dXJuIFl0LnN5bmNGU1JlcXVlc3RzLS0sbHQo'@;
put 'UnIpfWZ1bmN0aW9uIGNyKFJyKXtpZihScilyZXR1cm4gY3IuZXJyb3JlZD92b2lkIDA6KGNyLmVycm9yZWQ9ITAsRG4oUnIpKTsrKyR0Pj1MdC5sZW5ndGgmJkRuKG51bGwpfUx0LmZvckVhY2goUnI9PntpZighUnIudHlwZS5zeW5jZnMpcmV0dXJuIGNyKG51bGwpO1JyLnR5cGUuc3luY2Zz'@;
put 'KFJyLFplLGNyKX0pfSxtb3VudChaZSxsdCxMdCl7dmFyIGNyLCR0PSIvIj09PUx0LERuPSFMdDtpZigkdCYmWXQucm9vdCl0aHJvdyBuZXcgWXQuRXJybm9FcnJvcigxMCk7aWYoISR0JiYhRG4pe3ZhciBScj1ZdC5sb29rdXBQYXRoKEx0LHtmb2xsb3dfbW91bnQ6ITF9KTtpZihMdD1Sci5w'@;
put 'YXRoLFl0LmlzTW91bnRwb2ludChjcj1Sci5ub2RlKSl0aHJvdyBuZXcgWXQuRXJybm9FcnJvcigxMCk7aWYoIVl0LmlzRGlyKGNyLm1vZGUpKXRocm93IG5ldyBZdC5FcnJub0Vycm9yKDU0KX12YXIgWHI9e3R5cGU6WmUsb3B0czpsdCxtb3VudHBvaW50Okx0LG1vdW50czpbXX0sa2E9WmUu'@;
put 'bW91bnQoWHIpO3JldHVybiBrYS5tb3VudD1YcixYci5yb290PWthLCR0P1l0LnJvb3Q9a2E6Y3ImJihjci5tb3VudGVkPVhyLGNyLm1vdW50JiZjci5tb3VudC5tb3VudHMucHVzaChYcikpLGthfSx1bm1vdW50KFplKXt2YXIgbHQ9WXQubG9va3VwUGF0aChaZSx7Zm9sbG93X21vdW50OiEx'@;
put 'fSk7aWYoIVl0LmlzTW91bnRwb2ludChsdC5ub2RlKSl0aHJvdyBuZXcgWXQuRXJybm9FcnJvcigyOCk7dmFyIEx0PWx0Lm5vZGUsJHQ9THQubW91bnRlZCxEbj1ZdC5nZXRNb3VudHMoJHQpO09iamVjdC5rZXlzKFl0Lm5hbWVUYWJsZSkuZm9yRWFjaChScj0+e2Zvcih2YXIgWHI9WXQubmFt'@;
put 'ZVRhYmxlW1JyXTtYcjspe3ZhciBrYT1Yci5uYW1lX25leHQ7RG4uaW5jbHVkZXMoWHIubW91bnQpJiZZdC5kZXN0cm95Tm9kZShYciksWHI9a2F9fSksTHQubW91bnRlZD1udWxsO3ZhciBjcj1MdC5tb3VudC5tb3VudHMuaW5kZXhPZigkdCk7THQubW91bnQubW91bnRzLnNwbGljZShjciwx'@;
put 'KX0sbG9va3VwOihaZSxsdCk9PlplLm5vZGVfb3BzLmxvb2t1cChaZSxsdCksbWtub2QoWmUsbHQsTHQpe3ZhciBEbj1ZdC5sb29rdXBQYXRoKFplLHtwYXJlbnQ6ITB9KS5ub2RlLGNyPVFvLmJhc2VuYW1lKFplKTtpZighY3J8fCIuIj09PWNyfHwiLi4iPT09Y3IpdGhyb3cgbmV3IFl0LkVy'@;
put 'cm5vRXJyb3IoMjgpO3ZhciBScj1ZdC5tYXlDcmVhdGUoRG4sY3IpO2lmKFJyKXRocm93IG5ldyBZdC5FcnJub0Vycm9yKFJyKTtpZighRG4ubm9kZV9vcHMubWtub2QpdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoNjMpO3JldHVybiBEbi5ub2RlX29wcy5ta25vZChEbixjcixsdCxMdCl9LHN0'@;
put 'YXRmcyhaZSl7dmFyIGx0PXtic2l6ZTo0MDk2LGZyc2l6ZTo0MDk2LGJsb2NrczoxZTYsYmZyZWU6NWU1LGJhdmFpbDo1ZTUsZmlsZXM6WXQubmV4dElub2RlLGZmcmVlOll0Lm5leHRJbm9kZS0xLGZzaWQ6NDIsZmxhZ3M6MixuYW1lbGVuOjI1NX0sTHQ9WXQubG9va3VwUGF0aChaZSx7Zm9s'@;
put 'bG93OiEwfSkubm9kZTtyZXR1cm4gTHQ/Lm5vZGVfb3BzLnN0YXRmcyYmT2JqZWN0LmFzc2lnbihsdCxMdC5ub2RlX29wcy5zdGF0ZnMoTHQubW91bnQub3B0cy5yb290KSksbHR9LGNyZWF0ZTooWmUsbHQ9NDM4KT0+KGx0Jj00MDk1LFl0Lm1rbm9kKFplLGx0fD0zMjc2OCwwKSksbWtkaXI6'@;
put 'KFplLGx0PTUxMSk9PihsdCY9MTAyMyxZdC5ta25vZChaZSxsdHw9MTYzODQsMCkpLG1rZGlyVHJlZShaZSxsdCl7Zm9yKHZhciBMdD1aZS5zcGxpdCgiLyIpLCR0PSIiLERuPTA7RG48THQubGVuZ3RoOysrRG4paWYoTHRbRG5dKXskdCs9Ii8iK0x0W0RuXTt0cnl7WXQubWtkaXIoJHQsbHQp'@;
put 'fWNhdGNoKGNyKXtpZigyMCE9Y3IuZXJybm8pdGhyb3cgY3J9fX0sbWtkZXY6KFplLGx0LEx0KT0+KHR5cGVvZiBMdD4idSImJihMdD1sdCxsdD00MzgpLFl0Lm1rbm9kKFplLGx0fD04MTkyLEx0KSksc3ltbGluayhaZSxsdCl7aWYoIVVzLnJlc29sdmUoWmUpKXRocm93IG5ldyBZdC5FcnJu'@;
put 'b0Vycm9yKDQ0KTt2YXIgJHQ9WXQubG9va3VwUGF0aChsdCx7cGFyZW50OiEwfSkubm9kZTtpZighJHQpdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoNDQpO3ZhciBEbj1Rby5iYXNlbmFtZShsdCksY3I9WXQubWF5Q3JlYXRlKCR0LERuKTtpZihjcil0aHJvdyBuZXcgWXQuRXJybm9FcnJvcihj'@;
put 'cik7aWYoISR0Lm5vZGVfb3BzLnN5bWxpbmspdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoNjMpO3JldHVybiAkdC5ub2RlX29wcy5zeW1saW5rKCR0LERuLFplKX0scmVuYW1lKFplLGx0KXt2YXIgWHIsa2EsTHQ9UW8uZGlybmFtZShaZSksJHQ9UW8uZGlybmFtZShsdCksRG49UW8uYmFzZW5h'@;
put 'bWUoWmUpLGNyPVFvLmJhc2VuYW1lKGx0KTtpZihYcj1ZdC5sb29rdXBQYXRoKFplLHtwYXJlbnQ6ITB9KS5ub2RlLGthPVl0Lmxvb2t1cFBhdGgobHQse3BhcmVudDohMH0pLm5vZGUsIVhyfHwha2EpdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoNDQpO2lmKFhyLm1vdW50IT09a2EubW91bnQp'@;
put 'dGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoNzUpO3ZhciBhbCxHbz1ZdC5sb29rdXBOb2RlKFhyLERuKSxIcz1Vcy5yZWxhdGl2ZShaZSwkdCk7aWYoIi4iIT09SHMuY2hhckF0KDApKXRocm93IG5ldyBZdC5FcnJub0Vycm9yKDI4KTtpZigiLiIhPT0oSHM9VXMucmVsYXRpdmUobHQsTHQpKS5j'@;
put 'aGFyQXQoMCkpdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoNTUpO3RyeXthbD1ZdC5sb29rdXBOb2RlKGthLGNyKX1jYXRjaHt9aWYoR28hPT1hbCl7dmFyIGdzPVl0LmlzRGlyKEdvLm1vZGUpLHhvPVl0Lm1heURlbGV0ZShYcixEbixncyk7aWYoeG8pdGhyb3cgbmV3IFl0LkVycm5vRXJyb3Io'@;
put 'eG8pO2lmKHhvPWFsP1l0Lm1heURlbGV0ZShrYSxjcixncyk6WXQubWF5Q3JlYXRlKGthLGNyKSl0aHJvdyBuZXcgWXQuRXJybm9FcnJvcih4byk7aWYoIVhyLm5vZGVfb3BzLnJlbmFtZSl0aHJvdyBuZXcgWXQuRXJybm9FcnJvcig2Myk7aWYoWXQuaXNNb3VudHBvaW50KEdvKXx8YWwmJll0'@;
put 'LmlzTW91bnRwb2ludChhbCkpdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoMTApO2lmKGthIT09WHImJih4bz1ZdC5ub2RlUGVybWlzc2lvbnMoWHIsInciKSkpdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoeG8pO1l0Lmhhc2hSZW1vdmVOb2RlKEdvKTt0cnl7WHIubm9kZV9vcHMucmVuYW1lKEdv'@;
put 'LGthLGNyKSxHby5wYXJlbnQ9a2F9Y2F0Y2goWHMpe3Rocm93IFhzfWZpbmFsbHl7WXQuaGFzaEFkZE5vZGUoR28pfX19LHJtZGlyKFplKXt2YXIgTHQ9WXQubG9va3VwUGF0aChaZSx7cGFyZW50OiEwfSkubm9kZSwkdD1Rby5iYXNlbmFtZShaZSksRG49WXQubG9va3VwTm9kZShMdCwkdCks'@;
put 'Y3I9WXQubWF5RGVsZXRlKEx0LCR0LCEwKTtpZihjcil0aHJvdyBuZXcgWXQuRXJybm9FcnJvcihjcik7aWYoIUx0Lm5vZGVfb3BzLnJtZGlyKXRocm93IG5ldyBZdC5FcnJub0Vycm9yKDYzKTtpZihZdC5pc01vdW50cG9pbnQoRG4pKXRocm93IG5ldyBZdC5FcnJub0Vycm9yKDEwKTtMdC5u'@;
put 'b2RlX29wcy5ybWRpcihMdCwkdCksWXQuZGVzdHJveU5vZGUoRG4pfSxyZWFkZGlyKFplKXt2YXIgTHQ9WXQubG9va3VwUGF0aChaZSx7Zm9sbG93OiEwfSkubm9kZTtpZighTHQubm9kZV9vcHMucmVhZGRpcil0aHJvdyBuZXcgWXQuRXJybm9FcnJvcig1NCk7cmV0dXJuIEx0Lm5vZGVfb3Bz'@;
put 'LnJlYWRkaXIoTHQpfSx1bmxpbmsoWmUpe3ZhciBMdD1ZdC5sb29rdXBQYXRoKFplLHtwYXJlbnQ6ITB9KS5ub2RlO2lmKCFMdCl0aHJvdyBuZXcgWXQuRXJybm9FcnJvcig0NCk7dmFyICR0PVFvLmJhc2VuYW1lKFplKSxEbj1ZdC5sb29rdXBOb2RlKEx0LCR0KSxjcj1ZdC5tYXlEZWxldGUo'@;
put 'THQsJHQsITEpO2lmKGNyKXRocm93IG5ldyBZdC5FcnJub0Vycm9yKGNyKTtpZighTHQubm9kZV9vcHMudW5saW5rKXRocm93IG5ldyBZdC5FcnJub0Vycm9yKDYzKTtpZihZdC5pc01vdW50cG9pbnQoRG4pKXRocm93IG5ldyBZdC5FcnJub0Vycm9yKDEwKTtMdC5ub2RlX29wcy51bmxpbmso'@;
put 'THQsJHQpLFl0LmRlc3Ryb3lOb2RlKERuKX0scmVhZGxpbmsoWmUpe3ZhciBMdD1ZdC5sb29rdXBQYXRoKFplKS5ub2RlO2lmKCFMdCl0aHJvdyBuZXcgWXQuRXJybm9FcnJvcig0NCk7aWYoIUx0Lm5vZGVfb3BzLnJlYWRsaW5rKXRocm93IG5ldyBZdC5FcnJub0Vycm9yKDI4KTtyZXR1cm4g'@;
put 'THQubm9kZV9vcHMucmVhZGxpbmsoTHQpfSxzdGF0KFplLGx0KXt2YXIgJHQ9WXQubG9va3VwUGF0aChaZSx7Zm9sbG93OiFsdH0pLm5vZGU7aWYoISR0KXRocm93IG5ldyBZdC5FcnJub0Vycm9yKDQ0KTtpZighJHQubm9kZV9vcHMuZ2V0YXR0cil0aHJvdyBuZXcgWXQuRXJybm9FcnJvcig2'@;
put 'Myk7cmV0dXJuICR0Lm5vZGVfb3BzLmdldGF0dHIoJHQpfSxsc3RhdDpaZT0+WXQuc3RhdChaZSwhMCksY2htb2QoWmUsbHQsTHQpe3ZhciAkdDtpZighKCR0PSJzdHJpbmciPT10eXBlb2YgWmU/WXQubG9va3VwUGF0aChaZSx7Zm9sbG93OiFMdH0pLm5vZGU6WmUpLm5vZGVfb3BzLnNldGF0'@;
put 'dHIpdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoNjMpOyR0Lm5vZGVfb3BzLnNldGF0dHIoJHQse21vZGU6NDA5NSZsdHwtNDA5NiYkdC5tb2RlLHRpbWVzdGFtcDpEYXRlLm5vdygpfSl9LGxjaG1vZChaZSxsdCl7WXQuY2htb2QoWmUsbHQsITApfSxmY2htb2QoWmUsbHQpe3ZhciBMdD1ZdC5n'@;
put 'ZXRTdHJlYW1DaGVja2VkKFplKTtZdC5jaG1vZChMdC5ub2RlLGx0KX0sY2hvd24oWmUsbHQsTHQsJHQpe3ZhciBEbjtpZighKERuPSJzdHJpbmciPT10eXBlb2YgWmU/WXQubG9va3VwUGF0aChaZSx7Zm9sbG93OiEkdH0pLm5vZGU6WmUpLm5vZGVfb3BzLnNldGF0dHIpdGhyb3cgbmV3IFl0'@;
put 'LkVycm5vRXJyb3IoNjMpO0RuLm5vZGVfb3BzLnNldGF0dHIoRG4se3RpbWVzdGFtcDpEYXRlLm5vdygpfSl9LGxjaG93bihaZSxsdCxMdCl7WXQuY2hvd24oWmUsbHQsTHQsITApfSxmY2hvd24oWmUsbHQsTHQpe3ZhciAkdD1ZdC5nZXRTdHJlYW1DaGVja2VkKFplKTtZdC5jaG93bigkdC5u'@;
put 'b2RlLGx0LEx0KX0sdHJ1bmNhdGUoWmUsbHQpe2lmKGx0PDApdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoMjgpO3ZhciBMdDtpZighKEx0PSJzdHJpbmciPT10eXBlb2YgWmU/WXQubG9va3VwUGF0aChaZSx7Zm9sbG93OiEwfSkubm9kZTpaZSkubm9kZV9vcHMuc2V0YXR0cil0aHJvdyBuZXcg'@;
put 'WXQuRXJybm9FcnJvcig2Myk7aWYoWXQuaXNEaXIoTHQubW9kZSkpdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoMzEpO2lmKCFZdC5pc0ZpbGUoTHQubW9kZSkpdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoMjgpO3ZhciBEbj1ZdC5ub2RlUGVybWlzc2lvbnMoTHQsInciKTtpZihEbil0aHJvdyBu'@;
put 'ZXcgWXQuRXJybm9FcnJvcihEbik7THQubm9kZV9vcHMuc2V0YXR0cihMdCx7c2l6ZTpsdCx0aW1lc3RhbXA6RGF0ZS5ub3coKX0pfSxmdHJ1bmNhdGUoWmUsbHQpe3ZhciBMdD1ZdC5nZXRTdHJlYW1DaGVja2VkKFplKTtpZighKDIwOTcxNTUmTHQuZmxhZ3MpKXRocm93IG5ldyBZdC5FcnJu'@;
put 'b0Vycm9yKDI4KTtZdC50cnVuY2F0ZShMdC5ub2RlLGx0KX0sdXRpbWUoWmUsbHQsTHQpe3ZhciBEbj1ZdC5sb29rdXBQYXRoKFplLHtmb2xsb3c6ITB9KS5ub2RlO0RuLm5vZGVfb3BzLnNldGF0dHIoRG4se3RpbWVzdGFtcDpNYXRoLm1heChsdCxMdCl9KX0sb3BlbihaZSxsdCxMdD00Mzgp'@;
put 'e2lmKCIiPT09WmUpdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoNDQpO3ZhciAkdDtpZihsdD0ic3RyaW5nIj09dHlwZW9mIGx0PyhaZT0+e3ZhciBMdD17cjowLCJyKyI6Mix3OjU3NywidysiOjU3OCxhOjEwODksImErIjoxMDkwfVtaZV07aWYodHlwZW9mIEx0PiJ1Iil0aHJvdyBuZXcgRXJy'@;
put 'b3IoYFVua25vd24gZmlsZSBvcGVuIG1vZGU6ICR7WmV9YCk7cmV0dXJuIEx0fSkobHQpOmx0LEx0PTY0Jmx0PzQwOTUmTHR8MzI3Njg6MCwib2JqZWN0Ij09dHlwZW9mIFplKSR0PVplO2Vsc2V7WmU9UW8ubm9ybWFsaXplKFplKTt0cnl7JHQ9WXQubG9va3VwUGF0aChaZSx7Zm9sbG93OiEo'@;
put 'MTMxMDcyJmx0KX0pLm5vZGV9Y2F0Y2h7fX12YXIgY3I9ITE7aWYoNjQmbHQpaWYoJHQpe2lmKDEyOCZsdCl0aHJvdyBuZXcgWXQuRXJybm9FcnJvcigyMCl9ZWxzZSAkdD1ZdC5ta25vZChaZSxMdCwwKSxjcj0hMDtpZighJHQpdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoNDQpO2lmKFl0Lmlz'@;
put 'Q2hyZGV2KCR0Lm1vZGUpJiYobHQmPS01MTMpLDY1NTM2Jmx0JiYhWXQuaXNEaXIoJHQubW9kZSkpdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoNTQpO2lmKCFjcil7dmFyIFJyPVl0Lm1heU9wZW4oJHQsbHQpO2lmKFJyKXRocm93IG5ldyBZdC5FcnJub0Vycm9yKFJyKX01MTImbHQmJiFjciYm'@;
put 'WXQudHJ1bmNhdGUoJHQsMCksbHQmPS0xMzE3MTM7dmFyIFhyPVl0LmNyZWF0ZVN0cmVhbSh7bm9kZTokdCxwYXRoOll0LmdldFBhdGgoJHQpLGZsYWdzOmx0LHNlZWthYmxlOiEwLHBvc2l0aW9uOjAsc3RyZWFtX29wczokdC5zdHJlYW1fb3BzLHVuZ290dGVuOltdLGVycm9yOiExfSk7cmV0'@;
put 'dXJuIFhyLnN0cmVhbV9vcHMub3BlbiYmWHIuc3RyZWFtX29wcy5vcGVuKFhyKSxYcn0sY2xvc2UoWmUpe2lmKFl0LmlzQ2xvc2VkKFplKSl0aHJvdyBuZXcgWXQuRXJybm9FcnJvcig4KTtaZS5nZXRkZW50cyYmKFplLmdldGRlbnRzPW51bGwpO3RyeXtaZS5zdHJlYW1fb3BzLmNsb3NlJiZa'@;
put 'ZS5zdHJlYW1fb3BzLmNsb3NlKFplKX1jYXRjaChsdCl7dGhyb3cgbHR9ZmluYWxseXtZdC5jbG9zZVN0cmVhbShaZS5mZCl9WmUuZmQ9bnVsbH0saXNDbG9zZWQ6WmU9Pm51bGw9PT1aZS5mZCxsbHNlZWsoWmUsbHQsTHQpe2lmKFl0LmlzQ2xvc2VkKFplKSl0aHJvdyBuZXcgWXQuRXJybm9F'@;
put 'cnJvcig4KTtpZighWmUuc2Vla2FibGV8fCFaZS5zdHJlYW1fb3BzLmxsc2Vlayl0aHJvdyBuZXcgWXQuRXJybm9FcnJvcig3MCk7aWYoMCE9THQmJjEhPUx0JiYyIT1MdCl0aHJvdyBuZXcgWXQuRXJybm9FcnJvcigyOCk7cmV0dXJuIFplLnBvc2l0aW9uPVplLnN0cmVhbV9vcHMubGxzZWVr'@;
put 'KFplLGx0LEx0KSxaZS51bmdvdHRlbj1bXSxaZS5wb3NpdGlvbn0scmVhZChaZSxsdCxMdCwkdCxEbil7aWYoJHQ8MHx8RG48MCl0aHJvdyBuZXcgWXQuRXJybm9FcnJvcigyOCk7aWYoWXQuaXNDbG9zZWQoWmUpKXRocm93IG5ldyBZdC5FcnJub0Vycm9yKDgpO2lmKDE9PSgyMDk3MTU1Jlpl'@;
put 'LmZsYWdzKSl0aHJvdyBuZXcgWXQuRXJybm9FcnJvcig4KTtpZihZdC5pc0RpcihaZS5ub2RlLm1vZGUpKXRocm93IG5ldyBZdC5FcnJub0Vycm9yKDMxKTtpZighWmUuc3RyZWFtX29wcy5yZWFkKXRocm93IG5ldyBZdC5FcnJub0Vycm9yKDI4KTt2YXIgY3I9dHlwZW9mIERuPCJ1IjtpZihj'@;
put 'cil7aWYoIVplLnNlZWthYmxlKXRocm93IG5ldyBZdC5FcnJub0Vycm9yKDcwKX1lbHNlIERuPVplLnBvc2l0aW9uO3ZhciBScj1aZS5zdHJlYW1fb3BzLnJlYWQoWmUsbHQsTHQsJHQsRG4pO3JldHVybiBjcnx8KFplLnBvc2l0aW9uKz1SciksUnJ9LHdyaXRlKFplLGx0LEx0LCR0LERuLGNy'@;
put 'KXtpZigkdDwwfHxEbjwwKXRocm93IG5ldyBZdC5FcnJub0Vycm9yKDI4KTtpZihZdC5pc0Nsb3NlZChaZSkpdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoOCk7aWYoISgyMDk3MTU1JlplLmZsYWdzKSl0aHJvdyBuZXcgWXQuRXJybm9FcnJvcig4KTtpZihZdC5pc0RpcihaZS5ub2RlLm1vZGUp'@;
put 'KXRocm93IG5ldyBZdC5FcnJub0Vycm9yKDMxKTtpZighWmUuc3RyZWFtX29wcy53cml0ZSl0aHJvdyBuZXcgWXQuRXJybm9FcnJvcigyOCk7WmUuc2Vla2FibGUmJjEwMjQmWmUuZmxhZ3MmJll0Lmxsc2VlayhaZSwwLDIpO3ZhciBScj10eXBlb2YgRG48InUiO2lmKFJyKXtpZighWmUuc2Vl'@;
put 'a2FibGUpdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoNzApfWVsc2UgRG49WmUucG9zaXRpb247dmFyIFhyPVplLnN0cmVhbV9vcHMud3JpdGUoWmUsbHQsTHQsJHQsRG4sY3IpO3JldHVybiBScnx8KFplLnBvc2l0aW9uKz1YciksWHJ9LGFsbG9jYXRlKFplLGx0LEx0KXtpZihZdC5pc0Nsb3Nl'@;
put 'ZChaZSkpdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoOCk7aWYobHQ8MHx8THQ8PTApdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoMjgpO2lmKCEoMjA5NzE1NSZaZS5mbGFncykpdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoOCk7aWYoIVl0LmlzRmlsZShaZS5ub2RlLm1vZGUpJiYhWXQuaXNEaXIo'@;
put 'WmUubm9kZS5tb2RlKSl0aHJvdyBuZXcgWXQuRXJybm9FcnJvcig0Myk7aWYoIVplLnN0cmVhbV9vcHMuYWxsb2NhdGUpdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoMTM4KTtaZS5zdHJlYW1fb3BzLmFsbG9jYXRlKFplLGx0LEx0KX0sbW1hcChaZSxsdCxMdCwkdCxEbil7aWYoMiYkdCYmISgy'@;
put 'JkRuKSYmMiE9KDIwOTcxNTUmWmUuZmxhZ3MpKXRocm93IG5ldyBZdC5FcnJub0Vycm9yKDIpO2lmKDE9PSgyMDk3MTU1JlplLmZsYWdzKSl0aHJvdyBuZXcgWXQuRXJybm9FcnJvcigyKTtpZighWmUuc3RyZWFtX29wcy5tbWFwKXRocm93IG5ldyBZdC5FcnJub0Vycm9yKDQzKTtpZighbHQp'@;
put 'dGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoMjgpO3JldHVybiBaZS5zdHJlYW1fb3BzLm1tYXAoWmUsbHQsTHQsJHQsRG4pfSxtc3luYzooWmUsbHQsTHQsJHQsRG4pPT5aZS5zdHJlYW1fb3BzLm1zeW5jP1plLnN0cmVhbV9vcHMubXN5bmMoWmUsbHQsTHQsJHQsRG4pOjAsaW9jdGwoWmUsbHQs'@;
put 'THQpe2lmKCFaZS5zdHJlYW1fb3BzLmlvY3RsKXRocm93IG5ldyBZdC5FcnJub0Vycm9yKDU5KTtyZXR1cm4gWmUuc3RyZWFtX29wcy5pb2N0bChaZSxsdCxMdCl9LHJlYWRGaWxlKFplLGx0PXt9KXtpZihsdC5mbGFncz1sdC5mbGFnc3x8MCxsdC5lbmNvZGluZz1sdC5lbmNvZGluZ3x8ImJp'@;
put 'bmFyeSIsInV0ZjgiIT09bHQuZW5jb2RpbmcmJiJiaW5hcnkiIT09bHQuZW5jb2RpbmcpdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGVuY29kaW5nIHR5cGUgIiR7bHQuZW5jb2Rpbmd9ImApO3ZhciBMdCwkdD1ZdC5vcGVuKFplLGx0LmZsYWdzKSxjcj1ZdC5zdGF0KFplKS5zaXplLFJyPW5l'@;
put 'dyBVaW50OEFycmF5KGNyKTtyZXR1cm4gWXQucmVhZCgkdCxSciwwLGNyLDApLCJ1dGY4Ij09PWx0LmVuY29kaW5nP0x0PXFzKFJyKToiYmluYXJ5Ij09PWx0LmVuY29kaW5nJiYoTHQ9UnIpLFl0LmNsb3NlKCR0KSxMdH0sd3JpdGVGaWxlKFplLGx0LEx0PXt9KXtMdC5mbGFncz1MdC5mbGFn'@;
put 'c3x8NTc3O3ZhciAkdD1ZdC5vcGVuKFplLEx0LmZsYWdzLEx0Lm1vZGUpO2lmKCJzdHJpbmciPT10eXBlb2YgbHQpe3ZhciBEbj1uZXcgVWludDhBcnJheShlcyhsdCkrMSksY3I9RTEobHQsRG4sMCxEbi5sZW5ndGgpO1l0LndyaXRlKCR0LERuLDAsY3Isdm9pZCAwLEx0LmNhbk93bil9ZWxz'@;
put 'ZXtpZighQXJyYXlCdWZmZXIuaXNWaWV3KGx0KSl0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIGRhdGEgdHlwZSIpO1l0LndyaXRlKCR0LGx0LDAsbHQuYnl0ZUxlbmd0aCx2b2lkIDAsTHQuY2FuT3duKX1ZdC5jbG9zZSgkdCl9LGN3ZDooKT0+WXQuY3VycmVudFBhdGgsY2hkaXIoWmUp'@;
put 'e3ZhciBsdD1ZdC5sb29rdXBQYXRoKFplLHtmb2xsb3c6ITB9KTtpZihudWxsPT09bHQubm9kZSl0aHJvdyBuZXcgWXQuRXJybm9FcnJvcig0NCk7aWYoIVl0LmlzRGlyKGx0Lm5vZGUubW9kZSkpdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoNTQpO3ZhciBMdD1ZdC5ub2RlUGVybWlzc2lvbnMo'@;
put 'bHQubm9kZSwieCIpO2lmKEx0KXRocm93IG5ldyBZdC5FcnJub0Vycm9yKEx0KTtZdC5jdXJyZW50UGF0aD1sdC5wYXRofSxjcmVhdGVEZWZhdWx0RGlyZWN0b3JpZXMoKXtZdC5ta2RpcigiL3RtcCIpLFl0Lm1rZGlyKCIvaG9tZSIpLFl0Lm1rZGlyKCIvaG9tZS93ZWJfdXNlciIpfSxjcmVh'@;
put 'dGVEZWZhdWx0RGV2aWNlcygpe1l0Lm1rZGlyKCIvZGV2IiksWXQucmVnaXN0ZXJEZXZpY2UoWXQubWFrZWRldigxLDMpLHtyZWFkOigpPT4wLHdyaXRlOigkdCxEbixjcixScixYcik9PlJyLGxsc2VlazooKT0+MH0pLFl0Lm1rZGV2KCIvZGV2L251bGwiLFl0Lm1ha2VkZXYoMSwzKSksZDQu'@;
put 'cmVnaXN0ZXIoWXQubWFrZWRldig1LDApLGQ0LmRlZmF1bHRfdHR5X29wcyksZDQucmVnaXN0ZXIoWXQubWFrZWRldig2LDApLGQ0LmRlZmF1bHRfdHR5MV9vcHMpLFl0Lm1rZGV2KCIvZGV2L3R0eSIsWXQubWFrZWRldig1LDApKSxZdC5ta2RldigiL2Rldi90dHkxIixZdC5tYWtlZGV2KDYs'@;
put 'MCkpO3ZhciBaZT1uZXcgVWludDhBcnJheSgxMDI0KSxsdD0wLEx0PSgpPT4oMD09PWx0JiYobHQ9YWQoWmUpLmJ5dGVMZW5ndGgpLFplWy0tbHRdKTtZdC5jcmVhdGVEZXZpY2UoIi9kZXYiLCJyYW5kb20iLEx0KSxZdC5jcmVhdGVEZXZpY2UoIi9kZXYiLCJ1cmFuZG9tIixMdCksWXQubWtk'@;
put 'aXIoIi9kZXYvc2htIiksWXQubWtkaXIoIi9kZXYvc2htL3RtcCIpfSxjcmVhdGVTcGVjaWFsRGlyZWN0b3JpZXMoKXtZdC5ta2RpcigiL3Byb2MiKTt2YXIgWmU9WXQubWtkaXIoIi9wcm9jL3NlbGYiKTtZdC5ta2RpcigiL3Byb2Mvc2VsZi9mZCIpLFl0Lm1vdW50KHttb3VudCgpe3ZhciBs'@;
put 'dD1ZdC5jcmVhdGVOb2RlKFplLCJmZCIsMTY4OTUsNzMpO3JldHVybiBsdC5ub2RlX29wcz17bG9va3VwKEx0LCR0KXt2YXIgY3I9WXQuZ2V0U3RyZWFtQ2hlY2tlZCgrJHQpLFJyPXtwYXJlbnQ6bnVsbCxtb3VudDp7bW91bnRwb2ludDoiZmFrZSJ9LG5vZGVfb3BzOntyZWFkbGluazooKT0+'@;
put 'Y3IucGF0aH19O3JldHVybiBSci5wYXJlbnQ9UnIsUnJ9fSxsdH19LHt9LCIvcHJvYy9zZWxmL2ZkIil9LGNyZWF0ZVN0YW5kYXJkU3RyZWFtcyhaZSxsdCxMdCl7WmU/WXQuY3JlYXRlRGV2aWNlKCIvZGV2Iiwic3RkaW4iLFplKTpZdC5zeW1saW5rKCIvZGV2L3R0eSIsIi9kZXYvc3RkaW4i'@;
put 'KSxsdD9ZdC5jcmVhdGVEZXZpY2UoIi9kZXYiLCJzdGRvdXQiLG51bGwsbHQpOll0LnN5bWxpbmsoIi9kZXYvdHR5IiwiL2Rldi9zdGRvdXQiKSxMdD9ZdC5jcmVhdGVEZXZpY2UoIi9kZXYiLCJzdGRlcnIiLG51bGwsTHQpOll0LnN5bWxpbmsoIi9kZXYvdHR5MSIsIi9kZXYvc3RkZXJyIiks'@;
put 'WXQub3BlbigiL2Rldi9zdGRpbiIsMCksWXQub3BlbigiL2Rldi9zdGRvdXQiLDEpLFl0Lm9wZW4oIi9kZXYvc3RkZXJyIiwxKX0sc3RhdGljSW5pdCgpe1l0Lm5hbWVUYWJsZT1uZXcgQXJyYXkoNDA5NiksWXQubW91bnQoJGEse30sIi8iKSxZdC5jcmVhdGVEZWZhdWx0RGlyZWN0b3JpZXMo'@;
put 'KSxZdC5jcmVhdGVEZWZhdWx0RGV2aWNlcygpLFl0LmNyZWF0ZVNwZWNpYWxEaXJlY3RvcmllcygpLFl0LmZpbGVzeXN0ZW1zPXtNRU1GUzokYX19LGluaXQoWmUsbHQsTHQpe1l0LmluaXRpYWxpemVkPSEwLFl0LmNyZWF0ZVN0YW5kYXJkU3RyZWFtcyhaZSxsdCxMdCl9LHF1aXQoKXtZdC5p'@;
put 'bml0aWFsaXplZD0hMTtmb3IodmFyIFplPTA7WmU8WXQuc3RyZWFtcy5sZW5ndGg7WmUrKyl7dmFyIGx0PVl0LnN0cmVhbXNbWmVdO2x0JiZZdC5jbG9zZShsdCl9fSxmaW5kT2JqZWN0KFplLGx0KXt2YXIgTHQ9WXQuYW5hbHl6ZVBhdGgoWmUsbHQpO3JldHVybiBMdC5leGlzdHM/THQub2Jq'@;
put 'ZWN0Om51bGx9LGFuYWx5emVQYXRoKFplLGx0KXt0cnl7WmU9KEx0PVl0Lmxvb2t1cFBhdGgoWmUse2ZvbGxvdzohbHR9KSkucGF0aH1jYXRjaHt9dmFyICR0PXtpc1Jvb3Q6ITEsZXhpc3RzOiExLGVycm9yOjAsbmFtZTpudWxsLHBhdGg6bnVsbCxvYmplY3Q6bnVsbCxwYXJlbnRFeGlzdHM6'@;
put 'ITEscGFyZW50UGF0aDpudWxsLHBhcmVudE9iamVjdDpudWxsfTt0cnl7dmFyIEx0PVl0Lmxvb2t1cFBhdGgoWmUse3BhcmVudDohMH0pOyR0LnBhcmVudEV4aXN0cz0hMCwkdC5wYXJlbnRQYXRoPUx0LnBhdGgsJHQucGFyZW50T2JqZWN0PUx0Lm5vZGUsJHQubmFtZT1Rby5iYXNlbmFtZSha'@;
put 'ZSksTHQ9WXQubG9va3VwUGF0aChaZSx7Zm9sbG93OiFsdH0pLCR0LmV4aXN0cz0hMCwkdC5wYXRoPUx0LnBhdGgsJHQub2JqZWN0PUx0Lm5vZGUsJHQubmFtZT1MdC5ub2RlLm5hbWUsJHQuaXNSb290PSIvIj09PUx0LnBhdGh9Y2F0Y2goRG4peyR0LmVycm9yPURuLmVycm5vfXJldHVybiAk'@;
put 'dH0sY3JlYXRlUGF0aChaZSxsdCxMdCwkdCl7WmU9InN0cmluZyI9PXR5cGVvZiBaZT9aZTpZdC5nZXRQYXRoKFplKTtmb3IodmFyIERuPWx0LnNwbGl0KCIvIikucmV2ZXJzZSgpO0RuLmxlbmd0aDspe3ZhciBjcj1Ebi5wb3AoKTtpZihjcil7dmFyIFJyPVFvLmpvaW4yKFplLGNyKTt0cnl7'@;
put 'WXQubWtkaXIoUnIpfWNhdGNoe31aZT1Scn19cmV0dXJuIFJyfSxjcmVhdGVGaWxlKFplLGx0LEx0LCR0LERuKXt2YXIgY3I9UW8uam9pbjIoInN0cmluZyI9PXR5cGVvZiBaZT9aZTpZdC5nZXRQYXRoKFplKSxsdCksUnI9akEoJHQsRG4pO3JldHVybiBZdC5jcmVhdGUoY3IsUnIpfSxjcmVh'@;
put 'dGVEYXRhRmlsZShaZSxsdCxMdCwkdCxEbixjcil7dmFyIFJyPWx0O1plJiYoWmU9InN0cmluZyI9PXR5cGVvZiBaZT9aZTpZdC5nZXRQYXRoKFplKSxScj1sdD9Rby5qb2luMihaZSxsdCk6WmUpO3ZhciBYcj1qQSgkdCxEbiksa2E9WXQuY3JlYXRlKFJyLFhyKTtpZihMdCl7aWYoInN0cmlu'@;
put 'ZyI9PXR5cGVvZiBMdCl7Zm9yKHZhciBHbz1uZXcgQXJyYXkoTHQubGVuZ3RoKSxIcz0wLGFsPUx0Lmxlbmd0aDtIczxhbDsrK0hzKUdvW0hzXT1MdC5jaGFyQ29kZUF0KEhzKTtMdD1Hb31ZdC5jaG1vZChrYSwxNDZ8WHIpO3ZhciBncz1ZdC5vcGVuKGthLDU3Nyk7WXQud3JpdGUoZ3MsTHQs'@;
put 'MCxMdC5sZW5ndGgsMCxjciksWXQuY2xvc2UoZ3MpLFl0LmNobW9kKGthLFhyKX19LGNyZWF0ZURldmljZShaZSxsdCxMdCwkdCl7dmFyIERuPVFvLmpvaW4yKCJzdHJpbmciPT10eXBlb2YgWmU/WmU6WXQuZ2V0UGF0aChaZSksbHQpLGNyPWpBKCEhTHQsISEkdCk7WXQuY3JlYXRlRGV2aWNl'@;
put 'Lm1ham9yPz89NjQ7dmFyIFJyPVl0Lm1ha2VkZXYoWXQuY3JlYXRlRGV2aWNlLm1ham9yKyssMCk7cmV0dXJuIFl0LnJlZ2lzdGVyRGV2aWNlKFJyLHtvcGVuKFhyKXtYci5zZWVrYWJsZT0hMX0sY2xvc2UoWHIpeyR0Py5idWZmZXI/Lmxlbmd0aCYmJHQoMTApfSxyZWFkKFhyLGthLEdvLEhz'@;
put 'LGFsKXtmb3IodmFyIGdzPTAseG89MDt4bzxIczt4bysrKXt2YXIgWHM7dHJ5e1hzPUx0KCl9Y2F0Y2h7dGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoMjkpfWlmKHZvaWQgMD09PVhzJiYwPT09Z3MpdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoNik7aWYobnVsbD09WHMpYnJlYWs7Z3MrKyxrYVtH'@;
put 'byt4b109WHN9cmV0dXJuIGdzJiYoWHIubm9kZS50aW1lc3RhbXA9RGF0ZS5ub3coKSksZ3N9LHdyaXRlKFhyLGthLEdvLEhzLGFsKXtmb3IodmFyIGdzPTA7Z3M8SHM7Z3MrKyl0cnl7JHQoa2FbR28rZ3NdKX1jYXRjaHt0aHJvdyBuZXcgWXQuRXJybm9FcnJvcigyOSl9cmV0dXJuIEhzJiYo'@;
put 'WHIubm9kZS50aW1lc3RhbXA9RGF0ZS5ub3coKSksZ3N9fSksWXQubWtkZXYoRG4sY3IsUnIpfSxmb3JjZUxvYWRGaWxlKFplKXtpZihaZS5pc0RldmljZXx8WmUuaXNGb2xkZXJ8fFplLmxpbmt8fFplLmNvbnRlbnRzKXJldHVybiEwO2lmKHR5cGVvZiBYTUxIdHRwUmVxdWVzdDwidSIpdGhy'@;
put 'b3cgbmV3IEVycm9yKCJMYXp5IGxvYWRpbmcgc2hvdWxkIGhhdmUgYmVlbiBwZXJmb3JtZWQgKGNvbnRlbnRzIHNldCkgaW4gY3JlYXRlTGF6eUZpbGUsIGJ1dCBpdCB3YXMgbm90LiBMYXp5IGxvYWRpbmcgb25seSB3b3JrcyBpbiB3ZWIgd29ya2Vycy4gVXNlIC0tZW1iZWQtZmlsZSBvciAt'@;
put 'LXByZWxvYWQtZmlsZSBpbiBlbWNjIG9uIHRoZSBtYWluIHRocmVhZC4iKTt0cnl7WmUuY29udGVudHM9QmUoWmUudXJsKSxaZS51c2VkQnl0ZXM9WmUuY29udGVudHMubGVuZ3RofWNhdGNoe3Rocm93IG5ldyBZdC5FcnJub0Vycm9yKDI5KX19LGNyZWF0ZUxhenlGaWxlKFplLGx0LEx0LCR0'@;
put 'LERuKXtpZih0eXBlb2YgWE1MSHR0cFJlcXVlc3Q8InUiKXRocm93IkNhbm5vdCBkbyBzeW5jaHJvbm91cyBiaW5hcnkgWEhScyBvdXRzaWRlIHdlYndvcmtlcnMgaW4gbW9kZXJuIGJyb3dzZXJzLiBVc2UgLS1lbWJlZC1maWxlIG9yIC0tcHJlbG9hZC1maWxlIGluIGVtY2MiO3ZhciBYcixr'@;
put 'YT1ZdC5jcmVhdGVGaWxlKFplLGx0LFhyPXtpc0RldmljZTohMSx1cmw6THR9LCR0LERuKTtYci5jb250ZW50cz9rYS5jb250ZW50cz1Yci5jb250ZW50czpYci51cmwmJihrYS5jb250ZW50cz1udWxsLGthLnVybD1Yci51cmwpLE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGthLHt1c2VkQnl0'@;
put 'ZXM6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbnRlbnRzLmxlbmd0aH19fSk7dmFyIEdvPXt9O2Z1bmN0aW9uIGFsKGdzLHhvLFhzLEExLFQzKXt2YXIgV2g9Z3Mubm9kZS5jb250ZW50cztpZihUMz49V2gubGVuZ3RoKXJldHVybiAwO3ZhciBBMz1NYXRoLm1pbihXaC5sZW5ndGgt'@;
put 'VDMsQTEpO2lmKFdoLnNsaWNlKWZvcih2YXIgazM9MDtrMzxBMztrMysrKXhvW1hzK2szXT1XaFtUMytrM107ZWxzZSBmb3IoazM9MDtrMzxBMztrMysrKXhvW1hzK2szXT1XaC5nZXQoVDMrazMpO3JldHVybiBBM31yZXR1cm4gT2JqZWN0LmtleXMoa2Euc3RyZWFtX29wcykuZm9yRWFjaChn'@;
put 'cz0+e3ZhciB4bz1rYS5zdHJlYW1fb3BzW2dzXTtHb1tnc109KC4uLlhzKT0+KFl0LmZvcmNlTG9hZEZpbGUoa2EpLHhvKC4uLlhzKSl9KSxHby5yZWFkPShncyx4byxYcyxBMSxUMyk9PihZdC5mb3JjZUxvYWRGaWxlKGthKSxhbChncyx4byxYcyxBMSxUMykpLEdvLm1tYXA9KGdzLHhvLFhz'@;
put 'LEExLFQzKT0+e1l0LmZvcmNlTG9hZEZpbGUoa2EpO3ZhciBXaD1VTih4byk7aWYoIVdoKXRocm93IG5ldyBZdC5FcnJub0Vycm9yKDQ4KTtyZXR1cm4gYWwoZ3MsdG4sV2gseG8sWHMpLHtwdHI6V2gsYWxsb2NhdGVkOiEwfX0sa2Euc3RyZWFtX29wcz1HbyxrYX19LHYwPShaZSxsdCk9Plpl'@;
put 'P3FzKE1uLFplLGx0KToiIixacz17REVGQVVMVF9QT0xMTUFTSzo1LGNhbGN1bGF0ZUF0KFplLGx0LEx0KXtpZihRby5pc0FicyhsdCkpcmV0dXJuIGx0O3ZhciAkdDtpZigkdD0tMTAwPT09WmU/WXQuY3dkKCk6WnMuZ2V0U3RyZWFtRnJvbUZEKFplKS5wYXRoLDA9PWx0Lmxlbmd0aCl7aWYo'@;
put 'IUx0KXRocm93IG5ldyBZdC5FcnJub0Vycm9yKDQ0KTtyZXR1cm4gJHR9cmV0dXJuIFFvLmpvaW4yKCR0LGx0KX0sZG9TdGF0KFplLGx0LEx0KXt2YXIgJHQ9WmUobHQpO21yW0x0Pj4yXT0kdC5kZXYsbXJbTHQrND4+Ml09JHQubW9kZSxHbltMdCs4Pj4yXT0kdC5ubGluayxtcltMdCsxMj4+'@;
put 'Ml09JHQudWlkLG1yW0x0KzE2Pj4yXT0kdC5naWQsbXJbTHQrMjA+PjJdPSR0LnJkZXYsYWE9WyR0LnNpemU+Pj4wLChacj0kdC5zaXplLCtNYXRoLmFicyhacik+PTE/WnI+MD8rTWF0aC5mbG9vcihaci80Mjk0OTY3Mjk2KT4+PjA6fn4rTWF0aC5jZWlsKChaci0rKH5+WnI+Pj4wKSkvNDI5'@;
put 'NDk2NzI5Nik+Pj4wOjApXSxtcltMdCsyND4+Ml09YWFbMF0sbXJbTHQrMjg+PjJdPWFhWzFdLG1yW0x0KzMyPj4yXT00MDk2LG1yW0x0KzM2Pj4yXT0kdC5ibG9ja3M7dmFyIERuPSR0LmF0aW1lLmdldFRpbWUoKSxjcj0kdC5tdGltZS5nZXRUaW1lKCksUnI9JHQuY3RpbWUuZ2V0VGltZSgp'@;
put 'O3JldHVybiBhYT1bTWF0aC5mbG9vcihEbi8xZTMpPj4+MCwoWnI9TWF0aC5mbG9vcihEbi8xZTMpLCtNYXRoLmFicyhacik+PTE/WnI+MD8rTWF0aC5mbG9vcihaci80Mjk0OTY3Mjk2KT4+PjA6fn4rTWF0aC5jZWlsKChaci0rKH5+WnI+Pj4wKSkvNDI5NDk2NzI5Nik+Pj4wOjApXSxtcltM'@;
put 'dCs0MD4+Ml09YWFbMF0sbXJbTHQrNDQ+PjJdPWFhWzFdLEduW0x0KzQ4Pj4yXT1EbiUxZTMqMWUzKjFlMyxhYT1bTWF0aC5mbG9vcihjci8xZTMpPj4+MCwoWnI9TWF0aC5mbG9vcihjci8xZTMpLCtNYXRoLmFicyhacik+PTE/WnI+MD8rTWF0aC5mbG9vcihaci80Mjk0OTY3Mjk2KT4+PjA6'@;
put 'fn4rTWF0aC5jZWlsKChaci0rKH5+WnI+Pj4wKSkvNDI5NDk2NzI5Nik+Pj4wOjApXSxtcltMdCs1Nj4+Ml09YWFbMF0sbXJbTHQrNjA+PjJdPWFhWzFdLEduW0x0KzY0Pj4yXT1jciUxZTMqMWUzKjFlMyxhYT1bTWF0aC5mbG9vcihSci8xZTMpPj4+MCwoWnI9TWF0aC5mbG9vcihSci8xZTMp'@;
put 'LCtNYXRoLmFicyhacik+PTE/WnI+MD8rTWF0aC5mbG9vcihaci80Mjk0OTY3Mjk2KT4+PjA6fn4rTWF0aC5jZWlsKChaci0rKH5+WnI+Pj4wKSkvNDI5NDk2NzI5Nik+Pj4wOjApXSxtcltMdCs3Mj4+Ml09YWFbMF0sbXJbTHQrNzY+PjJdPWFhWzFdLEduW0x0KzgwPj4yXT1SciUxZTMqMWUz'@;
put 'KjFlMyxhYT1bJHQuaW5vPj4+MCwoWnI9JHQuaW5vLCtNYXRoLmFicyhacik+PTE/WnI+MD8rTWF0aC5mbG9vcihaci80Mjk0OTY3Mjk2KT4+PjA6fn4rTWF0aC5jZWlsKChaci0rKH5+WnI+Pj4wKSkvNDI5NDk2NzI5Nik+Pj4wOjApXSxtcltMdCs4OD4+Ml09YWFbMF0sbXJbTHQrOTI+PjJd'@;
put 'PWFhWzFdLDB9LGRvTXN5bmMoWmUsbHQsTHQsJHQsRG4pe2lmKCFZdC5pc0ZpbGUobHQubm9kZS5tb2RlKSl0aHJvdyBuZXcgWXQuRXJybm9FcnJvcig0Myk7aWYoMiYkdClyZXR1cm4gMDt2YXIgY3I9TW4uc2xpY2UoWmUsWmUrTHQpO1l0Lm1zeW5jKGx0LGNyLERuLEx0LCR0KX0sZ2V0U3Ry'@;
put 'ZWFtRnJvbUZEOlplPT5ZdC5nZXRTdHJlYW1DaGVja2VkKFplKSx2YXJhcmdzOnZvaWQgMCxnZXRTdHI6WmU9PnYwKFplKX0sRTY9KCk9Pnt2YXIgWmU9bXJbK1pzLnZhcmFyZ3M+PjJdO3JldHVybiBacy52YXJhcmdzKz00LFplfSxlNT1FNixvdj0oWmUsbHQsTHQpPT5FMShaZSxNbixsdCxM'@;
put 'dCksWmg9KFplLGx0KT0+bHQrMjA5NzE1Mj4+PjA8NDE5NDMwNS0hIVplPyhaZT4+PjApKzQyOTQ5NjcyOTYqbHQ6TmFOLGt3PVtdLEdEdD1aZT0+e3ZhciBMdD0oWmUtZHQuYnVmZmVyLmJ5dGVMZW5ndGgrNjU1MzUpLzY1NTM2fDA7dHJ5e3JldHVybiBkdC5ncm93KEx0KSxPbigpLDF9Y2F0'@;
put 'Y2h7fX0sWXRlPXt9LFVBPSgpPT57aWYoIVVBLnN0cmluZ3Mpe3ZhciBsdD17VVNFUjoid2ViX3VzZXIiLExPR05BTUU6IndlYl91c2VyIixQQVRIOiIvIixQV0Q6Ii8iLEhPTUU6Ii9ob21lL3dlYl91c2VyIixMQU5HOigib2JqZWN0Ij09dHlwZW9mIG5hdmlnYXRvciYmbmF2aWdhdG9yLmxh'@;
put 'bmd1YWdlcyYmbmF2aWdhdG9yLmxhbmd1YWdlc1swXXx8IkMiKS5yZXBsYWNlKCItIiwiXyIpKyIuVVRGLTgiLF86Ii4vdGhpcy5wcm9ncmFtIn07Zm9yKHZhciBMdCBpbiBZdGUpdm9pZCAwPT09WXRlW0x0XT9kZWxldGUgbHRbTHRdOmx0W0x0XT1ZdGVbTHRdO3ZhciAkdD1bXTtmb3IodmFy'@;
put 'IEx0IGluIGx0KSR0LnB1c2goYCR7THR9PSR7bHRbTHRdfWApO1VBLnN0cmluZ3M9JHR9cmV0dXJuIFVBLnN0cmluZ3N9O1l0LmNyZWF0ZVByZWxvYWRlZEZpbGU9KFplLGx0LEx0LCR0LERuLGNyLFJyLFhyLGthLEdvKT0+e3ZhciBIcz1sdD9Vcy5yZXNvbHZlKFFvLmpvaW4yKFplLGx0KSk6'@;
put 'WmU7ZnVuY3Rpb24gZ3MoeG8pe2Z1bmN0aW9uIFhzKEExKXtHbz8uKCksWHJ8fCgoWmUsbHQsTHQsJHQsRG4sY3IpPT57WXQuY3JlYXRlRGF0YUZpbGUoWmUsbHQsTHQsJHQsRG4sY3IpfSkoWmUsbHQsQTEsJHQsRG4sa2EpLGNyPy4oKSxIcigpfSgoWmUsbHQsTHQsJHQpPT57dHlwZW9mIEJy'@;
put 'b3dzZXI8InUiJiZCcm93c2VyLmluaXQoKTt2YXIgRG49ITE7cmV0dXJuIFpOLmZvckVhY2goY3I9PntEbnx8Y3IuY2FuSGFuZGxlKGx0KSYmKGNyLmhhbmRsZShaZSxsdCxMdCwkdCksRG49ITApfSksRG59KSh4byxIcyxYcywoKT0+e1JyPy4oKSxIcigpfSl8fFhzKHhvKX1hcigpLCJzdHJp'@;
put 'bmciPT10eXBlb2YgTHQ/KChaZSxsdCxMdCwkdCk9Pnt2YXIgRG49YGFsICR7WmV9YDsodm9pZCAwKShaZSkudGhlbihjcj0+e2x0KG5ldyBVaW50OEFycmF5KGNyKSksRG4mJkhyKCl9LGNyPT57aWYoIUx0KXRocm93YExvYWRpbmcgZGF0YSBmaWxlICIke1plfSIgZmFpbGVkLmA7THQoKX0p'@;
put 'LERuJiZhcigpfSkoTHQsZ3MsUnIpOmdzKEx0KX0sWXQuc3RhdGljSW5pdCgpLCRhLmRvZXNOb3RFeGlzdEVycm9yPW5ldyBZdC5FcnJub0Vycm9yKDQ0KSwkYS5kb2VzTm90RXhpc3RFcnJvci5zdGFjaz0iPGdlbmVyaWMgZXJyb3IsIG5vIHN0YWNrPiI7dmFyIFFOLGNJdD17YTooWmUsbHQs'@;
put 'THQpPT57dGhyb3cgbmV3IHBzKFplKS5pbml0KGx0LEx0KSxaZX0saTpmdW5jdGlvbiBHTihaZSxsdCxMdCwkdCl7dHJ5e2lmKGx0PVpzLmdldFN0cihsdCksbHQ9WnMuY2FsY3VsYXRlQXQoWmUsbHQpLC04Jkx0KXJldHVybi0yODt2YXIgY3I9WXQubG9va3VwUGF0aChsdCx7Zm9sbG93OiEw'@;
put 'fSkubm9kZTtpZighY3IpcmV0dXJuLTQ0O3ZhciBScj0iIjtyZXR1cm4gNCZMdCYmKFJyKz0iciIpLDImTHQmJihScis9InciKSwxJkx0JiYoUnIrPSJ4IiksUnImJll0Lm5vZGVQZXJtaXNzaW9ucyhjcixScik/LTI6MH1jYXRjaChYcil7aWYodHlwZW9mIFl0PiJ1Inx8IkVycm5vRXJyb3Ii'@;
put 'IT09WHIubmFtZSl0aHJvdyBYcjtyZXR1cm4tWHIuZXJybm99fSxmOmZ1bmN0aW9uIEUzKFplLGx0LEx0KXtacy52YXJhcmdzPUx0O3RyeXt2YXIgJHQ9WnMuZ2V0U3RyZWFtRnJvbUZEKFplKTtzd2l0Y2gobHQpe2Nhc2UgMDppZigoRG49RTYoKSk8MClyZXR1cm4tMjg7Zm9yKDtZdC5zdHJl'@;
put 'YW1zW0RuXTspRG4rKztyZXR1cm4gWXQuZHVwU3RyZWFtKCR0LERuKS5mZDtjYXNlIDE6Y2FzZSAyOmNhc2UgMTM6Y2FzZSAxNDpyZXR1cm4gMDtjYXNlIDM6cmV0dXJuICR0LmZsYWdzO2Nhc2UgNDp2YXIgRG49RTYoKTtyZXR1cm4gJHQuZmxhZ3N8PURuLDA7Y2FzZSAxMjpyZXR1cm4gRG49'@;
put 'ZTUoKSxDcltEbiswPj4xXT0yLDB9cmV0dXJuLTI4fWNhdGNoKFhyKXtpZih0eXBlb2YgWXQ+InUifHwiRXJybm9FcnJvciIhPT1Yci5uYW1lKXRocm93IFhyO3JldHVybi1Yci5lcnJub319LHg6ZnVuY3Rpb24gJE4oWmUsbHQpe3RyeXt2YXIgTHQ9WnMuZ2V0U3RyZWFtRnJvbUZEKFplKTty'@;
put 'ZXR1cm4gWnMuZG9TdGF0KFl0LnN0YXQsTHQucGF0aCxsdCl9Y2F0Y2goJHQpe2lmKHR5cGVvZiBZdD4idSJ8fCJFcnJub0Vycm9yIiE9PSR0Lm5hbWUpdGhyb3cgJHQ7cmV0dXJuLSR0LmVycm5vfX0sazpmdW5jdGlvbiBLTihaZSxsdCxMdCl7WnMudmFyYXJncz1MdDt0cnl7dmFyICR0PVpz'@;
put 'LmdldFN0cmVhbUZyb21GRChaZSk7c3dpdGNoKGx0KXtjYXNlIDIxNTA5OmNhc2UgMjE1MTA6Y2FzZSAyMTUxMTpjYXNlIDIxNTEyOmNhc2UgMjE1MjQ6Y2FzZSAyMTUxNTpyZXR1cm4gJHQudHR5PzA6LTU5O2Nhc2UgMjE1MDU6aWYoISR0LnR0eSlyZXR1cm4tNTk7aWYoJHQudHR5Lm9wcy5p'@;
put 'b2N0bF90Y2dldHMpe3ZhciBEbj0kdC50dHkub3BzLmlvY3RsX3RjZ2V0cygkdCksY3I9ZTUoKTttcltjcj4+Ml09RG4uY19pZmxhZ3x8MCxtcltjcis0Pj4yXT1Ebi5jX29mbGFnfHwwLG1yW2NyKzg+PjJdPURuLmNfY2ZsYWd8fDAsbXJbY3IrMTI+PjJdPURuLmNfbGZsYWd8fDA7Zm9yKHZh'@;
put 'ciBScj0wO1JyPDMyO1JyKyspdG5bY3IrUnIrMTddPURuLmNfY2NbUnJdfHwwO3JldHVybiAwfXJldHVybiAwO2Nhc2UgMjE1MDY6Y2FzZSAyMTUwNzpjYXNlIDIxNTA4OmlmKCEkdC50dHkpcmV0dXJuLTU5O2lmKCR0LnR0eS5vcHMuaW9jdGxfdGNzZXRzKXtjcj1lNSgpO3ZhciBYcj1tcltj'@;
put 'cj4+Ml0sa2E9bXJbY3IrND4+Ml0sR289bXJbY3IrOD4+Ml0sSHM9bXJbY3IrMTI+PjJdLGFsPVtdO2ZvcihScj0wO1JyPDMyO1JyKyspYWwucHVzaCh0bltjcitScisxN10pO3JldHVybiAkdC50dHkub3BzLmlvY3RsX3Rjc2V0cygkdC50dHksbHQse2NfaWZsYWc6WHIsY19vZmxhZzprYSxj'@;
put 'X2NmbGFnOkdvLGNfbGZsYWc6SHMsY19jYzphbH0pfXJldHVybiAwO2Nhc2UgMjE1MTk6cmV0dXJuICR0LnR0eT8oY3I9ZTUoKSxtcltjcj4+Ml09MCwwKTotNTk7Y2FzZSAyMTUyMDpyZXR1cm4gJHQudHR5Py0yODotNTk7Y2FzZSAyMTUzMTpyZXR1cm4gY3I9ZTUoKSxZdC5pb2N0bCgkdCxs'@;
put 'dCxjcik7Y2FzZSAyMTUyMzppZighJHQudHR5KXJldHVybi01OTtpZigkdC50dHkub3BzLmlvY3RsX3Rpb2Nnd2luc3ope3ZhciBncz0kdC50dHkub3BzLmlvY3RsX3Rpb2Nnd2luc3ooJHQudHR5KTtjcj1lNSgpLENyW2NyPj4xXT1nc1swXSxDcltjcisyPj4xXT1nc1sxXX1yZXR1cm4gMDtk'@;
put 'ZWZhdWx0OnJldHVybi0yOH19Y2F0Y2goeG8pe2lmKHR5cGVvZiBZdD4idSJ8fCJFcnJub0Vycm9yIiE9PXhvLm5hbWUpdGhyb3cgeG87cmV0dXJuLXhvLmVycm5vfX0sdjpmdW5jdGlvbiBxTihaZSxsdCxMdCwkdCl7dHJ5e2x0PVpzLmdldFN0cihsdCk7dmFyIERuPTI1NiYkdCxjcj00MDk2'@;
put 'JiR0O3JldHVybiAkdCY9LTY0MDEsbHQ9WnMuY2FsY3VsYXRlQXQoWmUsbHQsY3IpLFpzLmRvU3RhdChEbj9ZdC5sc3RhdDpZdC5zdGF0LGx0LEx0KX1jYXRjaChScil7aWYodHlwZW9mIFl0PiJ1Inx8IkVycm5vRXJyb3IiIT09UnIubmFtZSl0aHJvdyBScjtyZXR1cm4tUnIuZXJybm99fSxo'@;
put 'OmZ1bmN0aW9uIFhOKFplLGx0LEx0LCR0KXtacy52YXJhcmdzPSR0O3RyeXtsdD1acy5nZXRTdHIobHQpLGx0PVpzLmNhbGN1bGF0ZUF0KFplLGx0KTt2YXIgRG49JHQ/RTYoKTowO3JldHVybiBZdC5vcGVuKGx0LEx0LERuKS5mZH1jYXRjaChjcil7aWYodHlwZW9mIFl0PiJ1Inx8IkVycm5v'@;
put 'RXJyb3IiIT09Y3IubmFtZSl0aHJvdyBjcjtyZXR1cm4tY3IuZXJybm99fSxxOmZ1bmN0aW9uIGNvKFplLGx0LEx0LCR0KXt0cnl7aWYobHQ9WnMuZ2V0U3RyKGx0KSxsdD1acy5jYWxjdWxhdGVBdChaZSxsdCksJHQ8PTApcmV0dXJuLTI4O3ZhciBEbj1ZdC5yZWFkbGluayhsdCksY3I9TWF0'@;
put 'aC5taW4oJHQsZXMoRG4pKSxScj10bltMdCtjcl07cmV0dXJuIG92KERuLEx0LCR0KzEpLHRuW0x0K2NyXT1Scixjcn1jYXRjaChYcil7aWYodHlwZW9mIFl0PiJ1Inx8IkVycm5vRXJyb3IiIT09WHIubmFtZSl0aHJvdyBYcjtyZXR1cm4tWHIuZXJybm99fSxyOmZ1bmN0aW9uIGdyKFplKXt0'@;
put 'cnl7cmV0dXJuIFplPVpzLmdldFN0cihaZSksWXQucm1kaXIoWmUpLDB9Y2F0Y2gobHQpe2lmKHR5cGVvZiBZdD4idSJ8fCJFcnJub0Vycm9yIiE9PWx0Lm5hbWUpdGhyb3cgbHQ7cmV0dXJuLWx0LmVycm5vfX0sdzpmdW5jdGlvbiBRaShaZSxsdCl7dHJ5e3JldHVybiBaZT1acy5nZXRTdHIo'@;
put 'WmUpLFpzLmRvU3RhdChZdC5zdGF0LFplLGx0KX1jYXRjaChMdCl7aWYodHlwZW9mIFl0PiJ1Inx8IkVycm5vRXJyb3IiIT09THQubmFtZSl0aHJvdyBMdDtyZXR1cm4tTHQuZXJybm99fSxzOmZ1bmN0aW9uIFhhKFplLGx0LEx0KXt0cnl7cmV0dXJuIGx0PVpzLmdldFN0cihsdCksbHQ9WnMu'@;
put 'Y2FsY3VsYXRlQXQoWmUsbHQpLDA9PT1MdD9ZdC51bmxpbmsobHQpOjUxMj09PUx0P1l0LnJtZGlyKGx0KTpxcigiSW52YWxpZCBmbGFncyBwYXNzZWQgdG8gdW5saW5rYXQiKSwwfWNhdGNoKCR0KXtpZih0eXBlb2YgWXQ+InUifHwiRXJybm9FcnJvciIhPT0kdC5uYW1lKXRocm93ICR0O3Jl'@;
put 'dHVybi0kdC5lcnJub319LGo6KCk9PnFyKCIiKSx5OigpPT4xLHo6KFplLGx0LEx0KT0+TW4uY29weVdpdGhpbihaZSxsdCxsdCtMdCksbDpmdW5jdGlvbiBzdihaZSxsdCxMdCwkdCxEbixjcixScixYcil7dmFyIGthPVpoKERuLGNyKTt0cnl7aWYoaXNOYU4oa2EpKXJldHVybiA2MTt2YXIg'@;
put 'R289WnMuZ2V0U3RyZWFtRnJvbUZEKCR0KSxIcz1ZdC5tbWFwKEdvLFplLGthLGx0LEx0KSxhbD1Icy5wdHI7cmV0dXJuIG1yW1JyPj4yXT1Icy5hbGxvY2F0ZWQsR25bWHI+PjJdPWFsLDB9Y2F0Y2goZ3Mpe2lmKHR5cGVvZiBZdD4idSJ8fCJFcnJub0Vycm9yIiE9PWdzLm5hbWUpdGhyb3cg'@;
put 'Z3M7cmV0dXJuLWdzLmVycm5vfX0sbTpmdW5jdGlvbiB6QShaZSxsdCxMdCwkdCxEbixjcixScil7dmFyIFhyPVpoKGNyLFJyKTt0cnl7dmFyIGthPVpzLmdldFN0cmVhbUZyb21GRChEbik7MiZMdCYmWnMuZG9Nc3luYyhaZSxrYSxsdCwkdCxYcil9Y2F0Y2goR28pe2lmKHR5cGVvZiBZdD4i'@;
put 'dSJ8fCJFcnJub0Vycm9yIiE9PUdvLm5hbWUpdGhyb3cgR287cmV0dXJuLUdvLmVycm5vfX0sbzooWmUsbHQsTHQsJHQpPT57dmFyIERuPShuZXcgRGF0ZSkuZ2V0RnVsbFllYXIoKSxjcj1uZXcgRGF0ZShEbiwwLDEpLFJyPW5ldyBEYXRlKERuLDYsMSksWHI9Y3IuZ2V0VGltZXpvbmVPZmZz'@;
put 'ZXQoKSxrYT1Sci5nZXRUaW1lem9uZU9mZnNldCgpLEdvPU1hdGgubWF4KFhyLGthKTtHbltaZT4+Ml09NjAqR28sbXJbbHQ+PjJdPSsoWHIhPWthKTt2YXIgSHM9eG89Pnt2YXIgWHM9eG8+PTA/Ii0iOiIrIixBMT1NYXRoLmFicyh4byk7cmV0dXJuYFVUQyR7WHN9JHtTdHJpbmcoTWF0aC5m'@;
put 'bG9vcihBMS82MCkpLnBhZFN0YXJ0KDIsIjAiKX0ke1N0cmluZyhBMSU2MCkucGFkU3RhcnQoMiwiMCIpfWB9LGFsPUhzKFhyKSxncz1IcyhrYSk7a2E8WHI/KG92KGFsLEx0LDE3KSxvdihncywkdCwxNykpOihvdihhbCwkdCwxNyksb3YoZ3MsTHQsMTcpKX0sQTooWmUsbHQsTHQpPT4oKFpl'@;
put 'LGx0LEx0KT0+e3ZhciAkdD0oKFplLGx0KT0+e2t3Lmxlbmd0aD0wO2Zvcih2YXIgTHQ7THQ9TW5bWmUrK107KXt2YXIgJHQ9MTA1IT1MdDtsdCs9KCR0Jj0xMTIhPUx0KSYmbHQlOD80OjAsa3cucHVzaCgxMTI9PUx0P0duW2x0Pj4yXToxMDU9PUx0P21yW2x0Pj4yXTpfaVtsdD4+M10pLGx0'@;
put 'Kz0kdD84OjR9cmV0dXJuIGt3fSkobHQsTHQpO3JldHVybiBCYVtaZV0oLi4uJHQpfSkoWmUsbHQsTHQpLGM6KCk9PkRhdGUubm93KCkscDpaZT0+e3ZhciBsdD1Nbi5sZW5ndGgsTHQ9MjE0NzQ4MzY0ODtpZigoWmU+Pj49MCk+THQpcmV0dXJuITE7Zm9yKHZhciAkdD0xOyR0PD00OyR0Kj0y'@;
put 'KXt2YXIgRG49bHQqKDErLjIvJHQpO0RuPU1hdGgubWluKERuLFplKzEwMDY2MzI5Nik7dmFyIGNyPU1hdGgubWluKEx0LFZBKE1hdGgubWF4KFplLERuKSw2NTUzNikpO2lmKEdEdChjcikpcmV0dXJuITB9cmV0dXJuITF9LHQ6KFplLGx0KT0+e3ZhciBMdD0wO3JldHVybiBVQSgpLmZvckVh'@;
put 'Y2goKCR0LERuKT0+e3ZhciBjcj1sdCtMdDtHbltaZSs0KkRuPj4yXT1jciwoKFplLGx0KT0+e2Zvcih2YXIgTHQ9MDtMdDxaZS5sZW5ndGg7KytMdCl0bltsdCsrXT1aZS5jaGFyQ29kZUF0KEx0KTt0bltsdF09MH0pKCR0LGNyKSxMdCs9JHQubGVuZ3RoKzF9KSwwfSx1OihaZSxsdCk9Pnt2'@;
put 'YXIgTHQ9VUEoKTtHbltaZT4+Ml09THQubGVuZ3RoO3ZhciAkdD0wO3JldHVybiBMdC5mb3JFYWNoKERuPT4kdCs9RG4ubGVuZ3RoKzEpLEduW2x0Pj4yXT0kdCwwfSxnOihaZSxsdCk9PnsoWmU9PnsoKFplLGx0KT0+e3Rocm93IGx0fSkoMCxuZXcgSW8oWmUpKX0pKFplKX0sYjpmdW5jdGlv'@;
put 'biBySXQoWmUpe3RyeXt2YXIgbHQ9WnMuZ2V0U3RyZWFtRnJvbUZEKFplKTtyZXR1cm4gWXQuY2xvc2UobHQpLDB9Y2F0Y2goTHQpe2lmKHR5cGVvZiBZdD4idSJ8fCJFcnJub0Vycm9yIiE9PUx0Lm5hbWUpdGhyb3cgTHQ7cmV0dXJuIEx0LmVycm5vfX0sZTpmdW5jdGlvbiBhSXQoWmUsbHQs'@;
put 'THQsJHQpe3RyeXt2YXIgY3I9KChaZSxsdCxMdCwkdCk9Pntmb3IodmFyIERuPTAsY3I9MDtjcjxMdDtjcisrKXt2YXIgUnI9R25bbHQ+PjJdLFhyPUduW2x0KzQ+PjJdO2x0Kz04O3ZhciBrYT1ZdC5yZWFkKFplLHRuLFJyLFhyLCR0KTtpZihrYTwwKXJldHVybi0xO2lmKERuKz1rYSxrYTxY'@;
put 'cilicmVhazt0eXBlb2YgJHQ8InUiJiYoJHQrPWthKX1yZXR1cm4gRG59KShacy5nZXRTdHJlYW1Gcm9tRkQoWmUpLGx0LEx0KTtyZXR1cm4gR25bJHQ+PjJdPWNyLDB9Y2F0Y2goUnIpe2lmKHR5cGVvZiBZdD4idSJ8fCJFcnJub0Vycm9yIiE9PVJyLm5hbWUpdGhyb3cgUnI7cmV0dXJuIFJy'@;
put 'LmVycm5vfX0sbjpmdW5jdGlvbiBvSXQoWmUsbHQsTHQsJHQsRG4pe3ZhciBjcj1aaChsdCxMdCk7dHJ5e2lmKGlzTmFOKGNyKSlyZXR1cm4gNjE7dmFyIFJyPVpzLmdldFN0cmVhbUZyb21GRChaZSk7cmV0dXJuIFl0Lmxsc2VlayhScixjciwkdCksYWE9W1JyLnBvc2l0aW9uPj4+MCwoWnI9'@;
put 'UnIucG9zaXRpb24sK01hdGguYWJzKFpyKT49MT9acj4wPytNYXRoLmZsb29yKFpyLzQyOTQ5NjcyOTYpPj4+MDp+fitNYXRoLmNlaWwoKFpyLSsofn5acj4+PjApKS80Mjk0OTY3Mjk2KT4+PjA6MCldLG1yW0RuPj4yXT1hYVswXSxtcltEbis0Pj4yXT1hYVsxXSxSci5nZXRkZW50cyYmMD09'@;
put 'PWNyJiYwPT09JHQmJihSci5nZXRkZW50cz1udWxsKSwwfWNhdGNoKFhyKXtpZih0eXBlb2YgWXQ+InUifHwiRXJybm9FcnJvciIhPT1Yci5uYW1lKXRocm93IFhyO3JldHVybiBYci5lcnJub319LGQ6ZnVuY3Rpb24gbEl0KFplLGx0LEx0LCR0KXt0cnl7dmFyIGNyPSgoWmUsbHQsTHQsJHQp'@;
put 'PT57Zm9yKHZhciBEbj0wLGNyPTA7Y3I8THQ7Y3IrKyl7dmFyIFJyPUduW2x0Pj4yXSxYcj1HbltsdCs0Pj4yXTtsdCs9ODt2YXIga2E9WXQud3JpdGUoWmUsdG4sUnIsWHIsJHQpO2lmKGthPDApcmV0dXJuLTE7aWYoRG4rPWthLGthPFhyKWJyZWFrO3R5cGVvZiAkdDwidSImJigkdCs9a2Ep'@;
put 'fXJldHVybiBEbn0pKFpzLmdldFN0cmVhbUZyb21GRChaZSksbHQsTHQpO3JldHVybiBHblskdD4+Ml09Y3IsMH1jYXRjaChScil7aWYodHlwZW9mIFl0PiJ1Inx8IkVycm5vRXJyb3IiIT09UnIubmFtZSl0aHJvdyBScjtyZXR1cm4gUnIuZXJybm99fX0sTGw9ZnVuY3Rpb24gTXIoKXthcigp'@;
put 'O3ZhciBMdD1mdW5jdGlvbiBOcigpe3JldHVybnthOmNJdH19KCk7cmV0dXJuICRuPz89ZnVuY3Rpb24gcHIoKXt2YXIgWmU9ImdyYXBodml6bGliLndhc20iO3JldHVybiB5bihaZSk/WmU6ZnVuY3Rpb24gYmUoWmUpe3JldHVybiIiK1plfShaZSl9KCksZnVuY3Rpb24gc3IoWmUsbHQsTHQs'@;
put 'JHQpe3JldHVybiBaZXx8ImZ1bmN0aW9uIiE9dHlwZW9mIFdlYkFzc2VtYmx5Lmluc3RhbnRpYXRlU3RyZWFtaW5nfHx5bihsdCl8fChaZT0+WmUuc3RhcnRzV2l0aCgiZmlsZTovLyIpKShsdCl8fCJmdW5jdGlvbiIhPXR5cGVvZiBmZXRjaD9abihsdCxMdCwkdCk6ZmV0Y2gobHQse2NyZWRl'@;
put 'bnRpYWxzOiJzYW1lLW9yaWdpbiJ9KS50aGVuKERuPT5XZWJBc3NlbWJseS5pbnN0YW50aWF0ZVN0cmVhbWluZyhEbixMdCkudGhlbigkdCxmdW5jdGlvbihScil7cmV0dXJuIHJ0KGB3YXNtIHN0cmVhbWluZyBjb21waWxlIGZhaWxlZDogJHtScn1gKSxydCgiZmFsbGluZyBiYWNrIHRvIEFy'@;
put 'cmF5QnVmZmVyIGluc3RhbnRpYXRpb24iKSxabihsdCxMdCwkdCl9KSl9KHB0LCRuLEx0LGZ1bmN0aW9uIGx0KCR0KXshZnVuY3Rpb24gWmUoJHQsRG4pe3JldHVybiBkdD0oTGw9JHQuZXhwb3J0cykuQixPbigpLGZ1bmN0aW9uIHZ0KFplKXtKbi51bnNoaWZ0KFplKX0oTGwuQyksSHIoKSxM'@;
put 'bH0oJHQuaW5zdGFuY2UpfSkuY2F0Y2goZikse319KCkseDdlPShkLl93ZWJpZGxfZnJlZT1aZT0+KGQuX3dlYmlkbF9mcmVlPUxsLkQpKFplKSxkLl9mcmVlPVplPT4oZC5fZnJlZT1MbC5FKShaZSksZC5fd2ViaWRsX21hbGxvYz1aZT0+KGQuX3dlYmlkbF9tYWxsb2M9TGwuRikoWmUpLGQu'@;
put 'X21hbGxvYz1aZT0+KGQuX21hbGxvYz1MbC5HKShaZSksZC5fZW1zY3JpcHRlbl9iaW5kX1ZvaWRQdHJfX19kZXN0cm95X19fMD1aZT0+KHg3ZT1kLl9lbXNjcmlwdGVuX2JpbmRfVm9pZFB0cl9fX2Rlc3Ryb3lfX18wPUxsLkgpKFplKSksRTdlPWQuX2Vtc2NyaXB0ZW5fYmluZF9HcmFwaHZp'@;
put 'el9HcmFwaHZpel8yPShaZSxsdCk9PihFN2U9ZC5fZW1zY3JpcHRlbl9iaW5kX0dyYXBodml6X0dyYXBodml6XzI9TGwuSSkoWmUsbHQpLFQ3ZT1kLl9lbXNjcmlwdGVuX2JpbmRfR3JhcGh2aXpfdmVyc2lvbl8wPSgpPT4oVDdlPWQuX2Vtc2NyaXB0ZW5fYmluZF9HcmFwaHZpel92ZXJzaW9u'@;
put 'XzA9TGwuSikoKSxBN2U9ZC5fZW1zY3JpcHRlbl9iaW5kX0dyYXBodml6X2xhc3RFcnJvcl8wPSgpPT4oQTdlPWQuX2Vtc2NyaXB0ZW5fYmluZF9HcmFwaHZpel9sYXN0RXJyb3JfMD1MbC5LKSgpLGs3ZT1kLl9lbXNjcmlwdGVuX2JpbmRfR3JhcGh2aXpfY3JlYXRlRmlsZV8yPShaZSxsdCxM'@;
put 'dCk9PihrN2U9ZC5fZW1zY3JpcHRlbl9iaW5kX0dyYXBodml6X2NyZWF0ZUZpbGVfMj1MbC5MKShaZSxsdCxMdCksRDdlPWQuX2Vtc2NyaXB0ZW5fYmluZF9HcmFwaHZpel9sYXlvdXRfMz0oWmUsbHQsTHQsJHQpPT4oRDdlPWQuX2Vtc2NyaXB0ZW5fYmluZF9HcmFwaHZpel9sYXlvdXRfMz1M'@;
put 'bC5NKShaZSxsdCxMdCwkdCksSTdlPWQuX2Vtc2NyaXB0ZW5fYmluZF9HcmFwaHZpel9hY3ljbGljXzM9KFplLGx0LEx0LCR0KT0+KEk3ZT1kLl9lbXNjcmlwdGVuX2JpbmRfR3JhcGh2aXpfYWN5Y2xpY18zPUxsLk4pKFplLGx0LEx0LCR0KSxSN2U9ZC5fZW1zY3JpcHRlbl9iaW5kX0dyYXBo'@;
put 'dml6X3RyZWRfMz0oWmUsbHQsTHQsJHQpPT4oUjdlPWQuX2Vtc2NyaXB0ZW5fYmluZF9HcmFwaHZpel90cmVkXzM9TGwuTykoWmUsbHQsTHQsJHQpLEw3ZT1kLl9lbXNjcmlwdGVuX2JpbmRfR3JhcGh2aXpfdW5mbGF0dGVuXzQ9KFplLGx0LEx0LCR0LERuKT0+KEw3ZT1kLl9lbXNjcmlwdGVu'@;
put 'X2JpbmRfR3JhcGh2aXpfdW5mbGF0dGVuXzQ9TGwuUCkoWmUsbHQsTHQsJHQsRG4pLE83ZT1kLl9lbXNjcmlwdGVuX2JpbmRfR3JhcGh2aXpfZ2V0X2xheW91dF9yZXN1bHRfMD1aZT0+KE83ZT1kLl9lbXNjcmlwdGVuX2JpbmRfR3JhcGh2aXpfZ2V0X2xheW91dF9yZXN1bHRfMD1MbC5RKSha'@;
put 'ZSksUDdlPWQuX2Vtc2NyaXB0ZW5fYmluZF9HcmFwaHZpel9zZXRfbGF5b3V0X3Jlc3VsdF8xPShaZSxsdCk9PihQN2U9ZC5fZW1zY3JpcHRlbl9iaW5kX0dyYXBodml6X3NldF9sYXlvdXRfcmVzdWx0XzE9TGwuUikoWmUsbHQpLEY3ZT1kLl9lbXNjcmlwdGVuX2JpbmRfR3JhcGh2aXpfZ2V0'@;
put 'X2FjeWNsaWNfb3V0RmlsZV8wPVplPT4oRjdlPWQuX2Vtc2NyaXB0ZW5fYmluZF9HcmFwaHZpel9nZXRfYWN5Y2xpY19vdXRGaWxlXzA9TGwuUykoWmUpLEg3ZT1kLl9lbXNjcmlwdGVuX2JpbmRfR3JhcGh2aXpfc2V0X2FjeWNsaWNfb3V0RmlsZV8xPShaZSxsdCk9PihIN2U9ZC5fZW1zY3Jp'@;
put 'cHRlbl9iaW5kX0dyYXBodml6X3NldF9hY3ljbGljX291dEZpbGVfMT1MbC5UKShaZSxsdCksTjdlPWQuX2Vtc2NyaXB0ZW5fYmluZF9HcmFwaHZpel9nZXRfYWN5Y2xpY19udW1fcmV2XzA9WmU9PihON2U9ZC5fZW1zY3JpcHRlbl9iaW5kX0dyYXBodml6X2dldF9hY3ljbGljX251bV9yZXZf'@;
put 'MD1MbC5VKShaZSksVjdlPWQuX2Vtc2NyaXB0ZW5fYmluZF9HcmFwaHZpel9zZXRfYWN5Y2xpY19udW1fcmV2XzE9KFplLGx0KT0+KFY3ZT1kLl9lbXNjcmlwdGVuX2JpbmRfR3JhcGh2aXpfc2V0X2FjeWNsaWNfbnVtX3Jldl8xPUxsLlYpKFplLGx0KSxCN2U9ZC5fZW1zY3JpcHRlbl9iaW5k'@;
put 'X0dyYXBodml6X2dldF90cmVkX291dF8wPVplPT4oQjdlPWQuX2Vtc2NyaXB0ZW5fYmluZF9HcmFwaHZpel9nZXRfdHJlZF9vdXRfMD1MbC5XKShaZSksajdlPWQuX2Vtc2NyaXB0ZW5fYmluZF9HcmFwaHZpel9zZXRfdHJlZF9vdXRfMT0oWmUsbHQpPT4oajdlPWQuX2Vtc2NyaXB0ZW5fYmlu'@;
put 'ZF9HcmFwaHZpel9zZXRfdHJlZF9vdXRfMT1MbC5YKShaZSxsdCksejdlPWQuX2Vtc2NyaXB0ZW5fYmluZF9HcmFwaHZpel9nZXRfdHJlZF9lcnJfMD1aZT0+KHo3ZT1kLl9lbXNjcmlwdGVuX2JpbmRfR3JhcGh2aXpfZ2V0X3RyZWRfZXJyXzA9TGwuWSkoWmUpLFU3ZT1kLl9lbXNjcmlwdGVu'@;
put 'X2JpbmRfR3JhcGh2aXpfc2V0X3RyZWRfZXJyXzE9KFplLGx0KT0+KFU3ZT1kLl9lbXNjcmlwdGVuX2JpbmRfR3JhcGh2aXpfc2V0X3RyZWRfZXJyXzE9TGwuWikoWmUsbHQpLFo3ZT1kLl9lbXNjcmlwdGVuX2JpbmRfR3JhcGh2aXpfX19kZXN0cm95X19fMD1aZT0+KFo3ZT1kLl9lbXNjcmlw'@;
put 'dGVuX2JpbmRfR3JhcGh2aXpfX19kZXN0cm95X19fMD1MbC5fKShaZSksVzdlPShaZSxsdCk9PihXN2U9TGwuYWEpKFplLGx0KTtmdW5jdGlvbiBZN2UoKXtOdD4wfHwoZnVuY3Rpb24gd2koKXtabyh6cil9KCksTnQ+MCl8fGZ1bmN0aW9uIFplKCl7UU58fChRTj0hMCxkLmNhbGxlZFJ1bj0h'@;
put 'MCwhSnQmJihmdW5jdGlvbiBlYSgpeyFkLm5vRlNJbml0JiYhWXQuaW5pdGlhbGl6ZWQmJll0LmluaXQoKSxZdC5pZ25vcmVQZXJtaXNzaW9ucz0hMSxkNC5pbml0KCksWm8oSm4pfSgpLGgoZCksZnVuY3Rpb24gZmEoKXtabyhJcil9KCkpKX0oKX1mdW5jdGlvbiBzZigpe31mdW5jdGlvbiBl'@;
put 'VihaZSl7cmV0dXJuKFplfHxzZikuX19jYWNoZV9ffWZ1bmN0aW9uIEd0ZShaZSxsdCl7dmFyIEx0PWVWKGx0KSwkdD1MdFtaZV07cmV0dXJuICR0fHwoKCR0PU9iamVjdC5jcmVhdGUoKGx0fHxzZikucHJvdG90eXBlKSkucHRyPVplLEx0W1plXT0kdCl9ZC5VVEY4VG9TdHJpbmc9djAsSG49'@;
put 'ZnVuY3Rpb24gWmUoKXtRTnx8WTdlKCksUU58fChIbj1aZSl9LFk3ZSgpLChzZi5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShzZi5wcm90b3R5cGUpKS5jb25zdHJ1Y3Rvcj1zZixzZi5wcm90b3R5cGUuX19jbGFzc19fPXNmLHNmLl9fY2FjaGVfXz17fSxkLldyYXBwZXJPYmplY3Q9c2YsZC5n'@;
put 'ZXRDYWNoZT1lVixkLndyYXBQb2ludGVyPUd0ZSxkLmNhc3RPYmplY3Q9ZnVuY3Rpb24gZ0l0KFplLGx0KXtyZXR1cm4gR3RlKFplLnB0cixsdCl9LGQuTlVMTD1HdGUoMCksZC5kZXN0cm95PWZ1bmN0aW9uIG1JdChaZSl7aWYoIVplLl9fZGVzdHJveV9fKXRocm93IkVycm9yOiBDYW5ub3Qg'@;
put 'ZGVzdHJveSBvYmplY3QuIChEaWQgeW91IGNyZWF0ZSBpdCB5b3Vyc2VsZj8pIjtaZS5fX2Rlc3Ryb3lfXygpLGRlbGV0ZSBlVihaZS5fX2NsYXNzX18pW1plLnB0cl19LGQuY29tcGFyZT1mdW5jdGlvbiB2SXQoWmUsbHQpe3JldHVybiBaZS5wdHI9PT1sdC5wdHJ9LGQuZ2V0UG9pbnRlcj1m'@;
put 'dW5jdGlvbiBiSXQoWmUpe3JldHVybiBaZS5wdHJ9LGQuZ2V0Q2xhc3M9ZnVuY3Rpb24geUl0KFplKXtyZXR1cm4gWmUuX19jbGFzc19ffTt2YXIgV3M9e2J1ZmZlcjowLHNpemU6MCxwb3M6MCx0ZW1wczpbXSxuZWVkZWQ6MCxwcmVwYXJlKCl7aWYoV3MubmVlZGVkKXtmb3IodmFyIFplPTA7'@;
put 'WmU8V3MudGVtcHMubGVuZ3RoO1plKyspZC5fd2ViaWRsX2ZyZWUoV3MudGVtcHNbWmVdKTtXcy50ZW1wcy5sZW5ndGg9MCxkLl93ZWJpZGxfZnJlZShXcy5idWZmZXIpLFdzLmJ1ZmZlcj0wLFdzLnNpemUrPVdzLm5lZWRlZCxXcy5uZWVkZWQ9MH1Xcy5idWZmZXJ8fChXcy5zaXplKz0xMjgs'@;
put 'V3MuYnVmZmVyPWQuX3dlYmlkbF9tYWxsb2MoV3Muc2l6ZSksQ24oV3MuYnVmZmVyKSksV3MucG9zPTB9LGFsbG9jKFplLGx0KXtDbihXcy5idWZmZXIpO3ZhciBEbiwkdD1aZS5sZW5ndGgqbHQuQllURVNfUEVSX0VMRU1FTlQ7cmV0dXJuICR0PVZBKCR0LDgpLFdzLnBvcyskdD49V3Muc2l6'@;
put 'ZT8oQ24oJHQ+MCksV3MubmVlZGVkKz0kdCxEbj1kLl93ZWJpZGxfbWFsbG9jKCR0KSxXcy50ZW1wcy5wdXNoKERuKSk6KERuPVdzLmJ1ZmZlcitXcy5wb3MsV3MucG9zKz0kdCksRG59LGNvcHkoWmUsbHQsTHQpe0x0Lz1sdC5CWVRFU19QRVJfRUxFTUVOVDtmb3IodmFyICR0PTA7JHQ8WmUu'@;
put 'bGVuZ3RoOyR0KyspbHRbTHQrJHRdPVplWyR0XX19O2Z1bmN0aW9uIGxmKFplKXtpZigic3RyaW5nIj09dHlwZW9mIFplKXt2YXIgbHQ9ZnVuY3Rpb24geDMoWmUsbHQsTHQpe3ZhciAkdD1MdD4wP0x0OmVzKFplKSsxLERuPW5ldyBBcnJheSgkdCksY3I9RTEoWmUsRG4sMCxEbi5sZW5ndGgp'@;
put 'O3JldHVybiBsdCYmKERuLmxlbmd0aD1jciksRG59KFplKSxMdD1Xcy5hbGxvYyhsdCx0bik7cmV0dXJuIFdzLmNvcHkobHQsdG4sTHQpLEx0fXJldHVybiBaZX1mdW5jdGlvbiB0NSgpe3Rocm93ImNhbm5vdCBjb25zdHJ1Y3QgYSBWb2lkUHRyLCBubyBjb25zdHJ1Y3RvciBpbiBJREwifWZ1'@;
put 'bmN0aW9uIHJvKFplLGx0KXtaZSYmIm9iamVjdCI9PXR5cGVvZiBaZSYmKFplPVplLnB0ciksbHQmJiJvYmplY3QiPT10eXBlb2YgbHQmJihsdD1sdC5wdHIpLHRoaXMucHRyPUU3ZShaZSxsdCksZVYocm8pW3RoaXMucHRyXT10aGlzfXJldHVybih0NS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0'@;
put 'ZShzZi5wcm90b3R5cGUpKS5jb25zdHJ1Y3Rvcj10NSx0NS5wcm90b3R5cGUuX19jbGFzc19fPXQ1LHQ1Ll9fY2FjaGVfXz17fSxkLlZvaWRQdHI9dDUsdDUucHJvdG90eXBlLl9fZGVzdHJveV9fPXQ1LnByb3RvdHlwZS5fX2Rlc3Ryb3lfXz1mdW5jdGlvbigpe3g3ZSh0aGlzLnB0cil9LChy'@;
put 'by5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShzZi5wcm90b3R5cGUpKS5jb25zdHJ1Y3Rvcj1ybyxyby5wcm90b3R5cGUuX19jbGFzc19fPXJvLHJvLl9fY2FjaGVfXz17fSxkLkdyYXBodml6PXJvLHJvLnByb3RvdHlwZS52ZXJzaW9uPXJvLnByb3RvdHlwZS52ZXJzaW9uPWZ1bmN0aW9uKCl7'@;
put 'cmV0dXJuIHYwKFQ3ZSgpKX0scm8ucHJvdG90eXBlLmxhc3RFcnJvcj1yby5wcm90b3R5cGUubGFzdEVycm9yPWZ1bmN0aW9uKCl7cmV0dXJuIHYwKEE3ZSgpKX0scm8ucHJvdG90eXBlLmNyZWF0ZUZpbGU9cm8ucHJvdG90eXBlLmNyZWF0ZUZpbGU9ZnVuY3Rpb24oWmUsbHQpe3ZhciBMdD10'@;
put 'aGlzLnB0cjtXcy5wcmVwYXJlKCksWmU9WmUmJiJvYmplY3QiPT10eXBlb2YgWmU/WmUucHRyOmxmKFplKSxsdD1sdCYmIm9iamVjdCI9PXR5cGVvZiBsdD9sdC5wdHI6bGYobHQpLGs3ZShMdCxaZSxsdCl9LHJvLnByb3RvdHlwZS5sYXlvdXQ9cm8ucHJvdG90eXBlLmxheW91dD1mdW5jdGlv'@;
put 'bihaZSxsdCxMdCl7dmFyICR0PXRoaXMucHRyO3JldHVybiBXcy5wcmVwYXJlKCksWmU9WmUmJiJvYmplY3QiPT10eXBlb2YgWmU/WmUucHRyOmxmKFplKSxsdD1sdCYmIm9iamVjdCI9PXR5cGVvZiBsdD9sdC5wdHI6bGYobHQpLEx0PUx0JiYib2JqZWN0Ij09dHlwZW9mIEx0P0x0LnB0cjps'@;
put 'ZihMdCksdjAoRDdlKCR0LFplLGx0LEx0KSl9LHJvLnByb3RvdHlwZS5hY3ljbGljPXJvLnByb3RvdHlwZS5hY3ljbGljPWZ1bmN0aW9uKFplLGx0LEx0KXt2YXIgJHQ9dGhpcy5wdHI7cmV0dXJuIFdzLnByZXBhcmUoKSxaZT1aZSYmIm9iamVjdCI9PXR5cGVvZiBaZT9aZS5wdHI6bGYoWmUp'@;
put 'LGx0JiYib2JqZWN0Ij09dHlwZW9mIGx0JiYobHQ9bHQucHRyKSxMdCYmIm9iamVjdCI9PXR5cGVvZiBMdCYmKEx0PUx0LnB0ciksISFJN2UoJHQsWmUsbHQsTHQpfSxyby5wcm90b3R5cGUudHJlZD1yby5wcm90b3R5cGUudHJlZD1mdW5jdGlvbihaZSxsdCxMdCl7dmFyICR0PXRoaXMucHRy'@;
put 'O1dzLnByZXBhcmUoKSxaZT1aZSYmIm9iamVjdCI9PXR5cGVvZiBaZT9aZS5wdHI6bGYoWmUpLGx0JiYib2JqZWN0Ij09dHlwZW9mIGx0JiYobHQ9bHQucHRyKSxMdCYmIm9iamVjdCI9PXR5cGVvZiBMdCYmKEx0PUx0LnB0ciksUjdlKCR0LFplLGx0LEx0KX0scm8ucHJvdG90eXBlLnVuZmxh'@;
put 'dHRlbj1yby5wcm90b3R5cGUudW5mbGF0dGVuPWZ1bmN0aW9uKFplLGx0LEx0LCR0KXt2YXIgRG49dGhpcy5wdHI7cmV0dXJuIFdzLnByZXBhcmUoKSxaZT1aZSYmIm9iamVjdCI9PXR5cGVvZiBaZT9aZS5wdHI6bGYoWmUpLGx0JiYib2JqZWN0Ij09dHlwZW9mIGx0JiYobHQ9bHQucHRyKSxM'@;
put 'dCYmIm9iamVjdCI9PXR5cGVvZiBMdCYmKEx0PUx0LnB0ciksJHQmJiJvYmplY3QiPT10eXBlb2YgJHQmJigkdD0kdC5wdHIpLHYwKEw3ZShEbixaZSxsdCxMdCwkdCkpfSxyby5wcm90b3R5cGUuZ2V0X2xheW91dF9yZXN1bHQ9cm8ucHJvdG90eXBlLmdldF9sYXlvdXRfcmVzdWx0PWZ1bmN0'@;
put 'aW9uKCl7cmV0dXJuIHYwKE83ZSh0aGlzLnB0cikpfSxyby5wcm90b3R5cGUuc2V0X2xheW91dF9yZXN1bHQ9cm8ucHJvdG90eXBlLnNldF9sYXlvdXRfcmVzdWx0PWZ1bmN0aW9uKFplKXt2YXIgbHQ9dGhpcy5wdHI7V3MucHJlcGFyZSgpLFplPVplJiYib2JqZWN0Ij09dHlwZW9mIFplP1pl'@;
put 'LnB0cjpsZihaZSksUDdlKGx0LFplKX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KHJvLnByb3RvdHlwZSwibGF5b3V0X3Jlc3VsdCIse2dldDpyby5wcm90b3R5cGUuZ2V0X2xheW91dF9yZXN1bHQsc2V0OnJvLnByb3RvdHlwZS5zZXRfbGF5b3V0X3Jlc3VsdH0pLHJvLnByb3RvdHlwZS5nZXRf'@;
put 'YWN5Y2xpY19vdXRGaWxlPXJvLnByb3RvdHlwZS5nZXRfYWN5Y2xpY19vdXRGaWxlPWZ1bmN0aW9uKCl7cmV0dXJuIHYwKEY3ZSh0aGlzLnB0cikpfSxyby5wcm90b3R5cGUuc2V0X2FjeWNsaWNfb3V0RmlsZT1yby5wcm90b3R5cGUuc2V0X2FjeWNsaWNfb3V0RmlsZT1mdW5jdGlvbihaZSl7'@;
put 'dmFyIGx0PXRoaXMucHRyO1dzLnByZXBhcmUoKSxaZT1aZSYmIm9iamVjdCI9PXR5cGVvZiBaZT9aZS5wdHI6bGYoWmUpLEg3ZShsdCxaZSl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShyby5wcm90b3R5cGUsImFjeWNsaWNfb3V0RmlsZSIse2dldDpyby5wcm90b3R5cGUuZ2V0X2FjeWNsaWNf'@;
put 'b3V0RmlsZSxzZXQ6cm8ucHJvdG90eXBlLnNldF9hY3ljbGljX291dEZpbGV9KSxyby5wcm90b3R5cGUuZ2V0X2FjeWNsaWNfbnVtX3Jldj1yby5wcm90b3R5cGUuZ2V0X2FjeWNsaWNfbnVtX3Jldj1mdW5jdGlvbigpe3JldHVybiBON2UodGhpcy5wdHIpfSxyby5wcm90b3R5cGUuc2V0X2Fj'@;
put 'eWNsaWNfbnVtX3Jldj1yby5wcm90b3R5cGUuc2V0X2FjeWNsaWNfbnVtX3Jldj1mdW5jdGlvbihaZSl7WmUmJiJvYmplY3QiPT10eXBlb2YgWmUmJihaZT1aZS5wdHIpLFY3ZSh0aGlzLnB0cixaZSl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShyby5wcm90b3R5cGUsImFjeWNsaWNfbnVtX3Jl'@;
put 'diIse2dldDpyby5wcm90b3R5cGUuZ2V0X2FjeWNsaWNfbnVtX3JldixzZXQ6cm8ucHJvdG90eXBlLnNldF9hY3ljbGljX251bV9yZXZ9KSxyby5wcm90b3R5cGUuZ2V0X3RyZWRfb3V0PXJvLnByb3RvdHlwZS5nZXRfdHJlZF9vdXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdjAoQjdlKHRoaXMucHRy'@;
put 'KSl9LHJvLnByb3RvdHlwZS5zZXRfdHJlZF9vdXQ9cm8ucHJvdG90eXBlLnNldF90cmVkX291dD1mdW5jdGlvbihaZSl7dmFyIGx0PXRoaXMucHRyO1dzLnByZXBhcmUoKSxaZT1aZSYmIm9iamVjdCI9PXR5cGVvZiBaZT9aZS5wdHI6bGYoWmUpLGo3ZShsdCxaZSl9LE9iamVjdC5kZWZpbmVQ'@;
put 'cm9wZXJ0eShyby5wcm90b3R5cGUsInRyZWRfb3V0Iix7Z2V0OnJvLnByb3RvdHlwZS5nZXRfdHJlZF9vdXQsc2V0OnJvLnByb3RvdHlwZS5zZXRfdHJlZF9vdXR9KSxyby5wcm90b3R5cGUuZ2V0X3RyZWRfZXJyPXJvLnByb3RvdHlwZS5nZXRfdHJlZF9lcnI9ZnVuY3Rpb24oKXtyZXR1cm4g'@;
put 'djAoejdlKHRoaXMucHRyKSl9LHJvLnByb3RvdHlwZS5zZXRfdHJlZF9lcnI9cm8ucHJvdG90eXBlLnNldF90cmVkX2Vycj1mdW5jdGlvbihaZSl7dmFyIGx0PXRoaXMucHRyO1dzLnByZXBhcmUoKSxaZT1aZSYmIm9iamVjdCI9PXR5cGVvZiBaZT9aZS5wdHI6bGYoWmUpLFU3ZShsdCxaZSl9'@;
put 'LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShyby5wcm90b3R5cGUsInRyZWRfZXJyIix7Z2V0OnJvLnByb3RvdHlwZS5nZXRfdHJlZF9lcnIsc2V0OnJvLnByb3RvdHlwZS5zZXRfdHJlZF9lcnJ9KSxyby5wcm90b3R5cGUuX19kZXN0cm95X189cm8ucHJvdG90eXBlLl9fZGVzdHJveV9fPWZ1bmN0'@;
put 'aW9uKCl7WjdlKHRoaXMucHRyKX0sdn0pO2Z1bmN0aW9uIFp4dCgpe3JldHVybiBGdGV8fChGdGU9ZnVuY3Rpb24gTnh0KGMsbCl7Zm9yKHZhciBhPVtdLGQ9KyFsLGg9MCxmPTA7Yy5sZW5ndGg7KXt2YXIgdj1BeHQoYyxkfHxsKTtpZigib2JqZWN0Ij09dHlwZW9mIHYpe2ZvcihkPyhsPW51'@;
put 'bGwsdi53Lmxlbmd0aD09di51JiYoYS5wdXNoKGw9di53KSxmKz12LnUpKTooYS5wdXNoKGwpLHYuZT0wKTshdi5sOyl7dmFyIE09Rnh0KGMsdixsKTtNfHxlMCg1KSxsP3YuZT12Lnk6KGEucHVzaChNKSxmKz1NLmxlbmd0aCx4eHQodi53LDAsTS5sZW5ndGgpLHYudy5zZXQoTSx2LncubGVu'@;
put 'Z3RoLU0ubGVuZ3RoKSl9aD12LmIrNCp2LmN9ZWxzZSBoPXY7Yz1jLnN1YmFycmF5KGgpfXJldHVybiBmdW5jdGlvbihjLGwpe2lmKDE9PWMubGVuZ3RoKXJldHVybiBjWzBdO2Zvcih2YXIgYT1uZXcgSXUobCksZD0wLGg9MDtkPGMubGVuZ3RoOysrZCl7dmFyIGY9Y1tkXTthLnNldChmLGgp'@;
put 'LGgrPWYubGVuZ3RofXJldHVybiBhfShhLGYpfShmdW5jdGlvbiB6eHQoYyl7bGV0IGw9Yy5sZW5ndGgsYT1bXSxkPTAsaD0wLGY9LTE7Zm9yKGxldCB2PTA7djxsO3YrKyl7bGV0IE09J0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2'@;
put 'Nzg5ISMkJSYoKSorLC4vOjs8PT4/QFtdXl9ge3x9fiInLmluZGV4T2YoY1t2XSk7aWYoLTEhPT1NKWlmKGY8MClmPU07ZWxzZXtmKz05MSpNLGR8PWY8PGgsaCs9KDgxOTEmZik+ODg/MTM6MTQ7ZG97YS5wdXNoKDI1NSZkKSxkPj49OCxoLT04fXdoaWxlKGg+Nyk7Zj0tMX19cmV0dXJuIGY+'@;
put 'LTEmJmEucHVzaCgyNTUmKGR8Zjw8aCkpLG5ldyBVaW50OEFycmF5KGEpfSgndjcjYVNYVW5gREBRPCx6M15YJmtVMmh0ejh7L3BZRG1uP3skSmp6MnJfP0psXis2bkZvPXhJPCZCOUZCVit3YjtYYXxxb1J6Z2JlS3NCU15+XXh6dj49fC5xPyhNPDhHRDVHTCNLe3NbUzQhXkM0THlyTmFMS29S'@;
put 'a0VKa0xMbHtmMFY5MDw7XlFwdWd5NUElKSYpWjpzZzpoLn1gOHV1VFtXQkEoeSl1eXxCVUglOCFFKmBmMXdCX3hbJkA1cUc1JWImfmplJjdEYkokTGx6VUM+V14vO2Zoezx8R0J5Iil+bCVzXzFhOG0+ZDBYUEFzVDlMYlcoaWpCZU5XV1tAXm0kKDp2fW97UWsudGh+PTsoMWE4XjFtfU1+ezw1'@;
put 'P1NQKF4pWzJMc2BNYHU5KXlafWIvSkR+NkZMdFpzbV5GbHxrSFgsNEZVenEqT2F6PUJfNnM3KVNkNExdTGN8bHh6dmhoPzZ0RDglTl1AJj84aU88VVBzWzVKcSNaUmdafWszRHFIPSUyUUR7RHRmfW93RUo2SWRyWUc+VnVFJE1Wd10sJn5PLHFMaUImNW0/IVlHZ2kqaVcrIlFQeSQ/VVprY2E+'@;
put 'MGdEbyE3R3x+ZzVkS3xbMy97NX5vJDB2JUpsMTgyQXF+PXplOH5FekhlX1tRRGNZMX0oZSxLSHUxVTspWFhXQH0xJmd0LH5gMnAvOn1YZFluIU5IZl1pNzZeWCNRcXlvZ3A/JTckWHN5LFomel8jMmc7JSwlbjleeXJOX3Z5KCsxU3FgZGh9XSZsYWtoTH1yJngzNSpic3pbW3ddd343fFE1bHIr'@;
put 'cnZreWk1VHw9WiFLOX1IPD1yNlNfRjhqTlMpfT1SX1NfL09nfjovajxmOEQ/Ql9tfSI0M3RoKmchVSZKVzMkUWRAPXVbKm1YTmNwezt1YyZKXU9QUSEwJGZXOCljSlE2ZTprNUAiIyQ0czY8UDZOYjAwQXEkb2NbTSZDakhDX2I3c2FgW2hGLyR3NVd2RzN0SCguYihLZUhSd1h3Lyp1Pj1dciNw'@;
put 'TFc8N19sUVRuKDE+aG9BZXpieXU+fHo/djJKcj1FJWMiZkA4Ll1NKllVIk9HfjFjYjBAODMqWzAxOXclO11tb3RpPnVEcz9wPUUmY0hRd08yP3kmcVkjZCNjfnFuRFJ3T0BhO155U3VCL19qNUlIWnhhJGlFcygwam08WXNFSG0wXWlXe2MyckEuKHkpc0BOX2M6Z05qXUprMyZaKSNfWyNOXkVa'@;
put 'Yk8jImBCfDd4S2Y+XjZUeEx3N0QvXnlqcllVN2JpZzJzVEBMQEFbbWFFcztNLGI/bTZ2VTFSd3hvei5afEFhK2B+cVRdQC87bl55KmQyI3BDSzkxZ1hOR1BtIm5ZQVYhantKeTVhfHxwdm9fRGo3UXA0MHwrTmZRVlo3RHh+P3dsUXAhQ1VOa2xwRTthWjpvY0BNISQ7Lz9hUyhoMm9uQEU0Y0hR'@;
put 'SkQ4c1FRK0NxNSxOODpJZnJ7T24+Nl4lSm47VTM8Ly48bTQmWE9XPTdPU1ssSlU1N1IoLyZiMDddWzJBRlp4YUhwMzVheDtJZXNUQEYyc1NpW2hHJjp+e0lwc0xZRS56NlR8RTV4YT9Ge09XUSo4XkQlJTJkXWhYQjZFJm1VNX1pa01fK3ZmanoudjB3Vzd+YHBXX20kSVMifD1UIz4vWlZ+QjhG'@;
put 'TDw2QE5QfS5nVzErTDw2KmNYZ1Nic2NFSlY3eG9sU0U2JGMjeChwPyRITE4pQnxuNmFoOVBfaisqJSokb10zWCF2RUxdXSRYX3c2ZDZJbCFkQFM2M0gmey9kRjMzZT85KmR4SVc3aGRVRDheXnpddCYzSj9jMDYiYj9tQyhDKDVzWVVuInZ9UTo6bnxhIXRsVjwzQE5Te10jQjR5Pnk1Xlt+Ll55'@;
put 'SGo5KmB7QzhKTCsjcm4rdkt9L2Y/Uz5AJjw0QDFPQldIV25nLnR9Tzd3cDBUOUw1PFAxOHdbMm06PThdXyE7LytsL3RFWmloOCFWVDMqQEMzSFBQfkhpWi9xXXtwNGU7S28/QHVaPTN5I2V6cz1wWk1TQzVbQn4oYDdeJGpAblRnZWozOTNoPkN5YyVWL1F5JW5ESlFhQjN7KTB2QzM7I0traS5B'@;
put 'Nm44Rz9XIyhsJHwiPGF+WH5KWG1PNjl5TDt0X1l0P1d3WVp4YTk9S3c4OSJgNHlBezs9YyZnLm1AVGVzR1NubSJnZDpZNXg5fEI1Qk1hWVg1NUxgSEFELmZTMmBrY3YlbHMjX2tddE1Re3NzWSUifndTOnR8WzhTTn5ITjhYNTc5fHF+OGVsbCJWPVd7OytoLEQuNGJWZ0B7aVVyLlg5Q2g7SW57'@;
put 'Ons7SV4uYVpHTFNaOXBUZ1N8KlVTfkVLUTkpX19MXnkrW0EvaDpSVVE1TkxFeXFeMWNtZFJTOn1WL0M4RmoxIXQ+Vkt7eXxeTl5dX05HKXdJdklDT287O2w5WClbJmR+bnBERmY9T3kuQ2Y5YikiPTxnO21uOV9rQ25PfVo5YVlJcjY5dWg0dV9TVDpoN2Q3bj5ObTU2QGYuQmQhPllaPH1rS0Ax'@;
put 'PF9hPDVIOGJrN2Qjb0ozYnAqOUxlL1NdI24kKFZuZzMmTFtNcWNYVlRzN0RRR3BTUDhJJCUyUkw9UFNaUiRIemUldz8sYEV8e3xsIzpPJX17Q3NNekFwX3ojbmp7KnNia0hNZEt+a204QUw4N0s5I2hNXnBaIitgeVVhSXs7L2hHRShVO2VbdWFEVm46fnF7K2Q4RVckZVhVUTVvMjVYcEchfEgy'@;
put 'UHAzOCMsTGQudGpwWE08OnxjKTAsL3BHX2Q2TUNTOn0oSzh7ZFlje3spOVRIVDtkVis4X2pMNn5hSUQoZDtXZWhyZDtXZXEkKkFdOiRIIm88Ymw7c31qZ0gvZDhdZXhpU1VjZHoje0BWZWlfYmRvRGY+eVpsWjFsY34zVj44YX5oKXsmJlZmUW5dW3YpS0d8NEkkRylgendBJEhnIW8vTyNWS1g2'@;
put 'cmZ0TEUwOF1Fd21UNlZyXTIjNXQ7R1lNPWFYPS8kSGA3JTJSIXM5WX5mMilNVmdeXz8mJUNnKjxuUlplSjIhL11IVVp2SVt5b25Rci5VQz58TEBDVFVAfGBMKjdAYnU/XipjfmczUlVXalRRcldGNygzJXNePnglY0ZnPiZDZzc5aDZlbCVjaVRCZWFGcSpbMEJ+VitEWzNyaCxfdnllNX58P25a'@;
put 'W0dfeCQ+TSVuR1dUQjB7OEMvLDpzSVJLNilSWXwhSUFdVEZnPy9tWlg0SW1aOnVTVi5vVzMwPEZMPSRkQkxfTGVwV21COjp4ZXg1VE5lRjk5NnVEIys4VTQ1fEx3W0lySVo+VHklVTtdYHUlKEorZTxkWyNreTVgRD5USFN7cHZMcnhySHB8SVY3O1RBbltMS2ZyRWE5XmV5UGRdTTk+ajpxMyxI'@;
put 'bDRtNzI5SXFhQjBXLmQ4X216IVtLMT5kISg9c2V2OmAqdnlHfSttNz16bGE4eDclMDVUPWtdJkpLNjIzIkpzL1JnMi9bdndxWW4yamZ+PnllbHlKZi8pRDhbM1tlXWViPlNtK0ZxVUk8ZCJiO0c4RDh4fll3VHZRWkRZbzUrSVZxS3NRVn5IUn06amxTaF9MW2JMNkhNOXdseU5GJVJzLHMmLDQr'@;
put 'RihBRkcldH1qWk9wI3ZRWl9YazZkUGIlcm0iemgzM2pBeCNZSn1wLGw4Kkt5ZnFrVj1yOTlMVzchI2ElfVBQPSVjbm0zN1RUL2R+OGwpd28yXWVdUntsNV9KbTwqUD5XbSlhKiY3VH1ZdyVsfm9uUXk7amhfMjJET2I+RyU1Ikk4NVMweT1la3BVLz02V10mRkZ5aT45eHIqeTZ2L1NbXU1dY3BL'@;
put 'el9dSEx0WSZoZiQrR3gpZ34qZzkmNHJTbXVaSFB8PDQ1ZndRQHEpfWB1TTlxWWR8Qz54VXsiZzM9bDBbUCN+Mk1KdU9mSnUySCpURmd5cj5dS18rdlp1MDorbEJXSzV1WGJYM1N8YX17bF1DUSZvIU13flIzWmE6KlsqemZfYTg1QTlacyFDVUAyTn54eS41YGR6aTdVWzpPPWk7Q3ByRlNaREJS'@;
put 'eiNdODYsRkxdJEUrRFcxKz50ejtGWTc5LmwkRXBkKzUlPChwa0RNZExzRFFkJFJmbl9dbVR+eSZKb3d6UmZwVDJXSzEvIyx9KG5Taj5YJDJVRH1OUDE2VmApNCtnNiU8eS40dXNkN29XIWEpJUo4JThSTlklXjRqTUtgYmRAQC9Rb0hdUURLcSFhQHRIWjxaa11ZdmM0czZxaV0/OmMlOm14fEN7'@;
put 'cClKZEZXPVVLSW98PHJPaWF0fT9iSiQ6Y1NiZjdYS3NnN3sofnM/SkRzY2YwOztAcWxyJXMuWn0kLyhoV0NALlRaWWlrO1V+KCsqOHNEUV1seXpsNyYoSltTZW0oZ3RvXjErRDF3dHFGeGxEOHMoezhWYXhyNU9iN3hqUmNhbEFLO3t3b0hQaH0uI0s4dEttOWY5dDM/WVAqVVRwZ11ben5JJmEp'@;
put 'ZSh0S0deRl9gKmo3Mj4/T102Kl4veWdbZTxRIXxwV2oheEYlVnVwJTFzIyw/NW03ZSt5cXtpYFNEOXV8YGY+M1tQVTpLfk1qRHRSX295M29WdkBwfVB2NVZYRT4xfWBrKEt7Klc9eXJCfV5ZQmQ2NU5sbH1gay5mTT1LeFlaSnl5d1ckcm1RZCU6LFA0OVglPCk/R0t7TSMoInY9UFgmK2F+fSRe'@;
put 'eSYmeTNBJXsuJEpnYEdKYzJFcWRyYCtJSmJaODJ7WltUQT45X1orYjoqLkMyPHZ9WjxdJndaKyJhMn5FK19eWnZSWmpNMVNyQig1N1RTXy5kfiFDMTdePjZwRDN9O0J9eEYsRD9reE1qaWNaTmZkKG5wdVFHY31nX3ZtP1Rwej09c2Nxb0oqMm1rWGsxVDFMKj5sWmh9aSM6Q3h5JjNvSDR2eHw8'@;
put 'SmUpYi9kITptVjNdckB9Tl43QngoYkZvOFZtPGdPS1E0OXgzXTNqKVN+OU9HdCZ7SUpjJj8qVj1nPilgY1gvQTkjUTklWlM5MX0xJWVqQ2VfYmhWZltub3RpTjVCOjllW1BTWk9kbi49akxrIj9WTDVjRF82VjlPazBgTmYsSUZaYWZHJHA8Y0E4UEUyJV9bUUR6VlhdOj19Tlg3cDRgUGpgWHl0'@;
put 'WTA+d2x5PSM+VWY/UzZNPj9QZypOMT4pTnBhWFk6JChWRldMZG9bNSxdaFIuY0giJTBCUkU0TDxvJmk9JjRMN3JzVn5bci5sfURiVSw4PXRlNlFoaVprKnQrWT1AeTg3YjR6Ki92YWdda1QkWWQkLF46IigwLC9FRksjbSImLDYpKSxGZ1B2fnd3JjkrOG4weWZ3PmF1WUpjX1tSdypsXV46Y0gk'@;
put 'Zjc0PTRJSTNrKHNWMnFWPTZSL3hBT2csaVcuMlZrSmo9bU1eS3wlRiVoYkBrZ0pxfWxab0M2ckY5bSN7ND0wMFQxVndULmQ4RX1uSjU1RCQ2L0hkVDA9I24uR3tbOF1+bSQvOjJAaDJHTCgmfiRmZUImO1RdT3AybT9mMX17KUtDKG1pQGZnc2FmOTpaOkh+LEddOCZWc2lESSw2IXlUOXJGI1Mh'@;
put 'Oi9tWngmLmlAbmVWLmF+KEt9Pj9kMXI3bDxedCYsbk1KeTVsN2hdIT0hPk8jaDwocD1FI2NqTy5eals7VFRdbn5wLDNlYlo8VEhRMS5iN3glJng6ZUpxWzVYcG4uTCNtN0k1VTx1Xz9HTCptTFg5MEpwUm1TV2UuaCJBREk2NnUyW1FkIlt3amUiaEJCP0ViP3tlOShGQmpJcXFzODIoS0N9S0ZC'@;
put 'XVF5dGl4XVBPR3xlU3RJRCQuTHZ8OTF0Y0Q6OmdZL2h9QVdIaUNCUDApJndhcSJBe0h1bXBJWXRKRWkmIl02KEtDV2lldV05MnR3RGY3Vng3KG9DO1JHdSI7RGlFRDo6XTZgUTQiQ0YvSDNQOyNxMWN0W0V6I1ZsVkU5KHVDMG91Ml85ISJtRitwNTdjPCl5KndpZT5pMyErK0ZOIkQ4JmM8eitH'@;
put 'dWhScE5Tanl6WEM9a2tFYWp0KWpGJkBiZjErV3V3VSUqb3giUSIockIiV2hOVGpiTWNGaUt8ZS4oV0MmTWlhXVFuImtEJTF+bE50I3QkUHM8WTs6eSNDLig7SDdSMkwwRjAiXWFiamZNPEZ0ZklUVGpYWFNNflI0ITZMXklCLlZCM1JeKDtDNHpxQ1RqO3Q4RmwzckNUamVYd1NdZyYqVGpnWCxO'@;
put 'VmRmPD15d0R3O3BOVWpfdHNMP2ovST95K3hDZXxqVWpxWHhQbiwzUilMRElgbmNmW3lORWA8MntVajBYYlJzb2Y8XXlsRT8hYnJlZl55dEVFP1R2Vmo4WGBUNTdkPF95KkVwQGY7VmolWDFUS3U1IT9MRkthLlBtRSFzdVpwSSQ+MXx5V0Y5XzdQUXR2WHZWSW9kPGcidlgvMzhwOmM6ViIoNGRE'@;
put 'UDtWJD9PUG9pOlZiYH1ER286VkQpOWVoQjZySEIoSnl8XjM4fFNDSC5dS0Y/dVBCLF9LRz8+UCo3OlZ2KXV4MCV0W1p8cUN2QF1LST9sS0Apc0Y8cjZAelFbfF9LSj8qS2hCXzJgVHxfeUZjR3szYz8qKmBXVlpifGIsNlhvWThydXUjd3F5MV9YRylPK0g1X35JMkxfM1A/RU4pbz9WXj9VTkEw'@;
put 'P1ZoKWdsdGQ4cl11JjNwRjRfTUhqJXJGM19tSjhaXzNVPy9PQCk/VnIpQ2ZTKUo3Qj8hUDU1OHJCdn4mcEY4XzVJWV0zUk16Q3hjVVM6djhpIXB2OlI9UnVQaWl4RWovTFBEIXR2I1MmaXVQamkvRTM9Nl1EIXQqP0psKiowR2lHRl5vR2VDZippU0ZgXj9ERiE4Q0NyOyNDZmkleyJBSnRlRnhx'@;
put 'Z1pve0JfNTFsUlFDP1RRdTpXUUNpb2dSKUtSaTxSZHluLEMvITo6KmFLKUVRKHh3XjdGe2c8aWp9MztIIUlQTEl+JHN1VzF+JHd1aGV7Z2MpQk07RFQ5T2lvcH1xfGBZPElXeyEzO2YvUylvSnhqPVpHPDE7P1QpekshXS9XIUM8WSFqI0IkSVFIJUFJVnVgSjxFIiguRH1QYGZtIXlTcG4oKF4i'@;
put 'LkJpUH1nQmdORkVHLy5gdksydXVTUCtpTEkyZ2kpP1NbbjQ7Nm5oRSZkTzh7cWt8dmkuRjYqUVBPOlQ5Uz9kSCRxM2U3bm5hMEkiViR9fjRJd2ZNQEMhP3Y7Ulg0MD9MaUdYIV52Z01KRE9aaVNEZ2lHJXppcUNNS3dlWFpKLGV3MkFRI3h+TlhYV1JgdmBpI0pMJXRjYHZuWHhKSGVBSWB1elBN'@;
put 'ZjY6dD9MUkdGSVt1K31YK0w7eE5SQngxWCVKQWp2O1JYPEl9IT4mQzlpQk8/eDEoKkpSdEUvSDNQaGhmRHkxNHUwYmM5Til+d3tIZklmWCVHVzxjeyheOzdSZEt3UU1JYXZIbmU2IXNjMGkpRkR1TmcqQ2Q+LGptZzdYfTAsVHxmbDZOP11JQyljUD0kQSsjUytpa05gbi9FND01KjU7IW5zLF9U'@;
put 'N3pVOXVSJnheb09lbmc6KXVTPz1KSSVuZUZGey9sNDE4dWpQTWk9WnRnaCkjU0JYSzEzbiRERDg6XToke3VMZ1A7bGd9P3FJVCVHeDExUTZFWkp5UUtoVUsuK2V+WDtMNkV0bGtrflhYR292M1Q7N0F6fXYjKUBKWm97MkgwcHFPQk1MYjt6Oi5GWU5URkRxOmk2KkFHInY8WCtLMTtAJFFWNCI+'@;
put 'QnVlVng/aF10KUQvSF5PWHJbUVoiNER+SFhyXjlxIjhEKTgiXTUofEJxbSFHXlE0dF9EQVN6WF85MiJ+RSpsKEg8aH4iTEMmaSZhMSh8Qm1RS118O1B0N0NtSENlJnFzUFtoI0E7SXA5b29dUTgiT0ZZJColXlFRKXRIMVZnN31AUmpJWHpKPz9lPCx5M0NGOF5EM1JSejJ4NGNUdj1JXXl4RTAj'@;
put 'aDU8VmFgSkkqdXFGMF8vSURVXkthP0lSTUB5OEopTUt0Xkk4TDFgJEV1Y2RicDAscmdTKThMTmRUOXxuZyxmU2pSM2Uzbl9EIy5FRT4kWE5JQ25AZHhzP3ZuUENtanosXnZBQDZJfSE2OlkhRSp6TDRDYVZ0QiI0L0YoWXlHOzEqW30pJEwvRHNmSF50P0BGTXZicW9ncmksVyJCbGtkeFohbDRz'@;
put 'WV5ifkpyL2osQiFlQ1JQLiszOzRuTUJpRWVqRTgzUnd0e0JKLl52aWxNb11SJFNzKVIjSzVdYFl1JFFJaXpBUjprYWxfbks9TjomU3UoRyFhQ2ZLdEA9dEprbldLP0ZsaCtpOEJjNU9zVHxDSU1OZ0ltOyw+R2ZgMSU5aSE6dExzdm1UfHtFelolOW08XShmbzpTNXJmQ1ZDJFFtIWYpO2tHZTEz'@;
put 'Nk5taEgpUkRpI2o/TmdzSXtFRkN3JCgpVCl2InZCWSxfT1EqMzYrLnlVejF9KEBiR3tubn5oNzlUZDptRXlRMyVlIitqS005fXBKK35Ld3xDOn4uclVBLjl3PXs8TGF1LnlBZUI4Imc9Y0FuIUV2MiRlQW4pRmU4WC96XSllako+Y0FQeUNOOEEhPTp1JF5sM0Q0aT1icT8jQWNSJnxgSUUyTGlZ'@;
put 'JW03cDYzTEI8bGxaZyhxZVJ0TiJhKDdlSDlpOlU8YWExY0gxd2NIflNCJmJnZjJ3JiVrMWM0TCFtfmE7ZUg3YV9FTH5TLkhsJUl7czosM3xkJjdmaDE2JDt3TTE2YjoyU34pXmFqUSg7UF1ucGssMWo2TjpoYzZnZzlpPjpXbDFjbXFDVj08Ui5RaGM6YzImSVBsLjIkNmQoITtnZHR7XWIxNjUj'@;
put 'VCRBZT5OPzA5SWcqS3xyZDRoaDJtPnlyLDQ5TmNbSTg1UThUYjI8OntLaXV6XyksSkZBMjpuJTJ5RmZ+KVVSd0FEOyp4dzlBTlh4cnJAcl8uJSV0TSUuY0E4KV9nZ2VsOTA7QTNXLGNRPSZFWH1FXiU9Knx6OGBddSRodTcvYFVKMShdTXdJQHVAUGpVYyQ/JDVHR04vSjtfN1AhP0VOVSM7dCQ7'@;
put 'LlFySjhJUGNbQT4mW004eWhjN2Btc2EuO3BqV0JIOEdqMHBbTjJELyxpWypKOl1EbTRDUzoxYVE1TUUpQjhvczRLOz1OS2liPnYwPGwzd3xwaEtBX3dWMXRgKHc9eyVBW11VfCRpSkMkclksJi5eUUdBR3l7OyZGKzhOQ1c1akZCMntwXiIsZ0VWWjUrND5JfEQleXxMU0t8MDQuQkUlIih1XyZW'@;
put 'PWJQfGk+TEA2OXomKHlsPDElazxCQkc4PUB3bVdeZ3gkaTNIWjxvRFh1fC5fdkRnJDlobGMkaGx1fSUlUktRXTEpUWk2Nj47eW5uPkJtc1tqaCIjLD54RjZBJHcpJT1XSVAjVV0jK082eVp1Onl8VzBzMi4zbXtqeXxVWFdPUy53Z3BZRT9KRSt3ZEV6VzNDWClxQU91TkFicltLfiUqU0Y0Xm1Y'@;
put 'JENlJigyNmI9SXlORTI7WGk1bSppKCVZSmBAVy8uTGlER0B5KGM7TW0lNX5YVXFYdkJLbF9ILCZAaU9ZXkdgKj9lWWQ4ZEVLVkVKNzV5Jkt8S0dfZjYhXztHM2hzWlp6PlZTejNUQCJRIUBOZkRGelJlUHteOW8rS3FdRiM2dXY9VEhNQSY6cHVlYU1IKkIsYlUwQ14zYFhFcEtTT0BpPERhb1JI'@;
put 'WSwyWzxhLm8wUm5HJDlrbltuU2gpTU1VK156TXpMeHtYa3h4XiFbbnwucnt5ckJ0aHt8ZmtLbEYvemsqUXxlXyVqPWcwbDBwTnBub2c5enVoc0szSEVkKjteREY6ND06c1MvLzVQWj4zNH5kX3RaKipoRFhWfjRhbGBGMSQ9en1FfCssfS4mVmtwKmwudCFPQkBJOVUhQm5SIl5NPH18KGx6LkNx'@;
put 'VXEsVXlAKmkqdDl4fCl8RndGQVMzWntEJSZvVF8jNlJLKztLYE5yeSwjOW5wMSlIMVYjdlJzeyFDWHw0NyxHInYiUXcmSVMvcF47ekw1al4kRzQhKHdYYHtSM3JvaCtdRXU1MUx9PSNVekM/UjBSLlYleTtvWSZ7Iy5nbHc6SFkrWUJHYEpyWVZ9OGdCX0tGJWU9S3xlJCxwPUNHK2FEZ3RQKHd5'@;
put 'ZzFHQG55bmAsMSE9NDVuXihvbkxpVm9UXlMxIWx5X3p6SGl1bl0vYyFLdUd6Ukg0LiU1S1NfYTF4cVt0OmppcVNMUz9fTjNeLzNoPVh8IWwpYXZHM0RUdCRCR3wlWSVOcHdqPSkkOndoPVdxbHZoPShUQnVoPXNJdVhmR21ENmtUc3lLZlQkXjNDZmJDcTZ0T3QkQj88eyg+dFFqJkJtRGVnT3Qk'@;
put 'QiVtfj5gKFghPFswN1dLaDBDXTo2R3FsQHtNTE9xbEo7OzpROFZLaDAyNGA3ei80YjFDY3FUbz8iTnZEZGArO0JNYiRPemF8VzlFUmNzMlpwXnQzJWBjTHZJT2czVWFNYl0id0czbiM4e29ZMiNCOiRPQ0daQ2YlV0x5UWFoMlslTGFONVRRRGFLTlU8b1VOZHRVIlsvQmZIL0IhTjVHJldEXV1a'@;
put 'ZEVSOEpPa14yTmspXlc3XV1TWnd5NUVkNjk8SGk0dkRQZks1YTs0Yl9aVCYoISwvLCtsdz4kV0tdW3tTel1kcGZiWD1FZ015VjdzT3phe2QoIS5uTDZRYiw5eUc7emR3Mj9pPFVhIU41RyoyTipwMFNvPUFqNnp0QiYqRnhCM2l1P2RERXZfbmVuLF40KjZGeWd+cS90LlUlfnFeMkxtKlZ0OWJ0'@;
put 'Z3VoZUpuNVI2dzk+UyYvPjNmUC54Ji9zcUQhejZMVDZxbyMkfShNQTZDTEIwdF4peHQ7eCU/XXlqKC9aVDw6OSRvTCtGWUZ5fDV8dV95cnM7Y188am93V3B7THNMKWJxO2gxfEwkNTxdNVhbanZgTGNVPSU6Vit3MUZEOyVLMHMkRiZZYH4oKEgvJlYsS1IuU2Y3aHxtZyxxUTgzd2I5eWpNcn1o'@;
put 'Mz81I3ViKHcuUmVMJjA9eWhdOjgqJnlZYDw7VH4wSVBsMj5PKHVxS1RsfFZnQElsezxTdDxyX0pXWSI3KyNSUTF+UlJXTShXQTIrKTM7alBMcjRJVT9Jb3VeU1clXjBLWCwuMENGUFlgaTpvayNCUFR2MUA0NGxaRmlWN0RJWz5OZj44Plp1LDFSVlJdbWIie3cxUVJaM3V2PihUa2IxdTU2dl9L'@;
put 'QFp4ZEhUaVlYXVVpbiJWQVZwRUQ8eHUqRi9YV2QxI1Jge15aZip0SUVXPV13ZzRWWjxhMDclOi9SbHk6Um1mVV5fSFhOImFSMUR2S0JuTXV8LFc8QWdAUH1KfEN4Sl9TUm1uSl1jREI2ez5PKGJMWENRUzRDOlJsRS9hfVhOciFTTzVpT05IMXd8V05IMSRoSn1LJHtRNyRxQitmU1ImWCl2LjdJ'@;
put 'QkxJUkpJTmVadjU9dyltY2lWTUVgP3JAMSs3IiFkSzo0NSIvZz5aIX1WeX07Zjw4Oi8vRzZ5X24pK2BeWUN1eTxXTVlvMkVBPWYiRFJ3aHtLfE5ieXQheHwuNz1DUyRmRzNCdDJTSTk2bFZvRSJYJEwlakJbcjciJiNwajtXVzc2TnhDQlhJMyMzNjRzMmVLUUUsOnE+I1RiM0tVPGhRcHwpNkJr'@;
put 'YVoiVHtwdz9NJk40O3lSPm5ARzhldlo9d0ojVU9KRE1VSlhoUEdieVZlNXpNbHBRZDhsX2J5X3tbWnxUcFQ5JnBPb0VqVEBGOU1tZ0BMOUdzWVpATEZzd2hwTDAzdEchTkQ0NEovJW0uSm8jOC5uM1M5MF8xUD11YUdzb2xoKElyR2I5PiFdJWV5b2h9M05HfkpzRUhnLGd2VnU9Ll92NyRxTCU+'@;
put 'NF1bXk10SSQ/L2Z4KHt0Jk5qY1EvdSttPSMzdVg5Rll+diU7eld5NXFqK2xKb293MXFAR1t4VERIaFt0WyhYcVQ2U2M4TSMuNSVuaVY3b0xVXTNOU1ooSlQ9Tl5sSk9wbig8RWFOQWpTUzJ1d2BFVVEuVDFQPSREOW1PNWNWTHlNS0ZmNl4iMnJEazJQY1R7cTdkVT48SUo1cTU3d0M1ZF0uWXpB'@;
put 'Pl97KE1QfWh8ckUrXnNLc2Jqa2VLY3hsNnZ8NzlPaTA3az8wN3B5TmtjKUtkLClMZERfX2lFMjF3N3IjU2AyVHtDaGxdOnpxVF16O2g4OTBVRSEpNDpJVzghfDZ9amg6dnNaXjxuXjROWzQ8PDtVOXFUWDolIys5dGRjMXl8SXBMNlNvPTgxfC9oRDtlKyk0KTtUalIqX2BrI3VuPEBlVnd9OjR2'@;
put 'dWFfeip7dk41ZFJddkUmRjBVOzJ2XWpzLl08VlRESn0vPVAuQTNqZVA8MC5EN1ApOlZjK3FUWSVXfms9Z2tvYiwoUFFJe253YVkqYz89ZjladysmY1t2O31CVGlnJHAlJCpWLz8qXmtYPkJle3R0NFp1NC5ucEY4OHNzWXZ6QzhtPiU+eXJxI3dHTEY7VnRbLDFTQC5HRio+ajV0fCwwSUw9JTpX'@;
put 'NGNZSUQxdmZZTzVQOWFPPSxhTykyT0s5SSlOei90fCt4SFN+WylsSHlzV3pWX3BjW0woOS5tJUt8PzNDekxbNHM/IzpOcDsrUUA2ZztrZj9NIjhBNG8pflFHX2Q/TjUrUER0JVllWiFMKktuLmhqfTJCYkhaPFpfUzFpVmUoYjxiczZBRSl1cWxTcEtQKmB2MHc3OGJZWFUwMF1sTWQ0VGRLK1cw'@;
put 'MF1WYnFkMSg/RFlAOTshYjAyYFFJNlQ1WWB5bzs1V0VbSWhUO2t0bk1vOlNgImNGaDd8QnhObkIiQl4oWF1gOCJNPkswN2s/RkYreyp0My9Kbzs7YzRna083LG5xI3Flbj9hRlc3a2tVcEtQdWRwfVVlVCN8OS94MUxdNzd2Om5xZWAwWH5YdGszYzZVOH0uWFllQlY4TyshOmxmP0kwVjgwKFZw'@;
put 'ZTFzY1prKno2LE8sQlZmOTM8NE1iIWIvSEYhI1NkIzFDNitSZl9bZ0RTMGkhQEpiS2l1KTQuSFNKW2VLO3pMJnZpUWVwTiUzUXVpbHskSHxtTVhScng1Umo/d0srXVZ4PTU+XSRlciIyTHY/LE9nP01VO0FlLGZTK1dAQm5yK0VYbHJRZjUyQ3N8KUI4IzlCJSl5aD4pUT8/RHMhWmU9JmdZKmgr'@;
put 'c1U3Qyk6fnEhUnByNi9fVGtCXThFdmZHfTozeTYkdEgubTUyK1NsfigheTRrK3U7dlZaM282WFdseFBtTmdAIyJIMkYve0J+anZgZE44Z0NoWm1XVytIOzlaPj16Oy5HLCpkfTFSblJ9TlhAeThhc1p7a2dJMTR3VGk5Un5NJk19RjxtWWhPX252SmslU1VsUW9yTCFMZkdmUDY5YSU8TFI0Klow'@;
put 'PjBKS0p+WTtxZ0BPekE0OUMrcFNAeThXc1plYF9gTlJgS1gjakk4QGh4MyExLztqdDc9KWBKfCJXVio3PlNffTZ4ejdIaEooSSVsZVNjWHFiQTJ7Y0ZXNG11JSxWeWZnbk9vb2wzNFV6VDw0enk2XTRBaDwvfCY8SVBwUlNOS1Z3R0pVT317eT1bMmpJRlVSRSwkMSUoVSNfeCYsJShMJENLZD1l'@;
put 'MDBYfiZ6bHA5SDB2I01pZSNNI0V4bHNIQXhvdUNOUnZUKEZ3c05EYnIjMXZWdjZlMEcoN2N9ek5tJChuU2pQa3omYn5SO3EySEpsYUIvNFVgdGg6PH5EVls3XVNQU3YxMzdofER+KH0+aCgpK3o5aCNjM1Yyd3Q0aC4lMV9POk1zIXhiPj4obyh1ejNrNXdvKSJDM3ZHXXApIixJMGk9R2RZJnV6'@;
put 'M3RiTmh5RFcwPnEleS5bMV5jM3FzN1Q8Ol9iZFlYMkgqOWJMMGVAV2h5KFhddXhOUDNUYStVUDNUVW5QOX1ZVjBJJXY+dV9UPjFAK21fS1Y8dXklbiF1Sl5oY3l4QURRczA0a3gvX1l1Qm5kM2UhUigvfX5LbGFTK118SXcub2xgZU5rPnMofT1YczJEQjxLcCFZb198JUxqYkREJV5vKkJ6fUhK'@;
put 'QkcxNTd0Ul5NamJEQH0qVVNPPnkjVik3OTZgNipycV0ud3xZTzdtNEM+XiFtNXp6ND5HK0MsQEtnYzkvNnEzPGguTF97WF5HW2M7Sj5taHNvUjh1UFhURU9GNF9hNTNEa25AcDE0e0E+RUEmcV1ELCt9bVYkNG4sN35UZlNRPDU3dEFXdlFxZTdUc2M7V1NkcUFnKDBkbXNscTREZnlOLCgpZ2Rx'@;
put 'QXBrRiFhNHd4JnV5SzxkWmIxekdzbThwVFVYYk99aDBwXy9zMHwyIVdSP3BCdzp9ay9qSl9melFjVllNdiwqfHpXcGhiZC9ILGZmI2BIUUxSWyRoJW53a3FTMF9iZzk7XmU5NF5AYnJ4LDEwd0oyR2FBP1l+KDJhOWZPdCtVfE88TXtlYXpqZU12aj1PRTAvOGswKF5AYnRZZlVhMmwmWlMxQGAr'@;
put 'Z31MayExIz9PPnlmcFQyV0k3QTxKOjphRDlVSWxsMWtgSjgwRzxaQTxde1EwWEx2fCwrUE9GcENLJHp1cVYpd3RBLCQ1Vmh4LDg9eThkd0lkST5GPE9KUm9acFpkKG1YcTRFYkEvfG46TDFrWjpge2RfSGVUdDhxRXgoeSNpPCtHOTZrMiVdLDt1L3Q3ZituaVslJV0/KG9DeCh5Zl8iSj9GaWo/'@;
put 'VSR5cDJFZysvcTFoLF5DZT9qW3EpcTMsSnh9cmFEU2plaFhDWURaM3VVWy9zaUBmYXNFbGdfXV5KPU1VWlExb0RVPmpAMiUvOndFOSpmalFvN006UVByJlE8P0EuXjtKPCRxJmx2Uz9IeisxfThFa3Y4QFRqfElpQDNBUTsiYV1wNmpDbmRQdjwkeVdQcFohJGBddWs+LihKPUBFbyZMQTFSM0NL'@;
put 'fjxpei5sK0MkO1BuYzAlRkl6VyQ4YlJgaF1LSyFaPEZOJHFSVm85L0FZQXdvT3A7R3slRiJGbi9wWiIyQ0twOzJZTG1tc1FqPEw1cGQvJWp8Q2VMOjlBWT4/OE0zWUF3di8ue2spe2RALDtUP3skJHdIMXw6VGRCWyZfOFV6KUwydH1EJDt0bHtbMlpUZm57RyQuZ0w5b3tHJDl4WTVWclplfHB6'@;
put 'dTg5dCF7QCxyNyJVcCFeLEpBQjwlWSV8Kmg3ZyVmbyQjZT8zN2MpQ1cuTCE6JGAiR0s3SHp+KzoqYlUzWDxzNyJyMGpZUzdfbHVnXzMwb3V5YThtTUo9cVFNKTNVYj1GLilUMllHbEB7X0Z6eVlzOVJ2Rml6dVY7aGghPyp+bFc9enN3Ul95e28mJVhnI3hxOWV8bVBWZ3h5NSsrcD8hfl96NzdC'@;
put 'PUV9KSNuWUhjcE9nPCpeOWNNMztTdDFIL3JnZSxePFJyJVNpMUg3NkxCNVduemR4W216fEpzQVZPRCNKWiw9e3NJcUxIIj8zbUVqNzt5XkEsXlNbe0hde2hVTkVdVihGP0tAbCheLl84aFtMZUFXJjNXK3laZF1hIXJXfFVjV3A6JD9bY0VsfG1GekRsMkBtd3k/fCg1fTtIWmo+RiVTQXNdY0Vn'@;
put 'MnMrM240IUlWMzEvL1Q/VGo7Y0ZhbkArOH4pW1ZVd3RhPnF+MEtLcj1jPGhWdH1tVDlSZDdwSjRVLlFfSHxpNGMpSjVDVmBfa0BUOTozeX13Wzd2VTNxa11GKDp5OX4+L2p8V2ZPNzE+eTM9KUVJVHZman1GeSgyWCYpPDZVKFtDMkxpdWxxYHY5YjovPUg6fT1lLlNQezRUUT9+WkFeUmR9WCgl'@;
put 'aHxPSTlAVUBnSClUUmt9SHklJGhYYk1GU2J+MVAzZjhMP2Mqdmk+YUVGUH5DeXdqaissPVVtRChKb1lkJlpBSyFEazUzaF85MWdFU2RDJmRqTDk+S2l9Rj1pQF1WfC5kKyMjVkRqeip3d1ptKjw7bUFaeykhJWkkR3dLeSQ+eTs8UGJkQFNGN2I6SHxMUjxeRnYjaGg4TVVjW3hGfHguMkQrbC4z'@;
put 'VzdKenxWWG5bPzN3cEIvMzVZWjxHQ3BKeXpoYip5bm9nVG9fM3t5PE5CfjJUUW8idnt7PzprfnxVOXtwV3hySyNmaG9ediRaVW1zXjIjOX1uXkVPQDdwaFFYZmBbRFYpYGdEX2FHPSJjayRnYWdwYTYzYD1GTFVKbzF5MVBlc3B1U0dJRSxmLnBiRzZBLkMyXzJDSGllXmM8W2cqRkYlOyE8Jk52'@;
put 'LmF2QHt0Ty95OWh3Yjl+MzlXNFU6MnFEeyVzVndXalRbT2dgP3lhKztJd2V+WzU+WWtJbDk4YVhhcV1DUSg+RjwmcSxkI20+UXghL3xCX0Z+PzArP11ELnwycnYhREBCY3wjYWh4X0gxd1NZOXdbUzd1biNUYjQ2ciwyTWJmNEVQV3F5PTZMfDd+MjVvVmk7NnssVDJeRj87e3YxKFZbaXEkaz4v'@;
put 'Mm5sWXtCNG8kUl1bV1dwNiR5VSxVODdVQGJZSzV3Jkt8KCUoVTV7SU49R104KUwkSlE4YWJFP1I6SmJ2WU81R3NAdVU7QmVTdlRlWW5EZVM1WjA9NU5iMzZOSExHV01JbGs7eHVlMCtWcSlWW3EpUV84bispT0ZsTUJbQnRXaXpIQEJffCtBUVlPJHlXVTBjZWt+I2gySWwycnMxWT96OioiUUoy'@;
put 'Y15kLEtbL08odWR+KTpXTWEoKy4iaTFVPVdXc1p3V1NQVUclTCVTZWp7Oyw/PXBaQnRBPn1UMW01JSVBKmdKO2A0filKKEtqRCEzOnY2WHx9OlElU1lrSGteM3ZJbUdyXUElNmheTCRFK3FUMSZCPW1UImZvWmtXPilEJmIoR0p5MSgxNkw0Vm1oJnt8ZzkmWShJU0RicDUkOmc6OipsSmlhbT1I'@;
put 'OyxfQnY9Wz1CTkUwdTIlVj1DenByNXBPZD45P3o4PUJrLjA9bEZxRH5FM0VOO11RXTY2YGMsLj9tY2YhO2JwPTJONSpIUVhkYzFtO3NybEtRUT5+JFtvUlNIJjJ+aTsuWylsPzM0Wlspem8uZiEpZVtEJXopJTp9b0I2UGsxPHk3bCFyPS9EN2g5LFhlWUZjWiUmTnwxbVJfbmVUX1FwRj4/Njsv'@;
put 'TD1QUjUxVWVeOyIpUHk9eHJNXXspbEs3c3V5VzxyUlhDb0pLUUVdXTBNc1UrSXtbK3FVOyIycTp7eUBMaUdDYnRWMFEyNFZlT158Rk5iUV1+MW5odmliRXpaJTZpRiwzbGBAYi9Mc15SQGR2fX1HfE1YRU1OMlUxX3p1W0FQQDE5VztzQFZPX2MwKFJQRk1Lbz9Ad0ViOCoxdCsiKiIrV3ZMbEU0'@;
put 'cj1MdSNLa2V+VUxjVUA4OlZZeG94dTF+K3MpOVRMaX5xMHwvQElwRXp0dyRqME5QRTpOL0F2OjV1WDgpTmtabGBHWmo5bFFsb2BzcU9iJUJ3Uk92KyU6fHJTK35seGtJJGl0SjhWaU57MWBqMkg0QCh6dml1K1JBZ35rOT1LZXVIYXdXOnBaRyNNWWtXNG41M104dClkXlV9cTBRb0g2aX5jXlVq'@;
put 'Rmpke0grQiMzbUU7VVtDTXM7V1tVMjp3dlpHI0QjJUlCOXJjfjgvd0I4PypeXyopdlUjX2o/PD9SQitYNV4+aFFIMj43VjFMNC51cU5qTSIiRy53OkoqfmQ9JigzWmQpKlpQK2dxdH5Acn1lUldhZ0NRQVdteWQwWyJbTTN2MjtfYkxQI0ZuXWhGZUwlTHwzV2U7WHZuRjthS0tKdE1YXUBiJjV3'@;
put 'aiE7Uz9ZbUc0bmUmeHxAK31BIytefiF2X2lpOyU3LFd5WitsRndxZCJYY35venRURSVVLFc+RU5IL2drTyVOWUl0dltuc3VCTkM1OFtzaklzTzdISGBTNzlifXkmbk1AIkRfMz99W3B8ODhmfWE8YGxdJXY8NCFSMSsyX0t6eFdFKF9EZVB5XmNVPzc5QC8qK11kN2NrSj1XaVBicnd8K21oS0BN'@;
put 'JDczLDYqUk9TQFtKISFSPHElP3o6STlnPl4mMlthUF5HTGIuM0IuM248JGJ+VVVeJlB4PWhFSGdLST9vaU55Q19eOFI9WFQ5c2huRDtYeTVbNHM6KzM/ZCxMVShPSmBdelR0JS8pO20yazNMNGtwdSRjOHJaeFQuKmVLYmY4MUV0Zzl3TzpmQ3RiPj56PDJYKToxJl1vYz0sR0VqZ1ZvJDkvZjpM'@;
put 'cW5XVnt4Z3pyWlpGQDIqVTUkJU99OD1ve2IyQV1JUV9vUnskO1t3ODIvP0l4eFtadUBxOG5NVXUwcz1GRldjKWI1ZWtOWiVQUj9HfCVnTzlVNEwhZCpnOXd1S1g5UGAuUzkvMWxiSmtKbFkxbF4/VUBpNTtxX14iVm87PmdeWU9yXUkmZ09MK0pVPV9yeS5fIz1dYGIzJStaSmNXbF5GNmdkRVFA'@;
put 'W1cjVXBPNiEiZ3NMMjNUO3E4fHAkaVBoLE1YOGt5IVolYGt3Mm9PfExQQDEufjQ8RnM4L1JfaXVOXj9UTl4qMTJvfTxFVz9tJVVBbi5dfXtSM3NVPGRSSWJ6MFswcyUwYWI1X2YzVDc4ZGtlKFIvW1RadkA1VUZTVGM/JTdoQUZ5NkRJQDFyV1duQyM5M2RWLDh4VHNiZHJuI3MqVEMleT12JDhQ'@;
put 'cV1NK1d6andYUSpjW1k1XVoxLzc9QllYSzN6Z3Z5R2okWk18PG9hRGRbKSFNSC5pdz9XJH1zXklgS0ZbXjE+dy9NSy9bNGh8UkwqNU0qQ3Y1YDJEdU86PFRDeWkuRHA3UiRNbHAuVkExQmJ2PzsvVkVuUiRILF5ZTih+I3IxRkcld2ZnN3dFfDJyfWFLUi5KcF1eeXJfY2hfSzw4PTIrNHpNfSJy'@;
put 'OG4yYy5UVDoxI1ckIj41NWsxYzwmeFtGaUBucls/ZnZRWTlUSSQ9bVVeSlZiPzVAVzpoeV56KnNzamJuKGxZUWxsSWBmU2ZmIyswaXhmOUZbL0tdRTVFelF6N2paLCNrVCNQaENTMzUpMFovc11VXVsqfHp9OXxlITQzQk43WEU+SFlISCVoWToqPDI/Kz55VDREQXFbSkhZSEglUlliQ2V2W1sk'@;
put 'V25fXj98eUdFVkxOSVRPelVPZG9wL0Z4JmNiK1JrOkx7ajNSU2N9NlZJdFRHI1grbTsyOTw5eDRQKGZGOWZBbk1DKD17JE85W3w8YD1UUWhATTpoR2FafjhFclpDJmxzbGZRVHRUMVEiRi5SLzQrWnxgcFYvWUM8MnlyRUsuTH44UEE6WVNwVlosVE8/SnwjYTFhT2kmTTtEIVRuez96W3BCTGVO'@;
put 'fllAN0FxaGxrMlVuLFYpeSRCXm1jTFlGOTUyJVZnZ2xATGZwJi4hOTE2dDJULlNrMk0waENINWEkWSMqV01xaFdNU1BQJU1LanksZEhSPjlULm9DS29NXlNYWDVqSkNlbDloOysjKnFONXt0NURUZ0klUVNtO0RbWzxpVjRnamQqJF5VeVRWb1Q+JnY/P3p8UTZPOF40Mzo3cSkwcmx8dkd2ZD1q'@;
put 'OCtOK210USlnMHIiRChYUmswPEYuVW0xVVlXOldtTVhCYUtbOSE0d25jXVVlPEM9RTUhLmdbU0xGUm9SZnZnMEpETFo8N1giTDVjV0Q5LmpDdEZZS3owTWJYKlF0YX4qN2FpZj4oM2khcCosdmMkcyltYXF7SkRSdF14R0JgfV5pTlI6bS9NPENIVzksckNAXTpPd0h2cTo9fG9KQHdQVVclWmA6'@;
put 'JXd9d3tnVnBObUk8MmEuKWIvO3Ipb01YUDxOKnh8TmJlXllkb2VsMCY0MXx3L0FtWWFuZDAsdkh4NyNaTDZMXk9+S0xgMHl4OWk7VTM8IXhMXjIoOy9bR3dmV2cpJDRZdT9geHFhcXhwYDJVblJHU3BXdjxQMkhXYj10cDA1e29HIXh9Q3NLc0QoV2tWSz0hXzIoITJ0dC59Sz9uTGxyLnVJK0ZA'@;
put 'TFBaVzY8VH4kRWBofEEhM25UXlk4TTk8TTlvZ0NQO0R6eGVdNzckcFovT1ZnemdiWXRxdFA5aSZbZWEhUzBmM0w3VFtIeS59ZVNSVmMpNVM4Ll4heGh4I0I9WVp2bD0jTVtkeV0vW2lrYFtYOXckaU1+NmQ/fXd+bnUqTDo3PTYvZltoaTo1LEpFc2dwaTtNUG1zd3AqXkhNbXBYa1dwSl1Wdzc/'@;
put 'LjdBVW8yPlhVSC8kJVM7L0hKcCNfe2cydUUjKyY6b2N+XVQuOUA+blpVQHsoS1Y3LiF9RWwyXXhIISxaNzcsMzNYTjV0S09zQClyYEAvV0Y3KFQ5WTs8PFQ1NyorTWc3YW1WUmllSnpaSWxuYE8zblhdNUAkLzdOK118P318STNEISxRYm04JjNJMTJ2cUlgWytTelE8NFR9eG18bWVnNzx2X0Ft'@;
put 'ViUrZ1YwMllEQ1VfeSklbFZfT1Mzak0hVzl7V213QzBFNC5HSGNqcjB8JDQ8fDR4WHViT2BxOTwqeSYxcDE0L1JNbyo1QmhiL1BzZT9zd0RMSHEsZiZsey5NdVNDVjA0KV9qPlNkdXkmMVppK3xSc2szXkIvNlJUdk9SWGtzWSkhRDA4JTtybHpmYldwNixYY3NbVGk1L3VjQVZFeGQ3cHpDUEJa'@;
put 'PWx3K0AsdF0xNzU6YVpoUlg1TG1QaXNZOltuTm9oc1kvW0ZUTVZMRyo9c2s/Zn53JVZSYE58O1suMlg2VXVdUzEpMjdHSkFGckZsXUhzTkVpd0tZVktNTmJROVtXUm5GYHF1e0R+SCZLOjczZjw9L2gxOXYmMzw0PGI1WkxScDA/cSVCL1BhUzBnOTlOeVtkQklJOzo3b3B9eWdZMWRWMlBjYE9d'@;
put 'eX5MUWxrUytRLzRkcFN5M1kjM3lMNzBSdXFBaSRtVEJ2OkAraCJ6fmVDNC9sbFpWJS5nUXdweW1UMH1MVzdyaGlCMjg9cVdoXWQkOGcvKS96VjkvWylkbjpzSXU0fSVaa2RVSFFATXZTK2RnJX5GSGA1Yy5ONFt3O0E+M2x7b3EkXzBWfkRXanlDNkhaWThjKm5KcGVkWGNXOSw0O0Z6VyR1NlN0'@;
put 'Y2dFVl5hdm9ScyU6YyV6JGcyLG5WWUI2WHB9aEA8S0cmYTFgZ1JOLjhAcXUhXiV5bEY2Ny5wQG9xTWtwVT1ZcFtuPVNSUzMjPD1lMDplJGhQPzlYdi5VbDk4ZnNLJCI6NmB2I2AvVyVkJGcyaz9fXWt5LGQ0WCp2fWAmYSEoWUVPRFplaHJaYDEqWWNORXdIOHE7cXR4aUlAbiNTInd5N3Qma1Mk'@;
put 'TWttfGYjOlRsXltaVj98bSMrR0VtU1ljLFFmfklxWCVFTkhsRCppLDw2fnl+eX55fnl+eX55fmI+RGIldzY1Xk1PSUBCKzZJXXw/OHJfcyM3QFYuMSVxW2FDVV1hZyI8QEZgUCtSUjRGY1ZxPyQ/OVlucVJSd0ZjVi40ZG9OVig3Lk9Ib0QlWiZSNzZDd0gvZWwweHwsfT1vInp+S1I7cDZteXkx'@;
put 'MGo+OEp9ISM3ZlFwKF9FdDteSFZkXXNWYl4vOWZAU1VlJWQ4fTBqPyNOUmpDREBtfTJiam0+KnQ5RldMQHB+WDBySkt2RSVVQSZ1OlNPQzc7QElTQi9CXzl2NVhiN0NEPVEpWyw0OWBvaT5vMVVeS24xK3ZLdk17R3x+SSZZKHUsfV57ZygoMyxgMVJ7fDBVWUwmLFJALDRKNmRQTTFCOlZQTEk+'@;
put 'RUpeMHcxVWtDMEtGOXVWPFVofG9JcFRhUjdiJXIrQ2hrYHNmXjh2NHFfKWZ1YjlFfWVgaChCZCM+ZSNkLHN9TltwJV9nfVtlcn4yXT5gKVY9QHo0cnBdKTh5WS5FQStobTtQPDtQc2htN1BlVkBpbUw1X0hqQktbdmxGci9PeHB9LDF9TG9gInlIYHh8Q3IuXVBbWkkuMTxObEtIJShSYV5GYDFK'@;
put 'L3hUbHdDa11HZHZnbTcsKTw7IWA5ai54Wzh2e05GeiE5PCZTTG9gaWBFYWZWPy5wckh7dUN2KTN8PmYlLG5zKGEpJFB4PUw7OVRdMDU4b0hSM1c5cV9BVXpGOjhXOXBIRXgkeHFlXjhnJWwmWVUmez1bQzhhfTg9QjtnbDVydF44fVV6YXBOW2BeMC5iN2l9MD0pIWZiSCs8UE5USWxxYlE+dVgm'@;
put 'YDl2bDdaKVpGQE9GYDQuZHl1KWtdMjwmQ3AwND1RViJ3eTdma3JJOTNrL0VdaWRxRnh5WishI31JciFvTnpFfCV9QXNWZ3kmQ0N1dW5SUXdZZE9ZIXdeLndsPE1IOzMyVUBQRkhFTHh2UmBfQEhvJm4sMSJMZUJpKGxWRkxHWDJxS0BIb3hxQ1MpTSxZKFJ3flBKeHI/SHs1QHpIey4xIjFOM3U2'@;
put 'fktvYXA/ajVeQF1qXVZRMm8/c2YsSkNZWWt2Om53cCloejAsNGtkdCtuYHhfeXxIVzV+KWRKYlY+OHptQVE8TEkoUyFnOUU0LEZ+XU5eM3dRe15rWyRedEd4PXE8UTN9XTh4ek5UYWgxPGYzYTJVdXcyU3A2JEQoTFQlUC46Pj1WZlVpQXgyQV03TzNNdX1tci5MaC81JDw/eilIMTJdMHhFQz4y'@;
put 'UyQjcFlGci5FWTYpJlVOekslIkxBXjozQ2o1T3lLKWljSFFIeDJBa2w+aVJ6Q3FIKWk3REkrVmhSe0xKc3gsJHVob01Ma0ZmZXNaczJrZUMkR3RNXk84KUwyXmg3OWJoN3wyU2guXTxXLmt9N1NyUngsTjldeFImYGgoQzp7K0RQbDNlcHdxaVZNU0BHOX12YjRfYlkveEYlMUcvbko1Zl0pXWop'@;
put 'fXRGNkcjeDxXZkUzUEt+ISl9W19POSg7aEt1aSFJWlVIe3Nqdlt1MG5FXyVDeWRwZD85VCJ8YSFqIytHOnAwO2dsaTkkJSl1WlcmV1NXTTs5Rjh8cFk7bWBvfDp+Jk5UeSlneDVCXjw6SGNma0VjdHRZKzt0JGkpUmpAd0BXXm87eWorKUVRaSZSb1k7eXs5TUdxWW5FYTlKISgjLFZTWnVfSzVd'@;
put 'XVI7KE0qI2Veb3klSkAqbDI/a1c4cyUkRSZ5UURwO0dzTTBaZHkkd10mPzU1JDk/MXMyYGZUWXo8cjd7UCYpXiVEJUJLQiMmWSVxQWtxeDhHQS8vOGJIbFNONGRlJmlbWFFlMlJ2RDtkLn4vLyR6TkdDOE1lQ2VWKXxXSHI1MUkzJWQzc3FlSmx3SC5eNy4veUd3ezZ0WTk2cHs2YTIxLzp7XUZl'@;
put 'MUQsUkgqTWhJK2U2P2R2aClRJXE9OFJ6NklqKytmdV1yKFZgNGd2fTo6cmppPnNgKFJSbnJFcUhdNTMxeElAMSVLKnFAMWc5aGtAcUtEKTpMKXdzTkRqeihaSUFaPzhbLzdjTHNTfUhkWVA0fkYmTms0PUUsWCxMbzdFWjg/NltpelNiVDldcyttJDNjcXlQfXVFfkZBd2dGW1Zec0RCPjZPPWh2'@;
put 'ZzssXztaJTkuQHZiUWtpbkZTUTphNjZJVEdkL0VLLCZpQU9FXVVZU2dkYTl9WEVrdTYwREpOVHkhaG9UKiprLEdGYH1AOTwlKVRDZHpgXz9yRCY8VGwmcC9vRDAoNFg5KjRMRnY0YykkTUV8aUB6bkdLOVI2ZXNZdiIob2U+UHg7cTUwSy96ZlVPQ05rJU0qWjdVZnR8L3N2MWQ0SWdHLHQ4S1Ij'@;
put 'bTNVUz87Nn1ZTFErMlg3VmE8PGBlRjN7aXkqbWVJNG05US9GWWViT0FlKURXKXRIcXVUX1R7cUglS2wrcDJ2Z2RWZShZXURJWCtAWHUrb2RDV2N6d3tuVz4hMmJAWGwpUGR8d1YwcjAwRGw2Q1M2JFQvaF1FSn1Hd34zRkZqPDNIK08qRCs/TjcoIWFLL2tsQDBJLHJJbCNUZCZXOFtUe0AuPGhN'@;
put 'RjR5ezhLVXJdK0slSURKQEc8cyt4WXJtXzZkZlk2alNsLCVfW2x3d3lKUyVCJS5OOWZpUmtHMlU4U2FJRFp3ITNxeDRJbU9gT2hNRk54IXpRNkwwV0J5WjxidTd5OHAubm5XYEdQaV9DUWRKKz1ja0sxe0gjWXtLfXMxbCNCVFkzKHJ7eWgzKHJlNnZGOXxiMTtLWnkzbVdWZ0tKZXs/eyV7Jj8q'@;
put 'TTFPZns/cnlWckJkZXVleVppQWU0PFFsLnVJKElkUitMX20lOmwhKD5tO0RXbnUxeGI+SW07fkB9MzlUVGFAMWdWIl5EeFZ4YGF3eVszfW9AK20uPE0pPSt1XTxCK3wqcGBXX3FodT5GUHVMOEE7NlooM3YpYVR7VWMoNzN3cGg3KGtnVXBaKGFibmRNWyNYNTwkVVMqM2U9KmE5S1toZi9vTVUh'@;
put 'Yn06UDJFKE5URmQyfGA8U2FmMUhPT1d2PCV4Ikc4VVU7Vi5zekE+UG9oP3VbVDMhMDA8W05RcEZbfStRfUAwTnN4ZnYxT3czJkNdJDAlI24wVn5mR25GTjguSVZqS0BSPj12bzgocz5PSjowRXB9U2o/LHQrWCZsSyIwPF8/UDtsQSttYXNZejBOb2RXI2U8dVEsNilYe0YpMU5UP30mU0wjeVtJ'@;
put 'XXk0PkQsN25EanBGV3xGfDl8cGZrcXQmfnNdNi8vaiwrdHNnW0hRR0w7KDVDNXxWVD5FbDw0MCZBZTlpe2t6NjRoP1B5fXt3W1Z3ejRdLil0WWokak5KYHUlMyViWUcsZF0+WGVYaDA6PlhaOnRKJj8wOk9vR2ZQKHl3K3BtR019dz5TOG1MKDosRVJeOUVqMSUuSntfJmQ/eUAiOlJDTEF4Tjtl'@;
put 'MyxJQDJuT3ZlOXBwPUlOYjxNPzp7Oz1YeVZVflFldjVCTCpATVA5SWh3OSNrezwhYGpJVnc1XSplekI8eTpzMiwlfC47aF12Tms6XVt5OE19aXkoLHtDT2gwL089M1opOEViUnBMdTRzbjhrUXE4WFJSfipiaCxPTWpZPVVmVTRpOyM9OzlYZzZaVWNSTCxMWzEvSW91VGpUY0g4WTspZzxNS3E4'@;
put 'NzF7WHQ5QiFXJHcvWkVIOE5vL0wqbkZ0Km8yQlc5Miw6VGtHeD0xT3EzSWxLfmBrMlZkRlFEaENvO3s8R0UqRjpTVDlBSDYxW0l5Oj49UGQwRmwsZDcsODs2VnVyYjs0Wjk3dnI4Rl9BY0s+V3ZpK3xvN3txX2VufW8+aUtKfW1mOHg9bXN2fWhQaFMoXnZQZ01nfWJIMiE4fmgzOHd+TT0vUTdW'@;
put 'ZjlhV3t7NkhnNDJgdlQoQytQTUlhMEo+cnBNLyZha0EvX35ycmo6alE7NFM/fFs0KUpSKFJ7XWEmLE5sNnE0L1ROaz8jeTUlUns8cHIoTEhvZWpSQXovRmdyViVWWHopTSRzSGB1V3BWfi4+Q0BzQHFINCJrPF4zZ2xgfHlZRj1ie21tVmtwVShVNDQqPS5kXlhfbVc8NCM0JH5VNDNnPlF6eldA'@;
put 'VUA4VihnP0lUMTdrP2B4cDA0NUNheG5FYnVVODBDdjJ8ZGJjMH02Y2hsZSt7fWJ6OFZ+Ln40NDx+SUBHJHFBJkpKcDBnVjtAcSt0Xy5AU2RpLCxZRSpVdkZAcTk7LnY3MkN4MCUrQ1FgTklKLkRXLF12ZUA0KTkoWnZGQCJJfUdTVXlDL0B2UkxvK1VnS1lGQE9JKDY7MCxtL34+MCw5Qz0uWjJ7'@;
put 'K30uXTJmfHQvXUlZRD9JW3lWIkwvfDQiK1U4TERdVDlfZHVaLEthY29gbnB4JGZVZEt5LmpaLChLcjQmekttbzVbQFUpdi9QMD4vQ1U0QDgzfUd5T25HPEhpO0VzTTt0KmdaVitiOVBWI0ptXTF5PiEhOEBUImRIWWxTeVJde11iI2J5NUpTWHxrbFp4UmlxSFRobU1oeCNOaEx8JTxPSWRkOFJq'@;
put 'dT4vd1RpXSVbTXsmTTlmPi40bWUsLlZYNE9oLzl8Mi5uQ0lJb01VN3glMz52cnpfeVJpTzJfaFJYNWZkKXU1dCM2Yl1Ue09TLEZ0dVJ4XVFhPjc2UnF9UHhyJmdVdk17cFszcHdCSnAsVFVYIiQzYFZSdmw2MTY9JDkxJm0oNzV8VTxgWDVbOG5KJStOOnohVEdfdUgkLHRCflRHQFVXfEhQQFVR'@;
put 'WjEmJTp2OzZLZT1zaVQrLkdeQFA5eGFwOmIyRGhNS0hGZn1XSDx8VDtQc1k1YVdPSU9ISStYZyRZcWl0T1lfIzc8VllaJDp6O2YiME98M00xRWhZVXl+TiUseTl7WD5OeUUzYSVsUT9NeT5PVTA/c3F5Ni9bRzhlMENXQU5GYkFOPzlNU2NSd1dgP3lCWDdWMH4/d087I1g5LjZhUC9OTzVrPzgr'@;
put 'JmY2Yl1TWFFhSCxuZT05X0ZAc1ZiXmo/Ui4xbzY7MnZkJjs0d0tkJlklMzFWa2skWSV2N0hXXnI5Kys5fVIoTSImTjQ6ajZ3a1NoeUwqc0wwXUs0LG1TampVIyNTZGk4Oms8cDl8LmxXOmdhOiU+TTs8fkx1VExKcitYQTVMVlswNDtvSVNxNlNHMHZufkJuPEUzKSpGYEhZQmtjIWhOWFE3ZClE'@;
put 'VnJRd1dXP1JXPTJqOnBwYENOeGwvdXhkcDBiOWlJMncrI1VUK09TS3tWfUdWXlNrcGE5O059XnJiampoISUrZUV0elU5bCI9Ni5gVXowb2dSSTxJJVt6eXY7bTtETlg/KGgyWGBTLkVndmBFcSIsImo9PmhHLFNRO2gpVmExSEBKXitQeXh2WDgvK2d9e3JkenZrLiE0Y3c5SllNJXFNRDtWK2FO'@;
put 'eF1FTno2d0s7MEJjVGdpP0xyMW5dWEJic3J6O1JdNztsOn5sMHJ0ejorcV1SM0V6bTBnTVpfZil5ZFJUVDd8K2FdJT4kMFJuQnEqJjpwL1Z4L0E+bGM1U257d3ZlMyYrZUVQeUd9OEVgazBiLl5NWzpycS5GcHZ+c1NEU1JzZCVMRzdmVVA2LEVVfTByPztnRFQ8Y1FoZEordnxNW1Z+W1kiQCNC'@;
put 'R1JTMjhibiFZdzZscFtCO21RQ0ZzWXlhY2sqPnc8RnlQVFQzQyQ+d3hQRzZPSkFRe1NjYzZYMW8+dUxBaDV1ekpnYGB6XSZQbEs8a11bR1F6ZXJ3cTAzQHxGZGR9JXNLUH5QeD0zeXxEaHEkbz03XiMmYWR1Wzh1TWhvI2ZlQVJWOiFyMD1udXR3MERHMHRQIWxLdDQ1XnFWWF1XcEV1NFdJYlhy'@;
put 'd349JUFvaHpySTN5OXpCVl52UnpBcSwiTTdESWlbSW1uL1Q4WmwpRXpFcX09d2tuYXlULmgsYkZ4ejtDczNdai89Yktpe0BAdDRFPD1QZThtVk9DYSswWEN3NDZ4P1E2K0hVaTZueD80QEMkMSVYbil5LlBwaEx7blQxPFQraG85bGdDK11RcFZ1UV9dTyxSZltNfG1JVEF7S3IrJnleWylsZmEz'@;
put 'NTIycVpZPjlzRFcoZiJWVmI/SmlQd3p0O08iIXxLPGt3QHB3NilnMjVoQ3RGfV5AdkNOZWg2RkglITtGdl1GVWlwYV4rKz4jOntkRXQoY0QiNztnMj5SWUA5QklvbHo5SG1+SVliP2FDRjhIWjZfeUxpM2ZtPSpVemFta3hgWk8kcjBSSypidT1aQUAkP0gsXjhJXiRvPTokZDhsTHVbY2hVWDpM'@;
put 'PjchXSxCe3BVZW8ocSQleS9XU34qfT9paEAvQzp9djAlS0lEIXNEb1dqXTNgVTh9WGgyXy9ZMkNJXksjT2lNKUVkQjYmTGB5b3ZZLmA9eEUzUTdUN3VEak9ARVouNT5PKUYrYy4zRGc8PG5aYHVpV0tsQUtOLldLKyJRd3M0I3g7bUY0YUpAZn0hOUY6P2IxSitaZ1poN0UpcmxgcDJCLEhzcm1B'@;
put 'RjVUd3F9bExXbFZOXjNOLmYmcl5acTs0JiJ3eDVrfiJkQCMxVldNZ1ZuOHpaSFZLOE5vNSQ1cXM7X3xBeDUvdTs7L1h1d0twQF98PiRbdEk2T2clWmtwQXYxOihQV3VjSz1bQXB5WyN0bHIpcmVqYkU7e19dc2YjSD9nbTdNalErOU57P3MqP18hMEtoLjtucUtoJj9aOmFaa05nMjt+VltWYzA1'@;
put 'JmRsaFdGaV86UlU7bjo9en1keWM9blUwcj1GNjRlQ2RvciZsIS90dz93S0dJU1YsJThOIX5vUiZOIUUzYytOY3QwMHZ5SG0oPTZRYj9kdTVuWEFIb0hsI3RIS2EzOiFiOTtsT2hjPl0mR3NwbyFlS0tqeTxOPCJ3SyR6WktYTk08cmIoQihsVDBjIyNreEp2RHgidCVTYERAOnlnT1NQU1dHbFd0'@;
put 'eFRsImdzTENUbF0uRU5mWDhgXX5oaCE0ZUVOZykwd2VlXTBiOyl2W2NDcmMpY3hTYiIlM1plOVAxSTtbd2NvXU00VTN7ZDd4MzdqIS9ZISwoOGY5Km0lY01oPVhxQnR4QikpWkY2eXwvRlswdzZ3JDo3aXp1IXw8QWp6Klk3ZTEjWjksVlFWJm15QlU7aGsjISxQWTlxdyhGS1hrez4kfW9WR1pS'@;
put 'W3l3M3lJNU90aWJOdzN9eypieTVKJVB3bjxGc1RfVEhRJTEjbnFoeWd6T3xATzFlLy9jP01XfjY5SUU9IjpwY0EuLG56aVtIc1JnZ1VOfV59b185KTdTTFliRm46WCViNnk2VFRHcX1udzchVlk+aCJ4WExPTFRhW1J3TFMjOHkuM05vWmVRKFRlQ0N5e1txXy5FOGdlbkZjbCwlKmR2W2FGVzdK'@;
put 'YFQsPmM0U3IrSV5Pd141LE8rPFR5e05lZXh9UkBmW3B3dy8iWTNjUEtgMHdPWjhfLk5sL0JETWk1b05SNSYuaEY7XzM2NjhBLmBvIVlXZyhVZDwpK1FUZyFATmhxVCNqQCkwZnh3Qz9QY08/Wz86SnpHVWVZTW0yJXlIOEsmXywjZGA2altPRWRRKDdxeVNAYSNYLjpASFleciskazptVEcreEow'@;
put 'bVtqI2JEWE5PaUYrRlVURkJZUCxRLn5PXzQoTkEvOjk/cHJ0JD8uWSgwYi5tLn5Pbj9gMEZQTWRvZGpZa11VZVNTcDBKPFBwaypuZVMqMUtEbDkzRT5qPig3MTMmZmcjOEsiSnR9JGA3dnxKZnlPfFMwZGVfaUc/MjVlYF9PQzdyXVEsdFM2QGFgPSpjcE02eGQ4dz5kPy59K1k4aUMjY31bJihO'@;
put 'M19idEksUiRKODlmcDU3aHZ6NyQ6SmJ7eEJGUSlRdH0zQC9IWDlZVV14bDtCWFY4dCZYLGx6WmpBfDZbRCwiZjxpUXNrJGNVWE9jcmR8S1QuMWBbb1FNNDtteVhVT3s8WV5QWjk4TChmZFd+YCJ9dy9oRFBuP25XTmhaUF9NeGJab0Z1ZTJ4aWFqcilAfTtXZkYufTtda01IcWVUbkdzQllHeC9E'@;
put 'XnhIcXdDNitFe2FHaiFrWVN9cCxuRzdpTTdsdHJkR25jNHs2e2N+Nzk0b3Vab3t5MWwzeE85alN5eUZLWEA7SnwzVmNKcEwlT25jVWB7Kyp+V2h4MjVXfEpFXiQuUzdpaHM8VlB8MWdgbzBAaGljSzZaY25+NTdUVEhHPCVVYmBBJTFDcj0rdjhDLixdV1hIdGwpLi4wenFJUXNyMHBUOllvSXVB'@;
put 'T04mS3x4WDsiUnE3ZFJ8IlAjNVs2STwrQ3l2cjNQQiRMcGR0ZXo7U3g0cHp5VyRVMXt7QF9melFONWNBZDxTRUtnS0NZbSNnZEtLX0hqIWNvXVtzdmlWaFV9JFQqTEQ3YT9hV3BfaWtdO3kxXUZacm1aXVIpVCk6MWRUcmdaR1ghOHlBcUMiXXZPcGgrbEluZFkqbVtSN2xbWWNpRnF1bF9bRHtP'@;
put 'YX0yJXg5Qk92Umd6ZHFbQHVhZV9rOUczLl85XkRvdTxCPTwwQU95MGpGa1crVVlzZDQ5OFNWY3dYUnMxQUd2cVQ0MG4lQlljODUlQnBaWXpuYy5rYVdHW2c4bnx7eCh5c2REWH5NMkQoNTdUYU9GPy50PCkqR2VYR3QzQ0ReN2J1JF0pZDZHJV4hKWoqR2wyKEdaK3FTWikwLkwqKzlRXW5xRzVE'@;
put 'eCQ+UWswP0xWO29QYixUXXtgXm9dbC4xLHlmK3I3dU0jPHYmI0c8blU+JHV2SzNwNEorJDhBUGtKKTgkeC94Szwzdi9NXjdQI0hPP2BKaHdLcUhvKGxWPnNTZGImOUtYPEVGcUB+b21VR0BUbEdKa0NkRi9qQFRqJkt2MEM2eHssQWhBNHNVfnB5PHVKRCU+bC5TZVdCcCpFSFQuTHsoQHA7cUVA'@;
put 'RW8zLzZgcGBHK0hAK3gvQEhiMy9WX1ZaMmJLK1RXXmxMVlgxPTZ5OX1SLkVHK20lQUsjZkNadUNGaUJtKUUmY0lIaks3dk83JFthYzNaUjs+Wk9WSGAxKztvKzEjPyNzV1oyYjxAJGcuPXJvTk9ZVnMhLDFfNDBxd3EuKUpqJnd3PXI+PysxcXh8TV90X31nOy8vR1RVUjE6TDFyJFVGTDpMMkB0'@;
put 'cGxWV196YUhaVkA+fE5YMioiOmIvZXQzUThbUk08WmkqYVtFfEZwbykpenVvfHdhUysjfj5teUd8PGYsZz5VTDp0XT8jZzsrWV1QMnMkPnxbPyMoS01AUXB9cXdbRXFpUytta1ZJNHVuS2lLRz9JPmUoUl02QHpudWo/emJvQXN0Y115Szc0T3R4dyxiK050XWBBMExATzxOKHdAbXI1ak0wY0Mm'@;
put 'XlMrbTFZZThtXTt3QWUlMG5FKndCLHJAdz4mZ0dXbmcjTWBtaTNhS0BteEhdZ0s6PipFdGQ4TUhoWENzPHExRDBKcnRAeiRyQFQ5Xy49bW4+NCtxLmVBckV4R3NUbENZeTFnd1I/LzB7OGlzfDw2KTUkUzdBNWlzPSoiNCI4ayE9KlpTMWM4NHkmKnYvPSs0NEtadmxoYH1GU2haWkF5LHgjQF1K'@;
put 'L287bjdPS3NeIXM6ZWhrQ1VPSEoyeXkxTGdIfVAxOzFkU2psRGNsKGxEZXhmPzosI3ZTNCwmN3lMRGpDcGlwfkJWX3slWHNgJm1fbVk/IzBqLCZfcH1nTWVvRG5HfmtsfWZqJk1dUk1JSEZfXl5JXTZBYSZqaWJPIWBRPTFlTFAyNURtfn5xRS5JNzBjQyhVOyI5cV5qNSw3SyN+W0NQMVgwPjF7'@;
put 'KHoodjRlWk1OODRPalM9fVdGSFc0bV89KE07OiNudT1VLmZaLD18eXhnRHlQZW02WE85IWJlQz5iKCVCNHdrLkgxV2ZiXUBHbU9uLnRESmQ7V04wPzplIVIoRkVUMVIia1RrWV4hK2g+eDNjUyVrM1FPQDA5Zjw2PU8zVEQ3b1JrImA6JUl4P3ApblorWHt0dHNfJDQlXyRsJm5reFp7JXY+K01m'@;
put 'VEkzXWF7YnxUOjFmTjAzMW1gTyY+YFdyMy8yRVpIYTM8dnszVDt1NGAySXhjOnVoOjZIUG9GcX4odCFtLiF1N2QuL1NWT2piRE9uZDNyJDlUSVhPMHc4Yn4sJmJHdDV9KDFaVXxWX2NIJmlZT1JNe309bjA7VVt8KiMibC4ySHRUL0trNTdeKiowYyhOVzpQbzNSM1NoWFozfHduRFMqOHRVdzxx'@;
put 'cjBOV201VV0hWTBVUnAzVDRIdFQ1dnVzI2NGTiUkbXBXP31pbVZ6QDF3QE1mVHUkJV5Gei5UOjF0VCN1e00yJU82Lz0+Q081Zykoc1tMcmNsN19ONG47NDF2P003LF5sbXc9eXAkdlYlTjlGI05dQyxSJGpfOzFtLjpIK25sXi98N3BpPDQlO1Q3MkU3InIkTkQlJSpRV1tNcWBhYipzS25xbylg'@;
put 'fXc2eXt5Yz09LGlZT1JNJjJFSiM1cUd7ZCl3Pl83Ql1UKT53K0tvQ2EzPHVCKzxUeU88IlRMJWZOKzwkYkEhWF04SG5aI3VXO0U6TGdwWEVjc1l1fE01P1MmbFsoNCs/VlQrRUEiTkJeVDcwL2dPe2g2WDE0akY+U09fO0JRQEYoXUJ0PCVsK0tsVzJ7N3AhNlAsY0ZuNFFmR3A3ZVNpKjA+MEVG'@;
put 'MypZTFBzS0BQXUVla0UyNztZTyFsPFJKNUpFZyxIU1BybVhKSjJ7cE0pKyg+Sjw1OHdXSGlQSTZjYmNed2tUZ1NGRSpBaCZOLm4zcGh6TlE8WCVQTDxMMTRePlNHbGhrPyM2ZCQueCU2UkkkQ2k/OHhVPW08IS4wSW9dYk1uKTNIW3pddGM8Nm0oXWkmbC8hIksrZ0EzKjF3el1TcFdJUml6LnNs'@;
put 'RVNwUyt+bEwiMkpsM0BQVzp4JkZyLE1tNjBVUVgpaXEhc1lgKiVeTigrckJgTFBNO0ZGfjZYRktkWFlpXVNSe2RMSiJbPS46Y2FyeXpBNndoTC9aISNPV016NkFCZU5CYlg1aThUW0AuLFQqY1s8TnZwczFCYTlOIWQheD9rZylCUXY2bHA7QmI/I09RbjsjaD44ODdSY01MUFl1IzxfLEtSWV5v'@;
put 'VTtBcHs7MlZhc0UlNmNRaVFyOCROTDg1Uyhnc1VRbztIfnBqPjhdLyE0KVdKeDdwfTpAWF5KamMieTI3fGY3ezYrPitURyI4Zno3L2pLRCkmb3NZfi9QUj0zIWYvPSlpcEIjQ21+TFZ+VWQ/JUp4IWZAWFJLKy89OmtmOmdCXkBeUTBTfUY7SSN1TmpjRVlMJHRYTEJ0b3d1K0A4UWIiQ2VNK0FA'@;
put 'USxRMlk9RjU9O2t6Nl9iUWU8bzQ8bGBwZGlRe2NvMUFbdSM7Lj9dWUlKRUJHbUFuZlksckM6WzprU3AuMlU2PlNjUjU7b2dIVT4zVlBXUCY/fD9IRlYxdVV9VGNQKFJnTW1FPm44NylZNCNLaGMzbyRdUzw2Y0JVRW5GYlZsN3BvMzwyeElxUl1NTyw1Mnd3Pm0+TjpiKjAlUDAkLnRpTSJSW2R5'@;
put 'SU5XNVJwWXNmWE5Nez1uM0EqT2EwY28wIV1FKCw6MER6dTJ1YVlXODMkeXVfRG9PYUNjNVQ1P1dJUW1WPyM3OjBEVz0mbHpnPGtmOjA/aS5tW1s+PDgvPFcuYSUsdGFXOWI3LnBRREYhTUcmOj0/RldFJXVjekZgVkpRXyZ5RmBASXxGfTh7ZG9FT2JfWEM4O0RWV0MzXUZ2V2ojdVdJQW5MJnRI'@;
put 'Rl55PnZVUjNYQVNhTGRHZngzSXFJLjFCLn5gYXlXXkpGMFp+VlAhNyxpWWIydEU6MnV4MGB8YG83N0BRei5pbmd0MCE7ZkAyZyF4dE9TRVR7WSVVOz5eXWpsWih2aShSWG4jUV1YWXVVYixIPyhTPVAxOiw9X2tBX09tem5eSHcvZDU0PlRHPT92ZXVwOHFaP29gMitFWG1ZanskVz5AN2M+WUNC'@;
put 'ZyhUO0VGbE5zI0xmfUZzeXZfRChERHByUEZQdkFPL01GdGdPbkhsKCZ5KHZqR0Q8NyY6QGVmbCwzYV52YkcyUV06SSFhcklsWmNIRklieHUwOys1RlM/UGI7QilqMXQ7cXkyKHYvLlNmRkBZV2Q+ZTp0VVZwTiElZ3p0Wjd4bCE9VHtbUFNNYE5pJWBkNDkzMV9TNnA2OVIkWmxRZmw+aWBkRzV5'@;
put 'OmgmPlN3O3UiZHBEPllhc1o2S0UqUWlvMkRtemRgKSwqW0x0O2N9IUtYRGRJQUZWbk43QVBnRktSYD51cHI0aGojaW03fik/XU1xRlk2Oik7bE0zdXZnTVc+Z2tlJUVuM257PWY/dFc4R3cxRGdqK0FsLjxNNWRXQC9adEJBOzIjTTl1V3ZuQXFtZz1nT29pcilbOFMvajlSME4/XU4xc3ZObX4/'@;
put 'bkduKUkyLiVzWkI1Py9zelpyVzlOW1lwNjd3Myo4VTBSU0RXYmRIWD95VXovI1QjWFo8WkFZLFMoe3BxLjdHITA5WVoxcGQ7cGF5NTgrcjJxakZJOVlLcDg5SlhROjoiTDFKU3FPP0NsUTMsdGkxOmwzQU9wSjJCNjpGL35bXm1mbWI+cFpJQ2VHM0VtQmNwZjhHYDZFOE1GTitWNlQrRDpobUZt'@;
put 'Y185cSlkVjQ7eHwvREVkR0pfOXx0WWNMQHQmXVc1OzJWUnx5PlV6c2tCZFRrciVjLHJGU1tRNkZyW2FySmVWbSQiMFVdN2kqWmJAanY8Zis2M2RbU2RgIXpBd1VKclExT3A7a3tVRCg3MWxsRTp9KypXTSVmS09yT1t2Qz1iSzZoPGtoQGBzVjV8cTQiO1UmN3B5emM8bWNqbSN0LHE5TGA7PUFl'@;
put 'ciIkI012SV8qaE95ZG5eY2YqN20oNmF4KCxyQ1pxcmdIMztTb089KUIlLFJwKkFRKUV+X3ElOVlveDQjI3JvaTc1PDdXV2VTWy8rX2lpWE82LzpbSEdPVnhOPXROMEpaalJlaitteypMWCVzc2BkYHtmNyM5KkVBZCUqVXl7L0hxSl0qITVzWSxjY241IzU5Xj1NIXw5JXhHMk1QZm9eSmovYEgl'@;
put 'KXhgR2l5VzNwJWpjamZgfjwyMkJRUlVYNXx5V1IyWUxrVSN7OUVfPWwzVFkjMGd0TVg1JTtaalFNZVl+aEpiOEczWGtNfCE4ISs5Ni4zX3AxPWwxVFdTKV1QYiNmRjklYlFueGw7QFdkbkpdXkhFcDMzcEY6OFN5eFFfY282NWRgP2lESjY4XW0wN1lGNkwlbllFT3BtK31wPyFXLHdNJC4rOisi'@;
put 'OipLIng+e0xyMl14RElrZTw2MCU3SUxHIUR+JGpJTXp8RTZZRSpuOjw9PjxmNXolMkhCU1khXW1TIjhHQj9FKUplUUJtVmQ0M1VSK2t2SmpxMD8jPjc2KipmOVZdRCFlN2w8SWMyWWEwR25NO0RlVXFiYkpHcV8yWzh6PW03X1t+OVN6VWJBRjxDMmEwSmR1MzF+JChXX3suL2dddWdwNihbS3l1'@;
put 'MChbK3UmbERgJnh2UkAjWUtOWHdKTnlLTkY7YEtZS0plXzJLflclUnk2SmteSjE7PyYiKUZZVC59QFR6VltOWVlmTH01fl9ZMDkkd0QyQFU/cT0saSZ4K05TX3EjQXlAXmUlRVpaOHc+XzN3eCJPfThJcjJifDU1RG15YVkzdUsuYSopN3BGeVVDbCVTRVpZITArcmlMR31sVzprcDM0fXtlMiNa'@;
put 'KktZKzQrQzg6NElwIWNZSHRdKFRGc2drME0rc3V4MGs5VywlNTpjWF1tUV0xNmBRNWwpcnRjMC8+OnRnJXdFOE8lRDhlP3V7TmwlclU8UTtoOE4wI3BSI0BNK1NKTHY8JUFdKiQuZFUpcHRtVTtZflk8SjRJQk9aUT94fl5eKDVqQUdvRXlbdT13SWx6eUUlXUU7bGBiVywyOlQhKXlHJmQyeWMl'@;
put 'UFkvQDJubFpEcHcsQn0oLG03JVshRV5ZWGtGXllAUTpLPGUyaEQyfio0I1hKIUowUWMyTk50JWMlK3kmKFNrKHUydSQ/eCouV1Q3O1M8MG1NVTY7Lzp5KCNMfSl1W3Uye3FeKXdPcG9CQENjTnE+PzA2JH5FZTVHfUQvX1RsW3xKOFlYJnR2N2NVZGUrKTtRTHwveHpbfG5bQXB5WyM8QWMhMFJ+'@;
put 'WV8oJT51fW9MMjdYU1tHfm9zfE9mbHBlQS9uIyt3TTJvO2s+MytHLkMmYHwrWVJ1eUh2Q0pvbklFXjptJVo7SVFqKys2S0wjUkl+fWtiYW15WXB+dk5hbTIpcy4hNGhPM2UiOmFtJEckPlVsYW0iNHwuc2c+W2F4P3JCNzkiRWtkRmZYYF0sWG9ScCFFeW4sLjFbMGs5KWB8WDdAa3NAMXw6QUxl'@;
put 'SExLOCUyNiUycTZaUVVbcS4qMUFiSzVFc1l3a3NEaGohc2lkSjQzc1lCdHhbaShfTlhMXXw6MiMraEp5cCped3ghOiUqcl49TlRWMk9fdDQzWkZ+JkRIWikoOCxEOG46OWcsYzc6bE9zR3trQitIbzxyMWhvfCEsZWxqPkpOVChpZF5JYGR5YCp6ZjlQW0ZZJV8xL35zZjhqWmI4W0klW0lYX2ha'@;
put 'QWk0QHV2eDRjRVgvbylpWHtCYjQkWylse3I4RTlaJlo6SG4rM2RjKzVwSUxDM15mXmYkbyErV0UhVnpZQClRMklgXTBXSzE6Y1dvaSIxSWBFazAuISVQNysxVk1eSSJzR3k7UnF3PHw+XXNvI3Q0Z0AxRWtBa01fWFIxdXMpeUFWN1RfQmxrfGpsQWtId3BJY0tnNypJNFVRT0Fpbl5LSGlEPiMh'@;
put 'WzdUTSNIMjA8KXdmfEliKThmfCZPb0oxd0IuZmtnLzJgNzRWPGcjaSE/PHpTWz16UEFDaGY+Nj5nL01TPGZKKEkvNW94VUlOMyIyRnJPeTNoV1pRQ3JJMS5QVj9SKExnbD5pZ3d4fU4zZnEiNGRvZmZPQHE/fn0lfUM2NklbNyRELn1OVDhBRCZeKTwuaVMxUlRTdDN1NmouI24pO19FJC53VV4s'@;
put 'I3k+JUY6ZUZ9ajF6NDo1SCMvaF5menZxTUw7c3N0IiRvZWc1L3ZrMjYuOUx4STEyRDN4RilbJHRbakA/fEZwMChfL0MiJWFrZy9UQVdCNnRdOjtSNENGLEtMdjc/XlZMKWQhS3gyV097NzVaKihxVzk7WjQveUViO0BJM19URWx+b2dfZGpkJT5uVTUjcytyJGkzcGdfNFBXTXdIIWt+VXpWNXYh'@;
put 'IXQzOSgzZDc5X2VkKXBKLmZPeV5DWUMlLjB3ajcjWjpZTTtgIUFJLDpeY1drS0w0XWcpUzJkQk41MXdUVS4uJE58fjosLzg/L1Arb0FqXXxmNiU0IzFVOGE9UFl7dkl3RVlIUUhNelkmUzRzWUVgQzQ9UFV5YWI1OV0wV2s4MTdVI3diLlomPHE6VDxkNXk1JFg5cEJtVD83THAiPTZ7ckVLSENj'@;
put 'YC4sT3IhUXtySTtla3khWjNiZUZZRzBWaytKREcoWlUxMihfaiQiS2MxVURHKHMhKnEuVythdElZQWJ2QHpYdXNIOV0qS1AuY1IvdXUmfVV3Z2BHOm5sfF1gcGcyYTpDPS4uMSoiNXRPYVB0THQqQjlmTXZLQWlpcmp1MmI0WkxsTGpFIjIzaV4/Zks7LGg7fkJgNSVjQiJ9Uk9dSWBVUlIyVkxy'@;
put 'LyRrUHA2NHxAcVZQMU5UM0BhVkxqYlQ7ZDNKYXk5dDZ5SWhSdnUkZys5RldvL1lvOy89QEdRdHhEck5VTER0cCt1YEByI1Rrbi8+MFJgcTxYOksvcjxfJWd0Kz1YalFWOUNCKHY/WDJTdkEoaz9gYHxYWD1bQ0QjWlhZQXdBY1JoQWNFSUFIcj8ocSRrK0deR3E/SmAuYHM/S2BXTy84dU1xWCYz'@;
put 'Jks2QSk4dU1pYFlbPCwlR09Db0EmdFk0Ly5jQXU/QUoxM3hiKW1udXhCK098TFJKO0UoXTRDNzZ6RnJZcmp4VnAxSFVsY0BGVmFyakVzZT95NiVjJFhYNTRDQUhgWVZhU1JOVD98LE99cnNqVkZ3Tko1U1ZXT2B8Z0QpTlt7ImEkT3NqaT42Z04yPVQvSTRsJVhQfj9yJiMsSVJvK3JSLjhuQ2Vd'@;
put 'XnU5My9VOEk9ZiVvZk90UVAlZjprdWxjemc2MnR4fClIS0wmUWsxOFJlSXdxU1pLS0FxJFZ9XTovPFZDYVVSTmVLUlBmaXJWcyoqZ3kkOTpLUiY/VXtSMyNlVnBQZG8iKWUrViteeUwqdEtvWkJ9TGtjRXF5KSVFUi9WQElFRUczQTlafXdmP1NteU9mIykpK2h2P203P29IVFIwMUs5cF5FfHdA'@;
put 'NW9eSjI0NENLOVIhajFTcjhsUiQ+QHlMT3o1X29OO0h1OTFpMHhQU3gvZXAzZVgrd2xpOW5zQT47LHtoekJQeUx5RVVrdDtlZ0YyNCxuZnl0MihSbV9rOC4lY1YzZW1Tbmc7dUs7W0NWRjpvKCswO35xOnE3YWFqSUhzJlRxe0chdlZMSmx9NyhfNFs4KDIzJm5FVWp8OHZQZH0vODUuTltiV0Jx'@;
put 'QU9KSX46Ok9CPFAqQFIycGk3KnI2LjFRTDVjR3I1LD5qWHomV3BoL1E7WXFdQGI5e0M6Tnkodj9Od095XzYhN1JYajlFTXlvQnchOmtBRi9qT0hxKix2dUhLdSZXaExiMSpkI0ZHLyxkZ0s2aFg1ZXVeeHwuanYhY2s2WDYjKj4/O1QpZUhabUxoTGdXUCVNMkp9YDtkO1ZKUEZ5Z3B1ejt2T0gu'@;
put 'aVAoUnB5QHIjKX5Acld+MzhuKXE0RnNGfjJDIV4jJk4xOVdRfjJhJiIkQW9WQGJoUntqYTByKEVefWBKLlN0bV93VC4sMDN0VzlLXys8fXc2JHlGM31vSk5UbiFfdkpqJGZhaGNwVn1jZ0Q3ZnNdU1llQjhCO0I4eVlCWSZZLGxTJTkjQXZTIzRkcTNpMDU0aGJteFJbcGREX05CLjREYGwlcDxT'@;
put 'PUt9UnwrdXthIVo/Kl9iVkpVYUpiS3BTXXYmK2wvQmMzezx+R0oibH4hJGxnR0ZsJWhYSUA5WGYjQEdpdyltNTJROFZUYDBlXyRLXVN3PkprSC43SCFMU248VHpxS2YmdSRFIXE2KUtbYXhpUC5TbGVXaUtgTnxnaGY3VF87VDRuQWVNOTBHJHleWjUyNFEyYC95VXo5bzN0YHNhK2Apcy9tTF0s'@;
put 'bnU4Q2BKfUBeKXRPc357fmk6MDwyUzEjOkVhJmV6Yi5Bcy4sTDd+TypOUUBIb3p8WVZCSkBHcj9US1JWUytfQDNAN3l9Vih+e1JgTkEiSTQ4QyR9NEYjQFJCS08rZFl6eU9RV2NjXjFAM0tlXWNCVF44Uno3MSI4PFdpTWovS317OG4lNDxeKSZHUTJfVGNXPT9rS2F6XiJobDVVKy40dXcoQjxW'@;
put 'SlhwO3ZxZUVqd1tHKDtvWitXRWpkS1tna0xQOzFMJVp+Wi8oRypGJVl8WFNZRUcsR2A+ayN6fl1NMGwvVUpSOTUvZissQTdkcllrcDV5WXVdUTJtM0I0O3VJdCUjSEI5MFJAd0NwKzIlbk09ay9mTSo5ZiJxVzU4MXxoW1IlTiZtOnlPbzkpS1t5fSYvUXBRNmxUJGs5U04jcEE0ZGRVK3VUKExb'@;
put 'MUI5Y2lUTiY4PUdlOylsPE4zYi5kTCV1PWJxX0FuWyRwTGskSiNtQyx1amo9Nk01IllvSG16dDVsRiZKSzIzKCRMJlFbb3FlNnZmbSZ7aE1DJXNNLDNOcj90OV1qOilufWczRDN1IlhVSzRIKi52V052fGU7PUtlV0AzakhdYl1rKyk9N1JCRz85WHM9T3V9UzU0WVJ4SlljfSpJJSpIJkNlMjZ4'@;
put 'MTQ2T0MlZEhoKFB0aFhYJGVTIWddaEY8JVo/IT8mSSFMMyY2b1h7QWVJOkBXbHQwNVtjLmJxSkEzRCFLckBUVSpMfV5QZkI/OlMqT1tCMlo8PH1CUzI0SV5CMiZWdzJyJjlLTEAlWzFVUV5+LldZIlV6cXk+emJkNShkfStaSjYqJip2OkZWIktAX3NWLF8xOyU9cFl+VnZNQDFOX0laXmtBSzBJ'@;
put 'eEJ8P0RGTVYkJEFGRWRoXUFlPlNNKF0wYVtaNVdPOS5kVSFjaF1BVmgmQEclVGxvfDFDdVVRSFlfd3cwZkRaTyJZSGtSRGdrXUtATjFkblMhTGI3QC9xU31HU0B6fXlNYlNRQFlfUTNJeCQrbSgrVzQxI34lfENVb2Rpa0k4YndjU0REQ3VsNFpZUUkibkpLOVVXVXFZSCY+YzA9MnRmXTVmT1Vu'@;
put 'ZmR4ZXxOYjpqVihqc10sQWhGanVRODdGbmo4OjNgO3MmTigiLHEoMzJPbkU8LG9XVTF8QFNfbXwmQHk/OURdM1gwYk8jWFo8alNSM25XL1hhIjQhUHQ4ZmZzckR6KlYsd2ljTmVtZCNiY2pkZCNiZjpiVU4xZEEjclA/cDZKQDdyfkhbVDU/dzZjKVRMK21BI0B5YStJQUR5NzF0XTdJVjZ2WCpL'@;
put 'WFhAYWRNP05KWC4mV344X2hMUFc2cHlMNFRnRzViUXVOVkBORGN2JDMhPXxzTlEyZUduUTklVEkycVlkM3xUPixHblAsXn1DfEVmPntbNikjK11MO1RbcCk1X3ZMU2hUfjlRbDtsUjlRalJvTElmRVZDOn07WiIua1FPbygvcEc1SDc7bThzOXpVfkhpUjhCImRsazYyMyFfU0JlRDgwNnh2KWAp'@;
put 'dXM2SFNdJks5eEVRN21yVkFVJHdMSTlfN1c4KClWUFM/U0RCY0t4JE0yO0pCZ3p3TlteekwwenRaOm9+a3tmVVJgPX4kKjM0NS4lQl8oVmArUFhTe2ZOV01CTCFaZ0V+Q1teRFcrKn44Kno/YkxHNi9ReXs8cEduTTtzeDUpe3M6SzFRb1JNcTA/I1JdMzZBTDNhSGtPPGomWyZJbyl3NWVqaE09'@;
put 'MEM3WzBYK21oOFQ5SzZrJFJuXih7Ty9ya1pvZFtDOWApWCgrIjNYRlR2RioiM1ldQH5oKWh1c1kjP05XeTJ2QzA/bypXcmNZQlV5czJ8UEI/NHNTR3M3RXMjRTxraHxYJjY5eURXdktXYkF6L1toRipNb3ZBSEVtNll3JU8yQ05pOSxjTT1OKkprL3V8angkUDlMU2B2KGpXNVNwTFRwR3E3dTMh'@;
put 'NVR9L2s9RmBjfFk1eH0wI2pmSj44UWJ7PTZqO21LW0FoQVRITilnQWZHaD4vYkcsckpTLm4vY0woZy4xNmI6bGo2aHtGZk1oaXBLdVouOTlTOE1rSVYsRyViUlI4bmhTX0VDenFCWU48MXxCM3RRREdqRVpMTldEMnh9YExkc0Z0QE01Rl9eU199dn1aQF04Vz5DdnVNI2FGKzk9ZCVvZkhheG94'@;
put 'UCNme3AwL25gbk57RE8mSTYhKVNQVXVae2RoNy85dDdmRD9JVVdKenB5MXFsekYoOG5lWTFZKGlna3o7a3YzeCJMeiZPbyU3bXA1N2xFdHc2S0VQbXpQJls4NDM2SUoyPTY0cURWKFJuUXNqPz19amQxbmVjentefSZfODcrfU8mTyR4NDZaPmQyaCUkK10ydD02LyozVGh4IVdSPWomLD5jKWxv'@;
put 'O1ZTQSZ3c3JDc3ZbM1B7PzQkUyVjej9rT1IoKlVCY0ohSG1nNk9sZmQ1dTlmNTIsbFJyMSRWYSRILGFSdTBbUzBvbCJBa2JFL3NPXkJZdlM0XnlVbGF3RCg+am83QCNbbyMlfnBxJFZoVWlWP3clYkh1NEliaDY4Pm9Qez1nYHdIczNfSH5nYS59d2EwIWo8VCYwO1t4RV8xQ3lHdyI5PGs0ZXZN'@;
put 'TjpJZG1wWE0xbTxJOSpnQEZLayRBdk1pYlRHMDw2NylPcHQld0REY0Y5QU1AOSVzdlRNSURlK3lVOHNdZHImbHlMcm0jcz8jJmhvMjNfOG5DS1ZxbU0pUnpMSTljLDxTY0s1PkR8ZSFjUyJucUgiaUlZSCY3ZWRgbExWR2swMkVjRFNGVUU1cTNDS0NQfENzQV04Un42bVR8dHA9WV9UcFdnIW9b'@;
put 'ezlPSl9EfikzVSImb2tOUzBMdCZvcE9Nb1ZxQ10wciVEKXkyRTZxTVR1P2hGOm5WaVJeeVpaIWp0VChuWXw3V3NMNyEwWH45RCs5L0VBRE1PLkxOZSFWJTBTYmAkSzhYcGhlRmpPbGRzT2Z+TyJBND1Qcns6JGokSFB5JGYkZkoxVSpTckVqZDdLTXdIQVgpMkhqbHtuIzdkNFVCKVZ1cl1RJEpW'@;
put 'ZmRuZV9ITz41JTw3IWYpXiU1VXh5byI0dF1lWSZ1W35MKHRTfjguVnVOe01OKHVTcm1VTj5wYlo+ekw6MzYxUGlPdGl0SjN0UlJZeGZtZy5JfCplfk8hbyJDeilYIixPP0RfdCNuPV0qWElEfClZSWdZS1IuLGdUUlUsKnVMcyVFVV5EQmApbUI3fndfazNZMWxfbUR9am5kdT84TVg6ZDw6WWl1'@;
put 'dT9JUFBFVWVmZVpnMTVqLnJ1RlhreU59WTgxJVReQnB3RXFTWTtGTHFEOXdFRkdxZz19X1p4ckhmJHlGU3ZiSGdKbz1QLl49ZTs9NGxMVC9HPUU8ZGxdMDJBRCg1QXdvLCVqL3cjK3Y+YVE1Tn5EJk50fmw4dCU1PDQvd25YWio7d1t0UWFPXUN6QFtxMyxbQjxaKyEvfnkyfUciVSE6M2tSXyk/'@;
put 'cz8pbUBGdGlnNE1xSC8kbG9fYVBJIltCQEFGeEpnPUp8SD4kakgiRF4oYEhudnI5JlJHeTJzZCpWJDpvYj5sOTUvaEIranc7OGs7MiE1JkRfS2JmISpMJTtCQDooSzJfXl5Ud3xiIiEoZnk7WF5ASl17VlU+OHh3PVttQ2VbW3ZkczlFLixNXW16MUI/YCZmSDBXc1NPW1ciLnhYUTc3diZGLjkz'@;
put 'RUp3YDR4fiJ5dzdYbzwwbyteQDFMZkI1Y21DMHt1VkAxXylRd0MqbjdBTDxsIUtrJHUqImFmdWVhZE1uYnVrVT8raCFeXUlMcSxRZHg0bWk5fXt1bllJdF0/YkFbJHd6MS5PZ2tYNk83aWtqP1A3altuKjN2aT9lRiVYIiVIWnhhS0dhU1JzPjd3Yj40dERXUiRNJGhaUGBtSFk3WkZzajlsIm9k'@;
put 'OT5JP21mQU8mJStTWDU5b1VfSTtDU2MzQm99LFN1JTRpXllBM1t5TE5LYE9NQGBMK3A8bVBVTHEoQjM6c0BzNihYMkYqM09+bVlSMnA3TCYoZCNpQWVCOEFlQjgpaWJgaiNKbGFbOU47PC56ekB+UDVfND9iZGVCNmM3RE5ITl0sVkdWPkkyKEIkXkhqIU9WV01FNSMxP2NfRy9yKWkmZiM6dWNg'@;
put 'PyF3PDxeMVRhVipyNmFWdTQwRG5ScnUkUzJFQ0EwV0JBM25FTUxDXUReSjprcGAuQk5KZTh6N0NXZDJ1QzRPPmljRVZFQUFBQUFBQUFDImVHPCF5Ry4qXj9GZ1FlWlU2aXI3I25BVTxvbkdZdU0jISUsXmI5Nk96YF5rRClIOFh1djYzSGA5SG55KnFPUj9pIWZJe2xDdzY5d2pVSm52d1dsV3VP'@;
put 'Tk40cmJwM35mNGx2Wk5GVmI8SC58QE1bT34scW9zWFYkXWx0bTZ8Rll8K0F1Tm82cVJJQEZ+ZUh5UmJ8SjdvOmxDM1pYZzcrc2BxbjQ8Vj1KYUZ1VCkyc1hKbWo2W1tKIjE0UyQrRD9lVlAqWnIsam9NTzVrU19rWld5MiM4VUc7N3M5cGRiX2diQlpnSFl4T1lhRTpFaVlCMlg4eXNAaTsqZlYs'@;
put 'I1lWO1pKVnJMVU05bnNIcGhoM2BvWTxPbWd7Q1lOVyMmLmBFTjBPamBBQygjeWd1I3kvSiIjIX5dWCRmd1U7W0BMN0RdUXc5Sy9JTixPQjwsaEpRUz5Yb0VbQ1BKaT0mRkkqSWB+LytFM0dJW1VCLGNtSFhGPyFRekNHLGxJYz4qOnhGUyh+Q0s0eXtSTltEIW14OSxfTndbSVtRSD4zKW9sLHhT'@;
put 'c19hbWh1ZjRzYEZiWjNlM2ElJlpTPlA7eX4kNFpXT09JTnpEdUI/UGw4RmZGIWB4fGlHdXcjISR5bW9PNTBYPDEseGtOJTxSOVZtUWYwPSM0UFVVaWVGM1NRNFsrNnFnLi9iWXAlX09Td2pFW0liKTgwSSY0WSVOR24+TkZ5aGVWUnwwPCIqKkk8azskbjVtJGx+b2pPWm9bTzF6VVZFQDVYb3pa'@;
put 'cVAua1VbRmp4djFBSGltK059WzVEd1UiRUo0VnU9KHBCb0xTQX50Z0Z1UTVOPy8zeGYle3gpanV6SjA9bFJrK2FGYUVwJFg9OzN+fD5gWmlSdlZza1EwVWA4OnhZcCVfUDpJbiJRZmNyRTAvS3gsWXImSi83TTRVXnkmP3hdZGkudG5aaHsqe09zal1KSXwlWHMwXyFNeXhyVkdXYTs4Rlp9I19G'@;
put 'TTZoZXg1OEdLWElITTpiJFl3aTZrWWQqKDVaTlMvRltNeSwlOX1JeCJNQFtQRzk1em4/Kjx7Ojlke3lKWyRQKFtCRjFGRVRFeEdMMWomOUgib1AhcnchRUpdW2N3VTVdKyU3YEdENlhITDB6VCNddW00JWFdKUVIdkIrPldUYHhJIyROPSlAOnM1cUxrUmhUUnY2U0k1UFgoPCxNM0A1MF1zUyV+'@;
put 'XnhaaFhCTHlfImtYRWFVMGNGVnlhcUAjPyVEV1RbT1RqTFJCRWhHZEpPTW1OUG5dR3tzP2NMfXJ9Pj5gODF8XW8qZW9ue0NycXk8cnp6bS5rXz0jUHZiVH5mIVZkOnhrQy47d2JpMTZRanNVJTlrZ0BWdU95OElbKyp+Kz5LLjtmdW4qTCVASndgMHFfanl0SDRYYTlNWktXcFRdeGBoY1V0elF7'@;
put 'L0VnOF4ldzJFN3NAYnwvN1c6MiNuZmEqYUw4YkJ+PnddJk9URUx5X19WXl0qSl5leFpFeVZYZ1UiSDlXVGpIS0lNSF5dOS99aSNbYWxDJjAoJU48TTxJezNMM092fFFNJkgrXTMjO21JW3t2SVZ2Y29uSWpmP2BNQnNidTByZ0VnYCo3aks1YiR3Uy5PejpgNGckNDApfGJzYjB0VihPWGt6MTgs'@;
put 'JU5vfixCMGk7IToqcTI7OXlFITp9bS52eXU0OjJNS25RQzBTRUF0K2hKdnU+OT1DJlRibnUjfVckPnh+akF3NS50bH5wb1B0QHZnSm5fRXBgR0JANiROTT9ELykpcnQ1eHNLWyklOk0qbntoTm5SdndlUEJscmZ3M1pySiFgeW5xIj5ybHsyNDUvcHdvIkdBPCJzUzF8K3lmYDUpdSNHbmljM009'@;
put 'amZxOS8sdTt3RyxQNy9lPlt9R1s9V3tdKVBvfDE+WkEvVVVAdyVPfS5GJWJ6WGEzTCVtd3BvPEVSI2pFMUR8IUVeRW9rJndIalVgX1J0S29JeXBTMUt8PSpFeFRVWUpzUmg/ZmlndFlOOVI9a00iVn1fck1LVntte0NuLmZGSGx2ez1vdnRDIXtxIXl1TXAzTlA/ZXZvK1NXQjNUcnx5L3FTeEZg'@;
put 'bWNUW1tNeHo2UTk6ckN5VCg9XjhNa21AflR9SS9QYzp3fmFyaV1vVl45YSJjIkxSTi9UZH1BIlVZNXA9Pzt4VFNKXX5QbDYiWCIoIj5ZZzxfKUhKOHQqLE9sPndIRCY6QHF7RnY+S2RfaiQmVFlBO0RXVz9jP0RhUGI7M0VWb3hGXk9WT0NKM0woP0RmY2VEfG1TZkJxKSV0TjBDcFgoXkBFUUdQ'@;
put 'PVloPXBIMUFYeVEsM3pLPThdP3ZRPnksZSxkby8jMlpHZGNWTkIsTWB5aWIjKT9NTExXciNVdSxKOngoXUBKSlB0Y0Qpaj4jK25WVXg8Pkk3ITNpYXtdMHsrZGwzL2F3a1glaiVUIjsvKzd8bGIvSmB4bmtmYC98ezRXNnM/QWAlezlSNSpdUiZ+TzE0Oiw7YndHSkdzSlpnWTxhIzxNTj0oN10i'@;
put 'NWltcU5JXmxrfiVPT2t2TV8ueUxPLlZ5KEV3QEE4Z0dhIz1LaHM0NSx3I0FwRnROZyhPdWU3KGZ2eVJjbUN5eS9iempYMkZQOVBqKFhQaFQ/NyVYTjFVanZgbk49aDA0WT9PKypMbGMiUm5GckhHakIoREVYRDI9MWRvOnRfTypQQGYpWjdZYW49RHtWIWFPL2F3ZDUkZTwwV0godF4+dHVWYThv'@;
put 'TTZHYjIxImBzaiI0ZX5yMCYyIUtQdnBhVDpqYC8ucUUvR1FHPkxdSWRqKjgoVC89UkdmSE00QjhwKlRPM1EsfWl5OlorVGcvOkAieHBzelNge31PSVtZfVcpTEJOe1B+TiMyNDc7cVNJPGhRY3p6VihBajVlLE9lUSNTdX45U2NybD9WU3dMdiNbJWFDY1J4aWBVLFNLbyQmJSRrOmA7YC9kPTw1'@;
put 'PDEuQFhjLGo3KzNCSyFsOjs/Wkd5KypIJkpNXy9mcnJ7QHJfOypLJWo5Ti9yYHhtNHw2T3FQISVNKHNfejJHMiNHZXtDNzhDbHImZ1ElZ11qVUZVWGdCO2IiVyUlZzg8LEAkKnh3d1NyOGguLCY0Oyk6VS5dOlBqKU5jM28iZ2ZfRiN3JTQrJX5BMG41ajFrUGxHYlcqa1FneEoyPnZFZjJDSk41'@;
put 'WTN5M3hVa0kzOCNHUFE8b2VLc2lEYTZbIWFfZTo5cz0zSHJESDNjTmpwSDZ3cipsdG9fZ0RmVHlsdSxWJiJBQCptYjVbaDhILGs5dmliJWd5Q1ZpT3E4NipYeitBT1s/S2tiMGJLJFV4WmNsbENlIXl8eTJRfVY0NmtwUHJXNDh4RTtKY2J2Yk8+bzFVVCNZd0c5QkwrLnBfbD1+U3E+Wjk1UF9A'@;
put 'W3UrOTQjNzZCPGJSQVlYKHU0ZUt5QF10Q0tGJVduRktgR0Z6ajMuWEdlNX56KTBCR3xVJVdWQSw5REBIdClQQz55Xi9DSGM+Yy5lSHwwT3R5MVR8WDhRVGNIWVhRLHd3VDN3MVNaVWI3R0NlYm5XXmxwak1kIT0jU0xNe3Yuckhid2xDREwpfFUjT09UOjovWkJVRncpVGA4USQ0Pmxqdik7Tmdd'@;
put 'T1VjfXJmLzVtY1tMQXJ8b2E9XjZuemZEJm85ZXgxa0lecFY5N0ddRHYjQSo1Vyg0O2JOV1ptR3dCIXdxT2dMfSpkdjJRYH1DZHEpWio6bVpJTnxBQ3c8dUMzKGFmQi5GRHVmaG1YQGE3RitzTi9MVGNTcGQrNmFwQVJDcGlXQT85cU5aVTpjRzJ7e3hKNE06YyhALilefGtoQit4eDN9OmB4OF0q'@;
put 'T1JDO0tOKFtXMXs0UUVJMEdDLzguQE4iRStHQTU4dyhra1dFWVI2ZGRPVjoxSSJbZmN6ZDdaNEpsRXROUy8kUyRhem1PeXx9R3UrSlBzfnllPlc7fTtza28lbChgcG4uMUwsN09lP2FyZVlVNCxxTDUlIXIsSGtiZ2s8VyNOcHtgPmdgPHZfRCFKeGckbFhGM3MmW2gjQFFDYmhXPjZANUtWcXlV'@;
put 'W2twN2lyO35HI1htJjJkb1ViU1tMM11PV0kuVjB1XTldZEEmeSsqUCNYRyEoaDhiLGdsSD4yY0RCfTlKXVlENyNsYERRMld3WTxWNWdxS0RbayU1SmNwR01hem42TiRJaiF7QGdTYikzMGwhIyNGXzZHN251KFdQN2RHbFg/XSlvMTZsY2RCOT14OnZHVyx9aVImcS51c1U8TDBed1chLD02dSR3'@;
put 'fSojYy4rallBNks0djRZOCUqWjE4UmBvIyxIajRuJip0QVJVc1l5OkY3U1s3bWx7b1l4SC93N2w3bl1vans2cXl+bkhdaytGbFczRypbTHdDZXJTVEhjT3B2Z344U2xoZ0lLI21tVFh3Y2olRlttYW9xOmZfSTNSRUlGfVRQanEqTiN3IXdbVG1LfjgpXkh2aDtSYTlsZEFDRD8vSW96TlckSFI/'@;
put 'blFRZDpeeVl9UHFJTyhiNV1mN21wdyEzJj1DPVsvJXxmeTVqYVhNJXxifUVMaHBbNyJNNTlRI0FgYjdtPkdfRGZ1N2hhJlhMVGM2UTxXPFIvIWc6X1s4bVVqOixVSG5ZQFcqYnlubWJbTVE5ZFBHMU46fT5GbWdBQ2ZPeS9SM0l6OXBEZGlMaWBRQGZwWDM4TVYhWjRUSXJzYD9jRHEsUFJwVD4p'@;
put 'OyFFeTExMz8vXjRdJkh7cFNhbncxQj9GRiteP0dXSFtqTHkyVjxYY0FkcUhzSyEwRDtJdTN8cW1ddzFDVC5TXTplWHVpdjQvdHNyb2leM3ZAcWtROSFlYjkmcTV2SVtHNE5iejFDT1RfKVdYZH1NIkBDYFNUKU1SV1NkJV85NndeRyRVRWh5P1VLZD1mKXRBS21JXkZddV5yJEk+Nk4rQEQ8ZXMv'@;
put 'Iyh2bCpTZX5KP1ZEaHJ1KUtncT8sZHIlbWs7WHd9ZzczMFJNeEozNG4mR0xRfUVxJm1OKGtFSVciVStQdCp8VmFlQys5biVhZzp2bT17WSh8OjNRZGQhdEdFLnk+T041VzhTSy5tMkt1cFBAZEkwTm4jViFsVmRpcV45MlopYTg6O3BeRih9UmB+RyYhbVdXWHo6SFQyfDVCYGd2SlFmfChIM0VT'@;
put 'M2ozeylRdShkfUE8cWdXQHFBTCpsTGxpRWslbGU/Nk5IRGsmcXhOUD15MUJvfXFmVV91QmNlRzRCT0l1dnxYKDt9bEJ1ZWlPWD9FNWohUDtlSlElajJQQCljfj9oQlBffTtxRjV9WHZvVT0udyFrXz05OzBLek8ybChIRDJORn1LaGp9aEFnMml2OzgjPjNUe0VgQ0ltYTBsQDddO2VxZVd4a30q'@;
put 'czxBKj5XYSNRbzAvLmtAIWZldyYvYDg5WWpyYn44e2o8O05gdn11NX15YVs/MSZ4VDN7Q1FPclJuPFY6fX1CaWk7W0tFJjFbb0ZSOFFrcUh3N34rYTksd2dsOFVHOy5CZ0dWL1puezhGTEdecjI3MWVDXzhDdGMqfWNtMVZld0UhI2RqeWA8STduZS5TTSsxUT4wN0BrO2VfeF17akxFOWtmdiRB'@;
put 'XnwwLk5HM1RjKjNoKWd+IkB4LiQmcmpueypdJDl5bjo4Ll5DS2NIdFZpMVtURUBneW9ZWEcoWiNuKFRKVn4kQ3ZOXkl5VntfUSQlM3Q9TjlIfGppKyxHXXc+K0RMfD9mRXxVJiouSHxoL003NUBocDZuLF1KaDQqdiw9XSwvR2lEen5nIXtJUCkyUnsyY0lxZ0t0fVlOMSpsPDBiNkxHViFQYCQ0'@;
put 'Z3JqTDNmdlc1TmxeQENnWzZ5ZnN7TDF7WkRoT1svZmhCbnEvUCJSWHBLOD9Hb3svRnQ7OWokSkl0YkYoPz8kcGZNYlRheGF4bWQrY0RhZjVNYi9PPEROcixjQWlhRllRX2NqbjhYJF4+Rl41QlV1QD8/Nytke09IT3I6dCgpOXA+Ij90YWZeZE1jNEIycE1fTSp4e35Icyo+JGQwcXNVU35sZTsy'@;
put 'MyhGJWxUd2xMaHRGe1ReJHh9NCU+Jjt9P01TO00kS1pScyREbTh1WHRtM0Y/aX5EV0UjNFleeGQ6aSZ3V25sdV4jWG5UOGwhPzczNlpiIUpGd2cra0B0c2xESTs0d2c6bCE0RDxPZ3gsMkdoSjdJTXJmPjxZZ2I4OH0sQTFSZGtofGgxIkkwYFphdVgmLHB7eyZsPW5ZUm5Ja2hAZy5eeG5UPyNm'@;
put 'bmJjdWQkfDJYKHBjPCN7YS5tKHFkKF0hLkIocDpXXVQxXUltfH1ubiFbdCkrQUtgcEJfNEF8Yn0rXk0iKGFIJFQ4fDcmMmg2bCtjNDEkLDFtWCwkbmNPc1d5KkoyY20+bjYuYXVlJis7XkxQPlh4VH01MVpWY0VnSXRqfXUvYWwwOEIzQzxlaDNnKX4sMHJgSVhTKCZ2SyRLW2wwR0ZlfmBeWlgy'@;
put 'PCxzajBzQyZUTSxRcW9eXk98a3UkS2VAfX4kdytWeyQ4Nl9oa3EmNDhwUDtPe2BQX3ZwallIdV1heyQjZFFnQSwkWSxLaU16dyNxXUZEc3UkYXl5SVpaPH0vTFUxaSwwQC4jWlY6QE4/RGBFdWQ0dU1mUU82diQ/UnMje0xfay9ARzZ9YyEmTCt5eyg8UUsjajcxRyIicyMwaUNZVG48aEtOZ01x'@;
put 'SU1FJEZOIyYycHFvUXU6YGBTcXUvcDxqR3ZTQyZ9ViIvXnhWcm9qJCplS207diliN3UpemY/YzR2fj9FIjcvdGxHbTR0W2s/On5XZVhtWW81KUsxYGdkKjNFWjF+TkR3Wzx5alUzWltYWDlaNCpSIzNafSxWKmtIaiIjNC9iRVA+PTA3IXFgZmA6TStJfSVuTVRiPlpbNX5aT29QNnk5VVZoIWIw'@;
put 'Vk5PbH1GdTN9MWFJKiVbLGpRMkZVbXhuM2xvNEZVcWBCVH5XPDt8IyhILlMzWkYxN1MrJmhzVHVmUCt7WkU0RyVNN3VmJjR8QGh2ejI1TVR8TEx3RkJPL24uRjFkQ3NdKSVMWVc6c2Fdb3ZnOS40eExgYV9+JVNJNG4sJSEkZCtuR3BYODtUS2Y5Yk1qe0BbOUI7Ny88ZGFSVm0hVTw6VUMyJFs0'@;
put 'QDJMUSJ8MjMqV0N4am8qYHhkOURHUi9VSzc1Z143VEA4XnN9VEdYMjZDYUR+QS5JdHhCNVVjUmh9TzdCNHBAOzRhKHokSFskRzBdIz5IfT9iUSVCMCg5K1pZT0RCUWVMZ1VnSkgye2lsMys1dktPTl8oTi42R3Jidjh2MXB2Ky9mcSkxfWhXUF1MdFs3JmNtMT9fUy9SOCN+Uj9FU0Z9Ky4kOngy'@;
put 'MHBrKHVfLHVBa1BlYXxrNlF3ZHgpaSZCVV1AY0NQVXhxPkxAJlFWa0M5RUw1KD9IWVdAUEB4QDghcXA8TWVTb3tZQnhFNldaQ2BrR0t7IztbXVkvYn4oL2VvaT0wKipja3tqVnQyZmtPTlJeKGtuSVlVZ1k0Ymh6YXY7ZlIvVFFzNyVQN3ldNVhtelhYRy55aSpfTzhIe2ZpMSlZS2Y6ZjtiJlYm'@;
put 'MC9ZS0VZZnokY2YhVWREX2RwV3F4dCV1fjN2SmdeNUd1dVBoNmlzSih3Lj9ha0cyaG0rLn5RZC81dzJHQG8ocl52PjAjVHg4NnRFbjNqaFdVcnNeTiU7Wl1genFSWj1ucHhjIT0hVEppZTJNcGl2ISZrKTcyXiZCUiU+fktMQDtRZVkxekB4W3JKOmxfOG1lb3ZmRkRaLlI6PVV9LDR+ISZSQyg3'@;
put 'c0FOUVB+KCY2QFRpflJhK0s9Xmo9WmU+RT44cDt6ITRtInxHZkVLdWJHXk99UWcuQkZbJkJBZGF4TE10JlA7eT5ieDZVaCpYTUIxQXNkO3ZSfHRwO1k0P0x2XUswOlN9YihjNXQzJmx+JHZuOTo+OTAkSlhCJGA3aUwzLCp1Q0kwJUY3NlVaWlNYfnhhKSp8Z3MhLFtlYH1wPE0ramU5WzcmVn56'@;
put 'Z0xhIV8pO0ZHW11FSUV8T3EwT2oze0dXdkNpd3tUPl17MTN1NUt2SDUmczp+QkBIT0pGIT9fMUQxUHM6Zno2ZVkqNVloY34qVClbWkpkI0hoZDo0IUE6bTY4VU09U15KclEuPDJ5ay50WSs9bEtFZXhhbnV2aj1nfEB1JjViKTkvK2RjalFWcENORTBNWCkxVzs0fC83dFI2dSJmKiEwO2RlTElg'@;
put 'cjt7L2hBaUM3ZU5WeWdDKVM3eUxOPS9PJH5TU3dvQ0taUXw0OHQkVm1PXzVmVzUxXzVLTFZbXkB3SzZoJE1YXyZ+XWdTT0BDIW99WjxHeVchMXZdZFhEbWZGbyhVKUsjOTQsJW55MCJ1TjpWJmIrKUYxJTtqRlZPW2JhcT85YjpKVkw4fi9dXVQ2MCIjNGU+Mi4wa05aY3FYPEtpQmdlKUJZL2Ih'@;
put 'OD4rWHNxOyhTez4lM25CLmtnOTQiTGNycTFjJk0qLlFuYUh0UWVmZ1F6OFYzbHNVVCkldiUzKzBHZCVJYm1sPGlxMiE4KHZXdXZXbUJSRzd2L3RxRVpyLjpha1RwL2U3eWJ+P19zTWdFVC9OVUZQWWEzM0wyVlZLMlVSelswYktIPD4qTz1vcChHbiVZX056Py95OTVUbypIdGFeMVZYRjR4cD4y'@;
put 'aUswWFJxOSNNfHl7JntIYGlxdDxGZGg+Mm4yVHoifWBqTDBVOVo2UGZjZmhxIjl0ZCR0MTFFdlg3WFskWEw0Nj55KFdDUyxpZVVlMDlMUEZZR25fd1EmWT84VTZYJkgwUXZ8fGo/JCtINGdNSF1CSV8uPXtUX2NOVyV2JX1jVElzcip8KXx8Rn1Xa10idFZycDtGZDl0TTU1VngiPGg8VzRAbW9h'@;
put 'MSl3PklpNCZBKnBQUXV6Q3dBe3Mycy5qRDRrKX46c3Y/RTdNODVCV01KfkV6QGhERnpQL204YmJ4OzhEWUp0fD5lJTJCPHBwJE9rbigqejtKUUVDUik7RXFpQVRsTlRgbG91I0N6RDYkKFFjbWNidlUlTEtWTnJCT1okcC40THUxTGsmWGM9UmYzVnVUQ3RoM0skfVssNUlDQmlnTEc3ZWp2L15S'@;
put 'aDM2UGVlZ2BaLGhBKDVReTEzNj84Y3xJLz5ALlciaHBWUT97VGR7ME99WCMvVTY8Y0ohcHk6Ml9JSldWczpecmU+UHRgNnRRKlMuaC5ZXk9MIXFsZENnQSF9QitUNlRibltUIVpWbi5JWFg7bn5rOyROLl0ueCNEZVchK15GJkJGOCxARFROcnEyV185LypaPypdY2leTGRwXihVWXpnJHo0UjAh'@;
put 'LnEzOns6cW9+OWRqenZzTSFuLlFpNmtReiM6RTc+cHBHcyl6ZXgmfS4xZ3ZTaSR2SFIjZCtUM0IwVixbQCg2SVs0I2ZDNFlLSVUqY19CITdxI2FlQFAjeWdHTFU/T1IpYV0kLH12XitnJHo+djF4flE5KjQ6dFh0eDJNIX1HQFtbRktodUY4Imw8RylBWlUuTmN7SjFmU3F8I3lbQmVaW1VOX25d'@;
put 'VSJwd0RDfk9gRy8iJiZbIn5uJS40JChiTSMwSShpPDEsNTYhPSJrUkpDN29raHcyT35WKC5XSncyNmR4LldEbWZXQk52R35gKSM0YmhlaXpJM0tNJUYoKnRvNlc9SmY3ViIoVjM1ZEs3KkkzViJOPlB7PDFAbC9qI0ZQUyt+TyojPTo6NV8oM1smJFlyYiZwXnB8Z1RvOlM8PUxhW2NARFQybkFp'@;
put 'PGF1NEFSNjpJIStUbylgVXMxZmkwfjV9TXxgNCxWakVZezd3NFhDUV9sIVZgTz1FMDcwXjllIWwiWD1AYD5bLmxYTHU1VG5ZakJPdSJ2eTpWWlU4dSoiSiRrbX43fT9BOGNSRWdReXZld0gqYnIoR197IjtxQjBJUSo8aXleN1QoekxrX1M8fGMxN3FUcV8/aCpDcGFpVFhlPX5HWXpPRldZbyUx'@;
put 'RUpZbV5eL1JMYDUvP2oudnpBUnByIVRWNHQkcGJFPDkkeH4pPm8majxUVlIwck1JVFUiOyRsQUpySUFWWys+SGB4cC9TcS96O1oqUjImJVNrKWIkV14ofURvJW8kNVYsSSJEY1YzbVAhNy57R1shVyFHeEB0XTh4cURARHJjcGYwTjh4eXYmQGY4XTJ1SUNqOXh2MiJ1QEdHVHw4MkFLQmlRcFY5'@;
put 'KGltWCU+TC9Gbz1jbnc3fiV3RXR1NlZMSFB+eFZ+T31KaSJJOz5rPSlOQ0MxYGZlL3cvV1VJKCluTHhwK0dOK1MkdnVZYEFoWSNQcisjIkBrQWJ8S1k8WixOaFlpalRPSVgoTmY/ZSx+KzBYTntpSHgiMFVISTA8RztaeXQoflIvOl5QdTJYWX1mXT9VWFpiSG5bS3xkYnlDUmEjeTc+ciVjfkhp'@;
put 'bTJdMU9fTEo9JUEjazprYmZVe3A3NGZ0WUFhNyM7XUBsZ2dvbURZOSheWj9rRUI9UU03NGRrYXQyUzY5T0UuKk0jQlhTMGxpZlgmfixocFtfWUhBUDhHR29xPyFWaXVYPUwiJlk+RGw0NnQ6QkF3V1JgLld0TWxwXXNFL1gjdjp2Inxyblo2Rk9ESTV6M2J2XVlSKVFaPExtcFl2UjRzXy8sTFlE'@;
put 'QHluND9WZ28xeGRfK3EodmZjNHpGUFZJdzFIaWpxWHtaMFtCS1AqZjoqJXZKbj03ekJ1MFRheDJOSVlHezhvWWA5YFE8U3BOSmF4KEkwen5aNF5wYm9QYkRSYEdtPCJ2NX0ubnRbTzxnV0whWipaRSxyWDVjfERtOmB4UDNCR0dSZDgjcCpLUzlmakArWl4hWSs0PXs9VXIlZyRqQTdxfWo6fDdV'@;
put 'L1BOaH07RS5TVUlhdT96ZDJJRmNYOCM0UVhaUnV9e2l0UmdJQF9YVGc1MXJAeF0hXXRvIz5EclBbK11KW1V6cjNUKn0pWjguWTZNRS5+bFBDcFZMO0o0QSJubGN9SE9jOFJwPDxsY1RJeEpIYDgmJmY9RzRqOyY3L0k0UiN8NHRUPWt6dFk2OHMkMXJ0a2xXTDgsck5bXX50Y2goSkgvVypKOWMx'@;
put 'O209cV50N1FnQVJGfmkxVHVDQ2ZfdVpjYlJKdHZIVEA0N09mYSEia1FRM2dZJnxxUjFyKFtfIjE4azpbVlJRW3xGdFp9el1edEM8Y0s9WiM+JkZMM0Qxe2IxYm5PTDBWZCNVbExtRCJ6Om4+WTpWSVo1OUo+fVVVPj1oQ2hzcDp7RDxUQyY+Ryw9byV7bD5NO3E3WGJMWnw6IXx8QztDUDVkLzh8'@;
put 'VlBxKHlyfXVuJEsvKVluJChGRH5yWVIzOCM3cyp1LExrUmIyOl9dVSk4WU52MGE7fS5lajdtViQlSXpKWHF1cm4mLm5wKldQISs8Lkxqe3xvUWMsYit8SV9sKkByTjx8I35eVWtVb1F4MDdIPV40bH59fEdiY1FAZ29Gb0xELEhoSzx+cmxmN0VaNFJ1ZU8rfFcmPmdWZCRmMmF3b1RmQlhxeClr'@;
put 'UkFqanhBKyZbJH5eam48e2dNJGFheD4/e3Ypak5QIj5QJUdUfS9gQDBEVjhKbk9CW0JxSDAmezc4cnsjLFV+V1NCSXk9TmE0bU4vJG94JjZdbjAlM3V1NzNHRnFwWClIZDNFcnN9RSt0QV8xT1AwSy5fXVlXZ0xoekRAeVN8Ri9fI35ENCVSeyxvb20uTiJ0JmdXcEEiaE17WlFeOllOe3wjbSw8'@;
put 'eSVWUyFIQDQqUz5NS3R7e11yX1p8Ilgmcjt5bExNfjJjKXw1WW5jaXdDYFImOSlCKnV5N2ReRWBpK0dUTyg7Z3ZAUD1NYU1AeD9iUUVONnohXiQmb3hnYUJoQk9XTm9nJXZwMy5JbXM2OWIqLzc6L2FkPVVmdSMsJWxaYiZ8L3xpZHw3bE44KXRMUXJzW0dQOEB0emAwSU9XPldjPUpgMW0+ZmI2'@;
put 'b0V4IzhHNC5aLjgufmg2cDx1RlghakE6Tmc9amdhO2c2IzV4YCR0XlZYTjZ1Z3d5bldzZk97Nm4pajV7eGY6NyQ6bkgkYysvKUlZZlpQejgyXSZSKm0xVkcpKWk5VjVGMW5+djRDcSpGMTpuZmU/Qktqc3kyK1U2Rzo2Qz5APkNRZilEVnZdWDFdKyt2fVFXQV9CYVBkOmdUNj8waS8lKzwiajhG'@;
put 'KDAyJUQuezxQbVIhR04wIUlGQDtxOzlBSSRkbW5TSyZvNEpBfVA8XnNzRGtvRlU8UiFsR2lwSWRgNF5wb3g5UD0yVTM3fkZKayh5VXd0JVNkTTUjN3RCcCZtK280JXRbZzNbMCt4WDQ+aDQ3OXxCUTU2fWVhajxoOGw6NnxSVFlWZURvUGQuVmIlXih1bUQlJClgVHxWY3RgKDREfCFhTXVbMkZn'@;
put 'NEhyLGMjX2RdeElzOnVDTm9sVUlhUChYKyZVRXs/VzxmYH4jdmtmJkRwJXQyLjMhLm9+PHNLNV1IKG03dyhBTWdjbEA9T3NvJjpSPztmRWZ6VEhdb3JXV1V4eFJ1OWx1TG12L0pHekhSYil4K0Z7KXJ3c0pLfHFldzhKeWVeT2J2PF51VyNrRmt0OXlIKipGL35AZHk8c29VRWQ5a28vKVgrZEx2'@;
put 'R0giNEdfaG0wNjwkaW8we09MSEo0WXciJDFYfTw9dWNiOiRnP3ZhSU9+LElVfT1tPTdNbChLTXVPU1lbQiYuamN4JUx8b210ImdHIV9bPVEqMyRwWENXKX1wOChaYTREXXx5dEYrTjNMOlF2QjArZW0/a3tJd0gpeTFGSklUPlEyKyxARDFoZiQpUXp6RXI1RzpmRHR8UkZgenJJKEgkR19Tam9A'@;
put 'T2BlPSU7WVN3QEgzOHVfK2FzPyUjOkNkQ2kvOzZvcXpkWEAofDM9K0UqYCZOPzQzWDc/P1lSPWpEbnAzdyJxRF11UD5WR2VYPGwxcjZBZE9CQ2tmV0E0NGFwdXkkSyNlJCN1ZEV7TXhrTmxlc2k8fmRySD00YEE+dV8qMXN1XUBCfnxabCgveHEsRGZ2UztfOFdxZUBoP1cjI2QjREMwPENCc09k'@;
put 'ZGc/Syo5X2FhXm02dHk+RG5jT09WfHxOIVpaI2YkdURCcURBSl9LeigifkVRQE91VE9HRUQvdkdFPGVecGt6O2hOZSN7eHxDbSJ4XywzaW0/dj9ERThlX0x1QXRxVWBqXkJXXXhzSXsjemNsLDpOV3ZpciZhWnIib2xzeD10NUU3KDFZKFo8cn46I3BWYUtldnxNMXh7NkVyZSJgUHQjUT83QE9A'@;
put 'YDowQy5+KyNsOEFgR0s+WHN4LHo1RjVSSCFfKkhPZTshSiM+R040QEpIcGEyIUteKDAlTylYWjouLzJsQHVsQlRJMXI1IzV0Oz1qTDNEcTBFRUUhaD1jaWs+Rl54QSxkLGheVzYhe1pUOE41d3J4RnVfN0A7UjJhKkpzI0lJRVp0VXZYdyRDcSJgbmB7WnY/ZWQvTFldMzZYPXpEMzF4Xy81dWIi'@;
put 'b0YlZT5pUlBVfT5CXi8/UDMsInoqP3ZBWHhKPH0qOzQ+bCxsXjptNipmcFpuYEBxLGRxTHJHNVRXKSFCZWRlUzRCdD5mX1Z7LFdXUiRCYixjeCl3IStMKXBDdGp7RmN2PTpkb2VdT1IyUU81NSVITDhHb2ZSWnUsWWR7TDAxeiV9KjtkMiU3PmY4fn5QcntFQ09OQ3JXMXE6SFZMaSlIcmtoeS8h'@;
put 'JG9MbS51aVBTNV8mI312Zl95TWxNe2kqX115bTxaUDYhOl1oK1gwWkNNPGxUbVU6S2Q/ZV5INCokbjR0d3d1PEQ0JW9xKSJbOXxZXW5PdX0xaysvZWgkaCwwMGw4Pix0SSt+ekl+fCJwPDk7ekhVZGt9T24wOlNLIUNeV1ZjRGFgOmApU0UsXVtbNGRMSllFTzZvdlRnS09NJFNoeCVCVTlweE5H'@;
put 'NHteJSw1Tzs8SzRwUTkzWk10dEs5TSMjKmgpLHBuL30mQkJjL0hmamA2QzpbVjEhVXc4ZixPblNKO1FnYDtLIWdLVU9TX3w2aDdnVGlUTUA+eHpDQSM5YllpXlpGP1k0MXBPJSY1YF5mXWVhZSxTZnl2Zihid1RgQCNqZkUmeyJTV1c5ey5fO0NnY1U3U2lUdG8kcjZsMyF0aUwsY2BCXURUQzxK'@;
put 'KXc6XWd1PzZ8PTNWfXh2TW9bSzlgYUYwTGBKOk14R3MkKF5bVzRqKFs2ViFrISZIOS4sayk5NEMsM1ZGWCFHKDJuPjY/YiplOTpZSHBpQDhXOEE7VWJeJipDOl1nVjE9Z2w1WUd2U0h4amNWfCk7cyNgXV5vPU9OL0wue0QoS3lJSTNXOXVUNEBrYTZAeThnWEoxKjQ6Q0AxPT1NOG9tPU1UIkM3'@;
put 'bypueUBJWVZFZj1uUzFNNSUxX3ZaLjZNSzBsYE5oYXhBUTltYnFucV4mOlZRcGBDXjRuPyo6WW81WF8/TV18a00wPCxdPVNoTlR7U3ZSdVViMWNyTG5OJEdwQW91Vm9NdUUwWU9EM0s8OUJweF1MT1hHb1hrMmhjRThNVW44Sng0cTtbcFhBKCZJI092Ny5XRHwzUz53ODluVExxSjYlQUA6YGhO'@;
put 'RjVMdnlTZ3M9cnJOSCZwLFEoSFFGKHhEUmBue1cvY3UiLE8hQ0c3KTNCdzI8PSYub054cT08ZWc5W2cwMi96Sm0wWk4oW09AP0QwLytkTVo5eDQ4K0VuMG84PFZbXlQ2OTpEbHU7dVg1Iz9odnZfMF9iUlUuKkE4KVtKNFNpfGhVOGZUIk5DSnBGSWcrKXk5NzZ1L28ybmUiKVUoZktSbjoxODk/'@;
put 'VnN1ODVaU3NpQW4hS24rUERbKTJkYSspJn40TH0pXlt0Qyh0ZUl3O3FJalE3QCtjWThQN19DUDdRLDlYK29NOU1FZD9oUl52SjdqTGIjJmQ9TDp1UDp9JnRvRzRNWFpSIS9EMEUoPlpARzlGQmtEUiwjL2lqO1txTCpEVnxIVyE+SStVc1tyZ1svSVljO251PSU1cU87ZWw3dX1wJHYyNHEkZ1gx'@;
put 'b1hSbn4pWk47Y0dRbEU+bUh1YUBnQ3hUL1NvU3ZALipuI31qQTJMPTBKVXFhMEJwJVByNHBwQkp7bHE2R2BoN2VoSXVvMzYxO3d7QFZCcilVIT1fV2VEK204Li8wTlU3QnsldTN0NHVMYEVxPlI9JHh8NG1xZXZJIkc+TUlhLnE0KFtnN0pIU31FMGoxJCQkJVs0Xl10SmlefDVlI1IlW0FQa1Rg'@;
put 'dHJvLGpAel9XKEB8Il1QXSltJncoVllVPU5ZQEQ+VF18Ql5Kdz8zdEhJISU4S1ltdFkjR1lYUypAOnM4SF5fa11eRE09OTdVSFZmNmcpWTpaV1EwYkhQbnI7e0lWIVhxXlNlYHxzUHdRIiZ1ZnkrK0VwcjtFNXEzajA/WSV1TzxEa11dZnRVOHZYRER+TDMhRClsL2c0aSpsdHIqZzRqaDx8dTlw'@;
put 'XUhQfmQ3TnNYL2NQWC4kXmdmQnY6KzhdakdLKj8qcllWTF1fU05eSDZxQWkxe3t4Vm9CYUBITHUrY092aSpkOlBYRz51SmQ1THlyNSkuNzlubzt3Mk1MUWhOUnNFYEwsbkdYV09INWRiMjsmd29dfEI8QiErV317N09TNTYoUGs1JC8qPD05U3lBYExHV2s9d0owfC5NdlBPblosIVA6cUFgInph'@;
put 'LjZzUHBFVjczXnYxJDhoMjJOSjZmVWZpK21bR3RzfFA9JT54R2hsb2VdWVM8OmpnbHl7S1kzWGRoLmlvTGtfMEssWEpLRXF3PmthezdIbHJ8fkd7dVhVfk5HaEs3YEpWcyJsbCM5JmhqQEwkdXVpcTYpQjVNaSssYSQ0OC56STRCRDBNUHRrbT90fXIwOWZPKmUqWyY9a0oqcy8uRjh6S1BfWShw'@;
put 'OTgsR01CQStQWFYvKUhed0Jhd30uL2IxZX5aPn19OiwjW2JEOWxSY2I7XnMuY1RAWzNnK3csJDd5VDh7WWhSSio6QDNuMlprSyF7Klp8ZXhPaTN4bWUrW2p6ZW9bRTo6VWdBOWpULn1dJGxKVi5DVXZ7TkBkXmkhUVlbclojJCp0U01eRSJIO1FSNFtQVih0OWcub1VkI0d0TS9vOTpBQHxDVGBX'@;
put 'fTM+UTxtSGdYe0BFKExkeWFZa10+K09jNEh8O0I3TVZWKUo2XWwrXileUyFzMkRzR2RHTSt6P0RXJltgRkZOMlpxc0F3SmJUd2pOcyl1eXFkeURMKWRrbCNuYn41OXZpZjNldixORnM3U3A3fElwN0ZVPklvS2dnQWY9X1F1KEErX0FTfjlDb1NBYlB7LFJYQytiW01CR09XWGkxb2FHMHFqeEpw'@;
put 'WWxaVG5DZT44O3g7WiosQCY6JTVJYjokPzwmbXRJMnwjRns7eCMuPD5xLyJYNjZnUGo2c0QhPVY+VTxKUEB2Kl5sUVVDO2suPHBfbSQka0guVl9bZEY4MHNhfnAmT147Ii44V1A0ciFTLyZYXzdfcGlmJC4ofStnPk1Pc0hbJFkjLno1LkUwPVlhViRWTEJzREJbXUc5PD0/MGYrWFltVjNMbSt0'@;
put 'X2cwP19uJC9rNnlON2UoRGdeeVhPV0NaN05hOykjMVhrKS4yRUhQX1IhcmhkQX1HWSNYMUFWI3MqSjImPTQ3PkNOPVhmU2lraisoTXtHYj1eVDZTMVk6e1UsVlA3ZG42MkZscTAiREt6KEFuOHpsMjNAQEZYe11UajBGejZ4U1QmW2tMRThNd3Yia0xVNGZVYTg/XzZiU100L3VuL05DRWxqVHhJ'@;
put 'cTo6YVNEZjZBfHxKLkwlKnR6L0YiYnk+MVh7LiRORnEyZFA9IWEsdHRzKjVEaDp1IjhPaSFUd3M8cWVNPzF3fUo/LzF2ekROdWpVcCNsPDQjY3JwWiYheT58Yi5kNzElOD1iRHkwS0J1cEwqTmdmaX4vMGsiKihXT3trb3FSQiw/dlUsWDVSZTw8fGw0JjZLb148dHtNYCg6U1s8TE9BLzsyQipp'@;
put 'eGd6IWMwKHR5UDsyTDJpUmJhQit4RWs8MXRJQmdyeXAybnFfcSlkRUYsU1NdcTMmMjBUYnhKT0A9Pks0bT8xP29IUStTfFt4ZC4uNVdBR2Yobz00Okx0YHJjUGx4VVFhO24+UV0obCJQZXsmKSJhfUZeZHVUNSNCYHwoT1RbeUNnfVFLV249NERBZSxUIjdbaCRYdyY2IT0rcGRFRlNifHRoSmti'@;
put 'an02T3wwXkJSJHtzKmBON31TY196d0lxSFk8PHYmIm1bSl1OWHRAa19QMWEqWCElM0FZZTpxK2s9YSF4SkAkTEE/THIpOjhSOihCLl19a2c+WFRxTFc2KipwT2hPO089Zj9BPXo8YlJkPSojdj9QLkBDcEk6XWQqJUp4V0kyTG47TTYwLjw9P11IcXYyLGAuVytYWFZqUFo5fFl3WkBPZVZ4eXks'@;
put 'TjooOzY0Qm5KPVhTeTwwanhHOS41R3d1ckdtSW0vSE4pJilFSHdQOTJNTldNZi56MU5jNERzQy5XbDNoI2ArViMhNHUxOVYscC4yfU52fW5lP0EvN2YxRzhxKXNsfS94TWV4TGEwMXRhJHokX3soJTx8fj1FWz1XRCpyNXRQSWJfQHglRCNQIlZFWWorQT5odE1sXXQ+dz1tQnlkdDh4MkkySzFo'@;
put 'PFNeOCZALkpid1BLOTQhTit8fS5+Wn5USX5ZTCk0e1E9ayo3ZVlYVDAofmp8XTRRc3lgJk14QSt2KXRFMCxUYT5sZ341R00jeyRhVzsjR0hhI3siOVJyczpjdlE8REBkcmFpNmJkL3NNfSt+ZkYjfXFfcT5mM0YwQHhGKmUqdS4+Pl1xdDYvPTVubCtnLGJmYzFDM0hZSkBEIXA+Lk9lXWsvVWFS'@;
put 'VUBGVD5+a3NyZG1vZkJ0eVNgZyV8Ki9VT1h4VjRQPkhjSE5XSWk5TURjYzA/PD11IWkqaTU8OiRvUXJKNn5RV2Q0SStefkxrTVEmdmtlPEJFOHFJdVNwXXglXmUkISUiM1VLMjs+eF4kNTxQNVBgYkRUVHJ1Kl4qIS50IVU5NVVOQWhUYHJ8JHJ5TCJxM18yX0cuS0Z6VFUyRz9EYiUhS2xNamdY'@;
put 'JFRzXVg/Ln0zTFNEX0wkSVdORUxRYzZhJSFfSTEiZ2A4SUpGQH44QmBGOk1MKl03QiRDal84ZGMiUTY1Qk4yZWBJakNbLit9Y30jPj90eytLIi86blo4cCY7STRFNURJKGZBTkYiVlp5ZntILHprKlUlUjJZMjFJTn5QPzVFPkg9NiI7XiplI1FXOzNPMVklXkwyMWJKRUYwenVwbFUiRGJFUy9n'@;
put 'K0xfejN2TGdnUWIwQk1oOXFOYmgsRyJUclVkKl8rU1BUTypBNTdnYHlRWH5dZDpaJihqPSV+U01zNSFHImpfSHxfcUczSSZJPCZySHN8O0tnKi91LHNiQ0FeWlNrZFlbeW8mJXRIRFpGe0QkKWlGZn1fNm9oMDNQLF1+ayQyME96dEF4alNra3gzMmdeNFhUXX1AY3deK2k4RT1DeiF5KzhtREMu'@;
put 'dGR8VnReV1M2eHR7P3guQ2hEV1VCTjguO3JfV2teeyhWWW0yVksoTm9URjNeX2dbMmVmTl9qSzJUOkAyODhHXj92alE1MXsjLDMscChsUV43aTlOZkRAeTM7OHljNlMjZkEmISMxJnd6Q088SGBabX1tYmA/NEl8WEFpYl5gWk1uSio4TS85fDVYck1rNjMzZz09OGdANEBtZUJ1RiVpUnlVT1V0'@;
put 'L1tAJElmYkxQWmwyTD1SMXpZXSR+W2NIRkFhU2hBfjdPd2hNS1teZHdvLiNtXUI9Wko2c11FTVorJSl5aTN+UyR1NkFQKzpVUXBZJitWOHpdQ2JZdmV3SG4uZ0R0bkkwXlc5U3B8PkZreC9zZWUoLGJUPCNVSW0mYTdIb0A2X3cpRSVOZypAYj44cjN1LFJtRUQ8a0YmZTU1fnUmdiorYVc3XkYu'@;
put 'dHdUR0AwJGBHSCJaYUUmeilZbSwjRTl1aTxpPys6SEpLMklsfWZnVyU3QDxZQCZpcDFoYEgwTUdDXXtCPl00Sls7UXd6NC9OKWAzdUs+ck8lVTBjRyM6Y2Q3Yz1xMDxKKTU2PWxbM3BqXWU7QlReZXMuOjdVP3gzWSVwWChRWmJpNk4+M3t0IkpUMj9EflVOSGZ8dnw9I1ZgI2peLlUoZDM2UkFu'@;
put 'MkdpMTdgdGRnKDZWZU0rQHFzN3h4JXFLfTlHaFYzLHIwUWpkeF5jWig0flV7Y2k5PkxTcS8ua3ElX3htNXNqTk9ESVUzb2BsanddUVRAO299OCpWbFleKEpfZjw+LiR9STA8YGRxbi94QHhKQ0lXP1pKYi5XdCEjdWBuQkV0P35xZC9hdEZ5Nn5+Ql5XME5SY31GX3BBU0ZnPzFiVHp7QDQkdiRN'@;
put 'NTs5LCNEN1FkYy8ke2MkYX1DU29KNE4/QDhAfmQ2Sz8kSDl1ZT0iLzxQc3VBL0xfTj4lYCxyMWx1U2oiaWtMQCpCaz5RPGhiKyVAa0VoOTBtRGJiMj0+WCxfM0ZwcmNVUERjdiFWYFR6cnV4VHV1TCFfaUxBYXR9Jm5UbEkpMjRvTXprN210OCVXWkglMGJFS2xIc3toJmEvLksib1Y4MEdsbDta'@;
put 'Y3lAbU19dih1MiwmKD1OS3YmWFtTdWEjRC56Ll5na11jSVNLfjZLK31Lb2g1RWVBYVg8NEx9aEYoSz4+L1prQHFzRDtlTWZSeVNiZmVUSW4hVmwscE9ITTdoKzNoIlcwQmtsMyVqUlJYW2VHT29FcGYoQl5HeShoeng9MVtPMmxEfWE9bE42ZkM1cyRYb0hKMDxzOER5K3RYTHNFKktlYDZMKEd0'@;
put 'Y2NWeVtTQnA+bElJemBwOVpbUnp0ZX5Jc1dHRHIob0ZrRGovQkM2eih4UWp2Y3EvJDhpISxGVWc/QmosLEZ1K2loP1NIQUJZbkMibXVhUUJTX31ZIXk5YSVNYVsyWkdFUzlAYT1WQ3hYV0loMT9lLn56JVFMJnAuLCQxPUtZOj9UQGs0W25oaTBXVztgSV9WJGwhbHVbeFQ6LHYwcGcpTls0VFUk'@;
put 'Vy86NShCT0N0X0UuemouLit4SDoyXXdxamd7VVk0fFs1cH0hYEYofD1OOF9GYENVbkZtR2h4c3k0Rm1kdjw/dlBWc0pJSzFlPWtaJHZfeX5kcF12TkNmem5KcDUhKlhvTVd9MnFBKDlbfTgqUHZGPG9nIzE8OzV0JXFCMFM6N01RX3t9RlB6c0NMIW8lKGN0TGlxKHZkIytMSitIelZBXyRVbDcp'@;
put 'Pzo0RVE5eEsxdXtVUkdbVWo5fUlkYlEqWjxTYnoxYl4qJClsJXx3Wn17X0VsYncidUVoekI7JFFWbiJDdyJISjBpZkxCUnJYYnpkLyxNS2AwPVF0YE5QM3hRS3VpOkhlZjZMeDxpKXI5UiFLWj00biMsb3RjR0t5O3x0MF15aEt3d3VJT1FENmopMj1jYWs4Y0NCOy9CNTl4Zykxc31rdnV3SSxb'@;
put 'fFp9X0RPK1ouZlEvITI7WDs2TlUodVhpRzJBZG5tSmd6Xi5CN1V5UWdBJE43aXM9Ok55RUVXSnZZcSRFSUVFKFJGWF1gIVYkPyJ9OS4hQ29lQURPN1A7Iz9JQ3xOd25GJkp1KVA0dzN4PTh6IWNJZEYwZyNwam0/WnB+bUtIJkc+Lms6VzVFZVE/MUgoaHREeDgiN25YRCgrL0R3ZG57blVxUlIu'@;
put 'JlhlNFh5V2Bkc2dfX1pfLmtxSylsTVs+bGo0SHs4XXx9Pjc/cyVPbjRDN3c7MUg6YVFVVWlaUzxjJkw2T2VdY1hRfWVzW3lXL0pMSk9nO1lgWk5majZjPT80Iyw5dmpuSkhNbVhUXW8/VmsuS1k4cTA3Rjk1MiZ7YFtxUVZ0KXJGOXE+TXpKUURxLHFlW2V6UUR7T1t4cntFZnpMOmRaJjteY2lJ'@;
put 'Qz1DT0RMUW9YVDJ8dnchWG04THkkXyt1NGRCKCRMKiFOZXRLS040dkNJQD9KdjlxUkBlWl8jMkw3a31tLHtHfTM7PDZzNnR8OWpZQDcrcEJ5QSxKeDBQYFF7eW44NT97aTgkWjhjVkcmTUZoNVprUDlsTG4wPyhFREYzdzYmMHxkO2tORi9jTSomUzdUcFFQYDBGeH4+WUZ3ezJLWS8kTzxmMyE0'@;
put 'alJHbitkOCY9JU50WWg2bCl8KnFoXi5CWEc+ckBlVzIjKD9nTmhMKTw/KkIpXmUybj82dEZyR01SdGg8aDB8RjVgTHcpM2VZSl5YJTREbT5XKihVemojPTB6djBBM1Q5TSRwYTRsV1BdSGUsU2pqOEpzQkI6WjolM0Q9QFVNYHU4czIxciwiPEs+QHdMIT1bNEVNRnNNUUlULzsxQXIxRGc2Vm9Y'@;
put 'Z2R0NUZObmNqLno4KkNAbD9PQW0vYThCIS48W252RCgrN3F+YGR0Rl9WNk5dT2s+c29hOl5mPkshU0sjX2RbMnx4e1lZb0puMSp0cWUwdWhkTjp1UzNJPnFDNkpPUH1WXkdnaFBsTkllOzNPW0lRPFpXcjAvIW41NWlAPmAwPklncSYlJSxMez4xMnUyeDImU2YrIWkmO05nenJrcyEhLjZ1ey5E'@;
put 'NzE5VVUvWCRXJC5FL3F2UTojQVk/cTN2MixlTnFZdUJsMURdajV4WWFbIjpSJENRJTw1fVgqQlkwaTFpMFVBSlBYYkBBSShIW2w4Z3ZYQkxsSntqWGxIOmMjZmR8eV9KSV85V2RrM1EjNCxAY0wzIyk0M2c8OVVFKEw1TyQ6KUEvaylqLyRMcThJfXh0I2VkbX01cSZqQCNLT1kuSGhNRFAvYD59'@;
put 'XytaO3RdeiYkTzw+V0NRInh9YUhPSyUsZThCcXVlLlVYND4pUD5me2smT1NXUVQyR3E5Vnx4Ylk7IVBqRDoyZlErZnU7WlF1KDoqJW5ndVNjdFp6dE4pRkhfKlg2UEpNZmVGOi4uL25qNy9BUWcmaTUzME9CfXh8bVBtfXFHfTNySjp8OGgkW0dGI3VNLCEiSzpRZmFkaSslVlk/e1FxNlB2Snp+'@;
put 'Qm0/bkVhNFk1RGJPKV1yPXZ4ZSNiKT5aQmRSQmlVQntALGlwd2UsMmRITGY7RTdZeDw/Q3d5dXR4NF4vU2I3OjM2RH5gZj9RNHNYUyJaQ014JnEhO1IjbH04KF0wO3htZ2Q2cWhwTCNpOiZGJiRzeTM3VEp+bCguZTdlO09DNy88OiM8em98JG1pdiVnNm5RYEpdIUBKWF9+fHFZbSM/Q3E7djx2'@;
put 'bGdePldiPVAsVW11dC9kMHxpZnRrW29jKlJFQzJ7NklyVUt3JGcoKEhhX1lJcV4xO3IpdFRUPSlEYCtvcVlheFY3Lmtfe15rWyozYXdyPGlOWXBiVm5DQ21rQF9LeFY1STc+Y1JBbS5fQ3oibDolTkUiPzk6UkI8e3oxdHgqTmN3RVQ+XWZzMk0vXlEzPm5ZWTkvX0NbPFJPN1Q+fnQpLGJvQCMq'@;
put 'eDcoYkkwNzElWCRnekN0QCFpVkk0MiRHWTJiVXNPUTU6KFl4MU9jZGY+a1ZedyhSOm50KlpRLFM3XmtTRlEpYyN+fWEqYnx5XSxkcEZWdEp5OTNCNSVQPSNicUVyQkgwcnAhUDRkRVVLPSM3dGd2OCUhcUAob2k/ZTpOcE0we3tiQi8ob09YWiFSPzgjbkZkMlVQK3pPe1I7bEZdd25+fWJsLkVX'@;
put 'SDBsemc4LHY5WV9bS1c8Q3RoSTxMSHUzRDROR2FBbyZrQC9XcTpbfnNgYzkpPXFFZTpOXV08ImhYR21FKyRFNE9jZXAzPnVnaFQ8RXIiey5iRFZRKDlqZ2A7PUNGIXAxV1ZDJWtKR1hFQSIxYiJocGhuIWppcmRZYE03OXoqO1FHQT5tSmZQWSNZPihAcG40KFg1UyFMIndeMTpeQWpXLzt6L1lJ'@;
put 'SUpkPztSIzV+V3ltfV5uOGlYKFpdLGxFbTF5fTlWVlJ9R21uek9IJTxmK3pqQy9EYU9IWThYRCZjMzU5JC5gOGFMaE9sNF9CYis1M1JxdkNCVXZEU0diaWo+PU1rQXJGOmQ/WENOOWVoVjxGez4lTDIlZ3BmV3d9fUpvNCkzcDI8VkxsP3lQZmtqJlE7QHw+aWlpJGJhdGxpQjM1c1ErY0FKRj1v'@;
put 'LlNlbzowfWU8ISM7PGcwbFMpeCViZ3Y4dEUiWUlwS0EpNSplVWxiNWdvWX1qUDRRWzlHe1VmMHlSPmpFVWMkPkIoI249blRwWUwlUlIiOytUe1JJVEtqfWpJYFNEMT8/YnguLzpDfkE3WVhYc1J3dFAxVlF0KT81KyMzInYpJEcqcTYldyttKjdKX01feFV0IzoyRDtBNmguWlNbWWlQL0sqcCQp'@;
put 'aihSKGxWXy8yZUx4Pys8UzU7PixXY3pTfFJxQk4qdj9JWnJQJn0pRGRFIzldbT98eSV2VU4kbU9UezlCdihtTktPbDpKaEMxfVFOdWlgR1J6XWh3S0ZdUy9bdmVPQTVELztKaXw6TT12U0NSbV8rUEBbJD4pMGxjbX48O1laJiR0Jn1bVDYiPVpIMjpkOF87I2o2TElrRWdHaWxrNmNbN11VWX5j'@;
put 'fiQjUk5wLGEufHRGdFpWSytsfCkwI1Naa1U0Y1RTPHlSJkVBcnRGdHJXIzY4QVp3PDZDS0V4RigqJSRGQE41KzxMZ2NDamYkYDJrIy9ja0FwRFNleU9zXip1I2V1ZF9ydF1vWiVrPyRpXmpNNF1wVHNjKCMzLnJUSjpsRyNdKCxHYnR4JEk9VywifUxVe3swP2tlPl5WcU0iQHE9JXcpQCMlV1dt'@;
put 'WjMubExWPW41WHw4XzFHZWdCRWBqPkNjUE5YcTFHbnBFIixyO2FjUkFoOShidGtnbW9MP1QmcCttSUo3MEhRXi9gWVYlZmVVIXlMPiZwKVIvdGUraz9PdSEjXT1+KGZ5SGVxc0YxWTI3Q1ApYVsxOVEod0RgM2BEIklyWU0sYTBXay84TXtPRiVQKFE9Syl9QnZ1VyRMUikjZ2Q1eHhSWDNUKixl'@;
put 'XmRRVTt4S0x4a0IuWHU+VEUvUX58Klc3VSVfJT5CYkx8fCRCRWo4IWA7cV8rWSh6Pmt6TV0jIypiZ11JVDR3Yi8qSSw9Tkk8QGdJZVUzTjsvYFJiVC8ranpBKiQvdl9hNWpPclFWVDhDO31nfXtvXzJNVTtgfThdTmxYYyIrfTw9aTtjV0V2cixFQ2c4OCplcHZMbkMwa3tWOiVqLzV8SWkuRHlW'@;
put 'RyRgZ2krQUhfclcrRXM3YD9dNzVXR35rIWswK15DNU10eDZ4NzVRcHUmQyEoWzUqdC93PWo1XyYvMkRjZUBoXSZWL1VHLiJ6Yj81aTBRRCJgKGF2YGI5W3J1Z3dvSn5jSXI9T2Y/ZWBsVTV7dzhtLHpbPDswTnB+fTlQO29DfVUidnxqaFVpe2A3a3RwcWd0djJndl8hdmpiPjdxZXpGfk11anwu'@;
put 'RyU3e2JCRT1uKmx8dSUlZ3dycW9LLlojantgVW52UTE4IjhbLGl1UE9vOVt8PlhHRiEuLlV0IzE8YnA5ZEQqYkRYamZte1dSdHdpYm4iKkBTNlQkQyRfc2orQitfZEMmMG9nPG97TTBxTkJ9MzlwODE0Z3Q6aWM7fTheZHVtQUcwWk1SVTckezxVOHJfTz5bcUx3endgNi41JjYzWCU3LytLMm9Z'@;
put 'bz5+MjFRXXAwS0I9K3pNbkU6dU42eS9sIWx5KH1dTnVjRyZ+cldgJVBnRF5GJDVZTkY/MlVFZFI/XTRIUT1WJldAYDdfTEglRjM3dSNkWWs7QEBVKDElN0RZKXc1Kmk9SkA0MTFCdE17biJIOT0hIyZRNDU0PHErZi9iIXRubVpvKUAsUU5xMCZLUX1AMktxJnZpSlducHoleEoyKzpRfWQ/XWR9'@;
put 'fSFlMywwJipQOH57LDk/alFRdz1YVkd0LFhwIi5yWkBBR3JmNl9qUUYxVkllfEIhL2FmZV42RTg/am5oXV96fikvMUFmJiQuI2AmfWEpQE5yYVFOI0U7U15jcHVSaERXekQyR18lX0w1UGxVd2RXczZadFVXeHR4UWtqcV9GI3BTR1dJRV48Z2BGektzWGt8LCt1N3ssQyptWTp9UTorbHx8TWFw'@;
put 'OlgpdmBZbzJtW04sKF5CaCZxK3Z7d1p7SiVJckRbR25ydVkuSGY5Z2RDJXVnSVR3Wl5xXV1wakRxLz59IS5TJVgpXy5wZigjLjJxXUdpNS8jaDJ8MiQ4YXVUNlV8NXdKQ1NlX3dNcDNqT3d2Wi80WEVOP2leZDxENT8rbDl0UjBaVUxgfXVqWSlgRm0kUWMxQWl+JlE+W0tSamgxUDguNDh9a08u'@;
put 'Z2QpdGx9ckV6amhpMU1hQWZfS1FJMCs4MCpuNl0rbGZLN1huPDBoZl9WOkNeaXR1ME5xKX5bUCh1eTxqPyVPaXBmQEVpPHVRYW9+K0BiM25bODlFbSI9a25tLjV8NEt+Kmc9ZD5aMGFYMSlrc2EoOSROQFozJW06SUZwRkJbI25PelpFLlUoLi5eKSJyY3ZLcEIlYU1ufFt7JDV8VyQue0Y6dl4/'@;
put 'c0t+PjAzIVR6Y1Z8bEx5IU57RSReNFshbHo0bF5bUW5bLDFBSHt1eiZLXUM7bThdYj1QPGExU3Z6Qno6JVNvNy43U08qQXJQdTpxYWwwSTJbJldWaTFXPDRoTV1oSH1NUmh1ZSN9WUJzbzN+TmdecmwhVXk+cTtnZVomdDZ5U0Y4UlZLISQpYXxUUl4vRT0zI0ArM1BXXlllK35CRHhWNTZnZlRD'@;
put 'bHU6IUlBTEB9em5pbno9N1g1ZlIiS08sZU04czc/YiUiSyZPUmhQaFltTEEuSjokfUEiZyhSI2BWTykwW2FqUyQkVSI8NFRhaHdoUmVWSnlpTFRhcGhxREIkdG5IS2VmeSpUNl9DcGwxY217e2t8THQkKXtIX2Q7TiNIQk42WzIuemJEeWRIVU9ESXNQeShFMXUqYHwoeW94eCoudnBZS11UZEJd'@;
put 'ImtgUjNBIXJ7TXZ8ezJfQXdfVUUoaVldJXpnJGNqZ3FqPyJ4bVpENjw+RjBASCg/WjR3NHZOXilWRHUzRWVWZzFDP2pkMTBKTDdLdjhySDx+aGxad3U0M1AhY2FJd0FtYUwiTTxvR09DNU1ib298aHIxY28rTHEsRENnRXlHREdBMVgpdmN0JVtiVllYWkVDPWMuVDB7MCYsRyM2VDtVXSFdJWIo'@;
put 'OmRQVUZTcDBSNzBLJGdjZ3Fyai5rInlCKixTRyMsKklsQE1WTklJSX11SmdTRFd6e3wrUWlgNElBZnFYTFc3TSlsVW51fWt+MHxPXlFwN0ltbzJUNGdha1E4aT13ZCM8TUlmM3RWM25sMzJuSi9UeGpmVFYsaXpzdUJXYClfZTQhLip6WGFkc2hrbXk5V1hBXXN0cjhVaWJab2s7eDdlaF5uYytC'@;
put 'Pjs/PzFMI0tnQlAmbm5hYHk6Tm80LiYhQHQkJmdeZlRjPiouRU5qRGReOV9JamFGRFhzV2F6fStoIzMqODVAL3cvZ3V4QihrfEl2aVlhOFlCKEx5RUlMYikuMCxZR0kycz4yU3V7cHIweWZ9cD1oekgsVFthUyF1bkZIeD1+bFpJNCR3Z2ciazVbKTleaipKI09HRyQ/VW83enFseyNhbyRRN2I9'@;
put 'KW9KaT5yKGdUQVFNNF91LmQ6W3U7fCtbKVR7RFsqbzxWUjFhfSlZQkxmc2RtQi59cWlkb183Yz5XRyRtdiJCIk4wLFU9fFJqV2V9SGRTdVZRUDRhL3lkb21PYlNXc309L3E7fl9IfE4wQmBPMmRKIWVhZjdIbGhCdVlVS3kjRC98c1tlT2VMcG5gXXg2OUB0NjB4OUxgWX5Ea0EqOl9rWVJ9bj5j'@;
put 'e2RgUktzelZSfilFZ1k8PkpoY253bHc8UURXTC55Tip2RzVoVkIsUD9YXkZXcCpPMVBkcWtYNChzZS4kdDl3OzlFYU5RUzh2TkhxW2g1VGFZdlJPal8/TTRhUiRjTFtHR2NuZUFVVFlhIn1+N3l9ODUsZlNxeDNQWnMoJHZbRXU2T0cxMSpzeGxwQUtVY102cnldaShRMkZrXy9VISN+fm0vUnZz'@;
put 'Zls8SDdwLHxGYWZzTzBKWCxWe1BnL0ROSy8lfGtpIiYsSSIiLyxDQyJiNHpLQXR8fkxeNjoieDJoZn1iTiVANnpzYE5FbUlvM3t3I18lSSFRKDd2NlttSns0K3UrRHhiVyxCW31xVGF1Pyg3WXpCWXNhKi50NkNAP0tHO0BSVE1tO3xFJlpOOT9kIzpgQnJHUH02XS52RSZuTnN+M1IwdzR5eERP'@;
put 'd3RlSXM3cWxRei8+VXhqWFEwQUJVTDxEPi9zSi5QWmRVSFAqND8mMzZSeXBWelk6RUVfLHIjJj9Da0cxLGgpV1NlKXJ6NUY5X0tUOW9yWGtwPS5uMyZoSnQ6RiQvI0U+aHFbUGZCckheM09GWFN1eDVCbXhAZ0UifE1bZzooYEMvVjpQanRURDYoJFEpMH5QNGtAIlNMfTEsK1FUdnNSTlYuJH1l'@;
put 'I2RPcHs2NStCT08rPU50OzN9KXQqOVB+WUx8QUV6M1thXWVkKkFVYS4yIS9gTXFCNEw3N0Ile2tdMSk3L29AIzpRKD5XZEwlVi5IIzYjP1FAK1NTVj1mWmZCfX59JFU2UikiPHhrQH1xejkvditzQC5LKlJVPUw5SkcxUz9RSnpSSkQ3NW5rekZtdU4kJCVlXWVdcXkpQStXb24ue11UfGheZD5M'@;
put 'R2tPSyRLMC9EUUE/RmZ9T0FkcjEwQD88eG1rcUk/TE8xa31RZUMqI2BOcWR4cj0pfF5YRmtFcTpXVmJXPSohLC48UjA8amJ1SXhacVJ+RitXZVEqU28zZz9Cfjp6SXNTVGlQSmNGdFNAeU81LjQhQFlOPjVhO0VLbG5Gd1Z8cFB2ejE9Sj5bK0pzZHxqVXh1fEpwQCt1Z09VWnZfWjRBSjE8PCxg'@;
put 'WnJoUlNoJnElYSJlWmAycCY4NTAxLGxmXmlDeXVqPnpidSNIfGxZNTMkMjdMPmlyT0tOW1RoTl9JckpEY19jVUhFUSZbSXw1PiNUP09gXSxmUXQoYXJTUEZCaGZNODJ5NVJnLy9SPSw6TmVTc0NVRSJFWT1aUnglSF9JTExvIyFqV2N0O0pgIlk7c0wrTSNXL0lSQUsrSTpralN6Y0RMdnFNa0Ys'@;
put 'JitpIXgkZT5EbENtZHsxYlRae11dQCtCNkklcXJOelcpOih1XVV2OGE4THEzaHduLiFBbDhYZTpZLG48YFBUdit3XnohK1c8XUNdSDc2Szd6KjhYbmAiNXJsJXdsVX1na0ZDbF0ueGYjSCZGelpLdCZzLGl1ej1tITs3cyZgKGIjUShrKFFiZkM7OSMmKUJdIWVvNGZ6THI9PGNwYVoiUCQvR0V6'@;
put 'eGl1dy5hX1Ivc1hxUXNZJFhDOmAzXlpbPjlvLGcqM3o8VDRNe1ZpNl9PJjF2IVNFOjR2enRqaWBLQFpZREU5TClGTzohKnx9QmZSKUVwe1BhKXtodFBVc2d8NmU/NT8/UFkvZUYuLlJdJDp1V0E/VE1zM2M6MFYuV3tHT2lQKnkydm4xdFlmUFdoT05LTSUxXWBvOzpWVENKbndSVnc8S1JYK3Vw'@;
put 'L0ZnRH4zP09oNnhSM291MHksekhVck18Mmciay9HJktEY0xGaXVsQSRCM3thbWBVYktdRyE0ZUpqRCpPN0MzJDEmdyYyL3FrKWdJKG5HT1QrdU1sd05Ra1RCbix8aDZ6Y2doQCpoKmVzKDZBe1RfXzF5Zmk1T15uOzI3Z3xqKks2WVcsPDwxVjMzelRUaGZNRUwrMUN9fnAhYHd7emNWbF1USCE9'@;
put 'X09bJTZMUVRoaEw0UXJEbylSckhHM3U8IylXKl58alZjR0VwfDxRInZOQ0oydkkhNGtOM3xlRTciZGd6eEdpJnlGMzhVM0gmLyMkXVdZSU0ib1ZZQmgkflFqRmlPXyE/M1RTRFt6SmlYNSVPTzBsbHFtOFMqSzFYd2olLEVgOCJAaW5NP2wwVF0sKTFRRnRPbDlVPUAhYz9ybmx3WCI+bk86bnQq'@;
put 'IyxZYC9FbHY5fHhVcXUoZks3Uj1gcDtWeXZNTjh7NHFeOUQzcl5NK2coYmpKZ3giNWxnPUBdWEdQbW01IllCI3hQZWg5c3VJSUpfMFt5TWAja04oQDd5Onl6IUdsdl59QjRHcEQpOEQoX1AiTGRUTzgzcyY2VEIyJUFlRjdbZFlSQztqbmxyUEExeVAuK2Jab0UiQGNuNklLamshRndBWHhaZ3Zl'@;
put 'WSpFKCgmdF5zVS82T18kIXFMM0xvJGZPLmhpcipxJDxVZkQoYzVES0BvZTJRWTQ9YFdaSShsYltSaWsrKXFGUzp0VixYTUArYXJ2TmB8ZkZZZF84Y3BUdkRTMmp6YWJvL0NRQkdbcWVLPGdmaWojP1t4KTNOejZJKlBoaHdHUXV2NFJGKD12fV17bzclZVdjQz9CJWtdTXkzcE5ibXVQNWJtM3db'@;
put 'PjluVktpKn04IXlCNDM8PkhRQCh+bX5helNsXkJ9dmN5JTJLVSR7QlQ6YHkudzZqbUBzPEg9ck5pcHVGYCFJczBbakQmLjZIZlE+c35MP2woPWZBUGNPMX03UktBSTk+RVQ3ZnZsU2FVZ3BWaWRJa0xMZFdoKyVaT0t8UmdhO2s9Pnl7bVFHJjRKeUdIW2xTeDhkUyFLKWYqN15+dnhmc2FGMkhj'@;
put 'YHZ5OjEwR0pgUnhydlc3NnwwfUZEYm13Yz1KbzM5XjFlODh7XzpXW3MrNjEkN2BrJTgwY2hWZTtSPHQqNmdCTVA9Sn4wOkUhMW5IZ2k6ZTk9U3xLd30sNnwxXzc0OlQyLkFYYXIlUXFwOGVXW3g9bE19MkhzP3J1SiRhLDA2YyNCYWZ0Olg3QzZ4RShNKTRHU3xRWHtHUjFqfXt6NGFyfXc2SENo'@;
put 'cVBDQjxYNmNPTV8hWE03SVFlLkkjRyFDWGtwcUYuNjtgJnw1WU5PX1ZFPmNuaDkoOmlAay98UFJLLGJ6VnssSSZNYWcsWTRoW2BNRS48TmVNJUxGSCVrZnsrZVB6bGc4JnJrMX5JYVhicjFGS3BNNm83OjhXZilnMjArRHZgVjE5WGtOXjRtfHQ7Q2EjQXUycG1CV058NCQ0YyJyZXVmViVKe0lG'@;
put 'eSx7WVZeQjxNdmNmbGVaSlR2R00ud0RQNzo+QjE3eTUmS05STj5eNz93JH1KWDlCOGdHNTk8WVVsTVBmUVB0byJJJT08PTs0U2pMb3d+Y1tpPGg2Z2ElUUZfOkF3XW5HQl57ZyZiQFswV3t3MkkoaVYrOG9GX1BbaD1vI1VuKFRKRyxsZSJObD5qTHFHYFcsa3UwZW9HLGlWY1slSm08MUhkWGdG'@;
put 'eGlBdFsjVDNdK3lJZGFeYm9LQ0piTGIqVUpeOXsvYVF9OFVfLzdQbWNVYytTNG9PIVJ0U25XVXxXNk9ZayxLY2lmNHNfa1pSXXpJZyxiOTlaczJuVFMoenpwe2ZOTSFCQzsifGAxOXdFUHBZS01GfUVjbj86YGZCWkBqbT1GYipnKXkzfSl7PXdXNU1yZlBETGQrY2BHeGl5O29PImtqYHM2ZWg+'@;
put 'Tlkxb0lCU3Q2KVcrUiFfU31udHRoVDRGfXxzaC8uZHZ6NmNzMldtNVRudTwzOU11Xnp1YHw3fFBOWz9+fFRYTWMxKSljJTRGaklzKz9bMzJqcEZFRTFxPENzNkZ0RGU5a0NgTXxCfnAlbmlmODB2Xkk8M25zZzZfUkBjTlcvWSRTN3JLVntzKC8yQj1PfkAkQkszL01uZ3x6Umk2PV5pVn08b2E/'@;
put 'bD0jJXhSaUxfL3F5aDBqVnRNM2BEIyQmUiZjJFoydFFoYU9FV19qWXV0WHxLak4meWdNbSF3PiFIQz4pRSxGSWU8Nihie19YaXZ3Wj0/a3lXO3o4TjRPOm00e2FwW0k3aF9YdTcuT1M0QDhpZThTLl4sPzYrMkhdRDlHInVnUEgzU2pUNylxbTxoPmdTPjB0KElKWDQ0SUU2Ylk0JUdeYDF+RDA4'@;
put 'Oz8uLFFBJnlxZkUxM1tobiZoYnBpfEdwOksrRkgrJW5WZGJsWE9qaWE8ckc2JnI4JU55QVoxajhSPilJfSRgfjlubzQhM01gb1s1Q31XNGwkbF16NjVrP2o/ezkkbCN3e2R1TChNQjhwIlYycGVabSl0RSNGQjJrN2VKdzF7P3t0T3hvWHJLWD5bcSlxNio9alZiIlhAeiYvY0l3Kzp3PStnXyVH'@;
put 'Kl1kcywwSmMveUYlKTozZjVxP31MVm9uN1BXdGtoQ1NpSGBVT3pUP3JQdkFpeEdJc2I8WGpkcThqJVN4OnwxdytQdz18d0xPJCxyRyEhJGRrRGZtKyFUZXlbLiReSD10dmEhV3RlOTR2JF0+Vmc5byhGXyoiP0dORntgSC4zX1RyUnFycU5rcWVUWVtoPTFzS1lwdzA/OU19VGRFUE9ifTtrJiFY'@;
put 'TnpJKVt2KT18KV5uMGByZSYxJkI8NkNSNDJCWmlBdjdgZHtyTSZ9cHZyJC5XaGZLVmlkTDl8cVBZalh2UlNsVG4rVk89bGlKKilsNURmdSxSPWxYfHI5LF9eTkBGd01DY1Y8Xi9jcl9XUisiSHhvSGMmTW8qVTkqdzlQXVEoWGhFI3s9PH5taHorTmQkc1F9QCpCWlU9VnROW3F5ZzBmSCF2RT1T'@;
put 'KVlDKnladVhqUkVedUdRLmhuMW5lUG4yOyZDMlA9WFNgaXl7Oj9EfCorfkEoTjBFNXFnY1tfZjtEM3tPL2g9eTdadkVEIjV2PT80O0hoZWwqV1FpTnQpYW1WWElGVmdPcy5ITmchOFpXM010THM3fCExKkFTOjxJLHxMKjF+U0tnSGZNWXN1JnF0UCl2RV55ZGg+PCQoTWprbUN2ZSY0bWB9LHQx'@;
put 'N1J4fHZfNXdJPlVtX0tpRyY9djAzWSxtVjtnYjhQcVNbYUkmSn5wL186YG5PbUkqbjdBKDpPYCpuMG8sWlVgKVQrWSVCZiNeYmNVe0E2RCwvU1hOI2c8M1EsVnp7QSUhSURuNmgyezJpQj5kRjRYPFlHfERVd0xPYU9YQVQsYkhDdHFWYGlKbXR7PUFpaSRPcU8zWnhdZlpwRW87WSRIMU5DISwk'@;
put 'eVUwb1FLXiRfRUNeNSZHajkrc1U1I2ExXT9FRFZDbkp6aS9KK0k9QDdEVEw1YEswNmV2STZuSz1iSWJScUtfZG93fWFkJV9pNjxNQ2xXanVvdXdVJFdxXVosST08Sn44YntrX3A9aGtaNU54NTlGVXlqInM9bl9TQXhAVCVhd1Uva0N1Y010c21USFsxRlF6TX0qe0BZXVY9Si9QMU0mJj16ZCFU'@;
put 'RnBVZ2shVHVpKzspbDNCQVNkcDMleWswM1JjTDlaXTUraE5EPGx8U0l6Wj09RCI4NSsoVVBjWEl1d3duQzFvWShhQlp8N2BeWFgwbjJyMGFDSnRac1M4cC5efk9ReCh9OnM8VyIxd2RaPXxoa0x0cS55JW5PXUZCQE5iX2tUViYkejVgQnYlZ25lRDQyR2Fsb0k/JiFkc11+Mlhzbm5MVnJZI3E/'@;
put 'ai5UQ05nITw6dDhfPyNwXkNsNmxNQmd9M0RzZ1J3KEAjfDRnQ3wxa2A9djgyLktfV2liXztWeV9ZUypqZWY6M1AyTCtVck9sWW1+TTl4dFkwXkJDZWJUYXJUMzBRYTovbjA/cGZDc1l2b3ZUQ1JbZC82OVVuKVUrLl5bLGFfP08yOjEzUkFKW0A5Mk1zMCx7JF9fLktIcCFHNEtffWhHe1NnbCNG'@;
put 'bUNqOkRaZj44TU5mXzlwUm5BUT9pTn1edFowNkt6OTV+TGVDKGpFOC4qYnVubilOKjhxSTp8eU5YU3VAZkpmbHMzPmNqSjQ+Vm9CWlF7e29lMGZBUDZzODIuTzFEdlM3TCNMT1Y7LncwQEo4THI8LC5eKzxlMV4hUE9xYTxBNWBqSnBxM2diW1pSR3hKSC83Q3tuOk12dzVObilzKGxFWENZfDZn'@;
put 'elM/TixNWmV5bmFmcmhUayw/VjpgWkAuMEBbb3U8dC5NMSthS3V+Nz42aGFONjYlWmU6TmZONnxnPn05dUBOZDFFNUlbUVdHd1R4YmtqOmBIbXdNOzg/enJHLH4sdihmbFo7KD1dbEpkLFA/YUxCezRVLzt3LzsvXXJwInJWYEBCeDQ2M2M3UCo7WylRUE9PIVtRRk9jSzxXSXsrNyV3UFA3dm8v'@;
put 'T2p3KFosdlZsUUVdKDxSJCZycig7PGBGKl9maXZDOEtJPlQhczF2SHZfciRsb0VSQV1Vcm9HKToxKHFIMnoyTnE9XmFbLHA0VmhyXTEjJUQ2Qj82RiJxX3lNNzB7PFBALnhwLzleT19DP1tib0hsS3Rme2ZMSmQpZnZ+bkBHKHtzaUNHTEVWREEicDZuN0QrMjdpO0R8Yyg/bTE5PX5AJG8mZX42'@;
put 'YDk1XUVOI080Yj5yWXYiYFFWWnQhUWB2emVlTU1PTSFwZkBxNigoSnFLRkU0Kyxhdm54dGFdJkxAdkEqTHMmOTNXKEQueW16d2EzO3t4b0ZIQldIYmAqNWlfTVtGeF5VfGtMREg8KyopQn1+dkcyVnY4SiM7RCZKaUgjTjxULmYvNmZoP2A6VGQqOi40MyY1ZXkzNDhFeHVFcWhdZjFSUUhNNDdF'@;
put 'em4xOlFyVWwzMmB6JEFHJlhqTGMlI3psZm1AKEw8TWA0cE1gM2BEMWU8YG9fZlsjPWE9QkhEJElWYFMvL2RlLkJeOy8qQDY3cm5AL0FXSEtfUThUQ2JFa3ZtbWwzRjJRJlRxb1YpUypRdiQpZTA4MFMjPjtkRXkiZ3hEbWdiYXx4bTc3Py9aUytGXXwhN0Qkc2BbfVB3c29hYU90IUFFRUpHXTdz'@;
put 'OFJsWHA4OzVebXlPMy5UPnc8JH02IUZZMUMkTCQzL3c9UHZrMDhiayxvd1osR2xacHR8N3cyTzwqdVksPn1GX3ImJGZLVDApakxbYW8wVkVbVjFHNEx9YE1NdmxXfDN0RGROSEE1fGtxSyhNM1NpQn5GLkw8ejQ7TzpiUTl2eU8vYm0pJWxEIS96MW5wSHMjYGRMP3YpWXFbfkVWWDpSKzI1di5g'@;
put 'TV0weTJ5OElrPDVuUyx8bmRoeEo9Vmwsd0Y5c2o6Xz1sKz1DeE9SX2xQRlFTcWhtO3lYMXhgWVh6XWpHI3kxVyxJNXViKCNjQlAoUGpMWTxFJmVffi5YV2Q2TiRmQ3ghY2Yre18rUVAqT2JsVmchdGM9I2EvWCE5eE9hYU5lYUhOVlYleTd0Q0w4ZEJwcStsRnElPDMyOXhgPjdFOjVGOW1PcDZi'@;
put 'Zkp9Y2RiIXBseCpNYXg2WklxfTpddkZ4VUYkdzdAfU1WU0ZjSCEwZDZzQCpjNnkpMVtwMS5BPktweCIoSTJFPX05Xyp8bnM1UWpMKX4xPn4qdVpKQCRee0FuKUwpWV9kPityVTNyU3l7djUvJFdQKWB+SDhlbE91R2JlPmslOSZbUyVXWlplKFkqIVU+eDhzYFd4SWcpTHJmZXg0WihfNkFVa0Qz'@;
put 'Qndwa1BPVVsuMXNMa3IrX1h6cDpqWHI4T19TNk1Zam5pUElUJFhkWURKNDRbSFlEMXFMeUlpfTxdL1M3Y1FQRTQ4ajtgMTM6ISgiYXpTKncmSlVDLjV4Yig8ZX43fG1mUVs9Wy8+Y3k9P2Z1V1pFRD1jdlMrLkhXYHddYyUhN1ZXeXlHLk5KIkdGOmM+OFFpIkk2TG5bLHY+Y21xeCpFTXpsNFNC'@;
put 'cERqRUhSO2JxUTA+MHVGZUUzMkZAIUtXeDNbSnZQZ3NXeiYkNnM3VlNYLDooWVVhPXdOI0QifSxAYTJaOzxQNU96Xl8/bEcoJHhiQi8lQ11pTnAmRXcvfkVfbCJRU35QR18oK3Y2QT84dmFBeFI/bkw6ditVTWhVZzRnUyh+fFFldzVkIlVnQmVhN3tCd3tBcXFpRzhIbF5DInA8RTZhTW1rJUR0'@;
put 'STdYKXRKdCNCOkt+eF5GZWtvZFYyJjpGS1p7KDd8MjMlcnNmZVpEImVSIlVKfjg6RkBWL29MPHE0MnQkKzNJUz1oPTZeJEVAOlVdQ2xEdXYmPENCUzA3clByNl5gcUpgOCxmR1Q/JSlfV3hmeyJJPVdMXmp+OG9pQGJxfXpeRnNIN24/Wk15Jjh1UyQkVTZ0Y2BIXzBxTEd6Y0xodzE8PFMzcl5i'@;
put 'eHh4YVlnUm96U21mfWc3NTtpc0UucGt4ODBOdF9HeiFoZylNXyNCbnNucllkSG0udWRqNHBOaDR2SEY5UzdmLEo+RDJaP19KTDpEND8zXj9FXlBDTWs5e0JYIihtI185MipdXkUkV3A1N09SM2VAMzMhJCMwK35aVT9XJk8xTGs3PVUyKztXSSxNY29HPV1JRlBxJFlCU2xdNT1pfFRCMyVNVzci'@;
put 'RkpofjpaMSxvImtjazBMMVtpbHo4dm4xZnMxcXpIWFo1VlkwW0s1JlppMj88e3tTaTZybSJPZHFFdUM5IUcud0plcTEwQUI8NSpIOWQjQi88I1EhWDZXbiF2KTs8KF94OXgjX1dbSzt1SWI7MlhsT0NIOTVNZ3NTNGN2JVBZKWN0Vmo5Ny95ViZ0Siw6b24iTG08JXVCNDZTMEVQZEcsazRQMmsw'@;
put 'WjU0KyoxYlZrNVZDRXovJTU9X3pxOjR1TDw0NEdxM3RmU2xbSU1mVGkuPmosPnNUWmE3SDdqcnBUUHR9Olo6b2h4QEQ7TTYyTjs0PyhfKklpJFB5alRCdz45P1glbVJUMWAwbiJMTHdyZik/Z3dITU0zMmxrTWwyKjcjfl15ZzlRXkpgYH5wMTNyZW9wNlJGemBXeyNeWG9+Xk13Z1lDdiZeaVl4'@;
put 'PkgoeHZTW2lvfiVFI3w/P2xxaTpbaz1oJFNmKlh6NlY/bT1Wen4yY0lLKXUlJXZMNTk+OnVTRSMuQV04QTAhPCtxLjdFdjMkUDY4QDlEWDVwem9eI3V+ST54YS9yNktPN1EiYn1ycDMvdV9wVWQwU1c7WHdXQVdYXklSdVduMFs2eTYxcGRMd11+QnJ9dzpfSU9AIk8sQ1BVS10jIXBVYXRCSTlE'@;
put 'cT1lOHY0RkJ6ZzFAdVE5YC9XakUyK1VAd0k1V1FFdERuNj9OPWhoeW5PQkwqW2o6MSVKUUJsbHc2SGhhJSRTZkBELiYxSDZGfEFkMTs9JDVOUFA1RTBmbk5iX35JajV1XitUWjRuR19XPElkUHdTWjY0ayJ2RWxFe3k2Z28haz1Zck50MEwkdHJFa34/QndTP2xQTlRKZHFOdmJpQjleR3l4I0Ze'@;
put 'd31+bnwsYVREa3woJDN0eit3MjJ7JX5CSHZGem8wP11NeSZEQFNja1NJd0tfe2VpIzhUZWJ5VjF4JlpQVCo1cCpCanBHUCF8NyREentdazZEU2ldQGQ9cjhgNT5wRHluWFk+WFg5UmlKP2BUJE1sV34xd0htQSskOHxGYSppdE5Cez5hMWRGRWFYazowQyZfV3d1JE04QkgjZGBUVzBCTVdRZnZP'@;
put 'P1B1X2VIZTk7cXZeUCN8fTM6YjtYOEk6TnNEcnB4dDZlTjtvc3R4Wl9oTigsME17OD5qY3ZmQ2M1QGZ7JFFBMEZpZ1VlM1pkYE5VPV5Be0NWNV0yYHg3endaPVswTTJdZzFWTVZseGA3fE45YXZwRmJ+aVMvQkJoPDk9UWhgPTd+Xm5+JTZXekw5ckMiXzk8fV52YVtvTVpRXkNfZldpUV98XSQo'@;
put 'Zl1DaFZfKEs4R3hnYlh8fCM4S0UlL2Z9K1RTZDsoP0RBRVQ5eXEmVCMjRi8yXzdVK2F9M24uaDA9PSIhUSJFKkIpMk5xbWwlUWlDSXVIRFBWMkltal54eTh9PWUqV2dxMTlXLj4/KksjT0AwLzApQ14zS24/YHJ3aX5qSFFQQEVJaXtzezMlPm42fHlCKEpPUmF+alBLaTN2YV9BUiRMaVUsW117'@;
put 'el5baytIYHhLV1VMPzFwWzxJS3Q3fkIxWzU3MCZWelREKX53KHU3UCZPe2hQUUxvNn1JJWElQGZseCRtM3pRQyFMT3hEQnR3Z0R+MztsL09ALjQyPWtLZ1ZZOXZLfEJUXzQ7TmRvcmY6cSk6Kz02eix7P2NHTVoqekt1MS4uMkQjc3Y5dlMqWilxamtbcCZHdn5AcyFGdn5lTUZIP3E3Zjx8UFlz'@;
put 'Wio0Rjp+fWQhJnJfRDl+aFJ8NGhuVUAsVDYibz4kM0pyfkZ3VS9PIWkpMDArMnNTZ1hwYXk/a1ZdKjVdc00/RChEeDVnXl5NKmdwYDh3TCpGN3pRVSZYNHx8QDBga3Q4bypKRUBjKS81NFd6MUFRcCgrWWJFRWNlT2NrJnZKPHF8TjUrKG1QK3Y4KlUqaCY+XUglU2xKSld5Wjgjdi9aX0ZZbHhu'@;
put 'OWgmciV8fXUmPHJGc0JzKj1LUi5yeFVVNHdWMF10UHJhQFUjeTJ0bEdLQjJ4ciowYG9pLzFsbkBUQ1N7e2gldyVaRnsvSElEbGFaMzd6NEl3JEguc3RgYGw8OTBFYkliMnIkM0RnSXRYZEFGQnVkbz0jNXtFP0ZJP3BncDYpb1NCajV7U2NOJW4vYDIocjRCNFtZYUZwK0d+ZTpBMl1sOD4vSmBi'@;
put 'Zkd6akZ4OGkpJXlmVVRoJTtzfDJ5ZSVxcD0oZGswfSNKMXh2PDN4N0cla0pZJSVXc3BJNU5CVHFETUFgOzI/M3NXaSNzVGsvbix2O1k+Zyx6aUNaOilUQ0VEOmRIPU5XZUswcHdePXV9cjE3c1cxKDFCeFhFaS48dyJiNjZLQ35MRSosYTJEc2NlMUwzQSR5LyJvVy5lJFtWYUVnbmE0IztLZCJj'@;
put 'd21XcEpFaVUySzJGcEwmeHBTTkEzVjVlZUJ+PkZLXlMiLjJmNSlWbmlbK30qKU4vaW9tQGl4TX54Tjg6QklmQEV+OTl3MlQzOW1oX0VJUkt6LzM9dHh2eXBSQCxmNHlKUC8mIW9LQXh0W2x9fXF1YmZEQ0hRQEMhb2l7YHpKPHpdZjRUXSo1a2BCQ0B0U347fH0sdjZSLiVodFUvNVBOTFU5Y1Z9'@;
put 'LmluLmt+NypCXnc+ZUs6dkZdd2prbkYsP0s+ODpdTlVlbXwyQUs9PmYzY04vMiJvZGxBaHxRW211ZzpZdmtrMGRoLkl7W0liQDBrQFFWemd1dVd8Im1fKS9bcCZDMEZ5PlEvUz43S2NoXnxMaCoyOUYjZExfRG13P1pCVy5AVSpVfjFmXVduVXlDWWp6TVh2WjpTWVtmRSwwclNRd2x2akNAeVUo'@;
put 'cCNycDEwSD9wdEprWm96aGpEKCo3b3szWGk5ZVNJRyltdSMzNEd9aHd+UTNsMD11MWdeS2hBVzIqMC9Gd1RwTTxAbTRkfF1kViI+STxxelU8azV8dm1UVnsuJWB7eHNXWz18SEghPyk+UGk+JV9tYD56M31Me2JJM2crUSFgbXVpKzBzLDdYQ2B6V15hI0FZQ0YodywsJmBiQFQrbC4vbSZUOl1k'@;
put 'XiJ7Tnl2RSFkczJIU286JncmZyUzLmpmfEorWVtyQixVbTBDd3RNcSgvT25RPldJaz5HX2MsNmRqNDBDODZsJjpnYyZVSHVAQWUwai9BYnlYRWFgUkouZTx8WSF4dkJ0e0ddYTdhLyIzakMvenxIbSYqSXg9cSVnc0dMOj9Xa3ZSWnJmL1ZDRToyaCgsb2tmZXBDe19UX2ZKP05nIXZHTGclKitS'@;
put 'YThDJWVHRzpAeUNGLGtEMGhWXWpoajl4SUV+UVJwVnphK2ZMcUoyP0NSNStXRlROQiwrZXAwTXYscS9ZVm0oVFtUcXlOeyUweF4wezRXKGBVOVQ3bSplaUE2cjNULns/TixzQ0Z1aTJlLHZdKEZaLlhCRitWenZhMmtwYTh8amA7U0ROL21RfiQmYGwrd3MuUH57X3EybiMzOnI7MDZDTE9VUjAy'@;
put 'KGM3fX1aXmNQSSYjJDBzJn47JHkyKVd1cUk8RSxJdE1wT2p9P2tOMFc5V2xKK1JuWXV7W2VnKUVhbHoyWFZQU0dUQD8ub0xELDckQmRuPyxOKiJlNWBFdyNANnheT0Q+aUN0YmlUKUlKN0BgMmYuXm47c1lPX282LEE8PW86WTc/ZHEuNnRDUXMiKmpmYzplYC84OTlJZH4yVU5DbHJiLkxQKHVx'@;
put 'LmsxUkFCcHRGNyE0QklYQUhVT20kOisxYnE0R2Ioc0JjWk0ofG8yPCZxNSEiPywwYWw9VUdrR0hwPiVqd01fWXAoO3FFaU9zcCUiTWNKYzF6PjtFMUt9JSZ9SHMkd2J5RUJJIls6MUUuPU4ra1Z3L0c6P3xpbWcmWmFaUUUiNUxBPU4+WUR9fFkoVFNFNWtNeEk5RytlbmFqMSV9ckhzQkJdR0I7'@;
put 'KE5JM0YkaD5JKGsmfDs5Y2FLVCN8QWs3bFYydXNVayRsSktCUDFkfkpkdCxsZXUpMngoOHxJYVtKZ1UyYyE4cnFzWyNKMUxXUip7RU1oR3l6SF52X3ZyOD4uRS5BcyJFLiZaIWVKTXhxYHlRRSlWJjE5alFSbl9uIyVLKHV9STBYMmxFPl9gKnZVV1l7YUJxMCM7XW5IKysuMWtdX3pCWSwqO2Fy'@;
put 'K0A/b2RYNnJOTWd+VW52aytgM0hnOzM5XSNEYmtVTURFMkNiem94YDh3IlIpVlFxUHlsLnBPZHU1aUBpKEFqUygmR2trPXJTZiFVfSVJNyZHXV8iZ2dHfS9+U0F7dkt5U19CaDYuWXIqcUA1IzQyeU1kfGFEMHl6ZCpodHIrMGdoNjwqKy5qRUF8WCRAX2tGdFBzWzc5SUkiMWtsaSs7UCUqRnFE'@;
put 'ImxuKS5KKEJEe0NuQyxeL2AjdjYmI1dPVCV+OCl1WWFGJHJnRFFRUXR3YCk/XldVOE9KNGhSOSoiKkEjbFdCfUNwUGpuRDZkX1U4QWZHZFArKzhHSSVaWUdGO15vIkd2TjZZWEVMdUg2U3ZsdXVPYFZvXiFzbnVHKnUmOVA1ZmskdWJjaCpdMFl+Y3g8flZrM2NnOlIpWzo3MSU+bDpbbjc7b0ku'@;
put 'WVleenB2ekxISmp8ejlbLE9lLnxBe3BjbiZjcXFEWTAlam94Vkt+ZltrTC9xNEB9NTksLEI0SEp+ZEY4V0xkaGRJWl9SaVIuYUt+Tj4sOSsxIXpOSDN1IWteekQiNDA2VSluR25yS2R0ZWdrNlNtLiUvRWM/KW0xPFQxcSpze0RAQGJKR11DMUEjK2lNKyY9dlcmOnM4cUtMOGJoOzdWWlhhY0Vx'@;
put 'bE9AeXgjdHp3Vm94d2A5YDBLVTY6QjFuL2dNe28qfXE+IUQ/QlV5W3l5S1BIbCFvPHo5MHNaW15UIn55c0dkVUdwfj02cixAJTdmRi85JHlVeXFhNlYhfEMsWHxobD15bntvVFghN2A+PktzRVZ1b3orKlAyL0AhdyFPUmg6XUtlfG5ETDdqNyFiU3YuYkwuXnp4Ujs2ZnVMMzNtK0pbIVN1QFBv'@;
put 'JUF5cj54dm9zTC89Y246IyY9RVlvOHMkYCxGKHNMMiRHNCEiL0w8TVFNLmJlMi9YSjdNfGRjQFd0eH1mUUE8fSMuVnsoPFJYdzhTIjN8YUtxMVJ1UnFofSEpc0lMbkpMaFRtZlEveTlkaUBHUy5ycnIiXmZ5PHBmaUh5cik7IX11Jiw5UHkvS30vUFV7UG4lQyIuSihXOHAlJmt9NFg6W1E+ZX5f'@;
put 'emAuImVVMmErNUBzLEVGMGRaLCo+eG91XykvK2tweyZwPDgwQjc/dHFLR01TUnhqeC5scTF9eVA+dTkvJD46IXYoU15uLjR5ei5CPkZBUURyJG4kXkAqcmdaflM4JTBLbjt7JnJpWm8uQVI1eWpWP3xMSTZIKWFfW2BsJClzU1hpL0YyNCkwWlJLTEsxRSh3Vj14JTRaVDhmKV8sfG9Jd0xVV1c0'@;
put 'L3NAYmYpMFkuKkZLe31rcVMiMGkweX1PZSZyZCl1QzJWT0NoX2huaSZ0PkpdJiE5ZncsMF1XPitrPXk+RVglYjR6U0pTNjJfb31+Mks+KGk9a0tGYkM3NzRUVEgjYjl4N0Q4fXJ4eWYvJUUhbT98LDp1MSs4fXpCcC5Md1VOMWJxYW1dPjxTVWk0W1RiKWtzdTA2OD8oSlkzKj53fm9aNDomVzk7'@;
put 'QjYud2Q4dm95bS47UVYxJWVUaXRDOnZwLzRBJFlxVkZUdiV5SDEmIkNObykiLiYubVl5V11FJVZZcnpfZTdqbjpIRyldZzF7aWVvSXlZfG1nTEdoZ29fam52Nlt+Tk5UVUtdXzgje2Z2NT88LlkhNGx+KmVtU3dtNVRfe2ZGQjYrYTFiTS4jWjh0emB8andycFd8MTE8ZD9WUEs3UUpzSyRQNVZW'@;
put 'Q3M0Zn12T2h8bGR+Vnk9TjNtQnx9KXRYSEtyYHthTnIwXSoqakldekpIKWt1YDZMNUhxN3JMUG1wdzc8SG5WSXlha1oza35rJiJUYnRyPDBMdUVYYHh4a0J0b2ssMihxUCN9SD9Wa1RCJC54O0J4MysrMUhvUysrfHA+JlpKOURISUpyQXRFNUskcUtBPF5lYy4yL0QyIng2Ozl9LGNNalFsRjNz'@;
put 'MW14VUg8eWs5bWxCVXA/VjRsJngmQjVBJi5tfE16SDZXaj8ufCo5aVsqUSM3N1BYaUIzMmouXXFxNnM4W3VhdCg3W0VmYS8lPiU7Mkw9QVVCbix8Kjd+SDk0eVdMblc4QzxQIkwkXW8zSUhfWS9nMUJXT1E4QEZhU351NmZFZWx3IzBONztgZVAjZUtYfWw8cE9YZyx1bWkmKHRCbDByIVRed0xF'@;
put 'Q1E7MTx8SGkrQiV2b31fUX5lOUNqN0ddQU5QdkJnJVs7Qj5Xc09VTS9KR3Z6ZX1Deypxdm5ifjhDbz9RdnE3QnhvPVtZbDtvSGZebHNoLDQ/fnpjYV81JiFQMXkoaGEpKFcqRTBOPH5fKX0xTVJlSiwxIitreF9mdX5nLC5GQ2FIV0toIntDUSx0MUwwbF5PX1dGRkJ5O2t0eWhVa2M9WD0vPkZF'@;
put 'cnVoLjw7RSE6aiVBeih+K1QwZnx+JX5RY1RYLz5pVDwyeyw8KFdILjRpVyFHcD5xVCN9QWJEJXszWl1pSF87K3JOMzY+YEB0VnZzMHY5T3AvY0VoeWBZOUNNcHUvfEVoRXNhLHhyeGpxbWRXUEpMI1kiT288O09KPGF7fnEkcTUyQl9baTt1cHExZCpMYGNtIXAyR25DdncvbSZOUjZMKDFJcXxv'@;
put 'bn5pZkp8cW5NIUZvOzMiTy4iUj1EZnUiW0oifTdVPWAjZjpoQClTRXNdTnE7by9wXjY4YiU6Q0UqXUVCeWpuIz58KnpEWSU+Zi5nWUFUWGoyK30wY2ooMVZ9ejQ3dUJePiFnT11MaX1OK20sPDMyL3o1KkJmI30yVz9fM1phOSU7LjsmY3hAYiFKd1g2WikyMzNpdHoqeDwkTCMiTj1lL0MuLHcw'@;
put 'aU82dG1Fa1lAOWhuUylDWTxXeCFROUpQRXBMM09pcUc9V0txZlR0UXg9JSl6SG9jKy41S04hcHNOWktBeHlydjFVR0pVWTRBcHUoNEM+WWg2WlB2LFNgd0Uoc00yMTxNKyFUJnNCUVdmTUxmST9BbCZXfCVsWyM4dTpHVlgye0gxRVZNWk9XQl5rfFE+P1t0Jl1vZFlnZVAjZWFMQy53SmxMYjJP'@;
put 'JElUI19vLyEjfGFRLmgidGYyYG5NP1EzKFB5YCZoQXMkcUhjXVY+Z2NVWklfSmw3fU8/KWZ2NSlMSnV3STw3KT8zVUslPHQmWEg3aDRaRH44WzZSbTFEM0FMdj5wVkZBTFJDckJnTz5UdmkzSiVENUxrQzUrUDZ3JEU9TkI0PHUoa09rQ1pNbzRLJUYieTdDUzh7Y2w2Oio/TUc9YWlualowblFq'@;
put 'OzZRaHkwOzRWcCE7WTNOKVYzK3Z4LExDTVRsfnJ5Z3o9YmBGdmhNIntzaHsmTCw5OSY7cyVMaiZmJnBwR2crJiVVRC5yIzF7emYyO2MmfEFSbGU0K1M3PXZjPENjZmlKWUNmM1ZdQjk1UTxFVVBaLCpVYW9MQygvJVQhcE9xLEpabDIvWnIuWi4pIX02JE1eQEY4RzFAaTEydVMoTChnQWMoTHJW'@;
put 'dFM3U3NCZDNxJXBRZXpfQD18P3hgTW4yYDFIMz0uY3dWQCguSjhMLDlVWDB7YHo+ZHphcWM5e2oxcUchPUhEMC5eQ19HZGI1fS9tVCwlKFUuJXRPLy9XMjp1QTQ3Nk4qPCwrOUE2bDw4NWslczxKLDsjUnpmaSowLkQ7W1ElQTZ0X1hAWUsxdm5mRWEpZHpqVSNqLENhKWR4ZnBQR140dXdJWTI2'@;
put 'ZTYmcUB6SFNSZUk4ejlsKykmQG0hUSV6dnEsNEguPyttW0xiQHdwRk08RkVsPjBhZTZjZywsSCYlfU1tSj5yNllJZjs/WSFZTUBtIWxBfTZtWzRUYl9WRlN3ISs4dlheZldaUS53Y0pqXUN3OGkhUlJrb3hnTUdzZ04xKEBpIVlNfSQ/YllESzNkWSRPaXRHIXhHKD0pVE5DfnRTemxmOXFvWnx3'@;
put 'Rk5ZaVtofEsrTlpFKUBzVkdOQX15LnxbI3E3KFNVYSJOVk1DfHRCdSo0eFVXcjpwYCIsMUo3KlVUWSVsIVo+UnJsb1VRJmJGJExYMl8iJDptXXleW01tSnVaezVoNDAxcG9dY1R0R3htTSN4SUh7MG8qJEt6WXRlJHVrN11GPGpSbVBtayohfTF9VylkKXxLUEtAeV1NcElWWDFmS2NoU1dyPGVe'@;
put 'MX5lZEIpMDhHTXQyUlREP01iMmJFRGIwU0J1PWc0QC4jd3B+TGpOe0J3cDNSQyQiKEBnYi48TSFWQ14zQjlXKUhxaz1ZISY+JDthanQiMWhgI3J4emdSIyg8Y2NpWSpOb1pFd1ltZzRYZ093bWY0M0ZMWDsrWnI5QCxqIkppMUIqSFFeVVYxaS48UTxRdX1wM0JZZ2x9ImsiRlJlWl9YTyFCQCJy'@;
put 'RC92ST02OkxpZWBnME5VUUwsUWo5QFZOcmAudks8eFh8VDtAJlZWXWU/XmpKZnNyfVIzSzIwU09yWUhmK2p9RiVmJUYkYF5pSVg3dUJpc31WM3FaITh9RGZDQU0mKiI7JUtsPz1pJCpAYEF5OiJwSXkiQURXM3A4bmVKR0cwVGJSTzQrMSMrR3kyaWZLO1IxPkRVL2RZZ1ZFU31wQCxlYU0oOCZM'@;
put 'bihpSmRSJjdWTG4pPzpmcVZ+blVZenB6MXQ8dnw+a3MvXmsoME9MPj9mJHlWeiFCZVM+STpzeUhKQVk3XyU9azJAUGlQPm4zPSU4QC5uJCx8RGt5W0JQMls/TVUpQTY9X1syK0hAc2Z6T2RMYExDM0xNYWlVNTlGS1IxfnE1QjdMfX0/TTE1SmFxTW5dV0ReW2I2eEltdWVPM1pUaXZzKXdbWVpo'@;
put 'TFs/czxAW2xnQmV8Wz49dkQ1RD5eemBUOkNSL35XLFdYLlNVIzkmZFVhcDk+SDRqaXheJGdwM0goWT98ZVt0ZmpeWDFnOywjWl45VnhiJWIjTiVtKzJwOW5gPUZUaCwlKTIlYjsseGksUUZLalpyT2ptSkRQc11nV2ZLJXEuMVs+TSRJXXEyQ00lIj9xSyMqKmhuVXJUNnhNcFNXNyswc3V9dGs8'@;
put 'UyFVNkRSIzExYn5qV09kQ0tFNChWdjI2c0ViWGtEPE1XNF42KVMxXkZ2cm55Vl1SOkNVM1NEL1VwSm5jeEo2R1JXLDNtdCZWUGV9UnZqfHJALGpOaz9sVXNIU056W3tWc2dyW1suLEQ5RDpQX1NzeDM7eC9IOjFLWCR9Vn0sZytbLmBNcEJNJUg5XTlgOikpJW5LKDt5cCYlJGIxXj43P3JfOzwy'@;
put 'QExmM0l5RCVCJiMjK15xUmkkP0RKeUB4Q3UuLDBzTjQkSnNFLkZ3XSZ8YWxtU00hNHx1T0FaZHE4MCYufEBqMktLSVlNLCF8fVJhbj52SGVNI2lIZGo/YHExOmo+dS80V2NwWkwpW2p2TFpGZGxoZTVCWUc3cnBGdjB2fG1MdUxfNXJQKTN5L294OEQpdHsyU0M6TlMye0cqY1MvfXlbT11RI3Z2'@;
put 'fDwpJktkPytsPU9DZUZYMHp6TV9EJSpySXs1P04hRFpgdVcwRVVFT2MxQkBYSWtkRSxydUttT3coVlJnKz1DVnQ1O2lGfXwsO2ZDZlB6IihBa0NLQ1V8PU5EVmpLTEM8MU4rOEJ9THJKXz9hZU18cHdjTi8wSkdtdylXZEB+NF1oeWpKMUdjYTNxak5+JWpGSnU0TU5TclEjQHJQM2IxNSw9RSoq'@;
put 'fn0pb3xYY1hzcz9kQipFcG5VNVFCckNkYXdoSzM2Ml4wZCZeImtGIWkqV296REZsRV5+WEoiQExUMFgzRldzKVlpbStqKFE2TiFXX101TiFdJDJ6eSlPQG8hZzFBVWUsXT9LaThjcDR+RDNLS3dYMTxiSXtdJUcmYSwuSkBXaks2KTdqPSRYJHk+KiNqOGZRYmVwJjZePEQ4b10vTT9hMDAlMFoi'@;
put 'QmheJVVxI111UnlHV34oT3pLQjJYZyhmcThrQ0A8YnxraGIuVCE9cUFuTkYmcyp2S1M4Qkc2aClqVlFnWHZwVTo0d3tQOnlhKjVGWyhdRCxJREdyaF8oM0lAJUFXIXBhVj41cStiYjczdHo0OWpRXjI1PS9oQlt9MXV7S2JgckcsOnlmcl82VDY/O0tqR144V3dBVEA6MCpXVmgoLlhRImBXLyVr'@;
put 'TGAuY2czei9Xem0jRE11ZHJESCpGfVtacCVWZjEwOltrLGJAX3NVQjErTWZdUEEvbVl9QCQuIlhFUD1SSkJXeGI6VzJ2WzZjTk1hQVYqV3lYUmUre3w5MUEqTkdCc2Z4JHsvJVhSKTl8Til6VjkwTSpHcjpVQGEyInk4TEMjKnRbVjQrLFowdXdFeD0zM09vZ1N9TmpNYn0vTkJ7I04zQSk7TUNx'@;
put 'O0I2KV8+RklJOV9FTVZDQnVUaj5lQUFjQiNsSXVSMGVxXVtnSktfPXhbeGZMeFRXazB1W3h2THhUT1lAeT05dXh8QnpNPWJPOlYqL1A1e2tFTjJNI3x8WVUvKWBhUXhGOjkkcysvKnZ7YzEjc1lEZzduKmk9RTNdP3BaWzoyXkJpbHlZSl9DTGl2Qz1wTz5BJnI8fWYhWCNbZ1NJYiFjIko7KDIr'@;
put 'MWlKbTtRajMlVnZUIjJsO1d4aSJAKDc1RHk2b0VTbnhuNWI/fDIuSHE9bzt8Tlh6P3wlUjxTcUp0JDojN3dfMm9QU0pMeFglVHopK2FDM0IsbkxodSszK2N3b2dpSTtNcnNje3pDYkZqSlFgVzJVVyEwdUdRUEgydU9XaGt3RGJeYl1HSDI+T31iWWtqVk1mdy4veCUqKlIhSElNIXw7RDxHWy9U'@;
put 'ak4kP1kmNyZTa3szI1JlSE16TGBnUiZXOEhCYDhlTyo4L0R5OUAhazhgVGROQW9WWipsRTtsdnJNYjI+cjAxUy9uU3trcUApMzAxT3xQWmhxM3hKQmRmcTt7PGNbZSZXZ0M3UDU+REZZTkZuW1lIYjFoUH10UUVReDJpfFR0ZiE7fHFUOmR6c0teMSV3X0M0THF1KklHcj1LSmgoPT0kJDxVMVVA'@;
put 'RnZjLCZrJn1mITdrVSZRJjR7cUd8LzN8OWh4U3pOcjolSWIhciMjSTQ3KngqUkZnaDV5WXReNnt8SD5GcmhBMExeVX16Xj15TUBYVyNrU3pHNk9LfWVQKj10O3JhWjRLJl9BMC5qLy9bKllkK0JMT0YlWEdtUiMqYEpGenFoTDBlP0gxZT9BQDVJRTNpKj5aY3l3LkRUYiZzUHF3W3hpWEhXOzNM'@;
put 'Xk08e1h2TlBOVUJDYnohZURIMnBOMSRZamFwdmdYMkg7M0hSWSR1dktaUHRTOiVDdTwxOzBXQl8md3FNb3tRKWZ5Lkt1PFN1dFVlZmVOWjYsVzB6SFJLdzhQUE93aWQuKFEmbSJHezl4LENLOyVjMzdjUG1KaExAdXxpI3s3I18lfTwlezxJOll1WjAvSjI+PGdjKVopUHp7PjYiLDleRjlVXjQs'@;
put 'LiUmMEZqLzohYyNoXyRINjMwU3ohYmJpQmxpLl5CSXo/VUJfKzRLMDx2JXYrVnhCRH1zfFRJI0Y8NCo3VWNMWXJOKjxhKHdCdHE4fClHUTtDe0A3QixrV35BRmldRTJ4aU8qUy9WZmxieUBwfng2eVldOEZnQTEzYl9CJSVae0VyblF6RF5nUE1QNTRsPXVPPypMP2h2Mj53QChjSnclPC54Qjpj'@;
put 'bXAjW0NIZVVfKDVFfGhHYylnNFV1aHJ+LkRLOVFrdWdyUCtPdyo2fmA9W1IpKUtlM15hdmM2XXQpSClhanBnSmV9TGRoekF4PDhfdn1EYW1+M1hCVyx1TCppOmlZPilJPGYhVElXTlt3PCZxNlkwJF0rZmdZfnJCNyEuRDs6KTJNQU87fntTcHVQTD47QiZiREgqUTYqIX5nSnF1XkFLOkUpbGVQ'@;
put 'ejxyIjI4QjJeLkM9e3U1PW9wTTlBOXRRLj1DWlo5X1ZZajcxRV5EUS5OZExnPENsZFgzTEg8M1FjTmxVPXVWWnJHcVFVTlJ3a2ovUD42KXAjYiI5SGwkbnNBMX0pV2ROSzAoWn4+IW9kWCFSajtaRU1icXlnKldpRzJqRCRpeC9NV2RHUl9zMUpmQT1+NFgjRX1XYyVtOWhTPndxTTlzYiUuPCwh'@;
put 'Pl4saTt+MktLdG9DRyshW085ZSJjfmI/JiMwb29DIU5vVjFqTkpTJExyOz1bJihqfltEL0x8VnVSYGZzKVVKZEUyITwoKTpQZi45T0hNKmFpaktlZlVmVEZuMF06UGpaYXBscWloeHBRI2VzKUh3WEgsT3dFYF0+MD9nN0IvIkI0QiNYKT51ayZFJX4mbjV7TXcmYCFEcjQrQyZUYkImUHdaXXxq'@;
put 'SC85LFM3MnxlZlkmTHhYRStZIUU9MmA8Sl9PMSIvfVZOeUd5cENQV2Q2MWpPLFkuN3Y+JmQ2ciovfk41fVdtUV1aITg2bGA7WT9hPzVuPC56T3YqLltXOW8zYVZfYkJlZkojTyhddjF7cl9gXyQvI0olZHhdOnw5Ujh6N1MvclZET0s4RV5OUnw4YShSbEwwaGZhZGZhI1JGI2wkMUlWJHNZR2cm'@;
put 'RTVfeHRhejwxR0JJQnlYLitQZFohOHZhT3t1X0J3Yl5xXVFqSHdwOW1gMnVlTHBrXldOUm9BKz4oMT9QJDxGMXN8eWFqayEkIWtyUGFwbXd5elJEWE9YfmtYVCxwITBkUF9mJklofC5wNywqbktKdkZZUUNRVkZMfEBYMHUiMTx4VXYxdT8rd2J6YEUyWFQpQyNgTzdQc3JsYWtqMypbLG1ROjBw'@;
put 'JCpNK1sqdDMrLl9bRGJTRXEmQXdxYylaQkBqL3gwLmUyPV0wfFN9Yz8pMj5kVDwsdWk4ez4kNFtmblM4KSZMPEJ3UFsxP2M4QXdyL25NIUxQfnw5a2JjRXYiaEZHVkZ9ODklZ0cvITs0eTs3cSUlOHlaek5pa2xZc1M2TmE7SEJfRyM1JENlc0xANkBVN31PL2NXS0FPQ3dlfCxjQDNuLjwsISUu'@;
put 'JX5hXmo1VXw8Z3F5XiNYYjMlL3pLK3t1aDppPisqQyY+VSE6VFFWQSlOTHR1Y3F6Zmp9IS9ZdV9yej45VVhUaFAjYjFGe3dYZkQ8T0BVKDIwJENqXj8mdEs/aSNIZWBlYGUrQUpqMzhjaChleHw6WHJQamNfQThdSz9HQjIiSyQmY0VuOkkqJm45eiN1O143KXlPZkNWeWxST1orKkVNJnskeDZl'@;
put 'SX0yPk1DJStQS3MpMVpURFl4KCNuRUJPQT9SU0RZWlZsRWl8U3dwYzVCYUc3cmhOP1hgcmdMcUxpdXA/dl1aZW9ETiNSTyZYYTw8amtqRFAiK293R2QmJD5DaCJrTkZCKkdhRCEvN2Q5TEV+W1s0WWZWYzJheXVDYlIqSmxFMEJpIjApaykyKE9CR3VESEdvbWBaYG5OKF58KHxObWdyVigoNjwm'@;
put 'TyhvSzFkUmZqejheTmNpNV9oNXh2WUA7S1U2emIhdlFWPUV0QklPSDUsLn4+UD58R0xNYW5NSH5DRVBHZHFoRFVeKEZZNEsmXz5DZXFHImxCMEN4P3BMI3Z2SHcwR3piIS55YnlXIVs3PkNDeiZGdE1heXg3azo+fXx4XTYxel9xZSU1UVJGN11tbmdsRnNjVTQpTnpEKzl1eCsyMyFxPk9PUlNv'@;
put 'NyhOVHxidU0vSkVxIV85bzpZdUA9MEA9U2RQVlYxRktYPG4sY2ApIzxicnhQWEx7Ql5hMywqQEQ6NzBfOWA1QkBXUFZqVF1CMXlXdjJMa0BXbUY6bkVTZDRYNyFsbGxPbH5lVjRpZDs5PnZ5WDwyQG91Zy5lRmc3bixyLiwrWmAmNDhtRjohUGVwSEopNjR3dHhdI09vQFsmSy4kM0VafXdUKEo5'@;
put 'MiozTUE+NmBwVSt4Rnk8SS9gTCJPXSVEL3kjQz1eakU4PWo7Kz5JdS5xV30kS0Z5eiJ6bk0sJEtGMHowdnVAc1VgTjZ2U29zNT0mSFRMOlAkRG59QC5yVilXbSxYbEBORWg+cVVPYV54bFJ7X1E/UTBQUy4xfCFdUV9OWixveCxSNypbLDtfYjFTOClAcD1XX2o8LEI0SixBPltzTC5ZeUhdYDxO'@;
put 'blhmeTE3YFglWUJjSEwrVkI3OlltYkBkLDBbL35xZE42KkBvWWcsMFsvNTI5Q2FXcEBoUTRCbitNXXNsYixWWmZ0UXwvL0V6PkNkX3NsSCg1NXIpcTl2ZiNGSTxkeURhdTR6YUB1O1R7M1h1JSwrODBRZSpwWlZFKnUhbGpTb0x6Tj1OM2hqdExPRDBteERiXixBLjx5NHR2Nj5oKnQ3Sy8yODhL'@;
put 'KltfVEg9TmRmQUpJUX15e2t3PlcyJkksTnt3JChUeGdVPGUzJTFOTyRLWHN1S2xTTFt0cFpocktTKTx3cEp3NltPWj0/aDxZZyRoKnhTNXs5eGdzLjt4UnVsWilCeVQkJF5RJUc1TDlRQCZbdXNRI3tZLlhjbUlSKDQuPy8oJTpMMEEmcXBGaChXKyQuVHssVVIjS0dPd2lFMUI/VldDISRsLlBD'@;
put 'PCRgaEt1eD5MZ3s4OWNldkxDVXp+RDNGUVVtYWAuKzEwXzZ5NVdmKy4+aUtkRmN6bD1NRSVHdjE0S0hDZUgiU3xge2JMSVRrIkpbKWtvTj9+eVs0a2hqP3k/K09rQVVJOTs3SFNAbm93JSVnbTk6Xmo4NipnLF1bQStZamtQfCpPMU1UfGBaYTh5NX4yKUF5IlQjUjxOSTtxcnFwcjJsb0FTb1B8'@;
put 'PyZDe0UyOEBKN3EmRmZMTHFEODU9Nn5mfm9VTTBqaFoiRFRWTG9LaWxxVzApQXlNVCJZIihobSFuJVs+MzVzVCF2c24mP0t0X18/WGJMSSJTdWdten5UXWhbKk8vaEsvaUtwUnY4MVs8flBpel5GO2k/TE9eQSYjUXF1ZkRfOGlLWFFpO3RSKWpMU0lbKiRGbTsoZD9QRXkoP0RLYD1lbywhYlRf'@;
put 'SkV4WDp3TzFNVGIvRkMqeDxgdllqLFV5T2R6ckNCWypBXm0oTG59RSNGOyR9Vk9eclhkNmlpUCF1Zlc0fUN2XjBZOyooRn5lMk1+SExGdXovLlYkfHkqLC86SWxDdDdfLDwyIyszcUI/Y2tFaG07ZjtpWD0odnxQS29sUnNkRzV+JW4seDV3WHYlYCYjNjR2a04jPXJ1WndBWVtrfWBjZmZVJDBu'@;
put 'Zkdzd2UuTjF6SXdlL2BpTFBAcm5NV2hCOipfUH0mbFlTKW00RTxndXc7aV9YdExtQnlMT3Q3ZktAdjFtOyJ3ZDEpZWdwK0BRVWc0RCZ6bDlqbCRhUDRLcklMaEdCLk5RaHx1Ly90eXQlQzp5MnsuQjNJcDhwVSpPdjlWOmpFPG1vMiRCb1N9dEZGNzwxKTV1dlJVUzEhLChkXzIiWWxAY0NENnRf'@;
put 'TiFmL1lOPyQ5c0FRNWIrY3tIekhpJXJTI2opM35xPSNpb3VbNFZ6UlE6NyF8OU16VG49L1coWkRGQzJ6KWV6am4yfiU6dyheV255LF1wW0B+ZjVvJkBGIWRqW0gwNiE9ZT0ofV9wNjJvSnBULFNCVDFJWUxubSUxTCFyZipqVyw8Rz4kOyV9VGIsXklXMXQsZ3A0V2Q5UnltTUJ2ZGoiJHQkaz1q'@;
put 'YHpvODt5Ly5rN2Vldmc6UUZhMmwvJSQ1azBtTVI9ZUIwWXZtOyUpV20pVSxVfCxHbTAjNkpmL0RqaVQyQih9R1oocCV7fD0pUi5HUnZUO3VnXjxDWmVWSHkyJFhTYTtDRkY4L3I8aldDZlpaLEo1K3pkSTNXdk9fMS5obGxPKkZ8NjtlJCFPbFJ8YkE2TDY7PEpYYDF6Mm1gUGJxanRSXyUoT2I8'@;
put 'TTQhJj8kInAyRT0vNFM0JkM0JXR4cWk5WFlNYWxjOil9NnBPaXokVj0zUj4rKTBPTHI5VjQkT2JTd10oUndKWn4lZnQ/K1B6SipGb1NAUV49OzgiYzYoMTsscn57IWY7S2M4UkRwZGZ6Vy9MZ3phMW9+VEBgM1cmVkp5ZHp9P3pKTVMqP09pUDxaKiQmRD9PPTFhZXttOCpSKmF9ZFtaejhtOHBM'@;
put 'c2oqS1BbaHErOF1eajshaUFjVChxUmU1KUUpRTVXbF9CTndYbHsjVkllNDw5NzU7UTkhaCUxeWM5JWA8M000NSorIWA6RjpgV0dXMHI3cDF+VDoyal4wcTMjK0huV3pDfTI2S31BNzZEc25JZUFjNWJnbzJkNiFbT1Q0emU0ZzQ1L1lQdzB1M0l9eEIrKzBAVXc1dTtPanpPPF9VOT90Xj1GO2k4'@;
put 'SWU5VjtRTCRLOnRVIzdSLzE3Pz1wbyN9I11lMkJNOmI1My48bkNecF5+YWE1fHo7Jl84JSNQLGQhPE1WcCRXO2RZU1FeQyJha2lBXTglfjVbfF1oLkNDIzBbbDwpZUJjfWQ0YUJdM1U8UW9+KVUycDV8JF9xOW5Ifi8oJVY+XVpOe196UzV1MyE5ZDZqQD5nOlg/T1M0Rl09VmtLUnZsZztCIyY8'@;
put 'JSRQTiFSKVQjQiZxdD1EW3s2YmB7ZnJzVjhGUW4uKUR2TEtFRnNgeyVVXkdlJCJLZD9oRkY+cGUiYl5JZWYsJUx8OzdOSWVyYiN7YSkmcUV+bFk8SzVwKTgmOzpBUnYoWSNLIVklSH54cUU+WTlWbDQxN0pEJU1OVTopbFJJZUZ0Z0RrN3N8L2hmWD4veFgpW3NsVyNGe3dKcCxbcTNDNzQucCln'@;
put 'cHpxTWdFWHcifFdnVDBbW2Zoajdnb2kmNiooR0YuVCE2RG9FdXZKPjNGRW1CbWs7eFh7Z3RIVHdgeWdYMl4lRCR7Lzcpbn5tVUFZNkImX1s0TWZoaXl6YTshNkRBJDhJLC99ZCpSZSwwLCIhMy9QXyNSTkVUMSojOGNKanJvNihDS2hXNFE5bC9DRU56byJseU1DTVlkWlI7LEZCX0deaixiQ3pX'@;
put 'encsdyRRaHwyVklORHFLT1JZRVhTaF4oXV95cD10ckJZI2M2Nzg5K24iXmQ5OXEkKypIUD1XMW1wIl93QGg4U1c8bz0vJWRSeSQ8JXtHZi4pJkxpIllNan1xVztXfnIsWzwya1A7L15RQ3M7V2hePi9nQHNgWktgPFM/TW1gPC88MixMZzJtRDVWakFCOllyJClSSTxoOCtOY0B+fHdzP0UvQGQu'@;
put 'c2pvMzB7XUt0XmVvKFovOWhfP00hblRqOn5edUpvJVc5QiJDXS9wTFs/VXpYRXRCJm42NCNyc2smQyIrMXEsXz9XLiozUzBxLF86YVhHRyxiIWU+IklIbjQ9WlByI21eLztqI21edltiISprOmZpfndvYUV8dUg9KWw9Lylab01wJWBuQmEpKzxzV35ROFR2Sl1rdXZ6YHF0PS95YkBXPnwlejtK'@;
put 'U0JDajhmclhiNlJjZ2QoKnpmfEhHNV44L0o/eUJYSDAvVWw5ODJKPDZJaXFoe1J1Rkc0NXpxcD5PajJ8ckQkNzIhK0g8KishP2YzQmshXkFUeEloO15MOVNOQHY4PnBGbVI2cnBickNWQlcsalZdRTZscThgV05QRUNjZGhAPXJeR2hPIXYwRTpGe1Iybj1gKV1PN1E+SyJ9MlgseypFYE91W1ZG'@;
put 'Jiw5bmpQW2Z0UVBXalB2WjA2azFCen4rTGQ2WyZEN0BjS09dcUxFR3Y6WGA9Rnw5eXFqK3dIW3B5K15lYFtUJEtXcyRjLDhSTkVPc3F5I1BAekNaTnttTjZGQUgqKkczeCtjbDZmWWdHSkp6PDFdTnhpfkQmaiZNQm07P0QzKEBsYkNgIS9yIXs/VGZIU25LJmNTY0xgT3ZHPGkvcFg/cjFpc2Z1'@;
put 'WytxfHpmWVdJZl4mVFRPQUBTMko3JjlLTDlmLGRyK2ZWO1NYYjhbOVNeQXY+YExpcXkoNyteYVBGKSJQPGBYc2BBRW1fcXlEUE5pWTNIXktwRmJXVWskS2c9cmpMIlNKYWhROWxQIV5vM3BGKj8oP1ZHRWBDfVI8NWklUTg9Py5ILkpbaENaNDxyMDNWOURNeio2YUtxfUVRUDhYZXJ3K3g0OlBi'@;
put 'JCFaOWZeU0NeRGI8cEFaPHErfmUwK1ZdaUNYLDhxLjUheSZGI3Q+X2FWSlgyby9WQlp3RTJLfE5OQ15LPiYxIk9hIWNvTWxsemVUWW4xI2l3aXJvWWpfRSlJZD8zZUtZa145aU5+RCw0flF2b1psUiYuJnQ9cEBFKEpRIW5+Y2tHZUNzaFtedlo9MyxnYiRSWnNbKmhYflZGLCRkaG89RlB6PG58'@;
put 'UUxDMXlSPl9nbT8pYk8mMltfM3tFYF01Xz8qQyt8VlVAMjZ2MzJKJkNnclRGPnwiS1tqciRbUSxMNytyeW50c2JnanNIPWgqc0pFWkhIdzhUPmpKIW0rVFQ4QFZpaHUqQSswU1dVTkY7PCxfTVosd2htUlI3TGZSSHZ7Wm1VbTwvfDl7dDg7XyFqMzA8SnV6SWIoNT1JdTp+aTtqZDAwR2R7ZDF2'@;
put 'NHNiY2BpW1A3Nip3S01qa0d3JTN9dHRKeTM9W19xczdXQ3hZe10sIXEwM0siWlZrZHoiajtpISYicUxAeV4xRkU5dkhiWGp+c3V7YXNJSEYxMXxOKVtnLGQhXTN1VjJafShpc24xQEFpd2pGOzE6OypMeiNxejppVCM/bGlwWHo3Xj1oS0hfWGVEIl9AUkx6bWUpJlRhKTp+WWU4LnFKW3thYlY0'@;
put 'VmBDPGhGVX4jQDVpWD1mTU5WRD9nc1Y0MF9geitfXUYjNTVfYFlQZD5xLFBxMS45MEpZclZWPWpWQUciR3VAQmIhOHlsdGwhbCpEe2tkSCwmJiVOKkkyaEU/MEQrYWtFeENfN31kfSpRdXY6JXhwZjp5YXtMTyM7VVd3WzxSPkg0Uj5JJjcvNHRlV0YuIiZIJn1dZCRyczgqIjhdN2dwWVgiOzV2'@;
put 'Sk5DI357Z1ssTSt2ZXdwaUw1bCFPLFswQFsuU2FndCVLaHtgPXJVKC4hInJVKGEiXVsjfHdQV1tqb08qfkBaby99THg4MS5ORTJ4KUAwUk8uZjReZHoqN1YyciZJL2xbfSU8NSN3SHtpYCFyUThQdGxAbWZIfFRQKldMYnZNNE1MYlhfOV1zXUtXQVdAak5IUHI7UlF1dXFMSyE5O0AlTnAsPXUv'@;
put 'ZSwyPV0kIlUjQ2hvQ1NgbHpaRnsoY2EzVU51eVQhO3lKSG15P3UvWTJlVVZ6Wk1WPl4vcStdVFl4MngkeyQ0WkZZYHxocD5Ual5PZVNWWCx1UWcmUylVWk1WWE1BTWUxP3syRTRBSEphMzIpS3A7KTE9VmRoRmlmMHVAPGthIWVObVIqXn1jQEwjUjs9QGMrSDUofHkmWHExInJ7TWJTQiQjV34+'@;
put 'VUJtbCxXTH01TXhOTltiU3pLNWtfaXVIWyokKjVLSTc2WE03UHN7bVE+WG5qM0JESCI7V1khX0Z4d2pBVkZleEpZaHVdTGheVjhXXzMrUXxeMkRQOmRUeDtXJXk7LHN3WlY9OWRlczNeYWM0PyxTej4laCJkP1F+ayYsbjhYa31ZbmE2PT1hWmFFfFghNnFwRyIuTCtVU00xaXgxc2BEP2JEN0JO'@;
put 'OCZHIlZzP0lBR2pVOjFHIzI9O1JBTSswfjVxSERpdSZpZCNKIkYxL248OjghK1Ewc3dnRj1Udi8oflZtUy9FRVg9N3s3dUo3c3x5NyFvMGBiIX1YTy9fIVJvTUV8SyNPRlc1OSgwcWRLb1lYVithQXhoYyYiXXFlTnxrcWdjUyVFZURNIVMjeVg1KW5WLnpIUFZdZiF0Nm9CPDBXR0FgT3UsdVVy'@;
put 'NGF8MD0wWyVAWlttMHVMMHFrTiEoKStzXzs1RSwwOlZuJjZjYSZUSCtKc1FZYyhmNTtjP29xflohenx4eHsiZUokQl1BMFhjSGwsVzxbMXdGNlcyaGI2aTlMcHcrKHVjcDckVXhnUWBSLiM4a2luOSZ6YEhZVj5wMExNRXAlIzVodGtVU3RpS1IvJGtPdVg6d2ExTyIkIThbRW1xIldGMDFDM1Nz'@;
put 'NDUycUVveEAjdDt9bTdoKTNLOGVhKXtOWEopQCxibHoycUVBeDYzb29lYXNlXi9ickEjc3hxRTAqIU09KTRRPV17bWI4NSlTaWVyWlZ2eGBOaCFXVGBJTj1uWTpmPV1KfDNYSztXPUAla01zenNlPDpNfmJQWVR1WktyZjVMYnxdPnRpJDtYbXN2TWIsMUxZKV5tPTM9dGFpfiR2fWV9KDtOKFl5'@;
put 'KywsI259LkhuPWJGb0EzezwkM0tbdC5YWiUjKzVHTiEsZl5MNUU8Ym8hPlMyJTUpKy5iP3ZTRUk5V2tIY1BZVCR4NCM5O3xrL0htTlgyempbWzghUzhvcTNEOjVIR3laPlo1N1VITWlrclhdNSZqeXFsRWwoUE0rUWdeTFFQaVtRZyEiMSxXMk5sazgxMU1yV0lEeCk1TzZkZ3FFSztiRnwoTVdY'@;
put 'Z3YkcV5ebFAremd3VjlyPTxUd25HL01fNjBQfUw+L1hVc0NbLk13LF83ZzJELCxbRFZTWkpQSHMqIn13UHlEfXt4d0tNNlg7SVd3e1B5Tm91WGpiMlpGSypJVWthMks3eUVVZTwmWyUmY0pRbiNoKntxOEhmeFNJVDNsXWpafTo1U2BOUjo1UklnYV1qKEt3UFcse0VMQnZpJlddK1VZe019MUZ6'@;
put 'KStkYWlqSygqRyFCWUAzPyZZcTo2cU1TUl1+P1hmRElLTWpmYHFIIVI3a301K0VpUnp6L2g+IzhhKlZpKDg2bD9dOjNBY2JpPmsyVG9mSE8oUHJkeEleRWc0W3VLLnRjYyhiamplPVtOLltFeThMN1NPXnlQbntScUdFSkYlMltuNzBVNCFSUDprTGJ9fV4vUi8xUDJaJVdKYSNCdnhAdmttbyVg'@;
put 'NGpmfWlUbVkmYnw+Izl7VjBEZXhmQlNffkJJIzJ3SlQ5KkxMQ2gwTURtYHxPeHZxTUlDKlo9Y11hR3ZaL35xZzt6UkQhdHlablAzS0tMOTRIOXNzZiN2ZChQVVJKNj03Zk9NRjdlUF9gKEtvJVdsbUs7bC5rZEMwMXEqO0w8MDZdSyJqRG1KX21BWWdDVDIieVV6WEc8UyFxMDZmTDxTX3gkRSxN'@;
put 'I0hXbDRQZzQyK1dSUlE9S2x3YEs6dWo8WlRLJGhXb2pKRkduSkJUbEhuRGEiXWQ9UTpaZldtN3N0Kl5uRzl0InBMOExofjlMZSpfW0AkJCk5PzZhKkQkcDIufFZsUHY7Y2UlJEd9WGwwSkVrRyEhdjUpeitkbTh1LkxhRHtSTnVWZl0/SDMmZE4sdjcqUCRHWXAwO1lEVnZWdFdWSkouTVFbN0hZ'@;
put 'Yjs1Mio8MTh4YC8mVW9DbEc0QkRNLnJARTppJCFkOHQvIyl4Kzo/aEA2TS9GXzVAdCJufEsjV2g9O0N9KX4wfipSTVMiTF06dlIwcEdwQElSPENPWih6dy47UDszZ3RZQGVufSFbUDFMKE5VXzdMZ2lOYTdQO0N6V0FPSFQyQ1d+NkwhWE9UL1o7Rm9YYFkzTl92YFcqNCMhKihTaj5lWlFEZm9R'@;
put 'UXU8UXkwNXVMfD4+TlY1WCIpRyFEbzleZHN0SVMyWjU5I3s8YHVpRWc3XSpFbFo5Uik2Ykxxc1siIzoyaWY6LmpmS2hROj0vTGZxaWFWQGNiRmApK19zYnJ2alIyZDxYOjp+V3Mrcyl6K3lnPTBMQEcjSyksQkVOeytyWSorW35MLGBOMCN2SVZFTyY6c0EwQD1Veyk5KD1OWTxbR15hIjxoSW5X'@;
put 'ZWJLaVlvQ0UuYDxMUGYlYCZNMlFJdEljSyFVSXZfNFE4KlFxSSR6Z3hKaVBTWSU8eDlWeGJmbGZlZyUyUFQ9QX18fGlrbTMvWiI7KVI6ZD8lY0BJTWgvflZ1d0BFS3c6aDJnL3c5UGQ2YyFJZmVlMCtQYnpXRFo4MzdqbEV0KUdVeXcleDBjaVlaYWVvNS5lOFBQM1RiLD8hTSYid1prWmcmZ1Mr'@;
put 'R3pDSkBEWj1QbzRaciV8L3N5JjBNTkIpS1h4dX5CRztjYUpWczpNRiVfWGtmZnxGQHM3ejQpanJmXSI0OC91QG8lRFV0ak94Y1dMWlU2X2NnPjllMFE9Mz05JEtOfjZlaWA0T0lJaG9EVzpaQGR8eEM/S28zRTlYJjhNUE8oXigiYWo5Yl9QMEF7ITEiR0hjcU8kJX41OVYufExaek05aSxTXk59'@;
put 'MnB7cTE5ZSFAMk9aQWAqdzVXSEk9NGF3QkM1Kyt5JFM9ZkAwcWdJejxibHFldjp1PlcpQ3Bfe3hCfS4pJT1uJmB4KEVebmNvLG18QFtVXT5LM1J+ITVWZHZ0I3tUWCU+NWZZWSpWbjE+dHpBZU4iRldHM1pBKiNVQWRCUjlAI084MWBtXmYlY2gzTTZYWllwdjV4MHFNYE97Tz4scnJrcSY0eDYu'@;
put 'YXMpIzlLbjVbXlllJTx+MiJhOWFCN2p9MV57PXFaJCtPaz1rODxDJkFoaz90bSMhUnAuOURxdFc0NUlVSz9hPFNwXz9YYG11dnVeKnNKX3ArJSJPYDtuezF9NXNFJVh9Ryt5WDtzVF5TMndQJlNkY3E0RCxyT150e05RaGdDfS9CV1ZBRTF6aj9lV1Y0PGVAaV1WUFZicGp0cl5OPVdFSD01NHdj'@;
put 'XlleSkliRkhZUG9oNXJlKDRzenoye3VneFNmOHxfeXZfJDFQOik/ITg3bVcjVDM2XnJKTm8+SUowWjd3LlE4P3EvQGhvNCpAMGZvKVU2PXBpaywiM2NoKm5BR146ZVkqe3pVKnEiPHElSTJVI0MjR3NJMkBSZ2lQU1RnX2soVW9HLnwvUVcqSi9sNXJ9fjp4OCNbI3w4Ynl2SzxwQT59bSx0aXYh'@;
put 'JmpYLFQ5Yz9OZmdvL35PIkljaTRbNmZtZTZMQEVweWU0ezh4Xypub1JnTnRHYGBQfXk1TDBfNV1EeVJ9O3NwSntEdFciSj9RLyZjUCNqXSpEQFg/XkA/U3BmQ2A+SHZuImtJTzEsMCwjeCFqaiQqKV0hPzlxeUE9a292WCxHenZoLkxiKXhjNUtVQSUzVHRTLyl9fV57cHtbXnh5RWE+fUowWWtX'@;
put 'ciouXihXfTAvZ2pHSkwwKnEqXiN0Ymc2YzFuaCZGWlA7SyhQQip8OlF2SFlRMl45aVR+LGc9SFd2ck8pKnd6dVNZaTRjYlBASXksRE9GUFI+bz1NNSkrSzRwfWpTVDE6Z0pJbT9uUE9kMmghJn1QVDFtRUtHSXp2JWlSaSpSb0Q3YXUqM2FJI3ZpO3d+YW0qSkMrVXh6UGZoKX00ZVV4YitIXlJC'@;
put 'eFlqOzlEMDVrPTxTT0Uqe0JpdD5HRjUqNzdUSDZ1N0oseyozREh+VE8kYSpdeXA+Ly9odnZ8XzRTLF4zT0N8eTsuTlkpYTgveSk2KEZVRGgvKm9RQjcuZkFFQ2BsWEZDLkxAVkN9bDk5P05vPTlKIW4hWnxHVVEycG9uXmA4cUkyfFlRQU9SaVkqcThBLFQ9aXJ7KVphZ2Yrb2BDRjB8R2JUUWNx'@;
put 'WUVJQUguSEFIUXY+M0tDd156aV1HbjJCIkZyLGNAPH01YDpXTHJdVmZFXjBpMHdOQllrbWs2VF4uP1Z+STIiLzEyIzZtYiRPPTBtYiRPPTBtYiRPPTBtYiRUT0hbZWFqTENGalcrNXJ7O2kiY15hQXYka017SVlnPm1pflZncn10QixlTGQ/KSNoPWNQNTlWeFJYdWo4aWNQQU9CYkpdOltSQl86'@;
put 'bG4mZnJnRX4+N1c5Ri5FJUNfUiFqKHlYa0ltWU1wJTwicnZ+STIidzFyQWVdfW46Pm5IdTRPOmsqIX1bdDRAdDY5ZnI9ZiNeWipWIXNsVW5ybHBJfk8+UlM8PC90T0JULiVZcjQ7UzZpWHBZVTtwOEJdJEVaLEoye1p2NmRSI0hsMlA8RFRZYjVBPUl5KXAmM2Z2OEJqTGtBbUAlTlMsKn1UKk9y'@;
put 'ekJAeSs/T3UuYGtSYWlDfnBCbFllY1NWOyJ+WTA2XVtTY2FyWElbdm0sdk8uWi8sfHk0QHpIYkFKdGdBJX1uVl9VODlwNVgjKiZhVj97PzxbQyguUUlDSGxMMXJoVCp+TCMqJElPPyJ4UikzaF5iRkx9Nkh9WSFhM2VsI1k5UCY1PUZqd35wP0NrenR1XkhEUElCP0ZDJDFtLDU0KUBOR3dyVGkv'@;
put 'ZHVbeX5XJHZJXnZwYUV2ellSIUtCRzJJdU1sUkp3aGxjUntAT3trVnF1L0Z9JjhZWGljRn07OV1mcm5MImE/Z2xkRzA6JV9jLk9vUCUwKlViPFpReWdebCVpQChlSVhVTnhQYDU5dFFTdytycVlQPEdRbXZ6MmFEKzkoLGhwQnBpKkdHJV1WKjE4X3FqdTdeN1BGY3Y4PVVZJFR1MzdRWjh1JkAq'@;
put 'LkJjcSY1bUI2ZWtLcCliQzRvR2F+UmN5PXopL3lvcCVhKUJIX1J8IXhqWi5eMzFCLEpfIzkpUnJDIj1DQjVlcnI7aW9LWlVpKih6dERMTDlDLmJoZlROUW5EVyRqMXdUOlNoMm1RTSo4OyM2Rlc1bXJCeVs/X2srR11vIUFkZlJaPShaPFd9fllJbEY7TjsxNzBNbktZOWtsdCVsTEZMMFV5fEhu'@;
put 'dG1RNyV1Lmg2OisqWGUoPExJQStxSVtDZmdUQytgfGt9cDA+YSYvJStde0Evb1B4e1JaYHh4JSFqXl1gZnFOaF1nViUkQzNbJkBjSXFfPkxGXWQoa2pJS1pVaWB3ckVwZiF3WUFjXkwvK0Zxb1RiTFBSLCxiZjtiWTxqXnZ1ZF1yJVIuSUY3YXB2Knd2IT0sSkd2bmR3fi9EcyVhPkw1dHRAPFRA'@;
put 'K3pjT3Mue2lRL0VFW3VwQFtUa21JbWpOaG5bRnVWVSlINSNIWkxAR3UlL30sOWd6KSw6b0hiWTtaKyRFcGNQVkpmeGhUcVldLGhVMnpSU2c1YjNSUXhIbk1HLlNqbyl0NV81MElTUj8sPTtGP0xuWXZoUXREayFdNypnZDNqXnVkdHNkMWt1Y3kzMW1gcnFheE8zdHhgS3ZOKXcrLz1obV0zSTxw'@;
put 'UmFfJW8jYyojfCJVVXhuMEVGNjcpW2EpU11HZXQ8KVQydy4oZGMuRSZjaTZrbD9wJiU/W1JkamdRTk1JTnpxbk5PUkhqNlAzKVsrQDB8QX5oeDNSU287KU5UKXFOaEJqNG5UTiYlYDpqb1twcUtDNW5yLmRQSE9kY1AlMTYrbTMhcmpPeUBrWl1fQG1MSlVlKyQvTiZVNCNgbT1oW0lPZHN4QVdu'@;
put 'QyorfXxsTn0hTUkhY3dZNVNlcHBwNHQmYD9zb1RvVXRuI3s0UU4xLmJXM1J5PGlgdHp7bFNYPWJKWkp+Ri56UTtofEpfOWpDOjZ6U2h5JG1qVFFtcnl2eSR8ZkBKd1VZaWpnYG80I0Ake3tCWi86UDNpeixzSUl1ZHJrZCQxLmRVI3diZ3tvbm1oVVtpdW9tNmFUYzYrYz0/bjZdN1p5QVdxWyws'@;
put 'NXhidHlGT2RoR05ve1EzKE9ybVJUQiZePzdpOE8+ZDA2bjVLLm9ubThOfWFOL0dOVTlpQnhub1BBTzxrNGUhZmheOyZQWXlyZ3J9MTdveD9geEg/STpXfTcqNj5yKWtROUl3NjE3KU07L2B3WkQiJmZaYCo3Snk4YlBCcWRHY2FxNjBPd1o1VV91OFchT3JmR2Uub1IuN2lYQkg3IS9vTE8pbjY3'@;
put 'd1VlRHNxd0xBT2QjdmNEQk18eyEmd3IjeTlWM1QiVjpONy4va0xzJTwvR1NmTSEvOE4zZU91V18yY2pYPlhTakQkQWosUz9FIWcwNzVCLm1TUjJeWzF4cGBfMnxwaEouMGBbPXlgcCQ1VGUyTSJWU3hQU1BVaF5FKFk+XnlkMz50PWBhNGMqRnF2XiQwalk9e11RZkZsQm5iLD06NkJwPzhhKmt0'@;
put 'PEhTUjMkUUltRk1hTCRQYilKYT1jQiJ3WTwoQyNIOCY4d1lyNig2WjpgLyRiNCszOT8mWCxqNVB8fWpsYzY6RW5PbXJ5JSJGZnV1dEQ8M1JCITRpPHtIcHNpVUZ8YCltQmRta28ma3JSfTdiZmtUUSszSl9JOlRbJFM1KkZoLm1NeGVJbFI3dkYiT24iMTE3WDlKLmBWIj9CM3pSR08mOHZKUm5s'@;
put 'a1g+eVgpeSRoLGJdMFRqdldYTCQkWjRbT1EiMTc2SyhMOURET1BaYkgzUnorcGxSRjo0WXRaRyRsQk40XkM1XTl9fGtRSmxvTGhwV25EXTBORy5CbXgoL1llcXpGJGJaIXZ9fE9HL2JVIW5LXXJsTn0mXy9Lb3YjRHghXlQ0MmZ8cTcrVE9FcURGWiMyMVB6YmxzcElXfDEmQzRiZG1SOUlVZD9H'@;
put 'OENEPEoueFd6P1V0T1g2eixVRkouR05NVnh5VkVTekJsUmJ3SkpHaEo6VXA7PHVQNE96VHREJTEvVDUqX3d7aC55PHw8Ok8vaEFKIyUzbGo/cyVPWixIJGVhMCVlPSpVeXxDajEyPzYlYFRHNll4fWdeZTp8Oi8uXyUqOitUfl5rdTk/XURIK3k1Rm9LYDo+SCpVfUJMW1tBM1h6Ijk+Kz1TTFBT'@;
put 'dltKPXA+QzhaQSROYURdbk50WHR5PUVnZkB3dC9qZ1AvfCZyWVs6TU1wJVUkdCFBNDBtVz11Rm1mcSVbNTA9RngmQnRKNEZYakJ8aFFsQXR0QTRicDlWQlhmaHFnI0hVS3QudkJmMEo8KTBOWHAxWEJ4aVJkKEFFQXRFYVMmKUd8d3B7dVFQLytFUz5rKl5TanhObWcqWnsxN2EjZWopUlZIdTAo'@;
put 'KkFzLzRnUyUhUEJ5dS5fMyssQm9iRTd4Q0RZWEIrMXQwNzZHcV5xUlRqW2tCS1RiO1s8L0Y4KFBOdnFYdl5Ee0txO3M5YT43QCUhfChlInwycSM5KW46ZU11fSs9KCF1YzZ9Imh3R3EqeiI8NG9PeUcxTzRuND5xSW52NFljSjptaTB7THE4VTxLMyR+NVteV1RtRSgwbmNNajRzZGM3OykqS15d'@;
put 'UER6OF1zM31rQTxlMnJJImg8S2UhemQuK3BIZGxmPDc2eEo9KSUmUmwibF1IPnxseFVVOy9HV2BSPiZeYFYlPnxeP0MrPGhIKnRHazAhb3VGeDJzM1djSVQ5dnI2Ym18bjdVLjFXXlN1IzJfcmtzYX1te1IzelI9VTdnaCZnaz1ddWQ3Z2JtUzoxTC48R3ZmZyhId0BCWF9NbU9XJjppPUZfYlZ3'@;
put 'ZG41JiovTlRjMTFJdS88ezxdZ3ZpPi8/TGkqeiF7YXs+Mzx5KTtnIXxhdkplLnpKJUc3cTddPS43UHwlczl+NTNnM050RGt7dVpkP1ZJaGNrYXVxUllHeWN4ak93NyxIRm59bUp3QkBGI3QmK3U3SDxCRD0xVH5dOFNTUDg7azd9eXtwSHtLTkteN31gQEhZfnJ1N1VpIlVqaUt2e25QNF1lWFg4'@;
put 'OCJ9UWY+RWN4PDFqMm18K2NMWXkyQVdrajgxN1N2azhoVSsxY2hiOjZ+Q3VIPXUpaV1fNEh3Oi5zRzEyb2E1U1lIUiN3IntjW0pFaSxpRUpVVllKUFd2QSQ3THxSPTlyTHlYS2AjMyQ5TV1eMl89cEs6UGc+MGd1WjpoWkokcE5eaXUpaiNNdkY/Rk8wXXs0TEhLLl5xd0w+c2o6W25LaVlEVXp7'@;
put 'XU1LT30jTjpvIzFLQStDbF5fUFs+bGViX1lrIUElUiElIm19dU58PStqI2JQZCM1MWErTzc7cjVxVixebExBSDU5akV6KHRyRkZdcCFfTW9oW185YWo7YXQxMStxJjtAIkNVSXdMPWRaLz4oXmAyL0E2cnplUnxxZmU5Jn5ScjZiSCRIaDNrOElxfnd9L21eRj0yJFZRQjRaP1pOOVE7UUwzLy5w'@;
put 'K2xJREJBNDU8cXtIYXg9Ym0hJnJAdU5SNTs8ODNKYSZVJEg5SDlIX0NxcjFsVXwvcFgwfFh1I19aVCl8fSQhL304czxLd2xIWSg/PXoxVFoiLiRoWWBdS1U9QEVlOW5JODU8fW0ke31nLHEpOEJAOyNbKHFzKE89MzdFWns5d3ROQXlpZVV2Wmo1JSkhdHBPd1RtNkluRC9rUU4xUFY5flNON3pk'@;
put 'Nzt3NFNgVz0iLyglKk0jPTBtL2Vtb2YrYWkxI2RkUUNvejZqQkNKPS5dbjo0dT57UDsvcD1UX3UmI25NZzdRTFtUIVJSYnBvIUw4dT0wOHczNlR2azg8ZXhefWtdSH45RVhVKmBqS0tCNmA0VVc9K2xqOSZeRF5sRTcmamQud0deYCo8XnEmcCEjLG9ZUi93VUxXOSs9MmlYMCtVQTYmdCJwYT05'@;
put 'MF9DMz1uT0AxIyZkX3Jib1RCPHo+XSU4STckPWEhZ1FhRTJ9WUpuS1czT2tUVnMpT1cual5+QDxUWTpAKFtqQH1FdmA8MV5WRms/fmM/JWMkTz10XiQyfWFuM2dFY2x6PHElUy5uUHBXc1I0cHZOXXxlZnQ6WGJaSntGPTNOJGdGeWIxTjJqc08oSV8yWk8manxyJGlGUDhAMmoqelRaQWglOyh6'@;
put 'OigzK3FSUHpVfUpRaG9SNlZ7Il0jSUBDRlVeWix3bUpRUyZ9eGRjaTEyJStTS3hzKHVJTyg/PGxVOlkufSU4TzNAd2tCfHhIJG4rRC97aTI/S0o2TTVvITdVdnw9MUJEQ2MoQ0QkSTloO3gofFZ9eipmV3J5cHQ4ajVONXJwTCRTe1ROWHpqOGs4WDlhJG53UEs4aDRzMSkoeiUpZW85TkZeI2JZ'@;
put 'KHY8UzU3bSw/fWhPZFMhSTw/ci8pSV5mPy9OWntBe1JJWF06dVFuUGRJY2EzY2J0PGRZO11Ydj9nYEZdZGcwPm5iOT5PPEs4aCp0Tz1jKjs7dCp0OX5yVDFTJEolLCpSZCRzTFhRRFFDQ11BcDQpPypSZDlsT2RQPGBTKlRFSyI1UUNueiZqV0dFKmAoMV5tbEJgKjx3WyZ5JVooeH40WjlndGBZ'@;
put 'V2RtYWE5OEJUQG1PdWQ3RUxNRyh6WWowcns5UUI3OC9YXSE/bzVMWTRjSSV+TjM3RFA4M3lXKHkwdCo/OldoPHpJJjhDQCVqU1RCe2krNj5yeEc9ekRQOiJ2aFZ+cXhren1hKSJhX0BubSxgeH0uM2t1NSEhX2F8Z3I1bTdueCF4N31PSDo7JihZZz9WSSh0RWVCMjUxZmMyM2ArdGh8a1Rack5x'@;
put 'bzxlRC5JaDE2V1tSNUNzMmlUaWooSiNSU0NlUHY7Ry5OQnl0Q19TSjxwOjhfRjJpMzlqdEl+bj42Xld7VDRpaV5bbn0hUFY4NShRSTxaS0dpMGZsejZwOzNiS1o/OWQsJX1PI313ano0VSJ8fnVbK1htfixQPStwckokYz5te2gscH13Pm16XnBbe0pQV357QHo0bStQYls+RDV1SW5WT0U8bCZ4'@;
put 'QHtRLmwmfjVJZCgxNlp0SkBWZCgyfTtURkQxPzhUYTx+QWpoRD45MGImTzNQZVR0bD1JdkJoRTxgSVNucT8lfCltNEs9KTJ5cyIwPk9PX2I4T3Y9aF5PaCE+X0lwXjUhTmUifCx8TUVqbnhpSCp8WSU2bF45eXB4cHhwfDc7LEsmNCojODV7KjdxJktkWUVBUVVFUzNXa00iOi84Mz1ZMn50Tz1m'@;
put 'azBoO1RPUXRlI0JDJCZkaUs9SXZNR3dJc0pXIkgjW31LZm49bGg+IlE0XjQ+NE9jPFQ0RVlNaWY6Iy5JKDNWYjVhSndSS29tRn1DfG0lUiI8RTclMExwRjVFd0J0a3JLWThzZWlIKiZkYWlYdUhCMil2MzE7OU1WeGRwOWo/bVIoZnJkSX5ZbCFCXjZSK2F6UDNdZlpdKHxaTiooVWxEUkI5OEFe'@;
put 'cHcrP1V8OFFhbj1LSEdIbXYsWS53MmYsVWleS05DKnhXfjN8dG9JJCMic0lFdEthIkNCNEBLWmJwam1RVEN9fD5dJCpSOH4kYDEmazt7LFBNYVlDQldeJncpYj91OHIoRy9sdS56S1dNJFM2U3xmOkNDMCspcntlcEAicDslK2kxKmk4aEZ4enJnY2hqVHtdfV1ZaDxLN2IvMlBiWFI1b3JgfilJ'@;
put 'fHA6a2gwQExzP0kyck1JOVFtP2U5dVtCRnVeRDokVSJwXU88JFRFfl1HUykxcVVyaH0pLmFocjFoZ3J9PEd2cVgqdWxJeFladis5OlswVDEkbiwmJXllZihqJjNoO0VlcGYlZ2B8e3Jddj0ieDtefXhdLn18SUVmQU46OnlWXUhaZ2ZwQCw7U2trcE5seDUhdDs/Zj94NUh9fTxiOjpuKXA/KFVL'@;
put 'cj9zRmtaMWZzKXJGdFU2IkNdVkYrL0tDTmJnQi9vRyEiVWg+dkkxbTojcF0hVjs1SC90YWJoKUJvVyNnVmJLam11ajJ4NEVOKCJAZ2FXYyhNbHloekZKS2F1V0kzOHZwS0RbREZeMGIyUHE7Q30iMyVgRFp0OngzQUxQPzsoIjxAcCFRZCRddSgoe2tJZmEzIiMkVXNmY0xIQnt2eklWL1JpV3Ja'@;
put 'c0VoM1RaX3JwT2RZci5WZig7fnAzN1I7WFJQNykwZDtYOn08P15LKEhBYUlhclI5UEJ5PlhvY255VzRAJUYwMHZ1fTJhfT9tS05DTlA5PlE+PStVdUFjXmYvSTQqRjZ2WSlVdV5NKFU7PSw3LEVWZ254L21wRGMscHttRCYyUU4uLzk1XUliKW1jWCRRQitzeFpDIyF1ST9NPyJrIXZTOmBJRiFs'@;
put 'aEJoRlVMT3xic1FfK15ObCNROkxFTmoiYDxdO2E4OWVrcDA1LCNIc1pLbnlaZm1NX0l7Z0g1cTlAb05hdSZzTnJHZntxfUR8XlYlTl05QkBLRD02RnUrP25Pe25CbEJEeDpkMERxIzt3eHxNQE07TVEpfVtTRCNyO2pjJDE1MmFCdUFQXkNiM2kmayw5VkpqTGlJKmB8STYzWGdPUW15UDhUOXNC'@;
put 'MFAhTGVXPjRKIUlFdF87WjwkP0dlJS5Mez4hVUlCeU92JiUjandsIldPNH5WVDN7NCQlZCw6RGE1LG8laVpne3JWPSFIKFkkPU9RMXliPzJsKiQ1MEVEMTRCQ3lZclZAc3ReIWwuMC4kVkoyLjdePTsrb35dWDJ5PEFjQUxmOHkmJEVeNVs5Y2hoYTxuclpDSS88RWpkT0JFZzNHbGguSG56cl4m'@;
put 'aGxYSSs2WjwmalBmL0VbdWNyYkUyM10hfGMkcDR3Zz9gVnt1fmdiRDppIksxWUpLN2doJnVPZSo3IjM3UExtPG9TIXh9dixSQjBWMW54TVpmT1hrJHd1UGtOVWEvLGlxJXFnclVdS1d2PmFXT292ey8/Yzd6c3sqKUlZTk0/SE93UU9CYV5VaTl1Mlp+KzF0UXxiXndleFR5QWtrPEFRUWdYJWdn'@;
put 'ZitbXzhsKkh4QzhXMy4rXlZJRz9IQVJXUFUzLitLYWEpTClRSTFZPHV5dSVpcC5IYkcoV0VJYnY0KGt8Ok9QI2kvSXJ1YGlfZi4jKGxee0VuL0BgbkFpKHZ9JFEwUWdedXIvSVp0ZWU6RkI6UCYsM11wUGt4SztjeVk/MlteS1kiKGJ5MEdpTnt9al8uKDh9RDB2MnRLMVgpODk4OCsrWjBvcEdq'@;
put 'd3AyVzNQKDkmSW5LMllkNl9xeDFYOmBxSTVeb29RdF9FOENKekVpZWlGNjVdIy87WWdUVVM+fFt8XyRpK0lAMHNnTyZ6bH1IUWheUTMxUVpEa2ckNEcwSyZYOltga0o5OVgxdVssI0ZhOG9AUzxBRH0kSDZJMEBvWWE0bEluYXBHbmxZR25bWS9dMklhMDcxTSM/P2ghTjk0bk45JktqTnQ8QWsy'@;
put 'MTUwNTkmOXhsKkB9ckxlXj5pY0RpXzRseyRNS0YrLHQsaDxHTWllMlApW1BVTjZZTmNGTVB1eF9gRCFGQ0M2JTQpUi56IkJtVXVTKT9ebDV+T2BvfXFHcTElJjM8QltfZkA9aDlbdSgqU3FgTkdOWV1LYSFwbztQazk7ITliMGkrcTgqOW52YS9UIyptYjBgOWJNNj8xUDl7cE48U0JgbXlLTXs/'@;
put 'NTxocURKKFAzK1hlRjwrYXx4QSUqNEQ5NTVGJn04SzpKTEd1VlE8eGk7VlApW0t6R0ldSXU9cmUqND0jKXVJRURdUzVrOV9xMDgoNEVOYWp3Il0we2pIYWo4VmZiaEE6InR4JG84VmY+WSYsaG9qaW5QbSt8JV5MQz8oQCk9X15mb3J8a2AzZ2EwazAhKlspdFUjUldRPUhsPnhlYHBgczVHXVJG'@;
put 'TE9nIn0yOSg9RyEpOj4hfHRkKUM6LEhSPk0mJDJ3WGRFTFBzLHlsOUBzJiYvdFUzdnZXSk4kfGBQJExYWmFQUCNYRCwoR1hBUnw4M2JiTntwTGVONkZ7QWlSUkE6byUrI01RfDgpaTdhYjh3dkd4JjA5dW1GVnF8S3U5dmxiQyNsfUh0PVImJi9INFAycDMqJHpHI2xzOy4kTTtMbmwwUSh0SUo5'@;
put 'UWZHSV1Je3daazBmW1hhOn5IcnpObDdyNTRHfnlyXXJMV3ZYLHpsZmZOYHEpfV9DTzssWyVnfiVeO2FRUyglLDEjfHQwbHJ1dVhfRFpNaWV4MX5xWWkmPTt6Mld+JG9RMl19eikrZ09GMFFpcXZfI1BoL3Y4MVppbjIxXylTJjhqWHBhdXl0Xig9ZCxHMGo7MCtJSnlRNkRCUUJOQFZteD5kK0pw'@;
put 'SVZeTlJ3XyYrLFcsVDRmdCM8OT1TbTcqe20uPCx7VFNfbEJqNW14STM0OztdS1NXSSpqVGVCa0FVVHEyZmJafSpYUDcpTHssbkVKOGQvTGNkZ1dkazh7cDlBWS4rUGI6aC9iXUYpUG1bUyNPbCsjOjw1Ki5UTT99KXtwQmAiVjZtVls1QlVYfF4rOEJvdyR8SVdCSSs2KkIvLy50OlAzXXp0Q3pN'@;
put 'U29JZCU5WEA9cFd1LzQxPV5iKjxBSHQuQiNIV1RgODo7QjVmSF0kT0hsdjgzejVWNGEsPDVQSG18I0M9WjVuUTxhVks6V2lQTWRiPCw8aUVGe3YhenNyLj0zSyFlMXppP0coUVAzZCg5VEldQm15Xnd8WnB3WzVNfiN7I2RrM0o9VFImfE4qaUZnImBxa3t6T2xlY2VyQnIuUip4UiMyamRjTHN4'@;
put 'U2lxMzZIaWZ5JGVLWypzc3NYcDk8Mz9yVHVkRFsqd3xHJTZBLHtbQFZbdmZyJFc5eFJUKiN9YHZdNmE4VzIpUG99NzVyT2FYcT9ld0k2IUkkTSYvaS4seCRBZURfLjtxXzplKUNsTD8sXjhuIXwwc3Vxe2BKKmEpb1BMcCZlKnk/W0hYXypuSVBCVn0xMUtAO2slQW51bDw5dXN3czsoSmYhSWRE'@;
put 'O0pkRGJGJVFvYS9EdiR5P1c8MHAweigpMEZdTFg5XXc5X1cpY1dnSzU7fGw4fWk4UlR1aTA+UT1pP0loan4kcGVfXmp8bUIqc2oqSl5pcihWVkdKeTBkXyNwYEcmajhwSVU/MElVXUwlUkNlTWUoNWNQW0dpMyFxeHYoeWQ/UllxRXk5P2MiKUZSd2ArL3FOLDZkVmlle045YkozK3xMfFgmW3hs'@;
put 'Um92aHc2YCsvIVpHVGIpLCg2P2J4UG1bKll6Qnk+S3x6X3peey5uWnhgKVZVfSsvTD5hKFVOa1p4V3hJXklgVl1pJCo0dGo6YmFyezJUMDw1LH06YmFbdnU7MUszLnY7UFlaMS58a2hLSGVMbCVJMTpJczR1REswcz4hT0N6TUYsLyhZcX07JltGaG9BIXxCSCJfT1NlR01dQyFFeSF0ZVZMZjcs'@;
put 'Zk90cGNHSDxXK30oeD9USl8pMSw3T3RQaEw7ND9oVDghODE1VDhHekVgSWhbdHNFKEt+OFt0QW8uYVFEKkJWNSZmbWZiU3BKeHooRm10XWtQK3s+UWMlRkMiaUw7YFpGU2l1bn1MSVRSQj9XcSMlPzNPakQhKCNZS0AyW287Z2Vjdz4+QUQ8dGBRXXE/I2N5eHEkNVpCa1hQel1rT1pmQTo0Kksw'@;
put 'QzJWXmRULEc4M0tuaz8mNCxBP3tmLkRUP35xPlNQZ2U4bnFzd2pYY2YuK15xPyMxSFdHZm8sR3R0KjQmZkp0ckxdanRCb3VfTDVbMEhJUj8yMWt2RGEyQW1peVBGS1NNRXdSMWtCUXhadCtPO0lHJUlOdVI7MjhzZX44OUIrKE1IMDMyL1R8cFZgZmoicVRpQ2VYRURUOWl5IjBoTmR1LyhzSUou'@;
put 'O1t6cXE9WigyO1RWV3U9PlRxeUs2Q0F3XWs4amNMeE5wWloyS0NkQjovJkE6WGYse2RqLCJgQTQzS28/KEslSUR1NXpsZzpaNklFSCQzOXRzNnBbZHFoUUZOOiRmckZYYGg2LENaNmo7SzZpdiVTJmIxZnIuWWgqbFMlUGpefEM8QHxoNHZ1ZW5UakQqSWNwaUBZUXE6cE9tRihvR0Yke0hKWjph'@;
put 'an1URXJtODNYUjYpMEMqIjJJeSQuYDkiMjczTXcsY09DfDt7WyZQeXpCal5aQlEvcmZQfkY5K09gJFE8S1RaOjIxVDtVU1ZeKFRsaFJaPls8K0hzZDlWaFIyKU49Q0RNYW1RVzE5U2xvRElmVmZOVVY1UiNxPTBDXmFGclNqcThZPk0hKGFpdnFROCN8QGEiSVJZLkM+NGZzaXcmW3FWdDFzJSY9'@;
put 'dXM5YG8kJS9rYCNPWTNwJihwJiVMcTJsa0toO3d3Q18oNE40LG9NYXNmWDVfO3loWiU3L3JwZW42R1p4XkNifSQ0S141dCM6PzJzbyNudipoLENnNFZ8R1ZgYzZ7RnBAMCs/MH1ZaW9dMUd5QHBCWj81cik5QlptXk5pYCFOQTpETzRQY0NTNz1DcnYpcnYyUGYyRjk5Onp5MSZpcUhHVl1UdGZ8'@;
put 'UUQ1PXI4fWBAdHM6blpXMn17NVZ+MTA9Knczan5RSj0yOFVBNSY5MGRbey92Q3Y8Sm1yREVuPSJCRG5gdyFbQWBqfnQzJHg3MFgyXj9BWGFkcD4iNiUzOUBNP0A9PG5QVSt9QT9eNSgsbiEoZHU6dXFeaGBeez9CKVJSKTg1U2FNQFo7P1c8OyghcTA8SHVSfVdSMkQhcyFVaT9AMXgmJm5DV24y'@;
put 'en5zZHF0T2pLJVhleSEpXW1JMkhLJk0+O1ZgamBAfG5+aGpuZ3A4VSt8LGNdZ0ZfKFJSeU48bnUqd0A7bTUpbTZmYUhbeXBwO3pKXyRPYC5ifkFUfEZwQCkzIj8qalJjPDxBaDFQX2dLJGZ5JHxsUX1ITHojOyQmKVJmSXJLMUV0ZWwwJn5wLkc+RkJFMyIqdk1RIV03Zn1Tem9wNSU+YkU9NT05'@;
put 'Rkt0QCxnY3VZM3s3fXlzP3I5fUhkSnxVVS5HfFFWaXtDNT5eb1t9U2tyRTVWZDlAKmBfak9oUHFxUyxqaCNIT0BEZVBTV2xCJjIqaD1hOWpPaTgoX3lzMGgudjcwVTZvcjxbPmpyUCJKQHhyS3lwfjA5Pl5ASX5oPUZ8YzVWQ3tAbDphNnJTK2AlNkBfcG98SUB3Vl9YMkBxLE57XywmXzooMTB+'@;
put 'LDsiej00LjtWQ0xadHtUejJ0Xl0sc0R2Uzk8PV5AfG5TfHJ1RCZbT0phQEBHNXFmVWJDTnE/US5pT0YwcXpabG5aUk9AfVpONVdEeS8hfCRRUDNCWVd7U2JKRWg4dkhpQGBFXjBaYDpTRzo7KF9tbjtEP25afntqIX5sNzNGQEY+WSJKbmQ4U0FAP2hfP3h0XWx9QS8oWD9gOlclSTpMcjRnZlZE'@;
put 'YjtkZyhEa1dKOkU+OTk+Sm03SUU5JEUqfShRZ1c+anF+Pl5nOzV+MiwjXigsUzM4IUUrP19pS1t8SXZkRD1vQSV6YjA5Im5xWHsqKlVtdDVlWX0iZnAxLixGfGBWXj9bZlFFIWoiODZPcSUyMHI5Jjs/XVVdVX0zZik7P11ucCYlPmdvOV9sbzlnflQsTlcjLjI9XUgjTT8wJVl7WVZeUGA4IV8u'@;
put 'S1l7WXRMcEBAMDAwOkxoekRiRHdGYFlrM3hwTk9YdUAlUjMrVWY0K155XXFwPncuQlZkZn0qXXZ3RTZHTVNKd3cuWFR+LjteVXZQYD9WOXtlWzkzRThuXihORFp8XnMlJj8pUnU7aWFNIilyL0gjM2ROJDh5RjosS24hbEt1cikiLCpNK289LjN9ZiwiKFJiRDteVngmZiUuZUs8cEEvfmVvbXk6'@;
put 'bDlvZyxuandteV1mLD5+KHZjRSpLPipbUyVQbC9ZZ1l6R25tTkpuaj50MWh7bl97OHVsTjlDImBfYFB1cWtfZyZJcHVxWDg1bmk+VH15JW9UfCFWQmFEdVV8fiF+P3s6LHJ7fWlUQiEyTTFoSnhTM1ZhZCNzIkw1PnR8ZjY6MUduZDlPSkVKYH0iMW0/LmAmIU0+fVJKdn09NFdXTjVRJkBeeXYm'@;
put 'VHZfcnt1QSxKbyNnYFphQX5lVnNqU0MrKjVDUV17PS4sckolcWsyLj0pST9TaSYyMFFde11pc2NvdUYpWz14WCUxdUh6Tl5zJVVjYnlwLHNgWVEpLzNKXm4zZjdMPislVzNDUkhQRzA2L01gYj8zUjAvdkwmSSQ8IjQ2LzN4JHpsI1c5MGM8S1EzVjViaS49bXtTNTYvbG0jeyp0JHtSSi8+KnI+'@;
put 'IV1pMnUpWkxuYn5BSERhPXJsUztoUjRVYzlqWGF2Om0jJTwsaypGKENwWG8mNFBHQ3YhNkRDI0F2cjRNN14sRDxaO2x4VCplW2xEPHU+cW5jZVlmbDcqJXRbUTczRk9TSVU1Xl87Q1o+Pjo5dG1zT1M/JkxkJkBzcDlyTmFQRVRtb3l3RWRkK1tzU3lTPGchdl0oLCUiSlR8KishUExjN1pmVmt4'@;
put 'Mzs1IzVxTW9TYyhaUjFaJSY8TShfLjdpODArPCFQLHshO1A2QzpBNnlnK0srSk5NbEhVP1pJXi92TSpkSWE5UCpPUXs2OlA8P0tQMWhbWVh0UFp6M2Mwc1F7bixbNiNRLn5YeWdFRWYuPEs8ZEE9TVJ0Qlh9WE9HZGk0KHFWTXV5enk+dkBRIk1EeDdxWGNKJHpgNVVkaUdlR0FBeDJBQU1Pe3km'@;
put 'aWJDWXg1SylXUTREdF9DSDlZaEdiUjBCKy9GblJBTWdBQUFBQUFBbkIkQUNmYVJ+XUdoV2subDghM0dASX5vPEJqZU9PSFQ6VUs7eHhrPnBrKkBRa2A/enw7ZVZ8c1s+LnREP2Exdit9KWxHNW8heGQmeUpbc1IlKnh3Ojt8ZllUUVM1JTpFeG1+P2YpP2w4PWIzfkNMNFZJUn45M3ZJNncuVzgx'@;
put 'VXZZYHY1V2Z0djJacyUhKD0/OkgoPmlNJWozdG8mL0FCU3RzdS9UWSFDVSV9N3tQaDg9eiV+RlJtVS42JjA3U2x6NXNERD5kKU1nLDQ0aChzaSJOcmRSfGxucyFec3wyfGZwNDxAWyxRXixRV3YyNCRlR3VpJVpbaltPeUZWWClSLnZQY2ApPWkhbDA+NiNzKV86WzYiSlJ0YzVQdFNdLjtCTy9k'@;
put 'V29KKj1VRiZjTDFzPFU4W3JMW3NPPk5nR1ZrVzpOODZlWkc6UU1md0xdY0tKNWsiKF0hWnJ7XyJDamRBQl9sOiEsbCswQUdUI1IxcE4hXzJOaDVwe3FiWl5+KmolNF96REJJaHg5PUVFT1JkNnVtLjZ+TCp8bHxwRCNdalRXS05xSkIqW2p+QW47RklNSWQ6Lmc2UUlOY2VTbX1oej1acWAsTXR5'@;
put 'enZDUk0uNEMyeiVKQVZBKSFdK18vZmpQaXk1cEQsJiNraTooXlFZVF9FRkNUV1dhZVBnOHA5L01DZ1N2Ujd9PHRBSXs4Jjg0MWs+dSxbTDh+PlQlLmZZLH5xZFI2O192cj9OeyVgQ0Q4QEM2S31yVGZiSWt1SyU0SjxbeCo9MXo1UG5neWJIZGY3YGpuc25DTTpmYjNmSWoodipOaUZAMTtsLGtG'@;
put 'Wig5SEQ+M1Z6PyEkTlMuaDRQR18xQUVUOFFTeXNWVV93X0lBOjEzVzZ6eXZIZXpURm9LJGltY1BVOkBMMVF1Lz9EMFRuU1svR1ZwIz9IWmlgdVRFdTcoaVY9ej1+QFljQllOPVZvdENaKTNhM28mLkA4WUpZIT0mPklJWVUyPDlLZUpOZThbXmcxIzx9K2wkW2Y7PlBpYURAfkdae1phTnl3dF9U'@;
put 'Q0VhYFVWUHMlO3dkWFZwPHFnbSlVfWloMmMqOmhpMVg0UStPRDtsJjxhJTokVyU0WXc7dUA9OX55YTBZJjtOLGIpfHhxK3pALGpIIX19I1U5NyE4XXdydzUjU2d8WitQVnJ1REVYV15yUXMheiY3JGhOdWIjTS81MnEoZis4fjRmZWlta2FsMGxbYDEpVzFmSEM+UnxHbEdgU3l4MnwjPXdKWlla'@;
put 'dHRCS3ZYR1BKISNnT2k6LDIjKm5YR3IyPkptLG0kIkhsK3Fsby80Z0Jmdn5iO3pYMj5PPGJLRSFae2NpUzk9Znp+PEdieXQ1VTFpP1tiYVRJIik6SEJYYk13aDN0VSxZJnA1ZSNiLixYN2dyJmszQnVycTUoY1tzKylbTUw/cUdOImZoSjUxMG5Bd0MuWFtveDVCVW1uN0piQmg0X3oyWmk/Q1Ml'@;
put 'RVk1NU1LW3Y5WS46dXUheTJNV3MxQl4vdHpKd1IyeGw2fUd1X0VGRlFRPz58RDR2VGt6elh+RzlaSl1OaXErK1QzNnFab0ZkdTx5LHxzeWhfQyR4JV1xKiNfJHp3M1ohezhvZXNwJUBxZXZmcSIwU1lbXldTTTtLXU9zemVaNCNUW3pYOklgcDJQQmJkY1d6KDNuRF1xTFdLNmEwa2AwNSN9SnNA'@;
put 'T35bWmJwL25FJVhleWBAbkk7aHBlLldaaSpuR1dKInYiKWI6aWl9RTAwZnx6OngqJFhtdS5bd3JpUFckO0o+QkRPTTs7NixIXmJoezlYQj1MOyFNcWZJYUgjYVNhW0BLYkwwTCxtfDYsOmdvS0w1PVV1VylCW1l3RHd1K0R3YGRgU0luN0tNZFc5Q24lIWxoRn03SzRWQFMlSkJoUS9MfV4sOGZA'@;
put 'MVYma3k7dj5EYUdXYm89VFl8ejtRdmNQO3QwRn4/V2M0XTYkM1JRJmh1QWEkQkg+fGFCR0ZANExjJXB9SWs2dmU/W0duNHdgLiwmaVBhVFFpVFs2I3UjfS4rT21XOUgmPG12S1RkPz1CPjcrYWYse1MuKmZ7eHZiW288elAmdU9kWzBZMEFlI097M1NhYXFuQUNfLDRXKFs2dX1WQURISiMyZkdN'@;
put 'YVM7TUZWKWkocDYmQzx3THdNQnIvVHdFSCUuOkNCbml3QDxkNEdRKSQ4UigpTWtSMlpIbGIldHZ6c3QxdWtyPzcxTGBHIjtxXnxUbzZKazM+UF0qdS9tcEMsWlpyWiU9RChkck5mVzFFOUkvSTA9VHtpWE1JOW1fVHZsU3dtNmUuYCxpMyJAUT9ddjdQUC9VUFlrPUNQIU9AUnsiRnRmKXxeKiZk'@;
put 'IXpqX3BbZCNgPSN3fmRvJlI6bDF+PTVWXmw/ZylyfmU6OmJaLzlqXUhvVyFRKV5ENn1EVCRxMz8yfmsicE11cGVHajs4ZHx8bWNhYF5vI0Qsemh4PXpzfDhCfWpqTXc7IigxfjZ5UEJbcCEreXk8OjJxcjh+QyJlTFRLZDxBIVNWQDhVMmw7PV08KjUvJUZCWihLbEVfTyNnZGJgQ1Q0cj9eOEtA'@;
put 'VUYhTG8ueSUvYz94U0o+Vmp7aVl4P1clKykuMEM8WD5BYGtPa3Y2RDN8Pmo0WTJEJWc3ejN0WzppPTd7TmtwM2kmK2wpW3JkV2JEbDRzdnJgYmdRXkpmVkRUZ0dydyprc1JEWjguOyNnTHo+ayFFcV4vPHFFU3BXKEpVSFQicWRSZm90P35HRzR7aGtuO0kjdUVdZF9kfWd5LjRAdnh2cWNhOV90'@;
put 'UCkkLHE9I3Z5X3QwUmRzODRsNV1QUFtNJGFxIl47Xjc5Kk1Ze1FoP09DNllDX0VvI0cheTUqJnF2PFRBMz9nLkM9eGFZcVZTelB+YzdGa0pSLmQpPSMrRz0rMFozN2M7cmZFYlsoKzZ+Ml1jWjs4eSQ4a0YySzxsdzY6b0VUS0Y3fShJdVB1WGo0IlBifiFNYjdDTnR+KkgkWlV2cHQzdF5KLl1I'@;
put 'QipETj1sIWIhMVRXNnl+ZGV5eHRNYTFebz5qRz4kKkJee3l0Z0FDIXdVdkJJek1vdGIpfSMyNjh7blRaVkZqL0hHJDZ6SCF+KTs/SzcwKzVPdFFBWFZUVSw1aVVULy8vJnR0IkR7ej4uU3pES0w/Ol9tfnp8SV94LjJ3RkNsYTx9d1FFTylGI20kcypqZnB7KkIqNyVvTy8mWzVQeEFteGJCa2gj'@;
put 'cTJzSD5+RUd7WVdhRkk1OyloezRdQHxKclAoXlJxSyFqQHxjdW96bGQ5Kjw7N1VkUUUheE1wbFVrc0NdeXh7Y29nSTx5c0haMCw9PHQ3WXE1TT8iMW9ZLnhhdUtfdXB5UDxlMiJ6Pk90bXw4anZ9dW1KUTN0bl05eyo0d0JYNShqcm5CeEM+aDNNJGsweUM/OWkiL2NlM2hVWFtaQ04qcG4jK2I/'@;
put 'U3teUEYreiJKZEVCRG50I2lCZCg7dkMmXlQ2TTFOYyVbaSRBbTRqfixaUkM4bzpURi8xS1VNJTQzVipraFJ4PUBjfEY7L3BTdEY0PXhpVVRwfTpxZV0iakBqfkdPaUVeW1Y4Xl45YW8oPXIqaEV8cy85fHpXdy9gaGYqSjdPb1hXNTVgdi93UThwXy5zczxdMmEuQHdRMDpMJXllTTRNaSVvbHhO'@;
put 'NWpGR35uNFNuZUpHfFQxc2RITz9dR1pkU2tWOWdxLDJPdiI3RU8zPk9CKyoyelkzXUNXZlFZS0BCN2EufVNuW2wyZCM/O1A3N0BweFZnOSQlLFZhdT1uaHxsOXhlRm88RmRgQmZuOENoTmBxUVo6ezk7UWV8a0V9dD8iQXohUEBDUz0qciFiNDhibkhGajVvdV10emRVZUxFez12ZVsoelZtVnN7'@;
put 'bTBQbDRJeVB7IlR7JU52OV8rOypZYGRqOGEyNyswSFh4b0xDO3FIfisyOTM2QWcsQmRGckwuU3E1YHdaS2FDISpdS2syOzRMPytYdHokRktJaW1vQCpZJEZTcjJZa1hrYi9oLm9WN21vSWI2WWZeMlZeeFR+d1UyOjh7Y0siMDQkZ203ZH4hRiwlPTdCRyFNSX1WZ200LFZ4eCssOXJ8Mk8pWjtg'@;
put 'azsmJkMqalFLPyssK2dGcXAuXzQwVFdgYlhAKypzUkkrMixVPzR8Sj0rQFZrcF0wJFNbYS8+dGB6I145dCFvbl1wUkVQekRPZzowejxlIS5nLDhMbHNgZm87T2p+Jm1iUEFic0xzb0ZhTGdFRHU7JDdRbX5LUFV1QUxWT0RbR1E3VE5CSUhpaThMImdCL0tWIlpJbz13O3I/Ujhhaj5fRzxeQGEr'@;
put 'THs2Mlo0KCoueFNeJkdWT3kmREM6eCh5KVQmQlJHcD1uRHBEPUR+PkZpekNSKiU4WEMmZ1NQKm85R1N1endjJj1HaTJiI2YySFNxKmgwdT9WdzF1SitBKGA/biRdY28wK2RtNHo9fDgrU1kwUiQ4Lm19cSw8cDN0WWZreUxAbktva0pEaVlaSyIyR10oNSVOY0JjeyhmVSphQ107d3AyRiN+dX48'@;
put 'LlpedjspTFA/V1UqPHR8TFI5JFVYalpWbyl3bWZIL1JzeiRfPnk8WEZTUzE9b1peN0JBJHlfKDRqdkdeWltqTGR+Ty81OD42KFFHQyExKkx+WFZHN217MjE8YlFQczRtM2hWP095TVNgfDhSOjEvKj81QGtiVlAhWyJBZyI/Wj9hZWNxW0QqL28/O0t8VD5hN0UxaTdMNGVbJlU1LEZUJnAiNj5o'@;
put 'TCJdblJ6OiF1P2ltUns2cihAIl5WRUtEJG8scEdsSFtTWFVSckd+M0lGQmhIfUkpZ0Q8TXBGVmcpYzYkcS4vOWQ4JT9wKjZKXihgdj9VaFRmJFdaRn5sbVRiP1dlSXhzJGpZQWZKOj5QdWNSIllFWkR+KVheelt4ZiV6QUlpaVp9I1tTdSNSXntSNVZpYj8xd3Axe3ZbbXZmIz1AYl1dcztzYnta'@;
put 'JTNGQ1tGIShGL2J4bVtRUDxJR0opTFtRbHA5bWdnIXVkfF1tQG1oeyxNY2kiVHdpYUR7K0xoUEgoaHFdYUpycXclYT94Rm1XSkdSdXRPYlsoRmkmOzRDZiwqMmEjMlFTPDFXYl5EbiNXZmRtJnk4Nk1FL1lgNSxqXlh9eDlCRDFPTTJbQGQ4KlZNVk1rK3dsXigjQ0l1cSxINTFRQGRtL1FpNH01'@;
put 'I1Y6PDdRMXQvS0s/JDJFJlBWS0VGPFlAMWEvSGMySll9S3V1NmBkLElaY2F4QV1IVWYqPEZiJHZ4SDxaRlJ2XnB7emxqPXZkUSNvbEk9Unk9MmsmOnI4XkJzUyZkQmlSZ0JpZH1hJVhaO1NnS1Moa3dYUS9eak1rPjB0Qi5jX2lZWGl1Zm0wOWkrfks6JnV8UWMkbVMoOUclPyh7MzpIWT15I0N9'@;
put 'eXwxJCE+X0NJKiE1IVd6WHQ/ZUhseihqL0lMZzt4P2BRT3BUW3lWVzwlZ2E4RCNsX2lmOGhgdGEreDouV0VhX1ZBS303RU4kV3hbbmFsX1tBQDwmVlpXUzgkX2x0enw1cUduflNqfThaR2QmQlpdX2ZlaDJOMChVcEplKU1zI0VAZGlzcm1dPEB5cGBOaUVYZ3VAXnN8L284QWllL2NsVj4zdU98'@;
put 'b1Q5NSRib2Ipenp9R0M2e2R0bzx8cDteMURjJHMya3Ykd2ltfjVgVUApN01nMl5lVURSLk5JOnxXL1M8c2YqSmhLdjAwaE5oa0NYU0BdSnwjZjFSUHROZkc8OGZ6azAiKj0sWE9xeHEqTko1NEkvYj0xOClwa1BZLGh9cmVdKURwYk94KGxkI1BtSUR+PE1lQnZIQjNCfTQrbToueGRIQlNRQkpj'@;
put 'XnsvdEZObGA/eCY0clQxV2MrZGIid2xlQFZKTz1nKV8kZnN1N1JSZ2xfY35+KWomIWUoUXhnPWFdbElQUTt5JH1uKTYhVyI4KFViWHZsSU0+RmpoKnNkQzFlcCV2dkpoUDBDe0V6JDtyRytzcXE9L2R4XWxlRVYzJkM4YjtFbiIrd2o2TDBCTnc+RSJKNTpRRUFMMCVAbHtMLn43SztXTmopPzFd'@;
put 'd11rWWNvKysjNWRjVzYrYncvdXtAQDBXZnchL2VwOU1rKDBudXxiI09uemM5ITFTQDg/NSxhSj1aZVclcU19KXJRMntmOjxsa3RwbGZvQyk+YnJyMG9kNVdEVG1ldGhWYnlPZHU7OHhzdixYZ2NSeTBuZmlHQnhpbUJDJiJCcF9sWmVSXk8xV3xtV0JiRVVadlN6U0lLXWhTS2IxQDpJdExmJH1l'@;
put 'STM0JVRTP1Y2elNRLF9gVC8jT30/MldbLFE3OCIxOF4wJmMlJWpTLC49bFgxPDlnNjExa3hKb1RiQ2lEZWZDUCVTTj89SCFbMHxUYnkpbWBDPktVPWJLcndOQ245PVpYeT9mJiRfeUAlJDthUz48VG5XNXVjRVZNe2c7SGNhLDVMNVVqZHtoYSJFLnlHci9GR2NHZlZIXW0ydCZBO1lnQHp6JmVN'@;
put 'KlZsIi8hNTpbQkQkUUtwN0hxNjExNkUjaDFKJXMzQEFnb25GIVFtV3BwT0o8aXg9d3RAPERdR29OJSxnOjNxcThnZDw5bVs6LkReRi5tdElqLi5SJVs2fFpMKX50IihIelh+WnlAMSQ8XVh8WGBVVEVWMSwhPF9Kaz1JY3c2ZG1nc0csa280RipUImcmKT5lNiVNaHBuISZ3TFNBfWspTWpXYGo1'@;
put 'X25fUVlsRyEqdVRDRjVtPjhFaShaO3ssNnI5ajlqd2paTUkpcS9+IypSL2ZmZE8+UFdsQFhKfG45JH1sRjA6NmE3SHlJcztqZncsdGRweXRMRE17Mz1KPysmbFg3W1d6Y3B1c05JeShrez19On5kMylqcmJPe0huaD8kZFQkakwjcHFYZCEhTmwvKm5BY1t9XyphV15qfGUvQmBPbD1JY1c/Mmp+'@;
put 'bEQ1X3Zncyg/TGJvMTBZV2t4Y0p0XzxbQHpJWUhlIUsqZ09JLlIhYV5uWV5JQlVwMTxCSCRJPE1rbGBIRzdjYjNAPjlPN3VQKEg2a2Y3MXZJfHJnVEVlQjJ7amxkM3ErP28oLG0yVEsuXX5dQ21PT2M8OT4mLzA/aF47JDhndCI5azBRMF5OP3lhP0JDTU4oL01dOm19KD59ZmVlUVV0YDJYQCNz'@;
put 'az9KOk1iZHU7IXBmKyY6KSVTel01MjdxZE9vc1gycC4yO1dJOVBkfDhrWixORCtIVlYsc2U+OFo1akYueyZbcis/KkB8PVQ5dHpkNSpaVGNOWWxvVjZtb05hNGZkO0JHPiMscSJzVj1QIkhTOXBUP0ExJGZ8RCRsfH1+VS40KGdbP1VjZUFYW1JkYnZXKy9gX05uQ0BUVS97ZTJ3XV5LdXtAcy5B'@;
put 'V191ZnpdcEQuX1JBOm4mSnEiOFEpbDdgZVRmMUMsUyJFby9hMHNMUi8xNiwyRU53cl0pMGpNNE50IkBHKyR8IThqW2BPZ2k/d1tCO202JkFpXToyfXAlbmpOWV52ejp0T29LKFdzN1JOTFpwWmg5PHYvb059Ry4+WFFLbWlxbj1Uens1TVQpZH5rSWVtZG1LcGA8d3E3IzlRJkVEbiRgPVoqWV8k'@;
put 'KktFPFN2YlZoIyh1RjZpdipnSVFQN35YN0EvUmA1Y3wuMWtMJF8qL3dkOTBEeiJ6WDB9S1VrOSFfbjwqTWg1PHdSZFUje1MlSGxBPiF+d0RDTXI3a09yeWYyV3RybjQ3XWJ0PVJpWklpW1h5KmpTP3ptI1dGSyx6I0o7MH5+Wm1JUWhiSjFPYGJVOig2RyVtdCQqNiwrVnd5YEEjW3doVVJLMl9g'@;
put 'OV4rSHQ+aVV5Nk8qeGNqTGc6KSpeZFR1MURyKHl7clh8OH01JFVtQS5ifmtmdjZgYjtXcTZDaHY+Z1hzLixUWSFzPUBKcXBZWiVfJDN2UH5ORj5SS3l4UFtYQXlnZEdpQmZFPTp+ekBMfHNfODIkJmNOYDlKOmh8bkNnR0Z+PD8rSSxWZVJTfGApMmJERm8qWXc2SCIiZXlyTmxWUUlZTyhFenAv'@;
put 'YjFdSU1NVE1NQyR6c1B1bHN9YDpvPj4/JGoiOWAleGQjdSVRNSpQTCN8aW5NYktraWk5S2EyW14qSV8xKF1Zejg4Vm1zIUM+RUY8Yk4pWl5bb2tRcSx9dTJqTXJjVCVtc0YiZ3Q3NFB9fTJpR21hL21CKWNFM1BAKWYhOF8hZlZvTnV1cHI6WW02WFlMPjh4Wnp2PFQyUDQ/ZHV8fmM2QkZwKmYp'@;
put 'Ul9YUmBiRkcic0R1aDxmczIzfEQsbzoqT2xORnMwV2YuUl1mQDxpUiQ4ejVlWGVrYylAa1g6bUBXalF5T1kkSyNBMip0MjJMdVBaUXg9ejxjMXclKjJsJHoudiUsUylrKHxmRUshTGIrS2U2TGZ7VXErVDw1PSNKezBvOz1APCphQHAuNE1PSUlJOFIzOUxkNUhsOlo9TUMlRj0yMyFROys2IkVP'@;
put 'UD9wdVVsRUhhSVZQT25LZXdvMGdvRCo8VVppKHNuV1cxMHNTfSxMLitTVGlQSnVCLHkrVmZAYXJLJk1HT0JrIS5JO0JCMnt3ZmRjbHhWPDBMT1tgKnE1Q0N1Lyo5cCRJMlt1UiFGWS47PTY1YkRBMi47NzYqWFUuYVQiVF9fc1REfitneTZzY0RkSEEqe1FmdEFIRClsMmFOO3M4cmZSJUlhV3V4'@;
put 'YF4yPUxFP2oueFdpQCJ5XkVddk04RyosTiRuNGVLckU/T0ZLRmtTR0FVSXZ+K1VGeCsyVDM8QmpIJWIyVT9BVGxaYVJEZnxaIXYxdmhvTmJHYlVUKU5LV1lNRGswazU/amttLE8oa2F0QXh2MkJYa2chSD1IeHlOI20vPXBFQn0/SWM0e0ZATVhDcVkwYHtvQy8zRXxwJW4lYUBjUyxJJHMyTXpx'@;
put 'U0d9WThFKkhjVnk6NUsvVHhGL3Q2KXpeJF03YEdifXNKWjAoaCtbVUpSQ0klVl4qI19BRCgiXUJ9WjZ0QDoyTW0iUlZMRUwuXXNlbDBBZDJQfF9uXUFMVyp6QDRFQih+fHpgKjsyRHQuRHl2KnNPWmE5VGhFNVF9R1dwVD43fVtIa0M/amQ0en5nP2p2TSo/Z3ZHWjxSfHkuMy5CLE5hMXI/NTtW'@;
put 'L1FyUXQjKUFfRGR8PnxuYFl3VVYmX1NMJGR4TTkzdUQ7OSNCb19RW3MjPyU3VSNFU30wbk5dQlhFVDJrPHY4Y3RGNkIwKX03RGpMXzN+MitDc2B1ISkjUyx4fVtxPy5oYGlCR3U3c2JJdGM9U2pFYHo/VjghI1lUe1QsPEMuTCMyNTc4YF1WK1tvKy9AfGNtekllKl5MOUtiSy9UMHIzfDpLcXUr'@;
put 'SVhZP0cwTGZKYGB7K2tUWW47QVQwb3hHMihDKjokNylJeXp5RDc1UTdDUitAOlEmaTtpRSRgNkIyelgsW1J1QSlsWi9QcGtVVSYjKk0zfiR8enxvZSpdQkRKWDxmUyIhP2Asa0NGI3orOGd2WUx8SjgqYVVVdmt6eiNvPEtSQ1ZBSFk6XT87MyJLW1ZyQzdFNmJhfnYqZC8mIVN8OmdGW1FlZDYv'@;
put 'S35jRVBCU2MqeHsoeGxnaiZSN0BXNzhpIUZ4S2YvNjFxTnlYS05CKj9WNGFVZjF6WXYoM041UGB3ZCEsWnNhYyNRVCh+QzopJiIrOVNnNkBZJHhqR3RWbllTRVB7e3BLL0tjMUg9Ljcmb1IvbDhqNVdlSzROMXwvfnY0STN9bUc0Tjp8P1NuVE9PaTBUZ1duL30qKktzdTo9M0QjPlJdbkYmTkwx'@;
put 'M2JwTU8hWkU3aXBDZGFmInowb1s1X2F6PUZ5ZFI2Uzl+LGgkbEJWISx4JXczRDt1JDY4dnsjdWIiIWI4Znw3cCNldjNmVTQlbEdmWHZXU2d3diFZeGA8UEllcCQiclBfL1g6Yjl+LHw4RSYoJmhbW2VHUj4hfDt+aT9AMipMXmE2SyRpfCNyTXhHVHxbPm5IXSltb0pWQiFZTkl5Zn1fRkxNP1VP'@;
put 'dSR0K2smc0JuQWZ7ZnttYmU4Ul1uKj4pKWFHKF59c1VYdlR6IWsra1Vkej5kW3R+b1Z3V1ZdTFFxOGUpdnVXPno1Znt9WXhlRDk/IzwwMnduQzplTTBIPXoiX0cza0dORTpXWGYpNVRGOXh1OnRZN2YlN3lhKyxWb0t9R2hfdGZPcGBEXXRHIVhuSmhqeTQyY3I9OHAlMUlYdX5yTFBWOz9zbTBe'@;
put 'Znh6SXlvRXRiR2d6a2kvfHxRWDg2Wmg1YTVDa0xUUVBXVD56O2laKi5UQlgpUkl2I29lW2p8fltSKEdgT0pSYWdfOkskN0xjQWQwXjozMypjPkJTeTM6bzA3c0A4RC8qLlcvLi4kL006VSM5JnhLRUA4VCFFMzVYVkklPGFEO0pAJixVbnBtTDtGIlNlYS5xYFIwLkFJWSZgSkJPKSZ1Y0N9ITV4'@;
put 'JXBDO0t4aiglXXYzVnAlPCo7ZHFHc2w8dXJ2Ikh0UUZUcSlgZDZLSitfKW89PXs0OjZLSlIvXnU5a3ExU31nJEE7bmV4IkE4dSRvXlo1RiZOfnYqblU8aCpYaVQ1YUowaEFWUjFXSHZWdzlHfkUjfTpfdWVbSCoiYyNSUlFEViFAS3pHTTBgaV0qcXJDXi9lXUFaTGAuRCttQVI7PEhddFhHcE5e'@;
put 'TjlocE1acWIkTHNoNT9UO3I6SEVWWEU7eGxnOm4+RzdzIT0vS2IpZWk1cm48YmxvKS4wXytyPmlrK29Mci9yL2swUiwpVmZaX2BGeFAhJlNmVWh+I0NeZks3Sj1faX5FSiI9YTRpcHY9R09nN1FKQyUoRj1xbkVTelJtLFc1O0trYS5oQEkuezQmI3REPjAjN11QYil9XWleP1VeQT1JVHM1Y0Uk'@;
put 'd0kpdmJrWE9scmdyPFhwLn5NWF4rYHxbUEt0Q0krS0Q7Pns7Kis/PUI3VHtHPkk0ZlpFJlNfaHltfiIybXZ1MiYiYFRkP08uR2c6O0NtQGo2cmh0JEZ+QWx8VF9ZeWsuZ1lgI35KXlR7RCp7emYwZiw1M1U8YHd7YG5mXk5YPGdIMX5AX21BTFR2fSFSKGA9OF91QkNBeU9fQylsUF9jZUojWDNq'@;
put 'X0UlTERJb190ayRyb09NTk41UTtJQDpYMHRnRjd1VHZ4fktPJG84WVpWZFByYCheZlhtc3k9PFpjTWNVWUNDWz5bOEY+dixlSDNeTTtaQSp1NClNRjdOcS4pV30yWWZKIUpUbywoM3orUHZpVCs3aH5DVFVXeyEqRGleMTZYPT5AdCg+YGwyJFpsc3BfI1s5RUg8PUpWaztwVD9NJHNkfEB4dVVT'@;
put 'T2BPLm5+Oix3TXN8N1F3LyQvMW9fOCpWSCFFMFFhOyhSayxfSDl9PWtKSV4jZFNiZ2FIZk5HOWcvYkUwPzNMYFdJL2tCX3VZJG9gdjl3PHtpS3VTdSQkOFM6bSlFM084fn12JmRAcGl+SjNPKX40WyJJTTlpdEVgdDh8IVsyNUsrITU8IU1aXXp9PyY+OyJ0MDRdI3dLIWouSTIwfH1gWGt2Rz84'@;
put 'MTlqcGNnU184OkQmPktKU3AhYDo6XTkvKkt9TntDdjd3dFZdLkIybzM4bHJ2WkEjM00hTGNaMFpRUXJUP3R9YTpHeHR4SX1HKHtkfkxMOSkhOTt2UygsU1dacz56M2wpYkg1MiJBcGU6NjQkI1ZNPV9KSG1fNz9saHgkKDk+dWBtT3VAKDQ7ITBzaUB1d29FZ1YxWkxeQU0kSV98QlRkcWxnY0FP'@;
put 'OH5eUTloLjEyfkUiNV9LQ3R3YFJpT1I+YjhedkUqUXZleWoraVdDSm9oUWJrPFlDWXF+VmNqdj1NJCImWVFgTHl1PiNZKVBPLD9udGNObVpmW0RYYlBocD5xUlE/ODlOd0prS2lBZjB+QThJd2NFPV5gfS5rN29Ae2Y7Qj9zIyZ7VCZfX1tZZEVmTVozVD05dkgobDZMV3tUYGo4L1o7fFc5RD9h'@;
put 'WStaLzIrI05HeWd0ekxUImZXbGVfY11dUFRYdlVZb1g4KUxMem1jZmA1QmU9ayU0RjxuQnNbKl5TOFlUXyl8YU8hdXcmU2gjMGl+VDtKJCZDeVtlMCIueTI0Im5JPVZ5NGJLbXdJQEc8eXxeYyxHRXVKUUxzaTUxT2QlWGRkaG81cG8oW2cwRzF9KkZCcT9MKzA1emNjcXtSenRbeDVQK2puNmp1'@;
put 'KWtzRm89a1B8Iy9sfnQ4O09nRGxAPHg7S11tPWVYZzcxW09QSiNQOyR+ckIwaTNgbyV+Rm1Cfi9HQ0M8a1pRWzt9W2oxejR7VSZbWHF5MVVeS1VDXkxaMDNTN09AR2BUKFchOkVNZ3MmWWx+OSxCMl4sN3ZKbyN1aTUkQj9WckxBSlhMMHR1KCZXYSEkeyI3KWB0TTE4djcxcUlPPUtNWnVnXXM8'@;
put 'OCF1eCNBVyFSdm5fSShBb299UVZAR0VMXlRRXSV3UXBgWjpXJDpQSnJBRk1hdVhGdCQsR2YmIjN6OXg1RSJRMipyRkFpMnRJVzpdNnhaKkZ+OCJlRGcxZ1VeWS9bN0EjZChEeCxENWhjSjZmOXQ0MnVtMSVad3UoLzhoSUI5Q2hubHN2PWIkTCpFQTBXTXt6dTpJQ2VWMmAsNkgvOyZLMn1DalU0'@;
put 'X0hKZEZ0TXV1NiU0YGk3Q29fRUo/X1IjRFlsSmt3WWl1ZV5aJHNOXTA8bUFCLkpvQmhRW2pER0JaZ3lkeE19SkN8U2lHMlFTMSFhW2lgbGYjNmBdfV4hPC4rRWQxdkRqNk5gK2MyUTtHIl0vdl9gejhHYylgInw5UWpOSXEmK25TcjBJIXEjTnJkNnB4b31dY1U1NXFEMTtrWE9daXVEKUJifFpi'@;
put 'OE5ZI0ouOTdpPzwsbVkuZTcqKS9MYkxZXWJYczAqM2tBWjRPay54ZSJXeytuQiwodjZhPXRJY1NTMjRyfShZN1Rjd0grQFFlcnluXiwmcWlEJHRrdyRGNz5ZSTorV0lmeyEjODcyTDVoMFA9eX16SHtaemUsTnhLc09AY0N2OkJRK0VmeXVDfStkKTBTY01fNGphZjlQcl9fXylqbHlEWVteMTth'@;
put 'a0F8LF4maThuc2s9bzI/TSxbK1svSmFQbUVQYEVXZCZ1PENycjd9VGdiMzpjcXF1OUdEVVt4YDx0Yzd0XlUpQypWcE5wIjNVfCo2XkVjWWApMUQ1Yi8+cV9LTU5CUjZnWlV5WkZ5XXE7ZCQ6KX1QYjFDM25gaiRfT093bD9SO3VeQk5iJXkrITtGQENjeXx2d3l1emBTWTVpL3EmIUFYSyhhJk9y'@;
put 'JjVWZzsrVUYxcUUwN3tiNHc8diVnRG9nV3NESkFFa3V4Q19XQn1FI1dHIS50Qy9IR3pBUUgvST9VN0gyJXd2Nl9wQ1NpSl01bktYcH1gXXteYHVrIUdtKEpOS2BaYVdKMSMuXV9yNGY0UGsjUmM3cD5aVVRDKGY/JSVMT0ljSmFCU3xHLD5GLnkuNWJDcU46OCM7KGlPbztrdENeSGR2SV84dUx4'@;
put 'Tkt6YXlsemtHbnVTO0txXShoRVc8KUo3cmZJWmYybTcuIzFmcGJAXW1ZbyN7RX15Yy8jP14kMSlVNCteQmJEeExASygyb3BiNi9wQWRdXUF+XnIjcitANmNsfG8pbGtlITJgVl8/Zi9EdGdePjwuemEsTURhLCVzWDplKEldVWdQZjMyPVYwNVt2OT5ae2p9WGpfb0omRWIwWDVEJlBOLE88bUtE'@;
put 'ayQvUEBbMl8mblZvRjlKPEdkWVBXIWwjVyFwViVPaUlCeDRaVE9OTlJ5XVFiU1RTJm9WcU4uLjFzXm5GX09KK2EmMjE7aCRpcj4mIXNxaD5CLFVtM2MpdkJHbjpfVzF8UyZiVHNPc2JaaF9hQ3JUMmgpM0g7eUN4MCojWSk0RmQ3WnZfW01QRHNjV1Ffck98JClETihtRkIiLnFjZjE9O3soY0M0'@;
put 'd3ZfVF1+MHsjVmE2RiMjUkZ+JlhBQEhuczwyJXBMO0dGKyRfc0xqTmc5d1B1aV9YUiZIZn1bNXBUJj1LRTljKG5AVXFyNlJlbFg9KWtLYV0jLlBELGooQjNpTWtbJmxEXS5qfW1OW1sjPUA8MWtdOjNhYkBwW1lQMm5ReFVpS0ZyOjRQan5WZ1JVPXUzcSsrKjshRUgsbXdHZSNkdzJgeyN3Qm93'@;
put 'M3JHVlIjcklbUjxoX0wyKXZUUSpSW1F9RmFsRXMwZVo6MEpPYSt0fWQ5U2hUK0Z0P1dfbCQwb1g+TGV9ZTBNJTxPMEdhaTFKRSo+OlA3SltMcXVfTSU0MiosVVlJdm5yPnVWZklSa19JOVIwUDAjX1p3WEBhRExNflI1ckNvRmU+Jjk+bTtKNSVoXUZnT0R0PnMjM3RjbmQ2cChZYnV2S1sqO0Jd'@;
put 'PzBtRDUrUkUpd2N8UWxSQl44Rig/Im9dPVQlV3l4fSk7fHksVlZ7I0Z8PER7IWM1MmZGV1BndXlRRmRHPl4vXj9ecHlENVs5dTFbRSN3bDw7c3kvMDUyMHx0eGg9dDdTdGxWfSkvKHdNX18/YiUmVlU9JCY3Z3V7fWJnZ0gyXTpeKDtLQCI3VGt5YGs9P35URyQ5TjI/K0J+KWQ+RjR2V1toVD1C'@;
put 'TEM4RDhEZFklKy44S3xXMnRKPEM2bzxIW1t1bWtnNT4/bm9DaipwRF5xbXx9YVcmaXprYltjfkg2RlZ3WVcpOjJUYzQmZkA8I1g6Ymp3akUpfEo4Y2xrbiFQezhAdVNKej1Je2VRVmJaWUsyUn4lLElbLG9sRDpoaCh3UjY7UGI/PWdFPE17VHU9Jl1fXnxeb2hIckQ+bDM1IWByRE9kd2RrInBR'@;
put 'KnlMaU9kNWkvLCs4Ujdjdks1ZCFFSH12QiVjUDh9SXdVSXlAQDxbLn1LWlsjTnJ7IU8hT1F0dztFMS99Om5wVEgrbWJ5alREK0dtWyg0K2dFKjF4d0M6U0NaZiI3dF4rVj5jQj1HeE1ydXNKXXd5d1shajU+Pz1XdVkyIkRMdG07KFtMQFozYzVYWixKVUVzMzorcERCUHRjam1OPEcka1RAaFdy'@;
put 'TzNXK1h0JkVVTlUwMn1hYHIwMGRgW3hSKz0iTFB8Ind7aztKRXJdImlGNCg/TEBab05RSnpPSkNhT2kvXms+MTAmOSkwcVdULlYqNGhlOiU0S2dJdyhQOHldQ3BKJEdVVyR5dzA+eVBoQiF1eVR2YUVlRFZZK3U/WFc1NXFvLj10L1MzZVE3ZDY2MnprdWlWaV02anhxbm1gK2ZYSVMkQGNWYHQs'@;
put 'NzV1aFlmfT1kbi4haSpuKlFMaSo/N0J7NEYlPERNOXNtZlBLckVAUk0wVXEwaTYhLkJCPkExOzsienJUNShpZ2lxOl9XKDAjL3kqfixyU2UqdmJMUnZIU34pUT9kcHk4RjRydmBzX0VDPXM+NzNnTUsocS40IUhKW1huNWJzTjxvTzJJN0MkOUU3PWIhc1A1Y0RMQjxrRV9aUWA/eHRZcHY7KG4m'@;
put 'JVpnZ3IwNj97PnhKRmIwdnhsKXBVVCZrKj1WVUAqWXo+c3dnPj9gflN0RVkrSCxlSytfTXJHLzByNGYiTF1ZWm84UTRdP1ZCX3FKIVYwT0FeP1VnZSZlOnZ0OVhEZWBdZCNCdjBCLHx+OlYiT11sV2hVNHhTZkoiVWxzUGA7O1ZPfHZ4W014JklScH5kMmQrRy4hbyZ3ZnJJQn0xKlFQN01iMnk0'@;
put 'OE8jVlJnRF5laSR5VFE4P1NEbjhOK3xycDx3XkZEcUlNRUxfZ0RbKU9UY3BZd2ZoVHVgLi9RXn5vb1pzODs7aVAkL19kRUlnQUtYOz13LltYMyhTNFVbZlpiKGskaEZQaGpLNiVOW2c/QmtbXi8yRkt+bU12QyxqYT9NXTVAMV9jdDssR08oZDxXej9XdXk6LnhyQVg9VzY0aSo4aX5jelBoWG82'@;
put 'ZjJCaUVWczJNSFozJUk8YnJfKTpXXWRwJFo4fE52Q0YrdW98dTBhbFEmfmFnSWlvdVhbVy5LQEdZajRlbzQsOkk6fSk9VDZje0VsaD8rZ1ZEWns1IXNgKzpKe3BdUWUsOUtPfHxleUImaG5oT0IrUik1cSVZcW9UemNZIW41ZUdoNHs6TlVVbW5veFhDa2UsQz4qazlNc0p4fH4ifkoxRUEqbGg2'@;
put 'XiVAUV01N1A7KTR6anFwfF9qLE0qYCl7R205LDFUeTwiSmJxOz19fCVPSGRmIThXLmE4K3x7U1d+PlJxZlg6d15gM2Q6TG9OeT9gLjksdW5WSWoyPEhgVHtrN0ZQU0cpMGI6PzwoR3JUZFJRYjFXVnsrPGJlfCRebH5IdyQ1QjBKUUoiSzA+NldAYV9VZkdHU31tIkgxWntQP3hRJUlkXS9MSVdj'@;
put 'Rnd6bWBIR1Y7TmRKZkZ0dWleLE9xRkBjYGxNLCgmez8lWSkyRz00RiYjdEpIX1BULnUhTEs6M2IyNlJzOTY9Kns5L2pxTk92SWxVamNyOC9YQ08kOUNFSEsrJkwiTF5RK0VAXXlpOXowLG9dTjpUQ24jdnVDUWpsRTRPR0BVVj98JXQuO3Z4LHMvSkxfIi9AQ2k3cSQyMSp2dXtiL3BuMFpzJHIq'@;
put 'SilDMVJUP2Z6JDVzOT4lOCtnTyN2eG1DZDFDeS5tYXspRnJHRCxtO0pBdkh7Xm5RL0o+ZGdDanZ0Mz5XV2NhSCplVEBpVHQ2PFBzWi9OIU87ZURRdTB7ZXssP1taKX16JVcrKXk5P2RSflVCI1VAIkQjfmt0b1E8SUZDdGpmR2gxaUUoSmRPTzI3RkMxPzNiUFNEXjppRDB+RmssVCYrdVc/Um0m'@;
put 'R1FqXVYydXdOZnMqKX5QUSJkQiR7KG1tR01AaWxeLjBNaWNKKXxBZXsrLzh8ZUhqe3ooI0B0XUlBa0BIWStSZ1hdYiZ1NWo1IyNfYzBHJHlGWDZnWCxeMGNdP2F+K3RGM0BkJC47TEpuZTRTWXRDe3RFVjlpZUlCZ1kuZ3ExaDpEei9jNVd1e2FhQ24iXn5YWVUoPy5jMzpANE4zVkAvJXpVPSxd'@;
put 'fUJYRjgxdXoucWRvLl5+d0NmfkVEO0MxO0JWJWZ4aDNFLktDWiNdUUY8NnErKUxQISFmdX47fU58UXN1PGJDWDQjemBmfUhffGcjK09ARH16QCs1amlncXAjPCtUXzpCIWspOHk3W3o0JSlYY3dvemYlUWVTfVtXKTJsYUc6LmBCdHs+NGBHbl4zYDMoIXgvPHIwSik6KE5TJGUlazthITJOWiQ2'@;
put 'a1k7fSRqK291JFBsWD8iOnJ9V2o2YHhjfXpBQyh0ZlIhZyx4MWdyMyhiPGQ8ZFckbSJfcU5jT3MkVi42NHFubyEhTD5ESn5fcjUwZ1ZpSkd4NFhNO19TI2ZKL0gqYXVUM0RsMz5DPTVkS0hhcGtfNHB9K2JeLGJWV2JxZT5WJlBbSy58QlRoPURSO2JUdjFJeSlVY30hKHg2O0hHL0lETiFKbjop'@;
put 'bno1W3JtZEZAMVs3WnQ/bFBHKmM+bWEqSkBmQ3l+dXdvPTE0P25fSGd+Nyh5VW9wa1M2O2xDVn1LOHdkcX4yMnFdSDBLYU1hQmRfcUJPbl4va0krdk5MOWZFMUR7UmZTKzsrIjEhMTkyQSFOKnguVl1ZNyRxPyF1fStSJnp7MyxienBUQnJpV09ga1ReQ1tLJGBzWTRaWGchZDNVckJlPG9rTDQl'@;
put 'Xk0kLmJ4d2lgOEUyV2BwSlBzaENScWA9PUdaeFt0eX1hSlAvRkNARVB5Z1hxSUNEQ3MyWlpDM1cvS2FZaSQ4b1QzNT9gNyt4a1VIUC5NXWVwVXZlQ0tqKjs+SlltSEg1anBeKWpKYi88aGM0UlZQe0lqbGlpclFOWj5rTjRvKigwW1NYVlJSNSUrUXg0OW42MyxdXlFKPX12YCgvKCFDTlJLJWV6'@;
put 'Qzs0Q3xAKDciV0U0JHQiQUthUmZVN19KT3hXZTtVbmtIPWtiOl9sRzQmZkJ5PUpmc3s5QDlocDp+PjNVfndpYVhsWXFHcG07RHlnQH1haXRAKy9uVmYuRG9WfktWcVB7RTd7JDU+V0AyYGsuRyxoVVlpfWV7UWcxPE4zPXddblZNTm9IfGg4ayFxd1o7NlA6PTI3KDVtWGV3XklvV2o0USZtUn1U'@;
put 'aGdGVz44SkR1PW5FdSljbDFNQ2wlMGhNQVg5SEdGR0NeRiloVHp7aV9rIUJ9PzBJUH5raX5EZS8oM0J4bCx4QkoiS2N4P0ZkZi90d2E1ekMoRGVJa2ZzMz8xNjdSZWVxYV0jfSEidk9VIWt7fEgvcXcoR2JGJVlrRDdtMHpgODJ4fDx8MTR+TS5YYD1XX1JbSGQ8dDNSNE9ZOyV3Ol9RZ3coUDVZ'@;
put 'L3tXajl4YF5BO2ZNPEZFVyYjOktMcl5SPE0/IzJ9SURHKFpMRkdsQUkuNDQwXSQsTWprPD9FUHZoXVg6d1FgY2hvLEJ4OD8lRyYvKGokITF9YzBOOTI4PT9XcGo6UnNEYSJ2RTtvY1JPPkRqUHFsIWw0TnswKWIoPFhuc1o1Lm0hP2RiRW9tUmI5LnAjIlV3S3NHM3pDXS8yd2wsPX0xNCxsPk5f'@;
put 'eWIhUHBdSzgzL3c5RkMjZzl3eD1Yc2IzJEpec0c9TDJUSVVVRmJXWVNjZW1RQ35MOERnRVFIM35bOz1GYVdMRCh8SXZlfS5yOj0vTGY4e01SI2FVWlpfOHNQL0Y7Ono9emZbSW9KY0l+eGcwSz1vW0JBPSthayxWcVVtIylCP3d6T2oxaE5BMnhlZXBNb0YhY21IPFM1QXpUY3p8cl1LVXJ5NUNT'@;
put 'L2pQQ1oyVjRPfl9NZD4/bSQoRHdJXyVtLjEwOGA4WXRySDxYZTcpa3h7LFU6S15ZVEomZ1hTcT1aKyU4NV5LV3RvPjRWaV9UZDc6bEd4ZHltaEVsU1ZsSSo+YGNFejUxUitaR18oNCVXYSMsZXRmfj89UFZKWzl+dnc6XTgxaVFhdSQwKzBYPFY1QzgxSD5PfTZYUEQzPD9VQUYwQlZbJFB0ZEMp'@;
put 'bm9ENlh3XUBzOVohRyVgVVN4bD5eMDw3ZXkoPzRVcmFxV2xhS244SUdHYEU6a0lXXzR2MlZIIzdmdElEdFZpQTxgelFBIXMyPE5xMXRMemk1SV0+VyFDI24jQkBVM1RvaXR0bj51SWdhQkNnfHpJTWZ2dCg/NmskQyklPXJGYlB8QnU3LEo+RiJhVltVK3pUbTNkOXQ4bHtDd2JSaWlDOiYxZTRk'@;
put 'TT1KeCJ1YG9fXVFofiRjNUJaIVVEP1o+WSwpLEVVWkx8azo6JktJTFModmovN1FZJnM6Q29WTWQrRnBlIioxbSNCdHBmZVYzTyVVWU04MkVlRitAMzNyKTUwWGslRygxfD82VzFMS11kPHdzUXFYKy4iPURMRiltZnxCSjhFWkxpc0FQOkJfPXpFQSpFYiNNPTc+SWU9VFF5Xi5OL2tKRFJEdFRq'@;
put 'eGY7Nns6OEJPKilnTDFwNEZSSURyKnshdWZ7KCxkNEl2V0FpLGFbOkteeW1BVlRtRWlHNSxSRXVhXn1GWTYoZW0oO0t6KUBsektdY25TVldXKTs/KnlDUiNde09TI3hpc0BaJDpbYCFhT2krMzs9Q0xwdDduRWpdVmlecF4+dVF2W29UfkRFan5qd3lOO3pLUmlURCY7W0w5MjFGdDcxV2VbPnEl'@;
put 'Jkt5YTc8VHpwQFBdUHE3JmYvfXBxPkMwW10lYGNvekJ6PnZdLEVtVl9TKTQrO0BWYXdpR04/RDw2eV83WnFqKnE2dT8yL3tuRj9QLmx9NkY9cityamB6QXZ7PGhPZEVMPyZaMDRoVFhnOChfcF1wImtVKUdqdC8rOU43P1VjOGRIYVMpbmVpQD1lRjZvMldaJGN7ZCoiJWtoIStmIVtqVU1eVyNP'@;
put 'aGdLKkQqK1RkVDNVaGJfO2h3UkNuODtsMyJnYG5rNTI8VkNTTUB7LDdrZC9fIzd1Ujc7WWUjSGZeJk9ufnh6WEdgbVFSZT5RMnZORzU/IlBWUXNrZ3liKX5BdkJKYzsvfCptK1l9emZhXVRPdzg1VWxdKzwucygyYGlmcEQqU0l7P0VMPEBVY0RuZFdhaFpUYiU6a1hiITVQQSFZKVs7ezA1Nl0j'@;
put 'QiFIcURDO18mMTdXW3RQRiw/ekN+Wl9ZZT1fPlBVND5APmBoaXgzXXlPOm5DT3QyYSNsfVV8WD4zKX1UWSRbYENYIylBRXMpT1gqTV9iV3Q5SjVOblI0W0leYlt1MEljPyNMYkpkTiRPbUl3YTUyeD0yUzk3SXFTUnRjK2Y2V2ApZ2ZyN05FcSJeNDJbN3c4RmFCfkRLcTk5OGxCMzhGWSIiVXhX'@;
put 'eH1pRmh0XzhGMHooZlBnKGVZV0kkIzkvWyEwTWZQLF02ZlJrcWxRUS8mYkZASFlmbHQ+Uz9MOyhRZE5DamdybUImKT1vVWlfaihLMjs2IndLZF82djYwTGp1OCEkfnxmL2A3QCUxcyNNRmEsPSJwMEM4cilWWEZLelBeOVpyNUR9RTc9O3Esa0MjSkJvVkliI0pbWSJSU1p6NyJUQn0oYXlUKVA0'@;
put 'JDddZy43QzwzQkJBZ2R2JTR+ajA2cHchT0Z8LE96N2pIZEsoTlRhaGk4OGpEZjYlNnJaUlBYI2UwK2t9YHBXT05OcGclUTkmakhDcnxzNWEhdCo3bnxlPXh0L1E+NCF0YyU7X3xgdVVoYnBDKSxJPH0pM1VSfXtIYHpNPkl8TTgkUVE5bm57enM9Iz1adkNWIztIN3VqKCg0aVF0dVZreT9YVkw2'@;
put 'by9sZDxzXlF0QX5SUl5ZeSRHYkx0PlVFfSh2QE0vemU6fmhdbl4+fkF2I2c1M1UrQHpfMl9zTTwweDw0Lk81WEAxRloiNFdCI25rUjR7PWUhOjo1TSZHQylIUWZMTSk0clRdQz5Ed3B0WCFPXyR5QGQ6bGxTdnFWU25qfExZfTslWERlU1g5YDVAdyhWX2pafCtOZmhFLiZUcS89QH04WDAvRFRg'@;
put 'dXQ9KWdCaFV3ej9rJmM5Nnp+P0wqaiIvTW1iPzEkNGB0YDVPImluUFhQeDxlbClTaFE9N1Jkej9vd3MjMkcmS3RTdiVlWEdlRD08NmhhI3xtbHIpRz9AR0lvXjlScXpZWHluUXRGVm46aUArbSFrdnZuYGMuIjZeZXozbmt6Y2oyK2UpIU9xXkpPNmFQVW44aFBgIjA/RztRUCQ0VVhuV2Noaz1a'@;
put 'PmoodEssUUluR3prdGhCIWRxUnl+Pj1HNX4uWnRwbFplWFJYeC82UE9wYl1aXlg/ajdQX3I4fTcsbGI2PkdhNnJreGpkMD90bmshZlo+Sms3LFY9Pks6XkMvT298Y3VdcyFULmQ4bHI+WUZDXj8wN3ZWOXJbfk8/aVJSTUVydSNKQWhWWEc0UGsxT3AvOCM6Tj4sNFR9fEcieypfVUtNZzdsSEJ3'@;
put 'NCgkem1PM0hJbj11LHo0flRATU1sdXVZIT1xbDYlempxey8mRShpTHtubE5bPz9GdXZlQk59Zmx+ViNwdlsle1JgTVp+e3YiZkU9dGo0Slp0dz1Yd3k7V0gqIWFJJlpyUiZyUF1RLzxjeCo0LFpTYzAuQzRZMCVZMnVsU2tZRXtkKEkuM0Y+L3YuJCMzQSsiKjRTckh6TitfX2MlWjVyal1YI3F3'@;
put 'Z01RYEJjU1drNjYkSXB6TXt5LG48PH0rbGFBcVNveS5BIUF3PXN+SXc+VyhCdzdnT3s9QCglJFozKjlmcik8JUVHSmh6Z05PcHczfDFfI2lLUHh9NEg5Rn45b25xTVhINGNdNTlJajY5Q110ezF8VUZqXTFRTSg0cFJ4UDg8S2ExUyF0MDosYDhnb3h8T0RDd1J+SyZySCNFbmlhYHh6SHNFTkFh'@;
put 'dCZSQXhPJkh0IWhvU0soRzIjSip7bG1Cc0gwZ3dfQjY3IkFlPngyOk8rfmYjcTd0bUhMcD1mcjFpODZ2P3w2M3VuX0E3dDQ2fFB2UylKMUMqVipUKnFfJFs1fn1bcmVxRUdwQXZ3TVtTQWJdRmc6e3lTayI4OkpiblJ+b20yUDI2KCh8PlNMaCQzfDA+JkZEO0JJelsxU2NvL2taa0A+VnVILEpm'@;
put 'STNgcmhSKCtOU3BSUntLS2dDOCtIJFEmdGlhWnZJbm18NXEzbT5GSTB6fEdFW0J7IU1YcFFKSHs2SyF6RFFVXWBDW21tdmJ2bzV0PTdUfGprTVs9e1BjK0pyYllpPEA8OD1xcGhlZl0mX359OnZvZi5OSik5SDM2eURAK1l+cz94KXswMj5ndmQyPjF8RmtaW0lJNTpbJXRSKlo9IkAqNShHPjZZ'@;
put 'JFQ/WWIxKXRmOVopJDQ5cEw6WVdoQnRnLitLdWVMYTtuM19FVFROXyZUIXRnTVg7VnpFLnYqe05ERHpLdXlaeVJyTEB5PHN8QlZgcUdwXytUWixdU21GU05DdylqbDRoS19TVik7InwhOHBEfl1WSTRnWyopVlppWUoxZTFtTSl7RnZvSn0sPzNaI2AmM1RBSyJBel5pVnQycFN9eyQ5NDE1O0hV'@;
put 'ZmhSZiNaKHhaTyxGIzlmUyN7IUgmekQvLnsmcHI9bXp5aGp8RmwsK3NwNXk/c1kvOyt5VzE5bCU+amd2ayVDPzVnXiVTbygvV1U4dF9ffmUzUkVAfHcuKTlwPGtURHNUdlJCPUAmZXl8Pm50OXF0ZENwcEhuSEpiZy8/NzFUYiFMPCRdTzJDd3pvTDdkQW8kYUdBTTMjWUpyfnhFWkthSDs/bEhl'@;
put 'LzhCayFAZkhjbmBdPFspYUFWbnRWIUcvTyJWMGYsank+SlZGZUhkezw1X2p4XUlfXjF9KjgydD9re0hGbkR6KHQvMClIYGpFImtML1VJMF9LKUxMRmIuTGZ+MX1Gay4xclVbRG9RVT53cHFlPShkMXQuMFlhUmEsQHEyalJ9cFJIL0koZ0xZPC5Cck8qfCM0XnlyLkJDTDEsSS46UW5nKWZPTGBO'@;
put 'Pi9ZSilCJCFwMz1HTlR2a3YsYk42bkRqLiQ4MTZWbzJyNFViRTlJN3cjeDR3O1o9b0JRfnZFQ0ldfWxwJGZlU0hhK09LajpLeTg9OT8uRCpVKTEpWmYoXzhra2VucEtKOVUmdmkwY3RuaTw2fHlkNzpjdkNhJEVXdjsyNSxmP05RNGZUNEpqVC9gTnsuc0crKVNCYzJXbnxebl5YaVpCZ3gsL29H'@;
put 'VUpZYWdHVUA3PE59dihrZGV6ZmBbQWgqXm4zeDF0aXVCaShOckd4TSpvXiF1Qz86QjlBJSpDYyo1L3ZrKVhnXlpaNSgyMEJuKjYpSU02KjpeQ1NjJlglL3goTmlvK0BkJkh0KH0mRXQ9V2pPeyxbUT89fl9rNkArWklUVi8mXWxjbWhuMiY4WXcueyp9O2pVTmBdPXFlZWguI101dlB1JWIlOF11'@;
put 'PG9AXi5bbzQ5NkwrfF4pXlh+ZVQkK1kkZU5tT3x8Yyx2MSovTyYoaCwvTUk0KXFZVywmak49Z1tnRVFTQmV1L2s+fHFdNjI8O3tPUlRbejxzfDYwTWFJPmVsaXB+QW83WnR4dz9JfEx5JVh0cEMkZ2hIK2RLKFdGWktQZTRWSXc9VldjR2Q3cHdrUzhMNWtPa3w9UytlI3hXcVhuKjpxLmIlfiwh'@;
put 'YlAwPERPQ0RaZUJQOEskIldVeHciTDNUPTw/Vj55LCl4PUkxJj5eUztSIndnViJDJlFhXUpNPnZEN2hHfnZIczQ7eGQiUCt6WSlbbSM9dUM1UH0lU3JIOGZoKltfPEMoYmkrX1h7SV8lfkU7d31fUihDWyldV0NeWlEyLz5hRWAoI2shKUI+ZWE8bTNTSX07O14sVGgsVyRzJVR0Un03WUBDdUl3'@;
put 'L0tkPzBDKVQvN1tpb2h5bVY3OS56Tm9Bc3tMI3c6P2w+cGU9QkRMQDo7MiVMdjc1VDdnNS5fJXAlKUteZytQQFR0PDZXaGFMeFhNOFsvKnJKNWR4Lll+L3ZCST4yWzFiJFRqUVNaKkcsbFgoJmt2QF1kdzIsVDsxXWE6cEdDUVlPe2B2ITlwLFNQMXl8V1BoLy9oSyojRHBNUilqdjxXL0d4VTIq'@;
put 'aHRFSFRJOHNqNE8+OmRYJVJxJnNjbCE5WypAXT07TTN5KkJrIT07bCZNbWZ8PDRtZFNiSUxPRGY5ImhYX0hSMkF3fHhyNCxtPl8uUi8wY1hfaXAjZylAVE1VX0didmdfSkN0ZDErL3BmZFQ+fWpCdVNkX0EoJD8vPSZrKEdXNDpLdSpzKCtNS04pYFt3ISYoZyl5U3shd1lQSCR4QklvcixPKzU3'@;
put 'WjciN01qQVMwb0ZEaD9ZVjU+djlyNnw3cmwsKVs6VXg8ZiMrKVRaXSU2dWo4QkUuKlQ5bTApcXZDR29pY19IayspSnRMPk1tV0w8OFMvLnYzYmImcHRGSVRvOGR6aS5eOUQibCUuYFNUVlZORVRZclVYcSh5YFRDVnFUJkRqRlp3PF9CN01VR1AvOF9AQkVkK1J8KEJNTGp8YntrQF8zKno8anB3'@;
put 'Sj9ML1hpZyk0U0YxMDB0QGNOPVlncD53a3RvNGZ6LDhEcyVmfDxsYEQ7Ki5iQ2pWUDUhKGlYODh5XkdzNCZETDxxcSJfcTZoPTx3WClmMyosUnwiR09sXkFhb0VjVSRqLHJdRyhdW2NbcSxgSzI6czt4Tl0/ezJfWnRYLDNrXk1tYWpxYWZEeWc2YjlncGpXU2duaSIiQSsvNm9nXTE5YWpwKkMj'@;
put 'cyUsVjU/SyRqTng8XyhidGVgfGZSS1JdSyI+cFZOUU5QM3MxeVo6ZXpoc3cuZnAkMDBbYllhcjt3eGQyYjFPLmhPalltayx2aGJeYDgyUl90ZDRSOVhCaW1NRnwocGhhUCNxMzheKltJeFk2fmE/KmQhYFB7JCQzKywkZDN5Xl8sKyV1WlVZUjA7Z0VEWWskaStIeHx6b3MzYz0mP21haXdJViFS'@;
put 'S1UlUWgic0ZoVEk9LzMySiY0fFtFK1BqXmA4OCxsdjR+Y2dGLEBgJXt7JV9sZDpiPUlAKjsiIW9xWmpePTshWF18PUNHI0ZXX007bG55YyxgJH49Z01pJCY1OHVxckwrX3FUXSNnKXRtYkZJZ2JGITF+Tz9eKkkoODBMJFQyOVlMJT15Ln55dXsoWXBbPkNPSXY3ZD0vN2lyTERWaSJnKCpVWjsj'@;
put 'SUZIVi88QXJ2QXohfEh5KllJR09wZHwqeWVuOihpakdObF1+aWN8cl95KFRENDErXTZEdzs2QlJvTUhlVnI/eUtVVUh3JXo3OzRMRF9eRkhETVYuRUhzKmRqKVRbekRCVmlUYmo4JkpUP0Y/YUMsRTQxZHZQdG0uVSxHKGlmSjZPVGx4PDZNMWFqTj92SGhwKXlrKyFXNG5IVlh4W04xMntibjYx'@;
put 'Z1hSYzY1RVRKK2NoK19KaFQ8Z3I9QDEwYkx5SD50UDp0fDlHRUQ5KlE4K3svQV1lW2olWzk6XVYxU2pKQlBAJHJIRGkmZ1QuVG5yJitaOXJnen1UQEY4Ykh5NmVMSGJkXixrZyUrekBjLzZCa1RuZVJLTXFSS15AS180bHY3cDgmd1dXT1NnOzErKXJrVFgmX2A5Nn5kUiNbRkJebyJ4R0dgWTZw'@;
put 'ayYuM1ZFfkU0LE5RRVtZeGV7NHBfbSpneDJ7UVU0d1BIYzt+bl9haGxDPXBJeHE7KyxqfWMubGl7PSJOJDpxeDU9RklAclk3UmlkdVdxTSwrLjtWXXxNMnUyI0hIMWdnTXdeVVY5IURHdmJxQldXKntEUntuJnxTOmllaSNdRVRoRl03R0JEdEdZUWllK156eT49fV4uIkMzdj52bmphXSRUTX5M'@;
put 'WnpRQGQkSnBUaTVeRHNDRUV9WkdwaFEhU2VRP1d+cDJ9NXpha0JbTHVqLkExK1g/X10iczJzL2FgT2AlT0hALHpbODY2WFNbVWtkR3hfMD9aeDxCI3pxMFYoNiJbUFc+dzU4IVFbOHZ0XkQrUy4hWCRhKkVIe3pUMHQhJjU+ZUtKSmZlVXA6QlAyZj1YeVo4O0lGWylTKnkqOkNOV3xzJDZ8SUpG'@;
put 'eSh+YFBjZyFmNXpwMUd2ZTgjK0hORUhlJXp2MXFNJEA9QDwzNFAoR2k7RVd2NUwiPGMvTFFkNF40PjpYL3A5WX5IZnNyQ1tWbDlyc0RJMnx9MWJjYz03WTRZbjpsPTxlcE8+Zmo0RSpHbDJYNXBHbWRKOENaQntTd2w+eXl7bisxYS5wcy8iZTZnVmpqditzNCVjcXdHazEqYm43PCRSdHdxWzVp'@;
put 'XX5sMUxCaDB0NnB1XX5tY0cwUnhpd1llKE9PWndSUUVWYkBsJHJ9NCQoKD5oW0VLM3lLe3tCaXdHJDRWfDooRz0/XS48NHFWLGJ2NX5pPCZpY04yVURQUW5PJntDenFbYiU7PWlTRTB3ST9hPy8hU0NPX1RYNEF3U01NOWEleiIqR11CbFpgRT4wNT41cCRYa25laXh4TF58UUQ/MVU6blU7fltP'@;
put 'entBbV5qR2BIbHYyLzt0JTpteVJpUHM5ZnN4X2FxTCFsJEh7ZHpdUzQwZHEkLkNiSllMVVRbKkI8WSgqfDEoRkhGTWhsVmN+REA4ens1bHRbRHwoXShWOmU8UUZ0bUZwe1BgcV8kSV9lKy9gSEh1X2pBQ3FmTi5rIVh3R1ZpNipURipUdWtKR2YvSDMsYW9CT0JeUEE6N3ArPnFFZG9WTSY/YiJY'@;
put 'N0IhQCs8eShIZG5HPTVrUSE6b0c2JC92W0AxOkd5cT5QOUxuI08yUlU5MSZ7fStFcX18Z3pSP2t2MUc3LFZQZC9CP3R0Izgiczd2MTgjMmFbX01kTGh4PHs6X2hXXUlLM1oweSsmYT8yPG5ELFc5QGhJWz1QRm9ZNFltIi9VOFdhS1RuYm9+K2t2cVk2ODJPLlcpdk1zTFdCVE5DSWkvPVg8LnVL'@;
put 'bGZ5PyU3Jm86cj1kc35ZYXIkOStMYXp6VE5fcnAjTW9pY2lEVXlWI0A7JHdUdTBYdFl7WVU0YVpVeWxbfS5IWDxOc2kuVmdHTHpuR0RALmNTekVYRkdOXiFUdlM/NVBuaXQ7TDpnInJJMFBpfkJqLGI9OW5dSkw2bz0jL215YTFpZlY6ZloweTY/ZU83fFpDcmoqOE8jTk1eeTxrS14zVWJkRGk6'@;
put 'V0JJdy5AeXNsJEJFXllvYVtFOjwyQj9QemB3NixRTkkxYmlzND5kc3l9SW47WC8sa3tQO3cpfSQ1an4yY2VhWH5obFdnfCFTRCxRQGl5VTd0PHZ+Pl9gOC9xNl1aODwhRGM8ZT51dk8kOTtPRk9MSjVzYypsZUUlb2F6PDFpKnBde09GNk1AJTZQZjhXc0w+RUlONXhnd3IzP1tZcVpxVDdKLnU1'@;
put 'fChbcTtRLGhbTDJpZmlycEBldm1dVHJZcnl3eVpOMjc6S0JFUWU0PnBmOFFCUUtTSGhCXl1PQzNSOjpvWj5ZQTolb0NRPjBhenluL10ibTV8d1pOUD5iaUhlSGBWSmJvPyw0fVpUdHp6dT9RMnBYeVFTKHF8d35gfjFMP0RicUUiJXcoIT96cnl8ST53USZVOTY5Lj98QlF4L1hwK0NZWSEzMCs0'@;
put 'WlI4fjdFMCxEP2lbKVtlZkFbbnFmNV1RJCllKFNNT1V+Jkw+MyI5S2RULyFrUVlPcFdSeDZkNF5UWCxfWmVIWHBPXSl+Pk1vO1BLJDBRS3gvZDRobFBxdEdxWktqYjwvNjhELCtNJDtHUD90RlVzY1d1dlIyMGpSZXZYJkpSWDhTaS53UzFob2lnW1ovXUFyby88c0ZfWk44Tis9O0VGaHNUL0NP'@;
put 'OH5BdyUoYSEoOWpXOSpZcj9tdU5TKmBhJitHeGZaa2BEclosWlEhNXcoe0N7NEdOSTVfSDt8UUlaIXZVWnFfWmdET1UlOU50IUo+e2VmVCV9YTFwZjBffDVEWWlLV347KE5gPVNlYm0pfWNQOipScmlFVmJMVkZERjduWHgyJmJAKVp8VS9hb2Esfn44aDdbImJXd0tOY0BCbz5GPCp3QFAuPlM1'@;
put 'WzhFMTsuPD5OKDB6YUkoXTR4PU16THh2MWM1TSJjVH08d09NZnhFR3EuYXl5W24qbHU4KVNfd0drQyhxYVZBRTJ8SigqRnI6Ozh4XTF6QEQ6YTxsWUpicmpfS2I4PnxIQm9tZGlhc2c2ZFdvOiQyZmE0ckhNKStOfEJ0clo2RyNzOTcmcChPX191IjIvZj52Q3xnUypZdmx1cXF0RVhdIXRxdCls'@;
put 'Wlc9MUtLYlg2M1FhKC9nLz8oJXMwcVR9QVY7TG93fD5HRStzLlkmSElpZ2Q/bVpMX111VTpaaT5mRjUoOXp2TTk7W1o3NTlKfS9EK3d+ZUohQWc3IT8uNElRUGdWa3REemVVVWBiTTdnV3IiNj9xWjF4PkVlRT09YWZlZCJzPmFhbFg1dzB8TmxzIis4YVZhN3A3Yy5+KiRwW3VORV5fXTUuNS9t'@;
put 'Ol1pNn5PcnFTdSs+TX0lIkMzKEteVDx+fCtoSixkS0RuKCtjcUFab3B7JkU1NDtlSD9+SnRFMHtHJCRjUTNePj5Cdy4uK0ZjfVZhZjJ3MElUL2ZOdFNYczRdUTlNQm04IkhGJnNqdXszXVchYS5xIlJVZEtWc11UZy40U3A1TS9KakVTXTZ6NmZDYyUqJjMvZTVvWjlCfjwpLzhHZCJvYj9AOXBz'@;
put 'UjIwNTo/d1FASUF8IyNzLj1+Ijd4YiFeVUMjfV9Odz1JPDd+IlV3QGZMb3xHeVtyZTNUbWZmfDpEMUVZfTppSztfW04iUTM+MTFqaVY9dHZjKlQhdGltL0V3N2YhRCUjTiVKZ0ZIZHQ0bGNgWWo6ST8kUlh+MXpyezcoSzkpQHRiS0MsJWM7XWdqMCEmWz8jaDJ4ZX5jVlBNZDZvM3tSYldgTndq'@;
put 'fD5HQHhEZ3tVWVFVWzFPXzp8LGhFZW5GNHg1RSRpW0V3UUUjNDRHUldQcEEsZVcwPTZRVmg5aG1oSX1fMTJAJXxlK2w3X0B3Kl1Ley4hUX0yT3lQI3JLYyNkZFAyMlhTcFpuMXVxY0VTLmNRSFB0Q1lPRiNENmRhMnJ4KDA2UGFJUVRfZ35Oe1g7dU12ZVUmKVRwPjwvdnlGX0xLRWZ6KjRGJUJH'@;
put 'QWs6JUVHNUx0X3ssM3crMiZuTF9mKi4ufX1PSUBzIWh2NUFqUX16aWBgMVhyTS5VP3wyNWBjfkh5TkpqU2xIOnFlZUxpPEldTWl1SGh2cG8xKkdiN1BSTDN2d0U4N1lhdXRhaHxYSFhBWTo7aGhTeDxObHh8Q0s6RDRJNEYsQEN5Zj4xTjNkVzZbSEgudUJGR20yKDReeyM7XiQ5W2hTX3xxXTEj'@;
put 'R241NEZCRi5aN1c7QmtNUTo7X0ZBPCslITozcWxPaUhiPEdQLmcjKW5WWyVZSmFJfCY7QVExJSNAKG5mZTtDSnhyUCZ1PDpCfkZRbDc+WHxqO2lEKEF3RlZJVHQrc1dpQzBQYnA3U0BIXno1PDsvdjtaNH5Ia199TSIrKEk0bWBeJD0hQm81My59SyVKalhOPEx7ciQ9a1U8VXAjKjBJYGZjKGs3'@;
put 'OSF2d3VbOjdlMVZUaHNKJEYpOzVWfFE9JnlqM1pWO3NoXzs/N318d2NpV3s4bCNILkUuek5zSSo6b05Mbi9hIjElYUJrbmFBJS9Sej0sWT0/OHQ1PXRXUj09KERbcldtXToqWDN3NSo/blhVfTMpfGBhIUY9Mik3VzY/SnREUGZzMTdheERoUCUoKDhkWD1TUFhPS3hTTUppWi96Y3JHXigzNz4y'@;
put 'elJvIjxANy5fY0VveSJab0AmXUpvJWJXTzVgWE5NSEZgW153TGRRaDRIcGNtMzwodVY5PGp7LHtpdjRUWFY/YUJgez1GS1BmWVAvLFcxfGtmNms+cCFyJntpUXA/RHVwPWg9RSFVMiJpPD43NXc0OjskWEosdF1pbSxwZVg2RXhNfitRPllqX0RlalFrWkxUTixNS197clAwemo9P3pte3hndjVf'@;
put 'X0M6OnRYbHtrR0FPNUgrNUlqeFBkbnJeSjowez5nLjovVl1kRUBQKTNSc2VOWFdWNXU4JDJPVW19dTRMSEkhLkZNLzRoRyEsd1dGVi9sVzx9eExjRkRbIXVgOChRMn1KUkImb3lMajYkOj4iV2hTbypRQnBmMHFHUT9OQDxPdVBZWTU6Nz0lQGxoOT0laDNuWH47XmszOVoqRzNzXTlPMltjJnJb'@;
put 'b0gxLGFVUFpsZS9JIkR5VlclQGNMMj9MOS9AdDo+U3x2M0N+YCFpLzgzI0hJPEFbWV83KkJmLmp7bmpKcGBtPkNxVE0hPzVmZCJjXjNuTltXY2pWVn1GcCE4PS5HSCp4Mj5TbjlgPWU3elovak1aVXl+QGJKXXA1JmJ2Y3BIJHU1W1E+XVdPPmJtU3koMD4zalowOEJFOl41YjMsZG8pTD8he3xM'@;
put 'UTJyNCUkSDsrdUdgSCFNJVs2fWJ3UDlCd2hySDxOIyNURkZBbUByTDMrLisrRHJlUTc/anRJb2Q4Pkc1ZGVPKHcyV3RJfFA8MDNfP1Y+U1JefjdPZVFnfj1XWDdLZStfQH5JcjhpYislSTA9V1kkJFouSypAKjslQDBtW1E1eXNASmdlOzlpVHVJdGliXSEsaDpULm8yO1BwcT8oM3lIZCgkfnV5'@;
put 'N2M0bio4X1tveEVuciFzfCVoXUZHTXd1dndEa1E8PS9hIjVqJGo7MmNqZng8OGZIYlY0OihRfVR2WWRKQztUSz5DIW9bIUZ8PHBSTDVNZWpOKEBkMmVaZj15O15aYS49JTs3KDUpQm5zfmpFeGUpS35HUWYudnc0Skw/W2Y1b1JObUwvTmBGQkNpb3ZyVXZwVFNwei9nMXh1XWNdSTQxenQwQE0m'@;
put 'fS8weEZLJFJmNH5Re25MQEpuKW9SSnAuJkF0fCo4SUVacGZLSUhne14sSUQrM1k4eHkhXmB2Wn1qPl9RISFZSVkqTy92VWtOPGcxXWkhTkZucy41MTNta01FUy9rPC9DR2Q3I1N4azZlNTtFazs+PzJ+I0xEPnE3JF0xTGNRM097YEFaenhGKWMjaTdTdiVXSihHQzghQHNGU0MwIlgpWSVVJkh2'@;
put 'YWlqUFo4JWM8LGlreyQofV4sPFA0OUBiKiVicnxfPld0TU55USp2YyNJUFJiOUlMJSIqW2ZPbUJucHxINk9JejFHWXk5RmFkV0NKWk9iRmZTbnRYLyZNI294OTxIVjAyTD5nODtlQHlCaTtDZFNEY2hBN14oNyYoZVkwTzZDMT0iSmpfRyZyKlhZKl5uNCooSnZrJERGMGk7Uj58IVpEJmJlNXVA'@;
put 'UVIwMHVYV1pZOFVaTzEyXUhJJnpzcWp8b0orK0NsOT5tODdFSz56ZnNoeUJsUlgjYXhQdzJ9OURgSEd6YjVDYmNWPSoyZTopR1d+fjdJU0lNVmJwRXghVFhNSTYzNFp+K1clQGpVa0JtMjskVkZXOm9qJGB9IUhMOzB4T11fWC4we1EwRDd9RVE5YWlhfGRTQWZ7Z3RneHt+dV9IcFNVM0lIL3hj'@;
put 'ViVmZUFXQ2BgcH04IktJU3NWanptMFlnTntVQ2QkPGcuZlc3fjRlVUpbZDZkfFAibHFwaGc3cD85IWZfWEF2cGNweVNRVmUral1vKDt0WXohUTBje0ZLOmBSdSRCc3l0RG1ueVlEOy4uRnhMbjhkV2NfTWBvdnQ0WSxqX1luSVAyPExSPmhpQzdaOT1JUWFEJDpkWyxXYG1POF1iPUg8aEk0TCpj'@;
put 'YkZ3LCgqaiE4T200QG1+KUhoTj8yXlhvVmNDOm82Xyg3Vy5ScnpTOWQuP217YHtGTFIvQy8kPUx4TWhodipEaUBYX2JfJGFVMyZVeygvWFNYdTwocDBlZXtQdDZUOUNTIlo2bWN0ZV47L3dRS01OaHUmIyl8RWFKWk96aWZENGpYVGc/KX59SkhodSVeYnZGQVI/XXhNLHxfN0Y9ZH5COV99ZFVB'@;
put 'QzZrTUdmTUZnLkN2YF5vLlRzNzQ3WDVzUFMlMEp2clhvRUEoNCw2MV5zblVGd2wjM1hFWGdWcEspUkhmQDs2UWRVI2UzZ2xjJissSiFbNmdVSiRFQGRVNCRDaTc8UDgvPUlpeD17MVdtL2hQe1FYL01JWCteSHFraFYzd3w1XnFgMjBRbSFvS1RCOVV3VSt4I3lqbnV4MEc7QXNiVXRvQEd4UXBh'@;
put 'Rz16dGR6a1sofFFqOyMwXS92JmhmQz9NWDdlXXEzb08ifS9CVDhie1JlTmQpfWJoakF0QSIjVXBzflJIXWBrRipIYlJ7OVolOkRlJihrQH0/YjEvWUR8TFd9JU4jTF1HQHJmbmhJcnpASXlmOXB6T0VpW088cXJ5dmpjZ3k6TkpOPHFwSEh9NTMwUTIha3FnNEdjfWJxcTB5cHNbfl5HZz0qK3ZO'@;
put 'bVgmWVJ+I0BRc3Z0cyg4O2suSVY1NFBZSzI5OCw9a2AhP1Z8VnpXP1hhOzM0fUAsWzNDZlN6TDFxYWsvNng9JUB8UCN6TjcuclVGVFE+O01rK3tLY2A/LCxPM3Z+ZmNoPW10b0ZDPnI1XztWOUpWaH1TWXYkTDlfdVQmX1tKPip7WnpPbXpJdCslPFQ2aF4kS05mImskIk1kdFZzZEMuIjY0anU+'@;
put 'KCN5XTlxRlZIOyJ2I3hhPGRbM2QpQDRMWmU7S0NDOn1hNGc+cywveT5pWEtaSy9DbHgsQ0BvJT86WTBwXnJuSyprImdDNTFVKzhzIVRAJHFPcFd3UTEoaFEuNDc4Uno8YGM8cUVpMnsoVHFOTHk5O3x+JlZLeXFXMkQlMkVadz5aMyFgLFo4Yk9OIXY0QXYrdUY6UkAxQTZMVDowdjEub2MkZCNX'@;
put 'QGskWGZGUH1LOXVgZkZeN2NoblVAKzdaZTZndUVvKS9OYjk3ZDFCOCEwMGYoW0kzQlYxRWRsKDtGPGk7VztDVzZePGNuc0lHaSRfS2AmXktIWWpNNmBzbWVTaF1tJDBLYTRIPWh5flBxRHp5NGBnYmRTIlhJWGZKIjI9Plt0YWAsPUlIeklvUk4+RjRvPzNEQjxdaElMUXcubUk/Sk5ZQjV2PXha'@;
put 'Z1c7Ijs0OUZfPl9XWmh5a1Z4fVY6bz5pQ3lqQ3dPczVLK2AwPkNaJC5EWmRARDt4eWI9QmIxWXBqK1VZP0ZgUjB9TSUhM1NbUSx2VktSYW9ien0xKCU0JD1WZzBORC9LJmUocy54PEokXUFgW2FBP0giIUchbXsqdXE1RlNARmRKSzZMLFBkOklMNEdXai91UCVEKDlGTjRXWE4sUmY2NFE2MHo9'@;
put 'Q1pGNnRnflREdGRqckB3PEh4OjRyfTZiWlhzY1NHbDVeJFVUL1FRfGprY1NHQEdHXmo7WGEoSTBnUXt+UCsyNERCNUFaUCp+fkMuZnpHUm0jUylmNT4+Vz4ufHtaR3I3KUpMYXYjZkl9UzcxQD9DSkJTWkxKajkxNCR+I0R2KDZPOms7RjM4dUdvUnRnSVkrSGVfS091RiguJlZza3l+MElfemRF'@;
put 'MD5kVUA7PVlsLk5aKXpSYzpMVXJdV19XU1RWQ2NUITROVT8wOHBHM2FERFR6aihhYWw4ZDpVWjZEa2NAKDIoNFRUPzc8OCw9aTNmP3Q9R2xMcmkzY0lXTW5HQmNBdWl+R0AhKCk/XWJsTVBlbn1GXXsuQV9NMSoxIjwwTFpiUj9eOl81PFZBdHpXOUsue0xkPSYzdGwkUHFkby5CWlV2Q1kxUFpf'@;
put 'e3B6LkVTemNZOG1yVEQ2JnJZPXp0fmpRZT9FJmR9b0B0cWM3Zi9hZDNvL1dlWDlWQSx9a1opaVlZbEdvUF8hOjhbcXV3TT9obyZ7YChGIWlwV31dSkg7ajE9WmguMWAiIUgmRlleWikkPl8pVXlkVlA/VGZtVE1tajFzNyJkd3kkMlBNPiJ9VFNOJWMlPlJEUHdQWV1PeF9mMEU+NEJTVVQ8Smol'@;
put 'In5kTnVqN2Q1YkFJSW4zQCF5O2JsZCl9QykxfmNVX1h5REBUTXdfX3J4YDxzKHhQS3AzYDlAOHVXP0dyQTh2P0phPUIkN3NCbWdyZSlbKXUqNDE+PXAzMEsmMTUlNHlLQHQpSC40Yjx5azlMdn0mVSliZFhHU19uSHlTfkJFPWlMSCI+cDd8NyJ5LFhtWmk+ITx6LC5ycStlRTp5VFZsRjtvdW19'@;
put 'PiRddUR7cSZAXWhFcFFrWDV3NVJKREZ8ZUY9RzVDeE5tISVSYSIsYkNoYUZnKmImeV9WTnhESG9gbiJqdy41Onk7TjlqQnp2QnFfdmE0bF1HKChRfVZ9NHdLKjY6RXtIME94YkNPPkhEO2cxO3p8eWE9MCohWGZQSSlLPjtnRWYwRVFzaEd2UVJuIyZtI1pde19GVj9eTF9VYiNHIVlDSjRoaU1u'@;
put 'UjRaR3VjclUwI1Y7QGhIQ0BMVDt7MSQvPHNFdW9pcl52ZzkrJGskQ1oqVUxgdk97c2FNZld2UHpjOH1lc0ZKd3xEPVEjNUV+Sl55bFRUdkJESEBBb09bdVp4d1lYdkpqX3xackdOTyRPOXh3fUpTYkZdMmBXJFhuTGwjXmZ6Znp3R3RCV0QhOT9UU1RWR1V+NGldRCVvRSl7LlNuel0seyREKEZ+'@;
put 'JWc5OXFjYWMpe1soMDU+MTdGSUJme2hANCpxbU9WI3FtTnJ6K0N8RHcieCh6JDV6bDVhSyY1ZmZ2UiQ8Okg9TX5vZTIxdHBgYTB6JnFYYz5QdzZjM2xxPCJ2dVpqdSh9bzFCej1mcTUqbERfV05WMGMuTXZIXz9hSVVkfmU5JXsxRUIjRDdYYkExY2psbjBeRCZLYjM5WHgvYTRHfS5PSD58MlpZ'@;
put 'XU5YO153JiE9RV8hKmIqQiMiKDIxXUJLKltBdW9xZTEyJiVhUEJAV05WTjIoaixAemFZQFZWbklnWlRydF0mS1tZZ0JkPFlfWjk4Q3YrIVgsKFE8UmBNPz4ybHs+a0NAbWwpTFBHbEtkMkspPmB2eXk1TztgfDdCOUJ5T2RSanMsb2BKRXdwZTRwaygrRTl5RlhiXm4rLD8lK29uK1txa1ZSbVN6'@;
put 'JS5vO3ltcE0qWSRvNl5wTGRFYjdBNWNwVElVXnl3YTVJRExqMXdEdi47ejpMVj92bHhFWkg4UStPRFFYYiReUmI+TVBJTmxXJjp+I0ZXQW1eP2U/cy9IR3p2SnhAKigqTnR5bk15M0xEZGxyWE8+UT4hZ1F3K1ZAZiF4S0h1a1lgUW1Uem9aJWVqKmh+YmtWcXJ9MHA4aXB9ZDg7NSR0JUhkbW1E'@;
put 'PCVGTHl6dE8rYXl+Ri95eWBPekhKL1BtZjs3UE1iajIjWCloRDxjTCEybHMpTEZdXVk/SD5Fd1BOVX5Pbn05c0BpWDZjN318SWV7Omw2XWs+RlMiWDBzRTdJPEBMVE86W1hYRUJUUG9ZdkVzeEl0VncjcDI2KU0lW11vfmEzWV1oMGd4O010LiVmP0Becyh4STwsb14zPVVfamkscmZ6OGJ7SjFM'@;
put 'ckI+QmlIdSl5IjVjdjVKZlVkI1ZdKW1LUUFvZHxRS2s7N1pqSENiMCwsVHB6fngqS2AqIW8kd2hZUlsvcTxPTDdBISElbFppdjE+b3d8L3crd0FlW2FSZCVyIVg0SkkzVk5zTXAybSZNKFI+KEU2eSZsNk86Uj1BaXdWcmZQdChkWUpgL31HPiN+cUcybDVhW3swKXFwckVaRC5sSWxbKzcvTVZ9'@;
put 'NypjeDkpNEc7TzxhOTswOHQ7MU1STWBWMDs9aW06bDVLaERBJUJwdURGSFUyJUpwZ0hVRSVWcndYK30yYUNkfGo3cnU6dXE/MllIREUwZU4+SUVTZDdAPGNrRytjb1cxOURMIysrQ3tFS01acSU4IW4hREtddjppNVVUNXpreWtDV3JQeWhoRn49JV1yK3dgJXhKZGtpI2NSe3Bgfn1nKVJfdU1e'@;
put 'cDA5WyhJRC5MSDV4JDJ4RkNkZEIuVVouXzNNcVUofCp9Lk4mTWR8enJCcHxhZEVMYl1kQjl1QkwuKDltfH09W3J2bWBrV3d4XmBWUmwjOmNWLnBgNFNFOnJsdTRTei9RKmk/ImxDOF5KQVUjV1EzIWtbWWgvPmFJQGAmQyRUQ0VZNkRvV0VdKm8xcC4/SmY5QnA5Q204JmhVcUhFUjZfXkhvenRp'@;
put 'R0FKQFdgIUlbYjo5Jk5XbjwoVD1ab144YEFkaDR2Vm8/RXxKTltuaHJMW2ghbCFmNWVscjN6a2dAcnRjIiIzQU1gUnMiNzckankhZUN3TkQlOn1IW3R0cnRRYFB7bnpwMndgOGF3OV1pMWNqRDJUVGw0MUMlOyk+UGtyRkspZVpbM3NxNS8yJERAL2Z9Jn5+Qk9AbDVSbGJbZEIvUy9iTDJIJkhi'@;
put 'dkJLUEhaIUsua3BkJHo7MGtAQmM7ImVfL15ke25RNGVFJn5Ybk1QKyRvNkk0JW4wMS9xdz9edk11aHZ3QGddQHBtPVh8QEJtJiJVfDs0Vz9lRj5sNXVCK2x4TF5pdUo6VnRYbU4oXUtuOSYpeE5zc1BVYTx2fUVWO2xeYzE1dDROWTlFPkhlVW1vXVZTfWByJS9nTV8sPT17bndwYzZYQUc+fXtU'@;
put 'Q2dpJF9ddWUjTUkrfHlIUXlMSGhbc11SPkphTFg7Wn0sTE5YTGQuW2VVJUhmM0I5KUd7YFZ5R1BxfVBRcGV5SiZVaFpjPEtoPW0qPEwsdGhQU2dgNzkiN3dWVXV8dm9mWCtWcG5aXXdQSVUkWXs5R11paitMcHpRTHpPUEshe3dLXW0yLCksXz5EL0RvVis8WzcoY0VIT2xAcDl4YF9JcHJsRlYx'@;
put 'fHVMdShBLk18NEVidUNMW3BTWHg9UEtjJWZ4diNTblQ2K2EkSFkvIkF1YnFQa11GUlpVVWxIREVxJkZIOFVPcmN9WX5XP0pqOSR2Qi9ZZDooWDM+PiZ1ZTdHJD9aNSlNdW59VkVNYjYiKz9jV3IxMlFxbD44WiM5WWJFK1BvSmMzTTwvRSh+bXB6JURHRjY0On40PyE2R206M0wxZTp5WH0sQEBO'@;
put 'cX5tb1BXIzQoQ3JIa3E8SVFTUGNpWV9USEtjK0Y2VT1NLlY8eSVUe1t6LyNed1IlOURqUm5xQlJlM3BMRWsxcVNuWWhAXUlia1tTa188RWlUTndFWlImTT5CIyk1cFJqZTA2PFFFc18ubUhYJF9gYDFlUlh0JD90ekBPSiZSOjRqb1J0RVcpP3NQOmNweiVIdn5YYWdUT0laTWo/MGZyfGZKe3lq'@;
put 'QDtsfF43JEpPNkt2cVZLOmwlN10rVSFbZX0zNGdiMkc5Tzl+JSRhdmF3TjcoZ3cjSXdMLyhkKTAxaHgmTH5AUU82JSI0Z1A/bklJez4/aUxVW1g2eU97Q2ZQLko6d2YuayRYKzd9XjpbKT1lKFhkNUksU2QvPHRZLlJXXSovRVguZypuR2A3Q3dgV3ZDOnhwRnNVMkJMTCtKUC95N1hZYyxneFBt'@;
put 'USsvdFVPSWRrbiUwPih2Lzs2QjtbUkc2NE0oMiV4V1siZzZtLHpeZyptXmhHRj8hdnx2cGQ9ZE5WOEEzW0NhTk9UdjtgQ2dFXXFbbC5bNUw7dkJaVCRLTDQ7aUhqe1c6KGsxbHlmKmNZQ14mNU8iWkdpSDg2WkA5a0VtZWd6X3dLLkAjanQwbHxudio3WkdKe3tLN1MsbWEsSSV8R3U3WDw+YSph'@;
put 'TzgkOGwkOCU8NjkmaUNHa1khVDlfKUJmPWJtL1t8VH1Tcylkci5LI3huW3taRWdNfk5+YmRgJi4pQWVaViE7UEA8U2l0fCh3ZTVoI2RkPUQ9c1FsRVt9WDtYZSxxdHdsZF4mbzo3TC8hKCYzRVhqemw6SGM2Ri9IfkZZaUNtOXFQKkAvbltfTygkS1ImVGUzMkJJXT5SeFs4TV0lXm9LV2csWDQz'@;
put 'YCt7UVolOCpnSkFLaClPVTY6YSUhW3pfdClne0paSjBKMCR2Sylqem9FcVZUUn4jcm5CYXliQixESD91SC9afFt0O2NVdzY3JEJsSjF5IiRMXz5NVmc+VHRHazckclJEekIxTiI+d2NsVmpCIUQ+WVhSMCFVYUszcyteNEp8RDVMdEV5fiZqSCVUQ0hkal0yXUQiTH1SVUkpKEl2fGQiKDIpaW4q'@;
put 'b2EwSW54JUFvJXo/PnJ5UiFfWjdPd3tfPVE/OTdFL01hSkRrKnpmUVtXOTgsInF2JlQ7TzAoTnA8Rj8xa3V+Wn1hYXxKLzVJWlI3LmxIOGA5fEZPT3JSI0xMfCYyRFVLNzRJZmw5ZVB6NkJlTjkqRXo6dUd3XTZxZ0BYYiYqL3xDTC4rN0VqIy9RYEgsMl5ucENxQyFWRFIyXl9WJGA1eE0+dFYv'@;
put 'e1J3Ukc/fjw6aThgX0ZafTkwK29nISZdaDdsfCJsXyhEentwLjFZc1tpMU9qQHFsUXdwfDh8Im44eXxLYW5fMz95dnk0JTtgXy43TGNMW1IoRH5VVmJlV0J+JV4kflVCWU4xO2RZdiQ5XmpyZFY0dEQ2VEpBdDlZMnxwS1BdQyYmSy5xQm1GbUcpcEhjTjAjRV4kTFV8Zzg0LCxldUxjJlU0JXBI'@;
put 'YWZ2U0N8JHsoOmRRcDdKTmA8RmMyfHdyUUg/T1BUKzI0aVZnK3EwKyZxOXRGdnkrfStCRzY8V25rJGY0eWYhSHtiX3A7VUVTKUtIWURmbUt1dngyVUhhNHNZNzY8S1Q8RVFlOWhBOnNlNTUyPHxASX5xRkxXUjYpPk5iXSxpNUs8cHEyPzdRZlJtKSF+SEgzai5gNkM/Jk40KD91LFZmTys5S3to'@;
put 'NUU3RUxBZnhTPFYjbT8+M1lGYVJeK1lGRDFlV3FTSyZafGJKaHA0PSwuUFNkOGhFLmU7R29aU2ose3E+RjlfbE97XXxLOUlrIUszLmZXbmFAamU9I3BudVAvQ2szKi9PZnI5X0IucldxWC8uOzw4em9tKkxqIyxOQW5yUjdbNGhFfEtXZlNmZTdXQmRFR1E+S2VPUlo7TytLdzV8bzpBJTwzOnpX'@;
put 'eEVgY04xYHk5aGpncDRYOXpeVCtEQFZHUl0mRjhdRkVsLlROUmFxd3AkSl1jJnRRMUB+Pmg/IVZSPH5JbXdAR3dSMzEoJFkoYCtGJjNgXyUkInUhL28uRFlrQ2FNSmFCZz4iQD5yPHR7VDZ6IW5aZjQkc3xZSF5CSGJQJE5nQEMrd2RkbTgjZGteJTFaLFd5XW5+a2ZnJEB9P3pma3pAYSRbal5z'@;
put 'YWROXXU4SGxyfHtGOndldDY4YzhSVjs2W0d8bEl1T10vNzYiSmVMS0RaJT0+TTNEeX1LMm5rdDBsTzNAYDxAK1VYTjM8eSN7W3I9U3kyZTE7TnJne1E4bCt0QH1WaEk/TSpucVEoRCgieT1bPUQhXUVoPUFTQitKUCFqVSx1bjQ8RXYoIikzSkRKTEhzZG87QyIrR2ZQY0N7U1kuZU09QDRPfW0m'@;
put 'clV3XlN6VUtSKjpPKihyJl99TDpGbH5odzZvfGZ0VFtOXndgWGc1dDVdNzx1e0N0eW5OJGksT30pa3gsPXRzaGBMMHR4TUBHRl9zNHc6PSlwN1hyTC54YCtENVJiczF2e0AlWz18akUrRlVjK3RfeU54TTBgSHIqbig5YHcyMko2UHd4dik4QiR0TyZtaTxRIlR9Sy9+fWchP0dRUEtdLkIrdVhj'@;
put 'UHM/aDV1OXRCXTFQbygkWldAQ31DaD8pXTtKbDBhKVU/flUyeSZxWC85cyZkNjkrN059JG9PXk0jLDYjUTU+fCJsNisqaF5UeT8rPjsmfiRkIU5ZS1N5WEtvcV99aXBvMEdXIlJEaihLdGFpJEFHYlEkZCNwU19pNFBuTWEhb0tickhIa0ojRVVnP2guZmd6d1l+b0wzO1FjTzpLPClbWl5xPkZE'@;
put 'SnV+ZH1nTjBMNHZpdklaKkpuRX5lMjcxaUVPLDduXXBJLCosLz5jSlpibzhBdUdAPTkpWkt4I1t7RDojY3hUb28lfFRLMG50Lz0ra3xacFpSSFVjbDlHSHZVZUtHPzpuJDAwSE9BPEFeS2MuPnh1RG1ndFcpNSk0KV00bCQkKiM/Xjl3Q2t4cGY8P0xTQW1mKGlIOD1UYnNOQGJLITpXKlQ8UStu'@;
put 'WWpobkU9OXZKIz9xaEs4RU9QcnRyaTNTMVcqSjZHSHNjMmAwbXFiLHpUWC89blAvZkJtNjZjUkZtTmV0dSlzJmNdWz9NWHlUWlA5VDUhKWpXZ21EVzEkdGQvKTx+LEBLNHhoWT9TLDU4XV1UViU2PTBhOz0oK0EiKFslP3UuW3VlNn1qakVJOytVYXFEVitHajhBWmxIOCsjIl5DXnc9Z2Z3WEhp'@;
put 'TGRgWE5YUkxuJkNaXn54Im13dl1mS1s5OmpjMX1AViNUfDE6bFJFb0c5JTUzVGF6MEhUeEEkZHkkOyhUODFHeiVGfEV1NVszKktpNUZDVHtrOzlbU3cmTUUqdT5yZ1c/dWIsRmZGbDF3dE5GaVghfXp2ZmhDOWQ+azZlLy85eFFrK0ZeNTZRbVk8KUczeS5fNEl5RlJSLnUwRzF8NUM2bTE9Vjh0'@;
put 'MloobHE2YWUqJmorKmBbXmElbDx5bWtUK0pSd1Z5VT1ZX0t6WFlgPXkmP09rPHF0cSgrIVEmUSY3eXBaMGh5M1lwYEohK2tbJHteXWpJWntqNHlINDh9bTFDYS9tI2wydXskXzQ+eCp7ITNiYWw9ezd1dzd3OG91czZZVXthb2Z1bkMjWlg9d35VIyJHcWZYZSo+WClke3FQejIvQ3ZiJnZgfUgo'@;
put 'QmYyTD1wLj0xfVlDNE9JfmloYHoyMmZiZltnLFF2K09bXyUxTEQqJUlOTCpsRytiUHZNPFp+P2lEMUBOMTo9UTlhNXlvIz9gKWFeQyFJVVA9V2xuQjclK1kma0F3Wk5DL0ZySThJJEVmN0I0d2JUayZROHM5JTMheUU7Y1hhYHguUDQ7MVJ5Knx0VF9xcHh0MHQuJkllcWUhM15YfEg/OkUjLjBo'@;
put 'eSRMKVApRm9tLFR+LlFybmN8TVpRRzVvPy4wO3BQaSZYJn0oRH5TN1E4dVc5X25DQWMkc1l7TXd+T21uMjgkeDlKYCVoXzQrLll5OWsoY0ZtO3dmK1ReWUxWZz9AYG0rJSU9MnIxNW9Tdzp0JVUxeFhqQWt6QnwuSitKOjg3bSRKOzJERzhtLE1JcipbUVpgI2x2UyY0VD94PmtyX1JOd0o6REtI'@;
put 'ezNUVC9jSD5OYnkudl90VFd9fHhoSVgjOE9jcnIuWmM0KCF2RWxFI2oxMXA5QTY/X2JnPz0hQkViTD8jTTc+R09ZfDF4ajtIN2VHbyklbz5wNmZTXkpRPSpLcT9GU1NZREs7ey40dFh5UVNLTSR5c3wiWyR7SG5yJG5tXkBkLmAsZndId3J6MG45TyJyTzpeejY/NXlJci5DJXVkbyF4UGxOfCFH'@;
put 'bzFseUkxLz1EVUxlQEQ1Zm5VXjozOUE4YnFERzFnS1FeQGtTdS55YUBBZjFkT0J7cVshKGdJMU9RT0JYRFRKJkRvLGR4eSpSPXZ+T2w2I0dmMXBbc3gyQFBNV2I9d2ZnYkdIbEYvc111ZHlHWUlZMS55ZDRzTFgjNlk8aD1oai5QV0l+WztqKVhQc2pzJCFdVk94IyFmSXZiWWJFMVkhK0ZsSFo9'@;
put 'e0Y3bzwiLzFTVnEhOXw1Mlc7PjUuJWFESClNMU1MPSgiXn00fXV6dEldNGdLZz82U2ZWVzE/YGU4VkJIPChZflMrTCZfWn5gNUZMLFJNNCVefWA9T3FVUWoldnA0JCpDVl5gUjx8anBuIUxQeyJZbWRjdT42LjA2bH4zLz14dkAvMHE3RGYubHxlPTpIPU82bVl1RGVJeTVefWZpW1VRW2Q6SWFw'@;
put 'IjFAPFJCWC9nQnkhd3tRKyVNcis7KGFoNiVYZXNvbyhvYXh7dk59Vn1QN0s9eT96LzM8Wix7ITs3fiFvaEpYeSJRckpqLF9OOTwiYUl2MWhCNDxyIkdFNXUiRCp4Q3smK2gre114Zl9MT2dNKGpJQDRLJX1qdH0rODhAVU9aeEN9YyElaTVmXi9rXTVNfD0mYVhLK1smNlg8JjxaWE9HTXt9Xj1r'@;
put 'YVBsb11wSmNqcFd5UntaeCNvO1B6dEl6MElkM0Q0QTw7bTV7ZjpqOiE9R3xvYHZGaVorLCFqKSJDLjhWfU5CKWVvLHdzXl1gRFFPXVkpPCU8Sj47Ul1SVXRvJDNXN3Y1IihqWTJIIXg3TjhrUEVtT0twYFY+XmY6QXIqPUt4fi5NVjpLZ2JAZy53V1FodEleIVVlaUF4Ok9MLnQkUXhGUlckL3ds'@;
put 'JEBCaFtMUnlyPnlgQSYjSChRW3UmMSRYW01qOVZvVlQ1MVpXY2BOYltXWWQ2czdiWUBFTFVzSVNhQz57L34pKyt5bUY8cGlbT15CZyVtISE9KkRwIk45RFAxJCM4T0MsKjV0bHcvMCNYKWtjciguZiVsaV9fS2Z+Jl1WL09KdGJSVUY4fF0xSyZbYjNLPXd4Y01NMi96JDcsSE9ESTdrPF92dFJp'@;
put 'RHxkKHhrRi5RRExOdztiW1opfCI/fntGI09uVHFzfF82ZiNZfUxEKiNSdDBOTG1rZztmc0NXO14la11qV1gleiRVUElEU2gkKjFkP2dWPTdwL24idk1UaXZMezx9YHdmUVBfVi5bS0hda19tbkAlMDkyMDRlezklcldhMHhQZjxTKk42NTtVNDZEbEdlaix6fjlfbjA6dVM/ZSx4ai89SWReP3BY'@;
put 'YT4sL3Q+NStnT31OO1JDT3loJlM2dFBJRCMvR08sfnU7WUA/JSxTYWRtITlpM2IlJEVAMWBKMktfLGlFYzlFVG1uPDE7U3VjNkVlS2RMOkImLGVYM0IuSUFFS2VrUktqbis1OUx6UiQvbkxRPSMjaV8hYm5SZz12UWcrfGpROCM5TFo1b01GMTouXjdyS0J3Lik1U3tLSW0yRkd3JE1yKmhUNkp3'@;
put 'PTFkWUVbRSUzfT4mT2ZKKG5od11vUGkyUDpEK2VsKFN0IX4uPkJFZjN7QU5sVyYpVnhyTThSYGYrPyk0b2B8O2J9VjBDa31RXytTWzZ1X1ZjKitVIVd6cjE+bUk2dF80WU5WWiVvODRwXzdhMCp9P3deSV8ubER4NSpiTklvcShyJj8oMilLMCV7QUx1bV9MdkpaKyZrUFFkKU10Tl8+VltKVlBd'@;
put 'cixNaiFYeTtDUkNIfTc/IWt1I1l2TW86KTNTaVFlX0hDaT5dK2pnUmZFMlJacFRdUCVDdG5EX0BeRy9HLihyMkkjbmw1MyRkIjouODg6Q3p6VG1WRkJgTVNoPj5QPURdInRgOi5TPCVePE0vbyZiOXlqeysvRVJIJTJxWGJ9U3YwXWp0YCw/PV44QkJzZTBaTyVXfVtnMFNCLk8jJmt7UW1UR01u'@;
put 'OXBNOFRjcjB+IiI1PDUwYUYoI0MkTCgrdzs6V2NMWH0xYVNpOlpVKFA3bUowQHhJQ3l0NWpDbixAYnckRFNMeiEocGVUVnJHTSwhWjdbSGJffn1zYWY4V1M3YSIwLCZPMHp5Mi8kUmh7aVgjaitmN3Y8UH5aLnQqeX5daCxBenlVN3g5TGwkKzQ4akZOc2EhQ05MIV9XbCk8cyojXk5hXStBN1JX'@;
put 'I25sPDJ8ZmYiTys4MElKZHR4ZmRlVkVGQzBZa3k+Jj1KREVyRmt3NCFwTSRBMl1kMH1KSUh1PFVSV2lMVSZkVk43PEVNZUBneyszVExdZilmNiJYKiQyV3g2ViNxZyRIQ0glJjBkZm9MZXFjQUBSeUAmbXVGRSF8QXcuWEd7JHxwT0F7RzxZNHJZKUhkIjxALjI0Qk4xK0V6NyVBQ1tWXl9WIWZ3'@;
put 'dnk6cihkaW82Tzw4ZCojTz9mXVM8K3g/PFZESDdlXU9CKkBvXXh6Vys0ZmNQR1Y4RCVMS1FaUjl+QkpeY3tiZTxpKVskb1AwJHpYSHd6cChGS1lmWmM1VHQ3Q2M+OEM9WjxNUlRhS0F5X2Bab0FbUXxSY15CaFpuejJBckpnSV57QWtGW1JPdCtIOmc4UUJAOiNrMkcweGFkfU9+WlJfRUNNQjlV'@;
put 'VjcpUk5eLyJgaiFJQTtrckc1a1pqelcvdnJPKDIyMHkwWldSP2lWajBYfGdZdyE5O3U0YShHUm5yWkc6Qm05c1ckUnJlN3t4XXFVL2BpP11nK2IhdjJzIkNyenhjdEJKdkYuTF5+K3QqYEJKNUlzaTY7KFEsNHNSQk86R2V+KVVXI2hnbVVxLCtncGd4U3J4djZablV3elEyXzZmb2t1aXhdcXBi'@;
put 'fklzSEg5SV9QSmZSJFs7cnFOYlVgWHVCeXhXRXlEI1h0byx3ZGg/I09JSSgpMWFicGdwL3czWShGfU12OmAxQVQwPUF2aHQzPXVJLEQiRH50ZiFzWjJNbShycHoifiVVRndhPUxVNyRSMUlVLkBEQlJMeV82VGwoRCQyUnR8ZyErYSRBKSRbYF00YH5Wc1d3NVowVDMoemhuN3g+YiIuODhuTl9O'@;
put 'YTh3UlduJVdJb0xqK3JYNjgmSll4RSx1aVQ/Zzh0eSFUVnh+WWovU3ltKEMmJGckNihCbzQ3dStWOT9IXzlNWCRxcytFd343fkZ7b3F1aTpYck93L0Z8Y0paK3JsNUQzXlR+TGh3TmU8ZSlpK2FhTXN8QlBxYU1EJWlRZWp3ckhJIkFqMiV4N0dbfSRMdTFmNEgxIm56dlcmdlVsSTNTP2RPdFNb'@;
put 'OXRmXSsmQUpiTTYzYzBXWEhgPCVJT0pfY3w6IVpmcC9nfk1xaHJiVWE8MHJ5WmgvJCxkPz5QNWE7KT5lN1hINU0+LGFQblRqSUI9Y1hFSywhWkhUNywraFBGQVA4X0h7dzpdfn1ZPldlSH5bXVl8QT1KZjlVRlgram5MYn1ea04oP1cvSVZNdXZSXktMaCF5fWlIaGp3alB1TnRhemp1Tz0uWGE4'@;
put 'fnRidHZNWEVRIVlfUFUleEhNPSsheSxQeEVOdTxmbjtBNDc5LlVBck4vQnc4Q1tfWjJWLnNLeFMpQ31ndkVURDZ0WmclTiFZQ2djMX5hdVo4NVZCQ3hdI3M0dUN6ailVezFqbjE3W15XXkZ5TEEpLlhtKXxrenkjYCl9ZjdrdlF7X1EyWWQudXNffnI6aXNYUHtefjVoP0hReER5QVl6SHBRX0o6'@;
put 'VDM9RkljNm9aIURzaH4mVy47YkghSSMqcy5bXUp4ST4pPzRbPU1DLFc9TEdXZm8/S3peRVhfOVc9U2dlMTNhL1YsMkx8RC4hPTpgPGc9VFZCND1oQkM9NnRHfXRAP0hsdWpBbmFvJEslZCZ7XkUrKnhlQVE1PFp1SDtCJVtPZmVJXnRPVUY1WklAdHhodWNmPyNzQzE+NzF3OS9tNktKbWVINHZL'@;
put 'MzVNUWQrUVshXipYYFpAek1Db3I/JCwwcD0mJVEoVnlGdSs3Kzk4eTt8b1EzKF52ejk7VXUzVSRtUyMzNlhwSnAvSzJ9QEBsRXFCaVhGSjh8UUB3RE4qR0kxUzpoMUs9WHk5YDEzLnp3MyM9eEUqbGxrUFhnPzwvdllKbHZaQDZIUHspUCh1fVkmOCJ9VEFnY2w8RmI1blgsYUJdMkdZWm82UEtk'@;
put 'cFV6ZzUoJE9rWWRDNHc3cElUXXUjfGVkPj96UWB4WHV5fm9mandla3VuXz5CbjNrcUdhQT8sSTVafncxcnNkelM6aHBfKzd2cT5HST5eKT40eVBGWj89dXNJeCkzOXBVcHFEdTdJT35oMEA5eUJ2WV83QnJ0T0VJU2k9bkBzUUNxKkE1JlNfK3lMbTZdYzpoejc+cjVlWV0lTCFyPV1TSShURlAo'@;
put 'TiUiVmVWUSxQQFE3WTxfV1VxJnhmKS89eGc0Tk5HTiwlRyFFPy5lPC94PXpmZyZaemNUU3pnIjkxdzhhTmcqMUdtRnNMdW88OkllZnIhP1lUMjlAe10yX2FjN1EueSptYV8uPD12Zi9ZeTtZZ1lsa2VMSWQ1bWcoSkw3PmJAfEU+akIqZjtRTWVmU2ZMLEJ3fjx9VUQ2aHFILj1pT1VfNz1+RWJ1'@;
put 'IWVJc199KWxmKElodlklMD4yfkIqW2xFQS89Q1hCSXhTKEpHWyMsX2Y6aiI4Jk8/U3olNUkmRjVUO312JWxXJENJYF0jeUBGNih4ZDJfeVJ9IkpOTmdaIkhbaSQ0dEV3K3VSKSk2Sk9iKEUvWGU3KW9nb314VVFRcitdeCpfUHlpSXFIZGk9cE1+NFl2SiF3K0ZiRVJ7eEo7O21wTFBSYHcyeFVp'@;
put 'cWByXjgsZE0rPVN4UlQrNFk6YDY0JiEkXiNrT0x7U3dQYWooemIxUDAzN1RpXUh+aW5+QisqYUAvKSNzOWt+Y3JnNVJmclpZaFg7cnkmKCFEYkcoKW05IUA3Z3FifHNdajI6XSMrNmdRZGJSeX1qUVtlYGl5UXdnZWFhfV5aSURFXTMvPUoibU0iSnpVSkxRb0NdSVR1LihRJkthWGY3enZhRi5A'@;
put 'fnskc3dqO3QwanxTRT1DIWExZn1xQWFKX3pxP3VOeWgrODpkV2lKJDA9P2VDXkZ6WUddKmVAdFhtdCNxQ0lELiUkZXkyO248cnpTXnNZMlssRTwsU2xBJW0yO3Q1IS5QfUh6aHNpVS5kMSY5WDhMNmsxUHI2MjF3bUYxUTB0SDUzQU9gRiNSfEBkJk5pMj87cnxIVj5IfC50WDprYSU2eUpdcylA'@;
put 'VyN3ZlZLaGxneiJgOipITWdubCNYNUFHWDY6Uj4iMTw+STlsZUFAa2xwTThod2AlZlprJSlha15kfFBbWjhbblFTdkd+ZHNzKXxvMjVEdj1RKlFMcVEwS1syZi4pJFY5cWw3fmVRdFNRO3JCY2ZePjpNbFBWN1FCaW09PGE1cCw3NF4rNFlZRHsrczMjPjBWLHhYOUkre0QzXWVOQUc+ck5qLnpP'@;
put 'X2ZodHl1Jkc+fVo6JWUzODpbSnBNSGUsfF9Obnx8NFEoSnI2IVoka2RaQGRJPnRrWltDNTddMG9oT0I0OU0pbVVgeDdXJDNAQEwoQWorJHsmaFppJSZLbldVRkUqcm8wMlVRcE1ycnRkUTo4N05Sdjx5eEI9eEVkTUZobE46cE4rSVVmI2lpS1RzOXJHZlBlP0ltTWNUT20wMz97fVZESCRnJEY/'@;
put 'NjZzYF84Wy4yZyJrW1slJlFMZTs8PFZNcDMmQUlLNzI2UFE7Vi9pciUmMl9ldTRTNXwieUIsWXU3LmROIlJpWkwubnZmdHUhemF+VjBXZWk1YmtDa2dTaTk0dF5bO2NnKzxpZll6ZHR+MylbJjwuVDJLdTNOUnZ0Nm5RVXBZMzQkSyJZMT1oPG5fa2U8SzVwbD5fb1hGY1h1JGpMNkI3Kl0mYUxy'@;
put 'MFErZjQ/THZgMnUvUXxjTG4rSXlGT11vQm1scVhIT2AuO1BbInB+O25FQH5ac35fV1goRnIqXzw7RnUpfktdcTIrNyVLUkhpIiIsTn59X0lqRFlgMCYmdSx8dl8mSzh6OHVjOFs2UVNARnVAKipJWlMue2I2VDVYdFkvPVhZWG5zXzA5X2FNaUBVMW0wNFgrNnRiVzRBelcsblk7RmtgMmJUWyl1'@;
put 'eDZYRU1APTJZMVo/cXsoZixYLD1mQ0A6Rk0wY05RfD5rcERHN1ZGcVd1WWgybkkmclFlSkZ5ZkdIRTczN30jVEZJbkcyfnxrPzw1K1dCWThBR0REfChDe0w7KHdFbj1DdEpeWkMxeGlEbzxEQnMualllO3pKc3pOYC4/SDo/by5tWTo+aGlbeSs2MF4hNF8mXU5XQ1pJTktGSVpnXzwqRl1gZzEl'@;
put 'dGdDaSh2Z25LSXt1JXdddj9WeHkoYEJjKnBrI2FpRDw4ZUtAMXJoWyp2VzNsUno5KWJGWTNjO0JDKStXNj9ITldDSlJ4NHwmRU9ZdXVqfnIzIlloQD1sdWtUSHJyYT5ReEQ3L0xxNjdeT11wbi5JYm4yJnJwLmIlemM2Xy8wfm83QHtGN2g/KFtYW2pnK219bCZ7JkxFZkAxaVljUG0hQ3VDMzRh'@;
put 'TD9zOyNuZDFRV3ZiJWI5VnA6IytzVlM7e1RgSktHKkdWUWZoTT9CKzxNRnU4ZEA0L1lJZHElY2A2eT1RNUtsfTJCfDVkfkJVUHVBWUk6NDhJNlcxT25Ha2hbb0BNKUN0d11FMig1YX5GdyJLM2o3JX1NTTxxZDw1LCFWMWI2VyxgYEsoPDk0WyhONGh6dXEodEt1SGVge0YpeS8oUUI7Qi9bfCVn'@;
put 'Uz41aXlBMUlpcyxWJiglSXQsOD9dKU1lRW48bG53RjsvLl8jOXorSyJ2KUojKCN2aHQvbkIvJDg5TUdVSHMscDVFXzU0fCg5a05dPk11KnF2Nm9DKFBbZX0jUUp6WzldVCZXMHE1UzAocz5dZ3RYX15TQDchR3NjW3lgLC9KaFtsRGZnT3gpTHpiaXFKQSEvRkgyJWQweUdHZ1AiNi8ydF9ERG07'@;
put 'U1RZNSoxN01aMT5GRF9kZ0JuLGNCQ1NlRUI/eDpJR0w4PUQye3d6NiM9e01yc3BkbGAzY1YqOVk+bWBAajYqTjFAX0N6N1Y9VmR4RmJLSD98PGxXUkV9dkhHM2RJTlNNJjw7TV59RVE6MmNUa3hfYlk9Jnc0PyZdRD5ZMjJVNWkmc3tRKHJ4SEk7LyxLNCV4OENeRzlxfTdpTSJHInIvUHciPXxb'@;
put 'aERlRzVAQEY0MUVselI0LE54InI8Im1zWlgwIyJtJmF6elJ6IXJfU3YzZFV7M1shMTVVTTIwWUJHbzNZY35VY3hQcF5GPUIzeFlsQEJNbXFifF5VTVV7eExWSWQ3YU9Dc3t9dT0oa1JRInRtcktsZW5bd05VIldbZEJURzBdMEB9PHY+d1ciQ043V0tuWl96OTgkRXU7MCFZMHBQQ2FrKn5jLENH'@;
put 'SmNNeHplay5UWTl5YiV1NlleU09TakkoNmsje0FqVTdWL25WcilGODlbSVtFNGhUW2R3NkJ1MGNHQlBQL0QicXEvVCY5ej5TLEomJUZCcHR4JSNsd0I2NyRnJnF7RG0oPTVWUSpxXX03YW10UTohb00wSXd9Kz50Uz1HKFZ5OWhKclNIUF4ha21aR2Q/IyF7K01FanhYa3BFbTFVbHU+LFlbZilf'@;
put 'YWs3JWU1eGIlZU8oaUNkPEd0TCY4S1BNZEJlNGlkfGp1LkpLe2ZeRCNXYkthUUEoSV0+KF46SXlpaEx0OSpaMkQoUyVEey9PJkQjJVozX2dtYjA8LyM2JERMb1h3Mm5qTXt5WF9OIWJIaDM9NHAjKk14QiwjckltNkZXbWs8ZDF8ZVRsaEp9eHI3fSJ8Mn4ifF5rW1NWWEpENExici9tNj0sX01E'@;
put 'alpqckFEN2ZuencibGdaWUlJZUcydio1QFheTiprZEtiVjglYi41fWp8NF19RExRbVhkSzRlNzJXfHxPT1R9OUVNOHAzJWdqITs9eUREI2BkQGYlLCpgUEUrISFyZEtbRUQ3JVZVWmYjeEk4SmUqWnkhU01PZypxeH1oc0IoOS9XN0BiQ31wfl8yZngsclZVbCwwTTdCY2B8PGw2TSElfDxhb19v'@;
put 'bHNoVyV4MWcoUHgkdT9BSUhnNWxeclFLdDNtMn5Adz5leXs3ZlVQJXZQWXppPyRFZmUhfTlwPSombDFZKD1UYiFNaGZbKE4ldlh7dColfXUqU1YvOjxdP2peRCFZN2gwUzcyNXxKIS8qcjdZMGEucykme0RFfnw6QDlvX00rdyxtdURlfD1jWnI0NFFROEg2VlhiIk14dns5Pz5oakY1ZGdhQm0k'@;
put 'KyV1VTV1eUZ6aWRySz0wbWIkWVBqMkBeSER7dDkuOW9HVHlHWk42VlYlYyRTQnBic1RrY1VNMENERHREb104Nj1VRVsxXn5rKmc/WWtCb3h5RmQ3P2dlJHJaRlpbNXRkWFVqKjF1QFUhWTUuaThpXiIuO1pPUDJeaGtbdC81eU9QRFdNLixzaXdNZlNQMkt5M2FacGB0dGFUcitEOCNLS3l4UXtp'@;
put 'fUJjWTZVdHZKP2ldaUM5YGMpNENZbHRVYjdSKEVqWDtVKERFOCJKblNnTyMqK25gKT18YH1UVjIwQV0+W19qWHdvU2Z4dDxvcDljSixlOzMrU0okemRtXXd6TjExXVBHWVdCdSNxcTlpKTIjaiZLNUhPYVheNzF8LHIqfWN3aUdkTG48JSohImowN1JGK0JJWklgX2FSTFJMVi5WZSk/Ql06eGx0'@;
put 'PnR8KStrcE8oLilMcXV5ZXAhX2YwVGIyNDk0MiQpL3B6PjpLLy98PUIqeUVDcEpyPzdBcyt2eXtvczF5SF4qOCJMekZtPDhHVndeTixObUkzQkNWMCElRHxtI3x6bnI9PlRpTjdUU00uclgjUkxCfFZLKi5yc0lzYStlazckNCxQfjB5IStYUmVVMjRuP1UkSFlsXSlfbGYzeWMoWkkkPkZySS81'@;
put 'aj17UiFuNThKVWR3byRCQWtTZF0iWi8ucCZLQF5DaVEyWXgvRmFJVHcuLHNGVkYjd2pSMlFBQGgzejhaVH1yNXdWdCRqVykkSWNOU2FFP1VpcmU/PlkhRGk3dU9FREFMc1BEInszdkNMKjEoSD1Lakd4LzJpaUJoNFgjUzBnaCNlamBbe0hTKWJVV1l5cGMwXVFfU2lTNHJbLGIzWi5vQXZtZTtV'@;
put 'XTwzP3QsbjhmekdeWCZXVUBzfEI9OCJ0ZzVKZSE0WDZuPyp2eSEweTckNnZkaH1eKUNVYE9+eWA8TSlNcywrdjlteEl2KGFFcj9ZbGhhYnBROTtyV1NvaWs1Q1hMaTxKKnZNbCJ7aU5tQkZdKjFHUzRHYXFZPjdrP3Y4RDZuODB4OVdSXUB6PG85Knlxb2o2K0Bfd0NDeVchT21POF02O0UqZlte'@;
put 'Rkw/bDlHREZjZDYhbzNzWjBVZHEoSjxnVFBie29pW1NXY3wobj1bdzYvWEk8JWNXJGI4P248cHBNN0pbZjBdL1ZTJmAwX10jIkleM2JzRSwvM0MuIXZsfG58cWVTbVlyfU44dUZDZUosJnteQClDPEk5KWdFfDJfYSh9SmhMSys4d1c9KCNnPChuRUM4SVpnU0dsZWVDU1FDKyNGRzkzYGg8azwv'@;
put 'V1dYW3hCN3hWek9GPU56XTJLcHJabiRQeT5paUU4VDspejBTbm1oQSYjP0ErbisoOHYvQF5UQUs1aSohUEA4OkZyRmoqIXYkMn13cl44JnA5L3NlIjNYQm9sUkhDTGExXkdZajVLLyRvaC90e05icn58JFthL3omVX1QNiFTamF4Tkh8NCNvSXZ2YGhSUmhpNkMsU3h4WlJPdis0aUJrI0wvMENb'@;
put 'WFJ2ay9TZlZESD9EQ21oOkYiMDBFS04idjdrVkpPUm4rMkVhRi8uYFZBSl9DUlhAVmp+UWVheiI8K1heQzFDQW1KaT1CL0l0O0BoXXhUITdVZEtXSjh3YS9lYU5SalB2biUpPzNpVkdxUFdQSnZHcU8uX3wvZDlnODIxMCE+aXFmXStUUWhpZXNlUzJZMXVENSRfX2BUYFtvNXhNeUNLJGZDTHJI'@;
put 'VHFwX1hKOExCVXUxVzlYXnJHOWQ6ZWxGMHdLWntFcD19TF5NRU1sL2RwQFJeLnEsVTcwKHAxWTBEZDxpNklZcUZbRSk8YEpqJUk9aVEwJCk0dXpLLHxySHlGLCtON0xQMTQiLyIkVi4iMkMlZHpBSklCMjRsZXBrSypMUCUwfFh5alolSjhLaSVwbioyeEg1fE98Q3N0a2NAQnFvPFJORCFkSz1W'@;
put 'YCNSe1BfZHM6WGRvJmRFZl0zaTBjZkVzImEuNHM9Y313LE86ZW5SeDFSLnlKLnVbM3lEJWs8TG4vNzlHVF52Ny9tZWcqK2FoKkJyU3NiWWlaNGRQbTFlU3QvJFM+PEwqfXMwN2dXPF5XPnt1cCtdRWY/JkAyOyomUU47W2VCSGA3KDlGQlJsKi5YLilDKS9uV2s7SCQ6OV93VzYpOCkhI3h+MHVH'@;
put 'SHNQOVsxRzlAZmJmVVVJMVtNYFEyTHVARjVKUHdRR0NQIWtPSExVQl1gbCt3UXB0ViRZYVE1WG5lWyFJI2AkOzkhL092R1chNXRbVDFreldeRFoqWSZMREhIWzh4Y2dHWERSdH15Nks7QlpNPyNKflBtayFMJHdHcHpqUENFZ0hPaUxYXnc5aUJ2S1lhZ2RbciZqIlRYXy85aUUhJWVAM1RATXNe'@;
put 'Xn05eHFBNXVhNmRlSDljVGZuek97Q2FEbU0ubTtiakheSDVmT0l4Yjo8QmJRXl9FSU5Dd1g3bE92OWlVaE5ebz03YH0kbmp+Z31dLlouRj1pTlJjRU92dmlBSUtET3ZnO1F3MF4hPFlaI2Y8XjtOME9II1c+TSQqYGs3Onl4WFUsUGRnSFkzNFVpWkI2M2pCXXYmSUglOFReezpCRzdvKTZEOXlg'@;
put 'Kj1wMFdXSzYxUVI8dSVuTn53JW8rQU9sQ019NjFRNyM1UWlrXnVYRnF+UV4/ISVzIzsjJjFRU31PNSFkKGdhSn42em0lKT14SHo7LFYwQFtVT2NOJi95c2E6Tmx2KF45MCFHRkU6XVh3cFg6NGE0WEUyMlF7TzJFfDBLPXFJXiMlWHNWVEkmanJ6N3gqPF0/SWdobUAwbyphQSZhR2xGKlN0S0o/'@;
put 'KSVVOFBraHNWYEB7dSJSJXZuZG15WCtDVSNTQjpSU2o8OmF8Rm1icnRtLDReSXcjaTY/S005bGEhdTJYQF8kWXgmNVBATHlkK055P302MyxOe3BafllJcn1MKzw8eExhLi9dU3YhUyg9enY9eDkvZyYxLzRpbDtyZ3VxNEdoTVZ5ZGdyZUQoenZBQzEoIi9bZ1sjNTx3dDszVDUhcXpCfT4vTmJH'@;
put 'VlVBMFNpRj8lWkVaeDdHOiEvZm1kOUFwTj43aDxwIUtnQzN2dWwsT0thWUZ9I2E0WU42VWxGb31sRUtiP2lPelFHUikmdzE8KklJYmJJIzxxSXRKNUlURXl7ZnJsMUhefndeWWBHXXoqVCleb21hWkAlRE1FK2hla2BhWXJqKzU2Llc2TDNdbGQpXVs/VEdMMHpxYXJ3V2xiK2tlRDgjMW18eEZJ'@;
put 'XmFGWCpkXkdla0tqb0hKbDo+PHM4dzY3VTRqPl81Zks/dTJkIW89Sip1cXN4XjlEYDhtRSF4ZXFCRXxCe103OU9INFZVWWhtVmBAIzNSSiVaQjsjNzlVJDc2Lnx1Z01aclpaJEAuX1taPnw+U29abjpwbT1FQiF4LyVgPT4+OEwsZWUzKmVlOCF9T2IsPFtuQ2dEM01LenhDJWZNYWRhaS82ZmNx'@;
put 'Xm17bXxraXk4QD1hUUQwfDY8ZGlvMFM1Ji9Wcz0sKDsxTD4zLzgqKTs6IjhNTz12LDIjNDkhJlFzOmFlfXpmWV9LVFJ9bkp6L2F3Yj4vVTFWPSxlZWF2WzRwSlB5akk8M24wMC8uOVd0QGU7T1dMbk8xLzQ2cyllbEdaLHFQfiwpWlo8Qm1YPmtCSiEhMVd8IihmIWY3dTl6fWpsN05NN3lUYVlk'@;
put 'V0gyPXRLL0NzZT0+YGVGO155M2BmL2tBKHwxRGtxfktvYnZdInssNDlHWXkoRltKOVdeUWcwfGV0PXhBR2w8WS4kMzdlQDZEOyojJjtfaitnNFFibGlKdUgoY0lhOVQvXktrIy5ab2tUYVFiKWJ8dmpzPENSbFdTPTIqKiZBLkFrfiNLXmtHK0VBVSo4X3chNCxGckpjQ0FLTUY0OzBFTDxBail3'@;
put 'blMhdT0kZkN2TTk0X2A9WDVMOTVSfUouUTFvb2E+S18wQ2ZPX3FsTyFZXXZNPy5XSHUlV0NmN1g0cUdrN2EkUDtZNWghbGhaK2FCbj8zIU85eDphbmBKSUtvZVZpZHpITGBROGpiIXdaWVNbVmR6L0EvIjlaNX1oVHk6YVN5VkdDd0leW3J3ISxrfVM+byRHPHV7TVRkUlRvb3AyQWl+MF9xIjRP'@;
put 'eHVGLmZ0bHRHXVdnKS42fURaYyFPNWNiSWRLQ1JrMV9qNSJAXn1dc1FdQ28qJTFDaFosQHtlSyZQYGpnKHBJTylpWS85fE5DOiYuZ1Jtd1c9ZCpqOzx6cW9DYmNTXjhiJFc9Z11+bmNUcjlyd2VgNT9fJDhucWdfdHhYSERGdUY8dUtIZGNZSyFAOG9QRk0rKTVbaS87LGNJdTh+a1VGYSV8d3VM'@;
put 'NiMhTCRHQ3dQPjFKViV7MUZvbSRhKSN6eHVVR2lXRS5MeVsrTjR8TiJiezxoJUVwLjRCUVRpZVA7ISolLHw2LmRnYyo+STM/PkcrY3h4LywmPyZSNGdrP2pTajwiL0Q+RltXOktwTjN4JUdsIVp0IzorLFI8TXc9L15OLDYjK3BubzdKUjo+c04oYHtAeUVvQj5mYUV2YCxCSl01KXBCJkExeV5K'@;
put 'LCJ7XW15MWExVj1CW3MhLiwlMUIuOUlzT1l4UXpFbykzRiErK2NpOmhgP05IRXdGPFVuNDs5eD99fVtGfC5RKUx9ekRkKylebmh4Qi4qUik9ekoxUmJUXmw1UCgkPjJMWDMrIntYKTxuJSlYY2QxdF1wNykrLCtzNHBLNjFqSStCI3F0ejshM09qWV9WPUxMKX1ZTG5lVmlkcEpgckA0Zy5WPW8k'@;
put 'Ky9WPWM6QndjfCRORmZjdmMpNDBgO3k1MGNHancjNnxUQnZeNy5DTEpXfjwjOG1MeHdBOWdsIkZGIy5LfHlzbTFmTzUwR1dtP3xucmYuPSwpeiMxaERHd1k+aDs8N05FX0szJFdRYnhfR2h6ez8rXnpfSExdPE5AYng6M1RKQy98R0NHPWI+Ol9pRU1sbE5NblNyVXQpKkhNYUdOK2Z2WEs1JlFn'@;
put 'dyQ3VmplMjFFcDB3bCNYZVI4YVBoUnp2T1V9UXcobT1yM2MoQDVWa2FRSCxTUk9GU2BZSlJiN2oiV3hROFdZMXU5a3Z1PWAlNVZOYkxZWVM8KiI9NUc6Q1gxJnZXL11OPmxqWDJ7dH4zN2dVR1olU2lzdUMuUyE0SXdNUHE0eGtuPFp+MnlLKGdgeFlZWXVqLyRVc2t0dV1pWj8+R1olRCsiMWZN'@;
put 'S25ybjVzLjU1WkMlYXhQR1BgSnpleUkkZE1zUWJqTmZbV0Y8JmAvZyoxeF1BRmVHfHslQGBtRSZnNVhmQ2ZndlE8KHo3L1cqYFAlQzlGeV1WWF1DN0BIZkI8NEl1Rmwxb3AkMT98IntQRW0sfCt6VF9PbVNpWXA1OGtiWUZ+JUBnNXVSUkk3ODE0Py59OUErYCpOSD1hRFQ/Xzk2RjNzU3VaYSxa'@;
put 'Xj44SDBjSS5ma3tsRVR9dHBKczd6Q0xuUipeR2Y8U3M9fFBdYGlmKEB6N1YhVUJzP2xwcl4+ZkBielBjcjMhNClBLzlvWlZMRGVud1hnIlRIYmgvRjw5LiREUG5MKF8zOGYkVUJhbFkxdGlhKHpJWkt2SEdTUkklME5GOUQ8OiZgfStPIkY8IywueXkkdmYkdSFIVjZ3UEY/X218PjRSWDpnMkl4'@;
put 'WlFgcmhQJlZfJFlVaGZJT2sxPGpYQlcpanU7MzJkbWllUyZgdmVEYk0yX1I/Sm0qZ3dIKzpuQyJqWHYxYFEobFY9dnl4TFNwP09+Kj8rQz9gNWB2ZEtGeiZRTUspZEouPys8W0ViTltvQF5vZ0AjKDRZJno7Knt7TTl7dHdVQGE4dS5uNWFOU1czKEgkTyI3V09jXmhpJnBMblReVWpAYCltdWFr'@;
put 'WiNPNFFDO3tlR1tvQGsjb1pSZGtaJERTUThmUC5UYGFJMS9HaTppY1MkMVR0JjcoVDJCSHlrI3dvJi89Y1ZEbFBfUDZnIzp7RzBiN1JVMFZZfSUhSiovc3ZETVl6cTdeJUQ6ZixrMEp2TjgyTGF4dD9NNkhbblooWWdkfXlsWjJgNTJHTDE7ZFdoZCJ0K090YyRPJW5tPHhHMUhXWE85fChKJnhy'@;
put 'Z3kxOEI3cXdOfVtYQyNpNjk5eExlUyY/fVkyKHNARlpaS093OjZCK21hXWMiNFJaZFh1U0VKQlAkWT17VjUyeikvPi9Pe1gmLGhCNjReSkY9ZndeIm1CWmVAQ3lYPEs2ZWIla011bUVyWjh2ImBednFIUylnRD1hKXUuNWcpNmUxdDJlJFtWQDBYWWBscTdlalZLZWZ2dVhlO0VpKzUyR3FLOG0k'@;
put 'P3kxLncqejQvLytWQG4+PklPYWVQUFRDaUJyN1U9S1koWV5YWjhkOmV5PUtzYDFMO0g6Zlh8cXtCQXBHW3xbM05QPEpRdFMuemAwSHl5MWQxbislbGA2ekZ6UEB8Xm4+Ij5TSVI5KT1JPCNXSj9aQ2pETnwvOyh3b31je2RNSyFQeG8mIT9QNjU6b099bSowRGU/aVpULzA3UztVbiJERTZKXz9D'@;
put 'IjBtVHx7dmNsalV4SkBITVNRIjNXSCp8bC9NdzAsW1NvTj9nN2hOIXJnW3xYaHg3XSlLNlJzUkpXLC9ETWFYWTJCa1dfYlNZSXhbak00VHY9TT8+MVRAZExZRys6I0hrbEYrcno1dngxdFcvZlclcldHJUI8VHU4cSZaJXdRYEE6Wy85eyFSM3FvWlIjQjBFWWZ5QiYjakVoaj9GYmZxRW5sW3lr'@;
put 'LGpIK3c6MWYyJWQhT1lRWzJYeG4pL1VJZCFvR1tFaj1bYkwjdWFCeU1yJTpHRFIlRiNWd0lsSU14PS9HbVB3KStCUDJkcDAhQ2l9QWRXSnBXJTRHJEUwPldxaSl3Omhgd1ZHfktLZ0NIQTxLfG1wS056Tz0qY2l4PE1QXkxmL09TY3F1QlhiT0M5WWBEMm12NlUuOzVEXiwlR3YkZmd0QSxfUEU/'@;
put 'RmRaVmsrLkl4Umdvdm5aanJmYWk3RHFIQmZLUlY/SyEmfTUhM1Z0W31SLnhpN3d4SjxjVWdLbVBZIS9HaV5sJlsoXy9EPixxTTJnO2NdP0pzIUdhPHhgcXpPWWY+LiZmLjl5UWlYNSojLDMvbGwrMUs6fT89b0M3InB2Iz02LnpDUUBGT2F9PW4lLFVkM1MrPyl8KUg/amRvJjxXfDxWMykrIXgx'@;
put 'OztbRlUjOVRjezg4W1h0SUYuR11gajxYPV1yW09xSik5TUwoO3BDUTNCLmEvXV0pPV1TMz0uUX4sMUJGXXJbdT1yX1ltPEAhNkVAd08/QlkuPStYMjB5MVN+Lz1CWS55JTttWFpDen43ckg4PFUlNTVYODIvPm1FRk5TR15CfSI7QW99YEZHJmZqZip4b2hIWVVrQkgxViJqPG0kU2A/QGspJiJF'@;
put 'IVN+XzJHSUV9bk5UST97Py9xa0p9bnAjeyxBa1dWeXdzN3phWWE/bDhnS1V6LCwve1M4N2I3SVo9VW41YlltOHtwM20wY3hdciNVOHU/XmV7RlRPcmwraDRoZi5JbDJIaDQoTUYxOkAwZ3JgUk13bjk9UXlwMDJqXTwzVEhZKiUyZlNpVT13IT5tbXY3SjJNNCFQV3t8UDxCYGFPI2RFd3RwbV1q'@;
put 'ZEEye0VGamppU1U+MUc4dyg9U3FmdUo/d1lkVClHLnNYVClvYTBKTzN3UEAwV3Z3cnZQKnwyYzxOPGw/QENOXV5NKDpKP2ZVWlc3KldoRiVjTi42dSplJEQ1O0EqfGBlMXdLZ3xRIU9KOH1EU0wucjI5X1ooMDYwKzZMaGd3XTh+JD8xRjdHTWMidDh6KS94TXYmKXdJRy4vN3ZaeU0/USZyc2N9'@;
put 'TXEzakh0b15AZ2htZFNHOEZjZjBfe2RSL0J+OFFhbXkjOHRCd2hJfjtHfUdmSCNvW0NWKGdYPF4/NFROXWFtWD54PE88Xl5hN0gkY0leaUZge2NebXs4PEtJfFciPndyQEs9aiZfWyUuSy9qcGNIfigwRHo6WWdPSHxyWTB5IUs5VFh5Ojo1PkxZbi40QjxKWkRgQENyU3ZFIWpPNGRVM1klazdZ'@;
put 'eEx5Qm43OTNOWnhLXj9gIUVSP3Nbb10qSUJYIW8lOHZhKUFdTX50YXU3cmE0X0U4N3NgJH5vcHMzPigxSzM+ajhqbElwR3VwNjU8YyxNaUoqOEtbQnNFcUhgOXwxKz0/YT46VXVfYUFvZHFuRylZVDd5VzwrV0Joa1khSTsuP0poLlRsd3gpUipJMENQenosNl4/MlRgTUE1TVAxTzFAO1RnZmAj'@;
put 'LClxby5oXUBCR1cqKEVCTFBMWCk3Oj5odzoyWHZHXVFoY01zX3peOSphSkZQRGlBUXJMSlJeNHgmaVUmQkhaOEh0RmNRMVlYKG5Bd0dSQEMka0FSU0ZENlI+ZlowWDBsaU5AcGIqeFIlcWVJJG96SUE+TyRudzpgUm1aV0VHInRxSlBjRExMJkRNaGB8T1V9ZUdteVQpVDFDKixETTQkRUNiQ08j'@;
put 'KSplfktEdz1COTxlP2tAb2RpUH4wKy5AUHFeKnVrfWlmP1VEdy88ZmhiX1BiYE5SLF4yaEVjJHlmQC9pWGpQNEx4cCVZOEo3VTZJYUV4ZTRdbH55TCYvMUhgcm83RkV4ZmxbWEohVmBrRSNvXT5ueE1ic3t5S2Y3MD55TH1xbiZrKWU0MFVlNWVTUD0wTUxtUEpieDUhTEYxRkd4XSptTV97c1k6'@;
put 'SU0qakYkdkwuYTIpMXxpR0dmdCtmW2pnPChnW2ZwVz5SdCpYWClxaG85eFpBKSEvbWpfRHt9KUYlRykhRzpZK3F8OWhfX2xrdU9gay5UM18raVFIV0ldfTM2ekhLQnB4Zi81a0srNWtQRE1kOykpZXg4SXdzMVk1JVBwe0lqZDhBKThgM0xBeSY7JVlgVjJTb20lRyRKOU5xVGRETCssajdqJThe'@;
put 'LntnRDg3aixmSGFUUnpwcGpAeW42aTlnPzM8eFFZNzh5Rmx+T21aTC5gWUxEbSJtdksmVmRWZFNvfC9UOHBqPzJaJXlEK1psRkh5JG5icVhuPUw6e28uUFckVkVRKSExSz9ve1Q8MyZgejp3b0RmRTVVM0dVUkhnSEFvRSEhSF9qfHszRiEhRG9YLzEyV0MwakBDNExxdVJZZ3csQ2d8Wk84OSRZ'@;
put 'fjshdm01W1MlLEdeVixyNnxqIW9TLmJjJEZ5b2FLe0h3NV1WeG9iRW1uREZTdlt4fkZoT0NXKmRHeU82SWJ4RXJqSm5dZCtCfjlzYCtCYmlvb2ZkQzt3QDNxbywpUzYlTDl5MVNGN29RLkozU2prOTpNM1VFK1VqajloJkoqTEQ+QiVEdzArTjdMczdlTVs7TjhZd2UwQHdvTV4qeG8xSmdpQ1RT'@;
put 'dU1lbDptdipqQH5iJWYyaTdwYiVVbC5DbHVIMGlfPCJbTEV+Ym1qaV9VKHR6emJaaX1WLG5jJClEKyMqb3EzVk4xaXBPMUAxb28vLDEvfGdyLjxZWVIyZVRFUWI9ZW1PW1NabClaUEtOflhISWtTLFhYbktbWW5HW3NSZzI8Sz1TZWJmJiN3RltFc1c5NFRGPFhIMGk6YzN2cE0pamd4RGQ6TWtS'@;
put 'W30ibF1ecnsvcV1zaU9pT3dHM01ZYTtyVVphd1hdaHd3IWRlSV5qeUxhQU5VYSlVXmBEMD5Pe3h5VCw2enBRYVtkVH1PNUBbKlNLdkU2bkcucW1sX1YwP3RiKTkiM09pOjtuUF1FPEs4Vmtte2k6OyF7YDVnXmh3Z21TcDksfWokOkxZYXdqPmgjajIwW2pgYVkqcVpXRCp1cChSbDpuUEtOV2c0'@;
put 'ZD1dRE1iWyNoJCV9ejhjLFhBOywxcDwvOXE7aWM5Vld3NlVYTDJuVDFaY1l3WzR+S0NFUldOOEU2fkteXW97P0o4fGw6ZXp9XSlUP0BXWjtnREVvd092PV1wRCNbR1B9cWolZlt1WS9QWyEkSl00LDFDYHVVK0tgNktLL3dIXzBjMnkkYTAqOnJvRH5rdk8kI2tjblNMLlZ2WV5CYGR0dXB1ZW15'@;
put 'cjolV0FUOlFaekVGTEkiLGpYRXwwNG9jSC5YdVUreC9iY0ouNXVOKU9nUD5qaSx9NypGW3c2WWVDVmd5QVNsNnRiPyZZX35nbzlUbzhvSTFSODoifF1qbSFVRzQlYypzaWFCJXZHMGxdeFcqbm1DMiYxPn4kcyk2YDM9WVY/SyFgQ1ZeaWRFOE96WEp4ITw6Sng8W3JkRS47TjslZSZkXl14Xzpn'@;
put 'RVEyRjl5e05bOktJSD5YT15UYVpyTmp2Z088WDAmWz8sOThaT3hib043OTdFUHlYMkQuTTN9U3pUPVNmLk4pY3s8NHprQ10hWDJgUD8rPHNgOVZzT255Mko8SzY3TDMuc3piTzRxb09ze0AhIWtJa0kvITw6WitCekZIUDwuaCFtMHsoN2dYQDRFWT06enh4amc8ZVJqTSl3WHIwLkcrVHheZHI3'@;
put 'aUV1KnJ4TXtZcFR4XVZ5bzw5QmlXZ1ZZJTFWanlnNXAlJEZrfnx1YHReLnBna0NYdCUoL1A3eD5CfGBgXURoOGshfnE9Yzs5WTFjckN4TWdnfS5Icl9sQCpEQTxxbXBDTWU5KF5KQ1s5RT1LWiw0e31PZHVzSzF3SFRRLl4iKVUpPW5Dc2ZJKFFqSEtYYlh9WSwjcH43R0Q3bD1GVyRCZCwlRXUu'@;
put 'bXIlQEFBRl4rUmE5U1NweVQ+IlpGT1hsWGU6dlRnJXNuaSopVE9iJi5GNkQ0dGBdcCl6cD5QbTF7ezVvaSE3PXZ2b3svVW92emlUb3BBPCNTUUR0dyw8UVAuVXE5OTAiZ1FrQDFBYnNnRjJoQE5zOnIqKENTZnkoMk44JWpVWDpqY3poUVguImIrd1VkcVQjOE5ENSx3YFZCSlUpa2RmWHJAeWhh'@;
put 'UzhYVWohP01ZOXlUNiFoTD59L2c1LHEscnQhXXM3RjxZOVRzJlojZkwrUWclKEFqMVY2WklHP2FiblI+YXpNfTpnXmR+WFhLLytuVDJwQEloITpLTFtuLE95cSxJaz86ZCF+fGB3PTM3KyF4Y15FRCl3SkYxWCRGNHhrNyJ5JEh+OWpLW2VGWGwqSkY5KmIvQ1BwbkYjSjt1bH5deUxHZURlciU/'@;
put 'Mk9LMWoxTmdWOEFkZjhsP1s5Wk9PXUpIdk91VUhRS2RsL3o5S0lpYiJUWHNxMU41NTkxZTJ0YmE1WklHRSUjbD9DfSMhISh4WVozJSU+Q0lWcSF0RjZObCRlRXk7TSw4MkUkP11fK343UlMqfWchQkd7bTBRbUQhLGgpNT1zQHR4MVkkbUIlRCFHTl4kaTgvPzpNNHBldUQ8Z3E1THl1Vz4+WmB0'@;
put 'dXtERjJLUGg3WmVWRW9POGdvNVFqIyRkfXAhJkBbWDBqYVsjP1VLMjBpcnlHZWl9WzxEcT1aTXlIaUF7a2pEM0x9OilUUS5jOyhEUyMvW2llQFZwP2h3RyMwZyxHZ0soPipmaTRLMik5amVWZVYzTHYzUWcsaGUza2t+Pmx0NVZXdSUwQiVMO0BEL0pNdTA6ZWEjRTs7KEFpTClBQWlSbzYzcTEz'@;
put 'cjl0OUJoJUh4KHRoPml1ZWxpW0Y9JFEzOWp9VFpaXlR5WFh0Sit3eDRwUTsufjFKa2UpaWVhW2xKQndZRy45KkpVY15VdUQ7fWRJOW0uMVhlW2NFUENlT31YUiYoIyFuWjlCdl80YG1CT0QoXjcyVlJgRjdKM01CISl1NC9NZHU9ZVAobUpgYkQlcXo/U0RWQ2xyXUU3aEx0aD5LYSIoWlEwSChp'@;
put 'd2tgZlpMM10udyIoKSMhTzBQIU9OVW5ORURuaHspMVBPc2hVPjJLInxMKUMjIXRDKi55NVc+eChiR2hNUWVwInxMZj1JKF1LMF4hLDpaKGZDYW5MPldYcG1fTHQ7SHteVVRAXntlVyFoVDVnPyhSRXAlan0yTUYsakZ0Y0F+VnF0SWlyWkVlSnJpWnhzKnMwenc7Yyk5VCsqfnRwMUU3VU4jZ2pA'@;
put 'Q3NMVGx5PmFjRnU6RylZYU5gKXIvaWJoV3AhdkhxMll3JHhsN3kxSWVQOGIhPC4uQVo7bGt3RFtzeDl6SGhANHA4V1lLbTtna3xhRFQvSFJKYmxXIU08OU1FQDkwQkgyKncjdXk4cGBOc3c4ZTx5aWg+WU4wLEcmSz5faG1YZXg1JCg4M1h6PENoREhwNDwpRmB+ZEIzPlM4VEp5Ln1JQ0A8KXEj'@;
put 'bGdpOXFpVUs4bj9nbzkyUD1pbix4cWtfTTlLPz8qcTojKn0kKUloJm1SVyl8SVpiR2JZZjdlOFBOMjdOfkB0USptJWcwJHIqL0NFW1U9JSROTlFZVnxROzZVZnw7PFhXIyhAak0pc3d5ej1kSUsjMyM3V3RBL2pkV2hAfTF0cWBiZHV4TSk2byJRKWxHa1FKJXplIXc6alZnJFpKQXZJQUJgJDFa'@;
put 'MXZIW2h7PnspamRuZXldb0FwR11CI0xMdH1lPDB4LEN8YGhUaFQlYHd7I0hZSG9fWztuaS8/PnJYR01QS1BIIVA/fS8wa1pSdkxdJG5KUVZHaWgvYUIxWjwpRjV+ciU1LEEkb28vYyFRSlllNV9NWjxHNVAyclFiSWw9aSZRd2MpLlpaUnRjVEY0WmcpZG47WXZ9SUddVVtDYEBabjVVJEpoI1Uy'@;
put 'c29JfjslJjt1OTdpKClWVkJhMVRCVXVPbW4wOzxoUGZndC5NNFlwSTpoYjdeZHAqKihuK2wvc05JNEcrUEUrVlEyWEVgcTd1RStwYz05bC9jTjw0IUxrS3FCamk2Q1pzVUssc0VjLHwkdSpQPkM9dWg+fUA6LCohQ2A0TEFGeU15NXxiXnBhQilGQSlQRlU9e0ElI3RBPzxTOys7Uiw2e2R4OyVD'@;
put 'PCthaHgrYVA7QzlaP3ssTHtqZiw5PkxnN099flJsIzw1X14mPzlJJH17aG1VU2RyTlosMil4cEZMbClIaUBHU2pNSXFPIW1SNmZJVm1vM2tURjFXNUIwJTBDdThzRWlEUjkwMVRLWGtaKyxLfiFTfVFLVTAxOVM2eys7Rm03JEt3JG5zNlpacSxeP2NpVD19XWBLaHI9NVJ0cGFGU0p9NERXJSMk'@;
put 'SmtmbzdlLllTbnxuNSg+WntWalNKRjFqfSk7RFclYUh+IWFme1p3ZXs+PzRdKU1eV3lTfChHMzk7c01VPDh7WD95aCMiJl5CIy94bD4rR0I3a2FFJSM4ZXFRP0k6cVM9PitmNUVzfHltKkxUV1oqSGVjWDdMbm15I0w6Q2BMO09mO1kvLlk8VjdaOnV3IVllVER9eHN5XyN1TUVINzlyaWI3XTE5'@;
put 'WTxme1lhb0dSUVlWfUlnM3p+I19kQ1hUdFIzaUs6T2JOU1NkOCNzZVM6fXFXU3BPcUBja00lbG8xdCRqSFJaQnVYLz5rciVSSl5GU1lCUFUpZyVddk1QdUxRRF5DdHImQXJqfUhDZVUjflFoJWYyVlJiPXF1THl7Nk9SeHJnWkhRSXo+XUsjU2xrMCh+PTEzZHlgPHooNSY9L2gxbi5ZYTErKEB6'@;
put 'ZXhAajlTRj15ZU83RnBqTnd2PUMwRW1lLmpoKWpUJHokQl12S0JNdi5eITlWImtFPkJ1YkVtbU5hfDJQV0g4KUQxNF44S2BGYEJ+O2J2TkxPMD1ye1BzdHcyRWxBWUIpbEdqe3RpZEIiNHlzUERzPzJROFVjUFRYcjtObV5Le1dnTG1rdVc2OnpGPih4R1ViUkFHQV52U31ES3BCdD8uYVNTRXQq'@;
put 'WzswXkRoIjdTQGh0Y1FoakRsWG5aeU42KVhBdGNRaEp4OlBwbylFQH06QzxmREJhcTxTIUNPMnFJNUY5IzBZQj86b09BdUwvYVlMTmBgWCJBQG9GVjBLUUAwMEo9bF1icjdjRSROUDlmUzllYW9+MS9mMXxaWDh3LE9IYyhHKTFnVCZeTmYseVoyW0Z3XVNsWmJYJHxPe1NvQipATD0kZFA7Kzd1'@;
put 'IkE8ZVV1PGozYyRNPSpPVXppeXVfOVtUaFsvfDFacGgycVBVP1tvT2V4I0I3Omg0PFVTMTY8cyhhITg5Zj0jTkJiSFFJJT5uYkAwTEVCMS9saWkvYFIjdTRBO3RdIXJgPzdlOnRIclBoZTNLelsqdkUzImc3R09ab107fmVAYT4jVk17dmIiTF5SOWB2YmplSVZqZDVLJDdRfjZJN3RsL2xValkz'@;
put 'S1FDTThaVCgvRTVRW11pQEJRMzxIYHFITDw0Om9bb31dWCtpXXRaZnc0fEtGPSlUaXh5TzwqQUtMZDI2KiZ7dVc3QEZpdD9NY2pgeS9tYEp6JDx4JHNPOWdjSVY2R0wyKjlsTTtaciVgbDFbN2xZbE0wQHclJXl2L2JjO3FQZiQlODBXVzRAQiolbllQMEcsQzVfMj9iSmY4WTBmcHU3QjZfPyQq'@;
put 'LipYKm1ZZmBlcGs6SUs/WTBAaVA7NWcqUDNTOzhDSiQ2OlI4OnZXK2JkTzMqbmBIcyM/VVIkN2tDWDF6NkVUOStDVjk6K1I6MEA/XVBFVyltPU5IYUUwaXZ6KTIxX2s6IlFqcn48Mj14aFhvUT9zKjkuNypQeWUmNlUqUmJwd0BXSWRYPmF0WzopOCRQTWRTbm5pR0FROWs+UWNNelQiKVJ5Pzx3'@;
put 'SHI0JWlWJDY0KENCXklNOktMTWExTCFpNHN8a09ocEdlejQ+dXk1MWdsZX1uRzxRKCY2IV0zSHddQU9nKm9ePisrclU5Lnd3JmdEaDZzUmtKa0k+OmI7OTg0UEErR3hgbmQhOy9+QCp2I1hLLjNDfCFOPFU/IWlQcU5FPF13UkNZOilpenBJZmxxaHQxI2JfMCNxfShxWVF0aDJPISg7RkIkL2tG'@;
put 'KkRyMExPKywsQkFLe3ZNcl1RIkAyJFdlRlk/VDxXZTNgW3x0W2ldd3VGJilvUislL0ZxSF81PTAoXmt3I1B1Sm5PNmglIXUxS1J+akFSUnNiR2RzcGJOb3hBRSosYk1LInp2P1gybWYyTGBUWGtLdTZzdEIjYFpAPXxtZWhkYDpsc3BiWjhHM2dlLHd6I3RoZ2NsUHhJaE1bVlY6T3ldPT5Wbnw4'@;
put 'Y15GQnJqZGgqJGc8NCZXRSlnUmtJbjo7YSsycHRCKyIjKlghT0g/N2hHPClpPyRCPzttWjNJNHlaUV13OFY6Y3xnKmZIVUQyM3FvMFFROTNSVShHdXhbKUN+cGEhfCo9WiIqaD52LzhJaj45MGp1d2J7UUwuXnE6dDxtOThxTzxjO3lTVSx7IkY+JVphVF4zXVhIMV1Bd1A7RTtKO3JdUUMvfT1J'@;
put 'TFlZL1F2TnVAcCUySz86eTJ4JSVtS3l9UEczdld6MnYsO0VYejoodldoeGc4Y3dRUmJxY1VTMlVZeDpVQDAqSS54fGozWX5NW1hqJixJbXhHa2RXbHoyWjRxd181KF8mVHQ5ZTY5YnxkcEslIlo1PXBVQU0rX1JXcm9+W1d3Z1tBTyQsU3o0Lys3WjpCT25lTyppa0I3NHlETiYqXjxgeHZ1UD5p'@;
put 'aEQlKjtzZV4ob141aVUuR0swNypEdkByX3wvdGhiKSs5Z0lHUmU3fFs9XjNdVkZ+VTRkO3lTX2BkY3AqNUVWfn55MFdXPnVHLGhsTD1vT2poRlZUZjJCVXBZLE13aDRLLjlnRklnbl04fXxAdSVpLEV4Lj5ASUJsbEZRKTthd3JqXjRETGRtK0JKMlsjTEcsQyU4XzRUTXEmP1dqNmk+RCgiIXdf'@;
put 'fGMsSm1TZmdyajpAI3FGalQldXp5Jl03IzFKZUJUeSxCMGRsVkwyTCJGKS53RlZIZDVmfSlrIjNkQyYweUdoQ2A9MXBLKlR2aVNOMUFbKXRJakw1dHFSYyJYPDQ+cns/QW8yRWY2clpecGdiLFhSSnQseVg8NDM9PS59OzhidmAyLyJ3N1hGR3xDVVddUnpjKn0mWlcrfWowZURZendiXVJKTV16'@;
put 'Y2BSRzlbZkgsMVU5MU1wLzpTWyFLWGFbSi5YfWQ3MkAvVWR6bUpmfDFBPmcwTDVoNzRSU1J4YUNCbkdgWXtGXjdlLnpTdWxPM3QjLmBQZCoyaXokeSZoNkh8VT1IIUYrejskLHp6LiZpeFA/MEUobVNHXjcqRzh3bCsuYXIjJSVocXNOYmouI094NG4jI3ZqTlBjR1pXN30zVXZreEt7JGlgTGkm'@;
put 'TT5NXVUlUj4pOjAhcTAmbUtnVSUjOn1hdGVMZ3xkezw4YVYkNnRHOT5rM21LZyV8V3BiVTtTRzk6OmguVCZsXVckTGR9cFlCQU5mRFN3PUBCPTBtOD0kOnhwSzxIOUl+fnRSVWJRRktJNC82blNmJT49azw9YVYlNWFWUi9hKEdQentAWTNacz12RnMqMC8pXy9uV2JlXl0kVCNpY1ttOV5zVk1s'@;
put 'eDhrdHsyVzpVQXk3WjorOHs4bm41OnJFXzZ+PzooZ3BqaSg6PFh3VXJ4UnQjOGR0NlspPV49SG5nOTBGXS48YWQhSF1uN2UuWTA0eEBvI2BJInQmUlhvOU5sblZoTDMmVyh+ejxuKEtLQHh8bmAsS0xmcj8xTS41cioqS0xkPXIqYDZSaEZPans2aFQ9Pkk/aUBURz9HMipSd2pMTUdnUW0qTTxP'@;
put 'ZjdMUExJU01rWXA5bjltUSIoUy5ecHtJZUxRYnFFWWE9emt6U0pLcGQoQW9+NWwyMiwuaipTZWE7fFRbYiRNLlpvUS42KyY5c29qNytKSltaZmJqRGZEbE11ejhpTy5qZ0VQSyZuaWtQaTRuPV5kTjFsSjFLK3s0YnRWeSJmbmxgMkUkKGo4W2NnK2k5VVk4KSVtO1trOmsySUZfMCM+TWZwQERx'@;
put 'fWhCbC44NWpmNzpVL1tmcD9iVUNNQ1UhcEZWZDNlQy5jeFl5YE9iISZ8b2cmO0BaYS95OylQWTNZcHxTXk5LbFBYO3UxKVtWX1VzWVlPTUZvO186VlVZLlVXb1AqfGBqODVvS1tBRks3NC5lJVI8bEs5R2tKc2guOzxGYVYyQyRuL35pSyNCLjttYVFGbi5TQmJ1bWxtOk1zPl0kUW5rV0s9eiJ8'@;
put 'N3VxYiVHJl8pL3taUVg0XlNLR0VXVmZRfG4yeCoyOD16dixkLmxbJk0xT1gxXW4+NW8hdFpQTlFDKXRWTVlOc0dLR2w0cjRyfGZ5W3ByREwpUU1FTUBWYFRRRTBZV2svQnBWRFFRJCRxV1FZczFFcCxbbEc1YUdvQV07cUR0JGQ+WEY6Rk1LLjhbQiFDdDglM1NgIWxMRXY1Yis+TksjWXY4NENm'@;
put 'eUN2ODJPdjh2NUNPNkkhN1E3dW97NGBpbzdJZHxdVkMwXnA6TUgvXno9Xk5PIURreGBKImMudS91W3U/dUo2Vk5yRyopQzlGeEdvTzVLWVpZWXd0R25AbCM1ellPWWA5WXhvLm5qM1VvajsqSyZma3UjKmF3aj9DVXw5IU83bik2I2YwUCw1MTNVeGVsQGEmOF85WUo7e2MvIUZ3Y0AuKl56Njxt'@;
put 'I1pubkNHczRRJWl3dUpEQyJyck9XeERsWk9mQykscTNiWyFTVm9ZVUpZNGEyajdhfC5JO1FOJUwofGFFSX51b3kjW1JQI2Y9NWhCfXk2MXIwakNbNj58M2B5V1owVHciKX42JkpbZ1JPMCwqZD1EYFJNKFs3aE91b31PYjVoRkxPdUw1OitHQWVWSWdBZUMpU1drdXRXM3JUT30+YlRfaXB0VCh3'@;
put 'O0JAKCxaY20vNVNpOTNtUXVFT1dKblY/Xk8yLCkxN0lqTEg6dTZvJTQhM2c5bzJQOENGbFcwc146eFFbWz0uclVUUEpAVFU5aHhueG4qcm5xTllDSFtlQjNJW3RrYy5KR182Wj4mYENGKVIsJFUxRVJ7JFN+PCpSX0V3JC9qTTxtPWpUUno2R3ckL1ZHak0rOzM+aT5HfSRfd0dLQl9zRyZFNnMz'@;
put 'MEZQeGI5YXdkJVJ2P2xsI0cqbmVFaGJvYyxTNThkeEhaVVJMUGZPSCFIQFRLV15keHpTYUJzK25bN0diSl1VUjdTM0d9YypucUtQMGBKO347I2ZmJXkzRjZ6UUN5SmdCInpgSkA2az9KUlBAeSh0WXAvL0opWEx9K2Q5TTQ1RVtVUj4xO2MreCV3UGF9RXdGOX49c1Y1WiVtM2NRMUNBV2RkR0FD'@;
put 'QnQ8PiZTRkwxbGN3fFAkQT1JdE0/I2wwRkVDUC99WCVgS0YxNEMyaShze2Z0KlNWK3JJbFt7TF9nRSJvUF5DfnA4QnkmUGVjMU09Lml4bGFrT2JYMGVLX19uZjxoejxVZWgyTT8lLG5sZFIjXi86a3RBRkRtWGBsTzdWYGFVTnNsdUwsJUdhLyUzeVJgWCN4Jm06P2RIWVszelUwK2xyQjFNblVB'@;
put 'ZWZMZ2tgMnBua2AoaC88M3J2aDwubFpdWVVPbFtQKlZCXUV8eDlVNjwjOi4iY1lse0BgYCNpWywrW144fnFuNGJ7bnJrT1paQDw7RTc6YUlFYGk5X14rdXsoSFAzcDFTaVIlXXRWNTVnPTNkWTc/WDFfS3FGVjJjXi89Jkhfbj58T1hxV2FeS002KTg5PzkxRTl9TCFvY2c1UWcsfSxsVWQkWnVP'@;
put 'ZzhbWm5vJEVwIlRWeV19ZjJvY2NWN3ZRTj0pZjJSeTZnQlV5b19KODc7b0pGZ2xzQzg3WjAhZmdPS0guWlpldyFwOmFpMy59LzZvLjxfNXFbRktKUlBLbHdmJWovRiFrYHtOeHBLUW4kSDBZOV9IXSp4eGdDQmxBbFArZSo5cGxWS2clSH51dG8ienE2aG5TRHtqRS9mSys9Iz19X29vZDZFcEQo'@;
put 'PjohYEJkaXw1OlBfXl1PcE8kemwkdiJWUlQ0NXA6aFlqZCRkaWJuWmtgN1MzMVlwTTN3eF1vUlZGO3QhQFZVJEApNmRZW3JdTlZlUW9AK1RlOXRQMnZ1VFdJfVtfSCJMX0BgUlBEdiJOWiVFPilueyw3eWAheCtGUCs9KUtfcGA1UDtjbjQqJmtIdFFKRU4uZUxZVEJVb1IlVW5QdkZKaXJ0RD0+'@;
put 'XW84K0dWe0t9VyopNGdoLGVCUVY9OXRzYVsyQHsxNGg3NT1wLjo5fn0ibGE9PDhwUmlXSDZ0NTQzYmNdXzU1QjJoJjxAMVElcXBvRWAsPG0jaEwlLFFobmBRMmgmc3M8NEppZENBU1klPyxBaz1eQzJCLmJ2JnN+fUVNfjxjenJ0fWdNOmJ2TjdCLkwsamNCYkgycSE5az15aHw5THBjI2dSMmZX'@;
put 'dzFdcGpSWjNQO1pGOG5RLnQ1TmNIeUEkWlRHaVQuIT1yb2pbJlNNVDFIUVBPOERIPnpUYTxPYyw9eHZPbSUyT1h6SGFjT0koQkZgazxuIm5qW21dMG12IyN9P1tGTWF+P2tTZ19MIlhIXT83d3c4RDNyOzc9cyolJjIpc0h0SV0yU1tyV2xZYHJhTC5UIXclU00hd2NsUm5eZjZoVEp0WWIkbjoz'@;
put 'WClaPHB5YlY9bCIsJU1JXk1RXmxgRmt3Oio8QmErcWJ7cnJYVWI2bU5+Pm9jZiU0YjY+QUxfLls1elElcWRVbiY8QC9wNyxsKDdUQ2UmZUMsQnxtLy5bPy5GcSkmTFlkM3dUXVRGOk9kJHsqfCpYIlBfNlkyNF5LYUpdKmdmMkJPJnB9cSh8PVVMLl87Tk58UTw8cG95VWBSRlleOVZxVng7KTdU'@;
put 'OHRnanxhMjFZQipoSCpYbjtVMyNscnR5SjYxKVM9RjlNVHYkK3BDWFlzfVtoISkrUi51JG9UezghL2YyJi4qNGxdKm1KS318dHNOKH5NXmxrPjpkc3BXPSZSeHN4aTF2fFsmJSFYY1Q2I3RrRGxOYnZpUEM+VzRXMUVJI0wyeVMkTTg0VD4me3ZjJE0qTmR2MnVmIyZgJT8xVS4rJTQsMUAqfjl4'@;
put 'VTs9WDZ3OktRM3d3Omg3NVNSc3xHfUhRdHElO0cmKzIocC8ve3pLfjlzJTQ6ZjJjN3tKZ2x8Kms/NCQmUDR6NHF8e0BteDFSOyJUfjxkLkBRZCtYNTEpW19GdzV0amk0OjEsL0p2TSwpOT1POGlvTDMzMTUmTj95JCpgaWl7OD93UDpsUSZkQTN7LFssL1M5XiRQeDAhMUJ7WmhwPiM7X0ZCfj4s'@;
put 'M1UoU0pyQTNTO3JhUzVzVTt6bW9yRkJxcltrOSY7P11ucFRwayleMVVpflAkQ317eWQ+LGJdOTp5WE01RjN5d09TM24iUTN3PSMmNnBgUk0wUE5rJlZHY2VZJFYhRU5mcHBoZVQ2JmIzVUUhMiwlaWJWb0cqTT1mNG1EfkxoU19BYEF8Lzp1fEp6bTpMMldXVi5Ha3phYHc7RzlGckpsJDZWKWMq'@;
put 'bjApd0dXQlduJmJhJHU1fW9MM0g2TnY1W2BBJl8vWXxbKC42Z3lIYXlOK3ImZTx9N2BATnBsNylpbDtKR2IlWm5KOG5OQj1iW1NdYjc8VS9aVy93UFoucG9YVnJEdmxnaT1eZWtRSmZ2R0o6JDpIMyg6IX4qTkErTzohVWRJNjIoNkMhS2EqJShsNnBvT2dPYn1wRGVqZGd0cDNMZEhvK2p2Lkhf'@;
put 'bnAuZ1BWd0t8fTl6ZWA1Zkp9cCNrd1ldWlZuVC42VUN5NTFgS1RNWz9DSyFKVDosfmdHZTk3ZUsudXI9bGZONSJeLGIzaVQyQ0RiUno0eUovUDZIZTkpZmU5MTh2RC8wYntpZmNsOF4/UlYxYmpsdGpZfGhAZCJ0fWZEU2dmQUA8PlNkKT9EXTp4bS9kMiExe0k6QHdzbFlEO3lFR2xHZTc3YiRO'@;
put 'eiUmUkQqbDwvXSVCSDZ6I3BwamNrfCZeTzVtRHpUSk9gRC8qZUFMfT9mVl1gZCFgKyRQdVtdQFdacGJreUJ2YVhoRkt8JEw7L2ZyU0tLSTl0cTFsWyg3VClzcjU0N0deM2JfakZ+JSNQQzE+OnNMfj02b3Q5WnErdExROis/KikjVlszZ2dLb3VFVlFrcCN4I2ZWSC5iMzJ2WTJhZDlTdG9sOXt8'@;
put 'ZVsyc1pvczlJcl9wWk9abyM8dFN9TncwLlRETlNvNWBXczM3STZMRSxDMGxoJnlqfDp8eTJ7bmR6Pkwvcj5FQDR+TmdCUGI+Qm5NanVzYFNaLHI+TzpsKUFkU3lgcll3QyssOXhuV316OSh9YEA4O3NMdzI/XU5sOCxXO1gjaX1MaitzYX1sQzA6MzBtfWJRblljc1R3TTRIKGlNLEA0bEgxTDM7'@;
put 'L1c7L0omJW56P2V9ODk7OHt0ZCUraipwLyJiVyZoNjV2OTIuaXEqO3xTTzNTJV9YSk4+ezpGIXRVSUUmcCRkLmhnWGlYPnF0e25xfntBKCIqLHcmJSllT0Y+cjIob11oe0NeIVs7bEE7TnA5b18jLEArfHx7eFhrOXMrTz4lTXFTNjdjKVRVUk1IbSE5ZUpTNGFvdjN7RU1LMTZAKis6RnhjOVRR'@;
put 'bT94Pyg1IWRaKn1bVGQ5TTNpRShpN3hpVV13TXpBJiU+eChbJC5ncTZDaHFqQlp7NytQQUdCJlF+WGB2VnhiTH5KbVJnQSxXemQvNXNnW2RIKjNQTk1UM2FGYWFRbV5GTzgkIjdWXU5NWTZkakg6K0hSJHoia1dfZkw/eSF4WDgwLG5QXTFuL09DS2l8SkxhXmNRMztXOzZzSD1EdjZkbEVTRT1d'@;
put 'KmYyQjJhbGJOPm9dO103UWJPYj5vbX1GanpgP01PZEpnXk9rJFMoOXpqem06YDhaPGBYZD5FNzU2K2dTMSN7IiFdcDdhQ3xNMyhsV1dwOVIuUWRUKSUsX1ZVeUMoIT1hY3svc298QE9YSllbI3lyTGc2K2pkR2IpcDE+akt+JSZ8Ji9kOSFOT0UzQjc8ejZrdWIyU3ZrdSsxTDNlUT9gU148a3Ft'@;
put 'KVFxSEEvR09GakE6amQrfHJIZSFkOiZiaGFHdzJtKlB9ZGdKKFZsKTw6RiEwYGwva1Iqey5bRDxwIiwlRC59Pz80K3hIcEEyZDBKWDZZN0p+biQ6ciVtdlckNW9VVDA8KnhhWFNOZ2lZW2hwMjd1aj9AMC8qIUdyJGtsbSI8NXciOVM0K1MidzYmK3kyP2ZlQUBBPXsqaWglNkNOcX5QPTdQYD1R'@;
put 'UUJiSSRqYm01M2dFRTc9UGB4eCg4Z3pwY0MwfmEqciQwIjNgQDIrRzJIKEdfZzpZSSFfUDUiTnheWUgvMTxwRkIvSGhPZkVEdEBubGY1KmtCfkw8UTxENUg+WEpqMCVMcG1kKmo1YWB0UWciXmpoYk5ieE5DTSphOFJ2ZVg/a2NMZzB7U0dNLFhqaDB5OkkuOzA5d2FPU0RaUmVMQFIudSNiV1Ur'@;
put 'NDJaVl9QS0d5bFEwZztYSkw4K184Nlo9Vl4oYlAuQF45dzclfG9bcnMlaUBhd1NNfVhKJVhYLGc/XXROI0pmVDgxdE52SGxmM3k5TDdTNSxtJGFldjJ1aS9aKixHbF5HTHVEQzt9fkpPQzRMUHZ6S3ZsOUp5XX4xMGpqajx9RExzVDw6Ozc0a2ZOVFd6QENSM0J1OztfQCk5cj5eKCZNSmk1TVhY'@;
put 'RGtUYT9sU0IyQ1ovdFh0THVdQjYzeSprQCRHKT5SLCFgXSQydUAmQncpN3R8bT8vT0leTXZDQlV5YTYjaVc9Izx1JGY9Tl9IVWJ8JW9xRkVLekd7YHFsRFluMCx+d2o5ZT5mSV4/ck9lKm45ZSJYRF4jPHNHIXBTIzE8Vk8qJnM6VFpsZDBvPTs4cWFVQ3UxfGxIQmB1UlRtVjUpR2R3c2k1dTY2'@;
put 'R2tVS3FyRjYhQiskdHVvPSU0fUh0RjpyblcqQFhgL3JiREZ2cGR2K1syWjspYTNUTjBSXn5BPnxpZHFZWCMuQClxQ0U5S01KQmZLeDpoR2VkaE02R2V5bEE7XUpiIXVieWlad0ZvPmNXZDwseFFJXio4UyUhNktMfE0ldiQjfjBeQFpaOCNDfTQ8SjAmMmpmQWF5WCJncWFiRW5hK2ZQJU1hR0sv'@;
put 'bUlHNy5+Yj9yXlIyKDF2SCxaa2Y9JjRrU3xoImgkMSFXcUNTb3NjQksrK21CXmVGWDN0YEpzc1F2RHVodURkNUQ8bkhyXlAlVndPdTQhV0FAeTAsKnkwZXdSaT1ZaE9nZk1hLlRwN185RSN6Wk1fMENVSWFgdGAuI01RMmhHZW5Yc2I2VXxMOTExO29+fjs7T0NCR3hUPUE2RjJhaWdibWVwRkxD'@;
put 'QTFELn4iaGQwSWNLOGBVVVM3QGE3LnVNInJXOncqY2trPyJoPVlaM242RiFjakFZNT5lPDBYcDd9K21pMXZYNTcxQ15fNGJobjFaZW1bbDZYZV1QcSEhMWd+I2sjSGgqO0BSVVJPZyFlOGhkJk9RVV5AVjF+azJ4ZFh2Y1JtSjAsTXRgN31xLnRoS0h9R0g1XjlCTGRhUWhPQDkjZFZnRUh2cnBq'@;
put 'UF11dCNtQEVmdnlkQ2hSc1hYb3FvWDx0dXl6RDpuWyk0dFVAPnF8LnVqYDZJRzx8a0BpcXA6OiFhby9xeTI/KyldIXAwXlBiRWsqaCkvZ1ExRHJjUUtkVk1RPHMxY0s2YmlvW15VUSYsQnMqYCI7d2leR25vYUhyYVI+T00xN0pOSzE7QCZ8b1ouWHFvbmgkZSo0IkxmNjJEent4RnN0Zk0ldjRV'@;
put 'Wy94byRhLF1meWMjYjFGZjkxPSZzSGNhMC4hYHNYN2FxbzNWSzA4WHNYZGNwKn1oazNMcmRCQFRrWGNjNjQ9VklebzcuPkpbRnd6IWtEZHglRXVbXy9eQ1E3V0o8X0FRZGx3IUxoTjxQYzBpaCE8aCpkSTsuans5S2FzVSlkdSplIkB3ZkZnKnEpaGQqbmgzaSpmWzs9YDBUWEsxYFVEPFhmVC8/'@;
put 'RXVISnlSJT1eSGVNRW9pZHo5VGspcXsye05QO0VqUVlYKEU/cyJZdGhWWHxVWXBYdUMlJmlpSmJ4YzopQCJTXW9MeVtCX2BGOHxZaiMpJUZGVigzUyNvQT9GXkdlOj80dClfby5xZUlqRlcvWGNsJjlMM0ZGXjNrRTJNIihzJk84cjMhT0Y3Y2o8Ym9ZWnVJVzFINy8xfmNqQWZEajNIKTRWfXRT'@;
put 'Snpeb2A4ZlMjP1A6PW8rU2lkLzZlPms7N3cvX0lNLkp7STJGaDBZVU9PXihwcE9oMCFwQG9iYmkjOGxMdVNZXnBrK3xZT0c4ZztXOEAoWyh9SXBNRFBKP044LHhKLiE7Xy52YGZTRytwNn11NS5WNSVJeWdub1lXR2VyXmlZd211TSx4cFQraHVsQDFSTW9iPiVqTFJSZi4vTzdaVU9PUjkxY10k'@;
put 'djUzTV9VJl5AR0BWImBxIls7SUJmJWN2X00uSkt2OFJEdXc6TkJQKjYjXWBgfFFyKVI/fTBhKiRNdEgyOj9xOlI5MX1iUlpeP2pTMl5ZekpLbSVidnxxWWUkensreipVaThyNT1WMENRRjhwPCtqfUZ3MCp1d0pxYHchQS82PGkkYiw2PzsuOWVtbDkjZlNde0QrJmk2ajddOTxAI3NsNmhvcWdL'@;
put 'Z10vWTxnan4xbV8qYH1fLk1tRTEqSVh9RmplUGBoZjhOUnI1SyRbQEM4NU9dcnxxIi5DOU04dU08NERaTjh3Yy5KUmg3OEVJJiNEOCtXci4+bT8rb0l3TXAvMWhBJTBFIlB+QiooNGUlOV5IRDs/YVNpUzVPQ1cjSyFMPW1FRClgYEllclJ8Z1V2ZFRaWiFYdlNST1UrTGFacm0mYSFeY0BUSTpB'@;
put 'Zm98S0tmWEohUjcpNE4hLDVHQkpsZXt9OyEzTDNyM0wzMVpQY21SIyp7YWQweSJLTT5oZyEwISNpaUJNYW15PHlmTnpHYXByUDt5LlE7WnJFd104ZHswSzN0UEFnQ2VgJERYZipfX35fPDdHeFNHaEg8YHNvVj5iPGdKPjtgSCwoRyZqaSZsfVB0ZVNkdlt3YEorT3liSzE2SVsvPUk2eDtSaEEv'@;
put 'eDt0MkVbaEt8WyN8QjRmbSZkc1h8WjBUeVR5VDE2Q0k2UTNTRzl9TzxmdU9vcil8UW0xdnQlUWhBWlIkPzd8fCxPZV1NMy5YVCVlLjJwNWJwN352JXNkRSJbTS5dSFRddiZRTX1uW21ebGE6Tmw4NHZCfjMvYV9WSTF+Jkc6S2Q0bGFZSUQwLispUzZeZG02LEBpUj1AKjpGZGN4PVVgNzJmLmdJ'@;
put 'ZyJLbDpTUjc3TDN0emNgcVVPfUVUVStONStNfjN7cmNRendKeilkK1I7MTtAMHd4N0Y3cnN9U0pkIjdOJUlrLzRVJSRrIWR7YHUxRDhnem4xbXojfjMlcj1JXm83LCpWKlFkUSxwNjNPTDFmRDxCKixdbilmfXlQdURWOm1OYTNPS0ooLHxEMUlkYUwxTnAyQmtFVCNxSmw9XWtXPVlhTEwjWFBB'@;
put 'aVZERzlEW2gmcGswM3Z3VilXVX1sO3k/WmlOWWBMcDkweURzTlZ4RTBWMTNzeyY7em5wVGgpQGg7b1lhYSE/PngqdnMmdFdnUGVvRXBbbHFsUUEvT3NMbHUkNT0hJGc1W3t9QDAoPV9+a3goeiFRLl0oUyIhPzJNZ0FnKjlHPjo7RVsyNVkxdE1GSj9aZlchQjJrZDk6NnUwX2JgOl9AWlJVbzNI'@;
put 'TEcmd2IjRyR1VkcoVWYySGxQUUp1PlMmW0B2ZzJFWzFLdjhYRGV+R0MqMH1MTkMiM3VGOS9CTzs7IVsudkdlcEpydW1+TWVCT35CdzRyIVRgIjJeaUVSdkgsPiRJPWlqalplW0w/ITokaXR0WG5gdzFsUmQhdV9ecVBOMzp5XUAsdUh4RElOTEM6SFZQb29ddzsxVFhnRzFIXUJ9Y0VpT3R1OHpI'@;
put 'U01rTT40KWZxMXJSU3ZrL0w2KFtPdkhLdGBsend5W3Q4SHF3Zj5SNmZWTmEyST1MPjp8MnF3eXorcDRJfUA3PiNEWzBHOjc0LE9SVUFAPT9XOC54bj9LIW88TFtoN1p7ZWtgIWxQLFRZSyR7YXBNOy8ueyxZKiEjMF1teSR7ZzI8WVY4JCNNW21xIzd8RSk3ZWhQd2toOl93MT4zeCZILCx1SnpK'@;
put 'K2p4RGpKXTBPOWY6VSF6fFREYWZhYU8kYSJmfEdpSTF3S3p5KzQsK3Z+XWZwSV9OW0U1fHwsTyJtRUVTeFk2TzleLktNOCxdNFFuYFVGKGpCKWBzPzZVQE5sSStOdEcxd3FmPEJ4eTw2YSYzd2AzRl0yMFdXRVliR1ZVUVVgR28sY0hfXTR1QSN9eWhaRSNTJDBtbytrNUgoMzIpNmBvOUQ4LHM1'@;
put 'fSVUNj1tSmY7Wjs8UyE3Yn1HfWRmJStrfTJvdT9aQmAlTVI9M1AwNGxlPT5sVz8jWVpmVTV2P206MGBxRjVTaDheWDUhVzgvVDtUJlJvRjhjcno/JFpdQFgrVDhySXNETjBVOUpoTEtXPDkwMDopM3UrMixafns2bnVUITozQCQoMSFMW2dJSTMhU01hTzosMnhmOlVpMXtNQEtMZlhbVzNrLik/'@;
put 'RjhWNWpqNj04ZkM1SWJnQmMscmlLKTVATVRlZ1FDXSkkdnlGITkhKE5aWFplRSZTKUYrKTNEM3JTRFYxSDAvNzRNUGJHflQ5eSlHSnxsP0AkZ3EqMVB6eng4ezlJUDVuQlYhLEJRZGhhNHh1OHlsbHhsKmpTZ1NPNkZnbmI1dl5dXk5kSjVUOUxdeCwrIkxILlJfbDdWWTEoeWVCdUEpb2N3eSYw'@;
put 'O0YkZWsjaGJART5tQU5qNVhEWllbLjAyW1l5al4waVtkYVZDQCNyUno4aEpsYm11SGc5fTEzJkoocG1jNXY1ZTwvVnBmYF9AP2piJDtkRkZqO0FHfCNbN2BASW9IUms5MihfUEk7M3UxZU1uPWtCM0hbcSYzXTppdzAkYHFvOCI0fjYyNUxpUnJfJFFiVE9pLEp4XldWcW90e3J0MU1kcld1WEBQ'@;
put 'alE2aGZ2P0IuPHdlZiopVzBQQ24vMVJ9PyZbLEcxYUhhOjkzelpXaUNaTD46WyZVb1J4UXpzWGNyOXRoZD9UY2AiVCpaRnlQan4qSkN0YF5JUTVIZmNDXXdCZzdYdS5UKDY7bXYiVFVAdXZIUGJ1OnVhZVJ9VnFaRVdCMHx9UlgpaDE9WCFPMTVOUFMiaGRgJTAhbTNqZik/Njg2IyQqN2RKKlVJ'@;
put 'WHhGQ1A4ejU6LlZlbUJRZndCXiwhak9hfG9nSWZ7Ynk5a3d9anJVSWN4R3RjdkdNeXN3L3hkLlddPXApJGl3NmV1aj1UW0ptKzlfSSYxRz95K1BKJG04eSxhQERidnN7dVAmIyhdT0pCRHgsfVEud1lhW0d3dTNka05nL2tYSlhjbHsoJkZRaldORClzUy8uImNWVX5iPEF6X1FjWnJFTWxFM3M+'@;
put 'K2dGUWFIVlBNZ1M+cTBpWiY5MXwvOCk2N3l7QlYqWVZpVlBKenU3K2x4SDE0SWJxU195cnUoRmZLSkNgcTV1ayFbdkopWStFc0g2YSVxZ2J2bik0RT5UMmQ4WTFLJnc9a2B0dHA9PT00Qml0aGVjT2F4e11ddEVfOTVxSU92R1tjbzBCRmZxfDEydTVCZEQ2RzVOQVFgdDFwUHwkW2pHbnBdVW1F'@;
put 'UzJlTUgqRTNmW3hmazRrSDlENDRieVVRTTxIRWUzbXZRNSNrNmFhTkNvdiUrWWJpN2tfY1koOEcoK29wS05QNS5PcTg9YGFFUVJvTXA8M2E3UlgpKWI4aSlifCFJYl06SjNDSVRDRGw4MFM1XW9EWzNhQV1fcTB4e3YuaUN7KVl5TEksYkhqWD0sZm1pRDxCWS9IZXsjJTdJT2Y/YSpmRERrdXBI'@;
put 'diJdfHp4UUdtfEdHQzZKQTM7TkEjaGI4W1Alc0tsa0lDKGNud3EwRWQ3IWhNZU9bV05gck99dDkqSXc2UmAqSipSO2NQP2BYalpXPSksRnBmOyNYME5ZcyF4cSY4bXlJJGA8ekYqajhWfnl8T2pLI1lfSX1MQnJ0REAvdVhMUjZCYiYxOTQvaUdUSVlhbiw1Q2QpLlpnJCE3OkpIfG9wel0zdjQl'@;
put 'V0o3bSN5UjJ6UUNtcGIsbSIoby9LV1VVQ2J0byM3UyhvbFFWOVNQRWg1PSFJOVVrSHx9OGFZZSg1ck8mU0E2VWdXZGZvc3hPd3wudnl7YXlAVFkhU3ZRdzpLeD84eWpYeFhvRnFCNkIsWkZnO2lNXzhCTU56JDtQcD1UekR6dm5wen51MzR4eT5NLzkvZG52bWcwcWxnNGM7W2hVOWM+YDlqIT1h'@;
put 'aSFbeVtvbDlrcHVyJi5OImJEYlFJY0VZZjtvUTM4WDtzPzglc3g5QzJXbVI0VWg3bU03dzI+eHRJOGYhLl5VQkJIYEkiPFA3Y0FjP2tgSjlCQ2g0RFQjPjJdUXp5ZnB4cURhJUlnNVRefGNoO3RTVmYlQyZUMytWMWNyWGRCeCEqQ1h9cUImcXFTXX5GOiRCYlVyTk55b3Z9PyY6Nit8RThhcm5o'@;
put 'VStYKFl5MDxecG88N3A0ZkAsaU5yOFhrYXBuIUwsR00+OntgRztoPUlhPDV8WHhvdyVeYkY1fD0wOzRITncqYXovcyZEO0hETC4wREVsNCVQOH58NGVSWjo/bVNJYzs0RzI/KVYwW04zNVppdiY0dEhQTChMfUorZVI0RXl1KU5Ge2VkREAuJDtmaGU0N2lkY2MuPkRwTHU/UmdRdHgpNThTIztO'@;
put 'bGUyOyxAfCNIOm1TQm0kSW47XiZDYyRCIzZrUE4zdmB0NVU8XUZBKCR2KkF7ek19ZlZTOFU8WiF4fUM/NEchLC97RjM4eVV+TjlMRmt4UiYpSCk1amdWKE1acmpgOk1UO3V0a24hZlhHVlVaN1VgRU0kQz9ddVE+XnlAcVUwJHQ4ZjlQdzszdiJ8dDEpbkZHZS90NCVla09Wcm90R1NaLjF2OD1I'@;
put 'dEpOSUQod0FtKFYxL3lpRz46Sko9ZDFuUFQlUCYkU1J+ZztCY1hyfWYhUWBobWB7Vypda0YrTDI8WTtMISRddmgkZTwxN2h9bk5RXlkkLiVHUWQzU08mX1JKNn0iS2JWU1ghSzFZPTcuOyR6LD9vUTNEZiE9Ilp4eGxIVmpWRUVNd0VkSkozeHU3bHEjYHkqc1VjeChkejJSaHE/dSVmRnl7Y01w'@;
put 'a3BtYFVBTE88eV5CflY5LFtPN341ZllMTG5YfFp2UTlNciVlL0E6JiNINTM0W3o9N0FzZCFDZlomeipGWnV5MGY4TGhxT3pWOVplXl94V34uNk12UEssISFOPk5ocChPRDAsTDpHYFNwODdKMyZ+dGR7cyU1KXdbcmlGPyVSNUxkenVMQEtkL00hZyhPYWszNGx6eWx7On1RTHRocSQ0WGN1IXJC'@;
put 'Mn1DQVElTCtLIXE1aG96SEdGaXc8KyFOTkdkfWg5VTE3aClwd1IvWkB7YCMsayFlMWdxY0Q1YGsxe3dqSC5paWcodyZ7a0lER2xLdkp6P21lX1tNNlVHO0xpKDJPRlY4VXldNnhZLFlDKSQrKiNgUGRFPGMlW3chSXh6eH13az9xbChZUHosI2g4Tzg/W2IyYndyZ3ZiZCleKDRBa3tLNjxEdWwy'@;
put 'YSV6aUVGa2dNQUEqaHtHQnRWRShNZWMieXMpPHYsLEd8KkJJSVRQW096dEtVKEZQdnB4bVJ+WEFBQUFBQUJ0JkYqaERscWkyK3ojbHZUSEpGQT0hOENLVzszZ1MqcHJ4QzhJSShkNThXdlB7eW40VHhiOVJGN3NqNUUrYE0pJCI/YnorXzhPYTVbJE0pR10yQnJvM3x8MXxmIl96YlVWWkNKIVg3'@;
put 'PD9MPzd9OyVQTERybUpPNmsoaUVsNXA7IzAvNiNAVXM/eHh9QzVjQGs3Yj5FeWJmamVobXhOVlRsSTljbldxWkw5eFFVMGxOSSMmKCRodjgvbSZhLHMxKWUoSE90UnJtNFNheGJxPiZgP3YhNkh4dyZqc3ZUTmxnbylQcFQxWnVPO2hfNC8zfmg1fWxbcWIhUUApY09ncGxlNHgxKipYV3BiPGRZ'@;
put 'ezBbQGpRQDw7QGMhMXh7TFl9YV5YQ0NrI3A0ViRwPEpSWHtVWXVWND5zeWUySWF8eGV5SD1KMF5YaHc8LjJRKiFpdlVMZzImfSZLcTY5KFkoamAzJWx5XSYyO3Izcm4lS0omdUJKKU4mMF5+P1BYazAlP0E7WyNFL3xiMmJ9MixXN10hImpSIk1Hd0xiLHdfRTgkPCN5Z3M5cDY0fn1sSUVqL0d2'@;
put 'ZnZhRUhjMiN3P0VSSU4kSUdRdz9DTyZnfmteTjQoPkNwJDpgZXtoWWUsKGchYmo+NHwhc1ltTzp+KTp+Q2s9I0BzJHVIYmpOZmFJWXdLN1FVeDp9U0kzKGh9XS5YMy9oKyQpRVtiQDZPZlIzP0F0TWc3NkAjOmZ6Kk9MQXNKSjAiUV5iJXBgd2lRQHNuVCt1a2FrLGdyLFFdcVp5dmwmRTRROkI7'@;
put 'cl8wey5KcGRnT3ooN1QzIWRKbDdXYmpjcnw+dCgxWTpHIVc2Un59blJNQWAlMkdCcnpkM1p8W3tBVD87VXI5LzVLbUYsSk9tdVIzIiYoTWs9MHhBbjc4YHYyTiV6PUhAKlspMGlQW189Q192dTNJWVJpPXw9OXk5WGJSPjR6MSl5IlY2R2xCemVlWzVHflpAVXgmRSojNlpGWU06I1hxKlg7OVk9'@;
put 'X3xle0xiLEN5OH1VcUw3Zzsla2hEYXcqQEk3cSR6TnNub2E3ey8oQj5GNl1IO3A9eGxOdjhfJlZTMnk5e3M8JUpedF93alNUVX1QWjwsLGx+JFJtLm5MbkkwKXNOdX4mZm5hYy85ZElCODFbPXxNK0VRMHVzVlU/PmtCYW87NypIbX1lYS51a1l5Mk5HSyM8W09HWiEzUDRQNUtuTVIxY2kxWko9'@;
put 'dSJqWDpKS2ZQaHsoJDddZzRlMmJvJTpxSFNiPF1aPGdjbDIzKGk4Pk9mNEI3Y2ptODpqSCYySyQ0dFQoanNjSnBRUDs/QSpaU25pUUxndysvenUkYjg2YThCaU5hSHRlLks+KlhIIy9bbnE/W0RrX0xyPSI+WVJWVikhOzpsRypTM189fHxDRENPSCRNInBfRXlfbkBqPj99dSRyMT1wRWNdYSYy'@;
put 'On57SmJkd3QlMDUjU20oVGlRayQ1K2JLTDQ8XSxnOFtFM0dBTlFxbj1dWG9dVS4qVHZgJW1KcXt3QFRzKnRMZW4mRDtWTmlmKDteL3Z9Wyp8X29maEskOUd4ajg4dm1ybCguL1NZO1tPLyFwTl9aP2w+L29UPjU6JjYsSztzYltJfTgraG0kUEh7RXouc0t3TlssMG8yMFZpdmJ2c1cuTGk0KVY8'@;
put 'NztiU2NYN2l3fnFULlZIdWlMXTV+O3g0IkYpdTxMVXBSNEM+W0BKIXRWITFMKDdzcWtMfng1dnA4N1pKeHlSantkMCpeWDpTTil+UTd7LkcrOXRpYz4lWyg7Vno/ezFNfU08clA8TVpSWkI+K01bJSZmSV8+QHNEVilFIWYrOVV1QGkyYUQydkBXPiR4NkBgaGQsdHFCLFZAYDNRalcwL3lVPy99'@;
put 'Q0ApMkN7aHFeSmRRQmUiR1RNNUMyUi44Ujs1RUo5fTZta0p3X1dYXSVgfXQrMyttOUNUYCF4MihgMyF2WX17XnZrcHAsLDFpQlVAPS8vQihjanl1UlFeJCNIO2VTKSJjTm81QklAekQsclNwWVYzWGkjaFpSY2hjQCVQMCppNyhKNGZMT1o/Pm4hWWc5Mix8eHVaIX15WmI6aTtOSXh0UnlHUmUy'@;
put 'Klt3fnV+QVZZcmZ5N3hMZEwlVHZSaTx2ZFhpJTFJdi5DNUBaYywsMUoxQD9XOHREYjI1S3dseFg2fk5sbCU7O2FDWkFFSyEodmp6VnFgb00kWXo9LFhAKytUKl8qcFRZLjBTNnoxbDJneGMzOzx4QDdxTHtqQTYwO31Xe3lvLFQ9MWMsVTJJalFQLmYlbTJjOXEhI1taY1ljQ2Y5fSx+S2lHdHJ4'@;
put 'OnBsIyN6KkFiN2k4cih5KXt7fl8hXjBleGdKb1hfWHdiNSldW1FAYXNkYFBpPj5nOVAxZlRle0w4XSRDOnRWb2B0IzhWfkpFOkBsck8/X2pNZjFnIyYrTEY8LlUiOntlSlgrP2IvLEguXmFWXVFaOywhNGB4KiJQcjZWfT8+ciVGIztUd1JtR21yeUFZIjdofW98UlAkRSIuejF2RS9DLj1yXyxX'@;
put 'bj1ETlssPlBoO0owQW5xS1I1I01uTzpjLDR6MTFYXjcsTHl3QlRhUWwzMTUwKG13ajpifCw/SjxMfW1xVkRZXW9FaU05a2pSeiZXVX1pVXlBOFUzMT4rTlM6NUJaYzJ2L0Z4RCNhLDY8eT8/TCRnXTx6PC4hUEgzJGJ9IXk3OkYme1ZddlNNWng1Kyo9cyZHOFJQXT1td0p1NyIxVWx8LClFey4l'@;
put 'eFspJUBFRnJlclg4YzQ7WGpSdk5EJE5SYzp2c2MxdUdnanVUTnReL31HTSVsQH5QQjpdR155YHhranFiKEFnPGdFenw+e1NCQ0FDQCZXa2pRWVIlU1IhQ0tyPFI9PC5kcyRyaWxGYm5HMHYrWVEmMSh8XlNRcjhJfURQfV5wTipjY1tHTz9dSXZPWy8+UChYaEEkbmhkbXNTaVRHRl43KlpWPyxQ'@;
put 'aT98Ty5eW0d4NzYuXj9YRDpMdHJrUWQiL0VbKnxzSzErTWM4TjZ1LCtARWAiekI/Y0JsUmZAYkcqUmNxX2xjR0ghNS5idDBVcSVvRjI6MmgySDZRRFZ7U2B3ZkhbLExbJHdKdmdaInAxMStIP0BPS3k3fXhtcU57c2RXIntqQH43Sk9kYS87SiVnZ3FbKDhYZXIyOTx2cTg5Rz0rU29ObXBBOXEu'@;
put 'LFo+PEBbUXh1OWoqOGpRQ3F6cHpXMkJ3MD1oUSFbfXtRSEdDJi8ycylhI2xVZFlRVU9DUSM6ejxMPzc7LEQwImJBRF01dzQ7X2BqPHp9blMwTHJMcXhpMnNdVUEibz54aFhbWTIhKFNLdjFXRyhGempjOyI7UDleQ2Rua110bCM1Q29PNTt+U2NwaylFc0piMWApSFkzT2VJSyI+WSh8bmBSSiJp'@;
put 'fVhfYjRnanFITTA8az0vZSlUT3E9dH0iZ298K1d2XUBmWDRNQi51eVJDTTcjVypDL05kYVZXQTRoVUpvMGFvVDZkQ0d3OUFoRlJzJTRnVVIzMWg4XXksdkhRZ0RdQitIcHRmT0lZP0VDO3xVZFYiVElwez0lK1d0SWJGWz5DZ0suZS97dUBjK0smKTVvYV8xcyNIUiY9JF9gbWtyKmBeQElIIyNL'@;
put 'S0ciYX1tbSRLMHYwQUI+QHxVdGxeJnlpcVQsJG5iPWRuQSFifFVscDM/OXQkIVFEQnh1XiMzRHVKbzYhKlMsPik5M211dCwyRjlVUVRLKG1jWFoqUnRVLzZkcEkoMy9LQllJTkZXJT9NZjpoI0hdMnhGVEQqVH1KWmJ8NiZ1d0M5WHNAXytDelZVdTZoUkJpUi9mQWAqPDRhXTlZb1hvK0RRTV99'@;
put 'bX02dVIkKDtGT1BxMFNSLylraztMeW1bVHtlZncqUjQxQGdtVUsmelI7XW01XS9yVVtLMyp1JSlraHN0NmVPVFFsQVcwKXJ9aUIoL3NYTFdEQ20zS0dlXWhmL1RgVG1AQiV4RXdUfF5eZTNSciI4Yjh7SE01UGtnQCQ2S0BENkVGKXNsZS9qfU5zJXFRUEZVfktnR1UyWzRuIVFKWnVPJXhfNXk2'@;
put 'bFc0aiVKfC9oLHQjRS5uOUNiQW02ZDUkQHMrL30rUCpzK2svWlp2NllzX19YKSR4KVd6Zy5QTFtPYWlXQX0wNWU6XVRuQCVJNlE8ZjtTdEUyUFgrfX13LG9RbyR6WkcrKEk9RzBjZG0/R1ozKEkyIX01fXQ0ajg8PnN5W2ZWcDQoVyFZTHlZP01uKV4/TX5hOz9VMDpXUC44VDpKWWZjJUVQQU1t'@;
put 'IT12IzpaP1IlPiF9MnxRKnhOd2NLalRdUl0sb15ZcDc6Y2pOSUZlcyN4emNQKiJsSFZqV1I6Uz5jTU9EYCFPPHIoe2NHWTU3TCFMKyZ0PmJ2KTE9NXQoUXw7aV41TGk3aW5MV1BpPlN4MT9gb0s6XTpRXytLUGZoLFJVTEkhSWYlXUM4VEtycD9qMm5eRmlkZ2BvNXk8Q09acUNCYl9zfXUxZTM0'@;
put 'KVlfdz1vR2hpaT1NYSJJVG1oK040YWxfJl1rKCFQQlZlJXcwU2RQZiteQTwwKT4qI0x6am9nPjAxe0R5fEovN0ghKUp2WTh9QTxzLlVSaUR3Rjs/YXAmaTJSVWZYTEdzPUsjP3htK0YxKy59JCFWOTdOOkJoeTNPLiN9W1VkXX13e198RnhXYkdaQnVjTVN6aX5bakVKJSlAS3V5TkxhenxITzJm'@;
put 'aVZRVjV7IXBaNFk7VWBCaWpzMDg4fTV7fHhoZixBWExaeCpqdDtwZjM0bitCXls/Vj5tcU5DdTFfVCxTY1lHbGxLcEU7RUd3JjpdWFQhM01OVjJ2L3tLZyV9e3dlN1E1b0Y1eTFwT19yZHU5Mks4LyxuODg0RHckSjQrVShFYm0wTFo2MVtAPWB5VCU2UVUuNyNEZSxDa0pDezNyYCFOfjdpNm8z'@;
put 'YFBwa0ZXKm5ZM3FreDlPQVhMMEcqZik+bVlAcH5fSWFSUVpyPSI8Jn0/R0NYKXQ+TSFKcj1gJnU/IzxTakl0KHFsIy53R0Q6QUIucXJUdXVBRHtoM3tzX2defV5JUyE4fFhnOGkxIz5JdSxvaj8mZDY1XyoxIjcsfXE5X0BJZTA5azxlKEhmV0ZSVW9DOWBqXXtoQzJPWk04PzV9O0BRNVc9K1VP'@;
put 'YyRyZldlelczTWUkOzxmS01yWjlBaDxwYTJVRDt9eE8yZyZyI0skUnpvMGE0Sy5kZmxwMkNPdilzODdXRVtaQjc4KS4pZXhFPGI7bU5CLG1Zdj01WTxgYkB4Ij9CMG88ZW9yal8+UV51az0icjt4dVdkTihiJXNyWCp9Wk5JLn5DanY8US59VlldfUkrXWhLLGlhVCV7WjBFcUglRmsvcCZZSkly'@;
put 'Ij9WPzxHd3x4em9+Ijs2SitdNHJQYjp2T3JsUDlZe2wvbTJTL1BeVlJRPHh9Vm5rcXw5RmZ9PXdVYmMzXU9aU3NbNkFdb2xMY3FkZ20/UUlEV2Q3fEZya2pdMncuRSUpdHdJISRDUWBtLDVjN3heIXhqUmBuVEgyZX5mKE9AYjxYaTQvKE5yVlUue0ZUP0IrQD96eyxOblBQYShUYF9ETUcibHJr'@;
put 'Xz5QVVJKYHcva1EiUiNONmwmLEtERjZ4bmshX1RMNm9dZUd5Zj9GVWddbiEyLHdPVlkkfls7R20jM3d1YSpUJilTZWN3bm1GSW5QOWdDcV9zTz5JJlNrNXQhQCJTO3R4d15WLyNfOmwrdHEyVFZNJCF1NGNWcG8mSGtbPm9IPU58altGQjh1MCJpaXdWV2BmR2laUyp3LjtkXmFCbStIdSgyWFc9'@;
put 'bWAyZD1fazpQV1NudktBJFcpL3BpZDRWd1EwV2ZsJCZGITBldjhHfjx6PGJzU0VdSDhjMWtfT1lRPXtMWUB6IlY+cTZIcHEyOmMzRkE/YUNpOjV0MXRybG54QTgmTm8qNiYvbXM4WipSQ2Qqb2NdPVA6TDlib2ZSNjhafTRANC5mfH1ScjplVT8qaU8uYXt3c3FsUHxiP2xVVVh4UllkKF40fnMm'@;
put 'VENFUGUvSFk7dX57cVhnYVVNTkVkImFRbTxeaklBPHBMOS4scmgzaFBuZnh3JltEfitrQmNvI1E5Mkc7ZCMpMHV2fnhqYyxXX0U8aFI+SFVzQTZAZmd0Q1krJW47K2h0LjUpW0FvYUUkcXY5a24vNUdYfF9xLmJFdyFfZXtXQD06Y15dVyM3cDBoJih0WHo7MSIsb3tlaElmaHReZmc5Kj9RIyI2'@;
put 'LGY3SmQiMlk3eEssaixHRkZFLHRHNDduIyIiJkJKLnRENXNidG5XPT9bPWtnT10+OyxQSE46dz9ybmA7OTBxTlFyNTR4Wig1d2lTKVY6JmFtQE5ZZlljIjdWLHZ+UzZwOUtyLjM/Y3p7bkdEV1pjfDhEMmZnWmg1WlE5WyR4QTlPJkJEc2ohYGpJd11OeSR5MHFLLmNXWVlVMXYvVGE+OSM1KGhO'@;
put 'YDc/NFhiS3YuVj58R09DLjxJTDpeWktWQyJYeyVaP2Q+UUZdZSpLSCRuQ1JmKFo0TXI/VHheN190eDo/O3I/djJ4S0YmcD9pMiRnJVQ4eGc9alVhP3tePC4pYSRJJjBee1JVUkl+fXVVX2VEPkNfPHgyVngpIkF7KXQ8KXxpJCI5RHA+eWA+bXt6WCw9YXx4WyUsK0pDUCFqUkZGNGxfY0JkQjMi'@;
put 'XUVXPXs8LihYTTJROm9yfil6a0ksIkZ1e0spJHI2TEt8cyI2R0xDKDlTOUlvOFV2LHk5XlZ1KX5jb1UzMTlJcCMiQVNrfnV8PypjOFZVWWleOzc1cTVETHxQdnlYbyNlTmx+Nntsdi9gLiVEfXwjTUY+bClrXjczTkJkO1Fje25bXUhERlVgVEldWXJpVWlSamxxTnZJOCRUVEhjM35gLGcyIjR0'@;
put 'LzxTTDc/Unk0TyNCZWsiYHVkc1gsdmdBUTVCN1Q5Ri9yWjxdN0g8ZmtELFN0Q2U3TUk5ZHBYfUZPRHVpYylVX2dgT2BebUVfa3MwIl53MUc9IWEpd0dQPXl7XUxlXzordFREWmBXJSxAWER7QW8oW0gze10pK3QmO0d1fmIsPHhQVmN8OT43XiY9Qz9RPmpVI2k3NFtEV20reXIlOnY1TkRZfThn'@;
put 'ZFQrWl8vV3ZjLlhCJEpGPERpZiRoXVBRYzRCXio1eERzeS8mRDBlT1FdZWhrTUFCLF5tYSo4XUd8Z2B5YFhJYGZaekwieS9ESipXNn4kZkx2QEJafE9bXnRRWCxibVRbK29ePSx3RHV8e2Z+XUAjTTA2I2BeWyM/Pn0iM0soNVc5T2RkV2d9M1ZIRX18RXV1UTM+QltXIj89NTVpQ3hnU3RbV2c5'@;
put 'TmxCalA1PWw3UnZURDpBNip8dFomajE7bFNdY0pJblEsQ0ZnQ0M+KUw9Qz8zdHZIYmxCIkAxb058eFtdd0NIUV0jdXBFanh6Z3ZkMERwODEqJnEhRTdGSH4mbGU4Q05zPjRPTm9nP2xuU3JPUl5LYyFRfislYE9YWGVJXUU9e1tjWSp9Pj1HOW1fKXV2dEx0IWFsVTIoYkw0X0ljPlo5PGsvL1Q1'@;
put 'em90ZjhbRkM5STdUYUZNbT9uRkx7eCFWJjxnJngjZSVNYX1vRl0oU2dHNmI+NlpNUjxJOllwUSpdaWdzRyg6Q2cxRGVKJVtLbCZKPEFPe2w0T2w1R19DQ1F9WWVvR1tQeDBDR0hfI0cqJTZZMSoxflNrL1BacWVNZy8/Sl01ekdgNW9sKHpUSkkiMyZTfEheQkg4TzRlezVlKjdZeFUiI2tHNk5v'@;
put 'eURAd0UzMTZaRCwwRUZVVD5sYnpOJFYhWDdgS0B0cm04IjdaUTN5cHUxRj5LMC82PmQ0LmEmMkM3Yy5ifGIzZm4wVTgpVCxvXl57L0U5ND9rI1JWQksyOW1Tflt4QGFWMFREKH5LZlNfdlhfMXRpI1Z7NzZ7aDBVdVo+QEwlWzUhfSR7QiIrRmQmcTd6Ri9Xe1FoTXVHPVhuInBbe2FZeCRSQE83'@;
put 'Oltue1FLUGt0S15kc1N+RV81O182Y35HTEAjTGkidmRPWl53e3Y9M0gjUHUsOSluLHIjMnNyV0R0RSY6bnA6JClSZ0hbYCJyejJNVDRIem8mJnNDYX11Z2FOYylGVF4lKythRVFhd0khXjo8elpXU3VCYUZOTG1+aHptT2hyTDtZMitOe1RtLyViKngqSFlXQT4jPShsQzUlRk1oZ3hMTTxmalR8'@;
put 'a1J5IiRfSS91WmA0XnNTaFVDPjpwVElUYHpzZytAPS4oXUYjcTlGRSEyaEsrSkZPMjFkN1NGTVd8TS9WUzEvfFZNe35YU0RYKWkxaClUbTAkUXB1PnVSKWJOdkZ8PGl2VElZYWBANExhc3IsME5hXkBXPD1MNHRaMUJoVzBmOmxURUVNY2pGbV8wdHJVLz9BcG8heT46NjxNTlJqMU0mT1t5ZWcr'@;
put 'R09AP2c1UmpgPTBvekJFbWNueHlNIW0ucFVbLkhUTD9DaSFNKkc0Z0QmPjB8cWNwI3ZPLHV8MTUsZzVUPWdwdTpAeVFlYiF1QTldM2dVRmEhRDBaVU5mXXZuJlgmWCJFU2NNRklwdFo/TUh9YHJJQn1Id1c8ZjtzL1c7NHdUTjVAY317eUhPWERncl83eUciYDooSG9SeSgrQT1PP1B0OywrXlF3'@;
put 'dlAjfGN0UUxaIilDa0o5SlgjbHJ7QFEpWnt6Xio2RzkvSTMqe212OXxzRyxpQ1MxYE9GWyQjaWJ3c2U7V2pCL0J5VXx1Kz55W1pTS3F4YFt6PTdUYjIuSEA8bVpQQF07UEIhdVAwSmhSS0hzKEFwRGw5TF0yMzZHXlRhOG9HPjlucHEmJTMwYHhkPW1Wfkh2S0B7V0grRjYzYU1oLi5YfTJhViFG'@;
put 'QVZldWhkYSZdK3tFQE5GXUU8PmBSdjtCJVNnS1o5MnlBT0g6NUw8Tjc8aS5MUUYoVkVvSUI6UVFFNWNTbTZpJDJVZUpnZy5TYEtubSNZPW9vVD8+biM4blouZ2Q4VTNPQ0ZScmlYWWNVUzojXn5sdTluSjo+Qy9RPWAkY19Md2ZuOS51Xk9kPkRZVmY3L18vbEtsQUhqSytzaG81ezVHTSphImpd'@;
put 'bVpYP18vUjtdezJoX2ghbzk+VlApRml3JGZVUiw9JHdNImJUNUtfI3g1PytyNXl1a0NsckssWWUoKXQyLzc6MH0mTURqeH41OllkTyVRQkNbdDl0THdNVEwrYm0uWGApRCYlLmN3ek4lQF1IOC90U1B7RyRDYXhuJChJSkxHWCpDc0trOWIrU0s9TkhDJGxBRmM3Nl93UlFVNkBZQD1mIWI8PiY5'@;
put 'NGNzS2w8K0EocTg8cSlVZCRoc2JWVXVsdTF0V2x0elNgalZ5SF9TRik+STw0NGgxbzpLLlBQaE1veXNtTVpDVm5bX3x8QyhKSGBHeX5QcTBfXW9YQWdPUFNlPkdBemZsOVg6WEovWSZEYXpJNz5mcnpYZTVVQWhffF54ZTluYHxIW0JVSGcyWHF9WTRrIXRYT3YmNy9RQUJOUTUuJiZMWjVJQCZw'@;
put 'YCFKXSh0c2VjIk8iTXArd0N9bCU4RHdqO1hKW3VOSEd1Z2N2OSVAdCk9P0ZwK15wUC9iI00mflF7bVB0ZypDPDZrMGB5XXF+cWBBck8jI3w0LHtoLE4yVCVLVTFePi9ad2FRbHVlaUhHUEJ4ekVEZDVib19qdnssVz8wbS45fmIzbUU+UHR2K0l4JEpKalRxUV9JXltCUikvPU1yK0socHs4Ynsh'@;
put 'MTpoI3dpS0ZyWHFuNFllQzlLSmE6QCxpOCZMQCtBOWs1R1hOYy9jdXptOE1VdUouRSZzYCtXQF5yd3FsPGV0fSl3cnQ7I0tJIVl9TFk4b01NXlo6JWxPXTRuKGhhWFlleTByel4uRlYha11+fFNKPm1yMWIkdV5qNjFNVjxBV0ZbPG9wUj4wVWhLM1dXVTlzSDg1WnJTeWYoe2d+MDV5MElmdVt7'@;
put 'e28kKHx1PzVgTWo/XUNnY0hZP0h0JCMvVkt0NUNSfFVpbjI8YEpnai5CZGRaQi9ib2loXUE5TDVvaGt7aTFDfHdUMWB7c1REKyZGPm9XYkQsdTd7fntCblM6eHI4KT1ERSlFUSMlaGk5eEJMK1NbNnlLdkl4bykuTER1MT9tZ0F5M29BO2g6MzQ1IT1GaUZLR31rTkxYMk0hV3YhY1hKdiE+emw3'@;
put 'dmRTeCMuYD9VI0JealBxeVQ4RmVvLiM7V01SNVhZdnpQLHRqVmd7WmYuaXh3IXVFLjEra21veW8zLCkpelZxITUuZEo0cXJLaD93d1dqNTRhMzB7VW9FSDVPOSl8aEtTZkM9UkVGfHlHO2lPMUhfUE5Len1ZKSl6SUteJj9McGxBJixCNHt3a3RffDVyeU49VkhAeURZcTVbSH5zWlM1OSw+YCov'@;
put 'Q3slfnZ9WiI5cnhTLjhEcUwsPVorQDFSVEheaG5wNkRvIUUsXlBtV3A5XkpfUCpPQENiaComVDVuV040LHd4d1pzI3p0UHowWERnZmF1bCw1eCs3X0M1TU1Ucl4jI2pdS01ofElwW0JycFgjSyFMfjg2b3tCPEowYjh3SE9lXkt4JkMlZUdVSnJNWyQrSWBifkAwJWFYQk9bSE0/YG5pL35CYXgp'@;
put 'REdgNlUrbWdWOTpqOTsjSls2eDRMSGVtJTo9PVp5ayEoJHRbOlNHeFtIOmA+IUN3aU45d1pZRk07UX5wezJ8IlFVTmxRLkoqJkdkRXBvZEUibHltRFhURWFsIm94a1sqSGAxayxWa284KlMveWtzNztaezZMRmlHOUZFIUUqXzRhPHNSUUdHaEFBdzh9bWRteXxDdm4oL302T1pIal5kUDw0a1dB'@;
put 'cnRSPVRNY2E2YEV6dTxjPjk8Ly5fa18zZEF4c05wI0Boc1hZNjsjZH0uUUV5Wzl4X1g5QkciZzlKd1ZaUkJKekpZVE1uNldwOCpMaDklXjYyLEYvZD9ZVmR+bEF6NU8jIV9vOjlkOE1wblt7NEJAcFRxKmlAcnB9PGZlZWRFQl5zWm9eQXpBNE5oISVMYWMxUUA3ejR9M0ZCX2JxQ1glY3ZyNW4+'@;
put 'S0R9IXcmKkp9NWlbTXB8JkM/NEQhIUE1VXd1d3AzRXxzVkdCYEtBU1d2NldbVzBKOUc2d1ZOLzAhPiYzRnBtMmBCTHlUU0JiJWxLeihlUGszJEBvelIxckxnfiM1Z3lXKT9PUHxddyNiS18hKlRHUD54OWAkYTJ+c1B2Yjo2UkhdRzA3Okt0dXh3KDFAWkdSRC5yaSpMSk9vJHpULCxAX3ohJDpX'@;
put 'NGZicGMqVCpGLEslaEQ0T3k9SnM0WER5VEI2UCVbQzx1azRbSF88RzNOYUdodEosXSMvMjlVKGJTcElwOVN5NUJAZUlySkY5U1R9azFSMy46PW5XOmB7cH1gYylvOWJYX00kO2FAPkZOOCVSSDFmWnUid1tXUT53bHNJWUc3Rj4jJHpocTZpfSpOMj8uMF5WJGtTXlVpeV84JDdWV0cxZzdZQTl7'@;
put 'SXNRbjphOiRMWCVKb2xJNip6XVNyaXd+RyREfmtMYnMjNXBMYGNVRi9AUzMrdk86MHBqMk5RKDNNeF9wTiVlUGZlWVtKQTo3QysjTV82XV8+O3ZHOCk/XU9WMG9bZnFJVmxgMyV0XW4qMGNMMSRxJVR4bm1uNEdPLHB4O2hgMkosaH5jdjJDNzM8bTl7KS46JmBpdkQxV1o5Y2VVVXtPNGNSSmAv'@;
put 'aWghS3I3PnVYTHkpRGsocHxXfkV9T2FJcm9YTDI1NSE1NHpOKH1ALzcqPHwkNStiMnVEWX1RZmFQYSR0JTZxXWwxbURrTzlSY2tfMExySTtgWFVDa2dgUm91U3YzLnBKQjElZn0kZyEvKmQyQF8pZjRdV2YwZEpgZkNIe18+TGFDfFNWdkhWSEZxOilvJX05fUtbfT5wdTkpYFdecllrd3dfWmpo'@;
put 'I3A5RjV5VmM6c2BLME84YX01MTlPK34odGI6IVdAWU8lPD5tQ18wfW86NmZTQXp4M2hAQm4oc3AiaTBqOyQvWlp4bSNESlRDISpqZD56WzAla3UuXkVgeSQwakxWLGcza25palBbUilmYVlrY19AIS4hI2V4KyYzKmNES0VVXm8vezFMJHBLM1Y2QTZwOjp8amQxNCg2JjFaJl5qSEBEdlJzX2lD'@;
put 'RDhiVnd3VVN6emxER3J4MThjNUw1biF7WmdQKSY2O0E6N1UpNDQxY0VebExgfDJLVDk/cW1OQ1E6aGIzK3Q4UWw/Yj9Nb2BvT3F8N3g0Z3ImIlAiOk0+anYsL344dVRPTiwsZl4jKixpTnpsNHJWL2M4KCYyR2RCbn5TOEsiNGtnfno3THE8a3leLDhKOCMoK0ZXZUhSMDA4O0ZRYXsrKFg2Wk1w'@;
put 'cnBDPDl2QzdqWDw3eihYRypAMjVIbGZmO1BZVGJleChecjZFY1FzP0gwKiJ8TyJLQW1gSzNqXVh9MklpOl5vX1FWMjg+cz5sc2xKRGk4bW1rSyFAOXA7U15Ecnp6TyxdbCRdVytHYzo/KFtxSTszXVZHXjhKNEd1fFhLUXc+L2w3LF00fHUrIyROSCFRaTJCMF1wN2J7X20mJkNZOntyajElaEpl'@;
put 'Q0h6In1eZ0NSe0opYy4pLFoxUClVYSZiMmxERkBeXXxxNnx7bm0jZU43SSJeUyh2ZGhQYm5gSi8udlVkTlcrezpINT4vSjVJRWR6XjZEP2MjNF1UU20zaHNyI35RLD9FImQxaWRxWisxZVNwWXx8V2htcThYUkd0SHQ3dmVEdUYzZHF1M3JXLmdwTCVgSGs4b3l1ZyMlQFI1TDNFdzBvUy9AWG5f'@;
put 'OjgyNGxxfH1DfDVQdHU7RzdnMmJCNWw/QjVKfl9LM1JVOlF0UG9oJSM0O2ZveG5PW2g9dnNrY19ldHhiTUNqZTJ4enRAfkxnOm47Yyg/SlcsZ1J4KVJbQT9CXW4oS2pPbn5BeD9eUzM3bFV2WTgvbmVpYU50TSEoVHxxRVc7Pjs8Yz5dW1AsPGUsRnp5L2U1dUdaYDNvY2t+e0dveSNXcCVZW3tm'@;
put 'M1QsVnZPPFZjYVl8VGthPzArVXBALFtoK2ksNEpWNn1lMmxiXmZTfV9RTXBsfjw9VnhRaHN6K05uX3pdb2tEUkVhIUJjbFF+YDVYKVVtejJFJmM2JjE2TCN3cG0wfW5wRjVqdVEjLyReOVRvUGlWdHk6MUM7TkR0fjY2fUVyU0NTPyElSiZGIWhJbnh8Ml99bTw4elY3c2dFR1haOVdjWUdhRzJI'@;
put 'YG9CeyY4Plt6VX5gXTx9Ll5FWn5vMlBLZkwxIVY3U2hGRDM+fTRLNjhvMlZOIX4uJTguWSN+Ky4jSzglPl1HL11ZdnpBZ1FAIS5NSj5+XW0mVy8lVUBFPlc3NEBOP0l4OlVQK1ZIKVhDSHpdWSFQNEZJITVIWX5dRVgqfUhXNUNMYD1KOiR7Z3xKX0d4QU9PUXFNc25gO3ZoTUtJOzU5fV87NVAp'@;
put 'XSVTZj1CZjIpanUhLHZRJW1eZ2Uxcy9mOmZ9Mzw/QCQsYCl1T0c4dSZqNiZVNndfWHIkQnlhI3Q5XnwvMk56Ik9HX3lHajkhejg4ZWEuLG4rVT4vKWFOU2FSLExwd1hnXSgsSlZgeHN1PCsrcjtGJTQ+LG9JKVdhXz0mc0I0eUNvPytzZE9iVzlpaChrdUtxTSYiK3ZhOnlIbzs1QXNrby9jfV58'@;
put 'RTIuZU8oRV9QY3VnaURCUEtbaUdoIjgxRyE9RVIzXSVrMWNyTnN0TldfclpBLEMqMX1JeSU/Tj9ETTlEcilXUCojPCZVVmpPWU9LbHV0LGYpWmRAL0NFYCFXZyF+VShqS008YyFSVUROdDlONzpIeWQjJDBXTCpoUiQyYHgsc2Q4akwqLlpdNk05dV8ley9IfSlFMyxqcTErRShgX3BwJE9gQGEw'@;
put 'TGlSTUllLDQvQDVyP2cwMUxgYiwmYVJqUkR9fVc8K3tTOz50Zj14WnA/Vnl7PVZbRmxMaWFMYndlTWRDPyM5QSl3MX1zJHcodFRYak05JkM2Vlh+NF4zOXFqWEh9PiU/Rm43WStpQ15zdFRZclsmeUdzYnU0TkpndG9LOklzW3c9ZXB+dj1scTFvUC9FNjQ4ZEwxcG00YHhydCI4WV5oT0dDMnpn'@;
put 'My8jRzdwOER0SUZ1MFpDaWwwWUNbOCkjI0I7JSRJO09PaUEzdSJaamEyNG0sWDVtKT1eWWwobyw/QXVCS1FvRG9WM1UsczdEXSRuS3pCNUtvOGd2eHFQfHcrK1ZCIUtnNDlfY2NIVVI2WHQsPF1EKXheN1tLZCU1OGJ7JCk3R3dKakpXKzA2X0ZzNzo8RU1dUS49S0MqTVMlXkw+alRPJFFCZmV4'@;
put 'L0cqaUlfZlNOOWpCL1k0MGBzKXIzdVozZHxtbVApYzpuNSp1dnhdSnRgRHM+WlFpInBlOnc4ZDl8NWd0eWkhazhkYTZVZnY3STAhZSNqbXt+S1JpPUleImV0TkFfNEpJLyZKVy8qa0Q6fVtUaF9Zamd2T190fnRhcXBebX00XTh+RXpBJjU8XVQjb2w0LHc7K05Fa3RqZik0TGZ5VzQudV1yIyRw'@;
put 'Jnwmaj5bNTtAKCNGS0NWbVlXbj89N15UI0Y4ezRNITVeMT1hPT8pPDpgQ1MmKmw5Q0tCQnA2TF4iZT1EK1s2W3ZCO01YOFBNMjVGYnNIKlAuOzl3OXYqbiNpKzV1bXx7dzIvWy5gRmswX3p7N0tuaDRjKkB+WmtkVnU9OTtve3RCKDh1Xyl6VTpaMVY2V2xHZ1JPPjY4TiVNI0BsVlFhZE9uQEMl'@;
put 'KDVdIVpGKD9JQExSTGxBXTg1LkpxVE9DZ241PGFKOV1PQEAsMis3e3I/UkAkY30vezRPJHx7PFI/XnNnUyNjTWgkT28rQlBRITJfUm9VeFlLVSF5ZHJ2Y05FWUgjXkNBUUt+L1lvQWt5dy40KCNiY2M9cVQoPkZ4YExPZU5TfltdMFRAZiJrMDhpTU97aXpIUTx3I11KLlN+Lmt9TFssOFliblM4'@;
put 'bSRFbnk+K1FXaF5dan5eYEZMZTR1M0AjVWMifUpZJmJKPnEuPzpXcDpveEtrWWNZeXNtamtzQy42MVFCRUlhazxbdWsiRSYqKUpDc0Y7TnFvQH53OXksPHVGZHVbPDxPcXo0PWJoQHJEMEIuWUc7RklRS0dTYFBqVlAhJE1ITFgsQUQpUUJCZW9VTTpnSW1VK1N8QDlpQnImWSN5IkZzNzAwQ2Fe'@;
put 'YFZhPVY7K1AhViVzPlM7RFFAfilyJSFhKCxbJj0reWRFMSoiUlE5SXJGSVAoNVskOVdLbV9xLjxIVSJGMCk1ZzBiUDl1emhqWkU0Ny4zVG1md2hpVktDX2YlITAyPj53Mk5yMGYsZEw/ezIvc0NOWip3fVdHbWZ7QFloaDxNSD80JWYhcWNNMFRHdDZtfWApfil5VjdqVnxQb2tZbmImUmljL307'@;
put 'O2gjfHMuOUMwdGkwWzNGOmUzOTVnQEJWOFc+LEgpOjsmRX5RIWB4U0U4cmZnOnIiaFNPVVE9QWBReFs1UzdZU3Q6b2xHU0ZEVmUpdilhK1lBQ1F6bityTjAsRE8zKFE2KV0yJGsrLyIqb1lOfiheZz06WmB+WngpcWg4dCU6IkZ+eWJbJVtyWkA/ZlQsQyZDSGcpcjdySTpAej54dk1Sdl0sW1tP'@;
put 'KkRVaSVAWSVgbEk8bkcvKFE9ODJBVDMsRzZydG1Say85JU9TZV9EQGg7K11TRkt7RHhUSlRqfnQ/SGZ2JEFNNnUmPktrVShpRUImP3ZidERDXThJWWUma3s2IT1QdnZSfU5nKXtRW0tbaCZ+JG5pIWVbLFAxJXEiVy9HZy5UOmhaQVAiXkVaTWtkaTRkJXNQTTxYOUs3Rko4MVpyVGpHZCVrSC5k'@;
put 'eWE2enZ1b0l6OiFbbltjNjRgJm9Ba29tPzhsUUFhdD8sRF5QUklLekBYfSpacSJXbnI0WU99TFtLe0RyRERzQ3l9Mm4qSzhGQHpQKH1nKiwvXXpuPGEyTDRDTj1jLmZtdERWJCtldW5MYUd6eGZMK1tnTGA/Ny8rPSloTFRUTyhmclY/YCtaWH4ubXp5OTpBYGs7V25eayQ4aC4pVUN+R1FJI1JF'@;
put 'YCZvQipxM2E/ZV9feT1keylHTFdtQ2tGQGxvIV4hbTlwUHhrOSVnPDdwZzR3PngyWUh2T3V7U3RqPm0lfWNpKGwwVncwIkU1QWhSR1cpXz83V1JmUzkrV3NHMnNlOCVeOjY+Wks6MVtDW3x6al5qKEw0RUdWbHMycU9USk8zPSglYkZ0ZF5EbEtMKzBxXyxxaGdkXzdkKCQ9YCE8NnJKKm1BLDFY'@;
put 'SWROaHdnI0hVUDRjZ2E3QiIzcS5PcUxUZDNBXjhCQC5EN1IvL1JISXY7NitTcGB1MTtzYndMJFRvZyRTRVpOWjUoKG5aIXIjS3NVcFhRZWY6cSNsL1pGa35aUzFfcyNqM29IcVEhYTxaSWN3Y2k7bChfOEM3VGBiWTVDVilJRiZJQkt8QUpwb01qaFRUZH1ORi9wN35tUnxvTVNEcS9WSD40aEE0'@;
put 'ZzpxZUVpMSJQa2lrX1QpI2lGWiI/SX5pSj1+IzZjIysoeF9dJElkKTJJeldZMkJyODM3Jl1BRSFkV1ZtMlRpT30lVURkYDBWXUU0LChRNSZSLlhkMCJPP0I0I2tlditueSQxayVmalMudFJrITpGfWN0cUVAVj52UnBYbFFUPjBDJWxvP11kKCtsJiRTZUFUbUUicWNEfVkkY0ZfPj1WbzlgRV1m'@;
put 'PnA/I3lZV104MGwmYjw4PkNOTno0NSY2OkozTzRdOz5KUGdedWNJeT04VjAwZkw3TiFuR2EyLG1bciR1TVssLlIiP1hRKHNZI14qeURmXjJQRFtGJDxhZGtXenFQSGdIWyQzellJe1gibyp+ai81KVZvZitKXXQ6LH1HfigmaSs8eUZAdE5oa1chbEksV1JicSpDQTF4cSg2dklrelYrQXdAY3Y/'@;
put 'cm8rdjlkfnBUL1csVDpJeiwpREZYbHliMDp5PURybnE7O2QxXT5gZFohd21WWXF2XyRueEtaRklTMkUpKCR3VX57WXw5VmVPQmBRdV1rZWxAXU94ezRUb0lzSWk/I1Q5T247W0h5fGY4KVUpIzUzSmVbdyZleEBZJlU3WStaUn4qY0ZuIUBmQ296Oy5wQ11HVTpDNUcuU1pGImR2PSZ4Xml0RUw+'@;
put 'WytBWHleSiNpN2hoNTpKXVJNLjR4V1hUMl02NihTQFk4WihXO3ZrZndqZz9AS35hQTAqd2lUbjhmbzdESilOUCxONVIoO1Q0QWkuaVAhKDtNTz1zaixMd3BqamReK3gsPV5PYSN5WzJbZ1hmaTA7TnF9ZSk5bkg0XTIjfXdtQXVeNlQmVldVaFB3dmEzc2w4TnQpXktTeVFSb3U1b1t4TUI5L2Mz'@;
put 'NCs8eTZ3T0ssPmxeWlg0ZGU4KX5lZE1yR3lXcilgLkl8fT09ZVgwcC4jY3FPSncsdUBQMSRRdjZONlBSQWNgMTAyZSN7b1ZYZSo1RSFqZ1FiJHR2N2dWdC87aHhuT0E2eHI7e1cqJEBidGRqPyZbSFU6Qmc9dE1Xd0dbJEBrZFZVXiZocTcyLjQhbVllRUtBNHBgXWZ4MUg1TnQ1PC41SXxGbEhZ'@;
put 'N2BJcDJgeUsoWXFrM0NiQDM6RyY2UWFmL0ghWH4/b35uUjtRaCgoY2IqaCxPfjlOLl1gMElhJkU4cD9oYVJdMWJATSVhc2xjWHpRfipTeFl4T1o4LDZBPkZ8Y2EoPmQ7PTB5bF8kOHpMI2ZKOGVfczk/aE1wIUo0L0taYGI2SV5ASzV7ImNtXXAha0owcFErTFIrWlo4di4uNEdPM3plISQ3aGli'@;
put 'R1N9Nns3ak5zZyhZbWc2Pzt6eC55KUFAMlZnXU5ddENvL0xwMzFmMEZMZDEjWDkpandxdE8vZCk7O0trJV5pNSRBR0VDVCR5IzEjV1M/diNGMHFqOlN3THxOInIoayN6OT0qOUMqeX5XazwrW1tHOlFiXXkhWkBsX3c2ckw0aH5paFlBITJyVXA0Rj83Tlp3RmBDPUJdW01bMz0sRio2e2VGNj8l'@;
put 'RVVLSTJvJVtUPW1ZQ2liYTl8R2huMEY/eCxgXkhMQjovQ0ZzSVY3bnVSWk5aXSxvPUFteSRyU2EhNmN5empMOVdAd0JTLn0ydHgkQmIyK0wrUyNGMFcmdFJ3IiJTNnh3MGt6RXd6bSo/LCU7dFYiPyg6OWBeTTU7RHl6I3c0Pi5+eWxJWWVZUmBrL1QxTS5lfGYweTBVT3VaZ35RLjAkTUJpSHJs'@;
put 'YkVYQUh5LHBMWCpMfGAlekZKUz5oRk5WVWdIKm5GbkJ5Sl54Ul9IXlhQPHgvaC9SUGBwYWB1dzwyKlhlTWNFVWtwOWZtSlBmcUJGQiRJYmRXfkYxL2V8W35qdFlncnZ8YipUXkVdVlk+LHRUWHxGLGU1YXVYZnhWfjl2dDN3XkFScDBpYyokXShkM09tN3c8OkBNVkBpcmk9bXs5fTN9P0U0dDM9'@;
put 'K3FDL3VfU2AkcEgwPy8rITk4YyoiJiZ9RV4iKG12LHsyfDg5PntmVWwweiVYfCp5U2FPS2lTPitwN2gvPCg1P1l+OiFqTF5ZdCh5VUt4W0A1XiQwU2ZUVTwkUEp5OEVOazw0QS9bZXU1aEZVe2pYMmNdUTRELF9eTGFpN3s6XUowRDB0UyxSPWJba1cleTpjWFg8YCV2aClLNF1AbDY+elUkTV05'@;
put 'O0FaOHxPZDA0V3k8byRiMDVMLltVeEI7fExTKF09bTV9dEI4VWsjWU1LVndLaCRjcnN6N1Q7b05NNVpfZWwvJXR1WD5LN0RsXXFqdnAuYDx+bXVWRE8kdzREcW1qcClAVT9MQW8/TndrJUllYHNlMykmYnw+eT1oTm95VDtfQiY5IW0paz9HRHooMT5dM000VDFDcXJZMjwhOiNwXWY0NnxXUXlt'@;
put 'Tj1zWClwNFBiPngpPVlGNjNvd25sbCtVRnckRlAzNzUzT2lJfnwzTCVeTTdsOiwqZj8uVVVVUV9KYUhxPS9ecFRkZEpEeTpgRExHMCJobl5GPTdXY1NbN2IxZmE2fDIvYjApNXROJDhkc1ZLITlnJD9pUnRCPD9GKyUrITY4aUh0QyFtJiYkJWc3PGouUW5qVnJzOUQzVklYcDREejVuWCt0Nmdq'@;
put 'JH4/UF9DWGlMNzpwT0tXNn5efit6bnZiMFZ+bU49RzMuPlJ3QlMoU1FnaF9GYGxWeXI9Jj9ZKztrbzQlQis1L3JoPWFxODxhUCl1fVVJa2hsbFRyIXJrVy90OFFoJFJEYmQ5TiMjdWxLQm5SIntCNDVzdz1ZQEdAIng9XXRHdDIicVM3U3E0VTdyaUxLREdiTEMvTEtMdXZhOEhxYXNobkhlazws'@;
put 'ZlBOdXguJjhdQzg1Z2ZTM0pwQEZ5ek9OcjR2S0s4X29pMiRNKld8K3dmMHszKmYoOnRaOjxmKFMrJD8sMjAxeyxiXmsvKyhJWVJuMSZIMl1BKzdlTkQ8PX1NWzwxTnJraSw7QCVyJV90fiNHOFtyWGY/TmBEV3VkMlZ6VzE7X1FeOTB6ZGlHJV5yeFJEcVY+LCxZSXJJNjVqMllXOlJnaixxIk4r'@;
put 'd2BeL2UzWltuVGR3WTtMUllLUGhbbltNJWA3Mm86VUAmMWk8aFJ4IS5vJFMmRkNlUFM4ejs4XyFETH57PXosNHVSNlJGU0h3aXpsRnpUcENrajJtMnU+InBDZCt0OWRuP3cuIWV1YHgrK0R0K2VDQlR3NzQpK0B0XlNJKktAYU0hKjQkKHlqUkpmZVJyKCslZWhCUl0zaDZvVEBkLHdqV01pQyo/'@;
put 'QXV6X0MkbWR7TilwU1Z0Sl80L21WQH1eMXlgWHp+QjJJRXkpUzVzeD0yMm1KPG48S0p0SVRscmAqQXVydV4oK0A+OEt7LyYhNUVpaV1gWHhTQFladms5VGJRPWEocXsydz8rSWRqZkNvYj9PRHNDKWg6KmByKXc0S01ma3c7SSl6KGQ7fEZHcmN5QGsydWJbaStqRnlnIlo3KWJ0P1YwYzkkPy4p'@;
put 'eW0ydColdSs0WFhWJnJbJUZBIWpNRS5mOnJfPCE9ViRBenE9aERHOH52V35NS0JnV0pDJGRPTVEpcnZ9MHlXIjVLUD1nbXIrQyw5dDZNWk1SJjIpNVJBO18lKixbbH5QVTpRJThHfjd1L25aLyw5dHtERypLI3xdTFl2ayZSL3VePjpCblIwNUZfYHhvQiNkfkNdVVlmcDRea2RgYyVyLzlycnNt'@;
put 'Z1F4eUJEJilQMHpqaFRTYnN8Zz58bHoyV3FwRig4SiIpfURYPCVEYCt0byYvSVUodS5kOTZbaDBXYFArQz5uTX1MTENJdDs8L3NWfjlQZD48Y1ZNUl9zZkBXVjJ3QFg+L0lVYTJKensxRk9TZXxTXmAvRDV7N1skQiQpSTRxMVF1XmVmRXNTZzVtUXU/I2k5OUtkfjl1bFReWDdmWFp4bF5JYVgm'@;
put 'WS5UQC99NzluWkpwa0tRN3w3Xyg8T015ezRwKUhNSV09XkZKdUldNzRZcERAOVhMPj9xIighT0t4ViVRaU86a2AxREwuLEsxOENPQ0c2N0pwPW4mdlkpJl9lcSV4Pk94RGQxdDh1YSV1bX5oNjpRaSYwXT5uPCFJQSg7UV5tYGNIQXp6fWU8IWNBLHwvbygrcyYhWjQqZmF3M0paVmpDdFA/SzxF'@;
put 'enAzVm5wUTVGSDc2UCpnaEpLenE9MV1vXWx9NmgpdyN9WWMyR1syZ0ZhdkE2dyljWk0wW1QjTSM/fE5VdFZaOFJQJEAodE4pVzlRbHdXU1F4cCFzdjlCKDI0OGZbYnUlMlE9SmI5R1JsIy9ObmZiSyljLjtoWF9BM2QldUM3XyQzdChLYU9FJUMsWkAyMmYoUWBVLmJhSCk5P0k4a3ciXTtqKGdW'@;
put 'MyZjVkRld2gzcVNKb31KLnh9TzpNdy5nXXcyIUUifnNTUlFwTCIjSntjZFVOSmlhS0VmR01MQnpydTIxTnA3e3gmJHhlVCpCeUpAWiU1JDUoTGYvYy86KSY6aFUpWlJhRixfZmV6clJfeUdpMUpZNU5SbTcuMT9LOTVMVUckP2Vic3x6SWs7bC9xW0xSS3RIR0tsJjpefSsqPmV9UyJJVmJxZXxE'@;
put 'RzI5Tl93NT1oNHxtNWBUNXd2LlJoKEs4RDRVLzxAQ2EpWSsre0xrejsmRHheS1BVOkk2QCxTNy8wZXs0cEJPP2Z8VVFlLzNedDgufnJuXlppRWBTYH14VlRmeVlpLDRqe0VLJTpnY1llVzVmW14iQzVfcisrNV0+bypualNFPU9OKmBrPXltaTNPKlJqUmN0WipnbXJNciFDflhBZls6bTpmPGlG'@;
put 'dW5hOnRANG8oa0ViNksiPXRecWBATV17dmxMJSQ+V0VJZGJxNCYmTFIxRWpwfUAjNSN3YjUyJk0pOXxQYEd0KGRPdz1XP3QjP2AyWTVDPGJaNzdoPXgwL2t9alp8cTZrMTJyMURNfSF9XW9DMmlSYSh6d1k2K2skbSwhQ2RvUz9bKFhuKnZCQj1ZUUhdJl05UyUoSTpuLnEqbyRjO0hKeml6PFBY'@;
put 'ZUlEZ0ZeIjg+ZnRkPnEjNVpkd05ZfWcmWDMwX0JwYVlGRFZYcVddRT1FPS4kaitpRmhDKmFlQzRZPTd0MHhUQUdobVNuVT0obTQyPm19O1A2RnI+TSpYfWhNdGFRe0A0S3klelFaaUosXyo5RTpuYXR2JDNKTHArK3F+InptekE6TX5oPFFwWSg2ZVJIZDt+Ri4wSWlKQj5MNikrP3JCU15rM257'@;
put 'Sn5HTWkmY1Z5YURHI2JMeWR6RmklSE5yTXF2SSE7RTpmIWgjPX1JYUJYeH5mPUQuUnxOayxhQDVEYU9SZ2dRMCM0SlpjcVgrLDtZeDwjUFVxI2lhZjBtSE4iS0g7JD9hOXZIeEZ1c1A/eHl9NFFZKDVYMmM2Wk5RZHtjZGlXQmIiMUUiMytgNWU2WlFoYH0iYjxFLF0vNCRYX3VKXXpzQ3VTOE5a'@;
put 'XVt+VjU/WmsxJjUmVXR4NlI4bDxEW3ZoMzpuPyJBM1s8NFZGaU4qOTk3JiUsJW4/V0szVyZnQSNuUn59PGgqRzVvTS4sL1dXbm5NVEhATi9OJm10dFVwMzg2TF1aKWQvLjVwZzhIZlNKa111QndIYjoyPUMhLmF+QkxGWSNSMTxDe2MzQ0l8dj9oImQiTEo4PEd9SFlyMml3dTVfJVg9YTx0VSNQ'@;
put 'WUBvUnZHK1toMj46dFlNRHI1QmMrOj47IndKazh3NWkvI1F5OVY4UV5CZC53VT9+X3l7e207VW1NfiE7XjN9XTReXkFjdkJYNiJ2JCZfYi5SQ3hLPXBNVSs9NXwyS1ZQQ2k6Ql1PYkJbQmNxNCl5MClvU1hIJWs+VGAhI0ArJE5eUS5NMyxGKk9wNk5zUWkhfSszN0I0XnMlWEBrNkp8PmFwXiRI'@;
put 'KCIqUDVRbUdLekpEajRhKDZreThhRiMxTlc4eVpqVXxdd3pxZyx3N2kzekNbIWRMYl13PE5OIW4sTmA7RWtUIkQqSlU3P1t1bG1tRzxkPSlaZDdQbkNMMzA/YmJ8Lz5JZWJiP0o5X2ZUPzBdcyt9KGdET0lPeyRLS1l9KWsuRzNeXWZ9JkYzYVAybzBpYH58SGcsJSxFZlkkLlMuKzJqIjxhNXEk'@;
put 'cU0sYzw7KEV8PVVpRU1jUEVzKzE5cDE4MWQzQWFCWTpidWB4UCYpP1d9ZnhKUXozN1NaZXozb0M/JF9Pc3NUUjhxQFpgUTg9UEdCXV9ySjIoLyhQeUZyS3BeO3R0WExKI0w3SSZSLyxxKFFITXlfall0eENHKENeWE9fcWtXP0NLKUNmdD0+cEpBPXtTN1AvQlR6V2UwcnhrIiE7V2JxKGF8Nz1f'@;
put 'IV1sXnx0dHFrWEpveUcxVyxiIVo1O3JxTjZAfjB8QEJtO25Mey4hPn1waFkpLEl9PTExU0lwIThJNllhN1dNZW8/K0o9TzRQUHE5UWZGaHdDcll6fXJnez56REEhVnFBa0M9KkRQXXJUTnpkdyhpaVAlQVoxe1l6ZHBbb2cvRFZzcXYuVH1VeEkyfTF7Wm9QcCZURmtkfn42UjxUeTIraUVEI1Rt'@;
put 'O1h7X1VYM1owMWBWajNWXS88ZTEvPG1ZTyE7JENiYWl+YnU9KlFUa3R+VEtAU3YkKyg2MSgkYkUiW1ZIYjgzWTk5e3huLCYkeFU7NlBZQyR4Q3FtT2osKjJZUmBpN2o2XThPREgqPEc7TTQrLH5afHImai9XPUFbSCZBQWUmOChJQ3ZebCRDIzc0U3tvPVAzLk16RlE0QUlfOXlnRE56SEYrcGUr'@;
put 'VH1EeEouJjlZbX19V3RXO3dncix8XndRN2dNfGF3QHc7WTxyWiV8Z3cld3hvP1I3cS5aa3orfGM0ZmFTPGJzOVVCRXQ/M1ptZDRjP3RDb2lkWUxJdSVCSloiTFZrO2M7RzZWUG4qMUhdUTpWUk9ALzAscXFtdCt8TlQkdUlaLHBEamgrbS9wIkd3cjA+dkQ4WXdMVD5jSVQ/dSJVaC8lfiY8ZnFV'@;
put 'eTpVIiQ7VldzeWt4Lm1MPCQ8SVRuY1R2RlgpL1QjaCU1QnZ9Nz9tRDlBOldlKmYmb0JNdDE4Ky8wbmlkblB8WWlpJHRfbWg5ITdXUGlMZ1pOImw5L0gpdHxnPU8qXSVhN1JFOWA8blhPT0VeITo5a3toZHQsW0VvbCNEPjw5JDVLVypVPnNfd1F5diJLOFo9Kkp8Kkome04sSTAmYiRzNyxfaHBs'@;
put 'djErc0BgeHY+cGVGP04iY3spLjRIPz1fMVEoKXJHeDduW1pfdGtvXn19QD1JaHp5RCtDeEs2JTl+WHBSdEg5dS5aVyhIUlM3Z3wkeHgzQlV3RXV7eWtfeElVRWglI2YwPnJDaTooN2UzcjJzN2BpenheUWwqPnJWMSIiM29SPjNfIU0yQSNlXSFNV2Y/V2Y5UExeYFtCckksTSokbCpdN25LZ3p9'@;
put 'bUc4diM8KGMjZjA2JC91VGk8YntkTGgxYkVAfk0hXyw3YTshY2wlYFd4JmVMI15wUndsdFZ2P0ZFLlBHWXRQaCZkWkhBMnBUN0pweUZ5QShvLEVqR2cpSUFNTFRFdUx+bTNWOGZUVmtvZVsldSMqTDtqK3EwbnkjPEhJUm1fZDM2ND4kWkduREAiZ0g/a28iZS59anIsW0ljI3peOEd1Y0xNVkcz'@;
put 'USRDKzFZK3gpMUhiYkBNSzAhVkJiTjUlLGAuWj5NSytrZ29CJlhxLDM/ekYpa3JvL1IvLnFmeXshN3o2SiE6PGFseE9sJS5meD41X2MwaEovbjJ1TyguSXg4PGQmeG16JVhDIUpKL1g4S2diKmxoWUVpNWoibEY2fSplTHlqWVY9eihxRUw2RCEqUCVQc2VwcCk5RGtXI1B1XV9UWWYpaXFlRHpU'@;
put 'Sl1xYkZ5O3w7enw4cSlxfS88eEZ3KUw4YyxDQSFHZDhrWCp0Qk9DeUMhd1NKUWFJVWVXK09uaSNQVGwzaSZDe2FCN19we3xHSFJeaXk7fFIwT2d0eGhHQGp5d3x+IXVCWEtqQTptZ3l7TzRaYG4jcVMiRDlIJXg5KjJuc0dVfURRVThvMiZLKEopaCUzJGNfOS5SQXBpSXYqQFdQNyZaTGtSTGNv'@;
put 'OkMqdUJCVyZ2P2l6dj8/Jlp6UCQ9cjk8bkJUfUMpQ2pWTyY/Vz8mRkolNklWJDhsbCwzOnpEV2lZKF9aLiE0YSkmXzd1dzdtJV83enczSVtMJjtJd1Y4RXQmQUc2eUhhMUFGfjM3JEhEZ1Q1LklLPHI8XmhxdlckQU0uLC9GcH0yVjpmVSEiP2F1MDRdL281eX5VMjoyVyNPTjh4V0ZYUXsyPzI5'@;
put 'fUc4UWN6KjMpdjxWaDh1I0xRLCFrOWo/OHlgRkNXdWskUXloSSF5VC8ueV9DZURgYSk2IihTPyVPUU5XbDs6VmBATi5IL0VLbGwhcXRiMTNfXjkhe3FxLE5FVVQ7ZnNjOl5eTDFNbHZPVExiQD1ObVN2VFtwdjwuVWI2Qm5Je1tNcSkxdCV2ZGMqezhedmtJX0A0IyVddXJGR3ghWmRVcF8kTHoq'@;
put 'T1Aqa2FYOT5bciQ9Ni56TFVva04hb1kmUzdsUig5PGl2KG1eKzNAV0VwWzN1Tzd4ZWAjO2s6M01GJCVwQSQ3QywqMk88cUk2WnRRYHtCO3Zsd1trJEB2NVNIcW5pd195ZlpxYE12O0FTdUM5Rm1veihxVlZoYWJxeiZCYXdJIXVAaFhEb2duVXlNTWh9O0N0YVlrS0k4Zkk/PVdAbk9zXT50ciQo'@;
put 'ZCV3VURHbyhjP087ZT4kQXg+YCNjfjBJMzdeVnZqKGVoX0BTUmNJYE5COT5fbSR4YVF7QGQyQlEmayp0TSxiOkkqMzpfK1hvXjJ1RDR2akJIYCh5RDJZYjN4ajw4NX49d19+cjhlVlVPJEklN3k1QTczOEprOHhPJlBIelBUYFNXRDhIMjhAWE5jVj1bMW4lPTczYGB+NGp9RCs1fj5ffVtjPj0+'@;
put 'Rix1ZGpkSDNVUnA0IUc5Z1Jtcn1WOjxieUVQSkx2SDJBfUJkP154aT9OeCM+VXpFQDs5ejEkLigqa2guMj94JXAhd2BgdElKMF18ZHY+XyZmUkZGNWtjVXdpTnlmdFV3Tkk/WGApPjVbR3soN3JnRjsqTXhRVmZ4eiJKKE58bUJ6YixsVCFYWVhWZnR8bmlScjU/Xi5seXlgRCs5Rz1rUFdzLHo9'@;
put 'V35dMzxIKWY9MkZCUG5UamtKak9TTjswbWopdz4mclU6TD9RbzJ0Q0I/cmRkeC49KnB5MG5+KiteO3tMelhIcmdqQDMiKV1FLCRldD9NMlpAMXB0UitsNE8qZENoPXc6SSZLOWdJfFQ7d3lrMmllIyZ9fGdlZF9+KGIlN25+aDtHVG5rcVI7VWs9UmEwKWNLNDUwVV1QWCIpUllYO1tkV09BQE8v'@;
put 'c1JMeWc/eWovYnRJRClHOS5TRmNqc3heIi5LU1ZgWCUlQm8mRE1yQ187O1EmR0ElNX0/bzhKK1V7YllucixvTSk2SEpbdkt9byY+YiFyJSwmamNZQjUuZFZMX2o/XnVhIWpVQ2c8c1dZPGJxcWl1ekJiZz9eYSFbMWRjeWxPWVE/ZTB7ci53aixTOmohZi9iemApMTJpYC8lblAhQH00WFNEaGxC'@;
put 'Y1pGZ0wkTEB4UXpMIk9iYTpzXXViR3l3SDZYK3BLa3cpTHVhPGkzPkJWenp+e01kQTU9JU4iMFIlMVo2ZiQuNiQjIWVNJiJxS0hKcUIvYiooVT89TE4+fH07Kjd+V2V0Kip9T0xibFAlY0xSPD9AN3tVY1giJEZ9QGB9OXdXKUFtdnBLXzdiKjs9K3gjLmw9dW1McGxjP0tGN1FtRURLMlciWmk7'@;
put 'K1NPMlt+Xl0vJktrJDQ4PFZieSN1SDhsPnUyKF9sWCFldCxlP0wqMTFHaTZDTnJgJmtSPGhTQU49Xnohfj4rbUI8fTJIdFJVQXcmM21DQlQhYzRNcTNTSW1ja2hvUFJCaDhSbTR7Iy5+Un5IOWFSMlgwcSE4UyJZMGpLbi9SelQ0PUg/SS4qcUxDOTVxVzYieXxrMTZBdl1SSV0/JDo8cU1kOVk+'@;
put 'K056cGJ6NTF9WH17KnJoc09OTyp8US8pNjJVZ3VuYCtjWXZzRnNKK2JpdkZMd1pKYSsyXihEQUYpRFBlW1sqXl1kJURtaVJdX0RrVGp+JWhBKzU8REhbUHdbNEE1fmJ0XmlAanV8QCFxOmF7SEQmMlgyRGY2LCsjQGVxSGU1IXFwWGQyPkwkdDpVMnR8VzozSE5AcEBXTlAxTV58UioqbUxkZzJg'@;
put 'XXNQZTJUdHhGZWFpayRYaWY1cU9dMjtjWSt0dEE8T0dBQmxDImclQHJmRmU2ZSF4Nyp0fkdEez5HTSVnOXJsWHArWGVGbHROY29ZSjNOT1VRVilTZE1lRWBYMkdwWWB5N2JHPU1aQmM+KFk/amxNQjY8NGk0XV0vNT1GT3x0dEI6TlpGLyFPN246ekhNJllNNTdMSmY1a2t+cUowKUhJME1+I0BS'@;
put 'ZD5YVGZ0WCUhUT5kdis7Sk17WURhMkd6SE1taXQzMy59ek1JajUpdkUybzcwdEskOEY4ZnBPcTBwQFJlUUx0NmwwdE9vJDdUZSJ8WjdGOSZYU3wvdXc1LEJoWzxjVDxNcE1iaVUoWylLNE84eT9pLDQ4T3hrQ3ldNzcpIXJxVnRRPCoudkEiM3cpSCwse2doITNpQDZCX25aKTNGNlMoMiE8TDlC'@;
put 'Ykw6YjRWcHdAKj1yOEtVYipvTFUoa1VLdWZ4O10mTmR3eU5ib21DLndNcFpbYD5aU2ROWCprY1VnNHsoVSwraH1GMDg+dTklJiV5e0h0IWYpfVBbJWAmdkd4bXEhdCEhblZXQGA1dnM9WCQ2OThNazo7Jjc3JHBwciF6bX5ReCx1MlZ9R35sSGc8ViRTRl9uMSZkI2U8NHpVSF15UFIyKkJgflEj'@;
put 'XyxfKyliTTs0NWw4WG1wYjRXQ01KVmdmYSRsPVEmIkN5UDRdOGM2eSE+eHw0N1tvbiZVflc4Yyp4ME41Pn5HfDNYdlsoNjRORGN+bGNuRUwoL3pFLEBtW3VLQ1psQV5CXSR4SExHOkwiOEl0cUAlbmJKLCUpPEppRkFDRXFdKnpYdC8/Kj9VdkpNNWtxbkFFUGZUMUJJKmhreFk0UUxERFpEclU/'@;
put 'IlJZMXU7eyR2TCI+OGUpekBoZkU9eHZUaGIsckhPckBBXi8pOlhkLltXfTtNfU59TywrYllbVU8lI28sRSU4eWhdIiNkV0FjKT4uYyRefUlGaTFBbywuMCtJbFBeK1FdbXNffCRxIzxUKiFUNVpDP0QpXWE4Zk50NykrZi8wSH5NLGBqOClZbXoyP1R4Z2cxTCYia2VQWC86Q1ded1A9flVCWnlM'@;
put 'TT9lJkZ1M01Kd2xNPGY1NGdLOFF6OyhtdW5dVk1eND5KI1huSWlSQTFRPHIkWmo2dzMvO3NmKCg0ZWRLQVcramglVn4seVtbcUVrOC8iQF8vNWpSVThFQEJPaEs5RytNNCV1Y0QhUVRSb1tnZ0s/NUJ9LlZTW1Q6MXclJGxobihYTDRBLCxnWTw+MXdtYFhia1dMIXtAV2dnM1paekB+KCtXKTVq'@;
put 'S3B8cHxUamdnYH49Inw7PC5+SSVzRShgIkxvSjJmYWlaJDtlSndCZ044WnMqflVVZFVoWHtGaWdEKyo/YE0/TXhJe3JsQWppfF1uJTwkblVedlB+cjcpZm0qIWZffDhOMT1fYyVWW1tAaTVQcSVGfFEzYlhgVjlLRGdaRHh6Tlg3fWkpPWAsfFZyUkg0WUYpSng/TSEkPjhuODIxWS95Yzl9Pls3'@;
put 'L2xgc21QI11sKjgkdyNWaSk2bXxoaCQjfX0kSFJDKVB8ZUdsQ1ZfM2dXdiY8aFBAPGJwSlRmRC4+I2x+UUcyS2I7fHRRbjh6S0crOzl1JnYrMSVvSktgTyRKbHxfVV4hNDN0XnlAQjFxen1SO1s3fTJ7PnpfakxOaE8qOz04YlY0X0xdeCFQVWMifS9hXUpWRVcqXX1rfEphMXV4fnRLUFNYTFM+'@;
put 'NysyZGpCTz5jfHxeaitmais3eFlDVCJNYXdmaVpdNUd9R3pWK3l0bzUlLG5dO09eL3hGfUtTO2ladVl1NU08XyNVbkY1Y2htaj44Sno7cnFoc3hnTEo1aUdzYExhbWo0ZkI4ZFpOSlVoTiJraT9RSF1DPGFUVF1LfWA9LnJ4JT50Jm4uOEdIRktlZE1fL0o6fm4rSiU4c3heL3UmIjYxQ0QwOVZA'@;
put 'MiN6IVRIbCttTXJyKmg6LDM2Llgqdiw4K044YmdoanhXKGErcylBfig4TTNgZyUvdV4+VCMmenJYfilNYUtMYUJ2dGNyPXdNX0owOF5YOUl6KVohbX5jbjFLVDhwTk4zYn51MFk3Zig+Oj5uYlNFNSNCO25zbWlqb18vSDZ3ayZwUT9mUiRjaXYvZjtLVmxMfHY6dmZTOUhdeyR4VjppW2U+MEo9'@;
put 'S0NjQFJSIm9YPkNQUzpdflE3UlNBPkcrQ2hndm4hezo/a1h+LCVILGdTM24sMTdiZjw+N2I1M0dfJXRXVFdHbTQ6YUgpLnlDMnFGbFE7WFs/MlttUWBVZ2JHNDhHWjVlLFNzRGdTUWNiQ3YjYn1mTXBJbyY/UkZ8I1NKXkFVLE9xIWtwfEI1VDFkMFloP0RWXU9VdlNiSlosUl84YVFVTSo/e29I'@;
put 'Lkl4KHNpcSMvNSt+e2V0dXQuUUx8Q3s7eVB4dmlIMDFuK3FtNjY5fSx9YWY/PHBSM1NmRzokXS9mS2RDN2E7aGZdO1ZDYSQyeWEudzQvLzhsTlRLMXFHJjdWPGMjK1FsZ0dXQG5UWmttXmJTIXN6ZFsiZih+eU9fPVk2MSZpJjxWWzl1R0ZrXT9ZWjpMVGRbVm9SS1p2V0twVX4yLiF1QD11UGR8'@;
put 'O2NbcDNpckYkYGt3VDVZMFdSa3lLZ05LZ0w3dX1GO1t8QF1QU0ckfkcuUl5LUj9IWG1sTjY+cDp2PCZKeDdQXVcjPFpeZUx0OitFKE9zOXtHJjJ9WmBVNDFwWVkkbGQxaCRLdCV4WTMlL1o2KU9tJFBbVk1DL0VqXVFqaSxsIyxrNSYyRzYsZGVMZ016UmQhPC5EbncmWj0zXUM2di9hdXo3RTFb'@;
put 'X3E1R3smRi5VST0pSHlkPStdYXdtczglNjtCSUpTIyo5ZHI7LCMlL0dCeEM5ayhAYiFnL0NWfWVwNElCckUyOlo0OVMqb3IyVjFvRHd9QHd4XixuKj9udiYofDFiY0JxMj5bQzlJaU5kK0dZW21qIjBoYl5FUVtSJU1FQSNub0YkdXVPXTxHR1BUTSpyRSxvZDZQNGMze0Z2aFo/LkBUPE9yITc6'@;
put 'YXZdI14hMVU+JW5rUVR8OkBrdX4uMD9oRHh+X2p+VSN4eUhAVFpzJSN1U1g7azZ6VFZJPnJ9Y2dXOlZ4fFozKlRHcDJVV0g1Mz9+NEsqMFBnakJWYjBCLndOMChsW3drS2c7blJfWD89NTAkIms+cTVNUSNDVztCN21iN2AyOzp5QSolV2dmXno3Ylo3enw1S21qQFd8eTUjZFRPdUlJcDVHbGVO'@;
put 'Q0QxMCZwL2p9P0VCYSpWSSw2RF0rPlA4X1BJKGNnOU99T0drbSgjfShVXigzSUhaJHNwJVQmSlpAPmBYXyZrYl8iJE0rZ3hmVCZ7JC4rL1tbUThKbG9FQFVII3NzaT93RSUreXNNS2tCUX5pV0o+aVh4KWgxSStqITBhSDpJKnFZbytQMi5FZDo2aG8wN2s/IylsTmxaVyw1M35pJS52c1tlMnJG'@;
put 'JV1mbEVbWTgoXj49VDdpTkBxNDVnRUo9TVswdy5DeVtxeEFpJTxtYF56RnxXNFVYQygkbVQjXkpiUFowMiVqRTB2cl9ubWc9VXsqKTxDSFQ0aFNeUlBeRnZreSp6KVg0VjJ2Z20wcElDOUMjZ1ooUiN7dlg8RFFqT3BFSWRmM2wwLGJxdU4oOkc4bSNiU3xhSDQsdm1KL2dgczxsTEBkeipQbHcq'@;
put 'XnVAJThscXJdJC4vZGlAfHUhXj1KQCZ2UWciQjtJXmlwfXk/ezdObEU7dF5SNXdFanFobDZJPjROJERBdCNCPjZgfClBbSpsL0AxdytoYGgkK1J9NV5gbEkyMDpaYU1lczlvJW1ibiJbeXouRlkxRS9Ya2kkPH0yK3lNezArQTNHenlzOnlzUGk6bkRVVnJQZDRjPX1hcWJILlc1TH1gYGlAUiM6'@;
put 'O2d2PDJ4dGRPZi5bYCxaaiJSRUVnWm0yNU1wYzs0Myh+MDZ6YEx5XU44ZzcoST50ISx2c1N7JlsmZztfTTRBYUZVVCxxQnxLUCpLe25UUW5MdUZMSyM8fDJFVXk3O3FJQ30zUVcrYUwqazVjaUJwdjtpPHtEaThLPUhvNHNJRjBkJXwzSHdobHc3TCZqVlsofG49ZDJAdy92W04weHJdR0FhPHFl'@;
put 'TW8oc003Qnh5OypvR3EuPzA6UjlJVU0uTGQ3Zzl5ZlRQWylXJSVmYmsxTlsyYkNWME0mMHpgQlImLjwvND05d3ZeUHxaMz87SmJjWEZxIi4zRT14KHQ+UmEpQG82aHcwPm1vPmtWZW5aXmBPJSp+PTA3Qk1SbUQ6UTt2d31dOGtVTSU0ZXohUHh9LClQX10vIlV0QypwSDhQaVQiXzUsfSIuNCNr'@;
put 'OnlJOWtEej9wZnZUU0dmZUBnMmhXdD5gOWtdIkkhImtMXTo1V0V3ODl6QSRxaHNSRjJZKDhEM3hPS2hCWWhMZ1VBRldpNXBxN2ZJNH16XihUdHhYS3BqejRBRnYzWCpyYmhdfHl0Tm5ZMl9+OTVzV0JRRVdmLG4jQVo1TDxjWSROQjY8X3hIMjcoPWdlYDFQdGc6WDV5RExrblN+QGJtcHtObmw1'@;
put 'd117cW1ILyM9UihqNVBueSRLY01LIiFMWlddJipgI0dRM09WYkZWMjp+bikycCZVRSwoT3dpdm9OWWpIKGZdfF4wa15PJnRNbU9pMns9S2wlPjpdMWFyRSVAU15qVkNTOiokL0ZNQDgqV0Rmdms5bSF1aGdSbm1WNlg/O3J7OmFEb1pSR0hjK2wxRVd4MW5EXTVIKm1CQ1UjdFJmNHZ7TEdWWiMy'@;
put 'dGhfbTNVZFdVMmlHKitYcz8objFmIyFxI0k5WnBVdVBsWlVDOkoqSy98NWElVnU2QXxMOSFMJnV5VkQxNz07Zl56cFY/WngldzJ7ZDNIPXNbJj0oNlU4dEtMW2NXVmdBZVtYUyp4Kn46S11zZW4yPGJbaSY4PWckUnNufSkyTmojRl1WY3lzZmxUbmsjZ0NAU09mRVgmQVo2R3oqOT88YnU1XTxI'@;
put 'elteJCNHJFRmMWduZztHUjlEeX0paCt0fkwsJiQsZX49P04wU1ZGUk1uRTZJei9jN25HYCQweGM5YWA9OXA0QlYiI2ooUk5pRjVjV0hMRz5ncUxBUDI4WXAybGRKRTdBZypXRXNYIyx+VFlTOGg1VnEiejkyKkwhMTNzTXlIKnxdVXV5RTcuWzVzQVtBPmQ/aVB3aFI8OUUrKStLcn52RHNackQj'@;
put 'UWIsXSM5ZyZ9NWx8YkxtMixsYDZXd0xNK3YrWSheOXA+eX5XUnY2QWt0Q2JETmw5als/fGlpajRAWj4/MVc/MndIWl4pPDlJa1YjIW5QM2FYNDNFdkpGSFVzKGI/a2dbdUpSMEhoNkMrUk5hT2VKSilWK2hiVDd0ZmkhLn1LTStrJT93dUQ8d2FdLFNRcXBeKnpsZSQyX1YyJUI1bFZdU3MhWHF9'@;
put 'NDdXUHVzcTtsOUtLMUViZ1hdOVF2JVVCQUpET3FBIzQwTH0hbzxIOFplW2IiQyR6NX56fDt9MUxAb21aVkdAej9Ofj11OjlOLFczKng/XXhGVl07fl53KVNwVCxUNyt3LzMhViZMY3s+ZkxDb3I3OTl5PlJGbD9re0coczE5S3AqKj1LanYyajRZOW4uPWg9OGteZTg+NjglcWBqd1ZrZUlCeGFL'@;
put 'fU0kXV1hdVpRRHtOJTV6bm5SWEkhdVZNJnBJUThRcE4oXygzZkkmbjZMS21NY3oyY1BMKnxtR2oqen4oSk9eN1o2UiFdUEIlLCpJV2hZNjclL2I3eTk2S0diRENueSJrUy41alRyU2J1ZDNsNkkmXUxdZikqUGs+R1daak1fTjJEVlpDb29NMWo8UEVHeSRTXig2Tl1DMDNfTkJfYjIqLihQPiM4'@;
put 'InpTUSw+Xyk1bEJidG5gfFsydyROVUR6V113fDxkYzI9ZVAsfjorTXBDN1piKVphMHkyT3A5JmB5XTxaRWloVE8wUzw3e2x3RnV8THg/T0pfcHo8eTlCVzkrcUEpUShoJnRpVFpXKURXYCEhaU1JYntiMWBxSEQ+cVo2OTgueGVgPWsmYjU5LzA6Lz9pcEcvXjp0YjF7RFNTYmsvPENsSEBYMiE7'@;
put 'SWo6U3M2U2hhOWYqR153QCg5KDtRTS8/SDlLJiosNExMUmNtISxKNVtyezp2MDtqcU1ROm1aVyRVaHcmTCMhT0JuNj1yKEpEYng7eFJNPSs2bDJFPyooP0IudUZhVnVQJU55RCI3UH1odS90Wk1WXWNvVSklczRMLFVra0NDW01uT3R3b3UoNXlEQ0wieys1QDlvaXtDMEpLcFtoaX5eREFVUUAq'@;
put 'ZihkXmQlLiU0Q0t7YTl3K25KMEo3V1k0L0BIWHAqWCkoOk5wQ0NbMFkqYGFKfTJoeH1lY0p8KyYjfWBBJjV0OVR1Umd6QFlVZiszXysjX1ErKkAlcTtrRyFePlp0I3x8YD1IRV4zSWpYMTY9alprQzZ1RX0ocmAuL3lPXiw+JTsqV0d0cXJXczBvZ3p7dihHLkxYTWhgKldFXlFtP3pRcVdjLHAu'@;
put 'JDhqWTEjIX5FUmIocjd9WH1fNkJyMyooREV0WHZaW2VsVj8oWW0veWhKTyYiaWBaNXoveTolNH5QUG01I1B+TkRhdToxW1FxXXsjPitRaWZyL0dpLFUmRDgpOjt8aV1STiIuZWp+e2V4Ijk5eyZePDY1OVhrL3hIP1tjL2dPTCxVL1guIXBsKn18L2xaY1l1RFp+b3EzK1s+WUApU2lJNHA3eit5'@;
put 'fCl7T1BHRSVFTlFfWDI7YlFde0dIWy5DcC4yJSpVSXlyOjFreX5IezQ9XUlqQnRWc1FMOiF0amQoMV57WU9deSZWS204ZV51Vj0vczF6WlhzIzZCazU7K0M/d1AhUSFGa1VdM29rPno0LG1obE9NWDIrRiJDWEspIS96SU1hUW1jSU50M1A7XlF2UF8zPVhlPCkrd2NYbyQkWC92VTBjO3Nod1ox'@;
put 'KHplbGJ5fntUWjhvQCtZOyNNPTFXe3ApPlsuQFgrci9AOyJGKGJAKzVeOnFnOWk8fmxSTyxfRndgc25lQU5GYEg5RmxwdT1TQi5MNCZHTEU6TkIwJHE2YCtoJjRAVnA9Wz1kWygudVQ4eEkuej09bHJYSipkbjVlPWlSOntDVzUwVj1COF8qfT0xZj9CdlJSWWdSeiZ7cVkzcjVndyNQWTg1OEAq'@;
put 'ZiFtL3dUaXFnMEZyXj0xRkpPdDk8S0Q/PCVbK1A2RlBSWyE8P3tCaCRwQ2RgPnciSTJPdT09al4iXSEiKyovVDdwLD9wOE5GS3B2cHh2XXlnPGx3QGhSUzYyRCkwQVA/Ql5YTCRKWk41SmVSPUs7amU/LDkpSnNiUVh6MzJKNV1wIXtSXz5vQnZGOC9AT18+OX5Uam9oUi54aDgkMDlhL0tNNT9k'@;
put 'Ljs3WWtMP1BGVURtUn16Ykp3VjN+UTl0dj84ckFuTUMpOnd0SSJpWnBxOixlM3oqOVBZbixTWExaSkc4SncldjJoSVdTTkFvMzllL1cufVV4Py5CKF1hJV8waGVJQD1nW2QkNFg1Jl1RTVpRJmRqZExLVXJPcHxeVz9BJWtZeSpWeWdTZlEoMEJoMXlsIWxbMkVmVlQveSxuJngyQ2MxZmJ5ITxs'@;
put 'L0IhREg9Ly4vOiRRKWdwLlltUGhmWnZSS199PF5KUkAjQUV5O0clNW4wYClML0ljV0w2LjJoTSl1alQuSk05RjRtVCQvZWdDdSV2VHNrIUFXVn5hNj1RXUt+bjFvMWIwWmNuLzt5dHsud2k6ZUNhJjtLK1V8PzJAVWttfjNnLzRAKE0hTTl3elhKfCxAdjo7SytNZHJUeGtlLk1LdWEkY3sqYW9b'@;
put 'W0dVZGxTbjZGTn5GL2FRI04lak4xT0FATS4/XmhvUEVmYGl5IXQuJXt1W3JoOil1a3hvPE0pUC4vYkZYOmFFPDZKe3dbUSZAYiVLWFtHQFJKajE3NEJjUikqWyQ3RC5SR1hYYiNRL1R8cDosMls3KEhhKDUqeEs5JEZUSF81UEc5QEguaktAPk54Ok1tI3AyZ0MhdyZtZ0NwImpZMjo+SE8jPG9o'@;
put 'M0s2bVliWS4xSUtaaEBiSzRkcndPRzFrTkA6WmY+XXwsTjY7Kl8iZiFfMjp9Ti5FbyUuaFBLQyk3ZnUkVzhMK3RUUFQjbzNoXVtmI3VOZCQ4VkJAJXVQP2gjRzdZNHdpSDZqMWUsc19ZSy4xeV9BaHVzZjpELixodnB9PWIuZUFGOUdfbWp6cSpDST5tXTA4XnR1Pm9+ZTVTQVI0ZzsjaExDdklA'@;
put 'UWksaVJGQik5VVhsTzM6RTg2dUk/RC42QCR+Sz5DeERdUylGfUpaMU9RRFpjJmdURjx0X3B4P0JzRTYuM2pbOzJVVUppLkx6PVE/RFdQU2Y2XSReSiVTQEQ/a0g+I25gandGN1ZVR1p2IVZjNSh0XWlqcTViWDVSb01JN0BfMDxLKkBseDlZWSxfSD9YLDg0UjFEb3p8UzNHeGxLLlJGUHRFfTR4'@;
put 'fjkvKlRJLlBWeF0pOithZDllTl5iJVRgbVRmUmkrRylCTVVTMmVUV3w1NTtOcDdaWFpCTyU4PHtEaTtWX1NiYS8xPSZKTEBbREEhPFZQaTpbfEVGS09iN05eJklhODcjanIsKiQrOWhnP1IjQmB7SWY1WSx1L0Y4SkxDbEgqemErYDtPaWtAXlF6XUhGY35NMTdtTTo/SFIvNngrKXNMbzR3TSp5'@;
put 'NmlATHxJSE1oUlg1QX5BMTUsKCE1cSVgTGVvIV9Faipve2BuZSxze35+dFRxM2xkNjNeIU1lajRITyR9eyJhP197QlJ8KDpSJFpzV3BoO1IkeVFeQWZgVVNfQSl+dFokbEtOLH1EOH0obnopU2I+eVdIQzN2QTFVVzkiMjRlIUdRKzk+Q2V3cEpQMDMkVyU7ND9Tb25KPH5Mc1ZVajVBJkFeeUhF'@;
put 'UkI1NShmLjF6Rl1rR2YmLHRzOi5OZyQ0UEYlPEQrdkJFS1pTUytPdVtVYXBWQTwvblUhQUh6YTpEUjp8b3RKe2ovd0FnLHZxSXNEKE5tL21JYypmTz10eUxeJms2cCJRX0EiVnJCM3ZzYkghLjQqMSJWaj5dKFg9WmY3RztKWEVKOUI2dXVMa0ptQyFydHVTbTNjZ3luXm1SRiosSCxYSG5lNF1B'@;
put 'L3A4TDBXXy8uXWI3PHBDa1F3QUpLdWRJU2o1K2k3NiVhaUpAcjFtUCVocj9RTCF2eVlSODpIIW4haSxAI2A+X0xWfk5bdjtVak90dkIxXWRnLlQ8SDR3ckdoQkldOSFxY2kjOWQkYjhkOF9gJVFDbz46UUhqaWJ2bSpWZ31rbVk7NDNOUTA9TCh4bVZASCxVNVRjcE44bmgidkNXOU53YStgPlhB'@;
put 'R0FnREJ2cGU4ImRSVkFtZ2o/UlFrcGFGPXRabnZsRFVZTyZfTW1uPVVlWSo2Sn5QNiIuVFJEIVNJY1U9dXp2SVZnKWVkbkp+OX5aVk4rZU1uNV4jQ3dge043Qnt4TXtFUiswNWQ5aylrQylDclsyOH5RNmZDKXk7V01DYEQ8QDE3JmBSayh5cDVfbXVkbGBbNk8qTjx1dDxvMDh4S2RtJD8zanw3'@;
put 'ayEhJVg/M3RIeGJxeXk6Iy5wODE8I1VWe0xTciZPZ05SSGdsaW8/KVFjWypmbS9WaUwhZ3tUdm1gWmZAQTNdaVBqJWY3ODJjXWFPPXEuWXIrYSx4S340PEM1KShMI0k3aGYuRDJHQyEkP2NfKShDVklXKUE8Y05TLDtAOmVKTmdweVckbWdbR1ldaiVrdTciRyEzI05IaVNSImdAbGhfUGMjRndR'@;
put 'NHkzPWp5UWIjZHhzM1UjLmdNJlp0bT0idVEuTUF1Xn4/fWMmVWg5OEhCNnlmZ1l5T0ovLHhLYnhtUj5FT049QGcyUiw2aThRMmN0YnM9M2JDfD9jfjF2LE5RQkohXUsvW0ZSS1NgVmZUUzJ+XXRpJkR6bF9uZD02PHVhQzc4Zy85IzguW1FUPjFRJik6V2xzbzpnUi96ZUoqbHBLOzA0SmZhWTh0'@;
put 'eDNRVXQmMytpb1dFTlp1MnwhUWowV3R3LzRNbi4wMEsjJElmQzJecmFaVngrIUZXXVJSJV13QFU/akUoNCQyVnYmY3dzJEViPDFMN2E1Imc+Kz10N1VDLy8+JlJkNUhhYElEIi4yTFNVVGh9NGRnZEs3Z0ppVTRYUkBQeXU9IVdYeVQ1M1NGYi86K1lqUGMseD9YRFU0JGM1O1dmY3Z+eFQsL3xT'@;
put 'IU0kIUAhaHl5aD0/cFNzTipjJU5Re150RE8sT29wVEVSL1Y6Snp3Kl1lUkQsO34/ND9vNkR2Uit1WCgmKGdefk9oS3IsTiNvMXZsM0lJaGlQdCZIRkxXWltgeDhITW1ffE5RIThEQ2xORjNAK2d0UjBVJl0rWzU+WlEsUTRzVn1CNnFaZTguN2RDO1ZMYn08eFRjSnE3QlJ1NnEiOUhsbWZ+U18o'@;
put 'I3UuRiVlPSEqNUNQWVheOnR+TCYxaSFnZCVAO1ZJejRbZm9eVDlJXjtYeXU+cyJeIV5iW0JUfFlQMlkmSlAweFg/VU5kaGo0UVNBPXd8MiFJSFM1VXdsO013VClJJEBpK2BKXTo8YENGSVg9MUN5c2haJnQ+eXBAMmQwXXxjOnhlZ1Rke0MvPj58fjFXTi93K29eVG5ML3wxIT9AeWJ6P2UxJHxu'@;
put 'L3M5fEtSSiJCdVshI1BfTHA0SWg7QEw1MCRfZTZIQkllNFFWdVhTKmZFbixFWjZVIVkmWzU0Y1huSVJvTVhNMzhSUitKTnVvXStxQnkxXVhyNmZZKHsrNzEiRU5mSDw0eyFybDAiYEAzVHk0TFVDe0MufCRUQGhYMG9BcSVQKnVYYF1VckJJbi46I0V0clIkNVM8WGp+VmYpODMjbGdFSWtMczcl'@;
put 'e3k/bnRQdGN5Ln47fktDNz5SKCQxRHJYU2NNQDk1RCMvJC5leWMlL0tYbWwjcCJvPWtlPFIpdzVqUUUhL0xfS145KnQpbnt4JUxLVXFYLDRwQlsjfGdYZzhFbCMkLyJVYn5afmNOaW49djM3e2hWTzxZfDA7RF9zOEw5dzApNGU4Sl9pQjN9QjopJmJhYj41bEJlaXxFJFMrRDwpOSNoMnRbeWdR'@;
put 'R1hwdzY3JHosOEdqKCohT11lY0lFeWFiUllaSkB3WEA0Pk14X0pdbkpqVTEsRUByPkVKVCojUj1iblJtI05UUmdLUWpRKD8pa1VJd2V8RGE2LyZtPVRPWmA7UlRYWDNnNGtxMWlxfElUYz1PKnpKPSs/IkRUb11gfCR0cHgre3p2M0l0ekI+ITIiYkNBaXFmfXRDMjhpKCFGJSZVdXNvbXs5JVl5'@;
put 'ZTdTTmhbWTJMZERYeGhXJkckRGFuS2ZnaCxESGRwSTZjTF14REJTOjIwOHtsYmJUKG1GcyU5OFNWJUA7eXdJUXdHdSsrZURaaUBLailWaGhwfXxvOX4jWSxuTHZzOFBSZTRGTklEPFBhJDZpe3dAd0FwNEw+RlFUVl19cCoxTGJqTjVGIm13NipLeXkkcjtENU8jZm5DLj1FfHU9LmZ3YUNYIVI6'@;
put 'e1ZyQW1ZPmBlPnZ2RjNENjZFRUJsNm8rNFFaYFNFSyNyWnd0XW49XW1ffVRCTEVwemo3JD1Man5GaUFPZyhdWHtNTF9DSF9CSWhmaWl5M3QjKkUmKCF0NF4+PlI+TlJvYnhUTzFXRytbOHgqM1R8YntWS3lZNmQlZkQ5XmdUdmRbYkFyYDtdYU1aKkEyInF3PEtAdzBbK3lsfS90e29XT3QsOUp9'@;
put 'NFRkajwvKUxlaE5re1VrWSMpfTshaV9EUEFqPG1KTF9nOFlOVHBrdWU6WkREOTs4V0lQL2p5X2NiVW1wYD5tKVdOJG1gX2ZGQCw8U0JDZl44a354WSFtRyg7ZGkrdlJjYGZrLkt8Om0lYm9lYVIpY3BLKzx1TCxBczI7YmNqd1FGPTUwUytmLiY0aXI+eko+cFIlbzYoNVNkfEB1TDRBSW5DUShI'@;
put 'PDBmJUouPyVKL0lORWJkO3pGSWVOZDlvKW85UXxHZkwlbCssd3tJMj5WK2hhUmwycjFgTTRxJGJxc2M+X2hDMDBFeyQyTnckVWt2V11uNElxWiRVQ1Bte2xGaTptNikqPyheZWdkSkJ2d3VzZG43Y0NKIilwY2huOHVMI3VSLns+MV9VTW9TX0d0K315TXxffHczUkhUdCg7QUQ+eWU/SWBpUFR0'@;
put 'UGFlNXdRcGJLWGBYdFZobGA2PHdXWDVYPU0mJUQ9LFpwKV90bzRLcCJ9KCFke2ljWV5seyhGQyE4MkVZYTddRCQ5Z0kvQExkNH00JmdnYSw1VmRMMFB4RngkLzdvfFdnZTBqVUpzWiR6Lmk5SGsvdT1SdHU+bltrZ2QkKFYwU3FVd28pMHUqO31zaXlKeShXJGM9LEslUDZNLDdtSiV8X1tYd1pb'@;
put 'Z3tzPTBXRTNRWUVUNCR4eTFfRXB1NDVYXnwqK2JQPSFNcTshazF8I0NsRDo0T050NnNZLl0mWUJ3WzYxI3U+U29LQTtSJXRDRVZ2UyNGPS46VDh1bGMlfXN9fFN3RU9EX1oqLGh1V34/TTs4NzUsWkQrPFgzQDF9Vll8YkxrTiUsRzExfWx+TV41d204WyJySCVgcn5KbU5rQXUsKihUTV5JKXFl'@;
put 'Q253K0NbSChjRSZWcnJYKnlYXVY2SVF6PkwkK2BGKjN5TDssPiYhPng+R0plNHxLczg/WSkxc1RqKjVXPFljdnQoenw1IlhYRTZVdVZsNUZQb11zKC5IWX5MbWk8X0plPylrKDhGU2pRaGc6Um1re2J9YT5GbzlwOTRsZiQxbDx2STlHayJnVjw6blE9dXgsRDgsIXFBVmo2I28vNixLVTYyKm9B'@;
put 'Q1RBNSxGYXxDJGZIcmNlbHJnMGZZR3olOkZnb2NhK30mXWs0WyM5R1dkbGVfI1gzYG83X3JQdGlbSzhlYFo8SStfPEhxWjs7MT5VfF8+Z0QzST9SS0FPQWV+Lzx7bUs1RVFyWHkwODZQWzd3WT8udWs1JTEyO0Q0UmUoej01OHI/enV4XWB1dXIobGZiWU40fFFFIVNGfDZeTmtHO1VoVk9rMi48'@;
put 'L09bfj1UVXV9bCpdLD0pNGNHejh5Ok1bNDEiMTJzTH5BbDp8OUVmNFc9eG1VWGhkd1t8aWhjRkp8SHBYMzd8MDxRWG48RHVxR35NSTI/S2dCWjY2WD0wIVJWLzI7Smo8QSlfanYzWlMlLGowaUdnMTV6RyprNk08YSowLCMhSE5eKVBPfjk8VmM2PVgjdUpVVV18Wld7ciJ1PVUsYTRDeEZ9WmNL'@;
put 'eS9kQDspR256Q1pwa0dNfW5MKiY1RyYsals3SnNQYkBGbFhvbGhtW3Q7YXZJWyxOJlpmI0NIUml0RUhIRDk9TEVZK0dAUSUjQ2k6NTkkTHh0NCM2cTF4QkU7YS5daG8kXj8ldURhYHFpekQod3ohMENXPkpEXT5YVDpXXSptWG1WUi9xQ05QWEw6XVpWRilIKihLcDkrUkIxWjpbeDw8e2lfeE5b'@;
put 'Ml1bR1MkYFVuY2pUOk11YXJLJWE0ZCYwe25hWVRdVXQ4R3F9LCJfa3JJZGhdZj1TfVoiWCI4dlh8MnJDX1EiMjZTRCldKHVDIllZKlZ3OS9gJCo7JXo2fXRsfTNFbEkhQE1CJHpzfiQwfHJyTSxXSnhibWpZVm1qQldqYWpmJml3dz5JTGlQSz86REshZkJqSEFRN1ojZyFqZ1pGLDh4YTM9ZCZ2'@;
put 'STY7UE9MVVBheE1afmc2PXVSZHJtOEhzS2BwZC5raWNYLmZWMnMvOSFReW5Cb19PcjFgJmdUdDt5PT95JVV4ZT1EPFZZem1UWnB8TXJZeVg6UmhBc1MzJn1wN1oyNSo6eUNjWDhNVyRXRHUjY2JDIilhVVtuZjYzLFgpXyNeUn1aLDgmWmdHcCxJZGc7KyQkQCJSKGpZOlA6d2RxOFpuUnBpdjlj'@;
put 'KmIyN0FVSS5nWm46RTBLTjg9PzRWRkAoNHIyO0ZCeXBJT3FoP3tXMGtMVzl4e3R8Tz1NYCxMVTJsaUBUTm5bTmp5QGU0NStgRiRodyNNPkQyKE9QRTMiOlc6eTdfXlY9aSI2Vis9SkV5dy9DIiRFMyUpa2AhVE0mQ2w8fGRoOnMkaz8+dH5ScXEjXUo/SnAhRjJ7SEYjUFg2Nk9bYmhtNytlSSRn'@;
put 'PyZxP3BJNGZDcDNYL3FDVmlKSVl7b2kkR0BgNCZ9bjhEVGw1fi5uMnl7JXg4LntnPlt1ImozcWt+UTxGV3tudD1nMShtW3RFN0pIOTxkND5RKUk1eDJlTW5QfkZ3KkoiLF1HW3ZpUi83WlBdKkRjdU88Rj5IK0I0V3khe0wiMkMmNmEsJHpQY2J3e3Z8QEciNy5aJXcmcWI1Q1klJi89Tn12Lktv'@;
put 'IW17Xzh3YlRRU3dIfHQwOGM2NmcrZGtvXWZgIzE4aFpGXU0kPWV3akp5Mis/Z3YsXzVFRS9vVk1bbnlRUn15OmgxSGw6YD58MT5NWzcscVJ8Yl1FaDBydCNDW1Fucyg/UH1ONUV8bWNPKnhKY1lUdihwXXl+LmdBLy4yaWYpYitBZ0heY0wkVGpzIiR0dVBGcW59e31Jc1dTSjxWM3MkIyhDTHtl'@;
put 'Vl1lc1cmRXV+YFA7I1NfI0x0TSJsOVF5SWZLfEpdelBIVzR3YENdMUBKY1p5VGBmYXlJeVhFNk5EZytkXipPe25CbEBqcX1aYU5yekFqZlN1UC9dZzZXdW8oYlF3bjlATzYka1dzTEl1R3JMRTIlRUw+aEV4NTxeZHcmbFg0NyhMXlk1SlZaPiFJVlRZSShGUSRAJkllUTRCamNTUCMmUko6bGsy'@;
put 'YHwqJVpJaT0/RkpRPmdsKGhFTDJhNXRBdVNvcmZ2LG42KXBfK1RqNEYzNiwuTjxsXVB6V2UoOys2VlclWCpFKClHNERhTVo3WDZ0RGR9QD9eYUR1QD13I2k8LyxtY0A3MUNDSHVLaFkqdzs1aSgrKzlST2xNPUZzSSNbYjtkZUczKExdZz5kRyIrb0BIKU1KfDxCbjA3PFtWcz9PU2ZZakNXdGBp'@;
put 'dD5lYTEvSk9zaXUxLz4qST42RjU0JGNdLGIzeCImLnpSaFlXMU4+ZkNhZGtQRWgwZj5ucytNOzElJHxJT0M6VEg4Y1RRO09yTDUxOjBqKDs8JWlNKEBfZEAwUno6dkBHUnxgLDw/cmdiem9CQiVMWWciT3NgRHJ1ZD4yZmo+R0dCQ1VuVmciayFgdz9BUU8yK0x5OzFyL19uOUJYNCpJKkJiZiFf'@;
put 'IkVVPF8xbHZ1KzwmRmhJNUVbSkY2NmdieEZYbF8mTTgqOEwhfjsmLylsQTF1Kz5NODZARiMjfkZ7eEd3PigsaUhsL2llMkIqOj1jbE4vST5aak9vUDY4KiQ2dH48biIzLElHUiRQZlVZalF3XytBeTF+NiJSQDduXk53QyUjTTlRL3x3JFttTU8vT2I2MHNHai9TKGFUXzozdEZxKVZnR301dnJU'@;
put 'XUtMazx8Sy55PT5oSX1wTWNCMiM1JWAqO1dNfHJSPnd7YGJMTzpUcURmcC9hQzZYaVJpTDw7O1dkeV8+UEYzfkdXUjhXKX0vRn5tWShPUCkwTTM+ezA3fnhIXWNaTSpaeFVudVFkZWBHOnZSfHs2I1FOYV5CKlpyMW9yOjtGKDI4KlR6LiZoOXMiOnRxb0daYzdkanJ0bFt0R205K1RyNXVKQyRE'@;
put 'UzlNPiYxMER5c0FnM3lpfmdUU0sxXXlwZS5oOyRVZ3QmaWBMOk1NbXNAJX1FP21pU1kxOFoqPTA0b2poYVNSaWQ8PnpZQzdlRFhKNik4XWtsMEFpYUQ8UnJoe099P3IlbUJYKUtTQz1iQ31+JTRnUXVZX18+NGBoOkNDaTs/dX1pIiZMNyoycGNNbVk3JnpgXWVXbylLR1NsbWUrOTIoXUx5R1VO'@;
put 'eTQqNWNFN0x+fUpZYSY5eDFrTFBEQCNRPWs4XS9DfkB5SSQrQFZ8Xm0scTt0XypyNi5jez1pIW1lWSwyYFN2KVAoZSxwPFR5KkUlKENnLkZaMWV7cHVAdUZJOFttZG5hek1PZis/PWJKKXJkRzF2N09jVWYmSWYjPkJXVy8rVXxnISUyZEU/REB2SGFpNiV3MmN4RGpOMnNralMqJSkoeShFRldP'@;
put 'YGg/P20jT3YpW3RSQ0N+Ll9SN1cmfFZ0VFdOeGROUDI5KjVmYzluQztSbCs9SlpnRjRIUEx7KDdGOi5RNkYvfSRHcVJRKTJHRUVxR0Bxdm4+MUJzUCkyJiZEXmNMKkZURjtUQnFfekRFOjt9V11XIjYifjAhNEtpNGp5QDd9fHpbeClZXSF7OkxpV0VyX0E8JlNVYllAPkphRXtBKU43UER2RTpL'@;
put 'V0x5Myo+UHZ8JmF2LG9NWlg/RiszJDA/Rld6STxSUFAvWnBQQ2A8LGJfW2UvUjhPdWdKXVdrfU1PdnAuK0RvQlk5NkhuOkN8LCRJQXxPYG0pR3s4UjcvIUBBR2FJdThWSk1CQE1DaGc5PGhXOiVNRC5+OHxZW2VCIWQ5TntwVXQpfU5UZDcyPVFzQEpaUldySyZadHopRWpRYl9RSHt3ZiE2MDY7'@;
put 'd0UvPnAhUipjejleaEU+bGh8d2g+Pl55MGR6NGBrMHpqKkFOb2Y6Ojk/SnhKWExNLiRINXFTSCJiJGBsa1EsJnImZTlAcnBgTEQ8NjIoa3x0LGI3fl04U3hnYGtmWTMzcj5sNlBhJUhaVUFZX151K2NJe3w5eVB4InwvZzNfQUQ5XnVqMiprOTVlWzhebX5pO0FNN0hYT2FLbFIxfGFWcy86Kzh4'@;
put 'bWEjISpES0ZVR0B6NnI0WjhhfTFGRWtuSTFrQVMyYjddbSlEJUpNX2lePVVGcTh1VjsvbWR8eXBwXlV3RihtJDUhMWEpLE5ebnJ1T0dnOCtYQ0YseGxmRUtJcmU0S0dZaUM+eEIsNDd2N2JScmMrU01GdV44ZU9UXWZyYCpZYE4lQWZLdnNmKVdvRFEobi41eTlIWmtOMG1JZ0NAPXBeU2N4eEEk'@;
put 'fVI8alomQnd3O15yXVZxKmx7UmE5KG9+PklVJXdtaDUsYHFzS0w1bDw7NWB2W1R4djhYTH1Db3cuc1pQOk5vUDU9T0YvWTNWSXUlem53XV4xJkhbbVpRR3duODdyNjkrMk5UO3pqdmxFOiY7P3o8WVtDN3lYNXlwMlhFeCQ6dFJ5aVtNTHRQRF81PzU4N19RNXc9M0RYeXtVMSgwJHtYWDJoLlBV'@;
put 'fip+PyMsR0ZqPTVLIWpMcjouPi59UCt+VjpoOHpqPF56QDJDaSNtfURROkJ0Oi5FTWAmKyVgOGUyRHdqfT5FRWFsR14jcVJpVzFZZjBlVTleWEh5dXtSXio0TXdVNWojLHtfJnxUQE1iZjJ+blF7LkBvQTdeRUwmSjlzNjZ0LFpPMCFRTzAmOGg5RHUvPjtAR19MLn52OTc7YkswdVd2O0tmIyI9'@;
put 'elkhL2M2e3BfLGZdTX1+Vz4zQmJAOj9qe3M8eVlQe34wSXEmWkF8T11hXXtVcUJjKTJIV1RnP1ZMKXlJWD5DTSRzSlppLmBsUzhvY1c0OF5tK2VUI0JWSC9+N05FVSZNSFp0MXUmNEZ7aWNgZTJyO2IlKEtNMy9wSFtHKVhwZXlmOzgpZltCOWVJbkhiTiNeeHxsZSpgOzRDVGZtU2A5LD1LWGxa'@;
put 'ZzZReV09NllAMVpuRkR2MlVZTm0mOXA+NCosPXFaOipgeihoLDIhIk08Uzo7KU0kczszUyNfZChiSGFkc0I/Ky8xVkRYOkNfWW4sMXlBdVV3aig9P01Kc0JxPVp6akQ5aXFoRiNdVkhCQ1pyViZUXzNzdDlNdCExWTFbbSNHWEF4dlRIXSlaQHIiSSNtO0RVUU5xQ28rMF8hMz1jY287Vi5bVTlT'@;
put 'VmdZdm1NaGxGZE1keXYpRElWSG5iITg8fnJvYyZ1NFFuPEMkMDVsQDxaNy4iVlM2Qy43MixZXit5RHV0dWE9dE9heD59VERgR1pCMFROI1A1fGU/cCoxJHI0UXJlWH4pI0pvNlAxOiU2KUUmaVFAPkVUO0tmJCJJeXQ+Ymh0WFJgMjBeKFhxY1spRHddJjV1OHovJG0+NDtSKWAlXmx2WFRQJT5f'@;
put 'Xj4rdlo9Jl9gTyhPQXBZXnM/PnAjTytKZEpGOSE7NlkyW3hNPCF+b1MuOWl5YUV+fT5baFNKbkVDNWFlaU9JRG9SSD1reTZGRkp8fGhAVXpAP2NMV1V6UzUmZlU1UGVuWDFbKFZJJTRtcGImWjAhT1kzW04oRUg+fUBvYiJwUHt4fDZCU1ZGPVI/NzJlcjFXXzghOi89dDRvVXlZaWV3PjIlV2Fb'@;
put 'bGZpRU5hPzNRITdWfUo3eyw7SSE2Wm1jd0BiaH1HcD44OSYvK2UwWE8mJD83TT9HPG5fZTlFWTdZKysjPU8ubEt+UyZjYEZLbVYycFM5JVkhZzN7Q3FlQnE2LkA6IyhvPk5DTypzcGI7Oy5jYSYicEspU3t0Pyp+aktwI1treG58fD0oXjgoV2duKV9pcFY/Q1FbczZreGFFOUxAVHh0XyNsSjo9'@;
put 'K0JUWX5yIWxgZyp9eHFKWT10W3MyTEJ+IVE3e0N0JVpvTG05IUgwbEshS3FMYitvYzJTP0hQeVBEelI3T0lSUUE1Tj5qdkhwUmkuN24yaEUuUERzYk5AXX1MWVNNc3xCMjE9OH1hRnx4R3x5N212eldtTndtYywoXXU+QUkzUH5gcUpUfGxjbW5fTFFQJWl3dzl2KWsiZWpLYUtNNipJW2NIRnU0'@;
put 'eEQ7aCZwIW1eZGNEZmhGbC9DNTdYfEN0UHZWTC8zPEJxI09HNz9McHk2dnEkVSF4IV0+e2Y2bDRMXyRIIUhINUAhTkFTZ0VebDtYWShhbSVQYVpyNWBXTX1vbSlHM25qfHd+eVs8X1EwW207W01raykpWWRmcCRaK1VveDxIbyx5bXUjfClfQihMeFVDNSJkentAUnl2SlBjcW4kfVVhKTVxLldq'@;
put 'fVJob2RGUEE5M11DPy80OzR2K1ZIQ0BzX2A9ZnxXWUBHPGx1dDk6XmM/c3NUcTJATCpTRT9dZ2EwR2g+d30lYzZOP3JCRnIhVkg3by5zJjI7RigjOW8kJm5rLEZkckhnM3kuPVVkczFocEBYYyU0NC53Q2Y6ZF9NY3JWW2k3ey8lO0duTX5YXSFKVFpeOS5EeyNyK0VCeT1mYUVVWVBAezRzdGxQ'@;
put 'RUlncCg0TG8qfUx1KSIzbXVjezR8UFJTdmtSX1RwO19vU3Zbckk4ZGc6Y0tpZE9MfHA6UXhZNWRYRTA7N09pKCYsW09rOG10dSFKSGopaUhCXnJmPE8+RVd4LCM0QztnQHkoZVFiLyVKQmU/SFpOQSRObDpaZDopTWtRMC94UXNmKGM4UEclZX4sZWRGRkk5MU0vbVFBTV9FOEF3a18zR3BwMmJW'@;
put 'TSF6dExeOl5KQW59fXZpUUVocEc3KnB5SzttVGxdJVQ8KTI3dHUsZloxP30scSNzIV1NWG5eUEJtKGNdWmQheCNmMyFrODtkOzRqKXFYN01RWVBlPzt0b14lancpNnVnU2NEbH00X1tIRnciMUJocXlMeVV3Uil0ITRecVYmSU8lKi9LQkt9Zl5fL1NWPjhMYGpmb01bcXtUKjRlWmdCRngmeXxP'@;
put 'OlFtXV4hTUBxNj4hPX0jZSFzIighdk8rdkBPZXMpLGpHTHl9RnhBIiFve0JId2VaQzdHfFJSLiVddG0yV25beXlIYX1Rd2shSlJwP0xfOk9QRClvPD5qeG90YXomW0JFeTlnSW90SXF2TlFlSVlyN1hhZStRQzAxOVJUaz4+Ljc0XXF7WTYpdCpuVSQjPCJvPklld3ZiaCxbIXJORT09KjloOXJ2'@;
put 'NTVZOj5mKiRDYzFRd3hiOUs3aXFUcDlyVF1NOXA3R2ZlNSJza2JaQThwOCt5cy9yRSQpIVdbN3teOkplKSNpWEdhNl04dU4oN2EyYyJvanJWL0lkJDFNYXteSj1mek56V1tEREJXOiFMK2wmaU0kTk4xR0xBeUR4cC51dmNdRHxEZ1E8dnV7cWI3cHhHY0lkLzg0MmpIajw/eTVxRXpvPSFwSzti'@;
put 'cH1SMS9AXjAiU1dCYS9lYnEobFt3cVY9Ok1mPkZCMGVjYFIkVFQhMXphPm86fWR+M2ojUFkrQFs/UiFqaTZIME90ZTZvZVZ4eU9ob3BsP1hLdFUyIk4pVyksNDhaSWsoUWdaQy9jMHE3WlZQcEovfCZKV05OO2FXfGs1KH57VE9oN1NmRkZSTjlbMUFsdGM8QmhbMkR8IjQsJmpCVmJyPT1oNmRs'@;
put 'QH40X1pOOSg4JioqVDZkQ3NWRWM0bDcoXkZVbSYlOTp4QElGW1Rybz9zSGU+VFUkZGtWXkNaI1loTG1+ZDdAJGMmSSE+TSUvVFFLd252SXF0cTM5X28yTjBgRG5dPXlTajV9dlRBemB3NXZhO0FfL0NvfSVLcERrbEgheXI1NipMMjd5LkluYjxIXlN6X2MkLlIucH5IaF12VnZUNlhgT2x2Rldz'@;
put 'O0MsTz92KSVjNXdlR3cyaWRTJEZ+TzRWImtJRUU/VllkWTJbVllbOzJsQDdLUHZJKjxCam9qfl16WThJImpVWnBPRnZxJTYyKj1qVDByKE9rQiRdPSRLRjc9ekBCMHtPO3NWbDx9XT18PGFGO1drV0haSX1bR3daeU44RWooYmRDbmBMPHd9Pk5yQHEhXTw4Kzk8bmlveWV9P3QhZ2QubDlUXWdX'@;
put 'RiF4IWNEYTBMa2I0PykpSH53bCssRjpFJkx0d0I5N3BsWzZmMHUsZClLWXNHezVeRzxQbz5NK3NnbXouYGdnUk9QUmZHPUxWIyl4UHxYTV8+Ij82ekQrWF0zdGp8czp3dkxCKys8JS4kTmtZIz9dSCVdOWt1VSoiVitoTVglfnNUQzxJdUFpaDw7WDFuMWNfYENHQ0UoeTldKW1xMipxSVpbVVpu'@;
put 'V1JoXVcwM35wSVM1OkguSn4jT00pNH4hJEt8ZmxEeXY9I0MyOTtQVGJTP05EZW9OYVhDNiJ2Rms0bGxMOn5feFQ1OjJTfTReTypAOS9PeWY+Z1BESHxGYWMqJX5DW1NWSDMqXil1fjNveChYRE19YSp2YDlTMDc2T3kwc0R9MURWcG99TCkqQXl7WzpZMUlsRUFAbC9WSlRWWVtlSitpaFptKHNd'@;
put 'OzR+LEdidnx1Il5qL21GV2wjQzlGdDdweGs3UT5oa05QWUhRQys5V1JyLlVFNTx8OGxzQUNNNkAkXmY2K3Zwe2J5dX4sR0JbX1lpKi9HRTIhd289eXpYNkhiUV9zY0VjR2BvKHV9QTMxXnFzIm54fSUmdEBkaThXOVRgVlJjV2NxQVJ2RFV6PH5VMU1qc1tjWmlFfnZQbGsrcGBVMzVqSkZARjcx'@;
put 'Wit1ajVMdixqNSkqOFF6R1k1JCYhTkVAQH1xPT5zQGVZbyFlLmRfU0BtV1tse3IscXNseyUlRi5dYFomQV1edXxdWk98K2tnUXBDYFNdKkhLMmYuZEouSCtkUVFFYmw7NStyOzljJTtGRyFjRWcyWVVuJTJvcmozPS58OzsxSDJ3REpoJFQmZGNjQ0dtdj5YWXZwOzMmfkdrOy46Zi58aFUsfSxq'@;
put 'K19FNmM/PS9dLzU6SEZgdDRFJlE5Pz5dPzpXcUJpJEF5WiZKOSVZXWd3bVtbRnNsfl89JSE8czQuV1NTM3hDcV9oUyo2OXVxV01oUiwiI0pFb0kpdT1VR2EwVEM4Z0g2dXI2Il1gJFRhKVtRcj1FXl59UTs1InRaMGBuYnImfT83RTlQSF5DZ1cpWi86eClPUT8pa0coNSZGPGR2Pn5Fby5CcjhX'@;
put 'OXskMkxzWXo7WXBuKCl3InUwKmZ2XXA9cXI0TlVxfHBjaDo5PjM2JENJczh9LHdWW2RGI3UsTUo6YFJjPFpCPFsxKF0qKVAoOE5HUVpmO09ZM0VPb19fKDkoOm1ja1diYWhKNHxDbExtTEJEKmMkOHw9L2NnTGgiTmNmJDYsKGtrPzAmYztEZzhhKzh1OnN6d2shZ3JAZEYmaCV9ck0/dDlRcXc3'@;
put 'ZXF7L2JAYkZsXjcvdFFofkE9YitVS0A5eTsreyYqYkF1KCQ/WTc0TnM2PX1PVVVMZ3t3JSh4WF8qaClhPzluNSxZX25JTWFVSjNeWC5hKkRCZ05ZTG40cV9kVXNqaEImQUdwcj9eVEJHOyhdQHBLPjR+aSVMbmdKbXNnczZ2Q2NuI3dGeVlEM3YmQWxvLi4mOj8ofndFJD14NlRIND9scTk5UVp9'@;
put 'XXs4P2w3Ti5tWF0wO0lJVzBxLnU0XTIjNlQlMkY3XzNMOXR2XkR8KHh+bGo8UWw7fGlTUFdOVjx+RkpiOlApKW9rIllHUi88aEMzW1hfOm1zd08kLDJAMW1NYTldSlI7cXtRajVxZFEvKywvX1kzM3xWLCZlSXFVNTB5T1ZpKDZpVnZEMS8jZGBSRzdnemdyODBiandiMCozVClja1QoSkJwfHYr'@;
put 'Vmx5JD1oPmVUTWtwIWs6ajVFYnQwJjA7dCR8UFtMUiVnUGQsTVJZOj5KTnQ9YCphOHQxM3ptSHl9Y3Z4V2xHLj5edSRUSCFtLixiay8jQyspfm9iVElBNktIZTF+TFJVISxDN1RTTUxQRlZ6eTV+Y34yaGErTTZ8Zzt3dyU2aX5uOE57UFV3JS4+aHkoJEB0L2RCRVJuSCl9WVZgLnJES2t5QC9R'@;
put 'ZXUzKFh9VCpxflhlST9pZithREopcm1pSHw+Q3BhOWR3b3dlTHRSeHsrWUZbbj5RQSlqbjNjSkpeTFFuQSt1Y35pImhORUFdKV90OGh+Y0tLNjVnUnQrcz9fOGVnIV48K2BGVSVqIixybzJQQSNHSmB3PVt0KSYjRHYxJkRXVipsOzEuS1E/cVU5W1owZlckWD1Ca2E0PjYpdkEpRCEvPV1QZGMo'@;
put 'YjV4UzVDKUJIQGdifntffjwjPHReVSVeYi83eiV4ZWcwbyIiKnZjLnlCKHpUR1N1ISY2VHlSbzt+eFVhZj0kL2Y5aHx1Qn4rTmgzN35zXTk2VW8va3RHUkNVVlR5RyQ2RTImIz9neyg0MSFvMnZGdDIpW3FSPUc/RmpPPW5lRkw2PGs7OzZZLCY1ckohaixZPjRWcW90a3IoKV00Mk1uVS8kPzAr'@;
put 'Y2Y9OUVAfEBfRjhCWXthZ1B3Mih4b2g/KjpMUzZ2bDw0Z1NtN31YLEcob3RaUX1jV25PYExWbShCIz1iNDJqIm9fVjd7IiNtaHh4ZnJKc2U0MHU3bFV6WHVnaCFnYWo4Ok17Yj8vQlZDKXg/JjVIRllEdGY7TCJKUUN3QyRJSmJTQVtzNzdeLyk3dVhHYmpGUU5faiJWVzx3MnVBXVthWzxCXyl+'@;
put 'IzMyOTF7eTFrLnQ/VDEpPmtDYUYmIkQiU1dqTHxXSClkPSJ5UTtTVCE4ayxyMVp+VXhxWWtAeT9KKU5vX0loUHVjam50XmhtTklvZTp3X0hOZXkyNz0xW0hBdWRofmYscGQ2QFZFZn1DI2ApcjpZX2tMUUcpR3JGKjUpa3MsL2ohR2hkaWxLbUFbU2lEKV5+Nzw+d0EjNio3KiRVMl9TYkx4Q0Ux'@;
put 'Oz1jNEB0KywoUEs5Q2wmRSY6eztYJXxwaHRHK2B+QGw0fXg+NmU6emQkMUAmWCk5JC46bCVmZHI6Jkgid0JUT11+SSNYZkBmM2VBSkdNOWE6R3BVOntvUDV9ZDxVfD5PW3pPO3BfTlZFfFNSIUZLWk5sPmd3dUV+fk9KJSpJWkxUZ2ZlJVNyP0dQTE86aWRKSGNGLn1ZOG1WYl1Ga0cxRn17cCsk'@;
put 'JCRRMngiT1JuT2E+Y0FyMC9VZHNXfiFQIWNxS2gqa15+In5gWWhiUGIkTS5VZyRXN1dCZEtEOWw4YzFnP24mdWFTOHteLjt5cDciTlVwdTBfLEZDa1Fway9kVVImYzFJO3JvJVAvbTU/WmdjW1dZP05KK0NFPW02RXZHX1d1SzYsKiZBPm04RWFEXWg1VyZRMFQwRGRkWHxEblV7VGFyPVN6bmpQ'@;
put 'LyEidTFSWVs5RkFxYElJWlYpOFVDaE5YbkQrSm8sNngmQFFxX0o4NyV+K01qeGJeO1RSej9pUTwoaFo2TyNDMT12TGhaMFVSdk8idjxSNmhQI25mJGcqSjJPNykuWnFXP2RhS35XfjhsUVcpa1pNP2xpMHJHTEAhLmc0MGgmd3EiKlJGbTBAXUxtaSJHVEg0MGNbKjVLUE9kdWhWOSVCJnAvM0gz'@;
put 'e3liaWJKWnxUVyNbaTgqR0pgUyF2Tjxud104ODhAU0RvOWYsdVVrQ209PWl6bTFqSjNUbng3Ly9NeHBoRWNkRyEheFBwVl1nSkpUdSZbfGhCPCZRMER8Zm1qOil3TyFga0JhTjl3OUs+K3ghfXlFRyheTkQoWUM8fERtfUZIXihNbTJkPzcwQmpLK0xCZ09KRzJrIWk3Xj40WllgLnxzYDUrXj9x'@;
put 'SiZWPlNSP01JYnVNRDd3Vmd6Mig6TChEd0VSNSR9b2tjQEk3IzRPY25gK19xTC9YOldWRSt4dTRISHdUXi9NTS9CbSJeSlJRRXcpQnZHSnZBSjgpSjx5d3d9cnNSKllxLEl7KFVqRDw0QVhIN3ZqPyF+Z0FZUlZxYEppWUkmZkd4Y1Q9bVsoK1pXXTRRZVB9UipXK3EjTF5YV10yZGdzMnVjOFlB'@;
put 'NHNJXzA8LCl5WFchWDFUSHgxRDI0WDxjTFp4JCk9amNuKT1IYHRtTCxxdH4sUy82OS4wdFptOm9CezFtWDY+fXJBezlfPTElMz5RbCMyaVlZRH4kRUR1aDF6dlBZT3t3KUtMUDoxRHMqaFFRSFhkaTg0L011fSN7UiUoJHZrbV04bC5iMWAwL293bSxxPX15MjE4fCVlOkdyPXcpPChlaEoqb1l5'@;
put 'Mzc6XT9nUF4xLnM2O0BJNThOPHE/QmJrVTpNcExXTCk6b0ZSX0loaikwL1lkVW01SThiRG54SiwiNTdRfm9Ca3xicG55UkRBOnlvYHFrVWp3ZztnNF0/Si5COUY7ZT8mQHEiM10+fFhLaHBzVSomM2xkdF0lLlQrMjYxIz1QRFFIYSFWQn0pUD9SfS5xZ29qa0tmPT5IelNjTntlcHdeZ3BZWz1f'@;
put 'IWgqNzdAYXRdJmApNz91QSNyMVUyNGczQE1nRjpsLmIsYjR3JmVARlUsNlNVXXghPyFPRm9udmJRJE0+eDAqa1R1UTFDRz5hXWVZPjNXdFIldzxQMzlsfj0oNS8lKz1EISMhfVopSl9JcTlQLldIVFAyZEZ6MXEvNl1lQDV6KjZ1SkBac2Uxc0pUfFVxSTM6Yl9PNHspOi4kLCZmZi9Ea0NjR3Ez'@;
put 'bHliPjJsdlgxYmQxeUg6bFFkIjlCLEE8PFgiR3ohZHtUTnV3YDN6OWI/W00pMjRWbW1Me3RRZlNsc3NOU0VNTXVySCg3O3l2YFl8TWl2QnRPcVMoR09tazJPc3VlQUcxa0VRQHpweCQyelU1S0FDYE5dPkwhQ1pnZ0VaZ2tJIk1id288fndATF40dUo+fVNFWWN6PUpMfThRRVljbnhxeCorcFZi'@;
put 'NEY8Intya1pDb314IU1CcjM8UCp4THpnUi4mcXwlQj4yKmJ1JihTW2J6VCRldXJ6cGxWbkNwdWs7d1IjJWwhMko+MSFwK3pwWStTXjpMOWsxRl8lPnlyVmh0cGRNMF1wSD59VHJyLH0oSEp3I2Z8Rl1ILz8hZG5NVHdkZU1JJGdxa3ZaTX46RkcsWiFEW0tNZDNaakQ8Nn1oTF91JE5nfXZwTEF3'@;
put 'W1NRdiQsVG5DIWhYYSFMNipfczokM3NxUjQ2b3RqQTE0YkUhKVZ3M00lMjU/aT9xYUV0cX0keTg9cShqJHEkY3R6VjowYyZlTTFhamFFai5vRDMrJDd7SVIwc1klMENORChoW3xYJCw9I0pISHVHYWtAUzVZT2xzZ3xKMFQoZENtd2lAfjVATS8mKiZAeENOZFUuYzp9cU1aNWE2TnA2VzQ7MFRJ'@;
put 'N2liWFsmLnFSbXE2NEh6Q3Z9NH1iV08yOiI5XjU+KlAuQnYsd2cqT2JvTUNxUnVpKyxsKlpGektIZEZ1Und1fWdHR0VuUWNNNG9fT1hDPihPeVFSZGhsJE4rflNWe1tVbC90LFpiVkl0bD9GR05IcEs4QGh2JFdYT3N1QCQpQmtYXTRJWFNAI3J4VzAvMX0qdHNVP215Uzs9RllwSmlNajhwdVYp'@;
put 'PyolY2gqSFBPcG1pfWtKWzI5Mj0iSSJ3KillNmY7KGpMYXRrMVVmdz0xVDs4UCZIYiZBXz5jPkNOaDNrUjUrayM/UDpZLi9FQ2B7bFchTllBWzxqUndpdCVpb2pxbWpiPUw8Z09QZjNvZVRlbm9iI0owN1EkOTp7L2Jwe2x2OF0pcSp4Wi8pfnReYmg/aXhNdCt7bXMvOSYjRkIqPVt3VGx8a1hl'@;
put 'SWh6R1dfd24wJiJ9fVYvJj1lT084ME5APzkxMys+b0AoTkg1XnN6SVl2RkRPfndIQ2FxSXwpdixuUEhdRkEzR2cyR1dKb3xfXWVZTks0K09aKGRYVlF5NV94eiVJWSRAeDQrQmZyazh0biskPUFeTkx9XmR3OClEeFtZTz5wSkxlMz1AJjtIXzpET11MLmlEXlAxInslO21tJXEmU0RGX2hMYGVJ'@;
put 'RVR6dUx0ZSExJlZGbmJ4Z1h4VnM5K2NKJj50QV1GSyMpLDFpSm5CVWpUfFF6JGomNEcqcTMwWCFaUXpXZkZ6cjF0PEZoWDRFdSlvWj8wcDBPS0d6QFBbSUM8KjRiXlVGKmdGXkV0fXtlTThALFVwKyxRbll4K0x3SCZLPiVqZDQiZ25WaDx0MzdvfXQiJSVtSil1VX1qbTVWOEVuSillVVpmPUAq'@;
put 'K2lrLlVPSyQoQ2BDeUFFanc3cGs4WFpEKXgseyFwe3NbVX15fVsjenFYTW5ZeEsjYEN8S05JP0VpQl5hOWAjPlNpSmp3aUMqVmc/IS5LYzZhWCxHKE49MkgiPTBXRDFJVF5VUWQoWVE+KmovTlNrMDZBSlMxPnFgIU5mPmZ1SXRZNSFCYy9SJWtdITZRaWBSO0peMF1AaThfOWsyT3FNbnM5O1Az'@;
put 'dTtxZnAmYEw/WWNbPGleenVXSVdeVWNbSGFdOCNxPTBVeDEzXm1adl8zbXtfVXJbOjd7ZEIzbHk1Y1VWPTBOYDlQTjJtJipaW0BPYjd4W1s+KSxKXk41SlQ9citnOXo4VXpVLDJnamRvO0hxJEQ4YnMkP31nQzN0c1V9OVRzLiVlO0EsdXspNzc1c1BAKXQ4diMrd3R1XjV+NWFvSXx1W1pSPnFb'@;
put 'NlQ3bUFdNWhMNm9ReHFFVl5UW2s2bUlPUmZxYyghbyNLezEpZEw8XXt0O3ttbCN7NXYrX0dlQEM3cHpwVy93LEAmVD1xdnkucTkqJHZQMEImQTBNQFpvdWgsJXUyQj1pS3BRfmp9ZiJeSCYuWSNISDZpV3ttNGhdViwlUmhSKEA/XSF1RkhlPWdMTm57RSMrd1FsSXBaQVg9XWU6O0ojb3tGL0ZV'@;
put 'N2lILnptfnZ8UUVOck5ZXTNkU2BDTz5ne1ZPUS94XmRRbUVuVC5aMkBnZ094U3tjdjkvYlZ9O0taSj9ScjwyRXQvbDU5ejdnKGpKI0NeJUZtOkFial9ARzs9UEN9cCk9WX1zJF9JczYpJmQsdVBqR3clMDpCPl11TnVmeX5gXTNnI3k9dzx0KTEzSnMycFc3YWI2T2d2QnIsR205PTxIO11JIUxq'@;
put 'aCs0VyxaayZudD9OSW5iUlY0YztnXWdnT19wZWsmXT9WKjBXL3N3MyY6QCJLQk8wZC99cko4MSZuTjZEOWhDKDJqYERCP0VGWSxtKCtPM2pAS2kiQkBEKEY9TFBEWjs9WGRPZDoqa2BVWWBQNkFjfSUvbSVvbns6WnkraF9FJkRPIVcpKi5UUkMoal4zJSIpcjNITlhjdXNIN1gwbUh7MEU6LkUp'@;
put 'TDlRXlUhfER4XipSOzddTkB0c3wxM21PayR+VD84USZVOGhRSjVLbyNFWWkqVCxtJi9pVGtFSzl5OFU4U050KXE9cVNCTjdXfklvNW5uX0s1dlFHMihRanNFQ0IzX2VTMEhmdm9MVkBqSm4pWVgrbX5fJGZxWm5ldmNMO0RILFNbNV5ZKXhqSnhYQDZRVDRFb2siK3Zfezl4eCg7YG5lc2BSP0Iq'@;
put 'K211dUBWSigqe3k4eXtSNEVudGR8UDIoRFFNK3lBMFI6T0dKdjhXL31kdnF8UC9RSWs1IyFaOTpmPUJpKk0zbVIsRD4xZTwpajp1UlJvbnxPYipMPDF8NUU8Xy87MUp5T01gb0o1PzM6VkpNQiQhK1dXamhTa0sqRmBickg9dDZBezlvSV91LFd9UU4pIVJzSWFfMk5mTC94PkVIdlJ6Sml6bn5M'@;
put 'TDBXWyZ1dUdjT2dbNms/V10mL09RPF5YfUBEdFBeWDFOOjJkMHxTUmA2PyttaDc7Tz98WHpHaWN+dGQ/VHIoRFFNN0BGdkQ3JiRdZGtzYyleQ1BpWHlQflRxa3NFeHhKX21EUk1gQHhuRD5wOmFoPEBncDBhdkd6a2hNKkAzRGlXRmJnXkhRbUVFP1RdWStrUllpT0p4PU4mNWJmbyMuPHZ6djNa'@;
put 'djBYNCtTXzExd2hCM1FebHZhdHZZNSwmfH5FaFhKcGJJeGN5JFBeVD1uXnM3QlQ6RF9nKDNkdiZEXk58bjUpIm9aViZGKCJPOFYpfmglazBTXihUJCM6RkNTdWN3PXlaST1kUU4iIX0lJiNseT42OipxeHhbSmozUXg2VXJPMi99YGZvNXslTGBCbV1DWllPeyRJRmN7I1BFTWtjZiIrdGMrNldr'@;
put 'bGhXTzppeXZ2QDVDPz97WlY+a2NwVV1EbylCUjw3ZEp2RHs+UmpJPW9YeSs+JHVAckJ6TH5DNXQ3b0dRT007QD5McUNfIy8zWD9xR1g/O3Vdbk9vfVV3Oz59KVVGT1QhRiFRKzp1T3ohTipiN1VIUyI5LFcxTltnbnNbPU93NzNwU0NLPikuXWpiSEI3XV5bIkkuV3MranFTSkJGXUY6NyowWUBV'@;
put 'SkJGVHkqVExvSUd8djsxbF5sakokLiFwdXV0OkZNYV1DNEx5dXxiWXhpOXRueGdkNCs2X0s4b3RURENEZmgxMWxpWXFDZllFd0J6e0VrZTVAdS53T1VNUXUmVEJdLHlFWF1DV1tZYlNlQ2NvPH41S1g+YUpQbWRpKVlJLlViP3IrdzZMP3F1bytMb2Q+bFYsNH47Nl83O2V8R3hYUWdPU214b1o5'@;
put 'Z2QoaiJtNDM7a1VmNy9AK04odHBCdGlwdU9XdSg7IjspPndKYF5WbEJdaFFPeUhPIXcrVURQeXcmKHR1MkNJTEk3YlZ6S3hjPk1tMFhEeFc+dDJdLkU3U2FsV1cyLlFEIUwzSXQ/cDRxa1A3VmMrQnNEY3UkP2QieXJAKWBXOUxHVmk5VTMwdUNqU3FNWSNrNXJvdVIqV0ZGTyJCWERnWHd6VzN+'@;
put 'bFpOP3kpIltCNlB7dVNMOl5EbkNrK31kZmhIRT4xfSFdQ1hSKiluQm8qZkhJckMoKzh0Nl8sR1l+NUE7QW1nISNKT1VCQjwoQ0YwPHEzJkQpXj9jRTE5Sm4zcD00aSopTGpibGlDPjMjUyo5XTNzKEZXKShdJVhLXSlVVEx0ImNKQSEzPXZ5YF1rL0ArWFdXI1l3WU9zVlB5WU93ejNTKjNla2sq'@;
put 'SWR4Y0ROaG9JYU1ZfkA8LFE6c2xpMDFoSUJLYGZmVzkyaT1JU0VRSDxGR2BVO05eKTFGPDk+OF82KHJAcDpgTVlNfFY7P0Y3IyFFY3FTOFhZO0E+cjoyT0BeQmE+Y150LG9yUDAzZSR2czlQTGlNc34la2FvJkNoe1ZoZn4lW3I2eWUzREokPzU0OD5EJU59bjJVIUhgNFNVUUp1c3RSUVJ4X0k3'@;
put 'ZXRGJV9nOk1tZXZGRVlNb2xFVTdyXkZtRDpMPndRQ2diWTAyVlR4PjZaIWxubEwpLnNCQHtQX357ZCZ6KDRvfSh3Uit1cEczKm4sMDkma1EmY0w1ZlZzTmRnOmtCQU17R1Y1bz0oWkdHOHF9MipzdlZRZnpBZzpjYCxJJmFWNUNBJCROVk1NY29KIUJLM0YwbnBMeyJpY21PeUBQeT57KW1ETkde'@;
put 'MzAzQCQ5Sm8uOSw/enhITzJjWEdKIWxlPHN1dTkzaj1LTEE/L1BQV1J0PVclRzssSSJnK3tHWilWWVRkYVM3QlZ6UWMrdURHaTQkQFhGRk18NnNINkI0UD5wSSQsdHM0YUFIQ0tYUWZZT0YqJU0uYixmfk9hdzRfZSNCUVZGWlg1SGtaV1JsM3x6KVozXTVxek5wcXRCQUR9T0dYQjZaWj96NDQy'@;
put 'a3tCR1lHT3tFcmtJPD97clpvTzllUkolTnZQIihjL0xoOHVdTC5ORjVHYVBWKix0SjVBWkckZ1ZdUGtMSGQ/MlgmNXZDe3V6QExKcHY9ZGlHVEs9bF9aLnV8RCZORUhoXkdse0Y/cFR0c2kzdWhGYG9sWENNZXNPY256ckRxKmt0Y3VANnRBaVFINl02YDB5TW1veGBmfD5bSk5BTVIvMS99eTFo'@;
put 'dWE0dEp8K3lrQWouUkVlMlN0UzY3bzhjNy4uTSh4eyNCTyU1eUxZb1ooVUIzYl4iSCY0eHd7dTkrNS5JMlhifGNIRHU+RnR2ZiQhV31feEdIVHZ2PWRhR2FHUC9lM2F1MVtZX0IxQl9EQj0vME1yNzBNZWlxTCJDb0RGcyxXajxsTV42ZylkRDJtYTN1cD5qYENVQGFSKkZQUjIoPkMkTSl7Pmsk'@;
put 'ZlF5MD8+azFAUDZnZnVeKSs8Rj0kRWYuPGtEPXZJTkVxXWBJOXg5aWIuNC9HOUY6QURPPzBkNlVYSTxPbFVYd0lEMEpoVFhbQ3JrY01nODZPZHB4P2h0YHA5Pmw6RWc7b2BfcVEuZzpacEdCdjlCe1h6bmdYcF94Ry9OX2d4e2heUyF+RyFMcWQuYkVYLiNYUiMqd09ia3gwb2pycz9uXn5mckU8'@;
put 'JipVZmV1ayFidjF1YXheNWxxSzJAZzNkPTYhZDMkaFYxMnt1ImFzKTRwSDE5WS8oJWlOZW1SKCtAL3ZQVUw4cnZmPzEjXXJrZHo1eExWSlpmTyp1U3pCPmR3RzlAOk9DdDtyPndqc3hXViJHc1l5RSNDbjw2L255aUY7ezQ8bUYoRkR+NllNZSJmRixtIz40W0dOaUdPeXElSUgobnZVWHFlQ0dP'@;
put 'UUZlYHYrJSMjVWZvZXIpQU8hQ1RTZTBDPT1LKExdMjN0RGNzZHxbamhKVjQpZnd9YUYhb3lSVXJQJWg5RCtRcmI7bylMSjUrTndxQylhajguY0VsOkJ8QiZzNms/MmBWXXQ5WEh2WjQ5TVdDXiEqXnpCa241LCVgU2hleGUuOT9TUXJ4KX1dPEZ6OWlLOGlvQGcwN181bHQpJGRIKHBKO1lgQHp8'@;
put 'dUZPRChOVGpVb3B4IlY6cyRjYDBOKnM/Mk1UUiJ2dkpGSyYzOT0/PXw1QjhMOkhYKCE0THxYKWpJc0RLaHV1cSpLS0xNZDp4SENTNTxSeElWSHMxXSNbaUNhXXlhaXlpX0VzW3RPUD9GbnJzSDFLdSQpWE56Z31tKVJFZDJRfF15cClsTzEqMmFRe3xkclc+O2RSJSVbU01oQCFOejAkJXhlLl0l'@;
put 'PThiaXxXUTtvVm1XYn4wMGwsc0N2JEFoR29rUl98ZXROdU07byZLZCxBLGFnLE4uYTFRfiVjMT49ZFVZcWxQfntyUHROdU15M1hxQTpkVXRPeXBiaT1bbUZydTdhe1pXakQkdnc6bEpzLD0leFFPb2tkT3gxKDMjSm1yc1FMJWlVTlg8W21kPzN+W1p3clUjO3thNV4rXXI1VksyYUBaQ2JATCwv'@;
put 'Z1BheDZEZTUoK2drQ1hlKlBhakl3YUA7MC5iYXFoO19Tb157LigoPFpXV3wvYFBuQiFMUmVxO2hmL2h1TFdwVj1xamBUQktNWkNxR3tFLF9SKSkpfGJJR2peOyU8Oz5DQjIiWjRxKVUseGBmOlpdQzxQQEljZmhmIiIhLntrdntKTldKWXxHS1Q5Ly9SWl5DNTQ/Q18/cGh1MmU4XjtgaXtpTHpU'@;
put 'ZmtZUCpma2QwOjslcHtmfnVjXU0sPWdsJHZUd2c7Wl4vRThPQkY1UkpucXNIaTRsKUsibiZ8Tm01ZjVTMWJuayN+R09dP1puWjhAP1puWkpOMzpzaVpYPUAqeSVjY082S28pRTE/V3lhXnlVQD9ZcjZnTE1gJT46LEFCbCtweXMsNSV5Yi5yajBHYXgsK2gmbll2UXVkQFI1dyw4bzhVTlg3KE9M'@;
put 'UnYoO2lzOSUvaDBYcSZuXzgyXXpbMHVaIXw/UC5VK0ZldTBxTltJQ3kjSU05YkM+ZlU5O0RbWCU1Mn5nNE45MH1TcXgrOkNkTWFCKSRXUFUvTGAmIXEjZ1lWflQuTC9tblIraihwOCFWQEFeIU81JVNmWWBnZnV4XylXSU5YdUsicWB7eXVKPiksMT8kPnQ+MGQlXm1xLDB2UWhbSmhfODBfbTg+'@;
put 'RihmeiEoTEk8cns6WSE1VSwqKFdnNyMwMGBVfjc2KzYudmlEcGpCdk1PZkdeVWlkLmNNXmIhVzhYWGl4Y1ZHbXNpcilhfi5TdmN9WG97OVNVSiwqbkRkPVJCSU9HU053WWpxaktgbzFAcyVsIWwhYExmNjw1VkhxLzh3QGJrNmNjKDUsSlZ9MSokSTBERW5QS0w5d0piPkpEPmZUZiM7Q1o/bVU+'@;
put 'MSYjQXchU0xOTil7UF89a0pDKSZqYS82REowX0lmSEo6WjJxWmx6b2R4blc8LlplUCM+SzZ+Mnx9M15helJxLCVqPyE5OUZVP2ZLX2dZaFJGVHZQfjxzJTw7bXJtWitvVWEhcj5gMFBwKDpTYXFeOEZhN3Nlfml+bz9LcF41aVFvW2AwOldVeDtEWFA8e0Q5O2soSjssVlR5Njh4Ny9DWChMYCNN'@;
put 'ZF9kSDYpRVpNPnEuWD1fa1NGPihGeVtQeTdwbmBHeXo7LGUrcXFuYTNWV3ZNbChAX200LGFgWCFqVGhhMHYmej9TeSVoVHhgdzYuJUcrVk1KND88KCtdPFNFQ2E7cSU6aXo/WCkvL04lfixSSlg/PHB7IVU0V2x3ei9qK0ZaY0xfNVYvdWVHPzgrIWk7cDNJd0U7bEZOMSohalIxbyZnZnUzSDAs'@;
put 'PWZbJEFxdixIZ3VmfkllKl5IRl5Ye3wpXzwzJjM+MDs7bHcqM3ZtYGxqbjVKbn1mKnhJVnBwa2w1JUJRXU1ZVlNzW0UvRUdjdTRGM2QvTHlCc2l5XVRZX3Y7LGZ2a285My4pJT1OcnBtcFd7aWxTR20xdTpNdUc5N2dfNU45alhtUWFbfCN2KXVNREx7YCgxJTA5WC83S1ssW2FgYCQmXzE/OTlX'@;
put 'JXVKVyltenNxa2ErXTJzLmJIU1N5YkNmaHwkT1NDVlNbeHhjYEdxTzM8NlZmfkp7YF1QK1U8WW0lIztpbWU0R1kwZjZfcmc/JC9ZLDR3dF56InF8Q31aWG5uQns4YyNOPzk9MiY7VTF5WT5hcHpCVV0rakBSckRfXS8sJU5HQ0NYNjZdKF5DMHQ0XXQ5QnVyMk42X1ZtOSxxcjU1Ryg2bGAvV1JG'@;
put 'JCVDQ3Y4NWJNYXVPRk1KY1NeenBpOV9QcWYqeFF9fW1ib15PcjIwUXd0YkBVJjksL3gmbyM6YFNKWi9iQGJTRG4lamFUZytpLGlQOC5XTVk+TV9CemtRcmlxeXI4SVZePFN9akxSUk1mXl5xRyoqIy8mPGhBZ2JFYDxDS1EmVmc3UChlcCxleEBjZFp2KiJRVVV2MzhHLFJAIXckZXJyJDV2Sy9+'@;
put 'ZiJuUWZWUEwxKjYiMlVuPFQwN3VOYn5QeGhROyU+MWg3YnchLjdCQ2w0ekN8M2FSOyYmLDQqJDd7WCF8Y3BZIik4Znhrbil5YUJjKUNfXnM7cGI8KTNmRSNxQjsqTUo6YkgxX3BDZjkrXndPQEhpJT4rX1RfOE5yR01Kc05YXTNZPks4LC4qP1peYCJCUmZqKHs5ZHg7KTZfVCZtPUw0fH16ajsu'@;
put 'cU88S3x9eWlBXXd+PiZWVzFjQV1PWGhWX0M9ViJ+a3dgaT4oRXhrR2B7bUs1b29pdyt0VnJ5dHVVKW9fVjVTfG4veVVoaUUkRlJGUkZSVTVZYkZSRk14IVQ3KjkwJFpAdy52RyFMKHlNcD5paWl8fU0pdEQ6dEQ3O0ljRndbQUZ2ayMlY05EL2U2JSh9XTdvL2YlUHpJdEQ6dEQ3O0ltSHNbQ2Zj'@;
put 'fStyd0A5cy5fRzRZelBMJHIkN3xEKVEiRzNCRmM4UmdTRTR1akdXSCYqQ2F9L1Y+ajZLanZSNTpAIzgkMDJPblUrM3lwcVYoRChOQSRWfWV+dFFnUVd+Q2NDW0llJUNYRV5LIVF3aVRMUjB6X2w1MVZ8UVo2KFJlVWVwcW9XJllKbmFxVClHYH0vdmZvTHNhcTVPQGBqMUVtQ2xLOkosM1tgK01J'@;
put 'WXQ+dzovXVVjWzk9InguIUg2WTBFOjYqY3V+PEg6JkplVWZ8PF02eEVDNTR2LFgqbmNoSXAzQ3U7e19hQyxCPHY2RX11QHlyKDl2QGdwP15zXXNbZjMhWUtLOldsWl5xRiF1NXlyV2J4MEo9bXA5PjIueSpQWVtrTDhbQ3FsW0NEXyYpZkYpUEdnRDY2bz4kUlpfN3ttNUpOfFEzYkAzPih6cmc9'@;
put 'P2ZdVCwrOkVhdk85cShOdEQuTj06ZVVbZ2FvZFhOfGs+MSZmJkx+eEppcnk5NnNzO042ZllqKkV7W2JMSXk5e3VnVnpfRXNtNWdLdDNYOXtbWHkvQixWZDJYVGgvZ2JYd2FnV1F5LFM+I2h7cVI+NFAsW1F8K3R6U1VZSF40TzJoZVd1ZHJkdXUrYDdkUTZOZCx3YyV5U3JkezE7OjU3MXQvRlZY'@;
put 'XUNNZC4mTXxqaC8mOzVJZFIoTHFeJnc5UF9uaSp2MHpaTk18aFtVMXdRbVJrNE00T1NYRSlAQ3NEWmhgPH13TX5QUl1mOXlQRFAqcEc9S1QlY2dmUF86UVJVTFhXMEVwaF9OIT06NTdOZWhiZiVbOUFkeTBFWzVkaTBFWyxoP2V3QWAmSkxMXVkzbU44d0ZlckpiKWV4P3gsdEk2eFpjYERkQE9a'@;
put 'fTU5aHckajovNTY1c3haYmBEZDpRTllBaml5IWRJZzJKTiRRcXRqMUkqNzUsZHFaKmY8TDl6OHxbLHVzR208fFp+QyNdJWdeayQ4QXBzJUpmZFhPKWRIXSxzSzhgUG1lJWZVY1s4Z3twUE5XY3c5XVJdWWR9fUt3O1spRFZXI3A1I1cpcHlmWnlqO2FpTlIxYGFJOUZmTCVkRGRVNmh9QllsJTZF'@;
put 'MHdLSiwwQmpPVUZeLForWnghLCEvWjRxYmxGdClmPFNUMWNnMTVJciowRyFAZGc1aDdoMWVpUDpoKmhqb3tvPzliZmwxLjNvaDp7Wk1pR3JHOXo2VX05OWZQP01bJHNbaT4yckV+dTNrIWBJNkQ8Q092RE9jdFUpcmZQUnQsbGo+I3ZILHdxOTBbXXEpPEdsPmIyNkRPJXU/L0hYVGN0N1BXZGlD'@;
put 'SDtiTGpCOnZ1WFNsTUZ5SDFnT01OayZvOVNfbntbKXMhQ19uUV9mKWUvWUxxMTZIIUdZTlZEMEUkZntHWVY9RE1BRCguX3gmSVNzRXA3NyV3IzFFPGFvZiYreHx4aygsWTNGVl1IRG9aUzJZekk9a3AwM05tIiwuWyUzZnxOTkM/ZFEwaW9gQ0Z2MHJ7cV48QFtoXlEyOUM0LEMxcCwyWHtgSUBo'@;
put 'QytkPlVJPVk2Ujoxd2w/MyE1dVBydXY+I2huVldLZUssLGYxdnxJJUEjT1o7fnJVK1FEKW0rZT1fYW1pUW5yKlpITVo6YzQ8QWZFRy9lZ2hDQHopJl55L0QrPTY3NzQ+T3M4UkBSdz9FKFYjfjVZMFpyVl4/VlV2UllNJFd1XVNAajNSL1MkVjN3d3F1fGhRcnUzdSZxT3Fzbyg+djwyJks0SHpw'@;
put 'ME1rUiY+czNvQiFKY3MkPmdNWz9dX1NiazFsVGVdfGlMKGUjTHVxQ0JWOCp0NyYkaWpQMm42JjdVK118VysjMUBrU31aJUlEXkNQNHo1byFZJUkvOEQmXWZmTGRmNGd+LDBiW10rY0NiJDA3cUN3Qk8xckU7QUBBUzFRSDYwZ2QwZ1RCaHppKFAlIVtmTXljQFhnWWdpZT8rZShkcEpSMkIxPGBE'@;
put 'YURib2xxP2Uham1zZC9kVT8wWkVZQjFqPDB8djJ6Xm12OU8pXUMjNl9EInIoOkJ1cCEiUi5OMVZSfXwjMmZnb25WcFk3REEkU3ErdV5wMzE5a3JKfjo4NUkyWUVuIiFyIVc0XlIuODU8JjtWLEZGVCpHT0dRY24lZTlwdWV4dSR9LkJsdD1KLjhxVDdZInxQeyxAdkx+Xyw9LGFvZzFHPDRpcUpd'@;
put 'cEJpcUg4LHI8dCl6WHVye0NzZFM2Jk9VOEEzOT97PD1fdCllKVh5PENgXiRxSnomYyRxaypRO2xgJXhSITtMcnhzbSRxPyokLDdPKGk9Pz1SMF0iWm86ZjJnW2tvI1J9OmU2c3A7LlloXWxrMnNSaiFtJCxwOzs0TUIleylrRCtgYSVoVU53JGU/eyI2JVNSYWImUDFgbSM1USgoL1l3YD8zeyZ4'@;
put 'SWFIM1BXJi9Zd0A6bEpXNW1ycE05OmdPTiFveStndUBYaG4kQDo/KzYpXTRWczBWdyVWZ00xNzQpRTlAM2d4JSIrOXE7PSE3YEp7N3klZGN8Xl1dVSgzaCRxdjpeUmNxS2w3dHJQW0ZFcz49dDw/U1kxfjp8V0IlcHdaJFpvczMrOV1OQT5EWXlVXnBaaC85JSVhaSRjWDMuPU96UEU4VU5PVzp6'@;
put 'entbRWt+RmYzaihlPzBheUI/RWJ4fi8yeF1hYCNJPFQyWlZAKiJ6ckw2P2g/NUV7MTsoaFM/UjY3Ql17YjI0PWRlXjIvVHhjOnRKWmVne2FvPk1ifUh+QnJpODgxY2A4cVlKMkJgNjZFZTtPYTNUcDVGVk92Lik+V08wLnV9Y11oUixsb0EhLmhsb2FIVWo/fUh6KiVjMWFwVl5LUnk8TjhXR11n'@;
put 'W3U2ai5ZMyswVDUwd3c8T1cjLzpXVUw2fHF8JUk8R1U1bT1oVF8+SCFkIlVHWFQ3ZF5LZDt7RCxuU3U/VH1UJVBTeDVoQDwsJX1lJnw6bnksfmBzQUNxfjBOSyl3Lzp7LypSc0lpY3xTaH0lL15SMTFmMCZna3s5NFNbN04zdWFsOmhTZi58dXB1Yyxsb0VpLG9IPmRgOCVNJl1gIj5oeDxbb2l+'@;
put 'TnlgOjYqc1o9LkV5cEpZNjY8KlU6IWUoJiJVczxIPlIoW25nP0x6RG1gOkh+OytHck9AbUhlOS57Myo2RENlTnV0alM1VTptZnReNEhTOGR3YnUvMGZ3TGk3OyIsc2pwaDFYMytOTX46fFY2JlB2UHpqMF9FJDdDRXkrQmNUKyM6dVsjNE1FITsoXzZRQ2ckMD05aSNNWEtpXzowTE0kX0pBPmhj'@;
put 'RW44dGkxfiVUMSsyPiwyaGhTO0AxVGtvL090TixGW1A6SHskXXA6RGFWNm08N3FePSNDYlQ1ZD43ZT13dlRZbTFPX11qR0VuTjsiZ3wkRG4kcWRnRjtidUpsSD5DdS5uXmgkJlhze192Jks4ckp7YixSOkBMcGRuRDczPUdgOz02YiI2QWk4NFBlN0UlSDtlL0BFK1lqbjhrIW0mUjYwJH06SEtV'@;
put 'cEdSISxOUl1edTYqZmt1JnBnJkswbU5QMVNWRmNydztPM1RGbHVATkVSazdxKHJBa2hTYCkvMTk5Y15VcjNVaGZacGsqPEZ8OE5+QXFEPntgbWBGY3F+YEtPMzR3VkYzc2c2RyhFSm1gWzo4QExvaCZdfVNQO1ghdyUmQExsV11JaGdyZEU7Ti5fdFolT05GUmElVmBtSEdJclJAeyJYZGBbKFVU'@;
put 'YW4/KXFET1t9NkdUNXk8Ni99V2E1P344SVVkNkpNXTd6UEYvcj08XmEsO3tndVFuUUk/bGxhUWFUcmdMe3tJVSU+MStLZDd0elNwTk8seUJnK2ljOzZtbmtNenN9OkNZOThzXWR2OGU6Lzk1TDo6e3s2d1Z8blE8PkNYRUV4MiJZQFRXckxzOyJZezdVM0BbMkBQMXorSCU6d0x6P2dDO3ApU01a'@;
put 'amcxJVJXZ19aQV0zYnVHU0M5RnZadVRzLHozT1NgQlJIbDVuaGJrLktrJlBAa05IfmhTN0UxO09nVnBQRW97M3hucFU3NFNZeXEkfCF+X15oYjlXcHQ6YDpdWGw6cVdiJUxtJEExRXd5cHVlWldOUjBYczx0Y0Jib116ckkzcXk6NVhKND95b1JrNTcwTih3IiI9cFFMOFh+cWRCXlY/OClJNGhj'@;
put 'XVJ6eXxFSnJ5Kl83P2t3STA0Pm09OGc4enpjZ3oqbmRiI3QjdkZuODRWP3ApJXdoblE8QStTblM7I1J8RFZ1Q25XXkh7NV5AZ2drJHUjRHIlbGRoSjhIYWxNTTBITnVWOmd3UFklUSQ8KCFXSHBNdUJnez1+NylaRGI3aHdHT3Z5NTVecl1oWW4vUThCaioucEFxOUx0X0FMdFAvNDFFZld0PnVw'@;
put 'QDBEeDFuITA/RUdhP3ovMi55Kn16WDZqPF4qRmk5XTtqXm5JI15daC52aHclWz17R1dyTl96LkVdKFNBLERkPyhIeGlRVEc8Z2lraCY9NCh6QylLfH1NUGJDUW1dXndDRnN6ODlNTnAvQ3lRSGVAdltqaC50OCssal10MXx+TSNIO3pgTWRWdiE1Q2lpY1JqVXpTbFZqNjloaGgkJikrZXs3Pnkr'@;
put 'XWN8VX42aDdHKH5eX3VSInFpaXwmbiViclIyYUxpQ2UwMUhxaGUjdmZATT9FJUl5OmI2OFI+NVV8Y3dJTj1MNXUxYCFhLnJ3VT0mbUlteTkyPGhfK1ZtJmJmVnF7PyE9NV4kKHUpZTxtKUw/eUBnU1A2LltxVmgvWClaS3c3X3c9KWdDRH5NMXlQNlFtYDpTaU5lcF9fJWdtRmR7PkspalF+XSpy'@;
put 'dzAjVCY4MT93YHE2SDttTjM0Pzk5VlRJaD1AeU9aYTA5UFJBZkI8JWpxNUJJaCxyfi5EZ0k1MzpbeH0wOl5gNFk2JEUyLk0qL01+NEdkMXo5PF9tPCpzPk5ha31fMzV6WS9zLHZJMFc/Zy9dL3J0RyF3cFN6YmBGUjdgNW5reXNoQTZ8Nm5pLF1xdVlIWnp4Z3dqWD8wOXVHOE0sWGk3YEFge1Jy'@;
put 'YlVgbllHK3ZxY1N+SUw6ZVZaXnpbMytXR3s9aTx2aUtHQEVIPFdeOnBKP0NAcHdJNyhXKUY5S14rPXQrK25tNlQ+LkA5PkYyb09fP3hwVnVoL1s1Y1k9dnkvUW50ayN2WlA4SWZMZjxTckg1NkQjR1Q5dUReTm8wOy9tRiU0X2xXO0FuRGRFTW98RnZrRnx6RzRXdHh0Sl1CdjZdTThmKWBKLlli'@;
put 'cGdNKiZjITE1QiRxQyxLSS4reVJsR1hrcVcrU0x8fTklTjRNez5DenJNc3pMOm1Sd2J6Nkt5KT1LYH4pUTYjRGlPVytXQCw9NVZXOFQ7fnEhcnNtPnk/W1t1RnJ1OEhMc1tQbkxbdDBMJVsod1FvU2R3SV5sTSohKWkwQE8rZF5sdy43JSFvUHFpay9xMTgrWEtXYDxvYFhsSypqcT1mQ2JZVEhi'@;
put 'dl9eKCJubX1+QlY9Qyh7JDE8VD0rM017KUA3PHAlZWxFOV9gPVcwOFVkWE4jWjw5Z1twSkksZ1czPW8+ciNhXlsjbVhXYkZdIkI8ITEsU159TVZDaE1yKVJ2MSkzbDUpMjxVMl5nLHx1anksO199YWN9fDB7UFNmInVwZ24lbyRDUClLfl1IcEQmLGliRUFla1BfTzpZTklBNFpbWyR5aUlVTlFa'@;
put 'XVMlajRLPmJTS2hsck0lXV5DRlR3N29ofDllTFhRWSkvJW84N2VrXThaM3J7ezZJY3ZFej14M0gxOnEkZm1JbVBsYFQ8c3QjczcmaFR3OippSHgieH1vTG4lNUh7azl7I15hMVR8UTQ5VUN0eih3TyVpakExRnNwRSZZX08iMFFeP1JPP25GN2oxUjxdPTBiamcxb2V8NTU0bD87IzppPT16ODNi'@;
put 'QFMuKkZadFE6LHoyMHBBKDFgQnBweyJwJi89aXhiL2pNYV1OJiVfcXc8OnU4YF1WKEMmfCp6NCk8JWU+NSYpSj4/aFk3fjcjWWhTP3F1Ql9IVk9oXVd2OjYkWz9DSWl4dmc9cS8wI2ZoIyRLZXg8S0dsQjJSPE1QTG4+eWd9SkVEazs8WF0vdHd3Iyk8QW5fYmNTYlcoMHhfSXR4JChNOkdVVig+'@;
put 'OyhdQGZ8MHl1JjhMejZqYFJlOHZuUGBxcmdPTiFOK0ZsSClXfShLfmpfUi43Qy9wMnEzS1h3QF85N3Y7InIrflA5Q2J9VWpvO3UiJHBvXzpKXUkzKn5OdWohVyZGeCgzKiJTXmJ6eyVSX2ZZMlkjMywqaVcwRntZUi89RWdsYSRWXTB4c2w8ZC4vRTdueCZIMn1eaHtRZSxaO3BEfjtIMyZrRFE4'@;
put 'dTlOTTN1UWxCVntsRDVOPkR+VWM9bHMxfXQ2dENganFTL0cxbCRIMzFPZHAhV1BkKVVNNTgsQ2B4Rm9uIyJkX1AjTTdAI3pSQDh0aisjVTE2IzdVOkB7PipLaFE8JnRLTkR7a20+WCRBSm1KZGhZYSkzd2NCUy5LYTNhO0QmYkdZamVGUlVyUCUhREkxdnoxVVg4YVVWMlg1ZkIzVHYmPW0mO1Qz'@;
put 'JkdHKUdjP0RWIyp1Jj8oPD0iO0BsemxiVil1YFtuYyRuTWtsam5UUytkTzRMTlFBc2FLS1EoW15eMVljM31URyhaXyhUfmRJRWE3YTxER1h7RkV6NV9gSDxiOSRHNUgiaE4hJWVTMSEuSXpvLFROe01DPVAjJHkmSj8iSCY0NWIwVDVFKj9aRlgoMGQhdlljcHZ4SDdrQkRmWn0oLyouNXUsUUdg'@;
put 'PGRDcStjYTB3dTtxWl9HPCU/Sjg+IyxLZzR1P2ohaCxvekBuTC5VNjRxazNFR2RiIkRHYCtWfjg+YCl7JWoubFlfKWZiJE5nM1lseSFANzouVUZ9OF0qOSwhSzAraT9SYjFUY2NPc1p2I2omYWZTZkRkUGhCJklTYmdjJktsIj55ey9ZcC4lSX1mQVNLVHZ1eiFXZjg1Jnx2cndsIjU/ISEkLiVu'@;
put 'KiluczVBKUFxUyMqOFZRLjo4UjlRRENSYzxZVkNbR2NSZjxxfEBXOXApYVNOdC91Z1BwZTE9U2NLYn1NMjddK2lDbjp3PEAwU1p2TDJ5IV9JVl5PITt3PipFPkdfJXxeUXw5Rm5mV28ucEZNQ2dpQW1HaD9EJTVTSFNtfW8hY0lmY1JtKEhhM2d7IzltVSo2YF5TS2dwNVBscGVYbl5ZZiRoc2Ik'@;
put 'e1ZJdWNHRFs7RkFDdTlyYElIbHhqQk0sLHdzOjhGNVtMNCRnRm4mPWdyazdYMlB2YHw9SCk1RW5uQENMQ3x1QDA/P2k+Jj5nWyQyKiJwbzs9MStdTnpZKCMmcTY2LD5nTmhwOShjLzNQIUJ+dyE9bUtmMiZfUEFaRF5lWy5qP1pubG1HUWNjRUd6aktrd2ssVHlJdEh5dnw7NzczNXkrV3ZPSDYo'@;
put 'ajVPc2JIdjJ6e3pyeWwxJGh5OjV0PTd8RTAxb0cwX2VXJlFbMUl2YDBRejFERGQoO0VeMytwe3tNJFUrZk9bRihfLGkmSndJTS5HS0Q9QFhTOllbQEBAbSJOSlhxeiIxRDx7PyE3dmw1dkg8UCMjODhzUzp3M059YXNlfkQ3KS94LDVEc1A1LCE6P1pBVEloezk9alc9X2ZCYndpaCoyTyVhdH4s'@;
put 'S1Q8QyhqLmlbKTZ1YGZYM0VeXi5kWU1mT1MvZlR6RGRNRWxpbi89RkR+KUYiPDxPSHhlZyJZTyhNRUUwbnYoPmg4aVMlO1AzaWZTNCwjNE4kZnJ5X3dHcSlLTl9xcEU7PytEWmJuS2libXNmXmh2I1NON2N7OlRfK1ZpSUFJL1lVcm1sJVpKLC5KZmpvWHZaeGFKfjBEKCgkdmB5YCFobVE/REIm'@;
put 'YV5oS29wNURse2heIVI+JEdLTCt0U1shdXtdNH4sRmBtPVZoNy5kWj1gdE4ufEl7IztVUUlNSCFNYGNEXUNUeUF4MWNuOHRaMXpwdjlIZi9yUGB4WylMO3AlRHt3TG5HWlR3dlQ0djpTZ1MkfnYvOjQlbypmTFMrSHt8akpEOV16cVV5UEltRlBbSHg8a2xTelMkfFJbRD1TaV46eUtZKFNfUFYm'@;
put 'NSJpRyh5fHxhWVZDNnIvWCprfVRkIXN6cGNEX2FNYVs+bDV6R1I0SzAsNGI6QHMlcCF5dHh0Kis8WXM/XUNMaXclR2YmQzI8Km81WEltVTZ+XmVpYEM2WFAlLnBiYFtCdU9AIlYpXkNjTz1ENl4md1svfm5+TH5LPkclLlQreFsvMjJmNy88PWB9IiVaYlRoPEdnUihPQm8/fTZ0OWdCS3hhfkk8'@;
put 'blZIKit8XiEyKCxBcUg+LkQyLiMsfShSNVRPfj9IL281PzBkOmFwIy5eQzlnRHM7NWw1aylQOWJZMHtudHt6K3xqZCxMN3VFWVlGb1ZQOn44I3ddVHMsJk9bP2pPa1lgMFVIezFjeHJldmVabH4wPHlKfGs+SHNDezFZO0NEUU00QTgycn0jaDo7IzI4b0RpZHxWZl5LTWNoO1U5bkNrVzlkVkBU'@;
put 'YlV5WTI9TDlvdSpAKF1NVHYueytgNik9LzJiI2gua1JNPmRVK3B7b21VY1tpPiJyczU1bzgwb3siakEjSn5nTV58YntTcTxdIT0qPGEseGZ2d3E4ZnVYMVBfKWY5cmIqUkdlQ21WUHE7OEdPWUAwSnN3PWRddWVwVmgvWnNtenNuTFA3OXlRXkV1eTliYGc8SCtKJE00XmJtUVtuMCxHR2EpIW88'@;
put 'bSRjOz1TcCQlaWEqZ008TSg9SXtgfGVyRXtCQj8yTUshWjErPSJnckpYMlh3OmV7LzZ6YU4vWEA3MnpyLEsyOmVfSTB2bnRPIWVmdFVyRDx1ZWpgZHZaYE0sTXZaVzMhcXF7eTJSVyEldWouUlp6OXRdcSprbkxVYypYO2tUV3c7OncxKXg5NFQhST9LUkNuPjsjeS4zajI5cWVlPj5lYTp9Ynxe'@;
put 'SUBKIXA/OlJ1NEE1YlM7ZjZ8Xn13JERuVSUsNlBlfSMrPXhQVlA7PHRndyZCVCpeUkY/fTopJmMibn16fjx7dTosNTlkcCM6L15nT0BeNnJwZDxEQ3ZdeElCMlIzWF15K3Z3TF55WCREKHlPXURIQzlMfEBzQi9MOFsoIyxmYi9UU2skNlhuQlY3SzdRUT1CR3RIR01gbU1LPiIuOVo+XzhrRjtH'@;
put 'KmosUyVMXiMxWWMhSz1DOzc7b144WHBqdSJyVzBTP0E0IiFuZnZQbEhebW9sRjspbHVBaXlUZmRmWSV1Y11ofj9nfEJgZmghTShCa0FZPDdBQStKKlJJPj5WJiIqXT0rbUc3JW45OVhnTzlpO1ohKFRkR1gmIio2VHByOGEhKnlzaipvclNCYCVPUXI0JTszOXYoOz1+fSZ8OzZbIWA7RygwSV5K'@;
put 'TFh8WHAqPEVlZzxpbVY1X2Bfb0t7Slc3elVHeUBwISxpaXEuOCxMUn1UTHRRVnZHc2JXe1JXQms8InVMdWJde0k0aVVLJnddaDU4UFtdMzRLSS5sP0hWUmQhY2dIQlUzUEh8S3dGQEV4ODgxR0w3YzJEXyV4KGVEeE5VRSw7TXEzLmRVY1tpcWYmZEJRQVdUJnE+Pjhib0Y5T0JTLiVrbllCUmpL'@;
put 'K2JVfUk4dFlBWkthPDNdaihHIlFNc0FBRlM0PmcsRmhEZ0hdXWsrK0AiQT9PbiVhMlU8OntAdyMyXkByNW8oQCQxJlRMZUFBcTpRbz9icHwpcXhPQTg4SnovI2MuZVMkWDg+L1l7KmlCXjV0OGAmeyUzZlJWOTAubjtgcSF4bDw9R2VMckYvSUd3a05lLCNDWWkzYyVqVyJDZzhYMkZCektTMl5x'@;
put 'XUJLQmhZW0djUmI0NXFlY1NjMzRKQ1o0XWYhV3lIdWwpOXUxRTJobjxzanxSNTFKY2teV2hxQj9nM2hvSXgpOkRLcmllOUBWeitEOVJaTUZYfUxHI0A/PDlkOUhhREhLNWo7TzAoKn13MEkxZzt+aHAyX21JSEskKWo1P3FLLCxYV0VuRHMpVF5uQVV3JD88SG13PHs2e2tnbywydSQ8KDREVT94'@;
put 'XWI+ZC5+XV9MZ19JZjkzeWY2I1VmLHVFYVlYVHdTRysxbnE5XWxUe1R9X0AhMm8lMjRVNEgyJG5qSmorJj9PaHYmVXk/VH0uS3RNJVhVQi5mdiFnOTsjclNSPjt8JF1kJTF3SH1tYFZeeVRRZkE8X1I6KTUrWkVXdW5AVVd1OXdvOl51X0FWRlJfPVAodDh4OW5gVGhze3MkOVRjR2xkIko+Ok5e'@;
put 'ZXR3QSRGbG1iYU0hVlsjN3A7d21ZL3JjTFAuVTcmdVhXO21AcHBGUSt6eG9fJmNbSXx4eGJdaGY/ZTBgTFtMW3tsYjImaSEwQjJoS01hVGx+ITdwTlNQV3QpW15PZ3x3dF85SG97PShtUWRKTHJhaDw7WXxmc2tiTSFmSCw+MitrfHBzNnJ2QjFCJSgvIlVyY3gqJVhGR2lkPnYrPF1ta0BJcDBL'@;
put 'O0tOTWpqSWt7SzA+NiI7dT0zNEBta2Z+XXUjV3Q+Qm9BOz5jJnVRckwuTTNgWk4wTkFFe1c0NE1IIVc0VTB2XkFudSxOVGVQU0tpc1VkUUA1SiolV115VGw6XT4vbTV5fUVXPDE6ZUt8RUsrQmpAKntGVXREM0w/NCk6ZS40QH5OQFkrenxSW2IsXipMRmFBW1lEXyprPDUrS2BidDxjKk5xL2wj'@;
put 'ZXF+NV1qYDAhW0FzXnphbzViXTQ7azs6QXAuUUd1XzBEeTlfOiZOOFdbc2psS3FPS1BUWTY4e109QSk5SUJWWTB4MGVubVg5MGUoMiVLPmR9eDp6dX41JUI+Qm93Kk9LYUg+bShGcng1SENhUX4vVS9LajxSW2pKUUhNbkJseFo9R1VVRnlIc14hemU0VHNzKzExUERmQiZkez5sVyNaLj0oX15p'@;
put 'a25RVyxZPCE8TGxbKzxQfEAmcCoycDdGWXtrWTAiViQvP11XVjhZWT0pcyF0VTtUT2BJfXpoYkBANVRNbiYvMCJdZ2twJDhxd0R3aUd9I05vb09MYTxRakdVOyxbV1FQeGJIXWBsUE5dcyZ0aiohantFZ2EuP2J4JnRqYm9QflBXQklPVyk/XV1nUEF1KTtCJmwqNnZJeXErX0JCe2dVTmBaYj9n'@;
put 'L31QaEJqcVVtRG8sRG5xZixOcWlyeDsqNEFRQEpuVyFMKksjSy5FcTQ3eTI6Kll5LkMzTHAoL0BmYVtgSmtxWm8/YUQhMkNEe0NaPF1RRnQ2eXE9QCE8eU45UEddNnBESjlyPD1oMSkyUyU4SEA2YExHMmpuIltPVWk3QnllMUxsfG0ueWYwTXEvdDg7LiI4Qnk9Mi9ddDhWcWhPMTtMSTpHMj5B'@;
put 'VVVzRDwsSl5oSUhaTE9yc3w3RTkwX2RNd3RDOEp9TEJLPmI/XTxeZFF4bil3TFVDY3hsYGI4X1VIXWxzMkdEey5kUUh0Nl1kR09QNElVKS9UMlQiNjg9TmhgITdnX30zMjJCY0AvcT1uRUdQellbOjxJTSEyRFVHQDM7PzNKfl5EJFpyc3ZkdVBjZXtPRVlPIn5WR3IraVYlOShLVykuejs1ODg9'@;
put 'SnolVSUzRU1VbmV0QVR9JT1Ad3EseXFIWWRubm1GdDtBKm02VUpRMTdkIzJZW0x+Z1owKXhkKEQsbk9LPmh2cXRGUnllRFtUfSY4WTwyREV6OS9xazdCeVlyT1JFKSw4Uj4mTzA4I1lBfnljI1k+ciZNJndBMzFdYD1zKWcoYSksWHxRMDF3UHFJInR+VW1vXlB4KkhNN3JbOSpdcDhwPm86MjBZ'@;
put 'eXBgVjFFfkAuMklBcnFkMHlYMWRpSmlwOjFNL1QzQng1XntnVFtETEBjPyZfIztqZmpkbmhUUlRINCZuMHI9fTx7VmBYazd9cVpTIz5AKVdkXTRnNWNob3BFa0h8a19GInI+R0UsYn1MJCRrRzl7I0Q4Pj1kITZCPCZ4bGc1b2xWSmxkYDskNCs1bzRNNUl+V2AkOlZxWk45QiUmSiQ3UHpQd3RD'@;
put 'b2gkYFEpNjtxaFtjVW5eQ0dJO11qb3lCVXNvRDNENilaNmddYE5wfXkoN0BgRCMyQjJhRmRGfCUsQ0pQd0NKNHsiRjd6UTxzOCw4L3VxWD0mXjc3JklpVzNsXitjMmokKnZyRVNxVCtSbVNbX0BwRnkjMVVRWFFrIzpZKFgkMVVUITg7PDJjbiR8bTp3dSV2cUhffGRRdDR5P1JFN3M0VEFgeEhU'@;
put 'Zz5NK0Y4ZlFJVCJAPldlI0xSOXpNaHJjKFpraF46UkZKJDcrMm5GYE9vdXxZS3AsPnksODcxVSR2VTFnXU00YU1ZQmAqMncrPXk4MmYqO0Z+PGIkdkk4S3M9JVdnY1J0O0hIX0NrfmE8KlY6ZzUwbzJlWF9NbVJ4XTFBcnI5KlJeUGI3cns3QiNuKTdnZyFURHx6JH19Pn5afipYRm55SkFldmJp'@;
put 'akFCPVs8d1Q5R0hVJShZeiJTO2xfMzFQI0pyaiYmcE9RLDU7XzhJODUyXTc8aWVBd11SLDYvIm0rU0Rkcys+WDo7e0MhSW53d1Q2X3lncGQzTnViTz5ve34uekk6YigocHN2Qip2NDdJQ0VuPT05JT1FMyZLQTU1XkBhYXNPZ3Jte2Z0fGc4VTZuejthP0BIWyx6anJ4OypTJkUsJWVAXSZZPyk9'@;
put 'UTE7bW50OTg1Sl5oRm9GKkp+RShXKzxvTyxpLiskXUUlaC53PWBGKCleS2ZyWTl1fm9jXyMpLCQia0pkQTA0NWcrcllCU0B1a148MGJgLEdDRGs9LnslZUIiKz84ciVOQH0jcj9UJWpuVnM1YyhBcy91bmA2b08vRlN0fF4/UyNePnNwZHk2VTFDKnZdcj5PZWdWYiU9P1VXP3BPT3F9fj14YD5U'@;
put 'QCRBQX5VdWlUQlM6K30lP2VlS3Jodyt+Uk4lV2VxVXYkI2JqSD1NOjVYMlghcl0rPGJJLCpdTGhMcDM6KnojSlomIUp7NyEjY0hUfEVtfUVTT1lyNGlQKjJmc2VncVlCRTllVk1XPXJlWS5bXml4QWMlU1g9O2RoZmlXV1Mha14leDc5aiZVMlVaPDthQ2d4ZT4hLzBMNldbQ1VCKkkhSTQmZzUx'@;
put 'XyR5K05EOShfbSZfKlQ7ajJLOGtCbjpmdFVmcVJJcTVoNlRwOTA1SW5PPnNrSWFHbl02PiZ1L21xYjljOT5SSllHO0dheFlOa2cjUG5WZVNUZVA8YlhlTlBoYTs9QlF8a3FiQmVmLDMvKHpYNnI7fEJHI2tdeGlbJW0kZGVWOW1wPEc7VDgwXngiamZPaXh2SzFoJDJwezkoXnh1fCModWkrQyRi'@;
put 'JEpgbSsvOns+K3ZZMGIvZW9naF5NezxZZ35MQ2RZSWhzM1QuOTN0LGJfVmcibiw2OXFSYnFyTjZsViJ1dlliPnJlWjAscTZRZlBZYDJ0dTlWczcmLzc0Kj1EXX16e0c8PFE8ZUpbYiVaJTFUbDttQ0VIOlRNMmVWQj5rVWFEWGcoOzhTO1smPStHOSVjTmtnKSNkcDVhRGZVK0E+Rmc5JWNOcWtH'@;
put 'QG8zR3BeIS9tImA3JjJdSmV1azR4QzBnM2kjYClIMll6Kl9lbFc0anBfZzhHJW80ITB9ZHxmRFNoTy97aVRdR2RWfUZbMCZoU1oia3NwWXYzPEc+eH1uVSUxT19oYCErdkFfI3xaWiFWUmlfRU52RSsvN1t1ISp2WklMIyM+YHwqRnx4b142cURBaDZFR0lZVUdyTiZ5ISxNfFZ8NE4pbHhvaiMx'@;
put 'Qmt4YTdqPGYxUEhTPG5jJWoud0g7fDxeb1dXdUh1XyhCbzxzVUUxNjVRRUl+cShGZSkjOEs+NGUuWT03KHg8T3VYfUh9UFolO2NhWllAJj8yKWZWKjNIMUohQGFYRzo3YkpkbzRAVlhWSk1RTHIpRFk4bUNaeF1OQX1DXnlidiNRTip3czcjSko2aTJ9c0ZsXk4kZTYlcnoiSyV8MUtEZzwkWXl1'@;
put 'cXYsMkYrUW9WQ01GV01gPF1mc1QsVTd5VTg3WCxCQCo0LDVeMTpnYHtuJHFORH01RHYkNHljZFtsOSkvN2Y3MSN+ZG43Sy8pcm9DUXlbSUdfby5+QmxDYltNKXlDcC9OaHxtOHRCb0lkT3AkOUYsdytxIiVQNXtXY2V9OFE9UDgxbyw5PXxheW81JkZYbFFrNVVhcDA5ZFFYOG8zWFFFNV9pYzFZ'@;
put 'YThEIUV5dFgrVzpHWUUhOkMyfFB7ZGgwZClgJU8wQHU5WSM4W2JhbDN0RVBXVGE3ZGd8WWM4Zy5oWVFmZU1WR1RMVlssfWBEdT8vYDJvR0I/KFtYSS45Zy9Ddm5zRi43KCk3WjYhRypDKj4+LEkhSlZFbWduMClONn0iTEZHQlJ2SkhLOXxkUUZSb2ZBUWFSRXNkdVFVWVo1MkJ1eXNFfTwjQExq'@;
put 'cDM1b0hFXTxrU2BZb1BGKmtBQUFBd0FGQT5XTEM5RipNUmZeTFdwOiVuNHYoZ1pQYUYkfU9TSFV3dk8+aWdFQ3RsQkFBQUFBQUFBdihaSnYuYzBzfEBwRUZiOjs5REpSQ0J5TWMyU11DIWt8JFtydk1OMXE8eXl1fj4mJGx3ejtWPiJmMnVCamAzdV5VKyEyaHFCUy9jPiU5IVJCdGlwa3VGJUAo'@;
put 'YlZOLys3UiQ0QUJUbWdyTUwlOHlMUFsoV1o0ZlhQbD9kbDUmXVlbQzthIlt7XUkoWXdbM2o2KHBISjU8MVovbkhHei4xNFB6eiF9PXczVSZpYV41RTA2T11JK3M4L2l1Ok5oISo7eGpDfF84KlEuJFdUaSVLYFBMazRvSlMjX0guJiZsPzIlbk5YUj1iTyRnSSQqSkglVlJeMSNlJC9ZTX5SNnVz'@;
put 'TlIwYDBGQkw5QldPT0dPTkoyZltiPlUzKUxrQCNMMGwudytXOXs+MnM8TjR8ekchdG52Plg0VSRsSFQ5SCFrelpESnIsOWx0aioscX4vaW0oLyVaNXxFZkJpcFZveSYrIS5+ai9wM1dUY1BfMFpybj9HJG5WRTxIQ3RCWTRWTUFJRTx6dWgsZHxHei9jM1pkOn4rXWQoPnBOXSo7Vip9fXpmSjRm'@;
put 'NFZvK3VxPmx9cXY8fDZuUFJ2S2kzMSVLOVl6L353Q3leeyEzP1FjW1pvek8iLDAwPVRFYiVAKjhfeyp6dmtpQUVUYV8oQkNnN3N0ckBIOVNNdVN1TnFzb1F0UTdxLihxQjBkW2VrazR7O1klS2dfXj05bU0hWTJTX2F3MncueTpFdVszVF9HcWpAOmd3ZUs4QUM6Qm9uaCJUfEtudyhedC8pe1Zn'@;
put 'NDcqe3UwV01DNzN+JmAlUXo0NGlQLiFPM08+LEtkZn4+UFZlTUpXdnlqSDlAKDMlamk3Z3R+bGhwMV5RUU86Oy5XYG5ecDB1aDg8OFEqdmNzKEdwTi42L1hxbS5mKldRVUl+ZSp+aElad2Y/Nmw0NDdwMk0rITc0YEJ5V09UP1RtJC46e1Urc3N4WGBMPlFHd1tiLEJeX15RPV17L0ZLK1ZLdilQ'@;
put 'NCZsYyk+KjpiUyR3bV9jRlVsK3VMdTFDe2wsLkVIVUV2W1tsKlBQXnxbfkRYfWAhZDUpMmtbRWdvNmUwWVVDcixSWXgjVl5wbCtjYkdrVWhxJV5UamBZSEReLiguejpILD82R1pSeFRqQ1lGLFREK0p2QzV2VWYuU1RkbDomOnZCTjk3UF9MdlJDU15oVWtfOiRqaHNdJXRCTFdveFFiUDROWjAw'@;
put 'dHg8ODg/LEBTR01zaT51JWlQdmwhRHRVIVRgdjR1Yj5DMmskVHg6bWVwXjZVM2BeWDhhTlJGY35ac1ZfVyV+P2hCQTFNSzBMKm9vajQxVG1ORW5xNTZTYXhOUWxPM3srUTxZXShNfFI8PlkwcmJYSVdHU0E+NEZXWEorc2xdVlcpRHJme0csOixsWXdVMXFAW0RHSmVnQ0creXVfSnFkZXQsP08m'@;
put 'QHN0UkNGUyx2KHduenpEYzRhQ3dkR0pMQiIrVjhdPVd2R2JZeWkrMHpBZ1FpWV9ITnpBNytJR3FbNk9UUHxIK05oPig4OTo0fkF2N0xNdSRuV31GSUx8LlghfnpxYltqa0t5RUFXN1thU2omQUlFK1FSNDEsSF80Oyk8ZTMsQEBiOWhfey8uTlh0ZTxkSWV1Qz4qPCNsfkN7aDNtKG9FckBnalkq'@;
put 'WlRkUjV3VzcuWUdNPiNEUXhhXj45aGY0QnF9XXYvYW5CcVAuNVlxcEdHTS5Oey5lM19dcElJWz94bTsuJmo0UT8/KXtpWyJkIVJNXXJ4cmdZeGo7K2xzZi82djtQNUxtZWs5PTl9Ul1qYmhQSVczY1Z6U18peCZiUlAxOUUwUVV7N21vRH59NU8sJipQfWpoOC9xIlA0I2ljRUdpOCwjTFtHOVl4'@;
put 'b35AaCNdUjY0YmxKRGY2USElcCgsfCUjOVR9QmdCby57XjtTYUZ1amcka2liaDJrWm5JMX0selZpOllpImZyPlBqTjleLGoqLzhJZ0N2PyFgbG0qb0I8bVlPeCJFWTU/TnZpRW9US2pSfi5JTyt4JjtKLHo7enFgK007Jnh2a1V5RHRvdTE4bXg9ZDtpc3Q4YSNYXTlwL3o6PkJaaHYwLzJHZztW'@;
put 'V0t5bWt2ZnksRSw5OmdNfTV7cVpGXX4oMUYuMkBqVEtiWGBCN30oP3U+UCFGYmBwO34/fmlEeCVjJjlmdFh+MG5ENXorXmhBS3ZRQnZ6KVBgOEp4I04yc2ZeMVhLYC5PKS9mXUB1MGQ3dT4mWzFDUWcyYDFeb2xpWTJWS0R2N0dGKk9LL0lfIlo/OkVIRD8/ajBSU05ufSUveUtNcWUjWzZ8KyRj'@;
put 'IXI4PmxrfXFxa0JqJldZdkVnPDt8dn1XLjg1VkRYQzpaRVhUZ2NYdiFNKTtbMl5ZPX1fWzk3LkBXT1tBQDBwK1F6MC9WbCRyOUFkRiY+NGdlOG9mUWIpakgiUT8kM0hoSzhCK1hsfSgvOyFBOm5kVVViZylaTSxkW2s3RzgjaEQqVltaUn4yOyojP2wjdCVfUnNzI3JLRk5bIW5HMCsycj9dInJT'@;
put 'NGdmVl8pJjhHNz0yZnMueHlFY24waTIrVElFaSRCdTN9dHV9WSZUNm1IdVE0fW05TiUqb2Mib2tQdyhRV2U1TnNNK210I3BIN2E5M2RyVDpNTXVqckI5XkpoZHc5SlhALF4oOUJwMSwpXWp+eFRiKihlYms+LkR6Sml2Y19uQkxTTyl5Pig2eHhvc1FZWG9RfUtPK0MkfSpIKWdGbCpuOlR+WDxm'@;
put 'cmQ+PSpaSzcwYGxUKmJfNl5kOVhTUGJgKT9yLDs2ODgsMH0zeGlfTGpHP2JZcVhUNERHL2h5aHl8LCMzdToqaS88KHtFYyVzdWxrIWJmRDYvLGlafjQwWmtBN3E7WC5zLC9yWmlUS3N2elRjKHJedjxGWyE2JUgocnduPGZBfX1yKlJCdTgmZEJYcF9DSEJRU31Bfm9GVF9ebXVAVWl+QVdIenNT'@;
put 'ZXxROVtoWGdSQSxCbyw7bWxiZj1LdCguYDokbE4hVEErXTRqNCRqXTZNVVAhczZNXVZSLlNOPDxffihNRitnY28xLkF6eXI5PWVoYmh8YTNfPUZwP0pLfnciZCUpPCpraX1nUGxgXkVGUkVMJnkwXjw4dl5AZmlvRVNjUm1yM1MhN0MvQFB1anprTms7fV44M2N3PS93d3RQQ2FxclYsSTVfRUIl'@;
put 'KTRbcGw7ak9PV24obHhaOVtsR1IyPHNGZipVXlpKbio7RUheWnAzTyJnNDxWeXwmLi93LE5dbiV5QEp8cCM7KzE3WmxGb2A5ZTlgajk4PDxkZCQvLDFCbkVsXVdgVEp4UkYmSCY3bz83Xk1sPUpSO2AlK1Q1fTEoKCRBO2t+bj8oVm5TMDB0Jl8oOChMZEJBIUFUQ10lZ0J8KExKfW9jL2YhNnEo'@;
put 'cVpwRS5NYS5sSE4kfGcqb1JvK2t0QElxPEhPfSVER2c7NUFAQmBkP1pCIyJhaXsieTc8SzdiV3QxYk8iVUBublJQQjc0aGpMZldSIk9xZmhFcSkrd0khd0Q5KV1EIX42K05yeChjLk8hWUQ2MV1RS2wjLzE/ZjQ8Sm5GUWdCUFFiJUljN0QjJC42RHJVLyREKHgqRC4oV2AmMHhoTGZkVj1XR30o'@;
put 'XnM3KVlZVGsuNnU2LH5vIWFAYzMlaClfNUBIJUowb2REelIuW2pHVEsmZCtwfjNEXkxsaiQvXTwxRixhOTFNWjBSbHoofVkrZzN9MWhhY1ZoLFVhKjsven4wR29BaC5+aHIqcnt7VS5yVVJSZ2dBTWpVYF0kWFVka2M1PSs5UEVmaW5CZXtJXkpVX2lmZiZhT2NIPDUvJCpOcWtGOEcjSndjRkxp'@;
put 'IytVfl4oMWRdTlsyI0VtNFNrUT0wS115KDs2Iz1Ian0lV2sxUWZdfSJYcltJViMueG5gZXNiZ2svQipLVkx3Mzd5Q1gvOmRhTDg/QGltTyVTVUpfcjxWYjJNYHQzVVFTQlEzcFR1SytGLiFqX0slNGM0ckg4fl5fUCYmRTNJdSFGM3MqfT1LaEBlLFFnTjhTTjpXLD5dVixNSGpgI3toc0BtWTlr'@;
put 'TjF0Q3RgWFlhcit1Und2X2g2MGFuREZddWhNKGYxcmNLUjB2On4jd2ZIZmRie2gyTT9TOilsfXh2UEZtZEsmRyQ6K0hsWW1RZUJQNk9LYks6Pm5gRz1bKGZeX0hLP2YpbHlxUW5bTjBsZkwsI2I0dTo9d0MoN0xLYlhSNTVUZ2FDdWtTdH16X155MEpWPEUibExKfHpyJkMpWFh+aHg1RV5tWEM8'@;
put 'W2tBZyx3ZTxbS1R0N24jaFU2YjQuMDhPaCJNXVFdYHcwYjBSbT9aK1d8YkZ7Ul49aGUhTj9fbUk5QE0vQ3ZQTlYlRElMSiomXl99SEZecjQxVX0wVj1obnVwVDRoWiF4ck9IK3FOLiYpNGxZK2dpanUzV0JsKXFRTD4/UFFuflZ7QjQ6SS4qempOSGArZHhsLHgxKFRHdlk+PyUmaCxpWUZLPlAj'@;
put 'Zy9TS24oJGQkKzcpcjIyOHwrS2UvRWZTMlkjflIvJWt7W25xZmMkTl1nT2NsPVdOLixePTY+SlU7Y11+RGUkN2UxQXdnIjNnRXAvKSoxZlFyQGFlTlJffiooeCR5bDd4c2B4KV13N0QmZS5MZXphLkw8WFtHNX5CJWNWQDB3XT4hfUcwbS8+XXNSaHw+NG1zKSZjJX5OYTtpUiY2WCZXdFNnMG03'@;
put 'fiYyMEl3YC9wSkQoUUxCOjJORmtueCtUV05Fd2JMXUNNbFM7SVYvOjt6TG4oSyQ6fSlFbD1XUU1ybjVqVFVbWFl5MHZdZilpSCY8PyY7WUE2RXQsWyQ5XVgqQnUqemR2R09pdSZAfWFATkgqdk59emVDNG5yOyhwdFk6eUFBMV1mNFFGbkVibGRGfnA7QUlEeng9aXBuWUU4e3N4bXxpUkRpTWZw'@;
put 'TmpZU2QsVik8T3xoViVHK2JAO1EhME8rUU5RYjxLYk55Oip8RTpZQGo5L0pAd1RFVWh9ZXtxZWRBdSUjfEVCPWBJKDRuPEJyPk9OQ2FiWEdsXSpAWzJtLEVkP3QxQ3xVcmJQb3F0MWR7RntBLHNDZkAzaT4pLzMhUGdqd2ZwZXssIX4yVF89QX5CQVclblU+fTVoaHUjPVY+KTp5LjFjdnFGVDxK'@;
put 'RlR7MnJ9UGcucUFiQzVLZUxGNGc8biU0Q31scWEzd0MjPHttejlEeyRRR1tvV0RaR1BGa2dbfHJCXXF7PUBfak1ldU00XyU8KkZVIn1tS08kdE9nJjQ7cWJhTXdvRFFyYl89bXBkRzAuWUA3b2wyNnthUlZgfn5UODhWcmgpM044X0pqMnJtQmIwbV4xYC5ESH5KS3ZEcGhJQEtoV316IiVUbSJJ'@;
put 'aUMrNUwrbHlzdEpoJEpMUDYpcHw7UiF0KG96ODk7Mk80QGR9W3wxSmtpeWNaM1U6JElIYkRtMTcrVGFjJVVLJnxRdkRzaTtkbFM5SWg8IXhIeTxVeDFuWXVYa0JEITNOWl4sWyxAVFd5I3hTPCs2fWhwQWJhI3VUZUM4TC40ITYmckY7KXlPcT1CXkIpV1cjb0BoU3RKaSk8VksyZkV2dEp8eV8s'@;
put 'MGJRYXBrZUA9PGI/ODQqeVhhZWtJWkRFJV16SzVAbGZoVldKPjU9e197KXAoXlV4d2ZEeyxCV0A2KlN9Kl40Sj5CKisvPjZPRSkhcCVuanJSaEJsRD9wV0REX28+eDJTLHc8Y3IveDN4Uz4uJF1GRSY4XyQ2ZStDfkBLLG1WNTB6Ij1ENlszWz96I3FGc2xXfTVzdFcoPDFvKjh0JXVXb1lVfD4u'@;
put 'ejVYXiJkPit6bUhWZ15FMHtsL10ibUMzWnJhKD1JKChKSylaajttXX5sQUdkVW82bCNhKXc1PmtVJEJyb0hFIzgjU2AidCxWPiI+RCFqJVJ5b2c0OiI+KWtAa2Y7R3NkZE05O35jQTt2Wi82TEVQMk5YOUVKWE5rN1dYLEo8azoxVEY9XVg2JDdscEJXS0BbPm9FI1VafHFOdCk9N3YqcHd2aUFP'@;
put 'Iiw8QlFQajJwTTA7PHhran5JTzB4VWQmQ3ZGfS5BUE1nQXgxPFVse00xWFBRVSlMUk8/RTZjeHNuel5yRTklP09KPFJiInBDZjxKWSQjUlNhTVhgLmNUMCYhRTt2WGF0MSU0fClMP35eM3ZvVm1EdUJsZ1V4dkQyQSs4TTlee0RlS3c6cXI3ekM7JGxoOWN+cjNhPXFLKCIyamNqMHlyfTNHZm5T'@;
put 'fmR9aWRabXskKk1qMHRKIzlaLHdyTFImT18ieCtYN2o4d01LeHM1R0ldclt8TzZhfiovSHxNVXZYa0BrM2tJJTpjMiE+Qz9AcjRBJS41UF8/N3VxMURBdHZxenhVZXhuaDVPO0ovKyRPKTd+Si9xJl08JjUwXkFnMC9xZi43T19oNE5vI34jPEhLLmt2YmFMJkgpIXRrPSRhTjFPKXdFQFgpT09q'@;
put 'cGIyU0BUP2hUK25dbVZnPTB6c35+Ynt3aCp1Q0o5PWpQQ189NH1dTmdmem5RVjJRaWJ2RSQyS045TEUka1lJdXciNkV3enF5NWZIfV9JKmJbdio9KSVWNkhaa2t+QiZXbjkqS3ZtSHgjIX1NZm8pbUV1UWlLTmNeK3NeaSx5TE06ckNBVnFTaGljUTshcUk4WHErXnhFRHdYMUllbTp9UHVOLG8l'@;
put 'X3c5TCZhVFNmfWBOOGdVKUApazxLJDtHOEBGWzEuXUgwUUNJKjB0ckBXJTNqK0p8ZDY7WkcoSTZdcHpbaH1xNFQxYS5UWSlSaDoqN1JoRkNkWS8paEVjK30mb2Z4MUkjfVAiQX0rKjR9YlorOWglSH0pLEdBc0dLZHFpYGVZb0tBVTIhYSoqJFQiSXNAUUhxQ0NxJWpeMyU4PEFxWStRVD42fnM0'@;
put 'd006YVVkUnV+M2U0d1VFR2tCLHo/OmQ+WlYwLy4lUkRIJiV0b1UvOmx5d1ZAM29DZ2g4bjBTdWBtcmFCeE1VQnJKaEFnIj1zNmR3anVaI2tXW3NrRTxuankhWntlRWByRyJRNH4xWypGZzRLNnJkVWN1MTR2eDJmSDdyNnUkU2xWe0QreSNvfmsxRn5RJmJyTSVnMk8hZEk5L30+L1RtbmA/TXRV'@;
put 'NC5LXz9FOlEkMFtoIjpKZ1N6PU9TKSNFPndXL29OIU1+flE/USNXNGZgND1XXytnWjA9SSptR1AxK3Y7b0U6c1UxN1tDXUc4Zz43am5jcDg+Im4+ZFJPZSp3fkUqWmRTdGJLZX1dITFYNF85UHteXypRaWdUY19rInt+fWMrfENeZjF2TDx8SXdZI0xsTC8/VipLaWx1I0tZSnY6dnAqQz02OVFi'@;
put 'WiZNJFVYWD4sU101KXFafkc1els0blg7ZGd9Lzs2JWx5ME0sb0owZ1lOe1VtVz9RezU0fTQsW1s+ZnckR01AMWtXTFhYYSs5ZityIWczTE88VDNFbWxjR09RbEZMI2JDL2FORTMhS3hsaT5iO1ZZNGJNLmkoPUklOUlBUS52RnIwVX5IN1U8TyJufSUlP35NSFd9YWspUCk3ZCJLX0FMS1RwKzF8'@;
put 'YiU8MHZlbDxNL2Z5MCxlZjNAaE14TTUjIktEazNoPE5yPVNgcks/T1JSXXNfalFVUEJNLC4xOCRxTH5gOFUqXj5lSGRRZWRFZC9HS0Y5JD0waHh0NCZvc2xGXyk+TzZaRTlybkhbV09yRn45cClRcWlRIX11O09MQ3VmKGN6bEhWeF9ZSjxGX25aLEZ0X2ZPWSIlSVFjM3A8T2goI25eUEhFSGF9'@;
put 'Xk46QHJEQjBETn1bKip+Xi92UVI3SXosWj8xKS40e2clZ3VOdk9JcWtPWGMyREJiQi9COXE4eT8qMSVbdC5+Z30iJHohSmglek5bfTQ6P3JbeXg3d1Y9O3xybGM/RFJWbUcpI3QjMX03RCZsZjxOTHUxNkZMUXB2OERkfC5lInZLQnBTQ1cwKkg8WTNLZnk9bF8/ZjYiJDQoWklyaiNZWzM5Nm18'@;
put 'Wno+NS9fV0g9SzkyfixNc1R0PVZufSQ3K3N0Mn5pX3c+RFteOT5nZGxsWyVSPnk0SypzbUEwZ2JlOC90Om9aJXR1RlhbT1BCVG81MXtQUC5NSW0wWWE9KXVwdXFyPCUweklOKnRoVGsiZX4vfXplcil+UD1Qcj1JNjw8Wzp8ekNGIyF8SjEyMUdmTjs3XjEoKnZrSUAsc0J9dUY8e2x7bjJ1aUdo'@;
put 'JXhzYHtYNEFJPXhpU1ssckxmaF4wR004SjQvJi9MXi9jRiROI3ghcW5NITshRS9HRXZYOGA2L2pWJVFnMX46Vm1NQ2lLSko1eVMmWV1DWylLSXM0RiNpciV9W2EyR2s2ak1rW2xmYjBoQHJiWDh3P30/Uz9OL2c0XjdUeGR2UitAKHB2ZyJrVzdbPCxOd0AmZklfMW9+ezs5MTN1d0ElLjVZPGpW'@;
put 'QEgsOGtXJFZOI3hXayt0a111QjlTRFY5UyNBTF16KH5WVWtiPnI7bE9JRCFRYEF6PTY2MDg+eUZXRTsiYkM+aVF0TT9MNGptYyhyKTZdQk5AUnh7IztPIi47b1daKSVUPDJNMDtGRkRWMzVoMTZSZTtCUl8zOzcjWHVpPl9EUkN1IS9GTEh7a1gsYEVEdyVjJWMzUzM8ZVlVa0wqblZPK3JrVFAv'@;
put 'U0hIfSZyd3RtQzcwTE9bcmVpVHlxSTBaWzlHXnk7RGZlJFMiZnBDUntNV0dCfDo9M3p4N1ZrQ2NeayJCSV1aUiNSYEpCZGdZKlgqT0wickUlbDpoVztKKi53eHtDbyMmZjZXb2xVe10lZmpFfDc6RU4zbyNWNm5vY3RkKiNzUG5kVHo0KnsrKGxnTVJxfFp5WElvNT8jaVRMIUtCc0NfZWRiLj9O'@;
put 'YVtFYnoyckdFNnA0aWdmUmZkMXlpTygpMTNMP0Q3QXNHI0d1bkJpQk1VYSRpMjI/eVtmQmFbRlcuK2A+O086VClRbUtWWnJJRlZjZD8mWnNoPT4jI0tGISRQZXt4dmc9fjklN199XTEwdTBieWtbKH5oN3EudlhCPGhMSzZwWVR6TW1CfVliXVZJWm18ZFdAPyZxTkQ5NT5hMHg3Lmp3ZF1gNjlr'@;
put 'aENpOXVER1t2NGh0RUZHUFdqKnshWllRZCZpQUxdL190QkI7MDdsXXcoNyhrVWYocihsNmZoc2Y1OnlrRmVjSEZnO0dWMX5fNUxlUUA8fThzQVovNGBSNjB5bF1nRXJAbWNudEcqIWd4fFhVXy5TMVtMZFJIRzAvQHliKkk8XUpfK0l8JmpoV2pgeDs+OkxsZy5VZEV9VTZtXWhoTGA/d25kdEw8'@;
put 'T2RXM1pVYW4xZH00TXtPVlNlOz1raTgibSNeYyVYXjIzNiR0Z0tDeixwdyxhVTAmW0V3NHl2I0MkMCNlJV1wPVAjOkBkeSFvbnp9Pz8lNDxmS2ozNFR2al1lL0BoUmczXUY2PXIjX11MNjxAWGJbRyw/VzMlc0tnZVF3cCVbOkhyKChteDBlJVVgNHoyZVtYWWI7L1lPY3tsZ0lxQ18ubGxTPkpg'@;
put 'Ik5eUkEvXWJ6ZzthMHEzb3AxSTIjfGs8TUc+PSlpJCR5PS9RcW5JJm9fISUmTEh4T0NPUFsrWT1sKG1FRnpeeGclM28iJXA9eHl2JHlJJElNX2ZJTW15V083enxRP1RkJVNqQFNqe2U9fEhnc0dZXm55UDd7eHo6SGkvLH1mU0I+XlFvam8sNlgoYFROcVlBRW86VXhhSzpxUS82WCpfUVA/T0k/'@;
put 'OU5KJWRzcW11TiVxVkRfMk1AKUtsI2xaeFFnfU45X3s8RkYpYToiYTlYTzE2SWlZWkZnJXBHMyszO1AvIVcufFZhdXxfMkg6PEhRUFlndDVaQ3hTZFgoRGJ8XXZYWlErXXlBfUVpIzJITT5AMkhjSVswSV9AL3xFVWRAJXpDfHpKfncuUCkmXXFxd1QzZHNPYXNwM0JAYiZ2ZCpfWH1HTCVmIjA6'@;
put 'eSk3bStFbm9eNHFxbzlqSER7b147enssTV5lMShBKSNbdkAuI08rWEhtMmVOR2tMUSxlISZfblE6MGFPdD11dUV+TTVHS3dnN15KNF84U0pSTWlTb1JXPT8ueFkmYnxrU28lSVFiMUpYXipvOUc+QkFUajBHJmEpTFdxcUkwSDM6Iz1zVDFqRG89QGd2JWNwQWtSXV1fXzZXdWRZJXJtalg7cEZ6'@;
put 'eyFqLio4bGx1ez1eQGtvUkc/I1pBOj8mR1dVfEVnWVtRdzV6YFFtfGlXbmtAWjxCcCM8c1ghODZ0LyNlKU0hSVVpVDBIc3dyVWVzU3BTP307Uy5scF1pdUFocnpCVmlCdlhmcDFSZFs4JVZwSzthXXI3QC4xQCtkK3hSPUwpNjtqbXtwUiZpKWAhYTB9I2teQVdhYlYrSTJTUkN2OWIwVnlPTzI1'@;
put 'bHQ1KGA7ZW9ITE1fMyQlaVtBY10xRjJCeks7PkQ/UFt4c283c25qXnlRbz9JL1duRSolc11lbGRQbThEWlEhRUtfY3RQNFB0dGsjaDEqWlBvMmBDeGtCfjA9Wl5DSGVCeG1kPEAjNW9INF9KXmxCQUR9XmFHZl13L3lVJmg4biJNfF1eMiRGYE4pa28hTExHcylOY1EpPn16QSh3V0lhOld3MyU0'@;
put 'WlQ2RShvMltBYlJ0UXlBdzp1UmRTUC8vRkxmQntMPmpDdkxydDdNWVpjbkNBSXN8bilwZ18jKWc3O1lSalR7T29QY25DLHNSdi9Gc35oKXxaVilkZyQufSozUGk6NEFtOUVSUVUmNFAyYyVhYD8/V0hkNVlaMXNabm9gZXgkWGNDWU9NXzwkc3NSdTduMiEyc3N8SX40fmJDRCZ4UF8wP2lkW0oi'@;
put 'dE06a090cExhNDYsdlU/bTA/TSNJWnxoUzVgMlppUyxTSHVERlBhMDZDTjA+KyZzUSxbaiYrKW9pTSNMTGE2XlFBZTpLRng1IkVkMVQ1XVNtJExiP09sQXQ0azxRJitSckd7R1Vva0ZaOnlnMTYoMFpybCNKZ0xzei9KcWpAW0dONkxHdDQ3IktpVk44dSNSezBqIyo+NTt3L1lueUQqQDtZOiMv'@;
put 'Q0xAe1gyIkR+WGFIXVB6KUxXay9XJXZJN0BOPk9JM1ErX29yZ1ViZV1IQyt6JjIwcHdocXtBNEVxJDRzZzFaUzMrR2Zod05NWk9IMl5+ZjExcXxLbzxFZSJHfSFIRCxOWXRrUEF5YnlnX3x+QCxiazJYMnlxR01YYDZuUW5Veko5MEBvaTUiIUpJcGFwPkR2MlovaT5IRVJ3UntCczhOfDhlKm5h'@;
put 'M10udj5GTC81PEg6KXN8KzlkRTNUPHJRLG5faTBFRjVjaERVP0BwT2lBUDVTMjA4SF4iUyZ3T31bI0pLNktPJFF5UVpVSkJyNTx5NHJlR1ZvOEIhXSwvJn5RZCQzNk9rUU4vYGJlRU52NXA6TEF8eyZOUiRAWWw7N10+fHkjWGFrS3xhP1ZNeGVkMm42QnQjYG1YYlA9S2V4cF9vWjkyXks2Uj5G'@;
put 'UWxiSV9pW28zcClDKWswQT1CL1R5Y2RdOENRPH01Pl98MSo2NUYhOnhTWkJYSytEWyIoc1s6SGFHSFEkTkEmTn5iUjIkWUJtQkE9YDVxRTsmJVVBXmFRS3lnaUJAYWJxUTEvVXZRWiFCUUc3ZjBjT1QrP3FQfkpmWUNUaUV+VUljPnw7UTA+fjgqb0V9SElsKTdeXT5kNENPYiMhfG5rSGwjRWco'@;
put 'MlokJjxKU100ej01YllSNXUwfGNTeTBkRkQvdH45YjpvRittJioiJHMvfXQ9Xyk4OEo7dlU1XStQekchXitfXXJbVmVFc3omVEImNk58Jml6bk9vZjJZcS4mL1ZzRE9JLiZYVTQ0RXlDVltPQjoueiVjdy5iXiZ2eUVeRWZBWCNxKnI3c0NeYDVEUE1jUCUrMDtEWWx6VHFVaU5rPTx9bzdyS0Eh'@;
put 'Y0h7TTFgRl9KW3lOaTRyNVhALGkqYTguZzo4KDQjbWRdbjVMWkBiQEp0eVtxS2pkY0xOTFJvYzpRYTBgWT9zdnoyO05ySEJNVX1qd2l7Yj89aFtFWkBPRStCYVtMWkNubUIlLnlESD8oU3c6RWg0Kk07QUdKVTdTeCN4YVl4dmJKSEVkWUVeRyJ3Rk0+dGo3M3RZI2V2MlEqfEkzZiUrVWgvXXVq'@;
put 'Yk8uSyklV2RucWV5cE4pQldBODkhckwzU1M9Milsdj4+L1dNSjlISSg8cEEjTkgsbzQkbU5AKXVZTFYuMEZzQyw5eFB9ZnFeSTB7NHNGOHBFMFFpMFA7PjtxWnxaQG83WSMkeWJrSj4vYW0sblczeyYwRU55cEY0TF56Xy5CbD5sMDVbXlVgbDciQmZ7ISt6XixQL2cle0Z6SzJVWm9qP3R7Rnx1'@;
put 'QChrUyZxMGtSSUIpOnRlVUp7bEZ4P1gyVXlqQF1LOUhqJUpLQmZtMy8wKTI6SFlIJmtkMD9nfUkvaFBgWEpnKGQyMWpsXnRyVUxyalJ3O2h9QSUwRSNIXk8idHA3fGkzfERjQ3BDaUwoQTdnOy5IPkpHJlAoRUFPRVB5M2YpNnxkWnxdXi4+R1BRJS4rdys7QHpoQ2NEU1lpbjsmZS8yJE1Zb2JR'@;
put 'JXUrNDoxV1cvRl1Rfko5KWNvS2YmIWBAdyJVZSslaE8wViQsemYmIWEpXSgmNi8hZmZ3WXxeTWo6KEIvUD5UNUQ9TDspTnY4aEFuL0JqJHJrOWwvTm5NZ0lwdTlNZktOKEM1KiE7YjJPe2JheVpbVjJrM1hWRzA/M11zZE17XTBAZU1kTSRtOm4ueVk6Tn1IIW94YjUyJjpVVyI0WSkvd3VzMl9g'@;
put 'TThASkBCXllrdVdMSl5oK20+b2h5cjxje2NVc09EQyooYUYvKzhHUWp2MitieSlRMXhfTjA+JW5vcFovKEBtIU93bzFjQyFydFIuM2ZsP3UvU3lYZGxuP0M4NGlgIkUkLHVCV1RlZUUhNSs9TEkwJUc6ezI7dClLQDpFdzxOaEFmQ156Ki5sfnpELm1dTC5IeVRiWCUqPj0qX0lpJDAjPXh7ZSts'@;
put 'JDNpP18+WGF3c2UmWFdIeyp+PlFUT1MsTEdtOGxhYDVROytpbT8mYnRafGc2NFUvNEhgQGpzRjFtWUtXImhENXA5UzxFWHpKOEk1N2ZSUnNMZj1OPnBaOW4pY29HWWU5WVU2YngwWihHdHcpWSRVdF5pLFZ1X0E1LytmWGh3KU1hYjhuXWM7JEp4a1gufVhFc0J7dEEsKz1SJkIhRT5YcFtIcllM'@;
put 'VFkjN3Bbdl95KU9QdmZHIV9hUkssW2NjP2ZSYE99aD1TNzo2PTVXWE57REJyZUI2S2B5eEtHbD5AQHVvaFc/Q3xGNTokcXNiS1ddODhwbVUjX25lO2ZXSEAjTjRPQl4oPU1yTipfc1UkSlEwOG1JMzwlRUByYG5te21QZGkiJkZFcyNobS5eMiZga2F5Wk9QTW5Ten47ViFyYnQzay9mMTY6SHIi'@;
put 'QWFPcztFLk1aWi9SYCImRj1CP2sjS05TVlhNU0pme19yWmNqZHYmSU53Ri5FL2BRUkdlUTVNczw1TmltMSl5aDlLN0tgY0wsWE5GZUtgMExLP00mZ3N8NE5jQmpfRD1tJV0hNT9dVG0rXV0qQnxTNURLcyR7XVlXaUZFQGxAalJ1LkxESk9HQnxGQSYiXX4lIyVgYEhGZnJEOiZPMj91RU51c3tM'@;
put 'RHt0OWkoeFplZShXJnhfPSw3IzZeNEx6Nk04V0BWSCQ3JCFAPntlNkArPkRSTj97clUqNUNKKjxiOHtDamxsKn1AM0B3InokeGtmR3phLyZ7OHN9N1ZjZlshMmNSOzs3bEJ9O1NUfklDN1dKUm5ucTA0SHc7LCQkUjp2aH16PFdYQHVGRiIkOEUvTnJSc015WH4/PjRIam0mdEJ5MnE7Rmdsdm83'@;
put 'Q08pYnRBVUx+ZTA8IzlXPCp+TXVNclFpJGthZmRRaCZkKGpUVihTfFc2Zn1CPjQqQnAoM0RPSzdWR11RUGpYKXVVfEQwVVZ2dHVXN0dfKDRiQHs1WThnM111Qzs9Q1pkSFRtVDxRLyJZbXpkV1l+bDZbKFR9TjtIfFUzKU9DTyhNMVdEeCxASEV5YHM0QjFFamIwJldGcHkzLmw6XiFdQE9OO1tZ'@;
put 'bGZGZH5ZYlIlMl9LYiFAXXIsYlNXZlkoRWNPSCNpWXhsfWNIUjYwQG9ZOnoyezE4LlZJMilTdW9wI2hrMk5+Q1NkOXBFVzZaIzJkMWQ5eUIxRHtCN0lTZGdXO3JyWlc0bW50d3hZa3F9U0FwPGdARmxQVGl9d0gwWk9gfl0+NDFuQHMuLz1FYFt+PkU3TzQva2h9P11uLmBYRndPYmVuOjRSO0Zf'@;
put 'eUVXcDo5ZSt7TCtLT0I5MmgqUnIrS0MqIkxZXks8JEojSCk9PD0pcXh1UXZ1WypBYTVZYlhPXX5FMzpAfnBLZzU/Vjk0XjtBcSg8On1HeSxSaSRwYksyPDJmIX4wKV8oKENaI0tmWk00fERbVzVyMDh4ZFJZMDtERHV5I3BMcE13KTpTTSJVZiJwI204LkJXQkMrcldnQCwidVlYeyh+TCVEPHou'@;
put 'JnlqXXt+aUI3fkZCZUhTRlslWV90R1ZqK0pqRzZ1InFPI1VLQTQjdy89SmNTcm8+SjMoXSkkWj15cm9ZR0hyTEFhbSI9Mm9aQEI4Wiw6R2dxS04yeiVPbnNBLiQyfTJoJShzZiw1Q2prdSp4QjtjTFc4W1FRViwkaXwoMmQkVEdUNzhZeiplKlJKNjBuQChzVkMxUDlFfU5AIkgxNUZ8PHZSQU1I'@;
put 'SGkyLzFuS3ZEUCldb1ZnOE5TOSVhQkp2VDtbdnFJUEJic308aHh4TmBeNmRObzg6PVBiPWhDNEchbXlwPHFNW1FlIys3IyVRI2FHKV5gfDtHNHgwOTU0S3t6PDFbOnFZQD49XkM2VEN7RS5NV21pUGM4KURrNCl5PmQ3ZGRsSFNHfnx5bE9yXW0qaGN3VFkhbkdFazR8NGR7OHs6dTNPa0w5Uz0j'@;
put 'TjxpNFgwUFExUzJIQjoweT1me3BMXWZ1fCRmLFMoaU5vZEhgeypeV2piTSlZOD1sMkJrLHkrW2NZRHJ2JixYRDcqTkRyS0NKP007MX54WCp7YyZFaiVXNUNVRG1FejojeShKSCsoaHNKW3tzTzlARDpwZ3wzWVZzZWVXdUNqUWE7SD8sWkM7SEoqNkN4fXw5PjpzajdTIjBaUV1ScWVINitdaHVR'@;
put 'I2FQIlEuPXFDcmgyQ1d7dzp9IldzWTckbTd5aXVHIURkTlM8e14oN280Yk1PMkdeTFRSdF1FUC4zSVUyajRPRzw4SWtgJiNEenRvKXozO0EzWn5ofTY+NTlYbzRSZztaY1BrfCFyR0ReJV1PTTR0ZFZWUSpLeHlHeEQpe3ssMEBbODF6PWJ1UU5LM31MbFglXl1GUCZRdT5fOFpRPlY6ZV9wPi5o'@;
put 'a2dwTEMuYVdsVUtNKlE/ZUVCKGhMZHNJcTpRVEVxakQsTlg4PTh+RzpnJnp1SkA3N21HTDd4cWRvKUBpQ3xHcTIsO1ZWQX5kX0VVWERNeSxjNXxYcmheK0Z9JWxwSmB+PmYic2BfZGVDOiVfQGcoflZbS0guOVB1ZjdyN0JEIlFpajdMOzRbWDBFSWNzWEg6aFtQUG5MJEA/QjpQL3Zjdjt3aUc2'@;
put 'XkkqJixXKlNoWkxVMSwzKm1CV2BiWX1icD1xPUdYQEMpdDd5WnM/WEJ6KkRuaHxJbkE+JGtBX1E4fGh4KkQxO0tJfjIuMWNMajA/ODR+dEloWzhDW0cjJX4sYT0hRHdRKn1oUWM8SnxdMHo1PDtLZmFCJGpVUTFbUTE/VGBsSXh6IUZuQlBkMGAvekV0TFVZITlhN2lJMnlOQzRmXkghU1RNVkM7'@;
put 'QjJxPyppeShlQjptLERxdkRTWXMuWWZXVjtWfj5Da2dNeDVIK0JKeDlpQ1Y3WiRWdEVgLiQmJHZxWytHIjd9SFZxZDpoVmIpfVRiSX0oLjVnS2pLOmJEZCZhKz19dGRuaWFkJVhaYXxqeixMZ3B4UHxsPSp5Qix5WnplaU8rV3RIdDNpfjpQOlhzd0BOJDlxZkNAQWguMEg4RiQpb0labV8rI0hj'@;
put 'UzArNlJGfC5FKEVzIyJpMyZbI0dOVWo9SGBdR2pMTzksXmFHPG00SD9oSnFkIkZ0ZzkkeH1UYWomam5SezdhekpeX25baG5DbCVMZFVgVkpabTdpUzouTFVfZTI2NnRhREswYmYjdlozPUlybndgI0VGaSNgWm9neV9uVXlZPyU1L25IdV5RO2IjUC4kJTNrK30/fC5kc1t7YX4xZy4+ZFtWSE5w'@;
put 'dihiL0NLSSpGdnFqNlV3UEokSzlveD0xQzE0SHtPTmEpLHY4YyliaU97b1JXaiRHald2bkZbJnV2VDpxUTI8N3hLP2J6IURrcEcqOjI2WHlIRlhFaV9EZV45W0tpYkRfblNCYCREMlksKXtPTiouKjooJl5BJC8rQyZVfVpMd2wpdUJMflpKIWFASi9KZCpIYk97Qmo2PUJkRkksY21UeHRkZT42'@;
put 'Y2NtO3p5PXp1YEddU3phNHllIT5iYntsQTpoY3VsRjtfXy9GUHZxeH46aFNKTXRbWyUyZVhrJWIpb1ljW3dZfFN8JlY2bTJ1X0UjRiVgXip+OG5CLlQiOFBhVTQvdk09RU93RCY2fj1fIU1PRi5rS0BQWmA9dGlUZT4rLEB0QnxYYXx2byQ7X0AqUWxRUHg2e1hIe1BeY1NyPV5YaWpTKkZ+UUkk'@;
put 'aVguaTFnM2ttZm5CUCthREleeGkoQkFoKENTWzFPclRLUilVMWhKUUU8JishMzUlczJxfFE2ciVxI2k0KlJrRlt7TzE0YldwMWNAP2FQJXZPWnRmeUY2eGQkMTg8YT1KUExeSkNUQywlJT5jS3Q0XyxrKV02SmQkcTppZUkoTFYuPlAmMmc3RnFRXyl0U25iS2pWbSQmfF5jS3c+UGtsQmQ0Jk8r'@;
put 'YW8kJVUqbGkmQzwuYUdxMjEvMHZCezxrTEkzeyYyK1FVNEZoaE9DUE40OFElKHp+JGB0JER6fmtsTEBxaCEiN2cjcWBXQ1hxcEdePjt+SFZQX1AkOEsxcU5MajMvPilkN0dfYENsbCMvO31QaTkrMCpRQnpibVBNP3VRPDQ6SE4hPkp8cG4yZWN4TEIkel85QDxsI2l2Tkk5TCFCKSNTbkV4NkVg'@;
put 'XUQ/az5YMzgydkVeRTAkYnc/YVRrWHklezB5YXBhKmNALCEvbzFjM0dGczp1dFZXNjZ4KXNSIyRpTmw5JFlTSCg7bihDMWk+WiRMNHgvemdDY25RVz5gW2dMaiQuK3lTLDlRUW1VQmdhdz1uRSliOH0rQHdVfjFiUz9xWkZyKShlO2J1a0xVYT8/cXk/JiQrVHF8cFt5LF1+Zz57PWQ2YUhVdSol'@;
put 'VkQ6WVdhZ25DZ11SY0NYSG5nS2xZZ2JWaHZlPnptWj1aOkVTNXo+eWx7azxjfSUiLnw1eURqeDZtPWVoJjNBd3xwZDVMdFtqOkAxKHdOYEZZXXNjTztvOiouQWpbVDE/S01vNkt3WVp6WiUrTD9KJG9PNjdOVS9nI01GQVUpWEhkKHx5MXFDQjAqOiMyODNAU2ZVX3NFYTJnK2UpJFErcSthKVM1'@;
put 'My53Nn5ofF46MVRMTFB5QGBFLH5EKSE7TGhLW0x8ZWsuN1h1d185Y0NLdyNkTilQOSU2R0toUjdFVCU7R351Ql9RWHdhJGh4XldETklJJlhDODx7eFFdcF40PlMjeiQ6NDNDSykiSSRfcyVXTDd7V2RGZGhQXnRuUF1NWH5re25RQXZjPEJ3Sm8ucFokNW0yTVkwQCIjVCQ5QkQxdThmKjJSSXEj'@;
put 'M3orJSMrMmpFfVN3ZFYpR11+e0ZeRWliOzYrSD5mLlhNPDhaO3BZYW9uWn1QcSE0YSNJbG1edjtKND9eY08kdHYlKlpAbWRkYE0yPjdfaURfRF4jRTkpe3l0NHlxPio5ejxjcFosRWVkUklAbihydFAlZ09XfHNJPkFPMG98dX10Ml09S306al1jYih9X0x5PzxVJGF3SWE/NVszeyNJal5FRm58'@;
put 'P0p4UWMhJS8jP3ZAelF3JXguIShWJj1zenxkTkU/PGBqPSF1MW1WfkFbdTF+V11vaV07VXxzNGVZX25iaHB3Un58NUU9JExXaDZgQjB+PkspZlE/alhzTktub3hafip5QTldPD8jKzNpLkU1UkdfKGZ4Znt8YCE5Z3htVmcsKyVnYmFlXjBoblk3djBPL2Z7b2dRVCZXKU1JdDtuYypOOClUaU40'@;
put 'UlVRLDF4bE8qLk4ybmRZTmBBKnt6RlNCNEYjUyZWKHNzQ1o4dEVLe3c5NVB4S3V5O1pfbVtJdVZkPS9RT0JdKzF4WGc6cHUsZG9LWiEoKWxXQ2Z9VSJKQ31RIWIpWmc4Ozdtd2ZAaS97JntXOSRxcHYiT0c+QUBNYnwoTXJAXXNKL2k2Uk0uVXA7S2s7YENBPzY/QlIlWkdSY1krdXBWUl96X0U0'@;
put 'dloyQEVUKkdbZl88WGwhdH5ISTspNTB0dTRaS0p2LDR4NFY+YmU/UlA1STRobUEybTpnNDg/RllNN1dfNGZOcypRVE9TNyw1aFUjRjhaYzBlYipNMDArVnRbVmN8QCpZbHt1Z0FmQm4odEdYODMlMms7MCRObX5WV2F2JFB7am1LSFI6cTwhOHs4VDtWImsrKmgoYCw0XVBOcipLKTdJMnR9Uzsk'@;
put 'YSNgO0hTMF05MyRwTWBDQj13NC5NQE1AJC5TMixHNk8iWT4/JkV2MixgWSMwMWFxVlBORzR0MDxlanY0Z0FvbkchPXNrT3hHOTJvXkt6fTIkQzEmOSU0b1t2eThjMF9vXTdFRChzbj9vSTJHeHNzO3c1IT1WdSRBa0hMT1c/dUhOcUUvODRuKlk3W2dOKUhBSGJzSDZJaEw1Lj46c1E9QjdyfEhn'@;
put 'eWthYTAqN18+NEVuX05UKHNhVjJhNEkuV0w2TyQ6PlA1OT9PdGF2eF5PYzwsXUtPXmkzbVU0dmY+VHIlbjVSMFVFZVZbfU1kdm1rOnErTCR5JWEjeEVpKStHQkN2dXBANyxuTzY4OmVKN2Z6M1l6RDQ3amN0a3dfaUtTd2BjO2guRnJVdSFoTWdOOFtbT3Z8ZCRkYz9SXTE7Yzd9XXJuW108Onlj'@;
put 'b2dFKE5DTzVSQFNqdjxhK35sWjswbE0pKWVLYmxOKy9wWChAJnQkIUZOJltTfjRka2VtPFBtfUshVSQqcGZwcjROdClgQ3o+RTJHOTtNQEd2ZUVbbTJVflJMKWA/ekd2P1Y9QDx+Mig7WTcjMzM6YV5aJEgqOWppNGdwYFtpNWZtfmhrY25iQE0jQjszdGo8K2s9ZGMrREwkU0Z7T2s9c3JtaVU9'@;
put 'YWRqNFpGVH07SkF9MkIiNGpXbGI7QnhCZVsyRW1BI0VKRWElYSQ+RVpgQ1pTUmQ/X1gsbTNOISoyOHBTP1Y3KkgjKmwrY1cqeEBfVW4yN3xDX1dVOUAyaGM0d3xOdEJuYElxOWo+T2FBdjJze2AmSUxma3x6O1VYIjVeSXsxQipjTGl6NSU3KldKTlVDJD8zfilTYCNsbTw1W2VZKF5NXj4yVWMv'@;
put 'MC9jYDVHWExmcl1ER0hgeyxaLnxmdyVBZlllMit+R2cpNHtzfUw/MjB9WndRRWhBREsiV2tbLG9lVn00MDtgXU84SkBOSm07RzBKU0ZbPGJsO3JfcjVeI1c+PlAzSmp7OXBGbV0qO3NKKGl3XVdIL3I5eE1VKFNPaSo0TkguWDxjNDhiK0spPU9zTHp0ej9pJDVMcTluM3ZrazZXNC42cGx+KnJa'@;
put 'PnlSWTBmaERANVV5Iy9QLjUzVUdoWHpxezVhYyo9OkA9d2k6Ul0+fFIjW28pPEBhYSVIPiMvJG5CMTR6Xmo3dixfQ1t1Z2sual1uRE4zZDx2OX54O3NwXSFedDJCNSwjcDZxeT18YG1qbXV1KGlKPko9UVR6dHBeOH1Ven1aKzNqUCtWOSZQXU1yUTlqUzNQX2l1Yy5AcCMsZlpNLjptNHpBdy9F'@;
put 'a00oITdgYTI7ZV5gNU1gbFdETzB7Kmt1UD9ySFc0TEtZW1cvZkQ8YWBPfFdDSGZnNFRBSzBtaHZSczlCZDpOc1lScEVLL3EveXIvVzxoZWsqUHliVGU7anpAT1t6MzReWD8rbChadWh+XlspQVhWNnpWQzsmb01gMWIwZGd8TVBNO3V8MCNsMW9nSUBOMEwhe1NjeEVmMVJbOF92d1VmLHksZi5I'@;
put 'alAhb2JlV1Uicj5rPndhPlI7Z2EzJUxWKFpoYz9XMElUc0QzJWReeUkyX0FMc0x2fHY6c3AsMXQ/VGJifUY6XkdkOGMqU1VdIWUvRVpLaVtVRDohaCUvYXwqNm1EJnEsLjVzTUBwWSV3dUA7UF9zdi9YcEkzNUNQSUhQVixaIypxJl40WXtJIzN9KWxJVkE5a2RUVVNUSH47WXZYViwvVWFJcSVO'@;
put 'X1lsfUBoNGdUVVJqNW41YG5iJkV+MGdqVT0zekpGXXI8MFsidDhRQHxAXjFIVFlFbFY8Om1pN2ttfSk4bE5+VGBgV3h1bT4lIiQ3PFh8Jm4+aTxESTt9UGw9XytEMmhVcVUlOzw7TDsoS2MpPG1fbmRUOUkyZVpbL2M4JV1UQEVCS3lALDR2K1E9dEcrOVg+Vm06dl0rQyttbSRebXNtV0RFXTFz'@;
put 'YGhQeTJSVCFVKVFrLjd2Tl9rdDZbKX0iZXdiaVFLWlNaOX5XcH16XnV5dDBsezEiezxSdig3ZCo3cVovL3BMYl1LRHQ/UnN1TXJZbCgsfDxpeEdGNFRLalhZMyV0YkhXIS5KW0xjR29IfXF9Vkt8dTtJaUxkdCheQiRfcS5lRmladV44QShSWVpQMzsjPWIvcWRSSlJrSHpqfjtvdWhQUTslJXcu'@;
put 'OG4vZi4+SF1CRlFBQXMpa1MyP24/X1hfPVddMjhqU1EvNU4pZjw5Q2xVeWNFY2kifTJmWFJ5KSRaNng7RCRzS0M2OmA1UnZtSzd9VktucEc9V0tSPGM8XWtnXTAsMnxDUy5DbyNnW353MlNWeHdOK2BCYXRKVThqJiQ6fHFvWVNjKTVSMmFvT1E6K1kyV2JkJVNkV0I2WXY/PjN+cUxCXnhLdyVK'@;
put 'P0BUbkFpIT1SOWBhcEkkejVMUFslWDJQbH0oVFsmR3pqKlUwRl1wRVAmXkhVJFo4ZTBrNThdbX1ndmh3aVh5fD9dUU57NEAuXmlWVyYiZTpuMDJzPk03aV1QNyVaKjwoREJGViVSK2dtd1U0RXFVWEJ2KSFSaVJEdkpAalNrOUZtWSpCN3ByNSVhKkEpUCpQQHprQTQjOGJ+Y1RJLnN7XT4zaXZ1'@;
put 'MUljfmMleS9aQnl3fEglLFVXPilYRX1ydDsxWCYwNmxjL3tZPGJZRnFrRHVaVjR4NU4qMldocjZ2KFIpPiZocnFkfHkkZH14V0w8UGEwYGJVL09RUT5IQFE/NEFUI3x2Rz94VCxrMWNUVi8hQmt6VSZoYztFd3AwUCVRYzMwQlh8SnhPfklBTlhhLzk0MXpFVEpMPTJwI1VUZVsxUkNJd1Mwc1JI'@;
put 'bE15Kko5IyEqSkJ5InF8R3xaI3k4V291SXA4NTYxQWhqUURWVHplc2t5dUlGJilRTndjLzpEKCN+XWV8KFczUV4hKEZve3JyOmBNMHh6WFdha1hHdV00Qy9oeVolRVtCcCYoJEZRM1Evc1k5LChWZkBSO3IuSWNTfVpKd1ZURGtnbEU3Z3FmNWwmVWA2cz9HSD9AVyliZzQ5WSJOKkZiXihSTnhL'@;
put 'ekVmdUpNe0JhY3tRcjt4LEs9YUdZOEluQ2BxeT5YNyJGWj43YlBCIXVHVERDZDEyQlN2OTV4azxtYFRUflc6WDFMVzhSPmU4Lk95fEV2aCJsNj9aWVdDfDA9VlV0OXs5OXU6cGl1SEtyUWYucElmRW9iTkkmNnthN3RYUXxEZ2VIWmtjXnw2Ymd4ejRJUl8xLEpmdDw4UGVYKzE8Ul5oWDVNKENU'@;
put 'ZW0wbTd1cnZqSiF6OCwiaXYmclkmL31eQyhudU4xYz8zPU8rY0xieV5XeVgpWShvR0dUVnZEPE1leFYmbix8Q31JWXpJWER+WyouQm5dSSkvO3E9dURhVDBCQWs8LlFGeXQ8YiJdfXhiMSxreFEpQzQzOE8sflp9MDpLaTNUM3g2U2NCXmYzYm5QQFlfWilWIzo7KGdnekxKYDhgN3E6RS5fXjg2'@;
put 'OyRSQjpSVjI7ZDVaWVJ7UmRvc1huYGRLMiRHZFcjdTEzfVMheG9PVDI4I1V7fDhpOHFaWnVXW2FoMT9gXVB3MkJnVklAaEBiTj1say9ubmAjRmNFeGwxVntRczM2bHI6dHppJUwjb0QvTyg0UElkbl1Obm81aH1oPzp+KGReLiM+Ynd+IWx+bT1CQ3Nsak57M19kMWExSVs3TldAOGl6RWFCSGVl'@;
put 'QT54Ymkuc3JjfmVWbz4jcFg1PDRFRXZqfkBNXVpkODBPen1gbTJsMXoheixGOi5SKVQ/aGt1YkY5OSN6M2YjRF5yPXo/Iz0rS2BiYyo8M0VFPEZaKWNrXUsxfEZkeWdxJGBBLmJfNy48NF5gJkokIW5ETG5deEFpOjcuT2ImTWo/cyQ9YHxFeT4obChZbkc1Xlk9Nj86T117bGNRMFdOYihBWGNV'@;
put 'dngifXxKLlZxKFMuZURwS2tBfTpMK31pUiNXbDxrYV4oZW4mPGo8am8vdDgkKSFtS2dETjk7flJUKlNhQmswOjc7PzlFe3FCPyYxSnVmbzorQ2tyPldPQCF2QFooVFQwaXFhWCorRz4mZlpzQntRY0xZUXFndURVcTVRZU9eKCo2MWcvRE15VyMufV4vVkBlOE57cHFeIn1Fbm82QGV6K2ZvSFps'@;
put 'ViNBb2VdL3RFQ3dHWyg8N0NFfCZEM2lsdyhiVWRsYDhufGRQN1RBQSpbc3ZLWnlEYUhmJHN8M0k3LF1FWGU0emdyK1p7KHh8clkpWEIwSkN1XUYiP2FOZksvV0Q/R0xCN2MuRTx2cj9NUFplJSRwSVhqdERtTCM1cTFzdzlARmRVR3xSW09sWmovWl1dOy5zP0hpaUQiPGJLSTUufik6c31QeF1j'@;
put 'Rmg9Zmg9cls9ZHE3OlJNQTUoUDlhYiZ0algjMjtQMGFNRT0pSiosQmB8LltSM1pLdWlJWDFUXVRsbWxgaCssbCp+ODp6aClYcVFTVkMjV15iLChRJD8od0V+MHZuYl5wZntLPzM3eDxvJCFaP19vTDhBU1Y6YmNXNk5ZaTdmMGxxJEJ0MWFsNWpgM15UMH1pZ0M/cmpbaUM3L1JrclhYdmF2bSR0'@;
put 'U0NCLyQ8NkdyXyNiJkp+fTZoYmY/JEtnNzk9TF0oVGFhb2ZldWo8UkY5bWJAdDlaJVVzMGJPYEFnTzxPZV1lSUU7aDhOJnxRbUN1OywwWHw+N2MzKzdGInA/SShFfF5TVmoiMjVuP2IsPU83I3YuK0IsWmp6SVk+dlFkXz02S1NYZktrTHdsZztKSE9ZOixHOENkPTVpUjpSLEkoTE0zXVpdaEVF'@;
put 'PDQoQzBqaypIal05ZG1na0ErTkE1ODF5aEM/R3M9SXt2SjJxMWV8Jng8NlIvK0UiTXpVd3ZsRjdhNnZ+clgzNWQ5WXdaQWtrcGBbenlLIVdfcHZRTW9MNG9WaSNDekQ1XVZbcXBUPlZxN1d7OFp0K04kNWgjT1RScktOKmozeUZ6OmlVXltkOyYzX1R8alo+TWx5WVVYVCYqN281YndRc3JYZEtL'@;
put 'Omt6IV9JNl5DdzlxVlNycHRNN0JKamRvQENLSCJzXnN5fHRDOVJ6U1V6VWlHLG9wPyU9aS5xRkJKI1VrfGhyeFQyPzFYMWMyOnVVaXRuOHl3VVRMKixeOnJjR05IPSwpXlkiUXN4MHQoTjNrIX17KT0wYzIzKHphRGM0X29YaU9SKSt7OiRGeHwmKX03N3VLcFU2Z1pvKjo4Q1JTfSY4JjUoeDxG'@;
put 'SX09VCNWYyhrb29XSXNBN2F1aHtvZE1OVkNOa0N4aTVwPixlYHooNCxdUTdrZkghYkZ7On0uO1FKPFFQblR1SCFnKkV0ZFVpPlVJTmZDOkd6ITMhTXhEW1QqQT88eGlFYnFaOmRBU0hYQGRCJD4qem8reX5fWGZjOCs2WklWKCwvL1BQaShHYEZ6KUgpZUdeUVFrTCQydEYhTGVNdl5tOEFmQDVN'@;
put 'eyM7PCJ2MTJXIkRgTHJeXWY2LjRIeyVFJX4vdW9FRiZPYnEvRE8+NU1BOiliMztMLyJ7T01efnQ2NmguZ2dJJXhTLEw6eWgiZXZIenRZJT1YK2FRXlFNUVNOeWQzVGtKJWhTRDNSKU41K2NJXiRdXztsZ2JHdC5gIUs8SjZOaiQvYUJiKyU9S2ZTe24xQElhX2d3fF5RWkdrdyhXemlTQkpLNmpW'@;
put 'JnJKbiI2PHhUUXAwKmJncXVyMXw9NzlAIj9LUz15RW91TTcrLkA2SXthQGl5eUMrdF9KbmE6YH4qTTUkdWVxYENlO1pFUnBFVXEmMjVLcC5NMm5UNiZxUGxvNn1IMHlrc2Z6cVlgPmNnVTZlNVA7Y2lEaiVSNnQlTXIrPE9TJWM0T3lJRGlvVUV1X1Q/TCV+PjJFVCpLemtJXnQhR2Vpe0U7aX1D'@;
put 'V0dLITV+LmdEKUBzQG9lb1gqI2gidndeYSYrNlNtIUpKPEZXRWhsQjxfW0wufTBgM30oa1lAL2VAJktgMnFwU2YkP19jdG8kNUcmK1d3cG56M04vQHlwUUdaOExWbzFFK0M3eilpPDBIMTQ/VT0hWlFESHE+T11kNVFxLykkUnt4LCEzSU43bUNiLzZSIUZFRHYwPVksX2lQTmRzZFhJSUFpdTsz'@;
put 'XzUmdU0iQV5BUkczdCYpJEkkeWhCekciLmBNLC4xPkdadlJJNnpVbWRdJmtXLnxVdHl4OGRrNE58U0BmWlt0ajgsIVd7KVVZekNXNEIjZHZZcV94V2x5OTtfMlIjZ2Y4akMpaFlafipHVklpO21lfX1sPV40PitGfSMzZlI2MGd5Mmc8Yi9FPjVEYilpQVEhUXk4PjpIWXYiO3w5Sk1QN2JYTVVY'@;
put 'OXxqelchW0dbaSwhaG9KZyEuTyxpY31qNnlHPGNiI0ZvREo6UDZQNyFGPCosVHgzYmhGLHVHYXZ1eFpjTj81JXFKWzpwWShNYTYmOHxAe2xaW2B3VG1ZRFovbCleISsxbncuWksyMzk0WkZtQXMzOzpwNG4yUSUrMT0oNWY9QyQ3KlBRXSExR1FMc29FKW5+REA2WSVAb2tyLDxRJCVTYXRxJkti'@;
put 'OkxlYEZ+OV0yR2YlbmZLR1V6YjddMnFwLlteP01ON0pmXitLJSs0MCZKaWFbMUsiamgoPWluXX4uMHN1cG9PZy9lMiooNCwxX0Q9I1JRWEN+YFNaNztJb3hQU0I7MGtJOHBFXyx8RUBhO3h0Kyk7Yjtsay5EcEFtViNFREoxPmwsPDIkKXVgTm8oMzE6fX1zeUJ9Ny5qITJ5W3kpNE5IREJeM0pk'@;
put 'KkxwejpvUyVAO1Q6UnFqeDB1VT4lbyskbEBPYXh5biQ6dHcobi4qR140Old7UjArRTxBUntVYEdoZDxwKl9HWiFsWFN2XykpKDgpKVBJeWVQJGM/ZnIjWDxhdk5hSTpbNXE9Sk9de3cra2BgIUc2aTwxOjYxKVZDNT1+R3xEPjQ/P2ZSSypXVjdnXT9heTRNYFJyczZGdUZ2MktNRktXaGJARDRG'@;
put 'RVtDVCEuKV5ePyRCMVgzQE9uRSNPPUhBNkFsJUpMRVV+V3I9UjF1YiRPZGhqQ2dsKyhzaFo7OlBPfjNXVXUkQ1Q2Zy9gUFsoWFNoTlImcXViKXJiLEB1Z0xrZCxDOiNBYEtjZiw/I19jOTcyKmdYKHR8PiReRkosOCJVVHsuLFBnLGE0Y3RGLzQ0WCQ5VVEoMEV7L0t4L0xnWWpxOnFdcS5gW0wj'@;
put 'NVIyPUhafC92eFQ/UDBvZShtL0wlIkspUVhASGhYW3h9blZtZ2x9N0RhSWtCQCYrQl1JQkgwWjdNfFdQbUptNF9ART99NiojaG4+LDo5SyppMywoZlhuZD9iZCIqYzJXZlRqRHREPE59RVo3JkpsOUBGcmhdfCg4ZDwudjNodGk7WE0xSWk/MG04NmVtZVJ4KF1TaCI2WH5xMTN+TFQlcTo3STF8'@;
put 'UWx1RlkmWi9CPUpkJXt1eTVKLyQhVltUPTdXYUBYOWxCRCUpXXIrV01EfiM2PFk6Tmp1dkkrfFJfUjJ7W25+ZENuRyUud3wocyM3L1ZIZyFFfXYzal1rUkA8fGtDcWpfS1Yyd1U2JEcuK0p3UX5DMmwrS2R6RWteemp1Y3F3MUpKPz83WXhueGtQM0pGX2FRe3liM2khJUd2QFcwVyYvLHU9SDB+'@;
put 'PEZXPD5XVVl+S3R6bywweUtTJDUhdD85WUlfMiM1MiIvVi9nUiRrZFddY3o5Q3IkKkskfik5NzhFdFVuOnBzKEFvL0QlNnJQJXN8KVRCVzthc3VIKTwja0t1TSlLXzYqOGlPekBsYnl5WzUxOWpea35JT3RPIVFFUTdZPmE/JDxJZiw9Jk0lJX1OTzUjMjhCcWRCdjxQRXRBRntdY3VdTUNYb3A2'@;
put 'OjplKy43VH56QjtAVVVqSl5fVE84bHhuOk8iRj55NUJXPndqQHoyVz1NLl5MajhnK0QlZHRiOzZqISp1TG5ZcW07XjlZZGhwfVJsYlZDLkRldT4ken07Q3VZWmtbbipjSzx9fkdNOms+L2x2ZEBgOVdqQDB8IjJaODZkZTFqWmpFJkFZWU5dME1HUXEhPC5qdFNiNjZ6QkNTMzFfKHE+VChXXjht'@;
put 'ckU2JU41U1FQaWcpd3dTSCo0VFFhcjY3WlFYbU11aSEmLm8kPGJ1IU4xWlVxYmQuMV5LWDJlYF1Te1RiUV1eVygsfFNvSH1Vcjg9LEFNczpaTlZwVjpUJXRZcndiW2dzZDw6bV9hezx5WFdUJVJvYE5MJSFmSnQ1a20xekVjT3grdTRdK3V6Q3NXflNLYVQsSl5lNDVhZWM0TCVwPGJxPmROcHE6'@;
put 'e1B1Y2Qic2N7fn5ONWJmQzZDa0JWfG8pJDI2Mmk3eE0qKXRBfW82KkdMeFhITSpTfS9CfVN0KS8uZHJxe3EoJUlsVFJ5VTZDX1FCTl48ej5FXWdlOXxjT0UpIWAoLnlESV5rJV9IN19jVVdufHFpaWdwViJSLDZ5KkIoI2lWenxUcj16VjhMWmcwfU9yb2hxImVPL3Q7NnMidWBncGR9IU1JLlFP'@;
put 'cGJLTHBXKWFRQ1p5flAhMUFRW2xsaUJkX1ZwOGM5X3YkJUhHYFh3Rzt5d3EuZUtBRUlMYW1aUXdkX1tSNGd1cSE1NkAzdSU+RmdyLnBIRVV6eEBGQ2g0IXhuSVBpaFlkP08iXzVCP01ZJCRmbjtpbkUwQWpvKCtxOlpiQUVhTmxtTV5ScH1NYFciPE9UQ15Dai9iemVddEJvKTBUWH16c1FtVXh9'@;
put 'ISIuMz5lNnZtWkE/bmVpNUkhRFAsezUuLiIrNTdlUCFDPmU8YW5PIUp7OjBRPSYvMFFyOGlWeD98eE9dcmg5Xn0zYG54Pl4rMHg0SjwzIU5JTHZVXjd1XjhEP1BoPjR6UVF5QzMlOXhbQmhoUzhRQjpTRzVDIjJ4QlZEcDlpQy43Sl1vLHMhXXU+OyM6XzRNUztsN18sS0J2VTY3aWclLno5aExA'@;
put 'PU56UHdENmh2OU9HM0lMcWNKZF1KYDN7M1ZKa2FRfGRFVVFnPk4wTnpvelJOUiFdQjA+dSx7XmJza258dzFIIyp3c1FBQTxtbyJ9YyFnIjNHKHw/IVVlW3p6Y099anBuY2FgZHk9MlBCVGxiITxCUWJwUGEvV1BzRVFCMl97WmUvZDpNIilee1dVczZaQEoxQFU/LkUwZjBBRFVUUlovJFpmbE8j'@;
put 'SmdBWHVWK3YjU0tXcmddY0AsS2Q4OHEuKnlgVSxzaUt3b2kzNCJoOz5XQDM8b35ldl41V14qdEFPYnhvPEQ3S2RNcV46RnM6T0pIZldvdCJScnMiOTc6XXE4QH4xWjorR2w3LFtIT31sSlVzLyQ4RkBPYkE/Nkp5fWVGdmxVcWxCRX1tfDw9Tzc5YUZ9RXhyS2FpTnVnXUo6MXczcDx7bTQ5dFB2'@;
put 'JFJJOEJ9bWBUbCgoZGw6V1l0PFJQIzw8SzthcS8kdjckaTwhcDRJdlBuRVVpb1ZeKGJUJFliNj13USJDRUtOZGMxRDR8P1tBZTMjKkthY1NVJVhoX2JObXhnd052X2FYRXthNjFIITZPeF5HdW1PJnVqS3VNKmV3SWFhOE43RD4+QD9uKVBGXmkhP2wmdE0yQ1QmSHV1Mjk/dXJJLF8rTC8xeE5h'@;
put 'Jk1GJHt7M3k2My9zYUxBT2I0c0taajFkRlU8RG1DUVRwUHc8ZVBSa0NON2ZMdCtsU1tKSnMsfFB4RE1kNHMmKG4xYntWPHhnJks4OHtAZHR0WXNbeXxEMVlFUnlKNkJ4b0RDc09IXVl9M1V4dEdSITkkPzZGUm8jXkNfVClbT2t8X1dtYWQhOE19eXsyb2pYT041MUI1Rl0kaDE5eUM5UHZvc3Rq'@;
put 'KzVnLHN6SXRLSUQhXjd6bjdnQTlzMTUvNEc6IylFTU9ROXs3aUdnVDQ6KERCQntdeiZyIztYL1d9cldHYzAwVjp4b3J6NT1VQEZ7WDo3USV8dkAvInRadUNaO2VXJFBtXjpBcURFQDgpZ0pJSlAqKC9lQm5lWSNSK0B7JV5qI25ZMEtCM2ArO3RxOUM1T0JiXmxtNykmYHFrVCo6Ti9UdEs5RkVR'@;
put 'cWdHUCl2Rm9CJW1vX0FdcyFXQHF0NC95SyZCRm0pOTZNdlNsZXpNSGxRSHxnMiYjR255MDBUVT9OWHUlU20sPnlbQ2RKNntvWVpfMm0reC9PWV0xdl1mQ29LM2Y1eFRlPX5XMXU3eF4jUEBua1c6fjAsfH43OzpGQkFiUDx4WD1LamhgJWkzUU5JeH00OyZjMFJqKWNlbUp1d34zTGJUKFAsL0My'@;
put 'IVFheXtHPlFed0JKYiFePj1MIUprcio5L1dWeCJAIjptXVdQcnhQSnBCYlQsLDNSbU1FenpwfFg7a29eQEk2PylweVkvVUxkIz5+Z3ZRfUJwQDsuTGY7JXJzdS5PL3FofUx6WyoreHRkXkxOQTYrXiJRZldCbSQzJVFDPU4wW1VpVU01JnFGazgoZ1koVDpKfUI2VEh2KmZTUGRoSTFLfEZSWW1K'@;
put 'WStxZSJPO3B1SlokeVVmVS93TU5LOCs3eiJjSXYxVlpwSUcmeTBSP3QyTmZaYyQ0Vk5bL0MhbHVCdz48IU0/InJwRGkvX0xvT3tOaTpENE92R2p6biMxODdDO0lXM2BpQ2lZKWYibF9TNHImRnBZVW0meS57VUw5LDFDdH5DPih9Z2ckKX1HfHFjens8ITpAVDg7eSQrWmpFaCNBYF5iPl1BXTUi'@;
put 'bFBlP1txeCEwKG1+Y0U2Lm85MDFLZGtiI04zTTE1VzByZkRwayRQJEg7V3lvelNBPiQpXl9GUlJlPjxRM1hAfU10bTZDbVNiVnQuSCRqIzskbCpvPV85aj1XWGtTM0xocDssP1N9ZCVRZXRsb2lfX2xRN0VNW0FlMz07eT9mNCxBOl1RdUcsZC5bYGcmdX5rYz1EKmFRZzUzY00yIWN3bFghXlI4'@;
put 'Z256YFFDUXZJY31qWSFGSCx2V1Q4JldgNTBFUUp3QztIcjUyRyohc2MyXn5uNHs4OnpTZGZ5UTZtS0cxJU96YGYsc2xdW0wmI0BXMm1aeV4kbWh4S2twOEt+VSRmfEk5aS5oWXFxLlVpPGdbLD5LfnA3VDBUSUcrRnZiYGhAMUY8KT5nXlFpOGY8bkd7Yi47T2I7YnEyfVUsRUpDbkxpPjJhSntD'@;
put 'Mi4zbVkmZF1pZEdoTn56NkwxZXZ2VktHSiF6Uk83UiMiNG9ecXpDQ0N6JjZISVddSTk4cDVTLzdEZyFdUF5uOyg+UHoqNGh0eTovXWAwYywrbnkmMWsxcH4xZ0w7a3wvKmQjNVc1e3M1ekxDbGp2KjV2WlZfU0VbYkRDcyxAPkk+elE+O21RMUp+W1k1PnxJUjlKR3JyWHxOVWNUVmViXz5qcE1q'@;
put 'aT8lcl9GRDNCU1UkOUdERjErVUxeKC5BT3NCQGdMZSMmLiU3WjY1ZTVqMy9UcF03Y0NENCM+M3YsbmsvWFRkRUVhdDwwR2RAOHtUanw4LHp5TU9PL3A7X0s5QjkzaHMrKGFjaUR2UTJoNksydj9+IVo5Zk8pdF5KeGpaL0luRyFTWmM1WT0qfG1aK3N1JHB7MmRoZlg0dTJ8NTVITiF1OShnOyYx'@;
put 'RTpXVk84TUZXSkk1Nk4zL2R5NjVeTSh4NjpLQmdMampSWS9wPFU1cjc2VylJYEU/RGVRSnxOSXRPMXFEbUc9aDx3NjUzTlE9aSsvaEJCcGkrflRVaUFWbD03TH40NXQ5VDxCJWRASF9+TiFHUG9Lcz4waFllNFdsRGVYUzslPDxgQzBhOTpLLlFia0szOVl4V2hMLk1me2QzT0YrP3VTZHZqWTcr'@;
put 'YjxdYVs/JnQqQVB7Kzx5XTRGcF9jSjNvRW40PSMoSXt2Z35JNERESmApJjN5cW1HJEdSe2tKRm0lMHhneXJCQDNjSjYiWmxSTTEraSNhSmZiVD5BQm4od0o6KCh8dG91aXl7P24wYVJfPlZLRStNQi9kPWFBdDZyMFFKRHk1TnxOVC5yfUM+SkNNVm0qLEN9aCxsXyNzPz57X3hZVXFAWzpKPV5a'@;
put 'IWhoPEJTYyxud0ovVnluSE8jY2tmQkFrW1ErM30lZio+T09lK3c2VVZGTzAhOz8jMlNDbn4lPT1ja0x+SV1ZOld7fD4mMSZaS0JNd2l7V2B2Ij1AYGthZ04iJi9PRF5HOUk5cHVneiNlSyg7WWxpbklTRnRPMns5XmczazZpIiN0ZWhFVDBTODQ0LnskRyR1eF1BVEl+cXwlaDB8TjhJY0ZlUnZ5'@;
put 'MGsjUzB3NS44LGluIzZALFF8fWtdJEEjNjZuKldaYyVCWjxlZnEiNHRMTEk7elMpQTdhfTNtdkooMClSLDJ+MEU/RE9zOiU9aCk7eUlUZTo6fWM2UVtZJUUpPEB8R3VuM1RvbChDZ1laS3EmaUwhMls2Ykw5ai5oPmM4KW5LQiN6YCE+Tyw5TiVqQk9+LDYqP1E5P3dmLFchckNze1tMKlgqamNR'@;
put 'amBifi40ZFBpJjVRcFJLOGUuYCJCeEYhMCs0aiVOcWt9cmdaIjAvUnYhMlN7bUAvdjUzOl1GI0I9X101eHI6UEorUXJwb2liVlJEJjJxPT9RVnMmR3BdKHRYXXFTUnhmXj5UcGZtMl59NX5iPzZ5SmcuZEBGZE0la2t0QUhARz84all1fFtRNyt3JkJMcWE7Sj5FP2l5fDcsPT9wKCM/a28oY04/'@;
put 'JkVEMTRIaFRrXztyNmdgZGVFOHJ7PHRwJnglaHdbUy86ZnF1PztYcjdBZENdNTYlT1BPfnxBOWx0bGZxW1owLiR9L0o8VkovXmg2cz1WPTJCdyZIP2NCPmhrbiZ1LE13TipwP3p3VXRpYSlQVFpZaSxfZC4sMndfMXFhQ00ocjBUNzdjKztIPmo5aS5jPElGQXQ0KHg8LDxUZSYlMTJGN2I9RDd+'@;
put 'RGBZTiYwVEZLNiRkcTd5NHNXI2BdLyZIelMwJjM3Y35hcUtnZXg6UmtTUSU+NnFQbWttQFJfQS83VjNkQklRWXhxbjksN1ZeKzdfKiRlODthWSU2N0p8ZyhIWk06dj55bTVRIlVTMWwhWyMoM35OdUN0cClXfTd+aCFsflFaY0MvWW9FS0xFIUNCN3ozVW85U3o2K0IyQUV8NyIsUUBrTCsleVdW'@;
put 'L1svRGtQLERZJGp2OiQiZnV1QSYzZmZUISYhdTJFTUt6YCo5bnt7dkB4QCM3bl9CfGFQe29kSmglQT9IKVAqV3hhdiNbQl9zV2wkOnYlSE1jVntuMXxpLk1EfTVgPTh5REw7RG9pM3ozRDErMEZtT1tXVTlAW1hwNypOKHlmSV98TnNkPy90Vk1OVGpyPGRvLktUeSQ2TWJfWEc8dSloIXYsQzAp'@;
put 'Ylh5PWd7MUlHYzF5fnVyM1NHYHB6L2VGM3d1bGc0TzN+b2xKL21TMFF5d15RdVs+Wl45fU4rM3lOKmw0XVBEPWwsc3dBWFguQ0dFK3NmVFpfYTpDIy91YUQ2QVtvIk9EY31mczpET240OVokYHhlcjZreWdfRiF8NFBgL3hjdDQvb3pfPlJ7LlVCIWM4T2h2ZzdRLz5MSnpnLmhEdSZie3h6WnBp'@;
put 'LjNkcFNJN1l6LHBBKjV4P3JESkx1UWNQR1tMPjxyOmljKT5oQj1UN0ZJLztKQWl1aTV0Wz16KDkkZTJKel1GL3UqSXp0LDt4ZGJ3SWBFelB7WUl7LFdpQDhxYnY6dCg5akdmUFZTazhOYk5POFYrPHhUUV1UOHc9bGU3MltTVGpvKkFOVn1CWU0kX2R4MXlKVX1mPDtVTV44cl1HPWl8IVJCYm4q'@;
put 'JDVLTGtLeDA0KGh8emM6Y1dpcWVZb2R7fGVacDpWJUVfVCJkMDpKLjE3e2sobEBmMzVqSDlbeDgmJTFoVE94LE8wUVgrIXV5TktLPyRdR202Oj1YMCVqWCt5YEBRbl5gdUQ4ITkuNEhVbnt4QiNbazhpMntIS1hoNXtKZVtbYyk0cTtOfVtFTnlCdHFaT1hZdX41QkFAYE8reyx2TjpGVGtkQEUs'@;
put 'UChxJilgNTJVYjlXVXh9Q14iQ2RQRnlJZkpCKmlnQkNXJSlSWlVgME9RNllleFRocTcjNjE7QmlrcGlqfkVkTjU9WU5dampvM1FNZUBscFtfbU1COm4sV2FCfnR2blNSKGY6NmtXQ1E9SGREeXwjPzp3KUEiSmwsNSVpSTU3cD82X3RGdWxFNGgyZlR+M1M2L2t0My9uZCskUEBBN2o4Y1RiVXom'@;
put 'ZDd5RXY4eGNqR0xuO20lRVNDcjxOWDVgKWVUM353UUo5c1FneyNRd3VpW29WdCUhbjpaL0pGUDZybFlqRyhVXTpES3dfQX1sQDQkan5SUnZIQXE3Kz8+S19MbUdYeChUYztQdGFlMEQ6Ti5bKFp7VTJKYnd2djo2WSklO1kwMTFpZ2ZEen1LamN+OSxTMVA+Z3xHUyZ8WkJEcy80WjxkR2xsbk42'@;
put 'cn5MK0lNemhzLmsqZkd0dCY0S2sjfEtnKHxdLFcocG8oSlFdbSZbVEUyZG4kOz5yeTdwY0J4Mnlmd1V2Ynd1bVtjW2BrTEYhWlN5akQlJm5sSF5uPDJMcklgPHZ0ZVhTIX5DQ0tocS5XeFVgcCR1S01gL0pjdFIpW29rVjpuJVssIndZQyNyRiNmaChpPCQ9IkxNP3N3NDBEW1QhKCMoPDRJTV4p'@;
put 'YkM/b0tedE02ezQ4Xko1UXtEKVMpd28qOSpxUjRqbml4bk5Bb1YzaHBua0hpfXFdRUpyVjI0WHYmOzB8azVbUjlAfCUpbFN1OTR2LnptO2k8LGIuMmt8Mn52OHJQNjBQJFMzXWBaLHd4VDxWYmJmMjhJdWAoOyJBY0kyT1MsS1c0a1JFby9NPGJnImx7eFFRcyZrR1BHRjcvL0hxJSEjOW5QdWck'@;
put 'XT0jTCNWezIxeGt2bVdzYEZNSXFnL3lYS2xucjkxPjQ1YzpKXlcuczMkJW1AUCNrX0hzfHt9W3NtNEBlTkVfRjJ9clJgVV4pKC4hMjpQJnpmRnZBY0J8NDM8W19YTzgwWG5aMl9meV9MVXRyQV0pUVYmaylWQjozSX1mZC93JEkvITdlSE1Jd1YjSVtzdiV1QFYqMnJLZCNJZCt2MkdZcmNfbk02'@;
put 'K0k9PDcvVlVgRlA4ZWlfQCFSIj5gZEM2PGZ3Y356a2FeW3lnLC8qUW9VNUxnTXojZnQkN3JYQnhhaV9GNyhMb3drR3E0eCNqcFZgWGwhSH4jaWwuVE5oY0BsW2NrNWhxXXJ2fiE3P2doJmIldGVeKitldz0rXSQ5cCJ4Tm82WDxFNmRTRHwlVl4kWVptKix9Rl9SOyp6RmJlMXVGc3pycWlLW2R+'@;
put 'SHFZY2VLPSh9OVpNfHNRYFRDVD0vWDdSP2Z+P1tNfElNLk1DNDFEXk5WXz0xJG9xejVDdHtfdSZCOG9mdU9ffj9uezd6L2pja0lKOkhwd3JQb01CY14jN2E9Skx2JHJiNn43N3E8JEJuX18ocnc1Jnw0WFdDNjEmLFJ3QSxBO0tkTiNrMEt5alZKLE4pLnEiYHhZWGowLCIiPn1nRV1FcV9eQ1Av'@;
put 'UFVNb1EuWVM8NXNiZS9eJih5ISowUURYfUo7dVEvcCRnQlllOGZoNE9+M3R7YVckakh+VkxUbWlfUFttRygxXURoTHs+QGxqOiEuW15NZ3RbcltUNWFZZThLRV5kJmBbKDoyRkA7W356JXZ4UDZqWDtdY3kwKyg/PHZnY3AxZDtxZ19xOXNgZG99SjF6ZTcpUDpxblFoP0B8TixxeWEuTT1MUntd'@;
put 'LmsiPzdWe1QlOnlkOzFnQFVWaW0rcTo/e3ghWW4vYmJdaUsmOV1iNFhbUSxhRzBEZDBZPypuMlNAcj5IayJBdnhVSyppaHh6RFAsKDZeYTRmekppTUgpIW9wfiZ1Z0lmdVpvSk5YYXBqPi55WDA1WjRvQ2J6b2g0RXVCRH5zZHlsbDB3RHhxQnM4JkR6NTd9bGRjTUh4W1NCRWkrJnlpPVVudGM4'@;
put 'TF81MUVWJm92RnR1OVEvITNENS5wJk5DK3xMNTEpUiosfi56VWp8P1I0X2BWcFpre2wyVmVdT0JIMHw/R0s+Ym92PEtZKmcqLE07aCtNV24vMU5tYHx+LHtlTi4iKldpYiV2JGtPJFtlWHldQFo+QzYsWH5nfm9sRyFbTFAoOCZ4NTIzNDdrZVAxfXhiIWF4Z3R7LztuMiVUfl1ARjwmcW1wW150'@;
put 'cCJeVXBXRnV2SlV6U1I8VnBWeSomXiZWUiwqOWN+aHkxImk7d3QqMztMfTF7YF5LOThDSFRKZU5CQEQ6Ql99WENaKXV2R1tWMCxVKnt4aV9gSypqKFhKeVNpYl4qeDpzaUpuSjlxYGBwOlttZUhLdWk9M0NnVzpkYlhRSzBNL15GbHlkIUpKRFkmLkg3WCkiVTtQIWJBMTpoWWBRNTcxZk1zW2RI'@;
put 'NSxPR2VZODhjI08wZEtbT104IiJscHkmYWUib1peUismMkNPb3tSdk17Zll1ITgkKTVjRShCRCY8blY3JCp6WWVvUihZMDFLblMubzJoVGAjXW4mLkQuQ3B+b0pmS1FCT1gjYzJ+dnR3SmlyZTJYVEw7eVRpemx9bVZNVS91cGhhPDxYPEdiKlZUITNJYDJZYG00cShkUixFWUM8dEhYITtlYEN2'@;
put 'bDBsdEVBI2wsbmxUOy9MIk4jckI7JXNIezUqMX5FUmo/UXsmRmtbZGFOK3VHaC84YilNZztuMWk4dGlzc0YmKyVYLzlbeD9UTDEsKltJYzpOYlJsbjpMI1pMYV0/PCFsO1pEVUhIZ3tRaE0+MDdKImVweypSOWQ9OXQySWddaWY+flkhMTVzXltJJjY9cDRlTF4qbz18Mn5AKmFQWC5KMClGbG4q'@;
put 'KFgxa05sN2U/V09qK3AsKTFpNmZsfUVDP3RLUm1bTSZNcSpRdTtrWiRFIm56e2xFZmBxYGl9NSxBVUp1UUlUL0NPfTprT0pQPFUjSGYlKmY7Nltva3EmfGVOL1JyLD8qZ0xdbXtwWTkoMHB9eFNOYFhVRUlwaXw4K1VEfGE6RT85NmhAaVhnX147Qj51OSpaJihkNnJEcU0mIlBfUUpGe2FSP2VG'@;
put 'P1NRZyZwZCRmZSoyKXFdbk9SYUoyMHtHNklpJWBKJj91PSppY1RpYyswWGhYVEVEUDp1d1sjUVE1aCg/TlV4bUUjTGwxUGByZUk7X2lTPkkzZC93LiUodE1VamBuW1IkM2ZVRzMwJmlxWlhvKEYqI0dxYnYvQTw6c2VhNGIwPWNle0kiVFp8eD4vcT9+aS9oKHd0bHgicEcuX20pb3ZKIVMxMDZq'@;
put 'Ql85KHN+bz4xT2tJbWxEdjVOb31RL3ZiYzcuKlVsbml1RilvYj8hRSM5aXVYTiM5JlJzVG1ObSxNKE4rKnkxOHRdTXFDZ2IlKUNxQ3crJWh4KiVpRTtHeiRCc0w5ckA7c0AvS25KYEpyQWZ+QF5oajUjdSlmSGl0eURxMF4xb3NaZH1gcmE4JUluLj0xZTo2RzVJPH5KNiEofk5nKkg9M3ReXnl0'@;
put 'VD8jMmgyUnR4bX5TYUlRKl9WUWpfMCNIIXtuLEBgVTZ0MEFOdGREI0xbX0I5JUVMTn1Ycy8wcmJbbkpIY35WcEpFWEg9b3slZ2ZMYys/VXhjQmdUa08+JHhjZlRjdmUmVGIqUSR4SGdAXzlST3F9KGguOD5WQFdAL0JzPGA4JEVQSzIqUi5IcCRvdl0sOzF8dDM9flV2fWJPQV0+UVs/YGNCNyF1'@;
put 'NXQqZGZrJnImc1pWKU1fb0NAM3hDcE9jVkcuSndPN3lvcyxORnVfbGUvJEk9ZCluZCF5OTQqbWFpNX1DKUxFMWtpc05hfmppM30lbz9mN1lsJTMqRnRkKjNQWHFyYCYwN2Y/KWtEOX5fb0hgOVFjOWU1ImJ0YTQ+eXtUdG5PRUVCZEc9cllwTiF+P0dJZilEPzcsXVdlcG89JkZCYkkiPVs9NTsr'@;
put 'T2BSRVJBWWMsV3FDJDtpRkl5KmdgajtwKih2QSlrUElsSWM4YXM8ezEuSSJISEU3dnNZaztlajF0Kj0rMmFnSDslU08yOzsmOysjJGE5LFo5LFMsOEFNRmUuZD5eOX5lLnMrKTlVUlA+Vm9HfmRFelFsNkBNc31qR3FpRzFpNHxPKWBefX05Nj8mb1FvOy9fd2QyL09JInNkNnFdLEtiJDk4dEMh'@;
put 'cW0uYXBaY35LJUImM15uUyFZYXEoRStnVWMrRkEuPFVnQT5JIk4iZVZ0Im5dOlNFd24mbmsqO0dNSGJwPWg4OFosJjZlRyEle0p8RTBqe0xlQnZpaHA9WWolbj8hcyZHOl59ITJFQSNpMHQ5LjErMUwkbUBgI285OXNSSFluZVMhIkNjWkx3dWohIjooVVRYRHpBanw4OW5JNX06KE8zdGBGN1g3'@;
put 'fEpCXUwsWndkNVtTUHVWOjVCRX5hUzFvQmhwbGM5Ml5+bypRWWx7Yk0ubXV5cmF2SD1USX0wJUhHP2BsNE17RWFBbkROS0hQbjEyK24ubTtbMnlTPm9qYTY2UlNmZ0w6PSVzaT9YXWo2eFBXT1U1T1QxeiUvZ0UjTilOInt1e1NNYFRFSEZeOElLPDlkKz4yXisrd2pjKCg3Sy97KyEhU1YhOnlq'@;
put 'NDE4elgzZUtFRkN3P1VzW2pNb1U2NFVgQkNFbSR+Q2EueDFvWWl7XlklcVFuXWVFSTx8c2VyTEkhS1tVWUF1QCNEU2R7OV5lYUpXfWAmWmR2MUxEMSp7d1Z9UWg3Q28hKCxwV29gcUwseD88aVlZVnpuWmF2WWhOaiteVW46RjtpVUdOQyZOKFJmSF5vWTFPSUd8RmEibmlRVndWRWNdSDZuYWpr'@;
put 'XmBVd1NabzhtJn5aJjNAZ2B1dys6VlRWVzxRNUNKTlB8SFdhM1dELmFqYD1FWDBKIShsMzpWdykvbFVeIylbJkklKCklZERXcylgS3c3IW1aeVdZKk5OTVJAdzNvTGoqPi44VSl0fkBqXzNYNWpFX3FzJHNvQk8+eHZydGVpZXRUJFI8L3JRVjFyNFZnOjx+dShXZlVhJUwuJnxaKk5wPklnIV8l'@;
put 'TGdKVWpkZTNGOGFidXdWT08lclFzM3pOe1Q9aHpfdCswaCQ3cERoVCFISHpQPCRBMyxBO15QbXxiJC9EckUrRz9ELEY7aX1tYnhgS3F5XWpwMi5qe2xDWlM1eUF+P15kcVsrel1VMGtXL1hISHFnaSk2KlFRdyg6YX1aN0VgcjREalUlMjVeLnVRfE4+aS5JbXtCMktTYFhhQGJeemVYS049I11b'@;
put 'VV8jTi8uUFdeSGhvZn0lTTtENXxman13NFtzJjlWVHdfezJ1XUlFYGcvKlBqLChzc3ZjTUlwbEo+QGFGRmEsVEt9Uk9+Z2dtdHpHRFNEOyNja2x4MWx6KSMwXnUwcEwvW2VhZ2JiSCohYC52UCFoeF1UTER8bSRwPlRlIjgwQ1pjZXZiPXssNS87XW1aej5HZF0pfFhaRlJ3N3N7T2sjOGlyd3dQ'@;
put 'ZWN2YkloMFR+Onx1KWJAbGV6bTQhSUgvKDdkKCl8Ok8mVzZQJWRuP09NVDdbL3RjcnIlM0tbPSE+I0cyK0ZLYypwQnNnV0lEaDdoTipWS0RydGxDQ3g2Oyg7ay97RihhSDNBQlE2NDFrR1Z4IWhXRF1QS2I7LnhYMyNmLExrL1NATCt7LEhxWTw4Kzw7cWRaR0Eoc3RSbz9IJlQyfHlEU2cvWV1z'@;
put 'ZkhqNjFPZF5nMn5nWUt0e2FzVS82fnkuQTxVQmM6TDEzYT54JDprcDNhNlFFUlJBNDE5Uy9uTl1hTCpKNThMJFI5Tnl5N3xxWU5kIWFbdDQjbFAlVE9rIjQ5ZDU7cFkxRXIlXSp8N3BIMSxrfnhZQksuS3hQdG52KnNwYkVFSVQ1O1RIMl83SCF2d2g1YjBdZUdpakgxLCMjPzE3VUEoI0x9U101'@;
put 'NnUwe2EkQGlxOSJ2NEckLHRgMj1LMSFNZUxKcFNOTj17YDpaW3hoZXB7cytPRE10PyghaUk7YSxZYzFBdFZtWXlIZGtzQnlYNlhPRkdKVmsqdztKRFQzSCVNY05mX1VYcGZyYF55JXA4LiRmPEBrcmpiU19YJHhHSio0dVFgdGQzalY9THFAbU9SZEd0aD9fZ0gqWUo6UjRyIjJmJW4xMVdaZ3h8'@;
put 'XzRUKmdRWjBAX0J7U3VObzVqSl5LUmIoMXFjI3E3dEZ3Om5YcVBXT35NbUUmb2FqejFYNmtLLjBxLDElJTMze2p5djh5M1FaKXQuR3RqMytuOjQiZ3RBaG5EKDAsaVFjTmwxQWwsWTExPkArZGUhcE9CbnwxWjh0NipvWCJ6ISNiVEk+MSlgQCU9Wn4pSSVWYmlXe2MuakooV2I0MEVhOF9hLE4o'@;
put 'MCp7Rllzal8yUzhDPlEmSX1jX15AXk5iRl1uQ08uJUxYPzVTSVEpe3hMNjswLGhZfGxwbENvUzZxPiVzTi45cyk9ey5iPCV2SFJqSmxmQmdTeSt8TnBmaTJpOkdHfGQmRzEoLilJKGs2XiNgLkRJQD5uN1BLazxgZSNAQyg8SUpYVCJnYTNfSClAcDl6a1pRTD9wfD13d2hlNWsjVEI6UUxTaHBZ'@;
put 'JGNyXyw4LnxaJHc2bmNbbCFLNnI6cGdqTzQ/dEc2UmkhYittaSxQdEliU3lLI1hfRXk3ekEwWHM7cFZXbUFXY3t+VT5oYzN+Vi5mUyhEOEQmb04oJjNsZSNoSFd1VGhoZyozV0k1KjgwP3tgVmtwOUgqWHQobVQkQj0xMDY9YVpLfHhIYkNZbnRWbHxKdDZCfHM8OGRCc2JtSnBXRS5XdGd8NDJ+'@;
put 'czomeDlnXlFWZ1R0QE1SSF9dIWtOI0xjKE0sPDlnd1MkZDsrUnFjKGddQzlGWCxXbW4/bjg2Z34hXlB7P0NoK2tJVVdKJClRPkZKcXRidEhMaElELksqQGE/Y2k4TlheRzVTQ1hvYElQITVCPGJvJm9iejBqMUM6W2JRaGV8TXQsRW5dS0R2cSxyMU5mU3gwZWlSeW5abFJiczRSPW4uM25YYEpN'@;
put 'NyI0bHtqaUs+Yn1Md0ApW2kqW15ZSCZRKntJOWQ7VlFZfmFLeUg6dWp2Yz9KLil2RU9+Mjx3TGVGTjFxYl1AYj9xckReSzNLJm1yYUU/ZH1ZNyxULDswfiRKOl89QV9OKlt7KzBEPnxDNUxTOUc0Q2UlVFIocERdakYhQmtiPTFmVSYhTWtxMjErZit7eW9mMWh8fV5zaD4mUGd1KUg3eFRgV3Rz'@;
put 'MUxtN19FY1cvciNJX2FGYHciPmhBfXQ4aSx3M1s6cm16fDdkXixxJGkpYn10SUJtOSg6NXt2MnxOREJDXz1TRGwrd3x2Y0hNbWIpXiNscD1BLkRgPFdQaiNSU1VGPTBiYWFbdEomMilfNGA7MnNDak4sdGRxOkt0RXROJDNVb21KRnV5djxGR3JQSVd+NGwmbUc+fTNuVUc/ezd4Kj8mRyIke01+'@;
put 'cDFkc3RocGZsJUVzZkx4L2tQeXIoX3UuPjBKIzBReV0mdntkVzhyZkFhbEo9O3lwfj1rUi4+OyUlNnp4bVh7aVMmQmliO0lPYz9mOXJWLFdUVTBvdEV6MzdlKF9uK3J6TGFMVDtbXWxXJDQzMC8rIykkczEzenVGMVdGekNHZSFaKjgjbikiMGpfWlIhTWMwRz03R2IuKFYsJC9pZ2NzPlFARjQ9'@;
put 'W0JGXnskK0plOmdJKEo3ZVpvZE9PfSolLG9bdHxjUUZUblAvSUBvaE1ONlpWbFcwTiUlMnVgJSQ2MmRlWEZEL1IuQVVaNGlTZmNffmJFJTFBPWwpJTRQa2x3V0oiOU1CcC9LJmJeQipuOWtmbUBwc3crRFNTWTVecU8rcVE2PHZQRStYTipFNURmblU8KDhdLF5GWEc3d3kjdFJHNCEjQkUuczxO'@;
put 'TiEmKk5na00mJmFOKHBPNSZIKm8jL1RjbEJGTkJWWDl3e1NqREF1RExsO1hdfDBicm9KL3JyK1Q/Ujd6b1hSJDIsNEkoXWV5O0p7dmp3N1pIKyZeQSshMFR3NUFtYHVXdzdQdl1bTHB9UExMPWJyOjMpbSIlY3NneUNIKyttQy47dVBnJER9eVowdWhLYjgmIWJfY1FkI1RWdFFyJlZ5QThzKl5k'@;
put 'dzsqNioqbWY0LjF2L2dgKXRgQ1E0LFhYRV9hUU9oU2wvMWZ5VDtdI2UvbEVrRyRDLHkpSSp7NDZ7cUZvKFBBbmsiNns+PCtOa25SXigxPjMva1YxU2VpOlhrRXExZSpDNkxQWXcobERMOD15Yn00STspZnQ6aCJCbUcyT3ZBbVJORCZwOkYpbUlEWTNoZypoJj9kP240aC5odElmfURyQ0k3NllC'@;
put 'ZCJxYFFHRyJLV3JrZl4kfiFnR0ImU1J4ZlFhXW53L0E8VndhUWkhV2l0WTBmT0szSngjOGZDTXZFQjp4N01bSzhZZjNhJHh1Snt7W35FdlZmN3RxQT9AJDBOVmJpdk1UfnJGXXp4Nj4wVns4KEQufXVAcmpucm1ibE90dnM+YWw0NXYyU05DalFtUmRmYXdkZG5ifjwqcSR+IS5tbnMrWWN6XlEv'@;
put 'Xj9VRnhXLz1WdnVPP3RtaU9CaGNILHdoPThJXmJCdi94P3xxPX49T3R1YD5mTmdZPj5hX3czYWB3dGEueDhAZCk/V09yKExSKiNfJUV8ZkF6bT0sV0ReTG5COCk/fTNMeF9MdllVazIib34rV1FCXi9wRjouJDo5TEMxfEVOOUx7UUIjXm5HcHhMc2MhKU1pZzVCYlBnRzU0diwseEVodlRfXmhI'@;
put 'NmZIUXY2ezRFN3FFcEx1cVo3cFk2WjJIXypVZkE1bU1zPTBvfStMU3QzWzpAKVMuKXVFZzwkd2M7KFBfVWxGWnh2Jl9fX0h0O1NIM18zXTZDUSheUnAkKSZ9OjB6dEF8PzpyJCpdfUQhIkg6Qik1UzZeLCJxUFV+eyExSXRJb0c0UyNaUXsoOTBpRX0zb0FGRSg1MDpCe2YlUFYrVnheLiEoLElW'@;
put 'IVdkcD9+eWNLKmNnPi5Iam1+dUghLzJEX3IlKCRwIzBPJX5bVi54SXJdZ1g3ZS9mOl5aQ35pdmc9WS9QJkZFaHdDQypQOGtVYTtoPTE1e3lNRXAxVkVORFBUVEg/Pz1DflRXY3paUDV8KFhwKEtePzZ4c1Z8UkomVWlQdFtERFcuTVc7XWl9eH1ieiUudFFxV1Z3I2lWSz9HK0s3ZT92S2I3Nzhm'@;
put 'PVc4SzRgfEA7MWlNKiRNKGtVaWB6fl9FWDUuaGFXLns/ISxiRzooTVh4ZVsoTyJdRENCM2ZjIWgvQEBXWk5KN1lVMjxbWjIuQV1DLzZ0QDNkYTt1K3RKaTZ8UGcmdkh0WisoazBKTShQYUMuMXddOW80aEEkd34lMFkjZH1QJVFlcEo1X3FSRk9QcyFwVSt4Wjk2Pk41OyJqemhuM0RmQn19X0he'@;
put 'MlVkPF9EcEoiQG93K2t1XUl5M3cjRyMlRHo8IWMhLHV6X2Q0ayYvJDFbN0RVfl5san59fCVZSHpXb29bZUNYeWVMdVJ6XWlbfTNrUyFpOmUzMnguRjlwMDtNQjxXLn5BRntOcXhCZUVKcVNmIXc1V1dpeW9HcTImKk9CUFAoJjdwI31OMzQvT0tIRE18OVVdfGohanAmeyE1cHVCXSNue3t1TUF2'@;
put 'RVsuaSNFLnBCQzA/UmgrcVtVa209a005OGNZMyFWbGdgW2pkWi5QIXxFfXlfVWhIKihYT1Yidj90X0Vnb19CIm9sWTkrTHtDa15vfX17MElnXWEiMjZCNlUrLCQpPyFHPmN5MGVxRGlXTUdZRzQ3OFF7bFVIOykpXTcraV18PCJsPyhHXVQvNDdIV0B1S01lYCt5OHtwckYzJHwqOm86WzQ0WjA4'@;
put 'bE1FcGxDLm8+eDZkRDI5VW8vbilgfUc5UyMjZmtvc2ZESiJnPkw0JU5CPj1WYlE9ejYxbFM1Ik1iekR1cVRTK3V7VFs5Jl46R2AxQj5odXxKdz5JS0p2ITdXcG1LVmhCWFQmRmAiVHVjSVV0QHZTbWhQPVIrZV5bfHBye08wRzlld0puYjh6UEBwIjE1MnE+bjNHLFZ+MlluaDZROTJhV29aSHQi'@;
put 'eXdtPDQ9MjUhOjN4MXJEfERNbGhKQnklUVBeNlokOV9aIz9LLkt5fURWPlF0TWZsMihbSHZOcWgjejJxWDw9dTJ5VH5ra315dn08dF1Jek1tOXNmRTJ6XmJgTUsoTHchZCU9LDUxTkZaTlZIUC5BIVcseE4ifllnSiZgZ34zLnVvSnNIfSppPD9oQk8/aylTKEVYRispNjNXRlImfUFTKihsQUB3'@;
put 'fiJ3fjJiUTtSR2glInAlYUNudD5PalUjRz98Z1NrV2h8PFFvQ3hLMTJHaDckRlNaQl8odSwoZztObT4iYnp5X1pVKj98JjhqdC80YVBkQCteRnV3IkM4VDEpZCZzaSlbKndTJXdQUy40QCsrTFhKJUYoXmcme1NVO1BqYzxrXlV6JFZUYVBtTzRBIXl8NzN2Nkt4Y3F7PkhAPklNRUZGRzdJbjZG'@;
put 'TzlCbCk5IVdYL3E7WFsqUVA1cSlGX1M3UFclKDY5eGs4bn1CLGIkM3ZZb1JaKExlWXRBNm89P3VDKEVIWDZFTjpxJWE6d0trIjQ4ZjkhTEReTVEpPXNPRWlIbiVvfDk8dDtrTllkVXZNXn1zRi5hfkcpNG9FPypPS10ldTs0STc4R3JzOTxGJjNOdz42SEdZa2RgSENiSjZ7b012TCFJQnFvZ3pW'@;
put 'UFlFWlEiIX5QZDgvQFlWUCY5Wm1nMkp9XXpEe2o2clZ7VCxjRnU9SEdNe2VeWU05W3IoKVRaPTE0ciRUcnolbCFYS2lHJEc3IyMueXghPnR0WW01MkYmVzhVXXZ7fillfHt6XkNoPzw8VHExMHIlR0pYXzBuSjNEK1A5e2prPSF4aHVbIklzWnR1Rkpne0V2fX0xcC9XT3pUUndUKClUJV1DTjNg'@;
put 'SlRFWjRDQ0YsaXV4RHIyP0hzdzEmWyZZe2lEfiNdXzZsQWtIY14lflo9LH1IXkxCcV9mO3B6UyxNRUxzJSYjK0tfO310LzYjLmVyX2ZeRz5lXTZVR0ImZGZPe314SnI1PCR8QSk2TDtdXSNhRVVxL1hNTy9WRSp5cH5tIV5zXyxIXz1iVEVyUWd0dkttMjU3TXBqY1o3VGgmaklGcHBucFpyYig/'@;
put 'USFwP2FyW24oV0JyT0suQGV3eFQ3YjZrc1B3bkZaIVE7IyxqJX0iZlNFYkxzLn5PdSNxOSNpUTJBXUAsMyI3PlMvMnVVSmdjTTp9fk9HYVh7LkB4PCZLd1BPSmBgWn0kYCUmcGZ5RTR3SjQuITd2Yi9LeDwqVVZyJkVkZS9IbylHJDsmREZfMiNoVHIvaCNTXVIkOEleOkpvPD5nKXBqJjZRNTxN'@;
put 'QGFAZWUydUh7UlRpMyNlJmY7KmRoeGdFJTMuXVV3PnEzPiNka19daVQ0YitZRFIyaV8seztZOUxsZGEhYTFNN0hfOyEjP1Y0NTxtXzdZWEt5Tn5MRkxUWz9lV1FEWil4ekglQEdDZSVGMzhGYChMZ306W3BrN0gwKntPVyFlUWlZQkpNU3M0V1p5Sk5xbnp0MUB+fXY+d25AU0ovPWYyfSVgOnx2'@;
put 'JV01dytwU0BmTEVLdzI6ZHpWRj99JEcjNmZiPENhe2FCfjh6fF09QFthNV5NOWp2dj1LMWFjSmtEREdqZD49Kik8flNRfjdCfWpyVk5FW0JFRVNxKXM7PFpgVC5ZRihALjZyP1hPY0k8KGhoKG52UkouQGVPTz1QSUh8KGh5a1ZyKlM6JmlBR1phO2pzZCNwUTwuaSksU24zZlgsUXc3TSswT0Rn'@;
put 'UCMzPkd8IzcoflRmTGBZZlppb0ZkSGFCTnIjKnQ8I3RWXSU+NGl8aUBiTHkvUnE+MEhZbDlRW0E9ajlpLiRAYmRBfkc1cl50cFIoQmNtNzh2STwwWnlePVgjZlVQUj1pPWYkeml1ZTxabXhTLihaRzA+O2dNRU5ybkowQXlIW14sekhQNyY+cklbJT0ia0Z3WmtSYmVyOlltfSVESn5BcCMvejsj'@;
put 'ImtPNVNPWnE7OCFHMFQyZDVSeWFGbj1+OFJ7LjJbYDV2NC5NQ0R9b1B0MlgzSFtIcW50XTpWO2AwK3h5QWZ2JUdhaEVUY2xAIXBGfFRtZjxMR2wkbiF9XippOWp5TkdiPVRadG9dRnpgcGwuJDZZdWl7cGkkVn1SL1pbcHFiQ2crVlZidDtvKEF6NjciNFFUKT5MJGYoUncyMCQzVHRyKWtpRkBs'@;
put 'e2NZRFdFOEY2aEBCXlI1fVpOdDxGIjg7OFJES1tmO2BqTEx6NUMud0daYGI+XlRHbW03a3FXfnV4d2FEeFcreUN8RyVNJmU8XXBVJkJEQml8fGY/Rnx2KkA2ZENAfkwuJXpuUGwuVDVVWzFsJTNTKmR3ZndROVVwSE43Xi9eQEUqMVJpSj1wIWg+PURJKEx1cjUicyFpbGEiV2RaNmZlK1NJZHUj'@;
put 'dmpwRkMxY3prZWl1a150SjdhVSlBbl1OZFMzYlAkP2JkfU5RXXljVWM2c05ENFFYRDw+cjEhe1k6OXckcHglS2FmSj89X25oLitWWyp0VXIoZispTzR7RTxBbjFOW1c5enFSc2BqU041aTROJWNkMSskOn5scDQrIkRSeVk0VihnPnZ9NU02XjcrODowYzkrY0hwK3xydHt7JiZdVTIsYCxBNGgl'@;
put 'amwiaihdaF9AYkxtdWM6TDxzLyZzdkhgUThuJUVENWtjZ30uWGp4S2JKZiY9SUVCZWpERT99NHs/UkJKZXVrNV5NMDplfWpJMlV4Mlk3LFYxbyFtViN+YH4oKWFDXn5Ze1dCK0B8anRFcmYvVjpiODFVflhTc3NrNig9cVE6aW5za1FMd2Q3VkwpKjdmPSN6RyM+dE9nOnJ+c3I2OChuYC46VSJT'@;
put 'WSM9STNSaXpnMDROezBqdio+NUZdSzBPPkZNeW5tLiFfIXMoekQpd0lUYH4/QnBTT0x8MzJxdF8+MU1jNm43QEE3UHpoKExLVUxKKV43TFZXY3RDcltTWCFIRTBuKW1JQ1t1MVRDRm1dcDd9YyNxeihsYHcsUlljbltTTSJtPVhnU0B6Wk5zVVkwUXJBSSo+SVhRaC58SkNmcE4jTGwiS0JSX25o'@;
put 'cEo8OzlqQFEqPV06fEVNX3VhUTwsbUJZTixQLkJ9bWI+OHpJb0h1WDNsITV1KEZTP1J7PEV8Y04uU2BKKVZYZDlgQSQ8TitKU0ElQXhvZHE1L1VvJmdQSzZ9KSZOTUV8ZkJhNmhOMHZnVWtLYiNeTFc5WzBNd1U5UT97YylRPlBTRy89PmpaQEpMcD02InFvLDxhV2ZxYCYwVDUxdiM9JGpFRWJd'@;
put 'b0R8bzBTZjRXS293Q1MsTkJrK1MwZDVrR1t1dFtLNjl5JiljWX4/cEE4RWJsNTRQVVE8XiwsW2hlR0pLXUpsTHBIeF0+UGd9eWtXalN0aCNbeF1TO0h7UVJSP1BpRzdtLigub0U/P0k8MmcvS15UODxsPD8mT3h0LkNoUC9jbjdJIzd9YU57fiMvMj9MMExeWVFVMHgvQm9QbHhCSjV3YSJZcUlI'@;
put 'djRaaCEuYHJTXU0uXy97cGAsK3h8LnwrI3VRek8kN1lyX21+dD9JdHRJVD0/TS5bQDosbG9AXnFgQ3l4Q34qdzhmOGt+Vjt0JmdFOWwpaiQpY3p6REdhYGd6XSI8KkMhdSkzdkchUSZrbEA4WTxXRXdEe08kXT5STV8kbXUhbThpPn1Sc1Aob212XW5XcFZweGNIU3EjQWxFYXJgfDxNRjhQe217'@;
put 'ZFR8NUB1Q0hvY2xNaHE6KlJGcjgpcEVVLiRBXzxwZ10xKT9HLGM6VEltQGFbbGthRndEUGpYbXshKTomYCMoVEhpN31IVjA/IXBORSh6S2YiZ1tYL3JobmVCPCFKazF0VUliKHViPWhLNVFQQGA6Z0xGeWZHbmdIVG5WSV5aRmdBXyN2I3ZFIy8wYW8oYiVgd1tEMCtlaXNXM3NxUCEmXWNuIUs4'@;
put 'VHk+Lko4JnxfV00wV2M7QnBBL2FWTiplS3IwKmt7Uk5oRVZRTiFNVDVreWl6VVAzNjhXYy9CNmtvSSMiI25uczRBKmNhbnVOMip0flRsPkYuRmkmbXlaeTM3b2t1XkBlMTJ+ZXZVQHQ2LHI3fHw0cURZS1Rhb2JiZnlGU3I5JjZWMCZ4fS9tQVg1eGp6fCFxUTpYQ19YdnFrWmVfWEJlKiQiKX55'@;
put 'UGpjJlNfLzY3fn0zdjhbTlRNaSUlIUckOS98dyRLMnE1YWNmKGNTKXNGSnwob3tgSVMyVnNedkFpPW5wTj1AL1FfPm5lfWhlZHI3TGpQZm9STGFFYjZ0R3lETE4pbVlwNGddZHhva0U2ajlCZkNoQy9QXyhqVUZpLjZfNnUpXTUoN1R7WH5TUzpUbiFoOXdNT2N4UDNSJk01LnZLUEtANSFNZTM5'@;
put 'cXVpSEM3OFd1T3sjL09UZSwzQ1h5M1IwMn1Ce30/RSxiUFVpIWpbNWghM19tNC4rJUBuOCp0VklNMEVsTV84XXYzNGFTN25dclRmMDpLKGshN3QzfUo8S2dqamlTJmdlWTJkIXlZaX48QyVqVkNkRDF9M1hpc0lBJDR1fnk5O1lmS1Z6cGldN0l3JS96b3U6Tz9FdElYJT4sKz93Kit2QndHYEt8'@;
put 'd3tnfjxhQmlzV0dAJUI/cHBQRyhtdChHQlM0WE54dkhrVGg6KGtxNnRselosM094TlpXb1RGWz1gUi86QXY1azB0JmY0fjYxKnlNaXBNXkZNbjJ2eG46O0tAaS5ZYF1UNTxgalpyIztpLFdgNH1PZncvbCNub1lQdTNvM0N7dlNGPiFeVnRkeVI4fSpza3xINTZbRTM8VFBIemYzPltOMSNseXFI'@;
put 'c2tOQSwmQSsienRGKjRgQVpyQGhdeXpibyNtS2klcVRmRipXMk9kRHJEWUBudVBMLEVmYypKWyg7WGM7SW4sNV0qeXYxQXxnbVA8fW90QVdNSW0jOSs2IT1tSmNWP0JJdzl2LmBuUnFqITw9YWlBRCw8JDJbb1RtenBHTUt9fUVKLj16NyU6Lzp+ekRrUm5lJC9PPixxaD1WM3Q/cztGI1s8YEJ6'@;
put 'OkU1KzcsPWFdV0tiPHIySX5iL3MyTHYpND9HYjBfZCw3MzRvZjAzRDBeSGd7XV5qMkFjIml6U0U6NFlRNyJHcXFYOEpVRUNrJVBwVl9vKT9Zfj57UiMzbDpKaTdCMDFGNkthLH0ldzxnK29ba0Q7PTBUXT8xOCRtO000Tk5RRXNAVT1tJUhjNitvOCJdRkdxTUFqUEJBSTJReiEmP0pBaDphYHgl'@;
put 'RFs7KixxcCk4R2dTVVJnUSpGdHh0NG9EaT5EKztyZFU+SExWSF0jXTF3MmRve2NESHdyYSx+NDBgTHpjcSpqdEIuMHsiIio2NyhjJSkiMVlaVE9OQHZ8UUo2ZigsTit1NXVhSHZKJkR7YSpBajdwW1tlRkQuRStTTmI0NFtXb1Y0P1JKZkBjLGdCZV5hdS4mM0RMXixIOHYqUGNxTGIqNjRkNl5x'@;
put 'alV9SUtkPzRiMnloczduPU9ELlsvVWNUNlM1Z2F1MU4iajxNKWgvOGNdSHg2RzApeSpfTjRzUGMrQDIxSlVdJm1VT3MyMVV+NE9MMVJMQjkhe3Q9VWpgcTkoRks0T2E4QE8qfElpISluT2pTN2xkOn11MjckKU1DJWhiTDRIWWg5Mz0sInBscD5qdGU8ank+TnxRREIxSi55XTFCLz19UDd5On1x'@;
put 'bHAkSU9ReHEvIWd0aEVCIjZDWGlsRjJ0PjtRIltTX0hkOXtoRSxvYDYvYDBXM2JAU2YsYzRJJi9ibXN+PkBjIU5ZeTdGJFNfNkgiJFJ+eXVWYCZiNjdgU1lSQm5eIkdtSktnISl5SE51WUlLYT1MRDNHczpaY1Y9SG4ofEBmdWZ+UHcmJTFoSkhvYTJRRnYyN2MvJUgkLEw7ZmhKTUw3eU4oOGNX'@;
put 'TyxsR1FFZkRFcklDQVtWI3pXMWQhRy9qKD55b3tBQTI2LigjZig3L19UVl8xeVgjQTZtLm5xZEwqPSZROlBGYl1ZXUA7cnZFPSklLEpHbCorfWF2NSNobHIiP0BgS1NkTHlrJmVSbSlVTVt1dHhfczpPMWdAenNIXn5qWSE0aUYwP2FBXWI8PHdCe2Ftd1k+TE5UMU8rWWpadTsuU2FdOmdQTXpq'@;
put 'RSN8fHxvTHl7RCJvZiJaU2ohX046bEU0aXN2IXdKVUcwZmJDZj0xWSpwW2cuZjEiZUo6c3o0UlQ4JWVvJU9PL1I6WSZubC9PaHd7YzssNnYwLF9LOlZKUz9iTjMiQUZ5S28pdCFgVkIqYzNgV0d0MXpzdXspPHJQSFlkS3A8TVsmPHlUKlZtV0Ekb0wydl9nfU57e3s4LkhYY31PV3l2OntMfC8o'@;
put 'WT9HXU5kIzRjRjBkWF5qLjBsSHQmYSMuZEZ3WlRKeT5oQEk8fkM9RX1AKnZXfC9feGh+PXkvWHxDajhUVyVyOH5fTWRfUVssWD5ZMm1QYnBtQVJPVHRnYTZPTWVxeEpDNjxqeTFkcChOeFd1PW82cl5FUUZ4aj87K0xWMSVpJmAscFJUIjZZUl06T1JhT3ZKT2pWdEQ9ZV0xUFNZOE5hU0BKdCI8'@;
put 'Smxea2NISGt7OnVBQ2JFNTx7ViZzdE1VY2okU0k5JjpjV3lPQD52ViNRQTd8IlBVQ01XY1skNktNWnB+WGQ1N0dENmswLiRJV0BQSU0ubmtiKW43O19tcEhJSXI2YllYeDNtRixfUkBzVjRpdC99UU4/RG5MQGtEK1AhJmE+c343MWlwPGlqYS9EUihIUlI6T0VkY0Q5MyhjNlgmTE5nKGZiWD12'@;
put 'JDRaOyhpYC8hWltuYHFTMiplK3UiO3lfI1pUV1tSY2BTbXVXdTo5Q3ozVjkhW1RMPWhXW09WMlUqRXJgS0MibVV0T3AzWnFRYzhmP1l8fV83PUFGOlhUbjFCQFFXYmAvcFBNPWpgP3RZOENbc3dHYnVzWmlkQk1lM1pCOWdKSCR2Nn48NTFobz8hMGFvVGQ1OEhjaWU2UCEmZTVfbnEsQkRNVUQ0'@;
put 'elBzY0IkNH4pR2RvUmtnRT1tMU8/a1g7bFd7KnZhKVlVSTdMJjlOaj5LOW9MWm1BJncjd3dbcmM5cGB9dEhibUVqXUpRLysqKGdHUlFyLndPKnh0ZjIpcDszRkxyZnd2ZUoqUyE6eG0wTG53eUlfQUZgeXV4YERNfnByI0I/fHlGKVs1SV8vbkpdQl9UKHR0fkslMHV6ImJoXix5I3ZpPzRsfjIk'@;
put 'fGUkI2o+eV5pXmEvTW00QWtyKXI2dUhjcXUxZW1IMSZNIXVWV1VNTz02cT5aKV1od3BBMztYZDBMZzBXZSttSk8vRUcwcV4hanxuZD5bVDdVKC9ZRDpaa0xEQnI3ZWtKVChwKD9lJSg1YXl2ZHdfITxCOiQ1fnMkOHYzYUNta1tuKjFSKnw2XTl2OnAwQ2VDQiRCYSwzXnFedjpWMzZydiMuMn5v'@;
put 'R302OSJHXkZ8bn0yN35IMGc+JDkxbzU6QyNJJmJucU9RTENTZ3JNJi46WXJwMVlyLyxHVFE/dnQ7aTdgcllYMU10Sj0wcnxZOVUkaCx8ciZMQ2wkSiQsVyZXKGpCfChLfjJ0fURWKiliQWBxNHUhOzF4OywsQktbIlVGOjBCNnBfVU1LbGc1UGZgK3Y6dGYsX1dsMT5hUSZlN2pmPSRwbEtFTE5J'@;
put 'JmZybG9oZXp+WSQ5VUh+LndyXTt8P2hSWl9QfCYrMmkuUkJQOTJwPTYoQT5LNDpxbjxrUnM4d3ZTUkxuZl9jPEg9OzJPb2YmP0hHcSp6bik2a3dsPG9MNnMpMUQsIVMpYE9aRXx0YnNYJWc+dVcuI0Fgd1RUJDIqTSMwUlFhYDxvfmQ+WWpqZm5mdWVoSVc1UUNkWFgjTSp1cC52WWJXOjE1XTkk'@;
put 'PE1EK1JbfW0yfntaaXNlTXQva0tBYzx0K2cyJGcjcTVEa3tVM0ZHemtfeDkiVVkoZXhEJjdKRCxPfSlUaV90XSsmdDkjOiRLNXo6ZTxhOUliRE1ScndEekZkOjhHeCJwR2hwaUFfaVhmSSNOUGB0OE5fXkdebyxMfmFnOy9qMV4zL3BJe2VeWXwqUm1qOUNmZn5CMDNFUDZDWWQ4X154WzFLaT1e'@;
put 'KHtjezVhfWojZ2gka0IvT1o8JDhFUiFYRG5dJGlfM30+TjtPRm90N3JDb14jVmcsaF93bk5wQXR2USU4UW08cVhHbXw0bXVEUGA1Nzw9ZzY3IS8iVm1keVRqdGw0ako9PnpfNUhWP2p2QCRYUSRqRSRPNzQlZ2BuNk5PelY5dSt5VVprL1dwbClNVVhELntfJTVIZzZnP0dlMXl0bEJLKGJNa2tl'@;
put 'fC5vdShdX0hyP1kpMWw6JXZ0YXVsYnVLZVBpVGlKbmpGLmhWOjE6YE59YX1XMGJEelBAUXRhU2c9QGx1ITN8OlJiW2Jmd0pHWVAkJUwiUVNlI2MyR2BLRlhOWDZGJDBKSDR4XixSbnZiTnFmdjhve2EyQEl5fmBGRHJQVkNzM1VIRj4rQWtLJW0xPnRaV0pseSNnT3xuYWE9XTg2clI6Q01Lam9h'@;
put 'JFdWSy9belZ2NXx+W05wJmddczNVZCFZcn5jcTc3L09POmBeYElbdXQiTU59X3Z2d3VSTFFReH13Q2MpW2xVM3g1YFFGRSxUeHx5a206SC9STHkjWH48PHRdZz5SOn19O30/ZDlaM01FXlkwZzBlLyVkR30mUSZKJTI+MkJmNzgvWzwsVXtYLjQyVWgrTlUyLjUmTEVBT0JbamRAWyFnUnZbL2Qz'@;
put 'MGtjI3g7cFNjJlNFeUNkUEtYYkZAYlokX15hMUtTTVI+WFpYdns0bis5fmdMKF9NMlYyYjU4KCpdemtnTzA2KT5KcHMuKUttQTs0S2NtRFNrRjQkMkpvPCUvTEpbNTo6cU1RJSpSZiJ4Y0c2bXc5KWZzbGpAXllLKX0/X2ROTkJWZ2RAUm1WaTdvRy5MS0dXLEAvSGxTUWEqc3JXL34rc0xkbnx2'@;
put 'MF8hNW5ySyZPVko9RzIvUiU+enQ1RWwpXzojK2pdcUA6VEdmSlpkJWFgdExvalZ+TCh1MDYjODckc2RQTEB1KHJMJTA9X3FhZSFNY3tAdUJeXyIrTV5hampHWGt4TyYvIl43V005ZWZsRCJIQHF+e25OZEJYfWd9eTZpKz9uWDgyLiohZyRYVFcqanpsM1cxKHNJZE53S0ZsSm5NKFp8aDIqRnMp'@;
put 'c3EoXWoiPGB2QF1hOk1uO2ZhRmlRQFhXa0V4Q2w8Ok5odnBxanVVPWpDOEBPYD8kN1Jvd3pld3crZ1oiZG9RZVJzOm5tXU52dSUuNS9YX09RKkRtJm91MltkJF1oKUxEbEtlRENqNzxZZzNgaSg1eFZZOHdffURAeE9WamxCSE5nMl9rPUZGI3QhZ2xjTXxLO001bWdgSU1rMXs1T189PEFOSGQh'@;
put 'KywyKCQ2ZGpNJnB7MnZnWC9XaENoT21pKChYKE1yWFFCOVdrNCQkVVAmMldGRWt4SCJoREh2VT0sWE93OEJaKXZvRGs2b0hIYyQjWENARHpSIjUyezFkIzw1NTl0VkxpRzNUR0BhYW03WDhIU0RSME45SS5YVGE3IlJZJFVDfVRQZ09xYmZKRUlGNn1XPXl9bFkiN2BKNDRQQUxSTnAydUNIRTUx'@;
put 'Rj5oX2RESyZiW2x1aX02dXg/KiRCTV93YSppOU5vczAmKVVhc3FWMzd1WHZ3L2VURitvT01BYGkpfUshcTtvdmh1T0A0az9uekczNHFNeHokMClmY21JMH59W1VbMy5Jbi8zVko8KWpLJGIlKzhRbih+QSp8a3Y1MF0vVG0xYHZte2YvMEFuRFQ/Oz08NVNoWG88PDZxUk1xQlQqNzlYanAjSV11'@;
put 'RyV4fDQ/ZkVwa0RJPChgKVNtKERHVzsvckVPOyZNRjFyNEVOPSVIIUM2OGNYek8rPUczKjhZM31sNTx7JSEiOkkoPGBXfEkmYjAqaGdCNTRqXmc9NVdwL2pmdTg4c2J3fTQ/Izh1LCRnNX53KUZZenBpaStUTWhmaS5tampzVEU4PikuTHApNnA+UUVEYlQ1MFh6RDJrRDh0VSxoOlBYemUiZ3VL'@;
put 'YGVvMnVjVWpQO2gsaHg9Ji4ibj1DYm1hJkFCOnErM3tpc0ZATH0xeiE0MTN4UCVMe2gpdUo4KGMsNFpmSSpLKWwrfl0jQCNmI1swOnksJjFAOk1+TC9GfXQ5aHU2PEB6NCVoXVZXVC9AMEVXeCNrUGN0a2ExVGZVVWJyb285UnEzS3wvNVU2aEZ+V2NtUF95Uip3OVM+NiUuKnRZckxjaHxIeWlP'@;
put 'MnVqcGVQOjUrWGNtNmVLY3I/MUp1TSl1MypveF1OMylkKXp2VHFZKkdSVFcyZjppfix2Wit1SlNPMl9qNUVtTyxkJDJ4MXl6KHpfRnB1cnkiPX12VilmOyRPUkZHNEcmemVUUXZFN18xIjV2Ij1CazNgZUAjVyxXcEZGaWVDSVhiMnlzTFNePyRnVjBgQ0s/NnI+bVFJMW0rKlI4WUpOM0plZERI'@;
put 'Jl0sWlJlUlU2bGR4N0ZkTDZnb3g3LjBSVDlUPWZzVTRCVWRPI0AmTiNwbkQ2L2huekVFMWYqfFZ3Wl1OZnhJNDo3eFc6e1JIZnkxJHNvTF8rOCw5NEdgPmd5a3xaRkdBJGUxcXYqfTFgPERId2Q4KSxAIVRedSteME1zUHFsYE9pWH1BTEAhfFp0VkJuNkdkNy4qX3l9bDk9RCFUb19MMVVKSHhQ'@;
put 'SFZAVGtjNGdRY0U1TSlFWWZyJEU9JS84ZEQqbWw5bGBCJkZIYl9fdUthe3JwSz92Tl0lengvd351fiZOKWIrKWBwRXFhWylzeG8yZlVLS09HLFQhbipkWjwjOXY9UG40Mz1le3ZqU3IvQDJqfjhAWl41RV5FcX0jTmA9In1sIjk8WnVDSVdtZVN9WyptdDJFdEc2aSIoWCZ9Ljh1NFt5O2MmWDFV'@;
put 'WHNsKXp3LyxIIXBUQEJrSW55WlN6NkMwMDZxS1V3dSpje2RYTyoyRG1HcFIhaDo2WH0uRkoldEdFb0JGYSZyV1FzZytzWGpgSkAzeDNGL1BHbj1vfDJjXlNJMz9sUWk8NnxacF5fM2ZHNmlPb0hfcHV1WUBnPk02RH4sUHBIZjUsK3oxUzZTTmE/WSQ2aGUhUFJjISNbVVlQdCl8VWVbKlpyaSUz'@;
put 'P2JkMjZfUVtuP0pCfUssU3l0LFY2JV5Gd1R8NndxJiNjaTZraUx6LkpeKDpdZTA3MyYiazMhQDBmOm8kLmxrI2trMGY9UVp0OVB6RVd2YUkyYGd4Lm11eSosSClEV1gjfmhRXll8SDxbKC5TNk1bTTBqPSErOiExZl56cWp3UiQ0KDhzQF5ZZ2suOz9yTlQ/WmdrLkFRNkRCUFA2YHBiKzcpOjQ0'@;
put 'dzdadWMzYFJjMFBzdjxyR29TcmheZWFaOHFoVnMoUDMiKSwlJiQjfjBnOT4kNiQoQDFCaix5O0BQVCNfJEh2S3YxdjBtS2QiZzFQbT1AdGhWOk5wTHVROk4pSzteTDR9TV48P3BGVWh9Rn18UTVjMTY1MFNbRH5aIWx1WmVCdUZQJVB0SVhNfF4iSkJPKWZ9YWd4S29+ajRPaTA7OmEzKU9MYilW'@;
put 'Y29aZGhNYUY+MjBpe3ohJVBwZWM1N1Q4WzU7QCVxZVhhZykwbjE7QFJdRzQ/OkclOCtLfVVAO1h8Lk13MkNIVjl2YUlXdlteLiFgPWI2TT5VR0pHcyRnXSomPTxiRno2fURUPmpMQSYrMUtCUihtKmddRGtLUjVlTE95NFlQMGR2NTF6c1ZxYy9MWVZ0dHRwTzVKQDsmPiFESWM1SXMweWRlIWh+'@;
put 'JTYuNmlCbWJGMEBOSF1yS1h4dSNSLGxOa2skTnlARzIuOFN7PiEvZmldN1hTRihhREhzaEZIc0dzciokSXlqKGthM1IsKSFSLkQ7VCowX0BDLkVDLHluTWZ1YWxZIj42dXk7Q2ZUfTZ1OWcuNXhheDBObHo0Xi9EZ2lPVCVLYSk0X3JmZ1Z1TzliWV1vTk9lIXNjSVhCaEFxL3FfbyQzRyFAVz5y'@;
put 'XjhWL1N4MkIvNztFTVRNZ0ZNWmBea2BReDI/I0NjTyw3LEJYUjRwInBmK1JnNGFae3BPaTxLdTsoPWdqKWo3IT55dTFhNWIpdExxWldNJEo7ViR8dCpZNWouJW1aJjxyIjk+Q0YpJFhmXm4ubW01V0UxWiRvZkZqWUY7JSIlaWVQY3wyRENqUVJ5XUNIOVMwW2pFRlRvTEsxKzgrYCRZIVpAK09r'@;
put 'IUVFI0p2XzxiRTxaJlU6OiRNaXBpaTlCZyhoRCVWPzokYV0yQTRMeXVUYWd9L0ZXKUlRdUBdK2JwVD5HJV5bK35SKSpDVlgkSXA+KEBTWUh9I1F2WywmS3wvPz4sa3ssY3t2PnByUjFWQX04QGFWcXU/IW96bUYsMlYkUnNOTkFgQUplQ15TKTMzJF9iVj48RFhzJmViejE+RX5NeDpwdUY/d2ZO'@;
put 'YFNfUWU0bEBBajg8NjB9VWk0NzMqajsmaztzeX4lTFFtQn5edFR4TmFILixwfGZMM2kmZT5bTm5DTnU5dllkdSJILylna3k5SUJCWFIhc1hvTTt9O2JBPk5IS2N9VTFKPWkiR3RRN1I1SUYqUS5PYktpQXB8UTloNSpMW2xxKz9kZU57aXhqSmpFSkgyMk9MIVVhKW5bTW1PZT5UdiVHSHIsYWBD'@;
put 'LlJSOmFXdkpvYXpQenVSJkdieTkhakllTyNMPHhKYHskYD1kIz5URCh0Rnw1MGBmYiJnWD1IKXZFaXIya2IudUdeX2s+c05iaUVLSCQhfnlxRUd3cUVvKUdDRFNPWHlOVyk9MERKYXt6MD1SQ2JpIi4qQmtDNGtfW3U+YSJxfXh8S3BnfEJ9bjpnWCk2WHdbLnZkN0dPaUlqd0BGPnkjIyhdezU8'@;
put 'Q3tWKitJPixjaVJbKit+fCg9P207JlU6djV3QEgpKEhGVXd5WGpgMkw6NXZ0PGh4QF5RWUZ1RC9Sam9Pdj5LNGdFVk0iJkM3b0RZTT0oc05JPkk8dmJ3QFI/YiZJTXR4MEklUE92Ym1eXkFxdn0xMkFUfHB8SWh4cithLkd4LHIlSFU1XUxmR0lVIkQrQWohQj9dWz4jRV84c15vSk15KEJ1Q3Yl'@;
put 'W0d2JnRzbk5ZMjB+JSpqJW4vQ19aZHVAZ258fT5uTURZNj91Y25PI3t2VUIyQHJMTjU3bVloYkJxdXJrektCQm43N3crMC9OO3d7M3pDWiY9OSN9cD9fPHRYQGQrfF1BPmFlWyk3aSo9UVRGYUBsSlc8XiMwTDgjcXE6OktudzYqZjxzfEJ2V2pdXy9yWVlkekZnUW1sU3RlT09+UnxVQSFMUGRr'@;
put 'diJEaEdIYTojO1ZCMlN6fFpVJipKJUUrMlJEXkJnQUUqQ0IuVTR3bkBpUippYSouYSEuIVVhbEo9aVh5e3I5KUUwK0xyNExeOFExTEAqYmhhN2shPXhENjBgMEBpYEJbckIvWEAwRkNNeDlqemRSWElFRUdyaDo9MVp6I3ZaVHR2LF1qZylde3xdalZlSTx9d1MzZVNxRmBaP0JlflVvQXdxdW0m'@;
put 'ckZBNDg6QWsuRz5OT2YkYHR7cDp5OStYUCpoR1dkaThqblspXzpZQVJiaW5baCtOT1FTN3hAY3NPSztdXiRCdT5IJkghfDpgNHtvSjxsRCVufUJ4SlQ/TEA2eEI/WTZMSUhgOmNve0ouZVZIfW5ST3QsJTpmLkliXndDYEZINDhfbT1RNFs+SyRqRCVJbkUrZ2svWTYxSnw1T2ovak8/ZGt9dlYp'@;
put 'KFBmMERkTixbMWxrTXh8bkhBWjhjQkE/NjA9bHlZfj5kOmlWc3Y/cnU0KVtoMyRlIVssc3glIV44QmZNdXleVzlVd0BrJUVfMDFUPXVxbTomJV1CYXh9JGBsNmM3cF0wSUx7L3AqaFJKKENYW0tJYFBFei5iI1pDbDZkc0ZhNTZaUTB9YGA8PyNISlNvZC89QiRlY0ojYVNaZjcoRnUiSWs0JCxU'@;
put 'RVBFP2YuWXhlbURnMUNFbEIrYkliSTw+Oik8SzFUMF40UGdiJCZkRSYoOXV+by4uWzllaVd2dEYySXB1Yjd1WzddbVRmNTBhaWdPInAsUUZqWHkzajtkMGVPX103azBTLitVMnlnQmkye1UyQ3NUcyh4MGNuJDM2ampZeDsrej1seyxpT2ZRZVpNW0NCWnRlK3xvR15VcV80ZTV4QGo0I0xATzhi'@;
put 'UERbXkpsKyh2RThPU21fUTgwSDkuTmlLcCV3cCU9ZGp1by9xN2t7TUZxLypCW0lpLkZvaTNDJjdwOzQ2eE49XUNWViNKYnwxQ3pgKEoyVDUuXjc7eHNualV9SHZnXjNbKSFaRTVeOTwyRVs2O3VJZ3BNOm4kXlIiSkZRb0A/XzlKMVhxL3c4dEU+Lk4oPDBYP31zUjF2U0V5Zzk7UUlYb2YjNVcl'@;
put 'aStAO05pLFp4VD9Pd20ifWxGSGxgKlVUPzQ+OSlzZ09ANThuUERISzFMQDhEKSl8JFh6bFhraDNKZUBTWWZtR3VgdDN0T28xSiNMS0swXz1oOFdlRUdIeylWRWtlI31OVj12JEppIyopOnpOdjIpKHs5O3swXypCQC80QnkxQ3MoNiRANlFYKG51KUFvZWd3TyNkPXJeUGVeITlRVSNkXWZbSGJ4'@;
put 'QG5dRj5SU316ez9MdlNvTVh5VWx5XSQ7eFs4RGs7TjU1bTkmQzJ7Ril1WGlkRXVNUVlYJlc2MjlVLGBIMCtzcTx8VH1nUyF8R2Zrb05yWTYhQCVjTFlgJjIwMkhNKjI4bTxVbXRhdl16NyV8XTdRaFIyWXtpTjNkWEtFUVFGQjslaUlqLmc7Sjx4Y0sjUFFGVDFfKmtCIlkvVWQxaEN1ZzN2NSV6'@;
put 'LmRHP1RqITQmRTghKV9pLk9USTZENSlxLF9JO211PlU5KGNxNTFIOWUoV2xSMmt5VDVrbEJkL2c0W2gpNG1lVlR0JUhrUi88T0tLVExjI3pDfCljXWp4PyImQ1lfWF9MOmkofHI6UGN5R1R3dEVDU21CdW0lN2MhRyM5JEUwSzYuKVg3cyhSbV50TX0lbD47cjAsM3dRK28sP3RCTUlKZFFgKjVw'@;
put 'Qy9ZaS9ZI21fKy5kRE54KSokPDMwd3dZPFFvIUohMm5adG91SiMjVjh5Rl0zY34vRyQ7ZVpSInhXLEp9KHdJLHYqQklleGdkMWprXUhMXnhpUTBKe3BoZCY7ISEoajZ3NENQZXVFfV8hJXZVWE9AenhMdzZvNGEyRCxSaEBeaWEuUjhQMkdwZjphcSVEfmlUREFfZ0BsOiU9cUpTcGVWeGhlKkZM'@;
put 'VD9KbX1vTURKU09QKXBmOy4hMS9FIkB+WFt4Z0ZZRkwmQzltc3pPSDZrfSFHfmlnJlFzSlNqUV4xU0BuPWFjSlJAKz48PyJBMlU1U3BRT1EwaCQxXUwlN3ZVYiVnPClMW2hjQXZVamVtYUpFdi5sNndlfE1nUyNsO2A8WTQxIzleaGVWRkFGc1l3PCR+ZUAjRnlQSDRSTUxkXlk1VklnKGVgaHBt'@;
put 'SHwrYS9ALCtPQnc8VkExKUZBO3JIV01NX0JKU3ZhPDVVbEE1PWs+RlV5ZzYxa1VzLipJKV8kaVhiX3N7RCRvJSJSQFUsXmlLSC9aNCtgellBdVA9QUMpbi5pSnd6PWQ1e1BoNG5ZUFhubVh6aGU5VntVfCIqdEd0cSU5fGJeSSFpdkgxdERbTytkQjd6N3B4cFlNbmF3YCxPTlloQU9KOm46LHFL'@;
put 'bHEqbyQqOSJLO0ZrVjhZN0g7ey5MeS4oTmJEXzk+LkhmSzFVbChuXnA9TDBYdGQlbD0oWkNTL2VSS2g5Q3J8JFghaU5zQUpEVGA+InZCMjlZQXc1IkgkQX1yd0s2d1dLTWBMeDc1RkdQaCpoL0dTcHR+dkNEO0oqJXxCQip2dW9Idz9wMkBgRyFQTVRKdUprViNmbFl8SHhRbyZmNFIxa2VVWiJb'@;
put 'aDQ6ImVFZDxrQmojSWYlQkRaKk1qOUZAKT9SLzM5WUJdWWdbaiNUJC8wTSVDfmc8NVNqcUd6WkQxdlNEWC9NeltteW0rX3VEKSxuTEZ4JT0kK3I1O0dGcXJgJTM3ZUl6VSZ7Rz5fKD0iYFBhNTteM31jcHgyZkBaUlFqJCV9cEJXYHlJJSpDLz8kLlQ7JjVSL3NYKm1RSV1vXlZWdDNCUGZdOk0s'@;
put 'ZGBQe1lITURxfnI+UCJgJkJvYGVbZnhxSHhJI358TzF3PE1mKTdvRmxqOVNWS1FhWltfVyp0Z3VvWXE6bkxJT1FKdmBSe0VNdWM/bXdDViFKJGBpUntESz8xSDY1JXFYcVsrTkR1ZmBha0oiUWNMRjZYVWAuMzN9K05DKlZWR1pqZVM0Xmcoa298K3xdWlFzfjEsUUlhUVY+I3MjQy5oLj9VSHNA'@;
put 'YXNfYyx6TnE5TE5jW05mdDkiYCswcjZQR1o/enZrLE0kIjNZPl13cCMhLEQ+KWhxclAoeWlUNiJvR2wlRkhzNEd0aGZ3QGtQRm5yTmAqb1sxLDg7UnQ6cTFMYDtmRSh2S0B4UiM1aSt1dUgqP10jcy9AMGFyZ0slXkxvez4vZGNWPSpLazFMPFFGdzh+V0goYSIwbn1VK0tqOEdeJjttTn5xcG9C'@;
put 'TV5jdk51Q3hHczRjPGx0KHNbPC9XSWozdTJjJE1mR0IqJmBMaUBCLmtSVTZTbWBzd2w6LGxyL0p6RHd9QltpInY9MzRbWiZ4Q1dNWzNLN2pxSUYyPVMvRFVMRXNZOT1SYytuV0kxSiolLHFeM3A9NWR5U2A+SHdjSyNLYH5yXVIyfTklTVBwI3Jlb2t9dXs+dk9GLkxxJGZGSldjZFtMd0xheDNE'@;
put 'U3ROO14ve25NbEBtV09ZMlN3aDxxZ1F1bUxMfFtARkdwSVhNU3hAR2JeYDR6W0Q9VV1JTWdrZih5aiMpdjUkIn5uVTZre1J8UDlnZDNLUj5gfCo3bl9YP0smKDJ9LyZCZTZeRS94LmgjJk13QWxFPD42TyN4Jj5PalRhZXMrMCM6OEdlKXBTfTZTPUtzS2pTKCI7VnM7TmI1bWdScm9mW2c5e1Nu'@;
put 'NC5aNCNqOUF3U20jLCEmSkojXjsuPDJnalhWPmpiWyssMjBMQGV4Yld2P0ZvXTBzfXREPEJHTjVecCEiRHoqTTYrT3N9OilQbi99Vks8P3tgfGt5VTtXaUJaX352a31Ea3I+S2RyPjZiXjghQE13KnUrQnJOY21LT218fk9PRHJOWTZie1Z2eGdKSCgvJEhqKXVaZWp9XntkSHgiLyozTHlDNlkw'@;
put 'WGhNcTtMWikxKVJuUjBDZEhdM2N6W0E7aCM3az5JTElVIm0rL3RxL2JdR3l0QDVFRUwhTW0rM3JAQSQ0MTo1bXpXQ1dGNm9HcEdVLlhpVz9nTUlVYHpGMjZhVz9Ca0ZtUCZTKj4/PilTa29qJVBYaz8hbmZdK3wzPFJQPWU4dlRscVpIWzFxSylNcFVyMnskRzxqQk1xV2BQaGI0SkduT3BZLCNq'@;
put 'R0MrYXJBckckK2d9WmtELGozVlR0bXRFJFB8XTNYN18zTVI3emY9biRqMXl7V0VCPE89T31eJVtQSkhTd3dZayl0Z2VJTkdHT1BRRUdxM3xATUAzLGIwYVA+V3tLezBhamVoQVF5RFB8MG12P2dta1JHbD89cj9jd0dyJHJ8VCUhQ21UOjxgUEtheHosZ3dIfG9iRSxOWDBnaXRQTm8kM2FjI31q'@;
put 'OntVOnMmXlU7XmxnTU9uLlVYaWI+dlVOIyVjPWV4MyNXKiJXcikwLHdAZHF6WT99Q3BEPHh5ajlMPFpRZ2piIy5wQXJ+UX4vQ3dBME1eJHpUXz4lQU0vUUZ8RCNLfFUhNkpxMzYseUM+L1FMYnRxfTNeOS8iOiJnREU5KV4yMXQ/TGAzTV9bL0FrJSx2OmozKGZhO0BjOzdLXkBjPWA4SyM4VVhs'@;
put 'PmIiLFZDOzByMSxnUFVYeilMdUU+W21dVEpJeSlYb19MP0FZL2xuaCRhVGE9Xi9dOHthd2lEM2lGdm5UUVNlcjIhRTVLdCs7VTBJdyhkXkFgME1WeWY9QEM1TTwmL01JRUt1fCRLXXBmeXV7WzcqYmIlJDVKPWBKKSRnUGVRUVNiSjswKW5kQUpSSHJ1RWkxKFh4ZSQ7UCVCTkhYZV15Mm5AO1h2'@;
put 'JCt5O3spQk4sO1dDblFmYyssTWMsaitQZW9Cay9GU0QyblY+UV5DLm80azEvcXtmQUltfXk0W1s+QGNQRTZDPyJlVylXR3l1WCFPV2wqUXVmNWo0MWdUUHU+Zm81JE5nbi5YRkhbZ24pNWx0LiIuTlV9QmQ3KmU9QS53M01lOHoiJkR2L0ZoRDs/PGQkZUhNRVpTUGMpVXNmRzRfLFJXUWghJCpV'@;
put 'c15XeEtNYU8hTy90Kyt1Ui9CZlFAX0V9fWYhW2lkdU4jPj8lT0VPM05eKV14XjZCTUByIjFSVGdacGZaenx9WUwyYkJuOjJlRyo9WilMSyFxOVVEQFglLDFaYDskW19APzZuRUh5V3Z0NUtgSDZLITUwKjVXdERpL0ohbzRDIXp3MHtnTHIyT31mWnZ9QSgrKENiKUFuWVcpWjgxU1FzZUZ4cUwm'@;
put 'UypNcFRATDBkNlhdblVxNUNzcTZzL2Y5bygvWCQ/VV15SC43azo1Xml7SEt7KFRLQHtWYXAwU29wfU5MU0kyRmB9eTZxL2V9alYrXikraVdBeFtkYHN6dikhdV58Nz9YNj5HfVR+UCs6YnQ9OWhheXtqSDYxZX01UWVxNHx9X2dVRGJwW00wVSNvaThEemYlVT1Tc15nUndDKGU9KiFtOzUlZ0cv'@;
put 'PSs6Z1hGOHZqSSlTNHxoJDYvXlFnLzh3PXY+eVVBLCZrZj1fNzE3eTxPRG0wUmJobk9AKTNwPEpCLihHbipUMFRKU1tGdlRDXmZwfXAibU4+LjtmYVh1aFEkeFlYZkcrIVtQfiFzPW0oKDV1fHlVeGByL1N+WTpRKnc+d3gma0cmOWRnVG9DPz1NRVRrNl0vMjhYXnZ6aV82NUtxcVlraFJZPiI7'@;
put 'R3I5dGJhT010KkxsUCFBa2FDaj8uTjBuaiwvaUl9Y0ZqW3svKld2UTFAZUghdWhIdWM6a2BfZEwme1h4JVoke1BabkZwbF8mPiYqQmZoVlYuW0lTUTpkNDMvQiY/eWFXUSR3b1FKVHhtUjowM15Ad2UqelBHJFhaUiRFTnVNKTZ2RXNGL24lNWpiPkxiaXdHN1k6QENuLE0/V2JWRC97ZztDMWdK'@;
put 'UGhQdlolWmZYVG5oL1YwTEpmd2U4Vi9TUXsyY0JyPWY5V18pW3l0IlFZNypme3pIOSE4ZC9xMkNVZnkkRn5WLHBMSStVbG52KUgxKjN+O2FgaUE0QGZNfkssZ1lEXT1eQmhaLlp8VmltN3dLWkFMTCtWZDt6cV50eWx5S0RyTkghenchfXIoRV0uPT1XKz9ZUnphSSFFWUwqZm9uIyM8LztGfjg5'@;
put 'KUlFRENJJWVSPk84QGU/JUFGW2BzO14hQmUqTT82aFBnYH07ciJFPmo0OXhSYHs6RHBRa0RpfiQ+P1dvbTd6WVpJelRMdiR4cnVCcDlPUyNGNlJ1W1UsaUhLMmJsV29pNS96NWZqUWM9clgwcnRIQ3VEYm8iQnM/bUMmWSZfeTdhe1ZKZ0dZRypScUZzQ2trTmFKYUFWUmslY2I5Xn48TV9JdDwz'@;
put 'd0JUQUduI2dXXltpMEYyQ10sRlIsZHkhT2J7aFFeYlFeQmxEXUUhcUJhUkcwcj9HQ3FCWEZjcWtCWjguNWskRFd0LDNlaHxgejNuNEVePGtdVlBzLzFQJnJGaGZlbkhxYjIpclJadltlPTRHT01jSWNJRUN1RkwoRnc+dn1nbT9ZZk8/Yz5pbm1WSjJUTHZkIksxZHlkKiNTRWZhKW9Ie2FGVihn'@;
put 'fFBrMCRQb185KEtpVFhPSltkR3tKb2o0VF8mZF9RNzEoK0JnTCh9Xn5XTiZPbTlKb3lqQnx0WHYuSUwmam1BdnB2T3xpY09ENSskWVlvcU8zKUdWbndSbXRlbz5aP3V3YWxVcylwbGk7SEZOOmspNDdtKk4wKTkjd0lzdSFJeUBzezprK0xafD57PVEhLHhvdnp0ektKNSpNej1qayI+cndkaWdd'@;
put 'JF5vI0sybkopdVdVc3hDV2BFM3gpWFspU1sxKmJjSXNAKVQ1ZUtqQCpfe3EvTTJYT2JfLnQzV0BrMjclZktBWXVPfDoxe09Vc1Q4JEZKNmp9JGRRT2xhOjEzO1spaiZJcTF0Ki9BPitDND8kKio6N2NfWkgpcnptKGcwSUU9dWNpdltoQEBrcTguXzd+LDFjc3dbRC88enFCQSMzITFrISt7Pl53'@;
put 'MmU/bGNYJWhTJFVjREx3dU88Q3htaEwoc0IsWFpeP1U4SV1YVHk0ZnkhTj4hSTx1TnFSTzUpQi84aHBgLl4wfTJSbGVQbjBYLihENUU3eXpfa1tNO3RpI01OZ14mTD4vakteZ1J3QG11ajxEWWpiWDVtUzh8cCJ7KlI8Ul40RGZLSD13L1g3djQ2KT1HSltbTEp3RCZ4MnhycShoR31HRWd2TT8s'@;
put 'VjJZblddUSg8LmFWaGRJWjgxQzFvKktLSzF9ZHBDMTQhfllVc15mLmwuQEY+LmhwPyFCa3hebWZFfCgxLlBtdGgjfEdHZGBeNFJURWZITTRRIjBefGosejhRM340KS53TGI5Yi9QXUxvSG9MNHAwTXNWTEIyRyVJRjRtJHhwYm5PamhFQTByMl55VyY1UClbUz11eT1uKEVvR2xQfi42ZC98LCRM'@;
put 'KV53Qk5KalVheGF7NiY3Jmt4KC4sRVdlPFl6aEgmIXxAZ0Q+dzY1d3ZrMCUhdVB+OnkkTCleZkhJKXM0JF51di84RzRSUDN+eVdPaj40I0QsUU5Hb3xucW1TKG1NY249QWwlSlR1eTBXU1E8VnR3OEwsT1Y0cGE0TGB2Yz5LczMhP0heejFlRllzP3dQLj1lKS48bkw+bmUzN2RrUVBzPHpYJCtn'@;
put 'OHp6QW45WyI7eDI1Rkw7SmwsdHlNIyxee1ZMXnxyL2o+azsqUkRZNVlRTWt5Oy5CNDttKmdKT0dOJCltTUpOQ21CMWJga0chMTUpd2NSVU5LY2NNSEtOKmZZaik1WzYmMktnViUuOCIrQF04MmVWMSRsUiJQQG8yVDVbPnRyI3Vob0NxUUgrfVYpX0AyYzg0STtFbCQ3PEQ9Ild3IXFILkUzV0F9'@;
put 'X1lmbXQleVdwb3YzNGtSMmwmOltPJkgzMmtjZytxd3dXX0lbP1Y9PUUreDRXZnclZGhMM3c9PXhOR1ZNeCQ8fEdHVjhzRGJfMVlKaXxWVTdLcTQ4ViVHcT1MSG8kMF8iKV17SVIqTEo2a1UrM0s7ZzRmblQyQyZQRW45SltSXVZEUGg5QXlJPUUqRCU5WWhUbGB9MzEpRzZ8I2N4R04xXk9wIVZT'@;
put 'TEExRUpXMXtNVS41SHYlPENWTzgqdEZTek1FTUQ5VThFOWo8cis6IkdWdXpMOCFgUi5ATmFYVmwla3hMVlNEI25pMXpIUU84TyoqVGVvRj9WUDczIVEhREYuNyVfbElwbFVHfHJBYDBVa0Uub0plPXJIKWt1d0xCbkQwQ0xPTHR7S2orLnV6ODxHfDw4YF5AS0hvVzZ4Jj49KG1JITNHZ0J1Plc3'@;
put 'Mk5DTjZ1b2UiSTo0NClaS2EwL3JlQT4rc1grLEV8ZyNVc3RROGsuaUllTUZ8clJVLj5FSEJnMHU9MGw/Wm5keyRlI3t3VmdtRyZnKmJeMVtgXkF1P3cxV1NPazVpfndXRVhkcC93dW1NZH1VUHBCXT1gIzFrUlF+dUxEYTxpQW5KUE5DPlJUPVd4Ym9MZUFSWjYySD0pQjVqPCEyaU8jX0ohfGh7'@;
put 'LEszN3hMZ1NUelZYTURxcz02c2ska0N+Z091JmNBLC8qcSxOXl5eU1dCc0M2NW4jSzpGak16TEtLJngzSEVrVSRPbDM6fks0O3pMU18ueFkkeTxTd0ZXMH0jNGt2Vi4xeEV4N3VlXnVlX2Vbe3Jdan5wWSIldCo1OjpAa3ZwWkEmaGBKISVXR3BddUVYZy90eEdKTyNCUiskUlEzY2UjMHZTNDtq'@;
put 'RXM5JUMiJEtsaUZBVj1lckxoRXlGMEhJLytodUZ+Q3FkNDV+cmxHaHVSayl3KjwiMGxuUHNoQWhrbzkuKXgsZHQ0aWUraTshTTVzK2w0JDNSbDJ1WXVSeil4LEBkM2FbUU9PU0tXXVU7dGJlTzFNWlQmLFA5R31uRShFTiEpUXVkPz1ySmEidVcsP2xIZUVQSkk8OUpkQEkhayU0NTFdIVN3X1Ml'@;
put 'Y2pOb3U5TiM6RmN+N0VXSDg0MGdedGlAanBSTUE5cHlQSXBKTEN8RkVZb1tnSkg9RCNYYD1AS2ZSUjFqJmxnTzYiIyNiXiVvJDxONTUhVyF+Slh6cC91OkNXSn14YykkMU9AX0d6OD97fk1XdGxEWV9ANXRjLnNVSUlZTTdUV2V9ViYvTT5WNilgYiZAbCFgM2l3bTxAaEA4NGcxUEsqallhMHoh'@;
put 'eW9JOTE9RCZVaDRJeHlsWCEveTQiJm50V19ySVlfZmZffEE6Nlc0WENuakRgdGQ6KmNAd1M3a1MjNlYkMDAoeHtTeEVULz5NRCwqV0Bsa0UwPml4W0klZEtpJllOK0NiTWB8azowa2ElWm0keCs4VmJrbF5RInxWOlV5TWJSKXxYVko/d3xwI2Y9bVJ7VWlLIk1hdGt7VnkqSHFlNjVUVSMqb1Ey'@;
put 'dm49M1E9WyZRKEpyen1BaGshJXQycjxSQn4xfmc6LEFyLEdYUyszN11dP3tnVDRfKV0qfXRmYW1gQTV+PHk1LnpENnpDLiUkN1dvOzg2T1NecGdrektaajJPZWhyRkg0ZiomdF0jS11iQ3MxbSFyW0MvKVp1Y1ltdnFffFAobj90YFpdWnJzcj9uajlDTE8wYytDeEZgKWEqTF1raypfL2tvLypC'@;
put 'P0NZfGxfaGlyeXFLQWF5bT90aCIveTVLejAhZ24mKFNvLEU3TkhsWVU6fTchIUdwUnImQD9kOnB1XVU0TU8yIjsjfEhsWDJvT2xXen5JJTBvVm1+UDd9ZyREXVIzTyY1TDAsPSR2JlFHJnJXNnFnaGxnUyNxZ1M9ZjxmKXNVSD1NeUxaJnolcyxWVC5OXngmMGZqZUxPWXgrZzdiOylFTWpldE1e'@;
put 'PGQmYS84PUFWQEJgJDkma3J7dHFndD09VFcxTXc5cCU/dUhuJWFibTNGPEM2SFdvelBSb2ZRU2k5RCZhSURkd2BdUXEjQmVVPFE/UDgjfGFXezVdZUtSLl90Nz1FRVFsUUs9bXlTX3t6a3h0NFR9biE2LyF8RUpzfHJoQVhOaHBlNHthVzVpLyk6V1NoKXpDOzY0ZTN0SVkqN3tPZVpFdzFlOy9R'@;
put 'RTNmPDY0MFZOdmwhSihKd1E0PiEwSVtpRFheMkBBZHo1PUt1LGVKOCZFZGdUVWo4YD90OSU7NEAzIy4hZ1tWKCQ7OEBDfitnfDBmfXkleFAiOk5wajFjMj42JDtScF1POzBJUDIyTjp2PlUiPjhtOkRkNWExXnE5LHBhV0Q+TWc9ZDJzXk81YSRdKXF8YGshM08ua3xpOmBMNnQsXyNOOWhbWDVT'@;
put 'UnFKKDtNZ2whPy9eISRAOGp6Ny9KeDw7UiZMLGkwMGJkWmV0JSMwZiYwXnVlJCFsa2N4IWRxWjNYU1E5NDhMdTl7U1dgOEsrZ3Y8QDMpIWI/bXRGI0A8SFAvJCQ0W2hWO2ptbChFb20hfVdTKiFqejo9M0h7VjtNZ0tdOzV+IT8vKWJRaEo3KFMuJld3ZD1sd1FEa1N3Z243RVJiOmx3dzRPdGpC'@;
put 'byNyL1V6QkUmMks+by9FUVM9RF07cyVrPnwvTzQjel4ubi90Nzw4XiUyVVQ3MjVHYCxBJk1VTWwzUyJeJiVxVUArM3ZLcEZaaENuVDJmezRsaSwvVCFoWHMyRFQpR3smPVYyZjVXOyhXNjheZ35IPklMOkt7MiRQV2hMI29HIl9ebSwwb0FDcVl9cWdxaE9lZjpJYj9OOntoXiZ8WXtlTn1MOjlr'@;
put 'ZUhAPChDQU1aKTtRamAqay5eI1VdKyN5PkMhRyhEaUpvezd7ak9jJkNkY29kQDNFXVYkQGU5b2sjZndzdyN2Qnw8JkYia3t7bzhWJURMJUAvLnxwU2AmKzBIWWVFPUtWWkojTCVIUEpIaylifUhjKzlRSUhzYUdYfTYpQktHXyY8Ll9hdWxlanNJVywxcVF6PmZ8d3dfSHxpQlZpS2BdNVA8enku'@;
put 'eF5yIj1sQTRfan4uRm44P1g5a3skOlB4MSxKYHRpQlpwPkRLQXdrV2hkSTY1SENyZGtYITZpOk4qQFMlRmAlNFtIK0VfJm5ZcmkzL2x3d0Q1Xi8mVmJMNlU8Ql9BOFtPdTAzWyt9Ljo9V3tYe1RxZmVOSFgzLHFnO2BxcDEwW24vdygrS057eihjSyVsKj5NOzg/UFtVdWBuQ1owKy9HfDopZHlW'@;
put 'TFB2ZWw4Tn1oclZYXSkmOV8yezNUYTc9VTVpZ1FdZVddJGdnfXVQe3s5RS45PSRqa1d7UzBsN3xjW2VqeDxVVzlLWFU8WC5ALHtLezQyaSojSDBrI2p5bEZ9VyhuIilMeypYUGJ0THFzcj9mSGszYVNjTltPN2F2TCouIV1rXVdfVjAuRmBKPlVZMEV6OzI1fTNiXTY/fWdxYnp7Rl1aMWNtOU55'@;
put 'ZFB5NWd1VV0zYiw5KUk1b0twdzYjMGhiM3prYz4wTE9XfDoxPV5jP2V0e0w3bW1qdEhIWWR1RVImaiV6ZWU/fEg+VXw1TEIoWF5tPCpNRkRDPiFwNSM3VlRGeUZYRlhGW2woV0JWXjNEV0smbl9BKSJ2QitQdldXKzpJcmVLb0ddMHgxfHlCfHk6dHk8RiJhbFE8W1pNSC9Bd1ImW091RHA2QCVr'@;
put 'U0UxfW9KcSI3OTo8K01wQz5aMHhjOzJDVk1qXitXOlZoRH55MmxOSE1NJHQlZ0JbYmN7bz92anl2cUs+bD9UL2d8KVZrLj9AOkdTcU5ea2xXOmc3M306JnY6TFNeUFVhMz1nWjN6eE0xeGJPKFQpWzNyNiJ2UnYsVlI8PFdqJlZPUjhGOH50KXE4eEZfT2UiJXFIdSs2VyNTbGY0ZzVAOl9HZFdw'@;
put 'eyVwenRbbWVXSWo4YnpnJWJkLEh0VWRLcTM6ZyJXSU8uazxEayMoaiY7OjZPWDclPGAmPUIkMX5FMEFeayxqbVVgI3s9VWRyR3xyLCt1d0ZxSlI8XnZGaGd2OSk9bDhjR3BxNCpSSXcrQ3tXeFNbcUY6YyYoSkclRmtFcllWc1VxP2ZeWFFeUUxhImNDQGBaXTFaPD9lIjd8KT8rITxnOkxyWzEy'@;
put 'QCxgMkBZezYpO0NeeDx4V3lITmswbko5X0BLezksQnhET0M2Rmk0KiYxaX40LnJtNz49NlMhejA7KzEmTF8qYFtWYi9vWCQ/IWJ3UVhBPnJAZU9DX2huUWxeJWVGO2lUKCY3JlN9amolbTRxIylWejRObGtNeyZ6NG1SIVlHJVBlbnU2Y09UZFdrTXFaUFF2fitJdWV1Wi88azEyN0d3InUje2cm'@;
put 'WW04d08+YThaVClHP0Vgbz42UW5RbCU3PlN+cEImOUAralAhc1I9MWkiaD9dO3g1REAkdkl5d0ZhU2dDPmchMCo7cj9EL1J4WkFSfjBNT00pXktqTDNiSSZILF1tOkNiU3x2ezl4dXp8NmRxazI9K1hQXTYvPysyTCYiay8ucFh0PVYrUGkrNTtyJGpGdFdzWzFhY3w5TzdBPyRtPD1+KUZFdCsq'@;
put 'LzIxLixlaHFJX25GNixqfWFXWHZZWEYzYlFISFRON0V3ZXpvX3RrSnc5SFAkYHVYfD8raEAhWFN3Y1MjYG9APFVkKXhEdFQjMUsvbFQ0KiRJLiV6Um5FfF9qO3BmIUZkI18zNH0iV0E8bXcuT19zSUluW1AvWnJNQW9qWSMjbUJpMEs8XS9IaEpIJlpJJi5QPmRYcWI/MTsuQ2I5a1lFdE8xRWBu'@;
put 'ZVhxYkhsQEl6dUZFOiolV0hYKl5gJF00Mz5FbklRMUVCXShMYVFSeFNScHBASFR2aD85RG0lXlVBNFEha2c9alpSMkx2Tn5aXjtSPFJEYC5GemVHZFU0ezo6Oj88ISVeaTNfS1VyYjZoKCNWVFJ8Rj5AT0UkNkt2S0BmbShTRVowZ0dWXk8xVGtmO2RuQCwhI2JzQlErIXJeMDJnNTBSPjdgS2Rm'@;
put 'bzBmZW9TTjBLJGd7JCtpLGlHUCpIYihTZl88fmVySHxCci86ND5XbmcsMG9IbyRvSCFlTn1mdEZYJmQwcHBJKEBneG1SO3QwLFslSmdoc01hdk9dcDxTM20vOUlZSXl3PDw+I2t7bmc0dTZrS1l2QDs3Ty9FbSU/Z2c1NUdgeSpeJjs3djZ6Ij5DNXFTd2FtWF8kbClhN1pgU08oLlFnZm0+JTpm'@;
put 'MClhaWwzYy44fjdWeW9hWzphLldHUlc0L09oVWIpRF12Jnd6UVo2JVZ+bjpdUEw9cGF1ai56fE5gRUEsfnY9U1NGK2w1Yi5gMkBxd3QkZV5LZTdrSSEuRU85XlgjYGxPZTNaYzksSlhtNWx5SHxlRypNPjZBV2tsM1ZeWyNeazpBPkxqKjI1XTdoTV1ybDtQK2BRYGF9QytkfVQmNzwlfVFPSz0m'@;
put 'O1M2TWBsRTVGMD1yLHpVX0slZTNzV3NTUyR4OXtte01FL21sKlYkNT5WLE1ue3FTKzI3O3tCPyhJfTpnbkljWCRRWXQlRD9DL05Lfj9pMW57S3EzP2N5PiptZmg6ZmE3ODtsK3VKJmJLJGhMazUjJTAvKn4keV1ZVkZ4T2RLcW5XWFZXREYwRl5dZzFxQHUsWXI3S158VCxfQVN0R09MMTFPQ1dg'@;
put 'cUZyP0NGc1I2OyNNfFZbOzNRJWs1WmpPMzNxcVlCYi9kZTwyWllYa2k+dnI2NztmVEE7e0dkIjc+dCZ8IjpSIXdxMWgrTXVjViY8I0JNZT56UXU9YFZQfHh2d3h3O3wzc1JKIyQqcjNgMSJrLiovOE01OEllYzdeRmYhcGIjP29+NlQvby99VVZScypwR3lGfUhOSzplbGRbX3gza3NOfFZZWUAr'@;
put 'VFBIc31jd0poLHBrUjJXO0xyRDJARURPdnlsQksvUmR+eD83Zm9IaUdQZ01hKTg+Qk8qQHtLaHtSMDZwe3g0NS9eeHNtMSM7MHNtWkhmbSwvYXBKKGFjYyFWT1EhRT5+JVlTSHBHKEpKQE0/YT0mODFealsrMmkpdzpUIlgwLEBOYnlMN3BeQWVgNHB7N10yT08xWS9zUmpbS05TR157NER0bklO'@;
put 'R0VNcVRrVDVDdUUrdG83VFdRTldbOy49Rz0xKzVrWyR1MzAwTygxOSxMeT52TzlfO1Mian16Mn5PNmBTL31aWzQ+d1VyOWJYfUowJHZdflBKaCRuNlYhazlDbzU4MH1yN19tTnBLKV5NMVdROjJ0eTlPQGtudW1SSi4kMStuKktrJnRUOHhjS3VnQFQxN2w3akYuezQ8dyNse2VAKEZPUkhPbHE4'@;
put 'ezJXUypuR2FEWk9WL21nJm1RK1Npa3gwPHdxPFRiUkhPWzJzVEJVME9ScT9UO2c0Uz9UNmMyRj9kSHFaJXZlVXJzdm9+W0RbRSY7UDAlc2kqM2RtSXc+OV50SSY7V1B5fnQsRn1DYz5mYDtfJipvcFBxUFluUjIsOSlJYVtEI2JbV3s4UlpwS1kqaUslJVFWJFszSDd0OkFvMnhxL193e0YuOVJG'@;
put 'XzdSRmBVbksxI3k0WkpOT11MXTBGLCUqP1liRypSWCNHTylsKUFMaEIjOVhIRV1kVEhOTHEzWGRSX1h7az50YWxaJkxaJW1lOGswPnhtMmw5V15fUENQRihRXThyVTVbZX09bDxfVkYjc3lEQSMvOEw4LyM4Sjg6Zzo4bFlRMkRwazJoJDsqMz9XVElNQEI6QDoyOHhPU2Y8ZyFxL3AlP11sJG11'@;
put 'Wl5rcDltOTYwQm4iVX5HWlBZLElKNzBgP2gwZGE1X2FfTSRYOiVqTmZ1LklpKm1jIUE4SmRFLGd9OVc9azFlOEJoOyZKQEljUUN9PSZeeTs2KlIrWFFKMSxQIzklbylwMn1JUWNJNlVhYVRJIUQsU1RVcUk3WCNhXkR6cEpMVioycUtYcC88OyFEfkhLKT00bClwSlo3N1tPUVZ1bmhgJmVLeFJy'@;
put 'akJBK1tNRmxRNmh8ZVYxeV8pYyw4VmZMPVReNCZdVSZuc1VdMXMuVyNuOXsvVzMjcnZncG9qXVIlX04lRChVc21aUywhMCtjaSx5JVs3Yi9TZlZmJmU8Z1lLKDJaZmw+OzZ1VkdZeUFKY0xjLH1aclomUT99IVA1UjFqI0Rna2o2QkpjT2ZXSnVJL1t6WiwuPix6dFQlJkloOzY3TkRASShlUWJT'@;
put 'NURsM2FMTyssKXpdOF56MFFLTktEb30hcCMheih2RV9HQzZKRDt2WSZEaXgjVWx8b1YvZTR9OFA1MWB9P2g7fWcrLCJ8dWtsVG5WZWpgKkNEY2M1Oz5idD0jZ2ZUPFdoQkZXRW9gSzJ8Unp3UFFPe1d4d3VZLnU9eD9rQFgvajYpe15ueis4ZDc2Kkt8eDt8SCF6KEwzVy5AS1k6WU84YXpCSEdI'@;
put 'Nk9EeDxVRUJLMVQuKnZ+JS9ifnBHcC5VZ1FKJDBeWTpNZ3lUVyNoUj8hLjRsaSs7QXc8SXs8ayFVUiY8Rj9ZdkUlQFFyeltCM35wdXBGSCJTPWpjbUh4eWZFYmoqRjZ4aGV9KUd1KGdZP1cpR0cvajxMVl52MVtOXiQ6NShkPWZlTjN2ZFVBJUo0a29CJWFkMmZJfUZmamA3OkVvNSU3VChsYlRB'@;
put 'ZS9hentCODVIRSZWciFoWGQ3b0tUWl1POGgoQTpLTX5vLjpCKGpke2RDaEEhKUN4WDV6W0V8LD9FfCxMLloyJWtBPktXPEUyMSFuKH5bWCoxUnwsRm89VTVnR1Fhc2hEbyE2OUhMOGNwYnBpfjB2NSQ5SH5TN0o7OD9fb2B0cVdwRiRxP2Q2aHJbT3FrbTlFd1hyYzl0UXVqUi5fZUsrfTc4VHZo'@;
put 'N0o/UzMxczpEOHpWNDZ1MGFdNCY/YjR2dVVJOnQyKVFuOWU3YH1zPXE9UWR2IU57U150WkxrVXJuezxdVV5CfmNiI0UmOyw8bChEcjRqVXI6JSpzOUBTeT45KUlhW3MwMCR9MF0wTjMicnAwU2NLX3g3OnxZYTYlVzdkNjU8QWkiZEgwLnJXO21qfFhaNC53cD5qfCwlLHddbmQ8TjdLSTR5JkYu'@;
put 'TWYpb1ByNkNHOzZ7Snl1WjImRXZIJD88XUxAW2tUQ1d3OG5FUDREYCR3PS8yK1pSN0R2ayg6d21XJk9COXhzaDF7WSY9dlNESXoqPG92VUV3Mj5obGB8c0tAQjZgYSRac2BvTjY9bi5Gen15TyRlUFRPRU1xU3I7P09vL1d0Jj14Ij1oJEhIL1tfJnFPbiVPTWJlRmR7e1M9bk85P2BEPy9+QD4s'@;
put 'SG5xOUc9eW1hJFZifH1RY3E0a1VleTpjNV47Mm45SypjTU1uTllwN2lHTDY1YlJiOj1zP0k0cVokOzQwWmJENDpxa2hsPGUueDFINCJHRmB6LGp1RXU0ISo6YXksJGg0TmI7WVshNHcofGpkbmJ+NHwkSFlLcXQlZSF1JWVZK007Pn5oNkssfTpdX1VIblBgbyEvPV1CP09nbWI6MHUxdj1GcHJR'@;
put 'MGNndFFVK3YvODwhMmY7X2J+WnYhJTJyPyVbSEtxN25QMXtMciRpMXVKXkchU3VhQyZZTGRvIkcpa2V3cF5KeHpDMn5ZfUVwL0FLMSNQb0ZWUjpnMEZ4T156clE/XkZkay5KME0vdCksIlFmPi9YNmpMKCk2MWRSYSI5SFA2LEpRRDhqKnoqYSwsaTNdb0t2aFEjZUNqeWVrcWQ5R2khXV9IYyEl'@;
put 'LnssOn1mY0QpKzY5MX5WcG0qJjBmTWsxWDhfKHFPb0tzXT0zQlsucFlRMnJBMlNQVVcvYiFDP15HXVY2Yk5LOk4jQmhYa353K2slZU88KHZkYFZeWXdnJnk4OzVfaSVsSFBZKTU7Kn15SnkseS40c1AqQTNyPiJGZTw8LF0wNywjPjNHaiFoaU9kIWhnaWlqRn5DV28wQCo1OiZQKlE1VVpkZFhh'@;
put 'W3ZHYzNRTkBlXWxqKDBONnV5LjFHLzhHdyE1MGV6JkYwWkAjYDBkVDBTMEsvK2swZlBOKWkqJk1OYHRpdzJmOWZOT14kRU4uITttSjZZJWxPMTBWe18oUyxxY0lhcCpUcEV6OCYkRExlZ21PQktCKEdmbThVYy5kLzg8fiowOTB5THBQVFsiUntULyY8anFLMllAckJqflQmWTlAJnE8U2QpVm9q'@;
put 'TDhLY2k8Qjh6Vm9qNWFCc0ArdmQ7ey9qITdocl1SRTFkL05beThndFFdJkZteX1gQ2Y5Rz0zcFpvRm9FL1hEaXhdVXY9bFpsYi9sND50WHJycyx6LEFMU3RGYClkODR2SnJjJmdvImg9OVk8eS5eWmRgT0tUNlJYQi5UNT9eUkdvUyFNPTlORigrM2N6dlZIcURmNHI0YmRTaSUvUCZlIi45SDZg'@;
put 'cCFZWTV9W2w1X1ZhSWBLVW1udF0pTkgyWVJRO3pVWW1IcVdGeElVcTl2OSZRVSNacGF8L1cuKEs3KGVfU011ezRTa19rKG4zYHlFWW9jY25OVj1vVmZuMlV0ZHE/fFdBKFYrR0xXN258KSNaNDVjPG53WyU9TyU3NkwoQk1+TCU5VD47VCNCUX5xOXIiRT4+PWtEJGcqfVFjMFA0dyJqKm5BZmRt'@;
put 'dVRpS31yZz1zPiEvRTBgQ1dzT2pAcjY2fHJnTS8kUjZNJXlnWUlDdXlnelI8W2JnYTFDdntuWVQ1RF9nTTdLRV9AZyJeS1FqbEhPeCFIdEk/InAiLDklO3wjInYsdFkwMl9BZDEqeXhQR15AdmlWVkArOihjRXNtdlRDKClbR0lQaSVaOGlZMDZJeTE3eEA4LyVhWn1VKjg8JEpdM2VKKEt6cS9k'@;
put 'NDRSd31TVTZrNXlERmdyMlNlTTB4eE9IRCJ5MSJDT3hSN1Y9eiZFbi5iKWxlfl9gUntRPHh4bSx8PTJwfk4xRjB1XlFoUGRnPWV7bWhgeWFGVnolQClIcW5xQ3tvJixlazk8eTYzUVV4ZjE2dmRDUFtSayN9WmtgQEMmYnB1NFNoT15WN3dIVCZoaVspajhKV2hdaXxje0Y7QGAlYnwqfm5vaC4j'@;
put 'PkUiVD5uaHkmYmVOeDRdPH0/c1JQUGRLQl8qZ3VyM21bKn4lP311ViYrMXhuOSY/MDFuJlkvb3tbajpYYk1JKDxNQ0ksTz1nbltkXkZxaX5FXis9WXwwWmZ3QHZGTnxNRmxqUkNGK2lgMG1JLDx+WipRN0xJdn48Jj9QZHtgMltQVWx6S3VVMm1JJDsmayVVPVFfLlN9JCxYXVUlVFVoIWkxP2Z4'@;
put 'cDRAX1ZFJSlCUG0vXkskYnxje1o8cXkkP08qLjVvdDpAMSxPMVc7YjFtSXliOSxPMVtPcVBlMW1JO04+OUlqIlUpUSxkMCY1JWRdVEZTeFNKPWclOSopfUJ1dlEhIyFROHFyTiFfJk9yVndQVV0ofVZvST9mYkN5Q3Y5NVpDTmBKUHZfekVYM1FTZn1XP2M5SjpPV2tkW0kzfnBFSCl1cG4rS0lr'@;
put 'VTMzI0ZCZnpxY25iZlRFd25CTkIhVzpYZi8jR3RBbXVUS2tFOUs2UjNyI2ojNThjPW9db2tfQkY1QjAvKWcvWkNHPGg6aFU5U0t9YX50NDF9TEhQPVBXdUBRM2RKdHE9a1VCb2VNZUFHaHwiY3EyM25Cbk8/Ym40Rkt4dDlyZ154LnpITkJobH5vPkVVM3t5M2VHK08wVU8qMEhMfERAcSE/Nls9'@;
put 'WlMhR3R6WCh0Lkw8aFpJeGQjTTBFaXk7V0xVW1c9RnM/LEw7V1dBKEFmRFQvVEBhXUMrRWZOTVNDZFJwQmh4Iih9WGRbQ0QvTj5iUHY1UEZSIilNN29JTlopM3dBcXUzMTRFMmo+WmxjMUhzInFiLz9OL1YpM2JMNWJIajRzdS9CUGl3MXkpKmQmTm9DdEAwd2lPOUVgeV9IN0lRamEifFE/djY0'@;
put 'RzMvbjhIbGdJSXIpYD41IXhGeihLTzpvUip3XzVGU2VHdCNHSk4xV2ppMXd1R3svVzNTIXRKYkhxWHlYNnp1NHtYdkxBXlQzLFBVWHc/XjlbPnxlXUwoRih0aUNdWy4pVEZIQmUiRUt7ND1DaEUlX1hbJVQuKXBoakQ8Yyxoe0FXSDBuRGdMSGc1eElrVWppRSxZZ1VIanRvbkk3cUNgYGgrdV12'@;
put 'dmU0WWVSRn0+dG5OenBWYnQjVzskL046SCFHWGRnSk13PEJFIWM0a0hJRV1XL2FWKkg3cWlWQjcrbFU9Wj51fXliSWpjP2pUM0xEfEM4QTZJP0Q1NFd8IzF9QSQoWTQ9dl56Zk1DQj8sLmJ+RnEiVGh2R0w3V1IyKGU0a044dHtRUFB6RGtSNC5YOCtvSXV9X3w5c2NyREVwX014MV9xLGIwXzpp'@;
put 'SkZyelM/RkFSUS5BOTE0YnxWOE1idEpCUnRtL0wmWDhNMlNDWlhseCZhU2FPLyNHP2h8alFDaCJldVRoIjhILylIaylvc2lDXUxNRkczMGs9QlRKaUMqQm4mdmwsTUNAQlpVQWpxRixCTm10MzFeIzpoelhkYy5JWkIoaz9NYHldZXppJU1VTXRRYmhxJSNaJk1ea3szJDx3Qjt7OSVvJS84UHJj'@;
put 'LHkiKFo1LFh3PTt9R1toYU1UPyNdVU8laFJoSXNSM2wqfSVmXmwoWkZyO29vP3JXPXhsNz48PD14XypKVFY7SjxgQkc+S0F3YHRLIUt5OkZwdzFGImNLV0Y+LjF2dnY5VjVte14jek1vLk14UTQxQEJ1NV9mNGdsWFMqcylRe1RpSXM3WCx1Wz52JWM8MSxfWygqT0NSUUFZIzAlOEg3WX5zcUIm'@;
put 'IkZocTcvYTUpVlBpUXtafjVXREltRDtrRElURWwhZ21QbXxHfHB9T09VUmheRnB1QlEiKSt1RitgZjB8SVIwKEtdUUAhSX1VPXQ6VXE+OWRzJXB7ZFpgcT5Yd2w8ZmpKKWwsYTFrNXlPcGE6RiVQQzp+eTUiSTtbNCs+TV5aSSpSIj1sUGJgNnIvPTRaYUM2eHQmRmhoNjw7Ik5MUkBybDgwJXxN'@;
put 'QExqMUQ/ZytkUmIjR2lrdCFuZlkyYVVlZGA0T1gxSTZXIlgpNTd0fUd8ZFVqZVIsZlNEPyF6N20sVTY0dV0vQkRBRyx6bzhdai8pSmRASVU8cDJpIzhiW11URn1pUkhaV1ksI0kuYWw2IloiPj5aSlVSRFR1MkNxY35AcVRfZT55SjwmY24mcl0seCFqVFFBVXZuWypYSkU7RVNdVWt2UCNaI2w7'@;
put 'Nl9nSmJXT3ZfU3VTU090eHltaWJBbEwkcyMxKTBlaCRuRTZEV3ZVWGxaTDEvbzQzYkhmUiMqX3VOIm4qQyhRcl1VM0pRT3hlMFlbRXVYNFVaJCtNPlUiNXkzTWciNHxbQW5fPzFiL1tQbEgwKGx2T3oyQG9VXkd+QURXa1U4XkBlOF5AV1E0MVFlYDRYdiQpcHZ9SDtifDlkQH5ARWIiK2R+fHo0'@;
put 'ciRbfkAqSXEzLm4zM09hTGJTVCVSfTV2TE83Li96T0dZNl15a10uKF4rOmtOP2khUy9VcV5ZZW15LDJIVyJWKnl1TXIxVkliYjZbay45P1UxWSskbXlQSlh0M2JoR09sPnEheGgwa3p6YUR1QiZCdERweH1FeUdASTpOe2JKP1kyPyokZ3pHKi9VKFc/O1tXSVJjaU5FSS9SRz5Ib1pvSngkREoo'@;
put 'QTh1QUxpV1NQN3ZpWGMjayNtWXx2fVFKczQkZ1k4big8NEt0TFh2XSVeXz5vcFl8ZHZSPzdobi9rZyRpTDZVYXY6S2UyY1JieXJpbkt7QjhyMG1pVjBAQDJ1ZV19W1N5RlJOQzZCODZ7WDRrU1RPTTIyai9GeW50UV0xcUNgJXxUPFkqK2ZndTpvanlqYm1OOFlTNX1XRT8iSz43dT1VRSVbVyZn'@;
put 'OCRQSjBnYnpyelZtdENgMTtoXiosM08/d3tLPVV0L2NSQHU5V2V+eypKdTZVU0cpOG5CaE08YkRGZSNlRXspbGMlKHxMKGFuTE1tZ19qfk99KmE0LHk4S1RCdE9GdF0/eHImQmojUCx+XkAmY0BgXypzNX1DanNvaDYlN0ovYUpFR15QVWx6cTQucD48NWlhKX1JZ10rOGEiN0loRWxSY2V0d1hi'@;
put 'XjNOSjpWdztoMHI/bHBvaEsveUo6LGRtUkZUNjUqKTJvUTxIbT91VDN2VloqUjtzOGp6WSpSTisrJWZmMX52Oj8qY0FAPFlgb0tfaU9nY0JNY2tGYVI9WVZMY3UlczUuRHEwbCV+XjpvIWRbYTZQb3sjInIkKWkvRDJqWEJfZmEkNE5xdG8mcTVlK28pRlExc04+T3hKWE5FLjt8bkRdRXwhaUpP'@;
put 'dy4sSD5dPmJ5fVU/TyRvREZaRnowNzAhSnhEekskO3VDWVZwZGdZWGNwPUUhSTxGKVdeYm1jTGtLVlNaYzEvPT5ZI01DPkJ6SiNxeiUqUGFHZiZWaXlfaU0rNyFTdUcxfkpiQT5vcElnYTV1NGg5RyYuZ1o+dFAweVJndWshNkt9cjU+RmJ6fU98S11GfFBzS2xFNipyVnFmMitdWEBIMSQpI01R'@;
put 'ZVU1Iz1EX2wpSUY5PTxuaHB9Njx6T1MzeysiYGRgYCQzUkY5QUtqdmFUeHJaPEFufG17bV84JToudEUsRVNRX3tqciEyal51Onl8IW5ma2YwRyY4RmRrI3lHNnAsbT9JP3x4d1F6XWNfLiVqMGpfZjIoalJIZmFFVkNiaT1SSGZhRWU0bEU2VDpGYSRKI2dEU3ksfn5VVkQ8fSp9QXFCJkI+Ql9B'@;
put 'cUImdUpfUywsQW44ZWtgKlUiKE97b0x0elsqdUIpbmhqXkdSKV1uW3dHNCRYMi85fVZYP1Q6IiM+YnkobltmVVhgKSpFfE1fSSFKNSJgWiswU3Q8IlliKzBTdCp0KXFRVjR1cUlwbGRsc2NCI2hlT09MdUlTKG1eSDhZXUNSIVZPUUBvSTZXIlI5cUZ6OSpQbXR4JCxAfls/Xj4hMENkJlksZiRV'@;
put 'OTw/dFppPkxDbT42dCI7QU92fXZudjEpZ2lvUWYxNGcxUGZQbmNCX1A9PFZ8TTFGfXYxb3pCaWxnWGNQaUI8WjF1LzgjIUA9VjAwRG51b0B0Pnk3a0N9SGtbX0BYRSU0OVo+Pn5rc25Ua2w+TT1pMVZnJCxoZz80ZDgob0oxZmVMTzFxW21AezcwYGhtLnRCW3YqOmBLeHFUKn4mem97Wm9IKT4i'@;
put 'P2xQZC56Tiw6d2psNyNrS15IMGUlJTsyUG45dGVVdSZ3P10yZCteKC46XzdvV3EvdXRoWSpVRkc+MUp0S2VMVi5mQz8hbmZRKmIwU31Ybj5iZk5dJEV9eU1HeHloYnAze05JZVt9JmskWzBteyFDajpuOVYzPGd2aS56bVF3U0lqO0ZkWDExRmpaXnEjWj1OTXtXKS9zeUNxI3p2QEJdMklLR2po'@;
put 'Z1F4bUBCPH1yYDhBXy9zQEMyISZuJFt5T2VHY19aUHN5Kkx7ZmhXLlloSDA2STplPnk6cC4jUCNoVFUxXWM0ZjNaVSkrY3cxMXQucVYyaXZ5NGQvWFtNNn1Wak9hfmshNFp8fGZ2IlRiOiM2K2k5SXFrOUlXd2FsPDwuMS9VVW1iOWRyMEU7aiJ2NHRCSnF8OmtdVUkvW0dEeCMzd3R0cF44Vj5+'@;
put 'JGZmOTtHbnNnaVFMNkNJYCFAJjVxLm0hKE1pUWNQODdUS2JjQ18hJXYqOzMuY0ZgLytYQ14uPUZpZlZQcml5I0YwaCZdbEV0L3pIQVBdTkJSL2k6d1dve1s9OkUofnJ1Jk03IUVBI0N2L2cxbUlXPT01VFRRd0dFTHQsWndQNVc3fms9WUY0XkwuZF0wMCpHMGhAdntJdGNCdl15d1FgQXNPTzlx'@;
put 'c1M1JEQjMiEqLCFBZWhHT1FkQTFrc3Y3ZDZ8JUt7V09nYyk0S2UvMF1QK0pIPmt8e1tLPHQjdz5DITU0VjFEI3c/XnwrPFpddXt4fmtfSCpLOzE3Y3tELHpEbmV+b2N4Ol9dYy96aFBdMW05Q1d7VnRaaGF8TSpOYUdEI3tMYlNQcyIvS0xKb2M0bDRUYWIpOno1QnhiUkBfVUEjSk9CI1cle2Mi'@;
put 'VzlAMi9AQnlQbjkiaFIme2NBUFhQTUV0UGQ0MlZOJV1hcSt+PlchOF1DYlhIT2FXIXcqXUEjTXElRUdaRENHfEg7ZmwlMXhLdS4iV007b0xDfUQxWm9PKFlTd1p4RF5pbTFaVnlrLEQjYDE/NnNQZyV+SlA0bDNNZyNSflBOSStJQyFfY2VDYXYydWVtdTJAQG11QCJbIjxPJVFUejBuQ3U/dExJ'@;
put 'Ikc1Tj9UQyludHp0QGZXcGhySkB5OlhiVDMvVmJTZCNpRkd5Szo5ZUpSNShOcHF8Wj1meEU1Y0xLTU81XSQobi51dmp6Qjg2QU5aRGJiaE9fQzg2fk1aN0IhWyRyZ3UwPSYzOi8iYFoyWk5ua3R6dGZZKE8iNkw9WGpddlFIVFQya2V2SU9sem5STT4xbF9uTUwzKkc2WngoPSJabkpxQktCJC89'@;
put 'TlopdmpUbkxDSTsyc2FhR2pqOzUlPnZSL05ycmdhcV1VfEddKCNuMmtldnVNSlMrcm5jd0A4M3ZqZ01ePENGT2RDVmUxYnZbTzU3JUgmPzFIPytHVzl2QXldIVhSVjwkV0w7MGZMQEFuPHImYmVteGA4WTYyV1kwL18pWW44RWhCUnc3JWtvVDFBT29vS0MpdnI/K3UrfFYseVg+OWtNMG03N3Nd'@;
put 'eERwZ2IzOURTSm46RXlNNlBvdDFJQERxV1FJYyV2Y2lIU0VaTU12NTs9fGoiLmE6RDIjQTZbdlp0V3ZEaS4mZVp7Q3IvJj59UzIqO2IxUn5BKVVmKTV8NW05JDEjaltgO317PHZFWGQ5WE9VYzlYcHEqLnxzYypgfG9ZOWhyKnFWfTBdUGh6c2xdW0s/XVUkSDBCSUY5dWZARHxyMlRPXUwmQE9L'@;
put 'fX5jO1l+VDtiSFQ7eFNKeG00Y21tXncwS2lOLEpPSG5gQnhrKzArMCM7U2xhWyFtekMrbEpwakBHKmdea20lVm5HW1drZDs8M1UhbnArO2E7el1jI303SS9XSEkmTVpHayk1OFQqUlJOXUw5UXEvRnZpekt4V3FYYV01TixkU2FZZSxEdWJ+NEVsP35iLExKW0o4cjVlRkpTIUtfLGd6ckd7LHBL'@;
put 'NGNaYHB1Lj1QQGN1P35QakNmKkVKW2MhOENBI2lRP04weloraVtdYFpwei9AT0c7NGxRZklwfUkzQlg+eilZVjZSVXMvcG04cmVKbF19PytbM0JwUVhsYzA2MUYqVjh6KC42OThiL2F7bDolY1ksPUJNUG4oNSwxPVg6WSJZU3dqenRiZ0IjUiM1fUIvPFY7Im5CYkRiMFNjMl04Tk9eT0FVQUtA'@;
put 'TzEjeCMxVz1TIzVuVkJOW1ckKzxDWk8qMHAqJGlUN3RhfFhYc1pOVWFNXis9T3pVNjQkfFo0MVZQMjFNZXJHQnp7ND99emFTUVU8REdnV0hpdTRTPml1dTwpPDk3LmclcWRPdlohN3h6bXVIQDJ+RV9OeEN+WSxNK10iQ3F6RDsmVClaR151PWxYKHt8P2JGczR5InxXVW5UeUpKPmV+KnlUMyNn'@;
put 'aTlaZH55VmJlWzBaaXY5YEpIb1poOFZhaDhSNncrKmZhMVlTU1YxTEIoMD92NkxlUCJgW1peX2hdN0AlW0JETiFPY2BAUWE0QmokRitBdnhTQ15BbGM7e1c2MjAqe1JtTWh6fkVfcXlXJGlIdHZGfltsO21bZTNheVU3P3hJXXpnPmRddFFVZl00L3Jue0FjRncvSUMuQnRCQUFBOF9FQURYckN9'@;
put 'RSpNZWN5IjJpI10pQ0BBRHZiLEVhPU5SYlNAMk9xdWh4NkZBQUFBQUFBQUVBOTwhM0ZwSXJuRSYuWS9uO2RkeVgyTXczYj5JOyg1P21tYlhBUl9BYkglX2xGX1pGLG1FY1pfO0lgSENHSUJIVyl8L1M8bFRueVBDbyM2cVc8K1c2Kl9dVkslMXZ+WjFSQkoiZ09Ce29yOEl5VDBpI05iKWZHRy4x'@;
put 'MnZDIjpLN30sIUohcnBlLiw4JE8/fXo7RlJ7amghYlJTT09wfDklViV9SVh8dz8lWC50cGVoOEtFcGMkSC9gcUA3Jl0uc0ZHdyM/eSlWSFtNUSRbZWRpb21IbisqZ1hZPkozV3sxOWVQYVI9NzM/az9FSEpEPmd3eztXSFpFUiw7R1pwe3VhVCplVnBrfEppQl1PIkVHV3ppayl3NWohZ31LZCxt'@;
put 'eDhRNl9kWWY3UzN0VGR5ZnJ6O0okejA4NkZ3cCsyPGtYO3w3KmhmZ211eiFaNE9PRVdieTZ+cmYlfklMbjNXVjMuMzczNm55fkI5W1kzQDhENX5zckA9MnNGKWBMT0A+NS5CLHFaOFNERkcwXmYjOkJMYzphJEY2XUxaQHl1TlBDb3Q7ZE8sWiVZLFFhPiJoTlMpPEptLjMpeCVxaGNmckImZjo+'@;
put 'Q110MEJEJV5eTjYycnNgXm8pZDZJWHFqWCoqQUVVRWFTOjFdV1ovTH51dXFvMissOX1efjApMG85TntvRGJiazRXY2xYZ0xXX2p6QGJkPHM6K0tnKDxsbzdyLllpPTN7SHRjKSU4Z19DTn5UWFtNMFlLeDM5fCZRdV0wWFtmc2ZIKkRqRUdDcSljRDskfkdKcEUkUSlnOUZrIV9eWndQLGJoRjx7'@;
put 'PUZ2aUsiT3I3VHNSVHwqTkVrKnkzUjBqSjtCZyIucXo3dmlIXjpKemA6UFBlNy81ZHomNlN5U102M05tY3xRc28sKmxhPzFre2F8Kl1wOTdQPiE8LD4qJlkiSzZDaEA7RF5CSlZ2PG5BPm9MU1s7TF5NTWZZc1QuanVsKk9tZUJqOnlxRWNfbigrNGJAJnE5bW9GRCx5L3tLdCtdPUBPekpjRWFs'@;
put 'YnVjN1dFMExqXikyUHhzQi54W3pjanwuMTs5el5EWF55LyhZMjdFQyt7P1t8OnlidyI4UWQ+amg9cmJdJEhbRV9sVVBjPCJqVFVlMVJ6YGNuajt7W3x7P2t+SEBhcm0zeD0jK0d7eENZMyI8XiUkVUVMLklCaF9TaD03TDcpKXhSa2RDaTk6akZ8c35EM0BMP2hhdzAvdkJ6MEd1MVVAJHArLndQ'@;
put 'LjVPLmozbk8we0k7eEEkVWJNcz0ueXBTeC8mOmEyMH5kN3dAKmhYTyVbfi4yYzdWZ2wkdV1YX0BaYyk9W29XNyQ2VERdXXw9NzohWUJ8OjJ6c3VqL2hsbT0mN0VhdGluQ3UsOntTSldkN2guSi5dIS5dIX1BckBaSjxGRGJdRzd3P19oL34zPHk0JEA8YUl0PntCUUJCWzE1MnVveW97X1MrQnRf'@;
put 'JkxCVDYoM3treUYzdWI2c1svaUFqaldCWmg+ITchNTo4V2xHYkd5YmQ1aW8xRShYeHo8aEl9N1ddL2Z5RVFodFYyKSF6O3NXOTx6YFYqKC84ZjhfQ2ZmeFMzYDs7cihrQzl0QEspSF8rbWk2ZGhTKHlhMFddYmk9MlIxOStCcDYhSXg3N18rcFFifkwmT2MzYlN0bnFWRD5Fd3JdcDd4fVUyUWRD'@;
put 'QmN1MEByJHlYPF9vYmkhfk5lNHQ5bDQuKmFFWzlmSUJLSFVTWkwrIShUYGM7NVVyWCk6dlB0OUtLZTt0TyFNSyE0bHU1XUJ6NmdyKF97N2NnIjp7cShVRFo3dXQqKTt6MC43WU00OGojcVdmeEJ1KFc7ellxSXVWSzMqSFkkXWtiV2YxQH03InUpcHgpS3RickZpc1dXU1JFalM3dlBZcGAkdCI/'@;
put 'K0JgcHBAJlIyb0N6YUBsMUt0R3wqUys4WHkvLGVRfiJYJkwoZmUyOipyS0VzKixoYmwmc0ZxezlNPE9mWHVTfF5uXkNSSUEhbX54YiU3RWQ1VE03VihWZkh0O2VkPi4xOlNqak15KHQqaztBUUBSQk1VY2E7Yi9VIyhUJVBhZXRkKWFQJWpdTjpDUXk6NCM6KzlHciNNWmJ8P0pQaUsjOmJHWnE4'@;
put 'Jig9dmV8OGtYXnVSfXh1U1plV2M7YTkqIyk2YFsvY18lVUU+W0hBPlNHM1g5Jjp1RzRsW3YsTHtsMDwoMk9pQ05pOUtdRU9xckk6VG1rZjdkSWwxWm1NZjA5b3JvQXlPKExPVnBIYkdhZW4maXl3LDp9JClKU0czPltzOXJwYDR9cncxfn5HUj0pSFg6Yl9TP3VgbnsvYXA6UUA2dHBLR0FVKTth'@;
put 'eEdiMzdEOEtRdSE8a0p7NTIrJkE8ZD1sM1l6PT90QmcibEs/SnU1W2h9JnxpYjtpTUMvVH5+aGN6LmdNZmZdVUZqKkdub2N4b3tjfTptTVdMV0g/QnhMU3RiTVN4M1l0cDVlfnQwPDBWUWR0PVFsLjRFOERqSXB1VzJ4NDw+Q2pOaGZ5P2RmM1p8e0MlO0xpMmxFczs7YSNaLlF3JU5wLiEqKEMh'@;
put 'czY+eSUwdCh0V1h5UzJIUWNpU2BAP0RQcTRPK3VLIXZNW0QhSkpBPEM9bkUoSUV7TSEob3hxR2RDfkhZYilYYCJMayF3OGIwO2c+eV0heWp8RkdLRG5HSiR3S1lsOnUsdSwzIWB8JUEwTmpePW0wTmlNZW0kOVBeWnkuZWl1VHRuYWxZPyRCQ2cwWDdoVCs/a2hiPyVYLjVaMF9VVjtAbzA5LlUy'@;
put 'SCtnOkttJVA4NjtnPmdvYlY0aGdoL1lWaihOR209JTg+K1U+eDFRWklreTk+RmVMMU59UWx2InJkeiMzOi48ZFZMTCtYR31LIUl5WnJ1NlBoZ2wyKkZ+ZnU8fWgsIytnd0U+JEA6RWQ1cnI+RChQanJBOUc/KkV6MC8yNCNmVlhyT0xDLmNuIWZeTHg+JXMoTzU1ZmlaNXdufXIhK3JbSUshQyQ0'@;
put 'T2hLXURkOjx0N3R6ISJfaio5MFk+Ljk9Yl1VWDFjfDwrUj00dlNFPnlKY01+dXYvTyJsZil1SmdLSjs1JF9ITXFHcGxVJUtQKkBNWE9gS20xVD1taUZ4OzVYVmN2XV0pTX5xSj8zdm1AYCQ8NExDd0h9MCwlK0ciPH1lQGM/XlhIKXpRKWl9MFBVMSEqejgyZENJNls5fi4jakpkMD5WP2Q1PEQj'@;
put 'X0diQzQsOzBtfXxFREZaPilQPzJKVDw3WDE1Pz5oI19FbTgyfWlsfVBGVVBgWihgQkJQYnRXM3ltV1VWdzp8UUJOL1UqNmV7Jkd9Myk2U1BBTG1VZ1N2MlVleixuX3hEaF98eCFgcH4mI15BW3RSZkIqOz4qTXE2UVhXSE91LGtbIkVjW2N0N2BOeUNSZ3c5NjA4Yk17LjlhXiEkQVVuQzFPLisk'@;
put 'U0o1amMlOTwjMn4oR1gsMHkvK11nRUBvOGFfUDN2NH4hMkM+IjZfOUM7KUpWclNJPnR5S3tbO1tHXUtZfiNZJnF2S15dYlp1Z1g2KEYlUDZrZGUxXU0kVVpdYFlvIXFmNGYoUjEmLkozRGZHNmIhdW1dVihmdigue3pNMmo8Q1I5fH4hRV9jazU2V1FMSltNRTkqRWdfYVhYPHJZS1IkVStHM1dC'@;
put 'QihwSWVaKiVyb0NvJEV8QHZ+PDVtZT1OLHp3aE93QzR8al4yNUJfKiMwelF0MzNVMnosVFtJKildRCFQSUlsTil7diVJLDNKK2Eldj54SjlUeUthfDsxLkNdYVM0d3xVaXUmYTB6eURicm5ualJ3akFaKUlRMG1gJkpielRFJX1ucEJJL0NDezxwL3NRKlVEfCNhN31tSGtTTEB5aWB7XXcvUGpy'@;
put 'WE1iUDNHblhZeD4qQnQvfF9FTEJpUn5uMXQpKiY5Z0F8Ojk9MnpoT08hXkp7aVtmRz8/elh0SnZ1OkllaVJqPHsiQDpyO1IvVUtxZDptKzFnKSg+fH1SYmk8bHluNmFTaVN9U2ZqfHpZK0dwW05KYSk9WiFofjp7YVU7VztAUC5DT3N5ZjpuIV49OGs1bXpGI0hGPksyKWtPVHRkcnR9ZSRvMmZa'@;
put 'eFFVSTx6UEFFQjM5X3tWTD5icEd2KVBYQl4rVWUuanhhOk5KSjBzNG5xTFE2PDlXcC9NVk5Nemg6MVZJREtsdHpSfj9eSUhQPHxsR2doPltnTVJYKX0xWnxIcnt+RH1yYUtvOzJAO0okRldEe2wiIz9kYCU9eTFaPmdZdzFiPWZffXBubSRXSWlmeFZlbVJgbHs7IkJIeG88NTJ7WzEsRHouXXpX'@;
put 'ISVnb3IzKEdMTE5qVHx6KERWcCxHM3NkS0V3bi9lTyQ0eHwrXjA6IjVZRzF0Qys5XTdHMWdNbStmTTVzeUx5YVNoaSE6WW9qZmhXMmFAbE83NVtIcGg1ei5FXzowb1BhKElwe35qSHElZ2ZPUHQuR1o2YHFsdnBxaTNKb3RKdSNBKChyfHFQJDNFN3F6fS4yRjdwVGolTmU5W0k4I0hrYSMhbUcv'@;
put 'fk9mfXc6NilVPz0vUG8rMUNnLnhiPGhoNSJfTm46UnZZWD97Szk6Q2JbWGFOMk4rOWhmZiNoYihBfCVYP0NMPlcmKFs8MyhRQn5kOFNONTY8UXRWTzNfZjg8PnleNktVZGF6JGF1MzpjZUphKHMhTmpjKDNuY1N+d1FBWUpsX0pyU3tLLFs6M3BLRUUuZ05QUT8odkBlQV1sP2VnWDg2MmJOUl5S'@;
put 'dHRjcGN0OShRbWBpU1J5WDBPSmRGZlsyd084eCJEdVsyNFBPW1QzfHI7bShtKzN9RGNTW3pebVRqT1NXdVdGXS5QNkwsL3ddQzYhOXlbSHJLY29QTUFNQyRfOmtJJSV8TF9ReTBac0EzbzJ2S095aXMhP29mOGlqJV5yIXBdY1NNZEx7S0A0TiIzNE82VnhPVlV7OSQwRVpqUnlydzdNKG1ydGky'@;
put 'TDJkdEJdKUVianF1LjV6Tz9Ofkw1XXg/Nlk+Vk5qciZVY3t6WFhzR29vYV4ibDA3OlFLPjw3dDRpcz1nV1MxLyV5LHk+dSw8Uyh+PVR8PVgjWWs2SjJ5Xm84Jkxmb3BsI0pxSSJhT3V4Xl9bblp8fDViNV5XZF1AM0doPSZyMVRsNXZCekxMVzdLdjZxLyl4Sj9AcFBvbSg6I2BiImJjZHBzMm0v'@;
put 'e113V3t4cWRQV1JyQnFFJWRlJGByI350SVlWNEVDZDg0SSh1RH1xbUVnbFVWKHZkNi5GWUt5bSkpeyo/c0klQWFeRnlKfW1sMWxSOlYvP28jRSZGKDVEd3lmNlo3fnIrNG9gclMsXXhgZ3gqKUtvR19aZmlUcXAjUnFELGpOdWt2Vy46YFoqXk9KL0FeUFlxJXBCMCFWWTkkQU9xKl9pe19jN1km'@;
put 'RzJuLy46YTNTdlJKPXNiczhUN0JeQGt5KDdPPFpjVFs2QjAjRyk0WjFRTnhNUUclIV8rSD1mSVtdLFtqLGBPTTpbLHdIQD11UHshNytEYXQ5X1gsOTkyOUA4XlpwVF5fX24/NmFDdmJDIWllX1I4RCYhPXxkaUo5Mm1pcypDWVVkXzVbVTVaZVc6QGcrUmc7IlBgOmZoblVLZmdkSkVMWlthKioo'@;
put 'RyJ6Lj9DL3pLQUpHUzxhaDFuVF10PnU6RT48S2FWOjFfIi9iTV55ekY2V3o0P1Y4LHJ+VUxkMGBJUDQzL2ojdktjTlJUTkx6ZH11OXExQlpZbWNpfUc+WnBpMDlhYVVoSHBuejAoKjp3PDBLWHQ/Uy5KOWAsQUNvTkpmfDd+RUsyOGklLzgyMTRYcjdqdHMsJWxdd1FnI1RzNkFNaWE8RHhHWWtW'@;
put 'SylKeDkhe2dtdVMoQmBedyx1dWwpXW1BclhbbCNdJnYwdWkzc2QyJk9fNW9aaENzMiN1dSJiKVJCYkZac0MyUDp4UzhMclQ7dnElaVshPCF1b1cudGUrYEBQPnVbP3xHNXY1JT8mOE5sI3Y1Y3owKUtEPmJ2fUA4fDRYVGxRdSN4UEA8byJxPEUlYz4rLnVTcXxpYitLVyhkREYqbnFbXkRPLCxx'@;
put 'Sz9fW2N4WnNERVQufSFBNEk4fFBFVThoYnpoXlUvdXRuVnUlYVQ/cDNtWlkmMyN6RUxBVCYzZTx5Kz9LXl0rQ0t4ezpOeixhfl8kbDJ4NHszSWJTcn4zTTFXRnB1RGZyMipzTkpVeGNTRDFwPytmJGI7L1kvPzZvei9pa19DQjpmKl9WOEdgejRbISpdP25eQEFRLzleLzJyX3RCekskMGo/ckNL'@;
put 'aX4uaHV6MCw6TXo9WG9NbyQ4PkMiTH46UltfN0VJMDtqQjN4fllZL1cuRGguXWE0fF40RmVlSUdNZmMqI1ZbYXpEaWV5UmRKcXxjdz9jKnt6TjExTjlwc0JgXSFAQExaei4qe25CfnR8I2p6Tzo1XkUhajc3Rlh5MltOP20qYUFofEI8QSJ3fVpWbU1BVWt9P0lgSGRjcjcvSClSWlQ2S1thX1A7'@;
put 'VGFNc14ufC44IlJ0R09qcmopXTh0ejA5RENVW3hbdyNtWnEkXiZ2V11wOHp0c1t2Vi40MmkzWixQUjVsSkNjKDJsXWlXc2lTeShDL3xLTCowO3RuRzFKSklRNy9GQzhnfFIxXi5mW3B+Wnp2U1olKnFAY0FFcltYTHlSMy5RSClhelgyanAlWE1TRkFxTHAjaVZ9MygvIU5OTn0iKnI6Q1NTR3lI'@;
put 'LjB3PEVpNk9heVtBMCRsWiQuYDxQZ0FmZ3RaTClqaSJoSWBEPXVKcjYlfVIiK1o0XnM4UnJ+JHlGNHtMU3tBZSk0ek9SPnBqJFNHYCs1WyU6Z3w5X2g+QUNKdnE6YDAuLGo+SV1WTXU0al1kfCk+OVJSSVBpeCo8Kn5dPUl4Qz88VTBHNHwxSU9CYS4rJH1abGVVSGBbcG5yI3lAJFh9LmxPSHkl'@;
put 'ZV9YbCp8NjZnaipSaVEqQz0jaFowRGJGRWlxcitzdTNAZl8xaFY2YFU9SGw3V3lJIWZFZEkhTVY8My94RixiOFBET1JoblJufVs6bCw5PV0uW3xSdTpSPj1FbjFBeT5GOjVtOGo1MkgoQ2gyZSpGanBuZFpAe2JgRU1xPU9rX0dFUGN4THRAaXA0RCFfYCpDLF1vdys2fCozKUdlKjZTbXRNOUE0'@;
put 'WVdNUSpWOjxCSTZ3Mj4veFd0NCN3eG1eeWR1WjA4fmFSTUlHKXcqdWx3czE2aCl4OnMyeH4jMDRVYlJNN3dgaV0jc3oxNDRsLlhSXnVlITFXeVcxcFNTaS9de3E+dG4oIklhcjxLcztPNSYvVix7NlhkRi5JSlN5ODxDZm5uJWJ7a31oJi5SYXlsSntXOUU4c0JqMUhEUzopZX1EM2Q1R2grOkJr'@;
put 'L0JSNVtaaEtTdnJARE48KD9fOkRrfFY6djdfUXQ+W1NlOGpEQWJgOFhBXUd+OERde2okL2M/YjB1fkB4VW4hTWAyPiZpWiRrR3FrVGo2Un0rLltdWV9XWmRPayVWfSVDITR6UmdYcldCUyo2QGl9LilKfV5aInYoM0tWbSE4VFs2REZBd01+SGtiUVl0az50MDtNbD8xTCw/fV4ufkVkS3N3NWFl'@;
put 'S3w5OlF2OH0ya351Ijt6T0YxXyJBMU5ySj4uJiJqeC4kNz5uQW52SHFwQHdVbEVuM3BUJD57TktSInR+aHRvJFFQQSxnNTlxcn11Tl4/QUtzSSF7UWJ6cl5RRiI+fC9yWXMiUS81N1FMeDY/KVElaUxwYVN3QiMqUDs6NTFyWikqIWhRc2dhaFozLyxkYE9bQENBJmVOTywjTng0fEssOiZ9S25C'@;
put 'Y3NWSUl7fmghdV9BcChXfDUqS3osNSZ7JjkoSlF4VUFgUW55Tk4qbGl3bnswXlMyQG8oNjc9ZkhjWyQpZH49MmhJZmg5b2c3ZHJ3RWVaTGhuaDV6I2dpYUg+WjFZWjt2THhRV3QwL3FadyZMVllEaWglMVIsNmVia15pbGI+VWRYLzVxeVVYb1krXzQ+OGExTz1ndkVPUnQ7Mm0mTUYqUERMUDtl'@;
put 'd3E3cm1MPyhaREV3WzxkZT9RV0VKYDxeSXIzYyxhQEtIZmtxYW83TXkqJVpaREdMdDBCfmxXRE1AbD9jIWkiTXdieT5RX3lObnR4QGFFYSp5UXguRD90byhMJCl8NjpVWW1MSj1MI01MZyQ8SyJCQkJ5WjtiIWw4YVRCVSpDJCUje2hPaFlPPyE6SDlLXl95WERJSkdldiNpWXhnaS8mdC4jc35g'@;
put 'In0kWUk7Pm5vRS5LSiRDdlEqXmclYzQoNkpGb05VKSthKlJaNyF0TXhPczErdX1dU1V7LG5OZytMRllLM3EjeTVBMnlqPVNxJHptM04lbTQ6N3puWDkjVzlMJFBRTU0vbDAmWVMoL1d+fW9qYDd4Q20ubk9rT3wiQzcwfUJaOnxXWHlPazZ0VHhXS0wrenlDNHsrPW5dZDBRTz1wMTpFaiVPWTE2'@;
put 'P11XelBfVTlxTktUMiRpaU48OCJROyEmK0ZweGB6ekRlMWh5Z1RtWylWIyp4b3JOVj5yVmBdZFZjYGtCW2wvNjBIfFtiUkwmeSx8K3UhcmVbJkFvaHUzNF9OYTY/RE46OVAhXmptSkpHZXJHO2tqLkNYNmk6PkVJKEhRSVoxSChaMSRvfn56R3VhPkF0KkZFZjVScDhDJWBKbSIoK1RZMlo2PkV0'@;
put 'JCxyVHxYVHlZYVpjZUYqWXQkdjZPYlM2TyRkenB6YnJ7ZUU+R0dKV3lDeXU4WUd+MVNyOVIqVTZXWlhfZ3FdbzJLLHo+b3d9NW0oIkxeU2VpUEd3ekBTa0NnJUtpfS5sTyt3MXp6Sy9BJFl4K0hDKGlzZXhbXktEMzt8fDI4SyhiK2xaUXA5YGFGKHgiOnY5LCZEU1huPyZOXnspXyx7Q11wKDN3'@;
put 'OEo8XWBVXVZtK0ZiVlJqOXo6clFEXmc7R1N1V2RxP2g8L0NBWm5hW2FdaVZOSio9PWJ0OEgiNH0pQSNYekdaNEp0bipuWCZLJXFDKmg5UF5XbXU1XXM5aHBKZX1UVTdtOzhnMk48L254dk91RiZRcWFTemhlI0dDWU5YQSphU0BELkdFd3lpdFIhP0o2JV8rbEFESzZjXWJBVD8lT1gpQXY8WTdL'@;
put 'QV9OXitwdUY8XlF5YkZ7e2pIXjRLIWdLdSYpMi9nYlFJc3lOeixJRWRRUzxze3N1dUhGMkhLbFBJIkJlV1U/S0tncyN2W2klWlsuZGBuVWhUeXd+MU91dDVUdlpgZixIX1QuRm11bkV3OzM+d352QDpGfWIjVHw4WjNsXXJ6REV5Wzt9UGFYLko4LmIsNEw0UWxlb35rWitbdDs+VDVmJXsqOVpl'@;
put 'IkUzREVJSVkvTWVlW2gleSNzbEJ8IS98YDswfFBeJGhrOUZCUmNIb2JlTFJaN3FlMWNoPUVOZ18sdVgwSioxeVs5bUUrOEJZOltFMT4vSEBSJntvSDhLQClwOlJNMlQsPk1saT1memdyOWp0LjFoLzwiOFJTOz98fWY/Q3FhIVY3SWdqY0Fka1g4NSlGXjtIYDMoUU0qPyR4a1lXT3QqPUlvUUol'@;
put 'MUhpLGxtKGssNnJAOTc/M3hoTnltYS51eC89Kl4hb0dXey8+d0pmTkYqPkV4QD5EPz1NT3pfJCxNTip6NUVLQHZMeFRjIVAwNjw/bjhRWEVUTShdaTY/eUJhMGBzKzA2eChGQTw1ZSN5NT4jTX5lOyVsaTVqUVlIfkc8UUxBdFBhNDZCVTxfXV1JdjBIOHkwKSh+dWkxSTR3QDZbPlRvRj1tfEND'@;
put 'WDRaZ3puZkp+RzttViFWV2pIKjx8RFpPdzFBfEtwajd6NE1wRnRoT3ddOH19JSVXImAjclY8THw7dC9nQjM1TmA0d2xhSkJib25OfiRAcVo7MXs1WXIub3omW19GbG1Zcnk2bDhDQ1pCKWJPe1ozTXp8Sz5kaHI+blB1VXEhbHB0Qj4qLE5dNnw5bWdhd3tJIiguRS5McH1vKC9UZktLZlB6Rmgm'@;
put 'QUBeNSU2P3s6QVorJlpZOHBBIy5rfHg+T3E2VmZNS2RWSGlZN0gwTmxFZzo5fWV1emVeP28vL0ZEcTRXPjElNXV2Xk1SXW1pVVFJc3pJWV9TVXI8JV5oRUEoYFAoUSZhYUFNVyIoMUl1M2MsL0NTd3N1dWZFU1JEbiN9eENDVXNLfjxMSHVROkEodjtTMFJjKll3blspYmRrNEVgR0QmNHxaMGl5'@;
put 'XTAjPF5BTmRFaWUuWW5kVHtATHtvfF9MKkNWMngrMEw4WT1iOUJTL1RlY3pxUHl0Rz9bcVs4QkgyOTwhcmpxKS5iQEM7InQ6Pml9WUkjaF98bENDUGprVWYlODZyKDFGc0xGWW5eeG9+VXYhOS86eTkyXTVJaCRdQWJ1S3hOVF5SdH1dWVM+JlJUKVV1emcpbmpjIkxadncyKnZta3VdOC50filQ'@;
put 'dFBgL01UPUt9S3ZDQnUvaTs6Q31mWTpMVERKe30iSVViXn17MD1FPH53ZjhfXXFxdEgsRHpbaCkyNXExYXh9IXpvVHIlTDlvLEhXalQlNzZQN3Njcm4hWExgRDY0I09jaVd4RjF6bS9fIkx7fkM0blNransyNX15TCFLIzkvaj5hSWBock04cXJoRCMjX3pxN21MXyhoTWgxPjdwc0phPGtQS2xR'@;
put 'UEI6XW4vYWJYaiwxWCowSUg1WV8vak9QOV90VW46Oy54ODF+cSY9KWlpNGBbb283fnBFTTQpKSRnKTE9OUs+c2B6XWd1Xk1iaCYrVEZSTj8iWTs8In5eLlhmbFAiZiUlYFs4SHxPXzxBK1FNZ0VUXi42ciZ2Vj5YKFhkZGxXayRuW3hXPCk1cy8kKipaPG4jSUtsQCN2cjR7aEwzLzFORH5CSHsi'@;
put 'cUpqNz5ZN0skXUIyW2YyMSl8eHcrW0JHfWVaIlBXUUZmSj9malRtYEhrRFR+KUdzeGhiOl59VlJuc0gwPCEjTlBbOSVeYnV5LjtHPSEsL3QyKnBgRzE7MnVnVXcuImRKdmFvZDAoS0l4NHFINCJ2RUB2dHRpN2RYWSpkImBQOnBwIVBJSTB3cSRDSUNIIkc2eWxuWjEma2Z4e0VscltgcmozMGV8'@;
put 'LkdjdldTZVhKVywsRTd2KihtUDJyMV9faTRVMExXQFQpTHl5Mnk3bmtVPmFyZU5oVU5maDRRezhUMzNDU2Y4KDVFTy5EdUAxfmQmR3JRJkZScGcjPCg+UH5bPEx0NjpnUCpAfixBUDMleDF4eXApa3xtN242RiFveSssbUlGWUVWVkJNMH1ZRWhIX2hpIVN6XUljP0o0S0pCellDSkRgeDJ4eDIx'@;
put 'OWFmMWFQLypCS0YzTiZXWno3VDZyJX4+ekthN0RNVEZYTUtza2V3Z3tUUCk+ej1zV3JJfnhMN1RYakBGOzdAaS9TJUclcEA6SFVYUClSVkdCJnBlZDgiVH51bXg6RnxCNk1xYj9uNWo2fHUlTGt8QzB6QWF4enUhbEAva1pPanZ7cHJianN3Z1BmYmVaSiYkXyJVQDA+aFF1OWtZeSs5V31MR1hY'@;
put 'QFl6MTBUPHhTQzhdOT89fH5rRHw4VztwZV5nJEpLVWo4dmZ5akhfd0lFPW9EajkwJE1oXmpkYE40dHlVIVM1WGpzcCg7MS9yNmltTHZXM1B7IzFoTjdafVBNJFRCImdFTG4rciwqdlJ8WFZOJjk9I0pWWGA8LmB2eT82ZHQyPU9iKGgwd0VtUG9seGVIOyg7OGhtMmYvaUI4dUZ2PnV5UUluJilt'@;
put 'P3Fba2h4YUsuS0gzcnxlLmJLSmpiZH11MDhpd2R8NWg0TjxgKE1pXkhje1E5X0Aralt7SGVXIUVAbz0yKT15fCRSI0RtMDRmfmxjNUg/WFF4VlJfenUsJnAic0g7U2pud1tkJFdefCMlVUpkIUpMMDBuT3teQEBGXnVsSiZTYlBdcHpAQ3VNOFFtaEZoUz5RP19sd1o3dG9WX2wsQy88YUcwVlh1'@;
put 'LlRna3UqNTllZV9weWQ2Vm0/Z3tdbzAhOTBmVztvKDdFSWt4VzlhZnFlQFU4YUROWFo5cjN+USZNZzxHNnlLbU8qKEZwSUVmLl9WdD9mJSFPe1V9Mk9Ie2I+fFdzLzlKe2VQeiNARGQpZjMpOVBXfHVjIWx3USFlNlJCPVoqZn0lWGJGRCx1PUBacXpZSShSPkZSfWppTn5oYCxQPT5pSjImfjd0'@;
put 'b1lqL3A2JUFkfS5WdClJX0kmSlk3L2d9MnUoVH5uI2Fnc3x8PU5VIWlvSEd3YHssX3pOTEF2VnJPLE93ay9OLi5xNCRrSV5udHQxb0wjWzpUIVJweWh3VFhyM34icyxoY0tLZzBFYD0sTFFKV0xyQ2dBUT94T0ZDNFR6fXJoZjtpUzRwVHorWXVgRGpaPTdAVzJFfGVvbkBCXU1UI0hPJVVNQ1h7'@;
put 'VE53dXc8K19oUmtgXVNjRi4/aHVMTjJOeF9pXlAwKG9oaUZaN3hyLjkqdUc7eUJnaCE1L05tamNRVWVsVXlvWk5ONXY9WilBPm5tNW9YSFgoTlYiX2VMaEc2UyhVSGZyV1hIPjdMVH1dVFk5RnBPQ1s+NF5sS21EakguP3lqIW5NSi5EWXQ2ImBsKHJmUCw9SDt3S1k9YWBhV0gwSEVEbVZgSk1J'@;
put 'K2UzWS94ZEMmMCRuRHBGJEB0MHw+citLfWMsaUlKVWxSfmw+PER0M1t7Nm9KcDMyXmwkfDp+VUBtNXVJIyNHTFljaEQiZDwhazRBI1lOIzdnXTQpM3cpIVJxdE85c2A+Z3dhcDBtVDU8RmZOY1Zab0RLUCVTJDZrRzQ6NUJ6QSZZdmQ0SGlyKVpFWnlWRz5vOStQXTNnPzteRlV7QHpDZTRhdTtT'@;
put 'KFBVbyY2bik/U102RSlCJEVFakNQJF96RmZna19nZjo6TU53Rk9IKyR0amN8K18kbi49LC9qN0BMYVp4Pz57KHhjbWI0fjguWy94cEFZZnFKPS99T1dwfjdtLCZZWFN0QktgWmpuNTlgbVNnck5EZlRdYG1ZVn1peXowej0uIiZmOyxnPkglKjdoVzdsYE43aWtxXThKVyshR0oiX2Y4JDFQeTxd'@;
put 'Iz57VSRfUENDKF4oU1RZPHxYYlIyJDVXUiI5QmVZaDE8KXY2JiQkNHQiZEJbejZrL3pDPUVaL1tmXVIkOCIpL2lCZnBmMzZqaEN2Qn47MS5YYnptKz94NjV4L1k0dm1MMkI/eiEzR3xfZjtmVmo9SGJIYnApQDM4Vj4hWnMwRWxxUTBrbU9JKjk2THA2W2IjU1lDbTg2ViVEd3BmQGVmLD91eyFD'@;
put 'XyUuT0MpMjBfOSxaWio/LlI5WlgsJSQ1akMrM0s8TCJ1X1E8R2tWYzFAJk8qfkxEcTM3dTl0a21sQSZhYkw9TVY6SzZ9cEUqK2YzUDh8MWc2WFZLXi9sWHMoYHNSaiJtUTArfUczW049ZG1TY0h7fFlZaTd9OmQ2Ti9KXz18QG9EekFEa1dpMzx1ZWwqPVhmb0gsWzQ8dVMuOmZ+PzR9Km9XU3FK'@;
put 'JS9oaXVRQWFvdVBNaFdAPlcsOXc0c3VTVXU4Uz9PPT9AP2xFSmVtVntpJXNJRCN9fnhjSiVYZmxNey9sVCIiKXVhSndrX2hOWUNwPFRAWTx3ZDZ4MksubXBjZ0xXZXg4aU1QVGQuQ3YjK1c+Y0ZxTXA6KVFWTWhVJDFzL0dIP1dKIytdfiozXkpXKmBYUkY8S0NSKnZSTE5tOns2PSkxOCJTej9a'@;
put 'OU1iMUFXK01zTWAxTmtDfmpHNG4jOCl4e3szXSFRMXJHY2pEVjFZU29DfWxlS0RzN0J1SHdgLyg3PyM9ZkgmWWBucSxiW0Z5Tk0sdkplSyo5I3BHTjYlSkpKMkJ1fFNHYTZddFEkTVpRR1tnZFRNaXx7am4yVzxNUlUhaDNWa3F0dFpVVXw6eHYsP3dlR0BhcjVrXT8oYTpZVz1nMSF0Kn5HTG4s'@;
put 'TF1TOltNLEMjdlBSXnlNY08ldSNua35gJHpRKGh+Q3UoJC91bD9uRGN5L3U3Vnt1cGBRVGh1WXpWfX1VNTVIYmR+Kl5SfCp9PVRkMXtRUUNOQT9CfXFRKzpeZWBsSzNSYWZ6JCEhSFhQS3d+T3EmfVpSdiFrXUdBSCVNUzNYS2x5RjBtcTQ7MmR6L0QoPldPVUB2d3NhQyVSbS80cXVAaW1pXXJV'@;
put 'eCRjO2N8Imc8bkNqW18+UW9JSEs5Y3duQlskdCs4ZS5sR35xfDRpJFNEJmp8KEB0PiY2dmheLl5aRUU9RDA8Rih0fT1zNVV5XjAvfipMMENFIzx+ZGJ2PHFwVnx6QUl3RmhzdSo0ZVQzajlNcTswS3FnWkFIcWR4WXo/RHJfKmJiLE1COkV4Y3JUXnA/V0F3JTQ/RWM1Zlprd0QoLGJvJXB2KF5S'@;
put 'fHo4STlOXTgrQUg2UEYuXUQrLl0ob2J7aHFadGZ4M3kuLzghdUBGS2gibG9wfmZkU1M0JDddcTthPVpJfCF1ayw2LH0wNkQrezxvRF89NUwrakt3QVQlcyVhOm1SWEk1YCs/N0RKRlJgdXhveTwqaEhsbXx2QDEpPWJWVj1pXmQmJUlQNF4sNnx4R1FtanBANiUkaWsrRyEsYzx0fSZ4cU99fUZq'@;
put 'bzAjRWs1OzQ4ZiE5SVpoQWFiN1VWR0whOk5XSWwrRG0uOSY3fTNfUmVeTl56amRBN0RrWkNXUytSZUk2TlBLOTxfcDJPP2klc0pmfUc1b2l4KTpydjtMcVRtOjtJI1kpdFtCdTgjQEJ6UGUwLDh2XSY6Ll97Qjl+THJOQihJWik8PUd8RCtEeGAqRjtlKVRTMGV+PGQscWpFendPJWxUVWA/R1dT'@;
put 'OEx1fXxELzU3U3g0dUNYSDtESlA9fFR7bFprNS5LN3pKVkByM0JhKGBJV3sjbU8hWld1Zj51bEV7PzdCQ2lYIiYpZihAazdIUHdqJiE/Vlo1XXhfXTgyZGUyQCh0ZytGdT5TKH0hXzhvRixtWjRDbWF8ZCZYMEs3cD9DUHhjUShjXkdiVU5ZRVoyRl96NUV3Ul1GTnk/TFltJjYyPj5GVDMrXygr'@;
put 'JTVHSGg+ZnBtZFZQZk5dcmh0ezxmSmg+amdzPDIhUjFGO0U0eCNeclJ3bkZNYHFHfl5IbXpjdVR7Z2IqSDNSSGQ5SVc6TisoQSwxQ1Q4XVBwIUhaez09OzUvZT13ZldOQ2xabzh2N01ZSFcxQFZ1KWYsTjRzLGc3SnosU1M5QFF8OF0oYndWPzJDZkdhfSQiWnhafWAvK2QvNV5ILj88Vm1vRTck'@;
put 'QF4zMjZlTFdQMChaUFowZm57UFA7W3k7cmdIJD0oLE1Ja2RVNSkpUlRlL3ttaGA0c355e1sqJWpeIWhFaTR8WCk9My55fSNney5+W29KP0g0IVlCdG5KeD8qaGkmMWwuNixiI1ZGJXg5bEwhY34+TzN2TTFLSEx7QjszUSR1UUZUPmJbQkcsLFUuRjQvbT1zNk8pU18/diVZJGZpO0R7UG0vc3BA'@;
put 'ZXZDcEtbd0g8PGUxcldjOi8+OHo6Jn5CLiF9aURaLFJfPDNXMjs/PGwweFIuOntYPT54aTF+QHckSSluYSxGWVdtbF0sNSU7TGA/KGwrImYwbF0uOncyamtjd349fnZFSFphTmJ8ej9HWzokOD93OjUqMGVFQSF8JDJORGJrMV5XN3x8LCI1e2VxeC9VaXJXQE0ofDVwSCM5Xz5wYV1weDk4cylD'@;
put 'ND1mRC5lcEhEWjpwbXkzXj1JR1NUUkJsMip8dFYrOERHVG4mIWIpY2I2ZXZtemV6d2J0aVVwTVdSajZHVT0rT0FDez11ZkJrfDJlTyh8WFo4XzY/ZXhFLEZ6eUEzTlJNTkw7YmBuLnMuakohXlRHdlcjbS5VKW9tR2hVQENsbzQ9UUcmJT8jIW4saz98KjU+OWZaQjhQQWNCQkIvK2RTPDFINVJd'@;
put 'Sno0ZkRVTHhpUTg6eT0kNktgW0A4ZFYhcVpYQmZZeDVxSzI+RHxBc3JIIUZPMG9YRT8zPWFdXXZNL2lRRGB+KCZFZ3YjKGtxVURDcnJiO0hxQ1BXIjZlJlk1dHVVXnBRNU9BIVE/PXR6RWVZJjwuM2JGNz4hdGMmfkkmUSY5TTJwTEhCa3MiNUd5W0N0UmBhJXNUSmRCZ1NQYihUNChaazM3Y1NY'@;
put 'cmVhUlBBVF91fEk0NUhLYTJERDBOWzdsO0RSNnNvNj1ZbWlrZX1PZSQ1dlIuP2pCWVtZRWohfVVEN30jZlZkQG18TVZMNCksQGEvNEhuL2FnJlJaWnNKYD5sMHJdTnJmS0BtPjQ0N3tLZzZQSjp6NitTWENDNGw8KiJyUVpdNGZkR2pPLkJneyM7dG8xXSNHbFM9VDViUyRFJW13YEhPNC9NIURD'@;
put 'fmQ6dTp6VTNNNXp8ZVhWWll3bXVRIn44UUxMZCg7aV1xSDMiK3lnazBSK01sT0B0ZVtqNUdZaGBzZFJXSkBHQyZYQmFSK2VhPWg4SVFPSzVPbU1iYEVlaShUPnNZNEA1T2xIZlNKYDVGNHRkJUteZnN9VCN2cnswSXJFOj06dDReRmlRKks/eCEkQWd6JjEkeHBySTgpMURkMVZQUWRTJSk1QmIq'@;
put 'TSNFayVlZ0N8ZGdGeVU/IjxhVHc8Ll9zW2IpIUpRTCI2ZDV0XWteOE1KRFVqIztNRD1TWzVCXWohc2kuaTlyMygrKF5zVGlYd1hjWSkofiVoXygmO2ciKkV9OllLeHs+dkAqOkV1bzhranhzaUA/VGIxSVk4Llh+bWV2KlRXamdITXp2aU0iWjpJWko+aHFEOlklcTVlU25Cc0NMNWF8WD9jL3gw'@;
put 'dGFYZHBSZU9vQyU8cDA1cSNjZz88a19jOVRHXmVqSUwldkdRdjFfbzZfNlhlOnZpdHZEXzlbJGNaQnVSbD8lMUlLUjJARFtIUzJadE1lSk17XkklLER5XlIjbH4+dFN8ODI7MSg4X2s6XT10UCIhMWlfUHQwfTMsVSp3MDMhVyx5Z2FjcU0xeGduWU9GaCVCXzQuW3pnK0haMXJ3Y30xZFhMXVQz'@;
put 'UkpYKilBRkI6N19XTnB2V2BQTTNFIUlwRndyR1RvRDpKdSlUK3tXUHBUcWlxfkImL0crIVJJPnI5ZEdbcTtvbU56NVlfIldsRlpoUlc6WUpCZiEmMFteQjVmZkE6OipSKDBYWkhiOlV8VCJVJWNwa2JwLmtbMHdLSTU/YW5mWiU1eDBmVGlublFfbGZ6Q1V2TiI+aVIuUH42dkY7KzhPKDxISnpa'@;
put 'VTdjKUhvRTMiPzRXKl8yQyI4KUZFQjM/VH11dU1EfGAzZ2AvM2c2L25eJns9Kik8LiN3cUtseD09W1I9UFFzIjVfX2h8cjpJNU0hJCJ7WE9Ca0YscDtFMFdodi5OOTFrezs3JW8mKlcqJWQyZGg8bGMyZG08bCQ9SSR4Y1AmTG1CUm0zVV9FUloveSx9LmY2M0ZRRGcuPjxmM0dZRUpPYC5Oeit2'@;
put 'YktjKT91ejxzW2NsP1M7Y3c0a2dCTzdDUl5sKEZvXXFxQFQ1OzdpQCN2X1QjczJlZFRPelBxPGUoK2diNXZ8dGhNX04qW3wzfipkIjZ1bjY4b2xAXU08czJVYHpNIUY4RDpzbVEhUzpvKH17c0NHTndUZHFkMSk0IVlZOF5ucChAXjdkbTskVzw0PV81YDJnVWQ6TUtYSyNzcFpLL3g5TWklOFld'@;
put 'VTJIZFJpMlZBME06OSg8cmlQNyFtU21QcWkhZSlGPVdWRz1oZyFsKT1ONkMwYUN4YkN8TCU6WkdWe1tRUU5uRDpyZHtNWlVzfUp2JnE8cGBtOnAuRX1zVnM5Zkp2PWo+VjJlJX1AbXZBb019X09pOTI9QCt9SnkwM2hJLjJOWD1JO1N3VWZ+NWtFY25eMyYkKStdMTxYKjtOdGJeIVM9QWouU3V0'@;
put 'SmgoWEh3RFkhRTdffil6aDtzYSJEfXJVSCo8LCZbeVZdXnslIzd3N2NdR2NxKUk+MHwjU0psb017S0I2UCVYZyVPUSg7L193dFt1SXw5VUA9SlRPK3J5dTFUdT1QaEN0Kl19X3JfNUNGPDpKVjhqX19Dai83RzZWXkx9PV5ra2MrVGk+Ilg1ZHMxI1ljTntDMT5Ze2NSPz5aazdYWWJVKVZkYWRm'@;
put 'YH41UVUkc1JSY0MsSiEmV35MIWV5SFpTeXoiZH5VWn1MQEtLRGgwLCYvZ1RyUzQ1b0s6I3NZUU1OSlZAfGMmUFFhdmJeQ1okWC4yaiV2eEdzamMvKnJnMWFGRDdwN2FdSnBbW0VVVG5ESTY/RTlvRVpMQU9RTDM0SCR0b2p6MXRAajtjeS92cWd3N3ByTmhxQUJjblJdYkd8a31qTWlDKXYsbzta'@;
put 'LlYwPyYmdTBmT255eSl1VDZWLkcpSyk1WlpyanhzNmIxJE9pa0Jvam8sdVdAblYpTCk/XlhHel4wN1Y8RiExSDVfX1lJe2NUejlEUlNXUUNfK3JAfmghNmNgOXchL18qTFo+ImRzXShCYUxmOC59TUZPO3ZWenJaeSJIKUNiOWA7KDdmPzZ9WGpbU20rKXxFSDd+dCtzfFhWQDxVUW5mdEhoYSpr'@;
put 'ckNZa3Y8Z2FpLDt0JFI0dGZxOTtGdnxrXTE6RVkzRzxDWExmTHVCMVQofEl3VE8rRGozfDhWODR2bVNIWGIsPCMqeih3X1JKcmtNbkZMKlBUYjdVPCtNeklScys/UTVkYjxyRSUlZXFweE5LQDM5UGRXRkVOX2VNWFNvPElZRUQvaTs4bEJmdWdBQ3teZHh8eDUqPjNGJW5LIXhoZER8SyFbNXV5'@;
put 'ODh3Py54S0tfQzdnRip6OTJadEc6YT5xSThrUj8pUTlMZTp0SzpROiFdJnFATmtGRj1mL1V9U00/IjViWTNwNz9JNztFZntncHhKc35zIzYrSz9MQXx7dWglNGBYUyp5eyg0eGpGISZ3VyVpO35nUTJ+blNbbDIlYz9eZ0MwZ35ob1lbKUN9OEUlOSZnKj9yYzpbfEhyKjJ6QFdJeSFkUF1KcXBW'@;
put 'aDB6L0Vsb1ZLS0gocXY4YzA7L09OaXFORy5DRn4oQiUuIng1JF97RXB4YmUlNEpRTnUzZDZlYCh3JCRNPHFUTC4wQ2wmd2shUyNgMkgjMEpwZHpMQCE5MytrL0AwdShTej8+VStMYk8qUnRIKjFFO2xCN0RZYldSPEc2U0FyQks/RSFlV2BtZ3g5IlIyUDFTcm1Ebm9DK0dtY1NNcHB0Q0NKUGFj'@;
put 'a3A5aGlNQTlVISFaQnEvcSFiR1dLNHo8QXFVR341KGpyRlI8dU8sYzdEQHk0PG1nRUMrQitwKjt3VEw0T2A7KUxOR3U8SFBWZnspNzUsI3FvQUs6fStoTD1MQncubnNMfWhTVEliWFVWUStkL0ozfjcpSy5nPT8mcURQPV9WN1BYailURHM+XmI5WCYmM3J2PEBMOGx4cT8hUHIvJik6cT1wZjBM'@;
put 'OCx4REhEbmN4M3BjW1BtOyZNdGFYQnV0MFhlaGQ5IT9EZlVLNk1CRXVneG5pT0A+TGE8NX1NREgxPVlTMygoI2R2VVVodFNzPHV5UHphT1ZWNiJxM3EsO2JzJiFzeWYuUCp0elFDfHZRd11BV1hMUjJbb3l5R3c1MlsweD4lKUxxOV9ocmB8Py8hKkNxd0pObHpSMWUjaHxLdWFYRj0sZSRaZWQ0'@;
put 'S0s5Vnh2eHlKUUNuUStZSTB3cT4pZk5HLFEoP3ZeSj02MXR7UzBoOmgpRmBdU182JFZPI0BmKzkrWiNAOGh8NTpsTSw5RVBHcEZvY0lwWyMpWF8xOX1OPSpLPXx7Z0NRYTg+QSZ1dFokUUhMTiwhZ1g2dSVMQE4pL0xhQyskcTxuPjIlW0lGVldERnJlZ0s7MjhDKlloSVZvQEExVGJmQEl8XTsk'@;
put 'OlNmQj93Z0dHdWM5U2RJNzJUVVZWeFUwSkA9K0gzI0J6Y35dKFUoNk9ocy9va0VsQWhwXkhgdjt6MlNebVV9IXNgLmkyI1RRIkhyIURCbVcxInVtUihCeEYiYX10WjAzUDBEcCRHRXFzdyRhW2NeRWM/d153TnZxWCViSU58XnAvI0NNJipoIiZFWjdJWn5FflgoeCU2Wkc7cXN3QlQie1RfaTVy'@;
put 'YDFeL1shPyFTRz5abG48eGpVPzRrImA/b3l0JCptXjxuNkVaOWUvaDk/Y2VeKExfKzo/eDduJXdeZEQ1fTh4NFZENyldVylsXTBhIm1hTzdYQHBkdzx9ZDxsX3p2TXpyVmhbNlZLOCtFUjxbViVXTChYRz08b0VZQ2gvKWE4MTVsUEMofTd8fnJsNTs+fCtKNFpARXQibngpIlBQbjwrYzh+O2FJ'@;
put 'ZXwwdDNlXyhwOSNrVjI4Q3RzeTErOkRkY2hiWG1wOChoSig7RmljcVo9RUgyZXNgK005P3xeM3o+RVI2QF5YZCF2bmZZWlVvMXdXJXI6UTtJcmRoQTJGPkljLlA5eSE7dyMxMCYoKklHKSo6Yj1MfUBdV2hdMVN8N2NeP3VyOz5WZVBYI291KFg3eD5DKGlhRkB3STsvdT9TLiYxfVJKRFI1Nyom'@;
put 'ZV45Xz9ZXT8ke3VaWUcjZyxYMmcxN3hreTI7QWJLOzExcFNJdk5MKFdIWH5lOzZ9fHp7WC4udzU+ez47TS5PPkI8V34zQ0xmLHBrKj1TLyUqUUMzc2k3fD5xJmFnS3UiMkB9bzNBP2dNbnt5L0hfYnlaPEl1R0BDM0hDXmZtRjs+cXJaRm9fR01ze18sN1FXVHxMdiRzO2NNMmhOYnV1Y1c3RSxk'@;
put 'bmI3Py9pNUxxJD9TMSJIb2xqYiF8JGNGPztrOixWc3hAe2FIZSx4dWg5SnBbOGcxbl9LWDQlVXpWOCxpSmw/L3htPjtIKTVgX3V6Mm41MkAxSjE9TF8zVCw6Lks5bGJGRSRueT08bWxAMnooLCtVKW9qOVI7bSRHK1o1LmMsPllEJT1EW2J8RTd9RS85eFVxd0pNazdWZiQ+UG9iZCFEeT9Ee2lU'@;
put 'MTN9ei94Y0lAMVIjJWJ9ckhvU2AwdTNxPlZIK35nfCNydDtSOShUeEkzcF8lPjNIXkFZM1dBT3tbRXg3S2twTjBwWGdXVE9yZi9bfXJAYU44c21tKipqbWw3NztjUkBVOWBBW3lGU0k4Q2BGS3hydnNvfWNXanN5NlNySktockNlVD9BdGY+JDxZSV5XUU9MISlyWn5mOVg1YG9KOCRMYWJ6MlJI'@;
put 'YXYvW1h9TyVCfHxEcjBUV1hZTGEvc2E9TSRQZjRaV2kvMmRVYSl5WS9RNDlaYn05Z2QjPmBseCNpYkYxcEBlQkQ5OlM8b015VUhuaW4jMnl9Z151TVlhU1ZteS5KXUc/YStPdVd1WXdpaW17MFhuVSwrSj5WXm1iVClLVm5xVzVQWzoiN0tjJSZgSDoieFBgVSpaOVpdKmRvdylLMDJUI3JrPkBg'@;
put 'MXV2ZDlkJGo6ZlVPVm0uQXcrfmopNiZIKThqX2x6W2RMNUFYd2VySzQpbFh8dSZ6bGcpbk9TPkp7b0Bze0dFeUxyJHwjQVIidnhweyo3TT1GYmNvY3hyKz04Vz1JMGpTMExRem42ckQlbFdvPklQJFBYIzgxTns7YThMJG1GW1c8TG87OVI9OFUqWUojMEw/KkFwKSpJWGZhU2guPH4zO3xqTng1'@;
put 'eE1UaDgmXT0hREw1KDwydyIxe0p+MURwVDVsY0gseiFNUzF3SVBHMERGWzBDY3t6Y3ROdERJbTIxfTBrJVpQfk94RFYuQlQ5OiwoLilKSEBJKWUlbnclZjdedXtVbjokT1lzLlR5MkJBRmdBMyR0cHd8VzZHa1VebUFBd1JXT1NuZ0w0eGlbWEo0R1NLVV9VZlhGYFFGJWk+VUJMIWBnLFZ6LHAz'@;
put 'TEVxJk9IcjZqIl5VKVJUYyRgMz5TZHN3a1Y/OUtqWz54c20ueVoqfnFuMFczMEBLW3wxanphZjZGJEQ/PEhEYF5OYEs5eUdiISI9SUN1Y05PamwlOjFneD9hbn05VSFhMnhwUyRaUmFuTUshZW1BSih8e1pnYjEyWzJ0YztHIj80fXhpT0Nnc3p1LHdZR1g+aVErTT9fKGBKRF44d3A9e2d1PiQl'@;
put 'QCVHOVhRIWA6WDVzIXxyRmhFUVlde1tjJGdXT1NtaT43ZyZkUmNQODQ+ZWdFMjVsbV4mSi4hZTZdOTA/c1ZQM1NNPV5RNUI2KSRlbF5uOWQzYntjKW9yQ3khNFUpfUFUKHdINDlyN0M1eW5oZ3loSltNam9tfEcwNHBkMVFoRjJgWS52MS5GazBhKnZFV34/XWBiV2J1V3BULjRRWHFEcXE9OFNa'@;
put 'Rmh8emMpPHdtfGBnY3tXOVh4RnI3S2haTTNwYkhGUnRSZVVlJHt4SkV7W2VrWlVQKzNiInd7SnhzbUhiUCJBOFg1NWs4T0ooUUpacE9gX0ZwJkY0bUtaXSQ1N1lsPyx4eGcjc01XX3NwMSEqdHREcFRWN09ASj0ocz12XlYqemNaV2JhXjRre3IvWlRtfDFMV1ZuJCR5blpqQDU3Sk94P1MlO3tL'@;
put 'bXNrWW1gM2IleU9baFUmZ2xCOEsyLmAyKzs8L141c3JyMkdNaGU5WG49UF9qVStRYEdgSVg2dytaNkt3PWNNbjRqbS8wRV9SXSl6OXJvcT1YMThMOkt6NGs0eDJYJDZgPHh9OEB2OGJ2VSJsN1guSkBkKTBGekdtJnJSRypKZnUmPmIleDdXdUxfcEM6aGdJUlM9KGErNj8vYXcldCxJSDRzXiJ7'@;
put 'fncxYGxOPVQlTWRROV4kfUUhZlAwTisybGRhaSEuXz5DNEBYLGE8VzxLdStJWzAxKj8ocj8uOyZsLGorZUsqMyZeZ29EQj5gOyhxZEsrdW9fQ0I/Xy9QL0Znb2RTOXp1eFRMfHY2b2wuM1pbJUUsMUo8JCRFJVphIUJlVWJlLlpgJD93eT8uaEsjVypERDlLaUd3XTw9KjxTdi5jY0dsUE8pInlr'@;
put 'eVBvVSt8Qjlxdj5PfGF1VUZZQnkpMFVRaTh6KCRLMC9wKig/I0pDfiNxRjhjbFJTVGZwc3E0XkowLlRMIiZ7Pk9DRjs8WH5PbGdzSDE6c3xtNnt3alFHeCs/TGYqRXM6e3hxPUZJLylJcj1weyVaaENjKWYyalF5ZGg2QW9iM05EVUwhZDU4U0cjVGVbLDRDZU5IRiRIZUM9WGBVd0E4JXU4YT0m'@;
put 'MnM7fkRwbHFRViJIRGh4eE4yK09gaiVzOFpnLEV0ay41V2FRN0woSGVRU31rNX5eWiRCMTZSd1tmUypeMSo3SEJyfCFwcENoLyNkWlIoMVMxYmJGO1ZtazB3e01iL3V6LE5pflo1Nno5QC5fdm5Hc0hTaXpdJXdVMHNgfDAjXWB5Ilk4eXhEZjFUen5qRXgrMyxrOiMqMiw7bD1HS314ZWh4UT9h'@;
put 'TCN+PjtXISQ9VGYien50ekVNY0RNL3pIK1I+diNIeFRXYTwhV012Nmo2ZFclRTN3JGJvX0NQMHZEaGxCVXE4OENiXlgrSiV8KF5YeXRuclM4bXJdaj8iQElNZ3lqeGBhU09DIXx3XmxBN2U3ajMsRlB8T2dXWHs2O3heVzN+IWsvVGFQMF5WJjhCeGVvbGFhejE/Tll4RCY3Lm1wPkguWD14T1V2'@;
put 'b3w+VkFQRm06ImI2UnZaQX1vPnQwYklBWjpRYW4/SWlPeGZ9REE6MS43cz9NYH5ZZC5YcW1fXUE4PENkJjAmcklQaSpAVUNYIzdsZn48LGR6XnVIezQkczU/e19+Qm9RI3RFMWAmdy9VeVRtZU4we1AmVmI+OH53PyNnUT5ASGkzRV1NK31iLER6TTpaVWx9Pm1TWUc5RUZmanp5dEFmISx+byRK'@;
put 'JlZDMzJsZ0dhUVVbRll3U01MajxSKTRiXWtjJF1VKkdWRFgqVCpsJkY6NVs2XzgwfWEyVzFecS5RNSIpWiFzVWgjbHhFKEwyIU5tTCJnWzd0Xl8/KjBTK3FqbEw5cVNILCZ7SFtXYnhJX3p4VWF2XnptPjB+YUBacWpEajl4IT5vSUBVK25JbV5OODJIdlhoeltePi5wUC8iL2spME4vRVp7ZVRX'@;
put 'YERkXXJbfVZHQnNNPVIhO09CeS5AOVFVPkZtVGprbyE0XVVucz1fZ3gmUWd1L0BDeVQ3THZKJEh6QnxERV91VVZHNzxVUVt+anIpS0t8UHF1O0w4Z35kfG8jeyVSdGZaUVI+InBFdzRGdSxBd2t1X3NZU3B1QihnQDAmOzElUih9PSsufVNSaz9zUiFlQUdhKFdQbTF2UWVaakIqW0FzaHBYWTBq'@;
put 'Yi4kNURyaFQ/LjU6JGE0PkFsfXd9VCxlKyFkeztNZy9oVl8+PWFPYEVLfF91LilzczEjNVJAYWAxYzZfZk06Zkk0NkRQNiNrU3pbRnVPZVBuYEhLMDJsVTd6RmM6RzYhdF0/SU8sNWRSSk84N3YkNnlJQSJ2LHY3SzhIa2s/JkNfUHZUVCZqZmlyOE9OLEJkcHYpIkxyflRZaix1YTlOeEFySW1i'@;
put 'JSlgc2tZcGd0IWRaO3UiIllmKm1jTFQvWFZoPVBrLzZMdDYiMjI4bl9aJSRjR3NDO3lxQHlRQjpJb2YmKlZzKipKcUwlZWFGbCt6W3Fib29jNl4/eH5NNSk6ZFJfSXQuXUYrSWNTbjNHYVcqd3hGLGxaWjEsVyh2SUQuOklBRypJV0dhaz9FQGVfPzZ4NDlxbn1GP0tBT0NYITZYNzkvJTYkJXEm'@;
put 'JmI3Lmpie3hOZCRpbHp8Kks7MzJXZiRlKVNvPzkhez8pfXdjSCUzXmBYMGdaLDc3Y0Rmb0NIM21lTzw4Km07P00+eC9zJX02Ll4xUFs8RzdWUFRycWA9Qk8iZV9LTVc8Wz97K3U9cVpgYzNANFk7fnxwKEhKOW17djQiZTRKQXVnPzdyPitAdU99KUUxZy5wIzN3SDM+RkgrZz17Syg/ZEp3THcj'@;
put 'Q21+NlB+O11RcCtZYjM2PjhmPjZCRTNxSHNyIWZmKGJRV0x2eTB9KkNTLzo5bGRzfj55JFImZDo3byIuLyFqNEJ2dj09TXdtQCteaEc3WDYxfVJpRSR8IjZtZ3pqMFBJTXN3PD1Sd0BAIyRVUVREZCpYcklfMGI/RFswOiNteXUiKFo2cUdIaWFoaFVVMXQwbGM3TVMqQG93I2dOOUZJPTB4Xj8m'@;
put 'IlpiN3k0STFEeiVaUGwmdWc1alI2dFM0fVZWYy5mQTk2R2ckb1skZUlzZDlCKCh2bGo+ZWllVFB+SiluS2dJSzIrX0ZfQXZKTD1tMFJrfmRuUHQqPXc1SDBddCk0YWlDN30pPzFHOnhEJHRERld9ZnF8Sy46WlVRd0xtL1hRdmt+Qjh4eHJQZFRVRUpmXW1iP0R4fig4KCQ+KWYlNX58bnFoOFUp'@;
put 'MFkkNkl4N25EXnRQV11ZaVBVLGowUShvPGAxSVlTUFUhN1VQeFRVKFhXV1skYF1GbTAjUTwhRXxldjtSM1N8eWluQ21IeTsrdENIQCkhU35CRzNKOEhsKjhPeyVSb1pSWUEiISg6OkUlZ1hVJnAmNSZubGV6KF1+K29CbT0leSIyMnove29yWGNqUnx4LyQ5IVVZIyswTDImaWdUaDZuWmk6Oihp'@;
put 'XXhSL1RfM3B5cGY9OjlYa0lGcklgdDFGfit3X2paJFtsdmdLUUlLJE0pXVZ4T1RdfCR4MjZrUWpzLipZLCVRX1hiWShCdjhCbCVKWSFOOTNrZlNUU1lGTCxULFtTUDNlSzBeRU4xWS4sIWwoM2EwS218d3o5TjxmL1Q9a0o1RCZJIjRGOFQqfFV+JU5aTEQ3W0Z4VD5LbD1OaStASEI/TCNvaEUq'@;
put 'UjJ3LGVyXz5rRn5uVm4qZ0lSbC9pKlJEPntLREdYbiokQEdoNXtlIm5WbWJwZEh5c2NiZ1hVZElKdEtzYDI9Wyp6KEYhfnU0L05qO1lYR0MoVVUsTmFNZkcua3c0MytEQmVDVDNmOSlPSFNDUylkPm1eLGRQV1B4NGBfMCwxeFA4JTNBYFlNZV9ZMj08JThmOWIzeDlkMyt+eFokSH1YTGJJRzkj'@;
put 'P3Jifl1RRz43Pz40bjUmQVk2QF16JlczI0h+Xmk3S1J3TjFEQlBLVCRFYkVGXSQxVCRzZjE9ImY3eltka25Kb0xEW2U7P1ltSCkqczpEVnxYcl5MKyZtSC9zRGlpRzUyXlguOi8pVCUvJXpoYSY6aVsyUUhQOF4kWFN8ZW5IVV5+N05ZZWl4eilgNGsxZHFDZ1JRSTFIUm84N10oQmlubS41QVJZ'@;
put 'OSJzNiUvQF4+OihYalNzSiJoOWN6fE1ZaztFcyxGMVRIMkh4djc1N3JjPHlpNiIuPF8uLEU9NXtJSVRHRTU/U2VNanpUNVQ8bV8wa1E2WUdSWiQ7U25RS0lLYmgzIWh3PlVFWUV2dj5sWmw6aSF5S3NhWGhZK1g3NSJqb00xbzZlNT5tX1FXMFNXQm04R3o5cHJWWWM7S11EfklkY31SSz83X0Mv'@;
put 'VWhZaVNiM1JXWz9raDFIZXVEXnpGYiIyeyw1e2FvSUEpXyNsbWFnP1AqeW9iUzsrZXl0KCw8X2pIaF9eVVFhMChKW0l+aXZARj1oOTg5ZXxta0d9PztvTiVDcGBzSlRTaFNJKF91R3YvMk8hUHR0WW9rXTJCTF9KL0RuWChjZF06NnFIciRnLlFmZmZfdSUhfjoqSiw1eDRJUlF6ZGpQdTkwNGNp'@;
put 'UGRPQWVYJER3YE1IZWFdcVh1PT5pTF84dEx3MW9vdTRlamBWJipkRnYqSCUxRkV3Z2wlJUNMcGN1MFsuKUJRIUJ2PGg3TW9ROX5JTlhpVGpURlhfc0BAaTI5KSFvRkxDXUhkX3xvOD5KR1hvVzBkfXdWcWlsQ1RjJkNVd0Q3fDZNbXxbdktaPHtxT2FFQkdCcz1qR0prUlFycVZ0ZzYqUkN3RlZf'@;
put 'YShaeFE1bkdWe1o/YldoWW1bZ1BFPUlsQFEsdEswLFheP0JlQ1gmczxvKWUyQnUpcyhgMGdZQll3NVdZQmMmSmpuL2EqZ1dFKkA0XWZXaSRKTjZEL3RSQktYeF5aOWhgMnl+VmE6TzAkRH1YOXpATk5Ye1VpRjRBeDNPbHhkYykscVlhcTolUiVbSUY7Nn1FV3thWDxGTj5IeX1pOXk9VUYya0xC'@;
put 'fFt4KU1XTDFUcVldOjxxL0wqU0d0S2IuaEtUPkJNe1VmIyZrZiYvQDxjYTpvMzc7Iyp5Q0RzZVpod0ZSOCo0fVQlL3RIU0piLy5SYnBrNTlOTltndmhpOkRkXXUyPXE9ZW1oWkQzeV11R0hDXUs4LFtYKD91LjA6KzpdYXMpKDdIUkA3SHxRb35xTnEoIkojZHR2NUQyO3YwMDJZUmgmL2h4SHky'@;
put 'T21+S1o9bjpfQFlGSyN+PTQjTDtjSCx9LCYmYm1kUyE+SC4lTTk1fDZpQFlicFN2STBRajUxNjFDMFZQVXdUPFowRkZFZyJYOmo6L01BeUMqLCJDZko1XTNMLj8iIVs1RCF1cV9JQip4cm09I0ZiL0BXXU5PMGo4IzowQzNCXko5PT4/P2pjN1IoXXRKUHdGdn1CI2hfU2VqIz8mbk1HbXp+VmBZ'@;
put 'X3lZeTl2V05RVW5PbD1rPmRfX0M3ITdjWSo0dG9BKnhYS2k4OmZzNnl1ZVtsM0hfP0NwezUmaWo/JCpTUi43WFlVW1hyPXBPRFFtNHh8Uzc3RilBJj5oTDR2UGIrKjh+dEdBfilYODNgbWV4TjlRPSs1TjApU24wcVZ2IXIwJH5gSDdGTG5nKnFvJDJtdmA5SjAlYiZAS0JaZkg2UjdoY008ZjxH'@;
put 'WUtwSlcsKWQ5PlhMZ18mNG5mS1hCYls6SV5pKE9oI0JXNWskc2RrWmFhcjcyTlFMaWxMMURDVHowYzZ5Pi5RTEJ7USh1YjVmLil4dElJUFNzcHh7Om84WVJ6I05geE9+YEIxSyJyMylEWjpSamdqNj10Klh9Li99U3FkLCVKInk9SXd1TSozLnZgZj58PEtZdXJnKGR0MEd5T2pGckNDeG9FXWFy'@;
put 'NXtSIkxOTnl0dHBFc2A6Oiw3K3w0QjhsVjRKPSFZZDtiVUhTMXU1ViU7RUs4RWhjQEw9YVlRMDp7cS80TFlvMXNnZHpibG9qOmREI1lrTWkuezJKJHpsOWU8WXE8IypML3Y+JENXLyM0RHh+ODk/Q05NXmlmSTMqYyksIkdwPCZgQn1CS210fjNrOERaIWhSVz1FIU57e2AvNnJZeVtKYVJROStq'@;
put 'dTpabE5BYUB+Il11T0BMTz5KXXFfcUFYJnFtcGllL3xgTD1fLEo2TUhNb1FpYiVrZnU1bVszcUhReGI/MTtzO2pSfmZdRWRUbiU5fVdUcjNUKHY6cGxTey9ebEhYUHcqdCsyM190WjJPcntxWHZ+SyFnUE93VzhofkVXYm1tamltTShsWWs5RCV4eExmYXk1YyJNY0xFWllaNWh0RDApZWUiSERW'@;
put 'MlQydUssT25ye34yWyNwOCxCJSRnPTY2KmQhNH04PE1AOHtHLkIqPDhfRTZPImYqZFJKTzN5Oj5nXjlTdVpgTTBIXkJVU1BEJjE8eEZ7Vmt0UT9CT1lbWFVWMG5jP1h4NnF6KGxmaX5hP1t1RmZQSCZbdV14KFRsU2NSSz8oeihbPGM/b3h6d0VHaylqV2FgNXV2S2ZrMDt3Q3QpdThVVWlTaXBM'@;
put 'XnozUH1dWmAuL0JOMXF+Jiw+WkcxT0twUUU8SUtWUyFGVGF3ak1OYlg8WGp0WFNVMkkkL0V0Pnx9WWYrI09CP11Qa2E9N2FDRS5jKj9yUUhXeTZ3QHJIS3p2QlE/IUFEMUBtSGdmMDRmOiZ9KkFUPzgqWHduY0BAKFEqVlgoJjJEcXUwOmNneGFsI286aVk4dTpKP081PT8wOzJKMCx8SV55N2h0'@;
put 'MTw4JmdZM1RVSlVNYkxnVk9JVDYvMEljXl19O1IkPVRmYDoxXnxmQUROfGJ3cD5zOlRFKWYvJmBNbSFuREVMMio7az9ZJDwhfTVvLlVGW04vRFU+I3g1MUU5a3AmcHp7MDRkflAqYXV3NiZdNWVFME91TDZ1M2woTDdEcERDJkJKV3R5TGY5d2hTXVtMV1JhMG96VT1QODVgUC5aLzo1ck1ueWIi'@;
put 'UW4rPlM/ZSRMQnVeeXwhe3VTRFhJLjkmPXFGb3BDJVliVHFwJlslVCs1Kl0iclJqK0s/YnRbJEhPNFdFOkowUSlKWlI4Vl1gVTolRWFnN3ErcV0+KlhLR1lSSy8xQ2J8Ni9WZEApaCtHVS5wU1N3PH5wSlZoNGpYfj9xOFFReFdvWUh0OkQqUXBOVyNQdGxgYk1dTTQ9UmdqIn5yLy5YbCZxW2wo'@;
put 'fihbSmMyMjlHLEI3UjNacnhmKWVuLigyKHNJfjlma0w6c1B9X3tfW3FdZ3BZQ20uTyFnYVlRO0drN01IKENROyhmMlF5bEhlI29zXT9AOWNLdlNoMT8uO2IxUmguVyJnWk5BJXRSSUJGOntYa1lWbXpAR0Fpcz9fYXJxVGJIclJgOkBBMSgvZGFBWmwlWElGV3FjaSspcGJLK094PS9tOCZaKzNN'@;
put 'QXJGUSM2ezt9e2pAIlZ8XXJZMzpZL3d6ZjBgQiFxZWssXihqTFglNnJ0UFVke3xlJH1bVCx3d0RjRVtvQnlDZX1TaHRDNSVBT35+SjtiSGo/Vj44PnxJZGk5Q3ZXNC4ud3Riai51dGJvTEx9ZSQrYG9zLj5PM2d4b0heeHhnU1NJVkxFfHZ0Ym4qcWp9ezg/fTVwVldSNThhNHw+TmJvW3ZuMF5q'@;
put 'LChvdixHZ3xNZXUvPlVKJVBJM00+Jm12c212Oj0/MiFyLjZKWnQlckRRdGVMSls2Q2RpLDIqQ2QsIVpTblNqI0RhRDQ/dzFiLk5OTDUufFdETWZQTWduYm9pRV46ZElXQW4+X2YsQkBFKjI5PzcoKXJ6aFZRY09DQTY9ZUxGJm15Tk5GPUp8cXIlNyF7Y0h9Sm9qT2MsKlI6PmwhajdCZGxxczBt'@;
put 'TylwVG9RNSR5RkJeSG9KQnhVWyhGa3Q5U0hUKDkjVkB6OEkhSXlsOTJJbzZGR2BVNVBpVi9QK3EkfUheaDk1QmpHNDZyPjNZLldvTi9gOms4Tnx2U0tWSz4mPnRNNDljJCRJJDNMNWNLPz43els8PCJYRkBvLyE9eE1vfW9Ld2E8RTVUUkFfI3ZGXjB5YTVXZHdBQH5yRn1va0x4dklQRn5MRGdU'@;
put 'Sj8za1Zmc1NWR0ZaJGMvSSYmSiVFbD9wbStVXkppclhSUGR4WV17ektgej1kaWxlc0JjV0ViMXR4Jjs1aCNhMX4yTWtOOTIhKmU2bC4mRmouQSssU2pAP2AsWG16IWROTCYqfFt2NGRJQHt3Y2c+KEF4Mm1QaFI4ZyIjRGVaOFBWQGxSKilGIi4wNmFVdzF+Q0UqU0IwclFKZV13NDlOb3Z4cmxX'@;
put 'S2BMaiJHNUE9NX5NQFo+dkckSkhAczViPnBSO3o8JSleRFZvQnNqa3g9SVVHKHhFUVR3e3d0QT1TX11xbSV3U1V1YlVLMHhAdXNaNF8zfHRGXXNSdiR1Z107N3sjWEBtd35jYTJKbiQiJiFFck4pYXJqI0debExlVER5eEMsMXNyPzEmdGlmeHxrKEZTY3NpeEJJVXVlWG45XWpBKXtqR1h2O2dg'@;
put 'bCl7VX5hfV9yOUYsQjEuJkJyWlZQLlN+Pztfc0crMTN6W1ZFJG5nSGV3YTN+MV5kLm9fZWVQIyUlZldLdnglRiZvek40bVlvPDZwVUd1S3ZjMVs4VEBfL3cvVWlvdEVIQ3UucElqKWp+KGV8aClPfCEoQzlOOiNnR0VFMTRKJEo1I3ojVXVuOTBkTFJWekZoJHhRdC9pKHlZb1FKITtuMnNBLHV5'@;
put 'PyIzP24yKlowJGMuWX46cSM0Uy5gQj4qMCFoYFI5WXdrXm0hbUcpYl8xezVNdTxTM3xFJWoxOWRTb1c1TSRab1BrRWdoW3E0XnVkc0chP3FhPWdTXWJePXFlM043TSFIcWo4NCFJTFMmaGFsOGQjQHskKCg/NFVLKSVfQmM0bEQ4YTZVaVZAbHtZJEdsJUpXI2VsS3FjKk89MXxHWT18MiNjXktx'@;
put 'c2NPRVdnPCRpQGY9Q1FeW0Q5cUl3ITMwbEZmJjRxU1MkPCw8PXFOR0pIT2IpfHxBZVZTKE1YNn4+NzE9M29WTD1rRSFfKTJidXxIYiwrS1pMY3Y+dll0a0BtPjVqZl1jfS9lTXV9X3ZzJGtyN3BhISRyO0wyTT85bFR8amh+OU42S1MhK2h+TCRxTTd4X0h8QUFDOXFbWlEvYmlhUi5SI1AmP09V'@;
put 'KygyeFVFQ3BvfGA6bkNHU1hKSkkqTXI7e1BhazZxPU1PZXdAWmZMNnB6UlheXSxAI014OmYoQSsyLzApWi8jWVUuYz9McGNqaEdrb2RfQUtyL2c1VUNTKCFnJUxuNX1VOjwmVEJyPT0lKFEpezcsRUd1ayxZTWowNCghRmF1VWVbIj9oMTowLHUuT3x7YiFjcXlXTlF7OT9sfTk3JSgxZ3pfYzNe'@;
put 'bUpYKktba1csMyJXMCl0Sj1oYmR0TjoqIT1OaylmfW56VjgzVE5eMnZDdCFiSjdCezBYe2VbKX5nbC5DbGFHVXFlRE9XKVJnam9wcG46R0VXI2cvUUl6YF49JHYzQ0V1LlkqdF4mXWZyUmNQOzBdJFgzOzg1T2AoNmdTT1ZaKXd9PXh7WUE9WUJvOTYkRSgzc2Z8Vjg9bFYqSEElPTAwMmgxcF4/'@;
put 'Ll9mYFFlIl9GUFUvaEo3IVUhT3BJWHIhXip7dXgucCtfLz0xeSo6RiE2MyQ9RiYjZ0BXQkZmXyJNeDloL3o8ZyErQD1dPVY2OnxjcyppeGVkN11NMkZiJWF7ak4zYSZZQyQ7S1R9VntSbF9ENF9hPl47S0NiUmFOR2UiPUN3eGZxP0l0IW1hfipXVXFYXz1veGoxM3x1X2JNO0U0YjVPLEZHYV4m'@;
put 'RW52KmJOXixFVEYzNDMjZWxvWW9TIkYqOEtsOU14KEcsK2ojb1VyRTM3TCVuTzZJKV9hfnV6IlVkZ00qVkQ3eVBtYkhiX0RxQmEqbnI6VUd0ejclQ0BWYks/I0BnezEqSEJpMUZUPyF3dH5aJkZIbkVGQjIzKEBQTHxOL29INDxDez8kREAocSxMPkQ2Sk0reUdhdEMvI3MyMFdAczkkeC8wVyk/'@;
put 'bmhRJD4vIiZPTlcsT09HJHNWUSs1TC5CMEpJTTQzTHBjLzlQS3UiNnR4KT5pP0doIj9AUnd2d0kiUC5pQ1J8LzFrOllRKXglcFdGQ31JO21zRl45YlpqNTFCLE53YiQxXiFiPUolfkFzKF12SWpXdiE+SGNMUHgra0cqaT04KG1POkQ4UVFrREwsTkhwfEpLIlI0bVJWY2JeQSx5dCFfS1dkbjs1'@;
put 'ZCQ7IyR5WTNITUlZdSNabH49Y2E4YyMjeHRMRmI3bipnKTlDSkZxOlF0e1NpYzU9b198O0o5YUZ4QDtHU3dtaW0oUixFRyw0JTkze2c5e2JxWGV8WTI5aVUjSCxVSzsmbHJfIShaVXk1M0NFdXJOelUuc2p4LzR4XlpQJFJ+UX02LGdzfk5uTDJSREpWIiJxUnBoQEImLmklSH1YO0xVPEk9Pj85'@;
put 'KGE4eVMreUZseEUibmhFbVpSbCI1WncpUFN6aGlTej9+bTx0MldCL352KHl7cm8uK2NgW0FfKzNTKk0mVytQWFo3Y2VCSHIvRWw5Iz1QQX5lI0o9KCM6IitrKCIhJVU1VjBZZGBvMmxAelYpYCVGKzg2QmQxTiFrW3MzKVVLL3FkUWVzW0twYVtkIUk6ZFd6VnB6VGI0bU5HST09OVA2b1IrVHlO'@;
put 'fmJeaFZCSCpDQXpeVVBBfSw4eWlMeUZ+dU1vNzFxfXdQMHdRI3ZiajsreTcrT2BqbS95OzBFWS5JbVp6cmI9X1VlXnwuSjZsQDhrI2JZe3I7bEBqdiNGZy9sUkAhP2RUO2lQb018ISg7clZ5aDtadW0hci8vND1qTEJNdHVAI2NTaXVZaytxSipOV300S3pnXVBfSDRYN2ReU2NFeFF6ImFgMXtf'@;
put 'aSs6UUZkdnF8RG4rfVguOD5mW3dJaz1QRVNAWWRMTyFZZlZCVX1ZfDBfU29yYHB3UllmYlgoa1RDUnBoIWpnNXV9RSVJW3dMcE83aFlXbjIlTmcsYyxnMTNvKjU0NVtDYDpWVERDKWpjdTckLnFGc2BeUSxuVDxdckB2cCVqJEdCX3xJeFZiTDtMNChQTTshU0BpOyJMXzlCVVp6bUJoZTY7VDlE'@;
put 'dCZNWXNpTUhnKk1CWW8/aV15dGs5dFtxXmF3Xj91RHBUcm03WW1zQyJ4MHBhbXM/RS9majoxZ3IuMF4kLyQuaktpKFU2e3EoU1RPIyNaLHo5PTJ7WWQ4N2Y/eTJTNnp6c3A7NlVSZVBwMmVZZjgrPUpNXVkuMW46TGl4YDt6YzlBP0NlXl1aTyk7T05heEx+enZGVjFXVFU5XWtGfXwjK35Tfnxw'@;
put 'YnRDdFlHVFh6MElwey5nL1A5VkdmMltzVUROJW8sKFZOVHheNWNnfTxzPSwkcT8vcHkmb2IyY2phVSUvX2w3JC90P2x7SmtHTmN7RUV5M2lza0x3fSlvelBHRFt4OjwyRVhJZDVNaVY8Xk9FTj1YQjkoMCR6X1daKU9QRGVZXilKMGVlOU0ud3JbS2pTeGBaNitsUThZK1FqajIycmVPPS98LEpS'@;
put 'LzwsYzd6NCpCeCV+VCg0YV9UJCE0K0ByVEYmJEVsVVl4eHBsOmAoYSNdMSpmfi85PTM1d04qInRbVmtkSXYoeEc+QClwfm95Z3ZWU3FVcSM6ckozSj9vIj0uaE1aIUo5fi9KVUdBZVAqOkMqWmdMVH44ey9KNU5GbTRrbWlRaSlFblQqWz5mOmMlOFB5TUMleWImLkosZiUvYH1VSkV6K0csekou'@;
put 'XXpFKHcybHF9bmJoKlR0NEUuYktVV3NgfT0ldnUuOi4zS01JI29kNSxSRzxWfDxWTi4mJT4hcnslYkElNz5JS3VtPlorP1lSOFJZT2l7VTVnY0xUSWgrZkNrJnV5cVk4VGRwTGF9bGdiYTJKYDApfCVSS282V3YmQT1EKzhTNkRse2IuJGciQERiSlJwezgpNGNLeWg/WHI0X2gvYDpeWjskXjNB'@;
put 'a3RLQDI4c0Yldl0jYWNUWShYXllxdTVMIytnS3pDeV9LIVtNUiMzbiRCcntTYy40M1smezA/PzhUTWRZNTM1e3hlSEJkbHBbVXM6ZndvNElhcGpbdHQ+YzcwajVgLH5qK1VzejFjOT1KKiI3IkA+MEw3WSYvRUFvbk9jemZpekpFZFIhJDVFSHVibzVEPTAuMWt7PzVIXmpTMTU1RkdFSUwyQFI9'@;
put 'elpzTUFieSM0XmI2SFpbLGBBWUs5alVnY0RfJnJDO2JkWGZTNmU2PUdlMD0jVVlEZ0l2d2ptOm1LaS5YVGZQOzFVM2AjODdlUWZDWSFwcExKa1VRY1hDNmt7akd9IUhrXjs4dEpPYnl2dXBHby5Sd3lXTm94SHo7bDU9eHUhQWpUTjgvPiM9amQsa01BcllVUWg5Z2kmcVlQJiNlY19VPXUkIlR5'@;
put 'MHRoQikzKk5MOi9xOC52RXRVbk5eOGxidEEiLHJxc01xYmU+S1pwOEQ8cyQ3WW07TDgufU13OSMhbVY1VllDSVNBYkNjR2dmW0RUWVchUC5wT2ZTY0kwfkdDbSJ4fTVeJEdmUUlVMGslZnhRND9jUiQ4OXY3cSIxMH49ISx1YSUjaGlzQyE+RCNfK2NaR3ZubzN1RTJARSg5Rmh1TyxlZ3N9U1km'@;
put 'XWMrISh7YTtaTEAlXVZLT096TFNrSllTXSVwIUFddzMmakJAV284WShkNTsiNU90VGslNENkbVRHMzNXQXQiK3hnWz82KThXME5fcXxwVzBmNlB2c1lpbyM8UTYwemQ2L3c9Qi9pW3A9STtsUV9TajZUUTJXQiptRCVdU25oOmx8bUlxSiNJLlJ8L1AmXUovMyFbZyh9W0MlV3UoMHhkNDIlKE1A'@;
put 'NWk4XWFBbX5PPVYoeiV6JChMJllqbEkzWEo4bitnPExFRkVXaFdjVXZRQSZNKXVSM20wOTpTUTwkfWtrNC9rIlg5W1F3W1dkLkleJFVuPXQsMUdTSEdxfm4oX3hTclVAfmVjdUliJSFQNjRkZWBdcUx3JkYsVEpqTltjL2pSaVc9ajxmKXBocyFoMkFKMEVvYmRKKF5EVH5LVVFWKW5wIn5JcFNW'@;
put 'M3xmVE9SfDxCNyxwe1hUZ15PRHd+cilUXStNPFo5T3M9aElQe0VTZ0c8ITJfWEpEe3pTOClaOnpiJm18KjF0cVdyWkp6Tz87Wk13TGE0bi81aks0Ujd0Q3ZzITVkRyhWW2ZYUkNXIzUiTz8sdm9waURrdHk5OCIpWHhvcCxfPkhTS3U8cXp+WVYxVCY6LmNVe1swRlU6JH5YdyxaYTEuXnNBajxp'@;
put 'KkpIcT83Y31FVnpiQ143eVEzakYlYyE7OXhvbGAsciY1ZW45NE1EM3ViRGc1WDNbRl9yPmtDfFo9Vlh9cz1dSHJ2KE9RQT40Yl5hKHwqWzxhfkFPW0FdISYxTDd1UEMsZkkzLE8pUyxnczUudWU3JjY9X1JWYGYrSiJbTmMxZDB7SDhUSGVTR3BIVVVjKFAiOllZRWRDXmlGcCQ1KnlWMFpSXlE6'@;
put 'Y3x2eENTWTZJRUhLeSZRUzdPfl1ST1hWaVhVPWYxTDF3T3JZTjlPJTB1L01+PyJ5NWJsKVtdTTxqUmlhall0KipZJFg2W3BtTEhDdy9TU29oNmdFbiJBY1V3cWdYdjdiQG5jVnJlRGApZUhWYGp0THJPbyptbGpXQFFXYXg0bGolVWlTeXdoQjl4NEhMS1J5cyloMFtYMlpIZG5bdW0/WkdAbXBu'@;
put 'OzJbXixdXyYqJDE9a35BIyoyQFRlRWZuY0Zrdj9FUyt3Y0Yxb0JOL0BLJWQocWN3TkE/ZWRKQ3xFam1WdCRaPDc7XlEoaDZTOjdmUWJJXm5AeDBNazRjfT1bT2V8RSpKW1EhYytxI2tNY3RPSn1uT04je2d6S1U3ZFZZc282JCQoLjUsPEgkQWA4Q1NzL2RxTjE3Q1NoLllpb0RMZypnZTVFMGtz'@;
put 'SGRqN3d3WGJFOikvOHcpQV41PEpmQ2BkMUNffnZ8Szx8YSlRZDFKZzk2dFo8PyN2cTRCRFZSfSlZMkJdIyNvXWJ3XnE5LG9jWHBgN15xPnduczlsYVNSbjhXYjw0O3dzbVBmYUE1O3tJciQxQS9HWit0O2BzVWg/WmlmKzlATlRJaClIY3Q9emIxPTgsV3RCS2cyeSgqcik/WGB6RFhnQV1YNkpK'@;
put 'ZlU9P1tlcW06R1lHV2JkRT1ROHlLMG14YkE3NCV8UE5VXXx8W2Qubn0xQj1LNXlFRyExfl1xKmc8RFRIaWNxPmppM1J2fSsuK0JTWjZyUUVePDw6MlI4b0RwPjZDQFptZ0V9fl55bmxZdigqZ0I/bj8hKit4QGxAVE5jeiswKjFKKStNNGRMPV03LHpFa2wsZFssVDBWV0NWNl9CKSNsdEJaJCFW'@;
put 'cVdHUEtfYVhaR0hHTHhMfXFsXiQkKzAwOylkdChKV3dzRGY1b18kPFJWeXBIRWN1N0I0b3FCa2RDLERid1pLdjZEUmRLYChoKj5bNDBFYWF4MCZpVUMxN21DN3hUOUJpYkpYPksmdUAxayt4OjYpUUc7WGMqdzUoPXVQO1g6KCY9biJgI3BXYkZJJFI/OjxsXVFBSkw4aHw0I2RMSDpYa1RQcysx'@;
put 'Zk09LGkvJGA9dFM0TiFwaFJoRjBJPStUKzBHKHhBeCJabCMzZV96M2VGSSs+Q2FnMXgmLy55ODh8cUZ5U2pgRC4jL0wxaCpmKEFpO3NONEEuIVslaUMhe3cqKVM+Wj9+Q0R1NCljMWAjZUFATVJPZklXJmhSWChsa1M+OUcwVD1LTytxJnxSMHZnTW1RczI4d3ZsOHl8M3V3JWh3YixzXXQhQGJ6'@;
put 'T2hsZ1p+N1RfJUpEMm85I3xkeFhlcW5lJVpZRHlOOltTPCtIVlFSK1RVTix+S2YhSHxKQnlsYGl2PV4xamk1R1RRR2Q9eCJ4VkhAYVBbV28pSVR1RWZVd2U1UmpLRnRlY0hwWDdzKkN3P1JYQW9TZEorYXhkNHtbUmAkb0N0KDVOPmwpSDRSR0UwcldaTyouWCFdKnJWNTpqdiZgPWhrNjgqOm9x'@;
put 'LzBfQmwyX04lVEZyVWhIMCp2eilbWVQ9W0JwWCZOblN+UVNadj52Vz15bkJZMVVMX0chc1dyP3pmfkksam5KUmMoaz87IWQheUEuNyVVa0xxcFVZM2IjeS5eMU5EanI2ZWFxV016cT8+UWl4ZGlMLmJJdkJaKWk4ckJrRX0uY0dnT2kmaEFtaERYa0hhLyVNXytwSVFMVFhyRUwudV1genIlI0VD'@;
put 'enVjXSYrM2RCTnZUT0UiPH5NczxbdVIjQzE+Pn1JWFhre0NaLnRBczBJaERGZU4qfEZAWEhJeSxldlBPWWtKYnJ+KyZsLmRBPXlbO00kRi4waSJhXjpQe1htREtDKVJCZFNmUEJRI3F9VEF1bnglbSEwdm5oTzs7KzAhc2RKcD9ZRXNvU2FkKllzLkZQXzBPLy97WUpNJWdEfiooV05lXiFiMHFv'@;
put 'OjtRciNuRiIjXUt3NDYsQ3d2QlcrY1ojI11JbVc1RmM4V2pBRnpzeiYod2psQ2NtK0ZHSEtfI2VjeHkxbVguMXY7W0MyQURdaClxTyVQaXIqa3x8L2B+MGhiUzByQSI9T0pLeE88MXp2JFl0VEZhKTJ4ZkxxbE43SmNGWm9yYys1Rkp6QERDRkh+YVQoV1lee3NIc1UiTkljWn4vSVNHfnhFMG8k'@;
put 'VCpZTDAwOmtMW3FkbjwsVl53LypCRm9ZdUQ0JTRYY1Y1IWFjQC53UXBkPn5yXmcwRWd8RlNVdWA6LHVNZCRURmBJdjN4PFRsUylNRStNMStIS28oaTNLUn47Zl8rKjhUXX1wbGtuaDluS20jeGxSWkU3KGk3eyQpOihaWilER2NIaW0lZmhfNnVJViw0OG1DJWw9RHZ6QmJrLnNFVGN0TzcvImVx'@;
put 'bCVlLjAyO0BMRmx0W1lqJFU9aVZYUHY4eUJMWXVSOldsL0Q0MClxbEhdO31SMSRiWFJiKSlCQXJELzJDSnB5RixlJCE/e2dBdChmRX50SCFXJkd0RzhINX1NOlVMTHohNSR3KXluWTYvUlZ3ezEoSmV2M0JzMF1ZMTEpa2pLcmVvfWx5Tn1IaDRgUCt7TkVsOUNWOmJDTkh4YjFbdkwrT1JUL1V4'@;
put 'fmtgbCVRQmNOYGtyWzV6fm4heyFsSkpMTUwldmRUUSx2a05xWSMmZChrNzt4PGNlMjBgYzRtST1uRSFqfWkjSXw4RWFsMiZ2en5fSjtKKGQ1VlhKUUZGInllU3JAVUIwZG04fkl7OnRJdS9BWTFvR0BWR3JESHJIIlFtZixCPDNySnciciQ1X1NFS0xlWFpSKiRLb2ptN3dEO0ZMe2hPN1pjfURn'@;
put 'SmRYYXhgPHZkYlJSVjhEKlglclFweykhNjd9Rm5mQl5QO3MpXyprNFUwanxuYzZ+VkhTOEU9JDIoWjYuQDckKWJkbXErRTd2JVIyeWpyfjRQS0BDKUNpUkkyMz87OW84fDhIOFk5WTQxa0FzVTY2WGd4LkghTk1kNj1gJDEiYUJ5IXl8d35WVzo8Jj16TnhvTnpJbHNZOyh2NXR8WFMpcmQ9L2tj'@;
put 'P0JCIXBjcVIuK0FSYFskW2ZQWXZseT8jUGQjdTJrIk5DWzJWOV5RXn4xRSksLmN9IU4qeEFbKXZPPyw6P1hrfiREZEErYmZ2elR3KitGTihKcS8hdm8/aVg9NzFETU4lWV5efDFoJmNkeTNZXjIjeWgzRSxIPUlyQTplVkMlfT14I0ArbVZLdEpefjxBWUhPTyYldztuLjZsSHA3SW1Nbzp2Il9N'@;
put 'cHhINGosOkRGSGcyNmRbWS9UdWRaXzRBeGhCOTQhMCJsYD81REhUcCwyVW1SVy5qLyVUTUpGRFo1Rm91ZWIlfXoiTU84STN9dG0yYTMuS2lySFluKk9idT9YWyssZzw9ISxXaW5KcVUudEJpLiNbNkcoZWFaan0yZ1V1NDU1PUl2ISppcj1IM09OYEUwKnNCLC9uNEx7VjZLfXtfJCNvVEQ3b18x'@;
put 'Pz5Wb0tmRmEuRy9eOy9zdzo2YCMpcmxIUTo1P01yWk9DTjA5RjhSYkdEeCVuPTZ9Iy46RGF8emt6UkA/Y2RESWh+dWd3Mm82VDdScUIpWlUvS1Iva20lTyFPOHJUdEtaPVoqYitUbWRAZ1d5d2IvPFlIbWw1TjdnYjUsU0osSXNscSpoRGNEQDo1MXVVbi5kUGF5OXJ9azQqV2xQeW02JTxKPnlD'@;
put 'UCtOXnRhcSRFT3E9RCIzPXtZSlFFOHNxJWExUzRiWllSSUpqaDRIMiZNVk94T0Q2KEgpIiU4MkdZRm09YE8sc1N6O1V7KEJ3VlNzaEkoP0F8c0FGQz4xYiZFP29KMChFRXpdVF1oaDsuKFdjTkY2MVU1eVkhNj8pZnhCPTtJVEh8VlAhOVdeeW9jInkzTHViZ20pTl8kRFVPRz5vbjkmSi9oYWhr'@;
put 'I21YNGldIUQrMzR9dE0oWFpJL0RpLltYOEc8LnJGUnNrUCROWG4+Tk1uL091ZGJLXytaYlZjUjQiITU/Tmk5bjpzb1ZKLjIjJVJIM0pMUU98JCUqYEV2bDxSUypiKl4iRTJ7VUNwZDsiQVBhbEFPblBXIVRpL3NLXWdhKXM+O1FgSyRNS2RVSGJyX2Y0dSlPcCVZb1Y6czckRG1NZVQrcDM1RGku'@;
put 'O2EpU3N9VElDM1syNW9Jei9KS1c5fig9XXx9VShmOVN9NDQwP1s1LzZKM0BRW3xDN18iNzhlOnRIQ20ybytnTz0qYitCZDkhIWI/blF1MF5Da3J4aGxDVjRTNmJpKmxnPnZbcmokViFQZXdTQCpiM2ZDPCJTWDtOT0IhcUxoYlZ8YVs5UWlYNCVla3h6TTteam13Wm1RUVpUTFhvNWR5cj8sMFJ0'@;
put 'azxRKSMzZV1TMmVbO2AsSzFgQjx6bihee0szQ2Y5aFoyMEY/YT5lUkV0aWsrQnhHcHB8JHNUa151RG9vRkRBbyFlRGFufmxbb2NMNDhAQnFCRVlRIWxtfkw9d0hhVDR8bGlBPClmM1IjdzRlL0AhbCxmSXwmMG58OV4iL3Z8PSxDO0IuanZdKEZSWDpueiUhOCJoIz1NdlA8Wk5lcHAoNVo3N0Jk'@;
put 'ZDtAYzR8VFMoWm1LPGkxKXQ8VThzMF4wdTdOZl9+eDEpP0J9PDVGfElKfSVfXnlRfkk4eD1ySjssJi8rRC4rVDtsai8kRmpScmJYdn5pWy5gdmZmS2hNd29gUnhfWyNDVTltLHlpZmwkI0QxOlM3SHpeaT5uW2pFVC5xTVc7LCxMVUVwWGVEWThefWlwO2VqUUhXTCtyQEJGNX43fVkwLH1vV2d4'@;
put 'VV5Na3tXWipNajlveiVwUzw8O0V7YDRFfE1VbiNeKW9WZFZHdko+flJOYlE2bFFCT3x5T0BARTw5OCtaXiVaJHpwQnM/Q2oyY1JBUmUjZlVYa2k3YCFLMXlPelJdL2deeVF7VUlPMWtRc1JbfU90LiJbaTcoNTdaLzhBRT13KGpJRDxhWGxGUSxJWkd4TyxTXSMuP0R3WWdjMVppZkwvZjslODow'@;
put 'KzZWUjdjJWJufjwrV28mRT52PyxVfUZvUzkzeDglRnJJfD5aRTNje25IQkVvMHIyIz9uNDBgNlhHMjVyMWpWbHVfWCVsUm4qdClvM3ZFO3dtcj0mI0tPUmBLMj1GNUxjKmtSNHhnMUJON2MpeVU8eF9rPUZXKDxDaE46RyRXeytDZmlMd29jU0tzMUZxUU9jVSoxN1g5U31ob1RebTo3dCNgcS9Z'@;
put 'OGcrN1VAUzEqVWI5WWwuTSY0YEBeRm0qUFFnZXpabFMkTVo+fG9GXyV5fmZkZVUxYU4/aHJlNytsb15XU3dVT0Y9b0VzUlNAOUtAK3UpPz50IVRHJmZkYXAqb2E3eDZJVCZkdlAiaD1aNXh5ei5aSzgsfVAwfl9hfGAhNy5yOypRPSppLDF0XW9JNmVSIjxraHpmaU59TVtaKlNgRntuKHVDeUtE'@;
put 'Yn1sKXJDdi5nREo7TkN2RmtpMiEodiEoWUU2ZFhIa3loR2UkPipwU1hqeElKQSlMYHglRkViSjFDX3Q0a2YrS2k8b1J0RiI9dzldTFImX2p0azJGfFd3dEdge2ZzNkNxJF55JkNtYl8sPFVzWVNAQmddYkBXUV12ajNrbWwrQDE9RT1VSSE2WVZwQE9wd1ksciNqREZRe00rNyhNKzBnc2oiTUgp'@;
put 'MkhbI2pfdkl2O1Bial9KS3EkeyU+OnlpZko2IVgvSEVyLz94K2F+fUVHJnxOfTk0IjoiJmspUXVfTV9GWilzSCFZOS5MVV4wcTpUWFNCeEw+Vld0bUI4Z0IqQiF4PCEkOGFoYW1rellgSjskaEVqYVEoSi80dnd3ZyNqKUo6Pl1YY10yPV9VcVB+eVYxbFQxbHA/UUJRbUZ4WTx3aStVVUxXeS9k'@;
put 'Wlk6YlFDeTRLNnhEPGw9On02bkR9fVFTPkhzNF8qd08pNH5uI25VWk5uTHtyfkI/JDBzIWhWIXNSTVEuZi5Se0tiI01ab2BVPjg2OSoyVTMoQnQxLzliSTdEdXhAWjhSXU5QOn19YC9XZ1UuTGQjT3szQHBNKkU9L0RXTUBEUyI2IVNUM1o8VHVBWEtVVHlkPCtYW2JxUHwmOm01OU4zLFVnQFIp'@;
put 'disweSReVzk3cHVYVi5bQHgxe3g0OjtIYXdWc2xOcltOR0M2KHIwd3I9Izc1YENPK09ZYVEwUm1iNTFod2V5Wn06Nl40XzUhe2AzOnpMcjFjVjZzeX53dXhCKF52LCY3MD9gLmN6SDBXNn5FIWhnTHAvRSxZP3FXI0M7R1pDZlNpdGRsMl5sUSZNOmZFNnZIJFVEei9FWFgiUk8hWkdPd0R8PW9B'@;
put 'QXs5fVZHMyx9OW0vaCwlMl0pSjNVRiRmc1hVRC9ZNTAxRl9DenhwWWI9dDNTfE06bWhHRFtBYiRuMjNec1FEM2IhfEA0Mmx3dHNDUStTSlZCNyksdWZyUjNjeSJae3pgMEspQTxEVDs1XVZRK3YkRU9yUHBGIk91dDE3Ym1KWD9DbFJTR1YpMSgkNSFdKk5QOSV5PkovMUAoO1JsRytdP30vbndT'@;
put 'Vyw3NEFRMFJpO3c1VFhLJkFRU1ZQW31KSz9lYXdya2JvTixWLHlvanwjSHE3WmhQMlhOaGF3ME9QMkdCMVh9ZlEqS2R0WHhjPEUvJEMuNCksc1YpQm14b2BzVlNSN1srellqZkxHJm8jeWF1N3haMWlBO1lyM2E0W0Z3XktkRm5Eam4wQngmb1ZvYHxtT1BWSSk5bjM5cXV2dUk6Jltqe2hsQ0h+'@;
put 'JnJhTExyQDkrPV9AO1JAIjNFSHBMdnhWcXoldm91Mm0paztaVjExM1BHLkUpQ1pKKSZ5SU0qJiNvNElucDI5JXN2XVcoSUVmaFlmMD5xI3l2VWwmbHleaSZQQ0tAfTIqNUkscU0icTJvXWZ5IS8ka3VFRFN0PT0hMVRVTGRCZXc6MHhYTmwlJVB8Rjd+eVZOWjBHfU5UMGYxfGNXMj9IfE18IyU7'@;
put 'QT1oT2BERV1Dam9iWUVWRUxpMVFBd0BxUCh5eFtHOlJEOU06cklQJSQoYj4rLFBxcGNBfWNgNy9KUHlUK2d1I19SYHJHKj9WIk45RmBgbXglL1c/RkgoQWlkPDV+MTcjMUBGdnc2OXBbInIzKl1BP3AiNmU5UmE+cGk4WiRvWFYvNzhMM0t9ZUAzUEoqKlM8L1t3X1h7XlF1ZTowWHk+X3V9P1Ba'@;
put 'JSpdVlJxSlZ4OHhEYV1+PSxBTVAzaCw8cG11TyleIyp+SWBCPk4oZndZfWhxMTopcHQrLldQNzttbk5jJClGPXpINztEOF1re34ubGxuSkQ9fHhHa11TNjpkUHliY2I6VUtIYH5lcTg+cDJvKno1PmoicFlKNFpUfHU8YDE8bTQvN1g4ND8uSEghOTRqIj92UEclUStAampGSjVpPF8xbkI4Mn1V'@;
put 'dzlScUxlU15MT282X2RgXllXZDskenJ+Vzp0Z0I6b01PTnVNPVdNQmZabGhQIU8xYzsoVmp2TGpnIVZKY0J0fj14ND9Yd04lc0dAR2JVWDQjbSNxaUlmeTo/RFU7VyolVFpZfFMmMUpMQyxIT3xISEB+MyIqVCJ4QFQoJjJjNVRVWD96IylPKSVeMGxxQzNVQzAjQzEsVSNZM2hIby96MDIkWVQ5'@;
put 'KCtmZ2Ykfk5hW0ViSiljNUQyfDk/NjhwTWlzMzk5b0l1aTFHcGRWKml7UFdtMXNSO2JFe1Y1Qzthb3NHRkcoXyM8fCFCdDg4RGhsTDpCemFmS2s5PSVgXTxzV31WTz8mQHU/LEBzNT9TMWFoXmhfeDcvKzNXPlNnNl0mSE9KbjJGM1UzNHVKLG9HWmBsdl4oRCxMRldGVHpPQTY1a3FqeU5yYV9q'@;
put 'flsuXzkiM2Z7IzcsWlIlXmNPeHk7QEc9JFooIVhaREVgUCooLzZuQz85TVNWdGQ3eyw9ejdTVm1+Rm5ieUR+VzlESz52Q2lxSHIzIk0oODFnXV4pSndDK2VnUWhKUWJodlhaTmpLZEIqR0MyXSl0Y0UyWzNlej9IY1FqPitPO2JVfT9USm52XyxtPTVJTUVqRl5uJVpbSUlYMGVsUFYhcGo5OlBI'@;
put 'MDBKWS4se0A8eVBObjE3cD44QFE/OFRAfHJ8aXswbGJ1czw4MUQzXVtbRFImbV1JMUA9bT1DU3NFcCl4eE8jNGIhYVdyVD03O3cmaiVXbz5FTUpdd1NoPFBaRStGWih9WnJwcXIzcmA2NWxufnIxSTQzbTRKPkNlOm5RWXViOnxiK1R2V098Ni4/dWNhInN7blRhd3RSfjxGRis2XnFZJmEwQnVB'@;
put 'QUN9YzR2dip1XyFdNyluTWtHO3hnLkdMM0ZDPT4/VFVWM2sjcF42ZXhlRT9+OVltIT1SXlJxL1klc2wlS2ZXUG9ATkY6I1VKTkBCd2U8JCY9WyJqLmY6QEtTKnVoOVlZT0YyJG4kbyRuODMlfkUkPSNeMEBDemxZTTB1RDQ+IyJJMS9lQ29qbmxBJjxPbi5JZHNbbEZ6PmNIbiEqcEdZOX5hb3VQ'@;
put 'OHArZTJ4UXhWM2N1WmZIMXUxJS9GakM4SERTXWp2RTh8WXdTPSlFZT97S1N9ZXJtUzNESlE5QGg6JXpbQDFsfmBTLHtIRH5ea3wmOyxZaUdLTk99VmlyYVosOCMxLmErX0MrJE42SjckO1JzNy5ZZk9AIzZ8fEU1aDJiYk03ZjwkUzh1NXBxQTxdJUgpK0lXS1FUZlBkcENOUjk3ZGRHbyxmMSFC'@;
put 'K2whclclXjkpcWE2YC84OGBFSFhNTS4yQm0zczdxLkB4JnNpfSVyeTwufSo/alZNYlVAcilzIn5NJipSdTxGcjpCYyNra3ZqVUtVUCpIKjU9MV9sInxwfnhDZ0BNLH1uVWlrIW5lWHAkcH41PGx8SyJqNnBeNXQ6PXc1TENXVjY1T2dXYVBCJHRDI1B9S3o9SVBeKTRxLGYiZSohZ0o7YWdablFV'@;
put 'RVVLZDRXNjEwTEhLIUg3LnI6U1hmfXxHNTFtJCF0NnVNVXRQOCk4WmpSc0t0O0E9XWchYF93N0E8JCFZTyRPQGZJOnZ5azslWWFHLyleRnQ9cDxzZzN3M1FoN2B0YlhkY2F9JSpfNFB+dCtVeT1nIkJRI1pTUzNMOUt3c005QzlndFA0bltfakk4NjQrY2ROe2ApdFlhdjRDY3pKbyZzJXVSWThG'@;
put 'a1BlP1ZLUEUwcVZacV5zMiwlTnVIJUNlXVBJUHl4flgzSU5HdGpuSmooRlIvRm97OXB6cVBqOFlyMig7fjJ6VTJzbHo5e25eVGByPHVhQUNpLiFGcStGRGNKUFI9aH5OZ0slVnYvUSNmRCFiYn1UZyRgTmE7WCF0UU00KSNNVzhWbGRtUjI1TWRrMFNOYSs8MlQ8eiRqSmZPWjovezh2PGE8JVUu'@;
put 'WXlOM2Q7YFcrIWN9dyJLV3xFUyl0JGFGODVna1VsKltEdmtAYDQpOVZIT1EmI0c9M1JNVk9Fc3tKPVU4SCU3U1NaKlZEVyElKSJGdVR5dD4vV0I/STFJJmZ7NU92WTpTbmV8cndJNk1gaSp2ZEZKZiU6ST1RRzdTY0Z+KWJ0T3EuZy5BL2NKKEFnTSx9P1t5US5BcnJtMitsU28zJF1jczlsaixt'@;
put 'RGlVZGImJXZ8MDlYJWVzcCteMTg4Q3dSbDdwPms/KGswMWtBbFpuPGBNMTVdVGMjblpvJlh2Kz48fGZ1eVVBTEokKVh6K2olVlM+ZCUleGBVRUVaPWk3YHVabiVaWDt1fiVqVCtKIld9YSVoLE1+Wi5XdzxKailbX3ldWFpTOmNhbyslNUF0LntFVlUyYFd2ej8wYXB4MiF8JnJQJX40SEBzS3Ms'@;
put 'aVljfTd9XV5FKjJyQ3xLV2x7SD4zTGoiV1A1RDlgXmg+TT5tVEtOdUZrUHdHI01YOGBLPEIxJExYUVhQRTI2dVV1VmVMTVdQNzxDeS5abFshcGpyUXpjZlEiT1ZDVjwzZWFWM1hKaV8jQHg2SVtGbyQ8VDZib0JkaCVGISN6bG40NHI/SV5dUldkUU9LJSZ8W3hnakJYdUtCOHl8WVk0cT5ERUd3'@;
put 'Z0ZYKXw5XTlNPVNrISZ4U0R3Ky9mcW54VCZMbUVWNiQsL3gsV0VUfTluYV1lKkJbNEYsMzwoSUQsM21BSFQpVj9TcUAkRTYjfVUoenRRYW08dnVLUmZGQWFEWUcwNXpgOEhvbX1NRXx1NltQZGo9JG8kMUY1KUc3SWhUU3l2SlZiKH1PYkxlLzJ3O092Um9DJDFdSyRVNT9Yaz0kMT5odHl2NmFP'@;
put 'Jj1APCQxKFJeQ3JnfCVgeWpQQUtoXzNuSkhbUWFRcnF3YjFtJWI7QWh7dWc1SldwUHp5UyY9Qj9Ce3JJXkhHc3x5bXViOWphRHxfYkQqTnNxcyo3WFF9MUxqN01pQ1J4azpue0hGdWZaS0UiMGs1Oy4+R30oaHF5cVskKUgyJUdVSHp5cUxhVyx4WzowczdnYmBxKiN2enleTV4yeTBDSXU9PSs0'@;
put 'cTNANnAlY2d5fnM7b2FAUm8oTmd4dDNZPSNhYGlwPU1YUSRGVVIwXW5ZNnAmQjU7OD5ffkxHTzYpZFBKN2lnYmQvMjckVV5JRDROSGB2b244Pz5Gbl1XPXFRK3YhTjN7N207emFYOGBZez5xQHBkNWJlcSk6YXo5akdsIytNalliK2lwMmB3Zy5re2t8Wk9xQlRGN10+WStnd0tQIyp+OHMvaEZx'@;
put 'PG9ObXkpOUQ4OCtjc0x9W3RxMnRzLitSL2h7d006Si97b1JlLEtacVd0YGNdckJkTVVoO2wrO1lXNj9rd250byYsanY0ZzdBc115cjdCL2xPPFkkOld2KXVMUD5MRWNeOk1DQEw9W2pNaSN9Qy9pTW9gajxCLDZ8bmB0QmtUdXVwWTx3YXpAMkYzelsycSRWSEpgImJJeXZiWjRHPWQ5SGcmR0ZO'@;
put 'c21LZCYmPix9LllifDxvMTo9STAmL3FgLGMhSy5wcDEzVGtxYTQyNDJCO2d5WjtgVWcrOzsrMGpjT3FDKGdgeClbPiE9S1cidE1BMF5lPDhMNiRQamEzdkVfOC99N1VuPEgsQ21WTkBqM3V8WDAzUGFwNGBEYytaXWwsRDBqWERzMm4lb2d0VkZYSl9zSGZ8aEc4aXhSL3wvempZR1BRdm1aQlom'@;
put 'KjJPJWplPUtzI3xMZUV1TncrTmYpRiYibGhfKnwmSVZ6TTIwMWskV080XkhecXNfYHttaC9zZjolVls/WGRuT2hGMlhfbEZWNmBrWVc6akJbaUZgNUd7NTZPU256Pis8eXRxYDd5ezJgck55eF89PyMmfnViN2BBbCQ9NF04bGp+ZyZPIlIyTnB9W3xWbX47YzUpTztlcE1vJVVfeC4vayFJfmBr'@;
put 'RG5HcUFiODl+cFdyR3h8Zi5xVzFkdXhqbzV2VUpsb0UwWyl3WWg1JDYpM1E1VnRKJnRwZ1BvWzFFN2VNaGhkVCNVL153aWl0RmI1NUw4IytnSCxrP3NhT24kMHVRYWV1IVU9UD4+SkdjYT5tIUVTc1BQKEA8PmVLW30zZjk4dGYmM1svMWtDPEohTEQ3Y1N9ak14QTJTcjoxP11Zelc9N100Kkwj'@;
put 'b2hPXzwvNFFHNC9GXVhPdVswQFFpRytdcm1oa1ZtJXc9VU9kYWsvWmtQS2ZhOSVedHNjTmQmWD0xdFJ8alpmXTJAWzdXeFFWfkcvOXdFeGRXY0tfWzw6MF5ZTmpeKTZWSz8mIzkpVCJsUGZyYjdnWTcrN1lFQX5MV0VvfDsxYXlGR0kvRF8ve3Z5bVM6dF1ENiQpX0M2d3RBNzIsIUFrOEA/T0Ny'@;
put 'elJ+R0o1NjJubW9ke1IhKXZlK14+R0x0UiZIZCJTNHdYWiI/OyoqeWl6YVFiVGNUUFJTemQpc3RsKGgqZFkjaW96Tnd5NUFxX14yQ2FTMWY8d289KSpUd29NY0QvKFc2P1M8PUw9NiFCYCQiZGM8Kk9HTHkkcExmJmhBajB6O1ZxVl92PiRZWyo0MnRRSSpfQ2sxd0ZpV1BAYilFdikuOSIjViV8'@;
put 'MT5nITJmTkspXWZVZFQiLzdhbzFSKXNvL21Pakg4PnxiKSs+e3F6SEV5M1BEV3pYckRkcklePSxEKj1heno7MVRAPnFjO24mQWgmNVRbI1cycyMkUi9dMXZGRCtLfj8xQDlsU302RD14O31vdS4uT0NRZSsjNTJ7R3wyRT49YD1HaVBeNmJ+PyN8YzZ3TWlSRmN0TiYrfjpgPTg7YSl3VWI6U0E7'@;
put 'bjApc3MmNGlUQ0A3U3BKdVU/PXNpPS9JUCt3dj08dlNoP1c0aC5TJlNmVmBKfil4fiJeNCozTFB8cktPVTlhMksoQiJqfSt+YCt5RkR+TltiLCFGa2hhPkUqazpVO1BTOU8zPkR1N0tNTGErSjQ4X1IrTE1iblpgU1BtRVN2ZitOKF9sTmwoVGVCdl5qfDNTLzUkWSMyfm9yNUxqOkdYU1JHNXFL'@;
put 'PztJMng0PixPSn1hUllWI24vX0MxRnp8WF1rMThoa245Z1VKPlk3KlJ2bHk/fWwrbGUwS0ErIl5HTiNpLkwpLjoiJj9PV1B5e2JuL3gkOS8sYk9NZHlSfV9IWHNZKmxwZDl9NTBaTV9ZSDZIJXJDLkJFa3g0KyNpMD5iTXw7fS5+UVFeIzZ+JjV+UGMpMXk9eD5GL0x+XVdOYUhIRGgwYTtzeHko'@;
put 'QDpJb0hZSj53OnByWG9AOGZhQTI3KWV9TU56UTd9PEJYNkdhWlImTUJyVDJPJU48Y1lmN1hKZjpfOCZKUFdfUStzUG5nV2Y5S3p6R3s3Q3VWXWUhUmVoTihaRERaNiozbkJEUSFONj9UUH4+XV04WU8qYyprYzo7VSFgS3skRkpgOCh+Q14lIVU9JmRVUmVfS00lTVY9c15RJlojYk1tOjVuW3hu'@;
put 'c1tgdTJFLHRAdX1kQkcsPyhrST1ran5tOittYFpjS3JPcy8pM1JCPn5UJio+N24vRjBOc1Mlemo7LGF5fTI9dT9zKkNER01IP0hkaCYqXiwhPDM0MH08Mm4sfXNbeG8kR0NGQXV8Ljx9enpYU1dnRjdfUV4mZjcicHNleEZ+JExvLHBKekMyKWowbyFRWGloaEZIZ007NkFBLkM/JnA6Z2N6YkNl'@;
put 'bzNNQXY+SihYT3BJcmtbTlcuPC8va1BVRFtJVGd3YUovbWYmLyVue3A2cWlLRn5uPDA3TyVSIlVSem5ZT01RISl6Jk54UGl0cXQ/RCpncTYvQ0JJRDVUTFNdaEBUR2EwTVgiOT83RXticUZKVmVBZTM/a3xdczlRWV9KUz1PU2gzR2xiNTF6TnsqLEN7dHZbZSEkL2QvT2A9VilYX2lmbUdteVBd'@;
put 'QiMkJVNASnprMHF7c1YuRCFVSn1nWDsrJSs5ai5kK2QzKXxVPEhXVXEwVzRvPXU7Rj85WSEjRHFRbStmPzkwUWpeZDwkUntdL1ErWlVtL04iXVFLZlQkIkQzeWo9W1k+PndSbGhmNSVMR3AsKkVHXWxGSylwYDxySkdLXiZZTnIxTD8vey5tNyhZVmRHZSNdNGwvUStDSUI3QktCblp7bz5XR0Vv'@;
put 'W3YkWEs1YnRLRWB5UTk+QChvRWo5QTRoRzJ5SVRXPnU2Zio6bSVWeG5we1cxN1RtcGMpbVg4aH1eeW1NdStsYTJ8MSZaVU1YUVV4Uzd9anZ2ITxmaiFdeT1WRndMV3ZQSytaYTo2YEZWRyREcj1nc1pia1JrbHh2SzVDdjtgR2FjcG5eNGt5REc1djtKMCN+WXkha0F7LHVAcFZ4YSEkNCtCIn56'@;
put 'akEhZ2lxXjc0PHs4RG4ra2w4YyI+RVIlfTNLPWg3PHhzOXgsdjtVVXwqU3NuSXFuSnI5bFV3L092eWRtRSJ8NWszLih1VV95Izd8KjVKbXNGdX5AZyM1Vl9kXj51WHVxbCgrMXpEM152WHUsL3NbbU45Nyp2Y0RvdUAhenRyPjB+aXd+JmY1d3sjQltCO3pRXW1PZTVZPFhUQjsuKlkyOjBlcnB8'@;
put 'bTFnRSpXTngoJmpBXURQLkEqNnkpPXE4RCR5Yz8lNE1YTy5CfHM1aUlVfldZWXpkRVpgcSpmP3BLU3MvPmdFRHA2cHxVQ14oRVFUeyRxdlFBMjxvT05Ra3tQPThgV3YsSGoydyZuJH5PWE9nZjRkLEQjY0ZZOmR2OH5mZjcseG07OVJFQSQuNVkkJCFUVUE2W1F+U3VPRDxiMFIuQWFYaVpmeS4x'@;
put 'VlNfQ0Zseyw/NitsVzV6XnMrejouVEYsN2lqXyRSKF9FfXFXQzgmVDI6U2Z0YllPS1EkVUo3WVUvK1t7VVZIWz95QWZxIXtBfDlmWHhoXj5ScmNbNUNFdTUqS0dUIz9hJHRwVzs6ZyFNTzNdXkBhMlROX000azN6aUkqNVY6e3AlczBqOjJNSipfRjdnNmYrTDczVCRGam5aX2hMaV4oLEtNI348'@;
put 'K1kvNzRVflNAI3B8UUd3YCw0KUB1UF1LPF94ZnVQJD1MWGc3XiJ6d24rY15DQkYkdWx8S0Q+V1J8KWk+TjdUbG4mKm5EbylDaUdxUUt2NT1oMlZ8Tj48O2RFJmsyX1QoemZVRytWZElpZ21MRlNNMCRNMTEuP1FMVWZnRU9OcjllSi5GUixkJVNgd1QibEdKJi52XjFoeEJlOCtXajdPZz9CUndF'@;
put 'Ryp9Q2pkeXBNTDchYnQ2fEVkMzU+Uk0iRSJufCk/QisheU42c2pQJmBNdnc3PVRbRGw+QkkmYSZqQV4mQ2Y4JUFKfT5SN2cxUSxWQjAiR0Eycm8hUS5PUEcpd0BwVXQ1OmoieVNnO2loa0c0LGBdSD4idCJiNXg7fSFhQnAvTDgxSissYHY3NTpYOm04QiJeUjB2bXtUN2FVLyhEXjYwN1Q/OFY6'@;
put 'KHhvT3NeUiU/YzQ2Kjc1dzFAMHFBIXhoW1tyZyI0XkkqczdvNUJVMUttVCRTJFpvU2J3My5DbSZIIlpBRWVtbDtZR3lJX3MsZztVI2QsZj5ucWk7RT5obnxiN3JaKX0vOj03TH11dERlNGNeRjlQSlBwRy9iM2lAPG0jeW02YWQxZShLdHphc0lhK08zcl1qR0wxTi49aFpqYzBMKVNze3oxIVlx'@;
put 'PHMsPll9O2o/SlZjWmpGWDdnVn1EUGpvOlEhMTAkUjxbNSgwI1dGKltGcGhXfDQzYj5bKGhLdyxBem9SYC5AJkBxQz9INTQ6UWF2VyphdnEmVlZ4eHM+WTlCclBRfGhsMTxbVXNfY3g3WU1JNnIpV2BdUGA/PkkvQjF1IUE3NDg/LzAqfHhHPn51SHp9KHR3XzNDRlhXLnB1c1VgUVJYPFJ+MShV'@;
put 'Pj0pZTM/KUMkOnojQ01vdXAkZF12M3ZyPnElezl3QzRfcjpPbjRtd30/ND1MQVpBbnNfTS43YDVqPUcsOUhTZllUfChqezQ1PGsheTQsUSRYY0JyNmBBQ0kjNCs5RHhEUSQ4OCZgRW1KTXk6fVd8U09lJW5qJHFkO2B5TmhESnRpXUtUaD0vJnk5PjRZSktUaHkvc1F3T1ApS2BbfSl6JD1MRysv'@;
put 'RkZ9Iml1L1tAfE1DMl9LTUEmNVNNelUlW3o1RHMhcShXU0k6MT1HbHczb2BnKWlVO2o0TmNCeHxARF4uMjtSMjVTcHVwPm4+W1FpYVRTWDNLWTArYTVtc1F3I3lDXXhlMXF5YkRePUszWk4wUUluJGdtIVV4NUR3Y3xZUyFfIzJpVD5CdkxnNWBLQk92am5vWiRESGI4eX1ySkcmZTIuaFJOOT80'@;
put 'P0BOOj5BeitDRzphREthImpGc3Z7clpyMUhZQy4mRVhrTj9CcS59Mng1TlU1PSopKjAidDFfaiw1YEBfXkpgbE95UlZGaT44X0lVb2JRKXNVWFYuYCphQSVkMXVAKS9iW2Q6QlleNmgmUDszLkksPkdVZV98cUVeWXI+U2t7eGY0IV5DZDx5cjpeZEEkTm9TKVhwZ3ZHInhyKV1jNkc6RXpZUjhI'@;
put 'blcpeWc6SGpiPjdlTG13MjlfTmkiTTNpZEZKW3l0P1c+Zkk6bUpmIXwkO2pTY3hadXpvSUt5KWc/P3BoMm5sSGNHY1N3Ozt5bW1vQG1aIU0+LDUhVFFhVEEzREtCfWBUPXAwdFUlO1tvS0UxN08xeS9vYFZhM2lSLHIyRlFNeG1YSSRdT052fXpxREMxV2YuKTlLKjEzWFpGSntqb2ZILlhwdCRZ'@;
put 'ZipHS1pWRVtEUCVuX0Bzd3I6SGVuP1goPCw+Mzx7QVBSVFt3YitiamBKayo0eFhTbzxheF1EW0Q7Nkw7dU9aVDNITDBCRHRUQDxzI25dTU5iRWtsQiRnPiZ2VzNHJW15P2A8OzNhTE4+d1UqV0RzOGI5M0IwYXwlSkFCUHNwMTA0XXAwL058VFYqeyhSTkhpNDkzaHJLIiM8YFBnOHtGaXBTVj0z'@;
put 'RSk6cU1aTjcyPCh8JTQlO0JzOS9DYik5UjVSXm88azBoO1tMeH0vS2g3XVJUNjRCV1RbQ1k1YlNKSz0uWXxrN2dHV149Q2Z0KUJGM3lCR15UM1pALjU1KCR8RkkmMnc7Nl1LSyppUy9zUFJhR15iY0hHdmJheW1wM0pQNGJrck5ALHpXaDJrWm08W1hoaDQ/PGBSeFAvb0w9SDBiYFF5fXxJWiND'@;
put 'M0s7e2p7MENiW2AlfWhdJWpsWy5Gcm9wb1FkaUZKKFs6ZUh8a01RZTJvbEpLL1tvXTBuRT9AeyRJRWhDSkckYSYjZ1R2TFArQFBSV0Jje288Ni5pOGFbPTJVKnc3QmV8e3prbj9gbGQxN11xUU5nbS9lQ21qXzQhdXteeUhtY1pIKGRHfUxhSWtVMjBJKkR1JHdaPFowYVZUKGRiPTs7WThOVTlS'@;
put 'LnReT1JgbzFQeS9KPCQsb1F4MEFKN0JgPUhwa1NSLEVEKThoVUw7TlsxeHt5bnYxNSksW0htTllPV3YwLHdvcGhCbzVzektxfWsmQHFlPT5sWTFDVDRdWD19al1VdjU7RyY5JjFvVS58KVVveHl6ITQoUi4le2xRa2FybVZWRjBaflM6UT19bnBxeHNVRyFAL0RNUUhqS1JveFU/XThfYFNaOy9n'@;
put 'SSpKbD5dczl7NU9uVTFTVz42UiRNdnc5ZWxCKWlKcylPTEhVNUQ6SEcoRzx3L01FWV03InJkUVtNNEdzMDBTZm9tazlmOkk7fT0iaX1ZJVBCNyJnZShXfjVsbUlSdj5wNm5rWm4+UERfTmFXSXJvP211S1h5NEVtNDsoR097Y10vZCQ4PEl7ImcsKHAkJXhPdW1WM0VuVzh3Qll9RmRaeXptQEtz'@;
put 'SHAwUkxoYHpHZHBFKENPI0VZfUpQZnh5W1A5KDkxN09yKVUkZEgheTxOLlQrM2YrZTg7M1hTVVFVbztpRnRFJXEhelc/VEp2RSYzVmJFKy9oZV1Qb350Ij08NzJXTnhJRyxSTU48WkM9UG95KEhQaS49NkYqXk5MOCpId0NnNjlEOF1SW1VnVlk3STNCN3xoVV1MSXYoKzE+XktYcGd1ZltkX3o3'@;
put 'e0Qrd0dneHpHJVB3VnMrVCxtY1dEdEwoYHF1TU9MS1Mjdk1qRFo5TjFgLkpDSixET1I5WzMhb0cjNGVxMWR1azhwQWl0Xk9zYTN2cF46PGBTRldMU0ZlUkIhPkk5W2JrL0wvS3BTam87XnIzYSV9Uns1Qjp0YFJgdy55KzBqXVhTWiQ0dj1pM1teMU4+dj9VYmQidENWVl1KUnIzOUQiN19wWlRv'@;
put 'IV4kcyE2Uzc7ekpVIWxKU3BoS3J2fWQvVSNVaHg1YmBhT3Y4dzg/bHJYYDxibzgwXlc9e2wyKk06Sm99IzxEdDhvOEUhW2ZkYT5MJWBPOGcySDxiXWJST2F8bDdnMHx6bVB2Tno1IV4qKDNxbSRrIWxIQmpqM2lJSW4yTlJKVSleaXhuTFtxLnI3NmhHMXQ2KzoiOExDWDVMVWhWZCRFR0MjIUZe'@;
put 'Zm1HfE1xWlR7T2FLMXZ4W2VsN2xCcCk7SVFrVVF1fGFKXXZaMHZETmFHRlomeXZDUGV4ZWwhNW53ZyU8MlFjUTA7TFlkYWViZCpBZzRtIy9JOjx6TVJhbG1JSz1LRUBCWW9CRV1od2VXc1hUU3diOiR9N3ArTWRlIXwhd0dDZmVDcy9hcmgzeC85RnA7U0cqWj5UT2d0bW1oMDBMSyVVZ2BHNkI1'@;
put 'TDdrLiNQTVZhYGZnRDBgJVV6cTFYWixWQDBnPC9EWWdNNlhYOH0+KlkhYk9dM1FqVGNQdEhaKztJbyY3MyU4KnpwTjhuYkBwdzxmRz5zNiVLOkRrOXxwJGlsJGVNS3l8YVFZK00kK1ZQaFZ1WkJQZU5JTVVobCoqPTZSNkNzWFElPXlLTjlATkV2K3cubWUzVkAscVthZE16aCFiT0lQYE1heWtZ'@;
put 'dSYsWjs7W15RYSt6VmIpWVdZUCshM1kqYkRDMWYhfDlJbjIhSW5dLys9I0kvWW48e2dASWZEXyMuRXxLQ0oqXWsrXmZTTU8sMVJPPks9IW0qZzc6YER4bXwqTzopemlRXlYqamoxS014ZVBpc09Bbnk3SG5TaTYwayE1bjpxNlhDc0hdcUQlRV8xYytTWjNFJmBUPz9qZVJbKkBOIVM3ajhhJW8h'@;
put 'TG0haER4U0U9S0UvTWsrSHFGXUojLFFxK2VWWFBtYD5xSTtoWDppR2Q7WXtdaFlvJj8ke1dgcnI9JTpzd1tfUEYpbGkrYzE/e1JXJCk8d0kubXxTMl55eWQja31jZzdVL0FZZy9USjtkMFNVMjREL2BsaXkpazpNYWZmbi9idl5KJWtsNTUpNy8mQ0lEOEovRjBWVmRqTEpqfVBKJFtTYT01MDF8'@;
put 'OVlsJjw7NmhoeU5GVT48eWp5eVQzOkk/NnN2UUJLQyEhOHwhaTBdYVElMW0mJkJvcUtDaz9adTljaHEzOSlkWmBhYz9LYiZudVF6PUNbZ0JjSlhOVzh5QzBUOldqekZGPnEvfWAlIyhrc2VPRSVGSFpSfUFITUElRipifjJkK3ZNTWBUK20mKWF1YUZKLmlXeDVUMj8uQW1YOjRsU1FLTUIoS2t5'@;
put 'TEh3fkF1RUV5KFBMS2ptMXIxdFVdIjFrdDtuc0BbWGRaS29QdEpuQHFMUkJHVVhaVl96ODFlRnpAc14rVWAmIjw1eHtPLlY+Vz5iUEBoO0daJE43ej8uYS5RPEMqWkpgK2U+c3dQcmZtdlRsKHslfTc6P0xAPSljWTBEVjJJUjdSbj99eiopbjBGVjxAbnV2Vz0uNUQufTA8b109SVVlJjJJJVpq'@;
put 'SSU3ZEkla1NtczA9T3RdS2o1WlFLbXNjcHM2SjMrP1ldUHRFb29nMFhfWl4uVEA9PDxNN0lSfjlJND5zNGBeJnh7MzF+ZW5Xdk9KXSJoK3YzYilTWS4za007SEIwZTAkV0V3WUpDZEJjLn5ZUWE/T3x3XTZyZSVkbUVZZ3guIU8yN3dOKHVUTzI6dzRaKio0KVQkeXdFX0c3W1V2Kyk4RkFRdFIm'@;
put 'NmB4VUgqcFlvPUptbipmM082XUJnO11+WiI0UFUubWNWcVgwRGhTTW9nbilEQWBDZU1OX0p0VV9aPVQ6ZjN2cHA5NExQKS88LjIrdWMuT3YmMyhna3BXK1FJPCZQIUxkNzhgTzRzLkJoczg8dGIseDR3MjY+XjY2Ul99dlVEbS5pK1JvUXRtb0V9YWwsKGprUmwhV0BPbGgmMSkhb2cxVDFXIXM5'@;
put 'fnB5bixDIzEybldAR201ZDcveiZSU29FeT5pYXxJMzxENzw2JGdDPFBfK0B1O2N5R1Q/cGRRbVk5Nm0jKiJuVzF+P0R9filIamRHX3IyYkA0PUdXREw2OC9oYUZqS0I9OlZsc1lWImx1OzpJIndMSCpwY2M0UXhKfD83Z3ltdVlGYVlFQGc8WzkmRCp3e10pd0QrL2Q6JW4yIWM8KlNiMjliQW0/'@;
put 'SUt1IldsKF9KN1BCOXguYmZQXmFqW3l8MkQoV3JMWEtCeVM4RTZfQkVXXlJbWmJDMiJWJWV1SmxQQF1+cnUrOElKR30wRCQ7RzU8cTMyM08hYF0mZy9OanYqYnRQPjkiTiI6YyUrIkhdRWZAbXFTVE0+ZzxbS3guITxfSGF2T0VJPUxiVHVQe2xybko3bn5UVjhyTlc2YSJOUT9GQzQ6cXM9ZmRK'@;
put 'Qlh0IlVgNXRvZiI7VE4qa3hMcGljPlohKHw/PV9kfENiam1xTVEvSWw3d3FhTXNCN1JGVnA0NCljfjovNEU7UmR7LyM5OXBMSW1qY0NzWFFbbT5UPVh2VmsvfXhyOls+PVFHOFJPdzRPdU1iLywrJXRRamlvJVRvZ281YUpmWDhDaD8yRnI2IkFRYVF7Ij15KyJWMi9EJnU5RjE1P3UwZ0x2RGV4'@;
put 'OV90VkFKK3RKOkVmRV91NkpCaWgkQ2lJfmsrIytFRk85Qyl9InBOXzxlTEVDJU9zKUJQPkdvX3NNVXEqL0YkWjEua1M2S0lCNUR0ZF0/KVo0S1ROeDh2QWJRSVpgT0NOcWRScyk3WUM9VXVQJmp6VX08RWA5KD1KVUpadVhiXng+IU4iO3JdRF9Hdm4ySnxJaj93IXtKaVFSNUM3Xi86Z2lbQGtx'@;
put 'eT5YOEkwdFAiTz8qeC9BO29bSTZFZVYzcF5NWSkvfkJMJj4vQTtkT2FNY2hnOCxuNUIueTlEOWtuLkYhJSs9S0JtNXEzfHNVQHZFSFJvKGF1cHFpMTgyYEs4QTxKZjQmOmBaLiRicCx7OURsKyg/JTZtKyg2QD8lSWUjamh9PzAsOVphR3dKaSE5Z1Q1LlpwQERvYDtPK3NAQD4+ejYwVi4waCFk'@;
put 'YjEuWSY3RC8vK0taS1UlK1YwNDpSQ1dsK1h1ZTdXPilbQnEoYUFeTDw0LmJ9Qm1Xe292Kyl8Mj90MDtBOz4zW0RIZCRATnNYLmo1aXU7NEYrP01lXlR7ciRHSUVNXWAhWHwuQSR0K3lSKXl6M2RAeTd0SixjNUpwZUFUMV5hQlIlMUMqcF9ufmxsMlV9KTtdOWxvNzt8b2YiUCYra0lwdVo9I0ZX'@;
put 'KTxUSll5filqPjArQCN9U20rOyFYMEglUGR5bWxoJXFOMW1HaUk3OSwoUlhGSnZTQyFPW2M7bWQhaEZ1UDZGQjFZdE02XzpoTyE0K1dPPlR6Kk0hdDFEcj5OfjRNcFo3RzhFOFNlO08qPVhnL1lnIVczXS9FTHppX1hEel1rYSlTd2tHc3YiPFtAL1k0eG1ZV1IxeFlWUyEmZztIL2ROSEl1KDR6'@;
put 'ekw2KVBScEI8KFdqXTBUXWgsKTwmKnU4cjs4d3s3RzpjRmZGSlNhdGNNc1Z6aDBlfXdRb0hrfUtlTXMhL3UyO2Z3alF+Ok5lYVdzOVdbTk1ONmBHMFtLKXJTeUE6MkZreyg9ajhbcH1vIlR8W0YoZUxAKT5AR2N0ajdafk5bUjkmMmN9VTpvMEtofW9HLyQ8L25hcmhCQzxdaCghWyg9W3l+aGd0'@;
put 'TV0zUWBValFwS3V3O3toLF8zKiV9I0s/fWh+ZzxbTE0vTkQvWG5UeVRuP2BdayEwLDFBT2czQlpBT0goYSFzUUBCMDE1bUVQZFclQHkwTU5rQih+aixJUHwyODBOS3ZlKnI+Uis3eyFGbFVjLkJYaSFqImhUWUMjaDVZfW0ubmR5JXkoejReTkJhXkNjUld5TWZuQllIfTliYHFlOSVnUVoud3tn'@;
put 'RCJfLitoU3MpWT03ekJHQSEyIUBYdFIpNFljUzFmKHxPckcpNFZkXyhWUGUjZjtVQ056L2khMEJnLyV9NFhlXklzWWQ7KC8xKmlAbyhxcT1NbjI8ay83NElEQiMhYlIhdXhMUEVYTS9HUGNwKj1GUGNFMGx3fUxARVZzUkxVRntIdXpsd11OWCk5SVh4XXtyTE5vXnddTkAiVylpQCxGSE5aNiRR'@;
put 'I0pqd3tUIThleC5XZ3hlSk54PCFiUkB1MW4yZDNPbjIlMSNaI3okTGdmN0lfInNJNUk5P2FqM2lIRDp5Y0VUdyE4TSwyK15kaHhOel1aK0owdTNxYjQ5bF1BN1liSEtkVHYoK3w1OkNsWD9gOWxiYDNrOFBLaG56VGJiOSZLNHcwZ2VaPFNVP1RkWCU/YjNOc2JXczxnJUdfOFtmUCl4YjNCdVE4'@;
put 'V3h5KUh4OUteRiVAelBEQns5WlBVfHpZUn14YV0mYVU2PlNnZnpJX3QzazNPeHpBdltReyk2MFJ4YCo7P2FqWGlOeC5uUl5JLGdRPSNiP0FmPU1laEBJLEJRQ3d6ZW5jUTpNIkQhZklFTXo5InZDK1M6NCU4WkVKPyFSSiFyZnpJVU0uUkIkWEl0Umt9dVpOWCYrLDsyMj9EMD13PUMkT143KiRP'@;
put 'PChqTlMjdl5NTmdCPzFpdytsSV1bNkhteVApSld2b3pXUkohbCYzek45U0J6JGtzIjFLQmpqSWlkSmdjSmk4blVqOGo3SD9YOX0jOCVxZkVfTTp2KDFbS0RTcUVkJCQxa3ZIdXloUjUqcEBSRlZfSWciTTNzMSVNO2ZHIUtVRE13VVhHL1U1Ln0uUWJSM2NeNGtkXnMvLkxqYHMuRENvRXtMP1Ip'@;
put 'b15COHZBa1M9a3xAOFAzIU84ajwkLHV0aENANUlydXZqeytPWmRGRzBWazl7ZW5tRXdmKXApcSMpd1c7XylmOVVlJUUwbktZU3xaUSVQRU9jUXlXb3VNJV0uTjpVOjFRenF9WEd1bDtYd294NXZNNUsiMSxxPVgyMWU0ZUVuPk08fUZCYlhrKSRldCZWazFJZi9gb3QoMUV+ZF4jYFYqI20+TjU+'@;
put 'TyZXLm9EM1E5LGdbPT5geU5XLk5dMmJpZWlhIi9BMDU+QSxsOihubGJAO1g9YigxTnV7KWs2PUNDV0tVdnc3JjBoRDM0MCwpI2Y5X1JFQ0dNVzNHJntSVmI7Ui5WPl4xWVJuOUp5ZUBfSTY4P0djKllpak9Xfl15PnF5NTpMWVVjUipmPFhlLjJiUlsoWEZVSj9AYjB7ZUVaV2kibkAxNVlbOGJH'@;
put 'WUQsKy9teDh6T3ZwU3BRdXkmVzc4bls3O3h5OEZebFRmcUh0KzwqI1YmNEo7M31Ic2RYW3RmcHg1Okxqb0E2TDs4Sz5jYHJDa0dPRVo4UnFwTV9NVnQpc185WnJCZzI8MlghQzY7YlYxe1lgfV15ZXF9eTtTN2AwM0x6RlVdKCszcStzdndWZFVHTTdZODMhWG8mcEZTJnpNJXl2MlVGdWVIRlFj'@;
put 'V0B3RFMrXUl1UUMzQUQ3RmVHU3wqbm1gOnBUPz9qeT1wU3hZd0lGY3xRUVpJYFcpakomKzh6RCRFOUN0KyFEZDYmSCoiQGBrV0dFOCV+LmlgU3xobHVqdVtnKnAmaU4hd20rLDY6SXdXPXs5OlM+bEc8SmZkYmljRSg6RW1GNUp3Q2RyT1chRzQ1VE5yfUldV2lxUF9YO0dGLl9dYT5NITtzd09Q'@;
put 'MnxkSzg6K0Q3STsjZjl2WztsRGF9bjE9WUgpXzY1MFs7Il9sX2NUeShHQCNKKSoxMzdFbzV4M1UrMEtfViowe2Q6OGZoKElCPFBTdTdBZihLKnUsKiZlK1RbIWZuLG5hRXs/L2s9OkYvfk4ibTQmX0phMThCbHRfT1s5YFRrfH45Z29BMEAvVzRiciNIRUp1TnsldnFSPT9VTnJ5aS9zWzRCe3hi'@;
put 'ODsyP2c6NW15b0ViUTpFcCwpYHZbR1BLW0c3KmMpLmxTNkJgIjlqUEFAOlt+aEhvIVp0OXxnN3o7KFtuWXhzOSNZIX1dPmZmWUN0ekZfPXFqVjJffXZGOl4yPC4xaUdQQE04ZnJQQUUmYFkzUTpWelAhU2IpdWpPdjtmKjdKRmYsU3lUdVM/RCZAP3lkS3hGWVR+YnEscjpTP3NMTFBhYVdheWRB'@;
put 'KU5nV0t7JVNZKjBtMCVzXmpiKEMqdj9EKzYzTSVDdncjc2pkO1FdcT48diIrcSR8ZUFJVm4pNmJIbUR+NDN3JW5YbnhkO05NZURoU0R2RkBseDQrSE8pNjNAdmx1L2hsPmF7dXxDZnF0Wn1XJFlELCNQX1RsKztfNX55XTBGNHZBPm9mImNSe1dnek1gZkVCUEJMKC9haiQsKC9WekhsfWVVbXRQ'@;
put 'Q2hGJUQuIT9udCZOZkpgQH1dYmh6K2QkUltHZTgmJnx2UElOU090LldFOjU7JWkqJXE/OGIkVC4jQ3BnO2JbN2dHKyh0OD5jXWtQP0VEZVtiPkxuLFUlSzV2Ly8kTkM0e187cSxXPUB5Jk5wZnlILEVNQWJLczA0YGw2dTwkcFUufCh4KzxOUCZQb1gkYjlIe2V1fixqVDNoO1pzRTNnVGY3azZt'@;
put 'dishW1R4RDpnX1NCOWk8NzA6UGU2Wi96Z2gkbSZ+SkF6ZHV9ZFQocypmflRDQSxYSWI2UUJrRlE4MnFnOGBfVE4lMkJKJDJiMUJmMnN9Zjo1XSw3LyxmL3hINlkwRTozREBSVWEiRlUmci9QX0wqKSgrVS5hQ21aQn1MLi9xJUlKKyUvMDEpWFIrZmJ4dVBMJG8hY0VAVnIuRWVJc1lzOTAqXmBT'@;
put 'XVk8MWxySj1sXlZNU0o6KXZQbihhMGJNKnE3TFtYenVxLiRSQltaZytWYW4jV0xwUUIqUXtZR3IqYE17fX4kcnl7Xz94fD4mUHdEMClgKCVwOnZUNEgrb1I3PldoRktHamhuRzVMX1d9b28pZ1hANmBbQ3EpeVJyfkM5QntYUWUzSFJoVStiSS4jZCxsKkUlMXZLaTh2MiVTVnYrQyUhWXw4ZW85'@;
put 'KjdGYDolVnAqeSEufURULD5iIXRfd0tFTSQzMHVlWEcqbG9HdVl1aCpiMD9EJVFfKHxCJmp2aF1PVWBvRi5CKj0ubVZnYGNJciYsWkFmTlcrTDleemEmXXsrbiFMPSsrZWBaOTZwdWkpRHpNJWIldWVRJiVLcjE6MXpEK3hfe1lSaSlXY1NqO0tsL0J9dUZBYWxDclpFWmE/dFU+KmNEQ2JfOCVF'@;
put 'Y3FFcSp8MCxXT1labyppakZiOGswZE19dT13KTBLNCEme0hjQWc5ej1SblNGQiMwSVhhIyomRGclU21zQ2Beby9Udmc2O2hIJFtWQEIxLix0R2xCSF8/Wy5ifVFdVTdhZW1Udy9VRmc+KT9tTnAkZXltdT5VNUtydlpQQig7YVQxNVR1PUh7TFpUNVhrQDBNPU1aVCtxS297XWM7fSgmO3g4UG8i'@;
put 'czYienlzViJaOTZCNktyZFZoKjdsKzYwbEw+fEpSLltickR2cSpjMjl9OzBjSmVBcGJgbTQ6SVJNKU1YfGBYKHRPeiomVDNPVyw1MFRoKmlUSmQoQzpmP1dZJihPVUM3W3MrcSJhdTN2QGtYQE9PMGpkN2tSLmVPWnB4cTQ9XWo+ampHY3BaNClrRzs+bTwrW2FhV3dXPH1BR29nSDJIOz5UYH1t'@;
put 'VXp3LzEwNTVnZ2R9aDI3MTlSSU0iL2UrNjNpXSMmQX1VXU9sNSZQYDk1OVNAS2NQcWJlPHA+UVh2R2dkZj9qTH5qRkQ9L2h8Y3xNaTBLTTBqJnFfRzZXL2Q/O18jNV8zOl1HUmhecnlzM0NCfmdEbz4lVmxBbXh4YnpfNzI6XWEhfG44QGJJLH0pYkxPaDxYb2xmeGosb1B8d25QKW9QIyI7IXh7'@;
put 'e2p2RkZIQDZzMHZ9Tk19IXFBRT4qeD9PWiFRPSgkIiJNVkRLWTJaSjNPMTY/TE9UUENNITt6XU86dWwzPTszWk4rUiRxOUtZKkc1Y0BvVG9QLD1nNElRREhGQ01ZPlslRmpqT1JNXVNiPSFwYVgqQXJKdmlqbDxiVjsxaUdZajdRQE5ub3J1ckdRb3ArKkxaWTNbb1orK1FtNUYpdWVvSWAlSj4/'@;
put 'b1RDaFEwX1tFMFJfRTZuLExvTik1fUd5bWIsRSV0PEYxPXsxaG9INmZIN3FSPiVZPTApNUJeYnFkRGReVjA5UFRFSDwxTWohQz5fLjdJOGo1JChiOm5zM1hvQTw8clZEW1Q9MDFYUEZdMW56cWhBciY8VEdwKylva3kmJTRvPkdUVWwwMylqKHR2NEAiKzo7UTd7eTZeY29tWX5acjZmNzExR15i'@;
put 'aSYsTlJdYmJqaWtzM11xfDgpLkxHIlJvdHM+UTBASTo5KS5dbi4wTkQrbFIsWTBmTzNHIUZKN0BJRHI5T1hLdmFuWjQkcyYxJmQ5WTlzUmlAI2ROSXxLXStURk5TY09pQExIJDh3L3x5XzNnPzZwWDE9STY9Q0xacT08R3hJSG9dWVpNRCszcntTRlJkNEhRJVMxNHdbQl0jTV05TCtbTTdTZHBC'@;
put 'XzFDcS51NDhzMkJ0fj1BdzA6Ll98bWFPQElZQGR0U2NHJTReOmF+SCM4Wk10JD8wVk09d2BMdz04V0xpbVpDY1ZJbnFoa28sU31ud2RXRTV3QERSSj5AQFtnTWkhRTJpdn52NXY0LmFuZV91eUxIfnBmMm9iZil7KG5nMUgsflp9WkV4U2MmdjIxej1BOmQ0UnhCbD5XTUhIMyJLUihJTSN6QSUv'@;
put 'T2BHfkxgPCo0SnhASSFoOHQ5fXVjZVlAPn1vb2FQMEtXQG1felR6S2FPO3o/KmhfMUoxL1ZAenRBakZrelIsS3RUdFhQXiQjKXEpPl15Im5lLD1Yal5TPkg9UHhHc1BpRG1MIkAoZitSbkdoTSJ2YDlzN2N5WzFDR2hNN014ajwufU9bT1hPfUJHey9uUC9nOH07UjVjQDhKK1Jta3VQbj9gaCUm'@;
put 'U2JPWW9EWE0jeiE5TkNFZzlANSgubU8wVjAmYj41eXosPTZIUkVbeHtweVBud1VhdFQyfn50TkcuNzhHNm9wdHtdbndSXV5kKDB9NSpLRWlAPlVqMyNpOkZ2e0ZpZlBWcy5aSWtXRjguXnxYXUx0YldgVmcwSDVMJklWPGZvY0JdZmdiMyYjUnJVUUZfbmBYcnArTTcyNjN0YldgU0pATmlhW3Ew'@;
put 'O3syTnQ0NjMsOCZifDlZfSEsMThNenlBKmJudjplfDFnc2R7YXZiISkjdjdKUnVlRiM2OkRZKkc1TSQ2eSYodyJaTDd8dWN4QldQRX1tc0RWN0g7VHRJNURpL2xZQi5zR2ZmKjNjPk5ubjptYGYmQjYiNT41QkM/XnhURmlhQjVvazo7LjI+YTFpYk1zMSZyQHRwbDREMVQ9UnlYciVeXV9DNUgs'@;
put 'Uz5sJEQ2Q05xM2osTFZqemVLUSVgKlQ1QlswJU9aeGpmKlR2ZjdkNEleZm80NU1AP2loIU0mME4leHlrWWhDR0c1UzE+PnM2LiU3dDtYYXlWNWRuMU0jeGlgKU1wcU04W1dOWiFxcVk7Zl0wbE1XS1M6I3UpVFdATHlBJHhqM0IpZkNYRSxMViIoVndBMkdeZ3pnRStHSVIucm8zZVZeYFI3LjJD'@;
put 'MDIoJTU8LjI9TmUhOWpyaCFMKFJNPEJbQmJNQW1eTGFPfDtWUEJWYzhIS3RLOzEiMXlBYzk8eVpyPUNkPHgyaWJpW1VlNi8uNTVxeCU4dF8xaCxlOE8wWG0vQD1NekJdNzcjJilUPVVxRSRaa0s5O2h9dGE1fGVUIUV0W2Z+Zz1UQTxzR3FmYE1ldFdQZmNHb0klIV4xVlk/PWxmJW9XKjtkKjdf'@;
put 'MiR6QmVaSUU9XS4sdT1MVzdHaGc+ZHAiZ0h4KSFLcks9U1A9b0xwcmdsU2dQeXR6eHFscDJsRilLODgwVlAiYSkpXmFeJUBzVktMe3lhKDByNXZUcDAsYz9gX3UxL1s0Rz42MGQ6LkgoR2FnSV4iPihdX0wvVjJ7Nz9bdVFpRUd0b2wuZVtFR0NmQXlIRm9VU2hZVThnaFhIRlMvYEd7dTJEaFMi'@;
put 'K11GOWZ3QDJJWU0iblJWMkMwKzQzN2lAUTI6P2VqcXpsbC49cTsxZmdFKEZBTllxWlEyO1B3d35oQ2YzaXA3eWwrSVcpRCZQTXdlV25aN2dEfWAicE14fTRBI3pgbXs+R09SOSFzTVBRRV92dEpwNzVZajssfHgpST4/Xj4pWDA9Ij9wREdXK1owOk58KVBFWSk1XTZUR3wjSWZ7Xi59JTczaCVT'@;
put 'ImVgfmkiP2hQbyJYRSxBM3ZjKyFfVFBKallvTXYzJVN2UGBTSW91PW4lJnxxWzNsSzRZOHBFfmUvMlFxYyhJVURVbEkydyJYJFYwWSN7NEl8SyRQey4oPzFLZGosUV5TeGUyTEQ4QkU8dj1yVGVgJl5CdntQeCJtInEqXmJsclErWTxAZXxYIkdbTHN7I0RpJiw3P3UvTX55WUded155SztmXUZ8'@;
put 'OWF2Omp5diZ8KTBgU3EyOURwe2AuJkUmSzJzayxKaSYlcWtId2R5SzNtaCN0N3tmfDA7JjskcTtsI2oyQ3IsTnNseTt7UHwqU2dIVW1vcEhZdW5LNUVZMl1kYkd2fG0rXmp8OHkwRCxUUEhGViNrS2BWZ1U5XndZWmRHWj9MWnI5SyYxZzleXmQ2JEkqd3ZNaCl7WGgiPSFJejU7QCw9TzB0LkZF'@;
put 'UFpvelc/KC8qeTFvTWdPUjROaHZBUlskZm5FXi4rOz5edWJGcTVpckl4d2w2b0MpLGMxMl4leGdQXihUUEtLMSQ9RG0mVkgldCxkIlU4NW4pSkJORVpTbSRmZ3EjZkBnL2wybzlUM3FTOyowfGd6WUVEbmZ7I20sMzZUbXRtLDBSXyIqSz11UDdmJCZsSjM/MDo9O2xEfFMsNChRclghfFlRMXBL'@;
put 'OU4wNUA1YF11e11DL3s8LDpSPFUxZixAPmwjJThzLmgsZ2VwWCVpfVBOJCwlMHFlNWVvMWdIM2NMQEJnWjdlXU50SyM2YXoqeTVjO3FabCQ/ZHRnZyUzX24vcT5qSmg6RXRQISojNjVYfSE2NVN+KW1UY0A7dl1IP2ZCeklWTWBHP0pAO1ElPSh9alU7LE84X31eVWAvXmg4a2E2SHM+VGI/MC9A'@;
put 'NSlyVDsvP2osQ2JMNTVUeTQ0bWBwaGJVJE8oO0JgNyxOP2VYdl51TTVdISJkLHJRQ3dVZ2AhRjVwWll6eipiXnlAQlJWYVhbV2pYQFFAczlPJGs1ZlprRTh2eUthaz47USMhZzM+OEZmb3ltUG5AXUx4OV9zPDhGZ1ZAOylebFBZRTk5Miw7fG5EfiFWfmpGbnt0P295JSM7Vjw6MnYvcCN2ZXFK'@;
put 'RV87N2dYKCl3P1lxLGlbNFJyWzo2cDdYMj48WiYzXzx2bihjfm5UfHVyLHgwS0ckLCEzQ2VGKj1HWEIrOUt0N3hAWyNqezJjRltwZm9rX0VTXylzcUBBdEI4L3RFMTZYOj5pXWp6I0k8cE9hZXhQTE5GaW5vU3gmL0lWVUVaMVZLOiVeS1U3Zmt0QmZ2bUlnL2Z5dUl5WT1vdUBWaGBnY0U2Xjcs'@;
put 'dEY1PDtJS1UhPS9OSE9JUDF7NzRNJjwxSCgqUVU6ail+Y0FXOGFvbXJVbyhWYC9qKD47Zzc9bl0hM2VOPzo+cS8lOXpzJCFBWHJka2hdRlNoSCxtWGZDPDQmV0s4cWw3X0pTeGZfIlssbXNVKFVNRFpFLFlfdW9KSTwqfkIxeTApJSswdXk6PEoibTpCYVA+O0p1a101SE1PVWdjQGo8XW5IRVBX'@;
put 'RC4uLDV8WXxROj96XVdzKj9wfT1NY29MRjhIUVRZT3VVTW5dV1FlcXk2dSRCPXFOcmR0XSZue1BjfDhEcCZfYGhge31pYl88dihSLEZIVTllX0d1ZkRmekJjT0JHKnN8OEREaHwqPTk7SlZwSUtlMm5lRDEreGIuRzxYbVlgJXw/S3wjWCt5SWIrbShiKjVnVXcwRkZBUmtsL0FYcUhkNipCTS9t'@;
put 'eC9TUWMpJU9JUGEsPHokYXZZRjkicXJ9UV5fK31wJUNNSTYpUiJSUSNmMXJ+IS96IVZjV3Z6QTFlRjE8N1RkeG9jRiVGVG5zTWg+fUticXMjUSNPWFJpYDkiS2QsLE9zQmV4fT0jM1BOV3Vxbyo/Z3JrJX1da0VlYnNjZjY+dXV4UUZZIm0/JVhSYkZYUXVLX2glKiRzQl9kQm1uTihdYTt9dnpl'@;
put 'N0pxfUlvaWxWLjR8c2IjJkZWPFBGMlJYb3Nbb1QhXS8lY2ska2c4RjFJU3RUdEZ6YTt2WnBFRCtRSSpleF5Mc1o8ODpSa2VdQzolWjtgZkAlSTpfRjg5YkBeTzdnZilVb3g4QUxMey9wYnowfCpFYT1USXhUITo7QCFgN2lJeXUrbHxhfSY7fVE2Y2tbWlFtRU8oVHYrO0cxczw7ckRke3c/IWAx'@;
put 'WTBvald3NkwuS2VjMF5ZZ0xvbmx8JTsodmpORWAwSS8velE/c157IXUmcUZSezl5PjE/RTZWcEs/K1VMPlJeamZDaCxsOiFbVXRXVll5ZnRLTEpMOXJPXTB8R1Z3UkVifUEpLGQzczh6ckkiSXVkZz8mR29iR3JYWEdHV0ddR1VDZkBGNGJwVXVoeFh1TElgQlp8djN8OHY7MWFHZmkrdS9EdEtM'@;
put 'anJvV3pBZFMpYGpdZHxYKVBRVXo4bSg4dzR6e0RyaE0hIm06XkBLR3hKVlBfNkBsV0FpTUdWVEM7e2wqcVFpNEVLaWEwODxJYXltbHRJTmkwOjZlX3VNMDVRYz4/PmxQbEImTk98VTYkNVlZY2VuRFdCQip2fEFbKW8mI0g0fUpoPTVXJiIrXS85dHxDel44IVNSd2k4UU83eVcmX090PVZbRVJW'@;
put 'a3F3RFFtemR3V2w/YkEwdkJWPnR+eDMzZ2cqUV07Wz8sNVsmRTlZKW1gWjFXMlBEPiRafFVHaTVxYE0wQHImel1rZiVHanRQX2BwYUJNfHpSaik7RjVRLlJiKn48byRfNCsrW0U4OmNSOV9nIlt3Slc5aWhbdEVVSmZZajZTVloqJWRPaj5ER24odyNITUs1SyZzTEZ6Q0dzOFpGTSpBe2E6VEdd'@;
put 'TV1ORHEjQm4rQWA3cCNCXWBgRz8mT3NtYjJ1TG52MzBXen1RYHZTdjNvT3orJDQyPypJTUg0bDtVIi95OmAmKHlTXWd7UWAlODxldjNwN3B5bX0yblYwVCUwTk90YXFmWXIlWmV0OUh4Ny8jJmRHTnpqMUJyaEZrI2ZNUWBOWVNITDgoeT1bTj9nSEg+SEchLFs2V0ovRipiJmROaTpWVUtpWG8w'@;
put 'X1dmNXR1b2QsSDkrSWRpTiYkJi43cEdZZGUoPUN5RytAT1NIYlBtTH5qbGJjIkBYPno8Pl0mdHYuQjtENk1ZTWx8XSYvRFJIYlBKIWFWcSZyeW84SFJhVl5ueThAXy9mTWlbRlJIYlAiaEVHIlIsY0J6bmdidXNeW1pGIi8rWzYoeT1wVCZoKzEpV1lCLlRRT3giNEtSJChJM35aeEtfLjVuSU9D'@;
put 'QnNfNVdGMCVUYFFFeU45cT5EYWJhdkpYR1lmVXpSOXxaeGpzPlZnZmd1Wj0rOmdUd2Rneml8W1QpfUwoSE11ZCZpSjUrMkJNOFZadS8rTW9NOVcrO1dsdCQ1UUtUKSUzRk5wXktJYjY7QyJhZ0QoRixeKEtOMXVLKihjYilFTW0oViRuTWdoaiRBfExPMGN6bE1Ea3R5UXtXcj8wbUFVJEVHSFNt'@;
put 'InhJazR8QXw3OkJPLFghWCtbUDdOekp1SUg4dkxgcyEmTVZEJjBUTEpIKyEidnA6Y2NHXztMWEYvWz0mK0JaLytNPmViYjh+Sz5DKk41dD41c1gzK3grQn5+RHQ6WFk4QCU7Vm0qPSY8YVc4ZyI/WV1LZWx7QXdRU3E1JklpSyxBcn4pKixsJTtKRG0sIzBOTVJ5N29dbVZvWUlnTkRISygoWmZy'@;
put 'bzo8Pm40MGQqSjJrY3Y/fHlsaCJWIk1KbEZ3K0I+aCx3b1Z0X2xRdUtkRWlaIW0zcVUmIXY7XzVQKCgxaGgyfjp5PEQqN0BHNGFFZzwrI3MkXTclcXt3OXAlQ3QhI2JebHg4YkY8aHcxKlVWXVc/SzZvXVQ6b314X0IkTTRKJTdnRWNwI35VeEVId1IqZktgW1I5NyN8bzdmNjU+cikySjhjRSI8'@;
put 'ZGJIR2RUP05fPXMiWyE3dyhTbzx3N3ZSS1RWdilWdy59IXshSCY1JX1UezlPbU0zRiooNCtWR2lbQFVPSz9Taz9dZV0/dHUxaG8lQCtebzZ2c0twaDpsLkRtKSZhKlNseG9jVU08Jn0lfHRuZkhqX21Oa3t1NXBLZTk7UDAzST4lfGM2QmBMRnlPdiZme2N9KiFNMCY7UWAlYkxzL2I3Y0YhWH0u'@;
put 'eDR0TVBTVk99THlqPisrUWA6L1ZMTnc8XXZbclV5QGE0fH1MeVhERm90X3FOOnAmcjxfLisiRT52dFJZYXo5Ll9vOUdhbmh5dCRAV30wOEY9Yz8lbnN4JUAkUXV+aSFoRmNUJVArZEVvanp1Pj99bFBPKHd5c1JZYXtLUU5rfDtfTFM9NH42PkN7NWJ3ZS5FRmNUciZjdnVqNi52P2Nqc0ZUIW5x'@;
put 'IzwoQU44UStpTEddNDlpaCJoUCFyc0FQSE1KUHxPVnd+P2AuSiQzUXtAaFtvYSx2L2IieXB3JlY6eHhFWFVyQkZpJn53IVMkZDc9WUNGayN5ZXFoQVFOIyIjTV4uSzhAImRyRl9DNCEhRWFSXn0rdTNMMyl8Ymx+eyVfLE5NL1h+OD5UU3ZeI0M8bysiO0YvJGAye2FUJVEiXVI+SzRPIXhXPShf'@;
put 'JksqXlZMaFFgUl1uLjphTzNbNk9SKDRxbGc+JjdLckJkcDkoSF97dEpbS3k+cSpPT3VDRjhZJj5jaEhaT35rJlcvTDZKbmZWdmA7MlI1Z1teWk5+L3R3TD44RXQ6WyklRHxnJlp9MiRiT0wqZSUscHJIfkx5U2lWc3x0WykoOUYqTGxNcShgUiw0c29UOzAmMm9bNEs/bW1mfCs4aU0hZ1U+WGY5'@;
put 'OntOTl8vS3Fqd2w6bWYvZzReayxnYFUjVjlfWSJtUGRudGcpZmZTUUs9elhLVTd6bXR9Y0MqXyI3UC9AISIzaF1rOTVOb0RHQ3I3IW9zKntrdTJdYUxAbm5wZ3JxIXJjeThpKGR4QHhhVS82bzo5JjgwWitAUH42Z0lYazcvXkBIdiYwQk84VWkvVl1hVGhpWU1Id1JlaCZbKjAvU2ouX0FUMntL'@;
put 'VjwwYDJdUVlqeXA0dFJyYmlPZUNmUGVXVSwoen13KyxSYWUiaU5KIis9cSxKdHB1NCJ2NG9wYHZVfjBjVkVdLCF0SnV8NU4kRTlfTlt9cyZzajNzVzF+Q146M3I2YmY0KXVqJjMjZEpySC4mRFkrUGteQzwxaCwwTXB2YkJyWHh4RXlnWHx5MHo8L2c3anQxKXtjb3JMfldzV1dLbDBFc1tqPGtC'@;
put 'X3cieiY1ISJffmspRTRHLnNgRy8oNyE7K2AzWCRHdEtidT1OJlBbd10qZHJGRjV6Z0gpSX1NcT84UUx7UyRvXk1mQWpCTlhfYiYsWWNVU2Npd0I2W0slfT1WfE5tVmtybWhDUD8lNSMsPDE2MSlXVSlISHNzUSNeI18/KTBtPzQ1V2BMW2g5emIkXSVXeU9Daz5OOSpVcy8lRSY3O2J6RkdWVD1g'@;
put 'LnV9QnBhPXleRFEoSXZyclF5M3d5Tl8rW1dfV1ssRXVEdX1AYT8pX2dkPl0zRFVbbUlmazEsbFN5Ny8lRXF6IlEkO2ZoKGU7LntpcHRbMChHOVBIc0BdR2YwTEo+M2FvZjNxL2VXUD9Gb2ZDOz16cWh9MHk1MFVCdTIqSX5PTDwpbzxWJjBtQiV7MSFWL1VMKzddaiw+UlF4TihTRWFeTF1hPjJk'@;
put 'UD5jd3MvO1AjfV9QcEtAe2JaOFU+ISNMdSR9MCZJLGs8PCIuNSNqIyUrRXEhbmBtNF5AYjM4ZGdDZjFeLzwkLHcmb1NVXU9pdCR7LEhwKSE+ZEJ2dVVFZmcqZT0zJmN8bWRBKVttZVEzPTsoVX0rZD4kN2JTPWA7bz9Sd21KVit4NihIPDl2cyM9TUYsK2ReVWxPd2AjSCRPXV9LM3ZbL3F8PCpj'@;
put 'dEMsUzdjaCwhUzwpaiFjd2NbNTtMRCFAWzdMZmEmUHN2ZEJoVFVeOzBkVUJEViYoSzZ3RDpwOiMmLmAkc1tYeyVBelZOeDd1YyQ0M0d2X1J4UCVVJSVxYnlrOD1kN35YUCVAOHg9Wjx4MnooTVJ4UiVUIU42RSVgcjgsdlVoOD5dIUVCMGlmTStnfV5PYXchSkl+bXlNd14/ZnxRJTE4VHhRODJx'@;
put 'UmhfcGRkVj19alhoYjhrLDFnW20rNXQ6SmZOPWYhTHZBQ0NsS3JlJTQ+bT18IWYyd3NyKm0+bT8sPHZgSWxUWWV4MERdOzNpcWBZYEIkeyxQRzpeW21IR05hejRkclRMS20vNW88I3dSfDtmZGYkQDZ8LHZCPD1PcSx1ZFYsZ2A7WTF7ZyYpUVQ6RH1lY1UsQXI4OEhQbjBjbyZQYDBNcGhiLj0h'@;
put 'Q3MsSH18aHguSSFXZWFpYHRHKzxmZGYrdSlgYzFaK000bFJ+eVgxaVFAXW5Ye1EuTUohaCZsKmlHXkoid1tofnklSCpLe3B2e0xdNi9QTyM0KDB3Ol4pcX0pQFpEUVguKUI8VlcpT2IrSU4kMFlaQjxqKEBCd1tAVlBVOk5FND59eVBHV1ElOmZYYiUxeGgsWjNuVH46SlM4Q25HSWRDUilXayx+'@;
put 'QC9kKUBxTFNQU1BSMFk4Xz4wJkpqOTVfYHpUIUFyW0dqaStfNE9kTEcxZC82YjNUKF9BM1ZfPlVHOVRFYXJtaltAT2csLEs4d2pHO3F2cTtiJXpqYiw8dzUpLm02SiJKcUU1MlU/ck91an46T1JNXlVgTlRhPEg5Y11jMy4rbCw4UDRwU21mNmpsdFZ8XWBnU3ZNQ0B4fDw8cm0hJHFFSEdCdWxq'@;
put 'I0QhRjEqZCRoRX1LYFdrZ28zPXd+WlRdc3dUR314Yi9kcFtQIzJ5QEI/eE56KnNENX10SjI3dk5gcGg0dD9CMUJKM0EhUChGSksrYCUxX0oqY3dBR2whOCEzblA/RFJCe25NVkY5S1tZfmNDLGF9MzhESyx0Rkh9VUw7KGxaRUtINk82PVJfbktxNHJeMT09JENGPWhoYXorS1kiNnUvOSMvXjI9'@;
put 'M0Nvbzk6cDhqSSJ2JGFLJFNtWiEmJTM9U0dwbSE0NCojdWAlQXojfE1ufmdRWXdFZGczVj9Ue3xrOUN3OzRxLFhDV2tMbko0bXlfJW85ZV1YQE5LemhRK0R3SmFiOyVWYlAmNy8zI3hSMCM5RSlVNnkucGZkeXhpXWhQJXIpWHI2IVh3PGZ2UHc+OSZUNVIlITNuSjRMPCVvI1Q+by9ISEV5ZUd6'@;
put 'aUR4RE4hTVZTUF5SPEp8cmZVVXdzdnlrQF5wO0k9WD5yaipNeGpPKTF5UFFlPVhkNn04WmE+WT0wMmdkdzNJNH4ifUskI0B4aVk3KntZKy52VFo/SDtycHk8TFtzOVdCTDwjTCFgQlordEkvMi5EfV0rS2UkfjxScz8pczkhOSsrYXJ2I0pTfmBJYGJdbC42aUUlR1dEPV53UFl3Py9fU2t+dGwu'@;
put 'VHJKU04hdmckQGcmM2gxezYpNn1STj1EQHlSVW1JP04xYVombzNHJUk/KSl6Z204aUxgMms4UlJ5I0E1N0B3PXhJUVZWTU45fk9KOD1ibTV6TWhfMy9LOD8vP2JDZmx6Yl5vdns2JmF9ZSU8MlE8JTFeem1ETGNPIj05Knp9L2JTPCwwNkp8VmNNUH0zRDVpQ0dtayVaK301WU9AakJvYWZlS3hG'@;
put 'PXNabENIeGJePFdRW1JFQixwQDQuNVgwenZUeEIwZntdPjt9NTE9alRAT2ArUjAubXtfVSgiVmtpMm86cVRfRCk/P1NuOl9JYGxFUHxpTSU6K2BYeGwuXSZSWTdUVGtFX2RQO2NwWmQqfjVXSGZjOWQ8WGEzPmdhMyh+diViOU5uW2E8XyYpYF8rP2BxIVthM24lbzlsWFphUmlAXlluYWFwJjdf'@;
put 'Jj4+JmxSV2gqSDlATXpQJWkzI1pfY1luUGVnV3UpMjBPM0tUMVA5Ym9yVkNbIl4vUGwkTCpHb2JEM30/Nk1FKz56USs5WCpqMFFTTiRdNU03JWdbOE1xb1U1SChgNyxjeCFbVXt6MFUsfjAsRHV3e2lGTEVEL0NoYytlWzFRTiV2fFV6b3gpKi5gcjFWQ0NjPyQpfUJTbUlFNHEoMnk2YiFLaSgp'@;
put 'SXdbb0ZEOF0/dlt6UjosQmNpfHNKaz8kfmBVMHs4LHNgdWJ2STBSIzcxe0lwQzY3QGVgM1t5RkZGQH4qKl0/QHxhRmdGTS9CIjZDRExycT5Ud19Ea11Ld1tVKHVeSFNLc21vSks5OzhSJDo1MjZieVZ8NExWd0AzaFhxU1ZJQXV7eUYhKCN0ZF9YU00xPn4mQyZzenlYU0hffTt3PUtMSkokSXdf'@;
put 'UmV4MDdiS2hHX2orX2hGTGE+bl88bkFTQzxOT2ZIO3hHMnFkcElETGgmMzspVUpxLDlLRm9ddzlbMlZoQzNLeWU1L1g6Y1JQektETUNrSzhDR0JTekVTNkRGd0RrcTw4RzJUU3RNbkdZZEI2fkJWTkE6X05MU0IybWViLCl1JUJQN0Zhaz8rcmspOGNXa0FTR0xCaS5RV2tKbkRtX2orX3o0djNl'@;
put 'I1llfFJqcXRMSnElZ0VHWUZbTihVam1BYkdOYERCW01DeF40MW41b3ZeaiE0THtDc1NMY2VMJkZKVl4sZlsrJjJnOnp9cnliUVt7T3huc0g0P310Lnt1WmtoNG1JL0pZZklJRj5sbmRzLlF4WGE1RmpdajA7VEk0fGM1O25vNHw3IV5gZFJIR1pgb01ZOktFYSlUVWNQP3lxSURddnx2V3VpPl1w'@;
put 'OjlbaDhVJFFMaTNTOWJvc2ZAJS4vSDRxfXoxcWtvMU04OzBiVyZPalpUWmlZa3s3MmAoTDBKM1tDNUY9L0xmfW5tQUo4IiwwTVAsTT5ISlV4IWUuaXZEYmliUSFYdiJ0bmkkOz5DZVY+Unx6VHdLYGFScGhlO2IlSVg+QHpRM2hQay54I0dEV3kpMStNO3pjXWdHIj95Y29JcWh6TkgoZHEwZypo'@;
put 'en5qN0txfXhBRkJZaVdAZHhiVmNJTV1PKmFNNV06NE17PX1vMH0kISpQYiR4Kkl0S1A4dkt5UmZsemw0RX1PP2kkKnhjIlBJYSVJPWkwcEsrTl48a10le28ie3tgU0lZYWxPTE42NXV5dz5Me1JyUHV7fUFFJEhqZGNuVyE4MUUzNkxlWUl6ZFJNYUpZUCUzS2Y2RSt6UWBDfVdFQF5QOFBjIXJz'@;
put 'Xj1AYFl3TXNDMFp9YFZYcyJLKEUrdnMyNTFofGFROVt9W10kR31eVzhCRC9UazwsOCxbQ0NjLltxbUJYOVZpfWteRyhmIzQqSys8MkV6WmtZajF7fkRHdUFfPV1bcnwzRW5MZkRid0VXNjVMWjw9JkpLIXx7fF12JmtHV0lgYzMuUSwqbmAwIXxOZVtvYV93XXZofENPRF4xcV8uTXNnS34yTF18'@;
put 'NEdXW1QsKiwsW3pdRXdbZnhRP0FPQ0I9ITIwRldVPHF4JjBAKnBNdzB1P0BtTVpBOSRKayQrSHA6XzN5fGh+bC5AQFMpJXx5fHY/MlRBSnNwSmlVPEQuXT4lWGEhUTF7elM9SXB+JEEpVUlAMGFaUl0oSjsxX2IyTV9KMXkxaFZ7ZThOP3ZfOWIiWlBZR1k7ajRfRGZJbl1VM3QlTDIzfXF8b0pE'@;
put 'W112SG88ZiFjJEYxcSkuJVU5KGk6LD0oYyYsXi86LyIzMyZyTXN2elApJStQcVZYZnd6aVlBYWEoTHV5Okg4dj9qYEpPT257MzVrPDI1aFJlb3F8fnZydW9pU2k1NCU/XSZKejRxZVRqIWxKOGN4aiFffjI3bENhTjAkOz4yWU92czZIWDomLy50KWdHOlpjeGxXNUYxRGQmKWUuKlNeWUl6cGxz'@;
put 'M2hfJG5tfjhvbHEvUk9fQ1E0MU5gWl8pJWUuUmk0VlFLeVA0cEowQXp5bWQ1bGQuUE14d2h2XiolLF57el56XXtieXltdW85KzpFN1psJHRZXllpPnc/aUd1Qno8IltleFJvPVRdJGpZPXUuXy9IWX1gJXhIYituU2dPekJFNXY1WnAkY3BTSkQ/a3ltVHoxVF9TRE1sd2dAJXVfZWlAYHpkUXd0'@;
put 'TWlwVnhQLDBML2Fqd30wWVlhVFolWXtHekw5aSl3ZXVtRUg2MTEpVnp5V2ovNEtHZH1AI0pdeXc5TUE9QExxNSRTNkopOWpdQl9MWiJxNSlsLFdwUy5FJHssU1RvdUQ0PnNweVRbQlU+VHxROkc+fC5geEoiP1B4Y193VGdLcD9bW0xyXTk4SUtFaktFdig/VTMkZWY3azwuZCIpOjQ8XnRoUUov'@;
put 'U3xMQzt8V1ReKltyTGwueGdsJEs8X15bSU0/TUlPOCpxMzU8WFo9bVo4JHo4WlFVb2YpN1MsVj9PJjlJaE0hfHZPWzVmYiUxPSpPNSFld1AifilLb1Z2WEkxRSZ1USNfOG5RYWdSQkIxKDlBeG0lKjBQaHdPSW5tPipfQ1QuTmQ3cUw8O2FNOCY9MnhjbiFHMnNFKSVYYT9CTjg6TyZfTWZQaHtV'@;
put 'I0tJczF3NG1lM0dkLm1IOC44LFJzTmsxMV1zNzQwPDUkY18md2kkMSt5X3JkTmVsTUB+RU9WXXh+PV0xVlRfSlFVTiw3LDMmQW57MSxzL0tzZjNAS3FWR11QMUBQVndkW3hVMU8hSFdEPVkqYTVbS31OSikjPT1eVXVyPDd1TC5XSmNDUiwyJiQxbWZScCxbdGliQV5JbE83IjAuJUlgVTkseE97'@;
put 'ZT4pXmtWM2YhMkM3U11FeTxseTEpYmQ3MjxVLjFhIk04ZC4xNTM1NCh8Xmw4RE0jRnlWTXc/ISRJfVs8OWFKdm1QK30haFJ0YiNPVHN8KiNvWX1xT0g2WTBEZCs8NnQsOmBMWXUoNWZuMmhqPzNvSG11P0BoX1J8I2dIIzFURXhLRD96eiE/RX1ia3EqUlk4JHNgLD9XeT0kNXtUZGtwTU9WJEty'@;
put 'Xzx7UUdmOCx3YThXN0w2MEd7ZTc/RHtMWXVxVSR2elEkKlJCSChNenRvaWNiaXkoXiVbQikxVjIwUHBNUFY7eXU3X0pWJW1MSGxDZmJ0dkpLbC5ZV2B4PlhLQ2ZKW2szP2hHV1N5ZjJdWDQ/SWlbc2csOURUaDdxailpSVo7QkZFMnFVWXxIcChGKFV2Xi96fClDZkRiJUp5PnVsP2tabTtMXTNj'@;
put 'QWdtezNRekhzIVkqYjwuUHlUdVgmQ04xc0ppZj5iaSJUV3xaUnBHKjI2YFtqaHNvaVE9OXBxRF5kSF5Mb0JpdEB8czl2e0RgOz4xZUZqdVl2KTU3b2B6IS95dCRCdTYpOHFkQkYqNVlRRHRSOEh9QXl2KD4pVS5wPS52KF5YUmpxXkEkLiszcVl7JU18P0VeaWZiOWBeamV+UUdWblYzISVTNjQ4'@;
put 'ZSNgT1Ikdkc2Smg0MmBMKlc9N25qVDZ7VkIocD0hVExyeiN8d0N0TXRpNVRea2pgejY2O3g9RWBITjY/SU5aVDdfZGpOWls9TVNzUT4qSmx6I253RmlrTS5PT19WX0F2NnxvRHZ6MU1KQENaSzxaaFV4ekNENmwjP2FgZlROIy5OZ31jXjE3QDRhP3ZAd31YSUxpT3M7TV15WG83LG45Qn15cF5Y'@;
put 'W3o6YntMeW9NVV5Sd1cpfj0kVSpTPTR1SkNgVDV8QytfIk5SJEpBTE1WPmc6TiVfXS8/KkhecE5SREdYWFFZPD5WRSRiKFk7NWVkfFUvVk9aU14pWHpwcjJDQERpbk18OThCMV1KW3p2UW8jYVpUIjo8WEtVXno0Xj1TUUJ2fVNfM0UoWihFYlE5RVpUXyRGNlsieyUkYn46JSFTPUJRcVhdVWBm'@;
put 'KiUwJmp7VkJ2QnBTPDNDPW9LLEspUUVwZyY9MzgmYmVJeFRaRWYxe3N7fCQuWjg7QnIjYXIzQSF1SV1sWktzVzc7VTlBe1J3b2BGbj5DTk5QWSJIKGd9ITksMEkuNjVDKEtfX3NnO2hwZlo/LExuZEozN2VdWk8hO2FAcGZjOzJ6T3xmP2U3WnslKG55WSYjTmQ8RlAhQCRRTVNxQCRUYEtMKW5A'@;
put 'KElEPzZqN2tfflBEZCQkUU0kJHB6aFNfSWdnNHw6RnJYNWxXUTJMczI0Km5jcExzMl5vQE98KSZwczFuZkAkWF0mRmEzR31PREZFQV42cmV4YnV9M1NpbzQjdjl2MT4lQ01CUCRSUmF3bWomaVZNKFdYMSg3cE1CRFd2cEVHYClubUR4Ll0xTWx+K112aHRDSDJLbm4xdSkwcHg+M1BJYUVSTyJY'@;
put 'Xk5gakJ1fEk/NDQvKTdJNnRkVntsTHdhPzp3azpzVXM7NktfJl52VV0veG9SOl0xcVVqbmp1P3lEP2YmfTFIb1d6QEQ/Ri85YWUqVW1SXkNDMnJ4ZDdNO006L141MFZdIk96VjR7TE8iRD0pbUYwLkpPTG1uZiIwRTU5OWxQc19wbzMlYVJGTyV8L10+bG9wbmkiNkZKcj1dJXNtTyEpTGhWbD1H'@;
put 'PSZjcyJdbH1xaFZEJFUrMzEoKUxSekVOPXkveS9ER3Rfc1VOfUM7eT9DXiQ7TUdCNElMQH0lXmtNKjJoM2Z3akJDan1nQF0mZ1RgLipGVXVzYy50eDIxSmNDUzA+b3hJZFRPKGVMZT41MDFsb3FgY3AzRCoyPyhtV1YlbWlrQDRTKCxuT1toVFIiVHhtInJ8SXB2Oko1dlQ6fCt+WD1YcUtjfFB4'@;
put 'OkxlPWQpY1RvOERqRGlgWlBHKnBCZDQpfGtVTzQrQ05HMG0wVzh4PW8jI3huNTlQQ3szcCYlQ2VxOHUsfVhtP2ZfcTw1YiI9Qk80c0tRcH0ubWxMK14sPTsoaDdeZHlqJGomaX0xInJ3VDVCOTspLEpmPGFiKT87OD8kOjR2VShHQ1d2entvIU46TUg6MypQXkFTRCNMWUkiUi5OVkYyXUksOHcy'@;
put 'fCJGNVYpTyJGV1dbcSh3andkY1A3a3RlVnJgM046QiEifHRTWVMqOGhyc3FZVF5dJnRdanZ4WEJzLDJYX14mcHFgdlQyW0t5JVZaX05sT0g2LmUobTBIanE1N1s1RmQ7KkNFOVd1T3spPmVyXUNER108I1slYm9WKlkuXkMzUVR5c01zVVE1T2ZJLD9CdGBKYEFAWiRtbDkvOjY+Z0hmWkh3M1l2'@;
put 'Tjt4MHkpKSVhSSxpZWhqZUcsNVh0NSY7TTVARigpa2NTPEohViUlREFdWGUiPDE+QDUoZ1VfQGdMSjp1dCZkTV0yWXUkLFVwb0dWWHBkZypeJmxkI25vZCt9KWtsJiR5fFRBTV03OEs+ZFdde0Y+ZG4/aXQvLzJLU3oxWnFjNERZYkhXQylyK1VHVnVTK2l2alo1TyMwJkwlSyomM1IjM3BIMHw0'@;
put 'SFQkM3VlY3haNShgVzIoYFdKIlBiQXgxbW1QakZkSVVkNUk1SFUqendZOXszJE88YUhnLnVWM000bWJxdUVvRW4/cz82e3VBJFNITWp9JmdpLmM8Nml1PDl6KVVwfEpZXV1gL3g+OkpQWk0ub3Q5RD56bj5SIXEmJTpTMW90LG9hPzpsVmskNmIoaSlRUHc/LEVme0dPPXxjVlBKVHYxPWhzNSx1'@;
put 'Z2d0OGlxQmBXXy4xb2Rvd01IcjFQbVo9dF1aP3ZKc2lmPHFoYyxwbUs+aXlgUFVHczU7Y3VsJENbMUdZOyY/JFgmJEQzclUrdS4mU00qJncqXmlGNXlOXno/P2pWbTh0KEYrPlVVam5EP2ciOnFpXTI3T0hkalN7LihMMkV8QltzP0BaUV91YCZuJERhNCE/azRtTD9oZTUiQCZEL2VIRCopPWRL'@;
put 'Qyp7eUNGP3szTXtLV197Ry9oXzBbeEZTPjgxfEBZXVd+QCxhQnhfaUZpYyNtQUFIdD5NL2xbYF9AJHRJajVQWHZmQSRKOyJVTDFhQEpIdG1wS2FfaFc0bUdzKXt5bHlgN1tmQk1YRndEODY9VlVVRkYiPXp2Vmc0TEBLRmlxb1QjIlkmMCMoK0FafEphMn1YREd5fmlxYDQjX2gsTD9oZ0JSKyRV'@;
put 'MXJaZSh+eWRPQ3dbYDNXa09pYyshTnxRQzsuNCQ5UWdQSDQhaVkqNklPQjVSSV86NWhAfXsqVVJUZnh4bF4jfXU1aW5yc2omfFE0Rng2eXI9M2hSbz1+NkBWKHxzZ1Z3fTsqfm99JEo2PUFOdHB1LkloXT99NkJTUC5rNX0zcH1GeDRHfC4hcntRPUh2ciQvRnxCW3tuTXI4ZWJxUkY+TXJ7ND0o'@;
put 'bk81ZX5MeXB0WGUwSzMxaUxgYkxTZjFkOC9vUDlLL0o5OmMpSyVuJl9nPjM1WFhQYjJqNDFUc3BgKF89SlA4OzdCP3YuOzMhcnFfRnJQLiZeTm14eHVkTFNUNWV0MjVwPihML19gakdhX098Kil9L2NMdVZzR3VqdXQuQFVTPkw0KU5wSSFLTFM0fkcyej5nbzUrfmJ0Ljkqcyl+KnldRi9faFsz'@;
put 'c3wpfXwuX2h2Xk5tWGsqbnl4Q0w/blBge240NX5Eei52c3h4dGQ0fmdvNVUuKk9GSXpIUj9+I3M5TFZTNWo0XmBSL21UOlZxdSEsVWQ5UXxdS29WKlZaNSM1X0ouVilJXyozKyVuOHZLXk9oVkxdREpxMjdDVjUwQCVMXXFlPV49dm5sd3Y0XkJBR0x0fU1OKVJqPVRuQHkjL3VsJm5+dTBnIlRi'@;
put 'LlZRWnkzLHRdcWVRcVdWbTkmZCJqd3ZhSHF0OWNOKjYxUy5CN05vTiQyKkZCTFJiPzxIRjpXOHUxVH1rPlRZckNZOiNzZ1NUTEtLXkBtQUxAb1Z4fUdgVGVeTio5eD1uU2IyWDlhPGl4eDdBUDRIVG9FM2FAZWBhdyNpOUx3OUpQLlFlb3N5WnwuKyYzIiZCUyQ2YTNxMU5DbUh+UjMxLipIdTZQ'@;
put 'ek1lUm45QF5gMDVveiFDI0I2cmwibzBOJG1DJGI1QGAzL0RKSDAyPXp6QU1fIXVQLzVyUyltfW5WVDErIU5gXUZeIyF0IVMmTVpiYTksRSFyPH1VcjY5MSxhLiZ3cHAoVUlbJHFAQCRQd3dEXkZxSzAjajw/QWU8cylmUFFlW1RXd3txRURxRFR9aDk/W1dZQi5nMVRyd3QmWyYlTSVMaGVERS91'@;
put 'OzYkd3ZVcTozL1VyeHVIZGdxeDU2Q3dRUGUqYWl1Uy88bTVEZl9ZTClCVnY7NjNjbHxRNVVYaDIvJCxAIUk5QXdbdyFPMEVLXn59WyEzXjIpIUErXW8lYy5zeSUjKjcjSC5dIypFKHBlQm9aVC88VFpjdyQ/dGc5WSZwcWded2UzQHtoLGYjOyk0UCU3cWRMKDU7NChMXjduJEhCOiZpMilwKnEz'@;
put 'eW11PkF+JT5mMHZHPFZTWz86Y04rXkg6X2ZuRX5nWUEmaXFqZEpRQWFeKFE9OkglOEhuTzE+VWwhb2k+P2dBYDI9NFYyKVFxWXI6SDUmS3xOZFZ7aylWcmYmS0hGXlJ7fihqPmhZSTxSRH1bKD1jKWdLZHlvZCZRbXc3OFpdaDByYjVNZXdjRkpqdjtKRSZySiFlPl5HUzxkKV9nWiRMeVswTChk'@;
put 'OCs7Im9pUXMlUmpCfVlaVHNjKkBuSisvWUR6TFo1VmlYNyhpMGUpfmxGPDs4I2ErUUkoKHpLPU5iYiREU09oJS5EKmAxRCVXRmRrYGErcil9aygsUEZDMmpBIXJ7fDF8NzIjITlIfFtuVH5PaF0kOC5yUXZnZzJtZyF6bExDM3REUmN8ejdRNi9sX3kyX2c3VTU9ezBsJmcxNF03eTBAbXpQdyYy'@;
put 'RkxUTW9VQXc4R2p5Q21HN1EobGpSaXloK2MlYjB6P0VGZnk4YFYodSg2bGRkYkJwYWcidGlgRnZgcS5LMHJad1RuZE9yOj5OQmM+UTRONH5qYXxmazM7I11TXzZ2VXV9RWVBMDR6elBHRiVqQ3NmMSxzLCYqR0wxNE49K1RJS0lUeFs8bjhKJiwhbHJ7Ym9nPTNSdClMcXVGbDEmMG1Ec3MkaDBk'@;
put 'ekFhYU9YNnAwYkp4cn5Mc043Y25TRjZJYmNIY3wzfHFobWFqTE4hSF12Y05hWytgMTBZYCElQzt3UzZGQzZ3V2hJLERwIio3M19KNzR+Jm8qUjxuZW81SzMzS1kmNDxeZ34rNG41Ym8zTTQ4dyZAR1Zpa09aQUpoenFMQGxBbGk3SFArO1lnUGFdRj5GYmA5Z25IQDIvRnlRSUU/R0lmeFMoRj4p'@;
put 'RXQ9fT1JOHkxKkc4PCwmWUVvSV44WWl4MyEkLDwvKVVARGhLXU9ObHlIMSRyLkxHXkU8SEZPcSo2YTl6b05oS3dwc2JIZigqYFpdM2pufCE0UTdjQmI+QGlSPkhEUzpOanIiNVdpTlJ+Smp4PDx4bXNeTDQvOURofDZfNX09d3gjQC5dW3giLDwsLGVPaG9OLiV7W3pbfHlSdlclfTx7W31OXmda'@;
put 'WE1HN1kqKUx7bWQ4Kl4hSEp3WzlhOSk+W2Bdezd9KVpNTGY1MSleejliaSRMYTBGIVY3KDkjUTpjLGBLOEo+TCVtZEVMNU5VXj9kYyh3QyF8QjFHP25zK3gyTD05OCpRIWYxS204RU4ldmFUfSElZV4sfj1SYDF7bG0vOGxtL2N8PVgxSkRJLltMO2I1QClQaEp4YkZRVDBJZD1nYUBeOWJ6Mj5j'@;
put 'ZCNNajxzXW5IYDVJPTZkUjJzQnBqMys7MWNPe20zd0MxOCE2cCI3Lig5ITZDKDtsViN9Ly4sNnR7ZUJIRUd0XSJ8Y2dGd05GJChNVytZbyo7IWFzVHMpJHJ7WU9iPExQVFYwbSk9NkpjZUlMNjksPXtrKkgiRW89P19BeT1oNT07d2BDOykpcTApJlFoe0tRXmY8M2t9XmxFIVRVR0BxKkp2QUQ3'@;
put 'KyFfXn1eLz5iWktnZUQxcXJ3LHp7YWsjZmFpTlIwST07UCN7P3NVQDg2NX0lWWZ3USJtQihHKmROMiQwJj5nMT4sWnY+KDBFbnVTRC5tIW9ddltXKjhVfmtsZ2RwbyM6aX49TG5zJHVebWRkSEoxWjZZMUUxLE1tb2NvNHVSPlh4UEJtbzdiTDc/QE5gdjVndyRNeGNLX3RZfDVxTjZRcDciTDJR'@;
put 'QzNQbkhQJjc3cE9oYXZNYEwxQEVIYU5obGQsNFFwMWVVJU5geGpoYE4wangye0pAbnJTeGpEcz14Pnc4WV5ZYUFxdHlWVndVKjJpaU94ckYjOXl2byVUOTBgeDR9KTtPO3lVPDl9Q1UiaGFQeFV7NGBLOVdpYHs0InJKQFFEfEdbXTI/alhYNWY6SmRHQzgvUCZXT3kpdl91Y0h2PF9OUFpNZ2Uw'@;
put 'R2BIPzpxO2A1c0JVJHMsLjVFZlMrI05UYkRiYEZHRDxELiIqQFA5OVhYTVVRKHRmL3NMNlh2WFp2X3VUTz0odT4/TENdblhZTWZQbGROUmovRkREYV1oX1tVRHZPb2R4fSl4QDcpcEFMQHsyZ2hKU0RhPnkkaU9JTT1xK1JDXSJDRTRCeTB9XS9MYl5mUD5tPFp3S19FejQxJHFIbSswZE9VUlpz'@;
put 'M19RJm1kVUt6WVdaVl5FJiRqc3A0U249eHdaKHI2eDNCMHtySiFZK1krdyQxZ1UhMz03MGchVj1xQjx9Oy9WSUNJZF9RJXdYWk15M2wkJFtiQGo4PEA3SnskMG08SU1PcDoiTUt2MEBFKnNxdnpbS0NJO1NZWXdEV2NtZXdYd3pbS1NJO1MyZW9GSE86QHpsNi9FaW1fTjNiO15Qek5oKWpWcCNm'@;
put 'fWUsZnlCR3VIbE04ZmkvczpfK1FxLFNRJGltYEskYiN3IlsvNElAQldnIWUmWFR8RkRkdSQuS3Zha1liUUE5eixMZWk5X0heO3U8ISl0SXUsanJeOGsrO3NQcV95U1c6WjQ+bksrfkhPSCRsTD8qdFEwUEc2RHJ6KkNRb2FVKzxZakN4R3FCIXwsbmU4KSJ5Ol4vLnElKyVNcWRWPSt7VVJ0OjJM'@;
put 'YihXSlp9X29gKkNjWWomYSs6Ql9WYi88K2doYilwQ1UoPUJfTj51ISxZYE9admQxN35tNUR9UlYjSCVTNUhUNjkzYVBVIV0vfmlATVhfPUt4aH5KVn1vaywzKTNyYlVdcWtaeEwqelV4alBoZG9YU10uYnxyVWIqcjB9VThhczVNRTBeIld9WHlZajI2Y0lXaGIpeDBLSCxIdykvIi5aPjBhMWVl'@;
put 'OmkrYmY4ISlvVShqOkVaQjZtUmUpKkohcX5KV1oucEw9N0dBKT9xYSxvJTFpKiRvQ29EVit1LjMzQTZAJTJSPSxEenZ6Lm1BXVJEMFhbdG5CSTBXVjVibztKW0U2blFbOy4mTHYyVnBxJDV3fkIqejR0T3h1VHJjdz09dSsyUCRANjgiN1glZnssPDlWZzp5bSlpNzxmeT4laDM/RUBdWEp6OXVp'@;
put 'WCZqTGdDbk5NX2tuXjhfSC8zSzEvKDsmfnYhMSE5ZkYzdmUyMiMpTGE+Im18bjgoKFM0S0Z3IThQR3lycVU/T1AlLnQmMnY/Y0BCZ2xZbVMueDVJdXVeJS5TPiM7U2tPaV5KZGNKQTBiXlo9QUB+b0VTRCR+cjhHMkZEZlRQPzQ2K3BwQF8pPGhmMXZbaillPEh6T11rVig0UkgkJTdxZGwxYVQo'@;
put 'cWxiRDx+UDZSRGNiRWMreCl3WChQR1IjSFV6Q140LFEmdWN0bjB8RFYiQEt4clUlTXNxMHd6dDFkI1BBMD5ue3VTKUNEZ3RPWVNGaTl4JGxQLjc+Z1kwRGR1RU4mPkopNnl4S0YpSHB+VCs0Xn0yRDgmRHNaYmtbO3Q2MjxBOHRdXkxld2l5LCpncWBRIUswNGBGV3VuJlEwcCF8MFQ6e1s+Tz5a'@;
put 'Sls7aUUhWCx4RV5pUGkvSGNvMVdkXkNTdEZWWk55RFE+WEx4XS8kUSMqXV04YTU5NzR+cCoyQDFsRzg+W053e3BxQTVHUDVETX0rW04/ci99NFYrR0leWT11Qz1WOFpUVHlXbGZoaVROejtBdy84fC5tYkBmZHpAQGt+IylzSDpTYSlpIk9EfDZzV2F5ZHF0SlQrKTRpdC9SLm9+eVlWfTdea1Rz'@;
put 'KSFMbEgucE9fPWY6NU81UylzKSwoWUQoVV5VPmtCbXtvRzwsIU9+W1o3KytUeE87akx0VkAzdmh5KkpBYUNnSFltV1lHPUlTJklMNS4lX2cpM2s2WkBFMV88SFhzeUZjTk1tIzV3LkFAL01UJmUvYUZ+R1Z1bGlxZ0lIdU9iTT5ZOFpOKj9bQWlIdzMiYCI2PEpsKDNtNy5zU3N4eyx7Vz55Xn1y'@;
put 'bT8oNkthQEVvL15PRFtaRVVGfFo5cjQ4Wn1hIXRibz1ZIV1jUlJkMlVhVjwzbiUzelBXRiVqdFQ1eGB3cEtkQDxFQDVFM1RmUmc9diZtcjdbRTdkVGlQLyJdS0AiSkBURnF9Mm5HSDVEPFZpPDlOdDBydlF7TyVgeVF2YlRXQDA5fHJVV0NbaGBKQFQmXjovKyZKcUl6dl1CRyI/NUA3KUszVnZY'@;
put 'JDNVJko9M1BOd09ydiFiOFY3N09Id1tyVWhGeDp8b0gsLEVYSjIpQWFRXnFOYTFQZnE6OXhkMzN4dTBXPmBxKFssdVd9MFFMeF1VTltUUkk1KDB7cTY5fG1mQFBzR31qLCk2ST0yfGJmNTVKclRTVEcwK3RVZVk7SUpBQFFpRHYoK3U4RlFPZ2NtITE1R0V0NlF0RHRkfEZRaWohWlIwKjY+eW1S'@;
put 'QU1DQUFBQUFBQUFBJEFOSiJ7SnRmckdsNUh9TmBqQmk4e0phfjQ6YEwoJSRfSWRDSU5WRGRmX2VpVC5hR1oyMnB+d09zWDg3ZkNDbVdjTmtHYThSLzluRVhyZTQ+enQmJWwkNmZbYi5YSzlpLmA3Z3h2YkhLVF8maVR5V1dgaVNbNG1TaVlDbWFtN2FOeX15P0hOMCY/eDQ7Z1dRZX5vXXN8a0pW'@;
put 'bG03UWgqWmlaUz5TOStWcE18UFBaS1dsJFcxY2oiLGFSJiZPTSoyez9kNGJATHhgOltmSThCbXtEM3xVKzIhXU5KV2pWYWhCNjZgOXFsYyFNVVtrSE9YOSYzWWtAJHoiW2lHOHFRPmU7azlyU1lyK0RZWT8vKTFEWmRVMj49UillIzN4VEM6PCgqZEVCaGlASj5bZj9feWtaMyY4Z1cqZV1yMV8k'@;
put 'T2JmSy9AQjJGbUhia3doTWJ4NV9AMiNzTStocm1HcGBiI2ZjfjFWMm9hcSt2WHFXRVFmRF51SlNxcXdlUixzV3IyTDZmKEVxdEt7YSo6Knd4IyJ6OWRBWCJ2e3xATW9+ZWoiX30+R1dvUStPd3U0azYlZDBjbCYzQEoob31PVXhve1s4ekd7Pk5mY2wrdltrWTJvVXtAUFdKeFU/cC9HMllCXzRY'@;
put 'bU5mXVMicT04UUpHbTAxWUFtaGtpIz8hTCkhIk1wTDxAW206OEcze2I0Un1WY1k0OCtzKSNhJFN0QTpnLGleI19bT1FLNVRGezRzfE5baml6b3RBL00hTUJEZ10qZmU6Q283fDxCcFE+PF59dHJGcWA2KkArcFE4fWtDO1E6PEt5LnBvXilLeSVzSmosImFYMTlYMSleQHdqMEt0U10lVylYZiFm'@;
put 'UUBheXY5fS87dT5sXyEqR1skUEg1QlZ9IU5mckRILDBiLyRGU3hJXyxgNkVLclNhTitmRkp8Rjg1UG5yL2RCWylZLmM0VXdWckRUa3UiQiNuQl9ieGVHRDBQSGVvJnBdc1V+U14re2RGRk0hRzIyangqKWJveEJqWlBEXnxsSyJdTGZBWFhYJF9rS018amxAI2kqK0E1QnB9PjNOPW0lejV1dnJk'@;
put 'KTF3VCpuWWhPWSElMmluKVY3XWt8V3JXRSwhVkpIbjNJRD86aVh6eiRfMGtIM1Vtd3IqNktEZH4lWy4pcEY1XVkoR1UkdV19LjpPY1lhbDJ8TVYrTlcwPF4yMzh6cFBEWGo6RSRLdSZMMEIlL281NkJhQix9MkEwZ2JxRT1je0BNMktaNEpHbHo8SyN2RD9RQ1BFK1ZrO1hzIT9wfSJ8JSRIaHgj'@;
put 'eVliLF5xPi5gSUIiVDYjMGYuanVraU83RHZZMEVjbEBobU5yOFtUfndWeCNXc3dDPHsvXl9+eGs1e1BkeUo6M0VvNUtUZUlrbUF7TTRfPH1jTH08bnQpdlhrNlgyd1lbJWhuNGRGWlJ9QyZfVkA0V0AqUlNJZFE+elsyWzBDM3xsSG5KW3Y9RW4/cixsSzFBa29XPEN9czgle3g+ZyR9KTtDaDJf'@;
put 'eDFYbkNSaGVzdnNMR2JYdCZLIi9iaS5LIXlaL250ZyJrZTZDITFCYWh7RCI9cSMxVHtqe1lWSGI4K2k5UUB2ezs2YGFJXWJQQ250L3ZWRDV8ZythOUV7ODA+bEEqKlZWdkl4XyxZWzt1K0xRW3dWdS8qd01SMEBfYFtCdjBAJkhvfVE/XUNuYHFsa2I3eE44PVcoNGNRXyIvdiNTcWkoU1M6JDkm'@;
put 'Sj8yUEM1P0BYPT5dSkNjemJ8bzsxS3NjWC9YeX4hJSNodHk0Jj9iK0E/V0dJfSFIOG5GXiwjKGNOZjB1N1JtSlYpQkdOajk7cEkmIyNUMVJ3K2dHa31Zc3VLfURLSFQ1QChZbk4lcSlzcmpnP3BpfU8pW1Eia15LQ3VPa0lmQTdFR15SYT94QVp+cTF5SD4qNFc7dmhtQGN9P2FTQW1OJSZQbUJm'@;
put 'NFZwJk0sfm09KFs1bDFpTSpaa3ZSJkgqOEQ4NzJzaTFwbTlGSDwvLHVZZk5nI248VjlYcjtZI0p8UGdxRWsyfShzXUNNOUxWSyJsUE9JRm5ZUiUkSDYzLFVJbH1KLmUqJSxdcyJ7ez5kZ1ovaEUsYWB4YUYpLHtCayFdTUVVZmptPHsxeGpdX3RCTFdGRDxQOnBYI3Q1MUtkN1sxX301Y3cwcmVI'@;
put 'a2Y0NVleXUNiXnhMXzV9aDVGUzN9ZjNwU1ckelR8ciVNPi84STxJdFdmMXxmLlguaGYzeS51aV9SdHp7Lm9sRU8vOF9CQGImSWF4US4vWF4uQUpod0Q3Til0SWVTQ2JdMVp7Uk1AKkpZT1kmO31wP3EkPFs/NH1nbSlsMl9zVElBPE5YcWo0TEN5aSJgIXlhKy9mU25MKFApaHJFfHIuKWdKUyh4'@;
put 'SXdOIz1xeDtSYW1ZUC5jLlBfbDk2dzl8emhOaG9YPjVGNT94RCMjdFN2ZmF8OGVtWkczN2M4JjJfMz99Wn4/QDUzdHNNc2h9PkZxNTpwLHdYTSoiO1NeZ0d7NkZyMWxBP05gNmppPkF1WlRmNG4/aDosRz9ULzRHaHFxTSNFPkNbWUdkXmEyYTtJc0UlNm8wKGA9d28pOEBOKGM4dnZ1PTFEPD0v'@;
put 'WjY/U3R3NCZRQ1hwI0oiUXdXeXRUMmJhJTtKenIjQGp3W0tkOV5aI0AlWkJxXnxzcjh8dEVwJVg6QmI2cE9pKj9oRjtBOFp3fmxVT2s8fGVjRDM+PklOdyI6JVFnQG1oUCkrVmN8ZFArYWAkcn1wNnp0Tmlnamx0dih8L0Q0b2EodFNERk0sUnlNQTVtREF9WF5IRjh2bmR4ZkRgK0BPLzhkPDtV'@;
put 'QFh8MHRgSWVdOTlbflNgL3tbUG4iQTRlVFkyXUclL3NqM2k0Ul9WTGhXcUVHXXcjUFshZlRZR1MjciNiXXpuQUc2IURiekYqOnNWL1ZKckJKSH4sSCJGNzt+L3prOXNUbz8sUT5+QSN2R21DUGZedUVWLi58PHJWazZnV00mRlU/ZiZ3fDspeXhKRGBvd30zRGRQQCNSWEokYSR+LG1aJEI5TitO'@;
put 'aX5qSHM/cCIsPVNLTmk0MUx3W2EhMnYqUWFPTDhFXlZsaVg7UiZ8N3omMlltREUhMHJ+Y3wwdihObmlvKHA3VnlnOjJkcklucHRaRVFNPj5yRHcqKUZdMG03YmduP0wlNCZVVnIrQVdDVSxLd2xjR3ErYW9BLy8jNHAjQ0xIcH4vRnBvZFRDe1pOPGpyOEZlbVNtKWRsOE1aWTAoUiFPMDVPIkF+'@;
put 'OmpDSCtJVDVmP046O1Y1O2xPX35aQFYren5RKU93MVBWdllBVmAjbV8mUW9xckQuXTJxL1smQGB1PTJrdG5GWiYlNlFCRVJ+ZD0obVY3fk1sbD9Ncks6bXlWXU9QP0JuWzBtUj1hTkhtQHo+ITp6M0Mvfl8wJmZ8MnRBX0ByWy8+emN6I3FfPmN+e0pwY1g+SiJNYGg8U05hSEJ2UiQhMlQqMkhk'@;
put 'SzxkdDFgTixgWU9DXyxmSklsXlA/ODBII1h5NkZ7ZCVqRV1MUWdQUUxTSGFFYlMqQFlRJEc+VkhTS2YuU1p3TExNKHQrMEIzb0h7azFtc34rOFRUPHYjQSwxRGxjRzgxWy9TUDMqSjBXJjUvYkZTJkh+S2poJV9AWyJ6Ulk5YzU3UkREK0krU1UjUG8vfnwwUUxxc3UiTU5IR1VTJlp4R11qZl8j'@;
put 'dTtre2FKbEhVIkRfM3VdVkArLyJHP3NSUi42M258dWI1NmdQWiN0NjJUdG8jZDArb3EvZihaa1hENG84Ry9ZdnNkL2BoUnVZbGIkQ1c9ZHVmKnQ+bE8rJUgmaGh4R15KWnBMeExrc3wmMUEhcD14W2l8YSFkQWpSOT9leEpbX0VkNzR0Zm5uP3lEKXJLajVaLkJRdzpuOEd6bHVxR3Qpbz57Znc+'@;
put 'KH0hNGgsfTFCIS58UHZkN0ROPG0uKWpHQmV2WHJyTl06aUFxYH52L1UvZ2Y5IXMzXlRYQnRXNkhIdGlQT2BzJiUkLnxhWiN9YE9NKnVoLF9qXWsxYS5fck1seTJ7WFo0O1MuI0YyKEAzK1JHNm5CVyZpPj4zNjksdytDTltMLktLPEcxZFdeX1Q7PXJWO2V5M2FobC8iUj8mRT48Q1BPISp8JE4i'@;
put 'cUJdVlAleDdFfGNJWEs9Onp5VncubDlJcyVrJUlvWEdocEhMMHl4cnl2O1NGQCpLNEo7czYjQE5OcF97czExIiVlUGtbek5oOkQvZC9lSzE3UFY/QlUmWlA/UHdLaGVTJFt8KyxWYzRDfF9kYFZ2UTgpJWFTZSt+Syl8WD1wQnojd2dEJEB5KnJoQ21aSjhKSiF2XVF9aX5ydX5rZWpjIV0kZzZX'@;
put 'Y0VBNi99ND19Y0QqfSQrS28+L1YrQmt8UH0oTGRCbWk8PihYKjAkT1lzNWZCXlF9I1hoMjwufnJwQGdwYWhdQSRLa0psfUYke199IUdFJV1hKk4qcVVTZV01NHB3QFN7VixeJDI2RHcvZ2lEYE48bWRqKzdSfm1ERnVuYnNJZDFnSmlSIkdtMns+Ym9lP0s3KWlwOmpBeiY2PlRiYEFsaDhVWXI/'@;
put 'KDpxZX10KStyWndXJUhHLl5GZUEoP0Ejak9PdSpebWdCR1FSbSshZTgzeVdVeVZPTmorJjNGNSNHVkpqZGFzZjBJVFRXWGpfYUJpM2tCImdwbHh3IW1bYzgkRTdKInpQL0ZSKWc+R1ROLF48WEV2ODZGeUlPWWg6TngoVH1DSWpOOCRKZHt5NW5WXWNaQl1aT0E1Lj5LWVMuOmArZVh6KnlRS3RV'@;
put 'W1p4Rlc+UTY0Z09GNV4pUDZjTWwzclF0fTJNJXR6V2c2KHosQ2ltIk1UUSI8dW9ILkJrRnl1Wm0yQz9dTUp1bTN4PkNNdzMiSC9pTSQ1Li94ZVUpXjMzaXl4ZiZCR0AwKFUieGUrVzshZnlnc1JaJHYmVTFaSCRgVGE4JXNLaWN4ZHd5O2ZOd2FUcGAvTWxrNWQ9e0hoWCFsd0tiUnFeJCt2K197'@;
put 'QDVifVdCSFdDRWFySVFDPX1eX3QjYmhRN0k3OlR0QVR1SloxKkciS3YpJHJtInd1KEBXJFZNaWVUOCk6PChpfDpwaDgrZG5RcU5VWmYmdi9vRW5oe1ZXKSxKTG8oTWIjKkckZ0RASSlsP3VyLjosMDQmeHtBZH57KFRzNlU+KFUpVW5EcG1rSCQrI3w/TypjfEhJJW9HYj1lODlhU30sUnpYPmZ2'@;
put 'bVN+RHEuUEJbJk9pQ2FXRSs2Tmk+R1Z6Xkg5eiY6YjF7PX5MTlo+NlZWe0oqdEFDb2AsdXEqJVg3aT1uOVBKWFIzV0QpcmA6KVFfPVkoI0ZqRWxRXl9BcDxPIl9mRzslbkJ5aElFb1d4TVRqbWQzRGUoJSl7ZiVIOjU3OlVVSmFdbUdNSzVPZXB9MFI5KmhLSGVjQ0Bqaj9yS2FMX0thdVBzMG88'@;
put 'cT5aTzMuY3xZfkdMKjdKcj1mMURVMXB2fV81a0ROLDhZYHJvYntBdkdfSnBrWm5CaVhvQ0Q/YWxNIzkqT0B6VG5BVDYyLmhLIVtlU058Z04ySnZoUi9MJjI4Vz0wZWVpemg3SiMwSjwxfmpiKmhtOTliSkI2OCpYXUk2NTo3fElPUXFrbGVAUm9RcHE8eHo1SlAoc0ImfWNpTX1rNShYYzxXZkgr'@;
put 'R3xTMDc5NGFgczg7XjlgdUZITDdGIVBWYmY7dS9sV1cxREdDbUUiVVB8TT1kIXVLbVhvLlg/TlJFXlBwSzhAZDklU2ZEdmExOnYpYX5ydnZ1cHgyfE1gWkFAaG1nOiNSZzsmYkNVdXtqPiwjeTZlY3wsK1EqbV9PKHREa2QpUUpeVyl1KSljL3hOYFkwekFzc0ZzUzJySzRWOH1UNyJeVDdOd2l5'@;
put 'JFU/cl5fV0FGd0YuQClybzs+RkpdInJ4RmRbanBrazEuLFM8PkUkfSUzWnpLITQkVzxufm90ZTZAanNFQjFjfShBUGtiNkh1PmBkIixyc188a3JCP1Y1aC5oQ3cvP0VjUlokaHhkM0BBNSoiV1ZSOFNlWj1NUF1iW05TRUVOU1NbWjFNXXRscFdZbTQsfTBJPGQ3KlpfQEtEI0RxYE9gU0tqUCF6'@;
put 'WVQhL0A2KWBlOXBoejBCZjNpQDY5MVV5LkQiYTxmOVhUSGhUQUl+IiI3VCRzVksyeyJAWF1bNTxgRFFPR2EuWVc7fEkyTnszSSFdKnledUd4KSVMbF5jcntNM3YjfnoyLlAwRjhPfkhQaiZvJFVwMmNUJkBNVFVfcFQ5XyJPLmdGUUw6JGI0UTlwTm9UTmlSc3JfPklzel1yXVd9KXFvdz0+IUNA'@;
put 'YXZNaDZXJSVaJFg1MGNHW35nR2tVWEVUOXc1TWVXLklEJDp1KilxdnM7TW0xT09PSy89UXpvQ285SVJxeUMuKyt7ak9lTGFbK0EvdE5USSspV21AeSNuJVtTOE9vJlNiNGdtUjckIkh9bzclMGBlajtwbm41Qlg5SW82Ki84elNDenpoT2hTSTNwU1I2ZnddfngyLkowX0F+I00oYStNPV1hOWBL'@;
put 'UjE0JjZ9KTZwTXVlflMyTkhkIUA1azI3Qjs8Xl9RVzxGI0YvW3d9UWZxX35gbTM4MkQiQHwkSTZsdGRFY1pUUSJxND1nRU9tNlgxV1VGa0lYMHQqS3o4RkVMR0pIayl6ck4+I2VoOjlQbG5nI0wjJlM7UyJvdFJCVzJPeUlYOFl2Yih5RF85JG01VDFNa0svaCsrPEk9WEh8T2J0SUdpTzs+Jllw'@;
put 'JFk7Sm03L0p5QUZyYFtRPnlTdiJHWV5EWEYwR2N0eFMqWXI/dCpScmF5aUomSE96P2dYYX42VzwxRV1vMUglYWYmUSlvTy97UDQjT2BLPjA6OD9EdVhsX2c0OG9wODpTQT03YlloczZieFMlJHw6PCtBPnpTWzA4LDp7dzd9PHpYNFJASjREbT9yKU0qfGQoJGgrcVs7fnBDMVlVbyY6azI6YSQh'@;
put 'fkE9JDRjRygxeWU3an1lJUhGQSxhKV1ncCsrInVvXUFKaVhaQFNnenY0QjY4dn11IWNIU0F4blVBW3lOI1svZS4qPj5gb2hwIkVGL3lLcmhAJn0/NG9kS1ojIShQOnViVCR0NElYMEYqJSI7WmNYPjRsaUBzZyxtPCFuWWB1djZ4XSMrUkglWEIkL3FNY2NTWGdTS293bHRSYCsvTFd5TmJENnUh'@;
put 'eHdoRTd3Tm4+PVtlPHwuKyUiaWFaKCk+T1lHRVhQWStIOUdgdWtTKlVFe3Ihc2ErQ2R5Z0I3PFUjOFN+JnglSkRnOlRrSWp3Vi9sUyx+V3IzNypaNixmUjZBS2A0Nz57d011TWVebnd4b2JOVko+U2pqT2JNOjp+cnJdRktefSsxYz1SOSx4Q3xBbSREQDx6Qz1SOk1AM04lbGBSLmRbSj4oNWpK'@;
put 'Zns1O3lxPzB6aG5gREY/X3shfSFxbFN7REdlRj5vbU9zeip2V0pIekAsaW4pOH1oP1QsSURDUklxc2wyLk9tXzswI3ZmMjt4KEA/cXFoXzBLRmtLLjYvYlBGZjd9PlI3d293fGVzVVJrTH5xWnVKNVtHfjJ9RGsoWDY4MlRsT35fQHl1fFVSR3Ixczc9MHcwI3xldFdkUChIeUM2ZnFQLDBvK2RS'@;
put 'Y0FXYitdVipxaEA6JHZaeXRdQmlgPUZAUz1+M0p3c0ZhPChtZ30mVH5FbD9FS2xeL2MscnY4dDZTb1Z0M1BYIil7M0k4ezZ0WHY5QG9rbGlqMDNWXyVbSUdFPXd0eD9uU3x5R2YuSnUkP1pbOV9fPG9GdFVPK2t3enlSVDRoUU1xY0syZEVVQW50XW81QGM+eU98ZUxJSy4la1tSLDBwM3kuViw1'@;
put 'QGBMVz1TbiFZT256JGYwbiZecmhzWTl6dWZ+Kn0/V293P2JvZDVBc3cwO3J2OWhubVBXIWgiRTlydkpbO302eGJ9P2dxKj1tX2Z8JXlYMjE9YjQ6M0AyYlRja099MW8pJVdMdWE9MW5+IX0+ezlnWSsyaXElJUQve1A4OWZHM0B0cGtbUSwrREsqQFhBTSFFTkRJdUh7dk1wU31NNVo3cH0vTWA/'@;
put 'Z1dLX2NPUEF6al8/NDBuYElebDVuKlU3T3Y5ZytPdlhlOng2e3FWPVVSaS9edkh0Yk1sei9YKjNqJCVgMDBHVilST2h+djlTKzYqNiVZTnVIeX5CJFNXaCo9OX18Vl1nbmU+NHVJeDRPIko1KElKWC87R2l0Mzd4fHtLNU5wPSgqX1kiV2ZgYn1DKjIrPCUvSClofi5KaTZvdTNpYSF7TGApdF1y'@;
put 'M2dILCxlRnpqUXByTE1IW2w6OGFPfTQ4QWQ9dEhUSl1vQ351WXpVVD02JWA+L09XIyoyUlNGJWE5YSJvKzYsQC54ezB3LE1WKFNIcHdnPDQuIyRfNUpaWVJBS2BAakdRZ2V+NkhxaX5ufWdZfjl5Jj1HL19tSEd3RVt+WyVvY0hzSmpLeUV8QyMjT1IjMHVXNCQ1eGZzO1ouMT4qMmV8I147Tklj'@;
put 'UypSdjNMQjB9JT5hPiRIKXI9MXVdJnciLngoM3pOZE48dFB1czAiX1ZpTSsqaHMhfHdFIWVqNHFud1Z0WlpwJldfUSVwJUh1OXI3c2gsLi5KPCRhXmU8clJaPnBWOmUjMz1jPT88SyhvKi96NXtAVyNkOlsuMTpwT0w6a0hRTTI6eiN0JExeI0pOJGgzX1YmTm5bPnFCJGBHfko9MEw5XW5QdD5Q'@;
put 'bFBAZF5Wc2tqdjpeIlo5c1FdLHR5YCFCOkgpPHZ9TGEqUj8uRnAqLkxyQXQ5fTY2fk1Acz5KYVYsRD5AV212YGFZRi5jV3tDfTxvR0oiPURqbHlmJklaPmF6c30kIl5LVTE8MHooSyp+bCNJbl5UeUo8RUAiSGNCc3cueEh4ZWZdXmduW2xEY0Q3Q1tXKkVWVy9QcGN8e3RBJk1AOj80aldlUWR4'@;
put 'cWF5c0czQ25EYDw6XTpDcU5dfnI5OTZ0R0Y+X2YwT01vTyFebU1BKTV2bTw7RjwzWHY5RSQrRjwiTCI/eUZyQF0hJS5wZ3IpNmp2b2taUSw1P3xkdWFaWD4kV09DZHVNaUpyKl9LeFI/WnNlVTc2JSkuK3MqPml9WjM9XXM/QTFTQi47XyV9KyYwcDkwZWl2QFJ3UTorVldCOyNfQzpFL31rNk8s'@;
put 'K0N2byg8XSw/NUcrfTs3aHRPX0RGdCREOXkxMTxAajhhODNGQThQaCU4Z0BeJSowVFh8M2VSTmJFSCpJOD8+W159RzVwYlUkelQ3fHttQn5WcktjakBgO04/U3xaT3tEO1ldMyliZyJSTj4qMkhOdk10QklxKWRXWTF0NGJqVTQ9TUNGbyNXRkVxIV1tNDErdT9WaktISFhyVjBUe2AvYEt5eGVG'@;
put 'dmV0R3Y7WzdjclVFPU5sJTY8Zy9jKmlCY2trdHByI0Z0VXp1a311a0dNSCElcndAcEBDIXklLlVGMH5qZTY9NEcsN2RtdmAuKyMsO3lMMDQiVk4vLF9pQW9DIltodSF+KGVVKzo+bj5gbWxxeF9bM2JMPzlAamVObVV1O1VhKUBed309LF9xUSRka3A0SSJ0KW40endxcS8yRj5LRmVBe2R6NmBQ'@;
put 'cjFRLk8qdEU1cmZaRFQvJipBP1NkQXFRXUA2UjQ1OFBDcS8sWVhKW2VhUl0zR2Y1e15hWmx8aH0od3t1OW0/ZGh+QlRHVVgxSS9UIXkyRUp9ZkZWWX4qNSU9elVmRys5SVcsQHx5eDRNUCRNcD86JV9eOD9DRlI5KmdIUWg3IyxlQDBqNW57KUJhI3l7NE1wdGIqIlhGOyh7SV9gQFheLi5wb1cm'@;
put 'UHpwezxRWH43KDAoRV5ldzQlIlRsd152UEF3KnUiVDFVNS5QZTU5UVhYQjJAN0N5cFlfeUJYPFNLXjJvNGNlTXRnVncsW2JIdlFheTckMiloImk0RXRQS0lDKnAqaEl5dkUoXjFQUm9nXVdMRz89LnZ0SSVKTEwrLnpFZHhaK1t2cTJjSVsvWGNZTWBFWi4jZzlDcDszbVcxd3JWKCheTCV+TktD'@;
put 'UiE8LyYyS0l4cmU1SEY1OjBISDN5eiJBWlg6dkhhYHo2NDFLJTksUkJ2X3RWLD8jWyRdPUwyem5kUk94OHhqUnwsTTMpQlhiM2A1TDllNC5gOlU4QGY/Rm9Pdjh2KWkxLlErPzpEN15rUFtpRl9dQlk1UmNGaD17bW5DWDBtW2xWUFs0KmlvRFlLVXZ2T0loWUJ1YnBvWmNobGJ3LGV0eUYoUG1K'@;
put 'enxKMyxMVUEzTVR1PW97NnEoL3M9SHtPJkh7VmAhN29GME83O2pkQyxlckJPJmtoIyNUdUR2X3lVQDoyVnhVOCFjS1JFNDNOJUtIRmBFemZSaGdTdkk6Iz82dXdUWGt3ZjdBby9BbCpYdi4hbGpncV5EMkQlPng6NEpQXTMkXXdlIVg/LlJzM10xaEo4d1gkY1BLYFJ8dlBJOmlPL2s5OjB0K3ZZ'@;
put 'I0xadF5VIzxqanVYdDU0JS8qI08+bjAmRzROL08pKT5mbSZ3ZkpqVyRSbktlZ0FtOkNPb3ImUExCcygoQVQ+eFt1YCU1ISViJGdKeHdKe01TfH0mY0hAL2F+ISs6P094bmNnZXQhdFQ9NE1IOyx4Vy5HdHVMW3FlVk84MUp+VGZnY2ZBfDQqbjdmNFhrYl5UTVd0OiY/Y0xsMkJNOz90JiNPRW5V'@;
put 'LFJaej16YGAqRT5IKHdFNGN6fEAkUFBKbzNec198Q3skWTQ/SFNpR0VdI2VSWzdULFReciZ0TXV1VFo0S28qYERKMEslOCRYWCpgdlt6Sl94RyFGWWQ5VjtvRnZbWlphcCNUS2NZSHo8UzgxUyF0Kl09TXwjL3JgNDhDITxMREcyQkRwMSt4UnRfNjwuN0VYJmo2W21LLHJgVmFCaTo/MzdXW3JR'@;
put 'bChzSktyLDg6LGBNRzoxJGhLYV8hSTg4RlE1YVlDfl5MK0QreyVjQ2FiR1E4RzBpX1lvXjlHPH0iVH5QbzllcCl0dW18dS4wW1QobSVKLGZMdW90SFd0T2hSbjx6b0MyIWFIR3N8InFSY3dEcC80WkJbN24xZjlNYXZUekxZeEoiKHU/ZjZgWlMjRWw+OTJoeVZoTyNYImI2UWFJWnlfM1JNNEI8'@;
put 'Tk54NF9AKHxwPDxZPndrNCkrRjtxOGp7Pm9ZWCw7VFhhRyFDcCFVMko0JkExTFtpRCtGeX5vUXlwWT9deUVyUyw1flFgSllJLyRBVCpsOzdhcyFKO04sUF5uMi5bZHs3b2hsKElWUE96Rlcsfk8jfGdmMT9bbnRuWGldZVhYTGFZamBCUWxYcEZQSXRlXVReYH5MJl48aHheVHw7S302cFc8KWtS'@;
put 'STxFZ2RFN1leWmhPXz4zY0pwODA7ai8jQEQ1YHB6VD89Vk0xYWFHT1spUzhKK196O257Jj1FPVBMJlIoKzdiKnF2a1VmKUJ+JHdCMEt5I0NaU0BbK0tHVV1gdFsvLHZrP0AuXypjOHdadSYvdTFnPlJab0BNISxrXkMoOk5RIWIsZE9NYWZebDVRdHY0Kj8/LkoyKSh5cWIiYjEidlAkUSpkcU9x'@;
put 'empUOEs1LGRrOy58bnQhZVNKVFVaTjA+Yll0b0NAT1pFVyVPOnAjJFo+RGpKSmcufjg3aVJqNVR+R0VGUFdrO01FayV1eV8vU0phPFFdRzx6STBxYCZSX0YhQElTWSEvUzU1XyJUa0AvVlAhRlRpKUR6LmVDaipJZSN6WTUvNXs9S2VTLkZxPjFbUDAidjdAOE0vIkdwfFJ8Q2R3QFRCYXxLL2lL'@;
put 'R0svVEZ4Z11FfTZ8bVUvdDFQXkpXfCN5Ll1zJEREciMqWTwrd2xUSF5IOWBNLCVndjRAYytBRmdDfX5uMWIjcCJNaCtNc2tZaDgrfC9PS25BOkt8XSlWfHlVfjomN0VyaylENkhNPnF5WEdSZC9NU3VyOU06dVZkOGVxZm47IWhxSjAzfmdfbVBYcnpjfGV9JjhtTj9kXjRkWmkqcXoqL0QoLzEv'@;
put 'OTQsP352P2VvJnltPW9aVmRRaXorZ198RDZuSFo9fjtLPEkrLix3aSVHTVhzQD95MCtqYEssblg8L0BIYi9kI3gpJXFnNzZKJm9Md3E4dSxgOnRfMykwejJQWiMrOWVYMipkezJFb05GMzBQaHQocm9RfSp8PzArWSxjP1Y9aTFfRmdxWkU9X1NIYHtYUi5GO2hxPEY6JE87XkU/eVsvZFB0S2ch'@;
put 'Wlk5SE9GUzhzVTw5Uzg4WjUsMipgN1ZxajdmTlchc3lKekVnb19PTktDZzYuYkVIWjI+T3t1WHt3eG5JIT5eX3k7bklzMmFLSGtdWCZ2PTgxV3F8WlJANzpgJFZuOXJPQWM7I0FYaHAkIVteO3lBQC8uKGVxbkw1Kk5gcS9ZLygydFsxb30mNkwiPV9TWXRqQTk+LGFNQ0RsSWx3JEoiWXdYVk4v'@;
put 'QVFKP2tgVCxPZmo+bTFOZVNZNTo4RzdNZiN+MEJqfVFHVT4jOSksdXgiTX5ZUFpTTm4heWw6ezosQEdsRSVfSUBIbDlIZD48RCEka3EpIz5xXVh7LlYlIzJGSyE0UGE3b3U7an1SZWovdEwhdkdPYmBpXy5MaVNhQjpvMj1VWDd0b3I7W1hkUSYyZD5qMCRFInYkZTx1LkFafWxxYjE1V0xxQTpD'@;
put 'P2B3UztDWG9INz8jW3lDWW1NWWtdeXY6ZXIpXjYkTDh0LF8sJTk5fSlnKkZLOnpFcyhiTFN7L11Sa2dSLytFQVd+X2x0eHdwfVVjTyl9cm5uLFZYLDYjZXZWMUduP31xbnFoZUdQJT9ASn4rPCM3YmhqRntBQ3Q/X0V6M0s8Jmw/TXA2b0RfZEFPaHBUOClPPlVTXzl8KClsUmRJO0JSPX5KckYq'@;
put 'OExyMHUzbEJUOUhtOldNZGxGRl18PH4ySiU9Znhpel58W31iQ3BlNV8rUUMvS1pMe1tLSXUxLHB0b1heLzZxQXohTjBsO0NyTjtAezg6cVBCSi5AJE0rOTJMM3A7Qjxka2BSbXhNYzl+cmc7PUdFWD9oYnJrOlRTVWFvZklaUSZLU112Wk1TNjFwW1lnNnZGIW1wRldMaWVVeDBIZTB2a2NQJTpj'@;
put 'QUhPK05kUTpGSEJ+cV8+VSZbNFpvXj0kTkNYTlEheEYuUEU5LGtDJk9WWCMib0EiJW9wfCYjLG5rJCt8WkErYSV+NXFxJFM3bFpNIjFiaz16NDpsQTFAOWtQfmxDI1U7I2xqJHNSdzVkaDM0Klk5T1ZTOXQ7Vi9VXTN2cD1DdCh6QmtWJUpWYTx7Kl5gdFsvLkNdbGtGRXBiNWV9SiwwMjJrLnV6'@;
put 'flYpUDspa0pqSCVyXzNxTl81PltWZ1pmT2p6aT9kd2NeI0BnO1J0PHNNV09nfChKalFjcjwmRjB8Ny5eIi5HQkRvZ2NxZW1HLFdUdmBrNzE1KmZYPVRKPCNEMmFaTSx0QjNWc1N+TmN5LmFVUVM3Tkt5aiM+OjFXJi8jO21lTGc1S3dMLz5dWiVbbT1MZGk/RzFGa2g5dGRvKnl5P3JaO2poQzIs'@;
put 'R2RqMSRCKk5iNnF1OW52aWIxbVNpL0JNJUYuUWg6WDxkW1c0MDcwKmxTOTNHNDxINDFObX5OO31HeDszNzVaeFhkWzUyKWorKF17Tks/N0QoQSp3Ny5CO2VPWDdeeGtZeWF2eGxSKyhWPls9LmlYK2BKQDwkL1cuLmBya0xuPzU6WHE+fT4vdUcxcXEiVkAhZCpbMGw3dVIxSzNbSTQ9KCZWOiQ+'@;
put 'RSRAclI6cipAaldCfmJxSjcpUnxaOmh1OF8qUyNVQWBEdDxUUXVrPCJ8MFpjc2FYTUgyZHVkTChHcnFJJkYqLENNKTddTGZQRWlYKTxpeVMkQT1JYls1Y1E1SUNCWnBAO2MkSEQjLz5VS0BnYG9gNlJMY1V7U1N0NTd5Xi55U1s2ZjZJZ2F4Wit1XkdQSG42O3lrLENKLnR+TkplcE5WXyo/OGlo'@;
put 'O1taeCtjfkZvUFl1QWRqKDs0K0tGeGR5PWgxISN0SVg5S2lsN2k2PDdxTEw2blFBWU99PUY4YmJ1MEdJcEBfUFA7P2Jhc1R2IkdWXXo1Z289akcsaiVqVTQ6VEQlYjNCTUhSKlBgYExAak8oPi5WXS9dP3w9Nz18VEhAOUhoa305RXZfQkYmZUh5cSZIYDM2K3xUOypsNE5YIzxDTD0jcSlzPTQu'@;
put 'RUw4S14kaXgwWSZjYUV0dCR9JUEsUm9Ja0EkUl5beURdKXVFKTJtXnFoNyxsYVpfJU53TzpVUnhEV1NhPF1TIlolX0F0WEg2bl5hcDttamVyNmFWai9sfDxzb1hdQix5SiRQLFJde1IjRms2W1EoRlRZV2dGVEJ0dGJGa0whbDtpV0JaS35+bi9gODhmM1NhTX1iajlYITc8eDJSeStjQzolantk'@;
put 'RGFYPmQqd3RQRyI8K31hYTpxWyRmOXNZN0FsITclKigxJD14PXpBdSZeIiRCLjNWW2B2SiwjKV9GI0IvXyMiZFt5aWJsN0g2YDRXOVQhbj5ga1Y0PF0yRCR0KDZkLGdCUD5BOUg8TWRTaDpnbFtrLEJbcCZEd18mOHd0VTghOloiZTIle1d6MUNNWmxgVHxQblBNYDhHJF0mUzp0LE8qOjB6VE83'@;
put 'KE5QcXFXS1FqZE5qQDZtY1UoZElAd0xNUT5ELi98Nl5Ocnh5Nnkoc14+PX5vS2V6Y0YxXXpaQ2hRSyVBIn1xPH5sYF1RZyJoUzdSb05ZSHlUWGl3IXx9cHl4cSUoZnZsJTI7JTc+WjhneHV1b0JiImNRN2N4bCFQImYrPyF+dmo8d15zTldrZTZ1V1ZHQFNILENud2oqXVtIeHZ3dT5edF9SOEFO'@;
put 'UXdROiIzNXlkX0Q4QGRgKTsxV2FMZitKNCwhb0g2NCVwWFFKMylGbzZTPWssY3ZOLCNafm1VYypFM19LVFBQZGttRmYlPysrNnZidFRRLzwkc05BYXIhbS4mZnhMN1tzbzBnakYwQlNseEFyO2pKZnN7ZX0oYXpCKT9McDJGUl9nXj9TJjchNSEsTSMxYGt5OEVQJUtJez00TEpNWSE1O2B5PDEl'@;
put 'dCgvcC9mO0RKL0Y2fkwoSS8zKDN3e1thY3c3ezdoSFsyKm0+enhsbyRtNEghPEokJXpxZjIjKlhUR0R3XSt6dyEjNz94eyRZXjAqOjh2WnNBZXtZYU92ZSY1dj86fVNKVXdFVlo7d0lDeWgjNnxISCYsWyl0eiwkQzhZJC83ZkhbfnhkemJXR2ZlUjNfJHp6aHNJNykuKGVLR3EvXkRmc2xlWVtm'@;
put 'Ty9YR3FVSiVpTVEpPnJaKW18TUZlOStIb316PjJFInksRDw5WmR8PV0zbDNdfF90PjtJUGNUVUdWYiUrTHtuYkVuZE1DJWt0JmFeUmVvd0djdnpUM18yQk1XMl57R0ptRFBsJkVPKksiRS9USVZyKHdCYEx7bWUwLm5fSEtiUW44YHhDMXUvezVpS0UmbilVTWAmJlB0P0IpRlB1JmYhLFl2NDVA'@;
put 'fWpPfFk3Qi9FPVd4YS5hNmtWbXY3Rn5dSnZaZUxMVksuZG5VZ316YmdqOl5HQmE0ekpqc2NbeyVgSUBTeTM0c2hfS1o7VXp3UHp7XS9VW2FIT312VElUP2Q8XUFYaVVlLEN7QUI7NGZ4VjllRjJ3S2ZlOEtrP3U4IWo1diNJcHp8LCJlSHtIb2p3YCQ8OmQ/WjlPQFsyYmNLZHdYRWp4Yno/XldW'@;
put 'elpPLFg7MHBaLlhwTiJ9TClXKm0wXWVwdVJaKHNAND0xZkN0fSxkN2JHSn5vX1IkTmVGYVsoPW5nU0Ikd2VMdnkzS2ZyaGJ6aEw4IXpIJXtGSz9ocHRMJkhSPi88UFdadUl6JjNHKDVwPWxAPkNsVSxOWTBCR1M5ZlV6V0JMQmokI3che2ZbcCZrISQrW1UmOnVIWDZsWFBqUktKW3Z8d0o0PERt'@;
put 'S01Nck1jaDE6STcpPyRuVjA4VDFadE9WSlVfZ3RpPFpXbzQ3TzBEaGluSTBbOVovaS5JKy90ZzcveTQsXTJfbV8yX3tXI3NtNzdMXzQzU306LGxZdWckZG9yOVYpaUJwYG01OG9OXXBqIjcrV3FALlFYKkxpXyZvYjsmTl1uL0JHPHt3bSt7cyVTZ0tBVE1LXTxWfUd9bEtQWVZ8KHVtX0ZHOWxi'@;
put 'RGZqVz9BN3UqPWdWRks+IjszdEkyb29nRj87LiVDYVpSYjBuOGREfTQuRUMyTiNvUG17cyZZQTw4JTImOE02IyIyVWVpUXwyOkt5MC9WM11pWHc2NmN3RzxucSx7Zm51KGtmO2dtRHRBdF9HUD1hV35GVDFual47WFFmQy9ZdVAsXTswaC9YUHBzInJnSThHIk92VHY3KiZHWXBnKTZ8fSkuXTMz'@;
put 'YkZ4fTwuaWQjXn1aMFd0Sm4oW0lpbmwhPnRpZlhacXQvUCl1a1gsZ2UjRWY2NzFoemNSQ1BJI1Q1VztmfGNoVG9ubmFPVFlddCU2cUg0fVNvKURrL0BCTUtoR3pdMWhaYShvcUE4bUFxVjhVUShvPixuPHV2LzEuPDpmVGspPzVxKEJ3d05OOzE3ay95enZEIWZNdTA6fDpoQUdGfSR1N3UmaEJ6'@;
put 'ZVVuaHU7WiQ8aUJEeUo+TVd2I1A2ciY5M3dMWVNbTURfM1ZbVUIqM3pTUltkJlU6XVh7cHl7Smt7Ml48VmhsJHJCdjozQUc/L2BQfXB8IXA9Tz49ZHN8aC4+dE1sNTxEdiMyTzFdJEx5e3x4Pl40UE1DQG1eNiI9VWMuNntebzJSR1J8Vypid1E9VVhQR15SMEFIMV05Vm11UDFKc3VoWnw1O0BV'@;
put 'SSFpJlAwNlY+VEJORWZrSU0lejZ2fW0lPUZYMigyOzNSLyxLV11deyYjLCtLeDVUKz5hTXMlYXF6THpoXnR4QW04QTI1VSRWbGtafGx5YntxSFErOzc2RG9udWczNC9bYz1fXSFDMklaZ3NQPyM4OnUkdVZiIVtpYVFwbCYua2FJfnRneTQlRGsmMnpWV3wmWFtPYjRzM0gqMzhaMHs+TCgsRllg'@;
put 'SnJ9JXpiZCVSImFyVk1TYVJ+QC42YCV3e1o2KE5oSEY8JDkuNH1PJEFFJG1GZDcpPStbUXFMeCRmejE7MH5gJTlEZEtIJVJSa1ZDXiFnYElUX1RzcFRgMyhAVC9UdEg/ZSN3OUAoVUkjMVpzeE1oR11nNlEqdWFHRW1wfl18JHFoeClVfTNQbjtqSXl6SCJYY2p5b3ptNk9AfURGX2tzQlZCMVFN'@;
put 'NzZBeSU8aFBVdFN7LzB5QzRASX5YWDFkRjcpdmxpNGwjU1FWbGMsV31eX1pZRV97RGxtdjc+Q0Y3SHFZMC9mMndoXmBjRE1sRHRZNEh8TTNRMitDQnxFMDVtRld9fiZ0UURLXXFgV21fa2A6ND1yL2RgWitdODd1LilAR1kvZD4mUVBIS2VYTyxqMUZMbk12eG1TSG1ZfnEpUGdJSl50dFgzPVJo'@;
put 'fU4qQj1Kak5pJCt2KGdbPjAvOkldJSZSZDR1UEspZWNyfnY0WSpLZkNPUCNeZn5HZS9OUWRQN09tI3RNRSFEaEU1T29wQUYqeUk+QGo9JEpAUyRmRkYyMHAxdz5rSTpxZ0pHPkJvN2oqeWteJF1tTUJQeGczV3RfPXR+WXF7Qnc6dUh+QW5FKiRKfWxYS21EcnYzUTxGK3IiN2FCOkwoMGJGQmA2'@;
put 'ciJJfH5IYT0rOH1jSEpQdmBhVUIyNEZlI0xJYThHOEIsbFkzeFpabzplQjhQSXYmSzklaSwkV2NiOipLPEdaLGlgNlFjLytdaHZIWWc7Ly84WHpRMHFPR3p5b05fWyZlPEBeb05rRlAjbVoqTGt7Rnp4OGRlNF87QS89YzwyekpSZCY5SXBFbk8uRFpgcENod3tdbXQlUX5fcyR1NjtIZUAwb3om'@;
put 'NUBRTTRZYXF8QmAmO182PksqVXBvQ3BaKi9kbDNhMjpfd1FmT1M+aDdjT2Iic2JgLyg6XXdeTUMmZTA6bEhgSE9RUSlfdiZiPWNJOyx0cFtCVDA5VHZqeng5cjFlc096KWRmTWNhNkYrbkZQYFArZTd1cXs3NG1RLzxCXiJMW05xT3B4KGtMYk8jQ0lZWU1oQyZELE05W3YoIWVGanRHZzgwKXZQ'@;
put 'ZVslVXY8Rys1cSlhLlkkIVtQX0NyUVZPaV9LeCZKTWQqUi9oMlApO2NQclBxbF1OczxbRm9iSEUxVXo/YFklT2gqOzV8WlRifXBtfklvR1Y+Y1FsYX50KD4oKTcuJkI6UnFZYDxBQ05TJi9NfGZ8Ll5qJTwzWk5YN2dxQyNiQiM2WmkzazEpY24zLCM7I1BRJlgkRilVNzNDLm8hP1JjRSkvdGc6'@;
put 'N1dwVE4oUCx2R1soTy5SLnU0TUVVcU1WJGQsdzpkKDpHMWcjOkMybGJtMmBiYiN2aSpXU3BxM3sxaXdmMWoqbVF8P11IXyIpQXFyXmhMRmlYSWM8V2U6S3dAOT8qYXEqeDNjeU5XbVNsdFBDZHR4O15lX1dZVCYoJWVbMl8mb1tzIWB5SFhxOClGN0NoZ0g2QlMmQ05YZltwYjpDP253XU8sQ2Y8'@;
put 'ZlJfeVBvMSZsNVFiU1tFRG8hSEBoVyo2dlU3KjZdVDhZXjpEaihsUDBGRSFbbGQrTlZgP05HN0A/d1pmOmlWUlpsd2JjTXY1NGgjaVswKmgrJT1DVnBOUmhnbENNQ1I2OHd2YTEySUw3M1AoSC80WHEybGEhK3ZtOCl2dGokSSNfdDtncmBbeCtfeXs9eyV8fFl5KDlgRkhUdFZEUWwvSDtBS1I3'@;
put 'dWJvfnowM1M0I18+ZHRiJTFFOnssfj9dZk9KSSwxMkdQJDAlSnlrJTQ8Sj5bTnwjbWAraHx0TVp6TGEqKCNwUTU/Yys7YDUxO2cjTTBHWGs+NCM7W1R6fCh4KFtRVSF2aGBBbV46aWpkdmhOez10I0BuPExxWn18YUQ9LDJGalZdLzwxeUcrU3xQemFqN0UxV2FHa3hoVkFgMjttTUgxcDp7X1Ql'@;
put 'fktKX2QrVElhcDJbQ09WfkRkPnhgRSl2Q3pNKSxsUk5XUjUhJGVBM3UjezhAVGJ1IkI8XUQqZlRIMXBdKmk9TG42Z1RyYjY1YUJUN1ZoQkZ0QGJlTzZyMHNDTDlBJkdWbi9OYj4jUl8/MiUuN2t8ViQjcHx5M1d4aTtKZFtPc0FacVIoaXBnMDNgcllyQ3QhK3I/dUxDQzlpMU1CPmVCSHE7cGZZ'@;
put 'aTo4NEg3ZiNmNFt9PixGZE0qZnNgWlA0PG98RzlfOj9vbnhqYD86OWJfcz1baHN2JTI1eldvZFl6P0ole1c2Ym4panREXyozdzM8b2xIOWI2O3Umd0BYWXQvN2ZHdyIhdVB2cX1uSTJydj1eenprTCYue2BafTxNVUlXV3t5IzQwSSsmdWVYWWlhK2B5Z2c6Ql1GWzAvO1JYe1QrW2xobnlDbTZ+'@;
put 'fEZmLi5LbjBlemorKyUsW1N6eEJyQjg/fEdGajR2KSFGTCgkbWpnLi9xTDl4Wn1UKzNUWzBBa1g7djhofTVTRi9LYjBPdz5jfjl0OCtJQ1R5S0xdMGZRfnx2W1dfZF11TH5VWipCemg+SW1FMEFQfn5YPFZiRjBHc0dsSEVuOytpKlVHRGM5cClgVllkd01GVU16IWt2fGlPW0l7aGF7djEwZH1d'@;
put 'ZFZoKVF2a04odC8vVEZfb0BYfTA3W0V9diQiNHFYXllKdyxjX0ElWHYyKlR2L01JQ3tIYFlFQVk9Lmg8cWVqS05MQnojZEJCQElhV08odkxeLy83UlEmK0hKIkVVMCxQNyl1OWh1Snl+NjJzaG0yMUNBN2dCK3hAeyhbPjBTLHRGbFJJRGI2SWVPPH44LDV1aWNnd3siPl4xVltjdHd0eU9fMG9k'@;
put 'bT9JZ3FEYkh1Z1NgMzJUd09AYnBoSnBBN2JVaVU8djMvMEdneDJkKGlVZFpBX3VlbWBjaUNfa2A3dUhsKzdbRC5McGtCYFtmNlBQViFCLlhAKlNURnhpfHE5K19QQzZBMztXPyxMQ2JrVmdyWTt1TjB+NlQpQiQ2akRQPXpuS0t6WyxUJiFRK1drKiU5YlRJMT1ZTVcpbSJASmVkZzZ8MUw/VHtv'@;
put 'TVY2KlZpYUszdl1yUGNUTExrUmBaeyo7Vlg4VUs1fkVIZzp1TWIkW3A0SkQyUEsqLD59QXBAMk04PnRULnlGUW9tYjE2WEhANyF1KTQjOFhKMFsjOEVaQlE/cjRAQEhkLGIxS3tqS1Jtam1KeSxqNkdDey4vKVFVYD5kfiopLndobTRtKUM5fDFMNH5mOXJoMzFXanZXUSs1Y1c3TmlpcyVTZUV0'@;
put 'SjxwJHdBcFg0Z1RHX3VwVlVwUmxIPFZVLEhzbCpgcHo7T3tuWk5JUXQlP2BRTEt1SjBlZnx2WFA4ODQiNFVTSDBDdWd1RnIqMGY+Z3s1bTk7cU9iLjxRem9Vd2pYK0BANCU/KHRLL3M2YSwkeSRke3tYTDZtIkNnIVVOWzkvRDg+W2dYSEh4UThUNDM3Oz5+VXReeUBsXlo2ZiIxLmp0R0ZXJDd9'@;
put 'YChTIVJHJCVweHFPcSl4V0xiL1hoSi41YSNleVRfdzUmZDpbcCNhUHhZeEk5dmNHKG5lLHwsdT9CUX5yfSp2dH1MOis1ZGJDbEVPZiY4eyZXNHh6V31IRWA5LH45OHQ/VHpCSXlrfHYlVUMlWSx4eTQ0PChePSJMfENsfFZxPiQqRkl1WHpoNXxJQ0czKWp3YFY/O1Q1VClbRk0yWUslR3tKSFE4'@;
put 'WTF3OkZ0LG11WW0xPCVyV05RbTtLYG8+XzR5KkxMMVQhPVVxP3s4K3RPLmNQaGVPX1ckcDNFTnFMYypxTXAwWEd5LDtkUXl1SDlmQ0hIai4hOz92bmYhaV5fWWUjI3koYzZUIjpkRG56ZXdLaEE4X1RISj1VTSt+PH5HPk9kbVFfekZ7Oz5+RVhydylpUyQlaHBRPmNhUUxtTGRxNUZ2PzIpTTEw'@;
put 'e2B0JTRGQG4ifF5sQ2VvU1B2Jk0mc3IrcCVCTnV2WVUkQmRHb2FEcmxCO24ucG5fXkQzZ0lCcSg3RXw5WDpdK1QrKS90MDV8VWAoW1hoXjFUSHtUPFdKYEkkb0MrYD5QZXFwWz4paX1rSDo1VFNrU1FCajYiTmpTQlg2RF1kPF95UCt8b2tjYXgpbCw2LzlnU0lmWEklUyZwWjEmajI8RkFkdXR7'@;
put 'OTJjOFFrXzMoTXRCKl5TSldscDF9bVl7Rz05Jj5JKnYzeVRiNV42KUkpQFpSMkVhV0tLan1UK1o6PT9gaVp9W2dGSylKdUJsdnN5WzlsPV94fHw4Njp3SC9GY3dIT2JqUV52XTlONk0mdGxKRn47bEVZJSFwX2ozWiplJSVeeE1SKFVpcU0qVjElWkF4WTZnV3VsVE5sfFtDJlVWVE9dMURqYW5z'@;
put 'YHohe0dhR005aVlWV201LkNHLHVKfCVhdHRSfl84IXhVRDohfSxLNXJiUXY8bzh6Nj8iPEU+PTZDQDNvc2s0XTUwaXg+a0l9Wz1GX3ZESTNrVT9tK0k6YVZoWHpLaUFMfUd9dUBRT3VkbGEsQStOfTlffClBVWd4TzpLKTA2UGdMVitdJEdCRHF2Zi80bHNaZDE+aCJLfnx8aV9JJnE0IVVCLF87'@;
put 'dDY1KDMpY3ZgYzw/PDJ8YkdYNH04eiF4JWUidD8rbXhUPnZ9MCxjWG9SWXI7cSh0MUBmN31RSE9IOXcuWSpQbm4yZ3J0PVZPRlJIR1peaCpOej1LJTs0NE4hPHc0a3cxa2Z1cUkmfFNGL2c2VkshXz0lbTQ7dTQuJnI9dXc6bGJeK0MkRF86Ul5lRT4zLlJvOXptdFYxcG9ON3opRkBsbTlZfnZr'@;
put 'OmskJFs8LkAweSJEaiVRRSVHOmg8OnlhUkUmNSZTOEU0JGhsJVpoV2U9QGxuU0o5PGlDa1s6QlFOd2dSIWByK21gTisofDtKaFU5LzldPz9XZWBYYXRFcDlGOFU8U0tWaHZQMUtpMSNmNGRqN0pFQ2tgSUJjYy9Lez9zVmlSflBXIj5QSS87W3dTTSlzWnhPIkx2e0c4a3oqPFZFTSJkMDhsQ05t'@;
put 'WHYuZDdlaUE3Mnl+WltRZEVHXmFLQEc8WyFHM302aXQ2Qm1qS2FPRzVLXnxjM3x9P09eaHtEWWBMM0JrdFo2Kz86RmBnSls2U1lFckk+fWlnM1l5Rjw3RjxqK2BLb3dOTEA0JCl2TSY2Qlhge3FzOFBsVFgmKDl+NU4jVCo1WWt0XmZmOjtIOitfQVAoMXhKXUJVO0BNekJ+aXhpTVkmZ1l3a19Q'@;
put 'bzFaQmxGPSFqSUZ1T0o3PUVHOGtJYGZML21dSklFJDxSL2c/WDksSWVlO3tjPEtaKDc3JTlUYVFUNj5JInBOITVgJlQkRk5tLiVCImAzSTNndGs9Oik+djReSnAvUGNZaSF1KCoxWWx2T0w4IldSK28uOTFDWlVoTEwpQntwZUpnODYyT146amZoaFBzN0YjQldIRlZxfGk5fFp1QnAuSkFpVXNV'@;
put 'aHw5bjZgV35AVFk2NjF2JiZDWl0qRiN6ck1FLiMmcF1wMFAzczN4eillRVhYSnVqS1lkYW5kYmEyL2x4JkF0TElRKVFCWS9CbzRHeWQ/K0pMY3R4TyQ7c1JFODYsVjlwRUZxbjx9OnRHTEllWFM8NnhZbV5nUk1ASiZsWltbaiMxYixJRy47QmBrWkpYamM/Q1RBV3lnUmx0XiY7LmlSQkIiSHBe'@;
put 'SjdoWkFmNlJpeUBpPGU4RyIjM15MI3w8K300ZG8lLkM8Ok0hMyVydjdmfFMrV09fS2VjNSE2PU5JIXZDMEdZQk45KVNYME9fUSo0KVleb2ZyOktGSlFeLjhJd198PmcuQ0laTVEuMiMmYk0oT1sycz1tWi9YbjtNLFZvV2x5JTFQJS9bP21nVElDM11wIW14WFNyUlc1WDAsNitNO0RsViVAfWAx'@;
put 'QkshKk1TfnY8UEduT0tfYVVQclRibj9WKiNAMXczZSNXQ0BPbXQjdWdJNkdgeVM2Q1M1SCx0Xjx4b3g2d0szSGZXfTolfT56ay9HRHJVamVfUUtZdFJHVUZFX2R0Vjk5dFF9OTkkP2ZuY3heaEBKRDU/RFVoLn1KVjNpI0UreE5kIWlNZTI+fEZtRCl8dXNfUXA8TjUuQmhZSiRQMHAvTG4sNjh0'@;
put 'SlBeL21AV0NEQFE3N0Z2Pz16d3F5djV3UioxZ3o3S0tbdVt+dCkrTnIrMHZVfVBdMVouWnYlS08iXUNEbXVeRnk1JGtWbnJQR3g7KUAxMyZGZkY0QjApMmo0RmZvd2VkJTo3MTx3ZE9yfCosXiRwYj1QOFJGW1UwT3suL11mJilHT1AjSnVxRCQhLDZAeihFKk8vLnVaWjI8Y0JAMU4sYGg7NHxE'@;
put 'eyVxMnRtMGk/d05yY0BuP0FsdlE0QnEofjYvUy5VPjpNXSZ+ZlRwbypjVWsmJCpQNnBoO0k3fVF3LmtVV0VwQzR+JGlPMyVYRmxHOGsrdyROKT1TaWlPQzA6dEN5O0tadUBSX3BGcVVWP3M1UV02RFlQTzwsS1pBcFlMUXolRV9hUUBGVn1PTDdSLFR4YFNZKTsodllVbS49LGpMMjAlMExoQ3Zo'@;
put 'W3VKVFF1ZWFgbiFTdTo/NDhsbSYyIXJ4dmZtL05yIVhieSUzdEooWEohZnd+cSF6Lk5lLH11QlNAfSlRVStTQn5oUi5KSXtTeCFzZEF2cnN0fmspS2E1dCQ6VXFALy5SdDMpO1coN0cyeTtvYSZ9OSxuIlV6RHs/LDdWOGs+bHB2Wl05PW1Kei5ZSFBAdmt0fDZbOG1HRkJHejlvdUNvODNSXjZN'@;
put 'IUgwJXZrd1FbMWNRXjs0cUpTWlNGKGF0I3hrdDtxZWFybXtrT15mNERIaWlzaHRtZzNjMlA9Ozg0OFojRWEhOGtZMFJCcldjOXd6Oll0W1dkZn5fR31ab2deRiJDZl0vbFJiU1hJMn1rIXhrM3NhTWRleCgudWx8ISklKndFJCkwe1A6bFpiRUc/MSVZL2JYOiNiNSJYK2wrLklDIWF2P0J2Q1hE'@;
put 'IjY+e0l3a30qXzE9X0NZelJjcj5yMXVwMSkjcklmakhUZFJAaE03dlMycEJje2w6KUpNT3pwZzhGVy9dSVFYdSZ7bTUlPG0vM01dR3EvR3dWfUU4ZzssYE9adkU0Vj5VYHRnLGM4TDR0OlJgIUBbKDEyUUtkbmA2fWQ/bztqPyFiYEJIV0B0b1ROMUZjLjk7KitQWDwkPDBfVCl5P2lkPENbL0xu'@;
put 'PTBMJH14cE1bR2Q9KEBOXUZgI1JufWswO2VZclUkUUBWMSEsaSImVU1VX2tDYUVkS2wvdV13ZiUvM3hMbm8lcmo4RVswLjZaUz8sWS59O1kiO2tsfFFVZVd6fEZvemwzN007bitOYV9XZkVUOFFkWiVuJixqYiRHTVgwTE8sOjpjN3UobiRYc2dmQzI6Y0xVZCw0Lnk4IjV2TVhCaFBGcitDPnpf'@;
put 'MmtzSVY1aFlYYFlwPEBzYzE1MGVNdFM+akk4KU9qfjBQSmtzaTVVcVFHWG54UFtnNCRrO2N3YWIhdCR4Xl9sZ0ZtfGRJV1h8YkhQZD4kMV9ddWYqVkBQYndqcjZ0RnEjRFg+bElLLCMxQ2RBOVs0YyVtYEVhSFc+OyNCTnQ8RFhHZz5oODh5dDd+UTd6TmB8RXBNJG9JRGFiXVtgVjE5LGE5TyVV'@;
put 'SkNVInpkPTFLPntTd3dNU0tGNTBWKUsjV3RPVTlPanNpZk04eTVFNHBVP3hbPHx7YDp3QDFIamdJezhvTDFCRUV0NjJYe15KSjBvY1o6Qm40MEpJREsrNiUzIX5BYV5nVT5xe2ZEYXdyTzlob3khU0c5diZTUF0rPXx1bm1TPU1MPkJDbXdUMUlqQlIwfFIjcmZqT0xtUjxkciZhQkJiKWQsSEAy'@;
put 'KUkzMXZYe05OdmxVK0BFMG8yYTx3TH5XfE9oWnh6aE1QaSJGOntCMkoqOGVaek5iVlQqe21Gd21XaURNWTZmOl94MFEhKXhvVyNgTll7UnkuNTJfMjkjMXpeSCR8U2R8amsmbyxjdWJ5Q3EpcTU9STVEKix6aGhOa3QrPkslJT1gRmAzKD17SD5DeWxqWGVwYmZsN2cjVXkhYjN+cjBbR0lkVFQ1'@;
put 'WEIkPjpKLmFkdF08dTFxdkNwdStOfVlgXURzTDhIdCIhSkcwXnxBOnVqT3gzdXdPY2hhT19DO3AjVTxnV0JgIVpTS2RaJVNUdz9oS3tfQnFYSD0jPkI2JSowMGIxU2VhM1hDQzokNisyN1NLT35EK0ddUGImRUFtc2lILnNRIXBFSy5iWkRmXyxsUioyUHk+OUcwTik5dUUjOCZ0UiJDQm1fa3Js'@;
put 'dyptKXZ5WThYIXBoYGZrO3RBcD1vWV5SN11VRE44dyk1dXl0a2IoMlM/biNUKDAqOnxBOz5MalZAcjJ3V1RtQGQpayRWIWM3IyZMMSUiWj1aUVVVJXc1Ni5aWzZgMV9jPCZhfmg0TT5DW2dsOE1hUVVAXWhAQEJyOl59WmhoTzh+VmJgc0hiLFY7dF9yVFc8W0hDWDZtV0l6PVV1emBsMVdATFpC'@;
put 'UiFKcUhrdl1raTJCUDxSNTtSPUFLSVpqYE0mXUxNdmpCKmJJU0NReWlDRHwwTVdJaHhUdkZIOV9PejNaWGA8W2h6eiwmQV1BZCRjd2lHQVtqUC9RYD9eZmV3Qz04bGVgYDRjaG56YHVhX2c8dE9YTnZAN085IygrSW1lXzIwSVZ+QGJpV158ME5YTktqMnRGdDEoYXV9S1ksTVZ6dTQ6aFY5I3tx'@;
put 'cjAsTlp9ZihAP0BGLH5WT01vL0hrbmFxX2hDT15EQn57cCguPGBHXXYjeC9EKS82ViwiZiJAOiZYKUo8JF5IJUciLD1aQHxuS0UsdXlFSnp1PjM8a0N3T2UkeF0rVUl7QDdhc01uU1ZwT0FWY3dKODd7diRIWWBPRC8oKyxYI0wjb19uQTMuU2dpJXRPVHpDVzBlLzBpNEFdVjlnbEc8cz5TZjYz'@;
put 'PTAqU1FuVUcrez40an58cEZ8OkBoYD05NDJZczR1L1gvLDloWUVIayElcmV7XVlkaiU6QXJ6U1NRVz5WP0poazJEMEZsOHxtUVZRdEJmXmAzQFFBPVR9K292PEFZIXxUajBjYk96eVNzbVcyP2l9Z0tGSVlARTkxRSlgaHdbYiFmOSpZWkxUNzQocTF8fTpwWH1yNkpyXzV3Knc2VGdCMDQ+fWJI'@;
put 'PUk1Qkxidl4jKEUxV1YiXldFaUFiN0JTbDVGMisvdEljfGwvd1hHW1gzdltSLkAybi81WCtZK08jYTRuQH42b1pNWlZEc3trYDFBS1lfNFZELz8qby9EM0V9V3ZlfDlvTTRKeiJuLEJuXWApU0h4WyxYM0ljRXhBKmEjWWhlbW1jQiNnSiY9WDNaZUA7OSRnLFksMiFAfD19bW4zcD9aPl4kKHE+'@;
put 'cHF0RGNdOmVLNkx3aVtkWVRVSClUenBDbj96XUc3fUc1LC9WNEFeOXJfbkF4PmNlSzFHOVsuLilqMDIwbTpjWTEhYSpyQ1NtNjt2KTNVeHs7ekFOeSYvZnN2dixIMVRHcy9TQj0+fn15Um9AWzdBSXB0YXZ7UT1AJXRVMik+Ly9sLG1pQz9mTzZbViFUUStfSyIpcyR+QiNUanVZX1tHdyxTSj9j'@;
put 'fGMlTkBbfi5ELkx2fm5UNjwoaTNiVztYVHVoKDtGb0UsISFuPz1waHZzblZZO2RmPS4iN3B4bXRWOzZqVmR9QG81I0VPO2pYYihubjlGS0RkMyZ1SVkoIWp2fDVUb3FWWlVbUERbMis9L2lrZChHeEx9V2ddO2tGYFNtTVAwQGAqW2ApOUsxWjN1QFF1LlhbfmBUS31MdWdOV3E+KnV2WiwzNDs6'@;
put 'Wis+d05aKHtkdHEjbXk6RExrYDxdTjh+UHFUW10xY09eOjs7cExyNygvNSVyLGlxUl9wTHJPfm1OPGJIclR3Nl4ofEQ3NXFpU3YlfDlYIUArOyt9VCwrQzhRSjMjfTE7UCZHLHR7NT1FUj4qdVhla291YWF+LyY/NnUhN1shW0JQd2xpcmVtUi57Jk1GO2kwT0NJR1J4Iit1VyZ+YnlCYk9IUXVe'@;
put 'YiFDWi5sYkMialZeLF1CaT47XXFhI3MjYCZzW0dkRkpWLGk7cE5CRzV9ZEg4Mzs4cWMpblQhQXVub0hJan5YaGlyNmxeTFRCLFo5c3Ivd1huekFTZDU+N1syN203Nng4WEJYKVRKJjpfUiUoLkUqWmZDWmw2MzF7JmwvW1VXaSM/ZzlyQEx1UzcvVzhRWj5jNltvTihCUHhaaiR9WzNlcUJaRC41'@;
put 'ek40eEspQmdjUWxbdGxVTl1JR3Y+M3J2PmVZWWApX0h9TG8qalB0RGR7ST90O1VJJHRrRHJ0JmdfOX1IVFJhRWFCVyhERFd7LnFCQjd7ITJFQz1BMH4+Ojo6O2o1NzpKRkJ7dlMlZlYoQV9nfHdzUy9yZUB8WlAxU2IwN2IlMEpTR2lVLDJjIXViM3NOfUBlbjEqU1ZMZUxEcEZHd019VS5gVWxm'@;
put 'Zn5lZ18zPU9DZC44XU01WnYwMCx8Mj04KmdncH1OdmJZfiw0M0tXOkFlbVBqZE41TiYmcXlEKylwYjs5M2BMdktrNj88LFgkN2IsfSN5azxfJX1nImhNYiIkLz1sWDJvTWM6RzFUcDVJQHg5blVmTVpbMS5+SSV0Tj5mMkczVyU6ZH1DSypwcnJyTylxUjEsKT5yM3suV3NOMntPTiwqVjJYUERn'@;
put 'YEMrU3kwQG5yYHs+KSN4I1ZjWjJxPEIlNnR2Vk84RTNFR2ltPTswYi9OJE5nZTl1JUheLlIlMVtPP0A4dy51LDBubHN7c3kjb0h5O0JfQnJaYnduOXkre2J9b3JFSFBbPjN5U2llN2IsKS4udWV3TmVwOV40LHs1OUdIQHd8PiR4YiRyUGdKQiopNnRdaT54ck9GdnhOPzU9Y1pneEhWbXpgMUVI'@;
put 'YDxwWlddQEd9biFgViw5NFRLZ3h7ZWA6b191P3VmbjpyQjw1bH15VlhFIXozRHs2YyVfckZKO209bXpFWTNbZUQ6Sythei4se1IjUDJ3fXNAJCQ0byU1fjkhdjclTjxiNDtUR3p9RTY6YCxER2E+djR8LiolXy9mOyp6cHZ2SGN2YXBhIUdWeE1eSEx7OF5ZRXVqJmlMOnd5fk5ebFpXZ2BAd2NI'@;
put 'SCl4dW5rIzxjbDNjMiFtcDVDXnkrSGNZIzdoPD9TRnMwQSZvQDhRbi4xXjBtOjVUTzQuK2VaQFtfUDVLTnVhUVk6eEp7ZX1eMVB+S2NvOXUlTUZpMUdXWUZ5Q2M4TWY+KF0sVD5wblZlc0Y4MGcqWVFtLlFsS0BkWXdiK09tTF4xZEx0Tz9hcSFeb0BvKndlNX00VXpSckZ5TlU7d2N5ZVVFPFE0'@;
put 'K28/TVldcnguQXhnVGo9O0x6IVg2UkImaih7VCw+UT1XRDB0UUMkUHJGMH15TEQxZ0EwPGdiQS8lYkAyWzEoKFFLI146OzZbOSQ+a0ZfdC5AaGgoRUpual1LTjcvKiNUY1peUm5oL3Qsc30lajdMO1FOSUhtX3gzJE1fQ0A+VSxddkhwLCt5d25GRnEsfEx3UDhwI3ozS0RPRVs7NHI5cGFhLk12'@;
put 'Y0QreHxXNlI5WEooO2dEYHkzZmxHZT5LImxoLnJdeFpWflg8XyIwKGFTUn5LOVE1Om1NTDBlczVtXiZEcihJRVo+NDYrOSRbWCJHPUVgKVcrWEddUz9SYmt7a0NMdyR3X29yak4objB1VUVDN29be3FQblZNdGk7cF5qIVlpXSN8MVRxeTV8JGkya0R8dVdoNzZMK0I9aV8ocVo8PDQ6cF5hND9b'@;
put 'VCNWdn5LOVJiOiNsa0VvTzBtP3daJUYzY1UlIXMjd3pvY319Qi9yWkBvIjJMWCJxQURQQHdNZlhRI3NKZ0NwfWZDTWR5Mz1DS1liQmdrU2h+a1NAaWwud1BxeTh2dCF0a3NKVmByUlYrOHZxeU5NYzZRLyJuLGBLW3JnU3wqQjE5IlclYk0xQypxOiE3XlhwN00vdyQhSS9qPEs+Lk13UlQ+YmpN'@;
put 'Ik1Halsjcm5uP3UjKlYjWj1oR2hbTkw0cDpWLEglVTgmJn09JXtYNTM6RXQ9PVgxRndwVjpMTVRxdS9oKkdec1lLNXxSTG54V0l3NVdiaGd3ZTtiLkdyTzBiOz1YXi9Edmd6W01JbW9+JmQzSTJyTkRjWitOZWtrbmNmNVZ8I1l+cjxhZV8pMzdvRzo/Uj5RNkc7RVMldlA3KmI3L2ZJKjdVeyNl'@;
put 'SFJTdygxTys2Wk43JG0zfH0hOjsqV3YpNWJRJl9gVGRxIlkxblg1LkZhUlEzcT1LNWUzdVozZVBVc19PcjdrOXxRQEckT1pNeChZeTxlXzE9I1h6fiw8ZiFUImV9QzJKJjJfKSkjfjQ5dmpWV0VvNEJ7Yi84e2tKRDdEfHo6Sn5HYDg2ImFPJVl0bmh5RWlLPUMsVFdre2FFNzBOJEtGUkIqWj1w'@;
put 'Ul8xWjlyLmY/dm9IP21fVCJsVnBvTTxaPlk3a2JbYUgySUBbQDxRZ3QpSEBLXTJ1W14yY2kjcX4hUyoremVOW10mTG4zc1IjViJ8RWkoe2pFa2EsOS42PTNYKjdtM0J0O2M2a2NATyp8Kj5lfkYoTUtafDc7Ykx2UmRwaStHMU9QQjckW3BtbW1qY2BWflBPTWtEMEFucz91VUV2KmYxUmRMdTco'@;
put 'Jk9kclFSKlJbZnczM2hveUU+fnJNTSo7WlNeR3A1ZmosVVEyXTo5N311WlEuPnhddS5QQys/cC8yamh+LjVzV2JKYyZoa2Z4JGZ1N1pLSkdCO3B3SkExdTJFRixRPEt2diZ4YmYwP2JwflpVfEY0NnNZM1M+Pz8hQTRlRW9UZHVJfWMpZkw1On41dHVTZWpKeWRMZzNbWUxuSlZgSTFtM2YjQG8z'@;
put 'TDxbP1RQU0ojZEhtM0EsIWUyOlZTNjdGelhWZ1dHZjthT1VfL1AiSzksbVROVkZbJDk/aHxXZGtFb3B0WihVNEw4eCx+ZjpZaW1SK3A+XXRCNTlVU29fRkk0SHhQM1ZdLyg1S35JNnxGeGIiaiRUeCNYdX1MQCgqSiY0MF13dWRHdnZrcEJOckgoR2RnNVYpe3MiUDUxQkRHaHRsLzhjR3xlZ1Ak'@;
put 'PVo4NiRxVT0mdjdCKCxETjE3PyFhaWt8SU1XM2BfSDk4ZD1tNTZCWXJbd31VLmRWO2E4OT1nOlhuSE5iNzZ7TSt2T155SEtXUl4lcjpJOypteHdSK10/NUNbfmw+JGdhTSU8R3EufkBgWVZOU2w+NU4+NWk0dyliOk80UGsmO1N9fX1KQzpxbFVtQGhzOz9JZTwqY0pKR1Zhb2FzSHQmYlA6ZVh4'@;
put 'S3d2PENSSVhoTWdLMnhfPFZwN1BrVm45XyZLT1gsbE4xPF9YTV5hK30scDhNcGR6TSRWcjRPU1dEWU9VWUZFK1hTU2VbNUpERmsxYnpUTnB1VCMsfG8sZFQ1P3lMbzFgMTc5SHZiWC8hdldrZTN2aENjVSRocXpKXiEkdjU+WyQhYHIrVClFQzBSVkhXIVowYVJ6S1coKHRpNnliTztnY25NaDlk'@;
put 'MnpZTUVrK0JoYkZ+PG9DYUVRV2BabktrRl8yPD4rTT8oNnR3OFpRME1NP09QLG5xOXBVNSNzWFhkQnpHJjxWP2RHWFMwQytTTGBUV2BDVHtmY0hiImF2KyN+YCQ9K3t4SDxRLzJaPH16QncxJVtRWj5WcTFrLmMvIVBOPExSdWNlUyhebkxpYj9WPWY0RjIzJVJgPnU6WUpaZUBaUVFAXXBHXl9I'@;
put 'NXhrfihudns3NFhfPGsyPT5Aa2k4K006aWouK2xVWV0zPHhaVzNCSk8uS0ZqOjh3IT0xIXBUa0Zmb3BrTSFCdkRuaFcpbCpJYSghNy9KUjJ4JD02Um5UUWJ4UiRpLilYJmtIQHReIWt0LjE/UyNyJXFJNHJabGMiaEQxL2lMeHtrRyohUSJkTT5ubFtoXSRuOltTfW9QNT4sIlpXcjkjM1VxSnVV'@;
put 'OTdkVSZNNEhDLjhqTjxFKzI3RTNmZT1gbChiUEJVLHsyOWFJS3coOEdaL2RnK1FBJispdSUjZD4yKmZNI3kiNy88byVqKzVmL3pkanwhMSxUaStDdFg0VytCZXN1MFJEeEVFPklvU1tEZDxKWSgmbWRMPzdVdVVOJiQ8ZWpYOVlDOnx5RyhmYDtJXiw/aCVaKnM1ZC9AaW48UHQpamFSdD5HUHFR'@;
put 'Rm5VIWtKdTNHU111KnhsXl9nWVJwJHtCYnQoMkEpIzJnZ1kobUlEYVohTHFbJHYhIT0zdzJeMSNrYW43RXVXJE8+Y0k5WCM0fWUiOW4qS0p9MVRGPEs3bWF7cXB5LzNdVChIYH4xRHF7PmBCLiUuPEBUO34zL2xpJEdMKG0vPHBPbFZlNEVGZDApQH40Oko2IUVoZDVbfDslK1o8RDJAIyMwN0F1'@;
put 'YW9HSG17RDM9QVVVRUR+dFRGLmtSODM8RjdvYSowYjtnOz5xODRTMGtmLDBQKiQpeS8+aV5OI148JD5VK3UhSDNfekwqUzVsciRoPClrWU45ImRXcm1uTFZOKntvTVYjbVd0MUBIclo5X1ZHMGcxWzJieVlLSWJsI1RwdkNHOT9tN1VlUSQ2SToselhKfkUjW2Q8dEUka1EqeyVRWml3Mi4/ZHd1'@;
put 'Oi9MWEIwYHhnJFEpL0pVbURZV1d4WWNsazRxXWR5M2kxJjFbI0RKSml8VkdkO3wmak47dXdLfWU3YG1FO1U8PyMjXzwkOShsIyolXkl0XnlsJC53eTxQal48ZG5efko7WGE4Ni8oSypTdEdYVF9FUHpBT2ZVOytBanEqNE0pdHwzTU1MOnw5fjk+KGMzdjEhdkNfO3R9NUpmODVGUDg/JmpuXmJK'@;
put 'VTcjayV8dEUrdnI0SGkzc1ZCWCMxeCI5TDN5UT93Nz9IfFoocFpMMm02RjE5LF9ZYz9uY1hfUHYoVEpOdnFTWmBORyNsInxTTSRqcDdXa3NfZlJ7SFU8QiIzOixyVTM6YioocnlMRi59ZlheTEBxNXNYOnA+VD1zZ1pHYldmanZkb3Z2WFgxZ1ZpRFF+WSp5Xmp5NTc6bUxJb35VJEN5R3Z0MkAz'@;
put 'WkNJcFdoWUU6MzRAdF14YChwMjtXNH5UNFUpWC8qMytiPW44WVNHJX0qeSV0NWkvVDFYYV87Zy8zUFQmZmdKNXdEOWhqMUV9MU1wQiUvbXkyWHA/Q2cvI1Z4bXBkSGIiNFI1amQsMDV3Vm9tI19fdz8pQVs4QVtQTWEjPX1JLk87fURwL3IpYCMsIn5aUngjMCUrbV1leUhDdCEvMz9qfGVhJTdz'@;
put 'KUgxWERVcCtWX1ZXPndQRVRRSiQ3eVdOUUF1d1lTKEc9TTVmUU82XmdqSTlzU1t5OG14aUlhX0U9VVhBKktuUTk9WChjKV4zQXhHQERqdU9xPnxbfWdzKkAiUW1wNWEoPklxQ3AobTYvfm1sYVdLPC5Yaj1mJiIjUmxMYXV3ZHZTRH0+b3RgeVZSZkM4SWtyQ1V5WlkkcGh4ezM/LmlHTWF6RX1f'@;
put 'cHlaODpuS3IobkZvYltrSCR+O2whfG9oWVJ1dzR3WiwyTng+NX4wcH0reWdvMzA0aDZYVk5gdndiN2Yxbl9tZ1pxN1B3MmhOa0BVZ2pHJVY/JUxtRHpRW1FSSFQ1cFNyUjMqey52a3U8Jiw8OzZdNT57Z31UK10/TVk5fkNZYk9FbFdANyNXd1dRSjMmaSU5WkkxITV+UkV5dEM0ek41TnY7bHJB'@;
put 'NGFKb2U7RUhCSUM8ajMhfmJxaFlyOD98aWFSL3AyZXBHQUxmbEkja2IyUUddfVV5RHRYNnI1TDpPckEiTFA+KDpeSWREKVtxNmhvdSE3JGhefEs6cWFobTVxc1FlLyYoZyU+NkgxXzprRTk7a31VNV87Q3l0fF0wM0YjMWxoWUtXTHd3QXhuWn5sU0s0OCN6ZmgsWnROK3RRSDtWKGE8SiM6T0gz'@;
put 'eEpUYExuRlUyS1ZBLkFIS3I6NnFZdiZDVno8W1FEKUR3dEd8ajRTfD1oYFMjPVIiJWtTPU5hMWNQaXR1OjhUaDt1Y2csJSExOT4haS5TPEZdR3VtVz9DO348PVNPWV1DaXNpJHtdRTVXLnkqekRYYkkvOiMhcCRVPUptL3N9Rms2JVlRcn1GdGQmNyt5ZmkyZChpZnl5ZV5baV1sISM8X3w/OmFU'@;
put 'fmJIenxANk5EM1heWVQ0bn56OGsrMXQzI1JSfHo3eGh5TDltUE4qTCM1WVM0bFZXVVIiQzZTMCtHcG9TSENUdmY1Yy87a2xaa2plaSphP3hkKTlPb3UrNnVnXlgwU3xyP0o+RyUmTkMwaEZTQGw4fWp3YHF8PzhyMlhbUWZnW2xgejVhMiIySD9zYjxVdmwjMWBzM3I8PkpaTTNRIiYrIj9VQWps'@;
put 'QGc7cC9JPU80O2tSMzp4TU9LLkwsdClxdVJPN30jbCo2ZW8xcFY0VFcyMUR3c1pBRHIlbW4pQGw4UHwrTEVFTlEvUGRwPiw5SDlCT2ddJlV2VTAwQks8T24rdXNmKXN7anRvbz5VciN7dnhXNl5YZE46RXhnbHs/I3NKI20vRE5ESE9gR2EkMilafSVkJnluKTxhO01IVXxSfkQlVz09TzNpVm4l'@;
put 'XlhrUXQ0SD16K2J3NTt8YEhNNFZPfSIwSVNBWV9fSndUc3U1aS81ZCVHfXt+aiIzZE8yQz53VW5yfCVrREBbcj9KMTojOUtdUUkxRnY7PnQ6WDI4N0ZSX3J9PW9nRCROKkhmMlouM2JjPDRMS0RXSDBAJH5eTWliVVFMM1M0KmJtTUVPSGZmODcjNzwkTS8uLC5pdDBwSmA/PW1eaz9IdFNVU1k2'@;
put 'KiZmUHwlX1hoOTtKXkRDQE1vUnlnZEZ4a2NGV3FvUlR8XkNudWR+YUcpMjYzSn1NbHpnWkVIUCIvYmdbRERwfFkpe054bXovLD1DQEIrTFpxfTpWSyZ2Vj5SZWtMVnUyd0VEOVZYcnkmYDFxSD4jQl5dPSNvTERiMnRuK0I8KGFWQEhUJG1WYzRKKnFhV0hlNlJjS2MzamlMTClgVlUyZmpePCQ9'@;
put 'e1AwM2xNVzMvIS5Bc0w6S3lEaE8zLl5aaDI5Q1A3elBSR319T1pxdXhwTlBhUCo2ZXRpVyFoMkFkU3B3RTpzfktdTj1QL29JLlE1WXQ4fkF9PzlXRU9xQGNISSlHTmNrNTIlUyhIZT51aCg5Mn1MTl9uKlo7KGhudmFFM0Yqd08hXms1T1BKdi90fEdKekttSXo0MU1YaiR4b3dbQHBlJS9jdGlR'@;
put 'LG9dLEJgTz1SSGM1I0l4eUVnd3JZQUxsc3VxI3Eqail0UFBWSjRoZ0poUEkwcjBMT31xIjBIJW0jIXJSfU9EWnlWdlBVdXY3PmoxbT13S1BRJWY9VzNbNmhkKkVmWyhHYWpWRElaWGdJYT9JPHVVWjByZnZDI0d7KFcvZE9MWGRmIzAwRjRpJGNeZDU5diUvV2VZWHBxRGFdUkoqbWZOW3tXdSJm'@;
put 'ZVhXPyJaSWprfWtQNWVaZHEjRz9ZYTJmYnhPZylhV3hKcTZNcFtaP1srRTJySTBuVGx9YjoqLjpZWDh2M2hib1BYMVpdTm8pdC41cDRSd192KWAkaDx8R0o5WlZwUUtjTVgpVHMuZzwmJVVeYGc9d0MzPnh5KmJVPltyY0NWaUBhKit4IUg6MXJtd0clOX0xJlEpKzglTkgpV3AkREhRcGRMYCo2'@;
put 'PzE5cCJuSnBQbXQifFRUJVElKFE6dS5TLnVBW0NSM35MU0t9NVprQSRlM2E7YFgxZXtAOSUxPjNEakQyS0hYOT0idzhEWTJtdDo1Y0gsaEBOZTQmVnRlMylhdWR7VXxHIyJqbUJ+b3RHfC51LyxhTGxnXXJyalQjJEIhaGRVTFpfS0dZdDJFU1hvJnZ7SC8lK1pydU5eWkQmVjkzOz5qQWlfSX1b'@;
put 'WiJAISMlYCF7Pj5NOH5QLDtORDZtdG04OU1UU3oxbzMoOUlkZ0x7XzxUaDJgUjcwdGJyQ1N9cDB3cE9aYk1XelIuWkxtOS5oYWk5Mn5xJFs2cTpvUFdTInkqIUByWkJ0cGpYajc7JFlMVG9OKW1LZSl8bXs6Wi9fW0doL0MuV20sU1Zua1AsRS51KkMpYkFIKTouPDB5WDRNUjZYcFlOYz1VKzVh'@;
put 'JloudnAjLjImd05WWz09Pz5DYS5BUFQkZjJwK31LZmw5OnA/KVNWfD1QVEh8KWolNVU3Mj9EWGZ+KFsiNGRqZl1hP10uRjN3WnErZ0JuOGFhakg4d0s7SVtvLltyRisiUEk7ZlNfMmohRjtaRWZSaU5yR0E3S3UwK05iWkxrNilNOG0mMipqWD4hSz1IcSNlL05kbkhmS34rWGJEITckLCF1K2c8'@;
put 'JVtmYUkqdX1rSUZtJSNyQWdCLkk1WEBvaDhTbSRqIWN8NWR7YTR8Uj9uP1lnRVQuOngrYmo5eSpWOGczOD4/LjZsQmd+MV1mUzk3aEEkWVE1VElkKWIvTWd0fFcpNy5EWV8mODYrcypaSDcoYXlkWUNFbjdFOXlIQi9HcUpVZm9yPlBZTnBubCkhRyYuVy5zbHBiS1YvR2gueTlsMyk+Mm1JY1Ep'@;
put 'KkkwUlgxe31VQW04IzVxelpIaH4+e2JEd0YwUE0zLHVGQTFYJE91NkZbMX44eVRWbitKbXUudGlwXk57UnV6NDg2WDosO14hayxzaHZoYCNyWjR5ZEFtVkFKdWFIen43bCt4QFFPdD13en4hO3VwSjxZXnFqdFQjIlpwZkwjIW5sUD1JV3RBR0Eqd3x3ZjpwbFNvcX55PlVQRiYoWS9UZz52NSZS'@;
put 'JVJkM21eVzIlaVlVKFFKMFdQdW1DYzt2XmpDTX4vazgjTSJZKSk7ZH1tJlkmPyRISUlwPkZ2TnQwL30vL1dRU0IlTEpjbGR7QEFneHBfeXRCPWVXMEYueXJ5NDRjcEx4X0k1PjdsOCpzc3EyWjB5N140Kyk8ZEZlWi9fPUdiaWhNPERoX2pBbndZM3Fpb10oYSVvY0lKOn1UNiV0OXhaWU99fE1u'@;
put 'KFEqd3lfbWc2a2tQZFBpTi5eTyhqN2ZQMkJQQ01Jb0BLUzBAU3c+ak1Vc3xZPjdbVUk7PXJyLk9mWzIrWF93M1FOP2FEL0VmZzZHMjJ5Iyo5SWhHOFEmX1g7Ymd2K0ZNNTgzVEltRF9Uai85JE1UKHhXQGJhUG4kS0BvbF8hQWM1eypyWGhLZGVjWjZ0YlFDKldNK1tocXV0QDAvNH1OMG93aj5N'@;
put 'IzpqekNHOjBnM3p4PHo6ME5+WHFtMDRUITBVZjU1cixVPms6ciJudzsoZjI6eVh2emQ6Y2QuXUBuaGJjVjMhIiUzYlZDRER7XSpYZGtgbFdWTjBtWUNYb2tBPUFISk4+RHJOQEA+TmFjKnFPbCVsZXh4UXhbTCUjdVZlTVdqemFhWU40dTY0KFVudGdWd3x2RSsoZzRCZ0paeGs0TEpdTVZbNiwo'@;
put 'eWk5VnldPEQ9fktacDxxQmk1JDtEQXFDWSNIVD8wYz1CTFRYNVJySTlWWFdFeHJqdmVhSHJNRDIwZzxsayhLMjdxLyMzWFl4PiJaSExaQ3QvOyF6QSJ7P1dicXZ4TzpQKERNYWFSQmYmfjQ6TFRVYTcvOCEkR0hoP1hQO1J7P1AhQVRfJi5MPnpfcCpZTml5KzRWJT9gUTlhPnU4b0k+OCQibH5Y'@;
put 'Mk8hbXgrSH40I0JIZjZTRVY3XTh4ZzNNJVM6eVNCKV1eLihuQnF1ZWVNSz1MPz43X2cmJTs2JEBSPWJGKTY6WnNwaUtyKzJOR3pOUGZzM342Zm9QckIxWFRkS08qYVg1MXdQUEQpb3xZb0NaZit9PzxzSmZOeXdzTnJxeTVhMWQpOmJ+b15scF1FS1I1Om9CR2RFeihvYHNwUnZUKWB8PGBPVVQy'@;
put 'NTguazhgOmtCal1QYXFrWmRQdmFsKC9UUk4rUlQ5MzJ2eXl8YnZ5KFVxWFIjVFRGTkYidG1+RXRpaCQvNFMqUTJKZFY3fi9geWYqaTZhP3JJYURCTTIrMz5+eUkhUEs8R2hYQis9SVAzRVMpW1teK3lTMCIwQklgOzcpUV0lIjJVInw0M0UqWjp0VTtnV2Z3VlhZZ1VKZHtdXUJvX0xVQGZsdmIl'@;
put 'ZUp4PVRFVTR0TVc5cmIkLnVUJnxjJGFZJFpHbTlnc1U7Wm5dTkcsJHNVJjY7S3VxOzdZZngudno4STZfSjNMe2ErKSFVXzw8ZVhEYUo2fEgxWE9uKlhSPi9oK0hIXkEwTFIiJXs+Z2phSXYkPnRaZDJNRSFPcEtNe0J4OFc5OEZgVylZNy81ZUl9LiYqVW9OdER3UXV2XkNDXVcqPC4qc2dkI2FS'@;
put 'KWNsNn04VVJqXjdUVjN7U3dNTyNlMD1jOHlATVh6RDxoX29pZWghSz4uLzc+YWtPQGFnMExPZ0BvaXVKNGx9Sy44dGVpKGJ4ejRjJX1GNTtZVCh0REM6Zz44ZlohWGFhcjpPcUckT3pxb3B5W3dNMT8qPT9beVpSQnc1XyErPSZ2bXd8QGEkJkA3W2h8Z1JRTS9KZ0R9RjRCSEEvLCx4L1JLbSVU'@;
put 'fj8xdGtJXWtrLDMuI306LCtiUFRzYHhqZD50X1gjfl99ZlokJTxXJlcrNV47VDFUeSs9XmAqJDwqISFQVlZ8amU0dWhtMHwvTnxIaVFEeGRJfWdSTWtYJmxLZ3lMcCUod1JWQnFmQHhGTzVFfHcyMUwuWSFPVEEhL2VFcyZRRjJCW2ZvOG53Wy5YYTVyTmVjU0VFUTtPWXVRbERQP1IkMDFrKVci'@;
put 'Xl9LOXVybmhiSzImKipRUkkkK3smaGp1bmRYIm5dTGFvN289K3hJTXhvRWpmW1kjS0FAb0p9ajNSeHlYZjwydEJObzEwOEs+YllUMGhQKjdeP08sRXtjO1NOUklPJlRlRWpmRSI+Sk1SViwmXkpmbHhJYmd8P0NeaWBXRG1kd2FrLDxlRyJVazxkRzw1SjAmSW1lIU1naj8/K3dpPT9XV1gzMCJX'@;
put 'cHpZb25Lc0VPazgvbkJxOiRXV2pXPTF9VkRkIXF6OE46PyY4bSxLKS4jVldGLzxVP2QiaUUxfjN4RnU6K1ZfcyZwYjJde0MyeF96fmtJe3hsVC96MHk3U2AvUXFCfTs2czxnQTtuIT5FUllFUTw1U1BtUihCbGpyPEJDaz55JDM6YmJudnI3e2FaIlI6ZzZOJTkoV2VvOWt1MT1pa1EyPkpOdl90'@;
put 'fStOXyY3UHRFYWgrcGxFaXliZWF6QzRfZyxGLix4fGJaeHpxOm5XM2IhS0xmd0ZhbHIyRnFKRCUud3VLKUZhMV5PP0lNfCl1PD5OaVs6UDoubnEqJGVqbW8wIyx9JHR1N19QISM7L3xHOWErcXpgVl8mLHFQO0piXjA3dnEzUihbeSJgQilRKWg/Z3Jkc342aClmdVdeLl5PbXdsdE16Pm1dYXJB'@;
put 'MkddPD8sLmJnbFFOdEImSFBwc29tVGMhYn13OURIWV0rdjBRVTMvWTJIdy9NOX5uRmglb1sqPnNPX3B3cmE/P1U3M3VkUy4pVHk8R2Y7MTowPCVQOUY0aCxAKEQkWT5HMiloWkppaC5+XmQrUmJbKi5mNCU4fUUzRnliSiRCfWF2WEE/OWQ8T254T2B7fH43cU5BeS96QjssS1o2UDBvWlZFT0JE'@;
put 'byloa19ZVXskUl4wZyVxTG5NJFZ4M2FJWC5HcSUsRlB6fVlrbG88bjBeZkw1bEU2aGxFWEBAK0kwN3VfYTw7MS9qKVh0fn5JbFROPlAuQldqYjFdOFhNeFZdMERlMCVxOlZjdkZQSGQ2WCRxNHtPeiNQQFs5dnA3Kzs7IzI+ZkQ1bnIwRWpmMmQ8WCl2NWRNTVl5cG5tUi9QZGNMJn0wb2YkRWN1'@;
put 'XmMqb0pAcVh6MHJKVilpMyFPY0Nvd3AjV2dSLiRTNmh9VmY7IVVkTE9fVEFwQlE7WlNuXWApO3N0Nz0jUmc4cSJ9Il8yfXg8UkdMVmI1MEghSkkpQ3JDK3RGQVY5YlReJFkmTjJ9fW1Qb1d5VlBiIW4lZUYjcy9gP1EuMVpmWUswdV5rfVdfRSV1VX0/LkBUQnorOisvRUwibSRrelApZFJlfTlU'@;
put 'REsyMUlEcERVYyZEfCIvQk5NOUVUQnlwNX1dYGAlNT0ieX18RGxUPH0rfi5XP0NfZmR1OypuMTBYIns4N3hMN2BSZmUyaGNfSnkmYmdWKlY+dUNDYig5bDQ1QX1hXmtdVCtXaTUoKi8yeTgjIStfQDB3QnRaMmdaR0B5L0UiU1E1UGpSVHU+big5JWs5YkdJR3RbezUybGB5M11AJF5sanY2SWsr'@;
put 'KW9AWGByaW03TmRqMGQzM3R0dlRYQllKXVZWdmYob3huOjAuJFQpcURSfGlReW1HIzZhcGRZL3g9U15YLl9lInFyWms0XzZ+JXQpUD9Xa19TNk09e1lkUTpkR0lYJUlDUkwzdmpPZkRiYlklajNvWTpwdGtIcz8+aC8/MHJTOnRpTjRCYG1LfDdmRlVLST5NTUUkYkJJYyR8KEZfY14vMVgkTjsx'@;
put 'UFg/Z0M+byF0dlVZK3xRYip7cEJeUXxpSHJ5SlkkQUU5Y1ljNiYzWXVaRDhgWFZhRztZcyhLMHR8UlNiYCpQImomb3s/N2V5ejA9UHFdeDViLDIuSmV7aThzVVoqWXZydGlzeH1aZ3l8UkVqQClQL2ojSX5tQz9YU0ovIWszdTA0RVE6dkJDLDwiRFd9NHkvN3FeYVEieUJ1cFRxaG0yfVJwVElL'@;
put 'Lm19RVkrcXkuZlUyR0JAKlFHfHFjMjQjMD1CVTJVKFJ2OTtZd1VVdz1VcGtoWzZOMTQ+cEl2IWguRU4uWyhKR30jIlFLQm5VJXNNamw+YDB6XWVWeHpBYjUqK3RPNGdAMzZ2W25fLEhJKjc5ZlsjelBCIzJPdj92WS4rMCJHMGduRGchXiErentPJUtaU29FI2ZdX1FCImNQcSxKdz1ZRGsyNGFv'@;
put 'eCoxL3FIXUA4QE5HR3gzUTxqK1RuMkxYWmtJNGNZclRZS0V3SSpfVDMpRUN4NDtpe3hvazVURll4QHBCOUVgbllJNDVvK2NIJSpHRFZ2WHMjZGhqQzkvRnV6SUtZcGJ+VyxMc19AbWFIbEdqenFRa3FHel86RTB0Y2olU01XfHUhJiYzWGtSVyldNFdrLEo+NiJ6RmQpOmBoYVM/W2ZjZlBdMkxq'@;
put 'ZDZ0SitEcT07ek9wfHtIKnRDLmIwRFU6cygmUltOaHh2MmZnUiVUMXk1XmU7b1k4X3t9YCt1TnlafWVZe2lAZzdYfWklOXQ9NkB8W09LNj50JFlCcyVsOV8zcyVsZEB4LF1nLDo8VFdqXm1XR1grTG15e0FHVThgWHwxUVQ+SEhPMmc8bj1tMHRsaFpudT9wTktJa0hFLzwpc0MpLj9GYEsve1dq'@;
put 'dmw1dz05dUZPU3guVGlaXm5WRzpHJiRJRTVAQl9aNnQjUC94JkQpUlpnRGk9UW8xdS43dX03UGopOSsjdnRsajUhMHo2N0hNTjUpdjQpOix5RmdYMWpSbENoTGBVdjBoSTBtTTxrWllLOW4za1o0IiVBWnEqYDAqNSxDMm19fSp+U28uPCR8Z3RVWVZ9WXx8ZVo0Ozcua25JRUguIzY2e3F6eGsl'@;
put 'dEpyI21WS1osKmolQndLa2tVWXw0cFF8NWZjR3BrNnZlMlpKK1FRbmJHVEhpZGMoIlBCN1JKJWJvVTFhdEtFNCt4PXZ2VXpJPzdBIkRCOyI5ZSkjSGRra2NSKmJERUEuXmQzRTB5RWg3ayo7V0JuUl48QFQzNlU1Zj9vUTZJcDAkdF4zLDRbXWdPMDI0YCo9QV1vR2FqVClMJStPQUJsKCUmOG1+'@;
put 'XlJXZVc3cCN2ZFRWXXxhYj9QeFhzPmVvMTNlIm4xcCVsaHpkakxefWJPI25VSiUuR3o1bDo3cCkmN1FGdHtEcF9zKi4mN3NgX0dOc2hgWWt0M353fmttVCpKSmtOdW98LkBRQXIwQDlna2Ukaz09T0haI01NPncoUDFQTCRmZnhHKkR1LGw/VEs9fDl5LzhzMT57aHF2amJNW1pdNnwvMHtPdGpb'@;
put 'MStjQHNga1p3ITs/NjhRWCMmY2RwNSl+Sz9lUVNQSGllKEd6aCVAN28ldF9AO0JvNnEyS2l5IlRaTC9uWUkiJWEvWUAwVj0qX3dAT3tLTGVkcCYhIWZ5cmg2WW1HQ0JNIVFXJWhab2BIN0J8Kn1SST1qPyZlUTlkeDRGNW9ndn5UR2dwP1tHMiZfdFc5Jig5WWgyXzt7VXx0P0hLbzdBZylYL3JP'@;
put 'eWNbYllMYXJ4dD8qfnN1JTx4P2BMWEBmMn4/WzIwQlV2Ol5rWCRoRilMPj8pemYqQkF1LkwvKG8vIW5gekViKFUiOjRlYnFQXlNsZiQiKWkubDwxcVtOPGhaMHxUTVNsQzNiRXBUT0R7V01eWjB5NFhILm5Ia0ghU0VtQ1l0UVdvN3tgT1g5Kk8/Kjdfa0M7aVdxIl5jfER7dFpXKCU8Ij1xOkkm'@;
put 'TEBgdlEpSSRlKj0+ZzpKRiVmIzM1VH5oLDM5PCZHU3kpczRZVUVxKTMhZWUmUGpuSzZRM1BkV2dLPENqZTRvUUE/LENmT3B0TS9XWmZPIkgoW2NCWFJDXk06JVM9Jlh2Xj9mPGpOKmRuRihjdko0OjM/UDtpd2tTIS9kOiVIOHIzd2x7TGtlYnhIPWZjQmw8c1JbT0pWMWYsWD16MmBtUns2dWd7'@;
put 'PHxfNHcsdCptK2ZMLHgybyNUfTg8XUohWT5DISQ1Zk5HUTNXcW97IXQmczAoOEppTWdgcFNhQUJ3Yzw2TXV6NEp7WG4uOFkzWEBnTUhXWXEiYlZIYHlpNGMxKSFPdWhFd3ZXNTJLY3V1UGEjVC4xMW9RJl0lY3VxeXUpbjdjdWpzXjojP01mVH1fMF17WnspKUYoc0g+U2YpVUB5PU1NU04+V0dz'@;
put 'SVg7Q01Tc3pxSSZ4LixaT0xOeVVdU1dFNyN6RTxhdDxEZXdyLCw8cnZacyxufXl9SDRVVyNtVVJTdXJuTHlxbVFmZSkoOHFQSzlSLkQiTHYqa3ZiQmolK30uZV0mQF1rZVc/PXh2bG5rQTNFflB+Pm9TNWx2V0h8VTBwPCZRTSFlMkYmQ0JSZCJOK1NXdzAmK2dBZEQuSyJ+T1JyRG9Vem9OfFo2'@;
put 'OCZOVjY9YCFxJStfJXBOe2MmTzBHXTJSOWNkZkxBQj80MDY3RCZOLG1HZiNicitHanB9bmZLekE4bEp4TTdRdS5Xaix7bUouMEp+dnFQZ3tVWyspJCY/JD5sfmhwPjxwaGU8e2difSosfjdgV3hJYHFCaU1rQlkqSXRRI1VdajpJQlNUbn1sSUJqMzBfOiouWnhpZyg8clIyTVBfd3pLOjkrWj5X'@;
put 'aTZKTC5tSXVCS3l0IUBDWTNlVEtaTS5yfHFDLyh5KWdFISttclJ8QUQ6NXhEUypnbUh8NFg8YjFrPFZ6ampBOkhkYVQmTCVEeSEyKDoweFBkTj48ZDxlYWBxR1IkSU84Qjk+cHJFZz9tLzNJaldIdGU8SXdsQ309Y2F4Qih3fltyM2o6NnlCPkwqdHxeaSU1bFkzP3I+ajAiNHJdbUcifUJFNXpx'@;
put 'T20zeG16TXtRaio7ZUd2bVNIQiIkcXI2fVhvQnxZO1k5eSJdUTVGRWw1PzF1d149IUFkU15aN1BDYFhsUG5nfDY3T31WYnxjLigwNSplKzxFTk9zQDdwKSg8UTM7Pip1SX46RD1vRFltWGdZbTxEMVUwYiFhJC4/WHFvfUAmc0ZRXXJCb1p5I3M+e1RrNHlyLjA/bUBMdzg7MlJqKXhkQWojXzYu'@;
put 'I2M2Ql83JDhENSJ9YGVmZ0svZCV1P21jbkZydlV3VEUxcGx+WEYhX3E2OXI0dT4xakVwKVJVOi5YUm47NFI/OUAzcjcyXnQwQmtfPiltNlIsSCMsOUQ7RjMvYCZlViY+dkQsaW1qWlNUMillXTI7V0dQQk9MdXJSIzIiLiNbfFU2N2A2fVdKVSpKdn1ZKipraExZcUZCITd6LEpPMlhlRUliJU4s'@;
put 'fGV0aUQ8dyJMMCFbdXIiMDA1dmVybEcoQiFGTTF2XjF5MW80fCxoMlg8YCM3cnJvcnVgPTlNd0JHK2IxbTBSJCg1Knh0XzlQP1hlUCR0OV5rYGRFO0VyXj5JaEg7Z1BPblJEVTdyV2JkIWZnLEMpRkU0WT5pMmhfWk9CMll7TTdVLiVAKncyNSs7ViMuPmw2RTRTNWRvZGosTl8zfXdzJChme0k5'@;
put 'PUUpXnZJUEIqRVt6NmssQGF7RWV0aiY2aWhTYFhyR1UuOUVbZjRwVEBgXkZscUw4KGZIMDxkIkN5Z2k9VUZtYEM0Ukk4NztzPnduaHVBMnZxVypEZ0lJendBd2c/eiV+dHMpN0w3MjZTSFFFKHxPSXxGb0QrO15QX2pNKHNoJG5WQCgoLFhLUjcxTEJXdUBHam1wbkV9bjlmfD5pfXw2N0xuYjRE'@;
put 'NiNjO25PR1U7OlR5XzpqQ2I8NjYqKzV9YklgeDFVaypfSSZMcnl2N15HRXMpOlQ6bDEzajUpKXRUMylRM21nIVc2L2VTUXc1LH1KPCo5ciMjP29IbytYcitASltLZmwyOT9FWFlfMERdMSxyfmg5c29OOHRGeTVVb11oRzpTem4weHZ4VltzKk4kIWYxQ1RgMmMqUSguNFJ7dUd3akQ1cXUjODx1'@;
put 'ak9aQHpzJFgsVSkwWzFBLlpmfGJsKnBDWV0ubC48Zmc9fExSJnRROShgY1FkJV9OJX04OURYWk13QDMmfihTI3EseWxPc3RoNmc1SzY5QmN5VGQ5KjR9L0BSXzlnIUs4cDh5I2dwM0VkbjdqaSsqfnVoXyQ4YHFPWjg/ajZ3Zy5QIW83ckJoVF4se3hSfiVKbil3QUsvK0pYeytleWVvK0FOYm5U'@;
put 'T1hWPVVQV3JDaDV3NDskXSxlcHFNakIiUk9IbUcqQjxNPF4uXW47e2s4cH5mNFgzNUQiW25EX0whRzZDS1txdmUyQWs2Mks0YkAuPl1xcFtuKHQkX1UrcTU0bGVXXn5VRVppP3dmPVZZMCRzX3tzODBLZEg5LHUhNTw4I118PV0rNUlGJjomWTh7UXxCbEMrbTdtOkMvIl9EWFVJSldLZTM9X05G'@;
put 'NUY5Ylg2OmZfbllaTl86Jihmd2dkVzJPci8ldDo+flFKL0pfJFRBKVdhLDRqZF40Jj82eW1NZlpKZyNsZGtrajp8Yz1uVVd9QUB6SV84e0lwTHoxVENlNT8hTGN2Mnt9RXddMnJkej9+ekAhUC5paXY8SntsQiRgQDV6ZG5zO0R9eyN7XUMza1lHZkMxcmpTOWoxJVdKLjFjRSJYOTdveEprU1BM'@;
put 'T2BAej8lakByI2VGJGhVUT0iLkxUK3RZZXI/SkgpQzJBMz1wVyF3TDZ4NnR2fnEwTDdfeSF0flVbYzc+QklmTT5wSVtRTCFNfVYraTYqTXBiKy97aVtAO3wufFA+KmdMTlBpRSJLZ0ElKkd0NUJ9cjFFMG1xMWxZMkMxPG11ZzVlKihXRWAwdjhSbXopZk5jQ2BoTUJAXiVjcCUoMD02b1JWYFJP'@;
put 'b0lNdVsoLzJxMndVXlAyfDZ4Yyl2SD9oOnowLGFZM2p9XyxCcmJwSk8iYS9XeH41ekhUfWRNaVt7eW9xQHhwZ106YXxlVncrRUp+MVZYS0siYTU+dHM1Y1VZVHNRM3YvJTIqZCl7T3YsSCxJZm52LG97WG8kT1VFdV9eejxNSVZAOCJOWFdDcz0vMFUxYkw0Oz8jbyRuaTtBOXl5PDZmeFE8Ok5q'@;
put 'SWRoPTxQa0osTyRYU2tYSlsiViZ7YSM7UzlMSVRqMjlgfCk1PkdQfj1gR2NBaE1MOjtwOz55cjs3JFUoNSkzO0lJWjdDQmk2Z3J6UmE+PSM7QXlFVkI1T1Y+S0x1emlCcVUrVipXQn4xR1BObzl6PDQybVR9UztDQ2BAMEw+OkB6JXlHNlc7Ll0uPExkTiEpfWl1QlZXNGkkcnBsZ11zOTIxcWA5'@;
put 'PzgpY0VmWl5aMiZOKVZBInV7cnUzYzdFNnIhLzokWU5UOE48PkVNRSl2RkdJIT1mLjQhNSVMfHhBMkl3NWxwTj9QeTleVms9azlvbm09bExQQGNAR0VGciRXTmNPMHcvSnk6aUNLRlJrXSFhaCopOSEqU1ZbUDp4TFIiMWUjQkpBTHR0NjtuW1NNOylndkozblM1P1koSmJIUC5CLE5XbXtPI1s4'@;
put 'ODErWilFNnRMWWRHaEdQLyx6VTE9Rz5Hdkl1eWA0XW9PKHs4Sks4dEs8NGFLYCEsJD1EQEZSbUJ8NCtYUUF8LDMqPmxgOWF0bjlDPWk4fDNsKFUhTCtqQ29LOFFxXXRUS05jaUBhQD8rLyRoLj54cHhhc3JGcXxjSVIxIVJTPiJQI1s8L21tcEJoTWoqaFd+OTJhakNEY1JPSjE8dFdLIXVgb3g2'@;
put 'czIoME1pRzIyZEpIR2NALDklek9MVFYqZjxuKFJzbnNFXUZSNFBkbzE5aXolPXhOPylmcywvZDZbJkg2ZXtfU1QoZ0RBcntodSs6Y0hwd2dPZStfKyt2dWJzVkVjUEx5WX4mR1crRkV9T3dNLjB8aD5nfWBob1l6bXN1KHJaK28hMHVRNE4hTklQWDpbMFtKPUMuRUl7WSltN2hRdFpbQl5ieDFY'@;
put 'Xk5IVj0/b3Z0dUMlIX4wTSxUKzJ+fmsuWX1ZeV84MVVOfENANEdmUXh8TTNiQFk/N35gMjlpdiUqND8/a2hAaixORyZlcVlnYWYlWyk/PDxRYWVFKT9bdnZnS1pyS1FVLGBRMVBwJGtQVD5gSmp0Uj5eZnlaaUdZRUF0LE42eE1bLjhQdVVmZ09UN1VOaUF5aTw+LyZsanVoQHdbYU5MY358JkVj'@;
put 'blZ7TF5RcUxARn1FJHgwN3YhQSRRSCZAZl1RJHExen5RMHFZaEteRlMqakVyMjtDMmUvVTIpPGpFIS9kclN6Xk5iSjQsSHBVZHhoLz4rdlRdam5femJBOU13P1dEUGV0blYqdShYVURfeXgrM11yW2RUVzhnZSlpOWdRLjVQOWFNPiNKSTdhcmM0TEBBeyJ0Li96fW45Qko7amxmQmwsNlFIWCVd'@;
put 'dl5ZS0pUPDtQe2R9Iy82TSNkNl9hXUprWW9PdVJ4aUk3c2YodnM9IkZreTgzXTNMaTxCcH1aSTNjSnh8VlZJNipVL1s1Nkk5eHdOe2VfYy5BWSJWSClXUXxCXSx9PElCeH4wMXB5Il19dyZCc2hYTnk0ZTM3ZVFockNnNkdLJkYuS2U/fDclWisqcG9FPFB0b1lJTjJYPD08QnpKV2AxbC9iTFc0'@;
put 'K3VBWD5NZElmOz9uMFpXR1l2Z151I3ZgP3dMNGhecyxheChWWjpYXVN3bCZdeT9EfUNxaCxkbHUuYS8vRmJadClpS3cuJEhEXntJXy5QPTM1WG5vZFRoRihLMTNKKWtUP1dISEsya2Fofm1GdGR2Vkk3PSR+SSg1UVt+dF1bR0AlMkNKLio2YFo+ZG9lOSxdYz5deHp9bSxvPj9wMz8rZyZMdFQu'@;
put 'L349PVYhdzJ7b3JEalRiSzB5fmJMVSpHfWRiakRadjQ1S0xVXmJha0FlMGcickBWOWRQRyMrUEpENWRvYChbbz5EK3FLNHdLbFQpYU1KL2dmNUVzXVdIISNkWXkmJGJ7KUE6OHNZRTo6dE9+K1hZZSg/T0dUKFVQfGplfGNRUXcpNW5deXVPdyFUYX14I0xnQ1FTNSFtbUAkTTIiRnJNcW8sVG0k'@;
put 'a3RRO3dkc1NSdTBfamxdIWx1UlJlR3BIUmM5cjVhXzMpXjZkPW5vaT1WeFIkdlY4PUZga2Q+PWZyW11iNDtARGUrPD4vK3BkQC55VzNZX29lPDgwfExDfTlkdytbQlR8bUR7QmM/e3tzUkhNUi5CTEhwJm1mSm4mRS4mR3okaXVyUHN0flsmeFp0eXY9WXMuWnhtalhvK3FiTE93c0NmdUlhPCh6'@;
put 'antiWmNhTnAuSmc4JlZsIkNBNDs5NkdZNWYkLHh0ZiVaY0AlOiRYOCYkOWN8JTJaT01pUyVpK29ZeDMiNF5WYi8rcjRIenxzZmVRdWVtWFVFa31nM2V3ZGlDK0tCaStXeG1IZlJoZSImVDdTXW98NHBUIUI3V3U7Q3Y+V3ZmdHZAOlB9ZlRjeWgiVFdHRmpgXil5OFV5cW5aSlBfZW8oUXluNyQ2'@;
put 'OyQrIT9lcm5OeU1VYCVeOTskYC9TKDdrZTpMfD9DIlJ0KSIzOmBodzxFWDh6Y3NfZT9FaShjcDljJVNbempFWXh5fDBMdSE4cDU+dHAzImNaVVllZjJwYjEqXTQqQilFNXNPUilDX0xJTUhyP3dIZm16eXxTXj5zXkBQX0lhbXpaOzVtI250XzEkdWxYdVp6KHRmK3tJSThxX28zLkpYWyZFV3Vl'@;
put 'TXpfZ29HPEBFUTVqZUYsX2kjZ1h5KDY1MXQjaytCUzVrZCNqO1t2biEwVUMmUzBSVTQ1PDlgZ01sR3VaRHFjMik0OShbUT0zV0ZoK3RpdGZ+d35bcD93UGtTPTdIXV9PQlJXRHchRlhEYX1tWnNUXX1PMTZ2Y2YhVCwsIWV8JTBoYFhJKil4YjdNbGhTRTh1Riw0IzhBOmlNO2JbV2xLPUBwNlly'@;
put 'fV1KTVtNYjk4TjJlW3VCREFIVDxWYWhKfTcrenRXUHApaGRoLixUbWtETktyVSI6eCRKcWBNXWl1QGBbTzJ1TCx4REQxayZLTGMoPS5CRGRXVUxTLiVuVGZ4O1p7cDt9SnghWW0iNU5wRChZPj9oeE9YbzhMUjE3Tmc1ayNpInEheH5qWW9mJTdfdSJjcHlLPml0PVEqNXU9aXNkb19yO3lIQVI9'@;
put 'SXNfdktHLnptIW5zbnlRWzdwNiN2R2BEdTNBQUZuZzNSaFBtbVNhR3csRFBsais7bCNjTklRL3QpZ3dBPVBALjB9cWpgJGpvIjNXLmJkejFQIyhCOT1Rem9CKGc5JC5ecDUuW1V1KHx6ZW9AYksufSpPJGZxOSlRYSZkfXhEKyEuIzNPZ1p6VDhpIVZKX0k1KnUldzsyelRyLGxsRiMqb2daYmEu'@;
put 'YjRpNUtDKCxfelF+Iy9eTUVfXVZXaDpsI3I/KzUuQT5fNSIqfFgwME11YDUlfDk+U1lqeE8kV3YxZkp9QywzdFB3bD0vfGM8Q0h8QDwjMHptVit5QVZPPlBzT0g2LEFPajNIUVVCP2siVzNbUWBfL1A9P3kyQEF+YThBcFg4WT1ROkhVTkA8ImIzajR1cW83TC4uUTRES3x+bEVNWTZ3YjRtMTo7'@;
put 'NyJFTXtddVZrbUhjTX1ZSTpGJkx+Q15eLGErMElteG04Vm1XVng9M3FGM20uKiVBRXBJWzMpYExNSFhIaDFpRT9jR311XV8hVyR9Y29gLnYsMWxFaW9uT09DcTVuMX4+PmAld1A9Z3Q/ZGxebmV+cXBLQkwoQj8lZn4+dlBxPzhZeWlHSHlkR2hCTCkwVCk8RUFFZXh1NHQuNFNjUmNxJCRrIy92'@;
put 'NUZCYUpUNlcuRztpaVU5ezQqLyxkISshJDl6KGJDdDh4e2A5UmlGdzNpODQybylaSENRd0k2PToxeGhPb2RndEReYDJCJTAoVHkjaUJQKmxPUix0QiZbRHRZUHJgKVR0LzA+KVk3NDpMaixuM1h7Kk4uSS45Sz5GaDR8ZV1rbWVsRzRjcEw8c086SUdFSC56ZVh1ZFNqMTU+NkksNEl3ODpCVFs7'@;
put 'T0lFMUJ5OTVAbmlDQ00mfDZSM3dITW81MEtYPmUxQkRZOD4iJkNZcUNCIyNDfUZUNG9AOEwzdCVBSjxUQVV2IW87SC40cVYlamUhbW5Kd2B9RjE4OTkyVClQT1E8YVJlITchP05wWlghNFs+dTBMMnUlQ0kleiVmUkA5KkFOc1dWQXojMGpKMSVDQGYhOjUmKF1ZbWlKMWlOe3tHVlBUTyV9KUQ9'@;
put 'XkxAfHB6JWQzKDp2eX1SU1RBJiFac0h+JGVnYiF6T3NQIWV0QDlPRmxMQlk+aCx4UVorPE09WnxYMUs0aGZabjt0eTkzSX5PTWA/RD5ZfEpjWUUpWGJSe2JqaURJaG1qKG1vRXtPXVlrZG5CWjFLOnhDTExyUEBFdDc+WHQ2eWpNQWVDdHhdWnciUFBDQltffTh3eWpTd1V+YUJRYzVHI11oU3Rt'@;
put 'R2JUNkp+UlA1N1FPRl1yJjtpWWBncm8yMFppVCN8Y3QiMWZXKUEuSz1wdFo0SHZLTSI8R057KlRzRWpxJShuaWxTTnckMG1kPlhrMz0xTWNeRVhtOFQkXTM+WEAmVU1udTF1NFIpOlQhRyZFd0thRSkiT2ZCNzB2QUBMTEhWU2xsUyRwXkYuaSw8cjA9bmkyXTM+YWx4Kmk1czxaPzIpXShub01d'@;
put 'SFlrS2I0OnMjaSpXZFF4MGlram0hLmU/RHI+fUVVeC58fnsye01iJWRzUj5HXipnaCU2OTc2L21VJiE1cjhQIVpOWlhvLixuXklVPU9EYzxoT09CVjFeTW0wQHlDLFh7MFkkTSVbMUJTbF1VLnA0TnJ6NSFyRmZufl5QS25KSmA4ODFYNSx7bFA5ITJrM1NeajxGT2RMZGBiZytCYyssdTp4PX1y'@;
put 'eilISExJLjcsR194aEo4ZlU0JEppWE5FXzZzTmdqSjxyRiRjYiV5MFFkfShWLjFlY1k+NGxqM0VSPjZ8RFsuNFkxYTlLXU1TVERtL1lDUCJ4aXVOck82PiUlfl9OSlZTSUdlVXttKEphXSp6YCE7aT5ZK1RhMTI/P1FeZWVpSDRNIXYuZFU3aXQ7eVEyS3ZeN3VETWxHLlMmVHxMemhYTmUxeDMr'@;
put 'ayFeUHswMDF3OHs9YW1sJVJxaUxnKkM8eVJjPjhUdEYuNWhmQUNqdzEyQzN3ejVjYXA7eT5haHNpTHxwZVIuLzVuVllAQkQ3WzNXbkFFV3AmRUV9NTUrZCxTQEIxLkkmWDQ+UXdbaXpHblJDfkc2NTZJcn1BciUpW05jLn4udmo4MDhiM0M/R2hWMn4hT3ReW0Z2cmBnVmBlNXEzI1lGPTR9KUNk'@;
put 'fDoscG5CaTV2bn4oS1A3YGxPeUlgIkt7TXhtNHcsPmVJVVdGTE8pOD5gVl1weyZuISVRNCZ5JGB1QEs+TTdHYXxrbiN1Vl9ZLzlWcFtvS1FVTzBGWyE7PTo0WzxESCVNM1svdDQkN1ZUIWNPNV0sfDR8Y1pAfSp2TlhFQVUsRnYvbFZSa2d3WHFMSElTW3RzTWhgMUwxLzRUOStwa1gyNjA6KWVn'@;
put 'ISVBWUUlJnRzfkkyJmsrKi5QSEJOO0t+SjxffD5TNyRPVz9tVzx9UzUlPEp3TC5KbSRyVGdXbSRMO1coOF9xW25uZkRsLF12cmZKaXc1Wisua24pTDpWWUh4RDNba3YrLl8xWEdkRixMaGg1K2V1Q2JZKFljZHhKbUddO29wQHo4MiZNeHo0ND4mez8sJj4mWH41QmBLP097RGZsQHY5P28vVWNP'@;
put 'R2tWRCpwSXZwVEBKK10hYUV6aEk0TTRgam1UNEwwNlhdRzYibmJlaE5xUFAlajtbdUI0alUoRGFLW25Gd3N0cXBALGtqayZlISFZN0VJR0VxU0Y4W11UbUZ0VzlbWyEqbkA4c2poOjVzVVcydllacEtMcTsiQFp8UkhPVHpHI3RYbV1RPT99QGRWPltxeFhFd3BtLih8cWs7IVdXNTQoUml9K0U9'@;
put 'I1l8NmJtSzpKVSRlYk9HVmxHTlhnQnBXJnk5SElLVTF9fGNHTz9yL19vMkI4UiUrMyo/bn1ePmV2R35zcl5xMkksamYxTkdJYU8vL040RXA4WD9tSXcmfDVGaSQxXytsUD4rZElYTGhqeUZJKUJAWXgrfGtYd1hiLiM2RzsjR2J9PVkqNnljTyV5eGh0ajQ2d0hoQy9EeUgyVjJzW3tTd2BrL0Up'@;
put 'IXtZW0JJL09dW2RjNVosUzxZSEJNPiFASjJ5JSVSTHo+KjomQFAydkYraFZYaEZ0XSR+RytZTDN3WUNqNWFCLHYkZC9kcnZpMGs7VktSU1UvJipNcDhPKjVWN1MuVitmckZ8fSE2Ond2MytlQiRHSlQ6NyJJIlNPMlk5SDczZGhjOVcwZGV3PWgvcnRfSCs3bjFIYVk6YD9tP0J6RW4oI2xdS3Y2'@;
put 'PExlZiQmRTxtXlcwQSR6aXBYd3NYREN1bmNZfk1Rc2VPLzpYW1tbckRkfH4jfEx2SjNAfD9QUjthXkJ4OzZxaV8pV1FGZnN9c1ZKRmxWdnJZVnJfKnVKUlk8IzdkbS5eMjUmMkBRcFtEYElnMGVIVlgoUDA5TVUjbkVtMj16LE4+O1t2UDN1OHRHUTRpbTpRPntrWF1Ma2ZIJnBDKGhpKWd7Sy8u'@;
put 'ZiVyLHJIe2o/QXU9OSkrIjNxZXsre2R4K2RfOVp1T1UyKUJAeFB2P2AoeFddPDMpfil7ZGZWckpoeF5TLHMzM2owN0B2dHdaU25yS1Rba2Q8fkZgR11zR1Z6Zz1pLGp8bmZpODp6MmNRenc+RGlXLHA2K2ZPZDpyZyl+MUpiVlRoTzwqWk1Aa2lbRyR9NHR2eH4qbmB1Mm4+Tj1PYzU+VWt+RFBz'@;
put 'LjFaXTNFQCN8K0BLKDxVUiVHbFpdbHN4PUppRmM7JiJuTjhZIl5IeG9jflBocDVXYjg9cDhCLDo+PkI3bTxodnp9PUQ9VCx3fmhDaU1ubXhvc0luYj9zfm85OXk7bUVyQW11SEdxOnhAOSJOWUYiWlMxKVk+JTghU1pBSzgwUmkqYW5zZS5JKkFyMEJqMT9MSiwsQzR+aTJ2Sy4xRm0qcHJZcj9m'@;
put 'UjpeTDE2d3IrcUhnfW8+LEglQT5rMCpWKlAkZkx9fm9ET1t6MyVgM2YkKTlMNFdRYzFoY016TmpZfS5NZkdKUzIySCZUPUs+fWN1L2tdNFM2YUV3di9VK0VmXXErXjR+ciNzSGZIRUE9SlVnUUNWKEEidFVtaD9pcks/NV0vK11ddyNndy5GSTdBR0wsJWk0PkdvaSUzRk5bczFCPj8kXSZrW18o'@;
put 'JCxvW1ooUHg7dDJudkQxOXVeUnkkKH1iZltKZnt1Ok16NkdIMDE4Nk5TO1U8LnVDb1FsKUU0JWA3UzhfPzNtNV8uKz9DJlE7KTg2OiJyLGRlbzdwMH4sWS5nS2koM1duKy57aVh4bkhpQlhYTnV7ZTQrOmQ9SXtXT3FfWHV7PE5kW3NUaX1rZ0NdXSNCMjhET3VMaSJCKmgkYX1NX1QyRmJIeDgy'@;
put 'O3JtQGFUIyxtJUAwLjIkOWRVQUc2aTJPQCR9Lm9RSH5BJlFjTUJKZUlbLz5kUF14bVJlO10+OShGeiNvLnQmb29KQi9nRj4jcV5XZWlEX1V7VyUhWD9LbS9PcC9OKT5UR30wNVRhMGBRK0BTJChAUXg7KndCVihzQGYvJHYyTk5sa1FUekYjd3xFRkNvcTs0VFY3Tk18ZXxtR0xVJXtwZnViLykq'@;
put 'WnQ5dWNqNWBVbWVxM205b0o/Uk55Nz42bzQqWlQzOkoxWjV7clJ7cH54ZGZeUXVyd2EsN2BDNk87Pj18LD5gJUdFPmpkLHNMflpOJDFZVlQ5bEd5aSghOUw9NlJKMXwwRmJ4YD5kNDUxdD4yU1deMWpDeDRld1l2MTg5Wj4vfnQlfVA7YzAuPjJzQVRLa2RfPENPfFk+I2BJSC4xKSk5eXRSaTA7'@;
put 'UFhwL0lbNTB0Ik03ZnZtQTd6KjIrYXwsalM3T2I3KF8mXWQ2Wm09K1ZyR3BYSHd7ZEo8XXVNaXFqT2ZDWFlAfjlTY1tqfksoNTQ5JUhfLFFseSVifDpDZDVPXyYpbzVBQGwxVF12UWZ2P1tuMDtyNzNsWUFzaWMvTUQqKW1Vd3hKbkIpbDsuTD99fjc6bSF5Nzt8Jk89bD9gbHhSJmdHMHArP2JW'@;
put 'KSJdcCNDYmY6bjdfXSZsPX54PjR3PUNPY2tvaHBCWlFKfjVyPjhGZ31tPzFQakNEQHlGSF9GVCk5aSZ5YmdpWy8yO3soQ2UpWVorMTJWQiZYZyl6OTNfVVR2eDJGYSMpKDJub1Y8JnhCWkp6RHZDZnUoTCk/bGlCVmI3JjFeMDBKe3k9W012OiQibH4qYWl7NH1Dd1ZlSylGbEJ7JHx4UzQjKXxz'@;
put 'Yi40a1krIzkleShaR3hXcnUwNHRFVGVwTmd0Q1d2KFN7aXooK083MEcsU189OyFjUDFaRSVrN25mSmdeMHpocGR0aSNEUXxAZ1dCVUh5a0Z6STgjSnRPYmF3RE9NamFGLFh9JDlKM3pONC8qL1BjO1RCVWJiJEs7RU49TlciOiRqR3RzdHsoXTY3ZzNZVUg8PXVBaENJd3ZtYz0+ITU2bzxieF0z'@;
put 'VUplL1tLaHtJZldnSndWXnNOYSEjVlpyOmY0TVduLGVKdkZFWH52d3d9VzJndntdejE3JSlZdilmcVdaKlIseXRMJTwsODgsVV1yNF8wX1gqXiQ6e3wwXlpvfjEzbWtXU1FCW2o1dyg/dzJOayRneWJnRSx2bilOQEU0KXRZSkVCQT9UPT4kRnMvPzFOW0soO28/KXpfTUYvJFVoUDhtOVgrX2Mv'@;
put 'ZUAxNiRDc1kwb18mSUNqLGg/UnZEZ1E/JXtDJTdOdWF6WGdYelM1b2MzNUQhWGY7OH5GMTBNYE8qOjohViU5bS57RiRnViZMR3JbLlJOOzd0VEJgczZVV25GXStWTSx7cF9hSj5TMG88N3thdWVnbDI3Q2VvQj5EWm5ATE1CfT93UGs+RDh2JlYhfSloSkg/dVBBZnZRVGhZXzF2Kzl8bUlzfUdr'@;
put 'Vy56MzdPbCUvITxkXjo8WDUqcyNANGxkJSFzRC5aSW1ZM3tSJFpXU3I2T1JnLGpdIiFWJTVQVylndDVfNUFPOkZbKyFxUFIhPXJTNjoubWg2TiRJfSspODFqR3JXd1hIflsjL0o5QCtBYS9TRn5XV0RNM11URk4oUSEoYkB2SXxWUzsvdm9WX35YeitkRDw1WXZ2TWU+XilGLCVMVz81OTR9Ky4j'@;
put 'YEs3WWB5UFt8XjZmMDBoMjVMZk0yW3d1ZjFIUWhdZmlkJDtRODU9YDVmZko0WzRIMXFjNHRuPjQxNVVuYGpufSFgeElOSXVLNyRBKyN0VTl2YTQxZUx0dyx7aU5wK2RwSC8zQE8udGJDKjN0YVJsZl1Ee30lKi9BLjojJV0iOVN0YygqKDw4cDt5fEkxQGU4SXNCVU5Ed1FuSGBxN0B4SF4uXWBZ'@;
put 'bSs5TCV1UV9TJTpYckM6VDklWjQ3MilTcFZbZUcvOFU8ODxNd3tOI0lJLGVlUEQwZXlCaXFUfCtiJXtiZ3UvISxfZTVCejI9RlZlSHZPS35uYTpUNUQhfFNWSSpScjFjRzwhODpbQS84OVcifDM6dnlFcX4jens1YC5Bd2Z2MkYqVHpjSWpxfEpbWXV9Qlo8VGlrKywlbmd7bE1qIzpQZkAhO2VR'@;
put 'ZjQvOCE/YjJWZ0NyWGt1PlJdaj82eCZ9MGZVXnBTeFp6LHBWUEM7PnFMPTlDfkN6YiZgamU4S0RiPWg7RS5dZD9SZmoxe1B3SEhrVlNVekZnJmo/IW9XTXN3O3tCY2R9NX0jNmRrKkJtczYhcUB9TGxQbyR2Q3UuLDN+QGwpcDlpXj40OmNmPDA8ejp4QipkVnJPcGR5Yyk1Mkd0N3x9OXdyPz1i'@;
put 'PEVzWUhSWGU3RCF0WTRoJlpVO1hQaGA2ejtNOHpgOTREJko6MWw+azwhM21vWVMhVjIuPFtLeWAzOUh1dmQleDxCLHJ6OCIuWHtbOlVCKm8pJiQ5ejgjfEpwenJ8QzxQKFIkY2ZNcEw7YUdVO1ViOStmL1kzeEN1SU9MMjNaM2tNWVsuaSsiej8sZHhva1szM1g9ZkI+TFghMUM5WlFBKUEsbHFW'@;
put 'Qnw4LjBycVJgR2c1aHpRXUNBXndXX1lfYDM8Qjt6K2MyfVYwKlliSz18YlVIK0g+JVolVz9WMm5ZaXpyaG5DWmoha0FxXXVmbit1M3ApeyFZR1FVeEtsb2JPTmUsdG40e3lZcmRjMjZ9UGUmRSI3YEJmRSUwVD0wXnNGfGNbSGZIRGNPfTE9eDZ9a2BqWGZuSGZFTDlkMFpPbDgoXTJtNnFOWmY6'@;
put 'fEhDOnE5YTpObCNnLGNmaCMmLDZfI1IuKWxfaWgyVzwyNipUdmQsd21ZJUN8UUxAXjZAU1lWYE8sTWkuM3swTUdjT1hAfGUzWFh3WDE1aChUTz19N2IzbUVlRG9sJlNvLnxeMlQqYyRSMDE7Zz5nLkNbT0tmPih6M2BWJCluem5HPHxDITI4PWs7VEJTPS42ez0mOThvOFQ2bm9LNUNxPjRyOFRq'@;
put 'OCNJUS9Uc2BKbFREbSJ3OE9YbmBHKzxoL109elNiYj9XKW4jaWl3TSUyMm4laXFVZSZ+M0pkZDpZfkJbNUJndnZAOk1JQExJM1BSbG1WcEgxU1s+bn5uOig8bjA8N1d8bjtUc2JmNCppd0xJUkJbK3JUQDolKXB0YlFUfkw/QDM9L1txW1AlalFgWyplOCwmZ35XR2NBVmJVdWd7WzUvcm1fOF9A'@;
put 'dT9aOykwdihdNDFFJWtmYFloYT9IMykhJXc8VCFuaD8kKWkqW1AsWjZWdFlxRDNIWTh+b3NUaH0/WFl7TzpvbHdEQWZmVmV2Ry4kdmA/Jko0V0REL1FaQ0NENStHfEwocnpgRkNXPmZDYUVbNUVUZ29rJkB+VkV2aVNud2YyfHMxNyhmMFBeXz16L0gyLyJNQGBHX0AxLzh5W0EveVAwW0VzNy9j'@;
put 'UnkwWWh6VUtwVV1icEdjWU9fLk10OnxzQDBQU1duYDg9IlhfZncmeXhXT0AlTiVmbHwrelQ7cmlAdGNMWzc6IUp3MHwvK21wdjhiZWgsMUNmTEY9dmI1IzdUby4pJGdMeztURG1CK3slZ2IpMkFLKjIhbl9aR0IyRndbVGVIRSgyZWtaUF4wQHxrUm82JXVXLFVzbT17VjtPR1VYeFE9Mm9HZG92'@;
put 'Tl07MXFNVnZYNG97SSgkMn5qYT9mVnhjIU1tRyVHbnA+NlAxRE0vTUkrbmx+MWxOI3ZbfH47ZTNEPDpUfmtJVUlFUz0zenkwZUhpZWsjNm40SVhHMnF5VylNV11+O15sR3sxY0liRT5oLnhvblBYM2VgQDVXKmd6PF1OW253UTI0Slg8X1k7OyolTyM4ZVdOMEwvPTBtMHAuYyhJOy44JWNuZHB4'@;
put 'YCNXT1hoR0U8UTt+YCF4RURyfVFralpufkgxc35LZl8hIzs5Zi99NTk7bUVlXnRJQiU6YyE9YDtVSnhrSSZYcnl5UE9DOjlGfWtZYndFVE8xZWY+M00sLlosK2kwLiFJTjI5Ym1rXzh7YiQ6NV5VTD02aj5oYShndnQrYlRoZHM8dGJUZ0w0SG5Wcn0lSzs0P1hMTEhyMXFWbXUpbmkoN1c3JT5K'@;
put 'eGAqUGYySVtoY2ouM11tZ1JbKVpCcEQ3Vy51bE1oL2VQeFRkPXxOS3FibTU0MEVNYnhNKy9pQyFLciteTzxIUEZSLixGVCU6TSt6TT1JclI/ZEoqVCN1dmpKey5oZHMvL0l0KTk9SHV4Ry9VRURyMENkdXFtVltAeWUufDw2NCpZQVZCI1R0SS5TNWFvbSlPSUcxMX1RWkNnZ0VBN3ZFa0NpWyhn'@;
put 'S3IuUV5SJk0iIT97fjlKZXloe3w3NTUuYiJoK1A9OnlFSjZIe0FkQW80Qyk3bmQpOX0pL2lgVkc3bSRaLmVOZ2BYKzhlcDBvI3VsckplS0pNNDx3MnlPMzF5aS55cnxfVnY9NEoyS3hvR3RddkhNVyVKR3M8cXIzMWc1O08+ZT4+RmZfdUc+WjwkVV91OWBRPm5jQEZOIXw5VWY7VTwycHQydCou'@;
put 'W29qc2xIfHBoaCREM3Z3bmtiVF49Wi9tY2xmODRHNz1DTTEvfktuLy5jKEkmXmUzQkg5YntWRCo7a3lvL2lSaEMhVmhYVGtSMG9TSVBtQiRwaTo7ajFlZGlHbkNjZD06eChjNy88UUswNVBsJl4+KFtqPzVJJExCaD1rYXVWTFhefE9YJitpT1VhbGk4Vk9qV0AyPXNxKC9aeTUyQ3IzbzQxUTxV'@;
put 'c0E3aUtBTmwyOTdtTGV3IStnO01NVCh8QEN3JDFySzsxeXo2QHk2QkZYU2A/alpeSj1bfj9fQ013NEtzejdIYWA6QUoqcElGSn5YO1VkMn5tVWM7Yyk5cjVgUT5wd3NlQ2lEcHNxJUkuPWcjNkQhb08qezBndHsqZCpXO1Q+MT5aZiY/N0BWZyolNTlSdHJ9XSs/Oi9tSzVoOks+Xnt7VzkubSpm'@;
put 'elt2JjU6NVtdbyg8MHU2ZSIhaytlbmNBYzAmQD9DMkdKRTFWdHs8cT9nUXUwN0c6b2w5LDxsTDp0KVdWOT9QK0tyeHtsJHBjUmouUC8uPTddMHg9dmVEXTQ+REB1TzdXUC4penNhRGVGbCoqZzNwbkVTN3YqKms1MyF7cTVaWSImM0JVPjszKm9gS35yfWddemg2R2sjPW4oJnFYSGxvUGdjPDBm'@;
put 'WDUmci8jR2Z+TTgvM182bkJmcztHc24hJWlHfilOT2AyZWt4T1JVUEUzNnA7cShoRFFEcW0qR2RQYlVdMFN9fnVQTWIxRmVFSXhPRz0jaCUsN3EsM1oyX1JyV2tWbFE4cV42cVVdWyokS3ZBITYyY29jNzU1QDJwb3JASkh1PUl9T101e2xCNlkhNz1CQygoJSo5fG1jSzZhb0Nbem57QFliaWxN'@;
put 'Ll1QLz45Oj92ZCxvN21hVEgvZnkjKGxGMl9fNHU7NEljY0ZJQUdlaj1ZKmNuT1YsZCRhYUAuSVpFe3lIOGBTUz80fj1VYU8lZ3FqKylWa2NyaGtbekkxa0x9UFN7OXBsajNzdDBiTyhaaWFARWtrQGZJW2M4YFFKcUVMNU9NMEhzWF1DVk1VM3ZyM18sXWAwcGV9XWpLJmBdKnUjSzhVcnR6RyVQ'@;
put 'O0N7W0BKcD86Izk3K15UOS5KZChxZ2FjfEc2VF42MGxSP1Y7VFJnfDAvMlZRZD8uSllWKitpcVE+Jkx3fjB3OV1beTJWXzR6OC44S2twTDMkNkxvW3lwPD95aX1EVlhNRVRobzkwYFFtODk4SWFFfnVJLzdbT242UWV8MXhwQExCZylkVWVycWtZMFdVOzpWN2MidCU0SzdSQlBtbjZoc1pNOzI4'@;
put 'aiVWO0d8dzE0R0pFSlpfc2IwVSVXU2Q5X19KaSp8QSVuJDNJO0VeUTJJamsrdEJAb0pvMXw8PyEhOi93bFJqfm5HSWB+ZnVQWGxMXnhobmBiMSJmQm0laG4xazEvNjtVTjozPGcmW2wsLigoe1VSaDRJNzFxYFN1ZyVaPkE2cFJIPTFtKjNpSHs/aERHfWw6QGUmc14hYGB3UTNmdCZdUkV2ajpZ'@;
put 'KjlxOy5JM30hMSpqeGpLbj5iOW1tYlZKY3csXmx7RDldPFNqbV13PDU2OkZ6PGc3Lzx+VVNUJVZXQn1xNmU8N3g7LyE6Wz9MY0FXVmZkYiN8eHhMMDFISko2NmlIN0dhO1RfUjFqbXMmblomZ3gjZmUubTFAYmhaLGQrLGooclY7YSRyMS97Q306UjMxZ2hpLHpZdylhUGhgelI4eFZJdHVLbmJO'@;
put 'UV0ibSNSKFkpfUdeNFJwfjtFdTFJcFNKUXZWald5ODZXK0hebDB9eTtHNDN0dEcqUkskaDN6Ykd+Rzd3RjU/XXUjfDRpKG1JZz0wQER9PH1YckJnUHNrSzV7bjxhamBMPiMzWXI7NEE5RGYmIlY5K24pTSsvWXA8SGxqJEh0WypRQiNAblErWTApRnwlUU84PjpeKjhedkIxZCgmREJPU2p8cHcu'@;
put 'P31AUl9+aCxOfmc0NkYqKiI2PSJublJXayQqTSN5dXw2PXxSKyNVNlZEPCZPfUtHVzl0R05NL20qZSkkckMoIlBlVjh4TlFKXV1JckNlZHUqaGRiYjlJJncxZ3gjODNsWHBWaC9vSldjIikhVyp8KjBqLzM8LnleYHBaeUh9I1pIe2U1Ln43dC5dX1FHeEVEVj9wKkFHWDhbKzcoNmV1aWMmKyo2'@;
put 'IyN6eDxZYWRhMVJEWEdBMl56YThobyxpcWQzL2B0bCwweiVEVH5yYlMjJU5KLH1gaWtiJlN5VHVXNSJmR1dFZ00hZixUTzFVX3khPXVHOmA3WypXX1k5cSIxO2pRLD9MIT1KNkpjKiokWCw6MkVaUD9teSFeOiRtWkc9ZVRUJmBaeTdOSUZYdXp4bVQpZXo8NCFXYEl3fVdobX5lKCNsdXAuVVA/'@;
put 'Z3dyayFAI3Q7MHl5JnR9UWYwJCM7ZWB5UE1xX0cmfFZZdE57bT4lPW5oJmg4NXprOGVFclNXOCl3RDY/M0JkNVZDfH19Sj5laXVFan1IR3dac1N2W31UelUmX0s+WFYxN21ZWzU+OmhXITEvQllbUFcjfD9hPnFINlp3KjklSyIyejg1PCFWNFtQJSkydnVvJSwrIkQrdiQwQU59dCppVndhXSss'@;
put 'KjM+cF07T0BUUmM3KCE8cGdsU15+Z3gjPEhKYUJnNiE4ViJsYlYwOWJte2N4eiIuJCxPJWJmJU9HbGZofElQRyN4IjwpbnJQO0IhITtsTUJMbExlQzsqNU1sZn15US8/VzkkWEhDa00jV3d4SUF7NVs2PEkrUTBbRklyLD94dHFUVCFZKTY7P19tfUAqI1N7P1Z0b2NIXyx8MXtaelUkRH5ALFYq'@;
put 'KHJOe0AjNnkrOzpTLExvOVRld2gyTlN8cSEqKnNzMXo/MC8zLHlMUEZRbi4/PSFbJXJRbmx5N3daTkYsSHdreE1vK1tSQUBSelM9Jj9+PTR6IlRrX19ddihTeExdfV1FXVphPD0+ZX4rPXQ6SjAhfUpzZG4jSEFCYSJNNkJCdC9pd1VnMDZ4QitHOVkkXjxFOzRhbXtgLHZdV1FGcTA/QCYkSn1f'@;
put 'Nyw7LDE+eWIxYnJ4WyQxaE0xPztwXXk0cCYsUjIpaFl0RUNUMWRDR1IsfSE8dyN9aHlMUiZxcVdUIW1tM1tiIVd5Z2k9eElFZGk2RzoxZm9GVmNZO2pIS1g6bm9BLF4jOEBwZjxYcVhhKTAoaGVeXXM9QTcpLlohImJrUFN4MT1uZm1mLEpZKlRpKHA5QlFgI3wiSlhFVW1xVl0yJSk0UkBPTXM6'@;
put 'TWI7TzpxfXVRVW9qX1IlPiJ+bCMzcjYpaXB8cDVBXytSO2h9W2h2KURTfHUmJXM4ZGNfOmlBUD1Afm1NeHRtPmFkVn5aJil+NzViYWdFZWo+TiNJODBpIWhFZSVfUWg9IzxqajlpeDRyR2Z6aFZibVJ0bX11cylROjJxfCNWY3wqWWkuUkhDR1tnbT1Ib3I5ay5SKjh9I3NJQzwqKHJScDohRFc1'@;
put 'YmxSJWZVNzpjVFd9X3k3TD0hal5HZUp6dFg8K3VzS1k/OjxEYGdTJSojZE4vKGNtIWt5ZzZSUWt3ODwwcTt3aEFffmA2JTwqa2VdbnNxSWM/W2l+fjsjKkwsdzleP31fPUVvSEVQXjh+XitSTDl1XS9QM2hYRk42K0g/VilOPVFbYSJaTmV6OFI+JEgqXjM6V0lDZSN9NTtDPVNSLGxkOmphRSY/'@;
put 'QDF2cXh8QFM9ZWM1WSIyOEk2LCx1KX1KJTFkMHRScS5RK0l+NmlfP2dWYm1Sen5LSUQqW1IiOEdjT2FlRjpwfVtMVyhlUD9uJnwjYENlRDFnckp5OTRPYGpBaDxpbzgvV094QDk4dis0SkYockxoUyhPekFdN0k0K0lIJXxzPSQqanJ0PS4qYXhVMX0vZCk4VXh0TUJBcER1YCtgSjEhVkJ5TV9y'@;
put 'cWQvZjtTQXFwYDVfXl82UW5OZUgiTUc7eSRZPHE0TCYkSjVdTT5FN2dxLk48ZjdKaFI1PDRfM3xURDtiZGVUKGFLIXE4YnorN2MmZmNtbytlPGgvRzZ8b29gdGcoWi9RIyw3O3BvYE1BWUFGP0hdQj80YmJ8bUBweTFbYDE9PXo4TzJmI1IhKn0kTz1bUFpwbF06O0A+N2Vzcm09O2YvNyxASnpV'@;
put 'T1I7NXVsXVU3OTQmdyo5VEI7TzJfcFRDOj1RI3dZTVEzSV1TJEtXbzZFPklIPHE3bkw+MG08ZFBlPjdXSHw3RU5QZUphRXE9SnB6Yk1HITZAR0RubmF5V2svYGQzSXpeWVM2blEhS0ddMXdGbn4qIzZvb2l1dHRsJG9yNE1WK2laRyUkbXwuKyRBTjReWS5aJWRDJSskPVVaMkJEfWA4XjheODh4'@;
put 'ZTNWdCsyPT9KWU5GKUsyWDBLISpNbylaWEpzKTdAbzNsJHkkIkBbZ3FUJWNbIyYlJlVqRlRQc01RYVBoJjl9Qyt3UV1gUGBZRDo8YW5oeX08dTdteGQ3P14ybV9XUXZIaXhKSVA4LiQuJSQ5JFpHRDY6a0g4eU0xKWdMaCYpSno4R3Ake3U3MzN8KkpoMEtWSGR+bFNLdGkvYVdpfHlAS0w0MUd0'@;
put 'VnBIaDVGbFY5MExTSFVkMVVzVVMxd3RVRD02V0tAeSM5PH00MCUrQC9UOXhsWF1Zfj09K1VUKlheU3RqIWhQc3RZNXklKlIrSXhbeiRTWik7Jn0iTj4xPVZaKys2RV5HUk5tfXptZXpGdUh3I3w2Jk9zJi9XajMxeyMqTHkucm5mJVBBS0J5dXZ0KSldRHNjW2slXVQ3ZX4lMjAlOEFAQW90VkV7'@;
put 'WVElZl9uT297SFhnKGJQZTszWHlLKWpAcXpGSHVoTi5fVHppUWFWQy9jXi5zKSorcWtpS156RkwqTXlPbmROdm1FQDVSWUZiOGJpQDROL1E0WlosXTtQMzJIWDJaOSFKY0tLekMrKC5ETWImIzJdJjYyPz9EXm84MzFrc3ZSeWc2VEdRSTxmaWU+Ml5JcnoxR1UjKnIsQ3k2ZTBMRHlaTTBOMTAu'@;
put 'Vml4UXp6OWw/c0swTU0oLDBSNiwwdXJwJCJna01tUjgxXXB1JSxVYUVgU3Y1QXM5bD1pLFhqR0s4fVpwJmNERztPSjReZyQyMlt8O04/ckpuQj50M1NfJUh6LkU6Zil7OHNVRWZlOythUStKbzFsQiZOVUt3MnhNUUV8Q3FgNSZIfj5qcmg2M2R9MzlIcWtHaiZmOWN+N21ZWTB2JWJQUk5VVHk+'@;
put 'ND05YzpZTTooJkRwcClKXXE4VSpmRz4rZ3EsaFBEfHZ6KCJVfHtmXXhsekdwLENyUiZsLGxnc1A7RFhQcWVmJDAxQXJwJDxoR0lidThvTlJJVDkoQSZreS9VU1IjOH50b2o5YW89PDx1d1YuM0deYDRVeHRBQlNKOCVmRypyKmlgQUlQXTkofCw1RntHbThOaVE0e2hIPDkiW0FnKDQ4T0p2UDMv'@;
put 'LDMmamZCKDRCM3piP0Boam84JUVIT3FCXSVqSjYoQCo9aDBHZVgzTyYlNWgren1wVGpYImduQ3VfeVVAMGlrdiFyWk14Oz1ob3laNiwsPENfUyVBc1F4ZzhLZ1QoYUtRP15tWVkmSjV8U2ViT2diQHhZUjliR2Z+RU13aHBjTnplTiFKMTk1XnoiY2VMJHF7cDdheiMxeUVwMz04V2hgNi5iMSw1'@;
put 'dyVrUiZNWU9iSkJyKlRFVy8yXSxDO09gOzA3ZFFFMVUicUlxPXkiOCQudklkZUk6Xz0wS0NAd0hue2ZdUERrW3gvTE45TjdhUVlkYiFjIlpfdTNaXnN8e3I3VjlNMCorJiNIdmVaXntXbCp7YCxjUHpXPF1iPWBmXi5OaSZ7VGFhQCYuN1plSEduLi8vZipSLCkveXMsQnx4YypSQlp9U3A8JmI+'@;
put 'bnlEUDBgLnU1eT9ZaXdTImx1X1JgVCtBcUImSGNtS105Zz0/eFQ2UWBaan47Xz41PCtHXy8rZ0U1MSlDemJgUUcjWnlneWFQTjMybUA/Q2tQKCVVaXo9XV1VdlVgfD9pQTgjOjE1ZE9NKSVULzB0dE1LSihQOHR2ckFzKU1BX2k7eCo8eThWaWZDTUIycDBKVDEya1Y6I0tlSS9JOSxJRjo+Lykv'@;
put 'JTF+JiRIM1plSHl9PmByOipbM2QoZlcyS0VbdU5iT3Z5fjpiKm9TKT1TQjl7YzchJEZSb0x4V3VvOHIrWGFpWX5YcjF2dnwvZitzJCs4Yns3ZlUuM3AhWi9YNS9TemIxSDMiSmZoISNSX0Y0SldfeHNVV1A5RCpKR2ViYkhkLllITlR6JTFPUTBNfkglaT99SCE1MUN0VDprWX01ND9fRSoxe09N'@;
put 'RVllPyUxZDAzJWs1NlkjIi9RQUN3N3RbSlg3fEVkeEZrMzVYViFZd2hWJlFgfW1YYHIrOm5Sak9PSmxVRTskJTxGPStnWnR6S0xsfWgsa34+WHRUNW1sPzZDfjMsMSM+Z2k+JDJCVzhZcys4YzZdKDMjdVlyPkJDWEVAIzJmX0lATCUjMlVWNStxbyJbNXYvVSFxMyRBXyRAI3F7cHlQRmw0Xld3'@;
put 'PysiY0lxVX5aUmk8dyU9UTkqIV1RXnFTO0htazs9SVVXI2kyXm8uW0xLRFMpM0pJQ1g8QFBubVhYJHN6diRPPTBtVVZWOSY7SDpFTC90WTV2b1BLOjhzUEk8fntiekleeDhyYVEjdy4iTWZ9S286KTooPz5ePmZmV0MoaWsrJnxEbS9KdEpDbiVLIj9CPlh5IzpfYGckeSsyfkZ2fHlNZEt1biV3'@;
put 'LixsRyN2LkhicUNLSk8hNV9IV3pwJmI7KD5KbWU7ak5tTWlySDlVN2ROI0JEZUI3NDEzWUMsOT50WikuLFR+WD50T2puOElXfGtQYmlaTzcxUDxaVl84TCE8JXxrT3k4e1RZM3tBWDk2YU5pWU9oKTNIVlZpU3YvaV43S2c3Oz42dTw1QGJpdDRLKk0rZ0khI2p4PEtifWBmZmtRZnFQZXFwYWlL'@;
put 'UXtSe08hbU1zOnxbP01kWGVVdjlaRms1cVJKWzc7WDkuM3BmN0JKTWF4JkdDVkxUZ2czaDZHIk4zR3pifkBfT20kaHhCJTskb2gwK3Z1SVBHdU0wdlEmWUUsdTJtaFhdezVgWDx9e0lsPiJQVDVIZi4se1crVUsmPCZ3czFdVD4zRSEuPlVHQGElcHBDOFNsVjtIKmkmMTJuLjU0XWwmMG1sT3Ux'@;
put 'b1NWdG02Y3dTWC49QXdTazhKR0gwSTdHaUlKMXR0Y1ZLNzh3UCkjRGxpWy5reSpyPVNYUy59dURlZzA7MCtUX0RvbHEmR15ZUlk6cmhTWyVjYXB3SipsbDpvOF19UlBdfUZURDJ4ITs3VFlUeXRLdWxzMjJELlBUYXw6VzhSbXwmSy55YFRtVWV6Z2hTZi51ejBpZ2xFZT00a1IvSCE/JnBheXVt'@;
put 'aHhDW2w6PyEvWSIwZ11KRjBiMGB3W3cuTVtANlYoU2xBcVF1bSpQcXZYcGBvUEMrTCtBUC9haV5ibkVlKnxwc2FAPz1xWEF8VXBLRVBDOkw0KkF6b2tbWG85RVY0LyV7I3pgWF9hQT1CSVBHVWAjWUZTWzc6Qi5BKjNyJjpFYnlPTWYxTjZibFg3RzcoeGZ1QmtiOnN1U2tRWjE2Yjpnb0NsMWEo'@;
put 'JSYpJFNoZC9lO3hRSVIoTk1rL2ZMZy90aGUmWWkrYTVaQ3NBIVlqSC96bCk5d01VUSx4S1UwNmxZRjlbakB4dTA3cEdAfDhTTSFtVT1uUCFPTkVNTHU/RWB2VXU/OHRBKlN4aHc7XSxwLFNQOXFfZC8jSCFhaXMid34/X195SWkscSUlY3RHP0tdciExUkMzQDgsVno+PEZRUDFvIzI/Ljo8RUEw'@;
put 'KCUpYUxiKFY+O0l7SzNnMn5wRUMiXz8hJmhwSGI0OCFHQFpOQlQ9I1YiUzticUdUUC55JXNRRSF9b1lhTTxoLytpKT0zOXwwbXkxb3gsbFtTKzpidX1UTmBHanFnaStbeDJweGZSREp8KWlfP206UzYqcXh9JEZsQTc7O1FiM0UuI2c0I1d6L0IycjBWeWkmZ3pbWTQ2dlNjWTxASkswelNjK2Em'@;
put 'S213Ry50NkgoNjtfe2tUJnZJYlFeN1hJflFFUjRHLCp3N2QyPG55dyE+RTRfRyU1M3IrUDBJbiZ+VWoiYVZTanxdJWohTTR9VnAmU313KUwvc0JFN006V2lDUl0wdGVLWVMzJmdZVHtgI0kiN1lSOG1CTXN8S0IiI2VSa2srZjlePDtgS04/QklBQjBNUStiSUVqOzszWWs3Nn4pS0EvPG04O3N5'@;
put 'fTJbRCRDM3MsJX5FTGgrcyYlU3lBSGdad2MuI2wlZUxGbEdgUCMmIkZgJWBgZkBuLEB5Tns9dGFBc3ZibVtuOVQvem9rTDBVLyNEKkZAPyVgMWdwI0tAeGNJdi8qK0shYmJ+KFdtTU96blc4a151bWxzM1h+eT9VbCYvMztsUTMpN2g4MWJOMyk2fHw9XyQ+ZCojPSJFYDZBQHJmQWJiJlQrSDt+'@;
put 'U1p8R1dIZ0A6fnhKNHssUzVTbDFoPmFCdEtCT3Zyb3N8Iip7TDdSYj8/VSVALzlyR1s5bCpEdG48fTpbbF56OjFqWS5vaXVsJUFqMHMrJVtofnIoaDo5ciwpbCllbnc0N3xlIjtjdGJTYG5yZXN8PStbUnRgQVJKUHMxNjk+eHt4KjBpOSNKbko0dF90NiojNzVQIzdkRUhVZEJ2PXw5YU8pbWM5'@;
put 'UjFRUHpNJC5gZilsbH1vYGUuNTtKeWhVLF0/a0VlZGtIVzhwIlYqcXBmSllJcTRTbn0uMklHbXxrLC8jYFhybS84dzVeVSpvM1Z0UUB8NSxpYlR7OztifTc9OGw7aUF7V1VffGN1fnR0dXt3dlRrNGRVPzUlQ2BLcVVYaEc6bFghQD1tcytHezhQW0VtTGlkcXR7cmJgJGp1KndDO0dDfnJ9fXE+'@;
put 'K297LF4wTVYoYyslalBQfkR8P3ZRZDhbOHlzbDdkU1kqd286VG5hcWJlNTFFJWtld0Y6LlM8Xit9cnIkcXs9TlsrcXB6WXFiTzBvPzZDO3VoY0QkM3hLRDh3fClTc35lOTl8YyVlOWRYYlRSNiI9bmAmQT5BRU1lTjA5fSkwYF8kYEN1S2xKdjsqMVBoem9lI3BUbCk3XUI5bHBoK0wmZjF+fHp6'@;
put 'RHk5OGg+KHpwI0soQWUhXixkdiRWciE5QT0kd2lgXn5ZdT1WOExKYFZyPEAyfW5RVlNJZFhzQnBWSjNofSx4VCR2d2NoXSYjfiY/JTw9d3cjRkVqfXhsSE1aMF5+ZT13dlM0STJ8XWwwWkJCbVJ7X0s3fm18aSo9akJYbl9wWX41Vlk9REBgYmVMcCZWTE1nLkZJJmxeb3FsPTx2ITtveUhhUmp1'@;
put 'azV3aWQ4I2hiKnlMWj4hOWxiYjprengwSngjaDdMNmdHbVJGfEcreThNeTY1MVsiVEpmTXJJZm9Id0k8dlF6dypwUl97TCgyVmBSKUpdSjRJMnxebE1abVI+PDNkUz4xJW0kfXk2QDtMNUt+P1J3YSFOOGVtez5JfStpMGpMdDNYb2t+WkJeSEVII3xXVSZrVWIqTHp5OWlqN2F0TEp0WXJVZEAr'@;
put 'azo9MWZMSVl3RShuMWtreFBHcGdFXz52OHA5ITAhcXBrKkhHaVYhKkl3WCErM305cDImM3VmcCw8cSUlT1ZqejhbOy41ZXJUNUVCWXZPdiYyKH5lMHBfclUpVF8qYS9pNlExYDozPV9jYGNIbj4xS1pGJlEyPT5tW3AjS1pGOEEveXs9SGlhW3x0QXpzLkFJfnVsMDlEKEMmRzdaTThRfGFUKSUq'@;
put 'blIsfS5ES1J6PytAc1R6WnxNOkdjWVB9Rz84K0BnckZgYjtqMEhVWmpbeywkXXpeOUJffjV8O0RWSUdNM0tHMEZndXxhbVJsW1FqUTBsIiF3Ym8xSmNqYXAhVS40aCY/JX1JVWUkbVRYcE9qcFZZOTh7Y295M1E1M1FoaUljRiF3QngzYS5EcykvWHJCQy92bTpod2Isc2tSJmdRYEcoTXltPVJ5'@;
put 'PHdETWZIdVoyPTsuWytmOCkuVTdGIVdTZnUiVlIoOHlZVnNhUHIySyEqKSk3Qj5WO3hjPzJROWNLP2IhPVEkPUJYdkAuUy9zdm07QztvOEVTdntxVi94L2xaNWRUamIyR1YjMDdwOmoyI2hvXjxtJWg+cX1TZy5dSTc/IlIzPmd5KiksP19YLEcueFBmaTxhOE5CMzUsOkpVbSVXaFAqUDprb1pv'@;
put 'WzlWJl4xIyhGK15LZzcmcmVOLnQ4TF9hMiI7SUZuayVCdExIWj9YeHlhSy52ZyR3YzZCaFBBXmFJPk0yJkFOdnZtK1dPUV5vUF98MTUmTU5JPk00JitMZFgrSTlEMEdCL0dfJEYlR3l9UEJtUnUvOiQ3UzNRYzdTZTRYQzpYMX46aH05S2NyYTxvUl1zKyJKaE5zNUAkI0x0MCR+eTZaU0A4aWda'@;
put 'eWVyPUl9eGckI2NXbW8jISJyNEBkR3BXcHRQVGQvMzR1PSVRUTpdN1NnOSJsfi59UURAYz12TUxuOVR9QER6UE9uMmBWbmwxcTtgNyI7fl55P2tga0xVbjI1akJUQkpMYz4yRHo/O1ExJFB3UGciP2JIYE1gZEwvPWliYGUwMT05UWdyMC47NmI1dnZAOjFLKlhzW3AmZz9zYy99cXt0W1twSG90'@;
put 'L0Y4ZXAyJigwNVB4W3dNUXkpb3F9IjwjNmxIekxqVkE2PXAjQTIwZjl2KUkydjtdenBdUy53UFkkV2A/M0AlMiNRaHBeW1h4ckkkKk02MlEvT1o7S2g5bG9nPW11OypAfSRXLnNgXVM5RkpVKCghZjpuSWE2LzZqbzc5TCg6bWA5c2U+Ul9gSSFKKlk8aT53eTl6VEg8SFpALjdsPVtERmc5XmIk'@;
put 'L3NPeVUxaiRfNiY2ZVVVKCxsSzppdjp+dlslRUteZmlOaUddO2lRUlM8O2kjc3Y9XzcpMytKXSpxcXIzLntNJH0lLFQ8e3hrN2VsWm5iPWhGTCs2Oko6Sl9POmF4NEpDJGM3WjAkNTliaE9nVGI6MWQ/blQyVG9MKk5CRDlGZkxmSEFEaC51bjM4R1pJQVQ/Q204a1FNUn0kQ1JNLDwvVyZvMXkk'@;
put 'clVUUDN4JmM+P2dWXUF8JnE6QzByKk4pcEpgVH54RlBVYU48RTA4c357dXZPITY1W1ViJn08aSpiWk08RGkzcEdSRiMiXWdCPjc5aWh6PEo6bns5MHAjV3JKYX1DNFdQfjB5WldUTmxFfiYpbSl0N0ZNK1JIem4kPUl9YEV9QGs/e146WlhybVIyYmEsJFhJfUFeUVpiK0MvPUNDY0YlTTJfUWtJ'@;
put 'c2AzIyIlS3IvOFdXVztWZ1FmQGBuOWp3USNrJng4SzttZCE2aGEoPFcoVkshOVU9PWc7IVI2eV5HKFczRjQhYldnMnNRIz9YSj99eXNeWGgmSWNGVmIvTUp9PnteLFkoJCtXPFpjW2lrMXZ0Zy9lPSJzemVJKFRVbks2YTdbY151VT1GMzNQITwlcEU+SEw5KDNtWiNXL14uUG01UyN9JFsjZyh6'@;
put 'Yi8zZ0FhYyUrczplaD5nQFNJSyMvMF5iMXl7OlRjYjJZPkA2bnwvJi46XmFJQF9ucHgpVGlEYFM6N0NOeXcxWFZGcFEpflQ8YlMrSmFhLD06STo5OmwkNFJEOW1RUyx1LlsqamRWJjNqbSo0Ul8mJCY2XlQmVzh4W11mLl1DUUBkUColZV1PQVlYVFZ0Q0N5WTV1fHVRVzNQXyRjeElIKHZ8dVNR'@;
put 'WyY4SS9FSDhnR0t5T0guQUlZLkwwYXtUP1tTTV8hZTFDO0FSTmcocng1JTFWbVRVRzlIal9bUnNkVXhvZUNqVWNgVDF+bT49cTwpTTc1N3IoamZ0Z2I/Z2tPfDpCWmVmTmF8OEIzTV58JWJJIjIkST1paHhPNUF4ZzIhZUZeKiRaWUYsMkBaTyg7eU06UXFnL2JrWzl3OVI7cXRveCZUVTRwXTFp'@;
put 'QjVnW2lnb2pEanRmc21MIVdodCYiJiJsJWJURF09Nl5aPFA6ZHg3L1srdGIxQmN2JVQ7N2UqZitaWjA8TVkqQVFpZUQvJkxzPEw5JUNhJUR2WDVBb0IuQGdBcTlCdVFrUUQ4e3lKUShPdSkpZ0VlWzZ7VFYweFhHJS9MV0M4XWx4RT0+NCw8XTghbUU1bF1tYzJbOUB1aDFRISgoTGd0NUlRenBM'@;
put 'JCovNmU1VnBKT0dNVnlwIy45MzBsKEBmVHZbZFo0N0JkWE9ZKXI8Il9QQnpjWFYodkUvVmdQfFZnMFRMNXBxSncyQD1EKiU3YShCOUhzQUk4bmZrN3t8SDVpYkBoMnJbZmMjZzdqVzomOGUzTCosKyFxd0goWUF9OiE/QHJ2dDJdYyR1YCo4aHhQRilwNm9PUzwmUXNVUjxVX3tFVXF8RHtAJl1K'@;
put 'UT4mPmN+SXovU3pYT0BJQDg/Oj0/LnxONWd7SjtOUDhqJl0iTUMqR3ZkSmRePyhtfSMoM1laPGM4cFQsISthVihPUDlIKilrLi83QiR4R1VAMG98ejtEVyNFYHVwcUdTeSRpNnUpWlAzPkEhSisoUy93V2dJdnYiPmVMMiFOKWFAU0Nva3NvaUcqLmlpMjBLayJtJFg3aUhzIiU6JWoybjxPbjBN'@;
put 'cDs0OlNgXiZvcC83QiRiTUM6UmouMT0mT212aTM/Yi5YZVN7RE4xezJ0RmJYLz9oW1FrcyVSZG1FITpJQzBNN0xvL2tpamZebmMmTDpbLFleO2xSNGQ4dzh7QTskU25ae1VTN3djYFBCd1tMLmIxX1FTIzp6cU5FfiJlPVtkbWVETmx6PWlub01JXnQ4JF92Nklsc3lMcFNCJGRpek9WMm9vWVFy'@;
put 'MVttaFZDV1NmV1BRezQuSzpZOVJRd31mbXJWQFg/ekReMTxBVVYxbHUpeDlGRHlkW215UlNgO3MkPmwvTyN+eGQyRUBCSFkzbDthOToxRS9PZXhBTDFLeWQ7T3diRy44YXIsIjwkYH1tbkNVfmp2cWZvR1VkSmg9VnxSMC49PUNvNUIhUm45YUNiIztHOil2YTomT0FFOWBNUCFQT2d6SThoWjo0'@;
put 'RUtSRDBHKCtPTjFVR2N+Yix4bDAyIWpUL1c3IT5NYTkpRXJZMGI2QEppLiFEQkUkSjg2dSlXcV85PVIpMT17bCIkRng4MCE3X2tYR0p4QEA8WWVPIWBoOD0pTVUvNFkjdWF7OFMsSHdwWzgxOWssNmd7VSZve0dmIzR0dXFoWjpwU2pGZTcmLih6VCRdViMvR15qM1U5eWlOOlF7eSomWU9COiY4'@;
put 'Mmd9LntITmozMikvUnU/T0FfTml4TSw7VilqPHJkPlFZPmleZlFZdmBGYFgzVF9YZisxMTpQfShqKGMoKnx6eXV1UiJVIyp+XmAxI110LHs8XX48d349fW1FPFBhVGlTTWIyL1VydV1WfikpLC4iczFfUm8/ZiEkbVBiPCg6VV5MInghNzE8M25keFpWRW9vPnkkWS8kZ3Y/P2ovTXE2QFR9Z2xf'@;
put 'K2VJTURxRE5nW3ArVF04e0ZremsvW1M9UXRefEgsYExnNEpGSGhxQjNbc0YqfiRVSi4sTXZaJUpXczohezlPNExzYXZuYCRjXyRlWip+aXUwRlp9aFhGV0xGZEtlViN2R2EoJiVnL2szflBsdVNoL0JEMEwoTHk+KENJWnV5PGl7V35hTn5mOHcvPC9vWSZncyR7OWA2UEcwKiksRyEoSVIjKEhF'@;
put 'TzZkc0plfTJKRWpTUFphNTAhZT9lcFZxaCFOLFgvOXlldX4oJk4wUjc6YD9eSzVBX2xCUWN1dXk1V0V6VzhVdk9wO2tHWWo2bF4kez9EVS9YKCtfazNfOWJvTGdzcj1Mc0BxTW5AQl58Ris1fTBIeDE/PntvW3wwKz18YUN2ejN3IjFPTXBMSj4rMD1HZTsjNEdhWCV9QDBxMmY9SkhZTDJLKGJ0'@;
put 'KztvdFdqPjN8dTh2TXdkLmtOalVpVVFHdTswL09gXjdQczQiLG94Slo+VjojSSgkWUR0fjtDPDUoQyQwcmlWdj5CM08xaSE5OXp2dEIwTytQbXlRIVI4WT5Ne2I5WlNzcz8mfk4/P0ZYUGEvTm9PVihyIllwclRJO000Wn1dLFdJTXJmRVd5Tnl1N1spYW1hKyguJnV3Tno/Z35kTW00JXghQkNT'@;
put 'VkgsTiV1d1tMKXA/RlcpQU9bNXREZG94Z3YhKkl3WGFaTCJ1WUNFUzJ9ciYkUEdNInJNPVghYj1gQ3kkcGQhKDlpOlEpV0BpMzRSW2xuL2oxbywlakJAbmYsS0B9UzR3MT9pNltdVGJPPCNSY3t6VFgmSFBgKXVzRV9xPEYqVXUvP008YjxYPFJuemUmO2A6Tl1xW1RlL1gpa3R5e35WbSVpKUt0'@;
put 'RmBGMWZjUGU1Vk5PXntPbG5IQzUmPUt8KXVseHZHUis6TClxTTlzTi56S3xwQmVAVSk+QTJFPWRJS2kqb2RjaDhnZ3tfUzc7U2VUdzc3R0s7MTd1NTZpZHhwPD9jcyI8dDFRXTxMWDBMRDhAcTprT3Qwb3RfcixLfEckLi8ma1pINl80bmE/L2k/V3ZreGkqIix9dT1nNDZXaTpXbjxgKGN3JSlT'@;
put 'VlVCK3Y1WTVBQjR7dXVeIlc7UFNvPGUoK21Van01KChgPlVQI2NtfE9iPXFWYVQuJHI6byZFOUsvW0hpVUhSQCZ+dUs1YEtNQnxGVlg7TUkwMUk1NCk1KEBPaW4mMWlhTjddZE5pPUFHVlgkLm5+WHA2LDx+KykwQnslPiVuTWpKd1JCO0VxKGI6XjFiNFdmI11GQTZFWjwmc31BcFVsWCRmInVV'@;
put 'UyVvfm9KfTEmIldUejJkXS59SiwqPXlfWDNsJHwpPGNIaG5DXW8sWDFmbEw6fW5bS35hZz5jVn1YYjo0eis9O3JZeDZ0VXRpWXJ9ZSExa3M4WGlqM3ZZe0V9SFhpakFYe1F7dWIkQU5fPXVHK0xRQip0JV9OdkVMSGgsQU8oP3NSVEMxam4ja1JtPmg/cTZmTkoyW3JiJWo3bls+bl5iMU92Kmls'@;
put 'U2d5SXk/O3NNIzhlbDBTSXczayQ5X1RsQjA/cFYyfH1lTyEmaGZZXUNvNyJob2BwVyx1K2UlZ2gvek1DdyFNOTQ/Q3xCPEM6T3ZPdiY6dUx6QFpqYSxecVgoV2JAekliZyF1PCQvaDg1KjBrRTBCR2tHbVBWeFRWQEdqWSpDdGlsOHImJDAodSQ3T2VwclRFSTdOfk41XzgzUSkqNCpPelFoJFBU'@;
put 'TUw9IiJwdDJDe3xwMHBCJjw5WGxtdFowTV5KXk9UPlNiaUghYDlCX3h5MSk6U3B8YCV0dSJoNmw9RHRAKENhXzBfaSldQkdkKkQiX1Rffjw6STVEb200aWkyTWIqOls/QGh4aW1FdkE4QEs/QGhCNjFScUNtdDd1dDglaExmUm07VVQoaF04IyYwJUQ1SHZeOyhefiJBIl5mZCkzI2V7ZTl1blg/'@;
put 'ZGJiYilFYT1kZE5IKi8vaEk4eW5vL0NfKkw0diF0SlU3UnN0Vld8RDx7SF01YmJ4IW59WU1BJlFSe3c4T3pSSDxKS2c1WmMoNHwsQiMpUHNOSDZZMDJuRFlMP3xlTz9Adj0pO0xAKkdESFUyU2tAejEoNWBrXylnKV5WRWEsWSZfXSJVX1JvU11WbGhabVddQ08/Ni9DISZqMG4lbkZhfTZCPWBu'@;
put 'YjUmZEdrcGVVbSMqW0llcmx5cXE9LlgkbHF+NFJvQXxhfUtDTnp4UWA2OkpkP0hfY005X0RPfis3dll1bmN5SUJObFdddCZ0On5oLChXczBQSjtCeFlmMGo9fWVLN1RfVF8pM0x8OWxRWmdrUVRIYSlGPWFkUlsqdWx3UHQ/P0NkIVF2IXZQZnMpL21lezx6dHEkVWYjdT52O35ASUhCbTZ1KkFA'@;
put 'T11kSm4hPzQwLmZOayVQYV55MT1Pa0JDbWBXcWtwbEtKP2ZxMG1qOnNRLiQsKy9mKlMsQyt7KEk+b3VuUVRQZD8uS1A8Ql4xSkNUKW48aCl+aFthJjhPZEt3dWZ8M1FfRVNNdHtuI1o5encscmlqdU1EZCF+b3wmOz9dOHpJPm82YFheRD9FQnpASWRlKkZabyY+b0p0QlQ/SVU/cGtkN2xYSGM6'@;
put 'TWlUTDF9fFRMUlU+S35rYk49QlFnNWU2ZjpSeDp+Kk1XYjc0Y11HQ307ImV5e0JPW0hAIiM/W1k1NXFfJClVeT16TUFJQXFTSlNZVlJ0ZkxlS1lJdzhffnVXNnkyUSxRK2hfKl5hXjUpcG51T0Zecy5daX1ESzQzY3BjQ2B8YUV3OE8kYG0wW1lTbkN1fFNtZSxOZThXRVtdJWtAcTwjNyxRbWFX'@;
put 'TVEzcngrPH5nUy9bPCkhVkhnOHIzZ1o3KmoqYDlzPW9bUGVqdTN1bW4wNUAzO29SX0pRcVsqI0wuSzh6NTddSDs0eT4kRDQ8fDRwa1RSSH0vcmpFYjk6dzF1RWNQYDMrPnpvM0ZDUjp9VVcqNDtyfmJYbCFOOGBHPEx8OkcoSUVqWUZzJTxuKDVVb086PjdZc2VdQ0NISFlaaHg8UU9LX0xaQ1BY'@;
put 'aGZxMDxgYHcjYnpwUXg7MkFpUnQyOnI6WGU1MmBkNz4zTGl1dkxgRE92eXAlXV5ZdztTI2lyMyl6KGBeNCk+IntyWXpmNDF8JFg3bS8vfEc5eyJTQFA3WTNCVVUkaSNIc0s2bC9DZXxhfDhHW0JCPS9GNypVeUxrSytJJmtINHdYUHZoTyFfSH1wSytOXkFhb3hZVEhaZUxZRjdFaUhmTVdbbVRm'@;
put 'dCZWOEBzLzxNLzs4citMSj50MXZMIUlaeE9HWlg7Szp8UlZgeT1aMmVMUHJvZyNOP2xGZUhsNCY1XyFITFVTMi9bWzMrdDYwQkxefWtxTDArVXBYLDdSNHoxMU9CTHp4UWBGX2s9fHV1a3dPVDxobXh0SzhQK0RgSnhrSFc/QkxiXkxRUV9FIT1YbWtzZmpQRG9vciomM2J2RzAuYjBGPTM5bEpd'@;
put 'ejg0OTw8cF0lXSYleHw1L1VTUUU4T3lSSGYzKSZTWko3eDIpPVosRixVcnU5X0tAXT1RfT9fTDleVVgme0tVfkw6cW1nWXhPd197Rj11Z3JMZkQ9ejlhJnJFN1FKPDt5OV84Iz9HNklsUGQkWlkhLzhPVWd0PG4kW181QyR9fXhafUJuaFB1YEg3QTxlVjE7TmUxMGUwamp6U0ZQTzYzZmFJNFtX'@;
put 'eTRwJn5yNj5qInQ+NSJtNGYjUkImeSgvJWdLT0k7VEV5NXtYaDciN2Vob190KVB9fTlvJXAvL2EuXjkqfDF3LnlmIWZleThPR0hYYHVPIV1rblgwVDNxOn1HOns3TVFsezVaMjQ4cVJnX3BMSyxBL0hORHE4Ml8wU2Nva01tUn4oMG0qLH0oOExSdUE6QFpfI3xWL1BVUzxEazBZaDtPLEExTnBA'@;
put 'Vm07OlRwOTF4aUR+Wz4qZCZxT1NCRTRDUiUuVk5JQiNxNm1vP31OWCE3aHVROmdydUlpUH1meDZ3WyZ8QmJnMShmN2FUXzo7KzZ2cm5vQHhuMUEjL21FL0pIXWZsR30jR2RTSlBHXVdhfWAhZTJsXlFmYzdyMVVHaEYkcCRYK2BUSSVYOiVqITgmVn0kMFRGIVsvL1c1PzwiPkJZZlBhZSpyeHs3'@;
put 'LFlNP29MQHI+JWU9QF42ckovVXlkQDs/XUI7Q0BpUXVGTCFhcXM/WiRzSDdZNkJCIWB2SmBVPkMufGVrZ1QiR0A2MUkvSEdFdSgseE0oLGdeZkZ2VjF+XjMxPTQ0bmRhcCk9MG1aYHApdE97UkVmRzs1Sj42MSVAcWpsfTtCYnJ1MEltUUk6S1lWKU8la1hGY3BHXlZ0MEVad1kicXAlLzBrK0la'@;
put 'ZUpocTxmYm9GYXhiMUlDPHBGVyQpIWNoKDxjKmV9TVdAWCUrVk9UfXNUXTl2eU1SYW4vTXQ4V3x9ZVtrLlFCbXNFc2lxWlhpLCEiWHBnPmglUHdfdkxDPGNjSHN8b2pTJDd+ZUpiUUAoRE04fDVEQWc7QnVzKTwlIyI4cFoiUGFvSjs1WVFTQStYWVJ1N14jeTtfeltXMjR0Rk1uOz5RUlo+WWYw'@;
put 'fDhPKXxoSko2NiEuJXE0bypVTCl8Yjc3Xlk+SE5haU06OTYkTV0pLCtpMHl5SV5ReH1AMl0uS0haNWxUQ20vK2hbLj9qYkhzI2BsfCx1ekppTDlzbDJGc08lTGJBOGVIcmtGKyFUKzUvcj9UIlYrNHFkUDZQWSFHbThDLm0vbkFsWk9kN3phTDNLdWhGNUAyQEdrIUpGdj4oOWkmTmY6TjlgQ1E7'@;
put 'MHxVTDNULkg3YlVTXjAzWm9dQEQ4OFZaIjYpQH5IfE1qfSJTJjQxI2FkVHZPK2BjZzBobXZ4UlRwcyRzcS56NnJWOkw0bzkzQktyVjo7PGBnSmVkRnVNcypRT09rZD06e0xBYXdOfFoiR00lPmksOjxnVzVFcktmPC4jWU0lfU1eWjJ9YGgzMlBCXTVFci5YRVtjO2lOSUl5UllGdVEvUSJONmRg'@;
put 'QCxhSGZ+dEwvUl8je01LVy9fN1BgcVchNzYreiQhN3w1dGBNYE1AKDQua1o+Wi4zLkFXc2hkLG5UeXdgYHF4fSI2VUpeKSpKNVczNiZEek5oPnl6dnM4V1NPR2Vva3R1eXwxTGI2O3V6UnR6ekZKIWJTUTFIRmwsblg5MXVmeXMubXtmTFpqKjl2M3RkUFooOUlOZEEpeShBYSlvKTp3X0A7XUZ2'@;
put 'PWdsLGl2b3NDeUl7IUtCME41bmdBLmlVYi5UU1s5eDE5b3crJU1uejFkaypRaWdjJCVXKiVZVVdTU344WSNYTlhMNGMhVTtyJT1sdmQjdnQyUXVFXXdgKGBCOmtCXjFIZmlzWCMqbV5BTTxtKlopSXJSXm9odlUzKipFWjBpPk81TDkqaG1FN2NtISVxcCNoaXshJWVoMWkzMj44X1Z7I2h8S2dL'@;
put 'OyI7cXglU1R6eyhyfmxFLlhNR05SaGU/bEdyOSZsRGYmNDhOWXxqZXhINjImfEI4aCRKdEhTdlRlYjhyaGRPTD4zMXxxSkh3UjhLU3k0a292dls/dHYySWtuY0NQZDd9bU1ARkQvTU0+VToxWiRNXmhFRz1CSCglXVJ3Tl88aDhZLzVRYyJdNlRZUV5OTUlhYF5LIldbMDF3JTx0MUcwdHtnJnE8'@;
put 'PnRYIXRbYTN6WEFsfWhbSHk/YnlXIkowQyR4VXd7VSg0Y1RZOmhxcGJ5ZF5TKTY/TH1sXVBiMCg8Jjg5WGJ4OVBrMHAvTjIxW2csRHt1RHNXTVR9SUpPdWJEUHJaYDpvdixAS2t9RnYkZiN9dSthcyNVRFMlcHtMeHEieW9Zbi98OXUiVVg2NnI7a0RyYng5UHV9Q0AwZXRNWXMsJWo7WFZbWTA/'@;
put 'LyNHYmw1STE0VCljWUd2Z0ZXUCwwelkyckVtJFk5N3pPdTBhciZnUCEibT97IXttL0lxcyZ4eyQ6fFtYPTxzQE1mfktGZ34qMEFwMW4zdzg1QFBBKVNSOUR9OWh7TXx1JS5QVEwvO3wpJWI7Vjw3Yzh7VFBLVVNpWFFObHw2Y2k7NUdZPmxdZ3s0Y05SanE/Syx7enJYSSJvL00peW5mTyFseWFz'@;
put 'bmBtaW85VUlyX0hTNjRAJVN+NTUiYHE0X2tvMm18L2pvLDxnQ355Yyg1TyYlNUx3WD44WztgVTEkUGdwcztVMVswJiU3am5RbjxtJndlMGwlZW9FdUhdXX17YyQ7bVFbMG0qek44amRlMmlHKzV8PHtbbnd4XmtaNmFYfm1tNVFieTxpXlBbLjN5RmxGaiE3Zk9jKTJRfkoqTXs8fEhGektLNXc/'@;
put 'KFkmaUclTXpafUN8b3wpPmAzMHYjc2dRWVN+Rnk3T1MzclldV2BPWG5BVStkPV8hR1lESmJCfEA/JmVPJEJZMjxqYl4hIjB4Y2t7ZiVtNVkqVGkpUnZGQFhNOyM6bnFYPi5XeVdjUExITyhfYk0pa2QoWVAxalZ3cT5xU1pZM1U3PkBBPz4wIl4kZXVIXzJ3ZU5lZyZ7biVQTSF7dVUoaGQkUEdk'@;
put 'bGErPGhtWmdPXXhsdyFIcCtTWWZ4VVtmXT9uZiYlaDM9d3VGdCpLaV5zWV1oSENjQkx0M2lraz9dTSlVfDwiJTZjSGYoK0U6bTgsJTU5IVElXSFjcjlWUUpdbUl5I18wW24sdDUvP1pNIS8vU19zKTchLyplJitAPEx3PEllIWpdPXx3UW8lZ1hwc2VpcTA4XTtUcFp1MF9IfFI4JTUlb2w+KFYj'@;
put 'VUptZ0UkI2hgVisoQEA2dTEwP20/ZzA7K0d7OTg6ZyFvbzltPTpwczsyVlEjfjJeSUJQSmluY3Uva0AwWVk3fkFgQDp6WDJ0Mn4vZFU5d100fSNBZSZIW10lYCNLJDB0cnxQQzhwUGh8KVg4PG19QzRnQkB7dyNGVytvZW4kPWxxZEszQ0lQITkoX3EmbCVreyQ2JTF6ODVAIXBpckNwQzh0ZVh9'@;
put 'NnVrTz8vci84OTsuXjxEeFMjNEcvOFNzc2QrZUlQRHwwZSVjKD9VVCQwbF5QdytlYCQyNFk1cyQob1YiOnBZWGRPXi5RbixoUiltP1Y7KzUvV0IkR19MZSFIcjE5US8qc2U+Jmw7SyNxI1MocnsjXXpkJCFuditjYi8hL2pMQUF2KEtPQyJ3RF9KdFpIekd1ZitQUDg9PEI9SiIrQE88THFgPVo3'@;
put 'MWxYJSpdeTx2SUFBQUFBbEJAUVowdip9OGJwP11eaSFdNX4pMExXT0BUTT18YjkpbXFQe2RBWUF4UmZNQUVnXzdEUk44Z3h7Rm9VYjJ9NX0lR28jOHlJXjd+SzVIJmhzRjNxLkNpWVFbOG9JY2IlZixPQl8wOypVbEB7Tmc1Y2VWSExXMGssekZIV0x2bUk9dHNuZ09FUjZpP1BQMUplbnBPLjch'@;
put 'LiIoWlNLUm8yIWZuLlhRZXpQJGF8OTpxUGdSQ0EwKzV7IUxBRDRoK3diaEhDUz9FKG12dCt2MVZXdFQyOih4akwjRH1pUXQ9SVtMeWRnQnMqSSRhbmIyXj9YVj1EbnUmTDZ1UTxObTlJUF41JHpifUUiM2NbSH12N1pbZnh4Z0hySTVVYzJyakNuKX59fTJMSyZKTDBtMTRwUEteeU94PHtSVko4'@;
put 'WVpSYmRdfSNUVSYmNXlST0k/P1guNmw7RHdvQVVUUmNwezFQPV9XWHZHSmE9T0dXLnVwfl5ALn0hJHF3ZGttIip7MVEpIVs/YEA0ZGNkW0h3I0p2TWkuVmVmSnpKWjFHSD1XU1RXcjlrPCtLSHxfPyFYJWJpJDB3Sz9iKXhjRXgsb0dfbGwoa3cxKEtwQFRkMCx9dSNJS050KzBaRktJT0FnTDdU'@;
put 'LmtPZzl6UGozUjlLYX1YYTRVNlp4ND1FZX5EPiMsSFZRX1ROemZSL3I+KThKbE81e0JfXVpiSk1bSFMra2QzO1ZnJTJJb3FMRmY8a2osMjs1M19+XV0oQ1NXb0BpMGIkc3AqYGJxP0JDQ1FHcF9aJXAlSE85dHgpIWR9Y1QyT3tafUohPVAqKjBfNGtjeV1TVEokLmhaPW5JKyZBY1AobzZUTEtv'@;
put 'SEZIVC5qNDNYWSMoTzQ9JXRrZk9DKS5IdTZDeUllI314eUlLNkg3LGNRRnlHRlI9VTdQPHlqR2hnIkdXcVM5QSptXiV4ejpHYmhRVy9MO1FvZ3xvfSU0MWJ+c11gN1ZrQmlwdEJrUWRJeH1IQjY0LmNeKVhaN3krL2ppNmA8P3pHdFspNWRYNiF4OWI+T0dfM0I1P1BtNWd7TlA+elZjY343TlBk'@;
put 'KWskXWw6ZEU3bV1pKDhtK3pOOT9de3F3PTJGemUlbyRaSDRZczxwfUoqJVJVL10kMXZvQDhaQ35oezczbUZvZF13S0ZrPEZebzBvNz5AdDRdREVDazZzcnVHJS9JYiNIMjQqMHlkcl5JNDU+NllEMzlaW3Y6Zk5qKUYkVXFfTXVdbEt1Tz8hXlFtdztdQzg5Lmh4cykhZHppY15ONE4mbStKYXtW'@;
put 'TDY2V0xgSGVUVVdoIVB0cUR0WVszfiVsbV9wb3U9TGBiYl5ZTj4qaGRJPztSfW8wWiR5aTFJQzVZRXYjI1hud2FAdyU1XnFdP2VLK1p7SDwvR0lwJC54eTRbPH46ckxuMFpKZWZpP14jVXUkS0BWanlAWF9xbVY6Pjx+c0IzKHc6eFgvKlgkJTpoYjlSc1tFKSFoTmVSZDJHWmlnZypQPlclWEpQ'@;
put 'JlBdWXxEckZ7dXxKeDNnRFJ1KndjVF5zS0pAK0AzKmB3TTR2I0ZSeE9Udm1uKUQyS299R1paU2ElJjw3W0B5PVVFYSVdPTM0LF5UaHk/a3JoSGcvZ34uUHgveC9lWX5NUyMrSH5beVojRWJfXW5JMn5XLjY2bzVDXUNXVVRJbXNIeTBAOlhBLFZ6Kn5UbFtiTGlORCxsP09ld09II0AvV25rIy9i'@;
put 'KWl8Zno2Zy8xUzlkMl9EfT5nOjQib0pqPFRCV292OjFgJD5uaFFOViJZfWF8cEZFTT1XLyl2fCtDT2N6WDAjMm5nInh4eEVlTE9Pfi5dKl87P2d3TndbemlNVVpXXmtscihrcXpeekFaTXQrT0x4I0lLaCRTRHdEWUAkMEZyRTh1InBLMyl+b1l4eW56P35NZ2JISTJZJTRzZ3t5RkdadClCKSo4'@;
put 'SFYzUF1HZ25bb0x5NW9iemUpVWtMRVtTcWxYe0dPWEhmeUM3OVVnYFIvP0p3QSl5ZzdZTnV2bzsoO0JLTFo0Y21UVmsvN0F+T3dnZWo2Q094QjZWW3YpbHQ8cl1ecE5ra11acSlYUjhCWyVaM2hbST1CeVlrcCxsWkQyfn15e3pJS3hZOXo1U3RxIXlJZUwrXWpwTHlRdStKM3FhVHc5TywjLEY6'@;
put 'aTRwQ3ZJdSJPVkxIYi9DIkg+VnMudnxQPi9ZXkBAT3QuX0YvVSgoTVFlcls+WSZHPWg5dU0/T1dHWDkjbUFEa05HX0tYTHlZa3R6UVJBeGxGYmo4ZF1+LG4scVZbcSFEO1RVVF5+U3ZJMnMhZG5ERERhN0BsNj4pbTglQi5lOCN4ZkZXIU9wUytQaTVmMToyMUk8MmR3Nkg1dDRXRVh4L0MuRVdH'@;
put 'alYpbCN6Ik5aWDYzVGksLERRR0VNMVNIJDNDbDBCVWBMaFFqenBdcmpYZFs1amkxJjQzU34oPU8xeCo4YH5Gd0c7XTxlXUhLVVFLemk5ODJKVSlxaSl8RltfVGwxeSk/YjNHeCtqMixhYC5NYitvMm41TGpERjJ6USR1Kl9hLD0vfjdYeWlMUCVHKm9YVXFXfD5CamhCOW55aWdAKD1OVng/ZD5Z'@;
put 'KSVxezNgKigwYVNMSSZJKVlPVnZWeylMdltCIkllbncmTy4rKTUqKyV8NmYzfi5ZOCJqY1gyR3cuNytTUUR2TVo4d05jUGF9XSIoRUcoUU5RNEosMS5ycEJlJildaSs6Tzt9RjZiUyhkVXBxQ3B8XlYhNlFNKV9SSzBJc0BSWiJANHNAeD9AUzduRkREcyhrYSl5ZTY2QCx3ZmNqZ0E4XTpDNjZs'@;
put 'dTwqOWgyK2NrbzAoR2J4OXxCfjlzNCU1RSxpbDJPZVJFd31DMylVZE5BZEYvUUpeLiRCTmQ8a0Uoa3k7SWEmJFBRaj0iLzF+NVZBcmBJK1h3XSk/QDQ0SCQ5SzB6NXRyKC4sdWx7ZDtvTiQpJDVBdltrRldAaXY2RUlPSVRZSyV9cltHKzxtO3E2PUMpPldPP1olRlNqV0YzQmltYUJRZ3YzaHFg'@;
put 'WGZaRXciLEhXR19+VGZ2K3V2MWQoUkRvbERfX3hRMnZzdj9xeix3ezlySUJgbm9FNEEpayVXNDY3Xjp9MjJrVmBaKiV7d3hBNzQySGdmODxYb09KaExtczs5OCNLbnpbcXBLYkBaLCshWDRvUV9kNSphNGoyfiR2amxiaEdESFZ7Jn4pYDl4QVZFPjZGXk5IKVM1UXc7YFRqOXZgYD52TCo7UWBl'@;
put 'K2p0Vj91UlVzOjppRTI+MSwoaTFXTEdbO2BWZ1U8OUlWSkU3JWJhaTEjeiE4flBbX0AoLE9GRm1GUyZzTG0pUl5jaWk/OlZuXiNnZSsmZFBZUXV7TnVDNm1zVjJeM2B2PCshVXlxJGE1dzN0P15iKE9ocGteMTF6UE0lZllRP2VvNDspJX4iKkJEfjR3QCFuWyMuQGZpJVUoLGpSQy95TGtTU3ZH'@;
put 'Ky5YKlZRRz0rcE0pcFlNYmJkPkd2ayF8WjpkN24vQFR5R3JTdXg8N1BKT0xKMnVKKSg9d3dPPjBmIT9FeDN5OTNTeHl2VXlkLyMoSVF8VSZlakAqLmx6QVNQXVJoK0lzelVZem8qKl1hYGhfQ1s3biU6SyJBOmp3MGBkPVlIITg/OENvOm9deUNhUmd7SnwrX1ZLeEpFRmc0aW0kXk1UWlFbTSNJ'@;
put 'PXh+akNjOTI/SHNnXktSYTxTdjpCI35AYDEoS2xZfSI7QUl4WEFoSlhNdD9HM3N4TyQrTFpMQEJfVExUZ1ZSYlF5ZHN9MiI8M10+TE92OEJ9fGtLczBwdSkhLFNpIjkpSFVjR3leVF9APVpta1RSdCJtJlJvRER3dmo9VT52On1xZHRJe3J6eT0uXzhXRDdacHRJbk4/Z2p4TGsiUDJLNj5dXjwz'@;
put 'JWo2P2UsYmk/ZEwoc1FbNURgPm5mOUV0d1d5M0UlWnxzPXBpXT5MS21TY2JncSZJZXR6ekB2eWVqRCFlNX5WWHZ4YXc9Xzhlbjtsclg5a0BufHIlSkVXKHptSH1hOFt6RWJqV1Y9WltgKClAWV9PUT0oW1IpSTteNGhGU0RhNlAyRllmTHsyN25+endYa2U7cmJoNzdAbnxFemk1d2U1WUR1MEcm'@;
put 'IlM6PDc4YTMvY1t4L1h1P1dXT3k7LyNyWWR3IU1NMi88fl56LktCMjR2fXZLNW8+JC5sfTFzJUZpJnpiaFNMd1Q0IVp6ekl4VDFdV1AvM2F0NmwhYHRDR1N0dmREPCspT3lEI1dYJCNbWEJCImJ9WylFXVIlb3xaeiprKUJhOl8iJn5CWXJKYWM8dikxQmc/WW9IMDtReGd7ODRgQW8lSD5lSGg0'@;
put 'ayJJdEJlW2Y3aG1XeT9xJkMjWF4rZVNWWXlZTkUmO0siZTs+bHhWJFV5biw/YikjMzN2Ty9fPl4kbllURCIiWnBjU15sVV98Vj0xeENsYjVANEtkTztaKHJfKTFGLHpFKVk+diNERlVQMjFoLztuaGEvS0tjIzkqQzFtekEjNGRoLHNWSnlZdHdITTRGYEo4Ty56X3dZbHtkU3lYIXxMKllBSm8o'@;
put 'Tzl+MmhaLDR6UEY/JipjPzovPFIuRVJmWjFwdUMyJCkpMWNYWDgjeyU6QlRZM2UhYDk7SyFAP2AlWS9KQ31Ca1pwPEYuPTghOWs9W099OlY1SnJZPklIMVdXbnBmQHI0IjwwKEJhfEp9U11SU3dmVyZHSiQ1VnNpcWkxZExjPHJfRFJ3XV9Zak1NdzJ+eC54alVsRks3KSlyOy59VHxXcmxxdj0l'@;
put 'UlpweUBUd1Z1IX5GTE9gSyRAeEdkKGtmPlQmQWFJOFJYbWFMPGRzOXNpWkdHK2ghQkpiNE5lUThHY3hGWHBEMTNzUSs6fEIzXyFjNzZUfixhXlR3bntAT110cnlMeWI3VkVCc2ZaVl8pNH5obVYkZTtCZzFSP2VAOl8sZzRGaVtYUWpvb3h1dHsuXmshMiNSamdZSWhqK3NKTmp0dDFUNVQiYXJt'@;
put 'IWw1KnsqV2ZtYCw+dG1iKEtALDR6ZDJUJDVFOzBDIkdddGIyRUw8cHJnO28lanFqaVRtVUYub3J8Rz9aMCVIcnx8fXRuI31MblVRcnpfR3k5bTpjWnpsbFEzV2h8cltCM29fe2VIKVpPUFphZzNVZmlXd1hJN1g3QDYiQzJmLjRAVXVISzEhNVVWJlFDVGpOOF8rfVRhanlhbCFbNDZMN1cvR1dS'@;
put 'L1N6RyNOYTh7c04zSj8vfFg8W3xCJUVWcW1PaS4/QypHTHBsWD9odiUyUTBlb1JlaEJCPkRzZHU4cFk8ayw7Qnw0X1Y0VCo+d1ZPdngpUjEoUz02Nkw7UV1+N0xSZ2VjWGB0Xyw2VHYyZHhQME4vMWV9VSN9QTtVRDViQStySXFaTmMlSlpFcXE9UiEmPFk4fkRMLG95Xmhodkl4a3wmc2MsdUBW'@;
put 'PV07Wy5ZVHdgcV5xMml6ditaYnY8VHsvY1VTQUJ0azBMKmBmT2t6ZG1KeHE0Rm9pKkhvQF8kPy4pZExGRFEzSypaeXtXRkFWczF7YnE2PTVzLnxyV3B0XW1uOGxqbHh1dz9wI3N7RkRQfiJ3KV0zVig4NT5NZWI2KTVDel5rPzxjTWBRJFlTQ0deREM0eWJScH1OaT4rKlh2YGFyTmxTNyksMk95'@;
put 'UENkRjQ3K2RtRVA/b3ZiQzNDJltQeHtzP2IuPStfSS83b3F6OUx0Rj5nTUU4ZD86SkpPKF1uaWU0fk1fYn1FdDQwdSQlWC9+d2YucVY6ZnZKXXFAJDdJcl54SHs4OUgjI2pwVDskUiI4W3MmOiIyWisjPGVwPiovZUgvUjpmalp0IykoRm41Y1JEKWJATGh8OipSRHJkKEZ6Vl9pXUdGKE4xXTt0'@;
put 'Mm1gQm42MmxLXUZLcXkpX1tkfFFeakVKMms9MS5RPjM2bmF6QWsqKUZAL3Z7Mm1pdnFgMy95Q1pWKH13VVJzUlYvImU3eCxXJUs9KkRpOXE9QENYZzl3cCgmMzpOP1tSa104dWtaVGosPk4sRFkrSVdRW2tXYU1qZDJRSCt8R2UqdzdVPmRNYVB8SWVFNncvIlArVyZmQGU5P1hkQVRiY3lKOXpI'@;
put 'JF1MaE4xRnY9Tio3fS5IVlFZNkVKJlM5L01genc2eSo2Kl1iO2krM19SWyVbdjZDNjxneCNMVWtzW3pLNGFobEV+XmUlcztranRQRz4mSXUoPEJHL2FpfnlfTzNiWEU4L1lFUUxEQ3ZsQzhNcDZyY3l3PypNZCxFKXN6YkxPdS9FbDs7T0pbPGN0dzQ1LmR1OWR6Uy5aOVU3bTBzMHsrQ2xnWkFs'@;
put 'JihPLksiPGBOT1kyYXhFZTIzV25VXXIqcU8iTTE9RzNEfj50RnxVP0BjKCEjOFBocFp4fnl3QndMcWRuby94aVBbKy9oOGJgJHFQUU84XTx8L0JsYiMqdlB3OildN3IsUSp+N0c6WkNtLzxDe3RHUVhuTVFvLmxybCVzWG8mT0lXcUZNZ0tINypWTCxYSHBZMWlIXXl1VWhIUWxxQ0JAZCEqImBa'@;
put 'dk1qVWk1Il5rJWV4b3ZCWldnInhUcylAaWh5RW99TSlVcV0iczI4bEdJMj87Ml12RHFPUWNMKntzIiohbDU/SE40fWtsfiQ0eUtDYy5CQldaXnFTPEgkZSU/VmVDQmZnIn1rMk9mOGw+KHcmUVNFdmI8OzVtQShTakYpSHMzMmYvXmV1REJXJTd0VSpZKHMjeUVKWG48TExtSUtiOkFxK15wMG5s'@;
put 'OnV2TF9rMWtBcXUpaCx3WnwjK1A7ZUx6TkdHNEVjNUJVVz1abTx6dzZaT3U2ViNUTEprVGQxPDs0V2QpMG94S0FBU2pUV1NiTlswbHxxUTU2ZjQ7Vmk7YCJDb0BNdnQiUmphajh+QWFHI1dgM04qMG5iTU90S3FeKytpJkI9O1Z3OzU3YTxfWjZKLHp2PTo8ZzlefFtvbUdjaWM8bCw6KSs5Zl1M'@;
put 'ZiZPMUszZ15vSDovdHovOTo4VUljJH0lIVkwS08uczRnaFU1LylAViU9I3A0Xj9pfCtnSHg+NldpVkQsRypyZl9aVThnWil0XXtUdD9Qe2pwYWp5Vz5ZUjtyZV9mWW5CNmBLL2pQd2E/SHN2cnNKNzx6b0dYaXRpKjFfSDZSUk13ZF1iJH42Y1NsaHR2PV9DV3lUTkBGZHtIUitBQ2BMRWUxR3kr'@;
put 'a34uPUtuJjQ0MyVsVjA3anJPQUspUDRdPCk9I0E3ZisiYzNRSyomczosXk9MIn4wX2N2ZSZmUF1dQylmVkxlUXdQaU9xTEkpbT9Me2pHU2pdKTY3a10kUVlfNUlxamEpMiE8TXsramh6Q0EwQUhRfEY8OGBZY2ArJiEmVEJqVWIhTWJ7I0RbSDE6ZU8iW2IqKmk2flR0eip7JkxhdnV5ODYuWFZG'@;
put 'YldsREYhIV0kVU41NWx0Tyk/cDdTSFc4WW0vRnw8PipMQXJnflZHX3N4YSlpZio2Zz1oYDM1Tz1MZlMvY3pLJjhDKjhlU1o1eSpkXXA3WmRHOTp1PTVrI1Rebyw9bStoKHIxJXdTSVMhLHxzMEguQjJ1JmlELCZ9XXMibXE2X0hDakZ6OnR5Um5iX2swQCFCRGZeMi5xXT9fSS49Y0IiTz4+VUBL'@;
put 'KUY9Z2UvcmcuejJtZ0dPXkkqM1swV3JQTCQxTyMkcG1Mb3FDaEMkOVdofUNmTkUlZDs+U3slcih4RiU6XmQ1NTRKYH5PUi47LkF9filXI0heNzJUcmR5RGsvPTZZQDZYfT0qdU1naj09R0ssZ1U+cUk8W2ByV2h2XktUMns8WU0sdEx2WVYsdzVuUDh7LDo2cmFRJHtlNC4zJDArdXdKRkZ+Y0hU'@;
put 'b1ZEPGJaNl9dZSspT20xXXl1fEFLMTFzUH5Dcng6X0JsRzU3KztGP0lYKkRoMFdxTkBQTCR7NzNrJWgpT0crO090UVVKW218VHQ2XU1HcSZTbz4lYVdZLDdhUFJqejAiKXxCXkQ4dzUjLDhrXyVqUEU0JjJ3Xy9fcz9GIndjSEJGWWM4fUw0N0xXaHdoc1B2L0V2bmtPdSNZNmpuOXBIdXlxMVI3'@;
put 'RTlRd0FtTHt3Q2F7ZSpQSV1jdUQqd0h7azh9PlRFXUFKMCw6KiRhc2YySDA7SVJ6ZTxaYzg1VytVczZ7I3Z8RiVjVH4vPG8+ISpjV08mQEYkdUx3Xi9VT2IoJXZPUDNuK3cxfks1KnJhMnFVYlswNUNTR3V8NDoxYXUiWVZ8dFdgZmtSVE08MFclPHdfUlRjPn1lRSVXKFlzQ09GaEFbT15NNitQ'@;
put 'SHEqR3FISCpGWklrTUhqK3J+ZGJqNl1HMlN7alI9bj9pbHVHJUxQLGgyeUp4aEIiMml6KnYiPyZMOWhQJTUxTkB7bUk8ajdBemVBZHdyaEcoSjZvTT8qbWgyQyFHZEJDXztiK0wiRUR2Y0xpVC9hYEVPTFhMUT1SIXt9YVArXkhqLzRgQ1sxRk9RWmV5VTpUUjp4Y2MpfU97K0Z4d3ZQdG9XZWtF'@;
put 'V28mcHlnRnIvOn1QLzJoSFJqdC5GTS56WTYwK3UyUm1aYFEuZzdhQG07LkRBM19FPTh5dTZFQWdQe2pMOCRgV05IfDJ8XlY/SkVbblplRFMwR2N3WVpTUUohMkVVblA4TztlaDE1fWAwPzJUWDV6ZFsmJkxyJD5TKlFESSgwNjlRV2A3OGgzVnA/a11qRCJ3MHAxXTtyczM7PVs9T0kzaSgybFh5'@;
put 'alEpRDZ0SWJCLy5hXXxXNjk4XzQjP15LKTdxRHFfOV0mYWI8Uk07bWM7SSZpPVddOF5fajlnMzI5QnxoaGo7bCxPRy5Ze2I4ezNYVUtKT3Y3en04azIvcG5hOHFzY0ddMWAqJmZLVGp2LDslQmhwX3EqW1FubjFbTyI8U3p8WDgub1l4XmFFV0MybWJ3TlYjSSIsendtbmlLe1pMKCt2PFJKZGJU'@;
put 'bUAlemVqX2s6PFJaYVZBVWw1VHtAVyUpJT1OIUNfX2x6dn1SQ3VVTSRyTl11PT0qZ3BEWXdEUE9dPyVpUmlAQkZ5Z0NUNSFkUnc5YzksYHJ4XyEsLzx8aS4/YWFqQ3JQIlM0Vm90LDoufFlAR1ZeX3V9fUJnQ05+czk9fXI2Ukp3X3ZuSD1oMTBLSzBAMDMyX31bdzVgQGI+NHFhcztUYCRQaV06'@;
put 'RUQxOXRUPypBVDNEQDNIKmd5Snp+STldem8yKiJHezVtOklBM15zJDxHa1YuaSplb084c2o1YzNPRm4uLik/e1tUWT56by5DcT9jaWgxIXJNQCl3ODdgTV1KQVluUko6LEtCd3lZOlNWck1qSjkkW3dEI3MufHgmWjxDYWQ+aHwpKi8vIjRCW3NaX0pGQjU5TzwmT2Q/ajdXMCo2dHBgeDlHanYk'@;
put 'bzhsQHh1bU5HLCg2OE9taDxvNzhZQlo6fSZIO1tATzFaeSNIfEssKC9qamVGNFJiekY7dkpWVSYoQDtBQUZZbVgiYVBidW95YGcuJlthMSp3WCRaQTg4eWloPHF7dyJgQWs4PDxDTTB4OyhtMT58WiZHRmM4dz89JEdERjFdXnNuT3p2bEwmUExqTGpsSzhwY1FxLkZffklrJHxgbH03VnIxZHRJ'@;
put 'I1FzIko4QnN9ZDl7PCVwQF51NVcrSzRlInNUaih9cyhKVEQjaUFKaUwsMS5QfmElfl1DOz9ATG8reVtmKntMYGFJO0s+WjNJUHFdOW97NFljMHpTP2hMUnBOQjtYLCMiU2BiMVRAVFJJS2tqc2g1KGZ6KW8heGszam1ifWNwKE0rZC4qa0wwO08zZzNqNzhSUTROUWpLRkBMOFQ5U0JUeFM3MCEm'@;
put 'UH1tUWl1OSp3N3R1cVFOUzRXIlYlNH4wYyokfXFXLG0yRE8pOFM0R0JUN3BDRWQ8cj5oYm5aISZWIylESSNTUjw7cTZyMSJBdVluPFRofXxVenc9XWNjVWgmPTZ0cyQyckNqIkU8Rz82TyEpeHxqS1Jsdi4xRU08dlNLSz1MZGY+bipuJCwlfHd2a0clXjomK2FiIm1oRGpOPHRGZ1NaWUB8ZzxH'@;
put 'W3txUEFePVs0JS5xdmksUz51NU1vVlhtJUJhKU02MnFFYHh2czlCR1Y/eWw2LDsiZXg1PlU4dkVbfXpwdG5OdiM0OVQzcHNmdEdCL3A2W1Qie2ZNXiUwdEY0bS4hKE1JcWRZe2dGUSEzezdRLyUwX0U0TXVmJTBJWEVhUHpXd1s+aUhbRFM4V0V3cnR1XkVxSiYvNz8lIWZNSTchP00uRTkuZzVK'@;
put 'UXFVNW0qVnFNeGZxeylaKG1eP2M2TlQ8JkdyVVJtJU18QDk6c3BzLnZIS01qUHZsIUQ+ai9hWmovcENhfE50RT0pU3NlSkhuJUQ9XWhtKnJwbnF2T0o3Xldea20+PncxeU5QMV1iYiNaeyRCVzlpNy9BKVtjdCl+RSRbcCprXTcqdD0ubWJOMiouTVtJdUJnY1l8fWtjVlVuNzZbWn57R3dxYWFA'@;
put 'b0l4NTdXeHJeeHolVUZ4OEQ1OCo9VFBQdGJpVzp7SUBBK1lvZEojSkF4Ul5fL2MkVFFybUgsOGMpP005M30oXXx2VClBMzY+cWNdYGF9dGBqKiJ2d245KmtLdj9MQjY0OEc8VDc5IVJrUXg5cHFUVHxGJTUlYyE5PTYzJXVyKkgjX3xySD05TE04NnJ+bW5ZPzU1anwqR157ZV8kTWwkbyt3ZVoy'@;
put 'PWlgRElOQXgsKmdoJndiVWw6djd8VWIxdFhzZy9FM11rPiY0ail1ZkRMKS8yUU9mPzBIJHpOLFEvekRzV3E2Ojsmam1tVEcuU2lMQztzJVRjPSFjL3h6bzNIPTJKelJeREwmOWVOektse28hUW99JCR8bXkpWlgleHBSelA+dDR3dSpPQ3p6WW9eaXAoM0lOVlAxTF9qfDdjeGhWb2hWdllhfiQ1'@;
put 'PCRdV1p3K1E+aE5UIlhNdUVkSkdZR2p4LlcvVkg/YU1dZ30ifDU3QUNXMlhRXypab2Vocy8hWkRqVlBQI24ia1RhekkrbVoiXmBmKl9WelpsO2h4Vnl3UlpIITc9WmltQFJiJEgiQUE1ez5aci5GW2RqVEA/VXd1RTE8Q0pZXWBdJVczKGtRXj9LQDw6ayJKWTE4PlNbfStkZ3M0SD5dKldeUko4'@;
put 'YEghN0ZAYlFtVTo2a3ZvOyhiJDR5NkFPc10yc3Z2aXZpeUF6Yjk+XWRdLDckezl1JjQ7Vl9QW0g7fFdsPj1hLClnXThne0pIJmRgY151bGVwMCQ0X3E6e3hvLllEbToxR0AhdTlfbWU+cnEzNkZieE99TyUhU21dY1hFfEROVFpjXU5FcHoxLHI3eTVFVVBQQDd8QX1jYmZDaHc0U2o/OFRSfSFs'@;
put 'R3NMfVpFYkl5TGszdzYqdD9lKUtLWnJuUWoiTUg6XWNSJm1QMitqTWEhV1JGVEYxaiIvTzB7TCVoOlpTWzUwemU+Ynt3WjNNTmBeeUcmeCE0Q3RIX1liLH1mUSgreDtILzZbZC5NYHtkcCJjPEUxPGo8RnUzMXY0XVBQfjdLU1JjW2F5dDV2THA8NDNLNjJub31HLjJMN2pEQmZuXTleW1ttQi9D'@;
put 'Z2FXOkd0NzNASHZdbFBAZ310fSFMQ34lQFU2JCpkQ2crWWl6ayZ9U0BCKyRFNWJzJmVpY1o2ZkoyUyNSJDN8aTFIQmZhSDBfWmhtSiF4QilMVGImSEd7U1ZRJXRDakZ0VlpPJGpIJnlba1AhYUxedilNbFIsSWRJeDRydFtIYCw1KkM/NkdvKGt5QGFUZz9xPnFqJHB2WmYjM0h8TGJiOkh2YSpv'@;
put 'K0JuP3MuMDdEPiFgWG8vbXdJbENTdz9oRlRufkJ0LFAldSosQihGbTJmbmhMOiN+Q2h6NSg4WHwyITVHYyRbYlp0fGJHZkFAZFhhXnQ7P0Y3cTg0ezhGIVs/cU9XQ147KmRCaUJYS2FMQGBAPUQ2fFhDIiMzcXdZY2h+YiE7KHpiOnExVDksO19jTElFLjhRZ3M7JEdWfnhHTDooa3goTDgqXT9J'@;
put 'ZiVeS0MsbiJrcXhJInpXQ3lJUEJxeUNqPn4yQzRVREdJZmpfKjpLJD49KSw/fG92dykhOCNSRz9uLEdqfGhBQz40T0pJVk97R0F5VX1Md1t9e1BJfmB8X0VaVUdsSEleN3JQK3ZmLHx1UntvRn1uZVtzXSkqTDA3ZXpaOGBzIkpPWD1SXkoyOHBZJTV9OUVsfFF2PTowfCReaExoSkVyS2goc2Vl'@;
put 'MHIlfEt0aCRZUzZYRmgra2UsbyUlSjF7L3ZdX1R5ZE0xQWVpYjkhRyxwbSg4YG1NZk4sMDRUL2R9X15idU5oUXFXdGJPNmB1czdxfnliNH1FPjVTR2w5VEhWTWN4MDFWTjlsMDspbihrSGxVPn0vaml0UCpXVzUmVkFDZnc8YUdEMXl8MVcvVyR0NFEvJm9AZ1E/RzBlXnJPa3Y4eWk7SEl0KWdb'@;
put 'T187ODZve1BtSm9MKkApOlU2eUw3fShbJVFSeT06NnIxK31NRlh1MS9IR31hZD5hKy8qS2Bne0pYJiRNMmx8X2R5TTdSTjV5d3pDayo6alhYeEJkIlkwdlpWKDdEYXA2KCNXaFE/ejNqaVBBNSVVJnQiIVZMa09XLCkpeGl0cl9hNHFqPyxkfjV6Xy9qUDdGQyopbl8jfkRwOGc+UiZiK2FDe0Nw'@;
put 'WmxHaipPQyMpdHY/OGIzITBgKjFuKGR0eHgiPF1wcXRmZXxhWFMmOEZVe2pZdVhPXmZdLjZjO0s6e1dRTGc3LjcjTVpOV3R9SStPdGtHam5ENHNOZTU+N2JQKkdKNj0zSjBNZ30reHNlOGpVP0wufXdlVzYsNDw/KlpgQEBHXlg7R2pzXWBacCw6Z340Ok9lRChuSVNBWT9pMXxvb05JLG9COFdQ'@;
put 'SEg6dnRSbEl7LC9Ue1V+Vn51STc9WVZrYDQ/MkhRMy9tL0xnXWliTmNtcVdQUXd6aV8zVVA1LnIxaXJEJTBqOn5oK1pnXnY3NnUpKXdMIUJZV0NRTFleTGltRWckbGRPTHFgXX4vMVZSZnt1MmhJX30mRjFoIW5HNS96JWdSQjFxQEFLeW5QeXlGVFJHdH0hLCV4K0xgLG9OZVBjM1RMTmMsKDFy'@;
put 'NUc5KSooQXAlJVMqTjFLLDx9Jms5IiZSPENUdng5bSR6YyozN0JjVTxJZkM4PythZXR3KnhzeTAwUWVKOG0ofGRIIzY4KTo/bSh9Y0pIPC5lKmFqR1N8IT4zKDV4TFZLYT5QZSw6VjxXbk9ZLlZmUzB5cldxeHRkN0dRa2t+TDA/ZkdvRzJ7ZlhnOHdDVF1iT3MvaUoxcWZaUW4yMmU6Y3dGV1I9'@;
put 'WllubDtuQ1FmZVBsZCRrUzhYcnlyfUgzaClfQFVbYz1aXndhbkB6XV8wOGZxWFtHeW5AMy9+RHxYNl8hdmYzfkw5YiJlKixjeXtQKEJgSURZWSplZzNtP2dmVkI6Om8uLnI9VnkqYy5vWWxrKz4hRSJ2bENxTighdlV1eFtdfDBgamNOTy9IXipXdWtLWkhdKmAxYHsuUFtCdGBwZEV6MClpUXxq'@;
put 'Tzl9QkFDTClUZGIvem5oOilrSmRdNlZaNi5aSmVTZUNUVEtJVGh2UGFRVHRbbGEwN0whO0IrVTpEOzoheWFVeCZMISpUSCo4eCY7dWxzP2s0O1lJVkExOEMhak51XzU8NGRZb3dkdHNlNzlGbEl+bm87bHRwXUsvTjw8K25dPG9KODhgO0hEZ1tscnFOfl0jcTBMfjN2dTVCbH1qTFQuKHZWeSgh'@;
put 'WnN9QExzJkdLdnxNMjxZLCZSSFAiS0Z8by48OzFGSkZZdXxJeTc2VFoqZV88MjRhV1d6SXlrdTQwQldkTWVXSDxsaCFDZC5jO0ZvQ24yPF0wLkJKfFpvMTpHRD9qSjxKfV1pbHkjSTE6UXhkMCZdfjt3ZWk4JjlqX0NDTXlFblB3NyVxQSk8VTd4YE5QZG5wV35GRl9CazR8Sn1GL0psenoxTyZB'@;
put 'dUdHP0pQVjZ5YkBSSFQ/K2p9O0tPVk5SP2VDRjtFSWomK29VOzx3VjNIQyNyUT8zUEpgPTolV2M0PGwiY2U1cmYuTVpMdzNXd35CbnN5Z29SOzFQKWJbQiZtLHEuajI5MnJndTcvQFVMNlJNPTM+dlN5fCElT0MhdF1KZGswM3QxTyt6UldFUD51PCJ2VDBjbD9hXm5GO0xhUSV4OV90P2w0MWVF'@;
put 'RU58eUk0KjE2aiJAWkhmNWdaWlR4JmFmYkgkVVNZKklNIW8ifTF+QX11cUBZOmJBP35FdkkzbXZQTy4wYjpNJG5HN0ZmIWRjYTo2NGR0bkZ1cFR0MWA8UiNqfk4uKT9rPFY1cil0XjxXNT8+MnZRSUVYW0ZbNGZtKT9ycDYkNUQ5OUNBX1ZGTmxScjM6cjNgZnNXR3A4TFt6bXlMdj1Ne0t5eCYj'@;
put 'bVVUd1plSnU0UXM3T3srW040fFpAWDJ4bkJxPClGRWxjJTJTKFJVfjhxWV55eXVWK1k6NW80JHxyeyIuTGo2Inp3RjhmK2FnUkt3bCg1cD90dGNuYElPcyRHU2ZHXjQ7JSFgTWBHUjV8dUBQW0ppSVFwLFozbUAwK31oZlJIMyE0SmptRDdqTlhda0I9Mj09RndXInF6KHNaYWtzey9FYjRedGdq'@;
put 'cj15dnUzVyR6NDhdJl1mQ0A4ZTRDRWVWUClhSU4kTCNpVDRXMlVzdXsmW2ROK1RqXyVtY3FGM0l3MikkMnZuPUc8PjJAMD1eelQ8LGpKN0hebW1MIkZuPDlDOHAjLyUwMXV0JE5qNGUqM1ZPIW0jNDs/b3B5P1c9OlElLGBfJFo6bX4kfmghXUxpI2ZjIW9xe2d7PyN5eH5Gb1M2dEMqRnxQdG4o'@;
put 'RilrSiEpI1s+JiQ2YDohZThXQm9oUj9eKmE6SHplTFBKK01JIjM6NjZ8Q11ERUx8al1SPGQ2RT9iOCMyYkZFPG5SQEgsb3gzIjtCLDgpZHhnUn17KnFFKDFAZDYkUno1Rk06dEV2a3RLdUhdbyMzQUFEaDlDSCtjb00vUX51OThONntPNWt0YTZaTURqJC54MCskITJGL1FUdVtvNk5LVTIyb008'@;
put 'UDokUz5KKy9KMDAuSE4hK30oT1dJTUl1QGUoT1ojVXlnbWhBUSY3aSZeQm5VX0RIKjJ+JiZUKnc4ZHdiUyxgPGZCOWI3I0dVaD5AaWxLIS5rJlMlZGRdLl1VR2E0ej1aPUxISk9jb1lmbG1nbFdCQHtac2FTUComS1V1QyMxaUJNKHJvZyg1RWpfdj5gJSZDQyJfOTc/VDcwcTpgQnZGcnRkQXxl'@;
put 'R0tAeStXQE5nMDVeOnxuKlJ7K001Rkh9W2dMUkl2fHhtJUJvUixmJG5vNUphfmQweyhAbUxuWW5hOXkxPWxPUXkvQi5Cd1YxRVRlXTEjNlk9bTdOMG9ZImdoInhtUlJQWmAjTXRlLFNITDpjaHMhMVgwUVtTMWNOa2YwN0VaVjg8b1J0I0ZiUT1BKnxDX2Q3ajkmWzZ4P15PIipsPGY3X106K1Rt'@;
put 'UWc4eXQ6aS5zaTtBMHhvSFJALERCK0dMQ2Rsfmw8YXZUeVtlMnN1U2daazZvUCw1NDR4aDtiInFZakA1Wi4rV14ucC8kUXEjKyk+eyV2S1lfYSNBRyttJlZZfG5FQzsqelBMI0pkdiF8QTF5blFCSn0qdC5RTmQ9KVNSPC5jRkpURGc/byF7bTlYJCVySWQ5ajlvZHlyTDM7fVUoOVV4R3AzWmpw'@;
put 'UCpyZVY/QiJQWWUveSE0JFo9ak9qTCNgNTxpNzFHUiJyWFhBc310bytLblApTyFeKzQ4Kylbdk5LeiswfTxjOSE6JFJGNVhgL1pbKkZkME1OUFAyfFRyVU5SbTVVM0JKc3AxVGBYJWRmZVJBYTdIUFhrT05eeHteM01rImxOOGM1SGxGW2Nbb0A4KjQ/cCZLeiZjPSg7eVJ3TGRec2hlYyRTQ3U0'@;
put 'S1I1azFIdGl4N3s0LnwuJVJWT2YpVCFDOU0hQi8oWmY7fVgzWHEiKSlzUSI0azRHSDIqaD57eSZmenNmVSMoYXwkfiQpPnFaU1M5NXNsdlo5eXtbNyhTLmAkSVVLOjFEP2AxV2tdSGB+JjV2dUl+cFNve0lrMG5XPUtgTyZiJiUyNDcqOkp9YEBLXVhvODdxcWE4NDF9RF49JHkrTDRzKk9YQDpo'@;
put 'dm42a3UhZ3svdzIqOlp3LmMwNUtHZE1nPXJiV0M6LkZxZW52ZjMhIzxHL0FgMEJ3S3w/VCF7IWhJKzZJNEZAd1QlSVZSUDo+L0hHdWhiNTR0PDM2QiY6PzRGcGNwOywyIWRzOlJLfTwwTF17TDVvWlUpJWdPKVpGZ0R0L0VsMCUxSGF6cWJoTmxpd0hJP0w8PzwvakJCMGFNNlk5OmtNPkp9L1kp'@;
put 'PHYuIz0meCZFNEUpTX1bZC9zPWRJRF96TSM3ZVJSX1JKZk1pUjUzZXF9M2o9aC8lQmM/fWJmNUQpczRJdjkuQS5lbytCVjVGdFAxcTxLQiJiL2Qoe1dRMEpAXTUmNTYzalpkT2d7O3NBIjpFKHw7amk9MER4Ljw/SXg0OllgREpgaEN2MmE3WGJxJUQjfVlVOT91Ll5tW307LERnaj9hYzBveEVY'@;
put 'M3Z4Kl4xancuMDgoO05SSHVZbTZFJSJhKmM0RkxkQkYjcDxXQVEjXyUkbGo5cTN0NjtmdXE2bCsrclN3SXt5ZS9ocXRkaEo6WkRnKWQ1W04yV1J4Ok4sWzI+TER3UW1aPU8qWDFhXXdGMG9PW2NFYUVqN1FrRFY5LGcqPkYkWmU7RllBfCllN19pTyhUXyVCfCtFI0khUCJZQkVKKzlNbyJhbTYr'@;
put 'L01RVTp1U04sS3c0c1AkbEduIXVJfTg3SktyeytAcjJpK2t4K1UvYSZxOGR1QH1RLitVZztsa2MsK3htOEl+Nz5XUz18ZSRTY0RJcHskXURMVExdaDxxbk5RX0BlfH1jIWJecD96eVZILDQpZUY8I1dIQlYvN01pPnBId2poZW0sWTEoMjZ3YHpRfEpoI3tHJX1ySnRYV2JWS357MF1jXiFocHtf'@;
put 'd3dKRGI9RVEmbUxENyF8XiZBTSFwaV5VW1ombXhiZ1hXb0hKSn5SYUVORk4vNXIpLEZeOGNzZDAmPX1MWGJJYiw6cV4xUVU2RT48VHNDYXZlNWZSOGFmWzx2aSYvYFM0cjB+YXxzLmFJMVFIS11VLkw1cDFCVWtYXlZebzBII0lwUH5fNytpPDNpRD50cllSO15qU2M2PXBjTHc1I28wfCxdMjE/'@;
put 'UC86ZVVIfCNJN0spRFh0YSZyO2M3ekYzOSY+byQwK3UybisuT1VGQUpIPzEucE95P3hqK1VaWU0qaChFMCpSOU0sN3w5KSheXktde0UxPC8qL2tabmRhTUl2I3U6W1sxTEVVUkdoImwrT1s2R3pmJU9jLF48fEVpXWVmUCtrUnVgKi5QaU51N3Ilcj1OeGRATkNuTGt6OWdidF0oXShpKCpCLmsv'@;
put 'cjxPczpPZnV5d3AvOnNebnlDdDJRdndvWzxJNndVP0tDZHwlQzRXTG95Ok8xIzY5VD8oJlRwUzljN0xdLH55QVdhX0taeltLZ0xZSSEuR3dnW0ZyTG5hQiJ1fTlOJTV9LHZ0Vio1e2NkRyo7Z00uNG1CbTR5VFN3Pl5LI2d8T3BCeXBLY2cvblVDQ1p1W3UvaytQVyZqUjJmTTVDJFpKRk1HQiIs'@;
put 'RT08P3p8Py54Q0c6dzxaJUV7cVZpbWIhMSg2aHt9LDY2eGhVPCV6IXUpZW9WWSF6JlNueCVKa1Y+ciojITEsKHdTKz94JjZzT2pHLGFndXdUNDZ0bkkxcl1qMjQ5QStAd0VRREVxRS9bI3BOUk82RFRXb1RRaERoS3hvay50Wiw7MGBtMWR3P2BxUz13fSpKTTFKS3d9LGcieFAkNk5VQDxNTzlO'@;
put 'P2lodWhQLktWfnVSLzBfOW9SL3Ilcn47K1IhR2JfPDpVfENtNTUvVGttdS5sQGIvOltmUGI8M2hlaHFudiguV2ZOW1tGYWhsYlJwPkRaS0Q4WW4rSSI/aUtReUg2WWI9N35zVj8jYHRaQG1+OysxRiloWXpjb29jYWJHbGglKV4ibHEyITJzKytpQ3NWV1s6TTNzYUsrMTwrMVNkI28qRVgpeHRi'@;
put 'a0AyPnhdMm5ZUF1hNjRBRTVzbUk4XVRkQUdJfH4+UW9RTyJYPzlMMGdDXjQuY0sqTkZSZXpLcmVIYj1zKUkwNTM4bkAwWiNyISslPUgqazo+RSlPbzUydnJvdVQjSVJzVVM3Om12dlhuO0pyb2txfCVAdkdNYSNvI3pKakhUdDA0IWh3Wz8iSGNvSnwwLkRRJXk4RzIqNjpkSDsvdXFjLElUXmF6'@;
put 'eHs5MjJfTGg5YHdoOkNmVj1oeU94KXowW1JSdmJrLl03SFVAU3RbaTliZ2x+Wn58Py9pT1ouLyxOdWdxSTopWz8rLkx5ViwhWTB9NmUjM1QsVVpwQ216NjFmZjlSKXZRYVtGPlI0SnJ9VU5PY314UWk3TTFFTj8/Qkd1aipLWCYrVVB5SXI8emdGW3g4TGtsaTBVY2hqLnR7dUJrX19PIjk9a2lg'@;
put 'RS8oQml9QHcpKTo/dHl0fExRYXBvcFM4OWoubGJWTzA1MkhoSiU2REFQS3skZzlWKTwuLylyd088aisjKj14fjF2SGluRlhOYXFtd2t7Mj5DaEE+LHdpaV1zdSgxRWVJVkh1NjMmMT9iM1B+T3tCe204WjxkbkZHTU8kOzVSbjg7e0V0JVh3TXQ+RjBOMX5EcU5JIiYkcyxsJDhVYENab3UyNX5X'@;
put 'UVgrNzhUb3Znd3szQD5hPkxwKHtWOUw6a3dmWVhJMig0fn4uJW1MMiMxZ2Zffi81OzxFc0giQ0RkRHk+XUleWjd1UHAsZXc5aHx9W2wsMCFmfVF0XXsoZ1NDdVYxajBZTkYqdndEOnhrQjswblsxQXMsW2BBUyksSm4pQHYpKFVAIlUmMXtZNUhPWWkzc2EzO2xpQjI1XyIjL0hKcyNKbj9bRVBU'@;
put 'T05qWEt5e15LWzdjSTkkWEteJkR2PkVOTUN5JTN7ailqPzdxSzd9SX5sbF5dXXh+Qlh4JXpEbHVCWUczaUdINmUveithfXc2c0RKY1FvcilVXylVUm1BNngvYXNLY3BSW1k8Ymc8fF5mYEBlVzc7ZF15IWRTbHU4LjcwRihka0FvSSh5fFtVX0lYViQ8MXp7emQuUXZvdHl3MWVbMmxRO3JJNCZE'@;
put 'OlFhUW5UVDc2InR6c0oxOXwmajRnZn1bYEZtTXl5OmhRakc+bTI6N2lFXTtePEcpdHBCZGYvbSJ1fnxMZDBobkZhRyRtPlpQeiwjSDk8MzQ3L3ovX2tYelM9ckwsbHZkRmFIfkFzcyMkR20xeml1SjFwZmdMc1VJUS4oMGsjLGsydXhSfFhGLj1SOSt3PE5ZSSt3NEVCbyQ8JDR6TElOOFBeNTBt'@;
put 'NzZVJng7UTJYXl1eY0BvKlQjZ15CLilifGhrQS89b3dQJX1gPSgpWUNHU3FqPn5rSlNIK0d+fS48UiM/WnZlIUtPRUZReHpxcDokOVJhPj8oL3k6OyUjezMlWXozLl91LzM1Z01xVTE3QDUkZXh+Y2oyTmB7NV1JNj50RjNXLyY7czduYTw5QmslT1AlNX4ucVVgZl1aUEE6a0NhZXZkJCRrPl5S'@;
put 'PVlkJExIYCFhTUgvL3RBVm4qKXU7KmssQ2lbWVpwOVJ0SCl4S1drJEoiQ3RVfSwyS2tlbW04PUVudyR2eH5zfmRuI20zMGVJWTo3UExgIU89aFt2dzEzPkJxWG9AbTt9Kyg5Zmo2dyYob1tDV29TdEFTSXUuOGFiN2kyfUdUJUZibXYrMVswezc7Tj9IMT56YFZhXjNXQ1ZvN2xrNDlyJkgrVmEq'@;
put 'aDFrbHhhNlt6eChuaCJDfV98VCtZNktAM0BYbUZfS2I4PkJCQFJYbll4cnAjOnBGU2c1X2JKLkVYSFdsbUE3cDRNd1hSTGg7PFJbKEZNVGs0dTpvXioxY0x2MF9kKXZPPCFsdW9iK1JJRUFjZW00I1ZCKyRXIT53TCxgaC8laEJIRkRWS0g2aU1FYWx4TUNqc191T10lMSVtJWY0Iiw/RzFDe0ly'@;
put 'XjllNVFvWH5VdSwuQnNhWzwmJDdzLCRBRklVRFlxYEkrXzxAX0ZOeixefWZlZShiL2JAen5nWlU/e1t4UlJaPz5mYV5oaHtdPmpWWWszOEtHNztYaUN5ZH5kYVVYNDhUWncwTW94N3ZpbipDeV0hMVtWQjMoWUIrT2khd0E2VTsqaj57fVdfNUh8bFt7OGhMK2pPOzx5XSxVKHh3aE1yVVNnKFBE'@;
put 'M05UNTp+UntOSDw3UVNJc0BNZWlwdEhuazE/Vj19VypJQn1CelYuL118aVRJaVpfIiouK0BUOk5Ub1ZxRnEiW24oTHprVjRqWUhnTVEvQ2w1WVp1RFRKXmV1VDwxVlNZRGZMYmhMQWNhd1hWUVo9O1FRKjZaOTpUZTJ5RTJHVXIocUcpJjF6I1hqVC8leC4xWThvNjM+X1lXelZPVVZnZHZzTGdf'@;
put 'azZYJVBrKG13fnkvPzF7ciUueXJnc09eWG9RPVMvZnk/IWtbW1NXIlBoMz1ldzR4VHQ1KGdQPko6PDF3L0hHVV1pYGNRVHgkRXpVdjRkISlBI1VeN1BdREpWeS9FOikse15HKTJxIUtMLDpKa3FMQEZfTDZqSiQsNC9lX19GUDtXQG9pa2JGI0ozM2QrdDJbRWYqLGQjSmZCWHRVJWBeMUgmfHg1'@;
put 'cUJIWzxYM0VoQTRxe0Q8Yyo+TitsTm5wZjFRbVkreygxPSpjKjJMO11uZlhHcWxddlEjQ149NzlxLiswdz4wa3Y/MktTaDsqPVlUKjsmfSl7IVl4R3lEa2tweT0sUmxsV0A6eGlIenVMSFs/L2JOQU1EcFcleGlWbnk5KUU6UlRMWk8wZ3NgfF9jSzpIYjF4T1AlfVVmfDkpTD43PVhyNzVnaVtL'@;
put 'N21NOHl4T3RULEQ5VnVQWk0kfF5uQjYjKFVubmU2NS80UWtkSzkka08mSDhWWFBmMEIlYy5kKk0hOmw3SUAvOTpzbnJPJU41X01aNnUxZG4zM1dOb3tMW3lddUhdIjpxLHteejMkTUg1LltUOCgveVUme2o7OUtBUXQ+I2ZRdmFManBzKzdEJiV+RVh1VEtNNWY1eXh1aDxJaS5VSVV5KDc8Ln04'@;
put 'dGYsNFhVJTRsK0dKdGA0cWFLQV5gW1RBaEA1bE9UdE5xOnk5LC5sOUdYNCFEOzhHJmxoZUYjJWxLMDk5a1B+Uk96Mmh3QlV3KGNmPzxhfk9dNz9fNF8/ViIlT1IufG49RXF6NFBkbVVSezd6cVh8NWUsRzBqMC9NMy5jOFUjWUArTFluQnpkVDslPGJDZSlGI2s1Ok5OWjxRd3c9VEloR3B8SUk/'@;
put 'eC5QfVl0NU1bR0MxNWFYVCQjR3VZJFRgXzJJaG9ed30sbkwvbiYzVDFtP15gKkplXj9AXSZoRXNSZWslMiRiYWo7dFt1IzVganQwRExiMDBReSkiTTk2LC5jSjBQT0tYXiMqSixmWEo/eCVTeyhoR3JhJDszZURvaElvQUcwXVpNPE1uP2Q4REwlITUjaERxKzpHOjd4XiZvI3NmO1NOIX1gRGVL'@;
put 'RXMrO0M4Lkx0KlNAK1tpLFFpI2Z2NkhNfjAyJkBBY1tBaUMrTWJyUzI7K3B8dmQhJSptTG9xUkMsLkZuQzl0XlowPnRLUTYoZzs6fmVHbiZWZmg9d2BOMSVvUGdtbDJQKDM+JWVDL3pnQGBjdCI8IUx5RWVaPitCRzRpYmpXOWJjU1FbPSpQNFchZmFBVFBGJkI/cyUsJismfE9tSTZSLmVveFh0'@;
put 'bXQ9RX1CXXlpOyVLYWw2MT83ci5ZeFhHKztdQ3BQT15FYzJzbmNMMzczRUUyITVCYVFzTFRQaHVIMjs6Wz56VTB+RU9sJHBOLiJpYTZ8bHA8c0NAfGMhZXZBKTRxLFVQRCR6elhiL1NabnYrQkBRPHZgLmMqXVs1OkNENHMkSXx7R2A1KjZQZVNjdUZdYi9iPTVEPD0zTXFCWThINmZMLlJBPCtB'@;
put 'RjdocjB2Rmh0OUc+SyN+TWczXTdPOCgvLEJObGB0eTs4R1NXY1l6ZTYqd08wWFZAIVtsUWhRQUcrT3AkOlQ8ZDJ7OXM7akB0ODZmIyFsP2lOSURtemBMNSoidXhILkREb3I4RW1jJkB6KiplaXxVcj1oR18uQ3JVPmFiIzNVRntZTERCZ3l4a1ZTIktuQz0ucDJ0MiZaYUptZW57MSN6ZlByV3g2'@;
put 'ZWosbW9LPmYyWHQ7I3d2NzcsdTU6WEVmUl43dkdzM1tHTDR8R0BsP05CKUtDXzRmTS9gXWh7TjFjenhBc1l8JG5WNUcken4rOkxrbypdPSJ9VFFhbzZtTCVYVXRGOVR8UU8hZm0qIUNgdlt0c0JYYjxFeFtxfDBUP2FNdCMvbjNrbXlAeWt2ZldzPWNsNU9GOkpII11RUF1PVm08OCZlV15FOk1j'@;
put 'fkA4d3dQYjElS1E1THU5RWhYM15SYnw5XjIid3pqUFd8cFZKYlgxbmA/TUAsWWsqKFt7dWZqTENfYndtY2UuejNtJiFKdGMhMnlVRV9+dEdxJFBObz9LLzF4K0s1N3wjIk4jZUpVXV1tIXhgKmhMWmZ8PEs8JCNyIU81YUk/dVghY2VFLlBvWk4/fF97dnJzRXtDfnZNTWtdb0E8N2x+Iy40M3cu'@;
put 'VEFRK0JzdSxfSmszayUjMioyIWRdNz1RZUY5Y3FDa2grNGo0alMvWVpoREJ9PX4qQnVja3xGeHNqbjA9M1khP0ZLRHpgbWhVUURJYUhCSTx9bEB2TDJzS1hmYlt+ay9OemBCOl1ARDpPSElbPGElbUJPUklUM1NKZztuMGheeWZFSTpDbUBFfU9CbChYNzk/KEtpNCZCdGZidD5NZ346L3Z7RDE/'@;
put 'RV1ESyEqSXZwX2krVnh4L1g6QWcufXN3Uj1AQ34yWmNtQlcwMEAyRnU5OF1hWlNhXzV5fFBmcDw5TXZ2OWduZXVLT01lb1F4LlJ8K2xOfThJdD1rLFhEVm5dc2p8QDxoSyxmfUx2VXNzPXE3RkV0JjhtLG1jJSZ2JiJLJU9keWlAamdpT0laSnRFQ185Xl9tfnsxQFtbPDNtaF1edCtjdE49UHo3'@;
put 'Ji9FRjVkLiZNbTNuU2g/fSFhdDImeiRpJSZGNlhWWHhuNS5WZDtTXkBOYTx6Nkg6bE1EN2tabnY4RWZ4JHtFfDBAfWx3UF1kI1padlF4Q3c2dE05djdMdzdFVE0+Z312PEkjSXBGRHY3aiNOSy5vYlVCe1d8ZDUwemZqRDIsKXtbPGlEUSlEZGU7d0c9anl4Tn5ne2FQPkZtaCVsZX5TUW1Objlt'@;
put 'bk1md2l8PEFQN008eT1EcUlmT2dQQz94O01hIm1bLDQvNWU9XX14RyEpYkJEIS8iN1s3aWxAVlVKc1lSJEJQMFVjfFVvKVl+bjdINGVCfHxoeX00dzIpPTE6emtXWXhSKW5JfT1LJWdsSUghRlBNViNkVS9UTGBDIzZaUSluLHdrdSYuOD54a0BXMUVKaHpZQF1IbV1kVSs2Qkh1WkdkN3pbVmJ+'@;
put 'dnssRkEpdns5YUgkXVN9TS4iZCssYWFackRQcmhpUz8lJUx8ZDpDaTppXWIuJUBLLzl4RF50ez5xKUUmbFJVRkEval5AMywzIzN7OyRlbDYqYytyWGs9YkQxbkxpW2NLamY+LFkweHI0MGNZfjFtXl9BTVFFUjs4UiY3fHFPISk5fEMvOjBvIVJnUzVfRm9kX3NmT19wbCYxO2ErbiY8TThdMzB9'@;
put 'TmpRQXJhSmlfV2NjRWxHblVrL1Z8LCtEbkZ8KW9eZW9sRUMmbVhgVlJaTCFBJWk2RV97Q1g8Qn0zSztRUDlVUVB6KkdmeHh5LnJfdEBPUVtyPTtKR1tBfWFhKH4wKnhzV2ghK31GZSkhNDBIPjRxa3whQF1+Y0cpWWZCOF5LWkd6VXF5Il8wVGU/I3pYdS90dTFtXUJEJmE8PEw9TkAxcENkUlE7'@;
put 'UUA8eHRPeyFAZVssNyhgUX1PImdqNlcrVl11aDJkPj1LVm5BUjRpfFJ6c2hEaDM+X1JBOT5ZfC9LTTc4ITdlI3soSD46WG8venUuY0QyWlM1ZDBia31LNkdyP2VIRClnN01tZEZqSGFpcnNPTyNXZkZYZW9AeG4qWCtDaHRUVjMpemppPDZMQUFSdkx2UChHcyFiOD56Y24rJH1nKTwjJEBKT3FA'@;
put 'PlNwOXxmc0s0cUdRfiw2UTNhLCkhNE5TLn4pOXVraSlpcHZWW1glZCQ8YEs4UG55VypRb3Y+YGEiVXs8fUxSNGgsXzg/WWpnazpEU3t7PUx0NikxXXcoOVBBZ1Z2LjplaTEoSFZ2VSo4PmxYTXQsMmN9V0UsUVJuWE9hXjVsSmZGJl99LmdRSktfVDB8bX4wcmo8N1grOjMubHRMVjxESjwvI18p'@;
put 'N3xLS2tRbk9NdnUvPypHNGp7TnFhIUovZTFEZFAkO3VYXlIwblU2LjIjZV9EJDA4ISMwQiUhN04saXRAPFJ7OmxUcissRj5BKyIodCp8em94ZUUlaj1hfTliSSZdVUo/VDZaMkU3bGo7RihAb2xORF4ofislbDpeTGdiLl9WY2NVPy5jcGIheE4oPWEjVkNafDNiMz1jOFJaeW4sR1tqc1Z3ZmU8'@;
put 'VWRZeW1iQkdUWEhTKmk0WyNpfWJxciYoeT1RamklfCUuRSpnSHE6d1pMQlMzcUxJdzd9YywoTlBXVEJkMzt7bDlyZGcveWQsRlJ+bkltV298fWZ5RDh5MHhKcCwscUd1ITNKJU8+W3hVQl9GZXdRI0xwM09zdFdffXEwNSRhTks5WGQwQTxxbHxuN2NSVSpmaDlKfCwuTmZIQig2WnRZOVJ7Vk9Z'@;
put 'fVMySGV2NXYjfTBgJTsld3RlZEQ8W2pdMnxkU0d2OzJQX352aC80WEV5dDxtQ3RqInc8d1ZLeVNiY081eVorYWVTc0ckZHpSM2g4Ok41UHZPM0BLREBPR0YxcXQhL3pXLiE6bGRhIXdnPjd0SWtWbTFbbnkqXkcsOEw3NShfW1RMT21YTFJiTGQ/QlgrWFsvfE9oQkpsOkE8Q0tPcz8kbV15cn1P'@;
put 'USpIWUVfcWYoNXJTVENEPWcrZFZ6VFdacXYmJntlWVQ2YHF2fG5GWTF9TiEscCshen5MQzV2R0hZRkZdR2xUaXVlRk4hM0xGOCpyITgpU05rPC9uaXozMztuUnpobndvYEpeKDZFZHIxXmcxTDc6d34wVmN2VC92ZD5NeFQ1Yy4oIy9JcjlyfWpzO3NPPWtfPjpOPk5+eiJiYmNmVW5FY0E9Z2Nk'@;
put 'QklQWmJNL2AsLjgzYCZKIW9raXB7fDVRT0crJUZrYSI7ZiYrSkg8UClfalBOWVVIOmJsNCRvWTtkKDZFMktkY15XS3RjKTxHbDlzN3ZFNEZ6RkpiaixyPXZ8UVs0NVM6bSE+O2A6I2d8OHRFVyRDOFVPNHNTIyspOSZbOT1BIW81SGNFMWMlWi5tTmldVG8oIW87fGQvZTVhTDAsPGo/YTQ0VmxT'@;
put 'ZyMkUi9zSjMpNiwqZlRIOldmcCZNZD4xXkhpZS9vb141JVRZRmR+aXFOMyQrfiIlTmtJaVo8VypxTlZlPl1XYVM6bDU7aTNJYkV1RVhWX25FNjtiblUvW15nP21jOFNEflJ4Vl4xU2tndmZvTSYmLFVxUi9VYHo/IVJpeE5MUmAjRV4/UVI5MjsscWw5YDYjM1tkPEtRO3h9U208QXsrRHRCW1Re'@;
put 'ST4/NWtuJCNOR1UsOz9QSix0I3hfRlRzfD58TzphbjF7dXtqUWpRY0MhV0QsXiV9aGIqaTZYOHs4QkVKdyhUJWxAITRtL192NCMoQWRsM01pJmhmZTtPJlFWKFM/ZU5pUVsxVXpGUjNbJDM4cnxvRXJDI081OXZQWXRwNVJTaDZ9TUIqJlBadTQ1aX1xcSxFdWMwVntwNjJwP3xRIU0vejRkZVtJ'@;
put 'bCwkQkBmJXNFInFTd0heajN2dio4UCt5XilWcVlDWn1TNU1ydWlIRTBfcnI5S2lGW3N0S2BxUT56MSM/YCwxK0RwSU1sfHF3PGheMjZnNk5SbTU7cTIod2Avei5gZi8yMitoOyR5ZVksM3RiNUguakkrNmx6cFZdKFRHcWRgYmhBYzdTaXVNNkFjM1hmWHIpPkd+SDVoeDVgOmFbTVVrOiM3XXUq'@;
put 'OFU3Pl15RylMV2s7c1hvRngwTkRRYS4raTVLbVY5JGVNS0h9UiRIZkxjanxITkM3dXQpYi8lajg3JD8vMEE5NS9BOSo7eVJCbWkpLl1bRUUjOCxwa2d1PkpXfSE3W1o8KFZ4Qzxzb35GRzR8dXVGYT9Id05vOEZCVEB3TzQ5TXFDXmA1KGJrKT9UekczdiV7XU5nNGhvekZuTEMzZERJVEJ7cl5i'@;
put 'XmBnWDIla31pUzV2OlE0Pk8uRGNQOVdbTjEhKyN+SFcpSH4jS2hJPVNxbjNPbSxGMl92a2RyZ3g/JjJ8N2hhNVU1cH0uMypqOHBjKUFwV3kxNk56Rns1Y3Yxc290R0RkdEVDLDNZTk9EVXZfb3FrV286d1J6QUdhUyVtaG83bTlnVDI/MWRieTc2PjdmWnVeY0RoZEdXOWpAc1F1Il5QWWFSa2pI'@;
put 'emcqdl91dThNc0MhJn49Pnl9byhZe1gma3pObS86bTRhOXJQK2AhOSRNIUZPd0JncSssKSlHYjJKKiVfeUteWmRCRThxbjZRIXRCO2w+S0tpbCV6RGpMS0s0Ui4uSXNTenF6fWNbcC43emFKIVFPK15WKTNGJU8uXW1dImg8Wy84blhkYz5kLjApSlszMlcmRjdqUkslOEN9ZXlqdHtrK0lSal5y'@;
put 'RzIrTVJIMkVlJX03fHF3WiYwWFJfWUdNWzJIZ18/RUd+cFZCZjFWdDNuVjFCQDZ8WyxgQjUmP3RXbU81SnJFRCptX15TQEJQOmE3PyZfdzZOSk1zX0ciIUpTIipgX18vY1tmNGduYncuLj1CNX42dUdFVG1KYjF6RDFsTVJkcTkuK0khQT1yeTE7RE1WY0RkSmJNOF9kWFg9L1Jge0lKd3FtQzU3'@;
put 'T0o8ZSslJUt8O2cue3NIcH5kTn5kcE5qSlZ+ZzJNXUl7cHl+UllAcD43I1V4eG5qSSpEZWQ4SlZfWTh4U11mKXF2ZisrPFs+KzdjWzRrN1d1Yn5xQj1JWW0mVm5LOys2Qlc1b318M3VkWUExOlAkcmZgN1UraUhSYzVeVSJdMXNqbjx7UXIsS2lIYlEqWmlja11wMzw4Iz85STUiI1BXVkQqVDI/'@;
put 'NltwOH4rV2R0XjVyaztyMjYxQmFGRTttSzQ3XW4ocEM0KDcqIiNQO2YpP0R3bWMzTkNPKlJOIjwiTk01PSNFYHtoKnlkIXNTYTlyJmMzQ0Rhe3QzQnV7RypfVlYwSmpqN3tZJi5vV0gyRz5qLj1dcFhNVn5aTj1YSz9sbygoQk1JOStuNHVXfkZJMWx5NVNwbW1ELmJTUlE+flIsWSR5fkpfciYj'@;
put 'ZiFYZm59bkxQUF4jNSUzRWNBdTB0THFNOyxJQXA9KWNGJjFoQ19SbyEqME9YRDE0M2NlOk1iQ30laFUleXNReDBud2laUk1mK0pBRzw0flE/JmFHLCwpKSwhKDx4KU9NQGo9cmlkcm97bmc5e2JgOWZLI0JddEFlRH1IYmgldV48X0tfPW9vNylEYmZCJHBYNGxrTHQySnBAR3FqL1ovMzhxNjl5'@;
put 'bj0hM1pFL001QiFaaS9gRkhiRElebjlyVHUjLD4pIS5EclF1dUVONz0xa0wvSll5YGVNbH1kMFY/Z3tZMyM+TWxxRFBeNV1BIyVMaCFpUEReblooV0o0O2dneHA7Z293dzAxJUZ8NSk/P1NMU35SKmRfW342fGw4VEIyaWIxTDMrcmM8JH5ESWZUaEIuLE51REkkTCV7OnhObVM6OH5nUGFQaFJv'@;
put 'Z1NiPlNkKT5PRUBbTywuLDM8alR5QD5BV11MKUtZW0ZNRmUjemRuRjp6JmVkSkJRU1o4IT5HPW5SRE8scmlKQ3tGT31XTCFsRzNCYjc3ZWx3cTwlKCY8Rld+NVgvTCpaISRhZUNBS3khe0lYeHlATEpZaT1FM1cqQUtKM2o7dkpRPE1uVUEpM0AkQCllaS5UPkVZd1tmLjBvKEIzTXosPCU6ekEl'@;
put 'cEdYcGc+Y3hoQk42czMsek9XMjQhUGNtTlpVbyVacGNKRHliKXtKanVebHksdSNaXnNeUGEmR2FKQClSfGJEX2pRO3hnTUIkNV83T0BTZTFWeHpMdjRhR3R3NihNTFltUUJQPDZ5K25rdGx9XjUlJiouejAoL2Y8SGR6Zi51dGozWEkqaDY3TnoxXTNmK0RKRmVpN1V8U2svNEltJWxnLk54SGxD'@;
put 'SGIoKXJBfm8lR0d2MF1sPj9bTkNbLmR5KXdoWkNRWj8kT25kfFhQKHxXcDlvRHhObG40d1JDJWl6fXYpfllCe2tffnRKPXJHRX5iWnd8Img/YStfSihCQUIwaCMuWi8pciVQT3wyaFFaJUE+c29FW0I+WCZSKjJidF57bFRpUHVZPU9II2FJOWBaRmkhaUVkOlJ3YX1PVFJZKWV1ImQxTnpzamlm'@;
put 'VUhZPmd0e3FQcWVpXVEySDVST2tWcDk9O2xPZzg3R1MoNTxaOyQ3NmM3UX4mcmo2dSZHYmVYeUh2RW0uIkFgSmRsVGBtZkAwZl1QdUBhSXQidnR7M2RIRVtDZSojQUMoKmxgNGtnRSR0ci97MV9FSkJvOmYlckVYb0kmQWk3T08oOCNbIWk9Ny85RTRBSD00ZWRjVV5yenhZZXdZfWsvJGd6U1cw'@;
put 'bn1xKyJFTVsmJGhBRkl9VmlYRXNNIkF4akY4SFBQUkBxN0lWJjdrR0svbVk4MzR8O1JoKH4xfGpwUjNIM0BzMTJgI2pla3kkbTJCPnlTNXx5an5denRJdTpmUCEqdG4zcXZDTzt9V3d4fWhCPThfUzBnZmtDLFUoMkIuamNaOCJ7SFE9P0wrX3hodU9XczcxXSI8OG1FcG5ibDN7bUtrMURscGk4'@;
put 'I21QdUNCO2kvNVh+eld2c0ZbbS5xKXk3VTZ8UipeOF5TSjBRSComJl9vRm0oLn19andQeT9+YnZGRHByNjpHaltHSmpyOjtHcippTWNzZTA2TUhPKDFSNU5eez4lYiFfKl5nN1RrOXZ9UCU2dF5SbDc7MVk/MnM/O2l7KSEwdCRwZ3pfR0IzU0ZSWzR0PWBQUn4mNFpIaSI3MVM9QzVVYlQseVRi'@;
put 'Ok8pV1E0V1EyPSJuejFhc20+T1owJFJBR0NvITJpNFdMdU9GP1pzcj4uXmRPJD1+NTIoT1RTVURqJDlEY0huXWZZLzx0aFh8YktSR0QxdGljX0o7Zk8sNlZKMGdwa1REVChZRCZaQ31iUUNDNik6L2EufWB5OEV9bTx9Xl05LzlVSSR7WGM5RXNoN213aWciMXNjbSpAck5PPmhvZGhfP2d9Uikq'@;
put 'N1U1XnpKMHlpPTJNam15MHBDKUpwZXFIdn5UPVZ9JiV4V1EqLzVDZCl2QkBnIndAUE5TS2VSbnUqQjUyJkdzdUleLjR+ZiVvUSU/LGBLWTBtbjhnXlQyfUoyM0BrNHAwIz14OHVIeCJNUHZvOlJrNkBxQmEuQERZdmZdV1h0dFJBNiY1YlFPZGheQmtYbEM2enw0VkZhMFpJc15aRHB3PDgqaENB'@;
put 'VTk/UmdOI0k9OGxQI0AsZClPOTJHWkBySD05MDpvajFuRm5yLkVXNV0mQFB0Pk0pKT0iQWFESF1TJWozYlsyMG9WKTtROTBsN2FsPzV4MTEzJTNKIihjOH1ud1lwMmMmMiZPI0hoekZgSFV7XTNCOmIzXiU6MUt2NTw1SmBkb2FAU3chTSlxSzA0Lj04I089Yls9U1dyaDBIY2ViTCokVTt6Z1p0'@;
put 'XnJCd2NocGwvPCREVnkkSSM+JVNWRkB5MVNuVzM1dFQvWz1KMjd+e1VWKGJmdVRWc0xOLl5dbG87PFJRKGNNL2QsYCxtY0ZtMDsoNVU0Ym82MVg8IXx7VFd4RjBJbWJyJlltVFdOdTBUZm9DY3lyYWchXjB+bnVwYiUvMXZWIXpJL19HeGcvOSlITlJ9bHh5VDx7UkdhJEE8cylbdC8mIiIxbmxZ'@;
put 'dWQjTElOMGg2K3NPb1JHc19EVW53biJGfiV1VFRYO2xSUnZeNHc/PmZVbWNuPC9Qc0spJWZWSlcxJVppP3NzVyVASHxdUUsoXU4mY2RtTEprVkFTTXtPLyVvK3tgTUM7Kis2NWpTRyosSCFgMm9xQURiYV9OcGs5U05Dakp2ODo9R3lvWSp6e3p+Ljp5YVlUbEhUdEJjSXBZSHtqYFlWL1d6dHVn'@;
put 'NmhdRWdLdWJeLDxZTjRwaWAhdS9zUHs9ZGNmWWZyW0N+VDR3Zz9fdEpfWnE1IzQzQkd9fC9+b0wvbUI5JSh5ITR5V25SYnxdVipdXTJqK0UsOUNnZVEqJW1FKlNPKEVhL2xwOCYyb3FwT1M+bj1HN3ssa2NxTD8rQDR2Zy99fUN4ek9+I0UhL3EmNzJkQSwuUyQjMmd3bStIMkltK3VNXX07Uk5m'@;
put 'OkF7OyFIZlNALj9QRFlQZiFHKmlKZjdLWUBdJVRqRUpHeSZ6MmFHaFVAdz9AdE5pU35uaS9GLj5AZzlfU2d2IyVybER3ci4hMmg4X092RjwhPTh7Uy44aHFhZHtpP1VzU2p0RjxaKklNJjY1OVB+UVgpfno4PyVXOWNhU3NaUE44cGZXVXNFb1Y8QGA2UUJsNTVAZmNnVipfZ1NiJVZUQmkuYjU/'@;
put 'bHdbcnQqY3ttOzFnNnBMNj47Y2FjYHwyLHRNOHVWTjtWIShSSCN5Y01yZT14WWt9KGdvIXxXZztAbjIvUT95enFaayM8XSluPV46NzdJRml4UXtiVUJDLykmKWs5fjZ5S2I8PSx2LkxnWlhqS2UwW3xXIjleNmM6NnlHJn1KdSYqejJ8KHxkK2NhRT9yY2l0XVEhbEhIciVDVWtCX3tGfTNyJkgx'@;
put 'VFJpfCRBYCI7bXFhJUZ2NVlmWHxIP08+LDYoRClUdU5JPSlrNFBMTi41R1JqdWVsJiFLa1pAfkN2THh0TnteRzJrQyFFLGBSKURaLHI0SDFhaVpXMm9VQ2QyREIxOS41OHtDbkpoRmpPSDtTT0BOPXk8UGFgTG86b0dBcWk1WkNfPjBaKD9SMTlXOU5kOFpJYiE0RzAkQyRQIVRLeGVafChHYUou'@;
put 'VTN7W0Q6Z300ek0ke096NXx3Ll1hTDwpUV9pLCoqMkk4N3JaZXdnb1B3JFBlSmwsRDpoaisySmN0VXApR3dNZUpmbEAzcF4xOjZ0THBYYE4qWzZUNCF5NT1TQDMseVAsaTkhUkkwQFVPPyQ6ODU4SiNXblN2SCpNVFVKcGBgU0ddcHEqL2c/SVhHfD5tWFA/M3AvYiFNSXopVXt5bzs+cmk7SVQj'@;
put 'an5YY3Z8QXArY1FmQ0NzZV9jVFopMDojRSs2L3x1e303el9TMH45KEl4S0M5U0QzLytSJCl4TmxDOi9kPD9kLGUzc3N8cUhhPjI9byk4PjReTS9HQlolK0YlJVhNZFsjUH1JMSxuIT5qInxiXS5geEgsVjV5Y3M7KmdNKVgvazg2WzA2M3NvdE5rMFU3b1ImOFBpbm90aXouPnhhOUldXXFyV2kx'@;
put 'cmk+JX54MGxYNTk5WStlTFFFaS82bUBNRVB1TXhvOV1vXjZtMXxdRE42SS5zPHYkJHciLmQmc2NNdE1Zfjw6c01DN1IlKUFMYWVdQUNmVWdJdHUqPSRCRVpWSEBQOCVNPExXdU4+dWRzUTMqWDJ8THU9UDdFIz1CbEUhRnFhal82QG8qflNIayJ2WWcjPT4xKFl0bi8yPnUwSDhOcmluLCNqKTdr'@;
put 'YTRVOCg7QWp0e24sKVNmQFo3TXtXZnVXSnFYdG5jNlpLKiRjKVU7T1BYN25LPlFabm0mekc0WG9kL3hxXmRdTiNQLCI8Qy4sUj5lYih3ekF0PGpfbn1EWShKSGJjb0JrXjVkTF5IRVV3PF08eTBNe3A7TGpaZClHaTRAWkUyPXY1OGlBYTpJbFVTOlgpZWlJSm4uZzBhdCptMC5EYmxYfXU4MWhQ'@;
put 'I3A/SXkiTz5yNSJALyk9bGtsMDRhL2o7cGJkYm9FSEN0YVZEKjwkI0MqLDMqUjk1JDcqL0RAUy5CNV5dZnp3eD1YNnlQISRnYkJONlN6IkQjRWdkQCs4bV80SUtJZFtzbyomUHA+WFoyXmc8THBUP2dzUS4/WyRsWEM7Zn1YdmdMfGojbXY6Pk40RWAlbX01Y2orY2AjMHR+IWFrcWwkL3F4eDg3'@;
put 'TW5wV0xuO0tGPGhaXX1+QUBRLkZMdCVjfD1vUmB6Xlk4MGRHfW52TTlNOD9JLk01cFg2czF7ZjIzZnpMKihSWk1GITRrWHZ0eDg+Yk1GWHIiOmpwPFN9ISlaTTRRQk5jOGMxTHV1VVtKTTUqei58I3pmMndsPGwzUVFvSyErOCpDNXxaV2xFLjApOG56UE5LP3c6W195LClIPlAoTF5Kam9wO0Bq'@;
put 'LyV0UHhmJTt2WnBgPStaSEI+YCpkI0M+Iz4rVWd+U2hMfUx5P1IuUVhefSYuVGZdSkNRYEBaOmBELFNtXT9tSkAzMHMpRUA6JEI8SGZrSk4/KjFNYV81IjIyeTUoYjhjZm5vfDxIQl18IyxtcTZsJUx7Ryoxcjd+KkFSIyFmPlAxZ1NrU0YqL2ZDdH1lNDc2aTo2bTw8VW5rMzFhfmNwZyJWIXdD'@;
put 'TWImNm1Od3pEQiQ9U0pVblJsPHVqIUdqMWQ9Kz1lN0BuKStZeVk+MXxiQ3s/JG88bDN6UnV1R2pqaj92SXgxfHd3LGcrUTlZVkd8SllaclolcnlTYWN6ZSxxWT1EfSw8Ty83LmB0TWIpbmM7KSZTImgic0NndjspKVFiU2BDY1JZQWB1LHd5dHBbKDw3dWA4XTpwRUJMNU0mMCkqRXwrSWBaRlJJ'@;
put 'P3lXbyp6NDNHamBhfiQ7aHJlKFYhSmZVdysxUkMwJEVbZzNuejdmdTYuQ0BaTXw9W2ZKX1NnUzklUEVbREQoWFMrYHh6eGFabk5raUJEc3p5enRoYzJaPDosRFpMc3BzLksrelEmb3dNJUV0Oio9eks7R3ApR0N0e1o5VU4qYjNieH48UWlHUnJdUksmWndSTz5BdG47YTRBTCtLUHg9KUVXXiNs'@;
put 'Zkh6KUYid35DKzIoSWpDN3Z+fVppWT5LaWRRMlJ8KVMuSEM5fiJATWJlZ2p7RHF+dnp8ZiVpS15ZZ0ZgaylNTE17NmV7JG9JN0pld05FPnJrYEQ6eipXInNLW3NXRTYuZkUvSk1IS1VibjQqRil1YypeKl8xcnc9TildZFNuWEhtS3djSDBfdHs0KTVWIj45NCl8TjNNTmIzQTJVSzs9eUo4VDIh'@;
put 'IlZlTC4rTUpic21MSWo8SUUxM3E/c35URGJDWTNfPTBDbzJGPW5WYX5GKHc6SyheLzE8bDVHVmxMSXY0WHg1I0NUUz1KaG51PURYOX4xPEJxTmh5aENNeHZmY3QvNTRxQCZ2SSJwNmJdTVF7VTAvRiVyTC54bk13PlR8TlYmPHI6R1drZkZ0ZnsrbVVIbX5pMSk7bFtCdSZgYXtoJERnJFl0OjMm'@;
put 'TFFyZmEkZ0FbQm9LfmVUO1RqWS9Udi5YZSFaJUZ2ZCwqSklWSkNQJlVtIjlbZnA6N3soIVE/L1QyODBgLmpUOWxvZDF6I214JXU7Nn1ZamxpKTF8ejl5a0YpajZhMWw1OUlJNG0peCs2YmYialB8MllKJURCM2I/aCNKKi8xRGYrQ3dCITgqXX5AWlp8cWpuUH1TMz1CIiU2UUMrTi5AU01JR1k3'@;
put 'N2tScUIyP3BfdzhzMkhsQ2Z8czIpcC4/fDJnRk53WGBVb0M+ezA1KDJ5fT1CcTY7LDQ2MVsuZ3NdYW5PQkwoKkFlS3l3dTZxPiw+SF9xczd7JS5ZIlkzY1UpPjwue0s5R3ZnNktpb15pTl54PUZ8dCY5eXdHY1hmJWpTN1FnS2lUUywyTFYrcG9fL19uMHhAdD1jKTc9P1VKVG8qVng5S1ZNMV9L'@;
put 'Wl1zeXtpNHcmfmRnUmtQUWVqWXk8Mi44cFZRL2JXKy4pN1BWUnNtKiIhKWs1e0pKPStVVUw6Tn1STks5NzdwJC4/cU5pIjg/UjckUzcyeFhkUjIiTS9jI3hiSjM/Qy5iITk3UXJaTzhUK0J9XTZRYj5iZS9DY3ZwSzh3QDQ+XlZeIWkzbFFpRz04PzM2RHxrNzdqeHQqd1BSbVFUKkleTEVtSWVv'@;
put 'cjZxKndodysvNWQ4MkFKSiIhaW42WVs+c3ZTP29RSEQqZyw2cyZAO0QjQipGPChzQUZ1Kl8wVChkWztNX2F3eytZc3dPNlozeWVSQ3gwe0REdDZ1WU1UeTkwTUtWTUQ3XiNQOzpScytvI0w0Y2xpRVg5M2lfa1kjNSMmRylCKEVOMk98ZTc2fkdSV2tvRSJ+KTc+W1sham5sQjw4OUtNMV55NT1e'@;
put 'biNARlhoWGdebSxPZHVDWlBoTlZOdzYqe15hW21xZ3RhZVZaNjxUa1lRUU0uUmBBXV9RWCFYR3c9W2Y6WFllZDxBNGxbIzJzPztJeihzOF1XRyVnLmUiNlFHdS45cH4+JFp+bFdFRWd4W007PVB1OlVMeSFARjUzNE1Xcjh9YlBmV3E9UGJZbn1ZKCJfRyRteDFROVpOdWZ3VktKTFE8fCo/Wl4/'@;
put 'WEVDamk5ZDkzels+UllyMnAjK1J8P0YwMih2QT9vWyFZen12NCwrSCFJW10/ezRDQFleVkJFQjR8KXpYLDNgUyFOI111dn1ARjkhOzNKYTJkO0Zna3ZnUHRTOHhPMkxYI1MyblAvamUxV1omKVlzZVpjZlFdUG1kfGgrZ1NpTThJJShkaFokWVt5fkFwTmFnLEtMbFFhKWdFQURlP00sUzBlNTkj'@;
put 'eV9bWnB8M3FJPDEkOFZmcDw8WW5iPzcjOGVeOHk8Li5sYXFjL2glMihXPyt1RmE3Ty99amxqVW84IWFTcUZseDwwREVydlBnNml1Rk9QUWpPOiIhTk1ibTQvRDB3Q0FkKnIrS0EufFA3eyQ0PEYhND9pRj1mKFIySih5ZSMlc1V8VyxqYSJCSFE5TU1teTpCZVV6PEl9QW1jLFUuVVdULEkxRG1T'@;
put 'cnohP1JpaEVfKms4MlR0QXl4d3t4aU98MkJDWjhuS0MsPXA5YHl2VDp5KHNmSCx1Z1ciZEJnLip1cWVZTGVPak8/VjNCQzNgPCV7IU9HRi4yfExtQUkhLmhhV29YWmdRJklifWRscXk9RHomKyR9KEF5cl5zOjNfNDNNRj07I0dITi90U25eZj97PXx3KC57YGoxSkxLYFF+ZygkIUdydjkydDFq'@;
put 'N0dtUmBDUiFIb3M6byV0LnpzZCwobmo7JUBdPz8wSl4pNUM1Zlt7QntddTAqdio3Ry4mUlZsTz4pWUNsOHR5LmBZLHpkY2JJX2J5JUl0YXQ8Vm5OUzN7XlFEV35oL05zJEcrIW07VT44UkdRSGJkUltsfTUuYS5SSksuWmNsJEI+RX5XWVllSlV1JER9WnN3ekV2cmFbY1s9c3Y4KWBhZTxvUlRL'@;
put 'IyRMVH0xbFhzZlNQMjhsMmJqYlQ7QHN6dV8iIUtQYF5Nb341UCtNaHBONkUiQUw6aWd5bSMpZDR1OCVpOlc7SFZtTnouWi8vT0FHWytkSTB2JCghJU1xVjFuVU4jbyglKTpFMEVKMWtgRiNLa0BUY3UrNFU7b0lLMUUlXiIrXlV1fVNpVWpQejxNTDpKVHZoNnVfOD4kdFVqaV4mZCVRZEZHQHxp'@;
put 'MX50IjRyLkkzU1YpLlIpWVR6IXRvPnVAS1tffDk9K10yVykxaXJrZDYwO3woX1lAJGlTIVRxWyZMTGp9Kykrc0NlUzExSk5IYSlfNV9zIzY1RkJRTj4uXnVxdEI+Iip0PSlOMTNbR1FKXnRhYDtHTW50YX1kYTkmQF1aY1s4bSVWWSwxPFJkeGBTblhCVDt8Nl1CMD5TPz4oVm5bYkl0NX1jWj05'@;
put 'Ikx5cXBgUXtgPChwfUxOLnNWYk14Kmh0PjlNNTI5PDN8amw9ejNCQnlqRGAjfGVGdjd1ezpWS2RhTF9waUViUEp0IWwzU3UjeCtaQlAvalVGJlZlWCpKY087diVLY0NoXjZkJV1VMGxaXUZNUSRSbFMweSpVW2UzTWFQKzBMLzlVVFd+TFtYOEYiQWk8SWlIbXZUIzI8XkByciNZXWwsNH04eDJ0'@;
put 'OzQ+YGQpSFc5Yld3QmVPSCoqenRHJTpQOHhWdXI+YUskelVvMkskaiZ7Jj0pNUgmS0llZSM5cjRUPytJZEJIYm01OGBHTWF7KCMuXypiRyh2dVMiNkApX1t9ejFsc1R1O1o6bXRoPUpDdSwpUFoqZioxfXQ/ZSYoenF4KlpgTDptW3N1bFU1QFEsYTNReGFpWixSUkJ1YyVabn5wTyExdEVgRylR'@;
put 'NUJAWmp4aFA4TzUkJUBALHBPTiZ5UVkweXtOSHxQdGshJnpVRGRHZ2ZMdFg/SEZYM09aPmF6Xk4kcFlPP1Y2R2U3T2xuZXQydnp+L2pMLlEveFJCLkxmKX1HQGM7IyxiSjNBZTtufFczXV5EIn40YmhUWltFem8hczpFSzgpfXh1LileT0BiKXlLQnF9UHhCJSQ+NH5Dd3dXMFhEWDBtaEJdNGZx'@;
put 'XzoxcVpyMGJkfEJUTCllV2ZFelJOTix5am1UXl8rUnhyUTRpLjpZJmAmS019V2pGPC5qSTxQLFFXeFMsNENvK0VPNFE+OywwLGdiKW5jdUBCIk1DcyJbLn02fDxkK1F5ZGdVfU8wRjw6MWxLTkhGeV56KSZpQy4zYVg8UyV9Z2hLZFVmeFhpSDAsQFguMipzJHdzLk0pTTohaFddWXVrLG4xNk45'@;
put 'L3pqTSRdRnFBcGNNa3dnQGYqfFA1JVVNfFBDXk00W3klQHV4Y2B9M1hNKj1gZCJyTyZFaWdvdVBpe1BZMUxoako1bD1qPzlGcEpDR1c6NF5vfXtASVhhPXQvIV4zdXFlMF5sVnZweFMwUGkxflV0QGtZUnB8fWR0eH5SL1hvSTs1bTEkQ01CLylZM3d2UkRqSnorcV93VVIvQHgzNFU2VzhtbjYy'@;
put 'S2hzIlYzYzRgZzkiXWtdcnp0eSVkcj1qNTozVFB8fkdOSy5SeT0oYlooQGNGbW4wJnlYWEBtMyFYcDYycz1SZSx1R0d5XWV0aFNiVntIamdGUEFzYXZeNiwzS1BEVDlXaURuZSZKYmM5NFBUbShYdCtBc3tZKUdKQWoudCt4Jj0jdkhmL1BMRWxqJj0jcilQKDo+UU8kR3hhc0NYMyZ4JStlJSU4'@;
put 'OyFhLDZWc1AqaUdOeXhuUWlxfGJdMS5OWDp+OzdbdSJhYG0uOm1nLGdHWk5GcU05O3NGe3JJVilxKyJGOWUzTVJKamV8LGo1TVUyO2AuU1c6ODhAN2ZsWmwuNzNiR0I0JGVkUUJmXjRUND4+JEp+dkhVKFFxIVQvNylZbVFAU3pdMixGY2cpTlQ2VXZGXlQrT1tzRnZMNHVwOmNOfnxQI0w5VWFd'@;
put 'ZTJhOFA6MmguIiY8YWtLdEg3dC5YLFNBOmxYbitkNmRQajcvITx2SDNVfEp7MCVCZlVbfXRoTmckQHVCeVEvKDR2IyFWVDt9Xns9eDsqTFleJTgwX1NaRGR+bUUyanpVbl1SXlcxJUEjbFFMbkJiZEtrIyQoazJTUGBEPkQ4MG9vYT9HSTBIdz5FJDxIXztDWDRoSWcsTEtNPkptX1A6TiFYcmZB'@;
put 'aDMxKGlTaTBQaT4mUlM/e3RPPE5laT5LXm0xTDhrRXR4d1RmIy9iJGBFMUpBcVhxZjdlJXhdekkhYlorT1Y7V0wmVTFSVkxMXStDSzUveiswNzZFend4Pms7P1JVQm5pIX5Vbm1xajt1cWQjKHEpQD1kd11MJmpsW1kxZCshTnFHdF5zUHJ8dklKbyJyWWpjbnkoNG1ZKDRVLGZ9VXksOUUpSH5J'@;
put 'OkhAM203K3tRfWt9JVU8OWRHMzpVaitDfXAqZjNaO3xhZ1twdkZTOzQyOltXVk0/aHwpdmZ4N3o9MGkxKzArcS9mRFRkflRQYnMqfU0rYl9oKF98W25Ld2w4e15tVmZXQGRzYldhK2oxUltSakhsV0MyIUUmV2pQOXBJeWx6ayhGNWpDRDYxM3FSclJYR3hsXiZvLkldbE0zSk06RCZtekZOeERl'@;
put 'Z2hDcnx5XmwqKFNyaC95dXRFajEvNmFLIXtDcSg2eXZdcTBDQzhRSExMNnMlU1dXVmU2Z3N1LFFoPkJ9RDowKTlIJTtYQi9HS0lTd04pYEhiVSY6dSNTMn5iN2JQfW9uRytSRXFsPDpNOnEhIVgrLzppM00uPDZ0enFoI2ZSSEJmTV95dGxvfWM0UFZAI1ZLT15vbkNmcXE3amxUaExVKndYMGxd'@;
put 'fT58eE0pYFgwTWJTMj59dmd8TWFRInh7KVNyRz9CSlB4YnZjSSUoXk50YSxlR2UuYW5XSXRUQXZwODlnSmpoVjhgK2ojdzVPb0F1T2F8UTpjRVtpayojXyNeUGZVbnRFNk0pRCRpW3V4I0VILi9AMmBsOkBlXVNxXl55QG4lKDIsIkd8b2c+M3EhYUx4Ojwoezd1SSNtYWhmXVgxMEYuKXNTXnxU'@;
put 'RD9YW1s9JnF3Xj5gNmgoOD5KRXUsLDFvTWNxan1aVVU9Kyk5dzlrZ1N4MEwqNTs/Y1FhPWB4RkhiUCJuRiNnaEJAYTdyOG5Ma2RWcjFSZUI2X3xZKEdXTVd9cThEdG5JPF9iW0VbZSUlLCopJDBuXk0rfTRAOj1CJWNTZDh9ZC56UV4kdTZ9RzRFeGlFOmJNXiRTPiM5KEkqezszZW02Ik8uNk5H'@;
put 'ZWhZbW9DPFpSX29xNitlJWsmdDliJGU5cywvZWBSe2h5RTdabXtUMWAoSEYpOHZWXWQ3eGk6VXxCSltOTm4mLjp7SSZieU4oQm5odFJRTVlKOEN5RyYhUWJGL2tZdT14fkdfcHZafj9CVzx1O1ZPdTVUeEdLZDcxQmlVQlRTPVcle25WfERXNEs1JEA9N3xVaz9pQUU+TGs+b3FLaXhwQFJZQ1RA'@;
put 'PCY8TldbdGNPPEpQbkJvSVtwTXZWaiNwWyZiXTBEbGxSN0l3QmhtOExQTTl+WERvRmpWTjQrL3tfNnw6eXJhbHohPGZCUiFNa2BUdzZXMG5COn11Xl9yTVQoej9Ce3FpfCJBdEQ8YkI5RGNeel1LblFNXktzST9XQTN7bHhneU9qNjt5O25ZfHRTIT5+aGA+VW8iYXNSdENHTWE7PzU0VTRxWkRN'@;
put 'alR8RF06NXR2RDJAZktqVXFtUXo3PEIpTTt1cTN8OyYzMW5Te3doPVZ7K2UrUEI2VzRfMVJsUjRrdzdaVzZ5Onsufk0+LFFqTXgpUFN1WEopJG5uNiJeXkgxYFYlY2VmQCF9ezVCOV1pZClrImZWPUpRPiVUSzckL2N9RGQ9fSZ5ek9pPFZFOiFMLytkbFU9RyZlW0MldG0jUyxbSl1hdD5bdENR'@;
put 'TXlLX1YjdzJjczlDY18hNFEqPCwoRjRgWnFRZHVDMnE8NlE/XX5KIWdgUiJsQkQlIlVxck8pbGVKRDI7UXEhXVdmRDBlWjNkWFRjW2kvY2olZyZHdVYjZSFdUzRMbXBVTlRlclBOWXFMTE16VX0kLzZGUl17VX1ZNDBLSGA9YkEkSEFRYyEzbU9NPCtoXSM3NVgvVHY+L0g8QD9iaU9iUGVuPXlH'@;
put 'R3VBWjhKeShhcmhFXnErUXtQMmpqRixLbExubHM7LHddOXBid3hkeHl7KmtyYzgsejIiYmdkcmUsWmxIcy8xKVVYM35+Y301TUZCWz4xTl8jbGVtM2AwMz8xVWRuVG9NTnc1W1lsXUFhMnlXR3oiQV9CcWA6OndzJEN5Nm1VakNCQ11DfGdtPHRRYDlJXzAsPz88R2BeYD0hfm9fKSlENkwzSXlf'@;
put 'M3xJeyM2JTRBeUpTel9oYzBtZ1UzODpXInVIRT9uKn4uIVQzVTEiRj9vIWJzSHE6alEydkF3MTVwJVtbbEw2R3tdZ2ojam1zOXkpSmBzblAoXXAvZU1TZFJ0fmlEQERxMko5VEB8cXx1YlUjWUpzWVcxeikyO0xKaTZjSnVldys2NTZwOWc8VW54RzUxR0NDNEk9WkBkXV81RiVLVWNxU0IkJl4p'@;
put 'I3J6SCtuUz11OmJGJlc2MT5IbU50V1dQRThQXklXSWR2RThyWV5TI3slZ0hNW01dUSMpTUJlOVhoVS4xKElndEpNM2t0Xm82eVs5bFFgbXxrbys1KEo/PC9YY05PaFU3R1ROYFl2aW4/eSxyfk1YSG1OXXNCcVsrW2Q4aVN9ZXJeZChAKyw0dUBAN3BLS2E9fDI5ZXR0KklMPSpVWzdtNTw2K1lT'@;
put 'Z2woJWRMeH5qck9DLmQ4Vjx5THkxNUZAIn5WRlYuWDBMVipQKnQvLjpVfGRfQDhCZCtMSzgjamlDIStXcHAvTFIpRHlFIlF4Iz1ENjs8fjp6Z2NUeVduQ3RPYmREUypaOCgkKTRndV4vOGN2a1BOUWw1LD46JVRNNktNVjVnYHNKLj9kPHxIQFYuW3gqNFZpXnwoTXNZbmo1eHlLcV5+RXp8NixF'@;
put 'Q3FGZCpPLyV3Y0FtWkJTfkQzeHxxKkRWb0NTMyh2OEVlMUpvWk5zL2tSMUs3OXBqbiI5PlVPVSVtYUFdKU5nRFRpallJJUd9Rk08XVlENXQ7d3Ymd2JVRmphe3JhYmJkPCJkI0smJDVRQFB0fmxOZDg2Mk5pczo1SzQkPWo5dn1eQ3cvJFR2IldNIjpHZSE6JD14VnFhSTEkVz4iY0pwLzpIP20j'@;
put 'NkFITzsxUmI5dEJgWlhseCpBbjg/Z294WCN7T3AhNWg/YVQvQz1dbV5jfkx9JSlxcyFidH5hJDpgUlZGWl1seXRwQz1BL2IhNEIqUFZRNCF7QiYia35xQWBlaX4uODBGcnZmJShtZzVDe3YsX1Y6RiteOX5jI2F5M1Z3N2x6N3w0c30rOisuWHFJU1EzXiRTSjY0bXxKeklyMDY6dFMvMUEiVXs3'@;
put 'KVk7LFV4Kn5QMG5kS1BnXUQlT0tOU2hsOmo2ezMhOnxlKU1LXzFvUDUoP115LyxRcUc3QmlGcU0+N1U7cCxHWkh+PjtLODo8aXUoPUg7QDN4NCVxVzxxPmYxbS5ZRVhUa0xlQWBOYGFQIXM8eEJTV2F0Y25UZ2FUOHNkZkArRSIoMHhOfmZtQExvSDgmOVhKbEcye0dJQSJ4JV9vVkxUKyxaNzRe'@;
put 'QGp5STEoSXg8ekFnOFNwLFl9cmkyPCtoUlsqPnYoYkZAZE04LiZeJGNuZlJJJlBlREldUzJGczQkdDpiIk5kcFoqRFFKVn4hfFQ9cXwsLFZEUGE9TlZ6I3FfcDM0QjVyU3dUJDFRYHUhZmcoZGksSV9TQVNwQFpXYil0dWwlbiRDRXxLeihlP3s8ZCpja2VFPXd8RHlRW2hVVX5pVzJ7eGxYZ3Bv'@;
put 'a2M8Sjx1JCJLQFFBKyRwPT1yejhDdWo/L0svbCxXdjU5PntuR2FmbH5wdi9SRFFHWzU5YEkwPDhaKmAvamh2RTcrKjlEb0xnJjhASTBfL21gc29WQUBWZWFjLztqTS5AXm1PXWwkUD5hYWdFenBIMmkiI1szaWAvU0M/MXE1dCpoZEFqQXdlIWRkKH1MMnosZiVLVFkjJkNRIzBXMnpdK2YjTWwz'@;
put 'b01dckRncSY4VH10QEovWihBQnt2Ry90JjU9V25eejUqaV5XXVVhM3RQZHYkTDUwQDhDajZ9ZSl9bmM8Xl90LjNRbntiQSImbzBQTmlWKXlrUkx8Yl1KLjJ9LFRPMGVDdyVkUDwsMFU9eGF9MWBgKWoqYnZzQlFDNz1QQVRIMXRXQHhda1VoO3lqeCRaVjlJKTpofWVbYV1AVGtNO2hIUn1jMHo+'@;
put 'b21xS2cuV2VZLm0uPX1WWmMuTUw4WSE5W35ROUVNY0lPN0whQmxZQ0g1Yk9PJXRRK3BhPEVHJTBOa1R1Z0xhaHpoa2YmUmN6IzE2N35zVyJDOlNLSWJvOlFuTHBuTTNSaH0jT199KD1SfWMzWHElfiJROlk0ZysmU1RENmY6WlYxOWtvcnU6YDZePTl0VkYqRVohOH4semN8d35XbXREa1Y3XSN6'@;
put 'OEJUR1NMNylRKy91bzVgOSQ0JThnOFI/QWdTPjNTdG5bUl5KTUJRKS4pXVZjK0svbHdUZkNaYjdOSk9mJHBoWzlBSG1DdnZEKz5banIkWmxmZ0NbbWptZjhhc0MqdlZ+SExbVUdmckJmfktdTSJNbCteeWM/JXhZOFpvb11wXkJdbl4uVEF8eD9ROF1LeCNkU0ZveTU7SiZOJXR1V2FzcTwjVTs4'@;
put 'VnB6R0ElK21sV01AVzNEbGF9QntrNiY8ZFRmdy9uPnlqeWQyZUBGPVs3KmkzcHZXPGApTkhjTV8uNURxRyhZPjlMT3ozVighKD5pZl1gakdNZns4MDwxTVYzeUlgaDhKSjYvVls/MzFkUjlBLyE5QlFpOkJbd3BbWmkuNCE7W3tEfC5OMzd3QS4sbjc0ODZHdDpUfTg0eCkyc01hUl5MTTVnY2Jw'@;
put 'Wy5sd14qZFFlPl9eY1FxMDBVWj09LFY0ZltdPSp4Lyo3MUkmalBJfEghQTlwKVI2OVlIJiQ3Q3taKFhMT0tNXkopbnZ9SixMTmRKLlk3QVJUbiN2MDBuTGhWdm9bWWpSS2ZbVGdMamBtNl45Z30lIzFyOC5JKCs7PXM6T3Y8ez8zLltmcUJVTX00L0RgcDw1Z3x+b2ozcm1bazBtWkk3WkFpPk1y'@;
put 'QlAqQ0leL0E/PVFsVkNETEMqd2BrO0ApMU9CdChwOkRSaz48QSR7ZExEXmAzan5qQ28sbz01OlNPREYqMz9xeVF7fH5XXUJZJDJ4dF4pNT9QWlFIcj9YLzAmcmJSd2JSJVMhZz5MRihGfkNvVlc2YUcuRGt6SWZMZzdnQUZMcTRUYl5Hd19xY3VwTUgoUFN3ZmE0ZyViNVBzYSNrbmlyMVk3YVtl'@;
put 'YmwhWUQjOks/O0I0NzU/VHdKfGhJdi5WLEovMEpAV1VWL248IXxFI2ZYR2htNiolez9IV3EvUmN6S1hmb0BbYFhgNj9AO19KeG1bMUU3SytAIUN2SmNgcE07ZntARy4kVjszfnE/Jm50c1l8OkZrT25EWWxBWVAsTjdmQXMoQjkiNFp0bjcqd0A3MUMxQiVFZHZGT3BYIjU0elkrS1FiZHZMbnVm'@;
put 'I0ZdJjxLOUkzJUVVbSZ7V0VRcHVCKTw+cDt0O25kcW1UeipbSjZEei40NWR3JDdAUz5GJUhmfHdkdG99RGZNSVBtWU57VXVaJTx5ZkJUI1ZCRWRMbDFSYEJdNEsuQTdyTnBpO3xLZFJ9USQ2WmtEMHQ5WE1qOmpuYn1adU8oJU10QmlmNnRbQDVzYiQqQzxFayJ8OTMzSjkibWkqaCNRQDkkdD50'@;
put 'dm98YDsjUUxNeTEzWGNlPztKWi8qZGR5RGl8Py59WUsmZX5MLHZ9S3xBTH0kYG0yIyVGIyhETCVsJHNod2heNEtsWzgyYzdsVSQ4JV10Zk0+SiFjLHVOZSNpfVFgb3tzZUtmSyJVWzksR0tCYWxDJCZwZG5RXWhMMUN0KT8vXnEpK3Nlfj1aKmxkV2VTeEQsIWZpNlFfbl9ASiJ0XjIxZiRKYjE+'@;
put 'P01nZURaX3EkSyl3T19YIUEuSyVvOnhTWnc9PXQoSyxiM1YkIU9dfGhLNkVzSzR0KiRTRUVPaVdOc3xyKThsKV5+NmR3R3Bve31vMDV2M0FZd347VUNLPzcrTCYiVzhzWnx1TWl+UiNEeCFWZCRmQ0h8RU9LWUVaOGtIOW8wVGRmX0pFMHw1ZXgvMCFnOkZdP2tZJEc/UlpdO1N0Vl0sYnRMZkNp'@;
put 'N1cqODRYQ20/bHJES0c4NyskfSQyJEMlOk9uXWs/cltDPXNxdzQhflhqcnFZOFBua0VPIWdLPT9fTTh+KW5kNW1uKWtuRiR3TiVzVH1gZ255UnlSUHJpUCp5WjVXaEBjSVc8T2teQ3RfJiVOYVk2WncyKT5MfFZUeSs6VDU8MHJgXi53SiFORD9TVCtvc2tiQ25LZCxZR11OeDtwSHUvLmJSa3hE'@;
put 'VW0ycylEb0NwfnlrSSt6L1JOQ2QoISFMLlUmWlMkamx1Y1BIWlt4R0dHUD5rciw5WGUmWDZMW3xTc0dVOC8xKS5hISo9KDNVYE00Y31pKF40ZnZMN1dJISU9dDRMLmEyOlU8c2hrdThuViorLm1CNWc3IVlqaXh3I0klYClFVUdCY30/WjsmV2ZIKTFBc2spKWojKz1AZyM5czUzWlNqMl53V11Z'@;
put 'eFAoQy8hOmgwTFFGZ01iSjEjZyk5JnhwIUhrNm9ETURzKkZ5ZWspZikrW0ZEdVE8WTJsKyZbOFoibD0sYUxNTDEkYC9VdTFOanVGL2ZaYFkpfER8LEg/dSo5W0ghOGZqKnIpPzo3ZVUzUkM2TEYsQFR4KDMja006WixWNVVXMUo2RzFMdSE7UXExdzkyVU9QbkhsYC4uZ1M+QyRJXUoxSnFxdE4s'@;
put 'V3l+Ql8kaUB2Slk6REtjT0M1NFFAOlAuNl8pbXdVOXoiPClVeD85MTBVRDFoVj1wUnEqPVl5MyR5LEJjRiVxd1pidXBIfGVvZCJpOiRLRUM2TkJAU3A2MV97QkM2eT0qYFBRalZpdCokMUxbQHdzcnJmVmtZc140SGY2bWZRdFdtcGphQDsocmIuZ0clPER4MXVQfHY+YEByYVNSUC8vRSlbXSox'@;
put 'I24/QDQ2a017YVBEZ1kyXUA4JDwmaixbT01IKEZvQXdtYFlVUCN+aF9XNn1+KEhSaDNHV04odnVTR2hffFpVNVN+I2dtZk9RdUlKfSRKcUNCNyNUelBeSWljPnlyIl5xfHd9dzJLKXQvUVB4REclTHQqP2pVSnopVThZb11CN29tT1IhLz0jV35vNW0pL3p4KypbXytITyZTUE5JU25VZGQpTElS'@;
put 'MCxzQjcuNWxDWmBVcT9FTTF9UDczV3p2UGd2P2NnfmZ+aVRIPmkvNk1hRyNeaj5ZRUhwOm5CMyVNUSVGNl0wSTErbkIhRm8pM1l2Y3ZiLm16KEBsNVJFRWtEUGFjRj9UU2BXK01uK3Moc2NJJEVXVykwUXcvRSsmfH00dT9OcWNrZFQxPWI0OypJVSgzdC5gfWNwL1ZaUypiczpESFJAbkhvMjtp'@;
put 'R0Y8Ym5xKEVLXkplLislL0VfZTgkQ2JhdzY+K0dwJStLRGd5OyQ/Rl00S2lLdXMpeVc5QlBhcyFidXYjTm1dTHR4JXA7Lm5Ic3oiPjYybCQseG1VNzVGTWhvITJvIVRXISFYQioufi4sJXoseEVfclhvcjs6IXpITkdNRFZIVWJbVSgsKGVkOjNTQjBVNUFAIVtgI3RsTj1QME0hN2d+SHlQX0NU'@;
put 'M0NjWSFmP1ZIJFc3YkVLSG91dXNLS2EuYzpNR2JAKnJRNnhLcjRvUDxzVmQuLEZBUFhSPiwua0lYSkF9VntyWHhmM3VQI3dydH49NkRVbnNpei5LdG1sTVIweyosQkZ+PyNqWEJ4UktDLFIpOnkwOns8bzRdcihzb3lsSyFpLjl4fCQ5anA5dV4+L0ZaKTNgMm4+b0NiYTxKIVQiV01JYkYhazAm'@;
put 'W3MsaEpgOjdfYWYoWD5te1AkPmBSV2dNM1duSEE+bmApbG94aXQlQ3hGb0Z4UUIjVzJ8aSRGSVAiLn48T2RrRldqMCk3SSVYdVl+M3JiKy9FX0FpLFQ4bj8oVVFiR1VMWzF1UzYrRWpQbiZzSXRWWH5ZKn1USyFXQzRKSXs0PDJhSmtmYk0vYHUiSmgobzxEaEw2RCNiIXZPa2tNaUsqcWp0RHVD'@;
put 'KTN3WDF9aFZJIjJaX1U3N1IoVzwiSHQvXWN9el9TdDpuaiQuRn07SWxYT1U6az1+PGE5XVZTWmkiV1lBbjV3dHl+JEF1UzQzcFZWLHgkRSE6O1JzKm5CLz9HSmBEY2hCZHA8eih8d35HKWlQJiorcElmYDlPSHk0aD9xIUZXaCo6Xk8vRDJ6eUVbeWllcHRkVz1Ib0kvd3B9a2UpMCEqYiU3ZUAp'@;
put 'XjdvYk9pQjhlSV9xLE11RXttKn1YVjhuaHVJZz8zO3AmUHk0L11qOENGYEFBUjNiUiI0dzBrZ31+ME5wXUohPVlHbHZUZF5PPT4oWztlM11UPiUjVS8iQFtNbTlwQXt1SWNEKWpyNWdEcEV8JHp4UWBBLFJ+VkNdIV8kZD5pZjJfdWJZZ2dWdFtYUyI5T31fS15zMVZVMWU6MD5gd3sibF9aIkxz'@;
put 'SXhOUW97NTdqWDBZWTxWNHUpam0oPGglMTh7XVt7WGg+ZEN1M2NPQz1gQWhxRXJWc2IvM3o9fiZ0PFZnVEFhYShbfD9TWSM8IU02LCpjYEFGd0tlakwyfEh7UkRlJnFSKSNGY29kPDszV1Z+ZXh4e1hpfjw8VTV9ZGVObnErViVfflVySWZTd2Z2aCpJJSpTQCswKCgzNCUua1VdTDx8PFdlWipR'@;
put 'MTluQHgmVz19L1h9SnEhbUE6UlNMO3I+eDt5eHMkJEQ1MC9kYVNeUkUoKitnYCNUZENqazgib25YP3VZW2hlMGpwR21JUjppYkIvazkwTk51OWtrRztGZnNpaiM8OHJqWz9ffi9xa0RfLFdATyhKc2dOckR+PygqWG56VmVLczB8c1prVStAMDQ0Kk15WXpIUEdaU21tJDFHSCxRLHJ3MW9MOn09'@;
put 'bTYqNip4TFUsejRdVlFJXlZtL3UiTWMhT1FsXSUrRl56TEhOdDtOVSFTNzF2Qz5Bej1haH0pPHA3QTk1W01ZaUprQlUsPFFheXI4Wy5VcCovRikiU2Qpd3FvZWk9aVZiJnNQc1g8emdRIWYwOmlzayJ1Tm88WndkWywpWTYvXy5jK0ZgW1VwLDkxQl9LJW1reyJHOy44aVlnci9SWC51NzlXQktC'@;
put 'JW8oT1NvImp2VTNaeWhrWnB6X0lseGA1NGl5ZSFxLGNYMzVHSnY0dzptTD4xVWghZU1iRz9TeThkKVRRbk8lWURmJmFBMSU6fkVuQn5xLEZmZTUoYjBudDxhUTxaXWFyQ2kjTUk3K3dKfmVLcVRUeWpJamBFI2xmYSkiIT1ESiYoIlMyWnE+cj9GUnp6QSFpTTFhSXl9eGJLPnN3PV9abFVeQTBb'@;
put 'W00sZXFLU0pMNDhVcnExNXArc1siY18+Ml8mPDw/NTw7O2N6PUA7QnQxLndycnx2KmVpQUpuUz1dclR4dSRpRmlQbns4dzoqLCJbVHVsbkdSS0NNOys/QlVDcmRPUSEmeVVIcDQlXW5nT099NHs9cGpzczFDYy9kNjlyKj1pNVBCXkhpa1cleDdBMW1pfUpsWzg+KmhlWDprUFY0VHtTVHpuTS4s'@;
put 'IypePyQ2QWxWKU4ocilsWjBPT2tHb05uWmxNMHM4XSVvSioqU2lPNFVifGleNzVWSnN4XmJ3cmF8SmNgSXRmNXN8UEdySDQ0d0IheXhpfXd9Qn1yLD5kZVM3bF13RlJ5d0RvbDkmWiVhV0U/UDIlYzJ4QzMvUWcuIiZ3cCxVZUFlcUFIaWQkcUEpVShrPjI4WS59KUE1OC4wYHFVLGxeODx1dnc/'@;
put 'MEIrWD5UWF9kS2M0XipWdDJ5K2IjOzZRNkk5eX41PGJ2QkRzZWk0ODhoelcmOkFkKTI9e31bZVFmIVlqfE1yNmElcHluQVo1akc6U2NuV3gmTFhIU0RSdFUkRj92anpgTik4ZWxmIWo2JmBmdm9zSUZYPTk7aExwIW9jVlBFMDhJZ1tvYjpfIUB0WE1WJHc4Y2sua21nWm9PMF4kQ2NVdVJzaE9f'@;
put 'V1laW2dEO3c/RkMkdUpiZmNBKHI+MENRTGIoNiVgLjdWXSVRd1RecmUlcmxLI0tmNDpBOiZSfF9dXkNSbWo9KjdPPCFJa0U3bldfQXtRdDd5SjtwfUk6fEd0YHtiS045W3JYQylCUSExL2IkUz53Mmw8MDZSOSk8TEVpZ0w5VTpEdCJMNzRQSXU+TTkpXmAybD9BLDxGMy9xLkVMcjVJYUxVYTtx'@;
put 'ZHZsNSxMYiszb1dKbGxkLFc3bT0/bVg6O31vfGRGbGE7RGdVT08sb2VGTU5fU2R+JXREdD1fbjNrKjRZS1s0Uy48LmovOnxeVlJzLE15Q30kN2t4K1p7QWQuRjNnUlR+OV5TNChjNzA5P2kmYz1VSzBKTzI5clhMMWA2Nm59WzxmcCUjUCJUSmBXeighVCZGV2EvbCFbXTA5LFYiZStzW05deTlC'@;
put 'PzBqUGcvT29vS25nNyhLTFdbK0VHKVtQTWd6Uip9fUQqdXUvY0lVUiU2RElVISVwUzgjfVZtXz5dMnwuSE9EQUlBcTJLMyEvTTIyR2lPX1NJcGZySnBkdXJTcypYdDI8RDBFV04wUzFxWE94dyJoeUpRakR1UWd4VTZLblVzYWN8cjshPnpsTVdaInRTIXFNcGpJQUFvUkBAND9HIUssWj1+QnVN'@;
put 'YmRSOj43QjBIS0cjPzA6b084d3A8amI6ek5JVVZPbFQ4Ln0kVTBoPnBZSFMpKSVFc0Y3LCtLXSpOQD0lWyg1eXFXPHUjYShIWjNmbndtQH1iNzROY0lPLEpIQ2haMy9TbV1qS3Z0aUQmYH47RW1PRz1MaVdrMGlhOjl7fVk0YF5tazR7KDZ5MkZuJT81dS5vVFYyZl5QT3NSOFY6XVVPe24oel5I'@;
put 'aXJfQGZFd0JoSFE6N0dYSCxZaVQ9SERCd342WEAqSio5PSpzbE08TTpCdjAkSXx4QT97fWxBPHYsKUEzIi9RbTAjI35yYEcvTDNaY31jZTduckFUKWNhZjA3TCJXbmpzT2hGJCpHPltdJC40P1lZIzNZJjE3V3xFLjNNPzhXOSZdTmY8ND9wXVJ5eTYsSkx7cSRgaGxPRU5RNmM8K1JnZXY2SUVK'@;
put 'JSU6JTxxTngkW1VJcUNRMkBsJU8+TVYie3FQSnB0SVtiYCFoLkV+YjRFRjcyKGppLFRSMyZOSjliZ2ozQjkuQUVIQC5OPWp1SGNsXkQsU25KUkZGTnQ2cnY7bXdUIyxKc0BHPVQ7QzNlek9pfH1+QGYvWGAkWj9yfEc8fWJpb1VWeVBNSHR2anI1XXJJS3okKF1WOj9fPllOMVVIST5CIUVsZCMs'@;
put 'U0xCaE1dcl9jdmAsQU0iQ0ErcixkJTxOU1hDOko0S3RPN0dMXXokYEkhZVh5VUUmPyRmVihTIngjc2A2VnRtNiRubVVXImd9fWs1UlIrencsVG9QXlg6Qjp+OnZsKjdGbVcvIUlDbko5fktyPW8sfHMmSnVGYkJ8OCFdP2NnS3RYQGFxcElIKEVMZXJHfi99XT5qcyJbe0tOIkY1ak1Gd3ElcGEr'@;
put 'PFV0bz8yXTxfOypnSFpVWDdPSWoqYU1vSEEzMXAmZD55ODo0fnJxWn5MckE+a0pVQmEhflpeSVI6VDZtMSV5OEhNOHk7UlZSdHxqKEtYaS56YSRmOHl2RjolPTc/e3Fvbm84RUQqbWxgRjUsfE5QTylic2ZTODpBKlZEcCxMWURibyNNbipUXl9TfDlpcz4xImErW0pydj9vb09tNSpGWS5MLH1x'@;
put 'Rjx6SSRUeEV5Y2NIVnNqbV9ze1pqZykyKjNsbzQ1bCpFc2IjZ2I3JVl+cV4oJiQ4akRHSGR2K1FQfGR6MFAhcilCeEIqQEJsSmpkencxKHh2WHY1Y1V3LmVFPnRtQ25QNmchL142fjpzW1ZtKmVJJFZxYzY4eCxHITd3ZishPGZjeWBpdE1kOi9hfURxaz4mXls2K2RBYV8vI3xEXSFaRkh9UTIq'@;
put 'JDZzYldkRDJAbHo6cShsfEk5a2Q2NTgxekdgUHo6MDV4cDBYZVNdYkZ4NEJGSShaYXF+YS8kWllUWktFb1ooN35rTkhQaCl6fi96WHNwcmxbR3VTMD9DbF4kViErZnI3ay8maWhsbEVAQSpFNUFgMlM5TCkzbml4QVtJTGUqUnolQCZKajw2Zm98KV5wVXVwP1NNcTRXKE49PXssXzo3U1BLUUU4'@;
put 'e240cE99PjRFL3lrdzdtbVpkT1AieFhEeFhYTCprWWNnIyhHTzIpTXljLzQkVkEvbiR4M0hhMj05dGBhPTwmSTgyaFUhPmwrfStEIU8yOWMvNjE4XkNOUWlweU5kWyhPJnBfOHxrP3s/U0BkYCRNR15xfThVIVAhN0RLcV91STpuPD4vUylNWVJBQUVWPWZPfnJxaGE+LE9YQkFjV11iUmpFP2lj'@;
put 'QHRCd0JPcSsucilhdjFfUEgqZ1FzJSkqeTdyQ3B6eXMxQ0s5YlIqXU48NnpaeGUsdlozY2QoQmVmSD0hbFQ8NEBsVFZhV1FtbiQ4S3cmNGRDfnpFY3NncyRBMHYrTWwvcHtldlRielM9OSooRVdXYks8fkklanxTYjtuZ1ooUTFoVF92c2NFXmtqSjpjIks+QGhOUXplI1BJNm9VblhiP2d7aG12'@;
put 'PnlycntyO05QaCNCTyI0ciIvLm9FS1ldO0cjOiQsc096cjFLejM0V2VwMUkuWiY2PVZBIVBMU3c0TUAue0tXO24re0xOUDB9PWt9OTBDP2VAYUNXWVd7QCl1IUAham5AaE5QXU5IOkRwPEBWJWc9TjNefVleYWxWMnsrVzdIMWt2dWdwfXZee3Q/Vm80Il55U0I6W241ai5tI0gxYzZ4Xn5YUHNN'@;
put 'fUdkX1QqVUJIOz9DX25wdV1HNFMpPGtGZG9uWm9eeHIhL0wxQ1d0M2IoOlZ3XV9zOVddYSZVVVs0dkh0WFQybTxvdDgidilXfnQ2R34xa3VlclFHOllrIVdvWk1CP3R5cTxbKGNUMHdfMjptKStVPVdQLnB3WGIpUHJ5T2luMC9xSG8uMmlxdigjUz88ZmUhQlpQQDQ/S1ZdNCQyPlJ6W2csbzdQ'@;
put 'ckBzJmIjJCZmWDZkPkBbVFpOR1FeWmtUXW04MC8+R0tiaEEuT0pJNEI2PypSaWtUaU9JNUtITzB5SS8hOEoybGQjKk8qSSpRTWVmcEd0bTtCXnBUWyxrfC8kU3RqbCRsIkE7SUA8aU9eYTR4JXpVVCgocVNCdHJ4LmU+U2U0TWYkPGwkb0YvWzc9ZG5kOFFmcnRnXW1ldGlSSSwuSEJAelE8JmlX'@;
put 'fV9pZSooJTlCQTYqKDZ2X0AlWCZXJDBIOlJAVjZCRHolKHovaUY0ej9XN2lVOVFJS2VbU0RCfCxlU1QkK1N5Uz9EVGt8QFlNMlZqXjUvXjBGSzJ5KSgkcGNBPmY1JS4rei9UaSE1O1hZLloye2s+am9OYWQwaGoiJkBDSyk+RVFzc0RLenNLXUQ8b3xAV2lmV34ydEkuYU4sTWtETnpePDMsSCF7'@;
put 'QntwQGRPKE5GJjZ1fGUiOjxsZl5FW1IoTEkwfjR7NzY/clpIc0EyJjR8O1Iiakh4UypqKWcobmFPMztqWzxNZ1tFWFZBYkZLLnxdcjBVPjBFeS9ySEsufH1XbTd1NVQoQXlDLm5HKVJWbjZOXU4rfFBnN3BvOlFrV29yXkZ9ZUJRPFshKnh8U0ImTDRaJXNjKjhdVUpWKV8uIS9fPEY+VnFwPlI0'@;
put 'YjBfSz9+KzgxRSlqZUZ3RyE5QH57Qm4jMGA7YF5BTTZtUSpnOWsuRlhENEp2LGVCPmNwLnA7Szl6O01SKGxDe3ImNWxXaXt7WyZaQ2MrMGtjKSZkUkFuQS9HOi80STRQIysyYzJ1TClzNkVZXyhVS3hJMHpCVTR6PVhIQzpiME1TWWJ1PjpKaF5BbGNXZFVmPmxZQlJNOmMpUHoiZzYxNFIpM31X'@;
put 'K25zOyozXkVNVmR0OVBxckRNZSE1Zk5DKjhvMixOLzYiJn5tOGVYfndqXnw2Z1ZkOSksYnovSC9CWitGcmYzMlNUeG19bD5YPXtbSFVtRVdqdzEzMCJ0LGYyUixne3BZUVFJSkZiM0ArL2hZPVduTVJFREBUe2dLd0NQL3NAYTJ1I1c2fl5nc3ovQ1phTkprPU5UPCQzTChfe0s4enhwMz9dNlA7'@;
put 'WWF3JWZgZkxOekclVWdRXXNtdmRwTWwpOFZ5SlNDTH09S2xxZl9HIn1OKm88ZTw9YXJ4JW9rND5+fSEoMDpsJTdGMkklel15OX5PI0ovSCNpbjghYXhbOjQjKDosJXhOaEAwbzFDcDFMP35TMmZXVWFjT19vQjIlNylKNylefEhINCg9dUdsMyZ1bCkvOTs6SVY8ZVFKNCpfK317MHdCIXJRTFkz'@;
put 'Jll+SEomQkVYKXE2ZFFKLDpTYSVnSTNrVE0vM3BAVF52YHEqRS4laj8hSmJoUmw9aj5CfGByZF5BcTMue2JBVmsxRi9ye0dRYjJ1TCJXXl1jQ3ZRd2tuUGljTixTYjhWfnppZDt9MEphSEkwKSxMKVAzVE0we0NbX0ZTT1hJfSk0TUpzXUtwdU0hYn10QE5ELiM9a1tVTHNZQXszZnwyYD9JMXJh'@;
put 'K1hQeVk7bWlFUn5kaV15fk5gPV5HajlZIW9mZ3Jad1tDfFN6UjAuRHkmOWRHfVM3LzhJZ31JUF5XOXM3M2NAZDYxQE4le0VnKkpHeyw2S1Y9a2phM3BEcl9zK25FTUZhYHx3Q2whUWFqM08yPj9eU19AXzgmPkxCfD5fImFDNEJzKnp0ak56OUlCQzBJZExyTDJXZ0hodWBYc2ZRITE4P2JGLzc6'@;
put 'R2kkWmwrLFtILENIQmN1dCtAJlJrdj5vfVEhZ1lgeSxkNntkQnklakZJRCVKZGFSbmlYI0xbPjxddzE6cj5MMVlGPjddUDNJMT5RQCk3aU9+a0QmIk8wLCxAZVkxNUFaPCIzPn5ZTjRyVTs1bTY2LCVtSmA6ZDdKVDxuT3MsdCtTY2IxfUZ7JiZ+a0s4Mm5PMCx0K1NjNkl7TFU8S3JEal1vOHdf'@;
put 'Vng/Q01+NEFaMT9zeU1QOEksNE8hQ3VHK1YwKUAvaT5gYUlQeGIrcD0lYCtVQVpiNjVqMTxndT41L25oKCt+OXZJclQ9U2ZHJW5qfVhMWTxsfitPZiImdVRmV3dgN1FkbU4uaWxUbT1JTWAzWFBHXT1EaWAxWTIwVjNDLlZlZ1R5eT4rTEZMMGcyYlIrK3laJTo1SiY6TEpiY3kyMmlgZ0UvQCs/'@;
put 'LmVgSHY0YlM1M1lfYmdyJTtfU2UoKSMxTDFeVVlMQ29tS1JIZmdDZVJIWHdFKyFvR0VZXzwlXnx2ZCNbfX4+aVZpc2tRJVJgVGFuS3dpKSQhMkczayQxUzMyJF1CMm5zRzRKfilAWjBaX3dxV25jcS9Ue3ZlOGRCfnJgOCImU0YiQHUkN2RvVVdkfnREQ2VJVUpgSGNRKnBNc3VJKElTYTg9O3os'@;
put 'c015bXRqXmRfdjN3Q2cqSyEmI3A5I0Iic204UWkuenJnb256P089bn1wdj84cFtZPlZRaThFR1Q5dFBHUWk4JW5XYX02P1UkOmRyL2pjQnRmfjB+bVRmWVV4SU9HZE17VzdKMVpxSXg9MTA8Qi5NSjcoalheWlVCSWhIQU1UPVZOSl5WUD5yS1QqM05pdj59eHJWOyZ8TklPUi4pTn5HKmBgK1Qv'@;
put 'cVhPZSwzO1BlL2dtTzd5Kk1COmQldXc7SW58fk5sPV14I3A5OURGfDh1XTExMz1QMUFrVSVRbGBrfGI5YCZ8OnlwZTFMOEpfKUtHMTxLI2RRPXZ1MiV0LDgqJGxXfi5HQ21iNmI6aW9VWHdJZ1BFRG1lUkE4Z0RrKH5yRylSQmA0KU89O1JOIzZ5Xyp5cDEyZlNNKFRUTjBTUD86ZDZGR21oemI7'@;
put 'YmgjdjVHPmdSdG02V05PRVBaT3ZifXg6WSk2I0cxc2Q8dkVfXTtsSzMiJj99PU50MyxOdypASDxvM0I1dzpwcUVgRFNpYGkyW3VmO2hVdzJkKyQ+UHxqVmpwTGh4WzB2WnRWKWRebE9LdUMmfnNBI1B3QE87JSVUQmdNXWNCaT04OHRFWVtJUUdSVTNXdlF6a21aXTpHSTNXQDthM0IuKlA6fllt'@;
put 'bjRDOmd1dD9fVUdOLiprakpxRWdFeml7KEpxXl9JckQ0eG47LFBhKD1VcjtlK2ZUWDJfbzArfElfSWMkN202M2lwPDZldG59ZDVGcG03Mk92WHZPVSh3VjxePHZqT0tGISJEbjFVaiR8USR0aCgvMlglIU53aX5tTWlEXnxwTjN6Xno6N3RlTHFLQ10pUG4uQWtjNF5TQDA+NSZCM1hjJSlLez5E'@;
put 'ZmkubEphRy5LVykod3xyIjZ8Tkwkc0Z7bHksLCpWKjROO0Uqa01qI2FbeUlCXzhtTEY5R09YI3grJW1kRy5JZ0hFUStwLy9SLj9SJkN5SCJ1RS5LNCx1YnxTMGk6R0NxMTJeRH4/IXdvQzAyUFR3RU5QUSNgUlNwPHhicyxKM1QyZSNJT15ZI1pTR1VNKVJoKElbSiVRLmV+b2ssV05XVWQxYlZL'@;
put 'XTR6e2NeYT5ZQCsqeXxVPX1IcS4ybX1kQj58U0lHRUhbPDNtfGlHPno1T00pUlVsWyxFOnpMVGI8bFBVRSRUUHAySjZ7WltIdmlwJEUuMU1WPiMjJk07JUI+L2VRNnhZcTkockFiU209PlBrU09gLklea3slOnNXUj1aOnw9IW1JWXN9P2V+NShfTypmd1kyb3BSWXx6bntabVI+OTlnbnZGIiZy'@;
put 'JHp3b30yJkZZJFFHJkFwTTZSYkJrNzFdWnFTQl1YMyFQI1ApNC46dSV3QDokZ0BKXW1LczklZT1tPlkwUUljZiYmVnw4QiMidzd8PV45fmNyTS4lQGk8dnlGb0d4XitRTUZvVDZFe1pZN3JNfilSbjhBK294cCtVKElzZ281PEZmPGd6cjY7LGJ4UDpQTVYvTClSWWkzMmB5P0lsalt9YFAxbylK'@;
put 'OTwqOSJgU09fL2MkTz0hem0xP3l8SVpVaGVYa1NFWV94MmhOeW9UMltxM2VPOGllL1Aoe207Lj1yc2BrIV4yWEowfFM6ekY2OSRKKDdePGpuLk0+RFRtcXp0IiJEaHR4OSZ9YTBUbH02JVE0Q019MUkxeUpEMmFAQUtYR3FBM20xWCxXYmJSflUqdns/P0BMKzFFSzExPGJ4byhYISJeNUkwYE1N'@;
put 'RTE9YWl1Y1QvKXIkZ2hIZTl6OnZ8VypFSWFLJHlSXihdcjlfSmhzIk4zcWhHaF82QENEOHszPDVCY3pXOCE5JWw2IXtKdGFkUkZDdTAybm1fcDozPURecX45TXJ3c0AsaFpFcURufkA2UihyVStOPnI2VFk4cDMzVDNiWyU7LllvYzsvaltZfTZdYk4uL1VeIVkpVi89NkwrKlM1fSRwQmg/O1NO'@;
put 'UCx5Oz9GcG5sOzhjJSpBUDN3cjgjPnlsQnksfnpgPyliQFNPND9xZi9XMS5qU0xrW1dZQWFwTkNBYjdKVEt1NT05YX5dNzszWX58PTg8S3JFTXxbTztnLll7ckdlMkB+XTxyYjohSXJfbFguLyNBWjYqKnspZ14vRldlOS9iYyFQWjJIakZ2fkkjSGlhIzFlI3VzTiJDNnsuZiJXIz5YbCRCMUZX'@;
put 'JH50LGY0fVBuS2RmUm4yJjNoOFZmaDhda01HKF10PDlJO0glQzFdcE57RFNtYVorVzo4NmRCS3QoZWpQTGt2dVhyeGRyNDJsLy5+eEI5TXB4PzpJMVQoRFE0WnBOaF04JXhYczl8QFldXypQZCQhQmNAUkBzZSxnPXV1MH1DO2dHJCtsRCs3Uns5cFVeejx7W2MwPUc5Zk9OfWs6ZEBZJUt0SyNk'@;
put 'YGxZYSljfWJofll7WyRkUSR5LCEmSSEwa1cuT2RRTGRTKko3SiY/PjF5KWM9cyNdQl14JWhoQnB+UzB8UDhXYlFebWRjL107IWZrTXkkI3ZxRUYkT0hBRyZsXWtPd1lPQ00lcVllQkhAaFUwTGBCPl1hTWlqezxLKTVkV3MmZCVWOFNPYHkxaG5Lbn11aiMsbisjfmpaUmg6YENWL2RraWF2RkhL'@;
put 'Wk92UD9TJCsmRFoxPExhflZhREkyfGt8YG9oYVtQYWM4fHo+fmZRTXhPIW59dkxeezMpbWQ/c04uYnVLNFgrWExMKEJIaWhLIU81VkR0WWIyIUkwOVlVWitfMF1CeV52PVUoMmBpTT5lX3U5QEJZQVN7fFdYPj1fNXBLaD9Tanxqb2FdQzRMbzBYZCEvJiE+WVdqSlNeP3ZFKGwwVzY+eUheYnpz'@;
put 'SC8vPWgjNTo2JGteR1tCVS5tRVZTMC9bKDZvPzhPcH09KX0/d3sxdXw6R3FRPEA2KmN8a01tQlE+RGRhVXBDOUVrQE5tXzA7RHNQOlspI3QjdHYkcEZOLjxmQ3pnMUk5WGw9PjxsMV5Wb35oTyMyJlJwSlskQnoyZnIrKn5ZSXhETGd9ZFFpc0ckfCJhfWNufkdOPFV8TDRpRT1lKEMlJEFFa1RC'@;
put 'SEM7dm84fiReWiVeeSZJaWopP0dEVHQ4fnZ8eyNabW5kK0Fjfit0OH1OVzBKOkYhfn1ObV98PGZTUC81I2E7WSNGRzddbj5BbWpQSHN1dUV4Y3cjZylPakkjezI/X3BQOTsxNl9RfjBWQSN5aTJ9eDxAV2Z+Y1ZvPD1lMlI0X3ZTS3xJeFNSQ1MoJk0yLFd7OS99NmtjYyxzVjNTfGZ0LldBbigp'@;
put 'TjtqT3thOVlHRk92TypBayZjdzVIZSImJWV4aWhFSEVLbVkzfmJlMjJIOVtTUVJkbV4scmY9K1lRVUdtb2tGXVs1Rmd4b1IkUlk9PV8uWzV1c0J7PXgjQDAyY2FgZ3ZVXV51OmFXNTw1PktmYHJLfmhwT1pdJFolZSZHNlFQQCFrYypCWVp+Ry9NQDIqSW9WQ2BCLmB6eCFVRnhHclppL2Q0LjRs'@;
put 'Z2x5OjFwV3xyfldtZTBVN09TL2VnJVBpO0ZTKnE5REVXc2B+MClGdiVFRVl0TVhEQUwrMmlZfExzJTI4PTg2MmVTOWlnd1A+Ti4waFEsdzlqSHR2NTo/cXpAUmc2djhxS1U6KVpdelh8eEJYNCU+M2hYPVRCalFRZEQ7U1d1OWRVPnM0cyhuMGV6b09SKV1hJTg5VFtwKFptLHBwekdxcXFJJnZy'@;
put 'dHdYamlffUdJPCRueFE8JitsRF5dNShoIyVjI001KEgjLn5tSCNMRWYkXVsycmB5V1dvYEx3dn12c259NUgiWn5tVT5wYVpYZSh9W3F1WHMkTmthbn5PUz5mKWdpb0Q0I11NbkhmP2FhandrNEtVfDk7N2I1QW4oOXJ5OlZCNWxwOzNvLi8uOEt2QXJTeH53KWtrZUExcnMqIS9VWkVJfl5wNXJ7'@;
put 'UGRRKCU8LHssZ3g/U1drZ2JDIVg7dj0pai4vX3trPnlyKD97d2thTH4uQkZ3emRjJEVEXWklbnNoVzZ1VjQueCNVNDUyNE9DYkJ0cHBUVTRSdm9wc0NoZHt8OFdPUX4rQFI6OnNxfFcsc1QwPkBLWz5pW1JvIyZSPmZvPTpkcGVzUl8yPzk3OWI9OT5SVHF0Ml4uLn5gOzJLXj93WltpYElialZo'@;
put 'RDpyVV9TRks+IWtwdWZbYU5oampNUjRjISZGL1V4d05ILmgmRHVQQV9EKV9FTjVDSjAscy96QSg6XUdsKSF2MiZEQVdlcTRAVDh3VHNKdTpjLntqYCZNVSQkaTBRdCpyKGNPQW0xKDprfj42Tih+Z0E5S3JzOU4uLmZifEE4aDd6XTYzOzlKem4mblk9QSxdWzdtNzBlQ1NSSHI4aGMiSnQuRGg7'@;
put 'NC9GQCg3bEFzVSUqSnY+bUYjITYhfHxTfWgza2ZOMFc1cSVkeF9gTmZ6TGtQaWRsaG58eCVOXUd3R2YucHhbIkk8Y0RHciQ5fU5Ua3IqXypdaDppPnhYSV97bzI4cWw+eT5jOzUsbSwyNS5LbFtuTVdoMkteaFZVZjZjc2BlOU1yUzJkaXZlTE12LzwySDB9T3dPWWR8MC5uaTdpT1crUGRpWW5d'@;
put 'fmgjMyVTJDpGZkQkMF54UE1TSGtmeCN8JEkzR0xXQH5lOl5eNjY/eyYpSy5TPnhfTCN6RU5qc0siXmh3VSwsIXN7cypZVUFSQSlQKlVCWVo+MGw8WnsubXdKT145YWJUe24kOGE8Qjk+fkZwY0tNblYpc1RdV2xTQXh4dlBHaTRnR0VhS0goQiQpLmYqMnIldWI1e11QL1cvTTE0c0cyRHliYGNE'@;
put 'VixwTi5qVi5ObE1pYmw8TyNJZCklcFBtQzlPYGZHblBRZlA1VmNFfD9KV1FZIjNhUUEqaj15Ny51NDtLUDx4RyomQ2I+NTp+VGg7cDYsKiwhZFRPVUphW3xIeFRJUEpmZGAiIWV+ZFE3JXpaKHFEWW9yV0JaYiN9T1tQaEooMGZSO3hrZ3RHYXVMZyRiaU94aG4wUSpsKShoQWJpT3hoOXEhMS46'@;
put 'TlBSaVROfig0Y3N3V2Z+S09RWGdDTFhnTntbMG8sJWo+UkQ0IV5+MzBCX0IlRnA/L308PmYmTSxPbygxU2U7L34vUFRgLEdeLk1lJHVGPiMud15gdFNEbU9PW3dgWzhsen4pc343YTcuJkVtWy9seypLUyhTeltsUXJsTSxlXyYpKig7YGN6WiY6PzsleTx4fn1Uc1IhTFg6WkA5PGYyWGpPfjdq'@;
put 'LDY3d28wX1J1RDY5cyY2JisyODh1eTEsN3JsWnEhQ1VPKEc3fEV7LGMxWGVAUkp1QkhvdF9OJU5+ISUsI3I5fjVdWDQ/bUh0fnN9ZWBefmh4SjpueD5teHUweEcrUzw0ZWEiNCxUKWNqM1s4RmFyLlEqPF1fS1F4QiN4ZTswPyhjWUVLaiMkRnM2e05zIzpYUCxCPGZJZEB2P2dzSHAlSCRzQTpD'@;
put 'QVh1V1YjR0FPQTxpPW5yO2wvKF9Zbj5uPDxaPXs7bC91fDJyODdtcElmMHwlOUlMJmVTKVJ2MXZpfChfZmlaZXA9XypKPF9UKEljSzkhJVFUOTl2ekA4SjM2cmM/KWFgd0Z+VXFSalc9OVZnRDdfbUJRQCEyJGtMfFc0TzJSeip4M0lVKi96ezVyM106YEksMHIsZTsmI3p+cDEvL1V4PVtvemBy'@;
put 'NkY1e0d5Zip7OF5TSXlmMCRpdShMdVt4RUo6dytTZXh9WSo7ZVMwUHVDP2FzUDFEMSNhKSZWYzZoWH5Xa0JeQlNecnB1ZDxKK0VuLGpWS3o2antvI3ZhREBiUVV5c2g5eXxmfW5rQHI7PWRSVH5YVn5NU09saDI8VSQ7WUJbTGw0UlFQSCJdaThmRCkvYm17dXI6OmtoZF5WNVl7Xkc0dEw+bSE3'@;
put 'SStVeEled2oqZTFEKV0wRDVUL3twKH1OKyxvNn5nZmBkb1cuVW4mPk1vejAsJitqVWBodD4kdT8xc1p1Zm8rb30zXTNBOSY7JXNsN0JfOHtiXVZwSCpsTlcoLnZNbjBGVElFRnpyJGZ2JGNpRUs3fFBzJTJGOVNrNWZBc1lrVjV+QHk2SSxJW0YrRi4rKjEjQGszMXllUyxpOj9UO0pxOy8/Lj97'@;
put 'dDp8TW5INDp+emhCWk9qcDhHJkprTlFOKEJDQXwwJWJnOjxEWzZoQzt+JkQrLzhQM3Z9Zj07XjJ5KXYmaEViSXh4Lkp7MTpabz4sSDlIZmgyQ15vfixSLEplO2t+YW1MU0VfJSFZYTxNZzIqfjlwaFlUdkZvbF5OQEFaNnxYLnlCWl9IeDJOOV9VdGVxU256LyFyaWJIW2BHVTpNRCRxUUNddlVf'@;
put 'fiZUS3FXUkNhVVNzL1NgbkE1OXVSciVSPHt5NGlnZU95OihgUCY2TVY/QTpjI1ZTPGojWGIvUmNVOUg6NCUmW3E7OVVZKmU9KSk7PFJSSXQpOm1Ac3NCS1JtdmA2NTVeWUY3WiJ9cyFrPV5zQl9dSGV6WVRLVU0wbk01TXRkPUJzIkZ9OU9bPWFYSE4jImREeDZAVWZ6IUI9TUthZk96QG94fGJi'@;
put 'UjMqMG82WThrfm0/ITZQZ1toV2lWdk9WIUJ5PEZaWD8wMHJvITNGcGIjT0JTWV48an0xaldTKnI4LksySG4+UDAsWF1zfExtNFFxPXNNSm5nX2IlckF9Ums2KWppaClHYks8Szw7PFFuWit9bXBucHsrL0d+fGZOMks8ejJSV3o8T3Rhe0pMZi8zOEYzcGBrezxASWRWfFUoOSxFaHRdLGM3Vjlj'@;
put 'XzdEMD5GW2g5KDYrYnlDZFFTfmRVcC57JCw3X1N0b11jLldrWis9e1dpcSp+SVAuQHRmVElbQSk8QEZ9UUQ9QD4/cUJsYWpPM15QVlNuZngkSTx5aUZiSWZ4OHh3VDttaT9PcCI+ailENzg3fDkxUXIvZCM1Ql9dQiI1Oz5gcUlhMUwuJUBsaVpdUXtbSkFXRGhaaDpTZC8sYyV7L2dGQnoqOilt'@;
put 'STYsSzRuO2BDOkgqUzxeKEZmY0coVX47amliWT5lbE5fbnBrYmBuOSlUJTlobDomQHIxZDdlbFBSQDAuYU5dK3pWOlh8a3hgTGBELElIPWB3PGY6fCVUfj9pdjc1N09kcig7LjJoNUY6SDE+TltKY2ddLG1VVE9NT2w9PVledXhSJihRY11YRFJEWlp1Ki8zIzBJbF5Qc0ovWVUqMUR5e3JJWzQl'@;
put 'U2hyLzUsLDE4ckB9Xnx5QDUsXXUwWThIYUlPMSN2TSFSIzg8LElXP3ZuIlpdflc6bVp4VUIlQ344QFZdVHphMUJLTl0zbllVSDJCcjIqfEowYnFrbWtHTiVoaG5eLjVEPis+PDA1bWFwXShjI2hwMyNlaiVdJH5UQmtnNj5yPmslISh1SltdSmBqPDA8amQyKltNfW86UTpGN1kwWXomVENVTjNv'@;
put 'LHlrJE80cE8ubjYvIVR+YyUkUk4zcnsmUCQpbFQ4YHc8Y1tIUVUvRFosKXdyTls8UU9YSXtITSk3YVouanNdNUQudzlsViQ0dmVOQlBNb2dpeF94Nn57WT5VTjc0TXgkUXgrZ3ApJW1oP0NAO3xTZWV8UjUyYGZyM1IoJTw4fDd2KUAjJmt+TEAvcFF1KE9WNHB8Ij0/Z0Nfc1ttSUU7NFRIcnt3'@;
put 'aztpY2pRIT9kfkBLcSw0InsmOiVNeVlSdGRKYXxFZHw6Zjg4OHU5MER5JHtHb2JYbWVwPyU7c1pSMVNwOiE9Mi8rKHZWZVpbM2orN3RgeUJRU1Vxejw+RXlea0kqeUZVUFdMaihBQ0hUWWpyTCpkbUpPY084dylGNDJWemBKYExxe2VwXyFzRm5Na2guczFreXtPXkYpKWs0USxJOGNeZENyUTRb'@;
put 'WDdjcUlNSjkyTDw0LnpIOSxSPlBQOEkvWHZSSGF6WD5oJWheUmY3fTpVWnVrbTFvTzFPSUd4KyV3M0lpTyNkcihNQE51fT0uL0JFVD9oNmZefj07c346dU46VWJKZ2EuVCVrYFo8KTkpfW5uL1crUTRjSlNaN1Qhc3RiOkxFSn5MWnc4UmVTeU9JbzluQFQha1FZJSFFeVhvMTlQUV5tUGRbTTly'@;
put 'LDErbTMwaUZLO3Y+WmVoZlZ3SUxNXTw/NSlTOCM4TCo7IzdTUn0xKl9DMlEjc2xQJmEqQmtpQk08RXV0TGZMe28/c0JjRkQkW28qXkNwNis1JVBwOiFpLEBzUi5KfnM2RGtVbCVxSTNGQFZKTyhuXlNwc1VmKkIuZzlXMT99eT5XX2hgW1RdX3tMayEwIWFfRF9SaEk6cTs0TD8hTERiV2ElclNH'@;
put 'W31nSlpwcFo5Nit8Lm1+Y2QoKlZKVyQuTVdKfTV1Oj01amFGalRAcWprV3V6XStWOG9wJkBDS3E9WEI1Jm1ieSs5KWx6QHpKOEF5e01meDh2cnlKeU88Q15yTkg8O3I3XUIyS15uIVlnUkJxY2FOJjw4fEhMby9YUCxzd3lvOUguPmc0NmcwJHtuLC9qRTdlWD1yYng2bzVmNG43NVcjMXNlXngu'@;
put 'PnJpMWEpPFIyWVVtP191azUueWZ6XihQejdDfjE6QTZyODtmWnVYVX1dLjJXRXFudXJbcTBpaHhFJSg2IWpTfiJFRCo4RlZYOXI/K1A1VV9YNXFOaCtTVm84Slg8cClZb1Y5MHVbKF1yUjUzN3xvVU0uWl9KbTNbQVpNQj4kfC5zd3w5ZSwlN0BfO0lnZXhOKS5fWnFVTUw+LFJWaWVdWSNrUzJI'@;
put 'NV5IIy48ZUx+Ull2ITVeQ2RNSzUrYWcySWg1I1cmTmBDU2MsKUlzNSUhL3Y6eSxSWWgwdnYwWEgqRTFLTiFrMCwydzRlOWpIJk1sd0AqUyImL3spR3hAbHF3PDdTdS9TVmNsdjVxXkZAMGNbWzhtUl1iQ0FmOlc9bF57MXcpPW5mczQkMmwuK3VpTzRAKW0lVX5WInlheG95ODhYUGtZZyp8dGxZ'@;
put 'N29GSEgmUE5tKSsqQnU8U103dCowUmEpZF83S2JKQyUuT28/JS90TTYwQlVgb2o3PFAkQkVCN24zJk14SFVaWDIrKypBLmFVV1cuaTlxaUt8QU1fNDM5WFJ4cyNaQnJMYlhkJXx9RSxPfGpbYW1XelhvOWZeKHd5QC5wYm5EO1FGajc8JHhCNXR3cm5tWEFTWyFLNmRVVyQzdkp+TlJjRXwpM0xX'@;
put 'eVhZSk8wUjxrUWNSfDF9RFMiJllWM1t0OkhpSnpNW1B8MmI7OENPRFBeaitbfSgvRjguJlpyaGt+WXJCWDxdTFJaKDZZcWh0XUdac30+KUhqOzh7dy4hY0leX3lRJWpeX3lRLz89SFoyN29Je3Y1JjE2KnBxRDROIWR6ZV40eHlLUV46anFQbkp3YitRdSp2YnNGR1cqR286VUJRdWE9Imk0VHYq'@;
put 'a3Nnfjo0R3EhLmMkSERDJHAwaXxmMnJ+KF1gQ2Z3eEJGe3t0MTBjcDF2RGp9MlVRdTUuaXR1Y1pyd1F1dHNlaV9LajNvOVUxTzRUVWs6YkhufDE2TnBdZldiWVo0UERpRChQMSg2SWxDVXc6SzN9fWE3P1BOWTw/IzBySlovWU9INjp5QihHZG5HdGIvUjBGXUVkUDMvP2FjSEMie1VRIjhNcjQq'@;
put 'QjxjTWE3YXFVVHlkai5kVlB3UWh7d14/dHVZVG5wc05qJVpoPl5NbnVjY1BoQnNXXnI+SU5ENHg+UH1jcGpNb3pLUWR7eisiIWlzRUlmNVJsWiNSL2RVIjNfMk1FUHlDLytiVnkuSlQmLDQ2b1IsZk83Rm4hJmA6V3A+S084UWBXejBLUVcjSnNoYEJfMTxGbCFJQz1WYjpaaTs4aDlhdl9pbytb'@;
put 'KzAjXWVsVl4icmpCWkB7cXUqUS4kN2BGWUplQ3FmaGBtIUpEO2pvKEtaVSlsey5GdVlaV19gdl1KSzk8TiElYkA8WFk4REZIcTV9VDIxOWhzSjpfYzJNeDArQXcxbUxBPHBpUlt6IUlARFlfP2whL2soKmg+XWM0RWJtJWlfZU1hOWc9NEtTbCxYRFkzR3V1K0JSRW5HOH0sXzZDfHw+P11vWVc0'@;
put 'NEtmZF55XUdXMkRTfWZuLnBxPz4/a1MvNi93KCx4ZVVRQWsuTXV4PU12UWNldlE6MFV9TXhpTjU+L18yUyZafjpxW1A0Mn0mUi9WPlE8a1hESWBeSzJZZzZPdEBMZStXaWRgantOX3srIj83ezFBKDdSezdsTDg4T3RVS0I6cV1FeTNBTFNqZEhfVzUuej9vI2R6RVdVbkhaQldvMit1aUZNLyh6'@;
put 'VlRqKyh6cjY+V0RLJWxkSDQ2eC9kX2xbZ0J0Vig3JjclOV1EPTZYV0pqX1B1IzsrNDI6S2ddPW1afFttYEsoL3p5aSNDJStyOW5WM3pGdHE8UHU9d316SHMmdV1+V0kudkJrNGk2d3gmZ2EjemdqXzguSHp6QGkzSEpOb2smNisoKTh+ZFAwflUpKTJuT087UVMyW29XSm5KMmdAJD5HJHZFKGcu'@;
put 'YDpXT34jMEBnWi9dfk5xVFVve0dMM09NVUBVLlJvI0hodUhqJTs6Mm1NQEpXSWxpcEtkRF9ZN2JULi9dbCVLbz8iX0lMSGAyczZLU2hkL0dvSUI7e3tvRmo3VT8mUTxkX3pyblYyTHchZTNoXnJ+TWhzVW1Me0xnXml1SHY5YEhgLig3dzcoOWZgciVLK21EVlVdWXleaFV6LE5TWChsOTVMTj9n'@;
put 'KTd9OjA1IW9yPVIuWTNpM0U1ZDo5Vj8mSi80RmFnVT1HTGdQXV4yL0ErcCh4dkRPOUcpLFlPWSM5R2slZ2ZRdHk4WiV9RDltPDVue1pWSHs5K11wT354ZXw7cjkzSHN6IXc2a2BqQmh7Tjg8NENnKXYxKnhyaUAmUFA5V0JoeDpwVj8oUFkoQjtYRTQoQ0s/NnJwRns0QGAmSz1YISgsZjAjb3tv'@;
put 'TmVGOmFAOzJlfVJJWHs/MmpeUlN8aTNaO3hZWTJGcU56bHxZTXRJYUVyVWtDYS8wRXk0d1Q5QCtxaiVBPGxDYV9Vb0JeSXReKShCR2Vhcj1RRDQ/MCR9d2lgL1dwYj9VUWddMjYicDMrbE5oMEc9dyNzNnMjRncxXnNfRzFdfm5heSlYMyM1dEVuOjhBKkJjczJVNnBvQGY/cnklOnw0S2l1OkVv'@;
put 'VSlDXTBbb09iSlFpfH08PjJiTF1NX2RQMH4+VD85SXg/bU9xY2d0WXRqPjhneDApYTlGPjBpRCNCX0FxZVhrPFs9YStVPEojU0pxWnA2fjVFPXchdmF9WEl4WERWUXU1c1FfUyEsdEw8MmM+WUFaeCFJPVYmN0F7MV1qV1ZZZXlSMWhZcz5OI0lbUH5jMkZddyVdTzZnP091bC96anp8eiN7TlE3'@;
put 'fXU+VCM4bDU3InF6NWxhcmNnPn09K0MlP3x6I3tGUCYvOEZoXWpqRTNBU2tYKzZDVmo6UipdVzA/dzwxMGV2OzBSbD4pczU4fkB5RVFfekE6ajUwYmRyaDEvdyIrNUIiW05fdzJEa0BUK3B3TiZfWEA7Q2J+Y3NgMkRaJl89KU9CTFZUTDtDT1VeRW5XS315ZDt9V0Bqd0hKXkUvJGZzaXojfVZq'@;
put 'YmNofTp8fHM+ZGBHK300QzM/QjZrbzFtfitKJW4xMD9laUdfVSUrYUQoSTMqenwyKD96aGV3PCokYm19d2ZhTjEuY35+YTQzd1VTVkh7Yn1gSilSNU0+ITtFeipNe11fOHFYNzV0c1IhJGB6cCV0KG9eS3VMfkt0Ji5hTzB+Qjt3NkolaV84I2J3YTk+aj8lJWVMfkBYM0NnWkx+eTUhb3pdI2g2'@;
put 'On5QcyVjKz08TENoOVlsPlVhSFZ9X2RQKU0wLHNZNGN1dTUufjo6SVMyQHx+ZmxFSnMlbjE9PGJDaDlrJVV5JHlVfXQicVFENVV9OnZxUTJ3STJvQHtzSDdFYmVdXU9ve0diaGtlMC5+YzRRU11bUkxJNyxpSDcuWmI5fWwlcHVlMH41VzR2NltSTHQ3fEorSnA+PjxkMENeUnZMO0tGeXVEZFpY'@;
put 'd0l4QFcyJnJlXXBOaktYWX46ciUrOzZSfT4lO1B9Kl90QmlyfHIoZ2lJMWttS1lpMiQzQ15AWFdmMHh2UVA8XXtuNChxWHx+R04kXk1yVXkvcyJ+WGgiaE5UTCRIeEBNdGpgM2hAbDNEdkVuQW9GZSxKIyFWMDhJPWl7aCMkc1Q3L0FkaXpAVSNWPEwpW0JqOUoqY0xKKSNpdDA+aVsiWT5tIm5K'@;
put 'SSNBJiVFRUB5SjFFUS9kY3NVK09eM3x0cHokMiMpQGBHO2lAaDlgXjY6OEdAQ106MlZ4OS8heDA/NnF4PVJQYiolWiNKaSZkM1BDUTdfSjR8dyFFWFMweEtrbSVnMVtCO2NQZWJSbWtfZXc5NnkxS09XdzltbURsNkwoNWNMLEBIJjVCW1JRXmI0PF5dT3FEaj5gSF8kfjxWXXVPQE5Ae355M24m'@;
put 'JTMpYD98Jl9SK2N7PFZDZWkzbko9T1FxYSRfN2NIdXM0OWA2UkhwZzdvVXwmNyU3VWxbLF8vSD9GQ1RifmlBU05hQVNCMn1UeVRfMiVGMD4oSjVMZ0R2Wj10flFGayFNbVZXeW5sPUNfNn4ldEtZUmN3fW9fNXRdPzEkVVNETEFQWyQ2TChyUXxaPXRUKm5zdyJIKXQ1Tj08ZXxpUlB2LzcwRVMu'@;
put 'Oi41d0lEfGlTZ1pReytkNU8rX25XOH1GYzdyTkBzO0gvfU4uTENvfDpPYS46SSN2L1p7QXNtamJLRSgqVXFHdmlhc2oxZG1saWtbc3VHIXA8S0tHRiNSQjJQc1tdOCNYZ315VjQ2PmZWZXVjOyN2WVdvM1c3PCtCKCZ2TD0uUzozdGs+Z285eWtMSjhwJiU5am9QRjJfL252Sjk/XT9lRVlsKEIj'@;
put 'PHgkeDpTPDVTbHZ4LGpNLy57djx7ZDk4KVZiVGdHTjN0O04rcE0zfHFeOVtYajFALnJxTHg2ekBITkdbQjFWMlJXbix6bzszV09gbUNiP1pGPyM0fXNEZG1nV0oqNDdDNGtXPjZFYj1FSTgxNTNFfWouXnx8d2lfNFEvQ2Z+UkdNKVJqQ2tRU31+PyYjXSt8ZldMaUZPTXQjPHFeTV9hVmlbS0M6'@;
put 'cFg3WCM+YUBCVml4U0tfYXlhPHZHTG8mbWRDaHpVd1p7bXJhNFF9KF1oKTBlUTlse31uRC41XXdHS1s6JVtyUXE+RjY5cTlYKEIvJGVaJFRZLm5fS1A5QC8zT2ZWajdxfClTWWEpbFBhI0hpPzp5aSVkUTFgOH4rcGtHdk0xQ3p7KmNNMmElLjspUiZGKzQuOG9SR0Y0X0UlOE47WEdfZ0c7Jkhb'@;
put 'XWloeHdpcW59IWEjVE0wak4qUEduUDBifl4/amVefEVvYCkoOXxFeSJTcGc0M1M+fltAbiJtZHUmLCg5Q09CK3BMLHNuOXAiNG8sM1BdIn4xWTsoYm9zUUgyVGJSSGJzSkdWKl5zfD4zXk5Vb3Zwdzl7R0tzV1tXLF81aXJ3OUojRD9hLlM4X1EkInVubEtsM2BxJVdGMUtUMStEKTZ4PiRsTENI'@;
put 'IkJCR3pebDp+PT9hMz5vVjtZbXlKLjEyclNuTn1oR0B1b0ZhKExoQjxSSiYwWVM+ZCt+IS89fDxydzZMcWFBfS5AOk9CfDtuZiVQQVtAUz8wZH1gKGZHWlEicTZuIzssUHFmaklUKi98VldnLCN9eW52fX0lbUQ9VClAbkBMJHAmeEFCI0gocmNiS0l8ezRBVzx9WjhyNkwwcFdFbUYyL2RpN3RG'@;
put 'NHwlYzRsUF1DTmA4NlBkMV50QlRoaCVLfl9KKGkjWnl8ZG1TdHEoX2h3byg8Ok1MdU03SjckK3gqe3Y4Sjx7citnay9gJERpUWg2VEJwRVNkN2IzViNjLlZOfmRwRkcwSV8sJjFyVF8sJkt8I0JOPnlyVH4mNHIwYjRqYWJULDlYU0g4O0ZxdT50OVNWQyYyRjgybCM/fX0peEE5TFhjKGFzOXh+'@;
put 'fXdGLjEmSWl9PlohcHROXjwobytPaGhEazdsJC9oOS5zYlgocDxPe1spYyVFLjlJfnNaTG5ralhLZ2w8Q0lFOW0rbCxrbnlvWE0kUXgzfUtzNDcrPyYjRU9UcDAxTVddbWVKTWRaaEpSaGgrOXtsfCN9bF4wRnwzfilsbjV3NnpgVzFKfHIibT1WJjdGUnR8dDQ0bWA7bkQ2I0R+PyhKanRhQnA4'@;
put 'KmFiQjt7R2xQPS5xIlgvR200USJBQ3lyWGRXdnBaK3ZtO1UvOTt4Tl55KGtdM3Q9RXt2JmllKTsxLD5CUiFrNSs5TXFOOi9nOW1vPSJCRi4/YXBzU3NQfGo/WSUvSk1pRUd3fXRqXiN4YHZgZmNzfWs+SVosTzE3cWE1cSg+fS9mejtWRz5rej86PnE5T2giW11fbUcoaEtOV0NMZi5HQFExdzk1'@;
put 'NmhCQ0NOIlI0XzslViN2YXZMT2Izb3tKKFpZfWRGSz5kKHNjR3suQDgmOihIbzdvVUhLPmQvYUFmI2Y2QGZvbGRBY2EjQjdQMWFzai4/OHkqaEJZI285SSN7WmU3Umt+cyFkfHMhYFE7OWEqVjF9W2FVcCN+eVZWVVQrIXJGLl1wJGhuMCQ9Ri59PzkqRjckSCZ5bmBSJjtyQldBU25AP1k6eHps'@;
put 'b2ghI1VlWlYoLzRsUktPRjUzUktIOjdZTVQxYTVqU18qdnZbaCo9Kih6dnlSMXk3aDtvc0dKJXB8eDgkOjNqZCN4VX5KdkNQKzI6OkFWa2RyfkAzcGRCIiUsc1J3ZiJKTD5UTF53W209UCxAJSoiK3smXyoiK3hbXUdbaGA3eyh9c1o9M1RsRW0vZSRQM0s4cnhCKFhuUEo3PDIvMDBlRDpiYXdr'@;
put 'Kl98djhKPGhWelNwOkJ7MzcocU1dcXVLO1NpNm10Un5ZZj12Kj8qcigqdil4TnxpLjgsNTpTKldTWkp4dUpbVTpoYGRoU2JNRElTXlBXLFUsOFNyY29YSWo5fHxTPWJLX1Y6R1ExNmFrNSlNc240fl90RURlY1pDQDgoLyJkck9EY0Zybm5sfThsVW1gJkcmbipQVXMkdG19QkxCMmA8XmsqJCps'@;
put 'fVo6JlRFO08xd1JPbWdvUSReJT5hMkArN2ZLV24/LiR5dEVXNF86aCVtMEc9MlEmUFNTaXN9KkJiN0B7bWQ3P2E5Zyp6dEhfZiJZPSFEOkJxImkkNlJvRXlHXSElW2Q5Uy5WTzpvbTNNVW9BWmBtdjhfVXVrY1BQVXJER0dJKz92YGpWcnZWPS4qektpcU41Ym86XkxYcUVmXVNPXXosfHFCQXw4'@;
put 'OmorS1ZTU2YpSTw9Tys0THR5OlMvb10hbCJoMH07cGtkdCpXeGRQNGtiX1Eyc28/RmdfLDQqJCg+bDg0ZX1INn09Tml1YiReL0hHbWAidns+Yjg9YyxqPld+NEFbRVolSFNqNyVjcHp9JWpba3M9PG5mX1ZudUlhcyJwaEhyeCRxcD9VWzREeDMmL0RzQjczLm4oUz11RUpIZ3lrRCJBZz58fF11'@;
put 'TClUMTxCeld2UW0oKnVefnpdQXFOZUIyWmdvO2dDdyl5IXFmUHNTYEJwbn5zSF9EYUg1LyUsdkdON119Pl4+US8sOF58dEEmQj5eZUs+eXVAX2g0MT4ibUhnWThDWDk8KklJfVMjTiVwYkpbWn5WTXp9d187MndvUlplWTZ3eUA6LGlHbGEyPm1RYXR9K1AzVH4hajVGRWVoa2hlbGRCP2xsXWtj'@;
put 'dXZWN1RGVmBJIis9fjlZO1Yze0tHM0w3PSRoeiI/fitWQ0Z7REd6K1RhVl9AX0JhYG0sZkQ1QHcjcWh+PWNZQzxqb3FRfj1sKjt7eDQmc2UkSSN0MktIYV9COy9PYWJhI2NbIl9beSR2dmFkUmJsRy5naDt1bFc5YTtgPj94RSldVDFJUGxnO1lnOGBnPUo1SElkW350SHxCVzllYSF+RVA8SUd0'@;
put 'N2BJQ3xGayFRVnU4ISlyOTRxbCQyKlQ7eEY6R0RRfnV1TEtvPHpjKixZXjRPNXJkZmVkdV51dl9KOzJtOkc0RkpuQ3o5XmhhL3YsWEhkIj4yYDQvOVhlWD5Ucj1HKW5FWWh1VGB5ald6fXtQdmo9alRCdGpteyV5SFcye3Jgaz4/KTE7WyE7Zy9dTnNmfVI0aTh9Xno2Pzp5XjtVWDFicy5EcVpw'@;
put 'Ni40a3p6ZU9idlNIcG8xQi5dZV1+N3tyNDR5WnlvcGM6ZGV3fXZCX0ZuK25SK1c4fmZCSk9PNm46KEBiI1BlOitGJms+VjYvRj53SU1fczZpP2VCOSZpTHNLZlhTZEZYak0vfThbViUhKWooNEFzK35Zb3BXRDRwLEl4cHE5PDhneyFmOSN0KUomejJdU1R2SmhmbGMhIWVocntqNWl8cn5hKyYu'@;
put 'Z01RczhXLzJZfnQ8ZzVoeD5abFtbU1BfT2h9YjJZXmsmUClqRWw4R09BfDZFLmAmd1RtIyIwYSNiL294TWZaTnZMaWo3KXZgdHkkT0o9ej9MWlUsQiZabFVzW2FOVlJZQiNrK09SZWQxNl5xOG9kaT1gfV1kV0NEQmt+RGwrfl5lJG5mUl9ha29NJmNxckFTaTdtMTRXdXhpWlpSZjJXSD4wRnwl'@;
put 'aUw2ajklZXB8UUtULF1IMU9TdHROL11pVFMha2poVU0lMjtTcjRnIW5LR2gkSDNQOmAzUUI6WD9venY4MnhwUkIlKiN7V1VNIWZtK09NL2RYJn4/IXZTMz9JS0wkcDxBcVtTSUYzamxedDxJU0lkPCs5UFFqSkw4Q1VAUTNZXUJXdjpaSzZZNUhMJEVLZj1YQi97MldyaEdbdTw9TlhOMEtDMVNy'@;
put 'NC9bWTttQkdic3FGMHxTJnFbN3pQaW50PCN2Q00yQX5xLzxUVmg7PDh2LF04SEErb3heK3E7KGpNKjNIREA7Un4yOG1YZiw4e3dTKF14cEBtenZAfnpvXT1Yc055Lmd2e1Z5b2tyZ25EMXxvTSwyVWUpOGlMNno9SVBNR2Z0RytWbTB3N3ZAL151PyxxWURbRjVTJSlCWyRvPFllOUhvcE5PSVBr'@;
put 'ajhmKFA5cXpzRWYrPnY9MipvKSFpb2ZgNV1LPGNgQlR8WjFQTTBLRyFxTXd5VG0+YFFEQ0hOPUpPRyY/bWRpOyFBOS9gTDJbYFImL0kkZGxlVkR2PGd2N2p0ZlV0fU05YGdeLDh4fnhxa3lBS3RrQX1MaWc+aW49NGJXPWxyOUpIT344OEx8MnIlWCw7KGtzXzovLlN3c2kjI0U2aC92NTduQmdD'@;
put 'SlIwXSoveXJCOG1hTzg9bU5iSiosazphaDk0KjNlPzNDUzw0dTFOTTUvbFZjNHo8QipydzdSeG96W256bjRATV1WS05NS3ZIWV9hd3dXeHNBa0FTUG9FZywofVcmVlM/X1k9aiV3Vip0MW93bTpWXVhTWT4sM2JKQT98KTZ1aCR0KmN1O1NWfGdXYlk9dFppaXN6MVcoX1BzflZXRUo3IUAzI2cu'@;
put 'cCw4XiwvcDI/UEk+czJ3fn46aWouYzBESX5tYnhtV0Y0Rz1YQ1V0K3Q8WjVuXiVAakxBWF0rYl9JPWloeG87K3ZYYTpIWTBEenlpSCUqIkx+R1hUUFBHR0diM0cwO08qSDQ2T2ElUyN1dFVWJFYzTSZBWTdiNmxpIiU3L05MbGxVZitvNFIsWSxObE45ezJBNl1IUyhsc0FsbjpjITZ2K3AlOWUj'@;
put 'KVhMTElFaHhVcGRWTzNSaStRVjIqZURId01dODFCalosVFpGWkI1Qy9MQHwmTkBjJVo5dFltVnE/ZF9yJmRwN0hgO2MkYCk3MT8pNWpbITV1fW00bls2dHhMK0wmSiQuUUI1VSNWSDRoTHpFeH5nSTlFXk5LfXh7LHwuKDUrc1ohRnQ6aXsvUVZfK09VL2JJc11LYi94Ik9xbF9lSmBKYEk1YXcu'@;
put 'R2tzfkVnVStlYEVaLlY0eSpWNE12cDN0angjckclfXZ4Sy4xL1BIbWQqIUVhWndEYVYhPVNhIVBMfTQqS2NeUlopfnNWNGZiKyJ2NDlwT0g2InAsbVQzVDBGL2EmVyF4eWJRNihvfiEoLih1YVY1ZSVoOExoKWk5aShzMkJZX0EmX28yRmV6YzRkPXcjbnBsMyIkTGJeZmxaeGBzfWI0WDg9aS9q'@;
put 'bCV3bXszclU8OzI+W2ZdejY+YjpFQCxVSWA8Vno1d35qS3p8azMuXXpyXXUlYD18Ml4+NzJ1KHZGcl0pcipLTGhLKDQqX3Bwc1c5VFddeH1za0g1dHlNVH0uWyV4Ly44aHkhd3JVVl0zajAhZSloXXc1N1ZQXjIyI2RhX3Z7a0d4YXNpS0gxOTldLl9HYyZMNmcmZmdkXmw9Y05ZKX47LiI3b1U5'@;
put 'Yj9YYVgidVA7Y14wRGcvKUpYV294fWIhIzo2STJeJV5QSGpJSG10IUBodV58ayFUXz0qWXdhb2Z5K3A5YyFAY1o4NztsfFZGI3ljfHh3e2RoTV9TaVAhK0Q0Q1ZhUzhsd1lDc31uNSl3djheb0VLWj08SiQrTCYhcFVxaXcjQXRqUVc9OnkwYiNXYjMxQmtXVEt7aXh8UFRNM3JBMUZdYUtiPHp5'@;
put 'Plt4eylmfH00MWVgalM2MyVfaFtbKVBOJX5uVTdBYUZhJlU+fnFVXVtWOU12WihgdyFtVU9afUhZZnhjcEBiSVVDJlUyTG1MaFAvXz18I19QIyZBe353fUYvKyNEb3RKeUNHSSJvb205InZDaFtmcTQiJCNKeShOSll0RHl8VnleLnEvMkxrcjJxVnQrejFaNklwR3ZjPmlVd3pfcFspVlZsOV8z'@;
put 'Pmw4PEtSLyRbVWRpT3g6TWM3YkJjODc5diY6THt0NVpUSzc9Y11COCNfZXM0en5+RV9fRThAdzM4Z2VTZihXTF1IZXUvMSE9bkt9RThzd01qcClrQXkheDcsQkhqI2lOb3khbGZIQnkhXjE4Uzc4cHpOW0hlRUhyP0hlJkYkS3YwR3pSK0B1Sl5IamBBXkY2UGxMYVl4UjlxQHttZHg/c2Z1L3xd'@;
put 'T3llR10saTR5IntqeGNJQHNmOEguOXNsPUpPKzhAVHFpZXVAcnAsWiYiZGVERzFCLDFfVHB9JTd3cUNlbUFSY2hnYXkuRGAkaTN8Qi98Y19Zc0s6IUx5fEx7fXN6cl0pUjcpfkhfPFZIVktgSmAlQSwlW2IyeXR8Y19wcDFgRCRUcX00WFpVYlp8Zk45cCNjSnhLVlAiZCo7NX0qUjBrXSEkQkpZ'@;
put 'QmNBIl4jVHM4JChKbTJ3Tn5PQ082U3kqb21xLDEoZTgmfjVxeT8uZ34rdmRneV8kYEhgPHFwZHRGeE8jYFBUJkVLIX5nSzVtcFdUbztzSGxIaXdVcCRmbl1PRWQ0KztHY290aW9rS3hseF5fWzU0biZfT3k1fChabEU3WTdONH10U31GUzcjblZUL3FxSX5dV1MiWyN3UWJUNGJvLCxgdl1RaVB1'@;
put 'Z31DPXd7O3xka35hN2Y3Vk1MMzh+YV1xPDNEMWJ8M1pic0ZkQ315QyU9K2c7bFkjKEhFbGU1YCYmOGQhUUIqOj5He3QxMXY4M3pJelFjP3Y3QFZjayx8SiFAJkY0RCgoRW5NMCZMe1hJTTBqZnpYd145MDB5IiR5XWR0KkBKW0J7e1ksRTM4MEJjdEkuaHJIaGUrQ1Y/Y2FnUWAkKlciQlZQTFAw'@;
put 'TzBVTmM0XnxPcyVUdF4kU3RYIipMe08qP1d3Yj8kIk0lT0EsbXkoTjFZOSxqfTRZTUhPVVpMLFRHcCVaKTkzWk40ZTV2YEp0KldGJT09ZGxWRkU7N21sc3pwSlJkUlszekFCLndiQWoqKWpTZ3ZAeDNxMkBvRUJee2JlTVJnISxqQTs6ZzhDbkBKSWxUYil5aCtmQXhiMWROM1FCNDhedlZQaVF1'@;
put 'KGxqUkdAIjJab0lheTF4LD4jOjZeZjx3fm8mWVAqOEYyP3FOMXIlYnkxQGxOUS9tM1soSXF1IkRsZHc0MVtxb1Q5VX0+enpjVTF6dXhSVyY1em5xfDJaQj18aU5lXVpsWUt1Mz5iMmxwMFsuQH5yXXpRYGRAbykwclU+X1JCb0YrRWUrZjphfk9CcT1QVlRfNnVzfj43TW1xXyI0MltGWk9ib2tL'@;
put 'LyIkRXJQZCgkQGpub0pbVEw0Qjw6dXIqY1hIVn1IQE8lT2AyZ3JhY0gmY0VKZWxfSCU3TVo/NisvJnlfKkxfY0owPyZjR19jSlElKXImZT18L1AjRzluaSRiQzd+SFhrJFRDXXVEaik1VWRrTXI9X1dNVzdZODJ4cU0vN0hmLkw8RncyImkvWiZxX1c0M083SnhxTS9YelBrTF97TCJwTUt1NiJO'@;
put 'WVMpRShEZVspYDNddVUjViYzITA7aElkbl1gNXdKMFFVKCltKks5KCNbanNnRnhwWTN4eXkjYXovTGlULGB3aSQiaXg9MW5PZ3tnbD5UPlUkOjoyZW9hXlhEOWtKMjdCNmJVYl0kKXI1Tkheb216TVAvQlZ3KTZecDw9V2xvSSVPOUZZTiMmJTpAQz4zUzYsWTpRc3k6QnVQJVhQdH40TXo0OzMs'@;
put 'ZkRoVHVtVUZVX1k5TV48Jk1FSjd4eWZvOlcpdzY1VW8sU1kvVlV8WUEzbSU/TXxafklCcT0/VlVFYFJjSj56eT1TODxQP1c8Vzd+TmJTPUpCMGgyMHF2OW1qYjI/eGZYK2QrJT40MFpTbkxaX2gqY181QEd+cWx2NSN8I2I3T2Zsb1l0N29mMkxmbm9LTXh9XlolKTh8USR6fVRZRytGK1s4ZDRV'@;
put 'V2RTdXpkWVJnKXRgVjRqQ0J3OCY8VVdoMWpMTGxhTyEsUk49bjlQIWEsejxHTToyVGVfXzFtMz5lKmNfaVJtfVk9SSMuIkdSU2dlfXdAOG18KzBtdW1NfG8+TXxgW3J7YDUlSixwezE8XTQxZWIpPksvT18kaHk1Z0pRZChvUFYjfkVMRUpjVX4pSit4eFMlKTYjR05tSU9lZVc3b2tEUXE1TmQy'@;
put 'L0lBQUE4TUBAbkFVRVFPN24mImJYL1lNSWEyPHJESCpodU9mM2AqMyxFTkpvNUQlSWZNaUFBQUFBQUEkQSQkKW9OdHFQRGRzYTF+VEtpV1kpcnIzeEBxQkEydFReUiRjLFJocWNXR05Lbmd6bEFIN2FKYUVRX1dCcyVJSU9QeFpWfDMlYzlvWntPLkt6OzsrJUlHO2F4aDpTPTtuJkcyNlpoO0U1'@;
put 'fjw1M1R6e1EwcS5VPEJrJkVOcTNYPDNQYVs6JWBtLmRgR1ApJmIqQj9rZCU1XzIld308W1JeVjNzWT9PPFQ5cTEvanp+SEQzOnk6IT80OU53c0U2ZEk7Kj86YjYpN3t0N1slOnF5UV1FVG8qXjdLcl0rdWxncl09d0Nqak9acmMpQ1NwcjAudFc8PTZ+ZFp6M0A8fSlgVUtsYSJ9dikmTWR0WEpE'@;
put 'SiIxQnksZmVFTVh4UTFTUjsvan4zKXVuI11yMnhwaH1zRS5Jai5IQ18ybk88dk1teCZUMmJ3RGhvKT1wTCZeJmQpb1diezg2UUtFOysxOUBxdyNCRDtbVj1OXWM2b1RKd0hKRmROOkN4LmV1b2woI1NlbCROeV1FTFpKPiNMeUI9NG0hUnBdY3coOzRCR2Z8Lnp3NSt6fWYkXj9lMCV+X3RZRXRd'@;
put 'MUNKSyw7QmI9aThLTU5aSj1gRldZYnojfDQkYDtPKjA9LEd+e15TRjkhdCEiXiUyUX40NkR9JSRQYio6REo+Tzo1SVoiOzchO3hzdVo0Qmk+QCFYeEI/IWh2bCUreSM5SkVbeF8zTDA3aE98V140Lk0vbkQhekN8TikvTH1Ib2FXOS5hKGw7e0xSOCRALkZ9fCEvcUZkeiUlPHlAOFpwUi98dSFA'@;
put 'YkU9UG1LPV9DcSNoZnNZPk1iV3tWM21CcEc9SE5LO2dLQTFFM2lLXUo7NE55dXcyb244YzZVO3ZbM3ckUUBMelUkVEtqX0kxYE0mLjUiPmsiZX5sMCVvY1swKG8jZmZ+Nk9iYXFvQS8rJkxTOUJyZTM6LihDYmIsMkRCKypLVn09dEdldHFXRzBETG5bR0NBKCo2SyJnKVNbVU9GY1kwMXc4ekVv'@;
put 'TjVDbGMpMWZnW2spL2hgMCQ/RHB0I2lMZyEiWjRXY044Sl9gWz1DXSFlO3dybXQrWncvQnFFQDRVM1szJWo9bnRRcWR4ejtpX3w6cCNiJn51R25XKlo5MDB5WF81LFcsRmNHZ2BuQzMhITkoe0RsYjVqe2Ricj5heFksdWYoIn1UTXNLO0dCNlkqazRpYyJmVTFtWV5bXyR9USkzKik6XlMkXygz'@;
put 'IyxgYDRAe04lWU9KbyIkKCt0L1I9cyM/SU02WT5vUEt7WFEpTUtgMTw5U240MT8oRTN1ZyI4eTwxa1BvRitBWjNLe1YhTTNdNiJocz07WVtiI3EqbGdVckJ2REREb085NDRRS0ZFTUguJWozX3pFMTNAcGdHQThGSGVKRytuIU84KGxnR2FZI04uMHx+ZmV0OldVayV6T0soQS4pQkp3MF1BVz5s'@;
put 'K3tfNjRaZSF6R3UxJDVYenM1VEMxLlEoVDFGPDJkLnoudDddYi5QV2dPWEAiOVp0I0Jebis4aT84aCklQEN+QTprZzBGb085JSZlKExjayxtWUVfXXBIYm0wdzpFUEYsZFhQNTB4RzJ3ek9senlWb3c0RmRATy5ZKjZ7QW5zYm1pWEA2Yl9dZExVdFYxXn5WOHh2JWxqNmc5aUh+S0NvSSV4LyZS'@;
put 'S2ZNc0NuRT9iO3JvYSImanltVDs6MER5VTcibTRCSUxHPyg2b2VZMzshSmA4cVFZIlNDOnBJcTtOX19MVEFJQWord11OTkp4ZmVhVm9NWyFwU0shTz5zYUYwL1NPbCVTMj0+JCFjI2V9Vi5bNWNASkNxL2Q0UkNqMkBfQURMQzR8QT1ZS1NESl9YUWFJcGU9cW5hcWBVZyQpN357WWpndjIpLnsr'@;
put 'Ql9EQGwsRl5LfilaQ3ojLiF0b20wYkgydEsxY0d6SzlifnFYXV88ZDh2OTtXZDk4W3w+Y046RkI1cG14eGRTemdUPFVLYmF2KkNEKVZyREJNMUt3NExDY0dnJC9jVGw/MVk2RiVxQ0Z8UTNYMW5pXyVnPlp+d3FwRno4d1A5UUdBRzdNUUVabT8sL149SHU8dlJJPjZuKTJ9S35XYFs+MEMqYU5w'@;
put 'bz5BazFvVDZEVyU/cyI1cF9mfXs/YVE0Y3VKejNXYEhAWGtsVkpQOzMlY0omX1E6NFpCKmNeZ0ZrInZod1B+LyU5NXVxVmp9WHI0S0JrfHVoaiVJNjRtQmhjKkZnUzBKKmI2TjFAVUAvZmN2IkUiR1M7bTcmaFdlNV5HPk9nSSkzLFdhUmB7MW5wOChYQGBKUSh9dlZGTlpLeF9Ya2gubGw0KXYo'@;
put 'S3F1K19uZi5TU3cjZCs6QCsqUHtlXUZSeTBaQCJQU3ArfmtnZ0RyZS90TmFDSXltfj9FIi9KPlVocWV1STBFZFZKVVUpMFtWcnRgcWp2TkExdFtIaV0qJDI2PztFVUVFT3xLS0dzYGxWe0l7bUxSSV48TUl5WyNAWlJvPEE0VEQ7OmN6STNKcnQpYVBVN00oKFsiYktbW0hSXmojU2RjbFVKfjlm'@;
put 'cExzI25LfkFxd2hDY016SH1rLDExNSNbSV5IO2V0IVN4W19zTzhLSW1tciE2ZGM+czVZO3JNMENyQU1lKF5NQnFbYCY1RF0/JC4lelh+UGZoXTxZcUJhQj0xRE0mQ2x+V303MnI7SEVpTzAvKWUqJj9DJjFdS0l1bW4lUXFte1QueGk9UjdAd040ImcpYUdEUEJie2JXM2FKYTwjKGJ+Ukkwdkt6'@;
put 'MDs6T2peSnRFRlVvWTZafWAoSHdYK05zZFoyMmhoQ31zYzYuYHlLVnZaaXlDSiFFMCQldll2cmg/WSUvJlkuc1NPeGR9fEJeX2ApYGVPVjteZXpxRGEmUmoiWk1nNGVCe35HZztCXmddWnJ8TSs7diZMZSZYOzQofVQsQlduTiV3VDYrP09fL1QjV3siRVtVX3NyU2oqKE5wdz5jbFs+ZVtKKjFi'@;
put 'O25jRj1EaGMwPExPb2VxY3ZtMFdbVlshO3Q/fUdFQDc1TnRxMEFyVU5bJGcwPTJmNjR5Iyhsa1ZjK1NvTi9COVdwYSRtaDZXUmR1QCFpc1pPNjNfYiVwTnkqO3M5eylhQGR+Z1JpZXs4YmtANiwhJEhKSilhazNHWFpNNztra245UUFbZ2F4aGUxUyRzMGJTbSVVODZyPT07M0RZcz5BWmQiOkU1'@;
put 'MmQoMk9NO2hsbyUuVUByMUhMe0haT2hRQUJPdFoyfm84TDB9YDl3MTE4VU1kT2tTXUxIb1J3Oz5ORi9TJHcyMXc9VlEoPjMuI0B9L3IpRCV5QE1XYE9oejQqbG54TDZXKD1RJm5xOThrZzh+JndSaWpmRmopRiZDSmg+VjJLbmlOMSN2UnI5aXMqWGQ/JmBTbGwxaSN2OnFUUH4wfExJSzg+Nytg'@;
put 'M3Rxe31hZE1mSzUyeUYrLHwuRmdGYm9IZWhEVl9pW3tnREU0L3c8bTdUJlo/Ykl9UmNFR2dwTF05I2QsNnJ+XlNoI10jWEg6VzpOVkZQLF1CMTtlZ3R9fW5Ob1RgbWI8I2xeeUJ0OSwpMzw2YXZzWGowPEt4NWxGSCZQVj8hMm8ubDwkfTg7LjFHTFQ9SyI3b1Z9UWJxJktvRF93OGwwbFtxdWZD'@;
put 'QlEkaW1gNDYoK1YpV2xFRlFAOW1AIV8hMHJJaVRkc2M2flJ9RDczTSpBY3czS1dUREFeWmNKdixYblVDWEdAZ0x1MyUsPHNDem14a0l5Y2I5fm9MeG4ySEBSQk08ZVtYRmA7Mls1UCsrW2VBc2Y8W31CZiVvdWkzOjchd21lNVVVJFVvcjJMKDEjXjNbRm1xL1suRSVjdUF0fCVtXnAsR319InhR'@;
put 'KlNjZlo1d0c6SnNkYF03d3Muc0crPnw2a1AlJnNOPCRWeSx6SS9hayEjaGJLcVQ5NTM4ST9LSjlmIk8+ISp6U2o/OSo1eGUuQzZebW5JO01EQExmS3NZVH09Uih+ZCVUNkBRVE0uSkY8Jiw3a3ZZeGRSRGwpKGkxb0JFWF4jSnh0aFVPSyROMjJCa2hXZ3g1NGROKVQ6e2M7IitFYW9ZZHBqeVdf'@;
put 'MD02RjQ9JT5uSGslZU9lK2RlZHs6Qzg0d0IlfWM5X11ofmZQfUgkNTthRTsxXlsyeDEkMSw7eFd5YmZzXTBCV29zXUkvdVlKU0M/VHtpKTB3Y218JjdETCtnblNaJmMhUWo4PXxFYkRRbHVzY34iKkl6dW0+ck5zQiJwVTBfRUdsOWAzZmJPRSt+UFlOSlJXVFs4eGBOa2Y+TDtbMG9JTnd0Znwq'@;
put 'PnY3VDdXOXY+WmphPVQ3Z3ZzN3BVUl5rXnZhKXAjSm9aW0prdjRfMFpafGBuPz81WiIxSC58eW1hTCE0SFM4JEZqQUsma05mfXVuQ3FaOzV7LFtyK09AJmM6OyJ8djlpPC95WV47dy9qNDFQdV9LaWVHXnsrNFcuKytgQnYzUGB1RCVAcntJIzBQUCxFYFdrdDZhOixdX1NGK0V2ITxXLlFSIklD'@;
put 'WHIscjZHQX1lWncmWlROQD1ha040UThJSlhWcFomfSkrWT1DVltqSUwmT2w3RD1OfXZpTUN3UHRIemRGSWdBUFZuc2FgeCVTa0RUfU5PO3d0JSxnNyU7JWlIVEk/KD1WdDlAO3VHayQ/NEk0WS8lQjBnO0hjJT9pKFp1ZzZ0IXd8TFNrV3coNVhCQSJdLlN4R095dytuNlgwdzo6UE88cDtFX342'@;
put 'KT4qMTM1SDNNd34kNFp9XWZAZ2BeV3ZPJkF2OHRub2YhbkU4Z11XP0JbbzxObWciRSF0aDdJdmQ5KnNOQH4yaFdDNkVnPz1SWG1FUUBnWTImZ0g9RSw1byZ0Nl1IUjpxNGxZMmd4bS5MbkAmPilaW2pzXVlbRiFST1U1bW1WMzNpY2Y+aXpMS0YzPGVmdiY8WE09bTZyJiJCWlpCXjZabUdHeUA2'@;
put 'OXN9c0srNG1iaGprU0tsPzE9alg6eWZuQlMpXi9KKiRlST9FKmk+I2o4c3hqZlAwZm5PUWFqNERNMDMkPE8xM0J8RTpMbCQ7Nj1TQCVwU1hwQXM8PHdOJGd1ZVcmam5ZQiM6ZSYmV210fCFCJXxgfF5OMk4uS3lrW1NCTTkvX3xMSXsxPk5xZUR6XTd6RzE2cyMvU2IoK3hKYiN9W1BwKU52cVY3'@;
put 'Qig5N1tqMWJbQjNmLks8N3l0PzVsTChPPUEzYEhyT08yI1VtV34sfERxT1MqNmZeX1lWbVc1Nz5uTlR3JClrP2F3cUVoY3JdUHU4RUNddEtsWGI8OEFXVCxQYDFQcEJLPENZPzsiLCJqPyUyRV5EOi9OI1RSbFd3Zy44P0hEXz5NIj00MVVqLGFFa2IuPmprU2hZV2x9NEFLI2RVO25DX2VsbjJI'@;
put 'U3pTQ1szPWdaTzU5TUh5MCs+UWk3WkZSP191TXYuMmhASXghQlt3Z0d0PzB9Ym0kUEx+a3Jnd2clanp2VHo9Ym5iNFhZbVVbXTAjT1I4alYjeHRab1opJF1YbFcwZSZHfH08KERBO1FLKGlpNmMxS11XJEQpITFJWjtELj9kZjRVS1FjYnloPXhtND1+cF1HaXIqckJOc0M8eDh6NHtEIVpTOUQ9'@;
put 'VVVuQGNsRnNSK1NLYnZOeHwmZkc0RHYwcDBiVys/b3ApWCsuUncmbDxYYEZIJC5bU0JLfiksW3opeHMqKVVWMGJ+Ll8kPURMbiUzJCh3Om5uNEZTcFpYay4qLHVYU09uXzk3IVN9PV8sUk8/VEUwbGxwUH1keCZlSUV0fkN9bF1RJFZ4NlkxW3d2fkM1U3JTRX46KmUyI2AlJGlxUHk8Pi5nKkFF'@;
put 'eXVhNXR8bz1pfkhhJU5uczY0OlU5dkY5bHltTEFvWlcicHdidGpmKXA6ZFU8RFNWbn4+Uix1JmwzQk5OTj5QRnRrMV08VShdW1JNOmsrO15PS2B9bTwmfDZIenZNQ112QFFbcEc4TEY2NGQ9bWxFaX48eSRdW2JoXTEjMXYqX1Y3SUMuK3J1LyhYYUlrO30wakd6PGo2ezFbLCE8YHZZSGRJNWo7'@;
put 'VSFhNCtrbSNscFRCMlJXRmlSQHhqQDRAKGVvKU5RVUQkeEgzT1p0bT1pcXBTPlgjdCZAWTx8PlUqdjpNNU5sOWg9WkEydG5ybyJjYEtDSiowcz93JHFjcSwsVGJ8fXkoeVdUMDN7fng1fm5XWnYpeG4rXVFPWW82NyVnKEp8MywiRWp5U18kQGZXSmYvVzpufDpgeFBCWmc/NH0hKldlT1c2el9M'@;
put 'ZUBiQm8xczJmTnQpNV1xeCVWP2kuUjV4Rz9tUnlNNz8jR1Q3SyFLd20mNShiVE1Jd3kvSSRCUSJPdWlwJndtOywoJS5PZm13RiIlW1tJdTJ5UDNgW0toUmtoIkl4eCYycTUlVGNvbHEqdVQjLF1oKE9HbmhAPCRybmV+fkNhQV1lSD5xeWArQyVrUyghYT9bUFRgX0gqYVZyeC9GfVgqXy93THpz'@;
put 'bTpGOUlBQXNpVzRiJmJaYzciZ3tUUkBwaXdDJkc4RmQ6eiE0Xl5lR1B1MD13dmkwQ3JpfjZHMDpNenJyRDxbeEwzPWF6QzkhRC5iKUxpNm49NGhER25fRWt3MVo2QDN6QyJlby9yUDxrLGJadHJhZmt9cmcxcG9GayJ4ekhYdlN3aGkqbj5hKkZ8M0BfVzppKTojZXE3ZWtTb0dra2I8Z1tUc3lR'@;
put 'K2FCdn07MywoPmFXVm1VdjMzaWwoV2hKYis3bDhjVmV8cGQvbTQ3ZkpQMkxFTkJLOCU5cGN5PiRtcCl7SFg8KHtINElpbFVoXllMWEFkdkdkTmRYRE9ecHM2R0hdRmJBd1NmdmovSEYifHM4Om1BOExneShfd2FBITdeWEkjfEVmT1ojMHwmKkNOKXNCbCpeQEtXO0IrLnheWkJmXS9Dd0lzPCY9'@;
put 'OSJHRE9leWhvIWprZl5YTU97akNjOjQhKVkjWURGcXZfcF9kbG0jLlZHWWxjZnVCPmFzKzY9MmJiIVZBOTBVXm1+UDJaayEmPHlNSFAkSlc/OXxBSVA7Q1FFQHIpWk4jPnUmOSYzYDFwdDdtOmgrP29xa3ImT1VYUGcwa2tRfkZ1VHt9NiUodlQ+YVpnPSpqdGV9WDJsPG5fOUNNcWN4JDJuTDt4'@;
put 'OVRWaWVbdiIpMzJwPVNzLHYjNGJfOl9SUEQwbjRrQUtZNEpfaGYjaiMjMEd6VmZKVGpDYXomaFJKMH50UkBbUFk5e1l7SkJSSl5BWWtGQ00uSWZ3U2Y8MmUqJihSNmIvNSMlPyEsdyVZc3N7XnomTHtwJTwjTkNIM1VsZ3NgYkRifnd+RykvJWp5RHAuU0Rreit4X0YyYiw/TjVbO1BaOj5ULlYk'@;
put 'dndPbVU1I1tFO0pEWHRfKjVBPllhIVshQE9hdVApWS8yUTI5aDVOYjEpPyRNUGooQ1tucktwdWI2TiQ6TDJjVi92ZDRmJGY0ZW5ZbzNzaCoiPnEkZ1hvOHtOeFRVXWhkSTZlQk54NVA6eipwc1hbUCgycSJGb3UzbCosKWh1SHV3dyhhKEBBbT9yRzBLKG9jW1Y4JSMmPWN2RkBtInEySEFFU2s/'@;
put 'WVAxKEtWXUNtQHVQelpIQjMobWlCQzV6bUU1d343Nz9FQnBFVzR9Q09+bUV0dERPO3t2RXVhPkM2OS9BeV1EdGFOKFJ3KDlecWskJEpqdEl4JmYrRXdJcipDVXliPSsjVmVFVENTQVtIOVIiOjA4VWIjXUIxJlQldksoaVAmfUBCciV4Nk8xb11KTlloWGNVPTQ/M1NiLjVLOGE1M35dcSIkZ3RU'@;
put 'Z35OIWtRdVBOSkYlS040JlJNLyZ6P3Z3NXBzL1QkSVJvOWxdVEE8PlAjRUFHX0osYnouZnoxX31bR3VLJit5U2FuMU86U0RyJipzJGwyX010aUd1QD5eS00zKDU2QXtNOkVaVC98WW00czlpNUg+djVINFZQLiQ3eGtWV0szbkZhZTlZWjthRSpbSVBDQSFEKzs8RF0lI1o9Z0tBTkd5YlVBLHVW'@;
put 'fHFuJTJLckd5e2o/T05EQlM9LEx+ent6cX1tYTx4eTEsOG9bOHNnSkJAXXg2eHYwIXpnejVLMjNWQ2c7TlgvaU1gZjQiPD46TipDInc/VWljWUdmUz1dajE0eSFMZWd+N1BDLmdma04vTFtJUTksVUQ/O3tIIiNeY3NjMEFuUXkxfVlOKj9lISJNJWl5PGw3NlRbezg+Nl93UiEqLGZ1SCZSSV5G'@;
put 'MjIqQD1jWT44W0ArUGtVcXVJdnRgKytWKU9GKjJZXUpfZT8+KG9Rd108NnRtS0lASkg7Xn49WTVTakdZJEFibk1eVW9TclFpSDs+M1Y1MStbS2g+eEFlTS4yY0JCdnZpJUEifFM/cyNpPkpjSjZsb1hpNWA4NypITnZtYCQqaHVWV3RITSY7N05BOWM4LFN5RWhVQlo8O3RLSWgqcTVhWCN0K209'@;
put 'eypPY15fTy5kVFBQL2AzMDYsOWw9QmFbWlVIUmdRYktxb2s3MylhKTx0enR9WlUmdHxNJFBsb0VoYEBbfWJEUno8aEQ2OFp6MEp6JHdPb19HRDQiMGNJUTYuNDFfe01rPztFY3x+TXhZcGluPWJeZXBYNWIpbGhncHl7K25hdkk/NjBBaGpRczprRFZMQ0QuTGR2JjkvIV47SiJIMCY2L0xGWUZO'@;
put 'ZEI6WD1JUU9NT28+ZmZLaC48YThZUVlnMldYPyxsNDEhK2koQDFoPF4wN3xFbStVIW4oY281a0NpYH4uPCklWSoyI20pbUZoY19wM1tSPUIjcCJ6Ql0jL2tCNiZsMT51NjhbLnp6Lj8rJFhkbiVXWTVWX080USghUER3aSpQREZLfFJpPCFzRTs8dkgsVSwlXkxSfkxOK2RfR24rVEokRCw0Zm9J'@;
put 'clMiU0ZfSGhMZFJYdlA6Uz1KbHheMiNKTUMwZjJfIlBWYzZOMHY5dG0ldHtXNWE2dzZtPG8uMWZyPm5sbER0dmY4W3ReRHVZJUVdS0pqcWNyW1NqLks/P2lQRyt6ViUzdiZAYj5XTXEiY25kJkpvRC9lfFVYal9xamtubD5NKjJeQlFKNShXMWk0SldrMjRHaygoVSV7bU1TeSRuekpsPURxXlY9'@;
put 'NltGZWNZejxFW343ZGUqKTczcGh5MWo8PCs4YE0wOndVLzQoM2FxXVJjeWtobGQhKC5VIVAwRkFdIUBlcVFZTVpzaVFsX0lzJUUsbT17ZVBSNFtIRUQoSnhkUnYqPHVoYl1uITlsXXs7cHs6M3BKZWtLQFZnMTRFWzNxXX5OPChdTT5GUGtNTHJkPT8wUCNRPkpjak12JCxmdVdoJE1IUHVzUClU'@;
put 'O301WmR4Q3pOSHJrLlEjYXp8RiQ0TlBELHRqSnwqaGpEZHo+NExnRXZdaz9je15DfUgiWVgycmN8SHF2L3ooY3Z7bm5UVnhPT3AoenJDVDpyVyRSLl4oX3V+ezAmUjIjbF9RYE1PU09AbSZGbDg0TCk0LFhsMVhIL3RudVhQL35le0xHLCp6Y2l7a2B1Tn0qIVVwJm0mZnlfI3sxWS9tMnp7WlNa'@;
put 'dksjRmB5a1B3dCFgdEpWaWU0UTRPSz5+fmIkK0hVSnx1emZpNlpRZElycCguMGkyWj8oYDwmSDtAflBYSkJlJVlEWCUqaElIMFNKez88WEtsd3V2NzY9Vkp8dy5uMncobH5ZX29zOUFSUlYuTToyV2tpVkVIPSg6c0wlS0F2SWBmV2UoOTkzKy42fWswRF9YIyp1c1NOWk1QSDd3JC93VTRYT3U0'@;
put 'ey9GXyZhQnZERFVLS1d6Y3NFeCE4O3dydV1Vcl8vdDR9SWlfYkRJPmhuNkovdV8jWSEoNS9tcnpHTlooKEEuWkhDW1NJQEtPUFpQXjt3c20kSWE0S19lOztMYF9HJXp1PXo1V1tab0RbUyU/PXdPeDVdRkVyWFFBY3BkZ2o8UVRHVVk/PUQ0JToxSX5AYnVDSnE4KzhIW1ghNXFjYnNoYDIjKztA'@;
put 'JmBVQ2MlUj54P2lqK2pEQGIrPUlKL1BBWUUxP2E8Pz5uIi5LPUhNe0JWKVFxJXAhKnRmLzxfaS8/LCE9fT9Pa2peQ2VOWVFnayZYOiU2aiNSZSFWej1eZDZSZz5zfVJVajRLNFFZRSxvaW16W1JkUWopO2REclBydWR6bSVUSkNiUHtFNVhWRmRHS3h6V3ojbXxPSzhgJHE1KS9+UC98Wz9bJF5a'@;
put 'ISg3bWpaKWRJbGBYIzk5I0N9MCxTRDZyZC4uaTFjamtVT2wqI2Y1fT5yQ3ZMRSR3K3k6Lkt0NTd4Ky9KajcuLG5YXiYse31QQ1EsakRwezB8NnIhSjU2QEBOTl5DKEhgMyZiWj5Pe2w/K0g8K3dBbVRSZiN2Qyx2YnJ8ajpdVStSPU1oQnJCdil+ZVRkaDZzJVpFeHg7UmAkITx3QEQoZHAzcHtp'@;
put 'R29ZMFMxbS5adTtdPHt1NH5mWml9YF5HX1ttM35OcyxEcVYpI3l+dmsmZVZKQm1sKCUzQ1ZYfTNZWmNeNE40TmcvNTBARElWa25uSHxoMlokc0hEUj00LGtBYixYeUNoKl9dTEJmV3pUWDdaalEpVGt5Xlt1LzJoYGNMOThYYyt8VnZ2WXs9ZFB5OH5HcSxLQl1NOTQhQ350bGRUZGZVIn0kensw'@;
put 'KT9TeVIrQjx6LkhAI3RKSmlmdD1bSCpFbCJBekxwYn1ZQz0ienR5YkYzTC9KZjhJQk4xLkc5MzwiSFl2cE1LMS9PbUlWSF8pXyg9dHM1QV1OVlRFZnFIfHkvPVUlJFJQZ2BAc2NZIlQ/W2p2Qn19akBbNmkobGppNmJLbW8sS0J8OSIoRl02R1MueGo7Q19uMEdBYCZ+RENPcXdJSzgrQilMc1Uu'@;
put 'N2c+JEhFT1UuZUBxKmV7cy4iQTxlIzprfiVoTXMwSlUkLz1IfER+Y2l0bkslWGIjRDFydXVlbCF5NzdGY3ldcH53L0E4Xzg9ZE54czJEKnwwfGV8ZUdCaD4iZ3EzV1c+R2I8Xm56b3YxU3U1KmRfPXx7eW1mQ2d5OEpIZURpOTw+UypAUFZlM1NdbllzcyR5MkVBcHljWUYvYE9gdnFZOnt3Wnp+'@;
put 'N0lnKHokKjdfM2c8U0puVWJ7bTBYUnM3JD8vTzJfdW08cVtzLEFDImpVUWZLVUJRb2QsS2A1LjpKZUY8VFd4N3x9KkxuS3NdOTl1Nk1adjlsakokRGh+eUdoN113RSl+JnJiVEN8SVJGWGplOV90aUBtaCV7cVN4WGF1SyI+ZkhUfUEsUHx0bl1ndEZJWEI0L2xEV0V0Q21MKX5EQGsvOTtWeVh6'@;
put 'a3sueDxUSnh4bT1CVGhVMmo4Qk40SmlESE80NjkmQ1Q+NnQqcV1IOjNVLik/XVFHYFlHbWB3aiFjIyFxWEFhdW9nQUMqdGtTPVNkIXlsSjlyZnFDenNTM15lSTByZ2h1MGR2V3gmVkBAMjJBYGMzW0c/YmpsfTMmfXQ/Yl9oNCYwWkkzPDhzWF87ZDBQSCZjQiFEQ0Z2OWwmPktTXWM/eTdjTWk3'@;
put 'VXQ4NDhZKE4sWltOQ1o1O0h8TVQiSkRCWGA1fmBTLHguUUAvR31LS0koUSRfU2sramE0ODphdztpNTRzVCpOKnN3ZS8+eGUhO0hIIWBFfWhOYUU2UnMkJTt0R0U3YjNWL015cU9RYD1OI2Z7ZW88ZTdCfHNNOmd8T0g5MnR5N3R0Tj53QlhBOnBDVTdWaW0lZCxtUFFxUm9EUH0+TmloYEA/WWVq'@;
put 'SygmcDhZKSxyQXlEM2JgJktIVkp+JnF8RCRAYkgrKm9pMSlFM35CZ0lVKG85QlVKOmBhYVJMfEJsKE5oQFl2KS4rI0hUaUJvYzVHXTZXJDYxNXpxNkEiTSpJfVdFYEklN1VKQWR2SiZzfHtSLmRNSissWjRLay95eTo3aSVJdSFALmRSL0lVMzJCUkppYnZsYDEpKzc/T2FAQ0RDVFY/ZEBEZk46'@;
put 'O2ooWT4wXWokV3BdPzdmdlpTUEI2fkViKCQiKz1UV1hKXVgpRCl9REFDJmNkJEVTYV1kPytoZ0NiTHRoZFI/WGt3OnNoMzdJfSZ4MCZTZkpYUzYrZjlbZDxSSipkd0JuSDdzZj1KZEZTXi51Q0BGYF9vajdWQDFIWHZ1MEV9KCYmQ0E3VDFFZjUhS2k0eEVQK19dSCJMa01qYTpKJnV3YUdmMSkk'@;
put 'bTRCVms7SjV3fFk6OGxfWElrWnd0bkFtfEtxTU0sSklHMWJkNmxgPVNYOFp8cnpwRlZGJTovNmczJlJ7RDtsUkx6X0M+RUt4fS9WOk5hTj9MM25tKiJSflB6T1VRR2FQKTUrZm0jNXYlUzJgT0VxdGF1Ilk+cyEuZk95a2VZNWt9fGo6MDVPLiMwbXpaIjRRRSk3LEVtR2chTkJYUEtMZEpJR0ht'@;
put 'Mlt+WWVnPTVwaFMyeDQ0MWRiazdXP1lxUnRKZCk3U3VWeztpcF9GT05+MTVFOUopNDdxWDQxYltfRU55fGouezB2WXFYQHpIPUJVPiVSXyg0fjFQNzVPQXN+SldMdCpbe01BLkZnQ0h1NVlFIU4lUmJebGx8RUhmd1dSQzs+W3d3THo9KElFK0M2QD5IQkhubSptUiJQTik/c2lwSFl1dW8xIl5T'@;
put 'bEF3cWlwUTFDM1YyMkB0MTB4Q3hfXUxYTTZaZFtqRm9PeXQ/TiM3biErNHdPJXhkT09DeT9OZVN5JjgoOEZfPTQ2dnRZWE42a3Y4P1Ndb3IkOjNzc0I8SDE3Qi4hUndNZXtOKTpuUjVER3UiQ0V6PEhAdVBsaD9tX2xdTWIhcz4rV1JwekA8SmR3T1U5OTdpdzc0fDh1aGswOjl3QU9ESSl+PjEk'@;
put 'QX1aNXxGQWxBeHJESEwiL0UvJiYuLlBDSFQmfDR+c3VGQmJRQCl4PUJDSjlsSDxAODczSEtVS2REUDpfQEVhJi9FczdaLyVPWDZVZjpKWz9nYT1DR0NyZjl1KHNGPVN3PyhrfGlmQ3JQYklMYVcsRltvXlloe0ZUYnNTX0VneUojKX0zMSUxVnpETElJZHwhMlIoIUlvMmVxbnFiJjh5Ky9UNF5X'@;
put 'WG1COUosMUVnfkR2VlVtZl1vaXlQcnx6JnwpaCR8SU5JWEVdSV5rR2FvaHN6Nk8lLkN9R0hRV218WHMvam0zWDhzP0NUa0h8I21IdXU6K2sjUD9LJDh9QklHWFZiaCtgPFJGMV9vPnErZEdtLF48RGklalp0fnw0U0lROTcxUyEqfk5IT0tZZmpRamFAVH5kIThYaHZ9NWMvY2JaZjdhaDJjS2hG'@;
put 'M2xvZllOcSJXc2ovMFpZN2laSkhZYGpCR2EzT31OOSVWLFdYTGQ2ODt7LDpfSnZLN1F2aXJZRms6S0lTNCo8O0A2Mj1BITR9Q3toI348MjBPbVplazxiSC5IaEkzPTBqcmVOcztqVnxBMSh+OmdFIyZObzN2W0VdIzBjIyxmXiVILFBgbXBzUDhuc1ZQL1cmZX01KU03YzByeClnTUk1WUNTO0tH'@;
put 'Pj1FWFQiQFk1YmJCTnNibjhOVFVefCN9b14kcyM1Zz13ZVBUe3F3V0kpe3B2Xls2IzJqb2o0YCZXcWxgSWRTeyp2O30/Llg3LHBjL20yPGR2V3FNRHRMJmR5PH17KT19OU54N1toNm1kQV5jYWRBezk9aCN+Vk55SDMoRCFlJXpyPSZxND1PVFAyeDx5cz4vOTpAX2ZJUl5TUmM2UGdtX0NeMiMh'@;
put 'UjJiY3FgYFhUOnU2JV5GZ3VKI2UhT0g8OUBqK1o2ZWV2WjIjfDB+bmg3NUZ6Nk4uRXFyWmtKI1E3LF0zalQ9VSQrYlE8VltCVCNVVX4kVCx2ci9MLjhAL3VSZypnQlAveUc8LnJMXn1SaC55X150bEtuPjFjZiI2RUhWRyV0T0dFTCMwPV9UP0UoPSo7Nno3LHNzVmBgTlpha3cze3h+ST1yNlsq'@;
put 'NDxkdHtAdGt9OkJadyttJDwveEYwXSlrUHRGInVJJGN0X0UxV3Q+R3ZgKWwzT0ZFcmMmZmsxOncuKyFrQV0hVkxwTWs0MlN8fngren1meDw3JlQjUDtOUjt9KDpsa09NLnYwNzRdeGl3ejAhaztrcE1mI0FuL093a0w8SVsvXitTJFY3Z3E/PEZwO1BzdyJUTDxKNGUqKXk0YmYjPH1teHF7Plss'@;
put 'P2RxbFd6RypJSyJzIi59QmlPMi8icSojRkV6VSNaMmo/Sm99JitoP0VyJjJPM2xyOiN8VzBdQCJ6aE5rT3prbV8+cEprKjUyeyh3OXgrN1pqdnZ4SU1eWlpVPk0lVzBzREpTRn40d0k3S0Q6Mng5Y0hCK35kT2hTMXxfbXdFX2A/Tz5xL0tvP0dYeDtabFhNe2MwSlNwaWZ5PzRneTtRaWlEZXNp'@;
put 'c3A9QlojND1jOkloSVAqQCkvXUsjS1liaG80JTdJaSxoTStFIVAhYF9MbVFRZFo+JHQyJkU7MmYyWyFBeSEzOEZ9Rlp5JFV8b188PUteP3Y8PCtUWCF4On5dTCVVKzB3YlZdVEkwJVY5bGliYkpUemFrZj5qcFEsZDxbXjgoWlNYPFJTJE9QcTVoKXhGSnwqUUtYVnV3bk5STWNzOiNoe3U+bUdh'@;
put 'IiZgczJJUCxjTyJzdmdwUT4uWX4hSD99fkk7WVgiISUjN0w2eSR3RmloYjcwVEV9WjBOJCM1aChwMEVuS1c8Niw7Kk5JYDx4OHxbPTJPV3leOVkvQjxdXyZlc3VoRnMmJH53NVlke1g8PU17ej1dcDAxS3ZJcFc0WVhBSHpgZkp8QDRsejJWTFg6XmZrcDsvOkUkI1BJWEIjbnhAcDhyOSRNNWlA'@;
put 'OH11SkB4b3l3cmpsaUYrRTl5ekp9NFc4Z0dZVntqXiZkZjdrX2dWVExwWnVkaTJuS2hMKTJBPmQ8OXkzeGxwK0wpcC5NPXBWTmw8VCZuJj9kVD1UK109Rlt1SyQ0bGlgM1tvMnBUNTh5THZnT1k+aHphd2A3NjhaTSkrS0RSNCRIUmk7ZG4peyRTVVR4fX5pQFlrPW1JNDZ2RkN3bXQoXkRuYUY9'@;
put 'X3l9I0V6MWt0M341PTtuQCZtKylxSm5MYngjeS9HQDFSVDRmZ2ZAPGB7Y1oxcSwpOnhpZWxMTVd4MnlmMTpSWmEvU2ZKQ3VxIS9XSn4selJYdn1aW3UicVE/Q21lUnNQVzYke1cyZmxvTUI4JUlzIXJpcHBtejA0MmwhbHs6anFmUEUjJFJ5TSg/bltzXUpbUVRrJH4oUHpvKjdrbT46R3k3Wm8r'@;
put 'fj83XT5jPz53LF5kISJwUVl7cm8zd1M+QksmcDovIXckb1BFX0NfakBzYFJXQHY7e20zezkzfmUxdEhfXkcwIT0ifCppXjV1JHY9eyw3M21YIWdjamlJI11nVj1nem0saW0xfVhwWXpaIjtpSGxrRCVzNSMjOGhFd3VLWHVwMnh0JUZIZFg2NEpXak55ejQlcTIkXzh+NilwKXpVOmJyTSwwWykl'@;
put 'SEZyekRTVzRFPDNLMVlCRStkV0ZVNnBMcWZlaDZiXTAjfk47Und8WCUmN015UjxAaylPVGFsOSIxfCE0K146bkRJU2kkMGVwUkU5aiFNXmFEeWdZOnBFelp+XlVvTFJVNCFoXTc7MyxWREF4emQ4MiROWTlNJnYzeCxHWk1iaGQxUlZkYiJJKHt5cShSZHhxbyNRZlJ6a2BvXVoySEp3MEdXPDt+'@;
put 'e3MiV0VwXnQ2JVNMaEZII2NSe3g9dVhKMU9GLm0hTXI7KSMuWWYyR3wzVDdfT1kmVlBaSV9Fbl9bdlAhd2tJI31eZVJmcFsmbEt+fU9sUShtejhIXmNXO34/Oigpa0x5IVJ0RVFAbWpdS3l+Q0kyTmoudDx1RENFJVY6W18hcTptZmlEN3w6OFs2OHBFej5nRUpNNyhKbUx6U304a00/eiV0VWY5'@;
put 'N18hWUlvfkA/SXM9Vm9CP10hPXpISiRwTjllYjxgR2cpcyMzTzBCNVlVMnRMQDx1LmVnT3BmNFd8Tn5dZnh4MG1aXUZnZ20qUUVZUThJPzNCfFZrdDVuJi9oYUZ9eldQYi49LmhGaWRyPi84MSQycTkiRnkhdzhnJUZnODNnMjd6Ty5BTC9tYFZZJTM7dEJBTWJgSGc3cjYmbmsuYF1UbkYldWo0'@;
put 'bil9PVJZXmY3LCYiJHA/bnEjfkQ0alYxeltbS1UyOj5qIlRGSjVGQThhS3suUVtALGBlOXUmbiJTM2ZtTihDNXE3JHBPW1t8QzgsMSJsU2Eyd3xpc0hqI2l5MkJ2NDQmUDtXPHh1cih3dUpwIVskUCMySnssfC86fnZUbnNbbmZ6XzhuP35Xc2ExXmciP3pqZ3YzMlFGOSIvOUxddkYuZTo2YmIy'@;
put 'Wz94RzNwVSYxKzk5elk1aG0xQHNEQHQmLGxbNlNmdndJXWFSZmolNXE3JDMrSH5zQm4yYEd3UFJDR1dBJHdVd3BaZVAqSGUhIk05a1VReT9tIl50emAsIVJEOW1LdUVSSDwqMiVbPGE6ST5sXW1GelQ2cWBdMWwsJDA9PnFFNEpDNDlvQTlPeyxpQntEXypzIypaM1AvVE8pfSxzODdrJTYkOFAl'@;
put 'UzojLyxSVk8hPnQyRFB1LHgiKnBGa1gxXTk6KlpxWEVJOlNQK151OzB6SyZhPWUxfkEuaXl0YTVUaCxNN01vMy5FdzRuUWQxdHplZVBeTWxBbzA7MF9gYEdMYkJ5KFMwMGI1fUd3QCt3Xi9OQV00SmVDbGFqPWZ6RGl9V0JLUUx8I1pZeWYibDZyMGVzRSRIZEA3WUU+e0FrN1F8KDZQUHo2KWIp'@;
put 'bW5HU09NbVFkZmN7Oz8+aEl9OyNKfkNiTnAsVUdYbjJJOXN2RkxzdlBganZPZEpwdHtyenFfa1dvUGBIN2lYNDF8OXdrb2RBZWRbTk8kXmlbTFRvTXRSQjBFNmlxX3UxOiFYcmdsWVF9YCEpQyVrUVJqO2luXjc9MCN6RH5qTyYmdncxbF1oWENVfEgzVzs3TS9wRj5yUmJoTyl6Ki4yY3RyW2RK'@;
put 'PE5IIUsvUlhFQ20pS0dIZ0tASSpQaUJLZUNhZH1zZUpLXnxqZk49WDg3YyU6NVZUWl5HZSxWZzNkSGYpWndCWSslKk1NaFA0OGBoKjdsRWxGOCQiW2QhXUZpY11UWGQrL190IWddbjx5R01bWlAzPTkzPz0uelp2YlRzU3NvJXNYa1t6JWxea2lZdldVWHJkSlJXLyttUFlLVlt0ZWB0UyRTNGgz'@;
put 'aXovUFA9XlVbdXtDTCohPiFEQUVuUyM1PFFGPVo3P3AuPzB7RzcxZzBgSG42YUpFdmxqV2NTSi5LMHNAdl1Keik+QVQmMUshWTtndFJrXkl6OihAczNHcT9kZDdtW3ZdLmJdX1VQOSw3KzlZRWE6UCIkYEQmKltvVChWMiZPQVR4dWdPWTYhUVtvZD9hPHw1dlc2c0JnTVRYUDRWRFo6eFRnSjpg'@;
put 'cjlRP0ppTEQ8eiN3cyhRRiQvWGB2U1I1eUZObWo/dzFkbE59NVheTEAlbE8hI3pMJW4jJDZbXSFJVCwkTXtqZkwvQmJRNT9vNTIuT0xJNyJYTDovPUw9T2hTVkp1QHJyeEp5QD0kbSIhLjdfdkopUmVzS1dqLF50PlRTMCJhJjFaMStPRV5bO2g3JFMsOHZ4aXRdfj5xdSU0fHxdIUB9fmFtQi4s'@;
put 'LHM7Lip1eC5CQyFlbTRMdFQoIkBoXypbZDJwfWZLPyp4NDxAJng2W115eWxkdilycTBEOUk1Ok9UXlVbd3smaT44czE2MnxdeFJBR0FgSiVNOy9dTjFASjB8IT1RalMhe2EuK1ErfklLfVQpPERtN18lNW8sWXV+eERkcndRezZ8Pn1dVm9ufD81Y0ZmZVoyezZjXl5tTzNrOC5IbjNSO2R3OlZz'@;
put 'NiFCOHhfLHRYQUdUWnltKUdCdEt4dGtRNVZ6XT92U0U2NlIkfilWfmBGbCojcyxsezNUOFtHKUdgWGU6ME86Wi80NHxKUmNmRVNYJn4+bj5tKmc1R2N0RTE2WyIuNHM3RmU8WjU+V0ZhK2NzVSNAS2hoNyp0I2tabmUxfk5ye3xraCZoYUE4fC9eSnd7S2pePFB+aip2UTA4eEgwXiQ+ZCwwdTdw'@;
put 'RDk1NSslM2FpL1c9djZvZkU3Rjo/cG9LcUlOOl8hQkhiU2kmUn5oaGpLPkdUcl8mMCFrKkVjY2kyUnFfVVFvd0t0aThUVDNqfDBWYlFbeVpUTHN3e1AmWWd3KVIsP0o4dzBTLHVQQUMkLjIwZ3xWWmNbSk8xQE4oJUZqLEB+UGNPOUp2IWpTfmU2ZyY2dElsfHxufFdhOS52YnJBOmNyXXJJaXlb'@;
put 'eklCdWUqdHE7QWhkc2lpaCxwZHI5d1JCSSwlaDQvIyJMZDE0VD4zZzczY1EzQGpRPTMwO2l5T2Y5YVlva2xyTU8zJX5eN141ZzBvcDtPajdYd1ZOdHlscGtASyRoZFIlYnlIMyhbN0I5LFgxL2F2ZkVNajpUVnVlNzdZZTFmaDdfZ21GdUskZzEkTFI4dmE1ZiJpdTY6JHJRaEw0a3lgRnB6dj9t'@;
put 'dSpiW280Py4pMkohMV5KSDIrPyVSZT9eNTBwO0ppMiM7fX1UQmolZTQqfnpUWGdZfkVoIWQwLFspTGRvKX5sXV5VP2Y4P0A3OiRIRH0pLkc/UUNwX08ibV1qQTV4PHBheyh7W01zMnBfakJmcTElOmVwdDRtdk03aDRUJXJ1OHUxbG58d3FzYiZnQmhITjVUOjlGfCZlUypjNVZHKk9Id2BDZUh6'@;
put 'W1ZrZjFbMWxLZ3IlLyllMyheQjs8PzR8OkZfIyZDMlRDTjx8ODtHdVZrbjNxbDRoVSpVO3tpcz48aSQseThqYyR5cSQhazJgSklPTjF5fCIxY05TeFA/aU1GX2xQKSxubGBhRFdVbEVlPmY1UysrQHZsKz0kZ3Q/cjBZbDpDYzEqOVI6Z09aYF1+MVBlVHo/Vn1MMT95Yzg5TjIlXkMidj1taDYu'@;
put 'aThqWDBFeGtxOl1aVm5dcSlmYDBOL2wuQV4rQFkha3JfTCJCL1M9Ri44VilUXlJyVXZde0pmI315OXk+QEA0JmVSSGJEdyh6PXJxWCkxdi52Yl92dXdyNzVJY3QvNk43IX1HNmJhZkQpLHRBKHpzQSFxQFRMUn1YcU03Yi9PcGMhQiUrT1J3Yl1Zc3RDfjZ2aS5YPEQ0RGZNU3tUKV1PM2FWV01k'@;
put 'WkslQFQrdElda2p2eUlBQnZBdCVsWXxZMFdKams5TiZxR3NyMCszU3hBdSVfWHo9dDdnQzNBZGZjYFZqTkA/eys7MmlOJiErUntPQ1o8X31JWkIiU3Z5em5TQ1B0e0J9PUdLSVRMLChGJGwzUDgpMDJyfj96RXExZlY3d29wOjxGO3xBQCR9Y1R3ej5ZSjd4V2dEQnN4NippfDFobX5Nfil2LDBg'@;
put 'QEoqSVlddHU6RVIpOzB2YG9uQVJWTEE0eUVVbUlFLzhkTyVwPXt0dnMqTSE8cURzYXdyI3BGUHtDIzhfTX5wfXB2RGUxZCpiTmgqS1pbejomajt1MDtnem9mZ25kL108SmRxb0UhTF9sKkRGYmVlTXlrR1o4MSkjJER8ViRiM3ErP3R5Sko9eFpwX0YlYkwmPkZ3KVlJdWMqKmRvMUViKlJ9P09W'@;
put 'NiNrVD9YZz4lYj9IdC9AfkYxKjwrNjJpU1h8IyV7L35gKjo7Z31fM0ApZmspYCJVYSIzZW9hU2NaJVJ0JGlMdWVGPGRXY3NsNW86cXBLZlUrVjkhTV17ZE9bVWNeQFY2MHJTOVZNbT1mYGpMdTJgbWdeaksoemwiajt3Mz8jb0QkaTtYNDNTbUZJI3ZTL0RmOzR3eDlsTlRuTFNIQHclfEZQKHdP'@;
put 'T3AuQz5sbnZrbWFpMSgpXi5xOX0zPzRrczh4Z3I2RWc4NiRvK2gsfHkhLjBnW1VCNzYrPVdXa1ZBcXMwYnVkeER2PF4ucihWIkpoTXBwIjR5fGB6akcqR052M0BRIlR3Ml5mZHJ9Xnc7ZElNSyU4Lk9yRn0hXS8mPCtLPDJ5fXpiemt3YldTQEMoP3owMVNlKktdN0RyOTdBaE9EM3ZqfE9CUHNE'@;
put 'P2EwQH1jdylKcX4yR0ZuNSl9bFMzd2YoQ3dfblo/c0NNKCp8fXNhL2ZiLl5qXlN3cjhSQSp9Piw9MVJRQSxsdWBQV0FwWFs7KWF1TUd2UXxPfTJxNyRUIUx7ZyV2UCluSU5lNiNPZl0vfGNpSV8rVVE4KXRnKW4/MSJRI05sdiUsaUp2RDQrSzpLNjs7PihoUyx0djBndDV0cTlOc3N1MzckOkIx'@;
put 'IzVhdDVdY0dvWFAvV3B2TTtWS3xjTitSJSRTMmphLz1iMmJQdDBjZ2FLQ2lFQzRmXWIjRTZMZTZYPUh6PjYhbTs9Z3dtLEU1Uy5pYzhGMmFPVlhNYE8wWjlraGR6YVp4TXJvZHxKZXlqNVNlXX07fUE0PElOPkdycTBSKWZlXTFPaGNSVjFCUyM8Ik08dkBiMERwNyxsR00xdT94fkxHZ1cpa3As'@;
put 'anRaeD5obnEqYlliXlJAVHI1fGBDQjdGeHReMk1ualZtIUNDeUhbNlc8bTt5eWg1Rj5JTnFZOWc2c1NEVXMiTC4mWXddIkdhcG9NT2s1Nl19ciMiVi48YCJ3I0RbOFhwWnU1SmQ6dHRwV0dCaCMhJUwySjgobGZwMWwrdCZzbiJIclJIVXJJZ04uXnAhYzd8YmNHL1Y4NT1XMyo2bTZ2YXlCSV5s'@;
put 'PjVLPi40ZnpvX0t6alR+LyZXeCJLQD9GTy9BVyssSS8rOjpJOWtGPjEoZERZWz56Qzd6UD1FIntzJnIvMC9XOVVTdjFVcXZOMylKZ3h4TW0zOmdmOk4iNkdRNGtKaEQ7SXt6MXw6e3p5bWdaTkNfY2xCe0NuRVBhejFZSGQrUCskK1AsYTVjMnZZbSEkSStTbFt4ZXJCQDs+dCRyaCVKSUloS25V'@;
put 'bHtfPkEkWE9XelZ+VnoibEciWCJzT3dXVDpeTFFSR3ZOd0NSeX12RyUrVHwwKSxtS2Z2TXg3e34mSXRmakp1flFOVEFjTERDYUdldz5SVChYLmpJXkkoaDN4aH0+V25pYXlpS2YvMURtfSIpbnFYbEo5YGZzPX1vbX4rJEI5OlsmOSlhVClyJT4kJV17QSJga0QyNTNjRU5CaTFmYTlXO0A4KFQ5'@;
put 'fD9qenJhSzZrelAwJTNeaFYlVUspSCREOkVoJkp+R3QvVmhxL0BvLnt7O2lAS3l6dls3JVprUjRQVixIJitBOV1xOzZfQ057JTMsJXdqZmljaUtuYEZaTVdSR3VJbF1DWSk8KyQlfUJ3WkJ7R3pOUH0uaUlYdz13V0FKUzwlYXBoZFAxMXEwQmV8eTcoVWFeflhuVzY5WlI8VzxUd0h3dnYkd29i'@;
put 'ZCh+fS80fnN2cFYlOSp7Rml2d1RhJEplNntvQ1tYRSZXOG8yY1ExK1hMNT0meGBJLk1VYlt2TCN0Lnh+ey5rQSgvWXpnW2ZhRmF3U2xIZUVKPSspYktRIj87LnpSbyNSKnxndSVYVSw8UXx8a1Q2OUJGcU88fkphQmBRKk53ND5naWFlUngwI3p8ampTXShOSVJvQncqcDxtZ1FNfF5rOUooV1U6'@;
put 'NTB7KytqfnN8V3IxSSMzcnRCNEIicDguYStRQShoa2RhRDo+RyRbNW5mXihManRGZl4rZ0hZNTRWdndfYFE2PkBVe31dIXBBPz0/Zkl2L1RAKGZjNEA5KTdNWTQ+RGZvS04zRDRMS0ReLlcrTUVUVGNpOzo1TUptUT4qPzU/ZlpPM3d3TzFIdjxzOUp8XT1kTFg6Zypkfmd9fE8xVk4ua19uME1o'@;
put 'SkxzRyVjUWs+Zi9ZUEZ6QV5wfVR+clAmaCJ8REkvWDV7KyJ6V0VxQSxYNjFYSEpuMyt+TjZwcVp7RlJ2bDA4dlJGI2hfaWUvKUdNaG9XdXpMaHw6dS5MJj4+UXtjTDJgUiYlfV85VCR2VjJILyh+OldwZ3JQQF49SWRrI15MVHt0SDM7b3lWfVdbV15RJSZvK2Q4RlpySWxmbUp1I1leJC5OcilT'@;
put 'emJmQ2YxJFczOXN5VDlkWE8/KFhjb1hHQUFjdUo7MENgcFJGYldYezRpQ0E5cEFGelV1dWF0X2J1RDNIUzNrRWcyT1ZWOzhLNX1YKVkoZiZxQ11zJHVJXkEyWEhiaDBYUX1lJDRNayRUcnRnMmNjfm9mWmFAQjh3UCo1bURxOT5+NHg3ZHFLKyRTLnoseWFYTmtjTWtQcHpyOXJhJSYkYlkwVkV4'@;
put 'aCYjRV5QY319NX0hUm9HZmtTeFRhSHssW2IpYV9peXx2ZURKKGErMWk5RFtpYlNrd0VQRWhWMHNDakFVK0AifF92eCNQZStRRWdUNGIhVCRlWDJ8RFVld0pqL3JHTntwOk04PF1wdGckLGRbKF5AOFFMciNQZTxUcD8+K3w1fk1IN1RlWFldT3A2YG87P3sqLDw6eTZwL0M2MUptOzp4JVImVSlU'@;
put 'SENLJm4kWWdzOXwlZmJtcTxvQWs7L3hQVC9bYzprbyhGemtrQigjWkg/ZSFEVXkofElzd2QvQk4uPEReWDJPJVQ4QlsifTl3JkkwME5qWj46anNoZSVkTm9NY2lWMDg9ZCV+ZkxUekBdPGtLa3ZrTXhaRUsrYEMxWmJUciY5fTxEN3N4YFdQSHw3TmVvfF5pWWcmVS5KdU8wLCsvRyw+Klg3el87'@;
put 'OmFVRCFbWyxyXXBXYTtFSXo+SEQkSispUEg1RltxMT9tOCpnSjgqczNidkRxa1NdRVJLIiUsYis4TyF4Pn0ualpiWVd1SFtJOShgZXpAOTJXSVsmPnxXZiFtVUtjZ3JJU0A8dnZdfTlAc3k1SHJmfnQjKltLaTVkX1subSpdc1FIZSZnekd6ZUVnSkxtcjsrRzwsfXFPW01rdU1VVHZbR0ZiNCwp'@;
put 'SHFTR0FzWndaKzl3cz40JW1Hc0RgV31xMUp8ZGM2Q2E4dF1LbUc9YztXUEBkYH59SVcvZExWNEh5U3lDUCRBPG5FPihUeV9gWV04W3FJfUU7OVhVI1l3XXhxdH0sfUF+PXN+fjFhcT5gMyZJZHY9VH0mJXo5I2hSYXhQT0c4WGIiTy5wWld7YS9mVnVUVF0rJlRrI05wbzVqKFk9PXxQdXN7VkxM'@;
put 'ZyVfKCJAa2xRJDl4UD9mUEMuNC4xakJoWCNlNjFJWF1hTHgwJVl0TlNfZDNgTWRsMlNFbS5jMz8qXV4iMixyTzVGayRaSUxCVzJ0ZFYiU0J4M1gvel01ejo9aC87YGJsIz1IVnxkeUB0bVtvdjgxMnE0YUQoVXRQXnF5TkteZDtIXSRAaT1oU2xtW181Y2Vwd2YuRHhQSHFuK3FpeywxN1U1bEJO'@;
put 'VFZaP0dVUD8wZWZSX0w+eVJVNVV8YlB7YHJvOXo5Mzx3VVAvOE1lcXFfKjh8Lnc8aWt4QGs/KFlHUzluVmtdZjRvKkYkYnQrNyNqQ1V8IiZPRSMkQmh+UC46aExlSSU6a3l9KV1bYWQiKjojcTw8b1p4QU5zYT9RPXVRO0ZvNFA1QkYwPT5sOVJeOnxYQGVMbXc+UiNXfXRHe2M4QSpnKCwrWklt'@;
put 'VlAsLDQvSSxdPVNXQCRII2Jqe2RUY3NgIlZ1PHRaPTFhJHMyNi9aZDZHdyIpT1k0SDsjJEo0R2JTN01CcDQ7SHpTY11YbGdNPFhOVnJseSJxZT9BNkhhPkxdZGM0ZmVtfSVvVUhVVnM7K2l3TDlPeG9kc2ZUNSo+Kk1Qa2V8fn1JdyhsaWA1W1dfQHZzRENqIzlUeCJ0TjBDPnVwSCt1LykwbSIs'@;
put 'T2t0WVVCeEw4VGRkPGJPMSM2cld3dmBDNzxCZyhVc1JrVmB0fEJrRkVqS0cxZWkrQlJZLFljV3hFP1FXe21dPiM9QXFeLGV2SmlLTUclR2lSJSolZEBuM1ReQzJQaWEwcDU3LmxNMXR0K1R9KkdUT208M2k0YXo4ZkojKSUsK29XUDpuan56eytGTyFaRVNMW1NbSmRfPD9WT10rTl1aWShiLnch'@;
put 'fSpoIWJnakE7fWosUUl7bEs9KnxwLzYyQHkzPVM4fnAsYkhxdHs3SilvQTt6ajFKJitrQSomdFdXUHM6Nk9mRGozYGl+JCQ7VF0rbncrJHQvYlVQe1kkc1s8RWJ7N2MzR0h4YF5aImZpOEVJK0J5PipVb1soPD59W2RNeUMrZ1hgSzx9dWBoeXIiL3o5SnxYNnM3TzhBZUtobTlAPlApaSpbKixi'@;
put 'KThXRyMqNUlWSTtvZHVYOjluTWEjdlJObjZaMCpHPllQXVdtWDoqJWQwJiRdO0w5TmJjUywoLGRTVkE3PlNAQyh3W19xSjR8YCRwTkB3IUZPTGg6Pjsqc2pCMHEvXXxfPFAzL0QmeGtQR0BhWmVnOS5aO1RITzNbY29mZjJfMUE7LFVaO2k1Ym9CZ3soemFsbVYzayw6S0JTKzgqTFEyWj1bezBa'@;
put 'eWNMdXIhczc1ZCZoZ3YjIWNPYHpGOEciNkZ3JGF+KmB6UExXUVhxSTJ2UnM7Kz1NRUNkUXkwTVZefG1IKCV1bUBgPCU/K3t+UjI+Y0Rrbl8pX2U/SzdUYSE7QVU4c3lVfTY4PkhIITx+ZGplQ3BIMC9uJSYzYX4mP2FYNXpXPEM0SyhxMTRyQCN4aVspODM2NUN7MiE/PDhNRmwyS25oO0pAJDVP'@;
put 'YjhLe0EyLzRtST9xVSpQKUpeeWRmRCJdb2pWRHN9dXEvXiF7WCksb35bUDdZODp6Nn5QUDJYMlZsMUJscTVLYEllJXdATSFPN2h+PjlZb31nM2U4fW4mYT9sRDVYJSZHe30kcFdMdGBhNWdEbH4rUlRMWDUhZ0toN3EiN1Yrdl1oO3VScTpaUCYvdn1wLzJ4bVNobGhuZCxBJXd+OWdnLEt0RiVX'@;
put 'LyZwKS9BPFFPekAqRkZdej5KJGUka1Z5TVUkO0UlfHJHIX5LdFZRUDpTYXlZTyFmZ3dxInYrVnlzLm9MITwjNzJtQHkxfkk6Um16TjAvRGxFS1h4XVdRIm11R1FFMkNTdWpfSmt3bnArUHY7ODd8Mkg6bUYwbkNwbiNjTis9IWA/WF4uRWhpXixnUCs2PW1ASkh2P1BkVCRvUkxnckgzNVJlPX1t'@;
put 'cjE0Jn5NczBENW1afUBIcW1FaXwkMFdrb0k8TTlKNyMmMlR9NE99YH4zXnwyUS98ZH1HblB9XjtSV3s7PXNxMiNOQ2RXaHFySj5WZnNSZjtLVStXRWgvNGNYeFo1I2AkWkpbc3tCR25NZXliXyFMNjd0LmErQDlYRl5xQ0pdb2c0TCoyMlhWO3QpIkN8InIuJDc7XkNPO2t2WEVKWDE2amt1K21B'@;
put 'em49b01jbSpqPGsrRixzPFEuLmJ8QWtGVjA2PGU5WVRXKm5FNVNwenEhe1UwYGMqMlBLZVJ7VT5rJD98VCFdOTpiXmgkJDNydyRqOFY5bEZjKjFoRyEvdzwyInhhQTN4MiFVOSx+QiE4byVgakUrPlRvNz1pZm5+fUI+Zk9XPm9kdy84eV8iWW51IXRTXTBhYXFuSy40eEw6XSorQDhbUzxXXn14'@;
put 'NCh7JEkxcyo4bVg3IT9gTDIzbzBQVkJ2NDl1cSpeZmteMChhWDgiQURuRjlpeHt4LEptITtqIldDJEp8JTB8MClnc0hyPCxzXmVMbUtRRCtdJntucDZPZS5QdVtUNChzWnY+LDVwNXJxLzVRTGF7R3YlREYiR35aZUhhLGc+fStWNTo/VSZBZDpMX2kmKGRuPVcrZmlqZ0QsXkxdM05JJil5MWgs'@;
put 'bmFxVDpiSys2QmVXfD1ZUGNqZ0dUYWlJO3NOQnY9biJkP008Ok1RQTRJcXpqVy5pNzpKJX1OWnZCKGVUWT5dZSReX1hwdkFBTzI7YGZCUGY+OmRPT3QrTmdZc09rMVl+JnFeIToqVDEwaj4mLi8pcX4xN0ZvamNQWjNNS2pQcjxkU0BuS0lnZFB1ZzhIazBhRnw6WXB9OSpOYyojWnhjPDFiVk84'@;
put 'fmNRciRUPWI+UiF+Vj0kfE9COkxSQzZOZDRwSEVVZXlqRUhQVm43KGR0eUFzSzR4ZlJvakIxJX04PVcmUi9KPyozIiF2emV9Mzt1SHwqOjA4STRgcllVdjhGb0ZjIms/OjtVSH42QF9LZVdpKj0xYllKQn1FKjlCUSQsNlF7QFtvSCkkeXpxWk9FKGhgdnBye343YyJYRmYuQ0lnVXFmRnhAUHNb'@;
put 'JXRpSUwmUkQ1PXolWnpnbjlkSXFoaEx5eCJhJkdWRUZLfENLTFo9TGZ6I0h+bUJkcmUsTEI2KWlfO3JHd3llNkBpaE9vTGVzcSNBSXc4bnNYO1YvMkk4akQiJm90d0I3e1o3XmJHKlREPm5DKjZDWGVZVV01QFF4ZWZAdm0sKSR1MFY4S0ckI2oxKWQoLDxJRXg0Rl1iV1B6cTJKdWAhLD1XaCVL'@;
put 'b1ViIUJKXn55UVgyU3NvQntAVHxvU3oyfUwvXjZ1bERmYFEsMXBGNitpckttfEtNY20jNVZ1SXh3fDY3OFlPeXFJJUI6ci5KWz0oNDwrIntIbyxEb0V8YUx6dC9faj93LDRNaWx9IXJxWDssWjRsLEwkVz58Ql1hRWlrRHNXWD81cypFYlRLMTtyOTM7bz9tejxWbnR2SSFOazQ1LkVAPnclNmM9'@;
put 'eTBQWEdlOENhSH4vc3d5fSVAITFTWDtZPlB7IiM6Z348VXFrTzlhdlRzdT1WbldDVV0yWnpTfTcwJmhtXltTfTc4Ql1lR2cleyNXPE46S05RLDU5d2BvU2c5YlVYc3NoaVF8VmB+PzBuQyJeM3d3IXVqOlI8OzQ4JUMyP2lMdCI/cCRuQiheJD1CM2Erd0lIPEl6NDlOR0tld3YmMXJQU1BoYW48'@;
put 'NUBAT1cpYHwqTl9RZC8lOVdsYmU6PUMzSUVlTT1BXSk1Tm90SD5QUCw2RWRiQHFrMXxDSnkpfipoJngqe0M7bGg0UXVrTnNTOHR6ZD86T1plXWwkRENEc04oemE7QEEvWWFNOyJITTxVRFIvV3RiW10vSW0lZCwqMlAwKntHU0l+Y0ooMm0yXWZTP2k7eXd5UHNMTXghaUBtVDBpWjZQeXcpN2tl'@;
put 'Tl5wQnRJTD9DV0AlOEYuOEJPOUZubW1qLEpCTmJvVCtmQEFSNkxpYCoxaUZsLzpWQDxIbGFmYTMjaEJ6Kmxgd2dFLmFBT2VBP0Jsc1dDPlRecEFFP0ZEOiJlYnwkVkRfWkR1YDZSSGlWOnkvNCN9QC9ta3N+MTxaL20uMzpUfURxejJva3lTRE1rOkRlIzRtNWw5ZEApYyZ2RHMjOG9GPTY5R0RX'@;
put 'JjZDd1VqInZQeUJ1LDYuUCMyNndjcUAkOih6NVN7V2tPLCkjTCNwQCV7eWNMc2ZzKngyTktkPEpRRV1GO2YmKHxNLEhXVTUjYzQ7JFM4XUd+cGhKYzN9Q30+R2B3fFRyNyx4dzx6W2labVN2dmcjQ1A6fj8lTj5HMFh+WEZuY1FoQTp0aEZncD94JCVMOTJDOyQiaChaX0BjSl9FTz0wUEJlTT9v'@;
put 'U0R1dyZoYDFoMFlaPEgvfWgreUphTT5RXjBdImxaQzwoVEhARj9OVlRsMC5bSDVnNHw6b1orW1k+OWJ5SChzLH1uVjV7VHlne01BYzpzRTBjS1thdFtofjsmYCV3XnkoWElJKmhKRXJUZipuLiYuO3BoWmdlUTMyRnl4eWVqT10vSGF5K2VTczN8cms1UCF9ZHMvPlkkfUQ2Mz1XSzdLZEAvNXgr'@;
put 'allebVlYNVR1Mix7aFRCQHQ2dz0mJVp0d1RsI3x0VUkzK2d4UixKJEB6cm5ifGFKPzhmM3xePT0lUFRMX0l4bWFGTVRrQUVIV31iYkZfWTFIcTFFbEomIXxvRWdWeSI8ViolIUxpY2VyOUJxOCZ2KCRZI1AhOH5qVyZSOGdgV0MyQl8sa0I9IVZUUlFtNkdUYk0rN0htU3g1WSFxL3s7WnUuaEVU'@;
put 'cmFkR2giSllBX0FAd3hKTnMrJiF8RiklSyxCLkIzOFA5Vk1+e3plUzZsYXl+JHZPMCRTLitSNTB0ZE8scn4yfC9YZTpAXiw5In1LOD1nIVYiVlJPaXhPYUpxdDh2P1ArTlMjYjtDYGdZbTwlYmFhRkIyLmR6XTEoTm5dUGlfTyxbRVE2PTJJMyssdEhOcTwrM2Mvd2V3ZU90R1RTUksvT19XNWF+'@;
put 'LHshaXkjTlBrcTdWakg7VVBCMztkdVs2ckYhLkNQQGw1IWB8eFdSJW5NVzxtRjdiW0ByRCtGNS9qTDhqdXImSnBtZHVBeitdeyhpKF8lP1ZIYCliQkQvTFJjX3lAP1tEYlEsWGJwQG1meDYiIkwhV3dKck8jRmFVL0NpSDhrNzlhKzhKLmcrSH5wMkxTeV0zMEJkX09JLiYieWNzMkR2UVhmb2Jh'@;
put 'XTBCdFhtITpZRjBdUT9vdyZ1V3ozTG4jWH5mJE5TXV1NQ0tCKFZaK01OW0RqMzBtQilnYG5gWkgsVjNReyUudDZwQ2Z4XjdbdVM/ZWM2MzFtJF1uRSQsQ3daV2EpWH06dHRXO0ojOyFnMTFCdyI3ZjxUOl8yQU8uXUBFT0Q2QTNwPCh9P2VCbWlGbzYuR08oMH5XanZ2YVt9L1ZNbE4vaFpQfDl0'@;
put 'KzxnLl1yM2pOV1A+WEw1b2EjW0UqKGpIJDAlalNNViRhfUs0cTUmUjsqS2k7YUVPQUc9dFQ/ZU9CYmBVIUZQbFhrPl03LHg8Pmp2cUQsamhmbmZ0SWQoa2lVZGc4SXhscE1HI2wvVWduSCtPQlMsOnNCa3l3Ql1NPUo3VSIpWjJKeTt0S1hDfF5bREIrV1BxSGR1aUk2dkwxd21iOW5FN2Qufl9O'@;
put 'WnlobEBOZFs2UEwsckRrIzJadUN9ey9FKz1lVUNQc0Vqak5mQyk5YGUvdTd9NmRdfWgwUDFHd29NdVkoSVtVVEBfWSsiWG0mQHFMZ3FCWHgjVWA8VGApaTZZIkU1LjJqWjMyOnV3S1V2Yl5QckRZbmdQRlc4RC4jbH1APDVsNVNMQnk8JjJVcTFRcHI+KE5jRzpGT1M0dkIuXiVUV3RhUCE/b3ty'@;
put 'c0A6djREI35sVkEhWWlBIXZFWnQ1VGNxfiRaJk9ueWcjKH56UyV3NEtWUyMvKjlVUWlQPnBgQS9+d0Z8Sj9BODQhN1pqaWAzPDcqNVJGdXhOTFdMZUouZTdhMWY2TUI2aCEyJj94dXR4JUg5SllTdFNaQWBzIUNmXls+WmolW1g6O0ZmVXs7VUJnPVByYix2SEp+W2JAT3QvQFJgWH5FQkZ6RUkp'@;
put 'KjpkWVFwZjQkPV9DZmspPUldM3VFM1hHPSRJcDl8cTxjQ2JvbyVMK0FeLDw/MEg8MyM0QSgiImNtcy8zWWtSVlYvKHheMTJjOCpMRChAVlRKdjNuY25eU2ROOFkiWEVFcD8rPGN+WUAuS35GekVveUAjZUw8Z3ZrUyk9ZHFRLHFiJmgvb3gmYkQzd3xQOkdPaGopa2ZxIzUqTHNhcT5FaWN1OX4r'@;
put 'Km1NZiIvY2V5JiRCYU5Sel1UTCkzSmpmRmM6Skp1IWViVl5PaTBNKUo0PkZVdUNwLyFhdThmVEkmdTlFb09LbD5sQmRzO18rSXt3a2BAP3F5aEtXT11Me1J8I1Z0PCUwdCQ/fW8haSVffU5OeW4wJXZDb0xXRCokY1MoSVltKHc0fV11LDohZD8mJD9EbygzL0RCNHZTdTh1SVkjIyUrfDEudFA1'@;
put 'IXJvV1dXR29GP01rbSxsRnJiPEVNJUI4eHx8S19rezVObDRqO1Q4QHYkeF1hT1g/Lyt7PWskOVZqMVlhciolZEVFbHN2L1tXJHBbUDEqKEZQPVA/RWB5LF9kZ2JddURMSXM4fmhmWDxBRlVOdEZeOFRJSHtqPk5QOys4dzxiPlhVRj1YQW9IY1BlLio/JSl6S3NDYkw+RVJGZiY2OjgrSUpqcjEh'@;
put 'fUlNPD52MHosRitTfH19UjU/O1FoSmNfeV1TfVo8NT4pfXd5RmNrKHV1PE9aKyFvQE51SzVkWFRsNExnTDZrJjVyUk57N356VHcxJT5lKGhhfnhzUSVdeGxCKHsvfU9tOiFxPmVgInNaUWJyWCZKZWI0dnVqKkBhPCw9MTpHeVRxOEM1SG8yPkt5KTE6Yy44I2pUTC9YeSpBZ2g/fFtNWUlGLyFJ'@;
put 'S0BCM01CaEhdVT0vPnNoMFQmPWcicEYmZVV4X2xjMWBCM3kqVF1gJilKWW9fWG5MQlZ0ei9JOG0oNkZAc059Ok5LOCIxUUlFLGxAJUMwKX5HMDJ4XXMyK2JXeG1pYFRsRiZQd1RvYl88MnRwW25NIkwhdz8rWSwoNmQ7Vkh9QUU1V0w+LkwiaFN5bmg2QVJGZjoxbmc+QDY7KmlaWy9db1NOfDdY'@;
put 'fHxsZH5eWlE+JSU5WD12TT44eHl3a287IyNNdWIjK1dLPSg2VD1WIyRIZ3Z5TF5ecHExVjdZcCl9aVlbcnZrbH0vPH5jWHN9KSlVcnElSDJNR2QyRzUxdUlzKTkmTTExbWddXVJAUjtkKGhYZE9rNF13ZXdrdzQ7bGV8bitiX28sL3EpfH5fUD09ZVNqOWtZQV1uQnV+MC9wM0t4Ok4yNChNKy41'@;
put 'PT0wL15pZHl4eFVhRX56UD92X0NkYUVmOzVddnVqMjk8NU8+ITkySnBlP05Dc3NPSSZkcD5bL3tMW0ZQZGRaP0ZNOEYrfnw/fTMvPTVQKitSandzXUI4XzMmUWtUN15ueDohe1A3bWdCZ0QjRCw4amNxOHVmKDA/bTRHQl4zWCxFaTxscEk5WUhuPylVKFV3YSpEUzw6YS9ESCplXzxDQjBHPHRY'@;
put 'LEZ4LkxOISlhI18+Y3BfT0llWjolWX43X11rKn5xYkVVWVp9fnQiMFJHQHo0WGtTVUxTQEIxPGZKaXlFa0k+OnU+dHZIbllxT0hMKy9xbix+KGBbKTVzbno6MGI3JU14L0ZYeE1bMmEuTF8sd24qcV0uTmtTVkVmcFdPZFtPRT00TnpwSjNAMDdpUXdUQHJ0Lm96fiU0ZyxMMW8qdlhUa3ZWTFVB'@;
put 'aiF0b2NsSCFCfkZUM3JeMUckZFc0Inc8JDlrcSRkTXV0VyVhX2pZZzFuPjFSZHtOWVQ7NVJmS19aIz5wSzhAQ3c0JmM4JjVMbHtGZ3E4bzx6MF97eFdZZHJtKDhecDpuJiRtW3RqKCEhODRkSVdxPU1BIVtHR31PO1s5VVR3OjFlJE1ObVoqfiQ9S1VqdyxObml4L2x2L3JPOWZMfGVWZitRUHYi'@;
put 'JkpGdCloQnghSk9ZfW9lV0x+bkhgTiQzPGM7aEBKa1dNUmFAKGhvZ3I7Tm5Va3J1S19VRTVydTg8VDhHYkRqfkhaWFhSWGhuMGtxZj8ueCNkQDxTXz5zVzR5QX0lcHE1R35YJH1GVHh1PktqRl4mZX5KN3V9eUxoa282Z29yZ1ZkJiY3bGxSJVJDPWRxailxbDtqNSNmfHdsYV5FXVI2I0xkJnpe'@;
put 'Z1AlJHQvY3Y9YlNdal4haVdCKSEpSXkhXlljQntMb29FYV1SKGUzPWE+a25COXlHOjQuYXNLSXpdTDRAPlc6MTV6O3g7azMhNVcuZlImPVlQP00xP0hhKFB1THgxN3g5OVJkNXNRPDE2c3l4OWN5VUhvUjlGUnx4OmBGZSYyMT9WamI/ODZPNHFLVWk2UWU0YWAxXSN8SiV3NH15XTx5TU1Hbk9i'@;
put 'YTZuU2tDXiR5YzVeXjA/b1N2dz9Za3Bren0mYD82NGdEZm5jRTEyNURzNTgyUVR3eVlEbDZ3eU06aUg5SFtWWGZZLzYkZWl0T1sseHpoK08odSYjSzBSIWY+clI9OHxZbF5JaWxfUGslaTdJU3ZSUGx+UnQ1TG9LJVlHOEhkQCtHZyYyVXhJd3dnTy8qZnEzYm5FKmQhWyluYD17R31sVE98eFRg'@;
put 'bGlvM1A8Z2dtZVozKyFLOz8/YD5IMV59WSxhMFF4dSNSM1I3KWEpTHoqJEo/bn4zaSpjWWIhOiYmX2g8TDgzNTgvXk5zelJoYE40b0hdd25PVnVWbiltbXxxPSJHW2ZMJThTa2FJdVhzfUk6RyhXZkY7dm17elkmVHYuUUpDM1Q2cCJGamMwYztwY3dYViR0YDtmZG5yIXRsIilwOGlCUm4qYnI7'@;
put 'd2E5dyIiNGQhdnluPDpUS28sUjV5STtMMlBlVVlKRkdCc2gwblRvT10obUcwQCpXbSE6MCpkaTMjPEFgVkJtO11OLi51N1hlbHVoJTQxWytNWVN1eiE+dlhPfiU9QURxZE9DPG5rUHVDRn5ibytVPnhhTWUleT1kZHpfK0JhUTwkKGtFaStBXnpXTkpSZ3R0IyNpNClqKVVfeUpEVHdxbGBpcCF6'@;
put 'U1ptaVMmeVRRQzk0Qlcwe1s6TjsyZ2ZINTgpaHpuaXZGTTNbWzQhTG1UXjwqQkZ3V21fZXwkJCFWcW4zWTtuWGJCXkVOSEQobkAwWnslfVhGJWF0VWlLYixUZTF7eH5kOjNnY3xFKUciNVksPWhJMkJVQ0YlXnxbYSshZGM0MigjVjghay5wYVcjZX5aYV4oejJERU1hKnB0ZV1aQilzNWZuZj96'@;
put 'JFpkZTpQUGNneTcoc3NxeURCR0QodHhWWEF8OiZ0YnY6WUBdZXk/QEpEZXczdH53RzwqLH4+P0RIQz1gclUmNXIjVE4zeiQjPlojOi9FYk1YPG02SzF0VEJUfUtbZDYqVFJ2dzxOVSReJW52aCYkSlM6UGdqNHJ0Z3o3anNpP2BoZEdMQmZobCg3TTNdP00sfl18L2h7diNuL0x+Nz43enhiaVk1'@;
put 'JjBBfEU3Slo6VT1ALitwQ2hgOkowTjZmX0RldVUvRylUUnB1VlNRUypla3c4MTZhNkJCJnlYYG15MHpeRno5YlcrUF9GVT8xaWE3L1QkOGo3fmUqRlJjTnI2KDF3VSQyTUhuIkY9dDw/Zmh2VTI9YDVCPFs5alQlbz43SV9jSzw2NSFGd10sMmMreU1AYnp1bGBPcCYmSVE8Ll1+XVY+M15KP0pB'@;
put 'LzlWbnY5fmdRdmFeIXo8WXdmTXZ0VGhMfjsxUCE6cUV5Y3ZWY00xdTZUODV7ZDVSKl1eR3V3Q05XXjxYKn4uZWx8dj4/QEoxfkZIfnc9KT9GR3UrRHMmNXdEfUkuIj5VSTY8bSE0TjQ/YS5DYnU1b2hZQHRXXkE1JF5xfTBaYDphMTdqfSxtXnNkYThTY1QlUHcxP2ExbTJGZkRNJWE4QnVWYXg4'@;
put 'OnRuRTglNFAwdjh1RGVtOm1xIWx6TXNJRTNfSkd+ciJBKyg4Wz9teyg5RHIlQGNUOEZDeDJ3RkQ6UmdwTHhFI0E8RHhoSV1GeXxeVC5ZN1tyUDddOVFEfShYaX5vVGRReldGcUlaeDJIQiI4IyQ/UlFUen5lN3poT09hUF4iY2ptWV5wVDpvUUY2cE5iTWY5bnkhYVN1KUoscENRYGpyOi51Uzt2'@;
put 'PUVJem9rQi48YndESXZbMDNIPSM0Xjs/aH1tZFpaTSN4MFFddFEuUWl5IlorI21SXXJCfVAzeWd7SG8qTXo2OUhuakZgVjd0LG5pd3pkRGs0YW4oU3p3S29ZQEAwT3NhPHR1UjRjXUdgKD10JH57Q2JLfClJeFEzMG1PeUFIUkolSyI6XjlyQU19NFtucXRKeHZKTnBXZnV6Ql8wcEJSPDk0bjU8'@;
put 'cT5EKDlDZTd4Inx5N1Q+QjsyM2F2KVJ5NDh+PF9+cHxEVnhieCVxenY7LyFrNSQzaHpZX3pkUDJVMUpVQyh4Y0d2YihbL0xTUXBbbzNDJDJva3YhTmpMXzlYY1k9SFRQM00+S3RhT0xIaTFsbXE/Ml40akV+KyQ+L099SD9uXkFiTiQ9NTNNfllaa2gxJS9WeDQ4fVkhRmswWDhhZXJ2QkIsa2VI'@;
put 'V3U/WEtSM3NjXTtCQXp7eGNaTU1hJElfLmZyZGxNXVNsI2k1YUBWYSR4O1cwK0YkY0B4ZnZrXVVZamR4QyJFYUFDQFVGOjFKK21veDF3WUx5TGteR1BffWNWbmxnN3R9bFpGbT95Zj9LO1UoWEBXIXNXM3hCZmFNc0l4U2J8e3B7KipePTEvLlpQUTk5bll0aVZyUDAwdzNvIWosY3QyY181T301'@;
put 'aToyeW9HRzhbKXoieGsjTHQ7fCJzPD1MKWFJQD5MZzE/LnYxVHxuQldpVjYkJj8qOGlRWHZbVVp8al40NGBxLk96X1dnWXZ4RUBMNXxKXzk5PUF+ez5sQzRCMT50WXZRMjxeeHdyXixFai5rWjFDcXJdcVdDMElfZmo2cH5PfjdMYC4hQzgyUmR7Rz4kOWQ8X1JLPzhmcykxK1VIPVlBcH1+aCYk'@;
put 'eiFhVDlMQkJMQXMxays2Z2IwQCY0M0t5Nn5YZ0okWGNDZzpuTi4oTTslI098RChDY1JeTko6XWBNWEZuVjwjfihCTlNJLmhQR2JLXVZvPVcwMmp4cEN3RTZfNDZXbjprPkpbOzNBPGZfaXlgKEJDZmlfbEVWQEsuejYvLjBuaHhkPmpLflpYR3xKRGIoR19BOE5PT0JwbTNHQiNYVF0oQjp8ZF5w'@;
put 'NTZHJDRxW1ldLjtvJXZbT1BkfDhKYCJBU2BLZFNeUWM6I2ZaVjNOY0hoT1tNNVAiKWIkR0dyQi9oNW58Lks8K3ptVk5mX0Z0aXd8VyUkblQjOj94MHgyZiZiayF3eTRwWGAxLHAuOH5XS20zMWI5PmBBSVdRKHRmUWM/NCNdNCN7IipJVzREe2xQcGBeU3lRSm0pYHRhMERTaipQYz5IWXBQL3J3'@;
put 'RUBLQittUkRjMih1M0N6IzNAbHpQbCklbFhVcjlRenBGOjxFX19qXmJ1Unl3VWtIXW1NbyIme0ZTUk4jamtYNy5QUkJTQmYuND5IQkhKLlo8SHdKI0o4flV3IiYvc3ElLnlLNyMsTWFeWkZbfClRZS4+d0hCWSlPJnFCaiNtKkNFaGR7IzB0QG43PGRDKldQTi9PbipafFssXT9QeChrUlF+Z2c4'@;
put 'K04hcFhnZj1oeEU9VE97ISttIzt6fVF8LCguMUtRL3Y3MiQmUW41ZihXW3JgN1ksNl5eR1tUO2IoMTJQPnxkY2tDODZ3eTcpPSMoRCZkY0BFTGtAPzFRaVttJFc+R3NaeDNWfkZmYmZKKiZXVFJ3Jk1heFAlZ01oRmVEc2J+LFFnY0Y+NU5DcnxvZWx5YTtZVndCX1hTXXJeY0RIUFNuTlklJmg/'@;
put 'MkxgbDdxdXB5ciNOa3gwODQmWjh3PSE7ISVCRiErSiRiMWglfDpMNEJOMCo/dS9YeVlPbyJiL18rIV1XcVpTQS5kK2Iyfi87KmEmOjs/S2lgTGB0MDM1OHxiayxOZ2hDKnNOOUZVaz9ZKV4jby55c1ZQKnVvPWJVTVd4RT90Sm5Ca3Qyc0Y1d1lPdGgjTjh3MklMYzY0Rm1wd116TmhQZ3tlfSQ2'@;
put 'WXJ7dTpBfiEvUH50e159cTNKcUB9dmwxci9GV1Y8XiFBT01SRmJBTTA1Pko9VntIZnVfUUNaPTIlVEtXeGpfdn5VOkE7ekxQbyYiMVshP31mLik8RnxBT0Zxdnd+WG42WWNzTV4sR35KXm4oVjpbbEtCMXBRPXBSQjRlZENgNmBRb2hJPUJOW1FbUDAyLiVRSTZKTTxXb3ZDbz0jL31tYXNhTUA6'@;
put 'akw0Si51L2orXT4qOXBNTVhiZy4jfnR4dWAkUkFYZHxWL0VXQlZHLFZMRDkleldFfUhMYz1UcS5udyg5WHVfNGEiQzEiIXQyflAvQEAzWyxtL0ljI3dNb3MoIzspLChUZXMzUC9DOXQhLGo+OysqLHYib3ZyR0pwaFhVLkx3WUxfZnxCNDd1ZixYUipsSDxwVGd4WXt9UT1MeGYpfFUjTyglbC9t'@;
put 'TUxkW2ckTSEpZ3ZnPGsjLn55X0d+Mi50WnVoNWJhTVBxVk8jOnZmRHp9NyZHQzhFJTx1dHgwdUAkNkI+WFovNlB3Vz5vSzRkYH4+aTtKO3tiQUJHdHd0c1VeRllVZ1VhK3tReX1XM3xEdyFgV1J2OX4jTntPSylVLmVTJU45KW4/QHNVRH1lIkdYQkA3Xk5bYkNgRXtvek1NZks5Oio9dW4je2tI'@;
put 'RE5QJTF8a20mNEd1KExId30yRnNBYV1URG1YVn5XcWhfQyJRZjp9Iz5iM2JNQ19oNUtXfm1TZXlia10qQ2RafDt8KW8yXUNFLixQPnNTMCl9fSZ+Ql5HYSpfMm1BODZTZVd2KlsrQnFhN2AzVXozaCUrWzFhRCxQSitQdSpHajB8fktMTUpsaVE+Qm15NEs6UjlKckRLdkMvc2pFQzE+M2pNajk+'@;
put 'STFrdXA5aWBCfXFPWCJieX01TSxZcGxKOntZOHY3ZCx0M0dKUW0uTDQvOU5CaTklZGRqUCNYYXQzJXBacWN9NG1+fl1bRilMZCh9VC9EJnVGcCIzSkpAU2lvYSxfIjF6fTpDJW9xe0Z5fE84QyhTb0N9N2B7bjtPI0xjYkkpd1BoU1tgZFBVaG90ZEghdTpRZzZ2Ny9HTlt6LiUlJkFIPVElZEN3'@;
put 'TS55OWx5XjIhR30sc1lKO1BgTyQrIzhDdSgkMnY4Rko/eSIrWVAoLi8jJkp4K1pSRXxgbFhLL2ZPdD56Uk93MkZFc3NYODcsXSROLiRsZ11IeDB9ZVt1aGdCIzpYQHouUyx1T0xJdiJpQ3lTPlRVY2hDXTpfKUFGUz8+NyhzfnlOb2cvTGw7fFFXelpadigxZ2p9JDYkYWIzaV96aUZ9SmZrajNd'@;
put 'NSImKTROKFRyLkokNGlEKjMkYHRqd1A4U34iXTdyOm9aUTdZPHBFPiZJPVNKO2UqaDVwfXJkcDZKYyZLdjsxPjN2SlsmMGQuKEguV3lzbFhNIVFAampHM1p4XkklWkhZentlODxeViZZMDhDU1JQKihfNi45V3tFaixOfTpXXktOVCR6T2dDZXhjbmZvRzZbNkwpeXxjUnVxdEdaWGlSODlyZ2I+'@;
put 'T09LMHBKM0BHUkt6Y2UpSWlFUl09WS97RVJGeUFHNGBiWTpkKztDamgkenpDUDQ7QWEjSz4qSUVsJixhTDlTQkpkKXNXcFAxSVJscklSRn0vPXcjPW1HLlkybHg3QH4hNTVTO1M4QVFmZTI/YDZGdG5lZyFTVVtncz88M1E0ZCFwT0Z7O1N9clJ3WG9bRUExS2ljITdicTZra1drQClfRFsheTBh'@;
put 'JShtSXNbNWx9MDtGcH1LVW5VXkB3aGptQFlYRTJ2KCRuQHhjNj8oMWwqMHNTIjBdciQmUV5ISkleQFFTXTlbUnZOR1V5PzU9TD4zZyRnJDVedEU9V0NzSC92X0UyL1IqJCYwLG4zeDh+QlswQS8vaCpXSX1XKUp2W1trKmNIVH4vMSMsV0poY3Y/bldwWilPRTFAdzZyQig7VV1EZX55SGJAdEFW'@;
put 'JUMwL2JIQGFsY1JmIzY6QCNsXmI4MjosWzs3Rnl3VFFafnhFLHtdQjg1SHgiKWUkY3QkNiEmMCNKXVckNXVxSDcwJnZ3Qj4+Tm9yRD1EXyZjVXIjJiFqUkFGUj18NmhPfXF1VGZpRzIzdS5HTz1HZ3ZwKUBkS0xAVkNraUtrRTdrbFVVb0klfnRbNU8jQXcsZzJ0QzFjZ2BQY1N2KXd8Oj44Ik1o'@;
put 'c1ZiWWJWaTw+JnZXbVFmRjlJRWlvXnBzdEFOWHoyblNpLFdkek03Ynd+Kz08UFZZQjtQXnBXRXxlRDh6NG17NTRVaiM3TGJEflZDJFk1Xz5VJFtONjprQlt+YFFFM0ImU2lyJllwS208cWJnNjlnPWZyJkB1QXMqJH5xUjIjbXJ2X1RLZn5HN3o2PXRie1gzeztLZWZtdEA1NVlZPnpDQFksSikr'@;
put 'PFNMQjd1Wyg9d11wYEZPI3gpVzoyaThzPHVfOCg4NStLX2lsUEhnWEljdyFAJnhxbW12NTJgPj1TMkJAPUwmVyZdKTRENDx5YyRad21UeEwmKWVedCR8Xnt+aGJtM1QwYGFbaiptMUxSO0VmdllkKGNscz9CaWpBSWYlQF5nWnRoaDFPLExtVTAlOFswfXFIdmc8SHxEYTgwdCsrIW5eNTNZPyRx'@;
put 'N3BtYnguanwjJihkKk5eJlVYYkdsNTR6SHpKZUpqZHNRWEU5W1pFLjtbWjpzRUUoflQwckVjS2Y2QGE5dXJaQGo9KTdtPzFRb3IjRlZ+TDdvcC4hQmFdbmJ7cjkje000OjUyO1VfX31rLHw8WSV8ck5qR2UiWVM8Y0c0KCkvdFlpQT1CJHYwQEZBUzY4RTQwM0xha1ApUGg/ZFNTSTNYem5AWW5M'@;
put 'JD5TZVVlY1dLJGw3bDdaUXoyJTNnYykyTCN0blgpdihHaC5EPlc/S2FUPTZ1Zip6Vl1MZl1MKGF2LE5UbFtZeHVmdyNXWHZRQVpzaCpXYU97LiNzeU9tIWVSdFN3TFRvX3l9akxwJklFKE0yaUorZ1dRSiVgWl04Vj0sOGlQVy9XQXVeVExEXXROJS8mNm9FNDYiMUZpZ3xFJVBvNEpUM3cvK34h'@;
put 'P3Z8MFVBVzkrc2cjfU9CNzJnPSh2L0FAV1RpQk5zN1o9O2d4TWluIzdmKlIvdSMrentfRX1WMmVTWUtAZl1GeiZ+eFJKcm9IUzZDMD4yTUgrND02WCJHYF8hQihPOHRiO1oqPCZFISkweTZgcEFdakpNVDwkP1BoTyhyJXc0LlkkVkNqdj9+fn5gUzxKJUJUa0g5ejExNmV4ZjZXWzlTOj46Kzl8'@;
put 'I0E4emImO1E8eUNDa0dRKGJtVFNKUHo5YUtEV2UmUH5wOUhodFZsO0N3ay55SkwkTypeVEJ0QyQrMU5Ld0hARTYqO1BeTF9eIVhfcyVlZFAoc0pURlFmbms6TTs4ajFwfCE4MW83amA/ITpAflt4KyUyTnJNOFQ+NDU9JUY7VD9WQGVGPkw6VXBxYHc8fGI+alF+L0hLZnpQayFWaEg0Z1dmQWEy'@;
put 'VT4oZiRSZnNyLlNtRCllQFBqTXdWaDx0SF0qbSh0Z1MvYnovfT1rfEJ1ZWomTn0idVNLUkxJR3FaJU5CZWI8VS5sYT08IWx9NF9vdD9McFMjJiNnIytmYTVjLEgqcU92NSJLPHUmQj5JfihdImlqV1RqTVB0RUgucl59fEQyK2AvLnpfVjdLWllhQF0+SlY4OnlMOEIxX14sU28vKE5LP0dzTjov'@;
put 'MCF1Q0UyaFZvZExrOip2L35HLmQqbE80YmE0NjksMzNaP3EzTENCQjA/Vlo1aSorTFJkMEYrezNFW2Vtfj1iNlMoS2loIiYwbCFvLylEW1IsMEsyfTBHUmJ2R3NNUyJJe2F1dWtUQVleVTBEKmllOSomTi48ZU1SezcpU1suIXI9TV9eXl0qeURLc2NDZSIuW3Ale1M3RWskWFJiOS5CIiokQDpL'@;
put 'MFpWMER+c1ZvXSMiVi4jViR7SFtFRURVZXRaYUtlImRXTHUjQ0Ahe09BdHNOY2gwejAjfERhLyoocEppIWRdUHBmaGRJKEU6KVlbS0VXaUNLaEtTMkZTfGxVK1RIY3o0WE1DUkkqdEBvUEopfV11O3FFTzdITS4lMFhFXWZrNCxjXWQhTEx9Q2t5LF1OPz5fdGpDOmpRcDkxdi9yXVRVN05+I0FQ'@;
put 'fD9FQnIrKyopbW8/Tl57bG0vOnVnKHFSaT9PSiYxPlApSDdWSjpGeTwqWD1OcXloc0BURUBqMlI3VikzcH10ckZ+VD1vM3FJVyVTeEUjRyRPNFlUODtxUV9tOzc5eyt5cTMkZUAzbjAldEUkaiVXXz1aU3xLLGZtNSNofnQlVndIY2AuN0s6YXdRSD98Z25ePCNbJTlVYXY5PHQ1dUs6IURaZWR+'@;
put 'NFh6RiN5UT47ZERyZysuK3B8dmNtPVJ1aU1YJmh4aGxwZ3gmYVZ4W18ja0hIRCkzZVlNNUJLcldGeXJOclEoISl3ZlpJZzRJYz5JKWYjfUpOSTFOITI+Ryozcn5VdH5haFZhMldoJkFRMiRpdV5oan01LiwmKzAzcUlOSyoyaWwuWWJGYiZNe1UsYF5CbWhweEV4WE85WmU+Q3I3e3NfVkFUdDhw'@;
put 'ckBOPShuPjlSX1okLEtaMU8rIkJDOmA7S1tZNUteQkt2MEpOVHhNY3YyYDRyP2N2a0xhUEVYPDc8S2RzR1YjKj5YJT9OOj0xNlc0U3IkTUh9fEJzUERSNEF7XmhTMHpCR01eP1hHc2hONkpzL0llKl5CZDAyd3FTYmdtVmsmYFdNYX03VFhofj55LHk1eldPPXtWQz01ZnJZZ3pRZnxfQkwpOzNo'@;
put 'azx2Sm1sXVVbYjovXnxYfS9iWUkkeW06W0VbOlpLLHUzfURNeDpMMGRRbGAxJihKN2lJJCtBN31KTTlbPFVtISo3KCFDbD81LF12XntuTUAoJDRES3FPb2dPWGApY3BNcDxnYjZkenp1O188eiEpdXwrVE5kJEVuOC41MTNUZ3dlKE9vaSkzanxec293Mks0L1hRQHdwQDVEI0A1KG9PMCVVNkZK'@;
put 'RUhFRWB+Nn42L31RdnhZNlVERDxdNG49NU86QERmRkk7N2VaTnNDRD5xVXI2Wi45VDhYfURRcysmS3p5Ok0+KnlpQC5ncGg4SjQvNEBEMVZtPEJ6NTNIWnJ1fks8alJKJC5nUzhhUn5DMGg4aUo6YSJYUl59QXcwJG1XUTw6QE8zL0xoVkplZV9oQX0qSCU/NyV1SFhYUD8wbyN8WGNEYnU0VFZM'@;
put 'dUI0NGVaNDEjZTQySTNJUEUpUCtGOHhqTzdAO1J1M09vMll2JTJ1ZmVhb2QsI3t1Z1hMbTQ7VmBOUXhOLEdASmApWmRuWzVCUDdYR2ZFOyROZF8oOjluVz5rSEhmSCRxYk97fnkvcltQPiRYSD5OVk11e2xodF1yb1BXImVmY3NtfCVRNUk0T3pqOWg4aTNUUnBiaDE2TyRPLEUvMD9gOERNXnky'@;
put 'eHYobzMqUns1SkY+N2UoOWgqU3giO3h+THBgWS8vUFIiTFooJVZRMVtbSy8jPXRJXkVpMzBqPztNXlFgRUhvM0lYcjxabWVzR05XU30vJHUiY0xgRis3PWUmQzp9Ym9gayR0SUR6NTV2eWlZX1k4Y0J7a349SSh2PCZRUzNSZS9kNHBwKDVMVV9POkM4NHlPW3wmfT1FJmc5VDJNTDdjTXU9djMv'@;
put 'JEFDR0pTdi5AUEI1XXYyai46JFpxQThTSFlQRVgmOlswYXJoMmg+MUhsUHVuSDhAYFpQdmUxRyxQez5YSVZDcjtUIzpCbGp+ZlJZLyNTNzJCdFR5W208O2w1P0s8Ryk+T0FTbHwjezJjcSMlMX1ndUZ+Sn5RfDglUWNUSnNeM3UrLDU7eGhASFNud0YhX1FTUUk6WkBNWT95VD5COjRmPz4zbkAr'@;
put 'SHRyVXNOZSkjSzl6MDJnLzojQDBnX2Z0XXBdTHg/Y3hbWUdve2lYPkdfIjJ1K0BsSG1YNi80bSlpVnd8PmklVFsib1kjJCFTcEhuU0Y5byQ5TCgsfCQyUX1DYCNHWVlBWWZYTklgV2l5KCV0QDlzZ2UhT1o5Myomc3Y6ZE5PeXRPWS46RnpEKThgMzR3KmFJc2pTZ2ZMJEJpUXFnVFN1clZfdG9d'@;
put 'Nj1dbkxWclpnVn5ZbilbI05tIytQazdKbSEjQGp+KGpydz8/e0NIYEV2NmtHQmpMcyNATVsibXF5UkM+fVElfHVPOjUrQVthLyNYYjJyXy4hTWVsJVtpI0JlRlB5cVJgSH4vKkBuPiF3JmJ1L1spYV5KLDNva0tJR0NrNyFiQ1ojQCoyZCtzXWN6Oyw4aWVWWF07RTgqK1p7UylfdXgyW3Y1Qyoz'@;
put 'Xzk9aW4wfUgyfWh5N2JmQCRlSmx3XTg8Pz4yQEBBZExuaXl8XlckQ0p1XzFNYFJ8bzdQSj0oQFt4NXpwWDJVX2tFLHg4WUhgc3w5R2kmaVt4SXh5UGJKUm9IdlZqUUlOK2hCMXU1Q3VkXlJVZkJdOygqR0NDOSx5QEdZfD1nP3M5KVl9THFdXzd7PV0sbi9EMlBoVCFIOV5xMnd5PTZQJGJ+Wix5'@;
put 'QE4pUHFxMk1JLGY/LmxTWn5HXWwmbXZed25WKlQ0JSZ6b00vPzNJWWIwdVo1UzlqNSFXX29wWnR3OXtsJHZtKT0+cVpHM1N3PUZxeXtAYiFXJHhQfCJjO2hjPFI3Z2dKVlk4amQhSHBoNV57N3NZSXd0dWN9dkY3Z2tYbEl4MGxRI2ZkSDVHLn1yeHBPbVlvc1VAOVBLOmJySE4kZ2gpcmshKjoy'@;
put 'O2FLW3pnd2tMVShXS30qQWttPk1TPjg2IStoYnZAIzUpSjN8N01Ien4sNlNDWmg9JDpaN3pGViVEa2E9ZGRGJWJ8RzRLdy5kVUxveUxebVh5TH5HcHNURF9zKS9HdXtUNV1PU2JVc2NXNSQzVShzdipiUW9VNDBqJDZFeigkUm0uWE1bYF4pQ1YpaHJ4Q05hTlQodEVlcHVNNyJee0Vhcnh7RWYm'@;
put 'YiM5OEspZjU/YHUxTWNBL0NINz4jNVV3VEcjL3t5WUZYT1BZd1B2diFlW312KnNjal9pfX16Xz4rWlZEOiM1UkBoNyVDNyMlKTBwOyk8PkgzYiZQRTklRSVUTD1iWUN2alphNjFpX3BpMnR7Ulo2bDV3TUpRSU52JHtHQ3ZbQF58L1glcihTb0M7cklIWE4mW3pPLl89eTlRSFIoJl5QNkE/UDE8'@;
put 'Ni5SMktuUXx1LkYjJDBtY0BzaUZLbjs3Xy46dXMvd1FqN29xZCRjWSJMSWouIUkrI2ZDVX4wPWlQUm1wYSZya2xPQUNUTnJ8IU5xez9tS2olbkdueUx2b2QpUTFpKk9IMGt5cyZwZlUkZXMjOjVHKX5xalBsOEU1Q3h7eG9uRmM5UHhSUXEiTUg1RjJ9cl8jY2w4UmsyKi5iWSsjU31TMy4pezVw'@;
put 'bC49PHdZfD42dEVhW09aXTIwXixzMmYzMnxmL3d3djRvaT46dn1GIylqKTYjZV0oOl9IN1hRSH4sOjZXV3FWRGFPX3EjfWZ0KmsuQz1SOVVLfj5FWTpxOkxJdUFPemJddTYsX3NGW3J7WGVhYSl1anw1JSwleHxla11qSz1FNTl2e09QViFLfHQ+KVtNSyteTnVFVWY/SUkyJE4rQTxCb09HU3Ax'@;
put 'ZyFuN0xFWF1xRWNjaFhLRlt4WzdCaUgsLixjWCNUT2plJk5rW1NsTTwrLzlQbjNKe2lJOjxYcHdjVGhpTU0iRDJKLFFsNW0vQj09dClldj0/QC9dNVpuJDwhMl89XUgpO2ZgNWM9OGd0aDQpcEcwWyw3Y0t1KXQpL01ARjpJJDF9eHIqd0AvRiJVNFdmLy87IjRWZVBDJSFPZUgyRH14NmplRGRw'@;
put 'Tn4qZkp6cE81eGVTYWxrUSk6bE5SR1lQRixCbXFpVyohLk46en5JbCpabl1bZXFQKExVLGU0Vkc6N3c8REdUNER3MEZUR1M0aV41cFUrUG5PNGlVIWNoKT8wbFpec1pYcV07WSxXL3RKdF09UWtCVz4saGRtSVFaLiIyYEdAZVNNe1ZCKltmLzBYSGpgKH4va1A9O2BvOG9BYW1pRXswak53cW9R'@;
put 'TE4lci96NHhyWXE3L059OG82W0tzcSVzYClTMXN5SzhgI35KUmFqKVtZWkZaOUJDKHJWZHJDI2AmZyo1SygpUGg7UldPVVZhJHhDVUtQJHc9RiFkJUkuYSEmYEkiOmE+IXA6Xkw/bFo+bVc2KVY7c1I3diYseUNkfV80S2FZTGBFRX5SfTVXe0NgXUNuQnF1Rkc0TW08OFF1eyt4U2d0SkZDQmc6'@;
put 'QmBNRG9KP0F2fmw6IVs+LHhlbnxmbWZtWWVwdEdGL3VCYkteJk8yIiJqWz5aXnQ3Iit9JkJ3MXtGWzw/I1ElO19hQzUxY1tqW0siangvYWFvSDBZYlN3fGFpQ3V5VHVKM0N1eyg/fD9ZMi4/Zl9ufThDW19QcD9jbF9QQk42cUJ3dTIwJF04eyQoMG1Rcz54TWQxJk1kI0hRW1IvKkkhUSgzZkZJ'@;
put 'aHpJWkU8aCFFPSFSIkdXS2R9P0BibilPeVczUlhUdzY0LyhgUiZqVjA5JFMmZzswNkZdM1MpOEheZEAocXAkdyhWM3dPYXteNWYvMj1pMGl9Zks3ZT1gKDYpdm1KWFBvOlY8bWJ5JUwmUSVJI1VbVnpPNjM8MDJrdEU1OG5IPWw/eixfMylQS2hxREBHanRIWnp4WF5ueXUlJEpmfFspO1g+OiMv'@;
put 'anMmZC55dzFGRmxdRjRzNUNrUCtfIipnRSRJZmE8QGcyOFZsTDdWZ0pfXjo0bVBQSGlreFRdUHUmUSNNZll5Ky4pcDR2X343SjAvalZGK3pYMk5tUmsyOHd2KERQI1s7KlJoKCNWUlIkR1tqX1s8PGw+QlpbLjIxVVo9bEomUnJyUWdaPntIPV9OYHYqSFJ0NVA3PjJCLjpfcXVuZH5nTFE9VGRn'@;
put 'XkIxLFUxeGBxY2lZJGZJdXVVPG0mW3JAZSg5LEpSeXdVeT53QF5XYjkzPzh8SWZMV3hGQXh7ZjV9IntWZ2NrbnJ2Kyo3a3IrOWFHZnx+en4meyMoaThEOGoxbFFjYVh1QnRmUkZSaGpaWFMsc2RZOFtJKV44Tlp7V183TlAzbHleSjFOY05zelNbTzY7JHhRIWxCRXNScmBWb2VIUUNtJE1bXlA0'@;
put 'RWU8ZVc3d08uOVtzMnJxfUgpQFlDYUM+KUFyaUx4bCNvSCJUQmZSZ1lIOH1OVTVyfWJZKlBscDNVcWtjTHkxSX1DPGlSIzhwSE5tSE5PS2ZSWHMmZmohK2kwIm43JH48eSFucGFneEZ0TE5YOD1yQWRdaXMrcVl3bE1CYjE5SjY9Zm1gJjMsIUQwe0UzX2ckYU9dfEVqckNQVFBVbDtBNipjZH5k'@;
put 'cWY0QEB7OVRiN2VbIzdYVEcpY0A8NmxIa002Lmk1WVBMV2JhO10oVWJ0XjZwZV4qJFB9dnUjOT4sRmw0XylMSmdtWTxFQG54PV5rd3krdlpIOjZGWHp7fl1TdG9iM0c2Oj9eKHVjaExDfClvJjw9OFpJV2x2LlZSZ2U9YWEkV2ozWTRNW3h2Tlkib1VZc3MkcVRxN01hR0dEaCxuZDpCRT1Be3Q9'@;
put 'PThudns5RCpiZmZAWG1SPSQjXUBpR18rSm5SKndwKUJMe1lHSl9ZSVgoS09aSzVqdkhoPERBSm4yVyY9WltIKS5sLjZHWTVtYW0pOns0MXRRLyZEbmVoe0tmTnZKSzhHYjBvYkJgSFY3YD9UOGh+IiIiZXJ4JjNubCQsL0ptc21gaz58PmkpIVNde0Q2aVI+X3pvMF0oV0RNeClYP2ckRkgkb2RV'@;
put 'e31gXjZXWypkREo9WS5XOlNgW0cydShDKVJIWGNFUTUxRTV7ZmVZLz4wJn5GSntfIXdxZSJbP2hPIUgmT2ZWXSxDKzo7JUEhTTZEaihpQUdZJn1SKHkzJTw4RmhCK3V1R3BhOXNqLHZvTzF8YXQ6WUo6NlZxWiozZUY2X3lIL3MqLzVye3ZGZzx0WEc2XXs1bFRDPk9SWFpUcTEsbWlCezEuZSxp'@;
put 'S2F7KS9qMnZbXmFocWddPmpTOW8lWzA0Uj0hUyE4RG15PTZIdDhYZDZea340Z1B0fDBPKChGeDgiTD9paUR6VkM6MSg2eURvLnprM0Upc3wicVhmQkhpUTo4JnVOeUh0LzU1MUJfPil1YDBLNnxMSF02Zy4jMiNHN1dSTjwyUUNoYyt2Klp7WktILzEkNF5jTStjbyN4JGZWJUlSamo6OSQyL3ND'@;
put 'RFo0WkxgdHZAb01gLFldMCRvKU5weyt0O18ufnc8PmVQX3tpJD5tTzpEanB1VXIjcy5sbUlIT3I/RiJII1VOcXgrMy9OIitZPWUvKGJvQFQ8Q0RbamNfInZdQUdMRTV4QFNza15GfkNab2tVLHV9cXRLUHdeUEsmdGMqMHQpciZRL1p2alJERkczb3tOOX0kSTFbbCxKNmhbPTwzM3duSkJIMCRx'@;
put 'WyR5RSVZN1dAYTQwS11VKkQyRTU3PmdZYz1AQXNSa0VMTDlyZXFyP21+PCFXOlJYZTolNVVAWj0uIV5AITYoISsscSxMNCxmXXdLUmtYSlZQI1cpdSFSfX0xY2R5ITBjJl9FNDphWF8wVVpAaFo0PUNvczlgXnVQSndlO0AvZmxBWCVlJnJ4emFvYWdNWStXYEl0ayhAQ0l4dCxlb0hoZkx8R2km'@;
put 'X1g+KnZWPFVCRlpdWkNsemA6eUduRCZmRGYhRjZuazY1ZHJtXUhRaUQrOVtndS5IJSx9ZkZMUzM6YDwsbCZvY3FVO0smLFpMUGJvOkYxW21QX2BAOER+TXd5WGVjfSRROjJFIThTOjoyTCZ0QD9bLENhYEs6Xzhwcnl3ZltLUGJzZ0R2VjV3bW1vXTcyNy9meUJbfkU6RndrU2ZEUEdDL1Btc3NO'@;
put 'bENnTmRmYyRdYDNpTGtzK2s/YztxT2ZCNShjejAuJD1+Ol1XU2A+MUouOiJoK0hqeH1yYkU3UUliJjI4clEoTCE3R0VdWnQpbSllWnYqVzVbRCsmbClzNj1vL3VsWjUiJFZoLCtabURQaSpBQGpYL1F3I2tlQ1smZiJZbzc1c1BCUlBsZCpHU2NJMj1+XlFgSDZqRjRVTndrfGpfM2ViT0M5bEYo'@;
put 'YD5mdE0xeCI1R2tjOiZZT3R7JH4pfig/K004bU5vczRmLDpfRUFkTEZ7anxSIzZuXkg0LiMjOiEpWGgwZEp5REwsPE1POiQ5WSo/TVNxfnBqYEhbY3o7eSZoVm9bIl5EMzRaZj1YbG8waSNMcV59UV5yTlg0OyQ9cVRZWV0sSFJqTl5EbTV+aElHbT9dbXokfi82a1JSQ3JKWk5HPXAqMFooX0B6'@;
put 'VVI9TTdraXE6WkdNczNZPzoweGk/YVpwdD1PTjk0JG1HVmkiP0p6Km0rXzVQNGR7JiZFfDVgXmFaL0UyUHxwbU9wS1Z0ekUrYEokdXhqVEI8VDY4eWB7JCpTKkl3RiV7amR0VVBdKyt2UzE5b3JDeX06WTN2dTBlKmJsUXt4NFVlSEJJUnE/YWE7b2gjUk9zLHRpR0NOPFkyJkN4OTQhaCxhTlBW'@;
put 'SWI1RzEvbyk2PlZQeiVOYz9MOEJFYl50Okc7KCZELHpOZmk5LlQzanhsTD5mWU88LGZsJWZTMH41WVF6PWBLUWc3TjlKYHpfTG4hcD9DSk1iSXZtLlVIeXh3e351Wjt0O0BnajA8InxNX3syei9CVlRhbFsxRGZpe21NfSxPLn5LL3IiUkRQPjFxRHZ8QmNRSm1hNz0waH5KRFBmblYzVXNnRi5R'@;
put 'TX1SKTxMLjpKUlt0JUFAfiZ5JCt7JHI9TUcuIS5FUElUT1ZTS15ffHkwVSU2a0hSSls6YThKY3I+T1VoYmckVEhxeHFAaC4vKjs6RyVFO1taeT9bOSw7V1dQaEtHcXp1PmdKcGtddHhaTlRyV1t+S1lOW3w/Yj1INWBZOl9xQVNDMUdNMEtUNVN4UiY6ZDliOTlnX3VlJV47RC5ILi5BYzp0VyFF'@;
put 'YVUqOFRvYyk7NWdRR1JoTjkjaTQuTFssX15tLjNfQ2taLipXMl9hdTRYcjdjTyZmNUp6XjE6Sl0qP2B8bWwrLC5YMXppJFI7MVckRjddNkpge3ttZDduenJQczRlSzVke2VDTHl8SCN9SmteQmtbT3NnM1JebmEyIipjajFKaENxPT48bVRfT2BUdntESV1PdnRodE1dbDx9Vz9QSyUsQj1bV3ho'@;
put 'KkBlW3dMRGhMVVdecE1qJnpePm9lMXkpNVpNO158bTlYQ2FAeDhuN1NoKkZuJmlmZnhmTmo+JjBGNy9waEcwa144ekg7XUAzS25zNz9CRFZbWVZfZDlldyJIRV0vc34kVE4pZShWOnE4bE14I3EmPFB+Ll9pMUY/aSo0JUhIbS5UfTJMI2pNRHpQYEtRP0lnZ1FLMFgzZXJ0R25UdktLcjJMaj5U'@;
put 'U2t+QnIwTiR9VEhqQlEhXlIvOS4pRGFQbCNJem9bVW8zPkEyNUZ4azUmK0YjSXsoaGc/ST5MVmM1KCo3PkglS1ElX35aeypVU0lCMGRzQFZFMltlLFhPM1VnUVBCVDhNQXhwOzteKilELyRvW1FsbUhwen56YTVHLCtWTyFdRW0zK1UjTkZuXzxNYVhFb31vQH5mfGNWJnd7O3pCKUkrWTNiRixI'@;
put 'Nk9qMGJeNUBnYlo2K0hBUShTJDBJIU85Tl0rRkVEYjw+cEdbX0h0N3p3QnJ+NmNyV3luL2NIakFFI0UzRlZqe11mUys5K21wdD1gezdkKUYxI1l5W01QN3JFVDleay5HJU93aXprYD9jdzBoV0pQQ3J1TTl6Yk58WmVQKDwpY10kMmZZbUtoPTZKSFhtYUUyRm1ORzU5emR6YnFJbiZGfXAub0I/'@;
put 'Ln5yVWkpWmQ/MTZ0Z2dOSW5yKmM/clk0NntVJVJnYyYlcCMsNlBAfkJHJFNnX3JCIVFOJndVb21wPTU0TTNtQUZRPXtKNUNGe3BVMi8qRXx8d2xmcWhdPUdIZFtxWVZ+dFBfWXdNLGI2MF1EOU9JKnV6Oyp8VSQ0bVMpRCslWGouZyxZfTRvO3Q1PHFOMy9jS3lUYndTMFY0SUVNN1IodSt4cjFy'@;
put 'XypWPXBQTz5WWXRNLz01KSxeOTJgM2ppOj55by4kSWNtb0E0IzcyKDlpPiE9Xih2PHFFLzdiVXtdVFhfeF1XOFYvYnxqJl44elUsfF4xaSE9PlhqSEYjJG98P2FtSTtoIyhnQGVJb1d7K3JqQFN4WCxAWTxBWzxDdCZuckt+ZyN1TCRle1c7QCVrJjwlfWpyaXcudSkqaEMqeHc/TH08RHFrTT1e'@;
put 'QkAxPVFFdCN0NFVaZnR6PntBbHw4NVcqSE8lIWNgLFtzaz1WQVRvWz5qKV8pLz9rYT8/MGMrVFMsW2JvbW0jLmtfPT00JH1mKnpLKnRmRHEvJVZTdjFeS31DNSoqTX1RWndELFhhNClQWlc4U0NoQF58fV9DVVZCUWtiJXZxanpKcDhxdFVfaFBbZmwvR1BjSUxuZHVaeHBzVlVOMWN0NjwwZnYw'@;
put 'VXFBUWFORWZ2dVEoMyR0aXdIaHBNSjtjPyJ3UkdiRHo/bkQ/e3BFVHd2QzsqYCROc3J8TGR5RzpsMFZ2W0kuc3AhalNEMWhKdzVwWHBneChsc3NicEk0bFRMdFpASXJ2SjEuVEpHUSZDZm13bEZxKHRJSlpRV20uSyIpOT05UFc/ZEZbKmpRaT93NUklJD9IZHN0KyNzfUspVUY7aX09Y00rQmNO'@;
put 'blQlNz9RdWxgNX5tIWAxUCReTEBONzchTiJhRWw+Z0ZEXz5QMmpMfSQ9cENiZjoyJGlSZ11GRyhFXWlhPl0wdGw0dk15T2ErYGhqY1RCa2FDPXxJfHRjYVhpWXlbUzBzIzI/OkUjW2hmJjwsQmY+cG5kJV4+a1gheTxAOyo4KWdiX2RRSk4vQX1sW3xXbSJUPnBoJkJfPHNhLFJLTnU/YDduVis7'@;
put 'Nys6NFg9MVgpTk0iZX5OQ003MmJ3X2wlLjdiQyJxVipsdyhjdF9HeVFsZkg1MEhVPH1XZjN3RitQWFciIms3QylCKV81NyYhLmorfkhTIUgwV1M5ZEJKJTcoMWh8fVt2Sj9reUwoeUhFJlJpPj4+PmVlbDglK0QoX2RUWFZNYmZERHFZOHZOKlM7UHAuc3RINXsyQDJwVlBbYj4sJShPfmpXSXZF'@;
put 'Qi80M2kjaSQiOGAwZ0dPXlhEeVhwKnJtakBtV3hqZj5nSWtzYEFrVEN9KnY2V1ViTGlGYnJ7KllTdk8mdDxgZj5rdl4hTiM3eDgmYXdBKmxeZHFDTFZXT3BlN2FDOTB1ZiouaHAzLFt5eHVxcXcvRCpRamEqUm55a2RwIVhjcVRGZlVpZ3p3TWh8U1R7PGYyOz5IWFRIIkEqQGpZR0M4ODp0ODZR'@;
put 'VyU3Wmc5WVlbRHlKN2IhWjFgPmdabUExYk1EYTQqJHtbTXdxbEA1Om96VDldMCgkYDFqV21NSypCOHwwQE9PUHZffX5xR3IuUS5MIyRWTUhPTGR2PHBCMVJ2NyFAWHoiMH1sNXRrSztxUnZ6bVNkVFE1JSVRaz4zK1d6MFJ4dF1qPzYqe1VIcz0sKlhQR21JU05SSSswdjl5LDs/dVBee2NbenRk'@;
put 'WUJ3Qj8wbGU9UU41fG53UWl5SS9NO1EjaFo9a2s2O3tQdFhCS2tQKHRLKUhJfDUjRTtvR04jMWNDfFRmdjtDd3Npd2xeJmw5Omc1ZyZXPSpzRDZHWztWTzs8YTEiRWF8ZFhiLGdyNjdGISpzO1A+d0tVbERzYVQ8UGxnX0xaZmVWXWElUE9tdmNbWHQrS35JdiJEPVBOa2w1dltaa1koSCgle1A+'@;
put 'azM+O0hkOCwmSWJRZF9hWk5QK2VnPU8kKEcrJCtDRCVLb1hmWilvUlErLHkqWkcsRjMvSjV6KEdrQX5gaEc+XlVONWhCLlYmXXZEQXRFamFuWGJ5Q0E9OEtUWWtgZH5gNVVrN0tobTFRdzVvX1VvOmkiOFZqS2hCKl58VmE5XWM+IUJPaUlmM3h8WVoiRmkkT3l2OHZUTyRqMXx3fDohVihWW3Il'@;
put 'X2E/NHgrOGJ+aT1xbStWJWReJCRbMCVQU3ZONmsjL000Uyg4TnZvKlY0fShhaWVONXhtRFBSRV8jKyFTUlF2VUNjO3oxQjV5S2owcS9yMGFhSV1LeWdJdDBbMXArVmpXK1hMXnYsMlRDTjgxfnA6Q09wOislKl9JdTphSjk0YSZ7amFRK3woRnojR2g4WEhvbSV4RHxTZnJzQy56a1E7dFQyVkB+'@;
put 'XjVdJVFxNDhRcF0iditmM3VMaFp9NktqRTNTeFgxZHlgRGlpL1lOaWwkcGE+dHJZJj5ZNDN0Kk0qalpvNTxacklrezIpUUd9bHB8cEJwdk1RNyR+KHtgI1lSYlNiRTpAflF2cGBWVkpXe1tSRXQ1SWtPYiwsO2JrPkclYkM2cGF+YDkobkFtU1lTYEZ2bTI+TzB6Z1ouPEpbcmJoTHhCbzpZNEEs'@;
put 'PF1JYzM7PjBWOU5YVDcqVlBrfl1jKT8hdFlZZ2JvLDdSXWxvbThEcllwRjBuUk8vOVNJX1JkcytVM3ZdYzR2KSh6bik1a2ldXz5xNVJaJn53PzY+VUp9aGsqRjA4e3lkJU5IZDd0MF9ta1pQXyg8W28me3dWcmZ5KmcpN0BWfDxbcHUvKS5gJixxYUk8VHgwXSkrVGNVPi4wTXgrW31VWFFscXkv'@;
put 'RGQseT1CYV16Rjlqe0tiMllCXUl2XTN6TFg7TnpURmNrfF9lUXM5ZEpEMy9qV1FfJXVPOiZaV21JeHAvMFJfV2FRbyFCW2RUai5FVmY2fV4/ITBbTzwqQjdROjd2aTh7Smd2fDAhdkFhRyFzTT98bnBOSHI1KyhiS0x0fGNbU2JLP3BBWCUkVDxyOEFILnM3P04hQChsJElWRVZhKyNaVEV9JiQm'@;
put 'UCtibVQ9Izw8IzRLYiROL1Y+Mj1lJF5mJFBkemcuZGZPbig3a0cmYiU+fG1nT3hfNFFbdVEybF5KTiIpblNiZHg/ZyZ+OWFGS296Sk9mXVcsPyVKKSE6cS84ZD9rSnZ7S1kzbHVjISJrM3tKQ3xXKXJ3eUtwLFp2aHptPUA9RH1GRnJAbWVEbkJWQyI4aHhEMF58U30+fXVHRWljcW9hOj5vSVIq'@;
put 'RipvPEdORHBTZnxIdjF3Q2MuPF01QitDakRbMT08LGwyX0F+TUBKa2EvZHN5RztoUDEzZFs/JVMjY2BieG1SM3Z3bmVtTXNbYzV7V0dSIW5mUSRsOz5HZVk7cyF7K09mNTpwLEEjOCZMI3UxLylzJnI8NFVTd3VUekVUfF8oYENSWiR+U1VYci89UkRRYWFGNEFVO0dofC4wL0JbXXU4K2YmZi44'@;
put 'Sko2fVNeZGpTKkhTNj44aUZXaVZpWUpFQWVZIlJ+Qyo5bSpAOmJlSXpKY0RLRV5rV2tBYXJZYnlFc3BRQ3lIN3AyP3R4ajYvPyYiWkZdeGFxb0FpLFo1YWMyVEhZcU4xW0hjbCpwLCZ7RGkkSCNIMDFjJFJdOyhlZixyLGpzYj81amxqTSZAXz1fKFhMKFh1aHBLdUREWnFHaHFJbW5qPj57Ozwx'@;
put 'TnxgNHFyP1A+SEV0MyYkIXhVY2NbOi9HOSgkIVUpb3xZVE0pfGUlTEF7WWxXODYqblR6MmV2TChPTVAqPlN8S09tR1duaGcrMWF7R3FlT1ImZFpTKShga3t6IV0jYSMpQltnMTM6YHZMQzw9LzFlW1BoZnVxamJ1JC4hKGZAaE5DKFFGTVZ8SWo/Nl4jQyVOfUU6MC93M2BvfC8+XmFmdGN+dUF8'@;
put 'YiZjR1MkL1pne3E7bHVYKUJZaHsqVCphW2xxPm9lIUIwI2V5MUJjbjkwUjxlJnJHZjZmRDUkU2pheGdtJl19TUlXaHFoPURjLH1YezwqPi84SzA6aTguZVB0dDt4X0M0QiMieSFUY3F5aX1rQDIqcXA2L2hVZmk9SWM7Ny9hbUJZSlhLNiYsPWVYXnI0RS9rXWR5TkEjPGV6UnRQWCVVcmlDJSs5'@;
put 'bUAiX3d4WkFSTXdJVjZHTVcmeUEiXShKRlFTQip5bn0wUixKWH5tZjAlXXh7MHkicz9NYnI6Xk5RSDZ7YXZPZD0+cEw8bHV1RCsqNEtFN3NxaXU3QyIxVyt1SCZAQnR1SDpATCV1ZztKPCUwbX52dDMiamB5dD02JXptbys6OWdYLytJLktIVHxuYWpafnk7UUxrPyErdSpOMmB4MHFCNzlCV1RA'@;
put 'Ylh5RCw3eStnJChqcThVTzR3KTxyWEkuL1ovbXRvJEx6PS9RNTJ0RmR7U1hrS0BLdXFufV1GSiU3b1ooOkVRO1B7I0RYQyNvYSwpIjZ3XXAuXXtVMUVNLERqLGwiW2l6NE9+WyF1XnJ3MnFtWGppdiErOWcpZnZWRHRNWkMvfGx1fkhnI3Z1PGQqMGF6RXJRVmVzWEM2R2RDZTM0W14uRWYyPzh9'@;
put 'diouWnZdJXU6eG1LS3w2JSRaY1NvNTI+LntndSRsQFNnSmYsS3htYC9TJU4kQ3AodiM1JlM9Y3QxJFhLJTVVZSopdiFNQ2Zbdz9kRF8pXSJGSm9gPUdBeGUrYyQySDk9ejxWRjJBQGpYcD5Sa1NBYzJbTC5ESlVgUDJudmowMi9BdTZWNzUlM1Zlb2B5UGZ6W2p7a35XPiJMRDs1NE91b0VBKXRQ'@;
put 'fnRLaDZDXShdcTBpZFBrRGY4NTRLU15AQ31NKyl2Nmk3XlNOJGBwZFMrcWNUSCEqKT1bdGI3ZXk4MkBIKV0iVl5ER25FJUB1YHJSOGJwYT1xYCRlUzw0OVlQej1hJG54KGtqfk02N154ZCQ+W3Qua19jKnxbdHkrckZ3dmRHRjBKUnhkWEJwJV0hbytBTUtFVDIwYEZ3SU0sJWpYKjY0aml0RFpi'@;
put 'ZXIpc1F6JGwrM3VnU35PJU1iMEh7N1VyTFpUP0Zja1lIfjdiYyRMYlcqIkpRfUZGOFcvLHd9YnZRNUgyUXhrRGZoYzhnKnZPZUQ2fWY4N1dROTF3TzYhZHI+IzpkTH03NH43czRXaS5YVjUkWXh0YWFhS0tHXnBUL25kS3xoaDZeZThNTFJobzluOzxfUVhLKFplbih+V0QmQWgwSktZbHFUXywm'@;
put 'c1tLWWE3Mi88flR6T0FCcyljSS5PS1MvWy53Pi95eFFlfXAuZSVUL0ZKWCxvQmsyTVF2akZsLixxVmV0MSM3cCQ0a2R1a3hvcWFQSzBTeHBrcHdQOk1pezd1JGVKbzc7SF9TQjMhPlVRRjcmaCF2ekVVUC9Lc0heO3diZW5MSU1rN3VMIkFjOT9QOU9mRzI8IkZJMmRNazFAWHg+W0whb2NER3c6'@;
put 'czdCe0JYfip+Ty9bWSZXeGloRXZETlBJIWFNWGIqZlh7YW0wdyl5NzkseHB0akRKfkRdITNGWUZZSzdPKiZWS2lpbzAhY209RDxgbWs6OVssWl81JixzOWgqNWVUSlMibj51T15BcTA1UTA1c0FLVj8sJmZGLlZmUkpXQi5bTGVuUyVBcS4pcmt0OHAjIyhnSFIvUVpVeEZSVT5ZQW5KMjIufFMi'@;
put 'JDk3cG8mVGx7VnooXz1lVTZNNUByXm19UXNCMG07W3JnOXByODw5Xj5vcixnV3tQcEJmKF5mMF05aDhXXWZaKjkyK0c0P0lydWkyWzNRO2lKYio3QnxDejllcFVTK0lTbk5xQElyOigwK3VdTUM5SjUsbW4/UF4xUl85KFN9TGxxSHB7QUdXZFgrfHQhajpzZzc6MyFuNmtZMF41aT5XI25mV2gv'@;
put 'PmEyOXh8UHojUFErfFVxc0dRJm59MytjK0xKRFcjMltZW0Z1PEFoY2ovKTcvInI6d11xVz5+ZjBddUM5SzdvPz1pW0ooUUo3bUp3QjhTWSxxfVNaeH1IK3VBSzorSiRaPiFvUjJyVVZqJG5RZ1tUSytPb3lpXWk+Oi49WCtialdTe0l9RlcmV1E0ZFQ9c1VNJFBlaHxXJkVRZ1M6N2JLIUVOKjZh'@;
put 'eGVtdnZqU0pjeDU2VjdMaGs6JFg5N0E1OXp6MFRRRktPM0VwKEtNKk1nejZJQ257cykpY1VOKXgkKj9pQHVTb3J8JmFKOHZ2ZGM8LEFfQ19hTWxVOmd6UTx8ImE5ZzIlKHJoI1VPWGozI1BOZV18bn4kdkg3PF1fcTJgOTA4P29HWjdtYVM9emw0Zz8oclVnZCs7YiQrbEpxUzx3RSlpeDAveCEu'@;
put 'LEMpanFgX3tLYVQ2PGt2eFZRVlN2U29Ke2xCaC92ZVJCcEV1KUZhLCtUL2BJLmlhYlI3ZXZxTWs2SGs9eShyQCZZW31SL0wzUlguOUxxcShydUBoQj9WPT9BV3whfWpqd20rIzdbbWBSb118LDQxMkoxeG5AXStLMW1bPkdwSS9kRHdWeHhTYi5BTV4/e247ZGZbfF9XbWttVlJvXT5TfTouRTkq'@;
put 'N3dIV0lxJHRfLH4zQkA1bGxvIXtgS080TENjZVl1TDw7OGMhUmUsezhVXU8kKGM3WV1yRkwrVCtyPkFSdH5+WkFPP19pSSlAaWZvcGF4MUc2V2pKX1dvQHxAVWptaWtXK1dhIm1yL0lNSiJVNnxCVEZ0dzZVIzc4YWo1JHY0Pl5tMnFednQ6NCN6MnIwXl5KKHtneV9GIz1IMEJfIjllc2UzIVdp'@;
put 'YmBSREV8X11ZMFAhXjQ+Ql9yfnBFPWpeSHRfezBEZD9tMWJ8L01iWE53OHZIXWpZKDBQIVEoQHE7IzBnLkRmKU94QD9dYk5UVSJOSDY4b2EuXklfY3JpNXZYPEdeSDgwJmRIV1NhekM5eCliUC4yTEN0IUVnailTRzZmTXlUMCJzdlFobUFNPl43K2k6SjdCdz8pc1cyVmRNX0NvJXhDTT8wYHB2'@;
put 'bkhoaEouNFtbZ0Q/TnIwSkxEPHB2WnBHV0h8WXF1ekE2WFt2THUxImZ4KiY9O35mOk4mOClyfC5HYDIqalcuYGl4JVEqXmBddUxZdU08aXlYTVghQj57KkEze2JbYD4lRms7Zlt0MlMjK04/Tix1PWE1aGJHJmwpd0xmb0ImVCVEJTtsbTBhTVtyfjxOLEU7TGpHNkZHcXwkSU09ZHJOUjROQToo'@;
put 'XntKITFGX341JmBKL2JvPyJScigvXTNDfD17K1Y0TnY6WXBAImUyP1RuVEU6XXx8VWchN3R3SzNqSnZ5akUsJWp2ZSpTLEcwSS8sbVJeaEFmK2RbQCt2W1V2VVoyPCUoSWc1K141RnZmc2Nua3Z9bnRHe2JVKm96ZXR+c1RMdC5DM3lePGw7W1oqcz1xPXE9cSxjXj1kVDR4MV9KS1BreDssa0gq'@;
put 'ZyhqN2NbPVJGM0c1LHNgMWloaXdSel8sTVNbXyYzfnd0T05yOGl7TmJlVmBwKWE3MTNySFgqYlZ1IWh+e3gvXyNFNVBSUTMzIkdVYzsvaTlBJj5nfV1CfTtyP10vIn58PkhaZGE1OFNWPlF4alJJQ05Afj9KLDtoXkczY35WL2NARi8pIXtTPDhzUi9oeSxQTDd8R3F0V0YlZTBkPDNiXjdVTWMq'@;
put 'c0U6QD9vS34lNHAhMztsNTtROF85KTVedFBCW3hlNHl5OTxOb2JHYi58IThqaiRwM1RyU2VmNEZGcl8jenlIRlUyQyNbWFM9YCVLd1hJO0BMVigkX1hhW3k8Z3RVcWhoTylvPyhJU0pSe1RtUSg0dH5POiZAfmJINWA6fU8zRCFFT21ARmk4KyxRSDY1fiFHNlkwTW84eixsRl0wamN6OS40Q1s6'@;
put 'e3d7L1clRlJAYGVPJWVWI25TaUk7XypINjQ2OlRUez1yRjleJjxwOTZkOzliRENnSjYiU0BdeSlfPU9YIyM2TDQ8R2okZm5lNDBBIyVqVDVRTyFpRipmNVFQQCFZITx7JnVXdEdvbyg/QGFJaHhxZm5HeW9gSUZENExARSImTn5OMVVSPyxJZj0jPXJCJmMyX2h7bSVDKyxEbihDX1U1OU16b3FL'@;
put 'RU12RyFiW11WOXVSTng6Mk00TGYjWyMoKEAmMDZUWmtBVlheQ2ZNaHh1R0NqIjg1NDQxNnYjKlQjblVbYmxqISV6alNgTGFQXyJadk9WcyVRYmNoOSY7P10/QlYsUjJ+eEZ6ZWM2WVBPb2Z7MGdmRFZ8bk5WZkVmW3olRk9iZWc+MUVKP2Y+fUMxRzsuVGhZLEh9UHR8T2ZhOWkifWlXeC9MVi54'@;
put 'QF9MUX4/Lk5UODcucXo1M1EzTi5pRG4+NnJFUmEpSERsPixFQnZePTMrSl4lPVZNfXM7SjJqc3huIW4sOUhxKiRJJDFEbUVYTUVFdXVMWnh6NCR2aEBOR3lybVJ9Ij83VWcyOFUjKU9JT1goR0h2TUk7bnUwXzFIRzppakhDXmh4UUtYUE9QaVkwPl8vRjlmRXxlPEJOZlhJbDNbWH09YnNGM3N0'@;
put 'ci9ZQjomaDAmMTE2YyVZVTR9VltdYzYjTVJ5Oz0uaWlrMXhVSXNFX3AuRCxwYHA8MyRDMHJDZ25WYn0majRmLzNPNndbYHJbI3IsTDhUO0wmUng0S3FbcllfOXE8InIzN0FHLDkxK0tBaFM/YEQ0Q3BOaSs9eGEibGwxOFRSLEBka199ViF9OGBqL35VUjYsdDNoMmpnPzFkLHA9TzBAd0ZbZHl3'@;
put 'V3F6OFdibDpyTEF1LDlpKH07cS91OF9CdUs5SHRfK09XZ1YpRnExfmplSkd+V1QjX35TOEJ3bDE0OXtoKG4+ditKOHhCcVJjUz5SbGw0IU4rQDRaRmRaVH1dJDNYPWk4XkBLfHguZylNJElgfXh7M0dkfWszWTM6YHNaPU8vIjM2Sn5WdEdYbnZNWFZ0YyEzSURPRF5LaXVGISV1Y2U3NHRkQHhn'@;
put 'UStgK0kuNzw/bDRGZVs7bFdKKjM0RVJiZ3xSTm52UnY8Yz1PKX13S2RAIThfLCZzW1pCfEAsXnxqRU1+VixIZF5rRWs5Mj9oRng6ZCsue25LdkNrUWZYImZrW2dQeUlpX0lkSixUZiF4WjM4V2BtemBFX0kzcyxpUmlvaTtFKDorSXMoYFk8OSsoNjJ+SS5mW348b0E2fkRtRW1aOD1yK1ZTZXc0'@;
put 'dVN6STZwSytYVigudTU3b2hbPT9ScnssQWtNens5LyEmVT9eRVtLbGU1KSU3eyV5OmlQbnpiZkx0aHZ9JlZzW2hoPGE1W00qaSV4Q1JLXTJAL2o8QWNRXT88fWxoK0JYTDNaSmg5dDJGLDleJVVKbklvdTZpTkJxbD5jPTlvOkowQmNrYXU0TGF1U19pJWJrR1p5dS5sV3xrPik+JnIvRlMpMTJw'@;
put 'L144ck1JMGxSYSlifE5uIzdHcmY5YVJ8WSJTNThAOmlmMzZ4SFdrc0khIW5ZO0M1NEM3cFZ2Qz5dUm1LO35vTX1pe0UuOnNnOENlXk0iSkszOW9CMyo3IUgrbWhgRm8oLHdkUHA2IkFQRl9hXTIzOEBoZ2pERDNHQSoueiRHeVR5b2lZNU1fYl5aPSkmS3xlX2csRT1eZDFUIXVDeDVxTWdpK089'@;
put 'eWAmMk8oIm1eV1NWQjJTZkJIWGM1Ij5FM0EuVTIhbTN0RDxDLjJ2RnY6alV5dkIsYXxLKyplR1Q5Ll5TWTkmfXBHXnBgKToyV347Mn4ySns1PmBTWH1Xfjg2Lkcvb3Q6dWxyS0hnR31McnpgeHQ2XW0hNnBoa3lsV1RXPT5sWVdZTXNNIWokMjReflA0ekIuUnhYLyJ+JUIsdG1CdEs5IXZ0QSFI'@;
put 'dk8/RkNbVSRIVCowdHxGUyldUG4jdlhwcStRJkttK3k6R2RCPTZYWXFRU2JWY1srJl1xNGR0Ml9ZUGNPcThbRD01fFkzckVLP2lUdnNlXyhqZTRQR2BgUVt9YiM0Sl95PFpwfWFZeF5LUWxvP31yUC9oc31pK0AobDk1Z2txPChvfmlMdFNPbyk5JjUiPFcoajg8WUgkZ2JrejQzVzlbUz1hYyJL'@;
put 'OVt9cTkuRn1dYFZ6cnxHSX1falgqQCEqTH04SVdmYF55LyhXSj9aa2t4bUk9aSNIL3FQQ0k9UiYzTztEPW80XV0mJDRWMVRfdSVyOSRXXjBSe0Y7RTBOT0dfSDZQXXRmRElOSUowYFl4dGRwWE5IPTZeJjw1PVZ9XXpHMEJfZEhhPmMlLnVSWG50ZVVwXiU9WCs0Zj58cFFIbiV9cV5YTGpkQjYz'@;
put 'IjopUVUzLDEmPEthXXxwMWxbRnBORltBYzA8KU9uOmRlX2tEWE53PnFqcWJzVCJOT2JGO0hqVWdEbFdPQFczIT1Kc0coODdwVnBec0UhdiVzUi8xJC8zVn0kKWkxcHduUlZZdHNZNGNXL1tKOFhXLERFJlREXUk3czkoIkl9OSRtcGFUL110SD1kfUZ9SU5OL3tmbWI7Y14lI105aWJjT14jVj8/'@;
put 'RGM1ZnZAUC8hbFJgRFF8fjxzJX5JTk4vZjg6eGspVF5Se29RVDM2PCNvOEdTaW9xVFNTV1c+Tm0xO2VrfUY5ZGxrIURyTzFqX1khdmN0blZpP1N0VGs4dlR9UFk/JFQrY2xNWG5xPmJDTmpjVlhzTiFfUmdaVi9wOE1wb0FxV2ssZzlMSmYvISE2fXZYREN7aCQkODJTdmdON3xxYzJaOlpbVF8q'@;
put 'YjBGUFFveV8qdShOODdZU3ExeHNVfCx8XkNgMEZiW0V1KkVxcjdgSy9CNDNedG8uNj0pUX5CJHAuOk5fcFdzPCIwIXssUiFJYGZzOCxQOG8sSTtSIS52OFpBc1NNZlRkcDF+aXxFfnNlI31RXUlSIWd1WlM4L0UiOSxKQ0NUZSgpSWZUIWwiM3l8Q3ldajM1PTR6U0hLQztIeEtwSyNfUkJEIkZ0'@;
put 'SzwvMnJ+LHFPZW98QiU9aUkwUV1jUnQ+JFdDQiNbT30pUTJ1fSoycH40Mj5kJUA/bXN7M3E2QitZWnZNLjZdYExobDc+TDwiZ1laXSp0O2A0aWxzMnBNeEJFeGljL2xLJEpXYG9wQmBKK19ZdX56SnQuMT5jOjM5dXYsb1NZdTtMVGdKPCgxRW1eZSIxLk5BQjRKWGFVRUlPYTVDN3xRUDNtLE9k'@;
put 'Z0tycT9ISUNdfCxacFIzWT08VCRqcmZVbSEsLE0wLHhYRmNHL0J8blYxe0ZtaV8kRF1DZm1WLEdDIz1sQmUiZVRAdFpbdDJ0T2tzNCZGUjo0NGc5PW52Z0tueDpfcDlnd25sciplIixrTltacEMrakRIXnVURDx0TEVtfllObTpUOzl2NjhYLHxUW1A+Uko3cltGRlpTQnwsLlUvRkQ5JUNxdj59'@;
put 'TVRrVWd0LExEP19RLnM/TigxJS5tWDkwNkJKRDU0KlMxVWB7QXNqPUI0cDl7Qjx9d0FCNHZCUFtfP1pGIkloKVhvKDM9UWF8IXk+LmFbcTA+N1UjN0x+b3IvbmZoQEB2ZjRUU248QFghdmkyXiZRdlBHSmp4NDR2UD1UPnU0RVJCLHJ6PlYsKzwuOl8sJiVdKmNCTiQzeVAmX1VEKVtkTiQzKE1f'@;
put 'ND1Pd1Q1TzB9cVZlO1pIMi9GTWNyL3JSI0YzeCw+aVk2UEw8MWZGVm9hNmprblZJVSh8JXNENGomfVFWZTlBbHd9USgwVSMpQz1sLDh5ZCtjcFNCY05JOFJBUH5EdDF3cm5SaXtCY0JzXUtBNHxyeVV5P2dAJUI5Z20sPS5ab0IxWjFBKmZ+My8oS0NvQkJSRyN2PkJIN1kvQH5WKDV0Qi5kOjQp'@;
put 'fjFVOk8uPGwpcTFtI1pIOk1sbihdJT8mcEtQKHU/VGFuYktabyxdakA2TTdLX0g3cHh7d35qeVJ1JDVrcz5fLylXSFMyZHx4Vz9iVUljaW97VVlbYXteSlh2QlMzMExKQWx3TVRSRjdmTUN5UGErKX10fiRESSpaflY4XktAS0BKfCVaZD1wOksyNHxiLzE0NnxjJGRTRSsxdjdVZ3BVQj9LSyYi'@;
put 'cDg5b0dBY2RXMz84YmNwa2NQKmA6USljdTVedmpRRkMlWkxPcS5Zfl1IRztzfmcwO2VCWmBsNGx5ckcqWk57TCp7Wj57dGVkMXIwPEtWNFg0YDYrcXUiV2tiJXV0IjwmYy9yWzpCJjxOLCEwZFM0WyxacEhiSVVZbEZBWzU+N19gckF4NVUjXytwL0MjMSFxP3AvYSVMSTc3JF9CPnxhbl02Pkt8'@;
put 'LmliZERgeD5zQSFwMlExNmQ8O1VvVGkrYWt2On1ENHtQdDp3IS9xZGw1akBPZ2ZiJWdCWDs4QVJ8LkR1WHVWRSIyKEA4ZUczOFZQfENWKmhUdXdERzFpWDZ5MCFfLjg3aVYuNl0oRnM9LEBLaXV6XyNTI1N+Y1IsT2swOkpRNCpjIVdiJFU5RiU9ZipuQDghRSZLe2VSfTNjW35uLnQwPmxAUSZJ'@;
put 'JEpBKlB7P2VuVnNEVVNMJEs+QjRYZCU2dCUzeERtZmg0QWRhe3s6XW1za2hVLCxCSEgqczUoWzVUTyRPVChrJGEvKVJ7cXU2ayVBOCloSyVrYm5+OUwySVJMPCtxIysrLkI4QnJdX05RanM8WFhOZHM9KSZlIlZSc2pwQltmLiZ6VGhrKzgkcjpeUS9tOHhgZH5RVmVtWkc8L0tCWmRpVU80d3FR'@;
put 'IlIrWC9uPlcrTWl7RVV1MG8+KzF5RD8vNX5RKj5+RkVNJlF9TWkrVixMPVtuJiRNZCpbLlpaTUJDfnkjTERbbkVjeiptfEY/Iy5aJnwiMzN9ZmBgXW5qT11FbW1pYS5nLzBfYyVuXUt6YDxzNmhoXTkwezU/QSRELzAmUStQQ3x5I24sMUM0TCJHJkM4dUpeczwwVzlmRFBpU1VoS3ltV1JTKGA2'@;
put 'I1QpfS8hP1J5TixEVl5uKyQvVEZfWXMjJXo0PmcxO0lbWml+WWF2Y3RML0MqLkM4W28oRE04RDxGYWNabilGW2Mkd2R3T2N+WnY0PzJzd087ZllwSUEpLDQ4JFlxSHMjSktNejF9SSRrIWs+Y2hadjE8aWt3fmhqTlBCamY+Y19NW3ZUTkQpX1tTRnY4RDNra0xFZFRaYEREMjMqYyRAJSFqVnVO'@;
put 'P1FnKTMjalZ+TSUsW1tecmxXKD18K2VkWlBEe0dZVEw6Zi5QOSZldXU8aHw/TWdbTkd5c1laNVJsV3A+ZnZKRE5IVXo5Rk9+UlFdIWlPbGB1UHFsPFtqPUNCWz5HT0xuPiZiKFd1PnU+eWBAOG0paUNDR0I2X2xmNEFba3p4bVJdWV1pcVJrdVE1a3dLL1A1dHtmcEBvaXkxXXdtPk9GPGgoU3c4'@;
put 'N3dTd3tbQG4xOmN4Y0o7ISVnYzVoKF9YKHV2JSk4YXR+K15gJiFDKm9pUHs/QHgyS1lfcVpPdV54YWVAJGw+ZU0mQncoKyN0KXgrQU0ibk5ZPV59Z2ZYLC5rOzg3IlUjNHpPJEUhWjcmU2NhPD1XRnxRWCE9aXg+X3ddP0o/eXRxOHU9KiRWZnhITFAxcUFDYHFkUXdoeTJGfltoeTkuX0NmfENj'@;
put 'JkM0PTxNQT90ezdXTWRsSjl7K0lyfTtSRil2OGp2V044cHdPd3UraE5IP0NjMV1uUDVeTmFIfDRwe106Q2NHNHI5ImM8ZHd5IkxKOEY0aGhKZ1VzQShYakolSl0wL0h3OEVMYEk9Z3RwaT5qT1J0UXY6Sn1gPUh5aXBOcC9Kc3BHeUsiWCFlNDouXTA2KikwN3N0Q0ZtYTsrQjp0K0daQjtXN2t7'@;
put 'ZStUIXp1SlVzaTE1QzV3bk9wb2luPV4zVVYhWFtseSFmN34mWiZPaSg7dmIvIj91R2pKPCZKY1FvaFZIYlprMVdMfGVtYEdOaWwxfXZoUVpgcHBTKGtPOnR0MVorcWRSI2MxTnhqQHVtJHsxcyMiQ2EjdGY0b2x2L1VwKltnSmFxcEZVKXt8Q1c+TmAybzomI18+KVkifEpbeGNrYWFhQWMyMX1U'@;
put 'SF17SHEwQn4sLzpuVkkwNStuR1JBWUJzIyVXP0k2flk2I0JYXTwyOEFjV1BBVXxRTl1HM3hTOXt8WTYjcyt6cyh8dFJHR19Heyk3bV1QayFiNF4scSNvbEszSXMpemA8K3x6YGc7NC5CfTZXfH1XfE8yfkt+RkI1PFh5VzVGXnZZXWZ9N31RLGMrUz55MHdEKVBXYDV9fSpwZkFuMn17UkFKKHBR'@;
put 'KCJtYFdVVkFoW2l8MW8vXlM6PnssSzkkJUVqIW9NVWEhVClSPm97Tj4+Z2heZWtYfS4waTBPI3hlMF1zPEM0JC5zO158RyZVOzxHal43OHEzYHUze3QuW09ITlFkIypdQ24+KG9mOXUzQHt7dXp2PCVZQndmbHk9XTZdYT1ZMFBHPCZge2pibzNPektjXTBwei5kMCRweFBHIVlMfDZVR1lHb0N6'@;
put 'SnF8LmFwUUskPCtKWW8xaEZZI34jfSpnbjhBWiV+VUdGY3N4b2p9c01rRyYuZXYuKnVLIjllNCtUNT9eOEh+JWBKOiRmeFI9N09GW31ZMGZGNCNIPlVQPVFPKClJM2R7UyFeQlQhfUNmQ019U2EsOXQ5cHskQFkpeHopcFMpe3lIaVR4QyE+VCxAVyQ+W1E9Q1kuQEd3eiw9PFl1VDFBPTF2XXVQ'@;
put 'OlFqYmxuOmxLfktxXkk0ZD53JDNtS28sOClqWUR+cCNfUih2Umx7NklUXl5VRCJrS31RZlRzbDI3Un5BXih1W1pqXnEjKiZ6N1IhfUtfLmUzT0ZNOVR3bDkjQXdEcntpT3x0IiYsclpIXSJ4REdiQjwkb0o6fkhyfTJdSzJ4NmhWYjRub3VVfiohLFt1QzQ7OUxCX2kjZD1TZmZIXyY+VzxSaWlz'@;
put 'TFtLRWdwJFB0ZTVSeiNIMkY3bitFfU9dcXNPZkY6SjQ8eyYxdzomI3YzW3FrJXghLCwjMHtfY3tWb00sQU85czFEeChsZXJdKzN9LF55d29WY29zO3FWYyFaOkZ2bGIuMFcuaUVeKEtEZ09oP3dkLkZmT2cyJTI0djo1RytaOUYie3wsc2I+VUVtYUQ/cXNnZ3h3X3ouZSswMHRnS2ZbcntXODo2'@;
put 'fFFbdG1RXUtySkt9WD88a1kjczM9e1pJXThkem5nUH5LWHhuQCs6IWwkZWx3K3hFMnFARlt3PCpYdHVUTjQlM3guKmNkSjpXU3k8YjNzSXFjVEhyK3JTcU9YRF92c0lydVJwe1Z8ZTY9PjQ3dSU1JDdgQy9LNmBUTj5Qdl8oJkhzLj9AbHF2PTUkKzRCJCtsJEx+KHxFOGIkOzpOYyore0ImS3pK'@;
put 'VU80MllQV2VRMXw8L2AoKGZbazpDK0swbHlfVk0xQklrZ0hZQWxJWzplcmV9cCt5e2x+QChObktGe0ZVTDBuWyNFYmVHJUZVLEA+LGs3N1BOTkgqPWljeXRrNTY1fl8jOSghaG9IIigwTVVidVpdVmlyTyxsWWJlM1ZFcyZdZkJZOkZNfmdFeFVzXTF4dkJCS3BFcEYrRnJqeEIuLlpzXX5zInEp'@;
put 'RzpFPDNzNSQhdTAvZT82TTtGV1M1U3M+MF8jVTdUOFMsYXszVyxjZTwoWEwzM3YwVnMvVzhFVWYvSTJZZmo3WSMoeixYYmFfY05yOHtYITRoREdXYV1AWVA4JWF9bWUhZmorbExnTWJIN3JHaUxDO1AwRXtofDIxQkB1YndiWUFYTl5PImE/N1J9fXFpTzZKQkxEMVdNVnBaNkZWcTFCOnRbY0ZS'@;
put 'KkQ5UEZCckl+VF1BM0lGUDhrfEx8KktZeXRWcWwvfVcodG80THgzKFcqT3YqRHxCNkNkP249cUNoViRrc0xvUilhcSl7UjxFPCl2elFROUJoWHNMW0p1Rzd2KHMjPFNxYzhgcS5YQWhuK2ZmcXRXRiFXMHVONVBybzQ3Qz92IlRsYSQ6eCgrTWVLbW0iZSo8KmNrM0NQeWciTTA/PE1bO0sqdi5l'@;
put 'O2clZ0JwayVdLE90US4kZlpPQFF+TF9GY0UjWjZxMipbYDx+LH5GUXF+MjAwWT1tPnFJOV5ZYjZATFVKbTRPVC5xLHUuLHouMz5TOzg3X1U7dUo4cGhbRU0pI14/I3F0UyZgL0c0cSFmSDFqKVZEViNmRlQscXZOYy59XTE2UnhRUTp2MSovNW0wPmUzTEpVaFcqU2UrUE45JnZNSGBgUD05Q14/'@;
put 'WzZ4Tj17cE5eYFpsSFFEaEViMFhuW096WWojPjsjWD8jQDEyIksjdT19VWdge09LYFMqTSh7VyZ2XWckcE42QDBIRV9OY09uSkVeSWh1bXBwP1VLYGpCUyhbQEwiRUFuZUhJezptV35YfCl1PVpMaWh6UUs3cFssQHRkL0UvUyVSO34lOyE5JUhwflRNOSMzL09xZXc8eHZgPyUzNkoseGxpOTZO'@;
put 'NS9tZjhgViVKP0BrOlppVy5kTVRVc2dmNG9ANXwrPEBQQ3llU3ZmZFkvakt5IlRtXVt0eSsveHFCLjJ3T0o7TzcreStQUDV4U0E1QCpsJGEqIUt5UjpRWiZAdXlRb04xQDpAMmdRWjs4eURPTXo9XkZ1Vno0ZUFiUEs9O3oqLCR8L3s6TCtxb2ssODtkfShHcztmXlsrUnwvdzwpMmtEMzosPFVV'@;
put 'Sz1VZ3FqXjtRXVpUUmg6QHNtTWwvLEl9Sk94QS9WM1VROHl3PmF1V0pjbV0pazU4RUdFSDlJeUQ5UHtjPCp3QGN8Xl94PnlgNjIxaH55cFRRY3ouZGV2c3gwSlFmQTRnKUNneShLXTJfaGg4LzZmcGFbMF04Onk1UTZjbkh0UDohJUhbTmJaY1FLLDVgJkJMbDluWkI3c2B1WzQxNW1JZUpOOHgp'@;
put 'ZDFHQ0E3SlthMG04TGQmIkVNMVBrPTBzRiMreGBKQWR5Kkw9PztTMzEvNnJ5Mj1kL3JiPlRQVHg+Onx3WXoxeWY8QU03RnFHO3N3XWwzZSNPe3tMQC9qLylhYGxqZCwiIXV3QkR8UTpgVU4rXzJvQiokOitQaSpraHhEYE5nLy5Oc3Nve0YrJW1HNG1uRWN0RX4/KnVtO2FoRy5LNylQT2BWY3hI'@;
put 'TVl4aHQ0JkgmPS84V29CNzJTQWRTemlYMHohY3k2VVVTSGdeMiRMUXo6QyNaa0NzT19acF9tT1BEQH0xKGs7ZngzfmI7bjlwNSx7V0VqVVc+dDx1ZSNwezthTS8xMl1mKlthZiFXMCQ5IldGSjhOVi9PbGZBSCxjfTd1dU5bbiZ9OWMrKH5iI11qYzJHVGt6dEMoXmB6LEd2OjBLLjR2OmpvZz9s'@;
put 'Xll1UD5pJTIrYVBpekVTdjE6Zn1vY1MwXilkb2p6YDheXmVYajdpSS5YVGJzb3YxdFB2ajZdYF9EfG4kbSx8ZjtmQixhND9Hb2h7UX4sPSVtZD9pVD9PcSYpUDovSWpBbiNkcn5KSj01VHFEQCV7MXM1Vn1FMThkcH4pTF9xMXtTMS54Ljt0eE02YE1pRnFqVzg8aExWUi5CPmlJd2g7V1cqYmo0'@;
put 'MXI3fUNCWjN2Pis/WEkiU2IzJUcoeFhfKTtYbzJmdEExcm1CQndyQ303N2Y9ayhaI1A7Ukg1Xl8xZE4wO1RNNls3LndeXykkakhjZjZ1dysiNEZsfFJaZFlNJUgqKnh2YEpGTkFZRk5CKjF3WmRuUHR4OitwTF5KaCldSiQ8O1QvQnZTLzo+RD8rQDZifVdYKD00REgzTXloSD5dYlg2W0NFVFF1'@;
put 'SSZJWjxaMVppVHw7cDs5YGh7RkhDKkw+RUddZjU8K0I3WT80V15JdU5UNmVlMndVanB4Skc6JTx3VmlrUStSfHFAdiRZZk8rMGpSWnp8YU0pXnRqJXxgPV9bYEdKaTtxVXIocDI4YnJxTHUseFA1Ojl9ZDRoNXRBZkdDWFY3e2RlY3w8O3UhM2ZiU0VUVDFBfnJ4V3J9eGYxVyF+R1tgZ1tvUGVf'@;
put 'L2l6NEhNfXcwVUBGdTBqfSldR1ghPyFxdC9WYis5ekgkM0A8N0NFamdGZWtVKFQ1PSkhVj9eZyVpck9EeUlheDd2N2lxW2V0V2dhNCFORDErcD9rbyYyW2NUIV89SzQ0M1tnQ1BgLCV1Xi9YaSYpYytCfXF2dldyeG5paTBwaGBeVHFJK1BvNVh9fTlVSjBDJUVSSDM5KWMpYyljKWNqUCVIPncv'@;
put 'dTgleF5zPitQUl1obm5FbD4kc3V0TnBuOzppcG9MUkxSTFI1bkxSQmlhP1dpWD9jdzh7TEYmLiYjeCxENmpIaGNZNUJpPTsvMnhuVFo3W2JObXF1VW1jWmQuS2YlPWZRaj43a0JGSW97PldYV0UyNCpyKD82U24wc3Z1QzFHSCQ0d347b2BzX2U+Zi5MOURkKVNEcT9NKyhbYFtXdTJrdzg4fCw0'@;
put 'PUldLzJgSkYoVVgvRldoRSIobmA9VEsrLnlKN09jN0tBTz1bS2wuWStEJHZAOkh4YDJwUDQ2XlhLOGRYOV1oLFA4aFlYfXQ0R3IzSzp3NTdGemVjP18mSzo+NVBrUGpWQlAyYVA/NzgpIyhLYj1CRkdeUkZzczZlXStXNUBCZDFAQnxIVy9nKj1XdVY2RV1JKTc6Sl9bPWE0NntnOy9kIVZnWUco'@;
put 'ZG03ZDY6Zj0rI2x8L3xnQjdYKDtOTEVRLEZPWEk7ZDYsInwucUpONTFRKFdUOTQ8bkJkfVBfWzA0Z3lyQCQ0TyVAMU8vc1YsVGBGZlNvM0MzOXNMcWpWN24lYHJINFdEPnRCInBBTDY1T0h1Pi5rMEtjfCFsL15dVjV2OkRuekkxY1F9JmUyYHRlYGA4KVprJTtCYVprKT1XVTNjQiNbJnRFMmc0'@;
put 'QlBMRSV8QTQ4LD14Vi9XaUxWOVgwNCEvOHlEeWRTKkF4KjNkVH5fbCZVYm8uJkdbWU5BSU9VMGREI3UvW0o7TDU3UV5ialhtZTx8QmBqJFF5WT55YjR5TkspLnlAcXV0R3U0UEpdRVJaaiN1Tk1WJjJhZU85amJqQTU4M0QsT0o7MTQrPFkkUzU3XmElZkxCb3RddktvM0w6Q0spRSFMdi4oIVs9'@;
put 'UFhCbHRBIXVwZEo/IWZGQUY7ZEdRfiRoNV9hdjF9SiNgK1deUyMqOjZpNjErN0R1bXxGZ2daZS9fQkZ3QDJFUDVFVHRYXywoUCpSMUc1Z0UuS3tdQyxwKUdUXlFsdXQzW2duazJvNGcsfl96Okp5ZWtpWEdAWGtQRj1RYER1ZkJSQjJSVFBtNytrbG80YnRhOSFGR1NzWExoJE9JMEsuXnJTK2Fh'@;
put 'M2skS0YsNlFYUz8wNHs/fCJ7M3t7OFMjOWV0T35WdGM3Q15PY0ZMOSpDUDgqIXFtQCFRUnI0aUxucEMwTHBSMW8kc101OXJDOGxVZSlJMFY8WVNjbkIsYUM2aDQiKyhyX2BAbT5bWTNeWys9e1FhQEhUMGZfLD1+d3JiSlJ+dFNob2pWeFJeSHdqTlduaj1TVzUpVzx6ZWw4I2dVSl1sPFZsKUdz'@;
put 'MTw6ajtVOGZlKnEzNmNlPSQkU2Y5WmdoMnt5UWJtbHFhezoyNiRTeGxiZDtJUUIwYCEpQ0xyN3hmNTUvQ3dPXXA9I3A0XlVaSH4lQm8uUCNdPzxBYG1GW0RiQlQyaUNoVkIzNylZclAyPFMuUkNdfH4hbDRTbjRLPDBVc3RAcTJqWSMrXVBnKUlaZHpeWjVVLmNsVDJQMkJjMz1IeCIiP2xoO1kx'@;
put 'ZTZEfSJZdW97UDY4dTA7d3YxflZqYXRFR092OVR8MFRDVkpTaEMhTlBfKnowR0ttX3ojJSldKmVBJEV1SVJJO0AyM0Q8Ok9FRVhbdEV1Rlh0XS5uak5jYWZERGxKO3UjK2tBXSkrQCtINUFiTipNfjBXSzYlR15QeF1hQDtke0Q6JTxiYSV2QWBvSm5QWCs9d2UxZEYoR1goZ2lVcz5KYDREJVBG'@;
put 'Nyh6azBOKFZ4ajNyNDJmSjdVd1J+dnske0ssSGJhMV47UlVQMU5OaColej1iLzJlInNiT19uekAuWChdMSRnUmNiLyMsX0EhYD9HZksvSFE9fTo9R000SGlsW0I7WkRee3A0PG5seHtPSFAmT0YpaTN2dT0uYGImTzQ/YypIYiRIZSpWNTlLcmd0cVpxQGNGLCo5ITNYPkRLS1J7VG5YUz5yZkQs'@;
put 'WmZQY2VbOmcuUElndjdXTSJPYSxkUzs5KUNZcSshL21ZWHVSazREeDo7InRITmNeeiZpdFR+N21SR1ljUiNJTklQQUxeSDJ4YmkwVWtCZFM8cWNGP1tQYDdeMCZqOHY8JjQ9cV9WKSU3I2J6YUJeLiZPe3tXM3NCO2Rxa3tXVktFKGFGJklQQ1EsWSw/Z3xkI2gyaGZ3WkQlOFIuXjtjYE0/e15t'@;
put 'WVIrWTJEczI6NSpaTH0wcENzVWBKUCZfUXYyfXh8eHx4fHhIaDQ3QjlaMT9qVnx5SVlKLjVdaWtIOjA6MDowWD9YUnN8OW9lSnZVe3Y5elVVfmlCY3lMT2UvZDtKOFQ9L15xSjcyX0QhMGZdP3UyRU5INUdhfXUlI1d1fCk7dCp1VUIiRXBkL2QlQlB5RnJqSHBIeTBtSVd0aUBzIkl1MTpIcFd0'@;
put 'dW84Z0I0LjpYeXtZTXAxQHR7M25NMmlNVlNySmMva1BeNTlDS3BFO2ZhcDM5Zzo5bGVLdEc4VSJybCsvI18zaDpQO0dVS0VdJXtVY3AkTE41XzhXI3FvNDxtMzZIPy85VWh5O0Z3MVh6ZGlAMjBHdkJycHptc0cxfEUhSnA0eFZlZiNxOTR9dCJxV2BzTnR7NE4jS2FuemRhajFoI3FTMVFNayoi'@;
put 'RSJYbyRxKU0sOlswfjRbT3RFa3RzXWpJN2c4eTo3YGpjb3RoYjAsSFJBT3p0T1pkYylzbnNIT3E0XTR7L1V4MnspfTVVc2wyNDp9TyVVP09KSDpsMTlDQ3A3MmVIMjRoZEI3IWArdWxMOTQoPldyLEhlMGYwKSVvMFdyNDBXckJQTy9HSzErSFJ9XU5Ve19ENCUyem5oY21WYlt3RG9CYEkqZXNJ'@;
put 'bnZTbjJzWXQiTjB7WFt4ZGlTaHNifGNfXnFnZSNXZXRgfDxxVElLIVU1JFtST1Q/YjFVVSlaRWgkJEgoXypoW3h4MC4uWGVeOnZEPnRLU15HJkVMOyxbL2lVU0ZSdX5yZF83ODxWJjNqe2JEUWw6WiRBXXwodGBGUlklNURNMDQ/Zy9oU1kmemwlLiZIKjtGV2AxMTJ2TktxRXFAOmBfKXlASGpO'@;
put 'MiUzVyNnKzRxXik7TCIlamlga15FPV1lUyFsUXQoNFVnRzdCL0BiXi45ZkU+Z3QlLD47SStab2VKTWZsWC9gNyVPb3pwQ0VBak09RzZRNFoucSZUZCQ/W2FZMnZvXzdvLyw3QndFK1VVVz5kNHRlMjs2U3YrW08/KV58MXJUZD50UnxpZVdzNjIoRktZJCt7VGltRCQ0W3J7TDZ0SFAmQiR7Syhz'@;
put 'ZyVQejhSPURlWFVLWixNX2dha0pfQkI4Rkk9aUdYe1RrZldgPDNqQFkkeWI4Nl1AbzBLZW98TTtKUm07bj9NXmRlKi5SKnlpMlZCV24kbnM3Mk1tW09BeXtaQ2JDKEc7ezZLYSZaemtkTlgkKFNzbH5iXmA+P1tyL2pYVHEmR1E/VitqdWRneUJJUkMzcER3cixlNlcxUntndThZLHx8UCJ9MnEw'@;
put 'bnZfSVV4YipTXnE4Wz50Unxrb0A8NVttZTt9S0FyXkozWGhvXX1KT0VUL34pd3JbODEuSXJ5aDsoSmg7Ok18TkxeRXFvViFHKDd0SW95ZmxZQDwqNyxWfn1xaUNpX0NQUX15N2FhZ2VRWT1WMHcyd0RjJUdYM2k7MDAobGtEOFh5UDBfZnFaa3UlcypMd3dSaHxSTkR8SH1FbTtLQDs+STpPVDhK'@;
put 'JG1zRl9AIyh6MV1pIVc9Z3U8cypIYnRzcVV+XWkocGlzPUh6L0cvamVmay4rdSQ/V1ZXUXY/IjRIJFdkNEAxdUkrcXEpWUA/MXVhODtQLDEsITJ5NC5XQ10sb2cyeVlvQGgzS1N6YzcoS3hSdmN8R1B2e2o0MDVfdHhzQDF1TCpPVmlNNXw3NGUqYXlGRXZ8NzREelArLkApc0kwZVMrSTtrUUxD'@;
put 'TkBEa3hwK1BMPFAiQmt4QiEyeXZ6fio+P35MO0kzK1pkNEBoJiokdSskWXFVIy8oS0UxZyFKYnMwOzBLMCtHTnJGbEw3OWtRKy8qP2sodCtJUFJTSX5xJGtweDZjUysuWURwOFBqRXduaFE0QC80TVBhNTdLUUpjbypnK0lWZjxEcHEka3srK2RQK2FDemckentqKFQhdSRxKVlKYTpiOyopZDBI'@;
put 'PmpoUitjc3EzaCsxflY+WC8pZCs+I05Ee1JZRUJ0by9iU2EyaFQidFNPQ1RuKVM7LmNnZDUqPXFaKyohRiZvb2RCYSUjdTBQNTg7Kmt5Q3gxZ2ZXRixxR01WbVElPzF1KCpVVm1RY2BhWGFKMUtVMU4lZFBaZnhTaElaZiZQUUwlZ2M/ZXk5RUQpdFB4UiYvZWwvWzF1USI2cWxsWnhkRzhLNj80'@;
put 'N2NQN01vRWt6SGpgPyZ9ZS8xSXxxbGxYLE9EJUU+PzQ3fE9iWiVsSUlbYVdWUUw9OGJTSGo5WCV9ZS9GPzNLZ0pffDc0WzQyS1lKIj8xdTVYY3k1RUF+ZS9jeiZLWUpAPzF1LjoyS1lKaWBhWEdqIkM2UHduZlduJX4iOEtZSmZgYVgyak8rY0M9fWUvV0p5IXEhU0lQcEF6MWczPnFjVmZKRTIl'@;
put 'bWFtaklqdVhVUUp2ZVZGVClAPWFJalN1KHJdTmt4XWhoSVZgVTwieTdfUStqdjVfNllreD9hWkk/P24hWE9wNWE5eFJzIWFlYTwhXzRPTm1gb1pJWWB2OzEvdHEqbFp4IXEqbGVhZVZAU15CTFJJam81diV5ISVjaitIans/LyRIaiFYRWZQKz5ZTjV5ISRxezNOYy9OOis5XWY1ITRpeTNhPWs9'@;
put 'dlpmbWp1SnhpQVp2P1IoSVA4ekRtW1s3VWMhVUdzNEgkN2UjamFxcW1Zd2RHPjBDZ3khVUdgTlhvQWY7YDpEO2J8bFQqXipvbWF7WSRuLGN4X19fPGswWkNUP3wkUSteKm9tYWFSIUs0am0qdXZhZlY2USl9IUFxbWF7ZSx1InUweiFnaVUodlJ5SGB3ckw5fXwqV0suJkgiPkQ4UDNYUDBIanVY'@;
put 'aCNseC9pL2VVLEZKam9pczNvYzdLbSEvZyZ8T05tZ3grQCp9TSshSUN4JlAwWDVJYTxvcTR6W19qTjRpcHVQK0R2fDJPcUl0bj8xXl9mQzMlTi8kWHRAMzFeaiR2cTJtOSEjei9pN0lnVnNIKzs8bzAqNV99JH5aVkFhKi5AbHNXYnNnPHUsSVNmVW5HWEVuMk9reHQ2LmN2Z2wqQnFTPnJmd3cw'@;
put 'LDx9cW9TeDVCN1Q7LDNtWyY7RVAoNVcqT20+Xn1QWV5wbG9SPS9gNChYb2xLMV5kJDp+L3xibmBRWjpMVS86RVZRRlssUjJ5VDxsNVlBRih8UUt4RCFgbzomZUJiKWEpc1cpNjdraTVZInwrOj9FfElPRlNMNjxabVlVUHw+ZiYwI29CMnh4RjJGKjU8ZF9IImR+M1NMPFQvQ0p9P08zRGdZVVsm'@;
put 'M1RGKzRfRylhSlZ8KUk5cDhAMm9CJjphY19INC5xcUE2fnlNekIqazZMO0g3aE1FaXViNDAqTFZ7OT92KU9rWk9jOFtHYnRDR3R7V3dEZUVjdThgYl4/JCRgUyFUKTZ2UGMmIT8/Y24/IT44ciwlajtDZUtTeT1FQylBJUc8M2RfLmhbd1kyPGFDNmJNYS80S09dXit1YzJfXy9HWzA+MEFzLjI0'@;
put 'aW56WV0mZCE/KislamlgdDg7RC5CLyl2Km4hdzhGZEhtKF0hKHFZKE5CNHRqV0RsdjJJOmgrQyNMZ2tSb0FeT15qVXgvalQqVi4kezVnYlc+L1B2IyZBMnNfcUk0U2t8Lkh8dUlxJU1kMHtDM153UGlUPlk2MTdhMylsO217LjhvJShgVz88QWB+JnB0bHkoc1lfXSVSTitvRk8lPTYsIU0sVjxV'@;
put 'K3kxRXpOKX04Z1VtYE90MzRscnErZHNDO3E+RGZbWTxIdUhGbiVyeHAwSUk7QE9LMSpgbENKQmlXb0YybCZNOm9YIWI4bmU0MT8zQzF7QUhkIWhlbiNsKmZSVERWZmt0L2A1dno6fFI/eUtPZ2BxU3F1VV5yYnspdyJmKlhgVyloPlckLD9xcls9Z3xVIWo+PzA/KHZedXU1W3pnQjJ6eXc7eHBR'@;
put 'cjUmMzNzTGhieChSaT5WRWZMOEdTQjJ1eC9VPlZoRXBOOlo/XyhdLnJyZl97Wl5XOnNDIlpCRnU4SmB9JnQ1ZHFfa2NtKnVHeDNxeXZScjpRNnJEaSVQem9XJF8hX0k9d3w9QXFfQlBbXjF3NkouTmtWO0NbJjtoOEI+U1syb0FWXnwqMS4xdEU/Z3suSDJ7fXlsVkpLK1NHQnExPEkvJT82c1VS'@;
put 'bDsyLntaQl1PSy8mfG8pITdVaWRfYDR6XjlsP0taLiFONjExfjMoaHxuQ0pJajFvPWpoW2NLUCNpe2lLaFAyb19CR1MkWCQ+bzBAT1tNcXpNZEtOSWRMNlVhRD5VYWJvVHlrJDpaIVN7P0cxSz13bVJFZ21wXSsvUG5idyMuM2FwME56U0s0IUAjUlJxT0VLWl03LldMQUs2Zm9mbHZyciVddlJ1'@;
put 'O09yfHJ3MjdvMilhaTUxPUxQcUFQMS4uTkUyY3J3eEVje1ZfO108MWJ7MFB2Y1l2Wl1Xbnp4TzJYXUMlXXJSVUJZI2ZGQCo0SjthU3dAYyo6PE12WnpaRHpFTWNYYC9EQCZ8dCN7a01haH1SVGFlVk5BMVI4b2YqXTsmL14qdU5SIVg5SDB7WWxDTU0qUypvWE1lRi86IVN2XiFddWExbVJVVnpy'@;
put 'Y1FhZzt2NGNdRSxNSmtzVzxRc35pYSIwfHJsMl51JV8xPGYsNiQzPTZoMSZBcmVSezVpTTtzQTclUloyMCUmJV5fbHZgZCE6KU1VZStxJl1YcGUzZy5hcH0hbmZaLCNkUjo/WFZJMCwmWk0zaU1NfkBLQWg0bi8pYzhtLCVqQCNVUDA9IXM1eiVQaTsjXSVqPyFILyJ0UVRyN01pVmdjXikoRj0u'@;
put 'WEZZbmgvREN8az1rbD8vJVBWJnNtPyFUYmx8ITlseVprdUkkWC5pLkVAenlOUm1rVkZSMEhXKT1CNmZSXl0xaFI6UkU/UDEoXV1gM21uL2J2N1JSemxFbyNgayQ7MFloVWJXfiVESStENnBOUzoxcEhafWlrKThRXyFgbk96T3kweUZBNCJXRj9qNC8/RzZrJEIyai4vcDNjN0tPYXd0aDNZMHAp'@;
put 'KS5ELEx+Ky4sOmRYT3d2JUUsMzAyOCM1PWhaUSNELm8hVFhgWX5RSFUpP3NedUVeL2olWTExQShgfSF5RmNaXl1nJT09e0VkZF9XaGxba2hOejlAYnE6OUpRSyU5Z2VIKyQrSSQkWTJAVndbRV0kcHpiR3pLfDg9fiZyXml7LHYqTkFhUjNAOX45cjg+NmRVenNHS21yJUtCZV5fdD5fRmpNd0B5'@;
put 'VGYuKyV4Q1ooOnJWdCFyeiZFWlswZUlabTpWPHhgMF1aX3lqc1RfV2w/cVhiRX0uc3s8ZkFJO3ZlLHd+eTYzN093US9EXl9aODd2UT1NOTs1SnxZQCsqTj5RSWZfWk0vNFUrSHYvRkEmQk8/NVZldnNgfmZNKS4vZCNDLDklQ1k0bHZ+Z1tGOSRkMnQ/Oi49ekJZUDskUC9LXWVHa0NVMyQ5Y0Ys'@;
put 'TSVDZHByJk1AZiJ3fVQoc11NcUJIY3hITVksc2hZU25LPHo6cyQ1cixAOTJ2LkViezQ6OVNEcCZ1THVrPihpIWlodykyK05YVixhfmFyenpoXTJaTXhAO1U+P1hadDA3K3dsOFBzWzpDY3omfVckckF7IVgqMyhfSHdDY2VET0V7WTQpTmVQXllVY1tlX0xabmpER0FjI3BML2FvRyY9dlNGdnJB'@;
put 'W0Q7MihqZSxRfm19Vjx0VjdtWiloTF5aMFtya0F4RnhSbj87TlN9UzFXbHQ/YGU3U2BWPHhFKDRsSGBYZ0x7RWdZZmRvTDkyTmkqZG1Pak5XWmx4U15rTlJdJVk/IVlyezFbU15Cc05XKnZLflNnVFpAfHEhZFVkITwsMS4uVC5OYT8vMnA7eDxGemNvKzhOP2M/emVjUiMqVThEQmlAT08wLl4+'@;
put 'cktqcXcjXTBPQFF+blYobiF2LEd6ZUQ2MnB3L3U5bUFvZ2xCL2QuLzVZZWcjLD99OWImcF0+K2VpW0QmNXR7OlU+U2wiNExvOTdza3opV1QmekRDTUt2dHh2OWVJclFdRWRkV2k1YV1JOERjT30sSCk6NjthdFAyeX0vNk96dWYwPGI8OFosM2ImJGBJMjdrMmheaD5QZX04XnUkcTU7LltFdCx7'@;
put 'VCQ5Sz9ocUJuT2oiV29mYEMlZ3sjUmVtc21eXSwjZVpzZ2U1XWh9PWlrMHNYPnR1PnFdPmZaOWM5KCZTLEFlRn4zYW9nS3AxPX4rViQqV2IyOXpGYVY4P11UOjAkRSNHd0RAcEk3OHREO0BpP3AuTXI1QzZPenx6NSE2OHBhXS4hV1k3aiM4eX12Zkw4RGMwSDcze1B1VDJRWUhDUDcmeW1nVmBJ'@;
put 'SjBbN2w5LCRhQn5eQXFCJmF6fSNRMzdvMi5kVTwoKEohPWZeNHt7WzshQntkQjRXZEI0V0QvRGQ2VXF6a1FaRTdvVEdvTGwpN05PZG5gJWd9NWwlcyRIOSg9WXVqWX55dEZmZT5nWzokODJ6ZUwqcF50cG4rJSY7Qy9gbi8pZFRFQ0BlM0NlVz4pW1NZeVlONXVbJVIlOCQuZUdeW2V5S10mRzlx'@;
put 'O1cuP1dAbFYlInQ3X3w8NWlvKj58fGxhVUozNGZ8WWREQ31ZQ0VicjBONHxyPEp1STFOYV9gJnBnRWpGQGNnYiokW040VHU1cUJTQElLbW4+PDJ8V2JxQlNrPFt2eVE+Qkx1RSwlNmh6M1R3NC98T0k7X0IvQjN1SXgqNFZgRGo/U1c1eCM8fiFIYkgrTntIY28ofHdEJHtXOGZ7QiJfVWZuV3RS'@;
put 'PS4pKVRWNTZSQnAhfjNzW2FtKGA2a10uM0ovbyo7cl54fFIzcXtBPjE3T2hvOUI7NGhANlRlLjhSe1lAUy5wd0IuQWtBU3F1L0ZWWERmQDNoOWIuam9OT3t7e14yIjBzeU53Omo0alhwckYwQU14Nyk8JE06ZVpzbTgzXVRiR050e3d6LHdCVTooaUQzNTFHQ2QiZGJYbjx9Z35rOEYubV1iXyIk'@;
put 'cVs4Mj9Aak1tdjZ4bkNCbl1QcThUXjhQcyxWNXVvb098MX4lPTBkZX5qJU1lPytjX3JvVyw0c3dic0Zxc11gVH1GS1AuITtNOSkhUGd6RClDRUg9dGV8bDJBc1hfQjssNjtlNDklO0QoWF5KXWJrV3p4NTg5TDV6ayIzNiFBfmo8Z0swVDE5Qio0Ri5bNH5hTG03SW1seixuYk1SKFA6NGAhXThw'@;
put 'fD1ea3RFe045bDJCVTFlIS5lST1qV3g/WzxpNE9AJEc0NjB5Y1lRfS5YbmMhYmp+R148N3xGIWVZOyxJKUhaXig0N0RBczpvSjkqb0VkWilOM31GZmtEckd9InMyLyRgZWJncWRgMn48PS5iVDptS2BUMi9KczJkQX5gRVIqY0JEb0tDa0tPSVlkPDtBbD8vSl1mOUlGOk8vbTpASDQ/cTpSbWAm'@;
put 'aHRZclh6OTBVMnM1LEt+QEVEW0BMc3AlMVRfQSxXRCtgMVlOYTorfiU3Rj1EVzY6NUBIQntXL3ptWiR3MW8kXjVAdGEwdnJ8LiNxNkdQaTM2eHxJZyMzfkAySFpoNC4pckVRIng0PmI+LkdeTUNhaSZudEAhaCpBX01zaDJdbkpyZWBCV1JVP097cEB9KVNlJSYyIilQZXdIVGJ6NmVfKXc3T0Jl'@;
put 'a3o4KlclPGwwUzJPWjZrV0lBVmVnVz1yZzQvWHxYYmtJTEI8ejpHZXs8T0B4e24mVld6fnI2QnIvTkI4Z2lgeTVoOkA5TC9XYmFIVFVPcyR1NSl1bGBRO0gjfENuS0ssTmtjbD1PPy5xOHorRyYjZz1HRyJ1emtWQi9sYDdoOjtVcHE1MXg8LHFIUitGVkpDN2wmbX1RRmVSd35KQVphbHVgcE09'@;
put 'LyZqODJCWVglPS51bVg+VFElKzUlLDF3NTZTPHZseXVSdHt5Wi5NVGdGTCZjWngvci8jPVciWS43XW96ZlNXcCVHSSQ0OEpdOUk4aFlFTWs/Jk1GV318QyhvW3dsODo5Zzl3YlIzMXdxbiYmfW1SQjhpdFEoZyEyJHZEWVt5ZFRoJiQuR0VBJTE9WFZPMWtsMWk7Uks8WEY3WCN9OHcxWzdFTUIr'@;
put 'TmQlLD5yJUksMU09L2A2NzBWb29fcDM2VSE6Z0BkfCwyX2pVOXZ1JFlQWGVrRj8+fVdyUD5ZVSIjYU93XmVdYl0xL1N8R11lYGE5byxfXXFkOUY3Tzc4c3dyLkBJOywsenk2dGZOTi9YfWZ7dmchcyRATmtRa0J6YHApZTQ6PkdvYC9mKmt+MGkzcmgkWE1zeUpmfXgjd0Q1bUpYWi4ock07L2RG'@;
put 'TiNvNXVQO01pKEZaaT0oX3lJd20kS1c2LkRJeTppfTt5YHAoT0I4JiJTKyl3PS8qcU8uRSY5fEVlIUZUcj8ueW0/dTM7VDhvXjZCdzMyal95eGsmRSl3QEZVYG9eU2U6M3s6K3J3eUV2UiUpb09lNXwvfnpsQ01+VyJdKz0sU1soWEYkaC9XeixbelZqbl1XUillc3pSZ101dVN8b1J0an55ekFo'@;
put 'YU1aJSsjZE5OL1h3d0NzOlhQUTIjMDdTVVlQa1J6XTdgJn5dWm91PFRqLEArWCkkKU85X0tLZElCZVU+Wk96ZXJBRT9xXnExVC5MSC5Jfj8hNzt0K2E4bWJMYWcuSUVvZHUySmA+TzpnTUFBU3FHS3diUSsiL3RtQHJNX1AmcUNsKmUleFRlV09jcXpiZG8iMHNzPiQ5KjdgfURqQ2I1IVg0Nm10'@;
put 'aDQzSVtmZWBBXUsqbylsNCFzKUVaakcsdyVTUjloIWY4S0daZHtaZjI9WClvMlRPQmdrYCtIMlUmMz5XaWNxemczeVVBUSgxKXUxJjkvZWlXfig+cm8oVnt1fWhLVCsiXXBxVy9UeCVbUHtYbXoveUlxVjptN3ZWMEV+MUVyTkNUbHRWaU5yP3g0WGpHSzhdZUBRcGJ4SWRSTlRCOjM6ZThoZ2x1'@;
put 'NXIkIS5hVy53cnk2MHFfZSp3YDt7KEU4ITh5SCZ5cWRlfTFrP2QodzpxUF1zM1t1MzozNnpGLn1IT0Y6YFY9Mix2fFZzaCF2VC9lfUZWT2xfTnAwbDp2SGJFdjhPN0J+WTBTTVVpVGk7ISk2YXNfeCo3MipmfX40d1sjbmUmbFZpdVJxciU+Z3Z+cjVHSCNoKWR6S3liV1thMj5iMjhOKDRrRyJU'@;
put 'Vj1sLDgyXip3UW5RPmt5Q305MSk3QTYxJEpzIyYyPHhYbyg+XkdFYmd5MTtkJEtjNj0ubDgheDw/IXhoU3B0YkI3RCUjU1haW1lzVVVwMEtKejY/ZG47aV46cjNyY1hlNDtFQS81cU8sfDp+Wmt2fnVMSjVAazA3Zi8pWjNfeks2eVhfN35PJXpRYUJrUERBQSxoSEhCdDtDXkpjYzg0R3VyQyFd'@;
put 'fXVSIkNBUSY3ZFhqKmdUUm56bDZrRW5SUHZ1VylBdihKdHlOdih+OXNjemR9WE1sMWRNVDE0Mmh2KWhNaGwlY0RjekgpUkRFcnU+a0xSLiFpPktpSEwkS31xU1VuL2wufVRJaT5PJXlFRGl0JHw3W0hdUzN3UHl1MFJERHYqU29jd0Z3PEMzKHx5Yl5XY3VXZiMvdFtXeClRPmRoYDMqSiwuVGVB'@;
put 'eUpXIn4vUjlEVFZuX0J9VDdWNn1ybDU/ez92O3Y9TEAzXkQjRlRjU3RKOnUycX50WlFYKilXI0VpRTZxYTx7c2VXdGNvVW5QSHlMfW5deG5PUUl4Wk1wOVVtciwybCVSYmgkK0FlXlZMajFTKCs3Yiw/MUlPcDY2SFUzYCZyS2N3OHE1S14zVnJ4KFpZOClHOkk2OyY+XkRUeT92XUB6XTlFS0xv'@;
put 'JUxxX3xSWENGcGF9dzJ9RHhPNDxJLjJgZHhlUmBIc3IvYHRXZyQrPUA3ayNkSSYkUUdLWFdXOm8jNGtRaSZyXnRiSFV+KUhWfHVnVCwzQHEzXTRZeDh6LkBdMVBCJkNKQz5+QTZQb1RXcXhvTjdQI0ZNPT5aS0BjdEdbZD1Db04sV1hqJSs0RmRQeCNyPUlLLH4xTzoqTFR+KV0xRmp7aV1xX2NS'@;
put 'QHUvPX5+SklVN2JqdHI/KV1+cXYsO2lqeldveiM2Rm1lQyVyP3xocWN8W1FgdH18KjFGbFJkU2NwM31CKHVsYnN7ejtydElGJEdjbzV7JTtoMmIlOmNnfjF+QFY6UWw0Z1gzbkMkTEpoMUokKzoreC91WSpLOmZ3fmNFZm05VVg7fXQ9SHM0MXxXZCRgSk0idFhqUnkqNDxCU1JqYjgsQiM1RDxO'@;
put 'MExuUks3aHphdm5kPz9FTWFKWk5gOzlGUzkoTy5gWVBeZls9TV5OR2JFTD1bKGtFaC5hJHswNGhNfC9gOF9GNVhuUTRZOFdDYHp7Tj9eIkYsMk1NXmVqTX1UUi9gWTx3VUV7Iz5+eHV4c2RFNl17X3dwOU5vb3t4XUosMSxyc2ZnaE4yQ1ZyLiI1UT5UX341fWN3NVM5dz1QMWZaeDUvWzxUKClr'@;
put 'YkxGZ20sKE09QWNzOGJrSVc8UHNbQWdSVTZEPldWYVlLQnVzWDR3I1ZhdXlZXjFuJGtBJDplUm9bPDI3azM2UTo9ViRxL25FdDY8UjMlellOJCR6TkA+cHdkVzs/PG5KYTJhMFNpa0EiLi4weWY/JmQ7WjlUQ1pmQjQxO19sLDcjckNhLGRsRloyLks+TXo8KjBLT09Tfmd6QzpGL2hUI3l2dC8+'@;
put 'U0dvJHxfeHlZQHVDdU5PfEAmdytGWjYvTWlWbjRFIShnWlY2W2xkWzYyKjwlXl4rRmwya0ckdHh0cFR9TC9lKUZ0RkVpb1d1dzBML0lKUkw1VGtBSEwyI2t4MEElbi9rXVU9bGozZ19jY3JjLkZjREJRMTI2cGBjZnFmVklQT1UmJDpgbVJHQCFRb2dGa3VLVFM/ZV86OEwkJF47fmksXVBLVl56'@;
put 'L3lOQ0o8WWh0a09ASVtgUTdTLEFYPjI8ZU9VWHVbfFNlIjZmcnBVIndfQDgmYTExdyteRyIqRWxoPmI4Nk1rJTxIYWBUTzp3Z051JkR+MT4pVFksdlpPOCh+QnEmdC83WTx3LHx2M28mSn1ZTDpTZTo5OnczfFk3bk9LeTV2UzI5OCZuOkhLeylpViNrWW12bSQ9LEVTRlRCXWdMKX0rRFkobDBT'@;
put 'eWlYUnZMYiloQCs3Y0hqNjlyNl5OUDEoPkx4Y0UuWHZ3YmV3LERlKnltb2R+SCo0XmVrJmZpSmZNUEVQT1I3Rm8zUisxcXpQP29QL19UVWJyajBISi4rU2NpZ1hQMjVzYXBUKVY0YnBMZU1lbjJMV3ZuJkBpTG9DRlFWXT14b1o8NGxpT3lQNShNXiljKSRXYShsUmQmL0duPU1gOF1bUVFyNyY3'@;
put 'Rj1VTiRVZHksdVR3K25CUy8hTCl5eDQ1P3RXcmJddkk0fmxHQDowXU1oUkRkTGJlWXcxVnpDVkdoSkxOXj57RHs7PTp7VXJFUSUpMnA2VUtWTVhuckIzYmlvanFeV0ZyLHc1OlI/V0VFXXgmVVYmKF97Xkl6OVBrSi54OSFzM2BkO2JeWGV1W1N3YjhEK29WfChnPHNwe10pWHh4LD1HRyJ3O1VO'@;
put 'ZHwoLGIjRWx5I0g0dXo2dGpSXUBOeywocDwkVWxuaCQ4aXhZdmRkKSpseio7NE58Sy42TnkxKUx3MDg4MyZWVFYiZnY2KUxFTiZMeVVUXnN8W1NFYVs1XzhMaVs4TT9iYGw8dyxIcyl8cz8seipmJENBKSNsKkxLWk1wJmNjMXlAcnpFVT5BKm0oV2omNC5ZWGs6bSsrZkRKR2hrMnNnTCkhRkZ5'@;
put 'STx6eVgqeX1YU3puX0VycltacHx5fUZJPzRSTyhjJjRCeUAlaEFmMFVQe3tiTER9Lj9udjwjJEEkRFNCUCxmQjl4bSIpJHEhNSssUWl9VEBqak4zYGxwTEc2U3JxQ3VUWCZxMWFFPHFdVFNYM0BBbmJILztXVSN0NWt2WjszNG5SO0IleGF4RTMwfVtWT0J6IXAodXF2bjRLWGZfVUZ2NixeaSF7'@;
put 'YjEuXk5rbEVzOGo2QkJ4dDs0fDJLQSE3Tzo5ZGkpRzI8M0dYWVFoZS9HejhxUjQ1fHA5UChafWYkVShJcml5OV01Q31IIWRCKC9vcXZ+SmltW2R1Iio9Zl1AODIlPXBhcS5RZ2Bnaj1hJS9WKHY9Qz91KCFnWl5+fEYlX21KXyt7eW8pR2U5ZHpscEx2diRiRmxkdD1db25wfX4zT01fNHJWcHZi'@;
put 'eiNnTWcvZ21SLD8rNnosUC9EcldQPE1rQyxPN0ErK3Z7Yz82MyM1bHxpIkQ5R3tqNHtIei5UPVVtenF2IWhKTCwiXSp1LFVSZXgzbkI6RWVdOHhiaUolcHJjRkhYazpKPDd2Szc6OWt4ajBvMXw0SHMoZ11ZdmhbXkNmN08vMkpsbWFDbWkmZH53Q25MYU9de2pkRnNPKj9ybE98VX1ONmhFb1ZH'@;
put 'R2N6Y15rb0ZWaC81YnE4a2h9JU1tYip0ZTpAVjA1KWwsaDdnbS4weGs0JEwmaHhPW0xGPHNmclZKTlMqbClPWks3PCpwW3BhX1RMS1BpYTxONihXeiFKKTNWPWNzPHB3KXRKZmEyNkRzQ0dwRFZlQjNQciMjJVUzWHtecXNuenBZd2kma0c8OCJseSJxKmV2Pz1JQnMud3h+SHBDKTFdZHFneFlG'@;
put 'Vj1JNUtySGwqTCpLPkFdSVJdOVRtUFlid2Y3RyR7QHVMOzZWb2dxUzdNMyhTQHNEVXlLRFpbRmdVPTVvOVlte15zSXxXekBzO3ZiXm1TIipGNEJRZzxMOFAyXSN+aylyUSV5Ozl+VGZJbEYmMU9uTnwoNiJ4PTs1cHVLUnRRN192e0crX3R1RXRtaGtNSkxgb19FbW9nfHEuKnUlJWk6ZTZdOmYq'@;
put 'JF9JRkQkaW8hI35UaUxPImdMQHs7P0RMKiFmKytTMEZ3aUFEInQwT2Y9RlQlcXZiWjxeWndHcS9maj9IQU1LaE59dltbVWBldncpOEg6eFREPXIlOWM9PnN6XnUlPTBfIzpZantIdndxSjRgZUxFdlMuOWJWJG05RTRgNjwuTGYmRF5HMzQyeml5VnNQQ2s2KFlDWnpIbUFNVztIbmVYc1NkUi4x'@;
put 'X3JAZEBsSVMoN0Y9dHYxRX1zI3t5MCk6YXhVNXx1Tno1UUdpN1J5JHtdP2FvZ0lnMSxfK1JFQzJSOU1aPEZUMytYYzgjMD90fDoucX1PIzpYVk5tVz0pRSw+fGN7azVxcnc5OFRJcTBBaDFRPlc9IzBrZU0jUHx5Mzs7fEM3MHlfPyI2M2x8MWRYRTI5eWtRYzlQSmlLVG9ub2c8ImBxdiFCW0dq'@;
put 'bnZnLlF5OFRgPDh3ZmswOFc7KV9FdDEyMmxxalN8JS5gPlI9NG42SV9jeHFuL0l5RiJtZ3dUdGU6QzpUbGtDPjFybWted3RHXk09KFhsWVN0WDlYR21Db11DcjhgQiFhNTVvTGUvfjxaOGBgO29UU3ZycF1yX3ohdlRFYEtfKyVQYiZ7OFQxNGZCaS9RaERxcz1HYHs0IThmaHJhZzpbejZ0Okg+'@;
put 'R0pMdG1ge0RLR2JZJlBEb0dGKXFRQGgjbXArdjlrWzhTRFhtU206aFdidz0uMlJhJiEme1N2VSlmfEBMSkMuT2kyOC5kd3FgV0R1KkZ1ejEzSlRVPkNVKkw/U3VjaUhVbGJwLFZ5Z3NxWzFIVlhbeF8oV3M1PmYwLk0pQXpXb2lZO204SypTfFcvKWlwMk8iY1E2RmlQMGJ5MHBDYjhWRStHcHdy'@;
put 'WSh3NldIcHBSPjd5VGkuXVlXIkdjYzk+X3JRMTlpPWo5S2QjSFshczxpI2VAKGphWENZYUEyalImZ01WRlRwOFUvZz44U3l3MURiYG9yUE54UU42fXBMUTxWO10+Xkd2MCVScjxWfWBeMkBUZSgmLGJtMUl6ZSRoUy8oczZOZG4kOU9QX307ZyJ9a1g4WCZNbDkxRWxLQ2kyVVtdNFIhQzNOMF1U'@;
put 'bCFVaHJ4UjhrbF99LEhyLkNlPU5ZSGskdSFyRnNuVzJZN3dVMC9OeTNVdCVqYyMiYFNOL2FidUlkZyl9KEt3QyJobWciK05mZFF4JkVoZURpSW1lOHlINEVII0Y2PTw5MHNYbXsrbUsxP1FuVzJvL0BrKjA3Unw7I0dmSyh4aGZpSGtKN08+PWVdW0Q7L0psMTJXWyZGXTIhLn07JE9YN1U3dCNP'@;
put 'Mlo9T0xqc1dyS2V7PEM4aUQhITJLMiREcDtCdGt+ZW19TWVUPltgU0N8cUMmQCg1TDYvUXghJDohKzF1cU5+bDxDcGMkdStPVjpjWjlrXTZuWTduUlRONFtWXUYoWyw3dylVXVBuKlVnNmpzVmIsS0A0Ym5BRklmL00jTVEpc3hWJTFnIUY2ZyR6aFA3OCJ7dWhoSlRXIllURH5JanQvYVdQRm1H'@;
put 'ZCYicXReQlUjJl9OfGNTS0coXitmcyVzRGoze1Fjaj02W2c8fVQoSTxjcSlEZml0Q142SlZaVShjK1FYMF1UdTcjRyw+d3NXY2MvUXlVTD5xP0JoJnYrIzlgRk9lSUU8SWVwTlRmS2JIOiouU21mRSR+ITU4I15qOzUpcGJsRitiZ2hDMEVqcyttZkh4WHdffTIidWVMJDsicixfbXc7IlZXTn1y'@;
put 'UkJtdCMpPUBUdygmfkRsP3R4e1V6O0VPa3ZPUGdpemlWIlZ1XUR3eipRTnM1ejg1Y1Voek9xVjZTTDVDPztKYTVqa2tvTigsM3B5eCUmTUR5PlleemAzRHxhLGxtV3VzKXw6cn1sZDplaX02WUowWnQ5YTsze0kvKiRWS0dvZDMyZjZOYiZNeTFJVzc4JEA+KE9+QltwKHEldlY/fm8xLlBSalhZ'@;
put 'OWZQa2tDaHthPT5jSTQmYzomWUAyMFVqQkxbK202OjNLWE87OHFqQUYrRCU7PG1pSzs2b3dkckJONyFDK0xVYTk3NE5WbktOUlYhRSNHTzh0WGZhS2dnTTluaiZAZ243dW8yOklGdD1NdFBsYmJVSChKJXQ4LHZPaysrWnU2VFFNUUIudUptOEV6Iy5wPygmbFRgTGVZUlRQS1NsREZNWz9LJmc3'@;
put 'JWNnbG5ObEM7W2UxST1uS0gmbn4qQ3EifiRrUzNMXUM2InpqTk1DeyR6SS48WnZqZlUyPX1oeVRqRDZzPUoifjN6aEVqZ2ZBKXFNTDNbQEkoWTFeWjRHXWE7NmE9U1JOMENVek84MSJgTFk1aXBlKTl4PCg+ZWNySi5hM15LOjdSYngpWn06a0VRZzBsVSJMdio/JUA+P2R5T0lwaltkLnA5ZnlS'@;
put 'OUheQXV5UDhoen1YJXdLW2AjI1MpeEwpaj9pbXo1KDxEKDJORSM0JkMyJCtJejxqUGMiS0goez1ZdHQxL31JdnJfOTpTZjBUSCgvTHR7eCg8KkppK2FDVjk7I3t9VUNIIXAhbFZgWXZBMW8hRTBedkRfRl4/Y318QXRVamR2VE9jYnIzSSNxTG4qIj9VR0thLjlmUlAieWk4O0J1bGVYQmY5VWch'@;
put 'fENYTFIrXWx5NGtEWChhTUhqKj14ZDIxdXJRR2AmMi9abHAvWkZeY0tlNl5mRz9aOUZGeGtYU04/PXdKVFFfcF5IYXV6IixNT19WSTZnal9YMVQ/anApNjpvWC54bzx+RDh2d25pLCEkOixEKWxvZzp1V2dGWC5fYmI/bmZfW1oyN0Q9enNMaGJXXTIhW0x3UjpyPiN+PDokfGNUZis6SFBNPE49'@;
put 'R0J1VnRicmhbVE1OT31bImskbm0pcyFvSFlRcj4xWFNxMTVpe0VKSikqWmhTdnZKLHQ1dEdOSXckRWJIejI5WlpIWU1DaDJuRF5aU2kjfU15QS5dREkkT1RiQkwjKXtRfW8vVkdoL09tXjVWakZVK0V+T2J+T0JjdTp7fDQiIWJ0RVZUIS9KfTYiLm9edCIlSkhHJn1vPkssanluXmVJUmt0JXs2'@;
put 'I11WWGFmNGFTOjpeQlFdKSJRQ1ErWF5IRWslKTFnc0cwOSspNXJJQCkpJCIvT2JFOjdhOHBpa2FpMkIpZnhhRWJudF1ocHFPRXE6YEVkXktfUFFqVSsifmVAZV0/eyFSQ3pRO2czZDUsTHxjP3RqJklUQyxMTiZDYENtODEpInBSOl5KOjh2czhYQihHIzRYLj1PYDw6XitFUkgvXXQvUH5OY3Vj'@;
put 'VjcpJiw+ZVdSR21+PlFKSGdneE9mMzJ0e2VBZGZibF80dXQmW0ZMW2pLYF1LfDJlN302QWpDcWIvQ1hAcGJtVmZoP2lRYGxadmYsT1UwKU9Kbi5rRWZXZmtYamdLMV9WTHlqQUlzS3tWTm9JZisqKm9EfmluW0NPM3tyY05xX11ELklnN2h4KGduW1d8NVAyUmpKIjoqOGpxbkJFUSxpKSVLU0Ei'@;
put 'NiR2Rm1AUWVidGlHM0AuTldyUVBtXmNwY31GNGU0PFYseDJiMEBPayJwZ1MoJS5FKSZTa31oSTRebTxZMEJ5dlJCZnsyVTVbZFRXd0E/JSFqZUJ3dl9HPjVQK3pOW0VHWEVzVCFEfHRTMGVVZVZJNlRPRWVta1U8PTtdaCIkTkk5cCk8Ui5PQFlMYjc6KVskUXFQVy99ZWlWbE1XNVUwXUAqQEd1'@;
put 'IWBYK3tMZjh6JWZQQ3NKenouZjcocStdSGcldUJaM25FR1NJKkNRIjJ6WUhWREhgPy92I11HOzVQNDBdentfY3BucWtUUStrZS9JRzcvODIpc3AjdF52XjlsKGRUS0hVLnB0YkVeVERLZmo5bCNYTVVfKXJqKCRdYWRoZWZbTldieE0ifnpyUnh8WDN4USE4Omp4VXE4JmM6NW1oRT1DLGw9SyRI'@;
put 'UER0P3pBZDREcSFSPk9afipYd285X0NhamNeaWBOa3hQen0mOX4lSl86STExNStNVTVPSFBaSnFbZV59akteaCJRWWB7UXBKdWx3Z0k6bWJrPEdWW0VEdEk9dkpwJnAsdDglV306NyExajppbF1NMH5sa1kwIU5IaWh3XjU/VT5gSDZYWHU/V3xfK19wODVJJCVWeD0yMmFhcEpkbDB6YjIudltq'@;
put 'JSQ0OG1walkrSnlzUnkoQlp0XSFQWEl9ME18Vmo+Tl0zLGNncm0yVk14WzIxVzNpeVFkJS4vajVjNU1VKGRHa24vXUBrdTsjcig/Mi9ULGs4YCFKWmxdIWdBbD5mM01ZfFFQQyhzTSs+I1hhUntZOjorKENmMS5CZkRrdUcieHhKODxHZj5XKGQwU2VOO3tHUl4wd2FWd1F1RWk4dWA9YGh2NWFT'@;
put 'KldKe1NxbSEydEw1aCx+PVt8aVhBL29MSXg4KXZtczpnVkdpLnc+dm1GcnB3XkxgfSNUKCF4e2RyJndYbFdpRXowMGFHR2RwQSJDMGZSXSxaRzV+e0V0ayVOM3VYU2h+eEwuUF0hWH4xR2BhMVosQkRwRVhXYHYkfm17czQpM35aYmhFQG95d0x+VHdmdTlmJHNNODlCY3J6SHBtfXFvPCxDIkhV'@;
put 'Pjx0dU9lTDFTalpefjZGcF1qX0tOeUgoNkVAfX1MPn1URGt0JjBCJHxeR2NleUhXel5qT24xd2FPOCsuPW08Wjx0QX5ZUk01YXpIZVM4UUN4JEcoW09jOFBFTHFqb21ObXNQZDtVe35UcSFJI2JQVVg9I3hRIW17Ilc7eGw8U0FeMTtqSUpNVTtUOV1beHAiUUJ1MCZOQ2hENTM3ITt+QX58Rm1B'@;
put 'QVRxeH1qJmF7XnE/PGllOUsjVGRAWyR7fnoiU3Mmc04oJkE4RzVoZmppaSxOKmMhdDo9RHV5KG0vfE5ManpibnksJC9kUyVMXmc6YzZMTj5tbCssfFtycE81JU46KTdbYS4zNCY2fXYsfERwVHpoOnhwMV5lTyl9cUQsWmUxdWZjfVd1fTo4bW5CdXQsbjM1IWgsOUZiYXhValFVfEVBcWNHMz1T'@;
put 'OW9SbzpvZn13Q3g1Ty88XiRhQ1VyZiVmUiFBXzdfME1wO30kfnosbH1KSnxjUm1CcjBjTDgmOUpObldqSSR2Yy5kbD0iMXs4M0tWJU1sZlJWI2VRJURuMWVWfX5gTk0zVWBfKyF2Qlo/dWt1IWQ3enBWRiFXSy40U0JxNUgqQiFKZDU5ME1DPjZHNU9lMSNCfXd5IVJ4UDM/fFh2ayZUN3JaTzw7'@;
put 'RyR5UDIucDttWC5rbklOP2ByQ0ReOXJgTy83NEFeQzhoO2RmaUB8cUFeOmlvdCpRZXo4PGdaIlBTIUIxREA7dCVkZF0mdSZ3UV1XSF5ORDB2N3tGPjA2WFVicS4vK3lxbCtid0I3ZT1VVDZeSE8pfnpqcDJoUGdeZjg5TmY0OzNCfVBzZi5ZUipMbWhASXhpb1pHdzBOVXAxRkVhNFd5a2VCMj5j'@;
put 'NHooPT5QREVqdVs+QXREKlNDZlpeYUZwRTRkNDViN3BteTdYY24lcU9aaGkjO3Q2KCRCb1ExLCMpJCtnPExFZjxtNUpdQ11CNkljdVQiXWQ2bjIrPkl6eVY5YyNlOHkvP3Q+bXUwLHpuYmhTfTUsLkBBU3p5WT4hUDFdaGNxZEgwQ2ZbPiN6LlFmIiVeRn0+WTtlUiwmWGF7dH5wVSVKNS55K3Rm'@;
put 'NXA/X10iQDozL0kvMzk4Olpeb2dnMkJ5TFN0ZmJETHtiX2lZOkFxUS8rPzVEdiQmOkVIUUwpPkdneilwamdNMHJ8bmBRV3FVcjRUdEF1S3RWc0BYOiNpc3puPTkubUF7TDs5Nj00WVFBIiZ7S1RZQjBaVGw7SUF4UV4sKUJmfC95dDt5O0M8fUAheUJSTDRsdHgoSWh5XTA7L24lWjNlN2dNLFMj'@;
put 'RTtXSlUyWzR+S0tqWUYrUjJYZlY5WT83Xjw8b1FqKS5dZnAjXXtoJiRiJTZRRElZMWZZaUhhNXdYJS46fFBUOEhZYltHekp8ZWR4SSk9YSlbUF8oLkp5Q2d2P3gqTDghOmdpPDYiImtGZmx8MlErYG5gVlgpfnZnSXdSKnF2Mz9hXlFXY0BFR0J7MGhTVFBjR205KVo6a34pcz5CUjUoc0Budl8u'@;
put 'IUtna0hua3lYfTZZaW9JL3NNXyxneyxgekM3fSVZYV48S0shOVMzW0gxd1AoUVtsSG44bGN9ZlhCcih0eCpnZ3ZdNTxxXjp5RyE0dmhiejNwdUNfQDpzYUZISUI9dD9NY3pzMkE8eyUyZn41MV4oM1VESlRVRCNscD9TP1s2Nm96WmxDJHhrXyRLWSxOTnVqazNiKnNvOVVAIXhWd29IeCt3Q0dp'@;
put 'cV1OfHdMfFh2YWhCKntvc31CZT1OOyVSTFEse30henVTezopOnZdOyJZMSFTU2cpa3tLUl5sWXtMdH5YY3JaKEUmTXlDY3hdYzpdTnRbV2NjUXghTExAMEgqNFZJKUowdVcsWDlTX0NEREtXeCpVOiNCMEtEaHQmckd4UmhrO14uVjJUZn43RDEkbGBYPkZfL1FsW3t3biIpUDcmXkVdbTwuMFMv'@;
put 'M35WaDVWNDhCPk0yal40enI/SGt5TixYNCEuSiIjTE9MUixbPm03RWBKKCQ1KSYjIWhla1tFOT9QIz9qUFNsXlU6T25UOGxSYjh+QDNFQ11eanxGaS42XW5KYUlJOTNiTk50PDNeVUZVZF9ifnVSMXhSPiV4RW1oYV9KVVVxM3NWRV1hcmB7eUw5TmAuJU5pJW1iMWU5WElFKWk+MW9bUHBqKm9+'@;
put 'dXF+JEBNdyFJLFVMUHR5LlE+MktSaHRkZ09zfjFEX1R0M1MvdjAjJTkvLyxoWWFNaVhjdVl5IiQ4I2lqbmdtWDcyb0xpbGtRWTIyJk1aXzBJSWlheSxlaCJ6Lm5GXVJGKnROP194bk0uWVgiOVp9OWtPLGhSbC5DME9OT3ViJShDanhzZHVzNl99UW9uezdPPGlwQ3BoM1grd290QjVgPmE3TWxD'@;
put 'IUUmV3w3fnpncC8vXld8PCUmWChKQD5bV2pDJDp4eTUzeCY1PXEwXltQSlFuO0M+UisySClJM0AkOkFdQlFTM3Y8XjJUR1IxST1QSUhAWkAmVGIpcG1hdlglUWU1NUdiY0svIW1GKEVjZFZTR3lfeHdSUEQ3bypzSDxGaDQmaXxeWEUrUDZ3SlA9I3BaazAveVE6djp0bFBeSXNuYz4zUkVucDk3'@;
put 'MXw/Tm99NEhnNVlJd3ZWOjUrSmhJOCthfmN1XTRBWltxYk1NVSl0PXNfaX1yMnxLfGpVP2MudUJFJD0qUUYkUkxsWTM4KExtW11yOC5pP3lxQjduZCkoeGxTdVkmN01OZ2ghTXJ0fGlrQjUkV1VpMWN6ZntdbjhMbTBjXXlOUyx0ZWo+cDhQS1pfemE+I21JYTw9JTZEcHNOSD1vKCtWWnx1TVFJ'@;
put 'd1IpYUlvLmBQaWRFQ0Y2I3JYIS9eKF8qa35eflZGeGJ+Y1o5c0dsdyI+YGFeQmNpYiwqLDx1OX0vPC9CXmIsNkhUNCNGaFBeemVwW2xgSzF+KTJFfklCaVVhezI4ciVyQF44PVs7OGN2NTBUJSR6TiFRVCRsZHZXZXtQJWEuS3dJKyslUmxeRlpedmcwK3g9SXlsd0FuYyV+W2dQeXtDJTE6flc1'@;
put 'e2t6X2krNi5GUGo8blVfLk9TZVF0cn0leWVmfnI9MXB7NW51ND0/eSIvaVldbDB5cyRMbV9aWG0hSHt3cDUjVEwxbkRzeDw/Lmk9P3pgcH1vKmF0RUw/KnExdkRgWFgvK0UpVzc5e0dVWFdTX15yay81Wj9fNSZJfCYvUmVBKHdscnhxMy9VQ1UmOlpbMVJ1NzFOImJoJGR4fFJzTSw+eCVyeWx4'@;
put 'eHE7Jmd6SiJVdmFRM1l8O28/I2dlPE94Ni9AM3RPWntTNyo8XTEvMVZPNGhkLmE9eDFzc1QkPXlfL0UzVSlXbEc9TlNMbEpXN3dgTyt9ZyQyeV1qfXhqZ0VrdThvOmAwNFRnP24pVSohYjBoPiQzKTxYKHZgdHxuVHs8RXJFeUZjQjlwM2w0ejNSaldkN1tsa1deTCNCa1UzamVAR1FUO1ZxRmJ3'@;
put 'O3g5K0JxcVhoW3ZmYi9uWzw0JlJBVF92KCsrL2M4MVkqUExuRkRCbElIa2ZeSSh1SW9tPyR7ISVtJj5mMGhhTUgrNVFNTVB2aGx3QWI6RjpwcyE1dChFIldgQ0c1YmhfUFt+fTU/QiNFPTx0L3czNEc2REA/az1HZm1jS01gNDlYJk5rbT5GcWxCO1QsPXJHYSRYciNQV0lCXSEuZkhtWX4he31Q'@;
put 'UlNeR1RPUmg3X3leLnIlP2AjdlR7MFhvM09nejMxcz5FMF9VOXh4d3IvYSpPUVJMNnpNekskTX5SKVJlen1AOHBVMD9Tc25WYjM2LF1+UTFwfjdFVnFQOFIiRzt2ZzdlfSk7cVA7USomOkxJJlIpYzBPbntYeTtsUlclRmFRdzV2WGhpVUBoLklqZm8/UEs6ZlJkcUA0RW1wcFprVEhPV2E9Ykln'@;
put 'PE08fTo5e0pzLlhuKSYjYFZRYldPOCp0X0UubE9MLEt5ayNyV21dbGIrXk90YzM2TStsbWNiUTA9eCZqQH1bYiFNIWBATyYpaCEkajlrWD9dKHheOnlCRWdqbEYrVV9DfVMoJFA2SVIwT0hqYnBJS3NJRWksYFNtLmhgXlE2NmRMUFZSW0ZXW1k0WTp2a0JNNX5YJCl7O3xkfGZtNXc7dmw4QXU0'@;
put 'fERwOTR2OjxQRjM6VSlAZ0xGKS5xXzkmKldwKH5xUXc1aCpKQEoyblAhIys6Qm1PKWc3V2Z0ZnMsZWY0P3NhaG91ViQ2a3xNeFErWVZpSkJLJltpVn1beHhueTRbOU81flhBJVcxNSZULE1RYi9VNmNfJlB+I3dgQlhbcD5gXjBfVDZEMSx0S1l3YkVba3RDc29gVVR4Q01BSjtGdVVaSTA1ZWQ9'@;
put 'bGQ1fWQkW0Y/OF82JTV+RUB3S0klRkE4Rj1Hc2h0Zi5meWdIfig0cTNRXT4kMmxNNU4xRFl6eEllMSw4ODwjbyVRLk5qYzJhb2pWcGVQY0guejRJRWxCV2VYQG5MNVtNWmJxJUkuYHoxPHgjQEUwI3JhZXlfNm1kfjJId1NycH1KJkZAa1YraGtxTD9aZlNMPSV7NVQxR21nb0poYURHPWg/O1Ij'@;
put 'eipWWjQ3WnRhT2I8Q0sjVkksUXk3MV1EJkcxPVJKU0BuUj19bGhoTTIwIV8jJHdURmdGWmMlJi4kfUdKezhlUkRPJXpYQC5AXnZLMDY2ZG8/ZCxGTn01YEYkZk8zaTV3LmEkPXRgY0okYHxtXjxZSSJYNEA5P3l1WSVqeXx0RnhReHQreXtNO2w3PyhZWVFoaW1eNm86R1hodytOaypPY1NJPyhr'@;
put 'algydVJQIlVXOmNwPzdQMDl2OkI2UGMuS0lHSFpfPVNSeXpTRywmM3RAOWJlImN1b1QqXSlTZDVQMlc4YF1zSippLF00bE5FOVUlWyVxZWNKLmoiPF1pXVJiIVtCcSxOZDxFIkh6PCwmPTBXaztOKipIMTo6fEUoWFRvNCp8W2tiNGlvUTpaS0tKZEl1KHdyOihhdUI8RkxWVUc+e3U6VEt7cjEq'@;
put 'WF45RikrIXhGR09ve1E7TV1DYl0uK1U/SVFNRFJpeiNqbj9oZSsxUyU2LyxVbDZYZDc9fCJbTzpyOSZHIUU0Qj1zIjRBMHdQRWY6JHdGZjxLJlF4SGNRTms6SSpPV2xhcUhyZ1RPRix7KXY/VlZGOkRwOys3NjJZKzdBT2wqSkcyfGdfcTsuYWQhdFlbX2FEd1dCMnReSzhoQHhVb1t3RHQ+OFpz'@;
put 'UihtXkohOnJzPnB3dXZ9ZSFKP2R+JF9KRiVvRnR8JE1RYDQyVjBFaFRIPSZWVSZVK1pWR3hQWVNxcDRLVkBLcnNtcUNkLz1fJCNoKWxZWVlWdUxHcztacEBAZnspSkgqSEJqRWpIRkwmOjV4P31lSTZlezhOakVjdGJ1XUJvNUN1ITJRSSYxNShXXX4/Jm02SiFCIj5TSjVZeV1+VUUqRlt4N31t'@;
put 'Iy8sdU11ZGZkSWhTRkMjbGpDQUJxS2c+M34+MXBTXnRHQ1lDa3JNRFR5cV50ImpnaE5HQzJFZVEwIyZ6RGdFPHd1dDpCTFZeUF0lTjkqU1huKHBVdTVGP0w2M202e3BSTS9ybmZtcE92RE9FLmtIO355MD1dPVZaMS9tVEBTQHR4SGFfXyRPPStwNCFONWl0STYxd3hpJXZbciJBPEs5c3V6InM+'@;
put 'RVJpUSJnWylAck9EPnpiI0A3fS8ybWVqb3g2eDZ2KyYsOHNXTmVuaTRALDteJCM/IUl7VjxEYSpjTmhwN300TEl0UHs/JWdsYEU2Ml18aWlmS3NCaiQiSSFsR1pde25VfCI+dj0sZGApYlV2dG0rQz55Tk9AVWFIOl0lbDkkbyxDNj9nLG5LP0RAP2MuXjx7TCJROU47NCt6XkdMUHJhWElVdSJn'@;
put 'UylvYyp8ZjpWXVtfTy9BVCUzLy5DYXs3OSwpbVNYVU9uJkl7MXpoV3F1aGI6OFVsfFZTTTRpMHpjMTtVbyE4KElUTi5wSVQ5eU10eVdVMClGdzMrO1tXPEVudWRJVld1Vi9yNUdgVXI6PjRLT0U3ZEY0fUUjUHB4JUxdUDoqQElTdSJMZmA4PGVSJlZ4VWpwOVAqSEg1XjgyK0JrZiN5QiQwbjtZ'@;
put 'QTU+czc5I09edzkzNGBSOXB2YigzP0ZdOVg9OGsyKHxKVTAianNYeHFuZElNQXBDNk1jSWpLJjVmLEhIO0ZxN3dPaFdaNzwlPTZfVnVkKzs7aWdbfnYjeV5KRjpzI0g5OmAkQ3VybkZsQ3ExUCtWTVsjTVVDP1UkNVMyWmtNNCF1RSlKNC8sTEdMUi9SUEJNWjl2dUkhREg1c1gyNVcvOyRFbCNH'@;
put 'RTtfczFDfW1VTXhMfHlmaWBKNz5IbVdmLFZWayZ7O2pATWNWPUJvPWBSKWY7K3hZKGtiOWtsNTNdWGQrOjk9TlAjSz95fVhAT1tLYmxHXyx7TF1waFt9Kl1NXVpyS3A+JWlsNFM1LE15cjBgI0NePnI6O1dfYyZWMnc4fm4zdykuP2tAMlgwT1VdLjNqPUMoPk1uTzA5VDFBY3MrQzshQk5HYVBk'@;
put 'bHgqeTZtdUhXQSN9dH58aFQ/I0wlRlYhQHUwKXdgV1Vuck98VDMvOGNtUjF3SUBSbG1NIWs6YiIyX1RzWnd2QDlKUVhhUkJoWDIwKG1BaVUwVlBJd2o6JV9pcFpSKCRzN2BSMlhdKiNjTSR2RjsufWgpMk5zR3p0Qm1lWzRLaWBbdVkzW156aU03MUM5W2NTLFF7UUd0cSElNDl8WDJWInN2Zl0z'@;
put 'WyQ4ZU9+JTxAQVJZeFFzaWpAZjVkMCxRfkdXXUloKEA7VlpRIzEhZlcvIkNaUSxGa1QzLF9JRWZGVCQ/S2RiMWohb3xVa29ucX58UEh1NkNeK3l0NmpDP1lMR3Y/SUd0KyopUS9IcS9gND5eeWpfOjhgSiJjZnVQOkM9V0ZMX0plZ35KU3NYQmshbElpaEBuNVZ2LDtTcldCcTYsdXBdYDxrZ2oo'@;
put 'L2hHd3lGc3N3aVdlQHtNMC5jYSRLJCY9L2E7YV4rdnh0bXB0ai93YiRCaX55LDFROzJgRHEpTDpHVy97VHdpRlUweGsmZEEzem5mX0A5PmcsQCFFWU4rdiZRTVovS2ZAYjUicWZFZm5JL14rQ2ViaXhOOHBUQHNDWi5rbStNUDR3T0N7P0V0SFhNOmMhaSxnJFpRSThrZEhzTisxMD1ofGs6MXlp'@;
put 'L09bNmUhRUh0L1lkTlRTVnMwZDd9UUJJUjlrYUclYFhuYmdEeWdEJVJieHdAbig3PldOUDkxfVR5c1Qwfip+TmxaUTM2citKYHA5dWpkLmllWlNlMkgzaiVKP1J+UFd0Q3ltI2M3JEUldXkvI0BZK3NvR15UVShVW044bmkhIVtlZTNJVSQiMzlNeEJPZVZTNEk7ZXg7IzQifXw1PGxLOkxFZlE4'@;
put 'K3JWNT5DOEBDVmYzLFM+Y2F8IXY3JTV2T3EzIXdjInVZc01YPkkzbHVNYSExP0hpUFk/KH1IbyVfKGE9TE1IZGQvK2ljeyldTiY/RzohQjpWKHgySj81TXNBZiUoS11+MnVHOkc+fCZyKmtQY0toRSs+eCxDPHRnN2xmc1F3OUVldm1YS0JGVjxaXjxnRUYrKnZ7Y1NkIVg4MT9xYUFXKVpbKGlz'@;
put 'W2VnJjQ3YGpuInc1ajhmaGVpciY2M1FKQmpYKDhVJkArW2UmemRlL3I+VnZPX3pqK3xERl9vOy5hcyMqYkdGI3xzS1o1PFttQHtJckFSQz1OQ1dKNnRjKTJyQW1OZHloWiROTUY0KnBOYkBQcURTd09fYjI3IzQsO15wUWZ2eWEuSVNEOm5PbisoW30jekl9Oi5IaC4pcihLLCoqJGN3UXpqTipS'@;
put 'ImE5SEA2RSNTSGs3ZyJSVUZDTXdxSWA8MkRgOXkkSGd7fS5eS3pBQio+emNTK30iNmUhd3g8PWBsX3A3clkpUjZXXSMwSi5Fd3NxfGpSX3YuYEh3Pip0NCouWnVTLFE0LntdIiNjL3A/dUdVNXRndkZfYiNMX0RdYTMjY0RCRnJAPDo4IWZQRURENn1wNyJKIWY8OUI5PVl4fVt+YiUkZSw2IVZb'@;
put 'Syo+TWZUQHR0NER5KnkwaUBdMXdXbDQjai9bLl1mdH4+WU9paCxBfWolKDgpPjZGfXdTNFovI0xTOk9tKC9mI08mXzB4YUF9XXI/JFBJdlY3JUdLdzA9O196YXc7TFh+KDEvODdoUSNuci9CQ155MH1xc3lzKCImbCpYQSssailwTEBOenx2P0I3Uls2QSksOyIrKm9ye1ZATj57I0lkNGdxY2Yi'@;
put 'KFRsbi9PJWVdcEh5fUtYeEhqYz4kWTIlNEhqc3Fdckw+V2kwXlllVmA8anh9fS46WHA0NSl4c2JTN2U7QGFqY3pYczFoRUcie2B5fX0hKj9lSUp0bmJqTi8oXW1NJkF9PVhRQDJRUjlDfnxXWGNJTTxPOyNLdEJDbTdmWWl+SFdPTFBMWncyeEQ1V1NYYyEsdnYseExDNW9pZE45ZFdPblQ5USQ1'@;
put 'WzFdRWo0bzhQekB3XUxTYHdMZytrMDdoVV0mI145UXp+NS9nQDNqWlBDfilRSG4qPi9sMHpCTU1oSTQ4OnE6M19RUy4uPmVMO1ZWOExLbFtXfCxdfnJ7emlMQSFMMDdCVk1kTGheblUxQVhxVEw6NmlESlciLlhhaERFeU5xWk58UXM1Ij5vVSZESzV4cjRAWVdTWFV3OTsmPH5NYzhofXBaO3l0'@;
put 'M1N7XWY/IyErfFlMfCkwZ2wiKSRkTmsmNTE2LCNNRCs5cUR9WFJpM2t4fk82azY7ZzVicHFZQz1AKnQoPlV6PV5XeCVzYTRkSkszPFFmQC8pM09XSTN3Y1EmNkwrQjx5L3Z6U2c6cWBjPDlwXz1DYFFgN1dUVE95eHlyIW1aaHlmPGBZT3x1bW0lXSVmMUVxUGhuTXRITGtZZnclKyFNNCRlfDpa'@;
put 'M3pzPzB3SiplXkIqWm10dTltcjt0dyRFMCRFTmxQYjNFOFc3b2Nfe3pjYzdvRX5VLHE3UzlERmFic19FKWY7KHklYUZ1UGQpZT4lWClnUktlU1RjVTg5ZCp9M2UvO05nVytzKEc6Ji5EXzBxPnsqVWJ6MDglJUNyIyRmKzA+InozP01bIm9OY3ZWL0ZCMTdQcXZTPm1sfHxKWHFWK1BzT1lfKSUw'@;
put 'VjNNVSlLVFt5WUdyQ1FpbWxjKDA3UDFkbyMsIjhLYG9vRkxMRDxMWn13V3xsOTQ1eDxjXWovTSRJe2BIfVR2NmMkbHdgYWtlW2xHaExuX1UoZ1dnJDJLSjtSNX5XNn5jYyIhT1NaaFV0T1F2Z2g2bH1RKzI4JD9BKllPZT0oSVVaUWAqWzF+OEU2UnN3b1gvZDdMfDcjOmZHcHM/U1RkZnZQNlNA'@;
put 'dDRgXzExW3RETUlHVGVSdGclYFEwVlUxfHtGdlRVcnx2eTxOTkFePiNIPXIjVTguXylLbnspbT9AdzYjM2VuSl5nSmB1UFtzYFd5SzFAUklBWT5TXiMmViZ6fWlJPmdgP1pgZVh6SV80czEpZ3RNSjwrZGBiazRZUms+LGF9bW5VfF16W09mYSNRUXxvfi46WXV0aD55cHsiW2YkPkp0UHlsd2NG'@;
put 'K1p8eDEmKX16YWRXKVFjXSlJIm0zKytFS3drYkZmPGNvUSZ4XXNHfWtWT2R2JFRLODZUVSZxam1TSVNOZ0IiJFIyNCtjN1tfWSo5X0YoXV80XXo/SSN4WTcscDBjP0U+eFYyWVNLU3t4TWBCaXJAYil7K287Qn5hejI/a0hkSCJdVikrXz00NXdWclQmU2A+eFdTXzY4cUpgNHI+dkc0MnBCN2F3'@;
put 'bEw2K1BpUXF7eCkqeXFkNixjUm13bVNQbTokPG0vfT53LztOZzhpaVo+bi9ZTyQqekRMVHR5YU1JdlosZW10X2pCUS9uV2dEbTEraGdQN3I2azBYX3FbNTFfMC9jSDEhNl4mUDxuIWhrRC5tQmJ3dC9pfTlNfiFLbVNpLzd8MytEI3E2Qj4qe2Uic3VwQ2EoTV10K3kzbyZCUkw8eUozdmtSe2J1'@;
put 'YmE3YmFIbFtqW3glMW15Wn5xdkBDNHp1I0ZeUWtwcUFxMCVWMHU0QzpCLGd3dFJadDB6fF9hck1paUMzWEBbfTs1azFCVDdHfHpALys9M2tYcnlxZDghMyRRSSk8eT8uaDcsIWN5TFZmNjUuQDdwNXNfZS8jczheMVRWZHojcDIibTVMX1FIdypeYFAwJlRdUjoxZikvYCNwcS9beVMhNT8ud2h0'@;
put 'Y1VBPHNsVFJiVG1pSkhtIzBzcGcuLzdFbE4pLyExfWdwJGUuTUI+bTRXNlozOHw+XylwK0ZfMSFociE3cj81P1V6JCp2cThPJjg+Tmk8Xn5mbXFtTE9vbXsjaylJZl99P3JzRzNpcVtmJlo+ZkR6KnBqYnZVSFtEe0JdPVdXIU9aLllYcCg3QlZ4cU5HQ0A+fmsoXVZ9JGd8KW13aD9fc155Iz87'@;
put 'MXptSH1FVWRgbmhaL3JdTkhYKCw/RDVCVS8lSjdPRlpZNFJobyw+JjRPcj9+WkxnQmgzJlMzTFRMLlJlSUQ/ZSMyJih6IV0+ZEE6dzNmfE1oPHUvfnl3TkZVZ31PO0dJMlFKYC5IcSQzbU9Qdm91XyNKRFEke0x+JiVZfTFZY3t6KW5NYzdqamRqK3gyYT9QU3dRdHVfOipqaCUwenw9dVYlfHxg'@;
put 'SlJBey4pNGFEYFIhdyFSIXgybEtdUHw+JXs3N1JfUCtWQ0FuZGAjSy5LMlohUUBKfF9EPFh9PjZCMy55e0Y4NjxbNnVaQn5ub0BAUz5MNnkjMm5MKUU0SXldVDtUJSRXR2JlSiZkY1g3X29Bfn5Xbjpac1U2dTQ5cXRgUyJJXiEoYTlXYzgrVSwwZGZEXSs+OlhERG5Oaj88V0wwTUlsWi9Vd2NJ'@;
put 'V3QzQ1tffFk6e2t6K2YwSChnUndxRTZ+ay5JckhzZ3NDSndJfExhPmd1e2gyfERbKzpHfnwqZD5BVSNXbz4lPl5TQGNDUzY4cncoOmJ7K1N8flVGSE9JI0ciXzY+RkB2SywjMj1hRG5Ua1UvSGZwTFhzblNnUlJVPkZJT2lbfmhaPy4uM0w8TGsjaV49LnxSdl0paWFXd0IiUUd8SGVdfDhbNV5I'@;
put 'XnpdeU5SMWdKeCQkUDo+bmwmYHcrY0Q+JlArMUBCM3ZmWk4pXlFseGwqUnc1Z11fJHNlMW9kTyNPQ1hqX3ooS1Z2MkBsPHxBY31yV1NmaiMmSltUNWE5VFs8Qng+Tm8rb21UU2ArWkJZMkEja2MzLktPY14kYmU6VXw7fS5MR3d4W0owJTleXSIqekNKbE5mOGhXZCh8NywkZm5ubkJuWT9tdDE2'@;
put 'X1Q6K3VgLy9XckVLeVNBWXQmdClrbHEyJWBENnVlZWZxVGNYVndCUF4rSyx1YVNJfClXU24mIkRQUEF5PWxOL2gzPmRTSTc1V05wQmZOPUIuZm9Kb0ZrN1oyWS9yISROTF4pP1hvU2QpUF1eZDEwdyNjJGx0OkJiakB5biUoc1k4SSN0RzRoSW0lQHljOy9kc2I1JCoqKUxdWiZMRyNUbyIvLDZr'@;
put 'QD4hMXlGelF6Jnl2IWJtQCY6U1hfMCE+K0lKazo8bWplNitKKCoueUAuRlQ3NWEzTix8aH1GRjRzTmQuc013VkJFXzdbMHNHMnAwT151MEdAUjJQUDxuczssIXl2MCNNQXFNPDRxLnlyVTdYQEZhVGV1Ri9sIWtyQnlZK2N0VWIjQ1ImPltrImduOVs/KmkkPkFXdEJedTY4SD91W2woPGZxRDI9'@;
put 'XU5TamJzLF1XZUYuY3xFMG9wYXNZOXpXZT9NYFUiVGRManU5Y0dCRWFObG5qdHVzMFVNPFBLVzdIXjM3Lmg3UV17MGRwIThWeSpmbiVJPWFqcXJPNnohfVMoNkBVU1d7c2xtfjFtNEZ4IzQkVmtmIVBvYVI3d2ckUWw7NHA8JFkldC5tVU5ANCFQemBoMl94RmZTYSU2MjMhbm1zKX4wIl1bSTpP'@;
put 'ZFRUL3JDbyErLHgsNUx0Nz8jRzNBeHd3ZFRrP1hIfkleamR9VD98RXhbMEkyOjN1WFVsQzBmJVFyNDklfHo8NSNxRHt6ajFoRyJlRWxxOmRddD9pRmA2O1ZEInFmU0BmSzN2UXR0NzdtYFtDbmooLlc3KGc6JkdHbTZuIkQ5JFYsRU5QWjIoWVhhOSRXTz1bRDt2IiFzbGl6YVkjSTRPKXtpKlQ7'@;
put 'IlQ0QDYwfTxBTXFgIyxhZV85dWxnKylMPFtoaTB4cTxDKDNWYTF6X35EeHdHLE9ifVc/dFRYJCFIUyFddUVtIiNNRSluWSo7KVMvNDg/X0IyVl1dLHtydGxvLmpgOzM/WU5aT1VGbVMjdGVpIUNVS3lbWWcsPU9ucmhyRiV4VTxiZFFSaDtdd3IldkhfaVdRJTtUKW9ic3RLX2JTd0NPYTpvc3Fw'@;
put 'MDxWMW5ucShlVGA4MFpGRF9+LDRDWGovNHwzOyJzOytBXlY7JFs/Xmt0OEE2bUZyISRwfXo9Kz8pOTZiX2B+WyZXYXFKaH5heVc7fkIoYG5rIXwiL1c7P1tITSxqSX07aTpHSFJvMzpZdDJNRGR1WklMISUxdFYyQ0pNSVJRNXshfXtrNHFqJV5bVz1FIjtvJn18Lmo8bHBsbm8yUmVKYHxxbF81'@;
put 'R1VOcTs2bDhEe1Q5USFrW2ViV2srZ0ByU0gqVSU1MDxwPn01bjltZGhuaX5JLDxZXytWYzY4VlNxRmlHPW9MbC4hOHdPOTt4UEB0JnBTUUVgV0tOYShIRjllVGYrUzJfY0wvTVU7ImB5Z1lFOklHUGNMeUVxNkNwdExmVjYiaSR9dCZLT2t9ZXA1V1JOeSh8bTh+eG1wIT1CfUV7ZDhiR3o7Ijdt'@;
put 'fHpzTjlNNkFQX0g1UUhFKF5ifS9mZCovOS9bVilnRk13RGQxK3pdVExrI3g0eHkzJiNvbyYiZntGUVhCRnNpc249R05nKF05VjlnZlZaQnxkekFzdEJDTHcvN3R+ZEBGXXBFP0ldPD9scjhiZ3d5aitvVy9dNTNEKSxsblJKfDQlfkpCIXIqejxvNixbOGlFSChONiorbGdqQmhIdDlnOWdlKlRG'@;
put 'fD1qUjt1WW4vfHw6anpAdH1ZMWJANDImY1dpWTAvK290MFhmbENsQG0vczlNbi9bd3RweyowdSQ3Qn1BX3hbNG9rUyQmMTIwMiN4bDtVKjIoeUwzLnVTYDZmdUJCLHpPNy96MG88aFE6PnRlSzUxNywqSDJbJWRdIjs4ZDw8cGUhfGgpSTBHcVpjM2NYb2xqJHBsTzM7cTNUKnFjOXZQS04yfHp8'@;
put 'K1k6UnE7OCFRRFNJdHowfCh+a25KfEBJOm5xMjpFNkFwI1lEJlJmRm5IR11WTSpMUCl5dz9YYW46QEdbdGgiZkUoX2MsJXJMVl1Oc2FEK312c1VQOCN0X3xoMyZDJmZLXWM9X3dsRCE2VSwvQldvMCxqfnFCbXciazY0ZEYsfHd7QXJ5flE3K1kscVtWMW5STkErZjxjXXpubFRmUVZFMGQ6YW97'@;
put 'ank+LHFsJSphQ3JDbjQkcVYjYW4pZ3IjO2xNUCx9JW8kaW5BV29Vcn1iQHFeeXN2STJZdV9bRUFbL1QuVkpLWT1aR1lLOFt6elR9IVRWIk5COG9Ab29ZW2RuXnBgfDVtRipbdW5vbyRLI111dU9GN3QoU0ZoO2JqJkVjW1tNQ1t+JmdEJXxFay5XXnlfbTBAOmB6PSM8Zkh8Jiw3O29RYiNuPlgh'@;
put 'U01bIlV9Um4oNkJVa1JxL1t3VWBbT0NTZXQ5Ki91YSRGZm0sanxGYmlOXipfUnB2Sj16YmdhSmxDZ1F1TD9VZ2l8UWc3fUZ9TjZwISJFQW00LjFkaz9zajxGPD9jWUc2ZlVoVUREZSpWVkRVJnJ5fT5XK2t8PnAvIXwsdSx0cTFQOGFMOl04e01qe29SX3RePlBzPGBZdF5mdSxpc3tzQF5bbVVr'@;
put 'TXN8SkpWcSZaPXV9QEc3NEIvTjAjXUZhJj4+cF07bmdTST1uZyE/UUtRLHpQYCZZWyNYZkNyaTkuczNAOE5yfjdpIS92eXQhLGIxT3JiKj1RW00lWCQ1QlFHP3VhRylpQH1eazwzISkrODFweFtDU0xlfmB3Q1F1RX5EXVRbeylWKH0jVGVCTVVvajpSW0MxRCZaRCJPRixFaF86bUVJYVJvWV9e'@;
put 'djl4WFpVcSlyanw6TWcsI3kkOUciPnpbdi48MUFPRVRmdDxgb1ZvZWVkKzBmQjZXN2d8T1dzMTE/M3NPTkBCemlVNDZXOWlxQnB0IjpOaGVaPVIoWEMwZXJ8YVU8LGg5fTx+VW5YYz5sfFcoIVheQEVNVFo4R2dlPWxOQjsiUHR0SGVmNDVlYG9geDs2IlszUj5kYU1HckhMTn1hNlM8cl9lRmxq'@;
put 'WyZvYVE8d2VOJi9zTD9scWFpTzRrJFhWUX4sfWwpYyo4R0MjV1BrVkpwdCFCdE5ANHx8VHpVPyFqdUl0OHFDfFovJC5ZWmNndDo/aGkoal1BZD9XL1NbaUUwUyQzT0UxcjdpN0BwOl9HcTp1K1YjWlRONDYoI1JTfjNlL2F4a2pye2JIVFh4TjE4fWFZam5sc2c1UXwmMUV8JSFQNVg6fEg/cypF'@;
put 'WHpXRyhLekR2Y21MaT92ViUwQGAwRGgxOlIuS2w0MWRQNSEodTthMldKQSladFc4I3ZUazlGU2dKTWtRQjdMZyFbVHQ2SSNOPEo1JnFzLH1zO19LSEJIcCtreURHV0J2fCphdUQmel8zL2laUyU9dEtaRkM4a0g9eEJKKXl1VW5JLigkX0tzVzAiQGltTkp8OGFULjN9PWRIJkcxZEN2JWx8d00+'@;
put 'I2gzTWxwcHNgSz9BUEs3ZHZjaDd5TiVjSzFlfnU1MShuPE9BV3Nsa241ZHhWVEUuMDNJWltIIl8wOjJiLzIySlQpQVRQSFBpdCFoNFg+PCElTUhFKD9rQGtxaFdGKSRMWDVYLighQn47Zkx+ZUtteUYsJkV6bzEkZ0BgQjMudCRPNyJpTk5odlQ7MWZZbTIsIkBZUi5aTD1paG5KcUBKNllAWXZE'@;
put 'PyI9fixHZWM8Tkt6RT5xN3YsW2gjUktffkxjRnZ4Wj1ZR11vYChYQmAqZm0zKzNaKVlYeU0kOD8/WGBGWHR5OnlAViZob1JvTnokekh4OCM9UVhIIiZbK14xPlBsOSV9Y0ZweFdCWzUlXXJbJlJ2SExdekI9IzkiOGdSbCtiOk91KWx4S1RddW88MFhdS3FkIl1hIzFXUGJWKz4/QGF9JlEzIVMx'@;
put 'UjVFOGh+Y09VSUppUmwqXiZWOVt3Nl13cUIrK3VuRlV4RFtLcGtLNEg+JTR9REE6K08lKDNENVByamhzVGVET3FAViN8bWdjWWtjVXxCaXhmYmFLKy9pYlo4WXFHaFpRXT9ENnwuM21CW0xgRTphaV1iOkU6di9APWBsSTAhPVQmOX5COE9aVkw+Nlcjdy92PlFJTjNfZTtPJTg6UmJuJDlXJXk6'@;
put 'YHg1KEMyYGBPI1NbQkVgeHkmIU1vP0tWNXlbV11vPWswJCs/OXQkeHBKNDRlZmpFRjo9STIkUDBsP3Fxd2ZlRDkqMnlYaz0vKFFkPVE/cnxfRiwkZ3w9fTNQY31yLlRFPW55NiUoVXNeUTcsMGFSTm53RCZKSThafGtXWzl+XlJ3M34/Yj9lJFFDSl9Lci4rZF1kdXV8OUgjdDorSXVId141Ll11'@;
put 'RGZBWT88K3IlQlpQe15APWUzUF9tZ19kbG1eKWtla1lSUmZJQV9uRzdNSjV6K089NjpyW0hMakVzXj59OmRbViMvV2J9NHo0SyY0QWlYMT1Ia1Q9al5DVCwyPGokaz5DMk0wWVc9I1UrY1MmW3w3WWh7QVdYVXlCQlVbZSoxeWtFMmhMT0UzTnY1O0JdIkFmbjQpOnw9KkBYTlQuTUByWzpYIkJD'@;
put 'c0o6YU54cEp6c35lNikuWzY1JiQ5biklUHVZOWozSjJGbVhDY050TUVBe1F8RDhaKnhSPHlickVyITdWR0c5JGJWUzAwKmhhcEgyYjR8SEltc35qcEgiK3BPNXoxSXJMX09zclhdMCVMbTVHO2cvUnZ7VTNueTpjbzN9QH5AWyVnOlU8Jm9mcVEyV2hhR1orZX03U1lzYH59RiZhIz1CSSNMVCFj'@;
put 'VFhfPmovPnJxTClKRFBTfUlLV1k6fX1hRS5Odmo3KGYlOVpZYVpsRXE9biNrISkjWnFMNE1lQ057a0NjVSYsRHJqbkp6dUI7Y2YkLGhxZjxXP0MwS3pfRGtsfm8/bjpDPCFfI1BqQ0dlKlNMcU59cyFEKEU8OlliNWFvYTojeTYmbXs5U3c7MUVoVCk9dU1Ed2dufDQlSjQvOylBdXUhSkB7QzN5'@;
put 'OFleZ0QxfHRUeEdUZVB0ZHg/NUNVOUh6YikjW1JoPXBGflsxZV4yTjZ6OnM8N0NjYjtiKGhGZnxedkB8bWs/RlpKVjZFe0BvX3RuNiZ3W3g8ZysrWWg9aE1TOEtvR243ciUzXnslPEd4bD0hYn1UbDJJdUBRX11lMkguTWtwanMoT3oiTlJOLkljSzBZPkV1QipDMD14d3BvP1Y7ZCtoIz80WXVe'@;
put 'Oz41LHBJN0hAeU4qN3c6YEZEe29aMWcoZD1xKXp8ZkJnM0JBUG15TnYicjgsPn5mbD5EcThOai97LF9HPz8uMFtGWmlaTnl3azI2P05qWVQ3fip3dDxDcHBvbjV4X0A4Zk5jPXY3KjVZRU5DU3EvJEo1KU5ZLChoRzkxVyJ4OnFWIV8hYzZYOE9HMGdkJEdWNENZVWhZd2ppYikwW1dkaClZRUgk'@;
put 'QyglWF5nW1koMUJIZ0ZmS1dsSWwqYXxOIXV3YCRIM3pufVMuY3VnIjlvTVFwOnFtbVRyRml1ayZ2UyUmY15CTTgjbSZxb1ZHUFFzdCRScihrR3c/NWojIzJsY3F5SHRSN316fV85NlJNfjhCaSs2WTshflFnMFV7LnpGQDlQdl9IRTsmTGhFMTN2XVN4NHllbiMmeWFeM0BUP3BUXUhrNlJgW2sj'@;
put 'OHxwSmVYY1IqeTZxN0dKQnVaQiR+R21bbFl8YHdEMmY+MGQ4PXJQcEJjcFk2V3IxWHV7WChvNlQ9YkRWbVNFVGVlYTt6InhmZFdNfm46JnUjNDpgeW5jdzxNY3ElRkNTKkQzeyQkb2NqIyMkRkBPQyE1ODdGQmNwNilmLF4oQDR7b182MiVTKGJRe3pNPU8zbzU8X2QuRTs2Xys7aUxkR2dQVypG'@;
put 'e11QbEFlbElMKHg2M08lNVIsQHJ9YnR5UE88UGc6IkkjcyZEYTxXVjg+bFMxK2s8WTc/Lz1zJThyIntvVHFgeEB9c3tpdDlKY2l6TzNTKWNJYGtaXj5BWjRLJGlnbCpnLGooJF8kNFo8U1s/X1I2ZG5ESFQ7QypaaEpsKHNTLiNXWTM5cUN2Pz1XKCxhKjs0LnJodk8lVXg1UFFEQHd1NW09UD9g'@;
put 'QVoqK0MzUWljRj5UdFlIdHhFRTpYV05+I19dXntoUVNAVSUsXj8veGVkbkUvfFJLe21eeHJmaSIrWTUvV157UikhOGMsJFtaOXI3LmlkQTFxXXxublt2NilHc3IrNjFKSjlyLiFzfSpiR2dwTnhCd3tRMTtgPSUmIzE3IkU1Mm53TTNMXixZSX1bayY7Tml9b1F3JiFwRUk/fFhIKmdfdzh0Tzoy'@;
put 'czQjJDw6VHswUlZ6MDFdKUlvSHFfNl9+bmBjS29vLztFUFZMKmBdbXNQLHdWMk9pND1tYX5aRSNAezN3ZFgxOT4sL1hUZHlmZzhbTHFWYGs3JUtMeCpONG5eamgjLFFoOmFOZEshQFErQ047Li5CInhpOiJ6QztpMXF8YUpqdDE6UGJqaiNYIVhjJUdrUzY+QDo0ZklObiloV3UlXW8mbVtqZy8o'@;
put 'PyJsX3cwcmw+Y2pXdDkseGExQD9ENl9ZV3ZRX19iOnMyRittS3h2ZDpiez5CJm42X2N0cXpYKDZlWjFWMSt+N2BmeG96fnBYeEJ7TEplejpJN3deWU11YiNMaD1SZDViK1AqZ1UqMDM9NDg7O04mNnp1LjkuL2BGLndJeU84WmlPcFckLCwqe25aYyRDMkVdTyxFVUApTWxaNClwPk8/cG5gVjlU'@;
put 'ZER8OG9CUWlRW3BwbjQyMlFlWlM7PnFeeG9hMmQ7cGhiL2EoT055ck91W0olZiUzLHYyRSRkQkVZcSk4dUkvYT9daW1hb0pmInhacGBIWHxtcDx3Wlp6XkpUTl5HfjY2Z2dRZFJ1LDNuSjM0Mno1bzZiSCpLRHldYk9Zaz5FIjJYMmIxXkBvPW9ASy5eenxfR0FGVzN4ZWFWR0RnXVtkQDZ7RXhi'@;
put 'WWp+VixGSUZKfENrNWB5TUl5fm86TmM5cSxBZSUpdElWMlliXUs7c2RSQyQhNCQzKlI0Mk58YUVYWSlaN3lXTTVIRiJWP2NMMl1yTS48IU03SXk5UVRFY0BpfGdbamM8bndAO0lPJD09VV1deUpIKnJ1bVJ4PHsvRGFbJE12YUp5VV5NUXF4Xmd1Jj8lQSl6NWdTXngiSFdjRHpmXSgrdG0+cFBS'@;
put 'eSNpSzcyUzRmOlI0a3V8WXNmWnNLYEQhaXptX0VtYXdLJEdoUiM3RDspMCJZZGdwXnAqQlY9Ojh+cGo9ZzFiUEEwUl44TUNhYC4qSiQkN3dkUjdYOnA6T2A0QFNbOVdqKH1yUG9hI0BQKkprZyYpW1hOaX08SXF1UkVgM3NxU0BZPEtyQlohPDkhXzdPQVlHcV1Oak8lP1hwKkVnX3koeW55b3t3'@;
put 'QVg6RVt9YjdyPWVlOjQ4bi8hPiRgJm9GRkQoXTc0N0B6OSN4KVdNIzt3KT42d2p7RTRaN2VPbGh1Iiguc2VWQiJDY3pOZWIqZDFJfGdUR0BELnxeeXxnLkpWS1k5MyR9bEZ5T2BOcmNgZk5kLGhROmRhUVM4Q29mQV8wXTNfWjZ7eW5GKixAWmJrPV1pVzZtdkl5RDtZXXBpYUFvUl82WXMoVSRq'@;
put 'SWJFQFYhJGBoTnM9PmJVNXEsI1BJflJfYmNrfk5oU29fSChCd2lCWDYxelNjdVRkZDMzPGF8YjdrN3l3XUk2V3Vvdls0OkI1bjsxZCIvX3lkJlk2TiU+Rk1LNDJgaytFVlFnJn5AT3pMUnYxbSQ8Oy4hKzFiVG1YdyhTKW5PR3dOPFNMPmwlIyEjZzg/SCZnX25VVTlSXy9PRUQ5Y0t7biUxSDNr'@;
put 'RChZO0xxJWkhQ3pLITB9S35XXVhUTk0xRkBdflk8RTU7V0osSioqUm5ZNUE2eltefmdWOkYuTnt8dn01UHl6WF8jTEVWZytScT5FfnpBcWkoeXl2NTF5RDx1c1lmQH5pdWEoIWFJeD5FRXFseGtjfGIyL084O21nb3A+PmwwbjV6N1paeUEqbjE1ViFPezpoJjh1cnxQKUdRQjw8WVJdUmJaVFsk'@;
put 'KW5jNFk1TlNyT3dTaWpJMlAyfUBEeUEkayhJPWBQR2ZebGBldTkoP2hEQFI4ODM4QWVIc0s3dmd5UXBjM0B9fDNpLzE9KW1UZU9ZY0B9e0J8Lz9rKjFLKlUvXzBlfiRaQW10d2VhbW1nYTFjUSVRTWg/NG1UIX0xaSElRX40PndkeSI2bWMmRkdaZ1pRRyZhUHBBLGwjLHJOKUpVby4uWDtwbDRd'@;
put 'ZyJaOiRNV0VPaFZrZnBmKkR9bSYlczAjSHsuYH0xZl9zWGNBXlMhYl9ZKyROS1N+UUtzaSFbcEY3K1dFcUM/KyMzK0doT2BEI3RvM1BESkBNQlB0cFpiYlpoKWE8ZVc9cD4zODxLKCs2NFB+WlA9MnRNVjBwYyw6N3MkUTdEZHosQWJbITpvVTQxe3khTmF2VVVRcjQ+VERwQmc3bEQ/fXxdaGEw'@;
put 'UWluWG1tfltkP19FMmJXV2FfcSE6bCI2PiJPWWs1Vz8ie1Q9MHBdb21OSlp4X0MoYkdJOFEiWmZqTVR3UGRbfkFVUFdWVTovc2BTSXtAUk8sODU4W3pXfiM7Uzw2MSNsK1Q4KXdaRT48V0ltOShEJVA2N2w1eDZQfVhJaDZDQWZiQDNoQDlrTCFqdCV3JDVUIm5ySm9uM2ReMGE7RkNrZj0obFZW'@;
put 'L0pESTpnPC5mO3ozTnB+UEwiLiZrNF4wTHNSdSo3d0AqQi56fn51S04jKGMmOmRZbGBifFdSKlEqR1Nhcz95SCpDPitWXkAkY2l6YkI+WGNKRm9NQCgzbGBdXUpIIlQ9diF8cSlxUWl4ZEIzVDI7eCpbNjdmPURDZ0d8T19IZlNbKz50XjZ1dVAmbHBZN05QSzpkaX5PdHQiVVFDW3dyeElSM3hn'@;
put 'I0BgQyE4Z3Q4ZSQufH0yPjNaOXMkJEBrYyMzODxrRXBadmhmSjpnSCM2PH5pWXVUbzM8bz5ybGF5bytAeC9gKyxSZ1hHaWNINWs0U1IxVnZudkdCbGNXYjl5JWJ4Pzo0TXY9N247XlEyJXx+ZXlIXVFRNGF7Il4jZkNkdDk7ey9vKUBbOUZEPSF3Ozg8K2s5e2hCYXtFS0Rne08kQ0YvU3FKY2tD'@;
put 'OUFlYXA3MSZreVg2PV9eOiJGTX1hJDU6L0Zrd0RNLHNUflQzUl9FPiZ4OG9MXlh3ZU1rZUcmLm9ZS290Q3suOCwzJUt5UnluL0d8NWssN0FXezNsSTg0bkBGcj9IeTdvaDxJezRGe2d2R1s4LlZSWHxsNyRxWT5PLjJVP29tNC56QTpgNiFGRTs/XnsmZGlFd1R+WlI+ayE+VXdEZ1NNZjBgYzBW'@;
put 'MVdycT1QJCMiJVQ5e0NOOTJfUWsuRzVKR2dPS2F3fDBOOD1KQWRna1l3NzpxfkR4c1FMUlJMRTdlODlqcSYyXXUhIUtLJixpZThhO3goWGclOGQmTDhiV28rKXhURjJaUEI0Tkk6ezomTWIkW1Z8InNvOU9pKCprYkpGfi55SURtOXVpcT52azwiKkcmMVE/flslX3B4VEc0QW9bbWE1TG5NRyFM'@;
put 'dXk/enlEK2QyPG9jXyh7MEEidFJzMFpzUixmQWpsVU8oa0JhaXttLk1CV2lTL09GWmtuXUphcTd+JWx4JE06KnxMVjZPOUA6e04rQlJCMjdoTTcxajFHNk9fYzdMKkx+RTB1RUlNPFhPTmg+enleeSFxJGEwK2tOQ3t0ZWxSZ3dCV2xjfiJKck5Zd28sbnErKlVCKnYvcnlXVlRHYXl1Yz5KIUMi'@;
put 'Rio2QDxmVjtzM0c3b3Y4fElYfnUoVlprY1MqclNuMikyQyQkeVNrOzEoZ0E7RmduNjhmWl90UmdAcFdheCh6RjV6LzRUV3Q7Ry98Nz9qL2lqPyRpOyNDeCF9d0kkb1lufW5AbD91MiR6KiozeV5HW1oxfS42WjNmR19iTz0kWlopRWd2W25GaGZPXTZHMGdKdFYlX3VARF5icX5GP0pAQEB+c3xC'@;
put 'dkheKCtmeitkU3d2bXhlMHdJMilRdmNJPC8zd34rNlBTUyU5Ync2PTJXdENtZ1JTNiwiJV9ibFVqZWZCOyg7K09zQEBJR1Zkc1IzLkoqc0oxQClPfSFwJTlHQFE9Wywxci8mOmdjeWZkX0taSmkvVllkeGJ+fEB2NngkL117YSxrMVdEWkBrOHQvI2hNRTU9SzxqeFYoZjAzYUIrdFFJZ1taQHx6'@;
put 'LDxDPyo3cl9FTjRLRTdOJUp8Qkt0eHA6Wnt8NS9nTTN2IzN7M3lOL0Q4RFBsOlc7V14mOkRAUEw1UkBRIkY3TVhxVVIiNjtkdTclQzp+UFZkWDVHTzU3UmhPO1J4eWBRfGZCL1dmc3hILHljUj4yLkshIlR5YTVOQ3ZbPitve3kxPjBpdHA5bl5yMntoTjhQOSZqMzRvMzNWXTBfQF86Z2MzQ21k'@;
put 'KWFNOz1HKn5QKF13UjR+ZWNMMSEmN1dbZDdtJWplVTIjRzZiYTZCS3skbnAkP11xIVh8fnchUzYpbyZQfnsvTDo1XyoxNlpiajE+dElVVGBaRk84bmJfIj1balpIX2J4YiU9OC5aQHZiRl9lTGJRXmsibj5bIStbM3wpQzl7bmQkODxLW2wqIU1FO2RlKj5McUEzdikzaEJkKFRzWG56PEM9I3Ii'@;
put 'I08pMVI2KG5LIWZRViZMQiNHRjJIX3kqK0A5a2Z6I3h+OVFXUXhkY1JCaUJeQjImWChFfjtocVFaTElgPk0lYyNxO1opV2BDKnNYTGluL3RdNCQrNjRua04kRDtnfGVoTl8+VU9CblpFZmRsOVtjTV8pfXVoSFhGR2JbSGw2I0FMYCJCfTsmJTI1Nzg4ZDVHNWU1Lllqe3g+SmMqYkQ5JXhHb0Yq'@;
put 'MD1eV3hkP3d6emAvVWcpTzIuaHpFOD8+ck5tKnZKemplaiVlRX0+KlRlfDBDXSl3O0FCTyM2KkdNZCI4LmNwSCMpfmV2VCgjTHQ7VHFvdCJzYjEoVys9N0RlY01UP207MmR1RWFQTnpkPlhQe19QPTdOUnZhKCtVLG5xcXo8WDVdbEI4I3g4SE5UQ20zQCJBWkFTbm11eD19e0cufl5Waj1AbTUz'@;
put 'fUZOVXxOYFNya1clRVBuRFduRl8sYC5RbCY1TShEQzlObXAlLCx0MWlJTmFiaTMuOX1aIndHXV9nP1tJIjg8a2goSlFyL0x5Lm5ASn1uMWkrakUjOHYxRHkjX2xUN2ZsI2kkUywvaXZ4YnIvSVY/M1R4ZF0xeElYKzVTeGpLVk5GVGlmZTRvLFtfeCpBKERLWVpHQzxxNmw7NF4kMVNZNFdjX1hk'@;
put 'ZCgsM2NbfHMwe1hKJCU8KGMpT3J1WG9iYlZ6YUhPbnhgZXs1ZXxlTVpBU0goXUBIZD81VFUkZ3p8WCx7Kn0ueFQ0OEh4cCtRXllGX3UhcDV6VHM3MjthWX1oPkxVJDRad25pKDphXTZhLFg9V1lHOFVjLlBHa1FsVVJ1YH1XOm9efmRoPTZ3RTwzKnNubU0qZzVYPiY5Jkh2JUkpVSVeKD4xXlZ5'@;
put 'YyYuSnJ1ImV1XkMxUyZrIltWTGUkQS9ZUlV6WWVaUFc5bThWWzgiTGdDN1oxPD91WEd1fWMySzhjMF4uO15Lbml+M281cWFtYFNJYUw8YlNmaC47KCJ1N2NmbDtiKllZdGp0UGFEJFhJP1taKFojPFYlIz8wSFYqWHwsLFU6c11ZInRzZnVfYXR5LCxVN3BHcjBucyUwU3JWZGd6WFpwN04ycG9A'@;
put 'amQlamkqfWVSbnxkfTgmOExINCU1ZG9OfTNGSilJNWVTUE92bVpIR2tCVnZtdDlHaUl4QEJ3UCh9KXNWIVhtM2kxfCh7PGEqbCs/dWhlfjlxKkVpVShKZXxZL01XP10/Qy88RWNJcEtuZDBTd3VTcVRmUDEkSkRHZSg8QFIrUUByb0AmU3ImTG5QXXxVcTkpVTk2SmcrMzpodHw6Nk5YeiU9bUtq'@;
put 'XnpVSl42cyUkdnNsX1gyfkVOTU99UE12WVhlKnR7czAoNnhhMD9VZUtyZll5JS4/QyUrck16KDlwRkp1RStzZU9scUZ5TyMzOUk4THtGRUwhQ3glenAzdnJdX3hwLD8xcUcyeCRFZUk4TlV6WENEPnZDZlcvcCkwXjFjSktQa1llPW8lOGIuSktqSVN1IykqPWMoZTdnUGJxMCs6ajREMHlwRDh8'@;
put 'ZkNkPUxXbyE/KGY/fS5eKkJ6QG0+PE1AejpWeiNYTHxieGFGaEV1PUsqYysheXl0cEQ9JGU3cnZmO0Nde2g1QDJ2M1htIkRDU3krPkB8NjQ5fnE2M0FgQ1tbeGxiMlFsKEY+I1ExNU00QjZ2fWJAJT5NLzQ3fGV0YFppIig2c1pFfGp0ViE1QntxTzM+KUcsZlIqSz5XKl1SRkF9dH59WGF3W2E9'@;
put 'Lk1YRUwre14xakU5Om10RyRvNkhmNSNdYVFZcShrYilCPSFCQnUsWk1dSnc3OCJpVm5gdjJ2PF1dd2xTbTs/Qj9BaG1dTSllTmt8UVlebj5VbWI4UEFBVVI8dGl+Oy8sWyxQVD97SCY8a2RAL1srSFYsYTdGYnxdJldqJnNjeTw7KUMxX0cjQFg8VHdSI2ZGdiFCNzU7YnJ7QkpRXkZLRk5AfTJN'@;
put 'a1NMaHU7Yk90SD9uRGleaWk8W112d2tHXzsmRmFyWikvXm1VcGEwYmtAc113P2liZU91RV1geT1vcDdZWDdFek17XzlKKCl7NF1wbyZgISljOGdkejglNSw9Mzo0byVrRkVndndhOzdTUjt5UkAhNXJjTmNlfT8mNklXRXI0Uld5TFFeS0w0SnN3ZTp1R1VqaS4xfCpiYUM7SShgUGF3KGpfcm8+'@;
put 'a0ZNNFVCQT9eTigzNFFJXThdKGYyOChNSnJNS2dWWl4oNmdOO14zMkVuNmBSRTMpMHUuL1pbaUU1QjR8fTQ1NXxlV3lvJHJDcTA5IyZoZj06TVFTRGlXcy8xWylmSil0XiZ+WGxLe0phPXQyRXxdb1pkdVkpKkU8NX00RTY2K0ZlNGgrUG9Ob0pHcTUqJnU0Nzs/LCl9b3k+fGQwaWllPXEvdjN9'@;
put 'LFYlKGZjU1lROmozdyRedEklfnpUWFhONHsufWpoKzVYY2VoPWR1JDZMOH1UPXRTIVVQaWNfaC5hfXNFNDQ2JVtvaWtUYlB7YjUqJFBHWzRRaXdqSC9BeUV4SyNrT1clNVNAZEVRUVkoRHcmWk1XRiQ6NiQ0NTw8SnRQdW0mNzN8QzdoOmk1WmlVOytNO1AzQjcoOHpAK1NebC5EfSVXPltKM3lP'@;
put 'TkUpcV4uZWZqSCFFMTp2SUBReldjKmAqYlhISXRpem16YWl7Tl40IjxSdCkqWX0ucGdSSis/ciVLKV4zSjpXKFBGUVlJaT5bcC87YDdMNHtqYXBfdE5tTktCdk1Ia3hybiJ8eSoseHBBfjppa2BYOHJdfD56UDAhVERqUSV+QllLMyJpX2dre2ZufjokMUEyfCZlfn5XZEhhP2c1NU9HRSxNdW13'@;
put 'eygwTnVZO1VUMDpsJkI7N1AmTW1Wb3V4TFFzQXUrNntkTz9gemBEP2s6a2VhfCtufSxhTHFtYyZfLHFKdmV4b2NLbHciQ10mS2Bsdj8yZDEyUmBUbTZvTnYvUHxvUHA7N081X2pIOzk+YXA6NHxie2F9c3pYUShZVUJ+Mn1sYkBdYCx1PExtJFI/KlJlRj94blFhME43LmlAelgrMCwrRWpbUzRR'@;
put 'O1V4VHVVPU1QLmJHSCRbb3tuMlhCOUBUQX1salkuI2oxfXJWe1h3L2l0Xk55Il9ScVI4K0Yqfl1bU3dCZG0qTDpqJGl9M0owXmNnIWhOU25aUDhPPWVCPCM4dzRZKXovK2NkNXk6Tzc9KGNVWWFGYFNnSSVpdSwqM1VlPTgvPE9pKnVIMlN5OUxVLikudVhLeztwbXZHPnV7UVp0KDFZPV1aVmg6'@;
put 'dyxIK15WWV9aV2N7RWlvNERLTzkpYmNEZF9aNlFVLlNIbTlXSyhFVz9VQyJELls6Uz5CS0AuYzB2UzpDSm57NXFCMWVScz86QyU5RlRpIjtLfCQufVgvSml0dXNfKlU+SjpOJUA4Nkl3JnYuNllLVXZbfXVPQUdVOE4xM2xtWncudFNRWXBbYjFQdDM5YlZtKlpxOzpoaGElOX1PMkAsaHYqQjw7'@;
put 'JHY7T1BEOil6UEl+UihEY31qUkI9PSQyWE0xaVckU0Mlfi53YnB5aHBHJl5jcnZ+emQ5N3drOiFRRjhERHFFPT5DTDMwbzZDSFQxXnleQUxfPEd5VkZwbG53S2QySn1MOnl2RHhjL2d+Y3pTKy9PMz51VTpqQS48SikobHw3dFI9ZiYucCN3OFQkSmJgb0BFPTxaQTN7dHdbQ198LGBlNShDK15l'@;
put 'Y3FpQXxZQm8vfTpjTzclNUVtYTtGRUs0QyQ+V31ZJFAsXy9JVlZPZCxUXzBPaUIwZlhCd2pVdllNODs5NmElJE5MVXg8WXJeLno5Uyxpc00hMzx9ej9hVTwqcGpPLmgkVUBaYUdSS2JPfjNVKFspJVRWTEMqSHV1LGFSe3EsNEVALDF7aH57Ll9sJUVZZ01kej1sYF9oZ2AuTHg/KU9dX3dCV3R8'@;
put 'ZChvMVZFYXZNcHwwRGNacHFZfjNiRnxzWkJeaWpiMVt1Il1wTytmYihlK3tpaTpDL2dQK3YsN35DRnNjV3BJN2wrWlZwWFV2YTNgPk5gIWwhOCFOPjd9akJxKH5+bSNRZStWPjEzKjNpd3U2TTtxU3hacEldRHw+Vzc3S0h4NWAjK04zZ15FQmZWOzZVXVIlMitvTExdW1ZILzJrbEdCSSMkIyRY'@;
put 'dUdPWzQiNTp4aTA/bz5PMTosK2JYSD4ybSE5PHhpYSZ8QVFUTlBgMmYlYnV7X3lfb3EjZjRPa2pXbWFULHFZOGdCSWkiPHA/eTpoIWxxQ3xxO1dOL1I+cjZVRj1Ae0o/diwwIVp9eGBFbldaa18iOVQkKGFoXnBkWmRTPUB0Q2pufWxfJXphR2s1VGIxTWFnNylZQ0R0c2NGTk11cDZxN2JpbUJt'@;
put 'dTled31BKGpWR2A2RCU+UTZMLnQ8REkpMCxvIUVTU2JeXzF2fXl0cUs+XUxxeW9yPHRCbyk4JnA7KlQ1eXtqbklLdV1mRzAmNHd9bnEsU05xJCVGY0NTd1k/I35DVWh3Qm5ENiU/TDtqSjF9bCgiZ10uPzViS1BndjRnYkBwb0NvQiR1PGdmO3U1PV5UNVByWSEiaVUkJWE7cytyczRbQjFCRnJL'@;
put 'WipHUiNRVyt5YjsoKU8rd11eRE14TGYjXm5lVThTcnJhOFMmVEt1Um9FSFgxeChBLCk1fVhGZSNUI2x0NGd9XW5qJkBgeStrdmJGfSZyRzhZLExMRyZ9IlRkWDArQ2tgOTc6bz5VRylrbGFyJmJqXnphbEVFdT51Myo6P1pWPFdFK2EvL1l6Kk9efTFtWzJSXzh5elh0TFJ4ZXVdOkhTazk8bDc9'@;
put 'TWJKMitfVCUucHcwbEc9RWk0cEE0Kz9KMU9ebjxuZjBONHMqUSp1NFNGZTAxbjViQSlneTA6UFNbSUp5e1kmbXssNlA7ekpXPyxxbndtVCsmfWBIQVVHTFVWVW9KQ1smXWh5KSJ2dzcrOHsxVUplMkpXOTV5UiI5e11XMSM7Wn06KmlVUXIiTiJyai5SR2Q2ZnhEIS9gTFNpdExKekUqd3BqXStR'@;
put 'MGR8WzZDS3RHSnUsckN1VjtsJlc/aDU+OlY5c3dUWDIqTHI3XiE1WGNBMUt0Kl8yQ2YxTXskSWI2MT5IPUAmbCkuJVVtaDY+PnR8KkZwdkc+cS98I3JFXilOcWdLSDhzREQmP1Q2Mz05UVo6TV17ImU5UjVdbnxDXV9zbk9jPiVsLnUpSEpiQzQkaU1IVEJjWlB8VVgmWThSUHI0YV5HND5vSnl5'@;
put 'L3A3XmVQY2l7KmlvQUp9ZUtXUzNwX3ZyQ1pTOUJdMHFmXSQucTtkeWY7XSIuTS5YYzhlLEtzbEcwKjVsaC9IfmBiI1FGUj0rYF4+Sk97QDkjYi50SzBvOFk5U0xCTC4qVHVwQSgoPmJmcTx6dSNGMHVpfi9HND55U2dLVihIKn5BKjssWCh0U3sre15WMjxfUSYyS3tTXkxgWHx0VUpZbn08a3hL'@;
put 'OkQ7VCtacj56REBeWy5ZO1k2JnZyRUQvQnA9eH1NPF5eQT59QX13RUkmKnslR2U3c3BqNis8bz5OPGo9UXNqazwjNXthPjlwOXJJZSpBVGprUjQ2UEhKKVkwUSIsPUxpQ0lgYmQ0LF8zbCo8cUZJcDBhdXU/TGYoSzE9bmEiRUlZa09nZWFpQWFUbUN1Q0dMQypDd00lMipbWDhbIWd8S0ZRdWF1'@;
put 'Ul1aSEZpazVCR0Y6IUBAVWlQalpEb3QqMXh0NEBWVHsrZ34zMSswMzVAY2pXa3hjQWJGVF80cCpVbUhfWFMyPzV1OWdZdTp7Nyg3TyptRUhlWHprcT9lZk4saDt0PUhhZDtHa1JtbzI+aDBpZzkzSGM6eyRgbiModzNDLntUaDshaUdwQFcjbnwyP08hVk0pbHo0KVl0U0Yva1F7Y2whTyZZOGBC'@;
put 'dnxtOSRoM1JFNTkwTWFsOXx+V2pzXVB5MzwuYzRnRmltSXNDfl5DPzJhPVYsbjBTZiUmWmw4aEA/VUxZUF12SWpgKUo7ajA0VXxbQmVZXkshI008bzpIPWg4JEk5LiwjXiMvPGIqVDM5TF42c2tMPmBIbyJRMFU5PlkzQUM9e1g1YEchVV02fjh2RklgWVM7Yk8pazN9cE9TckV9JlFeamdFR05Z'@;
put 'cjhaUjRWekYzUE1sKDoscTthcllyWDl3Ois3W1M0MHM0UHNAPilodkN1TXghQlY7ang0e3VydyVrKlZ6RVNDWURGbFFVJlBiRis6KiFxMiQxfDldc1clLD9Tdi5+XytfOyxHWn4wZ2JJME1ZRnUxQTpWL1pxK3MsIztXX0RFaz5xeH1HIjJUKTtjMGR7fTlUfDNpaUJ5e2tLVHp0WCQmez9fInol'@;
put 'dFRZK0R7byYjYmU4VVhSMGh+WlVaNlYpdXx5c2MzS2wwcXQ/K0lSZzhoYG5bKi8/O1UwfFhqOH10Rm17OSIkfDZNXiRZWDUkKyg1NythZlY5QWNaYy9xIWFJOVlASjUvJV1WVmx7PCFlVXdVZjwvOGxgRi8wJi96JEk4PiN3bnd+K1sjVHA2IldfST5mT2dFR3RSMTokNFtCSWJhOm17W3Z3KVMo'@;
put 'fWguNUM9dGU0WGRiWl0+TE5bWC5ebFtZJVZLKjM6dkMhNXtZNilJNyZ2RTVzbSpAKH5IODRCWEkhKlF+X21ZRH47SSpYZGc0ZGJGIis8YFovSTQlLyxnbnJ9SGgqb31TPGM9Rn0+OUFiTnhudWtPSHd1Ly9WTkVMXiJuaT10MENheU5kWSV5KHcjKG41b19jdENhYjkyQnwwMi9qUDJ9XlRuQGpr'@;
put 'dWFVJG1eUGlbPTVlOCF7ME9tUSElK1Z5NG8heEFxP3ZDaUxzISFRcDhSZktZR1Rhem5gO2NCbV5sU25aeHhpcktrLiQ8TGlSZ0xRbTp0RGo0aiVkdW0+Qjg2KjQvKD1xeE9MM2AoKUp1W114aG5PdDFNcXpgQ2JkRmo+QG47e0w4PUByIlJSVCJHVDdGPzJZMlBEJUwmeWxKQixZc2skZlhPUXle'@;
put 'SX1xOmZDSF0rM0ohM2pEPXU+ZnNeWWgmW2xAVVtEOjQmNUc2aGpJLEZVUm84Vms9bztCVXZ9MnpeNFFmbnt1byI5UXU+Izh9Z2NWPmJ2KSwpSTFwcSlBOmFTJk19TX52Y2t4L3oqe2tyZlUwe1o+VEpAflpZKXJTOkdoVHN8VyNqKixqc0ArSjRablR5YGV7OjNBZ010filQaVBIRUYpWCJlPHo6'@;
put 'S3ZafVE5WSIhTEVmUVpVaC4pUD8/eztwY20+Zj9tbixBXVQoVllIeDI5YFhHbVlhRmRbITRSNS5UZzdodXNqVE5TbGE+Sy5qZi5vIWJ9KWUxXXEvSERZXzVmIX45T3tdVHl1PipnO1RHYkBOUltZRiZPJkcxIXtPQWdTRyMqWWRrLH1iNWpEdW4xcXY4TUhYaCxHNlUjfSRxRzV9bDdlJERqUDMm'@;
put 'WjYmT0pBKi9aTihKUi5gJj4kM3d2UWltZ3olfSlLPTZFfTgxIm1SYH4ibU9eZz4kNzkjWCZ3fSozWXcwU1VqUXt0Zjo8RU9PO2JYUEVdM2g6a1BQeU00KkIhIyFiI1VENEJ0JTJ+PW8pZ1NhVl9uUDV2WUVPOmRFOHxwKUIoQ14hbWojUElvP2xlOFArZGw+dlh9eTpUbD5ZN0xobDJwNF9se09x'@;
put 'Q1VQR11BMX1JY1Y+P01GJD1ULER0MmElbChvZTZsRilnPlUpVSpkey9WREYmI1hvK3szVkxQbzoranUzXXRAXnpIXmBVNj5eOyF8bWprKTxOcm1LInFCUFpeIWZMRSxGVDlDYzVZZXx7QnpbSldpKlYoUixrdjNNUU1tXyRxYmF2RnJ4azMxQGtELEkqR341RWBpTStkcEZUUzxbZjxaSDVPUE5q'@;
put 'Z3BsaGpBMi9iNGJjKjc8JXh0ZUxXLGJtKFA/OlA0c0dFO1dESDo1RSZxSEpzI1lFdDxfcCZHRzVkViwjLDNdTF1MZVlaKH48dHV3VzJfYX53UXBFYlZiO0NOMmFrNUpYTVRYWyQ9I1BFd3gwTyxaQkVwMSx2JVBoODBxQEtbMER3W2pvfVZ+USgzd2kqND9OLzJIU3E9YzZhNEk9ZVghbk0sMHk4'@;
put 'cSM8Vjo8I31eLms2U1k3c1RybmJvXTMzKG9ASk1HbyVzelFVVDpZKClCY0EzKE1PWy9gcVNvZU84bD9UcXRUPF4ia3NGaGp3O3gpQDc1fVQ4M3taL2tZbUwpclIoWylqUEFBYllTR046XTgkeU9rKW9hLGMwKVcpS146aDdwdEs7ViNmblNuIUJEOjlAZ1NMbjdGKGomKFFNPFkwSzQkd0o0MCky'@;
put 'LF5TcDFGSkQjRX5LZ11GR2NrWlBRWix3KEM5V1NjYC40RWc2OXU2QSFLaEZiaTF0eG4rY1krQEY2UThIZHwhazNDeUcoME8/dntVKjg9bHomfFN3U29+JS5gMV46IiRmOEdpdGRmNEVpN1doLjRUPFY1cCskWzhPd0g/YH5JOjdqXVo4JlY9VF97dE9wYnpLSVhPOU90dVk2YTIlSUN+WHRxTDFA'@;
put 'XVkqXjBYel5hQStXUzNHI012I0hfP1d5dVEvc3ltRWIha0M4OUtLW35hYHN1PW85c0JwODxqL0JzdTRwLjp3NE9fa1lUXzApaSlEQDEwSk0uZ21HSUttOlRJXilbJnpSLERFQH05bjB8SD1vKU5JOGM9NmVaPlJVKkI+fTs6UltART1jRzRFJl9gdz53Pi5RSExANmVGMz5MMWtobEpYS3AjU3k2'@;
put 'bngvJCo1L1hGI0BYO3tyfHRfKGN6ZVMuc35uQGxuO3ZhSzghLG0lRT1eOlYhNFlDTmlMRF9pLC5BXXQ6YlBBPE54enhKTmN+K1Bde2NGTzBZeyFtPSVyUDVjdTp1fnkjWkcuTy5gYDx2QiVuKztmXVs2Vl1jW2JsSGk1PDBVTTVTa1c1bDwlbnNYXSNUTlg5QS5BUm1YPW0sMDBTR3cobix0SWBa'@;
put 'N2RyaT57Xj5kL3olT2U+VSxPWjIqPnVXfWF6Kn5QcGRqMlNncHBDfSNXKmtXdj1nem9XVmBxcTlJMlhabFsqVl8/ZSVgZi9Wfip+PWNjWGtneSpLNHtlUkpvXmUscnQ5c3tJczBrZXxQNSpDZS83ZVRxXndHeCE2K1RJTXc7YVEoOSNXVDNjKnhFIXI0YkVMK0NSdGdQPjducjl5MFkuaFlec09g'@;
put 'by5uOlJZIjxveVlgKk9BMSMwOXFMaDVJWi4rQVY3I0lpPVp8YkxZU3IwQl0vdFphImJbIUZrSGY8NW8/bDJ9YXxaZnhvMXt7UGVROjo3VyhdTT5za1JuN29kRDpzUENDeylVMzBzZXJJKWx4Vm4jWmhPUCF7fEpWPSNde0NLOG1bY3pnbzFqfitvIkkwRDpuW150OG93NFdpfV54JHRWSHVMb3Be'@;
put 'SCUoUHBPYCx1dVVQZWBaSk9NMUM5QFAofH5GTCxpUTs0VTY8LFZwZ3xlI0soVUVmQF5hNz51c3VnIU1LTy5lVHRyTltHS2Mjd1AyWnUoLyUzUCZ2Z1FaOHN3TW0ub30qIy5leGsiLG9YcCprJUt2bihIbSRLcTcuNyR+VUUxW3gpT0I+ZX4kKndeQGV3Yy9vJmNsZ2RuYjhQZC9RIi9aey9DRjJa'@;
put 'bCE5Rz8yYjpkVXQlbyt2RVVrVD1Te1FpVEcyL2FrfE97QDw6aCx6USp3eGE4Q1ZhbUcrWjNSTHFKYH5zQGwrY25fLnVnJCR1SlRUdGhXeS5BO05+RjFOdiM2ZVpMPn1xbiJIP0doIXZ7bUVhfk4uaywkV3BtPGxsM3FVL0MjK1hYZGkkbGNXJlNvVkZ5e19kMXtNSCFAbXJaYCh5RURkQl9PSE9X'@;
put 'ZS5uaUw6ZCNzRGBQeG06LmFpUlRac19jVWdhaV93Xz1gUCFyP2M+anVuZGp0LzM1RGheSHAra1RSYTpUI04scC5yTStVSkp5SztaVXhYMnBMdXVUZ0pzTHhYeG8jSGxKRW9tST4wQ2hvXkljbWhpRmg4VCYwInB7aSRMfHc4QH5XKlBvL3tmPyQwVFA0fStCXTxRN3g6X191Ok9qYUk1bkMsLm0o'@;
put 'OjR7QWclcUcoeCtiREQscHVybHhFIT9mSjN9Y1FwOzVoV2VVWCl6dW91cWZWbDBYKF9CdHBGdiUjZkpycnFKUUZrKjxmZlFMRWE0a3cwYGI0fT1xWWloXVQrbEt8N28xL2teOE5jfTZNQisyVSJ5QXZlZD0vMHEucFNXPCMvOSo/InlEY1giQXFXL1l9RyYwS0dpJXM0NXFMTHIqbnQlTFpNPDFE'@;
put 'SGcqXnJYWUZ8TWk1S2tlY089bl0kNnJMOl02Xk4oWkJId2IkL1RZVzs5QmshI1dJbyEycXJEWiYhYH1JIWZQSkZXKDc4d0c2eFkrMWJFXXBpL2tDJmN3LDcocy8kc3MlZHV5PHM3RT5tU0Rkc0tKeW1BdDBBcS4yJTE5InZtWERRZ09pPWdYJjRKPlNxcmxyMy4oeDpCWHsuaH4jLDxUKDhKIUo3'@;
put 'elJ4KjBmY2VlaTJ0by5oRU1XJlAlSSk8WTcyVm52QHIoKGRRQ11PKXVUNEtqZGNGO0x3NWVjU1NoUk1PUVQiV2xEN2NnZU15TFI4ZWZQWjo6KWR+b1Vtfk07dDYuP2RHMll7V1s8PkMoNWFOSyEhZVN7bzd5Nm84Z3NhaiFlLFhJXjNjTGQiemBJa3BnNCpOdnUscD5dWnFKRipjeDBRKFs3OldY'@;
put 'aiVyPEB8NkojUl9jaSFTLHdUZ105OiU3XihJaGxdWFM4VHVSISl+cCY3IUVHZ2RiTCJxNVMiMyIjNmBRTVBVYi4+TnhAJTw0a0VxSl90PllMTWxxdiZEdmRhTyR0QCxRUzokaXpGRnhVcyxWLDRxX1V4eiF8K0cjK3RFbExNPEhgUVVwfkVWMTRlTjZoZjVbaFhfeChdKkU0K1lFWjgqbGw3JmlN'@;
put 'WV01YE1pQmFsb1F3blM1Qyx4X0Z2b1sxOG1sSnB7LChgcXU5fDVVS2RvPjZIeUVFekpAdXxLIWk/ZmJgR1lPPjZMV3o5cWhXPTQiLmZxZkhFT2R+enQvL1hnO1BAKmd8U0ZGL2tKIkh2KV5JfWc2NDZyfmdLTCtYWEYpV0l3TlFpfUhVTzpDT01lZWxBa15KV3V7aWdDe3pdX3teeiNtYjlwQEYu'@;
put 'QEljKChPWjQ6WztvQEk8al05eS4pQ10pIWRIX2JoLE97ZGQ+XllXd3JdVF8vRW5RfEdPWzk6UjMyL3huU3VjTnp7dCsqZUJkK14qaXlaeDJON0syKl40Mzt9L29xJSJbQ0J9SF57e3BQTlhHJkZEe2M/aERuWFhzXyZVeHglI2FudXlCYVluNSFNQVN+Z1ZqISZENkNqWCp+aj1iOHVGUEVQSnoo'@;
put 'ZGldfVI4cXYqbD9RVCIlR2pYP1JuUTxHQyRQaVdIbDJoRix+UmI6TGhtN0cyZUZoUy9aRD51d2Y8dGtNOjQuJnBGbkRvJWojJEx5K1VGP31ZQ3xTNTgoOXZWMU18RV94cEsmeU5XbnZdfVdLZFhgTX1nckRufFlSTWIiVTNDaWd9TEYoQXNuRWg4Kno3YDMmc2VKdyttcFt2Uk4kM0R1RlheWyNz'@;
put 'aW42Tnk9MSM3MTVzaTwhakpCQ1tWenFXUDhgbGkqRWkyQFY5KiNKe103SyVldUs1OWI5KSRkdCx3Jnd9fnwpZz92ZWV3RVIlLztHblE9NyIrbT1+e1RIVW0qWV1zIythNGJlJXlJUFAscSFyfHUmP2woYTpWMWo4ISZXO0MrX19tbF1pQF9jdWFXJU07M1lLOz4xaHxQVWRoMVp8T0VXaFlWMyFX'@;
put 'M2VrTlpefW9kW0Z2VjJ0OWVbOX5TUEZVSjMxUn1rQTw0PXZtRyx6OSMvVlImVSJhIiZxaT5LVCJ1MSZ0RVV4JnluMFIwaVt3czg8SDZCMD90VH1yZWZ+d1VmYS8/Q28jaHhMdlVpQHFOYld8aD09RjxdK0MzLlFnQnU9UH1TM1JIPFgsSHQlRTQjbSsieUhpezFXP31DTEoqP2ovbHYoTit0UlJ6'@;
put 'TkpWSyVBTmVSKnhXcGl3bmRROT1pTUVsYzF2dkhiMmtOY3V4S0F8LFpSPV4/TSJeaz1CUltyXypJUkQpV0c7bnJZR1U3dUBpNWtfS3U/V0IxKEdHZjpRXXhvNHJ8SjdwRW1nfD4iNGxMfFQ0L1kpYHVFZis3cXQ+a304fmtgKHt3ajs0fll6PyQiJFI1PFpqe2lFNVpdRzJgdnQ6Ml5uUkx8PFlZ'@;
put 'c2IqQlpKcWwrMGgqc3dYOnxoSjY7OiUqPXNoSSN9WHpKMWppTlk8VndFP2RpVDJPJGB9X0VdXT9ifURHVGhlPUhfKEt9a3VyPXA8QVQrQnk7RigzX1c9IiRSfSQhV3Q5VHx6M2ZAc3lhcz9xflhaRVlMJXQkTy5Fe0wwLn1ZWTAkJXN9JHUkSWp0KFNjWj1WK1o7NUg7Lkt9O2xnY2soK1J8RzQh'@;
put 'MjVCWj9UWjhpXlI1MUt6NjYqKClSW30xYX1Pc25ZS1ZqeUN8b3o4SD8lYHV5Rz5PJjRtSFVHPH01Mj18Y0x0RF9XWlFLPDNjekhgUE1mNkVacjQhXUpEVmopVVNtZ1MmW1I+RSgxazFKRGddXyNudWFHMjw+UTpeKEV5eWg0OE1xI2kjN1NgJjFXYCNPMSkzWllxOmRURUBdQzhKWD1iRS9QIktD'@;
put 'JCZVbms0SzZ3OGhxe31uIUNlOmJiTVl6bUpSe109ZF1iYy5tPm17MytfO0FOKHxfPjJPdEFZOFJjfDJaXzBXZmw9SUc5XVkmOkteSWZHdEV0SlFuQUV3UXs1Pk1pRGtQYHJQYGhMTHdQOFBCM3JucXxmbkRlWSk0eGdEZWsxKERHOyoraD10NEdNKm8uUnc/fChTOzdaNnVGd3kuLGxDfDdnV15r'@;
put 'KkFHO0piPXElR10oe25oIUdFMzYlV2xjRTRLc2JEQEw4QWZxRSQ1M2IuV3ZoT0lvWz1EQz5KOlZLK1h1S1B3altkV15kPDRRK3xwK0d3aF4wWGdwZy5oYWZDUVVdMkNkeV0xMVsyak4kZzw/VUY1STM8W1NWUkMpNmxkImo+L2ZdUyFSRj8sem5CV006Nj5AaERoMkkvcDdyZndvXXx6MUJsbz99'@;
put 'Qy5+eSI0c00jKitWcys8X34iK1I9fiRBMSt0P3NgcDZUUT45QFFIRm82Y0VtZXxEazc+MyxzJnF+QVRGckZKdVsqLm9QezpTTmY6U35KYU9MNXp5cEE4a18jfn1aZmghdkhHXWd8Q30wfTZoU1pmNGMrbV9oaj0kWF1fdXtYVFQ5c1Y+d1JPQG1UXkQmUnlwJGlVLyV1cWYpfSQuN2MvVHQpeElx'@;
put 'WjtlUWNRJHtRKVU0KFI7ejZvVDRoSiVGVFloJG1XZlIoZU4pRi5mdHIuQ0dAQm47LlBLPDNkTUA9P1t3Y31LXmlwdyZkKTdHOF1nXjZgVGJYTDE5IXFXX0YmWV14VngkfH1PTWY2cSkrKHd9OkVxUDMvYi9sK0BPJXZJL3V2MUJ2VkA0LG9IN3h9VjhCODtMPnF9NiY+Om8yYE82ITx5I29qX2RQ'@;
put 'aCxEaF1gVFdkRCxyemE1fnpUOWI6fD9uPGFDd2FbJGlBNVt8O09XMCg4aENaWXwzXVlBYzorTnN7QF1HKTA9REQienRYNTAufDg1KXZYKGhqNTIoYXIiQTpwbWB8Xm4hZCpZOlR2P3g7a3tDbmlKLiRzOj1SWlp6KTRCKipTLFMrL1Bicl4wWSlFMTYzb0o+bjBQInI4VHZTOzVSUXkhTDk3WTQq'@;
put 'Z3dDWDRJaUJmc19EbFYwR3FdPjFNUSUzX18oemkiUT4hWTtYRXAsQE4xKX5sPywuJVE4fj9WSlcrbm53KmEsLmJeQH5QQmImITxOZHc3IiJPb14qSnx4aEhUY0ZMW0dhYUM6NCZ5MVZ0dn5WSCVCV0J+JSxiVFpYfkw0QEBeeXx2Jnl6eSIsQVsjQTE2QjRUVDlncjUhczV8cVJERjFRNStpYWg0'@;
put 'U19kYzJfMWohK0BWaVRXLDJ8Ukt1R25KW3teTzg7KyZpV2MrN01OJSJiM3xmLC4jQi5VQkRUZWM1TmVYQFRDQltOc3BfOVs8TWFmeDZjKCo+eng6UHdBZEQqQDlJYyJuWWgjIzI5LzxeWys4UH4wdy8yOXB5eD1hOl5VfHI+VElQK19SPHUoNkBXZHgmdWxAVT9kWG5uIit4W0oyeUk1JGwlOUxn'@;
put 'bTJHV0IrSG03dUhjQ0RwNkxUMmhZbiksMzw6IVYvfUFyKEo8MCEpPEJZWE1bTU1HMWV+Q1U3Tj5oRWR4LFksOnZfUU0wazdkPF1BcGRxank3dE40VVEpSmdHcGhWdzhJJU9YeV8mOFRlJT06PCxmVXtPPX55dVJ+WDBvSiR1fDxea3s2IXEqLmtmTWFyOXlYdFZOIkV7dmxKI1speXt0ZVV9IVZ7'@;
put 'S2RiaGsrdTZVeG91YUFJOF9FPTl8KkpvMzZHIzBQWVAxMTNIXmVZWDBFRTdTSyRtWzVoaU9mS1FXND8kaU4iOTpacDo0R1YyLFVDWD5kMXUhMmxOPDBhWUA9cEc+cFQsdUNqLHtOT012RjcrUjU0UG4qVlMwRnB9YylIW1dJdzZ2PG8uVSVEM0BqRzhLOHFTIiw+PDUwSDY8Vj1PJUlyPWRHVWVM'@;
put 'fStFJCttSElMbj5pOSNSait4aDR6ZH1Fd3twQG97fkBVYjVaV2FGdH1CQlpuYkUmKSZPUGJOTy5lS3tTSiM3OSF9OjREakBuNHt0RFJUeGE/ejZPeHpEWlV0eXpdPVBYfGlCTW4qZ24kbiZvPm52L11BTChbOWNLYjBXU21yQXY+VCRhXnlUISRBPltpN3prLEwrQEhybT9GbiRdNilVe1JKLjZH'@;
put 'MEdASF9kSyM7eF88MER0WSg+PDt5NCh9L3pWNixqPEg7SF9UfmV9fUhZeDkhdm0jNUY6RWNwPCRNYVg1JCFkfThSIUo5U1ZufVNET3dJWG1tU3BmWGclRyl9P0xXWVNwTmh6PEUzfndIc3d7eS8pJUYhQypSYyhpTj1gTjY3W3JVdVFtN2o9bn1QM11AM3FGSWYjSFB1QUwhbTQoRFsjbzheSCNm'@;
put 'MTBQPURyfDc/JThFdTkhdmlzbU0kciUielAyRVtiOWY7Oyl6bi4+VEkpZEViSUE4QGUkbUg8a0ZHXlRsbFRHMT1hTV11ZTgubEBkWD9RNzI3b2FsI0IyPCJQXV4yRiIsSmclaT1ne20vaW8rUFk0bENVSWNEKT8pPVlNTlQjaG9kWX5eRGYpVkhbO1NkZ317SU0+NlZFWkJ2UV19V157ZkIsTjN0'@;
put 'LyN3eC83ZVUsZF0oYE9kdTskYTZ9LytCODF5LDcpb11xWW15XTwoTUtIPylIXmtMQn0yd0M4QWpUOzVvVVsjXmBiImtkKyplOEZWUHtZQj93K1Z6b2BuPFBfcH42O3VYVmdOXkp7Z3RSSSxELlhTOmthQ1ZfMSJ1TWc2MylzZE5sczs5VTU9fVRVKVN0OEhNKlssPD56UUlqbz52TnREJERZI1hJ'@;
put 'Z3Y7Ly4kWjV5OSpRe2JjektaWGhBciswcEMuMUtuQGN5OzRxZGFFJVs0SXV6Onxre0RaM11+UWJ7NktoUnJXSS8qUnJLV1ZYWnFDIywsdERueFMhX2c3fkcjSms0Yip8OWZscW9Ud09Acy9EYF5mPEY7O0sxUXsheUFPPCMxWGVYKztpZmAxS2dLOTIvcmUrLypYQUp4In1xbC4keis1dFVIdXNi'@;
put 'Pmt7dVVtOyJjW1p7MXJsVChQTV90Yl4mXXUkTm1AT3hLOlR2aHtwNGk9Rm9FMHA0OWZ0aUhnfnAqenpNfm1SZWJIQXVPblgzaCN2cnFjN313YmFDKFFLeWs4O24wMnsqeD1rNkcmR0dML0k9bTYoKDFNY31jRloqQ2hDNyIlS3NrUURGYX5LbSx4Sl1IUGg2N1pNYz1lT3NhUHFoJkJIQng7OXg6'@;
put 'an4idCU/L3Q3QT13QnM+QV0yI0w2XT1vakxEc1tiMFZRd013ailMdTxJeXE7MEUqYVt8MyRrKVIhXjM9d0NPRCV4OzJDbXosYUZ9RX1ddDpsMHlDNnY2IkF3RVk/KjglOWAkNldUPyYkUTdITEghbkJsL2M6QVQ1cTUmMCx1cnp7ZUg1QSFvR0I6ViV+c254Vko5VCVONV03LFIubnMmaFJ2WkVN'@;
put 'RUhLRzldWSpia1h0NyJqVHlLVW5IeCtjXys6aGkhNkdGR1phTmdKbT56LCZLfGEwP1o7QjN0ZmJJMCpfNGNdNH5WdFlBSmU7P1hOV0M1N0RscyIwfV1EPCQzLlY5WUg6fnIsUihtfmE5bn5McDg8VTdASTJJUEBhQy9eOzM0MzBlWWAhLlY3cXNPOGRzSGgyKl02enR2RTRtWUpzQGZwOFdNZiZD'@;
put 'UDB7Y3psaGRbbVkpNkBtIjZtcnY+XzJldy43dT92aHt0XiM6Y28wY30sTSE1SXghYWwzQCs1Wih3eHViOVVlKmtlRjJ+JlMxK2JaL1RLWigzNGZgU2ZMcn4/YkwxfV10Z1N8YU9lcypga0lmK2Z8c3c7OjVSWjVKQkZEXkJzRC9oY3smMFZkRzchcnFyKUpZbV9Yd0csNz9DI15dZU9HNyFDM0RQ'@;
put 'KS5YWTNlbGNvW341QjNlIXJZXT1CJmJnUk97cXp9U0hzJX1tLntmaGBPfjQ7fF9HUyZrfmohIlJKeWJpcWg3dWFdQldfUWh2Jn04P1ZaQWpxaGppe2s6Jn1vN3NvRjFzSm1IUiNiakwoazRPO2t9Ky5YfXklTztrKU95cl15TWApa3lOUzwzMWRMU0VRfHo4OHZeeCtPMH1TX0pCcmJUUjxuT101'@;
put 'UEF6XkIwflUiSSZOdUBJP05rR0tNOih0RlJxa0dpX04qTHh7a1lzZXI/TkJUOzo7TXtSIzM+eVs1cEpMfCEkbkAwcXxHSTciVmBjIjhSVndMUDkhM2JLJDV3NjB1I3syOzolKkkyOktNclBde0h3NXF+bihWQy9OYlQ6ZHttP0NpOH50PyhSRmRVN1QvbFd5VyVRWEZYbCJMdj1vRGs9JSx7MkQp'@;
put 'YC5ebiU+WCo7OXhhVUM1eX4xSSZodUkmQWpiaWJifHcoQitRdnNZWyFlSllXWFVdV3A/TUJEZld8SjJIKERQPWBwLiZbKWRlYHJ1RUYlVyV2KEJ7dSZHWEN1YVk2Z0l7O3cpLnsxMHE7e1ghblRnOXJlXl4lZjQvcyRnTW1bKT5XPFZTenJnRlA9bDI3SmYqJktoRiFDKGB+M3U2TXN1dzJ2Qkhj'@;
put 'KEJPPVgqb2NdT3xBLFZ5ezRoKVtlJXVyKUd1K3BfOzdyOE8iJWp7dHByJk0zdSpGe1UvVD9je2xFP2lHbEBJfiR0PVh+LCRCPlY0eF9EV1JPYnBFK2cuLG9ld0xfPzhlcFthNUpvVWlZTXdsMXNwUEtbZEA4byYpZmA2TF4pKjIpPCZnST1jPXwrJUZSVCNicysmd255eGNKZkpoU3ZZbzhCN0Ey'@;
put 'czRiamdNQUooXkBsdCs8WV9jbS4vb3loRER7QWxmaFtvRWRZdUIsY1VdNHIvfT9+KzgldERFUDkpVC4mInYqdlRfak94VGpFey5KQWk/IXlWXyhtfHc4fmVAaFtOJX5CcF9pNSg5cV1aI3RvKCp6NWcoXjA7WXNnRU06MV5JMys9bGw4aH51YT8kbGUyRiZXJE93KWNzVyo0aXpjO2FDTnRmTEpq'@;
put 'cSlDMkxwdkxyai44JT9lPzdlJXVmW3hiekZlXUx9bix+Ui5Ediw2WV0mMWV3SXZvK246e1pCfFNAOlFlTX5ybz5vITlPblVdXnRwKVVqMz8ub1shcDAiUnpteFNPSDZuViVLflUjPSNec31BY35JMC4vMX0zN295fWkkMjthQGVfWGlTQG1jLzZ1R3MzdTM4NGtWfjIxLyRVLHx+dWkkNFhmfTs8'@;
put 'SyU4SShwMF0+NGk2LzVRXz8xcUZ2PmlHZ3xYTGJMRGF7fWJLW3AqNkoiKXNAXk5vVEc9dGVaNz8xTlJpZUdqanZSZEx0d1BPQEFHSEVWdWJ+RlQvYSspSSZgIzQ7Yn0+RiRtK2RkUlBUNG1rQitmVTFCPjEhb0lNMGJCRzMya3NRKEd4PzFuW3tocSpNVjlYJWs+OnB5eDdCI25zRXVTbklbQ3lB'@;
put 'eV5leSQ6PTBkJFUlUnVqV3dMLkxiPjFlWDIjKilJTi8mYFo9WC5lIVtdJENrLlt2PTAvNytrSDAvd3wuWjpvWnF7K2cvTURqTnNLdj9EOmgxVVdLMi92PWpeKUZ4Q1NUdFZFYThgcF11QmcvVXJUfiZ6a0Ria0t4TUpsOVgpTnxAOFlnMmtgaXghUyx9NEtZT2woQ0Y3Pi98VmFGeylHWXFISWJG'@;
put 'QkNBYEl9K2xvTUxSY30qbiprT3dkc3dKelUwdk00d1kkfDg6bngxM2IpRDhvOXMxaURlZCNrOVJEVH5gLipyY2RPWWFqRyVZYmp5Yyt5MFBWO0ovcFskcDJZVjMmY0JxT1RRM2A9WF0vZmczU0V2UlhQbTF8cXQzW0REcDhwa3BCW2B7SE47Knw2YjZzM3Jjazh3TDdpZGdjIkhKWHs1Oko2Y2Qs'@;
put 'JGh7fF1TPHZheWBASkJoTXRPUD8iXz53Rlh8InQ1bE4kQDY8OHBlZl9vW31uSj1xciIvb1ssQ0g0e15qeTM1ITkpVmMoXipNM2pNWjZdPEp8c3I2fTdmbWU1W0w6e31xWVB9TjtqeFAkZmssK2RfPUNvZTQ+e14+IzNsKjZAXUBVPjtbPD5nbzlXI0U5dDsjYE57UUx6THAkNWh7XktOYEJ3JTwl'@;
put 'dzUjcFssTD1AM007fm47JWo6QDN4fmBxanhtUnJMN29mfCU7NDo0KilbMS9WNTFEaFVvQikuPTliQGRfPnJ+PS5DWE8qOEJMfDVgYj0zYFk7bEVPUW8xTmdsfHxVRkY4cytfJl19KjsqLmZfMS5BcS8lLHM/Lk98Xjo6L2t0MH1UPH48QmBzS0kmOmxYa0Q9QXloQ2RzPChfPj9MTkxCb2FPcThS'@;
put 'KDZ2OXYqdkN3eERKME0wNHd4RGB3eEQzOnxROzd1OFZSUXZeK0lTS0glXj45alheZSpjRktDSnFJU2hAfTNGcVJDWXlFfns6NzNJYVZDVEdLRyh1RSIueVhSJnAoJHdxWHhUZXJ7e3h5fVFNWTxbVj57JXMjO3ZoVTwlKVZjW01nO2RPe3Y+SjdHVypoL1Z0TXc4L0ZHOmw4OWI9cXM7Z3JbZm1e'@;
put 'PDNvXWhVYGU4eD0peF1BcU1adzZOZTJtNXxiRFsvd2t8cWBxd34vJlpET35JR0M8WzdrPUtuVyFNbEhsUD11NzxuTDkmNyRwdiNiaG07X05MeHxNVHBtZSFhaE9BVi4jSzh+cVBAOnc+U2E2Y1Y+ZTZ+SWFaVio3ZFE8ekg8cUdgbyteW11+Iz1we3coX0hzL1ZnZk9+YldhMkVHU1crJkVifSEz'@;
put 'OkY/V3NOfVFVbUdjKTY5dDtIL3Q9PV5yPGYkQWI4dDhMZkpGdkl8RTk1XWU9OkZTYXJUaHZTcnBtd0hiKkBeR2hBXnd7Ij1iL0U+QUs4P3t7IT1tWm1ePWhyX3lYWlM6PWBPRHE1b0NdYllKdjY9YUlsdS95REBZR3lgTmlrV19QQCs5TGBlWmRGYjZQMHk8NTIrUmBgYnlwb3FzRiZPcllIQHN5'@;
put 'U2tZPiFPYSxRZntMUn1DZXpGPCwsZk5hRD4iPz8uWXkpe3VeS3hZIS85aWlqK0Nle3IyP1F7Wk9nVz1qXSNWVFtbPmZhO0Bna1dFSyhTOnBRWTNaMFhVMlA+OnA+SzJKK3pqKG58bGIpST8lW1hYPj83OEMqP2ZqdWdDVyteeEZiTUhHKzlyS2FmZElkUGJWU0A6Y2ZmelRBLyJ9PjZuen5IRmtE'@;
put 'fSFaTHMuMi93WEAhSFlOUjsrYi5XQ0g3IXg+RFVuVn4pZyVtaCZtLEp8YnE/P3ZafTVmWCFFdTpDfTQrb2F3bjEkYTUvX19kITp9eGksUGdlOGtKfGQ3MWduJHRFNEV5KEJRYz8jcmZAOWNVTSpEcjhmPl4pUjxDWXN6WGF6VlY+QEZsd1UqRDBoVFB7dXFVWSpJYlVRdlBLN09KcHAzJTcjKDBx'@;
put 'WlhAd1NfW2x2YUIhKiMqP2dqdj1DVyptX1YrXnlbbHB6eVNITEssUVJLTVJSS3NSUkt4U2w3SU56b0x9Nz09cjxeXzslJWdfYCZPSXJoJEopOWI2MEhwWk5EVD0zUmZZW0xKeSRaNz1PKDc4dEAwTUpLPDZOU3QqYDYwK2Nmd3JZRXt9RDIic1Y6M082LFk/dHJoTDh1L3BLcGwhdEtRKjJFOlp4'@;
put 'UXBZbl9OZmY/WT4wLmV4XkYhYmcsRkBXVjIwQWAlKkt8fCo8MURnPTJgcUx9fSpPP15xPmYhNWZGMyskbTZEQiFbRDMkaiteJF18UGhnSXZpclhPS3M7bSxBKkZAOXMlSGR4QWVHRWNkeT02dG1lYTlpLE5vRiR4eXhEbUR2aGpzbSpDYCM3WFtJQD9mMGBiOUtMNTtSLiY/bjwhSn5sd29iRWlO'@;
put 'dFJYRyhlaXx9KS9zRD8yISttJDt8dnF4fjdFTn4ydFY4WC8lbGVDOEohMnF8YD1zZlQ7XnsiNmZBYW0wOSYsKjFAXn44RlV+N2g8PWVbYCZDO3owMUt9VX5fQS8oPSt4fH00NHJ3Ry9DaStpNFNNdVlIYzEjbXIxc3hdaCtpVFJdfDN3cC5QK3VoKCQ5a1ZbVjVieSg5LjZDITNfOHh8fS9ReFQq'@;
put 'SGtMb3QmSWUqbWlQQkYrKU4qZ115Uy5fZitgQHZ6SV1JSXwhY15nMzp9Kmc8NSQhUn45TXVRVWhMP01+d2t9QEtzfXhwfShOe2tffGhRQFlDfUxickZlQltvQmcoP3FvJk1uLEpOQEQ1UXgkIyw0YT5MKWB9S059VXh0R354SXFxSkVvRFJYI1FuJmgmO2phd0orVlFDLD4mQT5WXz9qfFE6cT19'@;
put 'bEBKL3JjKWJBMG13fntbfVRySVY9b299bCUqNkI+LG9sOzdpVWJHTkk6ZVUufnI+a3RWWztqQjN7M30zRy8seWc0QWolPmcxQE99JjQuaTFkVkI8MX1PSEY+TGZ9Lz0xLEtOTURtYltrK3VSR09QcWlSNTtmWFhmYm56S2VjcD1LZFVuRWhfSnlNd2hfVXgzM0JoWF54b1QpfkhOeEZZVF81O21y'@;
put 'aylEOnBDLEh+cmJDfTtMVGJFVGxwYihvZ21UKntQdT1KM3o2cTdjSCxmb2Ezfn14Mz1NS0lmVHg8YlNKZkA6XmYpZEh1Xi46PUxXLk4rRnF3dmldXkMraUlLJXMkYEp8MS5nSlUzTnFZUyFDK25idWVwZ1skRHp1NWFJOmxTUVlqR1JuLFUxNE9zM0xRRD86W0JrXV5LQ2BDeldrQFE2MUh0K0Ez'@;
put 'YTdjMHc/WCoiWFAzcGxuaE10Wkc0XjgiQXVrZn1FVm1FKl9iaElfTGpZP2xJfTopanpSTzY4TTwmVmN9LlB6OUt5OX0oLE5DPD5GSkYjZ0ZQbzV1UHt1Qkc/UDN+PihUXVk5WH1he3JvaS9hJGFBeWt9TEd9bkgscV5NYVtVZEg/NkJseDdhT01iIk4kW3l7SnhyZytpfjgzQyFQVXkpT317c3Rq'@;
put 'QFpeIkhSd2wuaSQzdiJtb0V6dGZGVHlzJl8lNGl8JSQ6dERoa10lTzNPIzIjVyRONihMPTQzYFc1KSVMb288Syx3d3FgZWFtWz8jMUxuVlY+dE5lWUh4QG4yeFosR0FXNnEwSnJGOitKOUUpLC83fklzUWZRY3NHImtLVzdwTVk0O1crZnp0UEx3XS5dQTN4alchJUwsb1hDLE5efkFjdE9uSGVl'@;
put 'THwwRFgwWzUxRmB1PHdlM31VbWRKJTBCPF0+VyxSJjZjZylEOEg7a3p4PlV7dyR8PEFsZiRFW2cjOl1DIyU9KlFoREJiSS9kIj9wNURsdT1eNVY7VkJuN3pxJGFMWjV2NS9KfWEpXkgzfHI7L0QrSCo1UWxNcWU3eV9UQ0FZaSVmYjFZVl9FZUxlRjhjbz4qQ28wQSY/ZURgYUFsI20+YjV8I3Qj'@;
put 'Zy4menI/ckhdWWlGQmJCd0IoaDomNihvU3xKKz9aO2opTVB2Yj5wOk9tS3VxVmhrUmNKUClIV246UXdmWSNuWSgldk96SXAlU3RgQHNNckU/blJzSlZaelRqPyl7OUolfl1vY1I6Zi5afmVmRjxJQ09NTDd9JSRGJT81KHlYKiQsW01dYUlpPm91MixqWStfYWYyYmE9WF9PRV5ZLEpzTX5KKm0q'@;
put 'YGFQMXsyVClNPVtmKH06LkFDLG8pS1s0XX1DaEJGJCw4fkVLLk9eKTFhLy81d2o9TUtrfTdaUEA7fllyOWxwRUppXiR2fDZRMH08TVFVd0wxRD9ObjE0eClUIWJIcTc7cSpuVjh0fDJKKyFINV08VjxdeCpgPjRpc0htTnRjVVEjXiovZlM4TFtgPTNhYXB6XXxuckQuMHclWXxPODNmdDtuNTtY'@;
put 'OU5dJVFhQ1pZJll1TXVbd1dYVUJfNWZdejFLTl43O0NILyQoIUJqVDQ3SihWc08vXmskZW5yQHZwfWB3cHgzcVlGenNjVzkuQTlHRj1eKUZoejZjZ2plQm8lX0B3cHYsVmNDNC57Rk5hJE9OM1VYYEc9YFozK3RPbSx1dGM4cm9zNUlmR2QzR2YrN2srQ2MpPTAzRFg4cnB+K1t5X1REV3ciWS9G'@;
put 'IXRuTFl8L2RRREBXdipnOzwsOm1POltXbDw0XT1aYmpUNGhYY0J6W31WJj0wM14xL3lFLkAsfjp3V1VneE1QU2owOFgrbUJPWkJ+Z01sIl1jd1NKK3N0NzJXS1kvNWlkXVIzXnFOelRCY1EqRDhvMSg3fnhSQEBvWnFyQitfT2lFRUppYkw7Vnc+KXRaMlgrTW9ySWFhUlAyYktpTERVWG9kWzNu'@;
put 'T2d0KklqOHJRVyksXk9ifnBLeHdHV353PHQ2KUIuWVhRV1ZkfVcjR0RxeiZodUNYVUVfZW0wPHptK2xnM0pNZ0spWCRVMnhzOC9maVQsXlIqJnh5TEhrbkpMKV5jeGAmbEFANT11SkFVfjNzQ2UvdnE9biJVc2loQ3JeN2tgRF9eTy9xPUxLcUVsYH1vYW89UikpR1VfSWIpbStrLG1HKjhCTF0h'@;
put 'O31uUEcpNyEhV1RAQkhRQ2M3dFAuITtMOXQ3TF5zKWZ5MjNPWjVoK2hfQnp0OEE0aE5icixPbXUyL2gwaHh5PUc0OmlgXil8e2FwZUpObFdYOVFKYFtZaXpvWFZGcm1fUSpOfCluSjU6YHZ1dChSP3Z9R10qWDhnZ0lPamJKa1pZVH1Ldj1ze2h6UjNZQyZgRVRPUkglIVQmc2NGQ0RVcW59dHcz'@;
put 'cm59ayw/ekRMUE5CVzoxWVMmOnpqUkNKaTc4N2NeO1RWTkYvaGI5TDxOIUJSODs2UCx2RFFoTlBCUCxvfF5afEp3SjczdHpuLnsvYzl0Jnt7a0ssRGlOOC4sbkRhVlFLT18zUj9YajBIaE07di81dDk9OGV0eV81UkJrTUJSWE1sUyNAcCteNTpIKkRzbCJ4S1phXktQJkxJRXdkdWAyfGw5VDUl'@;
put 'P01pfFl7aXpxJmFOX15BWDt3VHRDUD8lZls3K2EqdD9XJVN1R0QmW3BPcDYzJlk8THMrXUZMSF5zcWpXPSlVQTYuYi5UczZnOS90UnlRK218aGllajpzSX1oV2EmQjR4fk9rZUdaQCFAX3NJXmZgWmc6T2FfOVF7TjQkJGkpKEU1OzFFIWVwK0M3PWNLXzN1NCxXfWpTMCMpQHFoY1pIUWR3KGF4'@;
put 'enRgI0orNDJ4KTFGZH0kLihbKjlQMEhoITRPLlJiZTdqczZiLEpSMEhoITRPLlJiZTdqczZiLHkrcjszREYrKU5AMUtNYzFdMUwxSnlkZWh0QDE0T2NgQ2AsRCF5ZTAyNkBAREAwSElBYEt2cHRgNHRvYDhBP0BQdW1gfG4qR3FyPWleUUpsQDsiLHJndW9temV9UyJ4VUpfLypDdn5YXn1teENG'@;
put 'U3pIUHtVQlh1TWJab096VTxEZUBKVUJ1aC9fUiQ8TzAlYGchcU84aF01Rk5PQlJYbGkqX15MO1JlPWRKJk0vNm4jLzErbzlgYjldXkhANT9SKmZvRnw/XlUmdjBnOmBmZG1OYX44OjpmM2w3XkBAL1dIXTduemFFUXpBdkQhYXhJJFd+KGI/JklHQk1rQld+eH5QNTdwOXdKRGZXLF42SGBHZXwv'@;
put 'eiVyWlU2WHQvL0Q0RllwNnlKT0l1NX5FR2VNX35uTkw3XXxrPz18V3U/cFMwakRgIj5ITHZ3Q1pWZTtkNHw4e2cmZjEmKVhzOnhqOzYlXV5nL2MiRFV7cld9Wjp0el02cng9cXR6X05lPVg7filEfnQ1fmcxaU5de3l2ZXhGJS91R3pJLy96MitET0wxKHQsXlZHI0lRTVA0XU1EeiZaeWk9MGJE'@;
put 'WU1xRGx0XVRTZH41YXczKFpSTVljV1JIbCk7YTxFcX01IiZ5cFdqMDVSMGE0R25pc24mYEpjIUcxYit1Uj8rYSw/PGguR1VteU5daC9UfCZ5RGBXKjNyUClmYUk/dm10a2FxfS56JT0jbShCVE1DTFFhaSk7OHI8K0gsJml5fUVfSlNVMChafEtWY1khUDNPUilQe01XPEIuQTpMbWc3KmBvfnps'@;
put 'UCRyOTR6LCIqT1BfV1hvQmA+Qz5jS0xYYlBEYE5fSitySExeQjNPSHooM3VxYXVfXzlQV0EmW1suX34rKV92IWMien14NGRFd1RjZE1XRy5bRHk7VStHWGJoXVd4QC5fflZMZVEsdmQlR0w4RzY4dGJfUGpfZnNBUipMSXkjWWJINnRAJilWdU92dV5Oci9MJjZQcElLSnN6YjR0Sn13ZC9ySVhS'@;
put 'NlkoVlRpcCJRTHppNE8vLCpUQUlWTWVjRnxHeFhZaUV+Rlh3bDYkWUB7cFVuWi5ARjgxdHlFSE4oK25nMDBZc0woY1ZVQ09zcEJ1a2x4U2Y8Zn17WERRczV+bV12O2Fvaz4+WHFkOj55eHtuV1FCSFRSYUs6Z1JrPioiWCYqTVJtTTR1NHM7TmdjMlljVyhHV0Y6YXszY0o9b2pNN3gkfnRoUV5J'@;
put 'ZCtiIT5JaF13QzxgR2lXZDAzb2U1VVgqeTMyfjMvRCFiTyxxbk5vS3wwdl5lYzBob2RhIjV4V1JwIz9Gd2gpMytnbk4qYChIJTxwRVl5PUomYjtsRSlyZV88bm09IjFvWTFUfFAiUltgeWQjamNAPzlgcEROd354TyNDSVRdeCJLSk5XN1JYcy8xPXY4X3dMWWR4Z1U0aTRWcjNDM1V9WGlXYztG'@;
put 'YFp1SWNTY3JTWEdnMTF+JmMvNnheLDZ2KiJ6K1RSdj1CTGUwLzZvZ2FjQT5dbDIrJUl9TF9+SX4yOE19W2tlYXE2cjhJX0Y0VWVGT05TXXRBZFAjNVVFfV1HLCUvSHZzUW96clZkK3IlTyVLVys4O0dgdGlrb2BZKm9NKDlPRHxZeHBLP2ZBdW9yQnd1LEYrMUtmdmZnMEhfMTRPOWliZTFqMjhQ'@;
put 'LGdlbCpzNlAsUGYxMF0xTlB5ekczNSVKeXViaj5WUX49OylgN082bmJvVEpVWmZtQmYqTHdwVCs9O3JYVn0iam5DYDh3Ri9QK2hMeTZ1TFZ7I0krJkQ/TkMuYEV1ZUo3TTFEYHV3P0NAYUZmdE93RFBUUkRhWEQ5NEkwP0R9R3h2fCplfSFXWFgyeSQ2JFMlTX42S1lzQjFjc0JCenxzcldbKUlB'@;
put 'S29zQnxXXXNCRS5pbCtZaDB3P3xpaTNEM21HIjczYSlXL01NPFJkRVt6I2FaZE9BJS5YfC5vZXFSZDhbMXBfV1lAR3prYn5GPD9gdj8yRj5RKnIxTC4kXk5meWkkP2tvRW98cEJXWD5iYjhNcX1ZQjtgUDMlVVVoPy4rI1NrLmAyU3Q3MHw/PkFNZ1lSXjgvK1RAP1R9UGZJdyE2YUc3byE1aUNw'@;
put 'KV81VzZ4NGR4PGMrdU9wKTN8Ry5FZ3lRWXk1ViRabWkzJGBfLkhtUUZqOyJkdHg1fj1ERTZ8bkZ+SjZmWGo2dk9FZD8xITRTOlkwcjYhVUg2UzV+Kz97UikjblIoK3ZHTF89bkhqVFY8S2BEVDU7Nj0wM18xOHdEPTN6ZFdLSG9OZipkUF1aLkBZWUNGUlQ/RyI9WEY3OjMmNT1VfD58b2lZIixe'@;
put 'fWRfYXdkfkBQM0FpbWU7XU9TdzR7dCliJjBYRX46eUg1XSVycFVkIVl4QXl3PTx8I2NgcHI/I25eI1EpaDpJYzAvW2tjISQkPHxvVV0zNmVuJUZLZDI7VjF9QkZNdXN3cG8zQHRALndCd0ZFNW9YSjo/UnslblFhT1d9c3B5WFslaUpjTV1UNDRAa1hIQGtiUU0oZDY1RjJeI3s6NXdNeldwO3Z1'@;
put 'XSQ2KjU9ImkrMWFUTVA0eU0mYm0reSU4TWVgUipBRH5FPGE8bHl8TGFgcFFzbkQkTjQ7XlVtTz59eD01P2h+MksqZ0tuYjkjTnFIe3ppLDQ5aFdFKGpFUUY6R1RvR1ZqL0MlMGZZRHN6V0RpdFhbIyMlP3tmUF9vcFdAXyN0O2Bmbkh5eitSQzY0NSUyNnlkVV09bHNANHIzUTQvW0FkNnp+TXVk'@;
put 'Sl5NTSkrSS9xTzNHYyFgVDNJRStVRDVxMW5pdzFjU1k+VllpWVVUSFRNfV19VjNpTjxxT2ovdXxLNk5Se3pVfT9OJEt1S0swPF1UNDElaUBNcTk0UCliWXQ1T1grYXc+OXVzZTJNJUI9ZVUoWUV5PUFkej1LUGQwVHg4TGhpUCh4RH5YWkZxejRvbU9xfW01XjQhflUqWD4kTTp6TG5TNjdAJCR6'@;
put 'diNHVmRqMCJeSVNmVFNQfEp+VWhIaF1WNztuIz9yUSVPX2BdZDU3V0c4SEE7XTFAIjtoPEZOQntSWCZMSF5hfHUlRjQhVHYrNT1BYUBLY3hRcX1dL016QV5OcGIqejZuWClYPElhWG4ra2Q7LCpXOXU4V0w2KVZha21JfGFVdjx5WTU/JEEyJFg5M1c1KVtlPFdGR1BJW0crezIhaCIxRiwwK0hT'@;
put 'KHQ0c2hkaltec1toOXMjSUlNVHNJXShNOmIpUChFRTRpajs4PF1DVjFxVToobmF+XzVLMitYcHUwK2Q+enJVIXVEY0IsemdVdzNddiRMITd2bjEyI15dem1DK09QIT8+SWVddFJqS1F5QTtHIng3eHl3bjBLT3Y4cnxRT0MuNWEjMURTPXNTU3RhP1hmKiFNQVlsQHVUblBNWSZuNHwxcW9QfW1v'@;
put 'KytCRXRwOVskYzRhXUt9QVE9MDB9bTZzd195QkhqanpGdXNUZG5kcEFuaElmZiEvOX5WWD47RClHUVg6c1skWnZCKkJmd095aVIme3JHJUdZITZPekhjQHgoQkZYZzppQ3orRE9BenNoYjtkZiYyMz9dNDI8NlldezBucS8kNG8pd2w5IzwmKD0jR2JLS35VfEFXTklfV3I1aXlrMD8zQFdFY015'@;
put 'XmQrRT0/KDQoeH5GaD9eNnZ0TWZHMDV+Jkg9SVVAKnptJnxMMHJgVF57Kit2OnV8QyFrPSlgNHdDYHsrNzJSPSY1N1BXfj0yR2ZQdDsjak0zc0FYSTIzey9HIi5efnszbSpxamdnIiE2KW8rQW9qQF8rV3wsJXZZeF5FOFt8RDY5ZlF2dH5FZXAzOnxhdz4jQU88RHlZZzpxTllYajBgdnlNUnl6'@;
put 'ZnZLcmE5dilSJj1EOnIwYCxQP31XKG54YCtNeT08K0tld3dRcUZlKWh3dk5PUVB0JUJZLDVwM0VZaiNFTkI4NyN2OXdvKyk5U152U2V8Z3BhNnojZXJQSWNiaUMyO0JNWCM5QTh7YyhdKHowXXxdLjlAdHhKPWAwe2V6THptaVY4cEwrdz5fOC9MUi9CVU1ffi4zcSlMb0VsUD4leW84Ynp8Z3ds'@;
put 'QHRnUkxgKHoveSU+SXxZe1ZlV29ldXNMWFhgR0VXXm9wZ0NVVn1SYm1CdysvPFk3U35LTjJhZk4zZV17T1B6Tzk+Nn1Ubi5gQlkrTzRUOXs3Vnt5KkYuMj5nIUx5QUMzbD99K2VdfWFWbGF8XkJVY1RlK3VST1hhQ3NiZGZkYWkza1Q2ITZpRkNWNE88azdgdH4zIV53MUwyZjReOiJmNDJpey85'@;
put 'NFJdUU50MFc+TTQ/NUc1Ul0uR3VPX359fjhJXXsuTmYrTDRHT31iOEh1ci5GWShbRkcia0B2TipdKHhjVWVUSE1DVGppU0NXXXh8P3xSb2YhVz5KeDJPTWBuPHVjflZYPk9daS9Ke0dEeSkzPGNSM1BoQ0ciTFJpJHVaZiRLQmZkYjQ7P2orbT9EWz8kdkxmUXNEV35FUVZ+bzglLk9mTmwyKzBL'@;
put 'QmQrZEs2XWc1V1Zrc1B8ZnRBJVQrWFBEV35eZCx7NW8yaTAyW0IoJmt6S1N0czlNQzpUdHVzZkdde05kel91QlMsfShmTFBqXUhMQmVsYGUiKzh5WShTb1dMN3hifXBQd1k6cyNhdXYzLH0/bGhwOVoiWyhsQH53NlpjRSQyJDY6WXFrOU1bcGNqOkhCWFdJUDIlfX5ScX1HKi5YXV5BeGB4TFtf'@;
put 'X1JANmNlOSt8azF+cEtJfmdLJW5OVyNMSFd+K3QzeyhMVEBkX1N6aCFkfFo7I3dtVSlyWWZwQiUhfDN7aFVAS2NoaCQhQnBgPkV9K18meDx5cFciNXVzYjJ4PU4odnBmPDJ8XlM9NHB3azFjekYyWzw6PncrPk4xaltUWTlkMl5rIUwlaWxHJFlxa3hnN2g4UHJLSk8kMj18U1A6T2hZSlN9Qmxj'@;
put 'ZUVUPT9PK21+Oi9gJmhIRFkyM3lEXml7Y2EvInN9fi5UISJuN3ReME55ezR1dnFle2YpNUFLP0VvXihsYXB5eD9jOH5sfVIoKXk+b0xnfDhIek5IMXdRTXtOTkh4d2FZOkQyfXx8Qnhba2ZKVjMle3JZPT8iNmA9V2w3dyxbaGJ9ZGI8R2BHbEw2MSE0NWR1OVU5O295eEhue3s5ZSghTW84dnc4'@;
put 'cjhiNGtKcDdNJUJaJHAkdXQmOlpWUH16X1tTQldEQ1d+Um9yQEZ5RX1SbyslR2RwOiUoNHMmSSxYWUA1fV5lcUBLcXBQJnk2Uksve0plIUUkIlYwQGRVd1IxVTh5In5Odlt6cEBdSC5IYkx4ISJuWjMkRmBTS3EpTzdfSW8xYGJ8SH5XVDdpPGxyfT9lcFBrdTRzNXEzMmhsfWI0UE5YTXtmSnxw'@;
put 'RTM8Kiopa3cxRnEzYGJhZGEoR3o+WGF7PkNRaDdlXXtEdzJ2Ujd0WXNbcGJHR2UlLlteT3c0WTBEZHVVZmtINlkwRTpgZnZPSDZ2I0YoRzQ8VXRIWmlsfTYwV3MjfUg6KFJfODZoKWwuI2JtXWYpbH44JiVILnF2PDM9YHg9fjw8aDgzIWg4PS5pbCtsSWlCbGpbZ1RRWntzZCFYOkZfUFhoc3Je'@;
put 'WzVVP0lGc3pxKHtrI29XI3h3e344KGVnJWZUbjgvQntaP056aHhjK20xZlt1cDk/eyFYeXw2ejV+dDZnVXRQODNFOGF0M3BRMCNAQ1hHd1luQDFuKCg3YXgsXmxHdjo0L1ZOMXo+ejlFcXkleVJbSlE4WUFxRnJkfSUmUH5bfWUxVGU4QH5VLEh+V0VzJkYxfFc9TE13Pzp0dStBb2EoeWs0MSRS'@;
put 'e1hsanddJkddUEtsfXRiJFghUnUzQkVzS31CLyl1dD9rKShFTXlDbTFiVH1pXzN1YyhVTipdTF9iW1REbF1YNEZlLHx3aTB8NUhQfnhPa148d11uNmNIV3t1Pi9YXUcwRzt7MHgjV11ASStzTXk8N18jWHUoOTBTUjJjSE8lMFh8OF48TUw6Z303OGBjbHRGJCN9Kl5kPFdmc0JFKi9mWVQyMn45'@;
put 'XVY1YV5HTF9gQGZTfVBhZXp0SlFFeDU5VyRVOT9oZldMVUR9XX05bkIlMFRkSnpSSHVoMk9FZjZRdnAiI3xbRUtkfC5QSk9TfkB5e0h9SmR8TlNVXihfNVp4SzxudlZVQ0hmdmhpMlReNmZYLFFqYGUiT0Y8V14xfT4mUHE4PilyZl9nQFRkWH1WMFUzUENRRGxdVyhAZUUpfHFrTDchM3d2Y0Aj'@;
put 'QG53fkBrWDAvN1hfc2hJKHdJMHJMSDZFKXNNLEJKemJfTzE9WV5zKH0uamQqMW5ZLlY4RDdZM01kLzloMTFzaGdjQTsoLGl2IlEzbmtTW2NWakZrIXAiXWkoazdoZFRlNzhbSiQzJnNpVF5uSSlDYGIsNnk5Q1MiRHBALitbI2Q+ZSIyL1Q2M1ElPi9tK1dmKjZifixtX35ifipuYTZzaW8rQT06'@;
put 'WkBhY3IuN3w/Tn1VJUByeUgvUXFfKD56OShjJVFEZCp3eD17MyFRRGhiNW9aYFs/SGxyO3R0Sk4xQmpiQzBhIj1JQDgpTTw+PT5vci9VSEMjbHxiNzRPdn13NkMpSXxrN0EhVlRaNCslQ3VeLjQ1YXVsRixZcWA0ZiYzPy5ua101fXg7Q250eFppTmZEPiJsdipdSk1HVU5jLE85cCYlPmdyVTEh'@;
put 'UVJfcSR+NUw2LmZAWXB3OVhDZyhAeTZ0YWA2JSI/OHBWX2pJJC9kZXN8YEM1aWAmY1pFeywuQ34sfj9XdlE0RmYyPSYzWzUkaVY5MnxHUH0/aDMkLmcuMnpbXjVLJH57Nlp6VTElekVRVEIqP0ZGT08kX2xzclg/QldoVkpjQDZbbEw4QHlGeztofnY7IVU/Q3JifXszaUpEZEk8XmVyXWRCSDYr'@;
put 'OnhPeXBVcC57TE5gQXQxW2R1XTxjOnU3d3lfZHdUaSswYzAhSypLTEhiPkFNV1UvKmEqek1Ea14kNk91a3xiRE02cmd7S0lJSzVBfkBWWmhZRXhlL0NgdkRFdEcrSHF0ZG4lJUdVVlFicDoqPVh3Ok4iYmBwV1M1KF5VPEcwLzlnRXxBbj8lV1hRfG1pQSk3cmB4Q3ouT1hdYkJYW2RCJGZURDNT'@;
put 'MlI9WkxeQ3Y8X05mQkFfWjJ2PnpkRCN7cmclcCpOZWUmdCZ5TFExcy9PY019Km5Qdm5mVVY6dH46R0Z6QUxNZUFDdHUufjJJXTU1fnhhcX0jaXo9al8lJEVJTEguSE8qQzFEVy5uN2gjaGc7JHJJaUNuQlBxdk9pZjc6X3l8Qm9adl01QD4lQ2xzM15id100bDoxTE5IMjsqaTwvak9Rcl41ZHxZ'@;
put 'XXpNdT8pJnVkb0ZZXW89YW5IcmdAej44fWZAR3MxOjNNYXpZe1pjdVZhPjJzY3hLI11JM0tGb31rREBbdSkvekM9NmIpViJ0NiQ1XyMuP05qUjl9bHI1bzYsSDQ7flN4eyU0YHBmSjpQIzdXam9jWTEwWihOaV9mWTpNP0c6Pz0kNVAiOGtheit5aHd2YGthQFokSl9NKzsjY2BfYnArI0kxR29o'@;
put 'USNoJE92T1pCfDZsI3JeNGF1IUtFOH1nfjhAI25kUyRUPG1nTDhsaSZJdldERF0hb3cpPXMscCImbH44Rzl6TmdLU3JgVSFUPnFrPkE+XnEmXys5RlAuMkg0MXxPTDFEIXpBSnV5K3RjVT0wWlhoOiROWVhoOkdMdC9tKFF0VCo1bylyaWAjIXE9MV5ePCI4Ql9BcX49NCVId1tMJGdNdXRben1e'@;
put 'JFFgcCljJFZaZiVCY3p1QXphOyZIPFZSYCk5QlhwcXZ3JjVnUXdLVEQlOWc+UUoreldjb0YoZ3A2VkZSVndSTSRJZD89NyIwMHF9T0B4TzdfbClYSmZXTk5IIUI3OW80fFVlfiZ7e05tL3ZCI0AsRjdLfHEqRShWLH5TIXJAZjljVWVUYTpbJls3fX0+ODU/NEZ7NDoyanhGSVRNfGNHQX1hQDZO'@;
put 'Tlc8STp9cnBxc0RAZ0VeTjY4bllNR3wmP2VPTGJhNkAhTkdtc0tffTt1YWkwZDNPJll8Q0tvKDd+Zy9ibC9wbzdbMFB1W1ssP00rTXtRRUg9PiJBJDddcUZWTVguXlNjI1pRU0tPOkMwS3RzWFY6P2Z4e096KGBYIUdfTCozMD5pbj9gdkhOVlZYUEEsVURqOWtdcSY+eFpTK194YypNWE4wNCtV'@;
put 'In14OFBoZ3J2JVdkeDBIUytqVTd8PCZGSzE9JksrYlhWdVhLQSZTI0IjWEJLZnd7akAwKWFvbEZKKTdXfmwxYigoUHUxblYlPUIrXTcybUFsW0ZtUCUlVlAlJWxpOjFoQld+RXBKYSghY3l0XV1eXXU8WDdea09YeFRbWjtiSmU8b2dNaDI9QjdiNmMldGlbd2o7KkZse3ZvLjldMyJWIz5wfmFp'@;
put 'KnFkfG44aSQ6Y2FhKlg0Y2AsO291YlQ3SS9Ffmc5R254dk0rZEV8Ji5bKGJRNDleUngodSN6YG1VSGIhUGxqPT1FJkNZVDwzPSpmV1c5dX4lOmpMY1ZhQ3JLZTkiO0NHMn52TlNGXn1kPFYhYU4yfjJJejtvMTE9NiV+Nkc3ZFVgOGZDdUBGYUx1UztDeElMcEImaC5GeG9rWCs1NF5VfDtMeXNz'@;
put 'c29HWTJrP2ZyLEo+MSUiQ2YmdHNGcy48UWopJWJnYihtMylbM20oT1U2Rm0wWmRCL2ooVzY1NEFjM3tYczxHLlpQPjdNQyo5W21sREQkRFFmcz9RTXkiSjJHI3MlK252fHFjKm4kfmE3S3dIODhDS04kUWJaL0xLTlNhd3l2W1ZuP1RaNj5ydz44Q0NuNW9DcjREYCszJGZiQkxKS18kQ3FLczB3'@;
put 'VVE2M3B0RnluZ1ciYHJEbzYqO3UkdEJ6dyZhd1ZKUH0qKXZDZFlMfGlUNW91R2BRanFtO1h5TX5Ka2I4cC9aPE58LmNJIWFeNHJWX0R1VF96PmV8Wl8oaXYmLHc9JjkkXTprV1F7b29dN0h6SlEkPyE9fH4hMjB9cj1Te20qPls9cFJ3dXxDYGJEXk1fPkYrVU4pTVp1S30jKyNuWVIhd31FaH5l'@;
put 'VyxKVV1laXZyPCM1U3dOeEF1RXliSnxyNF8kWz1mQGtKTVo1ZE06ZHZCZD1lW3JJL2soenVtKzNMcUI2d2VfIyRWM00yPXZ3PVcrUn0wPWU8VTBvcE9fSCZUaTJdKyNHSHQ3Q0duJDI6KH1SYVohU3hmYjomKG0yX3E/TVo/eDw1Il5gayhWdDE7fG9OTjRlKWlbdUVReFhYSEApP0gvaSpmRz0/'@;
put 'bj8wQF1VQ2AhT2F4Rnl1YiJkZ19vP3VxZzBvez46eDZKcnx0P14pdyQhSWBjejhaaDxTfH4qK15QOCtAYnVLamAjTjFRfVBgcnZJfjA0UUVPe3Zycmc4RC8rTEAuJlh5ZHhFZFJiWXM+ZXIqMTxGZFRpSkc0PUIoVHMxaFUqNlROc29GZDdfXjcleyVCdV9gQExXSlNmZ1ZGc20pbnBFKEZMK1tN'@;
put 'Q3N9Km9DdylzNGJfU0Y3RTk6Zklae2o0O1s6Wyk9djNdaj09XzE9ViUkYGJrN3BFZT5TUjpHSlg5NE5oXW1xQmJWOndMenNLfmNhNkxBSi5tJD0qMCJhQ0RDRyxPXjk8OmxOcjBZTF9wKD1SWUpWa2Z9VUBeRls/b3diW35XSm1YTCYqTih+cU58Rj9LMzBzbil6dGJmZ05QK1sxTCReSi90VXFw'@;
put 'a2UwY2EqJm18VjE4Nj88b1YydHZWYVo+RHJbNj9ad3VsUUVIMzRXZTZCX3AoPTB2bkBgN2ZYPW8rVGBHKWJYVkh1XyQwZzdHPF9oJDBnekdVe2FvWGFvQFlwZ0siVTQ7RjZ1cVVZLHVHO3c5fi86L1olWzpfTjRuY15fVU5dRWRTfUY0b3xfKy9vJTpYI0BvYVYpaV1fVUBmOVRTd0g6JFVPOWpN'@;
put 'NlQ5Ny5GbiJuI3piNHNycWVJeEIjVzp+VDc/LiRfW1dWTCF6aTx6V00oVmFNJn1gcCYyYHB2I2N9aV9lN1ZOW1Q/UTFzLk4uMkZ6X096VGFYTEdBM10pZDNbcEtoOmdeTm1XJV9+NyhkIzRSXWx7S05yO0k/KmJAXz98eGYwT30mN1YmJGhJVDhPOlNmP3EzbHAwQF0qNU81Ll5sPTNgQj5YMz4j'@;
put 'VT5wd0l6Vn5JYnkyaE5wZDt+K09UKWFAQF1xdUVhcVlWIis9YUJ0P21deG4iMyIpcU59KjY/a05AYXZKUH5kXjx8XlFibWZkaGFpWl9qRUQxRS9jZDNOajI4JlM4OmxtIVNGPVlUZmFvSFJNZVNPcnthRX5WWmJzQ3tPfENkOzl6KXpUM2lmMlRpNE90NH1PN2lpWmc5VzMvWGBUJXc8SENsLGtQ'@;
put 'Nl86XVlDOWo+d3g7MGJlZyF4NTc4RlojYGJeQSZCOjQ8W0cuRXJoQFVKck0mTCYzKkRgcDY/LjIzdXYlSkNUYFdEaVJyJkJ3am91aERaIVhFZlheSHtRW24wLHJnUGRdeHh0ZGteJlQoN3ZkX3tbdDB9Sl5BWCpNbzNZZEdeWEhRZTAiemFHQHVaOUMrKjY+JGVfSDFGRkEhUl55cmJeeXJBWFNA'@;
put 'MXJwJmM0UClPPHVxI3cyZl5MbCp7byh3LllaR1h5d3lba15re01QcDRpcEk+dGBoPCYrbT1HbEJQKi9gUTdwYj5HW1hEeDpGXXtUdzssTm8zWVtXMFdPcFMqMStoXyxPOUBJUHxnc2d+VHU/JTdVWHt9PGFhTHQleT9IWzkhcDk7XTBzdjp8ZktmdCpkJTdAU1V+MjRAdnZPNV0xNVVvJW16XXY9'@;
put 'Nl5AbWg5d1o1fHlrKl4kKFFxa2hsOnk/XyY6Ik1xbCluaXMoXnhbNH4xJWJYUD5zJWxHVCFOSCJ8bCk/NH5oOVBMNTlYez8rI0c7OWppIXMqQy5XK15rP2YiUSVZRXF+YD5lZkFISUclRWgkOSx+N0ArNjo7QU0qQS9icX1HKiU8d3poam5AJnprZWN1QV9WO1ZEciklR19ERSQwfl1LcX1OcVl7'@;
put 'MDtXIXlkZm50MUN9Sj83c1I2YD5rSmVsUUh2IyhwJDlzZUFfNlVocWxZVjMxPT00RHVMeGpWQiJqKX4+Im5WOiorc3c4ZGg8OSY0WzIhelVwa3wuRy5bM0B8YX00dn1JWClqTH1IJCxlbHAvU3x0RjJsaUFkbm5AUm93Q2JNSnl+TD1iVVNlMFt3Liw5fj5IQk1waTdQQWtvbWJ4NUphb1NYekY2'@;
put 'NzpCelc8YnZ+TFZjZkt7fTZWanlecjAqKz5SSVlpa0B6OSFmU29dSVoqNk9RPTBER1lpWnpDTH5IPF1NVlQ5Ul1XPWRfaEg3dHU7VXtYQmNDdHZzOCNtdn1CdDAwQV9xJSpPd2JNLFolUSwpYTk/UWMiaWthRipMWTc9TTZOS3pPfCgpKE1EKjEhR3whTXdDeiokcmZRWUI/UVlCP1J6ZWtXR1lU'@;
put 'PCxxM2BhT3toPUxxdEgzQEJ8T3U6Rl03KXdIa3pQMCldMTViYj9weGhKQ153fmtqfS8yOCZSU0A3cGJ0eGdnZmNZeU5TPX18X1NscEpxUTN5KXo3OVAwejdlVTZhakM4KiFXYV1zRVhyeHpLW3QzYzlQJCIvdyg5KFZobzJxW2VRNEZlX3RQaUAycjRDNltvMy5fZUp1cmNbdjtIOitrLHZ6IzR7'@;
put 'ZTh1b3orbXNLUSlmL1JWLnovaz1IVk0/SFZpVDJbajxIUSxKYmRgdCkiUXdEKFpWMHJmKkJ+aHoxW2NfTSxhQ2RwT01NbSNyKVgyPkdwdEhSWjIrR3NHYEReVEVINXEjSkM6LjAsdmFSNlksLEpMXSk0dShpLjBJd1BpNkksXzUhN3YvWj1IcEw/SH15Jlp8ITFCNHojUE0sRE41alFENE9mRik/'@;
put 'bW52aSVJaGBPUytZelA9aVZWfilNU2kwN292b3pQUyw/N0gpeml9anM7TDg+MVhhKHc3TS4wU3pIK0kkU1dydzRHJm9BJS5WOjNgOW0+Y1pxRCM+cE8zc2k5VlouRFc/MiovUzNNaEBIell7dyl3WTErTExwLGJvcl01T1VbLjRLJU98I0w7KyVfXmNOTnB7dFp3bmV0LHtFKiskang3SHNlNlRn'@;
put 'Z01oU3M3Wl58b1s/XSxlLnosZl9KcEs3L2Y2Ul1ecV1hSjssJmtbcmU0SV57SSRbcExtJlBdb144LGZSWSZwIShKSiIwUCwySzQpWChBaDMpIUtPc2hMR2xvY0olUm08SDdtNDU0flZ9T3A1bWZfUl97WTZHZngpMkorX0Y8PUs7cUxXWDMzIWJ6V3M3U1Y4N3NdYiM/b2JAMHlgOGF7aStpcSkl'@;
put 'dEc8XUxrSEtoM11rb2NiVn5UREReP35WRiRaKV1+cyspUVUreFk4MVEpYUI5O0BkbV8sc054cCtPXy9NXWZeLiMlfEw+ZX1lM1lAM0R9ZVFMTiVpSnpyXUR5LD44ImY+Pkw3JXhTdWd+VEEzJW5JTEY9XVckITQ9NiV8bn5UOUk3eCZEWit2UCREUD1wdUhpL2kiSE1hMXJxUy44d3RwKCtIdTkz'@;
put 'YnIwN1skaTopSzxmaU8heklhRWZzP1NtSyk1JTxbI0dAfW88ZXdgKFRPNFBWS0k0OkREVFk1LlE2JDRdIlp3XjBgMihVWFcoS1Jib0tjQmYye1lrVltLNl9eQiwjZGBFXltCQUljelklWFN0NyVYe1k8flBdIUhyY2tudkh8L314dXc8eXo9JWdvOWleaVlbJGB5bF5fUypVVyNQUEx7Qmk9NmB9'@;
put 'Xzh0WzY1KzosOENuJlN0IWBwKWRpWW58Szl5Q150czQuSjF2djJraCZlIylrWHBeIktVaTZqPUZ9bUFjcHgwUlhlJjMjLnw4YHI/bGV7OW9ldCFvdHomcF9HUTJLWjVxI3Nvc05XZG0ycyJ2PyV5VSI/IUtGVTZlOTBuNzxYNT53MilaR1JnOTxpUzp+MX5JLytdfSMvT2JUTSNjaGxQTkRTKVly'@;
put 'Y3xPcVJfQ0AsL049WSFfLy9LNnVTWCNRQl9QdXZ+Smp1ISosZVtSblplOS9SN0BpNWQvcngwIT1QYzJGe1k+RUl2VD51T1tdKTpAY2FdeHY8U117V2F0OlFCTG4ybilwN3N0Zk9uSHZ5TS5gSUBYQFBQOF5qPUY4Ol8vWF8iSz5uOSlgUXZ0PTh3IkkxX2gmXUw7UDwpX1djTSZVZk4/IW9JWyZ3'@;
put 'ODZCcGl3cG5qPkg0TDYkXn42dU50Nz1zPihBVmRSNUY7VE05anpKd2lVUktuTFlnMkolRkhmI1pMJGh0MCkkX0JDQ2hvSUo3MyxEL0ZFQT1OJEJpNkFhQiRrPyk/OTtFS0s9ajtmT11sWnd4JjwmIVohIVtJOkQvRDZGU0dwN3JLKERKVz4+NE5rX3EldTUwPyMyb31qdmYmUmMqWnIyWzk7OlRZ'@;
put 'MCRITTl6Xkt0SUYqZUgjMXFPaylATyt7UntbTUUwOzJFTDAmQHF5ens4eWVALDtGRX09e3dKd1goRWRJJDJnRGA0ISpATDl6XjhgWCJWfCRfNCZ3Mjc2Tz9lejxAT0V5WzRAR3ZQLllRfm1KOWJiUG9BdSNrYVpVZlpXT0FZaiI0TmlnNGo5aHlCeTB1PHxffTFlLnt1Zm8jcHlnV0NKQmsuWlgp'@;
put 'JTkxcVtoKTJoIUBydVMzL2ghPDEkVG4qdmBKNCVpPj1VQCFsKmtUSnQ1cklhcVJtZTQ1YWZgaGZfZipZI0FDcC5IWDhESiZLSk9DeDZCX114QUhTSVc8aFpGRzpDL21oNHtiR0pMRGA9Tzh6cntaP1p1Pm1nenF4V2xPb2FOUEVpU0klb2lofEU/OkNLOSQ4dDtNVE1EdlF9cypUVFg0U0F+UDZu'@;
put 'X2xESj5FWSEsNURgMFhYRGBJdDZGS3d3eUF2IyN4VGVoNzBffC8+WEwvVlZXQEozTDEpX31nW1hMeUttX0x5KFhAI0xIeHZMRTgmLGx8QypZNzBRXXdJNHtXYzFNaXR2JSEkcCZVfXNAUyIhXjQ5Iz0kXUx5RFhzKlM4Qnc5OWswb2l4MjZjTGtvJXNlJVtgZi50IyN9W2BmP2laXShLam1mSz1F'@;
put 'ZS40XWBmfklNN304KWxGa2VQMEcuZ2F6dF5dUCJ9VF4+eEk6SE9naj5JYCNQWlhqZzw5K3MkSC5NPDZXNTBgLz0saDxoIUlVTmY4QDAlSTpbPHJUdy9JUys4LGdeSXM0Mmd9ZmkxNElLeU1USGN0ZTpZYV42WGJwOUBiV0U7NEdIL2U7bThmYD07PGZlXWQscWolczhdZCxQa1MyPVl8OFdQV1A9'@;
put 'TWYxLiMzZ0x1WDU+bFUlJk1YOG45WTdESnxQclYzMX1Id01xKkRCIThAOD56WENQZjFNbSpgI05reiJ6YEs5Wi9xWkRkREpKfV84cWp6aSY7QiNKa000dHg7elU7ZC4sbDN7dWM5QD1nYV5PNHZaX1Npb3RlNHA+bClqT3AuI1hmdGVjOT5sKWpRcC4jMmd9Zn1QT3AuI3ZsWl16bGBJPmxFSj5s'@;
put 'VTIsQ2okTVRbSz9pJSYhKTFtL3xPay5xWm1DVVhCSXQ7enhXeGZFO3k8QTBEVEtiSSQyZyFPaFNxXkg9aiRNVCxEbnpkaGRsO0NtVE5rXnxlLktVWlRHP01rVCRbWUZtKC9SJDc2bmdiJWdUeW1RXXYyfCZJIzZGTy9VcU5bM1FxJmY1WTdPMTk5SUZjKmwsRkUvfDNzaDs0XU18X0VZbSpEUl4o'@;
put 'MilZUX5DTzJyejtoXjNqUGt4MkxteFdCIUs9SHRBaVIraz9fSDt6L2AmeTk5MGw+PT8lNyJ1bWpBMkFfalQkNEhELmk8YVdPPTVJentUJG57VCR4WVUkUGVabU80SDlKL3IkY2F9a2RhXWYhJitdZCwhbiM8ZmBAZiRMZmg1MGhwUjQ6ayplKk01MDYwUnMlND1LRCMxT2FePCUkLDJ8SDl3YyUh'@;
put 'cWoxIjlYeGUsW1c9cW0uWj9mK0pOJEg5VF5RZkwqajV6bWZ5OlU/SilHRDlZUEA1O0dMOSU8VGs5cXBtOUx7Zn5JRE9+SFEvJCY/JUl2NiFePHQ7YzkxXiYjYXRhJG5qPyNNTUh3UnIvQGUrfC81WD8hZTRQWj53Tmt3TXtxZztfK0AhSUQpZjAwLyMmUjpJRVRIYzhOYV5XPUwkPWthZjg5Z2g4'@;
put 'JlJYOCZeJUNwODxFMjk5fDxESjhqO2Z7cXptSzs1RCU4JlpLeVE+WlRScn4qYiZDZ3ptaXtnQSgvWlRSclNtP2s/K2w1N3tOMi5IWDhVLkdnaCE2I04kdmxfL3k8aDtII2plMXk4UTkjOk0hIU9yXlgpbDJrfm0qTylsfm0yMHpERGxrMTgmYX1JVStjTCo1ekBIXTI1ZzxPcTVCMGo3XSVmZXZa'@;
put 'dTRWbVsjMCF2WigqYSRGWHkwIyYxbGUsPGtkbHc7fD0obFlITD1QSGhtVyQyWmVJPTxeSlM4WW5LKUQyN2p3Z0x1cX0oSkxCUl4yPV0jZHRQOUdkLFRudihpWmwhcHwzV15rKFVUNHhpTUsoJVNwW2FFZEVPYDYwIyY5ZDohK1FGU0w5ekdNX2xmdDtVflh2OV5dUDJzRzg6cDhZOShrTHFJYSRk'@;
put 'LH1rYztVfls1dzt3PnZkc2V5XjxMLzROaD07Wld+a1NzZmpVJWV9OTh5PnZkeDtVflNleE9FZ1Vmej0wb0xlUjcreTZqeDRgZjcwYHwhL1YwTTtDOmUhPDFJdmskbyFgZmpVZU1UfUk6aTxIc0VsfDg5NE57N1d3dm1DanR9clkvez5mO3YvRWsrfDBFNHQ9aGNjSXNmY1ZoLm57eyE5dmxPO2lN'@;
put 'SkxRezlRcyZ9IWc7JSZgYD88WldkZ0lzdmN9OHdsYnsoIWdXP2kmfkJTRyhmYGU0eXM5Ul0oWGpzNGBmKztoIUB5Mnt3PlBQejIvWXc8SH1oZl9mbFNxakU7Ll1xajojPyU2TmFeTF85fDh5ITl7Zl8rZnRsYj07biM4bXlNLkEkSEZkLkthLjlsYislZkgyciRuMGQlQ1tqRlREdz51b257dWNl'@;
put 'VDIsK0FOdEI/JG1ZJSNkY0NRL35Xfms+K2w1KUgkTXk8VFA3JDVnaF1TPWQ5UntIU1J9eTwrU1N7SFNtSFluQCMlbF1mO3VoO1JYcVVWbkNoMjBTc0pnNmpuI3YuaCZpcHleV1BaOHRZRiZRPnZkI3BGZGo1ZGg+PTYkT2tgPSpsSTdLI0F2XWpme04kOll8cT9DKWY/NDBHOiwsejFZRCgsezxd'@;
put 'IzE8ZitPM11abWhLQ3B1Tng+WThIQ0Vnd0xhLG0uajUuSV57TVRdKDVUd3hhfXtwPHBkYGBeIW5ZLjwhKTJjRHU+I2QjTm44OUlybXhKI25OayZKSCM9RU87ajVvdiZjJGslK1BUVzhoIzxmXSMzdTlYaE8jMXBzZTpDTTNKZzs9N101eypRSVkuRCFPW1ZXL01hbENOPGZhLjlsMnFvO1JgIWNV'@;
put 'LGtHZWgvTVsrLlkiSTJWZmolZiUrLiNYbSJKfiMjdTZNIkR0PkA0ZlBMYU5rLk9Xans/QmRbZj9lKllRfiVbXjhdKDt5KlltS3F4STcqKWhSXTpHTVleV1BtQmg1Mnx3eCx6cns1MEArU313XjZgZC5XOD19XmZdI1FAKzhoZiNlSCMhKz4wIkJiZShaTSRfRmc8YlFhLDZMOHF0aUt+U2U2XjJq'@;
put 'OEB8Q1JeaUpOJCJFWyskKXwhMnNKQi9mW3F6ZSNaN2pKKn5UaWV8OEBmbE8oc0gzTkt2Q2ZZN2BreiUyJCtvYmxPZlk3YHUob2I5K0I8QyJjRytoREFYWnlXTW1CdDpjRFk8K21TWkd1eFhaeCJoO2ZydXhKI0p3RXNDMnEjbW9xeGxVWForfF9FcWhgL1YyNlpfW0ZaNjVKJX5Zb3pEVGw/LHgs'@;
put 'Rjc2QDUzOldNdWMrI2BbeXlBS2tQWUs9IygqdzpXRUk0ajBQKS5CRUVDKXYoRkV1dDBrbUJFRURgaDJ4VS4pPCFyXjhlOFFWS0x5MEUjeyNNNiFBdm1uU3VXW1ZXakRIK3BsZT9TSzUwQCs5ZE55S1lpREdaKVpnUlNlMXkoaS9Ocyw+MXFsciUqQGUrSFBrdDpZPTRANU8xLFNTRGd2dHpbZi4j'@;
put 'emxNO1c4QGZ+OHR6OStRPmpyNk5hXjkhenNXV3MqOVROazMiZmpDTUM/fHg7NX1FOjcqQDhxV1BIPXBsTEc9QGxmWS9nWF5xX2pSR0dTOVVLdCglZzdlYHNVdnUrXTxJRDkxekFZOCFfenhwfFhqbVsjfFpddylqUjVsM1pSdCYzYmRmSVo3bF96UFRIY2A8YVdfPUZQUjg3K2ghbmMhU3ErPSQ9'@;
put 'a11NbSomKUhTYG1QXnNMYyo3WHBMX2YsNEA1IjBxbF5jYlopWkhTbTA1Uis4QDVESmMmKmwhTiJEYjNrJG1qeCJiclBlNHtPY1MxKVlPMmduQCNKI2duS35IU2VoeTxyJF9tPU9ufU9re0wvNHlpOytWUF5Vd08uWmIuSSQ5bT8xfThFJWg7OndFNz5dV1BhUDc6ezglPDV7czptUz9mRFlvYDtS'@;
put 'VEpGa2V6PGokLyYheWxgfDhQSG1hcHo9KCVmZUMwcjtSXnhNNzx5aGJaPCEwRzNqZzNqVEt3R01RXjhiIU07K3dNbFplOjRidjVvIXlzK11JVUJibyRPa2l7cF9nR3UvRzhNN3d0KGlSRXlldSxnWVBLOVROa1UpNSR+dmVWb2U3andnU3BdaURuYi55dmYuN3hEIms6QW1eeE8ve2kueEtUaz9C'@;
put 'RSldXzJ+aSJTckBXPiY9PUNJYlBYekVPVTlTc18pX3xjKjtnQVhDbkxOVENrKXpjYEQzXXZdK3ohWHU6c3dLQitdflY5b1JoM3pbeDdzUU5NKkZxSSU1c2UyaE90PUQ6V3skX0hIWzBSXUhYRmA2eH1wK05zQCE7VjExKnYqXyN9Lj1McXErNz0sKDg4RXZsRW4yXkl6KzZnLEtVSmNKO1gwKSpW'@;
put 'PzZZK1RIXTMxfVJWP2NCPDlaJlRjdEcvbzE6YlRBVytDT0JlQipZKlhiPHhUSWk3YWw8VndKRXNrTj1iLCYzZjdKfWtgbGEmWkkyWE9JV24jXiFLVmpqUjZhKHFgXkMhfGhZUyxJK0VEdlhlVHF6QlphfV8ocSs9PClFb1JHXk5wYG93KGE6bkU2Zys7OklAenI0RWopQCY6aENXVGtdM2F2T0tT'@;
put 'OVFtVmwkMGA/Ij89K3YvfFtaVjh2I2wyIj9zOFM0UyJ1Q0gzdGBpTz5nK2BXJlR8MzxFaVZwWmRvfV95VDdUMFNMbHdnM3hyRVcuNUVaSjxKTjF0YHxUfmJVZWM1VzV8eThqRSJ7Ji9HXXJvOVF4fnJWajxeb3N0QixiIThhTl1YTltJcG5BdFsiQHFgamlbMkVGWXFuJDRLfUtrPWdnRGlSW3Ju'@;
put 'SHUwLD4qQit5dmJBJD12aDA5XVFfTylvKHEsPlFCNWV7M1FCc21HQ2YoZyhxZCNnOigwPD87ayQ4fUUiUkJ9aWlVTz5DS2UrOWduVn12NV91P2BBcmgzRUR2SkAvMWR5dnNOb11Wc1JjVUNVXmVaPVF3Rnl1YkopQ2BvdyhTNmE1aTo/ekRWamArPXpzb0VvfUcuMnZoRDo9cSVHMWUmTW9TNFNK'@;
put 'UFtUaiZSaHElPDFCNko0RylQOzcsYUNJeXViNzwzdTgsbHhVI2VranxsaGdFeEldJHR8c3F9NzRKPVNTOC5WL1M0PHtPS19QQ0Irb3tHdUFqVXJyWTh0QXteTHV8LlNkVDRvRW99ezMvPzp7ey5MYTNTeVldVihhXjgyKGlNQTk1cjRkRU5TKHdbNFApYEBHeFhlYCxaezt0WCtMajR3YSUrLypK'@;
put 'RDYxQExyRFdWMlAub1taUWsmXS5IaFVZS1s7KnA2JCpoM1R4QGp5OUBKKDVAbUxqYU0seXg3NFN+IyY1RzJdL2JmfFVWWWxnZVAvZVQmfURvWUZ6bWMxb3BXelZDO1ZXMy9uY3NxPn1zTyk1XU5tTHEoQyxEMylSIjVAJmREQzxfcEBiRExyaC8mZ0ooP11HMyspbzZiTG53PnpQQ2xANzosVkNG'@;
put 'K0pPcnZFIjJ1eGQoSzo6YSxpbDQsL0omPUxdLlV+Mzc/US5yeTczYH40RUVMNWlQJnJzMTVqZ2ErdVpVWkl4NE1pLCE1eFlDc3xbMjQ3eW5AIz47MVdvc2NdezE2dUk0PHV3N3Y7X0ZPcSl0IUY9NmdTP11IfiNecEM8X3ZOUyNlPC5KJWdxImFjVyJRWC4+fG0kW3ZFejMyMWk0bTouYlImeENh'@;
put 'RFs0eF5geFBUSHNgclI0MTdFNj0iOXQxUC5SXXtWP3c0eW5QNVUmTTY4cC9KKmZ7MklbVGpWe3ZSdz4sTkN0QyF2VkVAaFdFVy4icHthJFdZaTFhajV5Kyg1VjF2ZzZ+S0tdQk5iO1A2cWBNOmAseTtAKEc+TXNEKndzLnslP1twVCx5Vj8xbGZkJT8jI3xeU0lmNHpIQlRYQzVRMEErQzVpUm9P'@;
put 'dm45JWBSWjVVM214LlArVmM0QHxWeVsiR3pvYX5+cT5mVT15cHp7MSszIWlwbXJjPUZJOUNYeWN4KUhdOUUuaUFKbzlSeVlDRVIpYkAmO31yQVJZPGZZeDwpbHdfP3x2cyVZMStYYHk8ISFaUDhyJH5PfHMoMT4paDBiZTZINHpRSDkqT3csQnVINGpJLlouOz82d0huKSZxYDclfTxWNzhlcyhb'@;
put 'K31DVFMqdSE4MjZpWGY/NFU1ZEF7KCE2SjI4MVJyZi5hR3dwR3h4WG4kR3VkMk5SSXIqK3BZWmV5U2JwTVtfNntlXnE7Zi5EcmddciFfW0pGK1cqMVFycylzOCwxS3ciV0FGRSV6YHElQnIiZGZwOFRVTXBWcClSP1QsX3FeS05STWRnaSJ6KTh8fns7KysuIUlEL1ZBKjk3O3lQTSVjRjB+UEtl'@;
put 'U3xuO3pnc3VmMElQcFU5K3x2TVJ0dzxtKGFud14jdD94WjBHdlhlV0VIRng4SUVZZWhTWSs8ZS9eYytJRmd5RSZMUDg7R2BwbVRFczF2JEIhW151cj8scmdJdVowZF1vYGUlU3tEKVhKYmk2b1hleERoaWhhSUxkQ0heSGshVGpgcT9yOjsqeSxlREJjN211blNVelRzKGRHPVN5ayo1NG8mcU4q'@;
put 'R0pncE1wUjYxJmwxbmBOYGtnJGF5W3RzT31QTTBEKn1YZmVpKGhgL31nSSQhRzYqSURsLmtJciZhKlMoJU0sfmh6WTolTVlXMypZekZkRSpAeSx8c3x9MVBNbyNTOkNPcz5zeTUkLmN9ayxgUFomaGtPYT5mUzcveXksaU9AUkMsfXhaIiRuYEd+dW5kfHQmKjhdfmJZVWRsZT95QWlDN3RFdFJF'@;
put 'aGRgUj5jWiI/OGgifDZ1ZDxyN0FOJEJWaltiPSsrS1dAa2IjT3YmcVY9SX5KQnkocUozOTtUMmZfK3Q0QXNVUyNgdEpPZWZGTnxxblYmM0ZHSmFtSU1YUzxFM2gqd3UpJjo0SFVwQFhDRjIweDBKOEp6MFU3ZFR4YHZTfSRycVh9SnpaWCI/Xl1bckd1TnUuMUZlRjhhJVlzKFZyI1FoYU8yKSVs'@;
put 'QF5PSE92UShpfkEre3VTaXMpRHBmTm0jNFJza28oNzN0OyZEXkBsflRmOjNvYDkkakQlOVp0Il51cGdncHlvR2Q7JFdTNTlvaVNpQUNBQUFmREtBbEJ8RWVMZWNlIX1BNmQrJU9LKkJJSUYsck5hVV1Sd2YzMVZYJSphIklBQUFBQUNBJUFDIlg2KEEkJW0lLyozYVJySm8ydUhNeVgmJFZYVy5m'@;
put 'a3xQdHREd0lKRUJBRHJGU2pIZ05hRTNCeXZZJG5iPHN2fk5qPFN9bXpxKEx1LFtWWClzJjpWTlQ9P0dzfk5JbWA+M151K3x5MFJpKjc+PSEveDM5U3xOT05MNDN7MiNbMkU5YlBWJmYzZUBSV0UscmdnNCZnKXZmLCxFIV5lTWNoPz9KcV9jTWV3KkFyMHpuV0R1YlAuOm0yMCMsRX1BaGhRRldy'@;
put 'YjdhNEszLylWQTViQjdrYXRpS2ZWMkJQVTpgPkgjKzdCM3lCIjZSXUBXJHhTbHhMNE9RaX1bOiN6ems6bWQ7X29kdWhOfXx9bHtSfn0odVtrOTo5a00iSDpVQl5MPiFKfFFaVnd0Kz42Z1B3YjVBI3FOe3N+L1F+YSNsQSpgP206fjYsUyhsRUkxTl9zVUUhdCFEZVQsZ25KVm4mWWVLIW9CcnIr'@;
put 'STg/RUZ8X18wSEluOTlTLilfP0grcTJIN1A3VCkvc2JMditiRH1TR0lrRE1VJHhsNDhhRDVuY1VhTUEhIi9QJiFzeE81InM6fnIsMGo9TnlMMldYY10zM2JnPGtzS1Z5TkN6YjxrTXpXPlNxNG90Ozs2WjV6TVolPlNETiY8S1lZdXkqdyJAOV81OjUxd2hbazlwMjtqY2BrNkwhZEBQYVA1UWd1'@;
put 'djxfKVM9bSEiI0woPHVEYlJGWEAyS0ZBcEo9JUwiX3c5TGUlYUh3WnZgNU0paGwyNUZyUT1QdV8zVFNfcWhWd2c5fCJpMnEwSVVzUEZYM0VqOzRGIi4hU0w2Ykk6e2JoJUcqOG9IZjJ+c3dbQyxnRipOMkxfViYpW2RaKGome0wuRztTUkEsWzchemNmK21MV1R+PDhgN3NGTnEqVVZ1fTUhdW44'@;
put 'ZGlHcnk4bHVzSWcoai8xMGxgbVBROmRaRjpUVVVFRHJ1ODpPSnBzJnswJG0yP3tPbjFPOXdYRUcvXigmRFtpYUwmWjBTO3pGdkwrOnE8dTBRcDddLnlHaUY2LnRxN0o2aTIjLH5nQHFzIiQxLykifTx4b0I8Im9AdCFBRVA+Nis1YSQxJHQ4fWk5aEs3RDBUPmchREJbR31mKV85UTA3MVsvQ1BI'@;
put 'Q2JfOXo0JDssQHN+LkZqQkNpUj4lbDYrdEwkTz56OVZ6IVNbTnZnNzpGPzV2bThuIl17c1N8b2B9THYkdms3XTEpSW9FRWFuWn5WJGd8SVJ3Ojx0fTlKREp3Q2pAQmpOPGwobj1EPCJTPGVHXiwwWjRgcitTYmRlUDUjR1JEOGldT0o4LnsvSU5ZLDsybWwpN1QmJiwwYitfUW58cUp3THF+XzlU'@;
put 'X114WUFmV0l2Vk8xUjEhdj5ZYkBTdTxhL1ApSDV0MGNIP3w7VWVSclt1elU4PjZoVXg6KjtGTlE7USldUX58VVpXbk5HM3FnXSFNcEk1XyQlYiNaPjJSfkYvSEpuKGZrX2VNPEV6JTIhO1BETz9ZVEhrOUkwdV1+akxsJlV5Mzs8YGIuITQ2QC4iPkNlUSV4KSUqV0wjVGkpb2UkWFcuSCVBV05R'@;
put 'MG08cikwTzw6NzVfZnhSeiUuN1QqTjhkWz5gNDtyTWtHO313fDJiel9bNENtWXdaWH5DP2A3Uld8YSJSIn0zTyRGMFMsb0dgU1E/KnQ3VG9JQzhlSy5WRmR1OipvZF52ajUzaHFVOHZXenpHZjc3T3tOMiMuZnArRkdMVi9sZzAjZVJXSWFnbmJxYE9SaS5pczYpSEBPbndqcDJiUk4vOUI6QSVd'@;
put 'LEBEMk5xaEVVYkQ/SStCJmVyTmUoXTxqPHRQQlU/Tz1GaEZidEIyKEJia1Y8JjBFanluIjk1SExxWzBlX305L3ZtK055ISZDO3k0MU8pPT5zenY9TUc7OUwhJHRxe2F5cUh0QUAkdDdNYGFaaXsqdiNhPW9BdilYTkVMIy5qJndDM2lkckFMXiZuPWlORUV3Mk0xKm5AeTdbbl08M0ttMnpUNHlM'@;
put 'VnN1Smd2YEY2dyRUeE16U2J7QEVLRHVJb312YGZQPnJpKThJWWxfSUVgcng3YExWVzArJV5AQWh3Tnc1Y1Q+P3poPCw/bjB0NFFmOixCbjVUNCR8ekcwLls2U3QuV19yKi5qQlhqVkk0O04jWiR9WEMoYF40eEcjM09xWW9VQ2B7SXYuU1t4JDhdfXguPVRZfUZ9JHVKMVNLW0J3X2FdKm1tLF5S'@;
put 'Si5BIlBXbUtsekRYQ1sxIlY0U09wa2lxYXNNWiEmZlAuUkhdWC50dWcsNzshVXQvdXB8dlUlIU5iZFlPK3VOemcmcHtmPmt4bzZyalsjIndAcXNReDxzOVAle15xJE4kYm0/ektqOiZ6cWZpVUxgTGN0TipkQ3ByXj54MHIqWHQ5WzdAbmRXVm9JWlFVJCUzLl5Ua3l7YEAxMUssX1JwTHYsSz91'@;
put 'IVROYFh2MjdIO0xqJS87NlBXQ1pNInZFZW51ITo/TyxYcTpiL3NpNyk4X2IrM2hdekQwelskbyZYanMuMD40YGV4SHN8XSkjYn5NcykxX3dyXUtDKHArb2NfOyFsLDp6Y3B8a3l7dzdJVDcsP35xZCwqOGxtSi46c1NBSz88QF9oWXNTaS92TUUvaDN5UyRxR1RDbWVANCVQUWIifD8kXW1qVlFO'@;
put 'ez17QjxBNWg5ZHRVR3FbbXssIzMpN11XRGp8WEg2WC9wRHd6W3VlV3dydjY9TV5eeHBmWWNLSmA+SiRrPV9CTCN5KnpNL1NxRntzSSNIWkU0I3s+a3RKci9GPz1qSkBCdFhkIW9+RSJtWkkwRH5pUSZAMiFHcV8/JGsoTkRGKXIocFB6eGU+aipyUUQ2eGIwJFIxJUl8UVBSRU19RyRJR0E4Ll5C'@;
put 'IjpzKj1oMXUwQ05oUVshIWgzOjlSUygzISUibDksTmlTdShALmVFeyNMLCFsbn1+QzgrZzpINWppTUYhIUhiaz1gKzBIXnc/Xm4lT1FrflM1VEByI181XzttdGErRzVqVHxPfDVxTWxsTzB9NilYVmxHbFtrOSpDLkxfYiN+YDIkZ1BAJUt6SWhQRjV+OEFWTjYjODRRe0koTTg8USg/Xz9yckk2'@;
put 'K3U/fkQzbVhQLnkoe2E1IiFbNEYzY31XeC9UbkZuO0g1ZDFXIUNIWEghOng6ZzVGKUlIMSEwayE+fUwmc3kuTDZOLGZ6JVNDZ05CQj09QjFSKUp4JVI1YDNqLlpTaCNubFduTEQ4TkFEJjlFeDJYYzNvXWlea2xmV2dmSDk0aXp2byRHZjtyblpdOlRbW09WZCZzVVY/R2h5c1hKbyN3cGxUOkAm'@;
put 'V2N8ZkdXLHxOOVVQTVUuUWlpZHpAMlA3R0RQdUQzPyp7YWkvMywlT0JHbTN0STJiTCE6V0l6I1p+WVM+TXg9JDdUVFF6Qk5MWk1oUWZtO0VgSiRrMEl0cCFzME5RZ0FYaTE9eVdTcVIufXRJS28+TG99PGM7dGN5eko9KD1EcDdPSz07UUFANUJrMG1DbWEoRnI1d2opQjs5NGZ+XXUmK3EwbyFG'@;
put 'YiVpcF1fJEhfWWNyKkI+V15OPVVfQmkrX0A8K1p+dWdrMWVsLmZUUkZKYkF5MSkzNjtNSkBMTXYoTVN2ZFRHRlUxOWs8Y0VLPSJtVjUjKnVxb0dENiEweXJPNixvd2pRZzZIbFBPfHpZKypXezpYX3U9dHxUOiYzUyxyJmEvODhjYVdrdjE1fG5Rb34qaTp+I10jIXs7dGJCeStYRHdbajkoZEc2'@;
put 'MmQ4KFEwSHc0N0czfXJxPHY1KzN8fjw3RiNZa1spTjRDZSthWHtPM2gjIVBtdk4mTW4+Oi5aPmZMS3g5SEQwfDB4fDZST2RVYWwyX3RII3h2Q2R0PmwkfnpwfXNBYFFVSS4wSUtIOTt1OG0vOVF0VjRZPUEwP3lmUzc7UmwjNHBMeCJNQzJtLCMzT1lsfEk0T2EqWXpgQjM6Oy8wWEtFezNjXjFx'@;
put 'emhFV0J6M2RWQWBTOWlYbjR3MTdFZ203a1NEN2xTKnBDU0BFI0IqamxhTSsvKT0iSXN0Yn1lVDIvfHdQMiEjTyhIRVE9UnAmeXJ+Pn0+fGxnXlYwYzJzTHJhc0NoPTJxRkI8Vk0iWltiRnxLMjFgS3wjU0t1TlkxP21JSXk+ODhWOjhtWExNeWQyZUUqcSleRytIdyF6SnhtVSlLY0IsaFooaCZx'@;
put 'QEslcXhLSHUuJVVCKlgrJltmOT1NM04iRVJbTndpMD1GR2BoV2dMOzE+azc+T25LMVpGVnkhfCtMLGtObjxxZXZqals3dC48diV4XiZLIUFtfFIldHlAaXFiKDlaKT4xRnZiZXAoWWRgRl1udVk6MX1MeFohdH0+O0BvbHErKUdQS0tYK0V4Vz94bSgkY30oQHBlcSxyTFhmNTcpM1c5JlYiND4o'@;
put 'NUw/N20wUSx7ZDQuYnFQNklNIWpZeEI7VUppNk5ZenRGfFI/aFF9LHteRDZtTVR1cGhlfCpAb09ual5JQG9vUVEqKEtkJGxea2tfPGN2akVpVGtoJT5peipHUn1ObktVRF1ba3YzJENfZj1udi9OamAmXU0qYX4ibV5wTU5tIV10PWhWMVZzQno4VWcsRTN5UiokRXk+VnlEbllyKXI5b1tJUSNX'@;
put 'IiZ0NShHc0guS3thdzskLFBZY1g7KHckayVBMENQK2RIPU5mI0YpaFRgQjgiVDMrZzpQVm45MntXInNId1hqPFEjJjhCdGJiOm9Iays2NlAuemwlemA+OzNaZUBDNjl8WS52O20xPVFoQkFHaU1DSmxdSnhOMzVWQk9iYTpOITxGaSVEcWB5ODliOGBpdFF2d2NXK3lKV0xicWohSFpWZzV7Okwq'@;
put 'VWlTJn02ZXJkSWRCRHMwJlpJT2FCSil5QCshanhNQFJsPFJwaVpbZWAhcVMxLkd9MEdfQ2pwPXM6YEo9PzhMZFpwaiprLyNNe0khdj58PnNCbTFWbWo/VEhMQlp6YFRDZ1puaX5EYTlWeTkjMjFaVihJNzN5VDAwQzlCfm1gMTg4QFVuNT9aVC9PUT9VYU12VlpyOig5JXtvKThqcD1KZSkxJkFD'@;
put 'cEk1JFo0a0xTRyhuSldyOHZieC9sZk5QQEJtdk9EUW8mTXgoP1dJdVNHe3A0WmNNSTtJdzRwUCkuenpOK25lcnByaFRUSmF+K2UpaztDWjo8YkoqVTteaDBTS05BbmZCRFJ2ci8sQ11BOFBsdVksOSxqNEVGZCNtMVhxRD5kLz5dQEdWPE86X0dCPTguXk8oOTJPLmI2bSkpLztoX1NNb0lPcjNd'@;
put 'QVE9S2pZKEAzKDUzdVlhKlJ7aGI5K25tN3pKUWFRYCM5PjdCImNheUl1WSErWCUyIlhWUS8iUGhUPTtBVjAxUTlBYSNla35NTk9WUDBnK2VFOVQjOW9ZcHlVOGwyMnMzNSZxTDBsZGE1V050NUw1O1V6JWlxTzk6ZiZAeSltJTNYZ0omST8qYC8uaix0ZGM5UC5pQH5xPXRyWVJTLFFWVUtaTnx0'@;
put 'ezdmLkNldygrJi9OZkUsQztpYzwuMWYsSkRFMldQMHp4a2Mhblh1di41R2RSRHxxXXhKb302LFA9MCwzclFRengpRHpUOlZPSEZYP1ZvbHJ4O31AeEtbbUBjcH0vUm1qeEpGLmokcXhQX1EiZDNWVCVmayh1VCpKMXhKc0xPRE1xL3JldnYxIU9AN1ViME8oYUdwYFBJTTkkK20qWzJOJmgzZmZC'@;
put 'TDcvaixOWzE2ZW9mP3JaJTVte1o2Ji81UU4jNGowXTkxUW9pSHRXUlMzQE5wSmVqbE5qNzd9RVgkK1J4KiEoMzt1dWVULzxeeFEpNXlpdTVRKERnc0hDfFRnUShRfCtQcmxjbER2cEcyLiI+KHRxNjVLd2JdRllKLyZ2dmxdfmR8RVJmdVN6bTAsKnQqXiRMbUwvRDN2NVE1aDIpbyFrdFk7dily'@;
put 'eFBebnQzYV92bk16b2QlPmRdT1czOVFqcmdgckVWI353eHBSMyE2PCgpbXpZQ2ZeXW9nOkM2dzoxRVhLXlFrXjUhM2hbWyUkWlJGbj9yNkRufDZlUENiX3FHfWV3aWcwUlBQLz5YKiIrYVQlam8iUz5FfFdvV0l4N2BAOyk1KyFVciQ9RiZdYlh2Zmk3U3huVjJiKlkzbTJFdz9oTSFJfSFFK3gj'@;
put 'OnlhWiUscn5aUmJZb0lOMz9sNFhlfSw5NzhHZl58UGYmazY5TG9PKi58Vj5ZTGUwSWFKeHolNVEyWUJZSU8lKn1meHMpR087UnkyfXBVKTYkIUxHU31OeWRnZF9SOT9ebWM/b3BoPmJfS2FmP25CPj5lSUEzOmNJeChJazxAYmR7VllAMnZFeyExKGlSbzJrWWt1QExCMF47dGteT21vJlZLM2t2'@;
put 'bS9nfXBiKCloJiZfNnFCbjwieUNUMWRYP2osbG88Q2pAeXk0Y0kzJntmVFldbFNoSjNyS1Y/WWJ9bEg3YmhfMHRDWnZAPiliaDpeMThZam5NbyE5UzZFSzlOPkIpRFAoW15WPTBLcDk6fnEyWEhmYmlMUVZCaEg3NiUhbmNIY2NdVGN0U2Bqejg5dSxqakdOKWZGS0EwXyIpR0Q/YlJhbnc2X0s4'@;
put 'OkA0Z19leXsyLGcrODheUG93bCNYfEFOS0szPj4xYCFaSlNfMDB1IkhAQkI4amxAR08lW1kvVyRPfGhzQ3FOLD87IjcucFo2ZGxPQUVPIlJmaCpONW9FJU90cyo6W1k+OFhfUExITVZwZXxMSzdLPFdmYT83T0RSeEhLaVJrR09DPGYyRWdla318Syo3TWYyWUF0W0c7LjomRSZHPSVGQCV7WWkr'@;
put 'Wj8ic1tJczFQJnwiUjAhfl9yMDlvQF88WG9uWUtLOyZ+dFcuTDU1JDdobiw2XUk3RF8wcSJfUjc6fUReQlVgQ2V4ayhVVllbJFElNE4+Uk9kek57NG9vKCIoIWk/RWRKSkxRVH5OJGxfZ2Q3OEt2dE8yUCQ2Z0oidmQ9NUxybGZ0cHFuMkw0R09ERlJNcUBOdyw5cigsel07NmJ4d3g1O3FhMmVK'@;
put 'Yil+VkJkYit1RmNhVT8zMz9rQHFvRHlXNHIjdCElakUxTTJzamB8RiR5JHEoanNPOW8qXVJWaGMvQW1SdzUsU1MjPU8lNSR2MzUqWiledWc9KCFYfC88SXJKKlhCeltvWioyQXI2RVIoZnd6RmZRblt1LFNaKD4lYHV6LjhHa1csMEVlUEpYbVd4Tz5tOEJ5OH59O04jUGYjVSViTVhfNCFsVjFb'@;
put 'ek1ATHlMJEp4eE45bXwxIS87SHZMYHtVUy5Gc2lPXyVrcm8/SXlqVzF2RCsyZUB0VktfcDs4WSxdYGwsPj57QC4/XXV+dz8pM3osa0xHR2R9aiRJXUdBYkl6SEE4VzB1TUs3ajl7LlJlX2hWblViaWczI0ozUExmXWZnVyRYVDtZcCt5YElWZURWTHA7V0B2N3xlfn1AYT1BMXNueUpJO1piZVlm'@;
put 'ZERfWEA7Rl0pelFpazJqOFFLY253KE9jNnBSJXBBKzZ9R2h4aEtOYl9VKU9GR0o9UEIxUz08Uk9KTmQvY0hWYikkWkU+USFGak42KDFwRSEyOjMiKD5VSEQ9W2Y3QCpjK11EbV9sUmdzKWFCbFEuVyZhTCNZeFpXb3k5WWEleyh3U3hTPzU9STNwWTN2MksiU2RjLytAOEN4KXBLRWRNWTdGKGJ3'@;
put 'R3VsOSZRQiRFcyJDfnlAJHZCfmh2QypTSkRPI2NdOXF5PyYkIy8+fU5Ic2hpVWVaS1MmeEsjMHd1KnRZXUB0VmZlOl9MOXddW0NQS3QyJGlsK3xeVXc3Qi5uLlsueU5yenpmYWpHY0o0fCQ7dz92a0g/OyprZykvNE9aYTBgQH0hQl1zY0NycGRUJWQsW3hbalFoeUFjO1F8N3BXZyxQT2RIV1R+'@;
put 'NUIlWH4xRiJWLFk9L2o0ImMwRk1GSH5mIWkwWTowQSpIPCp2PD9+aVhWQ0RTUmRaPTY6XylDZzl+aFh9ZktwT0okKEREaXM7K0lPI1BLfmVdSGNMWGJeMC4sJD0xfGBNNkVCLkpDKWE7JDIxaD5EKnJxKTdtUXgqJT1sfGZ9THVTXSJGVUJ1bHM1YDI5bVV1P0JuMkU8bjAjZ314KHNyTSlZRHc4'@;
put 'PEJdMGV1NGJhXlRJP2o+JHNkWzo4ITs3KkwkM2tFK21MPyE6Xzk4KDI7dGp7eVNKWHIwc0R4bTJRWVZSUTNLTT1GVEllMzkmSilDYVFnfGwyTytZVGMqQ2B5M2NeP2dxM25BNWhqclpMUDU9VSZDfj16WT09dVkufGlRJVIsODAjY3MhNyNuRWphW34vMm98aHgoXiMlJnRaUzpIcm0wUFkvemow'@;
put 'dTFbTUciNm5SSHpzP2FQL35EMF5xIWRTfGxJYy40X18qO0Q7I0hdW0VQbTE2V20zMjlVcWkxbEBxdllUI1pkKyEsQ1o8WUlOZXVqXS5TdGdbQGtsQGoqR1pGTDl5QjR4KkIiM0tNTU9RLmlgbUxsL3F0PkFKTW0pdikyQzZvV0ooMD1vIVAlPFc+dFJGTy5rbT5DOXh1QCIkP0EkczpvVTtAVVBM'@;
put 'aFFKYks1Zl5tNkhMTkNKUV0vbG5tVVVKVUlZRHBDMT5Kfn5rO3F2PF10Iz8iLHpfVUomXjY7byRMZWEmRzhNbWQ5ZHYoYjZGOFtsTWxuQ0MyYSo0ZTBvZWx9YnxPV15gdFRUPEJFOldCVV1uejRWVnxUXjRpfWxwTC88fmQ9NypUZThkZ2c9TVZ3JGBrQ2lSUEo9fW96UlpEfnFjPF1iS217P2FM'@;
put 'SFRkSWMsfHhieUdyMENmU3goSCRhOFNjQmxIZmwsSV92U0I5MF0zKEY5XVIqP1RIMTlUMSVmckF7X0g1a1Y7fio8SEQoKCtWQTRRWnJfTTddWjREZXdqaWd9LzI/My5BQnNTR0ZLVSs1bUBKPzBQJFVPN0hdckhYQztjQXNFSE9tfFpXWG00WDxGdjpLTXtoI3dSbm8pR3NYNixFYEV4Ky9NNCFK'@;
put 'cm4yKmgjR24rTnkyXltJOGchWUdPP0xmdi5qPGM9Qz5hUDElbF54RnwqTj87aisxVUMxezFpdHJRVn1bKVlvWmpAVzoufU40cnxmM3Eve2IheGBEcTkwWV4oWkRzSTQ6YG04bVlMJVdHcHs2aXFOO2xpUT9kaEVFSztSQCUoMzUsRmFpJDJ0dEJTPDozVyZFV1pyVXZAdyM9Qy5vWWJ+PDhtRn40'@;
put 'TUpUYGAwSTYwKzV1MWwzfGd+UG84aDlwSypuKFBucWhFbmhbZ2h2U2V4Nj1ZbjRCXVFHMiF6MVJteVlCckFVYGsybkguJEdVZzpwQ1B8Szx2fmRbT0wpX1RweXkubjowQihALlVfUm19elchT24xJiMuPXQjMiZ1eTRpfXVffT5GfiYmaiVhQ2oseFVNYDdgI3dOZV1QOmNRTDRaUj1vV21CaVpW'@;
put 'NmJ3PDd1XnY7JjIhQkN2IVttLEA0d3VUbV08dFk4MmFmVlgwRm4vZCJ3Tj1ZNm9tOGoqOmBIR0x4M1UvKS4sRjJSMFc6VnNbO3NnfkVDITRHTldneExGK19sLFFFL1d9WmlVN0leZy9WfGBkcUk+bTFPTUE2JVRmTSZqOVFpKV1ZTy4sdF0obFpGNmVxNHRAVD5AOCpvTFA0JCo+YWwmUnUlNC9U'@;
put 'a09pOyNxJW5Qdi5WNkYvMVhuSmNBUiJZIj9ONVQ6NiQzaVVjOFNZUl15JXV+aH5zQEU6TDwoeWgsR1B9ZnI1LEt8JWQ/VndCSkV7OFdPTy5FVDFQdFRuIUlDMUdJWDNQNGlidDtgLztBP05FcyF6Tj94N0E4NzA+cjZkbE5lMnIxN0RKUWtVfCNZOSFeVUREWTxMX15eTV9fcEVOb3k6M1UuY1ph'@;
put 'WVdaaXR3MnB6dHsmdi4/NllVWlFkTyhPMndZSWQsX2dOfGU0LlFNZVUwLmk/X303QFQlaHhHbUc1al5mNjFAWFUjfTpzW1AkMChBKnVtRDZVckshPkNOfUJDT0ghdGpjfnlWLCN+ZTFQaFowJD9sPWdwYH4rfU1rWCVDTGJjLk4+dD56PFt8WFQ0ej5aK29WaEN0S3JDXyooJDpLW2pwJiQ4JHRr'@;
put 'dTF3QC9rMDtLRlJKfFc6O0spN3s6RCNWKG5DOlR+PDRxWTB+dklTMH4oWX1KSU0mI11QVix0L1ZDISY1QmgrSEoiZEQ+SmUhW19JZUw1OSlUciMxUUZwJl5aV1g1amNeQXpvVlslQ3libkBZPSguKkxlfF5MXXIsT2JyVzhLeSNuImBVI0tAMSRwJDE0ay5McmJKa3tQNzcpTkUiPFRyZmExX2w8'@;
put 'dThLKEJ1fitzXWVeX0AsbXEvYzBeLE9QZT1qJn5iZzpjcCtRcWs4KyI4YXYmU2kuQV10Qyw4RCVLaXdAUSRiam4jYkw4RFtWNFU/aH18fl9zLFAlMnQoYlFbRCVPS3dZQD1daHF2O1QzM1BFVV9oP19rVlszX2JJR1l0Qj1nVWBSdVhtcSx+cFsvYH1URjxEI0Z4SzZkfUNqailrandkamdSaiNk'@;
put 'K1lHPSppNWp9OjxocyFxSSFSSXU4Z3V7YFlmaD9MfTpsZTZTcn1IdjJ1LkU0W21CenpudURdZG5dcWo+dG96fDNRSEo4e0BJZzZ0QCZhOzwwV14rUENhYEcyIiZJUjhtNixkMXxyJWVwMkZAMVcqTHdyRDwwXjM8el1LTyg3YlFyNj81ZGIyV21gRyFNNWI/ck8lNWU8P09bUHFLTTpMKk5zczNW'@;
put 'Iys8fDFFLGFXUy9iKkN5Y3BaSGdyY3tpWHFkMCQhanYjT05BUjErRSE9YCV6KnJLViZMKjwjTFVedF09JnU3P2pufncjXVJNeGJoOnN8MnxnPzxxZXpVKlNfMGxtQlBQPnY0RSR1YWRMPmsyN2tGa1lVXXdaWHFnPnRkUzJRPDRYWE8uLlZ+KnJsKn1pKjUydzpzVUY3OmI/bzR2Yy9qPno6UVMh'@;
put 'U2NvWSZpQiVuQWx0QiYhfWtqfCpoLzBBRSUwXylXRiNFdFNNMDAob31DTjk8cjckO2tgSD5oT3ZRY2pbWmtFYGJUREpKR2RYN0xFWHQ+QnJeWypyIy8kUmp3eWE1dTgkX3cpNzA3WDxMZDFCL2JIN2RiZF0kbGpySGJpViw0Yj1hb2VIPkVqUk4jLzUqfHA3PVBLdXV2Yj1rUWp0TixjZFhjWTdL'@;
put 'W3VTdll6IlpuY0E/S1FfeFVbOzA4ZF9UZSpjaGU7JVQ4RUdPInBzOlZWL0dmTCFySDx9ZE9tQjV3KjdPeSVHRz42dDZLeFQ1TzBJe0M2QCxeXyYjK2NXQC4jSWNRcV4kL1tVXkwhWlgweX5NakpHeCp8Qmd4fHgvR3d+Sl1ycHU9Qit8e3YpeExVLihiNVs8d3YoUWFjTWMydzZNX29MRnxJJTRi'@;
put 'bFI9I2tMcjhwUWhhKTtuOVo8VyVSNTE3LkZQX3pwbG4/VmhzQiFNUGxWZz01Wzt6eU1WY3lZT09JPF0/THozIj5CQlp1eDpOfj52Oz12R3lIc3EjaWVFak9uTU8wXWc5eDFjUFhEKjt+TGN3QnZNLm1sQ1I2W1ZPTC8mWlY9VHQqVmNwY2RGJG5RJDk2Ljg/eGQkUmVyS0JlbnZjQGUpOF44ZHlj'@;
put 'ImYlKmYkTjRSZX1Kck9wRFJqOSY9JUJ4W1B+TClJOjspVFAsNm99anl1YH0xKkN3bGlkZU82ZSNQVFBSXVdYczp0dFZqdnNQe3Qsckkxe3g8OipoT21dOjhUNE50IX5BfWZ8KiFzZyE0N0NdNXBTQH0mN15qO192N25AYXkxYFBbenFGeHIicnJ8fT98cW46dUp6OilmNU9mWmwxKGVMe2lwPWE8'@;
put 'ZG0hYltCYWYzeE9ZMWxSVzxdZnZXeEMlRnJAJm0jK3VwOWY0dzYvamhSViVdOzc1MTN1b0BbKDlkLFBSekRKbWgoWjosNTtfND8uTEVKW2Y4UW8rNEMuKEVGfmZLME1COiFrKzpIeChDYH5vJVdlajh1e250JGdaVHw3Jlc7P15mQHtGfkJZYW0kTlFYb1M6Z155TnluNT1nMm16bW0oIyUzQmll'@;
put 'Xlhub3V5Zk1YRURdP2NUWnpdYlRUWT5IN0dRVFFKPzNneTQ1bDpxTTBBRVEsXldeKjAhRFJNVjdsI3VuMHwwXTxZe25DLlh+M2BBTShpcXRQR2xBKkBmMERlRl4iajFrJi8zLjFabmh8cFNnPmZ6QUNNNnZlPCYxbDRzbWs8YSkqP0NZPnw/WHpTczYjOkE/S3M1MXgiZGN9KXQ8eDBGOXBbd0Mx'@;
put 'Pz46KVtqUWtWdXNYUio2Y0REQk4keEBkPDQ1TlZfZ3QhKG5dfVR6T3pFZ3wqZysmOVhAamN+QkBKcCRaV09PUXdjRlIhNSM4Qk9lYCRhaFJ9TH1jPlR6clt0ejUwWUhHWUV7Rl5kKy54VEkmYjx3LE1OcTJoMVUsR1lbRGFTUmdOSGQmPmtQTlhyI1A/eiw5SSE1NFUzfFlyLkl0aDBnXXUjcSlP'@;
put 'QysvUFRra1Q2RCx2N1laISFPe1tiYXRvUGlUMmxCcE5YUS9uOj4/W2FgIVFBfGNuXkFJYX5qNSIpPH1qSmkvOWxiW2wrQ2F4JUthe2xvc144emFyTS5pOlR0NTxvfCM1Qkk1NjFPU35XXkw1Nll4dXR3ayh2bmI9XjxEOD9XVmZQXmdDeltDPChHfDVFSHhYemsmVG49Xi80I0N7Pjk8JENYaWtg'@;
put 'ey5DTlFsblVNb2oxdzw9fn1tKFNocCZdSC4yRDRyOy4seTMvIWZgSClJOW15czB1NEhXQylrYWVhdW8yMno+O0Y0TVNpW3tHMHB8VmEsM2dlOEwhKSlEYCpEbXE3eHFWVzAxRFRSezdOR3ooUUpxWVkzZ0VLJWJde0xBOnhySWArKmw+YUdUUzRgZ0JZXyVVTU04RHV1MGRVWFlrI1pjWzp5dHhv'@;
put 'V3UzVVZEK3AxVjZkXjJmJUgjc3VZRClCeiZWOzBZQjo9bTBkZklPZkBBMDpfYTUwfWk+JG07c3VlRHtoVV46cllTKHl+cj10VUVqIXpPOi5YNjdYRUpWUTt0WmxTLEI3Lno3RmF1UFk1QFN0Pj9fbD9pVCg0MGYwZmpMeVdHeD5EK11ieDgySSNmMS5WelooV1E/UCx6Ty4vVVM9cz8xMTpDRlFt'@;
put 'UUAvOXVAdXFVSH5mUGpzKzpyRT90PFspTXNHWCYjT3pmKkpdfSN6KUMkPk5gWjBESklDWCZvNzNMe0hCUFIrVylqTFVoIV8+OUI+LG0/KzIyWltfImd3JXE5Njk7WDg0RClxOFN9ZiZ9Kko+cCh0YF44QDAjfHU8N3dUSys8VUM6TzY3TGAwcT0lL0Z9Uy98WXg6cTRDNFM6UWZUM2xzQVhuUk9q'@;
put 'QmBKR0dpM3xhVlk3Km47aj51NHh+e0hSZylaKzo+JCohYzw2IW4zPypUfFIhNjdoIitRYy99V0o6YTw0UGtDR2BlWmFdKXo0P003LG9XYDkwTzJ2dFN2bTFScjkkaVorO10kNSM5KnZzeWxRVkNgLzE+JixiNHFjS0ZTRHJGaSpQfi9TKiNfUnVgNkdzcUNDXyJqaS4pPDsjOmxDfGQrKF41ZTdj'@;
put 'RXA8QmFFfUBARnFBaTdDblR8X2RCanIqczdCcmJ7ZGtdVzcjcm13aHM8R15pcVMrSm0hQVd8S2tZQ0AkTmklPS9CfCg4Qi8jYUFPeWYxcVhDMnY0ZXFbIlRuSVpFY21TQi91Mkw9XytuQVlhRmRLfkFPWWxaIVd6NV9dVG8/QSRAZkZkZ1l0Z24rK3U4WG9PQkY8cFZvP1QhWnxqVGk7LFU7a2R3'@;
put 'ekJFMW09KUBZbX08eHxldSI5M2EsUDkvXWNvd2p+MlRVcUN2KyxLTF8xUHpYV31eYjxJXkNXWklvTWZmJTUxeEtoYCIjUnJNXns9Pz0zeFddSmt+PDs7aih1aSQmb1d8S1AucEptSHM6YEdufFVEZTZkV2BmNlticmd6R1A+d1VNcnV2TERSPG8kbWFoQGkobGJ7fWFgaHJEay48cTF1QjhSLlEr'@;
put 'MlI8WD53dn1wS3krTlZZOkh4RFlaImQ4PXlFXVNmL1pNX0Z6Pmt1Pnp8b2dyO3hydV5xOXdbLEIkdDA3KGFkOkNRXkRCTWtRNCF2SC94O0E8N3hgY2VvLyF9OHhVQHpQN2s6PHZmJnFqbCkqSE1NKU9Jfjd+bmFUcVZCLGNqbSJ0PXg6WC4xPjB2N3cjR1FyaHJmU1NAJkNIdm1xZmBZWCplXjl0'@;
put 'ZClYPmQ0QH5gNTt9RCFzdzFZbVNhIi8jeFo7YXlKajN2Kjord192WFleUnM9cnpmWzAzW0QqM0pePyJRQW0oNE9aVGtwRT5VPmcjKUxfbC5XKFc1eWBHcyVHdGgxVnVHZyJFJlY2cHxZR3RkUyNoVikrTUBRPGhhLyl7aTxPYElLUiRrW3M4XkZicF10MjxrT3JROXBPR3ZhLz5vNj5Sa3BiNls5'@;
put 'YjB2S1R3M2pCWn4hYWxPVTQyUEtKKFpieGtGSHRvJl1ncjoyS1dFPS9GcGtQPGk4TDRpUEdHekczRVIufDg3WDUhe3VKVFciaTdbYHUuIm0+OCJeO19ZWStpMShYSzswZywjLDBlJWNGRHhCNERZIUAwblJ8cGkhYDFuPWI8bnEwN3B7US54UmVxLyteQHdGOClnWSlFOXBpZE9GJlVFLyZseUYq'@;
put 'TzltaHdDJER8JG88N2JCMXBrQUJde3N8dy9wVlJAaj9mPXwhUnwwblVQL05daGReSHJzIXtePGU8WGdlJDtvWSkqSFZ9Sz5lR2tkM29wVGRBbDp0RF8mfmQsWDMkKStoVTVmYEhpXl10dGE3IS9xbDYySHB0eH1yZVpEKW9WcjQzKmwxO11aRzs6Z0U/PWoufkB7dzA+QnRuYj9fd0hjOD9UUGxQ'@;
put 'TkhDMVAiTl5tX14mWjc3bVs+bXpiZVp7d2szZCQ8STMiITtyYyFCejZFInpgM05WY013OHxHRHAla1E1cCV8VEJTIU5oKy80bEZXQG1JfER4e1U8NmJZZno/RDJLJFZpIW8rL3VKXlI2dlBCMllFQ0k5WlVlelNNbEZnfmpyeC90RXdtUUZfeGlJSyZzVnpXInhXIV8mZT0wSmUydjZQVj83OFoi'@;
put 'VE9TdDpaNWpONzRONHd1SSV2YzRATiVPT11tWV1jPVI3T1J9bV93Ik8sX31LZmJGY0l5T0JVc2UqJllKXTp5W1g1dFZwREtPNT1ybWVed1FwansyKG1+am5Ze2oxTD9zVXIqSnkuYDB6JXpBQDF3Rlo/ZktKNk9xbzp8MyZgZkBkXUMrJj5OSVZkOF91WyEyZ2Q6PjtfMD85fnZJfHR5InlYeDk8'@;
put 'M2RJWl9tX0N0MyEqalAsIUJVfHhyN2NdW2pqQHpQWH5gVXAuSFMucFpxZkolLntgdnNHdSljQ2VWbTl2NF5wVy9gIXdRIkEvOFpwaD58Z1teYGVeM2dsU0omXndXUGxiSkMuOnM1RUx8P3tRSF1CMyRgYTJge2g2Rl1zV2dYbHczOE1uInUxbDYvb3ZCKnVaeERNZDoifUFrOjBFNC4pcXA1N3pX'@;
put 'czZmeF1Jb1Y6KiFSIm5mM3w7bUA8MUhUWHl6LnF0QGEpWXpKSkp3UyJPOV97P3cyZGh9OiRtOjpqKiRGRzVAKDYyK2c9bWB5TktWS3BTXnNdLE9UKFl1R2xucytJQ30hKiRFQWZtQ084cl80ezQoMFhSb1F1ODd4fnUzfVYqdS5SflhDK201JWN9czsyKUR1QmU/PT90UkheMSklO2NiamB1LFIu'@;
put 'K31fYTVLRDpwc3UwSXEqW1RfZFZvaWFhRWhwPFQub3hGU09kOkYsKEYmZGkldDJuWiowTyVWOVtvOyNPSnd6IVAzRFNnJW5YT2FaRWlbR0B3L1UiT2pXQU89WS9WVEJae0pFUDxTb35gVHFhaTl8WjVEaHYqezA9amIlLDJbMyJVWFFZU1R9YDU6PzJDdVFEOFNWP3hdNiZYM3w4Lzk0eWMyUFky'@;
put 'QUAxRTAuTCQkTlB5YTlkUWRCL089SiZHbTY3WTE7bGtsPDJDNWRwSDNedyVQa3M0P2FPUCFYK3AxK0hRdixYKUIxMT8qeXhQOVhhYUQvZ1RlNmU5aFVLRkVBUSghcHVOdTVURTNmOzxJI2NyTSw+KCErd0RIWGBhYjp2clF6KWgoekJWXyUzPDh0VUdWYHtuUVE7dHhbL0xEI15kfTsjNiNnUVlI'@;
put 'QnxbV0IxQF5xVnZ8e0h0X1RnTmxQRENefSpyKWheQioja09TKm1COF55O3RJa3E4RHxLSHcwdlVCZT9qTEVIamVeM0k/Ljw9cSYqd1ckYzJgM1IrY0YseHZMWm1aLGAhRTRjJUQqbCJVMWxBTTRIJmAvZyJCXjMpLGNhZDczampKMU5OYTxgYXciRnxuXW1oTU1FMChee3RSL1A0bV42MjkkQGFq'@;
put 'UDRBald2JUwiO2plOyNjSVBwfD9RaXduU1YvKlo+PHZsJDh3MHVMXkNTQ0VfXUVyZnd0UkxtJmFZcT1ETTI3TDYlUXRXSCQ7KmErTzhdbUgofmBtI3lDb1MyUH5AcT1XeyplZCpDTV48V2g2UVdaN3xLUm41cXZKIj84OFhaaGhLe1o2Yik0TldTVVZITkg4bkQlMldwXikrYGk6NjQ8RmclSldt'@;
put 'd2BMaElKKkpENXtIQGFDbF9VPDJXXi85NV48WSRxZ0skd0dGJjReLk9nMkU7TjYjTDY4JmYkailuVmQxSE08KmVwUWVUL0hAIkBoLEJrblJHXjpbI0pNT01zdFsqOlYuRmc3UVBpQ1QyX19Iek9fbVo4eSE4fSlERlVxNUpbWnBCfkArQmQ8byQyTX47dVduSCM4MWFWTWAsYzZDfWckXy9VOkxB'@;
put 'SkopbHNkO3J7MzReQj5yTCFtQ1lWcGU2Pz46M0suIj99VVEyS1toQiEjYCoxOCMreEt5MUUqSzB9RzdSOD90SEQhMlFXRjJPbH1nODB7X2NqUTxhX0BLfSIhYzF6OlFVOGg5dSU/cW4uYSJOYGg6OyFoLEtHbXczKClxOElhfWlSZkwlRyk+OVchbEdVXmQ6Jld7U0xUOzlsTSxjImV5IiwmcXxs'@;
put 'Onw0RXszdn1WNElAdn1jYzkjTkMwO2woL3c/aGQhPDB7Q1ttOXJ9JXtHRD0vQU8/aHp5TklxPkswNG08RiRFNTtNWD47e1A6X204RmAsQGQjaE8kd0dVZUQlcjBsSnNkfUx+XmZtZjRHb2xGbSV4dHI0P2MhS34kL2phJHZPaiw8KDdfWylubCRGT3JmbW9UYipSQmg1U3Y9fFFHKV18JDQ4MXki'@;
put 'VylXemUxc1VuZSNTaUwpRVZ2LEw2UV82TFNxZCwjNzx5JVpWJHFWfGpuWF9xc1skKEk5UWNhNChJelF9OD5vbkNAfk5BM0JkWHI4NHU8YERtSClVTV5BcGI2LixMZEJvdDQoNkIub2R9TildYi9JS1Rhdno3XyttOFg9SGBtNEcpWiQrPmJUZmdYVTVTNTQ6PkZQUlRSViVRLzRbYlI+YS9udVp9'@;
put 'amF4TU9DUDVUXnhsKik8UDBdUmIqZCl1bHptMEdmNEdnXmVWLEheWDViLmZMWlkiQmFnc0c0bUkjLCxDWWU4MXAvVzBVW3pKXV8hc3JNVkBoMjQuVWU+ZSwzMEBhSjsjJjQpJT1qaDZfelRIW15aMyNjW3RvV2QrSkxAXn17a1VbRnhTcG02ZH02bSVNWjB8PUwsIXBkSjpHX0QoVU1RRyNoKm1M'@;
put 'RUkqWCwvJSxGeVNia3FZLl4jfkVeajMrdnA7VWFHO15+O3BRZmZzR0JjfUMreEZkSGk0bGU4YE5iZiJbbFtlISJaWUxLJTxoLjYwXihZX3FlbVM2fCVJJE5QenE/UywuOVR2fkIrX0B4NWgyNV1iYnc5LltadHZqOChmdkFaZl89e1dGbGMpVm5+MiEwYyZnQ1JOYDAqTXh8dE4oIytEWDJxZUpz'@;
put 'blpjZSVBRm1AfGYqeT9wUEdAellSRkZpaE0peTV3UyZqSjlkemQ3XiF5eCU4d3plRDVxVCQ/IWFfS3loaWFhfE4zNmgwQWVaNmleZEh9eCN8NDAqXld9OUxwa2Y7OjI6X0lXeFRhI2kqKT9OOTVHfi5CZDlvJCkpSklNVGpgdjcvSXcwX3VxKTNYY2h6TyhjWjt6PUJ5fXhDNThBVCFUMjxXVnM9'@;
put 'PSMqfSsobXJ0cDM/SkpdRU5+eW53bVt3b0Q9clA2W2hVKUBiJi58IzswM1NkP05SfDpEdSZ3QCxpYVA/Kn1YVFdfbjxkYzhdXSJfcGVaT01yV2VPYVJHWFlyeyheVl85OzYmM0ZoaUVsd20jYFMsWng1XjUqPzlnPkdeZS9zXksjOGVYZ0M2azNndnxPMWx4fWxHWVQuXjlUam1ee0pecHtjeV13'@;
put 'ayhBS0FqUFhnWz9hRXZ3bER0RkJJPFpoTlRRYWBWUkgzOlZMW1FfdC5keSlfZE1pPXNpU0R8b2ckKFp5PlMvUnUsNn5iTFpsen04UW1RY2YqXVFTJix6W3JwUD9pXU00T3BOKFdxOz59dDxleHZ7KnZjVnhwZlA1YCJfTmg0YDw8T3p7MTZvKVF0NCM4TVtMZCoicDZ6W09bXzFLYXw/NXQ9SjNA'@;
put 'JjNxPnRmfTJUeitodSlUKTUuLm5yeDNpaT5rQmolSFIhSGVYQz9TI2RSSEJLOURsW3w7PXwxRlh+JVtTL0lqfHFmfS4wLzRgfWxyaWE6blF6fCY1U0NGYXtfejcpZSQ4dTs0VS9qVVFUPmdCWktxZixhQ2RdZGBbdSxAWFdnKm5dSFZ5W0dlKiFTe3ddM2k5ZG9Vb2gxWnhHezhyTW9zPmladjQ3'@;
put 'azk1em0mdit7eHpXYnduM3AwaV4jQTV3MFVZMyh5Oz1JTWZeZixQMDhPS2FaRWBXa2RHaSloWF9gNSs+I2s4UzNNI3VkXXlqM1J1dipgTiJ6WGliXm45XVJER195NDAzYm5rQy9ZL3ExdUlpRWMvI0d6aTgoQnx+ejZTb29DZS9rfGhBdm9FRn1afHYyMDhhLz90V2E2cD4sJTs8WWhRNFZ1Q2Mk'@;
put 'OEd7IzB5ejQhNWx4djVCVyNnVnxFPX08ZHhpLyJFMFAxZE5sMWpuaExNMmo3Knp+QHciYn5Vd3cpNFFHdV1wcEFUTDlxdW1lKHt8WUddOysvRSR6JDFPZHBUR1RRb3M8LDdUYUc6UnNQRW9zfXVVeWFrRVcmTDheMUJxKXtJKCxwUXA5eSNvP1hQYkNxLys0ciw+cEhpY3lbYjNwKShaYCNDPUt2'@;
put 'NTBsKFkucXt6WmlIVEBRYVkkUldtRTk+WmZ1Oi51Rks6cyQpMD18SnQrcC85fTlER2Zmey9TWXxgMGg7RUB4QGY1JEopRk9MWmx8aCN6JVU4Il04QSpkIkUhT3J8Oy9pPXFmKCNNN1IoTUZfZnJTJC5PTDR5XXN6KTIxRW1FRyhzRXNXW2Y8RTFBTDNbe3ZTNmAsWT1XVWFzbnl0Xj9tSmV+XWlI'@;
put 'ISRUTXxNWU95NlJNaXFlTjFzNDU3M0l8RV8iJDtDaDRdfnUsYTxJX2YhTGtELD1hLzsoLmNzc2UrWixofXh2ZztiPiUqaCFPWGE1K0lGbypRUV5KNUc9M1A0VUUhbi44IyRmXnF3KU1OXSQ0Ul87MGp8cC50PEpWWzZ8LDwvPG0saDx3c2MmITorJng2e3lldj9HTm0xUkZlJXBvMS90V05qTmhE'@;
put 'cDBDX0UkdHNtJmRsbWhNX1dVZn1rXnI4R0IiZUY7RzdbIkJ3R35sN2xpczN1Q0lZflZiIm9Id153TlZ2ZiQuQTh+MF9kLj45PklQdXg1KTUsMlpLYDMiOFBJbUhqemdGaWVqWHU7OXklSW9WfjRFV1FzTW4rPEs8cFpbaChYbHlSJGAhTW5qRXZtTWAoKCRQOz1+aDdiQXtBQGlgaTJnR3RoOkJq'@;
put 'KiYuTE53b0x9eFdKMERwNTJ0NSFBSykpfG9JeXYxRHRXVm5yNlpXUDdvcVBrRmcrSkZydkNrR2VMRDlMY3ksajJraDkzbjRCUiVrSGlVb1F+XVUjWXdQaFllezQzNmx6dW8hWypkUUgyYXxnZ3pPYGNbaFpSPEt1citPOW9BOl87Wj0uI0pidnlHIVoyPWVPMEFJS0t+Y24jQFtPMEw7OUNSNzAl'@;
put 'WixQO3kvcEx4I0wrdUhSa3B5KldJVWU0UkRAY3EqYyx6NlpDeylrNH4melp6KzIpL3ZnU0FnN148QWFTdDFRVH5sKDU/TEgpeVBvfmBAOiFBYSR8O2JTX1F6Iyo1TmNoemxxO1QoajgmRWpyZ35XeWwycm9hIjt+UTtiKj5QbF8uaWAkZHlnUn1BdkAqNCosXmBeMHBiYFkueGtwaTtmRC4kSlJ9'@;
put 'VyxeVS5gTGVLXSh9OzEsNmY3Vz1kRTJtcVE6ZCJJIzJgWmlBTjpqakRHN1U0d3NZPVtaUnlSWypSJT1jW1VHcTRoKkpsai9ldE9bTE1TblFBdDcpZVtSTkZHJE0kMVlCWFEwVFtJWzZiXiF7TFgpWUNBelJlWGddNHB7SyxBe0dsMjdFdShNSU03Mn1UYDtxWnh+UDAzUSlSJjIocT4ydW0+NVc6'@;
put 'SStMTnh8fWk/a0ZuJEA4a05hY3JhaSxMUGkpYDR4aDV+Pjg3IUlbY0NtIXgmTyE4XyVWSjgvTHBTUWMmcEJfWDVBZihXVDIvXUVSR0JFNGBAL3J1IXk3TX15JnNxWmkuVlhlMmM2RlM5dmhbSSw/VCZrayE1Z1tkP3QkP3dDUTIhcyxVSG9mTll5R2pUZy8xP3AzeW1KK1RMO2pOK0N9YmAzaEIz'@;
put 'YU1XdlNpcklmfVpNNGRXQmhYIURNaD94UGAsRzBpMSxHMDJaX2M5RmhBbiZVQyZ0OkY5ckg0UUtET3ZTcmRuOzE6WmY6e31panEhXy5qOGEzeDBZcUhMO153Xjk8PyheRCxoSkM0Tj57dTNvXSM8W3x6Om0mfi92TEN7VGQ0Yyp9KWNpV0I5Ok1PTXglVnl8YEtEWiJwVGRpMjlZMDFGIz5FfE05'@;
put 'SzJbezNQOC5FdkhYNjU/UDpTPHduT1E/YywkVXk9eXhWd0lXb3BpOTJjQUpGNlApZ1ouSykuSHhHM0JRVjEzTjYmZHR8UFJpZG10bFBuVEIoYUQ2dlZ6SjE5e3lYXT9mMyFfTC51PmU+JndteGVMWWR8ZyVhMS5fM3NETylJWk1+a08mSEM0fWFwZjJIQjpfanNrTlpSNjdeZ1l1IV9DZT89Jj9l'@;
put 'cCU+VX04bF1fUFU8dThTeiIxJTEjYmgyQVMjK1tvMlhecCZ0ZVZkODNYZmBINm5fKHxEMX43XU9MO1B5NmooSTdlKV1XVUJibn4iNyJTYXlsLyRTMzVhQSRqKkIkX1MpQy5tKlhyYkxveT0rTkp7aTI2UGIiSEgzQlVPRWJlJXJjS1VCTE5aOjI8O01TNi5nQjdzNWNZOl1iWHowXzZXPW1YZmVy'@;
put 'LHMiWXs2JDNobjpVRmRKTEBPV3RGIWd8cEIxbmZDNGJ6ME1IdmosLlAiQF1jL1hyaUxSP01uTl5UQ0R0PH4xMkkyeTw+QCpxXyg1KTh5dXF7aTd2QGwyd3BaYSkoSnNQR19DOl5QKEEocT5KejUxW1BIXiQ7RT4jKUlLWmlBRT8rcWFPNWVNQT5kRiRRfitFMnE7YkkoPVZhdjQudnl9WHRdLEcz'@;
put 'RlpZMC4wVXRZSThKNWRAUkc1R0h0O2MpImBVdG1pZ2t2KVRCOjpTfkBgYD5NZyk1TFAkcXJMentFbmB2M1FDe1pBVz0/KUpGWStga1R1XmVAKDFMXWhicndrbnEzeFYiYGhqPT1UQGFDM3VHXnY9RXU4dzxsRlswTFUmQWVJU2FaSGVHP3I8Zno6cF5aJVp+aVFRUDZSInx8NHFhZSo5ciEydmRz'@;
put 'cytDODhFblBULmBkNmxiNURncWwlYmckV0cqfn5IZXA4Y2J7X24mSy4mRTE/ckxveC9TOmNKYG8yfkVYQmpGQm5GdFtELClrLyw+JCl0UlQ+PWhPV2g8OFtDaylKVVRYKk1pWX16aFQwc3JzbCQ1UzpxST5kSThkQil3XmZxZHRjeiQ7V3o2c205VntEUlBZRipUMEl6LkNCPmlgMHtCcUB8KXJP'@;
put 'TmYuaSYxeEB5LmZITyNRZmRlInpUKXlgLEhXMzxFXV9ba0ZCY1N6QC9ISzlgbC5tKyY/SGl4dSo3UkdzOURTTl9UI29GaiFVTXtxY2t4Xm99RUAkdHpsbUdtQiVsSWplY2RKUCp4Y3BVfH1hQiZxfWRKYG87eE5EcTs+WWlxPyVAT1AwPGRpIXFtPXU6aC58QCEwKGxzbSY9b0dbJE9OZzQiTnIi'@;
put 'X3whUlNQckVkb0VNdWJMQ09Hdm1FMHEmUjBAN2NaN2tyeGU3cU5wQHVIN3BqfmBNZUw3SWI9WmMpcGwpdGUwSDRgKHUkPFQ4OlVGXXFjIS5jX1BPSnIwYiVDPyt1X3pfRDBXX3hDMFszWWNsfDIyTVBEfnZTMXhmTTF3b29BN09NfHNWXktOO1d8TFo6IlVvUHRlRHBQN0dOcTZMd0B9O1lZRzdX'@;
put 'emBNRz84Sld5IUhtRHpZX0dQfWVxYj43SWElZWBEZl0jWzpEL3w8WiRlPChkPFtHbGp5eGs0RUsxVU5tTUJ7PUE9bHw2SllmMiRwRjhDLm4rdzd8YCVYcHhpTTI+QG5uTDE7W15sRV00OFB8b2p+WX1TOzRBX1VPfip8IXshO3g8KVJKQ15dOVdjT0dIJWRtazZdaDIkbns9dl1WW3wlcig/UWYq'@;
put 'cWE7JHFLKjJidC9yWixdZ3RtQnVLfGQ7TyEyTkdTJjFAPmpfanU7Q3t1dkpCMzJtKltmaXxsSF15akwqP0VmfSlRR113Sz81QCtXQFEqJkg2aEVsJT4qTmBlYSJiWHhmcy9WbCs6NUVeQEB8Ykh8eEdTVCZHLHV3ZmJ8QXJYNlZ1QCldWCZPTTlSJmIjUD40YjlFMWVHK1lpXiRMRndrd2RvajBh'@;
put 'aSw+UzdMclFsW1t9Rl1CZmk7d1hkckNdOyleVX5bSllKSlFhd35hVV1GeGNIT1U+VVYhOCspKH5pZyFGdyx7azlIVzZhY3dJZ2l4N0xubytBdWNbbl0sUSE+ZE81TGdkPzB8ZC5sZD0lWjZ8TjY7XSQkIy5LajJoaD9kaD4/KXwiPjlXTiRHay9PUSQ6ak5XYiEkWlJbZTxPPXkhRWJ3ekY3M3hV'@;
put 'dkskNXtgQDZDI2Ftal0ubTc2NGxLdFMuJk0qJE93Z1lhL0Y6LnhteztDO2lrdExuRnpxTCxlW2s0OzV6UFhOUnlyM3YiJXM6O0dlSzpNKl5OJlt6ZVVKZk5YQmVKNTQzOHw7N3ZyWyxuUHs6W05genpESUY+Yl86c3leTSF+PDVnSnN+Ii9UVlZ8MG5UUTdCdzk1fWZRPlREIkF3PUFoflQzTjQl'@;
put 'TTZDI2BxYHFOPiZdVHRwcThVKTQoI3ckYyk6bnFDbytjUjFwSkE+aCVxKTM1bFdSa146dCFFX1RXOlVPZz9eaGRhUmoid2EqJm5NNytULG5GI0NybClAKSE3WSg1RGdjZmJJYEZSXkAjPV9SS1E3P0pYbF1RWDx3UiYrZ2V2cGMqbDN+aXs/KDgpV1pxR1N7fHQ/P2w+JTxkXSMzNV0kbVQmMHQw'@;
put 'P2lvfnohdENdX0Z5OX48bFh2YHdgdVsjSyJWRFNXRGoqW11iWi9lTEtkIys9WllLKV5LfHhYfGhuVzhCP2U9cE5nSEMyTTpJSTsrfGh1UEZLRGtzOW1oVH5ZOXxldTM0cjo1UC5FW1lhLz52N11XfFtOeDlLaWd0PiMyZz5KIXVabVZMalV8eDA2K056Yk51UlRxXyMhbmVacD0jbCJ7K2loNlgx'@;
put 'dkptTWlLd1pGKT4ySSxfWTNwe1c/SEIjOzcuO09jKmAoKTEyeWFDaSh5c1FrUTFVUUg2YGhUK2NTWyx5L2pGMiZ9PWk0UU88QEVBe0Bvfm1MekQ9THpxfmFRJX1jNU5yWmVjRl0hJXNbNGc+UXZUVUFXUzJeRiNvJUtnY1ExUVVjen1XXTtDeyxRfUM8VHZgNEx0eTtrPEUxJCw2ZGhscTdtUXgm'@;
put 'OFUvTCw5IztKXixERGhOb2M6XWBEXk9AM1gwSG1yWmtFME00R3c1RHxoNWF3I0FrW1lGSFtbJXJxb0h8RVFAMFp3flAmViwyKlFVTEpBajd4anZuPl91W2xwV2xsU2lmYi9vVkhMZSU+NiFEOXNLLEVTKCFIJHxHNGowMUY9dFVONF9ka0d+UCViNm9ENVpjR3hbI1RqYGNCP2o2SWNYKFt8SGFR'@;
put 'e3BGTShLM2JFUm8lc2w6ZU0sWm5zLD97R19acCVhMSpTfkxvSjwyIVlreSt4NkVhaHBYaSkvW3tnZWxgSzZAV2cjSko3ZU92ckgyYWI1KyMuLGBhWUlXSi5TY1JWbVpybl9wTD5FZWAqKmxIVCo1SSFCZWJGLEYuW2BjPF9FSC9uKWhETzxncSRnWiN2MS5QcnRUPUxRKDhESn1nL1J9YXZmOSMi'@;
put 'L2ladmdWVi5bbEBZIl5MKTJ2XkwlLmFwNE5zb08xLyJlRFFKYUQ0aFh0ajMiSU1STXRDc2MjSkYrTWhYViswdmR2UlVYQFgvaHhzSGVwfiw3MyJOOCFrUkhjZD8kYCF7M2w1dVdhW3YhS3d+ZyUjaC9ISiovJVdmcnxrRElEY3wuJmoqLk08UHpUNnRJTkx2WjtDQkVVd3dGOHwxdypie0VneVBb'@;
put 'SEJqI0M2Iy5bOTN1ZnNzTVI+UWxrQ3RBNkx6V10qRGpqeXlaUlZwVlJBKEBXOz0vJURMbCJTYX58TXx1IWlYOGZXS1MhM1szVjxpMH5oYlopelUsaVJSOChzWStFRVJ+I3IzRllBRVFfaFdzXm1lREFnalJAcmxWUUswbnxLRVU6PixzTjdCYFRjM3ZoZ2FWMFQ1JVY8ailSMlcsRV9VbSoiZzJV'@;
put 'c0d4X1BaSWd1cnEmJXkxKkNicHxyNTxSMyR2UnZCP2IoIUpCP3YkNU9aWXZDam1vLnh6cDNwZlZ8eloyLk13PnxVbipPKHAxYFdGbD56MGZqKSxuZGhzZ0g8OTs3MkZ7K1klUzpiSjIzaTt6eHJHWiRlUjE2MSk9QTF5IypzO1MzOEk4bHh0WT92KGBnLFE+dF4yanFtWyRxdTV5YDZ+ZktzKj8r'@;
put 'dXBKYmk5WHNxQHp8Ml4ibEoxe19gUTBhejRtbjN8QmVad10lUiRlcSNfQlErb1BmeDFNJS5ZezBlLERjPnBdR19lfVBuelJ2bWNBOTwheys7MUhyVlRRbD9QYiROTGcuV0EuPElZVUVveU5IR3dfWkElbyosZmZeOUZMbXRgNEp2NyFsIyhOb1tQV01jZG9dX2lfYmw8TmNvODV0NiNZVzY9Vjs6'@;
put 'O0FiQDszbi4vTHkzS08ySkJTSyoqWEpxMzs8QyMrdi9uNVlxNlEyKj5HI0RGS2Y7JTpkKFtLJVUiYXthRTY/Zn1JYkZaVnYjfX4sMjgkWkRmUCZCbTNkRURNPUJJdTJnd3pvWkRaWUxpRG9YelQ7IWRXcUp9X2MrJU9AXXpRXyFRKTVCRHFoTWorZyIxTWBIVTQzKWw8aTRIaFtfb0NpbHJ7e1gr'@;
put 'WFlQZ19qI1sueU9xO15leEx3cS5fYzIsNX12VytvVVlEYXlLfDgqYC9HMyhnQG9FezJOZWZlWWN5Tn14YnQ3Qls0Smx8WWNYSClCLzAoayR9aEQ2bGxRYExZbCE6RUBRKWQ1dzAqVU52WCVZQ1Y+Nks3NXV8Q0lZL2t+RSEvPH1ASUM9LHBkQ1QoMXpRQjJTTkJjKXkhYmgmUzd2LzozOyNDQWhI'@;
put 'U0xnWTllMHA1T0N+NS8ib2FDMykqY20pLyIlfEZQUDtjS3IjL0Z4bFVsLnYqMDB5aCojRSJ1fmVaXTRnIzdlTng1PHpFW3NKPEBaKHloNzAiZUtCRjc9Uj89fTVyWDouSlp1NyFrbHVodXpNY1csQEJiMl1XaFFwVVU6ejN0UikwQUIsS1FdTDZDfjlNZDZ2IWpbISF3TDZvMiM5ayp6KSU8TiZA'@;
put 'dEoxdDpjKEg/NnpsUl9WYU5QYk0iQmZvdFk5fW1EcUUuM1BIT258WHZwYihELlZObil4bWBNbHdpZyRSZWFVY1B3U0JaKTdZNS9rQ3x6Lzt9eUdCIkVDYndWdTlRWn07MndebyNlPVQ7YmhrdFM5XzRLfGBSNV0pMEdjLCF8NjBITWxjV24uYT5edVlAWlQ8ZVNzKk1zdmRlKloxKFtkQD1RUFh2'@;
put 'YX50I0VMQEZeMWlsQ1h5USpqWiY6M2VgWFFjX1tDciYxIjpCd2kjSEc3YTtUN25VQEgiUDBofXg2OiZXcE83LklaalI0NTJxRHBeYCQ4I0peY3ombCZJcnRPdFI1VD0hdDlJcjozKDpuSn1EVGsrU3Y4M0lsWEB1aCJtLDIhbUJnY0BoWUYoUXxQXyZEQHsjOlplbzFTIURZcWIkOCF9LzFHYi5I'@;
put 'PlZLJF45MnAiaDlhLiZsaG9fQy4xN097eHhxLyVaUHc4emd5Y2owRXpBQmQ1WHNwKjQqfXEkV0BuSWdIRH43dkd+RD1mWTh8MWo/dm5BeHxZSVJzWyptSkFkRFh4WjIjczdwNFgib3U8dCVvZEpQSlAuX11beEtHaENFazNbbiYvNGt2VkUjYnBgJm9nL0hrQHBaTnwrRWchaUkjbTVseTx5U1Vf'@;
put 'ZmduaFdgV0VHbmc3e1JGOiI1Nil3Z1IpJkVFVTpDb2gsTX0oQyYjbXl+JkIoaHZwRnBNST5eTnBxTE5qMlMhNE1KbUooajU6YH5lWzpdLExfanJoJU9SSTFJRzIxZGs1eUhYeCYyVURtM2JiOzZ7WUB6WVp8L0J9PTRVZiZFSypFI3loYiF5ejpgJm1wLC5aTHEwJjVzQFZePj44ISpGczU9fV91'@;
put 'Y3I6NyNXM1pKcHNed1k/eF8+LmA+Z3hyM2NOVV5XNUVRZj52VFJVNk5gJSYmMW9qPmc2X1prUGl4U2dJIWZoOSM1SV9DMytgb19lbGdpIzQwJjkhJmQ5Nng2VXV4VWxlJXtDTVdUMkR+Q0JPdTlqKSkyQ0s/ME45ViV1bmh0Vi4vJTE5L2JlJGI4dTBMRl4wPnpsKlVVRWRHPTN8WWtAUiswRWAo'@;
put 'dD9WZ1c+JDMwdF4mQHs6WF5oVlAmKElTJk5NRzZ5QzR9L09vWzFFJHM0T09SIzRnekFrSCpmUT1dMH1eVVNhSFNpLjFWbnJ1P1N6OUx7S3cxalthbkBqYFsxaT4xNnY5eCs/YTw0dkssKDFDVS8lIjRnTCJkPlRCcD5jSEdMPGY9Zj4scmRmQ3FDIUpsUUxEYlplQT5PalJ1Zj1WSUh2VDZqdmUp'@;
put 'dnQ7Rn0sIWtxLHJ0VDljRy9hUmNZTz1GYVlOdkxvJW90akEvSCFHdkVoNTJiP1BBRy9YP1QxayNifjxTZ3NeNXZoKi9HX3YyUDd8P0xUQEVfMVA2X003P1tUZUJ8cmZdY2NNOT1Dcz9hZl19SkJsZm1tL21rNGBIZ3M9U3U0IWd5QCRVSDEmY08mW31tNmd5WEgpP0RPWXE8KDM8WyRtRFFgUkp+'@;
put 'UF5zbSRdS0FCa1MqLmQ7YjN6SDk2d2YySXJGRmpHNj5fNVJUJCpae2I5LiZzMGpTUypqJT5UJEJ4YVpaKk00a29HI3IoaClQYEdjfFE9QDZHXnZmY2U7a2l7I3xwV3V+MGpdcnI7KWhiZiUoaWRlekZ7dVQmS097X0NWKFRjKWZ4TGNYVXFSY2ssUiImTjF7dWtTVDlzMkpNK2hbPko1Ki84P3hY'@;
put 'TFhxeilrbkJeaT54VE4sV1VQbVpeMGB5XSlMUGsoJEFifHRzVF5KNk5INFt0NCF7fjV1dzc1In5sZzlgamZ0bUlGQi47KCFBRCohVSJscVc3cWckRWRdVE9wQTxOfUo2T0s4fFBhVzlfcjM+JCNtUCVbeUgmUkI+QGM/d2A5a3BIKjtRdjskQUdDcU5MNGFBd1gkfl1DL1U4VltqdGlAS15jc3l8'@;
put 'fCFTS3Q9Xzk2MXNhKls/PCxuVys2aTddKl1fUzJWe2xzZj02Mk0ieDNaTDFWSHFXbU1QKVV6aXhGaklYd0x1e1txY29uWEwkVUR0ZTlua1FSSiNwQz46OGhsSjRXfkF1XyhDKWtHVn4rTFE8PHAuaUM+ZzptYEpydkw6YDxaIiFtbTtnIlZxeVEwUixCRz4lTyhkPnY6bGR1TEMsKyhBNG1EOGNU'@;
put 'Pi9nNGpubU9BcXJLLDo1UG1+QGtTZXtOc3VkLlhwd0JVMFh5Y3dyPVgmL0xWUXt2IThVOnIxXURYbH1fTys6KTxySzdReWUxcF9RPiVWPXgofUgpVjhvRnYodlA8MmFZIywmQ198Z3Q2UThQPiRrZmxJO1RTTDlifXg0LDRBLiNbWX5mLHZPJCZ0RDpVbkcoYVc/X2U0SFkuRTx0X1UwfmR2XU4r'@;
put 'N01PNXl4fFEhOHdzfnUlPjpMblNFZzBCWlkwOSozIzA9bW0uM3ZAaVg5KWd2UlJ+am9OU2UkSyVCSEJUY1ZYVm4uYnN8UzNpR1k2LDI/L2RhL1IrZFRVelY1ZHhhKDZVJFNkSGZEVGZZeCUzQCJoY08oeUxgO3lQPWVDVmFjaCQjaj1kYzpNNmVjPXJpZVM5MThOWTxRdix2Z11ddkM6KkhCTU1o'@;
put 'X2lIWG9bKld9R352fmh4dko2XTdXREV9SV8hUGg6eStsZixOfXdoVU5fK0NTYklvXWAjITljX1doKztxdSN1eG9lQys4bWhNfVAiKUheW14/Yl5sSDVqNz1kcXF6QHVXOjp6alhwWzBORXYiSyhyJCNUMVk0cyt7IUR+ekpfJUZbN3wzTHJAZGg+RCpLOEchUVFOVm8vLkxrNDIjRUtgKHQqWG8j'@;
put 'KiVMKyZZZjNGPCs3JkpfT05MfDwwNEd5UTxbcUgqSWBWOF9sP1d6XjBTME11cGU5fnkiOWVBJX5WbHhGRXYyOT9UMng0PD9kP0dvJTBaQD1MS0dqPEYsTloxbXxUUCksOWY2dE1AJCRgeCpyOC4ofUNfQ0M0a1U/JnZlOjs1KUk0PXE0cEJGIXI7T3Q1WEVyRSl6MUp7R0h6Jjc/U0FsTWZZYTVQ'@;
put 'NSlWb1dXTSQmViF3IlgxXnE5WVVySjo1JD86RVhJKEJYLnFmeWZzMztOMj40fF5ENUNsYWFSPFpQVlIyY28wYjJOUyh8ZEF3QnU7W2c0W0xhMlZgKChsSUFNNHdQMU1JfnVIaEpFeTh4QjNpe1pCYFp5THxPKzlhR1loK21Aakg9MFcqI3BKR0ErQUMkUnQ4bTpHdWclQ2omTGc2RmJiSHN2MkUj'@;
put 'SEZMM0VUTzdoXnNgIioubm59WUM7Vzkrbmg7JkR9diluc1lQK111KGZgLzldUWhbOypLOlBqMWdwJDNqQnkoMkxxTFNTSjNyK116UWZ0dHZDaTJpSkwjfnRuaSxEJFZmfEdhfF9nKV9PLFVUfFldNkl7d3R9LitpIzZCRVRCVE46KCxhZkpjSXIseC5yeWtfeX5feTg7Yy86O1BMWil3QUZmW0Vf'@;
put 'Nys3YUVyWVlCSCNpcl4+O3wzRTY6Nk5FKyxqUXdhTyROWmEsKysyYEZiKi88TSJuUkA/Z1Z1P2tbOGtAPn5RJkAkNj1YZHYlPDg3dCErOzA/Yz56Tm4xeVI6YltEJTlORis/eUAwO09yemYhK2Fid0owNHJnZ2lnJW9wVWl1UmZIaEc9Zl43SyM/Snx0XlNpfTx4N3FkMCR9Ny9TO1Y7LkpkWG5u'@;
put 'OD1Dfl57MHZAd1h9KUtiRlR6ayQkfVgoIztncThtIVk7YU1KKzt1fjxUaDFQIiM+eih2ezo/fD9ISFNtTH0qLm4iemhrP1hKVThXbHw/QysxXzFaVUQxamx7IWlgNkVBejVZXmJpV2NsQkM6bmclKnR2JSZlRiM9KlFNezBPXXt7JjJDOExjRzkhbzNnYnJiSEN7W0IxQFBZWy5JYz1zS2dMOkI8'@;
put 'dVohRl5+V0A5c3JgXWczYj52dSk0VTpeKypoW0ddKSg1ZV1pIjUmKFdZaiNiYClxOH5wWWM2eXhmZlk6YkdfL15kKlt4Yjs3MnAyTDxyfGFuJUAjdX1kWVImbmchN1I5SFs4RGpVL0grcll4cFpjamQ1UFdFZVY3Xz1qZ29YV1tHRGd3T1NXYkVPZ25hfjN0d2s3KU1AbTdMMjdhfklNMzZ9b0pb'@;
put 'Rl4iSFp7KXNMXjE7cT9NLnpkeClfKFtJWVczRE1aMV4jIz9aPVVSSlVbIX5BUDE0eCMzamI8fWIjZzc3U31WP1B5MV5JPSksZG5qe3VXbSkoRyk8LjA2JCRNPjAuTnkoMyJtPVdpUCxITTR3diYwe2RPblI4JkFaMW1HdTlZOWtxOiFAXko5TlZPYDhyPDo5I24wcjFdRTM2ZG88bzRwcmAqcmJD'@;
put 'ZHtHYUpPLjtMe0ZxZWQyLmNFZCZ+O1tjekx2RUEyW2hnKnkwOix8SG0+XXxheyU2MXZbaCpFNkp9P2lIaXFHT3ZBWD5jdmM3Z3ZbPkcmaC5vS0tdMmZdJTVFdXkkWj14VVZFcE9lZUU6IjdiOTBKZGpfcz9oSXgqVn1eKG52VyllYER3IkN5QlFZIzV3WSUxJjwxOjR9QTVOT3F8VENyWEpUYlBx'@;
put 'Ik95NVAqIztEOyRFbiIzc35gZHpEbyUpJT45YlAsM21kRGx0VmRgUXFPcjNOMzAuaSVeWCs2NWUjWHEzdS9eY1B6YTxmVChhUzwxdjFDcSx1PGphKzlkWkQ9ZF9tRVpIfGBIRmBvbzlCc2Z0bDsjYkMiOkIzcUlrdyR6TF1POEslWmZ6WndeI1dKT35ZTTUxJm9MdHNXI3c6UV9aKl8qK0MlTVtw'@;
put 'OFNERnBfQU9FcEk5QipBQnw+YTNWJlsvJHRYO3xMKkxCeDZhUyUsdF52R10/eDJDdypPVyt9RTU+RmA5InZDK18qKn0ydzteWl91WzpmY3tiUSVSaH5QRmQxYE1HO0M3OjQrM3NVNmVtWyg+THxSdlJYfU81SmZbSCRTbWpfX25ve2spN3x3Z1BsWjhTXm1DUy9JUHxhd2xiKyhzTGdiUT5JLDZ+'@;
put 'MjJtKTZQOS95U1FZayNYfHJATU5PYCw/RWRFK0hPPHJHaVEmO2x2cGY4K30rQyp5MCF0aEZFKTQlUU1mREcrQD4sLGppZngrV2pMZ29sTFJ0ZEFAWGg0MUNjR0xYQGF9eEtQOTljYDptPTVuWyZrTzJXNS4wXXkkVVpqeFRkayNdKF1wUz9LMXxxUktIKD1LI2dPN0VUOXMrWFdubkdkMTlsdzw8'@;
put 'aSZUcGImJHJSSyowalNxdTpFRFt9PCtvX002MTRJSyFPS0VNaUs+LyZaWGJ3bGN3LixtZmJHe2sxb0x4ImF7KFg2XzNZTTViPj0vQStPeTkwcFZSbXcvKEhjX1sqWjkoYXx2RHc8eT91T2B2IitvKiRPJUYoVkpbZyhvLmBqeHc1OHl3alE0Om1CdyJuJHBJZVomVn5Be0daSHxqWWxBKmFpTU92'@;
put 'NWFIP3Vfb1ZrMT5MXT83QFp4LkdFP3Jlb25FZCFWfG1nZGpzeVQwNX1dZ3xjNHd2MSRvLFs3ZUljRyJeVkhZWlNlSHo2TjM6dndzTnw0RTN0WiNgbl1DNTBXdUdxUHRuKGVlUVlpNWBGNExbNC50YH59enlANEl6LzU0P1dxeW87PW5lWG5oWyFTJCo6bGpmbUAwbHNPMldXcGFMTl4vUE0rZU0s'@;
put 'Uyl6TFRPMEpkSytGMVlgLEdmMyJSTlc3WGt8JTNjLlMkRDNtTSk2X1RDZWNKTEBWVEN0eCRsSEBXdTJYQCV4SCxbc19dPm9sIlVgKHdZZjRiLigkKSIqejB1QEt1YHJ0RE1qb20oRE1EfSp0TU0xZnVaNDE8YiEoWzg8VzwoaSlsa2BXL21vdHJAZyJUPj1DUylTXktlIXJPZTwufmYpdnUleWRO'@;
put 'MUk4bWZWNW5FP0dZTDtSanYmeDgzJEdUbjBCTn5IUj9pfjVXb1NrOj90TFNne1RKPTZxZCU2Iy8qbzpNVGF3ZlQrNig9dUhsN3hudy4+MlRWaXJpfWx5aFQ3RzNYZlhaVG5wVntVSCxYamAqKXQ+OiV4XXY6elVKRzphbnZqIngsW1VTVyUqJXtGWExmelcvJDtzQncuU2ZPd3k4T3l4L1JONGFO'@;
put 'WTRBPClzYnl4TVR2emojL3tERVpnMXR6RD1qWF4pUUl8JllrXlpUYSV9NiJXdlRyWUt4IzZjNDk2Tjd0bllGZUpNZnBUJUEpNTQ/d0Ivdlg/dGpeM3wsdXwqeWNYc0hJUkBsOFlFaC5iY1JiM1R8e0ZjalI9dDlUOyZQNDkwej1PTipTfl9FdjQwOy9Ob2syaClTPUBMUj58fD4pR1IoVlhdczhz'@;
put 'X0IuZE5gdWVSd2hmQGR4cX5XfDolJWhOYzxhdXImUXl+Mi96XT8+fVtrfm1eaE5kfmwuSW15VWwxenc0SjQ/cCZRNyopR18lelB2P0VXJEFpS0Q9ZCFVflVQTjdsJndxVF0rLHJbPiljXlBYWm8zYFkmWiQ9Vnh9WF8kSDVRQlE2WC5mNCQuaGZiayY3bE9LMHBMJihXZC9aITYmKG9bIzNuRWBq'@;
put 'YVlPbnY6QnJmanV1YW1mRHtCW150c2shNCZjYUxWaVAlKj8zIy5hNTliYUdsJVMsd1ckQj5gSWRlb31aPjtfPnZZQHg0X28hN1AlNnxmczBmNCFValZDU1Vofj9UKXwqYXQiIWg5SF8qU1FdbSxOVXtQcD9KI30xZHJPLiFmR0FUcip9fk4uL3NrYjErb31QSmZDODZDRC8oREgpT1Y0Wls4ZiUk'@;
put 'R15eaTZLek8rJmtQO0NWMGF8eWhjW0Q2PU1veHJdWl5+PzIraHEqbmV1N1E5cnBkdVhkOWN0Q1FtOT97KmFxajViJFlXWl5oWj10ZitRSShhZztOaXlsYltaL1d9bncqeUJ3eD95N25MT0BlZGtuRW97YyZAVkVFbjhMK0cjWj15VWxhRFV1KUJ8NlVmY10sXUNZb1Z0WitQKF82JGhidTMsTW9U'@;
put 'Lz9KTixEXz1CdF1oKG0qSiFfcGlpY0Vra3lSeVVjKkpUSylwcXQ4UzBaMWtaKXVKRi98QFR0bExSbSFEZztxZUg6Mi9CW1V5aFU8JlUkMmY/PV1xWk0qYFJge25Ma3Q6b3w/elRfSSRALDdFQDU1OWh4a2NeUn5qOyxJO1pfXiV0KEVXL3RtWG9INFJRSGY+Y35IdDtwPXp9JkJQfSYpWXlEXkcp'@;
put 'JWhgUHdsbVo0b2tfMXMrTjdLJEZhaURnK3FyXSY2JilbKlVndUxYL1F3di8vZWhGRGVkSXJUTFhLcSopJDVuZCJvZFQrV3xsejkiOUN5ZmJ6dHBPMHQzV1c2P1BiK3xNVVk7Wls+by4xQ3NjRipvNzxESzYsYCZ3aCVvMSpyKGRpVV1HKT4xeVVtS01aZT52XjVgUEZSaUY1KT5MekVbTF5uJjpa'@;
put 'ZHhbWHtde0pbeVBRX1Q+eFhKP15KLn1TI1ZLSUhnIUtrTihObD14ajliSVhxVy5EbnJoWiQkQGtJZHFOQFVmVm5pcXBORUMwL1cqdVhQU15Ldl5VLDBtMlt5VWArdUcrRyg8PEBPaTROL1g9MU9vYSJMO2V1dWV+fn1rSkUybjNuNzRYYT9wMntbWj5Ja2pLImNtUlNtMGAuWFNzbVElVSNqNTMm'@;
put 'IXRAdCs/Kn0rdm1CU2BBRi8iQVkxcmRfbWZ5fWg3cD95Xn5TLDJaJU1lLykraGNJUWw1b21AYlt1NXJKNWl4Y2ZBejFZV2pHYiNnOz5jUT1RPC8mRnUvVW1ESkEwNWsqa0AjZ20waH5IT0pjajJPZUlrYXAsKkpTPyk/eSlSYy4qOyRsSXhkUXp9LlsscSNHISxHfEV9TjZsNiszQlNpXzBaSGND'@;
put 'U2k/WGNsJSE6dzZhbGNpIiR4WlhCLiYpL2FAWS5WPV9GOD00RWlTRnZUNEREPSQ0YFouKExXQTxKR2xEQC4vd2xCPnguWVI0Uj1QI2NVYixwJlQoS0c0ck9deTRVQVghIj88JWR+Ljl5RmUpbXE9RUN4aHo7eSV8bz9hMnhDMihnXlc8eG86cXcwUH1tPnBOIkBFbzRtImtzfl9lJiNLcjFJWU0p'@;
put 'NEc0aGMzNCVvZ3QvaH1XdmdfNSpzOkAld3kmMlc5O2dBYSxHeEIqU2lrWGo8a0RgSWV4Lk9KMSM5IVNsIW9kanJDXWYoSWh6fnM0b3ZaR3gxKndYbnM9KCtnUmR6X1c9dmUoKG9kRTUuJjA6JnRLTS5la1FNJm1qNFd9M2s5OEtjdXp+PU07QmFEJTBXPjN1Wzp9ZFJXZXRkJXZ3R09Me01VV3Fj'@;
put 'KVh+e3ZjdlQhJkp2QjhnWnEvQGtDZUx4OjFRPjlvdHFzOiJmU0wjeVZhMzl2dyZ0Oyt7fGBxITtUaUJpcCV5cGFSMX5lTVpHWF50TF9nQ201NEcqXldGbT9ePkksVH4vSngybHBqU3kwQnM0UCwzRl1KMDB7R2dtYUMlWFVDSmpCITl5USFIdE5EWjkoY0oyOktxdUJhbk4haiFNK2Qva25YQnlS'@;
put 'b2BKfD59VHJaeTVpYGJJU2gxPzlFI1U6bVdXXUppdTl6WUllUzMkdzRNNip5RihdVDB5QyMiJFU/c1g8S2xMeHxeO3FdczRWIWN9T2R0X0glKks/Lj11Jk9YUVowdU4sUHdFVnQsaXorLm42YEt6TDtrWklYe2pkYWg3NiFpSGAjX1o5XSF4Z3ZWOkRlaTFhKWR3Sz5FPSZFYUtENTNgb2pNI31B'@;
put 'QF1UL2ZJTllOYG5dRU0ubT5VanRXUThOR35KMkYjNGsmZkdFfT5weX1obV12S0ZWWyRiM3lvZHd5NDMkPGhpY24wIzRQd0VEe0FjKVcuMERjMXVdSkZrVDpuWT8ua0hIRkFrei53S2wxLnlLWFBvenUzK3Ywd0NiUyFfQVJKTGtEeiN4Q2lXNXZQPUciOGtCQF1jYn1SOkJ0P3lmUmdaSXRMMnxT'@;
put 'WCxYWkQuLD5eJT9wbXF9ZUhwIVpSLzI5Y15qX2U0fGR0M1Noc3drQkUrPGove1tZKEZwVEJqa3RHZGkoJjRBPyZpfj5vNk1MNU1mOC5sN1I9O2Q5JE4lJFc1WjJTPWdLMW8vbC9NPHN9ZUdFbG9oJCpgUC4kSjFqUnszOkx2PmBmdFcjKGJRbT0+Jmo4dDYjbD4ydz5dKihhRHBbSzRvU2tjYkEs'@;
put 'dkAyKyYyVypKViM6JTYwNyMuT2Y6Qk9vdiJLMn5YTDAuSiVlW0U+ZTZKLkk+bCtgMGt2LmpjU0IwbDY3UmFgQU1jKkJSXzVJdiFbMEtraXRGRG0veC9pd0FqKEZzNERXUlUlJG4+b2N8RixlU0Y7dyoxQ0pBIiZrNjlddWBlOmEmMEVCXyo9YFFQU24kZnlmfEp6XVhSVHZtVV1KaCUhLm9UP0x4'@;
put 'LmQ1IWRrRF5aX2FFQWQxMVdJQj40JVt0azFjKHtfcSJKJVN1clUmW01jSlksPkxsTWBfazldKVtLfD4lOXp+Pj9KVyxucmtXbmY3fT9EeCUkOk8jUUxRVHZSSSE1ViF9cUpMZjpbNF1gdnA/bi4kWiJKI2dROiM7OSU+YH0xL05zVSVQY15Ab0I0fFBHKkZLeyg6VFFTb3ZdWEAudHFMY1FWa0s1'@;
put 'bnlXcUhYVjpxUEpyWXl9YTF+I2ldSF4paEw2SVh4K0c3bipCSy4lay9eY09Qa0orM0BwWX5NfiJ3JWZpZzErMyw+bytITCNvIz5KblhaXXhzd1J9PDNNTWQsNzdmQiVAaEoibUReNTEibDROSE8sKllRVmpiXlpNTT4mNEIrOTM1PShXXV48PXo6eW8+IztPQXNfOkQpcDFUX0hRTVJXIjR8LmJQ'@;
put 'LGZmYy5SfVkydnRlKGtOPG1VM2syRV8yYjNoQmVodmtTbjdNKlVZcj46UlVmJHM9bUJKM252KEUpeHshMGBAS21iUiFLVixEZ3tTL29IbzJqVEdvZCNbWGswck9mZzgkKCtzRzR0WVR1K3B2MjdWPjNNRHJyQlk5dE1GOVEmJGBJfTE7OjdYNmQ0OG90PFJ9MmV7LCJuJUA4Sl9YeSVqOHM6TGwr'@;
put 'VUR7IyxVWlsreEl6Slo6Wnc0cDwpeU56eyNMU1BaSCZjfEVdQip6ZW1jVTsoOj5hKVQkV3xsLnF7ISI3dU0qKHdweztNOyFweCtMZjheXnE7RWdRTClkJGgpcyZHKWAyVU9+I1dLYG1qR28mclRONkN5cHAmOyhieUNyXT43czc6dj1Ab2xSMC4sZn51ITh+Rm4uPF9bZXhUc3siWjQrL2BYJXo0'@;
put 'UE8mVnVTZU1nJXNjL3wiIUdmZVhJU0d5e1ZEdFVUUkEhU3Z+YTNkMWtfL1Q9cjF5ZlU8KVRCdF1WfCh6On5wbFNgI3A0d0pWeC5wSzJKNFZNZj44ajkjZEh8OSk7Xlg+WFE2clJ8Q3p9Q0o4dHksdCw9MExyNGYrYTdCUEVSRTwiU3BKb0pJeFo6WzZMMkBuRDViaExZU3VdO2M8R11wW2I2PHR0'@;
put 'ZX19dWhWYiZuYCkwO2pYZm4+QDpAUWVoTSxxZUJxKlV1JGNgNEgxRDh8ITpXLjNmRjl1K1Msdz0wPihuT0c1Ulp9dWleNHhnVk9hSk1DJSx3RFNIVEIqMG4jYDxBMSMpeGE8cVtedzxIKGI0Um1JelZvbzN9SGAjPHJZdkFHI1V7Um9sZFU5Xil8aXgqRSNUL0xgSTZ6MmdWd2ZgN18yZWJ7YCsi'@;
put 'U2FGTz1oTT1YbWQoS1NzVSpaNTBENmhYfj9hbnVOS3c8dFhveWlEJiVdUSNeQmZwd0YwYFQ0aGpgSWtSJj8kVTgreU9ue3cyO3A6MykuUV9WP0lfczJBTGM3VX4pSyg8RyVAWFAuRD80e0tVWSZpdTdkYjYyTW1abHRpVFZpdj0pWHFqX2xSR0ppNihFOVo6cjosdyk8NjNwbD1ucUQ/NzRFRDJb'@;
put 'dWR1ajtgb2VQR2QxTyo+bCp1KD1iT3FeeTt+LEU2eEUuPyRPWW9TWFtadEZkJWElRG1UTT9uX3hgOWIjLm9VIWx2TXQrUSVKVGJXNjp2P3x8VyNNTC9xP3V0eWd8YlFLYEpdNSFCKjVqKXpjWnxTMVVbKF9bS0R3cyhQd1lHRH0/dWQpYDR0Xkt2dTwzRFAkZk9hRWJ7N3JjSE0oJWE5azpjLGhs'@;
put 'WXsrYmR5bl5KfUdlKzQlXVdVSFdAMyxRRUhYI0YzPyRNbGRPfSNXM3FhNlckd0ZOTUZXMDRTMlZCIlM4QGgxO01MMSg/ISwqKFJBLDtHOnlNfiZeYWh2PCZoLnU8T0tGYVpZQUVpOV9pUUkyUnxGYjw2PkpuPE92Z1VVYUhddlI2YHlgdWpPdlslQFA0YEthe1J6eXQ/LzooaDI6emU3UVp2KWd3'@;
put 'N0dXc25lKDd1Ki9jajZvUWguQnFVSTU0KSgmRSliRmpXOHkwKF0+SC48UE40QWYoMyp7dktkOGN7e1UzfDJwWnBXS1kvYHxQdVg1aCJmfCkqQ2BJdSVMSSZbYyhYLEg7QjsyeGw5c3ojbklEaik4N35GbCEmTUpDNUxNY0dBSGo2dEglOEokeVZ6a35mNExHPko2JHAsL05DaGhufUs+RTJNZ1k4'@;
put 'bjFSXz1ILmBOaVlmKUtHbXhITi9dTV5ObXxUcXR0Uk5wamJ1PzxWdDczTWB2RXl2ekB0T206SDcrQUUjS3ljWG5iIzNUKCZDQj5bP2cwQWJkXz1dfl0lRU9bcTdBTzd+d3FweGxacmZEbXRXW110TCs+RWIjbypoZlVkWnI9TClYb3JLRXlURW1TKktRdlg5fXZBJjpJfWdCM0ApcEZaZzJdcVFx'@;
put 'W1AjbmIhfE4/WXtVe2poMypLPTM1YEgzMHVUUWpiPiQ+fXRAMmhQPTl8c0UxeilkQF5bY0ZuIyhJUmN2Zk1ge3trPCEoay5ESHZyeTwjX1RXNjs3VEMkcDRDT198TSM8NGtCSD5DODFvaG1kIzQmWkVPZyNLaj9hUnwxb3QlamRvSXhpXnlkUiV0JGdsSzAkVDZTUV5YMjJxOSk5Lj1MU3ppRkFr'@;
put 'KVpuNVckVHxDXk5OJXV+IVljNkV2QEI2SitIbXcpUkwmLlA0V1V0Jj4uJDI7Wmdkb2o1dEJKRjZFXTM0TW5JVX0pOzNOTH0qLjpXRXF7dH43RmJ7MSp6cSkhWkkxL2RZc3BSfm85Znl9LFAiJiJtNn02UzFfQmJfIVRHUEBlQW4jKHkmSUNNJWRJZiRNa1A3e3xXMlMuTSwkQnJOOnQ+JGdyJVl+'@;
put 'VUBQNCJRMyxvLldbKzZqZlEobk9tWEFUIlAzY0taOClVbn1KeEJrZVkpTEUhdzZMYncyMVklWXRzTiRbQWY4WzZhcFNELjFpaSo6SFdwdXIjKWt4WF5mISluY1p7O1VQJGFGPTI/PX1wQGk2VUs2fTkvITMlcGAlInc3UTtXLjx6MV9paUZBPmlCbmlheHhYPzhBWUJpWzlVSltzOSxTcVA/fEJV'@;
put 'cSFUdWd0KSswV3Z1aWY2c3c4aXxieCVDfWFCOT9hOyEzJVF6OXlXcXZufV06a2MwMUE5Rj1LSkV9LHRueTdhLDpPbDAhfSNiX2dFTzxUZU9UKWVRPUEjSlNRVEEuPTBzfCZ0VTBLWUlZfFJJLGtjSmpAbDNwTToodVpSR0NUc0FEOnVmV3R9bjM+YWxWYFB5Qyh7TUdYK2VDfl1xSUYrc1J0RWFJ'@;
put 'RCNFYzxwQjxDPFtQKE55VlI2Q2s0PTwzNm9JZX1yLjosKzxmZSV2ZFlVZ3NgcCZkP2hzP25Rcip+NV4sVUdeKTZlRUIuc3VRYmZXdEtSZSQ2LHwvJjVyZSlQK2guPXk3OUNpL2klPjt8WERlOzpiWWRFRFhrI04+MTpzZ05hd3M/ZGppJUVwRlJ4bEohc3JoP3tAU0thJSxANTRxeT98JldfRXp1'@;
put 'a0gkT3t8fWxJeGsieDlhfDcyKSYxY1lNMDdrbGQ7ITskZmFCZ1tMIV5+ZGRfWlpWcjYrPy8kPSMqPkhfa1VRIzVQYzshSzo/Rl9kJiopMlJZKCQhZTAsY21bcj81JTR2T0JIaltyQFpYNm9oZFViRH4+cGJMJHR3SzRPUUw4Ty5lYz9UaThSUitPYW5OInltN31Xbi5sJWl+PGcycXJmMlkrOCI5'@;
put 'c1FuRjlxfTdUZEljNER2N2dlY3d2OjFmYXFZMWg9eyxJQVhNWyJzdipCVVhSL19jNG5DLlk9WElLW0cyOE4vS14qTiNqbDxha0Bvc3FGIk9WcHl2R1Q/KztdWXU1alsuUD93cjkzNmBMMGNdXzUjLHE/QUlnPCI5WWVqRTUoRUVCWCJXY1pYLkdWelJMWFBEQDslLDAhM0RbUmZDdWhmPl1gYSFk'@;
put 'Y2ZBPl9CdWhTVDc5QGBZNXtvdU02QiYoLnhMdz1nc3omfikweHhgOWtPYTU4cFhTO01qM25mKmt5ITxQZzBZKSVdRW44Lz1iKV5FNCI0YVQ/JigzYTZLJCpoPHFWNGQ8XlJBcV9eYDF7JWp5RjI+eHJnIiZyVHIiL0Q0STcvPU5bTndhdjQzbEt2QEZkTjxuLGozeCg1Q2V3OzhnTUhWemtHW0Mz'@;
put 'PHQrM3h7emZLcCk0QWlpcWAoOHNGdEorIWNoZz5KJS5VXml4U2ZVej5tdC9gVVgwdC9ETFg0QCZqfDpgYjlZRm9xWSJnMHdfbSUxLnN+fkkqM1ZfTDJSW0V6Q30jekVnKzZsb29vdFt2ZSxPJDdkMyhHI2M4K2c+W1JmSSViVEU9JGhgUixGRDh+KnZTX2pJUSVHKFVsWGUkN2V1Ql4yXXhEQzsu'@;
put 'eXdePG94RlhROiolLyt9QCZBOldPdU8jdEJiUFZgZj53ZXExLzpVWTUpYnc8L1JXN1pdMzJIaWVgNDV9XmBpbEtyTHNWXyFEeTEpcGJsKFZZYSVSe3J3ciFGN3dTZV50fl53aCROcVomSmYiZS9HWXh1XzNJaS5pXnJYVDFOelUhWX5td096LkQ/NjB2NXUyVCV9KW1LYUw0aCt5dDJNemdqInVr'@;
put 'b045YHYifHJSN1RKdUBUXkx6QCxvViFReCU7PFRlOG9MO0RDWFRrIUpUIjlVK0MhRzUpP1MlKHVnQCZ9V2RKKk8uSndfdUxZZEB3aFY3eGJOKWUiaiwsXjlEPywyKjwqTDhaKSZwJDdHY2pGK1B5ezhITHJLPytIR1VuVVZ4XXA7Syk+X3w6JiV2R0BVVGdxJkVZXXFZcjkiSkV8M1szMXBGeFBC'@;
put 'W1ZLI31WJil8VHw8dV9MWUtNJSNeUnQ6TTB9NSl6KX0/eiNsJVdxc1RrIXF6L3xuKFpGMkhde1d+eVV+eCZofGJ2K0YiP0kmRyRGKkZqQkBRZjV8KTpBRTB3RjlRQTk/altyK2N+RzksIih6NUtKRUoySFJIa0V5LGM3RSR6N2xbVng6Z0Jdcmg2Vk9ae0AxR00mZVt+dHRwP3hWTGc9Tnk1X09Y'@;
put 'KFFoV3RKR3J2MHx2RSgsJiU6czZ1fmA3Z3hgSTg7Z2N3Un5PVnYoSltIdChfNGlSc0heZlhPVmEqTDZJM3E8OzxyUmUvSFg+eComTUNXJnpWRHg4dm0zeT1MOiZxPjxdYHI8e0UoSl93eXEvPDVfUjAhYj98aWpbcGByczMxPlo9STlwKGU5fT1eTmo3PkAxanF6SX0/Y0FqXjMlbm9QdS4lWT88'@;
put 'Ujx0NHUyJWVyc3hiPyRLVGVIUVZoZTlqZlRAPWRGWXlxInZ7bUh1JmVzPnkrK2sxbUliI007MFIsQUoocmZ0Q01LWi82TV1tNTJbb1MpMmx4YlA0fmo8Xyt4N20lMkJhQ3s4bjU9QENhYndjUj1ncURHLyhUblQhODZYJG5de0EvPHs1O3JDUFA5OHgzYFI9bVRNfW58KHomODA6WWdGTSpjb3Y2'@;
put 'SCpXfVcobz8xcFR0RE5IMjRAWjQyMD5iR0hDL3U3XkZ7ImRUdk5MbFJLMGpEMGhjUlJESFZyKlJtWDpsTltZenV2SDZLZjt2XTNiMSg4Jihte25lVTA5MVBIVXldfjpoKkRTRWR6Ijp4RTlnSF9nTlQ3ZlRTTywhY080Wn5pKCxyUndTKTlFJT94UncoX21+eWhacTtISDUoMSFUT3NZQ1h7WD58'@;
put 'aVk6Pnh0QVdkT3dnezlkUHtjVyMmbENGVlREI0tXWDhaZXklT1p7akdyYiFsL0htUnc8QVV6WXNObkxpbUB3OXNPby9YQXFPQngrKjU0aTYwR3UhRi9OeD9kQ2g0bCNmMFpwezRkc1A0ZlVxOSZyITMsezQ8bU9+VnhzOUE2X3MqaH1CZGJzc09IejR1XlRERkwvaWwkfWNvaEsyOSxiWVNjKjpG'@;
put 'RnVTTzUsPFB7Qz44d1M9RWNFUFo6aGVScHUyMyRLY0ZSQUM+KSQvV2wkTW9eIWd+PkZ7WU5melpfYURILjsqK0BubzxLOXlXJDZFMHhxRC5yKjI4TCxsZDxyNUlKKElTYDJ8Y295Nz4hR01sKU1rJUFCJE4wcF1UZlBCTlY+THhLMGltSCVCbFVOcUFbM2xDKHchKVsuQkxlKSIjNDI7NDMhYUcj'@;
put 'U194WCF9WklbZi59Tm4oXztqUWRiKkw8dEI5XnZ1Ll5kT0xpMk5VTFBudmhXYFhLNVd2VCR5Oy9vIlVtQztaK1JRWGtYdntQSl1bd3BjRmhhaCNmRUxOc3xjW1F3b3hBdUlNI2lqSDxJPyU9WUUlc2oleFRocDZ9RzIkWll0P3cvXVNROmV1aTc8RjRQLHdkNX59YSRYVj8lQHclS2pJOip0Q1lH'@;
put 'YHt4dltpPFhxIXUpInpwOSxsdyRqakVkMmddUFByL1YrfVlafTJQLGVkTXFoL0VlWSYxYzRzb3pwRX5xQURlcE9DOG06cipLTVkuLEArWVlSeV5ueU9pc15SJlN7bzljQ2w6cmpYRD94e3RsV2B9MFhHOkNgaktHWUYhOG1ONHF9QkovQFg3X01WaUBjcE9ONE89KSo2aTcqIy5NdzxEW1khckMv'@;
put 'MC5fU3poWStKVG4xcloiPk9ZbmZ+ZnFtWUhBNF9KU1Avfmk2PDkjJHI5clg/UmJ9ellnUklGO3RkJU17cWRLXXU7Q2diQ04sOld0eDtuZHd9REtReTh5dWt8bHZCYig4fVJMTmMpXi99V2tGPHpXOEJ6c1ZbNjpCdH1DIUYzM1ZjY1lFU2gjRTx1IzI6I04rIVZEIn42fXkoZTtaaVBWSmYuWnxG'@;
put 'R2xDeldxfThWWkcwW1ozWmBTdCgjWCRqVE9rM3UhNnMhQFB+cit+JDl0U1svY3tveUlpS3JCRVkzIjtVU01uTV8mI1ExLlZ+Q25FJndJXTt6OiRLYFYwRkAyWUcmOHRGRGV8TE5NZmVHR1okPjtQNEJQYio5KCMqYTc+YiJYKCRiKUdSeUJQYXpTX0ksdENwezFMQj09NndVMmFAbzs6Nj9mKT1P'@;
put 'YHNoZCNlKWV9XSN1VWVhaEZkTSlPeUdLOkw4ay9mOTBlPnVdMT1NI0BEazJZcCFBZjpGO1hzQkJkQFBbQn5QZiN9USZEK0B0QkYlV3F3bGRLX3N9YmZVNi5bPH54TXl1KXlubkFNSHc5I3dQaTlvYGV6WFIzaUBKZ2I6Q0RfIldnOk5AeGNKQzpgJSxSL1hYbmxoOUwkeG9LaU5dZzQsbmtJOkBE'@;
put 'N0NIbUlVO09nUGIoX3pSRzJUeFBSQFRtJkQyWGRqKiR+Sj82Pkt6XnNhbjJBSkU3YzwrYkI7dyRObUFBaXosOXQ/Yy5uOjU7cSV9Xn0ucVIsfk1+Zlt3SitAcEpaaGQ7bGJNU0wvKCZHaW08NFB4L0twbndDbUB3UUd0MlQlLDVyMlJ4KTNObWVwZzh5JWFtQGdZamZuRTU4JDM6Il5LPzcxYVRL'@;
put 'SX5JRTVVZDJ4YDMhUHJ3ens2N0JHen0uTD45Olg/WmA1amRsLEcmUTk1blZeWWQvWkdbNndMKFV4NGlvIWpqbz82T1JqVjBbZVRBXXpPWTdtaFFqZW4xI09iZWpeZDQpOlNtTjhbOXY4IzRWJkRfSE1MYUMjRWVZKzo2XVV0PEtFeDUxKlQhUUR4MFZ5Kyw1RSpeVVJaRkxyfTBOemdAWW8rWXFJ'@;
put 'SHh3ej1pRHUkTFU6LkVCdSw1MlhUcGFee3pMdUBseWIzUGV0KUtnc2x4fGNSdDNGQF4kMTp7emV4PyosaSQ1K2RmTEc5RHo+Mnl1eSslSSUmfTw3KS80KkpfJWh5X3xPWyglaE1pN3BdWWw6Z3d2X1ExKFhfJGd5fiJpVVdRKWRCaHkkfVEyYSp6K0UsXlNtXWF0cT09I3U6OiRQXkR+Vn1ETG9m'@;
put 'O15FOUhjZit2SWdzTUo0cVR9SVJoPkQzU0hVInxzQmVfKW5bP3RKZUIqPk4oXmROW3lISFdqSllsejd4VlRMZHg+fHFPSEklXkRnKzZTZkt7KWUya2lrVzBSR08jflZrN2l5XTF9YD9JdndyUj8wdUIoYnZXY29zQ0VHLyR8dSxAW1c2O0IpRFF+d3YxYzUsUX4oU0VPdH5EfiR6MDF7Rm4zbTJk'@;
put 'IWh+V1d6RT8laTBTanFHRGxwWF8lKDxAZytWSkt0a2tUY0UqN058fURGX1NzMTIoO1hjXSgjXWhEJTBKXW5MJWw7Lml0X10xWFordVJPTiZWJTJUZ25yNDV9SnxObyxOX0ZQVjk8e01jWCMvVENPJklSYnoyLnlEMFk9QEwhKmdDS2kxW1hTJFJRP3hLRUgwbFVDXipjIXosPTdCQCZ2ZGxyLztT'@;
put 'elREKDN6REZZUUF6OTNydVRbRX4sY0syRVhmNzJ+Uy5OUzBrSDcwU3ZwKi5bQHZXOW0+WT9pZXpGZDlHdGEkQ1FDRyZhOUhWfCN0NXMhUDFZKV9FNV5KX3QvJl5QTChLYTtoYSF0RGEmfWBUbkV4YzxdenR3b2RsdjMqcVl7TURtQW5jOT18cTVqNXRJNVMuNFdBNXVWYzlKZFFwaGBicnc5T25a'@;
put 'ITQvVjxaanpkPDYwemNTK2RsZEM7Km81RUksRy4+YyQ9YjZidTlqSTEkJGZpal9tTCpBUVYjJGd1bUBRcipoXXVNI0xfVzNhYXtdPi5fYyUqP0dNYzBAYU1yOn4wSE0hM3l0cl9KLHVIP2dNczU2V15XblBXV1hrb1l0a051L0xxNX0iVWRfMzJWK3JdJSN5bipfVy9wRjVAQklMXkxIfFYzNnIj'@;
put 'e1k6fWdDM2FASlIlbitrSmB6KHRFW35zZGsrdE9UcjtIPHB0YCopRlVXVSU9X3ZGXlN1UT1AS1guaX1qbUY7QXUsMmExc19bd2ZVd1FuTHNbRHwmLnFDXVcvUm5nfTo/ZiVoTkhFNm9UO0hsPyo3WW8lMitaeTZxQElSLFolNSxBIUdvaDF+PSpwZl4ufDBDckA3PisiI3deX3EvVXpJfEV2Nzgw'@;
put 'QDRTX112d2siKSxJKEw9diI7bFhRPD8rdXxMcCk/TXNiITJeJWIjJmMxNm9MNCw6cVdhIVgiRiVDfnN2KyVJVVdWIn4hamd+JD8xN2dpRkdHQmF5aTc/JFA1cURfNWNienJ7VztkZDEqekA+JVlfZn4haiQmXX5Mfk9KPjZzZ186dHopZ1cqdU9WND12dGtZI18+UCo3b1l3QCV2YjRkRzVzMzFQ'@;
put 'bUMsTEw/Y2gwYHxfMSREMjdlTFRdTmhpeXpTVzBCRTs2PjlDdXNHYH1QeH4lI0kmIzdWYypwKSZ4eDNZMnliRTw/OXZZMTE2Zl5nR1hCNjdjJURiWFlLRVk5VixoU3FvUi5lXnw2V3x0am9jaXs0ZD9YfVNmQnhwT2M+L3Vnclgod3xAVVRZXTwiX2MyWSV+KG9FIVRSUSprNi9yaCE9Mj9vODB9'@;
put 'ZzYpRWEzcmg2VG9YMWpebyFPTT9+NSgzb2hQMiFdeEFhTlNQaz91elRMZ252NHdNSWpyKWJ1dVtIT3o5e3Y9cEYxdnkmQkkxRTZQIlliKClGcF4jQU5NQmtbaklyUzRRW2EqYXExXnZ1VT9JaTRub1N9bmVRfD8oVEBDbH1UVlFtREpadU1nOTlremM5PFI3WXg9Q0l7IVZrXXZrNnJoJEUoaGIx'@;
put 'OCI1fEtaLzBUWltyVGRJYi5tM0FFRmU6T0pyVH5JNHNFalFLKSlrKFJPP0sxaDIlUnxxLlJVSHZ7RHxPXiowLkVvRV49bWhffkhUV1FRaltkZ2EmcUBNaWNWNTdRWWJKeihZIXhXZFdFe2R7JD9jaHJ8OiVhbkV0ez1iUHtnZ089THI0VHlnNTU5fTtvNHsxcm1CfHNFej4uKmtOWHI3W2V9S3Em'@;
put 'JEljXlc8TV04Kjx4WSFrbmhCRHZNKk4vNHlHcTJXJnJgRmFQMTZQN3Q9S28ofEFjZHpYUUsoKzU3IkhPZFBwPDo6MlIpI11ZS0k0N148UUAxOnJhXyg4IT00P25AUH5sXVJBU31+fCY/KlNyYTNPJDI/Yj9GSXRrIUxEX314LFZFPDpOaFlqT3NIQjw0T05OLmBPcjFALFlFWmJQY2pjPGpUbj1o'@;
put 'TUp4OnVvOEB6QHElIWNyKSpLVzF4OSxrKWRvVyEpfV8wOH05VylKbXpmUWJGOVgrVCt1OVAlQkNYe095dXZPPCJ8XlQ1Xz9Ca0w/aT1yPFtnbHRCYGgmPihFYkhda1crLz5tb11WVTgkNUBxJlBBKW07QyElXXpGMnpjSDNFTk1FZXYxVD0qRHFofWBgOzNoUmB3NCtfdzAsMTpLTnlNKnU8djJW'@;
put 'M0EufnJAImtTc2FWNSM7RU9EaCRFQG1wZSkvWS93KGd8Mk0hcHxmS1prcSEpNn5UZHsjMkN2fk5FaFZpZjNCeF4pZ0A7cWM1cFYlNVYzSklvQ3pxbk4xNEwhPC5WJCpCRkNufXh6O1Q8SDh8bjFTRix3VyR6JEgsLDhabD5OemBZWGk/c3BSbGEoKFs8VEssbypsLDhyVUYwO3chUGxRY1JtTGRD'@;
put 'ZmRxWkxBZXJgOzFARSxsV21lQnZzMCg+Olh0UkU9UjF9IjxWPjZZezpxaDtMcmNvNypnLlkmczlsKHpJYkMsbiN3ITcsfnJIKGs7Nit4bj40ZHFgSzs5V1YjVVgqLGQkQGZGTG5ocFR5UzA5NltGa1omSmpCcSoieyRwTkskWFdAZUVUeSNnP1c4Zyg1LjhhXy8hVlRPPDxHfmVveTdoa3twQ1p8'@;
put 'ayYrOV4pXTdFaipKLHNKWzkycjwuMUVzPHwvUkJteXxsRmw0VltbMnsqSytYckJoOVgsSlE9diFQbyRDfStUNDpdRUdffGxlW0ZXeTI0aWo8YHlwJkkleEpPO30mfGN1USZSajslIXopZiJRbTNGcUdvUEB6PHBwQ2RZMiEjfGMmcmtqPVdhfWc4W2Rse2hrZGAjeGRYUTtte0g+TDRbOVQpezhp'@;
put 'Ok1DVmV0e1oyOT0qYmxjIT13LmlheTRiSDg+VFBoNVsjUGpVfWFEJiV1Mix4RXghbk15ajRgLGxYUkdKIkFwTkx0dHtMeE9mMF0hY15bLGFMRDMyS2d6PHkrbi5vWFQ/ZDgmTUsoamNDWWdYbEgoQ2ZSPn08T3h2O1RjclVOKjcjOFQoKiE5QDwzZXFNSFh4eDw6WTNsNUpdYzxLKlFzMSEiVVFH'@;
put 'YHdDRipePHR2UTt3YTI8VjImRGp+eVJjPFNQYVQxfC9xR3pdSGVtJCo9M1Z9dGhkYWg7VFpEMHFuP247QiFHYWgpalVgbCUlREJfZCFrKDQ4Y0AlIzU0O3lLPFQkRUlmPUR0dm9KYlFxPGdrKVJoITd7OChuLzVfOHNSXiR3cSMvX1ZxKF5NdCIhPXhmIzdCKVglIUZiIzBDelNbP015OzM/M0My'@;
put 'SS9UVzMrVmxsLEd6cCR1Q3dNPVZvVXVTZjJ7dzwoenBtN24kQ208WTtKSlQ3YWlJZUMmeC8jTWt0V0YxIlRhZHMmWkUiZVVdNiMvOCk4SFlWejNDXXhuNGA2OV1gK1FISVtmUmM0bkVLLjhWUHQoIVMmW3R7QTNPWipqNVNVT1lPK1d5dXtRaHt4Wix1MXFHbjdVZl8yYiVkd0pQJjhQIUNXUzww'@;
put 'TkdEVyQ7YVZqcko5PHx9R3wye3MyLCtjMDIrX3IqWEU1fERLWkI8Y0xmI2RyUU5TQl0qNHNtRkwmcV13a1k8R2NXKTY5dTpkJVIja24qJjJFeEtQc2NUfXVZVnhjfWpRMF88QG1Pfk95REtrRGo6cnhSb0g2MkdELygudnl7SWxTKy92TW0zd0FzTUxAYTNJXmZDVDJ9NHY1cmUhbV0sOzhzNGoo'@;
put 'SWgxd2tJU2ZFUURNUlg0WURdcHtyT3tBeG0qXy8ldEJbXjgmQ1JScFAhYExQXjpSY3dlOEltbmVhbEZzSXtGYlRTd0h4VjkkP2F7MEpUZWpFPHQzd1RjdjxjI2F2M3pGa2Yjb1Z+ci5uIXU0KFQiSG01dSJEQlc0fTJCRExOeUJ5LGFIR2RzeTFWdTZ4Ml1FcSF3a108Rjt5az1ZVFp3Y3w6Tl5b'@;
put 'VVVUdUx9V21iJitIRFNmVzU5PWFWJHh7dztdaWBlQjpqZ35gUDYzfFsiVkIpZmJrKGlIIyh0N2cvdT5nKy98P3F0a2k1Uj0pTUJANmQyQnUzYUs8dmJISigkJmEzfHJFZCVMfV9XST1AOkdfdjJhI0slPmA2P0wudkBHZU0rb0VhZ0IxIW9PKDRFU2VNOD52TEBFb151JXN+akx4XkVAeT4jNlpn'@;
put 'bWFGVSVKWkglTW5yXzh1ckMxfF0rNzksZi5FdEtkYDokUGZkcVFgW1RsbzUvN3lpN3kiYWVlTUUxKWh1VyVUPnJzPEBNUTxkZ0pWcEcxcnMpJGpmZSRRSUQhVUZwZEpWYzpbeH1fQiN2WHJvQlY1REs+MEIxXyQmcGxPNU45R2szOiR2PnthfDBzQ1VQeVVWRkhwW3o5eWRdMDJ+QTcvdUEwNypk'@;
put 'ZnVsZEYmXTFjXXRRXUAhXUxyeHYvVC5nKkNeUT1WL1AkWTRLRGFRSSJ8bDo4e259SjRwWC5+I35pO1AlVihRTlVYNHs8Y1tbb2BTWmFgdT5nR291R10uQExwK3o+aF4hNDdwXSM5LlBlSk8+djgxZWNUZzBAOCJ3PyVTeEdaZXUxMyJIWVNlYHQkTGU5c0NnITJPLllBIjBheSJDMzJSTTlhNVI3'@;
put 'bE5Jbl1+VVJDYXJqNjZRJE14REJjfiZhY0RWTUtYTCgkMno4b3ArMyoxZT1kMXR8a2I3VnpAV0x2IiRzcWFaOXIvUnMyUEAialpueWtqYF5nbjk6fjN9XnNKODVMR31oR140KSg8SmlHIkZwMn5DIy8kTX59JkFbIyZSMGE8YFlIdWwwWTZtey9edEx2Nk8wQDk0V3hoJGprNWEzQH5bcmhxUiwj'@;
put 'RHhJUXNdTnEoeFReX1Nhc3UsQTg2W2JgZj5dI3glLjdAdXBwZjkpRElyYzxCcGpDV0tkPSQ4RGgkbX4ydVVePyE1NnJaOnpmKmR+VG0hdzBdLmxqJXlDUkZCPTdMTkBWVV9uZlViVl1tJHZdRGg/eGIkYmVVPThtYF1rNjMpZiksXVZiV3BYYXhzcCRQPSRgRDl2JXRnRSkwWi5hTXJfa3tee3Q0'@;
put 'MiVqSmQubDNAeWw7VEE7a3JyejBDTEYlfGxESnNgWzcjUTpiZDVAfVMlVEhkUGAvODYldG8yZ3RDIndhYzNDTEZMRkxGdVk5Onw3fjc2W0FnUERnOV9SUzU7V0tYaS8/aXxtcV0rP1IjYFAsOTdgQVtvWnhZYHlSLF96SWVlX2JvMV04T1ksTGU/aTcsRz17Onc3Nj5FeitsWFp5bDo1KTlAbVp0'@;
put 'bjNPb3Q0aUliSldSUUkleWY9VmppIWdaS3ZuJEwrVzpjMDgoUmRuQ3s/PS9lazNARzZ5Q1koa1t6bEhmQ3hOZHM7JCVXPV1HSzAvXThfL28zWnBsOCRAbnc+d1ElUzghYD1fVShZe2cvfGtlSjZNNlMoSSQyb0g4Mz4ibjc+YDo1XkArZ1pIc3UsRjtOUjtrKFdpbypJWWE1NjBkWDA2JTBoQ1Ay'@;
put 'YTJecl0qZCVsI2JRPzwxdXRAelQ4YkpfSCVrZnFjfC4kJHk1UGV2NDlCQkBtTDlxWjJtMCxrYTIzYzVFYiQse2FgbTJZZTxHczF1Kmp7OGIkcmViOmM/RHB7T3IjT1UvIy9bNyM5NW5NKSVqTz1XfjpyIj1sI0MoeGpxV3tsZ2FUaXBFKkNYTk9wVVFJKUBha3YhaExxXVdfd15SRkA8bUI4dEZA'@;
put 'a3BfSVdwSjNsYE9gWDtiaWdiQWBMJGtwLjVsMUR4X1F7NWglXTxkdi43YFssYkNme2RpOFYsdT0wNn0qKV1Ge1ErNl9FSW9dYHlSPXEkRV09IV5JNT5IPX06P11yWVVpYDgmTjY7N3A4O0p6ITJCO35qPlB9TzlAeWUxZ19UL2trNVVhWnExeExEMjdhUWZFZXYoOGgwQjhSciwueDwlJW1GV2FP'@;
put 'N1J2fCJFXVtkMDd0P0JSNjozKzRnKGx4bC4hQCE0W1ljQjg8Vyt6PmNBZlprbDR4WXtTdzR9NTd0ZVEuZDg7RV1zPjEjdWt0NnVVczByZ2ZbXlo6UkU7fF00bUNMOjZbJFV1QHpkJHE1Nk5CeVVLUTB6ej5sdTJ6PiJUdl5AbVB8OHx+ZDU4WzdhcFFbYHlRPSVkMykmSylES04uY2xvLlQjZFIl'@;
put 'JGc6MFI6YDdTZHhlOyR1MHF9XTBSOmA3UmdgZFA/cTBNNkU4NV1bUXFSOntXZEhLTUZ7OEQrKiNZbSx7cGJ2YF9yNWwzQDhhJC5fZGt0ckNjZ2twRXAmWXFJWmVWOC83TmRkJEw0c3kkRnk0bFAxZ3J0amRTQk1VXm1PbTYyUjprZTtXR0pFKCUqaVtabmIuQzg2JFokJWtUY2RqVDFZP2NuRzFo'@;
put 'NEZQVG1VaUVzQWVyJGpyIVAyN25aOTRwKnc3Pjx9TyYjYH11PDBxInlASS9tem8/eWRYaGJaMz43amRjTj55JDR3T3QhciozYz1ncztMJFQ5eUc1akVkWGA3ZC83LjQ1akUoZ1hHI3ZPdTd4Ykdkc0dEUCJ5fDs5NGpYXWQrdVtjSGUwWFcxb1lxT0ZmfGZFZ21hOTR3Tyx1P2ZWJjJjdCV2UFVh'@;
put 'fmRkWCxkLzd9T25aUT8uOm4wSmUsdXlHalpEUVJtQWV1KjRjLyQ5YDA8X2ZUbU5gfE9ebmIxTyxlZEQ4c11lYyw6QWVlKS4jS1RudV54RWVPRmp6Wmt9ZGI2VGUqakpeNSQjRkY8TCh3VWI6RGUkN3c8Xlg5I2VYW3c+NkZOZ2NANDZ1KkhgbXQwVyxkTFo3NkBvKSNLKU1KelEubTBxXSw8b2pJ'@;
put 'IVlwcDBwbHd8OHIiIUFQfWRaUGxMWjdVYU43YDdmUjFOSDBVPXUwWDgoKi40PV0+djxvfGJTfT1ZZjZ9SGFeNyE7RzJgLDxmTzcvZz94bG41bUNaJFQ7eDlubGtdOGJQYUYkT206clhtQVpKOFQ1RTZNYXJlPnlpW2g1W3BAZn03e3JJWko4TFs2biRqMTlvbSU3aF4qI3lDRmVdNyxkMlZWODky'@;
put 'RCt4c29oTzEiJDJgWzhPUV4lNWVgU1R7RGwxbHQpQ2tpOD0leEwobHE+azdmSjZleyNNZ3lidTNfNkNXRk17dC96eTcuU0BMe3RsMmtvU2l8N1dfQjgqOUs4bThMJD96SjZSRDE0ITZaaFU7ZTN6KVBgbDdRYVRlTykzWnZdOzNEOEs4R1hqezVVL01ySEU/RFcuRFsyc11UemBbeDlfcXVdbHZ0'@;
put 'SDA+TzFNekwkbDtkaSM3ams/LnhIKEAlbzo6NWE4NH1fZ1lkOF8hTn15JipSfmR4NG97V1o6bD5gPEgkZTshQzEySkFCTHhYYCIlU1pjUCRlbHs7bmNQcUVJeDc1RHZNfTtuaFVxN2ddOD8wOmlKUGlfJD9kTztjNyt1VDJQeS96bnlLSVAjaDdnbG55Q284fG5UMn1JXUZ2QWJ1SVZRdl1uMG1h'@;
put 'ImhfJHJKKGFHdjN7VFF0bFkwNVk7XShTWXtrMShTLmFOTGJpN1ZjKj1JPz01dlouOTdJcjk3QlJxZ0lyQTgyMCU4QGZDZHx4eTBqWGQ8d09xLGhKQXk9bkd4QmV3Iys4ciQxd15vZE4iYnZ5XX1RXVdLVzl8WjJtNWg1XnJddlFkJFsmZVhtdkp+ZjlHWmN2cDRpSVV1dFhybH5AIjcxPWF5SkZN'@;
put 'NjI7Jks2JSpEUnZTNyRkZEBmVVl7YyRZS1c5PU9xZ1NIMmFoLjtubm0sLnQkJUg4P1RgIT1dOHcqWjF7N1o4PjNedTJQO1VmQXpfQF8/RmBIaEdeKDprbFVBSWZbWm5heys0dVFHazwhellfJEwzK05YSWE/N1tGbmQkZlZIc3slTUVwcTUhVWJ4bWB6K31QOUsoU3pDKU99NFR6SnRsSGZqR0Ij'@;
put 'aEV0fWBYcHE1IUZvLmpxaiJoXzhXRTJjJEQ9N2AqQD1dI2dranE3YVVmVz1sN204cSUiQVk6ISo8MChKS2dZLDhfP307JDMhamVAPytMXTUlZG0lTnhPMSwqXV82blB7X19Jd2Q2d3NiZGchQmNmQyQuTFZzO1csR1ZOZUdaSGFIS3w4bVZNNnhlfXgiN2dFXkVaJHUlNzJ1VTFKfWRBJUAhP3xr'@;
put 'M2ZbQWBONm5ScEpRS0pxLlRzSGYlLlBgK2NnJHhlVHs/QTgjJVkrKyNLRShTPjo0NSg7IU9uM2hZWUlRTzNuSXZUOT88WCFdMUlicl4lTFJlJDRqWCx1aWszZSx1eERJSFFPM25JUHxmYmVPZU9lbHBWUVV9fTxsZz0hKTRgdXlEbmchcDlbRTE5W2IkOVt5O1gvPWUiJnNpX3Y0SEBGR2Z+dGFz'@;
put 'dF5bam5hXj88bDdfXi5gZ1ZKZzl3WDVWKXAxKSFnR3Z+X308LGFHdkAlJTklOVVfcWdgNT1aJHo+bix1IiYzMFcsSUdHZkdTUjJIKG9dJjs/XW5wJiU+Z285Jjs/XW5wJiU+Z285Jjs/XW5wJiU+Z285Jjs/XW5wJiU+Z285Jjs/XW5wJiU+Z285Jjs/XW5wJiU+Z285Jjs/XW5wJiU+Z285Jjs/'@;
put 'XW5wJiU+Z285Jjs/XW5wJiU+Z285Jjs/XW5wJiU+Z285Jjs/XW5wJiU+Z285Jjs/XW5wJiU+Z285Jjs/XW5wJiU+Z285Jjs/XW5wJiU+Z285Jjs/XW5wJiU+Z285Jjs/XW5wJiU+Z285Jjs/XW5wJiU+Z285Jjs/XW5wJiU+Z285Jjs/XW5wJiU+Z285Jjs/XW5wJiU+Z285JjtMZV9mbzkmOz9d'@;
put 'bnAmJT5nbzkmOz9dbnAmJT5nbzkmOz9dbnAmJT5nbzkmOz9dbnAmJT5nbzkmOz9dbnAmJT5nbzkmOz9dbnAmJT5nbzkmOz9dbzkmOz5sYm89OXhVKnMmJT5nRlcqez9dPjB8OlYjbmYlUD8wbywlaj8hbmYlUD8wbywlaj8hbmYlUD8wbywlaj8hbmYlUD8wbywlaj8hbmYlUD8wbywlaj8hbmYl'@;
put 'UD8wbywlaj8hbmYlUD8wbywlaj8hbmYlUD8wbywlaj8hbmYlUD8wbywlaj8hbmYlUD8wbywlaj8hbmYlUD8wbywlaj8hbmYlUD8wbywlaj8hbmYlUD8wbywlaj8hbmYlUD8wbywlaj8hbmYlUD8wbywlaj8hbmYlUD8wbywlaj8hbmYlUD8wbywlaj8hbmYlUD8wbywlaj8hbmYlUD8wbywlaj8h'@;
put 'bmYlUD8wbywlaj8hbmYlUCMwZywlaj8hbmYlUD8wbywlaj8hbmYlUD8wbywlaj8hbmYlUD8wbywlaj8hbmYlUD8wbywlaj8hbmYlUD8wbywlaj8hbmYlUD8wbywlaj8hNjJDQCZqPyFvPCE7XTAvVSNuaj8pKXN2fEVfSj1UI25qPykpc3Z8RW5nPSElMjEwMz5XM3klIXZOVFBLLzcjbmo/KSlz'@;
put 'dnxFX0o9VCNuaj8pKXN2fEVfSj1UI25qPykpc3Z8RV9KPVQjbmo/KSlzdnxFX0o9VCNuaj8pKXN2fEVfSj1UI25qPykpc3Z8RV9KPVQjbmo/KSlzdnxFX0o9VCNuaj8pKXN2fEVfSj1UI25qPykpc3Z8RV9KPVQjbmo/KSlzdnxFX0o9VCNuaj8pKXN2fEVfSj1UI25qPykpc3Z8RV9KPVQjbmo/'@;
put 'KSlzdnxFX0o9VCNuaj8pKXN2fEVfSj1UI25qPykpc3Z8RV9KPVQjbmo/KSlzdnxFX0pLc3ReVTltZjopc3Z8RV9KPVQjbmo/KSlzdnxFX0o9VCNuaj8pKXN2fEVfSj1UI25qPykpc3Z8RV9KPVQjbmo/KSlzdnxFX0o9VCNuaj8pKXN2fEVfSj1UI242NkJ7X0o9VCRfXyM+VHt5Pzd7TnZaRHpF'@;
put 'TUpZU3dpRypNdlpEekVNSllTd1Y5bjxoLmIsY181Liw9UlkxMnNHXWRQTnZaRHpFTUpZU3dpRypNdlpEekVNSllTd2lHKk12WkR6ODBFTUpZU3dpRypNdlpEekVNSllTd2lHKk12WkR6RU1KWTRlU3dpRypNdlpEekVNSllTd2lHKk12WkR6RU1KWVN3aUdwZypNdlpEekVNSllTd2lHKk12WkR6'@;
put 'RU1KWVN3aUcqTXZaRHpFTUpZU3dpRypNdlpEekVNSllTd2lHKk12WkR6RU1LKj9dPGw6bmcsfXUyWXAzUm10dThtdnU4bXh1OG1dQjByNlsyUCJXTlcpcH0hOyx7X18jbXxxWyViNXghO0tNOzM/VWJpZzlXKnNxdF4zM3tHTm08JTtfMzNgcGtmfEdMTV1OWCptfHFzeGVZKmxxL2JzdztfMzN7'@;
put 'RzY/U1ZdTlgqbHEvYnN3R3plW2EuN0lJOTVpRUlhQFNWXU5BV11OWCpscS9iIjIqMXV3ZzlWWUo9Yyx3WlJ4Qjt7VHlKYX1QeH5PUmZpISZpcSpddy5IMlBSZmkhJmlxKl13JWUhb3Ahe180NWFiI281LlozWVgkUFJmaSEmaXEqXXcuSDJQUmZpISZpcSpddy5IMlBSZmkhJmlxKl13LkgyUFJm'@;
put 'aSEmaXEqXXcuSDJQUmZpISZpcSpddy5IMlBSZmkhJmlxKl13LkgyUFJmaSEmaXEqXXcuSDJQUmZpISZpcSpddy5IMlBSZmkhJmlxKl13LkgyUFJmaSEmaXEqXXcuSDJQUmZpIVY1fS5AIyg0UGdqLzJeZC9IUWUvMW1lL0k5dDQkOXxyfHU2W3dbZmhpZXNmU0ojZ1F4V3J0Xl0vJG85UUJeXyMj'@;
put 'SXJbZmgleCE7YjUyXyVRaiVlSW0jMjAlODdqUVBtZmMsZ2U8ITIwJTg3alFQbWZ5bGcsPG1jZWlzfG9RXU8kTiM7NnQ0KmZjLGdlPCEyMCU4N2pRUG1mYyxnZTwhMjAlODdqUVBtZmMsZ2U8ITIwJTg3alFQbWZjLGdlPCEyMCU4N2pRUG1mYyxnZTwhMjAlODdqUVBtZmMsZ2U8ITIwJTg3alFQ'@;
put 'bWZjLGdlPCEyMCU4N2pRUG1mYyxnZTwhMjAlOCwjaiUocD5gdyxgfG9LYHxYTmB8R1FgfFsjO2AkSClRTSF8ciNnTTklaiRQXkkjZ005c3t9PGxZOy57PT9oZzl6ZVlydF5DOG1bfW1xW31tUVB7OFc7bTlicGg4O2czXSRlOCVSO205YnBoODtnM10kZSVlIW9wIXtfNDVhYiRgSTN4VV9CZWAk'@;
put 'ZTglUjttOWJwaDg7ZzNdJGU4JVI7bTlicGg4O2czXSRlOCVSO205YnBoODtnM10kZTglUjttOWJwaDg7ZzNdJGU4JVI7bTlicGg4O2czXSldPGwoZXU+JVBYbl1MWG5ITVhuWE1YbldQdT5+Vy9pQEROfF8jS1AlZSEle19fIzVdXi5TfmtTIWc8OXV7fTx5SHJbMnNpSmc5XmVnOV5lbDIjeDc3'@;
put 'JXdBeTdPV2lAREdmcykqSE0he3V3UFdpQERHZnMpKkhNIW45eT5tJHE8OlFuaW0xL1BlRH5VMzxFbzpjUE9SW1FrTk4mW2clK31Td2pyUCN7cDowYWJkIVtkW0RHZnMpKkhNIXt1d1BXaUBER2ZzKSpITSF7dXdQV2lAREdmcylTfXxmIUg2JF9EZT19Q2U9QkRlPUZEZT0vRE58WC9TZn50YXN0'@;
put 'XmIsWWVNIShydF5RfSZvTCszeCE7NVA1VilwXXVpJUZqZ3ZXbVhmfl99PGZ7OF1jOyFIZGVOZnppSyVBKyQhI2BQcnRecyk7YC84Z2MkNDpdNmBUYVQ/QGlhWz8hYWJoeWVYbzl7TyouYTtJbGk4TnFRJmNnW203Z3o4UjpqazJtazlRK1daOTQhMkwkYzExJW9bQGlZM3JVTzNDMzFRVTM6JWtb'@;
put 'Iy5meTw0amtmeWVYKi4xMGVYfG9RXTdwUV15IV0uQWV1NHYlZjg6OEMvQCMoNFBnai8yXmQvSFFlLzFtZS9JOXQ0JDl8ciFqUk0pWGk4fS4qSE0hfHIjZ1cjJWopb2AuWzs8bF1IV1Yqe3R0aSVxa0VeXyNUODUzaXJ1NGhrfTM2WzJmXWxbSU92TWRbUCRVVzlnWWQ4JGFAMSQ4OE81NmtwNi8w'@;
put 'Li5sNCsiZlEsT2x+JHtDZyMjJXRQe0ldal1Ccmcyd1Y5QHcoWWh2IihMMWdUN0hzeD8xb2ZbUlZQKT8hYz0rTDE8ZlIjRGZbUnlFaiV0UFA5PGxnWztgZGdaVkNoSXI1NnVRUzZaOEtnTWQsLlt6cHk7PXkja2QlQEU4ai91UXlMT2ZWJHY5UXprXkckdjl3fHg7IzA7Uks7djt7IzpoMH4vI15t'@;
put 'UCRtOTJtQXBKODMmdGFCYGM+cFVKOWBde241ZTdqaSUoSilydF5pc2klKEpfP18jS0RyW31tSTw8bHQhY2U3anN8fTx0e3FbM35TSmc5JmhYcnRePkQobzp+I3ghOz5RPTQmaGghJWopbz82JjkhO2JKfV99PE9CXy5vM2EpIWdVbD0qPGxYfX08TXZxW1RGJjghO0RSezM/VUgoIWdQKV4/XyNY'@;
put 'RV8ubktXaUxQaDIrcEdpKyViU10oRSFTNk4uW2hDZjszP1V4bGglY3VIbUFrZ31YZU0hR3VDZjxLa3tfI2JFbWZpc3xdXyNjeDUzaXIsKGllRyQ0VltoZzluaVlydF5OOG1bPEtyUnw4IjdyUyFWe2lfUmxedUprMXMpUUN7UVF6SG1fL1UhdDxbMUtsX0Q3SXR4bGljRl8xYyxUUi94VWZjRlIy'@;
put 'XSpeP1NkVnk5VjZXUHY5NzQwPCxna0w8SihqJT07UDs8bChFMVYqezQrJm8hOTw/PGwpeDRWKnt5NG1bZmguaGc5fFN3e308bzUiKUdAJWM7LiMmSix5e1BSR2ZFKUAqPGw7RWl3Y1R+ailJMUlhdntRfUlEa3lqRD1MU2A9Siw6KUosLjA7UkQyYkMxSURrb0tpfXlJVTw2TTNpVVB6SU46VlZ0'@;
put 'eVs9ZDs/alMoclM7Lm9lQiMzWkFKMHN8ayFHbHl8WXUpO0pAJVIqTkIrKiU0b15CYHZ8L2RQP047d21qYj1yTmQzPSZNPDpbYUI4VStWN01qMncpLHFLLjFnamxpPCFPXkNMKTFQbXBSd3k4UHNUMCFwY1g8VjdMbTU6RyRjbERnfitWVkkoKFJWNk4ueGhqPGVoQGldKilZelF8XyRrbmlvS30x'@;
put 'V21EXiIobGhvSzslcyMoODosNSosOVZtc1RJL0AwTzQ5RWJXZ0pLKFlTT0RvcEZWc3tNRCI7MzF7bHtpZTVWX0U8Uip0PXMjR3VaeVM2JFBtU3dLQWB7RiI7ek16PnpLPC85KnlqK1U0KzI2L1kkLnk2Z1NhVTNnayt9Nj1ZWyore0whdHF9bWp2KnB2Xl1iXzF5bFZsQ1NodnhfX191LnQ9dUor'@;
put 'R3JJLnB3ODosLCo7Ump3Ti5mTEQ9e1JSUm54JWt8RFZ5PDRXbGNHeCNsbShlPXEqVkZMMVh2PDJ+aVRpRW9tTVZaVjczZTBkOklyWDc6d1VLKzlzXlZYPDdGJUAkP2czK08lVT1BQ0V2Pk9bVllrNEpWUU4hViNSd0Y9T1tNT2tUSFRPKUdRRyNibTpsPCV4PEtNXyVtOXZZW2o4bWFyfnt8ajtA'@;
put 'SyhUZzkmZWBXZCJfTz02Z1NzR2YwZnxsR25UOiRYSTJsYFhUZWdxMDkvN0p5LCIhZWB9P2BebDFOPkF5eik4bzZtYi5ablE9UEZjPUw5ZyVPLnpKOCE3bVF8T25hKEpga3tLamc+eXN5QlBuN1EpJTJoRmdzPm0kLGwoaVBnV3YyO1ZNTz1nLkhvYldwM2QkbVtiPDQ2Myk1Szg1IXxbJn5fWVtj'@;
put 'WkJdVlpIdDtJfTxsRWB2ZnZoWnRaMCYhQDcsRT04YSRdJCZXPX0zTyxjKT9PfllROVhkcTgzUCRwRyN0bz5nSTkyRSt8QlB+LFZkVl5wYkY4UyNiamM3YzpiOGkkS1R4ZTFtMHFiejZLaElkOXZ8SDpHVmpZZzYyTktkTTcpXXBOXmE7MTx3U0Q1bTcpeyYhR2Y8czQ0aD8/MG0kY2ViYnF3XzN1'@;
put 'PTpnRzNgOVI8NWJUaDdPKClYKywhYThaM21gLzU+XSNETTFRaEU4MTs6SigkQEhVN1k8cVlrWFpAbSVeZjt6PmIlYj9qajk6bkN1bDw3anh4Slk1dFR+ZF1iIWgoKls9I2IhaExDWEVCbnBsSTx3bj0sJjY2TUMmPWNdeDFRLnJqfVdRUD1NLkEmMyFLRkNffGJYKyIsRXtFcUsoMW9LKFhfMG12'@;
put 'OW5NKC5DQDA+QyU3JHxASnFLUE0oeyU3JHIrYV81NWlJNWhDaU9CVyxkVkJdJCs+ISQ+ZT1USmlFNXFiXzFucWpIZnR9V1V5Ym5sL0BBJVhzTShDQFhzbSwvbHttX0kkN08xVV84bTEzZDp2fXc2LiVrW2Q2OXN4c3xpLmouNTFmUFYhN0ldcnpEflN3XnpdPENfPnwxb3FUUD0qQENRQnsqZEtY'@;
put 'Vmd2fV0wT1BOOEVkekN6QzkuOTJuWz8xWnJWbU8zUjoyaHQhY0BNKE5sQS56al5tUHw8ekVmenh2LExyYW40ZjAhRD4uOTckbF5OPXJbRiZhPy4uQD0qJk1OSCZHZVA/Znl9JmZeZ213Lldfe0lXS0M+Vncpd3tobFJNJjtASFJZRSUsT2RuMWQ2TUAuIVteYmB+S3VUXiVOYH4/ZS50Pk0hJSFv'@;
put 'cGYkL0l8Z2w3RXklU19UImQqcnQhLyFWbkkkOSE3bS5dRXk7bzE8SkBnLCUyQVY8eCtQNXFTI2NASjIuc1tLIjVuSVlUbyhJJHclQmpCLnI8eHx3IzNZKW1kOls9Nm5LXXNSbzhfJmJRIX5dSkRyZGtYX0cmaVt7c3gpV3VxSiJqVlQoaDVhXiNyKDlqR2d8d184cCRANztsem1mO0FAVThhbzBk'@;
put 'PG0uZDpCYyF3fDB5RmlHZipwNXhdaD03SCtPKF1+SnZCPmZgPnNUbXMscjg4fWw3dD1dMDMpVGcibkFbTyh9answUnF3O0gmYUdpPHZRRTNkTShreWVoRVN2ZDpAPUVoXUk1bVNQUnEuVG1wdjokLHhKejQ0aF4jRU1bSywuWyZvclZtN3B4ZlU5UnFuMm49NlVdVWhlTSgzekE3KH1BIyp9fmE3'@;
put 'LF5nSGA2MksoYmlPKS5seCwrXUx6clIuPFtJbyglQEZnIm5wMjZFaW5RVSk+I2IpSSU+R2d9ayJuO0BlVGIkdX45NkJ7ZVQ9OEQrTytEKFRnfHd4TiU+PlJzXWE+el1PUFQ6SVZVbGltYiRzPkc9UWklLjsxLzhWbTV1ZDA2WGQ6eiUlYS9dSWx0Pm57RjFuZDdKK2lfc3IkTyxMLCRYRXloTSkl'@;
put 'ZmdxM0orT3okaiV+VStmayQoRkA1LFIjO2ouIXtmXiNTPTRlfDA5NiFhVHN1LCUyJGovOTRNP3wubEd7bDFicTNgLmxDYCQlakdfITs2cShvM2IpPV1MOSZJdmwxMUEuJntpXkdmI2AubEd6KjR+XS48KFU/fWdHXyE2SjJfcihlUXVYPS5gJi5sdyE3VChKTSVMNm48JlIvUDJ8NG14Z19teEdO'@;
put 'XltqKl51PTB9V3N0JmFHOiRyUkJbQVI5Jj0wZ05AOXJZOClyVSE7UnY8LGxseWhoYHopbzNDcD5RSD80K25kVEV6PCpNciguIjNAYXNwYjpFZSUjYX5TcjF8bGEhP3x+TjBkYjZVZVZtMyk7IlRDYyo1azFJWiQ3cXQsUT97Oi5nZjZWSH1Pfk4uRHNIVjF4N3Z2WCx0bklaYVtMVWBkcGwyMXRV'@;
put 'fk5fSnZfRHltWkE/emciensxZSlNNFY9QTBpa3xtNyQhOVteckBnJTsrUD9GY0FdSCNyK1puQFphYWJiTHlOOmQpNGh6bEJkWG9aJF9iJXx1c25SQ09EK11WdSVNfFVDQVBOJjhha2ZgZCtlLl1LJExlYW5geVZnImtBLmJ3JDAjOXtdaV9uUDxyUU59TX1NfU19TX41YTB5JSVJQiM8ZUhoJjBR'@;
put 'TmU2ZS8xRy9QaSxAPyNvMV1eSTFtXn1wYjNgXUpzQHF4clEhai9wOCE8elA9fkpMVWVnaFtxeGgkfjAiUj4lXTd+P3ddL2VSdlZtJmRSdjsua3JmLDdueyxBaUckPFIhfVkzNj5jLDduQVJFKG0zZik8ejBKSFI7e2pQbSxOaFVmUGQkUHRlYll2SXtkfF1dIV4yajE1JHFaWW1MJD9nS3EmSUlo'@;
put 'UnY3NltKOSRwJE9pcWhRP1RQflkhfFAjZT1EMzZ6N211VT0uWjhWe1J2XzU2cmYwJUBCb19pOjk2aj8pfDE4SjA7TG0yJD9tXzVVKHtgOmpWbmlebGBLcTRqRUkhZ1lwMyksbTdtVz1OOzcyb2AzPnM+T316Mi97NCR+MFlWWCN4eyopbkY8eCJFMl4zdm12bj9AUzI7MV5DUihRQ2lyaCZ2c2Bp'@;
put 'aXYhM2ZuPWdUP0tmZHVnWyk8bCRfNE07allKL2FlXktdZkZbcXcqTFN8JXQubH5WakxAMH5WajtAdm0/c2hHYHJGVnFib08lcS9Kb35FMUtdVCMuTSs/fCpqcnM9SXkuSjswfSp8JkA9ZG5jPyE0YykiL2ZnZXE3Sk4kdypLXW1iPn04N3teejtnXUlReHg9MiN8bihbMDY7VmpkJG8oeHN8ODEk'@;
put 'I2gjVlBoOXxGZzBAVShrfXJ+eF5vSlg9cn5DUU8jdXFyeF0hXjI8USx9dytzaEU4L3tPPSxrY01gXX5qR3NYbTVRZ05jJDd4ZURYc0pZJXxRPzErIWhbanFzXn0yXyE2Pn4xLDFtVj1GezBhaHlkKWFRTTNoJFc6Xz9takhKK1FHcEpeJFIzU2sxd1Uoez4xcn5oMXdVM3NyNlhfbWpwRCVhWjNo'@;
put 'KFc6ZVttanBEbTFgVn0jKlF8SyN1aF59L2lbVChKflkzQW9IPVJTZnAxMStwSGRuYGxvK3BQPUsyaWt0a3Zwd05FfWNRIjNsPHU9N3AqRCM5SDg1TzU2VllHLjgsQFoyMz06aDtHcEJUeSQrcCZFI0lNMmVRcWp8WkdiJV1KOXJZdk5CcFR9TmdYU0Q2OnJWbURVI0wkRDxTIjp4X059TSlOMURh'@;
put 'SyVZY15gMDlGb31KXlVxPCZNeTRtM0ZAeFNAe31hbHJ9NihtZDBGK114RSVYJnB4TUBlLjJtVn0xb357Uz1DbyI/aWNpbVFzNVFhVCN1PnJyQzFPOW0uXUF5QCV0VlE5LFUve2JuRn0uUCorXUd1fSp8YCs3PnFoUWl4eX0qMj4ofi5RUysmXmJpYVt9YV8rJmolVi8sTGpnLlN2cCRFTTUpZj9T'@;
put 'dnUsSUxAWmclMWAkajdWSjNxRzdKbyFCWztANGJwUWJgOmozXyRVZj09PSFhMSE3andbYiQ7MDd1ME9jJXxxU0VdZnV9KX0xM1UoZlZJOXMsfCZLZVY6eEIzRV5tPU5vIUBadWw3LnJofDM6IylANDZxLE9sfF5tLC9sUTFNXSNvOjpNV2cmK2FSXTNQWSV1YT9ne3JuZiM9KXEvSmkjOzBuJGAv'@;
put 'ZHJuZl5QdCEvMERTLy53LlQ9WVdfRzVLcndVK19PW0tIOk89Ik8zKU96JUBhLDJtYHlCQEt1d15RVXVRJiU5MiQlNC5hP2AqSF1Bb25bNzQpQDxYSHVAJS5NIyxbemJpJCZ2JXI8T1k3WmV5TmAyMFs9N24ucGtvUVtfUjNfeWU1UDVPLFlbam5gI3xzVW49T1U+fG1vRzFPJTJnfXguUDtAJi41'@;
put 'LEpRQHxBfWE2PXE4LFtIcVZuLltkfkJ0WXU0UCo1cnNsQFVGeXo8MXxHZ3oyVzE0aHsrOTJ7MSMyeSVZRHMlKXpKIyhHSVNHZyJqRFE+Zk9UQFIuclIrIm5oOnN6PDI4L1RbXTt2XVp8XTB1eEg6clVZKDUkaTEzYCs9OH0wMkpdMFM8QGtJYSReI1EkTiRoKUhNeFFWbVQ5YjA4OypsPCtMWyIu'@;
put 'YCtrfT8xWyZxTkJwNlREK2dkIz06MjxdMnE4YGV8dT1PM2VUJE5NajdURFNPKHRVbj1PfXhVLnI2YlUjVm58WkVoPERLSV9pP0xFKHY7MmdaaDVqYSxSd0Bldzs0ai9wRVBgWzBaN24/Zz9dL2RuMyF4Ujg+ekdsRlFSO31IOz1KOUNJfDwidyViTGU0aCViJDdSYHFzRElDUFZbNixRPzBTQlJ9'@;
put 'bmIkMF04JC4jdzB7fXlzbVQ9dVFTZV9gLDNtPGRRITYkSlFAWmViWl89TmJ7ZGciajpsc0Alb0dQSVhbZDRldTJsOzgvYCpAREBDJUovYT4+VXQoQHAiNTBlMUB6Vm1RXUkwdFVFZmpHJDd+aSQ3JUBzIkdyUC9ZUHI8dERRfUdkZ1A2N2lzM2cpQmJeNiFrXURRSmVlOFI6YD81YSt1aixDWTRj'@;
put 'aSptMD4wfVdNe2M0IkMpRClEVEBAYlg7NWhkby4jRH44bS5dZDNOI05oemx8YktgL2hiJktlUGU+eFI6P0FFM0g4OWZVN1I3X3VrZVMzKUJjZ3xnQHVHc3REfk5eM2xbS1FBL1BlNC5Nck9jbmwxXWRiJCYmMloxYCZaOGFUUjpiMT5POHJ9R1lvOFRRJi44ZHxgTjQ0USw/N0U0KEJrbzdxWixM'@;
put 'TlldNCg/WVM6fDcpeGk2KnVkM30qJmp8M1F1NWkxM11yXlZDOGhjbT00YnpsYm8iYkdybV9kKXpWcEl1OiszWlteeDd1Vm1AQldhaXZZLGc/Pz8mLkY7aHQvVn07V0BYX1V0MGFZZWhANChTI3EySFYhfGBObGhVLn5jQlh8RVdwVmJbdUUoRnhhJXBkNyx1cmJ5aFVbUTU3bkVdUVlGaSFEL1FE'@;
put 'PD5uTDBiI25XNnpRUlE5X3dqV10iaUB7I2luT2AyUEFwQ20wP2JRRHl1Q3Y5aW9sdFAlYCoqOXJlWlo0NHRabC5Gem9uP3g/WTl8ZWV7WTxbb15RLEB+QzRrXiMpKTlyQVtRQEFTXSMkKihXW1I1dF1KVkhBd1ZhKHd6Ukw6JlFgbik3ckReSl4kLyoyKkVsdk5hQGFbZU1mSW9CUD45d3V1dypD'@;
put 'fjhEail5KjxuY0IvenlrVjYwT0xIXXA5Q2hgUXNEM0J5fX0haCNeTVNeSDpuMnFQPHZpeldXfm5iTlZnaikuXjBvKyQqX1BTRTp9KSk0QiNzLGJIcjMjWz0kd1ReSXlqK2Y+WX08VF9AVitVOy9pNToiTTk/XXtuKyIyPWdeYD1MZ1taTG9OWyk3Yz1HPUo+XU5KcVZVanMzLEVTZmRfIjRgVnxZ'@;
put 'WCNmR0Jydih5cUBLezo6SHUhcH01ZE5ufnVBVVhJYj86XzNfRjhEXVM5ZWBEczElY0ZNMDBmbzc+c2RRJlE9WSM+eTF0cTtoUEI2SFg8OVQ7Rl57MUhTPmV5USlJdjVXYTZWQjNuUiJzcUxEMltjTm47PEJ1JllmT2tNMj8lK2UxMF1MXkh0cXdMLDd5YnYiVXR+dks0RlIvPSUzV3t4SGVCUTFm'@;
put 'JHNRX0E0LiV5aFtlUEF6QWFtYE5afFdiSVVRPF9Ubzl+bWcmYS9DWnIwLDFFe3wmRmZXbF1QXnBgQ0RNVzwvUElnSiVfX2giYEB6U0tKUClMSVE5SnwkPkY+dEZtSjdnLDIoUih5ejhxYFt3RG16djZuVixXI3Qkd1V8QntkVkskPTNnTFcyKVp6OzxHNjZZKF5RPW99biw+fFdyJFV4MW9bWHZC'@;
put 'M1EwQF8ycG5gKmdYMlddTlRLO3FMZns1RnEqYU5qfFFwdzxXI0NlNWpxTzNuRDc8T3dkQlFEc1ZSSnQpJGJlV0AxaHFXdVtOW25Id3xCIkhzZilRbUV4cUJmPUY+TGVEUjQsIzdedls/TnJWfG9yInV7QD4jOlZPdUIybUpkbSZtRlYlbmMzfH0jMC5IT1F3REFSTlFFZComSE9CUSs4RFlxPDhL'@;
put 'IlA4KjxNd3h0IjJBKnJbMUJ+TEBLRGo2ZX5ZLHJmK0kuOCp9JGdOWHo1TT1MJDNuJUcpd3RyOSFRMW9WV1tEaltIbyh2UUwpfCl3JS9RQjgzdlhTRVd6fWNzQjVNfktoRypgXXxsQmJKeUFQK1BhPmUlcmRza0EvcCkodU11RHVPXzNoTiYrNTBiKiJ2UU81PltFdC5uZz9uelovKDEreGgsRnJY'@;
put 'bnJLdFEoTHt8c31mW0dqRl0kOklbOU14Ijl4fWB4NXZpTklgTkEuYn5La143SkBYbz4vT15VanFGJSRwU0QsRnhSOyY5NzpOKT1vPmhTMyQqWUkzRUxCW0QpeytPRHtlVCNtS0s0KzJ9cXc0TThiYz86UTlkWl5sN3opLjxWbWhZWFg/QFVtT01HU2tCNGtLaW8yakQ6PHRCJThXTz9rPUJJXT46'@;
put 'R1NkPWVoal5CaWVHbiNXMCU2Qnc0QjIqLE1GSnRFaF9Ucig4L25yZWgzLDNENV8zZlJRI05wNVcjXSJKVj1hIXs3akxDMTJAUWxieyR5VF5DOj50bCpoIXooTjdtRUMkbXNDMSpOXThZbkR+d3wyR01XXSE6YSFVeD9IOEE3bDVzRlBZSW9ZXj57NWgrZEMhSSNBeyFaX0c1UldCWXxxX2A0NHwp'@;
put 'cmdLQHp0W2t9Im1+YCskVnxfWVVTIkg3fUY9dzM+QUpfTFp6PElAdVMvRTlaM2IqKU1SY2NtMlouTTZkYWhgPjRITFpHLElPNEQ9Pz5GZTY7bjx9em0/aisiZV9eLHJ8MDJfUj9xcEZ5cCRLb3VvW3pwcDBHfEZEJTNESSpFRWY3cW1wbTFvW2VZW3FHPzNRNS5jPVQvT1cidixgKFsrJm4relZT'@;
put 'bld6aUpYJl9aUjgmPHdybXZ3XyF2c1BDdW9WIzwmNG9Wdl9RWmRbTzlXRSNKUj9bKkBTUU9GL189JjMqQlp6dFdhMkxtNCFoJWpdaCU+dG9WdF9iSUQiITYicyxgeFs0OXJzeHwldHw9MVJ2LiRLd1VRKTpvIz03dnZJNWlqMytUMi42cjRLR1NnRjY8d213fEEjflVsPUlfNX03XkcvKzNvVnJf'@;
put 'YzFjW3VwYSN9amJ5dEoldWVLbVZgKyghQlFeLjo7IlVKXVUrMDJsVnQhd15vbStuIjwjcCM9dk5iVFltSCMjJXtFMCErYCpNWDxrZzRwaz5JXXwjR3RvWyY4WSwkT3ApJW9vSjg9I29hVFltb01tPFImWH57U0k0UkMoaGY7OHtKQk97LkJkaiIrcjU7KlkzWythTUxDPFIzKz5qeXN2U0ErYS4k'@;
put 'WkZqQCxPJDB4KyRfMnhvaHViSmA8PGtMU35CLGBsWz5iOU1fVTFLO3FwRjoqNCFPb3xDeFsqLiYzPzpKbz5uW1ZbbmlkL285KCVLKklzTUlLTkBUIz5QMC4mM1YqO0N1NV4keCpnYkhNOz5nRlU+bjNHUnMhcm0qNERHRW9MNFdUMWBRUDpGbjJvVi58N2FMNGhTW3F3YG5rVVchaixgfUBLbntD'@;
put 'InlKdyxNKXxORUw0fFFbcW9gb1tUVz9nLGAxKCVLP302bWAwVG1pYCF2VFcqZSxgOEA0OW1zbDd4W0BeS25tc0E2ekRdclkuVykqSFI/QWpUOVslW1dHLyJ6b1Y2fF1sSzRvTltxVWBgNlNXM29bcUZNTHZVUVtuKEFpejJ8fXo9cWhHI14wbzBEKDo8RnFSM1tWPm9bbVpNKm4rRypWUWhYQGle'@;
put 'TyheZ0ZjVzMucCZvV31gVj5VNFRNS253SCx8X04wW2l+SWp6WyR8R3xPNG1UbVd0bUtud0hyKHheUiVPLiZNWDw1TiFdWVs6ViQ4IyZnKXIhWWczPEt3SUMqTSVzOXpbcTtzIz1vViRzWXlbcWAuKnk2PGJnOX1hR0cvRT1WPi59ckRHL3w8VWgufSEiYSsmM0MzdUwrYDV5KUZQd3JnQ3UqKi9f'@;
put 'Ri8/PFVoMnNyLyxgR0A+YmpzKy5XQ3hKMDw5RnFBLEdiZjNwbER9azIhd2pbcWN9K0pJL0Z5b1Z2fHxHSS9AeG9WaTchWkIiVn5lMngqKV5PN2ErenV5W0FeaHlieFtxfF9vW040bzlvVkx+Nm15W1V2eXN4Kk01fkN2SlshdltbcWNHQyNMVHpmNmhoPEZwe0BfS3EsSC9hO1Y+eHM6OCxgJn0x'@;
put 'TXpbPSR6W2N8L2U7T31Gb10+YllXa1JzV1ZobSZ4fGAlRi9BeG9WRkR6W0d0UitKT31zTChsViUmN1JSI3I2b1JAeWovfGtpZCtIKDVlPjVeMGEzK1p7Ri9UZ2BhV218P1ArKlQ9bUd4OGBjJHYxKDwlPzNRWVdgTyxgeH5lNkYvendwJklSeks1IltBNH0kMEYvVHdwJmt8fEdKNEBGW3EpX012'@;
put 'JUIzRSUjO3FGLzJ2b1ZofGE9STQ3RVtxOV8hdkwmWGNDekc3ajZLRUl9ZUJ6W1hdPy5lc1IzLGBJe0d8elEvTXZsRiM3K3hKeTt5WmQqISkwfCEwYiZrIjlWJmB5W0l8UitJL31+RX1bYWIwfUslYSRWWmJ6I312UDw4Tj5Tcip2ZlpGdyxqXzFFQWZ8fkN9JkgoaDl9SjZMYyF+Ql07Y2B+M18k'@;
put 'Tn1zY3w8WlJTaihUeDYyQF81MGZwZ0ZgLm9bO1tEMDVgUSRBRT10MHlNVF9fOz1EZ1U4byRrW0F9ZEcoaDh9fkM0RlpMIn5XMy9LZGBsdVJxW357YFtLfXM8aFt+SD9xe1Y1YGVbfkc/Q0hzKFp8SFlBdEBJcVcqVFlWSzZsR097WUo4UlldRjMwcHguWEVOKChga15tMSp2VmN2d2RNI3Nlfm8v'@;
put 'bkl7c3ZfKnV0KDZ9MzRHN3RwP1FkWyNDcUZbfn4+Z046cS5jR2hGfjZZbnhqPG5TL1liUiIsZ3RMOSl5SU5JfVZFO0lgISZpfS5OM2VFeHE1fHlZYTxfdXpGPyxNUTk6cXFCbnR4YmNWZSlIJH46XmZ9SyM/UXxzUH5iPDBbX3N2fGwhdSg+fiJfflNzV21TQSIufil9Vn1nOSo+e3NzfGh7NV1R'@;
put 'OSR9cT9hI3UodCg9flp7QGR0V11+S30sSTRGJH46P0VofXMofXx3NEYic1R8JkhXTF1+Pl81XUc3X3NufENIaW4jfncoMD9jWn0pP29idk0vPX44X25JNH1ZP3kzdCgrfi5gXUJGfiZ1Z3hMX0dmJTU/bmtFRXYrQ0hYV0BCIk9EUmJYYyNhUiN7LGdJaEkrU0drdVUqfVtUbFRXVlA5UCtAbnoz'@;
put 'bzVEeGFrTjomVUlbI2Z8SStPdU52Uj9kbj89PD0pQkQlMy9MR3lFSjUyOmJwQlBMezFySzBVO14zWDFGV1RDLFsoQV9dd2xUTTc5MVt0cUZaZXJFaXR1KEB+TiNdXUdzIz1UaDNnbSZNRztxcUo9cVZ9PX4jYHNwVGhePEp8ekJ5ci50dFc5fmVbcHA2bEozRVQ0MHorNWVTM21UPSldeDVyS25V'@;
put 'MVc0WTlNVT1taXI2Ljwxej40ZXNtbVYodnNXV2lARD9jX289JDlneG1QPVdAITAlazRYZnhxRXx3eUptdiYvM3AoJTVbRW90KSVvfX5jdFl6XVQpaCs+fn5PM1hRNDx9MnokKlFqXyh+UVtFb2ElS3xrXlpzK35PW3s7bFYuUylocX5QLjg1e341T0B+dGBPalc0NH0kMTRGP3Ngc1RVdmdofkNI'@;
put 'eCljYEV2WitQSUBLI2c6cV4+ZXNbfDJ0c35TT0xMV3xyKC9WfDR0WyV5c347X2NuNHJIVn4uJE5bfFBAaFd9M05XW3xMQEw0O1V1KChzSl56eVpyVzQ7MyROcltKIkB8MWlyc088P3N5e2tJNlZdWF8uLkYpYF4pe31VIShzR15HL1lyaG47M3NKclthdkB8Ymlzfkg8S0xocmpCc1t4Ont9TSFX'@;
put 'KCV7Zm49M3UoQHxdXmRfPjMvJmArLzY5VipiZU1BTXlXaXU/b3tHSDRMN2FPbnp4JEg3YU9+eElMSlZLNiQ0ZXgpeHh0OipzeCJ2e0x0Pyt+LkZ2IkJyKkhfX0AoMGR9R0MrX3Ngfl5LTXtuSTZGU2FoKSJfPigwZC5HP3Q9c1VDSzZtQVd4ZndZTz5+L187KVlGPCghfklGcSJqbDNbKHJGbVMo'@;
put 'IX5FbWJ2W34xQU9jcmEzTFMoS1ZLNl8oa3hLdm5JWj83S0EiZUFJN1ZOTnhnKHlLRzokV10/ZT9hdlpdWlNXXWF+N25wTGZHYSJVQ1d0QE92dSl9RzUwdnpGMzZFfmwiczpEJlV0ZHpQRFNBS1Z7Six+RzdTfEZPZkcsbmIzWnhTYX5rLCoqQykxfT8/MWg4cGpuOW97cixlJHpESnxlZz5+eT9f'@;
put 'Wkk/bzF8MWBTYGx1Ln5HK3wqaWZzPVdbOXElMiRGXndvRFJta0RycmouR1lHRV1UIXFxN0VAekwzJkBISC5mSWI1NG5HdlQpcz88Oj9Qd11ldmNTYVJ7NSolUypLRzp1T19fN3EjI3MjNU5LNjg/YF9UZXtkRkVTYUF+PT88WGx5Pi5iMigoV3ZrSismZGU5SHE4a11PJlhTWSN5VCZLb2drfitx'@;
put 'L0oyM1RyJmwoMWNKTXc7Sm4+YnFtWmR9Vl47KyI1TiEhNDU5N30sW0ImRUIwVHZiU2EjKyFMOF40XSZvJXUsS0xydylPdlozTVhNLkc+cV99LC45Y3Qia08rc1U0cmQpIUg0XSNCcj5CTHxyM0BvPmpTZ0REKW03LHZTcUF7YFtWLkF0Mn0+SVNfInt4RTp8UUU7MnV2YXNWeVhzcVRAcnIkUzlF'@;
put 'cFJeRm9aM1s9WyM+NlY3LmxCLkFWPWpvSlBhJW8+I3htS2VfeXQ2X3E/Zmg2V3ZgekhpTX5dRV0xWUtaZWhNODtuW0gpZjZISTFLVl0xKyRiYCNjYHNOfGZxPFhtQnUzXWtJc0dnS3NwYEB4M1Q6P2dGZ0l7Imp1PUgmUnh0PXxbZDN9KkB6SDpSLGI/Ky5mfTpUUXNfRys1QVUyXn57cVpIeypp'@;
put 'NmE1YTJtPzcxLHUkXztxLDVoRDhdITVhYFpeP31hOyEzIzFqN2F5WkBZcT43KX1hPlAsOU5lcSxTOE88ZVRnVD4qMT48Llh9LDxCfWNeX1NHb3NAMSMvSnZ9I3BoZiVPOjNPKF83JkttLEpsR2lqMC97WHlQUVEmNFVUMmZWPCo9e2c2JWdbalA5OFg9VT8uL10maUwwI2BXe2RyV193bTA7cDg5'@;
put 'PVErVjhZMS9scC9ob2B5QTo2QF49ZGdgbVpeemhCYCVlNFByczhwJl16bCsjMmdVK0VgN250NkMhOzBOODEsWzNWVntiTHhmSW0sdjF5ZGlZJChWY3NITHlPWjAxMUljdkxSUH5SRlY6WWVBU311Ti51ISIxYkM/azNQYmprYTNFd153STs6KCpUSmJ9T1QmSSxFSzZjdG14aHl4N2Jjb1Q6SyR+'@;
put 'PlRnZHQjS3xnIm1LZDdNaElsWiZUIls3aT1CKm83WzQuK05wKm5sX0N1b1IoVE1pbUJ+QXlXQ3l1aTRJLHljNCtPdXU0ND5XTkhRcF5uI2B3KTUuQXg/Ll53TXRKNzF0YlokTTpDVHRnUUBWVDdTR1N1alVpV1F0O34zQGg2fXM8fUwwQXQ/flhgbWJXNG1+PStxUHt+V351em5JOX5oQDV5ZUNG'@;
put 'ZGV6PVZLKlBJcnw3fjpeX3hxV1t+fH1FJTp2fHMpfjB+SH0wWz9RP35xfj99SWBaU0F0S05GZH45aEYwLm1XX2JFPChRNTNnNDJVUVFqfjdxS101Yz81SmIlM1lHZ0Z3P2xWcTRqJDp2dShRLExjQSJ9fjt+JStkeXJVSzZzcj8/dEAqTkxVODdSSStPU0I3aVBYeHR8aD5xNXkqPmFFd09+ZVNx'@;
put 'WDVPN21xIiJ7KGtfYyp5MUMiMl9KWTFXZSp9UmlzV3FedFs3bEJycXw+M0NHOjlGfl9oQShLRzpRY1d4OnY+WCk1U2FVdF5RUUtKWDRSMCl6V1V8Nj5jaDFXTWI/alcmeTFYRENEI0dMaWlBSU0rYSFTcUZXUmpOMEFwRXFwXUN9PnVHKmhDNW5YOER3Xyx1YnFEdlAiYXlwNFk+aEkkfkxMJUZT'@;
put 'WHYmRU41M1A0Vkk/fmp9Mkw0RiV+UEBic31zLH1oeWBlfX5Sfig8al9fc053aD5kMDh3fDF7flBkWFBsMCYuOElraDRxaGspS14+KVVxTH1JZiRRPUptbyFpalVsXUREbHEvYF9dcmlVJkVgM0tKWSl+RXRbWSl+RX5Oe3M+XkRAWkx1d0Bzc0ZjXmc7STMqJXJfV3ZSMypbOWl8LlpWWGNvK0Be'@;
put 'PUtvVTIsXjF5dyk+ZSNsKWp9fFhlPX08TnFLKEdWUl8iWCI7RTFRUyxtWiY6Mmw6RnoiTXhkUEJ2dC47a1VNPmlMazBhQSFJaUhjQG4zPCZFfWpVWHR1VXFIcXE7X2swMi4rSTEhUTxtT0BTWWNJbSJTRSFLfHB2eV4xUSVxUW49e2h2d3FMUnhvfT4yVVh0Z2YuKkoyZEwuYno5LCZya0s2azok'@;
put 'KjckSnFsXl9XcDAoUT9WMmRIZjFiKFpBIW5zaEtpelFfdzMqTWswQXk8STE+cmtLcS9hLkpdVGNNOUFKRDcoeldgYGB1emUxQi48RTFPIj9tI34ufXh5O2F5cnpXZTVOcV9bcihyc0psJDkqUmBgTygifmghX354K3YwY317MkArd2I6PC8yO1VTYUxBangjUTN7Ky58M2hDUl9yR0A/dENHcEo8'@;
put 'YzBdTXppZ3JOdU9SLk9dSjdSTVc0bjx7TihocFRfKllRITNPeXomdSwmSnFSXiJ+OjxKMnZqamtDfXlERHteT19fL34rUiR+fGtqTUg8RiF2XjUxSHBDbUFGTFIreHl4MmlvNklEPCFGbTosfmp0aTNJOjohWXlqWnJkLDZZTSF8dVdsK0dXZk06VlZ0KWR2TkxnfWEjOX5BY3g6SH40akljdntW'@;
put 'ezM+TFY4JFZCc1c9LkZPQX1gKVM0KGFRcVY1MkwxP1tDbXxEQTh9LE96Rj9jYyt6dlFkXz5qMF19eXpMNGdlcjg4fTJ6eGsyWzFlK31oYWdXY3hKL0xDNHkhLzBSel8jOFlXdzt1akpgUm1iVyk/QzBffHssbXNgbkZjbVFDLD5AaWZAfWB3ZyhMVG4xdX5BWyVofE4mLHlAcjxgfXoyUCg4bjdU'@;
put 'WDxLI1B+JF0zPlVvbi5VKWEjR34relAoR1lfO2MjKFV5QFFGb18ydlZ8RWo1fURvJn5QdG8odGlpX2w1XmslYFFaVnwkNVE0KU1nbld2bWIvfGhAaX4xY1BXQH05Mjx8JE52fktYUFcpSXpGak0sdi5bPlRRP2AyM19CeXx9WEI2aF5obDFxN25vV3tGeWxbNSlbfUkiZn5QYyh+dnFgc3VJTS96'@;
put 'W1J5bnxGQGIoPVQ6OVFwRjcpXnB5N3xwdTh9Pj1mbmo0TntzVzhbYVBpfTQoJT41ODdUQ0RNL1l7b0IlfVlHY3NwYzBGJl56RVVgUVp8fVVYUldnaiQ+KUc9MitgVHcqfUlFSUxZY2ZuXUQ8Mj91emtmYDs4N31sP1IofUM6OVVkNzVLLyVLXmBddip9a3JnPTZ9Tl9RNDp1X2V6Ii9pcFs5Mnt8'@;
put 'bTt8c0dRTS9eW1J5R35Dbz05NWU3NVMvJUt+YGwrMX45Ymc9Oz8uPSNzRUsjaF1wVHhCNDltL1tOMnd+UHM6OU4mKFUxfl00PTlqZzc1e3RvVnxbLkZ3fGdoIT5DOE57M353Y2ooPUguUWtHZm5jRlc0eClaUy58eTVZKHVnXzslQGhLcGBpXjZ9LmNmfkw/Zyh3djltaH5WPUJhUSlLUF8+I0l1'@;
put 'XztFQn5dPz1+UG59XXk6aEtUfXk1a3MwTEtMYUp4W1VILkMoeTltJH13LEdjNnxXREJ+cClXKGJIJD5Gelc0filaU3BfSishfWtpPTltbnNwTS5wU3lfIXZDflVYJHNMQWc9b3t2c1Q0RHpfZXVCNCpwL2VUUT9NSlR8bGU4aDFXXjtlSnNwLF5RRjp8RmtmfjgrZVc5W1BReX5RXUVjTXRCYV5+'@;
put 'LFo1aClZY19BXVpTXX47Sy85RU59XUN5KFVfezJ2X31ofWhfa0hsdSIrMjtuKDxeelVvfm1wOWh5Ly9pTV0pSmt8IzplXzBEKGgufSwpKH1wIVFXTFJKY0Rdc1Irc0M/N1RkLH5pXX1WfW9XQm1ML1k0KzdffTZfNz5aO1ojMF9aQzd+InVbWFRdZGUpfW8hZH5pY2MrcVNLdkRgIyRSKGoyRjcu'@;
put 'Pi9DKnxfdC9ROXlBIkdAc3glfCtMbXNhREA5Ll9eKTl9NmM6dkBaIyRvKW9GQmBvMSV+XyN0YHt+e3R5SUs2S3UhKitEbWZfZipTN1JEVWQsKzBdamxNbjxfSGMhPzhhKWJCMml3MTF+b3xNRihETzpXcGk4N3BsUWxRemVgOE4jOVhqV019c18pMDVGQm1UXn1jbTQ2UXBqQWV4Nyw3VUNINllj'@;
put 'PmAiOmI2LCNeb1FncnRrWFJ2aFlzcDlnOklJaFdCLEs+ZVVmbmAvYy9teWV1Z2d8MWcvbTh0b29ESixQaWY0cCp1NXU5LnY1eUM2TkExeTshOj55K2h+RURedXN5OTV0fTdJcHFUSVB+WS9dLDdRR1ljeF9BJGx4QHlfSGF1dXRMXjhnPig2bldCOj9iZWU3OiV3PnkjeDdAU15lTDZ1I1VWSTdn'@;
put 'QyQuRzowPjErc2hLUThnVnAkNTBkaE0iOnlKdzBLVCgjYXApOUJlLm18dCldI2J6U3RsMVlHWHY0eilnPzZuUyhWZ2pjNHJKSS96LjdOZG5Fb10qJCUlRGV9UH0qUz09TG40ejQwZyx1Q1g4Wy5PdytoK3k1cSR6QGpjbkNxWFpRWl9DUSZRaUJiTWs/WS5Ge1lKNlUlT1c5TzFMYFNRYFhYYW5z'@;
put 'bFVRSUVdYFsyZTpXXStIZTYvNmhlRlJ4THUrNGolWUVIdSFEJnBtbFgvMkBtcFMhJkkhZl95NVkiZFJ2bSxFXVpbVFpAIy5SdGxJIXg3eSYlQCljMzAxVUJkfTdGNlZQUmJ0KXApb1h2eDd0XUExQGRESTlzSihhaF00WTwoUS5bPXEiYXUxPiovO3prOi90NkBsTGFoOXAuO11KOnxeMjdUcT4o'@;
put 'LzZ5L14iVDgsPjEoUlBXQFJuRSZ3N2RrOylAfGRMOUJyN2tdTzJnfGQlSSN0UjVfOl9JbzovdGkyVWFZOV1SQTsjZXR9JHF1YXdwPioxPio2Rzp8JlY9dCxbJnZhOHRSNWQ6ODxycUo5PUlVNyV5Pl85NmhMM2JwY0w2Yjk+KmNpJWJDUCVkZ1E9VTUpNGhGUDMsRGchX3Q2bVMrZEo4aDBGK0k0'@;
put 'c3l3PnYhRDFRPU9fU2ExJENFPW05M1ptI1YlZHdEJjV8JVtSfmQqU2xML2syLygqR2UuZE9deWpZPCRUZUZuSCZbMlMrZFMubEwva1pEOTAkOGNMYzckZ0lPWCwjU2E4KkhoUEBMOyF8NW40JWRDZV9TQVVvN18yIUVuMyxhIXRhKGQzMVFYOjElQjtzJnhIVWFPZVQ/VEY5dFM2TihbMCo2eXNU'@;
put 'e3lRRzpuJTBVXSFdSkJlZyFmfHR9aEQ6M0pebFZRZlssb10yIWhKKiNYIVZmV0JfSlVhckhuSllLUTledyJkUnZAI2RWUnloTXo6RjNnRUBCKV1abGZdRCxOeF93KERATyElPj11NCVMaUI1KTdkVTk1dHtfL08lT2dQJmQvNzh6NExUYyR5ITImajZoOUErUFNibXNuJF4xUT1JK1I9OTQkalBE'@;
put 'ITd1XVVlaXNNZCFbM2ZEfjxJYXVEdXNPfWMhZEUpejliKlpVdzRwKnEiPXdQeCI7Yk9dI103aDgxbmc4KTB8OXs4P2Y2ak1WbWVTSkVmYFE1ak44QjtbN0I4eF9PMkEhMXRCOGtTRl59N1JiSGE1RSt4I2Foa3UwdDVndmNeXy84KVtoZyFhQmBTb0hnSX05Y2RFZF9oRDhETkBwRCs4P05IVTUl'@;
put 'NW5KVlEqJSNIVDI4IXFnMVVAZ1s8Yj0walYkIl1XOFtKUmsialYkSzh2Iko4eDtBXk9FamNNKDs3d1g8V1UlQD1hbl8ke2kyY0VdSD1lLnwuRmQ1ODZVMk52bExibl1vSktAMT1bZGpLa01peG5tbERfeEM4NiVgUWdrX0FWQFg7cDFFKmNkPE4+QlJKUmsyMVtZUypTJF1qX1J6Vn5WRTBJTCtz'@;
put 'SXNQLzU6Ym4wbHUqYURLTjUlLkg1L1tNaEJtQkBJfDQvdnxwOHxASXw0MGEyRkJjJiJFczVRTDhjR2M3ckk7N3ZsRGlUYzVkJVovbWpaQCQuN2gyN3R+THBKJm1wbFp7dkQmRnFSbyk6eGtIUixJUTd1PEVrKzk6JkAkbltRbmNkNmB2RmlYN0NYOFtBbUxQIjc5SUg9MSxKT0BjKiNtNHpuaitt'@;
put 'QlRsQGMxdGF1VXVqRkx6RmY+Yz1nWSw3PmdiWl9FSS8kNGpjUDd1QUBdWWtwSDouN0w7JlQxbTk6VkV1SWpyWDlySWZzWE4/RV5tcGxiY0R5S1A+M1RlRFchfV41cEpGPDshIXQuXXQ+e217T2k+Z2JdWkVQSGlFOWIkNSRbUChZQWVuNH5wQkkoSkE4I3h4UXl4LmQiQkgkUlM+M3sxOz1bZHM+'@;
put 'ZnluW3xkTmlGS3leJUVKeVsyV19hby4jdj1uOT9VfmleYHRxbX17ZCF0elU+bXtPYntuMjFydV1ON3dtX0dBO1pjczsvb0gwVUt1XUdzP0tuVERQS1hebXdndXBtbGUlUGBsJUpvP093THN4aTZgS1ZwfkV7XSZZOkV3OyQsbD1ld1BIMUkoRElhSUhzfCZKOW1ycDJOUjh+Vy5WT0hqT0hweE9A'@;
put 'KDA2UnZ+U05MOFhYRUB1PHZsLyhIfUtPOCtSX0YpMWFWJlklIyIxYkNScldtOixtNFtlWjlnWW9ed3c+eGhNUjpRNUQra15sJUpdRiU+MmUwfk8xNDE9IixzIV9VMjY/bHtpRV0wbTZoemw4JShEXWxfUWZoRz1KZTo9Q0lpQm0sP2dCb0NRQmt1fDdHJkVBQ3MsdyUzPk8hZ1dVX1ErNGFJUX08'@;
put 'JC5kX147WCYvUmJ4YkIkWCtTVDVOfVJ2PnJtLHZ0fj8lQz0oUyNvUjxUW2RodC9dYm5GST9nVS5YYVNKNmNfaUd7NHJ4KUw7N25pTEJtTWYzQ3xbc31rZXopUzlqYUhDVklgVXFTPSRra3w6XWZbaSMuLis9JSFLbmp7T1FGcWVFKUt1KV1iJShAMUBHOEZpSD9OUjFdSlFPI3BqfDcqU3g0LDVw'@;
put 'anFdcWxGWDBeKGFON0FlbUxsMngwfFF3TCY/Qjt4M0g4VWF0YitkRlgxZ0w9UyN3T0MuW1NEO2xNYGM8KDlsVnhxMEUqY2QvWVNwQGFoTUpsXiNeeikiMnRUcEBhJGYzYFpsJSQ6Z3VsPChdZGRvKE86PTBmTH52dl9BbUxVN3lvJl0/ZUI4PFc6UX08NWE5N2pGcnojTHt0KiM5UH1Pckhoa0xy'@;
put 'V3RpWCY1W0QiRyNbaFc7cmJ9eXl4cXl3UUVkZW5sYyRQPTE9MH0iMEVQcj5yWEI4KiNTOHhiZWBvJDUoKHMsNyp2QWUpRE59IkdCTDVVfFo7RXVbWns+N2kwWVZULHA3KERUSyt5ZHlUYytwezVzcWtdYVRuPSp8a2VIOChAfWtsakQ7PyFRZTByQlIvQHclb1QkN3srbms9aSYjeUcmcFdwMGRi'@;
put 'NnVzSjgmajQmZDxQbFVkMi5mW25ReU9SMWE/MztZSm9YMzpKUVpgL1ltZEVkODshQGtLJElnU1A9VmpmcUw2IWtBJXQhTSRLUWwsRWU4eFJsXVc2YXs6VnElPTBqOlIxZG1wOml5XSUlN2pjZVV8IUksMUA+NGJLZTo9RDFIZUFlK3VySFt2Ozl4NzMvW2o4Kkplc0hwTEM0aChlMFo6czB4THxR'@;
put 'bWxUOF45O2c/JXlZVX5PPFY3WGEwOyxkd2NQaEg5TjpEM3hMcW5CSTxtYyQ2W0FnPzc2W0FndjNYYVBlSFtfXX5qbHYmSU99eEQ3ejUsR0tIcyZOZElzfFtFK2RBajJaUSF2MHk4UmJZcUoxYCY/N3xRbmROSV1hQWxCOF9hMysza19RQmVuWmZiOTRdN2VpQGVQJTIpYylfNzZoRzg2dWNvIipe'@;
put 'bSk9WCMpemxdbUJiOSxLNjZxMiN0MC5TZ0NwWntvLlppZWYkbS82PCgvUTt7ZEI1QFljITE8a0kuYDUzZnR6M2QmXT8xfj9rcFBxMkNxc3JDOHBzO2gpU3pVOHMsWWQ5KVo4b1gkZFtLcUhGeU9baXNJSHRIOmcvS0kzYShLZTRjYnFdOmdaTzdKN3JlPmBXe2BAYSxJe2clOkpjOXdYQTM8QDQ1'@;
put 'KmZ1ZzkkYns6VFgrOmtrNTFQWXBqJGdRJXU3UXNqdTBebF9RUyVCUEE4IndRbnplOzYqaTJadl06JC43Nmh6bEdYb1gyU3xoWDdFOmNLVmUpbVg4SnJKSSojVFRVKEVFN183ajtmYXUhQGpQV0V1SUp4b3FfSGszemFReS8uaCksKzZrWDwrcEA7eDw2alcjR3VMQyg2ck83X1V9LDc5P343cVtw'@;
put 'MlNFWjY8JE5SOENjQz5FWHBUQGI9ZiNuZHM7IXF7fXUwKD0jUD1XTykxI3xmfjBuUjgkM15yVDwyKj0sUHw4cXY6eFl6eF8pOjNXT2hlYW9JblUlIm8rNUwrKilyfjVWTiYpRnwpMWV3SFJQXWxzNE9uPncoK14sVVI0PWchbkNqUDN6dD9RVE0zVm5qUmpJTCQvPU1HUnBAPkIlQkAmbE8zQltj'@;
put 'Iz9obnRfRkY0JDkxdm82fCptZ00rX1ZkeCp7LykpOylvJDpvXz45aFtuMWU9QzR1Li4xfFpZN3JnQmJjNUtEUG1+bF87JjpaI3lpYV1GVShkSDRUby8zREBIWmBhSHZ8N0JzQnh2KSkjPmYpLiZqTmp1NV9OYz85NEw8TDY1ckpVS1BDYkJjYnZ6PWVYaklNLENxSXdHK21nJD0kSzEpRUozXTFm'@;
put 'ITMrTTloPGkkTWJ8NU9WNjc+TStoXS5fTmBaU2c9M1FEamRIRD0zMUZnVnFTY31NR1M/b0RfVyYsJGJLIVFJb3xld1VtNU5FdC85T293S19wUUB0eixeYjA7X0RON3NpW0pGeHclfVN1S1Z7Il5EMV9MfExifDVCfXFQajBIXVo5aU9wQmV1QWAiU00/PlhpQDNxR1osYGgxMGhhMXMmVS4vfUtg'@;
put 'WV88aGJVeCFAfENEWXwuQ2lBRU1gQmooeHptLmVMOnUmVzB3bWIkPjoiPUpXdT1iWlopNntiWndeW21CLF8jd1p8U2NPN1NhVXdgfk5JY2dKOS5sK149MiV8S2N6I2A9QyplVGMoJE4idTx4JFF4OmI3RTUhWFpHL2hEO3ouV0I0LzppOn18T00/IU0/JGJdSDN4Y3tCM3JQZ0U2QkVsYGBhXXIx'@;
put 'YShQeWF0Xz5zVWMhMjomY1pgJnpbRCF9c0E1aWkjei5qRTN9VD1JKiwxVlhtNllPKEk1ayVmRSV8V041Ljd8PUFraW1CNnVsX1JDSzdAM1dDMStOSl58LiJ1Y21Cfig+fSQyNVR2MXlUK3k2ZVtYIjEmWFVDZUI2ZGdgUiI/ckg0YCVbRXVgU2Imcj8uIThxZCZQdEs8QUdwQ0tmYE14QnNGOkRm'@;
put 'R2FhISZ+LldMcUArKHpCInMvM0xVemVvMEZUODorbyp3K0Qsdlk/dl5bZE1ofEEqeD0kcUFCc00oYSlNPHRvRUFzKVp1en5bJFdgfjtCKFp+WjNONDU1RXh4KXI3Lk5md01NaGMralhhWzZkdUFhUzJgQ1J5cldEUyhSUkQsbUN4PXt6L3REelRYJnskeEModWpFUlNkS1cyeTZZZVRZVTkoeTYv'@;
put 'KHZRXWB+TXBMKk0vRlN+bzU7OylibEJfbmRZZSlqLzFyNFlBR3FPKCUkNWY0VGokQFEkKE42UjwweXA+PyIlWSlJVXooNHJiMzFneiIlK2tNfT4iJU0iKnlpaXAhN08wPk5OKk5JciouNWkyXWhFNyxrMk9DN18sMiQoX11pRUJ0SWdfa0JRVz8zVU8/KCN4OUlKOUovIXhqUTd2MDx8YkZUNWtH'@;
put 'QD0heHZXOVNWNWJdX3UyVWVhd2o9TUA9YXhKZmE0bVJCSW18Kk0qSVklUyY1djJkSVk0OUshNVUhNUI1Yk9WQCIldTdxRkFwMlE7TmBRWHRJPEtDPz4iJSxfOjRWKkI5d2F2dC9UKWJJZF1dcCN9Mkc+e0Z2ZSxrYVokX0gxSWhkdTkrUFlmM3YsTHRiXkxWO1BCQH5Ve2s9RlR0XiZdbSMhbHhI'@;
put 'SkQ6eDk+fEl3XWhpbHZqWXB+VHVKU1U6eHteV0MuSERYPGFhS0FpS0tRVXxZUmhTIzNPI25XMHE3IUhYR3o5ZmE4JmpbTE9rRF8zWzc4PXB4IUdVWChIXV0pZXBUcUsqKE1kbGJzYSlMUVRAPSp3WlE+dHBCQnZuM3cobGZQT3FwIkhtdHpWT09IJCR1aTlkL3Zzfnh7XnxIQSQ8RGJqaGVLd31m'@;
put 'RGlLSUA9M3VlT1t6MExBZ0VAWEdidEIhMDlvcGxCZ3pOYyg3cGZRK31PcyxRKi47dFEqQm1AZEJBaVp7WUMyIUl6biZCfFZLLy5qRGhdVE5qRlRbVWReYF1vci4iZV5GaTc0SjBXfGVOI31YbllyKUhQSz9pIzF2ZWx6dEptbSllcXxxUC9heSxXSmQ/OiZDanFTdWppRmgvWUx7XmQkV2ZwVU1p'@;
put 'UExYXnYuKzNjY2M7aDk1Z0BCeE1hcmI9InN1ejkxSmtiIUQmQnE3NUdeaDNRO1JecCNIYTUhN3h3QXJOO25uTSoxdFN5VTVBWTRLZiNgS3YpQFdhREBvIkI+d0RCNV1mUCNMNCxjQ1A3cV1hQU8mPjhxaVJEcDZuPVYzU1ZsTUYhREJuWUxPTlUwfERuMTRFY2g3ZzV+YGtTWkxHNW5lbCojMXU0'@;
put 'UkY5NWN0VTVCMG5hOllJIVk4Y0VhNjIreER1KTQvKE9KLj8+T0NmWyZHYDFnejF6SWhHWzR6dGY6IUs7fURhL0xIRmZrbiNIS0I/REREL1hkXTJnMEh6Qj5IeEZuWSkoOlskLn1WYjNhJnpLS1E4P1AmcyZxTFQsUH5VcGtgWEhUdWlnMz86W3ExXlF+RlQ4Oys6QjV8P0dpQzM5OEV0SjxDVnhr'@;
put 'XSNOfEx6KG1Ma3JTSn5LUUUvLHgvQzhwdHpWOVpOP1kmLnV4V2lTJlpzPCpIKmNqWi5hKCZQcHtYSEJbUDg0dWclWzN2X3tIXi9rZjA5eFZBRjNpLnFaLGtLKjFEblk/WTUoaHhVcS89KihoNGkrN0hXaH03fndocE5ZNTpJLHN8dDB4RWoxVTV3b3U4TjdLKzMmNzRHSFVFLGQvZW9rOiJTPy5o'@;
put 'dypFejJPUSw/cS9lb2sjdE5EUFhjM1k8RCFlK0xbTyY4UyI7Qnh9KUxnclgmIldAVXZvKzQvIklLVmc2NUJzcmdHNGNuXno2alA/UnBvOGxbNT89TFlBailbMnVZJj1QKU5edkUkbnB4NmJQQnQ9bGEmPVAjTX5XLCRbWlNbNCJFbFBIcFUjSHsxMjxhZ15kLlg4cVFWeyY3OjNjTl0lTnVTKDNm'@;
put 'JWJ1OlcpbnNQLGVJa3BOYE1jaTglaiF8VUtKWU83X15gIToka1BuTG5UKzEoTTNYTDQ7M2NJKTRHdFlBZkhRJlcpM24/PFYjSGIyeEwoRm03PmxkI0o2OFl4MTA5IjpJQVtrUi5qXTNqV1dgbjhSQWBdb3hVfUEybV02K2N0TUBrTEM5aiNINkp3TEJaKG1CeEg8M3c+cCN3PnddRT1henltY0Fn'@;
put 'KUF8KzJaMnlzX2wjI1QyLzo1MipNIWM8S1ZndzlWa1BPVUhpTmg6Q1QkXXswRHRsRCp4W2M3XTlNUFIvUEoqbDd3X3hpNltoS2goSzZTJVdqIzdYQDMsWEZZej1MZCtlR3FJdSQqV21qXSFnaVcyNXxlMWBrUzFrYVNIMF1lMTRMemVtQVFsTTM5UUlhSz14JmQ9OjxEQEZiTV5pS2hvO09GQ2lP'@;
put 'TUk8RDF4K1JHOyo7bj53a3krJFdlOS9DZykpeERidDVJa1U+d3JGcFpVQ2cjSWdbIW0qWUpOWDU5Kn4wRVVxQWciaGghTnAwRSwqTzdVNSYobUc1P3ohbFFdViVZMD09cUhhc1B0WnhPPzwyRSVafkYlRl9KI0g5NGNYT1NBYDMlQ3o2SWUqTUNTcTF3Q3R9VzZkOGN+SzFva1RYWDt0alAhRSsw'@;
put 'dS5EYl1tdlVBd1skSlZLaGhRdzJlcFZSS2ciY2xUa0MjKkd7bCN6Nlcraz1pdTd0UURJIXlEQUFPJi51TVlncypSKmRUTXBCbiV4Kj1IalAzWiwpZ192emFCKU5WQWtVMWpLaGAwUFRKOi4yLDd7SHpMJnRDQHFtPnc7QnBpfDA0T09wdXp1b2NpXldKcnxxPEhJK312TzkzYyNQbk9uSCkpfXB7'@;
put 'U0lsM3ZfbUEscHExTG9dKHF1OV0xZ2dWQUUkIXV6YiMvciI6PiIlQVJEblFlM0s7d1NYLjVbdGwlejlvcD5Hfm57S1UkYHBXTihRU3FNaClKPU0oV2FMKzBDbz91YzA4OHIwcHBLSH1Sdk9kN0JtY0RTcEBAJkR5XSIldihsVV9NbzBsOXZfdy5qWVdpUyZXSU5pNFZXRyU8TjNHKmgxVnQmR3Bw'@;
put 'NzByMU9GdHFCRVZ2eXVRN1VCVCY1dmhNazN4aVo4MzhSZEklIUpdX3QzUSp8QklUUjFWLjMrfG9pT2pHQD1ndkVZWXoiUXY7eSssdCpFQGQuOzcrW0gzYUBvUHB+IlZOOmAiZT4/IiVIWGA8QUNVa1ZpU3czJUtlQk0oJSlGZmwib1l2JTtAdklBQUsuIlAmNXYreW9MJXlUZ156Lk9uYGFTR2B0'@;
put 'M3hlKEgrZEFEIiVWSD81dVlSJXBwRUpQJElZWEBwVEhBM0xaO3YsZnEqLl0mKnRyIVVLcDIoNDFENmxFU0ZoWGdIUjhgWGQ5ZCZQfGguSENDI0xPJnRUM3Fxa1BlcV1OVEFWd09DRHpgQT42X31Xc0JMeT5FeUs5In03Iit4OXJ3ey9QaiVMTWNtVFB3XnRhUmUmWDFGekFJNUx3PFQxLz5GI3ZC'@;
put 'Onl7XiJZMWlNJERhWyFuQmRYQVJCX2MmNXYzclIlIzU4KWcmWUVLRCNHdVJxcHhDX1NlfiVCaTwrMHxuckwrSHFJQD1OY0BZIU9FR0J4T08lODY1Vi9fXXhIN15JSDt1PDdWS3UxO3ciaHAwcHAiWGxkZkx+NUdJUWZpSztPX3RacXU5I1dtdWBafjVKZiIpSFRDYTR1cHAwWlQ6YCRfI2dQfkw8'@;
put 'V19FU0IqXyJnQD4sSllKeyRhUmNpMEdPNWQhXk1sa1tJLDdJejArdnJfUF5RNzFMbGx3JDE3Yl05NlN2Tk5oNmBgREU/T2MkQTdjcFZVI181P0FdXVk3JjB0MGZwLjlnNFtKTFgoUyhXTyY+WW1sI01YUlROTmcvP1hyU25QLGNWKldUaUhaN1JXNnFuTX1zNkN9T0JENENORTwqSmxhaXclSzR3'@;
put 'Yj55fFg1YVhFI0drZSo2dzM2VGZFI1B4bmhObD1yWXpSUGplOyojeS4rU25ZKDJ9Mz5DIUUwJSF0Vlg+dnxMNXhDKjMicW9PZFpNNUNsdz99QkBiaDFFe1svM19USCh6WStqa201Zj1IL003SDUlVjY8MSRAVjl8bnRYbyRhOlYoeURaO3NjZ0VWdVNfLzVaPTBEWnwwTlpeJlovR0hUMEhbJFFI'@;
put 'cnd6JE9HRjdzTS5uPiFbWURAJmRyOz8oNGtRUyRTbF4vcV8/MDFPZ0k9YzR8IVo7OUs/eillMF4mVWR8W1liN2NFaHl5N3JCQCQ1MzRAbXVWVkhFM3ZQPGVIIzZIOi83bVMiKEJEbnRzeWBGQ30vN0lvQ0xxeiY6X2F0czJMfDwme18pXlFWXnhMYVBuKnIzLyRCWndad2Yhd0dyQDl2NHI5KUNE'@;
put 'bWlVMHRoTntEKnBhWnd3S3hHSCZxJkw7dXc1OUNjK3JUMEJ2ZmNYMzNoO3JmQEczQ1dIVjd4ZG5hVzxrVUN0RGpdcyZFXU1iSl1MRUIscUYlNVYwdFAjeW9rPjo7Vjo+ZDZOL04iQkoiR1g+NFZrJno+NHwxN3tqW2FXfXhbMUZCOndfOHpvKlgqdlRwTiw3IXg2ZzJoPTUwKFsudXlDMHR5Xy95'@;
put 'Wnh7I185ITlWd18od3tZaXk4fTx9Znt3WGZbZWppKmVnSiZ4JGkhYjp2UzZ4R3RleCJYaWx9a1diN3olUDIxZyI1NUdWX2s+NSp6NVAzS3dWSHF8a05yKF1jYlExUHQrLkx8QWxyfHZOQTNQdEZhUCk2dntdbGhhfHEpRGtZPjFHQjQ3MShaRFY/IiVkbXMzYHxPZHcpUUJIYlpTKGp8cHdNNytW'@;
put 'MWg/YEQ3Nlh+U055JVFGcG5zbmFdP3ZJaH1CfkRrWVNwPnB8YytIUX5TL1FmMmByKDkqTTtkY3N0flZUem0hME9EYTp2U3IiP0NJVnpOK1pYKyZQX086emhXVH5ENzxuZWdIYm4vfUVgNzd3Si9vc3ZgQjIiTXtOWShIfiY2PnNYYTRbR1Q2fnVbS0RkR20+TnsqKntETDJHLyhyWkBESWYkOztK'@;
put 'YmkzTXtMfUIyTEwqYHBrUSh8cnc/WHN3P3VIQU46QlJ8XSY/eS5hK3Ipb3VrcTc+NTV6L1BLQnolJks7NThdT1p9VjMlal1yJl9fNWM6UXs0P08vOj8vbkk8UXU+ZT1wPnBlcVN1czEoTUhENzNOcFppWCtNX3h5RiY1ST9LSDEjcGJ4YSZbU1BPQnBGVDJzQDwlMXR3OjpRdnM/X294cXYhT0Qv'@;
put 'c3NlfjZ9Qjw3ZzNvJTRTe0J7YUh7Y1A2dHpLUXY6TGteRmQ9KzNfYDU3UElKQ2lCcT5HVkRFd2tPMkhOM0NKQyQsKEsjX0piekQocmJjRDE+L2t7enRvbFMkaV0zNlU2RHpEQkNufk40cml6I3Q7cjYuQXI/MlA7Q3pCcGJHanlgLyp5XTg1YWMzQUx8YkNkQWE9V208aGkrOGE8M1R0Vl5adE0p'@;
put 'ekV3PjpvT3t9Qk47ZWI5R0tsMT1jLnxMdW8iPkFkQ21Ya3lFcmtgMDFTM1N7TixSV1o2Mkw4RH5Ta0QucjVvdCY0WkUxZS4+TGJhbEMxRmMydStEciovYmhDNixdI3lGZW84b2h+fWZbZTNqanl9X0tDKDFacU4+MXhaeHphZFR7QSlrWjRmQC4+Yz9aYF1ad3dORk5vaGA1KHp8Wm08IkgjZSN2'@;
put 'c1Zwe3NNO2U4NkVRU1lDXWcoL3wwT2IyWiwrcmxYenlyc1c6NFVJQ2tdUG58cU59KXwlMlF0JncuUUhdfjVwTE16bUF1WzQ2czJTJHBrY2hLcmQpLjV5bTo9RSZYPnhffXt7ZjpyaW07UTlydi8ydkBfdFlaVCJmJkNDbF01WTp8WFY4UHx8S0QoVGBKLjhKZj1USDl9PkBNWSRIWDJfcV0vS3pP'@;
put 'KDJVcnlAY3FfbXZgTmY9fmAjNVpAfXg1aHohJjkxVl5aeU52NnhxIzdkKHYyKkxUMnltRj5hOi59PDo7TH5jKE5jNlhgMmZObUpqMTZufFJjcFQyPU96Nk1JTC99ViphZGNHTm5+cVd6e3chakQ+TG5DcmF6b2FgIzhHNFE6YFI1e3BmUlswL2kmQ3hWW1tbKXB8KEw3Ml1IKW9uNyY1NTIyMGYx'@;
put 'c3U9RFdaW1ZTNlUwPmNPRWR2JjZ8WzdPVCE1NnMyZHZ+YGRoZlo9TSVNcEM7dVkwUWFAJjtaMjVoUyJaakYiLy9aTzFueD88YmA6OUJkWGQhNzlrbng2dXtNS2JCPyQ4RVFkdlc+XmA/P2taJkhbN29PKD5ZfHgpRmU5bWk6QzR2SCk3dCV1VmpdaFlQZzZhe1teNS5dcVomWCVgNGg2a1QxVWdU'@;
put 'eG1oNyY6W0BYRlU7P2h1fkxseXdBOXlwVlBsLzh0WlQpP3UxeUE6XXxvfDhGUmkyPmVXRWBVYnpWVWVlX25zb2BWImVeclhUcnR9fXZxZlU7eGtXKF5fU35jXixRSEdjX25zSGBXM3l8XVpSTEJhZF9kU1MqRzNwakpiU2BJfjEiQ3MzeWRDeXlTMmVNTXosWHBqT2JSYCtuY1NGWSM4ZzA9L2BT'@;
put 'b3pLZm9pNS5XYiZvcGg3WypjP01hWkJdPDU8LyUydlZsbllXVGw/NSVwQCk3OSNkMn1dS119YExFenwvWH5LKSJIXml0W0V7RTpOYS5bO0Uhd3BWUGxVcm40MXs7RTVRO2U+L0FhMU9peGQxRGQxaGc0eGczWnN+WU97YHNbS2Y6V1N9clVSOjNUTGJ9UzYxKixjSiNCUyglfDcre2JkcSVMSzVf'@;
put 'S3R8RltARns0NVFYfHk2QEZTWVUoMF8yeChrSmoyaHs5JEFLditHb3xBKzpIVGUhV0NqenI3P2FyTnklS0c2VjBgY0tsSFJkZzw2UmFSeHA+XjVxTCZCNjlMYnpOUF1mYWNLJjBMbn4vJVooKSlKOj1zXSY5JTV+ejgicl9+QW9WaV1YKChzcVVlfileSktDLFR7ZSoxTjBaNihlakkmeU41Wmp7'@;
put 'by8vYVdsYisxRm5sPGNAfDhYblo9XzRFSWJiPz06THI8czFgbEMqN1JzMGAwLCVTejczVTE2NWZYS2xdWG52PWlXe00zeD9YWTBtRiVbTHxeN3ZTR11wMiswTlBLQkFhNFRPfHdTQTpfWkNOQ0IzaWE+TTphcltdOjE2QWA1OnpHWVpUQ2xJODpYRGhwMDZEPmNAPk5GI2Vibkh7JDVCeigvXW5w'@;
put 'O0cvb3NHYDZEUzFLTkg2KTN5c3N+QjFYdEtlU0VgW2tadVtBRj50XzM/NUVANkREYHB3ZHMxYGRTWTNCcEUmXWJKcnJmKUJ0az8vNnN8KFZHLiEiTnxLPnJGekkySTJEWkskdDdNbkhdS3JbXWBZSyRObD56JURqXSlRJjV3NjJLW2JEZFdkL1pxVGRjPlV1RGs5cUZDZDp8RlFtPT5eUEFDMFdI'@;
put 'P2NgX3t0NSNmPXpGeVVdT1pIJTVwTEowbXEjQnNWTGEse3I3KVoiWjouaXM7enFRejJ4XihhdXpndSl2aHhvRigqSXFwanBqXzk9P2h1Ikk+amMzYU1eZXU3Xn1je1BFTSVFaF5lWyZFYVgrKkdOak9XcV9xejVdIiJ+cV8+cEtoVSgzV3w5LmpFfk5PTGhXJHk3dCxJLlFvVDFZIi5wc3V9UmM5'@;
put 'aXJYN1NybXB6UzNJYGI6bFN9XmZZKCFjZEJVO3U4Wk5sZGhUe3g3V3BlMFUoVn41OyFTSG94TitremwuYj4qPzQoKWAhY0ldVnxybT9fOXtwb2V1Wz9WUl0/bUxOb1omLDA2fVozKUdUIlp5Nj58QlljcEJIfm96I0hscjJSMWBeUUZQOVZKPFZ2fFspR0x1czFoK1RSY3FmMi9kMWFoeXMlXyt2'@;
put 'TkQ2eDY+KTVtfmBMJjVFYGRZY3AhYUo0Tzp+fHguJEwrQz1RRDp+fFspKmUwU3gjZTIwe2Q2X1drXUovMSZqe3Q7diM5KWVpJSx5NnF8NCxzWmt1dSlLclBdRnJuOmUzWFk6ZXdWb3toN3MlLD1BclFkaDFzJnYyLkBKUnZ3YTp3fEUrJWl8b196JiolQ0FmXSgzJEgkLFFtOltWX1t3RGBPYmNx'@;
put 'OnEmJVtJLCYjNFNSWk4mQ2AmImRPJC84MVthbyYsSjAzMT50dzEkTT43Vi9bKEM2dihgWD58SjgsR187M35gejtCMmlXfnpwVmMvfiF8JFRbVytxVj5fKVhPeilvS2pnQko+YiYyX187ZzVhPEA6bTgsM0p7OjYkRiFhSyY8YzNlY2YrRFQ7UGVALlpxXSlxem5AaVgzSUtxdXtIUF02T0pJcX1W'@;
put 'ME1JPmxxWSl6NFZybml8YjFWV3I5cVgpMUNkTlcjKTN7YHs6LDB9ViRvektjcVdLPWBIO3xFOCt5fSgzeF9ONzBKcXBaRnBfalh9Vnx6eksrPiVZZWpmNjBUck9RcmY0OlgjIns2UG5EcilWZnIpVlFgU1oxT2xQMEtxcXF7cFgzSWNJXXEoLzQ1Ky57NnZWTmBPRihFV3lMWis+SColMixjfVZl'@;
put 'dUpWXV9scGZdaiIoayhgKTN6X3lASCpseWQ+c2d0RWRxSjdgKFFEQCZOT2s2L1hyWUAmTk8qKHI+KzVnZEhkVGxXMyk8QmxXMzRReE80I0lyP3omY3VVTl5SVCM1aCJRRStLS3sxSHgmU11AWF1uQVdeb34+NkNDXWVCMktxJitUQ2xbSztIPlQpRCx9ME0wclJ9N3kmNUthOHhZaE5yYyw2UT5u'@;
put 'RlZIT0lgaTorNWxkKSZaL2hlcWYwWFd4VF9kRVJfOmV+ekpWWV06dHs2Yjo2OTd2NmJhKzR4ZXVWMjlOU2JBQHJ3WXJ7fD9gKHVGZW84SkxpfGoqYEc8aj9lZ2Z2P3J3XyFGVi9ZPnR1I3RzeTpXV1psQDJDe1lWbzgpSzJTbjUveDMjRXtnTiVhbjE8UU9oMmtnZX4+NCRlSX4jYXkrckFYJUNb'@;
put 'JnI0QlcrPStLS3syMDA2cDhXMEd9U21YP0RdaCJlMHcjZjJyKktiYmExPmpTUjhrZjJKYitSV158TmM+NUdyIltdNUo6WzJKP2VhcWY+dF1EXS9bMlszTy5yRU1Fb2hxX1ksUXRGVihLMlNSOCg4QSlBckw4IUNCXTBycFZTXVI4K1QySlhhRjZAc0ZgYjRDe1F0akIrNndaQFsxV3gzaEZxcy9g'@;
put 'YjRCcF1ZI0FiK1JXeHw3eWV2PmVyT0J7SjtoZXFmLCYrVCtWKXpZX29ieW5qUDA2K1NgRVByaTp2a3R4KVR5ZHUjNiJWXyJaUDNkT1Y/MFllNWJJREdtJiQ0OGB5QHouUDBzM2RPW1U3Yzh7ZzFrKHlQa1JkSGkyKUBBclB9VyM+MDl4cDpraD1zSFlgdUBRVDojX3B5PDt4SS4mW3NpWDxabUUm'@;
put 'U19EKElOeyQ5K3MkZC5pS08mU2B3RHtVe31OWUhQeGcodkk5ektPJlNrLDpJJUtiY2gpJUQocih9d3BsLz9jLmcodmlje0dMaXEqWkViNitIRzZvSENFKVdGZnhYUF15SXN8c3wvSzcwP2NPQUROemRyTGkyX3VqeDpIWGM3XXRXUFMjJCZ7UnFObjRgakIoS0h0LkdVXmBfMD5ldkpJOCpIN3lj'@;
put 'IUpSe2AvcjRTWSpnVyZPRUc3VlssdyF+UTxQfG10alU0T043InNwc3VMaCFxc1JLbVdLQnE4SXdxUDJNUnZicyxgQ3Z2czpQOWhER1F6b2N2aGVgalk+fXtGeXdbPitEYHxSKThoQzUlLE9HeV9mKDtFJSxwYFpTRnNwKENnYnM9YDgqPn1wP25Xcz5sTyN+MGYyfXZbfFFVUW4zO2NaYFA4KE1+'@;
put 'Ym85KWhPVyUxM3klenFQV3szd2Zza2NoV1tiaG47XSU6On02dFNXKUZHL1NkYlosXWJFMV8qQ2RzRig3Jmx3InhRamJaRy9XNzIoKm5xOC9fN2tRKG9Ha0IiQ1ZlS35Aai85ISkzSX1gT3xkfiolJWhJN1tLNGdKe1t1JX1nMjRodHcjQW0pJkhIfWc1cnNpL2goJl50KDV9UDJuKF1RU0VkQCRk'@;
put 'JX1JKVcoRmYyPnVQLDdiKE5HVTRkMztjO19fQj5zdVMmPjx5S1BTTCNFdixmIzF+Wyk5fnhHUSxkKDtzdmRlKm03LnwlaWpzcCkwUm5bJGRkV04qc1c1fVY6ZUVKfmFgSzRuVVR2ZjclW01KeEZrTn04aVdhUTFyIiI7Yy8+WkMjfHY6TDQ/Q2NfNEJkK05bXjxNTHVuXko6JDomWTYlVmJzJmBX'@;
put 'fG94UX5xbGdXQnkyeXM6WEk+dDB5O2NJfWcqKXNFd2ErMTNMOCN9ZGBMUDJ7SywrfjN6UHxfXlUvZn5WcFE0U2QoaDV9SX1xTC59WVdENzxDPihRSTkoY3BoflhMWSgrOFNYanxKa3hGR0gxRj90Kk8yfll3eEZ7Q2BlVHw+WHJXL15BOSN8ajJQTFFRJmhARE9qPXRLUCRANUM9RiE6JkheXzAx'@;
put 'VCgoRVRMYCJLUH4ob0Y4X1orZH4ocSJ+Nn5EP1JMX0RFaHcpfl15RiFDYnNbPkp5dF89T2p+WGNTTElIRWhmfEBCI306d1Y3ck9VKEBAKkFeZSk/P3dbfCk/VjQlZ3E4SjF4S3EpeUg/YD5YPGhFXyU6JGhNTlB8JS4wUlR+fihjK0MiUnFPV1tFdCg6c0x7LmA4JFpMRVgkbDN+N3xqQlVba0oo'@;
put 'czpTPT8ufiJbcjAufSlPPHNOTmJaU35NcGRzfUYhPlBKcThhfn5XUyh3PiZIQWBoXWxXKm9eP2EseFpRanR+Vk1gc3IuMn1qW0lGM19pSnE4QjF4S01dRDhBIm0hS1AjWyVDMG5USzg1Oz8+REp+cnRkfn52dChDfW1IbChjcVojSmB5djp8en1AfkhzMn0xW346cWdlMmQraFciRTlZWXxSeyFz'@;
put 'QFE1aCM6LElFQjpJMn1mWy4xIX0yYzFGZUlDVGg1a34vPW4obCxwXjtjK3NDPTJ5IncjZ2I5eD0xPlV8OkhWKE5IXiklPXZUKzQjPSx+bzJ5UWNfVTFPaihfR3xUTD1pKG0yPjhSKzdbKkt5TygufHVYUHZlfXMidkpRfCQsMSFFfio3eUZjd2BuZF9aMk9qWil2cDJ9RFtFUm9zJD1VNDwiNV1l'@;
put 'Vy5LY19CMkBkaX4wIUZjfUhqRXh8VEUlLFtGTE5lX18xOlBKW2JfcX5xKl55WyY4V05NOVtXKH5pakJrWE0+TldtX0s3Uig1aTR5NnRPKCh8OkghSUtgKkMmc2lFKnZMYDpCMVBRKFBnNHldeH1MYnNuYGpFaXNwQyE+b09zVzZ9byVpLGJJe3R3OzJ9LkBJRjVfQmU+flEvMn1QW31kKX1mNDBS'@;
put 'RylIND59Zk0+fitgJCp9fipgKSo/fnlbN185PiZQZCtBazQkOnY5fnF8fn5XfHM9QiJXKHh0Zj8jUWd+VFJRXzheVXUoV3hrb3oocn1oISRuMlNYLktuRjErYm49ImErKFtGSn0yWzEvJFhEUnpDeVskX0g7aU9KVlJbV15CPDhBPylFRj98c1BjJFZ4QzhzPTM3byUuQThPfGtfYTwvZVpyWzZX'@;
put 'dU1zZ3I4eyRfN0JaKDBpPz9CazwhUnpRXiMqcU0qbX4qfXZrdko8RGZPdFZFbVNeP0ZTYGAuZTglXiM9SUc4XzpbNW5IXlFGQkxoWUVaKE4sPT9eXS47MDl0PkJXdjpdO0hfe1MrVndxcntJQHVbN1FZY1E5NkNWVj0hPz8/aD47TUpPOzdZejtUNiZKMXMiQip3Rzs6Mz03Wj8jfU43YnY+eU52'@;
put 'RHdGRUJ0Z1pdT3tYS0MmV0dDJktzKUJpdjR2ZG5PcXFkcTdjWn5ZaS5icjhZe0FlWSxZKDF1Tkh5YzVMezQ9JmlBSzhva14yZnh2NDA6YE8yIiVRdytGZjg3cXE9cztUInNQO043L0Ijc3Zzc2EiO0p7RH1nI1t+Zz5NNFN5fXFQXXkjJjw3LzMhYSVYaih2ITYuMTxHeGpMbCpQTWlkOjdjSXJ6'@;
put 'QHZjXiJJLDNjVUdHOUlrIyh9ZUQyZ1BBQXpYQUFBQT9iKUQ9KDVEIjx2SERHKl96SzZBdXtrPj1La2lTbkFEYEVLP1RLMiRKQV1DTTx1bUNBWj8yM0p8aG4waGU+Sj1tQXpYMzRjQ1RBRUUwISp2VnRyLFhMRlJ9MGZEQUFwSGZHK25SUUF1VlF2RHNiOUJHT088YWVMITNKSTZXUmo/NlJ3KSEo'@;
put 'XyRvST1IQU17cWl1P28/el1IXTBYW2IrRG1GeEFpe2gxW1BddldeZUVhX18ob31pMy53cFY8REB5UX5mTyFjWz5uPiRIXmRVS15kVV9eOVZoeT4zSXheM2IuZz9vYD8kKS4qVndrcXZ+XTdfYXlBenlFKG9HUWAuNTQvQyFWZXJIRnJEYC5KUTZDYTRDMFlVR258ZVtuN18sUmhVXyFifF0yYH5I'@;
put 'OGAwZGw7fiRqXVdQU3NXcXpDIn5AKGg1MyM1e1gic1tPPSoiLH5zd2xYYiJ+fSN6ZEs6RipJfVh5ZXgjZ0dSfStrdWo4LHVDciJtb2I9dmx1c1kpck1eNH5ZcW1AXWNnZit6LCxNSmVpYjFuZXAmVDhpcWpZbG83KCowR0NbQm5uMEw7U0AxNnkzSUp1IW1DTmgqUndAVnlldDcxLnciOXIieEp0'@;
put 'SSVNLkB0MU9TOzAiUHFjKV1eRkh6Xi8+bT19TVpOZDlhSy9WJncqPy9XNTpvY216VldBZ217MVpHfDM1dEkpT3tjeVl2RD9uZzREVzNnfnJfVUJMYyVTbT9xV2lYTzVDYDRhMSY6c1FzUnxUdiMhbnZ0a117XzpPNk08VFI0eXkpclB0eC9sK3BTNHM8V3FWPE8wLDNAI30iR091U1ZvXzF+SGZP'@;
put 'PH12YFZQTFV6SDNIbSFdWyJrSEN2bVcuUztoXWVHYX5KfmM8PC9NMklQO3VPUyNtL0QzWXhyNn1sS09BOXNLMWxzITsmRSwqKiNpIiZBVU9ZdSQ+UD1uSkcvRGcxcFlhPUdheWdzXVp+Kn1PVzRSKzJndEAoMWxEWFhRJHlgKHEqa2E9VD5Xej5BZztya0A2XSt3VzBJRkxMbDFUKjA5YE5lfUE2'@;
put 'Xyw0KiVGS0omdXhxcVppKkRrWUU3SFMqd3NiWS9bby8uWFdMei8uO1NaLCRyfGZyYUdRREkmOCMraWtZfEddRnElUEQ7Q3EjSCp7N0gqQWQkZ2VVZ0E6JHBubnpzJUloRkdLaXslREF4cSpQRHFRRGFLN308M1VCSilDQztPPzZdUWNyMD05PHQrOzd0VFMhWkI8WjdLNkZDdCphezlkVEJlOEJb'@;
put 'Yyh1cyYlPikudiZkRXJ1bF1TVkcyY2lsJEhITylXQnoxQlh8Pz5Hb0klVXdFYT1ZdGVFe1lVQVAxMEsyVTZWJHN7Y2w/d0xPdXpCUlsyLiVtKFtmYFRRIjNaTk1RUWs9UTdhe3JbUWwlZ0JhWUw5RUF0c01SRCV5KCthYDJWMDxYR0NrWz81VHxheHZ6NkRfUXRkVjd1dyErWnEqaE97LzRYVmxw'@;
put 'O0R3RS5BJVRmNDo/SlNNMHRUaHwyLDxeWStFJGBddy5naHArL318ZUIxNEZ6LyZWUWddZVRDT3w3WTZffSFsfihUWjcpQk8iI3YmYV1uQ10lezVdaXc0QiNqRHZ7T3J+JmYhc2JgfnRiLikjQCo2OjQkdCojXk9KYC9FN3w+YHlJKl9yMFl8JjZBIn13Zyl8SCVQbzpiOkMwQlYiR2g1UTNwd0Rn'@;
put 'NS9tZFMyKlY8MixaZE4zRVtsX0MhSEheRVBdalA7MzxxcC9sMG4uVCYsKSUhdEcrW3xHVU10X3pjUU0+YnQ0UEFMW2pCcXtWa2tGWlU/a0ZzP3kxKUhBY2NuKGRaWXE+ZDo6ITVdLHRUeHRpVFRnJmJ9cSooTl04fUw1eStzRFh8OiloTnhfTm9NY0pQenB+Z0VzUTQjN2pnQVcmKyh7eyRQN3Jd'@;
put 'em9+dWFEQmJsW0J3bV8leXlpPURjQTdLVkopKSIjJV46V283T0UyeFBLajt5JlY8WV5oMnxPUzNYSUQlRkl6TT5leEhYSGhUWkJZKT1ZfGVKOTszPHw4LiV9VTdzQDpNPnlEUSV2RGN4ST1EQkJufCw6N3A7cCgsSndOPmshZS5gK0NJSVF6dkduNSFyPVBIZitbayM+R1t5byxmXS5dTjJ1PEJQ'@;
put 'YVlJbENjSl5BPVhWQjlzO0ldK3tYbTtwYTVBXSwkMGJBZzx4WTZLUH4lWTUqNGQkJjQlLD9uY0tdfkZ+K08zJjtKXWIyZk5PSysxZHRkVnhHTSxMXTBkQjcoKCpUX29edkgudCtLSnFDUm4pTnduW1FKS3kzeiZxOjdabT5jUztxJEkxaCIoK3FmWnNJIURVKU1TZTdNJixsVnJRWVA1WmE5P2lP'@;
put 'O149bVpYQ11GPzUzRW8rKShzKmg0QH5PckNDTzJNdEZ4THIzOU1XWzRXPGBWc3J2QH1PP0J8VyE1NVoue3JGRDdxdVVyS1pQbCpBfCt5UnV2NH1TIShqPVNoOSY6PmAvJChlRS9TOSgxSzwmNHtqPHpdfEFwVi5TOilONHNNe3FRNUVdfkZDXWAicHo2bl5CT0tCeCh9KFRWWysodG57IzBtVHIx'@;
put 'NVhRMH00ZU9XMl8mK2hofmVGdkguX31+V1d1WXRCMjRoeS9CczhbLnssY2k9R0RuR1E9YUg5Z1c2aD1Obl5bQSY0MlguS08ob3cucCZxI34vcHVJRjBMWmhyMz9OMUMzMHFkdXhxcSl5ezZAWmR+cXxyMXhhKkUsLzcrWXxYV2RneChSI1pHd18qKztyc0JUd31xc0k9OWlAaVA/K01XV0VUeD8y'@;
put 'KHJTWCwvTHlWX2ksN3BuR3Q+MHhsNXpHdmlKdj4mbUx4NSw4dD5gRzM8KCsocnBpM3grd192JmRYfFJISGk1Xlk7OzwsWigoXSM5Iy5bSWk+OUNRRF9nPlF+WzlUeFdKeShWWGkhc2NVMltLSU9dW15wOzI3cGdrbkEuYFhTR0hgb2taRDdjU1NkOWV0P2pvYlhzJW18VjRefStBOmg8JTNfbEkr'@;
put 'T2Q9aWcpaypkU09+SjxEdU9lSkY2TGk8Mk5UcXVMWigoNmZ9Jik7c08vWCxCRU9eOjA1XzBNSE1IOWgwKFRfck90Sk1ILlFITjx7eSVeSSVnOUJvV0Y6Ml5HQE5eaE50fjJxSFZKVHl3KWF9fTB6YV9+TWhtZkQ1aHNndloxa05XI0JdW2crdX5fe3QhSHZjXmkrdHNsdFdfVUdUSmtMInxSSXE+'@;
put 'L1hpPlJAV1coUG1iWFhdNH1CQnxyWXUvaXMiXlIjcEdzX11bNHgqREp3TEtlL1VPdT5aWHJVX1N9KGJfJC43cEY1cD5ISG5TdVUiaHcpdj5eej1hJWk/fVFaZD19QzF4PXduYE4iQHJnbGJdPVA5LGBPUWBEPmlOb1E5LFVSRzpWTjlydVRxakIrUl1CWjxvOiVoKG1HZT1kRCl3Ri44QFhBVCg+'@;
put 'UCFTZjJnLGBPV308ey5vZS4hQDNJandmK20oZ3V7b3c/WV9uMCQuMWJaP216IXxuVn00UVR6OnpVXihKW20+cjxGWlMjNV8wWjtyUEFSPH1eWFBrSXRKT1E3azN4MXZkfGVbdT5AaDh7UXk1XyssPjE+ZXFKMipWKzZ1e28xIkU+WkJSI3QmIXN6PUx8UW17Tyw+SXBzI1tdb3xRdmNfeGMua0N7'@;
put 'Jn0jVTwye29aWFRNSGBbVUI+aktIUk1xJGN5d1teOShVY15RVm52UjJKUmtMLGJNVT8ucH5HenBzMjNoOkNVX01VYjNja1AsYE9KYFpzd1ZWUzJAM0lud0xxRWRGWl0jaX4xfFVfVXp0cFdnKT9sR21fMlY0TGdPRz8wJWAoKlpFd2J+K2FGWnJFdn1hajRySS9fOV5nalo6UVZ4OH5WeDN4ISk1'@;
put 'c3MieDFvXm96WTFzRF1bayQ5aFJwbGI1eWNeayQuUWIjOV5leTN4eTxRV2tqTHxdNTYmWm1mV0hmSipGMkt5e295JU18XzltM11SNSo7TWBfKlkvWVczVWFTOjxgeDYsJjNJIVRdYVtydGFeb0VAP35MO2I4Ui43cC8+RDBFLld6JFl6QD9+e3RxPjJvaD5sYC9paVk0cm03cFVDb0FEVXgmK3Qh'@;
put 'QXdjXkJOdXMsPllffm5sU0ZQTz8sZ35yK2IrJnJZOH1vb2NTOjIhWyF1Vy58fGpCdHJ0cHg0TkxVdjoyTzVQSCs9KChQZj1KPjlYSlswKVVIYVZFdnpRVlhAaU5bSXsvM19sQlkvZkNzUSpuNXIsPlZQdEJ1IyM3KHlBRlRiUX1VVHJVYzM3U2QqS20sO11Gd281e3FxVGQiUlBqWCksQVp2cjFR'@;
put 'djQ4KkVUTnRjeiJrRzlQWi5RKWEpVik7YmJxLnglbm9vTTUzVSxfdjpLcEM1cD59PTR2P3ZifiJLWTNkdEo0WXRYX3clMmE5dVVHRGh0MHg3SnJSbFokJTxXdXY9X1pQRGx0JE0kRFtLZE15dWRjUXZdRXdXOkM+V35KMX02cnBGIUFDKFlYfFh0Qi57RyZlSiVjNzRXZCRyOC89UFg1M3xMNUdh'@;
put 'TVl6bD15fmlVRXdBUS9jYCRYVmpUdndDWW5+TFhYMWQjeSxWT3U2a0oqdnpabUx8IXIodmA+ckNPUTlNMUJwTHVOXUVKdDpDSHJtXVhzQjdIfT92PXIoQUZ0NUZWTjckXlsoS1dsOnorSW58NEtRKU1WR2R2PksiNUYkQTppRyZuVSxYc0I0O1JdSkZxL1d4eSxES1l6O0l2USpCVnQsaHM+fj8p'@;
put 'bTlOXSZrdko8KnhUfGMyW1p0Uzs+dmtEWzAuaV1xalR2cStzKW1EZ0F3VzRZZmJGKElYZFNOQlk3cVNJc0hFNm5LMXxGTnFsaj0wYkRXVU8oZFBmb0BQZm4mNC5PblhyPi5SV2Q8dURCU31fRzpuKE4qX2VOJSFtYSg/fVo+TW96WypzUkZCO2hJZyNyU0RwTGd6dHxVR1lSZU06L3A+fVZ7cmpa'@;
put 'TShLcFVdNUpNUkNueTw6RyImQitCQHV8Zj1oPkdJOkN0LyM6XUU5Rj1oTUY/UHo+Tz0wbVomW0svTDRSXVdgKD47VyRbIzliYn5SV09AKDxSWylWMzV+cSImbT5yYStmUFtldTkkQi5BaytRVChCKXRQfUFleH0qPko1dEIrUT0pRVIhX3xsaUBESDx9cn5dd2hBPTNCbS5WUVtudnV5LGtFXnk/'@;
put 'e1dmcylaOyhyZSxnZTZVT3wpKXN2VEJRfGUoX1toP3VYLHVCVG1iO08yYywrR2o4WUYqJnkifFR4cHFaSWAuOjJBZmBCbSNDL2NCSyI1RjBrNV93SCY0Lk8mc2ZZLDU0d09zJXV5MWZEXVFIbmMrbDRkPSIzX2hENXJHPkdKKCNBTnliSloqalVBKGlYTF4+Nk5jSWM9I01aKWIkY090IXMiaEdW'@;
put 'JkMyJDBXMmg6bXMuYl9XS1NbMl8kLGszOHpwfmZOaVNGUChHOkxyellrRWQoLEcmR2FLeVV1dCgpPDoyQWYkLlV1KGh4ZGRne2MvWThbKzdMfCo0bnJjLzp2QkE0fCtnWVQ+bUp2UT0sSypVdyhyPiJWaHd2N0JKdW9vOiNHbGJYJGs5Ylg0JHgpL3BhNF0mPzhRWj91V2kkTV0mWkNXS1pNPi9i'@;
put 'TWtgPSREIW0zQUFUbkRdKWtCcExFKjZ3ND5VYW4sLzNDfjxpQD1HNHIoLmFjeyMoKztNUX1vU0ZQfE9qQGEzQygzJFdeWE55RlRKYHQ5VHdVRnBPZCRoKFRPUXpwPGluUVN+eWk7JkBORFYhcG9eWktdciR0LENBJiZ7WXhQYyNaLmB5JSgjP21zfkQ3M31vS1FSWD1oV0QwIiswNUc4Llt7fSFo'@;
put 'RCtUX0ldMXM4c1R4TEtwPjNJXVtKWFU0OihQNG4zY1QkfSMhWl9UUT9bW3ZWZVpYc2cuLmMlUUldXmwjbUlBOzR0UkZNXm1ZWldZT1VfdVlUSSRIS354NU5xcXJCXjQvekYia18iMyhqIk5+QkVKXS9OUE9ML0U/aklIdGNeVERpfi5fVl8reSxreno3P3lIUihmaUFeOlo8X2ZFOzM8QSt3bSsy'@;
put 'Xn5wXUwoQ1p5fnxDXVdBe0NwYzU+LFlUS2E1JT9Peil8JCI9aDwlZ1lsST8oUT1udWw1SkdONFpQWUUsJHV0KmVLeHtvZzpqKDczWUYpRjM8a2IlezY9M3hsYnZzSEo1VF0sen1BM2t1KzVdMVBAQk90I20zPD4xaC5vVG5XdGxTU1kkX1ZhYHJJdGc8cndqPzNJQWhOfFJJciV9XmFuXzUmQio1'@;
put 'ZFc6JHY3KnRVVXRGJTZ+RyUvKCslflM+Ml5hK0heamozaGRaTHFMTGFhW1o1fDVAUXxBNnI8I1JRTHRiO3xqSnhVW0x3P3x9dT46IixVXUx3P3RHVShzKk01Tk13P3lIdHwjMSE8czkkfUl1Z0MuJk5QRlp4Q3Qoc0gsVnAvN3AoYDhaX3tgSVFHIWRzfmpRej5vUmFyXi5sdStKbTlVZixofiZB'@;
put 'fkY2JkEjR2dsfkptPiZYbVVUbEMqYk0+YCZSNSg3cC9EMmhsQjUkJiR0L3Y3SFBLbU13fXJOeUBhblRTLDJeInsiXS9MbX5+W1VfbDVQSHAwOCkmR1V8VmJNUmkueitdfHF6SipffnpEZE98YTcxSmldfEMwIVtRSVRHMFt2fFozeiFeZzVGMmhESDYkKG4pazBBdj9xSG5fVllZPTdBdj8zSWhV'@;
put 'RkI6Mj5WYyU7R3E4VF06YlZUfHhYQn4iNjdMKmcseFJIe0V0flhvK3U+NEFOIV8odVBHQFlucHwkVFhydXMmY2w8aGlUXmlRXnl3fmB3Jm1iMnl1b3F+MT9aSEY1dX19fCs1PihYe2FjSExPaG59cmV9K1BuVlUjbiklcVV6RGN+djZENUVyQENPQSEuJl9XZDA5azU/WTFRKGZrU25HKS85fXFQ'@;
put 'OVZ2JVpQNTdzOHxXX0k7cjZeN1JHLyZ2LGYuMnVsLmQ3ZG05P2liaU5YMFlFVztNKUU1Z0NDWkYpaTtqNTJLUE44KiwsbUwlTVpMZypWb2JeaWFkdl9qKHpZUTx3VV8oa11jOnVKRm8xW0ZqTTA9PEguaDdSTCppTkEve25yRiwuOllkMDwsbnx2WXIuOyxvZFsoVng1KGVXcDMxX0E2T0k9a0dd'@;
put 'KiZnRHE0fS8xaHReOGgmYTFqRUMqX3p3fXI6RHhqczZOYlRMR3U4bWZyKClWeDRsU0BJSmp2XnYoPTFoYHZlVEQ0UCxKQjM/ZzFHc1J5JHtfZT1+MFNUbkRVQEQkIjVSeDp1NkFGXmZqIzU6b2FoOHh2Y2VgalJoJkNURCVJIkljJD18LislZyU0ck1nPitQOz8/SVNzbndrUWpERHpuVyxuYCps'@;
put 'PiFQZCF5dnt7UFFbPix2Ijklaj1SKGBedG5hU1M1Tm9gR1ZoQSNMVFBiKFVtNXczb1dSWVEzNSZzZUswVT9HTCErTkhiL3JqLklZZ2JOcGNue0tHJnRHbSFgPl0rVk9IYEdWRj9tU2dJP351V3RDfSo/TW0pPUMkQFNIP3xUQjRhLCUhLkVoaFsqQz1CcTR7KXp+ez9aX0dEPylHQDRscGA4I3FS'@;
put 'QUAkKFdkW3kpOjdIQit8XnMlXnYxQCFKXShbKSRXKjA0fC5DeXI0Qil9KXoibEtgWCpNUzRlaUR6ajdDKUdYd15qNFMqTiJfM1M0dW56RUAsfj1yeEUjeXJNPVYySkJYdFNNfTd4aGZ5TlAiPFFYUXF2TC8/c0k4M3kpNlZ1MU1zX2hsVn1kNiVTU01JLFBnTk0qY3JMWX09QGNfb25OMGV3bzY/'@;
put 'OV1gLDh4KXttRiFJJiN6KClgfmtRQG4xMFd8cDNUMltaRkI4c2J4R1ZiTi9ZMkpsUGQ1RGk1Ql17NGxeJlNCKCZeNipzSipHTCozblVdRz9ge0R6PiUyd1tgemwxZzJnZHJLQGg+L3g/VXhBfXgzczdgVWY1JXNvTHgzY31jPTp+VVZIJn1PUl84fnVYfDlWbmAxL0ddNzhtZUxKI3l6cHl2RHZq'@;
put 'dlB8e2E3UHxkXjwzaSVtPj88e1JqNUBRVExGeU1aQWxTbnJ2MFJGWylWRlpwVSljInNNUCROOFNxIlcpPClKaTY+b1t4NzA2Qn50KUIoX0xfb1Y9PUpaI0R2QnF8O1JGIVdbfVBDVV9RJTMlQ29+c0NLMH0weDB8Iz1tVDFtKXN0TEx8WVJWM216eU52d0BgbFlqNTR3ISlzczduWF84PDkmMVkr'@;
put 'fl8kOV4rTlIjVzNpfHVqdj41V0NecUooX0xzbT5DP2xyM1klfSg0dT5OOko1b1V3RzFyT35vU1BCRTY9TUA5JHNVeEJzU053bCloOl0hblRYJS9GaT1zcmdeeFAyLldoK0h1RWhPfV0pSnw0Ok1KKF8+OWY+YkF8bH4uPWViLCw4bEZ6fmR0WF89bTJvUVIzRiQ/MXlWRElSdUJUfDZIcD5yfW4k'@;
put 'V1tIfVpuMGYhJmJ1Z3NTYjRUbG4hJmJlUih1bktxcW4hJk5NfnN6eyMwfE5iVzRea3hPKHxNZkdxfj8yWSo1fF9HUUFaTFBvNj48Tk9RdXVVdTw8IStxUHV8MzFCcmptbygwMVVfSj1NSSRIPXwofVZfWSFEUT1xekBuSWx9TDVtJHgvWE9lVy8rWElmSkpPKVE7YFtdPSZBfH5tci41aWN8Xkpj'@;
put 'TihlYV8sb1U9TS9GSEMrYXw2TUA3V2FmQTM+YzttLlV5ez1sN35zLjc7czJycV46SHxyJC9rPnIiPn56JiNRQkwxZkI1P31PYHw1N1RRWXtKQ2kwLEBOZXxQTk0iVWFUaEZjQTxpP095IVVxdSV+UzdlPTssUV9MJUk0ZlNMfGdaWHI9YTl9eEdTOX5pTUhJNUY7SSZdIlhJJjQuT3NZZiRrMHg3'@;
put 'eWc1Kkc3a18sJj1rZlk6fU96OiZtVClaVkhffmFvMn1LRnguMXFNLDVpPnJzOSR7aCwhc3h1VV9SOnhnPTMzPlpFMHI+TVFuLHlNNCFFRyYpSy9jQnM+MldMY0A8ZDdaPk0+eGhzR3M0JGpeTzlbUUEiK3M9K0NqSVRYfCNNWF9HOSUuI2QpPllwYXNyX0NfO0ZLY1V8Olo2ekBTbl5DSDFTeC5q'@;
put 'OCtAJmUuSVg0bj9UNHdbTjt0KG0yfC47bTJvZH03JVRKTkJYWD1zcG1ifkMhS3wmfTZHbT5HUD51Pk47fDhqcT5GaUJtKUVBIltANCR+fXJvV18xLzF3bHIme0ZDXXJ8Y2teJUU6X2RheyZtSDVVLlhlfnBdXSZ0IVoqNENsYDdJNipdRU92JHpVXzJWbD5jYHgrcD5rYFlyMEIwXyN3PyYkW05k'@;
put 'MUpzc2VxVW4iNCVOOVZffihsc3o3JEIuNWoxajp9KFJVbkNvbkN1OVp0NCohPklkaVBGQD48bklRYHBNN0dWWERIUTQ5WUx8elU1XlN8ZkJISSxIeEJgLnx9LGlWX1csaz4rX3UsfSZaeyUjeWZvO25JL195JU55UD10flJSWV85T1pWfEd3Kns3N3MwfVNfYThQcS9ZN3N5VDRgcTBdRXtOZXVf'@;
put 'cDxfeGFeJkdacDpHL1JddzpnfC51LiZ1RkZpeFc1RDZmN14uSj51dktvSEc3NnM1dSw+NHVjREw0QlZOV3F6N21ZNCRhfCsoY0EkKEhOQmh8bFl2PitiOCZye2hhPSZZdkk8KVllJVkqLnxKSDNmc1k0d24oNkJdRV5RS2siSl9zYFRVbi5GVWQhIkJeenljZmAyNCoqfHw9RTxtUCV9fTxOfEsh'@;
put 'RyZCS1FuZHdtV3Q9MlRgNVgyeUdfXylsIiYzJGltcVo/flBoOG08VTN7PHdhK3F9LCYvJmpASnlAfFlDNzR9T20qJH0rd1hfd0h9ayMpPn12aWVKQHJxK3R8W1smbTN0OG5nRVp8K1JpejF8Km1NP2A5aDlFWVkuJCxrYS5MI0dNLFFHdE48K1JpbS4od10wWGt6dENPTz9WM2xuWW4xKFpSK1cj'@;
put 'Zy9Rc1IsISVnd0ByPmtvdyhCQk1dLlFOLihjYkZMQUYwdCVBWXI1aj93STx2IW19InxDR1ZNNVkuZEMhQGh5NyI2dWI4TzVhNCRZUX5qejomPmopS3JHOTgoMEtIW3B7PlBrJiVJSShiQ34henQ+XWk9TEQjdUN9c3ZNOH5jeXErIUdjfF5Zc2dManp1U3FyTEtxZjl2elQlOVBzb1FXXWtRb3gq'@;
put 'dlRNP3NRVEMmaUUscFpUcTVna2FVfV0rdyM6U3RDdCNVZHE0dyhUJkJ4dTR4d0FKLnojNFVROUx5QkQzYllqeXE8N1MsTTBEN2IvOjpXUjxqWG0rYFJzclQ2eSxPaX5pdF83MEFvfj9TY1tCaW0sZC9EX0puMkFsT2NlUk1rMy5sV1s9KmdBZWJ8I00/JnhRbDN8cT44WFlbW1orUCkrYWJMaH5A'@;
put 'U0gmSkY0Z0claGA5T3I+b1s6Kyxbdn5Rb28+YnQkVDBFY1M5fnhaNiRjXitWdUl1KHl1a1s1Z21gSlp+fUpTdD54ZH5kUU9gLjltQHtbVUZqMHB0VH1rJVhNUXVuY1FkTS9aL1JtczFhe3JwRm11Z3N8PU5FWU5SKnE5fWp9dzExWjQqZXUvdjlzY0QwWnQ4SFQzQEd2PFhSYTpvPj1VRFQoTSVm'@;
put 'P0BVUn1PWW9rIXVTWmB7VmAiaFp0VTpRbEcudXQlP3YuV01xLzF0MHxMbCJRZHJbWitQJTJhSEI3PllKTHwuVzxNV3Fyfl0qIypXK0xEOHZ6UXM4QDJEZCxSMUdWaig/U3I2dVlPd0RlcyErLExgPW8+aEIjZGxqbGFwMH16XyVaRmdpOUNmP0hnciYuaFNWR3gxTmU6Wkx2YHU+Jl5OUX1RRU90'@;
put 'T05ERytVWVAkd0E8Oi59VHo1dFZIYjRbL1kucDpUXn0vXSt9fVBvdGM/NWd4VGJDKCopNnlhdEFYO1FdSi9KMEI3SEA6YDBraEkpZWI2dUhVMENIe2FiND43bnAwbVBJYy97KkV6b3dxdElobDNjMTMxZygxN3xUS2h6NnkwJWV4WnVtQEdmbXs6WnUjW1M0KSlSfT4oSURSeyFIXUhnLiRAYHpP'@;
put 'fiRBaHBffnNWNk9lZ0RwaiVJKnE9TSMxS2AjSEJdMX1aSmE2K2ZHdiJmS10vNS9KZVNVLi5XazZIb0V0Q19EeVlNNGtXKURjRVkqQmVNRX1aa1puI25VTiUhKjZyYz8oUyMwLipnNEcsfmUrV258fC8xNE9jRVc7SF4rUCUjfXdgdjhoSDUsVnUsKmcoPXZzVFVVbjYoWzE/WnlJPzkrSilqKEM2'@;
put 'OGF0Xnd5YU1ETVlYOSxENn1UM3RaNCF2PXVBYGJUbyJlNGU/VnAzOF4jal9ufjFTdTorP2pdYUNrUHRJTj96cm04SFkqaWowUUsiViZsKjx4T2QmZ0EpZyh+NUQseGNmSjV8RnpFLEZYYWA2aGg7ZTZVSm9eVHQ9WkNtcUB3X245S0dhQzlOOn0wfXhoMT82RDh8UVpnbnRgPTFUY1J+SmA7Jm92'@;
put 'R20pa3UlQkg/Mmg6V0ZAXmJUPTlzNGg6OWMxalYzIXNIa1IwX0VMfFs8ZSQ5JGluKzYpYml8bUpuIzJCIVhhSjFhV2U5KDduKXZVRCJGaDVFSSxOV2F8W2hMbEVfTExAPCt5O19FNjEzUEpte2FyJmZ0Iz51ZnJHJmZQW1h2Mmh8KCIrb24/R1ltTHE4eSlkVXFiZjtKLkQrIWNBVSg+dDVSU0Mw'@;
put 'THd+WVVuPis1aWZDd1k5MnlAV0NCJWx5NmBEbXVbdnMpeUVyfDd1Y2ZqeDM0bUIpdyJUIlNyYEdWWnYqLnFxRy8mVGxiUW8uR0p6IXwhNTRyc0I6TzNMLyo8fTVSYW40bnFJP3VCdzNoalN9KjZZZDBlUiZ9WENGPkhGUWkoMWl8ZWo0cmRDWk8qQjhBTGNsMHYkRlJTaiNEeX1KQ18mSXRzO05j'@;
put 'ODx9cz4/eWZgbEtrQjplVCZfdCQ+LDZKdH52Zmp5dGYsPEtjdVhFc3FvJmk9b2ZNO1Z2dClrdnEsbVU/UzI6fTkwcl9BSEJsMGhUdnVqSFRPaXQ5ZT17diw1I3JeW2ZnJShTRkohO0hiT0hVL11tQCxiKGteTmw+UldFcEpnYn5YNVlrYj9Eb0pKUXp3JThzOFFCbDVxRVFmIi8sREVHPkUuaU5+'@;
put 'fDo1IiZ4NlIwQmxJNXw0PSpmSXFLJSElSkZ7UiIzPklpVGpyTiYoZVdNXixWRkFhK09UbDU7Y05bS0R7YXtkbkpkfDtAeyZGd0dSJHp3Pn5TVmFhemw3cEwhNHczKmpHT0Qiels2cn0pInhbKDFJVyZJQiRZUnYwd31KfmlHLjdrNTE2bngjInpdZkRKN3c8QixdUHYqalt0enJgaioqMEllQmpY'@;
put 'Q2VXfHVJeSJxMVQ/ZFB1V0xHZFpTPD9aSTM4ZWR+MyhdJGszI3w+STMrSGpAJitCaTRELFV8TEJOdFtRPX5GR1VzUkdZUmY1dkFGQjdCXiYyP35pfDZPXWp5QSEkaU5heGNWbW5GYWF7KmAqcFNuK2B5Ym9KMmFiNnVqOTlCUUd6WGcreDApLz8yWVJqeW88K1JfYDNCbFRyRDNONFdsXURiJj8h'@;
put 'NG1NaWc4IlZqbGJmWU4xRWFtQ0B9Ynt9aEFtNV9PYmVZVEMsaTsmQzN8JW9wRXZ9bH5YQ3hfKUVZUylUYFpMJkQ6Q3dJbUREVDJgQlVAN2BKNShUV3pfM1RkbTFFWGxlUCR0Ti9mSXp5JVBreTl8dnVfJiJbOEY+TXJlcFBjW2N0QkRJUmJhZ345OyNRbUpWdHQ/Yj9kR118Pkl7aFVFSFtec18m'@;
put 'RlYhWTdiYm16SCJzQzF2JGZ+RDFnUSo+JDh+Yy9KLl4lTVNyRjc9Y1c3OlNGVTtCPTk5bkhFWGVAa2EyZXo4TEt1Q0dzUmlkc1BWRWJEO0ohUDdHVXtwW0Axbl9ET2d0OmJzKzV9aXouXmByekFgLHhBKj99c281b3cjeiwrKE42KSFafGFzcVg5QllMfFYvTkp5dVB0NGhfVkcyMXwmMHpaIzBS'@;
put 'Y2xXYkpDU3tHSD9IUjtMWV8lL2gkQzI9Im5vUH16QjBYRUdxYXFzcHRXbm1MKCI5dG4rbldYOzoyPk0hQlNvPCI0bHlzZ3RiVVF0dlVoNlR8W0VfNjdKNVtWKD99LFYqTSJtOVApLn5TaWBnSElkM21lc0ZRaUJnO1EpcWxGQm9tTGFuaEtWKnpdKVZFLkRTVysyMCgrbGRFKEg7fD1EcHRvZXl5'@;
put 'c35vITYkOjNnZnlNeGsmemhpTCQieGFTYkN0QXY2cXojKXhCVWhARyM+RWlwSWNDKEwqfnskO3VoOm4oIyw7NWAheklgPG5FTDE0KHA+Ly9FSEBBLiQ7UTglaDo4LCRUVDNBfkNkWl9XWC5JcC9PSCQ+YFExTjRydi5ISDIvU3cxaGI5L0pAJDoiYzRWRTFyZDAxPmFCdCVXdlh+OkdibEI/I00z'@;
put 'TmB4MHRyXkhhSyY0Pm5qeUZ+RnJWPk8jMn5UKGtSb2lhLHl7QnVhaCR1UDlpPlpmK0JUNikia1c6K2B+MlpsWjIrWTI/I3RAdSJubkc/YTNUV218Q0l3fkE/QGhCPCIxKHtyOjs7L05pdHY0bEdAXXJbQmZ8dzhxc1p3KUhdM3JTOTRlU35GeztPeS5XNnkyTEZIOkwiYiEoJnlzOCFKNyh3Q0ZW'@;
put 'KmY/UChGNzNvVllARG9ALnNiWl4rQ1ZYZiQqQk95TTc4IlhZOkAzTU91UUpeS0xbMUd+JlYiK1JYOml4IT5weHJNN0NJUmV4JH04UnU+ViFaeEhEcXVtVzVrRT57S0ZqdE9AKT9Rc2BQS0BkTW1bfFVbWyZBWGx6JVptSyEkT3hQZ2ZDL1M6KyFodU5MaihsaW9aSkIlRUNYRHFnUndzZktMfHVo'@;
put 'L2puMUtqTWNEUiFlKyJySC49LmVOVn41SnQzKUBCKml4XWBeRF5RZ0pANyl8V1NCM2QqYTBGSi98NHkzcVFocj15fGx4dyk/TUpJJFoxNntid3okNks6On1TZ09Vd29nYHlEVS9tPkJwYUgrK01DXmVqQEwpQHdLdD5CVWA3d2gmJl02elBYJVpWdnNfWC57cipDTnIwIVQ5SWNjMSVuPVMka083'@;
put 'dU5Ja1ZVbSFTUWc1WStSRDFFJHMyb1dbZTBaL3xhVG5JNSEmKUw4fTQpcD5kUCJiX09mLHtMXz9ifkBLaSE8SzpoJn5ZNVI5QGF1MGBRck5MJlojPkNkMix6IXw2TS83YXlhKXBzezFNUypfSVBmeipEKmdRTHBDUlpzQE9nKUFePmxiUC5fW0M6PX04ITsmOFtuXWFscCxWT2V9NENwTHpVRUUp'@;
put 'fEhBWyZtWFZOL0JHZjhzRWlXTzw+cnc5dnJHMCxvfnZ0V25WInhabUFlVns7YWFnWFVSKHhIeXE1fDhKYWRoOzooUEhMSE0heSxyaVQmdGsxLyo3MV1PWi5NPl1QZFkrYVFPUk99STlaW2pWLHFycmpJUTRVTkMiWVFHVmd4KnwvTiouOXlALCE7fWtUTk9SaV5Ybi54OEIlPXhYfD4qXSYsNila'@;
put 'IUMxcGwxZCNPcyJiOUkvViYvKX4+azZTVEEhTVskX0UrcGR3Uk0ubyE2XzlPQk8ofUdKVkU3Sy8lbUNueEN9QHcuanM5WlhuQFpEVHVCUiNYWUJbR3ZURD1NYSowczhMM1R9UWhaZ0EqSGZuRl5odWdDV0VeRnR+W1dZX1AvdDFQL0V0S2N8MkpTVkV0UkRLdV8lYWwmcH1QSzB4WTwiPjkyXjpf'@;
put 'KU4+c2V7eCJBa3RbTCsrcjlTK3lTMHlGSntFO0hTZ0x0WXg9SXVQUWRtQXVlSV95YU93ZUhgKCNQfihhMkolLixvX0RES01FZywqaEBGUj9KdXpuZ1tOOChtLipuO0goc34/SktVWXB3e0lVbkkyPUIiaCZUOzlmbDlecUV2TkpPLjsxT3o/PS54YXFTNExaeD4vT1Q3cXBCIVdBejNPbSxfKCRy'@;
put 'MXhQanZUKiheSmNnZyNdYSh9Il1nRiF8cyE7WkkrTGgkdC5zQmEyKE1Ga0BHY0FzRGhpTjovYSFseGksInx3S05pazZDRDlzM19bUzoiZWNuJVMpN01He2hVUmdzWVZCIX4qZFRua0FPV1ojeksifiRXJE5oJGxnX0x9fj5vbD4wM1FmajYifDk2anM+dSJGaFRMPklDLCRVRHxlajdhMkhJZEZk'@;
put 'WDlrZkc3PG5bc3p5L31FZFM2MVh0QWJZfFFLSiFrcGwqQU5ddmh1ZCxQPkJ4eTQxXzVHfi9LYmRIeXNXWn1bSU9jSl9rRWk1JEtiREhqWDtUOlFhSCxCV0l3bH5beUxDdSYiVEhyYDd3WHxBS2xpak5JPzI+RH1kPSRLU3lOTyV8Yi5JKD50flFpTn5+Pio/VlZ0NTFBb3k9JG9kNyZtUE5yK3Vd'@;
put 'YXowQUlSbFlifF9YUHZNd3M5XSM5SiZhKEwmcnRvcj4lbyJLaEJdMUYvOkU5emlgYCl+Y3UjfURHa0J8QVh5cn51ZldBYkhlLDcsTntoZXwxeEkoakMrUil6a3guUWJ3b0xHT2pSV2U1eFV8ejU3ZkJaKmg2fSxBWE9EOixhPlkkNWxCSWxZX2UlbGEsZHM+T1RVNlZaKThFTGZBeU1FWlhEdTly'@;
put 'REdweXlSSiJJbHJERSVeOzAlRldBcEVDLipWSV0sbmo0KzVXNi4sI2I7Rih8WjRQPzFkQUNYLztYdHhefER6Q0NFOl8wQTVASVRJbmNtWGo6NVhNOy5EM3RZNEhQJUxMTzcsTSguP0FGNEE8LzI+KmZjJTVJTik1Ri5MVE54S3ExcDBGdGM0dTIzX2hFZWssaG9JLmA5Q1tyfCkyTCZfb2ZFUlQ6'@;
put 'RndFY3Z2OG1ETmg3MVVxNmksQ312MW0hbWFsfj1HXiYwajVYSClsS2V6KSl+Nld1bD88OD5+XlROfG1WIT85RGssP1FIP2xpLkBMUjs/ZH5iVVhfRDV+bEpEaWUhJGE9X34lWlB+NGw4YDhQdGF+WTl0eCs5RSQhNmUydSMzXSlXRThIZFBrLjo+TyQ3cnAqNHJsR2teV0YsX3JFKnIvQ15RfX5P'@;
put 'W0pfK3J9KkYmUztqOj9ASyo0YiM4XkhKUiZUWlFAQEh0VXVJUjRUJUlqTjJpTHdmZ0VBT3Q4fkwrOHsmLEBSSFt0U0wxSGFqJFs2RlJTajBFMH03ZTsmODVhUTh6RWlQTGZTLFYrdGZELltrfGQ2eD4pTV0xNE8yR1c7PXRvRnU1ZUpHL2UoWzVMcXRTJmE5QiR2a2h9QFpHbXVQLFBQbHxqQ0Am'@;
put 'VCRueiVaSklGNyZCOFpoQyxJbW56XT4xfE1LenBSUWBOaSkiVEBAbSY/fDNiISswNz5OaSR7LkNqfHFOfiY2YiREaGNGdmRtY3NGcVU5fHJnQjZHO3RFPD1+InBSZ2lOOHpnZkJbano4aVpecU5zejwmejYsaGs2aSIvOUdOd0UvcnZrRVRkZHhJYytHQXE1Uz9SUTd0MndtLixFWFgrYThfRnlA'@;
put 'Jk5ldTFmRGxueEZVRGQ9e0poTkRyXSkjQT0+UXhiWDFqc11RKDluOkoxOl5bPU01KTFPKl85JE4pK2ErP1EoNm4zVFhxe2FgTT92fWx7QH53cFYpaz1nK2VeXlclPmhocyFZanM2dTxNPi9uVCMucWZJT0ZsfStyLHpuPnt7JmI6T11sez8yP2h5JC9acnhtWlErTyJEc1tafHJCRzVMfkwkfE5T'@;
put 'RWBIaUUpOz9udDouTSpJSSlXM1VsPmpLeCEkflUla3xYMUldSU9zfXRMZkddV1lgUGFNWU4wQSJjOm4+RU1KWUEieWo3cj5idUA4M0F0Z1Y2JCVaPzVEMkhrXnElL31tTEROVjYlUTNjZng0Z0RKTHZXKjUvMSVtazNEI2JMI2o9JkJdWU84elttQ08oQVRrUkAyIT99KE0pJDs+dVhMdHtCa0Uv'@;
put 'fXM1KG55UkxTWjJ0bytaZFJYe3khWlFMfCl1dVc/V1pqIiNgdHVmMkgjTHx6SCVedlRwSn1tZ1s6djo0S3w0TnRRPXRNPD5lZWR9SEFgJil0aEwsT091MHNxUlZfVzZuMlRwK315akIoUEM1LnQvQTNoXyNaVGtbWkppJFd+Kn5TUWBPTmRpRGEqOyVzL0RpeUw5aFleWSEyKGwwYjY4Zy5bRlsp'@;
put 'PkNpRiVaMm16LnEwJS8kUDYkKWdFNnclQjl1ajp7JlJvaVFqZyk+fUE1Z2dYKHArUixvKy81fXNqQU9laE5UeipnIlJHaCNmUTpuKShaV25NSiZ0YSkqeV87M1JNQnA+ajpgRDVvNCEyeWhDLzA7X3ZhITRkMF5VK09jPzR9WCxyTUF7TFchTWBXI0BbWEtgb3BIKj1KfTdrfltRcT5LaWlaL0RH'@;
put 'aVU0Q016cmE0MnhMIi9PODV9LlZHTU0oY1VRVH4uPzomLltfUXBEWlJdc3duZFpbTFs9cXFeSUYxOitPaT41V1VXX1V0d0pzIUFBWiM6dEVwei58MjdrOFNSVUIyeF9paFRxUlpiMCFzdU1zLjFbSzNodCo0ZFNUfTFEXlpaYjZbOlFHVGNTQEF4QWB5ckJ6clBoZUdDR19DNXljSXQuSGxTLkJz'@;
put 'JmI2YmxpRzNRZEMpdXIjWHxYLzpRKC5kVV9YekJBNE8sfDEyUnNGKyVZU3NlfllVanlkRGthMmAveHJdNDFHSG1mblJFPyl0VGpHYCkkcnVdVEBNZzlaRkgofSp9SlI6WXwoTXJnUXNndChjNUFRRn1zQEpIPz4rWWpKdyFjOjtdMEQ/PmhxTE18bUgqM35xRH5jR1pjRE5mImV+dWUxJXB3Z21A'@;
put 'THxuLlYjKkBJekF+Pld6dF9yV3dYJXNWQnBzVD9NcWY8JGJtSCpAZkFhe0xxI19NMFZ6RDQ7Y3tAb0pPeW1TOEUlfDtAYCZrWFpSeERndCZ+I0JUbkFBUCk4PjRsWT9+ZXMleGR+TDU/XUAkeiRjZ0VmT3hpbHhmdmhKRUEuPCxoYEIzRS5hS1lpYG02MkF2RFFReWF0WllTSFJaSHZ2bHguTHN1'@;
put 'dEJBQUFBQUFCdCxMTWZuTEJuQSpjP3J4Z3FUfGZDJkIiYFJLNnNjckQiTT4iWnpAUGRxcVRFYC5SUklSWy5NLFM0bS4jdDd2XnBkeiRkQGw1eFUrMXQ/XmVPU3FXeCgzXlFEcXVaMCNKKUloXmIsYDxBPiReKU92VXgjSSNzTTQzNjJ+RS5qPzgzZiZrMUF4Wkk3SX5xZl1sKGp3KH0lZUV8Qz0v'@;
put 'MDoxWH04I1tJWXBbbUAzKmUiLHd8PCsxeyIwWUcjX2BbLEpyUntXI0pqPXQkS08iPHMqIXNTJUVjXSV7QG5yMnw/bUhYJjh1flFyb21veGVqMFlOZXJOP3JfOlUwRz98WnVZR01xe24qOnkrWyljbjVoTjxAVy4wTzMrV2dOOGtVPl1hKnVBKGtVZUlYMktoeylrdk8+aCN0c1lMVDlea21tT3Bx'@;
put 'XWwmR3A8eWRdMipJSVM8Szl5NSQ1eHV8XTYrfjYvbVErSzg9Tjs0eG5AO3AlSm4od0wybCwuK24vM1Jffj1ZJndbdS9QQWBDfC5JXnlQensmdjd8SyFVISY6VUdaOX0oKFd2YVZlcDIkZURMVXssUX1zc3FqTygsZ3dfUGZ4OyZPK0lCTjtQfD06MjNvZiUuRzxiP0YzPnNXZGdKZXQ6Q2pnIXRd'@;
put 'bTpyfi5FVGxSYnAxLkF+Lih0JiMuXSpNeU9AZDVFY10sYnxaUlRzTip6MmRQV0JraX5JNlVzKHFuQUBLUjZ1dFlJcGtxWFRtVSNES3pdcUJsSj9YRVdYYy9gUUVNWG5KXVgqdFRlXWVyLnVAKyY+cHwrRzJWSX5YQHx7SG13QnlJJDE8JDIsX3xtQGlFTXA2SD5WaXZZLDMwMUc4L0xvckY4O1pp'@;
put 'PnNaVDkyZCo2Qm81XlRIIUZiIkZ3RlYlTEBrOEpvRTFNMWVKI01SdXtEMDteNmQ1SDludy99T09oNUE8bl82aWRdVVhpMylZJWhTakBQfiE0VSFGRGAjO11fLEZYVTs9fEA0M354O3ZxKjs+ZSE7fHgpTm4qdTpybD1CcXhPanJHL25yQClrViZLPzBvOGMqLG5+fT1gNXFVaF55UEFGcixFVXhj'@;
put 'PT1We3hzamJNbUYwN1lXemYmeG1yLiRKN1ApXj9WL2JTeyZrUlhLNG86ZDZeS1d+L10zdj0hOmUlTExrZWtQQUY5WyR4PmRTTUdZITYibldIMWU/akQ8b3NqcDo+MVs7YW17V18hYTJePXYwUlF+d2pBKXNmL24jL2hDQU9QWVc4P21vTUBQUmdGWV9VaWI/ZGZVZDlzI0w/MCFJL1Q+WitMaj8r'@;
put 'QlFSYVNLYzlmUX0mQjE0aEhiPCprfTMoM3k7ZTc9UyNCeWxCbGteLkJhS1VGZm1AVFoldGlben4zfG4uM2UySSs5WyM/fClVSlI4fnlGeER7SmVuNjQvZT4pJkJAW2J5Ul5kW0xUZVcjUlp5JEcmUCwvWGhXUzl3VjRRPUl+XSNAfUkrRXVYWnBUQH5uRDpacUdlLnxpbF9qSWR5bzcjNj93dVFk'@;
put 'QkUlIShke3N6bj1PUXxxQFJ3SFRQfnc1bmYpTjlhI1pbUXw6bUNtJHVMLmokcXpROTVzSkBXMyFAdn1CQVlpKDYyfEtlVm5RciJ7cHVDYHl9a0s9XmN+X100YzVdfjdPTDwyOWJQYCtvUkBnIitYUW1bPW19PUs4ZmQoN3owOnR9VV52a0w9MXNwcEAsaFRAcFpVSCwlZ3xbVSxkRUUqTFFhez1H'@;
put 'dyNLLFlgcWBPeXsyWGw9PysjYGFac1J5bTpSTGJRNGAqOl5iUGRmTVBkInJIP3N+WiYmPXBpbl9iNnFkRFhhTFFbbjsuYW58YFBjOHhUMGh2QkRORCUrYmE5VFVLO0ExdFtgOH5iVSVkU2w0XWQ/c0t3c1ZZJC5ZTCZvSXRPWSl+MHh0Nzd8JlZ+fWhPJDpOfnVnJFJvfls1NjIlclsodVY3fj80'@;
put 'SEs5NH1ySzQ4Zlk7OXZnSGcmb04hMXlDYGF8VDY2Kntmc2wzYlpofV1YRkMpWyM8XldGN05lK3EyVHJwUk9AfUQiZ3pdY3I/dDRpZjZkVlQ9MCY7JWUuUT5PfCh+KD5wV0xYV0Rja21bTnU9XjZGOillU0AzWS9ua0RML3J4R3l4Q3ZoViQ5RTI/JlImcyt4LkhgQD0xVilCQ2s4MkdmXmJienwj'@;
put 'WlE8e3o5aWw0QEJ1RFp3ajBEQzlCfXpVJDN9JHVqMylVJnwyTyR5Wz4kQU4lSzgmJXAkRzBKMUV4MVpZeXx+fUcjbkpyW1NKYjVzRClHPE5kOylNOEB6bFZXTEpXfCVaJmlxeEJ1JntbNGZRMXNbSU1eIjBuMlJLN34uaXJCL08+WXc/LF40WDpHV0E1YGpCJkgoN3Y9eiQ/fW0jXT5aMlpwMlUu'@;
put 'cnQ9P1VETVNQVFdgI2pGJVZCM1FbNFY9SlpReUo/TUxDdHJ+VDZvY0NXXzw/RihHW31OU097ekRUXkx2RDxPWkM4dkolbVtAM2dELHY0MEZPK2p8Vm1dSi4+O0l0fE92PXR5UVRQbl1UKUprekJHZy4kYSYoUVt+bl9YMipobTkyLD8qUU5UJVlOPHspak8+ZWNjbTJrfTs7amJ3fk5gQV9CIXpd'@;
put 'RnJfcmFVc0tlczhDLlFhdFtHbnJld1hrW11QKXQ7blNBVmZ9JlRxaEAmTGFmOzdSPzxCQEk8c3RsQHlfaVYmRlBnKj1HbGBncC8jWWtXcHhuVXAscmJKfD5sazxybH5LIyFZO3BOKmRNTmJweyhCLHB9d043dzd7SkV1XkxuezRnOnkqM1ptX29qUXsjfm5AaFVsVmJ8MVE+Xm85W3hdJT1JX0cx'@;
put 'PXwrSl0yOFgrZGRTaGh7XTcjZ3BIOWcxP2FWRTtFMmlydmtqM0soX35wW2oxaFQ1QFhmYD0zbWklIzZLNHx6fSVQT09Ue0V0JE11YWlILnNwR3d9OldKPjxgamF9N2V9JDsqY15eaWZnVmxsVEJRIlRTKkpdPlU4ayZEOXw1a3dzfWZ4NnpAUWx4cWsiIWE0YH5AKURLZS9UXVV9cnpXKD11cDAl'@;
put 'YS5ZRjEsOmZDJk8/W1gxfT4oanZDZT8xKSopb0VESixsUG49djxsLHNmczVifnNJOnx0Z2lUVntaOTxed2ghYWg9N1FpNVRXbE9WOSk0YFNHflold3JyfUJ7amhNVSlkSXklPCE9Yz5xVE9+bE4oJj40UyE7VDwkeEUqbi9hQiI2ZmE8b3B9RWVmKVYmQGlSLFVDdD1dKDs2MD9Lai41YEskcjxf'@;
put 'R3JKK1BWQGImQlA7OiMmWVNXLn59X3NwTVN6MmZwa1FDU190YGJFXVVTZClsbmhKTURMYD04e3xyaSNAUj1zP0JpezJwb0xwWGBYe1BBRjdkOD15dk4xT1VhP3kwQlppMiJzI2RJRDB7aCNycUc0TDEzYHt4XSRQOlU/KCNXfigjZGZaI1tdQXlfLk1NJXMlQV5+THhfMnpzbFROemIyK2NsQCxZ'@;
put 'fmZ0TSJkRyMrL0xScyg0RUFWQzQsdlhhZnVFfSV1MmdhM0t9KlYlbjFCeHEuckNPdSxsaSErVGxLdnh8OX5HZnRxfTwlPlomQ0lQfS9UbnF0MHtOQT80bTtUPzUyPWJwVyhwa2AkVnlSIXdQTFpZfj9UVzRHbzJjTzlkJU8oTF44TFZqaVpKNl1OXiRdQiE0UClSfDxZRHJEcWg2JnBxKixJMn4q'@;
put 'UihbKFA9UztLOHtZemxnNX5bb1NvcXR4Y0lpaTJEMj05fEpXPm1aLE94PilvQy9HcjlUTTBFRT1XWT9UW0BsVEA9PiVibnFvJXlleVIrcU06eS5SQjAwMilFXTY/elJ3Tn0lKDpOIT16QzoweUk1REB4SCRlSW90S0NPTTVVeWdmIiNHcTErYitbflNxYl8kZEVtLHxvMnxweyN2QSE3YSkzOm47'@;
put 'XyoyUVpneFlfVVdienh8R2IhOCNebjN3MEZJfE1KY0ZjYV9mfSUzTihPITxeTUlfI1pmfU1qS2h+RCJnPDZwJj9ocXJbblBMRnk6fWNdcmgoZC9AeHJ0Z196U1B6PGw4cX1VaFJLRCE/eXgkWz1kanhGSTNtIypeUztuemYhITMyRzswRS9RRjBSb24oU3I/RFRpc0h5L3c0dl1MS2N4Ml1wez4p'@;
put 'XVhETDpbJUwsNlAxc0tLZEdQYHAyJkUhc3YwUSF5ZDpZXyR8ezpHUTQzbTgvUlZQWlA9N2g+OnJnV3dvekNDI0t4OF9USCU0cTYjPXF5b0JhK3IzODpuMzxXKU9qSnNeVmQ2WWpPdFVsM0krVSgyKlUlfipYKnA1KXgxbFZmNyE8UzgwZU0rPmBJRCRURWlFMVc9bXZMSmN9dGsoemVmIS5dbT4j'@;
put 'PlBYP2NEb3lrOEhaUipBMDxbU0lvaVUoQEE9UE5LXyI+RGFYPTlVWk9nXWZIW0RjeDZWWlkua1o5M0JYe0t+YFlyWWwhbT9JMldlUFF0fTZ5KmZaWUYxcCVwKigueHlyIVFRSFhDOEFwdkFEdUtNL2U4N2JufVJ7JkJxbSpCSUVeVGN0eFJwL2I3Pmh+cTJEYjtVJUl8dn5AbHA4LEMjfDs/UClB'@;
put 'dDh+OX5tTEJGbChBTDpdQSJ6Si9TKTBbIVR+MCJCe3NxUFI7MU08fElnNHs0JS5icHljUkw3dFN7bnBraTZSK1JuTF87Z098cX1ScUpLak1MdUsxfmFTdFthTEZCLlJXPjVaSUJuOCh8M3R7bj1mZEU9LlFlTHx6JGspTkVJciY0aW5JZ1JII3VkQndEYl4vbltdV31WLD4xcXFmUmw0TTt5b3xy'@;
put 'S0ZMZm1UYGJYbDFBRy8jaHpLbW8zNl5YMlpgPltRaGt6UkNxK2RrXSt7L2RCV29ZX01ZWk9UPChBJXgmdU9eOyR0dT1RJSlzcnlefU0vMUR6S0A7RHJ5dCw+PWp8Lz1nSFY5NXYrQyp3OjwpNyZkTGBKQ3RvSFJZcnExW25DN1Foe1NNMm9uX0dgWVdgRUE4T35ac2VfRXlHaGJxaDdFQldFLn0u'@;
put 'VmN+I15oM3xrTDpwNFk5SzA7aCQkaSU+OXtUdV8xZ3UmTkJFLD0kN0FBcUhCPGRiSzlUUTlLT1VUOH5WcWwzaih5R3dXa19QV3piaCpMJiVWZ0Q8VCs+JVcydWdZT103T3Jnck9BfSFse3JiP213cE1GUl1MOURbKEFEQnRUIT1Ab2F4MXk7c0smeVNVOj06emNDJSNTYlI2L2YvV1tWWzkhTEsr'@;
put 'VFhieXBZP3lwKl1pay5wNUNZZSI7bTEkOHpNOyRrby5eQ0Y8c1NGM3NsUmEpUk8rfXlJSU4+aXkwV0xUdkYqK1IoRzV1JFlvUUA8OylLOHREb014OnwoYyhhSXhdJFFjNU1dI1JeM2VCTkJZa2RTMj8jIVdkNyZCI159az9IQyRZc2tKOEVrdD1XIVNINFFATHdhcTlJUylKbWdsZzhxanhrR1Y7'@;
put 'VVNgUCp1M3kzTmhSXW9wWixXQnc/WjROTUBpdnV3JFYwbHAjOHVxVEsoVFM/cmFbU3JePERJTyZyMntxZVEqSSI+NFk5VXJoKF9dbX47OTZ8fSh1QF5FInoxZV5idzo2VmMkQiRMbWg8XVlydmtdJTpOdGdndipddztILE1eZGhSRnswRFZmV0tvIVtWNypTd00uXyZOcUYwS1EjKTJxQnMxS15d'@;
put 'Wi5pdnR7NiQse0lHQ0BJcl11QnteYChqTmR9W2orPiRKR2RSaDEkaXBQKz5hLDo4UU47L3RxcE1vOEBRenore1c4I3suK105Mnp+Jis7RDtkcTg/UVtdJHM5X2JKKDVjOzw3cE0sbjhDaGE1fUBpWTtNTno+IShVX2toWyooMjFhN11wJEpxVHFYU1ttOntWTU9JI3tiY3lie29WKm5ULjc0QzMk'@;
put 'RmtFYyVaQ29baihkUXFzN2dVKVFbTEpaM2pAeGZQI2hFciQ/OHltI3pRJGVCam1IRXU8LjZ3bSVIZS5ISVhUY1JwbWFNR19pJiozcyFXWF1ZQls6NWImdX4qSkhhM1IlKFImck4ubk1aKzR9JFsyPStDcE9eL3orJVt6e2EhMH1HOSRgMVZgeXk4TVlGITk8dzo2ZU15fUp6YWReTTdxcSt1eGQi'@;
put 'VSQ0bkpZXV9aVncxfkZMR1tMW2NOQnk6blMqPntuOiEhKUFLeCt8MTRxfCsjKFg+NDhIKDR1YlNyXzkuL24wNTVkcHZuXTNnNnYmWm1DRWxJTVF4cWolTi5CSEZzZTA7LHRIPyFvITtnO1lNLykrVl59b0hsPiVgeEJvfCw0K18hMD5YJWJ0WEgsbC9EflV2SHlxPkApKEtnbCxsUzVoXXV5ODR8'@;
put 'M3tNRC5Gam9qdmdbJSRZNDgvVUEybn49MF8yLER9X3Y6PmdzYEQ4UmU/WzMzI0pPU2ZNZHtHc0xUOGhMTU4rNmEjNnBaZzdJa1JfKVJscHNfI1R9PnI6Z3NsNGlfLEpIYUlUZUI3I2s4Y3NfRU4qeTZ0emhJS00zdCw9S1dJSDFKNm9jQjZlK1FqRXY1QTxUPlQxbXJuMXBfeHJPakVWL2UjOE8j'@;
put 'dFErQG4iNV1dLyU+ciZuR0VTVWhnVVRVfU9nIyNbN3ZjeDYhI215KGdyMjFpSHcudFV7WW5IZXZpMDMiN1JwYUJwOTEmOj8qUlNvcno5SCxULGQ1K1khYGo7X1A7UjNdUGpaYFt6YHQ1L1g+eEdgZGVXXjkwQCJCfVt8My47OUloU21JdiovfFNVNUg2Q2JANW4rMio0fks9IUJtOWslOVorSGp5'@;
put 'cTREdzsoZmNUVmNtbzhXVmooczQqL2BZP2hvSz5NRkUrfCV0VjgpRit5RXJPYCRGIn1iWXQibigoQTNTcnE9dys/eU09UUtlSS9wUG06bywkW0U1bkc9cjRqfT5TTE1lVD19bHFaeE9gMHxYTiR4WW1AZG9RVldjLy9vK1VoSCxobigjVzUjIzxrRz1eMn5zVWhlO18xd0tbPzQhSTBpUWZmbDcl'@;
put 'YzVQNmAjYEpDJkF5JlRecFVMa3RTWSxEWFUxbj92akt0UHcrIT5pW0V7TEhiKnQoKGFpPTBNYWgzUTAmez5rUVhpLj5vOyNtNSUlJHE1LjBBeW9+djYvNX1ycFJPND4zMXNBJD1dQXVjYWtUM20xMihFUjZvVC5lUHJeO2pETU4vRWhZbl5IKzlDZkRBSXNaI3w1JT5fKzFRUytzTVJZTD0zd1o9'@;
put 'Mm9mTGdFUSs0W0tnK0x2Wi5EXndxOlhEKHdmNDJ0UWc4MDVYaVhCN09pLCpafXAzflkrZDolY2cuOnU6KkBVIj1GYzBBSWpiSTpMdHJ7UkIkPSZtNF5vYVVRY2dLPmt+P1goemNvPXpyYkZgSDFZODJ8JWtGcSRNY3E7XWd8TSU/eDRxNU9ULzNzLntNdT1fR3RoQGAlKUoyUiNMPmNqbnd3R3kk'@;
put 'RyxUJmIzbENaYSlqU1M+SSNRJXJGSm5EcFglZjJzQSJZMjUsLl9VR292RH1jMGFfOzhOWF15UnM+Nll8SE18an5XbHAsamxzNzp5UjswfkhiMV0jW2s+VHY+aFp8Wz46R3VQPWI+Wzd4dy4pNSV2IW05fCooIVRFMEZjXTdeSz9PbDNUZURSJElqcyFoOGxyZVA+UVBWY009Mi8vIys+MGVybUBZ'@;
put 'eVo7Tm9mKUtgbCVob1l2OGlwaHhPJCg3dH4lXSpqbjNedGdMS1ghfExjUldVTDx7NVpRQTg7XjNbWHlTZmUkI2phK3BLLEMuV3JTPmM5N3oyei8xazozZmFKfSkvYCYlPkRnKF9XWVhiVVdSKntJNy8lJllOT3AiRXJ+KmhjMyhXO3pwZz52MWJtZkBATTd3M1Uje301Li5xdXB+aVpvcSwwRD9l'@;
put 'c1NBX3hZci57JWBUZyliczgmVT9pKiFbSUw+e0VyfGB0Ji8wTVdffFt7ezdmZ0VIQHd1VT9edWZCa2lSaz5PbHxSKz1zWShRP1h8RDEqZ2JbWHdSciEsOXQiTytPbS9TX0VDcGkjUyhePld7RTtXWzdfKD58amgvciFjdm5gRF1AdiVyW15KMWMsNDRSXTE9TWFwfU1DXSghbT9wSl8uaX4leigp'@;
put 'LDMmPlZtZC4oXTIqa3ZMb1BpRjEwK2FjNjA7dmhnYz4sOkhGOEIib3crT192JV1mfDZ2M3QmZGRjO2R2aDRkJF9raDZLUzpqKnBTM0hEVm1XdWNIbz8qIj4pW1N0VmcoNFdETnNlWnFqWDVqazllSiFwJUN5eS8yL09ZUVYxR0hpd2hdR2svenZTcTptKFt5Lig0ZlVyUyM2Mkt5JUhbaTYzczNl'@;
put 'cnJJM2BwclFHcDl3KFpePFpSR3BPPVc6eVIsK0lFZzM7MW4qOVEsWGVzSnlLJmdNfiVDTTk4OjZ8JnRzfDQ4bSpkVmdeOE4mW1l6USpaX3dZTmQ9VFtbLFJKRjtJfEhkd3dfYD42RyFeMERrYSVJPUpEInZqP0Z7b1RkbihUOy5wRmx1LkNFfGMwfF5gKXVbYEgkfShiVkM3bFRkekRSPWk9Llln'@;
put 'PnZnTC9BUy8xRTVKS212S2JqcDAkSTlmVmtec2VlS2QzR1IwRjB7Rl4iR0tHJmtaQW16ZHdxb1RqXUZqeSwwXnBCKFVJPT4/a0NbWjBhMihgfVs2NGpnQTNycDBjQzR+fHlTcyEkLmchdjVgISYzaVFAVFt4dFp+cCRaVUhUT3dMbFJjZFVOOTpJQD9KX3V6SDVxUGkzUEFWSyxDXyR7MSwqMnNV'@;
put 'TGRjajN4bihReSRTXWdMeGlLZ0s8ZmY6Nl85TEVlV3E5XztVLFt7X2wuWmY5PFpsR1pRflh8UTp6dSVkL248KCZLezNhWXlKSG9iK0lOOT80Rn1xTUNHP015P2BJQWtEJEtse1QkUCFVLEFpPXBxdCZeMkhoRTVXWlVeNClEbmZsL3RgPjgjNV0mUyZrUHU8Y11yOT5YRUlBSHRHd1QyWnV+dSk1'@;
put 'SHlCblQyXkNIdll2b3w2KzosbSMsOz1TPiMoWylgbVJGOFlGfk41JS9bPDtfRSVUdUN8JTFiVWVoMmRzenpDdSlCNm1hWU5CdmA1dyUkKHdIczEwTWAkKSkxPGoxXTQ8P2dxVD1NWHY+WENoeVhAKDteeTxuS3c/TmshW0V8TFdCIXpDJn4vS044UktSYH0vaXJPWk9sUTx5PE1sSzwuUFh9TDRH'@;
put 'OUAiKC5yVTFiRVFCejNZYU4rJCtZTVM8JGskP0hES2VRfipWcElLWCpGMDtEdU91dkdRUTMsUmRdVDIzWWM8Q187KD0ye2JFaT53IXQwJk9FZnpdTkJ+LzAveygoOjM5OklHaCV5VTouSiklZzQ9KTpday42aUN8MnN1ZF17VThBbS9mfTVOZzs3Rn0kcXdoTHgwNGRycyszcmt7O2BySFVNeHR5'@;
put 'YnpgcS97dGdnfXZAdzpvKSw8aSZxcEkyM0Y8IWlvOT88T0UzTU10QzVgYk1fQzEvU3JML005WnEvZ3NSaiY0RSpQdCx+Yj0lcTxhXXY1NzR9diMiWWNxcihxR1AkLHNxTGI+ImZPdTtjSSNIWHI4d2d7cVd1dkZuSDB+cV5ZIyVEZFtmaCx3fil2b2ZZNkdLITptVHhCMlN5IXdjL29OUURGKS83'@;
put 'dnssblgufjNvJV9YfFN2c1RkZU54JlJ+aFc8R1tFcl1ea2xXNXZvSkVPIVFyTXVqKGAyfW16aU08bkxUPH1mOEcoSHNNeS4keHtFekt1W2AuVUNsfHpTa3t8cyQqSUd4RjltZFtHNk1dayVbbSp4ZzA9JnY3Pk04NXVOcUdvfWlSfnYzYVBCKV1aVUx5MXJTanV7Yl1Ofl9RWDZnfmpXIyU+Imx9'@;
put 'RUhyd3I1cXZyNTA6Ym5dOjBIKCI2YGwrd0csbDp7enBQfTwzOTwyUkdie2hWL24hez00OSUkLmQ9JFVgVGhJe3wrN1VIYS4lQTVeZGQlYm57OU83OFZmdU56VEZjUk4hNFZAUjQ0eEcyZF1VMD9JYzxnKDYpdC58bk5LXjZDLE5uZjJYZS8/PFJWMn1yQzpNKVJNPkV3RWFCX1dgZWNrbk08b0JN'@;
put 'UiZQdmRsYGQpM1hMOGZteTYhciJVWSk1OHxCXylRcGAmJCFlZix7RltDbzBwdSRab3ZKNkkrKlZ9c2wsKnhtQzkzQnUrOV43ZiMxJCteXiliN2pXTnwmSVNaTlRgfEtMZ0tjOXksY1NiRldUJDorN2RaeGojNWUzZjIqQyhzYyhRdCxOMU0jay8kUDBjcSQjc2QyNn5qP0dmKExDRFJwPVRgI1dA'@;
put 'PkVdcipETEQ7N1tHV2tNV2xLTG85U2lRW2llTnIue1crajw0b0UlYDIuIVI9M2hlR0kiTE9OZ346IihhcmlwVW81ZSI1Q2NRR1djaixWKjRpPUcmUnZ6RzVAKj5kYCpZM0pRRD1VZCtFRHU8RCp7TjxySF8kQWQzWX1XZ00yXj5CY0RBbUtsY28sLElbMShNSGV3OklmSjpYTSVrejd7V2RWRTpz'@;
put 'QFdwYn5RIS9ZJip0e2tBM0k8QCxRMWNgfUQmQz1mYENWZ0ZrdWBKZi8oVClbWlNGKTUrInsien5QeGxxRCtjR0xwa04vOmVzN3xZWGpuSmtMNHtJK2orP2hJPSZzb0ZHIVldVCM3OWNbIyx1ZlFMZW5zJDZwdUlfQFJiR3E4JDRZVERveHh8IWIyU0BTNFsifTMwezg6Y01acn00eHRjdEhHYDJR'@;
put 'N2dCfGNzSHdgRUs/azIxXUVmbWp9a2JXN3ksJWxrNHY1Ii5tVFRYNUtXPzN8RFAhOE0pW0UqXXt1PnN9KGw5I3g9PXNOUGZlbU9JZiw7YWQ8d0NwaSI3Tk1JK3Moey4vI3lPQnxBZm5pVmxTWmt5NjxHTmBedEROSCxSIUhiXWhyd05HWExoIWREZzY2VUEoLkwvKEs4JEF1TFF+clg1YCF7N2pU'@;
put 'KiN2KXA4dDE8PFJfLlhic2RpL1RlaHFlcVtOJmdOJWJ1elVGfTk6eipCPTJRTVthO0VkOUJZe2l7ZXZJOCFuWlNQfXlfaFJ2ISl2UWdbK1thJHRORCtKITp1P2hJV2s9VSlsQmtxPi9FZnN3YStGQEB6ZHVML0UkbTlDO0k6M0p7SEckM3d0ZTxwckBrOFNtbXxLbzg5a2MibTFmXjZdUXMlJkdn'@;
put 'ayN7ZC41JVI6aGB7KGA5NTJRJERRPy9iZjcxUD1gRyUvX0JeTEZhZjdbLHtQfCpJRy5GJTxtcHMiJiJ5M19yIV02TUJoIXBBX11DfVBfWCksRXpafm1RPyNsLmU0aVkmKnk2aGhDJDhhRT1JdFAuPzsxNDdbaEFFTC41aHBLP0BTckQ3IXBIK2NlbDo9KCxoIV9ReXp4dl4sI317QnpAdG07bXNI'@;
put 'MXRrPmpzTDN6KGNiIlNHPnBuZyZ+cW04SFZdSyVfYnVIa0xdKkRHLFNYNlVNVjtjRGBARnJsfWkxcC5EXUk+Q2ZvZDNuS0ZmQmVNMGVLdFVjKnt7QF8scF5QcHxpZ0pSV2AsdHtaJFtDKTBGMVpbeDVdNE14WyYvQzl5eU13Z1ppIlUrbDtPU2YxRGl4PFl5OyNkW1piRyEvTHVXelJ4MiJ8anJn'@;
put 'cywvcGouWmg8ZWlnLjAyYz9CO3RCWU5nXzRBNTlHcSNMcG88S0lFU2NXTztRdyE1S1FYYjBod3E8KHZ3QFYwPTNtKF05VHldMk0rZTw9aHU9QHJfMjVGNioiKkRWbkJjbCJDciVaP1lDakgzfWpDMTZ+TyguYEBPZkhZUWdFJkY8NipHMGZoaXt3bFcuZXhYdnVkLjx5SEtVLD03UzZjeWVkRFZH'@;
put 'eGhLa2pVZiVPV3I4KFpzeDJaNiEvbCIkUjNPfHRTKy9dRiZUOkc7QUdZI3p6YXB5Km1wK25adlBrPDJnVj15aXpVN155KSxVO35JZk56QzVbe3htZSNzI0ZMaXU+cDN7QmtTQ2lVbjNFLklpbjMpeV0xOVtJbiF+JnpDVXRXLHNYMVR2fD4oO3EmU1l5VzQ9KVUmJTlPYkV4ZSNyalpYdjB3M0xm'@;
put 'XzkyPWBCN0NKX0FuVCRyeXpbRy9zQlpQfWApZXg9a0I+aHdfKTBHNnswZmAmQiJ2SGFfNDBvX2ZFeE1iQFdrMyNBYnU/LnFgYi91bTBvdHU8dS9kVn4jPTldbDxMUGBJTnAqcy53Oj1afSs0QCJDTVlKUiN5QSt3JD90RFM+N1FgbkowbTxwT3pJQVtENFttRkQvNTt2dClGUmFhRkg/QmRuaWo5'@;
put 'JU1UOSYyUyMrT01fREQzcXUpTT5DdC8hdTAjfj1ORz95aWdrLzNOWiJQUzo2UEZ1JU5sZFAvMEI2ZnNQdj5ARk9hJFBqdX5Ud3JbWE0pflp5bC9pIio2czchZ2hiYT0wOUs2cD89enZwbkpnXWlEKXtwK1EiXmsrVjBZIUFrWiF2aCgzUD89Tit9el5hMEFHKFFUUVhmd0NGdyZiejNqKjo/XSF0'@;
put 'I2lRc3dFMXJeaSlRbj92ZE9JclYieiF+aHR8ZlQrMV4yNlFJMHlrUX50VzYwTUgxb3NhOkZCWS5VeSlKayFEe1Mqa2ZDRz1eNllyVmc5fHpCRl1mRipFVj1QKU1fbTs0fnlDbjI2NVhWYmA/SDt0NmpxUTR2MjQ8Sih3WDx6fl99Lz1wbkc7VmR2Q1pMaX1XMTlFTTx5IUwkVTwkaG4hVDJqUlZ6'@;
put 'SzZTITYzcC5lQEVEaFMyYmQqUV15Kzh+XXpYUzQxJCQvfjUrYC5oWURvVnJyM1kzci9RW3RTN2EmS09PQ3JhVypsPEJeUiVLL0JhNDw7dzJEMlAqeHZwOVFLY0QzRlI/dGsqOkJkPVtgLE5fPnF8VFlnJktrYmArPlh4O0Bodnp7O3EkSjkpN2RYdCpEak5vSUsjYVJYSm91WlhlTGJaLjspOyI8'@;
put 'cm9tYTBuI0didVl5dFNraFF3cFBRRy88dSxsKmVhWUdHXT5tXWYqIzVJOHt4U3tvYSFkeE8vaUojZWV3clFUX2dAalJbb2MiMVlXOGZoSV9PcDFscnluUSpuZmBMWnZAUTtlSW0iekNLcW1pNnpMX0QsZkZtbkZHe24sP3F5cGJ0bytEcVssWVFNN0dudHV6YTsxRShTdG47JCpqamt4WzVdZDhN'@;
put 'LFdaRmpzQiFjTGxZRix1Rk1+L2soZzZ9fU04eWw/eEp5WG9tUiN0TVZzLlZmUCpxUyhdIXpgdV51I0BaTDUkNGl2NmBDRj8iaCxVWkV8UXtEVHJORVJrRTMzYGY8LCxFUz01SSFAUDghITFtMTpUNiRlXUoqYEROKF5QJVY/fVArIlZ2dExYRkJLImVWNmUjNU5SZHMpKFBQazp4entLek5vPywv'@;
put 'ISRrUzBgODJmbEJRYCo3cW1KdGpRIlo9Okl5NH1yYj4pWHxlT3BnWmI/REUqckl1MyF3Jn0kTS5nblkyWF8/czwzfUA0QHtEd00jUSRlOElUUjRxOSpCK3BNc08lXzM2TWsmMS87YVUlPDxJI3dhM2ReJmM8TlRVOV5nNkxHbmtaXS9wO0BVIURBO0R0ITE8ZV4zbSpmcTdWL0prVkJqa2NjTE4w'@;
put 'Xmt0a28oJmtWRXJ6VXZHS1k8MyNoMWElZ3Apa19hXmkiXnRwRXxOcmYuYV08RyRpQkY7PXZXXy5zLit6QEtFTFFqKF43Zm4sNGRMYH5uMGJvI05tMit7ZDA7V1NOXSNXYncvTG9XZ3ovcn4sUkxKPTBhNzs1MDVQdV4sLzl4JX5IdUdabzljKk1jKzNXX1pvTVl2eDslSzdZb3RrRC5zeFU9ITRx'@;
put 'WUtSRDFQWi85KE9xfm8wYywlMCl8alpLZG1NJXQjbHc3fFBOWnpRejUkbnJPc2QqRFY7ajNqcmFHNiR3QUA7O3U/LnwkLkY0LmhXZH09R3pzbjB9LnBRfWVeXTYrUygzekhLNittJCpdS3B3Z0sxemErQDZuWEU8bzhCYlpHQnsqaHJCeiN6IitldC9yWV59TFVbZyE+MFc+YCp1NGR8cmtoTTRv'@;
put 'ITg2cU8lcytNcmc4KH1wVnQrJWQyPkhsTV9zPEBmZm9Ka20sUlVMM2BKMjBZY3NpMHNFVVN8ey9tVXtLS2VEI2B3bT5BO3RQY0RnK1lhImhyRlhXRHd4VHZzPitmP3xzVndQW0ZTc0hgQ3l1QkRvOlZ4UjhUZEYkSShtTyNbN1EmMzoxUmw3USJPe1k4L0padzxmK2RdKV4qd1pXeVZGV11UU0tK'@;
put 'NzFSIjBjPUdHUH0rUjA2RVdTR2tDTnw8UUY4YzZxSnwkYHpadyxlTEs9T0l7PS9vSEkpaUkjJm8jY2xoOHQ4KGlHaHdlRlkjN0VBUiV7c0AhYmlJaSEmeGgqYjE3cFMhcW8+XWtZfnJ4VChzfUJHeCZqIyMoeD9fIzlqd1JBcF1acnVAWHVPRj5sMnN3RXh6QTZDfkxjXT9dUyVgbjY3JlRdYyp6'@;
put 'X2VCLCUwRF99UXM4RXVMXmY4KTRbWXhDWzR8eCplQyU8PD0lejJEVVNoZHs3NnB6VFJESmxyKWZufGBFYEp9eFF5OlIxd1lJRG5Ka0IqREh3fHg1SUs8Om9gSi8ueGdzY09va0RPJE8qJEw0fTtmZkREQHlwZndFWDp6SHBQbCxmLHtmYTVgal1lUnM+dDFMTDRfd31xT2R+I0MpKWEzb3NGYyUr'@;
put 'eUVDM3g+PGhnO0hINmhZbzZNRkoxNnYqQCl3bnU3WiNTJHNbWW59V1g2eypNfkZQPyt7cVJQW2ZzdDs+ektmaGNlRTZNQEhQXUZdJD1JdlNxJTwsZGdVcmAxYls2WXhXKztDZy48KyYwRllyZWpsJT0oJHdDYUNgcHhpJUw1akBlJVpaKklEP3JzU214flhtamxVaCk0USt1Qk40V3I+SS42Izgz'@;
put 'NFgwNl4lYEdFRnU2ZSovRHVxYXckKUtAb0dNfT07ZHdVZVNAaj8xeDQjcXJxQkk3ckR6KmhCLzd7bDNbXXpoXSs4MS51VGFfYy9CWjBYIkA7Tk1dLmhMaWQxSEB8NCROKVtsQFYjJiE+S2h9UiNKfGFKPEA/LlF5Ljh6YGUvQVBZNCQkfH43cSk3TGFlSVdnVnh+K0FfeEspdy5ETXg2Zjc7OzlT'@;
put 'JCp5YDFiIlpCMmtwYVg0Tzh5KFFrI2gxY1ZfTVtCO18jM3kwL1pNNXdicD9dI0svYj51cjZSNlJJL340OVghfXhhO202eXZGaF1SPiV4QWtjbUU3ISR5L1ZAeDJbVWg/TzVIRXoxV1N7VWNjKzFTM0xgeEx8XiljP0FAKzQ4NF5mZThBam06T1prNyM8JTo4dUJEUj4+XXZ8bzoxPH1mMkxLIzZX'@;
put 'e18saFh7QWVVdzhHS31BaGNnMU9HP0RZemo5V1Y5fmw7OCMvZXh8WXpEI3RobVA8WUgyOzNnO3Jsfl92PVE1XyFaYj51JjJISDtAZHtoPGZ9MDpEclhhRCp8ZXEjWzh3Mj4yW1FVdXQmKVgjYHE4LmlgO1QqPSEpWlc+ZDZIO2R7VyNwTCV0UXdUYWozKWsxWShRJF1gTjloeHs/QVJ6YGtgbT5O'@;
put 'U3Qhe0tWP1txaXZ0VltNP1Z8PE46Jl45OlcwdXhHXmkzQVEuRyltPHFvYT9BV2E0RFVkeWpZSnJaOExTRDxDOClyKnVkKzwka0BoRn5QZkQ7TDpPQ2xTaCR4cCo6Y3RJW1RIVWd2dkJSKn4rdENTVEJDZGVzaWxnekhTaisoPWJ5Z3YkfG1fX01sZHMwIi9WWCRpU1ljN15yOzQiR1ksa3s5MTF9'@;
put 'MUExW1EuQH0rUHZwcVZ5SX5qVWJhVXMwVUoiIVBKNUVrQz02fno1fT1NJFRqZ0Y7NzhuMEMiK3ZjfFlKIStVTCVXN3tqP24pUTRmVik/eHg1fV8vZy4/U0cpMTshdVtIODdMYVJTOjdNbntnNkA/fmxiQ2d9N0MyaHZ7fDR7Snk/JCUkWktxJHxjQHJAW3olJUJRSCkpPWQ4aUh9V3UuaVs0IzFb'@;
put 'XntgJEBJIVY2IyRMOEdTUSQ/RSlsNlFrKS9PSl47UnJEWmkraCMxJEB8QihdY1pyWCIraTpONTVkdmNBRTpAYytpTDk8MFpqflAhIyhtYCs9XnIsYlFUd2ovLlFlTU9WJn5ARzZJdXBiQEwwTFhjZD5gUEpQejB8TCYkUnNzIzh2VDAhYWpvdU54JGBJclNAQmN8aFlzR0xjRVR2YjRuWXZxLzly'@;
put 'dm8lJH1oUHNJTVgmUGtXfU1pOWlDIXhqQ1hqTGFJa11ldFsiQ00+MnhubCtuNn0hdkA5O3RiUjdJXmdgOiY1My8ofSFmNX5GKC9nLF0qS3lYViRLI2pTWHR4UXtPPilBVDJdMXw0c2tRQmJJbkw7WCJxN0hidG9YdnkxUlckWnNMWWEkdnoiKk8uey98TDtkInksfjh0JFclfD0oOyVFVih6Omg9'@;
put 'NjdXbHludkJgajRpb0M8PH4zKzYwI1BaNGB3S3Y1fS9XSVpqMnovKFBTSSJeRnZOX1ZrPjhWblQiR3xpKyxTVj9mbTpOa2tPYy40dCxgbyZpJjxnaCl+YjFXQkcvKVRRajJmaywpMiJgZ19HdEIxRTxtKis2ZmxJeVl9NnQhV24yVWM/PGFpTXRhYk4zb29fNGY3WntvSiErOXt2bW5GWHU/SmUo'@;
put 'UjQqcUIxQCY9aGclcnlDRDNMbVhwdXpZNCkjK3dKe34qXkd3N0xJTVtRQmlyYz4xLmchNn13Nyt7KEsyQmleP3dHTyg/IyxLKkpTNj5dcTdPZjhZcz5dNl5LbjBbJCtYQkVCVyl5RFlfPWtmTF9zVTN2fk4kem53djVrNDNzcXlAdkJuaTYsJihAL3VIVzIiK0U+WGJuMyVdIzFmKWZHJXs3Mm5p'@;
put 'RVI7L1tje1R3S1Y+ZUx5MEh6MkV+cUpRJG1yJE1WKkBRVGw2W3U6Tl90eH0haEdqUiE9JktPIXlDLHo4KnlNY1B2bW9TY2g6LGZ2ZlJdUC9EOzEyV2xMfEZac2Y/YUpDNHNAY1FoRVJtbihyQzAuYUJhR1AmeSpRLihRVSYrYF5iS1U/SWtrJSQlZnpqZl5xbis8WyI1NU5CTTUmSmw5c01qO1p6'@;
put 'KmYoK0NHSDZYcDRyUkpKdTBXQSw6TzxAVldkYjhaY3EsTkdiU204KkNyVnV4QFJka05pRGJ4PV96PE0+RS4paFchK09DQ1skeTQmbipwS1lzZHxKYTBIR2BXITp9b2R4UFZaVX01NiIxNyMqMiwzX01vU1FCK1lOMnFlO18lcUNUdGg8fiZ1SSFAI3t4V048eHw9KUB+QHlnXSJ8UytzUWFJZDlE'@;
put 'NytaSks4Lm55fn5MbGVfI0kjOiF2TVAuez9PXU1McldSJnFFT2p4ckx2Q0RUUGtNLnxwM3svS259RWc/Z145USQjOUB6b3V9Y1VddER9fTt5eywwNXRKY3k9b2g3WSkwO3BBZSE7Jl4jMG5SNzR9SjtnanMsVU5eNF10fEN1cGNRbWBZU0ozJSkxdzQuPk99ZHwhV08rYGh9eTFDRFJ2fHoiKWBa'@;
put 'dC4vM2hSYHA8MENqLFdRfkIyQXlAKjtpUXU/KixsaytnKVpLPEk+Xys0Z08xJXJHc3VRQEMhK0tQakRpVVNBbkdqP1QiaFU7YnxaREhQaTJdOTooYWd6ZFQsVVohfDZpOGxAMEhkRUJxWCtYQHd1SlZ1TmZeank7Nj06aVhpWWMvLywzKUlLTz57Rkt0dEdxSDMoRGRlK3pVdEw8c2pPMkIjN2c7'@;
put 'USgoNyxsRFtdI31kUFNOZGE7ejwoVW0kNCxgMTUqeFdOfUs1NSpeLkM9Nig2UHV9LHYvRlNTYndzaW5fUT5lNTo3Ik5qLDNCQ0BMQDphW11AfkBQUC9EW3Vlcn1Xd2hgSWsyMn5WMHEiNTRaXyI3JVJdcjNERGgwTS47JnZzQHU8XVNCeSE4c3lbUnlKdUU7aDdaSUlHaT9oLDlfZ1FQPGo1dG00'@;
put 'ZTJacGoqMlUqSC9wRmFUfmthKGFLISFKQyQuVkJGcT0jbFtxP3t7clMubV5pZDx7anl1JSZ+Nn5NUnpVMnVAIT5neCJqYUZ2PnVPUHxaWmNOeERPSEAqfiZTITVCcS97azBlJXlANWhAYGd4ISl6MiZvJC9eTWApNShqLCNMJFUhaj4oXlB4R0NZNGw8dSlyNlZNQE43OXhdP2UweEw3Vi5qNnE6'@;
put 'JXQ8SEt9V0M7VzZvQDV9W3RJWVFZIyFmKSovJCk7L0ZpK1NqM2JLQHZsMFYhal0wQn5bTTJgPEt3Z1BqeEBBX0BrVHVfKVp1VFFZIWJ1d2ZCZC46U2FqbH5QRkU2T3U9JH0hcEpkL1k7UlpLdjtyczJkSDVSKUN7S1EwYH03anQmP3wvd1s5KV8rcHxSeVhzS2koST0zOE9jOTdiXjNMWllUdFov'@;
put 'Zl9bc2xXM29Be1pAT1hUM0dbe15mI3JFbD0zbyFXb29gcztfTF8uKn5IOnhydTl6R2xJbVo3XyNTY2c0UTBfM3EjTDxbdUVzWXBnUF4pPj5+RHlSP1A6aV89RXJ5aXlVPT9uVUNWXXEiaGtQXmtUdiJ6NXU+bjZZanBhTiJQemBxaCVIQldRQ3JfeDZgPE15RUFwOGkwKjBRfjtoWWYrQCNgTCln'@;
put 'amdjNixnbiQ0PlYoO1k4MUQ6KiNQTjY4WXFvLHkld1lROTB3ZShUR19DIk5eOVJIQnJMYzwzSVR4XXU4XjpGTHVLOSokTyEoNXpRZGlpPmxzdHFkLG1qan1qXSlwUDN5VFZzODM5LGt8WjAiVygvcDdOeyk/XVRjMjQmbFhbPUI2K1llIXdrNGk0fF80Q2lDdS5JZFJzVHVQL11VRF1xPipbImlX'@;
put 'VX09e3k8ST9rN0FvUmJuNHYjbSs1ZUt2cyo/fD1SeTVqPnl3ZDYhTF44bkN4QTxXYG1oUHVpTFRYPGt3TGYxKC5aaVVxfTB+cFRpZStgeiNsUlNTXm9RW1FYWkl2K0Z2QFEicGgsZkYsVWZZIUd9R3coUS41UGtSZnNyIVQuWysvSCVsLz89aCspW0sweCpZKEY3cTIzc3ooKzFNKHg4Ki54cUxF'@;
put 'ajczRH46Wi4hPjllZEFQIWssPHkqez1HcihPamhhTDtzXTt4bnExIzA2LDR3SFVybGlkdXArU09zb3coK3JMIU4sZXFWb05mXXUwfVVvZTtELEpqTE46NTVibyVzbipxfElBM28uY2hNRFB1VV5rMng4YkEwSWhgaV1nR1pbOlV7c19yNjJDd2Y/NlB5fD1dVFVndUxIOmFNbj1sR1M9JWBiJH1R'@;
put 'Q3VmRjVSJCh1cSxbNlkiUF5PbjNWJHN4N1VFYmlIdEFFZnt4YTMyZUhIM2dIQGthYzNKKiwoNnl7fGJAIT5OUylrcSk/RSVMeUQyWmY/KUcjRlEuJkpjXUJMK3BTMn5sc2ppWjRfUFh9QH46Ukk/cntwZ3IvSlRUNEd5JElWSjxSMTlvQSk/QmI4WHEzc2c1SHFUT2FlVGBEdFFATzpfUVcjRFA/'@;
put 'JXpNRjFzKWBjdzRPaCgsfUR0YHFSQVU9YnZWfjNVVTQ8R2kuQF42UTgiZHZYUyVQN1dlVF1fMW5LUiJYVnArciFbXn0rUiU2bEdrJFdTP0kyfG1NOl1PckhaPUwrWld5ZCN4PmgqdEVrc0lPLz48VmA+Q29gV1lXbF1UTSZKJnF7Y0VTQD9WMGh0UnQrRlVxYE4jfTY1ejp2MlsyUWVnbCJRMD4l'@;
put 'UXxWaT1AOHFYYTFDOnZJSX09VX59d1lkVlVmR2FsOzMuRzRgTDxTeVY1XiQqT3FTX3Q8OHhAJSl+QDpFVkglUnUxZVZJayt4e1RHQzdFNl5aSFVhWT1DWGx3STd8OzFZfDsiV14lbCJCRUZ+YiNweCM4eDs9cFA8V0RsQU40WSssLmZLPVh+MD5aU0lbJC9MWk5oeHtAO2tfTTBoXWUsdFtYYGkj'@;
put 'P25aTktqd004Izp1TjRMW1AuRzcpOE9YISl3LEh3Ijl7O2FTXkEqOmBCXWdlUnIvT0VeTS5OfFJEfCklSjRlWHtDPSoyaHgzNFFGUWBFVV9WJk14aWgpUzdPek4+Yk1zV09qcVllPFpCTHRiMmFdU2I1ckdKdnd5Wk9HUF03JlE4fllUJGw9K3t+K2IuVyZaZUkmPXsvITR8V082M08zcjY2aSly'@;
put 'aTZMWjRxN2QmfVlZVHo7dF8iMF8mQEpUNkxoclU1QktaQU5JbVpmST9WaVM1azYlUi92STElM2paRDg3VmBrQ045P19SZlk5YTIlfWgsI087V2c1UmVCakxhcUM0UXs/fFZYTCVfZHg1b19WR018R0d1Iy81SmJRSi9uTSl2IW50MzxCLm0heCx8IUJlRFp2KjREMzx1Zil5eS9xMkUmbm95KHJa'@;
put 'VXFhSlpUSVVacE5jfGghLF8hYig0M15EbDtYMnlQV15nanJvTzZLLCskZ2crZFZmJSNFc2xYX2g/O3NEXW1ecixpQ05TNFIlJmwhTUUmJX57OWRBd252UWIuKk5EM2hiWDc8VktjbGRTZUM7ZFIsIl9CVWY7fGMkNXBOVWJAR0hganpbZTwybjBdLihIeFZBTDt5MltbXkgvX0FhWk8/SXNfdFc1'@;
put 'Q3drc0JnMj0sKEEhT146TDtCLnlIPDBAOmloKmNfLkN0JSFTV3huYHVjXUwoU0NXUVo+YTkhQyQ/dCtXb21pTlI+PV9oZkl0OyVROjdka3dEKjY/T0Q9WU9haj57IihIX1htMkhZR3U2T3gyQT0oZG9rYmJRSVlufmxWcTdlMTdHdW1QWyx3dGh5VWEiaWZUZSVVXSl9a1hGfllwR0NOUWxgdVJA'@;
put 'V2NDTnY/I2lDTk40ImdxVEZYPHpqQ0R0cSguQVRqQiFNendPI1h4eWhQYyIuZTVQQ1B9czJ6MXVPZWZTQm5ZRkQmLysqUkk1WWFxUksiQWNDOnBpeVcxKUdZNi49LEdYOVJqaURAdF1WV1UsWlF4IU0vRXFULDFJIV4vfHgpWSpRZX02dl8mNDhxZmJJeiQuY2JuNVhiaVNDSF5QXlZdRFI+Z2ZM'@;
put 'SlV1NDIwZDNhKVRFPkc8MnheQyJvWH0/UXEqZDVzO0RJUTRDWz84I11hPSJPYEslfCYsYTt8MWR9bytkVEBLWCk9aDokMXEyN0Jtd1tMWEY7UCU5Ky4+SDF4JVFeRSshNVJ6S3F7RzZ5TDFVYmhQWmZ4YDl4OEtNP2E5PU5qMjg/UDY0PmViSk9OamdZci9yUT82KDgjMko6Il05d35AX3NPbnQs'@;
put 'Z09ke2QiVz4sM3tNREBCWTgrLnEiR2EocnFCallISzt9bjV6Ji80OmhUPFlkQkJhTWMlRSxkUmJCKW8vMEdLL1Z6OXY5dk5sJSszPnUzT3pjYmlobmEzc2IybnxmRXs5JlA5cjVhUCw4Xzd5WUopYmczWVtXcHVoQ2hbbm8+Z3RWPk8oO2MuQmA/aUY+WiQheTg/WTEmYT8kd2A1LiE6elMhYT5I'@;
put 'NnBjfk1KOl03ZVFhPE9iTVp+KV5IXjE4ciQiJUpVJnpgRzBRcjJKNVl2ZmgzJWpEPl5dYVNsIyN8QztQYjJvJnY+RnRSaSNIV2R2QiI8Izhmb2lQdFB6YD81OE9lT31wUmxlLEEpc0tLckx6ciglVy4uKnQrOlEua0lpOVpuQ0IhbDBodnAlXSp8YGc0PCExKj9xTWBeaDZYMHs4fHFVVDtpbHtE'@;
put 'S3dTeX1Ccjh0d11TKj12USpSR1FHT2QrVjhIMVp9XVdIO0hndkQjSDxhQC9IJXhMak9ENDcmNm8pOUxjKiI9SkMxSmFOdElSOl5kYE5PZTpLbmtXcW5VRVRMNWpuLm9McVo7WDpPLzk5I0kuRH5jImBtfGY1VHpDbGcxLkErUnR5eXRxUyYqM2hMUUN7JGs0W0N9VXRTQnVAR3NpQWIpRCkwOWxY'@;
put 'WUdbTjQjVWwjSGZUdWRbTVEkbkh9WHo1bDlZMCshOztVJHM7TWJCR2UkVTZ+RlN1az9KMjkhI1sseDtoImBSPy9mUk1uK1JIeWkocWYrN3Z4NFFqVk96aj1MTX5CUzpdZTlmWEphMllafis9KmtNZmJAVkl7eURndy5Mdi9aNEVUSmZ7eER7VzR2QFhyREZha11AfEtUVnsoWjxJOk0+MVhLXipb'@;
put 'YWEhJSkrRSFQdnJ2TDFBJCRdVyNTVG0wZ1FtIlcibDlqXzpVU3x9Xj9gISlaVjMyYUlxPmJmd3pdXzVVZ2chZyMvcj1geyZOMVh3b2t6XSp2LnFOSzEhKFRBa0lDWl5nMTFxODwlZyJwbD19O1AuXVBLKVtJSTldM3ghQUNVXW1mPyRlSioqU0tWR1Moe09PJlU9Yl1AfVpUPGY9WXhFQHgvOC83'@;
put 'YE18MU8kVVo6JHEmQGJpRkxefWoqS2d8U3tkVkF6OGZHTn1NNUJSZW1qQ2hYIzckQkNaa3w5US5PZ2AkQSpALiFsSjdldXMrVjNhdjwoL0BDZSMkS0JdJUJxSyMyJnlaI1pmR0F3M2J7JTJEa3l9UEhOeHUmcCpKTWc3JEFlKE9zR1UxOFRLRmhwXihrVTp3bGNZVGcjQDNLfXN9ITF8YCx8dlFs'@;
put 'KCYqaS56X1MyZ3ZVIjNbJWhJLDk9Y2BXY31xQypQX05zVTtQQHdxYVVtbExzdl4mJT1eMEwqJk9paEkkV3lYPGAjQ1tkRn4yazc+VWVDbjFNKVY9IS4vWjBzLDdRRkE2enopQDpbbT5UR15BZEdtK0VlcGRbKHhsQis3L3dRS2o6XU59JmQsfkVabHN8cWMvVllBM0xqRFBQN21nSXcuUmRFS3Vx'@;
put 'PXJPOk94WmIyaUJJXSU5OTd3dDowLjRmWmBFdi9rUF9sTHYwYDwwXzFLYT0vb2NsZCpeTHJPcTMsazJ7Iz1bXWVMRTNwO3FJOjI/XjQ4PXcpaz04el99UmM+W3dvS0p9VilrQ1QvNEk7PDhSSVJtNkhzdTRnPVlqaURxWWdJRCNTWDI6ZkpaTGNhQ29lc3tDQWlHbC9dUm0mU2twIkx8W0FsMjY2'@;
put 'UWhiITxda296Rz8uSDdCdm8sOnIkMm5TW0pONV1mRTpEIWpDPGN1ZHhCRmpjTlFyfFohYHMhTnxAYTd6OSkvNHpnN3U/U3NFWV1pMyJNeStoNjApPilKXyF6ZXhWbmQ/WXhRU3lxJFN1Kz1eXVhSUGUkayxPdml5cz09WS9VOl9Wb2pQLk4uK15dVTpHIWIhJTFzaXxwQVR2UiN9OSYpNH5dRTE5'@;
put 'UitoV1M+ZmdJJCw5NTt1flVIeXhCTzFoKFo1OzNNNlcmX2spdUZpOGtFT1pKbksyc1AzZS9fY3IkYVAkWXgyelczaTVuI2pqYHJReyQydGpBfmBJNzVKcTwzbjdXb3I2WXZWZSxiY2FSfDpUXTZJejx4JUU0fE0ya3NjN35yUVRIOSFfT0UyPC5kSCZXUng7PndfMH5MKlU+K086KX1hVy5RSTl3'@;
put 'Pzp3bGVnPFhRTWRCU3BYaFBZQ2syc0x7a28wNG8ob3FfLi5bUG1aTGElPDQ/bCM0QDBMbF1kKVR8cWdEXmUpK0RDPU9IdGxja35RVzxyTWM6aXd4UlNiPnxyZz02OUJoWUA8XWF6bWBCPngwZ0krWlpXR2FQSyRMbDNXRiY/Y2xBL1QkdSxTMXQqc0Q9Wz83RS9XLl1+QlZbWzJSUUcldDZCenxD'@;
put 'TjExWz9aZF5Hel5iJEN3cCVHT3h6NDt0eWUkc21ZQ35Qb0ppI0dSbiJrWFBWVGpUenA9U2lTKVErRUpzI00iMSlbVGRSdSRnJDJWK2RxQHJvZTUjXyZpejElM1BKelM5eH5zckdsIz89OihaWE80dENjQUUrZjJCbDVIbG5kLjxxI2w5cXkrUCtjOVg9a3cxdDYpfGxRQlpvQmZfMiY3dGsrSyZb'@;
put 'O2BqSTJJWk5wV0dFMllibXBqWEpOMF5eW01Vd1pIQzFPUkV1SDddZnglJTcse0hLYUtNSDBuRyZXKlMwSnpPdXg+Klg0QE8lSl0rQ30kUndrcD5sMzRFdVNIUHJISFR2X29tZFF4cT85Z1NkWDN+SzUubyNYOXJjKEZTZm5oTk8oSlA9b2BIRTh5Um9qXiRzP3Rye3VTd2s/UElRbik2MD1PO1Mo'@;
put 'QlFBJHtbUG48Z0txOW1KKS88SSwxY14yN0JsZl4lZFM6Pm9DNGZuckl8Y35NWlRkYGEsZy5Je3JXNnM1SHNTYkFvdDs2PHA3cSpUJDZjak8+TTwibDhOU0gqVnNUYFVdazdfbXFjV1EsTzt9LCY3UGNSSitmMEA5Pk1jdHRsUWclancoPCR5QSZbNnZ3UkQpI3FuNDV4bnM8UmhbVVZLPExza3Fy'@;
put 'dWo2aFMqOFFgcy89WWU7ImVMcUN1K0NUITRmJW9McigmLytsO0hiX3ZZXnptYmtFMTooXklAXmojUHIhTyk/aitWN0BAP2A8ezdLdmUjeyhOWW5vLD5vKSxEUChMSlpgIWN6fV1JblUqXkxPflJtfVVCNWRhWV5AbkB+IWxbRGNyRFRlWyVtbHRhPmhRJHZnMyFlSzpnfWZyPll8bVtoTUZvfVRF'@;
put 'aE1pdC4laEJSVD1MNSlqYno8K3VKIX5RPXYqZ3BRd2tKXXhtKEJJVyp0KCErb3NgcjReJDMjYX5dY0Y9VSllTCxeb2xwXXVEQ3o+ZFBmb1R5YkBAKVhRLlFRY0wsL0phT20iJiQoU3dFb2srJXh9WjhINjUkYFE6IiV+SlR6bjVsZ3FmSz9IcDQ5XXc7OzcpJmNrOFptPXBxYDAxKnlIWjsoJmg6'@;
put 'WWZrQm52MWpxXS59T0pkYyxrLm9lOltaI29kVDJ2K2tGfi4sSjFeO08qTz0/Tm4yUW17Vylfc29fdyZ3PmtCWjQmSlFNbHQsOzZEQiJ2QjFZOTosb29yKUBNWkZZOGFlJWNseixFcDAxYmRBPnNjMHNLWy91d1N0a1ZBSkkpXSgpdUVRWDlLWTh7UUZNITc3em8qQW58JXg2ZTJLeSZ3SWAyZiRx'@;
put 'YWFhXWxCVjFVLiE9fDFKZzJ3RTk5c1lVd00sPnNKVCg+I3dfOyFBZDlQdkIucTYuPzUsR2VQbzBwXzpXNzlMMmQyNkVRJmglOyU6R1dhQC46Ry4lZ3tAU1s+PjVfd3RRcDdEfG0uZS5hXS5+TWQzLD9HfHoxTyRJP0A2VVhEQDo7M0FPWTpQNzFbejkha2VnQ1ZAISl6VXA9S3xeRzx+QnNqQGEw'@;
put 'Mmtyej94R3tpcj17eWZNcEhVM1pQci9mJDUjNkMueiVHfllCKStdVHBjK2pDZG5WakMuVV4iITh8Y2RpLyNdXkhoPH5LNGJ0VFFeLkBHWSk0JmhOWkc1eVhVQjJ6cGhjSnlJLjB0K3wrPV5ofFtQN2dNNExaWW82SXI3JGZfJXZsdzt1YSolXl5+RVJENklzJlNYM2l9UWgwcl8pOUhURE5rYGtD'@;
put 'KXdse1BUWHUlNCV+fTJxZGpFP1gla1UxWGZgYmV6YFpmUnNIKHczNmlFMWJxRisuQWZ5Xk9HKzJUJks8azM5WUJiV0FsPnhfb1J3P0p6P31MVHV4NyNqMkZtaElWU31MV1B5LiZgMTNId0dxSXV4QlIqMHU4a1ZkYG1la2s1JkskcEVJcnB0O0s6Yzo+a1YrXStrbD1DU2JGYl14b087ZSJMMmdD'@;
put 'OHErKCh9TzpEanwyTkEmKGRXS11OZHJ+V2ksZlgiSlhidVFVLnkxPC8vLFlpRzVUUC53KmNhS3FOXVV+UGcqSmw3Zz9Td2N8YkFMZlg6XkZVKWBKak1vRSozK3BsYDRhV3RsL1JMXkB0ekdZPWE3b3QrOSN5OFE8RmBOKHA/SikrJVF1LlA6KEk4cVVrd1V+T1V0aHJeYVJhYzE5bGMyPGYjP3hn'@;
put 'fT4zQDxxLnw1OlZbcGBqSCwyezlkKX0jRyFGUT5yNEhWVX0xMEtoWTxAe3ZPQDEqOU5+fEtyJkVvNTp8Q2xPVyNDWHJgdix1c1ddTF5CTkokfS5SczY1N1RWdUNSOzEwZFlXQCNSY0w/KSFQUUg2N3YvNj1qQy5GJHE4bzl4RU1mO3J0Ult9RnhtKkxERnFASFs3JXBTOCIvOkt2MCJeT1hfZUhd'@;
put 'RjAubSJvUCpIPXBXI0pBYkJXR2tMR3BuJVo1eGk0Ll1sS3d1VCEiaklNNzBLM21AbSQpLG00KS5JW2FDV1tHJnJbc2FdeV9Bb2p6R09INlY+YUU5cyJMJmlBWH5ddnJBIkNfMXs7MDkkSDJUbXBSQm1rWyFJeTJiQkExL0JvPUliTV03b05FIVdffWA3MXVkdH0ke0JeWSZEX293TlNaK3opNyFZ'@;
put 'e11sKjt2MEpRMjAvLnVCUj5qUDIiTz90SEtdbSo5Wj93T3lQRHUra3JzLHxrZyJoRV57UFpCPCo/N1hLeCtoUm16Rl03ezp0ayxxTEt1akQrRWc8WnhVOyFnbnNSSVFeTzZQW1RHTnhKY2A4az5GeiwqWSI+QipweCpOJiQyT2FFP2FaJD9uTnouNDZZfGouSElUak07VUAjeF8sdE1DPTFuLzw5'@;
put 'RjxWcElxMGVnPiZRP186bWg4VnA2eGg9bmlNKTQ8azFlUzFxc1I5Ym0iUHBpckp9bGM/Nn57SHh6M19sYUdqeH5QfUJ3ZSpfZ1l6NSZXPz1dOyt4enZKKm1oeUFvUSpgYSorcU8/U2BSPzIkV1VCPDBAUWhbTVZaODdMLl08RFEySXU2OnYhJUdUdCI3elY1fVNoXX0oTyw6aGdnQVNeKC8udXRY'@;
put 'KzVeamU+MENgeDBKKWojQ143S20kbjdtZjd3W2RPTnshU0FZayZodXFSNFliYF90TXguXT1DRVVyYlY3QEA6Jj9WRSlublk2Jipzaylja3lvc3hjIXxaWltSOjc7ZV1hfHZjVSUuUC8/fWpDaXJWQ2c1OkwjbmdHK19aU31NPmFnVSZ3ajVfQ111VzMwJDdYbyFfVFU5NjdIKVg4O3tDZFlgODQw'@;
put 'em1+MXxGSiNdcGc6MUwweTcxPkYyYnRqdnZSUS87bTRKeVApZCppVldocjAmZSNEfU56YX5Paj1gQGd4YzNMSmVpTnhiWzBNP3s7WntxKUp4bTN9YEFmfFJmLiV6OFhZUEZeNl48TSF5RkhWVip3MypNPmRaJWNYeHp7RENlJVJLUnZna2E0bCpRR1NYZStxaVphKCguQy9sXnBKOnB0ek5sOjxp'@;
put 'RGNgW2IyTkJiYzhYaU8jeUY3PHdjWGsubU1tIXpJfUk0Z28rMzA0eGU3WWwjR0crRTxIIjJGO0xgZjNaXXpgMyRRSzBSYjBnbjEiRUZNQ19XRHAlTGluQ3VAW3JRM3kpVEN0Z31WejMpNj4xVUZhMWhEN3k5ZkFwOWxyTXlsYCNuRW4sPFpmSyRjREhSVi97S2IpR09qc1hvQllPXlE4ayhrI15I'@;
put 'ZUk1ei47SVRjYXUraH17Ui59Vz1sSlp3XUFvJVh2Q0p0YVd3I002YVhEZWllWz5TWTE/WjUxc1NYIyxxT0N6TUgiYXZ6SCoxRDJwUkp7TlRgRG5iNixtTS8iU0Z1e18mKyhoUHZJR3M5TCsidDRhPDdLdEJLeHBNTXUwfXVvNzpqWUVPLE9LSisxRF9SZTslTHpMNlVsazZtYj9RWjMzJXcyeXJl'@;
put 'PD4wI2s6K3dZTlpvKjlBSzRkU2IodS5hU0pCZEtMKVRvcyhJYFh5R21gRG4uXnpdPTY/Pjp+eWRiRkBxfkdbYFMsYiJ7c0piSXkmJnJzWmBFd2cmVWlhTmY9ej80ZFdKQkBMXW1HYGVXQnkibTokQUVuZVY3Jj14REJFImhxRCoxbk5BbXRyR1JWW2luNzpRfDo4ckgsX25ZYkdfY0dlWChgJEp6'@;
put 'ZF1JNzw2LztERWI3WDJ3azQsV3hkYzdbWHJEMHhAMD08TiFhPE8pX242SlRFMWtLRzBMeylRUGltXldEYjNAYzgwbD8uVltBZ2s6MEU/Rn5deUlsPH5gazJ+dCwzYFhMOkpzRTZjXWA1aFB5WUtNaGp6OnlhKnx7Kk9FeENWbTZXbHAjSHFvbG9aeGczQC9vUUdAbjdpYlVyXVJZYmwiaWV+bSxA'@;
put 'PVUiPDt9e0ImaUhJMV41WFBfJj4pTEAwU34xJDhLNCFGNkpoZSxfUiMqWVQ2dlspK19fKXlGR15AfStyJUJXaixdfSM5TnQ0OCMkQDF6aiQ0OUVMQlFaY1o6QlIufTV7PUREaWQoaH01ZFI7aSJXKW89ZksyV2ldcFJAaGM3UWpXe0RhW0g8WUhoNVEsZEdJZFQ+MkQxX0QuKU9BP1BDNUdyalMm'@;
put 'ZVVkd218YXNbQD5GLildQ0V0eCVaOiQzQXZ2MFVhXVFiKVpLbFFiYH5YNng1cSEqOUY5ezZNNihTXnx+bU87PDpYPXQkNXVgQFg9dCR+OWQkMiFbaDVtVDVKdHI2WUJ8PVglMzo2Xlg9ezFbPHl3QjhZUEEsL3A1bWptSXB6bExRRFcyTnN0QGRTUX4+cjAxSnlQMzo5WztGQEMxdT1aSGp9WV8+'@;
put 'Mm1IdmZFUUFXOzlbPEJ5SWA6MU9yfHgiUihKT1BMRndKaWF9M0VKNDRQXSk4XjEyPH1rcnEobFRQUTdedzEzfmJuNzxHQG89I301bFNMX0taIyksZiRpfClwVyg4ckYvJSMmbiRfdnc+c3JuRi99NjltJF8lImcob25GL0hOODVsfSkqKH5iVE9xcS54S25jd0o/OVZfUiJnfEFbUEw3SjwyfF1R'@;
put 'PSF9IVg2PkJUZ18vVjg1I19yRXNzdSFzKDN+eypdc3xpZWdCPU9UaXxQayF+USEyeXUpYCE5cWJIOnYkfSg4cChbXy9DPn0pTEYoOH1he19fX2RseWR0M09GLzBDUldVQ3xveWQwOCRRQlJDI1B2QHt8fSRMVjNwPXYobGVLRCRCJEc0XjxhSyVjWjZLdnVQS3hETjI1eDNILkoxPDVZUTMxfn1C'@;
put 'Pj9lU1VYUFdqQHJdLih+Vz8hbHEoPHJ0bUVkfGBNTHk+bCYzekF7S3J3Tyl7VGtpVGNGLz0xZiUrR19rfjAzcFJEd0U3fWRNNF9LclJnPkhheFcycEhqKk80bkRZTGhNR0h2ZCJ2ZygwWnFKNG4uVW9RTTwse3dKfF9HbjtCOX0rSzw/I1FXY0FESEwjeVcuTzRZcHgrNj8rdVs6NGhnX3ZpZllT'@;
put 'QTZtdDBYc3B2XUxsI3hETjJ2WXloSVVUVG0vQXlYc191Z1Q5I1NjRi8wWSJIR1EyQjFFMmQueEBJJFFbdGU0STRPeFJefGtiImNUZ21nWSl1OU1UP3dgJEk8QklyPFA+S0BZMWQuXnoqT09DTyJvI3NTeis4MENpXVsqQFg8VnNFSHdHSEJIJkYjcyNjOnlJNmFDTmA3fXZGYUJAbmciR0hCSF5D'@;
put 'I3NSR2BTaCtnWj5xfkx3bSFBPShAUUdYVD9HemNfMTV7ZWM/SWEoI1YrOGkwK2FDY3M4K2g1OyoiZCY/NGVRbXB5QVlTaHY/fmhIKU5EUnVJIVVOfTwhR151ZXNORDw/dF5Lb3xAb3c8YHc7RktMWW89fFdQV0kqQHQhKE12Y1JeZEUjb1t0Wi5ZJj0hPkcqPCJHTGpOQShoW21CMlJVSHR1ZXNK'@;
put 'RD0/dVQpXW5LanJhRE03K3gvYW9PckcqNEk0WlhyfFZ5cDp1JiVOY1UxezE0dkQ+VmFBRDc4UCV9TCtjM1ZUbmgmSSIpW1UmWGd5MkpUfFZNb3g5Ij5heC5ObS48eTVAVkkldlRAY3J5ejZ7V2dtbD9DOEJMdU0uMFR8aEp0N05bUV1SKlImZj5zNEk0dz9xfFZ5aW9xeG14UXVpXV8uUkk+UDIw'@;
put 'I1laSWdNfDF1b212ZWdJaGpDLHVZKnRpZ191Ykg2cCFZaV9FXjRIUWNSQmxMZnBYUFdPWnJ8MXlUVDRqUUBdPVVmVHl7WHBxWUcmNEk0JWAofWFaTXZHeHlnTkpJLmg/UnhRL3oiUk94WyYlZyhtN2xAOns5dDBOaT8sN1twUDp2L050UWtKX2wkKVloNj95aWNGL1pHR317ZXhMO1l3NDVzM1U5'@;
put 'KS5KSUgsYHFzQkBVQ1sveHdfX1BzI0sqMXFYQSFtZUhkST8qazkvKEoraCFyJEdOT0Q3MExbZ0lCeDc7ZjdTZC8wMm8hLnc4MXhEWWw1YW83PlYsNHcrRTx5b1txTndJSHc6cXNnKEhVJngoWn4iN2Y/a0t3MEtXWWNjRWM/JWcoO0k7VSk0O3VgTFEkY0g1eilGQXZlcyZ3cnxhekghRE5bZFtj'@;
put 'bEQqdTdGOkxhY0VjWkQjc15jdikwY3t0Il5bdFBeX25wQjYye3Vlc3NdcXxjPXxETXRuTklYYSYzI2tOaHE5bHdvQWAzJHhHJnlLVXpETUd9XmgoVSVAPkYqIT5NZEl0IXI0X1hoMmY+aXFHRVRbOTdvUypsPmwsbkhCUD5FQ0dCdSxlTG5pZFNpYms0KkkxR0M4Tk9jIis1Sis8Lyh9cEdBMmYu'@;
put 'emcoSlVLQm42LHpyVkM0K2xWTn4qMWRTaVNQV1IhJHI3RWpFdCM/Vng9OlRpKXZvQ3RwSGRTKkkxRSRGPGJhNEc9MiNFMmZHWk1XJU1ZWW5jZVNaTW1wQXVdKlgse3FhTlRNcDs/VEs0ezFIJUw8e0lHNkN0IjVdKyE+KGJ5WF5feUJ3WkQxXStqKVFDS3s0ZFNpdE9XUjlqRn5tMCFYe3tZTTZ0'@;
put 'e3paNz1FIl1HNjk0aFBYNmpKVG9IOjErSmRpWjY2O0ZpWnMpOGNVQ2FiZCw7UkZ7PjJiWShIRzx7Wl0pdHI9cEZ0VCI3OzJSVGYsTDBMXykhPjFsY3wlTj9CPUdOKilSaiY0KVVhOn1xOExpSUxbKV82ZyklMUFRaWNAeFhSM1BsWkxNLkRnamp3aCtkRXFhUmwzfDs2RUVraSNHIy9adCRwUTVr'@;
put 'KWhYcFRRcSJuWG8iVUA/VVhrOlI9KVplT352eUd6bF0mbWlOTjdYckpOKXVXbkxPTz1OM3wiOTFTPmg4d2whSSVbMG52YUF8REVeNE05KkRfYX1+THx6NCh1KjFTXiZyKltgOkJpYyQuRE0pfXU5d3lsal1oYERySWcxbXNqUVM/V3VDdEtwXSshPmQma3gjRHlPfTVfSXVzY2MoZjhZLyQyJF8y'@;
put 'ZXkzT3dPd0pAb0xvVFBLIU55N1QoZSE6OitsSGBUbEVnbHV7W2kpWHNnaCRWWk43MkkkT3ViNXU5NTo+PHlEbCNveT8lZzc0aGZ7b0JkP2ZwWCpVSF17KCo7fHI/Slt5VVU0amBxV3U3eTRkdWlzVkE4OGIyLzVxPiRmN3tld0w8P3tiS2dYV0RlQmcmNkgxNHFDa0ArR3h7PTZuIndFQU8sSHpx'@;
put 'K1pCX2MsTShYOFlFZmY7e0ZCQT96MUNgYHs2InV2cEU6YHU8XW5aKjN4XjdibFJyVnJUXmhgSlZOYFpzQUxxKSJUZDl8flhaREg8WHIuNHNFQUBASTNJcTJ3d0BDRV5+NSlCam1zRmwhPiNWdlZWZSZzRiFpMColKGJFVlh1bEFPPmJPS2p5fTlYUjlUJCNEXihGKS89aDYxZztDKD43Wk9vdXZw'@;
put 'QF0uOXxXdXw9RXIveSIuOFFPKUVoaUB4P0Z2Ujx4OzNJTntiSzNWQnNncmJldGtsMkBtK3VhQEtuKmV5PT93SVtTWzFvSVlBZFk7MUw8IV1CZjdERV43OyU6IzkoYm0yeDdpdX0rYDJLKSwuYEZddCohQlFJUHd4L3J6UE1kMkswR0NnWjlqUmROZmNUdkVZfGR8a0xUdkQlT1koIT4sOn5QZkcz'@;
put 'Yn1eRnZeSUxTX0E7aGM2Qk8vMUVsP24uMGdNVEYoKDlFe1duI1ZCNmlRaEBXV1ddez9lflpXU2IpcCRdKTEzTjZfMyNtVnMjdlllTDBgbUIlfFhNdGA/JXRde2U1OSNHNUdHbm0+R315Y1VrUVFeVUpTT2k0U2F8KHRZbVpFWnI/XW5QfnVhJXk5eE90dnBeL0tmc0h1dFJ6ZHUyTjpuWWpQbyln'@;
put 'P3g5bW9eKzg0azVKXTRbYHZiSnhgPzpXYEZ6KT1JOEU1fD9COUA+Jn53bUFMS2U1V1RKejw3RylzfDJ8IURjRWJWOE1TaSFMOFRMdTZ5JXNIW3NUJX55Rmh0SEIwNGozT15qfno1N0hmdGBUaVpZWlUsbHVyWDhuaFgqVVB3cnxWeXMwT1NrYDFmVmNLQkc8IU5dKm00ajM7TSl9S1pTQFhGNkBE'@;
put 'MTFxd20kTHlKLjQyaHNYbmJKKkZtOVEjY3JqKTs4WSxHfWNCU1R2Xn5yYE80ZnxUeHd6QDk8dHdoTk87KXdoNyZycCw7K0RXfSldKzlaaEtQW117PyF1fjtHWns/WnxWNlgpIX5zcDtANUNZfUc3VnEpYitmekZxYGRPekZGXzU0PX4zYTEvWkNKYEguIShuMXE0aW5pSV58b05bcEZiZFJfQmB6'@;
put 'aHduaEh5aDZwXy5WPn52eWBlbDhCXmdNIl9mMEUvOiNHOF99KmBiLm9hRk5bfH5tSTkyQXBGWSRSdiIvNE98fUpuVFsmUk1jfFZWQ0o4OyEuKFRVfnw9Tjx6N3tXRUNPUEpvVix0fD1FdTV9LjMqbytQJTNGKWNzIW06Q3wjbDBWN30uWCFdOmchLH1lQkQ0UElkPGkhLH1nW3wzfjYxXlM8a35k'@;
put 'PX4uImNxYDtULH0xQEc0JngmX3h0NShtYl5LaiUyTWNwfD14S3R9Yl5sVjM8OnNRM0BxKFk8cHw9LyZtX1UjVFdQJFNMSjBSYF1HSC5rRHJlNzZZKHpMalU7bU5rKzVAVkJ1SW1JOVRCLGJqXmY4PmN3SGZHal88MDMuSmJ4ZmhaJWhoQ3AmRjR0JGNhSi98QD8ualNtOzE/MU9gdGMxOHBESHJl'@;
put 'WnE2aE1odStSV0hRSyRVRjRdRmV5a1FsaVZ6X1lXRkJ0fVBlJTF8N0pSbyg9Q2lVcFcrajJqbHNUbHVbJSloKm5kbUBdM0xXVWhiSWA2OitsT3BQfS5rY3A4dyFeM2hNdmtaQF9WZCs4PllhMVdYd3VrWF1AZjJgP0BoW1hfKGJ5PEN+RkdofGAqKW1JOVdBRUVRPGxOI2c/eU5jJGY7fUJqQS83'@;
put 'Nj5oUGwzfUJZSC9UfXYyNi9xQHlIelsvd2NrJWY7fWIjdTw5ZXw6fDdramlfazxia001OCExekZjbVRwJnhFXjk1MHB+K1Z1W2RVdlRkYSZzM25Zemc5REZ4ZGApZShHWStvV2cwVyFven45YH4uKmlwJFEzXX48VypgKlY5UjMub1dxZ01BfXJQMTNkNmpLN29WdigvNi9ZeTwydCNoZ1ZkbT9X'@;
put 'fD0mRXdzR290az0ka1YoRXdzMWN6JH4mYXpXOCI3OzkmVDVmUjNII3Y/QTQidlIkTWR2XXlIUiJEKnBVcD82Nz8hX0RBU0JIWjRzfi97RCRgUiNzNmhpVTVgOyxgUlJXOz9mRFRXXjg6NzVVJmBSeURzTkQuamdwbltMTTN9Y0FZPS5dPC5WZXR8cEovMjtVJmA8aH1vOWdNfTJdX2dCOD8+eEtX'@;
put 'fWFtUzd6Mm50Wl1afFpnR2l4ZT8iU3xKfCZgTm0pOG50ODVQLEZXP1khZDdlRy9PTWg8WFBxV2xFdVtYVXleNUh0KDYkYXYmVG9bZHw5V1NmdGxlVjNMWm1nLFslfTN2WnQwcXw3KEArKz4xK3g6THxRO1pMfE9KaWpffjEzLkh4ISFpdSZoQyNWPi8sUGdTKXpbPTo/Lih6QTJmQFFkIn06bWB0'@;
put 'cEpkPzYjdlJCL1ksKCNLJGh+Tlh7M2dwUW1lSWx8Q0RQNHBLeV5lSWx8d2xGL189IzMrTGZXakhgQDlDTnhXOEkjPTk6YmolJn1hLkUiJXNiTnRbfl94XjBtPn1ONnhbTVgqcTgyJn5wdFk/cldSQyVkaypjOChVaFslMl1heGYpJlkjb0ArcGZFT30zJGJPRTpPNVVoMUVyZSk1VDRPNzVmcFNh'@;
put 'LnZaXnNHMSlvR3VbJUV6OnNwP3NrViVrVndabShoL2NeZjhZLHMwYXBScW0rYmtncFJeMzo+OTBgeiRWeSx7Y11pX3UvPy5fPXsmMSU7Y2c8ezNFNVlHcClRdyhVa1dzWi9YfXVmR3Z3N2JHZGlVIkBbMUp1Z3NPMlJ3dy4qXl8mbXVmXyZZeU4vSExiYyZVSlNJflRjX1s3P11xLkREbysiek5J'@;
put 'VlQ3ISplRCp6fClmPll9QDNFdihmNDd9IUBNXnhBS1ZyUEEvTEkwKTBuRWhpVmttYiE7LHtLOVgvdU54LnwhQCw6RHk6RUtZb2kua2ZlSWJIJn11V3RQS1M8LnIyK2d+bkdfJnhPR20pb05oVyxkeGpNRzw9L2lQbDw3RTpVJldRR3JAXkpSQkFzTWR+RFI3N0R1WndpJUdwOGk7UGdBbUJ2UWl6'@;
put 'M0tXS1JlckkwYW5rbE5Cdz8yVUZ6d1taQy5ZbF5IUTo/M3s1LyF9LF47WWt6V0NaKDpaZHc1alhERHp4a2BQfERZfHZhPW4/KyxPVVUxc3JqZlFBYzA+VW08bEE2ZXtmanZ3N2prQ01bRTFjUzNra0lsVHB3TyF9a19dVm52VVh4bzRtSDBMR3o6JF0hUj45XiFlQGkwZG1xSlVMeXZOR1REfno1'@;
put 'MjBoMThtbGNWTHQhTllXbjxwPUZUQnxIJUU6fSxnbFswOHlzYXp6QiNsc1B4dDZXKnZleltzYXo1U1NtXmJwTVEvKXkwMGYlXlVNaUc/ZFV7WGF0M05TL3tTYW5hWEYxYDk8S3YrUWpgQX0iIXtWeT5JLzY4NHA0Old2ISJKRn4xeStTbkE2bD4iOldyZHVMY2pRfDwxY1AoPHlEcHg5TDhAPnZd'@;
put 'eXplLiUpVjsxUUpfLEh0ZWp5TEAsW2VqT3lRd0FieSFxUjMuSH5ILFU6PEJ2Tkl+dlZge3lQRDcxVkVdITVDUnR+bDFYdXoiTjl7aCI3M2hHUylQYl9HVXNJdEIjbFEpZCp8IzNWV0l1dH1zWjFCS3RiZiJRLFdfPmo8WGJpdSUuYGUzeXw1K2JKfj1gZURpfkcsYDh+ZCQ+fHJnMjI+NyJsXWR+'@;
put 'SDZgfmEzZ0x3I15FTk5adSVhQ1gxRFc7QnxXclQuRzd9dTF8Kk85RWQ8PzlITm1MKn5ASnNXeyxYRCJJcl9zbGNPTTJgNTZ9aEp8P0pdQiJJfigjZngleEwhZHd4YHBPQi4iYzJxJldXPDRMYj16dF9OfD49PDx3PC5ZWEA0SzNHUSppZk43MUNGJTQsYiR3ZStPT09nYCgxVm5wMyVJeSFFUkRG'@;
put 'd3VeamxnTj5oekBNcj81WWV8Z3ZrSWQxaGF3YV1BcmNbdXhPQ2ckJmUqXmpYX0ZFYWVbPElAcTpTdV4mWSl4KU1WNm1YMnFtWTNxRz0rOiRhZ2MpR1N7JF5HVUVjWSJkZHVfXXcmSWklWWFVTltMYEN3PVNtIjFPSD4qTGEqPWQ/NmlkeDY2PXR6eXkrdzNGZCZNenV+akhNX2J2L3JeQ1BqXk9V'@;
put 'I0tPKV86MTxXSHIoWTZBRHUlWmE/RGdXSz5fYipeO0RyTEVoRnE9KTMxP1pOPW94UGRPKiVULyNCbmBIZS9fQ0FxIVZ9O3x1LHlSLF9ST3RhW3U5LGJLUj15IWV4N3VIb2tQMEFfdiopWUo/Y1J0ZSgrY2o8PC9uQSZ+UWhHMCMlQHhzaVBWOiNuOiNRO0lDKWleLjJOL1tYN1lTbHM3Z2V+VEdq'@;
put 'UntbdVprOi8qa3dPbU9nY1EqQjVGcVpINlMwUEcvSXMkPngkYS9pfUlPTSs1ZytSV18oQlFCWUB+aV1bYF91MSIkR14hVkNZTiZUe247czNwPmROPm05L3c2emBVOjNiP30jOHBlI3NWQjVQZyMvMy48dkAuUnMlcGtEeXNjb2I4LEMjanlFbXBuWUR8T0MkNGc+dV89d3l7I2VPKSQidDokWmc+'@;
put 'Kl5FR0lnaFp6VkkraTBNQUF8KC8/VWNDRWhqdWA4ZitAVzs8KDp6UlE2ZCJ4WkhYImEkZVFpOFJLUyRQV3sjZWNmYjFDeyxHL15JJD9yR05QdGE5RUVrZCVmeC9hXnBOS0tdVjt2PDVPeDohNHdjU2MjUnd4YE5wJG9XOUVBSH1ZeHx5dEpedFBBXSRyejJ2IU9AZ3VXUHQ9TFt7bDwvLzFafGlM'@;
put 'UXYvLFRTIy9JdWRKQmlBVHsuOyNEcFhBITF5Zz5iZEZ2LzVGYE91I35gLk9MJlRjL29KJHZRTThDOkElNzI8Tmo+LDQ1RkI3P0xOaGp5aV9TOU8xeX5RTEU/Uy95VDkzcClJY1JwJEJHTVRaUnhVVnJUTWR1WUtacEo9eXR8X2BCUksicXxYO2opeD9pRT1CUX1LTTo5TitEW04yX1BebC9bVWAo'@;
put 'OlcsJTxJdDBdbXFTOFE8YHFNSy5hajlDV01ISzxJXkYibzxeMURoSF1ZXWpVfX1SfGF1ODBIQHhpUmx5dkIrX2hMaGpQbFI1W15uTik4OVI4SVZiVE5fJmJLQChZLm5eU1R+ZWBuMHpWd1QjVWJUJSVJO3wje3w/Ii90cVgsXzFRMEE8aHhTTG1HKCtfI0BvNmtzLHl4SFNgKDYrNU9CV2hDVlsq'@;
put 'bisvSjdlaCZ7MG4zeFhNUTMueFZqRUZOajdjJTlmeG58PV11Z1krT1JGaCsmfSQ5XUI1SE5zenliUzs/cGw9PWFyZjYoJkhfa1RbJDBaRlI/fW1qXjoqTU9dTXZLd3xleXI7eTxRSHpmYkpVbzs1alI3d0lCME1yPFFILFEjdVokPzdZTkpsRnZlaX1tL1trKjM5UW1lbCZqV2A2Pn4yYSo/Nylx'@;
put 'XyVKRkxVLHQyczdjP0ghXUZmVCMhWyghKSlJRi8mYWFPLk9TIkJodUZ2bkdNSGFuSWFBTl4+TltQZ1UwOHc6RmZ7d3hiKWl5fD9uVGJCR1p1ajcrOFRBfmd3ZXlMNT9FZkwleDleMj5peCJjfl5oMzV+OUM0YGhKOT5SMFk1REZaNCpiZGQ5cktLWigoSV12NzJUYX0hQzdYN05mKjxeVVB0I2dC'@;
put 'Jl5tUHYjR0NST35HQENSdV5uQiM8YkVGfEFrSX1MK1l6NjtkPlMkfjZOaHU8aV5PTFczPUpOUHg+LktfOFQiOy8yfUpZMSh1dk9WTnFrQHw3XlJRfDNFNnRKezNVKDs/R2N0MGM2Png9ZSkyV2VCRD1lV2k2PFg2fVZqYTA3aTtyMSpeSnp7WmcuP3dLIk53PGFGY2ozc2xLL01XNlkoU0R9a3JU'@;
put 'TC5MVHFqdF9HZVooJStKdElRfGZobSt8QkQ/UkxdMyQhNDEoYFc2KlNSPFdnckdkLyYsSzxCMCt1XUg5ZHQiTVZINz5jJjRJT0AvPWU8XmNGTWJ8XXNwR3clYylUUT1MZ1o+eT92aWRzbGBSbGRjPD9BbXthJT0yJFJUKTZkYTlxNk1DXVI+YiFUdUx0anA0NldWQChMSGJtQyV+UDFVSi4ub2N6'@;
put 'MzxRdiFyYix8YyV+Y2wwVGpeVmZ1a01dQTYoPDIqU3lCL05hS2c8NntmLFVVOFRDdixCKlhqe3diTUYsNWBraG5aUGNQREdZLz4xND9GWnUwd3M2LGpucW9bVztyPkZ3WnVaMHNCJjxQSFhASCJ4IXFINVZabzdEXyJZSiFDSF9jOG54KGg0Wk44PjZ+QlkoOkIpRCsrNSU8b2UyPiYlQkFNKWxN'@;
put 'Um1tV0tUVCpGPlM1OVFzKjFYTV1weDZEPVpmX2QpbGMrT2tFcUA2QVk+eH4ielJQPCNdKDY0RlZMbzppZzoxcjlQQj9pfjl0aEBuP0YjVTlYfEEsQEVFbVJgamIuSzEhYklvNTFybWtQKmRlZj5QPmZNTW9rekB7Ilo2SixiPltmTCl2fVFER3paWm5kWFQiVng+eVpgQ05Kdzg2MnNFZEN4aWt1'@;
put 'KlJ6QFRhcSE/SHtmMD00O2IiQTN4S1d8aUJNZ0lhbjpBUEE9LzZHZStbWDZ4dm9eKGdkKmJhN3xHOU52YkpocFpBdlAoTlU7YSVMbzRNemQrdUk8d3thSCZyRj8/K0greG0rXlh7RWJ2czh3OXNnMUw7MSs3RlU2aTFZYUljKG48fWtZZG0kOGp9TCF2Yl1leyMwVCNJYUpYQkZlRl50XTQ5NVVz'@;
put 'NnpwJHQlNElpel5DYGk8X0d1ZiQuPF9OelgzQkV2Li50Qk9sOW1iS1YwYUEma2ZlNkdoNzBPYm5XdiNHUU9SPTQrfTJ8QFdwSn4rQFRkXkRfW1lMby92Q1d0PmshXmNFcjdRNypCaUA6N1lVViJFfnlNWXR5dXxFY009IyYhaEU2TGU9OTh8UFpqO2FkZlhNcVAyeWZzLGNyVm54Oy9PUEBHNTxE'@;
put 'PTJDY35JZ18hVil4dC94RDIocWEqO1JDK1g+Km54SXw1bXYrdFdHcEpBQW1wOyNgdVJRLiFQK2hzcixGeHFMe2JtViZbInxJd2VIT0h8RVZqOnxSYGhUKEJhQ3VCL00/K3Nke2o8QFpOe14hQWIiW1NsaVRAVSljQ115WDxqXjo3YDZfOkV7UGBZITtMXkp3UStsYWpETj5aaCxPTGphdGl8fF4w'@;
put 'ZjNTV1VfOnZKfjJMJX5pNyIraTgwPFg/PW5TNyNEM25fVE03UDske1ZxJWJgej9dPl9qUi5Bb3Vba3Z3R15ucjBzV1tPR0t2RSohPztubG46dj8pND8ubltUN3JVUUdfVkJqfGtycD06flRuJVZgbCtEbnFfSnxFUjlyQ2M9MCE9JGVocWsiNjh+P0o9JmxoYFNhR0ldOXsvJGw9RSw/OVBFVUlo'@;
put 'dT1deF89Z340dTtqe0t+KnM+RVhmZTtBQjpIUWpZZkBgbW48Z2hfLFMzYWhfUXBGfjB2bklGU0Q3WjAlfTAyVCpeemgybmpxbzwsJFNgYUcpIUQoSnZRYko+X3c0Skk6THpRRHRFKiJCQVJ5SFZgNX1dPkwqUDRlcmYlPTlvRFUlKyw7QGZgTVV+PmB+LygmOS53I1lqNCljXkw8R1E9VkBFeHMq'@;
put 'fUZLdigpcD5IaHVwdXJVM0poMFFuWCw0NlZTUTRhJiZXNHhrbXp1Xiw0Jiw4cF1nSGh3eSxpLElCI0k0Y29jIVgvc0VeeTVJeSJaSTB+cz0pXipuLmA6bClIZ1ImSjZhJWhYd0deLFVnPlNFOnZjKjNlIU0mRWF2SSp1Pylfa19Vfn14UFc3QTZtRnVqKW0/IW49JE5WRyxJXVU/OF9ifHxtY3VB'@;
put 'SERSYnFQRiQsSXssVGs5KDJpQiI4KyhbPm5ueVZVMV00LzpTcExfbzhgN3hdbW47PXtwdDM+ekMoelQvOm9fVXRwR0BkVztUe0hzWig4OnZzLlheZSFyOkJvdCVdcF9WcTcudzg5XUZyUittODY4NDl7TjE1Vz5jc1VrajFqWzkuYUdYZnZfVlczOzN9WXxuOTJlSEx4Rk9taWU8ITZJYGE/MS5G'@;
put 'd0N7IWoxOCU3alFQPm5KKSY4eiMlel9QXTg3alFQJkw2IkVIekhRamFsUVBtZk5BJWVDOHJgO2EiYXM+YTM0aXU8bTZhUmlwTWxPVyRCYF8jTUVtUzI9SlZOckI8aC5JQSk3ak1QJiIiV0FaPzsqaEo4aGV7dHs1aWFOVFpBNzxhZSFzdSw+Tn09WzdLPXQkOzxeJWtqaW1LYkNhfm1CIjtVJXUo'@;
put 'eVBEfGhBU3JZQEkheT9hMmkuRkxSYXxiMWgmUjtHOUBuMyJwSXR0SU9pUyNCaDRAUHlXVkI8aEtDTHQyITIwTE9ua3BURGtMfThhd2BCYiZScWpGYk4yTFRqe29qQzRxTm5rRy4wMllkXWIydUgudyhoTCxKPClKdHspU0FoZ3RuKUxZSX4sPWpbcyNdN2Q4aXZCJVNNYmFqZ1FUZkQ4XmhVRXRs'@;
put 'V2NrSmQsRWlmRV5ydThjKn5+MTJFIWZHNjYxRStZS0UmRFc8XkJYNiJsWjtHNjpDQkJlbX4+NyE5Y1BheSxFMzBAUGJ9Y052ZjRlMHFjbl18OiwzOGlXT3hWQilLMnJQfmx+RCpESmVJOEJlSVB7KWtZRURNTVg8JmFxbD9oOmYpRFtiUWE3T3hiJDNJalZBW2JddHJkYCJjJW00OHN8ZHMzc3A2'@;
put 'OGt2WzolYldTZHNLZztifHxjJiloP35SeDZ9QU0hKk9MM19EdzBJR2JnKUxNbzI2YUk0NGRKUXJ9UU57dG9WLlU/b1RKejhqKSVLfT5ldjhJdDJjfDhYfUdXcnVufn43fnNGIX08NGp3TldSPzdFUGFXU0xdbkxAWztoRWNuVWx8b256XlpKfnFYYks+ZSkoO1dHUlMhWHR+MlFmbnheaDpmfls/'@;
put 'ez9oPSFUX35SUGZudF5+VF4/TEd9TEhCT29pdXdMdCppI313fnZCKWZLPDRCTVUpaSNgWW4jU3l9eSV7NVRRPEN7Pnpmfn06OVQle253QF0iVEQ3KkIpczRCVUxuMHpHfnMyP29GQH40MXUofilCIlk9Xn1FeDM+QG4xcjwwW0svWyVDPHxISSN+QiJ0e3xvOVhjajRQTmdTby8/XkZxJig0UkY7'@;
put 'ei5XPSZHUWhxNGtrdDg5V3hfclRXKyVSVTNUWzYrMFcycyV2ITtJKWZIUTJWL3h8ZHM3eStRSH5VOGN6bUxLVU4qaU8mSTh4JiphJiEkV0UxODJjZlFvJG5eR3dyJXZ9TGglOlp2RlJkR0RxU3dhLzQ0UiVqQyQsNkpQTm99NEFjPDZEPEFZOyhQTmcxaSRGSDxEelAlW041e2VzOW4/VTMlOyVn'@;
put 'IVQkeFNPWyhAZyFSQUpbRSZQP09YOi5OZkNvSyMwOzI+MW1ub3E7R2JER052TnhpPFJ7aldRKXZIZGwuciExaiN2LCVAbWJJckBSaDR3e2ppXk1NfjkoZVJecGxXe30vYXRQI3RMY018PEkzdyFqdF1PO3UzJWB5Vik0SSE2a0BLKzAzPTA1QlU4UGF4SENtVGBYbT5SR2o+Y3E3LEVXfjdmZ21E'@;
put 'RiRhNDo6SEx+OTY4QzUpY0w4TzZUXy9leCt4Kzo8eDU0YlpPVDFAYDdBci9CUlQ6PUZJTHJyKVEsVX5KZ2o1Vjk8MiVpJHhFaWVkTW1RNkpsMiVxXmdLSWp4UW08WTBqVnVCR0c1Z2NqW3ZXejQzOFYuXnk5NUlNJUpuWUs3PV5UJlZdVktMeE9LTyUlMjojMCZSOmB1QDhzakdaaT9dJmtiekkr'@;
put 'RSFBbD45UVl+YyhdKytwc15eWlF8TkNqK0BhSCt5aVc0Z1gzUipGakI6MmBvOG1IVjB+QDpxazRdISJaOCZsTSpsWEo/N2d8XVIuSF5ib117Nzdaelp7NShSNG41dyteUE45ZShaIXNpeDR3QFFpPXd4dFFILn5gQVBtTTpoRHU8PH5SXyVQKXdsIi89eWVfVmQ6dUk/XT16Pk9hcUpSUTh8e0k1'@;
put 'dzUoZm1CJnwlWEhJWXhaekB8TEQ4PHh9XjleSX1aTyNNb0g0ejs/QEdKJXRLK1BleFAlPmM5NGMhK21fRSolJjclbTFhTSVnKzcxdUNIVFs9ZWFdMFhYaCZZMEdNVkh4SlZ8MjI/KUIyaHM5cDc+Pz15UzU7aVRkdXdgdnU9PyxKUkdsLkByKChtJDNvTGJmRkY2QVZVIThkMHFiJXBydWY/JEJ7'@;
put 'WkAjUiEzaDZOWzRtZk5eV15xQjBSO0NLQE9pXl5wR1NmeVFBdDljWGNSW1VaMVBUSWRlUGZNPVRuKmo2b1J3dktPWE5KVWV6ZW8+V2NLWD0rKSl1TT9tQDlzdVdkN2I5TilsdEBJdFBHISZadW9ea04iImMzTHspPCJMekQkY30sTitNOCpoQyRnZUIqUn5LNnp1Unl6RXApRS56SytkRTRVTj0i'@;
put 'b1ptQ1ZRflgyeHB7UjdLUU1CUSMhQXh3ejguXm00QmBrQXtWOl41SWtwRy9WcDheYVppJU1TRyh7Mz0mN2U5USZsYj9jZWFoKlJebUZFQkI4MkhlWyQ2cGlPSDd7bGppTWBINFF8ZjFkMCF+bDosTzl8NnUwbGNsMnNNMUxrQE8zZT5FKyoqT2ksT3twO15HKSR0PHZPOVFbKWZhIkc2S29NKUlC'@;
put 'aSllPk1tKzRHITJYdTtFbj9bMTpBNE85SltBKSovQjZCYHs0PEYzNXBLLCt1eEMpc2F5YCk4LFJpRHZpUWA9fmFBcVpBcGNwfVEyREN1XVVoamBEK0VYJmlycFo4fjE3Lk95TTMmSU9DX2M5eTU4eTIoKDpFXkwsLGlDWTZZcilmXTBvMmVAYmF6ODIqSUBjSzBqRjY4PEw3VWYjJFovWGpdOkZp'@;
put 'XXtYXjtEbWpYMHArNiQicHR1Q31PLDJrdz5oSlAkWFNvR0A1RV1YTE5ycllCRkBxS2B5V1NvL19SUCx2UzE3X1ExSFg2citHaE9Ke1d4WmVCV2JSeFZOQW4ye3BzL2g4fihmPG9zKUVEKUw+TENqZUB+OTI1QXhlOjdIZkpMakAvSSN5QCU8OUg8T296ZWpdRz1FdiF+ZyFSW0FvZXJDan48WTVG'@;
put 'anYrOlVZeGAiTC8jcz0iR0YpZyFsT0dKWGhzdyM7W1FULlpIajdZfS5yX3sxOHFJS3NXJU09dFViPzZNQi5ZI2RWPXpyWm4iYFo2Kys1YittLjN1SkJxMCkrZ0VRVmkkRzxUMDckTE5vNnBKdGAua0xEIiIxeTgyTzcqPDxfeExsbCNDZ1p7aEhvMG9Cc3pLPXlhWVNeO1BHaHk8VDA2Z2RSazA+'@;
put 'Y08vKERdWXtGVW1KYVU+eylIWzQmW3ViZUVQUlNWeVdTVS88aypfbkozZyJvQm53Xk0pKyx3SGo/TE5mcEsqenlvbSZma0J6Yz9GKntpfjtTKCIlNEtacktzUEYkPi9TZTBLUjIpRndtWyZ1ZEB0PlcqPS5KPVpzQ1d6MF4hIX4rIkpvejlWSm5YTExETypHQDdiWkVCbV9TM3tFcDFRTD5gWUZM'@;
put 'InA0V3QlVisuVFA1UHEyfEd5Tj0mKzdIcjY3TndES1V+bT0xa3ZZWXZIbVkvN1V8NVkwWnRUWm5QTiZNejpkb3Z9KE52WDUyeyoqMXNaRlBKaFlaK15JLnZXWyU/bSRKLF1HS3A7Sn0+SllZZCtxTXxtcEVXKV1jVGUyPm1MSTJecCo2flBpbDFVOT8kYkJGS3RwL0RKSlV5emowdl5rJklaLyxR'@;
put 'ak9rfDN1eHRqOVpQTnVNUTJJS0JuIkVTRT5nIjRae0FLPSFmVmMhVjw6fGAwMyE9bGRvWWNVYSNyR1MvXjxmJks2WntOTCQ1STFuUmtkPTxkNEtib3N6amxaSiFjfW1TejN2P1pRfXs6O2dndGQ1VU9Qaz46eFNBZmVPfEtiaEtYRXpgajdjNm9JJUA+WTlGZDspJEwsS2RofDNZek5xcThbW319'@;
put 'KUtJdzcmOVJlUFNKOHgjIy5KIzdsLFE/OVFabl1NMjwzdWZrdnpkanhpQnI4US9eZzIzT2JoKVgwRnMlNntlaFY9RVl6NVNBfHttWUhQanpzXiJ4djZCSjU4KGR8am0vbGsydWRoPjpRcDtieSZNeWM2T2MhQ1khNFo3YDwxajcjNVo9MVdqbWZYez16dkExNSh1NTp6X0VMbU1NV1IpSnhfRnJW'@;
put 'VWNodHU+ZyRudWM0PSM6YyU7RmlsLzVCWER5clIyRWtpV3pBX3RGQExdY3M3TTFqQWBIeDx7YC9YPVE1b2JgMnBudm5ZQz5Yamg6ci5rd0JwZkJGLz5jdCU/a2VrS1FMbT1OYSlBQz5hZl8vMHozJkFKO1QkfH1TPUR6ZDxmSXwpLnpQVFMqTkxMPz5FfGowckNkPWo1M0hYYW1DLFV5ZiEpXlF4'@;
put 'fmkwV0V3d2l1fSlFPDN4XVdfO09RdWsvbCwpcFMzfXddcU9KVGs6R2FieDdqJEFERSNOckZ+aU1fPCRJbUh5aUJHaTRNdUFUOjI/bTNJandYW3g/YkxbSV9KPDI2Vm97WkVUM1FzUVlpN3VNcX1pTVchPWBPbzkjVzc4bGIqdnZUa2Umb3QoYGQ8Y3hjIkxObTJKUyZjT09MSzVkL3xKKk9mXzhD'@;
put 'bkkwXyppTVJKUl87SzxsVlpmX1UyS0YkUFRCLHA1biFrcUUwcyhjJTw2Ml1KTGpseSRaUTR9dk5xNHhHbX5icWtNZ34mNVhnOTBzIm5aSjM3fUM+PX16WkxgdD0pdVRTY2ckblpQQnRxI3g5dE5+Vnk3RDp3cU5bJE4rdU43WEl7VnlHQjJIO1Q9bCZiUyhhKVk3PHBrd0tOdkByXW9LV2lvZmg9'@;
put 'XlV2OVIkPigwLGgzJEw9Y3k4PHA8SUZ0QCRgZzc2akF8bWB3ZW46SGY1XmFwemxyMzFNLnt2NHNJYENGTHRQaipoUiF1TmlDWjQyfWxrUVJAcC5lRzF7WHVNcDxEKCxJendEWjFIQyQsNixXQFJLbjdzOkcyVk1Ea19VeVRRNitiRkkoXms2YWxPKk5MI35ZWXgibVRDY35xYTZtRyUmJmszc1By'@;
put 'X0p7YHl2WC5SbURpPj59KHRBS3I9Pkw/e3IpV3ROOipMLDhNaSEvJlhaLCZKdm98KikyUTshSmgqOkpWbn4/OiQ/dlNrXlFrfVZCcH1XQCxuYHR6dTolZ3Zzcy90VHx6TSFIK1E/bjVkbzpPXSF5OUI4PiZkR1JuUj9PcWsweHNFKnddc1BvcU5hRjJofSVFWT4hdVd9fDZabWlRR0AkRjBRWGd0'@;
put 'NllbdFF8fWFGNEd4d0cqaWJOOE0+dGVfRTssdmZJKWskJj1CJDZgWFF8I1ZAPlI3flpLJF1NNXc0Uk9+O3BUNzIsV1hzPDtSe1c+WFtzUT08VUZ9eWxSZzwiNG92JmZnK0U1Wkw5bmpGMmxGIUkiRTc+L3I0Nzk8TmM1Sk1IbGFfPFBRVVAkRlhRWTwsVShNa2ZiO2ZnPjxXcVVRP09FVXdhWkN3'@;
put 'O24uOW9RYlRNOkclb3VsIkUlfjttVyQ6QDZLeUxHRGVaLncmfGMlPndOOFF3d1FGfD5XRjUiYDNvL1k/bzdIelFiMVtsJHs+QFVbSDlvZlB2RVB+KyJBXUssY24udHcuIzFSbSlCWlJ3JVhwQjc+O0RhUyJ6flY4eTZqfTl1clN7N2dRRFk8WnFzelhQWVBAUTpTOFR1cnpYOUxHdzlSZDduenYq'@;
put 'T3s3Z3dPS09kI1kyfFBPKXxSO3ZkbjwrZ0V8b28iWzFVYDJlN3g4VFNme0lhWUJkMiFTZlg+S2Uwc1U9UElhTSxmJld2MSZMMStsfjxeOFNdQiIiM01mRSpfQkFdYW4uKkBIZEppXWooej41WUxefCY+JVVyR2tIfkkzK1p4VUNYRHQvQnFNdFJoSVk9QzEsUkoheSxOMD5vdjYlVWRKWSEhZDAs'@;
put 'eVtDPyhCcTA1VE5gfGF1V1N6NHR2a1lmX0JYKnhgZ1hpOVJRITY6a0xQe0FoRD81dVB0VFhrOlJaI0khe0JxOU1XSlJgMFNKO3F5RFNxYEJxaWpqWDpZX3UvO3VhdjFTRmIoTTldQG4paExjakspeS5zJkZ+WDEoWDJNPyRnTzx4SXVvVXskQnF5dkk3PXQlWC8lKzVzfD5XNn0pZTdQQTVrUjlY'@;
put 'KkxnYyVMMDZEXzQhd21VIV05N1R2b30rbTp7YiJJK3R7NHFPJWpaTyQwSzddM2FlP1QpM1dHPml7ZE1nVUQxcnxod1VaMWI6JSpgYkViLmM2PiM4NlNub3ViKXkmTjdweEw9dF0zRER+KEQ0X0Q1KUNOL1coRmRzdXovLDNET2M3UEFGbng6U3Q2XTNDRyFSI0ckaWtmaUVOLyY8aV8hUlR5fWcx'@;
put 'RW9qR0pyej9faV9BcjVBVHF5QTIrLyxGUipbP3NZYEpNS3g2ZylhPjQudSlRcyssVm5XL1NUcX40Z1VQWFNXdVlhX11Wa3UxUyE1PVI8KEZSYmxYfFBhbF4uOD8vdzB6Q0k1TCwpP2xiKVApX01QcGx6Z18vVXpJIkwoTlVwSFZTPy5tQDZBdz41Z1FeZjBdRlFjXkxpZCtwd01LUVp0OFQ3ZV5i'@;
put 'VSo9dCQrJGAlSnIhUWolNnV5OTFQTTo+UUBWXVpMMXRoPWdkVm4zIUtWfTA3Q2w2Tzhne2YwQCF2Q1JYJWw/P081Li9SVyN9MWo8P2ozP0oleVIrYWM2PG5dZjBaUy90X1UkYy8zWChkWGdkJTZjJGFQSjVLfSFdKjBiNmMhSSY1YnpNKERbTWs0KENrbHk4ekNgeWhuKk9tZjRoeFhVfGczZ3cl'@;
put 'NjZ9KlkhVH4+bWxETzB0R3QyOzdTKUdsMWxMUyhmT2d8WEt9P21ENUVoNk0qYm5ZXXs7d2s6PGRkQT9FcDQ2cU58KEpdfVFaIzZnJD4xYGdkaW5pd2tfZlVUSHdkOzRQKHc1KXIzUX1sdVVVekxMXztTMFp8UTNadz9nIWhjYDozUUV5M2Nse106czttfj5pdmAqe3pjfGc/YipBMWZ2c0pXY3td'@;
put 'cE19bGx+MHkiIyNzeyp0MjxmMWhdaiV9aVJRKHN1bHxAZXkmJUhoS2JoMEFdZV9PJH5vSW9oKS88P3FUZHZpLGM/UFUvRyhVdV9QVVh4WC5WSnBQKHNbenF8MTQsSzdjXlFaNW5nNFkja3A9LEJiLDl9OUdURn48ZSlWTF9DYm4mdWV4QlA0fnFEV0c+aU5Kal8uRTlYW35iMnhQfX5WYFBCW3xo'@;
put 'NiJLNC4hVD1TfnMpN2FQeDNHJXU0a2RALz5gL0d4TF98YUJfOy9gLn46OW18an06OXdbP1k9OWl8MGA6OXNbN3Q1fjNvV1c1fWthKXJCKSJub2hxbiw7QV5fNj9aZHN5SmVrfWxpJW00XX56SWB0aSxYeGhLL04vOSpse11ydEpSTzZQKEsjPF9oOFYvaDg9QjFMNH1tLlAqUjp+aGJudUo/JkY3'@;
put 'JHVISWFje10/fH5fXjskYE09OjkydjlEY3NkcTpfcVs4Xzl9Nl9eXypAcy5lfFRlYF88a3dBMXJbMDxrJDVjXXk1VS5xcXdBfV17d1FrNj9YVSg+WDZeLFIwPVZ3RXQoZ2BlQ184KSxeRSR7Y3A+ZHYzNntrUkQmJGE/O0RzIzJtL2l0fSY5ezs4KTVRQDFSYjA6R058bTNSa3hyIUZxQ2t+Nmp4'@;
put 'OlkoZVMpYkl9azshb3UvcWpFbnMiJiw7bXNPPjt9fVhwN0RWbi58fWh5a0ozdWljXVhGIVImdFdMfF4/ImcuOT91R3xzT0lgIU98KDBJSXlya1JROkklYzQifnE0JHRwMUNhejxLMyJET1NfX3I8Ln1kZEhGN285ayVUflNsKD59YSg6OWRxfF1ZT1EoXmkpcnNUc3BefVltfV0ufE07XjtEU2tf'@;
put 'bFNgKj9ZNGhILnRtVih8MXQyZihKP1diVigrSShxN30zeEwqRzc9KXZkMFkmI0BRY19aQStWLFUrejpfKDJLOn1HUHx4Qm9oM3dkYEgsRT9MazZJKFVVJiZFNFF3RDRoKyxNflUoZjEpJW5zZFFNZFp8Q0pgPylsOjkoQEAqM2hpLHRte2QyPiMvZDs1fWg4XjsvUltjfV03fDMiQ3VJMVMxPztd'@;
put 'Im5bNVpkc3Q2ej8hWDY9bzNtXXVCMWg/LyRyPWJSOVcqZSlUd1RrfVhFfiUwZE9qfDlPVmxiYEtYSDYkXnhVMWh4RDFGPDJPdDFlPG9NdH5+bU58NCI+O0YxT2ZzZ3dvKFg/eEc/O09AbzF+fSRdPn4pLDwyYF9xekVWWi81Uyl8MUBMNC8pJDkifGBtTmR3fHJ7MDVDKn4wMGpoNjhgakQuaW5u'@;
put 'Rzs6OSJ9dHthWzEsNVMlPztMcDolPXZRZ3I7a0MmSio7QGhzM1psOmI/Xz8xaEo+RiRXKGFAWlNNfko6OlE5NH1sQF4vQjs8NX50bj1+YURlUUhTL3x6KyhoRV47MGkoSSh6cmJ9Tz9yfng8LlFoTXw0Vj9Ddnx8bmVLYmMpbypsSnNKbXNETyIjO31oYn1dLyYrPmhpJElXcmxzYyhBPSNoLFF1'@;
put 'X1FSX0ciZmxzfCZXcmUoY3shYjxdWn4zWjZNZXZdQ0cpKClMRGwvJHIhTlJqSzFedEZ1IWh7XWhmPV1ZbF0qWEhQfD5IPyZWeikla3NYJlh9ZCh8PUxBY348UyY5fntkOmtEfV0jeW5oeCs0VmZmMWh2QWRINXZHSF47XTdofmxkIV9yUUtIbm88Zy5HZj13dngkIz9Ybys+PTJ0fVUxOUBKY09n'@;
put 'SGBHYmh0bm9BVHN7bD5XLmZmNGBHYiIoVSVsSiJmaVNPcW0jJjk0KGhLTGIyPmBJKHJlTnp6RXoiPl1mXUlXcjA/dF5AbCZaZHN1Kl9fVXAvN2ZjMSk6IzphSWM1UUdwJTciKEsjNUp3ZHx+Um1Oe2hzeG5yKDVbYy9eRFAoInQpcmklc0prc1VMIiMsfShWfGx4fEhxVUE8MiVzJjlGQEExPDlE'@;
put 'QEAqWE8uUSxkQCZdRWd8LzA5Ki9LUCg7eGAobCFOUn4jSDc2fWthUCpYJCVea2VqPzAsbGUqTHJDY185SXtANz0hVHB1YzlUNSYlS2YzVnJDLzlbTV54SEskTHpLP1ZVWWc/fXQ6RyklaXNhSiFUOChiOCRjY1EqPk9TTS8zSG9HND8hVCtadHlAek0vTFRGZjYxXyJRZD0wPztYIzxsSnZnLG5R'@;
put 'ZD5KMm5SNH1SLGheJX04WEh2K2JAeklka08lPCh2LlsxKVI2WX02d1EqQTEyaCQqKEVTKFR4QFFrX3hPakdBPTNLZkk7SmF4Jjl1WGZzekA4Y3ZOfVMofWxQI0JKQ3tTfiNlJDZZKX44KHYhUX56MDV+YlVkUyJzfFdNNnx+aGJXND5bKzFkP0RjOEkrNyt+S3A4fWB+LFk/YS5+PzpdfkVyYnR6'@;
put 'azQ+XVh5QiV9U0hCPTcsdFd9LF4pfTlRUEIiUzhzfisoOGdNLD1+M1cvYHIrems3K11YM0BKViJzNUZzNz5+O1N7fk9yZTx9fU87QjM0fiZEO35KNnFbKjEhfWFISiFjc21qX18lY147O18jKV87Ol9VMS85MD8vSzJoRSohYEB7OzhqbmRzOXV0fFJyS3UrKVd3aUwqOCk1PVAqQlMqYk5EUHtK'@;
put 'bT5iOzUqY25GUFtBdCtBPFE/VlB8PiYoQTleKmhDaCRYfWZzbUZBdSJmNE5ycCN9TUt8bGtfciRfOyNfIV5aNHR8KWxQTFtNJjlzcCF9YWA6Oyl4UFdKS1YvTHMhfipEQ2BMa31+eStDfkNJW1hUXVJ5QXRwRk8pbn11SVlsLEcsPH5lZHN2aylyd3RKL3lwbzFyPzk8LilfYThYdzFANHo/OnZh'@;
put 'fH5ANUMzTDZDcH1gMDlzIjshPmxCOCRBe1Z1Vn56VWBzUSNWZTN+fHomNHhLeXtvbFpXSVteRUR8b2wvfiJPfXNiMXBpWWA7KV99QWBdN1Q0c2FUKX19aEFUVzxveUZyW0VSWnw0am1OPygmfFtqUDJQKDoybHxQNTJoIlFVQTV8KUp3c3VZTENGPlk1KHZGUiFfKVZ4d2lOTFJ7aXFBT3FaaU5Q'@;
put 'LnojS0w7UCg6UiZ3ZH5maU5FUTliUk0yMShjWiRCUTlQUmJCNWs2fTZVZEI+dDFlP0MkU2haZlpUNm0iNFBXNlp8c3pYVVt7dDJsJjI+Q0ciMjJOYm5OZmBLUmg1bHtIXWVreEYpYSJbVTRXeF8xJmN3bkNdcyJwVnZdUGJua09pfl1JRy4oWzVIdkVtPjkoNGA5eH5DP2ldfmBHNjgiQEU4UXRi'@;
put 'TVMxPExPRTNZaChwZD50Yk1JenFLVlo/QjUpckFQfExIeDJTdGw5R09qbDI+a3RsfHUsXTt7QDl9N1pLKi5kZX4rN3Rfbk1xeDojdWp+R0Q/P1koeGJtNn0zWlIqeDpWIWh3P2FkZDAxQXQ8W2R+PGh8ZlIzM3AhbHdyfk9jc2FqMT9TWFV8ZCRdKixYWzFkPyU4ZlIuUUdJPlZJMHt+I1Nkc2Ex'@;
put 'cnxARDY+bH00MW5oLlFVISY5PVlhbCo+fEhrSWJjIXNLPUliLD5KcWx4ezthKFgxd2YyPlpHQm5eX2QwZXZsPiRiYF97NXYvWWlgM31UZ3xvM2hjJXIsTntOaiU1YDJVL18pamVzWHtTalRMei9+X1NObSZxfFNqZXNPJDlpUUVoRDZmX3ZZSDpfQHJldjs4UFBYSEguPiV9R0diRykvQE4qQlMh'@;
put 'RVtxWFclKnZvWEpDMHdHcUoxZT5jZmh0ZCN1QjYuVSEqSksoTixhYStnRGpVZmVVdzk/fHdjfCtaYHRqMENtPFFgd3VfeXoleDMsL3QvNTB3aDZ0JWtHTypZZGpeXk8wZDhfPXk6SSVhZngrN1ljJXUqdW5YM0QwTn4+fktDZFUuWHxXWjM1T0QxPzxaYEMlLiI+Ij5aS3hjY2d4b187eF8ramRz'@;
put 'Wnp7VEp6UTRdYz0/U141UFVONzVnKTpmXVFuMTl8N2o+Pz0rX18vOCVoRlY1YzdUeEVgdz4mMFlpKTJiblJNMj8xcnxGQylVKVBWXzh9cmpKUCNzdUVUVFBXWX5rOSsldUduLjF3cjxTLCZ1dkBURnJrYDMxTSxVUVo8QFh8YTk7Pyt8OH1bNTRFNHxxfCw8NmNgbGliWC5tbkA5SERmc0R4THtz'@;
put 'QjtFZ3V+Pm4kWHhYLkloaDZKaS82Yk9qK3glMDx1b3ZsbnZeZzdTU2IkaTQwd2ZiVjFIaT04Ol1sITxRd1syJC5sPURIPiRQSklSMmsrd2tVVDgxWjg4UjsyZD9SVDgubTtmKEZnOyVJfiQyJElYWWgrLiNCfTkiSXo5YmIjNXJeZzhvNG5ecHUvKm1KcTtVY0FZYFNbYXMoTEYwfDlpUlJpTUdo'@;
put 'QmNBSypqcEQqV2k2dlpxVGRTY2xyRTxwcWtJWVB3QVJDMndwa0xGalZoZ3JVVFNQIiRPSSVTMTE7STRrQX1BTjdlXk9qTkdeVzUocFZFSipVcmkjeTNDPUl1UmMxaCJ8PE4vOWp7bk0vOWA+V1QxaHBdblE+R1Y1KFVhKD9gL0sxaDldRyhIL3NBfjpjc1J6Il9RKjh9aDVsd2J7K0Robl5xdHtJ'@;
put 'fjlgMXVvfiViaDZnfSgyZWdSY05dbzFUe3Z+P2dsUGZzS345YWZzQ1tsITtxSFNte3ZvVzR7JEguQ313alNXYzF4Om4/K3p1c3RIRy9+NTtjUGA1T1hXO0ROMiJgfXQofWZYekYqME4yfWArNzR9d1VTNF9XTjI+fWt0Z1czMEc3V3tAWiM+cnROMjt9VXZSV189dWosPit6fX4jUllTNHxoYTR9'@;
put 'Om1mZ1UsRGskc0lsLHpePipHIUpHYj8oTlNfWHJ+KF9qd2BOfiMuOFglOkh3azN4JX14MT8uOzRPV3grdHxSck0val4iQlg0JTRhQ2IzUCJ0ejdua08wRGMqRVVWQGwvO2FyT31fNFF2RHpQR1UuTUxIOFk6N1RGbUFxaUFKWy4mTnhMZGxYWCRXSEhjN2ZIOnUmazglPkZAdEVSV2I7d2suOHRZ'@;
put 'STlKKCgwOmZyNEBXdC8ldyE+ezR0czZkRlo4V0djXjdbZXRVWmZffiFEUH02MUV7cURDW3ZRRyJANWI8dWRmNEVHWEdwayE0KjlaJHQyQnJPZzVbd046VUllSSRLW1UiOERNZDAuRGA9WiE1dC9rdV9eX1tBOSpmQF1EcGE5NCxxKGQwRH4rPz8jVm9mLEhRTj8vMzYya3VRWnFfKEsvUW95c1Bl'@;
put 'KTdidCI5dUVaMn5LMihWeFVBUT4lYW16L14lJFt6dDswNHViUWdUP1t4fG1IIiZLKitYK3pedFlxMntbJWVkKmB4aXQuNkJGMzx8eFo5fVJ8NmJYQXJ3ZGZoNXoiNiJCUFFAfiIzY1pbdGtiTl9ZL1syRUhPaD5HMEdmPn1DcGgzPiRoPEFtVE9LLnhBeDpYcFQwfGo8XWFEaGlsJiIkMmRQaDBq'@;
put 'LD5QS2Rvb1VVYn5NJCU5KEM6fmE3Xnpfb3JzRlFmMEY/cz04KFpLMXMxSCZ5I2p8TyNxVEg2Z0lvO2Bnci4meTRHdC9baFF1JVJZWFdxZnF3eXFHODs2Szgvc1p3dWVeTSE5OVFseF0kJTZgXiNmNSRiZDome2x4dypuYjF7ZH5PdFd5P1ttJSpOXWMkUCl5NjApc282dSxoYXskO1VkJG8rZ01m'@;
put 'I19Fezh1XkFGe2YjTX0kaFB2XjdQUXBjJEYhJEE8Km1RW2J6Uz5OYFAuaUouQnFebTREOnsjfGRYLm5UY1EzSi4vYCw5Rn5Xby9KaWJQfiUhK2k6WXs0bXpdUTN0eUxFeiQpWlYkPzRJX1EsRD41Zlg5RUJ1WFN6OygqXXZjMVpCM0Y5X0g1NDY+R1dZdiw2X2l0ZmU7aDg/NHd7VXEzMEVrNHZW'@;
put 'bnk7Km5NSnFvNU9qJnkuS19ebD47OXE8Jm1CZnklSj1XKmZPWXxaOmR6aG54ZE9LcmtGaDNwM19QRFlVXzBJaVNdezYzb2c1cnlBM1h8VjcoXXpMS0tMUHNzeixfTF95S2lfKG12PVM7PGtLKUw+YXQkVC5gImdCVXlIeVt6fXxTP3B+a118QmpBPFdpNzxJZzd1bnMyPHJdKE0uXjo+TXJKOF88'@;
put 'dng3XzZRaUVFIzVxIilqWCF1U0dNMkYweEc1X2FNI04zSkMxIUMhKFN4Vi5BWHNRcD9uK3hRc285YW5fLDhZeV9neXs5Q01LQlVJe3U1PSJJP31DTUJ0KSsscnt+Xzg8IlN5Q2xuRVBWSXxkdnQqbWY6Sko3Kn5gUHlDJUVhfEJTL1ZQKHllWSV2fEU0dllqYTlsLHVxVXBKUy5rSXhhOnNIOUMq'@;
put 'dFVRdG9URk4zR1grdi8yZ0wuKzZuW28sb1hUeiRfP15tZmxgQy49bXgyaEg8byVRfjFvTipjZSVdKi9NcDFaOVR1V1c2KXtwOEtVdzx3TWRbO3IrKkw1SSQzKkZ4PVc9TipWLD1dZiI6PFljNC9pOEVEWEhaOm5ETXQlPH09Rl0pN15ENFZHPzJsYDRZQGBgP0tNelpHMDU6TkRDWiVEOTkpVUpb'@;
put 'XU4hfTdGLi9aPzAqZmtvenI0Q1JJK3p1VCFmTz40YiswM0tUQEwhQFpIX2YhT3pQYjFNTV5BY0YmOlFLbH4jNXxXPGhMbSxbTXl3IXA3MjRwbm5RJlV4RzdDaFk4ZjJtdiNkcHRCRTFOWlNCQy5MeUpSNFVrQDVMOD90NSU7fShse3AwXStUdHB7PExBWCFjNVs0TFNjQkpAL355RUQpdE9rUDZn'@;
put 'L3pgPjVMQnFCe0VzT1kwPEBGM3xIMHZ7ZHBSJXBaPUgqX1NaLE50RFZZOnoid10yKWxsJF8rNFFtdHVsSjdUIypQPG1uSXU/VnFyWWxoKjdmdkwvYTZGbyh7KyZ7Ly8zYT5iMkZuSGA9MUBXY2JgX3c8dXJGVWZMLEF6dGVRPjhOX0Q8cCI3YE40LGVBTWVlO3xgMnJbRlhscyViYEx0VnJmWHN5'@;
put 'cDZGbz1CcjMiKnBediY/Y09FN0VpYlRNRF99JWpwaS5eey9nKzdwd2hePVAwMEcsTmpzKUZmMiFrSltQJSQ5TXt2Py9IZnl5PGEhTW51fFhmKz0xKVt1ajJaOiFqaClaJmd7cyZRTERFdGB2TE9OT34vZCllaHQjc2hOMy9hRjZ7dlcpfVFHS31tUnJFMDtoLyRHb3loNDNMO21iW1IxY2AxfmIz'@;
put 'VF16TDo1Wkt1WSV+YmxWcCp6Wj9NRGJJPExXMDxtMEYsR3pXMj9zcEgldlI+KHEyPHUvWnZ7VHdSYVMwNSRVTSZBeiIwbXUuY0ByNUB9UHMzUl9CRSZucF1taVs3YyQrcnlac1gyd2lpO3xHU1RzckZ8Mjk9QGpSW1pjVTY8MX5GL0FCMzNiPmMkNE9Rdy90T3E9YHZ7Iy4yOT5QYXhXZVdXeDFm'@;
put 'OjE3NFI6R3hWdFN6WHsjdDUoMChjQjg1MEMieThFPyVyJWl0KXliIlRDSWNuNCVwSX56elJxQSE/fXMsXykpem9lKH1PTD4sJHteald3THU+WWp1PFhVeVo0fCMzW11PJnxveWJCPjgkYTk3NCVeWmBEdjxycDJmSVdOImlTX2s2VmNjNTYwYTRLaEhqMDc/K0YlU1kieEw4Mz4jaSg4RWpkaVEu'@;
put 'azFyJU1uP2tXa0tKZE4qJi9HLDFXYDpXNjN8ZTFLe181WHZWLmlXbTc6TGBLNjVUQSgpI2F4Z1pOT35LM0UlR21BI1p7OGZLfW1LQDpEd19nLDpDR2llaWZZTGRVMilRYWI+XTEuZWchK3pqMVk0YTNCZjNneDY8Z0Y5PUNkQCpjb2shIXRrajYmVT0mOD5FYj1rLixsKDA8cClLYUBnYzU0VVAo'@;
put 'QiZxd1h6dXFpQml4TVdGOEhhTSUxJH5OW2l2ZywvIVg0XkB7ZSloN0xoKXlBZG1jTmhobCM8OCshZVQha140WiVkSE1GPTRQamtZXThlND9KU0Y5T21zPmg3IUNLKmEsQ1k9UDJaI3Y/YjckN2JgK0IqZDBgaDZbbkZuLzgxeWl8LzgyZkRMUXl0aFlZVCRNZEVEKn4sXT5iZmRCZyNoOTR8PmpM'@;
put 'VEJZTzg1MVV9Nmp6YXF1WD1aMjQwX11VQ0FIXVtDITQwSUZicGVRYVhydy9JI0xNcjI5WyJ7Nz1tUmhjeSxkIjNBSSU5PSRIMyYoTHVXOSxtc2RkPkNafXJ8SWwuZlhCalAjIz00Sm42QX5YKUc1aCVBS01QT2l4QlhzM1hOQzVRdFR0LyxDZHNkTGtxfCQ5QUxrYStrR3d5T2MqLy9sN1prJS8w'@;
put 'P0pdWkR5fkVjbVs1bkl+MDE6U31TZFh5L1Q+I19KanZ+PSw5NCg7aXh4JCQlQlpIMzdAVTE3c09sSjZ2KSIyXyVXbEhke2FmSF9qVWYyPyNSKEZtNklhZ3gwckBYPUBxKDd4OGljS2c3MzxKbzN1UnEpL3VsQzYxfXVFcV5STTkkdXZFOTVwJTs7YGQwYjY4UH0oUy9EWHdVcml8aCRlVSZbWT81'@;
put 'RjNMKVsvSz8wYzh6QGRUb1ZzQXtPNWhtaz44Ny4wSn5sIn5ra3NBaWcqSWM7R2pPQ2NdVUhyRCVCeFZdfFprOTQ6blRjQDgodiMoWSZBVWo5UmlgRCREcmJsbyNKZjRsejVbIjpWcVJYfHUsKGp1REUxWC9LVHcvVmdpY1dxSDE0fmBFYzFYT0hFSGI7Q3o9OjEraFpjLmtZZ1hNI29fdSUscXhe'@;
put 'IUkkbW5JVHI2QEpkTDV2UEJ0RnI6KTx5NktuSSlAMUp1MzZAa1pCdDFNeWduUz1lcH4jdjE+SVF7T0R7NW9TZ3ViIzQ9Ukl5OlgrU0VxUWdJfnY4PiM+MzlLImojfHo0UVYkKzRYdVtjMUxkVU51MWZSYnE4Z0ddXyQiVE5fTTdyS3JHX35yPUwxUEUyP31pPSp0MyNjXWtqaElSa3xgNiptT2Ev'@;
put 'ST4oQEA+cHhkQSVrIV5wdSlnUXd7dnIpX05xO3V6W0MvVSxySUcvUE02Y3xkcy5mZTQwJm1yNjhLUl5fN11FZlBCenozUXhaeT15R19hWiQmWjl3QUlgOyNQfmcyZTFqZzMjI2tGP1szViNZay91YyomWSMvSChUdnokJVA5WlBzYTVddjl3dTU7U0JASj01SWlmV1FYSTBVQScpKSksTkF8fChO'@;
put 'QT1CeHQoe3dhc21CaW5hcnk6RnRlLGxvY2F0ZUZpbGU6dm9pZCAwfSkpLE5BfWZ1bmN0aW9uIFl4dChjKXtyZXR1cm57cGF0aDpjLnBhdGgsZGF0YTpgPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+XG48IURPQ1RZUEUgc3ZnIFBVQkxJQyAi'@;
put 'LS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPlxuPHN2ZyB3aWR0aD0iJHtjLndpZHRofSIgaGVpZ2h0PSIke2MuaGVpZ2h0fSI+PC9zdmc+YH19ZnVuY3Rpb24gR3h0KGMpe3JldHVybiBjLm1hcChZeHQp'@;
put 'fXZhciByN2U9Y2xhc3MgSXd7Y29uc3RydWN0b3IobCl7dGhpcy5fbW9kdWxlPWx9c3RhdGljIGxvYWQoKXtyZXR1cm4gWnh0KCkudGhlbihsPT5uZXcgSXcobCkpfXN0YXRpYyB1bmxvYWQoKXshZnVuY3Rpb24gV3h0KCl7TkEmJihOQT12b2lkIDApfSgpfXZlcnNpb24oKXtyZXR1cm4gdGhp'@;
put 'cy5fbW9kdWxlLkdyYXBodml6LnByb3RvdHlwZS52ZXJzaW9uKCl9bGF5b3V0KGwsYT0ic3ZnIixkPSJkb3QiLGgpe2lmKCFsKXJldHVybiIiO2xldCBmPW5ldyB0aGlzLl9tb2R1bGUuR3JhcGh2aXooaD8ueUludmVydD8xOjAsaD8ubm9wP2g/Lm5vcDowKSx2PSIiLE09IiI7dHJ5eyFmdW5j'@;
put 'dGlvbiAkeHQoYyxsKXtsZXQgYT17aW1hZ2VzOltdLGZpbGVzOltdLC4uLmx9O1suLi5hLmZpbGVzLC4uLkd4dChhLmltYWdlcyldLmZvckVhY2goZD0+Yy5jcmVhdGVGaWxlKGQucGF0aCxkLmRhdGEpKX0oZixoKTt0cnl7dj1mLmxheW91dChsLGEsZCl9Y2F0Y2goRCl7TT1ELm1lc3NhZ2V9'@;
put 'TT1mLmxhc3RFcnJvcigpfHxNfWZpbmFsbHl7dGhpcy5fbW9kdWxlLmRlc3Ryb3koZil9aWYoIXYmJk0pdGhyb3cgSXcudW5sb2FkKCksbmV3IEVycm9yKE0pO3JldHVybiB2fWFjeWNsaWMobCxhPSExLGQ9ITEpe2lmKCFsKXJldHVybnthY3ljbGljOiExLG51bV9yZXY6MCxvdXRGaWxlOiIi'@;
put 'fTtsZXQgaD1uZXcgdGhpcy5fbW9kdWxlLkdyYXBodml6LGY9ITEsdj0wLE09IiIsRD0iIjt0cnl7dHJ5e2Y9aC5hY3ljbGljKGwsYSxkKSx2PWguYWN5Y2xpY19udW1fcmV2LE09aC5hY3ljbGljX291dEZpbGV9Y2F0Y2goWil7RD1aLm1lc3NhZ2V9RD1oLmxhc3RFcnJvcigpfHxEfWZpbmFs'@;
put 'bHl7dGhpcy5fbW9kdWxlLmRlc3Ryb3koaCl9aWYoRCl0aHJvdyBJdy51bmxvYWQoKSxuZXcgRXJyb3IoRCk7cmV0dXJue2FjeWNsaWM6ZixudW1fcmV2OnYsb3V0RmlsZTpNfX10cmVkKGwsYT0hMSxkPSExKXtpZighbClyZXR1cm57b3V0OiIiLGVycjoiIn07bGV0IGg9bmV3IHRoaXMuX21v'@;
put 'ZHVsZS5HcmFwaHZpeixmPSIiLHY9IiIsTT0iIjt0cnl7dHJ5e2gudHJlZChsLGEsZCksZj1oLnRyZWRfb3V0LHY9aC50cmVkX2Vycn1jYXRjaChEKXtNPUQubWVzc2FnZX1NPWgubGFzdEVycm9yKCl8fE19ZmluYWxseXt0aGlzLl9tb2R1bGUuZGVzdHJveShoKX1pZighZiYmTSl0aHJvdyBJ'@;
put 'dy51bmxvYWQoKSxuZXcgRXJyb3IoTSk7cmV0dXJue291dDpmLGVycjp2fX11bmZsYXR0ZW4obCxhPTAsZD0hMSxoPTApe2lmKCFsKXJldHVybiIiO2xldCBmPW5ldyB0aGlzLl9tb2R1bGUuR3JhcGh2aXosdj0iIixNPSIiO3RyeXt0cnl7dj1mLnVuZmxhdHRlbihsLGEsZCxoKX1jYXRjaChE'@;
put 'KXtNPUQubWVzc2FnZX1NPWYubGFzdEVycm9yKCl8fE19ZmluYWxseXt0aGlzLl9tb2R1bGUuZGVzdHJveShmKX1pZighdiYmTSl0aHJvdyBJdy51bmxvYWQoKSxuZXcgRXJyb3IoTSk7cmV0dXJuIHZ9Y2lyY28obCxhPSJzdmciLGQpe3JldHVybiB0aGlzLmxheW91dChsLGEsImNpcmNvIixk'@;
put 'KX1kb3QobCxhPSJzdmciLGQpe3JldHVybiB0aGlzLmxheW91dChsLGEsImRvdCIsZCl9ZmRwKGwsYT0ic3ZnIixkKXtyZXR1cm4gdGhpcy5sYXlvdXQobCxhLCJmZHAiLGQpfXNmZHAobCxhPSJzdmciLGQpe3JldHVybiB0aGlzLmxheW91dChsLGEsInNmZHAiLGQpfW5lYXRvKGwsYT0ic3Zn'@;
put 'IixkKXtyZXR1cm4gdGhpcy5sYXlvdXQobCxhLCJuZWF0byIsZCl9b3NhZ2UobCxhPSJzdmciLGQpe3JldHVybiB0aGlzLmxheW91dChsLGEsIm9zYWdlIixkKX1wYXRjaHdvcmsobCxhPSJzdmciLGQpe3JldHVybiB0aGlzLmxheW91dChsLGEsInBhdGNod29yayIsZCl9dHdvcGkobCxhPSJz'@;
put 'dmciLGQpe3JldHVybiB0aGlzLmxheW91dChsLGEsInR3b3BpIixkKX1ub3AobCl7cmV0dXJuIHRoaXMubGF5b3V0KGwsImRvdCIsIm5vcCIpfW5vcDIobCl7cmV0dXJuIHRoaXMubGF5b3V0KGwsImRvdCIsIm5vcDIiKX19O2Z1bmN0aW9uIEZOKGMpe3JldHVybiBPYmplY3QuYXNzaWduKHt9'@;
put 'LGMpfWZ1bmN0aW9uIE02KGMpe3JldHVybiBNYXRoLnJvdW5kKDEwMCpjKS8xMDB9ZnVuY3Rpb24gaTdlKGMsbCl7aWYoInBvbHlnb24iPT1jLnRhZyl7KGE9Rk4oYykpLnRhZz0icGF0aCI7dmFyIGg9Rk4oZD1jLmF0dHJpYnV0ZXMpLGY9ZC5wb2ludHM7aWYoInBvbHlnb24iPT1sLnRhZyl7'@;
put 'KHY9Yy5iYm94KS5jeD12Lngrdi53aWR0aC8yLHYuY3k9di55K3YuaGVpZ2h0LzI7Zm9yKHZhciBEPWQucG9pbnRzLnNwbGl0KCIgIiksWj1ELm1hcChmdW5jdGlvbihPbil7dmFyIHpyPU9uLnNwbGl0KCIsIik7cmV0dXJuW3pyWzBdLXYuY3gsenJbMV0tdi5jeV19KSxyZT1aW1oubGVuZ3Ro'@;
put 'LTFdWzBdLGNlPVpbWi5sZW5ndGgtMV1bMV0sYmU9MDtiZTxaLmxlbmd0aDtiZSsrLHJlPUVlLGNlPUJlKXt2YXIgcWU9KEVlPVpbYmVdWzBdKS1yZTtpZigwIT0ocnQ9KEJlPVpbYmVdWzFdKS1jZSkmJjA8PShwdD1yZS1jZSpxZS9ydCkmJnB0PDEvMCYmKHJlPD1wdCYmcHQ8PUVlfHxFZTw9'@;
put 'cHQmJnB0PD1yZSkpYnJlYWt9dmFyIGR0PVtbdi5jeCtwdCx2LmN5KzBdLmpvaW4oIiwiKV07Zj0oZHQ9KGR0PWR0LmNvbmNhdChELnNsaWNlKGJlKSkpLmNvbmNhdChELnNsaWNlKDAsYmUpKSkuam9pbigiICIpfWguZD0iTSIrZisieiIsZGVsZXRlIGgucG9pbnRzLGEuYXR0cmlidXRlcz1o'@;
put 'fWVsc2V7dmFyIGE7KGE9Rk4oYykpLnRhZz0icGF0aCIsaD1GTihkPWMuYXR0cmlidXRlcyk7dmFyIGQsRWUsQmUscHQsSnQ9ZC5jeCx2bj1kLmN5LENuPWQucngsdG49ZC5yeTtpZigicG9seWdvbiI9PWwudGFnKXt2YXIgdjsodj1sLmJib3gpLmN4PXYueCt2LndpZHRoLzIsdi5jeT12Lnkr'@;
put 'di5oZWlnaHQvMjt2YXIgTW49bC5hdHRyaWJ1dGVzLnBvaW50cy5zcGxpdCgiICIpWzBdLnNwbGl0KCIsIikscnQ9KHFlPU1uWzBdLXYuY3gsTW5bMV0tdi5jeSksbXI9TWF0aC5zcXJ0KE1hdGgucG93KHFlLDIpK01hdGgucG93KHJ0LDIpKSxHbj1xZS9tcixhaT0tcnQvbXJ9ZWxzZSBHbj0x'@;
put 'LGFpPTA7aC5kPSJNICIrSnQrIiAiK3ZuKyIgbSAiKyhFZT1DbipHbikrIiwiKyhCZT0tdG4qYWkpKyIgYSAiK0NuKyIsIit0bisiIDAgMSwwICIrKHFlPShwdD1DbiotR24pLUVlKSsiLCIrKHJ0PS10biotYWktQmUpKyIgYSAiK0NuKyIsIit0bisiIDAgMSwwICIrLXFlKyIsIistcnQrInoi'@;
put 'LGRlbGV0ZSBoLmN4LGRlbGV0ZSBoLmN5LGRlbGV0ZSBoLnJ4LGRlbGV0ZSBoLnJ5LGEuYXR0cmlidXRlcz1ofXJldHVybiBhfWZ1bmN0aW9uIFh4dCgpe3RyeXtyN2UubG9hZCgpLnRoZW4oYT0+e2EubGF5b3V0KCIiLCJzdmciLCJkb3QiKSx0aGlzLmxheW91dFN5bmM9YS5sYXlvdXQuYmlu'@;
put 'ZChhKSxudWxsPT10aGlzLl93b3JrZXImJnRoaXMuX2Rpc3BhdGNoLmNhbGwoImluaXRFbmQiLHRoaXMpLHRoaXMuX2FmdGVySW5pdCYmdGhpcy5fYWZ0ZXJJbml0KCl9KX1jYXRjaHt9aWYobnVsbCE9dGhpcy5fd29ya2VyKXt2YXIgYz10aGlzLl92aXpVUkwsbD10aGlzO3RoaXMuX3dvcmtl'@;
put 'clBvcnQub25tZXNzYWdlPWZ1bmN0aW9uKGEpe2wuX3dvcmtlckNhbGxiYWNrcy5zaGlmdCgpLmNhbGwobCxhKX0sYy5tYXRjaCgvXmh0dHBzPzpcL1wvfF5cL1wvL2kpfHwoYz1uZXcgd2luZG93LlVSTChjLGRvY3VtZW50LmxvY2F0aW9uLmhyZWYpLmhyZWYpLEh0ZS5jYWxsKHRoaXMse3R5'@;
put 'cGU6ImxheW91dCIsZG90OiIiLGVuZ2luZToiZG90Iix2aXpVUkw6Y30sZnVuY3Rpb24oYSl7fSksSHRlLmNhbGwodGhpcyx7dHlwZToidmVyc2lvbiJ9LGZ1bmN0aW9uKGEpeyJ2ZXJzaW9uIj09PWEuZGF0YS50eXBlJiYobC5fZ3JhcGh2aXpWZXJzaW9uPWEuZGF0YS52ZXJzaW9uLGwuX2Rp'@;
put 'c3BhdGNoLmNhbGwoImluaXRFbmQiLHRoaXMpKX0pfX1mdW5jdGlvbiBIdGUoYyxsKXt0aGlzLl93b3JrZXJDYWxsYmFja3MucHVzaChsKSx0aGlzLl93b3JrZXJQb3J0LnBvc3RNZXNzYWdlKGMpfWZ1bmN0aW9uIGVFdChjLGwpe3ZhciBhPXRoaXMuX29wdGlvbnMua2V5TW9kZSxkPXRoaXMu'@;
put 'X29wdGlvbnMudHdlZW5QYXRocyxoPXRoaXMuX29wdGlvbnMudHdlZW5TaGFwZXM7aWYoInN0cmluZyI9PXR5cGVvZiB0aGlzLl9vcHRpb25zLnR3ZWVuUHJlY2lzaW9uJiZ0aGlzLl9vcHRpb25zLnR3ZWVuUHJlY2lzaW9uLmluY2x1ZGVzKCIlIikpdmFyIGY9K3RoaXMuX29wdGlvbnMudHdl'@;
put 'ZW5QcmVjaXNpb24uc3BsaXQoIiUiKVswXS8xMDAsdj10aGlzLl9vcHRpb25zLnR3ZWVuUHJlY2lzaW9uLmluY2x1ZGVzKCIlIik7ZWxzZSBmPXRoaXMuX29wdGlvbnMudHdlZW5QcmVjaXNpb24sdj0hMTt2YXIgTT10aGlzLl9vcHRpb25zLmdyb3dFbnRlcmluZ0VkZ2VzLEQ9e30sWj10aGlz'@;
put 'Ll9kaWN0aW9uYXJ5fHx7fSxyZT17fSxjZT10aGlzLl9ub2RlRGljdGlvbmFyeXx8e307ZnVuY3Rpb24gcHQoR24sYWk9MCxfaSl7KGZ1bmN0aW9uIGJlKEduLGFpKXt2YXIgX2k9R24udGFnO2lmKCJpbmRleCI9PWEpR24ua2V5PWFpO2Vsc2UgaWYoIiMiIT1faVswXSlpZigiaWQiPT1hKUdu'@;
put 'LmtleT1Hbi5hdHRyaWJ1dGVzLmlkO2Vsc2UgaWYoInRpdGxlIj09YSl7dmFyIE9uPUduLmNoaWxkcmVuLmZpbmQoZnVuY3Rpb24oenIpe3JldHVybiJ0aXRsZSI9PXpyLnRhZ30pO09uJiYoR24ua2V5PU9uLmNoaWxkcmVuLmxlbmd0aD4wP09uLmNoaWxkcmVuWzBdLnRleHQ6IiIpfW51bGw9'@;
put 'PUduLmtleSYmKGgmJigiZWxsaXBzZSI9PV9pfHwicG9seWdvbiI9PV9pKSYmKF9pPSJwYXRoIiksR24ua2V5PV9pKyItIithaSl9KShHbixhaSksZnVuY3Rpb24gRWUoR24sYWkpe0duLmlkPShhaT9haS5pZCsiLiI6IiIpK0duLmtleX0oR24sX2kpO3ZhciB6cj1aW0duLmlkXTsoZnVuY3Rp'@;
put 'b24gQmUoR24pe0RbR24uaWRdPUdufSkoR24pLGZ1bmN0aW9uIHFlKEduLGFpKXtoJiZHbi5pZCBpbiBaJiYoInBvbHlnb24iPT1haS50YWd8fCJlbGxpcHNlIj09YWkudGFnfHwicGF0aCI9PWFpLnRhZykmJihhaS50YWchPUduLnRhZ3x8InBvbHlnb24iPT1Hbi50YWcpJiYoInBhdGgiIT1h'@;
put 'aS50YWcmJihHbi5hbHRlcm5hdGl2ZU9sZD1pN2UoYWksR24pKSwicGF0aCIhPUduLnRhZyYmKEduLmFsdGVybmF0aXZlTmV3PWk3ZShHbixhaSkpKX0oR24senIpLGZ1bmN0aW9uIHJ0KEduLGFpKXtpZihkJiZhaSYmKCJwYXRoIj09YWkudGFnfHxHbi5hbHRlcm5hdGl2ZU9sZCYmInBhdGgi'@;
put 'PT1Hbi5hbHRlcm5hdGl2ZU9sZC50YWcpKXt2YXIgX2k9KEduLmFsdGVybmF0aXZlTmV3fHxHbikuYXR0cmlidXRlcy5kO2lmKEduLmFsdGVybmF0aXZlT2xkKXZhciBPbj1rdGUoR24uYWx0ZXJuYXRpdmVPbGQpO2Vsc2UgT249a3RlKGFpKTsoR24uYWx0ZXJuYXRpdmVPbGR8fChHbi5hbHRl'@;
put 'cm5hdGl2ZU9sZD17fSkpLnBvaW50cz1mdW5jdGlvbiB2eHQoYyxsLGEsZCl7Y29uc3QgaD1jLGY9aC5jbG9uZU5vZGUoKSx2PWguZ2V0VG90YWxMZW5ndGgoKSxNPShmLnNldEF0dHJpYnV0ZSgiZCIsbCksZikuZ2V0VG90YWxMZW5ndGgoKSxEPVswXTtsZXQgWj0wO2NvbnN0IHJlPWQ/YTph'@;
put 'L01hdGgubWF4KHYsTSk7Zm9yKDsoWis9cmUpPDE7KUQucHVzaChaKTtyZXR1cm4gRC5wdXNoKDEpLEQubWFwKGZ1bmN0aW9uKGJlKXtjb25zdCBFZT1oLmdldFBvaW50QXRMZW5ndGgoYmUqdiksQmU9Zi5nZXRQb2ludEF0TGVuZ3RoKGJlKk0pO3JldHVybltbRWUueCxFZS55XSxbQmUueCxC'@;
put 'ZS55XV19KX0oT24sX2ksZix2KX19KEduLHpyKTt2YXIgSm49e307R24uY2hpbGRyZW4uZm9yRWFjaChmdW5jdGlvbihJcil7dmFyICRyPUlyLnRhZzsoImVsbGlwc2UiPT0kcnx8InBvbHlnb24iPT0kcikmJigkcj0icGF0aCIpLG51bGw9PUpuWyRyXSYmKEpuWyRyXT0wKSxwdChJcixKblsk'@;
put 'cl0rKyxHbil9KX1mdW5jdGlvbiB2bihHbil7KGZ1bmN0aW9uIGR0KEduKXtpZihNJiZHbi5wYXJlbnQmJiJub2RlIj09R24ucGFyZW50LmF0dHJpYnV0ZXMuY2xhc3MmJiJ0aXRsZSI9PUduLnRhZyl7aWYoR24uY2hpbGRyZW4ubGVuZ3RoPjApdmFyIE9uPUduLmNoaWxkcmVuWzBdLnRleHQ7'@;
put 'ZWxzZSBPbj0iIjtyZVtPbl09R24ucGFyZW50fX0pKEduKSxmdW5jdGlvbiBKdChHbil7dmFyIF9pPUduLnRhZztpZihNJiYhWltHbi5pZF0mJkduLnBhcmVudCYmUThlKEduKSYmKCJwYXRoIj09X2l8fCJwb2x5Z29uIj09X2kpKXtpZigicG9seWdvbiI9PV9pKXt2YXIgenI9R24ucGFyZW50'@;
put 'LmNoaWxkcmVuLmZpbmQoZnVuY3Rpb24oSHIpe3JldHVybiJwYXRoIj09SHIudGFnfSk7enImJihHbi50b3RhbExlbmd0aD16ci50b3RhbExlbmd0aCl9dmFyIEpuPWZ1bmN0aW9uIF94dChjKXtyZXR1cm4gZnVuY3Rpb24geXh0KGMpe3JldHVybiJlZGdlIj09Yy5wYXJlbnQuYXR0cmlidXRl'@;
put 'cy5jbGFzcz9jLnBhcmVudDpjLnBhcmVudC5wYXJlbnQucGFyZW50fShjKS5jaGlsZHJlbi5maW5kKGZ1bmN0aW9uKGwpe3JldHVybiJ0aXRsZSI9PWwudGFnfSl9KEduKSxJcj1Kbi5jaGlsZHJlblswXSwkcj1Jci50ZXh0LnNwbGl0KCItPiIpOzIhPSRyLmxlbmd0aCYmKCRyPUlyLnRleHQu'@;
put 'c3BsaXQoIi0tIikpO3ZhciB3aT0kclswXSxlYT1yZVt3aV07aWYoT2JqZWN0Lmhhc093bihjZSx3aSkpe3ZhciBmYT1jZVt3aV07aWYoKE50PWVhLmNoaWxkcmVuLmZpbmRJbmRleChmdW5jdGlvbihIcixxcil7cmV0dXJuImciPT1Ici50YWd9KSk+PTApe3ZhciB2dD1lYS5jaGlsZHJlbltO'@;
put 'dF0uY2hpbGRyZW4uZmluZEluZGV4KGZ1bmN0aW9uKEhyLHFyKXtyZXR1cm4iYSI9PUhyLnRhZ30pO2VhPWVhLmNoaWxkcmVuW050XS5jaGlsZHJlblt2dF19KE50PWZhLmNoaWxkcmVuLmZpbmRJbmRleChmdW5jdGlvbihIcixxcil7cmV0dXJuImciPT1Ici50YWd9KSk+PTAmJih2dD1mYS5j'@;
put 'aGlsZHJlbltOdF0uY2hpbGRyZW4uZmluZEluZGV4KGZ1bmN0aW9uKHFyLG9uKXtyZXR1cm4iYSI9PXFyLnRhZ30pLGZhPWZhLmNoaWxkcmVuW050XS5jaGlsZHJlblt2dF0pO2Zvcih2YXIgSHQ9ZWEuY2hpbGRyZW4sTnQ9MDtOdDxIdC5sZW5ndGg7TnQrKylpZigicG9seWdvbiI9PUh0W050'@;
put 'XS50YWd8fCJlbGxpcHNlIj09SHRbTnRdLnRhZ3x8InBhdGgiPT1IdFtOdF0udGFnfHwidGV4dCI9PUh0W050XS50YWcpe3ZhciBIbj1IdFtOdF07YnJlYWt9dmFyIHRyPWZhLmNoaWxkcmVuO2ZvcihOdD0wO050PHRyLmxlbmd0aDtOdCsrKWlmKCJwb2x5Z29uIj09dHJbTnRdLnRhZ3x8ImVs'@;
put 'bGlwc2UiPT10cltOdF0udGFnfHwicGF0aCI9PXRyW050XS50YWd8fCJ0ZXh0Ij09dHJbTnRdLnRhZyl7dmFyIGFyPXRyW050XTticmVha31Hbi5vZmZzZXQ9YXImJkhuP3t4OmFyLmNlbnRlci54LUhuLmNlbnRlci54LHk6YXIuY2VudGVyLnktSG4uY2VudGVyLnl9Ont4OjAseTowfX19fShH'@;
put 'biksR24uY2hpbGRyZW4uZm9yRWFjaChmdW5jdGlvbihhaSl7dm4oYWkpfSl9dGhpcy5fZGlzcGF0Y2guY2FsbCgibGF5b3V0RW5kIix0aGlzKTt2YXIgQ249d3MoZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpKS5hcHBlbmQoImRpdiIpLE1uPShuZXcgd2luZG93LkRPTVBhcnNl'@;
put 'cikucGFyc2VGcm9tU3RyaW5nKGMsImltYWdlL3N2Zyt4bWwiKTtDbi5hcHBlbmQoZnVuY3Rpb24oKXtyZXR1cm4gTW4uZG9jdW1lbnRFbGVtZW50fSk7dmFyIEdyPW52KENuLnNlbGVjdCgic3ZnIikpO3RoaXMuX2Rpc3BhdGNoLmNhbGwoImRhdGFFeHRyYWN0RW5kIix0aGlzKSxwdChHciks'@;
put 'dGhpcy5fZGlzcGF0Y2guY2FsbCgiZGF0YVByb2Nlc3NQYXNzMUVuZCIsdGhpcyksdm4oR3IpLHRoaXMuX2Rpc3BhdGNoLmNhbGwoImRhdGFQcm9jZXNzUGFzczJFbmQiLHRoaXMpLHRoaXMuX2RhdGE9R3IsdGhpcy5fZGljdGlvbmFyeT1ELHRoaXMuX25vZGVEaWN0aW9uYXJ5PXJlLHRoaXMu'@;
put 'X2V4dHJhY3REYXRhPWZ1bmN0aW9uKEduLGFpLF9pKXt2YXIgT249bnYoR24pO3JldHVybiBwdChPbixhaSxfaSksdm4oT24pLE9ufSx0aGlzLl9idXN5PSExLHRoaXMuX2Rpc3BhdGNoLmNhbGwoImRhdGFQcm9jZXNzRW5kIix0aGlzKSxsJiZsLmNhbGwodGhpcyksdGhpcy5fcXVldWUubGVu'@;
put 'Z3RoPjAmJnRoaXMuX3F1ZXVlLnNoaWZ0KCkuY2FsbCh0aGlzKX1mdW5jdGlvbiBITihjLGwpe2lmKChhPShjPWw/Yy50b0V4cG9uZW50aWFsKGwtMSk6Yy50b0V4cG9uZW50aWFsKCkpLmluZGV4T2YoImUiKSk8MClyZXR1cm4gbnVsbDt2YXIgYSxkPWMuc2xpY2UoMCxhKTtyZXR1cm5bZC5s'@;
put 'ZW5ndGg+MT9kWzBdK2Quc2xpY2UoMik6ZCwrYy5zbGljZShhKzEpXX12YXIgYTdlLHhFdD0vXig/OiguKT8oWzw+PV5dKSk/KFsrXC0oIF0pPyhbJCNdKT8oMCk/KFxkKyk/KCwpPyhcLlxkKyk/KH4pPyhbYS16JV0pPyQvaTtmdW5jdGlvbiBOdGUoYyl7aWYoIShsPXhFdC5leGVjKGMpKSl0'@;
put 'aHJvdyBuZXcgRXJyb3IoImludmFsaWQgZm9ybWF0OiAiK2MpO3ZhciBsO3JldHVybiBuZXcgVnRlKHtmaWxsOmxbMV0sYWxpZ246bFsyXSxzaWduOmxbM10sc3ltYm9sOmxbNF0semVybzpsWzVdLHdpZHRoOmxbNl0sY29tbWE6bFs3XSxwcmVjaXNpb246bFs4XSYmbFs4XS5zbGljZSgxKSx0'@;
put 'cmltOmxbOV0sdHlwZTpsWzEwXX0pfWZ1bmN0aW9uIFZ0ZShjKXt0aGlzLmZpbGw9dm9pZCAwPT09Yy5maWxsPyIgIjpjLmZpbGwrIiIsdGhpcy5hbGlnbj12b2lkIDA9PT1jLmFsaWduPyI+IjpjLmFsaWduKyIiLHRoaXMuc2lnbj12b2lkIDA9PT1jLnNpZ24/Ii0iOmMuc2lnbisiIix0aGlz'@;
put 'LnN5bWJvbD12b2lkIDA9PT1jLnN5bWJvbD8iIjpjLnN5bWJvbCsiIix0aGlzLnplcm89ISFjLnplcm8sdGhpcy53aWR0aD12b2lkIDA9PT1jLndpZHRoP3ZvaWQgMDorYy53aWR0aCx0aGlzLmNvbW1hPSEhYy5jb21tYSx0aGlzLnByZWNpc2lvbj12b2lkIDA9PT1jLnByZWNpc2lvbj92b2lk'@;
put 'IDA6K2MucHJlY2lzaW9uLHRoaXMudHJpbT0hIWMudHJpbSx0aGlzLnR5cGU9dm9pZCAwPT09Yy50eXBlPyIiOmMudHlwZSsiIn1mdW5jdGlvbiBvN2UoYyxsKXt2YXIgYT1ITihjLGwpO2lmKCFhKXJldHVybiBjKyIiO3ZhciBkPWFbMF0saD1hWzFdO3JldHVybiBoPDA/IjAuIituZXcgQXJy'@;
put 'YXkoLWgpLmpvaW4oIjAiKStkOmQubGVuZ3RoPmgrMT9kLnNsaWNlKDAsaCsxKSsiLiIrZC5zbGljZShoKzEpOmQrbmV3IEFycmF5KGgtZC5sZW5ndGgrMikuam9pbigiMCIpfU50ZS5wcm90b3R5cGU9VnRlLnByb3RvdHlwZSxWdGUucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0'@;
put 'dXJuIHRoaXMuZmlsbCt0aGlzLmFsaWduK3RoaXMuc2lnbit0aGlzLnN5bWJvbCsodGhpcy56ZXJvPyIwIjoiIikrKHZvaWQgMD09PXRoaXMud2lkdGg/IiI6TWF0aC5tYXgoMSwwfHRoaXMud2lkdGgpKSsodGhpcy5jb21tYT8iLCI6IiIpKyh2b2lkIDA9PT10aGlzLnByZWNpc2lvbj8iIjoi'@;
put 'LiIrTWF0aC5tYXgoMCwwfHRoaXMucHJlY2lzaW9uKSkrKHRoaXMudHJpbT8ifiI6IiIpK3RoaXMudHlwZX07Y29uc3QgczdlPXsiJSI6KGMsbCk9PigxMDAqYykudG9GaXhlZChsKSxiOmM9Pk1hdGgucm91bmQoYykudG9TdHJpbmcoMiksYzpjPT5jKyIiLGQ6ZnVuY3Rpb24gd0V0KGMpe3Jl'@;
put 'dHVybiBNYXRoLmFicyhjPU1hdGgucm91bmQoYykpPj0xZTIxP2MudG9Mb2NhbGVTdHJpbmcoImVuIikucmVwbGFjZSgvLC9nLCIiKTpjLnRvU3RyaW5nKDEwKX0sZTooYyxsKT0+Yy50b0V4cG9uZW50aWFsKGwpLGY6KGMsbCk9PmMudG9GaXhlZChsKSxnOihjLGwpPT5jLnRvUHJlY2lzaW9u'@;
put 'KGwpLG86Yz0+TWF0aC5yb3VuZChjKS50b1N0cmluZyg4KSxwOihjLGwpPT5vN2UoMTAwKmMsbCkscjpvN2UsczpmdW5jdGlvbiBURXQoYyxsKXt2YXIgYT1ITihjLGwpO2lmKCFhKXJldHVybiBjKyIiO3ZhciBkPWFbMF0saD1hWzFdLGY9aC0oYTdlPTMqTWF0aC5tYXgoLTgsTWF0aC5taW4o'@;
put 'OCxNYXRoLmZsb29yKGgvMykpKSkrMSx2PWQubGVuZ3RoO3JldHVybiBmPT09dj9kOmY+dj9kK25ldyBBcnJheShmLXYrMSkuam9pbigiMCIpOmY+MD9kLnNsaWNlKDAsZikrIi4iK2Quc2xpY2UoZik6IjAuIituZXcgQXJyYXkoMS1mKS5qb2luKCIwIikrSE4oYyxNYXRoLm1heCgwLGwrZi0x'@;
put 'KSlbMF19LFg6Yz0+TWF0aC5yb3VuZChjKS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKSx4OmM9Pk1hdGgucm91bmQoYykudG9TdHJpbmcoMTYpfTtmdW5jdGlvbiBsN2UoYyl7cmV0dXJuIGN9dmFyIE5OLGFmLGM3ZT1BcnJheS5wcm90b3R5cGUubWFwLHU3ZT1bInkiLCJ6IiwiYSIsImYi'@;
put 'LCJwIiwibiIsIlx4YjUiLCJtIiwiIiwiayIsIk0iLCJHIiwiVCIsIlAiLCJFIiwiWiIsIlkiXTshZnVuY3Rpb24gREV0KGMpe05OPWZ1bmN0aW9uIEFFdChjKXt2YXIgbD12b2lkIDA9PT1jLmdyb3VwaW5nfHx2b2lkIDA9PT1jLnRob3VzYW5kcz9sN2U6ZnVuY3Rpb24gU0V0KGMsbCl7cmV0'@;
put 'dXJuIGZ1bmN0aW9uKGEsZCl7Zm9yKHZhciBoPWEubGVuZ3RoLGY9W10sdj0wLE09Y1swXSxEPTA7aD4wJiZNPjAmJihEK00rMT5kJiYoTT1NYXRoLm1heCgxLGQtRCkpLGYucHVzaChhLnN1YnN0cmluZyhoLT1NLGgrTSkpLCEoKEQrPU0rMSk+ZCkpOylNPWNbdj0odisxKSVjLmxlbmd0aF07'@;
put 'cmV0dXJuIGYucmV2ZXJzZSgpLmpvaW4obCl9fShjN2UuY2FsbChjLmdyb3VwaW5nLE51bWJlciksYy50aG91c2FuZHMrIiIpLGE9dm9pZCAwPT09Yy5jdXJyZW5jeT8iIjpjLmN1cnJlbmN5WzBdKyIiLGQ9dm9pZCAwPT09Yy5jdXJyZW5jeT8iIjpjLmN1cnJlbmN5WzFdKyIiLGg9dm9pZCAw'@;
put 'PT09Yy5kZWNpbWFsPyIuIjpjLmRlY2ltYWwrIiIsZj12b2lkIDA9PT1jLm51bWVyYWxzP2w3ZTpmdW5jdGlvbiBNRXQoYyl7cmV0dXJuIGZ1bmN0aW9uKGwpe3JldHVybiBsLnJlcGxhY2UoL1swLTldL2csZnVuY3Rpb24oYSl7cmV0dXJuIGNbK2FdfSl9fShjN2UuY2FsbChjLm51bWVyYWxz'@;
put 'LFN0cmluZykpLHY9dm9pZCAwPT09Yy5wZXJjZW50PyIlIjpjLnBlcmNlbnQrIiIsTT12b2lkIDA9PT1jLm1pbnVzPyJcdTIyMTIiOmMubWludXMrIiIsRD12b2lkIDA9PT1jLm5hbj8iTmFOIjpjLm5hbisiIjtmdW5jdGlvbiBaKGNlKXt2YXIgYmU9KGNlPU50ZShjZSkpLmZpbGwsRWU9Y2Uu'@;
put 'YWxpZ24sQmU9Y2Uuc2lnbixxZT1jZS5zeW1ib2wscnQ9Y2UuemVybyxwdD1jZS53aWR0aCxkdD1jZS5jb21tYSxKdD1jZS5wcmVjaXNpb24sdm49Y2UudHJpbSxDbj1jZS50eXBlOyJuIj09PUNuPyhkdD0hMCxDbj0iZyIpOnM3ZVtDbl18fCh2b2lkIDA9PT1KdCYmKEp0PTEyKSx2bj0hMCxD'@;
put 'bj0iZyIpLChydHx8IjAiPT09YmUmJiI9Ij09PUVlKSYmKHJ0PSEwLGJlPSIwIixFZT0iPSIpO3ZhciB0bj0iJCI9PT1xZT9hOiIjIj09PXFlJiYvW2JveFhdLy50ZXN0KENuKT8iMCIrQ24udG9Mb3dlckNhc2UoKToiIixNbj0iJCI9PT1xZT9kOi9bJXBdLy50ZXN0KENuKT92OiIiLENyPXM3'@;
put 'ZVtDbl0sR3I9L1tkZWZncHJzJV0vLnRlc3QoQ24pO2Z1bmN0aW9uIG1yKEduKXt2YXIgT24senIsSm4sYWk9dG4sX2k9TW47aWYoImMiPT09Q24pX2k9Q3IoR24pK19pLEduPSIiO2Vsc2V7dmFyIElyPShHbj0rR24pPDB8fDEvR248MDtpZihHbj1pc05hTihHbik/RDpDcihNYXRoLmFicyhH'@;
put 'biksSnQpLHZuJiYoR249ZnVuY3Rpb24gRUV0KGMpe2U6Zm9yKHZhciBoLGw9Yy5sZW5ndGgsYT0xLGQ9LTE7YTxsOysrYSlzd2l0Y2goY1thXSl7Y2FzZSIuIjpkPWg9YTticmVhaztjYXNlIjAiOjA9PT1kJiYoZD1hKSxoPWE7YnJlYWs7ZGVmYXVsdDppZighK2NbYV0pYnJlYWsgZTtkPjAm'@;
put 'JihkPTApfXJldHVybiBkPjA/Yy5zbGljZSgwLGQpK2Muc2xpY2UoaCsxKTpjfShHbikpLElyJiYwPT0rR24mJiIrIiE9PUJlJiYoSXI9ITEpLGFpPShJcj8iKCI9PT1CZT9CZTpNOiItIj09PUJlfHwiKCI9PT1CZT8iIjpCZSkrYWksX2k9KCJzIj09PUNuP3U3ZVs4K2E3ZS8zXToiIikrX2kr'@;
put 'KElyJiYiKCI9PT1CZT8iKSI6IiIpLEdyKWZvcihPbj0tMSx6cj1Hbi5sZW5ndGg7KytPbjx6cjspaWYoNDg+KEpuPUduLmNoYXJDb2RlQXQoT24pKXx8Sm4+NTcpe19pPSg0Nj09PUpuP2grR24uc2xpY2UoT24rMSk6R24uc2xpY2UoT24pKStfaSxHbj1Hbi5zbGljZSgwLE9uKTticmVha319'@;
put 'ZHQmJiFydCYmKEduPWwoR24sMS8wKSk7dmFyICRyPWFpLmxlbmd0aCtHbi5sZW5ndGgrX2kubGVuZ3RoLHdpPSRyPHB0P25ldyBBcnJheShwdC0kcisxKS5qb2luKGJlKToiIjtzd2l0Y2goZHQmJnJ0JiYoR249bCh3aStHbix3aS5sZW5ndGg/cHQtX2kubGVuZ3RoOjEvMCksd2k9IiIpLEVl'@;
put 'KXtjYXNlIjwiOkduPWFpK0duK19pK3dpO2JyZWFrO2Nhc2UiPSI6R249YWkrd2krR24rX2k7YnJlYWs7Y2FzZSJeIjpHbj13aS5zbGljZSgwLCRyPXdpLmxlbmd0aD4+MSkrYWkrR24rX2krd2kuc2xpY2UoJHIpO2JyZWFrO2RlZmF1bHQ6R249d2krYWkrR24rX2l9cmV0dXJuIGYoR24pfXJl'@;
put 'dHVybiBKdD12b2lkIDA9PT1KdD82Oi9bZ3Byc10vLnRlc3QoQ24pP01hdGgubWF4KDEsTWF0aC5taW4oMjEsSnQpKTpNYXRoLm1heCgwLE1hdGgubWluKDIwLEp0KSksbXIudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gY2UrIiJ9LG1yfXJldHVybntmb3JtYXQ6Wixmb3JtYXRQcmVmaXg6'@;
put 'ZnVuY3Rpb24gcmUoY2UsYmUpe3ZhciBFZT1aKCgoY2U9TnRlKGNlKSkudHlwZT0iZiIsY2UpKSxCZT0zKk1hdGgubWF4KC04LE1hdGgubWluKDgsTWF0aC5mbG9vcihmdW5jdGlvbiBDRXQoYyl7cmV0dXJuKGM9SE4oTWF0aC5hYnMoYykpKT9jWzFdOk5hTn0oYmUpLzMpKSkscWU9TWF0aC5w'@;
put 'b3coMTAsLUJlKSxydD11N2VbOCtCZS8zXTtyZXR1cm4gZnVuY3Rpb24ocHQpe3JldHVybiBFZShxZSpwdCkrcnR9fX19KGMpLGFmPU5OLmZvcm1hdH0oe3Rob3VzYW5kczoiLCIsZ3JvdXBpbmc6WzNdLGN1cnJlbmN5OlsiJCIsIiJdfSk7Y29uc3QgQnRlPU1hdGguUEksanRlPTIqQnRlLGl2'@;
put 'PTFlLTYsTEV0PWp0ZS1pdjtmdW5jdGlvbiBkN2UoYyl7dGhpcy5fKz1jWzBdO2ZvcihsZXQgbD0xLGE9Yy5sZW5ndGg7bDxhOysrbCl0aGlzLl8rPWFyZ3VtZW50c1tsXStjW2xdfWNsYXNzIHp0ZXtjb25zdHJ1Y3RvcihsKXt0aGlzLl94MD10aGlzLl95MD10aGlzLl94MT10aGlzLl95MT1u'@;
put 'dWxsLHRoaXMuXz0iIix0aGlzLl9hcHBlbmQ9bnVsbD09bD9kN2U6ZnVuY3Rpb24gT0V0KGMpe2xldCBsPU1hdGguZmxvb3IoYyk7aWYoIShsPj0wKSl0aHJvdyBuZXcgRXJyb3IoYGludmFsaWQgZGlnaXRzOiAke2N9YCk7aWYobD4xNSlyZXR1cm4gZDdlO2NvbnN0IGE9MTAqKmw7cmV0dXJu'@;
put 'IGZ1bmN0aW9uKGQpe3RoaXMuXys9ZFswXTtmb3IobGV0IGg9MSxmPWQubGVuZ3RoO2g8ZjsrK2gpdGhpcy5fKz1NYXRoLnJvdW5kKGFyZ3VtZW50c1toXSphKS9hK2RbaF19fShsKX1tb3ZlVG8obCxhKXt0aGlzLl9hcHBlbmRgTSR7dGhpcy5feDA9dGhpcy5feDE9K2x9LCR7dGhpcy5feTA9'@;
put 'dGhpcy5feTE9K2F9YH1jbG9zZVBhdGgoKXtudWxsIT09dGhpcy5feDEmJih0aGlzLl94MT10aGlzLl94MCx0aGlzLl95MT10aGlzLl95MCx0aGlzLl9hcHBlbmRgWmApfWxpbmVUbyhsLGEpe3RoaXMuX2FwcGVuZGBMJHt0aGlzLl94MT0rbH0sJHt0aGlzLl95MT0rYX1gfXF1YWRyYXRpY0N1'@;
put 'cnZlVG8obCxhLGQsaCl7dGhpcy5fYXBwZW5kYFEkeytsfSwkeythfSwke3RoaXMuX3gxPStkfSwke3RoaXMuX3kxPStofWB9YmV6aWVyQ3VydmVUbyhsLGEsZCxoLGYsdil7dGhpcy5fYXBwZW5kYEMkeytsfSwkeythfSwkeytkfSwkeytofSwke3RoaXMuX3gxPStmfSwke3RoaXMuX3kxPSt2'@;
put 'fWB9YXJjVG8obCxhLGQsaCxmKXtpZihsPStsLGE9K2EsZD0rZCxoPStoLChmPStmKTwwKXRocm93IG5ldyBFcnJvcihgbmVnYXRpdmUgcmFkaXVzOiAke2Z9YCk7bGV0IHY9dGhpcy5feDEsTT10aGlzLl95MSxEPWQtbCxaPWgtYSxyZT12LWwsY2U9TS1hLGJlPXJlKnJlK2NlKmNlO2lmKG51'@;
put 'bGw9PT10aGlzLl94MSl0aGlzLl9hcHBlbmRgTSR7dGhpcy5feDE9bH0sJHt0aGlzLl95MT1hfWA7ZWxzZSBpZihiZT5pdilpZihNYXRoLmFicyhjZSpELVoqcmUpPml2JiZmKXtsZXQgRWU9ZC12LEJlPWgtTSxxZT1EKkQrWipaLHJ0PUVlKkVlK0JlKkJlLHB0PU1hdGguc3FydChxZSksZHQ9'@;
put 'TWF0aC5zcXJ0KGJlKSxKdD1mKk1hdGgudGFuKChCdGUtTWF0aC5hY29zKChxZStiZS1ydCkvKDIqcHQqZHQpKSkvMiksdm49SnQvZHQsQ249SnQvcHQ7TWF0aC5hYnModm4tMSk+aXYmJnRoaXMuX2FwcGVuZGBMJHtsK3ZuKnJlfSwke2Erdm4qY2V9YCx0aGlzLl9hcHBlbmRgQSR7Zn0sJHtm'@;
put 'fSwwLDAsJHsrKGNlKkVlPnJlKkJlKX0sJHt0aGlzLl94MT1sK0NuKkR9LCR7dGhpcy5feTE9YStDbipafWB9ZWxzZSB0aGlzLl9hcHBlbmRgTCR7dGhpcy5feDE9bH0sJHt0aGlzLl95MT1hfWB9YXJjKGwsYSxkLGgsZix2KXtpZihsPStsLGE9K2Esdj0hIXYsKGQ9K2QpPDApdGhyb3cgbmV3'@;
put 'IEVycm9yKGBuZWdhdGl2ZSByYWRpdXM6ICR7ZH1gKTtsZXQgTT1kKk1hdGguY29zKGgpLEQ9ZCpNYXRoLnNpbihoKSxaPWwrTSxyZT1hK0QsY2U9MV52LGJlPXY/aC1mOmYtaDtudWxsPT09dGhpcy5feDE/dGhpcy5fYXBwZW5kYE0ke1p9LCR7cmV9YDooTWF0aC5hYnModGhpcy5feDEtWik+'@;
put 'aXZ8fE1hdGguYWJzKHRoaXMuX3kxLXJlKT5pdikmJnRoaXMuX2FwcGVuZGBMJHtafSwke3JlfWAsZCYmKGJlPDAmJihiZT1iZSVqdGUranRlKSxiZT5MRXQ/dGhpcy5fYXBwZW5kYEEke2R9LCR7ZH0sMCwxLCR7Y2V9LCR7bC1NfSwke2EtRH1BJHtkfSwke2R9LDAsMSwke2NlfSwke3RoaXMu'@;
put 'X3gxPVp9LCR7dGhpcy5feTE9cmV9YDpiZT5pdiYmdGhpcy5fYXBwZW5kYEEke2R9LCR7ZH0sMCwkeysoYmU+PUJ0ZSl9LCR7Y2V9LCR7dGhpcy5feDE9bCtkKk1hdGguY29zKGYpfSwke3RoaXMuX3kxPWErZCpNYXRoLnNpbihmKX1gKX1yZWN0KGwsYSxkLGgpe3RoaXMuX2FwcGVuZGBNJHt0'@;
put 'aGlzLl94MD10aGlzLl94MT0rbH0sJHt0aGlzLl95MD10aGlzLl95MT0rYX1oJHtkPStkfXYkeytofWgkey1kfVpgfXRvU3RyaW5nKCl7cmV0dXJuIHRoaXMuX319ZnVuY3Rpb24gaDdlKCl7cmV0dXJuIG5ldyB6dGV9ZnVuY3Rpb24gUEV0KGMsbCxhLGQpe3JldHVybiBsPS1sLGQ9LWQsW2Ms'@;
put 'bF09W2MqYS1sKmQsYypkK2wqYV0sW2MsbD0tbF19ZnVuY3Rpb24gZjdlKGMsbCxhLGQsaCxmLHYpe3ZhciBEPW52KHY3ZS5jYWxsKHRoaXMsZikpO2MuZGF0YShbRF0pLE9BLmNhbGwoYy5ub2RlKCksRCkscDdlKGMsbCxhLGQsaCxmLHYpfWZ1bmN0aW9uIHA3ZShjLGwsYSxkLGgsZix2KXt2'@;
put 'YXIgTT12LnNob3J0ZW5pbmd8fDAsY2U9W1swLC0zLjVdLFsxMCwwXSxbMCwzLjVdLFswLC0zLjVdXSxiZT1kLWwsRWU9aC1hLEJlPU1hdGguc3FydChiZSpiZStFZSpFZSk7aWYoMD09QmUpdmFyIHFlPTEscnQ9MDtlbHNlIHFlPWJlL0JlLHJ0PUVlL0JlO2lmKGQ9bCsoQmUtTS0xMC0uMSkq'@;
put 'cWUsaD1hKyhCZS1NLTEwLS4xKSpydCxmLlVSTHx8Zi50b29sdGlwKXZhciBwdD1jLnNlbGVjdFdpdGhvdXREYXRhUHJvcGFnYXRpb24oImciKS5zZWxlY3RXaXRob3V0RGF0YVByb3BhZ2F0aW9uKCJhIiksZHQ9cHQuc2VsZWN0V2l0aG91dERhdGFQcm9wYWdhdGlvbigicGF0aCIpLEp0PXB0'@;
put 'LnNlbGVjdFdpdGhvdXREYXRhUHJvcGFnYXRpb24oInBvbHlnb24iKTtlbHNlIGR0PWMuc2VsZWN0V2l0aG91dERhdGFQcm9wYWdhdGlvbigicGF0aCIpLEp0PWMuc2VsZWN0V2l0aG91dERhdGFQcm9wYWdhdGlvbigicG9seWdvbiIpO3ZhciB2bj1oN2UoKTt2bi5tb3ZlVG8obCxhKSx2bi5s'@;
put 'aW5lVG8oZCxoKSxkdC5hdHRyKCJkIix2biksZD1sKyhCZS1NLTEwKSpxZSxoPWErKEJlLU0tMTApKnJ0O2Zvcih2YXIgQ249MDtDbjxjZS5sZW5ndGg7Q24rKyljZVtDbl09UEV0KCh0bj1jZVtDbl0pWzBdLHRuWzFdLHFlLHJ0KTtmb3IoQ249MDtDbjxjZS5sZW5ndGg7Q24rKyljZVtDbl09'@;
put 'W2QrKHRuPWNlW0NuXSlbMF0saCt0blsxXV07dmFyIE1uPVtdO2ZvcihDbj0wO0NuPGNlLmxlbmd0aDtDbisrKXt2YXIgdG47TW4ucHVzaCgodG49Y2VbQ25dKS5qb2luKCIsIikpfXZhciBDcj1Nbi5qb2luKCIgIik7cmV0dXJuIEp0LmF0dHIoInBvaW50cyIsQ3IpLHRoaXN9ZnVuY3Rpb24g'@;
put 'ZzdlKCl7cmV0dXJuIHRoaXMuX2RyYXduRWRnZT8odGhpcy5fZHJhd25FZGdlLmcucmVtb3ZlKCksdGhpcy5fZHJhd25FZGdlPW51bGwsdGhpcyk6dGhpc31mdW5jdGlvbiBtN2UoKXtyZXR1cm4gdGhpcy5fZHJhd25FZGdlP3RoaXMuX2RyYXduRWRnZS5nOndzKG51bGwpfWZ1bmN0aW9uIHY3'@;
put 'ZShjKXt2YXIgbD0iIjtmb3IodmFyIGEgb2YgT2JqZWN0LmtleXMoYykpbnVsbCE9Y1thXSYmKGwrPScgIicrYSsnIj0iJytjW2FdKyciJyk7dmFyIGg9dGhpcy5sYXlvdXRTeW5jKCJkaWdyYXBoIHthIC0+IGIgWyIrbCsiXX0iLCJzdmciLCJkb3QiKSx2PShuZXcgd2luZG93LkRPTVBhcnNl'@;
put 'cikucGFyc2VGcm9tU3RyaW5nKGgsImltYWdlL3N2Zyt4bWwiKTtyZXR1cm4gd3MoZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpKS5hcHBlbmQoZnVuY3Rpb24oKXtyZXR1cm4gdi5kb2N1bWVudEVsZW1lbnR9KS5zZWxlY3QoIi5lZGdlIil9ZnVuY3Rpb24gYjdlKGMsbCxhLGQs'@;
put 'aCxmKXt2YXIgTT1udihDN2UuY2FsbCh0aGlzLGQsaCkpO3JldHVybiBjLmRhdGEoW01dKSxPQS5jYWxsKGMubm9kZSgpLE0pLHk3ZShjLGwsYSxoKSx0aGlzfWZ1bmN0aW9uIHk3ZShjLGwsYSxkLGgpe2lmKGQuVVJMfHxkLnRvb2x0aXApdmFyIGY9Yy5zZWxlY3RXaXRob3V0RGF0YVByb3Bh'@;
put 'Z2F0aW9uKCJnIikuc2VsZWN0V2l0aG91dERhdGFQcm9wYWdhdGlvbigiYSIpO2Vsc2UgZj1jO3ZhciB2PWYuc2VsZWN0QWxsKCJlbGxpcHNlLHBvbHlnb24scGF0aCxwb2x5bGluZSIpLE09Yy5zZWxlY3RXaXRob3V0RGF0YVByb3BhZ2F0aW9uKCJ0ZXh0Iik7aWYoMCE9di5zaXplKCkpe3Zh'@;
put 'ciBEPXYubm9kZSgpLmdldEJCb3goKTtELmN4PUQueCtELndpZHRoLzIsRC5jeT1ELnkrRC5oZWlnaHQvMn1lbHNlIDAhPU0uc2l6ZSgpJiYoRD17eDorTS5hdHRyKCJ4IikseTorTS5hdHRyKCJ5Iiksd2lkdGg6MCxoZWlnaHQ6MCxjeDorTS5hdHRyKCJ4IiksY3k6K00uYXR0cigieSIpfSk7'@;
put 'cmV0dXJuIHYuZWFjaChmdW5jdGlvbihaLHJlKXt2YXIgY2U9d3ModGhpcyk7aWYoY2UuYXR0cigiY3giKSljZS5hdHRyKCJjeCIsTTYobCkpLmF0dHIoImN5IixNNihhKSk7ZWxzZSBpZihjZS5hdHRyKCJwb2ludHMiKSl7dmFyIGJlPWNlLmF0dHIoInBvaW50cyIpLnRyaW0oKTtjZS5hdHRy'@;
put 'KCJwb2ludHMiLGZ1bmN0aW9uIEt4dChmLGwsYSl7dmFyIGgsZD0oaD1mLnNwbGl0KCIgIikpLm1hcChmdW5jdGlvbih2KXtyZXR1cm4gdi5zcGxpdCgiLCIpfSk7cmV0dXJuIGQ9aC5tYXAoZnVuY3Rpb24odil7cmV0dXJuW002KCtsKyArdi5zcGxpdCgiLCIpWzBdKSxNNigrYSsgK3Yuc3Bs'@;
put 'aXQoIiwiKVsxXSldfSksKGg9ZC5tYXAoZnVuY3Rpb24odil7cmV0dXJuIHYuam9pbigiLCIpfSkpLmpvaW4oIiAiKX0oYmUsbC1ELmN4LGEtRC5jeSkpfWVsc2V7dmFyIEVlPWNlLmF0dHIoImQiKTtjZS5hdHRyKCJkIixmdW5jdGlvbiBxeHQoYyxsLGEpeyhmPWMuc3BsaXQoL1tBLVogXS8p'@;
put 'KS5zaGlmdCgpO3ZhciBkPWMuc3BsaXQoL1teW0EtWiBdKy8pLGY9KGYubWFwKGZ1bmN0aW9uKHYpe3JldHVybiB2LnNwbGl0KCIsIil9KSxmLm1hcChmdW5jdGlvbih2KXtyZXR1cm5bTTYoK2wrICt2LnNwbGl0KCIsIilbMF0pLE02KCthKyArdi5zcGxpdCgiLCIpWzFdKV19KS5tYXAoZnVu'@;
put 'Y3Rpb24odil7cmV0dXJuIHYuam9pbigiLCIpfSkpO3JldHVybiBkLnJlZHVjZShmdW5jdGlvbih2LE0sRCl7cmV0dXJuIHYuY29uY2F0KE0sZltEXSl9LFtdKS5qb2luKCIiKX0oRWUsbC1ELmN4LGEtRC5jeSkpfX0pLDAhPU0uc2l6ZSgpJiZNLmF0dHIoIngiLE02KCtNLmF0dHIoIngiKSts'@;
put 'LUQuY3gpKS5hdHRyKCJ5IixNNigrTS5hdHRyKCJ5IikrYS1ELmN5KSksdGhpc31mdW5jdGlvbiBfN2UoKXtpZighdGhpcy5fZHJhd25Ob2RlKXJldHVybiB0aGlzO3ZhciBjPXRoaXMuX2RyYXduTm9kZS5nO3JldHVybiBjLmVtcHR5KCl8fGMucmVtb3ZlKCksdGhpcy5fZHJhd25Ob2RlPW51'@;
put 'bGwsdGhpc31mdW5jdGlvbiB3N2UoKXtyZXR1cm4gdGhpcy5fZHJhd25Ob2RlP3RoaXMuX2RyYXduTm9kZS5nOndzKG51bGwpfWZ1bmN0aW9uIEM3ZShjLGwpe3ZhciBhPSIiO2Zvcih2YXIgZCBvZiBPYmplY3Qua2V5cyhsKSludWxsIT1sW2RdJiYoYSs9JyAiJytkKyciPSInK2xbZF0rJyIn'@;
put 'KTt2YXIgZj10aGlzLmxheW91dFN5bmMoJ2dyYXBoIHsiJytjKyciIFsnK2ErIl19Iiwic3ZnIiwiZG90IiksTT0obmV3IHdpbmRvdy5ET01QYXJzZXIpLnBhcnNlRnJvbVN0cmluZyhmLCJpbWFnZS9zdmcreG1sIik7cmV0dXJuIHdzKGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQo'@;
put 'KSkuYXBwZW5kKGZ1bmN0aW9uKCl7cmV0dXJuIE0uZG9jdW1lbnRFbGVtZW50fSkuc2VsZWN0KCIubm9kZSIpfWZ1bmN0aW9uIFZOKGMpe3NlbGYuZG9jdW1lbnQ9e30sYy5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIixmdW5jdGlvbihsKXtsZXQgYT1zZWxmWyJAaHBjYy1qcy93YXNtIl07'@;
put 'bnVsbD09YSYmbC5kYXRhLnZpelVSTCYmKGltcG9ydFNjcmlwdHMobC5kYXRhLnZpelVSTCksYT1zZWxmWyJAaHBjYy1qcy93YXNtIl0pLCJ2ZXJzaW9uIiE9bC5kYXRhLnR5cGU/YS5HcmFwaHZpei5sb2FkKCkudGhlbihkPT57Y29uc3QgaD1kLmxheW91dChsLmRhdGEuZG90LCJzdmciLGwu'@;
put 'ZGF0YS5lbmdpbmUsbC5kYXRhLm9wdGlvbnMpO2MucG9zdE1lc3NhZ2UoaD97dHlwZToiZG9uZSIsc3ZnOmh9OmwuZGF0YS52aXpVUkw/e3R5cGU6ImluaXQifTp7dHlwZToic2tpcCJ9KX0pLmNhdGNoKGQ9PntjLnBvc3RNZXNzYWdlKHt0eXBlOiJlcnJvciIsZXJyb3I6ZC5tZXNzYWdlfSl9'@;
put 'KTphLkdyYXBodml6LmxvYWQoKS50aGVuKGQ9PntjLnBvc3RNZXNzYWdlKHt0eXBlOiJ2ZXJzaW9uIix2ZXJzaW9uOmQudmVyc2lvbigpfSl9KX0pfWZ1bmN0aW9uIFpFdCgpe1ZOKHNlbGYpfWZ1bmN0aW9uIFdFdCgpe3NlbGYub25jb25uZWN0PWZ1bmN0aW9uKGMpe2NvbnN0IGw9Yy5wb3J0'@;
put 'c1swXTtWTihsKSxsLnN0YXJ0KCl9fWZ1bmN0aW9uIFV0ZShjLGwpe2lmKHRoaXMuX29wdGlvbnM9e3VzZVdvcmtlcjohMCx1c2VTaGFyZWRXb3JrZXI6ITEsZW5naW5lOiJkb3QiLGtleU1vZGU6InRpdGxlIixmYWRlOiEwLHR3ZWVuUGF0aHM6ITAsdHdlZW5TaGFwZXM6ITAsY29udmVydEVx'@;
put 'dWFsU2lkZWRQb2x5Z29uczohMCx0d2VlblByZWNpc2lvbjoxLGdyb3dFbnRlcmluZ0VkZ2VzOiEwLHpvb206ITAsem9vbVNjYWxlRXh0ZW50OlsuMSwxMF0sem9vbVRyYW5zbGF0ZUV4dGVudDpbWy0xLzAsLTEvMF0sWzEvMCwxLzBdXSx3aWR0aDpudWxsLGhlaWdodDpudWxsLHNjYWxlOjEs'@;
put 'Zml0OiExfSxsIGluc3RhbmNlb2YgT2JqZWN0KWZvcih2YXIgYSBvZiBPYmplY3Qua2V5cyhsKSl0aGlzLl9vcHRpb25zW2FdPWxbYV07ZWxzZSJib29sZWFuIj09dHlwZW9mIGwmJih0aGlzLl9vcHRpb25zLnVzZVdvcmtlcj1sKTt2YXIgZD10aGlzLl9vcHRpb25zLnVzZVdvcmtlcixoPXRo'@;
put 'aXMuX29wdGlvbnMudXNlU2hhcmVkV29ya2VyO2lmKHR5cGVvZiBXb3JrZXI+InUiJiYoZD0hMSksdHlwZW9mIFNoYXJlZFdvcmtlcj4idSImJihoPSExKSxkfHxoKXt2YXIgdj1jdGUoInNjcmlwdCIpLmZpbHRlcihmdW5jdGlvbigpe3JldHVybiJqYXZhc2NyaXB0L3dvcmtlciI9PXdzKHRo'@;
put 'aXMpLmF0dHIoInR5cGUiKXx8d3ModGhpcykuYXR0cigic3JjIikmJndzKHRoaXMpLmF0dHIoInNyYyIpLm1hdGNoKC8uKlwvQGhwY2MtanNcL3dhc20vKX0pOzA9PXYuc2l6ZSgpPyhjb25zb2xlLndhcm4oJ05vIHNjcmlwdCB0YWcgb2YgdHlwZSAiamF2YXNjcmlwdC93b3JrZXIiIHdhcyBm'@;
put 'b3VuZCBhbmQgInVzZVdvcmtlciIgaXMgdHJ1ZS4gTm90IHVzaW5nIHdlYiB3b3JrZXIuJyksZD0hMSxoPSExKToodGhpcy5fdml6VVJMPXYuYXR0cigic3JjIiksdGhpcy5fdml6VVJMfHwoY29uc29sZS53YXJuKCdObyAic3JjIiBhdHRyaWJ1dGUgb2Ygd2FzIGZvdW5kIG9uIHRoZSAiamF2'@;
put 'YXNjcmlwdC93b3JrZXIiIHNjcmlwdCB0YWcgYW5kICJ1c2VXb3JrZXIiIGlzIHRydWUuIE5vdCB1c2luZyB3ZWIgd29ya2VyLicpLGQ9ITEsaD0hMSkpfWlmKGgpe2NvbnN0IFo9ImRhdGE6YXBwbGljYXRpb24vamF2YXNjcmlwdDtiYXNlNjQsIitidG9hKFZOLnRvU3RyaW5nKCkrIigiK1dF'@;
put 'dC50b1N0cmluZygpKyIpKCkiKTt0aGlzLl93b3JrZXI9dGhpcy5fd29ya2VyPW5ldyBTaGFyZWRXb3JrZXIoWiksdGhpcy5fd29ya2VyUG9ydD10aGlzLl93b3JrZXIucG9ydCx0aGlzLl93b3JrZXJQb3J0Q2xvc2U9dGhpcy5fd29ya2VyLnBvcnQuY2xvc2UuYmluZCh0aGlzLl93b3JrZXJQ'@;
put 'b3J0KSx0aGlzLl93b3JrZXIucG9ydC5zdGFydCgpLHRoaXMuX3dvcmtlckNhbGxiYWNrcz1bXX1lbHNlIGlmKGQpe3ZhciBNPW5ldyBCbG9iKFtWTi50b1N0cmluZygpKyIoIitaRXQudG9TdHJpbmcoKSsiKSgpIl0pLEQ9d2luZG93LlVSTC5jcmVhdGVPYmplY3RVUkwoTSk7dGhpcy5fd29y'@;
put 'a2VyPW5ldyBXb3JrZXIoRCksdGhpcy5fd29ya2VyUG9ydD10aGlzLl93b3JrZXIsdGhpcy5fd29ya2VyUG9ydENsb3NlPXRoaXMuX3dvcmtlci50ZXJtaW5hdGUuYmluZCh0aGlzLl93b3JrZXIpLHRoaXMuX3dvcmtlckNhbGxiYWNrcz1bXX1lbHNlIHI3ZS5sb2FkKCkudGhlbigoWj0+e3Ro'@;
put 'aXMuX2dyYXBodml6VmVyc2lvbj1aLnZlcnNpb24oKX0pLmJpbmQodGhpcykpO3RoaXMuX3NlbGVjdGlvbj1jLHRoaXMuX2FjdGl2ZT0hMSx0aGlzLl9idXN5PSExLHRoaXMuX2pvYnM9W10sdGhpcy5fcXVldWU9W10sdGhpcy5fa2V5TW9kZXM9bmV3IFNldChbInRpdGxlIiwiaWQiLCJ0YWct'@;
put 'aW5kZXgiLCJpbmRleCJdKSx0aGlzLl9pbWFnZXM9W10sdGhpcy5fdHJhbnNsYXRpb249dm9pZCAwLHRoaXMuX3NjYWxlPXZvaWQgMCx0aGlzLl9ldmVudFR5cGVzPVsiaW5pdEVuZCIsInN0YXJ0IiwibGF5b3V0U3RhcnQiLCJsYXlvdXRFbmQiLCJkYXRhRXh0cmFjdEVuZCIsImRhdGFQcm9j'@;
put 'ZXNzUGFzczFFbmQiLCJkYXRhUHJvY2Vzc1Bhc3MyRW5kIiwiZGF0YVByb2Nlc3NFbmQiLCJyZW5kZXJTdGFydCIsInJlbmRlckVuZCIsInRyYW5zaXRpb25TdGFydCIsInRyYW5zaXRpb25FbmQiLCJyZXN0b3JlRW5kIiwiZW5kIiwiem9vbSJdLHRoaXMuX2Rpc3BhdGNoPXV0ZSguLi50aGlz'@;
put 'Ll9ldmVudFR5cGVzKSxYeHQuY2FsbCh0aGlzKSxjLm5vZGUoKS5fX2dyYXBodml6X189dGhpc31mdW5jdGlvbiBCTihjLGwpe3JldHVybiB3cyhjKS5ncmFwaHZpeihsKX1oN2UucHJvdG90eXBlPXp0ZS5wcm90b3R5cGUsVXRlLnByb3RvdHlwZT1CTi5wcm90b3R5cGU9e2NvbnN0cnVjdG9y'@;
put 'OlV0ZSxlbmdpbmU6ZnVuY3Rpb24gdUV0KGMpe3JldHVybiB0aGlzLl9vcHRpb25zLmVuZ2luZT1jLHRoaXN9LGFkZEltYWdlOmZ1bmN0aW9uIGRFdChjLGwsYSl7cmV0dXJuIHRoaXMuX2ltYWdlcy5wdXNoKHtwYXRoOmMsd2lkdGg6bCxoZWlnaHQ6YX0pLHRoaXN9LGtleU1vZGU6ZnVuY3Rp'@;
put 'b24gaEV0KGMpe2lmKCF0aGlzLl9rZXlNb2Rlcy5oYXMoYykpdGhyb3cgRXJyb3IoIklsbGVnYWwga2V5TW9kZTogIitjKTtpZihjIT10aGlzLl9vcHRpb25zLmtleU1vZGUmJm51bGwhPXRoaXMuX2RhdGEpdGhyb3cgRXJyb3IoIlRvbyBsYXRlIHRvIGNoYW5nZSBrZXlNb2RlIik7cmV0dXJu'@;
put 'IHRoaXMuX29wdGlvbnMua2V5TW9kZT1jLHRoaXN9LGZhZGU6ZnVuY3Rpb24gZkV0KGMpe3JldHVybiB0aGlzLl9vcHRpb25zLmZhZGU9Yyx0aGlzfSx0d2VlblBhdGhzOmZ1bmN0aW9uIHBFdChjKXtyZXR1cm4gdGhpcy5fb3B0aW9ucy50d2VlblBhdGhzPWMsdGhpc30sdHdlZW5TaGFwZXM6'@;
put 'ZnVuY3Rpb24gZ0V0KGMpe3JldHVybiB0aGlzLl9vcHRpb25zLnR3ZWVuU2hhcGVzPWMsYyYmKHRoaXMuX29wdGlvbnMudHdlZW5QYXRocz0hMCksdGhpc30sY29udmVydEVxdWFsU2lkZWRQb2x5Z29uczpmdW5jdGlvbiBtRXQoYyl7cmV0dXJuIHRoaXMuX29wdGlvbnMuY29udmVydEVxdWFs'@;
put 'U2lkZWRQb2x5Z29ucz1jLHRoaXN9LHR3ZWVuUHJlY2lzaW9uOmZ1bmN0aW9uIHZFdChjKXtyZXR1cm4gdGhpcy5fb3B0aW9ucy50d2VlblByZWNpc2lvbj1jLHRoaXN9LGdyb3dFbnRlcmluZ0VkZ2VzOmZ1bmN0aW9uIGJFdChjKXtyZXR1cm4gdGhpcy5fb3B0aW9ucy5ncm93RW50ZXJpbmdF'@;
put 'ZGdlcz1jLHRoaXN9LHpvb206ZnVuY3Rpb24gdXh0KGMpe3JldHVybiB0aGlzLl9vcHRpb25zLnpvb209Yyx0aGlzLl9vcHRpb25zLnpvb20mJiF0aGlzLl96b29tQmVoYXZpb3I/WDhlLmNhbGwodGhpcyk6IXRoaXMuX29wdGlvbnMuem9vbSYmdGhpcy5fem9vbUJlaGF2aW9yJiYodGhpcy5f'@;
put 'em9vbVNlbGVjdGlvbi5vbigiLnpvb20iLG51bGwpLHRoaXMuX3pvb21CZWhhdmlvcj1udWxsKSx0aGlzfSxyZXNldFpvb206ZnVuY3Rpb24gZHh0KGMpe3ZhciBsPXRoaXMuX3pvb21TZWxlY3Rpb247cmV0dXJuIGMmJihsPWwudHJhbnNpdGlvbihjKSksbC5jYWxsKHRoaXMuX3pvb21CZWhh'@;
put 'dmlvci50cmFuc2Zvcm0sdGhpcy5fb3JpZ2luYWxUcmFuc2Zvcm0pLHRoaXN9LHpvb21CZWhhdmlvcjpmdW5jdGlvbiBweHQoKXtyZXR1cm4gdGhpcy5fem9vbUJlaGF2aW9yfHxudWxsfSx6b29tU2VsZWN0aW9uOmZ1bmN0aW9uIGd4dCgpe3JldHVybiB0aGlzLl96b29tU2VsZWN0aW9ufHxu'@;
put 'dWxsfSx6b29tU2NhbGVFeHRlbnQ6ZnVuY3Rpb24gaHh0KGMpe3JldHVybiB0aGlzLl9vcHRpb25zLnpvb21TY2FsZUV4dGVudD1jLHRoaXN9LHpvb21UcmFuc2xhdGVFeHRlbnQ6ZnVuY3Rpb24gZnh0KGMpe3JldHVybiB0aGlzLl9vcHRpb25zLnpvb21UcmFuc2xhdGVFeHRlbnQ9Yyx0aGlz'@;
put 'fSxyZW5kZXI6ZnVuY3Rpb24gd3h0KGMpe3JldHVybiB0aGlzLl9idXN5Pyh0aGlzLl9xdWV1ZS5wdXNoKHRoaXMucmVuZGVyLmJpbmQodGhpcyxjKSksdGhpcyk6KHRoaXMuX2Rpc3BhdGNoLmNhbGwoInJlbmRlclN0YXJ0Iix0aGlzKSx0aGlzLl90cmFuc2l0aW9uRmFjdG9yeT9iTihmdW5j'@;
put 'dGlvbigpe3RoaXMuX3RyYW5zaXRpb249TXRlKHRoaXMuX3RyYW5zaXRpb25GYWN0b3J5KCkpLGU3ZS5jYWxsKHRoaXMsYyl9LmJpbmQodGhpcyksMCk6ZTdlLmNhbGwodGhpcyxjKSx0aGlzKX0sbGF5b3V0OmZ1bmN0aW9uIEp4dChjLGwsYSxkKXtpZih0aGlzLl93b3JrZXIpSHRlLmNhbGwo'@;
put 'dGhpcyx7dHlwZToibGF5b3V0Iixkb3Q6YyxlbmdpbmU6bCxvcHRpb25zOmF9LGZ1bmN0aW9uKGYpe2QuY2FsbCh0aGlzLGYuZGF0YSl9KTtlbHNlIHRyeXt2YXIgaD10aGlzLmxheW91dFN5bmMoYywic3ZnIixsLGEpO2QuY2FsbCh0aGlzLHt0eXBlOiJkb25lIixzdmc6aH0pfWNhdGNoKGYp'@;
put 'e2QuY2FsbCh0aGlzLHt0eXBlOiJlcnJvciIsZXJyb3I6Zi5tZXNzYWdlfSl9fSxkb3Q6ZnVuY3Rpb24gUXh0KGMsbCl7dmFyIGE9dGhpcyxoPXRoaXMuX29wdGlvbnMuZW5naW5lLGY9dGhpcy5faW1hZ2VzO3JldHVybiB0aGlzLl9kaXNwYXRjaC5jYWxsKCJzdGFydCIsdGhpcyksdGhpcy5f'@;
put 'YnVzeT0hMCx0aGlzLl9kaXNwYXRjaC5jYWxsKCJsYXlvdXRTdGFydCIsdGhpcyksdGhpcy5fd29ya2VyfHxudWxsIT10aGlzLmxheW91dFN5bmM/KHRoaXMubGF5b3V0KGMsaCx7aW1hZ2VzOmZ9LGZ1bmN0aW9uKE0pe3N3aXRjaChNLnR5cGUpe2Nhc2UiZXJyb3IiOmlmKCFhLl9vbmVycm9y'@;
put 'KXRocm93IE0uZXJyb3IubWVzc2FnZTthLl9vbmVycm9yKE0uZXJyb3IpO2JyZWFrO2Nhc2UiZG9uZSI6ZUV0LmNhbGwodGhpcyxNLnN2ZyxsKX19KSx0aGlzKToodGhpcy5fYWZ0ZXJJbml0PXRoaXMuZG90LmJpbmQodGhpcyxjLGwpLHRoaXMpfSxkYXRhOmZ1bmN0aW9uIGJ4dCgpe3JldHVy'@;
put 'biB0aGlzLl9kYXRhfHxudWxsfSxyZW5kZXJEb3Q6ZnVuY3Rpb24gdEV0KGMsbCl7dmFyIGE9dGhpcztyZXR1cm4gdGhpcy5kb3QoYyxmdW5jdGlvbiBkKCl7YS5yZW5kZXIobCl9KSx0aGlzfSx0cmFuc2l0aW9uOmZ1bmN0aW9uIG5FdChjKXtyZXR1cm4gYyBpbnN0YW5jZW9mIEZ1bmN0aW9u'@;
put 'P3RoaXMuX3RyYW5zaXRpb25GYWN0b3J5PWM6dGhpcy5fdHJhbnNpdGlvbj1NdGUoYyksdGhpc30sYWN0aXZlOmZ1bmN0aW9uIHJFdChjKXt2YXIgYT10aGlzLl9zZWxlY3Rpb24uc2VsZWN0V2l0aG91dERhdGFQcm9wYWdhdGlvbigic3ZnIik7cmV0dXJuIDAhPWEuc2l6ZSgpP2Z1bmN0aW9u'@;
put 'IFVNdChjLGwpe3ZhciBkLGgsYT1jLl9fdHJhbnNpdGlvbjtpZihhKWZvcihoIGluIGw9bnVsbD09bD9udWxsOmwrIiIsYSlpZigoZD1hW2hdKS5zdGF0ZT4xJiZkLm5hbWU9PT1sKXJldHVybiBuZXcgdTQoW1tjXV0sek10LGwsK2gpO3JldHVybiBudWxsfShhLm5vZGUoKSxjKTpudWxsfSxv'@;
put 'cHRpb25zOmZ1bmN0aW9uIGlFdChjKXtpZih0eXBlb2YgYz4idSIpcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sdGhpcy5fb3B0aW9ucyk7Zm9yKHZhciBsIG9mIE9iamVjdC5rZXlzKGMpKXRoaXMuX29wdGlvbnNbbF09Y1tsXTtyZXR1cm4gdGhpc30sd2lkdGg6ZnVuY3Rpb24gYUV0KGMpe3Jl'@;
put 'dHVybiB0aGlzLl9vcHRpb25zLndpZHRoPWMsdGhpc30saGVpZ2h0OmZ1bmN0aW9uIG9FdChjKXtyZXR1cm4gdGhpcy5fb3B0aW9ucy5oZWlnaHQ9Yyx0aGlzfSxzY2FsZTpmdW5jdGlvbiBzRXQoYyl7cmV0dXJuIHRoaXMuX29wdGlvbnMuc2NhbGU9Yyx0aGlzfSxmaXQ6ZnVuY3Rpb24gbEV0'@;
put 'KGMpe3JldHVybiB0aGlzLl9vcHRpb25zLmZpdD1jLHRoaXN9LGF0dHJpYnV0ZXI6ZnVuY3Rpb24gY0V0KGMpe3JldHVybiB0aGlzLl9hdHRyaWJ1dGVyPWMsdGhpc30sb246ZnVuY3Rpb24geUV0KGMsbCl7cmV0dXJuIHRoaXMuX2Rpc3BhdGNoLm9uKGMsbCksdGhpc30sb25lcnJvcjpmdW5j'@;
put 'dGlvbiBfRXQoYyl7cmV0dXJuIHRoaXMuX29uZXJyb3I9Yyx0aGlzfSxsb2dFdmVudHM6ZnVuY3Rpb24gSUV0KGMpe3ZhciBsPURhdGUubm93KCksYT17fSxkPXRoaXMuX2V2ZW50VHlwZXMsaD1NYXRoLm1heCguLi5kLm1hcChEPT5ELmxlbmd0aCkpO2ZvcihsZXQgRD0wO0Q8ZC5sZW5ndGg7'@;
put 'RCsrKXtsZXQgWj1kW0RdO2FbWl09W107dmFyIHYsTSxmPXRoaXM7dGhpcy5vbihaKyIubG9nIixjP2Z1bmN0aW9uKCl7dmFyIHJlPURhdGUubm93KCksY2U9YVtaXS5sZW5ndGg7YVtaXS5wdXNoKHJlKTt2YXIgYmU9IiI7aWYoYmUrPSJFdmVudCAiLGJlKz1hZigiID4yIikoRCkrIiAiLGJl'@;
put 'Kz1aKyIgIi5yZXBlYXQoaC1aLmxlbmd0aCksYmUrPWFmKCIgPjUiKShyZS1sKSsiICIsImluaXRFbmQiIT1aJiYoYmUrPWFmKCIgPjUiKShyZS1hLnN0YXJ0W2NlXSkpLCJkYXRhUHJvY2Vzc0VuZCI9PVomJihiZSs9IiBwcmVwYXJlICAgICAgICAgICAgICAgICAiK2FmKCIgPjUiKShyZS1h'@;
put 'LmxheW91dEVuZFtjZV0pKSwicmVuZGVyRW5kIj09WiYmZi5fdHJhbnNpdGlvbiYmKGJlKz0iIHRyYW5zaXRpb24gc3RhcnQgbWFyZ2luICIrYWYoIiA+NSIpKGYuX3RyYW5zaXRpb24uZGVsYXkoKS0ocmUtYS5yZW5kZXJTdGFydFtjZV0pKSx2PWYuX3RyYW5zaXRpb24uZGVsYXkoKSxNPWYu'@;
put 'X3RyYW5zaXRpb24uZHVyYXRpb24oKSksInRyYW5zaXRpb25TdGFydCI9PVope3ZhciBFZT1yZS1hLnJlbmRlclN0YXJ0W2NlXTtiZSs9IiB0cmFuc2l0aW9uIGRlbGF5ICAgICAgICAiK2FmKCIgPjUiKShyZS1hLnJlbmRlclN0YXJ0W2NlXSksYmUrPSIgZXhwZWN0ZWQgIithZigiID41Iiko'@;
put 'diksYmUrPSIgZGlmZiAiK2FmKCIgPjUiKShFZS12KX1pZigidHJhbnNpdGlvbkVuZCI9PVope3ZhciBCZT1yZS1hLnRyYW5zaXRpb25TdGFydFtjZV07YmUrPSIgdHJhbnNpdGlvbiBkdXJhdGlvbiAgICAgIithZigiID41IikoQmUpLGJlKz0iIGV4cGVjdGVkICIrYWYoIiA+NSIpKE0pLGJl'@;
put 'Kz0iIGRpZmYgIithZigiID41IikoQmUtTSl9Y29uc29sZS5sb2coYmUpLGw9cmV9Om51bGwpfXJldHVybiB0aGlzfSxkZXN0cm95OmZ1bmN0aW9uIFJFdCgpe3JldHVybiBkZWxldGUgdGhpcy5fc2VsZWN0aW9uLm5vZGUoKS5fX2dyYXBodml6X18sdGhpcy5fd29ya2VyJiZ0aGlzLl93b3Jr'@;
put 'ZXJQb3J0Q2xvc2UoKSx0aGlzfSxkcmF3RWRnZTpmdW5jdGlvbiBGRXQoYyxsLGEsZCxoLGY9e30pe2lmKChoPU9iamVjdC5hc3NpZ24oe30saCkpLnN0eWxlJiZoLnN0eWxlLmluY2x1ZGVzKCJpbnZpcyIpKXZhciB2PXdzKG51bGwpO2Vsc2V7dmFyIFo9dGhpcy5fc2VsZWN0aW9uLnNlbGVj'@;
put 'dFdpdGhvdXREYXRhUHJvcGFnYXRpb24oInN2ZyIpLnNlbGVjdFdpdGhvdXREYXRhUHJvcGFnYXRpb24oImciKSxjZT1udih2N2UuY2FsbCh0aGlzLGgpKTt2PVouYXBwZW5kKCJnIikuZGF0YShbY2VdKSxPQS5jYWxsKHYubm9kZSgpLGNlKSxmN2UuY2FsbCh0aGlzLHYsYyxsLGEsZCxoLGYp'@;
put 'fXJldHVybiB0aGlzLl9kcmF3bkVkZ2U9e2c6dix4MTpjLHkxOmwseDI6YSx5MjpkLGF0dHJpYnV0ZXM6aH0sdGhpc30sdXBkYXRlRHJhd25FZGdlOmZ1bmN0aW9uIEhFdChjLGwsYSxkLGg9e30sZj17fSl7aWYoIXRoaXMuX2RyYXduRWRnZSl0aHJvdyBFcnJvcigiTm8gZWRnZSBoYXMgYmVl'@;
put 'biBkcmF3biIpO3ZhciB2PXRoaXMuX2RyYXduRWRnZS5nO3JldHVybiBoPU9iamVjdC5hc3NpZ24odGhpcy5fZHJhd25FZGdlLmF0dHJpYnV0ZXMsaCksdGhpcy5fZHJhd25FZGdlLngxPWMsdGhpcy5fZHJhd25FZGdlLnkxPWwsdGhpcy5fZHJhd25FZGdlLngyPWEsdGhpcy5fZHJhd25FZGdl'@;
put 'LnkyPWQsIXYuZW1wdHkoKXx8aC5zdHlsZSYmaC5zdHlsZS5pbmNsdWRlcygiaW52aXMiKXx8KHY9dGhpcy5fc2VsZWN0aW9uLnNlbGVjdFdpdGhvdXREYXRhUHJvcGFnYXRpb24oInN2ZyIpLnNlbGVjdFdpdGhvdXREYXRhUHJvcGFnYXRpb24oImciKS5hcHBlbmQoImciKSx0aGlzLl9kcmF3'@;
put 'bkVkZ2UuZz12KSx2LmVtcHR5KCl8fGY3ZS5jYWxsKHRoaXMsdixjLGwsYSxkLGgsZiksdGhpc30sbW92ZURyYXduRWRnZUVuZFBvaW50OmZ1bmN0aW9uIE5FdChjLGwsYT17fSl7aWYoIXRoaXMuX2RyYXduRWRnZSl0aHJvdyBFcnJvcigiTm8gZWRnZSBoYXMgYmVlbiBkcmF3biIpO3ZhciBk'@;
put 'PXRoaXMuX2RyYXduRWRnZS5nLGg9dGhpcy5fZHJhd25FZGdlLngxLGY9dGhpcy5fZHJhd25FZGdlLnkxLHY9dGhpcy5fZHJhd25FZGdlLmF0dHJpYnV0ZXM7cmV0dXJuIHRoaXMuX2RyYXduRWRnZS54Mj1jLHRoaXMuX2RyYXduRWRnZS55Mj1sLHA3ZShkLGgsZixjLGwsdixhKSx0aGlzfSxp'@;
put 'bnNlcnREcmF3bkVkZ2U6ZnVuY3Rpb24gVkV0KGMpe2lmKCF0aGlzLl9kcmF3bkVkZ2UpdGhyb3cgRXJyb3IoIk5vIGVkZ2UgaGFzIGJlZW4gZHJhd24iKTt2YXIgbD10aGlzLl9kcmF3bkVkZ2UuZztpZihsLmVtcHR5KCkpcmV0dXJuIHRoaXM7bC5zZWxlY3RXaXRob3V0RGF0YVByb3BhZ2F0'@;
put 'aW9uKCJ0aXRsZSIpLnRleHQoYyk7dmFyIHY9dGhpcy5fc2VsZWN0aW9uLnNlbGVjdFdpdGhvdXREYXRhUHJvcGFnYXRpb24oInN2ZyIpLnNlbGVjdFdpdGhvdXREYXRhUHJvcGFnYXRpb24oImciKSxNPXYuZGF0dW0oKSxEPXRoaXMuX2V4dHJhY3REYXRhKGwsTS5jaGlsZHJlbi5sZW5ndGgs'@;
put 'di5kYXR1bSgpKTtyZXR1cm4gTS5jaGlsZHJlbi5wdXNoKEQpLER0ZShsLEQpLHRoaXMuX2RyYXduRWRnZT1udWxsLHRoaXN9LHJlbW92ZURyYXduRWRnZTpnN2UscmVtb3ZlRHJhd25FZGdlOmc3ZSxkcmF3bkVkZ2VTZWxlY3Rpb246bTdlLGRyYXduRWRnZVNlbGVjdGlvbjptN2UsZHJhd05v'@;
put 'ZGU6ZnVuY3Rpb24gQkV0KGMsbCxhLGQ9e30saD17fSl7aWYoKGQ9T2JqZWN0LmFzc2lnbih7fSxkKSkuc3R5bGUmJmQuc3R5bGUuaW5jbHVkZXMoImludmlzIikpdmFyIGY9d3MobnVsbCk7ZWxzZXt2YXIgRD10aGlzLl9zZWxlY3Rpb24uc2VsZWN0V2l0aG91dERhdGFQcm9wYWdhdGlvbigi'@;
put 'c3ZnIikuc2VsZWN0V2l0aG91dERhdGFQcm9wYWdhdGlvbigiZyIpLHJlPW52KEM3ZS5jYWxsKHRoaXMsYSxkKSk7Zj1ELmFwcGVuZCgiZyIpLmRhdGEoW3JlXSksT0EuY2FsbChmLm5vZGUoKSxyZSksYjdlLmNhbGwodGhpcyxmLGMsbCxhLGQsaCl9cmV0dXJuIHRoaXMuX2RyYXduTm9kZT17'@;
put 'ZzpmLG5vZGVJZDphLHg6Yyx5OmwsYXR0cmlidXRlczpkfSx0aGlzfSx1cGRhdGVEcmF3bk5vZGU6ZnVuY3Rpb24gakV0KGMsbCxhLGQ9e30saD17fSl7aWYoIXRoaXMuX2RyYXduTm9kZSl0aHJvdyBFcnJvcigiTm8gbm9kZSBoYXMgYmVlbiBkcmF3biIpO3ZhciBmPXRoaXMuX2RyYXduTm9k'@;
put 'ZS5nO3JldHVybiBudWxsPT1hJiYoYT10aGlzLl9kcmF3bk5vZGUubm9kZUlkKSxkPU9iamVjdC5hc3NpZ24odGhpcy5fZHJhd25Ob2RlLmF0dHJpYnV0ZXMsZCksdGhpcy5fZHJhd25Ob2RlLm5vZGVJZD1hLHRoaXMuX2RyYXduTm9kZS54PWMsdGhpcy5fZHJhd25Ob2RlLnk9bCwhZi5lbXB0'@;
put 'eSgpfHxkLnN0eWxlJiZkLnN0eWxlLmluY2x1ZGVzKCJpbnZpcyIpfHwoZj10aGlzLl9zZWxlY3Rpb24uc2VsZWN0V2l0aG91dERhdGFQcm9wYWdhdGlvbigic3ZnIikuc2VsZWN0V2l0aG91dERhdGFQcm9wYWdhdGlvbigiZyIpLmFwcGVuZCgiZyIpLHRoaXMuX2RyYXduTm9kZS5nPWYpLGYu'@;
put 'ZW1wdHkoKXx8YjdlLmNhbGwodGhpcyxmLGMsbCxhLGQsaCksdGhpc30sbW92ZURyYXduTm9kZTpmdW5jdGlvbiB6RXQoYyxsLGE9e30pe2lmKCF0aGlzLl9kcmF3bk5vZGUpdGhyb3cgRXJyb3IoIk5vIG5vZGUgaGFzIGJlZW4gZHJhd24iKTt2YXIgZD10aGlzLl9kcmF3bk5vZGUuZyxoPXRo'@;
put 'aXMuX2RyYXduTm9kZS5hdHRyaWJ1dGVzO3JldHVybiB0aGlzLl9kcmF3bk5vZGUueD1jLHRoaXMuX2RyYXduTm9kZS55PWwsZC5lbXB0eSgpfHx5N2UoZCxjLGwsaCksdGhpc30saW5zZXJ0RHJhd25Ob2RlOmZ1bmN0aW9uIFVFdChjKXtpZighdGhpcy5fZHJhd25Ob2RlKXRocm93IEVycm9y'@;
put 'KCJObyBub2RlIGhhcyBiZWVuIGRyYXduIik7bnVsbD09YyYmKGM9dGhpcy5fZHJhd25Ob2RlLm5vZGVJZCk7dmFyIGw9dGhpcy5fZHJhd25Ob2RlLmc7aWYobC5lbXB0eSgpKXJldHVybiB0aGlzO3ZhciBhPXRoaXMuX2RyYXduTm9kZS5hdHRyaWJ1dGVzO2lmKGwuc2VsZWN0V2l0aG91dERh'@;
put 'dGFQcm9wYWdhdGlvbigidGl0bGUiKS50ZXh0KGMpLGEuVVJMfHxhLnRvb2x0aXApdmFyIGY9bC5zZWxlY3RXaXRob3V0RGF0YVByb3BhZ2F0aW9uKCJnIikuc2VsZWN0V2l0aG91dERhdGFQcm9wYWdhdGlvbigiYSIpLE09KGYuc2VsZWN0V2l0aG91dERhdGFQcm9wYWdhdGlvbigiZWxsaXBz'@;
put 'ZSxwb2x5Z29uLHBhdGgscG9seWxpbmUiKSxmLnNlbGVjdFdpdGhvdXREYXRhUHJvcGFnYXRpb24oInRleHQiKSk7ZWxzZSBsLnNlbGVjdFdpdGhvdXREYXRhUHJvcGFnYXRpb24oImVsbGlwc2UscG9seWdvbixwYXRoLHBvbHlsaW5lIiksTT1sLnNlbGVjdFdpdGhvdXREYXRhUHJvcGFnYXRp'@;
put 'b24oInRleHQiKTtNLnRleHQoYS5sYWJlbHx8Yyk7dmFyIHJlPXRoaXMuX3NlbGVjdGlvbi5zZWxlY3RXaXRob3V0RGF0YVByb3BhZ2F0aW9uKCJzdmciKS5zZWxlY3RXaXRob3V0RGF0YVByb3BhZ2F0aW9uKCJnIiksY2U9cmUuZGF0dW0oKSxiZT10aGlzLl9leHRyYWN0RGF0YShsLGNlLmNo'@;
put 'aWxkcmVuLmxlbmd0aCxyZS5kYXR1bSgpKTtyZXR1cm4gY2UuY2hpbGRyZW4ucHVzaChiZSksRHRlKGwsYmUpLHRoaXMuX2RyYXduTm9kZT1udWxsLHRoaXN9LHJlbW92ZURyYXduTm9kZTpfN2UscmVtb3ZlRHJhd25Ob2RlOl83ZSxkcmF3bk5vZGVTZWxlY3Rpb246dzdlLGRyYXduTm9kZVNl'@;
put 'bGVjdGlvbjp3N2UsZ3JhcGh2aXpWZXJzaW9uOmZ1bmN0aW9uIEN4dCgpe3JldHVybiB0aGlzLl9ncmFwaHZpelZlcnNpb259fSxxOS5wcm90b3R5cGUuZ3JhcGh2aXo9ZnVuY3Rpb24gWUV0KGMpe3ZhciBsPXRoaXMubm9kZSgpLl9fZ3JhcGh2aXpfXztyZXR1cm4gbD8obC5vcHRpb25zKGMp'@;
put 'LGJOKGZ1bmN0aW9uKCl7bC5fZGlzcGF0Y2guY2FsbCgiaW5pdEVuZCIsdGhpcyl9LmJpbmQodGhpcyksMCkpOmw9bmV3IFV0ZSh0aGlzLGMpLGx9LHE5LnByb3RvdHlwZS5zZWxlY3RXaXRob3V0RGF0YVByb3BhZ2F0aW9uPWZ1bmN0aW9uIEdFdChjKXtyZXR1cm4gd3ModGhpcy5zaXplKCk+'@;
put 'MD90aGlzLm5vZGUoKS5xdWVyeVNlbGVjdG9yKGMpOm51bGwpfTt2YXIgJEV0PXkoOTgwODMpO2Z1bmN0aW9uIEtFdChjLGwpezEmYyYmR3QoMCwiY2xyLWljb24iLDI5KX1mdW5jdGlvbiBxRXQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJjbHItaWNvbiIsMzApLEZ0KCJjbGlj'@;
put 'ayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPVJlKDIpO3JldHVybiBoLmxpYnJhcmllc1NlYXJjaD0iIixDdChoLmxpYnJhcnlPbkZpbHRlcigpKX0pLGhlKCl9fWZ1bmN0aW9uIFhFdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImNsci10cmVlLW5vZGUiLDI0KSgxLCJkaXYi'@;
put 'LDI1KSgyLCJpbnB1dCIsMjYsMiksZ2koIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9UmUoKTtyZXR1cm4gbWkoZi5saWJyYXJpZXNTZWFyY2gsaCl8fChmLmxpYnJhcmllc1NlYXJjaD1oKSxDdChoKX0pLEZ0KCJrZXl1cCIsZnVuY3Rpb24oKXtyZXR1cm4gd3Qo'@;
put 'YSksQ3QoUmUoKS5saWJyYXJ5T25GaWx0ZXIoKSl9KSxoZSgpLGd0KDQsS0V0LDEsMCwiY2xyLWljb24iLDI3KSg1LHFFdCwxLDAsImNsci1pY29uIiwyOCksaGUoKSgpfWlmKDImYyl7Y29uc3QgYT1oYSgzKSxkPVJlKCk7ZmUoMikscGkoIm5nTW9kZWwiLGQubGlicmFyaWVzU2VhcmNoKSxm'@;
put 'ZSgyKSxNZSgibmdJZiIsYS52YWx1ZS5sZW5ndGg8MSksZmUoKSxNZSgibmdJZiIsYS52YWx1ZS5sZW5ndGg+MCl9fWZ1bmN0aW9uIEpFdChjLGwpezEmYyYmR3QoMCwiY2xyLWljb24iLDI5KX1mdW5jdGlvbiBRRXQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJjbHItaWNvbiIs'@;
put 'MzApLEZ0KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKSxSZSgpO2NvbnN0IGg9aGEoMyksZj1SZSgyKS4kaW1wbGljaXQsdj1SZSgpO3JldHVybiBoLnZhbHVlPSIiLGYuc2VhcmNoU3RyaW5nPSIiLEN0KHYudHJlZU9uRmlsdGVyKGYsInRhYmxlcy5UQUJMRU5BTUUiKSl9KSxoZSgpfX1mdW5j'@;
put 'dGlvbiBlVHQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJjbHItdHJlZS1ub2RlIiwyNCkoMSwiZGl2IiwyNSkoMiwiaW5wdXQiLDM2LDMpLGdpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPVJlKDIpLiRpbXBsaWNpdDtyZXR1cm4gbWkoZi5zZWFy'@;
put 'Y2hTdHJpbmcsaCl8fChmLnNlYXJjaFN0cmluZz1oKSxDdChoKX0pLEZ0KCJrZXl1cCIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPVJlKDIpLiRpbXBsaWNpdDtyZXR1cm4gQ3QoUmUoKS50cmVlT25GaWx0ZXIoaCwidGFibGVzLlRBQkxFTkFNRSIpKX0pLGhlKCksZ3QoNCxKRXQsMSwwLCJj'@;
put 'bHItaWNvbiIsMjcpKDUsUUV0LDEsMCwiY2xyLWljb24iLDI4KSxoZSgpKCl9aWYoMiZjKXtjb25zdCBhPWhhKDMpLGQ9UmUoMikuJGltcGxpY2l0O2ZlKDIpLHBpKCJuZ01vZGVsIixkLnNlYXJjaFN0cmluZyksZmUoMiksTWUoIm5nSWYiLGEudmFsdWUubGVuZ3RoPDEpLGZlKCksTWUoIm5n'@;
put 'SWYiLGEudmFsdWUubGVuZ3RoPjApfX1mdW5jdGlvbiB0VHQoYyxsKXsxJmMmJkd0KDAsImNsci1pY29uIiwyOSl9ZnVuY3Rpb24gblR0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiY2xyLWljb24iLDMwKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSksUmUoKTtjb25zdCBo'@;
put 'PWhhKDMpLGY9UmUoKS4kaW1wbGljaXQsdj1SZSgzKTtyZXR1cm4gaC52YWx1ZT0iIixmLnNlYXJjaFN0cmluZz0iIixDdCh2LnRyZWVPbkZpbHRlcihmLCJjb2x1bW5zLkNPTE5BTUUiKSl9KSxoZSgpfX1mdW5jdGlvbiByVHQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJjbHIt'@;
put 'dHJlZS1ub2RlIiwyNCkoMSwiZGl2IiwyNSkoMiwiaW5wdXQiLDM5LDMpLGdpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPVJlKCkuJGltcGxpY2l0O3JldHVybiBtaShmLnNlYXJjaFN0cmluZyxoKXx8KGYuc2VhcmNoU3RyaW5nPWgpLEN0KGgpfSksRnQoImtl'@;
put 'eXVwIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9UmUoKS4kaW1wbGljaXQ7cmV0dXJuIEN0KFJlKDMpLnRyZWVPbkZpbHRlcihoLCJjb2x1bW5zLkNPTE5BTUUiKSl9KSxoZSgpLGd0KDQsdFR0LDEsMCwiY2xyLWljb24iLDI3KSg1LG5UdCwxLDAsImNsci1pY29uIiwyOCksaGUoKSgpfWlm'@;
put 'KDImYyl7Y29uc3QgYT1oYSgzKSxkPVJlKCkuJGltcGxpY2l0O2ZlKDIpLHBpKCJuZ01vZGVsIixkLnNlYXJjaFN0cmluZyksZmUoMiksTWUoIm5nSWYiLGEudmFsdWUubGVuZ3RoPDEpLGZlKCksTWUoIm5nSWYiLGEudmFsdWUubGVuZ3RoPjApfX1mdW5jdGlvbiBpVHQoYyxsKXtpZigxJmMp'@;
put 'e2NvbnN0IGE9TG4oKTtkZSgwLCJjbHItdHJlZS1ub2RlIikoMSwiYnV0dG9uIiw0MCksRnQoImNsaWNrIixmdW5jdGlvbigpe2NvbnN0IGg9d3QoYSkuJGltcGxpY2l0LGY9UmUoKS4kaW1wbGljaXQsdj1SZSgyKS4kaW1wbGljaXQ7cmV0dXJuIEN0KFJlKCkuY29sdW1uT25DbGljayhoLHYs'@;
put 'ZikpfSksR3QoMiwiY2xyLWljb24iLDQxKSxMZSgzKSxoZSgpKCl9aWYoMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0LGQ9UmUoNCk7ZmUoKSxUcigiY29sdW1uLWFjdGl2ZSIsZC5saWJDb2x1bW5BY3RpdmUoYS5DT0xVUkkpKSxmZSgyKSxEcigiICIsYS5DT0xOQU1FLCIgIil9fWZ1bmN0aW9u'@;
put 'IGFUdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImNsci10cmVlLW5vZGUiLDMyKSxGdCgiY2xpY2siLGZ1bmN0aW9uKGgpe2NvbnN0IGY9d3QoYSkuJGltcGxpY2l0LHY9UmUoMikuJGltcGxpY2l0O3JldHVybiBDdChSZSgpLnRyZWVOb2RlQ2xpY2tlZChoLGYsdi50YWJsZXMp'@;
put 'KX0pLGdpKCJjbHJFeHBhbmRlZENoYW5nZSIsZnVuY3Rpb24oaCl7Y29uc3QgZj13dChhKS4kaW1wbGljaXQ7cmV0dXJuIG1pKGYuZXhwYW5kZWQsaCl8fChmLmV4cGFuZGVkPWgpLEN0KGgpfSksZGUoMSwicCIsMzcpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtjb25zdCBoPXd0KGEpLiRpbXBs'@;
put 'aWNpdCxmPVJlKDIpLiRpbXBsaWNpdDtyZXR1cm4gQ3QoUmUoKS50YWJsZU9uQ2xpY2soaC5UQUJMRVVSSSxoLGYpKX0pLEd0KDIsImNsci1pY29uIiwzOCksTGUoMyksaGUoKSxndCg0LHJUdCw2LDMsImNsci10cmVlLW5vZGUiLDUpKDUsaVR0LDQsMywiY2xyLXRyZWUtbm9kZSIsNiksaGUo'@;
put 'KX1pZigyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7VHIoImNsci1leHBhbmRlZCIsYS5leHBhbmRlZCkscGkoImNsckV4cGFuZGVkIixhLmV4cGFuZGVkKSxNZSgiY2xyTG9hZGluZyIsYS5sb2FkaW5nQ29sdW1ucyYmIWEuY29sdW1ucyksZmUoKSxNZSgiaWQiLGEuVEFCTEVVUkkpLGZlKDIp'@;
put 'LERyKCIgIixhLlRBQkxFTkFNRSwiICIpLGZlKCksTWUoIm5nSWYiLGEuY29sdW1ucyksZmUoKSxNZSgibmdGb3JPZiIsYS5jb2x1bW5zKX19ZnVuY3Rpb24gb1R0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiY2xyLXRyZWUtbm9kZSIsMzIpLEZ0KCJjbGljayIsZnVuY3Rpb24o'@;
put 'aCl7d3QoYSk7Y29uc3QgZj1SZSgpLiRpbXBsaWNpdCx2PVJlKCk7cmV0dXJuIEN0KHYudHJlZU5vZGVDbGlja2VkKGgsZix2LmxpYnJhcnlMaXN0KSl9KSxnaSgiY2xyRXhwYW5kZWRDaGFuZ2UiLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9UmUoKS4kaW1wbGljaXQ7cmV0dXJuIG1pKGYu'@;
put 'ZXhwYW5kZWQsaCl8fChmLmV4cGFuZGVkPWgpLEN0KGgpfSksZGUoMSwicCIsMzMpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPVJlKCkuJGltcGxpY2l0LGY9UmUoKTtyZXR1cm4gZi5saWI9aC5MSUJSQVJZSUQsQ3QoZi5saWJyYXJ5T25DbGljayhmLmxpYnx8IiIsaCkp'@;
put 'fSksR3QoMiwiY2xyLWljb24iLDM0KSxMZSgzKSxoZSgpLGd0KDQsZVR0LDYsMywiY2xyLXRyZWUtbm9kZSIsNSkoNSxhVHQsNiw4LCJjbHItdHJlZS1ub2RlIiwzNSksaGUoKX1pZigyJmMpe2NvbnN0IGE9UmUoKS4kaW1wbGljaXQ7VHIoImNsci1leHBhbmRlZCIsYS5leHBhbmRlZCkscGko'@;
put 'ImNsckV4cGFuZGVkIixhLmV4cGFuZGVkKSxNZSgiY2xyTG9hZGluZyIsYS5sb2FkaW5nVGFibGVzJiYhYS50YWJsZXMpLGZlKDMpLERyKCIgIixhLkxJQlJBUllOQU1FLCIgIiksZmUoKSxNZSgibmdJZiIsYS50YWJsZXMpLGZlKCksTWUoIm5nRm9yT2YiLGEudGFibGVzKX19ZnVuY3Rpb24g'@;
put 'c1R0KGMsbCl7aWYoMSZjJiYoc2koMCksZ3QoMSxvVHQsNiw3LCJjbHItdHJlZS1ub2RlIiwzMSksbGkoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O2ZlKCksTWUoIm5nSWYiLCFhLmhpZGRlbiYmYS5pbkZvcmVncm91bmQpfX1mdW5jdGlvbiBsVHQoYyxsKXsxJmMmJihkZSgwLCJkaXYi'@;
put 'LDQyKSgxLCJzcGFuIiw0MyksTGUoMiwiIExvYWRpbmcuLi4gIiksaGUoKSgpKX1mdW5jdGlvbiBjVHQoYyxsKXsxJmMmJihkZSgwLCJkaXYiLDQ0KSxHdCgxLCJjbHItaWNvbiIsNDUpLGRlKDIsInAiLDQ2KSxMZSgzLCIgUGxlYXNlIHNlbGVjdCBhIGNvbHVtbiBvciB0YWJsZSAiKSxoZSgp'@;
put 'KCkpfWZ1bmN0aW9uIHVUdChjLGwpe2lmKDEmYyYmKGRlKDAsImgzIiw1NSksTGUoMSksaGUoKSksMiZjKXtjb25zdCBhPVJlKDMpO2ZlKCksRHIoIiAiLGEuY3VycmVudExpbmVhZ2VQYXRoQ29sdW1uP2EuY3VycmVudExpbmVhZ2VQYXRoTGliVGFibGUrIi4iK2EuY3VycmVudExpbmVhZ2VQ'@;
put 'YXRoQ29sdW1uOmEuY3VycmVudExpbmVhZ2VQYXRoTGliVGFibGUsIiAiKX19ZnVuY3Rpb24gZFR0KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2Iiw1MyksZ3QoMSx1VHQsMiwxLCJoMyIsNTQpLGhlKCkpLDImYyl7Y29uc3QgYT1SZSgyKTtmZSgpLE1lKCJuZ0lmIiwhYS5jdXJyZW50TGluZWFn'@;
put 'ZVBhdGhDb2x1bW4mJiFhLmN1cnJlbnRMaW5lYWdlUGF0aExpYlRhYmxlKX19ZnVuY3Rpb24gaFR0KGMsbCl7aWYoMSZjJiYoZGUoMCwic3BhbiIpLExlKDEpLGRlKDIsImEiLDU2KSxMZSgzKSxoZSgpLExlKDQpLGhlKCkpLDImYyl7Y29uc3QgYT1SZSgyKTtmZSgpLERyKCIgIixhLmxpbmVh'@;
put 'Z2VUYWJsZU5hbWUuc3BsaXQoIi4iKVswXSwiLiIpLGZlKCksTWUoInJvdXRlckxpbmsiLCIvdmlldy9kYXRhLyIrYS5saW5lYWdlVGFibGVOYW1lKSxmZSgpLHdyKGEubGluZWFnZVRhYmxlTmFtZS5zcGxpdCgiLiIpWzFdKSxmZSgpLERyKCIiLGEubGluZWFnZUNvbHVtbk5hbWUubGVuZ3Ro'@;
put 'PjA/Ii4iK2EubGluZWFnZUNvbHVtbk5hbWU6IiIsIiAiKX19ZnVuY3Rpb24gZlR0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiZGl2Iiw2NiksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChSZSg0KS5kb3dubG9hZFBORygpKX0pLExlKDEsIiBQTkcgIiks'@;
put 'aGUoKX19ZnVuY3Rpb24gcFR0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiZGl2Iiw2NiksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChSZSg0KS5kb3dubG9hZENTVigpKX0pLExlKDEsIiBDU1YgIiksaGUoKX19ZnVuY3Rpb24gZ1R0KGMsbCl7aWYoMSZj'@;
put 'KXtjb25zdCBhPUxuKCk7ZGUoMCwiY2xyLWRyb3Bkb3duLW1lbnUiLDY1KSgxLCJkaXYiLDY2KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KFJlKDMpLmRvd25sb2FkU1ZHKCkpfSksTGUoMiwiU1ZHIiksaGUoKSxndCgzLGZUdCwyLDAsImRpdiIsNjcpLGRlKDQsImRp'@;
put 'diIsNjYpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoUmUoMykuZG93bmxvYWREb3QoKSl9KSxMZSg1LCJEb3QiKSxoZSgpLGd0KDYscFR0LDIsMCwiZGl2Iiw2NyksaGUoKX1pZigyJmMpe2NvbnN0IGE9UmUoMyk7ZmUoMyksTWUoIm5nSWYiLCFhLmhlbHBlclNlcnZp'@;
put 'Y2UuaXNNaWNyb3NvZnQpLGZlKDMpLE1lKCJuZ0lmIixhLmZsYXRkYXRhKX19ZnVuY3Rpb24gbVR0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiY2xyLWNoZWNrYm94LXdyYXBwZXIiLDY4KSgxLCJpbnB1dCIsNjkpLEZ0KCJjaGFuZ2UiLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEp'@;
put 'LEN0KFJlKDMpLmdlbmVyYXRlR3JhcGgoKSl9KSxnaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1SZSgzKTtyZXR1cm4gbWkoZi5yZWZyZXNoQ2FjaGUsaCl8fChmLnJlZnJlc2hDYWNoZT1oKSxDdChoKX0pLGhlKCksZGUoMiwibGFiZWwiKSxMZSgzLCJSZWZy'@;
put 'ZXNoIENhY2hlIiksaGUoKSgpfWlmKDImYyl7Y29uc3QgYT1SZSgzKTtmZSgpLHBpKCJuZ01vZGVsIixhLnJlZnJlc2hDYWNoZSl9fWZ1bmN0aW9uIHZUdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImRpdiIsNTcpKDEsImJ1dHRvbiIsNTgpLEZ0KCJjbGljayIsZnVuY3Rpb24o'@;
put 'KXtyZXR1cm4gd3QoYSksQ3QoUmUoMikubGltaXREb3REZXB0aD0hMCl9KSxMZSgyLCIgTGltaXQgZGVwdGggIiksaGUoKSxkZSgzLCJkaXYiLDU5KSg0LCJkaXYiLDYwKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1SZSgyKTtyZXR1cm4gaC5mb3J3YXJkTGluZWFnZT0h'@;
put 'MSxDdChoLnJvdXRlci51cmwuaW5jbHVkZXMoImNvbHVtbiIpP2gub25HZW5lcmF0ZUNsaWNrKCk6aC5vbkdlbmVyYXRlR3JhcGhUYWJsZUNsaWNrKCkpfSksR3QoNSwiaW5wdXQiLDYxKSxkZSg2LCJsYWJlbCIpLExlKDcsIkJhY2t3YXJkIiksaGUoKSgpLGRlKDgsImRpdiIsNjApLEZ0KCJj'@;
put 'bGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPVJlKDIpO3JldHVybiBoLmZvcndhcmRMaW5lYWdlPSEwLEN0KGgucm91dGVyLnVybC5pbmNsdWRlcygiY29sdW1uIik/aC5vbkdlbmVyYXRlQ2xpY2soKTpoLm9uR2VuZXJhdGVHcmFwaFRhYmxlQ2xpY2soKSl9KSxHdCg5LCJpbnB1dCIs'@;
put 'NjEpLGRlKDEwLCJsYWJlbCIpLExlKDExLCJGb3J3YXJkIiksaGUoKSgpKCksZGUoMTIsImNsci1kcm9wZG93biIsNjIpKDEzLCJidXR0b24iLDYzKSxMZSgxNCwiIERvd25sb2FkICIpLEd0KDE1LCJjbHItaWNvbiIsMjIpLGhlKCksZ3QoMTYsZ1R0LDcsMiwiY2xyLWRyb3Bkb3duLW1lbnUi'@;
put 'LDIzKSxoZSgpLGd0KDE3LG1UdCw0LDEsImNsci1jaGVja2JveC13cmFwcGVyIiw2NCksaGUoKX1pZigyJmMpe2NvbnN0IGE9UmUoMik7ZmUoNSksTWUoImNoZWNrZWQiLCFhLmZvcndhcmRMaW5lYWdlKSxmZSg0KSxNZSgiY2hlY2tlZCIsYS5mb3J3YXJkTGluZWFnZSksZmUoNCksTWUoImRp'@;
put 'c2FibGVkIiwhYS5jb2x1bW4mJiFhLnRhYmxlKSxmZSg0KSxNZSgibmdJZiIsYS5jb2x1bW4pfX1mdW5jdGlvbiBiVHQoYyxsKXsxJmMmJihkZSgwLCJzcGFuIiw3MyksTGUoMSwiIExvYWRpbmcuLi4gIiksaGUoKSl9ZnVuY3Rpb24geVR0KGMsbCl7MSZjJiZHdCgwLCJzcGFuIiw0Myl9ZnVu'@;
put 'Y3Rpb24gX1R0KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2Iiw3NCkoMSwiZGl2Iiw3NSksZ3QoMix5VHQsMSwwLCJzcGFuIiw3NiksaGUoKSxHdCgzLCJkaXYiLDc3KSxoZSgpKSwyJmMpe2NvbnN0IGE9UmUoMyk7ZmUoMiksTWUoIm5nSWYiLGEuZ3JhcGhSZW5kZXJpbmcpfX1mdW5jdGlvbiB3'@;
put 'VHQoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiKSgxLCJkaXYiLDcwKSxndCgyLGJUdCwyLDAsInNwYW4iLDcxKSgzLF9UdCw0LDEsImRpdiIsNzIpLGhlKCkoKSksMiZjKXtjb25zdCBhPVJlKDIpO1RyKCJtdC0yIixhLnRhYmxlRmxhZyksZmUoMiksTWUoIm5nSWYiLGEuZ3JhcGhMb2FkaW5n'@;
put 'KSxmZSgpLE1lKCJuZ0lmIiwhYS5ncmFwaExvYWRpbmcpfX1mdW5jdGlvbiBDVHQoYyxsKXtpZigxJmMmJihzaSgwKSxndCgxLGRUdCwyLDEsImRpdiIsNDcpLGRlKDIsImRpdiIsNDgpKDMsInNlY3Rpb24iLDQ5KSg0LCJkaXYiLDUwKSxndCg1LGhUdCw1LDQsInNwYW4iLDExKSxoZSgpLGd0'@;
put 'KDYsdlR0LDE4LDQsImRpdiIsNTEpLGhlKCksZ3QoNyx3VHQsNCw0LCJkaXYiLDUyKSxoZSgpLGxpKCkpLDImYyl7Y29uc3QgYT1SZSgpO2ZlKCksTWUoIm5nSWYiLCFhLmdyYXBoQ29udGFpbmVyKSxmZSg0KSxNZSgibmdJZiIsYS5saW5lYWdlVGFibGVOYW1lLmxlbmd0aD4wKSxmZSgpLE1l'@;
put 'KCJuZ0lmIixhLmdyYXBoQ29udGFpbmVyKSxmZSgpLE1lKCJuZ0lmIixhLmdyYXBoQ29udGFpbmVyKX19ZnVuY3Rpb24gU1R0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiZGl2Iiw2NiksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChSZSgyKS5yZW5kZXJU'@;
put 'b0Rvd25sb2FkKCJQTkciKSl9KSxMZSgxLCIgUE5HICIpLGhlKCl9fWZ1bmN0aW9uIE1UdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImNsci1kcm9wZG93bi1tZW51Iiw2NSkoMSwiZGl2Iiw2NiksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChSZSgpLnJl'@;
put 'bmRlclRvRG93bmxvYWQoIlNWRyIpKX0pLExlKDIsIlNWRyIpLGhlKCksZ3QoMyxTVHQsMiwwLCJkaXYiLDY3KSxkZSg0LCJkaXYiLDY2KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1SZSgpO3JldHVybiBoLmRvd25sb2FkRG90KCksQ3QoaC5jYW5jZWxSZW5kZXJpbmdH'@;
put 'cmFwaCgpKX0pLExlKDUsIiBEb3QgIiksaGUoKSgpfWlmKDImYyl7Y29uc3QgYT1SZSgpO2ZlKDMpLE1lKCJuZ0lmIiwhYS5oZWxwZXJTZXJ2aWNlLmlzTWljcm9zb2Z0KX19Y29uc3QgeFR0PXkoOTc1ODYpO2xldCBqTj0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYsdixNLEQs'@;
put 'Wil7dGhpcy5saWNlbmNlU2VydmljZT1hLHRoaXMuc2FzU2VydmljZT1kLHRoaXMucm91dGU9aCx0aGlzLnJvdXRlcj1mLHRoaXMubG9jYXRpb249dix0aGlzLmV2ZW50U2VydmljZT1NLHRoaXMubG9nZ2VyU2VydmljZT1ELHRoaXMuaGVscGVyU2VydmljZT1aLHRoaXMuc3dpdGNoRmxhZz0h'@;
put 'MSx0aGlzLnRhYmxlRmxhZz0hMCx0aGlzLmZvcndhcmRMaW5lYWdlPSExLHRoaXMuZmxhdGRhdGE9W10sdGhpcy5ncmFwaExvYWRpbmc9ITEsdGhpcy5ncmFwaFJlbmRlcmluZz0hMSx0aGlzLmdyYXBoQ29udGFpbmVyPSExLHRoaXMudml6SW5wdXQ9IiIsdGhpcy5saWJyYXJpZXNQYWdpbmc9'@;
put 'ITEsdGhpcy5saWJyYXJ5VGFibGVzUmVmPSIiLHRoaXMubGlicmFyaWVzU2VhcmNoPSIiLHRoaXMudGFibGVDb2x1bW5zUmVmPSIiLHRoaXMubGluZWFnZVRhYmxlTmFtZT0iIix0aGlzLmxpbmVhZ2VDb2x1bW5OYW1lPSIiLHRoaXMubGliPW51bGwsdGhpcy50YWJsZURpc2FibGU9ITEsdGhp'@;
put 'cy5yZWZyZXNoQ2FjaGU9ITEsdGhpcy5jdXJyZW50TGluZWFnZVBhdGhMaWJUYWJsZT0iIix0aGlzLmN1cnJlbnRMaW5lYWdlUGF0aENvbHVtbj0iIix0aGlzLmxhcmdlRG90RmlsZUxpbmVzPW51bGwsdGhpcy5sYXJnZURvdEZpbGVMaW1pdD0xZTMsdGhpcy5saW1pdERvdERlcHRoPSExLHRo'@;
put 'aXMucGVuZGluZ1JlbmRlckRvd25sb2FkPW51bGwsdGhpcy5kZWJvdW5jZVRpbWU9MjAwfXNob3dUYWJsZVNlbGVjdCgpe3RoaXMudGFibGVGbGFnPSF0aGlzLnRhYmxlRmxhZ310YWJsZU9uQ2xpY2soYSxkLGgpe3ZhciBmPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKih2LE0sRCxaPSExKXtN'@;
put 'LmNvbHVtbnM/KE0uZXhwYW5kZWQ9IU0uZXhwYW5kZWQsITA9PT1NLmV4cGFuZGVkJiYoZi50YWJsZT12LFp8fGYub25HZW5lcmF0ZUdyYXBoVGFibGVDbGljaygpKSk6KE0uZXhwYW5kZWQ9IU0uZXhwYW5kZWQsTS5sb2FkaW5nQ29sdW1ucz0hMCxmLnRhYmxlPXYsZi5jdXJyZW50TGluZWFn'@;
put 'ZVBhdGhMaWJUYWJsZT1NLkxJQk5BTUUrIi4iK00uVEFCTEVOQU1FLHlpZWxkIGYuc2VsZWN0VGFibGUodixNKSxafHxmLm9uR2VuZXJhdGVHcmFwaFRhYmxlQ2xpY2soKSksZi5jb2xsYXBzZVRyZWVJdGVtcyhELnRhYmxlcyxNKX0pLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1zZWxlY3RUYWJs'@;
put 'ZShhLGQpe3ZhciBoPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe2guY29sdW1uc0xpc3Q9W107bGV0IGY9e1NBU0NvbnRyb2xUYWJsZTpbe3RhYmxldXJpOmF9XX07eWllbGQgaC5zYXNTZXJ2aWNlLnJlcXVlc3QoImxpbmVhZ2UvZ2V0bWV0YWNvbHMiLGYpLnRoZW4odj0+e2guY29sdW1u'@;
put 'c0xpc3Q9di5hZGFwdGVyUmVzcG9uc2UubWV0YWNvbHMsaC5jb2x1bW5zTGlzdCYmaC5jb2x1bW5zTGlzdC5sZW5ndGg+MCYmKGQuY29sdW1ucz1oLmNvbHVtbnNMaXN0LGQuZXhwYW5kZWQ9ITAsZC5sb2FkaW5nQ29sdW1ucz0hMSl9KS5jYXRjaCh2PT52KSxoLnNldEdsb2JhbERhdGEoKX0p'@;
put 'KCl9bG9hZE1vcmVMaWJyYXJpZXMoKXt0aGlzLmxpYnJhcmllc1BhZ2luZ3x8KHRoaXMubGlicmFyaWVzUGFnaW5nPSEwLHRoaXMuaGVscGVyU2VydmljZS5kaXNwbGF5TGlicmFyaWVzKHRoaXMubGlicmFyeUxpc3QsITApLHRoaXMubGlicmFyaWVzUGFnaW5nPSExKX1jb2xsYXBzZVRyZWVJ'@;
put 'dGVtcyhhLGQpe2EuZm9yRWFjaChoPT57SlNPTi5zdHJpbmdpZnkoaCkhPT1KU09OLnN0cmluZ2lmeShkKSYmKGguZXhwYW5kZWQ9ITEpfSl9dHJlZU5vZGVDbGlja2VkKGEsZCxoKXsiQ29sbGFwc2UiPT09YS50YXJnZXQudGl0bGUmJnRoaXMuY29sbGFwc2VUcmVlSXRlbXMoaCxkKX1saWJy'@;
put 'YXJ5T25DbGljayhhLGQpe3ZhciBoPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe2QuaW5Gb3JlZ3JvdW5kPSEwLGQudGFibGVzP2QuZXhwYW5kZWQ9IWQuZXhwYW5kZWQ6KGQubG9hZGluZ1RhYmxlcz0hMCx5aWVsZCBoLnNlbGVjdExpYnJhcnkoYSxkKSksaC5jb2xsYXBzZVRyZWVJdGVt'@;
put 'cyhoLmxpYnJhcnlMaXN0LGQpfSkoKX1zZWxlY3RMaWJyYXJ5KGEsZCl7dmFyIGg9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7aC50YWJsZXNMaXN0PVtdLGguY29sdW1uc0xpc3Q9W107bGV0IGY9e1NBU0NvbnRyb2xUYWJsZTpbe2xpYnVyaTphfV19O3lpZWxkIGguc2FzU2VydmljZS5y'@;
put 'ZXF1ZXN0KCJsaW5lYWdlL2dldG1ldGF0YWJsZXMiLGYpLnRoZW4odj0+e2gudGFibGVzTGlzdD12LmFkYXB0ZXJSZXNwb25zZS5tZXRhdGFibGVzLGgudGFibGVzTGlzdCYmaC50YWJsZXNMaXN0Lmxlbmd0aD4wJiYoZC50YWJsZXM9aC50YWJsZXNMaXN0LGQuZXhwYW5kZWQ9ITApLGguc2V0'@;
put 'R2xvYmFsRGF0YSgpfSkuY2F0Y2godj0+diksZC5sb2FkaW5nVGFibGVzPSExfSkoKX1jb2x1bW5PbkNsaWNrKGEsZCxoKXt0aGlzLmxpYj1kLkxJQlJBUllJRCx0aGlzLnRhYmxlPWguVEFCTEVVUkksdGhpcy5jb2x1bW49YS5DT0xVUkksdGhpcy5zZXRHbG9iYWxEYXRhKCksdGhpcy5vbkdl'@;
put 'bmVyYXRlQ2xpY2soKX10cmVlT25GaWx0ZXIoYSxkKXt0aGlzLmhlbHBlclNlcnZpY2UudHJlZU9uRmlsdGVyKGEsZCl9bGlicmFyeU9uRmlsdGVyKCl7dGhpcy5oZWxwZXJTZXJ2aWNlLmxpYnJhcnlPbkZpbHRlcih0aGlzLmxpYnJhcnlMaXN0LHRoaXMubGlicmFyaWVzU2VhcmNoLCJMSUJS'@;
put 'QVJZTkFNRSIpLEtuLmxpbmVhZ2UubGlicmFyaWVzU2VhcmNoPXRoaXMubGlicmFyaWVzU2VhcmNofWxpYkNvbHVtbkFjdGl2ZShhKXtpZighdGhpcy5jb2x1bW4pcmV0dXJuITE7bGV0IGQ9YS5zcGxpdCgiXFwiKSxoPXRoaXMuY29sdW1uLnNwbGl0KCJcXCIpO3JldHVybiBkW2QubGVuZ3Ro'@;
put 'LTFdPT1oW2gubGVuZ3RoLTFdfXNldEdsb2JhbERhdGEoKXtLbi5saW5lYWdlLmxpYnJhcnlMaXN0PXRoaXMubGlicmFyeUxpc3QsS24ubGluZWFnZS50YWJsZXNMaXN0PXRoaXMudGFibGVzTGlzdCxLbi5saW5lYWdlLmNvbHVtbnNMaXN0PXRoaXMuY29sdW1uc0xpc3QsS24ubGluZWFnZS5s'@;
put 'aWI9dGhpcy5saWIsS24ubGluZWFnZS50YWJsZT10aGlzLnRhYmxlLEtuLmxpbmVhZ2UuY29sdW1uPXRoaXMuY29sdW1ufWxvYWRHbG9iYWxEYXRhKCl7dGhpcy5saWJyYXJ5TGlzdD1Lbi5saW5lYWdlLmxpYnJhcnlMaXN0LHRoaXMudGFibGVzTGlzdD1Lbi5saW5lYWdlLnRhYmxlc0xpc3Qs'@;
put 'dGhpcy5jb2x1bW5zTGlzdD1Lbi5saW5lYWdlLmNvbHVtbnNMaXN0LHRoaXMubGlicmFyaWVzU2VhcmNoPUtuLmxpbmVhZ2UubGlicmFyaWVzU2VhcmNofXJlc3VibWl0V2l0aE1heERlcHRoKGEpe2xldCBkO3RoaXMuY2FuY2VsUmVuZGVyaW5nR3JhcGgoKSxhJiYoZD17bWF4X2RlcHRoOmF9'@;
put 'KSx0aGlzLnJvdXRlci5uYXZpZ2F0ZShbXSx7cmVsYXRpdmVUbzp0aGlzLnJvdXRlLHF1ZXJ5UGFyYW1zOmR9KX1uZ09uSW5pdCgpe0tuLnZpZXdlci5jdXJyZW50U2VsZWN0aW9uPSJ2aWV3L2xpbmVhZ2UiO2xldCBhPXRoaXMucm91dGUuc25hcHNob3QucGFyYW1zLnJlbG9hZDtpZih2b2lk'@;
put 'IDAhPT1hKXtsZXQgZD10aGlzLnJvdXRlci51cmw7InJlbG9hZCI9PT1hP2xvY2FsU3RvcmFnZS5nZXRJdGVtKCJmaXJzdExvYWQiKT8obG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oImZpcnN0TG9hZCIpLHRoaXMubG9jYXRpb24ucmVwbGFjZVN0YXRlKGQuc2xpY2UoMCxkLmxhc3RJbmRleE9m'@;
put 'KCIvIikpKSk6KGxvY2FsU3RvcmFnZS5maXJzdExvYWQ9ITAsc2V0VGltZW91dChmdW5jdGlvbigpe3dpbmRvdy5sb2NhdGlvbi5yZWxvYWQoKX0sMmUzKSk6dGhpcy5sb2NhdGlvbi5yZXBsYWNlU3RhdGUoZC5zbGljZSgwLGQubGFzdEluZGV4T2YoIi8iKSkpfXRoaXMuaW5pdERhdGEoKX1p'@;
put 'bml0RGF0YSgpe3ZhciBhPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe0tuLmxpbmVhZ2UubGlicmFyeUxpc3QmJihLbi5saW5lYWdlLmxpYnJhcnlMaXN0Lmxlbmd0aD4wP2EubG9hZEdsb2JhbERhdGEoKTp5aWVsZCBhLnNhc1NlcnZpY2UucmVxdWVzdCgicHVibGljL3ZpZXdsaWJzIixu'@;
put 'dWxsKS50aGVuKHY9PnthLmxpYnJhcnlMaXN0PXYuYWRhcHRlclJlc3BvbnNlLnNhc2xpYnMsYS5oZWxwZXJTZXJ2aWNlLmRpc3BsYXlMaWJyYXJpZXMoYS5saWJyYXJ5TGlzdCksYS5saWJyYXJ5TGlzdCYmYS5saWJyYXJ5TGlzdC5sZW5ndGg+MCYmKGEubGliPWEubGlicmFyeUxpc3RbMF0u'@;
put 'TElCUkFSWUlEKSxhLnNldEdsb2JhbERhdGEoKX0pLmNhdGNoKHY9PnYpLGEucm91dGUucXVlcnlQYXJhbXMuc3Vic2NyaWJlKHY9PnthLm9uUm91dGVDaGFuZ2UoKX0pLGEucm91dGUucGFyYW1zLnN1YnNjcmliZSh2PT57YS5vblJvdXRlQ2hhbmdlKCl9KSl9KSgpfW9uUm91dGVDaGFuZ2Uo'@;
put 'KXtjbGVhclRpbWVvdXQodGhpcy5kZWJvdW5jZVRpbWVvdXQpLHRoaXMuZGVib3VuY2VUaW1lb3V0PXNldFRpbWVvdXQoKCk9Pntjb25zdCBhPXRoaXMucm91dGUuc25hcHNob3QucGFyYW1zLmNvbHVyaSxkPXRoaXMucm91dGUuc25hcHNob3QucGFyYW1zLmRpcmVjdGlvbixoPXRoaXMucm91'@;
put 'dGUuc25hcHNob3QucGFyYW1zLnRhYmxlaWQsZj10aGlzLnJvdXRlLnNuYXBzaG90LnF1ZXJ5UGFyYW1zLm1heF9kZXB0aDthJiZkJiYodGhpcy5mb3J3YXJkTGluZWFnZT0iRk9SV0FSRCI9PT1kLHRoaXMuY29sdW1uPWEsdGhpcy5nZW5lcmF0ZUdyYXBoKGEsZCxmKSksIXRoaXMucm91dGVy'@;
put 'LnVybC5pbmNsdWRlcygiY29sdW1uIikmJmgmJmQmJih0aGlzLmZvcndhcmRMaW5lYWdlPSJGT1JXQVJEIj09PWQsdGhpcy50YWJsZT1oLHRoaXMuZ2VuZXJhdGVHcmFwaFRhYmxlTGV2ZWwoaCxkLGYpKX0sdGhpcy5kZWJvdW5jZVRpbWUpfW5nQWZ0ZXJDb250ZW50SW5pdCgpe31kaXJlY3Rp'@;
put 'b25UZXh0KCl7cmV0dXJuIHRoaXMuZm9yd2FyZExpbmVhZ2U/IkZPUldBUkQiOiJSRVZFUlNFIn1vbkdlbmVyYXRlQ2xpY2soKXtsZXQgYT10aGlzLmRpcmVjdGlvblRleHQoKSxkPXRoaXMuY29sdW1uP3RoaXMuY29sdW1uLnN1YnN0cmluZyh0aGlzLmNvbHVtbi5pbmRleE9mKCJcXCIpKzEp'@;
put 'Om51bGw7dGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCgiL3ZpZXcvbGluZWFnZS9jb2x1bW4vIitkKyIvIithKX1vbkdlbmVyYXRlR3JhcGhUYWJsZUNsaWNrKCl7bGV0IGE9dGhpcy5kaXJlY3Rpb25UZXh0KCksZD10aGlzLnRhYmxlLmluY2x1ZGVzKCJcXCIpP3RoaXMudGFibGUuc3BsaXQo'@;
put 'IlxcIilbMV06dGhpcy50YWJsZTt0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKCIvdmlldy9saW5lYWdlLyIrZCsiLyIrYSl9Z2VuZXJhdGVHcmFwaFRhYmxlTGV2ZWwoYSxkLGgpe3ZhciBmPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe2xldCB2PXtTQVNDb250cm9sVGFibGU6W3t0YWJs'@;
put 'ZV9pZDphLGRpcmVjdGlvbjpkfHxmLmRpcmVjdGlvblRleHQoKX1dfTtyZXR1cm4idW5kZWZpbmVkIj09PXYuU0FTQ29udHJvbFRhYmxlWzBdLnRhYmxlX2lkJiZmLmV2ZW50U2VydmljZS5zaG93QWJvcnRNb2RhbCgiZ2VuZXJhdGVHcmFwaFRhYmxlTGV2ZWwoKSIsInRhYmxlX2lkIGlzIHVu'@;
put 'ZGVmaW5lZC4iLHZvaWQgMCwiRnJvbnRlbmQgZXJyb3IiKSxoJiYodi5TQVNDb250cm9sVGFibGVbMF0ubWF4X2RlcHRoPWgpLGYudGFibGVGbGFnPSExLGYuc3dpdGNoRmxhZz0hMCxmLmdyYXBoQ29udGFpbmVyPSEwLGYuZ3JhcGhMb2FkaW5nPSEwLGYudml6SW5wdXQ9IiIsbmV3IFByb21p'@;
put 'c2UoKE0sRCk9PntmLnNhc1NlcnZpY2UucmVxdWVzdCgibGluZWFnZS9mZXRjaHRhYmxlbGluZWFnZSIsdikudGhlbihmdW5jdGlvbigpe3ZhciBaPWVlKGZ1bmN0aW9uKihyZSl7aWYocmUuYWRhcHRlclJlc3BvbnNlLmZsYXRkYXRhLmxlbmd0aD4wJiZmLmxpY2VuY2VTZXJ2aWNlLmNoZWNr'@;
put 'TGluZWFnZUxpbWl0KCkpcmV0dXJuIGYuZXZlbnRTZXJ2aWNlLnNob3dJbmZvTW9kYWwoIk5vdGljZSIsIllvdSBoYXZlIHJlYWNoZWQgZGFpbHkgbWF4aW11bSBvZiBsaW5lYWdlIGRpYWdyYW0gcmVuZGVyaW5ncy4gVG8gdW5sb2NrIGFkZGl0aW9uYWwgZGlhZ3JhbXMsIGNvbnRhY3Qgc3Vw'@;
put 'cG9ydEBkYXRhY29udHJvbGxlci5pbyIpLHZvaWQgZi5yb3V0ZXIubmF2aWdhdGVCeVVybCgiL3ZpZXcvbGluZWFnZSIpO2lmKCJzdHJpbmciPT10eXBlb2YgcmUpcmV0dXJuIGYudml6SW5wdXQ9ImRpZ3JhcGggRyB7U0FTIEVycm9yfSIsdm9pZCBmLmJ1aWxkR3JhcGgoKTtmLmxpbmVhZ2VU'@;
put 'YWJsZU5hbWU9cmUuYWRhcHRlclJlc3BvbnNlLmluZm9bMF0uTElCUkVGKyIuIityZS5hZGFwdGVyUmVzcG9uc2UuaW5mb1swXS5UQUJMRU5BTUU7bGV0IGNlPXJlLmFkYXB0ZXJSZXNwb25zZS5maW5hbGZpbmFsLGJlPSIiO2ZvcihsZXQgRWU9MDtFZTxjZS5sZW5ndGg7RWUrKyliZSs9dW5l'@;
put 'c2NhcGUoY2VbRWVdLkxJTkUpKyJcbiI7aWYoZi5mbGF0ZGF0YT1yZS5hZGFwdGVyUmVzcG9uc2UuZmxhdGRhdGEsZi5saWJyYXJ5TGlzdCl7bGV0IEVlPWYubGlicmFyeUxpc3QuZmluZChCZT0+cmUuYWRhcHRlclJlc3BvbnNlLmluZm9bMF0uTElCVVJJLnRvVXBwZXJDYXNlKCkuaW5jbHVk'@;
put 'ZXMoQmUuTElCUkFSWUlELnRvVXBwZXJDYXNlKCkpKTtpZihFZSl7bGV0IEJlO2lmKHlpZWxkIGYubGlicmFyeU9uQ2xpY2soRWUuTElCUkFSWUlELEVlKSxFZS50YWJsZXMmJihCZT1FZS50YWJsZXMuZmluZChxZT0+cWUuVEFCTEVVUkkudG9VcHBlckNhc2UoKS5pbmNsdWRlcyhyZS5hZGFw'@;
put 'dGVyUmVzcG9uc2UuaW5mb1swXS5UQUJMRUlELnRvVXBwZXJDYXNlKCkpKSxCZSkpe2lmKGYudGFibGU9QmUuVEFCTEVVUkksZi50YWJsZSl7Y29uc3QgcWU9Zi50YWJsZS5yZXBsYWNlKCJcXCIsIlxcXFwiKTtzZXRUaW1lb3V0KCgpPT57bGV0IHJ0PWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3Io'@;
put 'YFtpZD0nJHtxZX0nXWApO3J0JiZydC5zY3JvbGxJbnRvVmlldygpfSwxZTMpfWYudGFibGVPbkNsaWNrKEJlLlRBQkxFVVJJLEJlLEVlLHZvaWQgMCE9PWQpfUVlJiYoRWUuZXhwYW5kZWQ9ITApLEJlJiYoQmUuZXhwYW5kZWQ9ITApfX1mLnZpeklucHV0PWJlfHwiZGlncmFwaCBHIHtObyBM'@;
put 'aW5lYWdlIEF2YWlsYWJsZX0iLGYudml6SW5wdXQ9Zi52aXpJbnB1dC5yZXBsYWNlKC9cc2RzOi9nLCJcbmRzOiIpLnJlcGxhY2UoL1xzXG4vZywiXG4iKSxmLmlkbG9va3VwPXJlLmFkYXB0ZXJSZXNwb25zZS5pZGxvb2t1cCxyZS5hZGFwdGVyUmVzcG9uc2UuZmluYWxmaW5hbC5sZW5ndGg+'@;
put 'Zi5sYXJnZURvdEZpbGVMaW1pdD9mLmxhcmdlRG90RmlsZUxpbmVzPXJlLmFkYXB0ZXJSZXNwb25zZS5maW5hbGZpbmFsLmxlbmd0aDpmLmJ1aWxkR3JhcGgoKSxNKCl9KTtyZXR1cm4gZnVuY3Rpb24ocmUpe3JldHVybiBaLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KCkpLmNhdGNoKFo9Pntm'@;
put 'LmdyYXBoTG9hZGluZz0hMSxmLmdyYXBoQ29udGFpbmVyPSExfSl9KX0pKCl9Y2FuY2VsUmVuZGVyaW5nR3JhcGgoKXt0aGlzLnZpeklucHV0PSJkaWdyYXBoIEcge05vIExpbmVhZ2UgQXZhaWxhYmxlfSIsdGhpcy5sYXJnZURvdEZpbGVMaW5lcz1udWxsLHRoaXMuYnVpbGRHcmFwaCgpfWNv'@;
put 'bnRpbnVlUmVuZGVyaW5nR3JhcGgoKXt0aGlzLmxhcmdlRG90RmlsZUxpbmVzPW51bGwsdGhpcy5idWlsZEdyYXBoKCgpPT57aWYobnVsbCE9PXRoaXMucGVuZGluZ1JlbmRlckRvd25sb2FkKXtzd2l0Y2godGhpcy5wZW5kaW5nUmVuZGVyRG93bmxvYWQpe2Nhc2UiUE5HIjp0aGlzLmRvd25s'@;
put 'b2FkUE5HKCk7YnJlYWs7Y2FzZSJTVkciOnRoaXMuZG93bmxvYWRTVkcoKX10aGlzLnBlbmRpbmdSZW5kZXJEb3dubG9hZD1udWxsLHRoaXMudml6SW5wdXQ9ImRpZ3JhcGggRyB7Tm8gTGluZWFnZSBBdmFpbGFibGV9Iix0aGlzLmJ1aWxkR3JhcGgoKX19KX1yZW5kZXJUb0Rvd25sb2FkKGEp'@;
put 'e3N3aXRjaChhKXtjYXNlIlBORyI6dGhpcy5wZW5kaW5nUmVuZGVyRG93bmxvYWQ9IlBORyIsdGhpcy5jb250aW51ZVJlbmRlcmluZ0dyYXBoKCk7YnJlYWs7Y2FzZSJTVkciOnRoaXMucGVuZGluZ1JlbmRlckRvd25sb2FkPSJTVkciLHRoaXMuY29udGludWVSZW5kZXJpbmdHcmFwaCgpfX1t'@;
put 'YWtlR3JhcGhMaW5rYWJsZShhKXtsZXQgZD1kb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCIjZ3JhcGggLm5vZGUiKTtmb3IobGV0IGggb2YgZCl7bGV0IE0sZj1oLnF1ZXJ5U2VsZWN0b3IoInRpdGxlIikuaW5uZXJIVE1MLHY9YS5maW5kKEQ9PkQuTUVUQUlEPT09Zik7diYmKE09IlRBQkxF'@;
put 'Ij09PXYuTUVUQVRZUEU/Ii92aWV3L2RhdGEvIit2Lk1FVEFOQU1FOiIvdmlldy9tZXRhZGF0YS9vYmplY3QvIit2Lk1FVEFJRCxoLmNsYXNzTGlzdC5hZGQoImN1cnNvci1wb2ludGVyIiksaC5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsRD0+e3RoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwo'@;
put 'TSl9KSl9fWdlbmVyYXRlR3JhcGgoYSxkLGgpe3ZhciBmPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe2xldCB2PXtTQVNDb250cm9sVGFibGU6W3tjb2x1cmk6YXx8Zi5jb2x1bW4sZGlyZWN0aW9uOmR8fGYuZGlyZWN0aW9uVGV4dCgpLHJlZnJlc2g6Zi5yZWZyZXNoQ2FjaGU/MTowfV19'@;
put 'O3JldHVybiJ1bmRlZmluZWQiPT09di5TQVNDb250cm9sVGFibGVbMF0uY29sdXJpJiZmLmV2ZW50U2VydmljZS5zaG93QWJvcnRNb2RhbCgiZ2VuZXJhdGVHcmFwaCgpIiwiY29sdXJpIGlzIHVuZGVmaW5lZC4iLHZvaWQgMCwiRnJvbnRlbmQgZXJyb3IiKSxoJiYodi5TQVNDb250cm9sVGFi'@;
put 'bGVbMF0ubWF4X2RlcHRoPWgpLGYudGFibGVGbGFnPSExLGYuc3dpdGNoRmxhZz0hMCxmLmdyYXBoQ29udGFpbmVyPSEwLGYuZ3JhcGhMb2FkaW5nPSEwLGYudml6SW5wdXQ9IiIsbmV3IFByb21pc2UoKE0sRCk9PntmLnNhc1NlcnZpY2UucmVxdWVzdCgibGluZWFnZS9mZXRjaGNvbGxpbmVh'@;
put 'Z2UiLHYpLnRoZW4oZnVuY3Rpb24oKXt2YXIgWj1lZShmdW5jdGlvbioocmUpe2lmKHJlLmFkYXB0ZXJSZXNwb25zZS5mbGF0ZGF0YS5sZW5ndGg+MCYmZi5saWNlbmNlU2VydmljZS5jaGVja0xpbmVhZ2VMaW1pdCgpKXJldHVybiBmLmV2ZW50U2VydmljZS5zaG93SW5mb01vZGFsKCJOb3Rp'@;
put 'Y2UiLCJZb3UgaGF2ZSByZWFjaGVkIGRhaWx5IG1heGltdW0gb2YgbGluZWFnZSBkaWFncmFtIHJlbmRlcmluZ3MuIFRvIHVubG9jayBhZGRpdGlvbmFsIGRpYWdyYW1zLCBjb250YWN0IHN1cHBvcnRAZGF0YWNvbnRyb2xsZXIuaW8iKSx2b2lkIGYucm91dGVyLm5hdmlnYXRlQnlVcmwoIi92'@;
put 'aWV3L2xpbmVhZ2UiKTtpZigic3RyaW5nIj09dHlwZW9mIHJlLmFkYXB0ZXJSZXNwb25zZSlyZXR1cm4gZi52aXpJbnB1dD0iZGlncmFwaCBHIHtTQVMgRXJyb3J9Iix2b2lkIGYuYnVpbGRHcmFwaCgpO2YubGluZWFnZVRhYmxlTmFtZT1yZS5hZGFwdGVyUmVzcG9uc2UuaW5mb1swXS5MSUJS'@;
put 'RUYrIi4iK3JlLmFkYXB0ZXJSZXNwb25zZS5pbmZvWzBdLlRBQk5BTUUsZi5saW5lYWdlQ29sdW1uTmFtZT1yZS5hZGFwdGVyUmVzcG9uc2UuaW5mb1swXS5DT0xOQU1FLGYuaWRsb29rdXA9cmUuYWRhcHRlclJlc3BvbnNlLmlkbG9va3VwO2xldCBjZT1yZS5hZGFwdGVyUmVzcG9uc2UuZnJv'@;
put 'bXNhcyxiZT0iIjtmb3IobGV0IEVlPTA7RWU8Y2UubGVuZ3RoO0VlKyspYmUrPXVuZXNjYXBlKGNlW0VlXS5TVFJJTkcpKyJcbiI7aWYoZi52aXpJbnB1dD1iZXx8ImRpZ3JhcGggRyB7Tm8gTGluZWFnZSBBdmFpbGFibGV9IixmLnZpeklucHV0PWYudml6SW5wdXQucmVwbGFjZSgvXHNkczov'@;
put 'ZywiXG5kczoiKS5yZXBsYWNlKC9cc1xuL2csIlxuIiksZi5mbGF0ZGF0YT1yZS5hZGFwdGVyUmVzcG9uc2UuZmxhdGRhdGEsZi5saWJyYXJ5TGlzdCl7bGV0IEJlLEVlPWYubGlicmFyeUxpc3QuZmluZChxZT0+cmUuYWRhcHRlclJlc3BvbnNlLmluZm9bMF0/LkxJQlVSST8udG9VcHBlckNh'@;
put 'c2UoKT8uaW5jbHVkZXMocWU/LkxJQlJBUllJRD8udG9VcHBlckNhc2UoKSkpO0VlJiYoeWllbGQgZi5saWJyYXJ5T25DbGljayhFZS5MSUJSQVJZSUQsRWUpLEVlLnRhYmxlcyYmKEJlPUVlLnRhYmxlcy5maW5kKHFlPT5xZS5UQUJMRVVSST09PXJlLmFkYXB0ZXJSZXNwb25zZS5pbmZvWzBd'@;
put 'LlRBQlVSSSksQmUmJmYudGFibGVPbkNsaWNrKEJlLlRBQkxFVVJJLEJlLEVlLCEwKS50aGVuKCgpPT57bGV0IHFlPUJlLlRBQkxFVVJJO2lmKHFlKXtjb25zdCBydD1xZS5yZXBsYWNlKCJcXCIsIlxcXFwiKTtsZXQgcHQ9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgW2lkPScke3J0fSddYCk7'@;
put 'c2V0VGltZW91dCgoKT0+e3B0JiYoZi5sb2dnZXJTZXJ2aWNlLmxvZygibGlicmFyeVRvU2VsZWN0IixFZSkscHQuc2Nyb2xsSW50b1ZpZXcoKSl9LDFlMyl9fSkpLEVlJiYoRWUuZXhwYW5kZWQ9ITApLEJlJiYoQmUuZXhwYW5kZWQ9ITApKX1yZS5hZGFwdGVyUmVzcG9uc2UuZnJvbXNhcy5s'@;
put 'ZW5ndGg+Zi5sYXJnZURvdEZpbGVMaW1pdD9mLmxhcmdlRG90RmlsZUxpbmVzPXJlLmFkYXB0ZXJSZXNwb25zZS5mcm9tc2FzLmxlbmd0aDpmLmJ1aWxkR3JhcGgoKSxNKCl9KTtyZXR1cm4gZnVuY3Rpb24ocmUpe3JldHVybiBaLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KCkpLmNhdGNoKFo9'@;
put 'PntmLmdyYXBoTG9hZGluZz0hMSxmLmdyYXBoQ29udGFpbmVyPSExfSl9KX0pKCl9Z2V0U1ZHVVJMKCl7bGV0IGE9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImdyYXBoIiksZD1uZXcgWE1MU2VyaWFsaXplcixoPW5ldyBCbG9iKFtkLnNlcmlhbGl6ZVRvU3RyaW5nKGEpXSx7dHlwZToiaW1h'@;
put 'Z2Uvc3ZnK3htbCJ9KTtyZXR1cm4gVVJMLmNyZWF0ZU9iamVjdFVSTChoKX1nZXRTVkdCbG9iKCl7bGV0IGE9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImdyYXBoIiksZD1uZXcgWE1MU2VyaWFsaXplcjtyZXR1cm4gbmV3IEJsb2IoW2Quc2VyaWFsaXplVG9TdHJpbmcoYSldLHt0eXBlOiJp'@;
put 'bWFnZS9zdmcreG1sIn0pfWRvd25sb2FkU1ZHKCl7aWYoQk4oIiNncmFwaCIpLnJlc2V0Wm9vbSgpLG5hdmlnYXRvci5hcHBWZXJzaW9uLnRvU3RyaW5nKCkuaW5kZXhPZigiLk5FVCIpPjApd2luZG93Lm5hdmlnYXRvci5tc1NhdmVCbG9iKHRoaXMuZ2V0U1ZHQmxvYigpLHRoaXMuY29uc3Ry'@;
put 'dWN0TmFtZSgic3ZnIikpO2Vsc2V7bGV0IGE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpO2EuaHJlZj10aGlzLmdldFNWR1VSTCgpLGEuZG93bmxvYWQ9dGhpcy5jb25zdHJ1Y3ROYW1lKCJzdmciKSxkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGEpLGEuY2xpY2soKSxkb2N1bWVudC5i'@;
put 'b2R5LnJlbW92ZUNoaWxkKGEpfX1kb3dubG9hZFBORygpe3ZhciBhPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe0JOKCIjZ3JhcGgiKS5yZXNldFpvb20oKSwkRXQuc2F2ZVN2Z0FzUG5nKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIiNncmFwaCBzdmciKSxhLmNvbnN0cnVjdE5hbWUoInBu'@;
put 'ZyIpKX0pKCl9ZG93bmxvYWRDU1YoKXtsZXQgYT10aGlzLmZsYXRkYXRhO2NvbnN0IGQ9KHJlLGNlKT0+bnVsbD09PWNlPyIiOmNlLGg9T2JqZWN0LmtleXMoYVswXSk7bGV0IGY9YS5tYXAocmU9PmgubWFwKGNlPT5KU09OLnN0cmluZ2lmeShyZVtjZV0sZCkpLmpvaW4oIiwiKSk7Zi51bnNo'@;
put 'aWZ0KGguam9pbigiLCIpKTtsZXQgdj1mLmpvaW4oIlxyXG4iKTt2YXIgTT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIiksRD1uZXcgQmxvYihbdl0se3R5cGU6InRleHQvY3N2In0pO2lmKG5hdmlnYXRvci5hcHBWZXJzaW9uLnRvU3RyaW5nKCkuaW5kZXhPZigiLk5FVCIpPjApd2luZG93'@;
put 'Lm5hdmlnYXRvci5tc1NhdmVCbG9iKEQsdGhpcy5jb25zdHJ1Y3ROYW1lKCJjc3YiKSk7ZWxzZXt2YXIgWj13aW5kb3cuVVJMLmNyZWF0ZU9iamVjdFVSTChEKTtNLmhyZWY9WixNLmRvd25sb2FkPXRoaXMuY29uc3RydWN0TmFtZSgiY3N2IiksTS5jbGljaygpLHdpbmRvdy5VUkwucmV2b2tl'@;
put 'T2JqZWN0VVJMKFopLE0ucmVtb3ZlKCl9fWdldERvdFVybCgpe2xldCBkPW5ldyBCbG9iKFt0aGlzLnZpeklucHV0XSx7dHlwZToidGV4dC9wbGFpbiJ9KTtyZXR1cm4gd2luZG93LlVSTC5jcmVhdGVPYmplY3RVUkwoZCl9Z2V0RG90QmxvYigpe3JldHVybiBuZXcgQmxvYihbdGhpcy52aXpJ'@;
put 'bnB1dF0se3R5cGU6InRleHQvcGxhaW4ifSl9ZG93bmxvYWREb3QoKXtpZihuYXZpZ2F0b3IuYXBwVmVyc2lvbi50b1N0cmluZygpLmluZGV4T2YoIi5ORVQiKT4wKXdpbmRvdy5uYXZpZ2F0b3IubXNTYXZlQmxvYih0aGlzLmdldERvdEJsb2IoKSx0aGlzLmNvbnN0cnVjdE5hbWUoInR4dCIp'@;
put 'KTtlbHNle2xldCBhPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKTthLmhyZWY9dGhpcy5nZXREb3RVcmwoKSxhLmRvd25sb2FkPXRoaXMuY29uc3RydWN0TmFtZSgidHh0IiksZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChhKSxhLmNsaWNrKCksZG9jdW1lbnQuYm9keS5yZW1vdmVDaGls'@;
put 'ZChhKX19c2hvd1N2Zygpe3dpbmRvdy5vcGVuKHRoaXMuZ2V0U1ZHVVJMKCksIl9ibGFuayIpfWJ1aWxkR3JhcGgoYSl7dGhpcy5ldmVudFNlcnZpY2UuY2xvc2VTaWRlYmFyKCksdGhpcy5ncmFwaExvYWRpbmc9ITEsdGhpcy5ncmFwaFJlbmRlcmluZz0hMCxzZXRUaW1lb3V0KCgpPT57Qk4o'@;
put 'IiNncmFwaCIpLnpvb20oITApLmFkZEltYWdlKCJodHRwczovL2RhdGFjb250cm9sbGVyLmlvL3dwLWNvbnRlbnQvdXBsb2Fkcy8yMDIwLzAxL2ZjMS5wbmciLCIzMHB4IiwiMzBweCIpLnJlbmRlckRvdCh0aGlzLnZpeklucHV0LCgpPT57dGhpcy5ncmFwaFJlbmRlcmluZz0hMSx0aGlzLmlk'@;
put 'bG9va3VwJiZ0aGlzLm1ha2VHcmFwaExpbmthYmxlKHRoaXMuaWRsb29rdXApLGEmJmEoKX0pfSwxMDApfWNvbnN0cnVjdE5hbWUoYSl7bGV0IGQ9IiIsaD0iIixmPSIiLHY9eFR0KCkuZm9ybWF0KCJZWU1NRERfSEhtbSIpO2lmKHRoaXMubGlicmFyeUxpc3QmJnRoaXMubGlicmFyeUxpc3Qu'@;
put 'bGVuZ3RoKXtsZXQgTT10aGlzLmxpYnJhcnlMaXN0LmZpbmQoRD0+RC5MSUJSQVJZSUQ9PXRoaXMubGliKTtNJiYoZD1gXyR7TS5MSUJSQVJZTkFNRX1gKX1pZih0aGlzLnRhYmxlc0xpc3QmJnRoaXMudGFibGVzTGlzdC5sZW5ndGgpe2xldCBNPXRoaXMudGFibGVzTGlzdC5maW5kKEQ9PkQu'@;
put 'VEFCTEVVUkk9PXRoaXMudGFibGUpO00mJihoPWBfJHtNLlRBQkxFTkFNRX1gKX1pZih0aGlzLmNvbHVtbnNMaXN0JiZ0aGlzLmNvbHVtbnNMaXN0Lmxlbmd0aCl7bGV0IE09dGhpcy5jb2x1bW5zTGlzdC5maW5kKEQ9PkQuQ09MVVJJPT10aGlzLmNvbHVtbik7TSYmKGY9YF8ke00uQ09MTkFN'@;
put 'RX1gKX1yZXR1cm5gJHt0aGlzLmRpcmVjdGlvblRleHQoKX0ke2R9JHtofSR7Zn1fJHt2fS4ke2F9YH1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShHZSh1MSksR2UoQnMpLEdlKEN1KSxHZShMcyksR2UoZmgpLEdlKHZjKSxHZShTZCksR2UoU3Up'@;
put 'KX19c3RhdGlje3RoaXMuXHUwMjc1Y21wPVZyKHt0eXBlOmMsc2VsZWN0b3JzOltbImFwcC1saW5lYWdlIl1dLGhvc3RBdHRyczpbMSwiY29udGVudC1jb250YWluZXIiXSxkZWNsczo1OCx2YXJzOjExLGNvbnN0czpbWyJtYXhEZXB0aERvdCIsIiJdLFsibWF4RGVwdGgiLCIiXSxbInNlYXJj'@;
put 'aExpYlRyZWVJbnB1dCIsIiJdLFsic2VhcmNoVHJlZUlucHV0IiwiIl0sWzMsInNjcm9sbGVkVG9Cb3R0b20iXSxbImNsYXNzIiwic2VhcmNoLW5vZGUiLDQsIm5nSWYiXSxbNCwibmdGb3IiLCJuZ0Zvck9mIl0sWyJjbGFzcyIsInctMTAwIHRleHQtY2VudGVyIiw0LCJuZ0lmIl0sWzEsImNv'@;
put 'bnRlbnQtYXJlYSJdLFsxLCJjYXJkIl0sWyJjbGFzcyIsIm5vLXRhYmxlLXNlbGVjdGVkIiw0LCJuZ0lmIl0sWzQsIm5nSWYiXSxbMywiY2xyTW9kYWxPcGVuIiwiY2xyTW9kYWxDbG9zYWJsZSJdLFsxLCJtb2RhbC10aXRsZSJdLFsxLCJtb2RhbC1ib2R5Il0sWzEsIm1vZGFsLWZvb3RlciIs'@;
put 'ImQtZmxleCIsImZsZXgtY29sdW1uIl0sWzEsImJpZ2xpbmVhZ2Utcm93IiwibWItMGkiXSxbInR5cGUiLCJudW1iZXIiLCJtaW4iLCIxIiwicGxhY2Vob2xkZXIiLCJNYXggZGVwdGggdmFsdWUiLDEsImNsci1pbnB1dCIsIm1heC1kZXB0aC1pbnB1dCJdLFsxLCJtYi0yMCJdLFsxLCJiaWds'@;
put 'aW5lYWdlLXJvdyJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLXByaW1hcnkiLDMsImNsaWNrIl0sWyJjbHJEcm9wZG93blRyaWdnZXIiLCIiLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1wcmltYXJ5IiwibXQtMy1uZWdhdGl2ZSIsMywiZGlzYWJsZWQiXSxbInNoYXBl'@;
put 'IiwiY2FyZXQgZG93biJdLFsiY2xyUG9zaXRpb24iLCJib3R0b20tbGVmdCIsNCwiY2xySWZPcGVuIl0sWzEsInNlYXJjaC1ub2RlIl0sWzEsInRyZWUtc2VhcmNoLXdyYXBwZXIiXSxbImFwcFN0ZWFsRm9jdXMiLCIiLCJjbHJJbnB1dCIsIiIsInBsYWNlaG9sZGVyIiwiTGlicmFyaWVzIiwi'@;
put 'bmFtZSIsImlucHV0IiwiYXV0b2NvbXBsZXRlIiwib2ZmIiwzLCJuZ01vZGVsQ2hhbmdlIiwia2V5dXAiLCJuZ01vZGVsIl0sWyJzaGFwZSIsInNlYXJjaCIsNCwibmdJZiJdLFsic2hhcGUiLCJ0aW1lcyIsMywiY2xpY2siLDQsIm5nSWYiXSxbInNoYXBlIiwic2VhcmNoIl0sWyJzaGFwZSIs'@;
put 'InRpbWVzIiwzLCJjbGljayJdLFszLCJjbHJFeHBhbmRlZCIsImNsckxvYWRpbmciLCJjbHItZXhwYW5kZWQiLCJjbGljayIsImNsckV4cGFuZGVkQ2hhbmdlIiw0LCJuZ0lmIl0sWzMsImNsaWNrIiwiY2xyRXhwYW5kZWRDaGFuZ2UiLCJjbHJFeHBhbmRlZCIsImNsckxvYWRpbmciXSxbMSwi'@;
put 'bS0wIiwiY3Vyc29yLXBvaW50ZXIiLDMsImNsaWNrIl0sWyJzaGFwZSIsInJhY2stc2VydmVyIl0sWzMsImNsckV4cGFuZGVkIiwiY2xyTG9hZGluZyIsImNsci1leHBhbmRlZCIsImNsaWNrIiwiY2xyRXhwYW5kZWRDaGFuZ2UiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsiYXBwU3RlYWxGb2N1'@;
put 'cyIsIiIsImNscklucHV0IiwiIiwicGxhY2Vob2xkZXIiLCJUYWJsZXMiLCJuYW1lIiwiaW5wdXQiLCJhdXRvY29tcGxldGUiLCJvZmYiLDMsIm5nTW9kZWxDaGFuZ2UiLCJrZXl1cCIsIm5nTW9kZWwiXSxbMSwibS0wIiwiY3Vyc29yLXBvaW50ZXIiLDMsImNsaWNrIiwiaWQiXSxbInNoYXBl'@;
put 'IiwidGFibGUiXSxbImFwcFN0ZWFsRm9jdXMiLCIiLCJjbHJJbnB1dCIsIiIsInBsYWNlaG9sZGVyIiwiQ29sdW1ucyIsIm5hbWUiLCJpbnB1dCIsImF1dG9jb21wbGV0ZSIsIm9mZiIsMywibmdNb2RlbENoYW5nZSIsImtleXVwIiwibmdNb2RlbCJdLFsxLCJjbHItdHJlZW5vZGUtbGluayIs'@;
put 'MywiY2xpY2siXSxbInNoYXBlIiwib2JqZWN0cyJdLFsxLCJ3LTEwMCIsInRleHQtY2VudGVyIl0sWzEsInNwaW5uZXIiLCJzcGlubmVyLXNtIl0sWzEsIm5vLXRhYmxlLXNlbGVjdGVkIl0sWyJzaGFwZSIsIndhcm5pbmctc3RhbmRhcmQiLCJzaXplIiwiNjAiLDEsImlzLWluZm8iLCJpY29u'@;
put 'LWRjLWZpbGwiXSxbImNkcy10ZXh0Iiwic2VjdGlvbiIsMSwidGV4dC1jZW50ZXIiLCJjb2xvci1ncmF5IiwibXQtMTAiXSxbImNsYXNzIiwiY2FyZC1oZWFkZXIgZC1mbGV4IGZsZXgtY29sdW1uIGp1c3RpZnktY29udGVudC1jZW50ZXIiLDQsIm5nSWYiXSxbMSwiY2FyZC1ibG9jayJdLFsx'@;
put 'LCJmb3JtLWJsb2NrIiwic3ciLCJwb3NpdGlvbi1yZWxhdGl2ZSIsImQtZmxleCIsImFsaWduLWl0ZW1zLWNlbnRlciJdLFsxLCJsaW5hZ2UtdGl0bGUtd3JhcHBlciIsImQtZmxleCIsImFsaWduLWl0ZW1zLWNlbnRlciIsImZvbnQtd2VpZ2h0LWJvbGQiLCJwb3NpdGlvbi1hYnNvbHV0ZSJd'@;
put 'LFsiY2xhc3MiLCJjbHItY29sLW1kLTEyIHRleHQtY2VudGVyIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtZW5kIiw0LCJuZ0lmIl0sWzMsIm10LTIiLDQsIm5nSWYiXSxbMSwiY2FyZC1oZWFkZXIiLCJkLWZsZXgiLCJmbGV4LWNvbHVtbiIsImp1c3RpZnktY29udGVudC1jZW50ZXIiXSxbImNs'@;
put 'YXNzIiwidGV4dC1jZW50ZXIgcGItMTAiLDQsIm5nSWYiXSxbMSwidGV4dC1jZW50ZXIiLCJwYi0xMCJdLFszLCJyb3V0ZXJMaW5rIl0sWzEsImNsci1jb2wtbWQtMTIiLCJ0ZXh0LWNlbnRlciIsImQtZmxleCIsImp1c3RpZnktY29udGVudC1lbmQiXSxbInR5cGUiLCJidXR0b24iLDEsImJ0'@;
put 'biIsImJ0bi1vdXRsaW5lIiwibXItNSIsMywiY2xpY2siXSxbMSwiYnRuLWdyb3VwIiwiZGlyZWN0aW9uIiwiZC1ibG9jayJdLFsxLCJyYWRpbyIsImJ0biIsMywiY2xpY2siXSxbInR5cGUiLCJyYWRpbyIsIm5hbWUiLCJidG4tZ3JvdXAtZGVtby1yYWRpb3MiLDMsImNoZWNrZWQiXSxbMSwi'@;
put 'bXItMTAiXSxbImNsckRyb3Bkb3duVHJpZ2dlciIsIiIsMSwiYnRuIiwiYnRuLWluZm8tb3V0bGluZSIsMywiZGlzYWJsZWQiXSxbImNsYXNzIiwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciIsNCwibmdJZiJdLFsiY2xyUG9zaXRpb24iLCJib3R0b20tbGVmdCJdLFsiY2xyRHJvcGRvd25J'@;
put 'dGVtIiwiIiwzLCJjbGljayJdLFsiY2xyRHJvcGRvd25JdGVtIiwiIiwzLCJjbGljayIsNCwibmdJZiJdLFsxLCJkLWZsZXgiLCJhbGlnbi1pdGVtcy1jZW50ZXIiXSxbInR5cGUiLCJjaGVja2JveCIsImNsckNoZWNrYm94IiwiIiwibmFtZSIsInJlZnJlc2hDYWNoZSIsMywiY2hhbmdlIiwi'@;
put 'bmdNb2RlbENoYW5nZSIsIm5nTW9kZWwiXSxbMSwidGV4dC1jZW50ZXIiXSxbImNsYXNzIiwic3Bpbm5lciIsNCwibmdJZiJdLFsiY2xhc3MiLCJwb3NpdGlvbi1yZWxhdGl2ZSIsNCwibmdJZiJdLFsxLCJzcGlubmVyIl0sWzEsInBvc2l0aW9uLXJlbGF0aXZlIl0sWzEsImdyYXBoLXJlbmRl'@;
put 'ci1zcGlubmVyIl0sWyJjbGFzcyIsInNwaW5uZXIgc3Bpbm5lci1zbSIsNCwibmdJZiJdLFsiaWQiLCJncmFwaCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihkLGgpe2lmKDEmZCl7Y29uc3QgZj1MbigpO2RlKDAsImFwcC1zaWRlYmFyIiw0KSxGdCgic2Nyb2xsZWRUb0JvdHRvbSIsZnVuY3Rpb24o'@;
put 'KXtyZXR1cm4gd3QoZiksQ3QoaC5sb2FkTW9yZUxpYnJhcmllcygpKX0pLGRlKDEsImNsci10cmVlIiksZ3QoMixYRXQsNiwzLCJjbHItdHJlZS1ub2RlIiw1KSgzLHNUdCwyLDEsIm5nLWNvbnRhaW5lciIsNiksaGUoKSxndCg0LGxUdCwzLDAsImRpdiIsNyksaGUoKSxkZSg1LCJkaXYiLDgp'@;
put 'KDYsImRpdiIsOSksZ3QoNyxjVHQsNCwwLCJkaXYiLDEwKSg4LENUdCw4LDQsIm5nLWNvbnRhaW5lciIsMTEpLGhlKCkoKSxkZSg5LCJjbHItbW9kYWwiLDEyKSgxMCwiaDMiLDEzKSxMZSgxMSwiTGltaXQgRGVwdGgiKSxoZSgpLGRlKDEyLCJkaXYiLDE0KSgxMywicCIpLExlKDE0LCJFbnRl'@;
put 'ciB0aGUgZGVwdGggbnVtYmVyIHlvdSB3b3VsZCBsaWtlIHRvIGxpbWl0IERPVCByZW5kZXJpbmcgdG86IiksaGUoKSgpLGRlKDE1LCJkaXYiLDE1KSgxNiwiZGl2IiwxNiksR3QoMTcsImlucHV0IiwxNywwKSxoZSgpLGRlKDE5LCJjbHItY29udHJvbC1oZWxwZXIiLDE4KSxMZSgyMCwiVG8g'@;
put 'cmVuZGVyIHdpdGggdW5saW1pdGVkIGRlcHRoLCBsZWF2ZSB0aGUgaW5wdXQgZW1wdHkiKSxoZSgpLGRlKDIxLCJkaXYiLDE5KSgyMiwiYnV0dG9uIiwyMCksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChmKSxDdChoLmxpbWl0RG90RGVwdGg9ITEpfSksTGUoMjMsIiBDYW5jZWwg'@;
put 'IiksaGUoKSxkZSgyNCwiYnV0dG9uIiwyMCksRnQoImNsaWNrIixmdW5jdGlvbigpe3d0KGYpO2NvbnN0IE09aGEoMTgpO3JldHVybiBoLnJlc3VibWl0V2l0aE1heERlcHRoKE0udmFsdWUpLEN0KGgubGltaXREb3REZXB0aD0hMSl9KSxMZSgyNSwiIFJlc3VibWl0ICIpLGhlKCkoKSgpKCks'@;
put 'ZGUoMjYsImNsci1tb2RhbCIsMTIpKDI3LCJoMyIsMTMpLExlKDI4LCJXYXJuaW5nIiksaGUoKSxkZSgyOSwiZGl2IiwxNCkoMzAsInAiKSxMZSgzMSksaGUoKSgpLGRlKDMyLCJkaXYiLDE1KSgzMywiZGl2IiwxOSkoMzQsInAiKSxMZSgzNSwiUmVuZGVyIGFueXdheSAodGhpcyBtYXkgdGFr'@;
put 'ZSBhIGxvbmcgdGltZSkiKSxoZSgpLGRlKDM2LCJidXR0b24iLDIwKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGYpLEN0KGguY29udGludWVSZW5kZXJpbmdHcmFwaCgpKX0pLExlKDM3LCIgUmVuZGVyICIpLGhlKCkoKSxkZSgzOCwiZGl2IiwxOSkoMzksInAiKSxMZSg0MCwi'@;
put 'RG93bmxvYWQgdGhlIHJlc3VsdCAoUE5HICYgU1ZHIHJlcXVpcmUgcmVuZGVyaW5nKSIpLGhlKCksZGUoNDEsImNsci1kcm9wZG93biIpKDQyLCJidXR0b24iLDIxKSxMZSg0MywiIERvd25sb2FkICIpLEd0KDQ0LCJjbHItaWNvbiIsMjIpLGhlKCksZ3QoNDUsTVR0LDYsMSwiY2xyLWRyb3Bk'@;
put 'b3duLW1lbnUiLDIzKSxoZSgpKCksZGUoNDYsImRpdiIsMTkpKDQ3LCJwIiksTGUoNDgsIlJlc3VibWl0IHdpdGggYSBtYXgtZGVwdGggKHNwZWNpZnkgZGVwdGgpIiksaGUoKSxHdCg0OSwiaW5wdXQiLDE3LDEpLGRlKDUxLCJidXR0b24iLDIwKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3Qo'@;
put 'Zik7Y29uc3QgTT1oYSg1MCk7cmV0dXJuIEN0KGgucmVzdWJtaXRXaXRoTWF4RGVwdGgoTS52YWx1ZSkpfSksTGUoNTIsIiBSZXN1Ym1pdCAiKSxoZSgpKCksZGUoNTMsImRpdiIsMTkpKDU0LCJwIiksTGUoNTUsIkNhbmNlbCB0aGlzIHN1Ym1pc3Npb24iKSxoZSgpLGRlKDU2LCJidXR0b24i'@;
put 'LDIwKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGYpLEN0KGguY2FuY2VsUmVuZGVyaW5nR3JhcGgoKSl9KSxMZSg1NywiIENhbmNlbCAiKSxoZSgpKCkoKSgpfTImZCYmKGZlKDIpLE1lKCJuZ0lmIixoLmxpYnJhcnlMaXN0KSxmZSgpLE1lKCJuZ0Zvck9mIixoLmxpYnJhcnlM'@;
put 'aXN0KSxmZSgpLE1lKCJuZ0lmIixoLmxpYnJhcmllc1BhZ2luZyksZmUoMyksTWUoIm5nSWYiLCFoLmNvbHVtbiYmIWgudGFibGUpLGZlKCksTWUoIm5nSWYiLGguY29sdW1ufHxoLnRhYmxlKSxmZSgpLE1lKCJjbHJNb2RhbE9wZW4iLGgubGltaXREb3REZXB0aCkoImNsck1vZGFsQ2xvc2Fi'@;
put 'bGUiLCExKSxmZSgxNyksTWUoImNsck1vZGFsT3BlbiIsbnVsbCE9PWgubGFyZ2VEb3RGaWxlTGluZXMpKCJjbHJNb2RhbENsb3NhYmxlIiwhMSksZmUoNSksRHIoIiBUaGUgZ2VuZXJhdGVkIGRvdCBmaWxlIGhhcyAiLGgubGFyZ2VEb3RGaWxlTGluZXMsIiBsaW5lcy4gUmVuZGVyaW5nIG1h'@;
put 'eSB0YWtlIGEgbG9uZyB0aW1lLCBob3cgd291bGQgeW91IGxpa2UgdG8gcHJvY2VlZD8gIiksZmUoMTEpLE1lKCJkaXNhYmxlZCIsIWguY29sdW1uJiYhaC50YWJsZSkpfSxkZXBlbmRlbmNpZXM6W25zLGJhLGMxLHFsLE1kLG5sLCRzLEVoLFBkLGZnLEhsLG91LEt1LGowLEwyLGRzLGpMLElk'@;
put 'LFNoLFoxLHNnLGc3LG03LFZ5LGk0LHI0XSxlbmNhcHN1bGF0aW9uOjJ9KX19cmV0dXJuIGN9KSgpO2NvbnN0IEVUdD0oKT0+WzEwLDIwLDUwLDEwMF07ZnVuY3Rpb24gVFR0KGMsbCl7aWYoMSZjJiYoZGUoMCwib3B0aW9uIiwxNCksTGUoMSksaGUoKSksMiZjKXtjb25zdCBhPWwuJGltcGxp'@;
put 'Y2l0O2ZNKCJ2YWx1ZSIsYSksZmUoKSxEcigiICIsYSwiICIpfX1mdW5jdGlvbiBBVHQoYyxsKXsxJmMmJkd0KDAsImNsci1pY29uIiwyMCl9ZnVuY3Rpb24ga1R0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiY2xyLWljb24iLDIxKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3Qo'@;
put 'YSk7Y29uc3QgaD1SZSgyKTtyZXR1cm4gaC5tZXRhRGF0YVNlYXJjaD0iIixDdChoLm1ldGFMaXN0T25GaWx0ZXIoKSl9KSxoZSgpfX1mdW5jdGlvbiBEVHQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJjbHItdHJlZS1ub2RlIiwxNSkoMSwiZGl2IiwxNikoMiwiaW5wdXQiLDE3'@;
put 'LDApLGdpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPVJlKCk7cmV0dXJuIG1pKGYubWV0YURhdGFTZWFyY2gsaCl8fChmLm1ldGFEYXRhU2VhcmNoPWgpLEN0KGgpfSksRnQoImtleXVwIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChSZSgpLm1ldGFMaXN0'@;
put 'T25GaWx0ZXIoKSl9KSxoZSgpLGd0KDQsQVR0LDEsMCwiY2xyLWljb24iLDE4KSg1LGtUdCwxLDAsImNsci1pY29uIiwxOSksaGUoKSgpfWlmKDImYyl7Y29uc3QgYT1oYSgzKSxkPVJlKCk7ZmUoMikscGkoIm5nTW9kZWwiLGQubWV0YURhdGFTZWFyY2gpLGZlKDIpLE1lKCJuZ0lmIixhLnZh'@;
put 'bHVlLmxlbmd0aDwxKSxmZSgpLE1lKCJuZ0lmIixhLnZhbHVlLmxlbmd0aD4wKX19ZnVuY3Rpb24gSVR0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiY2xyLXRyZWUtbm9kZSIsMjMpLEZ0KCJjbGljayIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1SZSgpLiRpbXBsaWNpdCx2'@;
put 'PVJlKCk7cmV0dXJuIEN0KHYudHJlZU5vZGVDbGlja2VkKGgsZix2Lm1ldGFEYXRhTGlzdCkpfSksZ2koImNsckV4cGFuZGVkQ2hhbmdlIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPVJlKCkuJGltcGxpY2l0O3JldHVybiBtaShmLmV4cGFuZGVkLGgpfHwoZi5leHBhbmRlZD1oKSxDdCho'@;
put 'KX0pLGRlKDEsInAiLDI0KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1SZSgpLiRpbXBsaWNpdCxmPVJlKCk7cmV0dXJuIGYubWV0YURhdGFJZD1oLklELEN0KGYubWV0YURhdGFPbkNsaWNrKGYubWV0YURhdGFJZCxoKSl9KSxHdCgyLCJjbHItaWNvbiIsMjUpLExlKDMp'@;
put 'LGhlKCkoKX1pZigyJmMpe2NvbnN0IGE9UmUoKS4kaW1wbGljaXQ7cGkoImNsckV4cGFuZGVkIixhLmV4cGFuZGVkKSxNZSgiY2xyTG9hZGluZyIsYS5sb2FkaW5nVGFibGVzJiYhYS50YWJsZXMpLGZlKDMpLERyKCIgIixhLklELCIgIil9fWZ1bmN0aW9uIFJUdChjLGwpe2lmKDEmYyYmKHNp'@;
put 'KDApLGd0KDEsSVR0LDQsMywiY2xyLXRyZWUtbm9kZSIsMjIpLGxpKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtmZSgpLE1lKCJuZ0lmIiwhYS5oaWRkZW4pfX1mdW5jdGlvbiBMVHQoYyxsKXsxJmMmJihkZSgwLCJkaXYiLDI2KSxHdCgxLCJjbHItaWNvbiIsMjcpLGRlKDIsInAiLDI4'@;
put 'KSxMZSgzLCIgUGxlYXNlIHNlbGVjdCBhIHR5cGUgIiksaGUoKSgpKX1mdW5jdGlvbiBPVHQoYyxsKXsxJmMmJihkZSgwLCJoNCIpLExlKDEsIkxvYWRpbmcgbWV0YWRhdGEgdHlwZXMiKSxoZSgpKX1mdW5jdGlvbiBQVHQoYyxsKXsxJmMmJihkZSgwLCJoNCIpLExlKDEsIkxvYWRpbmcgbWV0'@;
put 'YWRhdGEgb2JqZWN0cyIpLGhlKCkpfWZ1bmN0aW9uIEZUdChjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIpLGd0KDEsT1R0LDIsMCwiaDQiLDMxKSgyLFBUdCwyLDAsImg0IiwzMSksaGUoKSksMiZjKXtjb25zdCBhPVJlKDIpO2ZlKCksTWUoIm5nSWYiLGEubWV0YXR5cGVzTG9hZGluZyksZmUo'@;
put 'KSxNZSgibmdJZiIsIWEubWV0YXR5cGVzTG9hZGluZyl9fWZ1bmN0aW9uIEhUdChjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIsMjkpKDEsInNwYW4iLDMwKSxMZSgyLCIgTG9hZGluZy4uLiAiKSxoZSgpLGd0KDMsRlR0LDMsMiwiZGl2IiwzMSksaGUoKSksMiZjKXtjb25zdCBhPVJlKCk7ZmUo'@;
put 'MyksTWUoIm5nSWYiLGEubG9hZGluZyl9fWZ1bmN0aW9uIE5UdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImRpdiIsMzgpKDEsImlucHV0IiwzOSwxKSxnaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1SZSgyKTtyZXR1cm4gbWkoZi5tZXRhT2Jq'@;
put 'ZWN0U2VhcmNoLGgpfHwoZi5tZXRhT2JqZWN0U2VhcmNoPWgpLEN0KGgpfSksRnQoImtleXVwIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChSZSgyKS5tZXRhT2JqZWN0T25GaWx0ZXIoKSl9KSxoZSgpKCl9aWYoMiZjKXtjb25zdCBhPVJlKDIpO2ZlKCkscGkoIm5nTW9kZWwiLGEubWV0'@;
put 'YU9iamVjdFNlYXJjaCl9fWZ1bmN0aW9uIFZUdChjLGwpezEmYyYmR3QoMCwiY2xyLWljb24iLDQzKX1mdW5jdGlvbiBCVHQoYyxsKXsxJmMmJkd0KDAsImNsci1pY29uIiwyNSl9ZnVuY3Rpb24galR0KGMsbCl7aWYoMSZjJiYoZGUoMCwicCIsNTQpLExlKDEpLGhlKCkpLDImYyl7Y29uc3Qg'@;
put 'YT1SZSgpLiRpbXBsaWNpdDtmZSgpLERyKCIgIixhLlVSSSwiICIpfX1mdW5jdGlvbiB6VHQoYyxsKXtpZigxJmMmJihkZSgwLCJjbHItdHJlZS1ub2RlIiw0OSkoMSwiZGl2Iiw1MCkoMiwiZGl2IiksZ3QoMyxWVHQsMSwwLCJjbHItaWNvbiIsNTEpKDQsQlR0LDEsMCwiY2xyLWljb24iLDUy'@;
put 'KSxMZSg1KSxoZSgpLGd0KDYsalR0LDIsMSwicCIsNTMpLGhlKCkoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O01lKCJjbHJFeHBhbmRhYmxlIiwhMCksZmUoKSxUcigib2JqZWN0LWhlYWRlciIsIWEuY291bnQpLGZlKDIpLE1lKCJuZ0lmIiwhYS5jb3VudCksZmUoKSxNZSgibmdJZiIs'@;
put 'YS5jb3VudCksZmUoKSxEcigiICIsYS5kaXNwbGF5LCIgIiksZmUoKSxNZSgibmdJZiIsIWEuY291bnQpfX1mdW5jdGlvbiBVVHQoYyxsKXtpZigxJmMmJihkZSgwLCJjbHItdHJlZSIsNDcpLGd0KDEselR0LDcsNywiY2xyLXRyZWUtbm9kZSIsNDgpLGVsKDIsImFzeW5jIiksaGUoKSksMiZj'@;
put 'KXtjb25zdCBhPVJlKDYpO01lKCJjbHJMYXp5IiwhMCksZmUoKSxNZSgiY2xyUmVjdXJzaXZlRm9yT2YiLERjKDIsMyxhLnJvb3QkKSkoImNsclJlY3Vyc2l2ZUZvckdldENoaWxkcmVuIixhLmdldENoaWxkcmVuKX19ZnVuY3Rpb24gWlR0KGMsbCl7aWYoMSZjJiYoZGUoMCwiY2xyLWFjY29y'@;
put 'ZGlvbi1jb250ZW50IiksZ3QoMSxVVHQsMyw1LCJjbHItdHJlZSIsNDYpLGhlKCkpLDImYyl7Y29uc3QgYT1SZSg1KTtmZSgpLE1lKCJuZ0lmIixhLnNob3dBY2MpfX1mdW5jdGlvbiBXVHQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJjbHItYWNjb3JkaW9uLXBhbmVsIiw0Miks'@;
put 'RnQoImNsckFjY29yZGlvblBhbmVsT3BlbkNoYW5nZSIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1SZSgpLiRpbXBsaWNpdCx2PVJlKDMpO3JldHVybiBDdChoP3YucGFuZWxDaGFuZ2UoaCxmKToiIil9KSxkZSgxLCJjbHItYWNjb3JkaW9uLXRpdGxlIiksR3QoMiwiY2xyLWljb24iLDQz'@;
put 'KSxMZSgzKSxkZSg0LCJwIiw0NCksTGUoNSksaGUoKSgpLGd0KDYsWlR0LDIsMSwiY2xyLWFjY29yZGlvbi1jb250ZW50Iiw0NSksaGUoKX1pZigyJmMpe2NvbnN0IGE9UmUoKS4kaW1wbGljaXQ7ZmUoMyksRHIoIiAiLGEuTkFNRSwiICIpLGZlKDIpLHdyKGEuSUQpfX1mdW5jdGlvbiBZVHQo'@;
put 'YyxsKXtpZigxJmMmJihzaSgwKSxndCgxLFdUdCw3LDIsImNsci1hY2NvcmRpb24tcGFuZWwiLDQxKSxsaSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7ZmUoKSxNZSgibmdJZiIsIWEuaGlkZGVuKX19ZnVuY3Rpb24gR1R0KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2Iiw0MCkoMSwiY2xy'@;
put 'LWFjY29yZGlvbiIpLGd0KDIsWVR0LDIsMSwibmctY29udGFpbmVyIiw3KSxoZSgpKCkpLDImYyl7Y29uc3QgYT1SZSgyKTtmZSgyKSxNZSgibmdGb3JPZiIsYS5tZXRhT2JqZWN0U2hvd0xpc3QpfX1mdW5jdGlvbiAkVHQoYyxsKXsxJmMmJkd0KDAsImNsci1pY29uIiw0Myl9ZnVuY3Rpb24g'@;
put 'S1R0KGMsbCl7MSZjJiZHdCgwLCJjbHItaWNvbiIsMjUpfWZ1bmN0aW9uIHFUdChjLGwpe2lmKDEmYyYmKGRlKDAsInAiLDU0KSxMZSgxKSxoZSgpKSwyJmMpe2NvbnN0IGE9UmUoKS4kaW1wbGljaXQ7ZmUoKSxEcigiICIsYS5VUkksIiAiKX19ZnVuY3Rpb24gWFR0KGMsbCl7aWYoMSZjJiYo'@;
put 'ZGUoMCwiY2xyLXRyZWUtbm9kZSIsNDkpKDEsImRpdiIsNTApKDIsImRpdiIpLGd0KDMsJFR0LDEsMCwiY2xyLWljb24iLDUxKSg0LEtUdCwxLDAsImNsci1pY29uIiw1MiksTGUoNSksaGUoKSxndCg2LHFUdCwyLDEsInAiLDUzKSxoZSgpKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtN'@;
put 'ZSgiY2xyRXhwYW5kYWJsZSIsITApLGZlKCksVHIoIm9iamVjdC1oZWFkZXIiLCFhLmNvdW50KSxmZSgyKSxNZSgibmdJZiIsIWEuY291bnQpLGZlKCksTWUoIm5nSWYiLGEuY291bnQpLGZlKCksRHIoIiAiLGEuZGlzcGxheSwiICIpLGZlKCksTWUoIm5nSWYiLCFhLmNvdW50KX19ZnVuY3Rp'@;
put 'b24gSlR0KGMsbCl7aWYoMSZjJiYoZGUoMCwiY2xyLXRyZWUiLDQ3KSxndCgxLFhUdCw3LDcsImNsci10cmVlLW5vZGUiLDQ4KSxlbCgyLCJhc3luYyIpLGhlKCkpLDImYyl7Y29uc3QgYT1SZSg0KTtNZSgiY2xyTGF6eSIsITApLGZlKCksTWUoImNsclJlY3Vyc2l2ZUZvck9mIixEYygyLDMs'@;
put 'YS5yb290JCkpKCJjbHJSZWN1cnNpdmVGb3JHZXRDaGlsZHJlbiIsYS5nZXRDaGlsZHJlbil9fWZ1bmN0aW9uIFFUdChjLGwpe2lmKDEmYyYmKHNpKDApLGRlKDEsImRpdiIsNTUpLEd0KDIsImNsci1pY29uIiw0MyksZGUoMywiZGl2Iiw1NikoNCwicCIsNTcpLExlKDUpLGhlKCksZGUoNiwi'@;
put 'cCIsNTgpLExlKDcpLGhlKCkoKSgpLGd0KDgsSlR0LDMsNSwiY2xyLXRyZWUiLDQ2KSxsaSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQsZD1SZSgzKTtmZSg1KSxEcigiICIsYS5OQU1FLCIgIiksZmUoMiksRHIoIiAiLGEuSUQsIiAiKSxmZSgpLE1lKCJuZ0lmIixkLnNob3dBY2MpfX1m'@;
put 'dW5jdGlvbiBlQXQoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiLDQwKSxndCgxLFFUdCw5LDMsIm5nLWNvbnRhaW5lciIsNyksaGUoKSksMiZjKXtjb25zdCBhPVJlKDIpO2ZlKCksTWUoIm5nRm9yT2YiLGEubWV0YU9iamVjdFNob3dMaXN0KX19ZnVuY3Rpb24gdEF0KGMsbCl7aWYoMSZjJiYo'@;
put 'ZGUoMCwiY2xyLWRnLXJvdyIpKDEsImNsci1kZy1jZWxsIiksTGUoMiksaGUoKSxkZSgzLCJjbHItZGctY2VsbCIpLExlKDQpLGhlKCksZGUoNSwiY2xyLWRnLWNlbGwiKSxMZSg2KSxoZSgpKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtmZSgyKSx3cihhLlRZUEUpLGZlKDIpLHdyKGEu'@;
put 'TkFNRSksZmUoMiksd3IoYS5WQUxVRSl9fWZ1bmN0aW9uIG5BdChjLGwpe2lmKDEmYyYmKGRlKDAsImNsci1kYXRhZ3JpZCIsNTkpKDEsImNsci1kZy1jb2x1bW4iKSxMZSgyLCIgVFlQRSAiKSxHdCgzLCJjbHItZGctc3RyaW5nLWZpbHRlciIsNjApLGhlKCksZGUoNCwiY2xyLWRnLWNvbHVt'@;
put 'biIpLExlKDUsIiBOQU1FICIpLEd0KDYsImNsci1kZy1zdHJpbmctZmlsdGVyIiw2MCksaGUoKSxkZSg3LCJjbHItZGctY29sdW1uIiksTGUoOCwiIFZBTFVFICIpLEd0KDksImNsci1kZy1zdHJpbmctZmlsdGVyIiw2MCksaGUoKSxndCgxMCx0QXQsNywzLCJjbHItZGctcm93Iiw2MSksZGUo'@;
put 'MTEsImNsci1kZy1mb290ZXIiKSgxMiwiY2xyLWRnLXBhZ2luYXRpb24iLDYyLDIpKDE0LCJjbHItZGctcGFnZS1zaXplIiw2MyksTGUoMTUsIkF0dHJpYnV0ZXMgcGVyIHBhZ2UiKSxoZSgpLExlKDE2KSxoZSgpKCkoKSksMiZjKXtjb25zdCBhPWhhKDEzKSxkPVJlKDIpO2ZlKDMpLE1lKCJj'@;
put 'bHJEZ1N0cmluZ0ZpbHRlciIsZC50eXBlRmlsdGVyKSxmZSgzKSxNZSgiY2xyRGdTdHJpbmdGaWx0ZXIiLGQubmFtZUZpbHRlciksZmUoMyksTWUoImNsckRnU3RyaW5nRmlsdGVyIixkLnZhbHVlRmlsdGVyKSxmZSgpLE1lKCJjbHJEZ0l0ZW1zT2YiLGQubWV0YU9iamVjdEF0dHJpYnV0ZXMp'@;
put 'LGZlKDIpLE1lKCJjbHJEZ1BhZ2VTaXplIiwxMCksZmUoMiksTWUoImNsclBhZ2VTaXplT3B0aW9ucyIsR3MoOSxFVHQpKSxmZSgyKSxWZigiICIsYS5maXJzdEl0ZW0rMSwiIC0gIixhLmxhc3RJdGVtKzEsIiBvZiAiLGEudG90YWxJdGVtcywiIEF0dHJpYnV0ZXMgIil9fWZ1bmN0aW9uIHJB'@;
put 'dChjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIsMzIpKDEsImRpdiIsMzMpLGd0KDIsTlR0LDMsMSwiZGl2IiwzNCksR3QoMywiYnIiKSxndCg0LEdUdCwzLDEsImRpdiIsMzUpKDUsZUF0LDIsMSwiZGl2IiwzNSksaGUoKSxkZSg2LCJkaXYiLDM2KSg3LCJoMyIpLExlKDgpLGhlKCksZ3QoOSxu'@;
put 'QXQsMTcsMTAsImNsci1kYXRhZ3JpZCIsMzcpLGhlKCkoKSksMiZjKXtjb25zdCBhPVJlKCk7ZmUoMiksTWUoIm5nSWYiLGEubWV0YU9iamVjdExpc3QmJiFhLm9iamVjdFJvdXRlKSxmZSgyKSxNZSgibmdJZiIsIWEub2JqZWN0VmlldyksZmUoKSxNZSgibmdJZiIsYS5vYmplY3RWaWV3KSxm'@;
put 'ZSgzKSx3cihhLmFzc29PYmplY3RTZWxlY3RlZCksZmUoKSxNZSgibmdJZiIsYS5zaG93VGFibGUpfX1sZXQgWnRlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZix2LE0pe3RoaXMuZXZlbnRTZXJ2aWNlPWEsdGhpcy5zYXNTZXJ2aWNlPWQsdGhpcy5oZWxwZXJTZXJ2aWNlPWgs'@;
put 'dGhpcy5sb2NhdGlvbj1mLHRoaXMucm91dGVyPXYsdGhpcy5yb3V0ZT1NLHRoaXMubWV0YURhdGFTZWFyY2g9IiIsdGhpcy5tZXRhT2JqZWN0U2VhcmNoPSIiLHRoaXMubWV0YU9iamVjdEFzc29jaWF0aW9ucz1bXSx0aGlzLm1ldGFPYmplY3RBdHRyaWJ1dGVzPVtdLHRoaXMuc2hvd1RhYmxl'@;
put 'PSExLHRoaXMuc2hvd0FjYz0hMSx0aGlzLm1ldGFEYXRhSWQ9IiIsdGhpcy5sb2FkaW5nPSEwLHRoaXMubWV0YXR5cGVzTG9hZGluZz0hMCx0aGlzLm1ldGFPYmplY3RTaXplPTIwMCx0aGlzLmFzc29UeXBlU2VsZWN0ZWQ9IiIsdGhpcy5hc3NvT2JqZWN0U2VsZWN0ZWQ9IiIsdGhpcy5yZXBv'@;
put 'c2l0b3J5PSIiLHRoaXMub2JqZWN0Um91dGU9ITEsdGhpcy5zaG93RGF0YT0hMSx0aGlzLm9iamVjdFZpZXc9ITEsdGhpcy5nZXRDaGlsZHJlbj1EPT5ELmNvdW50P2ZvKEQuZGV0YWlscyk6dGhpcy5zYXNTZXJ2aWNlLnJlcXVlc3QoIm1ldGFuYXYvbWV0YWRldGFpbHMiLHtTQVNDb250cm9s'@;
put 'VGFibGU6W3tvYmplY3R1cmk6RC5BU1NPQ1VSSX1dfSkudGhlbihyZT0+e3RoaXMuc2hvd1RhYmxlPSEwLHRoaXMubWV0YU9iamVjdEF0dHJpYnV0ZXM9cmUuYWRhcHRlclJlc3BvbnNlLmF0dHJpYnV0ZXMsdGhpcy5hc3NvT2JqZWN0U2VsZWN0ZWQ9RC5OQU1FO2xldCBjZT10aGlzLnJvdXRl'@;
put 'ci51cmw7cmV0dXJuIHRoaXMubG9jYXRpb24ucmVwbGFjZVN0YXRlKHRoaXMub2JqZWN0Um91dGU/Y2Uuc2xpY2UoMCxjZS5sYXN0SW5kZXhPZigib2JqZWN0IikpKyJvYmplY3QvIitELkFTU09DVVJJLnNsaWNlKDErRC5BU1NPQ1VSSS5pbmRleE9mKCJcXCIpKTpjZSsiL29iamVjdC8iK0Qu'@;
put 'QVNTT0NVUkkuc2xpY2UoMStELkFTU09DVVJJLmluZGV4T2YoIlxcIikpKSx0aGlzLmdldEFzc29zaWF0aW9uc0NvdW50KHJlLmFkYXB0ZXJSZXNwb25zZS5hc3NvY2lhdGlvbnMpfSksdGhpcy5kZWJvdW5jZT0hMX1uZ09uSW5pdCgpe0tuLnZpZXdlci5jdXJyZW50U2VsZWN0aW9uPSJ2aWV3'@;
put 'L21ldGFkYXRhIix0aGlzLnJvdXRlci51cmwuaW5jbHVkZXMoIi92aWV3L21ldGFkYXRhL29iamVjdC8iKSYmKHRoaXMub2JqZWN0Um91dGU9ITAsdGhpcy5vYmplY3RWaWV3PSEwKSx0aGlzLnBhZ2VTaXplPTUsS24ubWV0YWRhdGEubWV0YURhdGFMaXN0JiZLbi5tZXRhZGF0YS5tZXRhUmVw'@;
put 'b3NpdG9yaWVzJiYhdGhpcy5vYmplY3RSb3V0ZT8odGhpcy5tZXRhRGF0YUxpc3Q9S24ubWV0YWRhdGEubWV0YURhdGFMaXN0LHRoaXMucmVwb3NpdG9yaWVzPUtuLm1ldGFkYXRhLm1ldGFSZXBvc2l0b3JpZXMsdGhpcy5yZXBvc2l0b3J5PUtuLm1ldGFkYXRhLnNlbGVjdGVkUmVwb3NpdG9y'@;
put 'eSx0aGlzLmxvYWRpbmc9ITEsdGhpcy5tZXRhdHlwZXNMb2FkaW5nPSExLHRoaXMubWV0YURhdGFTZWFyY2g9S24ubWV0YWRhdGEubWV0YURhdGFTZWFyY2gpOih0aGlzLnNhc1NlcnZpY2UucmVxdWVzdCgibWV0YW5hdi9tZXRhdHlwZXMiLG51bGwpLnRoZW4oYT0+e3RoaXMubWV0YURhdGFM'@;
put 'aXN0PWEuYWRhcHRlclJlc3BvbnNlLnR5cGVzLEtuLm1ldGFkYXRhLm1ldGFEYXRhTGlzdD10aGlzLm1ldGFEYXRhTGlzdCx0aGlzLmxvYWRpbmc9ITEsdGhpcy5tZXRhdHlwZXNMb2FkaW5nPSExfSksdGhpcy5zYXNTZXJ2aWNlLnJlcXVlc3QoIm1ldGFuYXYvbWV0YXJlcG9zIixudWxsKS50'@;
put 'aGVuKGE9PntsZXQgZD0hMTt0aGlzLnJlcG9zaXRvcmllcz1bXTtmb3IobGV0IGg9MDtoPGEuYWRhcHRlclJlc3BvbnNlLm91dHJlcG9zLmxlbmd0aDtoKyspdGhpcy5yZXBvc2l0b3JpZXMucHVzaChhLmFkYXB0ZXJSZXNwb25zZS5vdXRyZXBvc1toXS5OQU1FKSwiRm91bmRhdGlvbiI9PT1h'@;
put 'LmFkYXB0ZXJSZXNwb25zZS5vdXRyZXBvc1toXS5OQU1FJiYoZD0hMCk7aWYodGhpcy5yZXBvc2l0b3J5PWQ/IkZvdW5kYXRpb24iOmEuYWRhcHRlclJlc3BvbnNlLm91dHJlcG9zWzBdLk5BTUUsS24ubWV0YWRhdGEubWV0YVJlcG9zaXRvcmllcz10aGlzLnJlcG9zaXRvcmllcyxLbi5tZXRh'@;
put 'ZGF0YS5zZWxlY3RlZFJlcG9zaXRvcnk9dGhpcy5yZXBvc2l0b3J5LHRoaXMub2JqZWN0Um91dGUpe3RoaXMuZXZlbnRTZXJ2aWNlLmNsb3NlU2lkZWJhcigpLHRoaXMuc2hvd0RhdGE9ITA7bGV0IGg9IiIsZj10aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtcy5vYmplY3RJRDt0aGlzLm1ldGFP'@;
put 'YmplY3RMaXN0PVtdLHRoaXMubWV0YU9iamVjdExpc3QucHVzaCh7SUQ6ZixOQU1FOmh9KSx0aGlzLm1ldGFPYmplY3RTaG93TGlzdD10aGlzLm1ldGFPYmplY3RMaXN0LHRoaXMubWV0YU9iamVjdE9uQ2xpY2sodGhpcy5tZXRhT2JqZWN0U2hvd0xpc3RbMF0uSUQsdGhpcy5tZXRhT2JqZWN0'@;
put 'U2hvd0xpc3RbMF0pfX0pKX10cmVlTm9kZUNsaWNrZWQoYSxkLGgpeyJDb2xsYXBzZSI9PT1hLnRhcmdldC50aXRsZSYmdGhpcy5jb2xsYXBzZVRyZWVJdGVtcyhoLGQpfWNvbGxhcHNlVHJlZUl0ZW1zKGEsZCl7YS5mb3JFYWNoKGg9PntKU09OLnN0cmluZ2lmeShoKSE9PUpTT04uc3RyaW5n'@;
put 'aWZ5KGQpJiYoaC5leHBhbmRlZD0hMSl9KX1tZXRhRGF0YU9uQ2xpY2soYSxkKXt0aGlzLm9iamVjdFZpZXc9ITEsdGhpcy5sb2NhdGlvbi5yZXBsYWNlU3RhdGUoIi92aWV3L21ldGFkYXRhIiksdGhpcy5zaG93RGF0YT0hMSx0aGlzLmxvYWRpbmc9ITAsdGhpcy5zZWxlY3RtZXRhRGF0YShh'@;
put 'LGQpfW1ldGFPYmplY3RPbkNsaWNrKGEsZCl7dGhpcy5hc3NvT2JqZWN0U2VsZWN0ZWQ9IiAuICIsdGhpcy5zaG93QWNjPSExLHRoaXMubWV0YU9iamVjdEF0dHJpYnV0ZXM9W10sdGhpcy5zZWxlY3RtZXRhT2JqZWN0KGEsZCl9c2VsZWN0bWV0YURhdGEoYSxkKXt2YXIgaD10aGlzO3JldHVy'@;
put 'biBlZShmdW5jdGlvbiooKXtoLnNhc1NlcnZpY2UucmVxdWVzdCgibWV0YW5hdi9tZXRhb2JqZWN0cyIse1NBU0NvbnRyb2xUYWJsZTpbe21ldGF0eXBlOmEscmVwbzpoLnJlcG9zaXRvcnl9XX0pLnRoZW4odj0+e2gubWV0YU9iamVjdExpc3Q9di5hZGFwdGVyUmVzcG9uc2Uub2JqZWN0cyxo'@;
put 'LmdldE1ldGFPYmplY3RBdHRyaWJ1dGVzKGgubWV0YU9iamVjdFNpemUpLGgubG9hZGluZz0hMSxoLmFzc29UeXBlU2VsZWN0ZWQ9YSxoLmV2ZW50U2VydmljZS5jbG9zZVNpZGViYXIoKSxoLnNob3dEYXRhPSEwfSl9KSgpfXNlbGVjdG1ldGFPYmplY3QoYSxkKXt2YXIgaD10aGlzO3JldHVy'@;
put 'biBlZShmdW5jdGlvbiooKXtoLnNhc1NlcnZpY2UucmVxdWVzdCgibWV0YW5hdi9tZXRhZGV0YWlscyIse1NBU0NvbnRyb2xUYWJsZTpbe29iamVjdHVyaTphfV19KS50aGVuKHY9PntoLm1ldGFPYmplY3RBc3NvY2lhdGlvbnM9di5hZGFwdGVyUmVzcG9uc2UuYXNzb2NpYXRpb25zLGgucm9v'@;
put 'dCQ9Zm8oaC5nZXRBc3Nvc2lhdGlvbnNDb3VudCh2LmFkYXB0ZXJSZXNwb25zZS5hc3NvY2lhdGlvbnMpKSxoLnNob3dBY2M9ITAsaC5zaG93VGFibGU9ITA7bGV0IE09di5hZGFwdGVyUmVzcG9uc2UuYXR0cmlidXRlcy5maW5kKFo9PiJOYW1lIj09PVouTkFNRSkuVkFMVUU7aC5hc3NvT2Jq'@;
put 'ZWN0U2VsZWN0ZWQ9TSxkLk5BTUU9TTtsZXQgRD1oLnJvdXRlci51cmw7aC5sb2NhdGlvbi5yZXBsYWNlU3RhdGUoaC5vYmplY3RSb3V0ZT9ELnNsaWNlKDAsRC5sYXN0SW5kZXhPZigib2JqZWN0IikpKyJvYmplY3QvIithLnNsaWNlKDErYS5pbmRleE9mKCJcXCIpKTpEKyIvb2JqZWN0LyIr'@;
put 'YS5zbGljZSgxK2EuaW5kZXhPZigiXFwiKSkpLGgubWV0YU9iamVjdEF0dHJpYnV0ZXM9di5hZGFwdGVyUmVzcG9uc2UuYXR0cmlidXRlc30pfSkoKX1zZWxlY3RBc3Nvc2lhdGlvbnNEZXRhaWxzKGEsZCl7dmFyIGg9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7aC5zYXNTZXJ2aWNlLnJl'@;
put 'cXVlc3QoIm1ldGFuYXYvbWV0YWRldGFpbHMiLHtTQVNDb250cm9sVGFibGU6W3tvYmplY3R1cmk6YX1dfSkudGhlbih2PT57aC5tZXRhT2JqZWN0QXR0cmlidXRlcz12LmFkYXB0ZXJSZXNwb25zZS5hdHRyaWJ1dGVzLGguc2hvd1RhYmxlPSEwfSl9KSgpfWdldEFzc29zaWF0aW9uc0NvdW50'@;
put 'KGEpe2xldCBkPW5ldyBNYXA7Zm9yKGxldCBmIG9mIGEpe2QuaGFzKGYuQVNTT0MpfHxkLnNldChmLkFTU09DLHtjb3VudDowLGRldGFpbHM6W119KTtsZXQgdj1kLmdldChmLkFTU09DKTt2LmNvdW50Kyssdi5kZXRhaWxzLnB1c2goe0FTU09DVVJJOmYuQVNTT0NVUkksTkFNRTpmLk5BTUUs'@;
put 'ZGlzcGxheTpmLk5BTUUsVVJJOmYuQVNTT0NVUkkuc2xpY2UoZi5BU1NPQ1VSSS5pbmRleE9mKCI6IikrMSl9KX1sZXQgaD1bXTtyZXR1cm4gZC5mb3JFYWNoKGZ1bmN0aW9uKGYsdil7aC5wdXNoKHtBU1NPQzp2LGNvdW50OmYuY291bnQsZGV0YWlsczpmLmRldGFpbHMsZGlzcGxheTp2KyIg'@;
put 'KCAiK2YuY291bnQrIiApIn0pfSksaH1zZXRUeXBlQXNzb3NpYXRpb25zKGEpe2xldCBkPVtdO2ZvcihsZXQgaCBvZiB0aGlzLm1ldGFPYmplY3RBc3NvY2lhdGlvbnMpaC5BU1NPQz09PWEmJmQucHVzaChoKTtyZXR1cm4gdGhpcy5hc3Nvc2lhdGlvbk5hbWVzPWQsZH1hc3Nvc2lhdGlvbk5h'@;
put 'bWVPbkNsaWNrKGEpe3RoaXMuYXNzb09iamVjdFNlbGVjdGVkPSIgLiAiLHRoaXMubWV0YU9iamVjdEF0dHJpYnV0ZXM9W10sdGhpcy5zaG93VGFibGU9ITEsdGhpcy5zZWxlY3RBc3Nvc2lhdGlvbnNEZXRhaWxzKGEpfW1ldGFMaXN0T25GaWx0ZXIoKXt0aGlzLmhlbHBlclNlcnZpY2UubGli'@;
put 'cmFyeU9uRmlsdGVyKHRoaXMubWV0YURhdGFMaXN0LHRoaXMubWV0YURhdGFTZWFyY2gsIklEIiksS24ubWV0YWRhdGEubWV0YURhdGFTZWFyY2g9dGhpcy5tZXRhRGF0YVNlYXJjaH1tZXRhT2JqZWN0T25GaWx0ZXIoKXt0aGlzLm1ldGFPYmplY3RBdHRyaWJ1dGVzPVtdLHRoaXMuaGVscGVy'@;
put 'U2VydmljZS5tZXRhT2JqZWN0T25GaWx0ZXIodGhpcy5tZXRhT2JqZWN0TGlzdCx0aGlzLm1ldGFPYmplY3RTZWFyY2gsIk5BTUUiKSx0aGlzLmdldE1ldGFPYmplY3RBdHRyaWJ1dGVzKHRoaXMubWV0YU9iamVjdFNpemUpLEtuLm1ldGFkYXRhLm1ldGFPYmplY3RTZWFyY2g9dGhpcy5tZXRh'@;
put 'T2JqZWN0U2VhcmNofWdldE1ldGFPYmplY3RBdHRyaWJ1dGVzKGEpe2lmKHZvaWQgMCE9PXRoaXMubWV0YU9iamVjdExpc3QmJnRoaXMubWV0YU9iamVjdExpc3QubGVuZ3RoPmEpe2xldCBkPTAsaD0tMTtmb3IobGV0IGY9MDtmPHRoaXMubWV0YU9iamVjdExpc3QubGVuZ3RoO2YrKylpZigo'@;
put 'dm9pZCAwPT09dGhpcy5tZXRhT2JqZWN0TGlzdFtmXS5oaWRkZW58fCExPT09dGhpcy5tZXRhT2JqZWN0TGlzdFtmXS5oaWRkZW4pJiZkKyssZD09PWEpe2g9ZjticmVha310aGlzLm1ldGFPYmplY3RTaG93TGlzdD0tMSE9PWg/dGhpcy5tZXRhT2JqZWN0TGlzdC5zbGljZSgwLGgpOnRoaXMu'@;
put 'bWV0YU9iamVjdExpc3R9ZWxzZSB0aGlzLm1ldGFPYmplY3RTaG93TGlzdD10aGlzLm1ldGFPYmplY3RMaXN0fXBhbmVsQ2hhbmdlKGEsZCl7dGhpcy5kZWJvdW5jZXx8KHRoaXMubWV0YU9iamVjdE9uQ2xpY2soZC5JRCxkKSx0aGlzLmRlYm91bmNlPSEwLHNldFRpbWVvdXQoKCk9Pnt0aGlz'@;
put 'LmRlYm91bmNlPSExfSw2MDApKX11cGRhdGVTZWxlY3RlZFJlcG9zaXRvcnkoKXtLbi5tZXRhZGF0YS5zZWxlY3RlZFJlcG9zaXRvcnk9dGhpcy5yZXBvc2l0b3J5fXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKEdlKHZjKSxHZShCcyksR2UoU3Up'@;
put 'LEdlKGZoKSxHZShMcyksR2UoQ3UpKX19c3RhdGlje3RoaXMuXHUwMjc1Y21wPVZyKHt0eXBlOmMsc2VsZWN0b3JzOltbImFwcC1tZXRhZGF0YSJdXSxob3N0QXR0cnM6WzEsImNvbnRlbnQtY29udGFpbmVyIl0sZGVjbHM6MTcsdmFyczo4LGNvbnN0czpbWyJzZWFyY2hMaWJUcmVlSW5wdXQi'@;
put 'LCIiXSxbInNlYXJjaE9ialRyZWVJbnB1dCIsIiJdLFsicGFnaW5hdGlvbiIsIiJdLFsxLCJyZXBvLWRyb3Bkb3duIl0sWyJjbHJTZWxlY3QiLCIiLCJpZCIsInJlcG9zaXRvcnkiLDMsIm5nTW9kZWxDaGFuZ2UiLCJjaGFuZ2UiLCJuZ01vZGVsIl0sWzMsInZhbHVlIiw0LCJuZ0ZvciIsIm5n'@;
put 'Rm9yT2YiXSxbImNsYXNzIiwic2VhcmNoLW5vZGUiLDQsIm5nSWYiXSxbNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzEsImNvbnRlbnQtYXJlYSJdLFsxLCJjYXJkIiwiYmFja2dyb3VuZC10cmFuc3BhcmVudC1pIl0sWzEsImNvbG9yLWdyYXkiXSxbImNsYXNzIiwibm8tdGFibGUtc2VsZWN0ZWQi'@;
put 'LDQsIm5nSWYiXSxbImNsYXNzIiwibG9hZGluZ1NwaW5uZXIiLDQsIm5nSWYiXSxbImNsYXNzIiwiY2xyLXJvdyBjbHItZmxleC1ncm93LTEiLDQsIm5nSWYiXSxbMywidmFsdWUiXSxbMSwic2VhcmNoLW5vZGUiXSxbMSwidHJlZS1zZWFyY2gtd3JhcHBlciJdLFsiYXBwU3RlYWxGb2N1cyIs'@;
put 'IiIsImNscklucHV0IiwiIiwicGxhY2Vob2xkZXIiLCJzZWFyY2ggU0FTIFR5cGVzIiwibmFtZSIsImlucHV0IiwiYXV0b2NvbXBsZXRlIiwib2ZmIiwzLCJuZ01vZGVsQ2hhbmdlIiwia2V5dXAiLCJuZ01vZGVsIl0sWyJzaGFwZSIsInNlYXJjaCIsNCwibmdJZiJdLFsic2hhcGUiLCJ0aW1l'@;
put 'cyIsMywiY2xpY2siLDQsIm5nSWYiXSxbInNoYXBlIiwic2VhcmNoIl0sWyJzaGFwZSIsInRpbWVzIiwzLCJjbGljayJdLFszLCJjbHJFeHBhbmRlZCIsImNsckxvYWRpbmciLCJjbGljayIsImNsckV4cGFuZGVkQ2hhbmdlIiw0LCJuZ0lmIl0sWzMsImNsaWNrIiwiY2xyRXhwYW5kZWRDaGFu'@;
put 'Z2UiLCJjbHJFeHBhbmRlZCIsImNsckxvYWRpbmciXSxbMSwibS0wIiwiY3Vyc29yLXBvaW50ZXIiLDMsImNsaWNrIl0sWyJzaGFwZSIsImJsb2NrIl0sWzEsIm5vLXRhYmxlLXNlbGVjdGVkIl0sWyJzaGFwZSIsIndhcm5pbmctc3RhbmRhcmQiLCJzaXplIiwiNjAiLDEsImlzLWluZm8iLCJp'@;
put 'Y29uLWRjLWZpbGwiXSxbImNkcy10ZXh0Iiwic2VjdGlvbiIsMSwidGV4dC1jZW50ZXIiLCJjb2xvci1ncmF5IiwibXQtMTAiXSxbMSwibG9hZGluZ1NwaW5uZXIiXSxbMSwic3Bpbm5lciJdLFs0LCJuZ0lmIl0sWzEsImNsci1yb3ciLCJjbHItZmxleC1ncm93LTEiXSxbMSwiY2xyLWNvbC02'@;
put 'Il0sWyJjbGFzcyIsInNlYXJjaC1pbnB1dCIsNCwibmdJZiJdLFsiY2xhc3MiLCJvYmplY3RzLWNvbCIsNCwibmdJZiJdLFsxLCJjbHItY29sLTYiLCJ0ZXh0LWNlbnRlciJdLFsiY2xhc3MiLCJkYXRhZ3JpZC1jdXN0b20tZm9vdGVyIiw0LCJuZ0lmIl0sWzEsInNlYXJjaC1pbnB1dCJdLFsi'@;
put 'Y2xySW5wdXQiLCIiLCJwbGFjZWhvbGRlciIsInNlYXJjaCIsIm5hbWUiLCJpbnB1dCIsImF1dG9jb21wbGV0ZSIsIm9mZiIsMywibmdNb2RlbENoYW5nZSIsImtleXVwIiwibmdNb2RlbCJdLFsxLCJvYmplY3RzLWNvbCJdLFszLCJjbHJBY2NvcmRpb25QYW5lbE9wZW5DaGFuZ2UiLDQsIm5n'@;
put 'SWYiXSxbMywiY2xyQWNjb3JkaW9uUGFuZWxPcGVuQ2hhbmdlIl0sWyJzaGFwZSIsInJhY2stc2VydmVyIl0sWzEsImZsb2F0LXJpZ2h0Il0sWzQsImNscklmRXhwYW5kZWQiXSxbMywiY2xyTGF6eSIsNCwibmdJZiJdLFszLCJjbHJMYXp5Il0sWzMsImNsckV4cGFuZGFibGUiLDQsImNsclJl'@;
put 'Y3Vyc2l2ZUZvciIsImNsclJlY3Vyc2l2ZUZvck9mIiwiY2xyUmVjdXJzaXZlRm9yR2V0Q2hpbGRyZW4iXSxbMywiY2xyRXhwYW5kYWJsZSJdLFsxLCJmdWxsLXdpZHRoIl0sWyJzaGFwZSIsInJhY2stc2VydmVyIiw0LCJuZ0lmIl0sWyJzaGFwZSIsImJsb2NrIiw0LCJuZ0lmIl0sWyJjbGFz'@;
put 'cyIsImZsb2F0LXJpZ2h0IG9iamVjdC11cmkiLDQsIm5nSWYiXSxbMSwiZmxvYXQtcmlnaHQiLCJvYmplY3QtdXJpIl0sWzEsImNvbHMtaGVhZCJdLFsxLCJvYmplY3QtdGV4dCJdLFsxLCJtLTAiLCJ3b3JkLWJyZWFrIiwibXItMjAiXSxbMSwiZmxvYXQtcmlnaHQiLCJtbC0zIl0sWzEsImRh'@;
put 'dGFncmlkLWN1c3RvbS1mb290ZXIiXSxbMywiY2xyRGdTdHJpbmdGaWx0ZXIiXSxbNCwiY2xyRGdJdGVtcyIsImNsckRnSXRlbXNPZiJdLFszLCJjbHJEZ1BhZ2VTaXplIl0sWzMsImNsclBhZ2VTaXplT3B0aW9ucyJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihkLGgpezEmZCYmKGRlKDAsImFwcC1z'@;
put 'aWRlYmFyIikoMSwiZGl2IiwzKSgyLCJjbHItc2VsZWN0LWNvbnRhaW5lciIpKDMsImxhYmVsIiksTGUoNCwiTWV0YWRhdGEgUmVwb3NpdG9yeSIpLGhlKCksZGUoNSwic2VsZWN0Iiw0KSxnaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24odil7cmV0dXJuIG1pKGgucmVwb3NpdG9yeSx2KXx8'@;
put 'KGgucmVwb3NpdG9yeT12KSx2fSksRnQoImNoYW5nZSIsZnVuY3Rpb24oKXtyZXR1cm4gaC51cGRhdGVTZWxlY3RlZFJlcG9zaXRvcnkoKX0pLGd0KDYsVFR0LDIsMiwib3B0aW9uIiw1KSxoZSgpKCkoKSxkZSg3LCJjbHItdHJlZSIpLGd0KDgsRFR0LDYsMywiY2xyLXRyZWUtbm9kZSIsNiko'@;
put 'OSxSVHQsMiwxLCJuZy1jb250YWluZXIiLDcpLGhlKCkoKSxkZSgxMCwiZGl2Iiw4KSgxMSwiZGl2Iiw5KSgxMiwiaDMiLDEwKSxMZSgxMyksaGUoKSxndCgxNCxMVHQsNCwwLCJkaXYiLDExKSgxNSxIVHQsNCwxLCJkaXYiLDEyKSgxNixyQXQsMTAsNSwiZGl2IiwxMyksaGUoKSgpKSwyJmQm'@;
put 'JihmZSg1KSxwaSgibmdNb2RlbCIsaC5yZXBvc2l0b3J5KSxmZSgpLE1lKCJuZ0Zvck9mIixoLnJlcG9zaXRvcmllcyksZmUoMiksTWUoIm5nSWYiLGgubWV0YURhdGFMaXN0KSxmZSgpLE1lKCJuZ0Zvck9mIixoLm1ldGFEYXRhTGlzdCksZmUoNCksd3IoaC5hc3NvVHlwZVNlbGVjdGVkKSxm'@;
put 'ZSgpLE1lKCJuZ0lmIiwhaC5sb2FkaW5nJiYhaC5tZXRhT2JqZWN0TGlzdCksZmUoKSxNZSgibmdJZiIsaC5sb2FkaW5nKSxmZSgpLE1lKCJuZ0lmIixoLnNob3dEYXRhKSl9LGRlcGVuZGVuY2llczpbbnMsYmEsQTIsazIscWwsVDIsbmwsJHMsQW0sUWYsUjcsY08sSnksWHgsdU8sRW0sSGRl'@;
put 'LFNwLEw3LHRfLFRtLGs3LHhtLEQ3LGRHLEVoLFBkLFpkZSxIbCxqMCxCMWUsZHMsWjEsRTcsJHksRTFlLEZMLEExZSxUMWUsazFlLERZLGk0LHI0LEVNXSxlbmNhcHN1bGF0aW9uOjJ9KX1zdGF0aWN7dGhpcy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWMscHJv'@;
put 'dmlkZWRJbjoicm9vdCJ9KX19cmV0dXJuIGN9KSgpO2Z1bmN0aW9uIGlBdChjLGwpezEmYyYmR3QoMCwiY2xyLWljb24iLDEyKX1mdW5jdGlvbiBhQXQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJjbHItaWNvbiIsMTMpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25z'@;
put 'dCBoPVJlKDIpO3JldHVybiBoLnJvbGVTZWFyY2g9IiIsQ3QoaC5yb2xlTGlzdE9uRmlsdGVyKCkpfSksaGUoKX19ZnVuY3Rpb24gb0F0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiY2xyLXRyZWUtbm9kZSIsNykoMSwiZGl2Iiw4KSgyLCJpbnB1dCIsOSwwKSxnaSgibmdNb2Rl'@;
put 'bENoYW5nZSIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1SZSgpO3JldHVybiBtaShmLnJvbGVTZWFyY2gsaCl8fChmLnJvbGVTZWFyY2g9aCksQ3QoaCl9KSxGdCgia2V5dXAiLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KFJlKCkucm9sZUxpc3RPbkZpbHRlcigpKX0pLGhlKCksZ3Qo'@;
put 'NCxpQXQsMSwwLCJjbHItaWNvbiIsMTApKDUsYUF0LDEsMCwiY2xyLWljb24iLDExKSxoZSgpKCl9aWYoMiZjKXtjb25zdCBhPWhhKDMpLGQ9UmUoKTtmZSgyKSxwaSgibmdNb2RlbCIsZC5yb2xlU2VhcmNoKSxmZSgyKSxNZSgibmdJZiIsYS52YWx1ZS5sZW5ndGg8MSksZmUoKSxNZSgibmdJ'@;
put 'ZiIsYS52YWx1ZS5sZW5ndGg+MCl9fWZ1bmN0aW9uIHNBdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImNsci10cmVlLW5vZGUiLDE1KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1SZSgpLiRpbXBsaWNpdDtyZXR1cm4gQ3QoUmUoKS5yb2xlT25DbGljayho'@;
put 'KSl9KSxkZSgxLCJwIiwxNiksR3QoMiwiY2xyLWljb24iLDE3KSxMZSgzKSxoZSgpKCl9aWYoMiZjKXtjb25zdCBhPVJlKCkuJGltcGxpY2l0LGQ9UmUoKTtUcigiYWN0aXZlIixhLlJPTEVVUkk9PT1kLnJvbGVVcmkpLGZlKDMpLERyKCIgIixhLlJPTEVOQU1FLCIgIil9fWZ1bmN0aW9uIGxB'@;
put 'dChjLGwpe2lmKDEmYyYmKHNpKDApLGd0KDEsc0F0LDQsMywiY2xyLXRyZWUtbm9kZSIsMTQpLGxpKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtmZSgpLE1lKCJuZ0lmIiwhYS5oaWRkZW4pfX1mdW5jdGlvbiBjQXQoYyxsKXsxJmMmJihkZSgwLCJkaXYiLDE4KSgxLCJzcGFuIiwxOSks'@;
put 'TGUoMiwiIExvYWRpbmcuLi4gIiksaGUoKSgpKX1mdW5jdGlvbiB1QXQoYyxsKXsxJmMmJihkZSgwLCJoNSIpLExlKDEsIk5vIE1lbWJlcnMgUHJlc2VudCIpLGhlKCkpfWZ1bmN0aW9uIGRBdChjLGwpe2lmKDEmYyYmKGRlKDAsInRyIiwzMikoMSwidGQiLDMwKSxMZSgyKSxoZSgpLGRlKDMs'@;
put 'InRkIiwzMCksTGUoNCksaGUoKSxkZSg1LCJ0ZCIsMzApLExlKDYpLGhlKCksZGUoNywidGQiLDMwKSxMZSg4KSxoZSgpKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtNZSgicm91dGVyTGluayIsIi92aWV3L3VzZXJuYXYvdXNlcnMvIithLlVSSU1FTSksZmUoMiksd3IoYS5NRU1CRVJO'@;
put 'QU1FKSxmZSgyKSx3cihhLkVNQUlMKSxmZSgyKSx3cihhLk1FTUJFUkNSRUFURUQpLGZlKDIpLHdyKGEuTUVNQkVSVVBEQVRFRCl9fWZ1bmN0aW9uIGhBdChjLGwpe2lmKDEmYyYmKGRlKDAsInRhYmxlIiwyOCkoMSwidGhlYWQiKSgyLCJ0ciIpKDMsInRkIiwyOSkoNCwiYiIpLExlKDUsIk5B'@;
put 'TUUiKSxoZSgpKCksZGUoNiwidGQiLDI5KSg3LCJiIiksTGUoOCwiRU1BSUwiKSxoZSgpKCksZGUoOSwidGQiLDI5KSgxMCwiYiIpLExlKDExLCJDUkVBVEVEIiksaGUoKSgpLGRlKDEyLCJ0ZCIsMzApKDEzLCJiIiksTGUoMTQsIlVQREFURUQiKSxoZSgpKCkoKSgpLGRlKDE1LCJ0Ym9keSIp'@;
put 'LGd0KDE2LGRBdCw5LDUsInRyIiwzMSksaGUoKSgpKSwyJmMpe2NvbnN0IGE9UmUoMik7ZmUoMTYpLE1lKCJuZ0Zvck9mIixhLnJvbGVNZW1iZXJzKX19ZnVuY3Rpb24gZkF0KGMsbCl7MSZjJiYoZGUoMCwiaDUiKSxMZSgxLCJObyBHcm91cHMgUHJlc2VudCAhIiksaGUoKSl9ZnVuY3Rpb24g'@;
put 'cEF0KGMsbCl7aWYoMSZjJiYoZGUoMCwidHIiLDMyKSgxLCJ0ZCIsMzApLExlKDIpLGhlKCksZGUoMywidGQiLDMwKSxMZSg0KSxoZSgpLGRlKDUsInRkIiwzMCksTGUoNiksaGUoKSxkZSg3LCJ0ZCIsMzApLExlKDgpLGhlKCkoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O01lKCJyb3V0'@;
put 'ZXJMaW5rIiwiL3ZpZXcvdXNlcm5hdi9ncm91cHMvIithLlVSSU1FTSksZmUoMiksd3IoYS5NRU1CRVJOQU1FKSxmZSgyKSx3cihhLkVNQUlMKSxmZSgyKSx3cihhLk1FTUJFUkNSRUFURUQpLGZlKDIpLHdyKGEuTUVNQkVSVVBEQVRFRCl9fWZ1bmN0aW9uIGdBdChjLGwpe2lmKDEmYyYmKGRl'@;
put 'KDAsInRhYmxlIiwyOCkoMSwidGhlYWQiKSgyLCJ0ciIpKDMsInRkIiwyOSkoNCwiYiIpLExlKDUsIk5BTUUiKSxoZSgpKCksZGUoNiwidGQiLDI5KSg3LCJiIiksTGUoOCwiRU1BSUwiKSxoZSgpKCksZGUoOSwidGQiLDI5KSgxMCwiYiIpLExlKDExLCJDUkVBVEVEIiksaGUoKSgpLGRlKDEy'@;
put 'LCJ0ZCIsMzApKDEzLCJiIiksTGUoMTQsIlVQREFURUQiKSxoZSgpKCkoKSgpLGRlKDE1LCJ0Ym9keSIpLGd0KDE2LHBBdCw5LDUsInRyIiwzMSksaGUoKSgpKSwyJmMpe2NvbnN0IGE9UmUoMik7ZmUoMTYpLE1lKCJuZ0Zvck9mIixhLnJvbGVHcm91cHMpfX1mdW5jdGlvbiBtQXQoYyxsKXtp'@;
put 'ZigxJmMmJihkZSgwLCJkaXYiKSgxLCJkaXYiLDIwKSgyLCJkaXYiLDIxKSgzLCJ0YWJsZSIsMjIpKDQsInRib2R5IikoNSwidHIiKSg2LCJ0ZCIsMjMpKDcsInAiLDI0KSg4LCJiIiksTGUoOSksaGUoKSgpKCkoKSxkZSgxMCwidHIiKSgxMSwidGQiLDIzKSgxMiwiaSIpLExlKDEzKSxoZSgp'@;
put 'KCkoKSgpKCkoKSgpLGRlKDE0LCJkaXYiLDIwKSgxNSwiZGl2IiwyMSkoMTYsImRpdiIsMjUpKDE3LCJkaXYiKSgxOCwiaDMiKSxMZSgxOSksaGUoKSxndCgyMCx1QXQsMiwwLCJoNSIsNiksZGUoMjEsImRpdiIsMjYpLGd0KDIyLGhBdCwxNywxLCJ0YWJsZSIsMjcpLGhlKCkoKSxHdCgyMywi'@;
put 'aHIiKSxkZSgyNCwiZGl2IikoMjUsImgzIiksTGUoMjYpLGhlKCksZ3QoMjcsZkF0LDIsMCwiaDUiLDYpLGRlKDI4LCJkaXYiLDI2KSxndCgyOSxnQXQsMTcsMSwidGFibGUiLDI3KSxoZSgpKCksR3QoMzAsImJyIiksaGUoKSgpKCkoKSksMiZjKXtjb25zdCBhPVJlKCk7ZmUoOSksd3IoYS5y'@;
put 'b2xlTmFtZSksZmUoNCksd3IoYS5yb2xlRGVzYyksZmUoNiksRHIoIk1FTUJFUlMgKCIsYS5yb2xlTWVtYmVyc0NvdW50LCIpIiksZmUoKSxNZSgibmdJZiIsMD09YS5yb2xlTWVtYmVyc0NvdW50KSxmZSgyKSxNZSgibmdJZiIsMCE9YS5yb2xlTWVtYmVyc0NvdW50KSxmZSg0KSxEcigiR3Jv'@;
put 'dXBzICgiLGEucm9sZUdyb3Vwc0NvdW50LCIpIiksZmUoKSxNZSgibmdJZiIsMD09YS5yb2xlR3JvdXBzQ291bnQpLGZlKDIpLE1lKCJuZ0lmIiwwIT1hLnJvbGVHcm91cHNDb3VudCl9fWxldCBTN2U9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmLHYpe3RoaXMuc2FzU2Vydmlj'@;
put 'ZT1hLHRoaXMuaGVscGVyU2VydmljZT1kLHRoaXMucm91dGVyPWgsdGhpcy5sb2NhdGlvbj1mLHRoaXMucm91dGU9dix0aGlzLnJvbGVTZWFyY2g9IiIsdGhpcy5yb2xlVXJpPSIiLHRoaXMucm9sZU5hbWU9IiIsdGhpcy5yb2xlRGVzYz0iIix0aGlzLnBhcmFtUHJlc2VudD0hMSx0aGlzLnBh'@;
put 'cmFtVVJJPSIiLHRoaXMubG9hZGluZz0hMX1uZ09uSW5pdCgpe0tuLnZpZXdlci5jdXJyZW50U2VsZWN0aW9uPSJ2aWV3L3VzZXJuYXYvcm9sZXMiLHZvaWQgMCE9PXRoaXMucm91dGUuc25hcHNob3QucGFyYW1zLnVyaSYmKHRoaXMucGFyYW1QcmVzZW50PSEwLHRoaXMucGFyYW1VUkk9dGhp'@;
put 'cy5yb3V0ZS5zbmFwc2hvdC5wYXJhbXMudXJpKSxLbi51c2VybmF2LnJvbGVMaXN0JiYhdGhpcy5wYXJhbVByZXNlbnQ/KHRoaXMucm9sZXM9S24udXNlcm5hdi5yb2xlTGlzdCx0aGlzLnJvbGVTZWFyY2g9S24udXNlcm5hdi5yb2xlU2VhcmNoKTp2b2lkIDA9PT1Lbi51c2VybmF2LnJvbGVM'@;
put 'aXN0Pyh0aGlzLmxvYWRpbmc9ITAsdGhpcy5zYXNTZXJ2aWNlLnJlcXVlc3QoInVzZXJuYXYvdXNlcnJvbGVzIixudWxsKS50aGVuKGE9PntpZih0aGlzLmxvYWRpbmc9ITEsdGhpcy5yb2xlcz1hLmFkYXB0ZXJSZXNwb25zZS5yb2xlcyxLbi51c2VybmF2LnJvbGVMaXN0PWEuYWRhcHRlclJl'@;
put 'c3BvbnNlLnJvbGVzLHRoaXMucGFyYW1QcmVzZW50JiZ2b2lkIDAhPT10aGlzLnJvbGVzKXtsZXQgZD10aGlzLmZpbmRSb2xlKHRoaXMucm9sZXMsdGhpcy5wYXJhbVVSSSk7ITEhPT1kJiYodGhpcy5sb2FkaW5nPSEwLHRoaXMuc2FzU2VydmljZS5yZXF1ZXN0KCJ1c2VybmF2L3VzZXJtZW1i'@;
put 'ZXJzYnlyb2xlIix7aXdhbnQ6W3tyb2xlaWQ6dGhpcy5wYXJhbVVSSX1dfSkudGhlbihmPT57dGhpcy5sb2FkaW5nPSExLHRoaXMucm9sZU1lbWJlcnM9Zi5hZGFwdGVyUmVzcG9uc2Uuc2FzbWVtYmVycyx0aGlzLnJvbGVNZW1iZXJzQ291bnQ9Zi5hZGFwdGVyUmVzcG9uc2Uuc2FzbWVtYmVy'@;
put 'cy5sZW5ndGgsdGhpcy5yb2xlR3JvdXBzPWYuYWRhcHRlclJlc3BvbnNlLnNhc2dyb3Vwcyx0aGlzLnJvbGVHcm91cHNDb3VudD1mLmFkYXB0ZXJSZXNwb25zZS5zYXNncm91cHMubGVuZ3RoLHRoaXMucm9sZVVyaT1kLlJPTEVVUkksdGhpcy5yb2xlTmFtZT1kLlJPTEVOQU1FLHRoaXMucm9s'@;
put 'ZURlc2M9ZC5ST0xFREVTQ30pKX19KSk6KHRoaXMucm9sZXM9S24udXNlcm5hdi5yb2xlTGlzdCx0aGlzLnJvbGVTZWFyY2g9S24udXNlcm5hdi5yb2xlU2VhcmNoLHRoaXMuc2FzU2VydmljZS5yZXF1ZXN0KCJ1c2VybmF2L3VzZXJyb2xlcyIsbnVsbCkudGhlbihhPT57aWYodGhpcy5yb2xl'@;
put 'cz1hLmFkYXB0ZXJSZXNwb25zZS5yb2xlcyxLbi51c2VybmF2LnJvbGVMaXN0PWEuYWRhcHRlclJlc3BvbnNlLnJvbGVzLHRoaXMucGFyYW1QcmVzZW50JiZ2b2lkIDAhPT10aGlzLnJvbGVzKXtsZXQgZD10aGlzLmZpbmRSb2xlKHRoaXMucm9sZXMsdGhpcy5wYXJhbVVSSSk7ITEhPT1kJiYo'@;
put 'dGhpcy5sb2FkaW5nPSEwLHRoaXMuc2FzU2VydmljZS5yZXF1ZXN0KCJ1c2VybmF2L3VzZXJtZW1iZXJzYnlyb2xlIix7aXdhbnQ6W3tyb2xlaWQ6dGhpcy5wYXJhbVVSSX1dfSkudGhlbihmPT57dGhpcy5sb2FkaW5nPSExLHRoaXMucm9sZU1lbWJlcnM9Zi5hZGFwdGVyUmVzcG9uc2Uuc2Fz'@;
put 'bWVtYmVycyx0aGlzLnJvbGVNZW1iZXJzQ291bnQ9Zi5hZGFwdGVyUmVzcG9uc2Uuc2FzbWVtYmVycy5sZW5ndGgsdGhpcy5yb2xlR3JvdXBzPWYuYWRhcHRlclJlc3BvbnNlLnNhc2dyb3Vwcyx0aGlzLnJvbGVHcm91cHNDb3VudD1mLmFkYXB0ZXJSZXNwb25zZS5zYXNncm91cHMubGVuZ3Ro'@;
put 'LHRoaXMucm9sZVVyaT1kLlJPTEVVUkksdGhpcy5yb2xlTmFtZT1kLlJPTEVOQU1FLHRoaXMucm9sZURlc2M9ZC5ST0xFREVTQ30pKX19KSl9cm9sZUxpc3RPbkZpbHRlcigpe3RoaXMuaGVscGVyU2VydmljZS5saWJyYXJ5T25GaWx0ZXIodGhpcy5yb2xlcyx0aGlzLnJvbGVTZWFyY2gsIlJP'@;
put 'TEVOQU1FIiksS24udXNlcm5hdi5yb2xlU2VhcmNoPXRoaXMucm9sZVNlYXJjaH1yb2xlT25DbGljayhhKXt0aGlzLmxvYWRpbmc9ITA7bGV0IGQ9dGhpcy5yb3V0ZXIudXJsO3RoaXMubG9jYXRpb24ucmVwbGFjZVN0YXRlKHRoaXMucGFyYW1QcmVzZW50P2Quc2xpY2UoMCxkLmxhc3RJbmRl'@;
put 'eE9mKCIvIikpKyIvIitlbmNvZGVVUkkoYS5ST0xFVVJJKTpkKyIvIitlbmNvZGVVUkkoYS5ST0xFVVJJKSksdGhpcy5zYXNTZXJ2aWNlLnJlcXVlc3QoInVzZXJuYXYvdXNlcm1lbWJlcnNieXJvbGUiLHtpd2FudDpbe3JvbGVpZDphLlJPTEVVUkl9XX0pLnRoZW4oZj0+e3RoaXMubG9hZGlu'@;
put 'Zz0hMSx0aGlzLnJvbGVNZW1iZXJzPWYuYWRhcHRlclJlc3BvbnNlLnNhc21lbWJlcnMsdGhpcy5yb2xlTWVtYmVyc0NvdW50PWYuYWRhcHRlclJlc3BvbnNlLnNhc21lbWJlcnMubGVuZ3RoLHRoaXMucm9sZUdyb3Vwcz1mLmFkYXB0ZXJSZXNwb25zZS5zYXNncm91cHMsdGhpcy5yb2xlR3Jv'@;
put 'dXBzQ291bnQ9Zi5hZGFwdGVyUmVzcG9uc2Uuc2FzZ3JvdXBzLmxlbmd0aCx0aGlzLnJvbGVVcmk9YS5ST0xFVVJJLHRoaXMucm9sZU5hbWU9YS5ST0xFTkFNRSx0aGlzLnJvbGVEZXNjPWEuUk9MRURFU0N9KX1maW5kUm9sZShhLGQpe2xldCBoPSExO3JldHVybiBhLmZvckVhY2goZj0+e2Yu'@;
put 'Uk9MRVVSST09PWQmJihoPWYpfSksaH1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShHZShCcyksR2UoU3UpLEdlKExzKSxHZShmaCksR2UoQ3UpKX19c3RhdGlje3RoaXMuXHUwMjc1Y21wPVZyKHt0eXBlOmMsc2VsZWN0b3JzOltbImFwcC1yb2xl'@;
put 'Il1dLGhvc3RBdHRyczpbMSwiY29udGVudC1jb250YWluZXIiXSxkZWNsczo3LHZhcnM6NCxjb25zdHM6W1sic2VhcmNoTGliVHJlZUlucHV0IiwiIl0sWzEsInNpZGViYXItaGVpZ2h0Il0sWyJjbGFzcyIsInNlYXJjaC1ub2RlIiw0LCJuZ0lmIl0sWzQsIm5nRm9yIiwibmdGb3JPZiJdLFsx'@;
put 'LCJjb250ZW50LWFyZWEiXSxbImNsYXNzIiwibG9hZGluZ1NwaW5uZXIiLDQsIm5nSWYiXSxbNCwibmdJZiJdLFsxLCJzZWFyY2gtbm9kZSJdLFsxLCJ0cmVlLXNlYXJjaC13cmFwcGVyIl0sWyJhcHBTdGVhbEZvY3VzIiwiIiwiY2xySW5wdXQiLCIiLCJwbGFjZWhvbGRlciIsIkZpbHRlciBi'@;
put 'eSBSb2xlcyIsIm5hbWUiLCJpbnB1dCIsImF1dG9jb21wbGV0ZSIsIm9mZiIsMywibmdNb2RlbENoYW5nZSIsImtleXVwIiwibmdNb2RlbCJdLFsic2hhcGUiLCJzZWFyY2giLDQsIm5nSWYiXSxbInNoYXBlIiwidGltZXMiLDMsImNsaWNrIiw0LCJuZ0lmIl0sWyJzaGFwZSIsInNlYXJjaCJd'@;
put 'LFsic2hhcGUiLCJ0aW1lcyIsMywiY2xpY2siXSxbMywiYWN0aXZlIiwiY2xpY2siLDQsIm5nSWYiXSxbMywiY2xpY2siXSxbMSwibS0wIiwiY3Vyc29yLXBvaW50ZXIiLCJsaXN0LXBhZGRpbmciXSxbInNoYXBlIiwiYmxvY2tzLWdyb3VwIl0sWzEsImxvYWRpbmdTcGlubmVyIl0sWzEsInNw'@;
put 'aW5uZXIiXSxbMSwiY2xyLXJvdyJdLFsxLCJjbHItY29sLTgiXSxbMSwidGFibGUiLCJyb2xlLWluZm8iXSxbMSwibGVmdCJdLFsxLCJyb2xlLWluZm8tdGV4dCJdLFsxLCJjYXJkIiwicm9sZS1kYXRhIl0sWzEsInRhYmxlLWNvbnRhaW5lciJdLFsiY2xhc3MiLCJ0YWJsZSBtZW1iZXItdGFi'@;
put 'bGUiLDQsIm5nSWYiXSxbMSwidGFibGUiLCJtZW1iZXItdGFibGUiXSxbMSwid2lkdGgtMjUiXSxbMSwiIl0sWzMsInJvdXRlckxpbmsiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFszLCJyb3V0ZXJMaW5rIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGQsaCl7MSZkJiYoZGUoMCwiYXBwLXNpZGViYXIi'@;
put 'LDEpKDEsImNsci10cmVlIiksZ3QoMixvQXQsNiwzLCJjbHItdHJlZS1ub2RlIiwyKSgzLGxBdCwyLDEsIm5nLWNvbnRhaW5lciIsMyksaGUoKSgpLGRlKDQsImRpdiIsNCksZ3QoNSxjQXQsMywwLCJkaXYiLDUpKDYsbUF0LDMxLDgsImRpdiIsNiksaGUoKSksMiZkJiYoZmUoMiksTWUoIm5n'@;
put 'SWYiLGgucm9sZXMpLGZlKCksTWUoIm5nRm9yT2YiLGgucm9sZXMpLGZlKDIpLE1lKCJuZ0lmIixoLmxvYWRpbmcpLGZlKCksTWUoIm5nSWYiLGgucm9sZU1lbWJlcnMmJiFoLmxvYWRpbmcpKX0sZGVwZW5kZW5jaWVzOltucyxiYSxjMSxxbCxubCwkcyxFaCxQZCxIbCxaMSxpNCxyNF0sc3R5'@;
put 'bGVzOlsiOjpuZy1kZWVwIGJvZHlbY2RzLXRoZW1lPWRhcmtdIC5yb2xle2JhY2tncm91bmQtY29sb3I6IzMxNDM1MTtib3JkZXItY29sb3I6IzMxNDM1MX06Om5nLWRlZXAgYm9keVtjZHMtdGhlbWU9ZGFya10gLnJvbGUtZGF0YXtiYWNrZ3JvdW5kLWNvbG9yOiMzMTQzNTE7Ym9yZGVyLWNv'@;
put 'bG9yOiMzMTQzNTF9OjpuZy1kZWVwIGJvZHlbY2RzLXRoZW1lPWRhcmtdIC5tZW1iZXItdGFibGUgdGJvZHkgdHI6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojMjk0MDRifTo6bmctZGVlcCBib2R5W2Nkcy10aGVtZT1saWdodF0gLnJvbGUtaW5mb3tiYWNrZ3JvdW5kLWNvbG9yOiNmOWY5Zjk7'@;
put 'Ym9yZGVyLWNvbG9yOiNhN2E3YTc7Ym94LXNoYWRvdzowIDJweCA1cHggI2RhZDdkN306Om5nLWRlZXAgYm9keVtjZHMtdGhlbWU9bGlnaHRdIC5yb2xlLWRhdGF7YmFja2dyb3VuZC1jb2xvcjojZjlmOWY5O2JvcmRlci1jb2xvcjojYTdhN2E3O2JveC1zaGFkb3c6MCAycHggNXB4ICNkYWQ3'@;
put 'ZDd9OjpuZy1kZWVwIGJvZHlbY2RzLXRoZW1lPWxpZ2h0XSAubWVtYmVyLXRhYmxlIHRib2R5IHRyOmhvdmVye2JhY2tncm91bmQtY29sb3I6I2U2ZTZlNn0uc2lkZWJhci1oZWlnaHR7aGVpZ2h0OjEwMCV9LnJvbGUtaW5mby10ZXh0e2Rpc3BsYXk6aW5saW5lO2ZvbnQtc2l6ZToyMHB4fS5y'@;
put 'b2xlLWluZm97Ym9yZGVyOjFweCBzb2xpZDtib3JkZXItcmFkaXVzOjNweH0ucm9sZS1pbmZvIHRke3RleHQtYWxpZ246Y2VudGVyfS5yb2xlLWRhdGF7Ym9yZGVyOjFweCBzb2xpZDtib3JkZXItcmFkaXVzOjNweH0ucm9sZS1kYXRhe21pbi1oZWlnaHQ6dW5zZXR9LnJvbGUtZGF0YSBoMywu'@;
put 'cm9sZS1kYXRhIGg1e3RleHQtYWxpZ246Y2VudGVyfS5tZW1iZXItdGFibGV7d2lkdGg6MTAwJX0ubWVtYmVyLXRhYmxlIHRib2R5IHRyOmhvdmVye2N1cnNvcjpwb2ludGVyfS50YWJsZS1jb250YWluZXJ7b3ZlcmZsb3cteTpzY3JvbGw7bWF4LWhlaWdodDo3MDBweH1AbWVkaWEgc2NyZWVu'@;
put 'IGFuZCAobWF4LXdpZHRoOiA3NjhweCl7LnJvbGUtZGF0YXttaW4taGVpZ2h0OnVuc2V0IWltcG9ydGFudH19XG4iXSxlbmNhcHN1bGF0aW9uOjJ9KX19cmV0dXJuIGN9KSgpLHZBdD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7fW5nT25Jbml0KCl7fXN0YXRpY3t0aGlzLlx1MDI3NWZh'@;
put 'Yz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siYXBwLXVzZXJuYXYtcm91dGUiXV0saG9zdEF0dHJzOlsxLCJjb250ZW50LWNvbnRhaW5lciJdLGRlY2xzOjEsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9u'@;
put 'KGQsaCl7MSZkJiZHdCgwLCJyb3V0ZXItb3V0bGV0Iil9LGRlcGVuZGVuY2llczpbcmddLGVuY2Fwc3VsYXRpb246Mn0pfX1yZXR1cm4gY30pKCksYkF0PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt9bmdPbkluaXQoKXt9bmdPbkRlc3Ryb3koKXt9c3RhdGlje3RoaXMuXHUwMjc1ZmFj'@;
put 'PWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAtdmlldy1yb3V0ZSJdXSxob3N0QXR0cnM6WzEsImNvbnRlbnQtY29udGFpbmVyIl0sZGVjbHM6MSx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24oZCxo'@;
put 'KXsxJmQmJkd0KDAsInJvdXRlci1vdXRsZXQiKX0sZGVwZW5kZW5jaWVzOltyZ10sZW5jYXBzdWxhdGlvbjoyfSl9fXJldHVybiBjfSkoKTtmdW5jdGlvbiB5QXQoYyxsKXsxJmMmJkd0KDAsImNsci1pY29uIiwxMil9ZnVuY3Rpb24gX0F0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUo'@;
put 'MCwiY2xyLWljb24iLDEzKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1SZSgyKTtyZXR1cm4gaC51c2VyU2VhcmNoPSIiLEN0KGgudXNlckxpc3RPbkZpbHRlcigpKX0pLGhlKCl9fWZ1bmN0aW9uIHdBdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImNsci10'@;
put 'cmVlLW5vZGUiLDcpKDEsImRpdiIsOCkoMiwiaW5wdXQiLDksMCksZ2koIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9UmUoKTtyZXR1cm4gbWkoZi51c2VyU2VhcmNoLGgpfHwoZi51c2VyU2VhcmNoPWgpLEN0KGgpfSksRnQoImtleXVwIixmdW5jdGlvbigpe3Jl'@;
put 'dHVybiB3dChhKSxDdChSZSgpLnVzZXJMaXN0T25GaWx0ZXIoKSl9KSxoZSgpLGd0KDQseUF0LDEsMCwiY2xyLWljb24iLDEwKSg1LF9BdCwxLDAsImNsci1pY29uIiwxMSksaGUoKSgpfWlmKDImYyl7Y29uc3QgYT1oYSgzKSxkPVJlKCk7ZmUoMikscGkoIm5nTW9kZWwiLGQudXNlclNlYXJj'@;
put 'aCksZmUoMiksTWUoIm5nSWYiLGEudmFsdWUubGVuZ3RoPDEpLGZlKCksTWUoIm5nSWYiLGEudmFsdWUubGVuZ3RoPjApfX1mdW5jdGlvbiBDQXQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJjbHItdHJlZS1ub2RlIiwxNSksRnQoImNsaWNrIixmdW5jdGlvbigpe3d0KGEpO2Nv'@;
put 'bnN0IGg9UmUoKS4kaW1wbGljaXQ7cmV0dXJuIEN0KFJlKCkudXNlck9uQ2xpY2soaCkpfSksZGUoMSwicCIsMTYpLEd0KDIsImNsci1pY29uIiwxNyksTGUoMyksaGUoKSgpfWlmKDImYyl7Y29uc3QgYT1SZSgpLiRpbXBsaWNpdCxkPVJlKCk7VHIoImFjdGl2ZSIsKG51bGw9PWQudXNlcklu'@;
put 'Zm8/bnVsbDpkLnVzZXJJbmZvLlVSSSk9PT1hLlVSSSksZmUoMyksRHIoIiAiLGEuTkFNRSwiICIpfX1mdW5jdGlvbiBTQXQoYyxsKXtpZigxJmMmJihzaSgwKSxndCgxLENBdCw0LDMsImNsci10cmVlLW5vZGUiLDE0KSxsaSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7ZmUoKSxNZSgi'@;
put 'bmdJZiIsIWEuaGlkZGVuKX19ZnVuY3Rpb24gTUF0KGMsbCl7MSZjJiYoZGUoMCwiZGl2IiwxOCkoMSwic3BhbiIsMTkpLExlKDIsIiBMb2FkaW5nLi4uICIpLGhlKCkoKSl9ZnVuY3Rpb24geEF0KGMsbCl7aWYoMSZjJiYoc2koMCksZGUoMSwidHIiKSgyLCJ0ZCIsMjcpLExlKDMsIiBNZXRh'@;
put 'ZGF0YSBDcmVhdGVkOiAiKSxkZSg0LCJiIiksTGUoNSksaGUoKSgpKCksZGUoNiwidHIiKSg3LCJ0ZCIsMjcpLExlKDgsIiBNZXRhZGF0YSBVcGRhdGVkOiAiKSxkZSg5LCJiIiksTGUoMTApLGhlKCkoKSgpLGxpKCkpLDImYyl7Y29uc3QgYT1SZSgzKTtmZSg1KSx3cihhLnVzZXJJbmZvLk1F'@;
put 'VEFEQVRBQ1JFQVRFRCksZmUoNSksd3IoYS51c2VySW5mby5NRVRBREFUQVVQREFURUQpfX1mdW5jdGlvbiBFQXQoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiLDIxKSgxLCJkaXYiLDIyKSgyLCJ0YWJsZSIsMjYpKDMsInRib2R5IikoNCwidHIiKSg1LCJ0ZCIsMjcpKDYsInAiLDI4KSg3LCJi'@;
put 'IiksTGUoOCksaGUoKSgpKCkoKSxkZSg5LCJ0ciIpKDEwLCJ0ZCIsMjcpKDExLCJwIiwyOCkoMTIsImIiKSxMZSgxMyksaGUoKSgpKCkoKSxndCgxNCx4QXQsMTEsMiwibmctY29udGFpbmVyIiw2KSxoZSgpKCkoKSgpKSwyJmMpe2NvbnN0IGE9UmUoMik7ZmUoOCksd3IoYS51c2VySW5mby5O'@;
put 'QU1FKSxmZSg1KSx3cihhLnVzZXJJbmZvLkRJU1BMQVlOQU1FKSxmZSgpLE1lKCJuZ0lmIixhLnNlcnZlclR5cGU9PT1hLlNlcnZlclR5cGUuU2FzOSl9fWZ1bmN0aW9uIFRBdChjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIsMjEpKDEsImRpdiIsMjIpKDIsInRhYmxlIiwyNikoMywidGJvZHki'@;
put 'KSg0LCJ0ciIpKDUsInRkIiwyNykoNiwicCIsMjgpKDcsImIiKSxMZSg4KSxoZSgpKCkoKSgpLGRlKDksInRyIikoMTAsInRkIiwyNyksTGUoMTEsIiBVc2VyIElEOiAiKSxkZSgxMiwiYiIpLExlKDEzKSxoZSgpKCkoKSxkZSgxNCwidHIiKSgxNSwidGQiLDI3KSxMZSgxNiwiIFVzZXIgcHJv'@;
put 'dmlkZXIgSUQ6ICIpLGRlKDE3LCJiIiksTGUoMTgpLGhlKCkoKSgpKCkoKSgpKCkpLDImYyl7Y29uc3QgYT1SZSgyKTtmZSg4KSx3cihhLnVzZXJJbmZvLk5BTUUpLGZlKDUpLHdyKGEudXNlckluZm8uVVJJKSxmZSg1KSx3cihhLnVzZXJJbmZvLlBST1ZJREVSKX19ZnVuY3Rpb24gQUF0KGMs'@;
put 'bCl7MSZjJiYoZGUoMCwiaDUiKSxMZSgxLCJObyBFbWFpbHMgUHJlc2VudCIpLGhlKCkpfWZ1bmN0aW9uIGtBdChjLGwpe2lmKDEmYyYmKGRlKDAsInRyIikoMSwidGQiLDMxKSxMZSgyKSxoZSgpLGRlKDMsInRkIiwzMSksTGUoNCksaGUoKSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7'@;
put 'ZmUoMiksd3IoYS5FTUFJTCksZmUoMiksd3IoYS5UWVBFKX19ZnVuY3Rpb24gREF0KGMsbCl7aWYoMSZjJiYoZGUoMCwidGFibGUiLDI5KSgxLCJ0aGVhZCIpKDIsInRyIikoMywidGQiLDMwKSg0LCJiIiksTGUoNSwiRU1BSUwiKSxoZSgpKCksZGUoNiwidGQiLDMxKSg3LCJiIiksTGUoOCwi'@;
put 'VFlQRSIpLGhlKCkoKSgpKCksZGUoOSwidGJvZHkiKSxndCgxMCxrQXQsNSwyLCJ0ciIsMyksaGUoKSgpKSwyJmMpe2NvbnN0IGE9UmUoMyk7ZmUoMTApLE1lKCJuZ0Zvck9mIixhLnVzZXJFbWFpbHMpfX1mdW5jdGlvbiBJQXQoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiKSgxLCJoMyIpLExl'@;
put 'KDIpLGhlKCksZ3QoMyxBQXQsMiwwLCJoNSIsNiksZGUoNCwiZGl2IiwyNCksZ3QoNSxEQXQsMTEsMSwidGFibGUiLDI1KSxoZSgpKCkpLDImYyl7Y29uc3QgYT1SZSgyKTtmZSgyKSxEcigiRU1BSUxTICgiLGEudXNlckVtYWlsc0NvdW50fHwiMCIsIikiKSxmZSgpLE1lKCJuZ0lmIiwwPT1h'@;
put 'LnVzZXJFbWFpbHNDb3VudCksZmUoMiksTWUoIm5nSWYiLDAhPWEudXNlckVtYWlsc0NvdW50KX19ZnVuY3Rpb24gUkF0KGMsbCl7MSZjJiZHdCgwLCJociIpfWZ1bmN0aW9uIExBdChjLGwpezEmYyYmKGRlKDAsImg1IiksTGUoMSwiTm8gR3JvdXBzIFByZXNlbnQiKSxoZSgpKX1mdW5jdGlv'@;
put 'biBPQXQoYyxsKXtpZigxJmMmJihkZSgwLCJ0ZCIsMzMpLExlKDEpLGhlKCkpLDImYyl7Y29uc3QgYT1SZSgpLiRpbXBsaWNpdDtNZSgicm91dGVyTGluayIsIi92aWV3L3VzZXJuYXYvZ3JvdXBzLyIrYS5VUkkpLGZlKCksRHIoIiAiLGEuR1JPVVBOQU1FLCIgIil9fWZ1bmN0aW9uIFBBdChj'@;
put 'LGwpe2lmKDEmYyYmKHNpKDApLGRlKDEsInRkIiwzMyksTGUoMiksaGUoKSxsaSgpKSwyJmMpe2NvbnN0IGE9UmUoKS4kaW1wbGljaXQ7ZmUoKSxNZSgicm91dGVyTGluayIsIi92aWV3L3VzZXJuYXYvZ3JvdXBzLyIrKGEuR1JPVVBVUkl8fGEuVVJJKSksZmUoKSxEcigiICIsYS5HUk9VUE5B'@;
put 'TUUsIiAiKX19ZnVuY3Rpb24gRkF0KGMsbCl7aWYoMSZjJiYoZGUoMCwidHIiKSxndCgxLE9BdCwyLDIsInRkIiwzMikoMixQQXQsMywyLCJuZy1jb250YWluZXIiLDYpLGhlKCkpLDImYyl7Y29uc3QgYT1SZSgzKTtmZSgpLE1lKCJuZ0lmIixhLnNlcnZlclR5cGU9PT1hLlNlcnZlclR5cGUu'@;
put 'U2FzVml5YSksZmUoKSxNZSgibmdJZiIsYS5zZXJ2ZXJUeXBlIT09YS5TZXJ2ZXJUeXBlLlNhc1ZpeWEpfX1mdW5jdGlvbiBIQXQoYyxsKXtpZigxJmMmJihkZSgwLCJ0YWJsZSIsMjkpKDEsInRib2R5IiksZ3QoMixGQXQsMywyLCJ0ciIsMyksaGUoKSgpKSwyJmMpe2NvbnN0IGE9UmUoMik7'@;
put 'ZmUoMiksTWUoIm5nRm9yT2YiLGEudXNlckdyb3Vwcyl9fWZ1bmN0aW9uIE5BdChjLGwpezEmYyYmR3QoMCwiaHIiKX1mdW5jdGlvbiBWQXQoYyxsKXsxJmMmJihkZSgwLCJoNSIpLExlKDEsIk5vIFJvbGVzIFByZXNlbnQiKSxoZSgpKX1mdW5jdGlvbiBCQXQoYyxsKXtpZigxJmMmJihkZSgw'@;
put 'LCJ0ciIpKDEsInRkIiwzNCksTGUoMiksaGUoKSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQsZD1SZSg0KTtmZSgpLE1lKCJyb3V0ZXJMaW5rIiwiL3ZpZXcvdXNlcm5hdi9yb2xlcy8iK2QuZ2V0Um9sZVVSSShhLlJPTEVVUkkpKSxmZSgpLERyKCIgIixhLlJPTEVOQU1FLCIgIil9fWZ1'@;
put 'bmN0aW9uIGpBdChjLGwpe2lmKDEmYyYmKGRlKDAsInRhYmxlIiwyOSkoMSwidGJvZHkiKSxndCgyLEJBdCwzLDIsInRyIiwzKSxoZSgpKCkpLDImYyl7Y29uc3QgYT1SZSgzKTtmZSgyKSxNZSgibmdGb3JPZiIsYS51c2VyUm9sZXMpfX1mdW5jdGlvbiB6QXQoYyxsKXtpZigxJmMmJihkZSgw'@;
put 'LCJkaXYiKSgxLCJoMyIpLExlKDIpLGhlKCksZ3QoMyxWQXQsMiwwLCJoNSIsNiksZGUoNCwiZGl2IiwyNCksZ3QoNSxqQXQsMywxLCJ0YWJsZSIsMjUpLGhlKCkoKSksMiZjKXtjb25zdCBhPVJlKDIpO2ZlKDIpLERyKCJST0xFUyAoIixhLnVzZXJSb2xlc0NvdW50fHwiMCIsIikiKSxmZSgp'@;
put 'LE1lKCJuZ0lmIiwwPT1hLnVzZXJSb2xlc0NvdW50KSxmZSgyKSxNZSgibmdJZiIsMCE9YS51c2VyUm9sZXNDb3VudCl9fWZ1bmN0aW9uIFVBdChjLGwpezEmYyYmR3QoMCwiaHIiKX1mdW5jdGlvbiBaQXQoYyxsKXsxJmMmJihkZSgwLCJoNSIpLExlKDEsIk5vIExvZ2lucyBQcmVzZW50Iiks'@;
put 'aGUoKSl9ZnVuY3Rpb24gV0F0KGMsbCl7aWYoMSZjJiYoZGUoMCwidHIiKSgxLCJ0ZCIsMzEpLExlKDIpLGhlKCksZGUoMywidGQiLDMxKSxMZSg0KSxoZSgpKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtmZSgyKSx3cihhLkRPTUFJTiksZmUoMiksd3IoYS5VU0VSSUQpfX1mdW5jdGlv'@;
put 'biBZQXQoYyxsKXtpZigxJmMmJihkZSgwLCJ0YWJsZSIsMjkpKDEsInRoZWFkIikoMiwidHIiKSgzLCJ0ZCIsMzApKDQsImIiKSxMZSg1LCJET01BSU4iKSxoZSgpKCksZGUoNiwidGQiKSg3LCJiIiksTGUoOCwiVVNFUiBJRCIpLGhlKCkoKSgpKCksZGUoOSwidGJvZHkiKSxndCgxMCxXQXQs'@;
put 'NSwyLCJ0ciIsMyksaGUoKSgpKSwyJmMpe2NvbnN0IGE9UmUoMyk7ZmUoMTApLE1lKCJuZ0Zvck9mIixhLnVzZXJMb2dpbnMpfX1mdW5jdGlvbiBHQXQoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiKSgxLCJoMyIpLExlKDIpLGhlKCksZ3QoMyxaQXQsMiwwLCJoNSIsNiksZGUoNCwiZGl2Iiwy'@;
put 'NCksZ3QoNSxZQXQsMTEsMSwidGFibGUiLDI1KSxoZSgpKCkpLDImYyl7Y29uc3QgYT1SZSgyKTtmZSgyKSxEcigiTE9HSU5TICgiLGEudXNlckxvZ2luc0NvdW50fHwiMCIsIikiKSxmZSgpLE1lKCJuZ0lmIiwwPT1hLnVzZXJMb2dpbnNDb3VudCksZmUoMiksTWUoIm5nSWYiLDAhPWEudXNl'@;
put 'ckxvZ2luc0NvdW50KX19ZnVuY3Rpb24gJEF0KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2IiksZ3QoMSxFQXQsMTUsMywiZGl2IiwyMCkoMixUQXQsMTksMywiZGl2IiwyMCksZGUoMywiZGl2IiwyMSkoNCwiZGl2IiwyMikoNSwiZGl2IiwyMyksZ3QoNixJQXQsNiwzLCJkaXYiLDYpKDcsUkF0'@;
put 'LDEsMCwiaHIiLDYpLGRlKDgsImRpdiIpKDksImgzIiksTGUoMTApLGhlKCksZ3QoMTEsTEF0LDIsMCwiaDUiLDYpLGRlKDEyLCJkaXYiLDI0KSxndCgxMyxIQXQsMywxLCJ0YWJsZSIsMjUpLGhlKCkoKSxndCgxNCxOQXQsMSwwLCJociIsNikoMTUsekF0LDYsMywiZGl2Iiw2KSgxNixVQXQs'@;
put 'MSwwLCJociIsNikoMTcsR0F0LDYsMywiZGl2Iiw2KSxHdCgxOCwiYnIiKSxoZSgpKCkoKSgpKSwyJmMpe2NvbnN0IGE9UmUoKTtmZSgpLE1lKCJuZ0lmIixhLnNlcnZlclR5cGUhPT1hLlNlcnZlclR5cGUuU2FzVml5YSksZmUoKSxNZSgibmdJZiIsYS5zZXJ2ZXJUeXBlPT09YS5TZXJ2ZXJU'@;
put 'eXBlLlNhc1ZpeWEmJmEudXNlckluZm8pLGZlKDQpLE1lKCJuZ0lmIixhLnNlcnZlclR5cGU9PT1hLlNlcnZlclR5cGUuU2FzOSksZmUoKSxNZSgibmdJZiIsYS5zZXJ2ZXJUeXBlPT09YS5TZXJ2ZXJUeXBlLlNhczkpLGZlKDMpLERyKCJHUk9VUFMgKCIsYS51c2VyR3JvdXBzQ291bnR8fCIw'@;
put 'IiwiKSIpLGZlKCksTWUoIm5nSWYiLDA9PWEudXNlckdyb3Vwc0NvdW50KSxmZSgyKSxNZSgibmdJZiIsMCE9YS51c2VyR3JvdXBzQ291bnQpLGZlKCksTWUoIm5nSWYiLGEuc2VydmVyVHlwZT09PWEuU2VydmVyVHlwZS5TYXM5KSxmZSgpLE1lKCJuZ0lmIixhLnNlcnZlclR5cGU9PT1hLlNl'@;
put 'cnZlclR5cGUuU2FzOSksZmUoKSxNZSgibmdJZiIsYS5zZXJ2ZXJUeXBlPT09YS5TZXJ2ZXJUeXBlLlNhczkpLGZlKCksTWUoIm5nSWYiLGEuc2VydmVyVHlwZT09PWEuU2VydmVyVHlwZS5TYXM5KX19bGV0IE03ZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYsdil7dGhpcy5o'@;
put 'ZWxwZXJTZXJ2aWNlPWEsdGhpcy5zYXNTZXJ2aWNlPWQsdGhpcy5yb3V0ZT1oLHRoaXMubG9jYXRpb249Zix0aGlzLnJvdXRlcj12LHRoaXMubG9hZGluZz0hMSx0aGlzLnVzZXJTZWFyY2g9IiIsdGhpcy5wYXJhbVByZXNlbnQ9ITEsdGhpcy5wYXJhbU5hbWU9IiIsdGhpcy5zYXNqc0NvbmZp'@;
put 'Zz1uZXcgbWguU0FTanNDb25maWcsdGhpcy5pc1ZpeWE9ITEsdGhpcy5zZXJ2ZXJUeXBlPSIiLHRoaXMuU2VydmVyVHlwZT1CMC5ZLHRoaXMuc2VydmVyVHlwZT10aGlzLnNhc1NlcnZpY2UuZ2V0U2VydmVyVHlwZSgpLHRoaXMuc2FzanNDb25maWc9dGhpcy5zYXNTZXJ2aWNlLmdldFNhc2pz'@;
put 'Q29uZmlnKCksIlNBU1ZJWUEiPT09dGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJUeXBlJiYodGhpcy5pc1ZpeWE9ITApfW5nT25Jbml0KCl7aWYoS24udmlld2VyLmN1cnJlbnRTZWxlY3Rpb249InZpZXcvdXNlcm5hdi91c2VycyIsdm9pZCAwIT09dGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbXMu'@;
put 'dXJpJiYodGhpcy5wYXJhbVByZXNlbnQ9ITAsdGhpcy5wYXJhbU5hbWU9dGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbXMudXJpKSxLbi51c2VybmF2LnVzZXJMaXN0JiYhdGhpcy5wYXJhbVByZXNlbnQpdGhpcy51c2Vycz1Lbi51c2VybmF2LnVzZXJMaXN0LHRoaXMudXNlclNlYXJjaD1Lbi51'@;
put 'c2VybmF2LnVzZXJTZWFyY2g7ZWxzZSBpZih2b2lkIDA9PT1Lbi51c2VybmF2LnVzZXJMaXN0Pyh0aGlzLmxvYWRpbmc9ITAsdGhpcy5pc1ZpeWE/ZmV0Y2godGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJVcmwrIi9pZGVudGl0aWVzL3VzZXJzP2xpbWl0PTIwMDAiLHtoZWFkZXJzOntBY2NlcHQ6'@;
put 'ImFwcGxpY2F0aW9uL2pzb24ifX0pLnRoZW4oYT0+YS50ZXh0KCkpLnRoZW4oYT0+e2xldCBoPUpTT04ucGFyc2UoYSkuaXRlbXMubWFwKGY9Pih7TkFNRTpmLm5hbWUsVVJJOmYuaWQsUFJPVklERVI6Zi5wcm92aWRlcklkfSkpO3RoaXMubG9hZGluZz0hMSx0aGlzLnVzZXJzPWgsS24udXNl'@;
put 'cm5hdi51c2VyTGlzdD1ofSk6dGhpcy5zYXNTZXJ2aWNlLnJlcXVlc3QoInVzZXJuYXYvdXNlcm1lbWJlcnMiLG51bGwpLnRoZW4oYT0+e3RoaXMubG9hZGluZz0hMSx0aGlzLnVzZXJzPWEuYWRhcHRlclJlc3BvbnNlLnVzZXJzLEtuLnVzZXJuYXYudXNlckxpc3Q9YS5hZGFwdGVyUmVzcG9u'@;
put 'c2UudXNlcnN9KSk6KHRoaXMudXNlcnM9S24udXNlcm5hdi51c2VyTGlzdCx0aGlzLnVzZXJTZWFyY2g9S24udXNlcm5hdi51c2VyU2VhcmNoKSx0aGlzLnBhcmFtUHJlc2VudClpZih0aGlzLmxvYWRpbmc9ITAsdGhpcy5pc1ZpeWEpe2xldCBhPXRoaXMucm91dGUuc25hcHNob3QucGFyYW1z'@;
put 'LnVyaTtmZXRjaCh0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclVybCsiL2lkZW50aXRpZXMvdXNlcnMvIithKyIvbWVtYmVyc2hpcHM/bGltaXQ9MjAwMCIse2hlYWRlcnM6e0FjY2VwdDoiYXBwbGljYXRpb24vanNvbiJ9fSkudGhlbihkPT5kLnRleHQoKSkudGhlbihkPT57bGV0IGg9SlNPTi5w'@;
put 'YXJzZShkKTt0aGlzLnVzZXJEYXRhPWgsdGhpcy5sb2FkaW5nPSExO2xldCBmPWguaXRlbXMubWFwKHY9Pih7R1JPVVBOQU1FOnYubmFtZSxVUkk6di5pZH0pKTt0aGlzLnVzZXJHcm91cHM9Zix0aGlzLnVzZXJHcm91cHNDb3VudD1mLmxlbmd0aCx0aGlzLnVzZXJzJiYodGhpcy51c2VySW5m'@;
put 'bz10aGlzLnVzZXJzLmZpbmQodj0+di5VUkk9PT1hKSl9KX1lbHNle2NvbnN0IGE9dGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbXMudXJpO3RoaXMuc2FzU2VydmljZS5yZXF1ZXN0KCJ1c2VybmF2L3VzZXJncm91cHNieW1lbWJlciIse2l3YW50Olt7dXJpOmF9XX0pLnRoZW4oaD0+e3N3aXRj'@;
put 'aCh0aGlzLmxvYWRpbmc9ITEsdGhpcy5zZXJ2ZXJUeXBlKXtjYXNlIEIwLlkuU2FzOTp0aGlzLnVzZXJJbmZvPWguYWRhcHRlclJlc3BvbnNlLmluZm9bMF0sdGhpcy51c2VyRW1haWxzPWguYWRhcHRlclJlc3BvbnNlLmVtYWlscyx0aGlzLnVzZXJFbWFpbHNDb3VudD1oLmFkYXB0ZXJSZXNw'@;
put 'b25zZS5lbWFpbHMubGVuZ3RoLHRoaXMudXNlclJvbGVzPWguYWRhcHRlclJlc3BvbnNlLnJvbGVzLHRoaXMudXNlclJvbGVzQ291bnQ9aC5hZGFwdGVyUmVzcG9uc2Uucm9sZXMubGVuZ3RoLHRoaXMudXNlckxvZ2lucz1oLmFkYXB0ZXJSZXNwb25zZS5sb2dpbnMsdGhpcy51c2VyTG9naW5z'@;
put 'Q291bnQ9aC5hZGFwdGVyUmVzcG9uc2UubG9naW5zLmxlbmd0aDticmVhaztjYXNlIEIwLlkuU2FzanM6aWYodGhpcy51c2Vycyl0aGlzLnVzZXJJbmZvPXRoaXMudXNlcnMuZmluZChmPT5mLlVSST09PWEpO2Vsc2V7Y29uc3QgZj1oLmFkYXB0ZXJSZXNwb25zZS5ncm91cHNbMF07dGhpcy51'@;
put 'c2VySW5mbz17VVJJOmYuSUQsTkFNRTpmLk5BTUUsRElTUExBWU5BTUU6Zi5OQU1FfX19dGhpcy51c2VyRGF0YT1oLmFkYXB0ZXJSZXNwb25zZSx0aGlzLnVzZXJHcm91cHM9aC5hZGFwdGVyUmVzcG9uc2UuZ3JvdXBzLHRoaXMudXNlckdyb3Vwc0NvdW50PWguYWRhcHRlclJlc3BvbnNlLmdy'@;
put 'b3Vwcy5sZW5ndGh9KX19dXNlckxpc3RPbkZpbHRlcigpe3RoaXMuaGVscGVyU2VydmljZS5saWJyYXJ5T25GaWx0ZXIodGhpcy51c2Vycyx0aGlzLnVzZXJTZWFyY2gsIk5BTUUiKSxLbi51c2VybmF2LnVzZXJTZWFyY2g9dGhpcy51c2VyU2VhcmNofXVzZXJPbkNsaWNrKGEpe3RoaXMubG9h'@;
put 'ZGluZz0hMDtsZXQgZD10aGlzLnJvdXRlci51cmw7dGhpcy5sb2NhdGlvbi5yZXBsYWNlU3RhdGUodGhpcy5wYXJhbVByZXNlbnQ/ZC5zbGljZSgwLGQubGFzdEluZGV4T2YoIi8iKSkrIi8iK2VuY29kZVVSSShhLlVSSSk6ZCsiLyIrZW5jb2RlVVJJKGEuVVJJKSksdGhpcy5pc1ZpeWE/ZmV0'@;
put 'Y2godGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJVcmwrIi9pZGVudGl0aWVzL3VzZXJzLyIrYS5VUkkrIi9tZW1iZXJzaGlwcz9saW1pdD0yMDAwIix7aGVhZGVyczp7QWNjZXB0OiJhcHBsaWNhdGlvbi9qc29uIn19KS50aGVuKGg9PmgudGV4dCgpKS50aGVuKGg9PntsZXQgZj1KU09OLnBhcnNl'@;
put 'KGgpO3RoaXMudXNlckRhdGE9Zix0aGlzLmxvYWRpbmc9ITE7bGV0IHY9Zi5pdGVtcy5tYXAoTT0+KHtHUk9VUE5BTUU6TS5uYW1lLFVSSTpNLmlkfSkpO3RoaXMudXNlckdyb3Vwcz12LHRoaXMudXNlckdyb3Vwc0NvdW50PXYubGVuZ3RoLHRoaXMudXNlcnMmJih0aGlzLnVzZXJJbmZvPXRo'@;
put 'aXMudXNlcnMuZmluZChNPT5NLlVSST09PWEuVVJJKSl9KTp0aGlzLnNhc1NlcnZpY2UucmVxdWVzdCgidXNlcm5hdi91c2VyZ3JvdXBzYnltZW1iZXIiLHtpd2FudDpbe3VyaTphLlVSSX1dfSkudGhlbihmPT57c3dpdGNoKHRoaXMubG9hZGluZz0hMSx0aGlzLnNlcnZlclR5cGUpe2Nhc2Ug'@;
put 'QjAuWS5TYXM5OnRoaXMudXNlckluZm89Zi5hZGFwdGVyUmVzcG9uc2UuaW5mb1swXSx0aGlzLnVzZXJFbWFpbHM9Zi5hZGFwdGVyUmVzcG9uc2UuZW1haWxzLHRoaXMudXNlckVtYWlsc0NvdW50PWYuYWRhcHRlclJlc3BvbnNlLmVtYWlscy5sZW5ndGgsdGhpcy51c2VyUm9sZXM9Zi5hZGFw'@;
put 'dGVyUmVzcG9uc2Uucm9sZXMsdGhpcy51c2VyUm9sZXNDb3VudD1mLmFkYXB0ZXJSZXNwb25zZS5yb2xlcy5sZW5ndGgsdGhpcy51c2VyTG9naW5zPWYuYWRhcHRlclJlc3BvbnNlLmxvZ2lucyx0aGlzLnVzZXJMb2dpbnNDb3VudD1mLmFkYXB0ZXJSZXNwb25zZS5sb2dpbnMubGVuZ3RoO2Jy'@;
put 'ZWFrO2Nhc2UgQjAuWS5TYXNqczppZih0aGlzLnVzZXJzKXRoaXMudXNlckluZm89dGhpcy51c2Vycy5maW5kKHY9PnYuVVJJPT09YS5VUkkpO2Vsc2V7Y29uc3Qgdj1mLmFkYXB0ZXJSZXNwb25zZS5ncm91cHNbMF07dGhpcy51c2VySW5mbz17VVJJOnYuSUQsTkFNRTp2Lk5BTUUsRElTUExB'@;
put 'WU5BTUU6di5OQU1FfX19dGhpcy51c2VyRGF0YT1mLmFkYXB0ZXJSZXNwb25zZSx0aGlzLnVzZXJHcm91cHM9Zi5hZGFwdGVyUmVzcG9uc2UuZ3JvdXBzLHRoaXMudXNlckdyb3Vwc0NvdW50PWYuYWRhcHRlclJlc3BvbnNlLmdyb3Vwcy5sZW5ndGh9KX1nZXRSb2xlVVJJKGEpe3JldHVybiBh'@;
put 'LnNwbGl0KCJPTVNPQko6SWRlbnRpdHlHcm91cCIpWzFdLnNsaWNlKDEpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKEdlKFN1KSxHZShCcyksR2UoQ3UpLEdlKGZoKSxHZShMcykpfX1zdGF0aWN7dGhpcy5cdTAyNzVjbXA9VnIoe3R5cGU6Yyxz'@;
put 'ZWxlY3RvcnM6W1siYXBwLXVzZXIiXV0saG9zdEF0dHJzOlsxLCJjb250ZW50LWNvbnRhaW5lciJdLGRlY2xzOjcsdmFyczo0LGNvbnN0czpbWyJzZWFyY2hMaWJUcmVlSW5wdXQiLCIiXSxbMSwic2lkZWJhci1oZWlnaHQiXSxbImNsYXNzIiwic2VhcmNoLW5vZGUiLDQsIm5nSWYiXSxbNCwi'@;
put 'bmdGb3IiLCJuZ0Zvck9mIl0sWzEsImNvbnRlbnQtYXJlYSJdLFsiY2xhc3MiLCJsb2FkaW5nU3Bpbm5lciIsNCwibmdJZiJdLFs0LCJuZ0lmIl0sWzEsInNlYXJjaC1ub2RlIl0sWzEsInRyZWUtc2VhcmNoLXdyYXBwZXIiXSxbImFwcFN0ZWFsRm9jdXMiLCIiLCJjbHJJbnB1dCIsIiIsInBs'@;
put 'YWNlaG9sZGVyIiwiRmlsdGVyIGJ5IFVzZXJzIiwibmFtZSIsImlucHV0IiwiYXV0b2NvbXBsZXRlIiwib2ZmIiwzLCJuZ01vZGVsQ2hhbmdlIiwia2V5dXAiLCJuZ01vZGVsIl0sWyJzaGFwZSIsInNlYXJjaCIsNCwibmdJZiJdLFsic2hhcGUiLCJ0aW1lcyIsMywiY2xpY2siLDQsIm5nSWYi'@;
put 'XSxbInNoYXBlIiwic2VhcmNoIl0sWyJzaGFwZSIsInRpbWVzIiwzLCJjbGljayJdLFszLCJhY3RpdmUiLCJjbGljayIsNCwibmdJZiJdLFszLCJjbGljayJdLFsxLCJtLTAiLCJjdXJzb3ItcG9pbnRlciIsImxpc3QtcGFkZGluZyJdLFsic2hhcGUiLCJ1c2VyIl0sWzEsImxvYWRpbmdTcGlu'@;
put 'bmVyIl0sWzEsInNwaW5uZXIiXSxbImNsYXNzIiwiY2xyLXJvdyIsNCwibmdJZiJdLFsxLCJjbHItcm93Il0sWzEsImNsci1jb2wtOCJdLFsxLCJjYXJkIiwidXNlci1kYXRhIl0sWzEsInRhYmxlLWNvbnRhaW5lciJdLFsiY2xhc3MiLCJ0YWJsZSB1c2VyLXRhYmxlIiw0LCJuZ0lmIl0sWzEs'@;
put 'InRhYmxlIiwidXNlci1pbmZvIl0sWzEsImxlZnQiXSxbMSwidXNlci1pbmZvLXRleHQiXSxbMSwidGFibGUiLCJ1c2VyLXRhYmxlIl0sWzEsIndpZHRoLTUwIl0sWzEsIiJdLFsicm91dGVyTGlua0FjdGl2ZSIsImFjdGl2ZSIsImNsYXNzIiwiIiwzLCJyb3V0ZXJMaW5rIiw0LCJuZ0lmIl0s'@;
put 'WyJyb3V0ZXJMaW5rQWN0aXZlIiwiYWN0aXZlIiwxLCIiLDMsInJvdXRlckxpbmsiXSxbMywicm91dGVyTGluayJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihkLGgpezEmZCYmKGRlKDAsImFwcC1zaWRlYmFyIiwxKSgxLCJjbHItdHJlZSIpLGd0KDIsd0F0LDYsMywiY2xyLXRyZWUtbm9kZSIsMiko'@;
put 'MyxTQXQsMiwxLCJuZy1jb250YWluZXIiLDMpLGhlKCkoKSxkZSg0LCJkaXYiLDQpLGd0KDUsTUF0LDMsMCwiZGl2Iiw1KSg2LCRBdCwxOSwxMSwiZGl2Iiw2KSxoZSgpKSwyJmQmJihmZSgyKSxNZSgibmdJZiIsaC51c2VycyksZmUoKSxNZSgibmdGb3JPZiIsaC51c2VycyksZmUoMiksTWUo'@;
put 'Im5nSWYiLGgubG9hZGluZyksZmUoKSxNZSgibmdJZiIsaC51c2VyRGF0YSYmIWgubG9hZGluZykpfSxkZXBlbmRlbmNpZXM6W25zLGJhLGMxLHB5LHFsLG5sLCRzLEVoLFBkLEhsLFoxLGk0LHI0XSxlbmNhcHN1bGF0aW9uOjJ9KX19cmV0dXJuIGN9KSgpO2NvbnN0IEtBdD1jPT5bInNlZ21l'@;
put 'bnQiLGNdLHFBdD0oYyxsKT0+KHsic2VnbWVudC1tYWluIjohMCxleHBhbmRhYmxlOmMsZXhwYW5kZWQ6bH0pO2Z1bmN0aW9uIFhBdChjLGwpezEmYyYmR3QoMCwiZGl2Iiw5KX1mdW5jdGlvbiBKQXQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJzcGFuIiwxMCksRnQoImNsaWNr'@;
put 'IixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9UmUoKS4kaW1wbGljaXQ7cmV0dXJuIEN0KFJlKCkub25WYWx1ZUNsaWNrKGgpKX0pLExlKDEpLGhlKCl9aWYoMiZjKXtjb25zdCBhPVJlKCkuJGltcGxpY2l0O2ZlKCksd3IoYS5kZXNjcmlwdGlvbil9fWZ1bmN0aW9uIFFBdChjLGwpe2lmKDEm'@;
put 'Yyl7Y29uc3QgYT1MbigpO2RlKDAsInNlY3Rpb24iLDExKSgxLCJuZ3gtanNvbi12aWV3ZXIiLDEyKSxGdCgic2VnbWVudExpbmtDbGlja2VkIixmdW5jdGlvbihoKXtyZXR1cm4gd3QoYSksQ3QoUmUoMikub25TZWdtZW50TGlua0NsaWNrKGgpKX0pLGhlKCkoKX1pZigyJmMpe2NvbnN0IGE9'@;
put 'UmUoKS4kaW1wbGljaXQsZD1SZSgpO2ZlKCksTWUoImpzb24iLGEudmFsdWUpKCJleHBhbmRlZCIsZC5leHBhbmRlZCkoImRlcHRoIixkLmRlcHRoKSgiX2N1cnJlbnREZXB0aCIsZC5fY3VycmVudERlcHRoKzEpfX1mdW5jdGlvbiBla3QoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgw'@;
put 'LCJzZWN0aW9uIiwyKSgxLCJzZWN0aW9uIiwzKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7Y29uc3QgaD13dChhKS4kaW1wbGljaXQ7cmV0dXJuIEN0KFJlKCkudG9nZ2xlKGgpKX0pLGd0KDIsWEF0LDEsMCwiZGl2Iiw0KSxkZSgzLCJzcGFuIiw1KSxMZSg0KSxoZSgpLGRlKDUsInNwYW4iLDYp'@;
put 'LExlKDYsIjogIiksaGUoKSxndCg3LEpBdCwyLDEsInNwYW4iLDcpLGhlKCksZ3QoOCxRQXQsMiw0LCJzZWN0aW9uIiw4KSxoZSgpfWlmKDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdCxkPVJlKCk7TWUoIm5nQ2xhc3MiLHNwKDYsS0F0LCJzZWdtZW50LXR5cGUtIithLnR5cGUpKSxmZSgpLE1l'@;
put 'KCJuZ0NsYXNzIixscCg4LHFBdCxkLmlzRXhwYW5kYWJsZShhKSxhLmV4cGFuZGVkKSksZmUoKSxNZSgibmdJZiIsZC5pc0V4cGFuZGFibGUoYSkpLGZlKDIpLHdyKGEua2V5KSxmZSgzKSxNZSgibmdJZiIsIWEuZXhwYW5kZWR8fCFkLmlzRXhwYW5kYWJsZShhKSksZmUoKSxNZSgibmdJZiIs'@;
put 'YS5leHBhbmRlZCYmZC5pc0V4cGFuZGFibGUoYSkpfX1sZXQgdGt0PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLmV4cGFuZGVkPSEwLHRoaXMuZGVwdGg9LTEsdGhpcy5fY3VycmVudERlcHRoPTAsdGhpcy5zZWdtZW50TGlua0NsaWNrZWQ9bmV3IEtyLHRoaXMuc2VnbWVudHM9'@;
put 'W119bmdPbkNoYW5nZXMoKXt0aGlzLnNlZ21lbnRzPVtdLHRoaXMuanNvbj10aGlzLmRlY3ljbGUodGhpcy5qc29uKSwib2JqZWN0Ij09dHlwZW9mIHRoaXMuanNvbj9PYmplY3Qua2V5cyh0aGlzLmpzb24pLmZvckVhY2goYT0+e3RoaXMuc2VnbWVudHMucHVzaCh0aGlzLnBhcnNlS2V5VmFs'@;
put 'dWUoYSx0aGlzLmpzb25bYV0pKX0pOnRoaXMuc2VnbWVudHMucHVzaCh0aGlzLnBhcnNlS2V5VmFsdWUoYCgke3R5cGVvZiB0aGlzLmpzb259KWAsdGhpcy5qc29uKSl9aXNFeHBhbmRhYmxlKGEpe3JldHVybiJvYmplY3QiPT09YS50eXBlfHwiYXJyYXkiPT09YS50eXBlfXRvZ2dsZShhKXt0'@;
put 'aGlzLmlzRXhwYW5kYWJsZShhKSYmKGEuZXhwYW5kZWQ9IWEuZXhwYW5kZWQpfW9uVmFsdWVDbGljayhhKXsibGluayI9PT1hLnR5cGUmJnRoaXMuc2VnbWVudExpbmtDbGlja2VkLmVtaXQoYS52YWx1ZSl9b25TZWdtZW50TGlua0NsaWNrKGEpe3RoaXMuc2VnbWVudExpbmtDbGlja2VkLmVt'@;
put 'aXQoYSl9cGFyc2VLZXlWYWx1ZShhLGQpe2NvbnN0IGg9e2tleTphLHZhbHVlOmQsdHlwZTp2b2lkIDAsZGVzY3JpcHRpb246IiIrZCxleHBhbmRlZDp0aGlzLmlzRXhwYW5kZWQoKX07c3dpdGNoKHR5cGVvZiBoLnZhbHVlKXtjYXNlIm51bWJlciI6aC50eXBlPSJudW1iZXIiO2JyZWFrO2Nh'@;
put 'c2UiYm9vbGVhbiI6aC50eXBlPSJib29sZWFuIjticmVhaztjYXNlImZ1bmN0aW9uIjpoLnR5cGU9ImZ1bmN0aW9uIjticmVhaztjYXNlInN0cmluZyI6aWYodGhpcy5pc0xpbmsoaC52YWx1ZSkpe2gudHlwZT0ibGluayI7YnJlYWt9aC50eXBlPSJzdHJpbmciLGguZGVzY3JpcHRpb249JyIn'@;
put 'K2gudmFsdWUrJyInO2JyZWFrO2Nhc2UidW5kZWZpbmVkIjpoLnR5cGU9InVuZGVmaW5lZCIsaC5kZXNjcmlwdGlvbj0idW5kZWZpbmVkIjticmVhaztjYXNlIm9iamVjdCI6bnVsbD09PWgudmFsdWU/KGgudHlwZT0ibnVsbCIsaC5kZXNjcmlwdGlvbj0ibnVsbCIpOkFycmF5LmlzQXJyYXko'@;
put 'aC52YWx1ZSk/KGgudHlwZT0iYXJyYXkiLGguZGVzY3JpcHRpb249IkFycmF5WyIraC52YWx1ZS5sZW5ndGgrIl0gIitKU09OLnN0cmluZ2lmeShoLnZhbHVlKSk6aC52YWx1ZSBpbnN0YW5jZW9mIERhdGU/aC50eXBlPSJkYXRlIjooaC50eXBlPSJvYmplY3QiLGguZGVzY3JpcHRpb249Ik9i'@;
put 'amVjdCAiK0pTT04uc3RyaW5naWZ5KGgudmFsdWUpKX1yZXR1cm4gaH1pc0xpbmsoYSl7cmV0dXJuImh0dHBzOi8vIj09PWEuc3Vic3RyaW5nKDAsOCl8fCJodHRwOi8vIj09PWEuc3Vic3RyaW5nKDAsNyl8fCIvIj09PWFbMF19aXNFeHBhbmRlZCgpe3JldHVybiB0aGlzLmV4cGFuZGVkJiYh'@;
put 'KHRoaXMuZGVwdGg+LTEmJnRoaXMuX2N1cnJlbnREZXB0aD49dGhpcy5kZXB0aCl9ZGVjeWNsZShhKXtjb25zdCBkPW5ldyBXZWFrTWFwO3JldHVybiBmdW5jdGlvbiBoKGYsdil7bGV0IE0sRDtyZXR1cm4ib2JqZWN0IiE9dHlwZW9mIGZ8fG51bGw9PT1mfHxmIGluc3RhbmNlb2YgQm9vbGVh'@;
put 'bnx8ZiBpbnN0YW5jZW9mIERhdGV8fGYgaW5zdGFuY2VvZiBOdW1iZXJ8fGYgaW5zdGFuY2VvZiBSZWdFeHB8fGYgaW5zdGFuY2VvZiBTdHJpbmc/ZjooTT1kLmdldChmKSx2b2lkIDAhPT1NP3skcmVmOk19OihkLnNldChmLHYpLEFycmF5LmlzQXJyYXkoZik/KEQ9W10sZi5mb3JFYWNoKGZ1'@;
put 'bmN0aW9uKFoscmUpe0RbcmVdPWgoWix2KyJbIityZSsiXSIpfSkpOihEPXt9LE9iamVjdC5rZXlzKGYpLmZvckVhY2goZnVuY3Rpb24oWil7RFtaXT1oKGZbWl0sdisiWyIrSlNPTi5zdHJpbmdpZnkoWikrIl0iKX0pKSxEKSl9KGEsIiQiKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9u'@;
put 'KGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1Y21wPVZyKHt0eXBlOmMsc2VsZWN0b3JzOltbIm5neC1qc29uLXZpZXdlciJdXSxpbnB1dHM6e2pzb246Impzb24iLGV4cGFuZGVkOiJleHBhbmRlZCIsZGVwdGg6ImRlcHRoIixfY3VycmVudERlcHRoOiJfY3VycmVudERlcHRoIn0sb3V0'@;
put 'cHV0czp7c2VnbWVudExpbmtDbGlja2VkOiJzZWdtZW50TGlua0NsaWNrZWQifSxmZWF0dXJlczpbd2xdLGRlY2xzOjIsdmFyczoxLGNvbnN0czpbWzEsIm5neC1qc29uLXZpZXdlciJdLFszLCJuZ0NsYXNzIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMywibmdDbGFzcyJdLFszLCJjbGljayIs'@;
put 'Im5nQ2xhc3MiXSxbImNsYXNzIiwidG9nZ2xlciIsNCwibmdJZiJdLFsxLCJzZWdtZW50LWtleSJdLFsxLCJzZWdtZW50LXNlcGFyYXRvciJdLFsiY2xhc3MiLCJzZWdtZW50LXZhbHVlIiwzLCJjbGljayIsNCwibmdJZiJdLFsiY2xhc3MiLCJjaGlsZHJlbiIsNCwibmdJZiJdLFsxLCJ0b2dn'@;
put 'bGVyIl0sWzEsInNlZ21lbnQtdmFsdWUiLDMsImNsaWNrIl0sWzEsImNoaWxkcmVuIl0sWzMsInNlZ21lbnRMaW5rQ2xpY2tlZCIsImpzb24iLCJleHBhbmRlZCIsImRlcHRoIiwiX2N1cnJlbnREZXB0aCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKGRlKDAsInNlY3Rpb24iLDAp'@;
put 'LGd0KDEsZWt0LDksMTEsInNlY3Rpb24iLDEpLGhlKCkpLDImYSYmKGZlKCksTWUoIm5nRm9yT2YiLGQuc2VnbWVudHMpKX0sZGVwZW5kZW5jaWVzOlt3dSxucyxiYSxjXSxzdHlsZXM6WydAY2hhcnNldCAiVVRGLTgiOy5uZ3gtanNvbi12aWV3ZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQt'@;
put 'ZmFtaWx5OnZhcigtLW5neC1qc29uLWZvbnQtZmFtaWx5LCBtb25vc3BhY2UpO2ZvbnQtc2l6ZTp2YXIoLS1uZ3gtanNvbi1mb250LXNpemUsIDFlbSk7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtvdmVyZmxvdzpoaWRkZW47cG9zaXRpb246cmVsYXRpdmV9Lm5neC1qc29uLXZpZXdlcltfbmdj'@;
put 'b250ZW50LSVDT01QJV0gICAuc2VnbWVudFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzoycHg7bWFyZ2luOjFweCAxcHggMXB4IDEycHh9Lm5neC1qc29uLXZpZXdlcltfbmdjb250ZW50LSVDT01QJV0gICAuc2VnbWVudFtfbmdjb250ZW50LSVDT01QJV0gICAuc2VnbWVudC1tYWluW19u'@;
put 'Z2NvbnRlbnQtJUNPTVAlXXt3b3JkLXdyYXA6YnJlYWstd29yZH0ubmd4LWpzb24tdmlld2VyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zZWdtZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zZWdtZW50LW1haW5bX25nY29udGVudC0lQ09NUCVdICAgLnRvZ2dsZXJbX25nY29udGVudC0lQ09N'@;
put 'UCVde3Bvc2l0aW9uOmFic29sdXRlO21hcmdpbi1sZWZ0Oi0xNHB4O21hcmdpbi10b3A6M3B4O2ZvbnQtc2l6ZTouOGVtO2xpbmUtaGVpZ2h0OjEuMmVtO3ZlcnRpY2FsLWFsaWduOm1pZGRsZTtjb2xvcjp2YXIoLS1uZ3gtanNvbi10b2dnbGVyLCAjNzg3ODc4KX0ubmd4LWpzb24tdmlld2Vy'@;
put 'W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zZWdtZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zZWdtZW50LW1haW5bX25nY29udGVudC0lQ09NUCVdICAgLnRvZ2dsZXJbX25nY29udGVudC0lQ09NUCVdOmFmdGVye2Rpc3BsYXk6aW5saW5lLWJsb2NrO2NvbnRlbnQ6IlxcMjViYSI7dHJhbnNp'@;
put 'dGlvbjp0cmFuc2Zvcm0gLjFzIGVhc2UtaW59Lm5neC1qc29uLXZpZXdlcltfbmdjb250ZW50LSVDT01QJV0gICAuc2VnbWVudFtfbmdjb250ZW50LSVDT01QJV0gICAuc2VnbWVudC1tYWluW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zZWdtZW50LWtleVtfbmdjb250ZW50LSVDT01QJV17Y29s'@;
put 'b3I6dmFyKC0tbmd4LWpzb24ta2V5LCAjNEUxODdDKX0ubmd4LWpzb24tdmlld2VyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zZWdtZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zZWdtZW50LW1haW5bX25nY29udGVudC0lQ09NUCVdICAgLnNlZ21lbnQtc2VwYXJhdG9yW19uZ2NvbnRlbnQt'@;
put 'JUNPTVAlXXtjb2xvcjp2YXIoLS1uZ3gtanNvbi1zZXBhcmF0b3IsICM5OTkpfS5uZ3gtanNvbi12aWV3ZXJbX25nY29udGVudC0lQ09NUCVdICAgLnNlZ21lbnRbX25nY29udGVudC0lQ09NUCVdICAgLnNlZ21lbnQtbWFpbltfbmdjb250ZW50LSVDT01QJV0gICAuc2VnbWVudC12YWx1ZVtf'@;
put 'bmdjb250ZW50LSVDT01QJV17Y29sb3I6dmFyKC0tbmd4LWpzb24tdmFsdWUsICMwMDApfS5uZ3gtanNvbi12aWV3ZXJbX25nY29udGVudC0lQ09NUCVdICAgLnNlZ21lbnRbX25nY29udGVudC0lQ09NUCVdICAgLmNoaWxkcmVuW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tbGVmdDoxMnB4'@;
put 'fS5uZ3gtanNvbi12aWV3ZXJbX25nY29udGVudC0lQ09NUCVdICAgLnNlZ21lbnQtdHlwZS1zdHJpbmdbX25nY29udGVudC0lQ09NUCVdID4gLnNlZ21lbnQtbWFpbltfbmdjb250ZW50LSVDT01QJV0gPiAuc2VnbWVudC12YWx1ZVtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6dmFyKC0tbmd4'@;
put 'LWpzb24tc3RyaW5nLCAjRkY2QjZCKX0ubmd4LWpzb24tdmlld2VyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zZWdtZW50LXR5cGUtbnVtYmVyW19uZ2NvbnRlbnQtJUNPTVAlXSA+IC5zZWdtZW50LW1haW5bX25nY29udGVudC0lQ09NUCVdID4gLnNlZ21lbnQtdmFsdWVbX25nY29udGVudC0l'@;
put 'Q09NUCVde2NvbG9yOnZhcigtLW5neC1qc29uLW51bWJlciwgIzAwOTY4OCl9Lm5neC1qc29uLXZpZXdlcltfbmdjb250ZW50LSVDT01QJV0gICAuc2VnbWVudC10eXBlLWJvb2xlYW5bX25nY29udGVudC0lQ09NUCVdID4gLnNlZ21lbnQtbWFpbltfbmdjb250ZW50LSVDT01QJV0gPiAuc2Vn'@;
put 'bWVudC12YWx1ZVtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6dmFyKC0tbmd4LWpzb24tYm9vbGVhbiwgI0I5MzhBNCl9Lm5neC1qc29uLXZpZXdlcltfbmdjb250ZW50LSVDT01QJV0gICAuc2VnbWVudC10eXBlLWRhdGVbX25nY29udGVudC0lQ09NUCVdID4gLnNlZ21lbnQtbWFpbltfbmdj'@;
put 'b250ZW50LSVDT01QJV0gPiAuc2VnbWVudC12YWx1ZVtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6dmFyKC0tbmd4LWpzb24tZGF0ZSwgIzA1NjY4RCl9Lm5neC1qc29uLXZpZXdlcltfbmdjb250ZW50LSVDT01QJV0gICAuc2VnbWVudC10eXBlLWFycmF5W19uZ2NvbnRlbnQtJUNPTVAlXSA+'@;
put 'IC5zZWdtZW50LW1haW5bX25nY29udGVudC0lQ09NUCVdID4gLnNlZ21lbnQtdmFsdWVbX25nY29udGVudC0lQ09NUCVde2NvbG9yOnZhcigtLW5neC1qc29uLWFycmF5LCAjOTk5KX0ubmd4LWpzb24tdmlld2VyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zZWdtZW50LXR5cGUtb2JqZWN0W19u'@;
put 'Z2NvbnRlbnQtJUNPTVAlXSA+IC5zZWdtZW50LW1haW5bX25nY29udGVudC0lQ09NUCVdID4gLnNlZ21lbnQtdmFsdWVbX25nY29udGVudC0lQ09NUCVde2NvbG9yOnZhcigtLW5neC1qc29uLW9iamVjdCwgIzk5OSl9Lm5neC1qc29uLXZpZXdlcltfbmdjb250ZW50LSVDT01QJV0gICAuc2Vn'@;
put 'bWVudC10eXBlLWZ1bmN0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXSA+IC5zZWdtZW50LW1haW5bX25nY29udGVudC0lQ09NUCVdID4gLnNlZ21lbnQtdmFsdWVbX25nY29udGVudC0lQ09NUCVde2NvbG9yOnZhcigtLW5neC1qc29uLWZ1bmN0aW9uLCAjOTk5KX0ubmd4LWpzb24tdmlld2VyW19u'@;
put 'Z2NvbnRlbnQtJUNPTVAlXSAgIC5zZWdtZW50LXR5cGUtbGlua1tfbmdjb250ZW50LSVDT01QJV0gPiAuc2VnbWVudC1tYWluW19uZ2NvbnRlbnQtJUNPTVAlXSA+IC5zZWdtZW50LXZhbHVlW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjp2YXIoLS1uZ3gtanNvbi1saW5rLCAjOUI1OUI2KX0u'@;
put 'bmd4LWpzb24tdmlld2VyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zZWdtZW50LXR5cGUtbnVsbFtfbmdjb250ZW50LSVDT01QJV0gPiAuc2VnbWVudC1tYWluW19uZ2NvbnRlbnQtJUNPTVAlXSA+IC5zZWdtZW50LXZhbHVlW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjp2YXIoLS1uZ3gtanNv'@;
put 'bi1udWxsLCAjZmZmKX0ubmd4LWpzb24tdmlld2VyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zZWdtZW50LXR5cGUtdW5kZWZpbmVkW19uZ2NvbnRlbnQtJUNPTVAlXSA+IC5zZWdtZW50LW1haW5bX25nY29udGVudC0lQ09NUCVdID4gLnNlZ21lbnQtdmFsdWVbX25nY29udGVudC0lQ09NUCVd'@;
put 'e2NvbG9yOnZhcigtLW5neC1qc29uLXVuZGVmaW5lZCwgI2ZmZil9Lm5neC1qc29uLXZpZXdlcltfbmdjb250ZW50LSVDT01QJV0gICAuc2VnbWVudC10eXBlLW51bGxbX25nY29udGVudC0lQ09NUCVdID4gLnNlZ21lbnQtbWFpbltfbmdjb250ZW50LSVDT01QJV0gPiAuc2VnbWVudC12YWx1'@;
put 'ZVtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1uZ3gtanNvbi1udWxsLWJnLCByZWQpfS5uZ3gtanNvbi12aWV3ZXJbX25nY29udGVudC0lQ09NUCVdICAgLnNlZ21lbnQtdHlwZS11bmRlZmluZWRbX25nY29udGVudC0lQ09NUCVdID4gLnNlZ21lbnQtbWFpbltf'@;
put 'bmdjb250ZW50LSVDT01QJV0gPiAuc2VnbWVudC1rZXlbX25nY29udGVudC0lQ09NUCVde2NvbG9yOnZhcigtLW5neC1qc29uLXVuZGVmaW5lZC1rZXksICM5OTkpfS5uZ3gtanNvbi12aWV3ZXJbX25nY29udGVudC0lQ09NUCVdICAgLnNlZ21lbnQtdHlwZS11bmRlZmluZWRbX25nY29udGVu'@;
put 'dC0lQ09NUCVdID4gLnNlZ21lbnQtbWFpbltfbmdjb250ZW50LSVDT01QJV0gPiAuc2VnbWVudC12YWx1ZVtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1uZ3gtanNvbi11bmRlZmluZWQta2V5LCAjOTk5KX0ubmd4LWpzb24tdmlld2VyW19uZ2NvbnRlbnQtJUNP'@;
put 'TVAlXSAgIC5zZWdtZW50LXR5cGUtbGlua1tfbmdjb250ZW50LSVDT01QJV0gPiAuc2VnbWVudC1tYWluW19uZ2NvbnRlbnQtJUNPTVAlXSA+IC5zZWdtZW50LXZhbHVlW19uZ2NvbnRlbnQtJUNPTVAlXXt0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lO2N1cnNvcjpwb2ludGVyfS5uZ3gtanNv'@;
put 'bi12aWV3ZXJbX25nY29udGVudC0lQ09NUCVdICAgLnNlZ21lbnQtdHlwZS1vYmplY3RbX25nY29udGVudC0lQ09NUCVdID4gLnNlZ21lbnQtbWFpbltfbmdjb250ZW50LSVDT01QJV0sIC5uZ3gtanNvbi12aWV3ZXJbX25nY29udGVudC0lQ09NUCVdICAgLnNlZ21lbnQtdHlwZS1hcnJheVtf'@;
put 'bmdjb250ZW50LSVDT01QJV0gPiAuc2VnbWVudC1tYWluW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXB9Lm5neC1qc29uLXZpZXdlcltfbmdjb250ZW50LSVDT01QJV0gICAuZXhwYW5kZWRbX25nY29udGVudC0lQ09NUCVdID4gLnRvZ2dsZXJbX25nY29udGVudC0lQ09N'@;
put 'UCVdOmFmdGVye3RyYW5zZm9ybTpyb3RhdGUoOTBkZWcpfS5uZ3gtanNvbi12aWV3ZXJbX25nY29udGVudC0lQ09NUCVdICAgLmV4cGFuZGFibGVbX25nY29udGVudC0lQ09NUCVdLCAubmd4LWpzb24tdmlld2VyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5leHBhbmRhYmxlW19uZ2NvbnRlbnQt'@;
put 'JUNPTVAlXSA+IC50b2dnbGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtjdXJzb3I6cG9pbnRlcn0nXX0pLGN9KSgpLG5rdD0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9a2koe3R5cGU6Y30pLGMuXHUwMjc1'@;
put 'aW5qPUFyKHtpbXBvcnRzOltSYV19KSxjfSkoKSxya3Q9KCgpPT57Y2xhc3MgY3t0cmFuc2Zvcm0oYSl7aWYoIWEuaW5jbHVkZXMoIi8iKSlyZXR1cm4gYTtsZXQgZD0iIjtjb25zdCBoPWEuc3BsaXQoIi8iKTtmb3IobGV0IGY9MDtmPGgubGVuZ3RoO2YrKylpZigiIiE9PWhbZl0pe2NvbnN0'@;
put 'IHY9aFtmXTtkKz0iLyIrdixoW2ZdPWA8YSBocmVmPSR7ZH0+JHt2fTwvYT5gfXJldHVybiBoLmpvaW4oIi8iKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1cGlwZT1sbCh7bmFtZToibGlua2luemUiLHR5cGU6'@;
put 'YyxwdXJlOiEwfSl9fXJldHVybiBjfSkoKSxpa3Q9KCgpPT57Y2xhc3MgY3t0cmFuc2Zvcm0oYSl7cmV0dXJuIEpTT04uc3RyaW5naWZ5KGEsbnVsbCwyKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1cGlwZT1s'@;
put 'bCh7bmFtZToicHJldHR5anNvbiIsdHlwZTpjLHB1cmU6ITB9KX19cmV0dXJuIGN9KSgpO2Z1bmN0aW9uIGFrdChjLGwpe2lmKDEmYyYmKGRlKDAsIm9wdGlvbiIsMjQpLExlKDEpLGhlKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtmTSgidmFsdWUiLGEudmFsdWUpLGZlKCksRHIoIiAi'@;
put 'LGEua2V5LCIgIil9fWZ1bmN0aW9uIG9rdChjLGwpe2lmKDEmYyYmKGRlKDAsIm9wdGdyb3VwIiwyMiksZ3QoMSxha3QsMiwyLCJvcHRpb24iLDIzKSxlbCgyLCJrZXl2YWx1ZSIpLGhlKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdCxkPVJlKCk7TWUoImxhYmVsIixhLmtleSksZmUoKSxN'@;
put 'ZSgibmdGb3JPZiIsRGMoMiwyLGQuY29sbGVjdGlvbnNbYS5rZXldKSl9fWZ1bmN0aW9uIHNrdChjLGwpezEmYyYmKGRlKDAsInAiLDI1KSxMZSgxLCIgU2VsZWN0IGNvbGxlY3Rpb24gdG8gc3RhcnQgIiksaGUoKSl9ZnVuY3Rpb24gbGt0KGMsbCl7MSZjJiZHdCgwLCJjbHItc3Bpbm5lciIs'@;
put 'MjYpfWZ1bmN0aW9uIGNrdChjLGwpezEmYyYmR3QoMCwiY2xyLWljb24iLDMyKX1mdW5jdGlvbiB1a3QoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJjbHItaWNvbiIsMzMpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPVJlKDIpO3JldHVybiBoLmxpbmtzU2Vh'@;
put 'cmNoPSIiLEN0KGgubGlua3NMaXN0T25GaWx0ZXIoKSl9KSxoZSgpfX1mdW5jdGlvbiBka3QoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJjbHItdHJlZS1ub2RlIiwyNykoMSwiZGl2IiwyOCkoMiwiaW5wdXQiLDI5LDApLGdpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXt3'@;
put 'dChhKTtjb25zdCBmPVJlKCk7cmV0dXJuIG1pKGYubGlua3NTZWFyY2gsaCl8fChmLmxpbmtzU2VhcmNoPWgpLEN0KGgpfSksRnQoImtleXVwIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChSZSgpLmxpbmtzTGlzdE9uRmlsdGVyKCkpfSksaGUoKSxndCg0LGNrdCwxLDAsImNsci1pY29u'@;
put 'IiwzMCkoNSx1a3QsMSwwLCJjbHItaWNvbiIsMzEpLGhlKCkoKX1pZigyJmMpe2NvbnN0IGE9aGEoMyksZD1SZSgpO2ZlKDIpLHBpKCJuZ01vZGVsIixkLmxpbmtzU2VhcmNoKSxmZSgyKSxNZSgibmdJZiIsYS52YWx1ZS5sZW5ndGg8MSksZmUoKSxNZSgibmdJZiIsYS52YWx1ZS5sZW5ndGg+'@;
put 'MCl9fWZ1bmN0aW9uIGhrdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImNsci10cmVlLW5vZGUiLDM1KSxGdCgiY2xpY2siLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9UmUoKS4kaW1wbGljaXQsdj1SZSgpO3JldHVybiBDdCh2LnRyZWVOb2RlQ2xpY2tlZChoLGYsdi5lbmRw'@;
put 'b2ludExpbmtzKSl9KSxnaSgiY2xyRXhwYW5kZWRDaGFuZ2UiLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9UmUoKS4kaW1wbGljaXQ7cmV0dXJuIG1pKGYuZXhwYW5kZWQsaCl8fChmLmV4cGFuZGVkPWgpLEN0KGgpfSksZGUoMSwicCIsMzYpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXt3dChh'@;
put 'KTtjb25zdCBoPVJlKCkuJGltcGxpY2l0O3JldHVybiBDdChSZSgpLmxpbmtPbkNsaWNrKGgpKX0pLEd0KDIsImNsci1pY29uIiwzNyksTGUoMyksaGUoKSgpfWlmKDImYyl7Y29uc3QgYT1SZSgpLiRpbXBsaWNpdDtwaSgiY2xyRXhwYW5kZWQiLGEuZXhwYW5kZWQpLE1lKCJjbHJMb2FkaW5n'@;
put 'IiwhIWEubG9hZGluZ1RhYmxlcyYmIWEudGFibGVzKSxmZSgzKSxVdSgiICIsYS5tZXRob2QsIiAiLGEucmVsLCIgIil9fWZ1bmN0aW9uIGZrdChjLGwpe2lmKDEmYyYmKHNpKDApLGd0KDEsaGt0LDQsNCwiY2xyLXRyZWUtbm9kZSIsMzQpLGxpKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNp'@;
put 'dDtmZSgpLE1lKCJuZ0lmIiwhYS5oaWRkZW4pfX1mdW5jdGlvbiBwa3QoYyxsKXsxJmMmJkd0KDAsImNsci1pY29uIiwzMil9ZnVuY3Rpb24gZ2t0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiY2xyLWljb24iLDMzKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3Qg'@;
put 'aD1SZSgyKTtyZXR1cm4gaC5pdGVtc1NlYXJjaD0iIixDdChoLml0ZW1zTGlzdE9uRmlsdGVyKCkpfSksaGUoKX19ZnVuY3Rpb24gbWt0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiY2xyLXRyZWUtbm9kZSIsMjcpKDEsImRpdiIsMjgpKDIsImlucHV0IiwzOCwxKSxnaSgibmdN'@;
put 'b2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1SZSgpO3JldHVybiBtaShmLml0ZW1zU2VhcmNoLGgpfHwoZi5pdGVtc1NlYXJjaD1oKSxDdChoKX0pLEZ0KCJrZXl1cCIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoUmUoKS5pdGVtc0xpc3RPbkZpbHRlcigpKX0pLGhl'@;
put 'KCksZ3QoNCxwa3QsMSwwLCJjbHItaWNvbiIsMzApKDUsZ2t0LDEsMCwiY2xyLWljb24iLDMxKSxoZSgpKCl9aWYoMiZjKXtjb25zdCBhPWhhKDMpLGQ9UmUoKTtmZSgyKSxwaSgibmdNb2RlbCIsZC5pdGVtc1NlYXJjaCksZmUoMiksTWUoIm5nSWYiLGEudmFsdWUubGVuZ3RoPDEpLGZlKCks'@;
put 'TWUoIm5nSWYiLGEudmFsdWUubGVuZ3RoPjApfX1mdW5jdGlvbiB2a3QoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJjbHItdHJlZS1ub2RlIiwzNSksRnQoImNsaWNrIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPVJlKCkuJGltcGxpY2l0LHY9UmUoKTtyZXR1cm4gQ3Qodi50'@;
put 'cmVlTm9kZUNsaWNrZWQoaCxmLHYuZW5kcG9pbnRJdGVtcykpfSksZ2koImNsckV4cGFuZGVkQ2hhbmdlIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPVJlKCkuJGltcGxpY2l0O3JldHVybiBtaShmLmV4cGFuZGVkLGgpfHwoZi5leHBhbmRlZD1oKSxDdChoKX0pLGRlKDEsInAiLDM2KSxG'@;
put 'dCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1SZSgpLiRpbXBsaWNpdDtyZXR1cm4gQ3QoUmUoKS5pdGVtT25DbGljayhoKSl9KSxHdCgyLCJjbHItaWNvbiIsMzcpLExlKDMpLGhlKCkoKX1pZigyJmMpe2NvbnN0IGE9UmUoKS4kaW1wbGljaXQ7cGkoImNsckV4cGFuZGVkIixh'@;
put 'LmV4cGFuZGVkKSxNZSgiY2xyTG9hZGluZyIsISFhLmxvYWRpbmdUYWJsZXMmJiFhLnRhYmxlcyksZmUoMyksRHIoIiAiLGEubmFtZXx8YS5pZCwiICIpfX1mdW5jdGlvbiBia3QoYyxsKXtpZigxJmMmJihzaSgwKSxndCgxLHZrdCw0LDMsImNsci10cmVlLW5vZGUiLDM0KSxsaSgpKSwyJmMp'@;
put 'e2NvbnN0IGE9bC4kaW1wbGljaXQ7ZmUoKSxNZSgibmdJZiIsIWEuaGlkZGVuKX19ZnVuY3Rpb24geWt0KGMsbCl7MSZjJiZHdCgwLCJjbHItc3Bpbm5lciIsMzkpfWZ1bmN0aW9uIF9rdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsIm5neC1qc29uLXZpZXdlciIsNDkpLEZ0KCJz'@;
put 'ZWdtZW50TGlua0NsaWNrZWQiLGZ1bmN0aW9uKGgpe3JldHVybiB3dChhKSxDdChSZSgzKS5vbkpzb25MaW5rQ2xpY2soaCkpfSksaGUoKX0yJmMmJk1lKCJqc29uIixSZSgzKS5lbmRwb2ludEpzb24pKCJleHBhbmRlZCIsITEpfWZ1bmN0aW9uIHdrdChjLGwpe2lmKDEmYyYmKHNpKDApLExl'@;
put 'KDEpLGVsKDIsInByZXR0eWpzb24iKSxsaSgpKSwyJmMpe2NvbnN0IGE9UmUoMyk7ZmUoKSxEcigiXG4gICAgICAgICAgICAiLERjKDIsMSxhLmVuZHBvaW50SnNvbiksIlxuICAgICAgICAgICIpfX1mdW5jdGlvbiBDa3QoYyxsKXtpZigxJmMmJihzaSgwKSxMZSgxLCJcbiAgICAgICAgICAi'@;
put 'KSxndCgyLF9rdCwxLDIsIm5neC1qc29uLXZpZXdlciIsNDgpLExlKDMsIlxuICAgICAgICAgICIpLGd0KDQsd2t0LDMsMywibmctY29udGFpbmVyIiwyMSksTGUoNSwiXG4gICAgICAgICIpLGxpKCkpLDImYyl7Y29uc3QgYT1SZSgyKTtmZSgyKSxNZSgibmdJZiIsIWEucmF3SnNvbiksZmUo'@;
put 'MiksTWUoIm5nSWYiLGEucmF3SnNvbil9fWZ1bmN0aW9uIFNrdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO3NpKDApLGRlKDEsImRpdiIsNDApKDIsInNwYW4iLDQxKSxMZSgzLCIgR0VUICIpLGRlKDQsInAiLDQyKSxlbCg1LCJsaW5raW56ZSIpLEZ0KCJjbGljayIsZnVuY3Rpb24oaCl7'@;
put 'cmV0dXJuIHd0KGEpLEN0KFJlKCkub25CcmVhZGN1bXNDbGljayhoKSl9KSxoZSgpLGRlKDYsImJ1dHRvbiIsMTYpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoUmUoKS5jb3B5QnJlYWRjcnVtcygpKX0pLEd0KDcsImNsci1pY29uIiwxNyksaGUoKSgpLGRlKDgsImRp'@;
put 'diIsNDMpKDksImNsci1pbnB1dC1jb250YWluZXIiLDE0KSgxMCwibGFiZWwiKSxMZSgxMSwiU3RhcnQiKSxoZSgpLGRlKDEyLCJpbnB1dCIsNDQpLGdpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPVJlKCk7cmV0dXJuIG1pKGYuZW5kcG9pbnQuc3RhcnQsaCl8'@;
put 'fChmLmVuZHBvaW50LnN0YXJ0PWgpLEN0KGgpfSksaGUoKSgpLGRlKDEzLCJjbHItaW5wdXQtY29udGFpbmVyIiwxNCkoMTQsImxhYmVsIiksTGUoMTUsIkxpbWl0IiksaGUoKSxkZSgxNiwiaW5wdXQiLDQ0KSxnaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1S'@;
put 'ZSgpO3JldHVybiBtaShmLmVuZHBvaW50LmxpbWl0LGgpfHwoZi5lbmRwb2ludC5saW1pdD1oKSxDdChoKX0pLGhlKCkoKSxkZSgxNywiYnV0dG9uIiw0NSksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChSZSgpLmFwcGx5UXVlcnlQYXJhbXMoKSl9KSxHdCgxOCwiY2xy'@;
put 'LWljb24iLDQ2KSxoZSgpKCkoKSxkZSgxOSwicHJlIiw0NyksTGUoMjAsIiAgICAgICAgIiksZ3QoMjEsQ2t0LDYsMiwibmctY29udGFpbmVyIiwyMSksTGUoMjIsIlxuICAgICAgIiksaGUoKSxsaSgpfWlmKDImYyl7Y29uc3QgYT1SZSgpO2ZlKDQpLE1lKCJpbm5lckhUTUwiLERjKDUsNyxh'@;
put 'LmVuZHBvaW50LnVybCksVjQpLGZlKDgpLHBpKCJuZ01vZGVsIixhLmVuZHBvaW50LnN0YXJ0KSxNZSgiZGlzYWJsZWQiLHZvaWQgMD09PWEuZW5kcG9pbnQuc3RhcnQpLGZlKDQpLHBpKCJuZ01vZGVsIixhLmVuZHBvaW50LmxpbWl0KSxNZSgiZGlzYWJsZWQiLHZvaWQgMD09PWEuZW5kcG9p'@;
put 'bnQubGltaXQpLGZlKCksTWUoImRpc2FibGVkIix2b2lkIDA9PT1hLmVuZHBvaW50LmxpbWl0JiZ2b2lkIDA9PT1hLmVuZHBvaW50LnN0YXJ0KSxmZSg0KSxNZSgibmdJZiIsYS5lbmRwb2ludEpzb24pfX1sZXQgTWt0PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZil7dGhpcy5o'@;
put 'ZWxwZXJTZXJ2aWNlPWEsdGhpcy5zYXNWaXlhU2VydmljZT1kLHRoaXMuc2FzU2VydmljZT1oLHRoaXMuZXZlbnRTZXJ2aWNlPWYsdGhpcy5jb2xsZWN0aW9ucz17fSx0aGlzLmNvbGxlY3Rpb249IiIsdGhpcy5lbmRwb2ludExpbmtzPVtdLHRoaXMuZW5kcG9pbnRJdGVtcz1bXSx0aGlzLmVu'@;
put 'ZHBvaW50PXt1cmw6IiIsc3RhcnQ6LTEsbGltaXQ6LTF9LHRoaXMuZW5kcG9pbnRMb2FkaW5nPSExLHRoaXMuY29sbGVjdGlvbkxvYWRpbmc9ITEsdGhpcy5yYXdKc29uPSExLHRoaXMubGlua3NTZWFyY2g9IiIsdGhpcy5pdGVtc1NlYXJjaD0iIix0aGlzLnNhc2pzQ29uZmlnPW5ldyBtaC5T'@;
put 'QVNqc0NvbmZpZ31uZ09uSW5pdCgpe3RoaXMuc2FzanNDb25maWc9dGhpcy5zYXNTZXJ2aWNlLmdldFNhc2pzQ29uZmlnKCksdGhpcy5jb2xsZWN0aW9ucz10aGlzLnNhc1ZpeWFTZXJ2aWNlLmdldEFsbENvbGxlY3Rpb25zKCl9bGlua3NMaXN0T25GaWx0ZXIoKXt0aGlzLmhlbHBlclNlcnZp'@;
put 'Y2UubGlicmFyeU9uRmlsdGVyKHRoaXMuZW5kcG9pbnRMaW5rcyx0aGlzLmxpbmtzU2VhcmNoLCJyZWwiKSxLbi52aXlhQXBpLmxpbmtzc1NlYXJjaD10aGlzLmxpbmtzU2VhcmNofWl0ZW1zTGlzdE9uRmlsdGVyKCl7dGhpcy5oZWxwZXJTZXJ2aWNlLmxpYnJhcnlPbkZpbHRlcih0aGlzLmVu'@;
put 'ZHBvaW50SXRlbXMsdGhpcy5pdGVtc1NlYXJjaCwibmFtZSIpLEtuLnZpeWFBcGkuaXRlbXNTZWFyY2g9dGhpcy5pdGVtc1NlYXJjaH1saW5rT25DbGljayhhKXt0aGlzLmxvYWRVcmwoYS5ocmVmKX1pdGVtT25DbGljayhhKXt0aGlzLmxvYWRVcmwoYS5saW5rc1swXS5ocmVmKX10cmVlTm9k'@;
put 'ZUNsaWNrZWQoYSxkLGgpeyJDb2xsYXBzZSI9PT1hLnRhcmdldC50aXRsZSYmdGhpcy5jb2xsYXBzZVRyZWVJdGVtcyhoLGQpfWNvbGxhcHNlVHJlZUl0ZW1zKGEsZCl7YS5mb3JFYWNoKGg9PntKU09OLnN0cmluZ2lmeShoKSE9PUpTT04uc3RyaW5naWZ5KGQpJiYoaC5leHBhbmRlZD0hMSl9'@;
put 'KX11cGRhdGVTZWxlY3RlZENvbGxlY3Rpb24oKXtLbi52aXlhQXBpLnNlbGVjdGVkQ29sbGVjdGlvbj10aGlzLmNvbGxlY3Rpb24sdGhpcy5lbmRwb2ludC51cmw9dGhpcy5jb2xsZWN0aW9uLHRoaXMuY29sbGVjdGlvbkxvYWRpbmc9ITAsdGhpcy5zYXNWaXlhU2VydmljZS5nZXRCeUNvbGxl'@;
put 'Y3Rpb24odGhpcy5jb2xsZWN0aW9uKS5zdWJzY3JpYmUoYT0+e3RoaXMuZW5kcG9pbnRMaW5rcz1hLmxpbmtzLHRoaXMuZW5kcG9pbnRJdGVtcz1hLml0ZW1zP2EuaXRlbXM6W10sdGhpcy5jb2xsZWN0aW9uTG9hZGluZz0hMSx0aGlzLmVuZHBvaW50SnNvbj1hLHRoaXMuZW5kcG9pbnQuc3Rh'@;
put 'cnQ9YS5zdGFydCx0aGlzLmVuZHBvaW50LmxpbWl0PWEubGltaXR9LGE9Pnt0aGlzLmNvbGxlY3Rpb25Mb2FkaW5nPSExO2xldCBkPSJFcnJvciBvY2N1cnJlZCB3aGlsZSBzZW5kaW5nIHJlcXVlc3QiO2EubWVzc2FnZSYmKGQ9YS5tZXNzYWdlKSxhLmVycm9yJiYoYS5lcnJvci5tZXNzYWdl'@;
put 'JiYoZD1hLmVycm9yLm1lc3NhZ2UpLGEuZXJyb3IucmVtZWRpYXRpb24mJihkPWAke2R9XG4ke2EuZXJyb3IucmVtZWRpYXRpb259YCkpLHRoaXMuZXZlbnRTZXJ2aWNlLnNob3dBYm9ydE1vZGFsKG51bGwsZCxudWxsLCJIVFRQIEVycm9yIil9KX1vbkpzb25MaW5rQ2xpY2soYSl7dGhpcy5s'@;
put 'b2FkVXJsKGEpfW9uSnNvbkNsaWNrKGEpe2lmKGEucHJldmVudERlZmF1bHQoKSwiQSI9PT1hLnNyY0VsZW1lbnQudGFnTmFtZSl7Y29uc3QgZD1hLnNyY0VsZW1lbnQuaHJlZi5zcGxpdChhLnNyY0VsZW1lbnQuaG9zdClbMV07dGhpcy5sb2FkVXJsKGQpfX1vbkJyZWFkY3Vtc0NsaWNrKGEp'@;
put 'e2lmKGEucHJldmVudERlZmF1bHQoKSwhYS5zcmNFbGVtZW50LmhyZWYpcmV0dXJuO2NvbnN0IGQ9YS5zcmNFbGVtZW50LmhyZWYuc3BsaXQoYS5zcmNFbGVtZW50Lmhvc3QpWzFdO3RoaXMubG9hZFVybChkKX1jb3B5SnNvbigpe3RoaXMuZW5kcG9pbnRKc29uJiZuYXZpZ2F0b3IuY2xpcGJv'@;
put 'YXJkLndyaXRlVGV4dChKU09OLnN0cmluZ2lmeSh0aGlzLmVuZHBvaW50SnNvbixudWxsLDIpKX1jb3B5QnJlYWRjcnVtcygpe3RoaXMuZW5kcG9pbnQmJnRoaXMuZW5kcG9pbnQudXJsJiZuYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlVGV4dCh0aGlzLmVuZHBvaW50LnVybCl9YXBwbHlRdWVy'@;
put 'eVBhcmFtcygpe2NvbnN0IGE9dGhpcy5lbmRwb2ludC5zdGFydCxkPXRoaXMuZW5kcG9pbnQubGltaXQsaD1gPyR7dm9pZCAwIT09YT8ic3RhcnQ9IithOiIifSR7dm9pZCAwIT09ZD8iJmxpbWl0PSIrZDoiIn1gLGY9YCR7dGhpcy5lbmRwb2ludC51cmwuc3BsaXQoIj8iKVswXX0ke2h9YDt0'@;
put 'aGlzLmxvYWRVcmwoZil9bG9hZFVybChhKXt0aGlzLmVuZHBvaW50TG9hZGluZz0hMCx0aGlzLnNhc1ZpeWFTZXJ2aWNlLmdldEJ5VXJsKGEpLnN1YnNjcmliZShkPT57dGhpcy5lbmRwb2ludExpbmtzPWQubGlua3MsdGhpcy5lbmRwb2ludEl0ZW1zPWQuaXRlbXM/ZC5pdGVtczpbXSx0aGlz'@;
put 'LmVuZHBvaW50SnNvbj1kLHRoaXMuZW5kcG9pbnRMb2FkaW5nPSExLHRoaXMuZW5kcG9pbnQudXJsPWEsdGhpcy5lbmRwb2ludC5zdGFydD1kLnN0YXJ0LHRoaXMuZW5kcG9pbnQubGltaXQ9ZC5saW1pdH0sZD0+e3RoaXMuZW5kcG9pbnRMb2FkaW5nPSExO2xldCBoPSJFcnJvciBvY2N1cnJl'@;
put 'ZCB3aGlsZSBzZW5kaW5nIHJlcXVlc3QiO2QubWVzc2FnZSYmKGg9ZC5tZXNzYWdlKSxkLmVycm9yJiYoZC5lcnJvci5tZXNzYWdlJiYoaD1kLmVycm9yLm1lc3NhZ2UpLGQuZXJyb3IucmVtZWRpYXRpb24mJihoPWAke2h9XG4ke2QuZXJyb3IucmVtZWRpYXRpb259YCkpLHRoaXMuZXZlbnRT'@;
put 'ZXJ2aWNlLnNob3dBYm9ydE1vZGFsKG51bGwsaCxudWxsLCJIVFRQIEVycm9yIil9KX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShHZShTdSksR2UoVFcpLEdlKEJzKSxHZSh2YykpfX1zdGF0aWN7dGhpcy5cdTAyNzVjbXA9VnIoe3R5cGU6Yyxz'@;
put 'ZWxlY3RvcnM6W1siYXBwLXZpeWEtYXBpLWV4cGxvcmVyIl1dLGhvc3RBdHRyczpbMSwiY29udGVudC1jb250YWluZXIiXSxkZWNsczozMyx2YXJzOjEzLGNvbnN0czpbWyJzZWFyY2hMaW5rc1RyZWVJbnB1dCIsIiJdLFsic2VhcmNoSXRlbXNUcmVlSW5wdXQiLCIiXSxbMSwiYXBpLWNvbGxl'@;
put 'Y3Rpb24tZHJvcGRvd24iXSxbImNsclNlbGVjdCIsIiIsImlkIiwicmVwb3NpdG9yeSIsMywibmdNb2RlbENoYW5nZSIsImNoYW5nZSIsIm5nTW9kZWwiXSxbMywibGFiZWwiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsiY2xhc3MiLCJ3LTEwMCB0ZXh0LWNlbnRlciIsNCwibmdJZiJdLFsxLCJk'@;
put 'LWZsZXgiLCJjbHItanVzdGlmeS1jb250ZW50LWNlbnRlciJdLFsiY2xyTWVkaXVtIiwiIiw0LCJuZ0lmIl0sWyJjbGFzcyIsInNlYXJjaC1ub2RlIiw0LCJuZ0lmIl0sWzQsIm5nRm9yIiwibmdGb3JPZiJdLFsxLCJjb250ZW50LWFyZWEiXSxbMSwiY2FyZCIsImgtMTAwIiwicC0xMCIsImQt'@;
put 'ZmxleCIsImNsci1mbGV4LWNvbHVtbiJdLFsxLCJ3LTEwMCIsImQtZmxleCIsImNsci1hbGlnbi1pdGVtcy1jZW50ZXIiLCJjbHItanVzdGlmeS1jb250ZW50LWNlbnRlciIsInNpdGlvbi1yZWxhdGl2ZSJdLFsxLCJqc29uLXRvZ2dsZSIsImQtZmxleCIsImNsci1hbGlnbi1pdGVtcy1jZW50'@;
put 'ZXIiXSxbMSwibS0wIl0sWyJ0eXBlIiwiY2hlY2tib3giLCJjbHJUb2dnbGUiLCIiLDMsIm5nTW9kZWxDaGFuZ2UiLCJuZ01vZGVsIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tbGluayIsImJ0bi1zbSIsMywiY2xpY2siXSxbInNoYXBlIiwiY29weSJdLFsxLCJ0ZXh0LWNlbnRl'@;
put 'ciIsIm0tMCJdLFsiY2xyU21hbGwiLCIiLDQsIm5nSWYiXSxbMSwidy0xMDAiLCJsaWdodCJdLFs0LCJuZ0lmIl0sWzMsImxhYmVsIl0sWzMsInZhbHVlIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMywidmFsdWUiXSxbMSwidy0xMDAiLCJ0ZXh0LWNlbnRlciJdLFsiY2xyTWVkaXVtIiwiIl0s'@;
put 'WzEsInNlYXJjaC1ub2RlIl0sWzEsInRyZWUtc2VhcmNoLXdyYXBwZXIiXSxbImFwcFN0ZWFsRm9jdXMiLCIiLCJjbHJJbnB1dCIsIiIsInBsYWNlaG9sZGVyIiwiU2VhcmNoIGxpbmtzIiwibmFtZSIsImlucHV0IiwiYXV0b2NvbXBsZXRlIiwib2ZmIiwzLCJuZ01vZGVsQ2hhbmdlIiwia2V5'@;
put 'dXAiLCJuZ01vZGVsIl0sWyJzaGFwZSIsInNlYXJjaCIsNCwibmdJZiJdLFsic2hhcGUiLCJ0aW1lcyIsMywiY2xpY2siLDQsIm5nSWYiXSxbInNoYXBlIiwic2VhcmNoIl0sWyJzaGFwZSIsInRpbWVzIiwzLCJjbGljayJdLFszLCJjbHJFeHBhbmRlZCIsImNsckxvYWRpbmciLCJjbGljayIs'@;
put 'ImNsckV4cGFuZGVkQ2hhbmdlIiw0LCJuZ0lmIl0sWzMsImNsaWNrIiwiY2xyRXhwYW5kZWRDaGFuZ2UiLCJjbHJFeHBhbmRlZCIsImNsckxvYWRpbmciXSxbMSwibS0wIiwiY3Vyc29yLXBvaW50ZXIiLDMsImNsaWNrIl0sWyJzaGFwZSIsImJsb2NrIl0sWyJjbHJJbnB1dCIsIiIsInBsYWNl'@;
put 'aG9sZGVyIiwiU2VhcmNoIGl0ZW1zIiwibmFtZSIsImlucHV0IiwiYXV0b2NvbXBsZXRlIiwib2ZmIiwzLCJuZ01vZGVsQ2hhbmdlIiwia2V5dXAiLCJuZ01vZGVsIl0sWyJjbHJTbWFsbCIsIiJdLFsxLCJkLWZsZXgiLCJjbHItYWxpZ24taXRlbXMtY2VudGVyIiwiY2xyLWp1c3RpZnktY29u'@;
put 'dGVudC1iZXR3ZWVuIl0sWzEsImQtZmxleCIsImNsci1hbGlnbi1pdGVtcy1jZW50ZXIiXSxbMSwidGV4dC1jZW50ZXIiLCJlbmRwb2ludC1icmVhZGNydW1zIiwzLCJjbGljayIsImlubmVySFRNTCJdLFsxLCJkLWZsZXgiLCJjbHItYWxpZ24taXRlbXMtY2VudGVyIiwicXVlcnktcGFyYW1z'@;
put 'Il0sWyJjbHJJbnB1dCIsIiIsInR5cGUiLCJudW1iZXIiLDMsIm5nTW9kZWxDaGFuZ2UiLCJuZ01vZGVsIiwiZGlzYWJsZWQiXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1saW5rIiwiYnRuLXNtIiwzLCJjbGljayIsImRpc2FibGVkIl0sWyJzaGFwZSIsInBsYXkiXSxbMSwianNv'@;
put 'bi1hcmVhIl0sWyJjbGFzcyIsImQtYmxvY2siLDMsImpzb24iLCJleHBhbmRlZCIsInNlZ21lbnRMaW5rQ2xpY2tlZCIsNCwibmdJZiJdLFsxLCJkLWJsb2NrIiwzLCJzZWdtZW50TGlua0NsaWNrZWQiLCJqc29uIiwiZXhwYW5kZWQiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZCxoKXsxJmQmJihk'@;
put 'ZSgwLCJhcHAtc2lkZWJhciIpKDEsImRpdiIsMikoMiwiY2xyLXNlbGVjdC1jb250YWluZXIiKSgzLCJsYWJlbCIpLExlKDQsIkFQSSBDb2xsZWN0aW9uIiksaGUoKSxkZSg1LCJzZWxlY3QiLDMpLGdpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbih2KXtyZXR1cm4gbWkoaC5jb2xsZWN0aW9u'@;
put 'LHYpfHwoaC5jb2xsZWN0aW9uPXYpLHZ9KSxGdCgiY2hhbmdlIixmdW5jdGlvbigpe3JldHVybiBoLnVwZGF0ZVNlbGVjdGVkQ29sbGVjdGlvbigpfSksZ3QoNixva3QsMyw0LCJvcHRncm91cCIsNCksZWwoNywia2V5dmFsdWUiKSxoZSgpKCkoKSxndCg4LHNrdCwyLDAsInAiLDUpLGRlKDks'@;
put 'ImRpdiIsNiksZ3QoMTAsbGt0LDEsMCwiY2xyLXNwaW5uZXIiLDcpLGhlKCksZGUoMTEsImNsci10cmVlIiksZ3QoMTIsZGt0LDYsMywiY2xyLXRyZWUtbm9kZSIsOCkoMTMsZmt0LDIsMSwibmctY29udGFpbmVyIiw5KSxoZSgpLGRlKDE0LCJjbHItdHJlZSIpLGd0KDE1LG1rdCw2LDMsImNs'@;
put 'ci10cmVlLW5vZGUiLDgpKDE2LGJrdCwyLDEsIm5nLWNvbnRhaW5lciIsOSksaGUoKSgpLGRlKDE3LCJkaXYiLDEwKSgxOCwiZGl2IiwxMSkoMTksImRpdiIsMTIpKDIwLCJkaXYiLDEzKSgyMSwiY2xyLXRvZ2dsZS1jb250YWluZXIiLDE0KSgyMiwiY2xyLXRvZ2dsZS13cmFwcGVyIikoMjMs'@;
put 'ImlucHV0IiwxNSksZ2koIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKHYpe3JldHVybiBtaShoLnJhd0pzb24sdil8fChoLnJhd0pzb249diksdn0pLGhlKCksZGUoMjQsImxhYmVsIiksTGUoMjUsIlJBVyBKc29uIiksaGUoKSgpKCksZGUoMjYsImJ1dHRvbiIsMTYpLEZ0KCJjbGljayIsZnVu'@;
put 'Y3Rpb24oKXtyZXR1cm4gaC5jb3B5SnNvbigpfSksR3QoMjcsImNsci1pY29uIiwxNyksaGUoKSgpLGRlKDI4LCJoNCIsMTgpLExlKDI5LCIgQVBJIEV4cGxvcmVyICIpLGd0KDMwLHlrdCwxLDAsImNsci1zcGlubmVyIiwxOSksaGUoKSgpLEd0KDMxLCJociIsMjApLGd0KDMyLFNrdCwyMyw5'@;
put 'LCJuZy1jb250YWluZXIiLDIxKSxoZSgpKCkpLDImZCYmKGZlKDUpLHBpKCJuZ01vZGVsIixoLmNvbGxlY3Rpb24pLGZlKCksTWUoIm5nRm9yT2YiLERjKDcsMTEsaC5jb2xsZWN0aW9ucykpLGZlKDIpLE1lKCJuZ0lmIixoLmVuZHBvaW50TGlua3MubGVuZ3RoPDEmJiFoLmNvbGxlY3Rpb25M'@;
put 'b2FkaW5nKSxmZSgyKSxNZSgibmdJZiIsaC5jb2xsZWN0aW9uTG9hZGluZyksZmUoMiksTWUoIm5nSWYiLGguZW5kcG9pbnRMaW5rcy5sZW5ndGg+MCksZmUoKSxNZSgibmdGb3JPZiIsaC5lbmRwb2ludExpbmtzKSxmZSgyKSxNZSgibmdJZiIsaC5lbmRwb2ludEl0ZW1zLmxlbmd0aD4wKSxm'@;
put 'ZSgpLE1lKCJuZ0Zvck9mIixoLmVuZHBvaW50SXRlbXMpLGZlKDcpLHBpKCJuZ01vZGVsIixoLnJhd0pzb24pLGZlKDcpLE1lKCJuZ0lmIixoLmVuZHBvaW50TG9hZGluZyksZmUoMiksTWUoIm5nSWYiLGguY29sbGVjdGlvbi5sZW5ndGg+MCkpfSxkZXBlbmRlbmNpZXM6W25zLGJhLEEyLGsy'@;
put 'LHFsLHZMLE1kLFQyLG5sLCRzLEVoLFBkLEhsLGowLGRzLElkLEJ5LFNoLFoxLEdMLEU3LCR5LFJkLGk0LHI0LHRrdCx3Uixya3QsaWt0XSxlbmNhcHN1bGF0aW9uOjJ9KX19cmV0dXJuIGN9KSgpO2NvbnN0IHhrdD1uZXcgU3QoIldpbmRvd1Rva2VuIix0eXBlb2Ygd2luZG93PCJ1IiYmd2lu'@;
put 'ZG93LmRvY3VtZW50P3twcm92aWRlZEluOiJyb290IixmYWN0b3J5OigpPT53aW5kb3d9Ontwcm92aWRlZEluOiJyb290IixmYWN0b3J5OigpPT57fX0pO2xldCBFa3Q9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCl7dGhpcy5uZ1pvbmU9YSx0aGlzLmRvY3VtZW50PWQsdGhpcy53'@;
put 'aW5kb3c9aCx0aGlzLmNvcHlTdWJqZWN0PW5ldyBXbix0aGlzLmNvcHlSZXNwb25zZSQ9dGhpcy5jb3B5U3ViamVjdC5hc09ic2VydmFibGUoKSx0aGlzLmNvbmZpZz17fX1jb25maWd1cmUoYSl7dGhpcy5jb25maWc9YX1jb3B5KGEpe2lmKCF0aGlzLmlzU3VwcG9ydGVkfHwhYSlyZXR1cm4g'@;
put 'dGhpcy5wdXNoQ29weVJlc3BvbnNlKHtpc1N1Y2Nlc3M6ITEsY29udGVudDphfSk7Y29uc3QgZD10aGlzLmNvcHlGcm9tQ29udGVudChhKTtyZXR1cm4gdGhpcy5wdXNoQ29weVJlc3BvbnNlKGQ/e2NvbnRlbnQ6YSxpc1N1Y2Nlc3M6ZH06e2lzU3VjY2VzczohMSxjb250ZW50OmF9KX1nZXQg'@;
put 'aXNTdXBwb3J0ZWQoKXtyZXR1cm4hIXRoaXMuZG9jdW1lbnQucXVlcnlDb21tYW5kU3VwcG9ydGVkJiYhIXRoaXMuZG9jdW1lbnQucXVlcnlDb21tYW5kU3VwcG9ydGVkKCJjb3B5IikmJiEhdGhpcy53aW5kb3d9aXNUYXJnZXRWYWxpZChhKXtpZihhIGluc3RhbmNlb2YgSFRNTElucHV0RWxl'@;
put 'bWVudHx8YSBpbnN0YW5jZW9mIEhUTUxUZXh0QXJlYUVsZW1lbnQpe2lmKGEuaGFzQXR0cmlidXRlKCJkaXNhYmxlZCIpKXRocm93IG5ldyBFcnJvcignSW52YWxpZCAidGFyZ2V0IiBhdHRyaWJ1dGUuIFBsZWFzZSB1c2UgInJlYWRvbmx5IiBpbnN0ZWFkIG9mICJkaXNhYmxlZCIgYXR0cmli'@;
put 'dXRlJyk7cmV0dXJuITB9dGhyb3cgbmV3IEVycm9yKCJUYXJnZXQgc2hvdWxkIGJlIGlucHV0IG9yIHRleHRhcmVhIil9Y29weUZyb21JbnB1dEVsZW1lbnQoYSxkPSEwKXt0cnl7dGhpcy5zZWxlY3RUYXJnZXQoYSk7Y29uc3QgaD10aGlzLmNvcHlUZXh0KCk7cmV0dXJuIHRoaXMuY2xlYXJT'@;
put 'ZWxlY3Rpb24oZD9hOnZvaWQgMCx0aGlzLndpbmRvdyksaCYmdGhpcy5pc0NvcHlTdWNjZXNzSW5JRTExKCl9Y2F0Y2h7cmV0dXJuITF9fWlzQ29weVN1Y2Nlc3NJbklFMTEoKXtjb25zdCBhPXRoaXMud2luZG93LmNsaXBib2FyZERhdGE7cmV0dXJuIShhJiZhLmdldERhdGEmJiFhLmdldERh'@;
put 'dGEoIlRleHQiKSl9Y29weUZyb21Db250ZW50KGEsZD10aGlzLmRvY3VtZW50LmJvZHkpe2lmKHRoaXMudGVtcFRleHRBcmVhJiYhZC5jb250YWlucyh0aGlzLnRlbXBUZXh0QXJlYSkmJnRoaXMuZGVzdHJveSh0aGlzLnRlbXBUZXh0QXJlYS5wYXJlbnRFbGVtZW50fHx2b2lkIDApLCF0aGlz'@;
put 'LnRlbXBUZXh0QXJlYSl7dGhpcy50ZW1wVGV4dEFyZWE9dGhpcy5jcmVhdGVUZW1wVGV4dEFyZWEodGhpcy5kb2N1bWVudCx0aGlzLndpbmRvdyk7dHJ5e2QuYXBwZW5kQ2hpbGQodGhpcy50ZW1wVGV4dEFyZWEpfWNhdGNoe3Rocm93IG5ldyBFcnJvcigiQ29udGFpbmVyIHNob3VsZCBiZSBh'@;
put 'IERvbSBlbGVtZW50Iil9fXRoaXMudGVtcFRleHRBcmVhLnZhbHVlPWE7Y29uc3QgaD10aGlzLmNvcHlGcm9tSW5wdXRFbGVtZW50KHRoaXMudGVtcFRleHRBcmVhLCExKTtyZXR1cm4gdGhpcy5jb25maWcuY2xlYW5VcEFmdGVyQ29weSYmdGhpcy5kZXN0cm95KHRoaXMudGVtcFRleHRBcmVh'@;
put 'LnBhcmVudEVsZW1lbnR8fHZvaWQgMCksaH1kZXN0cm95KGE9dGhpcy5kb2N1bWVudC5ib2R5KXt0aGlzLnRlbXBUZXh0QXJlYSYmKGEucmVtb3ZlQ2hpbGQodGhpcy50ZW1wVGV4dEFyZWEpLHRoaXMudGVtcFRleHRBcmVhPXZvaWQgMCl9c2VsZWN0VGFyZ2V0KGEpe3JldHVybiBhLnNlbGVj'@;
put 'dCgpLGEuc2V0U2VsZWN0aW9uUmFuZ2UoMCxhLnZhbHVlLmxlbmd0aCksYS52YWx1ZS5sZW5ndGh9Y29weVRleHQoKXtyZXR1cm4gdGhpcy5kb2N1bWVudC5leGVjQ29tbWFuZCgiY29weSIpfWNsZWFyU2VsZWN0aW9uKGEsZCl7YSYmYS5mb2N1cygpLGQuZ2V0U2VsZWN0aW9uKCk/LnJlbW92'@;
put 'ZUFsbFJhbmdlcygpfWNyZWF0ZVRlbXBUZXh0QXJlYShhLGQpe2NvbnN0IGg9InJ0bCI9PT1hLmRvY3VtZW50RWxlbWVudC5nZXRBdHRyaWJ1dGUoImRpciIpO2xldCBmO3JldHVybiBmPWEuY3JlYXRlRWxlbWVudCgidGV4dGFyZWEiKSxmLnN0eWxlLmZvbnRTaXplPSIxMnB0IixmLnN0eWxl'@;
put 'LmJvcmRlcj0iMCIsZi5zdHlsZS5wYWRkaW5nPSIwIixmLnN0eWxlLm1hcmdpbj0iMCIsZi5zdHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiLGYuc3R5bGVbaD8icmlnaHQiOiJsZWZ0Il09Ii05OTk5cHgiLGYuc3R5bGUudG9wPShkLnBhZ2VZT2Zmc2V0fHxhLmRvY3VtZW50RWxlbWVudC5zY3Jv'@;
put 'bGxUb3ApKyJweCIsZi5zZXRBdHRyaWJ1dGUoInJlYWRvbmx5IiwiIiksZn1wdXNoQ29weVJlc3BvbnNlKGEpe3RoaXMuY29weVN1YmplY3Qub2JzZXJ2ZXJzLmxlbmd0aD4wJiZ0aGlzLm5nWm9uZS5ydW4oKCk9Pnt0aGlzLmNvcHlTdWJqZWN0Lm5leHQoYSl9KX1wdXNoQ29weVJlcG9uc2Uo'@;
put 'YSl7dGhpcy5wdXNoQ29weVJlc3BvbnNlKGEpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh4cihXYSkseHIodnMpLHhyKHhrdCw4KSl9LGMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3Qi'@;
put 'fSksY30pKCksVGt0PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZil7dGhpcy5uZ1pvbmU9YSx0aGlzLmhvc3Q9ZCx0aGlzLnJlbmRlcmVyPWgsdGhpcy5jbGlwYm9hcmRTcnY9Zix0aGlzLmNiT25TdWNjZXNzPW5ldyBLcix0aGlzLmNiT25FcnJvcj1uZXcgS3IsdGhpcy5vbkNs'@;
put 'aWNrPXY9Pnt0aGlzLmNsaXBib2FyZFNydi5pc1N1cHBvcnRlZD90aGlzLnRhcmdldEVsbSYmdGhpcy5jbGlwYm9hcmRTcnYuaXNUYXJnZXRWYWxpZCh0aGlzLnRhcmdldEVsbSk/dGhpcy5oYW5kbGVSZXN1bHQodGhpcy5jbGlwYm9hcmRTcnYuY29weUZyb21JbnB1dEVsZW1lbnQodGhpcy50'@;
put 'YXJnZXRFbG0pLHRoaXMudGFyZ2V0RWxtLnZhbHVlLHYpOnRoaXMuY2JDb250ZW50JiZ0aGlzLmhhbmRsZVJlc3VsdCh0aGlzLmNsaXBib2FyZFNydi5jb3B5RnJvbUNvbnRlbnQodGhpcy5jYkNvbnRlbnQsdGhpcy5jb250YWluZXIpLHRoaXMuY2JDb250ZW50LHYpOnRoaXMuaGFuZGxlUmVz'@;
put 'dWx0KCExLHZvaWQgMCx2KX19bmdPbkluaXQoKXt0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e3RoaXMuY2xpY2tMaXN0ZW5lcj10aGlzLnJlbmRlcmVyLmxpc3Rlbih0aGlzLmhvc3QubmF0aXZlRWxlbWVudCwiY2xpY2siLHRoaXMub25DbGljayl9KX1uZ09uRGVzdHJveSgp'@;
put 'e3RoaXMuY2xpY2tMaXN0ZW5lciYmdGhpcy5jbGlja0xpc3RlbmVyKCksdGhpcy5jbGlwYm9hcmRTcnYuZGVzdHJveSh0aGlzLmNvbnRhaW5lcil9aGFuZGxlUmVzdWx0KGEsZCxoKXtsZXQgZj17aXNTdWNjZXNzOmEsY29udGVudDpkLHN1Y2Nlc3NNZXNzYWdlOnRoaXMuY2JTdWNjZXNzTXNn'@;
put 'LGV2ZW50Omh9O2E/dGhpcy5jYk9uU3VjY2Vzcy5vYnNlcnZlZCYmdGhpcy5uZ1pvbmUucnVuKCgpPT57dGhpcy5jYk9uU3VjY2Vzcy5lbWl0KGYpfSk6dGhpcy5jYk9uRXJyb3Iub2JzZXJ2ZWQmJnRoaXMubmdab25lLnJ1bigoKT0+e3RoaXMuY2JPbkVycm9yLmVtaXQoZil9KSx0aGlzLmNs'@;
put 'aXBib2FyZFNydi5wdXNoQ29weVJlc3BvbnNlKGYpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZShXYSksR2UoSmkpLEdlKEVvKSxHZShFa3QpKX0sYy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwibmd4Q2xpcGJvYXJkIiwi'@;
put 'Il1dLGlucHV0czp7dGFyZ2V0RWxtOltObi5Ob25lLCJuZ3hDbGlwYm9hcmQiLCJ0YXJnZXRFbG0iXSxjb250YWluZXI6ImNvbnRhaW5lciIsY2JDb250ZW50OiJjYkNvbnRlbnQiLGNiU3VjY2Vzc01zZzoiY2JTdWNjZXNzTXNnIn0sb3V0cHV0czp7Y2JPblN1Y2Nlc3M6ImNiT25TdWNjZXNz'@;
put 'IixjYk9uRXJyb3I6ImNiT25FcnJvciJ9fSksY30pKCksQWt0PSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD1raSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9QXIoe2ltcG9ydHM6W1JhXX0pLGN9KSgpO3Zh'@;
put 'ciBra3Q9eSgyNTAwMSk7bGV0IERrdD0oKCk9PntjbGFzcyBje3RyYW5zZm9ybShhLC4uLmQpe2NvbnN0IGg9cGFyc2VJbnQoZFswXSl8fDIsZj0ibnVtYmVyIiE9dHlwZW9mIGE/cGFyc2VJbnQoYSk6YTtyZXR1cm4oMCxra3QuQykoZixoKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rp'@;
put 'b24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1cGlwZT1sbCh7bmFtZToiY29udmVydFNpemUiLHR5cGU6YyxwdXJlOiEwfSl9fXJldHVybiBjfSkoKTtjb25zdCBJa3Q9WyJxdWVyeUZpbHRlciJdLFJrdD0oKT0+WyIiLCIgIl07ZnVuY3Rpb24gTGt0KGMsbCl7MSZj'@;
put 'JiYoZGUoMCwiZGl2Iiw1NCksR3QoMSwiY2xyLXNwaW5uZXIiLDU1KSxoZSgpKX1mdW5jdGlvbiBPa3QoYyxsKXsxJmMmJkd0KDAsImNsci1pY29uIiw2MSl9ZnVuY3Rpb24gUGt0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiY2xyLWljb24iLDYyKSxGdCgiY2xpY2siLGZ1bmN0'@;
put 'aW9uKCl7d3QoYSk7Y29uc3QgaD1SZSgyKTtyZXR1cm4gaC5saWJyYXJpZXNTZWFyY2g9IiIsQ3QoaC5saWJyYXJ5T25GaWx0ZXIoKSl9KSxoZSgpfX1mdW5jdGlvbiBGa3QoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJjbHItdHJlZS1ub2RlIiw1NikoMSwiZGl2Iiw1NykoMiwi'@;
put 'aW5wdXQiLDU4LDEpLGdpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPVJlKCk7cmV0dXJuIG1pKGYubGlicmFyaWVzU2VhcmNoLGgpfHwoZi5saWJyYXJpZXNTZWFyY2g9aCksQ3QoaCl9KSxGdCgia2V5dXAiLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KFJl'@;
put 'KCkubGlicmFyeU9uRmlsdGVyKCkpfSksaGUoKSxndCg0LE9rdCwxLDAsImNsci1pY29uIiw1OSkoNSxQa3QsMSwwLCJjbHItaWNvbiIsNjApLGhlKCkoKX1pZigyJmMpe2NvbnN0IGE9aGEoMyksZD1SZSgpO2ZlKDIpLHBpKCJuZ01vZGVsIixkLmxpYnJhcmllc1NlYXJjaCksZmUoMiksTWUo'@;
put 'Im5nSWYiLGEudmFsdWUubGVuZ3RoPDEpLGZlKCksTWUoIm5nSWYiLGEudmFsdWUubGVuZ3RoPjApfX1mdW5jdGlvbiBIa3QoYyxsKXsxJmMmJkd0KDAsImNsci1pY29uIiw2MSl9ZnVuY3Rpb24gTmt0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiY2xyLWljb24iLDYyKSxGdCgi'@;
put 'Y2xpY2siLGZ1bmN0aW9uKCl7d3QoYSksUmUoKTtjb25zdCBoPWhhKDMpLGY9UmUoMikuJGltcGxpY2l0LHY9UmUoKTtyZXR1cm4gaC52YWx1ZT0iIixmLnNlYXJjaFN0cmluZz0iIixDdCh2LnRyZWVPbkZpbHRlcihmLCJ0YWJsZXMiKSl9KSxoZSgpfX1mdW5jdGlvbiBWa3QoYyxsKXtpZigx'@;
put 'JmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJjbHItdHJlZS1ub2RlIiw1NikoMSwiZGl2Iiw1NykoMiwiaW5wdXQiLDY3LDIpLGdpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPVJlKDIpLiRpbXBsaWNpdDtyZXR1cm4gbWkoZi5zZWFyY2hTdHJpbmcsaCl8fChmLnNl'@;
put 'YXJjaFN0cmluZz1oKSxDdChoKX0pLEZ0KCJrZXl1cCIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPVJlKDIpLiRpbXBsaWNpdDtyZXR1cm4gQ3QoUmUoKS50cmVlT25GaWx0ZXIoaCwidGFibGVzIikpfSksaGUoKSxndCg0LEhrdCwxLDAsImNsci1pY29uIiw1OSkoNSxOa3QsMSwwLCJjbHIt'@;
put 'aWNvbiIsNjApLGhlKCkoKX1pZigyJmMpe2NvbnN0IGE9aGEoMyksZD1SZSgyKS4kaW1wbGljaXQ7ZmUoMiksTWUoImlkIiwic2VhcmNoXyIrZC5MSUJSQVJZUkVGKSxwaSgibmdNb2RlbCIsZC5zZWFyY2hTdHJpbmcpLGZlKDIpLE1lKCJuZ0lmIixhLnZhbHVlLmxlbmd0aDwxKSxmZSgpLE1l'@;
put 'KCJuZ0lmIixhLnZhbHVlLmxlbmd0aD4wKX19ZnVuY3Rpb24gQmt0KGMsbCl7MSZjJiZHdCgwLCJjbHItaWNvbiIsNzQpfWZ1bmN0aW9uIGprdChjLGwpezEmYyYmR3QoMCwiY2xyLWljb24iLDc1KX1mdW5jdGlvbiB6a3QoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJidXR0b24i'@;
put 'LDcwKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1SZSgpLm5nVmFyLGY9UmUoKS4kaW1wbGljaXQsdj1SZSgyKS4kaW1wbGljaXQsTT1SZSgpO3JldHVybiBDdChoPyIiOk0ub25UYWJsZUNsaWNrKGYsdikpfSksc2koMSw3MSksZ3QoMixCa3QsMSwwLCJjbHItaWNvbiIs'@;
put 'NzIpKDMsamt0LDEsMCwiY2xyLWljb24iLDczKSxsaSgpLExlKDQpLGhlKCl9aWYoMiZjKXtjb25zdCBhPVJlKCkubmdWYXIsZD1SZSgpLiRpbXBsaWNpdCxoPVJlKDIpLiRpbXBsaWNpdCxmPVJlKCk7VHIoImRjLWxvY2tlZC1jb250cm9sIixhKSgiYWN0aXZlIixmLmxpYlRhYkFjdGl2ZSho'@;
put 'LkxJQlJBUllSRUYsZCkpLGZlKCksTWUoIm5nU3dpdGNoIixkLmluY2x1ZGVzKCItRkMiKSksZmUoKSxNZSgibmdTd2l0Y2hDYXNlIiwhMCksZmUoKSxNZSgibmdTd2l0Y2hDYXNlIiwhMSksZmUoKSxEcigiICIsZC5yZXBsYWNlKCItRkMiLCIiKSwiICIpfX1mdW5jdGlvbiBVa3QoYyxsKXsx'@;
put 'JmMmJihkZSgwLCJjbHItdG9vbHRpcC1jb250ZW50Iiw3NykoMSwic3BhbiIpLExlKDIsIiBUbyB1bmxvY2sgYWxsIHRhYmxlcywgY29udGFjdCBzdXBwb3J0QGRhdGFjb250cm9sbGVyLmlvICIpLGhlKCkoKSl9ZnVuY3Rpb24gWmt0KGMsbCl7MSZjJiYoc2koMCksZ3QoMSxVa3QsMywwLCJj'@;
put 'bHItdG9vbHRpcC1jb250ZW50Iiw3NiksbGkoKSl9ZnVuY3Rpb24gV2t0KGMsbCl7aWYoMSZjJiYoZGUoMCwiY2xyLXRvb2x0aXAiKSxndCgxLHprdCw1LDgsImJ1dHRvbiIsNjkpKDIsWmt0LDIsMCwibmctY29udGFpbmVyIiw0MiksaGUoKSksMiZjKXtjb25zdCBhPWwubmdWYXIsZD1SZSgp'@;
put 'LiRpbXBsaWNpdDtmZSgpLE1lKCJuZ0lmIixkLmxlbmd0aD4wKSxmZSgpLE1lKCJuZ0lmIixhKX19ZnVuY3Rpb24gWWt0KGMsbCl7aWYoMSZjJiYoZGUoMCwiY2xyLXRyZWUtbm9kZSIpLGd0KDEsV2t0LDMsMiwiY2xyLXRvb2x0aXAiLDY4KSxoZSgpKSwyJmMpe2NvbnN0IGE9bC5pbmRleCxk'@;
put 'PVJlKDMpO2ZlKCksTWUoIm5nVmFyIixhKzE+ZC5saWNlbmNlU3RhdGUudmFsdWUudGFibGVzX2luX2xpYnJhcnlfbGltaXQpfX1mdW5jdGlvbiBHa3QoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJjbHItdHJlZS1ub2RlIiw2NCksRnQoImNsaWNrIixmdW5jdGlvbihoKXt3dChh'@;
put 'KTtjb25zdCBmPVJlKCkuJGltcGxpY2l0O3JldHVybiBDdChSZSgpLnRyZWVOb2RlQ2xpY2tlZChoLGYpKX0pLGdpKCJjbHJFeHBhbmRlZENoYW5nZSIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1SZSgpLiRpbXBsaWNpdDtyZXR1cm4gbWkoZi5leHBhbmRlZCxoKXx8KGYuZXhwYW5kZWQ9'@;
put 'aCksQ3QoaCl9KSxkZSgxLCJwIiw2NSksRnQoImNsaWNrIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9UmUoKS4kaW1wbGljaXQsZj1SZSgpO3JldHVybiBmLmxpYj1oLkxJQlJBUllSRUYsQ3QoZi5saWJyYXJ5T25DbGljayhoLkxJQlJBUllSRUYsaCkpfSksR3QoMiwiY2xyLWljb24iLDY2'@;
put 'KSxMZSgzKSxoZSgpLGd0KDQsVmt0LDYsNCwiY2xyLXRyZWUtbm9kZSIsNykoNSxZa3QsMiwxLCJjbHItdHJlZS1ub2RlIiw4KSxoZSgpfWlmKDImYyl7Y29uc3QgYT1SZSgpLiRpbXBsaWNpdDtUcigiY2xyLWV4cGFuZGVkIixhLmV4cGFuZGVkKSxwaSgiY2xyRXhwYW5kZWQiLGEuZXhwYW5k'@;
put 'ZWQpLE1lKCJjbHJMb2FkaW5nIixhLmxvYWRpbmdUYWJsZXMmJiFhLnRhYmxlcyksZmUoMyksRHIoIiAiLGEuTElCUkFSWU5BTUUsIiAiKSxmZSgpLE1lKCJuZ0lmIixhLnRhYmxlcyksZmUoKSxNZSgibmdGb3JPZiIsYS50YWJsZXMpfX1mdW5jdGlvbiAka3QoYyxsKXtpZigxJmMmJihzaSgw'@;
put 'KSxndCgxLEdrdCw2LDcsImNsci10cmVlLW5vZGUiLDYzKSxsaSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7ZmUoKSxNZSgibmdJZiIsIWEuaGlkZGVuJiZhLmluRm9yZWdyb3VuZCl9fWZ1bmN0aW9uIEtrdChjLGwpezEmYyYmKGRlKDAsImRpdiIsNzgpKDEsInNwYW4iLDc5KSxMZSgy'@;
put 'LCIgTG9hZGluZy4uLiAiKSxoZSgpKCkpfWZ1bmN0aW9uIHFrdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImRpdiIsODApKDEsImRpdiIsODEpKDIsImRpdiIsODIpKDMsImRpdiIsODMpKDQsImJ1dHRvbiIsODQpLEd0KDUsImNsci1pY29uIiw4NSksaGUoKSxkZSg2LCJoMyIs'@;
put 'NDcpLExlKDcsIkVycm9yIiksaGUoKSgpLGRlKDgsImRpdiIsMTUpKDksInAiKSxMZSgxMCwiWW91IGNhbm5vdCBzdWJtaXQgZW1wdHkgY2xhdXNlcyIpLGhlKCkoKSxkZSgxMSwiZGl2IiwyNikoMTIsImJ1dHRvbiIsODYpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3Qo'@;
put 'UmUoKS5udWxsVmFyaWFibGVzPSExKX0pLExlKDEzLCIgT2sgIiksaGUoKSgpKCkoKSgpfX1mdW5jdGlvbiBYa3QoYyxsKXsxJmMmJkd0KDAsImRpdiIsODcpfWZ1bmN0aW9uIEprdChjLGwpezEmYyYmR3QoMCwiYXBwLXF1ZXJ5IixudWxsLDMpfWZ1bmN0aW9uIFFrdChjLGwpezEmYyYmKGRl'@;
put 'KDAsImRpdiIsODgpKDEsInNwYW4iLDg5KSxMZSgyLCIgTG9hZGluZy4uLiAiKSxoZSgpLGRlKDMsImRpdiIsOTApKDQsInAiLDkxKSxMZSg1LCJMb2FkaW5nIFRhYmxlIFZpZXdlciIpLGhlKCkoKSgpKX1mdW5jdGlvbiBlRHQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJjbHIt'@;
put 'aWNvbiIsMTE1KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSksUmUoKTtjb25zdCBoPWhhKDUpO3JldHVybiBDdChSZSgyKS5zZWFyY2hUYWJsZShoKSl9KSxoZSgpfX1mdW5jdGlvbiB0RHQoYyxsKXsxJmMmJihkZSgwLCJzcGFuIiwxMTYpLExlKDEsIiBMb2FkaW5nLi4uICIpLGhlKCkp'@;
put 'fWZ1bmN0aW9uIG5EdChjLGwpezEmYyYmR3QoMCwiY2xyLWljb24iLDExNyl9ZnVuY3Rpb24gckR0KGMsbCl7aWYoMSZjJiYoZGUoMCwic3BhbiIsMTE4KSxMZSgxKSxoZSgpKSwyJmMpe2NvbnN0IGE9UmUoMyk7ZmUoKSxEcigiICIsbnVsbD09YS50YWJsZVRpdGxlP251bGw6YS50YWJsZVRp'@;
put 'dGxlLnJlcGxhY2UoIi1GQyIsIiIpLCIgIil9fWZ1bmN0aW9uIGlEdChjLGwpe2lmKDEmYyYmKGRlKDAsImNsci10b29sdGlwLWNvbnRlbnQiLDEyMCksTGUoMSksaGUoKSksMiZjKXtjb25zdCBhPVJlKDQpO2ZlKCksRHIoIiAiLGEuZHNOb3RlLCIgIil9fWZ1bmN0aW9uIGFEdChjLGwpezEm'@;
put 'YyYmKHNpKDApLGd0KDEsaUR0LDIsMSwiY2xyLXRvb2x0aXAtY29udGVudCIsMTE5KSxsaSgpKX1mdW5jdGlvbiBvRHQoYyxsKXtpZigxJmMmJihkZSgwLCJzcGFuIiksTGUoMSksZWwoMiwidGhvdXNhbmRTZXBhcmF0b3IiKSxoZSgpKSwyJmMpe2NvbnN0IGE9UmUoNCk7ZmUoKSxLSSgiICgi'@;
put 'LHo4KDIsNCxhLm51bWJlck9mUm93cywiLCIpLCIgIiwxPT09YS5udW1iZXJPZlJvd3M/InJvdyI6InJvd3MiLCIsICIsYS5maWx0ZXJDb2xzLmxlbmd0aCwiIiwxPT09YS5maWx0ZXJDb2xzLmxlbmd0aD8iIGNvbCI6IiBjb2xzIiwiKSAiKX19ZnVuY3Rpb24gc0R0KGMsbCl7aWYoMSZjKXtj'@;
put 'b25zdCBhPUxuKCk7c2koMCksZ3QoMSxvRHQsMyw3LCJzcGFuIiw0MiksZGUoMiwiY2xyLWljb24iLDEyMSksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChSZSgzKS5yZWxvYWRUYWJsZURhdGEoKSl9KSxoZSgpLGxpKCl9aWYoMiZjKXtjb25zdCBhPVJlKDMpO2ZlKCks'@;
put 'TWUoIm5nSWYiLG51bGwhPT1hLm51bWJlck9mUm93cyl9fWZ1bmN0aW9uIGxEdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImRpdiIsMTI3KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KFJlKDUpLmVkaXRUYWJsZSgpKX0pLEd0KDEsImNsci1pY29uIiwx'@;
put 'MzMpLGRlKDIsInNwYW4iKSxMZSgzLCJFZGl0IiksaGUoKSgpfX1mdW5jdGlvbiBjRHQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJkaXYiLDEyNyksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChSZSg1KS5nb1RvTGluZWFnZSgpKX0pLEd0KDEsImNsci1p'@;
put 'Y29uIiwxMzQpLGRlKDIsInNwYW4iKSxMZSgzLCJMaW5lYWdlIiksaGUoKSgpfX1mdW5jdGlvbiB1RHQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJjbHItZHJvcGRvd24tbWVudSIsMTI2KSgxLCJkaXYiLDEyNyksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxD'@;
put 'dChSZSg0KS5uZXdWaWV3Ym94KCkpfSksR3QoMiwiY2xyLWljb24iLDEyOCksZGUoMywic3BhbiIpLExlKDQsIlZpZXdib3hlcyIpLGhlKCkoKSxndCg1LGxEdCw0LDAsImRpdiIsMTI5KSg2LGNEdCw0LDAsImRpdiIsMTI5KSxkZSg3LCJkaXYiLDEyNyksRnQoImNsaWNrIixmdW5jdGlvbigp'@;
put 'e3JldHVybiB3dChhKSxDdChSZSg0KS5vcGVuUWIoKSl9KSxHdCg4LCJjbHItaWNvbiIsMTMwKSxkZSg5LCJzcGFuIiksTGUoMTAsIkZpbHRlciIpLGhlKCkoKSxkZSgxMSwiZGl2IiwxMjcpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoUmUoNCkub3BlbkRvd25sb2Fk'@;
put 'PSEwKX0pLEd0KDEyLCJjbHItaWNvbiIsMTMxKSxkZSgxMywic3BhbiIpLExlKDE0LCJEb3dubG9hZCIpLGhlKCkoKSxkZSgxNSwiZGl2IiwxMjcpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoUmUoNCkuc2hvd1dlYlF1ZXJ5KCkpfSksR3QoMTYsImNsci1pY29uIiwx'@;
put 'MzIpLGRlKDE3LCJzcGFuIiksTGUoMTgsIldlYiBRdWVyeSBVUkwiKSxoZSgpKCkoKX1pZigyJmMpe2NvbnN0IGE9UmUoNCk7ZmUoNSksTWUoIm5nSWYiLGEudGFibGVFZGl0RXhpc3RzKCkpLGZlKCksTWUoIm5nSWYiLGEudGFibGV1cmkpfX1mdW5jdGlvbiBkRHQoYyxsKXsxJmMmJihkZSgw'@;
put 'LCJjbHItZHJvcGRvd24iLDEyMikoMSwiYnV0dG9uIiwxMjMpLEd0KDIsImNsci1pY29uIiwxMjQpLExlKDMsIiBvcHRpb25zICIpLGhlKCksZ3QoNCx1RHQsMTksMiwiY2xyLWRyb3Bkb3duLW1lbnUiLDEyNSksaGUoKSksMiZjJiZNZSgiY2xyQ2xvc2VNZW51T25JdGVtQ2xpY2siLCEwKX1m'@;
put 'dW5jdGlvbiBoRHQoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiLDEzNSkoMSwic3BhbiIpLExlKDIsIkZJTFRFUiA6ICIpLGRlKDMsImIiKSxMZSg0KSxoZSgpKCkoKSksMiZjKXtjb25zdCBhPVJlKDMpO2ZlKDQpLHdyKGEucXVlcnlUZXh0KX19ZnVuY3Rpb24gZkR0KGMsbCl7aWYoMSZjKXtj'@;
put 'b25zdCBhPUxuKCk7ZGUoMCwiZGl2Iiw5OCkoMSwic2VjdGlvbiIsOTkpKDIsImZvcm0iLDEwMCkoMywiZGl2IiwxMDEpKDQsImlucHV0IiwxMDIsNCksRnQoImtleXVwLmVudGVyIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9aGEoNSk7cmV0dXJuIEN0KFJlKDIpLnNlYXJjaFRhYmxlKGgp'@;
put 'KX0pLGhlKCksZ3QoNixlRHQsMSwwLCJjbHItaWNvbiIsMTAzKSg3LHREdCwyLDAsInNwYW4iLDEwNCksaGUoKSxkZSg4LCJjbHItY2hlY2tib3gtY29udGFpbmVyIikoOSwiY2xyLWNoZWNrYm94LXdyYXBwZXIiKSgxMCwiaW5wdXQiLDEwNSksZ2koIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9u'@;
put 'KGgpe3d0KGEpO2NvbnN0IGY9UmUoMik7cmV0dXJuIG1pKGYuc2VhcmNoTnVtZXJpYyxoKXx8KGYuc2VhcmNoTnVtZXJpYz1oKSxDdChoKX0pLGhlKCksZGUoMTEsImxhYmVsIiksTGUoMTIsIk51bWVyaWMiKSxoZSgpKCkoKSgpKCksZGUoMTMsImRpdiIsMTA2KSgxNCwicCIsMTA3KSgxNSwi'@;
put 'Y2xyLXRvb2x0aXAiLDEwOCkoMTYsImNsci1pY29uIiwxMDkpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoUmUoMikuZGF0YXNldEluZm89ITApfSksaGUoKSxndCgxNyxuRHQsMSwwLCJjbHItaWNvbiIsMTEwKSgxOCxyRHQsMiwxLCJzcGFuIiwxMTEpKDE5LGFEdCwy'@;
put 'LDAsIm5nLWNvbnRhaW5lciIsNDIpLGhlKCksZ3QoMjAsc0R0LDMsMSwibmctY29udGFpbmVyIiw0MiksaGUoKSgpLGRlKDIxLCJkaXYiLDExMiksZ3QoMjIsZER0LDUsMSwiY2xyLWRyb3Bkb3duIiwxMTMpLGhlKCksZ3QoMjMsaER0LDUsMSwiZGl2IiwxMTQpLGhlKCl9aWYoMiZjKXtjb25z'@;
put 'dCBhPVJlKDIpO2ZlKDQpLE1lKCJ0eXBlIixhLnNlYXJjaE51bWVyaWM/Im51bWJlciI6InRleHQiKSxmZSgyKSxNZSgibmdJZiIsIWEuc2VhcmNoTG9hZGluZyksZmUoKSxNZSgibmdJZiIsYS5zZWFyY2hMb2FkaW5nKSxmZSgzKSxwaSgibmdNb2RlbCIsYS5zZWFyY2hOdW1lcmljKSxmZSg3'@;
put 'KSxNZSgibmdJZiIsbnVsbD09YS50YWJsZVRpdGxlP251bGw6YS50YWJsZVRpdGxlLmluY2x1ZGVzKCItRkMiKSksZmUoKSxNZSgibmdJZiIsYS50YWJsZVRpdGxlJiZhLnRhYmxlVGl0bGUubGVuZ3RoPjApLGZlKCksTWUoIm5nSWYiLGEuZHNOb3RlJiZhLmRzTm90ZS5sZW5ndGg+MCksZmUo'@;
put 'KSxNZSgibmdJZiIsYS50YWJsZVRpdGxlJiZhLnRhYmxlVGl0bGUubGVuZ3RoPjApLGZlKDIpLE1lKCJuZ0lmIixhLnRhYmxlVGl0bGUmJiFhLmFib3J0QWN0aXZlKSxmZSgpLE1lKCJuZ0lmIiwiMT0xIiE9PWEucXVlcnlUZXh0JiYhR3MoMTAsUmt0KS5pbmNsdWRlcyhhLnF1ZXJ5VGV4dCkm'@;
put 'JiFhLmFib3J0QWN0aXZlKX19ZnVuY3Rpb24gcER0KGMsbCl7MSZjJiYoZGUoMCwiZGl2IiwxMzYpLEd0KDEsImltZyIsMTM3KSxkZSgyLCJoMyIsMTM4KSxMZSgzLCIgUGxlYXNlIHNlbGVjdCBhIGxpYnJhcnkgIiksaGUoKSgpKX1mdW5jdGlvbiBnRHQoYyxsKXsxJmMmJkd0KDAsImNsci1z'@;
put 'cGlubmVyIiw1NSl9ZnVuY3Rpb24gbUR0KGMsbCl7MSZjJiYoZGUoMCwiZGl2IiwxNDUpLEd0KDEsImltZyIsMTQ2KSxkZSgyLCJwIiwxMzgpLExlKDMsIiBQbGVhc2Ugc2VsZWN0IGEgdGFibGUgIiksaGUoKSgpKX1mdW5jdGlvbiB2RHQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgw'@;
put 'LCJwIiwxNDkpLExlKDEsIiBObyBsaWJyYXJ5IGluZm8gZm91bmQuIENsaWNrICIpLGRlKDIsImNsci1pY29uIiwxNTApLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoUmUoNCkucmVsb2FkTGliSW5mbygpKX0pLGhlKCksTGUoMywiIGJ1dHRvbiB0byByZWZyZXNoLiAi'@;
put 'KSxoZSgpfX1mdW5jdGlvbiBiRHQoYyxsKXtpZigxJmMmJihkZSgwLCJ0ciIpKDEsInRkIiwxNTEpLExlKDIsIkVOR0lORToiKSxoZSgpLGRlKDMsInRkIiwxNTIpLExlKDQpLGhlKCkoKSksMiZjKXtjb25zdCBhPVJlKDUpO2ZlKDQpLERyKCIgIixhLmxpYmluZm9bMF0/YS5saWJpbmZvWzBd'@;
put 'LkVOR0lORToiIiwiICIpfX1mdW5jdGlvbiB5RHQoYyxsKXtpZigxJmMmJihkZSgwLCJ0ciIpKDEsInRkIiwxNTEpLExlKDIsIkxJQklEOiIpLGhlKCksZGUoMywidGQiLDE1MiksTGUoNCksaGUoKSgpKSwyJmMpe2NvbnN0IGE9UmUoNSk7ZmUoNCksRHIoIiAiLGEubGliaW5mb1swXT9hLmxp'@;
put 'YmluZm9bMF0uTElCSUQ6IiIsIiAiKX19ZnVuY3Rpb24gX0R0KGMsbCl7aWYoMSZjJiYoZGUoMCwidHIiKSgxLCJ0ZCIsMTUxKSxMZSgyLCJMSUJOQU1FOiIpLGhlKCksZGUoMywidGQiLDE1MiksTGUoNCksaGUoKSgpKSwyJmMpe2NvbnN0IGE9UmUoNSk7ZmUoNCksRHIoIiAiLGEubGliaW5m'@;
put 'b1swXT9hLmxpYmluZm9bMF0uTElCTkFNRToiIiwiICIpfX1mdW5jdGlvbiB3RHQoYyxsKXtpZigxJmMmJihkZSgwLCJ0ciIpKDEsInRkIiwxNTEpLExlKDIsIkxJQlNJWkU6IiksaGUoKSxkZSgzLCJ0ZCIsMTUyKSxMZSg0KSxlbCg1LCJjb252ZXJ0U2l6ZSIpLGhlKCkoKSksMiZjKXtjb25z'@;
put 'dCBhPVJlKDUpO2ZlKDQpLERyKCIgIixhLmxpYmluZm9bMF0/RGMoNSwxLGEubGliaW5mb1swXS5MSUJTSVpFKToiIiwiICIpfX1mdW5jdGlvbiBDRHQoYyxsKXtpZigxJmMmJihkZSgwLCJ0ciIpKDEsInRkIiwxNTEpLExlKDIsIk9XTkVSUzoiKSxoZSgpLGRlKDMsInRkIiwxNTIpLExlKDQp'@;
put 'LGhlKCkoKSksMiZjKXtjb25zdCBhPVJlKDUpO2ZlKDQpLERyKCIgIixhLmxpYmluZm9bMF0/YS5saWJpbmZvWzBdLk9XTkVSUzoiIiwiICIpfX1mdW5jdGlvbiBTRHQoYyxsKXtpZigxJmMmJihkZSgwLCJ0ciIpKDEsInRkIiwxNTEpLExlKDIsIlBBVEhTOiIpLGhlKCksZGUoMywidGQiLDE1'@;
put 'MiksTGUoNCksaGUoKSgpKSwyJmMpe2NvbnN0IGE9UmUoNSk7ZmUoNCksRHIoIiAiLGEubGliaW5mb1swXT9hLmxpYmluZm9bMF0uUEFUSFM6IiIsIiAiKX19ZnVuY3Rpb24gTUR0KGMsbCl7aWYoMSZjJiYoZGUoMCwidHIiKSgxLCJ0ZCIsMTUxKSxMZSgyLCJQRVJNUzoiKSxoZSgpLGRlKDMs'@;
put 'InRkIiwxNTIpLExlKDQpLGhlKCkoKSksMiZjKXtjb25zdCBhPVJlKDUpO2ZlKDQpLERyKCIgIixhLmxpYmluZm9bMF0/YS5saWJpbmZvWzBdLlBFUk1TOiIiLCIgIil9fWZ1bmN0aW9uIHhEdChjLGwpe2lmKDEmYyYmKGRlKDAsInRyIikoMSwidGQiLDE1MSksTGUoMiwiU0NIRU1BUzoiKSxo'@;
put 'ZSgpLGRlKDMsInRkIiwxNTIpLExlKDQpLGhlKCkoKSksMiZjKXtjb25zdCBhPVJlKDUpO2ZlKDQpLERyKCIgIixhLmxpYmluZm9bMF0/YS5saWJpbmZvWzBdLlNDSEVNQVM6IiIsIiAiKX19ZnVuY3Rpb24gRUR0KGMsbCl7aWYoMSZjJiYoZGUoMCwidHIiKSgxLCJ0ZCIsMTUxKSxMZSgyLCJU'@;
put 'QUJMRV9DTlQ6IiksaGUoKSxkZSgzLCJ0ZCIsMTUyKSxMZSg0KSxoZSgpKCkpLDImYyl7Y29uc3QgYT1SZSg1KTtmZSg0KSxEcigiICIsYS5saWJpbmZvWzBdP2EubGliaW5mb1swXS5UQUJMRV9DTlQ6IiIsIiAiKX19ZnVuY3Rpb24gVER0KGMsbCl7aWYoMSZjJiYoZGUoMCwidHIiKSgxLCJ0'@;
put 'ZCIsMTUxKSxMZSgyLCJDQVRBTE9HX0NOVDoiKSxoZSgpLGRlKDMsInRkIiwxNTIpLExlKDQpLGhlKCkoKSksMiZjKXtjb25zdCBhPVJlKDUpO2ZlKDQpLERyKCIgIixhLmxpYmluZm9bMF0/YS5saWJpbmZvWzBdLkNBVEFMT0dfQ05UOiIiLCIgIil9fWZ1bmN0aW9uIEFEdChjLGwpe2lmKDEm'@;
put 'YyYmKHNpKDApLGRlKDEsInRhYmxlIiksZ3QoMixiRHQsNSwxLCJ0ciIsNDIpKDMseUR0LDUsMSwidHIiLDQyKSg0LF9EdCw1LDEsInRyIiw0MikoNSx3RHQsNiwzLCJ0ciIsNDIpKDYsQ0R0LDUsMSwidHIiLDQyKSg3LFNEdCw1LDEsInRyIiw0MikoOCxNRHQsNSwxLCJ0ciIsNDIpKDkseER0'@;
put 'LDUsMSwidHIiLDQyKSgxMCxFRHQsNSwxLCJ0ciIsNDIpKDExLFREdCw1LDEsInRyIiw0MiksaGUoKSxsaSgpKSwyJmMpe2NvbnN0IGE9UmUoNCk7ZmUoMiksTWUoIm5nSWYiLCIiIT09YS5saWJpbmZvWzBdLkVOR0lORSksZmUoKSxNZSgibmdJZiIsIiIhPT1hLmxpYmluZm9bMF0uTElCSUQp'@;
put 'LGZlKCksTWUoIm5nSWYiLCIiIT09YS5saWJpbmZvWzBdLkxJQk5BTUUpLGZlKCksTWUoIm5nSWYiLG51bGwhPT1hLmxpYmluZm9bMF0uTElCU0laRSksZmUoKSxNZSgibmdJZiIsIiIhPT1hLmxpYmluZm9bMF0uT1dORVJTKSxmZSgpLE1lKCJuZ0lmIiwiIiE9PWEubGliaW5mb1swXS5QQVRI'@;
put 'UyksZmUoKSxNZSgibmdJZiIsIiIhPT1hLmxpYmluZm9bMF0uUEVSTVMpLGZlKCksTWUoIm5nSWYiLCIiIT09YS5saWJpbmZvWzBdLlNDSEVNQVMpLGZlKCksTWUoIm5nSWYiLG51bGwhPT1hLmxpYmluZm9bMF0uVEFCTEVfQ05UKSxmZSgpLE1lKCJuZ0lmIixudWxsIT09YS5saWJpbmZvWzBd'@;
put 'LkNBVEFMT0dfQ05UKX19ZnVuY3Rpb24ga0R0KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2IiwxNDcpLGd0KDEsdkR0LDQsMCwicCIsMTQ4KSgyLEFEdCwxMiwxMCwibmctY29udGFpbmVyIiw0MiksaGUoKSksMiZjKXtjb25zdCBhPVJlKDMpO2ZlKCksTWUoIm5nSWYiLGEubGliaW5mby5sZW5n'@;
put 'dGg8MSksZmUoKSxNZSgibmdJZiIsYS5saWJpbmZvLmxlbmd0aD4wKX19ZnVuY3Rpb24gRER0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7c2koMCksZGUoMSwiZGl2IiwxMzkpLEd0KDIsInNlY3Rpb24iLDk5KSxkZSgzLCJkaXYiLDE0MCkoNCwicCIsOTEpLExlKDUpLGhlKCksZGUoNiwi'@;
put 'Y2xyLWljb24iLDEyMSksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChSZSgyKS5yZWxvYWRMaWJJbmZvKCkpfSksaGUoKSgpLEd0KDcsImRpdiIsMTEyKSxoZSgpLGRlKDgsImRpdiIsMTQxKSxndCg5LGdEdCwxLDAsImNsci1zcGlubmVyIiwxNDIpLGhlKCksZ3QoMTAs'@;
put 'bUR0LDQsMCwiZGl2IiwxNDMpKDExLGtEdCwzLDIsImRpdiIsMTQ0KSxsaSgpfWlmKDImYyl7Y29uc3QgYT1SZSgyKTtmZSg1KSxEcigiICIsYS5saWIsIiAiKSxmZSg0KSxNZSgibmdJZiIsbnVsbD09PWEubGliaW5mbyksZmUoKSxNZSgibmdJZiIsbnVsbCE9PWEubGliaW5mbyksZmUoKSxN'@;
put 'ZSgibmdJZiIsbnVsbCE9PWEubGliaW5mbyl9fWZ1bmN0aW9uIElEdChjLGwpezEmYyYmKGRlKDAsImgzIiwxNTYpLExlKDEsIiBObyBkYXRhIGZvdW5kIHdpdGggZ2l2ZW4gY29uZGl0aW9ucyAiKSxoZSgpKX1mdW5jdGlvbiBSRHQoYyxsKXsxJmMmJihkZSgwLCJoMyIsMTU2KSxMZSgxLCIg'@;
put 'Tm8gZGF0YSBmb3VuZCBkdWUgdG8gc2FzIHJlcXVlc3QgZXJyb3IgIiksaGUoKSl9ZnVuY3Rpb24gTER0KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2IiwxNTMpLEd0KDEsImNsci1pY29uIiwxNTQpLGd0KDIsSUR0LDIsMCwiaDMiLDE1NSkoMyxSRHQsMiwwLCJoMyIsMTU1KSxoZSgpKSwyJmMp'@;
put 'e2NvbnN0IGE9UmUoMik7ZmUoMiksTWUoIm5nSWYiLGEubm9EYXRhKSxmZSgpLE1lKCJuZ0lmIixhLm5vRGF0YVJlcUVycil9fWZ1bmN0aW9uIE9EdChjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIsMTU3KSxHdCgxLCJob3QtdGFibGUiLDE1OCksaGUoKSksMiZjKXtjb25zdCBhPVJlKDIpO2Zl'@;
put 'KCksTWUoIm11bHRpQ29sdW1uU29ydGluZyIsITApKCJ2aWV3cG9ydFJvd1JlbmRlcmluZ09mZnNldCIsNTApKCJkYXRhIixhLmhvdFRhYmxlLmRhdGEpKCJjb2xIZWFkZXJzIixhLmhvdFRhYmxlLmNvbEhlYWRlcnMpKCJjb2x1bW5zIixhLmhvdFRhYmxlLmNvbHVtbnMpKCJjb3B5UGFzdGUi'@;
put 'LGEuaG90VGFibGUuY29weVBhc3RlKSgiY29udGV4dE1lbnUiLGEuaG90VGFibGUuY29udGV4dE1lbnUpKCJmaWx0ZXJzIiwhMCkoImRyb3Bkb3duTWVudSIsYS5ob3RUYWJsZS5kcm9wZG93bk1lbnUpKCJoZWlnaHQiLGEuaG90VGFibGUuaGVpZ2h0KSgibW9kaWZ5Q29sV2lkdGgiLGEubWF4'@;
put 'V2lkdGhDaGVrZXIpKCJjZWxscyIsYS5ob3RUYWJsZS5jZWxscykoIm1heFJvd3MiLGEuaG90VGFibGUubWF4Um93cykoIm1hbnVhbENvbHVtblJlc2l6ZSIsITApKCJhZnRlckdldENvbEhlYWRlciIsYS5ob3RUYWJsZS5hZnRlckdldENvbEhlYWRlcikoInJvd0hlYWRlcnMiLGEuaG90VGFi'@;
put 'bGUucm93SGVhZGVycykoInJvd0hlYWRlcldpZHRoIixhLmhvdFRhYmxlLnJvd0hlYWRlcldpZHRoKSgicm93SGVpZ2h0cyIsYS5ob3RUYWJsZS5yb3dIZWlnaHRzKSgibGljZW5zZUtleSIsYS5ob3RUYWJsZS5saWNlbnNlS2V5KX19ZnVuY3Rpb24gUER0KGMsbCl7aWYoMSZjJiYoZGUoMCwi'@;
put 'cCIsMTU5KSxMZSgxKSxHdCgyLCJjb250YWN0LWxpbmsiKSxoZSgpKSwyJmMpe2NvbnN0IGE9UmUoMik7ZmUoKSxEcigiIFRvIGRpc3BsYXkgbW9yZSB0aGFuICIsYS5saWNlbmNlU3RhdGUudmFsdWUudmlld2VyX3Jvd3NfYWxsb3dlZCwiIHJvd3MsIGNvbnRhY3QgIil9fWZ1bmN0aW9uIEZE'@;
put 'dChjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIsOTIpLGd0KDEsZkR0LDI0LDExLCJkaXYiLDkzKSgyLHBEdCw0LDAsImRpdiIsOTQpKDMsRER0LDEyLDQsIm5nLWNvbnRhaW5lciIsNDIpKDQsTER0LDQsMiwiZGl2Iiw5NSkoNSxPRHQsMiwxOSwiZGl2Iiw5NiksZGUoNiwiZGl2IiksZ3QoNyxQ'@;
put 'RHQsMywxLCJwIiw5NyksaGUoKSgpKSwyJmMpe2NvbnN0IGE9UmUoKTtmZSgpLE1lKCJuZ0lmIixhLnRhYmxlKSxmZSgpLE1lKCJuZ0lmIiwhKGEubGlifHxhLnRhYmxlfHxhLm5vRGF0YVJlcUVycnx8YS5ub0RhdGEpKSxmZSgpLE1lKCJuZ0lmIiwhYS5ub0RhdGEmJiFhLm5vRGF0YVJlcUVy'@;
put 'ciYmIWEudGFibGUmJmEubGliKSxmZSgpLE1lKCJuZ0lmIixhLm5vRGF0YXx8YS5ub0RhdGFSZXFFcnIpLGZlKCksTWUoIm5nSWYiLCFhLm5vRGF0YSYmIWEubm9EYXRhUmVxRXJyJiZhLnRhYmxlKSxmZSgyKSxNZSgibmdJZiIsYS5saWNlbmNlU3RhdGUudmFsdWUudmlld2VyX3Jvd3NfYWxs'@;
put 'b3dlZCE9PWEuSW5maW5pdHkmJmEuaG90VGFibGUuZGF0YSYmYS5ob3RUYWJsZS5kYXRhLmxlbmd0aD5hLmxpY2VuY2VTdGF0ZS52YWx1ZS52aWV3ZXJfcm93c19hbGxvd2VkKX19bGV0IHpOPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZix2LE0sRCxaLHJlLGNlKXt0aGlzLmxp'@;
put 'Y2VuY2VTZXJ2aWNlPWEsdGhpcy5zYXNTdG9yZVNlcnZpY2U9ZCx0aGlzLnNhc1NlcnZpY2U9aCx0aGlzLnJvdXRlcj1mLHRoaXMucm91dGU9dix0aGlzLmV2ZW50U2VydmljZT1NLHRoaXMubG9nZ2VyU2VydmljZT1ELHRoaXMuaGVscGVyU2VydmljZT1aLHRoaXMubG9jYXRpb249cmUsdGhp'@;
put 'cy5jZGY9Y2UsdGhpcy5xdWVyeUZpbHRlckNvbXBMaXN0PW5ldyBmZCx0aGlzLmxpYnJhcmllc1BhZ2luZz0hMSx0aGlzLmxpYnJhcmllc1NlYXJjaD0iIix0aGlzLmxpYnJhcnlUYWJsZXNSZWY9IiIsdGhpcy5saWJyYXJpZXNUcmVlRXhwYW5kZWQ9ITEsdGhpcy5saWJpbmZvPW51bGwsdGhp'@;
put 'cy50YWJsZXVyaT1udWxsLHRoaXMuZmlsdGVyPSExLHRoaXMuZmlsdGVyQ29scz1bXSx0aGlzLm51bGxWYXJpYWJsZXM9ITEsdGhpcy5hYm9ydEFjdGl2ZT0hMSx0aGlzLnVybEZpbHRlclBrPW51bGwsdGhpcy5xdWVyeVRleHQ9IiIsdGhpcy53ZWJRdWVyeVRleHQ9IiIsdGhpcy5xdWVyeUVy'@;
put 'cj0hMSx0aGlzLnRhYmxlRmxhZz0hMCx0aGlzLmxpYnJhcmllc0xvYWRpbmc9ITEsdGhpcy5sb2FkaW5nVGFibGVWaWV3PSExLHRoaXMuc3dpdGNoRmxhZz0hMSx0aGlzLm5vRGF0YT0hMSx0aGlzLm5vRGF0YVJlcUVycj0hMSx0aGlzLnRhYmxlRGlzYWJsZT0hMSx0aGlzLmFjdGlvbkRpc2Fi'@;
put 'bGU9ITEsdGhpcy5vcGVuRG93bmxvYWQ9ITEsdGhpcy53ZWJRdWVyeT0hMSx0aGlzLndlYlF1ZXJ5VGFiPSExLHRoaXMuZG93bmxvYWRGb3JtYXQ9IkNTViIsdGhpcy5zYXNqc0NvbmZpZz1uZXcgbWguU0FTanNDb25maWcsdGhpcy5zZWFyY2hMb2FkaW5nPSExLHRoaXMuc2VhcmNoTnVtZXJp'@;
put 'Yz0hMSx0aGlzLm51bWJlck9mUm93cz1udWxsLHRoaXMuaGVhZGVyUGtzPVtdLHRoaXMuJGRhdGFGb3JtYXRzPW51bGwsdGhpcy5kYXRhc2V0SW5mbz0hMSx0aGlzLmRzbWV0YT1bXSx0aGlzLnZlcnNpb25zPVtdLHRoaXMuZHNOb3RlPSIiLHRoaXMubGljZW5jZVN0YXRlPXRoaXMubGljZW5j'@;
put 'ZVNlcnZpY2UubGljZW5jZVN0YXRlLHRoaXMuSW5maW5pdHk9MS8wLHRoaXMuaG90VGFibGU9e2RhdGE6W10sY29sSGVhZGVyczpbXSxjb2x1bW5zOltdLGhlaWdodDoiMTAwJSIsbWF4Um93czp0aGlzLmxpY2VuY2VTdGF0ZS52YWx1ZS52aWV3ZXJfcm93c19hbGxvd2VkfHwxLzAsc2V0dGlu'@;
put 'Z3M6e30sbGljZW5zZUtleTp2b2lkIDAscm93SGVhZGVyczpiZT0+IiAiLGFmdGVyR2V0Q29sSGVhZGVyOihiZSxFZSxCZSk9PntFZS5jbGFzc0xpc3QuYWRkKEtuLmhhbmRzb250YWJsZS5kYXJrVGFibGVIZWFkZXJDbGFzcyl9LHJvd0hlYWRlcldpZHRoOjE1LHJvd0hlaWdodHM6MjAsY29u'@;
put 'dGV4dE1lbnU6WyJjb3B5X3dpdGhfY29sdW1uX2hlYWRlcnMiLCJjb3B5X2NvbHVtbl9oZWFkZXJzX29ubHkiXSxjb3B5UGFzdGU6e2NvcHlDb2x1bW5IZWFkZXJzOiEwLGNvcHlDb2x1bW5IZWFkZXJzT25seTohMH0sZHJvcGRvd25NZW51OntpdGVtczp7bWFrZV9yZWFkX29ubHk6e25hbWU6'@;
put 'Im1ha2VfcmVhZF9vbmx5In0sYWxpZ25tZW50OntuYW1lOiJhbGlnbm1lbnQifSxzcDE6e25hbWU6Ii0tLS0tLS0tLSJ9LGluZm86e25hbWU6InRlc3QgaW5mbyIscmVuZGVyZXI6KGJlLEVlLEJlLHFlLHJ0LHB0KT0+e2NvbnN0IGR0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTts'@;
put 'ZXQgSnQsdm49Ik5vIGluZm8gZm91bmQiO2lmKHRoaXMuaG90SW5zdGFuY2Upe2NvbnN0IENuPXRoaXMuaG90SW5zdGFuY2UuZ2V0U2VsZWN0ZWQoKXx8W10sdG49Q24/Q25bMF1bMV06LTEsTW49dGhpcy5ob3RJbnN0YW5jZT8uY29sVG9Qcm9wKHRuKTtKdD10aGlzLiRkYXRhRm9ybWF0cz8u'@;
put 'dmFyc1tNbl0sSnQmJih2bj1gTEFCRUw6ICR7SnQ/LmxhYmVsfTxicj5UWVBFOiAke0p0Py50eXBlfTxicj5MRU5HVEg6ICR7SnQ/Lmxlbmd0aH08YnI+Rk9STUFUOiAke0p0Py5mb3JtYXR9YCl9cmV0dXJuIGR0LmlubmVySFRNTD12bixkdH19fX19LHRoaXMuaG90SW5zdGFuY2U9bnVsbCx0'@;
put 'aGlzLmhvdEluc3RhbmNlQ2xpY2tMaXN0ZW5lcj0hMSx0aGlzLnZpZXdib3hPcGVuPSExLHRoaXMuaG90VGFibGVSZWdpc3RlcmVyPW5ldyBZbSx0aGlzLnNhc2pzQ29uZmlnPXRoaXMuc2FzU2VydmljZS5nZXRTYXNqc0NvbmZpZygpfW5nT25Jbml0KCl7IiIhPT1Lbi52aWV3ZXIuY3VycmVu'@;
put 'dFNlbGVjdGlvbiYmMD09PU9iamVjdC5rZXlzKHRoaXMucm91dGUuc25hcHNob3QucGFyYW1zKS5sZW5ndGgmJnRoaXMucm91dGVyLm5hdmlnYXRlKFtLbi52aWV3ZXIuY3VycmVudFNlbGVjdGlvbl0se3F1ZXJ5UGFyYW1zSGFuZGxpbmc6InByZXNlcnZlIn0pLHZvaWQgMCE9PXRoaXMucm91'@;
put 'dGUuc25hcHNob3QucGFyYW1zLmxpYk1lbSYmKEtuLnZpZXdlci5jdXJyZW50U2VsZWN0aW9uPSJ2aWV3L2RhdGEiKSx0aGlzLmxpY2VuY2VTZXJ2aWNlLmhvdF9saWNlbnNlX2tleS5zdWJzY3JpYmUoYT0+e3RoaXMuaG90VGFibGUubGljZW5zZUtleT1hfSl9bmV3Vmlld2JveCgpe3RoaXMu'@;
put 'dmlld2JveE9wZW49ITB9cmVzZXRGaWx0ZXIoKXt0aGlzLnF1ZXJ5RmlsdGVyQ29tcExpc3QuZmlyc3QmJnRoaXMucXVlcnlGaWx0ZXJDb21wTGlzdC5maXJzdC5yZXNldEZpbHRlcigpfXNlYXJjaFRhYmxlKGEpe3ZhciBkPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe2Quc2VhcmNoTG9h'@;
put 'ZGluZz0hMDtsZXQgaD1hLnZhbHVlLGY9ZC5saWIrIi4iK2QudGFibGUsdj1wYXJzZUludChkLnJvdXRlLnNuYXBzaG90LnBhcmFtcy5maWx0ZXJJZCl8fDA7eWllbGQgZC5zYXNTdG9yZVNlcnZpY2Uudmlld0RhdGFTZWFyY2goaCxkLnNlYXJjaE51bWVyaWMsZix2KS50aGVuKE09PntNLnNh'@;
put 'c3BhcmFtc3x8TS52aWV3RGF0YT8oZC5ob3RUYWJsZS5kYXRhPU0udmlld2RhdGEsZC4kZGF0YUZvcm1hdHM9TS4kdmlld2RhdGEsZC5kc21ldGE9TS5kc21ldGEsZC52ZXJzaW9ucz1NLnZlcnNpb25zfHxbXSxkLnNldERTTm90ZSgpLGQubnVtYmVyT2ZSb3dzPU0uc2FzcGFyYW1zWzBdLk5P'@;
put 'QlMsZC5xdWVyeVRleHQ9TS5zYXNwYXJhbXNbMF0uRklMVEVSX1RFWFQsZC5oZWFkZXJQa3M9TS5zYXNwYXJhbXNbMF0uUEtfRklFTERTLnNwbGl0KCIgIiksMD09PWQuaG90VGFibGUuZGF0YS5sZW5ndGg/ZC5ub0RhdGE9ITA6KGQubm9EYXRhPSExLGQudGFibGVGbGFnPSExLGQuc2V0dXBI'@;
put 'b3QoKSkpOmQuc2VhcmNoTG9hZGluZz0hMX0pLmNhdGNoKE09PntkLmxvZ2dlclNlcnZpY2UuZXJyb3IoTSl9KSxkLnNlYXJjaExvYWRpbmc9ITF9KSgpfXJlbG9hZFRhYmxlRGF0YSgpe3RoaXMudmlld0RhdGEodGhpcy51cmxGaWx0ZXJQa3x8MCl9cmVsb2FkTGliSW5mbygpe3ZhciBhPXRo'@;
put 'aXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe2EubGliaW5mbz1udWxsLGEuc2FzU3RvcmVTZXJ2aWNlLnJlZnJlc2hMaWJJbmZvKGEubGliKS50aGVuKGZ1bmN0aW9uKCl7dmFyIGQ9ZWUoZnVuY3Rpb24qKGgpe2EubGliaW5mbz1oLmxpYmluZm8sS24udmlld2VyLmxpYmluZm89YS5saWJpbmZv'@;
put 'O2NvbnN0IGY9YS5saWJyYXJpZXMuZmluZCh2PT52LkxJQlJBUllSRUY9PT1hLmxpYik7ZiYmKGYubGliaW5mbz1hLmxpYmluZm8pfSk7cmV0dXJuIGZ1bmN0aW9uKGgpe3JldHVybiBkLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KCksZD0+e2EubG9nZ2VyU2VydmljZS5lcnJvcihkKSxudWxs'@;
put 'PT09YS5saWJpbmZvJiYoYS5saWJpbmZvPVtdKX0pfSkoKX1maWx0ZXJGbihhKXt0aGlzLmxpYnJhcmllcz10aGlzLmxpYnJhcmllcy5maWx0ZXIoaD0+LTEhPT1oLkxJQlJBUllOQU1FLnRvTG93ZXJDYXNlKCkuaW5kZXhPZihhLnRvTG9jYWxlTG93ZXJDYXNlKCkpKX1kb3dubG9hZERhdGEo'@;
put 'KXtsZXQgYT10aGlzLnNhc2pzQ29uZmlnLnNlcnZlclVybCxkPXRoaXMuc2FzanNDb25maWcuYXBwTG9jO2NvbnN0IGg9dGhpcy5zYXNTZXJ2aWNlLmdldEV4ZWN1dGlvblBhdGgoKTtsZXQgRCxmPSImdHlwZT0iK3RoaXMuZG93bmxvYWRGb3JtYXQsdj0iJnRhYmxlPSIrdGhpcy50YWJsZVRp'@;
put 'dGxlLE09IlNBU1ZJWUEiPT09dGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJUeXBlP2AmX2NvbnRleHRuYW1lPSR7dGhpcy5zYXNqc0NvbmZpZy5jb250ZXh0TmFtZX1gOiIiO0Q9dHlwZW9mIHRoaXMucm91dGUuc25hcHNob3QucGFyYW1zLmZpbHRlcklkPiJ1Ij8wOnBhcnNlSW50KHRoaXMucm91'@;
put 'dGUuc25hcHNob3QucGFyYW1zLmZpbHRlcklkKSx3aW5kb3cub3BlbihhK2grIi8/X3Byb2dyYW09IitkKyIvc2VydmljZXMvcHVibGljL2dldHJhd2RhdGEiK2YrditNKyImZmlsdGVyPSIrRCksdGhpcy5vcGVuRG93bmxvYWQ9ITF9ZG93bmxvYWREREwoKXtsZXQgYT10aGlzLmxpYixkPXRo'@;
put 'aXMudGFibGUsaD10aGlzLmRvd25sb2FkRm9ybWF0LnJlcGxhY2UoIl9EREwiLCIiKSxmPXRoaXMuc2FzanNDb25maWcuc2VydmVyVXJsLHY9dGhpcy5zYXNqc0NvbmZpZy5hcHBMb2M7Y29uc3QgTT10aGlzLnNhc1NlcnZpY2UuZ2V0RXhlY3V0aW9uUGF0aCgpO3dpbmRvdy5vcGVuKGYrTSsi'@;
put 'Lz9fcHJvZ3JhbT0iK3YrIi9zZXJ2aWNlcy9wdWJsaWMvZ2V0ZGRsIitgJmRzPSR7ZH0mbGlicmVmPSR7YX0mZmxhdm91cj0ke2h9JHsiU0FTVklZQSI9PT10aGlzLnNhc2pzQ29uZmlnLnNlcnZlclR5cGU/YCZfY29udGV4dG5hbWU9JHt0aGlzLnNhc2pzQ29uZmlnLmNvbnRleHROYW1lfWA6'@;
put 'IiJ9YCksdGhpcy5vcGVuRG93bmxvYWQ9ITF9b25DbGlDb21tYW5kRm9jdXMoYSl7YS5wcmV2ZW50RGVmYXVsdCgpLGEudGFyZ2V0LnNlbGVjdCgpfWVkaXRUYWJsZSgpe3RoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoIi9lZGl0b3IvIit0aGlzLmxpYlRhYil9dGFibGVFZGl0RXhpc3RzKCl7'@;
put 'bGV0IGE9e307YT1Lbi5lZGl0b3IubGlic0FuZFRhYmxlcztsZXQgZD10aGlzLmxpYlRhYi5zcGxpdCgiLiIpWzFdLGg9dGhpcy5saWJUYWIuc3BsaXQoIi4iKVswXTtyZXR1cm4hIWFbaF0mJmFbaF0uaW5jbHVkZXMoZCl9Z29Ub0xpbmVhZ2UoKXtsZXQgZD1gL3ZpZXcvbGluZWFnZS8ke3Ro'@;
put 'aXMudGFibGV1cmkuc3BsaXQoIlxcIilbMV19L1JFVkVSU0VgO3RoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoZCl9c2hvd1dlYlF1ZXJ5KCl7bGV0IGE7dGhpcy53ZWJRdWVyeT0hMCxhPXR5cGVvZiB0aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtcy5maWx0ZXJJZD4idSI/MDpwYXJzZUludCh0'@;
put 'aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtcy5maWx0ZXJJZCk7bGV0IGQ9d2luZG93LmxvY2F0aW9uLnBvcnQubGVuZ3RoPjA/IjoiK3dpbmRvdy5sb2NhdGlvbi5wb3J0OiIiO2NvbnN0IGg9dGhpcy5zYXNTZXJ2aWNlLmdldEV4ZWN1dGlvblBhdGgoKTtsZXQgdj1gJHt3aW5kb3cubG9jYXRp'@;
put 'b24ucHJvdG9jb2x9Ly8ke3dpbmRvdy5sb2NhdGlvbi5ob3N0bmFtZX0ke2R9LyR7aH0vP19wcm9ncmFtPSR7dGhpcy5zYXNqc0NvbmZpZy5hcHBMb2N9L3NlcnZpY2VzL3B1YmxpYy9nZXRyYXdkYXRhJnR5cGU9V0VCJHt0aGlzLndlYlF1ZXJ5VGFiPyJUQUIiOiJDU1YifSZ0YWJsZT0ke3Ro'@;
put 'aXMudGFibGVUaXRsZX0keyImZmlsdGVyPSIrYX1gO3RoaXMud2ViUXVlcnlUZXh0PXYucmVwbGFjZSgvIC9naW0sIiUyMCIpfWNvcHlUb0NsaXAoKXtsZXQgYT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZXh0YXJlYSIpO2Euc3R5bGUucG9zaXRpb249ImZpeGVkIixhLnN0eWxlLmxlZnQ9'@;
put 'IjAiLGEuc3R5bGUudG9wPSIwIixhLnN0eWxlLm9wYWNpdHk9IjAiLGEudmFsdWU9dGhpcy53ZWJRdWVyeVRleHQsZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChhKSxhLmZvY3VzKCksYS5zZWxlY3QoKSxkb2N1bWVudC5leGVjQ29tbWFuZCgiY29weSIpLGRvY3VtZW50LmJvZHkucmVtb3Zl'@;
put 'Q2hpbGQoYSl9Z29Ub1ZpZXdlcigpe3RoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoIi92aWV3L2RhdGEiKX1zaG93VGFibGVTZWxlY3QoKXt0aGlzLnRhYmxlRmxhZz0hdGhpcy50YWJsZUZsYWd9Y2hlY2tFeHBhbmQoYSl7fWNvbGxhcHNlTGlicmFyeUl0ZW1zKGEsZCl7YS5mb3JFYWNoKGg9'@;
put 'PntoLkxJQlJBUllSRUYhPT1kLkxJQlJBUllSRUYmJihoLmV4cGFuZGVkPSExKX0pfWxvYWRNb3JlTGlicmFyaWVzKCl7dGhpcy5saWJyYXJpZXNQYWdpbmd8fCh0aGlzLmxpYnJhcmllc1BhZ2luZz0hMCx0aGlzLmhlbHBlclNlcnZpY2UuZGlzcGxheUxpYnJhcmllcyh0aGlzLmxpYnJhcmll'@;
put 'cywhMCksdGhpcy5saWJyYXJpZXNQYWdpbmc9ITEpfXRyZWVOb2RlQ2xpY2tlZChhLGQpeyJDb2xsYXBzZSI9PT1hLnRhcmdldC50aXRsZSYmdGhpcy5jb2xsYXBzZUxpYnJhcnlJdGVtcyh0aGlzLmxpYnJhcmllcyxkKX1saWJyYXJ5RXhwYW5kZWRDaGFuZ2UoYSxkKXthJiZ0aGlzLmNvbGxh'@;
put 'cHNlTGlicmFyeUl0ZW1zKHRoaXMubGlicmFyaWVzLGQpfWxpYnJhcnlPbkNsaWNrKGEsZCxoKXt2YXIgZj10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXtpZihkLnRhYmxlcz9kLmV4cGFuZGVkPSEhaHx8IWQuZXhwYW5kZWQ6eWllbGQgZi5zZWxlY3RUYWJsZShhLCExLGQpLGQuZXhwYW5k'@;
put 'ZWQpe2YuY2RmLmRldGVjdENoYW5nZXMoKTtsZXQgdj1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKGAjc2VhcmNoXyR7ZC5MSUJSQVJZUkVGfWApO2YubG9nZ2VyU2VydmljZS5sb2coIltsaWJUcmVlU2VhcmNoSW5wdXRdIix2KSx2JiZ2LmZvY3VzKCksZCYmZC5saWJpbmZvJiYoZi5saWJpbmZv'@;
put 'PWQubGliaW5mbyksZi5saWImJmYudGFibGUmJiFoP2Yucm91dGVyLm5hdmlnYXRlKFsiL3ZpZXcvZGF0YSJdLHtza2lwTG9jYXRpb25DaGFuZ2U6ITAscXVlcnlQYXJhbXNIYW5kbGluZzoicHJlc2VydmUifSkudGhlbigoKT0+e2Yucm91dGVyLm5hdmlnYXRlKFsiL3ZpZXcvZGF0YS8iK2Yu'@;
put 'bGliXSx7cXVlcnlQYXJhbXNIYW5kbGluZzoicHJlc2VydmUifSl9KTpmLmxpYiYmIWYudGFibGUmJmYubG9jYXRpb24ucmVwbGFjZVN0YXRlKCIvdmlldy9kYXRhLyIrZi5saWIpfWYuY29sbGFwc2VMaWJyYXJ5SXRlbXMoZi5saWJyYXJpZXMsZCl9KSgpfW9uVGFibGVDbGljayhhLGQpe3Ro'@;
put 'aXMubGliPWQuTElCUkFSWVJFRix0aGlzLnRhYmxlPWEsdGhpcy5zZWxlY3RMaWJUYWJsZShhKSx0aGlzLnZpZXdEYXRhKDApfXNlbGVjdFRhYmxlKGEsZCxoKXt2YXIgZj10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXtoLmxvYWRpbmdUYWJsZXM9ITAsZi50YWJsZT0hMSxmLnRhYmxlRGlz'@;
put 'YWJsZT0hMCwiUGxlYXNlIHNlbGVjdCBsaWJyYXJ5IiE9PWE/S24udmlld2VyLnRhYmxlc1NldCYmZD8oZi5hYm9ydEFjdGl2ZT0hMSxmLnRhYmxlRGlzYWJsZT0hMSxmLnRhYmxlcz1Lbi52aWV3ZXIudGFibGVzLGYubGliaW5mbz1Lbi52aWV3ZXIubGliaW5mbyk6KGYubGliaW5mbz1udWxs'@;
put 'LHlpZWxkIGYuc2FzU3RvcmVTZXJ2aWNlLnZpZXdUYWJsZXMoYSkudGhlbih2PT57Zi5hYm9ydEFjdGl2ZT0hMSxmLnRhYmxlRGlzYWJsZT0hMTtsZXQgTT12Lm1wdGFibGVzLm1hcChmdW5jdGlvbihEKXtyZXR1cm4gRC5NRU1OQU1FfSk7Zi5saWJpbmZvPXYubGliaW5mb3x8W10sZi50YWJs'@;
put 'ZXM9TSxoJiYoaC50YWJsZXM9TSxoLmxpYmluZm89Zi5saWJpbmZvKSxLbi52aWV3ZXIubGlicmFyaWVzPWYubGlicmFyaWVzLEtuLnZpZXdlci5saWJyYXJ5PWYubGliLEtuLnZpZXdlci50YWJsZXM9Zi50YWJsZXMsS24udmlld2VyLmxpYmluZm89Zi5saWJpbmZvLEtuLnZpZXdlci50YWJs'@;
put 'ZXNTZXQ9ITB9KS5jYXRjaCh2PT57Zi5sb2dnZXJTZXJ2aWNlLmVycm9yKHYpLGYuYWJvcnRBY3RpdmU9ITAsZi5ub0RhdGE9ITAsZi50YWJsZVRpdGxlPSIiLGYudGFibGVEaXNhYmxlPSEwfSkpOmYudGFibGVEaXNhYmxlPSEwLEtuLnZpZXdlci5saWJyYXJ5PWYubGliLGR8fGYuY2xlYXJH'@;
put 'bG9iYWxzRmlsdGVyKCksaC5sb2FkaW5nVGFibGVzPSExLGguZXhwYW5kZWQ9IWguZXhwYW5kZWR9KSgpfXNlbGVjdExpYlRhYmxlKGEsZCl7IlBsZWFzZSBzZWxlY3QgdGFibGUiIT09YT8odGhpcy5hY3Rpb25EaXNhYmxlPSExLHRoaXMubGliVGFiPXRoaXMubGliKyIuIit0aGlzLnRhYmxl'@;
put 'KTp0aGlzLmFjdGlvbkRpc2FibGU9ITAsS24udmlld2VyLnRhYmxlPWEsZHx8dGhpcy5jbGVhckdsb2JhbHNGaWx0ZXIoKSx0aGlzLmxvZ2dlclNlcnZpY2UubG9nKHRoaXMubGliVGFiKX1jbGVhckdsb2JhbHNGaWx0ZXIoKXtLbi52aWV3ZXIuZmlsdGVyLmxpYmRzPSIiLEtuLnZpZXdlci5m'@;
put 'aWx0ZXIud2hlcmVDbGF1c2U9IiIsS24udmlld2VyLmZpbHRlci5ncm91cExvZ2ljPSIiLEtuLnZpZXdlci5maWx0ZXIuY2xhdXNlcz1bXSxLbi52aWV3ZXIuZmlsdGVyLmNvbHM9W10sS24udmlld2VyLmZpbHRlci52YWxzPVtdfWxpYlRhYkFjdGl2ZShhLGQpe3JldHVybiEhdGhpcy5saWJU'@;
put 'YWImJmErIi4iK2Q9PT10aGlzLmxpYlRhYn10cmVlT25GaWx0ZXIoYSxkKXt0aGlzLmhlbHBlclNlcnZpY2UudHJlZU9uRmlsdGVyKGEsZCl9bGlicmFyeU9uRmlsdGVyKCl7dGhpcy5oZWxwZXJTZXJ2aWNlLmxpYnJhcnlPbkZpbHRlcih0aGlzLmxpYnJhcmllcyx0aGlzLmxpYnJhcmllc1Nl'@;
put 'YXJjaCwiTElCUkFSWU5BTUUiKSxLbi52aWV3ZXIubGlicmFyaWVzU2VhcmNoPXRoaXMubGlicmFyaWVzU2VhcmNofWxpYnJhcnlSZXNldEZpbHRlcigpe3RoaXMuaGVscGVyU2VydmljZS5yZXNldEFycmF5RmlsdGVyKHRoaXMubGlicmFyaWVzKX12aWV3RGF0YShhKXt2YXIgZD10aGlzO3Jl'@;
put 'dHVybiBlZShmdW5jdGlvbiooKXtsZXQgaDtpZihkLmxvYWRpbmdUYWJsZVZpZXc9ITAsdHlwZW9mIGQubGliRGF0YXNldD4idSIpaD1kLmxpYisiLiIrZC50YWJsZTtlbHNlIGlmKHR5cGVvZiBkLmxpYj4idSImJnR5cGVvZiBkLnRhYmxlPiJ1Iil7bGV0IE09W107aWYoTT1kLmxpYkRhdGFz'@;
put 'ZXQuc3BsaXQoIi4iKSxLbi52aWV3ZXIuc3RhcnR1cFNldD9kLmxpYnJhcmllcz1Lbi52aWV3ZXIubGlicmFyaWVzOnlpZWxkIGQuc2FzU3RvcmVTZXJ2aWNlLnZpZXdMaWJzKCkudGhlbihEPT57ZC5saWJyYXJpZXM9RC5zYXNsaWJzfSkuY2F0Y2goRD0+e2QubG9nZ2VyU2VydmljZS5lcnJv'@;
put 'cihEKX0pLGQubGliPU1bMF0sS24udmlld2VyLnN0YXJ0dXBTZXQpZC50YWJsZXM9S24udmlld2VyLnRhYmxlcztlbHNle2xldCBEPWQubGlicmFyaWVzLmZpbmQoWj0+Wi5MSUJSQVJZUkVGLnRvTG93ZXJDYXNlKCk9PT1kLmxpYi50b0xvd2VyQ2FzZSgpKTt5aWVsZCBkLnNhc1N0b3JlU2Vy'@;
put 'dmljZS52aWV3VGFibGVzKGQubGliKS50aGVuKFo9PntkLnRhYmxlcz1aLm1wdGFibGVzLm1hcChmdW5jdGlvbihyZSl7cmV0dXJuIHJlLk1FTU5BTUV9KSxELnRhYmxlcz1kLnRhYmxlcyxLbi52aWV3ZXIubGlicmFyaWVzPWQubGlicmFyaWVzLEtuLnZpZXdlci50YWJsZXM9ZC50YWJsZXMs'@;
put 'S24udmlld2VyLnN0YXJ0dXBTZXQ9ITB9KS5jYXRjaChaPT57ZC5sb2dnZXJTZXJ2aWNlLmVycm9yKFopfSl9ZC50YWJsZT1NWzFdLGQudGFibGVGbGFnPSExLGg9ZC5saWJEYXRhc2V0LGQubGliVGFiPWh9ZWxzZSBLbi52aWV3ZXIuc3RhcnR1cFNldD9kLmxpYnJhcmllcz1Lbi52aWV3ZXIu'@;
put 'bGlicmFyaWVzOnlpZWxkIGQuc2FzU3RvcmVTZXJ2aWNlLnZpZXdMaWJzKCkudGhlbihNPT57ZC5saWJyYXJpZXM9TS5zYXNsaWJzfSkuY2F0Y2goTT0+e2QubG9nZ2VyU2VydmljZS5lcnJvcihNKX0pLHR5cGVvZiBkLnRhYmxlPCJ1IiYmKEtuLnZpZXdlci5zdGFydHVwU2V0P2QudGFibGVz'@;
put 'PUtuLnZpZXdlci50YWJsZXM6eWllbGQgZC5zYXNTdG9yZVNlcnZpY2Uudmlld1RhYmxlcyhkLmxpYikudGhlbihNPT57ZC50YWJsZXM9TS5tcHRhYmxlcy5tYXAoZnVuY3Rpb24oRCl7cmV0dXJuIEQuTUVNTkFNRX0pfSkuY2F0Y2goTT0+e2QubG9nZ2VyU2VydmljZS5lcnJvcihNKSxkLnJv'@;
put 'dXRlci5uYXZpZ2F0ZShbIi92aWV3L2RhdGEiXSx7cXVlcnlQYXJhbXNIYW5kbGluZzoicHJlc2VydmUifSl9KSxkLnRhYmxlRmxhZz0hMSxoPWQubGliKyIuIitkLnRhYmxlLGQudGFibGVUaXRsZT1oLGQubGliVGFiPWgpO2Qucm91dGVyLnVybC5zcGxpdCgiLyIpLmxlbmd0aD4zJiZoJiYo'@;
put 'eWllbGQgZC5zYXNTdG9yZVNlcnZpY2Uudmlld0RhdGEoaCxhKS50aGVuKE09PntpZihNLnF1ZXJ5Lmxlbmd0aD4wJiYidmlldyI9PT1Lbi5yb290UGFyYW0mJjA9PT1Lbi52aWV3ZXIuZmlsdGVyLmNsYXVzZXMubGVuZ3RoJiYoS24udmlld2VyLmZpbHRlci5xdWVyeT1kLmhlbHBlclNlcnZp'@;
put 'Y2UuZGVlcENsb25lKE0ucXVlcnkpLEtuLnZpZXdlci5maWx0ZXIubGliZHM9ZC5yb3V0ZS5zbmFwc2hvdC5wYXJhbXMubGliTWVtLGQuc2FzU3RvcmVTZXJ2aWNlLmluaXRpYWxpemVHbG9iYWxGaWx0ZXJDbGF1c2UoInZpZXdlciIsTS5jb2xzKSksZC5hYm9ydEFjdGl2ZT0hMSxkLmZpbHRl'@;
put 'ckNvbHM9TS5jb2xzLHplZShkLmZpbHRlckNvbHMsW10sTS4kdmlld2RhdGEpLGQubnVtYmVyT2ZSb3dzPU0uc2FzcGFyYW1zWzBdLk5PQlMsZC5oZWFkZXJQa3M9TS5zYXNwYXJhbXNbMF0uUEtfRklFTERTLnNwbGl0KCIgIiksIlNBUzkiPT09ZC5zYXNqc0NvbmZpZy5zZXJ2ZXJUeXBlKXts'@;
put 'ZXQgYmU9TS5zYXNwYXJhbXNbMF0uVEFCTEVVUkk7YmUmJmJlLmxlbmd0aD4wJiYoZC50YWJsZXVyaT1iZSl9ZC5ob3RUYWJsZS5kYXRhPU0udmlld2RhdGEsZC4kZGF0YUZvcm1hdHM9TS4kdmlld2RhdGEsZC5kc21ldGE9TS5kc21ldGEsZC52ZXJzaW9ucz1NLnZlcnNpb25zfHxbXSxkLnNl'@;
put 'dERTTm90ZSgpLGQucXVlcnlUZXh0PU0uc2FzcGFyYW1zWzBdLkZJTFRFUl9URVhUO2xldCBEPVtdLFo9W107Zm9yKGxldCBiZSBpbiBNLnZpZXdkYXRhWzBdKWJlJiZaLnB1c2goYmUpO2ZvcihsZXQgYmU9MDtiZTxaLmxlbmd0aDtiZSsrKUQucHVzaCh7ZGF0YTpaW2JlXX0pO2QuaG90VGFi'@;
put 'bGUuY29sSGVhZGVycz1aLGQuaG90VGFibGUuY29sdW1ucz1ELGQuaG90VGFibGUuY2VsbHM9ZnVuY3Rpb24oKXtyZXR1cm57cmVhZE9ubHk6ITB9fSxkLnRhYmxlRmxhZz0hMTtsZXQgY2U9W107Y2U9aC5zcGxpdCgiLiIpLGQubGliPWNlWzBdLGQudGFibGU9Y2VbMV0sMD09PWQuaG90VGFi'@;
put 'bGUuZGF0YS5sZW5ndGg/KGQubm9EYXRhPSEwLGQudGFibGVGbGFnPSEwKTooZC5ub0RhdGE9ITEsZC50YWJsZUZsYWc9ITEpLGQubm9EYXRhUmVxRXJyPSExfSkuY2F0Y2goTT0+e2QubG9nZ2VyU2VydmljZS5lcnJvcihNKSxkLmFib3J0QWN0aXZlPSEwLGQubm9EYXRhUmVxRXJyPSEwfSkp'@;
put 'LGQucm91dGVyLnVybC5pbmNsdWRlcygiL2RhdGEiKSYmaCYmZC5yb3V0ZXIubmF2aWdhdGUoMCE9PWE/WyIvdmlldy9kYXRhLyIraCsiLyIrYV06WyIvdmlldy9kYXRhLyIraF0se3F1ZXJ5UGFyYW1zSGFuZGxpbmc6InByZXNlcnZlIn0pO2xldCBmPWQudGFibGUsdj1kLmxpYnJhcmllcy5m'@;
put 'aW5kKE09Pk0uTElCUkFSWVJFRi50b0xvd2VyQ2FzZSgpPT09ZC5saWIudG9Mb3dlckNhc2UoKSk7dj8oS24udmlld2VyLmxpYnJhcmllcy5sZW5ndGg+MCYmKGQubGlicmFyaWVzPUtuLnZpZXdlci5saWJyYXJpZXMsZC5saWJyYXJpZXNTZWFyY2g9S24udmlld2VyLmxpYnJhcmllc1NlYXJj'@;
put 'aCksZC5saWJyYXJ5T25DbGljayhkLmxpYix2LCEwKSk6ZC5saWJpbmZvPVtdLGQudGFibGU9Znx8ZC50YWJsZSxkLmxpYnJhcmllcyYmZC5oZWxwZXJTZXJ2aWNlLmRpc3BsYXlMaWJyYXJpZXMoZC5saWJyYXJpZXMpLGQucm91dGVyLnVybC5pbmNsdWRlcygiL2RhdGEiKSYmZC5ldmVudFNl'@;
put 'cnZpY2UuY2xvc2VTaWRlYmFyKCksZC5sb2FkaW5nVGFibGVWaWV3PSExLCFkLm5vRGF0YSYmIWQubm9EYXRhUmVxRXJyJiZoJiZkLnNldHVwSG90KCksZC5ob3RJbnN0YW5jZUNsaWNrTGlzdGVuZXJ8fHNldFRpbWVvdXQoKCk9PntsZXQgTT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiaG90'@;
put 'SW5zdGFuY2UiKTtNJiYoTS5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLEQ9PntzZXRUaW1lb3V0KCgpPT57bGV0IFo9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiLmRlYnVnLXN3aXRjaC1pdGVtIil8fHZvaWQgMDtaJiZaLmNsaWNrKCl9LDEwMCl9KSxkLmhvdEluc3RhbmNlQ2xpY2tM'@;
put 'aXN0ZW5lcj0hMCl9LDJlMyl9KSgpfW1heFdpZHRoQ2hla2VyKGEsZCl7cmV0dXJuIGE+MjAwPzIwMDphfW9wZW5RYigpe3RoaXMuZmlsdGVyPSEwLHRoaXMuY2RmLmRldGVjdENoYW5nZXMoKSx0aGlzLnNhc1N0b3JlU2VydmljZS5zZXRRdWVyeVZhcmlhYmxlcyh0aGlzLmxpYisiLiIrdGhp'@;
put 'cy50YWJsZSx0aGlzLmZpbHRlckNvbHMpfXNlbmRDbGF1c2UoKXt2YXIgYT10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXthLnN1Ym1pdExvYWRpbmc9ITA7bGV0IGQ9W10saD1bXTtpZih0eXBlb2YgYS5jbGF1c2VzPiJ1IilyZXR1cm4gYS5udWxsVmFyaWFibGVzPSEwLHZvaWQoYS5zdWJt'@;
put 'aXRMb2FkaW5nPSExKTt7bGV0IGY9YS5jbGF1c2VzLnF1ZXJ5T2JqO2lmKGZbMF0uZWxlbWVudHMubGVuZ3RoPDEpcmV0dXJuInZpZXciPT09S24ucm9vdFBhcmFtJiYoS24udmlld2VyLmZpbHRlci5jbGF1c2VzPVtdLEtuLnZpZXdlci5maWx0ZXIucXVlcnk9W10sS24udmlld2VyLmZpbHRl'@;
put 'ci5ncm91cExvZ2ljPSIiKSx2b2lkIGEucm91dGVyLm5hdmlnYXRlKFsiL3ZpZXcvZGF0YS8iK2EubGliZHNdLHtxdWVyeVBhcmFtc0hhbmRsaW5nOiJwcmVzZXJ2ZSJ9KTtmb3IobGV0IHY9MDt2PGYubGVuZ3RoO3YrKyl7Y29uc3QgTT1mW3ZdLmVsZW1lbnRzO2Q9TS5maWx0ZXIoZnVuY3Rp'@;
put 'b24oRCl7cmV0dXJuIG51bGw9PT1ELnZhcmlhYmxlfSksZC5sZW5ndGgmJmgucHVzaChNKX19aWYoaC5sZW5ndGgpcmV0dXJuIGEubnVsbFZhcmlhYmxlcz0hMCx2b2lkKGEuc3VibWl0TG9hZGluZz0hMSk7e2NvbnN0IGY9e2dyb3VwTG9naWM6YS5jbGF1c2VzLmdyb3VwTG9naWMsZmlsdGVy'@;
put 'R3JvdXBzOltdfTthLmNsYXVzZXMucXVlcnlPYmouZm9yRWFjaChNPT57Y29uc3QgRD17ZmlsdGVyQ2xhdXNlczpbXX07TS5lbGVtZW50cy5mb3JFYWNoKFo9PntELmZpbHRlckNsYXVzZXMucHVzaChhLmhlbHBlclNlcnZpY2UuZGVlcENsb25lKFopKX0pLEQuY2xhdXNlTG9naWM9TS5jbGF1'@;
put 'c2VMb2dpYyxmLmZpbHRlckdyb3Vwcy5wdXNoKGEuaGVscGVyU2VydmljZS5kZWVwQ2xvbmUoRCkpfSk7Y29uc3Qgdj1hLnNhc1N0b3JlU2VydmljZS5jcmVhdGVGaWx0ZXJRdWVyeVRhYmxlKGYpO3lpZWxkIGEuc2FzU3RvcmVTZXJ2aWNlLnNhdmVRdWVyeShhLmxpYmRzLHYpLnRoZW4oTT0+'@;
put 'e2EucXVlcnlUZXh0PU0ucmVzdWx0WzBdLkZJTFRFUl9URVhUO2xldCBEPU0ucmVzdWx0WzBdLkZJTFRFUl9SSzthLnJvdXRlci5uYXZpZ2F0ZShbIi92aWV3L2RhdGEvIithLmxpYmRzKyIvIitEXSx7cXVlcnlQYXJhbXNIYW5kbGluZzoicHJlc2VydmUifSksYS52aWV3RGF0YShEKSxhLmZp'@;
put 'bHRlcj0hMX0pLmNhdGNoKE09PnthLmxvZ2dlclNlcnZpY2UuZXJyb3IoTSl9KSxhLnN1Ym1pdExvYWRpbmc9ITF9fSkoKX1yZW1vdmVRdWVyeSgpe3RoaXMuc2FzU3RvcmVTZXJ2aWNlLnJlbW92ZUNsYXVzZSgpfWRhdGFzZXRJbmZvTW9kYWxSb3dDbGlja2VkKGEpe3ZvaWQgMCE9PWEuTE9B'@;
put 'RF9SRUYmJnRoaXMucm91dGVyLm5hdmlnYXRlKFtgL3N0YWdlLyR7YS5MT0FEX1JFRn1gXSl9c2V0RFNOb3RlKCl7Y29uc3QgYT10aGlzLmRzbWV0YS5maW5kKGY9PiJOT1RFUyI9PT1mLk5BTUUpLGQ9dGhpcy5kc21ldGEuZmluZChmPT4iRERfTE9OR0RFU0MiPT09Zi5OQU1FKSxoPXRoaXMu'@;
put 'ZHNtZXRhLmZpbmQoZj0+IkREX1NIT1JUREVTQyI9PT1mLk5BTUUpO3RoaXMuZHNOb3RlPWEmJmEuVkFMVUU/YS5WQUxVRTpkJiZkLlZBTFVFP2QuVkFMVUU6aCYmaC5WQUxVRT9oLlZBTFVFOiIifXNldHVwSG90KCl7c2V0VGltZW91dCgoKT0+eyF0aGlzLmxvYWRpbmdUYWJsZVZpZXcmJnRo'@;
put 'aXMubGliRGF0YXNldCYmKHRoaXMuaG90SW5zdGFuY2U9dGhpcy5ob3RUYWJsZVJlZ2lzdGVyZXIuZ2V0SW5zdGFuY2UoImhvdEluc3RhbmNlIiksdGhpcy5ob3RJbnN0YW5jZSYmdGhpcy5ob3RJbnN0YW5jZS51cGRhdGVTZXR0aW5ncyh7aGVpZ2h0OnRoaXMuaG90VGFibGUuaGVpZ2h0LG1v'@;
put 'ZGlmeUNvbFdpZHRoOmZ1bmN0aW9uKGEsZCl7cmV0dXJuIGE+NTAwPzUwMDphfSxhZnRlckdldENvbEhlYWRlcjooYSxkKT0+e2NvbnN0IGg9dGhpcy5ob3RJbnN0YW5jZT8uY29sVG9Qcm9wKGEpO2gmJnRoaXMuaGVhZGVyUGtzLmluZGV4T2YoaCk+LTEmJmQuY2xhc3NMaXN0LmFkZCgicHJp'@;
put 'bWFyeUtleUhlYWRlclN0eWxlIiksZC5jbGFzc0xpc3QuYWRkKEtuLmhhbmRzb250YWJsZS5kYXJrVGFibGVIZWFkZXJDbGFzcyl9fSkpfSwxZTMpfWxvYWRXaXRoUGFyYW1ldGVycygpe3ZhciBhPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe2Euc3dpdGNoRmxhZz0hMCxhLnRhYmxlVGl0'@;
put 'bGU9YS5yb3V0ZS5zbmFwc2hvdC5wYXJhbXMubGliTWVtfHwwLGEudXJsRmlsdGVyUGs9cGFyc2VJbnQoYS5yb3V0ZS5zbmFwc2hvdC5wYXJhbXMuZmlsdGVySWR8fCIwIik7bGV0IGg9YS5yb3V0ZS5zbmFwc2hvdC5wYXJhbXMubGliTWVtO2EubGliRGF0YXNldD1oLGguaW5jbHVkZXMoIi4i'@;
put 'KXx8KGEubGliPWgpLHlpZWxkIGEudmlld0RhdGEoYS51cmxGaWx0ZXJQayksYS5ub0RhdGE/c2V0VGltZW91dCgoKT0+e2EudGFibGVGbGFnPSEwfSwxMjAwKTpzZXRUaW1lb3V0KCgpPT57YS50YWJsZUZsYWc9ITF9LDEyMDApfSkoKX1sb2FkV2l0aG91dFBhcmFtZXRlcnMoKXt2YXIgYT10'@;
put 'aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXthLnN3aXRjaEZsYWc9ITEsYS5saWJyYXJpZXNMb2FkaW5nPSEwLEtuLnZpZXdlci5zdGFydHVwU2V0P3NldFRpbWVvdXQoKCk9PnthLmxpYnJhcmllcz1Lbi52aWV3ZXIubGlicmFyaWVzLGEubGlicmFyaWVzU2VhcmNoPUtuLnZpZXdlci5saWJy'@;
put 'YXJpZXNTZWFyY2gsYS5saWI9S24udmlld2VyLmxpYnJhcnksYS5saWJyYXJpZXNUcmVlRXhwYW5kZWQ9ITAsYS5saWJyYXJpZXNMb2FkaW5nPSExLGEuaGVscGVyU2VydmljZS5kaXNwbGF5TGlicmFyaWVzKGEubGlicmFyaWVzKX0sMTAwKTooYS5ub0RhdGFSZXFFcnI9ITEseWllbGQgYS5z'@;
put 'YXNTdG9yZVNlcnZpY2Uudmlld0xpYnMoKS50aGVuKGQ9PnthLmxpYnJhcmllcz1kLnNhc2xpYnMsS24udmlld2VyLmxpYnJhcmllcz1hLmxpYnJhcmllcyxLbi52aWV3ZXIuc3RhcnR1cFNldD0hMCxhLmxpYnJhcmllc0xvYWRpbmc9ITEsYS5oZWxwZXJTZXJ2aWNlLmRpc3BsYXlMaWJyYXJp'@;
put 'ZXMoYS5saWJyYXJpZXMpfSkuY2F0Y2goZD0+e2EubG9nZ2VyU2VydmljZS5lcnJvcihkKSxhLmxpYnJhcmllc0xvYWRpbmc9ITEsYS5ub0RhdGFSZXFFcnI9ITB9KSl9KSgpfW5nQWZ0ZXJWaWV3SW5pdCgpe31uZ0FmdGVyQ29udGVudEluaXQoKXt2YXIgYT10aGlzO3JldHVybiBlZShmdW5j'@;
put 'dGlvbiooKXthLmhvdFRhYmxlLmRhdGEubGVuZ3RoPjAmJihhLnRhYmxlRmxhZz0hMCksYS5fcXVlcnk9YS5zYXNTdG9yZVNlcnZpY2UucXVlcnkuc3Vic2NyaWJlKGQ9PnthLndoZXJlU3RyaW5nPWQuc3RyaW5nLGEuY2xhdXNlcz1kLm9iaixhLmxpYmRzPWQubGliZHN9KSx0eXBlb2YgYS5y'@;
put 'b3V0ZS5zbmFwc2hvdC5wYXJhbXMubGliTWVtPCJ1Ij9hLmxvYWRXaXRoUGFyYW1ldGVycygpOmEubG9hZFdpdGhvdXRQYXJhbWV0ZXJzKCl9KSgpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKEdlKHUxKSxHZShraCksR2UoQnMpLEdlKExzKSxH'@;
put 'ZShDdSksR2UodmMpLEdlKFNkKSxHZShTdSksR2UoZmgpLEdlKEVzKSl9fXN0YXRpY3t0aGlzLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAtdmlld2VyIl1dLHZpZXdRdWVyeTpmdW5jdGlvbihkLGgpe2lmKDEmZCYmcWEoSWt0LDUpLDImZCl7bGV0IGY7Q2koZj1TaSgp'@;
put 'KSYmKGgucXVlcnlGaWx0ZXJDb21wTGlzdD1mKX19LGhvc3RBdHRyczpbMSwiY29udGVudC1jb250YWluZXIiXSxkZWNsczo5NSx2YXJzOjMwLGNvbnN0czpbWyJjbGlDb21tYW5kSW5wdXQiLCIiXSxbInNlYXJjaExpYlRyZWVJbnB1dCIsIiJdLFsic2VhcmNoVHJlZUlucHV0IiwiIl0sWyJx'@;
put 'dWVyeUZpbHRlciIsIiJdLFsic2VhcmNoRWwiLCIiXSxbMywic2Nyb2xsZWRUb0JvdHRvbSJdLFsiY2xhc3MiLCJteS0xMC1teC1hdXRvIHRleHQtY2VudGVyIiw0LCJuZ0lmIl0sWyJjbGFzcyIsInNlYXJjaC1ub2RlIiw0LCJuZ0lmIl0sWzQsIm5nRm9yIiwibmdGb3JPZiJdLFsiY2xhc3Mi'@;
put 'LCJ3LTEwMCB0ZXh0LWNlbnRlciIsNCwibmdJZiJdLFsxLCJjb250ZW50LWFyZWEiXSxbImNsYXNzIiwibW9kYWwgei1pbmRleC1oaWdoZXN0Iiw0LCJuZ0lmIl0sWyJjbGFzcyIsIm1vZGFsLWJhY2tkcm9wIiwiYXJpYS1oaWRkZW4iLCJ0cnVlIiw0LCJuZ0lmIl0sWzMsImNsck1vZGFsT3Bl'@;
put 'bkNoYW5nZSIsImNsck1vZGFsT3BlbiIsImNsck1vZGFsU2l6ZSJdLFsxLCJtb2RhbC10aXRsZSIsImNlbnRlciIsInRleHQtY2VudGVyIiwiY29sb3ItZGFya2VyLWdyYXkiXSxbMSwibW9kYWwtYm9keSJdLFsxLCJjbHItY29sLW1kLTYiXSxbMSwiZG93bmxvYWQtc2VsZWN0Il0sWyJjbHJT'@;
put 'ZWxlY3QiLCIiLDMsIm5nTW9kZWxDaGFuZ2UiLCJuZ01vZGVsIl0sWyJ2YWx1ZSIsIkNTViJdLFsidmFsdWUiLCJTQVMiXSxbInZhbHVlIiwiUEdTUUxfRERMIl0sWyJ2YWx1ZSIsIlNBU19EREwiXSxbInZhbHVlIiwiVFNRTF9EREwiXSxbInZhbHVlIiwiRVhDRUwiXSxbInZhbHVlIiwiTUFS'@;
put 'S0RPV04iXSxbMSwibW9kYWwtZm9vdGVyIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tc20iLCJidG4tb3V0bGluZSIsMywiY2xpY2siXSxbInR5cGUiLCJzdWJtaXQiLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1zdWNjZXNzLW91dGxpbmUiLDMsImNsaWNrIiwiaWQiXSxbMSwibW9k'@;
put 'YWwtYm9keSIsIndlYi1xdWVyeSJdLFsxLCJyb3ciXSxbMSwiY2xyLWNvbC1sZy0xMiIsImNsci1jb2wtbWQtMTIiLCJjbHItY29sLXNtLTEyIiwiY2xyLWNvbC14cy0xMiJdLFsxLCJjYXJkIiwibm8tYm9yZGVycyJdLFsxLCJjYXJkLWhlYWRlciIsImQtZmxleCIsImp1c3RpZnktY29udGVu'@;
put 'dC1iZXR3ZWVuIl0sWzEsImJ0bi1ncm91cCJdLFsxLCJyYWRpbyIsImJ0biIsMywiY2xpY2siXSxbInR5cGUiLCJyYWRpbyIsIm5hbWUiLCJidG4tZ3JvdXAtZGVtby1yYWRpb3MiLDMsImNoZWNrZWQiXSxbMSwiY2FyZC1ibG9jayIsIndlYi1xdWVyeS13cmFwcGVyIiwid29yZC1icmVhay1h'@;
put 'bGwiXSxbImNsclRleHRhcmVhIiwiIiwicm93cyIsIjQiLCJjb2xzIiwiNTAiLCJ0eXBlIiwidGV4dCIsInJlYWRvbmx5IiwiIiwxLCJ3ZWItcXVlcnktdGV4dCIsMywiZm9jdXMiLCJ2YWx1ZSJdLFsxLCJjYXJkLWZvb3RlciJdLFsxLCJidG4iLCJidG4tc20iLCJidG4tbGluayIsMywiY2xp'@;
put 'Y2siLCJuZ3hDbGlwYm9hcmQiXSxbImFyaWEtbW9kYWwiLCJ0cnVlIiwxLCJmaWx0ZXItbW9kYWwiLDMsImNsck1vZGFsT3BlbkNoYW5nZSIsImNsck1vZGFsT3BlbiIsImNsck1vZGFsU2l6ZSIsImNsck1vZGFsQ2xvc2FibGUiXSxbNCwibmdJZiJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRu'@;
put 'IiwiYnRuLXNtIiwiYnRuLWxpbmsiLDMsImNsaWNrIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tb3V0bGluZSIsImJ0bi1zbSIsMywiY2xpY2siXSxbInR5cGUiLCJzdWJtaXQiLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1zdWNjZXNzLW91dGxpbmUiLDMsImNsaWNrIiwiY2xyTG9h'@;
put 'ZGluZyJdLFszLCJjbHJNb2RhbE9wZW5DaGFuZ2UiLCJjbHJNb2RhbE9wZW4iXSxbMSwibW9kYWwtdGl0bGUiXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1vdXRsaW5lIiwzLCJjbGljayJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLXByaW1hcnkiLDMsImNsaWNrIl0s'@;
put 'WyJjbGFzcyIsImxvYWRpbmdTcGlubmVyIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImNhcmQgbm8tYm9yZGVycyBoLTEwMCBkLWZsZXggY2xyLWZsZXgtY29sdW1uIiw0LCJuZ0lmIl0sWzMsIm9wZW5DaGFuZ2UiLCJyb3dDbGlja2VkIiwib3BlbiIsImRzbWV0YSIsInZlcnNpb25zIl0sWzMsInZp'@;
put 'ZXdib3hNb2RhbENoYW5nZSIsInZpZXdib3hNb2RhbCJdLFsxLCJteS0xMC1teC1hdXRvIiwidGV4dC1jZW50ZXIiXSxbImNsck1lZGl1bSIsIiJdLFsxLCJzZWFyY2gtbm9kZSJdLFsxLCJ0cmVlLXNlYXJjaC13cmFwcGVyIl0sWyJhcHBTdGVhbEZvY3VzIiwiIiwiY2xySW5wdXQiLCIiLCJw'@;
put 'bGFjZWhvbGRlciIsIkxpYnJhcmllcyIsIm5hbWUiLCJpbnB1dCIsImF1dG9jb21wbGV0ZSIsIm9mZiIsMywibmdNb2RlbENoYW5nZSIsImtleXVwIiwibmdNb2RlbCJdLFsic2hhcGUiLCJzZWFyY2giLDQsIm5nSWYiXSxbInNoYXBlIiwidGltZXMiLDMsImNsaWNrIiw0LCJuZ0lmIl0sWyJz'@;
put 'aGFwZSIsInNlYXJjaCJdLFsic2hhcGUiLCJ0aW1lcyIsMywiY2xpY2siXSxbMywiY2xyRXhwYW5kZWQiLCJjbHJMb2FkaW5nIiwiY2xyLWV4cGFuZGVkIiwiY2xpY2siLCJjbHJFeHBhbmRlZENoYW5nZSIsNCwibmdJZiJdLFszLCJjbGljayIsImNsckV4cGFuZGVkQ2hhbmdlIiwiY2xyRXhw'@;
put 'YW5kZWQiLCJjbHJMb2FkaW5nIl0sWzEsIm0tMCIsImN1cnNvci1wb2ludGVyIiwzLCJjbGljayJdLFsic2hhcGUiLCJyYWNrLXNlcnZlciJdLFsiYXBwU3RlYWxGb2N1cyIsIiIsImNscklucHV0IiwiIiwicGxhY2Vob2xkZXIiLCJUYWJsZXMiLCJuYW1lIiwiaW5wdXQiLCJhdXRvY29tcGxl'@;
put 'dGUiLCJvZmYiLDMsIm5nTW9kZWxDaGFuZ2UiLCJrZXl1cCIsImlkIiwibmdNb2RlbCJdLFs0LCJuZ1ZhciJdLFsiY2xyVG9vbHRpcFRyaWdnZXIiLCIiLCJjbGFzcyIsImNsci10cmVlbm9kZS1saW5rIiwzLCJkYy1sb2NrZWQtY29udHJvbCIsImFjdGl2ZSIsImNsaWNrIiw0LCJuZ0lmIl0s'@;
put 'WyJjbHJUb29sdGlwVHJpZ2dlciIsIiIsMSwiY2xyLXRyZWVub2RlLWxpbmsiLDMsImNsaWNrIl0sWzMsIm5nU3dpdGNoIl0sWyJzaGFwZSIsImJvbHQiLDQsIm5nU3dpdGNoQ2FzZSJdLFsic2hhcGUiLCJ0YWJsZSIsNCwibmdTd2l0Y2hDYXNlIl0sWyJzaGFwZSIsImJvbHQiXSxbInNoYXBl'@;
put 'IiwidGFibGUiXSxbImNsclBvc2l0aW9uIiwiYm90dG9tLXJpZ2h0IiwiY2xyU2l6ZSIsImxnIiw0LCJjbHJJZk9wZW4iXSxbImNsclBvc2l0aW9uIiwiYm90dG9tLXJpZ2h0IiwiY2xyU2l6ZSIsImxnIl0sWzEsInctMTAwIiwidGV4dC1jZW50ZXIiXSxbMSwic3Bpbm5lciIsInNwaW5uZXIt'@;
put 'c20iXSxbMSwibW9kYWwiLCJ6LWluZGV4LWhpZ2hlc3QiXSxbInJvbGUiLCJkaWFsb2ciLCJhcmlhLWhpZGRlbiIsInRydWUiLDEsIm1vZGFsLWRpYWxvZyJdLFsxLCJtb2RhbC1jb250ZW50Il0sWzEsIm1vZGFsLWhlYWRlciJdLFsiYXJpYS1sYWJlbCIsIkNsb3NlIiwidHlwZSIsImJ1dHRv'@;
put 'biIsMSwiY2xvc2UiXSxbImFyaWEtaGlkZGVuIiwidHJ1ZSIsInNoYXBlIiwiY2xvc2UiXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1wcmltYXJ5IiwzLCJjbGljayJdLFsiYXJpYS1oaWRkZW4iLCJ0cnVlIiwxLCJtb2RhbC1iYWNrZHJvcCJdLFsxLCJsb2FkaW5n'@;
put 'U3Bpbm5lciJdLFsxLCJzcGlubmVyIl0sWzEsIm10LTEwIl0sWyJjZHMtdGV4dCIsInNlY3Rpb24iXSxbMSwiY2FyZCIsIm5vLWJvcmRlcnMiLCJoLTEwMCIsImQtZmxleCIsImNsci1mbGV4LWNvbHVtbiJdLFsiY2xhc3MiLCJoZWFkZXItcm93IGNsci1yb3cganVzdGlmeS1jb250ZW50LWJl'@;
put 'dHdlZW4gY2xyLWp1c3RpZnktY29udGVudC1jZW50ZXIgdy0xMDAgbS0wIiw0LCJuZ0lmIl0sWyJjbGFzcyIsIm5vLXRhYmxlLXNlbGVjdGVkIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImNhcmQtYmxvY2sgbm9EYXRhIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImNsci1mbGV4LTEiLDQsIm5nSWYiXSxb'@;
put 'ImNsYXNzIiwibXQtMi1pIHctMTAwIHRleHQtY2VudGVyIiw0LCJuZ0lmIl0sWzEsImhlYWRlci1yb3ciLCJjbHItcm93IiwianVzdGlmeS1jb250ZW50LWJldHdlZW4iLCJjbHItanVzdGlmeS1jb250ZW50LWNlbnRlciIsInctMTAwIiwibS0wIl0sWzEsImZvcm0tYmxvY2siLCJ0YWJsZS1z'@;
put 'ZWFyY2gtd3JhcHBlciIsInN3IiwiY2xyLWNvbC1tZCJdLFsiY2xyRm9ybSIsIiIsMSwiZC1mbGV4IiwiYWxpZ24taXRlbXMtY2VudGVyIl0sWzEsImlucHV0LXdyYXBwZXIiXSxbImNscklucHV0IiwiIiwicGxhY2Vob2xkZXIiLCJTZWFyY2giLCJuYW1lIiwic2VhcmNoLWlucHV0IiwzLCJr'@;
put 'ZXl1cC5lbnRlciIsInR5cGUiXSxbInNoYXBlIiwic2VhcmNoIiwzLCJjbGljayIsNCwibmdJZiJdLFsiY2xhc3MiLCJzcGlubmVyIHNwaW5uZXItaW5saW5lIiw0LCJuZ0lmIl0sWyJ0eXBlIiwiY2hlY2tib3giLCJjbHJDaGVja2JveCIsIiIsIm5hbWUiLCJudW1lcmljX2NoZWNrIiwzLCJu'@;
put 'Z01vZGVsQ2hhbmdlIiwibmdNb2RlbCJdLFsxLCJ0aXRsZS1jb2wiLCJjbHItY29sLWF1dG8iLCJjbHItZmxleC1jb2x1bW4iLCJjbHItZmxleC1zbS1yb3ciXSxbImNkcy10ZXh0Iiwic2VjdGlvbiIsMSwiY2xyLWZsZXgtY29sdW1uIiwiZC1mbGV4IiwiY2xyLWZsZXgtc20tcm93IiwiY2xy'@;
put 'LWFsaWduLWl0ZW1zLWNlbnRlciIsImNsci1qdXN0aWZ5LWNvbnRlbnQtY2VudGVyIl0sWzEsImQtZmxleCIsImNsci1hbGlnbi1pdGVtcy1jZW50ZXIiXSxbImNsclRvb2x0aXBUcmlnZ2VyIiwiIiwiYXJpYS1sYWJlbCIsIlZpZXcgZGF0YXNldCBtZXRhIGluZm8iLCJzaGFwZSIsImluZm8t'@;
put 'Y2lyY2xlIiwic2l6ZSIsIjI0IiwxLCJpcy1oaWdobGlnaHQiLCJjdXJzb3ItcG9pbnRlciIsMywiY2xpY2siXSxbInNoYXBlIiwiYm9sdCIsImNsYXNzIiwiY29sb3IteWVsbG93IG1yLTUiLDQsIm5nSWYiXSxbImNsclRvb2x0aXBUcmlnZ2VyIiwiIiw0LCJuZ0lmIl0sWzEsIm9wdGlvbnMt'@;
put 'Y29sIiwiY2xyLWNvbC1tZCJdLFsiY2xhc3MiLCJvcHRpb25zLWRyb3Bkb3duIiwzLCJjbHJDbG9zZU1lbnVPbkl0ZW1DbGljayIsNCwibmdJZiJdLFsiY2xhc3MiLCJjbHItY29sLW1kLTEyIGluZm9CYXIiLDQsIm5nSWYiXSxbInNoYXBlIiwic2VhcmNoIiwzLCJjbGljayJdLFsxLCJzcGlu'@;
put 'bmVyIiwic3Bpbm5lci1pbmxpbmUiXSxbInNoYXBlIiwiYm9sdCIsMSwiY29sb3IteWVsbG93IiwibXItNSJdLFsiY2xyVG9vbHRpcFRyaWdnZXIiLCIiXSxbImNsclBvc2l0aW9uIiwiYm90dG9tLWxlZnQiLCJjbHJTaXplIiwibGciLDQsImNscklmT3BlbiJdLFsiY2xyUG9zaXRpb24iLCJi'@;
put 'b3R0b20tbGVmdCIsImNsclNpemUiLCJsZyJdLFsic2hhcGUiLCJyZWZyZXNoIiwxLCJyZWZyZXNoLXRhYmxlIiwzLCJjbGljayJdLFsxLCJvcHRpb25zLWRyb3Bkb3duIiwzLCJjbHJDbG9zZU1lbnVPbkl0ZW1DbGljayJdLFsidHlwZSIsImJ1dHRvbiIsImNsckRyb3Bkb3duVHJpZ2dlciIs'@;
put 'IiIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLW91dGxpbmUiLCJmaWx0ZXJTaWRlIl0sWyJzaGFwZSIsImNvZyIsInNpemUiLCIxNSJdLFsiY2xyUG9zaXRpb24iLCJib3R0b20tcmlnaHQiLDQsImNscklmT3BlbiJdLFsiY2xyUG9zaXRpb24iLCJib3R0b20tcmlnaHQiXSxbImNsckRyb3Bkb3du'@;
put 'SXRlbSIsIiIsMywiY2xpY2siXSxbInNoYXBlIiwidmlldy1jYXJkcyJdLFsiY2xyRHJvcGRvd25JdGVtIiwiIiwzLCJjbGljayIsNCwibmdJZiJdLFsic2hhcGUiLCJmaWx0ZXIiXSxbInNoYXBlIiwiZG93bmxvYWQiXSxbInNoYXBlIiwiZG93bmxvYWQtY2xvdWQiXSxbInNoYXBlIiwicGVu'@;
put 'Y2lsIl0sWyJzaGFwZSIsInN3aXRjaCJdLFsxLCJjbHItY29sLW1kLTEyIiwiaW5mb0JhciJdLFsxLCJuby10YWJsZS1zZWxlY3RlZCJdLFsic3JjIiwiL1NBU0pvYkV4ZWN1dGlvbj9fRklMRT0vUHVibGljL2FwcC9kY3BsYWNlaG9sZGVyL3NlcnZpY2VzL3dlYi9pbWFnZXMvc2VsZWN0LWxp'@;
put 'YnJhcnkucG5nIiwiYWx0Iiwic2VsZWN0IGEgbGlicmFyeSBpY29uIiwxLCJzZWxlY3QtdGFibGUtaWNvbiJdLFsiY2RzLXRleHQiLCJzZWN0aW9uIiwxLCJ0ZXh0LWNlbnRlciIsImNvbG9yLWdyYXkiLCJtdC0xMCJdLFsxLCJoZWFkZXItcm93IiwiY2xyLXJvdyIsImJvcmRlci1ib3R0b20t'@;
put 'ZGl2aWRlciIsImp1c3RpZnktY29udGVudC1iZXR3ZWVuIiwidy0xMDAiLCJtLTAiXSxbMSwidGl0bGUtY29sIiwiY2xyLWNvbC1hdXRvIiwibXQtMTUiLCJtYi0xNSJdLFsxLCJ0ZXh0LWNlbnRlciIsIm10LTEwIl0sWyJjbHJNZWRpdW0iLCIiLDQsIm5nSWYiXSxbImNsYXNzIiwibm8tdGFi'@;
put 'bGUtc2VsZWN0ZWQtaW5mbyBwb2ludGVyLWV2ZW50cy1ub25lIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImxpYmluZm8gbS0wIGNsci1yb3ciLDQsIm5nSWYiXSxbMSwibm8tdGFibGUtc2VsZWN0ZWQtaW5mbyIsInBvaW50ZXItZXZlbnRzLW5vbmUiXSxbInNyYyIsIi9TQVNKb2JFeGVjdXRpb24/'@;
put 'X0ZJTEU9L1B1YmxpYy9hcHAvZGNwbGFjZWhvbGRlci9zZXJ2aWNlcy93ZWIvaW1hZ2VzL3NlbGVjdC10YWJsZS5wbmciLCJhbHQiLCJzZWxlY3QgdGFibGUgaWNvbiIsMSwic2VsZWN0LXRhYmxlLWljb24iXSxbMSwibGliaW5mbyIsIm0tMCIsImNsci1yb3ciXSxbImNsYXNzIiwidGV4dC1j'@;
put 'ZW50ZXIgbS0wIHctMTAwIiw0LCJuZ0lmIl0sWzEsInRleHQtY2VudGVyIiwibS0wIiwidy0xMDAiXSxbInNoYXBlIiwicmVmcmVzaCIsMSwicmVmcmVzaC10YWJsZSIsIm0tMCIsMywiY2xpY2siXSxbMSwibS0wIl0sWzEsIm0tMCIsImZvbnQtYm9sZCJdLFsxLCJjYXJkLWJsb2NrIiwibm9E'@;
put 'YXRhIl0sWyJzaGFwZSIsIndhcm5pbmctc3RhbmRhcmQiLCJzaXplIiwiNjAiLDEsImlzLWluZm8iXSxbImNsYXNzIiwidGV4dC1jZW50ZXIgY29sb3ItZ3JheSIsNCwibmdJZiJdLFsxLCJ0ZXh0LWNlbnRlciIsImNvbG9yLWdyYXkiXSxbMSwiY2xyLWZsZXgtMSJdLFsiaG90SWQiLCJob3RJ'@;
put 'bnN0YW5jZSIsImlkIiwiaG90VGFibGUiLCJjbGFzc05hbWUiLCJodERhcmsiLCJzdHJldGNoSCIsImFsbCIsMywibXVsdGlDb2x1bW5Tb3J0aW5nIiwidmlld3BvcnRSb3dSZW5kZXJpbmdPZmZzZXQiLCJkYXRhIiwiY29sSGVhZGVycyIsImNvbHVtbnMiLCJjb3B5UGFzdGUiLCJjb250ZXh0'@;
put 'TWVudSIsImZpbHRlcnMiLCJkcm9wZG93bk1lbnUiLCJoZWlnaHQiLCJtb2RpZnlDb2xXaWR0aCIsImNlbGxzIiwibWF4Um93cyIsIm1hbnVhbENvbHVtblJlc2l6ZSIsImFmdGVyR2V0Q29sSGVhZGVyIiwicm93SGVhZGVycyIsInJvd0hlYWRlcldpZHRoIiwicm93SGVpZ2h0cyIsImxpY2Vu'@;
put 'c2VLZXkiXSxbMSwibXQtMi1pIiwidy0xMDAiLCJ0ZXh0LWNlbnRlciJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihkLGgpe2lmKDEmZCl7Y29uc3QgZj1MbigpO2RlKDAsImFwcC1zaWRlYmFyIiw1KSxGdCgic2Nyb2xsZWRUb0JvdHRvbSIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoZiksQ3QoaC5sb2Fk'@;
put 'TW9yZUxpYnJhcmllcygpKX0pLGd0KDEsTGt0LDIsMCwiZGl2Iiw2KSxkZSgyLCJjbHItdHJlZSIpLGd0KDMsRmt0LDYsMywiY2xyLXRyZWUtbm9kZSIsNykoNCwka3QsMiwxLCJuZy1jb250YWluZXIiLDgpLGhlKCksZ3QoNSxLa3QsMywwLCJkaXYiLDkpLGhlKCksZGUoNiwiZGl2IiwxMCks'@;
put 'Z3QoNyxxa3QsMTQsMCwiZGl2IiwxMSkoOCxYa3QsMSwwLCJkaXYiLDEyKSxkZSg5LCJjbHItbW9kYWwiLDEzKSxnaSgiY2xyTW9kYWxPcGVuQ2hhbmdlIixmdW5jdGlvbihNKXtyZXR1cm4gd3QoZiksbWkoaC5vcGVuRG93bmxvYWQsTSl8fChoLm9wZW5Eb3dubG9hZD1NKSxDdChNKX0pLGRl'@;
put 'KDEwLCJoMyIsMTQpLExlKDExLCJEb3dubG9hZCIpLGhlKCksZGUoMTIsImRpdiIsMTUpKDEzLCJkaXYiLDE2KSgxNCwiY2xyLXNlbGVjdC1jb250YWluZXIiLDE3KSgxNSwibGFiZWwiKSxMZSgxNiwiUGxlYXNlIGNob29zZSBkb3dubG9hZCBmb3JtYXQiKSxoZSgpLGRlKDE3LCJzZWxlY3Qi'@;
put 'LDE4KSxnaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oTSl7cmV0dXJuIHd0KGYpLG1pKGguZG93bmxvYWRGb3JtYXQsTSl8fChoLmRvd25sb2FkRm9ybWF0PU0pLEN0KE0pfSksZGUoMTgsIm9wdGlvbiIsMTkpLExlKDE5LCJDU1YiKSxoZSgpLGRlKDIwLCJvcHRpb24iLDIwKSxMZSgyMSwi'@;
put 'RGF0YWxpbmVzIChjYXJkcyBmaWxlKSIpLGhlKCksZGUoMjIsIm9wdGlvbiIsMjEpLExlKDIzLCJEREwgKFBHU1FMIEZsYXZvdXIpIiksaGUoKSxkZSgyNCwib3B0aW9uIiwyMiksTGUoMjUsIkRETCAoU0FTIEZsYXZvdXIpIiksaGUoKSxkZSgyNiwib3B0aW9uIiwyMyksTGUoMjcsIkRETCAo'@;
put 'VFNRTCBGbGF2b3VyKSIpLGhlKCksZGUoMjgsIm9wdGlvbiIsMjQpLExlKDI5LCJFeGNlbCAoLnhsc3gpIiksaGUoKSxkZSgzMCwib3B0aW9uIiwyNSksTGUoMzEsIk1hcmtkb3duICgubWQpIiksaGUoKSgpKCkoKSgpLGRlKDMyLCJkaXYiLDI2KSgzMywiYnV0dG9uIiwyNyksRnQoImNsaWNr'@;
put 'IixmdW5jdGlvbigpe3JldHVybiB3dChmKSxDdChoLm9wZW5Eb3dubG9hZD0hMSl9KSxMZSgzNCwiIENhbmNlbCAiKSxoZSgpLGRlKDM1LCJidXR0b24iLDI4KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGYpLEN0KGguZG93bmxvYWRGb3JtYXQuaW5jbHVkZXMoIkRETCIpP2gu'@;
put 'ZG93bmxvYWREREwoKTpoLmRvd25sb2FkRGF0YSgpKX0pLExlKDM2LCIgT2sgIiksaGUoKSgpKCksZGUoMzcsImNsci1tb2RhbCIsMTMpLGdpKCJjbHJNb2RhbE9wZW5DaGFuZ2UiLGZ1bmN0aW9uKE0pe3JldHVybiB3dChmKSxtaShoLndlYlF1ZXJ5LE0pfHwoaC53ZWJRdWVyeT1NKSxDdChN'@;
put 'KX0pLGRlKDM4LCJoMyIsMTQpLExlKDM5LCIgV2ViIFF1ZXJ5IFVSTCAiKSxoZSgpLGRlKDQwLCJkaXYiLDI5KSg0MSwiZGl2IiwzMCkoNDIsImRpdiIsMzEpKDQzLCJkaXYiLDMyKSg0NCwiZGl2IiwzMykoNDUsInNwYW4iKSxMZSg0NiwiQ29weSB0aGUgYmVsb3cgaW50byB5b3VyIHByZWZl'@;
put 'cnJlZCBjbGllbnQgdG9vbDoiKSxoZSgpLGRlKDQ3LCJkaXYiLDM0KSg0OCwiZGl2IiwzNSksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChmKSxoLndlYlF1ZXJ5VGFiPSEwLEN0KGguc2hvd1dlYlF1ZXJ5KCkpfSksR3QoNDksImlucHV0IiwzNiksZGUoNTAsImxhYmVsIiksTGUo'@;
put 'NTEsIlRBQiIpLGhlKCkoKSxkZSg1MiwiZGl2IiwzNSksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChmKSxoLndlYlF1ZXJ5VGFiPSExLEN0KGguc2hvd1dlYlF1ZXJ5KCkpfSksR3QoNTMsImlucHV0IiwzNiksZGUoNTQsImxhYmVsIiksTGUoNTUsIkNTViIpLGhlKCkoKSgpKCks'@;
put 'ZGUoNTYsImRpdiIsMzcpKDU3LCJ0ZXh0YXJlYSIsMzgsMCksRnQoImZvY3VzIixmdW5jdGlvbihNKXtyZXR1cm4gd3QoZiksQ3QoaC5vbkNsaUNvbW1hbmRGb2N1cyhNKSl9KSxMZSg1OSwiICAgICAgICAgICAgICAiKSxoZSgpKCksZGUoNjAsImRpdiIsMzkpKDYxLCJidXR0b24iLDQwKSxG'@;
put 'dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGYpLEN0KGguY29weVRvQ2xpcCgpKX0pLExlKDYyLCIgY29weSB0byBjbGlwYm9hcmQgIiksaGUoKSgpKCkoKSgpKCksZGUoNjMsImRpdiIsMjYpKDY0LCJidXR0b24iLDI3KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGYp'@;
put 'LEN0KGgud2ViUXVlcnk9ITEpfSksTGUoNjUsIiBjbG9zZSAiKSxoZSgpKCkoKSxkZSg2NiwiY2xyLW1vZGFsIiw0MSksZ2koImNsck1vZGFsT3BlbkNoYW5nZSIsZnVuY3Rpb24oTSl7cmV0dXJuIHd0KGYpLG1pKGguZmlsdGVyLE0pfHwoaC5maWx0ZXI9TSksQ3QoTSl9KSxkZSg2NywiaDMi'@;
put 'LDE0KSxMZSg2OCwiIEZpbHRlciBmb3IgdGFibGU6IiksZGUoNjksInNwYW4iKSxMZSg3MCksaGUoKSgpLGRlKDcxLCJkaXYiLDE1KSxndCg3MixKa3QsMiwwLCJhcHAtcXVlcnkiLDQyKSxoZSgpLGRlKDczLCJkaXYiLDI2KSg3NCwiYnV0dG9uIiw0MyksRnQoImNsaWNrIixmdW5jdGlvbigp'@;
put 'e3JldHVybiB3dChmKSxDdChoLnJlc2V0RmlsdGVyKCkpfSksTGUoNzUsIiByZXNldCBmaWx0ZXIgIiksaGUoKSxkZSg3NiwiYnV0dG9uIiw0NCksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChmKSxoLmZpbHRlcj0hMSxDdChoLnJlbW92ZVF1ZXJ5KCkpfSksTGUoNzcsIiBDYW5j'@;
put 'ZWwgIiksaGUoKSxkZSg3OCwiYnV0dG9uIiw0NSksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChmKSxDdChoLnNlbmRDbGF1c2UoKSl9KSxMZSg3OSwiIE9rICIpLGhlKCkoKSgpLGRlKDgwLCJjbHItbW9kYWwiLDQ2KSxnaSgiY2xyTW9kYWxPcGVuQ2hhbmdlIixmdW5jdGlvbihN'@;
put 'KXtyZXR1cm4gd3QoZiksbWkoaC5xdWVyeUVycixNKXx8KGgucXVlcnlFcnI9TSksQ3QoTSl9KSxkZSg4MSwiaDMiLDQ3KSxMZSg4MiwiRXJyb3IiKSxoZSgpLGRlKDgzLCJkaXYiLDE1KSg4NCwicCIpLExlKDg1KSxoZSgpKCksZGUoODYsImRpdiIsMjYpKDg3LCJidXR0b24iLDQ4KSxGdCgi'@;
put 'Y2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGYpLEN0KGgucXVlcnlFcnI9ITEpfSksTGUoODgsIiBDYW5jZWwgIiksaGUoKSxkZSg4OSwiYnV0dG9uIiw0OSksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChmKSxDdChoLnF1ZXJ5RXJyPSExKX0pLExlKDkwLCIgT2sgIiksaGUo'@;
put 'KSgpKCksZ3QoOTEsUWt0LDYsMCwiZGl2Iiw1MCkoOTIsRkR0LDgsNiwiZGl2Iiw1MSksaGUoKSxkZSg5MywiYXBwLWRhdGFzZXQtaW5mbyIsNTIpLGdpKCJvcGVuQ2hhbmdlIixmdW5jdGlvbihNKXtyZXR1cm4gd3QoZiksbWkoaC5kYXRhc2V0SW5mbyxNKXx8KGguZGF0YXNldEluZm89TSks'@;
put 'Q3QoTSl9KSxGdCgicm93Q2xpY2tlZCIsZnVuY3Rpb24oTSl7cmV0dXJuIHd0KGYpLEN0KGguZGF0YXNldEluZm9Nb2RhbFJvd0NsaWNrZWQoTSkpfSksaGUoKSxkZSg5NCwiYXBwLXZpZXdib3hlcyIsNTMpLGdpKCJ2aWV3Ym94TW9kYWxDaGFuZ2UiLGZ1bmN0aW9uKE0pe3JldHVybiB3dChm'@;
put 'KSxtaShoLnZpZXdib3hPcGVuLE0pfHwoaC52aWV3Ym94T3Blbj1NKSxDdChNKX0pLGhlKCl9aWYoMiZkKXtjb25zdCBmPWhhKDU4KTtmZSgpLE1lKCJuZ0lmIixoLmxpYnJhcmllc0xvYWRpbmcpLGZlKDIpLE1lKCJuZ0lmIixoLmxpYnJhcmllcyksZmUoKSxNZSgibmdGb3JPZiIsaC5saWJy'@;
put 'YXJpZXMpLGZlKCksTWUoIm5nSWYiLGgubGlicmFyaWVzUGFnaW5nKSxmZSgyKSxNZSgibmdJZiIsaC5udWxsVmFyaWFibGVzKSxmZSgpLE1lKCJuZ0lmIixoLm51bGxWYXJpYWJsZXMpLGZlKCkscGkoImNsck1vZGFsT3BlbiIsaC5vcGVuRG93bmxvYWQpLE1lKCJjbHJNb2RhbFNpemUiLCJt'@;
put 'ZCIpLGZlKDgpLHBpKCJuZ01vZGVsIixoLmRvd25sb2FkRm9ybWF0KSxmZSgxOCksTWUoImlkIixoLnRhYmxlVGl0bGUpLGZlKDIpLHBpKCJjbHJNb2RhbE9wZW4iLGgud2ViUXVlcnkpLE1lKCJjbHJNb2RhbFNpemUiLCJsZyIpLGZlKDEyKSxNZSgiY2hlY2tlZCIsaC53ZWJRdWVyeVRhYiks'@;
put 'ZmUoNCksTWUoImNoZWNrZWQiLCFoLndlYlF1ZXJ5VGFiKSxmZSg0KSxNZSgidmFsdWUiLGgud2ViUXVlcnlUZXh0KSxmZSg0KSxNZSgibmd4Q2xpcGJvYXJkIixmKSxmZSg1KSxwaSgiY2xyTW9kYWxPcGVuIixoLmZpbHRlciksTWUoImNsck1vZGFsU2l6ZSIsInhsIikoImNsck1vZGFsQ2xv'@;
put 'c2FibGUiLCExKSxmZSg0KSxEcigiICIsaC5saWJUYWIsIiAiKSxmZSgyKSxNZSgibmdJZiIsaC5maWx0ZXIpLGZlKDYpLE1lKCJjbHJMb2FkaW5nIixoLnN1Ym1pdExvYWRpbmcpLGZlKDIpLHBpKCJjbHJNb2RhbE9wZW4iLGgucXVlcnlFcnIpLGZlKDUpLHdyKGgucXVlcnlFcnJNZXNzYWdl'@;
put 'KSxmZSg2KSxNZSgibmdJZiIsaC5sb2FkaW5nVGFibGVWaWV3KSxmZSgpLE1lKCJuZ0lmIiwhaC5sb2FkaW5nVGFibGVWaWV3KSxmZSgpLHBpKCJvcGVuIixoLmRhdGFzZXRJbmZvKSxNZSgiZHNtZXRhIixoLmRzbWV0YSkoInZlcnNpb25zIixoLnZlcnNpb25zKSxmZSgpLHBpKCJ2aWV3Ym94'@;
put 'TW9kYWwiLGgudmlld2JveE9wZW4pfX0sZGVwZW5kZW5jaWVzOltJNmUsbnMsYmEsUzIsY3AsVGt0LGw3LEEyLGsyLHFsLE1kLFQyLG5sLG83LCRzLHlwLEVoLFBkLGZnLEhsLG91LEt1LGowLEwyLFAyLGRzLFExZSxJZCxCeSxTaCxaMSxFNywkeSxRTCxzZyxnNyxtNyxWeSx2Nyx5NyxiNyxS'@;
put 'ZCxEXyxpNCxPNmUscE8sWGVlLFN3LHI0LEY2ZSxEa3RdLGVuY2Fwc3VsYXRpb246Mn0pfX1yZXR1cm4gY30pKCk7Y29uc3QgSER0PVt7cGF0aDoiIixjb21wb25lbnQ6YkF0LGNoaWxkcmVuOlt7cGF0aDoiIixwYXRoTWF0Y2g6ImZ1bGwiLHJlZGlyZWN0VG86ImRhdGEifSx7cGF0aDoiZGF0'@;
put 'YSIsY29tcG9uZW50OnpOfSx7cGF0aDoiZGF0YSIsY29tcG9uZW50OnpOfSx7cGF0aDoiZGF0YS86bGliTWVtLzpmaWx0ZXJJZCIsY29tcG9uZW50OnpOfSx7cGF0aDoiZGF0YS86bGliTWVtIixjb21wb25lbnQ6ek59LHtwYXRoOiJsaW5lYWdlIixjb21wb25lbnQ6ak59LHtwYXRoOiJsaW5l'@;
put 'YWdlLzp0YWJsZWlkLzpkaXJlY3Rpb24iLGNvbXBvbmVudDpqTn0se3BhdGg6ImxpbmVhZ2UvY29sdW1uLzpjb2x1cmkvOmRpcmVjdGlvbiIsY29tcG9uZW50OmpOfSx7cGF0aDoibGluZWFnZS9jb2x1bW4vOmNvbHVyaS86ZGlyZWN0aW9uLzpyZWxvYWQiLGNvbXBvbmVudDpqTn0se3BhdGg6'@;
put 'InZpeWEtYXBpLWV4cGxvcmVyIixjb21wb25lbnQ6TWt0fSx7cGF0aDoibWV0YWRhdGEiLGNvbXBvbmVudDpadGV9LHtwYXRoOiJtZXRhZGF0YS9vYmplY3QvOm9iamVjdElEIixjb21wb25lbnQ6WnRlfSx7cGF0aDoibWV0YWRhdGEvb2JqZWN0LzpvYmplY3RJRC86b2JqZWN0TmFtZSIsY29t'@;
put 'cG9uZW50Olp0ZX0se3BhdGg6InVzZXJuYXYiLGNvbXBvbmVudDp2QXQsY2hpbGRyZW46W3twYXRoOiIiLHBhdGhNYXRjaDoiZnVsbCIscmVkaXJlY3RUbzoiZ3JvdXBzIn0se3BhdGg6InVzZXJzIixjb21wb25lbnQ6TTdlfSx7cGF0aDoidXNlcnMvOnVyaSIsY29tcG9uZW50Ok03ZX0se3Bh'@;
put 'dGg6Imdyb3VwcyIsY29tcG9uZW50OnQ4ZX0se3BhdGg6Imdyb3Vwcy86dXJpIixjb21wb25lbnQ6dDhlfSx7cGF0aDoicm9sZXMiLGNvbXBvbmVudDpTN2V9LHtwYXRoOiJyb2xlcy86dXJpIixjb21wb25lbnQ6UzdlfV19XX1dO2xldCBORHQ9KCgpPT57Y2xhc3MgY3tzdGF0aWN7dGhpcy5c'@;
put 'dTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1bW9kPWtpKHt0eXBlOmN9KX1zdGF0aWN7dGhpcy5cdTAyNzVpbmo9QXIoe2ltcG9ydHM6W3pjLmZvckNoaWxkKEhEdCksemNdfSl9fXJldHVybiBjfSkoKSxWRHQ9KCgpPT57Y2xhc3MgY3tz'@;
put 'dGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1bW9kPWtpKHt0eXBlOmN9KX1zdGF0aWN7dGhpcy5cdTAyNzVpbmo9QXIoe2ltcG9ydHM6W042ZSxSYSxORHQsQWt0LFJjLHowLG85LmZvclJvb3QoKSxHOSxDdyxNQSxR'@;
put 'ZWUsbmZdfSl9fXJldHVybiBjfSkoKTtjb25zdCBqRHQ9emMuZm9yUm9vdChbe3BhdGg6IiIscmVkaXJlY3RUbzoiaG9tZSIscGF0aE1hdGNoOiJmdWxsIn0se3BhdGg6InZpZXciLGxvYWRDaGlsZHJlbjooKT0+VkR0fSx7cGF0aDoicmV2aWV3Iixjb21wb25lbnQ6Ql90LGNoaWxkcmVuOlt7'@;
put 'cGF0aDoiIixwYXRoTWF0Y2g6ImZ1bGwiLHJlZGlyZWN0VG86InRvYXBwcm92ZSJ9LHtwYXRoOiIiLGxvYWRDaGlsZHJlbjooKT0+Vl90fV19LHtwYXRoOiJsaWNlbnNpbmciLGxvYWRDaGlsZHJlbjooKT0+aXl0fSx7cGF0aDoiaG9tZSIsbG9hZENoaWxkcmVuOigpPT55YnR9LHtwYXRoOiJl'@;
put 'ZGl0b3IiLGxvYWRDaGlsZHJlbjooKT0+Yzl0fSx7cGF0aDoic3RhZ2UiLGxvYWRDaGlsZHJlbjooKT0+cV90fSx7cGF0aDoic3lzdGVtIixsb2FkQ2hpbGRyZW46KCk9PmN3dH0se3BhdGg6ImRlcGxveSIsbG9hZENoaWxkcmVuOigpPT5scWV9LHtwYXRoOiIqKiIsY29tcG9uZW50OmokZX1d'@;
put 'LHt1c2VIYXNoOiEwfSk7bGV0IHpEdD0oKCk9PntjbGFzcyBje3N0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVtb2Q9a2koe3R5cGU6Yyxib290c3RyYXA6W1hZZV19KX1zdGF0aWN7dGhpcy5cdTAyNzVpbmo9QXIo'@;
put 'e3Byb3ZpZGVyczpbb0wsa2gsdHRlLCRSXSxpbXBvcnRzOltCJGUsVG9lLFJjLElPZSxvQWUsakR0LEN3LHowLEc5LE1BLG5mLG5rdF19KX19cmV0dXJuIGN9KSgpO2tDZSgpLmJvb3RzdHJhcE1vZHVsZSh6RHQpfSwzNzM0Oihtb2R1bGUsX191bnVzZWRfd2VicGFja19leHBvcnRzLF9fd2Vi'@;
put 'cGFja19yZXF1aXJlX18pPT57dmFyIF9hc3luY1RvR2VuZXJhdG9yPV9fd2VicGFja19yZXF1aXJlX18oMjkyOTMpLmRlZmF1bHQsX3dyYXBBc3luY0dlbmVyYXRvcj1fX3dlYnBhY2tfcmVxdWlyZV9fKDQyOTU4KS5kZWZhdWx0LF9hd2FpdEFzeW5jR2VuZXJhdG9yPV9fd2VicGFja19yZXF1'@;
put 'aXJlX18oNTMzNDQpLmRlZmF1bHQsX2FzeW5jR2VuZXJhdG9yRGVsZWdhdGU9X193ZWJwYWNrX3JlcXVpcmVfXyg5MzUxMykuZGVmYXVsdCxfYXN5bmNJdGVyYXRvcj1fX3dlYnBhY2tfcmVxdWlyZV9fKDgyODgxKS5kZWZhdWx0LHk7c2VsZix5PSgpPT4oKCk9Pnt2YXIgX193ZWJwYWNrX21v'@;
put 'ZHVsZXNfXz17MzA2MjoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDg3NjQpLkJ1ZmZlcjtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksWC5Dc3ZGb3JtYXR0ZXJTdHJlYW09dm9pZCAwO2NvbnN0IF89eSgyODMwKSxnPXkoOTk0Nyk7WC5D'@;
put 'c3ZGb3JtYXR0ZXJTdHJlYW09Y2xhc3MgQiBleHRlbmRzIF8uVHJhbnNmb3Jte2NvbnN0cnVjdG9yKFApe3N1cGVyKHt3cml0YWJsZU9iamVjdE1vZGU6UC5vYmplY3RNb2RlfSksdGhpcy5oYXNXcml0dGVuQk9NPSExLHRoaXMuZm9ybWF0dGVyT3B0aW9ucz1QLHRoaXMucm93Rm9ybWF0dGVy'@;
put 'PW5ldyBnLlJvd0Zvcm1hdHRlcihQKSx0aGlzLmhhc1dyaXR0ZW5CT009IVAud3JpdGVCT019dHJhbnNmb3JtKFApe3JldHVybiB0aGlzLnJvd0Zvcm1hdHRlci5yb3dUcmFuc2Zvcm09UCx0aGlzfV90cmFuc2Zvcm0oUCxGLE8pe2xldCB6PSExO3RyeXt0aGlzLmhhc1dyaXR0ZW5CT018fCh0'@;
put 'aGlzLnB1c2godGhpcy5mb3JtYXR0ZXJPcHRpb25zLkJPTSksdGhpcy5oYXNXcml0dGVuQk9NPSEwKSx0aGlzLnJvd0Zvcm1hdHRlci5mb3JtYXQoUCwoTixMKT0+Tj8oej0hMCxPKE4pKTooTCYmTC5mb3JFYWNoKEs9Pnt0aGlzLnB1c2goSS5mcm9tKEssInV0ZjgiKSl9KSx6PSEwLE8oKSkp'@;
put 'fWNhdGNoKE4pe2lmKHopdGhyb3cgTjtPKE4pfX1fZmx1c2goUCl7dGhpcy5yb3dGb3JtYXR0ZXIuZmluaXNoKChGLE8pPT5GP1AoRik6KE8mJk8uZm9yRWFjaCh6PT57dGhpcy5wdXNoKEkuZnJvbSh6LCJ1dGY4IikpfSksUCgpKSl9fX0sNjc2MzoodWUsWCk9PnsidXNlIHN0cmljdCI7T2Jq'@;
put 'ZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFguRm9ybWF0dGVyT3B0aW9ucz12b2lkIDAsWC5Gb3JtYXR0ZXJPcHRpb25zPWNsYXNzIHl7Y29uc3RydWN0b3IoXz17fSl7dmFyIGc7dGhpcy5vYmplY3RNb2RlPSEwLHRoaXMuZGVsaW1pdGVyPSIsIix0aGlz'@;
put 'LnJvd0RlbGltaXRlcj0iXG4iLHRoaXMucXVvdGU9JyInLHRoaXMuZXNjYXBlPXRoaXMucXVvdGUsdGhpcy5xdW90ZUNvbHVtbnM9ITEsdGhpcy5xdW90ZUhlYWRlcnM9dGhpcy5xdW90ZUNvbHVtbnMsdGhpcy5oZWFkZXJzPW51bGwsdGhpcy5pbmNsdWRlRW5kUm93RGVsaW1pdGVyPSExLHRo'@;
put 'aXMud3JpdGVCT009ITEsdGhpcy5CT009Ilx1ZmVmZiIsdGhpcy5hbHdheXNXcml0ZUhlYWRlcnM9ITEsT2JqZWN0LmFzc2lnbih0aGlzLF98fHt9KSx0eXBlb2YgXz8ucXVvdGVIZWFkZXJzPiJ1IiYmKHRoaXMucXVvdGVIZWFkZXJzPXRoaXMucXVvdGVDb2x1bW5zKSwhMD09PV8/LnF1b3Rl'@;
put 'P3RoaXMucXVvdGU9JyInOiExPT09Xz8ucXVvdGUmJih0aGlzLnF1b3RlPSIiKSwic3RyaW5nIiE9dHlwZW9mIF8/LmVzY2FwZSYmKHRoaXMuZXNjYXBlPXRoaXMucXVvdGUpLHRoaXMuc2hvdWxkV3JpdGVIZWFkZXJzPSEhdGhpcy5oZWFkZXJzJiYobnVsbD09PShnPV8ud3JpdGVIZWFkZXJz'@;
put 'KXx8dm9pZCAwPT09Z3x8ZyksdGhpcy5oZWFkZXJzPUFycmF5LmlzQXJyYXkodGhpcy5oZWFkZXJzKT90aGlzLmhlYWRlcnM6bnVsbCx0aGlzLmVzY2FwZWRRdW90ZT1gJHt0aGlzLmVzY2FwZX0ke3RoaXMucXVvdGV9YH19fSw1MTg2OmZ1bmN0aW9uKHVlLFgseSl7InVzZSBzdHJpY3QiO3Zh'@;
put 'ciBJPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihQKXtyZXR1cm4gUCYmUC5fX2VzTW9kdWxlP1A6e2RlZmF1bHQ6UH19O09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLkZpZWxkRm9ybWF0dGVyPXZvaWQgMDtjb25zdCBfPUko'@;
put 'eSg4MDk0KSksZz1JKHkoOTcyMikpLEI9SSh5KDE2NTgpKTtYLkZpZWxkRm9ybWF0dGVyPWNsYXNzIHd7Y29uc3RydWN0b3IoRil7dGhpcy5faGVhZGVycz1udWxsLHRoaXMuZm9ybWF0dGVyT3B0aW9ucz1GLG51bGwhPT1GLmhlYWRlcnMmJih0aGlzLmhlYWRlcnM9Ri5oZWFkZXJzKSx0aGlz'@;
put 'LlJFUExBQ0VfUkVHRVhQPW5ldyBSZWdFeHAoRi5xdW90ZSwiZyIpO2NvbnN0IE89YFske0YuZGVsaW1pdGVyfSR7Qi5kZWZhdWx0KEYucm93RGVsaW1pdGVyKX18XHJ8XG5dYDt0aGlzLkVTQ0FQRV9SRUdFWFA9bmV3IFJlZ0V4cChPKX1zZXQgaGVhZGVycyhGKXt0aGlzLl9oZWFkZXJzPUZ9'@;
put 'c2hvdWxkUXVvdGUoRixPKXtjb25zdCB6PU8/dGhpcy5mb3JtYXR0ZXJPcHRpb25zLnF1b3RlSGVhZGVyczp0aGlzLmZvcm1hdHRlck9wdGlvbnMucXVvdGVDb2x1bW5zO3JldHVybiBfLmRlZmF1bHQoeik/ejpBcnJheS5pc0FycmF5KHopP3pbRl06bnVsbCE9PXRoaXMuX2hlYWRlcnMmJnpb'@;
put 'dGhpcy5faGVhZGVyc1tGXV19Zm9ybWF0KEYsTyx6KXtjb25zdCBOPWAke2cuZGVmYXVsdChGKT8iIjpGfWAucmVwbGFjZSgvXDAvZywiIikse2Zvcm1hdHRlck9wdGlvbnM6TH09dGhpcztyZXR1cm4iIiE9PUwucXVvdGUmJi0xIT09Ti5pbmRleE9mKEwucXVvdGUpP3RoaXMucXVvdGVGaWVs'@;
put 'ZChOLnJlcGxhY2UodGhpcy5SRVBMQUNFX1JFR0VYUCxMLmVzY2FwZWRRdW90ZSkpOi0xIT09Ti5zZWFyY2godGhpcy5FU0NBUEVfUkVHRVhQKXx8dGhpcy5zaG91bGRRdW90ZShPLHopP3RoaXMucXVvdGVGaWVsZChOKTpOfXF1b3RlRmllbGQoRil7Y29uc3R7cXVvdGU6T309dGhpcy5mb3Jt'@;
put 'YXR0ZXJPcHRpb25zO3JldHVybmAke099JHtGfSR7T31gfX19LDcxODE6ZnVuY3Rpb24odWUsWCx5KXsidXNlIHN0cmljdCI7dmFyIEk9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKEYpe3JldHVybiBGJiZGLl9fZXNNb2R1bGU/Rjp7ZGVmYXVsdDpGfX07T2JqZWN0LmRl'@;
put 'ZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFguUm93Rm9ybWF0dGVyPXZvaWQgMDtjb25zdCBfPUkoeSg4NDIzKSksZz1JKHkoMjMwNykpLEI9eSg1MTg2KSx3PXkoNDY5Mik7Y2xhc3MgUHtjb25zdHJ1Y3RvcihPKXt0aGlzLnJvd0NvdW50PTAsdGhpcy5mb3JtYXR0'@;
put 'ZXJPcHRpb25zPU8sdGhpcy5maWVsZEZvcm1hdHRlcj1uZXcgQi5GaWVsZEZvcm1hdHRlcihPKSx0aGlzLmhlYWRlcnM9Ty5oZWFkZXJzLHRoaXMuc2hvdWxkV3JpdGVIZWFkZXJzPU8uc2hvdWxkV3JpdGVIZWFkZXJzLHRoaXMuaGFzV3JpdHRlbkhlYWRlcnM9ITEsbnVsbCE9PXRoaXMuaGVh'@;
put 'ZGVycyYmKHRoaXMuZmllbGRGb3JtYXR0ZXIuaGVhZGVycz10aGlzLmhlYWRlcnMpLE8udHJhbnNmb3JtJiYodGhpcy5yb3dUcmFuc2Zvcm09Ty50cmFuc2Zvcm0pfXN0YXRpYyBpc1Jvd0hhc2hBcnJheShPKXtyZXR1cm4hIUFycmF5LmlzQXJyYXkoTykmJkFycmF5LmlzQXJyYXkoT1swXSkm'@;
put 'JjI9PT1PWzBdLmxlbmd0aH1zdGF0aWMgaXNSb3dBcnJheShPKXtyZXR1cm4gQXJyYXkuaXNBcnJheShPKSYmIXRoaXMuaXNSb3dIYXNoQXJyYXkoTyl9c3RhdGljIGdhdGhlckhlYWRlcnMoTyl7cmV0dXJuIFAuaXNSb3dIYXNoQXJyYXkoTyk/Ty5tYXAoej0+elswXSk6QXJyYXkuaXNBcnJh'@;
put 'eShPKT9POk9iamVjdC5rZXlzKE8pfXN0YXRpYyBjcmVhdGVUcmFuc2Zvcm0oTyl7cmV0dXJuIHcuaXNTeW5jVHJhbnNmb3JtKE8pPyh6LE4pPT57bGV0IEw9bnVsbDt0cnl7TD1PKHopfWNhdGNoKEspe3JldHVybiBOKEspfXJldHVybiBOKG51bGwsTCl9Oih6LE4pPT57Tyh6LE4pfX1zZXQg'@;
put 'cm93VHJhbnNmb3JtKE8pe2lmKCFfLmRlZmF1bHQoTykpdGhyb3cgbmV3IFR5cGVFcnJvcigiVGhlIHRyYW5zZm9ybSBzaG91bGQgYmUgYSBmdW5jdGlvbiIpO3RoaXMuX3Jvd1RyYW5zZm9ybT1QLmNyZWF0ZVRyYW5zZm9ybShPKX1mb3JtYXQoTyx6KXt0aGlzLmNhbGxUcmFuc2Zvcm1lcihP'@;
put 'LChOLEwpPT57aWYoTilyZXR1cm4geihOKTtpZighTylyZXR1cm4geihudWxsKTtjb25zdCBLPVtdO2lmKEwpe2NvbnN0e3Nob3VsZEZvcm1hdENvbHVtbnM6VSxoZWFkZXJzOld9PXRoaXMuY2hlY2tIZWFkZXJzKEwpO2lmKHRoaXMuc2hvdWxkV3JpdGVIZWFkZXJzJiZXJiYhdGhpcy5oYXNX'@;
put 'cml0dGVuSGVhZGVycyYmKEsucHVzaCh0aGlzLmZvcm1hdENvbHVtbnMoVywhMCkpLHRoaXMuaGFzV3JpdHRlbkhlYWRlcnM9ITApLFUpe2NvbnN0IFk9dGhpcy5nYXRoZXJDb2x1bW5zKEwpO0sucHVzaCh0aGlzLmZvcm1hdENvbHVtbnMoWSwhMSkpfX1yZXR1cm4geihudWxsLEspfSl9Zmlu'@;
put 'aXNoKE8pe2NvbnN0IHo9W107aWYodGhpcy5mb3JtYXR0ZXJPcHRpb25zLmFsd2F5c1dyaXRlSGVhZGVycyYmMD09PXRoaXMucm93Q291bnQpe2lmKCF0aGlzLmhlYWRlcnMpcmV0dXJuIE8obmV3IEVycm9yKCJgYWx3YXlzV3JpdGVIZWFkZXJzYCBvcHRpb24gaXMgc2V0IHRvIHRydWUgYnV0'@;
put 'IGBoZWFkZXJzYCBvcHRpb24gbm90IHByb3ZpZGVkLiIpKTt6LnB1c2godGhpcy5mb3JtYXRDb2x1bW5zKHRoaXMuaGVhZGVycywhMCkpfXJldHVybiB0aGlzLmZvcm1hdHRlck9wdGlvbnMuaW5jbHVkZUVuZFJvd0RlbGltaXRlciYmei5wdXNoKHRoaXMuZm9ybWF0dGVyT3B0aW9ucy5yb3dE'@;
put 'ZWxpbWl0ZXIpLE8obnVsbCx6KX1jaGVja0hlYWRlcnMoTyl7aWYodGhpcy5oZWFkZXJzKXJldHVybntzaG91bGRGb3JtYXRDb2x1bW5zOiEwLGhlYWRlcnM6dGhpcy5oZWFkZXJzfTtjb25zdCB6PVAuZ2F0aGVySGVhZGVycyhPKTtyZXR1cm4gdGhpcy5oZWFkZXJzPXosdGhpcy5maWVsZEZv'@;
put 'cm1hdHRlci5oZWFkZXJzPXosdGhpcy5zaG91bGRXcml0ZUhlYWRlcnM/e3Nob3VsZEZvcm1hdENvbHVtbnM6IWcuZGVmYXVsdCh6LE8pLGhlYWRlcnM6en06e3Nob3VsZEZvcm1hdENvbHVtbnM6ITAsaGVhZGVyczpudWxsfX1nYXRoZXJDb2x1bW5zKE8pe2lmKG51bGw9PT10aGlzLmhlYWRl'@;
put 'cnMpdGhyb3cgbmV3IEVycm9yKCJIZWFkZXJzIGlzIGN1cnJlbnRseSBudWxsIik7cmV0dXJuIEFycmF5LmlzQXJyYXkoTyk/UC5pc1Jvd0hhc2hBcnJheShPKT90aGlzLmhlYWRlcnMubWFwKCh6LE4pPT57Y29uc3QgTD1PW05dO3JldHVybiBMP0xbMV06IiJ9KTpQLmlzUm93QXJyYXkoTykm'@;
put 'JiF0aGlzLnNob3VsZFdyaXRlSGVhZGVycz9POnRoaXMuaGVhZGVycy5tYXAoKHosTik9Pk9bTl0pOnRoaXMuaGVhZGVycy5tYXAoej0+T1t6XSl9Y2FsbFRyYW5zZm9ybWVyKE8seil7cmV0dXJuIHRoaXMuX3Jvd1RyYW5zZm9ybT90aGlzLl9yb3dUcmFuc2Zvcm0oTyx6KTp6KG51bGwsTyl9'@;
put 'Zm9ybWF0Q29sdW1ucyhPLHope2NvbnN0IE49Ty5tYXAoKEssVSk9PnRoaXMuZmllbGRGb3JtYXR0ZXIuZm9ybWF0KEssVSx6KSkuam9pbih0aGlzLmZvcm1hdHRlck9wdGlvbnMuZGVsaW1pdGVyKSx7cm93Q291bnQ6TH09dGhpcztyZXR1cm4gdGhpcy5yb3dDb3VudCs9MSxMP1t0aGlzLmZv'@;
put 'cm1hdHRlck9wdGlvbnMucm93RGVsaW1pdGVyLE5dLmpvaW4oIiIpOk59fVguUm93Rm9ybWF0dGVyPVB9LDk5NDc6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFguRmllbGRGb3JtYXR0ZXI9WC5Sb3dGb3Jt'@;
put 'YXR0ZXI9dm9pZCAwO3ZhciBJPXkoNzE4MSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIlJvd0Zvcm1hdHRlciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEkuUm93Rm9ybWF0dGVyfX0pO3ZhciBfPXkoNTE4Nik7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIkZpZWxk'@;
put 'Rm9ybWF0dGVyIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gXy5GaWVsZEZvcm1hdHRlcn19KX0sNzIwMTpmdW5jdGlvbih1ZSxYLHkpeyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDg3NjQpLkJ1ZmZlcixfPXRoaXMmJnRoaXMuX19jcmVhdGVCaW5kaW5nfHwoT2JqZWN0LmNy'@;
put 'ZWF0ZT9mdW5jdGlvbihVLFcsWSxxKXt2b2lkIDA9PT1xJiYocT1ZKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoVSxxLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBXW1ldfX0pfTpmdW5jdGlvbihVLFcsWSxxKXt2b2lkIDA9PT1xJiYocT1ZKSxVW3FdPVdbWV19KSxnPXRo'@;
put 'aXMmJnRoaXMuX19zZXRNb2R1bGVEZWZhdWx0fHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihVLFcpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShVLCJkZWZhdWx0Iix7ZW51bWVyYWJsZTohMCx2YWx1ZTpXfSl9OmZ1bmN0aW9uKFUsVyl7VS5kZWZhdWx0PVd9KSxCPXRoaXMmJnRoaXMuX19pbXBv'@;
put 'cnRTdGFyfHxmdW5jdGlvbihVKXtpZihVJiZVLl9fZXNNb2R1bGUpcmV0dXJuIFU7dmFyIFc9e307aWYobnVsbCE9VSlmb3IodmFyIFkgaW4gVSkiZGVmYXVsdCIhPT1ZJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoVSxZKSYmXyhXLFUsWSk7cmV0dXJuIGcoVyxVKSxX'@;
put 'fSx3PXRoaXMmJnRoaXMuX19leHBvcnRTdGFyfHxmdW5jdGlvbihVLFcpe2Zvcih2YXIgWSBpbiBVKSJkZWZhdWx0IiE9PVkmJiFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoVyxZKSYmXyhXLFUsWSl9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7'@;
put 'dmFsdWU6ITB9KSxYLndyaXRlVG9QYXRoPVgud3JpdGVUb1N0cmluZz1YLndyaXRlVG9CdWZmZXI9WC53cml0ZVRvU3RyZWFtPVgud3JpdGU9WC5mb3JtYXQ9WC5Gb3JtYXR0ZXJPcHRpb25zPVguQ3N2Rm9ybWF0dGVyU3RyZWFtPXZvaWQgMDtjb25zdCBQPXkoOTUzOSksRj15KDI4MzApLE89'@;
put 'Qih5KDg2NDYpKSx6PXkoNjc2MyksTj15KDMwNjIpO3coeSg0NjkyKSxYKTt2YXIgTD15KDMwNjIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJDc3ZGb3JtYXR0ZXJTdHJlYW0iLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBMLkNzdkZvcm1hdHRlclN0cmVhbX19KTt2'@;
put 'YXIgSz15KDY3NjMpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJGb3JtYXR0ZXJPcHRpb25zIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gSy5Gb3JtYXR0ZXJPcHRpb25zfX0pLFguZm9ybWF0PVU9Pm5ldyBOLkNzdkZvcm1hdHRlclN0cmVhbShuZXcgei5Gb3JtYXR0'@;
put 'ZXJPcHRpb25zKFUpKSxYLndyaXRlPShVLFcpPT57Y29uc3QgWT1YLmZvcm1hdChXKSxxPVAucHJvbWlzaWZ5KChlZSxKKT0+e1kud3JpdGUoZWUsdm9pZCAwLEopfSk7cmV0dXJuIFUucmVkdWNlKChlZSxKKT0+ZWUudGhlbigoKT0+cShKKSksUHJvbWlzZS5yZXNvbHZlKCkpLnRoZW4oKCk9'@;
put 'PlkuZW5kKCkpLmNhdGNoKGVlPT57WS5lbWl0KCJlcnJvciIsZWUpfSksWX0sWC53cml0ZVRvU3RyZWFtPShVLFcsWSk9Plgud3JpdGUoVyxZKS5waXBlKFUpLFgud3JpdGVUb0J1ZmZlcj0oVSxXPXt9KT0+e2NvbnN0IFk9W10scT1uZXcgRi5Xcml0YWJsZSh7d3JpdGUoZWUsSixuZSl7WS5w'@;
put 'dXNoKGVlKSxuZSgpfX0pO3JldHVybiBuZXcgUHJvbWlzZSgoZWUsSik9PntxLm9uKCJlcnJvciIsSikub24oImZpbmlzaCIsKCk9PmVlKEkuY29uY2F0KFkpKSksWC53cml0ZShVLFcpLnBpcGUocSl9KX0sWC53cml0ZVRvU3RyaW5nPShVLFcpPT5YLndyaXRlVG9CdWZmZXIoVSxXKS50aGVu'@;
put 'KFk9PlkudG9TdHJpbmcoKSksWC53cml0ZVRvUGF0aD0oVSxXLFkpPT57Y29uc3QgcT1PLmNyZWF0ZVdyaXRlU3RyZWFtKFUse2VuY29kaW5nOiJ1dGY4In0pO3JldHVybiBYLndyaXRlKFcsWSkucGlwZShxKX19LDQ2OTI6KHVlLFgpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9w'@;
put 'ZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLmlzU3luY1RyYW5zZm9ybT12b2lkIDAsWC5pc1N5bmNUcmFuc2Zvcm09eT0+MT09PXkubGVuZ3RofSwyNjU2OmZ1bmN0aW9uKHVlLFgseSl7InVzZSBzdHJpY3QiO3ZhciBJPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5j'@;
put 'dGlvbihPKXtyZXR1cm4gTyYmTy5fX2VzTW9kdWxlP086e2RlZmF1bHQ6T319O09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLmRlY29kZVRva2VuPVguaGFzVG9rZW5FeHBpcmVkPVguaXNSZWZyZXNoVG9rZW5FeHBpcmluZz1YLmlzQWNjZXNzVG9r'@;
put 'ZW5FeHBpcmluZz12b2lkIDA7Y29uc3QgXz1JKHkoNjI0NSkpO2Z1bmN0aW9uIFAoTyx6KXtyZXR1cm4oMCxfLmRlZmF1bHQpKE8pLmV4cC0obmV3IERhdGUpLnZhbHVlT2YoKS8xZTM8PXp9WC5pc0FjY2Vzc1Rva2VuRXhwaXJpbmc9ZnVuY3Rpb24gZyhPLHo9MzYwMCl7cmV0dXJuIU98fFAo'@;
put 'Tyx6KX0sWC5pc1JlZnJlc2hUb2tlbkV4cGlyaW5nPWZ1bmN0aW9uIEIoTyx6PTMwKXtyZXR1cm4hT3x8UChPLHopfSxYLmhhc1Rva2VuRXhwaXJlZD1mdW5jdGlvbiB3KE8pe3JldHVybiFPfHxQKE8sMCl9LFguZGVjb2RlVG9rZW49ZnVuY3Rpb24gRihPKXtsZXQgejt0cnl7ej0oMCxfLmRl'@;
put 'ZmF1bHQpKE8pfWNhdGNoe3Rocm93IG5ldyBFcnJvcigiSW52YWxpZCB0b2tlbiBzdXBwbGllZC4iKX1yZXR1cm4gen19LDY3OTk6ZnVuY3Rpb24odWUsWCx5KXsidXNlIHN0cmljdCI7dmFyIEk9dGhpcyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKGcs'@;
put 'Qix3LFApe3ZvaWQgMD09PVAmJihQPXcpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShnLFAse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEJbd119fSl9OmZ1bmN0aW9uKGcsQix3LFApe3ZvaWQgMD09PVAmJihQPXcpLGdbUF09Qlt3XX0pLF89dGhpcyYmdGhpcy5fX2V4cG9y'@;
put 'dFN0YXJ8fGZ1bmN0aW9uKGcsQil7Zm9yKHZhciB3IGluIGcpImRlZmF1bHQiIT09dyYmIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChCLHcpJiZJKEIsZyx3KX07T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLF8oeSgyNjU2KSxY'@;
put 'KX0sMzI1OToodWUsWCk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFgucHJlZml4TWVzc2FnZT12b2lkIDAsWC5wcmVmaXhNZXNzYWdlPShJLF8pPT57aWYoIm9iamVjdCI9PXR5cGVvZiBJKWlmKEkuaGFzT3duUHJvcGVy'@;
put 'dHkoIm1lc3NhZ2UiKSlJLm1lc3NhZ2U9XytJLm1lc3NhZ2U7ZWxzZXtpZighSS5oYXNPd25Qcm9wZXJ0eSgiYm9keSIpKXJldHVybiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sSSkse21lc3NhZ2U6X30pO2lmKCJvYmplY3QiPT10eXBlb2YgSS5ib2R5JiYoSS5tZXNzYWdlPUku'@;
put 'Ym9keS5tZXNzYWdlP18rSS5ib2R5Lm1lc3NhZ2U6XyksInN0cmluZyI9PXR5cGVvZiBJLmJvZHkpe2xldCBnO3RyeXtnPUpTT04ucGFyc2UoSS5ib2R5KX1jYXRjaHtyZXR1cm4gSS5tZXNzYWdlPV8sSX1yZXR1cm4gZy5tZXNzYWdlPWcubWVzc2FnZT9fK2cubWVzc2FnZTpfLEkuYm9keT1n'@;
put 'LEl9fXJldHVybiJzdHJpbmciPT10eXBlb2YgSSYmKEk9XytJKSxJfX0sOTc3ODpmdW5jdGlvbih1ZSxYLHkpeyJ1c2Ugc3RyaWN0Ijt2YXIgST10aGlzJiZ0aGlzLl9fY3JlYXRlQmluZGluZ3x8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oZyxCLHcsUCl7dm9pZCAwPT09UCYmKFA9dyksT2Jq'@;
put 'ZWN0LmRlZmluZVByb3BlcnR5KGcsUCx7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gQlt3XX19KX06ZnVuY3Rpb24oZyxCLHcsUCl7dm9pZCAwPT09UCYmKFA9dyksZ1tQXT1CW3ddfSksXz10aGlzJiZ0aGlzLl9fZXhwb3J0U3Rhcnx8ZnVuY3Rpb24oZyxCKXtmb3IodmFy'@;
put 'IHcgaW4gZykiZGVmYXVsdCIhPT13JiYhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKEIsdykmJkkoQixnLHcpfTtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksXyh5KDMyNTkpLFgpLF8oeSgxMDY0KSxYKX0sMTA2NDoodWUsWCx5'@;
put 'KT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksWC5TZXJ2ZXJUeXBlRXJyb3I9dm9pZCAwO2NvbnN0IEk9eSgzOTAwKTtjbGFzcyBfIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IoQj1bXSl7bGV0IHc9KEI9Wy4uLm5ldyBT'@;
put 'ZXQoQildKS5sZW5ndGg/Qi5qb2luKCIsICIpLnRyaW0oKTpbSS5TZXJ2ZXJUeXBlLlNhc1ZpeWEsSS5TZXJ2ZXJUeXBlLlNhczksSS5TZXJ2ZXJUeXBlLlNhc2pzXS5qb2luKCIsICIpLnRyaW0oKTt3PXcucmVwbGFjZSgvLFxzKFteLF0qKSQvLCIgYW5kICQxIiksc3VwZXIoYEludmFsaWQg'@;
put 'c2VydmVyIHR5cGU6IHZhbGlkIG9wdGlvbiR7MSE9PUIubGVuZ3RoPyJzIjoiIn0gJHsxIT09Qi5sZW5ndGg/ImFyZSI6ImlzIn0gJHt3fWApLHRoaXMubmFtZT0iU2VydmVyVHlwZUVycm9yIixPYmplY3Quc2V0UHJvdG90eXBlT2YodGhpcyxfLnByb3RvdHlwZSl9fVguU2VydmVyVHlwZUVy'@;
put 'cm9yPV99LDM5MDY6ZnVuY3Rpb24odWUsWCx5KXsidXNlIHN0cmljdCI7dmFyIEk9dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKE8seixOLEwpe3JldHVybiBuZXcoTnx8KE49UHJvbWlzZSkpKGZ1bmN0aW9uKFUsVyl7ZnVuY3Rpb24gWShKKXt0cnl7ZWUoTC5uZXh0KEopKX1jYXRj'@;
put 'aChuZSl7VyhuZSl9fWZ1bmN0aW9uIHEoSil7dHJ5e2VlKEwudGhyb3coSikpfWNhdGNoKG5lKXtXKG5lKX19ZnVuY3Rpb24gZWUoSil7Si5kb25lP1UoSi52YWx1ZSk6ZnVuY3Rpb24gSyhVKXtyZXR1cm4gVSBpbnN0YW5jZW9mIE4/VTpuZXcgTihmdW5jdGlvbihXKXtXKFUpfSl9KEoudmFs'@;
put 'dWUpLnRoZW4oWSxxKX1lZSgoTD1MLmFwcGx5KE8senx8W10pKS5uZXh0KCkpfSl9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLnVwZGF0ZUNzdj1YLmNyZWF0ZUNzdj1YLnJlYWRDc3Y9dm9pZCAwO2NvbnN0IF89eSgxNTU5KSxnPXkoNzIwMSk7'@;
put 'WC5yZWFkQ3N2PU89Pkkodm9pZCAwLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuKHlpZWxkKDAsXy5yZWFkRmlsZSkoTykpLnNwbGl0KCJcbiIpLmZpbHRlcihOPT5OLmxlbmd0aCkubWFwKE49Pk4uc3BsaXQoIiwiKSl9KSxYLmNyZWF0ZUNzdj0oTyx6LE4pPT5JKHZvaWQgMCx2'@;
put 'b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0IEw9eWllbGQoMCxnLndyaXRlVG9TdHJpbmcpKHose2hlYWRlcnM6Tn0pO3lpZWxkKDAsXy5jcmVhdGVGaWxlKShPLEwpfSksWC51cGRhdGVDc3Y9KE8seixOLEwpPT5JKHZvaWQgMCx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0'@;
put 'IEs9eWllbGQgRihPLHosTixMKTtpZihMKXtjb25zdCBVPTA9PT1LLmxlbmd0aD8xOksubGVuZ3RoLFc9Ti5maW5kSW5kZXgoWT0+WT09PUwpO1c+LTE/ei5zcGxpY2UoVywwLFUpOihOLnNwbGljZSgwLDAsTCksei5zcGxpY2UoMCwwLFUpKX1LLnB1c2goeikseWllbGQoMCxYLmNyZWF0ZUNz'@;
put 'dikoTyxLLE4pfSk7Y29uc3QgRj0oTyx6LE4sTCk9Pkkodm9pZCAwLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7aWYoei5sZW5ndGghPT1OLmxlbmd0aCl7aWYoei5sZW5ndGg+Ti5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJhIHJlY29yZCBjYW4gbm90IGhhdmUgbW9yZSBmaWVsZHMgdGhh'@;
put 'biBwcm92aWRlZCBjb2x1bW5zIik7aWYoIUx8fHoubGVuZ3RoKzEhPT1OLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoImEgcmVjb3JkIGNhbiBub3QgaGF2ZSBsZXNzIGZpZWxkcyB0aGFuIHByb3ZpZGVkIGNvbHVtbnMiKX1lbHNlIGlmKEwmJk4uaW5jbHVkZXMoTCkpdGhyb3cgbmV3IEVycm9y'@;
put 'KCJhIHJlY29yZCBjYW4gbm90IGhhdmUgbW9yZSBmaWVsZHMgdGhhbiBwcm92aWRlZCBjb2x1bW5zIik7Y29uc3QgSz15aWVsZCgwLFgucmVhZENzdikoTykuY2F0Y2goVz0+W10pLFU9S1swXTtpZihVKXtpZihOLmxlbmd0aD5VLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIm51bWJlciBvZiBw'@;
put 'cm92aWRlZCBjb2x1bW5zIGFyZSBncmVhdGVyIHRoYW4gbnVtYmVyIG9mIGV4aXN0aW5nIGNvbHVtbnMiKTtpZihOLmxlbmd0aDxVLmxlbmd0aCl7aWYoIUx8fE4ubGVuZ3RoKzEhPT1VLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIm51bWJlciBvZiBwcm92aWRlZCBjb2x1bW5zIGFyZSBsZXNz'@;
put 'IHRoYW4gbnVtYmVyIG9mIGV4aXN0aW5nIGNvbHVtbnMiKTtjb25zdCBXPVUuZmluZEluZGV4KHE9PnE9PT1MKSxZPVsuLi5OXTtpZighKFc+LTEpKXRocm93IG5ldyBFcnJvcigicHJvdmlkZWQgY29sdW1ucyBkb2VzIG5vdCBtYXRjaCBleGlzdGluZyBjb2x1bW5zIik7aWYoWS5zcGxpY2Uo'@;
put 'VywwLEwpLEpTT04uc3RyaW5naWZ5KE4pIT09SlNPTi5zdHJpbmdpZnkoWSkpdGhyb3cgbmV3IEVycm9yKCJwcm92aWRlZCBjb2x1bW5zIGRvZXMgbm90IG1hdGNoIGV4aXN0aW5nIGNvbHVtbnMiKX1lbHNle2lmKEpTT04uc3RyaW5naWZ5KE4pIT09SlNPTi5zdHJpbmdpZnkoVSkpdGhyb3cg'@;
put 'bmV3IEVycm9yKCJwcm92aWRlZCBjb2x1bW5zIGRvZXMgbm90IG1hdGNoIGV4aXN0aW5nIGNvbHVtbnMiKTtpZihMJiYhTi5pbmNsdWRlcyhMKSl0aHJvdyBuZXcgRXJyb3IoImNhbiBub3QgYWRkIG5ldyBpZCB0byBleGlzdGluZyBkYXRhIil9fXJldHVybiBLfSl9LDE1NTk6ZnVuY3Rpb24o'@;
put 'dWUsWCx5KXsidXNlIHN0cmljdCI7dmFyIEk9dGhpcyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKG0sQSxhZSx0ZSl7dm9pZCAwPT09dGUmJih0ZT1hZSksT2JqZWN0LmRlZmluZVByb3BlcnR5KG0sdGUse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9u'@;
put 'KCl7cmV0dXJuIEFbYWVdfX0pfTpmdW5jdGlvbihtLEEsYWUsdGUpe3ZvaWQgMD09PXRlJiYodGU9YWUpLG1bdGVdPUFbYWVdfSksXz10aGlzJiZ0aGlzLl9fc2V0TW9kdWxlRGVmYXVsdHx8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24obSxBKXtPYmplY3QuZGVmaW5lUHJvcGVydHkobSwiZGVm'@;
put 'YXVsdCIse2VudW1lcmFibGU6ITAsdmFsdWU6QX0pfTpmdW5jdGlvbihtLEEpe20uZGVmYXVsdD1BfSksZz10aGlzJiZ0aGlzLl9faW1wb3J0U3Rhcnx8ZnVuY3Rpb24obSl7aWYobSYmbS5fX2VzTW9kdWxlKXJldHVybiBtO3ZhciBBPXt9O2lmKG51bGwhPW0pZm9yKHZhciBhZSBpbiBtKSJk'@;
put 'ZWZhdWx0IiE9PWFlJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobSxhZSkmJkkoQSxtLGFlKTtyZXR1cm4gXyhBLG0pLEF9LEI9dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKG0sQSxhZSx0ZSl7cmV0dXJuIG5ldyhhZXx8KGFlPVByb21pc2UpKShmdW5jdGlv'@;
put 'bih3ZSxVZSl7ZnVuY3Rpb24gSmUodmUpe3RyeXt4ZSh0ZS5uZXh0KHZlKSl9Y2F0Y2goWGUpe1VlKFhlKX19ZnVuY3Rpb24gb3QodmUpe3RyeXt4ZSh0ZS50aHJvdyh2ZSkpfWNhdGNoKFhlKXtVZShYZSl9fWZ1bmN0aW9uIHhlKHZlKXt2ZS5kb25lP3dlKHZlLnZhbHVlKTpmdW5jdGlvbiBz'@;
put 'ZSh3ZSl7cmV0dXJuIHdlIGluc3RhbmNlb2YgYWU/d2U6bmV3IGFlKGZ1bmN0aW9uKFVlKXtVZSh3ZSl9KX0odmUudmFsdWUpLnRoZW4oSmUsb3QpfXhlKCh0ZT10ZS5hcHBseShtLEF8fFtdKSkubmV4dCgpKX0pfSx3PXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihtKXty'@;
put 'ZXR1cm4gbSYmbS5fX2VzTW9kdWxlP206e2RlZmF1bHQ6bX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLmdldExpbmVFbmRpbmc9WC5pc1Rlc3RGaWxlPVgudGVzdEZpbGVSZWdFeHA9WC5jcmVhdGVSZWFkU3RyZWFtPVguY3JlYXRlV3JpdGVT'@;
put 'dHJlYW09WC5nZXRSZWFsUGF0aD1YLmJhc2U2NEVuY29kZUZpbGU9WC5iYXNlNjRFbmNvZGVJbWFnZUZpbGU9WC5wYXRoU2VwRXNjYXBlZD1YLmNvcHk9WC5tb3ZlRmlsZT1YLmdldFJlbGF0aXZlUGF0aD1YLnVuaWZ5RmlsZVBhdGg9WC5kZWxldGVGb2xkZXI9WC5kZWxldGVGaWxlPVguY3Jl'@;
put 'YXRlRmlsZT1YLmNyZWF0ZUZvbGRlcj1YLmxpc3RGaWxlc0FuZFN1YkZvbGRlcnNJbkZvbGRlcj1YLmxpc3RTdWJGb2xkZXJzSW5Gb2xkZXI9WC5saXN0U2FzRmlsZXNJbkZvbGRlcj1YLmxpc3RJbmlGaWxlc0luRm9sZGVyPVgubGlzdEZpbGVzSW5Gb2xkZXI9WC5yZWFkRmlsZUJpbmFyeT1Y'@;
put 'LnJlYWRGaWxlPVguaXNGb2xkZXI9WC5mb2xkZXJFeGlzdHM9WC5maWxlRXhpc3RzPXZvaWQgMDtjb25zdCBQPXcoeSg1Njc0KSksRj13KHkoMjUyMCkpLE89eSg2MjY2KSx6PWcoeSgyOTc1KSksTj15KDM5MDApO2Z1bmN0aW9uIEsobSl7cmV0dXJuIEIodGhpcyx2b2lkIDAsdm9pZCAwLGZ1'@;
put 'bmN0aW9uKigpe3JldHVybiBQLmRlZmF1bHQucHJvbWlzZXMuYWNjZXNzKG0sUC5kZWZhdWx0LmNvbnN0YW50cy5GX09LKS50aGVuKCgpPT4hMCkuY2F0Y2goKCk9PiExKX0pfWZ1bmN0aW9uIFkobSl7cmV0dXJuIEIodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiBQLmRl'@;
put 'ZmF1bHQucHJvbWlzZXMucmVhZEZpbGUobSl9KX1mdW5jdGlvbiBxKG0pe3JldHVybiBCKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4gUC5kZWZhdWx0LnByb21pc2VzLnJlYWRkaXIobSx7d2l0aEZpbGVUeXBlczohMH0pLnRoZW4oQT0+QS5maWx0ZXIoYWU9PiFhZS5p'@;
put 'c0RpcmVjdG9yeSgpKS5tYXAoYWU9PmFlLm5hbWUpKX0pfWZ1bmN0aW9uIGllKG0sQT0hMCxhZT1bXSl7cmV0dXJuIEIodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiBQLmRlZmF1bHQucHJvbWlzZXMucmVhZGRpcihtLHt3aXRoRmlsZVR5cGVzOiEwfSkudGhlbih0ZT0+'@;
put 'Qih0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7aWYoQSYmdGUuZmlsdGVyKHdlPT53ZS5pc0RpcmVjdG9yeSgpKS5sZW5ndGgpe2xldCB3ZT1bXTtyZXR1cm4geWllbGQoMCxPLmFzeW5jRm9yRWFjaCkodGUuZmlsdGVyKFVlPT5VZS5pc0RpcmVjdG9yeSgpKSxVZT0+Qih0aGlzLHZv'@;
put 'aWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3QgSmU9VWUubmFtZTtpZighYWUuaW5jbHVkZXMoSmUpKXtjb25zdCBvdD1GLmRlZmF1bHQuam9pbihtLEplKTt3ZT1bLi4ud2UsLi4uKHlpZWxkIGllKG90LEEsYWUpKS5tYXAoeGU9PkYuZGVmYXVsdC5qb2luKEplLHhlKSldfX0pKSxbLi4u'@;
put 'dGUuZmlsdGVyKFVlPT4hVWUuaXNEaXJlY3RvcnkoKSkubWFwKFVlPT5VZS5uYW1lKSwuLi53ZV19cmV0dXJuIHRlLm1hcChzZT0+c2UubmFtZSl9KSl9KX1mdW5jdGlvbiBsZShtKXtyZXR1cm4gQih0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIFAuZGVmYXVsdC5wcm9t'@;
put 'aXNlcy5ta2RpcihtLHtyZWN1cnNpdmU6ITB9KX0pfWZ1bmN0aW9uIFNlKG0sQT1GLmRlZmF1bHQuc2VwLGFlPSIvIil7Y29uc3QgdGU9e3VuaXg6Ii8iLHdpbjoiXFwifTtsZXQgc2U9T2JqZWN0LmtleXModGUpLmZpbmQod2U9PnRlW3dlXT09PUEpO2lmKHNlKXtjb25zdCB3ZT10ZVtPYmpl'@;
put 'Y3Qua2V5cyh0ZSkuZmluZChVZT0+VWUhPT1zZSldO3JldHVybiBzZT10ZVtzZV0sbS5zcGxpdCh3ZSkuam9pbihzZSl9cmV0dXJuIG0uc3BsaXQoYWUpLmpvaW4oQSl9WC5maWxlRXhpc3RzPWZ1bmN0aW9uIEwobSl7cmV0dXJuIEIodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3Jl'@;
put 'dHVybiBQLmRlZmF1bHQucHJvbWlzZXMuYWNjZXNzKG0sUC5kZWZhdWx0LmNvbnN0YW50cy5GX09LKS50aGVuKCgpPT4hMCkuY2F0Y2goKCk9PiExKX0pfSxYLmZvbGRlckV4aXN0cz1LLFguaXNGb2xkZXI9ZnVuY3Rpb24gVShtKXtyZXR1cm4gQih0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rp'@;
put 'b24qKCl7cmV0dXJuIFAuZGVmYXVsdC5wcm9taXNlcy5sc3RhdChtKS50aGVuKEE9PkEuaXNEaXJlY3RvcnkoKSkuY2F0Y2goKCk9PiExKX0pfSxYLnJlYWRGaWxlPWZ1bmN0aW9uIFcobSxBPSJ1dGY4Iil7cmV0dXJuIEIodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiBQ'@;
put 'LmRlZmF1bHQucHJvbWlzZXMucmVhZEZpbGUobSxBKX0pfSxYLnJlYWRGaWxlQmluYXJ5PVksWC5saXN0RmlsZXNJbkZvbGRlcj1xLFgubGlzdEluaUZpbGVzSW5Gb2xkZXI9ZnVuY3Rpb24gZWUobSl7cmV0dXJuIEIodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybih5aWVs'@;
put 'ZCBxKG0pKS5maWx0ZXIoQT0+QS5lbmRzV2l0aCgiLmluaSIpKX0pfSxYLmxpc3RTYXNGaWxlc0luRm9sZGVyPWZ1bmN0aW9uIEoobSxBPSExLGFlPVtdKXtyZXR1cm4gQih0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuKHlpZWxkIGllKG0sQSxhZSkpLmZpbHRlcih3ZT0+'@;
put 'd2UuZW5kc1dpdGgoIi5zYXMiKSl9KX0sWC5saXN0U3ViRm9sZGVyc0luRm9sZGVyPWZ1bmN0aW9uIG5lKG0pe3JldHVybiBCKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4gUC5kZWZhdWx0LnByb21pc2VzLnJlYWRkaXIobSx7d2l0aEZpbGVUeXBlczohMH0pLnRoZW4o'@;
put 'QT0+QS5maWx0ZXIoYWU9PmFlLmlzRGlyZWN0b3J5KCkpLm1hcChhZT0+YWUubmFtZSkpfSl9LFgubGlzdEZpbGVzQW5kU3ViRm9sZGVyc0luRm9sZGVyPWllLFguY3JlYXRlRm9sZGVyPWxlLFguY3JlYXRlRmlsZT1mdW5jdGlvbiBtZShtLEEsYWUpe3JldHVybiBCKHRoaXMsdm9pZCAwLHZv'@;
put 'aWQgMCxmdW5jdGlvbiooKXtpZigobT1TZShtKSkuc3BsaXQoRi5kZWZhdWx0LnNlcCkubGVuZ3RoPjEpe2xldCB0ZT1tLnNwbGl0KEYuZGVmYXVsdC5zZXApO3RlLnBvcCgpO2NvbnN0IHNlPXRlLmpvaW4oRi5kZWZhdWx0LnNlcCk7KHlpZWxkIEsoc2UpKXx8KHlpZWxkIGxlKHNlKSl9cmV0'@;
put 'dXJuIFAuZGVmYXVsdC5wcm9taXNlcy53cml0ZUZpbGUobSxBLGFlKX0pfSxYLmRlbGV0ZUZpbGU9ZnVuY3Rpb24gX2UobSl7cmV0dXJuIEIodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiBQLmRlZmF1bHQucmVtb3ZlKG0pfSl9LFguZGVsZXRlRm9sZGVyPWZ1bmN0aW9u'@;
put 'IFRlKG0pe3JldHVybiBCKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4gUC5kZWZhdWx0LnJtKG0se3JlY3Vyc2l2ZTohMCxmb3JjZTohMH0pfSl9LFgudW5pZnlGaWxlUGF0aD1TZSxYLmdldFJlbGF0aXZlUGF0aD1mdW5jdGlvbiBqZShtLEEpe2NvbnN0IGFlPW0uc3Bs'@;
put 'aXQoRi5kZWZhdWx0LnNlcCksdGU9QS5zcGxpdChGLmRlZmF1bHQuc2VwKTtsZXQgc2U9W10sd2U9W107YWUuZm9yRWFjaCgodmUsWGUpPT57dm9pZCAwIT09dGVbWGVdJiZhZVtYZV09PT10ZVtYZV0/c2UucHVzaCh2ZSk6dmUmJndlLnB1c2godmUpfSk7Y29uc3QgVWU9c2Uuam9pbihGLmRl'@;
put 'ZmF1bHQuc2VwKSxKZT1uZXcgUmVnRXhwKGBeJHtGLmRlZmF1bHQuc2VwLnJlcGxhY2UoL1xcL2csIlxcXFwiKX1gKSxvdD1uZXcgUmVnRXhwKGAke0YuZGVmYXVsdC5zZXAucmVwbGFjZSgvXFwvZywiXFxcXCIpfSRgKTtyZXR1cm4od2UubGVuZ3RoP2AuLiR7Ri5kZWZhdWx0LnNlcH1gLnJl'@;
put 'cGVhdCh3ZS5sZW5ndGgpOmAuJHtGLmRlZmF1bHQuc2VwfWApK0EucmVwbGFjZShVZSwiIikucmVwbGFjZShKZSwiIikucmVwbGFjZShvdCwiIil9LFgubW92ZUZpbGU9ZnVuY3Rpb24gVihtLEEpe3JldHVybiBCKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4gUC5kZWZh'@;
put 'dWx0LnByb21pc2VzLnJlbmFtZShtLEEpfSl9LFguY29weT1mdW5jdGlvbiBwKG0sQSl7cmV0dXJuIEIodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiBQLmRlZmF1bHQuY29weShtLEEpfSl9LFgucGF0aFNlcEVzY2FwZWQ9Ri5kZWZhdWx0LnNlcC5yZXBsYWNlKC9cXC9n'@;
put 'LCJcXFxcIiksWC5iYXNlNjRFbmNvZGVJbWFnZUZpbGU9ZnVuY3Rpb24gYihtKXtyZXR1cm4gQih0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIFkobSkudGhlbihBPT57bGV0IGFlPUYuZGVmYXVsdC5leHRuYW1lKG0pLnN1YnN0cigxKXx8InBuZyI7cmV0dXJuInN2ZyI9'@;
put 'PT1hZSYmKGFlPSJzdmcreG1sIiksImRhdGE6aW1hZ2UvIithZSsiO2Jhc2U2NCwiK0EudG9TdHJpbmcoImJhc2U2NCIpfSl9KX0sWC5iYXNlNjRFbmNvZGVGaWxlPWZ1bmN0aW9uIHgobSl7cmV0dXJuIEIodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiBQLmRlZmF1bHQu'@;
put 'cHJvbWlzZXMucmVhZEZpbGUobSx7ZW5jb2Rpbmc6ImJhc2U2NCJ9KX0pfSxYLmdldFJlYWxQYXRoPWZ1bmN0aW9uIEMobSl7cmV0dXJuIFAuZGVmYXVsdC5yZWFscGF0aFN5bmMobSl9LFguY3JlYXRlV3JpdGVTdHJlYW09ZnVuY3Rpb24gVChtKXtyZXR1cm4gQih0aGlzLHZvaWQgMCx2b2lk'@;
put 'IDAsZnVuY3Rpb24qKCl7cmV0dXJuKHlpZWxkIHouZmlsZUV4aXN0cyhtKSl8fCh5aWVsZCB6LmNyZWF0ZUZpbGUobSwiIikpLFAuZGVmYXVsdC5jcmVhdGVXcml0ZVN0cmVhbShtLHtmbGFnczoiYSJ9KX0pfSxYLmNyZWF0ZVJlYWRTdHJlYW09bT0+Qih2b2lkIDAsdm9pZCAwLHZvaWQgMCxm'@;
put 'dW5jdGlvbiooKXtyZXR1cm4gUC5kZWZhdWx0LmNyZWF0ZVJlYWRTdHJlYW0obSl9KSxYLnRlc3RGaWxlUmVnRXhwPS9cLnRlc3RcLihcZCtcLik/c2FzJC9pLFguaXNUZXN0RmlsZT1tPT5YLnRlc3RGaWxlUmVnRXhwLnRlc3QobSksWC5nZXRMaW5lRW5kaW5nPW09Pm5ldyBSZWdFeHAoTi5M'@;
put 'aW5lRW5kaW5ncy5DUkxGKS50ZXN0KG0pP04uTGluZUVuZGluZ3MuQ1JMRjpOLkxpbmVFbmRpbmdzLkxGfSw1NjI2OmZ1bmN0aW9uKHVlLFgseSl7InVzZSBzdHJpY3QiO3ZhciBJPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbih3KXtyZXR1cm4gdyYmdy5fX2VzTW9kdWxl'@;
put 'P3c6e2RlZmF1bHQ6d319O09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLmdldEFic29sdXRlUGF0aD12b2lkIDA7Y29uc3QgXz1JKHkoMjUyMCkpLGc9SSh5KDc0MzUpKTtYLmdldEFic29sdXRlUGF0aD0odyxQKT0+Xy5kZWZhdWx0LmlzQWJzb2x1'@;
put 'dGUodyl8fC9efi8uZXhlYyh3KT9fLmRlZmF1bHQubm9ybWFsaXplKHcucmVwbGFjZSgvXn4vLGcuZGVmYXVsdC5ob21lZGlyKCkpKTpfLmRlZmF1bHQuam9pbihQLHcpfSwyOTc1OmZ1bmN0aW9uKHVlLFgseSl7InVzZSBzdHJpY3QiO3ZhciBJPXRoaXMmJnRoaXMuX19jcmVhdGVCaW5kaW5n'@;
put 'fHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbih3LFAsRixPKXt2b2lkIDA9PT1PJiYoTz1GKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodyxPLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBQW0ZdfX0pfTpmdW5jdGlvbih3LFAsRixPKXt2b2lkIDA9PT1PJiYoTz1GKSx3W09d'@;
put 'PVBbRl19KSxfPXRoaXMmJnRoaXMuX19leHBvcnRTdGFyfHxmdW5jdGlvbih3LFApe2Zvcih2YXIgRiBpbiB3KSJkZWZhdWx0IiE9PUYmJiFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoUCxGKSYmSShQLHcsRil9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9k'@;
put 'dWxlIix7dmFsdWU6ITB9KSxYLnJlYWRDc3Y9WC5jcmVhdGVDc3Y9WC51cGRhdGVDc3Y9WC5nZXRMaW5lRW5kaW5nPVgudGVzdEZpbGVSZWdFeHA9WC5pc1Rlc3RGaWxlPVguZ2V0UmVhbFBhdGg9WC5iYXNlNjRFbmNvZGVGaWxlPVguYmFzZTY0RW5jb2RlSW1hZ2VGaWxlPVguY29weT1YLnBh'@;
put 'dGhTZXBFc2NhcGVkPVgubW92ZUZpbGU9WC51bmlmeUZpbGVQYXRoPVguZ2V0UmVsYXRpdmVQYXRoPVguZGVsZXRlRm9sZGVyPVguZGVsZXRlRmlsZT1YLmNyZWF0ZVdyaXRlU3RyZWFtPVguY3JlYXRlUmVhZFN0cmVhbT1YLmNyZWF0ZUZvbGRlcj1YLmNyZWF0ZUZpbGU9WC5saXN0RmlsZXNB'@;
put 'bmRTdWJGb2xkZXJzSW5Gb2xkZXI9WC5saXN0U3ViRm9sZGVyc0luRm9sZGVyPVgubGlzdFNhc0ZpbGVzSW5Gb2xkZXI9WC5saXN0SW5pRmlsZXNJbkZvbGRlcj1YLmxpc3RGaWxlc0luRm9sZGVyPVgucmVhZEZpbGVCaW5hcnk9WC5yZWFkRmlsZT1YLmlzRm9sZGVyPVguZm9sZGVyRXhpc3Rz'@;
put 'PVguZmlsZUV4aXN0cz12b2lkIDA7dmFyIGc9eSgxNTU5KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiZmlsZUV4aXN0cyIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGcuZmlsZUV4aXN0c319KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiZm9sZGVyRXhpc3RzIix7'@;
put 'ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZy5mb2xkZXJFeGlzdHN9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KFgsImlzRm9sZGVyIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZy5pc0ZvbGRlcn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwi'@;
put 'cmVhZEZpbGUiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBnLnJlYWRGaWxlfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJyZWFkRmlsZUJpbmFyeSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGcucmVhZEZpbGVCaW5hcnl9fSksT2JqZWN0'@;
put 'LmRlZmluZVByb3BlcnR5KFgsImxpc3RGaWxlc0luRm9sZGVyIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZy5saXN0RmlsZXNJbkZvbGRlcn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwibGlzdEluaUZpbGVzSW5Gb2xkZXIiLHtlbnVtZXJhYmxlOiEwLGdldDpm'@;
put 'dW5jdGlvbigpe3JldHVybiBnLmxpc3RJbmlGaWxlc0luRm9sZGVyfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJsaXN0U2FzRmlsZXNJbkZvbGRlciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGcubGlzdFNhc0ZpbGVzSW5Gb2xkZXJ9fSksT2JqZWN0LmRlZmlu'@;
put 'ZVByb3BlcnR5KFgsImxpc3RTdWJGb2xkZXJzSW5Gb2xkZXIiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBnLmxpc3RTdWJGb2xkZXJzSW5Gb2xkZXJ9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KFgsImxpc3RGaWxlc0FuZFN1YkZvbGRlcnNJbkZvbGRlciIse2VudW1l'@;
put 'cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGcubGlzdEZpbGVzQW5kU3ViRm9sZGVyc0luRm9sZGVyfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJjcmVhdGVGaWxlIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZy5jcmVhdGVGaWxlfX0pLE9iamVjdC5k'@;
put 'ZWZpbmVQcm9wZXJ0eShYLCJjcmVhdGVGb2xkZXIiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBnLmNyZWF0ZUZvbGRlcn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiY3JlYXRlUmVhZFN0cmVhbSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJu'@;
put 'IGcuY3JlYXRlUmVhZFN0cmVhbX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiY3JlYXRlV3JpdGVTdHJlYW0iLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBnLmNyZWF0ZVdyaXRlU3RyZWFtfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJkZWxldGVGaWxlIix7'@;
put 'ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZy5kZWxldGVGaWxlfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJkZWxldGVGb2xkZXIiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBnLmRlbGV0ZUZvbGRlcn19KSxPYmplY3QuZGVmaW5lUHJvcGVy'@;
put 'dHkoWCwiZ2V0UmVsYXRpdmVQYXRoIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZy5nZXRSZWxhdGl2ZVBhdGh9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KFgsInVuaWZ5RmlsZVBhdGgiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBnLnVuaWZ5'@;
put 'RmlsZVBhdGh9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIm1vdmVGaWxlIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZy5tb3ZlRmlsZX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwicGF0aFNlcEVzY2FwZWQiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlv'@;
put 'bigpe3JldHVybiBnLnBhdGhTZXBFc2NhcGVkfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJjb3B5Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZy5jb3B5fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJiYXNlNjRFbmNvZGVJbWFnZUZpbGUiLHtlbnVtZXJh'@;
put 'YmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBnLmJhc2U2NEVuY29kZUltYWdlRmlsZX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiYmFzZTY0RW5jb2RlRmlsZSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGcuYmFzZTY0RW5jb2RlRmlsZX19KSxPYmplY3Qu'@;
put 'ZGVmaW5lUHJvcGVydHkoWCwiZ2V0UmVhbFBhdGgiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBnLmdldFJlYWxQYXRofX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJpc1Rlc3RGaWxlIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZy5pc1Rl'@;
put 'c3RGaWxlfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJ0ZXN0RmlsZVJlZ0V4cCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGcudGVzdEZpbGVSZWdFeHB9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KFgsImdldExpbmVFbmRpbmciLHtlbnVtZXJhYmxlOiEwLGdl'@;
put 'dDpmdW5jdGlvbigpe3JldHVybiBnLmdldExpbmVFbmRpbmd9fSk7dmFyIEI9eSgzOTA2KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwidXBkYXRlQ3N2Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gQi51cGRhdGVDc3Z9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KFgs'@;
put 'ImNyZWF0ZUNzdiIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEIuY3JlYXRlQ3N2fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJyZWFkQ3N2Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gQi5yZWFkQ3N2fX0pLF8oeSg1NjI2KSxYKX0sMjc3'@;
put 'NzoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksWC5uZXdMaW5lPVguY2FwaXRhbGl6ZUZpcnN0Q2hhcj1YLnNhbml0aXplU3BlY2lhbENoYXJzPVgucGFkV2l0aE51bWJlcj12b2lkIDA7dmFyIEk9eSg1MzA2'@;
put 'KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwicGFkV2l0aE51bWJlciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEkucGFkV2l0aE51bWJlcn19KTt2YXIgXz15KDkyNzUpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJzYW5pdGl6ZVNwZWNpYWxDaGFycyIse2VudW1l'@;
put 'cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIF8uc2FuaXRpemVTcGVjaWFsQ2hhcnN9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KFgsImNhcGl0YWxpemVGaXJzdENoYXIiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBfLmNhcGl0YWxpemVGaXJzdENoYXJ9fSk7'@;
put 'dmFyIGc9eSgxNjI4KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwibmV3TGluZSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGcubmV3TGluZX19KX0sNTMwNjoodWUsWCk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2'@;
put 'YWx1ZTohMH0pLFgucGFkV2l0aE51bWJlcj12b2lkIDAsWC5wYWRXaXRoTnVtYmVyPShJLF89MCk9Pkk+OT9JOmAke199JHtJfWB9LDE2Mjg6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg0MTU1KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEw'@;
put 'fSksWC5uZXdMaW5lPXZvaWQgMCxYLm5ld0xpbmU9KCk9PiJ3aW4zMiI9PT1JLnBsYXRmb3JtPyJcXHJcXG4iOiJcXG4ifSw5Mjc1Oih1ZSxYKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksWC5jYXBpdGFsaXplRmlyc3RD'@;
put 'aGFyPVguc2FuaXRpemVTcGVjaWFsQ2hhcnM9dm9pZCAwLFguc2FuaXRpemVTcGVjaWFsQ2hhcnM9Xz0+Xy5yZXBsYWNlKC9bXHUwMDFiXHUwMDliXVtbKCkjOz9dKig/OlswLTldezEsNH0oPzo7WzAtOV17MCw0fSkqKT9bMC05QS1PUlpjZi1ucXJ5PT48XS9nLCIiKSxYLmNhcGl0YWxpemVG'@;
put 'aXJzdENoYXI9Xz0+Xy5jaGFyQXQoMCkudG9VcHBlckNhc2UoKStfLnNsaWNlKDEpfSw2NDY3OmZ1bmN0aW9uKHVlLFgseSl7InVzZSBzdHJpY3QiO3ZhciBJPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihGKXtyZXR1cm4gRiYmRi5fX2VzTW9kdWxlP0Y6e2RlZmF1bHQ6'@;
put 'Rn19O09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLmlzU3BlY2lhbE1pc3Npbmc9WC5jaG9pY2VWYWxpZGF0b3I9WC5jb25maXJtYXRpb25WYWxpZGF0b3I9WC51cmxWYWxpZGF0b3I9dm9pZCAwO2NvbnN0IF89SSh5KDQ4MSkpO1gudXJsVmFsaWRh'@;
put 'dG9yPShGLE8pPT4hIV8uZGVmYXVsdC5pc0h0dHBVcmkoRil8fCEhXy5kZWZhdWx0LmlzSHR0cHNVcmkoRil8fCIiPT09Rnx8TyxYLmNvbmZpcm1hdGlvblZhbGlkYXRvcj1GPT4hMD09PUZ8fCExPT09RixYLmNob2ljZVZhbGlkYXRvcj0oRixPLHopPT5GPjAmJkY8PU98fHosWC5pc1NwZWNp'@;
put 'YWxNaXNzaW5nPUY9Pigic3RyaW5nIiE9dHlwZW9mIEZ8fCFGLmluY2x1ZGVzKCIuLiIpKSYmbmV3IFJlZ0V4cCgiXihcXC4pP1thLXpfLl17MX0kIiwiaSIpLnRlc3QoRil9LDc3NTc6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUi'@;
put 'LHt2YWx1ZTohMH0pLFguZ2VuZXJhdGVUaW1lc3RhbXA9WC50aW1lc3RhbXBUb1lZWVlNTURESEhNTVNTPVguY29udmVydFNlY29uZHNUb0htcz12b2lkIDA7dmFyIEk9eSgxMzAyKTtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiY29udmVydFNlY29uZHNUb0htcyIse2VudW1lcmFibGU6ITAs'@;
put 'Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEkuY29udmVydFNlY29uZHNUb0htc319KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwidGltZXN0YW1wVG9ZWVlZTU1EREhITU1TUyIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEkudGltZXN0YW1wVG9ZWVlZTU1EREhITU1TU319'@;
put 'KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiZ2VuZXJhdGVUaW1lc3RhbXAiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBJLmdlbmVyYXRlVGltZXN0YW1wfX0pfSwxMzAyOih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2Vz'@;
put 'TW9kdWxlIix7dmFsdWU6ITB9KSxYLmNvbnZlcnRTZWNvbmRzVG9IbXM9WC5nZW5lcmF0ZVRpbWVzdGFtcD1YLnRpbWVzdGFtcFRvWVlZWU1NRERISE1NU1M9dm9pZCAwO2NvbnN0IEk9eSgyNzc3KTtYLnRpbWVzdGFtcFRvWVlZWU1NRERISE1NU1M9KHc9RGF0ZS5ub3coKSk9Pntjb25zdCBQ'@;
put 'PW5ldyBEYXRlKHcpO3JldHVybltQLmdldEZ1bGxZZWFyKCksKDAsSS5wYWRXaXRoTnVtYmVyKShQLmdldE1vbnRoKCkrMSksKDAsSS5wYWRXaXRoTnVtYmVyKShQLmdldERhdGUoKSldLmpvaW4oIi8iKSsiICIrWygwLEkucGFkV2l0aE51bWJlcikoUC5nZXRIb3VycygpKSwoMCxJLnBhZFdp'@;
put 'dGhOdW1iZXIpKFAuZ2V0TWludXRlcygpKSwoMCxJLnBhZFdpdGhOdW1iZXIpKFAuZ2V0U2Vjb25kcygpKV0uam9pbigiOiIpfSxYLmdlbmVyYXRlVGltZXN0YW1wPSh3PSIiLFApPT57Y29uc3QgRj1uZXcgRGF0ZTtsZXQgTz1bRi5nZXRVVENGdWxsWWVhcigpLEYuZ2V0VVRDTW9udGgoKSsx'@;
put 'LEYuZ2V0VVRDRGF0ZSgpLEYuZ2V0VVRDSG91cnMoKSxGLmdldFVUQ01pbnV0ZXMoKSxGLmdldFVUQ1NlY29uZHMoKV07cmV0dXJuIE89Ty5tYXAoej0+KDAsSS5wYWRXaXRoTnVtYmVyKSh6KSksUCYmdyYmUDxPLmxlbmd0aCYmUD49MCYmTy5zcGxpY2UoUCwwLHcpLE89Ty5qb2luKFA/IiI6'@;
put 'dyksT30sWC5jb252ZXJ0U2Vjb25kc1RvSG1zPXc9PntpZighdylyZXR1cm4iMCBzZWNvbmQiO2NvbnN0IFA9TWF0aC5mbG9vcih3LzYwKSxGPU1hdGguZmxvb3IoUC82MCksTz1QJTYwLHo9dyU2MDtsZXQgTj0iIjtyZXR1cm4gRj4wJiYoTj1GKyIgaG91ciIrKEY+MT8icyI6IiIpKSxPPjAm'@;
put 'JihOKz1gJHtOPyIsICI6IiJ9JHtPfSBtaW51dGUke08+MT8icyI6IiJ9YCksej4wJiYoTis9YCR7Tj8iLCAiOiIifSR7en0gc2Vjb25kJHt6PjE/InMiOiIifWApLE59fSw4MjM5Oih1ZSxYKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgSTtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVs'@;
put 'ZSIse3ZhbHVlOiEwfSksWC5Db25maWdUeXBlcz12b2lkIDAsKEk9WC5Db25maWdUeXBlc3x8KFguQ29uZmlnVHlwZXM9e30pKS5CdWlsZD0iYnVpbGRDb25maWciLEkuU2VydmljZT0ic2VydmljZUNvbmZpZyIsSS5Kb2I9ImpvYkNvbmZpZyIsSS5UZXN0PSJ0ZXN0Q29uZmlnIixJLkRvYz0i'@;
put 'ZG9jQ29uZmlnIixJLkRlcGxveT0iZGVwbG95Q29uZmlnIixJLlN0cmVhbT0ic3RyZWFtQ29uZmlnIixJLkF1dGg9ImF1dGhDb25maWcifSwyNDI3Oih1ZSxYKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9LDE4OToodWUs'@;
put 'WCk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSwzNjkyOih1ZSxYKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9LDQ3Mjk6KHVlLFgpPT57InVzZSBz'@;
put 'dHJpY3QiO3ZhciBJO09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLkxpbmVFbmRpbmdzPXZvaWQgMCwoST1YLkxpbmVFbmRpbmdzfHwoWC5MaW5lRW5kaW5ncz17fSkpLkNSTEY9IlxyXG4iLEkuTEY9IlxuIn0sNjkzOToodWUsWCk9PnsidXNlIHN0'@;
put 'cmljdCI7dmFyIEk7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFguTWVtYmVyVHlwZT12b2lkIDAsKEk9WC5NZW1iZXJUeXBlfHwoWC5NZW1iZXJUeXBlPXt9KSkuc2VydmljZT0ic2VydmljZSIsSS5maWxlPSJmaWxlIixJLmZvbGRlcj0iZm9sZGVy'@;
put 'In0sMzMyNzoodWUsWCk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSw1MTY1Oih1ZSxYKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9LDM5MDA6ZnVu'@;
put 'Y3Rpb24odWUsWCx5KXsidXNlIHN0cmljdCI7dmFyIEk9dGhpcyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKGcsQix3LFApe3ZvaWQgMD09PVAmJihQPXcpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShnLFAse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9u'@;
put 'KCl7cmV0dXJuIEJbd119fSl9OmZ1bmN0aW9uKGcsQix3LFApe3ZvaWQgMD09PVAmJihQPXcpLGdbUF09Qlt3XX0pLF89dGhpcyYmdGhpcy5fX2V4cG9ydFN0YXJ8fGZ1bmN0aW9uKGcsQil7Zm9yKHZhciB3IGluIGcpImRlZmF1bHQiIT09dyYmIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJv'@;
put 'cGVydHkuY2FsbChCLHcpJiZJKEIsZyx3KX07T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLF8oeSg4MjM5KSxYKSxfKHkoMjQyNyksWCksXyh5KDE4OSksWCksXyh5KDM2OTIpLFgpLF8oeSg2OTM5KSxYKSxfKHkoMzMyNyksWCksXyh5KDUxNjUpLFgp'@;
put 'LF8oeSg0MDY5KSxYKSxfKHkoODkzMiksWCksXyh5KDQpLFgpLF8oeSgyMDE1KSxYKSxfKHkoODUxNSksWCksXyh5KDUzMTMpLFgpLF8oeSg4OTc5KSxYKSxfKHkoNDcyOSksWCl9LDQwNjk6KHVlLFgpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxl'@;
put 'Iix7dmFsdWU6ITB9KSxYLmlzTWFjcm9WYXJzPXZvaWQgMCxYLmlzTWFjcm9WYXJzPUk9PkkmJiJvYmplY3QiPT10eXBlb2YgSS5tYWNyb1ZhcnMmJiFBcnJheS5pc0FycmF5KEkubWFjcm9WYXJzKX0sODkzMjoodWUsWCk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgs'@;
put 'Il9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSw0Oih1ZSxYKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgSTtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksWC5TQVNKc0ZpbGVUeXBlPXZvaWQgMCwoST1YLlNBU0pzRmlsZVR5cGV8fChYLlNBU0pzRmlsZVR5cGU9'@;
put 'e30pKS5zZXJ2aWNlPSJTZXJ2aWNlIixJLmpvYj0iSm9iIixJLnRlc3Q9IlRlc3QiLEkuZmlsZT0iRmlsZSJ9LDIwMTU6KHVlLFgpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0sODUxNToodWUsWCk9PnsidXNlIHN0cmlj'@;
put 'dCI7dmFyIEk7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFguU2VydmVyVHlwZT12b2lkIDAsKEk9WC5TZXJ2ZXJUeXBlfHwoWC5TZXJ2ZXJUeXBlPXt9KSkuU2FzVml5YT0iU0FTVklZQSIsSS5TYXM5PSJTQVM5IixJLlNhc2pzPSJTQVNKUyJ9LDUz'@;
put 'MTM6KHVlLFgpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0sODk3OToodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksWC5UYXJnZXQ9dm9p'@;
put 'ZCAwO2NvbnN0IEk9eSg4MjM5KSxfPXkoODUxNSksZz15KDY3ODEpO1guVGFyZ2V0PWNsYXNzIEJ7Y29uc3RydWN0b3IoUCxGPXt9KXt0aGlzLl9zZXJ2ZXJUeXBlPV8uU2VydmVyVHlwZS5TYXNWaXlhLHRoaXMuZ2V0Q29uZmlnPShPLHopPT5PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24o'@;
put 'e30sdGhpcy5fY29uZmlnW09dfHx7fSkseltPXSk7dHJ5e2lmKCFQKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCB0YXJnZXQ6IElucHV0IEpTT04gaXMgbnVsbCBvciB1bmRlZmluZWQuIik7dGhpcy5fY29uZmlnPUYsdGhpcy5fbmFtZT0oMCxnLnZhbGlkYXRlVGFyZ2V0TmFtZSkoUC5uYW1l'@;
put 'KSx0aGlzLl9zZXJ2ZXJVcmw9KDAsZy52YWxpZGF0ZVNlcnZlclVybCkoUC5zZXJ2ZXJVcmwpLHRoaXMuX3NlcnZlclR5cGU9KDAsZy52YWxpZGF0ZVNlcnZlclR5cGUpKFAuc2VydmVyVHlwZSksdGhpcy5faHR0cHNBZ2VudE9wdGlvbnM9KDAsZy52YWxpZGF0ZUh0dHBzQWdlbnRPcHRpb25z'@;
put 'KShQLmh0dHBzQWdlbnRPcHRpb25zKSx0aGlzLl9hcHBMb2M9KDAsZy52YWxpZGF0ZUFwcExvYykoUC5hcHBMb2MpLHRoaXMuX2NvbnRleHROYW1lPSgwLGcudmFsaWRhdGVDb250ZXh0TmFtZSkoUC5jb250ZXh0TmFtZSx0aGlzLl9zZXJ2ZXJUeXBlKSx0aGlzLl9zZXJ2ZXJOYW1lPSgwLGcu'@;
put 'dmFsaWRhdGVTZXJ2ZXJOYW1lKShQLnNlcnZlck5hbWUsdGhpcy5fc2VydmVyVHlwZSksdGhpcy5fc3luY0ZvbGRlcj0oMCxnLnZhbGlkYXRlU3luY0ZvbGRlcikoUC5zeW5jRm9sZGVyKSx0aGlzLl9yZXBvc2l0b3J5TmFtZT0oMCxnLnZhbGlkYXRlUmVwb3NpdG9yeU5hbWUpKFAucmVwb3Np'@;
put 'dG9yeU5hbWUsdGhpcy5fc2VydmVyVHlwZSksUC5kb2NDb25maWcmJih0aGlzLl9kb2NDb25maWc9KDAsZy52YWxpZGF0ZURvY0NvbmZpZykodGhpcy5nZXRDb25maWcoSS5Db25maWdUeXBlcy5Eb2MsUCkpKSxQLmF1dGhDb25maWcmJih0aGlzLl9hdXRoQ29uZmlnPSgwLGcudmFsaWRhdGVB'@;
put 'dXRoQ29uZmlnKSh0aGlzLmdldENvbmZpZyhJLkNvbmZpZ1R5cGVzLkF1dGgsUCkpKSxQLmF1dGhDb25maWdTYXM5JiYodGhpcy5fYXV0aENvbmZpZ1Nhczk9KDAsZy52YWxpZGF0ZUF1dGhDb25maWdTYXM5KShQLmF1dGhDb25maWdTYXM5KSksUC5idWlsZENvbmZpZyYmKHRoaXMuX2J1aWxk'@;
put 'Q29uZmlnPSgwLGcudmFsaWRhdGVCdWlsZENvbmZpZykodGhpcy5nZXRDb25maWcoSS5Db25maWdUeXBlcy5CdWlsZCxQKSx0aGlzLl9uYW1lKSksdGhpcy5fZGVwbG95Q29uZmlnPSgwLGcudmFsaWRhdGVEZXBsb3lDb25maWcpKFAuZGVwbG95Q29uZmlnP3RoaXMuZ2V0Q29uZmlnKEkuQ29u'@;
put 'ZmlnVHlwZXMuRGVwbG95LFApOntkZXBsb3lTZXJ2aWNlUGFjazohMCxkZXBsb3lTY3JpcHRzOltdfSksUC5zZXJ2aWNlQ29uZmlnJiYodGhpcy5fc2VydmljZUNvbmZpZz0oMCxnLnZhbGlkYXRlU2VydmljZUNvbmZpZykodGhpcy5nZXRDb25maWcoSS5Db25maWdUeXBlcy5TZXJ2aWNlLFAp'@;
put 'KSksUC5qb2JDb25maWcmJih0aGlzLl9qb2JDb25maWc9KDAsZy52YWxpZGF0ZUpvYkNvbmZpZykodGhpcy5nZXRDb25maWcoSS5Db25maWdUeXBlcy5Kb2IsUCkpKSxQLnN0cmVhbUNvbmZpZyYmKHRoaXMuX3N0cmVhbUNvbmZpZz0oMCxnLnZhbGlkYXRlU3RyZWFtQ29uZmlnKSh0aGlzLmdl'@;
put 'dENvbmZpZyhJLkNvbmZpZ1R5cGVzLlN0cmVhbSxQKSkpLFAudGVzdENvbmZpZyYmKHRoaXMuX3Rlc3RDb25maWc9KDAsZy52YWxpZGF0ZVRlc3RDb25maWcpKHRoaXMuZ2V0Q29uZmlnKEkuQ29uZmlnVHlwZXMuVGVzdCxQKSkpLFAubWFjcm9Gb2xkZXJzJiZQLm1hY3JvRm9sZGVycy5sZW5n'@;
put 'dGgmJih0aGlzLl9tYWNyb0ZvbGRlcnM9UC5tYWNyb0ZvbGRlcnMpLFAucHJvZ3JhbUZvbGRlcnMmJlAucHJvZ3JhbUZvbGRlcnMubGVuZ3RoJiYodGhpcy5fcHJvZ3JhbUZvbGRlcnM9UC5wcm9ncmFtRm9sZGVycyksUC5iaW5hcnlGb2xkZXJzJiZQLmJpbmFyeUZvbGRlcnMubGVuZ3RoJiYo'@;
put 'dGhpcy5fYmluYXJ5Rm9sZGVycz1QLmJpbmFyeUZvbGRlcnMpLFAuc3luY0RpcmVjdG9yaWVzJiZQLnN5bmNEaXJlY3Rvcmllcy5sZW5ndGgmJih0aGlzLl9zeW5jRGlyZWN0b3JpZXM9KDAsZy52YWxpZGF0ZVN5bmNEaXJlY3RvcmllcykoUC5zeW5jRGlyZWN0b3JpZXMpKSxQLnNhc2pzQnVp'@;
put 'bGRGb2xkZXImJih0aGlzLl9zYXNqc0J1aWxkRm9sZGVyPSgwLGcudmFsaWRhdGVTYXNqc0J1aWxkRm9sZGVyKShQLnNhc2pzQnVpbGRGb2xkZXIpKSxQLnNhc2pzUmVzdWx0c0ZvbGRlciYmKHRoaXMuX3Nhc2pzUmVzdWx0c0ZvbGRlcj0oMCxnLnZhbGlkYXRlU2FzanNSZXN1bHRzRm9sZGVy'@;
put 'KShQLnNhc2pzUmVzdWx0c0ZvbGRlcikpfWNhdGNoKE8pe3Rocm93IG5ldyBFcnJvcihgRXJyb3IgcGFyc2luZyB0YXJnZXQ6ICR7Ty5tZXNzYWdlfWApfX1nZXQgbmFtZSgpe3JldHVybiB0aGlzLl9uYW1lfWdldCBzZXJ2ZXJVcmwoKXtyZXR1cm4gdGhpcy5fc2VydmVyVXJsfWdldCBzZXJ2'@;
put 'ZXJUeXBlKCl7cmV0dXJuIHRoaXMuX3NlcnZlclR5cGV9Z2V0IGh0dHBzQWdlbnRPcHRpb25zKCl7cmV0dXJuIHRoaXMuX2h0dHBzQWdlbnRPcHRpb25zfWdldCBhcHBMb2MoKXtyZXR1cm4gdGhpcy5fYXBwTG9jfWdldCBkb2NDb25maWcoKXtyZXR1cm4gdGhpcy5fZG9jQ29uZmlnfWdldCBh'@;
put 'dXRoQ29uZmlnKCl7cmV0dXJuIHRoaXMuX2F1dGhDb25maWd9Z2V0IGF1dGhDb25maWdTYXM5KCl7cmV0dXJuIHRoaXMuX2F1dGhDb25maWdTYXM5fWdldCBidWlsZENvbmZpZygpe3JldHVybiB0aGlzLl9idWlsZENvbmZpZ31nZXQgZGVwbG95Q29uZmlnKCl7cmV0dXJuIHRoaXMuX2RlcGxv'@;
put 'eUNvbmZpZ31nZXQgc2VydmljZUNvbmZpZygpe3JldHVybiB0aGlzLl9zZXJ2aWNlQ29uZmlnfWdldCBqb2JDb25maWcoKXtyZXR1cm4gdGhpcy5fam9iQ29uZmlnfWdldCBzdHJlYW1Db25maWcoKXtyZXR1cm4gdGhpcy5fc3RyZWFtQ29uZmlnfWdldCBtYWNyb0ZvbGRlcnMoKXtyZXR1cm4g'@;
put 'dGhpcy5fbWFjcm9Gb2xkZXJzfWdldCBwcm9ncmFtRm9sZGVycygpe3JldHVybiB0aGlzLl9wcm9ncmFtRm9sZGVyc31nZXQgYmluYXJ5Rm9sZGVycygpe3JldHVybiB0aGlzLl9iaW5hcnlGb2xkZXJzfWdldCBjb250ZXh0TmFtZSgpe3JldHVybiB0aGlzLl9jb250ZXh0TmFtZX1nZXQgc2Vy'@;
put 'dmVyTmFtZSgpe3JldHVybiB0aGlzLl9zZXJ2ZXJOYW1lfWdldCByZXBvc2l0b3J5TmFtZSgpe3JldHVybiB0aGlzLl9yZXBvc2l0b3J5TmFtZX1nZXQgdGVzdENvbmZpZygpe3JldHVybiB0aGlzLl90ZXN0Q29uZmlnfWdldCBzeW5jRm9sZGVyKCl7cmV0dXJuIHRoaXMuX3N5bmNGb2xkZXJ9'@;
put 'Z2V0IHN5bmNEaXJlY3Rvcmllcygpe3JldHVybiB0aGlzLl9zeW5jRGlyZWN0b3JpZXN9Z2V0IHNhc2pzQnVpbGRGb2xkZXIoKXtyZXR1cm4gdGhpcy5fc2FzanNCdWlsZEZvbGRlcn1nZXQgc2FzanNSZXN1bHRzRm9sZGVyKCl7cmV0dXJuIHRoaXMuX3Nhc2pzUmVzdWx0c0ZvbGRlcn10b0pz'@;
put 'b24oUD0hMCl7dmFyIEYsTyx6O2NvbnN0IE49e25hbWU6dGhpcy5uYW1lLHNlcnZlclVybDp0aGlzLnNlcnZlclVybCxzZXJ2ZXJUeXBlOnRoaXMuc2VydmVyVHlwZSxodHRwc0FnZW50T3B0aW9uczp0aGlzLmh0dHBzQWdlbnRPcHRpb25zLGFwcExvYzp0aGlzLmFwcExvYyxkb2NDb25maWc6'@;
put 'dGhpcy5kb2NDb25maWcsZGVwbG95Q29uZmlnOnRoaXMuZGVwbG95Q29uZmlnfTtyZXR1cm4hKG51bGw9PT0oRj10aGlzLm1hY3JvRm9sZGVycyl8fHZvaWQgMD09PUYpJiZGLmxlbmd0aCYmKE4ubWFjcm9Gb2xkZXJzPXRoaXMubWFjcm9Gb2xkZXJzKSwhKG51bGw9PT0oTz10aGlzLnByb2dy'@;
put 'YW1Gb2xkZXJzKXx8dm9pZCAwPT09TykmJk8ubGVuZ3RoJiYoTi5wcm9ncmFtRm9sZGVycz10aGlzLnByb2dyYW1Gb2xkZXJzKSwhKG51bGw9PT0oej10aGlzLmJpbmFyeUZvbGRlcnMpfHx2b2lkIDA9PT16KSYmei5sZW5ndGgmJihOLmJpbmFyeUZvbGRlcnM9dGhpcy5iaW5hcnlGb2xkZXJz'@;
put 'KSx0aGlzLmF1dGhDb25maWcmJihOLmF1dGhDb25maWc9dGhpcy5hdXRoQ29uZmlnKSx0aGlzLmF1dGhDb25maWdTYXM5JiYoTi5hdXRoQ29uZmlnU2FzOT10aGlzLmF1dGhDb25maWdTYXM5KSx0aGlzLnNhc2pzQnVpbGRGb2xkZXI/Ti5zYXNqc0J1aWxkRm9sZGVyPXRoaXMuc2FzanNCdWls'@;
put 'ZEZvbGRlcjpQJiYoTi5zYXNqc0J1aWxkRm9sZGVyPWcuREVGQVVMVF9TQVNKU19CVUlMRF9GT0xERVIpLHRoaXMuc2FzanNSZXN1bHRzRm9sZGVyP04uc2FzanNSZXN1bHRzRm9sZGVyPXRoaXMuc2FzanNSZXN1bHRzRm9sZGVyOlAmJihOLnNhc2pzUmVzdWx0c0ZvbGRlcj1nLkRFRkFVTFRf'@;
put 'U0FTSlNfUkVTVUxUU19GT0xERVIpLHRoaXMuc3luY0RpcmVjdG9yaWVzP04uc3luY0RpcmVjdG9yaWVzPXRoaXMuc3luY0RpcmVjdG9yaWVzOlAmJihOLnN5bmNEaXJlY3Rvcmllcz1bXSksdGhpcy5idWlsZENvbmZpZz9OLmJ1aWxkQ29uZmlnPXRoaXMuYnVpbGRDb25maWc6UCYmKE4uYnVp'@;
put 'bGRDb25maWc9e2luaXRQcm9ncmFtOiIiLHRlcm1Qcm9ncmFtOiIiLGJ1aWxkT3V0cHV0RmlsZU5hbWU6YCR7dGhpcy5uYW1lfS5zYXNgLG1hY3JvVmFyczp7fX0pLHRoaXMuam9iQ29uZmlnP04uam9iQ29uZmlnPXRoaXMuam9iQ29uZmlnOlAmJihOLmpvYkNvbmZpZz17am9iRm9sZGVyczpb'@;
put 'XSxpbml0UHJvZ3JhbToiIix0ZXJtUHJvZ3JhbToiIixtYWNyb1ZhcnM6e319KSx0aGlzLnNlcnZpY2VDb25maWc/Ti5zZXJ2aWNlQ29uZmlnPXRoaXMuc2VydmljZUNvbmZpZzpQJiYoTi5zZXJ2aWNlQ29uZmlnPXtzZXJ2aWNlRm9sZGVyczpbXSxpbml0UHJvZ3JhbToiIix0ZXJtUHJvZ3Jh'@;
put 'bToiIixtYWNyb1ZhcnM6e319KSx0aGlzLnN0cmVhbUNvbmZpZz9OLnN0cmVhbUNvbmZpZz10aGlzLnN0cmVhbUNvbmZpZzpQJiYoTi5zdHJlYW1Db25maWc9e3N0cmVhbVdlYkZvbGRlcjoiIixzdHJlYW1XZWI6ITEsd2ViU291cmNlUGF0aDoiIixzdHJlYW1TZXJ2aWNlTmFtZToiIixhc3Nl'@;
put 'dFBhdGhzOltdfSksdGhpcy50ZXN0Q29uZmlnP04udGVzdENvbmZpZz10aGlzLnRlc3RDb25maWc6UCYmKE4udGVzdENvbmZpZz17aW5pdFByb2dyYW06IiIsdGVybVByb2dyYW06IiIsbWFjcm9WYXJzOnt9LHRlc3RTZXRVcDoiIix0ZXN0VGVhckRvd246IiJ9KSx0aGlzLnNlcnZlclR5cGU9'@;
put 'PT1fLlNlcnZlclR5cGUuU2FzVml5YT9OLmNvbnRleHROYW1lPXRoaXMuY29udGV4dE5hbWU6dGhpcy5zZXJ2ZXJUeXBlPT09Xy5TZXJ2ZXJUeXBlLlNhczkmJihOLnNlcnZlck5hbWU9dGhpcy5zZXJ2ZXJOYW1lLE4ucmVwb3NpdG9yeU5hbWU9dGhpcy5yZXBvc2l0b3J5TmFtZSksTn19fSw2'@;
put 'NzgxOmZ1bmN0aW9uKHVlLFgseSl7InVzZSBzdHJpY3QiO3ZhciBJPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihwKXtyZXR1cm4gcCYmcC5fX2VzTW9kdWxlP3A6e2RlZmF1bHQ6cH19O09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9'@;
put 'KSxYLnZhbGlkYXRlU2FzanNSZXN1bHRzRm9sZGVyPVgudmFsaWRhdGVTYXNqc0J1aWxkRm9sZGVyPVgudmFsaWRhdGVTeW5jRGlyZWN0b3JpZXM9WC52YWxpZGF0ZVJlcG9zaXRvcnlOYW1lPVgudmFsaWRhdGVTeW5jRm9sZGVyPVgudmFsaWRhdGVTZXJ2ZXJOYW1lPVgudmFsaWRhdGVDb250'@;
put 'ZXh0TmFtZT1YLnZhbGlkYXRlU3RyZWFtQ29uZmlnPVgudmFsaWRhdGVEZXBsb3lDb25maWc9WC52YWxpZGF0ZUpvYkNvbmZpZz1YLnZhbGlkYXRlVGVzdENvbmZpZz1YLnZhbGlkYXRlU2VydmljZUNvbmZpZz1YLnZhbGlkYXRlQnVpbGRDb25maWc9WC52YWxpZGF0ZUF1dGhDb25maWdTYXM5'@;
put 'PVgudmFsaWRhdGVBdXRoQ29uZmlnPVgudmFsaWRhdGVEb2NDb25maWc9WC52YWxpZGF0ZUFwcExvYz1YLnZhbGlkYXRlSHR0cHNBZ2VudE9wdGlvbnM9WC52YWxpZGF0ZVNlcnZlclVybD1YLnZhbGlkYXRlVGFyZ2V0TmFtZT1YLnZhbGlkYXRlU2VydmVyVHlwZT1YLkRFRkFVTFRfU0FTSlNf'@;
put 'UkVTVUxUU19GT0xERVI9WC5ERUZBVUxUX1NBU0pTX0JVSUxEX0ZPTERFUj12b2lkIDA7Y29uc3QgXz1JKHkoNDgxKSksZz15KDM5MDApO1guREVGQVVMVF9TQVNKU19CVUlMRF9GT0xERVI9InNhc2pzYnVpbGQiLFguREVGQVVMVF9TQVNKU19SRVNVTFRTX0ZPTERFUj0ic2FzanNyZXN1bHRz'@;
put 'IixYLnZhbGlkYXRlU2VydmVyVHlwZT1wPT57aWYoIXApdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHNlcnZlciB0eXBlOiBgc2VydmVyVHlwZWAgY2Fubm90IGJlIG51bGwgb3IgdW5kZWZpbmVkLiIpO2lmKHAhPT1nLlNlcnZlclR5cGUuU2FzOSYmcCE9PWcuU2VydmVyVHlwZS5TYXNWaXlh'@;
put 'JiZwIT09Zy5TZXJ2ZXJUeXBlLlNhc2pzKXRocm93IG5ldyBFcnJvcihgSW52YWxpZCBzZXJ2ZXIgdHlwZTogU3VwcG9ydGVkIHZhbHVlcyBmb3IgIFxgc2VydmVyVHlwZVxgIGFyZSAke2cuU2VydmVyVHlwZS5TYXNWaXlhfSwgJHtnLlNlcnZlclR5cGUuU2FzOX0gYW5kICR7Zy5TZXJ2ZXJU'@;
put 'eXBlLlNhc2pzfS5gKTtyZXR1cm4gcH0sWC52YWxpZGF0ZVRhcmdldE5hbWU9cD0+e2lmKCFwKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCB0YXJnZXQgbmFtZTogYG5hbWVgIGNhbm5vdCBiZSBlbXB0eSwgbnVsbCBvciB1bmRlZmluZWQuIik7aWYocC50cmltKCkuaW5jbHVkZXMoIiAiKSl0'@;
put 'aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgdGFyZ2V0IG5hbWU6IGBuYW1lYCBjYW5ub3QgaW5jbHVkZSBzcGFjZXMuIik7aWYoIS9eW2EtekEtWjAtOVwtXSskL2kudGVzdChwKSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgdGFyZ2V0IG5hbWU6IGBuYW1lYCBjYW4gb25seSBjb250YWluIGFs'@;
put 'cGhhbnVtZXJpYyBjaGFyYWN0ZXJzIGFuZCBkYXNoZXMuIik7cmV0dXJuIHB9LFgudmFsaWRhdGVTZXJ2ZXJVcmw9cD0+e2lmKG51bGw9PXAmJihwPSIiKSwiIiE9PXAmJiFfLmRlZmF1bHQuaXNIdHRwVXJpKHApJiYhXy5kZWZhdWx0LmlzSHR0cHNVcmkocCkpdGhyb3cgbmV3IEVycm9yKCJJ'@;
put 'bnZhbGlkIHNlcnZlciBVUkw6IGBzZXJ2ZXJVcmxgIHNob3VsZCBlaXRoZXIgYmUgYW4gZW1wdHkgc3RyaW5nIG9yIGEgdmFsaWQgVVJMIG9mIHRoZSBmb3JtIGh0dHAocyk6Ly95b3VyLXNlcnZlci5jb20oOnBvcnQpLiIpO3JldHVybiBwfSxYLnZhbGlkYXRlSHR0cHNBZ2VudE9wdGlvbnM9'@;
put 'cD0+e2lmKHApe2lmKCJvYmplY3QiIT10eXBlb2YgcCl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgdmFsdWU6IGBodHRwc0FnZW50T3B0aW9uc2Agc2hvdWxkIGVpdGhlciBiZSBhbiBlbXB0eSBvciBhbiBvYmplY3Qgb2YgYEh0dHBzQWdlbnRPcHRpb25zYCIpO2lmKG51bGw9PXAuYWxsb3dJ'@;
put 'bnNlY3VyZVJlcXVlc3RzKXAuYWxsb3dJbnNlY3VyZVJlcXVlc3RzPSExO2Vsc2UgaWYoImJvb2xlYW4iIT10eXBlb2YgcC5hbGxvd0luc2VjdXJlUmVxdWVzdHMpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHZhbHVlOiBgaHR0cHNBZ2VudE9wdGlvbnMuYWxsb3dJbnNlY3VyZVJlcXVlc3Rz'@;
put 'YCBzaG91bGQgZWl0aGVyIGJlIGFuIGVtcHR5IG9yIGEgYm9vbGVhbiIpO3JldHVybiJzdHJpbmciIT10eXBlb2YgcC5jYVBhdGgmJihwLmNhUGF0aD12b2lkIDApLCJzdHJpbmciIT10eXBlb2YgcC5rZXlQYXRoJiYocC5rZXlQYXRoPXZvaWQgMCksInN0cmluZyIhPXR5cGVvZiBwLmNlcnRQ'@;
put 'YXRoJiYocC5jZXJ0UGF0aD12b2lkIDApLHB9fSxYLnZhbGlkYXRlQXBwTG9jPXA9PntpZighcCl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgYXBwIGxvY2F0aW9uOiBgYXBwTG9jYCBjYW5ub3QgYmUgZW1wdHksIG51bGwgb3IgdW5kZWZpbmVkLiIpO2lmKCFwLnN0YXJ0c1dpdGgoIi8iKSl0'@;
put 'aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgYXBwIGxvY2F0aW9uOiBgYXBwTG9jYCBtdXN0IHN0YXJ0IHdpdGggYSBgL2AuIik7cmV0dXJuIHB9LFgudmFsaWRhdGVEb2NDb25maWc9cD0+e2lmKHB8fChwPXt9KSwiYm9vbGVhbiIhPXR5cGVvZiBwLmRpc3BsYXlNYWNyb0NvcmUmJihwLmRpc3Bs'@;
put 'YXlNYWNyb0NvcmU9dm9pZCAwKSwiYm9vbGVhbiIhPXR5cGVvZiBwLmVuYWJsZUxpbmVhZ2UmJihwLmVuYWJsZUxpbmVhZ2U9dm9pZCAwKSwic3RyaW5nIiE9dHlwZW9mIHAub3V0RGlyZWN0b3J5JiYocC5vdXREaXJlY3Rvcnk9dm9pZCAwKSwic3RyaW5nIj09dHlwZW9mIHAuZGF0YUNvbnRy'@;
put 'b2xsZXJVcmwpe2lmKCIiIT09cC5kYXRhQ29udHJvbGxlclVybCYmIV8uZGVmYXVsdC5pc0h0dHBVcmkocC5kYXRhQ29udHJvbGxlclVybCkmJiFfLmRlZmF1bHQuaXNIdHRwc1VyaShwLmRhdGFDb250cm9sbGVyVXJsKSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgRGF0YSBDb250cm9sbGVy'@;
put 'IFVybDogYGRhdGFDb250cm9sbGVyVXJsYCBzaG91bGQgZWl0aGVyIGJlIGFuIGVtcHR5IHN0cmluZyBvciBhIHZhbGlkIFVSTCBvZiB0aGUgZm9ybSBodHRwKHMpOi8veW91ci1zZXJ2ZXIuY29tKDpwb3J0KS4iKX1lbHNlIHAuZGF0YUNvbnRyb2xsZXJVcmw9dm9pZCAwO3JldHVybiBwfSxY'@;
put 'LnZhbGlkYXRlQXV0aENvbmZpZz1wPT57aWYoIXApdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGF1dGggY29uZmlnOiBKU09OIGNhbm5vdCBiZSBudWxsIG9yIHVuZGVmaW5lZC4iKTtyZXR1cm4gcH0sWC52YWxpZGF0ZUF1dGhDb25maWdTYXM5PXA9PntpZighcCl0aHJvdyBuZXcgRXJyb3Io'@;
put 'IkludmFsaWQgYXV0aCBjb25maWcgZm9yIHNhczk6IEpTT04gY2Fubm90IGJlIG51bGwgb3IgdW5kZWZpbmVkLiIpO2lmKCFwLnVzZXJOYW1lfHwhcC5wYXNzd29yZCl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgYXV0aCBjb25maWcgZm9yIHNhczk6IHVzZXJOYW1lIGFuZCBwYXNzd29yZCBj'@;
put 'YW4gbm90IGJlIGVtcHR5Iik7cmV0dXJuIHB9LFgudmFsaWRhdGVCdWlsZENvbmZpZz0ocCxiKT0+e2lmKCFwKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBidWlsZCBjb25maWc6IEpTT04gY2Fubm90IGJlIG51bGwgb3IgdW5kZWZpbmVkLiIpO3JldHVybiBwLmJ1aWxkT3V0cHV0RmlsZU5h'@;
put 'bWV8fChwLmJ1aWxkT3V0cHV0RmlsZU5hbWU9YCR7Yn0uc2FzYCkscC5pbml0UHJvZ3JhbXx8KHAuaW5pdFByb2dyYW09IiIpLHAudGVybVByb2dyYW18fChwLnRlcm1Qcm9ncmFtPSIiKSxwLm1hY3JvVmFyc3x8KHAubWFjcm9WYXJzPXt9KSxwfSxYLnZhbGlkYXRlU2VydmljZUNvbmZpZz1w'@;
put 'PT57aWYoIXApdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHNlcnZpY2UgY29uZmlnOiBKU09OIGNhbm5vdCBiZSBudWxsIG9yIHVuZGVmaW5lZC4iKTtyZXR1cm4gcC5pbml0UHJvZ3JhbXx8KHAuaW5pdFByb2dyYW09IiIpLHAudGVybVByb2dyYW18fChwLnRlcm1Qcm9ncmFtPSIiKSxwLnNl'@;
put 'cnZpY2VGb2xkZXJzfHwocC5zZXJ2aWNlRm9sZGVycz1bXSkscC5tYWNyb1ZhcnN8fChwLm1hY3JvVmFycz17fSkscH0sWC52YWxpZGF0ZVRlc3RDb25maWc9cD0+e2lmKCFwKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCB0ZXN0IGNvbmZpZzogSlNPTiBjYW5ub3QgYmUgbnVsbCBvciB1bmRl'@;
put 'ZmluZWQuIik7cmV0dXJuIHAuaW5pdFByb2dyYW18fChwLmluaXRQcm9ncmFtPSIiKSxwLnRlcm1Qcm9ncmFtfHwocC50ZXJtUHJvZ3JhbT0iIikscC5tYWNyb1ZhcnN8fChwLm1hY3JvVmFycz17fSkscC50ZXN0U2V0VXB8fChwLnRlc3RTZXRVcD0iIikscC50ZXN0VGVhckRvd258fChwLnRl'@;
put 'c3RUZWFyRG93bj0iIikscH0sWC52YWxpZGF0ZUpvYkNvbmZpZz1wPT57aWYoIXApdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGpvYiBjb25maWc6IEpTT04gY2Fubm90IGJlIG51bGwgb3IgdW5kZWZpbmVkLiIpO3JldHVybiBwLmluaXRQcm9ncmFtfHwocC5pbml0UHJvZ3JhbT0iIikscC50'@;
put 'ZXJtUHJvZ3JhbXx8KHAudGVybVByb2dyYW09IiIpLHAuam9iRm9sZGVyc3x8KHAuam9iRm9sZGVycz1bXSkscC5tYWNyb1ZhcnN8fChwLm1hY3JvVmFycz17fSkscH0sWC52YWxpZGF0ZURlcGxveUNvbmZpZz1wPT57aWYoIXApdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGRlcGxveSBjb25m'@;
put 'aWc6IEpTT04gY2Fubm90IGJlIG51bGwgb3IgdW5kZWZpbmVkLiIpO3JldHVybiBwLmRlcGxveVNlcnZpY2VQYWNrPSEhcC5kZXBsb3lTZXJ2aWNlUGFjayxwLmRlcGxveVNjcmlwdHN8fChwLmRlcGxveVNjcmlwdHM9W10pLHB9LFgudmFsaWRhdGVTdHJlYW1Db25maWc9cD0+e2lmKCFwKXRo'@;
put 'cm93IG5ldyBFcnJvcigiSW52YWxpZCBzdHJlYW0gY29uZmlnOiBKU09OIGNhbm5vdCBiZSBudWxsIG9yIHVuZGVmaW5lZC4iKTtpZighMCE9PXAuc3RyZWFtV2ViJiYhMSE9PXAuc3RyZWFtV2ViKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBzdHJlYW0gY29uZmlnOiBgc3RyZWFtV2ViYCBj'@;
put 'YW5ub3QgYmUgYSBub24tYm9vbGVhbiB2YWx1ZS4iKTtpZihwLnN0cmVhbVdlYiYmIXAuc3RyZWFtV2ViRm9sZGVyKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBzdHJlYW0gY29uZmlnOiBgc3RyZWFtV2ViRm9sZGVyYCBjYW5ub3QgYmUgZW1wdHksIG51bGwgb3IgdW5kZWZpbmVkIHdoZW4g'@;
put 'YHN0cmVhbVdlYmAgaXMgdHJ1ZS4iKTtpZihwLnN0cmVhbVdlYiYmIXAud2ViU291cmNlUGF0aCl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgc3RyZWFtIGNvbmZpZzogYHdlYlNvdXJjZVBhdGhgIHNob3VsZCBjb250YWluIHRoZSBwYXRoIHRvIHlvdXIgZnJvbnRlbmQgYXBwbGljYXRpb24g'@;
put 'ZWcgYnVpbGQsIGRpc3QsIG9yIHNyYy4iKTtyZXR1cm4gcC5zdHJlYW1Mb2dvJiYic3RyaW5nIiE9dHlwZW9mIHAuc3RyZWFtTG9nbyYmKHAuc3RyZWFtTG9nbz12b2lkIDApLHAuYXNzZXRQYXRoc3x8KHAuYXNzZXRQYXRocz1bXSkscC5zdHJlYW1TZXJ2aWNlTmFtZXx8KHAuc3RyZWFtU2Vy'@;
put 'dmljZU5hbWU9ImNsaWNrbWUiKSxwfSxYLnZhbGlkYXRlQ29udGV4dE5hbWU9KHAsYik9PmIhPT1nLlNlcnZlclR5cGUuU2FzVml5YXx8cD9wOiJTQVMgSm9iIEV4ZWN1dGlvbiBjb21wdXRlIGNvbnRleHQiLFgudmFsaWRhdGVTZXJ2ZXJOYW1lPShwLGIpPT5iIT09Zy5TZXJ2ZXJUeXBlLlNh'@;
put 'czl8fHA/cDoiU0FTQXBwIixYLnZhbGlkYXRlU3luY0ZvbGRlcj1wPT57aWYoInN0cmluZyI9PXR5cGVvZiBwJiZwKXJldHVybiBwfSxYLnZhbGlkYXRlUmVwb3NpdG9yeU5hbWU9KHAsYik9PmIhPT1nLlNlcnZlclR5cGUuU2FzOXx8cD9wOiJGb3VuZGF0aW9uIixYLnZhbGlkYXRlU3luY0Rp'@;
put 'cmVjdG9yaWVzPXA9PntpZighcCl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgc3luY0RpcmVjdG9yaWVzIGNvbmZpZzogSlNPTiBjYW5ub3QgYmUgbnVsbCBvciB1bmRlZmluZWQuIik7cmV0dXJuIHAuZm9yRWFjaChiPT57aWYoIWIubG9jYWx8fCFiLnJlbW90ZSl0aHJvdyBuZXcgRXJyb3Io'@;
put 'IkludmFsaWQgc3luY0RpcmVjdG9yeSBjb25maWc6IHZhbHVlcyBvZiBwcm9wZXJ0eSAnbG9jYWwnIGFuZCAncmVtb3RlIGNhbiBub3QgYmUgZW1wdHkgb3IgdW5kZWZpbmVkIil9KSxwfSxYLnZhbGlkYXRlU2FzanNCdWlsZEZvbGRlcj1wPT57aWYoInN0cmluZyIhPXR5cGVvZiBwKXRocm93'@;
put 'IG5ldyBFcnJvcihgSW52YWxpZCB0eXBlIG9mIHZhbHVlICgke3R5cGVvZiBwfSkgaXMgcHJvdmlkZWQgZm9yIHByb3BlcnR5ICdzYXNqc0J1aWxkRm9sZGVyJyBpbiBjb25maWcuIFJlcXVpcmVkIGlzIHN0cmluZy5gKTtyZXR1cm4gcHx8WC5ERUZBVUxUX1NBU0pTX0JVSUxEX0ZPTERFUn0s'@;
put 'WC52YWxpZGF0ZVNhc2pzUmVzdWx0c0ZvbGRlcj1wPT57aWYoInN0cmluZyIhPXR5cGVvZiBwKXRocm93IG5ldyBFcnJvcihgSW52YWxpZCB0eXBlIG9mIHZhbHVlICgke3R5cGVvZiBwfSkgaXMgcHJvdmlkZWQgZm9yIHByb3BlcnR5ICdzYXNqc1Jlc3VsdHNGb2xkZXInIGluIGNvbmZpZy4g'@;
put 'UmVxdWlyZWQgaXMgc3RyaW5nLmApO3JldHVybiBwfHxYLkRFRkFVTFRfU0FTSlNfUkVTVUxUU19GT0xERVJ9fSwyOTI3OmZ1bmN0aW9uKHVlLFgseSl7InVzZSBzdHJpY3QiO3ZhciBJPXkoODc2NCkuQnVmZmVyLF89dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKEYpe3Jl'@;
put 'dHVybiBGJiZGLl9fZXNNb2R1bGU/Rjp7ZGVmYXVsdDpGfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFguZGVjb2RlRnJvbUJhc2U2ND1YLmVuY29kZVRvQmFzZTY0PXZvaWQgMDtjb25zdCBnPV8oeSg1ODM1KSksQj0ie3Nhc2pzX2VuY29kZWR9'@;
put 'IjtYLmVuY29kZVRvQmFzZTY0PUY9Pntjb25zdCBPPWcuZGVmYXVsdC5yYW5kb21CeXRlcygxMDApLnRvU3RyaW5nKCJoZXgiKSx6PUkuZnJvbShPK0YpLnRvU3RyaW5nKCJiYXNlNjQiKTtyZXR1cm4gQit6fSxYLmRlY29kZUZyb21CYXNlNjQ9Rj0+Ri5zdGFydHNXaXRoKEIpPyhGPUYucmVw'@;
put 'bGFjZSgvXntzYXNqc19lbmNvZGVkfS8sIiIpLEkuZnJvbShGLCJiYXNlNjQiKS50b1N0cmluZygpLnN1YnN0cmluZygyMDApKTpGfSw1ODE6KHVlLFgpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLmJ5dGVzVG9TaXpl'@;
put 'PXZvaWQgMCxYLmJ5dGVzVG9TaXplPShJLF89MSxnPTEwOTk1MTE2Mjc3NzYpPT57aWYoMD09PUkpcmV0dXJuIjAgQiI7ST1JPmc/ZzpJO2NvbnN0IFA9XzwwPzA6XyxGPU1hdGguZmxvb3IoTWF0aC5sb2coSSkvTWF0aC5sb2coMTAyNCkpO3JldHVybihJL01hdGgucG93KDEwMjQsRikpLnRv'@;
put 'Rml4ZWQoUCkrIiAiK1siQiIsIktCIiwiTUIiLCJHQiIsIlRCIl1bRl19fSw4NjUzOih1ZSxYKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksWC5jaHVuaz12b2lkIDAsWC5jaHVuaz1mdW5jdGlvbiB5KEksXz0yMjApe3Jl'@;
put 'dHVybiBJLmxlbmd0aDw9Xz9bSV06KEkubWF0Y2gobmV3IFJlZ0V4cCgiLnsxLCIrXysifSIsImciKSl8fFtdKS5maWx0ZXIoZz0+ISFnKX19LDY0NTc6KHVlLFgpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLmRpZmY9'@;
put 'dm9pZCAwLFguZGlmZj1mdW5jdGlvbiB5KEksXyl7cmV0dXJuWy4uLkkuZmlsdGVyKHc9PiJvYmplY3QiPT10eXBlb2Ygdz8hSlNPTi5zdHJpbmdpZnkoXykuaW5jbHVkZXMoSlNPTi5zdHJpbmdpZnkodykpOiFfLmluY2x1ZGVzKHcpKSwuLi5fLmZpbHRlcih3PT4ib2JqZWN0Ij09dHlwZW9m'@;
put 'IHc/IUpTT04uc3RyaW5naWZ5KEkpLmluY2x1ZGVzKEpTT04uc3RyaW5naWZ5KHcpKTohSS5pbmNsdWRlcyh3KSldfX0sMTUyOToodWUsWCk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFguZ2V0RXhlY3V0b3JQYXRoPXZv'@;
put 'aWQgMDtjb25zdCB5PXtTQVNWSVlBOiIvU0FTSm9iRXhlY3V0aW9uIixTQVM5OiIvU0FTU3RvcmVkUHJvY2Vzcy9kbyJ9O1guZ2V0RXhlY3V0b3JQYXRoPV89Pl8/KF89Xy50b1VwcGVyQ2FzZSgpLHlbX118fCIiKToiIn0sMzMxNjoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVm'@;
put 'aW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksWC5nZXRUcmVlRXhhbXBsZT1YLmlzRmlsZVRyZWU9dm9pZCAwO2NvbnN0IEk9eSgzOTAwKTtYLmlzRmlsZVRyZWU9Rj0+RiYmRi5tZW1iZXJzJiZBcnJheS5pc0FycmF5KEYubWVtYmVycykmJjA9PT1GLm1lbWJlcnMuZmls'@;
put 'dGVyKE89PiFnKE8pJiYhQihPKSYmIXcoTykpLmxlbmd0aDtjb25zdCBnPUY9PkYmJiJzdHJpbmciPT10eXBlb2YgRi5uYW1lJiZGLnR5cGU9PT1JLk1lbWJlclR5cGUuc2VydmljZSYmInN0cmluZyI9PXR5cGVvZiBGLmNvZGUsQj1GPT5GJiYic3RyaW5nIj09dHlwZW9mIEYubmFtZSYmRi50'@;
put 'eXBlPT09SS5NZW1iZXJUeXBlLmZpbGUmJiJzdHJpbmciPT10eXBlb2YgRi5jb2RlLHc9Rj0+RiYmInN0cmluZyI9PXR5cGVvZiBGLm5hbWUmJkYudHlwZT09PUkuTWVtYmVyVHlwZS5mb2xkZXImJkYubWVtYmVycyYmQXJyYXkuaXNBcnJheShGLm1lbWJlcnMpJiYwPT09Ri5tZW1iZXJzLmZp'@;
put 'bHRlcihPPT4hZyhPKSYmIUIoTykmJiF3KE8pKS5sZW5ndGg7WC5nZXRUcmVlRXhhbXBsZT0oKT0+KHttZW1iZXJzOlt7bmFtZToiam9icyIsdHlwZTpJLk1lbWJlclR5cGUuZm9sZGVyLG1lbWJlcnM6W3tuYW1lOiJleHRyYWN0Iix0eXBlOkkuTWVtYmVyVHlwZS5mb2xkZXIsbWVtYmVyczpb'@;
put 'e25hbWU6Im1ha2VkYXRhMSIsdHlwZTpJLk1lbWJlclR5cGUuc2VydmljZSxjb2RlOiIlcHV0IEhlbGxvIFdvcmxkITsifV19XX1dfSl9LDYyNjY6ZnVuY3Rpb24odWUsWCx5KXsidXNlIHN0cmljdCI7dmFyIEk9dGhpcyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1'@;
put 'bmN0aW9uKE4sTCxLLFUpe3ZvaWQgMD09PVUmJihVPUspLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShOLFUse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIExbS119fSl9OmZ1bmN0aW9uKE4sTCxLLFUpe3ZvaWQgMD09PVUmJihVPUspLE5bVV09TFtLXX0pLF89dGhpcyYmdGhp'@;
put 'cy5fX2V4cG9ydFN0YXJ8fGZ1bmN0aW9uKE4sTCl7Zm9yKHZhciBLIGluIE4pImRlZmF1bHQiIT09SyYmIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChMLEspJiZJKEwsTixLKX07T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFgu'@;
put 'Y2h1bms9WC5kaWZmPVguYnl0ZXNUb1NpemU9WC5nZXRFeGVjdXRvclBhdGg9WC5kZWNvZGVGcm9tQmFzZTY0PVguZW5jb2RlVG9CYXNlNjQ9WC51cmxPcmlnaW49WC5nZW5lcmF0ZVBhdGhGb3JTYXM9WC5nZXRNYWNyb3NQYXRoPVguZXNjYXBlV2luU2xhc2hlcz1YLmlzTGludXg9WC5pc1dp'@;
put 'bmRvd3M9WC51bmlxQXJyYXk9WC5hc3luY0ZvckVhY2g9WC51dWlkdjQ9dm9pZCAwO3ZhciBnPXkoMTEzMSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsInV1aWR2NCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGcudXVpZHY0fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0'@;
put 'eShYLCJhc3luY0ZvckVhY2giLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBnLmFzeW5jRm9yRWFjaH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwidW5pcUFycmF5Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZy51bmlxQXJyYXl9fSksT2Jq'@;
put 'ZWN0LmRlZmluZVByb3BlcnR5KFgsImlzV2luZG93cyIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGcuaXNXaW5kb3dzfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJpc0xpbnV4Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZy5pc0xpbnV4'@;
put 'fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJlc2NhcGVXaW5TbGFzaGVzIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZy5lc2NhcGVXaW5TbGFzaGVzfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJnZXRNYWNyb3NQYXRoIix7ZW51bWVyYWJsZTohMCxnZXQ6'@;
put 'ZnVuY3Rpb24oKXtyZXR1cm4gZy5nZXRNYWNyb3NQYXRofX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJnZW5lcmF0ZVBhdGhGb3JTYXMiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBnLmdlbmVyYXRlUGF0aEZvclNhc319KSxfKHkoMzMxNiksWCk7dmFyIEI9eSg5'@;
put 'NjUyKTtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwidXJsT3JpZ2luIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gQi51cmxPcmlnaW59fSk7dmFyIHc9eSgyOTI3KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiZW5jb2RlVG9CYXNlNjQiLHtlbnVtZXJhYmxlOiEwLGdl'@;
put 'dDpmdW5jdGlvbigpe3JldHVybiB3LmVuY29kZVRvQmFzZTY0fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJkZWNvZGVGcm9tQmFzZTY0Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdy5kZWNvZGVGcm9tQmFzZTY0fX0pO3ZhciBQPXkoMTUyOSk7T2JqZWN0LmRl'@;
put 'ZmluZVByb3BlcnR5KFgsImdldEV4ZWN1dG9yUGF0aCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIFAuZ2V0RXhlY3V0b3JQYXRofX0pO3ZhciBGPXkoNTgxKTtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiYnl0ZXNUb1NpemUiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5j'@;
put 'dGlvbigpe3JldHVybiBGLmJ5dGVzVG9TaXplfX0pO3ZhciBPPXkoNjQ1Nyk7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsImRpZmYiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBPLmRpZmZ9fSk7dmFyIHo9eSg4NjUzKTtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiY2h1'@;
put 'bmsiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB6LmNodW5rfX0pfSw5NjUyOih1ZSxYKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksWC51cmxPcmlnaW49dm9pZCAwLFgudXJsT3JpZ2luPUk9Pntp'@;
put 'ZigiIj09PUkpcmV0dXJuIEk7bGV0IF87dHJ5e189bmV3IFVSTChJKS5vcmlnaW59Y2F0Y2h7dGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIFVSTC4iKX1yZXR1cm4gX319LDExMzE6ZnVuY3Rpb24odWUsWCx5KXsidXNlIHN0cmljdCI7dmFyIF89eSg0MTU1KSxnPXRoaXMmJnRoaXMuX19hd2Fp'@;
put 'dGVyfHxmdW5jdGlvbihXLFkscSxlZSl7cmV0dXJuIG5ldyhxfHwocT1Qcm9taXNlKSkoZnVuY3Rpb24obmUsaWUpe2Z1bmN0aW9uIGxlKFRlKXt0cnl7X2UoZWUubmV4dChUZSkpfWNhdGNoKFNlKXtpZShTZSl9fWZ1bmN0aW9uIG1lKFRlKXt0cnl7X2UoZWUudGhyb3coVGUpKX1jYXRjaChT'@;
put 'ZSl7aWUoU2UpfX1mdW5jdGlvbiBfZShUZSl7VGUuZG9uZT9uZShUZS52YWx1ZSk6ZnVuY3Rpb24gSihuZSl7cmV0dXJuIG5lIGluc3RhbmNlb2YgcT9uZTpuZXcgcShmdW5jdGlvbihpZSl7aWUobmUpfSl9KFRlLnZhbHVlKS50aGVuKGxlLG1lKX1fZSgoZWU9ZWUuYXBwbHkoVyxZfHxbXSkp'@;
put 'Lm5leHQoKSl9KX0sQj10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oVyl7cmV0dXJuIFcmJlcuX19lc01vZHVsZT9XOntkZWZhdWx0Old9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksWC5nZW5lcmF0ZVBhdGhGb3JTYXM9WC5n'@;
put 'ZXRNYWNyb3NQYXRoPVguZXNjYXBlV2luU2xhc2hlcz1YLmlzTGludXg9WC5pc1dpbmRvd3M9WC51bmlxQXJyYXk9WC51dWlkdjQ9WC5hc3luY0ZvckVhY2g9dm9pZCAwO2NvbnN0IHc9Qih5KDI1MjApKTtYLmFzeW5jRm9yRWFjaD1mdW5jdGlvbiBQKFcsWSl7cmV0dXJuIGcodGhpcyx2b2lk'@;
put 'IDAsdm9pZCAwLGZ1bmN0aW9uKigpe2ZvcihsZXQgcT0wO3E8Vy5sZW5ndGg7cSsrKXlpZWxkIFkoV1txXSxxLFcpfSl9LFgudXVpZHY0PSgpPT4ieHh4eHh4eHgteHh4eC00eHh4LXl4eHgteHh4eHh4eHh4eHh4Ii5yZXBsYWNlKC9beHldL2csVz0+e2NvbnN0IFk9MTYqTWF0aC5yYW5kb20o'@;
put 'KXwwO3JldHVybigieCI9PVc/WTozJll8OCkudG9TdHJpbmcoMTYpfSksWC51bmlxQXJyYXk9Vz0+QXJyYXkuZnJvbShuZXcgU2V0KFcpKSxYLmlzV2luZG93cz0oKT0+IndpbjMyIj09PV8ucGxhdGZvcm0sWC5pc0xpbnV4PSgpPT4ibGludXgiPT09Xy5wbGF0Zm9ybSxYLmVzY2FwZVdpblNs'@;
put 'YXNoZXM9Vz0+KDAsWC5pc1dpbmRvd3MpKCk/Vy5yZXBsYWNlKC9cXC9nLCJcXFxcIik6VyxYLmdldE1hY3Jvc1BhdGg9KCk9PncuZGVmYXVsdC5qb2luKCIvIiwiLi4iLCJtYWNyb3MiKSxYLmdlbmVyYXRlUGF0aEZvclNhcz1XPT5XLnJlcGxhY2UoL1xcL2csIi8iKX0sOTgwOToodWUsWCx5'@;
put 'KT0+e3ZhciBJPVg7SS5iaWdudW09eSg0NTkwKSxJLmRlZmluZT15KDI1MDApLmRlZmluZSxJLmJhc2U9eSgxOTc5KSxJLmNvbnN0YW50cz15KDY4MjYpLEkuZGVjb2RlcnM9eSg4MzA3KSxJLmVuY29kZXJzPXkoNjU3OSl9LDI1MDA6KHVlLFgseSk9Pnt2YXIgST15KDk4MDkpLF89eSg1NzE3'@;
put 'KTtmdW5jdGlvbiBCKHcsUCl7dGhpcy5uYW1lPXcsdGhpcy5ib2R5PVAsdGhpcy5kZWNvZGVycz17fSx0aGlzLmVuY29kZXJzPXt9fVguZGVmaW5lPWZ1bmN0aW9uKFAsRil7cmV0dXJuIG5ldyBCKFAsRil9LEIucHJvdG90eXBlLl9jcmVhdGVOYW1lZD1mdW5jdGlvbihQKXt2YXIgRjt0cnl7'@;
put 'Rj15KDUxNDApLnJ1bkluVGhpc0NvbnRleHQoIihmdW5jdGlvbiAiK3RoaXMubmFtZSsiKGVudGl0eSkge1xuICB0aGlzLl9pbml0TmFtZWQoZW50aXR5KTtcbn0pIil9Y2F0Y2h7Rj1mdW5jdGlvbih6KXt0aGlzLl9pbml0TmFtZWQoeil9fXJldHVybiBfKEYsUCksRi5wcm90b3R5cGUuX2lu'@;
put 'aXROYW1lZD1mdW5jdGlvbih6KXtQLmNhbGwodGhpcyx6KX0sbmV3IEYodGhpcyl9LEIucHJvdG90eXBlLl9nZXREZWNvZGVyPWZ1bmN0aW9uKFApe3JldHVybiB0aGlzLmRlY29kZXJzLmhhc093blByb3BlcnR5KFA9UHx8ImRlciIpfHwodGhpcy5kZWNvZGVyc1tQXT10aGlzLl9jcmVhdGVO'@;
put 'YW1lZChJLmRlY29kZXJzW1BdKSksdGhpcy5kZWNvZGVyc1tQXX0sQi5wcm90b3R5cGUuZGVjb2RlPWZ1bmN0aW9uKFAsRixPKXtyZXR1cm4gdGhpcy5fZ2V0RGVjb2RlcihGKS5kZWNvZGUoUCxPKX0sQi5wcm90b3R5cGUuX2dldEVuY29kZXI9ZnVuY3Rpb24oUCl7cmV0dXJuIHRoaXMuZW5j'@;
put 'b2RlcnMuaGFzT3duUHJvcGVydHkoUD1QfHwiZGVyIil8fCh0aGlzLmVuY29kZXJzW1BdPXRoaXMuX2NyZWF0ZU5hbWVkKEkuZW5jb2RlcnNbUF0pKSx0aGlzLmVuY29kZXJzW1BdfSxCLnByb3RvdHlwZS5lbmNvZGU9ZnVuY3Rpb24oUCxGLE8pe3JldHVybiB0aGlzLl9nZXRFbmNvZGVyKEYp'@;
put 'LmVuY29kZShQLE8pfX0sNjYyNToodWUsWCx5KT0+e3ZhciBJPXkoNTcxNyksXz15KDE5NzkpLlJlcG9ydGVyLGc9eSg4NzY0KS5CdWZmZXI7ZnVuY3Rpb24gQihQLEYpe18uY2FsbCh0aGlzLEYpLGcuaXNCdWZmZXIoUCk/KHRoaXMuYmFzZT1QLHRoaXMub2Zmc2V0PTAsdGhpcy5sZW5ndGg9'@;
put 'UC5sZW5ndGgpOnRoaXMuZXJyb3IoIklucHV0IG5vdCBCdWZmZXIiKX1mdW5jdGlvbiB3KFAsRil7aWYoQXJyYXkuaXNBcnJheShQKSl0aGlzLmxlbmd0aD0wLHRoaXMudmFsdWU9UC5tYXAoZnVuY3Rpb24oTyl7cmV0dXJuIE8gaW5zdGFuY2VvZiB3fHwoTz1uZXcgdyhPLEYpKSx0aGlzLmxl'@;
put 'bmd0aCs9Ty5sZW5ndGgsT30sdGhpcyk7ZWxzZSBpZigibnVtYmVyIj09dHlwZW9mIFApe2lmKCEoMDw9UCYmUDw9MjU1KSlyZXR1cm4gRi5lcnJvcigibm9uLWJ5dGUgRW5jb2RlckJ1ZmZlciB2YWx1ZSIpO3RoaXMudmFsdWU9UCx0aGlzLmxlbmd0aD0xfWVsc2UgaWYoInN0cmluZyI9PXR5'@;
put 'cGVvZiBQKXRoaXMudmFsdWU9UCx0aGlzLmxlbmd0aD1nLmJ5dGVMZW5ndGgoUCk7ZWxzZXtpZighZy5pc0J1ZmZlcihQKSlyZXR1cm4gRi5lcnJvcigiVW5zdXBwb3J0ZWQgdHlwZTogIit0eXBlb2YgUCk7dGhpcy52YWx1ZT1QLHRoaXMubGVuZ3RoPVAubGVuZ3RofX1JKEIsXyksWC5DPUIs'@;
put 'Qi5wcm90b3R5cGUuc2F2ZT1mdW5jdGlvbigpe3JldHVybntvZmZzZXQ6dGhpcy5vZmZzZXQscmVwb3J0ZXI6Xy5wcm90b3R5cGUuc2F2ZS5jYWxsKHRoaXMpfX0sQi5wcm90b3R5cGUucmVzdG9yZT1mdW5jdGlvbihGKXt2YXIgTz1uZXcgQih0aGlzLmJhc2UpO3JldHVybiBPLm9mZnNldD1G'@;
put 'Lm9mZnNldCxPLmxlbmd0aD10aGlzLm9mZnNldCx0aGlzLm9mZnNldD1GLm9mZnNldCxfLnByb3RvdHlwZS5yZXN0b3JlLmNhbGwodGhpcyxGLnJlcG9ydGVyKSxPfSxCLnByb3RvdHlwZS5pc0VtcHR5PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub2Zmc2V0PT09dGhpcy5sZW5ndGh9LEIucHJv'@;
put 'dG90eXBlLnJlYWRVSW50OD1mdW5jdGlvbihGKXtyZXR1cm4gdGhpcy5vZmZzZXQrMTw9dGhpcy5sZW5ndGg/dGhpcy5iYXNlLnJlYWRVSW50OCh0aGlzLm9mZnNldCsrLCEwKTp0aGlzLmVycm9yKEZ8fCJEZWNvZGVyQnVmZmVyIG92ZXJydW4iKX0sQi5wcm90b3R5cGUuc2tpcD1mdW5jdGlv'@;
put 'bihGLE8pe2lmKCEodGhpcy5vZmZzZXQrRjw9dGhpcy5sZW5ndGgpKXJldHVybiB0aGlzLmVycm9yKE98fCJEZWNvZGVyQnVmZmVyIG92ZXJydW4iKTt2YXIgej1uZXcgQih0aGlzLmJhc2UpO3JldHVybiB6Ll9yZXBvcnRlclN0YXRlPXRoaXMuX3JlcG9ydGVyU3RhdGUsei5vZmZzZXQ9dGhp'@;
put 'cy5vZmZzZXQsei5sZW5ndGg9dGhpcy5vZmZzZXQrRix0aGlzLm9mZnNldCs9Rix6fSxCLnByb3RvdHlwZS5yYXc9ZnVuY3Rpb24oRil7cmV0dXJuIHRoaXMuYmFzZS5zbGljZShGP0Yub2Zmc2V0OnRoaXMub2Zmc2V0LHRoaXMubGVuZ3RoKX0sWC5SPXcsdy5wcm90b3R5cGUuam9pbj1mdW5j'@;
put 'dGlvbihGLE8pe3JldHVybiBGfHwoRj1uZXcgZyh0aGlzLmxlbmd0aCkpLE98fChPPTApLDA9PT10aGlzLmxlbmd0aHx8KEFycmF5LmlzQXJyYXkodGhpcy52YWx1ZSk/dGhpcy52YWx1ZS5mb3JFYWNoKGZ1bmN0aW9uKHope3ouam9pbihGLE8pLE8rPXoubGVuZ3RofSk6KCJudW1iZXIiPT10'@;
put 'eXBlb2YgdGhpcy52YWx1ZT9GW09dPXRoaXMudmFsdWU6InN0cmluZyI9PXR5cGVvZiB0aGlzLnZhbHVlP0Yud3JpdGUodGhpcy52YWx1ZSxPKTpnLmlzQnVmZmVyKHRoaXMudmFsdWUpJiZ0aGlzLnZhbHVlLmNvcHkoRixPKSxPKz10aGlzLmxlbmd0aCkpLEZ9fSwxOTc5Oih1ZSxYLHkpPT57'@;
put 'dmFyIEk9WDtJLlJlcG9ydGVyPXkoODQ2NSkuYixJLkRlY29kZXJCdWZmZXI9eSg2NjI1KS5DLEkuRW5jb2RlckJ1ZmZlcj15KDY2MjUpLlIsSS5Ob2RlPXkoMTk0OSl9LDE5NDk6KHVlLFgseSk9Pnt2YXIgST15KDE5NzkpLlJlcG9ydGVyLF89eSgxOTc5KS5FbmNvZGVyQnVmZmVyLGc9eSgx'@;
put 'OTc5KS5EZWNvZGVyQnVmZmVyLEI9eSg5NzQ2KSx3PVsic2VxIiwic2Vxb2YiLCJzZXQiLCJzZXRvZiIsIm9iamlkIiwiYm9vbCIsImdlbnRpbWUiLCJ1dGN0aW1lIiwibnVsbF8iLCJlbnVtIiwiaW50Iiwib2JqRGVzYyIsImJpdHN0ciIsImJtcHN0ciIsImNoYXJzdHIiLCJnZW5zdHIiLCJn'@;
put 'cmFwaHN0ciIsImlhNXN0ciIsImlzbzY0NnN0ciIsIm51bXN0ciIsIm9jdHN0ciIsInByaW50c3RyIiwidDYxc3RyIiwidW5pc3RyIiwidXRmOHN0ciIsInZpZGVvc3RyIl0sUD1bImtleSIsIm9iaiIsInVzZSIsIm9wdGlvbmFsIiwiZXhwbGljaXQiLCJpbXBsaWNpdCIsImRlZiIsImNob2lj'@;
put 'ZSIsImFueSIsImNvbnRhaW5zIl0uY29uY2F0KHcpO2Z1bmN0aW9uIE8oTixMKXt2YXIgSz17fTt0aGlzLl9iYXNlU3RhdGU9SyxLLmVuYz1OLEsucGFyZW50PUx8fG51bGwsSy5jaGlsZHJlbj1udWxsLEsudGFnPW51bGwsSy5hcmdzPW51bGwsSy5yZXZlcnNlQXJncz1udWxsLEsuY2hvaWNl'@;
put 'PW51bGwsSy5vcHRpb25hbD0hMSxLLmFueT0hMSxLLm9iaj0hMSxLLnVzZT1udWxsLEsudXNlRGVjb2Rlcj1udWxsLEsua2V5PW51bGwsSy5kZWZhdWx0PW51bGwsSy5leHBsaWNpdD1udWxsLEsuaW1wbGljaXQ9bnVsbCxLLmNvbnRhaW5zPW51bGwsSy5wYXJlbnR8fChLLmNoaWxkcmVuPVtd'@;
put 'LHRoaXMuX3dyYXAoKSl9dWUuZXhwb3J0cz1PO3ZhciB6PVsiZW5jIiwicGFyZW50IiwiY2hpbGRyZW4iLCJ0YWciLCJhcmdzIiwicmV2ZXJzZUFyZ3MiLCJjaG9pY2UiLCJvcHRpb25hbCIsImFueSIsIm9iaiIsInVzZSIsImFsdGVyZWRVc2UiLCJrZXkiLCJkZWZhdWx0IiwiZXhwbGljaXQi'@;
put 'LCJpbXBsaWNpdCIsImNvbnRhaW5zIl07Ty5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXt2YXIgTD10aGlzLl9iYXNlU3RhdGUsSz17fTt6LmZvckVhY2goZnVuY3Rpb24oVyl7S1tXXT1MW1ddfSk7dmFyIFU9bmV3IHRoaXMuY29uc3RydWN0b3IoSy5wYXJlbnQpO3JldHVybiBVLl9iYXNl'@;
put 'U3RhdGU9SyxVfSxPLnByb3RvdHlwZS5fd3JhcD1mdW5jdGlvbigpe3ZhciBMPXRoaXMuX2Jhc2VTdGF0ZTtQLmZvckVhY2goZnVuY3Rpb24oSyl7dGhpc1tLXT1mdW5jdGlvbigpe3ZhciBXPW5ldyB0aGlzLmNvbnN0cnVjdG9yKHRoaXMpO3JldHVybiBMLmNoaWxkcmVuLnB1c2goVyksV1tL'@;
put 'XS5hcHBseShXLGFyZ3VtZW50cyl9fSx0aGlzKX0sTy5wcm90b3R5cGUuX2luaXQ9ZnVuY3Rpb24oTCl7dmFyIEs9dGhpcy5fYmFzZVN0YXRlO0IobnVsbD09PUsucGFyZW50KSxMLmNhbGwodGhpcyksSy5jaGlsZHJlbj1LLmNoaWxkcmVuLmZpbHRlcihmdW5jdGlvbihVKXtyZXR1cm4gVS5f'@;
put 'YmFzZVN0YXRlLnBhcmVudD09PXRoaXN9LHRoaXMpLEIuZXF1YWwoSy5jaGlsZHJlbi5sZW5ndGgsMSwiUm9vdCBub2RlIGNhbiBoYXZlIG9ubHkgb25lIGNoaWxkIil9LE8ucHJvdG90eXBlLl91c2VBcmdzPWZ1bmN0aW9uKEwpe3ZhciBLPXRoaXMuX2Jhc2VTdGF0ZSxVPUwuZmlsdGVyKGZ1'@;
put 'bmN0aW9uKFcpe3JldHVybiBXIGluc3RhbmNlb2YgdGhpcy5jb25zdHJ1Y3Rvcn0sdGhpcyk7TD1MLmZpbHRlcihmdW5jdGlvbihXKXtyZXR1cm4hKFcgaW5zdGFuY2VvZiB0aGlzLmNvbnN0cnVjdG9yKX0sdGhpcyksMCE9PVUubGVuZ3RoJiYoQihudWxsPT09Sy5jaGlsZHJlbiksSy5jaGls'@;
put 'ZHJlbj1VLFUuZm9yRWFjaChmdW5jdGlvbihXKXtXLl9iYXNlU3RhdGUucGFyZW50PXRoaXN9LHRoaXMpKSwwIT09TC5sZW5ndGgmJihCKG51bGw9PT1LLmFyZ3MpLEsuYXJncz1MLEsucmV2ZXJzZUFyZ3M9TC5tYXAoZnVuY3Rpb24oVyl7aWYoIm9iamVjdCIhPXR5cGVvZiBXfHxXLmNvbnN0'@;
put 'cnVjdG9yIT09T2JqZWN0KXJldHVybiBXO3ZhciBZPXt9O3JldHVybiBPYmplY3Qua2V5cyhXKS5mb3JFYWNoKGZ1bmN0aW9uKHEpe3E9PSgwfHEpJiYocXw9MCksWVtXW3FdXT1xfSksWX0pKX0sWyJfcGVla1RhZyIsIl9kZWNvZGVUYWciLCJfdXNlIiwiX2RlY29kZVN0ciIsIl9kZWNvZGVP'@;
put 'YmppZCIsIl9kZWNvZGVUaW1lIiwiX2RlY29kZU51bGwiLCJfZGVjb2RlSW50IiwiX2RlY29kZUJvb2wiLCJfZGVjb2RlTGlzdCIsIl9lbmNvZGVDb21wb3NpdGUiLCJfZW5jb2RlU3RyIiwiX2VuY29kZU9iamlkIiwiX2VuY29kZVRpbWUiLCJfZW5jb2RlTnVsbCIsIl9lbmNvZGVJbnQiLCJf'@;
put 'ZW5jb2RlQm9vbCJdLmZvckVhY2goZnVuY3Rpb24oTil7Ty5wcm90b3R5cGVbTl09ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoTisiIG5vdCBpbXBsZW1lbnRlZCBmb3IgZW5jb2Rpbmc6ICIrdGhpcy5fYmFzZVN0YXRlLmVuYyl9fSksdy5mb3JFYWNoKGZ1bmN0aW9uKE4pe08ucHJvdG90'@;
put 'eXBlW05dPWZ1bmN0aW9uKCl7dmFyIEs9dGhpcy5fYmFzZVN0YXRlLFU9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtyZXR1cm4gQihudWxsPT09Sy50YWcpLEsudGFnPU4sdGhpcy5fdXNlQXJncyhVKSx0aGlzfX0pLE8ucHJvdG90eXBlLnVzZT1mdW5jdGlvbihMKXtC'@;
put 'KEwpO3ZhciBLPXRoaXMuX2Jhc2VTdGF0ZTtyZXR1cm4gQihudWxsPT09Sy51c2UpLEsudXNlPUwsdGhpc30sTy5wcm90b3R5cGUub3B0aW9uYWw9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYmFzZVN0YXRlLm9wdGlvbmFsPSEwLHRoaXN9LE8ucHJvdG90eXBlLmRlZj1mdW5jdGlvbihMKXt2'@;
put 'YXIgSz10aGlzLl9iYXNlU3RhdGU7cmV0dXJuIEIobnVsbD09PUsuZGVmYXVsdCksSy5kZWZhdWx0PUwsSy5vcHRpb25hbD0hMCx0aGlzfSxPLnByb3RvdHlwZS5leHBsaWNpdD1mdW5jdGlvbihMKXt2YXIgSz10aGlzLl9iYXNlU3RhdGU7cmV0dXJuIEIobnVsbD09PUsuZXhwbGljaXQmJm51'@;
put 'bGw9PT1LLmltcGxpY2l0KSxLLmV4cGxpY2l0PUwsdGhpc30sTy5wcm90b3R5cGUuaW1wbGljaXQ9ZnVuY3Rpb24oTCl7dmFyIEs9dGhpcy5fYmFzZVN0YXRlO3JldHVybiBCKG51bGw9PT1LLmV4cGxpY2l0JiZudWxsPT09Sy5pbXBsaWNpdCksSy5pbXBsaWNpdD1MLHRoaXN9LE8ucHJvdG90'@;
put 'eXBlLm9iaj1mdW5jdGlvbigpe3ZhciBMPXRoaXMuX2Jhc2VTdGF0ZSxLPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7cmV0dXJuIEwub2JqPSEwLDAhPT1LLmxlbmd0aCYmdGhpcy5fdXNlQXJncyhLKSx0aGlzfSxPLnByb3RvdHlwZS5rZXk9ZnVuY3Rpb24oTCl7dmFy'@;
put 'IEs9dGhpcy5fYmFzZVN0YXRlO3JldHVybiBCKG51bGw9PT1LLmtleSksSy5rZXk9TCx0aGlzfSxPLnByb3RvdHlwZS5hbnk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYmFzZVN0YXRlLmFueT0hMCx0aGlzfSxPLnByb3RvdHlwZS5jaG9pY2U9ZnVuY3Rpb24oTCl7dmFyIEs9dGhpcy5fYmFz'@;
put 'ZVN0YXRlO3JldHVybiBCKG51bGw9PT1LLmNob2ljZSksSy5jaG9pY2U9TCx0aGlzLl91c2VBcmdzKE9iamVjdC5rZXlzKEwpLm1hcChmdW5jdGlvbihVKXtyZXR1cm4gTFtVXX0pKSx0aGlzfSxPLnByb3RvdHlwZS5jb250YWlucz1mdW5jdGlvbihMKXt2YXIgSz10aGlzLl9iYXNlU3RhdGU7'@;
put 'cmV0dXJuIEIobnVsbD09PUsudXNlKSxLLmNvbnRhaW5zPUwsdGhpc30sTy5wcm90b3R5cGUuX2RlY29kZT1mdW5jdGlvbihMLEspe3ZhciBVPXRoaXMuX2Jhc2VTdGF0ZTtpZihudWxsPT09VS5wYXJlbnQpcmV0dXJuIEwud3JhcFJlc3VsdChVLmNoaWxkcmVuWzBdLl9kZWNvZGUoTCxLKSk7'@;
put 'dmFyIG5lLFc9VS5kZWZhdWx0LFk9ITAscT1udWxsO2lmKG51bGwhPT1VLmtleSYmKHE9TC5lbnRlcktleShVLmtleSkpLFUub3B0aW9uYWwpe3ZhciBlZT1udWxsO2lmKG51bGwhPT1VLmV4cGxpY2l0P2VlPVUuZXhwbGljaXQ6bnVsbCE9PVUuaW1wbGljaXQ/ZWU9VS5pbXBsaWNpdDpudWxs'@;
put 'IT09VS50YWcmJihlZT1VLnRhZyksbnVsbCE9PWVlfHxVLmFueSl7aWYoWT10aGlzLl9wZWVrVGFnKEwsZWUsVS5hbnkpLEwuaXNFcnJvcihZKSlyZXR1cm4gWX1lbHNle3ZhciBKPUwuc2F2ZSgpO3RyeXtudWxsPT09VS5jaG9pY2U/dGhpcy5fZGVjb2RlR2VuZXJpYyhVLnRhZyxMLEspOnRo'@;
put 'aXMuX2RlY29kZUNob2ljZShMLEspLFk9ITB9Y2F0Y2h7WT0hMX1MLnJlc3RvcmUoSil9fWlmKFUub2JqJiZZJiYobmU9TC5lbnRlck9iamVjdCgpKSxZKXtpZihudWxsIT09VS5leHBsaWNpdCl7dmFyIGllPXRoaXMuX2RlY29kZVRhZyhMLFUuZXhwbGljaXQpO2lmKEwuaXNFcnJvcihpZSkp'@;
put 'cmV0dXJuIGllO0w9aWV9dmFyIGxlPUwub2Zmc2V0O2lmKG51bGw9PT1VLnVzZSYmbnVsbD09PVUuY2hvaWNlKXtVLmFueSYmKEo9TC5zYXZlKCkpO3ZhciBtZT10aGlzLl9kZWNvZGVUYWcoTCxudWxsIT09VS5pbXBsaWNpdD9VLmltcGxpY2l0OlUudGFnLFUuYW55KTtpZihMLmlzRXJyb3Io'@;
put 'bWUpKXJldHVybiBtZTtVLmFueT9XPUwucmF3KEopOkw9bWV9aWYoSyYmSy50cmFjayYmbnVsbCE9PVUudGFnJiZLLnRyYWNrKEwucGF0aCgpLGxlLEwubGVuZ3RoLCJ0YWdnZWQiKSxLJiZLLnRyYWNrJiZudWxsIT09VS50YWcmJksudHJhY2soTC5wYXRoKCksTC5vZmZzZXQsTC5sZW5ndGgs'@;
put 'ImNvbnRlbnQiKSxVLmFueXx8KFc9bnVsbD09PVUuY2hvaWNlP3RoaXMuX2RlY29kZUdlbmVyaWMoVS50YWcsTCxLKTp0aGlzLl9kZWNvZGVDaG9pY2UoTCxLKSksTC5pc0Vycm9yKFcpKXJldHVybiBXO2lmKCFVLmFueSYmbnVsbD09PVUuY2hvaWNlJiZudWxsIT09VS5jaGlsZHJlbiYmVS5j'@;
put 'aGlsZHJlbi5mb3JFYWNoKGZ1bmN0aW9uKFNlKXtTZS5fZGVjb2RlKEwsSyl9KSxVLmNvbnRhaW5zJiYoIm9jdHN0ciI9PT1VLnRhZ3x8ImJpdHN0ciI9PT1VLnRhZykpe3ZhciBfZT1uZXcgZyhXKTtXPXRoaXMuX2dldFVzZShVLmNvbnRhaW5zLEwuX3JlcG9ydGVyU3RhdGUub2JqKS5fZGVj'@;
put 'b2RlKF9lLEspfX1yZXR1cm4gVS5vYmomJlkmJihXPUwubGVhdmVPYmplY3QobmUpKSxudWxsPT09VS5rZXl8fG51bGw9PT1XJiYhMCE9PVk/bnVsbCE9PXEmJkwuZXhpdEtleShxKTpMLmxlYXZlS2V5KHEsVS5rZXksVyksV30sTy5wcm90b3R5cGUuX2RlY29kZUdlbmVyaWM9ZnVuY3Rpb24o'@;
put 'TCxLLFUpe3ZhciBXPXRoaXMuX2Jhc2VTdGF0ZTtyZXR1cm4ic2VxIj09PUx8fCJzZXQiPT09TD9udWxsOiJzZXFvZiI9PT1MfHwic2V0b2YiPT09TD90aGlzLl9kZWNvZGVMaXN0KEssTCxXLmFyZ3NbMF0sVSk6L3N0ciQvLnRlc3QoTCk/dGhpcy5fZGVjb2RlU3RyKEssTCxVKToib2JqaWQi'@;
put 'PT09TCYmVy5hcmdzP3RoaXMuX2RlY29kZU9iamlkKEssVy5hcmdzWzBdLFcuYXJnc1sxXSxVKToib2JqaWQiPT09TD90aGlzLl9kZWNvZGVPYmppZChLLG51bGwsbnVsbCxVKToiZ2VudGltZSI9PT1MfHwidXRjdGltZSI9PT1MP3RoaXMuX2RlY29kZVRpbWUoSyxMLFUpOiJudWxsXyI9PT1M'@;
put 'P3RoaXMuX2RlY29kZU51bGwoSyxVKToiYm9vbCI9PT1MP3RoaXMuX2RlY29kZUJvb2woSyxVKToib2JqRGVzYyI9PT1MP3RoaXMuX2RlY29kZVN0cihLLEwsVSk6ImludCI9PT1MfHwiZW51bSI9PT1MP3RoaXMuX2RlY29kZUludChLLFcuYXJncyYmVy5hcmdzWzBdLFUpOm51bGwhPT1XLnVz'@;
put 'ZT90aGlzLl9nZXRVc2UoVy51c2UsSy5fcmVwb3J0ZXJTdGF0ZS5vYmopLl9kZWNvZGUoSyxVKTpLLmVycm9yKCJ1bmtub3duIHRhZzogIitMKX0sTy5wcm90b3R5cGUuX2dldFVzZT1mdW5jdGlvbihMLEspe3ZhciBVPXRoaXMuX2Jhc2VTdGF0ZTtyZXR1cm4gVS51c2VEZWNvZGVyPXRoaXMu'@;
put 'X3VzZShMLEspLEIobnVsbD09PVUudXNlRGVjb2Rlci5fYmFzZVN0YXRlLnBhcmVudCksVS51c2VEZWNvZGVyPVUudXNlRGVjb2Rlci5fYmFzZVN0YXRlLmNoaWxkcmVuWzBdLFUuaW1wbGljaXQhPT1VLnVzZURlY29kZXIuX2Jhc2VTdGF0ZS5pbXBsaWNpdCYmKFUudXNlRGVjb2Rlcj1VLnVz'@;
put 'ZURlY29kZXIuY2xvbmUoKSxVLnVzZURlY29kZXIuX2Jhc2VTdGF0ZS5pbXBsaWNpdD1VLmltcGxpY2l0KSxVLnVzZURlY29kZXJ9LE8ucHJvdG90eXBlLl9kZWNvZGVDaG9pY2U9ZnVuY3Rpb24oTCxLKXt2YXIgVT10aGlzLl9iYXNlU3RhdGUsVz1udWxsLFk9ITE7cmV0dXJuIE9iamVjdC5r'@;
put 'ZXlzKFUuY2hvaWNlKS5zb21lKGZ1bmN0aW9uKHEpe3ZhciBlZT1MLnNhdmUoKSxKPVUuY2hvaWNlW3FdO3RyeXt2YXIgbmU9Si5fZGVjb2RlKEwsSyk7aWYoTC5pc0Vycm9yKG5lKSlyZXR1cm4hMTtXPXt0eXBlOnEsdmFsdWU6bmV9LFk9ITB9Y2F0Y2h7cmV0dXJuIEwucmVzdG9yZShlZSks'@;
put 'ITF9cmV0dXJuITB9LHRoaXMpLFk/VzpMLmVycm9yKCJDaG9pY2Ugbm90IG1hdGNoZWQiKX0sTy5wcm90b3R5cGUuX2NyZWF0ZUVuY29kZXJCdWZmZXI9ZnVuY3Rpb24oTCl7cmV0dXJuIG5ldyBfKEwsdGhpcy5yZXBvcnRlcil9LE8ucHJvdG90eXBlLl9lbmNvZGU9ZnVuY3Rpb24oTCxLLFUp'@;
put 'e3ZhciBXPXRoaXMuX2Jhc2VTdGF0ZTtpZihudWxsPT09Vy5kZWZhdWx0fHxXLmRlZmF1bHQhPT1MKXt2YXIgWT10aGlzLl9lbmNvZGVWYWx1ZShMLEssVSk7aWYodm9pZCAwIT09WSYmIXRoaXMuX3NraXBEZWZhdWx0KFksSyxVKSlyZXR1cm4gWX19LE8ucHJvdG90eXBlLl9lbmNvZGVWYWx1'@;
put 'ZT1mdW5jdGlvbihMLEssVSl7dmFyIFc9dGhpcy5fYmFzZVN0YXRlO2lmKG51bGw9PT1XLnBhcmVudClyZXR1cm4gVy5jaGlsZHJlblswXS5fZW5jb2RlKEwsS3x8bmV3IEkpO3ZhciBKPW51bGw7aWYodGhpcy5yZXBvcnRlcj1LLFcub3B0aW9uYWwmJnZvaWQgMD09PUwpe2lmKG51bGw9PT1X'@;
put 'LmRlZmF1bHQpcmV0dXJuO0w9Vy5kZWZhdWx0fXZhciBZPW51bGwscT0hMTtpZihXLmFueSlKPXRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoTCk7ZWxzZSBpZihXLmNob2ljZSlKPXRoaXMuX2VuY29kZUNob2ljZShMLEspO2Vsc2UgaWYoVy5jb250YWlucylZPXRoaXMuX2dldFVzZShXLmNv'@;
put 'bnRhaW5zLFUpLl9lbmNvZGUoTCxLKSxxPSEwO2Vsc2UgaWYoVy5jaGlsZHJlbilZPVcuY2hpbGRyZW4ubWFwKGZ1bmN0aW9uKGxlKXtpZigibnVsbF8iPT09bGUuX2Jhc2VTdGF0ZS50YWcpcmV0dXJuIGxlLl9lbmNvZGUobnVsbCxLLEwpO2lmKG51bGw9PT1sZS5fYmFzZVN0YXRlLmtleSly'@;
put 'ZXR1cm4gSy5lcnJvcigiQ2hpbGQgc2hvdWxkIGhhdmUgYSBrZXkiKTt2YXIgbWU9Sy5lbnRlcktleShsZS5fYmFzZVN0YXRlLmtleSk7aWYoIm9iamVjdCIhPXR5cGVvZiBMKXJldHVybiBLLmVycm9yKCJDaGlsZCBleHBlY3RlZCwgYnV0IGlucHV0IGlzIG5vdCBvYmplY3QiKTt2YXIgX2U9'@;
put 'bGUuX2VuY29kZShMW2xlLl9iYXNlU3RhdGUua2V5XSxLLEwpO3JldHVybiBLLmxlYXZlS2V5KG1lKSxfZX0sdGhpcykuZmlsdGVyKGZ1bmN0aW9uKGxlKXtyZXR1cm4gbGV9KSxZPXRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoWSk7ZWxzZSBpZigic2Vxb2YiPT09Vy50YWd8fCJzZXRvZiI9'@;
put 'PT1XLnRhZyl7aWYoIVcuYXJnc3x8MSE9PVcuYXJncy5sZW5ndGgpcmV0dXJuIEsuZXJyb3IoIlRvbyBtYW55IGFyZ3MgZm9yIDogIitXLnRhZyk7aWYoIUFycmF5LmlzQXJyYXkoTCkpcmV0dXJuIEsuZXJyb3IoInNlcW9mL3NldG9mLCBidXQgZGF0YSBpcyBub3QgQXJyYXkiKTt2YXIgZWU9'@;
put 'dGhpcy5jbG9uZSgpO2VlLl9iYXNlU3RhdGUuaW1wbGljaXQ9bnVsbCxZPXRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoTC5tYXAoZnVuY3Rpb24obGUpe3JldHVybiB0aGlzLl9nZXRVc2UodGhpcy5fYmFzZVN0YXRlLmFyZ3NbMF0sTCkuX2VuY29kZShsZSxLKX0sZWUpKX1lbHNlIG51bGwh'@;
put 'PT1XLnVzZT9KPXRoaXMuX2dldFVzZShXLnVzZSxVKS5fZW5jb2RlKEwsSyk6KFk9dGhpcy5fZW5jb2RlUHJpbWl0aXZlKFcudGFnLEwpLHE9ITApO2lmKCFXLmFueSYmbnVsbD09PVcuY2hvaWNlKXt2YXIgbmU9bnVsbCE9PVcuaW1wbGljaXQ/Vy5pbXBsaWNpdDpXLnRhZyxpZT1udWxsPT09'@;
put 'Vy5pbXBsaWNpdD8idW5pdmVyc2FsIjoiY29udGV4dCI7bnVsbD09PW5lP251bGw9PT1XLnVzZSYmSy5lcnJvcigiVGFnIGNvdWxkIGJlIG9taXR0ZWQgb25seSBmb3IgLnVzZSgpIik6bnVsbD09PVcudXNlJiYoSj10aGlzLl9lbmNvZGVDb21wb3NpdGUobmUscSxpZSxZKSl9cmV0dXJuIG51'@;
put 'bGwhPT1XLmV4cGxpY2l0JiYoSj10aGlzLl9lbmNvZGVDb21wb3NpdGUoVy5leHBsaWNpdCwhMSwiY29udGV4dCIsSikpLEp9LE8ucHJvdG90eXBlLl9lbmNvZGVDaG9pY2U9ZnVuY3Rpb24oTCxLKXt2YXIgVT10aGlzLl9iYXNlU3RhdGUsVz1VLmNob2ljZVtMLnR5cGVdO3JldHVybiBXfHxC'@;
put 'KCExLEwudHlwZSsiIG5vdCBmb3VuZCBpbiAiK0pTT04uc3RyaW5naWZ5KE9iamVjdC5rZXlzKFUuY2hvaWNlKSkpLFcuX2VuY29kZShMLnZhbHVlLEspfSxPLnByb3RvdHlwZS5fZW5jb2RlUHJpbWl0aXZlPWZ1bmN0aW9uKEwsSyl7dmFyIFU9dGhpcy5fYmFzZVN0YXRlO2lmKC9zdHIkLy50'@;
put 'ZXN0KEwpKXJldHVybiB0aGlzLl9lbmNvZGVTdHIoSyxMKTtpZigib2JqaWQiPT09TCYmVS5hcmdzKXJldHVybiB0aGlzLl9lbmNvZGVPYmppZChLLFUucmV2ZXJzZUFyZ3NbMF0sVS5hcmdzWzFdKTtpZigib2JqaWQiPT09TClyZXR1cm4gdGhpcy5fZW5jb2RlT2JqaWQoSyxudWxsLG51bGwp'@;
put 'O2lmKCJnZW50aW1lIj09PUx8fCJ1dGN0aW1lIj09PUwpcmV0dXJuIHRoaXMuX2VuY29kZVRpbWUoSyxMKTtpZigibnVsbF8iPT09TClyZXR1cm4gdGhpcy5fZW5jb2RlTnVsbCgpO2lmKCJpbnQiPT09THx8ImVudW0iPT09TClyZXR1cm4gdGhpcy5fZW5jb2RlSW50KEssVS5hcmdzJiZVLnJl'@;
put 'dmVyc2VBcmdzWzBdKTtpZigiYm9vbCI9PT1MKXJldHVybiB0aGlzLl9lbmNvZGVCb29sKEspO2lmKCJvYmpEZXNjIj09PUwpcmV0dXJuIHRoaXMuX2VuY29kZVN0cihLLEwpO3Rocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgdGFnOiAiK0wpfSxPLnByb3RvdHlwZS5faXNOdW1zdHI9ZnVu'@;
put 'Y3Rpb24oTCl7cmV0dXJuL15bMC05IF0qJC8udGVzdChMKX0sTy5wcm90b3R5cGUuX2lzUHJpbnRzdHI9ZnVuY3Rpb24oTCl7cmV0dXJuL15bQS1aYS16MC05ICdcKFwpXCssXC1cLlwvOj1cP10qJC8udGVzdChMKX19LDg0NjU6KHVlLFgseSk9Pnt2YXIgST15KDU3MTcpO2Z1bmN0aW9uIF8o'@;
put 'Qil7dGhpcy5fcmVwb3J0ZXJTdGF0ZT17b2JqOm51bGwscGF0aDpbXSxvcHRpb25zOkJ8fHt9LGVycm9yczpbXX19ZnVuY3Rpb24gZyhCLHcpe3RoaXMucGF0aD1CLHRoaXMucmV0aHJvdyh3KX1YLmI9XyxfLnByb3RvdHlwZS5pc0Vycm9yPWZ1bmN0aW9uKHcpe3JldHVybiB3IGluc3RhbmNl'@;
put 'b2YgZ30sXy5wcm90b3R5cGUuc2F2ZT1mdW5jdGlvbigpe3ZhciB3PXRoaXMuX3JlcG9ydGVyU3RhdGU7cmV0dXJue29iajp3Lm9iaixwYXRoTGVuOncucGF0aC5sZW5ndGh9fSxfLnByb3RvdHlwZS5yZXN0b3JlPWZ1bmN0aW9uKHcpe3ZhciBQPXRoaXMuX3JlcG9ydGVyU3RhdGU7UC5vYmo9'@;
put 'dy5vYmosUC5wYXRoPVAucGF0aC5zbGljZSgwLHcucGF0aExlbil9LF8ucHJvdG90eXBlLmVudGVyS2V5PWZ1bmN0aW9uKHcpe3JldHVybiB0aGlzLl9yZXBvcnRlclN0YXRlLnBhdGgucHVzaCh3KX0sXy5wcm90b3R5cGUuZXhpdEtleT1mdW5jdGlvbih3KXt2YXIgUD10aGlzLl9yZXBvcnRl'@;
put 'clN0YXRlO1AucGF0aD1QLnBhdGguc2xpY2UoMCx3LTEpfSxfLnByb3RvdHlwZS5sZWF2ZUtleT1mdW5jdGlvbih3LFAsRil7dmFyIE89dGhpcy5fcmVwb3J0ZXJTdGF0ZTt0aGlzLmV4aXRLZXkodyksbnVsbCE9PU8ub2JqJiYoTy5vYmpbUF09Ril9LF8ucHJvdG90eXBlLnBhdGg9ZnVuY3Rp'@;
put 'b24oKXtyZXR1cm4gdGhpcy5fcmVwb3J0ZXJTdGF0ZS5wYXRoLmpvaW4oIi8iKX0sXy5wcm90b3R5cGUuZW50ZXJPYmplY3Q9ZnVuY3Rpb24oKXt2YXIgdz10aGlzLl9yZXBvcnRlclN0YXRlLFA9dy5vYmo7cmV0dXJuIHcub2JqPXt9LFB9LF8ucHJvdG90eXBlLmxlYXZlT2JqZWN0PWZ1bmN0'@;
put 'aW9uKHcpe3ZhciBQPXRoaXMuX3JlcG9ydGVyU3RhdGUsRj1QLm9iajtyZXR1cm4gUC5vYmo9dyxGfSxfLnByb3RvdHlwZS5lcnJvcj1mdW5jdGlvbih3KXt2YXIgUCxGPXRoaXMuX3JlcG9ydGVyU3RhdGUsTz13IGluc3RhbmNlb2YgZztpZihQPU8/dzpuZXcgZyhGLnBhdGgubWFwKGZ1bmN0'@;
put 'aW9uKHope3JldHVybiJbIitKU09OLnN0cmluZ2lmeSh6KSsiXSJ9KS5qb2luKCIiKSx3Lm1lc3NhZ2V8fHcsdy5zdGFjayksIUYub3B0aW9ucy5wYXJ0aWFsKXRocm93IFA7cmV0dXJuIE98fEYuZXJyb3JzLnB1c2goUCksUH0sXy5wcm90b3R5cGUud3JhcFJlc3VsdD1mdW5jdGlvbih3KXt2'@;
put 'YXIgUD10aGlzLl9yZXBvcnRlclN0YXRlO3JldHVybiBQLm9wdGlvbnMucGFydGlhbD97cmVzdWx0OnRoaXMuaXNFcnJvcih3KT9udWxsOncsZXJyb3JzOlAuZXJyb3JzfTp3fSxJKGcsRXJyb3IpLGcucHJvdG90eXBlLnJldGhyb3c9ZnVuY3Rpb24odyl7aWYodGhpcy5tZXNzYWdlPXcrIiBh'@;
put 'dDogIisodGhpcy5wYXRofHwiKHNoYWxsb3cpIiksRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UmJkVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsZyksIXRoaXMuc3RhY2spdHJ5e3Rocm93IG5ldyBFcnJvcih0aGlzLm1lc3NhZ2UpfWNhdGNoKFApe3RoaXMuc3RhY2s9UC5zdGFja31yZXR1'@;
put 'cm4gdGhpc319LDE2MDoodWUsWCx5KT0+e3ZhciBJPXkoNjgyNik7WC50YWdDbGFzcz17MDoidW5pdmVyc2FsIiwxOiJhcHBsaWNhdGlvbiIsMjoiY29udGV4dCIsMzoicHJpdmF0ZSJ9LFgudGFnQ2xhc3NCeU5hbWU9SS5fcmV2ZXJzZShYLnRhZ0NsYXNzKSxYLnRhZz17MDoiZW5kIiwxOiJi'@;
put 'b29sIiwyOiJpbnQiLDM6ImJpdHN0ciIsNDoib2N0c3RyIiw1OiJudWxsXyIsNjoib2JqaWQiLDc6Im9iakRlc2MiLDg6ImV4dGVybmFsIiw5OiJyZWFsIiwxMDoiZW51bSIsMTE6ImVtYmVkIiwxMjoidXRmOHN0ciIsMTM6InJlbGF0aXZlT2lkIiwxNjoic2VxIiwxNzoic2V0IiwxODoibnVt'@;
put 'c3RyIiwxOToicHJpbnRzdHIiLDIwOiJ0NjFzdHIiLDIxOiJ2aWRlb3N0ciIsMjI6ImlhNXN0ciIsMjM6InV0Y3RpbWUiLDI0OiJnZW50aW1lIiwyNToiZ3JhcGhzdHIiLDI2OiJpc282NDZzdHIiLDI3OiJnZW5zdHIiLDI4OiJ1bmlzdHIiLDI5OiJjaGFyc3RyIiwzMDoiYm1wc3RyIn0sWC50'@;
put 'YWdCeU5hbWU9SS5fcmV2ZXJzZShYLnRhZyl9LDY4MjY6KHVlLFgseSk9Pnt2YXIgST1YO0kuX3JldmVyc2U9ZnVuY3Rpb24oZyl7dmFyIEI9e307cmV0dXJuIE9iamVjdC5rZXlzKGcpLmZvckVhY2goZnVuY3Rpb24odyl7KDB8dyk9PXcmJih3fD0wKSxCW2dbd11dPXd9KSxCfSxJLmRlcj15'@;
put 'KDE2MCl9LDE2NzE6KHVlLFgseSk9Pnt2YXIgST15KDU3MTcpLF89eSg5ODA5KSxnPV8uYmFzZSxCPV8uYmlnbnVtLHc9Xy5jb25zdGFudHMuZGVyO2Z1bmN0aW9uIFAoTil7dGhpcy5lbmM9ImRlciIsdGhpcy5uYW1lPU4ubmFtZSx0aGlzLmVudGl0eT1OLHRoaXMudHJlZT1uZXcgRix0aGlz'@;
put 'LnRyZWUuX2luaXQoTi5ib2R5KX1mdW5jdGlvbiBGKE4pe2cuTm9kZS5jYWxsKHRoaXMsImRlciIsTil9ZnVuY3Rpb24gTyhOLEwpe3ZhciBLPU4ucmVhZFVJbnQ4KEwpO2lmKE4uaXNFcnJvcihLKSlyZXR1cm4gSzt2YXIgVT13LnRhZ0NsYXNzW0s+PjZdLFc9ISgzMiZLKTtpZigzMSZ+SylL'@;
put 'Jj0zMTtlbHNle3ZhciBZPUs7Zm9yKEs9MDshKDEyOCZ+WSk7KXtpZihZPU4ucmVhZFVJbnQ4KEwpLE4uaXNFcnJvcihZKSlyZXR1cm4gWTtLPDw9NyxLfD0xMjcmWX19cmV0dXJue2NsczpVLHByaW1pdGl2ZTpXLHRhZzpLLHRhZ1N0cjp3LnRhZ1tLXX19ZnVuY3Rpb24geihOLEwsSyl7dmFy'@;
put 'IFU9Ti5yZWFkVUludDgoSyk7aWYoTi5pc0Vycm9yKFUpKXJldHVybiBVO2lmKCFMJiYxMjg9PT1VKXJldHVybiBudWxsO2lmKCEoMTI4JlUpKXJldHVybiBVO3ZhciBXPTEyNyZVO2lmKFc+NClyZXR1cm4gTi5lcnJvcigibGVuZ3RoIG9jdGVjdCBpcyB0b28gbG9uZyIpO1U9MDtmb3IodmFy'@;
put 'IFk9MDtZPFc7WSsrKXtVPDw9ODt2YXIgcT1OLnJlYWRVSW50OChLKTtpZihOLmlzRXJyb3IocSkpcmV0dXJuIHE7VXw9cX1yZXR1cm4gVX11ZS5leHBvcnRzPVAsUC5wcm90b3R5cGUuZGVjb2RlPWZ1bmN0aW9uKEwsSyl7cmV0dXJuIEwgaW5zdGFuY2VvZiBnLkRlY29kZXJCdWZmZXJ8fChM'@;
put 'PW5ldyBnLkRlY29kZXJCdWZmZXIoTCxLKSksdGhpcy50cmVlLl9kZWNvZGUoTCxLKX0sSShGLGcuTm9kZSksRi5wcm90b3R5cGUuX3BlZWtUYWc9ZnVuY3Rpb24oTCxLLFUpe2lmKEwuaXNFbXB0eSgpKXJldHVybiExO3ZhciBXPUwuc2F2ZSgpLFk9TyhMLCdGYWlsZWQgdG8gcGVlayB0YWc6'@;
put 'ICInK0srJyInKTtyZXR1cm4gTC5pc0Vycm9yKFkpP1k6KEwucmVzdG9yZShXKSxZLnRhZz09PUt8fFkudGFnU3RyPT09S3x8WS50YWdTdHIrIm9mIj09PUt8fFUpfSxGLnByb3RvdHlwZS5fZGVjb2RlVGFnPWZ1bmN0aW9uKEwsSyxVKXt2YXIgVz1PKEwsJ0ZhaWxlZCB0byBkZWNvZGUgdGFn'@;
put 'IG9mICInK0srJyInKTtpZihMLmlzRXJyb3IoVykpcmV0dXJuIFc7dmFyIFk9eihMLFcucHJpbWl0aXZlLCdGYWlsZWQgdG8gZ2V0IGxlbmd0aCBvZiAiJytLKyciJyk7aWYoTC5pc0Vycm9yKFkpKXJldHVybiBZO2lmKCFVJiZXLnRhZyE9PUsmJlcudGFnU3RyIT09SyYmVy50YWdTdHIrIm9m'@;
put 'IiE9PUspcmV0dXJuIEwuZXJyb3IoJ0ZhaWxlZCB0byBtYXRjaCB0YWc6ICInK0srJyInKTtpZihXLnByaW1pdGl2ZXx8bnVsbCE9PVkpcmV0dXJuIEwuc2tpcChZLCdGYWlsZWQgdG8gbWF0Y2ggYm9keSBvZjogIicrSysnIicpO3ZhciBxPUwuc2F2ZSgpLGVlPXRoaXMuX3NraXBVbnRpbEVu'@;
put 'ZChMLCdGYWlsZWQgdG8gc2tpcCBpbmRlZmluaXRlIGxlbmd0aCBib2R5OiAiJyt0aGlzLnRhZysnIicpO3JldHVybiBMLmlzRXJyb3IoZWUpP2VlOihZPUwub2Zmc2V0LXEub2Zmc2V0LEwucmVzdG9yZShxKSxMLnNraXAoWSwnRmFpbGVkIHRvIG1hdGNoIGJvZHkgb2Y6ICInK0srJyInKSl9'@;
put 'LEYucHJvdG90eXBlLl9za2lwVW50aWxFbmQ9ZnVuY3Rpb24oTCxLKXtmb3IoOzspe3ZhciBVPU8oTCxLKTtpZihMLmlzRXJyb3IoVSkpcmV0dXJuIFU7dmFyIFksVz16KEwsVS5wcmltaXRpdmUsSyk7aWYoTC5pc0Vycm9yKFcpKXJldHVybiBXO2lmKFk9VS5wcmltaXRpdmV8fG51bGwhPT1X'@;
put 'P0wuc2tpcChXKTp0aGlzLl9za2lwVW50aWxFbmQoTCxLKSxMLmlzRXJyb3IoWSkpcmV0dXJuIFk7aWYoImVuZCI9PT1VLnRhZ1N0cilicmVha319LEYucHJvdG90eXBlLl9kZWNvZGVMaXN0PWZ1bmN0aW9uKEwsSyxVLFcpe2Zvcih2YXIgWT1bXTshTC5pc0VtcHR5KCk7KXt2YXIgcT10aGlz'@;
put 'Ll9wZWVrVGFnKEwsImVuZCIpO2lmKEwuaXNFcnJvcihxKSlyZXR1cm4gcTt2YXIgZWU9VS5kZWNvZGUoTCwiZGVyIixXKTtpZihMLmlzRXJyb3IoZWUpJiZxKWJyZWFrO1kucHVzaChlZSl9cmV0dXJuIFl9LEYucHJvdG90eXBlLl9kZWNvZGVTdHI9ZnVuY3Rpb24oTCxLKXtpZigiYml0c3Ry'@;
put 'Ij09PUspe3ZhciBVPUwucmVhZFVJbnQ4KCk7cmV0dXJuIEwuaXNFcnJvcihVKT9VOnt1bnVzZWQ6VSxkYXRhOkwucmF3KCl9fWlmKCJibXBzdHIiPT09Syl7dmFyIFc9TC5yYXcoKTtpZihXLmxlbmd0aCUyPT0xKXJldHVybiBMLmVycm9yKCJEZWNvZGluZyBvZiBzdHJpbmcgdHlwZTogYm1w'@;
put 'c3RyIGxlbmd0aCBtaXNtYXRjaCIpO2Zvcih2YXIgWT0iIixxPTA7cTxXLmxlbmd0aC8yO3ErKylZKz1TdHJpbmcuZnJvbUNoYXJDb2RlKFcucmVhZFVJbnQxNkJFKDIqcSkpO3JldHVybiBZfWlmKCJudW1zdHIiPT09Syl7dmFyIGVlPUwucmF3KCkudG9TdHJpbmcoImFzY2lpIik7cmV0dXJu'@;
put 'IHRoaXMuX2lzTnVtc3RyKGVlKT9lZTpMLmVycm9yKCJEZWNvZGluZyBvZiBzdHJpbmcgdHlwZTogbnVtc3RyIHVuc3VwcG9ydGVkIGNoYXJhY3RlcnMiKX1pZigib2N0c3RyIj09PUspcmV0dXJuIEwucmF3KCk7aWYoIm9iakRlc2MiPT09SylyZXR1cm4gTC5yYXcoKTtpZigicHJpbnRzdHIi'@;
put 'PT09Syl7dmFyIEo9TC5yYXcoKS50b1N0cmluZygiYXNjaWkiKTtyZXR1cm4gdGhpcy5faXNQcmludHN0cihKKT9KOkwuZXJyb3IoIkRlY29kaW5nIG9mIHN0cmluZyB0eXBlOiBwcmludHN0ciB1bnN1cHBvcnRlZCBjaGFyYWN0ZXJzIil9cmV0dXJuL3N0ciQvLnRlc3QoSyk/TC5yYXcoKS50'@;
put 'b1N0cmluZygpOkwuZXJyb3IoIkRlY29kaW5nIG9mIHN0cmluZyB0eXBlOiAiK0srIiB1bnN1cHBvcnRlZCIpfSxGLnByb3RvdHlwZS5fZGVjb2RlT2JqaWQ9ZnVuY3Rpb24oTCxLLFUpe2Zvcih2YXIgVyxZPVtdLHE9MDshTC5pc0VtcHR5KCk7KXt2YXIgZWU9TC5yZWFkVUludDgoKTtxPDw9'@;
put 'NyxxfD0xMjcmZWUsMTI4JmVlfHwoWS5wdXNoKHEpLHE9MCl9aWYoMTI4JmVlJiZZLnB1c2gocSksVz1VP1k6W1lbMF0vNDB8MCxZWzBdJTQwXS5jb25jYXQoWS5zbGljZSgxKSksSyl7dmFyIGllPUtbVy5qb2luKCIgIildO3ZvaWQgMD09PWllJiYoaWU9S1tXLmpvaW4oIi4iKV0pLHZvaWQg'@;
put 'MCE9PWllJiYoVz1pZSl9cmV0dXJuIFd9LEYucHJvdG90eXBlLl9kZWNvZGVUaW1lPWZ1bmN0aW9uKEwsSyl7dmFyIFU9TC5yYXcoKS50b1N0cmluZygpO2lmKCJnZW50aW1lIj09PUspdmFyIFc9MHxVLnNsaWNlKDAsNCksWT0wfFUuc2xpY2UoNCw2KSxxPTB8VS5zbGljZSg2LDgpLGVlPTB8'@;
put 'VS5zbGljZSg4LDEwKSxKPTB8VS5zbGljZSgxMCwxMiksbmU9MHxVLnNsaWNlKDEyLDE0KTtlbHNle2lmKCJ1dGN0aW1lIiE9PUspcmV0dXJuIEwuZXJyb3IoIkRlY29kaW5nICIrSysiIHRpbWUgaXMgbm90IHN1cHBvcnRlZCB5ZXQiKTtXPTB8VS5zbGljZSgwLDIpLFk9MHxVLnNsaWNlKDIs'@;
put 'NCkscT0wfFUuc2xpY2UoNCw2KSxlZT0wfFUuc2xpY2UoNiw4KSxKPTB8VS5zbGljZSg4LDEwKSxuZT0wfFUuc2xpY2UoMTAsMTIpLFc9Vzw3MD8yZTMrVzoxOTAwK1d9cmV0dXJuIERhdGUuVVRDKFcsWS0xLHEsZWUsSixuZSwwKX0sRi5wcm90b3R5cGUuX2RlY29kZU51bGw9ZnVuY3Rpb24o'@;
put 'TCl7cmV0dXJuIG51bGx9LEYucHJvdG90eXBlLl9kZWNvZGVCb29sPWZ1bmN0aW9uKEwpe3ZhciBLPUwucmVhZFVJbnQ4KCk7cmV0dXJuIEwuaXNFcnJvcihLKT9LOjAhPT1LfSxGLnByb3RvdHlwZS5fZGVjb2RlSW50PWZ1bmN0aW9uKEwsSyl7dmFyIFU9TC5yYXcoKSxXPW5ldyBCKFUpO3Jl'@;
put 'dHVybiBLJiYoVz1LW1cudG9TdHJpbmcoMTApXXx8VyksV30sRi5wcm90b3R5cGUuX3VzZT1mdW5jdGlvbihMLEspe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBMJiYoTD1MKEspKSxMLl9nZXREZWNvZGVyKCJkZXIiKS50cmVlfX0sODMwNzoodWUsWCx5KT0+e3ZhciBJPVg7SS5kZXI9eSgx'@;
put 'NjcxKSxJLnBlbT15KDk2MzEpfSw5NjMxOih1ZSxYLHkpPT57dmFyIEk9eSg1NzE3KSxfPXkoODc2NCkuQnVmZmVyLGc9eSgxNjcxKTtmdW5jdGlvbiBCKHcpe2cuY2FsbCh0aGlzLHcpLHRoaXMuZW5jPSJwZW0ifUkoQixnKSx1ZS5leHBvcnRzPUIsQi5wcm90b3R5cGUuZGVjb2RlPWZ1bmN0'@;
put 'aW9uKFAsRil7Zm9yKHZhciBPPVAudG9TdHJpbmcoKS5zcGxpdCgvW1xyXG5dKy9nKSx6PUYubGFiZWwudG9VcHBlckNhc2UoKSxOPS9eLS0tLS0oQkVHSU58RU5EKSAoW14tXSspLS0tLS0kLyxMPS0xLEs9LTEsVT0wO1U8Ty5sZW5ndGg7VSsrKXt2YXIgVz1PW1VdLm1hdGNoKE4pO2lmKG51'@;
put 'bGwhPT1XJiZXWzJdPT09eil7aWYoLTEhPT1MKXtpZigiRU5EIiE9PVdbMV0pYnJlYWs7Sz1VO2JyZWFrfWlmKCJCRUdJTiIhPT1XWzFdKWJyZWFrO0w9VX19aWYoLTE9PT1MfHwtMT09PUspdGhyb3cgbmV3IEVycm9yKCJQRU0gc2VjdGlvbiBub3QgZm91bmQgZm9yOiAiK3opO3ZhciBZPU8u'@;
put 'c2xpY2UoTCsxLEspLmpvaW4oIiIpO1kucmVwbGFjZSgvW15hLXowLTlcK1wvPV0rL2dpLCIiKTt2YXIgcT1uZXcgXyhZLCJiYXNlNjQiKTtyZXR1cm4gZy5wcm90b3R5cGUuZGVjb2RlLmNhbGwodGhpcyxxLEYpfX0sNjk4NDoodWUsWCx5KT0+e3ZhciBJPXkoNTcxNyksXz15KDg3NjQpLkJ1'@;
put 'ZmZlcixnPXkoOTgwOSksQj1nLmJhc2Usdz1nLmNvbnN0YW50cy5kZXI7ZnVuY3Rpb24gUChOKXt0aGlzLmVuYz0iZGVyIix0aGlzLm5hbWU9Ti5uYW1lLHRoaXMuZW50aXR5PU4sdGhpcy50cmVlPW5ldyBGLHRoaXMudHJlZS5faW5pdChOLmJvZHkpfWZ1bmN0aW9uIEYoTil7Qi5Ob2RlLmNh'@;
put 'bGwodGhpcywiZGVyIixOKX1mdW5jdGlvbiBPKE4pe3JldHVybiBOPDEwPyIwIitOOk59dWUuZXhwb3J0cz1QLFAucHJvdG90eXBlLmVuY29kZT1mdW5jdGlvbihMLEspe3JldHVybiB0aGlzLnRyZWUuX2VuY29kZShMLEspLmpvaW4oKX0sSShGLEIuTm9kZSksRi5wcm90b3R5cGUuX2VuY29k'@;
put 'ZUNvbXBvc2l0ZT1mdW5jdGlvbihMLEssVSxXKXt2YXIgSixZPWZ1bmN0aW9uIHooTixMLEssVSl7dmFyIFc7aWYoInNlcW9mIj09PU4/Tj0ic2VxIjoic2V0b2YiPT09TiYmKE49InNldCIpLHcudGFnQnlOYW1lLmhhc093blByb3BlcnR5KE4pKVc9dy50YWdCeU5hbWVbTl07ZWxzZXtpZigi'@;
put 'bnVtYmVyIiE9dHlwZW9mIE58fCgwfE4pIT09TilyZXR1cm4gVS5lcnJvcigiVW5rbm93biB0YWc6ICIrTik7Vz1OfXJldHVybiBXPj0zMT9VLmVycm9yKCJNdWx0aS1vY3RldCB0YWcgZW5jb2RpbmcgdW5zdXBwb3J0ZWQiKTooTHx8KFd8PTMyKSxXfD13LnRhZ0NsYXNzQnlOYW1lW0t8fCJ1'@;
put 'bml2ZXJzYWwiXTw8Nil9KEwsSyxVLHRoaXMucmVwb3J0ZXIpO2lmKFcubGVuZ3RoPDEyOClyZXR1cm4oSj1uZXcgXygyKSlbMF09WSxKWzFdPVcubGVuZ3RoLHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoW0osV10pO2Zvcih2YXIgcT0xLGVlPVcubGVuZ3RoO2VlPj0yNTY7ZWU+Pj04KXEr'@;
put 'KzsoSj1uZXcgXygyK3EpKVswXT1ZLEpbMV09MTI4fHEsZWU9MStxO2Zvcih2YXIgbmU9Vy5sZW5ndGg7bmU+MDtlZS0tLG5lPj49OClKW2VlXT0yNTUmbmU7cmV0dXJuIHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoW0osV10pfSxGLnByb3RvdHlwZS5fZW5jb2RlU3RyPWZ1bmN0aW9uKEws'@;
put 'Syl7aWYoImJpdHN0ciI9PT1LKXJldHVybiB0aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKFswfEwudW51c2VkLEwuZGF0YV0pO2lmKCJibXBzdHIiPT09Syl7Zm9yKHZhciBVPW5ldyBfKDIqTC5sZW5ndGgpLFc9MDtXPEwubGVuZ3RoO1crKylVLndyaXRlVUludDE2QkUoTC5jaGFyQ29kZUF0'@;
put 'KFcpLDIqVyk7cmV0dXJuIHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoVSl9cmV0dXJuIm51bXN0ciI9PT1LP3RoaXMuX2lzTnVtc3RyKEwpP3RoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoTCk6dGhpcy5yZXBvcnRlci5lcnJvcigiRW5jb2Rpbmcgb2Ygc3RyaW5nIHR5cGU6IG51bXN0ciBz'@;
put 'dXBwb3J0cyBvbmx5IGRpZ2l0cyBhbmQgc3BhY2UiKToicHJpbnRzdHIiPT09Sz90aGlzLl9pc1ByaW50c3RyKEwpP3RoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoTCk6dGhpcy5yZXBvcnRlci5lcnJvcigiRW5jb2Rpbmcgb2Ygc3RyaW5nIHR5cGU6IHByaW50c3RyIHN1cHBvcnRzIG9ubHkg'@;
put 'bGF0aW4gdXBwZXIgYW5kIGxvd2VyIGNhc2UgbGV0dGVycywgZGlnaXRzLCBzcGFjZSwgYXBvc3Ryb3BoZSwgbGVmdCBhbmQgcmlndGggcGFyZW50aGVzaXMsIHBsdXMgc2lnbiwgY29tbWEsIGh5cGhlbiwgZG90LCBzbGFzaCwgY29sb24sIGVxdWFsIHNpZ24sIHF1ZXN0aW9uIG1hcmsiKTov'@;
put 'c3RyJC8udGVzdChLKXx8Im9iakRlc2MiPT09Sz90aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKEwpOnRoaXMucmVwb3J0ZXIuZXJyb3IoIkVuY29kaW5nIG9mIHN0cmluZyB0eXBlOiAiK0srIiB1bnN1cHBvcnRlZCIpfSxGLnByb3RvdHlwZS5fZW5jb2RlT2JqaWQ9ZnVuY3Rpb24oTCxLLFUp'@;
put 'e2lmKCJzdHJpbmciPT10eXBlb2YgTCl7aWYoIUspcmV0dXJuIHRoaXMucmVwb3J0ZXIuZXJyb3IoInN0cmluZyBvYmppZCBnaXZlbiwgYnV0IG5vIHZhbHVlcyBtYXAgZm91bmQiKTtpZighSy5oYXNPd25Qcm9wZXJ0eShMKSlyZXR1cm4gdGhpcy5yZXBvcnRlci5lcnJvcigib2JqaWQgbm90'@;
put 'IGZvdW5kIGluIHZhbHVlcyBtYXAiKTtMPUtbTF0uc3BsaXQoL1tcc1wuXSsvZyk7Zm9yKHZhciBXPTA7VzxMLmxlbmd0aDtXKyspTFtXXXw9MH1lbHNlIGlmKEFycmF5LmlzQXJyYXkoTCkpZm9yKEw9TC5zbGljZSgpLFc9MDtXPEwubGVuZ3RoO1crKylMW1ddfD0wO2lmKCFBcnJheS5pc0Fy'@;
put 'cmF5KEwpKXJldHVybiB0aGlzLnJlcG9ydGVyLmVycm9yKCJvYmppZCgpIHNob3VsZCBiZSBlaXRoZXIgYXJyYXkgb3Igc3RyaW5nLCBnb3Q6ICIrSlNPTi5zdHJpbmdpZnkoTCkpO2lmKCFVKXtpZihMWzFdPj00MClyZXR1cm4gdGhpcy5yZXBvcnRlci5lcnJvcigiU2Vjb25kIG9iamlkIGlk'@;
put 'ZW50aWZpZXIgT09CIik7TC5zcGxpY2UoMCwyLDQwKkxbMF0rTFsxXSl9dmFyIFk9MDtmb3IoVz0wO1c8TC5sZW5ndGg7VysrKXt2YXIgcT1MW1ddO2ZvcihZKys7cT49MTI4O3E+Pj03KVkrK312YXIgZWU9bmV3IF8oWSksSj1lZS5sZW5ndGgtMTtmb3IoVz1MLmxlbmd0aC0xO1c+PTA7Vy0t'@;
put 'KWZvcihlZVtKLS1dPTEyNyYocT1MW1ddKTsocT4+PTcpPjA7KWVlW0otLV09MTI4fDEyNyZxO3JldHVybiB0aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKGVlKX0sRi5wcm90b3R5cGUuX2VuY29kZVRpbWU9ZnVuY3Rpb24oTCxLKXt2YXIgVSxXPW5ldyBEYXRlKEwpO3JldHVybiJnZW50aW1l'@;
put 'Ij09PUs/VT1bTyhXLmdldEZ1bGxZZWFyKCkpLE8oVy5nZXRVVENNb250aCgpKzEpLE8oVy5nZXRVVENEYXRlKCkpLE8oVy5nZXRVVENIb3VycygpKSxPKFcuZ2V0VVRDTWludXRlcygpKSxPKFcuZ2V0VVRDU2Vjb25kcygpKSwiWiJdLmpvaW4oIiIpOiJ1dGN0aW1lIj09PUs/VT1bTyhXLmdl'@;
put 'dEZ1bGxZZWFyKCklMTAwKSxPKFcuZ2V0VVRDTW9udGgoKSsxKSxPKFcuZ2V0VVRDRGF0ZSgpKSxPKFcuZ2V0VVRDSG91cnMoKSksTyhXLmdldFVUQ01pbnV0ZXMoKSksTyhXLmdldFVUQ1NlY29uZHMoKSksIloiXS5qb2luKCIiKTp0aGlzLnJlcG9ydGVyLmVycm9yKCJFbmNvZGluZyAiK0sr'@;
put 'IiB0aW1lIGlzIG5vdCBzdXBwb3J0ZWQgeWV0IiksdGhpcy5fZW5jb2RlU3RyKFUsIm9jdHN0ciIpfSxGLnByb3RvdHlwZS5fZW5jb2RlTnVsbD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKCIiKX0sRi5wcm90b3R5cGUuX2VuY29kZUludD1mdW5jdGlvbihM'@;
put 'LEspe2lmKCJzdHJpbmciPT10eXBlb2YgTCl7aWYoIUspcmV0dXJuIHRoaXMucmVwb3J0ZXIuZXJyb3IoIlN0cmluZyBpbnQgb3IgZW51bSBnaXZlbiwgYnV0IG5vIHZhbHVlcyBtYXAiKTtpZighSy5oYXNPd25Qcm9wZXJ0eShMKSlyZXR1cm4gdGhpcy5yZXBvcnRlci5lcnJvcigiVmFsdWVz'@;
put 'IG1hcCBkb2Vzbid0IGNvbnRhaW46ICIrSlNPTi5zdHJpbmdpZnkoTCkpO0w9S1tMXX1pZigibnVtYmVyIiE9dHlwZW9mIEwmJiFfLmlzQnVmZmVyKEwpKXt2YXIgVT1MLnRvQXJyYXkoKTshTC5zaWduJiYxMjgmVVswXSYmVS51bnNoaWZ0KDApLEw9bmV3IF8oVSl9aWYoXy5pc0J1ZmZlcihM'@;
put 'KSl7dmFyIFc9TC5sZW5ndGg7MD09PUwubGVuZ3RoJiZXKys7dmFyIHE9bmV3IF8oVyk7cmV0dXJuIEwuY29weShxKSwwPT09TC5sZW5ndGgmJihxWzBdPTApLHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIocSl9aWYoTDwxMjgpcmV0dXJuIHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoTCk7'@;
put 'aWYoTDwyNTYpcmV0dXJuIHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoWzAsTF0pO1c9MTtmb3IodmFyIFk9TDtZPj0yNTY7WT4+PTgpVysrO2ZvcihZPShxPW5ldyBBcnJheShXKSkubGVuZ3RoLTE7WT49MDtZLS0pcVtZXT0yNTUmTCxMPj49ODtyZXR1cm4gMTI4JnFbMF0mJnEudW5zaGlm'@;
put 'dCgwKSx0aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKG5ldyBfKHEpKX0sRi5wcm90b3R5cGUuX2VuY29kZUJvb2w9ZnVuY3Rpb24oTCl7cmV0dXJuIHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoTD8yNTU6MCl9LEYucHJvdG90eXBlLl91c2U9ZnVuY3Rpb24oTCxLKXtyZXR1cm4iZnVuY3Rp'@;
put 'b24iPT10eXBlb2YgTCYmKEw9TChLKSksTC5fZ2V0RW5jb2RlcigiZGVyIikudHJlZX0sRi5wcm90b3R5cGUuX3NraXBEZWZhdWx0PWZ1bmN0aW9uKEwsSyxVKXt2YXIgWSxXPXRoaXMuX2Jhc2VTdGF0ZTtpZihudWxsPT09Vy5kZWZhdWx0KXJldHVybiExO3ZhciBxPUwuam9pbigpO2lmKHZv'@;
put 'aWQgMD09PVcuZGVmYXVsdEJ1ZmZlciYmKFcuZGVmYXVsdEJ1ZmZlcj10aGlzLl9lbmNvZGVWYWx1ZShXLmRlZmF1bHQsSyxVKS5qb2luKCkpLHEubGVuZ3RoIT09Vy5kZWZhdWx0QnVmZmVyLmxlbmd0aClyZXR1cm4hMTtmb3IoWT0wO1k8cS5sZW5ndGg7WSsrKWlmKHFbWV0hPT1XLmRlZmF1'@;
put 'bHRCdWZmZXJbWV0pcmV0dXJuITE7cmV0dXJuITB9fSw2NTc5Oih1ZSxYLHkpPT57dmFyIEk9WDtJLmRlcj15KDY5ODQpLEkucGVtPXkoMjg4Myl9LDI4ODM6KHVlLFgseSk9Pnt2YXIgST15KDU3MTcpLF89eSg2OTg0KTtmdW5jdGlvbiBnKEIpe18uY2FsbCh0aGlzLEIpLHRoaXMuZW5jPSJw'@;
put 'ZW0ifUkoZyxfKSx1ZS5leHBvcnRzPWcsZy5wcm90b3R5cGUuZW5jb2RlPWZ1bmN0aW9uKHcsUCl7Zm9yKHZhciBPPV8ucHJvdG90eXBlLmVuY29kZS5jYWxsKHRoaXMsdykudG9TdHJpbmcoImJhc2U2NCIpLHo9WyItLS0tLUJFR0lOICIrUC5sYWJlbCsiLS0tLS0iXSxOPTA7TjxPLmxlbmd0'@;
put 'aDtOKz02NCl6LnB1c2goTy5zbGljZShOLE4rNjQpKTtyZXR1cm4gei5wdXNoKCItLS0tLUVORCAiK1AubGFiZWwrIi0tLS0tIiksei5qb2luKCJcbiIpfX0sNDU5MDpmdW5jdGlvbih1ZSxYLHkpeyFmdW5jdGlvbihJLF8peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBnKFYscCl7aWYoIVYpdGhy'@;
put 'b3cgbmV3IEVycm9yKHB8fCJBc3NlcnRpb24gZmFpbGVkIil9ZnVuY3Rpb24gQihWLHApe1Yuc3VwZXJfPXA7dmFyIGI9ZnVuY3Rpb24oKXt9O2IucHJvdG90eXBlPXAucHJvdG90eXBlLFYucHJvdG90eXBlPW5ldyBiLFYucHJvdG90eXBlLmNvbnN0cnVjdG9yPVZ9ZnVuY3Rpb24gdyhWLHAs'@;
put 'Yil7aWYody5pc0JOKFYpKXJldHVybiBWO3RoaXMubmVnYXRpdmU9MCx0aGlzLndvcmRzPW51bGwsdGhpcy5sZW5ndGg9MCx0aGlzLnJlZD1udWxsLG51bGwhPT1WJiYoKCJsZSI9PT1wfHwiYmUiPT09cCkmJihiPXAscD0xMCksdGhpcy5faW5pdChWfHwwLHB8fDEwLGJ8fCJiZSIpKX12YXIg'@;
put 'UDsib2JqZWN0Ij09dHlwZW9mIEk/SS5leHBvcnRzPXc6Xy5CTj13LHcuQk49dyx3LndvcmRTaXplPTI2O3RyeXtQPXR5cGVvZiB3aW5kb3c8InUiJiZ0eXBlb2Ygd2luZG93LkJ1ZmZlcjwidSI/d2luZG93LkJ1ZmZlcjp5KDk1MCkuQnVmZmVyfWNhdGNoe31mdW5jdGlvbiBGKFYscCl7dmFy'@;
put 'IGI9Vi5jaGFyQ29kZUF0KHApO3JldHVybiBiPj02NSYmYjw9NzA/Yi01NTpiPj05NyYmYjw9MTAyP2ItODc6Yi00OCYxNX1mdW5jdGlvbiBPKFYscCxiKXt2YXIgeD1GKFYsYik7cmV0dXJuIGItMT49cCYmKHh8PUYoVixiLTEpPDw0KSx4fWZ1bmN0aW9uIHooVixwLGIseCl7Zm9yKHZhciBD'@;
put 'PTAsVD1NYXRoLm1pbihWLmxlbmd0aCxiKSxIPXA7SDxUO0grKyl7dmFyIGo9Vi5jaGFyQ29kZUF0KEgpLTQ4O0MqPXgsQys9aj49NDk/ai00OSsxMDpqPj0xNz9qLTE3KzEwOmp9cmV0dXJuIEN9dy5pc0JOPWZ1bmN0aW9uKHApe3JldHVybiBwIGluc3RhbmNlb2Ygd3x8bnVsbCE9PXAmJiJv'@;
put 'YmplY3QiPT10eXBlb2YgcCYmcC5jb25zdHJ1Y3Rvci53b3JkU2l6ZT09PXcud29yZFNpemUmJkFycmF5LmlzQXJyYXkocC53b3Jkcyl9LHcubWF4PWZ1bmN0aW9uKHAsYil7cmV0dXJuIHAuY21wKGIpPjA/cDpifSx3Lm1pbj1mdW5jdGlvbihwLGIpe3JldHVybiBwLmNtcChiKTwwP3A6Yn0s'@;
put 'dy5wcm90b3R5cGUuX2luaXQ9ZnVuY3Rpb24ocCxiLHgpe2lmKCJudW1iZXIiPT10eXBlb2YgcClyZXR1cm4gdGhpcy5faW5pdE51bWJlcihwLGIseCk7aWYoIm9iamVjdCI9PXR5cGVvZiBwKXJldHVybiB0aGlzLl9pbml0QXJyYXkocCxiLHgpOyJoZXgiPT09YiYmKGI9MTYpLGcoYj09PSgw'@;
put 'fGIpJiZiPj0yJiZiPD0zNik7dmFyIEM9MDsiLSI9PT0ocD1wLnRvU3RyaW5nKCkucmVwbGFjZSgvXHMrL2csIiIpKVswXSYmKEMrKyx0aGlzLm5lZ2F0aXZlPTEpLEM8cC5sZW5ndGgmJigxNj09PWI/dGhpcy5fcGFyc2VIZXgocCxDLHgpOih0aGlzLl9wYXJzZUJhc2UocCxiLEMpLCJsZSI9'@;
put 'PT14JiZ0aGlzLl9pbml0QXJyYXkodGhpcy50b0FycmF5KCksYix4KSkpfSx3LnByb3RvdHlwZS5faW5pdE51bWJlcj1mdW5jdGlvbihwLGIseCl7cDwwJiYodGhpcy5uZWdhdGl2ZT0xLHA9LXApLHA8NjcxMDg4NjQ/KHRoaXMud29yZHM9WzY3MTA4ODYzJnBdLHRoaXMubGVuZ3RoPTEpOnA8'@;
put 'NDUwMzU5OTYyNzM3MDQ5Nj8odGhpcy53b3Jkcz1bNjcxMDg4NjMmcCxwLzY3MTA4ODY0JjY3MTA4ODYzXSx0aGlzLmxlbmd0aD0yKTooZyhwPDkwMDcxOTkyNTQ3NDA5OTIpLHRoaXMud29yZHM9WzY3MTA4ODYzJnAscC82NzEwODg2NCY2NzEwODg2MywxXSx0aGlzLmxlbmd0aD0zKSwibGUi'@;
put 'PT09eCYmdGhpcy5faW5pdEFycmF5KHRoaXMudG9BcnJheSgpLGIseCl9LHcucHJvdG90eXBlLl9pbml0QXJyYXk9ZnVuY3Rpb24ocCxiLHgpe2lmKGcoIm51bWJlciI9PXR5cGVvZiBwLmxlbmd0aCkscC5sZW5ndGg8PTApcmV0dXJuIHRoaXMud29yZHM9WzBdLHRoaXMubGVuZ3RoPTEsdGhp'@;
put 'czt0aGlzLmxlbmd0aD1NYXRoLmNlaWwocC5sZW5ndGgvMyksdGhpcy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgQz0wO0M8dGhpcy5sZW5ndGg7QysrKXRoaXMud29yZHNbQ109MDt2YXIgVCxILGo9MDtpZigiYmUiPT09eClmb3IoQz1wLmxlbmd0aC0xLFQ9MDtDPj0w'@;
put 'O0MtPTMpdGhpcy53b3Jkc1tUXXw9KEg9cFtDXXxwW0MtMV08PDh8cFtDLTJdPDwxNik8PGomNjcxMDg4NjMsdGhpcy53b3Jkc1tUKzFdPUg+Pj4yNi1qJjY3MTA4ODYzLChqKz0yNCk+PTI2JiYoai09MjYsVCsrKTtlbHNlIGlmKCJsZSI9PT14KWZvcihDPTAsVD0wO0M8cC5sZW5ndGg7Qys9'@;
put 'Myl0aGlzLndvcmRzW1RdfD0oSD1wW0NdfHBbQysxXTw8OHxwW0MrMl08PDE2KTw8aiY2NzEwODg2Myx0aGlzLndvcmRzW1QrMV09SD4+PjI2LWomNjcxMDg4NjMsKGorPTI0KT49MjYmJihqLT0yNixUKyspO3JldHVybiB0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLl9wYXJzZUhleD1mdW5j'@;
put 'dGlvbihwLGIseCl7dGhpcy5sZW5ndGg9TWF0aC5jZWlsKChwLmxlbmd0aC1iKS82KSx0aGlzLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciBDPTA7Qzx0aGlzLmxlbmd0aDtDKyspdGhpcy53b3Jkc1tDXT0wO3ZhciBqLFQ9MCxIPTA7aWYoImJlIj09PXgpZm9yKEM9cC5s'@;
put 'ZW5ndGgtMTtDPj1iO0MtPTIpaj1PKHAsYixDKTw8VCx0aGlzLndvcmRzW0hdfD02NzEwODg2MyZqLFQ+PTE4PyhULT0xOCx0aGlzLndvcmRzW0grPTFdfD1qPj4+MjYpOlQrPTg7ZWxzZSBmb3IoQz0ocC5sZW5ndGgtYiklMj09MD9iKzE6YjtDPHAubGVuZ3RoO0MrPTIpaj1PKHAsYixDKTw8'@;
put 'VCx0aGlzLndvcmRzW0hdfD02NzEwODg2MyZqLFQ+PTE4PyhULT0xOCx0aGlzLndvcmRzW0grPTFdfD1qPj4+MjYpOlQrPTg7dGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5fcGFyc2VCYXNlPWZ1bmN0aW9uKHAsYix4KXt0aGlzLndvcmRzPVswXSx0aGlzLmxlbmd0aD0xO2Zvcih2YXIgQz0w'@;
put 'LFQ9MTtUPD02NzEwODg2MztUKj1iKUMrKztDLS0sVD1UL2J8MDtmb3IodmFyIEg9cC5sZW5ndGgteCxqPUglQyxFPU1hdGgubWluKEgsSC1qKSt4LG09MCxBPXg7QTxFO0ErPUMpbT16KHAsQSxBK0MsYiksdGhpcy5pbXVsbihUKSx0aGlzLndvcmRzWzBdK208NjcxMDg4NjQ/dGhpcy53b3Jk'@;
put 'c1swXSs9bTp0aGlzLl9pYWRkbihtKTtpZigwIT09ail7dmFyIGFlPTE7Zm9yKG09eihwLEEscC5sZW5ndGgsYiksQT0wO0E8ajtBKyspYWUqPWI7dGhpcy5pbXVsbihhZSksdGhpcy53b3Jkc1swXSttPDY3MTA4ODY0P3RoaXMud29yZHNbMF0rPW06dGhpcy5faWFkZG4obSl9dGhpcy5zdHJp'@;
put 'cCgpfSx3LnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKHApe3Aud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIGI9MDtiPHRoaXMubGVuZ3RoO2IrKylwLndvcmRzW2JdPXRoaXMud29yZHNbYl07cC5sZW5ndGg9dGhpcy5sZW5ndGgscC5uZWdhdGl2ZT10aGlzLm5lZ2F0aXZl'@;
put 'LHAucmVkPXRoaXMucmVkfSx3LnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbigpe3ZhciBwPW5ldyB3KG51bGwpO3JldHVybiB0aGlzLmNvcHkocCkscH0sdy5wcm90b3R5cGUuX2V4cGFuZD1mdW5jdGlvbihwKXtmb3IoO3RoaXMubGVuZ3RoPHA7KXRoaXMud29yZHNbdGhpcy5sZW5ndGgrK109'@;
put 'MDtyZXR1cm4gdGhpc30sdy5wcm90b3R5cGUuc3RyaXA9ZnVuY3Rpb24oKXtmb3IoO3RoaXMubGVuZ3RoPjEmJjA9PT10aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdOyl0aGlzLmxlbmd0aC0tO3JldHVybiB0aGlzLl9ub3JtU2lnbigpfSx3LnByb3RvdHlwZS5fbm9ybVNpZ249ZnVuY3Rpb24o'@;
put 'KXtyZXR1cm4gMT09PXRoaXMubGVuZ3RoJiYwPT09dGhpcy53b3Jkc1swXSYmKHRoaXMubmVnYXRpdmU9MCksdGhpc30sdy5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlvbigpe3JldHVybih0aGlzLnJlZD8iPEJOLVI6ICI6IjxCTjogIikrdGhpcy50b1N0cmluZygxNikrIj4ifTt2YXIgTj1b'@;
put 'IiIsIjAiLCIwMCIsIjAwMCIsIjAwMDAiLCIwMDAwMCIsIjAwMDAwMCIsIjAwMDAwMDAiLCIwMDAwMDAwMCIsIjAwMDAwMDAwMCIsIjAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAw'@;
put 'MCIsIjAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAw'@;
put 'MDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiXSxMPVswLDAsMjUsMTYsMTIsMTEsMTAsOSw4LDgsNyw3LDcsNyw2LDYsNiw2LDYsNiw2LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDVdLEs9WzAsMCwz'@;
put 'MzU1NDQzMiw0MzA0NjcyMSwxNjc3NzIxNiw0ODgyODEyNSw2MDQ2NjE3Niw0MDM1MzYwNywxNjc3NzIxNiw0MzA0NjcyMSwxZTcsMTk0ODcxNzEsMzU4MzE4MDgsNjI3NDg1MTcsNzUyOTUzNiwxMTM5MDYyNSwxNjc3NzIxNiwyNDEzNzU2OSwzNDAxMjIyNCw0NzA0NTg4MSw2NGU2LDQwODQx'@;
put 'MDEsNTE1MzYzMiw2NDM2MzQzLDc5NjI2MjQsOTc2NTYyNSwxMTg4MTM3NiwxNDM0ODkwNywxNzIxMDM2OCwyMDUxMTE0OSwyNDNlNSwyODYyOTE1MSwzMzU1NDQzMiwzOTEzNTM5Myw0NTQzNTQyNCw1MjUyMTg3NSw2MDQ2NjE3Nl07ZnVuY3Rpb24gVyhWLHAsYil7Yi5uZWdhdGl2ZT1wLm5l'@;
put 'Z2F0aXZlXlYubmVnYXRpdmU7dmFyIHg9Vi5sZW5ndGgrcC5sZW5ndGh8MDtiLmxlbmd0aD14LHg9eC0xfDA7dmFyIEM9MHxWLndvcmRzWzBdLFQ9MHxwLndvcmRzWzBdLEg9QypULEU9SC82NzEwODg2NHwwO2Iud29yZHNbMF09NjcxMDg4NjMmSDtmb3IodmFyIG09MTttPHg7bSsrKXtmb3Io'@;
put 'dmFyIEE9RT4+PjI2LGFlPTY3MTA4ODYzJkUsdGU9TWF0aC5taW4obSxwLmxlbmd0aC0xKSxzZT1NYXRoLm1heCgwLG0tVi5sZW5ndGgrMSk7c2U8PXRlO3NlKyspQSs9KEg9KEM9MHxWLndvcmRzW20tc2V8MF0pKihUPTB8cC53b3Jkc1tzZV0pK2FlKS82NzEwODg2NHwwLGFlPTY3MTA4ODYz'@;
put 'Jkg7Yi53b3Jkc1ttXT0wfGFlLEU9MHxBfXJldHVybiAwIT09RT9iLndvcmRzW21dPTB8RTpiLmxlbmd0aC0tLGIuc3RyaXAoKX13LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbihwLGIpe3ZhciB4O2lmKGI9MHxifHwxLDE2PT09KHA9cHx8MTApfHwiaGV4Ij09PXApe3g9IiI7Zm9yKHZh'@;
put 'ciBDPTAsVD0wLEg9MDtIPHRoaXMubGVuZ3RoO0grKyl7dmFyIGo9dGhpcy53b3Jkc1tIXSxFPSgxNjc3NzIxNSYoajw8Q3xUKSkudG9TdHJpbmcoMTYpO1Q9aj4+PjI0LUMmMTY3NzcyMTUsKEMrPTIpPj0yNiYmKEMtPTI2LEgtLSkseD0wIT09VHx8SCE9PXRoaXMubGVuZ3RoLTE/Tls2LUUu'@;
put 'bGVuZ3RoXStFK3g6RSt4fWZvcigwIT09VCYmKHg9VC50b1N0cmluZygxNikreCk7eC5sZW5ndGglYiE9MDspeD0iMCIreDtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmUmJih4PSItIit4KSx4fWlmKHA9PT0oMHxwKSYmcD49MiYmcDw9MzYpe3ZhciBtPUxbcF0sQT1LW3BdO3g9IiI7dmFyIGFl'@;
put 'PXRoaXMuY2xvbmUoKTtmb3IoYWUubmVnYXRpdmU9MDshYWUuaXNaZXJvKCk7KXt2YXIgdGU9YWUubW9kbihBKS50b1N0cmluZyhwKTt4PShhZT1hZS5pZGl2bihBKSkuaXNaZXJvKCk/dGUreDpOW20tdGUubGVuZ3RoXSt0ZSt4fWZvcih0aGlzLmlzWmVybygpJiYoeD0iMCIreCk7eC5sZW5n'@;
put 'dGglYiE9MDspeD0iMCIreDtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmUmJih4PSItIit4KSx4fWcoITEsIkJhc2Ugc2hvdWxkIGJlIGJldHdlZW4gMiBhbmQgMzYiKX0sdy5wcm90b3R5cGUudG9OdW1iZXI9ZnVuY3Rpb24oKXt2YXIgcD10aGlzLndvcmRzWzBdO3JldHVybiAyPT09dGhpcy5s'@;
put 'ZW5ndGg/cCs9NjcxMDg4NjQqdGhpcy53b3Jkc1sxXTozPT09dGhpcy5sZW5ndGgmJjE9PT10aGlzLndvcmRzWzJdP3ArPTQ1MDM1OTk2MjczNzA0OTYrNjcxMDg4NjQqdGhpcy53b3Jkc1sxXTp0aGlzLmxlbmd0aD4yJiZnKCExLCJOdW1iZXIgY2FuIG9ubHkgc2FmZWx5IHN0b3JlIHVwIHRv'@;
put 'IDUzIGJpdHMiKSwwIT09dGhpcy5uZWdhdGl2ZT8tcDpwfSx3LnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50b1N0cmluZygxNil9LHcucHJvdG90eXBlLnRvQnVmZmVyPWZ1bmN0aW9uKHAsYil7cmV0dXJuIGcodHlwZW9mIFA8InUiKSx0aGlzLnRvQXJyYXlMaWtl'@;
put 'KFAscCxiKX0sdy5wcm90b3R5cGUudG9BcnJheT1mdW5jdGlvbihwLGIpe3JldHVybiB0aGlzLnRvQXJyYXlMaWtlKEFycmF5LHAsYil9LHcucHJvdG90eXBlLnRvQXJyYXlMaWtlPWZ1bmN0aW9uKHAsYix4KXt2YXIgQz10aGlzLmJ5dGVMZW5ndGgoKSxUPXh8fE1hdGgubWF4KDEsQyk7ZyhD'@;
put 'PD1ULCJieXRlIGFycmF5IGxvbmdlciB0aGFuIGRlc2lyZWQgbGVuZ3RoIiksZyhUPjAsIlJlcXVlc3RlZCBhcnJheSBsZW5ndGggPD0gMCIpLHRoaXMuc3RyaXAoKTt2YXIgRSxtLEg9ImxlIj09PWIsaj1uZXcgcChUKSxBPXRoaXMuY2xvbmUoKTtpZihIKXtmb3IobT0wOyFBLmlzWmVybygp'@;
put 'O20rKylFPUEuYW5kbG4oMjU1KSxBLml1c2hybig4KSxqW21dPUU7Zm9yKDttPFQ7bSsrKWpbbV09MH1lbHNle2ZvcihtPTA7bTxULUM7bSsrKWpbbV09MDtmb3IobT0wOyFBLmlzWmVybygpO20rKylFPUEuYW5kbG4oMjU1KSxBLml1c2hybig4KSxqW1QtbS0xXT1FfXJldHVybiBqfSx3LnBy'@;
put 'b3RvdHlwZS5fY291bnRCaXRzPU1hdGguY2x6MzI/ZnVuY3Rpb24ocCl7cmV0dXJuIDMyLU1hdGguY2x6MzIocCl9OmZ1bmN0aW9uKHApe3ZhciBiPXAseD0wO3JldHVybiBiPj00MDk2JiYoeCs9MTMsYj4+Pj0xMyksYj49NjQmJih4Kz03LGI+Pj49NyksYj49OCYmKHgrPTQsYj4+Pj00KSxi'@;
put 'Pj0yJiYoeCs9MixiPj4+PTIpLHgrYn0sdy5wcm90b3R5cGUuX3plcm9CaXRzPWZ1bmN0aW9uKHApe2lmKDA9PT1wKXJldHVybiAyNjt2YXIgYj1wLHg9MDtyZXR1cm4gODE5MSZifHwoeCs9MTMsYj4+Pj0xMyksMTI3JmJ8fCh4Kz03LGI+Pj49NyksMTUmYnx8KHgrPTQsYj4+Pj00KSwzJmJ8'@;
put 'fCh4Kz0yLGI+Pj49MiksMSZifHx4KysseH0sdy5wcm90b3R5cGUuYml0TGVuZ3RoPWZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5fY291bnRCaXRzKHRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV0pO3JldHVybiAyNioodGhpcy5sZW5ndGgtMSkrYn0sdy5wcm90b3R5cGUuemVyb0JpdHM9ZnVuY3Rp'@;
put 'b24oKXtpZih0aGlzLmlzWmVybygpKXJldHVybiAwO2Zvcih2YXIgcD0wLGI9MDtiPHRoaXMubGVuZ3RoO2IrKyl7dmFyIHg9dGhpcy5femVyb0JpdHModGhpcy53b3Jkc1tiXSk7aWYocCs9eCwyNiE9PXgpYnJlYWt9cmV0dXJuIHB9LHcucHJvdG90eXBlLmJ5dGVMZW5ndGg9ZnVuY3Rpb24o'@;
put 'KXtyZXR1cm4gTWF0aC5jZWlsKHRoaXMuYml0TGVuZ3RoKCkvOCl9LHcucHJvdG90eXBlLnRvVHdvcz1mdW5jdGlvbihwKXtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/dGhpcy5hYnMoKS5pbm90bihwKS5pYWRkbigxKTp0aGlzLmNsb25lKCl9LHcucHJvdG90eXBlLmZyb21Ud29zPWZ1bmN0'@;
put 'aW9uKHApe3JldHVybiB0aGlzLnRlc3RuKHAtMSk/dGhpcy5ub3RuKHApLmlhZGRuKDEpLmluZWcoKTp0aGlzLmNsb25lKCl9LHcucHJvdG90eXBlLmlzTmVnPWZ1bmN0aW9uKCl7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlfSx3LnByb3RvdHlwZS5uZWc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhp'@;
put 'cy5jbG9uZSgpLmluZWcoKX0sdy5wcm90b3R5cGUuaW5lZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzWmVybygpfHwodGhpcy5uZWdhdGl2ZV49MSksdGhpc30sdy5wcm90b3R5cGUuaXVvcj1mdW5jdGlvbihwKXtmb3IoO3RoaXMubGVuZ3RoPHAubGVuZ3RoOyl0aGlzLndvcmRzW3RoaXMu'@;
put 'bGVuZ3RoKytdPTA7Zm9yKHZhciBiPTA7YjxwLmxlbmd0aDtiKyspdGhpcy53b3Jkc1tiXT10aGlzLndvcmRzW2JdfHAud29yZHNbYl07cmV0dXJuIHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuaW9yPWZ1bmN0aW9uKHApe3JldHVybiBnKCEodGhpcy5uZWdhdGl2ZXxwLm5lZ2F0aXZlKSks'@;
put 'dGhpcy5pdW9yKHApfSx3LnByb3RvdHlwZS5vcj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5sZW5ndGg+cC5sZW5ndGg/dGhpcy5jbG9uZSgpLmlvcihwKTpwLmNsb25lKCkuaW9yKHRoaXMpfSx3LnByb3RvdHlwZS51b3I9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMubGVuZ3RoPnAubGVuZ3Ro'@;
put 'P3RoaXMuY2xvbmUoKS5pdW9yKHApOnAuY2xvbmUoKS5pdW9yKHRoaXMpfSx3LnByb3RvdHlwZS5pdWFuZD1mdW5jdGlvbihwKXt2YXIgYjtiPXRoaXMubGVuZ3RoPnAubGVuZ3RoP3A6dGhpcztmb3IodmFyIHg9MDt4PGIubGVuZ3RoO3grKyl0aGlzLndvcmRzW3hdPXRoaXMud29yZHNbeF0m'@;
put 'cC53b3Jkc1t4XTtyZXR1cm4gdGhpcy5sZW5ndGg9Yi5sZW5ndGgsdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5pYW5kPWZ1bmN0aW9uKHApe3JldHVybiBnKCEodGhpcy5uZWdhdGl2ZXxwLm5lZ2F0aXZlKSksdGhpcy5pdWFuZChwKX0sdy5wcm90b3R5cGUuYW5kPWZ1bmN0aW9uKHApe3Jl'@;
put 'dHVybiB0aGlzLmxlbmd0aD5wLmxlbmd0aD90aGlzLmNsb25lKCkuaWFuZChwKTpwLmNsb25lKCkuaWFuZCh0aGlzKX0sdy5wcm90b3R5cGUudWFuZD1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5sZW5ndGg+cC5sZW5ndGg/dGhpcy5jbG9uZSgpLml1YW5kKHApOnAuY2xvbmUoKS5pdWFuZCh0'@;
put 'aGlzKX0sdy5wcm90b3R5cGUuaXV4b3I9ZnVuY3Rpb24ocCl7dmFyIGIseDt0aGlzLmxlbmd0aD5wLmxlbmd0aD8oYj10aGlzLHg9cCk6KGI9cCx4PXRoaXMpO2Zvcih2YXIgQz0wO0M8eC5sZW5ndGg7QysrKXRoaXMud29yZHNbQ109Yi53b3Jkc1tDXV54LndvcmRzW0NdO2lmKHRoaXMhPT1i'@;
put 'KWZvcig7QzxiLmxlbmd0aDtDKyspdGhpcy53b3Jkc1tDXT1iLndvcmRzW0NdO3JldHVybiB0aGlzLmxlbmd0aD1iLmxlbmd0aCx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLml4b3I9ZnVuY3Rpb24ocCl7cmV0dXJuIGcoISh0aGlzLm5lZ2F0aXZlfHAubmVnYXRpdmUpKSx0aGlzLml1eG9y'@;
put 'KHApfSx3LnByb3RvdHlwZS54b3I9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMubGVuZ3RoPnAubGVuZ3RoP3RoaXMuY2xvbmUoKS5peG9yKHApOnAuY2xvbmUoKS5peG9yKHRoaXMpfSx3LnByb3RvdHlwZS51eG9yPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmxlbmd0aD5wLmxlbmd0aD90aGlz'@;
put 'LmNsb25lKCkuaXV4b3IocCk6cC5jbG9uZSgpLml1eG9yKHRoaXMpfSx3LnByb3RvdHlwZS5pbm90bj1mdW5jdGlvbihwKXtnKCJudW1iZXIiPT10eXBlb2YgcCYmcD49MCk7dmFyIGI9MHxNYXRoLmNlaWwocC8yNikseD1wJTI2O3RoaXMuX2V4cGFuZChiKSx4PjAmJmItLTtmb3IodmFyIEM9'@;
put 'MDtDPGI7QysrKXRoaXMud29yZHNbQ109NjcxMDg4NjMmfnRoaXMud29yZHNbQ107cmV0dXJuIHg+MCYmKHRoaXMud29yZHNbQ109fnRoaXMud29yZHNbQ10mNjcxMDg4NjM+PjI2LXgpLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUubm90bj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9u'@;
put 'ZSgpLmlub3RuKHApfSx3LnByb3RvdHlwZS5zZXRuPWZ1bmN0aW9uKHAsYil7ZygibnVtYmVyIj09dHlwZW9mIHAmJnA+PTApO3ZhciB4PXAvMjZ8MCxDPXAlMjY7cmV0dXJuIHRoaXMuX2V4cGFuZCh4KzEpLHRoaXMud29yZHNbeF09Yj90aGlzLndvcmRzW3hdfDE8PEM6dGhpcy53b3Jkc1t4'@;
put 'XSZ+KDE8PEMpLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuaWFkZD1mdW5jdGlvbihwKXt2YXIgYix4LEM7aWYoMCE9PXRoaXMubmVnYXRpdmUmJjA9PT1wLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsYj10aGlzLmlzdWIocCksdGhpcy5uZWdhdGl2ZV49MSx0aGlzLl9ub3Jt'@;
put 'U2lnbigpO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiYwIT09cC5uZWdhdGl2ZSlyZXR1cm4gcC5uZWdhdGl2ZT0wLGI9dGhpcy5pc3ViKHApLHAubmVnYXRpdmU9MSxiLl9ub3JtU2lnbigpO3RoaXMubGVuZ3RoPnAubGVuZ3RoPyh4PXRoaXMsQz1wKTooeD1wLEM9dGhpcyk7Zm9yKHZhciBUPTAs'@;
put 'SD0wO0g8Qy5sZW5ndGg7SCsrKXRoaXMud29yZHNbSF09NjcxMDg4NjMmKGI9KDB8eC53b3Jkc1tIXSkrKDB8Qy53b3Jkc1tIXSkrVCksVD1iPj4+MjY7Zm9yKDswIT09VCYmSDx4Lmxlbmd0aDtIKyspdGhpcy53b3Jkc1tIXT02NzEwODg2MyYoYj0oMHx4LndvcmRzW0hdKStUKSxUPWI+Pj4y'@;
put 'NjtpZih0aGlzLmxlbmd0aD14Lmxlbmd0aCwwIT09VCl0aGlzLndvcmRzW3RoaXMubGVuZ3RoXT1ULHRoaXMubGVuZ3RoKys7ZWxzZSBpZih4IT09dGhpcylmb3IoO0g8eC5sZW5ndGg7SCsrKXRoaXMud29yZHNbSF09eC53b3Jkc1tIXTtyZXR1cm4gdGhpc30sdy5wcm90b3R5cGUuYWRkPWZ1'@;
put 'bmN0aW9uKHApe3ZhciBiO3JldHVybiAwIT09cC5uZWdhdGl2ZSYmMD09PXRoaXMubmVnYXRpdmU/KHAubmVnYXRpdmU9MCxiPXRoaXMuc3ViKHApLHAubmVnYXRpdmVePTEsYik6MD09PXAubmVnYXRpdmUmJjAhPT10aGlzLm5lZ2F0aXZlPyh0aGlzLm5lZ2F0aXZlPTAsYj1wLnN1Yih0aGlz'@;
put 'KSx0aGlzLm5lZ2F0aXZlPTEsYik6dGhpcy5sZW5ndGg+cC5sZW5ndGg/dGhpcy5jbG9uZSgpLmlhZGQocCk6cC5jbG9uZSgpLmlhZGQodGhpcyl9LHcucHJvdG90eXBlLmlzdWI9ZnVuY3Rpb24ocCl7aWYoMCE9PXAubmVnYXRpdmUpe3AubmVnYXRpdmU9MDt2YXIgYj10aGlzLmlhZGQocCk7'@;
put 'cmV0dXJuIHAubmVnYXRpdmU9MSxiLl9ub3JtU2lnbigpfWlmKDAhPT10aGlzLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pYWRkKHApLHRoaXMubmVnYXRpdmU9MSx0aGlzLl9ub3JtU2lnbigpO3ZhciBDLFQseD10aGlzLmNtcChwKTtpZigwPT09eClyZXR1cm4gdGhp'@;
put 'cy5uZWdhdGl2ZT0wLHRoaXMubGVuZ3RoPTEsdGhpcy53b3Jkc1swXT0wLHRoaXM7eD4wPyhDPXRoaXMsVD1wKTooQz1wLFQ9dGhpcyk7Zm9yKHZhciBIPTAsaj0wO2o8VC5sZW5ndGg7aisrKUg9KGI9KDB8Qy53b3Jkc1tqXSktKDB8VC53b3Jkc1tqXSkrSCk+PjI2LHRoaXMud29yZHNbal09'@;
put 'NjcxMDg4NjMmYjtmb3IoOzAhPT1IJiZqPEMubGVuZ3RoO2orKylIPShiPSgwfEMud29yZHNbal0pK0gpPj4yNix0aGlzLndvcmRzW2pdPTY3MTA4ODYzJmI7aWYoMD09PUgmJmo8Qy5sZW5ndGgmJkMhPT10aGlzKWZvcig7ajxDLmxlbmd0aDtqKyspdGhpcy53b3Jkc1tqXT1DLndvcmRzW2pd'@;
put 'O3JldHVybiB0aGlzLmxlbmd0aD1NYXRoLm1heCh0aGlzLmxlbmd0aCxqKSxDIT09dGhpcyYmKHRoaXMubmVnYXRpdmU9MSksdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5zdWI9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc3ViKHApfTt2YXIgWT1mdW5jdGlvbihwLGIseCl7'@;
put 'dmFyIEUsbSxBLEM9cC53b3JkcyxUPWIud29yZHMsSD14LndvcmRzLGo9MCxhZT0wfENbMF0sdGU9ODE5MSZhZSxzZT1hZT4+PjEzLHdlPTB8Q1sxXSxVZT04MTkxJndlLEplPXdlPj4+MTMsb3Q9MHxDWzJdLHhlPTgxOTEmb3QsdmU9b3Q+Pj4xMyxYZT0wfENbM10semU9ODE5MSZYZSxEZT1Y'@;
put 'ZT4+PjEzLEZlPTB8Q1s0XSxPZT04MTkxJkZlLEllPUZlPj4+MTMsVmU9MHxDWzVdLGtlPTgxOTEmVmUsQWU9VmU+Pj4xMyxfdD0wfENbNl0sbnQ9ODE5MSZfdCxRZT1fdD4+PjEzLHVuPTB8Q1s3XSx5dD04MTkxJnVuLE10PXVuPj4+MTMsRHQ9MHxDWzhdLGl0PTgxOTEmRHQsJGU9RHQ+Pj4x'@;
put 'Myx0dD0wfENbOV0sSGU9ODE5MSZ0dCx1dD10dD4+PjEzLHF0PTB8VFswXSxSdD04MTkxJnF0LFB0PXF0Pj4+MTMsY2k9MHxUWzFdLFF0PTgxOTEmY2ksc249Y2k+Pj4xMyxSaT0wfFRbMl0saG49ODE5MSZSaSxmdD1SaT4+PjEzLE9yPTB8VFszXSxXdD04MTkxJk9yLEF0PU9yPj4+MTMsUm49'@;
put 'MHxUWzRdLHN0PTgxOTEmUm4sVXQ9Um4+Pj4xMyxyaT0wfFRbNV0sV2U9ODE5MSZyaSxUdD1yaT4+PjEzLG5yPTB8VFs2XSxodD04MTkxJm5yLHh0PW5yPj4+MTMsam49MHxUWzddLHJuPTgxOTEmam4senQ9am4+Pj4xMyxoaT0wfFRbOF0sY249ODE5MSZoaSxmbj1oaT4+PjEzLElpPTB8VFs5'@;
put 'XSxYdD04MTkxJklpLGVuPUlpPj4+MTM7eC5uZWdhdGl2ZT1wLm5lZ2F0aXZlXmIubmVnYXRpdmUseC5sZW5ndGg9MTk7dmFyIHVhPShqKyhFPU1hdGguaW11bCh0ZSxSdCkpfDApKygoODE5MSYobT0obT1NYXRoLmltdWwodGUsUHQpKStNYXRoLmltdWwoc2UsUnQpfDApKTw8MTMpfDA7aj0o'@;
put 'KEE9TWF0aC5pbXVsKHNlLFB0KSkrKG0+Pj4xMyl8MCkrKHVhPj4+MjYpfDAsdWEmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKFVlLFJ0KSxtPShtPU1hdGguaW11bChVZSxQdCkpK01hdGguaW11bChKZSxSdCl8MCxBPU1hdGguaW11bChKZSxQdCk7dmFyIEVpPShqKyhFPUUrTWF0aC5pbXVsKHRl'@;
put 'LFF0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwodGUsc24pfDApK01hdGguaW11bChzZSxRdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSxzbil8MCkrKG0+Pj4xMyl8MCkrKEVpPj4+MjYpfDAsRWkmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKHhlLFJ0KSxtPShtPU1h'@;
put 'dGguaW11bCh4ZSxQdCkpK01hdGguaW11bCh2ZSxSdCl8MCxBPU1hdGguaW11bCh2ZSxQdCksRT1FK01hdGguaW11bChVZSxRdCl8MCxtPShtPW0rTWF0aC5pbXVsKFVlLHNuKXwwKStNYXRoLmltdWwoSmUsUXQpfDAsQT1BK01hdGguaW11bChKZSxzbil8MDt2YXIgdnI9KGorKEU9RStNYXRo'@;
put 'LmltdWwodGUsaG4pfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh0ZSxmdCl8MCkrTWF0aC5pbXVsKHNlLGhuKXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLGZ0KXwwKSsobT4+PjEzKXwwKSsodnI+Pj4yNil8MCx2ciY9NjcxMDg4NjMsRT1NYXRoLmltdWwoemUsUnQp'@;
put 'LG09KG09TWF0aC5pbXVsKHplLFB0KSkrTWF0aC5pbXVsKERlLFJ0KXwwLEE9TWF0aC5pbXVsKERlLFB0KSxFPUUrTWF0aC5pbXVsKHhlLFF0KXwwLG09KG09bStNYXRoLmltdWwoeGUsc24pfDApK01hdGguaW11bCh2ZSxRdCl8MCxBPUErTWF0aC5pbXVsKHZlLHNuKXwwLEU9RStNYXRoLmlt'@;
put 'dWwoVWUsaG4pfDAsbT0obT1tK01hdGguaW11bChVZSxmdCl8MCkrTWF0aC5pbXVsKEplLGhuKXwwLEE9QStNYXRoLmltdWwoSmUsZnQpfDA7dmFyIFduPShqKyhFPUUrTWF0aC5pbXVsKHRlLFd0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwodGUsQXQpfDApK01hdGguaW11bChz'@;
put 'ZSxXdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSxBdCl8MCkrKG0+Pj4xMyl8MCkrKFduPj4+MjYpfDAsV24mPTY3MTA4ODYzLEU9TWF0aC5pbXVsKE9lLFJ0KSxtPShtPU1hdGguaW11bChPZSxQdCkpK01hdGguaW11bChJZSxSdCl8MCxBPU1hdGguaW11bChJZSxQdCksRT1F'@;
put 'K01hdGguaW11bCh6ZSxRdCl8MCxtPShtPW0rTWF0aC5pbXVsKHplLHNuKXwwKStNYXRoLmltdWwoRGUsUXQpfDAsQT1BK01hdGguaW11bChEZSxzbil8MCxFPUUrTWF0aC5pbXVsKHhlLGhuKXwwLG09KG09bStNYXRoLmltdWwoeGUsZnQpfDApK01hdGguaW11bCh2ZSxobil8MCxBPUErTWF0'@;
put 'aC5pbXVsKHZlLGZ0KXwwLEU9RStNYXRoLmltdWwoVWUsV3QpfDAsbT0obT1tK01hdGguaW11bChVZSxBdCl8MCkrTWF0aC5pbXVsKEplLFd0KXwwLEE9QStNYXRoLmltdWwoSmUsQXQpfDA7dmFyICRpPShqKyhFPUUrTWF0aC5pbXVsKHRlLHN0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRo'@;
put 'LmltdWwodGUsVXQpfDApK01hdGguaW11bChzZSxzdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSxVdCl8MCkrKG0+Pj4xMyl8MCkrKCRpPj4+MjYpfDAsJGkmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKGtlLFJ0KSxtPShtPU1hdGguaW11bChrZSxQdCkpK01hdGguaW11bChBZSxS'@;
put 'dCl8MCxBPU1hdGguaW11bChBZSxQdCksRT1FK01hdGguaW11bChPZSxRdCl8MCxtPShtPW0rTWF0aC5pbXVsKE9lLHNuKXwwKStNYXRoLmltdWwoSWUsUXQpfDAsQT1BK01hdGguaW11bChJZSxzbil8MCxFPUUrTWF0aC5pbXVsKHplLGhuKXwwLG09KG09bStNYXRoLmltdWwoemUsZnQpfDAp'@;
put 'K01hdGguaW11bChEZSxobil8MCxBPUErTWF0aC5pbXVsKERlLGZ0KXwwLEU9RStNYXRoLmltdWwoeGUsV3QpfDAsbT0obT1tK01hdGguaW11bCh4ZSxBdCl8MCkrTWF0aC5pbXVsKHZlLFd0KXwwLEE9QStNYXRoLmltdWwodmUsQXQpfDAsRT1FK01hdGguaW11bChVZSxzdCl8MCxtPShtPW0r'@;
put 'TWF0aC5pbXVsKFVlLFV0KXwwKStNYXRoLmltdWwoSmUsc3QpfDAsQT1BK01hdGguaW11bChKZSxVdCl8MDt2YXIgZWk9KGorKEU9RStNYXRoLmltdWwodGUsV2UpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh0ZSxUdCl8MCkrTWF0aC5pbXVsKHNlLFdlKXwwKSk8PDEzKXwwO2o9'@;
put 'KChBPUErTWF0aC5pbXVsKHNlLFR0KXwwKSsobT4+PjEzKXwwKSsoZWk+Pj4yNil8MCxlaSY9NjcxMDg4NjMsRT1NYXRoLmltdWwobnQsUnQpLG09KG09TWF0aC5pbXVsKG50LFB0KSkrTWF0aC5pbXVsKFFlLFJ0KXwwLEE9TWF0aC5pbXVsKFFlLFB0KSxFPUUrTWF0aC5pbXVsKGtlLFF0KXww'@;
put 'LG09KG09bStNYXRoLmltdWwoa2Usc24pfDApK01hdGguaW11bChBZSxRdCl8MCxBPUErTWF0aC5pbXVsKEFlLHNuKXwwLEU9RStNYXRoLmltdWwoT2UsaG4pfDAsbT0obT1tK01hdGguaW11bChPZSxmdCl8MCkrTWF0aC5pbXVsKEllLGhuKXwwLEE9QStNYXRoLmltdWwoSWUsZnQpfDAsRT1F'@;
put 'K01hdGguaW11bCh6ZSxXdCl8MCxtPShtPW0rTWF0aC5pbXVsKHplLEF0KXwwKStNYXRoLmltdWwoRGUsV3QpfDAsQT1BK01hdGguaW11bChEZSxBdCl8MCxFPUUrTWF0aC5pbXVsKHhlLHN0KXwwLG09KG09bStNYXRoLmltdWwoeGUsVXQpfDApK01hdGguaW11bCh2ZSxzdCl8MCxBPUErTWF0'@;
put 'aC5pbXVsKHZlLFV0KXwwLEU9RStNYXRoLmltdWwoVWUsV2UpfDAsbT0obT1tK01hdGguaW11bChVZSxUdCl8MCkrTWF0aC5pbXVsKEplLFdlKXwwLEE9QStNYXRoLmltdWwoSmUsVHQpfDA7dmFyIFFyPShqKyhFPUUrTWF0aC5pbXVsKHRlLGh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRo'@;
put 'LmltdWwodGUseHQpfDApK01hdGguaW11bChzZSxodCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSx4dCl8MCkrKG0+Pj4xMyl8MCkrKFFyPj4+MjYpfDAsUXImPTY3MTA4ODYzLEU9TWF0aC5pbXVsKHl0LFJ0KSxtPShtPU1hdGguaW11bCh5dCxQdCkpK01hdGguaW11bChNdCxS'@;
put 'dCl8MCxBPU1hdGguaW11bChNdCxQdCksRT1FK01hdGguaW11bChudCxRdCl8MCxtPShtPW0rTWF0aC5pbXVsKG50LHNuKXwwKStNYXRoLmltdWwoUWUsUXQpfDAsQT1BK01hdGguaW11bChRZSxzbil8MCxFPUUrTWF0aC5pbXVsKGtlLGhuKXwwLG09KG09bStNYXRoLmltdWwoa2UsZnQpfDAp'@;
put 'K01hdGguaW11bChBZSxobil8MCxBPUErTWF0aC5pbXVsKEFlLGZ0KXwwLEU9RStNYXRoLmltdWwoT2UsV3QpfDAsbT0obT1tK01hdGguaW11bChPZSxBdCl8MCkrTWF0aC5pbXVsKEllLFd0KXwwLEE9QStNYXRoLmltdWwoSWUsQXQpfDAsRT1FK01hdGguaW11bCh6ZSxzdCl8MCxtPShtPW0r'@;
put 'TWF0aC5pbXVsKHplLFV0KXwwKStNYXRoLmltdWwoRGUsc3QpfDAsQT1BK01hdGguaW11bChEZSxVdCl8MCxFPUUrTWF0aC5pbXVsKHhlLFdlKXwwLG09KG09bStNYXRoLmltdWwoeGUsVHQpfDApK01hdGguaW11bCh2ZSxXZSl8MCxBPUErTWF0aC5pbXVsKHZlLFR0KXwwLEU9RStNYXRoLmlt'@;
put 'dWwoVWUsaHQpfDAsbT0obT1tK01hdGguaW11bChVZSx4dCl8MCkrTWF0aC5pbXVsKEplLGh0KXwwLEE9QStNYXRoLmltdWwoSmUseHQpfDA7dmFyIFZpPShqKyhFPUUrTWF0aC5pbXVsKHRlLHJuKXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwodGUsenQpfDApK01hdGguaW11bChz'@;
put 'ZSxybil8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSx6dCl8MCkrKG0+Pj4xMyl8MCkrKFZpPj4+MjYpfDAsVmkmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKGl0LFJ0KSxtPShtPU1hdGguaW11bChpdCxQdCkpK01hdGguaW11bCgkZSxSdCl8MCxBPU1hdGguaW11bCgkZSxQdCksRT1F'@;
put 'K01hdGguaW11bCh5dCxRdCl8MCxtPShtPW0rTWF0aC5pbXVsKHl0LHNuKXwwKStNYXRoLmltdWwoTXQsUXQpfDAsQT1BK01hdGguaW11bChNdCxzbil8MCxFPUUrTWF0aC5pbXVsKG50LGhuKXwwLG09KG09bStNYXRoLmltdWwobnQsZnQpfDApK01hdGguaW11bChRZSxobil8MCxBPUErTWF0'@;
put 'aC5pbXVsKFFlLGZ0KXwwLEU9RStNYXRoLmltdWwoa2UsV3QpfDAsbT0obT1tK01hdGguaW11bChrZSxBdCl8MCkrTWF0aC5pbXVsKEFlLFd0KXwwLEE9QStNYXRoLmltdWwoQWUsQXQpfDAsRT1FK01hdGguaW11bChPZSxzdCl8MCxtPShtPW0rTWF0aC5pbXVsKE9lLFV0KXwwKStNYXRoLmlt'@;
put 'dWwoSWUsc3QpfDAsQT1BK01hdGguaW11bChJZSxVdCl8MCxFPUUrTWF0aC5pbXVsKHplLFdlKXwwLG09KG09bStNYXRoLmltdWwoemUsVHQpfDApK01hdGguaW11bChEZSxXZSl8MCxBPUErTWF0aC5pbXVsKERlLFR0KXwwLEU9RStNYXRoLmltdWwoeGUsaHQpfDAsbT0obT1tK01hdGguaW11'@;
put 'bCh4ZSx4dCl8MCkrTWF0aC5pbXVsKHZlLGh0KXwwLEE9QStNYXRoLmltdWwodmUseHQpfDAsRT1FK01hdGguaW11bChVZSxybil8MCxtPShtPW0rTWF0aC5pbXVsKFVlLHp0KXwwKStNYXRoLmltdWwoSmUscm4pfDAsQT1BK01hdGguaW11bChKZSx6dCl8MDt2YXIgTmk9KGorKEU9RStNYXRo'@;
put 'LmltdWwodGUsY24pfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh0ZSxmbil8MCkrTWF0aC5pbXVsKHNlLGNuKXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLGZuKXwwKSsobT4+PjEzKXwwKSsoTmk+Pj4yNil8MCxOaSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSGUsUnQp'@;
put 'LG09KG09TWF0aC5pbXVsKEhlLFB0KSkrTWF0aC5pbXVsKHV0LFJ0KXwwLEE9TWF0aC5pbXVsKHV0LFB0KSxFPUUrTWF0aC5pbXVsKGl0LFF0KXwwLG09KG09bStNYXRoLmltdWwoaXQsc24pfDApK01hdGguaW11bCgkZSxRdCl8MCxBPUErTWF0aC5pbXVsKCRlLHNuKXwwLEU9RStNYXRoLmlt'@;
put 'dWwoeXQsaG4pfDAsbT0obT1tK01hdGguaW11bCh5dCxmdCl8MCkrTWF0aC5pbXVsKE10LGhuKXwwLEE9QStNYXRoLmltdWwoTXQsZnQpfDAsRT1FK01hdGguaW11bChudCxXdCl8MCxtPShtPW0rTWF0aC5pbXVsKG50LEF0KXwwKStNYXRoLmltdWwoUWUsV3QpfDAsQT1BK01hdGguaW11bChR'@;
put 'ZSxBdCl8MCxFPUUrTWF0aC5pbXVsKGtlLHN0KXwwLG09KG09bStNYXRoLmltdWwoa2UsVXQpfDApK01hdGguaW11bChBZSxzdCl8MCxBPUErTWF0aC5pbXVsKEFlLFV0KXwwLEU9RStNYXRoLmltdWwoT2UsV2UpfDAsbT0obT1tK01hdGguaW11bChPZSxUdCl8MCkrTWF0aC5pbXVsKEllLFdl'@;
put 'KXwwLEE9QStNYXRoLmltdWwoSWUsVHQpfDAsRT1FK01hdGguaW11bCh6ZSxodCl8MCxtPShtPW0rTWF0aC5pbXVsKHplLHh0KXwwKStNYXRoLmltdWwoRGUsaHQpfDAsQT1BK01hdGguaW11bChEZSx4dCl8MCxFPUUrTWF0aC5pbXVsKHhlLHJuKXwwLG09KG09bStNYXRoLmltdWwoeGUsenQp'@;
put 'fDApK01hdGguaW11bCh2ZSxybil8MCxBPUErTWF0aC5pbXVsKHZlLHp0KXwwLEU9RStNYXRoLmltdWwoVWUsY24pfDAsbT0obT1tK01hdGguaW11bChVZSxmbil8MCkrTWF0aC5pbXVsKEplLGNuKXwwLEE9QStNYXRoLmltdWwoSmUsZm4pfDA7dmFyIERhPShqKyhFPUUrTWF0aC5pbXVsKHRl'@;
put 'LFh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwodGUsZW4pfDApK01hdGguaW11bChzZSxYdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSxlbil8MCkrKG0+Pj4xMyl8MCkrKERhPj4+MjYpfDAsRGEmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKEhlLFF0KSxtPShtPU1h'@;
put 'dGguaW11bChIZSxzbikpK01hdGguaW11bCh1dCxRdCl8MCxBPU1hdGguaW11bCh1dCxzbiksRT1FK01hdGguaW11bChpdCxobil8MCxtPShtPW0rTWF0aC5pbXVsKGl0LGZ0KXwwKStNYXRoLmltdWwoJGUsaG4pfDAsQT1BK01hdGguaW11bCgkZSxmdCl8MCxFPUUrTWF0aC5pbXVsKHl0LFd0'@;
put 'KXwwLG09KG09bStNYXRoLmltdWwoeXQsQXQpfDApK01hdGguaW11bChNdCxXdCl8MCxBPUErTWF0aC5pbXVsKE10LEF0KXwwLEU9RStNYXRoLmltdWwobnQsc3QpfDAsbT0obT1tK01hdGguaW11bChudCxVdCl8MCkrTWF0aC5pbXVsKFFlLHN0KXwwLEE9QStNYXRoLmltdWwoUWUsVXQpfDAs'@;
put 'RT1FK01hdGguaW11bChrZSxXZSl8MCxtPShtPW0rTWF0aC5pbXVsKGtlLFR0KXwwKStNYXRoLmltdWwoQWUsV2UpfDAsQT1BK01hdGguaW11bChBZSxUdCl8MCxFPUUrTWF0aC5pbXVsKE9lLGh0KXwwLG09KG09bStNYXRoLmltdWwoT2UseHQpfDApK01hdGguaW11bChJZSxodCl8MCxBPUEr'@;
put 'TWF0aC5pbXVsKEllLHh0KXwwLEU9RStNYXRoLmltdWwoemUscm4pfDAsbT0obT1tK01hdGguaW11bCh6ZSx6dCl8MCkrTWF0aC5pbXVsKERlLHJuKXwwLEE9QStNYXRoLmltdWwoRGUsenQpfDAsRT1FK01hdGguaW11bCh4ZSxjbil8MCxtPShtPW0rTWF0aC5pbXVsKHhlLGZuKXwwKStNYXRo'@;
put 'LmltdWwodmUsY24pfDAsQT1BK01hdGguaW11bCh2ZSxmbil8MDt2YXIgTHI9KGorKEU9RStNYXRoLmltdWwoVWUsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChVZSxlbil8MCkrTWF0aC5pbXVsKEplLFh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKEplLGVuKXww'@;
put 'KSsobT4+PjEzKXwwKSsoTHI+Pj4yNil8MCxMciY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSGUsaG4pLG09KG09TWF0aC5pbXVsKEhlLGZ0KSkrTWF0aC5pbXVsKHV0LGhuKXwwLEE9TWF0aC5pbXVsKHV0LGZ0KSxFPUUrTWF0aC5pbXVsKGl0LFd0KXwwLG09KG09bStNYXRoLmltdWwoaXQsQXQp'@;
put 'fDApK01hdGguaW11bCgkZSxXdCl8MCxBPUErTWF0aC5pbXVsKCRlLEF0KXwwLEU9RStNYXRoLmltdWwoeXQsc3QpfDAsbT0obT1tK01hdGguaW11bCh5dCxVdCl8MCkrTWF0aC5pbXVsKE10LHN0KXwwLEE9QStNYXRoLmltdWwoTXQsVXQpfDAsRT1FK01hdGguaW11bChudCxXZSl8MCxtPSht'@;
put 'PW0rTWF0aC5pbXVsKG50LFR0KXwwKStNYXRoLmltdWwoUWUsV2UpfDAsQT1BK01hdGguaW11bChRZSxUdCl8MCxFPUUrTWF0aC5pbXVsKGtlLGh0KXwwLG09KG09bStNYXRoLmltdWwoa2UseHQpfDApK01hdGguaW11bChBZSxodCl8MCxBPUErTWF0aC5pbXVsKEFlLHh0KXwwLEU9RStNYXRo'@;
put 'LmltdWwoT2Uscm4pfDAsbT0obT1tK01hdGguaW11bChPZSx6dCl8MCkrTWF0aC5pbXVsKEllLHJuKXwwLEE9QStNYXRoLmltdWwoSWUsenQpfDAsRT1FK01hdGguaW11bCh6ZSxjbil8MCxtPShtPW0rTWF0aC5pbXVsKHplLGZuKXwwKStNYXRoLmltdWwoRGUsY24pfDAsQT1BK01hdGguaW11'@;
put 'bChEZSxmbil8MDt2YXIgV2k9KGorKEU9RStNYXRoLmltdWwoeGUsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh4ZSxlbil8MCkrTWF0aC5pbXVsKHZlLFh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHZlLGVuKXwwKSsobT4+PjEzKXwwKSsoV2k+Pj4yNil8MCxX'@;
put 'aSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSGUsV3QpLG09KG09TWF0aC5pbXVsKEhlLEF0KSkrTWF0aC5pbXVsKHV0LFd0KXwwLEE9TWF0aC5pbXVsKHV0LEF0KSxFPUUrTWF0aC5pbXVsKGl0LHN0KXwwLG09KG09bStNYXRoLmltdWwoaXQsVXQpfDApK01hdGguaW11bCgkZSxzdCl8MCxBPUEr'@;
put 'TWF0aC5pbXVsKCRlLFV0KXwwLEU9RStNYXRoLmltdWwoeXQsV2UpfDAsbT0obT1tK01hdGguaW11bCh5dCxUdCl8MCkrTWF0aC5pbXVsKE10LFdlKXwwLEE9QStNYXRoLmltdWwoTXQsVHQpfDAsRT1FK01hdGguaW11bChudCxodCl8MCxtPShtPW0rTWF0aC5pbXVsKG50LHh0KXwwKStNYXRo'@;
put 'LmltdWwoUWUsaHQpfDAsQT1BK01hdGguaW11bChRZSx4dCl8MCxFPUUrTWF0aC5pbXVsKGtlLHJuKXwwLG09KG09bStNYXRoLmltdWwoa2UsenQpfDApK01hdGguaW11bChBZSxybil8MCxBPUErTWF0aC5pbXVsKEFlLHp0KXwwLEU9RStNYXRoLmltdWwoT2UsY24pfDAsbT0obT1tK01hdGgu'@;
put 'aW11bChPZSxmbil8MCkrTWF0aC5pbXVsKEllLGNuKXwwLEE9QStNYXRoLmltdWwoSWUsZm4pfDA7dmFyIHBhPShqKyhFPUUrTWF0aC5pbXVsKHplLFh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwoemUsZW4pfDApK01hdGguaW11bChEZSxYdCl8MCkpPDwxMyl8MDtqPSgoQT1B'@;
put 'K01hdGguaW11bChEZSxlbil8MCkrKG0+Pj4xMyl8MCkrKHBhPj4+MjYpfDAscGEmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKEhlLHN0KSxtPShtPU1hdGguaW11bChIZSxVdCkpK01hdGguaW11bCh1dCxzdCl8MCxBPU1hdGguaW11bCh1dCxVdCksRT1FK01hdGguaW11bChpdCxXZSl8MCxtPSht'@;
put 'PW0rTWF0aC5pbXVsKGl0LFR0KXwwKStNYXRoLmltdWwoJGUsV2UpfDAsQT1BK01hdGguaW11bCgkZSxUdCl8MCxFPUUrTWF0aC5pbXVsKHl0LGh0KXwwLG09KG09bStNYXRoLmltdWwoeXQseHQpfDApK01hdGguaW11bChNdCxodCl8MCxBPUErTWF0aC5pbXVsKE10LHh0KXwwLEU9RStNYXRo'@;
put 'LmltdWwobnQscm4pfDAsbT0obT1tK01hdGguaW11bChudCx6dCl8MCkrTWF0aC5pbXVsKFFlLHJuKXwwLEE9QStNYXRoLmltdWwoUWUsenQpfDAsRT1FK01hdGguaW11bChrZSxjbil8MCxtPShtPW0rTWF0aC5pbXVsKGtlLGZuKXwwKStNYXRoLmltdWwoQWUsY24pfDAsQT1BK01hdGguaW11'@;
put 'bChBZSxmbil8MDt2YXIgUW49KGorKEU9RStNYXRoLmltdWwoT2UsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChPZSxlbil8MCkrTWF0aC5pbXVsKEllLFh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKEllLGVuKXwwKSsobT4+PjEzKXwwKSsoUW4+Pj4yNil8MCxR'@;
put 'biY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSGUsV2UpLG09KG09TWF0aC5pbXVsKEhlLFR0KSkrTWF0aC5pbXVsKHV0LFdlKXwwLEE9TWF0aC5pbXVsKHV0LFR0KSxFPUUrTWF0aC5pbXVsKGl0LGh0KXwwLG09KG09bStNYXRoLmltdWwoaXQseHQpfDApK01hdGguaW11bCgkZSxodCl8MCxBPUEr'@;
put 'TWF0aC5pbXVsKCRlLHh0KXwwLEU9RStNYXRoLmltdWwoeXQscm4pfDAsbT0obT1tK01hdGguaW11bCh5dCx6dCl8MCkrTWF0aC5pbXVsKE10LHJuKXwwLEE9QStNYXRoLmltdWwoTXQsenQpfDAsRT1FK01hdGguaW11bChudCxjbil8MCxtPShtPW0rTWF0aC5pbXVsKG50LGZuKXwwKStNYXRo'@;
put 'LmltdWwoUWUsY24pfDAsQT1BK01hdGguaW11bChRZSxmbil8MDt2YXIgbGE9KGorKEU9RStNYXRoLmltdWwoa2UsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChrZSxlbil8MCkrTWF0aC5pbXVsKEFlLFh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKEFlLGVuKXww'@;
put 'KSsobT4+PjEzKXwwKSsobGE+Pj4yNil8MCxsYSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSGUsaHQpLG09KG09TWF0aC5pbXVsKEhlLHh0KSkrTWF0aC5pbXVsKHV0LGh0KXwwLEE9TWF0aC5pbXVsKHV0LHh0KSxFPUUrTWF0aC5pbXVsKGl0LHJuKXwwLG09KG09bStNYXRoLmltdWwoaXQsenQp'@;
put 'fDApK01hdGguaW11bCgkZSxybil8MCxBPUErTWF0aC5pbXVsKCRlLHp0KXwwLEU9RStNYXRoLmltdWwoeXQsY24pfDAsbT0obT1tK01hdGguaW11bCh5dCxmbil8MCkrTWF0aC5pbXVsKE10LGNuKXwwLEE9QStNYXRoLmltdWwoTXQsZm4pfDA7dmFyIHlhPShqKyhFPUUrTWF0aC5pbXVsKG50'@;
put 'LFh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwobnQsZW4pfDApK01hdGguaW11bChRZSxYdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChRZSxlbil8MCkrKG0+Pj4xMyl8MCkrKHlhPj4+MjYpfDAseWEmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKEhlLHJuKSxtPShtPU1h'@;
put 'dGguaW11bChIZSx6dCkpK01hdGguaW11bCh1dCxybil8MCxBPU1hdGguaW11bCh1dCx6dCksRT1FK01hdGguaW11bChpdCxjbil8MCxtPShtPW0rTWF0aC5pbXVsKGl0LGZuKXwwKStNYXRoLmltdWwoJGUsY24pfDAsQT1BK01hdGguaW11bCgkZSxmbil8MDt2YXIgTGE9KGorKEU9RStNYXRo'@;
put 'LmltdWwoeXQsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh5dCxlbil8MCkrTWF0aC5pbXVsKE10LFh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKE10LGVuKXwwKSsobT4+PjEzKXwwKSsoTGE+Pj4yNil8MCxMYSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSGUsY24p'@;
put 'LG09KG09TWF0aC5pbXVsKEhlLGZuKSkrTWF0aC5pbXVsKHV0LGNuKXwwLEE9TWF0aC5pbXVsKHV0LGZuKTt2YXIgRmE9KGorKEU9RStNYXRoLmltdWwoaXQsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChpdCxlbil8MCkrTWF0aC5pbXVsKCRlLFh0KXwwKSk8PDEzKXwwO2o9'@;
put 'KChBPUErTWF0aC5pbXVsKCRlLGVuKXwwKSsobT4+PjEzKXwwKSsoRmE+Pj4yNil8MCxGYSY9NjcxMDg4NjM7dmFyIHRpPShqKyhFPU1hdGguaW11bChIZSxYdCkpfDApKygoODE5MSYobT0obT1NYXRoLmltdWwoSGUsZW4pKStNYXRoLmltdWwodXQsWHQpfDApKTw8MTMpfDA7cmV0dXJuIGo9'@;
put 'KChBPU1hdGguaW11bCh1dCxlbikpKyhtPj4+MTMpfDApKyh0aT4+PjI2KXwwLHRpJj02NzEwODg2MyxIWzBdPXVhLEhbMV09RWksSFsyXT12cixIWzNdPVduLEhbNF09JGksSFs1XT1laSxIWzZdPVFyLEhbN109VmksSFs4XT1OaSxIWzldPURhLEhbMTBdPUxyLEhbMTFdPVdpLEhbMTJdPXBh'@;
put 'LEhbMTNdPVFuLEhbMTRdPWxhLEhbMTVdPXlhLEhbMTZdPUxhLEhbMTddPUZhLEhbMThdPXRpLDAhPT1qJiYoSFsxOV09aix4Lmxlbmd0aCsrKSx4fTtmdW5jdGlvbiBlZShWLHAsYil7cmV0dXJuKG5ldyBKKS5tdWxwKFYscCxiKX1mdW5jdGlvbiBKKFYscCl7dGhpcy54PVYsdGhpcy55PXB9'@;
put 'TWF0aC5pbXVsfHwoWT1XKSx3LnByb3RvdHlwZS5tdWxUbz1mdW5jdGlvbihwLGIpe3ZhciB4LEM9dGhpcy5sZW5ndGgrcC5sZW5ndGg7cmV0dXJuIHg9MTA9PT10aGlzLmxlbmd0aCYmMTA9PT1wLmxlbmd0aD9ZKHRoaXMscCxiKTpDPDYzP1codGhpcyxwLGIpOkM8MTAyND9mdW5jdGlvbiBx'@;
put 'KFYscCxiKXtiLm5lZ2F0aXZlPXAubmVnYXRpdmVeVi5uZWdhdGl2ZSxiLmxlbmd0aD1WLmxlbmd0aCtwLmxlbmd0aDtmb3IodmFyIHg9MCxDPTAsVD0wO1Q8Yi5sZW5ndGgtMTtUKyspe3ZhciBIPUM7Qz0wO2Zvcih2YXIgaj02NzEwODg2MyZ4LEU9TWF0aC5taW4oVCxwLmxlbmd0aC0xKSxt'@;
put 'PU1hdGgubWF4KDAsVC1WLmxlbmd0aCsxKTttPD1FO20rKyl7dmFyIHNlPSgwfFYud29yZHNbVC1tXSkqKDB8cC53b3Jkc1ttXSksd2U9NjcxMDg4NjMmc2U7aj02NzEwODg2MyYod2U9d2UranwwKSxDKz0oSD0oSD1IKyhzZS82NzEwODg2NHwwKXwwKSsod2U+Pj4yNil8MCk+Pj4yNixIJj02'@;
put 'NzEwODg2M31iLndvcmRzW1RdPWoseD1ILEg9Q31yZXR1cm4gMCE9PXg/Yi53b3Jkc1tUXT14OmIubGVuZ3RoLS0sYi5zdHJpcCgpfSh0aGlzLHAsYik6ZWUodGhpcyxwLGIpLHh9LEoucHJvdG90eXBlLm1ha2VSQlQ9ZnVuY3Rpb24ocCl7Zm9yKHZhciBiPW5ldyBBcnJheShwKSx4PXcucHJv'@;
put 'dG90eXBlLl9jb3VudEJpdHMocCktMSxDPTA7QzxwO0MrKyliW0NdPXRoaXMucmV2QmluKEMseCxwKTtyZXR1cm4gYn0sSi5wcm90b3R5cGUucmV2QmluPWZ1bmN0aW9uKHAsYix4KXtpZigwPT09cHx8cD09PXgtMSlyZXR1cm4gcDtmb3IodmFyIEM9MCxUPTA7VDxiO1QrKylDfD0oMSZwKTw8'@;
put 'Yi1ULTEscD4+PTE7cmV0dXJuIEN9LEoucHJvdG90eXBlLnBlcm11dGU9ZnVuY3Rpb24ocCxiLHgsQyxULEgpe2Zvcih2YXIgaj0wO2o8SDtqKyspQ1tqXT1iW3Bbal1dLFRbal09eFtwW2pdXX0sSi5wcm90b3R5cGUudHJhbnNmb3JtPWZ1bmN0aW9uKHAsYix4LEMsVCxIKXt0aGlzLnBlcm11'@;
put 'dGUoSCxwLGIseCxDLFQpO2Zvcih2YXIgaj0xO2o8VDtqPDw9MSlmb3IodmFyIEU9ajw8MSxtPU1hdGguY29zKDIqTWF0aC5QSS9FKSxBPU1hdGguc2luKDIqTWF0aC5QSS9FKSxhZT0wO2FlPFQ7YWUrPUUpZm9yKHZhciB0ZT1tLHNlPUEsd2U9MDt3ZTxqO3dlKyspe3ZhciBVZT14W2FlK3dl'@;
put 'XSxKZT1DW2FlK3dlXSxvdD14W2FlK3dlK2pdLHhlPUNbYWUrd2Ural0sdmU9dGUqb3Qtc2UqeGU7eGU9dGUqeGUrc2Uqb3QseFthZSt3ZV09VWUrKG90PXZlKSxDW2FlK3dlXT1KZSt4ZSx4W2FlK3dlK2pdPVVlLW90LENbYWUrd2Ural09SmUteGUsd2UhPT1FJiYodmU9bSp0ZS1BKnNlLHNl'@;
put 'PW0qc2UrQSp0ZSx0ZT12ZSl9fSxKLnByb3RvdHlwZS5ndWVzc0xlbjEzYj1mdW5jdGlvbihwLGIpe3ZhciB4PTF8TWF0aC5tYXgoYixwKSxDPTEmeCxUPTA7Zm9yKHg9eC8yfDA7eDt4Pj4+PTEpVCsrO3JldHVybiAxPDxUKzErQ30sSi5wcm90b3R5cGUuY29uanVnYXRlPWZ1bmN0aW9uKHAs'@;
put 'Yix4KXtpZighKHg8PTEpKWZvcih2YXIgQz0wO0M8eC8yO0MrKyl7dmFyIFQ9cFtDXTtwW0NdPXBbeC1DLTFdLHBbeC1DLTFdPVQsVD1iW0NdLGJbQ109LWJbeC1DLTFdLGJbeC1DLTFdPS1UfX0sSi5wcm90b3R5cGUubm9ybWFsaXplMTNiPWZ1bmN0aW9uKHAsYil7Zm9yKHZhciB4PTAsQz0w'@;
put 'O0M8Yi8yO0MrKyl7dmFyIFQ9ODE5MipNYXRoLnJvdW5kKHBbMipDKzFdL2IpK01hdGgucm91bmQocFsyKkNdL2IpK3g7cFtDXT02NzEwODg2MyZULHg9VDw2NzEwODg2ND8wOlQvNjcxMDg4NjR8MH1yZXR1cm4gcH0sSi5wcm90b3R5cGUuY29udmVydDEzYj1mdW5jdGlvbihwLGIseCxDKXtm'@;
put 'b3IodmFyIFQ9MCxIPTA7SDxiO0grKyl4WzIqSF09ODE5MSYoVCs9MHxwW0hdKSx4WzIqSCsxXT04MTkxJihUPj4+PTEzKSxUPj4+PTEzO2ZvcihIPTIqYjtIPEM7KytIKXhbSF09MDtnKDA9PT1UKSxnKCEoLTgxOTImVCkpfSxKLnByb3RvdHlwZS5zdHViPWZ1bmN0aW9uKHApe2Zvcih2YXIg'@;
put 'Yj1uZXcgQXJyYXkocCkseD0wO3g8cDt4KyspYlt4XT0wO3JldHVybiBifSxKLnByb3RvdHlwZS5tdWxwPWZ1bmN0aW9uKHAsYix4KXt2YXIgQz0yKnRoaXMuZ3Vlc3NMZW4xM2IocC5sZW5ndGgsYi5sZW5ndGgpLFQ9dGhpcy5tYWtlUkJUKEMpLEg9dGhpcy5zdHViKEMpLGo9bmV3IEFycmF5'@;
put 'KEMpLEU9bmV3IEFycmF5KEMpLG09bmV3IEFycmF5KEMpLEE9bmV3IEFycmF5KEMpLGFlPW5ldyBBcnJheShDKSx0ZT1uZXcgQXJyYXkoQyksc2U9eC53b3JkcztzZS5sZW5ndGg9Qyx0aGlzLmNvbnZlcnQxM2IocC53b3JkcyxwLmxlbmd0aCxqLEMpLHRoaXMuY29udmVydDEzYihiLndvcmRz'@;
put 'LGIubGVuZ3RoLEEsQyksdGhpcy50cmFuc2Zvcm0oaixILEUsbSxDLFQpLHRoaXMudHJhbnNmb3JtKEEsSCxhZSx0ZSxDLFQpO2Zvcih2YXIgd2U9MDt3ZTxDO3dlKyspe3ZhciBVZT1FW3dlXSphZVt3ZV0tbVt3ZV0qdGVbd2VdO21bd2VdPUVbd2VdKnRlW3dlXSttW3dlXSphZVt3ZV0sRVt3'@;
put 'ZV09VWV9cmV0dXJuIHRoaXMuY29uanVnYXRlKEUsbSxDKSx0aGlzLnRyYW5zZm9ybShFLG0sc2UsSCxDLFQpLHRoaXMuY29uanVnYXRlKHNlLEgsQyksdGhpcy5ub3JtYWxpemUxM2Ioc2UsQykseC5uZWdhdGl2ZT1wLm5lZ2F0aXZlXmIubmVnYXRpdmUseC5sZW5ndGg9cC5sZW5ndGgrYi5s'@;
put 'ZW5ndGgseC5zdHJpcCgpfSx3LnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24ocCl7dmFyIGI9bmV3IHcobnVsbCk7cmV0dXJuIGIud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoK3AubGVuZ3RoKSx0aGlzLm11bFRvKHAsYil9LHcucHJvdG90eXBlLm11bGY9ZnVuY3Rpb24ocCl7dmFyIGI9bmV3'@;
put 'IHcobnVsbCk7cmV0dXJuIGIud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoK3AubGVuZ3RoKSxlZSh0aGlzLHAsYil9LHcucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5tdWxUbyhwLHRoaXMpfSx3LnByb3RvdHlwZS5pbXVsbj1mdW5jdGlvbihwKXtn'@;
put 'KCJudW1iZXIiPT10eXBlb2YgcCksZyhwPDY3MTA4ODY0KTtmb3IodmFyIGI9MCx4PTA7eDx0aGlzLmxlbmd0aDt4Kyspe3ZhciBDPSgwfHRoaXMud29yZHNbeF0pKnAsVD0oNjcxMDg4NjMmQykrKDY3MTA4ODYzJmIpO2I+Pj0yNixiKz1DLzY3MTA4ODY0fDAsYis9VD4+PjI2LHRoaXMud29y'@;
put 'ZHNbeF09NjcxMDg4NjMmVH1yZXR1cm4gMCE9PWImJih0aGlzLndvcmRzW3hdPWIsdGhpcy5sZW5ndGgrKyksdGhpc30sdy5wcm90b3R5cGUubXVsbj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmltdWxuKHApfSx3LnByb3RvdHlwZS5zcXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhp'@;
put 'cy5tdWwodGhpcyl9LHcucHJvdG90eXBlLmlzcXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbXVsKHRoaXMuY2xvbmUoKSl9LHcucHJvdG90eXBlLnBvdz1mdW5jdGlvbihwKXt2YXIgYj1mdW5jdGlvbiBVKFYpe2Zvcih2YXIgcD1uZXcgQXJyYXkoVi5iaXRMZW5ndGgoKSksYj0wO2I8cC5s'@;
put 'ZW5ndGg7YisrKXt2YXIgQz1iJTI2O3BbYl09KFYud29yZHNbYi8yNnwwXSYxPDxDKT4+PkN9cmV0dXJuIHB9KHApO2lmKDA9PT1iLmxlbmd0aClyZXR1cm4gbmV3IHcoMSk7Zm9yKHZhciB4PXRoaXMsQz0wO0M8Yi5sZW5ndGgmJjA9PT1iW0NdO0MrKyx4PXguc3FyKCkpO2lmKCsrQzxiLmxl'@;
put 'bmd0aClmb3IodmFyIFQ9eC5zcXIoKTtDPGIubGVuZ3RoO0MrKyxUPVQuc3FyKCkpMCE9PWJbQ10mJih4PXgubXVsKFQpKTtyZXR1cm4geH0sdy5wcm90b3R5cGUuaXVzaGxuPWZ1bmN0aW9uKHApe2coIm51bWJlciI9PXR5cGVvZiBwJiZwPj0wKTt2YXIgVCxiPXAlMjYseD0ocC1iKS8yNixD'@;
put 'PTY3MTA4ODYzPj4+MjYtYjw8MjYtYjtpZigwIT09Yil7dmFyIEg9MDtmb3IoVD0wO1Q8dGhpcy5sZW5ndGg7VCsrKXt2YXIgaj10aGlzLndvcmRzW1RdJkM7dGhpcy53b3Jkc1tUXT0oMHx0aGlzLndvcmRzW1RdKS1qPDxifEgsSD1qPj4+MjYtYn1IJiYodGhpcy53b3Jkc1tUXT1ILHRoaXMu'@;
put 'bGVuZ3RoKyspfWlmKDAhPT14KXtmb3IoVD10aGlzLmxlbmd0aC0xO1Q+PTA7VC0tKXRoaXMud29yZHNbVCt4XT10aGlzLndvcmRzW1RdO2ZvcihUPTA7VDx4O1QrKyl0aGlzLndvcmRzW1RdPTA7dGhpcy5sZW5ndGgrPXh9cmV0dXJuIHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuaXNobG49'@;
put 'ZnVuY3Rpb24ocCl7cmV0dXJuIGcoMD09PXRoaXMubmVnYXRpdmUpLHRoaXMuaXVzaGxuKHApfSx3LnByb3RvdHlwZS5pdXNocm49ZnVuY3Rpb24ocCxiLHgpe3ZhciBDO2coIm51bWJlciI9PXR5cGVvZiBwJiZwPj0wKSxDPWI/KGItYiUyNikvMjY6MDt2YXIgVD1wJTI2LEg9TWF0aC5taW4o'@;
put 'KHAtVCkvMjYsdGhpcy5sZW5ndGgpLGo9NjcxMDg4NjNeNjcxMDg4NjM+Pj5UPDxULEU9eDtpZihDLT1ILEM9TWF0aC5tYXgoMCxDKSxFKXtmb3IodmFyIG09MDttPEg7bSsrKUUud29yZHNbbV09dGhpcy53b3Jkc1ttXTtFLmxlbmd0aD1IfWlmKDAhPT1IKWlmKHRoaXMubGVuZ3RoPkgpZm9y'@;
put 'KHRoaXMubGVuZ3RoLT1ILG09MDttPHRoaXMubGVuZ3RoO20rKyl0aGlzLndvcmRzW21dPXRoaXMud29yZHNbbStIXTtlbHNlIHRoaXMud29yZHNbMF09MCx0aGlzLmxlbmd0aD0xO3ZhciBBPTA7Zm9yKG09dGhpcy5sZW5ndGgtMTttPj0wJiYoMCE9PUF8fG0+PUMpO20tLSl7dmFyIGFlPTB8'@;
put 'dGhpcy53b3Jkc1ttXTt0aGlzLndvcmRzW21dPUE8PDI2LVR8YWU+Pj5ULEE9YWUman1yZXR1cm4gRSYmMCE9PUEmJihFLndvcmRzW0UubGVuZ3RoKytdPUEpLDA9PT10aGlzLmxlbmd0aCYmKHRoaXMud29yZHNbMF09MCx0aGlzLmxlbmd0aD0xKSx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBl'@;
put 'LmlzaHJuPWZ1bmN0aW9uKHAsYix4KXtyZXR1cm4gZygwPT09dGhpcy5uZWdhdGl2ZSksdGhpcy5pdXNocm4ocCxiLHgpfSx3LnByb3RvdHlwZS5zaGxuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaXNobG4ocCl9LHcucHJvdG90eXBlLnVzaGxuPWZ1bmN0aW9uKHApe3JldHVy'@;
put 'biB0aGlzLmNsb25lKCkuaXVzaGxuKHApfSx3LnByb3RvdHlwZS5zaHJuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaXNocm4ocCl9LHcucHJvdG90eXBlLnVzaHJuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaXVzaHJuKHApfSx3LnByb3RvdHlwZS50ZXN0bj1m'@;
put 'dW5jdGlvbihwKXtnKCJudW1iZXIiPT10eXBlb2YgcCYmcD49MCk7dmFyIGI9cCUyNix4PShwLWIpLzI2O3JldHVybiEodGhpcy5sZW5ndGg8PXh8fCEodGhpcy53b3Jkc1t4XSYxPDxiKSl9LHcucHJvdG90eXBlLmltYXNrbj1mdW5jdGlvbihwKXtnKCJudW1iZXIiPT10eXBlb2YgcCYmcD49'@;
put 'MCk7dmFyIGI9cCUyNix4PShwLWIpLzI2O3JldHVybiBnKDA9PT10aGlzLm5lZ2F0aXZlLCJpbWFza24gd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlIG51bWJlcnMiKSx0aGlzLmxlbmd0aDw9eD90aGlzOigwIT09YiYmeCsrLHRoaXMubGVuZ3RoPU1hdGgubWluKHgsdGhpcy5sZW5ndGgpLDAh'@;
put 'PT1iJiYodGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXSY9NjcxMDg4NjNeNjcxMDg4NjM+Pj5iPDxiKSx0aGlzLnN0cmlwKCkpfSx3LnByb3RvdHlwZS5tYXNrbj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmltYXNrbihwKX0sdy5wcm90b3R5cGUuaWFkZG49ZnVuY3Rpb24ocCl7'@;
put 'cmV0dXJuIGcoIm51bWJlciI9PXR5cGVvZiBwKSxnKHA8NjcxMDg4NjQpLHA8MD90aGlzLmlzdWJuKC1wKTowIT09dGhpcy5uZWdhdGl2ZT8xPT09dGhpcy5sZW5ndGgmJigwfHRoaXMud29yZHNbMF0pPHA/KHRoaXMud29yZHNbMF09cC0oMHx0aGlzLndvcmRzWzBdKSx0aGlzLm5lZ2F0aXZl'@;
put 'PTAsdGhpcyk6KHRoaXMubmVnYXRpdmU9MCx0aGlzLmlzdWJuKHApLHRoaXMubmVnYXRpdmU9MSx0aGlzKTp0aGlzLl9pYWRkbihwKX0sdy5wcm90b3R5cGUuX2lhZGRuPWZ1bmN0aW9uKHApe3RoaXMud29yZHNbMF0rPXA7Zm9yKHZhciBiPTA7Yjx0aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1ti'@;
put 'XT49NjcxMDg4NjQ7YisrKXRoaXMud29yZHNbYl0tPTY3MTA4ODY0LGI9PT10aGlzLmxlbmd0aC0xP3RoaXMud29yZHNbYisxXT0xOnRoaXMud29yZHNbYisxXSsrO3JldHVybiB0aGlzLmxlbmd0aD1NYXRoLm1heCh0aGlzLmxlbmd0aCxiKzEpLHRoaXN9LHcucHJvdG90eXBlLmlzdWJuPWZ1'@;
put 'bmN0aW9uKHApe2lmKGcoIm51bWJlciI9PXR5cGVvZiBwKSxnKHA8NjcxMDg4NjQpLHA8MClyZXR1cm4gdGhpcy5pYWRkbigtcCk7aWYoMCE9PXRoaXMubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmlhZGRuKHApLHRoaXMubmVnYXRpdmU9MSx0aGlzO2lmKHRoaXMud29y'@;
put 'ZHNbMF0tPXAsMT09PXRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzWzBdPDApdGhpcy53b3Jkc1swXT0tdGhpcy53b3Jkc1swXSx0aGlzLm5lZ2F0aXZlPTE7ZWxzZSBmb3IodmFyIGI9MDtiPHRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzW2JdPDA7YisrKXRoaXMud29yZHNbYl0rPTY3MTA4ODY0LHRo'@;
put 'aXMud29yZHNbYisxXS09MTtyZXR1cm4gdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5hZGRuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaWFkZG4ocCl9LHcucHJvdG90eXBlLnN1Ym49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc3VibihwKX0sdy5wcm90b3R5'@;
put 'cGUuaWFicz1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpc30sdy5wcm90b3R5cGUuYWJzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pYWJzKCl9LHcucHJvdG90eXBlLl9pc2hsbnN1Ym11bD1mdW5jdGlvbihwLGIseCl7dmFyIFQ7dGhpcy5fZXhwYW5kKHAu'@;
put 'bGVuZ3RoK3gpO3ZhciBILGo9MDtmb3IoVD0wO1Q8cC5sZW5ndGg7VCsrKXtIPSgwfHRoaXMud29yZHNbVCt4XSkrajt2YXIgRT0oMHxwLndvcmRzW1RdKSpiO2o9KChILT02NzEwODg2MyZFKT4+MjYpLShFLzY3MTA4ODY0fDApLHRoaXMud29yZHNbVCt4XT02NzEwODg2MyZIfWZvcig7VDx0'@;
put 'aGlzLmxlbmd0aC14O1QrKylqPShIPSgwfHRoaXMud29yZHNbVCt4XSkraik+PjI2LHRoaXMud29yZHNbVCt4XT02NzEwODg2MyZIO2lmKDA9PT1qKXJldHVybiB0aGlzLnN0cmlwKCk7Zm9yKGcoLTE9PT1qKSxqPTAsVD0wO1Q8dGhpcy5sZW5ndGg7VCsrKWo9KEg9LSgwfHRoaXMud29yZHNb'@;
put 'VF0pK2opPj4yNix0aGlzLndvcmRzW1RdPTY3MTA4ODYzJkg7cmV0dXJuIHRoaXMubmVnYXRpdmU9MSx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLl93b3JkRGl2PWZ1bmN0aW9uKHAsYil7dmFyIHgsQz10aGlzLmNsb25lKCksVD1wLEg9MHxULndvcmRzW1QubGVuZ3RoLTFdOzAhPSh4PTI2'@;
put 'LXRoaXMuX2NvdW50Qml0cyhIKSkmJihUPVQudXNobG4oeCksQy5pdXNobG4oeCksSD0wfFQud29yZHNbVC5sZW5ndGgtMV0pO3ZhciBtLEU9Qy5sZW5ndGgtVC5sZW5ndGg7aWYoIm1vZCIhPT1iKXsobT1uZXcgdyhudWxsKSkubGVuZ3RoPUUrMSxtLndvcmRzPW5ldyBBcnJheShtLmxlbmd0'@;
put 'aCk7Zm9yKHZhciBBPTA7QTxtLmxlbmd0aDtBKyspbS53b3Jkc1tBXT0wfXZhciBhZT1DLmNsb25lKCkuX2lzaGxuc3VibXVsKFQsMSxFKTswPT09YWUubmVnYXRpdmUmJihDPWFlLG0mJihtLndvcmRzW0VdPTEpKTtmb3IodmFyIHRlPUUtMTt0ZT49MDt0ZS0tKXt2YXIgc2U9NjcxMDg4NjQq'@;
put 'KDB8Qy53b3Jkc1tULmxlbmd0aCt0ZV0pKygwfEMud29yZHNbVC5sZW5ndGgrdGUtMV0pO2ZvcihzZT1NYXRoLm1pbihzZS9IfDAsNjcxMDg4NjMpLEMuX2lzaGxuc3VibXVsKFQsc2UsdGUpOzAhPT1DLm5lZ2F0aXZlOylzZS0tLEMubmVnYXRpdmU9MCxDLl9pc2hsbnN1Ym11bChULDEsdGUp'@;
put 'LEMuaXNaZXJvKCl8fChDLm5lZ2F0aXZlXj0xKTttJiYobS53b3Jkc1t0ZV09c2UpfXJldHVybiBtJiZtLnN0cmlwKCksQy5zdHJpcCgpLCJkaXYiIT09YiYmMCE9PXgmJkMuaXVzaHJuKHgpLHtkaXY6bXx8bnVsbCxtb2Q6Q319LHcucHJvdG90eXBlLmRpdm1vZD1mdW5jdGlvbihwLGIseCl7'@;
put 'cmV0dXJuIGcoIXAuaXNaZXJvKCkpLHRoaXMuaXNaZXJvKCk/e2RpdjpuZXcgdygwKSxtb2Q6bmV3IHcoMCl9OjAhPT10aGlzLm5lZ2F0aXZlJiYwPT09cC5uZWdhdGl2ZT8oSD10aGlzLm5lZygpLmRpdm1vZChwLGIpLCJtb2QiIT09YiYmKEM9SC5kaXYubmVnKCkpLCJkaXYiIT09YiYmKFQ9'@;
put 'SC5tb2QubmVnKCkseCYmMCE9PVQubmVnYXRpdmUmJlQuaWFkZChwKSkse2RpdjpDLG1vZDpUfSk6MD09PXRoaXMubmVnYXRpdmUmJjAhPT1wLm5lZ2F0aXZlPyhIPXRoaXMuZGl2bW9kKHAubmVnKCksYiksIm1vZCIhPT1iJiYoQz1ILmRpdi5uZWcoKSkse2RpdjpDLG1vZDpILm1vZH0pOnRo'@;
put 'aXMubmVnYXRpdmUmcC5uZWdhdGl2ZT8oSD10aGlzLm5lZygpLmRpdm1vZChwLm5lZygpLGIpLCJkaXYiIT09YiYmKFQ9SC5tb2QubmVnKCkseCYmMCE9PVQubmVnYXRpdmUmJlQuaXN1YihwKSkse2RpdjpILmRpdixtb2Q6VH0pOnAubGVuZ3RoPnRoaXMubGVuZ3RofHx0aGlzLmNtcChwKTww'@;
put 'P3tkaXY6bmV3IHcoMCksbW9kOnRoaXN9OjE9PT1wLmxlbmd0aD8iZGl2Ij09PWI/e2Rpdjp0aGlzLmRpdm4ocC53b3Jkc1swXSksbW9kOm51bGx9OiJtb2QiPT09Yj97ZGl2Om51bGwsbW9kOm5ldyB3KHRoaXMubW9kbihwLndvcmRzWzBdKSl9OntkaXY6dGhpcy5kaXZuKHAud29yZHNbMF0p'@;
put 'LG1vZDpuZXcgdyh0aGlzLm1vZG4ocC53b3Jkc1swXSkpfTp0aGlzLl93b3JkRGl2KHAsYik7dmFyIEMsVCxIfSx3LnByb3RvdHlwZS5kaXY9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuZGl2bW9kKHAsImRpdiIsITEpLmRpdn0sdy5wcm90b3R5cGUubW9kPWZ1bmN0aW9uKHApe3JldHVybiB0'@;
put 'aGlzLmRpdm1vZChwLCJtb2QiLCExKS5tb2R9LHcucHJvdG90eXBlLnVtb2Q9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuZGl2bW9kKHAsIm1vZCIsITApLm1vZH0sdy5wcm90b3R5cGUuZGl2Um91bmQ9ZnVuY3Rpb24ocCl7dmFyIGI9dGhpcy5kaXZtb2QocCk7aWYoYi5tb2QuaXNaZXJvKCkp'@;
put 'cmV0dXJuIGIuZGl2O3ZhciB4PTAhPT1iLmRpdi5uZWdhdGl2ZT9iLm1vZC5pc3ViKHApOmIubW9kLEM9cC51c2hybigxKSxUPXAuYW5kbG4oMSksSD14LmNtcChDKTtyZXR1cm4gSDwwfHwxPT09VCYmMD09PUg/Yi5kaXY6MCE9PWIuZGl2Lm5lZ2F0aXZlP2IuZGl2LmlzdWJuKDEpOmIuZGl2'@;
put 'LmlhZGRuKDEpfSx3LnByb3RvdHlwZS5tb2RuPWZ1bmN0aW9uKHApe2cocDw9NjcxMDg4NjMpO2Zvcih2YXIgYj0oMTw8MjYpJXAseD0wLEM9dGhpcy5sZW5ndGgtMTtDPj0wO0MtLSl4PShiKngrKDB8dGhpcy53b3Jkc1tDXSkpJXA7cmV0dXJuIHh9LHcucHJvdG90eXBlLmlkaXZuPWZ1bmN0'@;
put 'aW9uKHApe2cocDw9NjcxMDg4NjMpO2Zvcih2YXIgYj0wLHg9dGhpcy5sZW5ndGgtMTt4Pj0wO3gtLSl7dmFyIEM9KDB8dGhpcy53b3Jkc1t4XSkrNjcxMDg4NjQqYjt0aGlzLndvcmRzW3hdPUMvcHwwLGI9QyVwfXJldHVybiB0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmRpdm49ZnVuY3Rp'@;
put 'b24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pZGl2bihwKX0sdy5wcm90b3R5cGUuZWdjZD1mdW5jdGlvbihwKXtnKDA9PT1wLm5lZ2F0aXZlKSxnKCFwLmlzWmVybygpKTt2YXIgYj10aGlzLHg9cC5jbG9uZSgpO2I9MCE9PWIubmVnYXRpdmU/Yi51bW9kKHApOmIuY2xvbmUoKTtmb3IodmFy'@;
put 'IEM9bmV3IHcoMSksVD1uZXcgdygwKSxIPW5ldyB3KDApLGo9bmV3IHcoMSksRT0wO2IuaXNFdmVuKCkmJnguaXNFdmVuKCk7KWIuaXVzaHJuKDEpLHguaXVzaHJuKDEpLCsrRTtmb3IodmFyIG09eC5jbG9uZSgpLEE9Yi5jbG9uZSgpOyFiLmlzWmVybygpOyl7Zm9yKHZhciBhZT0wLHRlPTE7'@;
put 'IShiLndvcmRzWzBdJnRlKSYmYWU8MjY7KythZSx0ZTw8PTEpO2lmKGFlPjApZm9yKGIuaXVzaHJuKGFlKTthZS0tID4wOykoQy5pc09kZCgpfHxULmlzT2RkKCkpJiYoQy5pYWRkKG0pLFQuaXN1YihBKSksQy5pdXNocm4oMSksVC5pdXNocm4oMSk7Zm9yKHZhciBzZT0wLHdlPTE7ISh4Lndv'@;
put 'cmRzWzBdJndlKSYmc2U8MjY7KytzZSx3ZTw8PTEpO2lmKHNlPjApZm9yKHguaXVzaHJuKHNlKTtzZS0tID4wOykoSC5pc09kZCgpfHxqLmlzT2RkKCkpJiYoSC5pYWRkKG0pLGouaXN1YihBKSksSC5pdXNocm4oMSksai5pdXNocm4oMSk7Yi5jbXAoeCk+PTA/KGIuaXN1Yih4KSxDLmlzdWIo'@;
put 'SCksVC5pc3ViKGopKTooeC5pc3ViKGIpLEguaXN1YihDKSxqLmlzdWIoVCkpfXJldHVybnthOkgsYjpqLGdjZDp4Lml1c2hsbihFKX19LHcucHJvdG90eXBlLl9pbnZtcD1mdW5jdGlvbihwKXtnKDA9PT1wLm5lZ2F0aXZlKSxnKCFwLmlzWmVybygpKTt2YXIgYWUsYj10aGlzLHg9cC5jbG9u'@;
put 'ZSgpO2I9MCE9PWIubmVnYXRpdmU/Yi51bW9kKHApOmIuY2xvbmUoKTtmb3IodmFyIEM9bmV3IHcoMSksVD1uZXcgdygwKSxIPXguY2xvbmUoKTtiLmNtcG4oMSk+MCYmeC5jbXBuKDEpPjA7KXtmb3IodmFyIGo9MCxFPTE7IShiLndvcmRzWzBdJkUpJiZqPDI2OysraixFPDw9MSk7aWYoaj4w'@;
put 'KWZvcihiLml1c2hybihqKTtqLS0gPjA7KUMuaXNPZGQoKSYmQy5pYWRkKEgpLEMuaXVzaHJuKDEpO2Zvcih2YXIgbT0wLEE9MTshKHgud29yZHNbMF0mQSkmJm08MjY7KyttLEE8PD0xKTtpZihtPjApZm9yKHguaXVzaHJuKG0pO20tLSA+MDspVC5pc09kZCgpJiZULmlhZGQoSCksVC5pdXNo'@;
put 'cm4oMSk7Yi5jbXAoeCk+PTA/KGIuaXN1Yih4KSxDLmlzdWIoVCkpOih4LmlzdWIoYiksVC5pc3ViKEMpKX1yZXR1cm4oYWU9MD09PWIuY21wbigxKT9DOlQpLmNtcG4oMCk8MCYmYWUuaWFkZChwKSxhZX0sdy5wcm90b3R5cGUuZ2NkPWZ1bmN0aW9uKHApe2lmKHRoaXMuaXNaZXJvKCkpcmV0'@;
put 'dXJuIHAuYWJzKCk7aWYocC5pc1plcm8oKSlyZXR1cm4gdGhpcy5hYnMoKTt2YXIgYj10aGlzLmNsb25lKCkseD1wLmNsb25lKCk7Yi5uZWdhdGl2ZT0wLHgubmVnYXRpdmU9MDtmb3IodmFyIEM9MDtiLmlzRXZlbigpJiZ4LmlzRXZlbigpO0MrKyliLml1c2hybigxKSx4Lml1c2hybigxKTtm'@;
put 'b3IoOzspe2Zvcig7Yi5pc0V2ZW4oKTspYi5pdXNocm4oMSk7Zm9yKDt4LmlzRXZlbigpOyl4Lml1c2hybigxKTt2YXIgVD1iLmNtcCh4KTtpZihUPDApe3ZhciBIPWI7Yj14LHg9SH1lbHNlIGlmKDA9PT1UfHwwPT09eC5jbXBuKDEpKWJyZWFrO2IuaXN1Yih4KX1yZXR1cm4geC5pdXNobG4o'@;
put 'Qyl9LHcucHJvdG90eXBlLmludm09ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuZWdjZChwKS5hLnVtb2QocCl9LHcucHJvdG90eXBlLmlzRXZlbj1mdW5jdGlvbigpe3JldHVybiEoMSZ0aGlzLndvcmRzWzBdKX0sdy5wcm90b3R5cGUuaXNPZGQ9ZnVuY3Rpb24oKXtyZXR1cm4hKDEmfnRoaXMu'@;
put 'd29yZHNbMF0pfSx3LnByb3RvdHlwZS5hbmRsbj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy53b3Jkc1swXSZwfSx3LnByb3RvdHlwZS5iaW5jbj1mdW5jdGlvbihwKXtnKCJudW1iZXIiPT10eXBlb2YgcCk7dmFyIGI9cCUyNix4PShwLWIpLzI2LEM9MTw8YjtpZih0aGlzLmxlbmd0aDw9eCly'@;
put 'ZXR1cm4gdGhpcy5fZXhwYW5kKHgrMSksdGhpcy53b3Jkc1t4XXw9Qyx0aGlzO2Zvcih2YXIgVD1DLEg9eDswIT09VCYmSDx0aGlzLmxlbmd0aDtIKyspe3ZhciBqPTB8dGhpcy53b3Jkc1tIXTtUPShqKz1UKT4+PjI2LHRoaXMud29yZHNbSF09aiY9NjcxMDg4NjN9cmV0dXJuIDAhPT1UJiYo'@;
put 'dGhpcy53b3Jkc1tIXT1ULHRoaXMubGVuZ3RoKyspLHRoaXN9LHcucHJvdG90eXBlLmlzWmVybz1mdW5jdGlvbigpe3JldHVybiAxPT09dGhpcy5sZW5ndGgmJjA9PT10aGlzLndvcmRzWzBdfSx3LnByb3RvdHlwZS5jbXBuPWZ1bmN0aW9uKHApe3ZhciB4LGI9cDwwO2lmKDAhPT10aGlzLm5l'@;
put 'Z2F0aXZlJiYhYilyZXR1cm4tMTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmYilyZXR1cm4gMTtpZih0aGlzLnN0cmlwKCksdGhpcy5sZW5ndGg+MSl4PTE7ZWxzZXtiJiYocD0tcCksZyhwPD02NzEwODg2MywiTnVtYmVyIGlzIHRvbyBiaWciKTt2YXIgQz0wfHRoaXMud29yZHNbMF07eD1DPT09'@;
put 'cD8wOkM8cD8tMToxfXJldHVybiAwIT09dGhpcy5uZWdhdGl2ZT8wfC14Onh9LHcucHJvdG90eXBlLmNtcD1mdW5jdGlvbihwKXtpZigwIT09dGhpcy5uZWdhdGl2ZSYmMD09PXAubmVnYXRpdmUpcmV0dXJuLTE7aWYoMD09PXRoaXMubmVnYXRpdmUmJjAhPT1wLm5lZ2F0aXZlKXJldHVybiAx'@;
put 'O3ZhciBiPXRoaXMudWNtcChwKTtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/MHwtYjpifSx3LnByb3RvdHlwZS51Y21wPWZ1bmN0aW9uKHApe2lmKHRoaXMubGVuZ3RoPnAubGVuZ3RoKXJldHVybiAxO2lmKHRoaXMubGVuZ3RoPHAubGVuZ3RoKXJldHVybi0xO2Zvcih2YXIgYj0wLHg9dGhp'@;
put 'cy5sZW5ndGgtMTt4Pj0wO3gtLSl7dmFyIEM9MHx0aGlzLndvcmRzW3hdLFQ9MHxwLndvcmRzW3hdO2lmKEMhPT1UKXtDPFQ/Yj0tMTpDPlQmJihiPTEpO2JyZWFrfX1yZXR1cm4gYn0sdy5wcm90b3R5cGUuZ3RuPWZ1bmN0aW9uKHApe3JldHVybiAxPT09dGhpcy5jbXBuKHApfSx3LnByb3Rv'@;
put 'dHlwZS5ndD1mdW5jdGlvbihwKXtyZXR1cm4gMT09PXRoaXMuY21wKHApfSx3LnByb3RvdHlwZS5ndGVuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNtcG4ocCk+PTB9LHcucHJvdG90eXBlLmd0ZT1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbXAocCk+PTB9LHcucHJvdG90eXBlLmx0bj1m'@;
put 'dW5jdGlvbihwKXtyZXR1cm4tMT09PXRoaXMuY21wbihwKX0sdy5wcm90b3R5cGUubHQ9ZnVuY3Rpb24ocCl7cmV0dXJuLTE9PT10aGlzLmNtcChwKX0sdy5wcm90b3R5cGUubHRlbj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbXBuKHApPD0wfSx3LnByb3RvdHlwZS5sdGU9ZnVuY3Rpb24o'@;
put 'cCl7cmV0dXJuIHRoaXMuY21wKHApPD0wfSx3LnByb3RvdHlwZS5lcW49ZnVuY3Rpb24ocCl7cmV0dXJuIDA9PT10aGlzLmNtcG4ocCl9LHcucHJvdG90eXBlLmVxPWZ1bmN0aW9uKHApe3JldHVybiAwPT09dGhpcy5jbXAocCl9LHcucmVkPWZ1bmN0aW9uKHApe3JldHVybiBuZXcgU2UocCl9'@;
put 'LHcucHJvdG90eXBlLnRvUmVkPWZ1bmN0aW9uKHApe3JldHVybiBnKCF0aGlzLnJlZCwiQWxyZWFkeSBhIG51bWJlciBpbiByZWR1Y3Rpb24gY29udGV4dCIpLGcoMD09PXRoaXMubmVnYXRpdmUsInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIikscC5jb252ZXJ0VG8odGhpcykuX2Zv'@;
put 'cmNlUmVkKHApfSx3LnByb3RvdHlwZS5mcm9tUmVkPWZ1bmN0aW9uKCl7cmV0dXJuIGcodGhpcy5yZWQsImZyb21SZWQgd29ya3Mgb25seSB3aXRoIG51bWJlcnMgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSx0aGlzLnJlZC5jb252ZXJ0RnJvbSh0aGlzKX0sdy5wcm90b3R5cGUuX2ZvcmNlUmVk'@;
put 'PWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLnJlZD1wLHRoaXN9LHcucHJvdG90eXBlLmZvcmNlUmVkPWZ1bmN0aW9uKHApe3JldHVybiBnKCF0aGlzLnJlZCwiQWxyZWFkeSBhIG51bWJlciBpbiByZWR1Y3Rpb24gY29udGV4dCIpLHRoaXMuX2ZvcmNlUmVkKHApfSx3LnByb3RvdHlwZS5yZWRB'@;
put 'ZGQ9ZnVuY3Rpb24ocCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZEFkZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5hZGQodGhpcyxwKX0sdy5wcm90b3R5cGUucmVkSUFkZD1mdW5jdGlvbihwKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkSUFkZCB3b3JrcyBvbmx5IHdp'@;
put 'dGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5pYWRkKHRoaXMscCl9LHcucHJvdG90eXBlLnJlZFN1Yj1mdW5jdGlvbihwKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkU3ViIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLnN1Yih0aGlzLHApfSx3LnByb3RvdHlwZS5yZWRJ'@;
put 'U3ViPWZ1bmN0aW9uKHApe3JldHVybiBnKHRoaXMucmVkLCJyZWRJU3ViIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmlzdWIodGhpcyxwKX0sdy5wcm90b3R5cGUucmVkU2hsPWZ1bmN0aW9uKHApe3JldHVybiBnKHRoaXMucmVkLCJyZWRTaGwgd29ya3Mgb25seSB3'@;
put 'aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuc2hsKHRoaXMscCl9LHcucHJvdG90eXBlLnJlZE11bD1mdW5jdGlvbihwKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkTXVsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkyKHRoaXMscCksdGhpcy5yZWQubXVs'@;
put 'KHRoaXMscCl9LHcucHJvdG90eXBlLnJlZElNdWw9ZnVuY3Rpb24ocCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZE11bCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5Mih0aGlzLHApLHRoaXMucmVkLmltdWwodGhpcyxwKX0sdy5wcm90b3R5cGUucmVkU3Fy'@;
put 'PWZ1bmN0aW9uKCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZFNxciB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5zcXIodGhpcyl9LHcucHJvdG90eXBlLnJlZElTcXI9ZnVuY3Rpb24oKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVk'@;
put 'SVNxciB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5pc3FyKHRoaXMpfSx3LnByb3RvdHlwZS5yZWRTcXJ0PWZ1bmN0aW9uKCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZFNxcnQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJz'@;
put 'IiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuc3FydCh0aGlzKX0sdy5wcm90b3R5cGUucmVkSW52bT1mdW5jdGlvbigpe3JldHVybiBnKHRoaXMucmVkLCJyZWRJbnZtIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMu'@;
put 'cmVkLmludm0odGhpcyl9LHcucHJvdG90eXBlLnJlZE5lZz1mdW5jdGlvbigpe3JldHVybiBnKHRoaXMucmVkLCJyZWROZWcgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQubmVnKHRoaXMpfSx3LnByb3RvdHlwZS5yZWRQb3c9'@;
put 'ZnVuY3Rpb24ocCl7cmV0dXJuIGcodGhpcy5yZWQmJiFwLnJlZCwicmVkUG93KG5vcm1hbE51bSkiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5wb3codGhpcyxwKX07dmFyIG5lPXtrMjU2Om51bGwscDIyNDpudWxsLHAxOTI6bnVsbCxwMjU1MTk6bnVsbH07ZnVuY3Rpb24g'@;
put 'aWUoVixwKXt0aGlzLm5hbWU9Vix0aGlzLnA9bmV3IHcocCwxNiksdGhpcy5uPXRoaXMucC5iaXRMZW5ndGgoKSx0aGlzLms9bmV3IHcoMSkuaXVzaGxuKHRoaXMubikuaXN1Yih0aGlzLnApLHRoaXMudG1wPXRoaXMuX3RtcCgpfWZ1bmN0aW9uIGxlKCl7aWUuY2FsbCh0aGlzLCJrMjU2Iiwi'@;
put 'ZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZjMmYiKX1mdW5jdGlvbiBtZSgpe2llLmNhbGwodGhpcywicDIyNCIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIDAwMDAwMDAwIDAwMDAwMDAwIDAw'@;
put 'MDAwMDAxIil9ZnVuY3Rpb24gX2UoKXtpZS5jYWxsKHRoaXMsInAxOTIiLCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmZmZiBmZmZmZmZmZiIpfWZ1bmN0aW9uIFRlKCl7aWUuY2FsbCh0aGlzLCIyNTUxOSIsIjdmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZm'@;
put 'ZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZWQiKX1mdW5jdGlvbiBTZShWKXtpZigic3RyaW5nIj09dHlwZW9mIFYpe3ZhciBwPXcuX3ByaW1lKFYpO3RoaXMubT1wLnAsdGhpcy5wcmltZT1wfWVsc2UgZyhWLmd0bigxKSwibW9kdWx1cyBtdXN0IGJlIGdyZWF0ZXIgdGhh'@;
put 'biAxIiksdGhpcy5tPVYsdGhpcy5wcmltZT1udWxsfWZ1bmN0aW9uIGplKFYpe1NlLmNhbGwodGhpcyxWKSx0aGlzLnNoaWZ0PXRoaXMubS5iaXRMZW5ndGgoKSx0aGlzLnNoaWZ0JTI2IT0wJiYodGhpcy5zaGlmdCs9MjYtdGhpcy5zaGlmdCUyNiksdGhpcy5yPW5ldyB3KDEpLml1c2hsbih0'@;
put 'aGlzLnNoaWZ0KSx0aGlzLnIyPXRoaXMuaW1vZCh0aGlzLnIuc3FyKCkpLHRoaXMucmludj10aGlzLnIuX2ludm1wKHRoaXMubSksdGhpcy5taW52PXRoaXMucmludi5tdWwodGhpcy5yKS5pc3VibigxKS5kaXYodGhpcy5tKSx0aGlzLm1pbnY9dGhpcy5taW52LnVtb2QodGhpcy5yKSx0aGlz'@;
put 'Lm1pbnY9dGhpcy5yLnN1Yih0aGlzLm1pbnYpfWllLnByb3RvdHlwZS5fdG1wPWZ1bmN0aW9uKCl7dmFyIHA9bmV3IHcobnVsbCk7cmV0dXJuIHAud29yZHM9bmV3IEFycmF5KE1hdGguY2VpbCh0aGlzLm4vMTMpKSxwfSxpZS5wcm90b3R5cGUuaXJlZHVjZT1mdW5jdGlvbihwKXt2YXIgeCxi'@;
put 'PXA7ZG97dGhpcy5zcGxpdChiLHRoaXMudG1wKSx4PShiPShiPXRoaXMuaW11bEsoYikpLmlhZGQodGhpcy50bXApKS5iaXRMZW5ndGgoKX13aGlsZSh4PnRoaXMubik7dmFyIEM9eDx0aGlzLm4/LTE6Yi51Y21wKHRoaXMucCk7cmV0dXJuIDA9PT1DPyhiLndvcmRzWzBdPTAsYi5sZW5ndGg9'@;
put 'MSk6Qz4wP2IuaXN1Yih0aGlzLnApOnZvaWQgMCE9PWIuc3RyaXA/Yi5zdHJpcCgpOmIuX3N0cmlwKCksYn0saWUucHJvdG90eXBlLnNwbGl0PWZ1bmN0aW9uKHAsYil7cC5pdXNocm4odGhpcy5uLDAsYil9LGllLnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbihwKXtyZXR1cm4gcC5pbXVsKHRo'@;
put 'aXMuayl9LEIobGUsaWUpLGxlLnByb3RvdHlwZS5zcGxpdD1mdW5jdGlvbihwLGIpe2Zvcih2YXIgeD00MTk0MzAzLEM9TWF0aC5taW4ocC5sZW5ndGgsOSksVD0wO1Q8QztUKyspYi53b3Jkc1tUXT1wLndvcmRzW1RdO2lmKGIubGVuZ3RoPUMscC5sZW5ndGg8PTkpcmV0dXJuIHAud29yZHNb'@;
put 'MF09MCx2b2lkKHAubGVuZ3RoPTEpO3ZhciBIPXAud29yZHNbOV07Zm9yKGIud29yZHNbYi5sZW5ndGgrK109SCZ4LFQ9MTA7VDxwLmxlbmd0aDtUKyspe3ZhciBqPTB8cC53b3Jkc1tUXTtwLndvcmRzW1QtMTBdPShqJngpPDw0fEg+Pj4yMixIPWp9cC53b3Jkc1tULTEwXT1IPj4+PTIyLHAu'@;
put 'bGVuZ3RoLT0wPT09SCYmcC5sZW5ndGg+MTA/MTA6OX0sbGUucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKHApe3Aud29yZHNbcC5sZW5ndGhdPTAscC53b3Jkc1twLmxlbmd0aCsxXT0wLHAubGVuZ3RoKz0yO2Zvcih2YXIgYj0wLHg9MDt4PHAubGVuZ3RoO3grKyl7dmFyIEM9MHxwLndvcmRz'@;
put 'W3hdO3Aud29yZHNbeF09NjcxMDg4NjMmKGIrPTk3NypDKSxiPTY0KkMrKGIvNjcxMDg4NjR8MCl9cmV0dXJuIDA9PT1wLndvcmRzW3AubGVuZ3RoLTFdJiYocC5sZW5ndGgtLSwwPT09cC53b3Jkc1twLmxlbmd0aC0xXSYmcC5sZW5ndGgtLSkscH0sQihtZSxpZSksQihfZSxpZSksQihUZSxp'@;
put 'ZSksVGUucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKHApe2Zvcih2YXIgYj0wLHg9MDt4PHAubGVuZ3RoO3grKyl7dmFyIEM9MTkqKDB8cC53b3Jkc1t4XSkrYixUPTY3MTA4ODYzJkM7Qz4+Pj0yNixwLndvcmRzW3hdPVQsYj1DfXJldHVybiAwIT09YiYmKHAud29yZHNbcC5sZW5ndGgrK109'@;
put 'YikscH0sdy5fcHJpbWU9ZnVuY3Rpb24ocCl7aWYobmVbcF0pcmV0dXJuIG5lW3BdO3ZhciBiO2lmKCJrMjU2Ij09PXApYj1uZXcgbGU7ZWxzZSBpZigicDIyNCI9PT1wKWI9bmV3IG1lO2Vsc2UgaWYoInAxOTIiPT09cCliPW5ldyBfZTtlbHNle2lmKCJwMjU1MTkiIT09cCl0aHJvdyBuZXcg'@;
put 'RXJyb3IoIlVua25vd24gcHJpbWUgIitwKTtiPW5ldyBUZX1yZXR1cm4gbmVbcF09YixifSxTZS5wcm90b3R5cGUuX3ZlcmlmeTE9ZnVuY3Rpb24ocCl7ZygwPT09cC5uZWdhdGl2ZSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSxnKHAucmVkLCJyZWQgd29ya3Mgb25seSB3aXRo'@;
put 'IHJlZCBudW1iZXJzIil9LFNlLnByb3RvdHlwZS5fdmVyaWZ5Mj1mdW5jdGlvbihwLGIpe2coIShwLm5lZ2F0aXZlfGIubmVnYXRpdmUpLCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIpLGcocC5yZWQmJnAucmVkPT09Yi5yZWQsInJlZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJl'@;
put 'cnMiKX0sU2UucHJvdG90eXBlLmltb2Q9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMucHJpbWU/dGhpcy5wcmltZS5pcmVkdWNlKHApLl9mb3JjZVJlZCh0aGlzKTpwLnVtb2QodGhpcy5tKS5fZm9yY2VSZWQodGhpcyl9LFNlLnByb3RvdHlwZS5uZWc9ZnVuY3Rpb24ocCl7cmV0dXJuIHAuaXNa'@;
put 'ZXJvKCk/cC5jbG9uZSgpOnRoaXMubS5zdWIocCkuX2ZvcmNlUmVkKHRoaXMpfSxTZS5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKHAsYil7dGhpcy5fdmVyaWZ5MihwLGIpO3ZhciB4PXAuYWRkKGIpO3JldHVybiB4LmNtcCh0aGlzLm0pPj0wJiZ4LmlzdWIodGhpcy5tKSx4Ll9mb3JjZVJlZCh0'@;
put 'aGlzKX0sU2UucHJvdG90eXBlLmlhZGQ9ZnVuY3Rpb24ocCxiKXt0aGlzLl92ZXJpZnkyKHAsYik7dmFyIHg9cC5pYWRkKGIpO3JldHVybiB4LmNtcCh0aGlzLm0pPj0wJiZ4LmlzdWIodGhpcy5tKSx4fSxTZS5wcm90b3R5cGUuc3ViPWZ1bmN0aW9uKHAsYil7dGhpcy5fdmVyaWZ5MihwLGIp'@;
put 'O3ZhciB4PXAuc3ViKGIpO3JldHVybiB4LmNtcG4oMCk8MCYmeC5pYWRkKHRoaXMubSkseC5fZm9yY2VSZWQodGhpcyl9LFNlLnByb3RvdHlwZS5pc3ViPWZ1bmN0aW9uKHAsYil7dGhpcy5fdmVyaWZ5MihwLGIpO3ZhciB4PXAuaXN1YihiKTtyZXR1cm4geC5jbXBuKDApPDAmJnguaWFkZCh0'@;
put 'aGlzLm0pLHh9LFNlLnByb3RvdHlwZS5zaGw9ZnVuY3Rpb24ocCxiKXtyZXR1cm4gdGhpcy5fdmVyaWZ5MShwKSx0aGlzLmltb2QocC51c2hsbihiKSl9LFNlLnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKHAsYil7cmV0dXJuIHRoaXMuX3ZlcmlmeTIocCxiKSx0aGlzLmltb2QocC5pbXVsKGIp'@;
put 'KX0sU2UucHJvdG90eXBlLm11bD1mdW5jdGlvbihwLGIpe3JldHVybiB0aGlzLl92ZXJpZnkyKHAsYiksdGhpcy5pbW9kKHAubXVsKGIpKX0sU2UucHJvdG90eXBlLmlzcXI9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuaW11bChwLHAuY2xvbmUoKSl9LFNlLnByb3RvdHlwZS5zcXI9ZnVuY3Rp'@;
put 'b24ocCl7cmV0dXJuIHRoaXMubXVsKHAscCl9LFNlLnByb3RvdHlwZS5zcXJ0PWZ1bmN0aW9uKHApe2lmKHAuaXNaZXJvKCkpcmV0dXJuIHAuY2xvbmUoKTt2YXIgYj10aGlzLm0uYW5kbG4oMyk7aWYoZyhiJTI9PTEpLDM9PT1iKXt2YXIgeD10aGlzLm0uYWRkKG5ldyB3KDEpKS5pdXNocm4o'@;
put 'Mik7cmV0dXJuIHRoaXMucG93KHAseCl9Zm9yKHZhciBDPXRoaXMubS5zdWJuKDEpLFQ9MDshQy5pc1plcm8oKSYmMD09PUMuYW5kbG4oMSk7KVQrKyxDLml1c2hybigxKTtnKCFDLmlzWmVybygpKTt2YXIgSD1uZXcgdygxKS50b1JlZCh0aGlzKSxqPUgucmVkTmVnKCksRT10aGlzLm0uc3Vi'@;
put 'bigxKS5pdXNocm4oMSksbT10aGlzLm0uYml0TGVuZ3RoKCk7Zm9yKG09bmV3IHcoMiptKm0pLnRvUmVkKHRoaXMpOzAhPT10aGlzLnBvdyhtLEUpLmNtcChqKTspbS5yZWRJQWRkKGopO2Zvcih2YXIgQT10aGlzLnBvdyhtLEMpLGFlPXRoaXMucG93KHAsQy5hZGRuKDEpLml1c2hybigxKSks'@;
put 'dGU9dGhpcy5wb3cocCxDKSxzZT1UOzAhPT10ZS5jbXAoSCk7KXtmb3IodmFyIHdlPXRlLFVlPTA7MCE9PXdlLmNtcChIKTtVZSsrKXdlPXdlLnJlZFNxcigpO2coVWU8c2UpO3ZhciBKZT10aGlzLnBvdyhBLG5ldyB3KDEpLml1c2hsbihzZS1VZS0xKSk7YWU9YWUucmVkTXVsKEplKSxBPUpl'@;
put 'LnJlZFNxcigpLHRlPXRlLnJlZE11bChBKSxzZT1VZX1yZXR1cm4gYWV9LFNlLnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKHApe3ZhciBiPXAuX2ludm1wKHRoaXMubSk7cmV0dXJuIDAhPT1iLm5lZ2F0aXZlPyhiLm5lZ2F0aXZlPTAsdGhpcy5pbW9kKGIpLnJlZE5lZygpKTp0aGlzLmltb2Qo'@;
put 'Yil9LFNlLnByb3RvdHlwZS5wb3c9ZnVuY3Rpb24ocCxiKXtpZihiLmlzWmVybygpKXJldHVybiBuZXcgdygxKS50b1JlZCh0aGlzKTtpZigwPT09Yi5jbXBuKDEpKXJldHVybiBwLmNsb25lKCk7dmFyIEM9bmV3IEFycmF5KDE2KTtDWzBdPW5ldyB3KDEpLnRvUmVkKHRoaXMpLENbMV09cDtm'@;
put 'b3IodmFyIFQ9MjtUPEMubGVuZ3RoO1QrKylDW1RdPXRoaXMubXVsKENbVC0xXSxwKTt2YXIgSD1DWzBdLGo9MCxFPTAsbT1iLmJpdExlbmd0aCgpJTI2O2ZvcigwPT09bSYmKG09MjYpLFQ9Yi5sZW5ndGgtMTtUPj0wO1QtLSl7Zm9yKHZhciBBPWIud29yZHNbVF0sYWU9bS0xO2FlPj0wO2Fl'@;
put 'LS0pe3ZhciB0ZT1BPj5hZSYxO0ghPT1DWzBdJiYoSD10aGlzLnNxcihIKSksMCE9PXRlfHwwIT09aj8oajw8PTEsanw9dGUsKDQ9PSsrRXx8MD09PVQmJjA9PT1hZSkmJihIPXRoaXMubXVsKEgsQ1tqXSksRT0wLGo9MCkpOkU9MH1tPTI2fXJldHVybiBIfSxTZS5wcm90b3R5cGUuY29udmVy'@;
put 'dFRvPWZ1bmN0aW9uKHApe3ZhciBiPXAudW1vZCh0aGlzLm0pO3JldHVybiBiPT09cD9iLmNsb25lKCk6Yn0sU2UucHJvdG90eXBlLmNvbnZlcnRGcm9tPWZ1bmN0aW9uKHApe3ZhciBiPXAuY2xvbmUoKTtyZXR1cm4gYi5yZWQ9bnVsbCxifSx3Lm1vbnQ9ZnVuY3Rpb24ocCl7cmV0dXJuIG5l'@;
put 'dyBqZShwKX0sQihqZSxTZSksamUucHJvdG90eXBlLmNvbnZlcnRUbz1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5pbW9kKHAudXNobG4odGhpcy5zaGlmdCkpfSxqZS5wcm90b3R5cGUuY29udmVydEZyb209ZnVuY3Rpb24ocCl7dmFyIGI9dGhpcy5pbW9kKHAubXVsKHRoaXMucmludikpO3Jl'@;
put 'dHVybiBiLnJlZD1udWxsLGJ9LGplLnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKHAsYil7aWYocC5pc1plcm8oKXx8Yi5pc1plcm8oKSlyZXR1cm4gcC53b3Jkc1swXT0wLHAubGVuZ3RoPTEscDt2YXIgeD1wLmltdWwoYiksQz14Lm1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm1pbnYpLmlt'@;
put 'YXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5tKSxUPXguaXN1YihDKS5pdXNocm4odGhpcy5zaGlmdCksSD1UO3JldHVybiBULmNtcCh0aGlzLm0pPj0wP0g9VC5pc3ViKHRoaXMubSk6VC5jbXBuKDApPDAmJihIPVQuaWFkZCh0aGlzLm0pKSxILl9mb3JjZVJlZCh0aGlzKX0samUucHJvdG90'@;
put 'eXBlLm11bD1mdW5jdGlvbihwLGIpe2lmKHAuaXNaZXJvKCl8fGIuaXNaZXJvKCkpcmV0dXJuIG5ldyB3KDApLl9mb3JjZVJlZCh0aGlzKTt2YXIgeD1wLm11bChiKSxDPXgubWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubWludikuaW1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm0pLFQ9'@;
put 'eC5pc3ViKEMpLml1c2hybih0aGlzLnNoaWZ0KSxIPVQ7cmV0dXJuIFQuY21wKHRoaXMubSk+PTA/SD1ULmlzdWIodGhpcy5tKTpULmNtcG4oMCk8MCYmKEg9VC5pYWRkKHRoaXMubSkpLEguX2ZvcmNlUmVkKHRoaXMpfSxqZS5wcm90b3R5cGUuaW52bT1mdW5jdGlvbihwKXtyZXR1cm4gdGhp'@;
put 'cy5pbW9kKHAuX2ludm1wKHRoaXMubSkubXVsKHRoaXMucjIpKS5fZm9yY2VSZWQodGhpcyl9fSh1ZT15Lm5tZCh1ZSksdGhpcyl9LDkyODI6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg0MTU1KSxfPXkoNTEwOCk7ZnVuY3Rpb24gZyhWZSl7cmV0dXJuKGc9ImZ1bmN0aW9uIj09'@;
put 'dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oa2Upe3JldHVybiB0eXBlb2Yga2V9OmZ1bmN0aW9uKGtlKXtyZXR1cm4ga2UmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmtlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZrZSE9PVN5bWJv'@;
put 'bC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGtlfSkoVmUpfWZ1bmN0aW9uIEIoVmUsa2Upe2Zvcih2YXIgQWU9MDtBZTxrZS5sZW5ndGg7QWUrKyl7dmFyIF90PWtlW0FlXTtfdC5lbnVtZXJhYmxlPV90LmVudW1lcmFibGV8fCExLF90LmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gX3Qm'@;
put 'JihfdC53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KFZlLFAoX3Qua2V5KSxfdCl9fWZ1bmN0aW9uIHcoVmUsa2UsQWUpe3JldHVybiBrZSYmQihWZS5wcm90b3R5cGUsa2UpLEFlJiZCKFZlLEFlKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoVmUsInByb3RvdHlwZSIse3dyaXRh'@;
put 'YmxlOiExfSksVmV9ZnVuY3Rpb24gUChWZSl7dmFyIGtlPWZ1bmN0aW9uIEYoVmUsa2Upe2lmKCJvYmplY3QiIT09ZyhWZSl8fG51bGw9PT1WZSlyZXR1cm4gVmU7dmFyIEFlPVZlW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09QWUpe3ZhciBfdD1BZS5jYWxsKFZlLGtlfHwiZGVm'@;
put 'YXVsdCIpO2lmKCJvYmplY3QiIT09ZyhfdCkpcmV0dXJuIF90O3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09a2U/U3RyaW5nOk51bWJlcikoVmUpfShWZSwic3RyaW5nIik7cmV0dXJu'@;
put 'InN5bWJvbCI9PT1nKGtlKT9rZTpTdHJpbmcoa2UpfXZhciBqZSxWLE49eSgyMTM2KS5jb2RlcyxMPU4uRVJSX0FNQklHVU9VU19BUkdVTUVOVCxLPU4uRVJSX0lOVkFMSURfQVJHX1RZUEUsVT1OLkVSUl9JTlZBTElEX0FSR19WQUxVRSxXPU4uRVJSX0lOVkFMSURfUkVUVVJOX1ZBTFVFLFk9'@;
put 'Ti5FUlJfTUlTU0lOR19BUkdTLHE9eSg1OTYxKSxKPXkoOTUzOSkuaW5zcGVjdCxuZT15KDk1MzkpLnR5cGVzLGllPW5lLmlzUHJvbWlzZSxsZT1uZS5pc1JlZ0V4cCxtZT15KDgxNjIpKCksX2U9eSg1NjI0KSgpLFRlPXkoMTkyNCkoIlJlZ0V4cC5wcm90b3R5cGUudGVzdCIpO2Z1bmN0aW9u'@;
put 'IEMoKXt2YXIgVmU9eSg5MTU4KTtqZT1WZS5pc0RlZXBFcXVhbCxWPVZlLmlzRGVlcFN0cmljdEVxdWFsfXZhciBFPSExLG09dWUuZXhwb3J0cz13ZSxBPXt9O2Z1bmN0aW9uIGFlKFZlKXt0aHJvdyBWZS5tZXNzYWdlIGluc3RhbmNlb2YgRXJyb3I/VmUubWVzc2FnZTpuZXcgcShWZSl9ZnVu'@;
put 'Y3Rpb24gc2UoVmUsa2UsQWUsX3Qpe2lmKCFBZSl7dmFyIG50PSExO2lmKDA9PT1rZSludD0hMCxfdD0iTm8gdmFsdWUgYXJndW1lbnQgcGFzc2VkIHRvIGBhc3NlcnQub2soKWAiO2Vsc2UgaWYoX3QgaW5zdGFuY2VvZiBFcnJvcil0aHJvdyBfdDt2YXIgUWU9bmV3IHEoe2FjdHVhbDpBZSxl'@;
put 'eHBlY3RlZDohMCxtZXNzYWdlOl90LG9wZXJhdG9yOiI9PSIsc3RhY2tTdGFydEZuOlZlfSk7dGhyb3cgUWUuZ2VuZXJhdGVkTWVzc2FnZT1udCxRZX19ZnVuY3Rpb24gd2UoKXtmb3IodmFyIFZlPWFyZ3VtZW50cy5sZW5ndGgsa2U9bmV3IEFycmF5KFZlKSxBZT0wO0FlPFZlO0FlKyspa2Vb'@;
put 'QWVdPWFyZ3VtZW50c1tBZV07c2UuYXBwbHkodm9pZCAwLFt3ZSxrZS5sZW5ndGhdLmNvbmNhdChrZSkpfW0uZmFpbD1mdW5jdGlvbiB0ZShWZSxrZSxBZSxfdCxudCl7dmFyIHVuLFFlPWFyZ3VtZW50cy5sZW5ndGg7aWYoMD09PVFlP3VuPSJGYWlsZWQiOjE9PT1RZT8oQWU9VmUsVmU9dm9p'@;
put 'ZCAwKTooITE9PT1FJiYoRT0hMCwoSS5lbWl0V2FybmluZz9JLmVtaXRXYXJuaW5nOl8ud2Fybi5iaW5kKF8pKSgiYXNzZXJ0LmZhaWwoKSB3aXRoIG1vcmUgdGhhbiBvbmUgYXJndW1lbnQgaXMgZGVwcmVjYXRlZC4gUGxlYXNlIHVzZSBhc3NlcnQuc3RyaWN0RXF1YWwoKSBpbnN0ZWFkIG9y'@;
put 'IG9ubHkgcGFzcyBhIG1lc3NhZ2UuIiwiRGVwcmVjYXRpb25XYXJuaW5nIiwiREVQMDA5NCIpKSwyPT09UWUmJihfdD0iIT0iKSksQWUgaW5zdGFuY2VvZiBFcnJvcil0aHJvdyBBZTt2YXIgTXQ9e2FjdHVhbDpWZSxleHBlY3RlZDprZSxvcGVyYXRvcjp2b2lkIDA9PT1fdD8iZmFpbCI6X3Qs'@;
put 'c3RhY2tTdGFydEZuOm50fHx0ZX07dm9pZCAwIT09QWUmJihNdC5tZXNzYWdlPUFlKTt2YXIgRHQ9bmV3IHEoTXQpO3Rocm93IHVuJiYoRHQubWVzc2FnZT11bixEdC5nZW5lcmF0ZWRNZXNzYWdlPSEwKSxEdH0sbS5Bc3NlcnRpb25FcnJvcj1xLG0ub2s9d2UsbS5lcXVhbD1mdW5jdGlvbiBW'@;
put 'ZShrZSxBZSxfdCl7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXRocm93IG5ldyBZKCJhY3R1YWwiLCJleHBlY3RlZCIpO2tlIT1BZSYmYWUoe2FjdHVhbDprZSxleHBlY3RlZDpBZSxtZXNzYWdlOl90LG9wZXJhdG9yOiI9PSIsc3RhY2tTdGFydEZuOlZlfSl9LG0ubm90RXF1YWw9ZnVuY3Rpb24g'@;
put 'VmUoa2UsQWUsX3Qpe2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil0aHJvdyBuZXcgWSgiYWN0dWFsIiwiZXhwZWN0ZWQiKTtrZT09QWUmJmFlKHthY3R1YWw6a2UsZXhwZWN0ZWQ6QWUsbWVzc2FnZTpfdCxvcGVyYXRvcjoiIT0iLHN0YWNrU3RhcnRGbjpWZX0pfSxtLmRlZXBFcXVhbD1mdW5jdGlv'@;
put 'biBWZShrZSxBZSxfdCl7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXRocm93IG5ldyBZKCJhY3R1YWwiLCJleHBlY3RlZCIpO3ZvaWQgMD09PWplJiZDKCksamUoa2UsQWUpfHxhZSh7YWN0dWFsOmtlLGV4cGVjdGVkOkFlLG1lc3NhZ2U6X3Qsb3BlcmF0b3I6ImRlZXBFcXVhbCIsc3RhY2tTdGFy'@;
put 'dEZuOlZlfSl9LG0ubm90RGVlcEVxdWFsPWZ1bmN0aW9uIFZlKGtlLEFlLF90KXtpZihhcmd1bWVudHMubGVuZ3RoPDIpdGhyb3cgbmV3IFkoImFjdHVhbCIsImV4cGVjdGVkIik7dm9pZCAwPT09amUmJkMoKSxqZShrZSxBZSkmJmFlKHthY3R1YWw6a2UsZXhwZWN0ZWQ6QWUsbWVzc2FnZTpf'@;
put 'dCxvcGVyYXRvcjoibm90RGVlcEVxdWFsIixzdGFja1N0YXJ0Rm46VmV9KX0sbS5kZWVwU3RyaWN0RXF1YWw9ZnVuY3Rpb24gVmUoa2UsQWUsX3Qpe2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil0aHJvdyBuZXcgWSgiYWN0dWFsIiwiZXhwZWN0ZWQiKTt2b2lkIDA9PT1qZSYmQygpLFYoa2UsQWUp'@;
put 'fHxhZSh7YWN0dWFsOmtlLGV4cGVjdGVkOkFlLG1lc3NhZ2U6X3Qsb3BlcmF0b3I6ImRlZXBTdHJpY3RFcXVhbCIsc3RhY2tTdGFydEZuOlZlfSl9LG0ubm90RGVlcFN0cmljdEVxdWFsPWZ1bmN0aW9uIFVlKFZlLGtlLEFlKXtpZihhcmd1bWVudHMubGVuZ3RoPDIpdGhyb3cgbmV3IFkoImFj'@;
put 'dHVhbCIsImV4cGVjdGVkIik7dm9pZCAwPT09amUmJkMoKSxWKFZlLGtlKSYmYWUoe2FjdHVhbDpWZSxleHBlY3RlZDprZSxtZXNzYWdlOkFlLG9wZXJhdG9yOiJub3REZWVwU3RyaWN0RXF1YWwiLHN0YWNrU3RhcnRGbjpVZX0pfSxtLnN0cmljdEVxdWFsPWZ1bmN0aW9uIFZlKGtlLEFlLF90'@;
put 'KXtpZihhcmd1bWVudHMubGVuZ3RoPDIpdGhyb3cgbmV3IFkoImFjdHVhbCIsImV4cGVjdGVkIik7X2Uoa2UsQWUpfHxhZSh7YWN0dWFsOmtlLGV4cGVjdGVkOkFlLG1lc3NhZ2U6X3Qsb3BlcmF0b3I6InN0cmljdEVxdWFsIixzdGFja1N0YXJ0Rm46VmV9KX0sbS5ub3RTdHJpY3RFcXVhbD1m'@;
put 'dW5jdGlvbiBWZShrZSxBZSxfdCl7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXRocm93IG5ldyBZKCJhY3R1YWwiLCJleHBlY3RlZCIpO19lKGtlLEFlKSYmYWUoe2FjdHVhbDprZSxleHBlY3RlZDpBZSxtZXNzYWdlOl90LG9wZXJhdG9yOiJub3RTdHJpY3RFcXVhbCIsc3RhY2tTdGFydEZuOlZl'@;
put 'fSl9O3ZhciBKZT13KGZ1bmN0aW9uIFZlKGtlLEFlLF90KXt2YXIgbnQ9dGhpczsoZnVuY3Rpb24gTyhWZSxrZSl7aWYoIShWZSBpbnN0YW5jZW9mIGtlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0pKHRoaXMsVmUpLEFlLmZvckVh'@;
put 'Y2goZnVuY3Rpb24oUWUpe1FlIGluIGtlJiYobnRbUWVdPXZvaWQgMCE9PV90JiYic3RyaW5nIj09dHlwZW9mIF90W1FlXSYmbGUoa2VbUWVdKSYmVGUoa2VbUWVdLF90W1FlXSk/X3RbUWVdOmtlW1FlXSl9KX0pO2Z1bmN0aW9uIHhlKFZlLGtlLEFlLF90KXtpZigiZnVuY3Rpb24iIT10eXBl'@;
put 'b2Yga2Upe2lmKGxlKGtlKSlyZXR1cm4gVGUoa2UsVmUpO2lmKDI9PT1hcmd1bWVudHMubGVuZ3RoKXRocm93IG5ldyBLKCJleHBlY3RlZCIsWyJGdW5jdGlvbiIsIlJlZ0V4cCJdLGtlKTtpZigib2JqZWN0IiE9PWcoVmUpfHxudWxsPT09VmUpe3ZhciBudD1uZXcgcSh7YWN0dWFsOlZlLGV4'@;
put 'cGVjdGVkOmtlLG1lc3NhZ2U6QWUsb3BlcmF0b3I6ImRlZXBTdHJpY3RFcXVhbCIsc3RhY2tTdGFydEZuOl90fSk7dGhyb3cgbnQub3BlcmF0b3I9X3QubmFtZSxudH12YXIgUWU9T2JqZWN0LmtleXMoa2UpO2lmKGtlIGluc3RhbmNlb2YgRXJyb3IpUWUucHVzaCgibmFtZSIsIm1lc3NhZ2Ui'@;
put 'KTtlbHNlIGlmKDA9PT1RZS5sZW5ndGgpdGhyb3cgbmV3IFUoImVycm9yIixrZSwibWF5IG5vdCBiZSBhbiBlbXB0eSBvYmplY3QiKTtyZXR1cm4gdm9pZCAwPT09amUmJkMoKSxRZS5mb3JFYWNoKGZ1bmN0aW9uKHVuKXsic3RyaW5nIj09dHlwZW9mIFZlW3VuXSYmbGUoa2VbdW5dKSYmVGUo'@;
put 'a2VbdW5dLFZlW3VuXSl8fGZ1bmN0aW9uIG90KFZlLGtlLEFlLF90LG50LFFlKXtpZighKEFlIGluIFZlKXx8IVYoVmVbQWVdLGtlW0FlXSkpe2lmKCFfdCl7dmFyIHVuPW5ldyBKZShWZSxudCkseXQ9bmV3IEplKGtlLG50LFZlKSxNdD1uZXcgcSh7YWN0dWFsOnVuLGV4cGVjdGVkOnl0LG9w'@;
put 'ZXJhdG9yOiJkZWVwU3RyaWN0RXF1YWwiLHN0YWNrU3RhcnRGbjpRZX0pO3Rocm93IE10LmFjdHVhbD1WZSxNdC5leHBlY3RlZD1rZSxNdC5vcGVyYXRvcj1RZS5uYW1lLE10fWFlKHthY3R1YWw6VmUsZXhwZWN0ZWQ6a2UsbWVzc2FnZTpfdCxvcGVyYXRvcjpRZS5uYW1lLHN0YWNrU3RhcnRG'@;
put 'bjpRZX0pfX0oVmUsa2UsdW4sQWUsUWUsX3QpfSksITB9cmV0dXJuIHZvaWQgMCE9PWtlLnByb3RvdHlwZSYmVmUgaW5zdGFuY2VvZiBrZXx8IUVycm9yLmlzUHJvdG90eXBlT2Yoa2UpJiYhMD09PWtlLmNhbGwoe30sVmUpfWZ1bmN0aW9uIHZlKFZlKXtpZigiZnVuY3Rpb24iIT10eXBlb2Yg'@;
put 'VmUpdGhyb3cgbmV3IEsoImZuIiwiRnVuY3Rpb24iLFZlKTt0cnl7VmUoKX1jYXRjaChrZSl7cmV0dXJuIGtlfXJldHVybiBBfWZ1bmN0aW9uIFhlKFZlKXtyZXR1cm4gaWUoVmUpfHxudWxsIT09VmUmJiJvYmplY3QiPT09ZyhWZSkmJiJmdW5jdGlvbiI9PXR5cGVvZiBWZS50aGVuJiYiZnVu'@;
put 'Y3Rpb24iPT10eXBlb2YgVmUuY2F0Y2h9ZnVuY3Rpb24gemUoVmUpe3JldHVybiBQcm9taXNlLnJlc29sdmUoKS50aGVuKGZ1bmN0aW9uKCl7dmFyIGtlO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBWZSl7aWYoIVhlKGtlPVZlKCkpKXRocm93IG5ldyBXKCJpbnN0YW5jZSBvZiBQcm9taXNlIiwi'@;
put 'cHJvbWlzZUZuIixrZSl9ZWxzZXtpZighWGUoVmUpKXRocm93IG5ldyBLKCJwcm9taXNlRm4iLFsiRnVuY3Rpb24iLCJQcm9taXNlIl0sVmUpO2tlPVZlfXJldHVybiBQcm9taXNlLnJlc29sdmUoKS50aGVuKGZ1bmN0aW9uKCl7cmV0dXJuIGtlfSkudGhlbihmdW5jdGlvbigpe3JldHVybiBB'@;
put 'fSkuY2F0Y2goZnVuY3Rpb24oQWUpe3JldHVybiBBZX0pfSl9ZnVuY3Rpb24gRGUoVmUsa2UsQWUsX3Qpe2lmKCJzdHJpbmciPT10eXBlb2YgQWUpe2lmKDQ9PT1hcmd1bWVudHMubGVuZ3RoKXRocm93IG5ldyBLKCJlcnJvciIsWyJPYmplY3QiLCJFcnJvciIsIkZ1bmN0aW9uIiwiUmVnRXhw'@;
put 'Il0sQWUpO2lmKCJvYmplY3QiPT09ZyhrZSkmJm51bGwhPT1rZSl7aWYoa2UubWVzc2FnZT09PUFlKXRocm93IG5ldyBMKCJlcnJvci9tZXNzYWdlIiwnVGhlIGVycm9yIG1lc3NhZ2UgIicuY29uY2F0KGtlLm1lc3NhZ2UsJyIgaXMgaWRlbnRpY2FsIHRvIHRoZSBtZXNzYWdlLicpKX1lbHNl'@;
put 'IGlmKGtlPT09QWUpdGhyb3cgbmV3IEwoImVycm9yL21lc3NhZ2UiLCdUaGUgZXJyb3IgIicuY29uY2F0KGtlLCciIGlzIGlkZW50aWNhbCB0byB0aGUgbWVzc2FnZS4nKSk7X3Q9QWUsQWU9dm9pZCAwfWVsc2UgaWYobnVsbCE9QWUmJiJvYmplY3QiIT09ZyhBZSkmJiJmdW5jdGlvbiIhPXR5'@;
put 'cGVvZiBBZSl0aHJvdyBuZXcgSygiZXJyb3IiLFsiT2JqZWN0IiwiRXJyb3IiLCJGdW5jdGlvbiIsIlJlZ0V4cCJdLEFlKTtpZihrZT09PUEpe3ZhciBudD0iIjtBZSYmQWUubmFtZSYmKG50Kz0iICgiLmNvbmNhdChBZS5uYW1lLCIpIikpLG50Kz1fdD8iOiAiLmNvbmNhdChfdCk6Ii4iLGFl'@;
put 'KHthY3R1YWw6dm9pZCAwLGV4cGVjdGVkOkFlLG9wZXJhdG9yOlZlLm5hbWUsbWVzc2FnZToiTWlzc2luZyBleHBlY3RlZCAiLmNvbmNhdCgicmVqZWN0cyI9PT1WZS5uYW1lPyJyZWplY3Rpb24iOiJleGNlcHRpb24iKS5jb25jYXQobnQpLHN0YWNrU3RhcnRGbjpWZX0pfWlmKEFlJiYheGUo'@;
put 'a2UsQWUsX3QsVmUpKXRocm93IGtlfWZ1bmN0aW9uIEZlKFZlLGtlLEFlLF90KXtpZihrZSE9PUEpe2lmKCJzdHJpbmciPT10eXBlb2YgQWUmJihfdD1BZSxBZT12b2lkIDApLCFBZXx8eGUoa2UsQWUpKXt2YXIgbnQ9X3Q/IjogIi5jb25jYXQoX3QpOiIuIjthZSh7YWN0dWFsOmtlLGV4cGVj'@;
put 'dGVkOkFlLG9wZXJhdG9yOlZlLm5hbWUsbWVzc2FnZToiR290IHVud2FudGVkICIuY29uY2F0KCJkb2VzTm90UmVqZWN0Ij09PVZlLm5hbWU/InJlamVjdGlvbiI6ImV4Y2VwdGlvbiIpLmNvbmNhdChudCwiXG4iKSsnQWN0dWFsIG1lc3NhZ2U6ICInLmNvbmNhdChrZSYma2UubWVzc2FnZSwn'@;
put 'IicpLHN0YWNrU3RhcnRGbjpWZX0pfXRocm93IGtlfX1mdW5jdGlvbiBPZShWZSxrZSxBZSxfdCxudCl7aWYoIWxlKGtlKSl0aHJvdyBuZXcgSygicmVnZXhwIiwiUmVnRXhwIixrZSk7dmFyIFFlPSJtYXRjaCI9PT1udDtpZigic3RyaW5nIiE9dHlwZW9mIFZlfHxUZShrZSxWZSkhPT1RZSl7'@;
put 'aWYoQWUgaW5zdGFuY2VvZiBFcnJvcil0aHJvdyBBZTt2YXIgdW49IUFlO0FlPUFlfHwoInN0cmluZyIhPXR5cGVvZiBWZT8nVGhlICJzdHJpbmciIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBzdHJpbmcuIFJlY2VpdmVkIHR5cGUgJysiIi5jb25jYXQoZyhWZSksIiAoIikuY29uY2F0KEoo'@;
put 'VmUpLCIpIik6KFFlPyJUaGUgaW5wdXQgZGlkIG5vdCBtYXRjaCB0aGUgcmVndWxhciBleHByZXNzaW9uICI6IlRoZSBpbnB1dCB3YXMgZXhwZWN0ZWQgdG8gbm90IG1hdGNoIHRoZSByZWd1bGFyIGV4cHJlc3Npb24gIikrIiIuY29uY2F0KEooa2UpLCIuIElucHV0OlxuXG4iKS5jb25jYXQo'@;
put 'SihWZSksIlxuIikpO3ZhciB5dD1uZXcgcSh7YWN0dWFsOlZlLGV4cGVjdGVkOmtlLG1lc3NhZ2U6QWUsb3BlcmF0b3I6bnQsc3RhY2tTdGFydEZuOl90fSk7dGhyb3cgeXQuZ2VuZXJhdGVkTWVzc2FnZT11bix5dH19ZnVuY3Rpb24gSWUoKXtmb3IodmFyIFZlPWFyZ3VtZW50cy5sZW5ndGgs'@;
put 'a2U9bmV3IEFycmF5KFZlKSxBZT0wO0FlPFZlO0FlKyspa2VbQWVdPWFyZ3VtZW50c1tBZV07c2UuYXBwbHkodm9pZCAwLFtJZSxrZS5sZW5ndGhdLmNvbmNhdChrZSkpfW0udGhyb3dzPWZ1bmN0aW9uIFZlKGtlKXtmb3IodmFyIEFlPWFyZ3VtZW50cy5sZW5ndGgsX3Q9bmV3IEFycmF5KEFl'@;
put 'PjE/QWUtMTowKSxudD0xO250PEFlO250KyspX3RbbnQtMV09YXJndW1lbnRzW250XTtEZS5hcHBseSh2b2lkIDAsW1ZlLHZlKGtlKV0uY29uY2F0KF90KSl9LG0ucmVqZWN0cz1mdW5jdGlvbiBWZShrZSl7Zm9yKHZhciBBZT1hcmd1bWVudHMubGVuZ3RoLF90PW5ldyBBcnJheShBZT4xP0Fl'@;
put 'LTE6MCksbnQ9MTtudDxBZTtudCsrKV90W250LTFdPWFyZ3VtZW50c1tudF07cmV0dXJuIHplKGtlKS50aGVuKGZ1bmN0aW9uKFFlKXtyZXR1cm4gRGUuYXBwbHkodm9pZCAwLFtWZSxRZV0uY29uY2F0KF90KSl9KX0sbS5kb2VzTm90VGhyb3c9ZnVuY3Rpb24gVmUoa2Upe2Zvcih2YXIgQWU9'@;
put 'YXJndW1lbnRzLmxlbmd0aCxfdD1uZXcgQXJyYXkoQWU+MT9BZS0xOjApLG50PTE7bnQ8QWU7bnQrKylfdFtudC0xXT1hcmd1bWVudHNbbnRdO0ZlLmFwcGx5KHZvaWQgMCxbVmUsdmUoa2UpXS5jb25jYXQoX3QpKX0sbS5kb2VzTm90UmVqZWN0PWZ1bmN0aW9uIFZlKGtlKXtmb3IodmFyIEFl'@;
put 'PWFyZ3VtZW50cy5sZW5ndGgsX3Q9bmV3IEFycmF5KEFlPjE/QWUtMTowKSxudD0xO250PEFlO250KyspX3RbbnQtMV09YXJndW1lbnRzW250XTtyZXR1cm4gemUoa2UpLnRoZW4oZnVuY3Rpb24oUWUpe3JldHVybiBGZS5hcHBseSh2b2lkIDAsW1ZlLFFlXS5jb25jYXQoX3QpKX0pfSxtLmlm'@;
put 'RXJyb3I9ZnVuY3Rpb24gVmUoa2Upe2lmKG51bGwhPWtlKXt2YXIgQWU9ImlmRXJyb3IgZ290IHVud2FudGVkIGV4Y2VwdGlvbjogIjsib2JqZWN0Ij09PWcoa2UpJiYic3RyaW5nIj09dHlwZW9mIGtlLm1lc3NhZ2U/QWUrPTA9PT1rZS5tZXNzYWdlLmxlbmd0aCYma2UuY29uc3RydWN0b3I/'@;
put 'a2UuY29uc3RydWN0b3IubmFtZTprZS5tZXNzYWdlOkFlKz1KKGtlKTt2YXIgX3Q9bmV3IHEoe2FjdHVhbDprZSxleHBlY3RlZDpudWxsLG9wZXJhdG9yOiJpZkVycm9yIixtZXNzYWdlOkFlLHN0YWNrU3RhcnRGbjpWZX0pLG50PWtlLnN0YWNrO2lmKCJzdHJpbmciPT10eXBlb2YgbnQpe3Zh'@;
put 'ciBRZT1udC5zcGxpdCgiXG4iKTtRZS5zaGlmdCgpO2Zvcih2YXIgdW49X3Quc3RhY2suc3BsaXQoIlxuIikseXQ9MDt5dDxRZS5sZW5ndGg7eXQrKyl7dmFyIE10PXVuLmluZGV4T2YoUWVbeXRdKTtpZigtMSE9PU10KXt1bj11bi5zbGljZSgwLE10KTticmVha319X3Quc3RhY2s9IiIuY29u'@;
put 'Y2F0KHVuLmpvaW4oIlxuIiksIlxuIikuY29uY2F0KFFlLmpvaW4oIlxuIikpfXRocm93IF90fX0sbS5tYXRjaD1mdW5jdGlvbiBWZShrZSxBZSxfdCl7T2Uoa2UsQWUsX3QsVmUsIm1hdGNoIil9LG0uZG9lc05vdE1hdGNoPWZ1bmN0aW9uIFZlKGtlLEFlLF90KXtPZShrZSxBZSxfdCxWZSwi'@;
put 'ZG9lc05vdE1hdGNoIil9LG0uc3RyaWN0PW1lKEllLG0se2VxdWFsOm0uc3RyaWN0RXF1YWwsZGVlcEVxdWFsOm0uZGVlcFN0cmljdEVxdWFsLG5vdEVxdWFsOm0ubm90U3RyaWN0RXF1YWwsbm90RGVlcEVxdWFsOm0ubm90RGVlcFN0cmljdEVxdWFsfSksbS5zdHJpY3Quc3RyaWN0PW0uc3Ry'@;
put 'aWN0fSw1OTYxOih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoNDE1NSk7ZnVuY3Rpb24gXyhBLGFlKXt2YXIgdGU9T2JqZWN0LmtleXMoQSk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIHNlPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoQSk7YWUmJihz'@;
put 'ZT1zZS5maWx0ZXIoZnVuY3Rpb24od2Upe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEEsd2UpLmVudW1lcmFibGV9KSksdGUucHVzaC5hcHBseSh0ZSxzZSl9cmV0dXJuIHRlfWZ1bmN0aW9uIGcoQSl7Zm9yKHZhciBhZT0xO2FlPGFyZ3VtZW50cy5sZW5ndGg7YWUr'@;
put 'Kyl7dmFyIHRlPW51bGwhPWFyZ3VtZW50c1thZV0/YXJndW1lbnRzW2FlXTp7fTthZSUyP18oT2JqZWN0KHRlKSwhMCkuZm9yRWFjaChmdW5jdGlvbihzZSl7QihBLHNlLHRlW3NlXSl9KTpPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycz9PYmplY3QuZGVmaW5lUHJvcGVydGllcyhB'@;
put 'LE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHRlKSk6XyhPYmplY3QodGUpKS5mb3JFYWNoKGZ1bmN0aW9uKHNlKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoQSxzZSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRlLHNlKSl9KX1yZXR1cm4gQX1mdW5jdGlvbiBCKEEs'@;
put 'YWUsdGUpe3JldHVybihhZT1PKGFlKSlpbiBBP09iamVjdC5kZWZpbmVQcm9wZXJ0eShBLGFlLHt2YWx1ZTp0ZSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOkFbYWVdPXRlLEF9ZnVuY3Rpb24gUChBLGFlKXtmb3IodmFyIHRlPTA7dGU8YWUubGVuZ3RoO3Rl'@;
put 'Kyspe3ZhciBzZT1hZVt0ZV07c2UuZW51bWVyYWJsZT1zZS5lbnVtZXJhYmxlfHwhMSxzZS5jb25maWd1cmFibGU9ITAsInZhbHVlImluIHNlJiYoc2Uud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShBLE8oc2Uua2V5KSxzZSl9fWZ1bmN0aW9uIE8oQSl7dmFyIGFlPWZ1bmN0'@;
put 'aW9uIHooQSxhZSl7aWYoIm9iamVjdCIhPT1pZShBKXx8bnVsbD09PUEpcmV0dXJuIEE7dmFyIHRlPUFbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT10ZSl7dmFyIHNlPXRlLmNhbGwoQSxhZXx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9PWllKHNlKSlyZXR1cm4gc2U7dGhyb3cg'@;
put 'bmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1hZT9TdHJpbmc6TnVtYmVyKShBKX0oQSwic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PT1pZShhZSk/YWU6U3RyaW5nKGFlKX1mdW5jdGlvbiBLKEEs'@;
put 'YWUpe2lmKGFlJiYoIm9iamVjdCI9PT1pZShhZSl8fCJmdW5jdGlvbiI9PXR5cGVvZiBhZSkpcmV0dXJuIGFlO2lmKHZvaWQgMCE9PWFlKXRocm93IG5ldyBUeXBlRXJyb3IoIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkIik7cmV0dXJu'@;
put 'IFUoQSl9ZnVuY3Rpb24gVShBKXtpZih2b2lkIDA9PT1BKXRocm93IG5ldyBSZWZlcmVuY2VFcnJvcigidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkIik7cmV0dXJuIEF9ZnVuY3Rpb24gVyhBKXt2YXIgYWU9ImZ1bmN0aW9uIj09dHlw'@;
put 'ZW9mIE1hcD9uZXcgTWFwOnZvaWQgMDtyZXR1cm4gVz1mdW5jdGlvbihzZSl7aWYobnVsbD09PXNlfHwhZnVuY3Rpb24gZWUoQSl7cmV0dXJuLTEhPT1GdW5jdGlvbi50b1N0cmluZy5jYWxsKEEpLmluZGV4T2YoIltuYXRpdmUgY29kZV0iKX0oc2UpKXJldHVybiBzZTtpZigiZnVuY3Rpb24i'@;
put 'IT10eXBlb2Ygc2UpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24iKTtpZih0eXBlb2YgYWU8InUiKXtpZihhZS5oYXMoc2UpKXJldHVybiBhZS5nZXQoc2UpO2FlLnNldChzZSx3ZSl9ZnVuY3Rpb24gd2UoKXty'@;
put 'ZXR1cm4gWShzZSxhcmd1bWVudHMsbmUodGhpcykuY29uc3RydWN0b3IpfXJldHVybiB3ZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShzZS5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTp3ZSxlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSxKKHdlLHNl'@;
put 'KX0sVyhBKX1mdW5jdGlvbiBZKEEsYWUsdGUpe3JldHVybihZPXEoKT9SZWZsZWN0LmNvbnN0cnVjdC5iaW5kKCk6ZnVuY3Rpb24od2UsVWUsSmUpe3ZhciBvdD1bbnVsbF07b3QucHVzaC5hcHBseShvdCxVZSk7dmFyIHZlPW5ldyhGdW5jdGlvbi5iaW5kLmFwcGx5KHdlLG90KSk7cmV0dXJu'@;
put 'IEplJiZKKHZlLEplLnByb3RvdHlwZSksdmV9KS5hcHBseShudWxsLGFyZ3VtZW50cyl9ZnVuY3Rpb24gcSgpe2lmKHR5cGVvZiBSZWZsZWN0PiJ1Inx8IVJlZmxlY3QuY29uc3RydWN0fHxSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKXJldHVybiExO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBQcm94'@;
put 'eSlyZXR1cm4hMDt0cnl7cmV0dXJuIEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLFtdLGZ1bmN0aW9uKCl7fSkpLCEwfWNhdGNoe3JldHVybiExfX1mdW5jdGlvbiBKKEEsYWUpe3JldHVybihKPU9iamVjdC5zZXRQcm90b3R5cGVPZj9P'@;
put 'YmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKHNlLHdlKXtyZXR1cm4gc2UuX19wcm90b19fPXdlLHNlfSkoQSxhZSl9ZnVuY3Rpb24gbmUoQSl7cmV0dXJuKG5lPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3QuZ2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKHRl'@;
put 'KXtyZXR1cm4gdGUuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YodGUpfSkoQSl9ZnVuY3Rpb24gaWUoQSl7cmV0dXJuKGllPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGFlKXtyZXR1cm4gdHlwZW9m'@;
put 'IGFlfTpmdW5jdGlvbihhZSl7cmV0dXJuIGFlJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZhZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmYWUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBhZX0pKEEpfXZhciBtZT15KDk1MzkpLmluc3BlY3QsVGU9eSgyMTM2KS5jb2Rl'@;
put 'cy5FUlJfSU5WQUxJRF9BUkdfVFlQRTtmdW5jdGlvbiBTZShBLGFlLHRlKXtyZXR1cm4odm9pZCAwPT09dGV8fHRlPkEubGVuZ3RoKSYmKHRlPUEubGVuZ3RoKSxBLnN1YnN0cmluZyh0ZS1hZS5sZW5ndGgsdGUpPT09YWV9dmFyIFY9IiIscD0iIixiPSIiLHg9IiIsQz17ZGVlcFN0cmljdEVx'@;
put 'dWFsOiJFeHBlY3RlZCB2YWx1ZXMgdG8gYmUgc3RyaWN0bHkgZGVlcC1lcXVhbDoiLHN0cmljdEVxdWFsOiJFeHBlY3RlZCB2YWx1ZXMgdG8gYmUgc3RyaWN0bHkgZXF1YWw6IixzdHJpY3RFcXVhbE9iamVjdDonRXhwZWN0ZWQgImFjdHVhbCIgdG8gYmUgcmVmZXJlbmNlLWVxdWFsIHRvICJl'@;
put 'eHBlY3RlZCI6JyxkZWVwRXF1YWw6IkV4cGVjdGVkIHZhbHVlcyB0byBiZSBsb29zZWx5IGRlZXAtZXF1YWw6IixlcXVhbDoiRXhwZWN0ZWQgdmFsdWVzIHRvIGJlIGxvb3NlbHkgZXF1YWw6Iixub3REZWVwU3RyaWN0RXF1YWw6J0V4cGVjdGVkICJhY3R1YWwiIG5vdCB0byBiZSBzdHJpY3Rs'@;
put 'eSBkZWVwLWVxdWFsIHRvOicsbm90U3RyaWN0RXF1YWw6J0V4cGVjdGVkICJhY3R1YWwiIHRvIGJlIHN0cmljdGx5IHVuZXF1YWwgdG86Jyxub3RTdHJpY3RFcXVhbE9iamVjdDonRXhwZWN0ZWQgImFjdHVhbCIgbm90IHRvIGJlIHJlZmVyZW5jZS1lcXVhbCB0byAiZXhwZWN0ZWQiOicsbm90'@;
put 'RGVlcEVxdWFsOidFeHBlY3RlZCAiYWN0dWFsIiBub3QgdG8gYmUgbG9vc2VseSBkZWVwLWVxdWFsIHRvOicsbm90RXF1YWw6J0V4cGVjdGVkICJhY3R1YWwiIHRvIGJlIGxvb3NlbHkgdW5lcXVhbCB0bzonLG5vdElkZW50aWNhbDoiVmFsdWVzIGlkZW50aWNhbCBidXQgbm90IHJlZmVyZW5j'@;
put 'ZS1lcXVhbDoifTtmdW5jdGlvbiBIKEEpe3ZhciBhZT1PYmplY3Qua2V5cyhBKSx0ZT1PYmplY3QuY3JlYXRlKE9iamVjdC5nZXRQcm90b3R5cGVPZihBKSk7cmV0dXJuIGFlLmZvckVhY2goZnVuY3Rpb24oc2Upe3RlW3NlXT1BW3NlXX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0ZSwibWVz'@;
put 'c2FnZSIse3ZhbHVlOkEubWVzc2FnZX0pLHRlfWZ1bmN0aW9uIGooQSl7cmV0dXJuIG1lKEEse2NvbXBhY3Q6ITEsY3VzdG9tSW5zcGVjdDohMSxkZXB0aDoxZTMsbWF4QXJyYXlMZW5ndGg6MS8wLHNob3dIaWRkZW46ITEsYnJlYWtMZW5ndGg6MS8wLHNob3dQcm94eTohMSxzb3J0ZWQ6ITAs'@;
put 'Z2V0dGVyczohMH0pfXZhciBtPWZ1bmN0aW9uKEEsYWUpeyFmdW5jdGlvbiBOKEEsYWUpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBhZSYmbnVsbCE9PWFlKXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uIik7QS5w'@;
put 'cm90b3R5cGU9T2JqZWN0LmNyZWF0ZShhZSYmYWUucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6QSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KEEsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksYWUmJkooQSxhZSl9KHNlLEEpO3Zh'@;
put 'ciB0ZT1mdW5jdGlvbiBMKEEpe3ZhciBhZT1xKCk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHdlLHNlPW5lKEEpO2lmKGFlKXt2YXIgVWU9bmUodGhpcykuY29uc3RydWN0b3I7d2U9UmVmbGVjdC5jb25zdHJ1Y3Qoc2UsYXJndW1lbnRzLFVlKX1lbHNlIHdlPXNlLmFwcGx5KHRoaXMsYXJndW1l'@;
put 'bnRzKTtyZXR1cm4gSyh0aGlzLHdlKX19KHNlKTtmdW5jdGlvbiBzZSh3ZSl7dmFyIFVlO2lmKGZ1bmN0aW9uIHcoQSxhZSl7aWYoIShBIGluc3RhbmNlb2YgYWUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSh0aGlzLHNlKSwib2Jq'@;
put 'ZWN0IiE9PWllKHdlKXx8bnVsbD09PXdlKXRocm93IG5ldyBUZSgib3B0aW9ucyIsIk9iamVjdCIsd2UpO3ZhciBKZT13ZS5tZXNzYWdlLG90PXdlLm9wZXJhdG9yLHhlPXdlLnN0YWNrU3RhcnRGbix2ZT13ZS5hY3R1YWwsWGU9d2UuZXhwZWN0ZWQsemU9RXJyb3Iuc3RhY2tUcmFjZUxpbWl0'@;
put 'O2lmKEVycm9yLnN0YWNrVHJhY2VMaW1pdD0wLG51bGwhPUplKVVlPXRlLmNhbGwodGhpcyxTdHJpbmcoSmUpKTtlbHNlIGlmKEkuc3RkZXJyJiZJLnN0ZGVyci5pc1RUWSYmKEkuc3RkZXJyJiZJLnN0ZGVyci5nZXRDb2xvckRlcHRoJiYxIT09SS5zdGRlcnIuZ2V0Q29sb3JEZXB0aCgpPyhW'@;
put 'PSJceDFiWzM0bSIscD0iXHgxYlszMm0iLHg9Ilx4MWJbMzltIixiPSJceDFiWzMxbSIpOihWPSIiLHA9IiIseD0iIixiPSIiKSksIm9iamVjdCI9PT1pZSh2ZSkmJm51bGwhPT12ZSYmIm9iamVjdCI9PT1pZShYZSkmJm51bGwhPT1YZSYmInN0YWNrImluIHZlJiZ2ZSBpbnN0YW5jZW9mIEVy'@;
put 'cm9yJiYic3RhY2siaW4gWGUmJlhlIGluc3RhbmNlb2YgRXJyb3ImJih2ZT1IKHZlKSxYZT1IKFhlKSksImRlZXBTdHJpY3RFcXVhbCI9PT1vdHx8InN0cmljdEVxdWFsIj09PW90KVVlPXRlLmNhbGwodGhpcyxmdW5jdGlvbiBFKEEsYWUsdGUpe3ZhciBzZT0iIix3ZT0iIixVZT0wLEplPSIi'@;
put 'LG90PSExLHhlPWooQSksdmU9eGUuc3BsaXQoIlxuIiksWGU9aihhZSkuc3BsaXQoIlxuIiksemU9MCxEZT0iIjtpZigic3RyaWN0RXF1YWwiPT09dGUmJiJvYmplY3QiPT09aWUoQSkmJiJvYmplY3QiPT09aWUoYWUpJiZudWxsIT09QSYmbnVsbCE9PWFlJiYodGU9InN0cmljdEVxdWFsT2Jq'@;
put 'ZWN0IiksMT09PXZlLmxlbmd0aCYmMT09PVhlLmxlbmd0aCYmdmVbMF0hPT1YZVswXSl7dmFyIEZlPXZlWzBdLmxlbmd0aCtYZVswXS5sZW5ndGg7aWYoRmU8PTEwKXtpZighKCJvYmplY3QiPT09aWUoQSkmJm51bGwhPT1BfHwib2JqZWN0Ij09PWllKGFlKSYmbnVsbCE9PWFlfHwwPT09QSYm'@;
put 'MD09PWFlKSlyZXR1cm4iIi5jb25jYXQoQ1t0ZV0sIlxuXG4iKSsiIi5jb25jYXQodmVbMF0sIiAhPT0gIikuY29uY2F0KFhlWzBdLCJcbiIpfWVsc2UgaWYoInN0cmljdEVxdWFsT2JqZWN0IiE9PXRlJiZGZTwoSS5zdGRlcnImJkkuc3RkZXJyLmlzVFRZP0kuc3RkZXJyLmNvbHVtbnM6ODAp'@;
put 'KXtmb3IoO3ZlWzBdW3plXT09PVhlWzBdW3plXTspemUrKzt6ZT4yJiYoRGU9IlxuICAiLmNvbmNhdChmdW5jdGlvbiBqZShBLGFlKXtpZihhZT1NYXRoLmZsb29yKGFlKSwwPT1BLmxlbmd0aHx8MD09YWUpcmV0dXJuIiI7dmFyIHRlPUEubGVuZ3RoKmFlO2ZvcihhZT1NYXRoLmZsb29yKE1h'@;
put 'dGgubG9nKGFlKS9NYXRoLmxvZygyKSk7YWU7KUErPUEsYWUtLTtyZXR1cm4gQStBLnN1YnN0cmluZygwLHRlLUEubGVuZ3RoKX0oIiAiLHplKSwiXiIpLHplPTApfX1mb3IodmFyIEllPXZlW3ZlLmxlbmd0aC0xXSxWZT1YZVtYZS5sZW5ndGgtMV07SWU9PT1WZSYmKHplKys8Mj9KZT0iXG4g'@;
put 'ICIuY29uY2F0KEllKS5jb25jYXQoSmUpOnNlPUllLHZlLnBvcCgpLFhlLnBvcCgpLDAhPT12ZS5sZW5ndGgmJjAhPT1YZS5sZW5ndGgpOylJZT12ZVt2ZS5sZW5ndGgtMV0sVmU9WGVbWGUubGVuZ3RoLTFdO3ZhciBrZT1NYXRoLm1heCh2ZS5sZW5ndGgsWGUubGVuZ3RoKTtpZigwPT09a2Up'@;
put 'e3ZhciBBZT14ZS5zcGxpdCgiXG4iKTtpZihBZS5sZW5ndGg+MzApZm9yKEFlWzI2XT0iIi5jb25jYXQoViwiLi4uIikuY29uY2F0KHgpO0FlLmxlbmd0aD4yNzspQWUucG9wKCk7cmV0dXJuIiIuY29uY2F0KEMubm90SWRlbnRpY2FsLCJcblxuIikuY29uY2F0KEFlLmpvaW4oIlxuIiksIlxu'@;
put 'Iil9emU+MyYmKEplPSJcbiIuY29uY2F0KFYsIi4uLiIpLmNvbmNhdCh4KS5jb25jYXQoSmUpLG90PSEwKSwiIiE9PXNlJiYoSmU9IlxuICAiLmNvbmNhdChzZSkuY29uY2F0KEplKSxzZT0iIik7dmFyIF90PTAsbnQ9Q1t0ZV0rIlxuIi5jb25jYXQocCwiKyBhY3R1YWwiKS5jb25jYXQoeCwi'@;
put 'ICIpLmNvbmNhdChiLCItIGV4cGVjdGVkIikuY29uY2F0KHgpLFFlPSIgIi5jb25jYXQoViwiLi4uIikuY29uY2F0KHgsIiBMaW5lcyBza2lwcGVkIik7Zm9yKHplPTA7emU8a2U7emUrKyl7dmFyIHVuPXplLVVlO2lmKHZlLmxlbmd0aDx6ZSsxKXVuPjEmJnplPjImJih1bj40Pyh3ZSs9Ilxu'@;
put 'Ii5jb25jYXQoViwiLi4uIikuY29uY2F0KHgpLG90PSEwKTp1bj4zJiYod2UrPSJcbiAgIi5jb25jYXQoWGVbemUtMl0pLF90KyspLHdlKz0iXG4gICIuY29uY2F0KFhlW3plLTFdKSxfdCsrKSxVZT16ZSxzZSs9IlxuIi5jb25jYXQoYiwiLSIpLmNvbmNhdCh4LCIgIikuY29uY2F0KFhlW3pl'@;
put 'XSksX3QrKztlbHNlIGlmKFhlLmxlbmd0aDx6ZSsxKXVuPjEmJnplPjImJih1bj40Pyh3ZSs9IlxuIi5jb25jYXQoViwiLi4uIikuY29uY2F0KHgpLG90PSEwKTp1bj4zJiYod2UrPSJcbiAgIi5jb25jYXQodmVbemUtMl0pLF90KyspLHdlKz0iXG4gICIuY29uY2F0KHZlW3plLTFdKSxfdCsr'@;
put 'KSxVZT16ZSx3ZSs9IlxuIi5jb25jYXQocCwiKyIpLmNvbmNhdCh4LCIgIikuY29uY2F0KHZlW3plXSksX3QrKztlbHNle3ZhciB5dD1YZVt6ZV0sTXQ9dmVbemVdLER0PU10IT09eXQmJighU2UoTXQsIiwiKXx8TXQuc2xpY2UoMCwtMSkhPT15dCk7RHQmJlNlKHl0LCIsIikmJnl0LnNsaWNl'@;
put 'KDAsLTEpPT09TXQmJihEdD0hMSxNdCs9IiwiKSxEdD8odW4+MSYmemU+MiYmKHVuPjQ/KHdlKz0iXG4iLmNvbmNhdChWLCIuLi4iKS5jb25jYXQoeCksb3Q9ITApOnVuPjMmJih3ZSs9IlxuICAiLmNvbmNhdCh2ZVt6ZS0yXSksX3QrKyksd2UrPSJcbiAgIi5jb25jYXQodmVbemUtMV0pLF90'@;
put 'KyspLFVlPXplLHdlKz0iXG4iLmNvbmNhdChwLCIrIikuY29uY2F0KHgsIiAiKS5jb25jYXQoTXQpLHNlKz0iXG4iLmNvbmNhdChiLCItIikuY29uY2F0KHgsIiAiKS5jb25jYXQoeXQpLF90Kz0yKTood2UrPXNlLHNlPSIiLCgxPT09dW58fDA9PT16ZSkmJih3ZSs9IlxuICAiLmNvbmNhdChN'@;
put 'dCksX3QrKykpfWlmKF90PjIwJiZ6ZTxrZS0yKXJldHVybiIiLmNvbmNhdChudCkuY29uY2F0KFFlLCJcbiIpLmNvbmNhdCh3ZSwiXG4iKS5jb25jYXQoViwiLi4uIikuY29uY2F0KHgpLmNvbmNhdChzZSwiXG4iKSsiIi5jb25jYXQoViwiLi4uIikuY29uY2F0KHgpfXJldHVybiIiLmNvbmNh'@;
put 'dChudCkuY29uY2F0KG90P1FlOiIiLCJcbiIpLmNvbmNhdCh3ZSkuY29uY2F0KHNlKS5jb25jYXQoSmUpLmNvbmNhdChEZSl9KHZlLFhlLG90KSk7ZWxzZSBpZigibm90RGVlcFN0cmljdEVxdWFsIj09PW90fHwibm90U3RyaWN0RXF1YWwiPT09b3Qpe3ZhciBEZT1DW290XSxGZT1qKHZlKS5z'@;
put 'cGxpdCgiXG4iKTtpZigibm90U3RyaWN0RXF1YWwiPT09b3QmJiJvYmplY3QiPT09aWUodmUpJiZudWxsIT09dmUmJihEZT1DLm5vdFN0cmljdEVxdWFsT2JqZWN0KSxGZS5sZW5ndGg+MzApZm9yKEZlWzI2XT0iIi5jb25jYXQoViwiLi4uIikuY29uY2F0KHgpO0ZlLmxlbmd0aD4yNzspRmUu'@;
put 'cG9wKCk7VWU9dGUuY2FsbCh0aGlzLDE9PT1GZS5sZW5ndGg/IiIuY29uY2F0KERlLCIgIikuY29uY2F0KEZlWzBdKToiIi5jb25jYXQoRGUsIlxuXG4iKS5jb25jYXQoRmUuam9pbigiXG4iKSwiXG4iKSl9ZWxzZXt2YXIgT2U9aih2ZSksSWU9IiIsVmU9Q1tvdF07Im5vdERlZXBFcXVhbCI9'@;
put 'PT1vdHx8Im5vdEVxdWFsIj09PW90PyhPZT0iIi5jb25jYXQoQ1tvdF0sIlxuXG4iKS5jb25jYXQoT2UpKS5sZW5ndGg+MTAyNCYmKE9lPSIiLmNvbmNhdChPZS5zbGljZSgwLDEwMjEpLCIuLi4iKSk6KEllPSIiLmNvbmNhdChqKFhlKSksT2UubGVuZ3RoPjUxMiYmKE9lPSIiLmNvbmNhdChP'@;
put 'ZS5zbGljZSgwLDUwOSksIi4uLiIpKSxJZS5sZW5ndGg+NTEyJiYoSWU9IiIuY29uY2F0KEllLnNsaWNlKDAsNTA5KSwiLi4uIikpLCJkZWVwRXF1YWwiPT09b3R8fCJlcXVhbCI9PT1vdD9PZT0iIi5jb25jYXQoVmUsIlxuXG4iKS5jb25jYXQoT2UsIlxuXG5zaG91bGQgZXF1YWxcblxuIik6'@;
put 'SWU9IiAiLmNvbmNhdChvdCwiICIpLmNvbmNhdChJZSkpLFVlPXRlLmNhbGwodGhpcywiIi5jb25jYXQoT2UpLmNvbmNhdChJZSkpfXJldHVybiBFcnJvci5zdGFja1RyYWNlTGltaXQ9emUsVWUuZ2VuZXJhdGVkTWVzc2FnZT0hSmUsT2JqZWN0LmRlZmluZVByb3BlcnR5KFUoVWUpLCJuYW1l'@;
put 'Iix7dmFsdWU6IkFzc2VydGlvbkVycm9yIFtFUlJfQVNTRVJUSU9OXSIsZW51bWVyYWJsZTohMSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxVZS5jb2RlPSJFUlJfQVNTRVJUSU9OIixVZS5hY3R1YWw9dmUsVWUuZXhwZWN0ZWQ9WGUsVWUub3BlcmF0b3I9b3QsRXJyb3IuY2FwdHVy'@;
put 'ZVN0YWNrVHJhY2UmJkVycm9yLmNhcHR1cmVTdGFja1RyYWNlKFUoVWUpLHhlKSxVZS5uYW1lPSJBc3NlcnRpb25FcnJvciIsSyhVZSl9cmV0dXJuIGZ1bmN0aW9uIEYoQSxhZSx0ZSl7YWUmJlAoQS5wcm90b3R5cGUsYWUpLHRlJiZQKEEsdGUpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShBLCJw'@;
put 'cm90b3R5cGUiLHt3cml0YWJsZTohMX0pfShzZSxbe2tleToidG9TdHJpbmciLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIiIuY29uY2F0KHRoaXMubmFtZSwiIFsiKS5jb25jYXQodGhpcy5jb2RlLCJdOiAiKS5jb25jYXQodGhpcy5tZXNzYWdlKX19LHtrZXk6YWUsdmFsdWU6ZnVuY3Rpb24o'@;
put 'VWUsSmUpe3JldHVybiBtZSh0aGlzLGcoZyh7fSxKZSkse30se2N1c3RvbUluc3BlY3Q6ITEsZGVwdGg6MH0pKX19XSksc2V9KFcoRXJyb3IpLG1lLmN1c3RvbSk7dWUuZXhwb3J0cz1tfSwyMTM2Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO2Z1bmN0aW9uIEkobWUpe3JldHVybihJPSJmdW5j'@;
put 'dGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKF9lKXtyZXR1cm4gdHlwZW9mIF9lfTpmdW5jdGlvbihfZSl7cmV0dXJuIF9lJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZfZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmX2Uh'@;
put 'PT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBfZX0pKG1lKX1mdW5jdGlvbiBfKG1lLF9lKXtmb3IodmFyIFRlPTA7VGU8X2UubGVuZ3RoO1RlKyspe3ZhciBTZT1fZVtUZV07U2UuZW51bWVyYWJsZT1TZS5lbnVtZXJhYmxlfHwhMSxTZS5jb25maWd1cmFibGU9ITAsInZhbHVl'@;
put 'ImluIFNlJiYoU2Uud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShtZSxCKFNlLmtleSksU2UpfX1mdW5jdGlvbiBCKG1lKXt2YXIgX2U9ZnVuY3Rpb24gdyhtZSxfZSl7aWYoIm9iamVjdCIhPT1JKG1lKXx8bnVsbD09PW1lKXJldHVybiBtZTt2YXIgVGU9bWVbU3ltYm9sLnRv'@;
put 'UHJpbWl0aXZlXTtpZih2b2lkIDAhPT1UZSl7dmFyIFNlPVRlLmNhbGwobWUsX2V8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPT1JKFNlKSlyZXR1cm4gU2U7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4o'@;
put 'InN0cmluZyI9PT1fZT9TdHJpbmc6TnVtYmVyKShtZSl9KG1lLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09PUkoX2UpP19lOlN0cmluZyhfZSl9ZnVuY3Rpb24gTyhtZSxfZSl7cmV0dXJuKE89T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVu'@;
put 'Y3Rpb24oU2UsamUpe3JldHVybiBTZS5fX3Byb3RvX189amUsU2V9KShtZSxfZSl9ZnVuY3Rpb24gVShtZSl7cmV0dXJuKFU9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oVGUpe3JldHVybiBUZS5fX3Byb3RvX198fE9iamVjdC5n'@;
put 'ZXRQcm90b3R5cGVPZihUZSl9KShtZSl9dmFyIFkscSxXPXt9O2Z1bmN0aW9uIGVlKG1lLF9lLFRlKXtUZXx8KFRlPUVycm9yKTt2YXIgamU9ZnVuY3Rpb24oVil7IWZ1bmN0aW9uIEYobWUsX2Upe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBfZSYmbnVsbCE9PV9lKXRocm93IG5ldyBUeXBlRXJy'@;
put 'b3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uIik7bWUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoX2UmJl9lLnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOm1lLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSxPYmplY3QuZGVm'@;
put 'aW5lUHJvcGVydHkobWUsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksX2UmJk8obWUsX2UpfShiLFYpO3ZhciBwPWZ1bmN0aW9uIHoobWUpe3ZhciBfZT1mdW5jdGlvbiBLKCl7aWYodHlwZW9mIFJlZmxlY3Q+InUifHwhUmVmbGVjdC5jb25zdHJ1Y3R8fFJlZmxlY3QuY29uc3RydWN0LnNo'@;
put 'YW0pcmV0dXJuITE7aWYoImZ1bmN0aW9uIj09dHlwZW9mIFByb3h5KXJldHVybiEwO3RyeXtyZXR1cm4gQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sW10sZnVuY3Rpb24oKXt9KSksITB9Y2F0Y2h7cmV0dXJuITF9fSgpO3JldHVybiBm'@;
put 'dW5jdGlvbigpe3ZhciBqZSxTZT1VKG1lKTtpZihfZSl7dmFyIFY9VSh0aGlzKS5jb25zdHJ1Y3RvcjtqZT1SZWZsZWN0LmNvbnN0cnVjdChTZSxhcmd1bWVudHMsVil9ZWxzZSBqZT1TZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGZ1bmN0aW9uIE4obWUsX2Upe2lmKF9lJiYoIm9i'@;
put 'amVjdCI9PT1JKF9lKXx8ImZ1bmN0aW9uIj09dHlwZW9mIF9lKSlyZXR1cm4gX2U7aWYodm9pZCAwIT09X2UpdGhyb3cgbmV3IFR5cGVFcnJvcigiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWQiKTtyZXR1cm4gZnVuY3Rpb24gTChtZSl7'@;
put 'aWYodm9pZCAwPT09bWUpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWQiKTtyZXR1cm4gbWV9KG1lKX0odGhpcyxqZSl9fShiKTtmdW5jdGlvbiBiKHgsQyxUKXt2YXIgSDtyZXR1cm4gZnVu'@;
put 'Y3Rpb24gUChtZSxfZSl7aWYoIShtZSBpbnN0YW5jZW9mIF9lKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0odGhpcyxiKSxIPXAuY2FsbCh0aGlzLGZ1bmN0aW9uIFNlKFYscCxiKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIF9lP19l'@;
put 'Ol9lKFYscCxiKX0oeCxDLFQpKSxILmNvZGU9bWUsSH1yZXR1cm4gZnVuY3Rpb24gZyhtZSxfZSxUZSl7cmV0dXJuIF9lJiZfKG1lLnByb3RvdHlwZSxfZSksVGUmJl8obWUsVGUpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShtZSwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxtZX0oYil9KFRl'@;
put 'KTtXW21lXT1qZX1mdW5jdGlvbiBKKG1lLF9lKXtpZihBcnJheS5pc0FycmF5KG1lKSl7dmFyIFRlPW1lLmxlbmd0aDtyZXR1cm4gbWU9bWUubWFwKGZ1bmN0aW9uKFNlKXtyZXR1cm4gU3RyaW5nKFNlKX0pLFRlPjI/Im9uZSBvZiAiLmNvbmNhdChfZSwiICIpLmNvbmNhdChtZS5zbGljZSgw'@;
put 'LFRlLTEpLmpvaW4oIiwgIiksIiwgb3IgIikrbWVbVGUtMV06Mj09PVRlPyJvbmUgb2YgIi5jb25jYXQoX2UsIiAiKS5jb25jYXQobWVbMF0sIiBvciAiKS5jb25jYXQobWVbMV0pOiJvZiAiLmNvbmNhdChfZSwiICIpLmNvbmNhdChtZVswXSl9cmV0dXJuIm9mICIuY29uY2F0KF9lLCIgIiku'@;
put 'Y29uY2F0KFN0cmluZyhtZSkpfWVlKCJFUlJfQU1CSUdVT1VTX0FSR1VNRU5UIiwnVGhlICIlcyIgYXJndW1lbnQgaXMgYW1iaWd1b3VzLiAlcycsVHlwZUVycm9yKSxlZSgiRVJSX0lOVkFMSURfQVJHX1RZUEUiLGZ1bmN0aW9uKG1lLF9lLFRlKXt2YXIgU2UsamU7aWYodm9pZCAwPT09WSYm'@;
put 'KFk9eSg5MjgyKSksWSgic3RyaW5nIj09dHlwZW9mIG1lLCInbmFtZScgbXVzdCBiZSBhIHN0cmluZyIpLCJzdHJpbmciPT10eXBlb2YgX2UmJmZ1bmN0aW9uIG5lKG1lLF9lLFRlKXtyZXR1cm4gbWUuc3Vic3RyKCFUZXx8VGU8MD8wOitUZSxfZS5sZW5ndGgpPT09X2V9KF9lLCJub3QgIik/'@;
put 'KFNlPSJtdXN0IG5vdCBiZSIsX2U9X2UucmVwbGFjZSgvXm5vdCAvLCIiKSk6U2U9Im11c3QgYmUiLGZ1bmN0aW9uIGllKG1lLF9lLFRlKXtyZXR1cm4odm9pZCAwPT09VGV8fFRlPm1lLmxlbmd0aCkmJihUZT1tZS5sZW5ndGgpLG1lLnN1YnN0cmluZyhUZS1fZS5sZW5ndGgsVGUpPT09X2V9'@;
put 'KG1lLCIgYXJndW1lbnQiKSlqZT0iVGhlICIuY29uY2F0KG1lLCIgIikuY29uY2F0KFNlLCIgIikuY29uY2F0KEooX2UsInR5cGUiKSk7ZWxzZXt2YXIgVj1mdW5jdGlvbiBsZShtZSxfZSxUZSl7cmV0dXJuIm51bWJlciIhPXR5cGVvZiBUZSYmKFRlPTApLCEoVGUrX2UubGVuZ3RoPm1lLmxl'@;
put 'bmd0aCkmJi0xIT09bWUuaW5kZXhPZihfZSxUZSl9KG1lLCIuIik/InByb3BlcnR5IjoiYXJndW1lbnQiO2plPSdUaGUgIicuY29uY2F0KG1lLCciICcpLmNvbmNhdChWLCIgIikuY29uY2F0KFNlLCIgIikuY29uY2F0KEooX2UsInR5cGUiKSl9cmV0dXJuIGplKyIuIFJlY2VpdmVkIHR5cGUg'@;
put 'Ii5jb25jYXQoSShUZSkpfSxUeXBlRXJyb3IpLGVlKCJFUlJfSU5WQUxJRF9BUkdfVkFMVUUiLGZ1bmN0aW9uKG1lLF9lKXt2YXIgVGU9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOiJpcyBpbnZhbGlkIjt2b2lkIDA9PT1xJiYocT15KDk1'@;
put 'MzkpKTt2YXIgU2U9cS5pbnNwZWN0KF9lKTtyZXR1cm4gU2UubGVuZ3RoPjEyOCYmKFNlPSIiLmNvbmNhdChTZS5zbGljZSgwLDEyOCksIi4uLiIpKSwiVGhlIGFyZ3VtZW50ICciLmNvbmNhdChtZSwiJyAiKS5jb25jYXQoVGUsIi4gUmVjZWl2ZWQgIikuY29uY2F0KFNlKX0sVHlwZUVycm9y'@;
put 'LFJhbmdlRXJyb3IpLGVlKCJFUlJfSU5WQUxJRF9SRVRVUk5fVkFMVUUiLGZ1bmN0aW9uKG1lLF9lLFRlKXt2YXIgU2U7cmV0dXJuIFNlPVRlJiZUZS5jb25zdHJ1Y3RvciYmVGUuY29uc3RydWN0b3IubmFtZT8iaW5zdGFuY2Ugb2YgIi5jb25jYXQoVGUuY29uc3RydWN0b3IubmFtZSk6InR5'@;
put 'cGUgIi5jb25jYXQoSShUZSkpLCJFeHBlY3RlZCAiLmNvbmNhdChtZSwnIHRvIGJlIHJldHVybmVkIGZyb20gdGhlICInKS5jb25jYXQoX2UsJyInKSsiIGZ1bmN0aW9uIGJ1dCBnb3QgIi5jb25jYXQoU2UsIi4iKX0sVHlwZUVycm9yKSxlZSgiRVJSX01JU1NJTkdfQVJHUyIsZnVuY3Rpb24o'@;
put 'KXtmb3IodmFyIG1lPWFyZ3VtZW50cy5sZW5ndGgsX2U9bmV3IEFycmF5KG1lKSxUZT0wO1RlPG1lO1RlKyspX2VbVGVdPWFyZ3VtZW50c1tUZV07dm9pZCAwPT09WSYmKFk9eSg5MjgyKSksWShfZS5sZW5ndGg+MCwiQXQgbGVhc3Qgb25lIGFyZyBuZWVkcyB0byBiZSBzcGVjaWZpZWQiKTt2'@;
put 'YXIgU2U9IlRoZSAiLGplPV9lLmxlbmd0aDtzd2l0Y2goX2U9X2UubWFwKGZ1bmN0aW9uKFYpe3JldHVybiciJy5jb25jYXQoViwnIicpfSksamUpe2Nhc2UgMTpTZSs9IiIuY29uY2F0KF9lWzBdLCIgYXJndW1lbnQiKTticmVhaztjYXNlIDI6U2UrPSIiLmNvbmNhdChfZVswXSwiIGFuZCAi'@;
put 'KS5jb25jYXQoX2VbMV0sIiBhcmd1bWVudHMiKTticmVhaztkZWZhdWx0OlNlKz1fZS5zbGljZSgwLGplLTEpLmpvaW4oIiwgIiksU2UrPSIsIGFuZCAiLmNvbmNhdChfZVtqZS0xXSwiIGFyZ3VtZW50cyIpfXJldHVybiIiLmNvbmNhdChTZSwiIG11c3QgYmUgc3BlY2lmaWVkIil9LFR5cGVF'@;
put 'cnJvciksdWUuZXhwb3J0cy5jb2Rlcz1XfSw5MTU4Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO2Z1bmN0aW9uIEkoRHQsaXQpe3JldHVybiBmdW5jdGlvbiBQKER0KXtpZihBcnJheS5pc0FycmF5KER0KSlyZXR1cm4gRHR9KER0KXx8ZnVuY3Rpb24gdyhEdCxpdCl7dmFyICRlPW51bGw9PUR0'@;
put 'P251bGw6dHlwZW9mIFN5bWJvbDwidSImJkR0W1N5bWJvbC5pdGVyYXRvcl18fER0WyJAQGl0ZXJhdG9yIl07aWYobnVsbCE9JGUpe3ZhciB0dCxIZSx1dCxxdCxSdD1bXSxQdD0hMCxjaT0hMTt0cnl7aWYodXQ9KCRlPSRlLmNhbGwoRHQpKS5uZXh0LDA9PT1pdCl7aWYoT2JqZWN0KCRlKSE9'@;
put 'PSRlKXJldHVybjtQdD0hMX1lbHNlIGZvcig7IShQdD0odHQ9dXQuY2FsbCgkZSkpLmRvbmUpJiYoUnQucHVzaCh0dC52YWx1ZSksUnQubGVuZ3RoIT09aXQpO1B0PSEwKTt9Y2F0Y2goUXQpe2NpPSEwLEhlPVF0fWZpbmFsbHl7dHJ5e2lmKCFQdCYmbnVsbCE9JGUucmV0dXJuJiYocXQ9JGUu'@;
put 'cmV0dXJuKCksT2JqZWN0KHF0KSE9PXF0KSlyZXR1cm59ZmluYWxseXtpZihjaSl0aHJvdyBIZX19cmV0dXJuIFJ0fX0oRHQsaXQpfHxmdW5jdGlvbiBnKER0LGl0KXtpZihEdCl7aWYoInN0cmluZyI9PXR5cGVvZiBEdClyZXR1cm4gQihEdCxpdCk7dmFyICRlPU9iamVjdC5wcm90b3R5cGUu'@;
put 'dG9TdHJpbmcuY2FsbChEdCkuc2xpY2UoOCwtMSk7aWYoIk9iamVjdCI9PT0kZSYmRHQuY29uc3RydWN0b3ImJigkZT1EdC5jb25zdHJ1Y3Rvci5uYW1lKSwiTWFwIj09PSRlfHwiU2V0Ij09PSRlKXJldHVybiBBcnJheS5mcm9tKER0KTtpZigiQXJndW1lbnRzIj09PSRlfHwvXig/OlVpfEkp'@;
put 'bnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdCgkZSkpcmV0dXJuIEIoRHQsaXQpfX0oRHQsaXQpfHxmdW5jdGlvbiBfKCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVy'@;
put 'IHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX0oKX1mdW5jdGlvbiBCKER0LGl0KXsobnVsbD09aXR8fGl0PkR0Lmxlbmd0aCkmJihpdD1EdC5sZW5ndGgpO2Zvcih2YXIgJGU9MCx0dD1uZXcgQXJyYXko'@;
put 'aXQpOyRlPGl0OyRlKyspdHRbJGVdPUR0WyRlXTtyZXR1cm4gdHR9ZnVuY3Rpb24gRihEdCl7cmV0dXJuKEY9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oaXQpe3JldHVybiB0eXBlb2YgaXR9OmZ1bmN0aW9uKGl0'@;
put 'KXtyZXR1cm4gaXQmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJml0LmNvbnN0cnVjdG9yPT09U3ltYm9sJiZpdCE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGl0fSkoRHQpfXZhciBPPXZvaWQgMCE9PS9hL2cuZmxhZ3Msej1mdW5jdGlvbihpdCl7dmFyICRlPVtdO3Jl'@;
put 'dHVybiBpdC5mb3JFYWNoKGZ1bmN0aW9uKHR0KXtyZXR1cm4gJGUucHVzaCh0dCl9KSwkZX0sTj1mdW5jdGlvbihpdCl7dmFyICRlPVtdO3JldHVybiBpdC5mb3JFYWNoKGZ1bmN0aW9uKHR0LEhlKXtyZXR1cm4gJGUucHVzaChbSGUsdHRdKX0pLCRlfSxMPU9iamVjdC5pcz9PYmplY3QuaXM6'@;
put 'eSg2MDkpLEs9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scz9PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzOmZ1bmN0aW9uKCl7cmV0dXJuW119LFU9TnVtYmVyLmlzTmFOP051bWJlci5pc05hTjp5KDM2MCk7ZnVuY3Rpb24gVyhEdCl7cmV0dXJuIER0LmNhbGwuYmluZChEdCl9dmFy'@;
put 'IFk9VyhPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5KSxxPVcoT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZSksZWU9VyhPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nKSxKPXkoOTUzOSkudHlwZXMsbmU9Si5pc0FueUFycmF5QnVmZmVyLGllPUouaXNBcnJheUJ1'@;
put 'ZmZlclZpZXcsbGU9Si5pc0RhdGUsbWU9Si5pc01hcCxfZT1KLmlzUmVnRXhwLFRlPUouaXNTZXQsU2U9Si5pc05hdGl2ZUVycm9yLGplPUouaXNCb3hlZFByaW1pdGl2ZSxWPUouaXNOdW1iZXJPYmplY3QscD1KLmlzU3RyaW5nT2JqZWN0LGI9Si5pc0Jvb2xlYW5PYmplY3QseD1KLmlzQmln'@;
put 'SW50T2JqZWN0LEM9Si5pc1N5bWJvbE9iamVjdCxUPUouaXNGbG9hdDMyQXJyYXksSD1KLmlzRmxvYXQ2NEFycmF5O2Z1bmN0aW9uIGooRHQpe2lmKDA9PT1EdC5sZW5ndGh8fER0Lmxlbmd0aD4xMClyZXR1cm4hMDtmb3IodmFyIGl0PTA7aXQ8RHQubGVuZ3RoO2l0Kyspe3ZhciAkZT1EdC5j'@;
put 'aGFyQ29kZUF0KGl0KTtpZigkZTw0OHx8JGU+NTcpcmV0dXJuITB9cmV0dXJuIDEwPT09RHQubGVuZ3RoJiZEdD49TWF0aC5wb3coMiwzMil9ZnVuY3Rpb24gRShEdCl7cmV0dXJuIE9iamVjdC5rZXlzKER0KS5maWx0ZXIoaikuY29uY2F0KEsoRHQpLmZpbHRlcihPYmplY3QucHJvdG90eXBl'@;
put 'LnByb3BlcnR5SXNFbnVtZXJhYmxlLmJpbmQoRHQpKSl9ZnVuY3Rpb24gbShEdCxpdCl7aWYoRHQ9PT1pdClyZXR1cm4gMDtmb3IodmFyICRlPUR0Lmxlbmd0aCx0dD1pdC5sZW5ndGgsSGU9MCx1dD1NYXRoLm1pbigkZSx0dCk7SGU8dXQ7KytIZSlpZihEdFtIZV0hPT1pdFtIZV0peyRlPUR0'@;
put 'W0hlXSx0dD1pdFtIZV07YnJlYWt9cmV0dXJuICRlPHR0Py0xOnR0PCRlPzE6MH12YXIgc2U9MCx3ZT0xLFVlPTIsSmU9MztmdW5jdGlvbiBEZShEdCxpdCwkZSx0dCl7aWYoRHQ9PT1pdClyZXR1cm4gMCE9PUR0fHwhJGV8fEwoRHQsaXQpO2lmKCRlKXtpZigib2JqZWN0IiE9PUYoRHQpKXJl'@;
put 'dHVybiJudW1iZXIiPT10eXBlb2YgRHQmJlUoRHQpJiZVKGl0KTtpZigib2JqZWN0IiE9PUYoaXQpfHxudWxsPT09RHR8fG51bGw9PT1pdHx8T2JqZWN0LmdldFByb3RvdHlwZU9mKER0KSE9PU9iamVjdC5nZXRQcm90b3R5cGVPZihpdCkpcmV0dXJuITF9ZWxzZXtpZihudWxsPT09RHR8fCJv'@;
put 'YmplY3QiIT09RihEdCkpcmV0dXJuKG51bGw9PT1pdHx8Im9iamVjdCIhPT1GKGl0KSkmJkR0PT1pdDtpZihudWxsPT09aXR8fCJvYmplY3QiIT09RihpdCkpcmV0dXJuITF9dmFyIEhlPWVlKER0KTtpZihIZSE9PWVlKGl0KSlyZXR1cm4hMTtpZihBcnJheS5pc0FycmF5KER0KSl7aWYoRHQu'@;
put 'bGVuZ3RoIT09aXQubGVuZ3RoKXJldHVybiExO3ZhciBxdD1FKER0KSxSdD1FKGl0KTtyZXR1cm4gcXQubGVuZ3RoPT09UnQubGVuZ3RoJiZPZShEdCxpdCwkZSx0dCx3ZSxxdCl9aWYoIltvYmplY3QgT2JqZWN0XSI9PT1IZSYmKCFtZShEdCkmJm1lKGl0KXx8IVRlKER0KSYmVGUoaXQpKSly'@;
put 'ZXR1cm4hMTtpZihsZShEdCkpe2lmKCFsZShpdCl8fERhdGUucHJvdG90eXBlLmdldFRpbWUuY2FsbChEdCkhPT1EYXRlLnByb3RvdHlwZS5nZXRUaW1lLmNhbGwoaXQpKXJldHVybiExfWVsc2UgaWYoX2UoRHQpKXtpZighX2UoaXQpfHwhZnVuY3Rpb24gb3QoRHQsaXQpe3JldHVybiBPP0R0'@;
put 'LnNvdXJjZT09PWl0LnNvdXJjZSYmRHQuZmxhZ3M9PT1pdC5mbGFnczpSZWdFeHAucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoRHQpPT09UmVnRXhwLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGl0KX0oRHQsaXQpKXJldHVybiExfWVsc2UgaWYoU2UoRHQpfHxEdCBpbnN0YW5jZW9mIEVycm9y'@;
put 'KXtpZihEdC5tZXNzYWdlIT09aXQubWVzc2FnZXx8RHQubmFtZSE9PWl0Lm5hbWUpcmV0dXJuITF9ZWxzZXtpZihpZShEdCkpe2lmKCRlfHwhVChEdCkmJiFIKER0KSl7aWYoIWZ1bmN0aW9uIHZlKER0LGl0KXtyZXR1cm4gRHQuYnl0ZUxlbmd0aD09PWl0LmJ5dGVMZW5ndGgmJjA9PT1tKG5l'@;
put 'dyBVaW50OEFycmF5KER0LmJ1ZmZlcixEdC5ieXRlT2Zmc2V0LER0LmJ5dGVMZW5ndGgpLG5ldyBVaW50OEFycmF5KGl0LmJ1ZmZlcixpdC5ieXRlT2Zmc2V0LGl0LmJ5dGVMZW5ndGgpKX0oRHQsaXQpKXJldHVybiExfWVsc2UgaWYoIWZ1bmN0aW9uIHhlKER0LGl0KXtpZihEdC5ieXRlTGVu'@;
put 'Z3RoIT09aXQuYnl0ZUxlbmd0aClyZXR1cm4hMTtmb3IodmFyICRlPTA7JGU8RHQuYnl0ZUxlbmd0aDskZSsrKWlmKER0WyRlXSE9PWl0WyRlXSlyZXR1cm4hMTtyZXR1cm4hMH0oRHQsaXQpKXJldHVybiExO3ZhciBQdD1FKER0KSxjaT1FKGl0KTtyZXR1cm4gUHQubGVuZ3RoPT09Y2kubGVu'@;
put 'Z3RoJiZPZShEdCxpdCwkZSx0dCxzZSxQdCl9aWYoVGUoRHQpKXJldHVybiEoIVRlKGl0KXx8RHQuc2l6ZSE9PWl0LnNpemUpJiZPZShEdCxpdCwkZSx0dCxVZSk7aWYobWUoRHQpKXJldHVybiEoIW1lKGl0KXx8RHQuc2l6ZSE9PWl0LnNpemUpJiZPZShEdCxpdCwkZSx0dCxKZSk7aWYobmUo'@;
put 'RHQpKXtpZighZnVuY3Rpb24gWGUoRHQsaXQpe3JldHVybiBEdC5ieXRlTGVuZ3RoPT09aXQuYnl0ZUxlbmd0aCYmMD09PW0obmV3IFVpbnQ4QXJyYXkoRHQpLG5ldyBVaW50OEFycmF5KGl0KSl9KER0LGl0KSlyZXR1cm4hMX1lbHNlIGlmKGplKER0KSYmIWZ1bmN0aW9uIHplKER0LGl0KXty'@;
put 'ZXR1cm4gVihEdCk/VihpdCkmJkwoTnVtYmVyLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoRHQpLE51bWJlci5wcm90b3R5cGUudmFsdWVPZi5jYWxsKGl0KSk6cChEdCk/cChpdCkmJlN0cmluZy5wcm90b3R5cGUudmFsdWVPZi5jYWxsKER0KT09PVN0cmluZy5wcm90b3R5cGUudmFsdWVPZi5j'@;
put 'YWxsKGl0KTpiKER0KT9iKGl0KSYmQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKER0KT09PUJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChpdCk6eChEdCk/eChpdCkmJkJpZ0ludC5wcm90b3R5cGUudmFsdWVPZi5jYWxsKER0KT09PUJpZ0ludC5wcm90b3R5cGUudmFsdWVP'@;
put 'Zi5jYWxsKGl0KTpDKGl0KSYmU3ltYm9sLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoRHQpPT09U3ltYm9sLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoaXQpfShEdCxpdCkpcmV0dXJuITF9cmV0dXJuIE9lKER0LGl0LCRlLHR0LHNlKX1mdW5jdGlvbiBGZShEdCxpdCl7cmV0dXJuIGl0LmZpbHRl'@;
put 'cihmdW5jdGlvbigkZSl7cmV0dXJuIHEoRHQsJGUpfSl9ZnVuY3Rpb24gT2UoRHQsaXQsJGUsdHQsSGUsdXQpe2lmKDU9PT1hcmd1bWVudHMubGVuZ3RoKXt1dD1PYmplY3Qua2V5cyhEdCk7dmFyIHF0PU9iamVjdC5rZXlzKGl0KTtpZih1dC5sZW5ndGghPT1xdC5sZW5ndGgpcmV0dXJuITF9'@;
put 'Zm9yKHZhciBSdD0wO1J0PHV0Lmxlbmd0aDtSdCsrKWlmKCFZKGl0LHV0W1J0XSkpcmV0dXJuITE7aWYoJGUmJjU9PT1hcmd1bWVudHMubGVuZ3RoKXt2YXIgUHQ9SyhEdCk7aWYoMCE9PVB0Lmxlbmd0aCl7dmFyIGNpPTA7Zm9yKFJ0PTA7UnQ8UHQubGVuZ3RoO1J0Kyspe3ZhciBRdD1QdFtS'@;
put 'dF07aWYocShEdCxRdCkpe2lmKCFxKGl0LFF0KSlyZXR1cm4hMTt1dC5wdXNoKFF0KSxjaSsrfWVsc2UgaWYocShpdCxRdCkpcmV0dXJuITF9dmFyIHNuPUsoaXQpO2lmKFB0Lmxlbmd0aCE9PXNuLmxlbmd0aCYmRmUoaXQsc24pLmxlbmd0aCE9PWNpKXJldHVybiExfWVsc2V7dmFyIFJpPUso'@;
put 'aXQpO2lmKDAhPT1SaS5sZW5ndGgmJjAhPT1GZShpdCxSaSkubGVuZ3RoKXJldHVybiExfX1pZigwPT09dXQubGVuZ3RoJiYoSGU9PT1zZXx8SGU9PT13ZSYmMD09PUR0Lmxlbmd0aHx8MD09PUR0LnNpemUpKXJldHVybiEwO2lmKHZvaWQgMD09PXR0KXR0PXt2YWwxOm5ldyBNYXAsdmFsMjpu'@;
put 'ZXcgTWFwLHBvc2l0aW9uOjB9O2Vsc2V7dmFyIGhuPXR0LnZhbDEuZ2V0KER0KTtpZih2b2lkIDAhPT1obil7dmFyIGZ0PXR0LnZhbDIuZ2V0KGl0KTtpZih2b2lkIDAhPT1mdClyZXR1cm4gaG49PT1mdH10dC5wb3NpdGlvbisrfXR0LnZhbDEuc2V0KER0LHR0LnBvc2l0aW9uKSx0dC52YWwy'@;
put 'LnNldChpdCx0dC5wb3NpdGlvbik7dmFyIE9yPWZ1bmN0aW9uIHVuKER0LGl0LCRlLHR0LEhlLHV0KXt2YXIgcXQ9MDtpZih1dD09PVVlKXtpZighZnVuY3Rpb24gX3QoRHQsaXQsJGUsdHQpe2Zvcih2YXIgSGU9bnVsbCx1dD16KER0KSxxdD0wO3F0PHV0Lmxlbmd0aDtxdCsrKXt2YXIgUnQ9'@;
put 'dXRbcXRdO2lmKCJvYmplY3QiPT09RihSdCkmJm51bGwhPT1SdCludWxsPT09SGUmJihIZT1uZXcgU2V0KSxIZS5hZGQoUnQpO2Vsc2UgaWYoIWl0LmhhcyhSdCkpe2lmKCRlfHwha2UoRHQsaXQsUnQpKXJldHVybiExO251bGw9PT1IZSYmKEhlPW5ldyBTZXQpLEhlLmFkZChSdCl9fWlmKG51'@;
put 'bGwhPT1IZSl7Zm9yKHZhciBQdD16KGl0KSxjaT0wO2NpPFB0Lmxlbmd0aDtjaSsrKXt2YXIgUXQ9UHRbY2ldO2lmKCJvYmplY3QiPT09RihRdCkmJm51bGwhPT1RdCl7aWYoIUllKEhlLFF0LCRlLHR0KSlyZXR1cm4hMX1lbHNlIGlmKCEkZSYmIUR0LmhhcyhRdCkmJiFJZShIZSxRdCwkZSx0'@;
put 'dCkpcmV0dXJuITF9cmV0dXJuIDA9PT1IZS5zaXplfXJldHVybiEwfShEdCxpdCwkZSxIZSkpcmV0dXJuITF9ZWxzZSBpZih1dD09PUplKXtpZighZnVuY3Rpb24gUWUoRHQsaXQsJGUsdHQpe2Zvcih2YXIgSGU9bnVsbCx1dD1OKER0KSxxdD0wO3F0PHV0Lmxlbmd0aDtxdCsrKXt2YXIgUnQ9'@;
put 'SSh1dFtxdF0sMiksUHQ9UnRbMF0sY2k9UnRbMV07aWYoIm9iamVjdCI9PT1GKFB0KSYmbnVsbCE9PVB0KW51bGw9PT1IZSYmKEhlPW5ldyBTZXQpLEhlLmFkZChQdCk7ZWxzZXt2YXIgUXQ9aXQuZ2V0KFB0KTtpZih2b2lkIDA9PT1RdCYmIWl0LmhhcyhQdCl8fCFEZShjaSxRdCwkZSx0dCkp'@;
put 'e2lmKCRlfHwhQWUoRHQsaXQsUHQsY2ksdHQpKXJldHVybiExO251bGw9PT1IZSYmKEhlPW5ldyBTZXQpLEhlLmFkZChQdCl9fX1pZihudWxsIT09SGUpe2Zvcih2YXIgc249TihpdCksUmk9MDtSaTxzbi5sZW5ndGg7UmkrKyl7dmFyIGhuPUkoc25bUmldLDIpLGZ0PWhuWzBdLE9yPWhuWzFd'@;
put 'O2lmKCJvYmplY3QiPT09RihmdCkmJm51bGwhPT1mdCl7aWYoIW50KEhlLER0LGZ0LE9yLCRlLHR0KSlyZXR1cm4hMX1lbHNlIGlmKCEoJGV8fER0LmhhcyhmdCkmJkRlKER0LmdldChmdCksT3IsITEsdHQpfHxudChIZSxEdCxmdCxPciwhMSx0dCkpKXJldHVybiExfXJldHVybiAwPT09SGUu'@;
put 'c2l6ZX1yZXR1cm4hMH0oRHQsaXQsJGUsSGUpKXJldHVybiExfWVsc2UgaWYodXQ9PT13ZSlmb3IoO3F0PER0Lmxlbmd0aDtxdCsrKXtpZighWShEdCxxdCkpe2lmKFkoaXQscXQpKXJldHVybiExO2Zvcih2YXIgUnQ9T2JqZWN0LmtleXMoRHQpO3F0PFJ0Lmxlbmd0aDtxdCsrKXt2YXIgUHQ9'@;
put 'UnRbcXRdO2lmKCFZKGl0LFB0KXx8IURlKER0W1B0XSxpdFtQdF0sJGUsSGUpKXJldHVybiExfXJldHVybiBSdC5sZW5ndGg9PT1PYmplY3Qua2V5cyhpdCkubGVuZ3RofWlmKCFZKGl0LHF0KXx8IURlKER0W3F0XSxpdFtxdF0sJGUsSGUpKXJldHVybiExfWZvcihxdD0wO3F0PHR0Lmxlbmd0'@;
put 'aDtxdCsrKXt2YXIgY2k9dHRbcXRdO2lmKCFEZShEdFtjaV0saXRbY2ldLCRlLEhlKSlyZXR1cm4hMX1yZXR1cm4hMH0oRHQsaXQsJGUsdXQsdHQsSGUpO3JldHVybiB0dC52YWwxLmRlbGV0ZShEdCksdHQudmFsMi5kZWxldGUoaXQpLE9yfWZ1bmN0aW9uIEllKER0LGl0LCRlLHR0KXtmb3Io'@;
put 'dmFyIEhlPXooRHQpLHV0PTA7dXQ8SGUubGVuZ3RoO3V0Kyspe3ZhciBxdD1IZVt1dF07aWYoRGUoaXQscXQsJGUsdHQpKXJldHVybiBEdC5kZWxldGUocXQpLCEwfXJldHVybiExfWZ1bmN0aW9uIFZlKER0KXtzd2l0Y2goRihEdCkpe2Nhc2UidW5kZWZpbmVkIjpyZXR1cm4gbnVsbDtjYXNl'@;
put 'Im9iamVjdCI6cmV0dXJuO2Nhc2Uic3ltYm9sIjpyZXR1cm4hMTtjYXNlInN0cmluZyI6RHQ9K0R0O2Nhc2UibnVtYmVyIjppZihVKER0KSlyZXR1cm4hMX1yZXR1cm4hMH1mdW5jdGlvbiBrZShEdCxpdCwkZSl7dmFyIHR0PVZlKCRlKTtyZXR1cm4gdHQ/PyhpdC5oYXModHQpJiYhRHQuaGFz'@;
put 'KHR0KSl9ZnVuY3Rpb24gQWUoRHQsaXQsJGUsdHQsSGUpe3ZhciB1dD1WZSgkZSk7aWYobnVsbCE9dXQpcmV0dXJuIHV0O3ZhciBxdD1pdC5nZXQodXQpO3JldHVybiEodm9pZCAwPT09cXQmJiFpdC5oYXModXQpfHwhRGUodHQscXQsITEsSGUpKSYmIUR0Lmhhcyh1dCkmJkRlKHR0LHF0LCEx'@;
put 'LEhlKX1mdW5jdGlvbiBudChEdCxpdCwkZSx0dCxIZSx1dCl7Zm9yKHZhciBxdD16KER0KSxSdD0wO1J0PHF0Lmxlbmd0aDtSdCsrKXt2YXIgUHQ9cXRbUnRdO2lmKERlKCRlLFB0LEhlLHV0KSYmRGUodHQsaXQuZ2V0KFB0KSxIZSx1dCkpcmV0dXJuIER0LmRlbGV0ZShQdCksITB9cmV0dXJu'@;
put 'ITF9dWUuZXhwb3J0cz17aXNEZWVwRXF1YWw6ZnVuY3Rpb24geXQoRHQsaXQpe3JldHVybiBEZShEdCxpdCwhMSl9LGlzRGVlcFN0cmljdEVxdWFsOmZ1bmN0aW9uIE10KER0LGl0KXtyZXR1cm4gRGUoRHQsaXQsITApfX19LDgyMjQ6KHVlLFgpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZp'@;
put 'bmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLndyYXBwZXI9ZnVuY3Rpb24geShJKXtyZXR1cm4gSX19LDk3NDI6KHVlLFgpPT57InVzZSBzdHJpY3QiO1guYnl0ZUxlbmd0aD1mdW5jdGlvbiBGKFUpe3ZhciBXPVAoVSkscT1XWzFdO3JldHVybiAzKihXWzBdK3EpLzQt'@;
put 'cX0sWC50b0J5dGVBcnJheT1mdW5jdGlvbiB6KFUpe3ZhciBXLGxlLFk9UChVKSxxPVlbMF0sZWU9WVsxXSxKPW5ldyBfKGZ1bmN0aW9uIE8oVSxXLFkpe3JldHVybiAzKihXK1kpLzQtWX0oMCxxLGVlKSksbmU9MCxpZT1lZT4wP3EtNDpxO2ZvcihsZT0wO2xlPGllO2xlKz00KVc9SVtVLmNo'@;
put 'YXJDb2RlQXQobGUpXTw8MTh8SVtVLmNoYXJDb2RlQXQobGUrMSldPDwxMnxJW1UuY2hhckNvZGVBdChsZSsyKV08PDZ8SVtVLmNoYXJDb2RlQXQobGUrMyldLEpbbmUrK109Vz4+MTYmMjU1LEpbbmUrK109Vz4+OCYyNTUsSltuZSsrXT0yNTUmVztyZXR1cm4gMj09PWVlJiYoVz1JW1UuY2hh'@;
put 'ckNvZGVBdChsZSldPDwyfElbVS5jaGFyQ29kZUF0KGxlKzEpXT4+NCxKW25lKytdPTI1NSZXKSwxPT09ZWUmJihXPUlbVS5jaGFyQ29kZUF0KGxlKV08PDEwfElbVS5jaGFyQ29kZUF0KGxlKzEpXTw8NHxJW1UuY2hhckNvZGVBdChsZSsyKV0+PjIsSltuZSsrXT1XPj44JjI1NSxKW25lKytd'@;
put 'PTI1NSZXKSxKfSxYLmZyb21CeXRlQXJyYXk9ZnVuY3Rpb24gSyhVKXtmb3IodmFyIFcsWT1VLmxlbmd0aCxxPVklMyxlZT1bXSxKPTE2MzgzLG5lPTAsaWU9WS1xO25lPGllO25lKz1KKWVlLnB1c2goTChVLG5lLG5lK0o+aWU/aWU6bmUrSikpO3JldHVybiAxPT09cT9lZS5wdXNoKHlbKFc9'@;
put 'VVtZLTFdKT4+Ml0reVtXPDw0JjYzXSsiPT0iKToyPT09cSYmZWUucHVzaCh5WyhXPShVW1ktMl08PDgpK1VbWS0xXSk+PjEwXSt5W1c+PjQmNjNdK3lbVzw8MiY2M10rIj0iKSxlZS5qb2luKCIiKX07Zm9yKHZhciB5PVtdLEk9W10sXz10eXBlb2YgVWludDhBcnJheTwidSI/VWludDhBcnJh'@;
put 'eTpBcnJheSxnPSJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvIixCPTA7Qjw2NDsrK0IpeVtCXT1nW0JdLElbZy5jaGFyQ29kZUF0KEIpXT1CO2Z1bmN0aW9uIFAoVSl7dmFyIFc9VS5sZW5ndGg7aWYoVyU0PjApdGhyb3cg'@;
put 'bmV3IEVycm9yKCJJbnZhbGlkIHN0cmluZy4gTGVuZ3RoIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA0Iik7dmFyIFk9VS5pbmRleE9mKCI9Iik7cmV0dXJuLTE9PT1ZJiYoWT1XKSxbWSxZPT09Vz8wOjQtWSU0XX1mdW5jdGlvbiBOKFUpe3JldHVybiB5W1U+PjE4JjYzXSt5W1U+PjEyJjYzXSt5'@;
put 'W1U+PjYmNjNdK3lbNjMmVV19ZnVuY3Rpb24gTChVLFcsWSl7Zm9yKHZhciBlZT1bXSxKPVc7SjxZO0orPTMpZWUucHVzaChOKChVW0pdPDwxNiYxNjcxMTY4MCkrKFVbSisxXTw8OCY2NTI4MCkrKDI1NSZVW0orMl0pKSk7cmV0dXJuIGVlLmpvaW4oIiIpfUlbNDVdPTYyLElbOTVdPTYzfSwz'@;
put 'NTUwOmZ1bmN0aW9uKHVlLFgseSl7IWZ1bmN0aW9uKEksXyl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGcoeCxDKXtpZigheCl0aHJvdyBuZXcgRXJyb3IoQ3x8IkFzc2VydGlvbiBmYWlsZWQiKX1mdW5jdGlvbiBCKHgsQyl7eC5zdXBlcl89Qzt2YXIgVD1mdW5jdGlvbigpe307VC5wcm90b3R5'@;
put 'cGU9Qy5wcm90b3R5cGUseC5wcm90b3R5cGU9bmV3IFQseC5wcm90b3R5cGUuY29uc3RydWN0b3I9eH1mdW5jdGlvbiB3KHgsQyxUKXtpZih3LmlzQk4oeCkpcmV0dXJuIHg7dGhpcy5uZWdhdGl2ZT0wLHRoaXMud29yZHM9bnVsbCx0aGlzLmxlbmd0aD0wLHRoaXMucmVkPW51bGwsbnVsbCE9'@;
put 'PXgmJigoImxlIj09PUN8fCJiZSI9PT1DKSYmKFQ9QyxDPTEwKSx0aGlzLl9pbml0KHh8fDAsQ3x8MTAsVHx8ImJlIikpfXZhciBQOyJvYmplY3QiPT10eXBlb2YgST9JLmV4cG9ydHM9dzpfLkJOPXcsdy5CTj13LHcud29yZFNpemU9MjY7dHJ5e1A9dHlwZW9mIHdpbmRvdzwidSImJnR5cGVv'@;
put 'ZiB3aW5kb3cuQnVmZmVyPCJ1Ij93aW5kb3cuQnVmZmVyOnkoNjYwMSkuQnVmZmVyfWNhdGNoe31mdW5jdGlvbiBGKHgsQyl7dmFyIFQ9eC5jaGFyQ29kZUF0KEMpO3JldHVybiBUPj00OCYmVDw9NTc/VC00ODpUPj02NSYmVDw9NzA/VC01NTpUPj05NyYmVDw9MTAyP1QtODc6dm9pZCBnKCEx'@;
put 'LCJJbnZhbGlkIGNoYXJhY3RlciBpbiAiK3gpfWZ1bmN0aW9uIE8oeCxDLFQpe3ZhciBIPUYoeCxUKTtyZXR1cm4gVC0xPj1DJiYoSHw9Rih4LFQtMSk8PDQpLEh9ZnVuY3Rpb24geih4LEMsVCxIKXtmb3IodmFyIGo9MCxFPTAsbT1NYXRoLm1pbih4Lmxlbmd0aCxUKSxBPUM7QTxtO0ErKyl7'@;
put 'dmFyIGFlPXguY2hhckNvZGVBdChBKS00ODtqKj1ILEU9YWU+PTQ5P2FlLTQ5KzEwOmFlPj0xNz9hZS0xNysxMDphZSxnKGFlPj0wJiZFPEgsIkludmFsaWQgY2hhcmFjdGVyIiksais9RX1yZXR1cm4gan1mdW5jdGlvbiBOKHgsQyl7eC53b3Jkcz1DLndvcmRzLHgubGVuZ3RoPUMubGVuZ3Ro'@;
put 'LHgubmVnYXRpdmU9Qy5uZWdhdGl2ZSx4LnJlZD1DLnJlZH1pZih3LmlzQk49ZnVuY3Rpb24oQyl7cmV0dXJuIEMgaW5zdGFuY2VvZiB3fHxudWxsIT09QyYmIm9iamVjdCI9PXR5cGVvZiBDJiZDLmNvbnN0cnVjdG9yLndvcmRTaXplPT09dy53b3JkU2l6ZSYmQXJyYXkuaXNBcnJheShDLndv'@;
put 'cmRzKX0sdy5tYXg9ZnVuY3Rpb24oQyxUKXtyZXR1cm4gQy5jbXAoVCk+MD9DOlR9LHcubWluPWZ1bmN0aW9uKEMsVCl7cmV0dXJuIEMuY21wKFQpPDA/QzpUfSx3LnByb3RvdHlwZS5faW5pdD1mdW5jdGlvbihDLFQsSCl7aWYoIm51bWJlciI9PXR5cGVvZiBDKXJldHVybiB0aGlzLl9pbml0'@;
put 'TnVtYmVyKEMsVCxIKTtpZigib2JqZWN0Ij09dHlwZW9mIEMpcmV0dXJuIHRoaXMuX2luaXRBcnJheShDLFQsSCk7ImhleCI9PT1UJiYoVD0xNiksZyhUPT09KDB8VCkmJlQ+PTImJlQ8PTM2KTt2YXIgaj0wOyItIj09PShDPUMudG9TdHJpbmcoKS5yZXBsYWNlKC9ccysvZywiIikpWzBdJiYo'@;
put 'aisrLHRoaXMubmVnYXRpdmU9MSksajxDLmxlbmd0aCYmKDE2PT09VD90aGlzLl9wYXJzZUhleChDLGosSCk6KHRoaXMuX3BhcnNlQmFzZShDLFQsaiksImxlIj09PUgmJnRoaXMuX2luaXRBcnJheSh0aGlzLnRvQXJyYXkoKSxULEgpKSl9LHcucHJvdG90eXBlLl9pbml0TnVtYmVyPWZ1bmN0'@;
put 'aW9uKEMsVCxIKXtDPDAmJih0aGlzLm5lZ2F0aXZlPTEsQz0tQyksQzw2NzEwODg2ND8odGhpcy53b3Jkcz1bNjcxMDg4NjMmQ10sdGhpcy5sZW5ndGg9MSk6Qzw0NTAzNTk5NjI3MzcwNDk2Pyh0aGlzLndvcmRzPVs2NzEwODg2MyZDLEMvNjcxMDg4NjQmNjcxMDg4NjNdLHRoaXMubGVuZ3Ro'@;
put 'PTIpOihnKEM8OTAwNzE5OTI1NDc0MDk5MiksdGhpcy53b3Jkcz1bNjcxMDg4NjMmQyxDLzY3MTA4ODY0JjY3MTA4ODYzLDFdLHRoaXMubGVuZ3RoPTMpLCJsZSI9PT1IJiZ0aGlzLl9pbml0QXJyYXkodGhpcy50b0FycmF5KCksVCxIKX0sdy5wcm90b3R5cGUuX2luaXRBcnJheT1mdW5jdGlv'@;
put 'bihDLFQsSCl7aWYoZygibnVtYmVyIj09dHlwZW9mIEMubGVuZ3RoKSxDLmxlbmd0aDw9MClyZXR1cm4gdGhpcy53b3Jkcz1bMF0sdGhpcy5sZW5ndGg9MSx0aGlzO3RoaXMubGVuZ3RoPU1hdGguY2VpbChDLmxlbmd0aC8zKSx0aGlzLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9y'@;
put 'KHZhciBqPTA7ajx0aGlzLmxlbmd0aDtqKyspdGhpcy53b3Jkc1tqXT0wO3ZhciBFLG0sQT0wO2lmKCJiZSI9PT1IKWZvcihqPUMubGVuZ3RoLTEsRT0wO2o+PTA7ai09Myl0aGlzLndvcmRzW0VdfD0obT1DW2pdfENbai0xXTw8OHxDW2otMl08PDE2KTw8QSY2NzEwODg2Myx0aGlzLndvcmRz'@;
put 'W0UrMV09bT4+PjI2LUEmNjcxMDg4NjMsKEErPTI0KT49MjYmJihBLT0yNixFKyspO2Vsc2UgaWYoImxlIj09PUgpZm9yKGo9MCxFPTA7ajxDLmxlbmd0aDtqKz0zKXRoaXMud29yZHNbRV18PShtPUNbal18Q1tqKzFdPDw4fENbaisyXTw8MTYpPDxBJjY3MTA4ODYzLHRoaXMud29yZHNbRSsx'@;
put 'XT1tPj4+MjYtQSY2NzEwODg2MywoQSs9MjQpPj0yNiYmKEEtPTI2LEUrKyk7cmV0dXJuIHRoaXMuX3N0cmlwKCl9LHcucHJvdG90eXBlLl9wYXJzZUhleD1mdW5jdGlvbihDLFQsSCl7dGhpcy5sZW5ndGg9TWF0aC5jZWlsKChDLmxlbmd0aC1UKS82KSx0aGlzLndvcmRzPW5ldyBBcnJheSh0'@;
put 'aGlzLmxlbmd0aCk7Zm9yKHZhciBqPTA7ajx0aGlzLmxlbmd0aDtqKyspdGhpcy53b3Jkc1tqXT0wO3ZhciBBLEU9MCxtPTA7aWYoImJlIj09PUgpZm9yKGo9Qy5sZW5ndGgtMTtqPj1UO2otPTIpQT1PKEMsVCxqKTw8RSx0aGlzLndvcmRzW21dfD02NzEwODg2MyZBLEU+PTE4PyhFLT0xOCx0'@;
put 'aGlzLndvcmRzW20rPTFdfD1BPj4+MjYpOkUrPTg7ZWxzZSBmb3Ioaj0oQy5sZW5ndGgtVCklMj09MD9UKzE6VDtqPEMubGVuZ3RoO2orPTIpQT1PKEMsVCxqKTw8RSx0aGlzLndvcmRzW21dfD02NzEwODg2MyZBLEU+PTE4PyhFLT0xOCx0aGlzLndvcmRzW20rPTFdfD1BPj4+MjYpOkUrPTg7'@;
put 'dGhpcy5fc3RyaXAoKX0sdy5wcm90b3R5cGUuX3BhcnNlQmFzZT1mdW5jdGlvbihDLFQsSCl7dGhpcy53b3Jkcz1bMF0sdGhpcy5sZW5ndGg9MTtmb3IodmFyIGo9MCxFPTE7RTw9NjcxMDg4NjM7RSo9VClqKys7ai0tLEU9RS9UfDA7Zm9yKHZhciBtPUMubGVuZ3RoLUgsQT1tJWosYWU9TWF0'@;
put 'aC5taW4obSxtLUEpK0gsdGU9MCxzZT1IO3NlPGFlO3NlKz1qKXRlPXooQyxzZSxzZStqLFQpLHRoaXMuaW11bG4oRSksdGhpcy53b3Jkc1swXSt0ZTw2NzEwODg2ND90aGlzLndvcmRzWzBdKz10ZTp0aGlzLl9pYWRkbih0ZSk7aWYoMCE9PUEpe3ZhciB3ZT0xO2Zvcih0ZT16KEMsc2UsQy5s'@;
put 'ZW5ndGgsVCksc2U9MDtzZTxBO3NlKyspd2UqPVQ7dGhpcy5pbXVsbih3ZSksdGhpcy53b3Jkc1swXSt0ZTw2NzEwODg2ND90aGlzLndvcmRzWzBdKz10ZTp0aGlzLl9pYWRkbih0ZSl9dGhpcy5fc3RyaXAoKX0sdy5wcm90b3R5cGUuY29weT1mdW5jdGlvbihDKXtDLndvcmRzPW5ldyBBcnJh'@;
put 'eSh0aGlzLmxlbmd0aCk7Zm9yKHZhciBUPTA7VDx0aGlzLmxlbmd0aDtUKyspQy53b3Jkc1tUXT10aGlzLndvcmRzW1RdO0MubGVuZ3RoPXRoaXMubGVuZ3RoLEMubmVnYXRpdmU9dGhpcy5uZWdhdGl2ZSxDLnJlZD10aGlzLnJlZH0sdy5wcm90b3R5cGUuX21vdmU9ZnVuY3Rpb24oQyl7TihD'@;
put 'LHRoaXMpfSx3LnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbigpe3ZhciBDPW5ldyB3KG51bGwpO3JldHVybiB0aGlzLmNvcHkoQyksQ30sdy5wcm90b3R5cGUuX2V4cGFuZD1mdW5jdGlvbihDKXtmb3IoO3RoaXMubGVuZ3RoPEM7KXRoaXMud29yZHNbdGhpcy5sZW5ndGgrK109MDtyZXR1cm4g'@;
put 'dGhpc30sdy5wcm90b3R5cGUuX3N0cmlwPWZ1bmN0aW9uKCl7Zm9yKDt0aGlzLmxlbmd0aD4xJiYwPT09dGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXTspdGhpcy5sZW5ndGgtLTtyZXR1cm4gdGhpcy5fbm9ybVNpZ24oKX0sdy5wcm90b3R5cGUuX25vcm1TaWduPWZ1bmN0aW9uKCl7cmV0dXJu'@;
put 'IDE9PT10aGlzLmxlbmd0aCYmMD09PXRoaXMud29yZHNbMF0mJih0aGlzLm5lZ2F0aXZlPTApLHRoaXN9LHR5cGVvZiBTeW1ib2w8InUiJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sLmZvcil0cnl7dy5wcm90b3R5cGVbU3ltYm9sLmZvcigibm9kZWpzLnV0aWwuaW5zcGVjdC5jdXN0b20i'@;
put 'KV09TH1jYXRjaHt3LnByb3RvdHlwZS5pbnNwZWN0PUx9ZWxzZSB3LnByb3RvdHlwZS5pbnNwZWN0PUw7ZnVuY3Rpb24gTCgpe3JldHVybih0aGlzLnJlZD8iPEJOLVI6ICI6IjxCTjogIikrdGhpcy50b1N0cmluZygxNikrIj4ifXZhciBLPVsiIiwiMCIsIjAwIiwiMDAwIiwiMDAwMCIsIjAw'@;
put 'MDAwIiwiMDAwMDAwIiwiMDAwMDAwMCIsIjAwMDAwMDAwIiwiMDAwMDAwMDAwIiwiMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAw'@;
put 'MDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAw'@;
put 'MDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCJdLFU9WzAsMCwyNSwxNiwxMiwxMSwxMCw5LDgsOCw3LDcsNyw3LDYsNiw2LDYsNiw2LDYsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNV0sVz1bMCwwLDMzNTU0NDMyLDQzMDQ2NzIxLDE2Nzc3MjE2LDQ4'@;
put 'ODI4MTI1LDYwNDY2MTc2LDQwMzUzNjA3LDE2Nzc3MjE2LDQzMDQ2NzIxLDFlNywxOTQ4NzE3MSwzNTgzMTgwOCw2Mjc0ODUxNyw3NTI5NTM2LDExMzkwNjI1LDE2Nzc3MjE2LDI0MTM3NTY5LDM0MDEyMjI0LDQ3MDQ1ODgxLDY0ZTYsNDA4NDEwMSw1MTUzNjMyLDY0MzYzNDMsNzk2MjYyNCw5'@;
put 'NzY1NjI1LDExODgxMzc2LDE0MzQ4OTA3LDE3MjEwMzY4LDIwNTExMTQ5LDI0M2U1LDI4NjI5MTUxLDMzNTU0NDMyLDM5MTM1MzkzLDQ1NDM1NDI0LDUyNTIxODc1LDYwNDY2MTc2XTtmdW5jdGlvbiBlZSh4LEMsVCl7VC5uZWdhdGl2ZT1DLm5lZ2F0aXZlXngubmVnYXRpdmU7dmFyIEg9eC5s'@;
put 'ZW5ndGgrQy5sZW5ndGh8MDtULmxlbmd0aD1ILEg9SC0xfDA7dmFyIGo9MHx4LndvcmRzWzBdLEU9MHxDLndvcmRzWzBdLG09aipFLGFlPW0vNjcxMDg4NjR8MDtULndvcmRzWzBdPTY3MTA4ODYzJm07Zm9yKHZhciB0ZT0xO3RlPEg7dGUrKyl7Zm9yKHZhciBzZT1hZT4+PjI2LHdlPTY3MTA4'@;
put 'ODYzJmFlLFVlPU1hdGgubWluKHRlLEMubGVuZ3RoLTEpLEplPU1hdGgubWF4KDAsdGUteC5sZW5ndGgrMSk7SmU8PVVlO0plKyspc2UrPShtPShqPTB8eC53b3Jkc1t0ZS1KZXwwXSkqKEU9MHxDLndvcmRzW0plXSkrd2UpLzY3MTA4ODY0fDAsd2U9NjcxMDg4NjMmbTtULndvcmRzW3RlXT0w'@;
put 'fHdlLGFlPTB8c2V9cmV0dXJuIDAhPT1hZT9ULndvcmRzW3RlXT0wfGFlOlQubGVuZ3RoLS0sVC5fc3RyaXAoKX13LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbihDLFQpe3ZhciBIO2lmKFQ9MHxUfHwxLDE2PT09KEM9Q3x8MTApfHwiaGV4Ij09PUMpe0g9IiI7Zm9yKHZhciBqPTAsRT0w'@;
put 'LG09MDttPHRoaXMubGVuZ3RoO20rKyl7dmFyIEE9dGhpcy53b3Jkc1ttXSxhZT0oMTY3NzcyMTUmKEE8PGp8RSkpLnRvU3RyaW5nKDE2KTtFPUE+Pj4yNC1qJjE2Nzc3MjE1LChqKz0yKT49MjYmJihqLT0yNixtLS0pLEg9MCE9PUV8fG0hPT10aGlzLmxlbmd0aC0xP0tbNi1hZS5sZW5ndGhd'@;
put 'K2FlK0g6YWUrSH1mb3IoMCE9PUUmJihIPUUudG9TdHJpbmcoMTYpK0gpO0gubGVuZ3RoJVQhPTA7KUg9IjAiK0g7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlJiYoSD0iLSIrSCksSH1pZihDPT09KDB8QykmJkM+PTImJkM8PTM2KXt2YXIgdGU9VVtDXSxzZT1XW0NdO0g9IiI7dmFyIHdlPXRo'@;
put 'aXMuY2xvbmUoKTtmb3Iod2UubmVnYXRpdmU9MDshd2UuaXNaZXJvKCk7KXt2YXIgVWU9d2UubW9kcm4oc2UpLnRvU3RyaW5nKEMpO0g9KHdlPXdlLmlkaXZuKHNlKSkuaXNaZXJvKCk/VWUrSDpLW3RlLVVlLmxlbmd0aF0rVWUrSH1mb3IodGhpcy5pc1plcm8oKSYmKEg9IjAiK0gpO0gubGVu'@;
put 'Z3RoJVQhPTA7KUg9IjAiK0g7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlJiYoSD0iLSIrSCksSH1nKCExLCJCYXNlIHNob3VsZCBiZSBiZXR3ZWVuIDIgYW5kIDM2Iil9LHcucHJvdG90eXBlLnRvTnVtYmVyPWZ1bmN0aW9uKCl7dmFyIEM9dGhpcy53b3Jkc1swXTtyZXR1cm4gMj09PXRoaXMu'@;
put 'bGVuZ3RoP0MrPTY3MTA4ODY0KnRoaXMud29yZHNbMV06Mz09PXRoaXMubGVuZ3RoJiYxPT09dGhpcy53b3Jkc1syXT9DKz00NTAzNTk5NjI3MzcwNDk2KzY3MTA4ODY0KnRoaXMud29yZHNbMV06dGhpcy5sZW5ndGg+MiYmZyghMSwiTnVtYmVyIGNhbiBvbmx5IHNhZmVseSBzdG9yZSB1cCB0'@;
put 'byA1MyBiaXRzIiksMCE9PXRoaXMubmVnYXRpdmU/LUM6Q30sdy5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudG9TdHJpbmcoMTYsMil9LFAmJih3LnByb3RvdHlwZS50b0J1ZmZlcj1mdW5jdGlvbihDLFQpe3JldHVybiB0aGlzLnRvQXJyYXlMaWtlKFAsQyxUKX0p'@;
put 'LHcucHJvdG90eXBlLnRvQXJyYXk9ZnVuY3Rpb24oQyxUKXtyZXR1cm4gdGhpcy50b0FycmF5TGlrZShBcnJheSxDLFQpfSx3LnByb3RvdHlwZS50b0FycmF5TGlrZT1mdW5jdGlvbihDLFQsSCl7dGhpcy5fc3RyaXAoKTt2YXIgaj10aGlzLmJ5dGVMZW5ndGgoKSxFPUh8fE1hdGgubWF4KDEs'@;
put 'aik7ZyhqPD1FLCJieXRlIGFycmF5IGxvbmdlciB0aGFuIGRlc2lyZWQgbGVuZ3RoIiksZyhFPjAsIlJlcXVlc3RlZCBhcnJheSBsZW5ndGggPD0gMCIpO3ZhciBtPWZ1bmN0aW9uKEMsVCl7cmV0dXJuIEMuYWxsb2NVbnNhZmU/Qy5hbGxvY1Vuc2FmZShUKTpuZXcgQyhUKX0oQyxFKTtyZXR1'@;
put 'cm4gdGhpc1siX3RvQXJyYXlMaWtlIisoImxlIj09PVQ/IkxFIjoiQkUiKV0obSxqKSxtfSx3LnByb3RvdHlwZS5fdG9BcnJheUxpa2VMRT1mdW5jdGlvbihDLFQpe2Zvcih2YXIgSD0wLGo9MCxFPTAsbT0wO0U8dGhpcy5sZW5ndGg7RSsrKXt2YXIgQT10aGlzLndvcmRzW0VdPDxtfGo7Q1tI'@;
put 'KytdPTI1NSZBLEg8Qy5sZW5ndGgmJihDW0grK109QT4+OCYyNTUpLEg8Qy5sZW5ndGgmJihDW0grK109QT4+MTYmMjU1KSw2PT09bT8oSDxDLmxlbmd0aCYmKENbSCsrXT1BPj4yNCYyNTUpLGo9MCxtPTApOihqPUE+Pj4yNCxtKz0yKX1pZihIPEMubGVuZ3RoKWZvcihDW0grK109ajtIPEMu'@;
put 'bGVuZ3RoOylDW0grK109MH0sdy5wcm90b3R5cGUuX3RvQXJyYXlMaWtlQkU9ZnVuY3Rpb24oQyxUKXtmb3IodmFyIEg9Qy5sZW5ndGgtMSxqPTAsRT0wLG09MDtFPHRoaXMubGVuZ3RoO0UrKyl7dmFyIEE9dGhpcy53b3Jkc1tFXTw8bXxqO0NbSC0tXT0yNTUmQSxIPj0wJiYoQ1tILS1dPUE+'@;
put 'PjgmMjU1KSxIPj0wJiYoQ1tILS1dPUE+PjE2JjI1NSksNj09PW0/KEg+PTAmJihDW0gtLV09QT4+MjQmMjU1KSxqPTAsbT0wKTooaj1BPj4+MjQsbSs9Mil9aWYoSD49MClmb3IoQ1tILS1dPWo7SD49MDspQ1tILS1dPTB9LHcucHJvdG90eXBlLl9jb3VudEJpdHM9TWF0aC5jbHozMj9mdW5j'@;
put 'dGlvbihDKXtyZXR1cm4gMzItTWF0aC5jbHozMihDKX06ZnVuY3Rpb24oQyl7dmFyIFQ9QyxIPTA7cmV0dXJuIFQ+PTQwOTYmJihIKz0xMyxUPj4+PTEzKSxUPj02NCYmKEgrPTcsVD4+Pj03KSxUPj04JiYoSCs9NCxUPj4+PTQpLFQ+PTImJihIKz0yLFQ+Pj49MiksSCtUfSx3LnByb3RvdHlw'@;
put 'ZS5femVyb0JpdHM9ZnVuY3Rpb24oQyl7aWYoMD09PUMpcmV0dXJuIDI2O3ZhciBUPUMsSD0wO3JldHVybiA4MTkxJlR8fChIKz0xMyxUPj4+PTEzKSwxMjcmVHx8KEgrPTcsVD4+Pj03KSwxNSZUfHwoSCs9NCxUPj4+PTQpLDMmVHx8KEgrPTIsVD4+Pj0yKSwxJlR8fEgrKyxIfSx3LnByb3Rv'@;
put 'dHlwZS5iaXRMZW5ndGg9ZnVuY3Rpb24oKXt2YXIgVD10aGlzLl9jb3VudEJpdHModGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXSk7cmV0dXJuIDI2Kih0aGlzLmxlbmd0aC0xKStUfSx3LnByb3RvdHlwZS56ZXJvQml0cz1mdW5jdGlvbigpe2lmKHRoaXMuaXNaZXJvKCkpcmV0dXJuIDA7Zm9y'@;
put 'KHZhciBDPTAsVD0wO1Q8dGhpcy5sZW5ndGg7VCsrKXt2YXIgSD10aGlzLl96ZXJvQml0cyh0aGlzLndvcmRzW1RdKTtpZihDKz1ILDI2IT09SClicmVha31yZXR1cm4gQ30sdy5wcm90b3R5cGUuYnl0ZUxlbmd0aD1mdW5jdGlvbigpe3JldHVybiBNYXRoLmNlaWwodGhpcy5iaXRMZW5ndGgo'@;
put 'KS84KX0sdy5wcm90b3R5cGUudG9Ud29zPWZ1bmN0aW9uKEMpe3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZT90aGlzLmFicygpLmlub3RuKEMpLmlhZGRuKDEpOnRoaXMuY2xvbmUoKX0sdy5wcm90b3R5cGUuZnJvbVR3b3M9ZnVuY3Rpb24oQyl7cmV0dXJuIHRoaXMudGVzdG4oQy0xKT90aGlz'@;
put 'Lm5vdG4oQykuaWFkZG4oMSkuaW5lZygpOnRoaXMuY2xvbmUoKX0sdy5wcm90b3R5cGUuaXNOZWc9ZnVuY3Rpb24oKXtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmV9LHcucHJvdG90eXBlLm5lZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNsb25lKCkuaW5lZygpfSx3LnByb3RvdHlwZS5pbmVn'@;
put 'PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNaZXJvKCl8fCh0aGlzLm5lZ2F0aXZlXj0xKSx0aGlzfSx3LnByb3RvdHlwZS5pdW9yPWZ1bmN0aW9uKEMpe2Zvcig7dGhpcy5sZW5ndGg8Qy5sZW5ndGg7KXRoaXMud29yZHNbdGhpcy5sZW5ndGgrK109MDtmb3IodmFyIFQ9MDtUPEMubGVuZ3Ro'@;
put 'O1QrKyl0aGlzLndvcmRzW1RdPXRoaXMud29yZHNbVF18Qy53b3Jkc1tUXTtyZXR1cm4gdGhpcy5fc3RyaXAoKX0sdy5wcm90b3R5cGUuaW9yPWZ1bmN0aW9uKEMpe3JldHVybiBnKCEodGhpcy5uZWdhdGl2ZXxDLm5lZ2F0aXZlKSksdGhpcy5pdW9yKEMpfSx3LnByb3RvdHlwZS5vcj1mdW5j'@;
put 'dGlvbihDKXtyZXR1cm4gdGhpcy5sZW5ndGg+Qy5sZW5ndGg/dGhpcy5jbG9uZSgpLmlvcihDKTpDLmNsb25lKCkuaW9yKHRoaXMpfSx3LnByb3RvdHlwZS51b3I9ZnVuY3Rpb24oQyl7cmV0dXJuIHRoaXMubGVuZ3RoPkMubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdW9yKEMpOkMuY2xvbmUoKS5p'@;
put 'dW9yKHRoaXMpfSx3LnByb3RvdHlwZS5pdWFuZD1mdW5jdGlvbihDKXt2YXIgVDtUPXRoaXMubGVuZ3RoPkMubGVuZ3RoP0M6dGhpcztmb3IodmFyIEg9MDtIPFQubGVuZ3RoO0grKyl0aGlzLndvcmRzW0hdPXRoaXMud29yZHNbSF0mQy53b3Jkc1tIXTtyZXR1cm4gdGhpcy5sZW5ndGg9VC5s'@;
put 'ZW5ndGgsdGhpcy5fc3RyaXAoKX0sdy5wcm90b3R5cGUuaWFuZD1mdW5jdGlvbihDKXtyZXR1cm4gZyghKHRoaXMubmVnYXRpdmV8Qy5uZWdhdGl2ZSkpLHRoaXMuaXVhbmQoQyl9LHcucHJvdG90eXBlLmFuZD1mdW5jdGlvbihDKXtyZXR1cm4gdGhpcy5sZW5ndGg+Qy5sZW5ndGg/dGhpcy5j'@;
put 'bG9uZSgpLmlhbmQoQyk6Qy5jbG9uZSgpLmlhbmQodGhpcyl9LHcucHJvdG90eXBlLnVhbmQ9ZnVuY3Rpb24oQyl7cmV0dXJuIHRoaXMubGVuZ3RoPkMubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdWFuZChDKTpDLmNsb25lKCkuaXVhbmQodGhpcyl9LHcucHJvdG90eXBlLml1eG9yPWZ1bmN0aW9u'@;
put 'KEMpe3ZhciBULEg7dGhpcy5sZW5ndGg+Qy5sZW5ndGg/KFQ9dGhpcyxIPUMpOihUPUMsSD10aGlzKTtmb3IodmFyIGo9MDtqPEgubGVuZ3RoO2orKyl0aGlzLndvcmRzW2pdPVQud29yZHNbal1eSC53b3Jkc1tqXTtpZih0aGlzIT09VClmb3IoO2o8VC5sZW5ndGg7aisrKXRoaXMud29yZHNb'@;
put 'al09VC53b3Jkc1tqXTtyZXR1cm4gdGhpcy5sZW5ndGg9VC5sZW5ndGgsdGhpcy5fc3RyaXAoKX0sdy5wcm90b3R5cGUuaXhvcj1mdW5jdGlvbihDKXtyZXR1cm4gZyghKHRoaXMubmVnYXRpdmV8Qy5uZWdhdGl2ZSkpLHRoaXMuaXV4b3IoQyl9LHcucHJvdG90eXBlLnhvcj1mdW5jdGlvbihD'@;
put 'KXtyZXR1cm4gdGhpcy5sZW5ndGg+Qy5sZW5ndGg/dGhpcy5jbG9uZSgpLml4b3IoQyk6Qy5jbG9uZSgpLml4b3IodGhpcyl9LHcucHJvdG90eXBlLnV4b3I9ZnVuY3Rpb24oQyl7cmV0dXJuIHRoaXMubGVuZ3RoPkMubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdXhvcihDKTpDLmNsb25lKCkuaXV4'@;
put 'b3IodGhpcyl9LHcucHJvdG90eXBlLmlub3RuPWZ1bmN0aW9uKEMpe2coIm51bWJlciI9PXR5cGVvZiBDJiZDPj0wKTt2YXIgVD0wfE1hdGguY2VpbChDLzI2KSxIPUMlMjY7dGhpcy5fZXhwYW5kKFQpLEg+MCYmVC0tO2Zvcih2YXIgaj0wO2o8VDtqKyspdGhpcy53b3Jkc1tqXT02NzEwODg2'@;
put 'MyZ+dGhpcy53b3Jkc1tqXTtyZXR1cm4gSD4wJiYodGhpcy53b3Jkc1tqXT1+dGhpcy53b3Jkc1tqXSY2NzEwODg2Mz4+MjYtSCksdGhpcy5fc3RyaXAoKX0sdy5wcm90b3R5cGUubm90bj1mdW5jdGlvbihDKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlub3RuKEMpfSx3LnByb3RvdHlwZS5zZXRu'@;
put 'PWZ1bmN0aW9uKEMsVCl7ZygibnVtYmVyIj09dHlwZW9mIEMmJkM+PTApO3ZhciBIPUMvMjZ8MCxqPUMlMjY7cmV0dXJuIHRoaXMuX2V4cGFuZChIKzEpLHRoaXMud29yZHNbSF09VD90aGlzLndvcmRzW0hdfDE8PGo6dGhpcy53b3Jkc1tIXSZ+KDE8PGopLHRoaXMuX3N0cmlwKCl9LHcucHJv'@;
put 'dG90eXBlLmlhZGQ9ZnVuY3Rpb24oQyl7dmFyIFQsSCxqO2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYwPT09Qy5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLFQ9dGhpcy5pc3ViKEMpLHRoaXMubmVnYXRpdmVePTEsdGhpcy5fbm9ybVNpZ24oKTtpZigwPT09dGhpcy5uZWdhdGl2ZSYm'@;
put 'MCE9PUMubmVnYXRpdmUpcmV0dXJuIEMubmVnYXRpdmU9MCxUPXRoaXMuaXN1YihDKSxDLm5lZ2F0aXZlPTEsVC5fbm9ybVNpZ24oKTt0aGlzLmxlbmd0aD5DLmxlbmd0aD8oSD10aGlzLGo9Qyk6KEg9QyxqPXRoaXMpO2Zvcih2YXIgRT0wLG09MDttPGoubGVuZ3RoO20rKyl0aGlzLndvcmRz'@;
put 'W21dPTY3MTA4ODYzJihUPSgwfEgud29yZHNbbV0pKygwfGoud29yZHNbbV0pK0UpLEU9VD4+PjI2O2Zvcig7MCE9PUUmJm08SC5sZW5ndGg7bSsrKXRoaXMud29yZHNbbV09NjcxMDg4NjMmKFQ9KDB8SC53b3Jkc1ttXSkrRSksRT1UPj4+MjY7aWYodGhpcy5sZW5ndGg9SC5sZW5ndGgsMCE9'@;
put 'PUUpdGhpcy53b3Jkc1t0aGlzLmxlbmd0aF09RSx0aGlzLmxlbmd0aCsrO2Vsc2UgaWYoSCE9PXRoaXMpZm9yKDttPEgubGVuZ3RoO20rKyl0aGlzLndvcmRzW21dPUgud29yZHNbbV07cmV0dXJuIHRoaXN9LHcucHJvdG90eXBlLmFkZD1mdW5jdGlvbihDKXt2YXIgVDtyZXR1cm4gMCE9PUMu'@;
put 'bmVnYXRpdmUmJjA9PT10aGlzLm5lZ2F0aXZlPyhDLm5lZ2F0aXZlPTAsVD10aGlzLnN1YihDKSxDLm5lZ2F0aXZlXj0xLFQpOjA9PT1DLm5lZ2F0aXZlJiYwIT09dGhpcy5uZWdhdGl2ZT8odGhpcy5uZWdhdGl2ZT0wLFQ9Qy5zdWIodGhpcyksdGhpcy5uZWdhdGl2ZT0xLFQpOnRoaXMubGVu'@;
put 'Z3RoPkMubGVuZ3RoP3RoaXMuY2xvbmUoKS5pYWRkKEMpOkMuY2xvbmUoKS5pYWRkKHRoaXMpfSx3LnByb3RvdHlwZS5pc3ViPWZ1bmN0aW9uKEMpe2lmKDAhPT1DLm5lZ2F0aXZlKXtDLm5lZ2F0aXZlPTA7dmFyIFQ9dGhpcy5pYWRkKEMpO3JldHVybiBDLm5lZ2F0aXZlPTEsVC5fbm9ybVNp'@;
put 'Z24oKX1pZigwIT09dGhpcy5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMuaWFkZChDKSx0aGlzLm5lZ2F0aXZlPTEsdGhpcy5fbm9ybVNpZ24oKTt2YXIgaixFLEg9dGhpcy5jbXAoQyk7aWYoMD09PUgpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmxlbmd0aD0xLHRo'@;
put 'aXMud29yZHNbMF09MCx0aGlzO0g+MD8oaj10aGlzLEU9Qyk6KGo9QyxFPXRoaXMpO2Zvcih2YXIgbT0wLEE9MDtBPEUubGVuZ3RoO0ErKyltPShUPSgwfGoud29yZHNbQV0pLSgwfEUud29yZHNbQV0pK20pPj4yNix0aGlzLndvcmRzW0FdPTY3MTA4ODYzJlQ7Zm9yKDswIT09bSYmQTxqLmxl'@;
put 'bmd0aDtBKyspbT0oVD0oMHxqLndvcmRzW0FdKSttKT4+MjYsdGhpcy53b3Jkc1tBXT02NzEwODg2MyZUO2lmKDA9PT1tJiZBPGoubGVuZ3RoJiZqIT09dGhpcylmb3IoO0E8ai5sZW5ndGg7QSsrKXRoaXMud29yZHNbQV09ai53b3Jkc1tBXTtyZXR1cm4gdGhpcy5sZW5ndGg9TWF0aC5tYXgo'@;
put 'dGhpcy5sZW5ndGgsQSksaiE9PXRoaXMmJih0aGlzLm5lZ2F0aXZlPTEpLHRoaXMuX3N0cmlwKCl9LHcucHJvdG90eXBlLnN1Yj1mdW5jdGlvbihDKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzdWIoQyl9O3ZhciBKPWZ1bmN0aW9uKEMsVCxIKXt2YXIgYWUsdGUsc2Usaj1DLndvcmRzLEU9VC53'@;
put 'b3JkcyxtPUgud29yZHMsQT0wLHdlPTB8alswXSxVZT04MTkxJndlLEplPXdlPj4+MTMsb3Q9MHxqWzFdLHhlPTgxOTEmb3QsdmU9b3Q+Pj4xMyxYZT0wfGpbMl0semU9ODE5MSZYZSxEZT1YZT4+PjEzLEZlPTB8alszXSxPZT04MTkxJkZlLEllPUZlPj4+MTMsVmU9MHxqWzRdLGtlPTgxOTEm'@;
put 'VmUsQWU9VmU+Pj4xMyxfdD0wfGpbNV0sbnQ9ODE5MSZfdCxRZT1fdD4+PjEzLHVuPTB8als2XSx5dD04MTkxJnVuLE10PXVuPj4+MTMsRHQ9MHxqWzddLGl0PTgxOTEmRHQsJGU9RHQ+Pj4xMyx0dD0wfGpbOF0sSGU9ODE5MSZ0dCx1dD10dD4+PjEzLHF0PTB8als5XSxSdD04MTkxJnF0LFB0'@;
put 'PXF0Pj4+MTMsY2k9MHxFWzBdLFF0PTgxOTEmY2ksc249Y2k+Pj4xMyxSaT0wfEVbMV0saG49ODE5MSZSaSxmdD1SaT4+PjEzLE9yPTB8RVsyXSxXdD04MTkxJk9yLEF0PU9yPj4+MTMsUm49MHxFWzNdLHN0PTgxOTEmUm4sVXQ9Um4+Pj4xMyxyaT0wfEVbNF0sV2U9ODE5MSZyaSxUdD1yaT4+'@;
put 'PjEzLG5yPTB8RVs1XSxodD04MTkxJm5yLHh0PW5yPj4+MTMsam49MHxFWzZdLHJuPTgxOTEmam4senQ9am4+Pj4xMyxoaT0wfEVbN10sY249ODE5MSZoaSxmbj1oaT4+PjEzLElpPTB8RVs4XSxYdD04MTkxJklpLGVuPUlpPj4+MTMsdWE9MHxFWzldLEVpPTgxOTEmdWEsdnI9dWE+Pj4xMztI'@;
put 'Lm5lZ2F0aXZlPUMubmVnYXRpdmVeVC5uZWdhdGl2ZSxILmxlbmd0aD0xOTt2YXIgV249KEErKGFlPU1hdGguaW11bChVZSxRdCkpfDApKygoODE5MSYodGU9KHRlPU1hdGguaW11bChVZSxzbikpK01hdGguaW11bChKZSxRdCl8MCkpPDwxMyl8MDtBPSgoc2U9TWF0aC5pbXVsKEplLHNuKSkr'@;
put 'KHRlPj4+MTMpfDApKyhXbj4+PjI2KXwwLFduJj02NzEwODg2MyxhZT1NYXRoLmltdWwoeGUsUXQpLHRlPSh0ZT1NYXRoLmltdWwoeGUsc24pKStNYXRoLmltdWwodmUsUXQpfDAsc2U9TWF0aC5pbXVsKHZlLHNuKTt2YXIgJGk9KEErKGFlPWFlK01hdGguaW11bChVZSxobil8MCl8MCkrKCg4'@;
put 'MTkxJih0ZT0odGU9dGUrTWF0aC5pbXVsKFVlLGZ0KXwwKStNYXRoLmltdWwoSmUsaG4pfDApKTw8MTMpfDA7QT0oKHNlPXNlK01hdGguaW11bChKZSxmdCl8MCkrKHRlPj4+MTMpfDApKygkaT4+PjI2KXwwLCRpJj02NzEwODg2MyxhZT1NYXRoLmltdWwoemUsUXQpLHRlPSh0ZT1NYXRoLmlt'@;
put 'dWwoemUsc24pKStNYXRoLmltdWwoRGUsUXQpfDAsc2U9TWF0aC5pbXVsKERlLHNuKSxhZT1hZStNYXRoLmltdWwoeGUsaG4pfDAsdGU9KHRlPXRlK01hdGguaW11bCh4ZSxmdCl8MCkrTWF0aC5pbXVsKHZlLGhuKXwwLHNlPXNlK01hdGguaW11bCh2ZSxmdCl8MDt2YXIgZWk9KEErKGFlPWFl'@;
put 'K01hdGguaW11bChVZSxXdCl8MCl8MCkrKCg4MTkxJih0ZT0odGU9dGUrTWF0aC5pbXVsKFVlLEF0KXwwKStNYXRoLmltdWwoSmUsV3QpfDApKTw8MTMpfDA7QT0oKHNlPXNlK01hdGguaW11bChKZSxBdCl8MCkrKHRlPj4+MTMpfDApKyhlaT4+PjI2KXwwLGVpJj02NzEwODg2MyxhZT1NYXRo'@;
put 'LmltdWwoT2UsUXQpLHRlPSh0ZT1NYXRoLmltdWwoT2Usc24pKStNYXRoLmltdWwoSWUsUXQpfDAsc2U9TWF0aC5pbXVsKEllLHNuKSxhZT1hZStNYXRoLmltdWwoemUsaG4pfDAsdGU9KHRlPXRlK01hdGguaW11bCh6ZSxmdCl8MCkrTWF0aC5pbXVsKERlLGhuKXwwLHNlPXNlK01hdGguaW11'@;
put 'bChEZSxmdCl8MCxhZT1hZStNYXRoLmltdWwoeGUsV3QpfDAsdGU9KHRlPXRlK01hdGguaW11bCh4ZSxBdCl8MCkrTWF0aC5pbXVsKHZlLFd0KXwwLHNlPXNlK01hdGguaW11bCh2ZSxBdCl8MDt2YXIgUXI9KEErKGFlPWFlK01hdGguaW11bChVZSxzdCl8MCl8MCkrKCg4MTkxJih0ZT0odGU9'@;
put 'dGUrTWF0aC5pbXVsKFVlLFV0KXwwKStNYXRoLmltdWwoSmUsc3QpfDApKTw8MTMpfDA7QT0oKHNlPXNlK01hdGguaW11bChKZSxVdCl8MCkrKHRlPj4+MTMpfDApKyhRcj4+PjI2KXwwLFFyJj02NzEwODg2MyxhZT1NYXRoLmltdWwoa2UsUXQpLHRlPSh0ZT1NYXRoLmltdWwoa2Usc24pKStN'@;
put 'YXRoLmltdWwoQWUsUXQpfDAsc2U9TWF0aC5pbXVsKEFlLHNuKSxhZT1hZStNYXRoLmltdWwoT2UsaG4pfDAsdGU9KHRlPXRlK01hdGguaW11bChPZSxmdCl8MCkrTWF0aC5pbXVsKEllLGhuKXwwLHNlPXNlK01hdGguaW11bChJZSxmdCl8MCxhZT1hZStNYXRoLmltdWwoemUsV3QpfDAsdGU9'@;
put 'KHRlPXRlK01hdGguaW11bCh6ZSxBdCl8MCkrTWF0aC5pbXVsKERlLFd0KXwwLHNlPXNlK01hdGguaW11bChEZSxBdCl8MCxhZT1hZStNYXRoLmltdWwoeGUsc3QpfDAsdGU9KHRlPXRlK01hdGguaW11bCh4ZSxVdCl8MCkrTWF0aC5pbXVsKHZlLHN0KXwwLHNlPXNlK01hdGguaW11bCh2ZSxV'@;
put 'dCl8MDt2YXIgVmk9KEErKGFlPWFlK01hdGguaW11bChVZSxXZSl8MCl8MCkrKCg4MTkxJih0ZT0odGU9dGUrTWF0aC5pbXVsKFVlLFR0KXwwKStNYXRoLmltdWwoSmUsV2UpfDApKTw8MTMpfDA7QT0oKHNlPXNlK01hdGguaW11bChKZSxUdCl8MCkrKHRlPj4+MTMpfDApKyhWaT4+PjI2KXww'@;
put 'LFZpJj02NzEwODg2MyxhZT1NYXRoLmltdWwobnQsUXQpLHRlPSh0ZT1NYXRoLmltdWwobnQsc24pKStNYXRoLmltdWwoUWUsUXQpfDAsc2U9TWF0aC5pbXVsKFFlLHNuKSxhZT1hZStNYXRoLmltdWwoa2UsaG4pfDAsdGU9KHRlPXRlK01hdGguaW11bChrZSxmdCl8MCkrTWF0aC5pbXVsKEFl'@;
put 'LGhuKXwwLHNlPXNlK01hdGguaW11bChBZSxmdCl8MCxhZT1hZStNYXRoLmltdWwoT2UsV3QpfDAsdGU9KHRlPXRlK01hdGguaW11bChPZSxBdCl8MCkrTWF0aC5pbXVsKEllLFd0KXwwLHNlPXNlK01hdGguaW11bChJZSxBdCl8MCxhZT1hZStNYXRoLmltdWwoemUsc3QpfDAsdGU9KHRlPXRl'@;
put 'K01hdGguaW11bCh6ZSxVdCl8MCkrTWF0aC5pbXVsKERlLHN0KXwwLHNlPXNlK01hdGguaW11bChEZSxVdCl8MCxhZT1hZStNYXRoLmltdWwoeGUsV2UpfDAsdGU9KHRlPXRlK01hdGguaW11bCh4ZSxUdCl8MCkrTWF0aC5pbXVsKHZlLFdlKXwwLHNlPXNlK01hdGguaW11bCh2ZSxUdCl8MDt2'@;
put 'YXIgTmk9KEErKGFlPWFlK01hdGguaW11bChVZSxodCl8MCl8MCkrKCg4MTkxJih0ZT0odGU9dGUrTWF0aC5pbXVsKFVlLHh0KXwwKStNYXRoLmltdWwoSmUsaHQpfDApKTw8MTMpfDA7QT0oKHNlPXNlK01hdGguaW11bChKZSx4dCl8MCkrKHRlPj4+MTMpfDApKyhOaT4+PjI2KXwwLE5pJj02'@;
put 'NzEwODg2MyxhZT1NYXRoLmltdWwoeXQsUXQpLHRlPSh0ZT1NYXRoLmltdWwoeXQsc24pKStNYXRoLmltdWwoTXQsUXQpfDAsc2U9TWF0aC5pbXVsKE10LHNuKSxhZT1hZStNYXRoLmltdWwobnQsaG4pfDAsdGU9KHRlPXRlK01hdGguaW11bChudCxmdCl8MCkrTWF0aC5pbXVsKFFlLGhuKXww'@;
put 'LHNlPXNlK01hdGguaW11bChRZSxmdCl8MCxhZT1hZStNYXRoLmltdWwoa2UsV3QpfDAsdGU9KHRlPXRlK01hdGguaW11bChrZSxBdCl8MCkrTWF0aC5pbXVsKEFlLFd0KXwwLHNlPXNlK01hdGguaW11bChBZSxBdCl8MCxhZT1hZStNYXRoLmltdWwoT2Usc3QpfDAsdGU9KHRlPXRlK01hdGgu'@;
put 'aW11bChPZSxVdCl8MCkrTWF0aC5pbXVsKEllLHN0KXwwLHNlPXNlK01hdGguaW11bChJZSxVdCl8MCxhZT1hZStNYXRoLmltdWwoemUsV2UpfDAsdGU9KHRlPXRlK01hdGguaW11bCh6ZSxUdCl8MCkrTWF0aC5pbXVsKERlLFdlKXwwLHNlPXNlK01hdGguaW11bChEZSxUdCl8MCxhZT1hZStN'@;
put 'YXRoLmltdWwoeGUsaHQpfDAsdGU9KHRlPXRlK01hdGguaW11bCh4ZSx4dCl8MCkrTWF0aC5pbXVsKHZlLGh0KXwwLHNlPXNlK01hdGguaW11bCh2ZSx4dCl8MDt2YXIgRGE9KEErKGFlPWFlK01hdGguaW11bChVZSxybil8MCl8MCkrKCg4MTkxJih0ZT0odGU9dGUrTWF0aC5pbXVsKFVlLHp0'@;
put 'KXwwKStNYXRoLmltdWwoSmUscm4pfDApKTw8MTMpfDA7QT0oKHNlPXNlK01hdGguaW11bChKZSx6dCl8MCkrKHRlPj4+MTMpfDApKyhEYT4+PjI2KXwwLERhJj02NzEwODg2MyxhZT1NYXRoLmltdWwoaXQsUXQpLHRlPSh0ZT1NYXRoLmltdWwoaXQsc24pKStNYXRoLmltdWwoJGUsUXQpfDAs'@;
put 'c2U9TWF0aC5pbXVsKCRlLHNuKSxhZT1hZStNYXRoLmltdWwoeXQsaG4pfDAsdGU9KHRlPXRlK01hdGguaW11bCh5dCxmdCl8MCkrTWF0aC5pbXVsKE10LGhuKXwwLHNlPXNlK01hdGguaW11bChNdCxmdCl8MCxhZT1hZStNYXRoLmltdWwobnQsV3QpfDAsdGU9KHRlPXRlK01hdGguaW11bChu'@;
put 'dCxBdCl8MCkrTWF0aC5pbXVsKFFlLFd0KXwwLHNlPXNlK01hdGguaW11bChRZSxBdCl8MCxhZT1hZStNYXRoLmltdWwoa2Usc3QpfDAsdGU9KHRlPXRlK01hdGguaW11bChrZSxVdCl8MCkrTWF0aC5pbXVsKEFlLHN0KXwwLHNlPXNlK01hdGguaW11bChBZSxVdCl8MCxhZT1hZStNYXRoLmlt'@;
put 'dWwoT2UsV2UpfDAsdGU9KHRlPXRlK01hdGguaW11bChPZSxUdCl8MCkrTWF0aC5pbXVsKEllLFdlKXwwLHNlPXNlK01hdGguaW11bChJZSxUdCl8MCxhZT1hZStNYXRoLmltdWwoemUsaHQpfDAsdGU9KHRlPXRlK01hdGguaW11bCh6ZSx4dCl8MCkrTWF0aC5pbXVsKERlLGh0KXwwLHNlPXNl'@;
put 'K01hdGguaW11bChEZSx4dCl8MCxhZT1hZStNYXRoLmltdWwoeGUscm4pfDAsdGU9KHRlPXRlK01hdGguaW11bCh4ZSx6dCl8MCkrTWF0aC5pbXVsKHZlLHJuKXwwLHNlPXNlK01hdGguaW11bCh2ZSx6dCl8MDt2YXIgTHI9KEErKGFlPWFlK01hdGguaW11bChVZSxjbil8MCl8MCkrKCg4MTkx'@;
put 'Jih0ZT0odGU9dGUrTWF0aC5pbXVsKFVlLGZuKXwwKStNYXRoLmltdWwoSmUsY24pfDApKTw8MTMpfDA7QT0oKHNlPXNlK01hdGguaW11bChKZSxmbil8MCkrKHRlPj4+MTMpfDApKyhMcj4+PjI2KXwwLExyJj02NzEwODg2MyxhZT1NYXRoLmltdWwoSGUsUXQpLHRlPSh0ZT1NYXRoLmltdWwo'@;
put 'SGUsc24pKStNYXRoLmltdWwodXQsUXQpfDAsc2U9TWF0aC5pbXVsKHV0LHNuKSxhZT1hZStNYXRoLmltdWwoaXQsaG4pfDAsdGU9KHRlPXRlK01hdGguaW11bChpdCxmdCl8MCkrTWF0aC5pbXVsKCRlLGhuKXwwLHNlPXNlK01hdGguaW11bCgkZSxmdCl8MCxhZT1hZStNYXRoLmltdWwoeXQs'@;
put 'V3QpfDAsdGU9KHRlPXRlK01hdGguaW11bCh5dCxBdCl8MCkrTWF0aC5pbXVsKE10LFd0KXwwLHNlPXNlK01hdGguaW11bChNdCxBdCl8MCxhZT1hZStNYXRoLmltdWwobnQsc3QpfDAsdGU9KHRlPXRlK01hdGguaW11bChudCxVdCl8MCkrTWF0aC5pbXVsKFFlLHN0KXwwLHNlPXNlK01hdGgu'@;
put 'aW11bChRZSxVdCl8MCxhZT1hZStNYXRoLmltdWwoa2UsV2UpfDAsdGU9KHRlPXRlK01hdGguaW11bChrZSxUdCl8MCkrTWF0aC5pbXVsKEFlLFdlKXwwLHNlPXNlK01hdGguaW11bChBZSxUdCl8MCxhZT1hZStNYXRoLmltdWwoT2UsaHQpfDAsdGU9KHRlPXRlK01hdGguaW11bChPZSx4dCl8'@;
put 'MCkrTWF0aC5pbXVsKEllLGh0KXwwLHNlPXNlK01hdGguaW11bChJZSx4dCl8MCxhZT1hZStNYXRoLmltdWwoemUscm4pfDAsdGU9KHRlPXRlK01hdGguaW11bCh6ZSx6dCl8MCkrTWF0aC5pbXVsKERlLHJuKXwwLHNlPXNlK01hdGguaW11bChEZSx6dCl8MCxhZT1hZStNYXRoLmltdWwoeGUs'@;
put 'Y24pfDAsdGU9KHRlPXRlK01hdGguaW11bCh4ZSxmbil8MCkrTWF0aC5pbXVsKHZlLGNuKXwwLHNlPXNlK01hdGguaW11bCh2ZSxmbil8MDt2YXIgV2k9KEErKGFlPWFlK01hdGguaW11bChVZSxYdCl8MCl8MCkrKCg4MTkxJih0ZT0odGU9dGUrTWF0aC5pbXVsKFVlLGVuKXwwKStNYXRoLmlt'@;
put 'dWwoSmUsWHQpfDApKTw8MTMpfDA7QT0oKHNlPXNlK01hdGguaW11bChKZSxlbil8MCkrKHRlPj4+MTMpfDApKyhXaT4+PjI2KXwwLFdpJj02NzEwODg2MyxhZT1NYXRoLmltdWwoUnQsUXQpLHRlPSh0ZT1NYXRoLmltdWwoUnQsc24pKStNYXRoLmltdWwoUHQsUXQpfDAsc2U9TWF0aC5pbXVs'@;
put 'KFB0LHNuKSxhZT1hZStNYXRoLmltdWwoSGUsaG4pfDAsdGU9KHRlPXRlK01hdGguaW11bChIZSxmdCl8MCkrTWF0aC5pbXVsKHV0LGhuKXwwLHNlPXNlK01hdGguaW11bCh1dCxmdCl8MCxhZT1hZStNYXRoLmltdWwoaXQsV3QpfDAsdGU9KHRlPXRlK01hdGguaW11bChpdCxBdCl8MCkrTWF0'@;
put 'aC5pbXVsKCRlLFd0KXwwLHNlPXNlK01hdGguaW11bCgkZSxBdCl8MCxhZT1hZStNYXRoLmltdWwoeXQsc3QpfDAsdGU9KHRlPXRlK01hdGguaW11bCh5dCxVdCl8MCkrTWF0aC5pbXVsKE10LHN0KXwwLHNlPXNlK01hdGguaW11bChNdCxVdCl8MCxhZT1hZStNYXRoLmltdWwobnQsV2UpfDAs'@;
put 'dGU9KHRlPXRlK01hdGguaW11bChudCxUdCl8MCkrTWF0aC5pbXVsKFFlLFdlKXwwLHNlPXNlK01hdGguaW11bChRZSxUdCl8MCxhZT1hZStNYXRoLmltdWwoa2UsaHQpfDAsdGU9KHRlPXRlK01hdGguaW11bChrZSx4dCl8MCkrTWF0aC5pbXVsKEFlLGh0KXwwLHNlPXNlK01hdGguaW11bChB'@;
put 'ZSx4dCl8MCxhZT1hZStNYXRoLmltdWwoT2Uscm4pfDAsdGU9KHRlPXRlK01hdGguaW11bChPZSx6dCl8MCkrTWF0aC5pbXVsKEllLHJuKXwwLHNlPXNlK01hdGguaW11bChJZSx6dCl8MCxhZT1hZStNYXRoLmltdWwoemUsY24pfDAsdGU9KHRlPXRlK01hdGguaW11bCh6ZSxmbil8MCkrTWF0'@;
put 'aC5pbXVsKERlLGNuKXwwLHNlPXNlK01hdGguaW11bChEZSxmbil8MCxhZT1hZStNYXRoLmltdWwoeGUsWHQpfDAsdGU9KHRlPXRlK01hdGguaW11bCh4ZSxlbil8MCkrTWF0aC5pbXVsKHZlLFh0KXwwLHNlPXNlK01hdGguaW11bCh2ZSxlbil8MDt2YXIgcGE9KEErKGFlPWFlK01hdGguaW11'@;
put 'bChVZSxFaSl8MCl8MCkrKCg4MTkxJih0ZT0odGU9dGUrTWF0aC5pbXVsKFVlLHZyKXwwKStNYXRoLmltdWwoSmUsRWkpfDApKTw8MTMpfDA7QT0oKHNlPXNlK01hdGguaW11bChKZSx2cil8MCkrKHRlPj4+MTMpfDApKyhwYT4+PjI2KXwwLHBhJj02NzEwODg2MyxhZT1NYXRoLmltdWwoUnQs'@;
put 'aG4pLHRlPSh0ZT1NYXRoLmltdWwoUnQsZnQpKStNYXRoLmltdWwoUHQsaG4pfDAsc2U9TWF0aC5pbXVsKFB0LGZ0KSxhZT1hZStNYXRoLmltdWwoSGUsV3QpfDAsdGU9KHRlPXRlK01hdGguaW11bChIZSxBdCl8MCkrTWF0aC5pbXVsKHV0LFd0KXwwLHNlPXNlK01hdGguaW11bCh1dCxBdCl8'@;
put 'MCxhZT1hZStNYXRoLmltdWwoaXQsc3QpfDAsdGU9KHRlPXRlK01hdGguaW11bChpdCxVdCl8MCkrTWF0aC5pbXVsKCRlLHN0KXwwLHNlPXNlK01hdGguaW11bCgkZSxVdCl8MCxhZT1hZStNYXRoLmltdWwoeXQsV2UpfDAsdGU9KHRlPXRlK01hdGguaW11bCh5dCxUdCl8MCkrTWF0aC5pbXVs'@;
put 'KE10LFdlKXwwLHNlPXNlK01hdGguaW11bChNdCxUdCl8MCxhZT1hZStNYXRoLmltdWwobnQsaHQpfDAsdGU9KHRlPXRlK01hdGguaW11bChudCx4dCl8MCkrTWF0aC5pbXVsKFFlLGh0KXwwLHNlPXNlK01hdGguaW11bChRZSx4dCl8MCxhZT1hZStNYXRoLmltdWwoa2Uscm4pfDAsdGU9KHRl'@;
put 'PXRlK01hdGguaW11bChrZSx6dCl8MCkrTWF0aC5pbXVsKEFlLHJuKXwwLHNlPXNlK01hdGguaW11bChBZSx6dCl8MCxhZT1hZStNYXRoLmltdWwoT2UsY24pfDAsdGU9KHRlPXRlK01hdGguaW11bChPZSxmbil8MCkrTWF0aC5pbXVsKEllLGNuKXwwLHNlPXNlK01hdGguaW11bChJZSxmbil8'@;
put 'MCxhZT1hZStNYXRoLmltdWwoemUsWHQpfDAsdGU9KHRlPXRlK01hdGguaW11bCh6ZSxlbil8MCkrTWF0aC5pbXVsKERlLFh0KXwwLHNlPXNlK01hdGguaW11bChEZSxlbil8MDt2YXIgUW49KEErKGFlPWFlK01hdGguaW11bCh4ZSxFaSl8MCl8MCkrKCg4MTkxJih0ZT0odGU9dGUrTWF0aC5p'@;
put 'bXVsKHhlLHZyKXwwKStNYXRoLmltdWwodmUsRWkpfDApKTw8MTMpfDA7QT0oKHNlPXNlK01hdGguaW11bCh2ZSx2cil8MCkrKHRlPj4+MTMpfDApKyhRbj4+PjI2KXwwLFFuJj02NzEwODg2MyxhZT1NYXRoLmltdWwoUnQsV3QpLHRlPSh0ZT1NYXRoLmltdWwoUnQsQXQpKStNYXRoLmltdWwo'@;
put 'UHQsV3QpfDAsc2U9TWF0aC5pbXVsKFB0LEF0KSxhZT1hZStNYXRoLmltdWwoSGUsc3QpfDAsdGU9KHRlPXRlK01hdGguaW11bChIZSxVdCl8MCkrTWF0aC5pbXVsKHV0LHN0KXwwLHNlPXNlK01hdGguaW11bCh1dCxVdCl8MCxhZT1hZStNYXRoLmltdWwoaXQsV2UpfDAsdGU9KHRlPXRlK01h'@;
put 'dGguaW11bChpdCxUdCl8MCkrTWF0aC5pbXVsKCRlLFdlKXwwLHNlPXNlK01hdGguaW11bCgkZSxUdCl8MCxhZT1hZStNYXRoLmltdWwoeXQsaHQpfDAsdGU9KHRlPXRlK01hdGguaW11bCh5dCx4dCl8MCkrTWF0aC5pbXVsKE10LGh0KXwwLHNlPXNlK01hdGguaW11bChNdCx4dCl8MCxhZT1h'@;
put 'ZStNYXRoLmltdWwobnQscm4pfDAsdGU9KHRlPXRlK01hdGguaW11bChudCx6dCl8MCkrTWF0aC5pbXVsKFFlLHJuKXwwLHNlPXNlK01hdGguaW11bChRZSx6dCl8MCxhZT1hZStNYXRoLmltdWwoa2UsY24pfDAsdGU9KHRlPXRlK01hdGguaW11bChrZSxmbil8MCkrTWF0aC5pbXVsKEFlLGNu'@;
put 'KXwwLHNlPXNlK01hdGguaW11bChBZSxmbil8MCxhZT1hZStNYXRoLmltdWwoT2UsWHQpfDAsdGU9KHRlPXRlK01hdGguaW11bChPZSxlbil8MCkrTWF0aC5pbXVsKEllLFh0KXwwLHNlPXNlK01hdGguaW11bChJZSxlbil8MDt2YXIgbGE9KEErKGFlPWFlK01hdGguaW11bCh6ZSxFaSl8MCl8'@;
put 'MCkrKCg4MTkxJih0ZT0odGU9dGUrTWF0aC5pbXVsKHplLHZyKXwwKStNYXRoLmltdWwoRGUsRWkpfDApKTw8MTMpfDA7QT0oKHNlPXNlK01hdGguaW11bChEZSx2cil8MCkrKHRlPj4+MTMpfDApKyhsYT4+PjI2KXwwLGxhJj02NzEwODg2MyxhZT1NYXRoLmltdWwoUnQsc3QpLHRlPSh0ZT1N'@;
put 'YXRoLmltdWwoUnQsVXQpKStNYXRoLmltdWwoUHQsc3QpfDAsc2U9TWF0aC5pbXVsKFB0LFV0KSxhZT1hZStNYXRoLmltdWwoSGUsV2UpfDAsdGU9KHRlPXRlK01hdGguaW11bChIZSxUdCl8MCkrTWF0aC5pbXVsKHV0LFdlKXwwLHNlPXNlK01hdGguaW11bCh1dCxUdCl8MCxhZT1hZStNYXRo'@;
put 'LmltdWwoaXQsaHQpfDAsdGU9KHRlPXRlK01hdGguaW11bChpdCx4dCl8MCkrTWF0aC5pbXVsKCRlLGh0KXwwLHNlPXNlK01hdGguaW11bCgkZSx4dCl8MCxhZT1hZStNYXRoLmltdWwoeXQscm4pfDAsdGU9KHRlPXRlK01hdGguaW11bCh5dCx6dCl8MCkrTWF0aC5pbXVsKE10LHJuKXwwLHNl'@;
put 'PXNlK01hdGguaW11bChNdCx6dCl8MCxhZT1hZStNYXRoLmltdWwobnQsY24pfDAsdGU9KHRlPXRlK01hdGguaW11bChudCxmbil8MCkrTWF0aC5pbXVsKFFlLGNuKXwwLHNlPXNlK01hdGguaW11bChRZSxmbil8MCxhZT1hZStNYXRoLmltdWwoa2UsWHQpfDAsdGU9KHRlPXRlK01hdGguaW11'@;
put 'bChrZSxlbil8MCkrTWF0aC5pbXVsKEFlLFh0KXwwLHNlPXNlK01hdGguaW11bChBZSxlbil8MDt2YXIgeWE9KEErKGFlPWFlK01hdGguaW11bChPZSxFaSl8MCl8MCkrKCg4MTkxJih0ZT0odGU9dGUrTWF0aC5pbXVsKE9lLHZyKXwwKStNYXRoLmltdWwoSWUsRWkpfDApKTw8MTMpfDA7QT0o'@;
put 'KHNlPXNlK01hdGguaW11bChJZSx2cil8MCkrKHRlPj4+MTMpfDApKyh5YT4+PjI2KXwwLHlhJj02NzEwODg2MyxhZT1NYXRoLmltdWwoUnQsV2UpLHRlPSh0ZT1NYXRoLmltdWwoUnQsVHQpKStNYXRoLmltdWwoUHQsV2UpfDAsc2U9TWF0aC5pbXVsKFB0LFR0KSxhZT1hZStNYXRoLmltdWwo'@;
put 'SGUsaHQpfDAsdGU9KHRlPXRlK01hdGguaW11bChIZSx4dCl8MCkrTWF0aC5pbXVsKHV0LGh0KXwwLHNlPXNlK01hdGguaW11bCh1dCx4dCl8MCxhZT1hZStNYXRoLmltdWwoaXQscm4pfDAsdGU9KHRlPXRlK01hdGguaW11bChpdCx6dCl8MCkrTWF0aC5pbXVsKCRlLHJuKXwwLHNlPXNlK01h'@;
put 'dGguaW11bCgkZSx6dCl8MCxhZT1hZStNYXRoLmltdWwoeXQsY24pfDAsdGU9KHRlPXRlK01hdGguaW11bCh5dCxmbil8MCkrTWF0aC5pbXVsKE10LGNuKXwwLHNlPXNlK01hdGguaW11bChNdCxmbil8MCxhZT1hZStNYXRoLmltdWwobnQsWHQpfDAsdGU9KHRlPXRlK01hdGguaW11bChudCxl'@;
put 'bil8MCkrTWF0aC5pbXVsKFFlLFh0KXwwLHNlPXNlK01hdGguaW11bChRZSxlbil8MDt2YXIgTGE9KEErKGFlPWFlK01hdGguaW11bChrZSxFaSl8MCl8MCkrKCg4MTkxJih0ZT0odGU9dGUrTWF0aC5pbXVsKGtlLHZyKXwwKStNYXRoLmltdWwoQWUsRWkpfDApKTw8MTMpfDA7QT0oKHNlPXNl'@;
put 'K01hdGguaW11bChBZSx2cil8MCkrKHRlPj4+MTMpfDApKyhMYT4+PjI2KXwwLExhJj02NzEwODg2MyxhZT1NYXRoLmltdWwoUnQsaHQpLHRlPSh0ZT1NYXRoLmltdWwoUnQseHQpKStNYXRoLmltdWwoUHQsaHQpfDAsc2U9TWF0aC5pbXVsKFB0LHh0KSxhZT1hZStNYXRoLmltdWwoSGUscm4p'@;
put 'fDAsdGU9KHRlPXRlK01hdGguaW11bChIZSx6dCl8MCkrTWF0aC5pbXVsKHV0LHJuKXwwLHNlPXNlK01hdGguaW11bCh1dCx6dCl8MCxhZT1hZStNYXRoLmltdWwoaXQsY24pfDAsdGU9KHRlPXRlK01hdGguaW11bChpdCxmbil8MCkrTWF0aC5pbXVsKCRlLGNuKXwwLHNlPXNlK01hdGguaW11'@;
put 'bCgkZSxmbil8MCxhZT1hZStNYXRoLmltdWwoeXQsWHQpfDAsdGU9KHRlPXRlK01hdGguaW11bCh5dCxlbil8MCkrTWF0aC5pbXVsKE10LFh0KXwwLHNlPXNlK01hdGguaW11bChNdCxlbil8MDt2YXIgRmE9KEErKGFlPWFlK01hdGguaW11bChudCxFaSl8MCl8MCkrKCg4MTkxJih0ZT0odGU9'@;
put 'dGUrTWF0aC5pbXVsKG50LHZyKXwwKStNYXRoLmltdWwoUWUsRWkpfDApKTw8MTMpfDA7QT0oKHNlPXNlK01hdGguaW11bChRZSx2cil8MCkrKHRlPj4+MTMpfDApKyhGYT4+PjI2KXwwLEZhJj02NzEwODg2MyxhZT1NYXRoLmltdWwoUnQscm4pLHRlPSh0ZT1NYXRoLmltdWwoUnQsenQpKStN'@;
put 'YXRoLmltdWwoUHQscm4pfDAsc2U9TWF0aC5pbXVsKFB0LHp0KSxhZT1hZStNYXRoLmltdWwoSGUsY24pfDAsdGU9KHRlPXRlK01hdGguaW11bChIZSxmbil8MCkrTWF0aC5pbXVsKHV0LGNuKXwwLHNlPXNlK01hdGguaW11bCh1dCxmbil8MCxhZT1hZStNYXRoLmltdWwoaXQsWHQpfDAsdGU9'@;
put 'KHRlPXRlK01hdGguaW11bChpdCxlbil8MCkrTWF0aC5pbXVsKCRlLFh0KXwwLHNlPXNlK01hdGguaW11bCgkZSxlbil8MDt2YXIgdGk9KEErKGFlPWFlK01hdGguaW11bCh5dCxFaSl8MCl8MCkrKCg4MTkxJih0ZT0odGU9dGUrTWF0aC5pbXVsKHl0LHZyKXwwKStNYXRoLmltdWwoTXQsRWkp'@;
put 'fDApKTw8MTMpfDA7QT0oKHNlPXNlK01hdGguaW11bChNdCx2cil8MCkrKHRlPj4+MTMpfDApKyh0aT4+PjI2KXwwLHRpJj02NzEwODg2MyxhZT1NYXRoLmltdWwoUnQsY24pLHRlPSh0ZT1NYXRoLmltdWwoUnQsZm4pKStNYXRoLmltdWwoUHQsY24pfDAsc2U9TWF0aC5pbXVsKFB0LGZuKSxh'@;
put 'ZT1hZStNYXRoLmltdWwoSGUsWHQpfDAsdGU9KHRlPXRlK01hdGguaW11bChIZSxlbil8MCkrTWF0aC5pbXVsKHV0LFh0KXwwLHNlPXNlK01hdGguaW11bCh1dCxlbil8MDt2YXIgZ289KEErKGFlPWFlK01hdGguaW11bChpdCxFaSl8MCl8MCkrKCg4MTkxJih0ZT0odGU9dGUrTWF0aC5pbXVs'@;
put 'KGl0LHZyKXwwKStNYXRoLmltdWwoJGUsRWkpfDApKTw8MTMpfDA7QT0oKHNlPXNlK01hdGguaW11bCgkZSx2cil8MCkrKHRlPj4+MTMpfDApKyhnbz4+PjI2KXwwLGdvJj02NzEwODg2MyxhZT1NYXRoLmltdWwoUnQsWHQpLHRlPSh0ZT1NYXRoLmltdWwoUnQsZW4pKStNYXRoLmltdWwoUHQs'@;
put 'WHQpfDAsc2U9TWF0aC5pbXVsKFB0LGVuKTt2YXIgTnM9KEErKGFlPWFlK01hdGguaW11bChIZSxFaSl8MCl8MCkrKCg4MTkxJih0ZT0odGU9dGUrTWF0aC5pbXVsKEhlLHZyKXwwKStNYXRoLmltdWwodXQsRWkpfDApKTw8MTMpfDA7QT0oKHNlPXNlK01hdGguaW11bCh1dCx2cil8MCkrKHRl'@;
put 'Pj4+MTMpfDApKyhOcz4+PjI2KXwwLE5zJj02NzEwODg2Mzt2YXIgYmw9KEErKGFlPU1hdGguaW11bChSdCxFaSkpfDApKygoODE5MSYodGU9KHRlPU1hdGguaW11bChSdCx2cikpK01hdGguaW11bChQdCxFaSl8MCkpPDwxMyl8MDtyZXR1cm4gQT0oKHNlPU1hdGguaW11bChQdCx2cikpKyh0'@;
put 'ZT4+PjEzKXwwKSsoYmw+Pj4yNil8MCxibCY9NjcxMDg4NjMsbVswXT1XbixtWzFdPSRpLG1bMl09ZWksbVszXT1RcixtWzRdPVZpLG1bNV09TmksbVs2XT1EYSxtWzddPUxyLG1bOF09V2ksbVs5XT1wYSxtWzEwXT1RbixtWzExXT1sYSxtWzEyXT15YSxtWzEzXT1MYSxtWzE0XT1GYSxtWzE1'@;
put 'XT10aSxtWzE2XT1nbyxtWzE3XT1OcyxtWzE4XT1ibCwwIT09QSYmKG1bMTldPUEsSC5sZW5ndGgrKyksSH07ZnVuY3Rpb24gbmUoeCxDLFQpe1QubmVnYXRpdmU9Qy5uZWdhdGl2ZV54Lm5lZ2F0aXZlLFQubGVuZ3RoPXgubGVuZ3RoK0MubGVuZ3RoO2Zvcih2YXIgSD0wLGo9MCxFPTA7RTxU'@;
put 'Lmxlbmd0aC0xO0UrKyl7dmFyIG09ajtqPTA7Zm9yKHZhciBBPTY3MTA4ODYzJkgsYWU9TWF0aC5taW4oRSxDLmxlbmd0aC0xKSx0ZT1NYXRoLm1heCgwLEUteC5sZW5ndGgrMSk7dGU8PWFlO3RlKyspe3ZhciBKZT0oMHx4LndvcmRzW0UtdGVdKSooMHxDLndvcmRzW3RlXSksb3Q9NjcxMDg4'@;
put 'NjMmSmU7QT02NzEwODg2MyYob3Q9b3QrQXwwKSxqKz0obT0obT1tKyhKZS82NzEwODg2NHwwKXwwKSsob3Q+Pj4yNil8MCk+Pj4yNixtJj02NzEwODg2M31ULndvcmRzW0VdPUEsSD1tLG09an1yZXR1cm4gMCE9PUg/VC53b3Jkc1tFXT1IOlQubGVuZ3RoLS0sVC5fc3RyaXAoKX1mdW5jdGlv'@;
put 'biBpZSh4LEMsVCl7cmV0dXJuIG5lKHgsQyxUKX1mdW5jdGlvbiBsZSh4LEMpe3RoaXMueD14LHRoaXMueT1DfU1hdGguaW11bHx8KEo9ZWUpLHcucHJvdG90eXBlLm11bFRvPWZ1bmN0aW9uKEMsVCl7dmFyIGo9dGhpcy5sZW5ndGgrQy5sZW5ndGg7cmV0dXJuIDEwPT09dGhpcy5sZW5ndGgm'@;
put 'JjEwPT09Qy5sZW5ndGg/Sih0aGlzLEMsVCk6ajw2Mz9lZSh0aGlzLEMsVCk6ajwxMDI0P25lKHRoaXMsQyxUKTppZSh0aGlzLEMsVCl9LGxlLnByb3RvdHlwZS5tYWtlUkJUPWZ1bmN0aW9uKEMpe2Zvcih2YXIgVD1uZXcgQXJyYXkoQyksSD13LnByb3RvdHlwZS5fY291bnRCaXRzKEMpLTEs'@;
put 'aj0wO2o8QztqKyspVFtqXT10aGlzLnJldkJpbihqLEgsQyk7cmV0dXJuIFR9LGxlLnByb3RvdHlwZS5yZXZCaW49ZnVuY3Rpb24oQyxULEgpe2lmKDA9PT1DfHxDPT09SC0xKXJldHVybiBDO2Zvcih2YXIgaj0wLEU9MDtFPFQ7RSsrKWp8PSgxJkMpPDxULUUtMSxDPj49MTtyZXR1cm4gan0s'@;
put 'bGUucHJvdG90eXBlLnBlcm11dGU9ZnVuY3Rpb24oQyxULEgsaixFLG0pe2Zvcih2YXIgQT0wO0E8bTtBKyspaltBXT1UW0NbQV1dLEVbQV09SFtDW0FdXX0sbGUucHJvdG90eXBlLnRyYW5zZm9ybT1mdW5jdGlvbihDLFQsSCxqLEUsbSl7dGhpcy5wZXJtdXRlKG0sQyxULEgsaixFKTtmb3Io'@;
put 'dmFyIEE9MTtBPEU7QTw8PTEpZm9yKHZhciBhZT1BPDwxLHRlPU1hdGguY29zKDIqTWF0aC5QSS9hZSksc2U9TWF0aC5zaW4oMipNYXRoLlBJL2FlKSx3ZT0wO3dlPEU7d2UrPWFlKWZvcih2YXIgVWU9dGUsSmU9c2Usb3Q9MDtvdDxBO290Kyspe3ZhciB4ZT1IW3dlK290XSx2ZT1qW3dlK290'@;
put 'XSxYZT1IW3dlK290K0FdLHplPWpbd2Urb3QrQV0sRGU9VWUqWGUtSmUqemU7emU9VWUqemUrSmUqWGUsSFt3ZStvdF09eGUrKFhlPURlKSxqW3dlK290XT12ZSt6ZSxIW3dlK290K0FdPXhlLVhlLGpbd2Urb3QrQV09dmUtemUsb3QhPT1hZSYmKERlPXRlKlVlLXNlKkplLEplPXRlKkplK3Nl'@;
put 'KlVlLFVlPURlKX19LGxlLnByb3RvdHlwZS5ndWVzc0xlbjEzYj1mdW5jdGlvbihDLFQpe3ZhciBIPTF8TWF0aC5tYXgoVCxDKSxqPTEmSCxFPTA7Zm9yKEg9SC8yfDA7SDtIPj4+PTEpRSsrO3JldHVybiAxPDxFKzEran0sbGUucHJvdG90eXBlLmNvbmp1Z2F0ZT1mdW5jdGlvbihDLFQsSCl7'@;
put 'aWYoIShIPD0xKSlmb3IodmFyIGo9MDtqPEgvMjtqKyspe3ZhciBFPUNbal07Q1tqXT1DW0gtai0xXSxDW0gtai0xXT1FLEU9VFtqXSxUW2pdPS1UW0gtai0xXSxUW0gtai0xXT0tRX19LGxlLnByb3RvdHlwZS5ub3JtYWxpemUxM2I9ZnVuY3Rpb24oQyxUKXtmb3IodmFyIEg9MCxqPTA7ajxU'@;
put 'LzI7aisrKXt2YXIgRT04MTkyKk1hdGgucm91bmQoQ1syKmorMV0vVCkrTWF0aC5yb3VuZChDWzIqal0vVCkrSDtDW2pdPTY3MTA4ODYzJkUsSD1FPDY3MTA4ODY0PzA6RS82NzEwODg2NHwwfXJldHVybiBDfSxsZS5wcm90b3R5cGUuY29udmVydDEzYj1mdW5jdGlvbihDLFQsSCxqKXtmb3Io'@;
put 'dmFyIEU9MCxtPTA7bTxUO20rKylIWzIqbV09ODE5MSYoRSs9MHxDW21dKSxIWzIqbSsxXT04MTkxJihFPj4+PTEzKSxFPj4+PTEzO2ZvcihtPTIqVDttPGo7KyttKUhbbV09MDtnKDA9PT1FKSxnKCEoLTgxOTImRSkpfSxsZS5wcm90b3R5cGUuc3R1Yj1mdW5jdGlvbihDKXtmb3IodmFyIFQ9'@;
put 'bmV3IEFycmF5KEMpLEg9MDtIPEM7SCsrKVRbSF09MDtyZXR1cm4gVH0sbGUucHJvdG90eXBlLm11bHA9ZnVuY3Rpb24oQyxULEgpe3ZhciBqPTIqdGhpcy5ndWVzc0xlbjEzYihDLmxlbmd0aCxULmxlbmd0aCksRT10aGlzLm1ha2VSQlQoaiksbT10aGlzLnN0dWIoaiksQT1uZXcgQXJyYXko'@;
put 'aiksYWU9bmV3IEFycmF5KGopLHRlPW5ldyBBcnJheShqKSxzZT1uZXcgQXJyYXkoaiksd2U9bmV3IEFycmF5KGopLFVlPW5ldyBBcnJheShqKSxKZT1ILndvcmRzO0plLmxlbmd0aD1qLHRoaXMuY29udmVydDEzYihDLndvcmRzLEMubGVuZ3RoLEEsaiksdGhpcy5jb252ZXJ0MTNiKFQud29y'@;
put 'ZHMsVC5sZW5ndGgsc2UsaiksdGhpcy50cmFuc2Zvcm0oQSxtLGFlLHRlLGosRSksdGhpcy50cmFuc2Zvcm0oc2UsbSx3ZSxVZSxqLEUpO2Zvcih2YXIgb3Q9MDtvdDxqO290Kyspe3ZhciB4ZT1hZVtvdF0qd2Vbb3RdLXRlW290XSpVZVtvdF07dGVbb3RdPWFlW290XSpVZVtvdF0rdGVbb3Rd'@;
put 'KndlW290XSxhZVtvdF09eGV9cmV0dXJuIHRoaXMuY29uanVnYXRlKGFlLHRlLGopLHRoaXMudHJhbnNmb3JtKGFlLHRlLEplLG0saixFKSx0aGlzLmNvbmp1Z2F0ZShKZSxtLGopLHRoaXMubm9ybWFsaXplMTNiKEplLGopLEgubmVnYXRpdmU9Qy5uZWdhdGl2ZV5ULm5lZ2F0aXZlLEgubGVu'@;
put 'Z3RoPUMubGVuZ3RoK1QubGVuZ3RoLEguX3N0cmlwKCl9LHcucHJvdG90eXBlLm11bD1mdW5jdGlvbihDKXt2YXIgVD1uZXcgdyhudWxsKTtyZXR1cm4gVC53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgrQy5sZW5ndGgpLHRoaXMubXVsVG8oQyxUKX0sdy5wcm90b3R5cGUubXVsZj1mdW5j'@;
put 'dGlvbihDKXt2YXIgVD1uZXcgdyhudWxsKTtyZXR1cm4gVC53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgrQy5sZW5ndGgpLGllKHRoaXMsQyxUKX0sdy5wcm90b3R5cGUuaW11bD1mdW5jdGlvbihDKXtyZXR1cm4gdGhpcy5jbG9uZSgpLm11bFRvKEMsdGhpcyl9LHcucHJvdG90eXBlLmlt'@;
put 'dWxuPWZ1bmN0aW9uKEMpe3ZhciBUPUM8MDtUJiYoQz0tQyksZygibnVtYmVyIj09dHlwZW9mIEMpLGcoQzw2NzEwODg2NCk7Zm9yKHZhciBIPTAsaj0wO2o8dGhpcy5sZW5ndGg7aisrKXt2YXIgRT0oMHx0aGlzLndvcmRzW2pdKSpDLG09KDY3MTA4ODYzJkUpKyg2NzEwODg2MyZIKTtIPj49'@;
put 'MjYsSCs9RS82NzEwODg2NHwwLEgrPW0+Pj4yNix0aGlzLndvcmRzW2pdPTY3MTA4ODYzJm19cmV0dXJuIDAhPT1IJiYodGhpcy53b3Jkc1tqXT1ILHRoaXMubGVuZ3RoKyspLFQ/dGhpcy5pbmVnKCk6dGhpc30sdy5wcm90b3R5cGUubXVsbj1mdW5jdGlvbihDKXtyZXR1cm4gdGhpcy5jbG9u'@;
put 'ZSgpLmltdWxuKEMpfSx3LnByb3RvdHlwZS5zcXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tdWwodGhpcyl9LHcucHJvdG90eXBlLmlzcXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbXVsKHRoaXMuY2xvbmUoKSl9LHcucHJvdG90eXBlLnBvdz1mdW5jdGlvbihDKXt2YXIgVD1mdW5jdGlv'@;
put 'biBxKHgpe2Zvcih2YXIgQz1uZXcgQXJyYXkoeC5iaXRMZW5ndGgoKSksVD0wO1Q8Qy5sZW5ndGg7VCsrKUNbVF09eC53b3Jkc1tULzI2fDBdPj4+VCUyNiYxO3JldHVybiBDfShDKTtpZigwPT09VC5sZW5ndGgpcmV0dXJuIG5ldyB3KDEpO2Zvcih2YXIgSD10aGlzLGo9MDtqPFQubGVuZ3Ro'@;
put 'JiYwPT09VFtqXTtqKyssSD1ILnNxcigpKTtpZigrK2o8VC5sZW5ndGgpZm9yKHZhciBFPUguc3FyKCk7ajxULmxlbmd0aDtqKyssRT1FLnNxcigpKTAhPT1UW2pdJiYoSD1ILm11bChFKSk7cmV0dXJuIEh9LHcucHJvdG90eXBlLml1c2hsbj1mdW5jdGlvbihDKXtnKCJudW1iZXIiPT10eXBl'@;
put 'b2YgQyYmQz49MCk7dmFyIEUsVD1DJTI2LEg9KEMtVCkvMjYsaj02NzEwODg2Mz4+PjI2LVQ8PDI2LVQ7aWYoMCE9PVQpe3ZhciBtPTA7Zm9yKEU9MDtFPHRoaXMubGVuZ3RoO0UrKyl7dmFyIEE9dGhpcy53b3Jkc1tFXSZqO3RoaXMud29yZHNbRV09KDB8dGhpcy53b3Jkc1tFXSktQTw8VHxt'@;
put 'LG09QT4+PjI2LVR9bSYmKHRoaXMud29yZHNbRV09bSx0aGlzLmxlbmd0aCsrKX1pZigwIT09SCl7Zm9yKEU9dGhpcy5sZW5ndGgtMTtFPj0wO0UtLSl0aGlzLndvcmRzW0UrSF09dGhpcy53b3Jkc1tFXTtmb3IoRT0wO0U8SDtFKyspdGhpcy53b3Jkc1tFXT0wO3RoaXMubGVuZ3RoKz1IfXJl'@;
put 'dHVybiB0aGlzLl9zdHJpcCgpfSx3LnByb3RvdHlwZS5pc2hsbj1mdW5jdGlvbihDKXtyZXR1cm4gZygwPT09dGhpcy5uZWdhdGl2ZSksdGhpcy5pdXNobG4oQyl9LHcucHJvdG90eXBlLml1c2hybj1mdW5jdGlvbihDLFQsSCl7dmFyIGo7ZygibnVtYmVyIj09dHlwZW9mIEMmJkM+PTApLGo9'@;
put 'VD8oVC1UJTI2KS8yNjowO3ZhciBFPUMlMjYsbT1NYXRoLm1pbigoQy1FKS8yNix0aGlzLmxlbmd0aCksQT02NzEwODg2M142NzEwODg2Mz4+PkU8PEUsYWU9SDtpZihqLT1tLGo9TWF0aC5tYXgoMCxqKSxhZSl7Zm9yKHZhciB0ZT0wO3RlPG07dGUrKylhZS53b3Jkc1t0ZV09dGhpcy53b3Jk'@;
put 'c1t0ZV07YWUubGVuZ3RoPW19aWYoMCE9PW0paWYodGhpcy5sZW5ndGg+bSlmb3IodGhpcy5sZW5ndGgtPW0sdGU9MDt0ZTx0aGlzLmxlbmd0aDt0ZSsrKXRoaXMud29yZHNbdGVdPXRoaXMud29yZHNbdGUrbV07ZWxzZSB0aGlzLndvcmRzWzBdPTAsdGhpcy5sZW5ndGg9MTt2YXIgc2U9MDtm'@;
put 'b3IodGU9dGhpcy5sZW5ndGgtMTt0ZT49MCYmKDAhPT1zZXx8dGU+PWopO3RlLS0pe3ZhciB3ZT0wfHRoaXMud29yZHNbdGVdO3RoaXMud29yZHNbdGVdPXNlPDwyNi1FfHdlPj4+RSxzZT13ZSZBfXJldHVybiBhZSYmMCE9PXNlJiYoYWUud29yZHNbYWUubGVuZ3RoKytdPXNlKSwwPT09dGhp'@;
put 'cy5sZW5ndGgmJih0aGlzLndvcmRzWzBdPTAsdGhpcy5sZW5ndGg9MSksdGhpcy5fc3RyaXAoKX0sdy5wcm90b3R5cGUuaXNocm49ZnVuY3Rpb24oQyxULEgpe3JldHVybiBnKDA9PT10aGlzLm5lZ2F0aXZlKSx0aGlzLml1c2hybihDLFQsSCl9LHcucHJvdG90eXBlLnNobG49ZnVuY3Rpb24o'@;
put 'Qyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc2hsbihDKX0sdy5wcm90b3R5cGUudXNobG49ZnVuY3Rpb24oQyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pdXNobG4oQyl9LHcucHJvdG90eXBlLnNocm49ZnVuY3Rpb24oQyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc2hybihDKX0sdy5wcm90b3R5cGUu'@;
put 'dXNocm49ZnVuY3Rpb24oQyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pdXNocm4oQyl9LHcucHJvdG90eXBlLnRlc3RuPWZ1bmN0aW9uKEMpe2coIm51bWJlciI9PXR5cGVvZiBDJiZDPj0wKTt2YXIgVD1DJTI2LEg9KEMtVCkvMjY7cmV0dXJuISh0aGlzLmxlbmd0aDw9SHx8ISh0aGlzLndvcmRz'@;
put 'W0hdJjE8PFQpKX0sdy5wcm90b3R5cGUuaW1hc2tuPWZ1bmN0aW9uKEMpe2coIm51bWJlciI9PXR5cGVvZiBDJiZDPj0wKTt2YXIgVD1DJTI2LEg9KEMtVCkvMjY7cmV0dXJuIGcoMD09PXRoaXMubmVnYXRpdmUsImltYXNrbiB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmUgbnVtYmVycyIpLHRo'@;
put 'aXMubGVuZ3RoPD1IP3RoaXM6KDAhPT1UJiZIKyssdGhpcy5sZW5ndGg9TWF0aC5taW4oSCx0aGlzLmxlbmd0aCksMCE9PVQmJih0aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdJj02NzEwODg2M142NzEwODg2Mz4+PlQ8PFQpLHRoaXMuX3N0cmlwKCkpfSx3LnByb3RvdHlwZS5tYXNrbj1mdW5j'@;
put 'dGlvbihDKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmltYXNrbihDKX0sdy5wcm90b3R5cGUuaWFkZG49ZnVuY3Rpb24oQyl7cmV0dXJuIGcoIm51bWJlciI9PXR5cGVvZiBDKSxnKEM8NjcxMDg4NjQpLEM8MD90aGlzLmlzdWJuKC1DKTowIT09dGhpcy5uZWdhdGl2ZT8xPT09dGhpcy5sZW5ndGgm'@;
put 'JigwfHRoaXMud29yZHNbMF0pPD1DPyh0aGlzLndvcmRzWzBdPUMtKDB8dGhpcy53b3Jkc1swXSksdGhpcy5uZWdhdGl2ZT0wLHRoaXMpOih0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pc3VibihDKSx0aGlzLm5lZ2F0aXZlPTEsdGhpcyk6dGhpcy5faWFkZG4oQyl9LHcucHJvdG90eXBlLl9pYWRk'@;
put 'bj1mdW5jdGlvbihDKXt0aGlzLndvcmRzWzBdKz1DO2Zvcih2YXIgVD0wO1Q8dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbVF0+PTY3MTA4ODY0O1QrKyl0aGlzLndvcmRzW1RdLT02NzEwODg2NCxUPT09dGhpcy5sZW5ndGgtMT90aGlzLndvcmRzW1QrMV09MTp0aGlzLndvcmRzW1QrMV0rKzty'@;
put 'ZXR1cm4gdGhpcy5sZW5ndGg9TWF0aC5tYXgodGhpcy5sZW5ndGgsVCsxKSx0aGlzfSx3LnByb3RvdHlwZS5pc3Vibj1mdW5jdGlvbihDKXtpZihnKCJudW1iZXIiPT10eXBlb2YgQyksZyhDPDY3MTA4ODY0KSxDPDApcmV0dXJuIHRoaXMuaWFkZG4oLUMpO2lmKDAhPT10aGlzLm5lZ2F0aXZl'@;
put 'KXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pYWRkbihDKSx0aGlzLm5lZ2F0aXZlPTEsdGhpcztpZih0aGlzLndvcmRzWzBdLT1DLDE9PT10aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1swXTwwKXRoaXMud29yZHNbMF09LXRoaXMud29yZHNbMF0sdGhpcy5uZWdhdGl2ZT0xO2Vsc2UgZm9y'@;
put 'KHZhciBUPTA7VDx0aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1tUXTwwO1QrKyl0aGlzLndvcmRzW1RdKz02NzEwODg2NCx0aGlzLndvcmRzW1QrMV0tPTE7cmV0dXJuIHRoaXMuX3N0cmlwKCl9LHcucHJvdG90eXBlLmFkZG49ZnVuY3Rpb24oQyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pYWRkbihD'@;
put 'KX0sdy5wcm90b3R5cGUuc3Vibj1mdW5jdGlvbihDKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzdWJuKEMpfSx3LnByb3RvdHlwZS5pYWJzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzfSx3LnByb3RvdHlwZS5hYnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbG9uZSgp'@;
put 'LmlhYnMoKX0sdy5wcm90b3R5cGUuX2lzaGxuc3VibXVsPWZ1bmN0aW9uKEMsVCxIKXt2YXIgRTt0aGlzLl9leHBhbmQoQy5sZW5ndGgrSCk7dmFyIG0sQT0wO2ZvcihFPTA7RTxDLmxlbmd0aDtFKyspe209KDB8dGhpcy53b3Jkc1tFK0hdKStBO3ZhciBhZT0oMHxDLndvcmRzW0VdKSpUO0E9'@;
put 'KChtLT02NzEwODg2MyZhZSk+PjI2KS0oYWUvNjcxMDg4NjR8MCksdGhpcy53b3Jkc1tFK0hdPTY3MTA4ODYzJm19Zm9yKDtFPHRoaXMubGVuZ3RoLUg7RSsrKUE9KG09KDB8dGhpcy53b3Jkc1tFK0hdKStBKT4+MjYsdGhpcy53b3Jkc1tFK0hdPTY3MTA4ODYzJm07aWYoMD09PUEpcmV0dXJu'@;
put 'IHRoaXMuX3N0cmlwKCk7Zm9yKGcoLTE9PT1BKSxBPTAsRT0wO0U8dGhpcy5sZW5ndGg7RSsrKUE9KG09LSgwfHRoaXMud29yZHNbRV0pK0EpPj4yNix0aGlzLndvcmRzW0VdPTY3MTA4ODYzJm07cmV0dXJuIHRoaXMubmVnYXRpdmU9MSx0aGlzLl9zdHJpcCgpfSx3LnByb3RvdHlwZS5fd29y'@;
put 'ZERpdj1mdW5jdGlvbihDLFQpe3ZhciBILGo9dGhpcy5jbG9uZSgpLEU9QyxtPTB8RS53b3Jkc1tFLmxlbmd0aC0xXTswIT0oSD0yNi10aGlzLl9jb3VudEJpdHMobSkpJiYoRT1FLnVzaGxuKEgpLGouaXVzaGxuKEgpLG09MHxFLndvcmRzW0UubGVuZ3RoLTFdKTt2YXIgdGUsYWU9ai5sZW5n'@;
put 'dGgtRS5sZW5ndGg7aWYoIm1vZCIhPT1UKXsodGU9bmV3IHcobnVsbCkpLmxlbmd0aD1hZSsxLHRlLndvcmRzPW5ldyBBcnJheSh0ZS5sZW5ndGgpO2Zvcih2YXIgc2U9MDtzZTx0ZS5sZW5ndGg7c2UrKyl0ZS53b3Jkc1tzZV09MH12YXIgd2U9ai5jbG9uZSgpLl9pc2hsbnN1Ym11bChFLDEs'@;
put 'YWUpOzA9PT13ZS5uZWdhdGl2ZSYmKGo9d2UsdGUmJih0ZS53b3Jkc1thZV09MSkpO2Zvcih2YXIgVWU9YWUtMTtVZT49MDtVZS0tKXt2YXIgSmU9NjcxMDg4NjQqKDB8ai53b3Jkc1tFLmxlbmd0aCtVZV0pKygwfGoud29yZHNbRS5sZW5ndGgrVWUtMV0pO2ZvcihKZT1NYXRoLm1pbihKZS9t'@;
put 'fDAsNjcxMDg4NjMpLGouX2lzaGxuc3VibXVsKEUsSmUsVWUpOzAhPT1qLm5lZ2F0aXZlOylKZS0tLGoubmVnYXRpdmU9MCxqLl9pc2hsbnN1Ym11bChFLDEsVWUpLGouaXNaZXJvKCl8fChqLm5lZ2F0aXZlXj0xKTt0ZSYmKHRlLndvcmRzW1VlXT1KZSl9cmV0dXJuIHRlJiZ0ZS5fc3RyaXAo'@;
put 'KSxqLl9zdHJpcCgpLCJkaXYiIT09VCYmMCE9PUgmJmouaXVzaHJuKEgpLHtkaXY6dGV8fG51bGwsbW9kOmp9fSx3LnByb3RvdHlwZS5kaXZtb2Q9ZnVuY3Rpb24oQyxULEgpe3JldHVybiBnKCFDLmlzWmVybygpKSx0aGlzLmlzWmVybygpP3tkaXY6bmV3IHcoMCksbW9kOm5ldyB3KDApfTow'@;
put 'IT09dGhpcy5uZWdhdGl2ZSYmMD09PUMubmVnYXRpdmU/KG09dGhpcy5uZWcoKS5kaXZtb2QoQyxUKSwibW9kIiE9PVQmJihqPW0uZGl2Lm5lZygpKSwiZGl2IiE9PVQmJihFPW0ubW9kLm5lZygpLEgmJjAhPT1FLm5lZ2F0aXZlJiZFLmlhZGQoQykpLHtkaXY6aixtb2Q6RX0pOjA9PT10aGlz'@;
put 'Lm5lZ2F0aXZlJiYwIT09Qy5uZWdhdGl2ZT8obT10aGlzLmRpdm1vZChDLm5lZygpLFQpLCJtb2QiIT09VCYmKGo9bS5kaXYubmVnKCkpLHtkaXY6aixtb2Q6bS5tb2R9KTp0aGlzLm5lZ2F0aXZlJkMubmVnYXRpdmU/KG09dGhpcy5uZWcoKS5kaXZtb2QoQy5uZWcoKSxUKSwiZGl2IiE9PVQm'@;
put 'JihFPW0ubW9kLm5lZygpLEgmJjAhPT1FLm5lZ2F0aXZlJiZFLmlzdWIoQykpLHtkaXY6bS5kaXYsbW9kOkV9KTpDLmxlbmd0aD50aGlzLmxlbmd0aHx8dGhpcy5jbXAoQyk8MD97ZGl2Om5ldyB3KDApLG1vZDp0aGlzfToxPT09Qy5sZW5ndGg/ImRpdiI9PT1UP3tkaXY6dGhpcy5kaXZuKEMu'@;
put 'd29yZHNbMF0pLG1vZDpudWxsfToibW9kIj09PVQ/e2RpdjpudWxsLG1vZDpuZXcgdyh0aGlzLm1vZHJuKEMud29yZHNbMF0pKX06e2Rpdjp0aGlzLmRpdm4oQy53b3Jkc1swXSksbW9kOm5ldyB3KHRoaXMubW9kcm4oQy53b3Jkc1swXSkpfTp0aGlzLl93b3JkRGl2KEMsVCk7dmFyIGosRSxt'@;
put 'fSx3LnByb3RvdHlwZS5kaXY9ZnVuY3Rpb24oQyl7cmV0dXJuIHRoaXMuZGl2bW9kKEMsImRpdiIsITEpLmRpdn0sdy5wcm90b3R5cGUubW9kPWZ1bmN0aW9uKEMpe3JldHVybiB0aGlzLmRpdm1vZChDLCJtb2QiLCExKS5tb2R9LHcucHJvdG90eXBlLnVtb2Q9ZnVuY3Rpb24oQyl7cmV0dXJu'@;
put 'IHRoaXMuZGl2bW9kKEMsIm1vZCIsITApLm1vZH0sdy5wcm90b3R5cGUuZGl2Um91bmQ9ZnVuY3Rpb24oQyl7dmFyIFQ9dGhpcy5kaXZtb2QoQyk7aWYoVC5tb2QuaXNaZXJvKCkpcmV0dXJuIFQuZGl2O3ZhciBIPTAhPT1ULmRpdi5uZWdhdGl2ZT9ULm1vZC5pc3ViKEMpOlQubW9kLGo9Qy51'@;
put 'c2hybigxKSxFPUMuYW5kbG4oMSksbT1ILmNtcChqKTtyZXR1cm4gbTwwfHwxPT09RSYmMD09PW0/VC5kaXY6MCE9PVQuZGl2Lm5lZ2F0aXZlP1QuZGl2LmlzdWJuKDEpOlQuZGl2LmlhZGRuKDEpfSx3LnByb3RvdHlwZS5tb2Rybj1mdW5jdGlvbihDKXt2YXIgVD1DPDA7VCYmKEM9LUMpLGco'@;
put 'Qzw9NjcxMDg4NjMpO2Zvcih2YXIgSD0oMTw8MjYpJUMsaj0wLEU9dGhpcy5sZW5ndGgtMTtFPj0wO0UtLSlqPShIKmorKDB8dGhpcy53b3Jkc1tFXSkpJUM7cmV0dXJuIFQ/LWo6an0sdy5wcm90b3R5cGUubW9kbj1mdW5jdGlvbihDKXtyZXR1cm4gdGhpcy5tb2RybihDKX0sdy5wcm90b3R5'@;
put 'cGUuaWRpdm49ZnVuY3Rpb24oQyl7dmFyIFQ9QzwwO1QmJihDPS1DKSxnKEM8PTY3MTA4ODYzKTtmb3IodmFyIEg9MCxqPXRoaXMubGVuZ3RoLTE7aj49MDtqLS0pe3ZhciBFPSgwfHRoaXMud29yZHNbal0pKzY3MTA4ODY0Kkg7dGhpcy53b3Jkc1tqXT1FL0N8MCxIPUUlQ31yZXR1cm4gdGhp'@;
put 'cy5fc3RyaXAoKSxUP3RoaXMuaW5lZygpOnRoaXN9LHcucHJvdG90eXBlLmRpdm49ZnVuY3Rpb24oQyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pZGl2bihDKX0sdy5wcm90b3R5cGUuZWdjZD1mdW5jdGlvbihDKXtnKDA9PT1DLm5lZ2F0aXZlKSxnKCFDLmlzWmVybygpKTt2YXIgVD10aGlzLEg9'@;
put 'Qy5jbG9uZSgpO1Q9MCE9PVQubmVnYXRpdmU/VC51bW9kKEMpOlQuY2xvbmUoKTtmb3IodmFyIGo9bmV3IHcoMSksRT1uZXcgdygwKSxtPW5ldyB3KDApLEE9bmV3IHcoMSksYWU9MDtULmlzRXZlbigpJiZILmlzRXZlbigpOylULml1c2hybigxKSxILml1c2hybigxKSwrK2FlO2Zvcih2YXIg'@;
put 'dGU9SC5jbG9uZSgpLHNlPVQuY2xvbmUoKTshVC5pc1plcm8oKTspe2Zvcih2YXIgd2U9MCxVZT0xOyEoVC53b3Jkc1swXSZVZSkmJndlPDI2Oysrd2UsVWU8PD0xKTtpZih3ZT4wKWZvcihULml1c2hybih3ZSk7d2UtLSA+MDspKGouaXNPZGQoKXx8RS5pc09kZCgpKSYmKGouaWFkZCh0ZSks'@;
put 'RS5pc3ViKHNlKSksai5pdXNocm4oMSksRS5pdXNocm4oMSk7Zm9yKHZhciBKZT0wLG90PTE7IShILndvcmRzWzBdJm90KSYmSmU8MjY7KytKZSxvdDw8PTEpO2lmKEplPjApZm9yKEguaXVzaHJuKEplKTtKZS0tID4wOykobS5pc09kZCgpfHxBLmlzT2RkKCkpJiYobS5pYWRkKHRlKSxBLmlz'@;
put 'dWIoc2UpKSxtLml1c2hybigxKSxBLml1c2hybigxKTtULmNtcChIKT49MD8oVC5pc3ViKEgpLGouaXN1YihtKSxFLmlzdWIoQSkpOihILmlzdWIoVCksbS5pc3ViKGopLEEuaXN1YihFKSl9cmV0dXJue2E6bSxiOkEsZ2NkOkguaXVzaGxuKGFlKX19LHcucHJvdG90eXBlLl9pbnZtcD1mdW5j'@;
put 'dGlvbihDKXtnKDA9PT1DLm5lZ2F0aXZlKSxnKCFDLmlzWmVybygpKTt2YXIgd2UsVD10aGlzLEg9Qy5jbG9uZSgpO1Q9MCE9PVQubmVnYXRpdmU/VC51bW9kKEMpOlQuY2xvbmUoKTtmb3IodmFyIGo9bmV3IHcoMSksRT1uZXcgdygwKSxtPUguY2xvbmUoKTtULmNtcG4oMSk+MCYmSC5jbXBu'@;
put 'KDEpPjA7KXtmb3IodmFyIEE9MCxhZT0xOyEoVC53b3Jkc1swXSZhZSkmJkE8MjY7KytBLGFlPDw9MSk7aWYoQT4wKWZvcihULml1c2hybihBKTtBLS0gPjA7KWouaXNPZGQoKSYmai5pYWRkKG0pLGouaXVzaHJuKDEpO2Zvcih2YXIgdGU9MCxzZT0xOyEoSC53b3Jkc1swXSZzZSkmJnRlPDI2'@;
put 'OysrdGUsc2U8PD0xKTtpZih0ZT4wKWZvcihILml1c2hybih0ZSk7dGUtLSA+MDspRS5pc09kZCgpJiZFLmlhZGQobSksRS5pdXNocm4oMSk7VC5jbXAoSCk+PTA/KFQuaXN1YihIKSxqLmlzdWIoRSkpOihILmlzdWIoVCksRS5pc3ViKGopKX1yZXR1cm4od2U9MD09PVQuY21wbigxKT9qOkUp'@;
put 'LmNtcG4oMCk8MCYmd2UuaWFkZChDKSx3ZX0sdy5wcm90b3R5cGUuZ2NkPWZ1bmN0aW9uKEMpe2lmKHRoaXMuaXNaZXJvKCkpcmV0dXJuIEMuYWJzKCk7aWYoQy5pc1plcm8oKSlyZXR1cm4gdGhpcy5hYnMoKTt2YXIgVD10aGlzLmNsb25lKCksSD1DLmNsb25lKCk7VC5uZWdhdGl2ZT0wLEgu'@;
put 'bmVnYXRpdmU9MDtmb3IodmFyIGo9MDtULmlzRXZlbigpJiZILmlzRXZlbigpO2orKylULml1c2hybigxKSxILml1c2hybigxKTtmb3IoOzspe2Zvcig7VC5pc0V2ZW4oKTspVC5pdXNocm4oMSk7Zm9yKDtILmlzRXZlbigpOylILml1c2hybigxKTt2YXIgRT1ULmNtcChIKTtpZihFPDApe3Zh'@;
put 'ciBtPVQ7VD1ILEg9bX1lbHNlIGlmKDA9PT1FfHwwPT09SC5jbXBuKDEpKWJyZWFrO1QuaXN1YihIKX1yZXR1cm4gSC5pdXNobG4oail9LHcucHJvdG90eXBlLmludm09ZnVuY3Rpb24oQyl7cmV0dXJuIHRoaXMuZWdjZChDKS5hLnVtb2QoQyl9LHcucHJvdG90eXBlLmlzRXZlbj1mdW5jdGlv'@;
put 'bigpe3JldHVybiEoMSZ0aGlzLndvcmRzWzBdKX0sdy5wcm90b3R5cGUuaXNPZGQ9ZnVuY3Rpb24oKXtyZXR1cm4hKDEmfnRoaXMud29yZHNbMF0pfSx3LnByb3RvdHlwZS5hbmRsbj1mdW5jdGlvbihDKXtyZXR1cm4gdGhpcy53b3Jkc1swXSZDfSx3LnByb3RvdHlwZS5iaW5jbj1mdW5jdGlv'@;
put 'bihDKXtnKCJudW1iZXIiPT10eXBlb2YgQyk7dmFyIFQ9QyUyNixIPShDLVQpLzI2LGo9MTw8VDtpZih0aGlzLmxlbmd0aDw9SClyZXR1cm4gdGhpcy5fZXhwYW5kKEgrMSksdGhpcy53b3Jkc1tIXXw9aix0aGlzO2Zvcih2YXIgRT1qLG09SDswIT09RSYmbTx0aGlzLmxlbmd0aDttKyspe3Zh'@;
put 'ciBBPTB8dGhpcy53b3Jkc1ttXTtFPShBKz1FKT4+PjI2LHRoaXMud29yZHNbbV09QSY9NjcxMDg4NjN9cmV0dXJuIDAhPT1FJiYodGhpcy53b3Jkc1ttXT1FLHRoaXMubGVuZ3RoKyspLHRoaXN9LHcucHJvdG90eXBlLmlzWmVybz1mdW5jdGlvbigpe3JldHVybiAxPT09dGhpcy5sZW5ndGgm'@;
put 'JjA9PT10aGlzLndvcmRzWzBdfSx3LnByb3RvdHlwZS5jbXBuPWZ1bmN0aW9uKEMpe3ZhciBILFQ9QzwwO2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYhVClyZXR1cm4tMTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmVClyZXR1cm4gMTtpZih0aGlzLl9zdHJpcCgpLHRoaXMubGVuZ3RoPjEpSD0xO2Vs'@;
put 'c2V7VCYmKEM9LUMpLGcoQzw9NjcxMDg4NjMsIk51bWJlciBpcyB0b28gYmlnIik7dmFyIGo9MHx0aGlzLndvcmRzWzBdO0g9aj09PUM/MDpqPEM/LTE6MX1yZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/MHwtSDpIfSx3LnByb3RvdHlwZS5jbXA9ZnVuY3Rpb24oQyl7aWYoMCE9PXRoaXMubmVn'@;
put 'YXRpdmUmJjA9PT1DLm5lZ2F0aXZlKXJldHVybi0xO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiYwIT09Qy5uZWdhdGl2ZSlyZXR1cm4gMTt2YXIgVD10aGlzLnVjbXAoQyk7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlPzB8LVQ6VH0sdy5wcm90b3R5cGUudWNtcD1mdW5jdGlvbihDKXtpZih0aGlz'@;
put 'Lmxlbmd0aD5DLmxlbmd0aClyZXR1cm4gMTtpZih0aGlzLmxlbmd0aDxDLmxlbmd0aClyZXR1cm4tMTtmb3IodmFyIFQ9MCxIPXRoaXMubGVuZ3RoLTE7SD49MDtILS0pe3ZhciBqPTB8dGhpcy53b3Jkc1tIXSxFPTB8Qy53b3Jkc1tIXTtpZihqIT09RSl7ajxFP1Q9LTE6aj5FJiYoVD0xKTti'@;
put 'cmVha319cmV0dXJuIFR9LHcucHJvdG90eXBlLmd0bj1mdW5jdGlvbihDKXtyZXR1cm4gMT09PXRoaXMuY21wbihDKX0sdy5wcm90b3R5cGUuZ3Q9ZnVuY3Rpb24oQyl7cmV0dXJuIDE9PT10aGlzLmNtcChDKX0sdy5wcm90b3R5cGUuZ3Rlbj1mdW5jdGlvbihDKXtyZXR1cm4gdGhpcy5jbXBu'@;
put 'KEMpPj0wfSx3LnByb3RvdHlwZS5ndGU9ZnVuY3Rpb24oQyl7cmV0dXJuIHRoaXMuY21wKEMpPj0wfSx3LnByb3RvdHlwZS5sdG49ZnVuY3Rpb24oQyl7cmV0dXJuLTE9PT10aGlzLmNtcG4oQyl9LHcucHJvdG90eXBlLmx0PWZ1bmN0aW9uKEMpe3JldHVybi0xPT09dGhpcy5jbXAoQyl9LHcu'@;
put 'cHJvdG90eXBlLmx0ZW49ZnVuY3Rpb24oQyl7cmV0dXJuIHRoaXMuY21wbihDKTw9MH0sdy5wcm90b3R5cGUubHRlPWZ1bmN0aW9uKEMpe3JldHVybiB0aGlzLmNtcChDKTw9MH0sdy5wcm90b3R5cGUuZXFuPWZ1bmN0aW9uKEMpe3JldHVybiAwPT09dGhpcy5jbXBuKEMpfSx3LnByb3RvdHlw'@;
put 'ZS5lcT1mdW5jdGlvbihDKXtyZXR1cm4gMD09PXRoaXMuY21wKEMpfSx3LnJlZD1mdW5jdGlvbihDKXtyZXR1cm4gbmV3IHAoQyl9LHcucHJvdG90eXBlLnRvUmVkPWZ1bmN0aW9uKEMpe3JldHVybiBnKCF0aGlzLnJlZCwiQWxyZWFkeSBhIG51bWJlciBpbiByZWR1Y3Rpb24gY29udGV4dCIp'@;
put 'LGcoMD09PXRoaXMubmVnYXRpdmUsInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIiksQy5jb252ZXJ0VG8odGhpcykuX2ZvcmNlUmVkKEMpfSx3LnByb3RvdHlwZS5mcm9tUmVkPWZ1bmN0aW9uKCl7cmV0dXJuIGcodGhpcy5yZWQsImZyb21SZWQgd29ya3Mgb25seSB3aXRoIG51bWJl'@;
put 'cnMgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSx0aGlzLnJlZC5jb252ZXJ0RnJvbSh0aGlzKX0sdy5wcm90b3R5cGUuX2ZvcmNlUmVkPWZ1bmN0aW9uKEMpe3JldHVybiB0aGlzLnJlZD1DLHRoaXN9LHcucHJvdG90eXBlLmZvcmNlUmVkPWZ1bmN0aW9uKEMpe3JldHVybiBnKCF0aGlzLnJlZCwi'@;
put 'QWxyZWFkeSBhIG51bWJlciBpbiByZWR1Y3Rpb24gY29udGV4dCIpLHRoaXMuX2ZvcmNlUmVkKEMpfSx3LnByb3RvdHlwZS5yZWRBZGQ9ZnVuY3Rpb24oQyl7cmV0dXJuIGcodGhpcy5yZWQsInJlZEFkZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5hZGQodGhpcyxD'@;
put 'KX0sdy5wcm90b3R5cGUucmVkSUFkZD1mdW5jdGlvbihDKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkSUFkZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5pYWRkKHRoaXMsQyl9LHcucHJvdG90eXBlLnJlZFN1Yj1mdW5jdGlvbihDKXtyZXR1cm4gZyh0aGlzLnJlZCwi'@;
put 'cmVkU3ViIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLnN1Yih0aGlzLEMpfSx3LnByb3RvdHlwZS5yZWRJU3ViPWZ1bmN0aW9uKEMpe3JldHVybiBnKHRoaXMucmVkLCJyZWRJU3ViIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmlzdWIodGhp'@;
put 'cyxDKX0sdy5wcm90b3R5cGUucmVkU2hsPWZ1bmN0aW9uKEMpe3JldHVybiBnKHRoaXMucmVkLCJyZWRTaGwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuc2hsKHRoaXMsQyl9LHcucHJvdG90eXBlLnJlZE11bD1mdW5jdGlvbihDKXtyZXR1cm4gZyh0aGlzLnJlZCwi'@;
put 'cmVkTXVsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkyKHRoaXMsQyksdGhpcy5yZWQubXVsKHRoaXMsQyl9LHcucHJvdG90eXBlLnJlZElNdWw9ZnVuY3Rpb24oQyl7cmV0dXJuIGcodGhpcy5yZWQsInJlZE11bCB3b3JrcyBvbmx5IHdpdGggcmVkIG51'@;
put 'bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5Mih0aGlzLEMpLHRoaXMucmVkLmltdWwodGhpcyxDKX0sdy5wcm90b3R5cGUucmVkU3FyPWZ1bmN0aW9uKCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZFNxciB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlz'@;
put 'KSx0aGlzLnJlZC5zcXIodGhpcyl9LHcucHJvdG90eXBlLnJlZElTcXI9ZnVuY3Rpb24oKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkSVNxciB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5pc3FyKHRoaXMpfSx3LnByb3RvdHlw'@;
put 'ZS5yZWRTcXJ0PWZ1bmN0aW9uKCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZFNxcnQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuc3FydCh0aGlzKX0sdy5wcm90b3R5cGUucmVkSW52bT1mdW5jdGlvbigpe3JldHVybiBnKHRo'@;
put 'aXMucmVkLCJyZWRJbnZtIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLmludm0odGhpcyl9LHcucHJvdG90eXBlLnJlZE5lZz1mdW5jdGlvbigpe3JldHVybiBnKHRoaXMucmVkLCJyZWROZWcgd29ya3Mgb25seSB3aXRoIHJl'@;
put 'ZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQubmVnKHRoaXMpfSx3LnByb3RvdHlwZS5yZWRQb3c9ZnVuY3Rpb24oQyl7cmV0dXJuIGcodGhpcy5yZWQmJiFDLnJlZCwicmVkUG93KG5vcm1hbE51bSkiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJl'@;
put 'ZC5wb3codGhpcyxDKX07dmFyIG1lPXtrMjU2Om51bGwscDIyNDpudWxsLHAxOTI6bnVsbCxwMjU1MTk6bnVsbH07ZnVuY3Rpb24gX2UoeCxDKXt0aGlzLm5hbWU9eCx0aGlzLnA9bmV3IHcoQywxNiksdGhpcy5uPXRoaXMucC5iaXRMZW5ndGgoKSx0aGlzLms9bmV3IHcoMSkuaXVzaGxuKHRo'@;
put 'aXMubikuaXN1Yih0aGlzLnApLHRoaXMudG1wPXRoaXMuX3RtcCgpfWZ1bmN0aW9uIFRlKCl7X2UuY2FsbCh0aGlzLCJrMjU2IiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZjMmYiKX1mdW5jdGlvbiBTZSgpe19l'@;
put 'LmNhbGwodGhpcywicDIyNCIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIDAwMDAwMDAwIDAwMDAwMDAwIDAwMDAwMDAxIil9ZnVuY3Rpb24gamUoKXtfZS5jYWxsKHRoaXMsInAxOTIiLCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmZmZiBm'@;
put 'ZmZmZmZmZiIpfWZ1bmN0aW9uIFYoKXtfZS5jYWxsKHRoaXMsIjI1NTE5IiwiN2ZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZlZCIpfWZ1bmN0aW9uIHAoeCl7aWYoInN0cmluZyI9PXR5cGVvZiB4KXt2YXIgQz13Ll9wcmlt'@;
put 'ZSh4KTt0aGlzLm09Qy5wLHRoaXMucHJpbWU9Q31lbHNlIGcoeC5ndG4oMSksIm1vZHVsdXMgbXVzdCBiZSBncmVhdGVyIHRoYW4gMSIpLHRoaXMubT14LHRoaXMucHJpbWU9bnVsbH1mdW5jdGlvbiBiKHgpe3AuY2FsbCh0aGlzLHgpLHRoaXMuc2hpZnQ9dGhpcy5tLmJpdExlbmd0aCgpLHRo'@;
put 'aXMuc2hpZnQlMjYhPTAmJih0aGlzLnNoaWZ0Kz0yNi10aGlzLnNoaWZ0JTI2KSx0aGlzLnI9bmV3IHcoMSkuaXVzaGxuKHRoaXMuc2hpZnQpLHRoaXMucjI9dGhpcy5pbW9kKHRoaXMuci5zcXIoKSksdGhpcy5yaW52PXRoaXMuci5faW52bXAodGhpcy5tKSx0aGlzLm1pbnY9dGhpcy5yaW52'@;
put 'Lm11bCh0aGlzLnIpLmlzdWJuKDEpLmRpdih0aGlzLm0pLHRoaXMubWludj10aGlzLm1pbnYudW1vZCh0aGlzLnIpLHRoaXMubWludj10aGlzLnIuc3ViKHRoaXMubWludil9X2UucHJvdG90eXBlLl90bXA9ZnVuY3Rpb24oKXt2YXIgQz1uZXcgdyhudWxsKTtyZXR1cm4gQy53b3Jkcz1uZXcg'@;
put 'QXJyYXkoTWF0aC5jZWlsKHRoaXMubi8xMykpLEN9LF9lLnByb3RvdHlwZS5pcmVkdWNlPWZ1bmN0aW9uKEMpe3ZhciBILFQ9Qztkb3t0aGlzLnNwbGl0KFQsdGhpcy50bXApLEg9KFQ9KFQ9dGhpcy5pbXVsSyhUKSkuaWFkZCh0aGlzLnRtcCkpLmJpdExlbmd0aCgpfXdoaWxlKEg+dGhpcy5u'@;
put 'KTt2YXIgaj1IPHRoaXMubj8tMTpULnVjbXAodGhpcy5wKTtyZXR1cm4gMD09PWo/KFQud29yZHNbMF09MCxULmxlbmd0aD0xKTpqPjA/VC5pc3ViKHRoaXMucCk6dm9pZCAwIT09VC5zdHJpcD9ULnN0cmlwKCk6VC5fc3RyaXAoKSxUfSxfZS5wcm90b3R5cGUuc3BsaXQ9ZnVuY3Rpb24oQyxU'@;
put 'KXtDLml1c2hybih0aGlzLm4sMCxUKX0sX2UucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKEMpe3JldHVybiBDLmltdWwodGhpcy5rKX0sQihUZSxfZSksVGUucHJvdG90eXBlLnNwbGl0PWZ1bmN0aW9uKEMsVCl7Zm9yKHZhciBIPTQxOTQzMDMsaj1NYXRoLm1pbihDLmxlbmd0aCw5KSxFPTA7'@;
put 'RTxqO0UrKylULndvcmRzW0VdPUMud29yZHNbRV07aWYoVC5sZW5ndGg9aixDLmxlbmd0aDw9OSlyZXR1cm4gQy53b3Jkc1swXT0wLHZvaWQoQy5sZW5ndGg9MSk7dmFyIG09Qy53b3Jkc1s5XTtmb3IoVC53b3Jkc1tULmxlbmd0aCsrXT1tJkgsRT0xMDtFPEMubGVuZ3RoO0UrKyl7dmFyIEE9'@;
put 'MHxDLndvcmRzW0VdO0Mud29yZHNbRS0xMF09KEEmSCk8PDR8bT4+PjIyLG09QX1DLndvcmRzW0UtMTBdPW0+Pj49MjIsQy5sZW5ndGgtPTA9PT1tJiZDLmxlbmd0aD4xMD8xMDo5fSxUZS5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24oQyl7Qy53b3Jkc1tDLmxlbmd0aF09MCxDLndvcmRzW0Mu'@;
put 'bGVuZ3RoKzFdPTAsQy5sZW5ndGgrPTI7Zm9yKHZhciBUPTAsSD0wO0g8Qy5sZW5ndGg7SCsrKXt2YXIgaj0wfEMud29yZHNbSF07Qy53b3Jkc1tIXT02NzEwODg2MyYoVCs9OTc3KmopLFQ9NjQqaisoVC82NzEwODg2NHwwKX1yZXR1cm4gMD09PUMud29yZHNbQy5sZW5ndGgtMV0mJihDLmxl'@;
put 'bmd0aC0tLDA9PT1DLndvcmRzW0MubGVuZ3RoLTFdJiZDLmxlbmd0aC0tKSxDfSxCKFNlLF9lKSxCKGplLF9lKSxCKFYsX2UpLFYucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKEMpe2Zvcih2YXIgVD0wLEg9MDtIPEMubGVuZ3RoO0grKyl7dmFyIGo9MTkqKDB8Qy53b3Jkc1tIXSkrVCxFPTY3'@;
put 'MTA4ODYzJmo7aj4+Pj0yNixDLndvcmRzW0hdPUUsVD1qfXJldHVybiAwIT09VCYmKEMud29yZHNbQy5sZW5ndGgrK109VCksQ30sdy5fcHJpbWU9ZnVuY3Rpb24oQyl7aWYobWVbQ10pcmV0dXJuIG1lW0NdO3ZhciBUO2lmKCJrMjU2Ij09PUMpVD1uZXcgVGU7ZWxzZSBpZigicDIyNCI9PT1D'@;
put 'KVQ9bmV3IFNlO2Vsc2UgaWYoInAxOTIiPT09QylUPW5ldyBqZTtlbHNle2lmKCJwMjU1MTkiIT09Qyl0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gcHJpbWUgIitDKTtUPW5ldyBWfXJldHVybiBtZVtDXT1ULFR9LHAucHJvdG90eXBlLl92ZXJpZnkxPWZ1bmN0aW9uKEMpe2coMD09PUMubmVn'@;
put 'YXRpdmUsInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIiksZyhDLnJlZCwicmVkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpfSxwLnByb3RvdHlwZS5fdmVyaWZ5Mj1mdW5jdGlvbihDLFQpe2coIShDLm5lZ2F0aXZlfFQubmVnYXRpdmUpLCJyZWQgd29ya3Mgb25seSB3aXRo'@;
put 'IHBvc2l0aXZlcyIpLGcoQy5yZWQmJkMucmVkPT09VC5yZWQsInJlZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKX0scC5wcm90b3R5cGUuaW1vZD1mdW5jdGlvbihDKXtyZXR1cm4gdGhpcy5wcmltZT90aGlzLnByaW1lLmlyZWR1Y2UoQykuX2ZvcmNlUmVkKHRoaXMpOihOKEMsQy51'@;
put 'bW9kKHRoaXMubSkuX2ZvcmNlUmVkKHRoaXMpKSxDKX0scC5wcm90b3R5cGUubmVnPWZ1bmN0aW9uKEMpe3JldHVybiBDLmlzWmVybygpP0MuY2xvbmUoKTp0aGlzLm0uc3ViKEMpLl9mb3JjZVJlZCh0aGlzKX0scC5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKEMsVCl7dGhpcy5fdmVyaWZ5MihD'@;
put 'LFQpO3ZhciBIPUMuYWRkKFQpO3JldHVybiBILmNtcCh0aGlzLm0pPj0wJiZILmlzdWIodGhpcy5tKSxILl9mb3JjZVJlZCh0aGlzKX0scC5wcm90b3R5cGUuaWFkZD1mdW5jdGlvbihDLFQpe3RoaXMuX3ZlcmlmeTIoQyxUKTt2YXIgSD1DLmlhZGQoVCk7cmV0dXJuIEguY21wKHRoaXMubSk+'@;
put 'PTAmJkguaXN1Yih0aGlzLm0pLEh9LHAucHJvdG90eXBlLnN1Yj1mdW5jdGlvbihDLFQpe3RoaXMuX3ZlcmlmeTIoQyxUKTt2YXIgSD1DLnN1YihUKTtyZXR1cm4gSC5jbXBuKDApPDAmJkguaWFkZCh0aGlzLm0pLEguX2ZvcmNlUmVkKHRoaXMpfSxwLnByb3RvdHlwZS5pc3ViPWZ1bmN0aW9u'@;
put 'KEMsVCl7dGhpcy5fdmVyaWZ5MihDLFQpO3ZhciBIPUMuaXN1YihUKTtyZXR1cm4gSC5jbXBuKDApPDAmJkguaWFkZCh0aGlzLm0pLEh9LHAucHJvdG90eXBlLnNobD1mdW5jdGlvbihDLFQpe3JldHVybiB0aGlzLl92ZXJpZnkxKEMpLHRoaXMuaW1vZChDLnVzaGxuKFQpKX0scC5wcm90b3R5'@;
put 'cGUuaW11bD1mdW5jdGlvbihDLFQpe3JldHVybiB0aGlzLl92ZXJpZnkyKEMsVCksdGhpcy5pbW9kKEMuaW11bChUKSl9LHAucHJvdG90eXBlLm11bD1mdW5jdGlvbihDLFQpe3JldHVybiB0aGlzLl92ZXJpZnkyKEMsVCksdGhpcy5pbW9kKEMubXVsKFQpKX0scC5wcm90b3R5cGUuaXNxcj1m'@;
put 'dW5jdGlvbihDKXtyZXR1cm4gdGhpcy5pbXVsKEMsQy5jbG9uZSgpKX0scC5wcm90b3R5cGUuc3FyPWZ1bmN0aW9uKEMpe3JldHVybiB0aGlzLm11bChDLEMpfSxwLnByb3RvdHlwZS5zcXJ0PWZ1bmN0aW9uKEMpe2lmKEMuaXNaZXJvKCkpcmV0dXJuIEMuY2xvbmUoKTt2YXIgVD10aGlzLm0u'@;
put 'YW5kbG4oMyk7aWYoZyhUJTI9PTEpLDM9PT1UKXt2YXIgSD10aGlzLm0uYWRkKG5ldyB3KDEpKS5pdXNocm4oMik7cmV0dXJuIHRoaXMucG93KEMsSCl9Zm9yKHZhciBqPXRoaXMubS5zdWJuKDEpLEU9MDshai5pc1plcm8oKSYmMD09PWouYW5kbG4oMSk7KUUrKyxqLml1c2hybigxKTtnKCFq'@;
put 'LmlzWmVybygpKTt2YXIgbT1uZXcgdygxKS50b1JlZCh0aGlzKSxBPW0ucmVkTmVnKCksYWU9dGhpcy5tLnN1Ym4oMSkuaXVzaHJuKDEpLHRlPXRoaXMubS5iaXRMZW5ndGgoKTtmb3IodGU9bmV3IHcoMip0ZSp0ZSkudG9SZWQodGhpcyk7MCE9PXRoaXMucG93KHRlLGFlKS5jbXAoQSk7KXRl'@;
put 'LnJlZElBZGQoQSk7Zm9yKHZhciBzZT10aGlzLnBvdyh0ZSxqKSx3ZT10aGlzLnBvdyhDLGouYWRkbigxKS5pdXNocm4oMSkpLFVlPXRoaXMucG93KEMsaiksSmU9RTswIT09VWUuY21wKG0pOyl7Zm9yKHZhciBvdD1VZSx4ZT0wOzAhPT1vdC5jbXAobSk7eGUrKylvdD1vdC5yZWRTcXIoKTtn'@;
put 'KHhlPEplKTt2YXIgdmU9dGhpcy5wb3coc2UsbmV3IHcoMSkuaXVzaGxuKEplLXhlLTEpKTt3ZT13ZS5yZWRNdWwodmUpLHNlPXZlLnJlZFNxcigpLFVlPVVlLnJlZE11bChzZSksSmU9eGV9cmV0dXJuIHdlfSxwLnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKEMpe3ZhciBUPUMuX2ludm1wKHRo'@;
put 'aXMubSk7cmV0dXJuIDAhPT1ULm5lZ2F0aXZlPyhULm5lZ2F0aXZlPTAsdGhpcy5pbW9kKFQpLnJlZE5lZygpKTp0aGlzLmltb2QoVCl9LHAucHJvdG90eXBlLnBvdz1mdW5jdGlvbihDLFQpe2lmKFQuaXNaZXJvKCkpcmV0dXJuIG5ldyB3KDEpLnRvUmVkKHRoaXMpO2lmKDA9PT1ULmNtcG4o'@;
put 'MSkpcmV0dXJuIEMuY2xvbmUoKTt2YXIgaj1uZXcgQXJyYXkoMTYpO2pbMF09bmV3IHcoMSkudG9SZWQodGhpcyksalsxXT1DO2Zvcih2YXIgRT0yO0U8ai5sZW5ndGg7RSsrKWpbRV09dGhpcy5tdWwoaltFLTFdLEMpO3ZhciBtPWpbMF0sQT0wLGFlPTAsdGU9VC5iaXRMZW5ndGgoKSUyNjtm'@;
put 'b3IoMD09PXRlJiYodGU9MjYpLEU9VC5sZW5ndGgtMTtFPj0wO0UtLSl7Zm9yKHZhciBzZT1ULndvcmRzW0VdLHdlPXRlLTE7d2U+PTA7d2UtLSl7dmFyIFVlPXNlPj53ZSYxO20hPT1qWzBdJiYobT10aGlzLnNxcihtKSksMCE9PVVlfHwwIT09QT8oQTw8PTEsQXw9VWUsKDQ9PSsrYWV8fDA9'@;
put 'PT1FJiYwPT09d2UpJiYobT10aGlzLm11bChtLGpbQV0pLGFlPTAsQT0wKSk6YWU9MH10ZT0yNn1yZXR1cm4gbX0scC5wcm90b3R5cGUuY29udmVydFRvPWZ1bmN0aW9uKEMpe3ZhciBUPUMudW1vZCh0aGlzLm0pO3JldHVybiBUPT09Qz9ULmNsb25lKCk6VH0scC5wcm90b3R5cGUuY29udmVy'@;
put 'dEZyb209ZnVuY3Rpb24oQyl7dmFyIFQ9Qy5jbG9uZSgpO3JldHVybiBULnJlZD1udWxsLFR9LHcubW9udD1mdW5jdGlvbihDKXtyZXR1cm4gbmV3IGIoQyl9LEIoYixwKSxiLnByb3RvdHlwZS5jb252ZXJ0VG89ZnVuY3Rpb24oQyl7cmV0dXJuIHRoaXMuaW1vZChDLnVzaGxuKHRoaXMuc2hp'@;
put 'ZnQpKX0sYi5wcm90b3R5cGUuY29udmVydEZyb209ZnVuY3Rpb24oQyl7dmFyIFQ9dGhpcy5pbW9kKEMubXVsKHRoaXMucmludikpO3JldHVybiBULnJlZD1udWxsLFR9LGIucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24oQyxUKXtpZihDLmlzWmVybygpfHxULmlzWmVybygpKXJldHVybiBDLndv'@;
put 'cmRzWzBdPTAsQy5sZW5ndGg9MSxDO3ZhciBIPUMuaW11bChUKSxqPUgubWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubWludikuaW1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm0pLEU9SC5pc3ViKGopLml1c2hybih0aGlzLnNoaWZ0KSxtPUU7cmV0dXJuIEUuY21wKHRoaXMubSk+PTA/'@;
put 'bT1FLmlzdWIodGhpcy5tKTpFLmNtcG4oMCk8MCYmKG09RS5pYWRkKHRoaXMubSkpLG0uX2ZvcmNlUmVkKHRoaXMpfSxiLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24oQyxUKXtpZihDLmlzWmVybygpfHxULmlzWmVybygpKXJldHVybiBuZXcgdygwKS5fZm9yY2VSZWQodGhpcyk7dmFyIEg9Qy5t'@;
put 'dWwoVCksaj1ILm1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm1pbnYpLmltYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5tKSxFPUguaXN1YihqKS5pdXNocm4odGhpcy5zaGlmdCksbT1FO3JldHVybiBFLmNtcCh0aGlzLm0pPj0wP209RS5pc3ViKHRoaXMubSk6RS5jbXBuKDApPDAmJiht'@;
put 'PUUuaWFkZCh0aGlzLm0pKSxtLl9mb3JjZVJlZCh0aGlzKX0sYi5wcm90b3R5cGUuaW52bT1mdW5jdGlvbihDKXtyZXR1cm4gdGhpcy5pbW9kKEMuX2ludm1wKHRoaXMubSkubXVsKHRoaXMucjIpKS5fZm9yY2VSZWQodGhpcyl9fSh1ZT15Lm5tZCh1ZSksdGhpcyl9LDk5MzE6KHVlLFgseSk9'@;
put 'Pnt2YXIgSTtmdW5jdGlvbiBfKEIpe3RoaXMucmFuZD1CfWlmKHVlLmV4cG9ydHM9ZnVuY3Rpb24odyl7cmV0dXJuIEl8fChJPW5ldyBfKG51bGwpKSxJLmdlbmVyYXRlKHcpfSx1ZS5leHBvcnRzLlJhbmQ9XyxfLnByb3RvdHlwZS5nZW5lcmF0ZT1mdW5jdGlvbih3KXtyZXR1cm4gdGhpcy5f'@;
put 'cmFuZCh3KX0sXy5wcm90b3R5cGUuX3JhbmQ9ZnVuY3Rpb24odyl7aWYodGhpcy5yYW5kLmdldEJ5dGVzKXJldHVybiB0aGlzLnJhbmQuZ2V0Qnl0ZXModyk7Zm9yKHZhciBQPW5ldyBVaW50OEFycmF5KHcpLEY9MDtGPFAubGVuZ3RoO0YrKylQW0ZdPXRoaXMucmFuZC5nZXRCeXRlKCk7cmV0'@;
put 'dXJuIFB9LCJvYmplY3QiPT10eXBlb2Ygc2VsZilzZWxmLmNyeXB0byYmc2VsZi5jcnlwdG8uZ2V0UmFuZG9tVmFsdWVzP18ucHJvdG90eXBlLl9yYW5kPWZ1bmN0aW9uKHcpe3ZhciBQPW5ldyBVaW50OEFycmF5KHcpO3JldHVybiBzZWxmLmNyeXB0by5nZXRSYW5kb21WYWx1ZXMoUCksUH06'@;
put 'c2VsZi5tc0NyeXB0byYmc2VsZi5tc0NyeXB0by5nZXRSYW5kb21WYWx1ZXM/Xy5wcm90b3R5cGUuX3JhbmQ9ZnVuY3Rpb24odyl7dmFyIFA9bmV3IFVpbnQ4QXJyYXkodyk7cmV0dXJuIHNlbGYubXNDcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKFApLFB9OiJvYmplY3QiPT10eXBlb2Ygd2luZG93'@;
put 'JiYoXy5wcm90b3R5cGUuX3JhbmQ9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoIk5vdCBpbXBsZW1lbnRlZCB5ZXQiKX0pO2Vsc2UgdHJ5e3ZhciBnPXkoOTIxNCk7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGcucmFuZG9tQnl0ZXMpdGhyb3cgbmV3IEVycm9yKCJOb3Qgc3VwcG9ydGVkIik7'@;
put 'Xy5wcm90b3R5cGUuX3JhbmQ9ZnVuY3Rpb24odyl7cmV0dXJuIGcucmFuZG9tQnl0ZXModyl9fWNhdGNoe319LDQ0OTc6KHVlLFgseSk9Pnt2YXIgST15KDk1MDkpLkJ1ZmZlcjtmdW5jdGlvbiBfKE8pe0kuaXNCdWZmZXIoTyl8fChPPUkuZnJvbShPKSk7Zm9yKHZhciB6PU8ubGVuZ3RoLzR8'@;
put 'MCxOPW5ldyBBcnJheSh6KSxMPTA7TDx6O0wrKylOW0xdPU8ucmVhZFVJbnQzMkJFKDQqTCk7cmV0dXJuIE59ZnVuY3Rpb24gZyhPKXtmb3IoOzA8Ty5sZW5ndGg7TysrKU9bMF09MH1mdW5jdGlvbiBCKE8seixOLEwsSyl7Zm9yKHZhciBsZSxtZSxfZSxUZSxVPU5bMF0sVz1OWzFdLFk9Tlsy'@;
put 'XSxxPU5bM10sZWU9T1swXV56WzBdLEo9T1sxXV56WzFdLG5lPU9bMl1eelsyXSxpZT1PWzNdXnpbM10sU2U9NCxqZT0xO2plPEs7amUrKylsZT1VW2VlPj4+MjRdXldbSj4+PjE2JjI1NV1eWVtuZT4+PjgmMjU1XV5xWzI1NSZpZV1eeltTZSsrXSxtZT1VW0o+Pj4yNF1eV1tuZT4+PjE2JjI1'@;
put 'NV1eWVtpZT4+PjgmMjU1XV5xWzI1NSZlZV1eeltTZSsrXSxfZT1VW25lPj4+MjRdXldbaWU+Pj4xNiYyNTVdXllbZWU+Pj44JjI1NV1ecVsyNTUmSl1eeltTZSsrXSxUZT1VW2llPj4+MjRdXldbZWU+Pj4xNiYyNTVdXllbSj4+PjgmMjU1XV5xWzI1NSZuZV1eeltTZSsrXSxlZT1sZSxKPW1l'@;
put 'LG5lPV9lLGllPVRlO3JldHVybiBsZT0oTFtlZT4+PjI0XTw8MjR8TFtKPj4+MTYmMjU1XTw8MTZ8TFtuZT4+PjgmMjU1XTw8OHxMWzI1NSZpZV0pXnpbU2UrK10sbWU9KExbSj4+PjI0XTw8MjR8TFtuZT4+PjE2JjI1NV08PDE2fExbaWU+Pj44JjI1NV08PDh8TFsyNTUmZWVdKV56W1NlKytd'@;
put 'LF9lPShMW25lPj4+MjRdPDwyNHxMW2llPj4+MTYmMjU1XTw8MTZ8TFtlZT4+PjgmMjU1XTw8OHxMWzI1NSZKXSleeltTZSsrXSxUZT0oTFtpZT4+PjI0XTw8MjR8TFtlZT4+PjE2JjI1NV08PDE2fExbSj4+PjgmMjU1XTw8OHxMWzI1NSZuZV0pXnpbU2UrK10sW2xlPj4+PTAsbWU+Pj49MCxf'@;
put 'ZT4+Pj0wLFRlPj4+PTBdfXZhciB3PVswLDEsMiw0LDgsMTYsMzIsNjQsMTI4LDI3LDU0XSxQPWZ1bmN0aW9uKCl7Zm9yKHZhciBPPW5ldyBBcnJheSgyNTYpLHo9MDt6PDI1Njt6KyspT1t6XT16PDEyOD96PDwxOno8PDFeMjgzO2Zvcih2YXIgTj1bXSxMPVtdLEs9W1tdLFtdLFtdLFtdXSxV'@;
put 'PVtbXSxbXSxbXSxbXV0sVz0wLFk9MCxxPTA7cTwyNTY7KytxKXt2YXIgZWU9WV5ZPDwxXlk8PDJeWTw8M15ZPDw0O05bV109ZWU9ZWU+Pj44XjI1NSZlZV45OSxMW2VlXT1XO3ZhciBKPU9bV10sbmU9T1tKXSxpZT1PW25lXSxsZT0yNTcqT1tlZV1eMTY4NDMwMDgqZWU7S1swXVtXXT1sZTw8'@;
put 'MjR8bGU+Pj44LEtbMV1bV109bGU8PDE2fGxlPj4+MTYsS1syXVtXXT1sZTw8OHxsZT4+PjI0LEtbM11bV109bGUsVVswXVtlZV09KGxlPTE2ODQzMDA5KmllXjY1NTM3Km5lXjI1NypKXjE2ODQzMDA4KlcpPDwyNHxsZT4+PjgsVVsxXVtlZV09bGU8PDE2fGxlPj4+MTYsVVsyXVtlZV09bGU8'@;
put 'PDh8bGU+Pj4yNCxVWzNdW2VlXT1sZSwwPT09Vz9XPVk9MTooVz1KXk9bT1tPW2llXkpdXV0sWV49T1tPW1ldXSl9cmV0dXJue1NCT1g6TixJTlZfU0JPWDpMLFNVQl9NSVg6SyxJTlZfU1VCX01JWDpVfX0oKTtmdW5jdGlvbiBGKE8pe3RoaXMuX2tleT1fKE8pLHRoaXMuX3Jlc2V0KCl9Ri5i'@;
put 'bG9ja1NpemU9MTYsRi5rZXlTaXplPTMyLEYucHJvdG90eXBlLmJsb2NrU2l6ZT1GLmJsb2NrU2l6ZSxGLnByb3RvdHlwZS5rZXlTaXplPUYua2V5U2l6ZSxGLnByb3RvdHlwZS5fcmVzZXQ9ZnVuY3Rpb24oKXtmb3IodmFyIE89dGhpcy5fa2V5LHo9Ty5sZW5ndGgsTj16KzYsTD00KihOKzEp'@;
put 'LEs9W10sVT0wO1U8ejtVKyspS1tVXT1PW1VdO2ZvcihVPXo7VTxMO1UrKyl7dmFyIFc9S1tVLTFdO1Ulej09MD8oVz1QLlNCT1hbKFc9Vzw8OHxXPj4+MjQpPj4+MjRdPDwyNHxQLlNCT1hbVz4+PjE2JjI1NV08PDE2fFAuU0JPWFtXPj4+OCYyNTVdPDw4fFAuU0JPWFsyNTUmV10sV149d1tV'@;
put 'L3p8MF08PDI0KTp6PjYmJlUlej09NCYmKFc9UC5TQk9YW1c+Pj4yNF08PDI0fFAuU0JPWFtXPj4+MTYmMjU1XTw8MTZ8UC5TQk9YW1c+Pj44JjI1NV08PDh8UC5TQk9YWzI1NSZXXSksS1tVXT1LW1Utel1eV31mb3IodmFyIFk9W10scT0wO3E8TDtxKyspe3ZhciBlZT1MLXEsSj1LW2VlLShx'@;
put 'JTQ/MDo0KV07WVtxXT1xPDR8fGVlPD00P0o6UC5JTlZfU1VCX01JWFswXVtQLlNCT1hbSj4+PjI0XV1eUC5JTlZfU1VCX01JWFsxXVtQLlNCT1hbSj4+PjE2JjI1NV1dXlAuSU5WX1NVQl9NSVhbMl1bUC5TQk9YW0o+Pj44JjI1NV1dXlAuSU5WX1NVQl9NSVhbM11bUC5TQk9YWzI1NSZKXV19'@;
put 'dGhpcy5fblJvdW5kcz1OLHRoaXMuX2tleVNjaGVkdWxlPUssdGhpcy5faW52S2V5U2NoZWR1bGU9WX0sRi5wcm90b3R5cGUuZW5jcnlwdEJsb2NrUmF3PWZ1bmN0aW9uKE8pe3JldHVybiBCKE89XyhPKSx0aGlzLl9rZXlTY2hlZHVsZSxQLlNVQl9NSVgsUC5TQk9YLHRoaXMuX25Sb3VuZHMp'@;
put 'fSxGLnByb3RvdHlwZS5lbmNyeXB0QmxvY2s9ZnVuY3Rpb24oTyl7dmFyIHo9dGhpcy5lbmNyeXB0QmxvY2tSYXcoTyksTj1JLmFsbG9jVW5zYWZlKDE2KTtyZXR1cm4gTi53cml0ZVVJbnQzMkJFKHpbMF0sMCksTi53cml0ZVVJbnQzMkJFKHpbMV0sNCksTi53cml0ZVVJbnQzMkJFKHpbMl0s'@;
put 'OCksTi53cml0ZVVJbnQzMkJFKHpbM10sMTIpLE59LEYucHJvdG90eXBlLmRlY3J5cHRCbG9jaz1mdW5jdGlvbihPKXt2YXIgej0oTz1fKE8pKVsxXTtPWzFdPU9bM10sT1szXT16O3ZhciBOPUIoTyx0aGlzLl9pbnZLZXlTY2hlZHVsZSxQLklOVl9TVUJfTUlYLFAuSU5WX1NCT1gsdGhpcy5f'@;
put 'blJvdW5kcyksTD1JLmFsbG9jVW5zYWZlKDE2KTtyZXR1cm4gTC53cml0ZVVJbnQzMkJFKE5bMF0sMCksTC53cml0ZVVJbnQzMkJFKE5bM10sNCksTC53cml0ZVVJbnQzMkJFKE5bMl0sOCksTC53cml0ZVVJbnQzMkJFKE5bMV0sMTIpLEx9LEYucHJvdG90eXBlLnNjcnViPWZ1bmN0aW9uKCl7'@;
put 'Zyh0aGlzLl9rZXlTY2hlZHVsZSksZyh0aGlzLl9pbnZLZXlTY2hlZHVsZSksZyh0aGlzLl9rZXkpfSx1ZS5leHBvcnRzLkFFUz1GfSw0ODQ4Oih1ZSxYLHkpPT57dmFyIEk9eSg0NDk3KSxfPXkoOTUwOSkuQnVmZmVyLGc9eSgxMDI3KSxCPXkoNTcxNyksdz15KDMyODgpLFA9eSg3Mjk1KSxG'@;
put 'PXkoNjg1KTtmdW5jdGlvbiBOKEwsSyxVLFcpe2cuY2FsbCh0aGlzKTt2YXIgWT1fLmFsbG9jKDQsMCk7dGhpcy5fY2lwaGVyPW5ldyBJLkFFUyhLKTt2YXIgcT10aGlzLl9jaXBoZXIuZW5jcnlwdEJsb2NrKFkpO3RoaXMuX2doYXNoPW5ldyB3KHEpLFU9ZnVuY3Rpb24geihMLEssVSl7aWYo'@;
put 'MTI9PT1LLmxlbmd0aClyZXR1cm4gTC5fZmluSUQ9Xy5jb25jYXQoW0ssXy5mcm9tKFswLDAsMCwxXSldKSxfLmNvbmNhdChbSyxfLmZyb20oWzAsMCwwLDJdKV0pO3ZhciBXPW5ldyB3KFUpLFk9Sy5sZW5ndGgscT1ZJTE2O1cudXBkYXRlKEspLHEmJlcudXBkYXRlKF8uYWxsb2MocT0xNi1x'@;
put 'LDApKSxXLnVwZGF0ZShfLmFsbG9jKDgsMCkpO3ZhciBlZT04KlksSj1fLmFsbG9jKDgpO0oud3JpdGVVSW50QkUoZWUsMCw4KSxXLnVwZGF0ZShKKSxMLl9maW5JRD1XLnN0YXRlO3ZhciBuZT1fLmZyb20oTC5fZmluSUQpO3JldHVybiBGKG5lKSxuZX0odGhpcyxVLHEpLHRoaXMuX3ByZXY9'@;
put 'Xy5mcm9tKFUpLHRoaXMuX2NhY2hlPV8uYWxsb2NVbnNhZmUoMCksdGhpcy5fc2VjQ2FjaGU9Xy5hbGxvY1Vuc2FmZSgwKSx0aGlzLl9kZWNyeXB0PVcsdGhpcy5fYWxlbj0wLHRoaXMuX2xlbj0wLHRoaXMuX21vZGU9TCx0aGlzLl9hdXRoVGFnPW51bGwsdGhpcy5fY2FsbGVkPSExfUIoTixn'@;
put 'KSxOLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKEwpe2lmKCF0aGlzLl9jYWxsZWQmJnRoaXMuX2FsZW4pe3ZhciBLPTE2LXRoaXMuX2FsZW4lMTY7SzwxNiYmKEs9Xy5hbGxvYyhLLDApLHRoaXMuX2doYXNoLnVwZGF0ZShLKSl9dGhpcy5fY2FsbGVkPSEwO3ZhciBVPXRoaXMuX21vZGUu'@;
put 'ZW5jcnlwdCh0aGlzLEwpO3JldHVybiB0aGlzLl9naGFzaC51cGRhdGUodGhpcy5fZGVjcnlwdD9MOlUpLHRoaXMuX2xlbis9TC5sZW5ndGgsVX0sTi5wcm90b3R5cGUuX2ZpbmFsPWZ1bmN0aW9uKCl7aWYodGhpcy5fZGVjcnlwdCYmIXRoaXMuX2F1dGhUYWcpdGhyb3cgbmV3IEVycm9yKCJV'@;
put 'bnN1cHBvcnRlZCBzdGF0ZSBvciB1bmFibGUgdG8gYXV0aGVudGljYXRlIGRhdGEiKTt2YXIgTD1QKHRoaXMuX2doYXNoLmZpbmFsKDgqdGhpcy5fYWxlbiw4KnRoaXMuX2xlbiksdGhpcy5fY2lwaGVyLmVuY3J5cHRCbG9jayh0aGlzLl9maW5JRCkpO2lmKHRoaXMuX2RlY3J5cHQmJmZ1bmN0'@;
put 'aW9uIE8oTCxLKXt2YXIgVT0wO0wubGVuZ3RoIT09Sy5sZW5ndGgmJlUrKztmb3IodmFyIFc9TWF0aC5taW4oTC5sZW5ndGgsSy5sZW5ndGgpLFk9MDtZPFc7KytZKVUrPUxbWV1eS1tZXTtyZXR1cm4gVX0oTCx0aGlzLl9hdXRoVGFnKSl0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIHN0'@;
put 'YXRlIG9yIHVuYWJsZSB0byBhdXRoZW50aWNhdGUgZGF0YSIpO3RoaXMuX2F1dGhUYWc9TCx0aGlzLl9jaXBoZXIuc2NydWIoKX0sTi5wcm90b3R5cGUuZ2V0QXV0aFRhZz1mdW5jdGlvbigpe2lmKHRoaXMuX2RlY3J5cHR8fCFfLmlzQnVmZmVyKHRoaXMuX2F1dGhUYWcpKXRocm93IG5ldyBF'@;
put 'cnJvcigiQXR0ZW1wdGluZyB0byBnZXQgYXV0aCB0YWcgaW4gdW5zdXBwb3J0ZWQgc3RhdGUiKTtyZXR1cm4gdGhpcy5fYXV0aFRhZ30sTi5wcm90b3R5cGUuc2V0QXV0aFRhZz1mdW5jdGlvbihLKXtpZighdGhpcy5fZGVjcnlwdCl0aHJvdyBuZXcgRXJyb3IoIkF0dGVtcHRpbmcgdG8gc2V0'@;
put 'IGF1dGggdGFnIGluIHVuc3VwcG9ydGVkIHN0YXRlIik7dGhpcy5fYXV0aFRhZz1LfSxOLnByb3RvdHlwZS5zZXRBQUQ9ZnVuY3Rpb24oSyl7aWYodGhpcy5fY2FsbGVkKXRocm93IG5ldyBFcnJvcigiQXR0ZW1wdGluZyB0byBzZXQgQUFEIGluIHVuc3VwcG9ydGVkIHN0YXRlIik7dGhpcy5f'@;
put 'Z2hhc2gudXBkYXRlKEspLHRoaXMuX2FsZW4rPUsubGVuZ3RofSx1ZS5leHBvcnRzPU59LDQ2OTY6KHVlLFgseSk9Pnt2YXIgST15KDE0OTQpLF89eSg2MTkzKSxnPXkoNDk0Nik7WC5jcmVhdGVDaXBoZXI9WC5DaXBoZXI9SS5jcmVhdGVDaXBoZXIsWC5jcmVhdGVDaXBoZXJpdj1YLkNpcGhl'@;
put 'cml2PUkuY3JlYXRlQ2lwaGVyaXYsWC5jcmVhdGVEZWNpcGhlcj1YLkRlY2lwaGVyPV8uY3JlYXRlRGVjaXBoZXIsWC5jcmVhdGVEZWNpcGhlcml2PVguRGVjaXBoZXJpdj1fLmNyZWF0ZURlY2lwaGVyaXYsWC5saXN0Q2lwaGVycz1YLmdldENpcGhlcnM9ZnVuY3Rpb24gQigpe3JldHVybiBP'@;
put 'YmplY3Qua2V5cyhnKX19LDYxOTM6KHVlLFgseSk9Pnt2YXIgST15KDQ4NDgpLF89eSg5NTA5KS5CdWZmZXIsZz15KDQ1KSxCPXkoNTk2OSksdz15KDEwMjcpLFA9eSg0NDk3KSxGPXkoMzA0OCk7ZnVuY3Rpb24geihXLFkscSl7dy5jYWxsKHRoaXMpLHRoaXMuX2NhY2hlPW5ldyBOLHRoaXMu'@;
put 'X2xhc3Q9dm9pZCAwLHRoaXMuX2NpcGhlcj1uZXcgUC5BRVMoWSksdGhpcy5fcHJldj1fLmZyb20ocSksdGhpcy5fbW9kZT1XLHRoaXMuX2F1dG9wYWRkaW5nPSEwfWZ1bmN0aW9uIE4oKXt0aGlzLmNhY2hlPV8uYWxsb2NVbnNhZmUoMCl9ZnVuY3Rpb24gSyhXLFkscSl7dmFyIGVlPWdbVy50'@;
put 'b0xvd2VyQ2FzZSgpXTtpZighZWUpdGhyb3cgbmV3IFR5cGVFcnJvcigiaW52YWxpZCBzdWl0ZSB0eXBlIik7aWYoInN0cmluZyI9PXR5cGVvZiBxJiYocT1fLmZyb20ocSkpLCJHQ00iIT09ZWUubW9kZSYmcS5sZW5ndGghPT1lZS5pdil0aHJvdyBuZXcgVHlwZUVycm9yKCJpbnZhbGlkIGl2'@;
put 'IGxlbmd0aCAiK3EubGVuZ3RoKTtpZigic3RyaW5nIj09dHlwZW9mIFkmJihZPV8uZnJvbShZKSksWS5sZW5ndGghPT1lZS5rZXkvOCl0aHJvdyBuZXcgVHlwZUVycm9yKCJpbnZhbGlkIGtleSBsZW5ndGggIitZLmxlbmd0aCk7cmV0dXJuInN0cmVhbSI9PT1lZS50eXBlP25ldyBCKGVlLm1v'@;
put 'ZHVsZSxZLHEsITApOiJhdXRoIj09PWVlLnR5cGU/bmV3IEkoZWUubW9kdWxlLFkscSwhMCk6bmV3IHooZWUubW9kdWxlLFkscSl9eSg1NzE3KSh6LHcpLHoucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oVyl7dGhpcy5fY2FjaGUuYWRkKFcpO2Zvcih2YXIgWSxxLGVlPVtdO1k9dGhpcy5f'@;
put 'Y2FjaGUuZ2V0KHRoaXMuX2F1dG9wYWRkaW5nKTspcT10aGlzLl9tb2RlLmRlY3J5cHQodGhpcyxZKSxlZS5wdXNoKHEpO3JldHVybiBfLmNvbmNhdChlZSl9LHoucHJvdG90eXBlLl9maW5hbD1mdW5jdGlvbigpe3ZhciBXPXRoaXMuX2NhY2hlLmZsdXNoKCk7aWYodGhpcy5fYXV0b3BhZGRp'@;
put 'bmcpcmV0dXJuIGZ1bmN0aW9uIEwoVyl7dmFyIFk9V1sxNV07aWYoWTwxfHxZPjE2KXRocm93IG5ldyBFcnJvcigidW5hYmxlIHRvIGRlY3J5cHQgZGF0YSIpO2Zvcih2YXIgcT0tMTsrK3E8WTspaWYoV1txKygxNi1ZKV0hPT1ZKXRocm93IG5ldyBFcnJvcigidW5hYmxlIHRvIGRlY3J5cHQg'@;
put 'ZGF0YSIpO2lmKDE2IT09WSlyZXR1cm4gVy5zbGljZSgwLDE2LVkpfSh0aGlzLl9tb2RlLmRlY3J5cHQodGhpcyxXKSk7aWYoVyl0aHJvdyBuZXcgRXJyb3IoImRhdGEgbm90IG11bHRpcGxlIG9mIGJsb2NrIGxlbmd0aCIpfSx6LnByb3RvdHlwZS5zZXRBdXRvUGFkZGluZz1mdW5jdGlvbihX'@;
put 'KXtyZXR1cm4gdGhpcy5fYXV0b3BhZGRpbmc9ISFXLHRoaXN9LE4ucHJvdG90eXBlLmFkZD1mdW5jdGlvbihXKXt0aGlzLmNhY2hlPV8uY29uY2F0KFt0aGlzLmNhY2hlLFddKX0sTi5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKFcpe3ZhciBZO2lmKFcpe2lmKHRoaXMuY2FjaGUubGVuZ3RoPjE2'@;
put 'KXJldHVybiBZPXRoaXMuY2FjaGUuc2xpY2UoMCwxNiksdGhpcy5jYWNoZT10aGlzLmNhY2hlLnNsaWNlKDE2KSxZfWVsc2UgaWYodGhpcy5jYWNoZS5sZW5ndGg+PTE2KXJldHVybiBZPXRoaXMuY2FjaGUuc2xpY2UoMCwxNiksdGhpcy5jYWNoZT10aGlzLmNhY2hlLnNsaWNlKDE2KSxZO3Jl'@;
put 'dHVybiBudWxsfSxOLnByb3RvdHlwZS5mbHVzaD1mdW5jdGlvbigpe2lmKHRoaXMuY2FjaGUubGVuZ3RoKXJldHVybiB0aGlzLmNhY2hlfSxYLmNyZWF0ZURlY2lwaGVyPWZ1bmN0aW9uIFUoVyxZKXt2YXIgcT1nW1cudG9Mb3dlckNhc2UoKV07aWYoIXEpdGhyb3cgbmV3IFR5cGVFcnJvcigi'@;
put 'aW52YWxpZCBzdWl0ZSB0eXBlIik7dmFyIGVlPUYoWSwhMSxxLmtleSxxLml2KTtyZXR1cm4gSyhXLGVlLmtleSxlZS5pdil9LFguY3JlYXRlRGVjaXBoZXJpdj1LfSwxNDk0Oih1ZSxYLHkpPT57dmFyIEk9eSg0NSksXz15KDQ4NDgpLGc9eSg5NTA5KS5CdWZmZXIsQj15KDU5NjkpLHc9eSgx'@;
put 'MDI3KSxQPXkoNDQ5NyksRj15KDMwNDgpO2Z1bmN0aW9uIHooVyxZLHEpe3cuY2FsbCh0aGlzKSx0aGlzLl9jYWNoZT1uZXcgTCx0aGlzLl9jaXBoZXI9bmV3IFAuQUVTKFkpLHRoaXMuX3ByZXY9Zy5mcm9tKHEpLHRoaXMuX21vZGU9Vyx0aGlzLl9hdXRvcGFkZGluZz0hMH15KDU3MTcpKHos'@;
put 'dyksei5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbihXKXt0aGlzLl9jYWNoZS5hZGQoVyk7Zm9yKHZhciBZLHEsZWU9W107WT10aGlzLl9jYWNoZS5nZXQoKTspcT10aGlzLl9tb2RlLmVuY3J5cHQodGhpcyxZKSxlZS5wdXNoKHEpO3JldHVybiBnLmNvbmNhdChlZSl9O3ZhciBOPWcuYWxs'@;
put 'b2MoMTYsMTYpO2Z1bmN0aW9uIEwoKXt0aGlzLmNhY2hlPWcuYWxsb2NVbnNhZmUoMCl9ZnVuY3Rpb24gSyhXLFkscSl7dmFyIGVlPUlbVy50b0xvd2VyQ2FzZSgpXTtpZighZWUpdGhyb3cgbmV3IFR5cGVFcnJvcigiaW52YWxpZCBzdWl0ZSB0eXBlIik7aWYoInN0cmluZyI9PXR5cGVvZiBZ'@;
put 'JiYoWT1nLmZyb20oWSkpLFkubGVuZ3RoIT09ZWUua2V5LzgpdGhyb3cgbmV3IFR5cGVFcnJvcigiaW52YWxpZCBrZXkgbGVuZ3RoICIrWS5sZW5ndGgpO2lmKCJzdHJpbmciPT10eXBlb2YgcSYmKHE9Zy5mcm9tKHEpKSwiR0NNIiE9PWVlLm1vZGUmJnEubGVuZ3RoIT09ZWUuaXYpdGhyb3cg'@;
put 'bmV3IFR5cGVFcnJvcigiaW52YWxpZCBpdiBsZW5ndGggIitxLmxlbmd0aCk7cmV0dXJuInN0cmVhbSI9PT1lZS50eXBlP25ldyBCKGVlLm1vZHVsZSxZLHEpOiJhdXRoIj09PWVlLnR5cGU/bmV3IF8oZWUubW9kdWxlLFkscSk6bmV3IHooZWUubW9kdWxlLFkscSl9ei5wcm90b3R5cGUuX2Zp'@;
put 'bmFsPWZ1bmN0aW9uKCl7dmFyIFc9dGhpcy5fY2FjaGUuZmx1c2goKTtpZih0aGlzLl9hdXRvcGFkZGluZylyZXR1cm4gVz10aGlzLl9tb2RlLmVuY3J5cHQodGhpcyxXKSx0aGlzLl9jaXBoZXIuc2NydWIoKSxXO2lmKCFXLmVxdWFscyhOKSl0aHJvdyB0aGlzLl9jaXBoZXIuc2NydWIoKSxu'@;
put 'ZXcgRXJyb3IoImRhdGEgbm90IG11bHRpcGxlIG9mIGJsb2NrIGxlbmd0aCIpfSx6LnByb3RvdHlwZS5zZXRBdXRvUGFkZGluZz1mdW5jdGlvbihXKXtyZXR1cm4gdGhpcy5fYXV0b3BhZGRpbmc9ISFXLHRoaXN9LEwucHJvdG90eXBlLmFkZD1mdW5jdGlvbihXKXt0aGlzLmNhY2hlPWcuY29u'@;
put 'Y2F0KFt0aGlzLmNhY2hlLFddKX0sTC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKCl7aWYodGhpcy5jYWNoZS5sZW5ndGg+MTUpe3ZhciBXPXRoaXMuY2FjaGUuc2xpY2UoMCwxNik7cmV0dXJuIHRoaXMuY2FjaGU9dGhpcy5jYWNoZS5zbGljZSgxNiksV31yZXR1cm4gbnVsbH0sTC5wcm90b3R5'@;
put 'cGUuZmx1c2g9ZnVuY3Rpb24oKXtmb3IodmFyIFc9MTYtdGhpcy5jYWNoZS5sZW5ndGgsWT1nLmFsbG9jVW5zYWZlKFcpLHE9LTE7KytxPFc7KVkud3JpdGVVSW50OChXLHEpO3JldHVybiBnLmNvbmNhdChbdGhpcy5jYWNoZSxZXSl9LFguY3JlYXRlQ2lwaGVyaXY9SyxYLmNyZWF0ZUNpcGhl'@;
put 'cj1mdW5jdGlvbiBVKFcsWSl7dmFyIHE9SVtXLnRvTG93ZXJDYXNlKCldO2lmKCFxKXRocm93IG5ldyBUeXBlRXJyb3IoImludmFsaWQgc3VpdGUgdHlwZSIpO3ZhciBlZT1GKFksITEscS5rZXkscS5pdik7cmV0dXJuIEsoVyxlZS5rZXksZWUuaXYpfX0sMzI4ODoodWUsWCx5KT0+e3ZhciBJ'@;
put 'PXkoOTUwOSkuQnVmZmVyLF89SS5hbGxvYygxNiwwKTtmdW5jdGlvbiBCKFApe3ZhciBGPUkuYWxsb2NVbnNhZmUoMTYpO3JldHVybiBGLndyaXRlVUludDMyQkUoUFswXT4+PjAsMCksRi53cml0ZVVJbnQzMkJFKFBbMV0+Pj4wLDQpLEYud3JpdGVVSW50MzJCRShQWzJdPj4+MCw4KSxGLndy'@;
put 'aXRlVUludDMyQkUoUFszXT4+PjAsMTIpLEZ9ZnVuY3Rpb24gdyhQKXt0aGlzLmg9UCx0aGlzLnN0YXRlPUkuYWxsb2MoMTYsMCksdGhpcy5jYWNoZT1JLmFsbG9jVW5zYWZlKDApfXcucHJvdG90eXBlLmdoYXNoPWZ1bmN0aW9uKFApe2Zvcih2YXIgRj0tMTsrK0Y8UC5sZW5ndGg7KXRoaXMu'@;
put 'c3RhdGVbRl1ePVBbRl07dGhpcy5fbXVsdGlwbHkoKX0sdy5wcm90b3R5cGUuX211bHRpcGx5PWZ1bmN0aW9uKCl7Zm9yKHZhciBPLE4sUD1mdW5jdGlvbiBnKFApe3JldHVybltQLnJlYWRVSW50MzJCRSgwKSxQLnJlYWRVSW50MzJCRSg0KSxQLnJlYWRVSW50MzJCRSg4KSxQLnJlYWRVSW50'@;
put 'MzJCRSgxMildfSh0aGlzLmgpLEY9WzAsMCwwLDBdLEw9LTE7KytMPDEyODspe2ZvcighISh0aGlzLnN0YXRlW35+KEwvOCldJjE8PDctTCU4KSYmKEZbMF1ePVBbMF0sRlsxXV49UFsxXSxGWzJdXj1QWzJdLEZbM11ePVBbM10pLE49ISEoMSZQWzNdKSxPPTM7Tz4wO08tLSlQW09dPVBbT10+'@;
put 'Pj4xfCgxJlBbTy0xXSk8PDMxO1BbMF09UFswXT4+PjEsTiYmKFBbMF09LTUyMDA5MzY5Nl5QWzBdKX10aGlzLnN0YXRlPUIoRil9LHcucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbihQKXt0aGlzLmNhY2hlPUkuY29uY2F0KFt0aGlzLmNhY2hlLFBdKTtmb3IodmFyIEY7dGhpcy5jYWNoZS5s'@;
put 'ZW5ndGg+PTE2OylGPXRoaXMuY2FjaGUuc2xpY2UoMCwxNiksdGhpcy5jYWNoZT10aGlzLmNhY2hlLnNsaWNlKDE2KSx0aGlzLmdoYXNoKEYpfSx3LnByb3RvdHlwZS5maW5hbD1mdW5jdGlvbihQLEYpe3JldHVybiB0aGlzLmNhY2hlLmxlbmd0aCYmdGhpcy5naGFzaChJLmNvbmNhdChbdGhp'@;
put 'cy5jYWNoZSxfXSwxNikpLHRoaXMuZ2hhc2goQihbMCxQLDAsRl0pKSx0aGlzLnN0YXRlfSx1ZS5leHBvcnRzPXd9LDY4NTp1ZT0+e3VlLmV4cG9ydHM9ZnVuY3Rpb24gWCh5KXtmb3IodmFyIF8sST15Lmxlbmd0aDtJLS07KXtpZigyNTUhPT0oXz15LnJlYWRVSW50OChJKSkpe18rKyx5Lndy'@;
put 'aXRlVUludDgoXyxJKTticmVha315LndyaXRlVUludDgoMCxJKX19fSw1MjkyOih1ZSxYLHkpPT57dmFyIEk9eSg3Mjk1KTtYLmVuY3J5cHQ9ZnVuY3Rpb24oXyxnKXt2YXIgQj1JKGcsXy5fcHJldik7cmV0dXJuIF8uX3ByZXY9Xy5fY2lwaGVyLmVuY3J5cHRCbG9jayhCKSxfLl9wcmV2fSxY'@;
put 'LmRlY3J5cHQ9ZnVuY3Rpb24oXyxnKXt2YXIgQj1fLl9wcmV2O18uX3ByZXY9Zzt2YXIgdz1fLl9jaXBoZXIuZGVjcnlwdEJsb2NrKGcpO3JldHVybiBJKHcsQil9fSw2MzExOih1ZSxYLHkpPT57dmFyIEk9eSg5NTA5KS5CdWZmZXIsXz15KDcyOTUpO2Z1bmN0aW9uIGcoQix3LFApe3ZhciBG'@;
put 'PXcubGVuZ3RoLE89Xyh3LEIuX2NhY2hlKTtyZXR1cm4gQi5fY2FjaGU9Qi5fY2FjaGUuc2xpY2UoRiksQi5fcHJldj1JLmNvbmNhdChbQi5fcHJldixQP3c6T10pLE99WC5lbmNyeXB0PWZ1bmN0aW9uKEIsdyxQKXtmb3IodmFyIE8sRj1JLmFsbG9jVW5zYWZlKDApO3cubGVuZ3RoOyl7aWYo'@;
put 'MD09PUIuX2NhY2hlLmxlbmd0aCYmKEIuX2NhY2hlPUIuX2NpcGhlci5lbmNyeXB0QmxvY2soQi5fcHJldiksQi5fcHJldj1JLmFsbG9jVW5zYWZlKDApKSwhKEIuX2NhY2hlLmxlbmd0aDw9dy5sZW5ndGgpKXtGPUkuY29uY2F0KFtGLGcoQix3LFApXSk7YnJlYWt9Rj1JLmNvbmNhdChbRixn'@;
put 'KEIsdy5zbGljZSgwLE89Qi5fY2FjaGUubGVuZ3RoKSxQKV0pLHc9dy5zbGljZShPKX1yZXR1cm4gRn19LDE1MTA6KHVlLFgseSk9Pnt2YXIgST15KDk1MDkpLkJ1ZmZlcjtmdW5jdGlvbiBfKEIsdyxQKXtmb3IodmFyIEwsSyxPPS0xLE49MDsrK088ODspTis9KDEyOCYoSz1CLl9jaXBoZXIu'@;
put 'ZW5jcnlwdEJsb2NrKEIuX3ByZXYpWzBdXihMPXcmMTw8Ny1PPzEyODowKSkpPj5PJTgsQi5fcHJldj1nKEIuX3ByZXYsUD9MOkspO3JldHVybiBOfWZ1bmN0aW9uIGcoQix3KXt2YXIgUD1CLmxlbmd0aCxGPS0xLE89SS5hbGxvY1Vuc2FmZShCLmxlbmd0aCk7Zm9yKEI9SS5jb25jYXQoW0Is'@;
put 'SS5mcm9tKFt3XSldKTsrK0Y8UDspT1tGXT1CW0ZdPDwxfEJbRisxXT4+NztyZXR1cm4gT31YLmVuY3J5cHQ9ZnVuY3Rpb24oQix3LFApe2Zvcih2YXIgRj13Lmxlbmd0aCxPPUkuYWxsb2NVbnNhZmUoRiksej0tMTsrK3o8RjspT1t6XT1fKEIsd1t6XSxQKTtyZXR1cm4gT319LDE5NjQ6KHVl'@;
put 'LFgseSk9Pnt2YXIgST15KDk1MDkpLkJ1ZmZlcjtmdW5jdGlvbiBfKGcsQix3KXt2YXIgRj1nLl9jaXBoZXIuZW5jcnlwdEJsb2NrKGcuX3ByZXYpWzBdXkI7cmV0dXJuIGcuX3ByZXY9SS5jb25jYXQoW2cuX3ByZXYuc2xpY2UoMSksSS5mcm9tKFt3P0I6Rl0pXSksRn1YLmVuY3J5cHQ9ZnVu'@;
put 'Y3Rpb24oZyxCLHcpe2Zvcih2YXIgUD1CLmxlbmd0aCxGPUkuYWxsb2NVbnNhZmUoUCksTz0tMTsrK088UDspRltPXT1fKGcsQltPXSx3KTtyZXR1cm4gRn19LDYwMDk6KHVlLFgseSk9Pnt2YXIgST15KDcyOTUpLF89eSg5NTA5KS5CdWZmZXIsZz15KDY4NSk7ZnVuY3Rpb24gQihQKXt2YXIg'@;
put 'Rj1QLl9jaXBoZXIuZW5jcnlwdEJsb2NrUmF3KFAuX3ByZXYpO3JldHVybiBnKFAuX3ByZXYpLEZ9WC5lbmNyeXB0PWZ1bmN0aW9uKFAsRil7dmFyIE89TWF0aC5jZWlsKEYubGVuZ3RoLzE2KSx6PVAuX2NhY2hlLmxlbmd0aDtQLl9jYWNoZT1fLmNvbmNhdChbUC5fY2FjaGUsXy5hbGxvY1Vu'@;
put 'c2FmZSgxNipPKV0pO2Zvcih2YXIgTj0wO048TztOKyspe3ZhciBMPUIoUCksSz16KzE2Kk47UC5fY2FjaGUud3JpdGVVSW50MzJCRShMWzBdLEsrMCksUC5fY2FjaGUud3JpdGVVSW50MzJCRShMWzFdLEsrNCksUC5fY2FjaGUud3JpdGVVSW50MzJCRShMWzJdLEsrOCksUC5fY2FjaGUud3Jp'@;
put 'dGVVSW50MzJCRShMWzNdLEsrMTIpfXZhciBVPVAuX2NhY2hlLnNsaWNlKDAsRi5sZW5ndGgpO3JldHVybiBQLl9jYWNoZT1QLl9jYWNoZS5zbGljZShGLmxlbmd0aCksSShGLFUpfX0sMTA4NDoodWUsWCk9PntYLmVuY3J5cHQ9ZnVuY3Rpb24oeSxJKXtyZXR1cm4geS5fY2lwaGVyLmVuY3J5'@;
put 'cHRCbG9jayhJKX0sWC5kZWNyeXB0PWZ1bmN0aW9uKHksSSl7cmV0dXJuIHkuX2NpcGhlci5kZWNyeXB0QmxvY2soSSl9fSw0NToodWUsWCx5KT0+e3ZhciBJPXtFQ0I6eSgxMDg0KSxDQkM6eSg1MjkyKSxDRkI6eSg2MzExKSxDRkI4OnkoMTk2NCksQ0ZCMTp5KDE1MTApLE9GQjp5KDg4NjEp'@;
put 'LENUUjp5KDYwMDkpLEdDTTp5KDYwMDkpfSxfPXkoNDk0Nik7Zm9yKHZhciBnIGluIF8pX1tnXS5tb2R1bGU9SVtfW2ddLm1vZGVdO3VlLmV4cG9ydHM9X30sODg2MToodWUsWCx5KT0+e3ZhciBJPXkoODc2NCkuQnVmZmVyLF89eSg3Mjk1KTtmdW5jdGlvbiBnKEIpe3JldHVybiBCLl9wcmV2'@;
put 'PUIuX2NpcGhlci5lbmNyeXB0QmxvY2soQi5fcHJldiksQi5fcHJldn1YLmVuY3J5cHQ9ZnVuY3Rpb24oQix3KXtmb3IoO0IuX2NhY2hlLmxlbmd0aDx3Lmxlbmd0aDspQi5fY2FjaGU9SS5jb25jYXQoW0IuX2NhY2hlLGcoQildKTt2YXIgUD1CLl9jYWNoZS5zbGljZSgwLHcubGVuZ3RoKTty'@;
put 'ZXR1cm4gQi5fY2FjaGU9Qi5fY2FjaGUuc2xpY2Uody5sZW5ndGgpLF8odyxQKX19LDU5Njk6KHVlLFgseSk9Pnt2YXIgST15KDQ0OTcpLF89eSg5NTA5KS5CdWZmZXIsZz15KDEwMjcpO2Z1bmN0aW9uIHcoUCxGLE8seil7Zy5jYWxsKHRoaXMpLHRoaXMuX2NpcGhlcj1uZXcgSS5BRVMoRiks'@;
put 'dGhpcy5fcHJldj1fLmZyb20oTyksdGhpcy5fY2FjaGU9Xy5hbGxvY1Vuc2FmZSgwKSx0aGlzLl9zZWNDYWNoZT1fLmFsbG9jVW5zYWZlKDApLHRoaXMuX2RlY3J5cHQ9eix0aGlzLl9tb2RlPVB9eSg1NzE3KSh3LGcpLHcucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oUCl7cmV0dXJuIHRo'@;
put 'aXMuX21vZGUuZW5jcnlwdCh0aGlzLFAsdGhpcy5fZGVjcnlwdCl9LHcucHJvdG90eXBlLl9maW5hbD1mdW5jdGlvbigpe3RoaXMuX2NpcGhlci5zY3J1YigpfSx1ZS5leHBvcnRzPXd9LDM2MTQ6KHVlLFgseSk9Pnt2YXIgST15KDc2NjcpLF89eSg0Njk2KSxnPXkoNDUpLEI9eSg5NzE1KSx3'@;
put 'PXkoMzA0OCk7ZnVuY3Rpb24gTyhMLEssVSl7aWYoTD1MLnRvTG93ZXJDYXNlKCksZ1tMXSlyZXR1cm4gXy5jcmVhdGVDaXBoZXJpdihMLEssVSk7aWYoQltMXSlyZXR1cm4gbmV3IEkoe2tleTpLLGl2OlUsbW9kZTpMfSk7dGhyb3cgbmV3IFR5cGVFcnJvcigiaW52YWxpZCBzdWl0ZSB0eXBl'@;
put 'Iil9ZnVuY3Rpb24geihMLEssVSl7aWYoTD1MLnRvTG93ZXJDYXNlKCksZ1tMXSlyZXR1cm4gXy5jcmVhdGVEZWNpcGhlcml2KEwsSyxVKTtpZihCW0xdKXJldHVybiBuZXcgSSh7a2V5OkssaXY6VSxtb2RlOkwsZGVjcnlwdDohMH0pO3Rocm93IG5ldyBUeXBlRXJyb3IoImludmFsaWQgc3Vp'@;
put 'dGUgdHlwZSIpfVguY3JlYXRlQ2lwaGVyPVguQ2lwaGVyPWZ1bmN0aW9uIFAoTCxLKXt2YXIgVSxXO2lmKEw9TC50b0xvd2VyQ2FzZSgpLGdbTF0pVT1nW0xdLmtleSxXPWdbTF0uaXY7ZWxzZXtpZighQltMXSl0aHJvdyBuZXcgVHlwZUVycm9yKCJpbnZhbGlkIHN1aXRlIHR5cGUiKTtVPTgq'@;
put 'QltMXS5rZXksVz1CW0xdLml2fXZhciBZPXcoSywhMSxVLFcpO3JldHVybiBPKEwsWS5rZXksWS5pdil9LFguY3JlYXRlQ2lwaGVyaXY9WC5DaXBoZXJpdj1PLFguY3JlYXRlRGVjaXBoZXI9WC5EZWNpcGhlcj1mdW5jdGlvbiBGKEwsSyl7dmFyIFUsVztpZihMPUwudG9Mb3dlckNhc2UoKSxn'@;
put 'W0xdKVU9Z1tMXS5rZXksVz1nW0xdLml2O2Vsc2V7aWYoIUJbTF0pdGhyb3cgbmV3IFR5cGVFcnJvcigiaW52YWxpZCBzdWl0ZSB0eXBlIik7VT04KkJbTF0ua2V5LFc9QltMXS5pdn12YXIgWT13KEssITEsVSxXKTtyZXR1cm4geihMLFkua2V5LFkuaXYpfSxYLmNyZWF0ZURlY2lwaGVyaXY9'@;
put 'WC5EZWNpcGhlcml2PXosWC5saXN0Q2lwaGVycz1YLmdldENpcGhlcnM9ZnVuY3Rpb24gTigpe3JldHVybiBPYmplY3Qua2V5cyhCKS5jb25jYXQoXy5nZXRDaXBoZXJzKCkpfX0sNzY2NzoodWUsWCx5KT0+e3ZhciBJPXkoMTAyNyksXz15KDUyNTEpLGc9eSg1NzE3KSxCPXkoOTUwOSkuQnVm'@;
put 'ZmVyLHc9eyJkZXMtZWRlMy1jYmMiOl8uQ0JDLmluc3RhbnRpYXRlKF8uRURFKSwiZGVzLWVkZTMiOl8uRURFLCJkZXMtZWRlLWNiYyI6Xy5DQkMuaW5zdGFudGlhdGUoXy5FREUpLCJkZXMtZWRlIjpfLkVERSwiZGVzLWNiYyI6Xy5DQkMuaW5zdGFudGlhdGUoXy5ERVMpLCJkZXMtZWNiIjpf'@;
put 'LkRFU307ZnVuY3Rpb24gUChGKXtJLmNhbGwodGhpcyk7dmFyIE4sTz1GLm1vZGUudG9Mb3dlckNhc2UoKSx6PXdbT107Tj1GLmRlY3J5cHQ/ImRlY3J5cHQiOiJlbmNyeXB0Ijt2YXIgTD1GLmtleTtCLmlzQnVmZmVyKEwpfHwoTD1CLmZyb20oTCkpLCgiZGVzLWVkZSI9PT1PfHwiZGVzLWVk'@;
put 'ZS1jYmMiPT09TykmJihMPUIuY29uY2F0KFtMLEwuc2xpY2UoMCw4KV0pKTt2YXIgSz1GLml2O0IuaXNCdWZmZXIoSyl8fChLPUIuZnJvbShLKSksdGhpcy5fZGVzPXouY3JlYXRlKHtrZXk6TCxpdjpLLHR5cGU6Tn0pfXcuZGVzPXdbImRlcy1jYmMiXSx3LmRlczM9d1siZGVzLWVkZTMtY2Jj'@;
put 'Il0sdWUuZXhwb3J0cz1QLGcoUCxJKSxQLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKEYpe3JldHVybiBCLmZyb20odGhpcy5fZGVzLnVwZGF0ZShGKSl9LFAucHJvdG90eXBlLl9maW5hbD1mdW5jdGlvbigpe3JldHVybiBCLmZyb20odGhpcy5fZGVzLmZpbmFsKCkpfX0sOTcxNToodWUs'@;
put 'WCk9PntYWyJkZXMtZWNiIl09e2tleTo4LGl2OjB9LFhbImRlcy1jYmMiXT1YLmRlcz17a2V5OjgsaXY6OH0sWFsiZGVzLWVkZTMtY2JjIl09WC5kZXMzPXtrZXk6MjQsaXY6OH0sWFsiZGVzLWVkZTMiXT17a2V5OjI0LGl2OjB9LFhbImRlcy1lZGUtY2JjIl09e2tleToxNixpdjo4fSxYWyJk'@;
put 'ZXMtZWRlIl09e2tleToxNixpdjowfX0sMzY2MzoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDM1NTApLF89eSgxNzk4KSxnPXkoOTUwOSkuQnVmZmVyO2Z1bmN0aW9uIEIoRil7dmFyIHosTz1GLm1vZHVsdXMuYnl0ZUxlbmd0aCgpO2Rve3o9bmV3IEkoXyhPKSl9d2hpbGUoei5j'@;
put 'bXAoRi5tb2R1bHVzKT49MHx8IXoudW1vZChGLnByaW1lMSl8fCF6LnVtb2QoRi5wcmltZTIpKTtyZXR1cm4gen1mdW5jdGlvbiBQKEYsTyl7dmFyIHo9ZnVuY3Rpb24gdyhGKXt2YXIgTz1CKEYpO3JldHVybntibGluZGVyOk8udG9SZWQoSS5tb250KEYubW9kdWx1cykpLnJlZFBvdyhuZXcg'@;
put 'SShGLnB1YmxpY0V4cG9uZW50KSkuZnJvbVJlZCgpLHVuYmxpbmRlcjpPLmludm0oRi5tb2R1bHVzKX19KE8pLE49Ty5tb2R1bHVzLmJ5dGVMZW5ndGgoKSxMPW5ldyBJKEYpLm11bCh6LmJsaW5kZXIpLnVtb2QoTy5tb2R1bHVzKSxLPUwudG9SZWQoSS5tb250KE8ucHJpbWUxKSksVT1MLnRv'@;
put 'UmVkKEkubW9udChPLnByaW1lMikpLFc9Ty5jb2VmZmljaWVudCxZPU8ucHJpbWUxLHE9Ty5wcmltZTIsZWU9Sy5yZWRQb3coTy5leHBvbmVudDEpLmZyb21SZWQoKSxKPVUucmVkUG93KE8uZXhwb25lbnQyKS5mcm9tUmVkKCksbmU9ZWUuaXN1YihKKS5pbXVsKFcpLnVtb2QoWSkuaW11bChx'@;
put 'KTtyZXR1cm4gSi5pYWRkKG5lKS5pbXVsKHoudW5ibGluZGVyKS51bW9kKE8ubW9kdWx1cykudG9BcnJheUxpa2UoZywiYmUiLE4pfVAuZ2V0cj1CLHVlLmV4cG9ydHM9UH0sNjA0MjoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt1ZS5leHBvcnRzPXkoNTIwNyl9LDQ3NDM6KHVlLFgseSk9Pnsi'@;
put 'dXNlIHN0cmljdCI7dmFyIEk9eSg5NTA5KS5CdWZmZXIsXz15KDM0ODIpLGc9eSgzODcyKSxCPXkoNTcxNyksdz15KDI5NTcpLFA9eSg3NzUzKSxGPXkoNTIwNyk7ZnVuY3Rpb24gTyhLKXtnLldyaXRhYmxlLmNhbGwodGhpcyk7dmFyIFU9RltLXTtpZighVSl0aHJvdyBuZXcgRXJyb3IoIlVu'@;
put 'a25vd24gbWVzc2FnZSBkaWdlc3QiKTt0aGlzLl9oYXNoVHlwZT1VLmhhc2gsdGhpcy5faGFzaD1fKFUuaGFzaCksdGhpcy5fdGFnPVUuaWQsdGhpcy5fc2lnblR5cGU9VS5zaWdufWZ1bmN0aW9uIHooSyl7Zy5Xcml0YWJsZS5jYWxsKHRoaXMpO3ZhciBVPUZbS107aWYoIVUpdGhyb3cgbmV3'@;
put 'IEVycm9yKCJVbmtub3duIG1lc3NhZ2UgZGlnZXN0Iik7dGhpcy5faGFzaD1fKFUuaGFzaCksdGhpcy5fdGFnPVUuaWQsdGhpcy5fc2lnblR5cGU9VS5zaWdufWZ1bmN0aW9uIE4oSyl7cmV0dXJuIG5ldyBPKEspfWZ1bmN0aW9uIEwoSyl7cmV0dXJuIG5ldyB6KEspfU9iamVjdC5rZXlzKEYp'@;
put 'LmZvckVhY2goZnVuY3Rpb24oSyl7RltLXS5pZD1JLmZyb20oRltLXS5pZCwiaGV4IiksRltLLnRvTG93ZXJDYXNlKCldPUZbS119KSxCKE8sZy5Xcml0YWJsZSksTy5wcm90b3R5cGUuX3dyaXRlPWZ1bmN0aW9uKFUsVyxZKXt0aGlzLl9oYXNoLnVwZGF0ZShVKSxZKCl9LE8ucHJvdG90eXBl'@;
put 'LnVwZGF0ZT1mdW5jdGlvbihVLFcpe3JldHVybiB0aGlzLl9oYXNoLnVwZGF0ZSgic3RyaW5nIj09dHlwZW9mIFU/SS5mcm9tKFUsVyk6VSksdGhpc30sTy5wcm90b3R5cGUuc2lnbj1mdW5jdGlvbihVLFcpe3RoaXMuZW5kKCk7dmFyIFk9dGhpcy5faGFzaC5kaWdlc3QoKSxxPXcoWSxVLHRo'@;
put 'aXMuX2hhc2hUeXBlLHRoaXMuX3NpZ25UeXBlLHRoaXMuX3RhZyk7cmV0dXJuIFc/cS50b1N0cmluZyhXKTpxfSxCKHosZy5Xcml0YWJsZSksei5wcm90b3R5cGUuX3dyaXRlPWZ1bmN0aW9uKFUsVyxZKXt0aGlzLl9oYXNoLnVwZGF0ZShVKSxZKCl9LHoucHJvdG90eXBlLnVwZGF0ZT1mdW5j'@;
put 'dGlvbihVLFcpe3JldHVybiB0aGlzLl9oYXNoLnVwZGF0ZSgic3RyaW5nIj09dHlwZW9mIFU/SS5mcm9tKFUsVyk6VSksdGhpc30sei5wcm90b3R5cGUudmVyaWZ5PWZ1bmN0aW9uKFUsVyxZKXt2YXIgcT0ic3RyaW5nIj09dHlwZW9mIFc/SS5mcm9tKFcsWSk6Vzt0aGlzLmVuZCgpO3ZhciBl'@;
put 'ZT10aGlzLl9oYXNoLmRpZ2VzdCgpO3JldHVybiBQKHEsZWUsVSx0aGlzLl9zaWduVHlwZSx0aGlzLl90YWcpfSx1ZS5leHBvcnRzPXtTaWduOk4sVmVyaWZ5OkwsY3JlYXRlU2lnbjpOLGNyZWF0ZVZlcmlmeTpMfX0sMjk1NzoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDk1MDkp'@;
put 'LkJ1ZmZlcixfPXkoODM1NSksZz15KDM2NjMpLEI9eSg2OTQ4KS5lYyx3PXkoMzU1MCksUD15KDk4MCksRj15KDEzMDgpO2Z1bmN0aW9uIFUoSixuZSxpZSxsZSl7aWYoKEo9SS5mcm9tKEoudG9BcnJheSgpKSkubGVuZ3RoPG5lLmJ5dGVMZW5ndGgoKSl7dmFyIG1lPUkuYWxsb2MobmUuYnl0'@;
put 'ZUxlbmd0aCgpLUoubGVuZ3RoKTtKPUkuY29uY2F0KFttZSxKXSl9dmFyIF9lPWllLmxlbmd0aCxUZT1mdW5jdGlvbiBZKEosbmUpe0o9KEo9VyhKLG5lKSkubW9kKG5lKTt2YXIgaWU9SS5mcm9tKEoudG9BcnJheSgpKTtpZihpZS5sZW5ndGg8bmUuYnl0ZUxlbmd0aCgpKXt2YXIgbGU9SS5h'@;
put 'bGxvYyhuZS5ieXRlTGVuZ3RoKCktaWUubGVuZ3RoKTtpZT1JLmNvbmNhdChbbGUsaWVdKX1yZXR1cm4gaWV9KGllLG5lKSxTZT1JLmFsbG9jKF9lKTtTZS5maWxsKDEpO3ZhciBqZT1JLmFsbG9jKF9lKTtyZXR1cm4gamU9XyhsZSxqZSkudXBkYXRlKFNlKS51cGRhdGUoSS5mcm9tKFswXSkp'@;
put 'LnVwZGF0ZShKKS51cGRhdGUoVGUpLmRpZ2VzdCgpLFNlPV8obGUsamUpLnVwZGF0ZShTZSkuZGlnZXN0KCkse2s6amU9XyhsZSxqZSkudXBkYXRlKFNlKS51cGRhdGUoSS5mcm9tKFsxXSkpLnVwZGF0ZShKKS51cGRhdGUoVGUpLmRpZ2VzdCgpLHY6U2U9XyhsZSxqZSkudXBkYXRlKFNlKS5k'@;
put 'aWdlc3QoKX19ZnVuY3Rpb24gVyhKLG5lKXt2YXIgaWU9bmV3IHcoSiksbGU9KEoubGVuZ3RoPDwzKS1uZS5iaXRMZW5ndGgoKTtyZXR1cm4gbGU+MCYmaWUuaXNocm4obGUpLGllfWZ1bmN0aW9uIHEoSixuZSxpZSl7dmFyIGxlLG1lO2Rve2ZvcihsZT1JLmFsbG9jKDApOzgqbGUubGVuZ3Ro'@;
put 'PEouYml0TGVuZ3RoKCk7KW5lLnY9XyhpZSxuZS5rKS51cGRhdGUobmUudikuZGlnZXN0KCksbGU9SS5jb25jYXQoW2xlLG5lLnZdKTttZT1XKGxlLEopLG5lLms9XyhpZSxuZS5rKS51cGRhdGUobmUudikudXBkYXRlKEkuZnJvbShbMF0pKS5kaWdlc3QoKSxuZS52PV8oaWUsbmUuaykudXBk'@;
put 'YXRlKG5lLnYpLmRpZ2VzdCgpfXdoaWxlKC0xIT09bWUuY21wKEopKTtyZXR1cm4gbWV9ZnVuY3Rpb24gZWUoSixuZSxpZSxsZSl7cmV0dXJuIEoudG9SZWQody5tb250KGllKSkucmVkUG93KG5lKS5mcm9tUmVkKCkubW9kKGxlKX11ZS5leHBvcnRzPWZ1bmN0aW9uIHooSixuZSxpZSxsZSxt'@;
put 'ZSl7dmFyIF9lPVAobmUpO2lmKF9lLmN1cnZlKXtpZigiZWNkc2EiIT09bGUmJiJlY2RzYS9yc2EiIT09bGUpdGhyb3cgbmV3IEVycm9yKCJ3cm9uZyBwcml2YXRlIGtleSB0eXBlIik7cmV0dXJuIGZ1bmN0aW9uIE4oSixuZSl7dmFyIGllPUZbbmUuY3VydmUuam9pbigiLiIpXTtpZighaWUp'@;
put 'dGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIGN1cnZlICIrbmUuY3VydmUuam9pbigiLiIpKTt2YXIgX2U9bmV3IEIoaWUpLmtleUZyb21Qcml2YXRlKG5lLnByaXZhdGVLZXkpLnNpZ24oSik7cmV0dXJuIEkuZnJvbShfZS50b0RFUigpKX0oSixfZSl9aWYoImRzYSI9PT1fZS50eXBlKXtpZigi'@;
put 'ZHNhIiE9PWxlKXRocm93IG5ldyBFcnJvcigid3JvbmcgcHJpdmF0ZSBrZXkgdHlwZSIpO3JldHVybiBmdW5jdGlvbiBMKEosbmUsaWUpe2Zvcih2YXIgamUsbGU9bmUucGFyYW1zLnByaXZfa2V5LG1lPW5lLnBhcmFtcy5wLF9lPW5lLnBhcmFtcy5xLFRlPW5lLnBhcmFtcy5nLFNlPW5ldyB3'@;
put 'KDApLFY9VyhKLF9lKS5tb2QoX2UpLHA9ITEsYj1VKGxlLF9lLEosaWUpOyExPT09cDspU2U9ZWUoVGUsamU9cShfZSxiLGllKSxtZSxfZSksMD09PShwPWplLmludm0oX2UpLmltdWwoVi5hZGQobGUubXVsKFNlKSkpLm1vZChfZSkpLmNtcG4oMCkmJihwPSExLFNlPW5ldyB3KDApKTtyZXR1'@;
put 'cm4gZnVuY3Rpb24gSyhKLG5lKXtKPUoudG9BcnJheSgpLG5lPW5lLnRvQXJyYXkoKSwxMjgmSlswXSYmKEo9WzBdLmNvbmNhdChKKSksMTI4Jm5lWzBdJiYobmU9WzBdLmNvbmNhdChuZSkpO3ZhciBsZT1bNDgsSi5sZW5ndGgrbmUubGVuZ3RoKzQsMixKLmxlbmd0aF07cmV0dXJuIGxlPWxl'@;
put 'LmNvbmNhdChKLFsyLG5lLmxlbmd0aF0sbmUpLEkuZnJvbShsZSl9KFNlLHApfShKLF9lLGllKX1pZigicnNhIiE9PWxlJiYiZWNkc2EvcnNhIiE9PWxlKXRocm93IG5ldyBFcnJvcigid3JvbmcgcHJpdmF0ZSBrZXkgdHlwZSIpO2lmKHZvaWQgMCE9PW5lLnBhZGRpbmcmJjEhPT1uZS5wYWRk'@;
put 'aW5nKXRocm93IG5ldyBFcnJvcigiaWxsZWdhbCBvciB1bnN1cHBvcnRlZCBwYWRkaW5nIG1vZGUiKTtKPUkuY29uY2F0KFttZSxKXSk7Zm9yKHZhciBUZT1fZS5tb2R1bHVzLmJ5dGVMZW5ndGgoKSxTZT1bMCwxXTtKLmxlbmd0aCtTZS5sZW5ndGgrMTxUZTspU2UucHVzaCgyNTUpO1NlLnB1'@;
put 'c2goMCk7Zm9yKHZhciBqZT0tMTsrK2plPEoubGVuZ3RoOylTZS5wdXNoKEpbamVdKTtyZXR1cm4gZyhTZSxfZSl9LHVlLmV4cG9ydHMuZ2V0S2V5PVUsdWUuZXhwb3J0cy5tYWtlS2V5PXF9LDc3NTM6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg5NTA5KS5CdWZmZXIsXz15KDM1'@;
put 'NTApLGc9eSg2OTQ4KS5lYyxCPXkoOTgwKSx3PXkoMTMwOCk7ZnVuY3Rpb24geihOLEwpe2lmKE4uY21wbigwKTw9MCl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgc2lnIik7aWYoTi5jbXAoTCk+PTApdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIHNpZyIpfXVlLmV4cG9ydHM9ZnVuY3Rpb24g'@;
put 'UChOLEwsSyxVLFcpe3ZhciBZPUIoSyk7aWYoImVjIj09PVkudHlwZSl7aWYoImVjZHNhIiE9PVUmJiJlY2RzYS9yc2EiIT09VSl0aHJvdyBuZXcgRXJyb3IoIndyb25nIHB1YmxpYyBrZXkgdHlwZSIpO3JldHVybiBmdW5jdGlvbiBGKE4sTCxLKXt2YXIgVT13W0suZGF0YS5hbGdvcml0aG0u'@;
put 'Y3VydmUuam9pbigiLiIpXTtpZighVSl0aHJvdyBuZXcgRXJyb3IoInVua25vd24gY3VydmUgIitLLmRhdGEuYWxnb3JpdGhtLmN1cnZlLmpvaW4oIi4iKSk7cmV0dXJuIG5ldyBnKFUpLnZlcmlmeShMLE4sSy5kYXRhLnN1YmplY3RQcml2YXRlS2V5LmRhdGEpfShOLEwsWSl9aWYoImRzYSI9'@;
put 'PT1ZLnR5cGUpe2lmKCJkc2EiIT09VSl0aHJvdyBuZXcgRXJyb3IoIndyb25nIHB1YmxpYyBrZXkgdHlwZSIpO3JldHVybiBmdW5jdGlvbiBPKE4sTCxLKXt2YXIgVT1LLmRhdGEucCxXPUsuZGF0YS5xLFk9Sy5kYXRhLmcscT1LLmRhdGEucHViX2tleSxlZT1CLnNpZ25hdHVyZS5kZWNvZGUo'@;
put 'TiwiZGVyIiksSj1lZS5zLG5lPWVlLnI7eihKLFcpLHoobmUsVyk7dmFyIGllPV8ubW9udChVKSxsZT1KLmludm0oVyk7cmV0dXJuIDA9PT1ZLnRvUmVkKGllKS5yZWRQb3cobmV3IF8oTCkubXVsKGxlKS5tb2QoVykpLmZyb21SZWQoKS5tdWwocS50b1JlZChpZSkucmVkUG93KG5lLm11bChs'@;
put 'ZSkubW9kKFcpKS5mcm9tUmVkKCkpLm1vZChVKS5tb2QoVykuY21wKG5lKX0oTixMLFkpfWlmKCJyc2EiIT09VSYmImVjZHNhL3JzYSIhPT1VKXRocm93IG5ldyBFcnJvcigid3JvbmcgcHVibGljIGtleSB0eXBlIik7TD1JLmNvbmNhdChbVyxMXSk7Zm9yKHZhciBxPVkubW9kdWx1cy5ieXRl'@;
put 'TGVuZ3RoKCksZWU9WzFdLEo9MDtMLmxlbmd0aCtlZS5sZW5ndGgrMjxxOyllZS5wdXNoKDI1NSksSis9MTtlZS5wdXNoKDApO2Zvcih2YXIgbmU9LTE7KytuZTxMLmxlbmd0aDspZWUucHVzaChMW25lXSk7ZWU9SS5mcm9tKGVlKTt2YXIgaWU9Xy5tb250KFkubW9kdWx1cyk7Tj0oTj1uZXcg'@;
put 'XyhOKS50b1JlZChpZSkpLnJlZFBvdyhuZXcgXyhZLnB1YmxpY0V4cG9uZW50KSksTj1JLmZyb20oTi5mcm9tUmVkKCkudG9BcnJheSgpKTt2YXIgbGU9Sjw4PzE6MDtmb3IocT1NYXRoLm1pbihOLmxlbmd0aCxlZS5sZW5ndGgpLE4ubGVuZ3RoIT09ZWUubGVuZ3RoJiYobGU9MSksbmU9LTE7'@;
put 'KytuZTxxOylsZXw9TltuZV1eZWVbbmVdO3JldHVybiAwPT09bGV9fSw0MzkwOih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoODIxMiksXz1PYmplY3Qua2V5c3x8ZnVuY3Rpb24oSyl7dmFyIFU9W107Zm9yKHZhciBXIGluIEspVS5wdXNoKFcpO3JldHVybiBVfTt1ZS5leHBvcnRz'@;
put 'PXo7dmFyIGc9T2JqZWN0LmNyZWF0ZSh5KDY0OTcpKTtnLmluaGVyaXRzPXkoNTcxNyk7dmFyIEI9eSg0OTYwKSx3PXkoMjAxMCk7Zy5pbmhlcml0cyh6LEIpO2Zvcih2YXIgUD1fKHcucHJvdG90eXBlKSxGPTA7RjxQLmxlbmd0aDtGKyspe3ZhciBPPVBbRl07ei5wcm90b3R5cGVbT118fCh6'@;
put 'LnByb3RvdHlwZVtPXT13LnByb3RvdHlwZVtPXSl9ZnVuY3Rpb24geihLKXtpZighKHRoaXMgaW5zdGFuY2VvZiB6KSlyZXR1cm4gbmV3IHooSyk7Qi5jYWxsKHRoaXMsSyksdy5jYWxsKHRoaXMsSyksSyYmITE9PT1LLnJlYWRhYmxlJiYodGhpcy5yZWFkYWJsZT0hMSksSyYmITE9PT1LLndy'@;
put 'aXRhYmxlJiYodGhpcy53cml0YWJsZT0hMSksdGhpcy5hbGxvd0hhbGZPcGVuPSEwLEsmJiExPT09Sy5hbGxvd0hhbGZPcGVuJiYodGhpcy5hbGxvd0hhbGZPcGVuPSExKSx0aGlzLm9uY2UoImVuZCIsTil9ZnVuY3Rpb24gTigpe3RoaXMuYWxsb3dIYWxmT3Blbnx8dGhpcy5fd3JpdGFibGVT'@;
put 'dGF0ZS5lbmRlZHx8SS5uZXh0VGljayhMLHRoaXMpfWZ1bmN0aW9uIEwoSyl7Sy5lbmQoKX1PYmplY3QuZGVmaW5lUHJvcGVydHkoei5wcm90b3R5cGUsIndyaXRhYmxlSGlnaFdhdGVyTWFyayIse2VudW1lcmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3dyaXRhYmxlU3Rh'@;
put 'dGUuaGlnaFdhdGVyTWFya319KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoei5wcm90b3R5cGUsImRlc3Ryb3llZCIse2dldDpmdW5jdGlvbigpe3JldHVybiB2b2lkIDAhPT10aGlzLl9yZWFkYWJsZVN0YXRlJiZ2b2lkIDAhPT10aGlzLl93cml0YWJsZVN0YXRlJiZ0aGlzLl9yZWFkYWJsZVN0'@;
put 'YXRlLmRlc3Ryb3llZCYmdGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWR9LHNldDpmdW5jdGlvbihLKXt2b2lkIDA9PT10aGlzLl9yZWFkYWJsZVN0YXRlfHx2b2lkIDA9PT10aGlzLl93cml0YWJsZVN0YXRlfHwodGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWQ9Syx0aGlzLl93cml0'@;
put 'YWJsZVN0YXRlLmRlc3Ryb3llZD1LKX19KSx6LnByb3RvdHlwZS5fZGVzdHJveT1mdW5jdGlvbihLLFUpe3RoaXMucHVzaChudWxsKSx0aGlzLmVuZCgpLEkubmV4dFRpY2soVSxLKX19LDEyOTQ6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dWUuZXhwb3J0cz1nO3ZhciBJPXkoMzkxMiksXz1P'@;
put 'YmplY3QuY3JlYXRlKHkoNjQ5NykpO2Z1bmN0aW9uIGcoQil7aWYoISh0aGlzIGluc3RhbmNlb2YgZykpcmV0dXJuIG5ldyBnKEIpO0kuY2FsbCh0aGlzLEIpfV8uaW5oZXJpdHM9eSg1NzE3KSxfLmluaGVyaXRzKGcsSSksZy5wcm90b3R5cGUuX3RyYW5zZm9ybT1mdW5jdGlvbihCLHcsUCl7'@;
put 'UChudWxsLEIpfX0sNDk2MDoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDQxNTUpLF89eSg4MjEyKTt1ZS5leHBvcnRzPWxlO3ZhciBCLGc9eSg1ODI2KTtsZS5SZWFkYWJsZVN0YXRlPWllLHkoNzE4Nyk7dmFyIFA9ZnVuY3Rpb24odmUsWGUpe3JldHVybiB2ZS5saXN0ZW5lcnMo'@;
put 'WGUpLmxlbmd0aH0sRj15KDk4MTkpLE89eSgxNTcyKS5CdWZmZXIsej0odHlwZW9mIHkuZzwidSI/eS5nOnR5cGVvZiB3aW5kb3c8InUiP3dpbmRvdzp0eXBlb2Ygc2VsZjwidSI/c2VsZjp7fSkuVWludDhBcnJheXx8ZnVuY3Rpb24oKXt9LEs9T2JqZWN0LmNyZWF0ZSh5KDY0OTcpKTtLLmlu'@;
put 'aGVyaXRzPXkoNTcxNyk7dmFyIFU9eSg2MzUzKSxXPXZvaWQgMDtXPVUmJlUuZGVidWdsb2c/VS5kZWJ1Z2xvZygic3RyZWFtIik6ZnVuY3Rpb24oKXt9O3ZhciBlZSxZPXkoMjI2NykscT15KDU5OTcpO0suaW5oZXJpdHMobGUsRik7dmFyIEo9WyJlcnJvciIsImNsb3NlIiwiZGVzdHJveSIs'@;
put 'InBhdXNlIiwicmVzdW1lIl07ZnVuY3Rpb24gaWUodmUsWGUpe3ZhciB6ZT1YZSBpbnN0YW5jZW9mKEI9Qnx8eSg0MzkwKSk7dGhpcy5vYmplY3RNb2RlPSEhKHZlPXZlfHx7fSkub2JqZWN0TW9kZSx6ZSYmKHRoaXMub2JqZWN0TW9kZT10aGlzLm9iamVjdE1vZGV8fCEhdmUucmVhZGFibGVP'@;
put 'YmplY3RNb2RlKTt2YXIgRGU9dmUuaGlnaFdhdGVyTWFyayxGZT12ZS5yZWFkYWJsZUhpZ2hXYXRlck1hcms7dGhpcy5oaWdoV2F0ZXJNYXJrPURlfHwwPT09RGU/RGU6emUmJihGZXx8MD09PUZlKT9GZTp0aGlzLm9iamVjdE1vZGU/MTY6MTYzODQsdGhpcy5oaWdoV2F0ZXJNYXJrPU1hdGgu'@;
put 'Zmxvb3IodGhpcy5oaWdoV2F0ZXJNYXJrKSx0aGlzLmJ1ZmZlcj1uZXcgWSx0aGlzLmxlbmd0aD0wLHRoaXMucGlwZXM9bnVsbCx0aGlzLnBpcGVzQ291bnQ9MCx0aGlzLmZsb3dpbmc9bnVsbCx0aGlzLmVuZGVkPSExLHRoaXMuZW5kRW1pdHRlZD0hMSx0aGlzLnJlYWRpbmc9ITEsdGhpcy5z'@;
put 'eW5jPSEwLHRoaXMubmVlZFJlYWRhYmxlPSExLHRoaXMuZW1pdHRlZFJlYWRhYmxlPSExLHRoaXMucmVhZGFibGVMaXN0ZW5pbmc9ITEsdGhpcy5yZXN1bWVTY2hlZHVsZWQ9ITEsdGhpcy5kZXN0cm95ZWQ9ITEsdGhpcy5kZWZhdWx0RW5jb2Rpbmc9dmUuZGVmYXVsdEVuY29kaW5nfHwidXRm'@;
put 'OCIsdGhpcy5hd2FpdERyYWluPTAsdGhpcy5yZWFkaW5nTW9yZT0hMSx0aGlzLmRlY29kZXI9bnVsbCx0aGlzLmVuY29kaW5nPW51bGwsdmUuZW5jb2RpbmcmJihlZXx8KGVlPXkoMjIyMSkucyksdGhpcy5kZWNvZGVyPW5ldyBlZSh2ZS5lbmNvZGluZyksdGhpcy5lbmNvZGluZz12ZS5lbmNv'@;
put 'ZGluZyl9ZnVuY3Rpb24gbGUodmUpe2lmKEI9Qnx8eSg0MzkwKSwhKHRoaXMgaW5zdGFuY2VvZiBsZSkpcmV0dXJuIG5ldyBsZSh2ZSk7dGhpcy5fcmVhZGFibGVTdGF0ZT1uZXcgaWUodmUsdGhpcyksdGhpcy5yZWFkYWJsZT0hMCx2ZSYmKCJmdW5jdGlvbiI9PXR5cGVvZiB2ZS5yZWFkJiYo'@;
put 'dGhpcy5fcmVhZD12ZS5yZWFkKSwiZnVuY3Rpb24iPT10eXBlb2YgdmUuZGVzdHJveSYmKHRoaXMuX2Rlc3Ryb3k9dmUuZGVzdHJveSkpLEYuY2FsbCh0aGlzKX1mdW5jdGlvbiBtZSh2ZSxYZSx6ZSxEZSxGZSl7dmFyIEllLE9lPXZlLl9yZWFkYWJsZVN0YXRlO3JldHVybiBudWxsPT09WGU/'@;
put 'KE9lLnJlYWRpbmc9ITEsZnVuY3Rpb24gYih2ZSxYZSl7aWYoIVhlLmVuZGVkKXtpZihYZS5kZWNvZGVyKXt2YXIgemU9WGUuZGVjb2Rlci5lbmQoKTt6ZSYmemUubGVuZ3RoJiYoWGUuYnVmZmVyLnB1c2goemUpLFhlLmxlbmd0aCs9WGUub2JqZWN0TW9kZT8xOnplLmxlbmd0aCl9WGUuZW5k'@;
put 'ZWQ9ITAseCh2ZSl9fSh2ZSxPZSkpOihGZXx8KEllPWZ1bmN0aW9uIFRlKHZlLFhlKXt2YXIgemU7cmV0dXJuIWZ1bmN0aW9uIEwodmUpe3JldHVybiBPLmlzQnVmZmVyKHZlKXx8dmUgaW5zdGFuY2VvZiB6fShYZSkmJiJzdHJpbmciIT10eXBlb2YgWGUmJnZvaWQgMCE9PVhlJiYhdmUub2Jq'@;
put 'ZWN0TW9kZSYmKHplPW5ldyBUeXBlRXJyb3IoIkludmFsaWQgbm9uLXN0cmluZy9idWZmZXIgY2h1bmsiKSksemV9KE9lLFhlKSksSWU/dmUuZW1pdCgiZXJyb3IiLEllKTpPZS5vYmplY3RNb2RlfHxYZSYmWGUubGVuZ3RoPjA/KCJzdHJpbmciIT10eXBlb2YgWGUmJiFPZS5vYmplY3RNb2Rl'@;
put 'JiZPYmplY3QuZ2V0UHJvdG90eXBlT2YoWGUpIT09Ty5wcm90b3R5cGUmJihYZT1mdW5jdGlvbiBOKHZlKXtyZXR1cm4gTy5mcm9tKHZlKX0oWGUpKSxEZT9PZS5lbmRFbWl0dGVkP3ZlLmVtaXQoImVycm9yIixuZXcgRXJyb3IoInN0cmVhbS51bnNoaWZ0KCkgYWZ0ZXIgZW5kIGV2ZW50Iikp'@;
put 'Ol9lKHZlLE9lLFhlLCEwKTpPZS5lbmRlZD92ZS5lbWl0KCJlcnJvciIsbmV3IEVycm9yKCJzdHJlYW0ucHVzaCgpIGFmdGVyIEVPRiIpKTooT2UucmVhZGluZz0hMSxPZS5kZWNvZGVyJiYhemU/KFhlPU9lLmRlY29kZXIud3JpdGUoWGUpLE9lLm9iamVjdE1vZGV8fDAhPT1YZS5sZW5ndGg/'@;
put 'X2UodmUsT2UsWGUsITEpOlQodmUsT2UpKTpfZSh2ZSxPZSxYZSwhMSkpKTpEZXx8KE9lLnJlYWRpbmc9ITEpKSxmdW5jdGlvbiBTZSh2ZSl7cmV0dXJuIXZlLmVuZGVkJiYodmUubmVlZFJlYWRhYmxlfHx2ZS5sZW5ndGg8dmUuaGlnaFdhdGVyTWFya3x8MD09PXZlLmxlbmd0aCl9KE9lKX1m'@;
put 'dW5jdGlvbiBfZSh2ZSxYZSx6ZSxEZSl7WGUuZmxvd2luZyYmMD09PVhlLmxlbmd0aCYmIVhlLnN5bmM/KHZlLmVtaXQoImRhdGEiLHplKSx2ZS5yZWFkKDApKTooWGUubGVuZ3RoKz1YZS5vYmplY3RNb2RlPzE6emUubGVuZ3RoLERlP1hlLmJ1ZmZlci51bnNoaWZ0KHplKTpYZS5idWZmZXIu'@;
put 'cHVzaCh6ZSksWGUubmVlZFJlYWRhYmxlJiZ4KHZlKSksVCh2ZSxYZSl9T2JqZWN0LmRlZmluZVByb3BlcnR5KGxlLnByb3RvdHlwZSwiZGVzdHJveWVkIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHZvaWQgMCE9PXRoaXMuX3JlYWRhYmxlU3RhdGUmJnRoaXMuX3JlYWRhYmxlU3RhdGUuZGVz'@;
put 'dHJveWVkfSxzZXQ6ZnVuY3Rpb24odmUpe3RoaXMuX3JlYWRhYmxlU3RhdGUmJih0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZD12ZSl9fSksbGUucHJvdG90eXBlLmRlc3Ryb3k9cS5kZXN0cm95LGxlLnByb3RvdHlwZS5fdW5kZXN0cm95PXEudW5kZXN0cm95LGxlLnByb3RvdHlwZS5f'@;
put 'ZGVzdHJveT1mdW5jdGlvbih2ZSxYZSl7dGhpcy5wdXNoKG51bGwpLFhlKHZlKX0sbGUucHJvdG90eXBlLnB1c2g9ZnVuY3Rpb24odmUsWGUpe3ZhciBEZSx6ZT10aGlzLl9yZWFkYWJsZVN0YXRlO3JldHVybiB6ZS5vYmplY3RNb2RlP0RlPSEwOiJzdHJpbmciPT10eXBlb2YgdmUmJigoWGU9'@;
put 'WGV8fHplLmRlZmF1bHRFbmNvZGluZykhPT16ZS5lbmNvZGluZyYmKHZlPU8uZnJvbSh2ZSxYZSksWGU9IiIpLERlPSEwKSxtZSh0aGlzLHZlLFhlLCExLERlKX0sbGUucHJvdG90eXBlLnVuc2hpZnQ9ZnVuY3Rpb24odmUpe3JldHVybiBtZSh0aGlzLHZlLG51bGwsITAsITEpfSxsZS5wcm90'@;
put 'b3R5cGUuaXNQYXVzZWQ9ZnVuY3Rpb24oKXtyZXR1cm4hMT09PXRoaXMuX3JlYWRhYmxlU3RhdGUuZmxvd2luZ30sbGUucHJvdG90eXBlLnNldEVuY29kaW5nPWZ1bmN0aW9uKHZlKXtyZXR1cm4gZWV8fChlZT15KDIyMjEpLnMpLHRoaXMuX3JlYWRhYmxlU3RhdGUuZGVjb2Rlcj1uZXcgZWUo'@;
put 'dmUpLHRoaXMuX3JlYWRhYmxlU3RhdGUuZW5jb2Rpbmc9dmUsdGhpc307ZnVuY3Rpb24gcCh2ZSxYZSl7cmV0dXJuIHZlPD0wfHwwPT09WGUubGVuZ3RoJiZYZS5lbmRlZD8wOlhlLm9iamVjdE1vZGU/MTp2ZSE9dmU/WGUuZmxvd2luZyYmWGUubGVuZ3RoP1hlLmJ1ZmZlci5oZWFkLmRhdGEu'@;
put 'bGVuZ3RoOlhlLmxlbmd0aDoodmU+WGUuaGlnaFdhdGVyTWFyayYmKFhlLmhpZ2hXYXRlck1hcms9ZnVuY3Rpb24gVih2ZSl7cmV0dXJuIHZlPj04Mzg4NjA4P3ZlPTgzODg2MDg6KHZlLS0sdmV8PXZlPj4+MSx2ZXw9dmU+Pj4yLHZlfD12ZT4+PjQsdmV8PXZlPj4+OCx2ZXw9dmU+Pj4xNix2'@;
put 'ZSsrKSx2ZX0odmUpKSx2ZTw9WGUubGVuZ3RoP3ZlOlhlLmVuZGVkP1hlLmxlbmd0aDooWGUubmVlZFJlYWRhYmxlPSEwLDApKX1mdW5jdGlvbiB4KHZlKXt2YXIgWGU9dmUuX3JlYWRhYmxlU3RhdGU7WGUubmVlZFJlYWRhYmxlPSExLFhlLmVtaXR0ZWRSZWFkYWJsZXx8KFcoImVtaXRSZWFk'@;
put 'YWJsZSIsWGUuZmxvd2luZyksWGUuZW1pdHRlZFJlYWRhYmxlPSEwLFhlLnN5bmM/Xy5uZXh0VGljayhDLHZlKTpDKHZlKSl9ZnVuY3Rpb24gQyh2ZSl7VygiZW1pdCByZWFkYWJsZSIpLHZlLmVtaXQoInJlYWRhYmxlIiksYWUodmUpfWZ1bmN0aW9uIFQodmUsWGUpe1hlLnJlYWRpbmdNb3Jl'@;
put 'fHwoWGUucmVhZGluZ01vcmU9ITAsXy5uZXh0VGljayhILHZlLFhlKSl9ZnVuY3Rpb24gSCh2ZSxYZSl7Zm9yKHZhciB6ZT1YZS5sZW5ndGg7IVhlLnJlYWRpbmcmJiFYZS5mbG93aW5nJiYhWGUuZW5kZWQmJlhlLmxlbmd0aDxYZS5oaWdoV2F0ZXJNYXJrJiYoVygibWF5YmVSZWFkTW9yZSBy'@;
put 'ZWFkIDAiKSx2ZS5yZWFkKDApLHplIT09WGUubGVuZ3RoKTspemU9WGUubGVuZ3RoO1hlLnJlYWRpbmdNb3JlPSExfWZ1bmN0aW9uIEUodmUpe1coInJlYWRhYmxlIG5leHR0aWNrIHJlYWQgMCIpLHZlLnJlYWQoMCl9ZnVuY3Rpb24gQSh2ZSxYZSl7WGUucmVhZGluZ3x8KFcoInJlc3VtZSBy'@;
put 'ZWFkIDAiKSx2ZS5yZWFkKDApKSxYZS5yZXN1bWVTY2hlZHVsZWQ9ITEsWGUuYXdhaXREcmFpbj0wLHZlLmVtaXQoInJlc3VtZSIpLGFlKHZlKSxYZS5mbG93aW5nJiYhWGUucmVhZGluZyYmdmUucmVhZCgwKX1mdW5jdGlvbiBhZSh2ZSl7dmFyIFhlPXZlLl9yZWFkYWJsZVN0YXRlO2ZvcihX'@;
put 'KCJmbG93IixYZS5mbG93aW5nKTtYZS5mbG93aW5nJiZudWxsIT09dmUucmVhZCgpOyk7fWZ1bmN0aW9uIHRlKHZlLFhlKXtyZXR1cm4gMD09PVhlLmxlbmd0aD9udWxsOihYZS5vYmplY3RNb2RlP3plPVhlLmJ1ZmZlci5zaGlmdCgpOiF2ZXx8dmU+PVhlLmxlbmd0aD8oemU9WGUuZGVjb2Rl'@;
put 'cj9YZS5idWZmZXIuam9pbigiIik6MT09PVhlLmJ1ZmZlci5sZW5ndGg/WGUuYnVmZmVyLmhlYWQuZGF0YTpYZS5idWZmZXIuY29uY2F0KFhlLmxlbmd0aCksWGUuYnVmZmVyLmNsZWFyKCkpOnplPWZ1bmN0aW9uIHNlKHZlLFhlLHplKXt2YXIgRGU7cmV0dXJuIHZlPFhlLmhlYWQuZGF0YS5s'@;
put 'ZW5ndGg/KERlPVhlLmhlYWQuZGF0YS5zbGljZSgwLHZlKSxYZS5oZWFkLmRhdGE9WGUuaGVhZC5kYXRhLnNsaWNlKHZlKSk6RGU9dmU9PT1YZS5oZWFkLmRhdGEubGVuZ3RoP1hlLnNoaWZ0KCk6emU/ZnVuY3Rpb24gd2UodmUsWGUpe3ZhciB6ZT1YZS5oZWFkLERlPTEsRmU9emUuZGF0YTtm'@;
put 'b3IodmUtPUZlLmxlbmd0aDt6ZT16ZS5uZXh0Oyl7dmFyIE9lPXplLmRhdGEsSWU9dmU+T2UubGVuZ3RoP09lLmxlbmd0aDp2ZTtpZihGZSs9SWU9PT1PZS5sZW5ndGg/T2U6T2Uuc2xpY2UoMCx2ZSksMD09KHZlLT1JZSkpe0llPT09T2UubGVuZ3RoPygrK0RlLFhlLmhlYWQ9emUubmV4dD96'@;
put 'ZS5uZXh0OlhlLnRhaWw9bnVsbCk6KFhlLmhlYWQ9emUsemUuZGF0YT1PZS5zbGljZShJZSkpO2JyZWFrfSsrRGV9cmV0dXJuIFhlLmxlbmd0aC09RGUsRmV9KHZlLFhlKTpmdW5jdGlvbiBVZSh2ZSxYZSl7dmFyIHplPU8uYWxsb2NVbnNhZmUodmUpLERlPVhlLmhlYWQsRmU9MTtmb3IoRGUu'@;
put 'ZGF0YS5jb3B5KHplKSx2ZS09RGUuZGF0YS5sZW5ndGg7RGU9RGUubmV4dDspe3ZhciBPZT1EZS5kYXRhLEllPXZlPk9lLmxlbmd0aD9PZS5sZW5ndGg6dmU7aWYoT2UuY29weSh6ZSx6ZS5sZW5ndGgtdmUsMCxJZSksMD09KHZlLT1JZSkpe0llPT09T2UubGVuZ3RoPygrK0ZlLFhlLmhlYWQ9'@;
put 'RGUubmV4dD9EZS5uZXh0OlhlLnRhaWw9bnVsbCk6KFhlLmhlYWQ9RGUsRGUuZGF0YT1PZS5zbGljZShJZSkpO2JyZWFrfSsrRmV9cmV0dXJuIFhlLmxlbmd0aC09RmUsemV9KHZlLFhlKSxEZX0odmUsWGUuYnVmZmVyLFhlLmRlY29kZXIpLHplKTt2YXIgemV9ZnVuY3Rpb24gSmUodmUpe3Zh'@;
put 'ciBYZT12ZS5fcmVhZGFibGVTdGF0ZTtpZihYZS5sZW5ndGg+MCl0aHJvdyBuZXcgRXJyb3IoJyJlbmRSZWFkYWJsZSgpIiBjYWxsZWQgb24gbm9uLWVtcHR5IHN0cmVhbScpO1hlLmVuZEVtaXR0ZWR8fChYZS5lbmRlZD0hMCxfLm5leHRUaWNrKG90LFhlLHZlKSl9ZnVuY3Rpb24gb3QodmUs'@;
put 'WGUpeyF2ZS5lbmRFbWl0dGVkJiYwPT09dmUubGVuZ3RoJiYodmUuZW5kRW1pdHRlZD0hMCxYZS5yZWFkYWJsZT0hMSxYZS5lbWl0KCJlbmQiKSl9ZnVuY3Rpb24geGUodmUsWGUpe2Zvcih2YXIgemU9MCxEZT12ZS5sZW5ndGg7emU8RGU7emUrKylpZih2ZVt6ZV09PT1YZSlyZXR1cm4gemU7'@;
put 'cmV0dXJuLTF9bGUucHJvdG90eXBlLnJlYWQ9ZnVuY3Rpb24odmUpe1coInJlYWQiLHZlKSx2ZT1wYXJzZUludCh2ZSwxMCk7dmFyIFhlPXRoaXMuX3JlYWRhYmxlU3RhdGUsemU9dmU7aWYoMCE9PXZlJiYoWGUuZW1pdHRlZFJlYWRhYmxlPSExKSwwPT09dmUmJlhlLm5lZWRSZWFkYWJsZSYm'@;
put 'KFhlLmxlbmd0aD49WGUuaGlnaFdhdGVyTWFya3x8WGUuZW5kZWQpKXJldHVybiBXKCJyZWFkOiBlbWl0UmVhZGFibGUiLFhlLmxlbmd0aCxYZS5lbmRlZCksMD09PVhlLmxlbmd0aCYmWGUuZW5kZWQ/SmUodGhpcyk6eCh0aGlzKSxudWxsO2lmKDA9PT0odmU9cCh2ZSxYZSkpJiZYZS5lbmRl'@;
put 'ZClyZXR1cm4gMD09PVhlLmxlbmd0aCYmSmUodGhpcyksbnVsbDt2YXIgRmUsRGU9WGUubmVlZFJlYWRhYmxlO3JldHVybiBXKCJuZWVkIHJlYWRhYmxlIixEZSksKDA9PT1YZS5sZW5ndGh8fFhlLmxlbmd0aC12ZTxYZS5oaWdoV2F0ZXJNYXJrKSYmVygibGVuZ3RoIGxlc3MgdGhhbiB3YXRl'@;
put 'cm1hcmsiLERlPSEwKSxYZS5lbmRlZHx8WGUucmVhZGluZz9XKCJyZWFkaW5nIG9yIGVuZGVkIixEZT0hMSk6RGUmJihXKCJkbyByZWFkIiksWGUucmVhZGluZz0hMCxYZS5zeW5jPSEwLDA9PT1YZS5sZW5ndGgmJihYZS5uZWVkUmVhZGFibGU9ITApLHRoaXMuX3JlYWQoWGUuaGlnaFdhdGVy'@;
put 'TWFyayksWGUuc3luYz0hMSxYZS5yZWFkaW5nfHwodmU9cCh6ZSxYZSkpKSxudWxsPT09KEZlPXZlPjA/dGUodmUsWGUpOm51bGwpPyhYZS5uZWVkUmVhZGFibGU9ITAsdmU9MCk6WGUubGVuZ3RoLT12ZSwwPT09WGUubGVuZ3RoJiYoWGUuZW5kZWR8fChYZS5uZWVkUmVhZGFibGU9ITApLHpl'@;
put 'IT09dmUmJlhlLmVuZGVkJiZKZSh0aGlzKSksbnVsbCE9PUZlJiZ0aGlzLmVtaXQoImRhdGEiLEZlKSxGZX0sbGUucHJvdG90eXBlLl9yZWFkPWZ1bmN0aW9uKHZlKXt0aGlzLmVtaXQoImVycm9yIixuZXcgRXJyb3IoIl9yZWFkKCkgaXMgbm90IGltcGxlbWVudGVkIikpfSxsZS5wcm90b3R5'@;
put 'cGUucGlwZT1mdW5jdGlvbih2ZSxYZSl7dmFyIHplPXRoaXMsRGU9dGhpcy5fcmVhZGFibGVTdGF0ZTtzd2l0Y2goRGUucGlwZXNDb3VudCl7Y2FzZSAwOkRlLnBpcGVzPXZlO2JyZWFrO2Nhc2UgMTpEZS5waXBlcz1bRGUucGlwZXMsdmVdO2JyZWFrO2RlZmF1bHQ6RGUucGlwZXMucHVzaCh2'@;
put 'ZSl9RGUucGlwZXNDb3VudCs9MSxXKCJwaXBlIGNvdW50PSVkIG9wdHM9JWoiLERlLnBpcGVzQ291bnQsWGUpO3ZhciBPZT1YZSYmITE9PT1YZS5lbmR8fHZlPT09SS5zdGRvdXR8fHZlPT09SS5zdGRlcnI/RHQ6VmU7ZnVuY3Rpb24gVmUoKXtXKCJvbmVuZCIpLHZlLmVuZCgpfURlLmVuZEVt'@;
put 'aXR0ZWQ/Xy5uZXh0VGljayhPZSk6emUub25jZSgiZW5kIixPZSksdmUub24oInVucGlwZSIsZnVuY3Rpb24gSWUoaXQsJGUpe1coIm9udW5waXBlIiksaXQ9PT16ZSYmJGUmJiExPT09JGUuaGFzVW5waXBlZCYmKCRlLmhhc1VucGlwZWQ9ITAsZnVuY3Rpb24gX3QoKXtXKCJjbGVhbnVwIiks'@;
put 'dmUucmVtb3ZlTGlzdGVuZXIoImNsb3NlIix5dCksdmUucmVtb3ZlTGlzdGVuZXIoImZpbmlzaCIsTXQpLHZlLnJlbW92ZUxpc3RlbmVyKCJkcmFpbiIsa2UpLHZlLnJlbW92ZUxpc3RlbmVyKCJlcnJvciIsdW4pLHZlLnJlbW92ZUxpc3RlbmVyKCJ1bnBpcGUiLEllKSx6ZS5yZW1vdmVMaXN0'@;
put 'ZW5lcigiZW5kIixWZSksemUucmVtb3ZlTGlzdGVuZXIoImVuZCIsRHQpLHplLnJlbW92ZUxpc3RlbmVyKCJkYXRhIixRZSksQWU9ITAsRGUuYXdhaXREcmFpbiYmKCF2ZS5fd3JpdGFibGVTdGF0ZXx8dmUuX3dyaXRhYmxlU3RhdGUubmVlZERyYWluKSYma2UoKX0oKSl9KTt2YXIga2U9ZnVu'@;
put 'Y3Rpb24gaih2ZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIFhlPXZlLl9yZWFkYWJsZVN0YXRlO1coInBpcGVPbkRyYWluIixYZS5hd2FpdERyYWluKSxYZS5hd2FpdERyYWluJiZYZS5hd2FpdERyYWluLS0sMD09PVhlLmF3YWl0RHJhaW4mJlAodmUsImRhdGEiKSYmKFhlLmZsb3dpbmc9ITAs'@;
put 'YWUodmUpKX19KHplKTt2ZS5vbigiZHJhaW4iLGtlKTt2YXIgQWU9ITEsbnQ9ITE7ZnVuY3Rpb24gUWUoaXQpe1coIm9uZGF0YSIpLG50PSExLCExPT09dmUud3JpdGUoaXQpJiYhbnQmJigoMT09PURlLnBpcGVzQ291bnQmJkRlLnBpcGVzPT09dmV8fERlLnBpcGVzQ291bnQ+MSYmLTEhPT14'@;
put 'ZShEZS5waXBlcyx2ZSkpJiYhQWUmJihXKCJmYWxzZSB3cml0ZSByZXNwb25zZSwgcGF1c2UiLERlLmF3YWl0RHJhaW4pLERlLmF3YWl0RHJhaW4rKyxudD0hMCksemUucGF1c2UoKSl9ZnVuY3Rpb24gdW4oaXQpe1coIm9uZXJyb3IiLGl0KSxEdCgpLHZlLnJlbW92ZUxpc3RlbmVyKCJlcnJv'@;
put 'ciIsdW4pLDA9PT1QKHZlLCJlcnJvciIpJiZ2ZS5lbWl0KCJlcnJvciIsaXQpfWZ1bmN0aW9uIHl0KCl7dmUucmVtb3ZlTGlzdGVuZXIoImZpbmlzaCIsTXQpLER0KCl9ZnVuY3Rpb24gTXQoKXtXKCJvbmZpbmlzaCIpLHZlLnJlbW92ZUxpc3RlbmVyKCJjbG9zZSIseXQpLER0KCl9ZnVuY3Rp'@;
put 'b24gRHQoKXtXKCJ1bnBpcGUiKSx6ZS51bnBpcGUodmUpfXJldHVybiB6ZS5vbigiZGF0YSIsUWUpLGZ1bmN0aW9uIG5lKHZlLFhlLHplKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgdmUucHJlcGVuZExpc3RlbmVyKXJldHVybiB2ZS5wcmVwZW5kTGlzdGVuZXIoWGUsemUpO3ZlLl9ldmVudHMm'@;
put 'JnZlLl9ldmVudHNbWGVdP2codmUuX2V2ZW50c1tYZV0pP3ZlLl9ldmVudHNbWGVdLnVuc2hpZnQoemUpOnZlLl9ldmVudHNbWGVdPVt6ZSx2ZS5fZXZlbnRzW1hlXV06dmUub24oWGUsemUpfSh2ZSwiZXJyb3IiLHVuKSx2ZS5vbmNlKCJjbG9zZSIseXQpLHZlLm9uY2UoImZpbmlzaCIsTXQp'@;
put 'LHZlLmVtaXQoInBpcGUiLHplKSxEZS5mbG93aW5nfHwoVygicGlwZSByZXN1bWUiKSx6ZS5yZXN1bWUoKSksdmV9LGxlLnByb3RvdHlwZS51bnBpcGU9ZnVuY3Rpb24odmUpe3ZhciBYZT10aGlzLl9yZWFkYWJsZVN0YXRlLHplPXtoYXNVbnBpcGVkOiExfTtpZigwPT09WGUucGlwZXNDb3Vu'@;
put 'dClyZXR1cm4gdGhpcztpZigxPT09WGUucGlwZXNDb3VudClyZXR1cm4gdmUmJnZlIT09WGUucGlwZXN8fCh2ZXx8KHZlPVhlLnBpcGVzKSxYZS5waXBlcz1udWxsLFhlLnBpcGVzQ291bnQ9MCxYZS5mbG93aW5nPSExLHZlJiZ2ZS5lbWl0KCJ1bnBpcGUiLHRoaXMsemUpKSx0aGlzO2lmKCF2'@;
put 'ZSl7dmFyIERlPVhlLnBpcGVzLEZlPVhlLnBpcGVzQ291bnQ7WGUucGlwZXM9bnVsbCxYZS5waXBlc0NvdW50PTAsWGUuZmxvd2luZz0hMTtmb3IodmFyIE9lPTA7T2U8RmU7T2UrKylEZVtPZV0uZW1pdCgidW5waXBlIix0aGlzLHtoYXNVbnBpcGVkOiExfSk7cmV0dXJuIHRoaXN9dmFyIEll'@;
put 'PXhlKFhlLnBpcGVzLHZlKTtyZXR1cm4tMT09PUllfHwoWGUucGlwZXMuc3BsaWNlKEllLDEpLFhlLnBpcGVzQ291bnQtPTEsMT09PVhlLnBpcGVzQ291bnQmJihYZS5waXBlcz1YZS5waXBlc1swXSksdmUuZW1pdCgidW5waXBlIix0aGlzLHplKSksdGhpc30sbGUucHJvdG90eXBlLmFkZExp'@;
put 'c3RlbmVyPWxlLnByb3RvdHlwZS5vbj1mdW5jdGlvbih2ZSxYZSl7dmFyIHplPUYucHJvdG90eXBlLm9uLmNhbGwodGhpcyx2ZSxYZSk7aWYoImRhdGEiPT09dmUpITEhPT10aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmcmJnRoaXMucmVzdW1lKCk7ZWxzZSBpZigicmVhZGFibGUiPT09dmUp'@;
put 'e3ZhciBEZT10aGlzLl9yZWFkYWJsZVN0YXRlOyFEZS5lbmRFbWl0dGVkJiYhRGUucmVhZGFibGVMaXN0ZW5pbmcmJihEZS5yZWFkYWJsZUxpc3RlbmluZz1EZS5uZWVkUmVhZGFibGU9ITAsRGUuZW1pdHRlZFJlYWRhYmxlPSExLERlLnJlYWRpbmc/RGUubGVuZ3RoJiZ4KHRoaXMpOl8ubmV4'@;
put 'dFRpY2soRSx0aGlzKSl9cmV0dXJuIHplfSxsZS5wcm90b3R5cGUucmVzdW1lPWZ1bmN0aW9uKCl7dmFyIHZlPXRoaXMuX3JlYWRhYmxlU3RhdGU7cmV0dXJuIHZlLmZsb3dpbmd8fChXKCJyZXN1bWUiKSx2ZS5mbG93aW5nPSEwLGZ1bmN0aW9uIG0odmUsWGUpe1hlLnJlc3VtZVNjaGVkdWxl'@;
put 'ZHx8KFhlLnJlc3VtZVNjaGVkdWxlZD0hMCxfLm5leHRUaWNrKEEsdmUsWGUpKX0odGhpcyx2ZSkpLHRoaXN9LGxlLnByb3RvdHlwZS5wYXVzZT1mdW5jdGlvbigpe3JldHVybiBXKCJjYWxsIHBhdXNlIGZsb3dpbmc9JWoiLHRoaXMuX3JlYWRhYmxlU3RhdGUuZmxvd2luZyksITEhPT10aGlz'@;
put 'Ll9yZWFkYWJsZVN0YXRlLmZsb3dpbmcmJihXKCJwYXVzZSIpLHRoaXMuX3JlYWRhYmxlU3RhdGUuZmxvd2luZz0hMSx0aGlzLmVtaXQoInBhdXNlIikpLHRoaXN9LGxlLnByb3RvdHlwZS53cmFwPWZ1bmN0aW9uKHZlKXt2YXIgWGU9dGhpcyx6ZT10aGlzLl9yZWFkYWJsZVN0YXRlLERlPSEx'@;
put 'O2Zvcih2YXIgRmUgaW4gdmUub24oImVuZCIsZnVuY3Rpb24oKXtpZihXKCJ3cmFwcGVkIGVuZCIpLHplLmRlY29kZXImJiF6ZS5lbmRlZCl7dmFyIEllPXplLmRlY29kZXIuZW5kKCk7SWUmJkllLmxlbmd0aCYmWGUucHVzaChJZSl9WGUucHVzaChudWxsKX0pLHZlLm9uKCJkYXRhIixmdW5j'@;
put 'dGlvbihJZSl7Vygid3JhcHBlZCBkYXRhIiksemUuZGVjb2RlciYmKEllPXplLmRlY29kZXIud3JpdGUoSWUpKSx6ZS5vYmplY3RNb2RlJiZudWxsPT1JZXx8ISh6ZS5vYmplY3RNb2RlfHxJZSYmSWUubGVuZ3RoKXx8WGUucHVzaChJZSl8fChEZT0hMCx2ZS5wYXVzZSgpKX0pLHZlKXZvaWQg'@;
put 'MD09PXRoaXNbRmVdJiYiZnVuY3Rpb24iPT10eXBlb2YgdmVbRmVdJiYodGhpc1tGZV09ZnVuY3Rpb24oSWUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB2ZVtJZV0uYXBwbHkodmUsYXJndW1lbnRzKX19KEZlKSk7Zm9yKHZhciBPZT0wO09lPEoubGVuZ3RoO09lKyspdmUub24oSltPZV0s'@;
put 'dGhpcy5lbWl0LmJpbmQodGhpcyxKW09lXSkpO3JldHVybiB0aGlzLl9yZWFkPWZ1bmN0aW9uKEllKXtXKCJ3cmFwcGVkIF9yZWFkIixJZSksRGUmJihEZT0hMSx2ZS5yZXN1bWUoKSl9LHRoaXN9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShsZS5wcm90b3R5cGUsInJlYWRhYmxlSGlnaFdhdGVy'@;
put 'TWFyayIse2VudW1lcmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JlYWRhYmxlU3RhdGUuaGlnaFdhdGVyTWFya319KSxsZS5fZnJvbUxpc3Q9dGV9LDM5MTI6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dWUuZXhwb3J0cz1CO3ZhciBJPXkoNDM5MCksXz1PYmplY3QuY3Jl'@;
put 'YXRlKHkoNjQ5NykpO2Z1bmN0aW9uIGcoRixPKXt2YXIgej10aGlzLl90cmFuc2Zvcm1TdGF0ZTt6LnRyYW5zZm9ybWluZz0hMTt2YXIgTj16LndyaXRlY2I7aWYoIU4pcmV0dXJuIHRoaXMuZW1pdCgiZXJyb3IiLG5ldyBFcnJvcigid3JpdGUgY2FsbGJhY2sgY2FsbGVkIG11bHRpcGxlIHRp'@;
put 'bWVzIikpO3oud3JpdGVjaHVuaz1udWxsLHoud3JpdGVjYj1udWxsLG51bGwhPU8mJnRoaXMucHVzaChPKSxOKEYpO3ZhciBMPXRoaXMuX3JlYWRhYmxlU3RhdGU7TC5yZWFkaW5nPSExLChMLm5lZWRSZWFkYWJsZXx8TC5sZW5ndGg8TC5oaWdoV2F0ZXJNYXJrKSYmdGhpcy5fcmVhZChMLmhp'@;
put 'Z2hXYXRlck1hcmspfWZ1bmN0aW9uIEIoRil7aWYoISh0aGlzIGluc3RhbmNlb2YgQikpcmV0dXJuIG5ldyBCKEYpO0kuY2FsbCh0aGlzLEYpLHRoaXMuX3RyYW5zZm9ybVN0YXRlPXthZnRlclRyYW5zZm9ybTpnLmJpbmQodGhpcyksbmVlZFRyYW5zZm9ybTohMSx0cmFuc2Zvcm1pbmc6ITEs'@;
put 'd3JpdGVjYjpudWxsLHdyaXRlY2h1bms6bnVsbCx3cml0ZWVuY29kaW5nOm51bGx9LHRoaXMuX3JlYWRhYmxlU3RhdGUubmVlZFJlYWRhYmxlPSEwLHRoaXMuX3JlYWRhYmxlU3RhdGUuc3luYz0hMSxGJiYoImZ1bmN0aW9uIj09dHlwZW9mIEYudHJhbnNmb3JtJiYodGhpcy5fdHJhbnNmb3Jt'@;
put 'PUYudHJhbnNmb3JtKSwiZnVuY3Rpb24iPT10eXBlb2YgRi5mbHVzaCYmKHRoaXMuX2ZsdXNoPUYuZmx1c2gpKSx0aGlzLm9uKCJwcmVmaW5pc2giLHcpfWZ1bmN0aW9uIHcoKXt2YXIgRj10aGlzOyJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzLl9mbHVzaD90aGlzLl9mbHVzaChmdW5jdGlvbihP'@;
put 'LHope1AoRixPLHopfSk6UCh0aGlzLG51bGwsbnVsbCl9ZnVuY3Rpb24gUChGLE8seil7aWYoTylyZXR1cm4gRi5lbWl0KCJlcnJvciIsTyk7aWYobnVsbCE9eiYmRi5wdXNoKHopLEYuX3dyaXRhYmxlU3RhdGUubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiQ2FsbGluZyB0cmFuc2Zvcm0gZG9u'@;
put 'ZSB3aGVuIHdzLmxlbmd0aCAhPSAwIik7aWYoRi5fdHJhbnNmb3JtU3RhdGUudHJhbnNmb3JtaW5nKXRocm93IG5ldyBFcnJvcigiQ2FsbGluZyB0cmFuc2Zvcm0gZG9uZSB3aGVuIHN0aWxsIHRyYW5zZm9ybWluZyIpO3JldHVybiBGLnB1c2gobnVsbCl9Xy5pbmhlcml0cz15KDU3MTcpLF8u'@;
put 'aW5oZXJpdHMoQixJKSxCLnByb3RvdHlwZS5wdXNoPWZ1bmN0aW9uKEYsTyl7cmV0dXJuIHRoaXMuX3RyYW5zZm9ybVN0YXRlLm5lZWRUcmFuc2Zvcm09ITEsSS5wcm90b3R5cGUucHVzaC5jYWxsKHRoaXMsRixPKX0sQi5wcm90b3R5cGUuX3RyYW5zZm9ybT1mdW5jdGlvbihGLE8seil7dGhy'@;
put 'b3cgbmV3IEVycm9yKCJfdHJhbnNmb3JtKCkgaXMgbm90IGltcGxlbWVudGVkIil9LEIucHJvdG90eXBlLl93cml0ZT1mdW5jdGlvbihGLE8seil7dmFyIE49dGhpcy5fdHJhbnNmb3JtU3RhdGU7aWYoTi53cml0ZWNiPXosTi53cml0ZWNodW5rPUYsTi53cml0ZWVuY29kaW5nPU8sIU4udHJh'@;
put 'bnNmb3JtaW5nKXt2YXIgTD10aGlzLl9yZWFkYWJsZVN0YXRlOyhOLm5lZWRUcmFuc2Zvcm18fEwubmVlZFJlYWRhYmxlfHxMLmxlbmd0aDxMLmhpZ2hXYXRlck1hcmspJiZ0aGlzLl9yZWFkKEwuaGlnaFdhdGVyTWFyayl9fSxCLnByb3RvdHlwZS5fcmVhZD1mdW5jdGlvbihGKXt2YXIgTz10'@;
put 'aGlzLl90cmFuc2Zvcm1TdGF0ZTtudWxsIT09Ty53cml0ZWNodW5rJiZPLndyaXRlY2ImJiFPLnRyYW5zZm9ybWluZz8oTy50cmFuc2Zvcm1pbmc9ITAsdGhpcy5fdHJhbnNmb3JtKE8ud3JpdGVjaHVuayxPLndyaXRlZW5jb2RpbmcsTy5hZnRlclRyYW5zZm9ybSkpOk8ubmVlZFRyYW5zZm9y'@;
put 'bT0hMH0sQi5wcm90b3R5cGUuX2Rlc3Ryb3k9ZnVuY3Rpb24oRixPKXt2YXIgej10aGlzO0kucHJvdG90eXBlLl9kZXN0cm95LmNhbGwodGhpcyxGLGZ1bmN0aW9uKE4pe08oTiksei5lbWl0KCJjbG9zZSIpfSl9fSwyMDEwOih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoNDE1NSks'@;
put 'Xz15KDgyMTIpO2Z1bmN0aW9uIEIobSl7dmFyIEE9dGhpczt0aGlzLm5leHQ9bnVsbCx0aGlzLmVudHJ5PW51bGwsdGhpcy5maW5pc2g9ZnVuY3Rpb24oKXshZnVuY3Rpb24gRShtLEEsYWUpe3ZhciB0ZT1tLmVudHJ5O2ZvcihtLmVudHJ5PW51bGw7dGU7KXt2YXIgc2U9dGUuY2FsbGJhY2s7'@;
put 'QS5wZW5kaW5nY2ItLSxzZShhZSksdGU9dGUubmV4dH1BLmNvcmtlZFJlcXVlc3RzRnJlZS5uZXh0PW19KEEsbSl9fXVlLmV4cG9ydHM9Sjt2YXIgUCx3PSFJLmJyb3dzZXImJlsidjAuMTAiLCJ2MC45LiJdLmluZGV4T2YoSS52ZXJzaW9uLnNsaWNlKDAsNSkpPi0xP3NldEltbWVkaWF0ZTpf'@;
put 'Lm5leHRUaWNrO0ouV3JpdGFibGVTdGF0ZT1xO3ZhciBGPU9iamVjdC5jcmVhdGUoeSg2NDk3KSk7Ri5pbmhlcml0cz15KDU3MTcpO3ZhciBlZSxPPXtkZXByZWNhdGU6eSg0OTI3KX0sej15KDk4MTkpLE49eSgxNTcyKS5CdWZmZXIsTD0odHlwZW9mIHkuZzwidSI/eS5nOnR5cGVvZiB3aW5k'@;
put 'b3c8InUiP3dpbmRvdzp0eXBlb2Ygc2VsZjwidSI/c2VsZjp7fSkuVWludDhBcnJheXx8ZnVuY3Rpb24oKXt9LFc9eSg1OTk3KTtmdW5jdGlvbiBZKCl7fWZ1bmN0aW9uIHEobSxBKXtQPVB8fHkoNDM5MCk7dmFyIGFlPUEgaW5zdGFuY2VvZiBQO3RoaXMub2JqZWN0TW9kZT0hIShtPW18fHt9'@;
put 'KS5vYmplY3RNb2RlLGFlJiYodGhpcy5vYmplY3RNb2RlPXRoaXMub2JqZWN0TW9kZXx8ISFtLndyaXRhYmxlT2JqZWN0TW9kZSk7dmFyIHRlPW0uaGlnaFdhdGVyTWFyayxzZT1tLndyaXRhYmxlSGlnaFdhdGVyTWFyazt0aGlzLmhpZ2hXYXRlck1hcms9dGV8fDA9PT10ZT90ZTphZSYmKHNl'@;
put 'fHwwPT09c2UpP3NlOnRoaXMub2JqZWN0TW9kZT8xNjoxNjM4NCx0aGlzLmhpZ2hXYXRlck1hcms9TWF0aC5mbG9vcih0aGlzLmhpZ2hXYXRlck1hcmspLHRoaXMuZmluYWxDYWxsZWQ9ITEsdGhpcy5uZWVkRHJhaW49ITEsdGhpcy5lbmRpbmc9ITEsdGhpcy5lbmRlZD0hMSx0aGlzLmZpbmlz'@;
put 'aGVkPSExLHRoaXMuZGVzdHJveWVkPSExLHRoaXMuZGVjb2RlU3RyaW5ncz0hKCExPT09bS5kZWNvZGVTdHJpbmdzKSx0aGlzLmRlZmF1bHRFbmNvZGluZz1tLmRlZmF1bHRFbmNvZGluZ3x8InV0ZjgiLHRoaXMubGVuZ3RoPTAsdGhpcy53cml0aW5nPSExLHRoaXMuY29ya2VkPTAsdGhpcy5z'@;
put 'eW5jPSEwLHRoaXMuYnVmZmVyUHJvY2Vzc2luZz0hMSx0aGlzLm9ud3JpdGU9ZnVuY3Rpb24oSmUpeyFmdW5jdGlvbiBqZShtLEEpe3ZhciBhZT1tLl93cml0YWJsZVN0YXRlLHRlPWFlLnN5bmMsc2U9YWUud3JpdGVjYjtpZihmdW5jdGlvbiBTZShtKXttLndyaXRpbmc9ITEsbS53cml0ZWNi'@;
put 'PW51bGwsbS5sZW5ndGgtPW0ud3JpdGVsZW4sbS53cml0ZWxlbj0wfShhZSksQSkhZnVuY3Rpb24gVGUobSxBLGFlLHRlLHNlKXstLUEucGVuZGluZ2NiLGFlPyhfLm5leHRUaWNrKHNlLHRlKSxfLm5leHRUaWNrKEgsbSxBKSxtLl93cml0YWJsZVN0YXRlLmVycm9yRW1pdHRlZD0hMCxtLmVt'@;
put 'aXQoImVycm9yIix0ZSkpOihzZSh0ZSksbS5fd3JpdGFibGVTdGF0ZS5lcnJvckVtaXR0ZWQ9ITAsbS5lbWl0KCJlcnJvciIsdGUpLEgobSxBKSl9KG0sYWUsdGUsQSxzZSk7ZWxzZXt2YXIgd2U9eChhZSk7IXdlJiYhYWUuY29ya2VkJiYhYWUuYnVmZmVyUHJvY2Vzc2luZyYmYWUuYnVmZmVy'@;
put 'ZWRSZXF1ZXN0JiZiKG0sYWUpLHRlP3coVixtLGFlLHdlLHNlKTpWKG0sYWUsd2Usc2UpfX0oQSxKZSl9LHRoaXMud3JpdGVjYj1udWxsLHRoaXMud3JpdGVsZW49MCx0aGlzLmJ1ZmZlcmVkUmVxdWVzdD1udWxsLHRoaXMubGFzdEJ1ZmZlcmVkUmVxdWVzdD1udWxsLHRoaXMucGVuZGluZ2Ni'@;
put 'PTAsdGhpcy5wcmVmaW5pc2hlZD0hMSx0aGlzLmVycm9yRW1pdHRlZD0hMSx0aGlzLmJ1ZmZlcmVkUmVxdWVzdENvdW50PTAsdGhpcy5jb3JrZWRSZXF1ZXN0c0ZyZWU9bmV3IEIodGhpcyl9ZnVuY3Rpb24gSihtKXtpZihQPVB8fHkoNDM5MCksIShlZS5jYWxsKEosdGhpcyl8fHRoaXMgaW5z'@;
put 'dGFuY2VvZiBQKSlyZXR1cm4gbmV3IEoobSk7dGhpcy5fd3JpdGFibGVTdGF0ZT1uZXcgcShtLHRoaXMpLHRoaXMud3JpdGFibGU9ITAsbSYmKCJmdW5jdGlvbiI9PXR5cGVvZiBtLndyaXRlJiYodGhpcy5fd3JpdGU9bS53cml0ZSksImZ1bmN0aW9uIj09dHlwZW9mIG0ud3JpdGV2JiYodGhp'@;
put 'cy5fd3JpdGV2PW0ud3JpdGV2KSwiZnVuY3Rpb24iPT10eXBlb2YgbS5kZXN0cm95JiYodGhpcy5fZGVzdHJveT1tLmRlc3Ryb3kpLCJmdW5jdGlvbiI9PXR5cGVvZiBtLmZpbmFsJiYodGhpcy5fZmluYWw9bS5maW5hbCkpLHouY2FsbCh0aGlzKX1mdW5jdGlvbiBfZShtLEEsYWUsdGUsc2Us'@;
put 'd2UsVWUpe0Eud3JpdGVsZW49dGUsQS53cml0ZWNiPVVlLEEud3JpdGluZz0hMCxBLnN5bmM9ITAsYWU/bS5fd3JpdGV2KHNlLEEub253cml0ZSk6bS5fd3JpdGUoc2Usd2UsQS5vbndyaXRlKSxBLnN5bmM9ITF9ZnVuY3Rpb24gVihtLEEsYWUsdGUpe2FlfHxmdW5jdGlvbiBwKG0sQSl7MD09'@;
put 'PUEubGVuZ3RoJiZBLm5lZWREcmFpbiYmKEEubmVlZERyYWluPSExLG0uZW1pdCgiZHJhaW4iKSl9KG0sQSksQS5wZW5kaW5nY2ItLSx0ZSgpLEgobSxBKX1mdW5jdGlvbiBiKG0sQSl7QS5idWZmZXJQcm9jZXNzaW5nPSEwO3ZhciBhZT1BLmJ1ZmZlcmVkUmVxdWVzdDtpZihtLl93cml0ZXYm'@;
put 'JmFlJiZhZS5uZXh0KXt2YXIgc2U9bmV3IEFycmF5KEEuYnVmZmVyZWRSZXF1ZXN0Q291bnQpLHdlPUEuY29ya2VkUmVxdWVzdHNGcmVlO3dlLmVudHJ5PWFlO2Zvcih2YXIgVWU9MCxKZT0hMDthZTspc2VbVWVdPWFlLGFlLmlzQnVmfHwoSmU9ITEpLGFlPWFlLm5leHQsVWUrPTE7c2UuYWxs'@;
put 'QnVmZmVycz1KZSxfZShtLEEsITAsQS5sZW5ndGgsc2UsIiIsd2UuZmluaXNoKSxBLnBlbmRpbmdjYisrLEEubGFzdEJ1ZmZlcmVkUmVxdWVzdD1udWxsLHdlLm5leHQ/KEEuY29ya2VkUmVxdWVzdHNGcmVlPXdlLm5leHQsd2UubmV4dD1udWxsKTpBLmNvcmtlZFJlcXVlc3RzRnJlZT1uZXcg'@;
put 'QihBKSxBLmJ1ZmZlcmVkUmVxdWVzdENvdW50PTB9ZWxzZXtmb3IoO2FlOyl7dmFyIG90PWFlLmNodW5rO2lmKF9lKG0sQSwhMSxBLm9iamVjdE1vZGU/MTpvdC5sZW5ndGgsb3QsYWUuZW5jb2RpbmcsYWUuY2FsbGJhY2spLGFlPWFlLm5leHQsQS5idWZmZXJlZFJlcXVlc3RDb3VudC0tLEEu'@;
put 'd3JpdGluZylicmVha31udWxsPT09YWUmJihBLmxhc3RCdWZmZXJlZFJlcXVlc3Q9bnVsbCl9QS5idWZmZXJlZFJlcXVlc3Q9YWUsQS5idWZmZXJQcm9jZXNzaW5nPSExfWZ1bmN0aW9uIHgobSl7cmV0dXJuIG0uZW5kaW5nJiYwPT09bS5sZW5ndGgmJm51bGw9PT1tLmJ1ZmZlcmVkUmVxdWVz'@;
put 'dCYmIW0uZmluaXNoZWQmJiFtLndyaXRpbmd9ZnVuY3Rpb24gQyhtLEEpe20uX2ZpbmFsKGZ1bmN0aW9uKGFlKXtBLnBlbmRpbmdjYi0tLGFlJiZtLmVtaXQoImVycm9yIixhZSksQS5wcmVmaW5pc2hlZD0hMCxtLmVtaXQoInByZWZpbmlzaCIpLEgobSxBKX0pfWZ1bmN0aW9uIEgobSxBKXt2'@;
put 'YXIgYWU9eChBKTtyZXR1cm4gYWUmJihmdW5jdGlvbiBUKG0sQSl7IUEucHJlZmluaXNoZWQmJiFBLmZpbmFsQ2FsbGVkJiYoImZ1bmN0aW9uIj09dHlwZW9mIG0uX2ZpbmFsPyhBLnBlbmRpbmdjYisrLEEuZmluYWxDYWxsZWQ9ITAsXy5uZXh0VGljayhDLG0sQSkpOihBLnByZWZpbmlzaGVk'@;
put 'PSEwLG0uZW1pdCgicHJlZmluaXNoIikpKX0obSxBKSwwPT09QS5wZW5kaW5nY2ImJihBLmZpbmlzaGVkPSEwLG0uZW1pdCgiZmluaXNoIikpKSxhZX1GLmluaGVyaXRzKEoseikscS5wcm90b3R5cGUuZ2V0QnVmZmVyPWZ1bmN0aW9uKCl7Zm9yKHZhciBBPXRoaXMuYnVmZmVyZWRSZXF1ZXN0'@;
put 'LGFlPVtdO0E7KWFlLnB1c2goQSksQT1BLm5leHQ7cmV0dXJuIGFlfSxmdW5jdGlvbigpe3RyeXtPYmplY3QuZGVmaW5lUHJvcGVydHkocS5wcm90b3R5cGUsImJ1ZmZlciIse2dldDpPLmRlcHJlY2F0ZShmdW5jdGlvbigpe3JldHVybiB0aGlzLmdldEJ1ZmZlcigpfSwiX3dyaXRhYmxlU3Rh'@;
put 'dGUuYnVmZmVyIGlzIGRlcHJlY2F0ZWQuIFVzZSBfd3JpdGFibGVTdGF0ZS5nZXRCdWZmZXIgaW5zdGVhZC4iLCJERVAwMDAzIil9KX1jYXRjaHt9fSgpLCJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJlN5bWJvbC5oYXNJbnN0YW5jZSYmImZ1bmN0aW9uIj09dHlwZW9mIEZ1bmN0aW9uLnBy'@;
put 'b3RvdHlwZVtTeW1ib2wuaGFzSW5zdGFuY2VdPyhlZT1GdW5jdGlvbi5wcm90b3R5cGVbU3ltYm9sLmhhc0luc3RhbmNlXSxPYmplY3QuZGVmaW5lUHJvcGVydHkoSixTeW1ib2wuaGFzSW5zdGFuY2Use3ZhbHVlOmZ1bmN0aW9uKG0pe3JldHVybiEhZWUuY2FsbCh0aGlzLG0pfHx0aGlzPT09'@;
put 'SiYmbSYmbS5fd3JpdGFibGVTdGF0ZSBpbnN0YW5jZW9mIHF9fSkpOmVlPWZ1bmN0aW9uKG0pe3JldHVybiBtIGluc3RhbmNlb2YgdGhpc30sSi5wcm90b3R5cGUucGlwZT1mdW5jdGlvbigpe3RoaXMuZW1pdCgiZXJyb3IiLG5ldyBFcnJvcigiQ2Fubm90IHBpcGUsIG5vdCByZWFkYWJsZSIp'@;
put 'KX0sSi5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24obSxBLGFlKXt2YXIgdGU9dGhpcy5fd3JpdGFibGVTdGF0ZSxzZT0hMSx3ZT0hdGUub2JqZWN0TW9kZSYmZnVuY3Rpb24gVShtKXtyZXR1cm4gTi5pc0J1ZmZlcihtKXx8bSBpbnN0YW5jZW9mIEx9KG0pO3JldHVybiB3ZSYmIU4uaXNCdWZm'@;
put 'ZXIobSkmJihtPWZ1bmN0aW9uIEsobSl7cmV0dXJuIE4uZnJvbShtKX0obSkpLCJmdW5jdGlvbiI9PXR5cGVvZiBBJiYoYWU9QSxBPW51bGwpLHdlP0E9ImJ1ZmZlciI6QXx8KEE9dGUuZGVmYXVsdEVuY29kaW5nKSwiZnVuY3Rpb24iIT10eXBlb2YgYWUmJihhZT1ZKSx0ZS5lbmRlZD9mdW5j'@;
put 'dGlvbiBuZShtLEEpe3ZhciBhZT1uZXcgRXJyb3IoIndyaXRlIGFmdGVyIGVuZCIpO20uZW1pdCgiZXJyb3IiLGFlKSxfLm5leHRUaWNrKEEsYWUpfSh0aGlzLGFlKTood2V8fGZ1bmN0aW9uIGllKG0sQSxhZSx0ZSl7dmFyIHNlPSEwLHdlPSExO3JldHVybiBudWxsPT09YWU/d2U9bmV3IFR5'@;
put 'cGVFcnJvcigiTWF5IG5vdCB3cml0ZSBudWxsIHZhbHVlcyB0byBzdHJlYW0iKToic3RyaW5nIiE9dHlwZW9mIGFlJiZ2b2lkIDAhPT1hZSYmIUEub2JqZWN0TW9kZSYmKHdlPW5ldyBUeXBlRXJyb3IoIkludmFsaWQgbm9uLXN0cmluZy9idWZmZXIgY2h1bmsiKSksd2UmJihtLmVtaXQoImVy'@;
put 'cm9yIix3ZSksXy5uZXh0VGljayh0ZSx3ZSksc2U9ITEpLHNlfSh0aGlzLHRlLG0sYWUpKSYmKHRlLnBlbmRpbmdjYisrLHNlPWZ1bmN0aW9uIG1lKG0sQSxhZSx0ZSxzZSx3ZSl7aWYoIWFlKXt2YXIgVWU9ZnVuY3Rpb24gbGUobSxBLGFlKXtyZXR1cm4hbS5vYmplY3RNb2RlJiYhMSE9PW0u'@;
put 'ZGVjb2RlU3RyaW5ncyYmInN0cmluZyI9PXR5cGVvZiBBJiYoQT1OLmZyb20oQSxhZSkpLEF9KEEsdGUsc2UpO3RlIT09VWUmJihhZT0hMCxzZT0iYnVmZmVyIix0ZT1VZSl9dmFyIEplPUEub2JqZWN0TW9kZT8xOnRlLmxlbmd0aDtBLmxlbmd0aCs9SmU7dmFyIG90PUEubGVuZ3RoPEEuaGln'@;
put 'aFdhdGVyTWFyaztpZihvdHx8KEEubmVlZERyYWluPSEwKSxBLndyaXRpbmd8fEEuY29ya2VkKXt2YXIgeGU9QS5sYXN0QnVmZmVyZWRSZXF1ZXN0O0EubGFzdEJ1ZmZlcmVkUmVxdWVzdD17Y2h1bms6dGUsZW5jb2Rpbmc6c2UsaXNCdWY6YWUsY2FsbGJhY2s6d2UsbmV4dDpudWxsfSx4ZT94'@;
put 'ZS5uZXh0PUEubGFzdEJ1ZmZlcmVkUmVxdWVzdDpBLmJ1ZmZlcmVkUmVxdWVzdD1BLmxhc3RCdWZmZXJlZFJlcXVlc3QsQS5idWZmZXJlZFJlcXVlc3RDb3VudCs9MX1lbHNlIF9lKG0sQSwhMSxKZSx0ZSxzZSx3ZSk7cmV0dXJuIG90fSh0aGlzLHRlLHdlLG0sQSxhZSkpLHNlfSxKLnByb3Rv'@;
put 'dHlwZS5jb3JrPWZ1bmN0aW9uKCl7dGhpcy5fd3JpdGFibGVTdGF0ZS5jb3JrZWQrK30sSi5wcm90b3R5cGUudW5jb3JrPWZ1bmN0aW9uKCl7dmFyIG09dGhpcy5fd3JpdGFibGVTdGF0ZTttLmNvcmtlZCYmKG0uY29ya2VkLS0sIW0ud3JpdGluZyYmIW0uY29ya2VkJiYhbS5idWZmZXJQcm9j'@;
put 'ZXNzaW5nJiZtLmJ1ZmZlcmVkUmVxdWVzdCYmYih0aGlzLG0pKX0sSi5wcm90b3R5cGUuc2V0RGVmYXVsdEVuY29kaW5nPWZ1bmN0aW9uKEEpe2lmKCJzdHJpbmciPT10eXBlb2YgQSYmKEE9QS50b0xvd2VyQ2FzZSgpKSwhKFsiaGV4IiwidXRmOCIsInV0Zi04IiwiYXNjaWkiLCJiaW5hcnki'@;
put 'LCJiYXNlNjQiLCJ1Y3MyIiwidWNzLTIiLCJ1dGYxNmxlIiwidXRmLTE2bGUiLCJyYXciXS5pbmRleE9mKChBKyIiKS50b0xvd2VyQ2FzZSgpKT4tMSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiVW5rbm93biBlbmNvZGluZzogIitBKTtyZXR1cm4gdGhpcy5fd3JpdGFibGVTdGF0ZS5kZWZhdWx0'@;
put 'RW5jb2Rpbmc9QSx0aGlzfSxPYmplY3QuZGVmaW5lUHJvcGVydHkoSi5wcm90b3R5cGUsIndyaXRhYmxlSGlnaFdhdGVyTWFyayIse2VudW1lcmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3dyaXRhYmxlU3RhdGUuaGlnaFdhdGVyTWFya319KSxKLnByb3RvdHlwZS5fd3Jp'@;
put 'dGU9ZnVuY3Rpb24obSxBLGFlKXthZShuZXcgRXJyb3IoIl93cml0ZSgpIGlzIG5vdCBpbXBsZW1lbnRlZCIpKX0sSi5wcm90b3R5cGUuX3dyaXRldj1udWxsLEoucHJvdG90eXBlLmVuZD1mdW5jdGlvbihtLEEsYWUpe3ZhciB0ZT10aGlzLl93cml0YWJsZVN0YXRlOyJmdW5jdGlvbiI9PXR5'@;
put 'cGVvZiBtPyhhZT1tLG09bnVsbCxBPW51bGwpOiJmdW5jdGlvbiI9PXR5cGVvZiBBJiYoYWU9QSxBPW51bGwpLG51bGwhPW0mJnRoaXMud3JpdGUobSxBKSx0ZS5jb3JrZWQmJih0ZS5jb3JrZWQ9MSx0aGlzLnVuY29yaygpKSx0ZS5lbmRpbmd8fGZ1bmN0aW9uIGoobSxBLGFlKXtBLmVuZGlu'@;
put 'Zz0hMCxIKG0sQSksYWUmJihBLmZpbmlzaGVkP18ubmV4dFRpY2soYWUpOm0ub25jZSgiZmluaXNoIixhZSkpLEEuZW5kZWQ9ITAsbS53cml0YWJsZT0hMX0odGhpcyx0ZSxhZSl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShKLnByb3RvdHlwZSwiZGVzdHJveWVkIix7Z2V0OmZ1bmN0aW9uKCl7'@;
put 'cmV0dXJuIHZvaWQgMCE9PXRoaXMuX3dyaXRhYmxlU3RhdGUmJnRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkfSxzZXQ6ZnVuY3Rpb24obSl7dGhpcy5fd3JpdGFibGVTdGF0ZSYmKHRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkPW0pfX0pLEoucHJvdG90eXBlLmRlc3Ryb3k9Vy5k'@;
put 'ZXN0cm95LEoucHJvdG90eXBlLl91bmRlc3Ryb3k9Vy51bmRlc3Ryb3ksSi5wcm90b3R5cGUuX2Rlc3Ryb3k9ZnVuY3Rpb24obSxBKXt0aGlzLmVuZCgpLEEobSl9fSwyMjY3Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBfPXkoMTU3MikuQnVmZmVyLGc9eSg2NDE5KTtmdW5jdGlvbiBC'@;
put 'KHcsUCxGKXt3LmNvcHkoUCxGKX11ZS5leHBvcnRzPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdygpeyhmdW5jdGlvbiBJKHcsUCl7aWYoISh3IGluc3RhbmNlb2YgUCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KSh0aGlzLHcpLHRoaXMu'@;
put 'aGVhZD1udWxsLHRoaXMudGFpbD1udWxsLHRoaXMubGVuZ3RoPTB9cmV0dXJuIHcucHJvdG90eXBlLnB1c2g9ZnVuY3Rpb24oRil7dmFyIE89e2RhdGE6RixuZXh0Om51bGx9O3RoaXMubGVuZ3RoPjA/dGhpcy50YWlsLm5leHQ9Tzp0aGlzLmhlYWQ9Tyx0aGlzLnRhaWw9TywrK3RoaXMubGVu'@;
put 'Z3RofSx3LnByb3RvdHlwZS51bnNoaWZ0PWZ1bmN0aW9uKEYpe3ZhciBPPXtkYXRhOkYsbmV4dDp0aGlzLmhlYWR9OzA9PT10aGlzLmxlbmd0aCYmKHRoaXMudGFpbD1PKSx0aGlzLmhlYWQ9TywrK3RoaXMubGVuZ3RofSx3LnByb3RvdHlwZS5zaGlmdD1mdW5jdGlvbigpe2lmKDAhPT10aGlz'@;
put 'Lmxlbmd0aCl7dmFyIEY9dGhpcy5oZWFkLmRhdGE7cmV0dXJuIHRoaXMuaGVhZD0xPT09dGhpcy5sZW5ndGg/dGhpcy50YWlsPW51bGw6dGhpcy5oZWFkLm5leHQsLS10aGlzLmxlbmd0aCxGfX0sdy5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXt0aGlzLmhlYWQ9dGhpcy50YWlsPW51bGws'@;
put 'dGhpcy5sZW5ndGg9MH0sdy5wcm90b3R5cGUuam9pbj1mdW5jdGlvbihGKXtpZigwPT09dGhpcy5sZW5ndGgpcmV0dXJuIiI7Zm9yKHZhciBPPXRoaXMuaGVhZCx6PSIiK08uZGF0YTtPPU8ubmV4dDspeis9RitPLmRhdGE7cmV0dXJuIHp9LHcucHJvdG90eXBlLmNvbmNhdD1mdW5jdGlvbihG'@;
put 'KXtpZigwPT09dGhpcy5sZW5ndGgpcmV0dXJuIF8uYWxsb2MoMCk7Zm9yKHZhciBPPV8uYWxsb2NVbnNhZmUoRj4+PjApLHo9dGhpcy5oZWFkLE49MDt6OylCKHouZGF0YSxPLE4pLE4rPXouZGF0YS5sZW5ndGgsej16Lm5leHQ7cmV0dXJuIE99LHd9KCksZyYmZy5pbnNwZWN0JiZnLmluc3Bl'@;
put 'Y3QuY3VzdG9tJiYodWUuZXhwb3J0cy5wcm90b3R5cGVbZy5pbnNwZWN0LmN1c3RvbV09ZnVuY3Rpb24oKXt2YXIgdz1nLmluc3BlY3Qoe2xlbmd0aDp0aGlzLmxlbmd0aH0pO3JldHVybiB0aGlzLmNvbnN0cnVjdG9yLm5hbWUrIiAiK3d9KX0sNTk5NzoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0'@;
put 'Ijt2YXIgST15KDgyMTIpO2Z1bmN0aW9uIEIodyxQKXt3LmVtaXQoImVycm9yIixQKX11ZS5leHBvcnRzPXtkZXN0cm95OmZ1bmN0aW9uIF8odyxQKXt2YXIgRj10aGlzO3JldHVybiB0aGlzLl9yZWFkYWJsZVN0YXRlJiZ0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZHx8dGhpcy5fd3Jp'@;
put 'dGFibGVTdGF0ZSYmdGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWQ/KFA/UCh3KTp3JiYodGhpcy5fd3JpdGFibGVTdGF0ZT90aGlzLl93cml0YWJsZVN0YXRlLmVycm9yRW1pdHRlZHx8KHRoaXMuX3dyaXRhYmxlU3RhdGUuZXJyb3JFbWl0dGVkPSEwLEkubmV4dFRpY2soQix0aGlzLHcp'@;
put 'KTpJLm5leHRUaWNrKEIsdGhpcyx3KSksdGhpcyk6KHRoaXMuX3JlYWRhYmxlU3RhdGUmJih0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZD0hMCksdGhpcy5fd3JpdGFibGVTdGF0ZSYmKHRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkPSEwKSx0aGlzLl9kZXN0cm95KHd8fG51bGws'@;
put 'ZnVuY3Rpb24oTil7IVAmJk4/Ri5fd3JpdGFibGVTdGF0ZT9GLl93cml0YWJsZVN0YXRlLmVycm9yRW1pdHRlZHx8KEYuX3dyaXRhYmxlU3RhdGUuZXJyb3JFbWl0dGVkPSEwLEkubmV4dFRpY2soQixGLE4pKTpJLm5leHRUaWNrKEIsRixOKTpQJiZQKE4pfSksdGhpcyl9LHVuZGVzdHJveTpm'@;
put 'dW5jdGlvbiBnKCl7dGhpcy5fcmVhZGFibGVTdGF0ZSYmKHRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkPSExLHRoaXMuX3JlYWRhYmxlU3RhdGUucmVhZGluZz0hMSx0aGlzLl9yZWFkYWJsZVN0YXRlLmVuZGVkPSExLHRoaXMuX3JlYWRhYmxlU3RhdGUuZW5kRW1pdHRlZD0hMSksdGhp'@;
put 'cy5fd3JpdGFibGVTdGF0ZSYmKHRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkPSExLHRoaXMuX3dyaXRhYmxlU3RhdGUuZW5kZWQ9ITEsdGhpcy5fd3JpdGFibGVTdGF0ZS5lbmRpbmc9ITEsdGhpcy5fd3JpdGFibGVTdGF0ZS5maW5hbENhbGxlZD0hMSx0aGlzLl93cml0YWJsZVN0YXRl'@;
put 'LnByZWZpbmlzaGVkPSExLHRoaXMuX3dyaXRhYmxlU3RhdGUuZmluaXNoZWQ9ITEsdGhpcy5fd3JpdGFibGVTdGF0ZS5lcnJvckVtaXR0ZWQ9ITEpfX19LDk4MTk6KHVlLFgseSk9Pnt1ZS5leHBvcnRzPXkoNzE4NykuRXZlbnRFbWl0dGVyfSwxNTcyOih1ZSxYLHkpPT57dmFyIEk9eSg4NzY0'@;
put 'KSxfPUkuQnVmZmVyO2Z1bmN0aW9uIGcodyxQKXtmb3IodmFyIEYgaW4gdylQW0ZdPXdbRl19ZnVuY3Rpb24gQih3LFAsRil7cmV0dXJuIF8odyxQLEYpfV8uZnJvbSYmXy5hbGxvYyYmXy5hbGxvY1Vuc2FmZSYmXy5hbGxvY1Vuc2FmZVNsb3c/dWUuZXhwb3J0cz1JOihnKEksWCksWC5CdWZm'@;
put 'ZXI9QiksZyhfLEIpLEIuZnJvbT1mdW5jdGlvbih3LFAsRil7aWYoIm51bWJlciI9PXR5cGVvZiB3KXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3Qgbm90IGJlIGEgbnVtYmVyIik7cmV0dXJuIF8odyxQLEYpfSxCLmFsbG9jPWZ1bmN0aW9uKHcsUCxGKXtpZigibnVtYmVyIiE9'@;
put 'dHlwZW9mIHcpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnQgbXVzdCBiZSBhIG51bWJlciIpO3ZhciBPPV8odyk7cmV0dXJuIHZvaWQgMCE9PVA/InN0cmluZyI9PXR5cGVvZiBGP08uZmlsbChQLEYpOk8uZmlsbChQKTpPLmZpbGwoMCksT30sQi5hbGxvY1Vuc2FmZT1mdW5jdGlvbih3'@;
put 'KXtpZigibnVtYmVyIiE9dHlwZW9mIHcpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnQgbXVzdCBiZSBhIG51bWJlciIpO3JldHVybiBfKHcpfSxCLmFsbG9jVW5zYWZlU2xvdz1mdW5jdGlvbih3KXtpZigibnVtYmVyIiE9dHlwZW9mIHcpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1l'@;
put 'bnQgbXVzdCBiZSBhIG51bWJlciIpO3JldHVybiBJLlNsb3dCdWZmZXIodyl9fSwzODcyOih1ZSxYLHkpPT57KFg9dWUuZXhwb3J0cz15KDQ5NjApKS5TdHJlYW09WCxYLlJlYWRhYmxlPVgsWC5Xcml0YWJsZT15KDIwMTApLFguRHVwbGV4PXkoNDM5MCksWC5UcmFuc2Zvcm09eSgzOTEyKSxY'@;
put 'LlBhc3NUaHJvdWdoPXkoMTI5NCl9LDIyMjE6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSgzMzY0KS5CdWZmZXIsXz1JLmlzRW5jb2Rpbmd8fGZ1bmN0aW9uKEope3N3aXRjaCgoSj0iIitKKSYmSi50b0xvd2VyQ2FzZSgpKXtjYXNlImhleCI6Y2FzZSJ1dGY4IjpjYXNlInV0Zi04'@;
put 'IjpjYXNlImFzY2lpIjpjYXNlImJpbmFyeSI6Y2FzZSJiYXNlNjQiOmNhc2UidWNzMiI6Y2FzZSJ1Y3MtMiI6Y2FzZSJ1dGYxNmxlIjpjYXNlInV0Zi0xNmxlIjpjYXNlInJhdyI6cmV0dXJuITA7ZGVmYXVsdDpyZXR1cm4hMX19O2Z1bmN0aW9uIHcoSil7dmFyIG5lO3N3aXRjaCh0aGlzLmVu'@;
put 'Y29kaW5nPWZ1bmN0aW9uIEIoSil7dmFyIG5lPWZ1bmN0aW9uIGcoSil7aWYoIUopcmV0dXJuInV0ZjgiO2Zvcih2YXIgbmU7Oylzd2l0Y2goSil7Y2FzZSJ1dGY4IjpjYXNlInV0Zi04IjpyZXR1cm4idXRmOCI7Y2FzZSJ1Y3MyIjpjYXNlInVjcy0yIjpjYXNlInV0ZjE2bGUiOmNhc2UidXRm'@;
put 'LTE2bGUiOnJldHVybiJ1dGYxNmxlIjtjYXNlImxhdGluMSI6Y2FzZSJiaW5hcnkiOnJldHVybiJsYXRpbjEiO2Nhc2UiYmFzZTY0IjpjYXNlImFzY2lpIjpjYXNlImhleCI6cmV0dXJuIEo7ZGVmYXVsdDppZihuZSlyZXR1cm47Sj0oIiIrSikudG9Mb3dlckNhc2UoKSxuZT0hMH19KEopO2lm'@;
put 'KCJzdHJpbmciIT10eXBlb2YgbmUmJihJLmlzRW5jb2Rpbmc9PT1ffHwhXyhKKSkpdGhyb3cgbmV3IEVycm9yKCJVbmtub3duIGVuY29kaW5nOiAiK0opO3JldHVybiBuZXx8Sn0oSiksdGhpcy5lbmNvZGluZyl7Y2FzZSJ1dGYxNmxlIjp0aGlzLnRleHQ9Syx0aGlzLmVuZD1VLG5lPTQ7YnJl'@;
put 'YWs7Y2FzZSJ1dGY4Ijp0aGlzLmZpbGxMYXN0PXosbmU9NDticmVhaztjYXNlImJhc2U2NCI6dGhpcy50ZXh0PVcsdGhpcy5lbmQ9WSxuZT0zO2JyZWFrO2RlZmF1bHQ6cmV0dXJuIHRoaXMud3JpdGU9cSx2b2lkKHRoaXMuZW5kPWVlKX10aGlzLmxhc3ROZWVkPTAsdGhpcy5sYXN0VG90YWw9'@;
put 'MCx0aGlzLmxhc3RDaGFyPUkuYWxsb2NVbnNhZmUobmUpfWZ1bmN0aW9uIFAoSil7cmV0dXJuIEo8PTEyNz8wOko+PjU9PTY/MjpKPj40PT0xND8zOko+PjM9PTMwPzQ6Sj4+Nj09Mj8tMTotMn1mdW5jdGlvbiB6KEope3ZhciBuZT10aGlzLmxhc3RUb3RhbC10aGlzLmxhc3ROZWVkLGllPWZ1'@;
put 'bmN0aW9uIE8oSixuZSxpZSl7aWYoMTI4IT0oMTkyJm5lWzBdKSlyZXR1cm4gSi5sYXN0TmVlZD0wLCJcdWZmZmQiO2lmKEoubGFzdE5lZWQ+MSYmbmUubGVuZ3RoPjEpe2lmKDEyOCE9KDE5MiZuZVsxXSkpcmV0dXJuIEoubGFzdE5lZWQ9MSwiXHVmZmZkIjtpZihKLmxhc3ROZWVkPjImJm5l'@;
put 'Lmxlbmd0aD4yJiYxMjghPSgxOTImbmVbMl0pKXJldHVybiBKLmxhc3ROZWVkPTIsIlx1ZmZmZCJ9fSh0aGlzLEopO3JldHVybiB2b2lkIDAhPT1pZT9pZTp0aGlzLmxhc3ROZWVkPD1KLmxlbmd0aD8oSi5jb3B5KHRoaXMubGFzdENoYXIsbmUsMCx0aGlzLmxhc3ROZWVkKSx0aGlzLmxhc3RD'@;
put 'aGFyLnRvU3RyaW5nKHRoaXMuZW5jb2RpbmcsMCx0aGlzLmxhc3RUb3RhbCkpOihKLmNvcHkodGhpcy5sYXN0Q2hhcixuZSwwLEoubGVuZ3RoKSx2b2lkKHRoaXMubGFzdE5lZWQtPUoubGVuZ3RoKSl9ZnVuY3Rpb24gSyhKLG5lKXtpZigoSi5sZW5ndGgtbmUpJTI9PTApe3ZhciBpZT1KLnRv'@;
put 'U3RyaW5nKCJ1dGYxNmxlIixuZSk7aWYoaWUpe3ZhciBsZT1pZS5jaGFyQ29kZUF0KGllLmxlbmd0aC0xKTtpZihsZT49NTUyOTYmJmxlPD01NjMxOSlyZXR1cm4gdGhpcy5sYXN0TmVlZD0yLHRoaXMubGFzdFRvdGFsPTQsdGhpcy5sYXN0Q2hhclswXT1KW0oubGVuZ3RoLTJdLHRoaXMubGFz'@;
put 'dENoYXJbMV09SltKLmxlbmd0aC0xXSxpZS5zbGljZSgwLC0xKX1yZXR1cm4gaWV9cmV0dXJuIHRoaXMubGFzdE5lZWQ9MSx0aGlzLmxhc3RUb3RhbD0yLHRoaXMubGFzdENoYXJbMF09SltKLmxlbmd0aC0xXSxKLnRvU3RyaW5nKCJ1dGYxNmxlIixuZSxKLmxlbmd0aC0xKX1mdW5jdGlvbiBV'@;
put 'KEope3ZhciBuZT1KJiZKLmxlbmd0aD90aGlzLndyaXRlKEopOiIiO3JldHVybiB0aGlzLmxhc3ROZWVkP25lK3RoaXMubGFzdENoYXIudG9TdHJpbmcoInV0ZjE2bGUiLDAsdGhpcy5sYXN0VG90YWwtdGhpcy5sYXN0TmVlZCk6bmV9ZnVuY3Rpb24gVyhKLG5lKXt2YXIgaWU9KEoubGVuZ3Ro'@;
put 'LW5lKSUzO3JldHVybiAwPT09aWU/Si50b1N0cmluZygiYmFzZTY0IixuZSk6KHRoaXMubGFzdE5lZWQ9My1pZSx0aGlzLmxhc3RUb3RhbD0zLDE9PT1pZT90aGlzLmxhc3RDaGFyWzBdPUpbSi5sZW5ndGgtMV06KHRoaXMubGFzdENoYXJbMF09SltKLmxlbmd0aC0yXSx0aGlzLmxhc3RDaGFy'@;
put 'WzFdPUpbSi5sZW5ndGgtMV0pLEoudG9TdHJpbmcoImJhc2U2NCIsbmUsSi5sZW5ndGgtaWUpKX1mdW5jdGlvbiBZKEope3ZhciBuZT1KJiZKLmxlbmd0aD90aGlzLndyaXRlKEopOiIiO3JldHVybiB0aGlzLmxhc3ROZWVkP25lK3RoaXMubGFzdENoYXIudG9TdHJpbmcoImJhc2U2NCIsMCwz'@;
put 'LXRoaXMubGFzdE5lZWQpOm5lfWZ1bmN0aW9uIHEoSil7cmV0dXJuIEoudG9TdHJpbmcodGhpcy5lbmNvZGluZyl9ZnVuY3Rpb24gZWUoSil7cmV0dXJuIEomJkoubGVuZ3RoP3RoaXMud3JpdGUoSik6IiJ9WC5zPXcsdy5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24oSil7aWYoMD09PUoubGVu'@;
put 'Z3RoKXJldHVybiIiO3ZhciBuZSxpZTtpZih0aGlzLmxhc3ROZWVkKXtpZih2b2lkIDA9PT0obmU9dGhpcy5maWxsTGFzdChKKSkpcmV0dXJuIiI7aWU9dGhpcy5sYXN0TmVlZCx0aGlzLmxhc3ROZWVkPTB9ZWxzZSBpZT0wO3JldHVybiBpZTxKLmxlbmd0aD9uZT9uZSt0aGlzLnRleHQoSixp'@;
put 'ZSk6dGhpcy50ZXh0KEosaWUpOm5lfHwiIn0sdy5wcm90b3R5cGUuZW5kPWZ1bmN0aW9uIEwoSil7dmFyIG5lPUomJkoubGVuZ3RoP3RoaXMud3JpdGUoSik6IiI7cmV0dXJuIHRoaXMubGFzdE5lZWQ/bmUrIlx1ZmZmZCI6bmV9LHcucHJvdG90eXBlLnRleHQ9ZnVuY3Rpb24gTihKLG5lKXt2'@;
put 'YXIgaWU9ZnVuY3Rpb24gRihKLG5lLGllKXt2YXIgbGU9bmUubGVuZ3RoLTE7aWYobGU8aWUpcmV0dXJuIDA7dmFyIG1lPVAobmVbbGVdKTtyZXR1cm4gbWU+PTA/KG1lPjAmJihKLmxhc3ROZWVkPW1lLTEpLG1lKTotLWxlPGllfHwtMj09PW1lPzA6KG1lPVAobmVbbGVdKSk+PTA/KG1lPjAm'@;
put 'JihKLmxhc3ROZWVkPW1lLTIpLG1lKTotLWxlPGllfHwtMj09PW1lPzA6KG1lPVAobmVbbGVdKSk+PTA/KG1lPjAmJigyPT09bWU/bWU9MDpKLmxhc3ROZWVkPW1lLTMpLG1lKTowfSh0aGlzLEosbmUpO2lmKCF0aGlzLmxhc3ROZWVkKXJldHVybiBKLnRvU3RyaW5nKCJ1dGY4IixuZSk7dGhp'@;
put 'cy5sYXN0VG90YWw9aWU7dmFyIGxlPUoubGVuZ3RoLShpZS10aGlzLmxhc3ROZWVkKTtyZXR1cm4gSi5jb3B5KHRoaXMubGFzdENoYXIsMCxsZSksSi50b1N0cmluZygidXRmOCIsbmUsbGUpfSx3LnByb3RvdHlwZS5maWxsTGFzdD1mdW5jdGlvbihKKXtpZih0aGlzLmxhc3ROZWVkPD1KLmxl'@;
put 'bmd0aClyZXR1cm4gSi5jb3B5KHRoaXMubGFzdENoYXIsdGhpcy5sYXN0VG90YWwtdGhpcy5sYXN0TmVlZCwwLHRoaXMubGFzdE5lZWQpLHRoaXMubGFzdENoYXIudG9TdHJpbmcodGhpcy5lbmNvZGluZywwLHRoaXMubGFzdFRvdGFsKTtKLmNvcHkodGhpcy5sYXN0Q2hhcix0aGlzLmxhc3RU'@;
put 'b3RhbC10aGlzLmxhc3ROZWVkLDAsSi5sZW5ndGgpLHRoaXMubGFzdE5lZWQtPUoubGVuZ3RofX0sMzM2NDoodWUsWCx5KT0+e3ZhciBJPXkoODc2NCksXz1JLkJ1ZmZlcjtmdW5jdGlvbiBnKHcsUCl7Zm9yKHZhciBGIGluIHcpUFtGXT13W0ZdfWZ1bmN0aW9uIEIodyxQLEYpe3JldHVybiBf'@;
put 'KHcsUCxGKX1fLmZyb20mJl8uYWxsb2MmJl8uYWxsb2NVbnNhZmUmJl8uYWxsb2NVbnNhZmVTbG93P3VlLmV4cG9ydHM9STooZyhJLFgpLFguQnVmZmVyPUIpLGcoXyxCKSxCLmZyb209ZnVuY3Rpb24odyxQLEYpe2lmKCJudW1iZXIiPT10eXBlb2Ygdyl0aHJvdyBuZXcgVHlwZUVycm9yKCJB'@;
put 'cmd1bWVudCBtdXN0IG5vdCBiZSBhIG51bWJlciIpO3JldHVybiBfKHcsUCxGKX0sQi5hbGxvYz1mdW5jdGlvbih3LFAsRil7aWYoIm51bWJlciIhPXR5cGVvZiB3KXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3QgYmUgYSBudW1iZXIiKTt2YXIgTz1fKHcpO3JldHVybiB2b2lk'@;
put 'IDAhPT1QPyJzdHJpbmciPT10eXBlb2YgRj9PLmZpbGwoUCxGKTpPLmZpbGwoUCk6Ty5maWxsKDApLE99LEIuYWxsb2NVbnNhZmU9ZnVuY3Rpb24odyl7aWYoIm51bWJlciIhPXR5cGVvZiB3KXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3QgYmUgYSBudW1iZXIiKTtyZXR1cm4g'@;
put 'Xyh3KX0sQi5hbGxvY1Vuc2FmZVNsb3c9ZnVuY3Rpb24odyl7aWYoIm51bWJlciIhPXR5cGVvZiB3KXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3QgYmUgYSBudW1iZXIiKTtyZXR1cm4gSS5TbG93QnVmZmVyKHcpfX0sNzI5NToodWUsWCx5KT0+e3ZhciBJPXkoODc2NCkuQnVm'@;
put 'ZmVyO3VlLmV4cG9ydHM9ZnVuY3Rpb24oZyxCKXtmb3IodmFyIHc9TWF0aC5taW4oZy5sZW5ndGgsQi5sZW5ndGgpLFA9bmV3IEkodyksRj0wO0Y8dzsrK0YpUFtGXT1nW0ZdXkJbRl07cmV0dXJuIFB9fSw4NzY0Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoNTEwOCk7Y29uc3Qg'@;
put 'Xz15KDk3NDIpLGc9eSg2NDUpLEI9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbC5mb3I/U3ltYm9sLmZvcigibm9kZWpzLnV0aWwuaW5zcGVjdC5jdXN0b20iKTpudWxsO1guQnVmZmVyPU8sWC5TbG93QnVmZmVyPWZ1bmN0aW9uIG5lKCRlKXty'@;
put 'ZXR1cm4rJGUhPSRlJiYoJGU9MCksTy5hbGxvYygrJGUpfSxYLklOU1BFQ1RfTUFYX0JZVEVTPTUwO2NvbnN0IHc9MjE0NzQ4MzY0NztmdW5jdGlvbiBGKCRlKXtpZigkZT53KXRocm93IG5ldyBSYW5nZUVycm9yKCdUaGUgdmFsdWUgIicrJGUrJyIgaXMgaW52YWxpZCBmb3Igb3B0aW9uICJz'@;
put 'aXplIicpO2NvbnN0IHR0PW5ldyBVaW50OEFycmF5KCRlKTtyZXR1cm4gT2JqZWN0LnNldFByb3RvdHlwZU9mKHR0LE8ucHJvdG90eXBlKSx0dH1mdW5jdGlvbiBPKCRlLHR0LEhlKXtpZigibnVtYmVyIj09dHlwZW9mICRlKXtpZigic3RyaW5nIj09dHlwZW9mIHR0KXRocm93IG5ldyBUeXBl'@;
put 'RXJyb3IoJ1RoZSAic3RyaW5nIiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgc3RyaW5nLiBSZWNlaXZlZCB0eXBlIG51bWJlcicpO3JldHVybiBLKCRlKX1yZXR1cm4geigkZSx0dCxIZSl9ZnVuY3Rpb24geigkZSx0dCxIZSl7aWYoInN0cmluZyI9PXR5cGVvZiAkZSlyZXR1cm4gZnVuY3Rp'@;
put 'b24gVSgkZSx0dCl7aWYoKCJzdHJpbmciIT10eXBlb2YgdHR8fCIiPT09dHQpJiYodHQ9InV0ZjgiKSwhTy5pc0VuY29kaW5nKHR0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJVbmtub3duIGVuY29kaW5nOiAiK3R0KTtjb25zdCBIZT0wfGllKCRlLHR0KTtsZXQgdXQ9RihIZSk7Y29uc3QgcXQ9'@;
put 'dXQud3JpdGUoJGUsdHQpO3JldHVybiBxdCE9PUhlJiYodXQ9dXQuc2xpY2UoMCxxdCkpLHV0fSgkZSx0dCk7aWYoQXJyYXlCdWZmZXIuaXNWaWV3KCRlKSlyZXR1cm4gZnVuY3Rpb24gWSgkZSl7aWYodW4oJGUsVWludDhBcnJheSkpe2NvbnN0IHR0PW5ldyBVaW50OEFycmF5KCRlKTtyZXR1'@;
put 'cm4gcSh0dC5idWZmZXIsdHQuYnl0ZU9mZnNldCx0dC5ieXRlTGVuZ3RoKX1yZXR1cm4gVygkZSl9KCRlKTtpZihudWxsPT0kZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJUaGUgZmlyc3QgYXJndW1lbnQgbXVzdCBiZSBvbmUgb2YgdHlwZSBzdHJpbmcsIEJ1ZmZlciwgQXJyYXlCdWZmZXIsIEFy'@;
put 'cmF5LCBvciBBcnJheS1saWtlIE9iamVjdC4gUmVjZWl2ZWQgdHlwZSAiK3R5cGVvZiAkZSk7aWYodW4oJGUsQXJyYXlCdWZmZXIpfHwkZSYmdW4oJGUuYnVmZmVyLEFycmF5QnVmZmVyKXx8dHlwZW9mIFNoYXJlZEFycmF5QnVmZmVyPCJ1IiYmKHVuKCRlLFNoYXJlZEFycmF5QnVmZmVyKXx8'@;
put 'JGUmJnVuKCRlLmJ1ZmZlcixTaGFyZWRBcnJheUJ1ZmZlcikpKXJldHVybiBxKCRlLHR0LEhlKTtpZigibnVtYmVyIj09dHlwZW9mICRlKXRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSAidmFsdWUiIGFyZ3VtZW50IG11c3Qgbm90IGJlIG9mIHR5cGUgbnVtYmVyLiBSZWNlaXZlZCB0eXBlIG51'@;
put 'bWJlcicpO2NvbnN0IHV0PSRlLnZhbHVlT2YmJiRlLnZhbHVlT2YoKTtpZihudWxsIT11dCYmdXQhPT0kZSlyZXR1cm4gTy5mcm9tKHV0LHR0LEhlKTtjb25zdCBxdD1mdW5jdGlvbiBlZSgkZSl7aWYoTy5pc0J1ZmZlcigkZSkpe2NvbnN0IHR0PTB8SigkZS5sZW5ndGgpLEhlPUYodHQpO3Jl'@;
put 'dHVybiAwPT09SGUubGVuZ3RofHwkZS5jb3B5KEhlLDAsMCx0dCksSGV9cmV0dXJuIHZvaWQgMCE9PSRlLmxlbmd0aD8ibnVtYmVyIiE9dHlwZW9mICRlLmxlbmd0aHx8eXQoJGUubGVuZ3RoKT9GKDApOlcoJGUpOiJCdWZmZXIiPT09JGUudHlwZSYmQXJyYXkuaXNBcnJheSgkZS5kYXRhKT9X'@;
put 'KCRlLmRhdGEpOnZvaWQgMH0oJGUpO2lmKHF0KXJldHVybiBxdDtpZih0eXBlb2YgU3ltYm9sPCJ1IiYmbnVsbCE9U3ltYm9sLnRvUHJpbWl0aXZlJiYiZnVuY3Rpb24iPT10eXBlb2YgJGVbU3ltYm9sLnRvUHJpbWl0aXZlXSlyZXR1cm4gTy5mcm9tKCRlW1N5bWJvbC50b1ByaW1pdGl2ZV0o'@;
put 'InN0cmluZyIpLHR0LEhlKTt0aHJvdyBuZXcgVHlwZUVycm9yKCJUaGUgZmlyc3QgYXJndW1lbnQgbXVzdCBiZSBvbmUgb2YgdHlwZSBzdHJpbmcsIEJ1ZmZlciwgQXJyYXlCdWZmZXIsIEFycmF5LCBvciBBcnJheS1saWtlIE9iamVjdC4gUmVjZWl2ZWQgdHlwZSAiK3R5cGVvZiAkZSl9ZnVu'@;
put 'Y3Rpb24gTigkZSl7aWYoIm51bWJlciIhPXR5cGVvZiAkZSl0aHJvdyBuZXcgVHlwZUVycm9yKCcic2l6ZSIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIG51bWJlcicpO2lmKCRlPDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1RoZSB2YWx1ZSAiJyskZSsnIiBpcyBpbnZhbGlkIGZvciBvcHRp'@;
put 'b24gInNpemUiJyl9ZnVuY3Rpb24gSygkZSl7cmV0dXJuIE4oJGUpLEYoJGU8MD8wOjB8SigkZSkpfWZ1bmN0aW9uIFcoJGUpe2NvbnN0IHR0PSRlLmxlbmd0aDwwPzA6MHxKKCRlLmxlbmd0aCksSGU9Rih0dCk7Zm9yKGxldCB1dD0wO3V0PHR0O3V0Kz0xKUhlW3V0XT0yNTUmJGVbdXRdO3Jl'@;
put 'dHVybiBIZX1mdW5jdGlvbiBxKCRlLHR0LEhlKXtpZih0dDwwfHwkZS5ieXRlTGVuZ3RoPHR0KXRocm93IG5ldyBSYW5nZUVycm9yKCcib2Zmc2V0IiBpcyBvdXRzaWRlIG9mIGJ1ZmZlciBib3VuZHMnKTtpZigkZS5ieXRlTGVuZ3RoPHR0KyhIZXx8MCkpdGhyb3cgbmV3IFJhbmdlRXJyb3Io'@;
put 'JyJsZW5ndGgiIGlzIG91dHNpZGUgb2YgYnVmZmVyIGJvdW5kcycpO2xldCB1dDtyZXR1cm4gdXQ9dm9pZCAwPT09dHQmJnZvaWQgMD09PUhlP25ldyBVaW50OEFycmF5KCRlKTp2b2lkIDA9PT1IZT9uZXcgVWludDhBcnJheSgkZSx0dCk6bmV3IFVpbnQ4QXJyYXkoJGUsdHQsSGUpLE9iamVj'@;
put 'dC5zZXRQcm90b3R5cGVPZih1dCxPLnByb3RvdHlwZSksdXR9ZnVuY3Rpb24gSigkZSl7aWYoJGU+PXcpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkF0dGVtcHQgdG8gYWxsb2NhdGUgQnVmZmVyIGxhcmdlciB0aGFuIG1heGltdW0gc2l6ZTogMHgiK3cudG9TdHJpbmcoMTYpKyIgYnl0ZXMiKTty'@;
put 'ZXR1cm4gMHwkZX1mdW5jdGlvbiBpZSgkZSx0dCl7aWYoTy5pc0J1ZmZlcigkZSkpcmV0dXJuICRlLmxlbmd0aDtpZihBcnJheUJ1ZmZlci5pc1ZpZXcoJGUpfHx1bigkZSxBcnJheUJ1ZmZlcikpcmV0dXJuICRlLmJ5dGVMZW5ndGg7aWYoInN0cmluZyIhPXR5cGVvZiAkZSl0aHJvdyBuZXcg'@;
put 'VHlwZUVycm9yKCdUaGUgInN0cmluZyIgYXJndW1lbnQgbXVzdCBiZSBvbmUgb2YgdHlwZSBzdHJpbmcsIEJ1ZmZlciwgb3IgQXJyYXlCdWZmZXIuIFJlY2VpdmVkIHR5cGUgJyt0eXBlb2YgJGUpO2NvbnN0IEhlPSRlLmxlbmd0aCx1dD1hcmd1bWVudHMubGVuZ3RoPjImJiEwPT09YXJndW1l'@;
put 'bnRzWzJdO2lmKCF1dCYmMD09PUhlKXJldHVybiAwO2xldCBxdD0hMTtmb3IoOzspc3dpdGNoKHR0KXtjYXNlImFzY2lpIjpjYXNlImxhdGluMSI6Y2FzZSJiaW5hcnkiOnJldHVybiBIZTtjYXNlInV0ZjgiOmNhc2UidXRmLTgiOnJldHVybiBrZSgkZSkubGVuZ3RoO2Nhc2UidWNzMiI6Y2Fz'@;
put 'ZSJ1Y3MtMiI6Y2FzZSJ1dGYxNmxlIjpjYXNlInV0Zi0xNmxlIjpyZXR1cm4gMipIZTtjYXNlImhleCI6cmV0dXJuIEhlPj4+MTtjYXNlImJhc2U2NCI6cmV0dXJuIG50KCRlKS5sZW5ndGg7ZGVmYXVsdDppZihxdClyZXR1cm4gdXQ/LTE6a2UoJGUpLmxlbmd0aDt0dD0oIiIrdHQpLnRvTG93'@;
put 'ZXJDYXNlKCkscXQ9ITB9fWZ1bmN0aW9uIGxlKCRlLHR0LEhlKXtsZXQgdXQ9ITE7aWYoKHZvaWQgMD09PXR0fHx0dDwwKSYmKHR0PTApLHR0PnRoaXMubGVuZ3RofHwoKHZvaWQgMD09PUhlfHxIZT50aGlzLmxlbmd0aCkmJihIZT10aGlzLmxlbmd0aCksSGU8PTApfHwoSGU+Pj49MCk8PSh0'@;
put 'dD4+Pj0wKSlyZXR1cm4iIjtmb3IoJGV8fCgkZT0idXRmOCIpOzspc3dpdGNoKCRlKXtjYXNlImhleCI6cmV0dXJuIG0odGhpcyx0dCxIZSk7Y2FzZSJ1dGY4IjpjYXNlInV0Zi04IjpyZXR1cm4gQyh0aGlzLHR0LEhlKTtjYXNlImFzY2lpIjpyZXR1cm4gaih0aGlzLHR0LEhlKTtjYXNlImxh'@;
put 'dGluMSI6Y2FzZSJiaW5hcnkiOnJldHVybiBFKHRoaXMsdHQsSGUpO2Nhc2UiYmFzZTY0IjpyZXR1cm4geCh0aGlzLHR0LEhlKTtjYXNlInVjczIiOmNhc2UidWNzLTIiOmNhc2UidXRmMTZsZSI6Y2FzZSJ1dGYtMTZsZSI6cmV0dXJuIEEodGhpcyx0dCxIZSk7ZGVmYXVsdDppZih1dCl0aHJv'@;
put 'dyBuZXcgVHlwZUVycm9yKCJVbmtub3duIGVuY29kaW5nOiAiKyRlKTskZT0oJGUrIiIpLnRvTG93ZXJDYXNlKCksdXQ9ITB9fWZ1bmN0aW9uIG1lKCRlLHR0LEhlKXtjb25zdCB1dD0kZVt0dF07JGVbdHRdPSRlW0hlXSwkZVtIZV09dXR9ZnVuY3Rpb24gX2UoJGUsdHQsSGUsdXQscXQpe2lm'@;
put 'KDA9PT0kZS5sZW5ndGgpcmV0dXJuLTE7aWYoInN0cmluZyI9PXR5cGVvZiBIZT8odXQ9SGUsSGU9MCk6SGU+MjE0NzQ4MzY0Nz9IZT0yMTQ3NDgzNjQ3OkhlPC0yMTQ3NDgzNjQ4JiYoSGU9LTIxNDc0ODM2NDgpLHl0KEhlPStIZSkmJihIZT1xdD8wOiRlLmxlbmd0aC0xKSxIZTwwJiYoSGU9'@;
put 'JGUubGVuZ3RoK0hlKSxIZT49JGUubGVuZ3RoKXtpZihxdClyZXR1cm4tMTtIZT0kZS5sZW5ndGgtMX1lbHNlIGlmKEhlPDApe2lmKCFxdClyZXR1cm4tMTtIZT0wfWlmKCJzdHJpbmciPT10eXBlb2YgdHQmJih0dD1PLmZyb20odHQsdXQpKSxPLmlzQnVmZmVyKHR0KSlyZXR1cm4gMD09PXR0'@;
put 'Lmxlbmd0aD8tMTpUZSgkZSx0dCxIZSx1dCxxdCk7aWYoIm51bWJlciI9PXR5cGVvZiB0dClyZXR1cm4gdHQmPTI1NSwiZnVuY3Rpb24iPT10eXBlb2YgVWludDhBcnJheS5wcm90b3R5cGUuaW5kZXhPZj9xdD9VaW50OEFycmF5LnByb3RvdHlwZS5pbmRleE9mLmNhbGwoJGUsdHQsSGUpOlVp'@;
put 'bnQ4QXJyYXkucHJvdG90eXBlLmxhc3RJbmRleE9mLmNhbGwoJGUsdHQsSGUpOlRlKCRlLFt0dF0sSGUsdXQscXQpO3Rocm93IG5ldyBUeXBlRXJyb3IoInZhbCBtdXN0IGJlIHN0cmluZywgbnVtYmVyIG9yIEJ1ZmZlciIpfWZ1bmN0aW9uIFRlKCRlLHR0LEhlLHV0LHF0KXtsZXQgc24sUnQ9'@;
put 'MSxQdD0kZS5sZW5ndGgsY2k9dHQubGVuZ3RoO2lmKHZvaWQgMCE9PXV0JiYoInVjczIiPT09KHV0PVN0cmluZyh1dCkudG9Mb3dlckNhc2UoKSl8fCJ1Y3MtMiI9PT11dHx8InV0ZjE2bGUiPT09dXR8fCJ1dGYtMTZsZSI9PT11dCkpe2lmKCRlLmxlbmd0aDwyfHx0dC5sZW5ndGg8MilyZXR1'@;
put 'cm4tMTtSdD0yLFB0Lz0yLGNpLz0yLEhlLz0yfWZ1bmN0aW9uIFF0KFJpLGhuKXtyZXR1cm4gMT09PVJ0P1JpW2huXTpSaS5yZWFkVUludDE2QkUoaG4qUnQpfWlmKHF0KXtsZXQgUmk9LTE7Zm9yKHNuPUhlO3NuPFB0O3NuKyspaWYoUXQoJGUsc24pPT09UXQodHQsLTE9PT1SaT8wOnNuLVJp'@;
put 'KSl7aWYoLTE9PT1SaSYmKFJpPXNuKSxzbi1SaSsxPT09Y2kpcmV0dXJuIFJpKlJ0fWVsc2UtMSE9PVJpJiYoc24tPXNuLVJpKSxSaT0tMX1lbHNlIGZvcihIZStjaT5QdCYmKEhlPVB0LWNpKSxzbj1IZTtzbj49MDtzbi0tKXtsZXQgUmk9ITA7Zm9yKGxldCBobj0wO2huPGNpO2huKyspaWYo'@;
put 'UXQoJGUsc24raG4pIT09UXQodHQsaG4pKXtSaT0hMTticmVha31pZihSaSlyZXR1cm4gc259cmV0dXJuLTF9ZnVuY3Rpb24gU2UoJGUsdHQsSGUsdXQpe0hlPU51bWJlcihIZSl8fDA7Y29uc3QgcXQ9JGUubGVuZ3RoLUhlO3V0Pyh1dD1OdW1iZXIodXQpKT5xdCYmKHV0PXF0KTp1dD1xdDtj'@;
put 'b25zdCBSdD10dC5sZW5ndGg7bGV0IFB0O2Zvcih1dD5SdC8yJiYodXQ9UnQvMiksUHQ9MDtQdDx1dDsrK1B0KXtjb25zdCBjaT1wYXJzZUludCh0dC5zdWJzdHIoMipQdCwyKSwxNik7aWYoeXQoY2kpKXJldHVybiBQdDskZVtIZStQdF09Y2l9cmV0dXJuIFB0fWZ1bmN0aW9uIGplKCRlLHR0'@;
put 'LEhlLHV0KXtyZXR1cm4gUWUoa2UodHQsJGUubGVuZ3RoLUhlKSwkZSxIZSx1dCl9ZnVuY3Rpb24gVigkZSx0dCxIZSx1dCl7cmV0dXJuIFFlKGZ1bmN0aW9uIEFlKCRlKXtjb25zdCB0dD1bXTtmb3IobGV0IEhlPTA7SGU8JGUubGVuZ3RoOysrSGUpdHQucHVzaCgyNTUmJGUuY2hhckNvZGVB'@;
put 'dChIZSkpO3JldHVybiB0dH0odHQpLCRlLEhlLHV0KX1mdW5jdGlvbiBwKCRlLHR0LEhlLHV0KXtyZXR1cm4gUWUobnQodHQpLCRlLEhlLHV0KX1mdW5jdGlvbiBiKCRlLHR0LEhlLHV0KXtyZXR1cm4gUWUoZnVuY3Rpb24gX3QoJGUsdHQpe2xldCBIZSx1dCxxdDtjb25zdCBSdD1bXTtmb3Io'@;
put 'bGV0IFB0PTA7UHQ8JGUubGVuZ3RoJiYhKCh0dC09Mik8MCk7KytQdClIZT0kZS5jaGFyQ29kZUF0KFB0KSx1dD1IZT4+OCxxdD1IZSUyNTYsUnQucHVzaChxdCksUnQucHVzaCh1dCk7cmV0dXJuIFJ0fSh0dCwkZS5sZW5ndGgtSGUpLCRlLEhlLHV0KX1mdW5jdGlvbiB4KCRlLHR0LEhlKXty'@;
put 'ZXR1cm4gXy5mcm9tQnl0ZUFycmF5KDA9PT10dCYmSGU9PT0kZS5sZW5ndGg/JGU6JGUuc2xpY2UodHQsSGUpKX1mdW5jdGlvbiBDKCRlLHR0LEhlKXtIZT1NYXRoLm1pbigkZS5sZW5ndGgsSGUpO2NvbnN0IHV0PVtdO2xldCBxdD10dDtmb3IoO3F0PEhlOyl7Y29uc3QgUnQ9JGVbcXRdO2xl'@;
put 'dCBQdD1udWxsLGNpPVJ0PjIzOT80OlJ0PjIyMz8zOlJ0PjE5MT8yOjE7aWYocXQrY2k8PUhlKXtsZXQgUXQsc24sUmksaG47c3dpdGNoKGNpKXtjYXNlIDE6UnQ8MTI4JiYoUHQ9UnQpO2JyZWFrO2Nhc2UgMjpRdD0kZVtxdCsxXSwxMjg9PSgxOTImUXQpJiYoaG49KDMxJlJ0KTw8Nnw2MyZR'@;
put 'dCxobj4xMjcmJihQdD1obikpO2JyZWFrO2Nhc2UgMzpRdD0kZVtxdCsxXSxzbj0kZVtxdCsyXSwxMjg9PSgxOTImUXQpJiYxMjg9PSgxOTImc24pJiYoaG49KDE1JlJ0KTw8MTJ8KDYzJlF0KTw8Nnw2MyZzbixobj4yMDQ3JiYoaG48NTUyOTZ8fGhuPjU3MzQzKSYmKFB0PWhuKSk7YnJlYWs7'@;
put 'Y2FzZSA0OlF0PSRlW3F0KzFdLHNuPSRlW3F0KzJdLFJpPSRlW3F0KzNdLDEyOD09KDE5MiZRdCkmJjEyOD09KDE5MiZzbikmJjEyOD09KDE5MiZSaSkmJihobj0oMTUmUnQpPDwxOHwoNjMmUXQpPDwxMnwoNjMmc24pPDw2fDYzJlJpLGhuPjY1NTM1JiZobjwxMTE0MTEyJiYoUHQ9aG4pKX19'@;
put 'bnVsbD09PVB0PyhQdD02NTUzMyxjaT0xKTpQdD42NTUzNSYmKFB0LT02NTUzNix1dC5wdXNoKFB0Pj4+MTAmMTAyM3w1NTI5NiksUHQ9NTYzMjB8MTAyMyZQdCksdXQucHVzaChQdCkscXQrPWNpfXJldHVybiBmdW5jdGlvbiBIKCRlKXtjb25zdCB0dD0kZS5sZW5ndGg7aWYodHQ8PVQpcmV0'@;
put 'dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoU3RyaW5nLCRlKTtsZXQgSGU9IiIsdXQ9MDtmb3IoO3V0PHR0OylIZSs9U3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShTdHJpbmcsJGUuc2xpY2UodXQsdXQrPVQpKTtyZXR1cm4gSGV9KHV0KX1YLmtNYXhMZW5ndGg9dywhKE8uVFlQRURf'@;
put 'QVJSQVlfU1VQUE9SVD1mdW5jdGlvbiBQKCl7dHJ5e2NvbnN0ICRlPW5ldyBVaW50OEFycmF5KDEpLHR0PXtmb286ZnVuY3Rpb24oKXtyZXR1cm4gNDJ9fTtyZXR1cm4gT2JqZWN0LnNldFByb3RvdHlwZU9mKHR0LFVpbnQ4QXJyYXkucHJvdG90eXBlKSxPYmplY3Quc2V0UHJvdG90eXBlT2Yo'@;
put 'JGUsdHQpLDQyPT09JGUuZm9vKCl9Y2F0Y2h7cmV0dXJuITF9fSgpKSYmdHlwZW9mIEk8InUiJiYiZnVuY3Rpb24iPT10eXBlb2YgSS5lcnJvciYmSS5lcnJvcigiVGhpcyBicm93c2VyIGxhY2tzIHR5cGVkIGFycmF5IChVaW50OEFycmF5KSBzdXBwb3J0IHdoaWNoIGlzIHJlcXVpcmVkIGJ5'@;
put 'IGBidWZmZXJgIHY1LnguIFVzZSBgYnVmZmVyYCB2NC54IGlmIHlvdSByZXF1aXJlIG9sZCBicm93c2VyIHN1cHBvcnQuIiksT2JqZWN0LmRlZmluZVByb3BlcnR5KE8ucHJvdG90eXBlLCJwYXJlbnQiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe2lmKE8uaXNCdWZmZXIodGhpcykp'@;
put 'cmV0dXJuIHRoaXMuYnVmZmVyfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShPLnByb3RvdHlwZSwib2Zmc2V0Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtpZihPLmlzQnVmZmVyKHRoaXMpKXJldHVybiB0aGlzLmJ5dGVPZmZzZXR9fSksTy5wb29sU2l6ZT04MTkyLE8uZnJvbT1m'@;
put 'dW5jdGlvbigkZSx0dCxIZSl7cmV0dXJuIHooJGUsdHQsSGUpfSxPYmplY3Quc2V0UHJvdG90eXBlT2YoTy5wcm90b3R5cGUsVWludDhBcnJheS5wcm90b3R5cGUpLE9iamVjdC5zZXRQcm90b3R5cGVPZihPLFVpbnQ4QXJyYXkpLE8uYWxsb2M9ZnVuY3Rpb24oJGUsdHQsSGUpe3JldHVybiBm'@;
put 'dW5jdGlvbiBMKCRlLHR0LEhlKXtyZXR1cm4gTigkZSksJGU8PTA/RigkZSk6dm9pZCAwIT09dHQ/InN0cmluZyI9PXR5cGVvZiBIZT9GKCRlKS5maWxsKHR0LEhlKTpGKCRlKS5maWxsKHR0KTpGKCRlKX0oJGUsdHQsSGUpfSxPLmFsbG9jVW5zYWZlPWZ1bmN0aW9uKCRlKXtyZXR1cm4gSygk'@;
put 'ZSl9LE8uYWxsb2NVbnNhZmVTbG93PWZ1bmN0aW9uKCRlKXtyZXR1cm4gSygkZSl9LE8uaXNCdWZmZXI9ZnVuY3Rpb24odHQpe3JldHVybiBudWxsIT10dCYmITA9PT10dC5faXNCdWZmZXImJnR0IT09Ty5wcm90b3R5cGV9LE8uY29tcGFyZT1mdW5jdGlvbih0dCxIZSl7aWYodW4odHQsVWlu'@;
put 'dDhBcnJheSkmJih0dD1PLmZyb20odHQsdHQub2Zmc2V0LHR0LmJ5dGVMZW5ndGgpKSx1bihIZSxVaW50OEFycmF5KSYmKEhlPU8uZnJvbShIZSxIZS5vZmZzZXQsSGUuYnl0ZUxlbmd0aCkpLCFPLmlzQnVmZmVyKHR0KXx8IU8uaXNCdWZmZXIoSGUpKXRocm93IG5ldyBUeXBlRXJyb3IoJ1Ro'@;
put 'ZSAiYnVmMSIsICJidWYyIiBhcmd1bWVudHMgbXVzdCBiZSBvbmUgb2YgdHlwZSBCdWZmZXIgb3IgVWludDhBcnJheScpO2lmKHR0PT09SGUpcmV0dXJuIDA7bGV0IHV0PXR0Lmxlbmd0aCxxdD1IZS5sZW5ndGg7Zm9yKGxldCBSdD0wLFB0PU1hdGgubWluKHV0LHF0KTtSdDxQdDsrK1J0KWlm'@;
put 'KHR0W1J0XSE9PUhlW1J0XSl7dXQ9dHRbUnRdLHF0PUhlW1J0XTticmVha31yZXR1cm4gdXQ8cXQ/LTE6cXQ8dXQ/MTowfSxPLmlzRW5jb2Rpbmc9ZnVuY3Rpb24odHQpe3N3aXRjaChTdHJpbmcodHQpLnRvTG93ZXJDYXNlKCkpe2Nhc2UiaGV4IjpjYXNlInV0ZjgiOmNhc2UidXRmLTgiOmNh'@;
put 'c2UiYXNjaWkiOmNhc2UibGF0aW4xIjpjYXNlImJpbmFyeSI6Y2FzZSJiYXNlNjQiOmNhc2UidWNzMiI6Y2FzZSJ1Y3MtMiI6Y2FzZSJ1dGYxNmxlIjpjYXNlInV0Zi0xNmxlIjpyZXR1cm4hMDtkZWZhdWx0OnJldHVybiExfX0sTy5jb25jYXQ9ZnVuY3Rpb24odHQsSGUpe2lmKCFBcnJheS5p'@;
put 'c0FycmF5KHR0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCcibGlzdCIgYXJndW1lbnQgbXVzdCBiZSBhbiBBcnJheSBvZiBCdWZmZXJzJyk7aWYoMD09PXR0Lmxlbmd0aClyZXR1cm4gTy5hbGxvYygwKTtsZXQgdXQ7aWYodm9pZCAwPT09SGUpZm9yKEhlPTAsdXQ9MDt1dDx0dC5sZW5ndGg7Kyt1'@;
put 'dClIZSs9dHRbdXRdLmxlbmd0aDtjb25zdCBxdD1PLmFsbG9jVW5zYWZlKEhlKTtsZXQgUnQ9MDtmb3IodXQ9MDt1dDx0dC5sZW5ndGg7Kyt1dCl7bGV0IFB0PXR0W3V0XTtpZih1bihQdCxVaW50OEFycmF5KSlSdCtQdC5sZW5ndGg+cXQubGVuZ3RoPyhPLmlzQnVmZmVyKFB0KXx8KFB0PU8u'@;
put 'ZnJvbShQdCkpLFB0LmNvcHkocXQsUnQpKTpVaW50OEFycmF5LnByb3RvdHlwZS5zZXQuY2FsbChxdCxQdCxSdCk7ZWxzZXtpZighTy5pc0J1ZmZlcihQdCkpdGhyb3cgbmV3IFR5cGVFcnJvcignImxpc3QiIGFyZ3VtZW50IG11c3QgYmUgYW4gQXJyYXkgb2YgQnVmZmVycycpO1B0LmNvcHko'@;
put 'cXQsUnQpfVJ0Kz1QdC5sZW5ndGh9cmV0dXJuIHF0fSxPLmJ5dGVMZW5ndGg9aWUsTy5wcm90b3R5cGUuX2lzQnVmZmVyPSEwLE8ucHJvdG90eXBlLnN3YXAxNj1mdW5jdGlvbigpe2NvbnN0IHR0PXRoaXMubGVuZ3RoO2lmKHR0JTIhPTApdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkJ1ZmZlciBz'@;
put 'aXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiAxNi1iaXRzIik7Zm9yKGxldCBIZT0wO0hlPHR0O0hlKz0yKW1lKHRoaXMsSGUsSGUrMSk7cmV0dXJuIHRoaXN9LE8ucHJvdG90eXBlLnN3YXAzMj1mdW5jdGlvbigpe2NvbnN0IHR0PXRoaXMubGVuZ3RoO2lmKHR0JTQhPTApdGhyb3cgbmV3IFJh'@;
put 'bmdlRXJyb3IoIkJ1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiAzMi1iaXRzIik7Zm9yKGxldCBIZT0wO0hlPHR0O0hlKz00KW1lKHRoaXMsSGUsSGUrMyksbWUodGhpcyxIZSsxLEhlKzIpO3JldHVybiB0aGlzfSxPLnByb3RvdHlwZS5zd2FwNjQ9ZnVuY3Rpb24oKXtjb25zdCB0'@;
put 'dD10aGlzLmxlbmd0aDtpZih0dCU4IT0wKXRocm93IG5ldyBSYW5nZUVycm9yKCJCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgNjQtYml0cyIpO2ZvcihsZXQgSGU9MDtIZTx0dDtIZSs9OCltZSh0aGlzLEhlLEhlKzcpLG1lKHRoaXMsSGUrMSxIZSs2KSxtZSh0aGlzLEhlKzIs'@;
put 'SGUrNSksbWUodGhpcyxIZSszLEhlKzQpO3JldHVybiB0aGlzfSxPLnByb3RvdHlwZS50b0xvY2FsZVN0cmluZz1PLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe2NvbnN0IHR0PXRoaXMubGVuZ3RoO3JldHVybiAwPT09dHQ/IiI6MD09PWFyZ3VtZW50cy5sZW5ndGg/Qyh0aGlzLDAs'@;
put 'dHQpOmxlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sTy5wcm90b3R5cGUuZXF1YWxzPWZ1bmN0aW9uKHR0KXtpZighTy5pc0J1ZmZlcih0dCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlciIpO3JldHVybiB0aGlzPT09dHR8fDA9PT1PLmNvbXBhcmUodGhp'@;
put 'cyx0dCl9LE8ucHJvdG90eXBlLmluc3BlY3Q9ZnVuY3Rpb24oKXtsZXQgdHQ9IiI7Y29uc3QgSGU9WC5JTlNQRUNUX01BWF9CWVRFUztyZXR1cm4gdHQ9dGhpcy50b1N0cmluZygiaGV4IiwwLEhlKS5yZXBsYWNlKC8oLnsyfSkvZywiJDEgIikudHJpbSgpLHRoaXMubGVuZ3RoPkhlJiYodHQr'@;
put 'PSIgLi4uICIpLCI8QnVmZmVyICIrdHQrIj4ifSxCJiYoTy5wcm90b3R5cGVbQl09Ty5wcm90b3R5cGUuaW5zcGVjdCksTy5wcm90b3R5cGUuY29tcGFyZT1mdW5jdGlvbih0dCxIZSx1dCxxdCxSdCl7aWYodW4odHQsVWludDhBcnJheSkmJih0dD1PLmZyb20odHQsdHQub2Zmc2V0LHR0LmJ5'@;
put 'dGVMZW5ndGgpKSwhTy5pc0J1ZmZlcih0dCkpdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlICJ0YXJnZXQiIGFyZ3VtZW50IG11c3QgYmUgb25lIG9mIHR5cGUgQnVmZmVyIG9yIFVpbnQ4QXJyYXkuIFJlY2VpdmVkIHR5cGUgJyt0eXBlb2YgdHQpO2lmKHZvaWQgMD09PUhlJiYoSGU9MCksdm9p'@;
put 'ZCAwPT09dXQmJih1dD10dD90dC5sZW5ndGg6MCksdm9pZCAwPT09cXQmJihxdD0wKSx2b2lkIDA9PT1SdCYmKFJ0PXRoaXMubGVuZ3RoKSxIZTwwfHx1dD50dC5sZW5ndGh8fHF0PDB8fFJ0PnRoaXMubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKCJvdXQgb2YgcmFuZ2UgaW5kZXgiKTtp'@;
put 'ZihxdD49UnQmJkhlPj11dClyZXR1cm4gMDtpZihxdD49UnQpcmV0dXJuLTE7aWYoSGU+PXV0KXJldHVybiAxO2lmKHRoaXM9PT10dClyZXR1cm4gMDtsZXQgUHQ9KFJ0Pj4+PTApLShxdD4+Pj0wKSxjaT0odXQ+Pj49MCktKEhlPj4+PTApO2NvbnN0IFF0PU1hdGgubWluKFB0LGNpKSxzbj10'@;
put 'aGlzLnNsaWNlKHF0LFJ0KSxSaT10dC5zbGljZShIZSx1dCk7Zm9yKGxldCBobj0wO2huPFF0OysraG4paWYoc25baG5dIT09UmlbaG5dKXtQdD1zbltobl0sY2k9UmlbaG5dO2JyZWFrfXJldHVybiBQdDxjaT8tMTpjaTxQdD8xOjB9LE8ucHJvdG90eXBlLmluY2x1ZGVzPWZ1bmN0aW9uKHR0'@;
put 'LEhlLHV0KXtyZXR1cm4tMSE9PXRoaXMuaW5kZXhPZih0dCxIZSx1dCl9LE8ucHJvdG90eXBlLmluZGV4T2Y9ZnVuY3Rpb24odHQsSGUsdXQpe3JldHVybiBfZSh0aGlzLHR0LEhlLHV0LCEwKX0sTy5wcm90b3R5cGUubGFzdEluZGV4T2Y9ZnVuY3Rpb24odHQsSGUsdXQpe3JldHVybiBfZSh0'@;
put 'aGlzLHR0LEhlLHV0LCExKX0sTy5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24odHQsSGUsdXQscXQpe2lmKHZvaWQgMD09PUhlKXF0PSJ1dGY4Iix1dD10aGlzLmxlbmd0aCxIZT0wO2Vsc2UgaWYodm9pZCAwPT09dXQmJiJzdHJpbmciPT10eXBlb2YgSGUpcXQ9SGUsdXQ9dGhpcy5sZW5ndGgs'@;
put 'SGU9MDtlbHNle2lmKCFpc0Zpbml0ZShIZSkpdGhyb3cgbmV3IEVycm9yKCJCdWZmZXIud3JpdGUoc3RyaW5nLCBlbmNvZGluZywgb2Zmc2V0WywgbGVuZ3RoXSkgaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZCIpO0hlPj4+PTAsaXNGaW5pdGUodXQpPyh1dD4+Pj0wLHZvaWQgMD09PXF0JiYocXQ9'@;
put 'InV0ZjgiKSk6KHF0PXV0LHV0PXZvaWQgMCl9Y29uc3QgUnQ9dGhpcy5sZW5ndGgtSGU7aWYoKHZvaWQgMD09PXV0fHx1dD5SdCkmJih1dD1SdCksdHQubGVuZ3RoPjAmJih1dDwwfHxIZTwwKXx8SGU+dGhpcy5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkF0dGVtcHQgdG8gd3JpdGUg'@;
put 'b3V0c2lkZSBidWZmZXIgYm91bmRzIik7cXR8fChxdD0idXRmOCIpO2xldCBQdD0hMTtmb3IoOzspc3dpdGNoKHF0KXtjYXNlImhleCI6cmV0dXJuIFNlKHRoaXMsdHQsSGUsdXQpO2Nhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6cmV0dXJuIGplKHRoaXMsdHQsSGUsdXQpO2Nhc2UiYXNjaWkiOmNh'@;
put 'c2UibGF0aW4xIjpjYXNlImJpbmFyeSI6cmV0dXJuIFYodGhpcyx0dCxIZSx1dCk7Y2FzZSJiYXNlNjQiOnJldHVybiBwKHRoaXMsdHQsSGUsdXQpO2Nhc2UidWNzMiI6Y2FzZSJ1Y3MtMiI6Y2FzZSJ1dGYxNmxlIjpjYXNlInV0Zi0xNmxlIjpyZXR1cm4gYih0aGlzLHR0LEhlLHV0KTtkZWZh'@;
put 'dWx0OmlmKFB0KXRocm93IG5ldyBUeXBlRXJyb3IoIlVua25vd24gZW5jb2Rpbmc6ICIrcXQpO3F0PSgiIitxdCkudG9Mb3dlckNhc2UoKSxQdD0hMH19LE8ucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybnt0eXBlOiJCdWZmZXIiLGRhdGE6QXJyYXkucHJvdG90eXBlLnNsaWNl'@;
put 'LmNhbGwodGhpcy5fYXJyfHx0aGlzLDApfX07Y29uc3QgVD00MDk2O2Z1bmN0aW9uIGooJGUsdHQsSGUpe2xldCB1dD0iIjtIZT1NYXRoLm1pbigkZS5sZW5ndGgsSGUpO2ZvcihsZXQgcXQ9dHQ7cXQ8SGU7KytxdCl1dCs9U3RyaW5nLmZyb21DaGFyQ29kZSgxMjcmJGVbcXRdKTtyZXR1cm4g'@;
put 'dXR9ZnVuY3Rpb24gRSgkZSx0dCxIZSl7bGV0IHV0PSIiO0hlPU1hdGgubWluKCRlLmxlbmd0aCxIZSk7Zm9yKGxldCBxdD10dDtxdDxIZTsrK3F0KXV0Kz1TdHJpbmcuZnJvbUNoYXJDb2RlKCRlW3F0XSk7cmV0dXJuIHV0fWZ1bmN0aW9uIG0oJGUsdHQsSGUpe2NvbnN0IHV0PSRlLmxlbmd0'@;
put 'aDsoIXR0fHx0dDwwKSYmKHR0PTApLCghSGV8fEhlPDB8fEhlPnV0KSYmKEhlPXV0KTtsZXQgcXQ9IiI7Zm9yKGxldCBSdD10dDtSdDxIZTsrK1J0KXF0Kz1NdFskZVtSdF1dO3JldHVybiBxdH1mdW5jdGlvbiBBKCRlLHR0LEhlKXtjb25zdCB1dD0kZS5zbGljZSh0dCxIZSk7bGV0IHF0PSIi'@;
put 'O2ZvcihsZXQgUnQ9MDtSdDx1dC5sZW5ndGgtMTtSdCs9MilxdCs9U3RyaW5nLmZyb21DaGFyQ29kZSh1dFtSdF0rMjU2KnV0W1J0KzFdKTtyZXR1cm4gcXR9ZnVuY3Rpb24gYWUoJGUsdHQsSGUpe2lmKCRlJTEhPTB8fCRlPDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoIm9mZnNldCBpcyBub3Qg'@;
put 'dWludCIpO2lmKCRlK3R0PkhlKXRocm93IG5ldyBSYW5nZUVycm9yKCJUcnlpbmcgdG8gYWNjZXNzIGJleW9uZCBidWZmZXIgbGVuZ3RoIil9ZnVuY3Rpb24gdGUoJGUsdHQsSGUsdXQscXQsUnQpe2lmKCFPLmlzQnVmZmVyKCRlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCciYnVmZmVyIiBhcmd1'@;
put 'bWVudCBtdXN0IGJlIGEgQnVmZmVyIGluc3RhbmNlJyk7aWYodHQ+cXR8fHR0PFJ0KXRocm93IG5ldyBSYW5nZUVycm9yKCcidmFsdWUiIGFyZ3VtZW50IGlzIG91dCBvZiBib3VuZHMnKTtpZihIZSt1dD4kZS5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkluZGV4IG91dCBvZiByYW5n'@;
put 'ZSIpfWZ1bmN0aW9uIHNlKCRlLHR0LEhlLHV0LHF0KXtEZSh0dCx1dCxxdCwkZSxIZSw3KTtsZXQgUnQ9TnVtYmVyKHR0JkJpZ0ludCg0Mjk0OTY3Mjk1KSk7JGVbSGUrK109UnQsUnQ+Pj04LCRlW0hlKytdPVJ0LFJ0Pj49OCwkZVtIZSsrXT1SdCxSdD4+PTgsJGVbSGUrK109UnQ7bGV0IFB0'@;
put 'PU51bWJlcih0dD4+QmlnSW50KDMyKSZCaWdJbnQoNDI5NDk2NzI5NSkpO3JldHVybiAkZVtIZSsrXT1QdCxQdD4+PTgsJGVbSGUrK109UHQsUHQ+Pj04LCRlW0hlKytdPVB0LFB0Pj49OCwkZVtIZSsrXT1QdCxIZX1mdW5jdGlvbiB3ZSgkZSx0dCxIZSx1dCxxdCl7RGUodHQsdXQscXQsJGUs'@;
put 'SGUsNyk7bGV0IFJ0PU51bWJlcih0dCZCaWdJbnQoNDI5NDk2NzI5NSkpOyRlW0hlKzddPVJ0LFJ0Pj49OCwkZVtIZSs2XT1SdCxSdD4+PTgsJGVbSGUrNV09UnQsUnQ+Pj04LCRlW0hlKzRdPVJ0O2xldCBQdD1OdW1iZXIodHQ+PkJpZ0ludCgzMikmQmlnSW50KDQyOTQ5NjcyOTUpKTtyZXR1'@;
put 'cm4gJGVbSGUrM109UHQsUHQ+Pj04LCRlW0hlKzJdPVB0LFB0Pj49OCwkZVtIZSsxXT1QdCxQdD4+PTgsJGVbSGVdPVB0LEhlKzh9ZnVuY3Rpb24gVWUoJGUsdHQsSGUsdXQscXQsUnQpe2lmKEhlK3V0PiRlLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW5kZXggb3V0IG9mIHJhbmdl'@;
put 'Iik7aWYoSGU8MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW5kZXggb3V0IG9mIHJhbmdlIil9ZnVuY3Rpb24gSmUoJGUsdHQsSGUsdXQscXQpe3JldHVybiB0dD0rdHQsSGU+Pj49MCxxdHx8VWUoJGUsMCxIZSw0KSxnLndyaXRlKCRlLHR0LEhlLHV0LDIzLDQpLEhlKzR9ZnVuY3Rpb24gb3Qo'@;
put 'JGUsdHQsSGUsdXQscXQpe3JldHVybiB0dD0rdHQsSGU+Pj49MCxxdHx8VWUoJGUsMCxIZSw4KSxnLndyaXRlKCRlLHR0LEhlLHV0LDUyLDgpLEhlKzh9Ty5wcm90b3R5cGUuc2xpY2U9ZnVuY3Rpb24odHQsSGUpe2NvbnN0IHV0PXRoaXMubGVuZ3RoOyh0dD1+fnR0KTwwPyh0dCs9dXQpPDAm'@;
put 'Jih0dD0wKTp0dD51dCYmKHR0PXV0KSwoSGU9dm9pZCAwPT09SGU/dXQ6fn5IZSk8MD8oSGUrPXV0KTwwJiYoSGU9MCk6SGU+dXQmJihIZT11dCksSGU8dHQmJihIZT10dCk7Y29uc3QgcXQ9dGhpcy5zdWJhcnJheSh0dCxIZSk7cmV0dXJuIE9iamVjdC5zZXRQcm90b3R5cGVPZihxdCxPLnBy'@;
put 'b3RvdHlwZSkscXR9LE8ucHJvdG90eXBlLnJlYWRVaW50TEU9Ty5wcm90b3R5cGUucmVhZFVJbnRMRT1mdW5jdGlvbih0dCxIZSx1dCl7dHQ+Pj49MCxIZT4+Pj0wLHV0fHxhZSh0dCxIZSx0aGlzLmxlbmd0aCk7bGV0IHF0PXRoaXNbdHRdLFJ0PTEsUHQ9MDtmb3IoOysrUHQ8SGUmJihSdCo9'@;
put 'MjU2KTspcXQrPXRoaXNbdHQrUHRdKlJ0O3JldHVybiBxdH0sTy5wcm90b3R5cGUucmVhZFVpbnRCRT1PLnByb3RvdHlwZS5yZWFkVUludEJFPWZ1bmN0aW9uKHR0LEhlLHV0KXt0dD4+Pj0wLEhlPj4+PTAsdXR8fGFlKHR0LEhlLHRoaXMubGVuZ3RoKTtsZXQgcXQ9dGhpc1t0dCstLUhlXSxS'@;
put 'dD0xO2Zvcig7SGU+MCYmKFJ0Kj0yNTYpOylxdCs9dGhpc1t0dCstLUhlXSpSdDtyZXR1cm4gcXR9LE8ucHJvdG90eXBlLnJlYWRVaW50OD1PLnByb3RvdHlwZS5yZWFkVUludDg9ZnVuY3Rpb24odHQsSGUpe3JldHVybiB0dD4+Pj0wLEhlfHxhZSh0dCwxLHRoaXMubGVuZ3RoKSx0aGlzW3R0'@;
put 'XX0sTy5wcm90b3R5cGUucmVhZFVpbnQxNkxFPU8ucHJvdG90eXBlLnJlYWRVSW50MTZMRT1mdW5jdGlvbih0dCxIZSl7cmV0dXJuIHR0Pj4+PTAsSGV8fGFlKHR0LDIsdGhpcy5sZW5ndGgpLHRoaXNbdHRdfHRoaXNbdHQrMV08PDh9LE8ucHJvdG90eXBlLnJlYWRVaW50MTZCRT1PLnByb3Rv'@;
put 'dHlwZS5yZWFkVUludDE2QkU9ZnVuY3Rpb24odHQsSGUpe3JldHVybiB0dD4+Pj0wLEhlfHxhZSh0dCwyLHRoaXMubGVuZ3RoKSx0aGlzW3R0XTw8OHx0aGlzW3R0KzFdfSxPLnByb3RvdHlwZS5yZWFkVWludDMyTEU9Ty5wcm90b3R5cGUucmVhZFVJbnQzMkxFPWZ1bmN0aW9uKHR0LEhlKXty'@;
put 'ZXR1cm4gdHQ+Pj49MCxIZXx8YWUodHQsNCx0aGlzLmxlbmd0aCksKHRoaXNbdHRdfHRoaXNbdHQrMV08PDh8dGhpc1t0dCsyXTw8MTYpKzE2Nzc3MjE2KnRoaXNbdHQrM119LE8ucHJvdG90eXBlLnJlYWRVaW50MzJCRT1PLnByb3RvdHlwZS5yZWFkVUludDMyQkU9ZnVuY3Rpb24odHQsSGUp'@;
put 'e3JldHVybiB0dD4+Pj0wLEhlfHxhZSh0dCw0LHRoaXMubGVuZ3RoKSwxNjc3NzIxNip0aGlzW3R0XSsodGhpc1t0dCsxXTw8MTZ8dGhpc1t0dCsyXTw8OHx0aGlzW3R0KzNdKX0sTy5wcm90b3R5cGUucmVhZEJpZ1VJbnQ2NExFPUR0KGZ1bmN0aW9uKHR0KXtGZSh0dD4+Pj0wLCJvZmZzZXQi'@;
put 'KTtjb25zdCBIZT10aGlzW3R0XSx1dD10aGlzW3R0KzddOyh2b2lkIDA9PT1IZXx8dm9pZCAwPT09dXQpJiZPZSh0dCx0aGlzLmxlbmd0aC04KTtjb25zdCBxdD1IZSsyNTYqdGhpc1srK3R0XSs2NTUzNip0aGlzWysrdHRdK3RoaXNbKyt0dF0qMioqMjQsUnQ9dGhpc1srK3R0XSsyNTYqdGhp'@;
put 'c1srK3R0XSs2NTUzNip0aGlzWysrdHRdK3V0KjIqKjI0O3JldHVybiBCaWdJbnQocXQpKyhCaWdJbnQoUnQpPDxCaWdJbnQoMzIpKX0pLE8ucHJvdG90eXBlLnJlYWRCaWdVSW50NjRCRT1EdChmdW5jdGlvbih0dCl7RmUodHQ+Pj49MCwib2Zmc2V0Iik7Y29uc3QgSGU9dGhpc1t0dF0sdXQ9'@;
put 'dGhpc1t0dCs3XTsodm9pZCAwPT09SGV8fHZvaWQgMD09PXV0KSYmT2UodHQsdGhpcy5sZW5ndGgtOCk7Y29uc3QgcXQ9SGUqMioqMjQrNjU1MzYqdGhpc1srK3R0XSsyNTYqdGhpc1srK3R0XSt0aGlzWysrdHRdLFJ0PXRoaXNbKyt0dF0qMioqMjQrNjU1MzYqdGhpc1srK3R0XSsyNTYqdGhp'@;
put 'c1srK3R0XSt1dDtyZXR1cm4oQmlnSW50KHF0KTw8QmlnSW50KDMyKSkrQmlnSW50KFJ0KX0pLE8ucHJvdG90eXBlLnJlYWRJbnRMRT1mdW5jdGlvbih0dCxIZSx1dCl7dHQ+Pj49MCxIZT4+Pj0wLHV0fHxhZSh0dCxIZSx0aGlzLmxlbmd0aCk7bGV0IHF0PXRoaXNbdHRdLFJ0PTEsUHQ9MDtm'@;
put 'b3IoOysrUHQ8SGUmJihSdCo9MjU2KTspcXQrPXRoaXNbdHQrUHRdKlJ0O3JldHVybiBSdCo9MTI4LHF0Pj1SdCYmKHF0LT1NYXRoLnBvdygyLDgqSGUpKSxxdH0sTy5wcm90b3R5cGUucmVhZEludEJFPWZ1bmN0aW9uKHR0LEhlLHV0KXt0dD4+Pj0wLEhlPj4+PTAsdXR8fGFlKHR0LEhlLHRo'@;
put 'aXMubGVuZ3RoKTtsZXQgcXQ9SGUsUnQ9MSxQdD10aGlzW3R0Ky0tcXRdO2Zvcig7cXQ+MCYmKFJ0Kj0yNTYpOylQdCs9dGhpc1t0dCstLXF0XSpSdDtyZXR1cm4gUnQqPTEyOCxQdD49UnQmJihQdC09TWF0aC5wb3coMiw4KkhlKSksUHR9LE8ucHJvdG90eXBlLnJlYWRJbnQ4PWZ1bmN0aW9u'@;
put 'KHR0LEhlKXtyZXR1cm4gdHQ+Pj49MCxIZXx8YWUodHQsMSx0aGlzLmxlbmd0aCksMTI4JnRoaXNbdHRdPy0xKigyNTUtdGhpc1t0dF0rMSk6dGhpc1t0dF19LE8ucHJvdG90eXBlLnJlYWRJbnQxNkxFPWZ1bmN0aW9uKHR0LEhlKXt0dD4+Pj0wLEhlfHxhZSh0dCwyLHRoaXMubGVuZ3RoKTtj'@;
put 'b25zdCB1dD10aGlzW3R0XXx0aGlzW3R0KzFdPDw4O3JldHVybiAzMjc2OCZ1dD80Mjk0OTAxNzYwfHV0OnV0fSxPLnByb3RvdHlwZS5yZWFkSW50MTZCRT1mdW5jdGlvbih0dCxIZSl7dHQ+Pj49MCxIZXx8YWUodHQsMix0aGlzLmxlbmd0aCk7Y29uc3QgdXQ9dGhpc1t0dCsxXXx0aGlzW3R0'@;
put 'XTw8ODtyZXR1cm4gMzI3NjgmdXQ/NDI5NDkwMTc2MHx1dDp1dH0sTy5wcm90b3R5cGUucmVhZEludDMyTEU9ZnVuY3Rpb24odHQsSGUpe3JldHVybiB0dD4+Pj0wLEhlfHxhZSh0dCw0LHRoaXMubGVuZ3RoKSx0aGlzW3R0XXx0aGlzW3R0KzFdPDw4fHRoaXNbdHQrMl08PDE2fHRoaXNbdHQr'@;
put 'M108PDI0fSxPLnByb3RvdHlwZS5yZWFkSW50MzJCRT1mdW5jdGlvbih0dCxIZSl7cmV0dXJuIHR0Pj4+PTAsSGV8fGFlKHR0LDQsdGhpcy5sZW5ndGgpLHRoaXNbdHRdPDwyNHx0aGlzW3R0KzFdPDwxNnx0aGlzW3R0KzJdPDw4fHRoaXNbdHQrM119LE8ucHJvdG90eXBlLnJlYWRCaWdJbnQ2'@;
put 'NExFPUR0KGZ1bmN0aW9uKHR0KXtGZSh0dD4+Pj0wLCJvZmZzZXQiKTtjb25zdCBIZT10aGlzW3R0XSx1dD10aGlzW3R0KzddO3JldHVybih2b2lkIDA9PT1IZXx8dm9pZCAwPT09dXQpJiZPZSh0dCx0aGlzLmxlbmd0aC04KSwoQmlnSW50KHRoaXNbdHQrNF0rMjU2KnRoaXNbdHQrNV0rNjU1'@;
put 'MzYqdGhpc1t0dCs2XSsodXQ8PDI0KSk8PEJpZ0ludCgzMikpK0JpZ0ludChIZSsyNTYqdGhpc1srK3R0XSs2NTUzNip0aGlzWysrdHRdKzE2Nzc3MjE2KnRoaXNbKyt0dF0pfSksTy5wcm90b3R5cGUucmVhZEJpZ0ludDY0QkU9RHQoZnVuY3Rpb24odHQpe0ZlKHR0Pj4+PTAsIm9mZnNldCIp'@;
put 'O2NvbnN0IEhlPXRoaXNbdHRdLHV0PXRoaXNbdHQrN107KHZvaWQgMD09PUhlfHx2b2lkIDA9PT11dCkmJk9lKHR0LHRoaXMubGVuZ3RoLTgpO2NvbnN0IHF0PShIZTw8MjQpKzY1NTM2KnRoaXNbKyt0dF0rMjU2KnRoaXNbKyt0dF0rdGhpc1srK3R0XTtyZXR1cm4oQmlnSW50KHF0KTw8Qmln'@;
put 'SW50KDMyKSkrQmlnSW50KDE2Nzc3MjE2KnRoaXNbKyt0dF0rNjU1MzYqdGhpc1srK3R0XSsyNTYqdGhpc1srK3R0XSt1dCl9KSxPLnByb3RvdHlwZS5yZWFkRmxvYXRMRT1mdW5jdGlvbih0dCxIZSl7cmV0dXJuIHR0Pj4+PTAsSGV8fGFlKHR0LDQsdGhpcy5sZW5ndGgpLGcucmVhZCh0aGlz'@;
put 'LHR0LCEwLDIzLDQpfSxPLnByb3RvdHlwZS5yZWFkRmxvYXRCRT1mdW5jdGlvbih0dCxIZSl7cmV0dXJuIHR0Pj4+PTAsSGV8fGFlKHR0LDQsdGhpcy5sZW5ndGgpLGcucmVhZCh0aGlzLHR0LCExLDIzLDQpfSxPLnByb3RvdHlwZS5yZWFkRG91YmxlTEU9ZnVuY3Rpb24odHQsSGUpe3JldHVy'@;
put 'biB0dD4+Pj0wLEhlfHxhZSh0dCw4LHRoaXMubGVuZ3RoKSxnLnJlYWQodGhpcyx0dCwhMCw1Miw4KX0sTy5wcm90b3R5cGUucmVhZERvdWJsZUJFPWZ1bmN0aW9uKHR0LEhlKXtyZXR1cm4gdHQ+Pj49MCxIZXx8YWUodHQsOCx0aGlzLmxlbmd0aCksZy5yZWFkKHRoaXMsdHQsITEsNTIsOCl9'@;
put 'LE8ucHJvdG90eXBlLndyaXRlVWludExFPU8ucHJvdG90eXBlLndyaXRlVUludExFPWZ1bmN0aW9uKHR0LEhlLHV0LHF0KXt0dD0rdHQsSGU+Pj49MCx1dD4+Pj0wLHF0fHx0ZSh0aGlzLHR0LEhlLHV0LE1hdGgucG93KDIsOCp1dCktMSwwKTtsZXQgUnQ9MSxQdD0wO2Zvcih0aGlzW0hlXT0y'@;
put 'NTUmdHQ7KytQdDx1dCYmKFJ0Kj0yNTYpOyl0aGlzW0hlK1B0XT10dC9SdCYyNTU7cmV0dXJuIEhlK3V0fSxPLnByb3RvdHlwZS53cml0ZVVpbnRCRT1PLnByb3RvdHlwZS53cml0ZVVJbnRCRT1mdW5jdGlvbih0dCxIZSx1dCxxdCl7dHQ9K3R0LEhlPj4+PTAsdXQ+Pj49MCxxdHx8dGUodGhp'@;
put 'cyx0dCxIZSx1dCxNYXRoLnBvdygyLDgqdXQpLTEsMCk7bGV0IFJ0PXV0LTEsUHQ9MTtmb3IodGhpc1tIZStSdF09MjU1JnR0Oy0tUnQ+PTAmJihQdCo9MjU2KTspdGhpc1tIZStSdF09dHQvUHQmMjU1O3JldHVybiBIZSt1dH0sTy5wcm90b3R5cGUud3JpdGVVaW50OD1PLnByb3RvdHlwZS53'@;
put 'cml0ZVVJbnQ4PWZ1bmN0aW9uKHR0LEhlLHV0KXtyZXR1cm4gdHQ9K3R0LEhlPj4+PTAsdXR8fHRlKHRoaXMsdHQsSGUsMSwyNTUsMCksdGhpc1tIZV09MjU1JnR0LEhlKzF9LE8ucHJvdG90eXBlLndyaXRlVWludDE2TEU9Ty5wcm90b3R5cGUud3JpdGVVSW50MTZMRT1mdW5jdGlvbih0dCxI'@;
put 'ZSx1dCl7cmV0dXJuIHR0PSt0dCxIZT4+Pj0wLHV0fHx0ZSh0aGlzLHR0LEhlLDIsNjU1MzUsMCksdGhpc1tIZV09MjU1JnR0LHRoaXNbSGUrMV09dHQ+Pj44LEhlKzJ9LE8ucHJvdG90eXBlLndyaXRlVWludDE2QkU9Ty5wcm90b3R5cGUud3JpdGVVSW50MTZCRT1mdW5jdGlvbih0dCxIZSx1'@;
put 'dCl7cmV0dXJuIHR0PSt0dCxIZT4+Pj0wLHV0fHx0ZSh0aGlzLHR0LEhlLDIsNjU1MzUsMCksdGhpc1tIZV09dHQ+Pj44LHRoaXNbSGUrMV09MjU1JnR0LEhlKzJ9LE8ucHJvdG90eXBlLndyaXRlVWludDMyTEU9Ty5wcm90b3R5cGUud3JpdGVVSW50MzJMRT1mdW5jdGlvbih0dCxIZSx1dCl7'@;
put 'cmV0dXJuIHR0PSt0dCxIZT4+Pj0wLHV0fHx0ZSh0aGlzLHR0LEhlLDQsNDI5NDk2NzI5NSwwKSx0aGlzW0hlKzNdPXR0Pj4+MjQsdGhpc1tIZSsyXT10dD4+PjE2LHRoaXNbSGUrMV09dHQ+Pj44LHRoaXNbSGVdPTI1NSZ0dCxIZSs0fSxPLnByb3RvdHlwZS53cml0ZVVpbnQzMkJFPU8ucHJv'@;
put 'dG90eXBlLndyaXRlVUludDMyQkU9ZnVuY3Rpb24odHQsSGUsdXQpe3JldHVybiB0dD0rdHQsSGU+Pj49MCx1dHx8dGUodGhpcyx0dCxIZSw0LDQyOTQ5NjcyOTUsMCksdGhpc1tIZV09dHQ+Pj4yNCx0aGlzW0hlKzFdPXR0Pj4+MTYsdGhpc1tIZSsyXT10dD4+PjgsdGhpc1tIZSszXT0yNTUm'@;
put 'dHQsSGUrNH0sTy5wcm90b3R5cGUud3JpdGVCaWdVSW50NjRMRT1EdChmdW5jdGlvbih0dCxIZT0wKXtyZXR1cm4gc2UodGhpcyx0dCxIZSxCaWdJbnQoMCksQmlnSW50KCIweGZmZmZmZmZmZmZmZmZmZmYiKSl9KSxPLnByb3RvdHlwZS53cml0ZUJpZ1VJbnQ2NEJFPUR0KGZ1bmN0aW9uKHR0'@;
put 'LEhlPTApe3JldHVybiB3ZSh0aGlzLHR0LEhlLEJpZ0ludCgwKSxCaWdJbnQoIjB4ZmZmZmZmZmZmZmZmZmZmZiIpKX0pLE8ucHJvdG90eXBlLndyaXRlSW50TEU9ZnVuY3Rpb24odHQsSGUsdXQscXQpe2lmKHR0PSt0dCxIZT4+Pj0wLCFxdCl7Y29uc3QgUXQ9TWF0aC5wb3coMiw4KnV0LTEp'@;
put 'O3RlKHRoaXMsdHQsSGUsdXQsUXQtMSwtUXQpfWxldCBSdD0wLFB0PTEsY2k9MDtmb3IodGhpc1tIZV09MjU1JnR0OysrUnQ8dXQmJihQdCo9MjU2KTspdHQ8MCYmMD09PWNpJiYwIT09dGhpc1tIZStSdC0xXSYmKGNpPTEpLHRoaXNbSGUrUnRdPSh0dC9QdHwwKS1jaSYyNTU7cmV0dXJuIEhl'@;
put 'K3V0fSxPLnByb3RvdHlwZS53cml0ZUludEJFPWZ1bmN0aW9uKHR0LEhlLHV0LHF0KXtpZih0dD0rdHQsSGU+Pj49MCwhcXQpe2NvbnN0IFF0PU1hdGgucG93KDIsOCp1dC0xKTt0ZSh0aGlzLHR0LEhlLHV0LFF0LTEsLVF0KX1sZXQgUnQ9dXQtMSxQdD0xLGNpPTA7Zm9yKHRoaXNbSGUrUnRd'@;
put 'PTI1NSZ0dDstLVJ0Pj0wJiYoUHQqPTI1Nik7KXR0PDAmJjA9PT1jaSYmMCE9PXRoaXNbSGUrUnQrMV0mJihjaT0xKSx0aGlzW0hlK1J0XT0odHQvUHR8MCktY2kmMjU1O3JldHVybiBIZSt1dH0sTy5wcm90b3R5cGUud3JpdGVJbnQ4PWZ1bmN0aW9uKHR0LEhlLHV0KXtyZXR1cm4gdHQ9K3R0'@;
put 'LEhlPj4+PTAsdXR8fHRlKHRoaXMsdHQsSGUsMSwxMjcsLTEyOCksdHQ8MCYmKHR0PTI1NSt0dCsxKSx0aGlzW0hlXT0yNTUmdHQsSGUrMX0sTy5wcm90b3R5cGUud3JpdGVJbnQxNkxFPWZ1bmN0aW9uKHR0LEhlLHV0KXtyZXR1cm4gdHQ9K3R0LEhlPj4+PTAsdXR8fHRlKHRoaXMsdHQsSGUs'@;
put 'MiwzMjc2NywtMzI3NjgpLHRoaXNbSGVdPTI1NSZ0dCx0aGlzW0hlKzFdPXR0Pj4+OCxIZSsyfSxPLnByb3RvdHlwZS53cml0ZUludDE2QkU9ZnVuY3Rpb24odHQsSGUsdXQpe3JldHVybiB0dD0rdHQsSGU+Pj49MCx1dHx8dGUodGhpcyx0dCxIZSwyLDMyNzY3LC0zMjc2OCksdGhpc1tIZV09'@;
put 'dHQ+Pj44LHRoaXNbSGUrMV09MjU1JnR0LEhlKzJ9LE8ucHJvdG90eXBlLndyaXRlSW50MzJMRT1mdW5jdGlvbih0dCxIZSx1dCl7cmV0dXJuIHR0PSt0dCxIZT4+Pj0wLHV0fHx0ZSh0aGlzLHR0LEhlLDQsMjE0NzQ4MzY0NywtMjE0NzQ4MzY0OCksdGhpc1tIZV09MjU1JnR0LHRoaXNbSGUr'@;
put 'MV09dHQ+Pj44LHRoaXNbSGUrMl09dHQ+Pj4xNix0aGlzW0hlKzNdPXR0Pj4+MjQsSGUrNH0sTy5wcm90b3R5cGUud3JpdGVJbnQzMkJFPWZ1bmN0aW9uKHR0LEhlLHV0KXtyZXR1cm4gdHQ9K3R0LEhlPj4+PTAsdXR8fHRlKHRoaXMsdHQsSGUsNCwyMTQ3NDgzNjQ3LC0yMTQ3NDgzNjQ4KSx0'@;
put 'dDwwJiYodHQ9NDI5NDk2NzI5NSt0dCsxKSx0aGlzW0hlXT10dD4+PjI0LHRoaXNbSGUrMV09dHQ+Pj4xNix0aGlzW0hlKzJdPXR0Pj4+OCx0aGlzW0hlKzNdPTI1NSZ0dCxIZSs0fSxPLnByb3RvdHlwZS53cml0ZUJpZ0ludDY0TEU9RHQoZnVuY3Rpb24odHQsSGU9MCl7cmV0dXJuIHNlKHRo'@;
put 'aXMsdHQsSGUsLUJpZ0ludCgiMHg4MDAwMDAwMDAwMDAwMDAwIiksQmlnSW50KCIweDdmZmZmZmZmZmZmZmZmZmYiKSl9KSxPLnByb3RvdHlwZS53cml0ZUJpZ0ludDY0QkU9RHQoZnVuY3Rpb24odHQsSGU9MCl7cmV0dXJuIHdlKHRoaXMsdHQsSGUsLUJpZ0ludCgiMHg4MDAwMDAwMDAwMDAw'@;
put 'MDAwIiksQmlnSW50KCIweDdmZmZmZmZmZmZmZmZmZmYiKSl9KSxPLnByb3RvdHlwZS53cml0ZUZsb2F0TEU9ZnVuY3Rpb24odHQsSGUsdXQpe3JldHVybiBKZSh0aGlzLHR0LEhlLCEwLHV0KX0sTy5wcm90b3R5cGUud3JpdGVGbG9hdEJFPWZ1bmN0aW9uKHR0LEhlLHV0KXtyZXR1cm4gSmUo'@;
put 'dGhpcyx0dCxIZSwhMSx1dCl9LE8ucHJvdG90eXBlLndyaXRlRG91YmxlTEU9ZnVuY3Rpb24odHQsSGUsdXQpe3JldHVybiBvdCh0aGlzLHR0LEhlLCEwLHV0KX0sTy5wcm90b3R5cGUud3JpdGVEb3VibGVCRT1mdW5jdGlvbih0dCxIZSx1dCl7cmV0dXJuIG90KHRoaXMsdHQsSGUsITEsdXQp'@;
put 'fSxPLnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKHR0LEhlLHV0LHF0KXtpZighTy5pc0J1ZmZlcih0dCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXJndW1lbnQgc2hvdWxkIGJlIGEgQnVmZmVyIik7aWYodXR8fCh1dD0wKSwhcXQmJjAhPT1xdCYmKHF0PXRoaXMubGVuZ3RoKSxIZT49dHQubGVu'@;
put 'Z3RoJiYoSGU9dHQubGVuZ3RoKSxIZXx8KEhlPTApLHF0PjAmJnF0PHV0JiYocXQ9dXQpLHF0PT09dXR8fDA9PT10dC5sZW5ndGh8fDA9PT10aGlzLmxlbmd0aClyZXR1cm4gMDtpZihIZTwwKXRocm93IG5ldyBSYW5nZUVycm9yKCJ0YXJnZXRTdGFydCBvdXQgb2YgYm91bmRzIik7aWYodXQ8'@;
put 'MHx8dXQ+PXRoaXMubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKCJJbmRleCBvdXQgb2YgcmFuZ2UiKTtpZihxdDwwKXRocm93IG5ldyBSYW5nZUVycm9yKCJzb3VyY2VFbmQgb3V0IG9mIGJvdW5kcyIpO3F0PnRoaXMubGVuZ3RoJiYocXQ9dGhpcy5sZW5ndGgpLHR0Lmxlbmd0aC1IZTxx'@;
put 'dC11dCYmKHF0PXR0Lmxlbmd0aC1IZSt1dCk7Y29uc3QgUnQ9cXQtdXQ7cmV0dXJuIHRoaXM9PT10dCYmImZ1bmN0aW9uIj09dHlwZW9mIFVpbnQ4QXJyYXkucHJvdG90eXBlLmNvcHlXaXRoaW4/dGhpcy5jb3B5V2l0aGluKEhlLHV0LHF0KTpVaW50OEFycmF5LnByb3RvdHlwZS5zZXQuY2Fs'@;
put 'bCh0dCx0aGlzLnN1YmFycmF5KHV0LHF0KSxIZSksUnR9LE8ucHJvdG90eXBlLmZpbGw9ZnVuY3Rpb24odHQsSGUsdXQscXQpe2lmKCJzdHJpbmciPT10eXBlb2YgdHQpe2lmKCJzdHJpbmciPT10eXBlb2YgSGU/KHF0PUhlLEhlPTAsdXQ9dGhpcy5sZW5ndGgpOiJzdHJpbmciPT10eXBlb2Yg'@;
put 'dXQmJihxdD11dCx1dD10aGlzLmxlbmd0aCksdm9pZCAwIT09cXQmJiJzdHJpbmciIT10eXBlb2YgcXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiZW5jb2RpbmcgbXVzdCBiZSBhIHN0cmluZyIpO2lmKCJzdHJpbmciPT10eXBlb2YgcXQmJiFPLmlzRW5jb2RpbmcocXQpKXRocm93IG5ldyBUeXBl'@;
put 'RXJyb3IoIlVua25vd24gZW5jb2Rpbmc6ICIrcXQpO2lmKDE9PT10dC5sZW5ndGgpe2NvbnN0IFB0PXR0LmNoYXJDb2RlQXQoMCk7KCJ1dGY4Ij09PXF0JiZQdDwxMjh8fCJsYXRpbjEiPT09cXQpJiYodHQ9UHQpfX1lbHNlIm51bWJlciI9PXR5cGVvZiB0dD90dCY9MjU1OiJib29sZWFuIj09'@;
put 'dHlwZW9mIHR0JiYodHQ9TnVtYmVyKHR0KSk7aWYoSGU8MHx8dGhpcy5sZW5ndGg8SGV8fHRoaXMubGVuZ3RoPHV0KXRocm93IG5ldyBSYW5nZUVycm9yKCJPdXQgb2YgcmFuZ2UgaW5kZXgiKTtpZih1dDw9SGUpcmV0dXJuIHRoaXM7bGV0IFJ0O2lmKEhlPj4+PTAsdXQ9dm9pZCAwPT09dXQ/'@;
put 'dGhpcy5sZW5ndGg6dXQ+Pj4wLHR0fHwodHQ9MCksIm51bWJlciI9PXR5cGVvZiB0dClmb3IoUnQ9SGU7UnQ8dXQ7KytSdCl0aGlzW1J0XT10dDtlbHNle2NvbnN0IFB0PU8uaXNCdWZmZXIodHQpP3R0Ok8uZnJvbSh0dCxxdCksY2k9UHQubGVuZ3RoO2lmKDA9PT1jaSl0aHJvdyBuZXcgVHlw'@;
put 'ZUVycm9yKCdUaGUgdmFsdWUgIicrdHQrJyIgaXMgaW52YWxpZCBmb3IgYXJndW1lbnQgInZhbHVlIicpO2ZvcihSdD0wO1J0PHV0LUhlOysrUnQpdGhpc1tSdCtIZV09UHRbUnQlY2ldfXJldHVybiB0aGlzfTtjb25zdCB4ZT17fTtmdW5jdGlvbiB2ZSgkZSx0dCxIZSl7eGVbJGVdPWNsYXNz'@;
put 'IGV4dGVuZHMgSGV7Y29uc3RydWN0b3IoKXtzdXBlcigpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJtZXNzYWdlIix7dmFsdWU6dHQuYXBwbHkodGhpcyxhcmd1bWVudHMpLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHRoaXMubmFtZT1gJHt0aGlzLm5hbWV9IFskeyRlfV1g'@;
put 'LGRlbGV0ZSB0aGlzLm5hbWV9Z2V0IGNvZGUoKXtyZXR1cm4gJGV9c2V0IGNvZGUocXQpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJjb2RlIix7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsdmFsdWU6cXQsd3JpdGFibGU6ITB9KX10b1N0cmluZygpe3JldHVybmAke3RoaXMu'@;
put 'bmFtZX0gWyR7JGV9XTogJHt0aGlzLm1lc3NhZ2V9YH19fWZ1bmN0aW9uIFhlKCRlKXtsZXQgdHQ9IiIsSGU9JGUubGVuZ3RoO2NvbnN0IHV0PSItIj09PSRlWzBdPzE6MDtmb3IoO0hlPj11dCs0O0hlLT0zKXR0PWBfJHskZS5zbGljZShIZS0zLEhlKX0ke3R0fWA7cmV0dXJuYCR7JGUuc2xp'@;
put 'Y2UoMCxIZSl9JHt0dH1gfWZ1bmN0aW9uIERlKCRlLHR0LEhlLHV0LHF0LFJ0KXtpZigkZT5IZXx8JGU8dHQpe2NvbnN0IFB0PSJiaWdpbnQiPT10eXBlb2YgdHQ/Im4iOiIiO2xldCBjaTt0aHJvdyBjaT1SdD4zPzA9PT10dHx8dHQ9PT1CaWdJbnQoMCk/YD49IDAke1B0fSBhbmQgPCAyJHtQ'@;
put 'dH0gKiogJHs4KihSdCsxKX0ke1B0fWA6YD49IC0oMiR7UHR9ICoqICR7OCooUnQrMSktMX0ke1B0fSkgYW5kIDwgMiAqKiAkezgqKFJ0KzEpLTF9JHtQdH1gOmA+PSAke3R0fSR7UHR9IGFuZCA8PSAke0hlfSR7UHR9YCxuZXcgeGUuRVJSX09VVF9PRl9SQU5HRSgidmFsdWUiLGNpLCRlKX0h'@;
put 'ZnVuY3Rpb24gemUoJGUsdHQsSGUpe0ZlKHR0LCJvZmZzZXQiKSwodm9pZCAwPT09JGVbdHRdfHx2b2lkIDA9PT0kZVt0dCtIZV0pJiZPZSh0dCwkZS5sZW5ndGgtKEhlKzEpKX0odXQscXQsUnQpfWZ1bmN0aW9uIEZlKCRlLHR0KXtpZigibnVtYmVyIiE9dHlwZW9mICRlKXRocm93IG5ldyB4'@;
put 'ZS5FUlJfSU5WQUxJRF9BUkdfVFlQRSh0dCwibnVtYmVyIiwkZSl9ZnVuY3Rpb24gT2UoJGUsdHQsSGUpe3Rocm93IE1hdGguZmxvb3IoJGUpIT09JGU/KEZlKCRlLEhlKSxuZXcgeGUuRVJSX09VVF9PRl9SQU5HRShIZXx8Im9mZnNldCIsImFuIGludGVnZXIiLCRlKSk6dHQ8MD9uZXcgeGUu'@;
put 'RVJSX0JVRkZFUl9PVVRfT0ZfQk9VTkRTOm5ldyB4ZS5FUlJfT1VUX09GX1JBTkdFKEhlfHwib2Zmc2V0IixgPj0gJHtIZT8xOjB9IGFuZCA8PSAke3R0fWAsJGUpfXZlKCJFUlJfQlVGRkVSX09VVF9PRl9CT1VORFMiLGZ1bmN0aW9uKCRlKXtyZXR1cm4gJGU/YCR7JGV9IGlzIG91dHNpZGUg'@;
put 'b2YgYnVmZmVyIGJvdW5kc2A6IkF0dGVtcHQgdG8gYWNjZXNzIG1lbW9yeSBvdXRzaWRlIGJ1ZmZlciBib3VuZHMifSxSYW5nZUVycm9yKSx2ZSgiRVJSX0lOVkFMSURfQVJHX1RZUEUiLGZ1bmN0aW9uKCRlLHR0KXtyZXR1cm5gVGhlICIkeyRlfSIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBl'@;
put 'IG51bWJlci4gUmVjZWl2ZWQgdHlwZSAke3R5cGVvZiB0dH1gfSxUeXBlRXJyb3IpLHZlKCJFUlJfT1VUX09GX1JBTkdFIixmdW5jdGlvbigkZSx0dCxIZSl7bGV0IHV0PWBUaGUgdmFsdWUgb2YgIiR7JGV9IiBpcyBvdXQgb2YgcmFuZ2UuYCxxdD1IZTtyZXR1cm4gTnVtYmVyLmlzSW50ZWdl'@;
put 'cihIZSkmJk1hdGguYWJzKEhlKT40Mjk0OTY3Mjk2P3F0PVhlKFN0cmluZyhIZSkpOiJiaWdpbnQiPT10eXBlb2YgSGUmJihxdD1TdHJpbmcoSGUpLChIZT5CaWdJbnQoMikqKkJpZ0ludCgzMil8fEhlPC0oQmlnSW50KDIpKipCaWdJbnQoMzIpKSkmJihxdD1YZShxdCkpLHF0Kz0ibiIpLHV0'@;
put 'Kz1gIEl0IG11c3QgYmUgJHt0dH0uIFJlY2VpdmVkICR7cXR9YCx1dH0sUmFuZ2VFcnJvcik7Y29uc3QgSWU9L1teKy8wLTlBLVphLXotX10vZztmdW5jdGlvbiBrZSgkZSx0dCl7bGV0IEhlO3R0PXR0fHwxLzA7Y29uc3QgdXQ9JGUubGVuZ3RoO2xldCBxdD1udWxsO2NvbnN0IFJ0PVtdO2Zv'@;
put 'cihsZXQgUHQ9MDtQdDx1dDsrK1B0KXtpZihIZT0kZS5jaGFyQ29kZUF0KFB0KSxIZT41NTI5NSYmSGU8NTczNDQpe2lmKCFxdCl7aWYoSGU+NTYzMTkpeyh0dC09Myk+LTEmJlJ0LnB1c2goMjM5LDE5MSwxODkpO2NvbnRpbnVlfWlmKFB0KzE9PT11dCl7KHR0LT0zKT4tMSYmUnQucHVzaCgy'@;
put 'MzksMTkxLDE4OSk7Y29udGludWV9cXQ9SGU7Y29udGludWV9aWYoSGU8NTYzMjApeyh0dC09Myk+LTEmJlJ0LnB1c2goMjM5LDE5MSwxODkpLHF0PUhlO2NvbnRpbnVlfUhlPTY1NTM2KyhxdC01NTI5Njw8MTB8SGUtNTYzMjApfWVsc2UgcXQmJih0dC09Myk+LTEmJlJ0LnB1c2goMjM5LDE5'@;
put 'MSwxODkpO2lmKHF0PW51bGwsSGU8MTI4KXtpZigodHQtPTEpPDApYnJlYWs7UnQucHVzaChIZSl9ZWxzZSBpZihIZTwyMDQ4KXtpZigodHQtPTIpPDApYnJlYWs7UnQucHVzaChIZT4+NnwxOTIsNjMmSGV8MTI4KX1lbHNlIGlmKEhlPDY1NTM2KXtpZigodHQtPTMpPDApYnJlYWs7UnQucHVz'@;
put 'aChIZT4+MTJ8MjI0LEhlPj42JjYzfDEyOCw2MyZIZXwxMjgpfWVsc2V7aWYoIShIZTwxMTE0MTEyKSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgY29kZSBwb2ludCIpO2lmKCh0dC09NCk8MClicmVhaztSdC5wdXNoKEhlPj4xOHwyNDAsSGU+PjEyJjYzfDEyOCxIZT4+NiY2M3wxMjgsNjMm'@;
put 'SGV8MTI4KX19cmV0dXJuIFJ0fWZ1bmN0aW9uIG50KCRlKXtyZXR1cm4gXy50b0J5dGVBcnJheShmdW5jdGlvbiBWZSgkZSl7aWYoKCRlPSgkZT0kZS5zcGxpdCgiPSIpWzBdKS50cmltKCkucmVwbGFjZShJZSwiIikpLmxlbmd0aDwyKXJldHVybiIiO2Zvcig7JGUubGVuZ3RoJTQhPTA7KSRl'@;
put 'Kz0iPSI7cmV0dXJuICRlfSgkZSkpfWZ1bmN0aW9uIFFlKCRlLHR0LEhlLHV0KXtsZXQgcXQ7Zm9yKHF0PTA7cXQ8dXQmJiEocXQrSGU+PXR0Lmxlbmd0aHx8cXQ+PSRlLmxlbmd0aCk7KytxdCl0dFtxdCtIZV09JGVbcXRdO3JldHVybiBxdH1mdW5jdGlvbiB1bigkZSx0dCl7cmV0dXJuICRl'@;
put 'IGluc3RhbmNlb2YgdHR8fG51bGwhPSRlJiZudWxsIT0kZS5jb25zdHJ1Y3RvciYmbnVsbCE9JGUuY29uc3RydWN0b3IubmFtZSYmJGUuY29uc3RydWN0b3IubmFtZT09PXR0Lm5hbWV9ZnVuY3Rpb24geXQoJGUpe3JldHVybiAkZSE9JGV9Y29uc3QgTXQ9ZnVuY3Rpb24oKXtjb25zdCAkZT0i'@;
put 'MDEyMzQ1Njc4OWFiY2RlZiIsdHQ9bmV3IEFycmF5KDI1Nik7Zm9yKGxldCBIZT0wO0hlPDE2OysrSGUpe2NvbnN0IHV0PTE2KkhlO2ZvcihsZXQgcXQ9MDtxdDwxNjsrK3F0KXR0W3V0K3F0XT0kZVtIZV0rJGVbcXRdfXJldHVybiB0dH0oKTtmdW5jdGlvbiBEdCgkZSl7cmV0dXJuIHR5cGVv'@;
put 'ZiBCaWdJbnQ+InUiP2l0OiRlfWZ1bmN0aW9uIGl0KCl7dGhyb3cgbmV3IEVycm9yKCJCaWdJbnQgbm90IHN1cHBvcnRlZCIpfX0sNTExNjoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDg2MTIpLF89eSgxNzY4KSxnPXkoODkyOCksQj15KDk3NzApO3VlLmV4cG9ydHM9Qnx8SS5j'@;
put 'YWxsKGcsXyl9LDMxOTI6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg4NjEyKSxfPXkoMTc2OCksZz15KDUxMTYpO3VlLmV4cG9ydHM9ZnVuY3Rpb24oKXtyZXR1cm4gZyhJLF8sYXJndW1lbnRzKX19LDE3Njg6dWU9PnsidXNlIHN0cmljdCI7dWUuZXhwb3J0cz1GdW5jdGlvbi5w'@;
put 'cm90b3R5cGUuYXBwbHl9LDg5Mjg6dWU9PnsidXNlIHN0cmljdCI7dWUuZXhwb3J0cz1GdW5jdGlvbi5wcm90b3R5cGUuY2FsbH0sMzE5Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoODYxMiksXz15KDQ0NTMpLGc9eSg4OTI4KSxCPXkoNTExNik7dWUuZXhwb3J0cz1mdW5jdGlv'@;
put 'bihQKXtpZihQLmxlbmd0aDwxfHwiZnVuY3Rpb24iIT10eXBlb2YgUFswXSl0aHJvdyBuZXcgXygiYSBmdW5jdGlvbiBpcyByZXF1aXJlZCIpO3JldHVybiBCKEksZyxQKX19LDk3NzA6dWU9PnsidXNlIHN0cmljdCI7dWUuZXhwb3J0cz10eXBlb2YgUmVmbGVjdDwidSImJlJlZmxlY3QmJlJl'@;
put 'ZmxlY3QuYXBwbHl9LDE5MjQ6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSgyMTApLF89eSg1NTU5KSxnPV8oSSgiU3RyaW5nLnByb3RvdHlwZS5pbmRleE9mIikpO3VlLmV4cG9ydHM9ZnVuY3Rpb24odyxQKXt2YXIgRj1JKHcsISFQKTtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2Yg'@;
put 'RiYmZyh3LCIucHJvdG90eXBlLiIpPi0xP18oRik6Rn19LDU1NTk6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg3NzcxKSxfPXkoNDQyOSksZz15KDMxOSksQj15KDMxOTIpO3VlLmV4cG9ydHM9ZnVuY3Rpb24oUCl7dmFyIEY9Zyhhcmd1bWVudHMpLE89UC5sZW5ndGgtKGFyZ3Vt'@;
put 'ZW50cy5sZW5ndGgtMSk7cmV0dXJuIEkoRiwxKyhPPjA/TzowKSwhMCl9LF8/Xyh1ZS5leHBvcnRzLCJhcHBseSIse3ZhbHVlOkJ9KTp1ZS5leHBvcnRzLmFwcGx5PUJ9LDczNzk6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSgyMTApLF89eSgzMTkpLGc9XyhbSSgiJVN0cmluZy5w'@;
put 'cm90b3R5cGUuaW5kZXhPZiUiKV0pO3VlLmV4cG9ydHM9ZnVuY3Rpb24odyxQKXt2YXIgRj1JKHcsISFQKTtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgRiYmZyh3LCIucHJvdG90eXBlLiIpPi0xP18oW0ZdKTpGfX0sMTAyNzoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDk1MDkp'@;
put 'LkJ1ZmZlcixfPXkoMjgzMCkuVHJhbnNmb3JtLGc9eSgyNTUzKS5zO2Z1bmN0aW9uIHcoeil7Xy5jYWxsKHRoaXMpLHRoaXMuaGFzaE1vZGU9InN0cmluZyI9PXR5cGVvZiB6LHRoaXMuaGFzaE1vZGU/dGhpc1t6XT10aGlzLl9maW5hbE9yRGlnZXN0OnRoaXMuZmluYWw9dGhpcy5fZmluYWxP'@;
put 'ckRpZ2VzdCx0aGlzLl9maW5hbCYmKHRoaXMuX19maW5hbD10aGlzLl9maW5hbCx0aGlzLl9maW5hbD1udWxsKSx0aGlzLl9kZWNvZGVyPW51bGwsdGhpcy5fZW5jb2Rpbmc9bnVsbH15KDU3MTcpKHcsXyk7dmFyIFA9dHlwZW9mIFVpbnQ4QXJyYXk8InUiLEY9dHlwZW9mIEFycmF5QnVmZmVy'@;
put 'PCJ1IiYmdHlwZW9mIFVpbnQ4QXJyYXk8InUiJiZBcnJheUJ1ZmZlci5pc1ZpZXcmJihJLnByb3RvdHlwZSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXl8fEkuVFlQRURfQVJSQVlfU1VQUE9SVCk7dy5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKHosTixMKXt2YXIgSz1mdW5jdGlvbiBPKHosTil7'@;
put 'aWYoeiBpbnN0YW5jZW9mIEkpcmV0dXJuIHo7aWYoInN0cmluZyI9PXR5cGVvZiB6KXJldHVybiBJLmZyb20oeixOKTtpZihGJiZBcnJheUJ1ZmZlci5pc1ZpZXcoeikpe2lmKDA9PT16LmJ5dGVMZW5ndGgpcmV0dXJuIEkuYWxsb2MoMCk7dmFyIEw9SS5mcm9tKHouYnVmZmVyLHouYnl0ZU9m'@;
put 'ZnNldCx6LmJ5dGVMZW5ndGgpO2lmKEwuYnl0ZUxlbmd0aD09PXouYnl0ZUxlbmd0aClyZXR1cm4gTH1pZihQJiZ6IGluc3RhbmNlb2YgVWludDhBcnJheXx8SS5pc0J1ZmZlcih6KSYmei5jb25zdHJ1Y3RvciYmImZ1bmN0aW9uIj09dHlwZW9mIHouY29uc3RydWN0b3IuaXNCdWZmZXImJnou'@;
put 'Y29uc3RydWN0b3IuaXNCdWZmZXIoeikpcmV0dXJuIEkuZnJvbSh6KTt0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgImRhdGEiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBzdHJpbmcgb3IgYW4gaW5zdGFuY2Ugb2YgQnVmZmVyLCBUeXBlZEFycmF5LCBvciBEYXRhVmlldy4nKX0oeixOKSxV'@;
put 'PXRoaXMuX3VwZGF0ZShLKTtyZXR1cm4gdGhpcy5oYXNoTW9kZT90aGlzOihMJiYoVT10aGlzLl90b1N0cmluZyhVLEwpKSxVKX0sdy5wcm90b3R5cGUuc2V0QXV0b1BhZGRpbmc9ZnVuY3Rpb24oKXt9LHcucHJvdG90eXBlLmdldEF1dGhUYWc9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3Io'@;
put 'InRyeWluZyB0byBnZXQgYXV0aCB0YWcgaW4gdW5zdXBwb3J0ZWQgc3RhdGUiKX0sdy5wcm90b3R5cGUuc2V0QXV0aFRhZz1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigidHJ5aW5nIHRvIHNldCBhdXRoIHRhZyBpbiB1bnN1cHBvcnRlZCBzdGF0ZSIpfSx3LnByb3RvdHlwZS5zZXRBQUQ9'@;
put 'ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoInRyeWluZyB0byBzZXQgYWFkIGluIHVuc3VwcG9ydGVkIHN0YXRlIil9LHcucHJvdG90eXBlLl90cmFuc2Zvcm09ZnVuY3Rpb24oeixOLEwpe3ZhciBLO3RyeXt0aGlzLmhhc2hNb2RlP3RoaXMuX3VwZGF0ZSh6KTp0aGlzLnB1c2godGhpcy5f'@;
put 'dXBkYXRlKHopKX1jYXRjaChVKXtLPVV9ZmluYWxseXtMKEspfX0sdy5wcm90b3R5cGUuX2ZsdXNoPWZ1bmN0aW9uKHope3ZhciBOO3RyeXt0aGlzLnB1c2godGhpcy5fX2ZpbmFsKCkpfWNhdGNoKEwpe049TH16KE4pfSx3LnByb3RvdHlwZS5fZmluYWxPckRpZ2VzdD1mdW5jdGlvbih6KXt2'@;
put 'YXIgTj10aGlzLl9fZmluYWwoKXx8SS5hbGxvYygwKTtyZXR1cm4geiYmKE49dGhpcy5fdG9TdHJpbmcoTix6LCEwKSksTn0sdy5wcm90b3R5cGUuX3RvU3RyaW5nPWZ1bmN0aW9uKHosTixMKXtpZih0aGlzLl9kZWNvZGVyfHwodGhpcy5fZGVjb2Rlcj1uZXcgZyhOKSx0aGlzLl9lbmNvZGlu'@;
put 'Zz1OKSx0aGlzLl9lbmNvZGluZyE9PU4pdGhyb3cgbmV3IEVycm9yKCJjYW5cdTIwMTl0IHN3aXRjaCBlbmNvZGluZ3MiKTt2YXIgSz10aGlzLl9kZWNvZGVyLndyaXRlKHopO3JldHVybiBMJiYoSys9dGhpcy5fZGVjb2Rlci5lbmQoKSksS30sdWUuZXhwb3J0cz13fSw1MTA4Oih1ZSxYLHkp'@;
put 'PT57dmFyIEk9eSg5NTM5KSxfPXkoOTI4Mik7ZnVuY3Rpb24gZygpe3JldHVybihuZXcgRGF0ZSkuZ2V0VGltZSgpfXZhciB3LEI9QXJyYXkucHJvdG90eXBlLnNsaWNlLFA9e307dz10eXBlb2YgeS5nPCJ1IiYmeS5nLmNvbnNvbGU/eS5nLmNvbnNvbGU6dHlwZW9mIHdpbmRvdzwidSImJndp'@;
put 'bmRvdy5jb25zb2xlP3dpbmRvdy5jb25zb2xlOnt9O2Zvcih2YXIgRj1bW2Z1bmN0aW9uIEsoKXt9LCJsb2ciXSxbZnVuY3Rpb24gVSgpe3cubG9nLmFwcGx5KHcsYXJndW1lbnRzKX0sImluZm8iXSxbZnVuY3Rpb24gVygpe3cubG9nLmFwcGx5KHcsYXJndW1lbnRzKX0sIndhcm4iXSxbZnVu'@;
put 'Y3Rpb24gWSgpe3cud2Fybi5hcHBseSh3LGFyZ3VtZW50cyl9LCJlcnJvciJdLFtmdW5jdGlvbiBxKGxlKXtQW2xlXT1nKCl9LCJ0aW1lIl0sW2Z1bmN0aW9uIGVlKGxlKXt2YXIgbWU9UFtsZV07aWYoIW1lKXRocm93IG5ldyBFcnJvcigiTm8gc3VjaCBsYWJlbDogIitsZSk7ZGVsZXRlIFBb'@;
put 'bGVdO3ZhciBfZT1nKCktbWU7dy5sb2cobGUrIjogIitfZSsibXMiKX0sInRpbWVFbmQiXSxbZnVuY3Rpb24gSigpe3ZhciBsZT1uZXcgRXJyb3I7bGUubmFtZT0iVHJhY2UiLGxlLm1lc3NhZ2U9SS5mb3JtYXQuYXBwbHkobnVsbCxhcmd1bWVudHMpLHcuZXJyb3IobGUuc3RhY2spfSwidHJh'@;
put 'Y2UiXSxbZnVuY3Rpb24gbmUobGUpe3cubG9nKEkuaW5zcGVjdChsZSkrIlxuIil9LCJkaXIiXSxbZnVuY3Rpb24gaWUobGUpe2lmKCFsZSl7dmFyIG1lPUIuY2FsbChhcmd1bWVudHMsMSk7Xy5vayghMSxJLmZvcm1hdC5hcHBseShudWxsLG1lKSl9fSwiYXNzZXJ0Il1dLE89MDtPPEYubGVu'@;
put 'Z3RoO08rKyl7dmFyIHo9RltPXSxMPXpbMV07d1tMXXx8KHdbTF09elswXSl9dWUuZXhwb3J0cz13fSw2NDk3Oih1ZSxYLHkpPT57dmFyIEk9eSg4NzY0KS5CdWZmZXI7ZnVuY3Rpb24gcShlZSl7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlZSl9WC5pc0FycmF5PWZ1'@;
put 'bmN0aW9uIF8oZWUpe3JldHVybiBBcnJheS5pc0FycmF5P0FycmF5LmlzQXJyYXkoZWUpOiJbb2JqZWN0IEFycmF5XSI9PT1xKGVlKX0sWC5pc0Jvb2xlYW49ZnVuY3Rpb24gZyhlZSl7cmV0dXJuImJvb2xlYW4iPT10eXBlb2YgZWV9LFguaXNOdWxsPWZ1bmN0aW9uIEIoZWUpe3JldHVybiBu'@;
put 'dWxsPT09ZWV9LFguaXNOdWxsT3JVbmRlZmluZWQ9ZnVuY3Rpb24gdyhlZSl7cmV0dXJuIG51bGw9PWVlfSxYLmlzTnVtYmVyPWZ1bmN0aW9uIFAoZWUpe3JldHVybiJudW1iZXIiPT10eXBlb2YgZWV9LFguaXNTdHJpbmc9ZnVuY3Rpb24gRihlZSl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBl'@;
put 'ZX0sWC5pc1N5bWJvbD1mdW5jdGlvbiBPKGVlKXtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGVlfSxYLmlzVW5kZWZpbmVkPWZ1bmN0aW9uIHooZWUpe3JldHVybiB2b2lkIDA9PT1lZX0sWC5pc1JlZ0V4cD1mdW5jdGlvbiBOKGVlKXtyZXR1cm4iW29iamVjdCBSZWdFeHBdIj09PXEoZWUpfSxY'@;
put 'LmlzT2JqZWN0PWZ1bmN0aW9uIEwoZWUpe3JldHVybiJvYmplY3QiPT10eXBlb2YgZWUmJm51bGwhPT1lZX0sWC5pc0RhdGU9ZnVuY3Rpb24gSyhlZSl7cmV0dXJuIltvYmplY3QgRGF0ZV0iPT09cShlZSl9LFguaXNFcnJvcj1mdW5jdGlvbiBVKGVlKXtyZXR1cm4iW29iamVjdCBFcnJvcl0i'@;
put 'PT09cShlZSl8fGVlIGluc3RhbmNlb2YgRXJyb3J9LFguaXNGdW5jdGlvbj1mdW5jdGlvbiBXKGVlKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgZWV9LFguaXNQcmltaXRpdmU9ZnVuY3Rpb24gWShlZSl7cmV0dXJuIG51bGw9PT1lZXx8ImJvb2xlYW4iPT10eXBlb2YgZWV8fCJudW1iZXIi'@;
put 'PT10eXBlb2YgZWV8fCJzdHJpbmciPT10eXBlb2YgZWV8fCJzeW1ib2wiPT10eXBlb2YgZWV8fHR5cGVvZiBlZT4idSJ9LFguaXNCdWZmZXI9SS5pc0J1ZmZlcn0sNjM5MzoodWUsWCx5KT0+e3ZhciBJPXkoODc2NCkuQnVmZmVyLF89eSg2OTQ4KSxnPXkoNjQyNik7dWUuZXhwb3J0cz1mdW5j'@;
put 'dGlvbihPKXtyZXR1cm4gbmV3IHcoTyl9O3ZhciBCPXtzZWNwMjU2azE6e25hbWU6InNlY3AyNTZrMSIsYnl0ZUxlbmd0aDozMn0sc2VjcDIyNHIxOntuYW1lOiJwMjI0IixieXRlTGVuZ3RoOjI4fSxwcmltZTI1NnYxOntuYW1lOiJwMjU2IixieXRlTGVuZ3RoOjMyfSxwcmltZTE5MnYxOntu'@;
put 'YW1lOiJwMTkyIixieXRlTGVuZ3RoOjI0fSxlZDI1NTE5OntuYW1lOiJlZDI1NTE5IixieXRlTGVuZ3RoOjMyfSxzZWNwMzg0cjE6e25hbWU6InAzODQiLGJ5dGVMZW5ndGg6NDh9LHNlY3A1MjFyMTp7bmFtZToicDUyMSIsYnl0ZUxlbmd0aDo2Nn19O2Z1bmN0aW9uIHcoRil7dGhpcy5jdXJ2'@;
put 'ZVR5cGU9QltGXSx0aGlzLmN1cnZlVHlwZXx8KHRoaXMuY3VydmVUeXBlPXtuYW1lOkZ9KSx0aGlzLmN1cnZlPW5ldyBfLmVjKHRoaXMuY3VydmVUeXBlLm5hbWUpLHRoaXMua2V5cz12b2lkIDB9ZnVuY3Rpb24gUChGLE8seil7QXJyYXkuaXNBcnJheShGKXx8KEY9Ri50b0FycmF5KCkpO3Zh'@;
put 'ciBOPW5ldyBJKEYpO2lmKHomJk4ubGVuZ3RoPHope3ZhciBMPW5ldyBJKHotTi5sZW5ndGgpO0wuZmlsbCgwKSxOPUkuY29uY2F0KFtMLE5dKX1yZXR1cm4gTz9OLnRvU3RyaW5nKE8pOk59Qi5wMjI0PUIuc2VjcDIyNHIxLEIucDI1Nj1CLnNlY3AyNTZyMT1CLnByaW1lMjU2djEsQi5wMTky'@;
put 'PUIuc2VjcDE5MnIxPUIucHJpbWUxOTJ2MSxCLnAzODQ9Qi5zZWNwMzg0cjEsQi5wNTIxPUIuc2VjcDUyMXIxLHcucHJvdG90eXBlLmdlbmVyYXRlS2V5cz1mdW5jdGlvbihGLE8pe3JldHVybiB0aGlzLmtleXM9dGhpcy5jdXJ2ZS5nZW5LZXlQYWlyKCksdGhpcy5nZXRQdWJsaWNLZXkoRixP'@;
put 'KX0sdy5wcm90b3R5cGUuY29tcHV0ZVNlY3JldD1mdW5jdGlvbihGLE8seil7cmV0dXJuIE89T3x8InV0ZjgiLEkuaXNCdWZmZXIoRil8fChGPW5ldyBJKEYsTykpLFAodGhpcy5jdXJ2ZS5rZXlGcm9tUHVibGljKEYpLmdldFB1YmxpYygpLm11bCh0aGlzLmtleXMuZ2V0UHJpdmF0ZSgpKS5n'@;
put 'ZXRYKCkseix0aGlzLmN1cnZlVHlwZS5ieXRlTGVuZ3RoKX0sdy5wcm90b3R5cGUuZ2V0UHVibGljS2V5PWZ1bmN0aW9uKEYsTyl7dmFyIHo9dGhpcy5rZXlzLmdldFB1YmxpYygiY29tcHJlc3NlZCI9PT1PLCEwKTtyZXR1cm4iaHlicmlkIj09PU8mJih6WzBdPXpbei5sZW5ndGgtMV0lMj83'@;
put 'OjYpLFAoeixGKX0sdy5wcm90b3R5cGUuZ2V0UHJpdmF0ZUtleT1mdW5jdGlvbihGKXtyZXR1cm4gUCh0aGlzLmtleXMuZ2V0UHJpdmF0ZSgpLEYpfSx3LnByb3RvdHlwZS5zZXRQdWJsaWNLZXk9ZnVuY3Rpb24oRixPKXtyZXR1cm4gTz1PfHwidXRmOCIsSS5pc0J1ZmZlcihGKXx8KEY9bmV3'@;
put 'IEkoRixPKSksdGhpcy5rZXlzLl9pbXBvcnRQdWJsaWMoRiksdGhpc30sdy5wcm90b3R5cGUuc2V0UHJpdmF0ZUtleT1mdW5jdGlvbihGLE8pe089T3x8InV0ZjgiLEkuaXNCdWZmZXIoRil8fChGPW5ldyBJKEYsTykpO3ZhciB6PW5ldyBnKEYpO3JldHVybiB6PXoudG9TdHJpbmcoMTYpLHRo'@;
put 'aXMua2V5cz10aGlzLmN1cnZlLmdlbktleVBhaXIoKSx0aGlzLmtleXMuX2ltcG9ydFByaXZhdGUoeiksdGhpc319LDY0MjY6ZnVuY3Rpb24odWUsWCx5KXshZnVuY3Rpb24oSSxfKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gZyhWLHApe2lmKCFWKXRocm93IG5ldyBFcnJvcihwfHwiQXNzZXJ0'@;
put 'aW9uIGZhaWxlZCIpfWZ1bmN0aW9uIEIoVixwKXtWLnN1cGVyXz1wO3ZhciBiPWZ1bmN0aW9uKCl7fTtiLnByb3RvdHlwZT1wLnByb3RvdHlwZSxWLnByb3RvdHlwZT1uZXcgYixWLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1WfWZ1bmN0aW9uIHcoVixwLGIpe2lmKHcuaXNCTihWKSlyZXR1cm4g'@;
put 'Vjt0aGlzLm5lZ2F0aXZlPTAsdGhpcy53b3Jkcz1udWxsLHRoaXMubGVuZ3RoPTAsdGhpcy5yZWQ9bnVsbCxudWxsIT09ViYmKCgibGUiPT09cHx8ImJlIj09PXApJiYoYj1wLHA9MTApLHRoaXMuX2luaXQoVnx8MCxwfHwxMCxifHwiYmUiKSl9dmFyIFA7Im9iamVjdCI9PXR5cGVvZiBJP0ku'@;
put 'ZXhwb3J0cz13Ol8uQk49dyx3LkJOPXcsdy53b3JkU2l6ZT0yNjt0cnl7UD10eXBlb2Ygd2luZG93PCJ1IiYmdHlwZW9mIHdpbmRvdy5CdWZmZXI8InUiP3dpbmRvdy5CdWZmZXI6eSg4NjIzKS5CdWZmZXJ9Y2F0Y2h7fWZ1bmN0aW9uIEYoVixwKXt2YXIgYj1WLmNoYXJDb2RlQXQocCk7cmV0'@;
put 'dXJuIGI+PTY1JiZiPD03MD9iLTU1OmI+PTk3JiZiPD0xMDI/Yi04NzpiLTQ4JjE1fWZ1bmN0aW9uIE8oVixwLGIpe3ZhciB4PUYoVixiKTtyZXR1cm4gYi0xPj1wJiYoeHw9RihWLGItMSk8PDQpLHh9ZnVuY3Rpb24geihWLHAsYix4KXtmb3IodmFyIEM9MCxUPU1hdGgubWluKFYubGVuZ3Ro'@;
put 'LGIpLEg9cDtIPFQ7SCsrKXt2YXIgaj1WLmNoYXJDb2RlQXQoSCktNDg7Qyo9eCxDKz1qPj00OT9qLTQ5KzEwOmo+PTE3P2otMTcrMTA6an1yZXR1cm4gQ313LmlzQk49ZnVuY3Rpb24ocCl7cmV0dXJuIHAgaW5zdGFuY2VvZiB3fHxudWxsIT09cCYmIm9iamVjdCI9PXR5cGVvZiBwJiZwLmNv'@;
put 'bnN0cnVjdG9yLndvcmRTaXplPT09dy53b3JkU2l6ZSYmQXJyYXkuaXNBcnJheShwLndvcmRzKX0sdy5tYXg9ZnVuY3Rpb24ocCxiKXtyZXR1cm4gcC5jbXAoYik+MD9wOmJ9LHcubWluPWZ1bmN0aW9uKHAsYil7cmV0dXJuIHAuY21wKGIpPDA/cDpifSx3LnByb3RvdHlwZS5faW5pdD1mdW5j'@;
put 'dGlvbihwLGIseCl7aWYoIm51bWJlciI9PXR5cGVvZiBwKXJldHVybiB0aGlzLl9pbml0TnVtYmVyKHAsYix4KTtpZigib2JqZWN0Ij09dHlwZW9mIHApcmV0dXJuIHRoaXMuX2luaXRBcnJheShwLGIseCk7ImhleCI9PT1iJiYoYj0xNiksZyhiPT09KDB8YikmJmI+PTImJmI8PTM2KTt2YXIg'@;
put 'Qz0wOyItIj09PShwPXAudG9TdHJpbmcoKS5yZXBsYWNlKC9ccysvZywiIikpWzBdJiYoQysrLHRoaXMubmVnYXRpdmU9MSksQzxwLmxlbmd0aCYmKDE2PT09Yj90aGlzLl9wYXJzZUhleChwLEMseCk6KHRoaXMuX3BhcnNlQmFzZShwLGIsQyksImxlIj09PXgmJnRoaXMuX2luaXRBcnJheSh0'@;
put 'aGlzLnRvQXJyYXkoKSxiLHgpKSl9LHcucHJvdG90eXBlLl9pbml0TnVtYmVyPWZ1bmN0aW9uKHAsYix4KXtwPDAmJih0aGlzLm5lZ2F0aXZlPTEscD0tcCkscDw2NzEwODg2ND8odGhpcy53b3Jkcz1bNjcxMDg4NjMmcF0sdGhpcy5sZW5ndGg9MSk6cDw0NTAzNTk5NjI3MzcwNDk2Pyh0aGlz'@;
put 'LndvcmRzPVs2NzEwODg2MyZwLHAvNjcxMDg4NjQmNjcxMDg4NjNdLHRoaXMubGVuZ3RoPTIpOihnKHA8OTAwNzE5OTI1NDc0MDk5MiksdGhpcy53b3Jkcz1bNjcxMDg4NjMmcCxwLzY3MTA4ODY0JjY3MTA4ODYzLDFdLHRoaXMubGVuZ3RoPTMpLCJsZSI9PT14JiZ0aGlzLl9pbml0QXJyYXko'@;
put 'dGhpcy50b0FycmF5KCksYix4KX0sdy5wcm90b3R5cGUuX2luaXRBcnJheT1mdW5jdGlvbihwLGIseCl7aWYoZygibnVtYmVyIj09dHlwZW9mIHAubGVuZ3RoKSxwLmxlbmd0aDw9MClyZXR1cm4gdGhpcy53b3Jkcz1bMF0sdGhpcy5sZW5ndGg9MSx0aGlzO3RoaXMubGVuZ3RoPU1hdGguY2Vp'@;
put 'bChwLmxlbmd0aC8zKSx0aGlzLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciBDPTA7Qzx0aGlzLmxlbmd0aDtDKyspdGhpcy53b3Jkc1tDXT0wO3ZhciBULEgsaj0wO2lmKCJiZSI9PT14KWZvcihDPXAubGVuZ3RoLTEsVD0wO0M+PTA7Qy09Myl0aGlzLndvcmRzW1RdfD0o'@;
put 'SD1wW0NdfHBbQy0xXTw8OHxwW0MtMl08PDE2KTw8aiY2NzEwODg2Myx0aGlzLndvcmRzW1QrMV09SD4+PjI2LWomNjcxMDg4NjMsKGorPTI0KT49MjYmJihqLT0yNixUKyspO2Vsc2UgaWYoImxlIj09PXgpZm9yKEM9MCxUPTA7QzxwLmxlbmd0aDtDKz0zKXRoaXMud29yZHNbVF18PShIPXBb'@;
put 'Q118cFtDKzFdPDw4fHBbQysyXTw8MTYpPDxqJjY3MTA4ODYzLHRoaXMud29yZHNbVCsxXT1IPj4+MjYtaiY2NzEwODg2Mywoais9MjQpPj0yNiYmKGotPTI2LFQrKyk7cmV0dXJuIHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuX3BhcnNlSGV4PWZ1bmN0aW9uKHAsYix4KXt0aGlzLmxlbmd0'@;
put 'aD1NYXRoLmNlaWwoKHAubGVuZ3RoLWIpLzYpLHRoaXMud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIEM9MDtDPHRoaXMubGVuZ3RoO0MrKyl0aGlzLndvcmRzW0NdPTA7dmFyIGosVD0wLEg9MDtpZigiYmUiPT09eClmb3IoQz1wLmxlbmd0aC0xO0M+PWI7Qy09MilqPU8o'@;
put 'cCxiLEMpPDxULHRoaXMud29yZHNbSF18PTY3MTA4ODYzJmosVD49MTg/KFQtPTE4LHRoaXMud29yZHNbSCs9MV18PWo+Pj4yNik6VCs9ODtlbHNlIGZvcihDPShwLmxlbmd0aC1iKSUyPT0wP2IrMTpiO0M8cC5sZW5ndGg7Qys9MilqPU8ocCxiLEMpPDxULHRoaXMud29yZHNbSF18PTY3MTA4'@;
put 'ODYzJmosVD49MTg/KFQtPTE4LHRoaXMud29yZHNbSCs9MV18PWo+Pj4yNik6VCs9ODt0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLl9wYXJzZUJhc2U9ZnVuY3Rpb24ocCxiLHgpe3RoaXMud29yZHM9WzBdLHRoaXMubGVuZ3RoPTE7Zm9yKHZhciBDPTAsVD0xO1Q8PTY3MTA4ODYzO1QqPWIp'@;
put 'QysrO0MtLSxUPVQvYnwwO2Zvcih2YXIgSD1wLmxlbmd0aC14LGo9SCVDLEU9TWF0aC5taW4oSCxILWopK3gsbT0wLEE9eDtBPEU7QSs9QyltPXoocCxBLEErQyxiKSx0aGlzLmltdWxuKFQpLHRoaXMud29yZHNbMF0rbTw2NzEwODg2ND90aGlzLndvcmRzWzBdKz1tOnRoaXMuX2lhZGRuKG0p'@;
put 'O2lmKDAhPT1qKXt2YXIgYWU9MTtmb3IobT16KHAsQSxwLmxlbmd0aCxiKSxBPTA7QTxqO0ErKylhZSo9Yjt0aGlzLmltdWxuKGFlKSx0aGlzLndvcmRzWzBdK208NjcxMDg4NjQ/dGhpcy53b3Jkc1swXSs9bTp0aGlzLl9pYWRkbihtKX10aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmNvcHk9'@;
put 'ZnVuY3Rpb24ocCl7cC53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgYj0wO2I8dGhpcy5sZW5ndGg7YisrKXAud29yZHNbYl09dGhpcy53b3Jkc1tiXTtwLmxlbmd0aD10aGlzLmxlbmd0aCxwLm5lZ2F0aXZlPXRoaXMubmVnYXRpdmUscC5yZWQ9dGhpcy5yZWR9LHcucHJv'@;
put 'dG90eXBlLmNsb25lPWZ1bmN0aW9uKCl7dmFyIHA9bmV3IHcobnVsbCk7cmV0dXJuIHRoaXMuY29weShwKSxwfSx3LnByb3RvdHlwZS5fZXhwYW5kPWZ1bmN0aW9uKHApe2Zvcig7dGhpcy5sZW5ndGg8cDspdGhpcy53b3Jkc1t0aGlzLmxlbmd0aCsrXT0wO3JldHVybiB0aGlzfSx3LnByb3Rv'@;
put 'dHlwZS5zdHJpcD1mdW5jdGlvbigpe2Zvcig7dGhpcy5sZW5ndGg+MSYmMD09PXRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV07KXRoaXMubGVuZ3RoLS07cmV0dXJuIHRoaXMuX25vcm1TaWduKCl9LHcucHJvdG90eXBlLl9ub3JtU2lnbj1mdW5jdGlvbigpe3JldHVybiAxPT09dGhpcy5sZW5n'@;
put 'dGgmJjA9PT10aGlzLndvcmRzWzBdJiYodGhpcy5uZWdhdGl2ZT0wKSx0aGlzfSx3LnByb3RvdHlwZS5pbnNwZWN0PWZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMucmVkPyI8Qk4tUjogIjoiPEJOOiAiKSt0aGlzLnRvU3RyaW5nKDE2KSsiPiJ9O3ZhciBOPVsiIiwiMCIsIjAwIiwiMDAwIiwiMDAw'@;
put 'MCIsIjAwMDAwIiwiMDAwMDAwIiwiMDAwMDAwMCIsIjAwMDAwMDAwIiwiMDAwMDAwMDAwIiwiMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMCIs'@;
put 'IjAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAw'@;
put 'MDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCJdLEw9WzAsMCwyNSwxNiwxMiwxMSwxMCw5LDgsOCw3LDcsNyw3LDYsNiw2LDYsNiw2LDYsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNV0sSz1bMCwwLDMzNTU0NDMyLDQzMDQ2NzIxLDE2Nzc3'@;
put 'MjE2LDQ4ODI4MTI1LDYwNDY2MTc2LDQwMzUzNjA3LDE2Nzc3MjE2LDQzMDQ2NzIxLDFlNywxOTQ4NzE3MSwzNTgzMTgwOCw2Mjc0ODUxNyw3NTI5NTM2LDExMzkwNjI1LDE2Nzc3MjE2LDI0MTM3NTY5LDM0MDEyMjI0LDQ3MDQ1ODgxLDY0ZTYsNDA4NDEwMSw1MTUzNjMyLDY0MzYzNDMsNzk2'@;
put 'MjYyNCw5NzY1NjI1LDExODgxMzc2LDE0MzQ4OTA3LDE3MjEwMzY4LDIwNTExMTQ5LDI0M2U1LDI4NjI5MTUxLDMzNTU0NDMyLDM5MTM1MzkzLDQ1NDM1NDI0LDUyNTIxODc1LDYwNDY2MTc2XTtmdW5jdGlvbiBXKFYscCxiKXtiLm5lZ2F0aXZlPXAubmVnYXRpdmVeVi5uZWdhdGl2ZTt2YXIg'@;
put 'eD1WLmxlbmd0aCtwLmxlbmd0aHwwO2IubGVuZ3RoPXgseD14LTF8MDt2YXIgQz0wfFYud29yZHNbMF0sVD0wfHAud29yZHNbMF0sSD1DKlQsRT1ILzY3MTA4ODY0fDA7Yi53b3Jkc1swXT02NzEwODg2MyZIO2Zvcih2YXIgbT0xO208eDttKyspe2Zvcih2YXIgQT1FPj4+MjYsYWU9NjcxMDg4'@;
put 'NjMmRSx0ZT1NYXRoLm1pbihtLHAubGVuZ3RoLTEpLHNlPU1hdGgubWF4KDAsbS1WLmxlbmd0aCsxKTtzZTw9dGU7c2UrKylBKz0oSD0oQz0wfFYud29yZHNbbS1zZXwwXSkqKFQ9MHxwLndvcmRzW3NlXSkrYWUpLzY3MTA4ODY0fDAsYWU9NjcxMDg4NjMmSDtiLndvcmRzW21dPTB8YWUsRT0w'@;
put 'fEF9cmV0dXJuIDAhPT1FP2Iud29yZHNbbV09MHxFOmIubGVuZ3RoLS0sYi5zdHJpcCgpfXcucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKHAsYil7dmFyIHg7aWYoYj0wfGJ8fDEsMTY9PT0ocD1wfHwxMCl8fCJoZXgiPT09cCl7eD0iIjtmb3IodmFyIEM9MCxUPTAsSD0wO0g8dGhpcy5s'@;
put 'ZW5ndGg7SCsrKXt2YXIgaj10aGlzLndvcmRzW0hdLEU9KDE2Nzc3MjE1JihqPDxDfFQpKS50b1N0cmluZygxNik7VD1qPj4+MjQtQyYxNjc3NzIxNSwoQys9Mik+PTI2JiYoQy09MjYsSC0tKSx4PTAhPT1UfHxIIT09dGhpcy5sZW5ndGgtMT9OWzYtRS5sZW5ndGhdK0UreDpFK3h9Zm9yKDAh'@;
put 'PT1UJiYoeD1ULnRvU3RyaW5nKDE2KSt4KTt4Lmxlbmd0aCViIT0wOyl4PSIwIit4O3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZSYmKHg9Ii0iK3gpLHh9aWYocD09PSgwfHApJiZwPj0yJiZwPD0zNil7dmFyIG09TFtwXSxBPUtbcF07eD0iIjt2YXIgYWU9dGhpcy5jbG9uZSgpO2ZvcihhZS5u'@;
put 'ZWdhdGl2ZT0wOyFhZS5pc1plcm8oKTspe3ZhciB0ZT1hZS5tb2RuKEEpLnRvU3RyaW5nKHApO3g9KGFlPWFlLmlkaXZuKEEpKS5pc1plcm8oKT90ZSt4Ok5bbS10ZS5sZW5ndGhdK3RlK3h9Zm9yKHRoaXMuaXNaZXJvKCkmJih4PSIwIit4KTt4Lmxlbmd0aCViIT0wOyl4PSIwIit4O3JldHVy'@;
put 'biAwIT09dGhpcy5uZWdhdGl2ZSYmKHg9Ii0iK3gpLHh9ZyghMSwiQmFzZSBzaG91bGQgYmUgYmV0d2VlbiAyIGFuZCAzNiIpfSx3LnByb3RvdHlwZS50b051bWJlcj1mdW5jdGlvbigpe3ZhciBwPXRoaXMud29yZHNbMF07cmV0dXJuIDI9PT10aGlzLmxlbmd0aD9wKz02NzEwODg2NCp0aGlz'@;
put 'LndvcmRzWzFdOjM9PT10aGlzLmxlbmd0aCYmMT09PXRoaXMud29yZHNbMl0/cCs9NDUwMzU5OTYyNzM3MDQ5Nis2NzEwODg2NCp0aGlzLndvcmRzWzFdOnRoaXMubGVuZ3RoPjImJmcoITEsIk51bWJlciBjYW4gb25seSBzYWZlbHkgc3RvcmUgdXAgdG8gNTMgYml0cyIpLDAhPT10aGlzLm5l'@;
put 'Z2F0aXZlPy1wOnB9LHcucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRvU3RyaW5nKDE2KX0sdy5wcm90b3R5cGUudG9CdWZmZXI9ZnVuY3Rpb24ocCxiKXtyZXR1cm4gZyh0eXBlb2YgUDwidSIpLHRoaXMudG9BcnJheUxpa2UoUCxwLGIpfSx3LnByb3RvdHlwZS50'@;
put 'b0FycmF5PWZ1bmN0aW9uKHAsYil7cmV0dXJuIHRoaXMudG9BcnJheUxpa2UoQXJyYXkscCxiKX0sdy5wcm90b3R5cGUudG9BcnJheUxpa2U9ZnVuY3Rpb24ocCxiLHgpe3ZhciBDPXRoaXMuYnl0ZUxlbmd0aCgpLFQ9eHx8TWF0aC5tYXgoMSxDKTtnKEM8PVQsImJ5dGUgYXJyYXkgbG9uZ2Vy'@;
put 'IHRoYW4gZGVzaXJlZCBsZW5ndGgiKSxnKFQ+MCwiUmVxdWVzdGVkIGFycmF5IGxlbmd0aCA8PSAwIiksdGhpcy5zdHJpcCgpO3ZhciBFLG0sSD0ibGUiPT09YixqPW5ldyBwKFQpLEE9dGhpcy5jbG9uZSgpO2lmKEgpe2ZvcihtPTA7IUEuaXNaZXJvKCk7bSsrKUU9QS5hbmRsbigyNTUpLEEu'@;
put 'aXVzaHJuKDgpLGpbbV09RTtmb3IoO208VDttKyspalttXT0wfWVsc2V7Zm9yKG09MDttPFQtQzttKyspalttXT0wO2ZvcihtPTA7IUEuaXNaZXJvKCk7bSsrKUU9QS5hbmRsbigyNTUpLEEuaXVzaHJuKDgpLGpbVC1tLTFdPUV9cmV0dXJuIGp9LHcucHJvdG90eXBlLl9jb3VudEJpdHM9TWF0'@;
put 'aC5jbHozMj9mdW5jdGlvbihwKXtyZXR1cm4gMzItTWF0aC5jbHozMihwKX06ZnVuY3Rpb24ocCl7dmFyIGI9cCx4PTA7cmV0dXJuIGI+PTQwOTYmJih4Kz0xMyxiPj4+PTEzKSxiPj02NCYmKHgrPTcsYj4+Pj03KSxiPj04JiYoeCs9NCxiPj4+PTQpLGI+PTImJih4Kz0yLGI+Pj49MikseCti'@;
put 'fSx3LnByb3RvdHlwZS5femVyb0JpdHM9ZnVuY3Rpb24ocCl7aWYoMD09PXApcmV0dXJuIDI2O3ZhciBiPXAseD0wO3JldHVybiA4MTkxJmJ8fCh4Kz0xMyxiPj4+PTEzKSwxMjcmYnx8KHgrPTcsYj4+Pj03KSwxNSZifHwoeCs9NCxiPj4+PTQpLDMmYnx8KHgrPTIsYj4+Pj0yKSwxJmJ8fHgr'@;
put 'Kyx4fSx3LnByb3RvdHlwZS5iaXRMZW5ndGg9ZnVuY3Rpb24oKXt2YXIgYj10aGlzLl9jb3VudEJpdHModGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXSk7cmV0dXJuIDI2Kih0aGlzLmxlbmd0aC0xKStifSx3LnByb3RvdHlwZS56ZXJvQml0cz1mdW5jdGlvbigpe2lmKHRoaXMuaXNaZXJvKCkp'@;
put 'cmV0dXJuIDA7Zm9yKHZhciBwPTAsYj0wO2I8dGhpcy5sZW5ndGg7YisrKXt2YXIgeD10aGlzLl96ZXJvQml0cyh0aGlzLndvcmRzW2JdKTtpZihwKz14LDI2IT09eClicmVha31yZXR1cm4gcH0sdy5wcm90b3R5cGUuYnl0ZUxlbmd0aD1mdW5jdGlvbigpe3JldHVybiBNYXRoLmNlaWwodGhp'@;
put 'cy5iaXRMZW5ndGgoKS84KX0sdy5wcm90b3R5cGUudG9Ud29zPWZ1bmN0aW9uKHApe3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZT90aGlzLmFicygpLmlub3RuKHApLmlhZGRuKDEpOnRoaXMuY2xvbmUoKX0sdy5wcm90b3R5cGUuZnJvbVR3b3M9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMudGVz'@;
put 'dG4ocC0xKT90aGlzLm5vdG4ocCkuaWFkZG4oMSkuaW5lZygpOnRoaXMuY2xvbmUoKX0sdy5wcm90b3R5cGUuaXNOZWc9ZnVuY3Rpb24oKXtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmV9LHcucHJvdG90eXBlLm5lZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNsb25lKCkuaW5lZygpfSx3LnBy'@;
put 'b3RvdHlwZS5pbmVnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNaZXJvKCl8fCh0aGlzLm5lZ2F0aXZlXj0xKSx0aGlzfSx3LnByb3RvdHlwZS5pdW9yPWZ1bmN0aW9uKHApe2Zvcig7dGhpcy5sZW5ndGg8cC5sZW5ndGg7KXRoaXMud29yZHNbdGhpcy5sZW5ndGgrK109MDtmb3IodmFyIGI9'@;
put 'MDtiPHAubGVuZ3RoO2IrKyl0aGlzLndvcmRzW2JdPXRoaXMud29yZHNbYl18cC53b3Jkc1tiXTtyZXR1cm4gdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5pb3I9ZnVuY3Rpb24ocCl7cmV0dXJuIGcoISh0aGlzLm5lZ2F0aXZlfHAubmVnYXRpdmUpKSx0aGlzLml1b3IocCl9LHcucHJvdG90'@;
put 'eXBlLm9yPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmxlbmd0aD5wLmxlbmd0aD90aGlzLmNsb25lKCkuaW9yKHApOnAuY2xvbmUoKS5pb3IodGhpcyl9LHcucHJvdG90eXBlLnVvcj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5sZW5ndGg+cC5sZW5ndGg/dGhpcy5jbG9uZSgpLml1b3IocCk6'@;
put 'cC5jbG9uZSgpLml1b3IodGhpcyl9LHcucHJvdG90eXBlLml1YW5kPWZ1bmN0aW9uKHApe3ZhciBiO2I9dGhpcy5sZW5ndGg+cC5sZW5ndGg/cDp0aGlzO2Zvcih2YXIgeD0wO3g8Yi5sZW5ndGg7eCsrKXRoaXMud29yZHNbeF09dGhpcy53b3Jkc1t4XSZwLndvcmRzW3hdO3JldHVybiB0aGlz'@;
put 'Lmxlbmd0aD1iLmxlbmd0aCx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmlhbmQ9ZnVuY3Rpb24ocCl7cmV0dXJuIGcoISh0aGlzLm5lZ2F0aXZlfHAubmVnYXRpdmUpKSx0aGlzLml1YW5kKHApfSx3LnByb3RvdHlwZS5hbmQ9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMubGVuZ3RoPnAubGVu'@;
put 'Z3RoP3RoaXMuY2xvbmUoKS5pYW5kKHApOnAuY2xvbmUoKS5pYW5kKHRoaXMpfSx3LnByb3RvdHlwZS51YW5kPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmxlbmd0aD5wLmxlbmd0aD90aGlzLmNsb25lKCkuaXVhbmQocCk6cC5jbG9uZSgpLml1YW5kKHRoaXMpfSx3LnByb3RvdHlwZS5pdXhv'@;
put 'cj1mdW5jdGlvbihwKXt2YXIgYix4O3RoaXMubGVuZ3RoPnAubGVuZ3RoPyhiPXRoaXMseD1wKTooYj1wLHg9dGhpcyk7Zm9yKHZhciBDPTA7Qzx4Lmxlbmd0aDtDKyspdGhpcy53b3Jkc1tDXT1iLndvcmRzW0NdXngud29yZHNbQ107aWYodGhpcyE9PWIpZm9yKDtDPGIubGVuZ3RoO0MrKyl0'@;
put 'aGlzLndvcmRzW0NdPWIud29yZHNbQ107cmV0dXJuIHRoaXMubGVuZ3RoPWIubGVuZ3RoLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuaXhvcj1mdW5jdGlvbihwKXtyZXR1cm4gZyghKHRoaXMubmVnYXRpdmV8cC5uZWdhdGl2ZSkpLHRoaXMuaXV4b3IocCl9LHcucHJvdG90eXBlLnhvcj1m'@;
put 'dW5jdGlvbihwKXtyZXR1cm4gdGhpcy5sZW5ndGg+cC5sZW5ndGg/dGhpcy5jbG9uZSgpLml4b3IocCk6cC5jbG9uZSgpLml4b3IodGhpcyl9LHcucHJvdG90eXBlLnV4b3I9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMubGVuZ3RoPnAubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdXhvcihwKTpwLmNs'@;
put 'b25lKCkuaXV4b3IodGhpcyl9LHcucHJvdG90eXBlLmlub3RuPWZ1bmN0aW9uKHApe2coIm51bWJlciI9PXR5cGVvZiBwJiZwPj0wKTt2YXIgYj0wfE1hdGguY2VpbChwLzI2KSx4PXAlMjY7dGhpcy5fZXhwYW5kKGIpLHg+MCYmYi0tO2Zvcih2YXIgQz0wO0M8YjtDKyspdGhpcy53b3Jkc1tD'@;
put 'XT02NzEwODg2MyZ+dGhpcy53b3Jkc1tDXTtyZXR1cm4geD4wJiYodGhpcy53b3Jkc1tDXT1+dGhpcy53b3Jkc1tDXSY2NzEwODg2Mz4+MjYteCksdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5ub3RuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaW5vdG4ocCl9LHcucHJvdG90'@;
put 'eXBlLnNldG49ZnVuY3Rpb24ocCxiKXtnKCJudW1iZXIiPT10eXBlb2YgcCYmcD49MCk7dmFyIHg9cC8yNnwwLEM9cCUyNjtyZXR1cm4gdGhpcy5fZXhwYW5kKHgrMSksdGhpcy53b3Jkc1t4XT1iP3RoaXMud29yZHNbeF18MTw8Qzp0aGlzLndvcmRzW3hdJn4oMTw8QyksdGhpcy5zdHJpcCgp'@;
put 'fSx3LnByb3RvdHlwZS5pYWRkPWZ1bmN0aW9uKHApe3ZhciBiLHgsQztpZigwIT09dGhpcy5uZWdhdGl2ZSYmMD09PXAubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCxiPXRoaXMuaXN1YihwKSx0aGlzLm5lZ2F0aXZlXj0xLHRoaXMuX25vcm1TaWduKCk7aWYoMD09PXRoaXMubmVn'@;
put 'YXRpdmUmJjAhPT1wLm5lZ2F0aXZlKXJldHVybiBwLm5lZ2F0aXZlPTAsYj10aGlzLmlzdWIocCkscC5uZWdhdGl2ZT0xLGIuX25vcm1TaWduKCk7dGhpcy5sZW5ndGg+cC5sZW5ndGg/KHg9dGhpcyxDPXApOih4PXAsQz10aGlzKTtmb3IodmFyIFQ9MCxIPTA7SDxDLmxlbmd0aDtIKyspdGhp'@;
put 'cy53b3Jkc1tIXT02NzEwODg2MyYoYj0oMHx4LndvcmRzW0hdKSsoMHxDLndvcmRzW0hdKStUKSxUPWI+Pj4yNjtmb3IoOzAhPT1UJiZIPHgubGVuZ3RoO0grKyl0aGlzLndvcmRzW0hdPTY3MTA4ODYzJihiPSgwfHgud29yZHNbSF0pK1QpLFQ9Yj4+PjI2O2lmKHRoaXMubGVuZ3RoPXgubGVu'@;
put 'Z3RoLDAhPT1UKXRoaXMud29yZHNbdGhpcy5sZW5ndGhdPVQsdGhpcy5sZW5ndGgrKztlbHNlIGlmKHghPT10aGlzKWZvcig7SDx4Lmxlbmd0aDtIKyspdGhpcy53b3Jkc1tIXT14LndvcmRzW0hdO3JldHVybiB0aGlzfSx3LnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24ocCl7dmFyIGI7cmV0dXJu'@;
put 'IDAhPT1wLm5lZ2F0aXZlJiYwPT09dGhpcy5uZWdhdGl2ZT8ocC5uZWdhdGl2ZT0wLGI9dGhpcy5zdWIocCkscC5uZWdhdGl2ZV49MSxiKTowPT09cC5uZWdhdGl2ZSYmMCE9PXRoaXMubmVnYXRpdmU/KHRoaXMubmVnYXRpdmU9MCxiPXAuc3ViKHRoaXMpLHRoaXMubmVnYXRpdmU9MSxiKTp0'@;
put 'aGlzLmxlbmd0aD5wLmxlbmd0aD90aGlzLmNsb25lKCkuaWFkZChwKTpwLmNsb25lKCkuaWFkZCh0aGlzKX0sdy5wcm90b3R5cGUuaXN1Yj1mdW5jdGlvbihwKXtpZigwIT09cC5uZWdhdGl2ZSl7cC5uZWdhdGl2ZT0wO3ZhciBiPXRoaXMuaWFkZChwKTtyZXR1cm4gcC5uZWdhdGl2ZT0xLGIu'@;
put 'X25vcm1TaWduKCl9aWYoMCE9PXRoaXMubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmlhZGQocCksdGhpcy5uZWdhdGl2ZT0xLHRoaXMuX25vcm1TaWduKCk7dmFyIEMsVCx4PXRoaXMuY21wKHApO2lmKDA9PT14KXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5sZW5n'@;
put 'dGg9MSx0aGlzLndvcmRzWzBdPTAsdGhpczt4PjA/KEM9dGhpcyxUPXApOihDPXAsVD10aGlzKTtmb3IodmFyIEg9MCxqPTA7ajxULmxlbmd0aDtqKyspSD0oYj0oMHxDLndvcmRzW2pdKS0oMHxULndvcmRzW2pdKStIKT4+MjYsdGhpcy53b3Jkc1tqXT02NzEwODg2MyZiO2Zvcig7MCE9PUgm'@;
put 'Jmo8Qy5sZW5ndGg7aisrKUg9KGI9KDB8Qy53b3Jkc1tqXSkrSCk+PjI2LHRoaXMud29yZHNbal09NjcxMDg4NjMmYjtpZigwPT09SCYmajxDLmxlbmd0aCYmQyE9PXRoaXMpZm9yKDtqPEMubGVuZ3RoO2orKyl0aGlzLndvcmRzW2pdPUMud29yZHNbal07cmV0dXJuIHRoaXMubGVuZ3RoPU1h'@;
put 'dGgubWF4KHRoaXMubGVuZ3RoLGopLEMhPT10aGlzJiYodGhpcy5uZWdhdGl2ZT0xKSx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLnN1Yj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzdWIocCl9O3ZhciBZPWZ1bmN0aW9uKHAsYix4KXt2YXIgRSxtLEEsQz1wLndvcmRzLFQ9'@;
put 'Yi53b3JkcyxIPXgud29yZHMsaj0wLGFlPTB8Q1swXSx0ZT04MTkxJmFlLHNlPWFlPj4+MTMsd2U9MHxDWzFdLFVlPTgxOTEmd2UsSmU9d2U+Pj4xMyxvdD0wfENbMl0seGU9ODE5MSZvdCx2ZT1vdD4+PjEzLFhlPTB8Q1szXSx6ZT04MTkxJlhlLERlPVhlPj4+MTMsRmU9MHxDWzRdLE9lPTgx'@;
put 'OTEmRmUsSWU9RmU+Pj4xMyxWZT0wfENbNV0sa2U9ODE5MSZWZSxBZT1WZT4+PjEzLF90PTB8Q1s2XSxudD04MTkxJl90LFFlPV90Pj4+MTMsdW49MHxDWzddLHl0PTgxOTEmdW4sTXQ9dW4+Pj4xMyxEdD0wfENbOF0saXQ9ODE5MSZEdCwkZT1EdD4+PjEzLHR0PTB8Q1s5XSxIZT04MTkxJnR0'@;
put 'LHV0PXR0Pj4+MTMscXQ9MHxUWzBdLFJ0PTgxOTEmcXQsUHQ9cXQ+Pj4xMyxjaT0wfFRbMV0sUXQ9ODE5MSZjaSxzbj1jaT4+PjEzLFJpPTB8VFsyXSxobj04MTkxJlJpLGZ0PVJpPj4+MTMsT3I9MHxUWzNdLFd0PTgxOTEmT3IsQXQ9T3I+Pj4xMyxSbj0wfFRbNF0sc3Q9ODE5MSZSbixVdD1S'@;
put 'bj4+PjEzLHJpPTB8VFs1XSxXZT04MTkxJnJpLFR0PXJpPj4+MTMsbnI9MHxUWzZdLGh0PTgxOTEmbnIseHQ9bnI+Pj4xMyxqbj0wfFRbN10scm49ODE5MSZqbix6dD1qbj4+PjEzLGhpPTB8VFs4XSxjbj04MTkxJmhpLGZuPWhpPj4+MTMsSWk9MHxUWzldLFh0PTgxOTEmSWksZW49SWk+Pj4x'@;
put 'Mzt4Lm5lZ2F0aXZlPXAubmVnYXRpdmVeYi5uZWdhdGl2ZSx4Lmxlbmd0aD0xOTt2YXIgdWE9KGorKEU9TWF0aC5pbXVsKHRlLFJ0KSl8MCkrKCg4MTkxJihtPShtPU1hdGguaW11bCh0ZSxQdCkpK01hdGguaW11bChzZSxSdCl8MCkpPDwxMyl8MDtqPSgoQT1NYXRoLmltdWwoc2UsUHQpKSso'@;
put 'bT4+PjEzKXwwKSsodWE+Pj4yNil8MCx1YSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoVWUsUnQpLG09KG09TWF0aC5pbXVsKFVlLFB0KSkrTWF0aC5pbXVsKEplLFJ0KXwwLEE9TWF0aC5pbXVsKEplLFB0KTt2YXIgRWk9KGorKEU9RStNYXRoLmltdWwodGUsUXQpfDApfDApKygoODE5MSYobT0o'@;
put 'bT1tK01hdGguaW11bCh0ZSxzbil8MCkrTWF0aC5pbXVsKHNlLFF0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLHNuKXwwKSsobT4+PjEzKXwwKSsoRWk+Pj4yNil8MCxFaSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoeGUsUnQpLG09KG09TWF0aC5pbXVsKHhlLFB0KSkrTWF0aC5p'@;
put 'bXVsKHZlLFJ0KXwwLEE9TWF0aC5pbXVsKHZlLFB0KSxFPUUrTWF0aC5pbXVsKFVlLFF0KXwwLG09KG09bStNYXRoLmltdWwoVWUsc24pfDApK01hdGguaW11bChKZSxRdCl8MCxBPUErTWF0aC5pbXVsKEplLHNuKXwwO3ZhciB2cj0oaisoRT1FK01hdGguaW11bCh0ZSxobil8MCl8MCkrKCg4'@;
put 'MTkxJihtPShtPW0rTWF0aC5pbXVsKHRlLGZ0KXwwKStNYXRoLmltdWwoc2UsaG4pfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2UsZnQpfDApKyhtPj4+MTMpfDApKyh2cj4+PjI2KXwwLHZyJj02NzEwODg2MyxFPU1hdGguaW11bCh6ZSxSdCksbT0obT1NYXRoLmltdWwoemUsUHQp'@;
put 'KStNYXRoLmltdWwoRGUsUnQpfDAsQT1NYXRoLmltdWwoRGUsUHQpLEU9RStNYXRoLmltdWwoeGUsUXQpfDAsbT0obT1tK01hdGguaW11bCh4ZSxzbil8MCkrTWF0aC5pbXVsKHZlLFF0KXwwLEE9QStNYXRoLmltdWwodmUsc24pfDAsRT1FK01hdGguaW11bChVZSxobil8MCxtPShtPW0rTWF0'@;
put 'aC5pbXVsKFVlLGZ0KXwwKStNYXRoLmltdWwoSmUsaG4pfDAsQT1BK01hdGguaW11bChKZSxmdCl8MDt2YXIgV249KGorKEU9RStNYXRoLmltdWwodGUsV3QpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh0ZSxBdCl8MCkrTWF0aC5pbXVsKHNlLFd0KXwwKSk8PDEzKXwwO2o9KChB'@;
put 'PUErTWF0aC5pbXVsKHNlLEF0KXwwKSsobT4+PjEzKXwwKSsoV24+Pj4yNil8MCxXbiY9NjcxMDg4NjMsRT1NYXRoLmltdWwoT2UsUnQpLG09KG09TWF0aC5pbXVsKE9lLFB0KSkrTWF0aC5pbXVsKEllLFJ0KXwwLEE9TWF0aC5pbXVsKEllLFB0KSxFPUUrTWF0aC5pbXVsKHplLFF0KXwwLG09'@;
put 'KG09bStNYXRoLmltdWwoemUsc24pfDApK01hdGguaW11bChEZSxRdCl8MCxBPUErTWF0aC5pbXVsKERlLHNuKXwwLEU9RStNYXRoLmltdWwoeGUsaG4pfDAsbT0obT1tK01hdGguaW11bCh4ZSxmdCl8MCkrTWF0aC5pbXVsKHZlLGhuKXwwLEE9QStNYXRoLmltdWwodmUsZnQpfDAsRT1FK01h'@;
put 'dGguaW11bChVZSxXdCl8MCxtPShtPW0rTWF0aC5pbXVsKFVlLEF0KXwwKStNYXRoLmltdWwoSmUsV3QpfDAsQT1BK01hdGguaW11bChKZSxBdCl8MDt2YXIgJGk9KGorKEU9RStNYXRoLmltdWwodGUsc3QpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh0ZSxVdCl8MCkrTWF0aC5p'@;
put 'bXVsKHNlLHN0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLFV0KXwwKSsobT4+PjEzKXwwKSsoJGk+Pj4yNil8MCwkaSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoa2UsUnQpLG09KG09TWF0aC5pbXVsKGtlLFB0KSkrTWF0aC5pbXVsKEFlLFJ0KXwwLEE9TWF0aC5pbXVsKEFlLFB0'@;
put 'KSxFPUUrTWF0aC5pbXVsKE9lLFF0KXwwLG09KG09bStNYXRoLmltdWwoT2Usc24pfDApK01hdGguaW11bChJZSxRdCl8MCxBPUErTWF0aC5pbXVsKEllLHNuKXwwLEU9RStNYXRoLmltdWwoemUsaG4pfDAsbT0obT1tK01hdGguaW11bCh6ZSxmdCl8MCkrTWF0aC5pbXVsKERlLGhuKXwwLEE9'@;
put 'QStNYXRoLmltdWwoRGUsZnQpfDAsRT1FK01hdGguaW11bCh4ZSxXdCl8MCxtPShtPW0rTWF0aC5pbXVsKHhlLEF0KXwwKStNYXRoLmltdWwodmUsV3QpfDAsQT1BK01hdGguaW11bCh2ZSxBdCl8MCxFPUUrTWF0aC5pbXVsKFVlLHN0KXwwLG09KG09bStNYXRoLmltdWwoVWUsVXQpfDApK01h'@;
put 'dGguaW11bChKZSxzdCl8MCxBPUErTWF0aC5pbXVsKEplLFV0KXwwO3ZhciBlaT0oaisoRT1FK01hdGguaW11bCh0ZSxXZSl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKHRlLFR0KXwwKStNYXRoLmltdWwoc2UsV2UpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2UsVHQp'@;
put 'fDApKyhtPj4+MTMpfDApKyhlaT4+PjI2KXwwLGVpJj02NzEwODg2MyxFPU1hdGguaW11bChudCxSdCksbT0obT1NYXRoLmltdWwobnQsUHQpKStNYXRoLmltdWwoUWUsUnQpfDAsQT1NYXRoLmltdWwoUWUsUHQpLEU9RStNYXRoLmltdWwoa2UsUXQpfDAsbT0obT1tK01hdGguaW11bChrZSxz'@;
put 'bil8MCkrTWF0aC5pbXVsKEFlLFF0KXwwLEE9QStNYXRoLmltdWwoQWUsc24pfDAsRT1FK01hdGguaW11bChPZSxobil8MCxtPShtPW0rTWF0aC5pbXVsKE9lLGZ0KXwwKStNYXRoLmltdWwoSWUsaG4pfDAsQT1BK01hdGguaW11bChJZSxmdCl8MCxFPUUrTWF0aC5pbXVsKHplLFd0KXwwLG09'@;
put 'KG09bStNYXRoLmltdWwoemUsQXQpfDApK01hdGguaW11bChEZSxXdCl8MCxBPUErTWF0aC5pbXVsKERlLEF0KXwwLEU9RStNYXRoLmltdWwoeGUsc3QpfDAsbT0obT1tK01hdGguaW11bCh4ZSxVdCl8MCkrTWF0aC5pbXVsKHZlLHN0KXwwLEE9QStNYXRoLmltdWwodmUsVXQpfDAsRT1FK01h'@;
put 'dGguaW11bChVZSxXZSl8MCxtPShtPW0rTWF0aC5pbXVsKFVlLFR0KXwwKStNYXRoLmltdWwoSmUsV2UpfDAsQT1BK01hdGguaW11bChKZSxUdCl8MDt2YXIgUXI9KGorKEU9RStNYXRoLmltdWwodGUsaHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh0ZSx4dCl8MCkrTWF0aC5p'@;
put 'bXVsKHNlLGh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLHh0KXwwKSsobT4+PjEzKXwwKSsoUXI+Pj4yNil8MCxRciY9NjcxMDg4NjMsRT1NYXRoLmltdWwoeXQsUnQpLG09KG09TWF0aC5pbXVsKHl0LFB0KSkrTWF0aC5pbXVsKE10LFJ0KXwwLEE9TWF0aC5pbXVsKE10LFB0'@;
put 'KSxFPUUrTWF0aC5pbXVsKG50LFF0KXwwLG09KG09bStNYXRoLmltdWwobnQsc24pfDApK01hdGguaW11bChRZSxRdCl8MCxBPUErTWF0aC5pbXVsKFFlLHNuKXwwLEU9RStNYXRoLmltdWwoa2UsaG4pfDAsbT0obT1tK01hdGguaW11bChrZSxmdCl8MCkrTWF0aC5pbXVsKEFlLGhuKXwwLEE9'@;
put 'QStNYXRoLmltdWwoQWUsZnQpfDAsRT1FK01hdGguaW11bChPZSxXdCl8MCxtPShtPW0rTWF0aC5pbXVsKE9lLEF0KXwwKStNYXRoLmltdWwoSWUsV3QpfDAsQT1BK01hdGguaW11bChJZSxBdCl8MCxFPUUrTWF0aC5pbXVsKHplLHN0KXwwLG09KG09bStNYXRoLmltdWwoemUsVXQpfDApK01h'@;
put 'dGguaW11bChEZSxzdCl8MCxBPUErTWF0aC5pbXVsKERlLFV0KXwwLEU9RStNYXRoLmltdWwoeGUsV2UpfDAsbT0obT1tK01hdGguaW11bCh4ZSxUdCl8MCkrTWF0aC5pbXVsKHZlLFdlKXwwLEE9QStNYXRoLmltdWwodmUsVHQpfDAsRT1FK01hdGguaW11bChVZSxodCl8MCxtPShtPW0rTWF0'@;
put 'aC5pbXVsKFVlLHh0KXwwKStNYXRoLmltdWwoSmUsaHQpfDAsQT1BK01hdGguaW11bChKZSx4dCl8MDt2YXIgVmk9KGorKEU9RStNYXRoLmltdWwodGUscm4pfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh0ZSx6dCl8MCkrTWF0aC5pbXVsKHNlLHJuKXwwKSk8PDEzKXwwO2o9KChB'@;
put 'PUErTWF0aC5pbXVsKHNlLHp0KXwwKSsobT4+PjEzKXwwKSsoVmk+Pj4yNil8MCxWaSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoaXQsUnQpLG09KG09TWF0aC5pbXVsKGl0LFB0KSkrTWF0aC5pbXVsKCRlLFJ0KXwwLEE9TWF0aC5pbXVsKCRlLFB0KSxFPUUrTWF0aC5pbXVsKHl0LFF0KXwwLG09'@;
put 'KG09bStNYXRoLmltdWwoeXQsc24pfDApK01hdGguaW11bChNdCxRdCl8MCxBPUErTWF0aC5pbXVsKE10LHNuKXwwLEU9RStNYXRoLmltdWwobnQsaG4pfDAsbT0obT1tK01hdGguaW11bChudCxmdCl8MCkrTWF0aC5pbXVsKFFlLGhuKXwwLEE9QStNYXRoLmltdWwoUWUsZnQpfDAsRT1FK01h'@;
put 'dGguaW11bChrZSxXdCl8MCxtPShtPW0rTWF0aC5pbXVsKGtlLEF0KXwwKStNYXRoLmltdWwoQWUsV3QpfDAsQT1BK01hdGguaW11bChBZSxBdCl8MCxFPUUrTWF0aC5pbXVsKE9lLHN0KXwwLG09KG09bStNYXRoLmltdWwoT2UsVXQpfDApK01hdGguaW11bChJZSxzdCl8MCxBPUErTWF0aC5p'@;
put 'bXVsKEllLFV0KXwwLEU9RStNYXRoLmltdWwoemUsV2UpfDAsbT0obT1tK01hdGguaW11bCh6ZSxUdCl8MCkrTWF0aC5pbXVsKERlLFdlKXwwLEE9QStNYXRoLmltdWwoRGUsVHQpfDAsRT1FK01hdGguaW11bCh4ZSxodCl8MCxtPShtPW0rTWF0aC5pbXVsKHhlLHh0KXwwKStNYXRoLmltdWwo'@;
put 'dmUsaHQpfDAsQT1BK01hdGguaW11bCh2ZSx4dCl8MCxFPUUrTWF0aC5pbXVsKFVlLHJuKXwwLG09KG09bStNYXRoLmltdWwoVWUsenQpfDApK01hdGguaW11bChKZSxybil8MCxBPUErTWF0aC5pbXVsKEplLHp0KXwwO3ZhciBOaT0oaisoRT1FK01hdGguaW11bCh0ZSxjbil8MCl8MCkrKCg4'@;
put 'MTkxJihtPShtPW0rTWF0aC5pbXVsKHRlLGZuKXwwKStNYXRoLmltdWwoc2UsY24pfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2UsZm4pfDApKyhtPj4+MTMpfDApKyhOaT4+PjI2KXwwLE5pJj02NzEwODg2MyxFPU1hdGguaW11bChIZSxSdCksbT0obT1NYXRoLmltdWwoSGUsUHQp'@;
put 'KStNYXRoLmltdWwodXQsUnQpfDAsQT1NYXRoLmltdWwodXQsUHQpLEU9RStNYXRoLmltdWwoaXQsUXQpfDAsbT0obT1tK01hdGguaW11bChpdCxzbil8MCkrTWF0aC5pbXVsKCRlLFF0KXwwLEE9QStNYXRoLmltdWwoJGUsc24pfDAsRT1FK01hdGguaW11bCh5dCxobil8MCxtPShtPW0rTWF0'@;
put 'aC5pbXVsKHl0LGZ0KXwwKStNYXRoLmltdWwoTXQsaG4pfDAsQT1BK01hdGguaW11bChNdCxmdCl8MCxFPUUrTWF0aC5pbXVsKG50LFd0KXwwLG09KG09bStNYXRoLmltdWwobnQsQXQpfDApK01hdGguaW11bChRZSxXdCl8MCxBPUErTWF0aC5pbXVsKFFlLEF0KXwwLEU9RStNYXRoLmltdWwo'@;
put 'a2Usc3QpfDAsbT0obT1tK01hdGguaW11bChrZSxVdCl8MCkrTWF0aC5pbXVsKEFlLHN0KXwwLEE9QStNYXRoLmltdWwoQWUsVXQpfDAsRT1FK01hdGguaW11bChPZSxXZSl8MCxtPShtPW0rTWF0aC5pbXVsKE9lLFR0KXwwKStNYXRoLmltdWwoSWUsV2UpfDAsQT1BK01hdGguaW11bChJZSxU'@;
put 'dCl8MCxFPUUrTWF0aC5pbXVsKHplLGh0KXwwLG09KG09bStNYXRoLmltdWwoemUseHQpfDApK01hdGguaW11bChEZSxodCl8MCxBPUErTWF0aC5pbXVsKERlLHh0KXwwLEU9RStNYXRoLmltdWwoeGUscm4pfDAsbT0obT1tK01hdGguaW11bCh4ZSx6dCl8MCkrTWF0aC5pbXVsKHZlLHJuKXww'@;
put 'LEE9QStNYXRoLmltdWwodmUsenQpfDAsRT1FK01hdGguaW11bChVZSxjbil8MCxtPShtPW0rTWF0aC5pbXVsKFVlLGZuKXwwKStNYXRoLmltdWwoSmUsY24pfDAsQT1BK01hdGguaW11bChKZSxmbil8MDt2YXIgRGE9KGorKEU9RStNYXRoLmltdWwodGUsWHQpfDApfDApKygoODE5MSYobT0o'@;
put 'bT1tK01hdGguaW11bCh0ZSxlbil8MCkrTWF0aC5pbXVsKHNlLFh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLGVuKXwwKSsobT4+PjEzKXwwKSsoRGE+Pj4yNil8MCxEYSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSGUsUXQpLG09KG09TWF0aC5pbXVsKEhlLHNuKSkrTWF0aC5p'@;
put 'bXVsKHV0LFF0KXwwLEE9TWF0aC5pbXVsKHV0LHNuKSxFPUUrTWF0aC5pbXVsKGl0LGhuKXwwLG09KG09bStNYXRoLmltdWwoaXQsZnQpfDApK01hdGguaW11bCgkZSxobil8MCxBPUErTWF0aC5pbXVsKCRlLGZ0KXwwLEU9RStNYXRoLmltdWwoeXQsV3QpfDAsbT0obT1tK01hdGguaW11bCh5'@;
put 'dCxBdCl8MCkrTWF0aC5pbXVsKE10LFd0KXwwLEE9QStNYXRoLmltdWwoTXQsQXQpfDAsRT1FK01hdGguaW11bChudCxzdCl8MCxtPShtPW0rTWF0aC5pbXVsKG50LFV0KXwwKStNYXRoLmltdWwoUWUsc3QpfDAsQT1BK01hdGguaW11bChRZSxVdCl8MCxFPUUrTWF0aC5pbXVsKGtlLFdlKXww'@;
put 'LG09KG09bStNYXRoLmltdWwoa2UsVHQpfDApK01hdGguaW11bChBZSxXZSl8MCxBPUErTWF0aC5pbXVsKEFlLFR0KXwwLEU9RStNYXRoLmltdWwoT2UsaHQpfDAsbT0obT1tK01hdGguaW11bChPZSx4dCl8MCkrTWF0aC5pbXVsKEllLGh0KXwwLEE9QStNYXRoLmltdWwoSWUseHQpfDAsRT1F'@;
put 'K01hdGguaW11bCh6ZSxybil8MCxtPShtPW0rTWF0aC5pbXVsKHplLHp0KXwwKStNYXRoLmltdWwoRGUscm4pfDAsQT1BK01hdGguaW11bChEZSx6dCl8MCxFPUUrTWF0aC5pbXVsKHhlLGNuKXwwLG09KG09bStNYXRoLmltdWwoeGUsZm4pfDApK01hdGguaW11bCh2ZSxjbil8MCxBPUErTWF0'@;
put 'aC5pbXVsKHZlLGZuKXwwO3ZhciBMcj0oaisoRT1FK01hdGguaW11bChVZSxYdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKFVlLGVuKXwwKStNYXRoLmltdWwoSmUsWHQpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoSmUsZW4pfDApKyhtPj4+MTMpfDApKyhMcj4+PjI2'@;
put 'KXwwLExyJj02NzEwODg2MyxFPU1hdGguaW11bChIZSxobiksbT0obT1NYXRoLmltdWwoSGUsZnQpKStNYXRoLmltdWwodXQsaG4pfDAsQT1NYXRoLmltdWwodXQsZnQpLEU9RStNYXRoLmltdWwoaXQsV3QpfDAsbT0obT1tK01hdGguaW11bChpdCxBdCl8MCkrTWF0aC5pbXVsKCRlLFd0KXww'@;
put 'LEE9QStNYXRoLmltdWwoJGUsQXQpfDAsRT1FK01hdGguaW11bCh5dCxzdCl8MCxtPShtPW0rTWF0aC5pbXVsKHl0LFV0KXwwKStNYXRoLmltdWwoTXQsc3QpfDAsQT1BK01hdGguaW11bChNdCxVdCl8MCxFPUUrTWF0aC5pbXVsKG50LFdlKXwwLG09KG09bStNYXRoLmltdWwobnQsVHQpfDAp'@;
put 'K01hdGguaW11bChRZSxXZSl8MCxBPUErTWF0aC5pbXVsKFFlLFR0KXwwLEU9RStNYXRoLmltdWwoa2UsaHQpfDAsbT0obT1tK01hdGguaW11bChrZSx4dCl8MCkrTWF0aC5pbXVsKEFlLGh0KXwwLEE9QStNYXRoLmltdWwoQWUseHQpfDAsRT1FK01hdGguaW11bChPZSxybil8MCxtPShtPW0r'@;
put 'TWF0aC5pbXVsKE9lLHp0KXwwKStNYXRoLmltdWwoSWUscm4pfDAsQT1BK01hdGguaW11bChJZSx6dCl8MCxFPUUrTWF0aC5pbXVsKHplLGNuKXwwLG09KG09bStNYXRoLmltdWwoemUsZm4pfDApK01hdGguaW11bChEZSxjbil8MCxBPUErTWF0aC5pbXVsKERlLGZuKXwwO3ZhciBXaT0oaiso'@;
put 'RT1FK01hdGguaW11bCh4ZSxYdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKHhlLGVuKXwwKStNYXRoLmltdWwodmUsWHQpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwodmUsZW4pfDApKyhtPj4+MTMpfDApKyhXaT4+PjI2KXwwLFdpJj02NzEwODg2MyxFPU1hdGguaW11'@;
put 'bChIZSxXdCksbT0obT1NYXRoLmltdWwoSGUsQXQpKStNYXRoLmltdWwodXQsV3QpfDAsQT1NYXRoLmltdWwodXQsQXQpLEU9RStNYXRoLmltdWwoaXQsc3QpfDAsbT0obT1tK01hdGguaW11bChpdCxVdCl8MCkrTWF0aC5pbXVsKCRlLHN0KXwwLEE9QStNYXRoLmltdWwoJGUsVXQpfDAsRT1F'@;
put 'K01hdGguaW11bCh5dCxXZSl8MCxtPShtPW0rTWF0aC5pbXVsKHl0LFR0KXwwKStNYXRoLmltdWwoTXQsV2UpfDAsQT1BK01hdGguaW11bChNdCxUdCl8MCxFPUUrTWF0aC5pbXVsKG50LGh0KXwwLG09KG09bStNYXRoLmltdWwobnQseHQpfDApK01hdGguaW11bChRZSxodCl8MCxBPUErTWF0'@;
put 'aC5pbXVsKFFlLHh0KXwwLEU9RStNYXRoLmltdWwoa2Uscm4pfDAsbT0obT1tK01hdGguaW11bChrZSx6dCl8MCkrTWF0aC5pbXVsKEFlLHJuKXwwLEE9QStNYXRoLmltdWwoQWUsenQpfDAsRT1FK01hdGguaW11bChPZSxjbil8MCxtPShtPW0rTWF0aC5pbXVsKE9lLGZuKXwwKStNYXRoLmlt'@;
put 'dWwoSWUsY24pfDAsQT1BK01hdGguaW11bChJZSxmbil8MDt2YXIgcGE9KGorKEU9RStNYXRoLmltdWwoemUsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh6ZSxlbil8MCkrTWF0aC5pbXVsKERlLFh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKERlLGVuKXwwKSso'@;
put 'bT4+PjEzKXwwKSsocGE+Pj4yNil8MCxwYSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSGUsc3QpLG09KG09TWF0aC5pbXVsKEhlLFV0KSkrTWF0aC5pbXVsKHV0LHN0KXwwLEE9TWF0aC5pbXVsKHV0LFV0KSxFPUUrTWF0aC5pbXVsKGl0LFdlKXwwLG09KG09bStNYXRoLmltdWwoaXQsVHQpfDAp'@;
put 'K01hdGguaW11bCgkZSxXZSl8MCxBPUErTWF0aC5pbXVsKCRlLFR0KXwwLEU9RStNYXRoLmltdWwoeXQsaHQpfDAsbT0obT1tK01hdGguaW11bCh5dCx4dCl8MCkrTWF0aC5pbXVsKE10LGh0KXwwLEE9QStNYXRoLmltdWwoTXQseHQpfDAsRT1FK01hdGguaW11bChudCxybil8MCxtPShtPW0r'@;
put 'TWF0aC5pbXVsKG50LHp0KXwwKStNYXRoLmltdWwoUWUscm4pfDAsQT1BK01hdGguaW11bChRZSx6dCl8MCxFPUUrTWF0aC5pbXVsKGtlLGNuKXwwLG09KG09bStNYXRoLmltdWwoa2UsZm4pfDApK01hdGguaW11bChBZSxjbil8MCxBPUErTWF0aC5pbXVsKEFlLGZuKXwwO3ZhciBRbj0oaiso'@;
put 'RT1FK01hdGguaW11bChPZSxYdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKE9lLGVuKXwwKStNYXRoLmltdWwoSWUsWHQpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoSWUsZW4pfDApKyhtPj4+MTMpfDApKyhRbj4+PjI2KXwwLFFuJj02NzEwODg2MyxFPU1hdGguaW11'@;
put 'bChIZSxXZSksbT0obT1NYXRoLmltdWwoSGUsVHQpKStNYXRoLmltdWwodXQsV2UpfDAsQT1NYXRoLmltdWwodXQsVHQpLEU9RStNYXRoLmltdWwoaXQsaHQpfDAsbT0obT1tK01hdGguaW11bChpdCx4dCl8MCkrTWF0aC5pbXVsKCRlLGh0KXwwLEE9QStNYXRoLmltdWwoJGUseHQpfDAsRT1F'@;
put 'K01hdGguaW11bCh5dCxybil8MCxtPShtPW0rTWF0aC5pbXVsKHl0LHp0KXwwKStNYXRoLmltdWwoTXQscm4pfDAsQT1BK01hdGguaW11bChNdCx6dCl8MCxFPUUrTWF0aC5pbXVsKG50LGNuKXwwLG09KG09bStNYXRoLmltdWwobnQsZm4pfDApK01hdGguaW11bChRZSxjbil8MCxBPUErTWF0'@;
put 'aC5pbXVsKFFlLGZuKXwwO3ZhciBsYT0oaisoRT1FK01hdGguaW11bChrZSxYdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKGtlLGVuKXwwKStNYXRoLmltdWwoQWUsWHQpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoQWUsZW4pfDApKyhtPj4+MTMpfDApKyhsYT4+PjI2'@;
put 'KXwwLGxhJj02NzEwODg2MyxFPU1hdGguaW11bChIZSxodCksbT0obT1NYXRoLmltdWwoSGUseHQpKStNYXRoLmltdWwodXQsaHQpfDAsQT1NYXRoLmltdWwodXQseHQpLEU9RStNYXRoLmltdWwoaXQscm4pfDAsbT0obT1tK01hdGguaW11bChpdCx6dCl8MCkrTWF0aC5pbXVsKCRlLHJuKXww'@;
put 'LEE9QStNYXRoLmltdWwoJGUsenQpfDAsRT1FK01hdGguaW11bCh5dCxjbil8MCxtPShtPW0rTWF0aC5pbXVsKHl0LGZuKXwwKStNYXRoLmltdWwoTXQsY24pfDAsQT1BK01hdGguaW11bChNdCxmbil8MDt2YXIgeWE9KGorKEU9RStNYXRoLmltdWwobnQsWHQpfDApfDApKygoODE5MSYobT0o'@;
put 'bT1tK01hdGguaW11bChudCxlbil8MCkrTWF0aC5pbXVsKFFlLFh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKFFlLGVuKXwwKSsobT4+PjEzKXwwKSsoeWE+Pj4yNil8MCx5YSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSGUscm4pLG09KG09TWF0aC5pbXVsKEhlLHp0KSkrTWF0aC5p'@;
put 'bXVsKHV0LHJuKXwwLEE9TWF0aC5pbXVsKHV0LHp0KSxFPUUrTWF0aC5pbXVsKGl0LGNuKXwwLG09KG09bStNYXRoLmltdWwoaXQsZm4pfDApK01hdGguaW11bCgkZSxjbil8MCxBPUErTWF0aC5pbXVsKCRlLGZuKXwwO3ZhciBMYT0oaisoRT1FK01hdGguaW11bCh5dCxYdCl8MCl8MCkrKCg4'@;
put 'MTkxJihtPShtPW0rTWF0aC5pbXVsKHl0LGVuKXwwKStNYXRoLmltdWwoTXQsWHQpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoTXQsZW4pfDApKyhtPj4+MTMpfDApKyhMYT4+PjI2KXwwLExhJj02NzEwODg2MyxFPU1hdGguaW11bChIZSxjbiksbT0obT1NYXRoLmltdWwoSGUsZm4p'@;
put 'KStNYXRoLmltdWwodXQsY24pfDAsQT1NYXRoLmltdWwodXQsZm4pO3ZhciBGYT0oaisoRT1FK01hdGguaW11bChpdCxYdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKGl0LGVuKXwwKStNYXRoLmltdWwoJGUsWHQpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoJGUsZW4p'@;
put 'fDApKyhtPj4+MTMpfDApKyhGYT4+PjI2KXwwLEZhJj02NzEwODg2Mzt2YXIgdGk9KGorKEU9TWF0aC5pbXVsKEhlLFh0KSl8MCkrKCg4MTkxJihtPShtPU1hdGguaW11bChIZSxlbikpK01hdGguaW11bCh1dCxYdCl8MCkpPDwxMyl8MDtyZXR1cm4gaj0oKEE9TWF0aC5pbXVsKHV0LGVuKSkr'@;
put 'KG0+Pj4xMyl8MCkrKHRpPj4+MjYpfDAsdGkmPTY3MTA4ODYzLEhbMF09dWEsSFsxXT1FaSxIWzJdPXZyLEhbM109V24sSFs0XT0kaSxIWzVdPWVpLEhbNl09UXIsSFs3XT1WaSxIWzhdPU5pLEhbOV09RGEsSFsxMF09THIsSFsxMV09V2ksSFsxMl09cGEsSFsxM109UW4sSFsxNF09bGEsSFsx'@;
put 'NV09eWEsSFsxNl09TGEsSFsxN109RmEsSFsxOF09dGksMCE9PWomJihIWzE5XT1qLHgubGVuZ3RoKyspLHh9O2Z1bmN0aW9uIGVlKFYscCxiKXtyZXR1cm4obmV3IEopLm11bHAoVixwLGIpfWZ1bmN0aW9uIEooVixwKXt0aGlzLng9Vix0aGlzLnk9cH1NYXRoLmltdWx8fChZPVcpLHcucHJv'@;
put 'dG90eXBlLm11bFRvPWZ1bmN0aW9uKHAsYil7dmFyIHgsQz10aGlzLmxlbmd0aCtwLmxlbmd0aDtyZXR1cm4geD0xMD09PXRoaXMubGVuZ3RoJiYxMD09PXAubGVuZ3RoP1kodGhpcyxwLGIpOkM8NjM/Vyh0aGlzLHAsYik6QzwxMDI0P2Z1bmN0aW9uIHEoVixwLGIpe2IubmVnYXRpdmU9cC5u'@;
put 'ZWdhdGl2ZV5WLm5lZ2F0aXZlLGIubGVuZ3RoPVYubGVuZ3RoK3AubGVuZ3RoO2Zvcih2YXIgeD0wLEM9MCxUPTA7VDxiLmxlbmd0aC0xO1QrKyl7dmFyIEg9QztDPTA7Zm9yKHZhciBqPTY3MTA4ODYzJngsRT1NYXRoLm1pbihULHAubGVuZ3RoLTEpLG09TWF0aC5tYXgoMCxULVYubGVuZ3Ro'@;
put 'KzEpO208PUU7bSsrKXt2YXIgc2U9KDB8Vi53b3Jkc1tULW1dKSooMHxwLndvcmRzW21dKSx3ZT02NzEwODg2MyZzZTtqPTY3MTA4ODYzJih3ZT13ZStqfDApLEMrPShIPShIPUgrKHNlLzY3MTA4ODY0fDApfDApKyh3ZT4+PjI2KXwwKT4+PjI2LEgmPTY3MTA4ODYzfWIud29yZHNbVF09aix4'@;
put 'PUgsSD1DfXJldHVybiAwIT09eD9iLndvcmRzW1RdPXg6Yi5sZW5ndGgtLSxiLnN0cmlwKCl9KHRoaXMscCxiKTplZSh0aGlzLHAsYikseH0sSi5wcm90b3R5cGUubWFrZVJCVD1mdW5jdGlvbihwKXtmb3IodmFyIGI9bmV3IEFycmF5KHApLHg9dy5wcm90b3R5cGUuX2NvdW50Qml0cyhwKS0x'@;
put 'LEM9MDtDPHA7QysrKWJbQ109dGhpcy5yZXZCaW4oQyx4LHApO3JldHVybiBifSxKLnByb3RvdHlwZS5yZXZCaW49ZnVuY3Rpb24ocCxiLHgpe2lmKDA9PT1wfHxwPT09eC0xKXJldHVybiBwO2Zvcih2YXIgQz0wLFQ9MDtUPGI7VCsrKUN8PSgxJnApPDxiLVQtMSxwPj49MTtyZXR1cm4gQ30s'@;
put 'Si5wcm90b3R5cGUucGVybXV0ZT1mdW5jdGlvbihwLGIseCxDLFQsSCl7Zm9yKHZhciBqPTA7ajxIO2orKylDW2pdPWJbcFtqXV0sVFtqXT14W3Bbal1dfSxKLnByb3RvdHlwZS50cmFuc2Zvcm09ZnVuY3Rpb24ocCxiLHgsQyxULEgpe3RoaXMucGVybXV0ZShILHAsYix4LEMsVCk7Zm9yKHZh'@;
put 'ciBqPTE7ajxUO2o8PD0xKWZvcih2YXIgRT1qPDwxLG09TWF0aC5jb3MoMipNYXRoLlBJL0UpLEE9TWF0aC5zaW4oMipNYXRoLlBJL0UpLGFlPTA7YWU8VDthZSs9RSlmb3IodmFyIHRlPW0sc2U9QSx3ZT0wO3dlPGo7d2UrKyl7dmFyIFVlPXhbYWUrd2VdLEplPUNbYWUrd2VdLG90PXhbYWUr'@;
put 'd2Ural0seGU9Q1thZSt3ZStqXSx2ZT10ZSpvdC1zZSp4ZTt4ZT10ZSp4ZStzZSpvdCx4W2FlK3dlXT1VZSsob3Q9dmUpLENbYWUrd2VdPUplK3hlLHhbYWUrd2Ural09VWUtb3QsQ1thZSt3ZStqXT1KZS14ZSx3ZSE9PUUmJih2ZT1tKnRlLUEqc2Usc2U9bSpzZStBKnRlLHRlPXZlKX19LEou'@;
put 'cHJvdG90eXBlLmd1ZXNzTGVuMTNiPWZ1bmN0aW9uKHAsYil7dmFyIHg9MXxNYXRoLm1heChiLHApLEM9MSZ4LFQ9MDtmb3IoeD14LzJ8MDt4O3g+Pj49MSlUKys7cmV0dXJuIDE8PFQrMStDfSxKLnByb3RvdHlwZS5jb25qdWdhdGU9ZnVuY3Rpb24ocCxiLHgpe2lmKCEoeDw9MSkpZm9yKHZh'@;
put 'ciBDPTA7Qzx4LzI7QysrKXt2YXIgVD1wW0NdO3BbQ109cFt4LUMtMV0scFt4LUMtMV09VCxUPWJbQ10sYltDXT0tYlt4LUMtMV0sYlt4LUMtMV09LVR9fSxKLnByb3RvdHlwZS5ub3JtYWxpemUxM2I9ZnVuY3Rpb24ocCxiKXtmb3IodmFyIHg9MCxDPTA7QzxiLzI7QysrKXt2YXIgVD04MTky'@;
put 'Kk1hdGgucm91bmQocFsyKkMrMV0vYikrTWF0aC5yb3VuZChwWzIqQ10vYikreDtwW0NdPTY3MTA4ODYzJlQseD1UPDY3MTA4ODY0PzA6VC82NzEwODg2NHwwfXJldHVybiBwfSxKLnByb3RvdHlwZS5jb252ZXJ0MTNiPWZ1bmN0aW9uKHAsYix4LEMpe2Zvcih2YXIgVD0wLEg9MDtIPGI7SCsr'@;
put 'KXhbMipIXT04MTkxJihUKz0wfHBbSF0pLHhbMipIKzFdPTgxOTEmKFQ+Pj49MTMpLFQ+Pj49MTM7Zm9yKEg9MipiO0g8QzsrK0gpeFtIXT0wO2coMD09PVQpLGcoISgtODE5MiZUKSl9LEoucHJvdG90eXBlLnN0dWI9ZnVuY3Rpb24ocCl7Zm9yKHZhciBiPW5ldyBBcnJheShwKSx4PTA7eDxw'@;
put 'O3grKyliW3hdPTA7cmV0dXJuIGJ9LEoucHJvdG90eXBlLm11bHA9ZnVuY3Rpb24ocCxiLHgpe3ZhciBDPTIqdGhpcy5ndWVzc0xlbjEzYihwLmxlbmd0aCxiLmxlbmd0aCksVD10aGlzLm1ha2VSQlQoQyksSD10aGlzLnN0dWIoQyksaj1uZXcgQXJyYXkoQyksRT1uZXcgQXJyYXkoQyksbT1u'@;
put 'ZXcgQXJyYXkoQyksQT1uZXcgQXJyYXkoQyksYWU9bmV3IEFycmF5KEMpLHRlPW5ldyBBcnJheShDKSxzZT14LndvcmRzO3NlLmxlbmd0aD1DLHRoaXMuY29udmVydDEzYihwLndvcmRzLHAubGVuZ3RoLGosQyksdGhpcy5jb252ZXJ0MTNiKGIud29yZHMsYi5sZW5ndGgsQSxDKSx0aGlzLnRy'@;
put 'YW5zZm9ybShqLEgsRSxtLEMsVCksdGhpcy50cmFuc2Zvcm0oQSxILGFlLHRlLEMsVCk7Zm9yKHZhciB3ZT0wO3dlPEM7d2UrKyl7dmFyIFVlPUVbd2VdKmFlW3dlXS1tW3dlXSp0ZVt3ZV07bVt3ZV09RVt3ZV0qdGVbd2VdK21bd2VdKmFlW3dlXSxFW3dlXT1VZX1yZXR1cm4gdGhpcy5jb25q'@;
put 'dWdhdGUoRSxtLEMpLHRoaXMudHJhbnNmb3JtKEUsbSxzZSxILEMsVCksdGhpcy5jb25qdWdhdGUoc2UsSCxDKSx0aGlzLm5vcm1hbGl6ZTEzYihzZSxDKSx4Lm5lZ2F0aXZlPXAubmVnYXRpdmVeYi5uZWdhdGl2ZSx4Lmxlbmd0aD1wLmxlbmd0aCtiLmxlbmd0aCx4LnN0cmlwKCl9LHcucHJv'@;
put 'dG90eXBlLm11bD1mdW5jdGlvbihwKXt2YXIgYj1uZXcgdyhudWxsKTtyZXR1cm4gYi53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgrcC5sZW5ndGgpLHRoaXMubXVsVG8ocCxiKX0sdy5wcm90b3R5cGUubXVsZj1mdW5jdGlvbihwKXt2YXIgYj1uZXcgdyhudWxsKTtyZXR1cm4gYi53b3Jk'@;
put 'cz1uZXcgQXJyYXkodGhpcy5sZW5ndGgrcC5sZW5ndGgpLGVlKHRoaXMscCxiKX0sdy5wcm90b3R5cGUuaW11bD1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLm11bFRvKHAsdGhpcyl9LHcucHJvdG90eXBlLmltdWxuPWZ1bmN0aW9uKHApe2coIm51bWJlciI9PXR5cGVvZiBwKSxn'@;
put 'KHA8NjcxMDg4NjQpO2Zvcih2YXIgYj0wLHg9MDt4PHRoaXMubGVuZ3RoO3grKyl7dmFyIEM9KDB8dGhpcy53b3Jkc1t4XSkqcCxUPSg2NzEwODg2MyZDKSsoNjcxMDg4NjMmYik7Yj4+PTI2LGIrPUMvNjcxMDg4NjR8MCxiKz1UPj4+MjYsdGhpcy53b3Jkc1t4XT02NzEwODg2MyZUfXJldHVy'@;
put 'biAwIT09YiYmKHRoaXMud29yZHNbeF09Yix0aGlzLmxlbmd0aCsrKSx0aGlzfSx3LnByb3RvdHlwZS5tdWxuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaW11bG4ocCl9LHcucHJvdG90eXBlLnNxcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLm11bCh0aGlzKX0sdy5wcm90b3R5'@;
put 'cGUuaXNxcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmltdWwodGhpcy5jbG9uZSgpKX0sdy5wcm90b3R5cGUucG93PWZ1bmN0aW9uKHApe3ZhciBiPWZ1bmN0aW9uIFUoVil7Zm9yKHZhciBwPW5ldyBBcnJheShWLmJpdExlbmd0aCgpKSxiPTA7YjxwLmxlbmd0aDtiKyspe3ZhciBDPWIlMjY7'@;
put 'cFtiXT0oVi53b3Jkc1tiLzI2fDBdJjE8PEMpPj4+Q31yZXR1cm4gcH0ocCk7aWYoMD09PWIubGVuZ3RoKXJldHVybiBuZXcgdygxKTtmb3IodmFyIHg9dGhpcyxDPTA7QzxiLmxlbmd0aCYmMD09PWJbQ107QysrLHg9eC5zcXIoKSk7aWYoKytDPGIubGVuZ3RoKWZvcih2YXIgVD14LnNxcigp'@;
put 'O0M8Yi5sZW5ndGg7QysrLFQ9VC5zcXIoKSkwIT09YltDXSYmKHg9eC5tdWwoVCkpO3JldHVybiB4fSx3LnByb3RvdHlwZS5pdXNobG49ZnVuY3Rpb24ocCl7ZygibnVtYmVyIj09dHlwZW9mIHAmJnA+PTApO3ZhciBULGI9cCUyNix4PShwLWIpLzI2LEM9NjcxMDg4NjM+Pj4yNi1iPDwyNi1i'@;
put 'O2lmKDAhPT1iKXt2YXIgSD0wO2ZvcihUPTA7VDx0aGlzLmxlbmd0aDtUKyspe3ZhciBqPXRoaXMud29yZHNbVF0mQzt0aGlzLndvcmRzW1RdPSgwfHRoaXMud29yZHNbVF0pLWo8PGJ8SCxIPWo+Pj4yNi1ifUgmJih0aGlzLndvcmRzW1RdPUgsdGhpcy5sZW5ndGgrKyl9aWYoMCE9PXgpe2Zv'@;
put 'cihUPXRoaXMubGVuZ3RoLTE7VD49MDtULS0pdGhpcy53b3Jkc1tUK3hdPXRoaXMud29yZHNbVF07Zm9yKFQ9MDtUPHg7VCsrKXRoaXMud29yZHNbVF09MDt0aGlzLmxlbmd0aCs9eH1yZXR1cm4gdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5pc2hsbj1mdW5jdGlvbihwKXtyZXR1cm4gZygw'@;
put 'PT09dGhpcy5uZWdhdGl2ZSksdGhpcy5pdXNobG4ocCl9LHcucHJvdG90eXBlLml1c2hybj1mdW5jdGlvbihwLGIseCl7dmFyIEM7ZygibnVtYmVyIj09dHlwZW9mIHAmJnA+PTApLEM9Yj8oYi1iJTI2KS8yNjowO3ZhciBUPXAlMjYsSD1NYXRoLm1pbigocC1UKS8yNix0aGlzLmxlbmd0aCks'@;
put 'aj02NzEwODg2M142NzEwODg2Mz4+PlQ8PFQsRT14O2lmKEMtPUgsQz1NYXRoLm1heCgwLEMpLEUpe2Zvcih2YXIgbT0wO208SDttKyspRS53b3Jkc1ttXT10aGlzLndvcmRzW21dO0UubGVuZ3RoPUh9aWYoMCE9PUgpaWYodGhpcy5sZW5ndGg+SClmb3IodGhpcy5sZW5ndGgtPUgsbT0wO208'@;
put 'dGhpcy5sZW5ndGg7bSsrKXRoaXMud29yZHNbbV09dGhpcy53b3Jkc1ttK0hdO2Vsc2UgdGhpcy53b3Jkc1swXT0wLHRoaXMubGVuZ3RoPTE7dmFyIEE9MDtmb3IobT10aGlzLmxlbmd0aC0xO20+PTAmJigwIT09QXx8bT49Qyk7bS0tKXt2YXIgYWU9MHx0aGlzLndvcmRzW21dO3RoaXMud29y'@;
put 'ZHNbbV09QTw8MjYtVHxhZT4+PlQsQT1hZSZqfXJldHVybiBFJiYwIT09QSYmKEUud29yZHNbRS5sZW5ndGgrK109QSksMD09PXRoaXMubGVuZ3RoJiYodGhpcy53b3Jkc1swXT0wLHRoaXMubGVuZ3RoPTEpLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuaXNocm49ZnVuY3Rpb24ocCxiLHgp'@;
put 'e3JldHVybiBnKDA9PT10aGlzLm5lZ2F0aXZlKSx0aGlzLml1c2hybihwLGIseCl9LHcucHJvdG90eXBlLnNobG49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc2hsbihwKX0sdy5wcm90b3R5cGUudXNobG49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pdXNobG4o'@;
put 'cCl9LHcucHJvdG90eXBlLnNocm49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc2hybihwKX0sdy5wcm90b3R5cGUudXNocm49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pdXNocm4ocCl9LHcucHJvdG90eXBlLnRlc3RuPWZ1bmN0aW9uKHApe2coIm51bWJlciI9'@;
put 'PXR5cGVvZiBwJiZwPj0wKTt2YXIgYj1wJTI2LHg9KHAtYikvMjY7cmV0dXJuISh0aGlzLmxlbmd0aDw9eHx8ISh0aGlzLndvcmRzW3hdJjE8PGIpKX0sdy5wcm90b3R5cGUuaW1hc2tuPWZ1bmN0aW9uKHApe2coIm51bWJlciI9PXR5cGVvZiBwJiZwPj0wKTt2YXIgYj1wJTI2LHg9KHAtYikv'@;
put 'MjY7cmV0dXJuIGcoMD09PXRoaXMubmVnYXRpdmUsImltYXNrbiB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmUgbnVtYmVycyIpLHRoaXMubGVuZ3RoPD14P3RoaXM6KDAhPT1iJiZ4KyssdGhpcy5sZW5ndGg9TWF0aC5taW4oeCx0aGlzLmxlbmd0aCksMCE9PWImJih0aGlzLndvcmRzW3RoaXMu'@;
put 'bGVuZ3RoLTFdJj02NzEwODg2M142NzEwODg2Mz4+PmI8PGIpLHRoaXMuc3RyaXAoKSl9LHcucHJvdG90eXBlLm1hc2tuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaW1hc2tuKHApfSx3LnByb3RvdHlwZS5pYWRkbj1mdW5jdGlvbihwKXtyZXR1cm4gZygibnVtYmVyIj09dHlw'@;
put 'ZW9mIHApLGcocDw2NzEwODg2NCkscDwwP3RoaXMuaXN1Ym4oLXApOjAhPT10aGlzLm5lZ2F0aXZlPzE9PT10aGlzLmxlbmd0aCYmKDB8dGhpcy53b3Jkc1swXSk8cD8odGhpcy53b3Jkc1swXT1wLSgwfHRoaXMud29yZHNbMF0pLHRoaXMubmVnYXRpdmU9MCx0aGlzKToodGhpcy5uZWdhdGl2'@;
put 'ZT0wLHRoaXMuaXN1Ym4ocCksdGhpcy5uZWdhdGl2ZT0xLHRoaXMpOnRoaXMuX2lhZGRuKHApfSx3LnByb3RvdHlwZS5faWFkZG49ZnVuY3Rpb24ocCl7dGhpcy53b3Jkc1swXSs9cDtmb3IodmFyIGI9MDtiPHRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzW2JdPj02NzEwODg2NDtiKyspdGhpcy53'@;
put 'b3Jkc1tiXS09NjcxMDg4NjQsYj09PXRoaXMubGVuZ3RoLTE/dGhpcy53b3Jkc1tiKzFdPTE6dGhpcy53b3Jkc1tiKzFdKys7cmV0dXJuIHRoaXMubGVuZ3RoPU1hdGgubWF4KHRoaXMubGVuZ3RoLGIrMSksdGhpc30sdy5wcm90b3R5cGUuaXN1Ym49ZnVuY3Rpb24ocCl7aWYoZygibnVtYmVy'@;
put 'Ij09dHlwZW9mIHApLGcocDw2NzEwODg2NCkscDwwKXJldHVybiB0aGlzLmlhZGRuKC1wKTtpZigwIT09dGhpcy5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMuaWFkZG4ocCksdGhpcy5uZWdhdGl2ZT0xLHRoaXM7aWYodGhpcy53b3Jkc1swXS09cCwxPT09dGhpcy5sZW5n'@;
put 'dGgmJnRoaXMud29yZHNbMF08MCl0aGlzLndvcmRzWzBdPS10aGlzLndvcmRzWzBdLHRoaXMubmVnYXRpdmU9MTtlbHNlIGZvcih2YXIgYj0wO2I8dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbYl08MDtiKyspdGhpcy53b3Jkc1tiXSs9NjcxMDg4NjQsdGhpcy53b3Jkc1tiKzFdLT0xO3JldHVy'@;
put 'biB0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmFkZG49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pYWRkbihwKX0sdy5wcm90b3R5cGUuc3Vibj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzdWJuKHApfSx3LnByb3RvdHlwZS5pYWJzPWZ1bmN0aW9uKCl7cmV0'@;
put 'dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzfSx3LnByb3RvdHlwZS5hYnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlhYnMoKX0sdy5wcm90b3R5cGUuX2lzaGxuc3VibXVsPWZ1bmN0aW9uKHAsYix4KXt2YXIgVDt0aGlzLl9leHBhbmQocC5sZW5ndGgreCk7dmFyIEgsaj0wO2Zv'@;
put 'cihUPTA7VDxwLmxlbmd0aDtUKyspe0g9KDB8dGhpcy53b3Jkc1tUK3hdKStqO3ZhciBFPSgwfHAud29yZHNbVF0pKmI7aj0oKEgtPTY3MTA4ODYzJkUpPj4yNiktKEUvNjcxMDg4NjR8MCksdGhpcy53b3Jkc1tUK3hdPTY3MTA4ODYzJkh9Zm9yKDtUPHRoaXMubGVuZ3RoLXg7VCsrKWo9KEg9'@;
put 'KDB8dGhpcy53b3Jkc1tUK3hdKStqKT4+MjYsdGhpcy53b3Jkc1tUK3hdPTY3MTA4ODYzJkg7aWYoMD09PWopcmV0dXJuIHRoaXMuc3RyaXAoKTtmb3IoZygtMT09PWopLGo9MCxUPTA7VDx0aGlzLmxlbmd0aDtUKyspaj0oSD0tKDB8dGhpcy53b3Jkc1tUXSkraik+PjI2LHRoaXMud29yZHNb'@;
put 'VF09NjcxMDg4NjMmSDtyZXR1cm4gdGhpcy5uZWdhdGl2ZT0xLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuX3dvcmREaXY9ZnVuY3Rpb24ocCxiKXt2YXIgeCxDPXRoaXMuY2xvbmUoKSxUPXAsSD0wfFQud29yZHNbVC5sZW5ndGgtMV07MCE9KHg9MjYtdGhpcy5fY291bnRCaXRzKEgpKSYm'@;
put 'KFQ9VC51c2hsbih4KSxDLml1c2hsbih4KSxIPTB8VC53b3Jkc1tULmxlbmd0aC0xXSk7dmFyIG0sRT1DLmxlbmd0aC1ULmxlbmd0aDtpZigibW9kIiE9PWIpeyhtPW5ldyB3KG51bGwpKS5sZW5ndGg9RSsxLG0ud29yZHM9bmV3IEFycmF5KG0ubGVuZ3RoKTtmb3IodmFyIEE9MDtBPG0ubGVu'@;
put 'Z3RoO0ErKyltLndvcmRzW0FdPTB9dmFyIGFlPUMuY2xvbmUoKS5faXNobG5zdWJtdWwoVCwxLEUpOzA9PT1hZS5uZWdhdGl2ZSYmKEM9YWUsbSYmKG0ud29yZHNbRV09MSkpO2Zvcih2YXIgdGU9RS0xO3RlPj0wO3RlLS0pe3ZhciBzZT02NzEwODg2NCooMHxDLndvcmRzW1QubGVuZ3RoK3Rl'@;
put 'XSkrKDB8Qy53b3Jkc1tULmxlbmd0aCt0ZS0xXSk7Zm9yKHNlPU1hdGgubWluKHNlL0h8MCw2NzEwODg2MyksQy5faXNobG5zdWJtdWwoVCxzZSx0ZSk7MCE9PUMubmVnYXRpdmU7KXNlLS0sQy5uZWdhdGl2ZT0wLEMuX2lzaGxuc3VibXVsKFQsMSx0ZSksQy5pc1plcm8oKXx8KEMubmVnYXRp'@;
put 'dmVePTEpO20mJihtLndvcmRzW3RlXT1zZSl9cmV0dXJuIG0mJm0uc3RyaXAoKSxDLnN0cmlwKCksImRpdiIhPT1iJiYwIT09eCYmQy5pdXNocm4oeCkse2RpdjptfHxudWxsLG1vZDpDfX0sdy5wcm90b3R5cGUuZGl2bW9kPWZ1bmN0aW9uKHAsYix4KXtyZXR1cm4gZyghcC5pc1plcm8oKSks'@;
put 'dGhpcy5pc1plcm8oKT97ZGl2Om5ldyB3KDApLG1vZDpuZXcgdygwKX06MCE9PXRoaXMubmVnYXRpdmUmJjA9PT1wLm5lZ2F0aXZlPyhIPXRoaXMubmVnKCkuZGl2bW9kKHAsYiksIm1vZCIhPT1iJiYoQz1ILmRpdi5uZWcoKSksImRpdiIhPT1iJiYoVD1ILm1vZC5uZWcoKSx4JiYwIT09VC5u'@;
put 'ZWdhdGl2ZSYmVC5pYWRkKHApKSx7ZGl2OkMsbW9kOlR9KTowPT09dGhpcy5uZWdhdGl2ZSYmMCE9PXAubmVnYXRpdmU/KEg9dGhpcy5kaXZtb2QocC5uZWcoKSxiKSwibW9kIiE9PWImJihDPUguZGl2Lm5lZygpKSx7ZGl2OkMsbW9kOkgubW9kfSk6dGhpcy5uZWdhdGl2ZSZwLm5lZ2F0aXZl'@;
put 'PyhIPXRoaXMubmVnKCkuZGl2bW9kKHAubmVnKCksYiksImRpdiIhPT1iJiYoVD1ILm1vZC5uZWcoKSx4JiYwIT09VC5uZWdhdGl2ZSYmVC5pc3ViKHApKSx7ZGl2OkguZGl2LG1vZDpUfSk6cC5sZW5ndGg+dGhpcy5sZW5ndGh8fHRoaXMuY21wKHApPDA/e2RpdjpuZXcgdygwKSxtb2Q6dGhp'@;
put 'c306MT09PXAubGVuZ3RoPyJkaXYiPT09Yj97ZGl2OnRoaXMuZGl2bihwLndvcmRzWzBdKSxtb2Q6bnVsbH06Im1vZCI9PT1iP3tkaXY6bnVsbCxtb2Q6bmV3IHcodGhpcy5tb2RuKHAud29yZHNbMF0pKX06e2Rpdjp0aGlzLmRpdm4ocC53b3Jkc1swXSksbW9kOm5ldyB3KHRoaXMubW9kbihw'@;
put 'LndvcmRzWzBdKSl9OnRoaXMuX3dvcmREaXYocCxiKTt2YXIgQyxULEh9LHcucHJvdG90eXBlLmRpdj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5kaXZtb2QocCwiZGl2IiwhMSkuZGl2fSx3LnByb3RvdHlwZS5tb2Q9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuZGl2bW9kKHAsIm1vZCIsITEp'@;
put 'Lm1vZH0sdy5wcm90b3R5cGUudW1vZD1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5kaXZtb2QocCwibW9kIiwhMCkubW9kfSx3LnByb3RvdHlwZS5kaXZSb3VuZD1mdW5jdGlvbihwKXt2YXIgYj10aGlzLmRpdm1vZChwKTtpZihiLm1vZC5pc1plcm8oKSlyZXR1cm4gYi5kaXY7dmFyIHg9MCE9'@;
put 'PWIuZGl2Lm5lZ2F0aXZlP2IubW9kLmlzdWIocCk6Yi5tb2QsQz1wLnVzaHJuKDEpLFQ9cC5hbmRsbigxKSxIPXguY21wKEMpO3JldHVybiBIPDB8fDE9PT1UJiYwPT09SD9iLmRpdjowIT09Yi5kaXYubmVnYXRpdmU/Yi5kaXYuaXN1Ym4oMSk6Yi5kaXYuaWFkZG4oMSl9LHcucHJvdG90eXBl'@;
put 'Lm1vZG49ZnVuY3Rpb24ocCl7ZyhwPD02NzEwODg2Myk7Zm9yKHZhciBiPSgxPDwyNiklcCx4PTAsQz10aGlzLmxlbmd0aC0xO0M+PTA7Qy0tKXg9KGIqeCsoMHx0aGlzLndvcmRzW0NdKSklcDtyZXR1cm4geH0sdy5wcm90b3R5cGUuaWRpdm49ZnVuY3Rpb24ocCl7ZyhwPD02NzEwODg2Myk7'@;
put 'Zm9yKHZhciBiPTAseD10aGlzLmxlbmd0aC0xO3g+PTA7eC0tKXt2YXIgQz0oMHx0aGlzLndvcmRzW3hdKSs2NzEwODg2NCpiO3RoaXMud29yZHNbeF09Qy9wfDAsYj1DJXB9cmV0dXJuIHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuZGl2bj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9u'@;
put 'ZSgpLmlkaXZuKHApfSx3LnByb3RvdHlwZS5lZ2NkPWZ1bmN0aW9uKHApe2coMD09PXAubmVnYXRpdmUpLGcoIXAuaXNaZXJvKCkpO3ZhciBiPXRoaXMseD1wLmNsb25lKCk7Yj0wIT09Yi5uZWdhdGl2ZT9iLnVtb2QocCk6Yi5jbG9uZSgpO2Zvcih2YXIgQz1uZXcgdygxKSxUPW5ldyB3KDAp'@;
put 'LEg9bmV3IHcoMCksaj1uZXcgdygxKSxFPTA7Yi5pc0V2ZW4oKSYmeC5pc0V2ZW4oKTspYi5pdXNocm4oMSkseC5pdXNocm4oMSksKytFO2Zvcih2YXIgbT14LmNsb25lKCksQT1iLmNsb25lKCk7IWIuaXNaZXJvKCk7KXtmb3IodmFyIGFlPTAsdGU9MTshKGIud29yZHNbMF0mdGUpJiZhZTwy'@;
put 'NjsrK2FlLHRlPDw9MSk7aWYoYWU+MClmb3IoYi5pdXNocm4oYWUpO2FlLS0gPjA7KShDLmlzT2RkKCl8fFQuaXNPZGQoKSkmJihDLmlhZGQobSksVC5pc3ViKEEpKSxDLml1c2hybigxKSxULml1c2hybigxKTtmb3IodmFyIHNlPTAsd2U9MTshKHgud29yZHNbMF0md2UpJiZzZTwyNjsrK3Nl'@;
put 'LHdlPDw9MSk7aWYoc2U+MClmb3IoeC5pdXNocm4oc2UpO3NlLS0gPjA7KShILmlzT2RkKCl8fGouaXNPZGQoKSkmJihILmlhZGQobSksai5pc3ViKEEpKSxILml1c2hybigxKSxqLml1c2hybigxKTtiLmNtcCh4KT49MD8oYi5pc3ViKHgpLEMuaXN1YihIKSxULmlzdWIoaikpOih4LmlzdWIo'@;
put 'YiksSC5pc3ViKEMpLGouaXN1YihUKSl9cmV0dXJue2E6SCxiOmosZ2NkOnguaXVzaGxuKEUpfX0sdy5wcm90b3R5cGUuX2ludm1wPWZ1bmN0aW9uKHApe2coMD09PXAubmVnYXRpdmUpLGcoIXAuaXNaZXJvKCkpO3ZhciBhZSxiPXRoaXMseD1wLmNsb25lKCk7Yj0wIT09Yi5uZWdhdGl2ZT9i'@;
put 'LnVtb2QocCk6Yi5jbG9uZSgpO2Zvcih2YXIgQz1uZXcgdygxKSxUPW5ldyB3KDApLEg9eC5jbG9uZSgpO2IuY21wbigxKT4wJiZ4LmNtcG4oMSk+MDspe2Zvcih2YXIgaj0wLEU9MTshKGIud29yZHNbMF0mRSkmJmo8MjY7KytqLEU8PD0xKTtpZihqPjApZm9yKGIuaXVzaHJuKGopO2otLSA+'@;
put 'MDspQy5pc09kZCgpJiZDLmlhZGQoSCksQy5pdXNocm4oMSk7Zm9yKHZhciBtPTAsQT0xOyEoeC53b3Jkc1swXSZBKSYmbTwyNjsrK20sQTw8PTEpO2lmKG0+MClmb3IoeC5pdXNocm4obSk7bS0tID4wOylULmlzT2RkKCkmJlQuaWFkZChIKSxULml1c2hybigxKTtiLmNtcCh4KT49MD8oYi5p'@;
put 'c3ViKHgpLEMuaXN1YihUKSk6KHguaXN1YihiKSxULmlzdWIoQykpfXJldHVybihhZT0wPT09Yi5jbXBuKDEpP0M6VCkuY21wbigwKTwwJiZhZS5pYWRkKHApLGFlfSx3LnByb3RvdHlwZS5nY2Q9ZnVuY3Rpb24ocCl7aWYodGhpcy5pc1plcm8oKSlyZXR1cm4gcC5hYnMoKTtpZihwLmlzWmVy'@;
put 'bygpKXJldHVybiB0aGlzLmFicygpO3ZhciBiPXRoaXMuY2xvbmUoKSx4PXAuY2xvbmUoKTtiLm5lZ2F0aXZlPTAseC5uZWdhdGl2ZT0wO2Zvcih2YXIgQz0wO2IuaXNFdmVuKCkmJnguaXNFdmVuKCk7QysrKWIuaXVzaHJuKDEpLHguaXVzaHJuKDEpO2Zvcig7Oyl7Zm9yKDtiLmlzRXZlbigp'@;
put 'OyliLml1c2hybigxKTtmb3IoO3guaXNFdmVuKCk7KXguaXVzaHJuKDEpO3ZhciBUPWIuY21wKHgpO2lmKFQ8MCl7dmFyIEg9YjtiPXgseD1IfWVsc2UgaWYoMD09PVR8fDA9PT14LmNtcG4oMSkpYnJlYWs7Yi5pc3ViKHgpfXJldHVybiB4Lml1c2hsbihDKX0sdy5wcm90b3R5cGUuaW52bT1m'@;
put 'dW5jdGlvbihwKXtyZXR1cm4gdGhpcy5lZ2NkKHApLmEudW1vZChwKX0sdy5wcm90b3R5cGUuaXNFdmVuPWZ1bmN0aW9uKCl7cmV0dXJuISgxJnRoaXMud29yZHNbMF0pfSx3LnByb3RvdHlwZS5pc09kZD1mdW5jdGlvbigpe3JldHVybiEoMSZ+dGhpcy53b3Jkc1swXSl9LHcucHJvdG90eXBl'@;
put 'LmFuZGxuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLndvcmRzWzBdJnB9LHcucHJvdG90eXBlLmJpbmNuPWZ1bmN0aW9uKHApe2coIm51bWJlciI9PXR5cGVvZiBwKTt2YXIgYj1wJTI2LHg9KHAtYikvMjYsQz0xPDxiO2lmKHRoaXMubGVuZ3RoPD14KXJldHVybiB0aGlzLl9leHBhbmQoeCsx'@;
put 'KSx0aGlzLndvcmRzW3hdfD1DLHRoaXM7Zm9yKHZhciBUPUMsSD14OzAhPT1UJiZIPHRoaXMubGVuZ3RoO0grKyl7dmFyIGo9MHx0aGlzLndvcmRzW0hdO1Q9KGorPVQpPj4+MjYsdGhpcy53b3Jkc1tIXT1qJj02NzEwODg2M31yZXR1cm4gMCE9PVQmJih0aGlzLndvcmRzW0hdPVQsdGhpcy5s'@;
put 'ZW5ndGgrKyksdGhpc30sdy5wcm90b3R5cGUuaXNaZXJvPWZ1bmN0aW9uKCl7cmV0dXJuIDE9PT10aGlzLmxlbmd0aCYmMD09PXRoaXMud29yZHNbMF19LHcucHJvdG90eXBlLmNtcG49ZnVuY3Rpb24ocCl7dmFyIHgsYj1wPDA7aWYoMCE9PXRoaXMubmVnYXRpdmUmJiFiKXJldHVybi0xO2lm'@;
put 'KDA9PT10aGlzLm5lZ2F0aXZlJiZiKXJldHVybiAxO2lmKHRoaXMuc3RyaXAoKSx0aGlzLmxlbmd0aD4xKXg9MTtlbHNle2ImJihwPS1wKSxnKHA8PTY3MTA4ODYzLCJOdW1iZXIgaXMgdG9vIGJpZyIpO3ZhciBDPTB8dGhpcy53b3Jkc1swXTt4PUM9PT1wPzA6QzxwPy0xOjF9cmV0dXJuIDAh'@;
put 'PT10aGlzLm5lZ2F0aXZlPzB8LXg6eH0sdy5wcm90b3R5cGUuY21wPWZ1bmN0aW9uKHApe2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYwPT09cC5uZWdhdGl2ZSlyZXR1cm4tMTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmMCE9PXAubmVnYXRpdmUpcmV0dXJuIDE7dmFyIGI9dGhpcy51Y21wKHApO3Jl'@;
put 'dHVybiAwIT09dGhpcy5uZWdhdGl2ZT8wfC1iOmJ9LHcucHJvdG90eXBlLnVjbXA9ZnVuY3Rpb24ocCl7aWYodGhpcy5sZW5ndGg+cC5sZW5ndGgpcmV0dXJuIDE7aWYodGhpcy5sZW5ndGg8cC5sZW5ndGgpcmV0dXJuLTE7Zm9yKHZhciBiPTAseD10aGlzLmxlbmd0aC0xO3g+PTA7eC0tKXt2'@;
put 'YXIgQz0wfHRoaXMud29yZHNbeF0sVD0wfHAud29yZHNbeF07aWYoQyE9PVQpe0M8VD9iPS0xOkM+VCYmKGI9MSk7YnJlYWt9fXJldHVybiBifSx3LnByb3RvdHlwZS5ndG49ZnVuY3Rpb24ocCl7cmV0dXJuIDE9PT10aGlzLmNtcG4ocCl9LHcucHJvdG90eXBlLmd0PWZ1bmN0aW9uKHApe3Jl'@;
put 'dHVybiAxPT09dGhpcy5jbXAocCl9LHcucHJvdG90eXBlLmd0ZW49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY21wbihwKT49MH0sdy5wcm90b3R5cGUuZ3RlPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNtcChwKT49MH0sdy5wcm90b3R5cGUubHRuPWZ1bmN0aW9uKHApe3JldHVybi0xPT09'@;
put 'dGhpcy5jbXBuKHApfSx3LnByb3RvdHlwZS5sdD1mdW5jdGlvbihwKXtyZXR1cm4tMT09PXRoaXMuY21wKHApfSx3LnByb3RvdHlwZS5sdGVuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNtcG4ocCk8PTB9LHcucHJvdG90eXBlLmx0ZT1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbXAocCk8'@;
put 'PTB9LHcucHJvdG90eXBlLmVxbj1mdW5jdGlvbihwKXtyZXR1cm4gMD09PXRoaXMuY21wbihwKX0sdy5wcm90b3R5cGUuZXE9ZnVuY3Rpb24ocCl7cmV0dXJuIDA9PT10aGlzLmNtcChwKX0sdy5yZWQ9ZnVuY3Rpb24ocCl7cmV0dXJuIG5ldyBTZShwKX0sdy5wcm90b3R5cGUudG9SZWQ9ZnVu'@;
put 'Y3Rpb24ocCl7cmV0dXJuIGcoIXRoaXMucmVkLCJBbHJlYWR5IGEgbnVtYmVyIGluIHJlZHVjdGlvbiBjb250ZXh0IiksZygwPT09dGhpcy5uZWdhdGl2ZSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSxwLmNvbnZlcnRUbyh0aGlzKS5fZm9yY2VSZWQocCl9LHcucHJvdG90eXBl'@;
put 'LmZyb21SZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gZyh0aGlzLnJlZCwiZnJvbVJlZCB3b3JrcyBvbmx5IHdpdGggbnVtYmVycyBpbiByZWR1Y3Rpb24gY29udGV4dCIpLHRoaXMucmVkLmNvbnZlcnRGcm9tKHRoaXMpfSx3LnByb3RvdHlwZS5fZm9yY2VSZWQ9ZnVuY3Rpb24ocCl7cmV0dXJuIHRo'@;
put 'aXMucmVkPXAsdGhpc30sdy5wcm90b3R5cGUuZm9yY2VSZWQ9ZnVuY3Rpb24ocCl7cmV0dXJuIGcoIXRoaXMucmVkLCJBbHJlYWR5IGEgbnVtYmVyIGluIHJlZHVjdGlvbiBjb250ZXh0IiksdGhpcy5fZm9yY2VSZWQocCl9LHcucHJvdG90eXBlLnJlZEFkZD1mdW5jdGlvbihwKXtyZXR1cm4g'@;
put 'Zyh0aGlzLnJlZCwicmVkQWRkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmFkZCh0aGlzLHApfSx3LnByb3RvdHlwZS5yZWRJQWRkPWZ1bmN0aW9uKHApe3JldHVybiBnKHRoaXMucmVkLCJyZWRJQWRkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMu'@;
put 'cmVkLmlhZGQodGhpcyxwKX0sdy5wcm90b3R5cGUucmVkU3ViPWZ1bmN0aW9uKHApe3JldHVybiBnKHRoaXMucmVkLCJyZWRTdWIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuc3ViKHRoaXMscCl9LHcucHJvdG90eXBlLnJlZElTdWI9ZnVuY3Rpb24ocCl7cmV0dXJu'@;
put 'IGcodGhpcy5yZWQsInJlZElTdWIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuaXN1Yih0aGlzLHApfSx3LnByb3RvdHlwZS5yZWRTaGw9ZnVuY3Rpb24ocCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZFNobCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlz'@;
put 'LnJlZC5zaGwodGhpcyxwKX0sdy5wcm90b3R5cGUucmVkTXVsPWZ1bmN0aW9uKHApe3JldHVybiBnKHRoaXMucmVkLCJyZWRNdWwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTIodGhpcyxwKSx0aGlzLnJlZC5tdWwodGhpcyxwKX0sdy5wcm90b3R5cGUu'@;
put 'cmVkSU11bD1mdW5jdGlvbihwKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkTXVsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkyKHRoaXMscCksdGhpcy5yZWQuaW11bCh0aGlzLHApfSx3LnByb3RvdHlwZS5yZWRTcXI9ZnVuY3Rpb24oKXtyZXR1cm4gZyh0'@;
put 'aGlzLnJlZCwicmVkU3FyIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnNxcih0aGlzKX0sdy5wcm90b3R5cGUucmVkSVNxcj1mdW5jdGlvbigpe3JldHVybiBnKHRoaXMucmVkLCJyZWRJU3FyIHdvcmtzIG9ubHkgd2l0aCBy'@;
put 'ZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLmlzcXIodGhpcyl9LHcucHJvdG90eXBlLnJlZFNxcnQ9ZnVuY3Rpb24oKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkU3FydCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0'@;
put 'aGlzKSx0aGlzLnJlZC5zcXJ0KHRoaXMpfSx3LnByb3RvdHlwZS5yZWRJbnZtPWZ1bmN0aW9uKCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZEludm0gd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuaW52bSh0aGlzKX0sdy5wcm90'@;
put 'b3R5cGUucmVkTmVnPWZ1bmN0aW9uKCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZE5lZyB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5uZWcodGhpcyl9LHcucHJvdG90eXBlLnJlZFBvdz1mdW5jdGlvbihwKXtyZXR1cm4gZyh0'@;
put 'aGlzLnJlZCYmIXAucmVkLCJyZWRQb3cobm9ybWFsTnVtKSIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnBvdyh0aGlzLHApfTt2YXIgbmU9e2syNTY6bnVsbCxwMjI0Om51bGwscDE5MjpudWxsLHAyNTUxOTpudWxsfTtmdW5jdGlvbiBpZShWLHApe3RoaXMubmFtZT1WLHRo'@;
put 'aXMucD1uZXcgdyhwLDE2KSx0aGlzLm49dGhpcy5wLmJpdExlbmd0aCgpLHRoaXMuaz1uZXcgdygxKS5pdXNobG4odGhpcy5uKS5pc3ViKHRoaXMucCksdGhpcy50bXA9dGhpcy5fdG1wKCl9ZnVuY3Rpb24gbGUoKXtpZS5jYWxsKHRoaXMsImsyNTYiLCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZm'@;
put 'ZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmMyZiIpfWZ1bmN0aW9uIG1lKCl7aWUuY2FsbCh0aGlzLCJwMjI0IiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgMDAwMDAwMDAgMDAwMDAwMDAgMDAwMDAwMDEiKX1mdW5jdGlvbiBfZSgp'@;
put 'e2llLmNhbGwodGhpcywicDE5MiIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmZmZmIGZmZmZmZmZmIil9ZnVuY3Rpb24gVGUoKXtpZS5jYWxsKHRoaXMsIjI1NTE5IiwiN2ZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYg'@;
put 'ZmZmZmZmZmZmZmZmZmZlZCIpfWZ1bmN0aW9uIFNlKFYpe2lmKCJzdHJpbmciPT10eXBlb2YgVil7dmFyIHA9dy5fcHJpbWUoVik7dGhpcy5tPXAucCx0aGlzLnByaW1lPXB9ZWxzZSBnKFYuZ3RuKDEpLCJtb2R1bHVzIG11c3QgYmUgZ3JlYXRlciB0aGFuIDEiKSx0aGlzLm09Vix0aGlzLnBy'@;
put 'aW1lPW51bGx9ZnVuY3Rpb24gamUoVil7U2UuY2FsbCh0aGlzLFYpLHRoaXMuc2hpZnQ9dGhpcy5tLmJpdExlbmd0aCgpLHRoaXMuc2hpZnQlMjYhPTAmJih0aGlzLnNoaWZ0Kz0yNi10aGlzLnNoaWZ0JTI2KSx0aGlzLnI9bmV3IHcoMSkuaXVzaGxuKHRoaXMuc2hpZnQpLHRoaXMucjI9dGhp'@;
put 'cy5pbW9kKHRoaXMuci5zcXIoKSksdGhpcy5yaW52PXRoaXMuci5faW52bXAodGhpcy5tKSx0aGlzLm1pbnY9dGhpcy5yaW52Lm11bCh0aGlzLnIpLmlzdWJuKDEpLmRpdih0aGlzLm0pLHRoaXMubWludj10aGlzLm1pbnYudW1vZCh0aGlzLnIpLHRoaXMubWludj10aGlzLnIuc3ViKHRoaXMu'@;
put 'bWludil9aWUucHJvdG90eXBlLl90bXA9ZnVuY3Rpb24oKXt2YXIgcD1uZXcgdyhudWxsKTtyZXR1cm4gcC53b3Jkcz1uZXcgQXJyYXkoTWF0aC5jZWlsKHRoaXMubi8xMykpLHB9LGllLnByb3RvdHlwZS5pcmVkdWNlPWZ1bmN0aW9uKHApe3ZhciB4LGI9cDtkb3t0aGlzLnNwbGl0KGIsdGhp'@;
put 'cy50bXApLHg9KGI9KGI9dGhpcy5pbXVsSyhiKSkuaWFkZCh0aGlzLnRtcCkpLmJpdExlbmd0aCgpfXdoaWxlKHg+dGhpcy5uKTt2YXIgQz14PHRoaXMubj8tMTpiLnVjbXAodGhpcy5wKTtyZXR1cm4gMD09PUM/KGIud29yZHNbMF09MCxiLmxlbmd0aD0xKTpDPjA/Yi5pc3ViKHRoaXMucCk6'@;
put 'dm9pZCAwIT09Yi5zdHJpcD9iLnN0cmlwKCk6Yi5fc3RyaXAoKSxifSxpZS5wcm90b3R5cGUuc3BsaXQ9ZnVuY3Rpb24ocCxiKXtwLml1c2hybih0aGlzLm4sMCxiKX0saWUucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKHApe3JldHVybiBwLmltdWwodGhpcy5rKX0sQihsZSxpZSksbGUucHJv'@;
put 'dG90eXBlLnNwbGl0PWZ1bmN0aW9uKHAsYil7Zm9yKHZhciB4PTQxOTQzMDMsQz1NYXRoLm1pbihwLmxlbmd0aCw5KSxUPTA7VDxDO1QrKyliLndvcmRzW1RdPXAud29yZHNbVF07aWYoYi5sZW5ndGg9QyxwLmxlbmd0aDw9OSlyZXR1cm4gcC53b3Jkc1swXT0wLHZvaWQocC5sZW5ndGg9MSk7'@;
put 'dmFyIEg9cC53b3Jkc1s5XTtmb3IoYi53b3Jkc1tiLmxlbmd0aCsrXT1IJngsVD0xMDtUPHAubGVuZ3RoO1QrKyl7dmFyIGo9MHxwLndvcmRzW1RdO3Aud29yZHNbVC0xMF09KGomeCk8PDR8SD4+PjIyLEg9an1wLndvcmRzW1QtMTBdPUg+Pj49MjIscC5sZW5ndGgtPTA9PT1IJiZwLmxlbmd0'@;
put 'aD4xMD8xMDo5fSxsZS5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24ocCl7cC53b3Jkc1twLmxlbmd0aF09MCxwLndvcmRzW3AubGVuZ3RoKzFdPTAscC5sZW5ndGgrPTI7Zm9yKHZhciBiPTAseD0wO3g8cC5sZW5ndGg7eCsrKXt2YXIgQz0wfHAud29yZHNbeF07cC53b3Jkc1t4XT02NzEwODg2'@;
put 'MyYoYis9OTc3KkMpLGI9NjQqQysoYi82NzEwODg2NHwwKX1yZXR1cm4gMD09PXAud29yZHNbcC5sZW5ndGgtMV0mJihwLmxlbmd0aC0tLDA9PT1wLndvcmRzW3AubGVuZ3RoLTFdJiZwLmxlbmd0aC0tKSxwfSxCKG1lLGllKSxCKF9lLGllKSxCKFRlLGllKSxUZS5wcm90b3R5cGUuaW11bEs9'@;
put 'ZnVuY3Rpb24ocCl7Zm9yKHZhciBiPTAseD0wO3g8cC5sZW5ndGg7eCsrKXt2YXIgQz0xOSooMHxwLndvcmRzW3hdKStiLFQ9NjcxMDg4NjMmQztDPj4+PTI2LHAud29yZHNbeF09VCxiPUN9cmV0dXJuIDAhPT1iJiYocC53b3Jkc1twLmxlbmd0aCsrXT1iKSxwfSx3Ll9wcmltZT1mdW5jdGlv'@;
put 'bihwKXtpZihuZVtwXSlyZXR1cm4gbmVbcF07dmFyIGI7aWYoImsyNTYiPT09cCliPW5ldyBsZTtlbHNlIGlmKCJwMjI0Ij09PXApYj1uZXcgbWU7ZWxzZSBpZigicDE5MiI9PT1wKWI9bmV3IF9lO2Vsc2V7aWYoInAyNTUxOSIhPT1wKXRocm93IG5ldyBFcnJvcigiVW5rbm93biBwcmltZSAi'@;
put 'K3ApO2I9bmV3IFRlfXJldHVybiBuZVtwXT1iLGJ9LFNlLnByb3RvdHlwZS5fdmVyaWZ5MT1mdW5jdGlvbihwKXtnKDA9PT1wLm5lZ2F0aXZlLCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIpLGcocC5yZWQsInJlZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKX0sU2UucHJv'@;
put 'dG90eXBlLl92ZXJpZnkyPWZ1bmN0aW9uKHAsYil7ZyghKHAubmVnYXRpdmV8Yi5uZWdhdGl2ZSksInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIiksZyhwLnJlZCYmcC5yZWQ9PT1iLnJlZCwicmVkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpfSxTZS5wcm90b3R5cGUuaW1v'@;
put 'ZD1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5wcmltZT90aGlzLnByaW1lLmlyZWR1Y2UocCkuX2ZvcmNlUmVkKHRoaXMpOnAudW1vZCh0aGlzLm0pLl9mb3JjZVJlZCh0aGlzKX0sU2UucHJvdG90eXBlLm5lZz1mdW5jdGlvbihwKXtyZXR1cm4gcC5pc1plcm8oKT9wLmNsb25lKCk6dGhpcy5t'@;
put 'LnN1YihwKS5fZm9yY2VSZWQodGhpcyl9LFNlLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24ocCxiKXt0aGlzLl92ZXJpZnkyKHAsYik7dmFyIHg9cC5hZGQoYik7cmV0dXJuIHguY21wKHRoaXMubSk+PTAmJnguaXN1Yih0aGlzLm0pLHguX2ZvcmNlUmVkKHRoaXMpfSxTZS5wcm90b3R5cGUuaWFk'@;
put 'ZD1mdW5jdGlvbihwLGIpe3RoaXMuX3ZlcmlmeTIocCxiKTt2YXIgeD1wLmlhZGQoYik7cmV0dXJuIHguY21wKHRoaXMubSk+PTAmJnguaXN1Yih0aGlzLm0pLHh9LFNlLnByb3RvdHlwZS5zdWI9ZnVuY3Rpb24ocCxiKXt0aGlzLl92ZXJpZnkyKHAsYik7dmFyIHg9cC5zdWIoYik7cmV0dXJu'@;
put 'IHguY21wbigwKTwwJiZ4LmlhZGQodGhpcy5tKSx4Ll9mb3JjZVJlZCh0aGlzKX0sU2UucHJvdG90eXBlLmlzdWI9ZnVuY3Rpb24ocCxiKXt0aGlzLl92ZXJpZnkyKHAsYik7dmFyIHg9cC5pc3ViKGIpO3JldHVybiB4LmNtcG4oMCk8MCYmeC5pYWRkKHRoaXMubSkseH0sU2UucHJvdG90eXBl'@;
put 'LnNobD1mdW5jdGlvbihwLGIpe3JldHVybiB0aGlzLl92ZXJpZnkxKHApLHRoaXMuaW1vZChwLnVzaGxuKGIpKX0sU2UucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24ocCxiKXtyZXR1cm4gdGhpcy5fdmVyaWZ5MihwLGIpLHRoaXMuaW1vZChwLmltdWwoYikpfSxTZS5wcm90b3R5cGUubXVsPWZ1'@;
put 'bmN0aW9uKHAsYil7cmV0dXJuIHRoaXMuX3ZlcmlmeTIocCxiKSx0aGlzLmltb2QocC5tdWwoYikpfSxTZS5wcm90b3R5cGUuaXNxcj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5pbXVsKHAscC5jbG9uZSgpKX0sU2UucHJvdG90eXBlLnNxcj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5tdWwo'@;
put 'cCxwKX0sU2UucHJvdG90eXBlLnNxcnQ9ZnVuY3Rpb24ocCl7aWYocC5pc1plcm8oKSlyZXR1cm4gcC5jbG9uZSgpO3ZhciBiPXRoaXMubS5hbmRsbigzKTtpZihnKGIlMj09MSksMz09PWIpe3ZhciB4PXRoaXMubS5hZGQobmV3IHcoMSkpLml1c2hybigyKTtyZXR1cm4gdGhpcy5wb3cocCx4'@;
put 'KX1mb3IodmFyIEM9dGhpcy5tLnN1Ym4oMSksVD0wOyFDLmlzWmVybygpJiYwPT09Qy5hbmRsbigxKTspVCsrLEMuaXVzaHJuKDEpO2coIUMuaXNaZXJvKCkpO3ZhciBIPW5ldyB3KDEpLnRvUmVkKHRoaXMpLGo9SC5yZWROZWcoKSxFPXRoaXMubS5zdWJuKDEpLml1c2hybigxKSxtPXRoaXMu'@;
put 'bS5iaXRMZW5ndGgoKTtmb3IobT1uZXcgdygyKm0qbSkudG9SZWQodGhpcyk7MCE9PXRoaXMucG93KG0sRSkuY21wKGopOyltLnJlZElBZGQoaik7Zm9yKHZhciBBPXRoaXMucG93KG0sQyksYWU9dGhpcy5wb3cocCxDLmFkZG4oMSkuaXVzaHJuKDEpKSx0ZT10aGlzLnBvdyhwLEMpLHNlPVQ7'@;
put 'MCE9PXRlLmNtcChIKTspe2Zvcih2YXIgd2U9dGUsVWU9MDswIT09d2UuY21wKEgpO1VlKyspd2U9d2UucmVkU3FyKCk7ZyhVZTxzZSk7dmFyIEplPXRoaXMucG93KEEsbmV3IHcoMSkuaXVzaGxuKHNlLVVlLTEpKTthZT1hZS5yZWRNdWwoSmUpLEE9SmUucmVkU3FyKCksdGU9dGUucmVkTXVs'@;
put 'KEEpLHNlPVVlfXJldHVybiBhZX0sU2UucHJvdG90eXBlLmludm09ZnVuY3Rpb24ocCl7dmFyIGI9cC5faW52bXAodGhpcy5tKTtyZXR1cm4gMCE9PWIubmVnYXRpdmU/KGIubmVnYXRpdmU9MCx0aGlzLmltb2QoYikucmVkTmVnKCkpOnRoaXMuaW1vZChiKX0sU2UucHJvdG90eXBlLnBvdz1m'@;
put 'dW5jdGlvbihwLGIpe2lmKGIuaXNaZXJvKCkpcmV0dXJuIG5ldyB3KDEpLnRvUmVkKHRoaXMpO2lmKDA9PT1iLmNtcG4oMSkpcmV0dXJuIHAuY2xvbmUoKTt2YXIgQz1uZXcgQXJyYXkoMTYpO0NbMF09bmV3IHcoMSkudG9SZWQodGhpcyksQ1sxXT1wO2Zvcih2YXIgVD0yO1Q8Qy5sZW5ndGg7'@;
put 'VCsrKUNbVF09dGhpcy5tdWwoQ1tULTFdLHApO3ZhciBIPUNbMF0saj0wLEU9MCxtPWIuYml0TGVuZ3RoKCklMjY7Zm9yKDA9PT1tJiYobT0yNiksVD1iLmxlbmd0aC0xO1Q+PTA7VC0tKXtmb3IodmFyIEE9Yi53b3Jkc1tUXSxhZT1tLTE7YWU+PTA7YWUtLSl7dmFyIHRlPUE+PmFlJjE7SCE9'@;
put 'PUNbMF0mJihIPXRoaXMuc3FyKEgpKSwwIT09dGV8fDAhPT1qPyhqPDw9MSxqfD10ZSwoND09KytFfHwwPT09VCYmMD09PWFlKSYmKEg9dGhpcy5tdWwoSCxDW2pdKSxFPTAsaj0wKSk6RT0wfW09MjZ9cmV0dXJuIEh9LFNlLnByb3RvdHlwZS5jb252ZXJ0VG89ZnVuY3Rpb24ocCl7dmFyIGI9'@;
put 'cC51bW9kKHRoaXMubSk7cmV0dXJuIGI9PT1wP2IuY2xvbmUoKTpifSxTZS5wcm90b3R5cGUuY29udmVydEZyb209ZnVuY3Rpb24ocCl7dmFyIGI9cC5jbG9uZSgpO3JldHVybiBiLnJlZD1udWxsLGJ9LHcubW9udD1mdW5jdGlvbihwKXtyZXR1cm4gbmV3IGplKHApfSxCKGplLFNlKSxqZS5w'@;
put 'cm90b3R5cGUuY29udmVydFRvPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmltb2QocC51c2hsbih0aGlzLnNoaWZ0KSl9LGplLnByb3RvdHlwZS5jb252ZXJ0RnJvbT1mdW5jdGlvbihwKXt2YXIgYj10aGlzLmltb2QocC5tdWwodGhpcy5yaW52KSk7cmV0dXJuIGIucmVkPW51bGwsYn0samUu'@;
put 'cHJvdG90eXBlLmltdWw9ZnVuY3Rpb24ocCxiKXtpZihwLmlzWmVybygpfHxiLmlzWmVybygpKXJldHVybiBwLndvcmRzWzBdPTAscC5sZW5ndGg9MSxwO3ZhciB4PXAuaW11bChiKSxDPXgubWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubWludikuaW1hc2tuKHRoaXMuc2hpZnQpLm11bCh0'@;
put 'aGlzLm0pLFQ9eC5pc3ViKEMpLml1c2hybih0aGlzLnNoaWZ0KSxIPVQ7cmV0dXJuIFQuY21wKHRoaXMubSk+PTA/SD1ULmlzdWIodGhpcy5tKTpULmNtcG4oMCk8MCYmKEg9VC5pYWRkKHRoaXMubSkpLEguX2ZvcmNlUmVkKHRoaXMpfSxqZS5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKHAsYil7'@;
put 'aWYocC5pc1plcm8oKXx8Yi5pc1plcm8oKSlyZXR1cm4gbmV3IHcoMCkuX2ZvcmNlUmVkKHRoaXMpO3ZhciB4PXAubXVsKGIpLEM9eC5tYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5taW52KS5pbWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubSksVD14LmlzdWIoQykuaXVzaHJuKHRoaXMu'@;
put 'c2hpZnQpLEg9VDtyZXR1cm4gVC5jbXAodGhpcy5tKT49MD9IPVQuaXN1Yih0aGlzLm0pOlQuY21wbigwKTwwJiYoSD1ULmlhZGQodGhpcy5tKSksSC5fZm9yY2VSZWQodGhpcyl9LGplLnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmltb2QocC5faW52bXAodGhpcy5t'@;
put 'KS5tdWwodGhpcy5yMikpLl9mb3JjZVJlZCh0aGlzKX19KHVlPXkubm1kKHVlKSx0aGlzKX0sMzQ4MjoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDU3MTcpLF89eSgyMzE4KSxnPXkoOTc4NSksQj15KDkwNzIpLHc9eSgxMDI3KTtmdW5jdGlvbiBQKEYpe3cuY2FsbCh0aGlzLCJk'@;
put 'aWdlc3QiKSx0aGlzLl9oYXNoPUZ9SShQLHcpLFAucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oRil7dGhpcy5faGFzaC51cGRhdGUoRil9LFAucHJvdG90eXBlLl9maW5hbD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9oYXNoLmRpZ2VzdCgpfSx1ZS5leHBvcnRzPWZ1bmN0aW9uKE8pe3Jl'@;
put 'dHVybiJtZDUiPT09KE89Ty50b0xvd2VyQ2FzZSgpKT9uZXcgXzoicm1kMTYwIj09PU98fCJyaXBlbWQxNjAiPT09Tz9uZXcgZzpuZXcgUChCKE8pKX19LDgwMjg6KHVlLFgseSk9Pnt2YXIgST15KDIzMTgpO3VlLmV4cG9ydHM9ZnVuY3Rpb24oXyl7cmV0dXJuKG5ldyBJKS51cGRhdGUoXyku'@;
put 'ZGlnZXN0KCl9fSw4MzU1Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoNTcxNyksXz15KDEwMzEpLGc9eSgxMDI3KSxCPXkoOTUwOSkuQnVmZmVyLHc9eSg4MDI4KSxQPXkoOTc4NSksRj15KDkwNzIpLE89Qi5hbGxvYygxMjgpO2Z1bmN0aW9uIHooTixMKXtnLmNhbGwodGhpcywi'@;
put 'ZGlnZXN0IiksInN0cmluZyI9PXR5cGVvZiBMJiYoTD1CLmZyb20oTCkpO3ZhciBLPSJzaGE1MTIiPT09Tnx8InNoYTM4NCI9PT1OPzEyODo2NDt0aGlzLl9hbGc9Tix0aGlzLl9rZXk9TCxMLmxlbmd0aD5LP0w9KCJybWQxNjAiPT09Tj9uZXcgUDpGKE4pKS51cGRhdGUoTCkuZGlnZXN0KCk6'@;
put 'TC5sZW5ndGg8SyYmKEw9Qi5jb25jYXQoW0wsT10sSykpO2Zvcih2YXIgVz10aGlzLl9pcGFkPUIuYWxsb2NVbnNhZmUoSyksWT10aGlzLl9vcGFkPUIuYWxsb2NVbnNhZmUoSykscT0wO3E8SztxKyspV1txXT01NF5MW3FdLFlbcV09OTJeTFtxXTt0aGlzLl9oYXNoPSJybWQxNjAiPT09Tj9u'@;
put 'ZXcgUDpGKE4pLHRoaXMuX2hhc2gudXBkYXRlKFcpfUkoeixnKSx6LnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKE4pe3RoaXMuX2hhc2gudXBkYXRlKE4pfSx6LnByb3RvdHlwZS5fZmluYWw9ZnVuY3Rpb24oKXt2YXIgTj10aGlzLl9oYXNoLmRpZ2VzdCgpO3JldHVybigicm1kMTYwIj09'@;
put 'PXRoaXMuX2FsZz9uZXcgUDpGKHRoaXMuX2FsZykpLnVwZGF0ZSh0aGlzLl9vcGFkKS51cGRhdGUoTikuZGlnZXN0KCl9LHVlLmV4cG9ydHM9ZnVuY3Rpb24oTCxLKXtyZXR1cm4icm1kMTYwIj09PShMPUwudG9Mb3dlckNhc2UoKSl8fCJyaXBlbWQxNjAiPT09TD9uZXcgeigicm1kMTYwIixL'@;
put 'KToibWQ1Ij09PUw/bmV3IF8odyxLKTpuZXcgeihMLEspfX0sMTAzMToodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDU3MTcpLF89eSg5NTA5KS5CdWZmZXIsZz15KDEwMjcpLEI9Xy5hbGxvYygxMjgpLHc9NjQ7ZnVuY3Rpb24gUChGLE8pe2cuY2FsbCh0aGlzLCJkaWdlc3QiKSwi'@;
put 'c3RyaW5nIj09dHlwZW9mIE8mJihPPV8uZnJvbShPKSksdGhpcy5fYWxnPUYsdGhpcy5fa2V5PU8sTy5sZW5ndGg+dz9PPUYoTyk6Ty5sZW5ndGg8dyYmKE89Xy5jb25jYXQoW08sQl0sdykpO2Zvcih2YXIgej10aGlzLl9pcGFkPV8uYWxsb2NVbnNhZmUodyksTj10aGlzLl9vcGFkPV8uYWxs'@;
put 'b2NVbnNhZmUodyksTD0wO0w8dztMKyspeltMXT01NF5PW0xdLE5bTF09OTJeT1tMXTt0aGlzLl9oYXNoPVt6XX1JKFAsZyksUC5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbihGKXt0aGlzLl9oYXNoLnB1c2goRil9LFAucHJvdG90eXBlLl9maW5hbD1mdW5jdGlvbigpe3ZhciBGPXRoaXMu'@;
put 'X2FsZyhfLmNvbmNhdCh0aGlzLl9oYXNoKSk7cmV0dXJuIHRoaXMuX2FsZyhfLmNvbmNhdChbdGhpcy5fb3BhZCxGXSkpfSx1ZS5leHBvcnRzPVB9LDU4MzU6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7WC5yYW5kb21CeXRlcz1YLnJuZz1YLnBzZXVkb1JhbmRvbUJ5dGVzPVgucHJuZz15KDE3'@;
put 'OTgpLFguY3JlYXRlSGFzaD1YLkhhc2g9eSgzNDgyKSxYLmNyZWF0ZUhtYWM9WC5IbWFjPXkoODM1NSk7dmFyIEk9eSg2MDQyKSxfPU9iamVjdC5rZXlzKEkpLGc9WyJzaGExIiwic2hhMjI0Iiwic2hhMjU2Iiwic2hhMzg0Iiwic2hhNTEyIiwibWQ1Iiwicm1kMTYwIl0uY29uY2F0KF8pO1gu'@;
put 'Z2V0SGFzaGVzPWZ1bmN0aW9uKCl7cmV0dXJuIGd9O3ZhciBCPXkoNTYzMik7WC5wYmtkZjI9Qi5wYmtkZjIsWC5wYmtkZjJTeW5jPUIucGJrZGYyU3luYzt2YXIgdz15KDM2MTQpO1guQ2lwaGVyPXcuQ2lwaGVyLFguY3JlYXRlQ2lwaGVyPXcuY3JlYXRlQ2lwaGVyLFguQ2lwaGVyaXY9dy5D'@;
put 'aXBoZXJpdixYLmNyZWF0ZUNpcGhlcml2PXcuY3JlYXRlQ2lwaGVyaXYsWC5EZWNpcGhlcj13LkRlY2lwaGVyLFguY3JlYXRlRGVjaXBoZXI9dy5jcmVhdGVEZWNpcGhlcixYLkRlY2lwaGVyaXY9dy5EZWNpcGhlcml2LFguY3JlYXRlRGVjaXBoZXJpdj13LmNyZWF0ZURlY2lwaGVyaXYsWC5n'@;
put 'ZXRDaXBoZXJzPXcuZ2V0Q2lwaGVycyxYLmxpc3RDaXBoZXJzPXcubGlzdENpcGhlcnM7dmFyIFA9eSgyNjA3KTtYLkRpZmZpZUhlbGxtYW5Hcm91cD1QLkRpZmZpZUhlbGxtYW5Hcm91cCxYLmNyZWF0ZURpZmZpZUhlbGxtYW5Hcm91cD1QLmNyZWF0ZURpZmZpZUhlbGxtYW5Hcm91cCxYLmdl'@;
put 'dERpZmZpZUhlbGxtYW49UC5nZXREaWZmaWVIZWxsbWFuLFguY3JlYXRlRGlmZmllSGVsbG1hbj1QLmNyZWF0ZURpZmZpZUhlbGxtYW4sWC5EaWZmaWVIZWxsbWFuPVAuRGlmZmllSGVsbG1hbjt2YXIgRj15KDQ3NDMpO1guY3JlYXRlU2lnbj1GLmNyZWF0ZVNpZ24sWC5TaWduPUYuU2lnbixY'@;
put 'LmNyZWF0ZVZlcmlmeT1GLmNyZWF0ZVZlcmlmeSxYLlZlcmlmeT1GLlZlcmlmeSxYLmNyZWF0ZUVDREg9eSg2MzkzKTt2YXIgTz15KDc5MDApO1gucHVibGljRW5jcnlwdD1PLnB1YmxpY0VuY3J5cHQsWC5wcml2YXRlRW5jcnlwdD1PLnByaXZhdGVFbmNyeXB0LFgucHVibGljRGVjcnlwdD1P'@;
put 'LnB1YmxpY0RlY3J5cHQsWC5wcml2YXRlRGVjcnlwdD1PLnByaXZhdGVEZWNyeXB0O3ZhciB6PXkoNzk2Myk7WC5yYW5kb21GaWxsPXoucmFuZG9tRmlsbCxYLnJhbmRvbUZpbGxTeW5jPXoucmFuZG9tRmlsbFN5bmMsWC5jcmVhdGVDcmVkZW50aWFscz1mdW5jdGlvbigpe3Rocm93IG5ldyBF'@;
put 'cnJvcigic29ycnksIGNyZWF0ZUNyZWRlbnRpYWxzIGlzIG5vdCBpbXBsZW1lbnRlZCB5ZXRcbndlIGFjY2VwdCBwdWxsIHJlcXVlc3RzXG5odHRwczovL2dpdGh1Yi5jb20vYnJvd3NlcmlmeS9jcnlwdG8tYnJvd3NlcmlmeSIpfSxYLmNvbnN0YW50cz17REhfQ0hFQ0tfUF9OT1RfU0FGRV9Q'@;
put 'UklNRToyLERIX0NIRUNLX1BfTk9UX1BSSU1FOjEsREhfVU5BQkxFX1RPX0NIRUNLX0dFTkVSQVRPUjo0LERIX05PVF9TVUlUQUJMRV9HRU5FUkFUT1I6OCxOUE5fRU5BQkxFRDoxLEFMUE5fRU5BQkxFRDoxLFJTQV9QS0NTMV9QQURESU5HOjEsUlNBX1NTTFYyM19QQURESU5HOjIsUlNBX05P'@;
put 'X1BBRERJTkc6MyxSU0FfUEtDUzFfT0FFUF9QQURESU5HOjQsUlNBX1g5MzFfUEFERElORzo1LFJTQV9QS0NTMV9QU1NfUEFERElORzo2LFBPSU5UX0NPTlZFUlNJT05fQ09NUFJFU1NFRDoyLFBPSU5UX0NPTlZFUlNJT05fVU5DT01QUkVTU0VEOjQsUE9JTlRfQ09OVkVSU0lPTl9IWUJSSUQ6'@;
put 'Nn19LDIyOTY6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg0NDI5KSxfPXkoMzQ2NCksZz15KDQ0NTMpLEI9eSg3Mjk2KTt1ZS5leHBvcnRzPWZ1bmN0aW9uKFAsRixPKXtpZighUHx8Im9iamVjdCIhPXR5cGVvZiBQJiYiZnVuY3Rpb24iIT10eXBlb2YgUCl0aHJvdyBuZXcgZygi'@;
put 'YG9iamAgbXVzdCBiZSBhbiBvYmplY3Qgb3IgYSBmdW5jdGlvbmAiKTtpZigic3RyaW5nIiE9dHlwZW9mIEYmJiJzeW1ib2wiIT10eXBlb2YgRil0aHJvdyBuZXcgZygiYHByb3BlcnR5YCBtdXN0IGJlIGEgc3RyaW5nIG9yIGEgc3ltYm9sYCIpO2lmKGFyZ3VtZW50cy5sZW5ndGg+MyYmImJv'@;
put 'b2xlYW4iIT10eXBlb2YgYXJndW1lbnRzWzNdJiZudWxsIT09YXJndW1lbnRzWzNdKXRocm93IG5ldyBnKCJgbm9uRW51bWVyYWJsZWAsIGlmIHByb3ZpZGVkLCBtdXN0IGJlIGEgYm9vbGVhbiBvciBudWxsIik7aWYoYXJndW1lbnRzLmxlbmd0aD40JiYiYm9vbGVhbiIhPXR5cGVvZiBhcmd1'@;
put 'bWVudHNbNF0mJm51bGwhPT1hcmd1bWVudHNbNF0pdGhyb3cgbmV3IGcoImBub25Xcml0YWJsZWAsIGlmIHByb3ZpZGVkLCBtdXN0IGJlIGEgYm9vbGVhbiBvciBudWxsIik7aWYoYXJndW1lbnRzLmxlbmd0aD41JiYiYm9vbGVhbiIhPXR5cGVvZiBhcmd1bWVudHNbNV0mJm51bGwhPT1hcmd1'@;
put 'bWVudHNbNV0pdGhyb3cgbmV3IGcoImBub25Db25maWd1cmFibGVgLCBpZiBwcm92aWRlZCwgbXVzdCBiZSBhIGJvb2xlYW4gb3IgbnVsbCIpO2lmKGFyZ3VtZW50cy5sZW5ndGg+NiYmImJvb2xlYW4iIT10eXBlb2YgYXJndW1lbnRzWzZdKXRocm93IG5ldyBnKCJgbG9vc2VgLCBpZiBwcm92'@;
put 'aWRlZCwgbXVzdCBiZSBhIGJvb2xlYW4iKTt2YXIgej1hcmd1bWVudHMubGVuZ3RoPjM/YXJndW1lbnRzWzNdOm51bGwsTj1hcmd1bWVudHMubGVuZ3RoPjQ/YXJndW1lbnRzWzRdOm51bGwsTD1hcmd1bWVudHMubGVuZ3RoPjU/YXJndW1lbnRzWzVdOm51bGwsSz1hcmd1bWVudHMubGVuZ3Ro'@;
put 'PjYmJmFyZ3VtZW50c1s2XSxVPSEhQiYmQihQLEYpO2lmKEkpSShQLEYse2NvbmZpZ3VyYWJsZTpudWxsPT09TCYmVT9VLmNvbmZpZ3VyYWJsZTohTCxlbnVtZXJhYmxlOm51bGw9PT16JiZVP1UuZW51bWVyYWJsZToheix2YWx1ZTpPLHdyaXRhYmxlOm51bGw9PT1OJiZVP1Uud3JpdGFibGU6'@;
put 'IU59KTtlbHNle2lmKCFLJiYoenx8Tnx8TCkpdGhyb3cgbmV3IF8oIlRoaXMgZW52aXJvbm1lbnQgZG9lcyBub3Qgc3VwcG9ydCBkZWZpbmluZyBhIHByb3BlcnR5IGFzIG5vbi1jb25maWd1cmFibGUsIG5vbi13cml0YWJsZSwgb3Igbm9uLWVudW1lcmFibGUuIik7UFtGXT1PfX19LDQyODk6'@;
put 'KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSgyMjE1KSxfPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sKCJmb28iKSxnPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcsQj1BcnJheS5wcm90b3R5cGUuY29uY2F0LHc9eSgyMjk2KSxGPXko'@;
put 'MTA0NCkoKSxPPWZ1bmN0aW9uKE4sTCxLLFUpe2lmKEwgaW4gTilpZighMD09PVUpe2lmKE5bTF09PT1LKXJldHVybn1lbHNlIGlmKCFmdW5jdGlvbihOKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgTiYmIltvYmplY3QgRnVuY3Rpb25dIj09PWcuY2FsbChOKX0oVSl8fCFVKCkpcmV0dXJu'@;
put 'O0Y/dyhOLEwsSywhMCk6dyhOLEwsSyl9LHo9ZnVuY3Rpb24oTixMKXt2YXIgSz1hcmd1bWVudHMubGVuZ3RoPjI/YXJndW1lbnRzWzJdOnt9LFU9SShMKTtfJiYoVT1CLmNhbGwoVSxPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKEwpKSk7Zm9yKHZhciBXPTA7VzxVLmxlbmd0aDtXKz0x'@;
put 'KU8oTixVW1ddLExbVVtXXV0sS1tVW1ddXSl9O3ouc3VwcG9ydHNEZXNjcmlwdG9ycz0hIUYsdWUuZXhwb3J0cz16fSw1MjUxOih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO1gudXRpbHM9eSgxMjc4KSxYLkNpcGhlcj15KDU3NTYpLFguREVTPXkoNzc4KSxYLkNCQz15KDkwNTEpLFguRURFPXko'@;
put 'NjUxKX0sOTA1MToodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDk3NDYpLF89eSg1NzE3KSxnPXt9O2Z1bmN0aW9uIEIoUCl7SS5lcXVhbChQLmxlbmd0aCw4LCJJbnZhbGlkIElWIGxlbmd0aCIpLHRoaXMuaXY9bmV3IEFycmF5KDgpO2Zvcih2YXIgRj0wO0Y8dGhpcy5pdi5sZW5n'@;
put 'dGg7RisrKXRoaXMuaXZbRl09UFtGXX1YLmluc3RhbnRpYXRlPWZ1bmN0aW9uIHcoUCl7ZnVuY3Rpb24gRihMKXtQLmNhbGwodGhpcyxMKSx0aGlzLl9jYmNJbml0KCl9XyhGLFApO2Zvcih2YXIgTz1PYmplY3Qua2V5cyhnKSx6PTA7ejxPLmxlbmd0aDt6Kyspe3ZhciBOPU9bel07Ri5wcm90'@;
put 'b3R5cGVbTl09Z1tOXX1yZXR1cm4gRi5jcmVhdGU9ZnVuY3Rpb24oSyl7cmV0dXJuIG5ldyBGKEspfSxGfSxnLl9jYmNJbml0PWZ1bmN0aW9uKCl7dmFyIEY9bmV3IEIodGhpcy5vcHRpb25zLml2KTt0aGlzLl9jYmNTdGF0ZT1GfSxnLl91cGRhdGU9ZnVuY3Rpb24oRixPLHosTil7dmFyIEs9'@;
put 'dGhpcy5jb25zdHJ1Y3Rvci5zdXBlcl8ucHJvdG90eXBlLFU9dGhpcy5fY2JjU3RhdGUuaXY7aWYoImVuY3J5cHQiPT09dGhpcy50eXBlKXtmb3IodmFyIFc9MDtXPHRoaXMuYmxvY2tTaXplO1crKylVW1ddXj1GW08rV107Zm9yKEsuX3VwZGF0ZS5jYWxsKHRoaXMsVSwwLHosTiksVz0wO1c8'@;
put 'dGhpcy5ibG9ja1NpemU7VysrKVVbV109eltOK1ddfWVsc2V7Zm9yKEsuX3VwZGF0ZS5jYWxsKHRoaXMsRixPLHosTiksVz0wO1c8dGhpcy5ibG9ja1NpemU7VysrKXpbTitXXV49VVtXXTtmb3IoVz0wO1c8dGhpcy5ibG9ja1NpemU7VysrKVVbV109RltPK1ddfX19LDU3NTY6KHVlLFgseSk9'@;
put 'PnsidXNlIHN0cmljdCI7dmFyIEk9eSg5NzQ2KTtmdW5jdGlvbiBfKGcpe3RoaXMub3B0aW9ucz1nLHRoaXMudHlwZT10aGlzLm9wdGlvbnMudHlwZSx0aGlzLmJsb2NrU2l6ZT04LHRoaXMuX2luaXQoKSx0aGlzLmJ1ZmZlcj1uZXcgQXJyYXkodGhpcy5ibG9ja1NpemUpLHRoaXMuYnVmZmVy'@;
put 'T2ZmPTAsdGhpcy5wYWRkaW5nPSExIT09Zy5wYWRkaW5nfXVlLmV4cG9ydHM9XyxfLnByb3RvdHlwZS5faW5pdD1mdW5jdGlvbigpe30sXy5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKEIpe3JldHVybiAwPT09Qi5sZW5ndGg/W106ImRlY3J5cHQiPT09dGhpcy50eXBlP3RoaXMuX3VwZGF0'@;
put 'ZURlY3J5cHQoQik6dGhpcy5fdXBkYXRlRW5jcnlwdChCKX0sXy5wcm90b3R5cGUuX2J1ZmZlcj1mdW5jdGlvbihCLHcpe2Zvcih2YXIgUD1NYXRoLm1pbih0aGlzLmJ1ZmZlci5sZW5ndGgtdGhpcy5idWZmZXJPZmYsQi5sZW5ndGgtdyksRj0wO0Y8UDtGKyspdGhpcy5idWZmZXJbdGhpcy5i'@;
put 'dWZmZXJPZmYrRl09Qlt3K0ZdO3JldHVybiB0aGlzLmJ1ZmZlck9mZis9UCxQfSxfLnByb3RvdHlwZS5fZmx1c2hCdWZmZXI9ZnVuY3Rpb24oQix3KXtyZXR1cm4gdGhpcy5fdXBkYXRlKHRoaXMuYnVmZmVyLDAsQix3KSx0aGlzLmJ1ZmZlck9mZj0wLHRoaXMuYmxvY2tTaXplfSxfLnByb3Rv'@;
put 'dHlwZS5fdXBkYXRlRW5jcnlwdD1mdW5jdGlvbihCKXt2YXIgdz0wLFA9MCxPPW5ldyBBcnJheSgoKHRoaXMuYnVmZmVyT2ZmK0IubGVuZ3RoKS90aGlzLmJsb2NrU2l6ZXwwKSp0aGlzLmJsb2NrU2l6ZSk7MCE9PXRoaXMuYnVmZmVyT2ZmJiYodys9dGhpcy5fYnVmZmVyKEIsdyksdGhpcy5i'@;
put 'dWZmZXJPZmY9PT10aGlzLmJ1ZmZlci5sZW5ndGgmJihQKz10aGlzLl9mbHVzaEJ1ZmZlcihPLFApKSk7Zm9yKHZhciB6PUIubGVuZ3RoLShCLmxlbmd0aC13KSV0aGlzLmJsb2NrU2l6ZTt3PHo7dys9dGhpcy5ibG9ja1NpemUpdGhpcy5fdXBkYXRlKEIsdyxPLFApLFArPXRoaXMuYmxvY2tT'@;
put 'aXplO2Zvcig7dzxCLmxlbmd0aDt3KyssdGhpcy5idWZmZXJPZmYrKyl0aGlzLmJ1ZmZlclt0aGlzLmJ1ZmZlck9mZl09Qlt3XTtyZXR1cm4gT30sXy5wcm90b3R5cGUuX3VwZGF0ZURlY3J5cHQ9ZnVuY3Rpb24oQil7Zm9yKHZhciB3PTAsUD0wLEY9TWF0aC5jZWlsKCh0aGlzLmJ1ZmZlck9m'@;
put 'ZitCLmxlbmd0aCkvdGhpcy5ibG9ja1NpemUpLTEsTz1uZXcgQXJyYXkoRip0aGlzLmJsb2NrU2l6ZSk7Rj4wO0YtLSl3Kz10aGlzLl9idWZmZXIoQix3KSxQKz10aGlzLl9mbHVzaEJ1ZmZlcihPLFApO3JldHVybiB3Kz10aGlzLl9idWZmZXIoQix3KSxPfSxfLnByb3RvdHlwZS5maW5hbD1m'@;
put 'dW5jdGlvbihCKXt2YXIgdyxQO3JldHVybiBCJiYodz10aGlzLnVwZGF0ZShCKSksUD0iZW5jcnlwdCI9PT10aGlzLnR5cGU/dGhpcy5fZmluYWxFbmNyeXB0KCk6dGhpcy5fZmluYWxEZWNyeXB0KCksdz93LmNvbmNhdChQKTpQfSxfLnByb3RvdHlwZS5fcGFkPWZ1bmN0aW9uKEIsdyl7aWYo'@;
put 'MD09PXcpcmV0dXJuITE7Zm9yKDt3PEIubGVuZ3RoOylCW3crK109MDtyZXR1cm4hMH0sXy5wcm90b3R5cGUuX2ZpbmFsRW5jcnlwdD1mdW5jdGlvbigpe2lmKCF0aGlzLl9wYWQodGhpcy5idWZmZXIsdGhpcy5idWZmZXJPZmYpKXJldHVybltdO3ZhciBCPW5ldyBBcnJheSh0aGlzLmJsb2Nr'@;
put 'U2l6ZSk7cmV0dXJuIHRoaXMuX3VwZGF0ZSh0aGlzLmJ1ZmZlciwwLEIsMCksQn0sXy5wcm90b3R5cGUuX3VucGFkPWZ1bmN0aW9uKEIpe3JldHVybiBCfSxfLnByb3RvdHlwZS5fZmluYWxEZWNyeXB0PWZ1bmN0aW9uKCl7SS5lcXVhbCh0aGlzLmJ1ZmZlck9mZix0aGlzLmJsb2NrU2l6ZSwi'@;
put 'Tm90IGVub3VnaCBkYXRhIHRvIGRlY3J5cHQiKTt2YXIgQj1uZXcgQXJyYXkodGhpcy5ibG9ja1NpemUpO3JldHVybiB0aGlzLl9mbHVzaEJ1ZmZlcihCLDApLHRoaXMuX3VucGFkKEIpfX0sNzc4Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoOTc0NiksXz15KDU3MTcpLGc9eSgx'@;
put 'Mjc4KSxCPXkoNTc1Nik7ZnVuY3Rpb24gdygpe3RoaXMudG1wPW5ldyBBcnJheSgyKSx0aGlzLmtleXM9bnVsbH1mdW5jdGlvbiBQKE8pe0IuY2FsbCh0aGlzLE8pO3ZhciB6PW5ldyB3O3RoaXMuX2Rlc1N0YXRlPXosdGhpcy5kZXJpdmVLZXlzKHosTy5rZXkpfV8oUCxCKSx1ZS5leHBvcnRz'@;
put 'PVAsUC5jcmVhdGU9ZnVuY3Rpb24oeil7cmV0dXJuIG5ldyBQKHopfTt2YXIgRj1bMSwxLDIsMiwyLDIsMiwyLDEsMiwyLDIsMiwyLDIsMV07UC5wcm90b3R5cGUuZGVyaXZlS2V5cz1mdW5jdGlvbih6LE4pe3oua2V5cz1uZXcgQXJyYXkoMzIpLEkuZXF1YWwoTi5sZW5ndGgsdGhpcy5ibG9j'@;
put 'a1NpemUsIkludmFsaWQga2V5IGxlbmd0aCIpO3ZhciBMPWcucmVhZFVJbnQzMkJFKE4sMCksSz1nLnJlYWRVSW50MzJCRShOLDQpO2cucGMxKEwsSyx6LnRtcCwwKSxMPXoudG1wWzBdLEs9ei50bXBbMV07Zm9yKHZhciBVPTA7VTx6LmtleXMubGVuZ3RoO1UrPTIpe3ZhciBXPUZbVT4+PjFd'@;
put 'O0w9Zy5yMjhzaGwoTCxXKSxLPWcucjI4c2hsKEssVyksZy5wYzIoTCxLLHoua2V5cyxVKX19LFAucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oeixOLEwsSyl7dmFyIFU9dGhpcy5fZGVzU3RhdGUsVz1nLnJlYWRVSW50MzJCRSh6LE4pLFk9Zy5yZWFkVUludDMyQkUoeixOKzQpO2cuaXAo'@;
put 'VyxZLFUudG1wLDApLFc9VS50bXBbMF0sWT1VLnRtcFsxXSwiZW5jcnlwdCI9PT10aGlzLnR5cGU/dGhpcy5fZW5jcnlwdChVLFcsWSxVLnRtcCwwKTp0aGlzLl9kZWNyeXB0KFUsVyxZLFUudG1wLDApLFk9VS50bXBbMV0sZy53cml0ZVVJbnQzMkJFKEwsVz1VLnRtcFswXSxLKSxnLndyaXRl'@;
put 'VUludDMyQkUoTCxZLEsrNCl9LFAucHJvdG90eXBlLl9wYWQ9ZnVuY3Rpb24oeixOKXtpZighMT09PXRoaXMucGFkZGluZylyZXR1cm4hMTtmb3IodmFyIEw9ei5sZW5ndGgtTixLPU47Szx6Lmxlbmd0aDtLKyspeltLXT1MO3JldHVybiEwfSxQLnByb3RvdHlwZS5fdW5wYWQ9ZnVuY3Rpb24o'@;
put 'eil7aWYoITE9PT10aGlzLnBhZGRpbmcpcmV0dXJuIHo7Zm9yKHZhciBOPXpbei5sZW5ndGgtMV0sTD16Lmxlbmd0aC1OO0w8ei5sZW5ndGg7TCsrKUkuZXF1YWwoeltMXSxOKTtyZXR1cm4gei5zbGljZSgwLHoubGVuZ3RoLU4pfSxQLnByb3RvdHlwZS5fZW5jcnlwdD1mdW5jdGlvbih6LE4s'@;
put 'TCxLLFUpe2Zvcih2YXIgVz1OLFk9TCxxPTA7cTx6LmtleXMubGVuZ3RoO3ErPTIpe3ZhciBlZT16LmtleXNbcV0sSj16LmtleXNbcSsxXTtnLmV4cGFuZChZLHoudG1wLDApO3ZhciBuZT1nLnN1YnN0aXR1dGUoZWVePXoudG1wWzBdLEpePXoudG1wWzFdKSxsZT1ZO1k9KFdeZy5wZXJtdXRl'@;
put 'KG5lKSk+Pj4wLFc9bGV9Zy5yaXAoWSxXLEssVSl9LFAucHJvdG90eXBlLl9kZWNyeXB0PWZ1bmN0aW9uKHosTixMLEssVSl7Zm9yKHZhciBXPUwsWT1OLHE9ei5rZXlzLmxlbmd0aC0yO3E+PTA7cS09Mil7dmFyIGVlPXoua2V5c1txXSxKPXoua2V5c1txKzFdO2cuZXhwYW5kKFcsei50bXAs'@;
put 'MCk7dmFyIG5lPWcuc3Vic3RpdHV0ZShlZV49ei50bXBbMF0sSl49ei50bXBbMV0pLGxlPVc7Vz0oWV5nLnBlcm11dGUobmUpKT4+PjAsWT1sZX1nLnJpcChXLFksSyxVKX19LDY1MToodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDk3NDYpLF89eSg1NzE3KSxnPXkoNTc1NiksQj15'@;
put 'KDc3OCk7ZnVuY3Rpb24gdyhGLE8pe0kuZXF1YWwoTy5sZW5ndGgsMjQsIkludmFsaWQga2V5IGxlbmd0aCIpO3ZhciB6PU8uc2xpY2UoMCw4KSxOPU8uc2xpY2UoOCwxNiksTD1PLnNsaWNlKDE2LDI0KTt0aGlzLmNpcGhlcnM9ImVuY3J5cHQiPT09Rj9bQi5jcmVhdGUoe3R5cGU6ImVuY3J5'@;
put 'cHQiLGtleTp6fSksQi5jcmVhdGUoe3R5cGU6ImRlY3J5cHQiLGtleTpOfSksQi5jcmVhdGUoe3R5cGU6ImVuY3J5cHQiLGtleTpMfSldOltCLmNyZWF0ZSh7dHlwZToiZGVjcnlwdCIsa2V5Okx9KSxCLmNyZWF0ZSh7dHlwZToiZW5jcnlwdCIsa2V5Ok59KSxCLmNyZWF0ZSh7dHlwZToiZGVj'@;
put 'cnlwdCIsa2V5Onp9KV19ZnVuY3Rpb24gUChGKXtnLmNhbGwodGhpcyxGKTt2YXIgTz1uZXcgdyh0aGlzLnR5cGUsdGhpcy5vcHRpb25zLmtleSk7dGhpcy5fZWRlU3RhdGU9T31fKFAsZyksdWUuZXhwb3J0cz1QLFAuY3JlYXRlPWZ1bmN0aW9uKE8pe3JldHVybiBuZXcgUChPKX0sUC5wcm90'@;
put 'b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbihPLHosTixMKXt2YXIgSz10aGlzLl9lZGVTdGF0ZTtLLmNpcGhlcnNbMF0uX3VwZGF0ZShPLHosTixMKSxLLmNpcGhlcnNbMV0uX3VwZGF0ZShOLEwsTixMKSxLLmNpcGhlcnNbMl0uX3VwZGF0ZShOLEwsTixMKX0sUC5wcm90b3R5cGUuX3BhZD1CLnBy'@;
put 'b3RvdHlwZS5fcGFkLFAucHJvdG90eXBlLl91bnBhZD1CLnByb3RvdHlwZS5fdW5wYWR9LDEyNzg6KHVlLFgpPT57InVzZSBzdHJpY3QiO1gucmVhZFVJbnQzMkJFPWZ1bmN0aW9uKEIsdyl7cmV0dXJuKEJbMCt3XTw8MjR8QlsxK3ddPDwxNnxCWzIrd108PDh8QlszK3ddKT4+PjB9LFgud3Jp'@;
put 'dGVVSW50MzJCRT1mdW5jdGlvbihCLHcsUCl7QlswK1BdPXc+Pj4yNCxCWzErUF09dz4+PjE2JjI1NSxCWzIrUF09dz4+PjgmMjU1LEJbMytQXT0yNTUmd30sWC5pcD1mdW5jdGlvbihCLHcsUCxGKXtmb3IodmFyIE89MCx6PTAsTj02O04+PTA7Ti09Mil7Zm9yKHZhciBMPTA7TDw9MjQ7TCs9'@;
put 'OClPPDw9MSxPfD13Pj4+TCtOJjE7Zm9yKEw9MDtMPD0yNDtMKz04KU88PD0xLE98PUI+Pj5MK04mMX1mb3IoTj02O04+PTA7Ti09Mil7Zm9yKEw9MTtMPD0yNTtMKz04KXo8PD0xLHp8PXc+Pj5MK04mMTtmb3IoTD0xO0w8PTI1O0wrPTgpejw8PTEsenw9Qj4+PkwrTiYxfVBbRiswXT1PPj4+'@;
put 'MCxQW0YrMV09ej4+PjB9LFgucmlwPWZ1bmN0aW9uKEIsdyxQLEYpe2Zvcih2YXIgTz0wLHo9MCxOPTA7Tjw0O04rKylmb3IodmFyIEw9MjQ7TD49MDtMLT04KU88PD0xLE98PXc+Pj5MK04mMSxPPDw9MSxPfD1CPj4+TCtOJjE7Zm9yKE49NDtOPDg7TisrKWZvcihMPTI0O0w+PTA7TC09OCl6'@;
put 'PDw9MSx6fD13Pj4+TCtOJjEsejw8PTEsenw9Qj4+PkwrTiYxO1BbRiswXT1PPj4+MCxQW0YrMV09ej4+PjB9LFgucGMxPWZ1bmN0aW9uKEIsdyxQLEYpe2Zvcih2YXIgTz0wLHo9MCxOPTc7Tj49NTtOLS0pe2Zvcih2YXIgTD0wO0w8PTI0O0wrPTgpTzw8PTEsT3w9dz4+TCtOJjE7Zm9yKEw9'@;
put 'MDtMPD0yNDtMKz04KU88PD0xLE98PUI+PkwrTiYxfWZvcihMPTA7TDw9MjQ7TCs9OClPPDw9MSxPfD13Pj5MK04mMTtmb3IoTj0xO048PTM7TisrKXtmb3IoTD0wO0w8PTI0O0wrPTgpejw8PTEsenw9dz4+TCtOJjE7Zm9yKEw9MDtMPD0yNDtMKz04KXo8PD0xLHp8PUI+PkwrTiYxfWZvcihM'@;
put 'PTA7TDw9MjQ7TCs9OCl6PDw9MSx6fD1CPj5MK04mMTtQW0YrMF09Tz4+PjAsUFtGKzFdPXo+Pj4wfSxYLnIyOHNobD1mdW5jdGlvbihCLHcpe3JldHVybiBCPDx3JjI2ODQzNTQ1NXxCPj4+Mjgtd307dmFyIHk9WzE0LDExLDE3LDQsMjcsMjMsMjUsMCwxMywyMiw3LDE4LDUsOSwxNiwyNCwy'@;
put 'LDIwLDEyLDIxLDEsOCwxNSwyNiwxNSw0LDI1LDE5LDksMSwyNiwxNiw1LDExLDIzLDgsMTIsNywxNywwLDIyLDMsMTAsMTQsNiwyMCwyNywyNF07WC5wYzI9ZnVuY3Rpb24oQix3LFAsRil7Zm9yKHZhciBPPTAsej0wLE49eS5sZW5ndGg+Pj4xLEw9MDtMPE47TCsrKU88PD0xLE98PUI+Pj55'@;
put 'W0xdJjE7Zm9yKEw9TjtMPHkubGVuZ3RoO0wrKyl6PDw9MSx6fD13Pj4+eVtMXSYxO1BbRiswXT1PPj4+MCxQW0YrMV09ej4+PjB9LFguZXhwYW5kPWZ1bmN0aW9uKEIsdyxQKXt2YXIgRj0wLE89MDtGPSgxJkIpPDw1fEI+Pj4yNztmb3IodmFyIHo9MjM7ej49MTU7ei09NClGPDw9NixGfD1C'@;
put 'Pj4+eiY2Mztmb3Ioej0xMTt6Pj0zO3otPTQpT3w9Qj4+PnomNjMsTzw8PTY7T3w9KDMxJkIpPDwxfEI+Pj4zMSx3W1ArMF09Rj4+PjAsd1tQKzFdPU8+Pj4wfTt2YXIgST1bMTQsMCw0LDE1LDEzLDcsMSw0LDIsMTQsMTUsMiwxMSwxMyw4LDEsMywxMCwxMCw2LDYsMTIsMTIsMTEsNSw5LDks'@;
put 'NSwwLDMsNyw4LDQsMTUsMSwxMiwxNCw4LDgsMiwxMyw0LDYsOSwyLDEsMTEsNywxNSw1LDEyLDExLDksMyw3LDE0LDMsMTAsMTAsMCw1LDYsMCwxMywxNSwzLDEsMTMsOCw0LDE0LDcsNiwxNSwxMSwyLDMsOCw0LDE0LDksMTIsNywwLDIsMSwxMywxMCwxMiw2LDAsOSw1LDExLDEwLDUsMCwx'@;
put 'MywxNCw4LDcsMTAsMTEsMSwxMCwzLDQsMTUsMTMsNCwxLDIsNSwxMSw4LDYsMTIsNyw2LDEyLDksMCwzLDUsMiwxNCwxNSw5LDEwLDEzLDAsNyw5LDAsMTQsOSw2LDMsMyw0LDE1LDYsNSwxMCwxLDIsMTMsOCwxMiw1LDcsMTQsMTEsMTIsNCwxMSwyLDE1LDgsMSwxMywxLDYsMTAsNCwxMyw5'@;
put 'LDAsOCw2LDE1LDksMyw4LDAsNywxMSw0LDEsMTUsMiwxNCwxMiwzLDUsMTEsMTAsNSwxNCwyLDcsMTIsNywxMywxMyw4LDE0LDExLDMsNSwwLDYsNiwxNSw5LDAsMTAsMywxLDQsMiw3LDgsMiw1LDEyLDExLDEsMTIsMTAsNCwxNCwxNSw5LDEwLDMsNiwxNSw5LDAsMCw2LDEyLDEwLDExLDEs'@;
put 'NywxMywxMyw4LDE1LDksMSw0LDMsNSwxNCwxMSw1LDEyLDIsNyw4LDIsNCwxNCwyLDE0LDEyLDExLDQsMiwxLDEyLDcsNCwxMCw3LDExLDEzLDYsMSw4LDUsNSwwLDMsMTUsMTUsMTAsMTMsMywwLDksMTQsOCw5LDYsNCwxMSwyLDgsMSwxMiwxMSw3LDEwLDEsMTMsMTQsNywyLDgsMTMsMTUs'@;
put 'Niw5LDE1LDEyLDAsNSw5LDYsMTAsMyw0LDAsNSwxNCwzLDEyLDEwLDEsMTUsMTAsNCwxNSwyLDksNywyLDEyLDYsOSw4LDUsMCw2LDEzLDEsMywxMyw0LDE0LDE0LDAsNywxMSw1LDMsMTEsOCw5LDQsMTQsMywxNSwyLDUsMTIsMiw5LDgsNSwxMiwxNSwzLDEwLDcsMTEsMCwxNCw0LDEsMTAs'@;
put 'NywxLDYsMTMsMCwxMSw4LDYsMTMsNCwxMywxMSwwLDIsMTEsMTQsNywxNSw0LDAsOSw4LDEsMTMsMTAsMywxNCwxMiwzLDksNSw3LDEyLDUsMiwxMCwxNSw2LDgsMSw2LDEsNiw0LDExLDExLDEzLDEzLDgsMTIsMSwzLDQsNywxMCwxNCw3LDEwLDksMTUsNSw2LDAsOCwxNSwwLDE0LDUsMiw5'@;
put 'LDMsMiwxMiwxMywxLDIsMTUsOCwxMyw0LDgsNiwxMCwxNSwzLDExLDcsMSw0LDEwLDEyLDksNSwzLDYsMTQsMTEsNSwwLDAsMTQsMTIsOSw3LDIsNywyLDExLDEsNCwxNCwxLDcsOSw0LDEyLDEwLDE0LDgsMiwxMywwLDE1LDYsMTIsMTAsOSwxMywwLDE1LDMsMyw1LDUsNiw4LDExXTtYLnN1'@;
put 'YnN0aXR1dGU9ZnVuY3Rpb24oQix3KXtmb3IodmFyIFA9MCxGPTA7Rjw0O0YrKylQPDw9NCxQfD1JWzY0KkYrKEI+Pj4xOC02KkYmNjMpXTtmb3IoRj0wO0Y8NDtGKyspUDw8PTQsUHw9SVsyNTYrNjQqRisodz4+PjE4LTYqRiY2MyldO3JldHVybiBQPj4+MH07dmFyIF89WzE2LDI1LDEyLDEx'@;
put 'LDMsMjAsNCwxNSwzMSwxNyw5LDYsMjcsMTQsMSwyMiwzMCwyNCw4LDE4LDAsNSwyOSwyMywxMywxOSwyLDI2LDEwLDIxLDI4LDddO1gucGVybXV0ZT1mdW5jdGlvbihCKXtmb3IodmFyIHc9MCxQPTA7UDxfLmxlbmd0aDtQKyspdzw8PTEsd3w9Qj4+Pl9bUF0mMTtyZXR1cm4gdz4+PjB9LFgu'@;
put 'cGFkU3BsaXQ9ZnVuY3Rpb24oQix3LFApe2Zvcih2YXIgRj1CLnRvU3RyaW5nKDIpO0YubGVuZ3RoPHc7KUY9IjAiK0Y7Zm9yKHZhciBPPVtdLHo9MDt6PHc7eis9UClPLnB1c2goRi5zbGljZSh6LHorUCkpO3JldHVybiBPLmpvaW4oIiAiKX19LDI2MDc6KHVlLFgseSk9Pnt2YXIgST15KDg3'@;
put 'NjQpLkJ1ZmZlcixfPXkoMzU5MCksZz15KDk3OTkpLEI9eSg3NDI2KSxQPXtiaW5hcnk6ITAsaGV4OiEwLGJhc2U2NDohMH07WC5EaWZmaWVIZWxsbWFuR3JvdXA9WC5jcmVhdGVEaWZmaWVIZWxsbWFuR3JvdXA9WC5nZXREaWZmaWVIZWxsbWFuPWZ1bmN0aW9uIHcoTyl7dmFyIHo9bmV3IEko'@;
put 'Z1tPXS5wcmltZSwiaGV4IiksTj1uZXcgSShnW09dLmdlbiwiaGV4Iik7cmV0dXJuIG5ldyBCKHosTil9LFguY3JlYXRlRGlmZmllSGVsbG1hbj1YLkRpZmZpZUhlbGxtYW49ZnVuY3Rpb24gRihPLHosTixMKXtyZXR1cm4gSS5pc0J1ZmZlcih6KXx8dm9pZCAwPT09UFt6XT9GKE8sImJpbmFy'@;
put 'eSIseixOKTooej16fHwiYmluYXJ5IixMPUx8fCJiaW5hcnkiLE49Tnx8bmV3IEkoWzJdKSxJLmlzQnVmZmVyKE4pfHwoTj1uZXcgSShOLEwpKSwibnVtYmVyIj09dHlwZW9mIE8/bmV3IEIoXyhPLE4pLE4sITApOihJLmlzQnVmZmVyKE8pfHwoTz1uZXcgSShPLHopKSxuZXcgQihPLE4sITAp'@;
put 'KSl9fSw3NDI2Oih1ZSxYLHkpPT57dmFyIEk9eSg4NzY0KS5CdWZmZXIsXz15KDM2MjApLEI9bmV3KHkoMzA0NykpLHc9bmV3IF8oMjQpLFA9bmV3IF8oMTEpLEY9bmV3IF8oMTApLE89bmV3IF8oMyksej1uZXcgXyg3KSxOPXkoMzU5MCksTD15KDE3OTgpO2Z1bmN0aW9uIEsoSixuZSl7cmV0'@;
put 'dXJuIG5lPW5lfHwidXRmOCIsSS5pc0J1ZmZlcihKKXx8KEo9bmV3IEkoSixuZSkpLHRoaXMuX3B1Yj1uZXcgXyhKKSx0aGlzfWZ1bmN0aW9uIFUoSixuZSl7cmV0dXJuIG5lPW5lfHwidXRmOCIsSS5pc0J1ZmZlcihKKXx8KEo9bmV3IEkoSixuZSkpLHRoaXMuX3ByaXY9bmV3IF8oSiksdGhp'@;
put 'c311ZS5leHBvcnRzPXE7dmFyIFc9e307ZnVuY3Rpb24gcShKLG5lLGllKXt0aGlzLnNldEdlbmVyYXRvcihuZSksdGhpcy5fX3ByaW1lPW5ldyBfKEopLHRoaXMuX3ByaW1lPV8ubW9udCh0aGlzLl9fcHJpbWUpLHRoaXMuX3ByaW1lTGVuPUoubGVuZ3RoLHRoaXMuX3B1Yj12b2lkIDAsdGhp'@;
put 'cy5fcHJpdj12b2lkIDAsdGhpcy5fcHJpbWVDb2RlPXZvaWQgMCxpZT8odGhpcy5zZXRQdWJsaWNLZXk9Syx0aGlzLnNldFByaXZhdGVLZXk9VSk6dGhpcy5fcHJpbWVDb2RlPTh9ZnVuY3Rpb24gZWUoSixuZSl7dmFyIGllPW5ldyBJKEoudG9BcnJheSgpKTtyZXR1cm4gbmU/aWUudG9TdHJp'@;
put 'bmcobmUpOmllfU9iamVjdC5kZWZpbmVQcm9wZXJ0eShxLnByb3RvdHlwZSwidmVyaWZ5RXJyb3IiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiJudW1iZXIiIT10eXBlb2YgdGhpcy5fcHJpbWVDb2RlJiYodGhpcy5fcHJpbWVDb2RlPWZ1bmN0aW9uIFkoSixuZSl7dmFy'@;
put 'IGllPW5lLnRvU3RyaW5nKCJoZXgiKSxsZT1baWUsSi50b1N0cmluZygxNildLmpvaW4oIl8iKTtpZihsZSBpbiBXKXJldHVybiBXW2xlXTt2YXIgX2UsbWU9MDtpZihKLmlzRXZlbigpfHwhTi5zaW1wbGVTaWV2ZXx8IU4uZmVybWF0VGVzdChKKXx8IUIudGVzdChKKSlyZXR1cm4gbWUrPTEs'@;
put 'V1tsZV09bWUrPSIwMiI9PT1pZXx8IjA1Ij09PWllPzg6NCxtZTtzd2l0Y2goQi50ZXN0KEouc2hybigxKSl8fChtZSs9MiksaWUpe2Nhc2UiMDIiOkoubW9kKHcpLmNtcChQKSYmKG1lKz04KTticmVhaztjYXNlIjA1IjooX2U9Si5tb2QoRikpLmNtcChPKSYmX2UuY21wKHopJiYobWUrPTgp'@;
put 'O2JyZWFrO2RlZmF1bHQ6bWUrPTR9cmV0dXJuIFdbbGVdPW1lLG1lfSh0aGlzLl9fcHJpbWUsdGhpcy5fX2dlbikpLHRoaXMuX3ByaW1lQ29kZX19KSxxLnByb3RvdHlwZS5nZW5lcmF0ZUtleXM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcHJpdnx8KHRoaXMuX3ByaXY9bmV3IF8oTCh0aGlz'@;
put 'Ll9wcmltZUxlbikpKSx0aGlzLl9wdWI9dGhpcy5fZ2VuLnRvUmVkKHRoaXMuX3ByaW1lKS5yZWRQb3codGhpcy5fcHJpdikuZnJvbVJlZCgpLHRoaXMuZ2V0UHVibGljS2V5KCl9LHEucHJvdG90eXBlLmNvbXB1dGVTZWNyZXQ9ZnVuY3Rpb24oSil7dmFyIG5lPShKPShKPW5ldyBfKEopKS50'@;
put 'b1JlZCh0aGlzLl9wcmltZSkpLnJlZFBvdyh0aGlzLl9wcml2KS5mcm9tUmVkKCksaWU9bmV3IEkobmUudG9BcnJheSgpKSxsZT10aGlzLmdldFByaW1lKCk7aWYoaWUubGVuZ3RoPGxlLmxlbmd0aCl7dmFyIG1lPW5ldyBJKGxlLmxlbmd0aC1pZS5sZW5ndGgpO21lLmZpbGwoMCksaWU9SS5j'@;
put 'b25jYXQoW21lLGllXSl9cmV0dXJuIGllfSxxLnByb3RvdHlwZS5nZXRQdWJsaWNLZXk9ZnVuY3Rpb24obmUpe3JldHVybiBlZSh0aGlzLl9wdWIsbmUpfSxxLnByb3RvdHlwZS5nZXRQcml2YXRlS2V5PWZ1bmN0aW9uKG5lKXtyZXR1cm4gZWUodGhpcy5fcHJpdixuZSl9LHEucHJvdG90eXBl'@;
put 'LmdldFByaW1lPWZ1bmN0aW9uKEope3JldHVybiBlZSh0aGlzLl9fcHJpbWUsSil9LHEucHJvdG90eXBlLmdldEdlbmVyYXRvcj1mdW5jdGlvbihKKXtyZXR1cm4gZWUodGhpcy5fZ2VuLEopfSxxLnByb3RvdHlwZS5zZXRHZW5lcmF0b3I9ZnVuY3Rpb24oSixuZSl7cmV0dXJuIG5lPW5lfHwi'@;
put 'dXRmOCIsSS5pc0J1ZmZlcihKKXx8KEo9bmV3IEkoSixuZSkpLHRoaXMuX19nZW49Six0aGlzLl9nZW49bmV3IF8oSiksdGhpc319LDM1OTA6KHVlLFgseSk9Pnt2YXIgST15KDE3OTgpO3VlLmV4cG9ydHM9bGUsbGUuc2ltcGxlU2lldmU9bmUsbGUuZmVybWF0VGVzdD1pZTt2YXIgXz15KDM2'@;
put 'MjApLGc9bmV3IF8oMjQpLHc9bmV3KHkoMzA0NykpLFA9bmV3IF8oMSksRj1uZXcgXygyKSxPPW5ldyBfKDUpLEw9KG5ldyBfKDE2KSxuZXcgXyg4KSxuZXcgXygxMCkpLEs9bmV3IF8oMyksVz0obmV3IF8oNyksbmV3IF8oMTEpKSxZPW5ldyBfKDQpLGVlPShuZXcgXygxMiksbnVsbCk7ZnVu'@;
put 'Y3Rpb24gbmUobWUpe2Zvcih2YXIgX2U9ZnVuY3Rpb24gSigpe2lmKG51bGwhPT1lZSlyZXR1cm4gZWU7dmFyIF9lPVtdO19lWzBdPTI7Zm9yKHZhciBUZT0xLFNlPTM7U2U8MTA0ODU3NjtTZSs9Mil7Zm9yKHZhciBqZT1NYXRoLmNlaWwoTWF0aC5zcXJ0KFNlKSksVj0wO1Y8VGUmJl9lW1Zd'@;
put 'PD1qZSYmU2UlX2VbVl0hPTA7VisrKTtUZSE9PVYmJl9lW1ZdPD1qZXx8KF9lW1RlKytdPVNlKX1yZXR1cm4gZWU9X2UsX2V9KCksVGU9MDtUZTxfZS5sZW5ndGg7VGUrKylpZigwPT09bWUubW9kbihfZVtUZV0pKXJldHVybiAwPT09bWUuY21wbihfZVtUZV0pO3JldHVybiEwfWZ1bmN0aW9u'@;
put 'IGllKG1lKXt2YXIgX2U9Xy5tb250KG1lKTtyZXR1cm4gMD09PUYudG9SZWQoX2UpLnJlZFBvdyhtZS5zdWJuKDEpKS5mcm9tUmVkKCkuY21wbigxKX1mdW5jdGlvbiBsZShtZSxfZSl7aWYobWU8MTYpcmV0dXJuIG5ldyBfKDI9PT1fZXx8NT09PV9lP1sxNDAsMTIzXTpbMTQwLDM5XSk7X2U9'@;
put 'bmV3IF8oX2UpO2Zvcih2YXIgVGUsU2U7Oyl7Zm9yKFRlPW5ldyBfKEkoTWF0aC5jZWlsKG1lLzgpKSk7VGUuYml0TGVuZ3RoKCk+bWU7KVRlLmlzaHJuKDEpO2lmKFRlLmlzRXZlbigpJiZUZS5pYWRkKFApLFRlLnRlc3RuKDEpfHxUZS5pYWRkKEYpLF9lLmNtcChGKSl7aWYoIV9lLmNtcChP'@;
put 'KSlmb3IoO1RlLm1vZChMKS5jbXAoSyk7KVRlLmlhZGQoWSl9ZWxzZSBmb3IoO1RlLm1vZChnKS5jbXAoVyk7KVRlLmlhZGQoWSk7aWYobmUoU2U9VGUuc2hybigxKSkmJm5lKFRlKSYmaWUoU2UpJiZpZShUZSkmJncudGVzdChTZSkmJncudGVzdChUZSkpcmV0dXJuIFRlfX19LDM2MjA6ZnVu'@;
put 'Y3Rpb24odWUsWCx5KXshZnVuY3Rpb24oSSxfKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gZyhWLHApe2lmKCFWKXRocm93IG5ldyBFcnJvcihwfHwiQXNzZXJ0aW9uIGZhaWxlZCIpfWZ1bmN0aW9uIEIoVixwKXtWLnN1cGVyXz1wO3ZhciBiPWZ1bmN0aW9uKCl7fTtiLnByb3RvdHlwZT1wLnBy'@;
put 'b3RvdHlwZSxWLnByb3RvdHlwZT1uZXcgYixWLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1WfWZ1bmN0aW9uIHcoVixwLGIpe2lmKHcuaXNCTihWKSlyZXR1cm4gVjt0aGlzLm5lZ2F0aXZlPTAsdGhpcy53b3Jkcz1udWxsLHRoaXMubGVuZ3RoPTAsdGhpcy5yZWQ9bnVsbCxudWxsIT09ViYmKCgi'@;
put 'bGUiPT09cHx8ImJlIj09PXApJiYoYj1wLHA9MTApLHRoaXMuX2luaXQoVnx8MCxwfHwxMCxifHwiYmUiKSl9dmFyIFA7Im9iamVjdCI9PXR5cGVvZiBJP0kuZXhwb3J0cz13Ol8uQk49dyx3LkJOPXcsdy53b3JkU2l6ZT0yNjt0cnl7UD10eXBlb2Ygd2luZG93PCJ1IiYmdHlwZW9mIHdpbmRv'@;
put 'dy5CdWZmZXI8InUiP3dpbmRvdy5CdWZmZXI6eSg3NzQ4KS5CdWZmZXJ9Y2F0Y2h7fWZ1bmN0aW9uIEYoVixwKXt2YXIgYj1WLmNoYXJDb2RlQXQocCk7cmV0dXJuIGI+PTY1JiZiPD03MD9iLTU1OmI+PTk3JiZiPD0xMDI/Yi04NzpiLTQ4JjE1fWZ1bmN0aW9uIE8oVixwLGIpe3ZhciB4PUYo'@;
put 'VixiKTtyZXR1cm4gYi0xPj1wJiYoeHw9RihWLGItMSk8PDQpLHh9ZnVuY3Rpb24geihWLHAsYix4KXtmb3IodmFyIEM9MCxUPU1hdGgubWluKFYubGVuZ3RoLGIpLEg9cDtIPFQ7SCsrKXt2YXIgaj1WLmNoYXJDb2RlQXQoSCktNDg7Qyo9eCxDKz1qPj00OT9qLTQ5KzEwOmo+PTE3P2otMTcr'@;
put 'MTA6an1yZXR1cm4gQ313LmlzQk49ZnVuY3Rpb24ocCl7cmV0dXJuIHAgaW5zdGFuY2VvZiB3fHxudWxsIT09cCYmIm9iamVjdCI9PXR5cGVvZiBwJiZwLmNvbnN0cnVjdG9yLndvcmRTaXplPT09dy53b3JkU2l6ZSYmQXJyYXkuaXNBcnJheShwLndvcmRzKX0sdy5tYXg9ZnVuY3Rpb24ocCxi'@;
put 'KXtyZXR1cm4gcC5jbXAoYik+MD9wOmJ9LHcubWluPWZ1bmN0aW9uKHAsYil7cmV0dXJuIHAuY21wKGIpPDA/cDpifSx3LnByb3RvdHlwZS5faW5pdD1mdW5jdGlvbihwLGIseCl7aWYoIm51bWJlciI9PXR5cGVvZiBwKXJldHVybiB0aGlzLl9pbml0TnVtYmVyKHAsYix4KTtpZigib2JqZWN0'@;
put 'Ij09dHlwZW9mIHApcmV0dXJuIHRoaXMuX2luaXRBcnJheShwLGIseCk7ImhleCI9PT1iJiYoYj0xNiksZyhiPT09KDB8YikmJmI+PTImJmI8PTM2KTt2YXIgQz0wOyItIj09PShwPXAudG9TdHJpbmcoKS5yZXBsYWNlKC9ccysvZywiIikpWzBdJiYoQysrLHRoaXMubmVnYXRpdmU9MSksQzxw'@;
put 'Lmxlbmd0aCYmKDE2PT09Yj90aGlzLl9wYXJzZUhleChwLEMseCk6KHRoaXMuX3BhcnNlQmFzZShwLGIsQyksImxlIj09PXgmJnRoaXMuX2luaXRBcnJheSh0aGlzLnRvQXJyYXkoKSxiLHgpKSl9LHcucHJvdG90eXBlLl9pbml0TnVtYmVyPWZ1bmN0aW9uKHAsYix4KXtwPDAmJih0aGlzLm5l'@;
put 'Z2F0aXZlPTEscD0tcCkscDw2NzEwODg2ND8odGhpcy53b3Jkcz1bNjcxMDg4NjMmcF0sdGhpcy5sZW5ndGg9MSk6cDw0NTAzNTk5NjI3MzcwNDk2Pyh0aGlzLndvcmRzPVs2NzEwODg2MyZwLHAvNjcxMDg4NjQmNjcxMDg4NjNdLHRoaXMubGVuZ3RoPTIpOihnKHA8OTAwNzE5OTI1NDc0MDk5'@;
put 'MiksdGhpcy53b3Jkcz1bNjcxMDg4NjMmcCxwLzY3MTA4ODY0JjY3MTA4ODYzLDFdLHRoaXMubGVuZ3RoPTMpLCJsZSI9PT14JiZ0aGlzLl9pbml0QXJyYXkodGhpcy50b0FycmF5KCksYix4KX0sdy5wcm90b3R5cGUuX2luaXRBcnJheT1mdW5jdGlvbihwLGIseCl7aWYoZygibnVtYmVyIj09'@;
put 'dHlwZW9mIHAubGVuZ3RoKSxwLmxlbmd0aDw9MClyZXR1cm4gdGhpcy53b3Jkcz1bMF0sdGhpcy5sZW5ndGg9MSx0aGlzO3RoaXMubGVuZ3RoPU1hdGguY2VpbChwLmxlbmd0aC8zKSx0aGlzLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciBDPTA7Qzx0aGlzLmxlbmd0aDtD'@;
put 'KyspdGhpcy53b3Jkc1tDXT0wO3ZhciBULEgsaj0wO2lmKCJiZSI9PT14KWZvcihDPXAubGVuZ3RoLTEsVD0wO0M+PTA7Qy09Myl0aGlzLndvcmRzW1RdfD0oSD1wW0NdfHBbQy0xXTw8OHxwW0MtMl08PDE2KTw8aiY2NzEwODg2Myx0aGlzLndvcmRzW1QrMV09SD4+PjI2LWomNjcxMDg4NjMs'@;
put 'KGorPTI0KT49MjYmJihqLT0yNixUKyspO2Vsc2UgaWYoImxlIj09PXgpZm9yKEM9MCxUPTA7QzxwLmxlbmd0aDtDKz0zKXRoaXMud29yZHNbVF18PShIPXBbQ118cFtDKzFdPDw4fHBbQysyXTw8MTYpPDxqJjY3MTA4ODYzLHRoaXMud29yZHNbVCsxXT1IPj4+MjYtaiY2NzEwODg2Mywoais9'@;
put 'MjQpPj0yNiYmKGotPTI2LFQrKyk7cmV0dXJuIHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuX3BhcnNlSGV4PWZ1bmN0aW9uKHAsYix4KXt0aGlzLmxlbmd0aD1NYXRoLmNlaWwoKHAubGVuZ3RoLWIpLzYpLHRoaXMud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIEM9MDtD'@;
put 'PHRoaXMubGVuZ3RoO0MrKyl0aGlzLndvcmRzW0NdPTA7dmFyIGosVD0wLEg9MDtpZigiYmUiPT09eClmb3IoQz1wLmxlbmd0aC0xO0M+PWI7Qy09MilqPU8ocCxiLEMpPDxULHRoaXMud29yZHNbSF18PTY3MTA4ODYzJmosVD49MTg/KFQtPTE4LHRoaXMud29yZHNbSCs9MV18PWo+Pj4yNik6'@;
put 'VCs9ODtlbHNlIGZvcihDPShwLmxlbmd0aC1iKSUyPT0wP2IrMTpiO0M8cC5sZW5ndGg7Qys9MilqPU8ocCxiLEMpPDxULHRoaXMud29yZHNbSF18PTY3MTA4ODYzJmosVD49MTg/KFQtPTE4LHRoaXMud29yZHNbSCs9MV18PWo+Pj4yNik6VCs9ODt0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBl'@;
put 'Ll9wYXJzZUJhc2U9ZnVuY3Rpb24ocCxiLHgpe3RoaXMud29yZHM9WzBdLHRoaXMubGVuZ3RoPTE7Zm9yKHZhciBDPTAsVD0xO1Q8PTY3MTA4ODYzO1QqPWIpQysrO0MtLSxUPVQvYnwwO2Zvcih2YXIgSD1wLmxlbmd0aC14LGo9SCVDLEU9TWF0aC5taW4oSCxILWopK3gsbT0wLEE9eDtBPEU7'@;
put 'QSs9QyltPXoocCxBLEErQyxiKSx0aGlzLmltdWxuKFQpLHRoaXMud29yZHNbMF0rbTw2NzEwODg2ND90aGlzLndvcmRzWzBdKz1tOnRoaXMuX2lhZGRuKG0pO2lmKDAhPT1qKXt2YXIgYWU9MTtmb3IobT16KHAsQSxwLmxlbmd0aCxiKSxBPTA7QTxqO0ErKylhZSo9Yjt0aGlzLmltdWxuKGFl'@;
put 'KSx0aGlzLndvcmRzWzBdK208NjcxMDg4NjQ/dGhpcy53b3Jkc1swXSs9bTp0aGlzLl9pYWRkbihtKX10aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24ocCl7cC53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgYj0wO2I8dGhpcy5sZW5ndGg7YisrKXAu'@;
put 'd29yZHNbYl09dGhpcy53b3Jkc1tiXTtwLmxlbmd0aD10aGlzLmxlbmd0aCxwLm5lZ2F0aXZlPXRoaXMubmVnYXRpdmUscC5yZWQ9dGhpcy5yZWR9LHcucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKCl7dmFyIHA9bmV3IHcobnVsbCk7cmV0dXJuIHRoaXMuY29weShwKSxwfSx3LnByb3RvdHlw'@;
put 'ZS5fZXhwYW5kPWZ1bmN0aW9uKHApe2Zvcig7dGhpcy5sZW5ndGg8cDspdGhpcy53b3Jkc1t0aGlzLmxlbmd0aCsrXT0wO3JldHVybiB0aGlzfSx3LnByb3RvdHlwZS5zdHJpcD1mdW5jdGlvbigpe2Zvcig7dGhpcy5sZW5ndGg+MSYmMD09PXRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV07KXRo'@;
put 'aXMubGVuZ3RoLS07cmV0dXJuIHRoaXMuX25vcm1TaWduKCl9LHcucHJvdG90eXBlLl9ub3JtU2lnbj1mdW5jdGlvbigpe3JldHVybiAxPT09dGhpcy5sZW5ndGgmJjA9PT10aGlzLndvcmRzWzBdJiYodGhpcy5uZWdhdGl2ZT0wKSx0aGlzfSx3LnByb3RvdHlwZS5pbnNwZWN0PWZ1bmN0aW9u'@;
put 'KCl7cmV0dXJuKHRoaXMucmVkPyI8Qk4tUjogIjoiPEJOOiAiKSt0aGlzLnRvU3RyaW5nKDE2KSsiPiJ9O3ZhciBOPVsiIiwiMCIsIjAwIiwiMDAwIiwiMDAwMCIsIjAwMDAwIiwiMDAwMDAwIiwiMDAwMDAwMCIsIjAwMDAwMDAwIiwiMDAwMDAwMDAwIiwiMDAwMDAwMDAwMCIsIjAwMDAwMDAw'@;
put 'MDAwIiwiMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAw'@;
put 'MDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCJdLEw9WzAsMCwyNSwxNiwxMiwxMSwxMCw5'@;
put 'LDgsOCw3LDcsNyw3LDYsNiw2LDYsNiw2LDYsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNV0sSz1bMCwwLDMzNTU0NDMyLDQzMDQ2NzIxLDE2Nzc3MjE2LDQ4ODI4MTI1LDYwNDY2MTc2LDQwMzUzNjA3LDE2Nzc3MjE2LDQzMDQ2NzIxLDFlNywxOTQ4NzE3MSwzNTgzMTgwOCw2Mjc0'@;
put 'ODUxNyw3NTI5NTM2LDExMzkwNjI1LDE2Nzc3MjE2LDI0MTM3NTY5LDM0MDEyMjI0LDQ3MDQ1ODgxLDY0ZTYsNDA4NDEwMSw1MTUzNjMyLDY0MzYzNDMsNzk2MjYyNCw5NzY1NjI1LDExODgxMzc2LDE0MzQ4OTA3LDE3MjEwMzY4LDIwNTExMTQ5LDI0M2U1LDI4NjI5MTUxLDMzNTU0NDMyLDM5'@;
put 'MTM1MzkzLDQ1NDM1NDI0LDUyNTIxODc1LDYwNDY2MTc2XTtmdW5jdGlvbiBXKFYscCxiKXtiLm5lZ2F0aXZlPXAubmVnYXRpdmVeVi5uZWdhdGl2ZTt2YXIgeD1WLmxlbmd0aCtwLmxlbmd0aHwwO2IubGVuZ3RoPXgseD14LTF8MDt2YXIgQz0wfFYud29yZHNbMF0sVD0wfHAud29yZHNbMF0s'@;
put 'SD1DKlQsRT1ILzY3MTA4ODY0fDA7Yi53b3Jkc1swXT02NzEwODg2MyZIO2Zvcih2YXIgbT0xO208eDttKyspe2Zvcih2YXIgQT1FPj4+MjYsYWU9NjcxMDg4NjMmRSx0ZT1NYXRoLm1pbihtLHAubGVuZ3RoLTEpLHNlPU1hdGgubWF4KDAsbS1WLmxlbmd0aCsxKTtzZTw9dGU7c2UrKylBKz0o'@;
put 'SD0oQz0wfFYud29yZHNbbS1zZXwwXSkqKFQ9MHxwLndvcmRzW3NlXSkrYWUpLzY3MTA4ODY0fDAsYWU9NjcxMDg4NjMmSDtiLndvcmRzW21dPTB8YWUsRT0wfEF9cmV0dXJuIDAhPT1FP2Iud29yZHNbbV09MHxFOmIubGVuZ3RoLS0sYi5zdHJpcCgpfXcucHJvdG90eXBlLnRvU3RyaW5nPWZ1'@;
put 'bmN0aW9uKHAsYil7dmFyIHg7aWYoYj0wfGJ8fDEsMTY9PT0ocD1wfHwxMCl8fCJoZXgiPT09cCl7eD0iIjtmb3IodmFyIEM9MCxUPTAsSD0wO0g8dGhpcy5sZW5ndGg7SCsrKXt2YXIgaj10aGlzLndvcmRzW0hdLEU9KDE2Nzc3MjE1JihqPDxDfFQpKS50b1N0cmluZygxNik7VD1qPj4+MjQt'@;
put 'QyYxNjc3NzIxNSwoQys9Mik+PTI2JiYoQy09MjYsSC0tKSx4PTAhPT1UfHxIIT09dGhpcy5sZW5ndGgtMT9OWzYtRS5sZW5ndGhdK0UreDpFK3h9Zm9yKDAhPT1UJiYoeD1ULnRvU3RyaW5nKDE2KSt4KTt4Lmxlbmd0aCViIT0wOyl4PSIwIit4O3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZSYm'@;
put 'KHg9Ii0iK3gpLHh9aWYocD09PSgwfHApJiZwPj0yJiZwPD0zNil7dmFyIG09TFtwXSxBPUtbcF07eD0iIjt2YXIgYWU9dGhpcy5jbG9uZSgpO2ZvcihhZS5uZWdhdGl2ZT0wOyFhZS5pc1plcm8oKTspe3ZhciB0ZT1hZS5tb2RuKEEpLnRvU3RyaW5nKHApO3g9KGFlPWFlLmlkaXZuKEEpKS5p'@;
put 'c1plcm8oKT90ZSt4Ok5bbS10ZS5sZW5ndGhdK3RlK3h9Zm9yKHRoaXMuaXNaZXJvKCkmJih4PSIwIit4KTt4Lmxlbmd0aCViIT0wOyl4PSIwIit4O3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZSYmKHg9Ii0iK3gpLHh9ZyghMSwiQmFzZSBzaG91bGQgYmUgYmV0d2VlbiAyIGFuZCAzNiIpfSx3'@;
put 'LnByb3RvdHlwZS50b051bWJlcj1mdW5jdGlvbigpe3ZhciBwPXRoaXMud29yZHNbMF07cmV0dXJuIDI9PT10aGlzLmxlbmd0aD9wKz02NzEwODg2NCp0aGlzLndvcmRzWzFdOjM9PT10aGlzLmxlbmd0aCYmMT09PXRoaXMud29yZHNbMl0/cCs9NDUwMzU5OTYyNzM3MDQ5Nis2NzEwODg2NCp0'@;
put 'aGlzLndvcmRzWzFdOnRoaXMubGVuZ3RoPjImJmcoITEsIk51bWJlciBjYW4gb25seSBzYWZlbHkgc3RvcmUgdXAgdG8gNTMgYml0cyIpLDAhPT10aGlzLm5lZ2F0aXZlPy1wOnB9LHcucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRvU3RyaW5nKDE2KX0sdy5wcm90'@;
put 'b3R5cGUudG9CdWZmZXI9ZnVuY3Rpb24ocCxiKXtyZXR1cm4gZyh0eXBlb2YgUDwidSIpLHRoaXMudG9BcnJheUxpa2UoUCxwLGIpfSx3LnByb3RvdHlwZS50b0FycmF5PWZ1bmN0aW9uKHAsYil7cmV0dXJuIHRoaXMudG9BcnJheUxpa2UoQXJyYXkscCxiKX0sdy5wcm90b3R5cGUudG9BcnJh'@;
put 'eUxpa2U9ZnVuY3Rpb24ocCxiLHgpe3ZhciBDPXRoaXMuYnl0ZUxlbmd0aCgpLFQ9eHx8TWF0aC5tYXgoMSxDKTtnKEM8PVQsImJ5dGUgYXJyYXkgbG9uZ2VyIHRoYW4gZGVzaXJlZCBsZW5ndGgiKSxnKFQ+MCwiUmVxdWVzdGVkIGFycmF5IGxlbmd0aCA8PSAwIiksdGhpcy5zdHJpcCgpO3Zh'@;
put 'ciBFLG0sSD0ibGUiPT09YixqPW5ldyBwKFQpLEE9dGhpcy5jbG9uZSgpO2lmKEgpe2ZvcihtPTA7IUEuaXNaZXJvKCk7bSsrKUU9QS5hbmRsbigyNTUpLEEuaXVzaHJuKDgpLGpbbV09RTtmb3IoO208VDttKyspalttXT0wfWVsc2V7Zm9yKG09MDttPFQtQzttKyspalttXT0wO2ZvcihtPTA7'@;
put 'IUEuaXNaZXJvKCk7bSsrKUU9QS5hbmRsbigyNTUpLEEuaXVzaHJuKDgpLGpbVC1tLTFdPUV9cmV0dXJuIGp9LHcucHJvdG90eXBlLl9jb3VudEJpdHM9TWF0aC5jbHozMj9mdW5jdGlvbihwKXtyZXR1cm4gMzItTWF0aC5jbHozMihwKX06ZnVuY3Rpb24ocCl7dmFyIGI9cCx4PTA7cmV0dXJu'@;
put 'IGI+PTQwOTYmJih4Kz0xMyxiPj4+PTEzKSxiPj02NCYmKHgrPTcsYj4+Pj03KSxiPj04JiYoeCs9NCxiPj4+PTQpLGI+PTImJih4Kz0yLGI+Pj49MikseCtifSx3LnByb3RvdHlwZS5femVyb0JpdHM9ZnVuY3Rpb24ocCl7aWYoMD09PXApcmV0dXJuIDI2O3ZhciBiPXAseD0wO3JldHVybiA4'@;
put 'MTkxJmJ8fCh4Kz0xMyxiPj4+PTEzKSwxMjcmYnx8KHgrPTcsYj4+Pj03KSwxNSZifHwoeCs9NCxiPj4+PTQpLDMmYnx8KHgrPTIsYj4+Pj0yKSwxJmJ8fHgrKyx4fSx3LnByb3RvdHlwZS5iaXRMZW5ndGg9ZnVuY3Rpb24oKXt2YXIgYj10aGlzLl9jb3VudEJpdHModGhpcy53b3Jkc1t0aGlz'@;
put 'Lmxlbmd0aC0xXSk7cmV0dXJuIDI2Kih0aGlzLmxlbmd0aC0xKStifSx3LnByb3RvdHlwZS56ZXJvQml0cz1mdW5jdGlvbigpe2lmKHRoaXMuaXNaZXJvKCkpcmV0dXJuIDA7Zm9yKHZhciBwPTAsYj0wO2I8dGhpcy5sZW5ndGg7YisrKXt2YXIgeD10aGlzLl96ZXJvQml0cyh0aGlzLndvcmRz'@;
put 'W2JdKTtpZihwKz14LDI2IT09eClicmVha31yZXR1cm4gcH0sdy5wcm90b3R5cGUuYnl0ZUxlbmd0aD1mdW5jdGlvbigpe3JldHVybiBNYXRoLmNlaWwodGhpcy5iaXRMZW5ndGgoKS84KX0sdy5wcm90b3R5cGUudG9Ud29zPWZ1bmN0aW9uKHApe3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZT90'@;
put 'aGlzLmFicygpLmlub3RuKHApLmlhZGRuKDEpOnRoaXMuY2xvbmUoKX0sdy5wcm90b3R5cGUuZnJvbVR3b3M9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMudGVzdG4ocC0xKT90aGlzLm5vdG4ocCkuaWFkZG4oMSkuaW5lZygpOnRoaXMuY2xvbmUoKX0sdy5wcm90b3R5cGUuaXNOZWc9ZnVuY3Rp'@;
put 'b24oKXtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmV9LHcucHJvdG90eXBlLm5lZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNsb25lKCkuaW5lZygpfSx3LnByb3RvdHlwZS5pbmVnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNaZXJvKCl8fCh0aGlzLm5lZ2F0aXZlXj0xKSx0aGlzfSx3LnBy'@;
put 'b3RvdHlwZS5pdW9yPWZ1bmN0aW9uKHApe2Zvcig7dGhpcy5sZW5ndGg8cC5sZW5ndGg7KXRoaXMud29yZHNbdGhpcy5sZW5ndGgrK109MDtmb3IodmFyIGI9MDtiPHAubGVuZ3RoO2IrKyl0aGlzLndvcmRzW2JdPXRoaXMud29yZHNbYl18cC53b3Jkc1tiXTtyZXR1cm4gdGhpcy5zdHJpcCgp'@;
put 'fSx3LnByb3RvdHlwZS5pb3I9ZnVuY3Rpb24ocCl7cmV0dXJuIGcoISh0aGlzLm5lZ2F0aXZlfHAubmVnYXRpdmUpKSx0aGlzLml1b3IocCl9LHcucHJvdG90eXBlLm9yPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmxlbmd0aD5wLmxlbmd0aD90aGlzLmNsb25lKCkuaW9yKHApOnAuY2xvbmUo'@;
put 'KS5pb3IodGhpcyl9LHcucHJvdG90eXBlLnVvcj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5sZW5ndGg+cC5sZW5ndGg/dGhpcy5jbG9uZSgpLml1b3IocCk6cC5jbG9uZSgpLml1b3IodGhpcyl9LHcucHJvdG90eXBlLml1YW5kPWZ1bmN0aW9uKHApe3ZhciBiO2I9dGhpcy5sZW5ndGg+cC5s'@;
put 'ZW5ndGg/cDp0aGlzO2Zvcih2YXIgeD0wO3g8Yi5sZW5ndGg7eCsrKXRoaXMud29yZHNbeF09dGhpcy53b3Jkc1t4XSZwLndvcmRzW3hdO3JldHVybiB0aGlzLmxlbmd0aD1iLmxlbmd0aCx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmlhbmQ9ZnVuY3Rpb24ocCl7cmV0dXJuIGcoISh0aGlz'@;
put 'Lm5lZ2F0aXZlfHAubmVnYXRpdmUpKSx0aGlzLml1YW5kKHApfSx3LnByb3RvdHlwZS5hbmQ9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMubGVuZ3RoPnAubGVuZ3RoP3RoaXMuY2xvbmUoKS5pYW5kKHApOnAuY2xvbmUoKS5pYW5kKHRoaXMpfSx3LnByb3RvdHlwZS51YW5kPWZ1bmN0aW9uKHAp'@;
put 'e3JldHVybiB0aGlzLmxlbmd0aD5wLmxlbmd0aD90aGlzLmNsb25lKCkuaXVhbmQocCk6cC5jbG9uZSgpLml1YW5kKHRoaXMpfSx3LnByb3RvdHlwZS5pdXhvcj1mdW5jdGlvbihwKXt2YXIgYix4O3RoaXMubGVuZ3RoPnAubGVuZ3RoPyhiPXRoaXMseD1wKTooYj1wLHg9dGhpcyk7Zm9yKHZh'@;
put 'ciBDPTA7Qzx4Lmxlbmd0aDtDKyspdGhpcy53b3Jkc1tDXT1iLndvcmRzW0NdXngud29yZHNbQ107aWYodGhpcyE9PWIpZm9yKDtDPGIubGVuZ3RoO0MrKyl0aGlzLndvcmRzW0NdPWIud29yZHNbQ107cmV0dXJuIHRoaXMubGVuZ3RoPWIubGVuZ3RoLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5'@;
put 'cGUuaXhvcj1mdW5jdGlvbihwKXtyZXR1cm4gZyghKHRoaXMubmVnYXRpdmV8cC5uZWdhdGl2ZSkpLHRoaXMuaXV4b3IocCl9LHcucHJvdG90eXBlLnhvcj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5sZW5ndGg+cC5sZW5ndGg/dGhpcy5jbG9uZSgpLml4b3IocCk6cC5jbG9uZSgpLml4b3Io'@;
put 'dGhpcyl9LHcucHJvdG90eXBlLnV4b3I9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMubGVuZ3RoPnAubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdXhvcihwKTpwLmNsb25lKCkuaXV4b3IodGhpcyl9LHcucHJvdG90eXBlLmlub3RuPWZ1bmN0aW9uKHApe2coIm51bWJlciI9PXR5cGVvZiBwJiZwPj0w'@;
put 'KTt2YXIgYj0wfE1hdGguY2VpbChwLzI2KSx4PXAlMjY7dGhpcy5fZXhwYW5kKGIpLHg+MCYmYi0tO2Zvcih2YXIgQz0wO0M8YjtDKyspdGhpcy53b3Jkc1tDXT02NzEwODg2MyZ+dGhpcy53b3Jkc1tDXTtyZXR1cm4geD4wJiYodGhpcy53b3Jkc1tDXT1+dGhpcy53b3Jkc1tDXSY2NzEwODg2'@;
put 'Mz4+MjYteCksdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5ub3RuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaW5vdG4ocCl9LHcucHJvdG90eXBlLnNldG49ZnVuY3Rpb24ocCxiKXtnKCJudW1iZXIiPT10eXBlb2YgcCYmcD49MCk7dmFyIHg9cC8yNnwwLEM9cCUyNjtyZXR1'@;
put 'cm4gdGhpcy5fZXhwYW5kKHgrMSksdGhpcy53b3Jkc1t4XT1iP3RoaXMud29yZHNbeF18MTw8Qzp0aGlzLndvcmRzW3hdJn4oMTw8QyksdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5pYWRkPWZ1bmN0aW9uKHApe3ZhciBiLHgsQztpZigwIT09dGhpcy5uZWdhdGl2ZSYmMD09PXAubmVnYXRp'@;
put 'dmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCxiPXRoaXMuaXN1YihwKSx0aGlzLm5lZ2F0aXZlXj0xLHRoaXMuX25vcm1TaWduKCk7aWYoMD09PXRoaXMubmVnYXRpdmUmJjAhPT1wLm5lZ2F0aXZlKXJldHVybiBwLm5lZ2F0aXZlPTAsYj10aGlzLmlzdWIocCkscC5uZWdhdGl2ZT0xLGIuX25v'@;
put 'cm1TaWduKCk7dGhpcy5sZW5ndGg+cC5sZW5ndGg/KHg9dGhpcyxDPXApOih4PXAsQz10aGlzKTtmb3IodmFyIFQ9MCxIPTA7SDxDLmxlbmd0aDtIKyspdGhpcy53b3Jkc1tIXT02NzEwODg2MyYoYj0oMHx4LndvcmRzW0hdKSsoMHxDLndvcmRzW0hdKStUKSxUPWI+Pj4yNjtmb3IoOzAhPT1U'@;
put 'JiZIPHgubGVuZ3RoO0grKyl0aGlzLndvcmRzW0hdPTY3MTA4ODYzJihiPSgwfHgud29yZHNbSF0pK1QpLFQ9Yj4+PjI2O2lmKHRoaXMubGVuZ3RoPXgubGVuZ3RoLDAhPT1UKXRoaXMud29yZHNbdGhpcy5sZW5ndGhdPVQsdGhpcy5sZW5ndGgrKztlbHNlIGlmKHghPT10aGlzKWZvcig7SDx4'@;
put 'Lmxlbmd0aDtIKyspdGhpcy53b3Jkc1tIXT14LndvcmRzW0hdO3JldHVybiB0aGlzfSx3LnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24ocCl7dmFyIGI7cmV0dXJuIDAhPT1wLm5lZ2F0aXZlJiYwPT09dGhpcy5uZWdhdGl2ZT8ocC5uZWdhdGl2ZT0wLGI9dGhpcy5zdWIocCkscC5uZWdhdGl2ZV49'@;
put 'MSxiKTowPT09cC5uZWdhdGl2ZSYmMCE9PXRoaXMubmVnYXRpdmU/KHRoaXMubmVnYXRpdmU9MCxiPXAuc3ViKHRoaXMpLHRoaXMubmVnYXRpdmU9MSxiKTp0aGlzLmxlbmd0aD5wLmxlbmd0aD90aGlzLmNsb25lKCkuaWFkZChwKTpwLmNsb25lKCkuaWFkZCh0aGlzKX0sdy5wcm90b3R5cGUu'@;
put 'aXN1Yj1mdW5jdGlvbihwKXtpZigwIT09cC5uZWdhdGl2ZSl7cC5uZWdhdGl2ZT0wO3ZhciBiPXRoaXMuaWFkZChwKTtyZXR1cm4gcC5uZWdhdGl2ZT0xLGIuX25vcm1TaWduKCl9aWYoMCE9PXRoaXMubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmlhZGQocCksdGhpcy5u'@;
put 'ZWdhdGl2ZT0xLHRoaXMuX25vcm1TaWduKCk7dmFyIEMsVCx4PXRoaXMuY21wKHApO2lmKDA9PT14KXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5sZW5ndGg9MSx0aGlzLndvcmRzWzBdPTAsdGhpczt4PjA/KEM9dGhpcyxUPXApOihDPXAsVD10aGlzKTtmb3IodmFyIEg9MCxqPTA7ajxU'@;
put 'Lmxlbmd0aDtqKyspSD0oYj0oMHxDLndvcmRzW2pdKS0oMHxULndvcmRzW2pdKStIKT4+MjYsdGhpcy53b3Jkc1tqXT02NzEwODg2MyZiO2Zvcig7MCE9PUgmJmo8Qy5sZW5ndGg7aisrKUg9KGI9KDB8Qy53b3Jkc1tqXSkrSCk+PjI2LHRoaXMud29yZHNbal09NjcxMDg4NjMmYjtpZigwPT09'@;
put 'SCYmajxDLmxlbmd0aCYmQyE9PXRoaXMpZm9yKDtqPEMubGVuZ3RoO2orKyl0aGlzLndvcmRzW2pdPUMud29yZHNbal07cmV0dXJuIHRoaXMubGVuZ3RoPU1hdGgubWF4KHRoaXMubGVuZ3RoLGopLEMhPT10aGlzJiYodGhpcy5uZWdhdGl2ZT0xKSx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBl'@;
put 'LnN1Yj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzdWIocCl9O3ZhciBZPWZ1bmN0aW9uKHAsYix4KXt2YXIgRSxtLEEsQz1wLndvcmRzLFQ9Yi53b3JkcyxIPXgud29yZHMsaj0wLGFlPTB8Q1swXSx0ZT04MTkxJmFlLHNlPWFlPj4+MTMsd2U9MHxDWzFdLFVlPTgxOTEmd2Us'@;
put 'SmU9d2U+Pj4xMyxvdD0wfENbMl0seGU9ODE5MSZvdCx2ZT1vdD4+PjEzLFhlPTB8Q1szXSx6ZT04MTkxJlhlLERlPVhlPj4+MTMsRmU9MHxDWzRdLE9lPTgxOTEmRmUsSWU9RmU+Pj4xMyxWZT0wfENbNV0sa2U9ODE5MSZWZSxBZT1WZT4+PjEzLF90PTB8Q1s2XSxudD04MTkxJl90LFFlPV90'@;
put 'Pj4+MTMsdW49MHxDWzddLHl0PTgxOTEmdW4sTXQ9dW4+Pj4xMyxEdD0wfENbOF0saXQ9ODE5MSZEdCwkZT1EdD4+PjEzLHR0PTB8Q1s5XSxIZT04MTkxJnR0LHV0PXR0Pj4+MTMscXQ9MHxUWzBdLFJ0PTgxOTEmcXQsUHQ9cXQ+Pj4xMyxjaT0wfFRbMV0sUXQ9ODE5MSZjaSxzbj1jaT4+PjEz'@;
put 'LFJpPTB8VFsyXSxobj04MTkxJlJpLGZ0PVJpPj4+MTMsT3I9MHxUWzNdLFd0PTgxOTEmT3IsQXQ9T3I+Pj4xMyxSbj0wfFRbNF0sc3Q9ODE5MSZSbixVdD1Sbj4+PjEzLHJpPTB8VFs1XSxXZT04MTkxJnJpLFR0PXJpPj4+MTMsbnI9MHxUWzZdLGh0PTgxOTEmbnIseHQ9bnI+Pj4xMyxqbj0w'@;
put 'fFRbN10scm49ODE5MSZqbix6dD1qbj4+PjEzLGhpPTB8VFs4XSxjbj04MTkxJmhpLGZuPWhpPj4+MTMsSWk9MHxUWzldLFh0PTgxOTEmSWksZW49SWk+Pj4xMzt4Lm5lZ2F0aXZlPXAubmVnYXRpdmVeYi5uZWdhdGl2ZSx4Lmxlbmd0aD0xOTt2YXIgdWE9KGorKEU9TWF0aC5pbXVsKHRlLFJ0'@;
put 'KSl8MCkrKCg4MTkxJihtPShtPU1hdGguaW11bCh0ZSxQdCkpK01hdGguaW11bChzZSxSdCl8MCkpPDwxMyl8MDtqPSgoQT1NYXRoLmltdWwoc2UsUHQpKSsobT4+PjEzKXwwKSsodWE+Pj4yNil8MCx1YSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoVWUsUnQpLG09KG09TWF0aC5pbXVsKFVlLFB0'@;
put 'KSkrTWF0aC5pbXVsKEplLFJ0KXwwLEE9TWF0aC5pbXVsKEplLFB0KTt2YXIgRWk9KGorKEU9RStNYXRoLmltdWwodGUsUXQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh0ZSxzbil8MCkrTWF0aC5pbXVsKHNlLFF0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLHNu'@;
put 'KXwwKSsobT4+PjEzKXwwKSsoRWk+Pj4yNil8MCxFaSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoeGUsUnQpLG09KG09TWF0aC5pbXVsKHhlLFB0KSkrTWF0aC5pbXVsKHZlLFJ0KXwwLEE9TWF0aC5pbXVsKHZlLFB0KSxFPUUrTWF0aC5pbXVsKFVlLFF0KXwwLG09KG09bStNYXRoLmltdWwoVWUs'@;
put 'c24pfDApK01hdGguaW11bChKZSxRdCl8MCxBPUErTWF0aC5pbXVsKEplLHNuKXwwO3ZhciB2cj0oaisoRT1FK01hdGguaW11bCh0ZSxobil8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKHRlLGZ0KXwwKStNYXRoLmltdWwoc2UsaG4pfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmlt'@;
put 'dWwoc2UsZnQpfDApKyhtPj4+MTMpfDApKyh2cj4+PjI2KXwwLHZyJj02NzEwODg2MyxFPU1hdGguaW11bCh6ZSxSdCksbT0obT1NYXRoLmltdWwoemUsUHQpKStNYXRoLmltdWwoRGUsUnQpfDAsQT1NYXRoLmltdWwoRGUsUHQpLEU9RStNYXRoLmltdWwoeGUsUXQpfDAsbT0obT1tK01hdGgu'@;
put 'aW11bCh4ZSxzbil8MCkrTWF0aC5pbXVsKHZlLFF0KXwwLEE9QStNYXRoLmltdWwodmUsc24pfDAsRT1FK01hdGguaW11bChVZSxobil8MCxtPShtPW0rTWF0aC5pbXVsKFVlLGZ0KXwwKStNYXRoLmltdWwoSmUsaG4pfDAsQT1BK01hdGguaW11bChKZSxmdCl8MDt2YXIgV249KGorKEU9RStN'@;
put 'YXRoLmltdWwodGUsV3QpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh0ZSxBdCl8MCkrTWF0aC5pbXVsKHNlLFd0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLEF0KXwwKSsobT4+PjEzKXwwKSsoV24+Pj4yNil8MCxXbiY9NjcxMDg4NjMsRT1NYXRoLmltdWwoT2Us'@;
put 'UnQpLG09KG09TWF0aC5pbXVsKE9lLFB0KSkrTWF0aC5pbXVsKEllLFJ0KXwwLEE9TWF0aC5pbXVsKEllLFB0KSxFPUUrTWF0aC5pbXVsKHplLFF0KXwwLG09KG09bStNYXRoLmltdWwoemUsc24pfDApK01hdGguaW11bChEZSxRdCl8MCxBPUErTWF0aC5pbXVsKERlLHNuKXwwLEU9RStNYXRo'@;
put 'LmltdWwoeGUsaG4pfDAsbT0obT1tK01hdGguaW11bCh4ZSxmdCl8MCkrTWF0aC5pbXVsKHZlLGhuKXwwLEE9QStNYXRoLmltdWwodmUsZnQpfDAsRT1FK01hdGguaW11bChVZSxXdCl8MCxtPShtPW0rTWF0aC5pbXVsKFVlLEF0KXwwKStNYXRoLmltdWwoSmUsV3QpfDAsQT1BK01hdGguaW11'@;
put 'bChKZSxBdCl8MDt2YXIgJGk9KGorKEU9RStNYXRoLmltdWwodGUsc3QpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh0ZSxVdCl8MCkrTWF0aC5pbXVsKHNlLHN0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLFV0KXwwKSsobT4+PjEzKXwwKSsoJGk+Pj4yNil8MCwk'@;
put 'aSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoa2UsUnQpLG09KG09TWF0aC5pbXVsKGtlLFB0KSkrTWF0aC5pbXVsKEFlLFJ0KXwwLEE9TWF0aC5pbXVsKEFlLFB0KSxFPUUrTWF0aC5pbXVsKE9lLFF0KXwwLG09KG09bStNYXRoLmltdWwoT2Usc24pfDApK01hdGguaW11bChJZSxRdCl8MCxBPUEr'@;
put 'TWF0aC5pbXVsKEllLHNuKXwwLEU9RStNYXRoLmltdWwoemUsaG4pfDAsbT0obT1tK01hdGguaW11bCh6ZSxmdCl8MCkrTWF0aC5pbXVsKERlLGhuKXwwLEE9QStNYXRoLmltdWwoRGUsZnQpfDAsRT1FK01hdGguaW11bCh4ZSxXdCl8MCxtPShtPW0rTWF0aC5pbXVsKHhlLEF0KXwwKStNYXRo'@;
put 'LmltdWwodmUsV3QpfDAsQT1BK01hdGguaW11bCh2ZSxBdCl8MCxFPUUrTWF0aC5pbXVsKFVlLHN0KXwwLG09KG09bStNYXRoLmltdWwoVWUsVXQpfDApK01hdGguaW11bChKZSxzdCl8MCxBPUErTWF0aC5pbXVsKEplLFV0KXwwO3ZhciBlaT0oaisoRT1FK01hdGguaW11bCh0ZSxXZSl8MCl8'@;
put 'MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKHRlLFR0KXwwKStNYXRoLmltdWwoc2UsV2UpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2UsVHQpfDApKyhtPj4+MTMpfDApKyhlaT4+PjI2KXwwLGVpJj02NzEwODg2MyxFPU1hdGguaW11bChudCxSdCksbT0obT1NYXRoLmltdWwo'@;
put 'bnQsUHQpKStNYXRoLmltdWwoUWUsUnQpfDAsQT1NYXRoLmltdWwoUWUsUHQpLEU9RStNYXRoLmltdWwoa2UsUXQpfDAsbT0obT1tK01hdGguaW11bChrZSxzbil8MCkrTWF0aC5pbXVsKEFlLFF0KXwwLEE9QStNYXRoLmltdWwoQWUsc24pfDAsRT1FK01hdGguaW11bChPZSxobil8MCxtPSht'@;
put 'PW0rTWF0aC5pbXVsKE9lLGZ0KXwwKStNYXRoLmltdWwoSWUsaG4pfDAsQT1BK01hdGguaW11bChJZSxmdCl8MCxFPUUrTWF0aC5pbXVsKHplLFd0KXwwLG09KG09bStNYXRoLmltdWwoemUsQXQpfDApK01hdGguaW11bChEZSxXdCl8MCxBPUErTWF0aC5pbXVsKERlLEF0KXwwLEU9RStNYXRo'@;
put 'LmltdWwoeGUsc3QpfDAsbT0obT1tK01hdGguaW11bCh4ZSxVdCl8MCkrTWF0aC5pbXVsKHZlLHN0KXwwLEE9QStNYXRoLmltdWwodmUsVXQpfDAsRT1FK01hdGguaW11bChVZSxXZSl8MCxtPShtPW0rTWF0aC5pbXVsKFVlLFR0KXwwKStNYXRoLmltdWwoSmUsV2UpfDAsQT1BK01hdGguaW11'@;
put 'bChKZSxUdCl8MDt2YXIgUXI9KGorKEU9RStNYXRoLmltdWwodGUsaHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh0ZSx4dCl8MCkrTWF0aC5pbXVsKHNlLGh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLHh0KXwwKSsobT4+PjEzKXwwKSsoUXI+Pj4yNil8MCxR'@;
put 'ciY9NjcxMDg4NjMsRT1NYXRoLmltdWwoeXQsUnQpLG09KG09TWF0aC5pbXVsKHl0LFB0KSkrTWF0aC5pbXVsKE10LFJ0KXwwLEE9TWF0aC5pbXVsKE10LFB0KSxFPUUrTWF0aC5pbXVsKG50LFF0KXwwLG09KG09bStNYXRoLmltdWwobnQsc24pfDApK01hdGguaW11bChRZSxRdCl8MCxBPUEr'@;
put 'TWF0aC5pbXVsKFFlLHNuKXwwLEU9RStNYXRoLmltdWwoa2UsaG4pfDAsbT0obT1tK01hdGguaW11bChrZSxmdCl8MCkrTWF0aC5pbXVsKEFlLGhuKXwwLEE9QStNYXRoLmltdWwoQWUsZnQpfDAsRT1FK01hdGguaW11bChPZSxXdCl8MCxtPShtPW0rTWF0aC5pbXVsKE9lLEF0KXwwKStNYXRo'@;
put 'LmltdWwoSWUsV3QpfDAsQT1BK01hdGguaW11bChJZSxBdCl8MCxFPUUrTWF0aC5pbXVsKHplLHN0KXwwLG09KG09bStNYXRoLmltdWwoemUsVXQpfDApK01hdGguaW11bChEZSxzdCl8MCxBPUErTWF0aC5pbXVsKERlLFV0KXwwLEU9RStNYXRoLmltdWwoeGUsV2UpfDAsbT0obT1tK01hdGgu'@;
put 'aW11bCh4ZSxUdCl8MCkrTWF0aC5pbXVsKHZlLFdlKXwwLEE9QStNYXRoLmltdWwodmUsVHQpfDAsRT1FK01hdGguaW11bChVZSxodCl8MCxtPShtPW0rTWF0aC5pbXVsKFVlLHh0KXwwKStNYXRoLmltdWwoSmUsaHQpfDAsQT1BK01hdGguaW11bChKZSx4dCl8MDt2YXIgVmk9KGorKEU9RStN'@;
put 'YXRoLmltdWwodGUscm4pfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh0ZSx6dCl8MCkrTWF0aC5pbXVsKHNlLHJuKXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLHp0KXwwKSsobT4+PjEzKXwwKSsoVmk+Pj4yNil8MCxWaSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoaXQs'@;
put 'UnQpLG09KG09TWF0aC5pbXVsKGl0LFB0KSkrTWF0aC5pbXVsKCRlLFJ0KXwwLEE9TWF0aC5pbXVsKCRlLFB0KSxFPUUrTWF0aC5pbXVsKHl0LFF0KXwwLG09KG09bStNYXRoLmltdWwoeXQsc24pfDApK01hdGguaW11bChNdCxRdCl8MCxBPUErTWF0aC5pbXVsKE10LHNuKXwwLEU9RStNYXRo'@;
put 'LmltdWwobnQsaG4pfDAsbT0obT1tK01hdGguaW11bChudCxmdCl8MCkrTWF0aC5pbXVsKFFlLGhuKXwwLEE9QStNYXRoLmltdWwoUWUsZnQpfDAsRT1FK01hdGguaW11bChrZSxXdCl8MCxtPShtPW0rTWF0aC5pbXVsKGtlLEF0KXwwKStNYXRoLmltdWwoQWUsV3QpfDAsQT1BK01hdGguaW11'@;
put 'bChBZSxBdCl8MCxFPUUrTWF0aC5pbXVsKE9lLHN0KXwwLG09KG09bStNYXRoLmltdWwoT2UsVXQpfDApK01hdGguaW11bChJZSxzdCl8MCxBPUErTWF0aC5pbXVsKEllLFV0KXwwLEU9RStNYXRoLmltdWwoemUsV2UpfDAsbT0obT1tK01hdGguaW11bCh6ZSxUdCl8MCkrTWF0aC5pbXVsKERl'@;
put 'LFdlKXwwLEE9QStNYXRoLmltdWwoRGUsVHQpfDAsRT1FK01hdGguaW11bCh4ZSxodCl8MCxtPShtPW0rTWF0aC5pbXVsKHhlLHh0KXwwKStNYXRoLmltdWwodmUsaHQpfDAsQT1BK01hdGguaW11bCh2ZSx4dCl8MCxFPUUrTWF0aC5pbXVsKFVlLHJuKXwwLG09KG09bStNYXRoLmltdWwoVWUs'@;
put 'enQpfDApK01hdGguaW11bChKZSxybil8MCxBPUErTWF0aC5pbXVsKEplLHp0KXwwO3ZhciBOaT0oaisoRT1FK01hdGguaW11bCh0ZSxjbil8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKHRlLGZuKXwwKStNYXRoLmltdWwoc2UsY24pfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmlt'@;
put 'dWwoc2UsZm4pfDApKyhtPj4+MTMpfDApKyhOaT4+PjI2KXwwLE5pJj02NzEwODg2MyxFPU1hdGguaW11bChIZSxSdCksbT0obT1NYXRoLmltdWwoSGUsUHQpKStNYXRoLmltdWwodXQsUnQpfDAsQT1NYXRoLmltdWwodXQsUHQpLEU9RStNYXRoLmltdWwoaXQsUXQpfDAsbT0obT1tK01hdGgu'@;
put 'aW11bChpdCxzbil8MCkrTWF0aC5pbXVsKCRlLFF0KXwwLEE9QStNYXRoLmltdWwoJGUsc24pfDAsRT1FK01hdGguaW11bCh5dCxobil8MCxtPShtPW0rTWF0aC5pbXVsKHl0LGZ0KXwwKStNYXRoLmltdWwoTXQsaG4pfDAsQT1BK01hdGguaW11bChNdCxmdCl8MCxFPUUrTWF0aC5pbXVsKG50'@;
put 'LFd0KXwwLG09KG09bStNYXRoLmltdWwobnQsQXQpfDApK01hdGguaW11bChRZSxXdCl8MCxBPUErTWF0aC5pbXVsKFFlLEF0KXwwLEU9RStNYXRoLmltdWwoa2Usc3QpfDAsbT0obT1tK01hdGguaW11bChrZSxVdCl8MCkrTWF0aC5pbXVsKEFlLHN0KXwwLEE9QStNYXRoLmltdWwoQWUsVXQp'@;
put 'fDAsRT1FK01hdGguaW11bChPZSxXZSl8MCxtPShtPW0rTWF0aC5pbXVsKE9lLFR0KXwwKStNYXRoLmltdWwoSWUsV2UpfDAsQT1BK01hdGguaW11bChJZSxUdCl8MCxFPUUrTWF0aC5pbXVsKHplLGh0KXwwLG09KG09bStNYXRoLmltdWwoemUseHQpfDApK01hdGguaW11bChEZSxodCl8MCxB'@;
put 'PUErTWF0aC5pbXVsKERlLHh0KXwwLEU9RStNYXRoLmltdWwoeGUscm4pfDAsbT0obT1tK01hdGguaW11bCh4ZSx6dCl8MCkrTWF0aC5pbXVsKHZlLHJuKXwwLEE9QStNYXRoLmltdWwodmUsenQpfDAsRT1FK01hdGguaW11bChVZSxjbil8MCxtPShtPW0rTWF0aC5pbXVsKFVlLGZuKXwwKStN'@;
put 'YXRoLmltdWwoSmUsY24pfDAsQT1BK01hdGguaW11bChKZSxmbil8MDt2YXIgRGE9KGorKEU9RStNYXRoLmltdWwodGUsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh0ZSxlbil8MCkrTWF0aC5pbXVsKHNlLFh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLGVu'@;
put 'KXwwKSsobT4+PjEzKXwwKSsoRGE+Pj4yNil8MCxEYSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSGUsUXQpLG09KG09TWF0aC5pbXVsKEhlLHNuKSkrTWF0aC5pbXVsKHV0LFF0KXwwLEE9TWF0aC5pbXVsKHV0LHNuKSxFPUUrTWF0aC5pbXVsKGl0LGhuKXwwLG09KG09bStNYXRoLmltdWwoaXQs'@;
put 'ZnQpfDApK01hdGguaW11bCgkZSxobil8MCxBPUErTWF0aC5pbXVsKCRlLGZ0KXwwLEU9RStNYXRoLmltdWwoeXQsV3QpfDAsbT0obT1tK01hdGguaW11bCh5dCxBdCl8MCkrTWF0aC5pbXVsKE10LFd0KXwwLEE9QStNYXRoLmltdWwoTXQsQXQpfDAsRT1FK01hdGguaW11bChudCxzdCl8MCxt'@;
put 'PShtPW0rTWF0aC5pbXVsKG50LFV0KXwwKStNYXRoLmltdWwoUWUsc3QpfDAsQT1BK01hdGguaW11bChRZSxVdCl8MCxFPUUrTWF0aC5pbXVsKGtlLFdlKXwwLG09KG09bStNYXRoLmltdWwoa2UsVHQpfDApK01hdGguaW11bChBZSxXZSl8MCxBPUErTWF0aC5pbXVsKEFlLFR0KXwwLEU9RStN'@;
put 'YXRoLmltdWwoT2UsaHQpfDAsbT0obT1tK01hdGguaW11bChPZSx4dCl8MCkrTWF0aC5pbXVsKEllLGh0KXwwLEE9QStNYXRoLmltdWwoSWUseHQpfDAsRT1FK01hdGguaW11bCh6ZSxybil8MCxtPShtPW0rTWF0aC5pbXVsKHplLHp0KXwwKStNYXRoLmltdWwoRGUscm4pfDAsQT1BK01hdGgu'@;
put 'aW11bChEZSx6dCl8MCxFPUUrTWF0aC5pbXVsKHhlLGNuKXwwLG09KG09bStNYXRoLmltdWwoeGUsZm4pfDApK01hdGguaW11bCh2ZSxjbil8MCxBPUErTWF0aC5pbXVsKHZlLGZuKXwwO3ZhciBMcj0oaisoRT1FK01hdGguaW11bChVZSxYdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5p'@;
put 'bXVsKFVlLGVuKXwwKStNYXRoLmltdWwoSmUsWHQpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoSmUsZW4pfDApKyhtPj4+MTMpfDApKyhMcj4+PjI2KXwwLExyJj02NzEwODg2MyxFPU1hdGguaW11bChIZSxobiksbT0obT1NYXRoLmltdWwoSGUsZnQpKStNYXRoLmltdWwodXQsaG4p'@;
put 'fDAsQT1NYXRoLmltdWwodXQsZnQpLEU9RStNYXRoLmltdWwoaXQsV3QpfDAsbT0obT1tK01hdGguaW11bChpdCxBdCl8MCkrTWF0aC5pbXVsKCRlLFd0KXwwLEE9QStNYXRoLmltdWwoJGUsQXQpfDAsRT1FK01hdGguaW11bCh5dCxzdCl8MCxtPShtPW0rTWF0aC5pbXVsKHl0LFV0KXwwKStN'@;
put 'YXRoLmltdWwoTXQsc3QpfDAsQT1BK01hdGguaW11bChNdCxVdCl8MCxFPUUrTWF0aC5pbXVsKG50LFdlKXwwLG09KG09bStNYXRoLmltdWwobnQsVHQpfDApK01hdGguaW11bChRZSxXZSl8MCxBPUErTWF0aC5pbXVsKFFlLFR0KXwwLEU9RStNYXRoLmltdWwoa2UsaHQpfDAsbT0obT1tK01h'@;
put 'dGguaW11bChrZSx4dCl8MCkrTWF0aC5pbXVsKEFlLGh0KXwwLEE9QStNYXRoLmltdWwoQWUseHQpfDAsRT1FK01hdGguaW11bChPZSxybil8MCxtPShtPW0rTWF0aC5pbXVsKE9lLHp0KXwwKStNYXRoLmltdWwoSWUscm4pfDAsQT1BK01hdGguaW11bChJZSx6dCl8MCxFPUUrTWF0aC5pbXVs'@;
put 'KHplLGNuKXwwLG09KG09bStNYXRoLmltdWwoemUsZm4pfDApK01hdGguaW11bChEZSxjbil8MCxBPUErTWF0aC5pbXVsKERlLGZuKXwwO3ZhciBXaT0oaisoRT1FK01hdGguaW11bCh4ZSxYdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKHhlLGVuKXwwKStNYXRoLmltdWwodmUs'@;
put 'WHQpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwodmUsZW4pfDApKyhtPj4+MTMpfDApKyhXaT4+PjI2KXwwLFdpJj02NzEwODg2MyxFPU1hdGguaW11bChIZSxXdCksbT0obT1NYXRoLmltdWwoSGUsQXQpKStNYXRoLmltdWwodXQsV3QpfDAsQT1NYXRoLmltdWwodXQsQXQpLEU9RStN'@;
put 'YXRoLmltdWwoaXQsc3QpfDAsbT0obT1tK01hdGguaW11bChpdCxVdCl8MCkrTWF0aC5pbXVsKCRlLHN0KXwwLEE9QStNYXRoLmltdWwoJGUsVXQpfDAsRT1FK01hdGguaW11bCh5dCxXZSl8MCxtPShtPW0rTWF0aC5pbXVsKHl0LFR0KXwwKStNYXRoLmltdWwoTXQsV2UpfDAsQT1BK01hdGgu'@;
put 'aW11bChNdCxUdCl8MCxFPUUrTWF0aC5pbXVsKG50LGh0KXwwLG09KG09bStNYXRoLmltdWwobnQseHQpfDApK01hdGguaW11bChRZSxodCl8MCxBPUErTWF0aC5pbXVsKFFlLHh0KXwwLEU9RStNYXRoLmltdWwoa2Uscm4pfDAsbT0obT1tK01hdGguaW11bChrZSx6dCl8MCkrTWF0aC5pbXVs'@;
put 'KEFlLHJuKXwwLEE9QStNYXRoLmltdWwoQWUsenQpfDAsRT1FK01hdGguaW11bChPZSxjbil8MCxtPShtPW0rTWF0aC5pbXVsKE9lLGZuKXwwKStNYXRoLmltdWwoSWUsY24pfDAsQT1BK01hdGguaW11bChJZSxmbil8MDt2YXIgcGE9KGorKEU9RStNYXRoLmltdWwoemUsWHQpfDApfDApKygo'@;
put 'ODE5MSYobT0obT1tK01hdGguaW11bCh6ZSxlbil8MCkrTWF0aC5pbXVsKERlLFh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKERlLGVuKXwwKSsobT4+PjEzKXwwKSsocGE+Pj4yNil8MCxwYSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSGUsc3QpLG09KG09TWF0aC5pbXVsKEhlLFV0'@;
put 'KSkrTWF0aC5pbXVsKHV0LHN0KXwwLEE9TWF0aC5pbXVsKHV0LFV0KSxFPUUrTWF0aC5pbXVsKGl0LFdlKXwwLG09KG09bStNYXRoLmltdWwoaXQsVHQpfDApK01hdGguaW11bCgkZSxXZSl8MCxBPUErTWF0aC5pbXVsKCRlLFR0KXwwLEU9RStNYXRoLmltdWwoeXQsaHQpfDAsbT0obT1tK01h'@;
put 'dGguaW11bCh5dCx4dCl8MCkrTWF0aC5pbXVsKE10LGh0KXwwLEE9QStNYXRoLmltdWwoTXQseHQpfDAsRT1FK01hdGguaW11bChudCxybil8MCxtPShtPW0rTWF0aC5pbXVsKG50LHp0KXwwKStNYXRoLmltdWwoUWUscm4pfDAsQT1BK01hdGguaW11bChRZSx6dCl8MCxFPUUrTWF0aC5pbXVs'@;
put 'KGtlLGNuKXwwLG09KG09bStNYXRoLmltdWwoa2UsZm4pfDApK01hdGguaW11bChBZSxjbil8MCxBPUErTWF0aC5pbXVsKEFlLGZuKXwwO3ZhciBRbj0oaisoRT1FK01hdGguaW11bChPZSxYdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKE9lLGVuKXwwKStNYXRoLmltdWwoSWUs'@;
put 'WHQpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoSWUsZW4pfDApKyhtPj4+MTMpfDApKyhRbj4+PjI2KXwwLFFuJj02NzEwODg2MyxFPU1hdGguaW11bChIZSxXZSksbT0obT1NYXRoLmltdWwoSGUsVHQpKStNYXRoLmltdWwodXQsV2UpfDAsQT1NYXRoLmltdWwodXQsVHQpLEU9RStN'@;
put 'YXRoLmltdWwoaXQsaHQpfDAsbT0obT1tK01hdGguaW11bChpdCx4dCl8MCkrTWF0aC5pbXVsKCRlLGh0KXwwLEE9QStNYXRoLmltdWwoJGUseHQpfDAsRT1FK01hdGguaW11bCh5dCxybil8MCxtPShtPW0rTWF0aC5pbXVsKHl0LHp0KXwwKStNYXRoLmltdWwoTXQscm4pfDAsQT1BK01hdGgu'@;
put 'aW11bChNdCx6dCl8MCxFPUUrTWF0aC5pbXVsKG50LGNuKXwwLG09KG09bStNYXRoLmltdWwobnQsZm4pfDApK01hdGguaW11bChRZSxjbil8MCxBPUErTWF0aC5pbXVsKFFlLGZuKXwwO3ZhciBsYT0oaisoRT1FK01hdGguaW11bChrZSxYdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5p'@;
put 'bXVsKGtlLGVuKXwwKStNYXRoLmltdWwoQWUsWHQpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoQWUsZW4pfDApKyhtPj4+MTMpfDApKyhsYT4+PjI2KXwwLGxhJj02NzEwODg2MyxFPU1hdGguaW11bChIZSxodCksbT0obT1NYXRoLmltdWwoSGUseHQpKStNYXRoLmltdWwodXQsaHQp'@;
put 'fDAsQT1NYXRoLmltdWwodXQseHQpLEU9RStNYXRoLmltdWwoaXQscm4pfDAsbT0obT1tK01hdGguaW11bChpdCx6dCl8MCkrTWF0aC5pbXVsKCRlLHJuKXwwLEE9QStNYXRoLmltdWwoJGUsenQpfDAsRT1FK01hdGguaW11bCh5dCxjbil8MCxtPShtPW0rTWF0aC5pbXVsKHl0LGZuKXwwKStN'@;
put 'YXRoLmltdWwoTXQsY24pfDAsQT1BK01hdGguaW11bChNdCxmbil8MDt2YXIgeWE9KGorKEU9RStNYXRoLmltdWwobnQsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChudCxlbil8MCkrTWF0aC5pbXVsKFFlLFh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKFFlLGVu'@;
put 'KXwwKSsobT4+PjEzKXwwKSsoeWE+Pj4yNil8MCx5YSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSGUscm4pLG09KG09TWF0aC5pbXVsKEhlLHp0KSkrTWF0aC5pbXVsKHV0LHJuKXwwLEE9TWF0aC5pbXVsKHV0LHp0KSxFPUUrTWF0aC5pbXVsKGl0LGNuKXwwLG09KG09bStNYXRoLmltdWwoaXQs'@;
put 'Zm4pfDApK01hdGguaW11bCgkZSxjbil8MCxBPUErTWF0aC5pbXVsKCRlLGZuKXwwO3ZhciBMYT0oaisoRT1FK01hdGguaW11bCh5dCxYdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKHl0LGVuKXwwKStNYXRoLmltdWwoTXQsWHQpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmlt'@;
put 'dWwoTXQsZW4pfDApKyhtPj4+MTMpfDApKyhMYT4+PjI2KXwwLExhJj02NzEwODg2MyxFPU1hdGguaW11bChIZSxjbiksbT0obT1NYXRoLmltdWwoSGUsZm4pKStNYXRoLmltdWwodXQsY24pfDAsQT1NYXRoLmltdWwodXQsZm4pO3ZhciBGYT0oaisoRT1FK01hdGguaW11bChpdCxYdCl8MCl8'@;
put 'MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKGl0LGVuKXwwKStNYXRoLmltdWwoJGUsWHQpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoJGUsZW4pfDApKyhtPj4+MTMpfDApKyhGYT4+PjI2KXwwLEZhJj02NzEwODg2Mzt2YXIgdGk9KGorKEU9TWF0aC5pbXVsKEhlLFh0KSl8MCkr'@;
put 'KCg4MTkxJihtPShtPU1hdGguaW11bChIZSxlbikpK01hdGguaW11bCh1dCxYdCl8MCkpPDwxMyl8MDtyZXR1cm4gaj0oKEE9TWF0aC5pbXVsKHV0LGVuKSkrKG0+Pj4xMyl8MCkrKHRpPj4+MjYpfDAsdGkmPTY3MTA4ODYzLEhbMF09dWEsSFsxXT1FaSxIWzJdPXZyLEhbM109V24sSFs0XT0k'@;
put 'aSxIWzVdPWVpLEhbNl09UXIsSFs3XT1WaSxIWzhdPU5pLEhbOV09RGEsSFsxMF09THIsSFsxMV09V2ksSFsxMl09cGEsSFsxM109UW4sSFsxNF09bGEsSFsxNV09eWEsSFsxNl09TGEsSFsxN109RmEsSFsxOF09dGksMCE9PWomJihIWzE5XT1qLHgubGVuZ3RoKyspLHh9O2Z1bmN0aW9uIGVl'@;
put 'KFYscCxiKXtyZXR1cm4obmV3IEopLm11bHAoVixwLGIpfWZ1bmN0aW9uIEooVixwKXt0aGlzLng9Vix0aGlzLnk9cH1NYXRoLmltdWx8fChZPVcpLHcucHJvdG90eXBlLm11bFRvPWZ1bmN0aW9uKHAsYil7dmFyIHgsQz10aGlzLmxlbmd0aCtwLmxlbmd0aDtyZXR1cm4geD0xMD09PXRoaXMu'@;
put 'bGVuZ3RoJiYxMD09PXAubGVuZ3RoP1kodGhpcyxwLGIpOkM8NjM/Vyh0aGlzLHAsYik6QzwxMDI0P2Z1bmN0aW9uIHEoVixwLGIpe2IubmVnYXRpdmU9cC5uZWdhdGl2ZV5WLm5lZ2F0aXZlLGIubGVuZ3RoPVYubGVuZ3RoK3AubGVuZ3RoO2Zvcih2YXIgeD0wLEM9MCxUPTA7VDxiLmxlbmd0'@;
put 'aC0xO1QrKyl7dmFyIEg9QztDPTA7Zm9yKHZhciBqPTY3MTA4ODYzJngsRT1NYXRoLm1pbihULHAubGVuZ3RoLTEpLG09TWF0aC5tYXgoMCxULVYubGVuZ3RoKzEpO208PUU7bSsrKXt2YXIgc2U9KDB8Vi53b3Jkc1tULW1dKSooMHxwLndvcmRzW21dKSx3ZT02NzEwODg2MyZzZTtqPTY3MTA4'@;
put 'ODYzJih3ZT13ZStqfDApLEMrPShIPShIPUgrKHNlLzY3MTA4ODY0fDApfDApKyh3ZT4+PjI2KXwwKT4+PjI2LEgmPTY3MTA4ODYzfWIud29yZHNbVF09aix4PUgsSD1DfXJldHVybiAwIT09eD9iLndvcmRzW1RdPXg6Yi5sZW5ndGgtLSxiLnN0cmlwKCl9KHRoaXMscCxiKTplZSh0aGlzLHAs'@;
put 'YikseH0sSi5wcm90b3R5cGUubWFrZVJCVD1mdW5jdGlvbihwKXtmb3IodmFyIGI9bmV3IEFycmF5KHApLHg9dy5wcm90b3R5cGUuX2NvdW50Qml0cyhwKS0xLEM9MDtDPHA7QysrKWJbQ109dGhpcy5yZXZCaW4oQyx4LHApO3JldHVybiBifSxKLnByb3RvdHlwZS5yZXZCaW49ZnVuY3Rpb24o'@;
put 'cCxiLHgpe2lmKDA9PT1wfHxwPT09eC0xKXJldHVybiBwO2Zvcih2YXIgQz0wLFQ9MDtUPGI7VCsrKUN8PSgxJnApPDxiLVQtMSxwPj49MTtyZXR1cm4gQ30sSi5wcm90b3R5cGUucGVybXV0ZT1mdW5jdGlvbihwLGIseCxDLFQsSCl7Zm9yKHZhciBqPTA7ajxIO2orKylDW2pdPWJbcFtqXV0s'@;
put 'VFtqXT14W3Bbal1dfSxKLnByb3RvdHlwZS50cmFuc2Zvcm09ZnVuY3Rpb24ocCxiLHgsQyxULEgpe3RoaXMucGVybXV0ZShILHAsYix4LEMsVCk7Zm9yKHZhciBqPTE7ajxUO2o8PD0xKWZvcih2YXIgRT1qPDwxLG09TWF0aC5jb3MoMipNYXRoLlBJL0UpLEE9TWF0aC5zaW4oMipNYXRoLlBJ'@;
put 'L0UpLGFlPTA7YWU8VDthZSs9RSlmb3IodmFyIHRlPW0sc2U9QSx3ZT0wO3dlPGo7d2UrKyl7dmFyIFVlPXhbYWUrd2VdLEplPUNbYWUrd2VdLG90PXhbYWUrd2Ural0seGU9Q1thZSt3ZStqXSx2ZT10ZSpvdC1zZSp4ZTt4ZT10ZSp4ZStzZSpvdCx4W2FlK3dlXT1VZSsob3Q9dmUpLENbYWUr'@;
put 'd2VdPUplK3hlLHhbYWUrd2Ural09VWUtb3QsQ1thZSt3ZStqXT1KZS14ZSx3ZSE9PUUmJih2ZT1tKnRlLUEqc2Usc2U9bSpzZStBKnRlLHRlPXZlKX19LEoucHJvdG90eXBlLmd1ZXNzTGVuMTNiPWZ1bmN0aW9uKHAsYil7dmFyIHg9MXxNYXRoLm1heChiLHApLEM9MSZ4LFQ9MDtmb3IoeD14'@;
put 'LzJ8MDt4O3g+Pj49MSlUKys7cmV0dXJuIDE8PFQrMStDfSxKLnByb3RvdHlwZS5jb25qdWdhdGU9ZnVuY3Rpb24ocCxiLHgpe2lmKCEoeDw9MSkpZm9yKHZhciBDPTA7Qzx4LzI7QysrKXt2YXIgVD1wW0NdO3BbQ109cFt4LUMtMV0scFt4LUMtMV09VCxUPWJbQ10sYltDXT0tYlt4LUMtMV0s'@;
put 'Ylt4LUMtMV09LVR9fSxKLnByb3RvdHlwZS5ub3JtYWxpemUxM2I9ZnVuY3Rpb24ocCxiKXtmb3IodmFyIHg9MCxDPTA7QzxiLzI7QysrKXt2YXIgVD04MTkyKk1hdGgucm91bmQocFsyKkMrMV0vYikrTWF0aC5yb3VuZChwWzIqQ10vYikreDtwW0NdPTY3MTA4ODYzJlQseD1UPDY3MTA4ODY0'@;
put 'PzA6VC82NzEwODg2NHwwfXJldHVybiBwfSxKLnByb3RvdHlwZS5jb252ZXJ0MTNiPWZ1bmN0aW9uKHAsYix4LEMpe2Zvcih2YXIgVD0wLEg9MDtIPGI7SCsrKXhbMipIXT04MTkxJihUKz0wfHBbSF0pLHhbMipIKzFdPTgxOTEmKFQ+Pj49MTMpLFQ+Pj49MTM7Zm9yKEg9MipiO0g8QzsrK0gp'@;
put 'eFtIXT0wO2coMD09PVQpLGcoISgtODE5MiZUKSl9LEoucHJvdG90eXBlLnN0dWI9ZnVuY3Rpb24ocCl7Zm9yKHZhciBiPW5ldyBBcnJheShwKSx4PTA7eDxwO3grKyliW3hdPTA7cmV0dXJuIGJ9LEoucHJvdG90eXBlLm11bHA9ZnVuY3Rpb24ocCxiLHgpe3ZhciBDPTIqdGhpcy5ndWVzc0xl'@;
put 'bjEzYihwLmxlbmd0aCxiLmxlbmd0aCksVD10aGlzLm1ha2VSQlQoQyksSD10aGlzLnN0dWIoQyksaj1uZXcgQXJyYXkoQyksRT1uZXcgQXJyYXkoQyksbT1uZXcgQXJyYXkoQyksQT1uZXcgQXJyYXkoQyksYWU9bmV3IEFycmF5KEMpLHRlPW5ldyBBcnJheShDKSxzZT14LndvcmRzO3NlLmxl'@;
put 'bmd0aD1DLHRoaXMuY29udmVydDEzYihwLndvcmRzLHAubGVuZ3RoLGosQyksdGhpcy5jb252ZXJ0MTNiKGIud29yZHMsYi5sZW5ndGgsQSxDKSx0aGlzLnRyYW5zZm9ybShqLEgsRSxtLEMsVCksdGhpcy50cmFuc2Zvcm0oQSxILGFlLHRlLEMsVCk7Zm9yKHZhciB3ZT0wO3dlPEM7d2UrKyl7'@;
put 'dmFyIFVlPUVbd2VdKmFlW3dlXS1tW3dlXSp0ZVt3ZV07bVt3ZV09RVt3ZV0qdGVbd2VdK21bd2VdKmFlW3dlXSxFW3dlXT1VZX1yZXR1cm4gdGhpcy5jb25qdWdhdGUoRSxtLEMpLHRoaXMudHJhbnNmb3JtKEUsbSxzZSxILEMsVCksdGhpcy5jb25qdWdhdGUoc2UsSCxDKSx0aGlzLm5vcm1h'@;
put 'bGl6ZTEzYihzZSxDKSx4Lm5lZ2F0aXZlPXAubmVnYXRpdmVeYi5uZWdhdGl2ZSx4Lmxlbmd0aD1wLmxlbmd0aCtiLmxlbmd0aCx4LnN0cmlwKCl9LHcucHJvdG90eXBlLm11bD1mdW5jdGlvbihwKXt2YXIgYj1uZXcgdyhudWxsKTtyZXR1cm4gYi53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5n'@;
put 'dGgrcC5sZW5ndGgpLHRoaXMubXVsVG8ocCxiKX0sdy5wcm90b3R5cGUubXVsZj1mdW5jdGlvbihwKXt2YXIgYj1uZXcgdyhudWxsKTtyZXR1cm4gYi53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgrcC5sZW5ndGgpLGVlKHRoaXMscCxiKX0sdy5wcm90b3R5cGUuaW11bD1mdW5jdGlvbihw'@;
put 'KXtyZXR1cm4gdGhpcy5jbG9uZSgpLm11bFRvKHAsdGhpcyl9LHcucHJvdG90eXBlLmltdWxuPWZ1bmN0aW9uKHApe2coIm51bWJlciI9PXR5cGVvZiBwKSxnKHA8NjcxMDg4NjQpO2Zvcih2YXIgYj0wLHg9MDt4PHRoaXMubGVuZ3RoO3grKyl7dmFyIEM9KDB8dGhpcy53b3Jkc1t4XSkqcCxU'@;
put 'PSg2NzEwODg2MyZDKSsoNjcxMDg4NjMmYik7Yj4+PTI2LGIrPUMvNjcxMDg4NjR8MCxiKz1UPj4+MjYsdGhpcy53b3Jkc1t4XT02NzEwODg2MyZUfXJldHVybiAwIT09YiYmKHRoaXMud29yZHNbeF09Yix0aGlzLmxlbmd0aCsrKSx0aGlzfSx3LnByb3RvdHlwZS5tdWxuPWZ1bmN0aW9uKHAp'@;
put 'e3JldHVybiB0aGlzLmNsb25lKCkuaW11bG4ocCl9LHcucHJvdG90eXBlLnNxcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLm11bCh0aGlzKX0sdy5wcm90b3R5cGUuaXNxcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmltdWwodGhpcy5jbG9uZSgpKX0sdy5wcm90b3R5cGUucG93PWZ1bmN0aW9u'@;
put 'KHApe3ZhciBiPWZ1bmN0aW9uIFUoVil7Zm9yKHZhciBwPW5ldyBBcnJheShWLmJpdExlbmd0aCgpKSxiPTA7YjxwLmxlbmd0aDtiKyspe3ZhciBDPWIlMjY7cFtiXT0oVi53b3Jkc1tiLzI2fDBdJjE8PEMpPj4+Q31yZXR1cm4gcH0ocCk7aWYoMD09PWIubGVuZ3RoKXJldHVybiBuZXcgdygx'@;
put 'KTtmb3IodmFyIHg9dGhpcyxDPTA7QzxiLmxlbmd0aCYmMD09PWJbQ107QysrLHg9eC5zcXIoKSk7aWYoKytDPGIubGVuZ3RoKWZvcih2YXIgVD14LnNxcigpO0M8Yi5sZW5ndGg7QysrLFQ9VC5zcXIoKSkwIT09YltDXSYmKHg9eC5tdWwoVCkpO3JldHVybiB4fSx3LnByb3RvdHlwZS5pdXNo'@;
put 'bG49ZnVuY3Rpb24ocCl7ZygibnVtYmVyIj09dHlwZW9mIHAmJnA+PTApO3ZhciBULGI9cCUyNix4PShwLWIpLzI2LEM9NjcxMDg4NjM+Pj4yNi1iPDwyNi1iO2lmKDAhPT1iKXt2YXIgSD0wO2ZvcihUPTA7VDx0aGlzLmxlbmd0aDtUKyspe3ZhciBqPXRoaXMud29yZHNbVF0mQzt0aGlzLndv'@;
put 'cmRzW1RdPSgwfHRoaXMud29yZHNbVF0pLWo8PGJ8SCxIPWo+Pj4yNi1ifUgmJih0aGlzLndvcmRzW1RdPUgsdGhpcy5sZW5ndGgrKyl9aWYoMCE9PXgpe2ZvcihUPXRoaXMubGVuZ3RoLTE7VD49MDtULS0pdGhpcy53b3Jkc1tUK3hdPXRoaXMud29yZHNbVF07Zm9yKFQ9MDtUPHg7VCsrKXRo'@;
put 'aXMud29yZHNbVF09MDt0aGlzLmxlbmd0aCs9eH1yZXR1cm4gdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5pc2hsbj1mdW5jdGlvbihwKXtyZXR1cm4gZygwPT09dGhpcy5uZWdhdGl2ZSksdGhpcy5pdXNobG4ocCl9LHcucHJvdG90eXBlLml1c2hybj1mdW5jdGlvbihwLGIseCl7dmFyIEM7'@;
put 'ZygibnVtYmVyIj09dHlwZW9mIHAmJnA+PTApLEM9Yj8oYi1iJTI2KS8yNjowO3ZhciBUPXAlMjYsSD1NYXRoLm1pbigocC1UKS8yNix0aGlzLmxlbmd0aCksaj02NzEwODg2M142NzEwODg2Mz4+PlQ8PFQsRT14O2lmKEMtPUgsQz1NYXRoLm1heCgwLEMpLEUpe2Zvcih2YXIgbT0wO208SDtt'@;
put 'KyspRS53b3Jkc1ttXT10aGlzLndvcmRzW21dO0UubGVuZ3RoPUh9aWYoMCE9PUgpaWYodGhpcy5sZW5ndGg+SClmb3IodGhpcy5sZW5ndGgtPUgsbT0wO208dGhpcy5sZW5ndGg7bSsrKXRoaXMud29yZHNbbV09dGhpcy53b3Jkc1ttK0hdO2Vsc2UgdGhpcy53b3Jkc1swXT0wLHRoaXMubGVu'@;
put 'Z3RoPTE7dmFyIEE9MDtmb3IobT10aGlzLmxlbmd0aC0xO20+PTAmJigwIT09QXx8bT49Qyk7bS0tKXt2YXIgYWU9MHx0aGlzLndvcmRzW21dO3RoaXMud29yZHNbbV09QTw8MjYtVHxhZT4+PlQsQT1hZSZqfXJldHVybiBFJiYwIT09QSYmKEUud29yZHNbRS5sZW5ndGgrK109QSksMD09PXRo'@;
put 'aXMubGVuZ3RoJiYodGhpcy53b3Jkc1swXT0wLHRoaXMubGVuZ3RoPTEpLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuaXNocm49ZnVuY3Rpb24ocCxiLHgpe3JldHVybiBnKDA9PT10aGlzLm5lZ2F0aXZlKSx0aGlzLml1c2hybihwLGIseCl9LHcucHJvdG90eXBlLnNobG49ZnVuY3Rpb24o'@;
put 'cCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc2hsbihwKX0sdy5wcm90b3R5cGUudXNobG49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pdXNobG4ocCl9LHcucHJvdG90eXBlLnNocm49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc2hybihwKX0sdy5wcm90b3R5cGUu'@;
put 'dXNocm49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pdXNocm4ocCl9LHcucHJvdG90eXBlLnRlc3RuPWZ1bmN0aW9uKHApe2coIm51bWJlciI9PXR5cGVvZiBwJiZwPj0wKTt2YXIgYj1wJTI2LHg9KHAtYikvMjY7cmV0dXJuISh0aGlzLmxlbmd0aDw9eHx8ISh0aGlzLndvcmRz'@;
put 'W3hdJjE8PGIpKX0sdy5wcm90b3R5cGUuaW1hc2tuPWZ1bmN0aW9uKHApe2coIm51bWJlciI9PXR5cGVvZiBwJiZwPj0wKTt2YXIgYj1wJTI2LHg9KHAtYikvMjY7cmV0dXJuIGcoMD09PXRoaXMubmVnYXRpdmUsImltYXNrbiB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmUgbnVtYmVycyIpLHRo'@;
put 'aXMubGVuZ3RoPD14P3RoaXM6KDAhPT1iJiZ4KyssdGhpcy5sZW5ndGg9TWF0aC5taW4oeCx0aGlzLmxlbmd0aCksMCE9PWImJih0aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdJj02NzEwODg2M142NzEwODg2Mz4+PmI8PGIpLHRoaXMuc3RyaXAoKSl9LHcucHJvdG90eXBlLm1hc2tuPWZ1bmN0'@;
put 'aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaW1hc2tuKHApfSx3LnByb3RvdHlwZS5pYWRkbj1mdW5jdGlvbihwKXtyZXR1cm4gZygibnVtYmVyIj09dHlwZW9mIHApLGcocDw2NzEwODg2NCkscDwwP3RoaXMuaXN1Ym4oLXApOjAhPT10aGlzLm5lZ2F0aXZlPzE9PT10aGlzLmxlbmd0aCYm'@;
put 'KDB8dGhpcy53b3Jkc1swXSk8cD8odGhpcy53b3Jkc1swXT1wLSgwfHRoaXMud29yZHNbMF0pLHRoaXMubmVnYXRpdmU9MCx0aGlzKToodGhpcy5uZWdhdGl2ZT0wLHRoaXMuaXN1Ym4ocCksdGhpcy5uZWdhdGl2ZT0xLHRoaXMpOnRoaXMuX2lhZGRuKHApfSx3LnByb3RvdHlwZS5faWFkZG49'@;
put 'ZnVuY3Rpb24ocCl7dGhpcy53b3Jkc1swXSs9cDtmb3IodmFyIGI9MDtiPHRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzW2JdPj02NzEwODg2NDtiKyspdGhpcy53b3Jkc1tiXS09NjcxMDg4NjQsYj09PXRoaXMubGVuZ3RoLTE/dGhpcy53b3Jkc1tiKzFdPTE6dGhpcy53b3Jkc1tiKzFdKys7cmV0'@;
put 'dXJuIHRoaXMubGVuZ3RoPU1hdGgubWF4KHRoaXMubGVuZ3RoLGIrMSksdGhpc30sdy5wcm90b3R5cGUuaXN1Ym49ZnVuY3Rpb24ocCl7aWYoZygibnVtYmVyIj09dHlwZW9mIHApLGcocDw2NzEwODg2NCkscDwwKXJldHVybiB0aGlzLmlhZGRuKC1wKTtpZigwIT09dGhpcy5uZWdhdGl2ZSly'@;
put 'ZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMuaWFkZG4ocCksdGhpcy5uZWdhdGl2ZT0xLHRoaXM7aWYodGhpcy53b3Jkc1swXS09cCwxPT09dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbMF08MCl0aGlzLndvcmRzWzBdPS10aGlzLndvcmRzWzBdLHRoaXMubmVnYXRpdmU9MTtlbHNlIGZvcih2'@;
put 'YXIgYj0wO2I8dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbYl08MDtiKyspdGhpcy53b3Jkc1tiXSs9NjcxMDg4NjQsdGhpcy53b3Jkc1tiKzFdLT0xO3JldHVybiB0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmFkZG49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pYWRkbihwKX0s'@;
put 'dy5wcm90b3R5cGUuc3Vibj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzdWJuKHApfSx3LnByb3RvdHlwZS5pYWJzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzfSx3LnByb3RvdHlwZS5hYnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlh'@;
put 'YnMoKX0sdy5wcm90b3R5cGUuX2lzaGxuc3VibXVsPWZ1bmN0aW9uKHAsYix4KXt2YXIgVDt0aGlzLl9leHBhbmQocC5sZW5ndGgreCk7dmFyIEgsaj0wO2ZvcihUPTA7VDxwLmxlbmd0aDtUKyspe0g9KDB8dGhpcy53b3Jkc1tUK3hdKStqO3ZhciBFPSgwfHAud29yZHNbVF0pKmI7aj0oKEgt'@;
put 'PTY3MTA4ODYzJkUpPj4yNiktKEUvNjcxMDg4NjR8MCksdGhpcy53b3Jkc1tUK3hdPTY3MTA4ODYzJkh9Zm9yKDtUPHRoaXMubGVuZ3RoLXg7VCsrKWo9KEg9KDB8dGhpcy53b3Jkc1tUK3hdKStqKT4+MjYsdGhpcy53b3Jkc1tUK3hdPTY3MTA4ODYzJkg7aWYoMD09PWopcmV0dXJuIHRoaXMu'@;
put 'c3RyaXAoKTtmb3IoZygtMT09PWopLGo9MCxUPTA7VDx0aGlzLmxlbmd0aDtUKyspaj0oSD0tKDB8dGhpcy53b3Jkc1tUXSkraik+PjI2LHRoaXMud29yZHNbVF09NjcxMDg4NjMmSDtyZXR1cm4gdGhpcy5uZWdhdGl2ZT0xLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuX3dvcmREaXY9ZnVu'@;
put 'Y3Rpb24ocCxiKXt2YXIgeCxDPXRoaXMuY2xvbmUoKSxUPXAsSD0wfFQud29yZHNbVC5sZW5ndGgtMV07MCE9KHg9MjYtdGhpcy5fY291bnRCaXRzKEgpKSYmKFQ9VC51c2hsbih4KSxDLml1c2hsbih4KSxIPTB8VC53b3Jkc1tULmxlbmd0aC0xXSk7dmFyIG0sRT1DLmxlbmd0aC1ULmxlbmd0'@;
put 'aDtpZigibW9kIiE9PWIpeyhtPW5ldyB3KG51bGwpKS5sZW5ndGg9RSsxLG0ud29yZHM9bmV3IEFycmF5KG0ubGVuZ3RoKTtmb3IodmFyIEE9MDtBPG0ubGVuZ3RoO0ErKyltLndvcmRzW0FdPTB9dmFyIGFlPUMuY2xvbmUoKS5faXNobG5zdWJtdWwoVCwxLEUpOzA9PT1hZS5uZWdhdGl2ZSYm'@;
put 'KEM9YWUsbSYmKG0ud29yZHNbRV09MSkpO2Zvcih2YXIgdGU9RS0xO3RlPj0wO3RlLS0pe3ZhciBzZT02NzEwODg2NCooMHxDLndvcmRzW1QubGVuZ3RoK3RlXSkrKDB8Qy53b3Jkc1tULmxlbmd0aCt0ZS0xXSk7Zm9yKHNlPU1hdGgubWluKHNlL0h8MCw2NzEwODg2MyksQy5faXNobG5zdWJt'@;
put 'dWwoVCxzZSx0ZSk7MCE9PUMubmVnYXRpdmU7KXNlLS0sQy5uZWdhdGl2ZT0wLEMuX2lzaGxuc3VibXVsKFQsMSx0ZSksQy5pc1plcm8oKXx8KEMubmVnYXRpdmVePTEpO20mJihtLndvcmRzW3RlXT1zZSl9cmV0dXJuIG0mJm0uc3RyaXAoKSxDLnN0cmlwKCksImRpdiIhPT1iJiYwIT09eCYm'@;
put 'Qy5pdXNocm4oeCkse2RpdjptfHxudWxsLG1vZDpDfX0sdy5wcm90b3R5cGUuZGl2bW9kPWZ1bmN0aW9uKHAsYix4KXtyZXR1cm4gZyghcC5pc1plcm8oKSksdGhpcy5pc1plcm8oKT97ZGl2Om5ldyB3KDApLG1vZDpuZXcgdygwKX06MCE9PXRoaXMubmVnYXRpdmUmJjA9PT1wLm5lZ2F0aXZl'@;
put 'PyhIPXRoaXMubmVnKCkuZGl2bW9kKHAsYiksIm1vZCIhPT1iJiYoQz1ILmRpdi5uZWcoKSksImRpdiIhPT1iJiYoVD1ILm1vZC5uZWcoKSx4JiYwIT09VC5uZWdhdGl2ZSYmVC5pYWRkKHApKSx7ZGl2OkMsbW9kOlR9KTowPT09dGhpcy5uZWdhdGl2ZSYmMCE9PXAubmVnYXRpdmU/KEg9dGhp'@;
put 'cy5kaXZtb2QocC5uZWcoKSxiKSwibW9kIiE9PWImJihDPUguZGl2Lm5lZygpKSx7ZGl2OkMsbW9kOkgubW9kfSk6dGhpcy5uZWdhdGl2ZSZwLm5lZ2F0aXZlPyhIPXRoaXMubmVnKCkuZGl2bW9kKHAubmVnKCksYiksImRpdiIhPT1iJiYoVD1ILm1vZC5uZWcoKSx4JiYwIT09VC5uZWdhdGl2'@;
put 'ZSYmVC5pc3ViKHApKSx7ZGl2OkguZGl2LG1vZDpUfSk6cC5sZW5ndGg+dGhpcy5sZW5ndGh8fHRoaXMuY21wKHApPDA/e2RpdjpuZXcgdygwKSxtb2Q6dGhpc306MT09PXAubGVuZ3RoPyJkaXYiPT09Yj97ZGl2OnRoaXMuZGl2bihwLndvcmRzWzBdKSxtb2Q6bnVsbH06Im1vZCI9PT1iP3tk'@;
put 'aXY6bnVsbCxtb2Q6bmV3IHcodGhpcy5tb2RuKHAud29yZHNbMF0pKX06e2Rpdjp0aGlzLmRpdm4ocC53b3Jkc1swXSksbW9kOm5ldyB3KHRoaXMubW9kbihwLndvcmRzWzBdKSl9OnRoaXMuX3dvcmREaXYocCxiKTt2YXIgQyxULEh9LHcucHJvdG90eXBlLmRpdj1mdW5jdGlvbihwKXtyZXR1'@;
put 'cm4gdGhpcy5kaXZtb2QocCwiZGl2IiwhMSkuZGl2fSx3LnByb3RvdHlwZS5tb2Q9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuZGl2bW9kKHAsIm1vZCIsITEpLm1vZH0sdy5wcm90b3R5cGUudW1vZD1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5kaXZtb2QocCwibW9kIiwhMCkubW9kfSx3LnBy'@;
put 'b3RvdHlwZS5kaXZSb3VuZD1mdW5jdGlvbihwKXt2YXIgYj10aGlzLmRpdm1vZChwKTtpZihiLm1vZC5pc1plcm8oKSlyZXR1cm4gYi5kaXY7dmFyIHg9MCE9PWIuZGl2Lm5lZ2F0aXZlP2IubW9kLmlzdWIocCk6Yi5tb2QsQz1wLnVzaHJuKDEpLFQ9cC5hbmRsbigxKSxIPXguY21wKEMpO3Jl'@;
put 'dHVybiBIPDB8fDE9PT1UJiYwPT09SD9iLmRpdjowIT09Yi5kaXYubmVnYXRpdmU/Yi5kaXYuaXN1Ym4oMSk6Yi5kaXYuaWFkZG4oMSl9LHcucHJvdG90eXBlLm1vZG49ZnVuY3Rpb24ocCl7ZyhwPD02NzEwODg2Myk7Zm9yKHZhciBiPSgxPDwyNiklcCx4PTAsQz10aGlzLmxlbmd0aC0xO0M+'@;
put 'PTA7Qy0tKXg9KGIqeCsoMHx0aGlzLndvcmRzW0NdKSklcDtyZXR1cm4geH0sdy5wcm90b3R5cGUuaWRpdm49ZnVuY3Rpb24ocCl7ZyhwPD02NzEwODg2Myk7Zm9yKHZhciBiPTAseD10aGlzLmxlbmd0aC0xO3g+PTA7eC0tKXt2YXIgQz0oMHx0aGlzLndvcmRzW3hdKSs2NzEwODg2NCpiO3Ro'@;
put 'aXMud29yZHNbeF09Qy9wfDAsYj1DJXB9cmV0dXJuIHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuZGl2bj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlkaXZuKHApfSx3LnByb3RvdHlwZS5lZ2NkPWZ1bmN0aW9uKHApe2coMD09PXAubmVnYXRpdmUpLGcoIXAuaXNaZXJvKCkp'@;
put 'O3ZhciBiPXRoaXMseD1wLmNsb25lKCk7Yj0wIT09Yi5uZWdhdGl2ZT9iLnVtb2QocCk6Yi5jbG9uZSgpO2Zvcih2YXIgQz1uZXcgdygxKSxUPW5ldyB3KDApLEg9bmV3IHcoMCksaj1uZXcgdygxKSxFPTA7Yi5pc0V2ZW4oKSYmeC5pc0V2ZW4oKTspYi5pdXNocm4oMSkseC5pdXNocm4oMSks'@;
put 'KytFO2Zvcih2YXIgbT14LmNsb25lKCksQT1iLmNsb25lKCk7IWIuaXNaZXJvKCk7KXtmb3IodmFyIGFlPTAsdGU9MTshKGIud29yZHNbMF0mdGUpJiZhZTwyNjsrK2FlLHRlPDw9MSk7aWYoYWU+MClmb3IoYi5pdXNocm4oYWUpO2FlLS0gPjA7KShDLmlzT2RkKCl8fFQuaXNPZGQoKSkmJihD'@;
put 'LmlhZGQobSksVC5pc3ViKEEpKSxDLml1c2hybigxKSxULml1c2hybigxKTtmb3IodmFyIHNlPTAsd2U9MTshKHgud29yZHNbMF0md2UpJiZzZTwyNjsrK3NlLHdlPDw9MSk7aWYoc2U+MClmb3IoeC5pdXNocm4oc2UpO3NlLS0gPjA7KShILmlzT2RkKCl8fGouaXNPZGQoKSkmJihILmlhZGQo'@;
put 'bSksai5pc3ViKEEpKSxILml1c2hybigxKSxqLml1c2hybigxKTtiLmNtcCh4KT49MD8oYi5pc3ViKHgpLEMuaXN1YihIKSxULmlzdWIoaikpOih4LmlzdWIoYiksSC5pc3ViKEMpLGouaXN1YihUKSl9cmV0dXJue2E6SCxiOmosZ2NkOnguaXVzaGxuKEUpfX0sdy5wcm90b3R5cGUuX2ludm1w'@;
put 'PWZ1bmN0aW9uKHApe2coMD09PXAubmVnYXRpdmUpLGcoIXAuaXNaZXJvKCkpO3ZhciBhZSxiPXRoaXMseD1wLmNsb25lKCk7Yj0wIT09Yi5uZWdhdGl2ZT9iLnVtb2QocCk6Yi5jbG9uZSgpO2Zvcih2YXIgQz1uZXcgdygxKSxUPW5ldyB3KDApLEg9eC5jbG9uZSgpO2IuY21wbigxKT4wJiZ4'@;
put 'LmNtcG4oMSk+MDspe2Zvcih2YXIgaj0wLEU9MTshKGIud29yZHNbMF0mRSkmJmo8MjY7KytqLEU8PD0xKTtpZihqPjApZm9yKGIuaXVzaHJuKGopO2otLSA+MDspQy5pc09kZCgpJiZDLmlhZGQoSCksQy5pdXNocm4oMSk7Zm9yKHZhciBtPTAsQT0xOyEoeC53b3Jkc1swXSZBKSYmbTwyNjsr'@;
put 'K20sQTw8PTEpO2lmKG0+MClmb3IoeC5pdXNocm4obSk7bS0tID4wOylULmlzT2RkKCkmJlQuaWFkZChIKSxULml1c2hybigxKTtiLmNtcCh4KT49MD8oYi5pc3ViKHgpLEMuaXN1YihUKSk6KHguaXN1YihiKSxULmlzdWIoQykpfXJldHVybihhZT0wPT09Yi5jbXBuKDEpP0M6VCkuY21wbigw'@;
put 'KTwwJiZhZS5pYWRkKHApLGFlfSx3LnByb3RvdHlwZS5nY2Q9ZnVuY3Rpb24ocCl7aWYodGhpcy5pc1plcm8oKSlyZXR1cm4gcC5hYnMoKTtpZihwLmlzWmVybygpKXJldHVybiB0aGlzLmFicygpO3ZhciBiPXRoaXMuY2xvbmUoKSx4PXAuY2xvbmUoKTtiLm5lZ2F0aXZlPTAseC5uZWdhdGl2'@;
put 'ZT0wO2Zvcih2YXIgQz0wO2IuaXNFdmVuKCkmJnguaXNFdmVuKCk7QysrKWIuaXVzaHJuKDEpLHguaXVzaHJuKDEpO2Zvcig7Oyl7Zm9yKDtiLmlzRXZlbigpOyliLml1c2hybigxKTtmb3IoO3guaXNFdmVuKCk7KXguaXVzaHJuKDEpO3ZhciBUPWIuY21wKHgpO2lmKFQ8MCl7dmFyIEg9Yjti'@;
put 'PXgseD1IfWVsc2UgaWYoMD09PVR8fDA9PT14LmNtcG4oMSkpYnJlYWs7Yi5pc3ViKHgpfXJldHVybiB4Lml1c2hsbihDKX0sdy5wcm90b3R5cGUuaW52bT1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5lZ2NkKHApLmEudW1vZChwKX0sdy5wcm90b3R5cGUuaXNFdmVuPWZ1bmN0aW9uKCl7cmV0'@;
put 'dXJuISgxJnRoaXMud29yZHNbMF0pfSx3LnByb3RvdHlwZS5pc09kZD1mdW5jdGlvbigpe3JldHVybiEoMSZ+dGhpcy53b3Jkc1swXSl9LHcucHJvdG90eXBlLmFuZGxuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLndvcmRzWzBdJnB9LHcucHJvdG90eXBlLmJpbmNuPWZ1bmN0aW9uKHApe2co'@;
put 'Im51bWJlciI9PXR5cGVvZiBwKTt2YXIgYj1wJTI2LHg9KHAtYikvMjYsQz0xPDxiO2lmKHRoaXMubGVuZ3RoPD14KXJldHVybiB0aGlzLl9leHBhbmQoeCsxKSx0aGlzLndvcmRzW3hdfD1DLHRoaXM7Zm9yKHZhciBUPUMsSD14OzAhPT1UJiZIPHRoaXMubGVuZ3RoO0grKyl7dmFyIGo9MHx0'@;
put 'aGlzLndvcmRzW0hdO1Q9KGorPVQpPj4+MjYsdGhpcy53b3Jkc1tIXT1qJj02NzEwODg2M31yZXR1cm4gMCE9PVQmJih0aGlzLndvcmRzW0hdPVQsdGhpcy5sZW5ndGgrKyksdGhpc30sdy5wcm90b3R5cGUuaXNaZXJvPWZ1bmN0aW9uKCl7cmV0dXJuIDE9PT10aGlzLmxlbmd0aCYmMD09PXRo'@;
put 'aXMud29yZHNbMF19LHcucHJvdG90eXBlLmNtcG49ZnVuY3Rpb24ocCl7dmFyIHgsYj1wPDA7aWYoMCE9PXRoaXMubmVnYXRpdmUmJiFiKXJldHVybi0xO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiZiKXJldHVybiAxO2lmKHRoaXMuc3RyaXAoKSx0aGlzLmxlbmd0aD4xKXg9MTtlbHNle2ImJihw'@;
put 'PS1wKSxnKHA8PTY3MTA4ODYzLCJOdW1iZXIgaXMgdG9vIGJpZyIpO3ZhciBDPTB8dGhpcy53b3Jkc1swXTt4PUM9PT1wPzA6QzxwPy0xOjF9cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlPzB8LXg6eH0sdy5wcm90b3R5cGUuY21wPWZ1bmN0aW9uKHApe2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYw'@;
put 'PT09cC5uZWdhdGl2ZSlyZXR1cm4tMTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmMCE9PXAubmVnYXRpdmUpcmV0dXJuIDE7dmFyIGI9dGhpcy51Y21wKHApO3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZT8wfC1iOmJ9LHcucHJvdG90eXBlLnVjbXA9ZnVuY3Rpb24ocCl7aWYodGhpcy5sZW5ndGg+'@;
put 'cC5sZW5ndGgpcmV0dXJuIDE7aWYodGhpcy5sZW5ndGg8cC5sZW5ndGgpcmV0dXJuLTE7Zm9yKHZhciBiPTAseD10aGlzLmxlbmd0aC0xO3g+PTA7eC0tKXt2YXIgQz0wfHRoaXMud29yZHNbeF0sVD0wfHAud29yZHNbeF07aWYoQyE9PVQpe0M8VD9iPS0xOkM+VCYmKGI9MSk7YnJlYWt9fXJl'@;
put 'dHVybiBifSx3LnByb3RvdHlwZS5ndG49ZnVuY3Rpb24ocCl7cmV0dXJuIDE9PT10aGlzLmNtcG4ocCl9LHcucHJvdG90eXBlLmd0PWZ1bmN0aW9uKHApe3JldHVybiAxPT09dGhpcy5jbXAocCl9LHcucHJvdG90eXBlLmd0ZW49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY21wbihwKT49MH0s'@;
put 'dy5wcm90b3R5cGUuZ3RlPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNtcChwKT49MH0sdy5wcm90b3R5cGUubHRuPWZ1bmN0aW9uKHApe3JldHVybi0xPT09dGhpcy5jbXBuKHApfSx3LnByb3RvdHlwZS5sdD1mdW5jdGlvbihwKXtyZXR1cm4tMT09PXRoaXMuY21wKHApfSx3LnByb3RvdHlw'@;
put 'ZS5sdGVuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNtcG4ocCk8PTB9LHcucHJvdG90eXBlLmx0ZT1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbXAocCk8PTB9LHcucHJvdG90eXBlLmVxbj1mdW5jdGlvbihwKXtyZXR1cm4gMD09PXRoaXMuY21wbihwKX0sdy5wcm90b3R5cGUuZXE9ZnVu'@;
put 'Y3Rpb24ocCl7cmV0dXJuIDA9PT10aGlzLmNtcChwKX0sdy5yZWQ9ZnVuY3Rpb24ocCl7cmV0dXJuIG5ldyBTZShwKX0sdy5wcm90b3R5cGUudG9SZWQ9ZnVuY3Rpb24ocCl7cmV0dXJuIGcoIXRoaXMucmVkLCJBbHJlYWR5IGEgbnVtYmVyIGluIHJlZHVjdGlvbiBjb250ZXh0IiksZygwPT09'@;
put 'dGhpcy5uZWdhdGl2ZSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSxwLmNvbnZlcnRUbyh0aGlzKS5fZm9yY2VSZWQocCl9LHcucHJvdG90eXBlLmZyb21SZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gZyh0aGlzLnJlZCwiZnJvbVJlZCB3b3JrcyBvbmx5IHdpdGggbnVtYmVycyBpbiBy'@;
put 'ZWR1Y3Rpb24gY29udGV4dCIpLHRoaXMucmVkLmNvbnZlcnRGcm9tKHRoaXMpfSx3LnByb3RvdHlwZS5fZm9yY2VSZWQ9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMucmVkPXAsdGhpc30sdy5wcm90b3R5cGUuZm9yY2VSZWQ9ZnVuY3Rpb24ocCl7cmV0dXJuIGcoIXRoaXMucmVkLCJBbHJlYWR5'@;
put 'IGEgbnVtYmVyIGluIHJlZHVjdGlvbiBjb250ZXh0IiksdGhpcy5fZm9yY2VSZWQocCl9LHcucHJvdG90eXBlLnJlZEFkZD1mdW5jdGlvbihwKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkQWRkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmFkZCh0aGlzLHApfSx3LnBy'@;
put 'b3RvdHlwZS5yZWRJQWRkPWZ1bmN0aW9uKHApe3JldHVybiBnKHRoaXMucmVkLCJyZWRJQWRkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmlhZGQodGhpcyxwKX0sdy5wcm90b3R5cGUucmVkU3ViPWZ1bmN0aW9uKHApe3JldHVybiBnKHRoaXMucmVkLCJyZWRTdWIg'@;
put 'd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuc3ViKHRoaXMscCl9LHcucHJvdG90eXBlLnJlZElTdWI9ZnVuY3Rpb24ocCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZElTdWIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuaXN1Yih0aGlzLHApfSx3'@;
put 'LnByb3RvdHlwZS5yZWRTaGw9ZnVuY3Rpb24ocCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZFNobCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5zaGwodGhpcyxwKX0sdy5wcm90b3R5cGUucmVkTXVsPWZ1bmN0aW9uKHApe3JldHVybiBnKHRoaXMucmVkLCJyZWRNdWwg'@;
put 'd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTIodGhpcyxwKSx0aGlzLnJlZC5tdWwodGhpcyxwKX0sdy5wcm90b3R5cGUucmVkSU11bD1mdW5jdGlvbihwKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkTXVsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIp'@;
put 'LHRoaXMucmVkLl92ZXJpZnkyKHRoaXMscCksdGhpcy5yZWQuaW11bCh0aGlzLHApfSx3LnByb3RvdHlwZS5yZWRTcXI9ZnVuY3Rpb24oKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkU3FyIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMu'@;
put 'cmVkLnNxcih0aGlzKX0sdy5wcm90b3R5cGUucmVkSVNxcj1mdW5jdGlvbigpe3JldHVybiBnKHRoaXMucmVkLCJyZWRJU3FyIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLmlzcXIodGhpcyl9LHcucHJvdG90eXBlLnJlZFNx'@;
put 'cnQ9ZnVuY3Rpb24oKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkU3FydCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5zcXJ0KHRoaXMpfSx3LnByb3RvdHlwZS5yZWRJbnZtPWZ1bmN0aW9uKCl7cmV0dXJuIGcodGhpcy5yZWQs'@;
put 'InJlZEludm0gd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuaW52bSh0aGlzKX0sdy5wcm90b3R5cGUucmVkTmVnPWZ1bmN0aW9uKCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZE5lZyB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJl'@;
put 'cnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5uZWcodGhpcyl9LHcucHJvdG90eXBlLnJlZFBvdz1mdW5jdGlvbihwKXtyZXR1cm4gZyh0aGlzLnJlZCYmIXAucmVkLCJyZWRQb3cobm9ybWFsTnVtKSIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnBvdyh0'@;
put 'aGlzLHApfTt2YXIgbmU9e2syNTY6bnVsbCxwMjI0Om51bGwscDE5MjpudWxsLHAyNTUxOTpudWxsfTtmdW5jdGlvbiBpZShWLHApe3RoaXMubmFtZT1WLHRoaXMucD1uZXcgdyhwLDE2KSx0aGlzLm49dGhpcy5wLmJpdExlbmd0aCgpLHRoaXMuaz1uZXcgdygxKS5pdXNobG4odGhpcy5uKS5p'@;
put 'c3ViKHRoaXMucCksdGhpcy50bXA9dGhpcy5fdG1wKCl9ZnVuY3Rpb24gbGUoKXtpZS5jYWxsKHRoaXMsImsyNTYiLCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmMyZiIpfWZ1bmN0aW9uIG1lKCl7aWUuY2FsbCh0'@;
put 'aGlzLCJwMjI0IiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgMDAwMDAwMDAgMDAwMDAwMDAgMDAwMDAwMDEiKX1mdW5jdGlvbiBfZSgpe2llLmNhbGwodGhpcywicDE5MiIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmZmZmIGZmZmZmZmZm'@;
put 'Iil9ZnVuY3Rpb24gVGUoKXtpZS5jYWxsKHRoaXMsIjI1NTE5IiwiN2ZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZlZCIpfWZ1bmN0aW9uIFNlKFYpe2lmKCJzdHJpbmciPT10eXBlb2YgVil7dmFyIHA9dy5fcHJpbWUoVik7'@;
put 'dGhpcy5tPXAucCx0aGlzLnByaW1lPXB9ZWxzZSBnKFYuZ3RuKDEpLCJtb2R1bHVzIG11c3QgYmUgZ3JlYXRlciB0aGFuIDEiKSx0aGlzLm09Vix0aGlzLnByaW1lPW51bGx9ZnVuY3Rpb24gamUoVil7U2UuY2FsbCh0aGlzLFYpLHRoaXMuc2hpZnQ9dGhpcy5tLmJpdExlbmd0aCgpLHRoaXMu'@;
put 'c2hpZnQlMjYhPTAmJih0aGlzLnNoaWZ0Kz0yNi10aGlzLnNoaWZ0JTI2KSx0aGlzLnI9bmV3IHcoMSkuaXVzaGxuKHRoaXMuc2hpZnQpLHRoaXMucjI9dGhpcy5pbW9kKHRoaXMuci5zcXIoKSksdGhpcy5yaW52PXRoaXMuci5faW52bXAodGhpcy5tKSx0aGlzLm1pbnY9dGhpcy5yaW52Lm11'@;
put 'bCh0aGlzLnIpLmlzdWJuKDEpLmRpdih0aGlzLm0pLHRoaXMubWludj10aGlzLm1pbnYudW1vZCh0aGlzLnIpLHRoaXMubWludj10aGlzLnIuc3ViKHRoaXMubWludil9aWUucHJvdG90eXBlLl90bXA9ZnVuY3Rpb24oKXt2YXIgcD1uZXcgdyhudWxsKTtyZXR1cm4gcC53b3Jkcz1uZXcgQXJy'@;
put 'YXkoTWF0aC5jZWlsKHRoaXMubi8xMykpLHB9LGllLnByb3RvdHlwZS5pcmVkdWNlPWZ1bmN0aW9uKHApe3ZhciB4LGI9cDtkb3t0aGlzLnNwbGl0KGIsdGhpcy50bXApLHg9KGI9KGI9dGhpcy5pbXVsSyhiKSkuaWFkZCh0aGlzLnRtcCkpLmJpdExlbmd0aCgpfXdoaWxlKHg+dGhpcy5uKTt2'@;
put 'YXIgQz14PHRoaXMubj8tMTpiLnVjbXAodGhpcy5wKTtyZXR1cm4gMD09PUM/KGIud29yZHNbMF09MCxiLmxlbmd0aD0xKTpDPjA/Yi5pc3ViKHRoaXMucCk6dm9pZCAwIT09Yi5zdHJpcD9iLnN0cmlwKCk6Yi5fc3RyaXAoKSxifSxpZS5wcm90b3R5cGUuc3BsaXQ9ZnVuY3Rpb24ocCxiKXtw'@;
put 'Lml1c2hybih0aGlzLm4sMCxiKX0saWUucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKHApe3JldHVybiBwLmltdWwodGhpcy5rKX0sQihsZSxpZSksbGUucHJvdG90eXBlLnNwbGl0PWZ1bmN0aW9uKHAsYil7Zm9yKHZhciB4PTQxOTQzMDMsQz1NYXRoLm1pbihwLmxlbmd0aCw5KSxUPTA7VDxD'@;
put 'O1QrKyliLndvcmRzW1RdPXAud29yZHNbVF07aWYoYi5sZW5ndGg9QyxwLmxlbmd0aDw9OSlyZXR1cm4gcC53b3Jkc1swXT0wLHZvaWQocC5sZW5ndGg9MSk7dmFyIEg9cC53b3Jkc1s5XTtmb3IoYi53b3Jkc1tiLmxlbmd0aCsrXT1IJngsVD0xMDtUPHAubGVuZ3RoO1QrKyl7dmFyIGo9MHxw'@;
put 'LndvcmRzW1RdO3Aud29yZHNbVC0xMF09KGomeCk8PDR8SD4+PjIyLEg9an1wLndvcmRzW1QtMTBdPUg+Pj49MjIscC5sZW5ndGgtPTA9PT1IJiZwLmxlbmd0aD4xMD8xMDo5fSxsZS5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24ocCl7cC53b3Jkc1twLmxlbmd0aF09MCxwLndvcmRzW3AubGVu'@;
put 'Z3RoKzFdPTAscC5sZW5ndGgrPTI7Zm9yKHZhciBiPTAseD0wO3g8cC5sZW5ndGg7eCsrKXt2YXIgQz0wfHAud29yZHNbeF07cC53b3Jkc1t4XT02NzEwODg2MyYoYis9OTc3KkMpLGI9NjQqQysoYi82NzEwODg2NHwwKX1yZXR1cm4gMD09PXAud29yZHNbcC5sZW5ndGgtMV0mJihwLmxlbmd0'@;
put 'aC0tLDA9PT1wLndvcmRzW3AubGVuZ3RoLTFdJiZwLmxlbmd0aC0tKSxwfSxCKG1lLGllKSxCKF9lLGllKSxCKFRlLGllKSxUZS5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24ocCl7Zm9yKHZhciBiPTAseD0wO3g8cC5sZW5ndGg7eCsrKXt2YXIgQz0xOSooMHxwLndvcmRzW3hdKStiLFQ9Njcx'@;
put 'MDg4NjMmQztDPj4+PTI2LHAud29yZHNbeF09VCxiPUN9cmV0dXJuIDAhPT1iJiYocC53b3Jkc1twLmxlbmd0aCsrXT1iKSxwfSx3Ll9wcmltZT1mdW5jdGlvbihwKXtpZihuZVtwXSlyZXR1cm4gbmVbcF07dmFyIGI7aWYoImsyNTYiPT09cCliPW5ldyBsZTtlbHNlIGlmKCJwMjI0Ij09PXAp'@;
put 'Yj1uZXcgbWU7ZWxzZSBpZigicDE5MiI9PT1wKWI9bmV3IF9lO2Vsc2V7aWYoInAyNTUxOSIhPT1wKXRocm93IG5ldyBFcnJvcigiVW5rbm93biBwcmltZSAiK3ApO2I9bmV3IFRlfXJldHVybiBuZVtwXT1iLGJ9LFNlLnByb3RvdHlwZS5fdmVyaWZ5MT1mdW5jdGlvbihwKXtnKDA9PT1wLm5l'@;
put 'Z2F0aXZlLCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIpLGcocC5yZWQsInJlZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKX0sU2UucHJvdG90eXBlLl92ZXJpZnkyPWZ1bmN0aW9uKHAsYil7ZyghKHAubmVnYXRpdmV8Yi5uZWdhdGl2ZSksInJlZCB3b3JrcyBvbmx5IHdp'@;
put 'dGggcG9zaXRpdmVzIiksZyhwLnJlZCYmcC5yZWQ9PT1iLnJlZCwicmVkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpfSxTZS5wcm90b3R5cGUuaW1vZD1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5wcmltZT90aGlzLnByaW1lLmlyZWR1Y2UocCkuX2ZvcmNlUmVkKHRoaXMpOnAudW1v'@;
put 'ZCh0aGlzLm0pLl9mb3JjZVJlZCh0aGlzKX0sU2UucHJvdG90eXBlLm5lZz1mdW5jdGlvbihwKXtyZXR1cm4gcC5pc1plcm8oKT9wLmNsb25lKCk6dGhpcy5tLnN1YihwKS5fZm9yY2VSZWQodGhpcyl9LFNlLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24ocCxiKXt0aGlzLl92ZXJpZnkyKHAsYik7'@;
put 'dmFyIHg9cC5hZGQoYik7cmV0dXJuIHguY21wKHRoaXMubSk+PTAmJnguaXN1Yih0aGlzLm0pLHguX2ZvcmNlUmVkKHRoaXMpfSxTZS5wcm90b3R5cGUuaWFkZD1mdW5jdGlvbihwLGIpe3RoaXMuX3ZlcmlmeTIocCxiKTt2YXIgeD1wLmlhZGQoYik7cmV0dXJuIHguY21wKHRoaXMubSk+PTAm'@;
put 'JnguaXN1Yih0aGlzLm0pLHh9LFNlLnByb3RvdHlwZS5zdWI9ZnVuY3Rpb24ocCxiKXt0aGlzLl92ZXJpZnkyKHAsYik7dmFyIHg9cC5zdWIoYik7cmV0dXJuIHguY21wbigwKTwwJiZ4LmlhZGQodGhpcy5tKSx4Ll9mb3JjZVJlZCh0aGlzKX0sU2UucHJvdG90eXBlLmlzdWI9ZnVuY3Rpb24o'@;
put 'cCxiKXt0aGlzLl92ZXJpZnkyKHAsYik7dmFyIHg9cC5pc3ViKGIpO3JldHVybiB4LmNtcG4oMCk8MCYmeC5pYWRkKHRoaXMubSkseH0sU2UucHJvdG90eXBlLnNobD1mdW5jdGlvbihwLGIpe3JldHVybiB0aGlzLl92ZXJpZnkxKHApLHRoaXMuaW1vZChwLnVzaGxuKGIpKX0sU2UucHJvdG90'@;
put 'eXBlLmltdWw9ZnVuY3Rpb24ocCxiKXtyZXR1cm4gdGhpcy5fdmVyaWZ5MihwLGIpLHRoaXMuaW1vZChwLmltdWwoYikpfSxTZS5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKHAsYil7cmV0dXJuIHRoaXMuX3ZlcmlmeTIocCxiKSx0aGlzLmltb2QocC5tdWwoYikpfSxTZS5wcm90b3R5cGUuaXNx'@;
put 'cj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5pbXVsKHAscC5jbG9uZSgpKX0sU2UucHJvdG90eXBlLnNxcj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5tdWwocCxwKX0sU2UucHJvdG90eXBlLnNxcnQ9ZnVuY3Rpb24ocCl7aWYocC5pc1plcm8oKSlyZXR1cm4gcC5jbG9uZSgpO3ZhciBiPXRo'@;
put 'aXMubS5hbmRsbigzKTtpZihnKGIlMj09MSksMz09PWIpe3ZhciB4PXRoaXMubS5hZGQobmV3IHcoMSkpLml1c2hybigyKTtyZXR1cm4gdGhpcy5wb3cocCx4KX1mb3IodmFyIEM9dGhpcy5tLnN1Ym4oMSksVD0wOyFDLmlzWmVybygpJiYwPT09Qy5hbmRsbigxKTspVCsrLEMuaXVzaHJuKDEp'@;
put 'O2coIUMuaXNaZXJvKCkpO3ZhciBIPW5ldyB3KDEpLnRvUmVkKHRoaXMpLGo9SC5yZWROZWcoKSxFPXRoaXMubS5zdWJuKDEpLml1c2hybigxKSxtPXRoaXMubS5iaXRMZW5ndGgoKTtmb3IobT1uZXcgdygyKm0qbSkudG9SZWQodGhpcyk7MCE9PXRoaXMucG93KG0sRSkuY21wKGopOyltLnJl'@;
put 'ZElBZGQoaik7Zm9yKHZhciBBPXRoaXMucG93KG0sQyksYWU9dGhpcy5wb3cocCxDLmFkZG4oMSkuaXVzaHJuKDEpKSx0ZT10aGlzLnBvdyhwLEMpLHNlPVQ7MCE9PXRlLmNtcChIKTspe2Zvcih2YXIgd2U9dGUsVWU9MDswIT09d2UuY21wKEgpO1VlKyspd2U9d2UucmVkU3FyKCk7ZyhVZTxz'@;
put 'ZSk7dmFyIEplPXRoaXMucG93KEEsbmV3IHcoMSkuaXVzaGxuKHNlLVVlLTEpKTthZT1hZS5yZWRNdWwoSmUpLEE9SmUucmVkU3FyKCksdGU9dGUucmVkTXVsKEEpLHNlPVVlfXJldHVybiBhZX0sU2UucHJvdG90eXBlLmludm09ZnVuY3Rpb24ocCl7dmFyIGI9cC5faW52bXAodGhpcy5tKTty'@;
put 'ZXR1cm4gMCE9PWIubmVnYXRpdmU/KGIubmVnYXRpdmU9MCx0aGlzLmltb2QoYikucmVkTmVnKCkpOnRoaXMuaW1vZChiKX0sU2UucHJvdG90eXBlLnBvdz1mdW5jdGlvbihwLGIpe2lmKGIuaXNaZXJvKCkpcmV0dXJuIG5ldyB3KDEpLnRvUmVkKHRoaXMpO2lmKDA9PT1iLmNtcG4oMSkpcmV0'@;
put 'dXJuIHAuY2xvbmUoKTt2YXIgQz1uZXcgQXJyYXkoMTYpO0NbMF09bmV3IHcoMSkudG9SZWQodGhpcyksQ1sxXT1wO2Zvcih2YXIgVD0yO1Q8Qy5sZW5ndGg7VCsrKUNbVF09dGhpcy5tdWwoQ1tULTFdLHApO3ZhciBIPUNbMF0saj0wLEU9MCxtPWIuYml0TGVuZ3RoKCklMjY7Zm9yKDA9PT1t'@;
put 'JiYobT0yNiksVD1iLmxlbmd0aC0xO1Q+PTA7VC0tKXtmb3IodmFyIEE9Yi53b3Jkc1tUXSxhZT1tLTE7YWU+PTA7YWUtLSl7dmFyIHRlPUE+PmFlJjE7SCE9PUNbMF0mJihIPXRoaXMuc3FyKEgpKSwwIT09dGV8fDAhPT1qPyhqPDw9MSxqfD10ZSwoND09KytFfHwwPT09VCYmMD09PWFlKSYm'@;
put 'KEg9dGhpcy5tdWwoSCxDW2pdKSxFPTAsaj0wKSk6RT0wfW09MjZ9cmV0dXJuIEh9LFNlLnByb3RvdHlwZS5jb252ZXJ0VG89ZnVuY3Rpb24ocCl7dmFyIGI9cC51bW9kKHRoaXMubSk7cmV0dXJuIGI9PT1wP2IuY2xvbmUoKTpifSxTZS5wcm90b3R5cGUuY29udmVydEZyb209ZnVuY3Rpb24o'@;
put 'cCl7dmFyIGI9cC5jbG9uZSgpO3JldHVybiBiLnJlZD1udWxsLGJ9LHcubW9udD1mdW5jdGlvbihwKXtyZXR1cm4gbmV3IGplKHApfSxCKGplLFNlKSxqZS5wcm90b3R5cGUuY29udmVydFRvPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmltb2QocC51c2hsbih0aGlzLnNoaWZ0KSl9LGplLnBy'@;
put 'b3RvdHlwZS5jb252ZXJ0RnJvbT1mdW5jdGlvbihwKXt2YXIgYj10aGlzLmltb2QocC5tdWwodGhpcy5yaW52KSk7cmV0dXJuIGIucmVkPW51bGwsYn0samUucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24ocCxiKXtpZihwLmlzWmVybygpfHxiLmlzWmVybygpKXJldHVybiBwLndvcmRzWzBdPTAs'@;
put 'cC5sZW5ndGg9MSxwO3ZhciB4PXAuaW11bChiKSxDPXgubWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubWludikuaW1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm0pLFQ9eC5pc3ViKEMpLml1c2hybih0aGlzLnNoaWZ0KSxIPVQ7cmV0dXJuIFQuY21wKHRoaXMubSk+PTA/SD1ULmlzdWIo'@;
put 'dGhpcy5tKTpULmNtcG4oMCk8MCYmKEg9VC5pYWRkKHRoaXMubSkpLEguX2ZvcmNlUmVkKHRoaXMpfSxqZS5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKHAsYil7aWYocC5pc1plcm8oKXx8Yi5pc1plcm8oKSlyZXR1cm4gbmV3IHcoMCkuX2ZvcmNlUmVkKHRoaXMpO3ZhciB4PXAubXVsKGIpLEM9'@;
put 'eC5tYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5taW52KS5pbWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubSksVD14LmlzdWIoQykuaXVzaHJuKHRoaXMuc2hpZnQpLEg9VDtyZXR1cm4gVC5jbXAodGhpcy5tKT49MD9IPVQuaXN1Yih0aGlzLm0pOlQuY21wbigwKTwwJiYoSD1ULmlhZGQo'@;
put 'dGhpcy5tKSksSC5fZm9yY2VSZWQodGhpcyl9LGplLnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmltb2QocC5faW52bXAodGhpcy5tKS5tdWwodGhpcy5yMikpLl9mb3JjZVJlZCh0aGlzKX19KHVlPXkubm1kKHVlKSx0aGlzKX0sNjUwNDoodWUsWCx5KT0+eyJ1c2Ug'@;
put 'c3RyaWN0Ijt2YXIgZyxJPXkoMzE5KSxfPXkoNzI5Nik7dHJ5e2c9W10uX19wcm90b19fPT09QXJyYXkucHJvdG90eXBlfWNhdGNoKEYpe2lmKCFGfHwib2JqZWN0IiE9dHlwZW9mIEZ8fCEoImNvZGUiaW4gRil8fCJFUlJfUFJPVE9fQUNDRVNTIiE9PUYuY29kZSl0aHJvdyBGfXZhciBCPSEh'@;
put 'ZyYmXyYmXyhPYmplY3QucHJvdG90eXBlLCJfX3Byb3RvX18iKSx3PU9iamVjdCxQPXcuZ2V0UHJvdG90eXBlT2Y7dWUuZXhwb3J0cz1CJiYiZnVuY3Rpb24iPT10eXBlb2YgQi5nZXQ/SShbQi5nZXRdKToiZnVuY3Rpb24iPT10eXBlb2YgUCYmZnVuY3Rpb24oTyl7cmV0dXJuIFAobnVsbD09'@;
put 'Tz9POncoTykpfX0sNjk0ODoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1YO0kudmVyc2lvbj15KDg1OTcpLmk4LEkudXRpbHM9eSg5NTMpLEkucmFuZD15KDk5MzEpLEkuY3VydmU9eSg4MjU0KSxJLmN1cnZlcz15KDU0MjcpLEkuZWM9eSg3OTU0KSxJLmVkZHNhPXkoNTk4MCl9LDQ5'@;
put 'MTg6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSgzNzg1KSxfPXkoOTUzKSxnPV8uZ2V0TkFGLEI9Xy5nZXRKU0Ysdz1fLmFzc2VydDtmdW5jdGlvbiBQKE8seil7dGhpcy50eXBlPU8sdGhpcy5wPW5ldyBJKHoucCwxNiksdGhpcy5yZWQ9ei5wcmltZT9JLnJlZCh6LnByaW1lKTpJ'@;
put 'Lm1vbnQodGhpcy5wKSx0aGlzLnplcm89bmV3IEkoMCkudG9SZWQodGhpcy5yZWQpLHRoaXMub25lPW5ldyBJKDEpLnRvUmVkKHRoaXMucmVkKSx0aGlzLnR3bz1uZXcgSSgyKS50b1JlZCh0aGlzLnJlZCksdGhpcy5uPXoubiYmbmV3IEkoei5uLDE2KSx0aGlzLmc9ei5nJiZ0aGlzLnBvaW50'@;
put 'RnJvbUpTT04oei5nLHouZ1JlZCksdGhpcy5fd25hZlQxPW5ldyBBcnJheSg0KSx0aGlzLl93bmFmVDI9bmV3IEFycmF5KDQpLHRoaXMuX3duYWZUMz1uZXcgQXJyYXkoNCksdGhpcy5fd25hZlQ0PW5ldyBBcnJheSg0KSx0aGlzLl9iaXRMZW5ndGg9dGhpcy5uP3RoaXMubi5iaXRMZW5ndGgo'@;
put 'KTowO3ZhciBOPXRoaXMubiYmdGhpcy5wLmRpdih0aGlzLm4pOyFOfHxOLmNtcG4oMTAwKT4wP3RoaXMucmVkTj1udWxsOih0aGlzLl9tYXh3ZWxsVHJpY2s9ITAsdGhpcy5yZWROPXRoaXMubi50b1JlZCh0aGlzLnJlZCkpfWZ1bmN0aW9uIEYoTyx6KXt0aGlzLmN1cnZlPU8sdGhpcy50eXBl'@;
put 'PXosdGhpcy5wcmVjb21wdXRlZD1udWxsfXVlLmV4cG9ydHM9UCxQLnByb3RvdHlwZS5wb2ludD1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiTm90IGltcGxlbWVudGVkIil9LFAucHJvdG90eXBlLnZhbGlkYXRlPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJOb3QgaW1wbGVtZW50'@;
put 'ZWQiKX0sUC5wcm90b3R5cGUuX2ZpeGVkTmFmTXVsPWZ1bmN0aW9uKHosTil7dyh6LnByZWNvbXB1dGVkKTt2YXIgTD16Ll9nZXREb3VibGVzKCksSz1nKE4sMSx0aGlzLl9iaXRMZW5ndGgpLFU9KDE8PEwuc3RlcCsxKS0oTC5zdGVwJTI9PTA/MjoxKTtVLz0zO3ZhciBZLHEsVz1bXTtmb3Io'@;
put 'WT0wO1k8Sy5sZW5ndGg7WSs9TC5zdGVwKXtxPTA7Zm9yKHZhciBlZT1ZK0wuc3RlcC0xO2VlPj1ZO2VlLS0pcT0ocTw8MSkrS1tlZV07Vy5wdXNoKHEpfWZvcih2YXIgSj10aGlzLmpwb2ludChudWxsLG51bGwsbnVsbCksbmU9dGhpcy5qcG9pbnQobnVsbCxudWxsLG51bGwpLGllPVU7aWU+'@;
put 'MDtpZS0tKXtmb3IoWT0wO1k8Vy5sZW5ndGg7WSsrKShxPVdbWV0pPT09aWU/bmU9bmUubWl4ZWRBZGQoTC5wb2ludHNbWV0pOnE9PT0taWUmJihuZT1uZS5taXhlZEFkZChMLnBvaW50c1tZXS5uZWcoKSkpO0o9Si5hZGQobmUpfXJldHVybiBKLnRvUCgpfSxQLnByb3RvdHlwZS5fd25hZk11'@;
put 'bD1mdW5jdGlvbih6LE4pe2Zvcih2YXIgTD00LEs9ei5fZ2V0TkFGUG9pbnRzKEwpLFU9Sy5wb2ludHMsVz1nKE4sTD1LLnduZCx0aGlzLl9iaXRMZW5ndGgpLFk9dGhpcy5qcG9pbnQobnVsbCxudWxsLG51bGwpLHE9Vy5sZW5ndGgtMTtxPj0wO3EtLSl7Zm9yKHZhciBlZT0wO3E+PTAmJjA9'@;
put 'PT1XW3FdO3EtLSllZSsrO2lmKHE+PTAmJmVlKyssWT1ZLmRibHAoZWUpLHE8MClicmVhazt2YXIgSj1XW3FdO3coMCE9PUopLFk9ImFmZmluZSI9PT16LnR5cGU/WS5taXhlZEFkZChKPjA/VVtKLTE+PjFdOlVbLUotMT4+MV0ubmVnKCkpOlkuYWRkKEo+MD9VW0otMT4+MV06VVstSi0xPj4x'@;
put 'XS5uZWcoKSl9cmV0dXJuImFmZmluZSI9PT16LnR5cGU/WS50b1AoKTpZfSxQLnByb3RvdHlwZS5fd25hZk11bEFkZD1mdW5jdGlvbih6LE4sTCxLLFUpe3ZhciBKLG5lLGllLFc9dGhpcy5fd25hZlQxLFk9dGhpcy5fd25hZlQyLHE9dGhpcy5fd25hZlQzLGVlPTA7Zm9yKEo9MDtKPEs7Sisr'@;
put 'KXt2YXIgbGU9KGllPU5bSl0pLl9nZXROQUZQb2ludHMoeik7V1tKXT1sZS53bmQsWVtKXT1sZS5wb2ludHN9Zm9yKEo9Sy0xO0o+PTE7Si09Mil7dmFyIG1lPUotMSxfZT1KO2lmKDE9PT1XW21lXSYmMT09PVdbX2VdKXt2YXIgVGU9W05bbWVdLG51bGwsbnVsbCxOW19lXV07MD09PU5bbWVd'@;
put 'LnkuY21wKE5bX2VdLnkpPyhUZVsxXT1OW21lXS5hZGQoTltfZV0pLFRlWzJdPU5bbWVdLnRvSigpLm1peGVkQWRkKE5bX2VdLm5lZygpKSk6MD09PU5bbWVdLnkuY21wKE5bX2VdLnkucmVkTmVnKCkpPyhUZVsxXT1OW21lXS50b0ooKS5taXhlZEFkZChOW19lXSksVGVbMl09TlttZV0uYWRk'@;
put 'KE5bX2VdLm5lZygpKSk6KFRlWzFdPU5bbWVdLnRvSigpLm1peGVkQWRkKE5bX2VdKSxUZVsyXT1OW21lXS50b0ooKS5taXhlZEFkZChOW19lXS5uZWcoKSkpO3ZhciBTZT1bLTMsLTEsLTUsLTcsMCw3LDUsMSwzXSxqZT1CKExbbWVdLExbX2VdKTtmb3IoZWU9TWF0aC5tYXgoamVbMF0ubGVu'@;
put 'Z3RoLGVlKSxxW21lXT1uZXcgQXJyYXkoZWUpLHFbX2VdPW5ldyBBcnJheShlZSksbmU9MDtuZTxlZTtuZSsrKXFbbWVdW25lXT1TZVszKigxKygwfGplWzBdW25lXSkpKygxKygwfGplWzFdW25lXSkpXSxxW19lXVtuZV09MCxZW21lXT1UZX1lbHNlIHFbbWVdPWcoTFttZV0sV1ttZV0sdGhp'@;
put 'cy5fYml0TGVuZ3RoKSxxW19lXT1nKExbX2VdLFdbX2VdLHRoaXMuX2JpdExlbmd0aCksZWU9TWF0aC5tYXgocVttZV0ubGVuZ3RoLGVlKSxlZT1NYXRoLm1heChxW19lXS5sZW5ndGgsZWUpfXZhciBiPXRoaXMuanBvaW50KG51bGwsbnVsbCxudWxsKSx4PXRoaXMuX3duYWZUNDtmb3IoSj1l'@;
put 'ZTtKPj0wO0otLSl7Zm9yKHZhciBDPTA7Sj49MDspe3ZhciBUPSEwO2ZvcihuZT0wO25lPEs7bmUrKyl4W25lXT0wfHFbbmVdW0pdLDAhPT14W25lXSYmKFQ9ITEpO2lmKCFUKWJyZWFrO0MrKyxKLS19aWYoSj49MCYmQysrLGI9Yi5kYmxwKEMpLEo8MClicmVhaztmb3IobmU9MDtuZTxLO25l'@;
put 'Kyspe3ZhciBIPXhbbmVdOzAhPT1IJiYoSD4wP2llPVlbbmVdW0gtMT4+MV06SDwwJiYoaWU9WVtuZV1bLUgtMT4+MV0ubmVnKCkpLGI9ImFmZmluZSI9PT1pZS50eXBlP2IubWl4ZWRBZGQoaWUpOmIuYWRkKGllKSl9fWZvcihKPTA7SjxLO0orKylZW0pdPW51bGw7cmV0dXJuIFU/YjpiLnRv'@;
put 'UCgpfSxQLkJhc2VQb2ludD1GLEYucHJvdG90eXBlLmVxPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJOb3QgaW1wbGVtZW50ZWQiKX0sRi5wcm90b3R5cGUudmFsaWRhdGU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jdXJ2ZS52YWxpZGF0ZSh0aGlzKX0sUC5wcm90b3R5cGUuZGVjb2Rl'@;
put 'UG9pbnQ9ZnVuY3Rpb24oeixOKXt6PV8udG9BcnJheSh6LE4pO3ZhciBMPXRoaXMucC5ieXRlTGVuZ3RoKCk7aWYoKDQ9PT16WzBdfHw2PT09elswXXx8Nz09PXpbMF0pJiZ6Lmxlbmd0aC0xPT0yKkwpcmV0dXJuIDY9PT16WzBdP3coelt6Lmxlbmd0aC0xXSUyPT0wKTo3PT09elswXSYmdyh6'@;
put 'W3oubGVuZ3RoLTFdJTI9PTEpLHRoaXMucG9pbnQoei5zbGljZSgxLDErTCksei5zbGljZSgxK0wsMSsyKkwpKTtpZigoMj09PXpbMF18fDM9PT16WzBdKSYmei5sZW5ndGgtMT09PUwpcmV0dXJuIHRoaXMucG9pbnRGcm9tWCh6LnNsaWNlKDEsMStMKSwzPT09elswXSk7dGhyb3cgbmV3IEVy'@;
put 'cm9yKCJVbmtub3duIHBvaW50IGZvcm1hdCIpfSxGLnByb3RvdHlwZS5lbmNvZGVDb21wcmVzc2VkPWZ1bmN0aW9uKHope3JldHVybiB0aGlzLmVuY29kZSh6LCEwKX0sRi5wcm90b3R5cGUuX2VuY29kZT1mdW5jdGlvbih6KXt2YXIgTj10aGlzLmN1cnZlLnAuYnl0ZUxlbmd0aCgpLEw9dGhp'@;
put 'cy5nZXRYKCkudG9BcnJheSgiYmUiLE4pO3JldHVybiB6P1t0aGlzLmdldFkoKS5pc0V2ZW4oKT8yOjNdLmNvbmNhdChMKTpbNF0uY29uY2F0KEwsdGhpcy5nZXRZKCkudG9BcnJheSgiYmUiLE4pKX0sRi5wcm90b3R5cGUuZW5jb2RlPWZ1bmN0aW9uKHosTil7cmV0dXJuIF8uZW5jb2RlKHRo'@;
put 'aXMuX2VuY29kZShOKSx6KX0sRi5wcm90b3R5cGUucHJlY29tcHV0ZT1mdW5jdGlvbih6KXtpZih0aGlzLnByZWNvbXB1dGVkKXJldHVybiB0aGlzO3ZhciBOPXtkb3VibGVzOm51bGwsbmFmOm51bGwsYmV0YTpudWxsfTtyZXR1cm4gTi5uYWY9dGhpcy5fZ2V0TkFGUG9pbnRzKDgpLE4uZG91'@;
put 'Ymxlcz10aGlzLl9nZXREb3VibGVzKDQseiksTi5iZXRhPXRoaXMuX2dldEJldGEoKSx0aGlzLnByZWNvbXB1dGVkPU4sdGhpc30sRi5wcm90b3R5cGUuX2hhc0RvdWJsZXM9ZnVuY3Rpb24oeil7aWYoIXRoaXMucHJlY29tcHV0ZWQpcmV0dXJuITE7dmFyIE49dGhpcy5wcmVjb21wdXRlZC5k'@;
put 'b3VibGVzO3JldHVybiEhTiYmTi5wb2ludHMubGVuZ3RoPj1NYXRoLmNlaWwoKHouYml0TGVuZ3RoKCkrMSkvTi5zdGVwKX0sRi5wcm90b3R5cGUuX2dldERvdWJsZXM9ZnVuY3Rpb24oeixOKXtpZih0aGlzLnByZWNvbXB1dGVkJiZ0aGlzLnByZWNvbXB1dGVkLmRvdWJsZXMpcmV0dXJuIHRo'@;
put 'aXMucHJlY29tcHV0ZWQuZG91Ymxlcztmb3IodmFyIEw9W3RoaXNdLEs9dGhpcyxVPTA7VTxOO1UrPXope2Zvcih2YXIgVz0wO1c8ejtXKyspSz1LLmRibCgpO0wucHVzaChLKX1yZXR1cm57c3RlcDp6LHBvaW50czpMfX0sRi5wcm90b3R5cGUuX2dldE5BRlBvaW50cz1mdW5jdGlvbih6KXtp'@;
put 'Zih0aGlzLnByZWNvbXB1dGVkJiZ0aGlzLnByZWNvbXB1dGVkLm5hZilyZXR1cm4gdGhpcy5wcmVjb21wdXRlZC5uYWY7Zm9yKHZhciBOPVt0aGlzXSxMPSgxPDx6KS0xLEs9MT09PUw/bnVsbDp0aGlzLmRibCgpLFU9MTtVPEw7VSsrKU5bVV09TltVLTFdLmFkZChLKTtyZXR1cm57d25kOnos'@;
put 'cG9pbnRzOk59fSxGLnByb3RvdHlwZS5fZ2V0QmV0YT1mdW5jdGlvbigpe3JldHVybiBudWxsfSxGLnByb3RvdHlwZS5kYmxwPWZ1bmN0aW9uKHope2Zvcih2YXIgTj10aGlzLEw9MDtMPHo7TCsrKU49Ti5kYmwoKTtyZXR1cm4gTn19LDExMzg6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFy'@;
put 'IEk9eSg5NTMpLF89eSgzNzg1KSxnPXkoNTcxNyksQj15KDQ5MTgpLHc9SS5hc3NlcnQ7ZnVuY3Rpb24gUChPKXt0aGlzLnR3aXN0ZWQ9MSE9KDB8Ty5hKSx0aGlzLm1PbmVBPXRoaXMudHdpc3RlZCYmLTE9PSgwfE8uYSksdGhpcy5leHRlbmRlZD10aGlzLm1PbmVBLEIuY2FsbCh0aGlzLCJl'@;
put 'ZHdhcmRzIixPKSx0aGlzLmE9bmV3IF8oTy5hLDE2KS51bW9kKHRoaXMucmVkLm0pLHRoaXMuYT10aGlzLmEudG9SZWQodGhpcy5yZWQpLHRoaXMuYz1uZXcgXyhPLmMsMTYpLnRvUmVkKHRoaXMucmVkKSx0aGlzLmMyPXRoaXMuYy5yZWRTcXIoKSx0aGlzLmQ9bmV3IF8oTy5kLDE2KS50b1Jl'@;
put 'ZCh0aGlzLnJlZCksdGhpcy5kZD10aGlzLmQucmVkQWRkKHRoaXMuZCksdyghdGhpcy50d2lzdGVkfHwwPT09dGhpcy5jLmZyb21SZWQoKS5jbXBuKDEpKSx0aGlzLm9uZUM9MT09KDB8Ty5jKX1mdW5jdGlvbiBGKE8seixOLEwsSyl7Qi5CYXNlUG9pbnQuY2FsbCh0aGlzLE8sInByb2plY3Rp'@;
put 'dmUiKSxudWxsPT09eiYmbnVsbD09PU4mJm51bGw9PT1MPyh0aGlzLng9dGhpcy5jdXJ2ZS56ZXJvLHRoaXMueT10aGlzLmN1cnZlLm9uZSx0aGlzLno9dGhpcy5jdXJ2ZS5vbmUsdGhpcy50PXRoaXMuY3VydmUuemVybyx0aGlzLnpPbmU9ITApOih0aGlzLng9bmV3IF8oeiwxNiksdGhpcy55'@;
put 'PW5ldyBfKE4sMTYpLHRoaXMuej1MP25ldyBfKEwsMTYpOnRoaXMuY3VydmUub25lLHRoaXMudD1LJiZuZXcgXyhLLDE2KSx0aGlzLngucmVkfHwodGhpcy54PXRoaXMueC50b1JlZCh0aGlzLmN1cnZlLnJlZCkpLHRoaXMueS5yZWR8fCh0aGlzLnk9dGhpcy55LnRvUmVkKHRoaXMuY3VydmUu'@;
put 'cmVkKSksdGhpcy56LnJlZHx8KHRoaXMuej10aGlzLnoudG9SZWQodGhpcy5jdXJ2ZS5yZWQpKSx0aGlzLnQmJiF0aGlzLnQucmVkJiYodGhpcy50PXRoaXMudC50b1JlZCh0aGlzLmN1cnZlLnJlZCkpLHRoaXMuek9uZT10aGlzLno9PT10aGlzLmN1cnZlLm9uZSx0aGlzLmN1cnZlLmV4dGVu'@;
put 'ZGVkJiYhdGhpcy50JiYodGhpcy50PXRoaXMueC5yZWRNdWwodGhpcy55KSx0aGlzLnpPbmV8fCh0aGlzLnQ9dGhpcy50LnJlZE11bCh0aGlzLnoucmVkSW52bSgpKSkpKX1nKFAsQiksdWUuZXhwb3J0cz1QLFAucHJvdG90eXBlLl9tdWxBPWZ1bmN0aW9uKHope3JldHVybiB0aGlzLm1PbmVB'@;
put 'P3oucmVkTmVnKCk6dGhpcy5hLnJlZE11bCh6KX0sUC5wcm90b3R5cGUuX211bEM9ZnVuY3Rpb24oeil7cmV0dXJuIHRoaXMub25lQz96OnRoaXMuYy5yZWRNdWwoeil9LFAucHJvdG90eXBlLmpwb2ludD1mdW5jdGlvbih6LE4sTCxLKXtyZXR1cm4gdGhpcy5wb2ludCh6LE4sTCxLKX0sUC5w'@;
put 'cm90b3R5cGUucG9pbnRGcm9tWD1mdW5jdGlvbih6LE4peyh6PW5ldyBfKHosMTYpKS5yZWR8fCh6PXoudG9SZWQodGhpcy5yZWQpKTt2YXIgTD16LnJlZFNxcigpLEs9dGhpcy5jMi5yZWRTdWIodGhpcy5hLnJlZE11bChMKSksVT10aGlzLm9uZS5yZWRTdWIodGhpcy5jMi5yZWRNdWwodGhp'@;
put 'cy5kKS5yZWRNdWwoTCkpLFc9Sy5yZWRNdWwoVS5yZWRJbnZtKCkpLFk9Vy5yZWRTcXJ0KCk7aWYoMCE9PVkucmVkU3FyKCkucmVkU3ViKFcpLmNtcCh0aGlzLnplcm8pKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBwb2ludCIpO3ZhciBxPVkuZnJvbVJlZCgpLmlzT2RkKCk7cmV0dXJuKE4m'@;
put 'JiFxfHwhTiYmcSkmJihZPVkucmVkTmVnKCkpLHRoaXMucG9pbnQoeixZKX0sUC5wcm90b3R5cGUucG9pbnRGcm9tWT1mdW5jdGlvbih6LE4peyh6PW5ldyBfKHosMTYpKS5yZWR8fCh6PXoudG9SZWQodGhpcy5yZWQpKTt2YXIgTD16LnJlZFNxcigpLEs9TC5yZWRTdWIodGhpcy5jMiksVT1M'@;
put 'LnJlZE11bCh0aGlzLmQpLnJlZE11bCh0aGlzLmMyKS5yZWRTdWIodGhpcy5hKSxXPUsucmVkTXVsKFUucmVkSW52bSgpKTtpZigwPT09Vy5jbXAodGhpcy56ZXJvKSl7aWYoTil0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgcG9pbnQiKTtyZXR1cm4gdGhpcy5wb2ludCh0aGlzLnplcm8seil9'@;
put 'dmFyIFk9Vy5yZWRTcXJ0KCk7aWYoMCE9PVkucmVkU3FyKCkucmVkU3ViKFcpLmNtcCh0aGlzLnplcm8pKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBwb2ludCIpO3JldHVybiBZLmZyb21SZWQoKS5pc09kZCgpIT09TiYmKFk9WS5yZWROZWcoKSksdGhpcy5wb2ludChZLHopfSxQLnByb3Rv'@;
put 'dHlwZS52YWxpZGF0ZT1mdW5jdGlvbih6KXtpZih6LmlzSW5maW5pdHkoKSlyZXR1cm4hMDt6Lm5vcm1hbGl6ZSgpO3ZhciBOPXoueC5yZWRTcXIoKSxMPXoueS5yZWRTcXIoKSxLPU4ucmVkTXVsKHRoaXMuYSkucmVkQWRkKEwpLFU9dGhpcy5jMi5yZWRNdWwodGhpcy5vbmUucmVkQWRkKHRo'@;
put 'aXMuZC5yZWRNdWwoTikucmVkTXVsKEwpKSk7cmV0dXJuIDA9PT1LLmNtcChVKX0sZyhGLEIuQmFzZVBvaW50KSxQLnByb3RvdHlwZS5wb2ludEZyb21KU09OPWZ1bmN0aW9uKHope3JldHVybiBGLmZyb21KU09OKHRoaXMseil9LFAucHJvdG90eXBlLnBvaW50PWZ1bmN0aW9uKHosTixMLEsp'@;
put 'e3JldHVybiBuZXcgRih0aGlzLHosTixMLEspfSxGLmZyb21KU09OPWZ1bmN0aW9uKHosTil7cmV0dXJuIG5ldyBGKHosTlswXSxOWzFdLE5bMl0pfSxGLnByb3RvdHlwZS5pbnNwZWN0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNJbmZpbml0eSgpPyI8RUMgUG9pbnQgSW5maW5pdHk+Ijoi'@;
put 'PEVDIFBvaW50IHg6ICIrdGhpcy54LmZyb21SZWQoKS50b1N0cmluZygxNiwyKSsiIHk6ICIrdGhpcy55LmZyb21SZWQoKS50b1N0cmluZygxNiwyKSsiIHo6ICIrdGhpcy56LmZyb21SZWQoKS50b1N0cmluZygxNiwyKSsiPiJ9LEYucHJvdG90eXBlLmlzSW5maW5pdHk9ZnVuY3Rpb24oKXty'@;
put 'ZXR1cm4gMD09PXRoaXMueC5jbXBuKDApJiYoMD09PXRoaXMueS5jbXAodGhpcy56KXx8dGhpcy56T25lJiYwPT09dGhpcy55LmNtcCh0aGlzLmN1cnZlLmMpKX0sRi5wcm90b3R5cGUuX2V4dERibD1mdW5jdGlvbigpe3ZhciB6PXRoaXMueC5yZWRTcXIoKSxOPXRoaXMueS5yZWRTcXIoKSxM'@;
put 'PXRoaXMuei5yZWRTcXIoKTtMPUwucmVkSUFkZChMKTt2YXIgSz10aGlzLmN1cnZlLl9tdWxBKHopLFU9dGhpcy54LnJlZEFkZCh0aGlzLnkpLnJlZFNxcigpLnJlZElTdWIoeikucmVkSVN1YihOKSxXPUsucmVkQWRkKE4pLFk9Vy5yZWRTdWIoTCkscT1LLnJlZFN1YihOKSxlZT1VLnJlZE11'@;
put 'bChZKSxKPVcucmVkTXVsKHEpLG5lPVUucmVkTXVsKHEpLGllPVkucmVkTXVsKFcpO3JldHVybiB0aGlzLmN1cnZlLnBvaW50KGVlLEosaWUsbmUpfSxGLnByb3RvdHlwZS5fcHJvakRibD1mdW5jdGlvbigpe3ZhciBLLFUsVyxZLHEsZWUsej10aGlzLngucmVkQWRkKHRoaXMueSkucmVkU3Fy'@;
put 'KCksTj10aGlzLngucmVkU3FyKCksTD10aGlzLnkucmVkU3FyKCk7aWYodGhpcy5jdXJ2ZS50d2lzdGVkKXt2YXIgSj0oWT10aGlzLmN1cnZlLl9tdWxBKE4pKS5yZWRBZGQoTCk7dGhpcy56T25lPyhLPXoucmVkU3ViKE4pLnJlZFN1YihMKS5yZWRNdWwoSi5yZWRTdWIodGhpcy5jdXJ2ZS50'@;
put 'd28pKSxVPUoucmVkTXVsKFkucmVkU3ViKEwpKSxXPUoucmVkU3FyKCkucmVkU3ViKEopLnJlZFN1YihKKSk6KHE9dGhpcy56LnJlZFNxcigpLGVlPUoucmVkU3ViKHEpLnJlZElTdWIocSksSz16LnJlZFN1YihOKS5yZWRJU3ViKEwpLnJlZE11bChlZSksVT1KLnJlZE11bChZLnJlZFN1YihM'@;
put 'KSksVz1KLnJlZE11bChlZSkpfWVsc2UgWT1OLnJlZEFkZChMKSxxPXRoaXMuY3VydmUuX211bEModGhpcy56KS5yZWRTcXIoKSxlZT1ZLnJlZFN1YihxKS5yZWRTdWIocSksSz10aGlzLmN1cnZlLl9tdWxDKHoucmVkSVN1YihZKSkucmVkTXVsKGVlKSxVPXRoaXMuY3VydmUuX211bEMoWSku'@;
put 'cmVkTXVsKE4ucmVkSVN1YihMKSksVz1ZLnJlZE11bChlZSk7cmV0dXJuIHRoaXMuY3VydmUucG9pbnQoSyxVLFcpfSxGLnByb3RvdHlwZS5kYmw9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc0luZmluaXR5KCk/dGhpczp0aGlzLmN1cnZlLmV4dGVuZGVkP3RoaXMuX2V4dERibCgpOnRoaXMu'@;
put 'X3Byb2pEYmwoKX0sRi5wcm90b3R5cGUuX2V4dEFkZD1mdW5jdGlvbih6KXt2YXIgTj10aGlzLnkucmVkU3ViKHRoaXMueCkucmVkTXVsKHoueS5yZWRTdWIoei54KSksTD10aGlzLnkucmVkQWRkKHRoaXMueCkucmVkTXVsKHoueS5yZWRBZGQoei54KSksSz10aGlzLnQucmVkTXVsKHRoaXMu'@;
put 'Y3VydmUuZGQpLnJlZE11bCh6LnQpLFU9dGhpcy56LnJlZE11bCh6LnoucmVkQWRkKHoueikpLFc9TC5yZWRTdWIoTiksWT1VLnJlZFN1YihLKSxxPVUucmVkQWRkKEspLGVlPUwucmVkQWRkKE4pLEo9Vy5yZWRNdWwoWSksbmU9cS5yZWRNdWwoZWUpLGllPVcucmVkTXVsKGVlKSxsZT1ZLnJl'@;
put 'ZE11bChxKTtyZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludChKLG5lLGxlLGllKX0sRi5wcm90b3R5cGUuX3Byb2pBZGQ9ZnVuY3Rpb24oeil7dmFyIG5lLGllLE49dGhpcy56LnJlZE11bCh6LnopLEw9Ti5yZWRTcXIoKSxLPXRoaXMueC5yZWRNdWwoei54KSxVPXRoaXMueS5yZWRNdWwoei55KSxX'@;
put 'PXRoaXMuY3VydmUuZC5yZWRNdWwoSykucmVkTXVsKFUpLFk9TC5yZWRTdWIoVykscT1MLnJlZEFkZChXKSxlZT10aGlzLngucmVkQWRkKHRoaXMueSkucmVkTXVsKHoueC5yZWRBZGQoei55KSkucmVkSVN1YihLKS5yZWRJU3ViKFUpLEo9Ti5yZWRNdWwoWSkucmVkTXVsKGVlKTtyZXR1cm4g'@;
put 'dGhpcy5jdXJ2ZS50d2lzdGVkPyhuZT1OLnJlZE11bChxKS5yZWRNdWwoVS5yZWRTdWIodGhpcy5jdXJ2ZS5fbXVsQShLKSkpLGllPVkucmVkTXVsKHEpKToobmU9Ti5yZWRNdWwocSkucmVkTXVsKFUucmVkU3ViKEspKSxpZT10aGlzLmN1cnZlLl9tdWxDKFkpLnJlZE11bChxKSksdGhpcy5j'@;
put 'dXJ2ZS5wb2ludChKLG5lLGllKX0sRi5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKHope3JldHVybiB0aGlzLmlzSW5maW5pdHkoKT96OnouaXNJbmZpbml0eSgpP3RoaXM6dGhpcy5jdXJ2ZS5leHRlbmRlZD90aGlzLl9leHRBZGQoeik6dGhpcy5fcHJvakFkZCh6KX0sRi5wcm90b3R5cGUubXVs'@;
put 'PWZ1bmN0aW9uKHope3JldHVybiB0aGlzLl9oYXNEb3VibGVzKHopP3RoaXMuY3VydmUuX2ZpeGVkTmFmTXVsKHRoaXMseik6dGhpcy5jdXJ2ZS5fd25hZk11bCh0aGlzLHopfSxGLnByb3RvdHlwZS5tdWxBZGQ9ZnVuY3Rpb24oeixOLEwpe3JldHVybiB0aGlzLmN1cnZlLl93bmFmTXVsQWRk'@;
put 'KDEsW3RoaXMsTl0sW3osTF0sMiwhMSl9LEYucHJvdG90eXBlLmptdWxBZGQ9ZnVuY3Rpb24oeixOLEwpe3JldHVybiB0aGlzLmN1cnZlLl93bmFmTXVsQWRkKDEsW3RoaXMsTl0sW3osTF0sMiwhMCl9LEYucHJvdG90eXBlLm5vcm1hbGl6ZT1mdW5jdGlvbigpe2lmKHRoaXMuek9uZSlyZXR1'@;
put 'cm4gdGhpczt2YXIgej10aGlzLnoucmVkSW52bSgpO3JldHVybiB0aGlzLng9dGhpcy54LnJlZE11bCh6KSx0aGlzLnk9dGhpcy55LnJlZE11bCh6KSx0aGlzLnQmJih0aGlzLnQ9dGhpcy50LnJlZE11bCh6KSksdGhpcy56PXRoaXMuY3VydmUub25lLHRoaXMuek9uZT0hMCx0aGlzfSxGLnBy'@;
put 'b3RvdHlwZS5uZWc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludCh0aGlzLngucmVkTmVnKCksdGhpcy55LHRoaXMueix0aGlzLnQmJnRoaXMudC5yZWROZWcoKSl9LEYucHJvdG90eXBlLmdldFg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ub3JtYWxpemUoKSx0aGlzLnguZnJv'@;
put 'bVJlZCgpfSxGLnByb3RvdHlwZS5nZXRZPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubm9ybWFsaXplKCksdGhpcy55LmZyb21SZWQoKX0sRi5wcm90b3R5cGUuZXE9ZnVuY3Rpb24oeil7cmV0dXJuIHRoaXM9PT16fHwwPT09dGhpcy5nZXRYKCkuY21wKHouZ2V0WCgpKSYmMD09PXRoaXMuZ2V0'@;
put 'WSgpLmNtcCh6LmdldFkoKSl9LEYucHJvdG90eXBlLmVxWFRvUD1mdW5jdGlvbih6KXt2YXIgTj16LnRvUmVkKHRoaXMuY3VydmUucmVkKS5yZWRNdWwodGhpcy56KTtpZigwPT09dGhpcy54LmNtcChOKSlyZXR1cm4hMDtmb3IodmFyIEw9ei5jbG9uZSgpLEs9dGhpcy5jdXJ2ZS5yZWROLnJl'@;
put 'ZE11bCh0aGlzLnopOzspe2lmKEwuaWFkZCh0aGlzLmN1cnZlLm4pLEwuY21wKHRoaXMuY3VydmUucCk+PTApcmV0dXJuITE7aWYoTi5yZWRJQWRkKEspLDA9PT10aGlzLnguY21wKE4pKXJldHVybiEwfX0sRi5wcm90b3R5cGUudG9QPUYucHJvdG90eXBlLm5vcm1hbGl6ZSxGLnByb3RvdHlw'@;
put 'ZS5taXhlZEFkZD1GLnByb3RvdHlwZS5hZGR9LDgyNTQ6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9WDtJLmJhc2U9eSg0OTE4KSxJLnNob3J0PXkoNjY3MyksSS5tb250PXkoMjg4MSksSS5lZHdhcmRzPXkoMTEzOCl9LDI4ODE6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9'@;
put 'eSgzNzg1KSxfPXkoNTcxNyksZz15KDQ5MTgpLEI9eSg5NTMpO2Z1bmN0aW9uIHcoRil7Zy5jYWxsKHRoaXMsIm1vbnQiLEYpLHRoaXMuYT1uZXcgSShGLmEsMTYpLnRvUmVkKHRoaXMucmVkKSx0aGlzLmI9bmV3IEkoRi5iLDE2KS50b1JlZCh0aGlzLnJlZCksdGhpcy5pND1uZXcgSSg0KS50'@;
put 'b1JlZCh0aGlzLnJlZCkucmVkSW52bSgpLHRoaXMudHdvPW5ldyBJKDIpLnRvUmVkKHRoaXMucmVkKSx0aGlzLmEyND10aGlzLmk0LnJlZE11bCh0aGlzLmEucmVkQWRkKHRoaXMudHdvKSl9ZnVuY3Rpb24gUChGLE8seil7Zy5CYXNlUG9pbnQuY2FsbCh0aGlzLEYsInByb2plY3RpdmUiKSxu'@;
put 'dWxsPT09TyYmbnVsbD09PXo/KHRoaXMueD10aGlzLmN1cnZlLm9uZSx0aGlzLno9dGhpcy5jdXJ2ZS56ZXJvKToodGhpcy54PW5ldyBJKE8sMTYpLHRoaXMuej1uZXcgSSh6LDE2KSx0aGlzLngucmVkfHwodGhpcy54PXRoaXMueC50b1JlZCh0aGlzLmN1cnZlLnJlZCkpLHRoaXMuei5yZWR8'@;
put 'fCh0aGlzLno9dGhpcy56LnRvUmVkKHRoaXMuY3VydmUucmVkKSkpfV8odyxnKSx1ZS5leHBvcnRzPXcsdy5wcm90b3R5cGUudmFsaWRhdGU9ZnVuY3Rpb24oTyl7dmFyIHo9Ty5ub3JtYWxpemUoKS54LE49ei5yZWRTcXIoKSxMPU4ucmVkTXVsKHopLnJlZEFkZChOLnJlZE11bCh0aGlzLmEp'@;
put 'KS5yZWRBZGQoeik7cmV0dXJuIDA9PT1MLnJlZFNxcnQoKS5yZWRTcXIoKS5jbXAoTCl9LF8oUCxnLkJhc2VQb2ludCksdy5wcm90b3R5cGUuZGVjb2RlUG9pbnQ9ZnVuY3Rpb24oTyx6KXtyZXR1cm4gdGhpcy5wb2ludChCLnRvQXJyYXkoTyx6KSwxKX0sdy5wcm90b3R5cGUucG9pbnQ9ZnVu'@;
put 'Y3Rpb24oTyx6KXtyZXR1cm4gbmV3IFAodGhpcyxPLHopfSx3LnByb3RvdHlwZS5wb2ludEZyb21KU09OPWZ1bmN0aW9uKE8pe3JldHVybiBQLmZyb21KU09OKHRoaXMsTyl9LFAucHJvdG90eXBlLnByZWNvbXB1dGU9ZnVuY3Rpb24oKXt9LFAucHJvdG90eXBlLl9lbmNvZGU9ZnVuY3Rpb24o'@;
put 'KXtyZXR1cm4gdGhpcy5nZXRYKCkudG9BcnJheSgiYmUiLHRoaXMuY3VydmUucC5ieXRlTGVuZ3RoKCkpfSxQLmZyb21KU09OPWZ1bmN0aW9uKE8seil7cmV0dXJuIG5ldyBQKE8selswXSx6WzFdfHxPLm9uZSl9LFAucHJvdG90eXBlLmluc3BlY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5p'@;
put 'c0luZmluaXR5KCk/IjxFQyBQb2ludCBJbmZpbml0eT4iOiI8RUMgUG9pbnQgeDogIit0aGlzLnguZnJvbVJlZCgpLnRvU3RyaW5nKDE2LDIpKyIgejogIit0aGlzLnouZnJvbVJlZCgpLnRvU3RyaW5nKDE2LDIpKyI+In0sUC5wcm90b3R5cGUuaXNJbmZpbml0eT1mdW5jdGlvbigpe3JldHVy'@;
put 'biAwPT09dGhpcy56LmNtcG4oMCl9LFAucHJvdG90eXBlLmRibD1mdW5jdGlvbigpe3ZhciB6PXRoaXMueC5yZWRBZGQodGhpcy56KS5yZWRTcXIoKSxMPXRoaXMueC5yZWRTdWIodGhpcy56KS5yZWRTcXIoKSxLPXoucmVkU3ViKEwpLFU9ei5yZWRNdWwoTCksVz1LLnJlZE11bChMLnJlZEFk'@;
put 'ZCh0aGlzLmN1cnZlLmEyNC5yZWRNdWwoSykpKTtyZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludChVLFcpfSxQLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoIk5vdCBzdXBwb3J0ZWQgb24gTW9udGdvbWVyeSBjdXJ2ZSIpfSxQLnByb3RvdHlwZS5kaWZmQWRkPWZ1bmN0'@;
put 'aW9uKE8seil7dmFyIE49dGhpcy54LnJlZEFkZCh0aGlzLnopLEw9dGhpcy54LnJlZFN1Yih0aGlzLnopLEs9Ty54LnJlZEFkZChPLnopLFc9Ty54LnJlZFN1YihPLnopLnJlZE11bChOKSxZPUsucmVkTXVsKEwpLHE9ei56LnJlZE11bChXLnJlZEFkZChZKS5yZWRTcXIoKSksZWU9ei54LnJl'@;
put 'ZE11bChXLnJlZElTdWIoWSkucmVkU3FyKCkpO3JldHVybiB0aGlzLmN1cnZlLnBvaW50KHEsZWUpfSxQLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24oTyl7Zm9yKHZhciB6PU8uY2xvbmUoKSxOPXRoaXMsTD10aGlzLmN1cnZlLnBvaW50KG51bGwsbnVsbCksVT1bXTswIT09ei5jbXBuKDApO3ou'@;
put 'aXVzaHJuKDEpKVUucHVzaCh6LmFuZGxuKDEpKTtmb3IodmFyIFc9VS5sZW5ndGgtMTtXPj0wO1ctLSkwPT09VVtXXT8oTj1OLmRpZmZBZGQoTCx0aGlzKSxMPUwuZGJsKCkpOihMPU4uZGlmZkFkZChMLHRoaXMpLE49Ti5kYmwoKSk7cmV0dXJuIEx9LFAucHJvdG90eXBlLm11bEFkZD1mdW5j'@;
put 'dGlvbigpe3Rocm93IG5ldyBFcnJvcigiTm90IHN1cHBvcnRlZCBvbiBNb250Z29tZXJ5IGN1cnZlIil9LFAucHJvdG90eXBlLmp1bWxBZGQ9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoIk5vdCBzdXBwb3J0ZWQgb24gTW9udGdvbWVyeSBjdXJ2ZSIpfSxQLnByb3RvdHlwZS5lcT1mdW5j'@;
put 'dGlvbihPKXtyZXR1cm4gMD09PXRoaXMuZ2V0WCgpLmNtcChPLmdldFgoKSl9LFAucHJvdG90eXBlLm5vcm1hbGl6ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLng9dGhpcy54LnJlZE11bCh0aGlzLnoucmVkSW52bSgpKSx0aGlzLno9dGhpcy5jdXJ2ZS5vbmUsdGhpc30sUC5wcm90b3R5cGUu'@;
put 'Z2V0WD1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5vcm1hbGl6ZSgpLHRoaXMueC5mcm9tUmVkKCl9fSw2NjczOih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoOTUzKSxfPXkoMzc4NSksZz15KDU3MTcpLEI9eSg0OTE4KSx3PUkuYXNzZXJ0O2Z1bmN0aW9uIFAoeil7Qi5jYWxsKHRo'@;
put 'aXMsInNob3J0Iix6KSx0aGlzLmE9bmV3IF8oei5hLDE2KS50b1JlZCh0aGlzLnJlZCksdGhpcy5iPW5ldyBfKHouYiwxNikudG9SZWQodGhpcy5yZWQpLHRoaXMudGludj10aGlzLnR3by5yZWRJbnZtKCksdGhpcy56ZXJvQT0wPT09dGhpcy5hLmZyb21SZWQoKS5jbXBuKDApLHRoaXMudGhy'@;
put 'ZWVBPTA9PT10aGlzLmEuZnJvbVJlZCgpLnN1Yih0aGlzLnApLmNtcG4oLTMpLHRoaXMuZW5kbz10aGlzLl9nZXRFbmRvbW9ycGhpc20oeiksdGhpcy5fZW5kb1duYWZUMT1uZXcgQXJyYXkoNCksdGhpcy5fZW5kb1duYWZUMj1uZXcgQXJyYXkoNCl9ZnVuY3Rpb24gRih6LE4sTCxLKXtCLkJh'@;
put 'c2VQb2ludC5jYWxsKHRoaXMseiwiYWZmaW5lIiksbnVsbD09PU4mJm51bGw9PT1MPyh0aGlzLng9bnVsbCx0aGlzLnk9bnVsbCx0aGlzLmluZj0hMCk6KHRoaXMueD1uZXcgXyhOLDE2KSx0aGlzLnk9bmV3IF8oTCwxNiksSyYmKHRoaXMueC5mb3JjZVJlZCh0aGlzLmN1cnZlLnJlZCksdGhp'@;
put 'cy55LmZvcmNlUmVkKHRoaXMuY3VydmUucmVkKSksdGhpcy54LnJlZHx8KHRoaXMueD10aGlzLngudG9SZWQodGhpcy5jdXJ2ZS5yZWQpKSx0aGlzLnkucmVkfHwodGhpcy55PXRoaXMueS50b1JlZCh0aGlzLmN1cnZlLnJlZCkpLHRoaXMuaW5mPSExKX1mdW5jdGlvbiBPKHosTixMLEspe0Iu'@;
put 'QmFzZVBvaW50LmNhbGwodGhpcyx6LCJqYWNvYmlhbiIpLG51bGw9PT1OJiZudWxsPT09TCYmbnVsbD09PUs/KHRoaXMueD10aGlzLmN1cnZlLm9uZSx0aGlzLnk9dGhpcy5jdXJ2ZS5vbmUsdGhpcy56PW5ldyBfKDApKToodGhpcy54PW5ldyBfKE4sMTYpLHRoaXMueT1uZXcgXyhMLDE2KSx0'@;
put 'aGlzLno9bmV3IF8oSywxNikpLHRoaXMueC5yZWR8fCh0aGlzLng9dGhpcy54LnRvUmVkKHRoaXMuY3VydmUucmVkKSksdGhpcy55LnJlZHx8KHRoaXMueT10aGlzLnkudG9SZWQodGhpcy5jdXJ2ZS5yZWQpKSx0aGlzLnoucmVkfHwodGhpcy56PXRoaXMuei50b1JlZCh0aGlzLmN1cnZlLnJl'@;
put 'ZCkpLHRoaXMuek9uZT10aGlzLno9PT10aGlzLmN1cnZlLm9uZX1nKFAsQiksdWUuZXhwb3J0cz1QLFAucHJvdG90eXBlLl9nZXRFbmRvbW9ycGhpc209ZnVuY3Rpb24oTil7aWYodGhpcy56ZXJvQSYmdGhpcy5nJiZ0aGlzLm4mJjE9PT10aGlzLnAubW9kbigzKSl7dmFyIEwsSztpZihOLmJl'@;
put 'dGEpTD1uZXcgXyhOLmJldGEsMTYpLnRvUmVkKHRoaXMucmVkKTtlbHNle3ZhciBVPXRoaXMuX2dldEVuZG9Sb290cyh0aGlzLnApO0w9KEw9VVswXS5jbXAoVVsxXSk8MD9VWzBdOlVbMV0pLnRvUmVkKHRoaXMucmVkKX1pZihOLmxhbWJkYSlLPW5ldyBfKE4ubGFtYmRhLDE2KTtlbHNle3Zh'@;
put 'ciBXPXRoaXMuX2dldEVuZG9Sb290cyh0aGlzLm4pOzA9PT10aGlzLmcubXVsKFdbMF0pLnguY21wKHRoaXMuZy54LnJlZE11bChMKSk/Sz1XWzBdOncoMD09PXRoaXMuZy5tdWwoSz1XWzFdKS54LmNtcCh0aGlzLmcueC5yZWRNdWwoTCkpKX1yZXR1cm57YmV0YTpMLGxhbWJkYTpLLGJhc2lz'@;
put 'Ok4uYmFzaXM/Ti5iYXNpcy5tYXAoZnVuY3Rpb24ocSl7cmV0dXJue2E6bmV3IF8ocS5hLDE2KSxiOm5ldyBfKHEuYiwxNil9fSk6dGhpcy5fZ2V0RW5kb0Jhc2lzKEspfX19LFAucHJvdG90eXBlLl9nZXRFbmRvUm9vdHM9ZnVuY3Rpb24oTil7dmFyIEw9Tj09PXRoaXMucD90aGlzLnJlZDpf'@;
put 'Lm1vbnQoTiksSz1uZXcgXygyKS50b1JlZChMKS5yZWRJbnZtKCksVT1LLnJlZE5lZygpLFc9bmV3IF8oMykudG9SZWQoTCkucmVkTmVnKCkucmVkU3FydCgpLnJlZE11bChLKTtyZXR1cm5bVS5yZWRBZGQoVykuZnJvbVJlZCgpLFUucmVkU3ViKFcpLmZyb21SZWQoKV19LFAucHJvdG90eXBl'@;
put 'Ll9nZXRFbmRvQmFzaXM9ZnVuY3Rpb24oTil7Zm9yKHZhciBKLG5lLGllLGxlLG1lLF9lLFRlLGplLFYsTD10aGlzLm4udXNocm4oTWF0aC5mbG9vcih0aGlzLm4uYml0TGVuZ3RoKCkvMikpLEs9TixVPXRoaXMubi5jbG9uZSgpLFc9bmV3IF8oMSksWT1uZXcgXygwKSxxPW5ldyBfKDApLGVl'@;
put 'PW5ldyBfKDEpLFNlPTA7MCE9PUsuY21wbigwKTspe3ZhciBwPVUuZGl2KEspO2plPVUuc3ViKHAubXVsKEspKSxWPXEuc3ViKHAubXVsKFcpKTt2YXIgYj1lZS5zdWIocC5tdWwoWSkpO2lmKCFpZSYmamUuY21wKEwpPDApSj1UZS5uZWcoKSxuZT1XLGllPWplLm5lZygpLGxlPVY7ZWxzZSBp'@;
put 'ZihpZSYmMj09KytTZSlicmVhaztUZT1qZSxVPUssSz1qZSxxPVcsVz1WLGVlPVksWT1ifW1lPWplLm5lZygpLF9lPVY7dmFyIHg9aWUuc3FyKCkuYWRkKGxlLnNxcigpKTtyZXR1cm4gbWUuc3FyKCkuYWRkKF9lLnNxcigpKS5jbXAoeCk+PTAmJihtZT1KLF9lPW5lKSxpZS5uZWdhdGl2ZSYm'@;
put 'KGllPWllLm5lZygpLGxlPWxlLm5lZygpKSxtZS5uZWdhdGl2ZSYmKG1lPW1lLm5lZygpLF9lPV9lLm5lZygpKSxbe2E6aWUsYjpsZX0se2E6bWUsYjpfZX1dfSxQLnByb3RvdHlwZS5fZW5kb1NwbGl0PWZ1bmN0aW9uKE4pe3ZhciBMPXRoaXMuZW5kby5iYXNpcyxLPUxbMF0sVT1MWzFdLFc9'@;
put 'VS5iLm11bChOKS5kaXZSb3VuZCh0aGlzLm4pLFk9Sy5iLm5lZygpLm11bChOKS5kaXZSb3VuZCh0aGlzLm4pLHE9Vy5tdWwoSy5hKSxlZT1ZLm11bChVLmEpLEo9Vy5tdWwoSy5iKSxuZT1ZLm11bChVLmIpO3JldHVybntrMTpOLnN1YihxKS5zdWIoZWUpLGsyOkouYWRkKG5lKS5uZWcoKX19'@;
put 'LFAucHJvdG90eXBlLnBvaW50RnJvbVg9ZnVuY3Rpb24oTixMKXsoTj1uZXcgXyhOLDE2KSkucmVkfHwoTj1OLnRvUmVkKHRoaXMucmVkKSk7dmFyIEs9Ti5yZWRTcXIoKS5yZWRNdWwoTikucmVkSUFkZChOLnJlZE11bCh0aGlzLmEpKS5yZWRJQWRkKHRoaXMuYiksVT1LLnJlZFNxcnQoKTtp'@;
put 'ZigwIT09VS5yZWRTcXIoKS5yZWRTdWIoSykuY21wKHRoaXMuemVybykpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIHBvaW50Iik7dmFyIFc9VS5mcm9tUmVkKCkuaXNPZGQoKTtyZXR1cm4oTCYmIVd8fCFMJiZXKSYmKFU9VS5yZWROZWcoKSksdGhpcy5wb2ludChOLFUpfSxQLnByb3RvdHlw'@;
put 'ZS52YWxpZGF0ZT1mdW5jdGlvbihOKXtpZihOLmluZilyZXR1cm4hMDt2YXIgTD1OLngsSz1OLnksVT10aGlzLmEucmVkTXVsKEwpLFc9TC5yZWRTcXIoKS5yZWRNdWwoTCkucmVkSUFkZChVKS5yZWRJQWRkKHRoaXMuYik7cmV0dXJuIDA9PT1LLnJlZFNxcigpLnJlZElTdWIoVykuY21wbigw'@;
put 'KX0sUC5wcm90b3R5cGUuX2VuZG9XbmFmTXVsQWRkPWZ1bmN0aW9uKE4sTCxLKXtmb3IodmFyIFU9dGhpcy5fZW5kb1duYWZUMSxXPXRoaXMuX2VuZG9XbmFmVDIsWT0wO1k8Ti5sZW5ndGg7WSsrKXt2YXIgcT10aGlzLl9lbmRvU3BsaXQoTFtZXSksZWU9TltZXSxKPWVlLl9nZXRCZXRhKCk7'@;
put 'cS5rMS5uZWdhdGl2ZSYmKHEuazEuaW5lZygpLGVlPWVlLm5lZyghMCkpLHEuazIubmVnYXRpdmUmJihxLmsyLmluZWcoKSxKPUoubmVnKCEwKSksVVsyKlldPWVlLFVbMipZKzFdPUosV1syKlldPXEuazEsV1syKlkrMV09cS5rMn1mb3IodmFyIG5lPXRoaXMuX3duYWZNdWxBZGQoMSxVLFcs'@;
put 'MipZLEspLGllPTA7aWU8MipZO2llKyspVVtpZV09bnVsbCxXW2llXT1udWxsO3JldHVybiBuZX0sZyhGLEIuQmFzZVBvaW50KSxQLnByb3RvdHlwZS5wb2ludD1mdW5jdGlvbihOLEwsSyl7cmV0dXJuIG5ldyBGKHRoaXMsTixMLEspfSxQLnByb3RvdHlwZS5wb2ludEZyb21KU09OPWZ1bmN0'@;
put 'aW9uKE4sTCl7cmV0dXJuIEYuZnJvbUpTT04odGhpcyxOLEwpfSxGLnByb3RvdHlwZS5fZ2V0QmV0YT1mdW5jdGlvbigpe2lmKHRoaXMuY3VydmUuZW5kbyl7dmFyIE49dGhpcy5wcmVjb21wdXRlZDtpZihOJiZOLmJldGEpcmV0dXJuIE4uYmV0YTt2YXIgTD10aGlzLmN1cnZlLnBvaW50KHRo'@;
put 'aXMueC5yZWRNdWwodGhpcy5jdXJ2ZS5lbmRvLmJldGEpLHRoaXMueSk7aWYoTil7dmFyIEs9dGhpcy5jdXJ2ZSxVPWZ1bmN0aW9uKFcpe3JldHVybiBLLnBvaW50KFcueC5yZWRNdWwoSy5lbmRvLmJldGEpLFcueSl9O04uYmV0YT1MLEwucHJlY29tcHV0ZWQ9e2JldGE6bnVsbCxuYWY6Ti5u'@;
put 'YWYmJnt3bmQ6Ti5uYWYud25kLHBvaW50czpOLm5hZi5wb2ludHMubWFwKFUpfSxkb3VibGVzOk4uZG91YmxlcyYme3N0ZXA6Ti5kb3VibGVzLnN0ZXAscG9pbnRzOk4uZG91Ymxlcy5wb2ludHMubWFwKFUpfX19cmV0dXJuIEx9fSxGLnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1'@;
put 'cm4gdGhpcy5wcmVjb21wdXRlZD9bdGhpcy54LHRoaXMueSx0aGlzLnByZWNvbXB1dGVkJiZ7ZG91Ymxlczp0aGlzLnByZWNvbXB1dGVkLmRvdWJsZXMmJntzdGVwOnRoaXMucHJlY29tcHV0ZWQuZG91Ymxlcy5zdGVwLHBvaW50czp0aGlzLnByZWNvbXB1dGVkLmRvdWJsZXMucG9pbnRzLnNs'@;
put 'aWNlKDEpfSxuYWY6dGhpcy5wcmVjb21wdXRlZC5uYWYmJnt3bmQ6dGhpcy5wcmVjb21wdXRlZC5uYWYud25kLHBvaW50czp0aGlzLnByZWNvbXB1dGVkLm5hZi5wb2ludHMuc2xpY2UoMSl9fV06W3RoaXMueCx0aGlzLnldfSxGLmZyb21KU09OPWZ1bmN0aW9uKE4sTCxLKXsic3RyaW5nIj09'@;
put 'dHlwZW9mIEwmJihMPUpTT04ucGFyc2UoTCkpO3ZhciBVPU4ucG9pbnQoTFswXSxMWzFdLEspO2lmKCFMWzJdKXJldHVybiBVO2Z1bmN0aW9uIFcocSl7cmV0dXJuIE4ucG9pbnQocVswXSxxWzFdLEspfXZhciBZPUxbMl07cmV0dXJuIFUucHJlY29tcHV0ZWQ9e2JldGE6bnVsbCxkb3VibGVz'@;
put 'OlkuZG91YmxlcyYme3N0ZXA6WS5kb3VibGVzLnN0ZXAscG9pbnRzOltVXS5jb25jYXQoWS5kb3VibGVzLnBvaW50cy5tYXAoVykpfSxuYWY6WS5uYWYmJnt3bmQ6WS5uYWYud25kLHBvaW50czpbVV0uY29uY2F0KFkubmFmLnBvaW50cy5tYXAoVykpfX0sVX0sRi5wcm90b3R5cGUuaW5zcGVj'@;
put 'dD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzSW5maW5pdHkoKT8iPEVDIFBvaW50IEluZmluaXR5PiI6IjxFQyBQb2ludCB4OiAiK3RoaXMueC5mcm9tUmVkKCkudG9TdHJpbmcoMTYsMikrIiB5OiAiK3RoaXMueS5mcm9tUmVkKCkudG9TdHJpbmcoMTYsMikrIj4ifSxGLnByb3RvdHlwZS5p'@;
put 'c0luZmluaXR5PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW5mfSxGLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oTil7aWYodGhpcy5pbmYpcmV0dXJuIE47aWYoTi5pbmYpcmV0dXJuIHRoaXM7aWYodGhpcy5lcShOKSlyZXR1cm4gdGhpcy5kYmwoKTtpZih0aGlzLm5lZygpLmVxKE4pKXJldHVy'@;
put 'biB0aGlzLmN1cnZlLnBvaW50KG51bGwsbnVsbCk7aWYoMD09PXRoaXMueC5jbXAoTi54KSlyZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludChudWxsLG51bGwpO3ZhciBMPXRoaXMueS5yZWRTdWIoTi55KTswIT09TC5jbXBuKDApJiYoTD1MLnJlZE11bCh0aGlzLngucmVkU3ViKE4ueCkucmVkSW52'@;
put 'bSgpKSk7dmFyIEs9TC5yZWRTcXIoKS5yZWRJU3ViKHRoaXMueCkucmVkSVN1YihOLngpLFU9TC5yZWRNdWwodGhpcy54LnJlZFN1YihLKSkucmVkSVN1Yih0aGlzLnkpO3JldHVybiB0aGlzLmN1cnZlLnBvaW50KEssVSl9LEYucHJvdG90eXBlLmRibD1mdW5jdGlvbigpe2lmKHRoaXMuaW5m'@;
put 'KXJldHVybiB0aGlzO3ZhciBOPXRoaXMueS5yZWRBZGQodGhpcy55KTtpZigwPT09Ti5jbXBuKDApKXJldHVybiB0aGlzLmN1cnZlLnBvaW50KG51bGwsbnVsbCk7dmFyIEw9dGhpcy5jdXJ2ZS5hLEs9dGhpcy54LnJlZFNxcigpLFU9Ti5yZWRJbnZtKCksVz1LLnJlZEFkZChLKS5yZWRJQWRk'@;
put 'KEspLnJlZElBZGQoTCkucmVkTXVsKFUpLFk9Vy5yZWRTcXIoKS5yZWRJU3ViKHRoaXMueC5yZWRBZGQodGhpcy54KSkscT1XLnJlZE11bCh0aGlzLngucmVkU3ViKFkpKS5yZWRJU3ViKHRoaXMueSk7cmV0dXJuIHRoaXMuY3VydmUucG9pbnQoWSxxKX0sRi5wcm90b3R5cGUuZ2V0WD1mdW5j'@;
put 'dGlvbigpe3JldHVybiB0aGlzLnguZnJvbVJlZCgpfSxGLnByb3RvdHlwZS5nZXRZPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMueS5mcm9tUmVkKCl9LEYucHJvdG90eXBlLm11bD1mdW5jdGlvbihOKXtyZXR1cm4gTj1uZXcgXyhOLDE2KSx0aGlzLmlzSW5maW5pdHkoKT90aGlzOnRoaXMuX2hh'@;
put 'c0RvdWJsZXMoTik/dGhpcy5jdXJ2ZS5fZml4ZWROYWZNdWwodGhpcyxOKTp0aGlzLmN1cnZlLmVuZG8/dGhpcy5jdXJ2ZS5fZW5kb1duYWZNdWxBZGQoW3RoaXNdLFtOXSk6dGhpcy5jdXJ2ZS5fd25hZk11bCh0aGlzLE4pfSxGLnByb3RvdHlwZS5tdWxBZGQ9ZnVuY3Rpb24oTixMLEspe3Zh'@;
put 'ciBVPVt0aGlzLExdLFc9W04sS107cmV0dXJuIHRoaXMuY3VydmUuZW5kbz90aGlzLmN1cnZlLl9lbmRvV25hZk11bEFkZChVLFcpOnRoaXMuY3VydmUuX3duYWZNdWxBZGQoMSxVLFcsMil9LEYucHJvdG90eXBlLmptdWxBZGQ9ZnVuY3Rpb24oTixMLEspe3ZhciBVPVt0aGlzLExdLFc9W04s'@;
put 'S107cmV0dXJuIHRoaXMuY3VydmUuZW5kbz90aGlzLmN1cnZlLl9lbmRvV25hZk11bEFkZChVLFcsITApOnRoaXMuY3VydmUuX3duYWZNdWxBZGQoMSxVLFcsMiwhMCl9LEYucHJvdG90eXBlLmVxPWZ1bmN0aW9uKE4pe3JldHVybiB0aGlzPT09Tnx8dGhpcy5pbmY9PT1OLmluZiYmKHRoaXMu'@;
put 'aW5mfHwwPT09dGhpcy54LmNtcChOLngpJiYwPT09dGhpcy55LmNtcChOLnkpKX0sRi5wcm90b3R5cGUubmVnPWZ1bmN0aW9uKE4pe2lmKHRoaXMuaW5mKXJldHVybiB0aGlzO3ZhciBMPXRoaXMuY3VydmUucG9pbnQodGhpcy54LHRoaXMueS5yZWROZWcoKSk7aWYoTiYmdGhpcy5wcmVjb21w'@;
put 'dXRlZCl7dmFyIEs9dGhpcy5wcmVjb21wdXRlZCxVPWZ1bmN0aW9uKFcpe3JldHVybiBXLm5lZygpfTtMLnByZWNvbXB1dGVkPXtuYWY6Sy5uYWYmJnt3bmQ6Sy5uYWYud25kLHBvaW50czpLLm5hZi5wb2ludHMubWFwKFUpfSxkb3VibGVzOksuZG91YmxlcyYme3N0ZXA6Sy5kb3VibGVzLnN0'@;
put 'ZXAscG9pbnRzOksuZG91Ymxlcy5wb2ludHMubWFwKFUpfX19cmV0dXJuIEx9LEYucHJvdG90eXBlLnRvSj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmluZj90aGlzLmN1cnZlLmpwb2ludChudWxsLG51bGwsbnVsbCk6dGhpcy5jdXJ2ZS5qcG9pbnQodGhpcy54LHRoaXMueSx0aGlzLmN1cnZl'@;
put 'Lm9uZSl9LGcoTyxCLkJhc2VQb2ludCksUC5wcm90b3R5cGUuanBvaW50PWZ1bmN0aW9uKE4sTCxLKXtyZXR1cm4gbmV3IE8odGhpcyxOLEwsSyl9LE8ucHJvdG90eXBlLnRvUD1mdW5jdGlvbigpe2lmKHRoaXMuaXNJbmZpbml0eSgpKXJldHVybiB0aGlzLmN1cnZlLnBvaW50KG51bGwsbnVs'@;
put 'bCk7dmFyIE49dGhpcy56LnJlZEludm0oKSxMPU4ucmVkU3FyKCksSz10aGlzLngucmVkTXVsKEwpLFU9dGhpcy55LnJlZE11bChMKS5yZWRNdWwoTik7cmV0dXJuIHRoaXMuY3VydmUucG9pbnQoSyxVKX0sTy5wcm90b3R5cGUubmVnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY3VydmUuanBv'@;
put 'aW50KHRoaXMueCx0aGlzLnkucmVkTmVnKCksdGhpcy56KX0sTy5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKE4pe2lmKHRoaXMuaXNJbmZpbml0eSgpKXJldHVybiBOO2lmKE4uaXNJbmZpbml0eSgpKXJldHVybiB0aGlzO3ZhciBMPU4uei5yZWRTcXIoKSxLPXRoaXMuei5yZWRTcXIoKSxVPXRo'@;
put 'aXMueC5yZWRNdWwoTCksVz1OLngucmVkTXVsKEspLFk9dGhpcy55LnJlZE11bChMLnJlZE11bChOLnopKSxxPU4ueS5yZWRNdWwoSy5yZWRNdWwodGhpcy56KSksZWU9VS5yZWRTdWIoVyksSj1ZLnJlZFN1YihxKTtpZigwPT09ZWUuY21wbigwKSlyZXR1cm4gMCE9PUouY21wbigwKT90aGlz'@;
put 'LmN1cnZlLmpwb2ludChudWxsLG51bGwsbnVsbCk6dGhpcy5kYmwoKTt2YXIgbmU9ZWUucmVkU3FyKCksaWU9bmUucmVkTXVsKGVlKSxsZT1VLnJlZE11bChuZSksbWU9Si5yZWRTcXIoKS5yZWRJQWRkKGllKS5yZWRJU3ViKGxlKS5yZWRJU3ViKGxlKSxfZT1KLnJlZE11bChsZS5yZWRJU3Vi'@;
put 'KG1lKSkucmVkSVN1YihZLnJlZE11bChpZSkpLFRlPXRoaXMuei5yZWRNdWwoTi56KS5yZWRNdWwoZWUpO3JldHVybiB0aGlzLmN1cnZlLmpwb2ludChtZSxfZSxUZSl9LE8ucHJvdG90eXBlLm1peGVkQWRkPWZ1bmN0aW9uKE4pe2lmKHRoaXMuaXNJbmZpbml0eSgpKXJldHVybiBOLnRvSigp'@;
put 'O2lmKE4uaXNJbmZpbml0eSgpKXJldHVybiB0aGlzO3ZhciBMPXRoaXMuei5yZWRTcXIoKSxLPXRoaXMueCxVPU4ueC5yZWRNdWwoTCksVz10aGlzLnksWT1OLnkucmVkTXVsKEwpLnJlZE11bCh0aGlzLnopLHE9Sy5yZWRTdWIoVSksZWU9Vy5yZWRTdWIoWSk7aWYoMD09PXEuY21wbigwKSly'@;
put 'ZXR1cm4gMCE9PWVlLmNtcG4oMCk/dGhpcy5jdXJ2ZS5qcG9pbnQobnVsbCxudWxsLG51bGwpOnRoaXMuZGJsKCk7dmFyIEo9cS5yZWRTcXIoKSxuZT1KLnJlZE11bChxKSxpZT1LLnJlZE11bChKKSxsZT1lZS5yZWRTcXIoKS5yZWRJQWRkKG5lKS5yZWRJU3ViKGllKS5yZWRJU3ViKGllKSxt'@;
put 'ZT1lZS5yZWRNdWwoaWUucmVkSVN1YihsZSkpLnJlZElTdWIoVy5yZWRNdWwobmUpKSxfZT10aGlzLnoucmVkTXVsKHEpO3JldHVybiB0aGlzLmN1cnZlLmpwb2ludChsZSxtZSxfZSl9LE8ucHJvdG90eXBlLmRibHA9ZnVuY3Rpb24oTil7aWYoMD09PU4pcmV0dXJuIHRoaXM7aWYodGhpcy5p'@;
put 'c0luZmluaXR5KCkpcmV0dXJuIHRoaXM7aWYoIU4pcmV0dXJuIHRoaXMuZGJsKCk7dmFyIEw7aWYodGhpcy5jdXJ2ZS56ZXJvQXx8dGhpcy5jdXJ2ZS50aHJlZUEpe3ZhciBLPXRoaXM7Zm9yKEw9MDtMPE47TCsrKUs9Sy5kYmwoKTtyZXR1cm4gS312YXIgVT10aGlzLmN1cnZlLmEsVz10aGlz'@;
put 'LmN1cnZlLnRpbnYsWT10aGlzLngscT10aGlzLnksZWU9dGhpcy56LEo9ZWUucmVkU3FyKCkucmVkU3FyKCksbmU9cS5yZWRBZGQocSk7Zm9yKEw9MDtMPE47TCsrKXt2YXIgaWU9WS5yZWRTcXIoKSxsZT1uZS5yZWRTcXIoKSxtZT1sZS5yZWRTcXIoKSxfZT1pZS5yZWRBZGQoaWUpLnJlZElB'@;
put 'ZGQoaWUpLnJlZElBZGQoVS5yZWRNdWwoSikpLFRlPVkucmVkTXVsKGxlKSxTZT1fZS5yZWRTcXIoKS5yZWRJU3ViKFRlLnJlZEFkZChUZSkpLGplPVRlLnJlZElTdWIoU2UpLFY9X2UucmVkTXVsKGplKTtWPVYucmVkSUFkZChWKS5yZWRJU3ViKG1lKTt2YXIgcD1uZS5yZWRNdWwoZWUpO0wr'@;
put 'MTxOJiYoSj1KLnJlZE11bChtZSkpLFk9U2UsZWU9cCxuZT1WfXJldHVybiB0aGlzLmN1cnZlLmpwb2ludChZLG5lLnJlZE11bChXKSxlZSl9LE8ucHJvdG90eXBlLmRibD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzSW5maW5pdHkoKT90aGlzOnRoaXMuY3VydmUuemVyb0E/dGhpcy5femVy'@;
put 'b0RibCgpOnRoaXMuY3VydmUudGhyZWVBP3RoaXMuX3RocmVlRGJsKCk6dGhpcy5fZGJsKCl9LE8ucHJvdG90eXBlLl96ZXJvRGJsPWZ1bmN0aW9uKCl7dmFyIE4sTCxLO2lmKHRoaXMuek9uZSl7dmFyIFU9dGhpcy54LnJlZFNxcigpLFc9dGhpcy55LnJlZFNxcigpLFk9Vy5yZWRTcXIoKSxx'@;
put 'PXRoaXMueC5yZWRBZGQoVykucmVkU3FyKCkucmVkSVN1YihVKS5yZWRJU3ViKFkpO3E9cS5yZWRJQWRkKHEpO3ZhciBlZT1VLnJlZEFkZChVKS5yZWRJQWRkKFUpLEo9ZWUucmVkU3FyKCkucmVkSVN1YihxKS5yZWRJU3ViKHEpLG5lPVkucmVkSUFkZChZKTtuZT0obmU9bmUucmVkSUFkZChu'@;
put 'ZSkpLnJlZElBZGQobmUpLE49SixMPWVlLnJlZE11bChxLnJlZElTdWIoSikpLnJlZElTdWIobmUpLEs9dGhpcy55LnJlZEFkZCh0aGlzLnkpfWVsc2V7dmFyIGllPXRoaXMueC5yZWRTcXIoKSxsZT10aGlzLnkucmVkU3FyKCksbWU9bGUucmVkU3FyKCksX2U9dGhpcy54LnJlZEFkZChsZSku'@;
put 'cmVkU3FyKCkucmVkSVN1YihpZSkucmVkSVN1YihtZSk7X2U9X2UucmVkSUFkZChfZSk7dmFyIFRlPWllLnJlZEFkZChpZSkucmVkSUFkZChpZSksU2U9VGUucmVkU3FyKCksamU9bWUucmVkSUFkZChtZSk7amU9KGplPWplLnJlZElBZGQoamUpKS5yZWRJQWRkKGplKSxOPVNlLnJlZElTdWIo'@;
put 'X2UpLnJlZElTdWIoX2UpLEw9VGUucmVkTXVsKF9lLnJlZElTdWIoTikpLnJlZElTdWIoamUpLEs9KEs9dGhpcy55LnJlZE11bCh0aGlzLnopKS5yZWRJQWRkKEspfXJldHVybiB0aGlzLmN1cnZlLmpwb2ludChOLEwsSyl9LE8ucHJvdG90eXBlLl90aHJlZURibD1mdW5jdGlvbigpe3ZhciBO'@;
put 'LEwsSztpZih0aGlzLnpPbmUpe3ZhciBVPXRoaXMueC5yZWRTcXIoKSxXPXRoaXMueS5yZWRTcXIoKSxZPVcucmVkU3FyKCkscT10aGlzLngucmVkQWRkKFcpLnJlZFNxcigpLnJlZElTdWIoVSkucmVkSVN1YihZKTtxPXEucmVkSUFkZChxKTt2YXIgZWU9VS5yZWRBZGQoVSkucmVkSUFkZChV'@;
put 'KS5yZWRJQWRkKHRoaXMuY3VydmUuYSksSj1lZS5yZWRTcXIoKS5yZWRJU3ViKHEpLnJlZElTdWIocSk7Tj1KO3ZhciBuZT1ZLnJlZElBZGQoWSk7bmU9KG5lPW5lLnJlZElBZGQobmUpKS5yZWRJQWRkKG5lKSxMPWVlLnJlZE11bChxLnJlZElTdWIoSikpLnJlZElTdWIobmUpLEs9dGhpcy55'@;
put 'LnJlZEFkZCh0aGlzLnkpfWVsc2V7dmFyIGllPXRoaXMuei5yZWRTcXIoKSxsZT10aGlzLnkucmVkU3FyKCksbWU9dGhpcy54LnJlZE11bChsZSksX2U9dGhpcy54LnJlZFN1YihpZSkucmVkTXVsKHRoaXMueC5yZWRBZGQoaWUpKTtfZT1fZS5yZWRBZGQoX2UpLnJlZElBZGQoX2UpO3ZhciBU'@;
put 'ZT1tZS5yZWRJQWRkKG1lKSxTZT0oVGU9VGUucmVkSUFkZChUZSkpLnJlZEFkZChUZSk7Tj1fZS5yZWRTcXIoKS5yZWRJU3ViKFNlKSxLPXRoaXMueS5yZWRBZGQodGhpcy56KS5yZWRTcXIoKS5yZWRJU3ViKGxlKS5yZWRJU3ViKGllKTt2YXIgamU9bGUucmVkU3FyKCk7amU9KGplPShqZT1q'@;
put 'ZS5yZWRJQWRkKGplKSkucmVkSUFkZChqZSkpLnJlZElBZGQoamUpLEw9X2UucmVkTXVsKFRlLnJlZElTdWIoTikpLnJlZElTdWIoamUpfXJldHVybiB0aGlzLmN1cnZlLmpwb2ludChOLEwsSyl9LE8ucHJvdG90eXBlLl9kYmw9ZnVuY3Rpb24oKXt2YXIgTj10aGlzLmN1cnZlLmEsTD10aGlz'@;
put 'LngsSz10aGlzLnksVT10aGlzLnosVz1VLnJlZFNxcigpLnJlZFNxcigpLFk9TC5yZWRTcXIoKSxxPUsucmVkU3FyKCksZWU9WS5yZWRBZGQoWSkucmVkSUFkZChZKS5yZWRJQWRkKE4ucmVkTXVsKFcpKSxKPUwucmVkQWRkKEwpLG5lPShKPUoucmVkSUFkZChKKSkucmVkTXVsKHEpLGllPWVl'@;
put 'LnJlZFNxcigpLnJlZElTdWIobmUucmVkQWRkKG5lKSksbGU9bmUucmVkSVN1YihpZSksbWU9cS5yZWRTcXIoKTttZT0obWU9KG1lPW1lLnJlZElBZGQobWUpKS5yZWRJQWRkKG1lKSkucmVkSUFkZChtZSk7dmFyIF9lPWVlLnJlZE11bChsZSkucmVkSVN1YihtZSksVGU9Sy5yZWRBZGQoSyku'@;
put 'cmVkTXVsKFUpO3JldHVybiB0aGlzLmN1cnZlLmpwb2ludChpZSxfZSxUZSl9LE8ucHJvdG90eXBlLnRycGw9ZnVuY3Rpb24oKXtpZighdGhpcy5jdXJ2ZS56ZXJvQSlyZXR1cm4gdGhpcy5kYmwoKS5hZGQodGhpcyk7dmFyIE49dGhpcy54LnJlZFNxcigpLEw9dGhpcy55LnJlZFNxcigpLEs9'@;
put 'dGhpcy56LnJlZFNxcigpLFU9TC5yZWRTcXIoKSxXPU4ucmVkQWRkKE4pLnJlZElBZGQoTiksWT1XLnJlZFNxcigpLHE9dGhpcy54LnJlZEFkZChMKS5yZWRTcXIoKS5yZWRJU3ViKE4pLnJlZElTdWIoVSksZWU9KHE9KHE9KHE9cS5yZWRJQWRkKHEpKS5yZWRBZGQocSkucmVkSUFkZChxKSku'@;
put 'cmVkSVN1YihZKSkucmVkU3FyKCksSj1VLnJlZElBZGQoVSk7Sj0oSj0oSj1KLnJlZElBZGQoSikpLnJlZElBZGQoSikpLnJlZElBZGQoSik7dmFyIG5lPVcucmVkSUFkZChxKS5yZWRTcXIoKS5yZWRJU3ViKFkpLnJlZElTdWIoZWUpLnJlZElTdWIoSiksaWU9TC5yZWRNdWwobmUpO2llPShp'@;
put 'ZT1pZS5yZWRJQWRkKGllKSkucmVkSUFkZChpZSk7dmFyIGxlPXRoaXMueC5yZWRNdWwoZWUpLnJlZElTdWIoaWUpO2xlPShsZT1sZS5yZWRJQWRkKGxlKSkucmVkSUFkZChsZSk7dmFyIG1lPXRoaXMueS5yZWRNdWwobmUucmVkTXVsKEoucmVkSVN1YihuZSkpLnJlZElTdWIocS5yZWRNdWwo'@;
put 'ZWUpKSk7bWU9KG1lPShtZT1tZS5yZWRJQWRkKG1lKSkucmVkSUFkZChtZSkpLnJlZElBZGQobWUpO3ZhciBfZT10aGlzLnoucmVkQWRkKHEpLnJlZFNxcigpLnJlZElTdWIoSykucmVkSVN1YihlZSk7cmV0dXJuIHRoaXMuY3VydmUuanBvaW50KGxlLG1lLF9lKX0sTy5wcm90b3R5cGUubXVs'@;
put 'PWZ1bmN0aW9uKE4sTCl7cmV0dXJuIE49bmV3IF8oTixMKSx0aGlzLmN1cnZlLl93bmFmTXVsKHRoaXMsTil9LE8ucHJvdG90eXBlLmVxPWZ1bmN0aW9uKE4pe2lmKCJhZmZpbmUiPT09Ti50eXBlKXJldHVybiB0aGlzLmVxKE4udG9KKCkpO2lmKHRoaXM9PT1OKXJldHVybiEwO3ZhciBMPXRo'@;
put 'aXMuei5yZWRTcXIoKSxLPU4uei5yZWRTcXIoKTtpZigwIT09dGhpcy54LnJlZE11bChLKS5yZWRJU3ViKE4ueC5yZWRNdWwoTCkpLmNtcG4oMCkpcmV0dXJuITE7dmFyIFU9TC5yZWRNdWwodGhpcy56KSxXPUsucmVkTXVsKE4ueik7cmV0dXJuIDA9PT10aGlzLnkucmVkTXVsKFcpLnJlZElT'@;
put 'dWIoTi55LnJlZE11bChVKSkuY21wbigwKX0sTy5wcm90b3R5cGUuZXFYVG9QPWZ1bmN0aW9uKE4pe3ZhciBMPXRoaXMuei5yZWRTcXIoKSxLPU4udG9SZWQodGhpcy5jdXJ2ZS5yZWQpLnJlZE11bChMKTtpZigwPT09dGhpcy54LmNtcChLKSlyZXR1cm4hMDtmb3IodmFyIFU9Ti5jbG9uZSgp'@;
put 'LFc9dGhpcy5jdXJ2ZS5yZWROLnJlZE11bChMKTs7KXtpZihVLmlhZGQodGhpcy5jdXJ2ZS5uKSxVLmNtcCh0aGlzLmN1cnZlLnApPj0wKXJldHVybiExO2lmKEsucmVkSUFkZChXKSwwPT09dGhpcy54LmNtcChLKSlyZXR1cm4hMH19LE8ucHJvdG90eXBlLmluc3BlY3Q9ZnVuY3Rpb24oKXty'@;
put 'ZXR1cm4gdGhpcy5pc0luZmluaXR5KCk/IjxFQyBKUG9pbnQgSW5maW5pdHk+IjoiPEVDIEpQb2ludCB4OiAiK3RoaXMueC50b1N0cmluZygxNiwyKSsiIHk6ICIrdGhpcy55LnRvU3RyaW5nKDE2LDIpKyIgejogIit0aGlzLnoudG9TdHJpbmcoMTYsMikrIj4ifSxPLnByb3RvdHlwZS5pc0lu'@;
put 'ZmluaXR5PWZ1bmN0aW9uKCl7cmV0dXJuIDA9PT10aGlzLnouY21wbigwKX19LDU0Mjc6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIE8sST1YLF89eSgzNzE1KSxnPXkoODI1NCksdz15KDk1MykuYXNzZXJ0O2Z1bmN0aW9uIFAoeil7dGhpcy5jdXJ2ZT0ic2hvcnQiPT09ei50eXBlP25l'@;
put 'dyBnLnNob3J0KHopOiJlZHdhcmRzIj09PXoudHlwZT9uZXcgZy5lZHdhcmRzKHopOm5ldyBnLm1vbnQoeiksdGhpcy5nPXRoaXMuY3VydmUuZyx0aGlzLm49dGhpcy5jdXJ2ZS5uLHRoaXMuaGFzaD16Lmhhc2gsdyh0aGlzLmcudmFsaWRhdGUoKSwiSW52YWxpZCBjdXJ2ZSIpLHcodGhpcy5n'@;
put 'Lm11bCh0aGlzLm4pLmlzSW5maW5pdHkoKSwiSW52YWxpZCBjdXJ2ZSwgRypOICE9IE8iKX1mdW5jdGlvbiBGKHosTil7T2JqZWN0LmRlZmluZVByb3BlcnR5KEkseix7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7dmFyIEw9bmV3IFAoTik7cmV0dXJuIE9i'@;
put 'amVjdC5kZWZpbmVQcm9wZXJ0eShJLHose2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLHZhbHVlOkx9KSxMfX0pfUkuUHJlc2V0Q3VydmU9UCxGKCJwMTkyIix7dHlwZToic2hvcnQiLHByaW1lOiJwMTkyIixwOiJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZm'@;
put 'ZmZmZiBmZmZmZmZmZiIsYToiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZmZmYgZmZmZmZmZmMiLGI6IjY0MjEwNTE5IGU1OWM4MGU3IDBmYTdlOWFiIDcyMjQzMDQ5IGZlYjhkZWVjIGMxNDZiOWIxIixuOiJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiA5OWRl'@;
put 'ZjgzNiAxNDZiYzliMSBiNGQyMjgzMSIsaGFzaDpfLnNoYTI1NixnUmVkOiExLGc6WyIxODhkYTgwZSBiMDMwOTBmNiA3Y2JmMjBlYiA0M2ExODgwMCBmNGZmMGFmZCA4MmZmMTAxMiIsIjA3MTkyYjk1IGZmYzhkYTc4IDYzMTAxMWVkIDZiMjRjZGQ1IDczZjk3N2ExIDFlNzk0ODExIl19KSxG'@;
put 'KCJwMjI0Iix7dHlwZToic2hvcnQiLHByaW1lOiJwMjI0IixwOiJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiAwMDAwMDAwMCAwMDAwMDAwMCAwMDAwMDAwMSIsYToiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZm'@;
put 'ZmUiLGI6ImI0MDUwYTg1IDBjMDRiM2FiIGY1NDEzMjU2IDUwNDRiMGI3IGQ3YmZkOGJhIDI3MGIzOTQzIDIzNTVmZmI0IixuOiJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmMTZhMiBlMGI4ZjAzZSAxM2RkMjk0NSA1YzVjMmEzZCIsaGFzaDpfLnNoYTI1NixnUmVkOiExLGc6WyJi'@;
put 'NzBlMGNiZCA2YmI0YmY3ZiAzMjEzOTBiOSA0YTAzYzFkMyA1NmMyMTEyMiAzNDMyODBkNiAxMTVjMWQyMSIsImJkMzc2Mzg4IGI1ZjcyM2ZiIDRjMjJkZmU2IGNkNDM3NWEwIDVhMDc0NzY0IDQ0ZDU4MTk5IDg1MDA3ZTM0Il19KSxGKCJwMjU2Iix7dHlwZToic2hvcnQiLHByaW1lOm51bGws'@;
put 'cDoiZmZmZmZmZmYgMDAwMDAwMDEgMDAwMDAwMDAgMDAwMDAwMDAgMDAwMDAwMDAgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYiLGE6ImZmZmZmZmZmIDAwMDAwMDAxIDAwMDAwMDAwIDAwMDAwMDAwIDAwMDAwMDAwIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZjIixiOiI1YWM2MzVkOCBh'@;
put 'YTNhOTNlNyBiM2ViYmQ1NSA3Njk4ODZiYyA2NTFkMDZiMCBjYzUzYjBmNiAzYmNlM2MzZSAyN2QyNjA0YiIsbjoiZmZmZmZmZmYgMDAwMDAwMDAgZmZmZmZmZmYgZmZmZmZmZmYgYmNlNmZhYWQgYTcxNzllODQgZjNiOWNhYzIgZmM2MzI1NTEiLGhhc2g6Xy5zaGEyNTYsZ1JlZDohMSxnOlsi'@;
put 'NmIxN2QxZjIgZTEyYzQyNDcgZjhiY2U2ZTUgNjNhNDQwZjIgNzcwMzdkODEgMmRlYjMzYTAgZjRhMTM5NDUgZDg5OGMyOTYiLCI0ZmUzNDJlMiBmZTFhN2Y5YiA4ZWU3ZWI0YSA3YzBmOWUxNiAyYmNlMzM1NyA2YjMxNWVjZSBjYmI2NDA2OCAzN2JmNTFmNSJdfSksRigicDM4NCIse3R5cGU6'@;
put 'InNob3J0IixwcmltZTpudWxsLHA6ImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmZmZmIDAwMDAwMDAwIDAwMDAwMDAwIGZmZmZmZmZmIixhOiJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZm'@;
put 'ZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmZmZiAwMDAwMDAwMCAwMDAwMDAwMCBmZmZmZmZmYyIsYjoiYjMzMTJmYTcgZTIzZWU3ZTQgOTg4ZTA1NmIgZTNmODJkMTkgMTgxZDljNmUgZmU4MTQxMTIgMDMxNDA4OGYgNTAxMzg3NWEgYzY1NjM5OGQgOGEy'@;
put 'ZWQxOWQgMmE4NWM4ZWQgZDNlYzJhZWYiLG46ImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGM3NjM0ZDgxIGY0MzcyZGRmIDU4MWEwZGIyIDQ4YjBhNzdhIGVjZWMxOTZhIGNjYzUyOTczIixoYXNoOl8uc2hhMzg0LGdSZWQ6ITEsZzpbImFh'@;
put 'ODdjYTIyIGJlOGIwNTM3IDhlYjFjNzFlIGYzMjBhZDc0IDZlMWQzYjYyIDhiYTc5Yjk4IDU5Zjc0MWUwIDgyNTQyYTM4IDU1MDJmMjVkIGJmNTUyOTZjIDNhNTQ1ZTM4IDcyNzYwYWI3IiwiMzYxN2RlNGEgOTYyNjJjNmYgNWQ5ZTk4YmYgOTI5MmRjMjkgZjhmNDFkYmQgMjg5YTE0N2MgZTlk'@;
put 'YTMxMTMgYjVmMGI4YzAgMGE2MGIxY2UgMWQ3ZTgxOWQgN2E0MzFkN2MgOTBlYTBlNWYiXX0pLEYoInA1MjEiLHt0eXBlOiJzaG9ydCIscHJpbWU6bnVsbCxwOiIwMDAwMDFmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBm'@;
put 'ZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiIsYToiMDAwMDAxZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYg'@;
put 'ZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmMiLGI6IjAwMDAwMDUxIDk1M2ViOTYxIDhlMWM5YTFmIDkyOWEyMWEwIGI2ODU0MGVlIGEyZGE3MjViIDk5YjMxNWYzIGI4YjQ4OTkxIDhlZjEwOWUxIDU2MTkzOTUx'@;
put 'IGVjN2U5MzdiIDE2NTJjMGJkIDNiYjFiZjA3IDM1NzNkZjg4IDNkMmMzNGYxIGVmNDUxZmQ0IDZiNTAzZjAwIixuOiIwMDAwMDFmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmYSA1MTg2ODc4MyBiZjJmOTY2'@;
put 'YiA3ZmNjMDE0OCBmNzA5YTVkMCAzYmI1YzliOCA4OTljNDdhZSBiYjZmYjcxZSA5MTM4NjQwOSIsaGFzaDpfLnNoYTUxMixnUmVkOiExLGc6WyIwMDAwMDBjNiA4NThlMDZiNyAwNDA0ZTljZCA5ZTNlY2I2NiAyMzk1YjQ0MiA5YzY0ODEzOSAwNTNmYjUyMSBmODI4YWY2MCA2YjRkM2RiYSBh'@;
put 'MTRiNWU3NyBlZmU3NTkyOCBmZTFkYzEyNyBhMmZmYThkZSAzMzQ4YjNjMSA4NTZhNDI5YiBmOTdlN2UzMSBjMmU1YmQ2NiIsIjAwMDAwMTE4IDM5Mjk2YTc4IDlhM2JjMDA0IDVjOGE1ZmI0IDJjN2QxYmQ5IDk4ZjU0NDQ5IDU3OWI0NDY4IDE3YWZiZDE3IDI3M2U2NjJjIDk3ZWU3Mjk5IDVl'@;
put 'ZjQyNjQwIGM1NTBiOTAxIDNmYWQwNzYxIDM1M2M3MDg2IGEyNzJjMjQwIDg4YmU5NDc2IDlmZDE2NjUwIl19KSxGKCJjdXJ2ZTI1NTE5Iix7dHlwZToibW9udCIscHJpbWU6InAyNTUxOSIscDoiN2ZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZm'@;
put 'ZmZmZmZmZmZmZmZlZCIsYToiNzZkMDYiLGI6IjEiLG46IjEwMDAwMDAwMDAwMDAwMDAgMDAwMDAwMDAwMDAwMDAwMCAxNGRlZjlkZWEyZjc5Y2Q2IDU4MTI2MzFhNWNmNWQzZWQiLGhhc2g6Xy5zaGEyNTYsZ1JlZDohMSxnOlsiOSJdfSksRigiZWQyNTUxOSIse3R5cGU6ImVkd2FyZHMiLHBy'@;
put 'aW1lOiJwMjU1MTkiLHA6IjdmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZWQiLGE6Ii0xIixjOiIxIixkOiI1MjAzNmNlZTJiNmZmZTczIDhjYzc0MDc5Nzc3OWU4OTggMDA3MDBhNGQ0MTQxZDhhYiA3NWViNGRjYTEzNTk3'@;
put 'OGEzIixuOiIxMDAwMDAwMDAwMDAwMDAwIDAwMDAwMDAwMDAwMDAwMDAgMTRkZWY5ZGVhMmY3OWNkNiA1ODEyNjMxYTVjZjVkM2VkIixoYXNoOl8uc2hhMjU2LGdSZWQ6ITEsZzpbIjIxNjkzNmQzY2Q2ZTUzZmVjMGE0ZTIzMWZkZDZkYzVjNjkyY2M3NjA5NTI1YTdiMmM5NTYyZDYwOGYyNWQ1'@;
put 'MWEiLCI2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjU4Il19KTt0cnl7Tz15KDEwMzcpfWNhdGNoe089dm9pZCAwfUYoInNlY3AyNTZrMSIse3R5cGU6InNob3J0IixwcmltZToiazI1NiIscDoiZmZmZmZmZmYgZmZmZmZmZmYg'@;
put 'ZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZjMmYiLGE6IjAiLGI6IjciLG46ImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGJhYWVkY2U2IGFmNDhhMDNiIGJmZDI1ZThjIGQwMzY0MTQxIixoOiIxIixoYXNoOl8uc2hhMjU2LGJl'@;
put 'dGE6IjdhZTk2YTJiNjU3YzA3MTA2ZTY0NDc5ZWFjMzQzNGU5OWNmMDQ5NzUxMmY1ODk5NWMxMzk2YzI4NzE5NTAxZWUiLGxhbWJkYToiNTM2M2FkNGNjMDVjMzBlMGE1MjYxYzAyODgxMjY0NWExMjJlMjJlYTIwODE2Njc4ZGYwMjk2N2MxYjIzYmQ3MiIsYmFzaXM6W3thOiIzMDg2ZDIyMWE3'@;
put 'ZDQ2YmNkZTg2YzkwZTQ5Mjg0ZWIxNSIsYjoiLWU0NDM3ZWQ2MDEwZTg4Mjg2ZjU0N2ZhOTBhYmZlNGMzIn0se2E6IjExNGNhNTBmN2E4ZTJmM2Y2NTdjMTEwOGQ5ZDQ0Y2ZkOCIsYjoiMzA4NmQyMjFhN2Q0NmJjZGU4NmM5MGU0OTI4NGViMTUifV0sZ1JlZDohMSxnOlsiNzliZTY2N2VmOWRj'@;
put 'YmJhYzU1YTA2Mjk1Y2U4NzBiMDcwMjliZmNkYjJkY2UyOGQ5NTlmMjgxNWIxNmY4MTc5OCIsIjQ4M2FkYTc3MjZhM2M0NjU1ZGE0ZmJmYzBlMTEwOGE4ZmQxN2I0NDhhNjg1NTQxOTljNDdkMDhmZmIxMGQ0YjgiLE9dfSl9LDc5NTQ6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSgz'@;
put 'Nzg1KSxfPXkoMjE1NiksZz15KDk1MyksQj15KDU0MjcpLHc9eSg5OTMxKSxQPWcuYXNzZXJ0LEY9eSgxMjUxKSxPPXkoNjExKTtmdW5jdGlvbiB6KE4pe2lmKCEodGhpcyBpbnN0YW5jZW9mIHopKXJldHVybiBuZXcgeihOKTsic3RyaW5nIj09dHlwZW9mIE4mJihQKE9iamVjdC5wcm90b3R5'@;
put 'cGUuaGFzT3duUHJvcGVydHkuY2FsbChCLE4pLCJVbmtub3duIGN1cnZlICIrTiksTj1CW05dKSxOIGluc3RhbmNlb2YgQi5QcmVzZXRDdXJ2ZSYmKE49e2N1cnZlOk59KSx0aGlzLmN1cnZlPU4uY3VydmUuY3VydmUsdGhpcy5uPXRoaXMuY3VydmUubix0aGlzLm5oPXRoaXMubi51c2hybigx'@;
put 'KSx0aGlzLmc9dGhpcy5jdXJ2ZS5nLHRoaXMuZz1OLmN1cnZlLmcsdGhpcy5nLnByZWNvbXB1dGUoTi5jdXJ2ZS5uLmJpdExlbmd0aCgpKzEpLHRoaXMuaGFzaD1OLmhhc2h8fE4uY3VydmUuaGFzaH11ZS5leHBvcnRzPXosei5wcm90b3R5cGUua2V5UGFpcj1mdW5jdGlvbihMKXtyZXR1cm4g'@;
put 'bmV3IEYodGhpcyxMKX0sei5wcm90b3R5cGUua2V5RnJvbVByaXZhdGU9ZnVuY3Rpb24oTCxLKXtyZXR1cm4gRi5mcm9tUHJpdmF0ZSh0aGlzLEwsSyl9LHoucHJvdG90eXBlLmtleUZyb21QdWJsaWM9ZnVuY3Rpb24oTCxLKXtyZXR1cm4gRi5mcm9tUHVibGljKHRoaXMsTCxLKX0sei5wcm90'@;
put 'b3R5cGUuZ2VuS2V5UGFpcj1mdW5jdGlvbihMKXtMfHwoTD17fSk7Zm9yKHZhciBLPW5ldyBfKHtoYXNoOnRoaXMuaGFzaCxwZXJzOkwucGVycyxwZXJzRW5jOkwucGVyc0VuY3x8InV0ZjgiLGVudHJvcHk6TC5lbnRyb3B5fHx3KHRoaXMuaGFzaC5obWFjU3RyZW5ndGgpLGVudHJvcHlFbmM6'@;
put 'TC5lbnRyb3B5JiZMLmVudHJvcHlFbmN8fCJ1dGY4Iixub25jZTp0aGlzLm4udG9BcnJheSgpfSksVT10aGlzLm4uYnl0ZUxlbmd0aCgpLFc9dGhpcy5uLnN1YihuZXcgSSgyKSk7Oyl7dmFyIFk9bmV3IEkoSy5nZW5lcmF0ZShVKSk7aWYoIShZLmNtcChXKT4wKSlyZXR1cm4gWS5pYWRkbigx'@;
put 'KSx0aGlzLmtleUZyb21Qcml2YXRlKFkpfX0sei5wcm90b3R5cGUuX3RydW5jYXRlVG9OPWZ1bmN0aW9uKEwsSyxVKXt2YXIgVztpZihJLmlzQk4oTCl8fCJudW1iZXIiPT10eXBlb2YgTClXPShMPW5ldyBJKEwsMTYpKS5ieXRlTGVuZ3RoKCk7ZWxzZSBpZigib2JqZWN0Ij09dHlwZW9mIEwp'@;
put 'Vz1MLmxlbmd0aCxMPW5ldyBJKEwsMTYpO2Vsc2V7dmFyIFk9TC50b1N0cmluZygpO1c9WS5sZW5ndGgrMT4+PjEsTD1uZXcgSShZLDE2KX0ibnVtYmVyIiE9dHlwZW9mIFUmJihVPTgqVyk7dmFyIHE9VS10aGlzLm4uYml0TGVuZ3RoKCk7cmV0dXJuIHE+MCYmKEw9TC51c2hybihxKSksIUsm'@;
put 'JkwuY21wKHRoaXMubik+PTA/TC5zdWIodGhpcy5uKTpMfSx6LnByb3RvdHlwZS5zaWduPWZ1bmN0aW9uKEwsSyxVLFcpe2lmKCJvYmplY3QiPT10eXBlb2YgVSYmKFc9VSxVPW51bGwpLFd8fChXPXt9KSwic3RyaW5nIiE9dHlwZW9mIEwmJiJudW1iZXIiIT10eXBlb2YgTCYmIUkuaXNCTihM'@;
put 'KSl7UCgib2JqZWN0Ij09dHlwZW9mIEwmJkwmJiJudW1iZXIiPT10eXBlb2YgTC5sZW5ndGgsIkV4cGVjdGVkIG1lc3NhZ2UgdG8gYmUgYW4gYXJyYXktbGlrZSwgYSBoZXggc3RyaW5nLCBvciBhIEJOIGluc3RhbmNlIiksUChMLmxlbmd0aD4+PjA9PT1MLmxlbmd0aCk7Zm9yKHZhciBZPTA7'@;
put 'WTxMLmxlbmd0aDtZKyspUCgoMjU1JkxbWV0pPT09TFtZXSl9Sz10aGlzLmtleUZyb21Qcml2YXRlKEssVSksTD10aGlzLl90cnVuY2F0ZVRvTihMLCExLFcubXNnQml0TGVuZ3RoKSxQKCFMLmlzTmVnKCksIkNhbiBub3Qgc2lnbiBhIG5lZ2F0aXZlIG1lc3NhZ2UiKTt2YXIgcT10aGlzLm4u'@;
put 'Ynl0ZUxlbmd0aCgpLGVlPUsuZ2V0UHJpdmF0ZSgpLnRvQXJyYXkoImJlIixxKSxKPUwudG9BcnJheSgiYmUiLHEpO1AobmV3IEkoSikuZXEoTCksIkNhbiBub3Qgc2lnbiBtZXNzYWdlIik7Zm9yKHZhciBuZT1uZXcgXyh7aGFzaDp0aGlzLmhhc2gsZW50cm9weTplZSxub25jZTpKLHBlcnM6'@;
put 'Vy5wZXJzLHBlcnNFbmM6Vy5wZXJzRW5jfHwidXRmOCJ9KSxpZT10aGlzLm4uc3ViKG5ldyBJKDEpKSxsZT0wOztsZSsrKXt2YXIgbWU9Vy5rP1cuayhsZSk6bmV3IEkobmUuZ2VuZXJhdGUodGhpcy5uLmJ5dGVMZW5ndGgoKSkpO2lmKCEoKG1lPXRoaXMuX3RydW5jYXRlVG9OKG1lLCEwKSku'@;
put 'Y21wbigxKTw9MHx8bWUuY21wKGllKT49MCkpe3ZhciBfZT10aGlzLmcubXVsKG1lKTtpZighX2UuaXNJbmZpbml0eSgpKXt2YXIgVGU9X2UuZ2V0WCgpLFNlPVRlLnVtb2QodGhpcy5uKTtpZigwIT09U2UuY21wbigwKSl7dmFyIGplPW1lLmludm0odGhpcy5uKS5tdWwoU2UubXVsKEsuZ2V0'@;
put 'UHJpdmF0ZSgpKS5pYWRkKEwpKTtpZigwIT09KGplPWplLnVtb2QodGhpcy5uKSkuY21wbigwKSl7dmFyIFY9KF9lLmdldFkoKS5pc09kZCgpPzE6MCl8KDAhPT1UZS5jbXAoU2UpPzI6MCk7cmV0dXJuIFcuY2Fub25pY2FsJiZqZS5jbXAodGhpcy5uaCk+MCYmKGplPXRoaXMubi5zdWIoamUp'@;
put 'LFZePTEpLG5ldyBPKHtyOlNlLHM6amUscmVjb3ZlcnlQYXJhbTpWfSl9fX19fX0sei5wcm90b3R5cGUudmVyaWZ5PWZ1bmN0aW9uKEwsSyxVLFcsWSl7WXx8KFk9e30pLEw9dGhpcy5fdHJ1bmNhdGVUb04oTCwhMSxZLm1zZ0JpdExlbmd0aCksVT10aGlzLmtleUZyb21QdWJsaWMoVSxXKTt2'@;
put 'YXIgcT0oSz1uZXcgTyhLLCJoZXgiKSkucixlZT1LLnM7aWYocS5jbXBuKDEpPDB8fHEuY21wKHRoaXMubik+PTB8fGVlLmNtcG4oMSk8MHx8ZWUuY21wKHRoaXMubik+PTApcmV0dXJuITE7dmFyIGxlLEo9ZWUuaW52bSh0aGlzLm4pLG5lPUoubXVsKEwpLnVtb2QodGhpcy5uKSxpZT1KLm11'@;
put 'bChxKS51bW9kKHRoaXMubik7cmV0dXJuIHRoaXMuY3VydmUuX21heHdlbGxUcmljaz8hKGxlPXRoaXMuZy5qbXVsQWRkKG5lLFUuZ2V0UHVibGljKCksaWUpKS5pc0luZmluaXR5KCkmJmxlLmVxWFRvUChxKTohKGxlPXRoaXMuZy5tdWxBZGQobmUsVS5nZXRQdWJsaWMoKSxpZSkpLmlzSW5m'@;
put 'aW5pdHkoKSYmMD09PWxlLmdldFgoKS51bW9kKHRoaXMubikuY21wKHEpfSx6LnByb3RvdHlwZS5yZWNvdmVyUHViS2V5PWZ1bmN0aW9uKE4sTCxLLFUpe1AoKDMmSyk9PT1LLCJUaGUgcmVjb3ZlcnkgcGFyYW0gaXMgbW9yZSB0aGFuIHR3byBiaXRzIiksTD1uZXcgTyhMLFUpO3ZhciBXPXRo'@;
put 'aXMubixZPW5ldyBJKE4pLHE9TC5yLGVlPUwucyxKPTEmSyxuZT1LPj4xO2lmKHEuY21wKHRoaXMuY3VydmUucC51bW9kKHRoaXMuY3VydmUubikpPj0wJiZuZSl0aHJvdyBuZXcgRXJyb3IoIlVuYWJsZSB0byBmaW5kIHNlbmNvbmQga2V5IGNhbmRpbmF0ZSIpO3E9dGhpcy5jdXJ2ZS5wb2lu'@;
put 'dEZyb21YKG5lP3EuYWRkKHRoaXMuY3VydmUubik6cSxKKTt2YXIgaWU9TC5yLmludm0oVyksbGU9Vy5zdWIoWSkubXVsKGllKS51bW9kKFcpLG1lPWVlLm11bChpZSkudW1vZChXKTtyZXR1cm4gdGhpcy5nLm11bEFkZChsZSxxLG1lKX0sei5wcm90b3R5cGUuZ2V0S2V5UmVjb3ZlcnlQYXJh'@;
put 'bT1mdW5jdGlvbihOLEwsSyxVKXtpZihudWxsIT09KEw9bmV3IE8oTCxVKSkucmVjb3ZlcnlQYXJhbSlyZXR1cm4gTC5yZWNvdmVyeVBhcmFtO2Zvcih2YXIgVz0wO1c8NDtXKyspe3ZhciBZO3RyeXtZPXRoaXMucmVjb3ZlclB1YktleShOLEwsVyl9Y2F0Y2h7Y29udGludWV9aWYoWS5lcShL'@;
put 'KSlyZXR1cm4gV310aHJvdyBuZXcgRXJyb3IoIlVuYWJsZSB0byBmaW5kIHZhbGlkIHJlY292ZXJ5IGZhY3RvciIpfX0sMTI1MToodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDM3ODUpLGc9eSg5NTMpLmFzc2VydDtmdW5jdGlvbiBCKHcsUCl7dGhpcy5lYz13LHRoaXMucHJpdj1u'@;
put 'dWxsLHRoaXMucHViPW51bGwsUC5wcml2JiZ0aGlzLl9pbXBvcnRQcml2YXRlKFAucHJpdixQLnByaXZFbmMpLFAucHViJiZ0aGlzLl9pbXBvcnRQdWJsaWMoUC5wdWIsUC5wdWJFbmMpfXVlLmV4cG9ydHM9QixCLmZyb21QdWJsaWM9ZnVuY3Rpb24oUCxGLE8pe3JldHVybiBGIGluc3RhbmNl'@;
put 'b2YgQj9GOm5ldyBCKFAse3B1YjpGLHB1YkVuYzpPfSl9LEIuZnJvbVByaXZhdGU9ZnVuY3Rpb24oUCxGLE8pe3JldHVybiBGIGluc3RhbmNlb2YgQj9GOm5ldyBCKFAse3ByaXY6Rixwcml2RW5jOk99KX0sQi5wcm90b3R5cGUudmFsaWRhdGU9ZnVuY3Rpb24oKXt2YXIgUD10aGlzLmdldFB1'@;
put 'YmxpYygpO3JldHVybiBQLmlzSW5maW5pdHkoKT97cmVzdWx0OiExLHJlYXNvbjoiSW52YWxpZCBwdWJsaWMga2V5In06UC52YWxpZGF0ZSgpP1AubXVsKHRoaXMuZWMuY3VydmUubikuaXNJbmZpbml0eSgpP3tyZXN1bHQ6ITAscmVhc29uOm51bGx9OntyZXN1bHQ6ITEscmVhc29uOiJQdWJs'@;
put 'aWMga2V5ICogTiAhPSBPIn06e3Jlc3VsdDohMSxyZWFzb246IlB1YmxpYyBrZXkgaXMgbm90IGEgcG9pbnQifX0sQi5wcm90b3R5cGUuZ2V0UHVibGljPWZ1bmN0aW9uKFAsRil7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBQJiYoRj1QLFA9bnVsbCksdGhpcy5wdWJ8fCh0aGlzLnB1Yj10aGlz'@;
put 'LmVjLmcubXVsKHRoaXMucHJpdikpLEY/dGhpcy5wdWIuZW5jb2RlKEYsUCk6dGhpcy5wdWJ9LEIucHJvdG90eXBlLmdldFByaXZhdGU9ZnVuY3Rpb24oUCl7cmV0dXJuImhleCI9PT1QP3RoaXMucHJpdi50b1N0cmluZygxNiwyKTp0aGlzLnByaXZ9LEIucHJvdG90eXBlLl9pbXBvcnRQcml2'@;
put 'YXRlPWZ1bmN0aW9uKFAsRil7dGhpcy5wcml2PW5ldyBJKFAsRnx8MTYpLHRoaXMucHJpdj10aGlzLnByaXYudW1vZCh0aGlzLmVjLmN1cnZlLm4pfSxCLnByb3RvdHlwZS5faW1wb3J0UHVibGljPWZ1bmN0aW9uKFAsRil7aWYoUC54fHxQLnkpcmV0dXJuIm1vbnQiPT09dGhpcy5lYy5jdXJ2'@;
put 'ZS50eXBlP2coUC54LCJOZWVkIHggY29vcmRpbmF0ZSIpOigic2hvcnQiPT09dGhpcy5lYy5jdXJ2ZS50eXBlfHwiZWR3YXJkcyI9PT10aGlzLmVjLmN1cnZlLnR5cGUpJiZnKFAueCYmUC55LCJOZWVkIGJvdGggeCBhbmQgeSBjb29yZGluYXRlIiksdm9pZCh0aGlzLnB1Yj10aGlzLmVjLmN1'@;
put 'cnZlLnBvaW50KFAueCxQLnkpKTt0aGlzLnB1Yj10aGlzLmVjLmN1cnZlLmRlY29kZVBvaW50KFAsRil9LEIucHJvdG90eXBlLmRlcml2ZT1mdW5jdGlvbihQKXtyZXR1cm4gUC52YWxpZGF0ZSgpfHxnKFAudmFsaWRhdGUoKSwicHVibGljIHBvaW50IG5vdCB2YWxpZGF0ZWQiKSxQLm11bCh0'@;
put 'aGlzLnByaXYpLmdldFgoKX0sQi5wcm90b3R5cGUuc2lnbj1mdW5jdGlvbihQLEYsTyl7cmV0dXJuIHRoaXMuZWMuc2lnbihQLHRoaXMsRixPKX0sQi5wcm90b3R5cGUudmVyaWZ5PWZ1bmN0aW9uKFAsRixPKXtyZXR1cm4gdGhpcy5lYy52ZXJpZnkoUCxGLHRoaXMsdm9pZCAwLE8pfSxCLnBy'@;
put 'b3RvdHlwZS5pbnNwZWN0PWZ1bmN0aW9uKCl7cmV0dXJuIjxLZXkgcHJpdjogIisodGhpcy5wcml2JiZ0aGlzLnByaXYudG9TdHJpbmcoMTYsMikpKyIgcHViOiAiKyh0aGlzLnB1YiYmdGhpcy5wdWIuaW5zcGVjdCgpKSsiID4ifX0sNjExOih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJ'@;
put 'PXkoMzc4NSksXz15KDk1MyksZz1fLmFzc2VydDtmdW5jdGlvbiBCKHosTil7aWYoeiBpbnN0YW5jZW9mIEIpcmV0dXJuIHo7dGhpcy5faW1wb3J0REVSKHosTil8fChnKHouciYmei5zLCJTaWduYXR1cmUgd2l0aG91dCByIG9yIHMiKSx0aGlzLnI9bmV3IEkoei5yLDE2KSx0aGlzLnM9bmV3'@;
put 'IEkoei5zLDE2KSx0aGlzLnJlY292ZXJ5UGFyYW09dm9pZCAwPT09ei5yZWNvdmVyeVBhcmFtP251bGw6ei5yZWNvdmVyeVBhcmFtKX1mdW5jdGlvbiB3KCl7dGhpcy5wbGFjZT0wfWZ1bmN0aW9uIFAoeixOKXt2YXIgTD16W04ucGxhY2UrK107aWYoISgxMjgmTCkpcmV0dXJuIEw7dmFyIEs9'@;
put 'MTUmTDtpZigwPT09S3x8Sz40fHwwPT09eltOLnBsYWNlXSlyZXR1cm4hMTtmb3IodmFyIFU9MCxXPTAsWT1OLnBsYWNlO1c8SztXKyssWSsrKVU8PD04LFV8PXpbWV0sVT4+Pj0wO3JldHVybiEoVTw9MTI3KSYmKE4ucGxhY2U9WSxVKX1mdW5jdGlvbiBGKHope2Zvcih2YXIgTj0wLEw9ei5s'@;
put 'ZW5ndGgtMTsheltOXSYmISgxMjgmeltOKzFdKSYmTjxMOylOKys7cmV0dXJuIDA9PT1OP3o6ei5zbGljZShOKX1mdW5jdGlvbiBPKHosTil7aWYoTjwxMjgpei5wdXNoKE4pO2Vsc2V7dmFyIEw9MSsoTWF0aC5sb2coTikvTWF0aC5MTjI+Pj4zKTtmb3Ioei5wdXNoKDEyOHxMKTstLUw7KXou'@;
put 'cHVzaChOPj4+KEw8PDMpJjI1NSk7ei5wdXNoKE4pfX11ZS5leHBvcnRzPUIsQi5wcm90b3R5cGUuX2ltcG9ydERFUj1mdW5jdGlvbihOLEwpe049Xy50b0FycmF5KE4sTCk7dmFyIEs9bmV3IHc7aWYoNDghPT1OW0sucGxhY2UrK10pcmV0dXJuITE7dmFyIFU9UChOLEspO2lmKCExPT09VXx8'@;
put 'VStLLnBsYWNlIT09Ti5sZW5ndGh8fDIhPT1OW0sucGxhY2UrK10pcmV0dXJuITE7dmFyIFc9UChOLEspO2lmKCExPT09V3x8MTI4Jk5bSy5wbGFjZV0pcmV0dXJuITE7dmFyIFk9Ti5zbGljZShLLnBsYWNlLFcrSy5wbGFjZSk7aWYoSy5wbGFjZSs9VywyIT09TltLLnBsYWNlKytdKXJldHVy'@;
put 'biExO3ZhciBxPVAoTixLKTtpZighMT09PXF8fE4ubGVuZ3RoIT09cStLLnBsYWNlfHwxMjgmTltLLnBsYWNlXSlyZXR1cm4hMTt2YXIgZWU9Ti5zbGljZShLLnBsYWNlLHErSy5wbGFjZSk7aWYoMD09PVlbMF0pe2lmKCEoMTI4JllbMV0pKXJldHVybiExO1k9WS5zbGljZSgxKX1pZigwPT09'@;
put 'ZWVbMF0pe2lmKCEoMTI4JmVlWzFdKSlyZXR1cm4hMTtlZT1lZS5zbGljZSgxKX1yZXR1cm4gdGhpcy5yPW5ldyBJKFkpLHRoaXMucz1uZXcgSShlZSksdGhpcy5yZWNvdmVyeVBhcmFtPW51bGwsITB9LEIucHJvdG90eXBlLnRvREVSPWZ1bmN0aW9uKE4pe3ZhciBMPXRoaXMuci50b0FycmF5'@;
put 'KCksSz10aGlzLnMudG9BcnJheSgpO2ZvcigxMjgmTFswXSYmKEw9WzBdLmNvbmNhdChMKSksMTI4JktbMF0mJihLPVswXS5jb25jYXQoSykpLEw9RihMKSxLPUYoSyk7IShLWzBdfHwxMjgmS1sxXSk7KUs9Sy5zbGljZSgxKTt2YXIgVT1bMl07TyhVLEwubGVuZ3RoKSwoVT1VLmNvbmNhdChM'@;
put 'KSkucHVzaCgyKSxPKFUsSy5sZW5ndGgpO3ZhciBXPVUuY29uY2F0KEspLFk9WzQ4XTtyZXR1cm4gTyhZLFcubGVuZ3RoKSxZPVkuY29uY2F0KFcpLF8uZW5jb2RlKFksTil9fSw1OTgwOih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoMzcxNSksXz15KDU0MjcpLGc9eSg5NTMpLEI9'@;
put 'Zy5hc3NlcnQsdz1nLnBhcnNlQnl0ZXMsUD15KDkwODcpLEY9eSgzNjIyKTtmdW5jdGlvbiBPKHope2lmKEIoImVkMjU1MTkiPT09eiwib25seSB0ZXN0ZWQgd2l0aCBlZDI1NTE5IHNvIGZhciIpLCEodGhpcyBpbnN0YW5jZW9mIE8pKXJldHVybiBuZXcgTyh6KTt0aGlzLmN1cnZlPXo9X1t6'@;
put 'XS5jdXJ2ZSx0aGlzLmc9ei5nLHRoaXMuZy5wcmVjb21wdXRlKHoubi5iaXRMZW5ndGgoKSsxKSx0aGlzLnBvaW50Q2xhc3M9ei5wb2ludCgpLmNvbnN0cnVjdG9yLHRoaXMuZW5jb2RpbmdMZW5ndGg9TWF0aC5jZWlsKHoubi5iaXRMZW5ndGgoKS84KSx0aGlzLmhhc2g9SS5zaGE1MTJ9dWUu'@;
put 'ZXhwb3J0cz1PLE8ucHJvdG90eXBlLnNpZ249ZnVuY3Rpb24oTixMKXtOPXcoTik7dmFyIEs9dGhpcy5rZXlGcm9tU2VjcmV0KEwpLFU9dGhpcy5oYXNoSW50KEsubWVzc2FnZVByZWZpeCgpLE4pLFc9dGhpcy5nLm11bChVKSxZPXRoaXMuZW5jb2RlUG9pbnQoVykscT10aGlzLmhhc2hJbnQo'@;
put 'WSxLLnB1YkJ5dGVzKCksTikubXVsKEsucHJpdigpKSxlZT1VLmFkZChxKS51bW9kKHRoaXMuY3VydmUubik7cmV0dXJuIHRoaXMubWFrZVNpZ25hdHVyZSh7UjpXLFM6ZWUsUmVuY29kZWQ6WX0pfSxPLnByb3RvdHlwZS52ZXJpZnk9ZnVuY3Rpb24oTixMLEspe2lmKE49dyhOKSwoTD10aGlz'@;
put 'Lm1ha2VTaWduYXR1cmUoTCkpLlMoKS5ndGUoTC5lZGRzYS5jdXJ2ZS5uKXx8TC5TKCkuaXNOZWcoKSlyZXR1cm4hMTt2YXIgVT10aGlzLmtleUZyb21QdWJsaWMoSyksVz10aGlzLmhhc2hJbnQoTC5SZW5jb2RlZCgpLFUucHViQnl0ZXMoKSxOKSxZPXRoaXMuZy5tdWwoTC5TKCkpO3JldHVy'@;
put 'biBMLlIoKS5hZGQoVS5wdWIoKS5tdWwoVykpLmVxKFkpfSxPLnByb3RvdHlwZS5oYXNoSW50PWZ1bmN0aW9uKCl7Zm9yKHZhciBOPXRoaXMuaGFzaCgpLEw9MDtMPGFyZ3VtZW50cy5sZW5ndGg7TCsrKU4udXBkYXRlKGFyZ3VtZW50c1tMXSk7cmV0dXJuIGcuaW50RnJvbUxFKE4uZGlnZXN0'@;
put 'KCkpLnVtb2QodGhpcy5jdXJ2ZS5uKX0sTy5wcm90b3R5cGUua2V5RnJvbVB1YmxpYz1mdW5jdGlvbihOKXtyZXR1cm4gUC5mcm9tUHVibGljKHRoaXMsTil9LE8ucHJvdG90eXBlLmtleUZyb21TZWNyZXQ9ZnVuY3Rpb24oTil7cmV0dXJuIFAuZnJvbVNlY3JldCh0aGlzLE4pfSxPLnByb3Rv'@;
put 'dHlwZS5tYWtlU2lnbmF0dXJlPWZ1bmN0aW9uKE4pe3JldHVybiBOIGluc3RhbmNlb2YgRj9OOm5ldyBGKHRoaXMsTil9LE8ucHJvdG90eXBlLmVuY29kZVBvaW50PWZ1bmN0aW9uKE4pe3ZhciBMPU4uZ2V0WSgpLnRvQXJyYXkoImxlIix0aGlzLmVuY29kaW5nTGVuZ3RoKTtyZXR1cm4gTFt0'@;
put 'aGlzLmVuY29kaW5nTGVuZ3RoLTFdfD1OLmdldFgoKS5pc09kZCgpPzEyODowLEx9LE8ucHJvdG90eXBlLmRlY29kZVBvaW50PWZ1bmN0aW9uKE4pe3ZhciBMPShOPWcucGFyc2VCeXRlcyhOKSkubGVuZ3RoLTEsSz1OLnNsaWNlKDAsTCkuY29uY2F0KC0xMjkmTltMXSksVT0hISgxMjgmTltM'@;
put 'XSksVz1nLmludEZyb21MRShLKTtyZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludEZyb21ZKFcsVSl9LE8ucHJvdG90eXBlLmVuY29kZUludD1mdW5jdGlvbihOKXtyZXR1cm4gTi50b0FycmF5KCJsZSIsdGhpcy5lbmNvZGluZ0xlbmd0aCl9LE8ucHJvdG90eXBlLmRlY29kZUludD1mdW5jdGlvbihO'@;
put 'KXtyZXR1cm4gZy5pbnRGcm9tTEUoTil9LE8ucHJvdG90eXBlLmlzUG9pbnQ9ZnVuY3Rpb24oTil7cmV0dXJuIE4gaW5zdGFuY2VvZiB0aGlzLnBvaW50Q2xhc3N9fSw5MDg3Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoOTUzKSxfPUkuYXNzZXJ0LGc9SS5wYXJzZUJ5dGVzLEI9'@;
put 'SS5jYWNoZWRQcm9wZXJ0eTtmdW5jdGlvbiB3KFAsRil7dGhpcy5lZGRzYT1QLHRoaXMuX3NlY3JldD1nKEYuc2VjcmV0KSxQLmlzUG9pbnQoRi5wdWIpP3RoaXMuX3B1Yj1GLnB1Yjp0aGlzLl9wdWJCeXRlcz1nKEYucHViKX13LmZyb21QdWJsaWM9ZnVuY3Rpb24oRixPKXtyZXR1cm4gTyBp'@;
put 'bnN0YW5jZW9mIHc/TzpuZXcgdyhGLHtwdWI6T30pfSx3LmZyb21TZWNyZXQ9ZnVuY3Rpb24oRixPKXtyZXR1cm4gTyBpbnN0YW5jZW9mIHc/TzpuZXcgdyhGLHtzZWNyZXQ6T30pfSx3LnByb3RvdHlwZS5zZWNyZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc2VjcmV0fSxCKHcsInB1YkJ5'@;
put 'dGVzIixmdW5jdGlvbigpe3JldHVybiB0aGlzLmVkZHNhLmVuY29kZVBvaW50KHRoaXMucHViKCkpfSksQih3LCJwdWIiLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3B1YkJ5dGVzP3RoaXMuZWRkc2EuZGVjb2RlUG9pbnQodGhpcy5fcHViQnl0ZXMpOnRoaXMuZWRkc2EuZy5tdWwodGhpcy5w'@;
put 'cml2KCkpfSksQih3LCJwcml2Qnl0ZXMiLGZ1bmN0aW9uKCl7dmFyIEY9dGhpcy5lZGRzYSxPPXRoaXMuaGFzaCgpLHo9Ri5lbmNvZGluZ0xlbmd0aC0xLE49Ty5zbGljZSgwLEYuZW5jb2RpbmdMZW5ndGgpO3JldHVybiBOWzBdJj0yNDgsTlt6XSY9MTI3LE5bel18PTY0LE59KSxCKHcsInBy'@;
put 'aXYiLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWRkc2EuZGVjb2RlSW50KHRoaXMucHJpdkJ5dGVzKCkpfSksQih3LCJoYXNoIixmdW5jdGlvbigpe3JldHVybiB0aGlzLmVkZHNhLmhhc2goKS51cGRhdGUodGhpcy5zZWNyZXQoKSkuZGlnZXN0KCl9KSxCKHcsIm1lc3NhZ2VQcmVmaXgiLGZ1'@;
put 'bmN0aW9uKCl7cmV0dXJuIHRoaXMuaGFzaCgpLnNsaWNlKHRoaXMuZWRkc2EuZW5jb2RpbmdMZW5ndGgpfSksdy5wcm90b3R5cGUuc2lnbj1mdW5jdGlvbihGKXtyZXR1cm4gXyh0aGlzLl9zZWNyZXQsIktleVBhaXIgY2FuIG9ubHkgdmVyaWZ5IiksdGhpcy5lZGRzYS5zaWduKEYsdGhpcyl9'@;
put 'LHcucHJvdG90eXBlLnZlcmlmeT1mdW5jdGlvbihGLE8pe3JldHVybiB0aGlzLmVkZHNhLnZlcmlmeShGLE8sdGhpcyl9LHcucHJvdG90eXBlLmdldFNlY3JldD1mdW5jdGlvbihGKXtyZXR1cm4gXyh0aGlzLl9zZWNyZXQsIktleVBhaXIgaXMgcHVibGljIG9ubHkiKSxJLmVuY29kZSh0aGlz'@;
put 'LnNlY3JldCgpLEYpfSx3LnByb3RvdHlwZS5nZXRQdWJsaWM9ZnVuY3Rpb24oRil7cmV0dXJuIEkuZW5jb2RlKHRoaXMucHViQnl0ZXMoKSxGKX0sdWUuZXhwb3J0cz13fSwzNjIyOih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoMzc4NSksXz15KDk1MyksZz1fLmFzc2VydCxCPV8u'@;
put 'Y2FjaGVkUHJvcGVydHksdz1fLnBhcnNlQnl0ZXM7ZnVuY3Rpb24gUChGLE8pe3RoaXMuZWRkc2E9Riwib2JqZWN0IiE9dHlwZW9mIE8mJihPPXcoTykpLEFycmF5LmlzQXJyYXkoTykmJihnKE8ubGVuZ3RoPT09MipGLmVuY29kaW5nTGVuZ3RoLCJTaWduYXR1cmUgaGFzIGludmFsaWQgc2l6'@;
put 'ZSIpLE89e1I6Ty5zbGljZSgwLEYuZW5jb2RpbmdMZW5ndGgpLFM6Ty5zbGljZShGLmVuY29kaW5nTGVuZ3RoKX0pLGcoTy5SJiZPLlMsIlNpZ25hdHVyZSB3aXRob3V0IFIgb3IgUyIpLEYuaXNQb2ludChPLlIpJiYodGhpcy5fUj1PLlIpLE8uUyBpbnN0YW5jZW9mIEkmJih0aGlzLl9TPU8u'@;
put 'UyksdGhpcy5fUmVuY29kZWQ9QXJyYXkuaXNBcnJheShPLlIpP08uUjpPLlJlbmNvZGVkLHRoaXMuX1NlbmNvZGVkPUFycmF5LmlzQXJyYXkoTy5TKT9PLlM6Ty5TZW5jb2RlZH1CKFAsIlMiLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWRkc2EuZGVjb2RlSW50KHRoaXMuU2VuY29kZWQoKSl9'@;
put 'KSxCKFAsIlIiLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWRkc2EuZGVjb2RlUG9pbnQodGhpcy5SZW5jb2RlZCgpKX0pLEIoUCwiUmVuY29kZWQiLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWRkc2EuZW5jb2RlUG9pbnQodGhpcy5SKCkpfSksQihQLCJTZW5jb2RlZCIsZnVuY3Rpb24oKXty'@;
put 'ZXR1cm4gdGhpcy5lZGRzYS5lbmNvZGVJbnQodGhpcy5TKCkpfSksUC5wcm90b3R5cGUudG9CeXRlcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLlJlbmNvZGVkKCkuY29uY2F0KHRoaXMuU2VuY29kZWQoKSl9LFAucHJvdG90eXBlLnRvSGV4PWZ1bmN0aW9uKCl7cmV0dXJuIF8uZW5jb2RlKHRo'@;
put 'aXMudG9CeXRlcygpLCJoZXgiKS50b1VwcGVyQ2FzZSgpfSx1ZS5leHBvcnRzPVB9LDEwMzc6dWU9Pnt1ZS5leHBvcnRzPXtkb3VibGVzOntzdGVwOjQscG9pbnRzOltbImU2MGZjZTkzYjU5ZTllYzUzMDExYWFiYzIxYzIzZTk3YjJhMzEzNjliODdhNWFlOWM0NGVlODllMmE2ZGVjMGEiLCJm'@;
put 'N2UzNTA3Mzk5ZTU5NTkyOWRiOTlmMzRmNTc5MzcxMDEyOTY4OTFlNDRkMjNmMGJlMWYzMmNjZTY5NjE2ODIxIl0sWyI4MjgyMjYzMjEyYzYwOWQ5ZWEyYTZlM2UxNzJkZTIzOGQ4YzM5Y2FiZDVhYzFjYTEwNjQ2ZTIzZmQ1ZjUxNTA4IiwiMTFmOGE4MDk4NTU3ZGZlNDVlODI1NmU4MzBiNjBh'@;
put 'Y2U2MmQ2MTNhYzJmN2IxN2JlZDMxYjZlYWZmNmUyNmNhZiJdLFsiMTc1ZTE1OWY3MjhiODY1YTcyZjk5Y2M2YzZmYzg0NmRlMGI5MzgzM2ZkMjIyMmVkNzNmY2U1YjU1MWU1YjczOSIsImQzNTA2ZTBkOWUzYzc5ZWJhNGVmOTdhNTFmZjcxZjVlYWNiNTk1NWFkZDI0MzQ1YzZlZmE2ZmZlZTlm'@;
put 'ZWQ2OTUiXSxbIjM2M2Q5MGQ0NDdiMDBjOWM5OWNlYWMwNWI2MjYyZWUwNTM0NDFjN2U1NTU1MmZmZTUyNmJhZDhmODNmZjQ2NDAiLCI0ZTI3M2FkZmM3MzIyMjE5NTNiNDQ1Mzk3ZjMzNjMxNDViOWE4OTAwODE5OWVjYjYyMDAzYzdmM2JlZTlkZTkiXSxbIjhiNGI1ZjE2NWRmM2MyYmU4YzYy'@;
put 'NDRiNWI3NDU2Mzg4NDNlNGE3ODFhMTViY2QxYjY5Zjc5YTU1ZGZmZGY4MGMiLCI0YWFkMGE2ZjY4ZDMwOGI0YjNmYmQ3ODEzYWIwZGEwNGY5ZTMzNjU0NjE2MmVlNTZiM2VmZjBjNjVmZDRmZDM2Il0sWyI3MjNjYmFhNmU1ZGI5OTZkNmJmNzcxYzAwYmQ1NDhjN2I3MDBkYmZmYTZjMGU3N2Jj'@;
put 'YjYxMTU5MjUyMzJmY2RhIiwiOTZlODY3YjU1OTVjYzQ5OGE5MjExMzc0ODg4MjRkNmUyNjYwYTA2NTM3Nzk0OTQ4MDFkYzA2OWQ5ZWIzOWY1ZiJdLFsiZWViZmE0ZDQ5M2JlYmY5OGJhNWZlZWM4MTJjMmQzYjUwOTQ3OTYxMjM3YTkxOTgzOWE1MzNlY2EwZTdkZDdmYSIsIjVkOWE4Y2EzOTcw'@;
put 'ZWYwZjI2OWVlN2VkYWYxNzgwODlkOWFlNGNkYzNhNzExZjcxMmRkZmQ0ZmRhZTFkZTg5OTkiXSxbIjEwMGY0NGRhNjk2ZTcxNjcyNzkxZDBhMDliN2JkZTQ1OWYxMjE1YTI5YjNjMDNiZmVmZDc4MzViMzlhNDhkYjAiLCJjZGQ5ZTEzMTkyYTAwYjc3MmVjOGYzMzAwYzA5MDY2NmI3ZmY0YTE4'@;
put 'ZmY1MTk1YWMwZmJkNWNkNjJiYzY1YTA5Il0sWyJlMTAzMWJlMjYyYzdlZDFiMWRjOTIyN2E0YTA0YzAxN2E3N2Y4ZDQ0NjRmM2IzODUyYzhhY2RlNmU1MzRmZDJkIiwiOWQ3MDYxOTI4OTQwNDA1ZTZiYjZhNDE3NjU5NzUzNWFmMjkyZGQ0MTllMWNlZDc5YTQ0ZjE4ZjI5NDU2YTAwZCJdLFsi'@;
put 'ZmVlYTZjYWU0NmQ1NWI1MzBhYzI4MzlmMTQzYmQ3ZWM1Y2Y4YjI2NmE0MWQ2YWY1MmQ1ZTY4OGQ5MDk0Njk2ZCIsImU1N2M2YjZjOTdkY2UxYmFiMDZlNGUxMmJmM2VjZDVjOTgxYzg5NTdjYzQxNDQyZDMxNTVkZWJmMTgwOTAwODgiXSxbImRhNjdhOTFkOTEwNDljZGNiMzY3YmU0YmU2ZmZj'@;
put 'YTNjZmVlZDY1N2Q4MDg1ODNkZTMzZmE5NzhiYzFlYzZjYjEiLCI5YmFjYWEzNTQ4MTY0MmJjNDFmNDYzZjdlYzk3ODBlNWRlYzdhZGM1MDhmNzQwYTE3ZTllYThlMjdhNjhiZTFkIl0sWyI1MzkwNGZhYTBiMzM0Y2RkYTZlMDAwOTM1ZWYyMjE1MWVjMDhkMGY3YmIxMTA2OWY1NzU0NWNjYzFh'@;
put 'MzdiN2MwIiwiNWJjMDg3ZDBiYzgwMTA2ZDg4YzllY2NhYzIwZDNjMWMxMzk5OTk4MWUxNDQzNDY5OWRjYjA5NmIwMjI3NzFjOCJdLFsiOGU3YmNkMGJkMzU5ODNhNzcxOWNjYTc3NjRjYTkwNjc3OWI1M2EwNDNhOWI4YmNhZWZmOTU5ZjQzYWQ4NjA0NyIsIjEwYjc3NzBiMmEzZGE0YjM5NDAz'@;
put 'MTA0MjBjYTk1MTQ1NzllODhlMmU0N2ZkNjhiM2VhMTAwNDdlODQ2MDM3MmEiXSxbIjM4NWVlZDM0YzFjZGZmMjFlNmQwODE4Njg5YjgxYmRlNzFhN2Y0ZjE4Mzk3ZTY2OTBhODQxZTE1OTljNDM4NjIiLCIyODNiZWJjM2U4ZWEyM2Y1NjcwMWRlMTllOWViZjQ1NzZiMzA0ZWVjMjA4NmRjOGNj'@;
put 'MDQ1OGZlNTU0MmU1NDUzIl0sWyI2ZjlkOWI4MDNlY2YxOTE2MzdjNzNhNDQxM2RmYTE4MGZkZGY4NGE1OTQ3ZmJjOWM2MDZlZDg2YzNmYWMzYTciLCI3YzgwYzY4ZTYwMzA1OWJhNjliOGUyYTMwZTQ1YzRkNDdlYTRkZDJmNWMyODEwMDJkODY4OTA2MDNhODQyMTYwIl0sWyIzMzIyZDQwMTI0'@;
put 'M2M0ZTI1ODJhMjE0N2MxMDRkNmVjYmY3NzRkMTYzZGIwZjVlNTMxM2I3ZTBlNzQyZDBlNmJkIiwiNTZlNzA3OTdlOTY2NGVmNWJmYjAxOWJjNGRkYWY5YjcyODA1ZjYzZWEyODczYWY2MjRmM2EyZTk2YzI4YjJhMCJdLFsiODU2NzJjN2QyZGUwYjdkYTJiZDE3NzBkODk2NjU4Njg3NDFiM2Y5'@;
put 'YWY3NjQzMzk3NzIxZDc0ZDI4MTM0YWI4MyIsIjdjNDgxYjliNWI0M2IyZWI2Mzc0MDQ5YmZhNjJjMmU1ZTc3ZjE3ZmNjNTI5OGY0NGM4ZTMwOTRmNzkwMzEzYTYiXSxbIjk0OGJmODA5YjE5ODhhNDZiMDZjOWYxOTE5NDEzYjEwZjkyMjZjNjBmNjY4ODMyZmZkOTU5YWY2MGM4MmEwYSIsIjUz'@;
put 'YTU2Mjg1NmRjYjY2NDZkYzZiNzRjNWQxYzM0MThjNmQ0ZGZmMDhjOTdjZDJiZWQ0Y2I3Zjg4ZDhjOGU1ODkiXSxbIjYyNjBjZTdmNDYxODAxYzM0ZjA2N2NlMGYwMjg3M2E4ZjFiMGU0NGRmYzY5NzUyYWNjZWNkODE5ZjM4ZmQ4ZTgiLCJiYzJkYTgyYjZmYTViNTcxYTdmMDkwNDk3NzZhMWVm'@;
put 'N2VjZDI5MjIzODA1MWMxOThjMWE4NGU5NWIyYjRhZTE3Il0sWyJlNTAzN2RlMGFmYzFkOGQ0M2Q4MzQ4NDE0YmJmNDEwMzA0M2VjOGY1NzViZmRjNDMyOTUzY2M4ZDIwMzdmYTJkIiwiNDU3MTUzNGJhYTk0ZDNiNWY5Zjk4ZDA5ZmI5OTBiZGRiZDVmNWIwM2VjNDgxZjEwZTBlNWRjODQxZDc1'@;
put 'NWJkYSJdLFsiZTA2MzcyYjBmNGEyMDdhZGY1ZWE5MDVlOGYxNzcxYjRlN2U4ZGJkMWM2YTZjNWI3MjU4NjZhMGFlNGZjZTcyNSIsIjdhOTA4OTc0YmNlMThjZmUxMmEyN2JiMmFkNWE0ODhjZDc0ODRhNzc4NzEwNDg3MGIyNzAzNGY5NGVlZTMxZGQiXSxbIjIxM2M3YTcxNWNkNWQ0NTM1OGQw'@;
put 'YmJmOWRjMGNlMDIyMDRiMTBiZGRlMmEzZjU4NTQwYWQ2OTA4ZDA1NTk3NTQiLCI0YjZkYWQwYjVhZTQ2MjUwNzAxM2FkMDYyNDViYTE5MGJiNDg1MGY1ZjM2YTdlZWRkZmYyYzI3NTM0YjQ1OGYyIl0sWyI0ZTdjMjcyYTdhZjRiMzRlOGRiYjkzNTJhNTQxOWE4N2UyODM4YzcwYWRjNjJjZGRm'@;
put 'MGNjM2EzYjA4ZmJkNTNjIiwiMTc3NDljNzY2YzlkMGIxOGUxNmZkMDlmNmRlZjY4MWI1MzBiOTYxNGJmZjdkZDMzZTBiMzk0MTgxN2RjYWFlNiJdLFsiZmVhNzRlM2RiZTc3OGIxYjEwZjIzOGFkNjE2ODZhYTVjNzZlM2RiMmJlNDMwNTc2MzI0MjdlMjg0MGZiMjdiNiIsIjZlMDU2OGRiOWIw'@;
put 'YjEzMjk3Y2Y2NzRkZWNjYjZhZjkzMTI2YjU5NmI5NzNmN2I3NzcwMWQzZGI3ZjIzY2I5NmYiXSxbIjc2ZTY0MTEzZjY3N2NmMGUxMGEyNTcwZDU5OTk2OGQzMTU0NGUxNzliNzYwNDMyOTUyYzAyYTQ0MTdiZGRlMzkiLCJjOTBkZGY4ZGVlNGU5NWNmNTc3MDY2ZDcwNjgxZjBkMzVlMmEzM2Qy'@;
put 'YjU2ZDIwMzJiNGIxNzUyZDE5MDFhYzAxIl0sWyJjNzM4YzU2YjAzYjJhYmUxZTgyODFiYWE3NDNmOGY5YThmN2NjNjQzZGYyNmNiZWUzYWIxNTAyNDJiY2JiODkxIiwiODkzZmI1Nzg5NTFhZDI1MzdmNzE4ZjJlYWNiZmJiYmI4MjMxNGVlZjc4ODBjZmU5MTdlNzM1ZDk2OTlhODRjMyJdLFsi'@;
put 'ZDg5NTYyNjU0OGI2NWI4MWUyNjRjNzYzN2M5NzI4NzdkMWQ3MmU1ZjNhOTI1MDE0MzcyZTlmNjU4OGY2YzE0YiIsImZlYmZhYTM4ZjJiYzdlYWU3MjhlYzYwODE4YzM0MGViMDM0MjhkNjMyYmIwNjdlMTc5MzYzZWQ3NWQ3ZDk5MWYiXSxbImI4ZGE5NDAzMmE5NTc1MThlYjBmNjQzMzU3MWU4'@;
put 'NzYxY2VmZmM3MzY5M2U4NGVkZDQ5MTUwYTU2NGY2NzZlMDMiLCIyODA0ZGZhNDQ4MDVhMWU0ZDdjOTljYzk3NjI4MDhiMDkyY2M1ODRkOTVmZjNiNTExNDg4ZTRlNzRlZmRmNmU3Il0sWyJlODBmZWExNDQ0MWZiMzNhN2Q4YWRhYjk0NzVkN2ZhYjIwMTllZmZiNTE1NmE3OTJmMWExMTc3OGUz'@;
put 'YzBkZjVkIiwiZWVkMWRlN2Y2MzhlMDA3NzFlODk3NjhjYTNjYTk0NDcyZDE1NWU4MGFmMzIyZWE5ZmNiNDI5MWI2YWM5ZWM3OCJdLFsiYTMwMTY5N2JkZmNkNzA0MzEzYmE0OGU1MWQ1Njc1NDNmMmExODIwMzFlZmQ2OTE1ZGRjMDdiYmNjNGUxNjA3MCIsIjczNzBmOTFjZmI2N2U0ZjUwODE4'@;
put 'MDlmYTI1ZDQwZjliMTczNWRiZjdjMGExMWExMzBjMGQxYTA0MWUxNzdlYTEiXSxbIjkwYWQ4NWIzODlkNmI5MzY0NjNmOWQwNTEyNjc4ZGUyMDhjYzMzMGIxMTMwN2ZmZmFiN2FjNjNlM2ZiMDRlZDQiLCJlNTA3YTM2MjBhMzgyNjFhZmZkY2JkOTQyNzIyMmI4MzlhZWZhYmUxNTgyODk0ZDk5'@;
put 'MWQ0ZDQ4Y2I2ZWYxNTAiXSxbIjhmNjhiOWQyZjYzYjVmMzM5MjM5YzFhZDk4MWYxNjJlZTg4YzU2Nzg3MjNlYTMzNTFiN2I0NDRjOWVjNGMwZGEiLCI2NjJhOWYyZGJhMDYzOTg2ZGUxZDkwYzJiNmJlMjE1ZGJiZWEyY2ZlOTU1MTBiZmRmMjNjYmY3OTUwMWZmZjgyIl0sWyJlNGYzZmIwMTc2'@;
put 'YWY4NWQ2NWZmOTlmZjkxOThjMzYwOTFmNDhlODY1MDM2ODFlM2U2Njg2ZmQ1MDUzMjMxZTExIiwiMWU2MzYzM2FkMGVmNGYxYzE2NjFhNmQwZWEwMmI3Mjg2Y2M3ZTc0ZWM5NTFkMWM5ODIyYzM4NTc2ZmViNzNiYyJdLFsiOGMwMGZhOWIxOGViZjMzMWViOTYxNTM3YTQ1YTQyNjZjNzAzNGYy'@;
put 'ZjBkNGUxZDA3MTZmYjZlYWUyMGVhZTI5ZSIsImVmYTQ3MjY3ZmVhNTIxYTFhOWRjMzQzYTM3MzZjOTc0YzJmYWRhZmE4MWUzNmM1NGU3ZDJhNGM2NjcwMjQxNGIiXSxbImU3YTI2Y2U2OWRkNDgyOWYzZTEwY2VjMGE5ZTk4ZWQzMTQzZDA4NGYzMDhiOTJjMDk5N2ZkZGZjNjBjYjNlNDEiLCIy'@;
put 'YTc1OGUzMDBmYTc5ODRiNDcxYjAwNmExYWFmYmIxOGQwYTZiMmMwNDIwZTgzZTIwZThhOTQyMWNmMmNmZDUxIl0sWyJiNjQ1OWUwZWUzNjYyZWM4ZDIzNTQwYzIyM2JjYmRjNTcxY2JjYjk2N2Q3OTQyNGYzY2YyOWViM2RlNmI4MGVmIiwiNjdjODc2ZDA2ZjNlMDZkZTFkYWRmMTZlNTY2MWRi'@;
put 'M2M0YjNhZTZkNDhlMzViMmZmMzBiZjBiNjFhNzFiYTQ1Il0sWyJkNjhhODBjODI4MGJiODQwNzkzMjM0YWExMThmMDYyMzFkNmYxZmM2N2U3M2M1YTVkZWRhMGY1YjQ5Njk0M2U4IiwiZGI4YmE5ZmZmNGI1ODZkMDBjNGIxZjkxNzdiMGUyOGI1YjBlN2I4Zjc4NDUyOTVhMjk0Yzg0MjY2YjEz'@;
put 'MzEyMCJdLFsiMzI0YWVkN2RmNjVjODA0MjUyZGMwMjcwOTA3YTMwYjA5NjEyYWViOTczNDQ5Y2VhNDA5NTk4MGZjMjhkM2Q1ZCIsIjY0OGEzNjU3NzRiNjFmMmZmMTMwYzBjMzVhZWMxZjRmMTkyMTNiMGM3ZTMzMjg0Mzk2NzIyNGFmOTZhYjdjODQiXSxbIjRkZjljMTQ5MTljZGU2MWY2ZDUx'@;
put 'ZGZkYmU1ZmVlNWRjZWVjNDE0M2JhOGQxY2E4ODhlOGJkMzczZmQwNTRjOTYiLCIzNWVjNTEwOTJkODcyODA1MDk3NGMyM2ExZDg1ZDRiNWQ1MDZjZGMyODg0OTAxOTJlYmFjMDZjYWQxMGQ1ZCJdLFsiOWMzOTE5YTg0YTQ3NDg3MGZhZWQ4YTljMWNjNjYwMjE1MjM0ODkwNTRkN2YwMzA4Y2Jm'@;
put 'Yzk5YzhhYzFmOThjZCIsImRkYjg0ZjBmNGE0ZGRkNTc1ODRmMDQ0YmYyNjBlNjQxOTA1MzI2Zjc2YzY0YzhlNmJlN2U1ZTAzZDRmYzU5OWQiXSxbIjYwNTcxNzBiMWRkMTJmZGY4ZGUwNWYyODFkOGUwNmJiOTFlMTQ5M2E4YjkxZDRjYzVhMjEzODIxMjBhOTU5ZTUiLCI5YTFhZjBiMjZhNmE0'@;
put 'ODA3YWRkOWEyZGFmNzFkZjI2MjQ2NTE1MmJjM2VlMjRjNjVlODk5YmU5MzIzODVhMmE4Il0sWyJhNTc2ZGY4ZTIzYTA4NDExNDIxNDM5YTQ1MThkYTMxODgwY2VmMGZiYTdkNGRmMTJiMWE2OTczZWVjYjk0MjY2IiwiNDBhNmJmMjBlNzY2NDBiMmM5MmI5N2FmZTU4Y2Q4MmM0MzJlMTBhN2Y1'@;
put 'MTRkOWYzZWU4YmUxMWFlMWIyOGVjOCJdLFsiNzc3OGE3OGMyOGRlYzNlMzBhMDVmZTk2MjlkZThjMzhiYjMwZDFmNWNmOWEzYTIwOGY3NjM4ODliZTU4YWQ3MSIsIjM0NjI2ZDlhYjVhNWIyMmZmNzA5OGUxMmYyZmY1ODAwODdiMzg0MTFmZjI0YWM1NjNiNTEzZmMxZmQ5ZjQzYWMiXSxbIjky'@;
put 'ODk1NWVlNjM3YTg0NDYzNzI5ZmQzMGU3YWZkMmVkNWY5NjI3NGU1YWQ3ZTVjYjA5ZWRhOWMwNmQ5MDNhYyIsImMyNTYyMTAwM2QzZjQyYTgyN2I3OGExMzA5M2E5NWVlYWMzZDI2ZWZhOGE4ZDgzZmM1MTgwZTkzNWJjZDA5MWYiXSxbIjg1ZDBmZWYzZWM2ZGIxMDkzOTkwNjRmM2EwZTNiMjg1'@;
put 'NTY0NWI0YTkwN2FkMzU0NTI3YWFlNzUxNjNkODI3NTEiLCIxZjAzNjQ4NDEzYTM4YzBiZTI5ZDQ5NmU1ODJjZjU2NjNlODc1MWU5Njg3NzMzMTU4MmMyMzdhMjRlYjFmOTYyIl0sWyJmZjJiMGRjZTk3ZWVjZTk3YzFjOWI2MDQxNzk4Yjg1ZGZkZmI2ZDg4ODJkYTIwMzA4ZjU0MDQ4MjQ1MjYw'@;
put 'ODdlIiwiNDkzZDEzZmVmNTI0YmExODhhZjRjNGRjNTRkMDc5MzZjN2I3ZWQ2ZmI5MGUyY2ViMmM5NTFlMDFmMGMyOTkwNyJdLFsiODI3ZmJiZTRiMWU4ODBlYTllZDJiMmU2MzAxYjIxMmI1N2YxZWUxNDhjZDZkZDI4NzgwZTVlMmNmODU2ZTI0MSIsImM2MGY5YzkyM2M3MjdiMGI3MWJlZjJj'@;
put 'NjdkMWQxMjY4N2ZmN2E2MzE4NjkwMzE2NmQ2MDViNjhiYWVjMjkzZWMiXSxbImVhYTY0OWYyMWY1MWJkYmFlN2JlNGFlMzRjZTZlNTIxN2E1OGZkY2U3ZjQ3ZjlhYTdmM2I1OGZhMjEyMGUyYjMiLCJiZTMyNzllZDViYmJiMDNhYzY5YTgwZjg5ODc5YWE1YTAxYTZiOTY1ZjEzZjdlNTlkNDdh'@;
put 'NTMwNWJhNWFkOTNkIl0sWyJlNGE0MmQ0M2M1Y2YxNjlkOTM5MWRmNmRlY2Y0MmVlNTQxYjZkOGYwYzlhMTM3NDAxZTIzNjMyZGRhMzRkMjRmIiwiNGQ5ZjkyZTcxNmQxYzczNTI2ZmM5OWNjZmI4YWQzNGNlODg2ZWVkZmE4ZDhlNGYxM2E3ZjcxMzFkZWJhOTQxNCJdLFsiMWVjODBmZWYzNjBj'@;
put 'YmRkOTU0MTYwZmFkYWIzNTJiNmI5MmI1MzU3NmE4OGZlYTQ5NDcxNzNiOWQ0MzAwYmYxOSIsImFlZWZlOTM3NTZiNTM0MGQyZjNhNDk1OGE3YWJiZjVlMDE0NmU3N2Y2Mjk1YTA3YjY3MWNkYzFjYzEwN2NlZmQiXSxbIjE0NmE3NzhjMDQ2NzBjMmY5MWIwMGFmNDY4MGRmYThiY2UzNDkwNzE3'@;
put 'ZDU4YmE4ODlkZGI1OTI4MzY2NjQyYmUiLCJiMzE4ZTBlYzMzNTQwMjhhZGQ2Njk4MjdmOWQ0YjI4NzBhYWE5NzFkMmY3ZTVlZDFkMGIyOTc0ODNkODNlZmQwIl0sWyJmYTUwYzBmNjFkMjJlNWYwN2UzYWNlYmIxYWEwN2IxMjhkMDAxMjIwOWEyOGI5Nzc2ZDc2YTg3OTMxODBlZWY5IiwiNmI4'@;
put 'NGM2OTIyMzk3ZWJhOWI3MmNkMjg3MjI4MWE2OGE1ZTY4MzI5M2E1N2EyMTNiMzhjZDhkN2QzZjRmMjgxMSJdLFsiZGExZDYxZDBjYTcyMWExMWIxYTViZjZiN2Q4OGU4NDIxYTI4OGFiNWQ1YmJhNTIyMGU1M2QzMmI1ZjA2N2VjMiIsIjgxNTdmNTVhN2M5OTMwNmM3OWMwNzY2MTYxYzkxZTI5'@;
put 'NjZhNzM4OTlkMjc5YjQ4YTY1NWZiYTBmMWFkODM2ZjEiXSxbImE4ZTI4MmZmMGM5NzA2OTA3MjE1ZmY5OGU4ZmQ0MTY2MTUzMTFkZTA0NDZmMWUwNjJhNzNiMDYxMGQwNjRlMTMiLCI3Zjk3MzU1YjhkYjgxYzA5YWJmYjdmM2M1YjI1MTU4ODhiNjc5YTNlNTBkZDZiZDZjZWY3YzczMTExZjRj'@;
put 'YzBjIl0sWyIxNzRhNTNiOWM5YTI4NTg3MmQzOWU1NmU2OTEzY2FiMTVkNTliMWZhNTEyNTA4YzAyMmYzODJkZTgzMTk0OTdjIiwiY2NjOWRjMzdhYmZjOWMxNjU3YjQxNTVmMmM0N2Y5ZTY2NDZiM2ExZDhjYjk4NTQzODNkYTEzYWMwNzlhZmE3MyJdLFsiOTU5Mzk2OTgxOTQzNzg1YzNkM2U1'@;
put 'N2VkZjUwMThjZGJlMDM5ZTczMGU0OTE4YjNkODg0ZmRmZjA5NDc1YjdiYSIsIjJlN2U1NTI4ODhjMzMxZGQ4YmEwMzg2YTRiOWNkNjg0OWM2NTNmNjRjODcwOTM4NWU5YjhhYmY4NzUyNGYyZmQiXSxbImQyYTYzYTUwYWU0MDFlNTZkNjQ1YTExNTNiMTA5YThmY2NhMGE0M2Q1NjFmYmEyZGJi'@;
put 'NTEzNDBjOWQ4MmIxNTEiLCJlODJkODZmYjY0NDNmY2I3NTY1YWVlNThiMjk0ODIyMGE3MGY3NTBhZjQ4NGNhNTJkNDE0MjE3NGRjZjg5NDA1Il0sWyI2NDU4N2UyMzM1NDcxZWI4OTBlZTc4OTZkN2NmZGM4NjZiYWNiZGJkMzgzOTMxN2IzNDM2ZjliNDU2MTdlMDczIiwiZDk5ZmNkZDViZjY5'@;
put 'MDJlMmFlOTZkZDY0NDdjMjk5YTE4NWI5MGEzOTEzM2FlYWIzNTgyOTllNWU5ZmFmNjU4OSJdLFsiODQ4MWJkZTBlNGU0ZDg4NWIzYTU0NmQzZTU0OWRlMDQyZjBhYTZjZWEyNTBlN2ZkMzU4ZDZjODZkZDQ1ZTQ1OCIsIjM4ZWU3YjhjYmE1NDA0ZGQ4NGEyNWJmMzljZWNiMmNhOTAwYTc5YzQy'@;
put 'YjI2MmU1NTZkNjRiMWI1OTc3OTA1N2UiXSxbIjEzNDY0YTU3YTc4MTAyYWE2MmI2OTc5YWU4MTdmNDYzN2ZmY2ZlZDNjNGIxY2UzMGJjZDYzMDNmNmNhZjY2NmIiLCI2OWJlMTU5MDA0NjE0NTgwZWY3ZTQzMzQ1M2NjYjBjYTQ4ZjMwMGE4MWQwOTQyZTEzZjQ5NWE5MDdmNmVjYzI3Il0sWyJi'@;
put 'YzRhOWRmNWI3MTNmZTJlOWFlZjQzMGJjYzFkYzk3YTBjZDljY2VkZTJmMjg1ODhjYWRhM2EwZDJkODNmMzY2IiwiZDNhODFjYTZlNzg1YzA2MzgzOTM3YWRmNGI3OThjYWE2ZThhOWZiZmE1NDdiMTZkNzU4ZDY2NjU4MWYzM2MxIl0sWyI4YzI4YTk3YmY4Mjk4YmMwZDIzZDhjNzQ5NDUyYTMy'@;
put 'ZTY5NGI2NWUzMGE5NDcyYTM5NTRhYjMwZmU1MzI0Y2FhIiwiNDBhMzA0NjNhMzMwNTE5MzM3OGZlZGYzMWY3Y2MwZWI3YWU3ODRmMDQ1MWNiOTQ1OWU3MWRjNzNjYmVmOTQ4MiJdLFsiOGVhOTY2NjEzOTUyN2E4YzFkZDk0Y2U0ZjA3MWZkMjNjOGIzNTBjNWE0YmIzMzc0OGM0YmExMTFmYWNj'@;
put 'YWUwIiwiNjIwZWZhYmJjOGVlMjc4MmUyNGU3YzBjZmI5NWM1ZDczNWI3ODNiZTljZjBmOGU5NTVhZjM0YTMwZTYyYjk0NSJdLFsiZGQzNjI1ZmFlZjViYTA2MDc0NjY5NzE2YmJkMzc4OGQ4OWJkZGU4MTU5NTk5NjgwOTJmNzZjYzRlYjlhOTc4NyIsIjdhMTg4ZmEzNTIwZTMwZDQ2MWRhMjUw'@;
put 'MTA0NTczMWNhOTQxNDYxOTgyODgzMzk1OTM3ZjY4ZDAwYzY0NGE1NzMiXSxbImY3MTBkNzlkOWViOTYyMjk3ZTRmNjIzMmI0MGU4ZjdmZWIyYmM2MzgxNDYxNGQ2OTJjMTJkZTc1MjQwODIyMWUiLCJlYTk4ZTY3MjMyZDNiMzI5NWQzYjUzNTUzMjExNWNjYWM4NjEyYzcyMTg1MTYxNzUyNmFl'@;
put 'NDdhOWM3N2JmYzgyIl1dfSxuYWY6e3duZDo3LHBvaW50czpbWyJmOTMwOGEwMTkyNThjMzEwNDkzNDRmODVmODlkNTIyOWI1MzFjODQ1ODM2Zjk5YjA4NjAxZjExM2JjZTAzNmY5IiwiMzg4ZjdiMGY2MzJkZTgxNDBmZTMzN2U2MmEzN2YzNTY2NTAwYTk5OTM0YzIyMzFiNmNiOWZkNzU4NGI4'@;
put 'ZTY3MiJdLFsiMmY4YmRlNGQxYTA3MjA5MzU1YjRhNzI1MGE1YzUxMjhlODhiODRiZGRjNjE5YWI3Y2JhOGQ1NjliMjQwZWZlNCIsImQ4YWMyMjI2MzZlNWUzZDZkNGRiYTlkZGE2YzljNDI2Zjc4ODI3MWJhYjBkNjg0MGRjYTg3ZDNhYTZhYzYyZDYiXSxbIjVjYmRmMDY0NmU1ZGI0ZWFhMzk4'@;
put 'ZjM2NWYyZWE3YTBlM2Q0MTliN2UwMzMwZTM5Y2U5MmJkZGVkY2FjNGY5YmMiLCI2YWViY2E0MGJhMjU1OTYwYTMxNzhkNmQ4NjFhNTRkYmE4MTNkMGI4MTNmZGU3YjVhNTA4MjYyODA4NzI2NGRhIl0sWyJhY2Q0ODRlMmYwYzdmNjUzMDlhZDE3OGE5ZjU1OWFiZGUwOTc5Njk3NGM1N2U3MTRj'@;
put 'MzVmMTEwZGZjMjdjY2JlIiwiY2MzMzg5MjFiMGE3ZDlmZDY0MzgwOTcxNzYzYjYxZTlhZGQ4ODhhNDM3NWY4ZTBmMDVjYzI2MmFjNjRmOWMzNyJdLFsiNzc0YWU3Zjg1OGE5NDExZTVlZjQyNDZiNzBjNjVhYWM1NjQ5OTgwYmU1YzE3ODkxYmJlYzE3ODk1ZGEwMDhjYiIsImQ5ODRhMDMyZWI2'@;
put 'YjVlMTkwMjQzZGQ1NmQ3YjdiMzY1MzcyZGIxZTJkZmY5ZDZhODMwMWQ3NGM5Yzk1M2M2MWIiXSxbImYyODc3M2MyZDk3NTI4OGJjN2QxZDIwNWMzNzQ4NjUxYjA3NWZiYzY2MTBlNThjZGRlZWRkZjhmMTk0MDVhYTgiLCJhYjA5MDJlOGQ4ODBhODk3NTgyMTJlYjY1Y2RhZjQ3M2ExYTA2ZGE1'@;
put 'MjFmYTkxZjI5YjVjYjUyZGIwM2VkODEiXSxbImQ3OTI0ZDRmN2Q0M2VhOTY1YTQ2NWFlMzA5NWZmNDExMzFlNTk0NmYzYzg1Zjc5ZTQ0YWRiY2Y4ZTI3ZTA4MGUiLCI1ODFlMjg3MmE4NmM3MmE2ODM4NDJlYzIyOGNjNmRlZmVhNDBhZjJiZDg5NmQzYTVjNTA0ZGM5ZmY2YTI2YjU4Il0sWyJk'@;
put 'ZWZkZWE0Y2RiNjc3NzUwYTQyMGZlZTgwN2VhY2YyMWViOTg5OGFlNzliOTc2ODc2NmU0ZmFhMDRhMmQ0YTM0IiwiNDIxMWFiMDY5NDYzNTE2OGU5OTdiMGVhZDJhOTNkYWVjZWQxZjRhMDRhOTVjMGY2Y2ZiMTk5ZjY5ZTU2ZWI3NyJdLFsiMmI0ZWEwYTc5N2E0NDNkMjkzZWY1Y2ZmNDQ0ZjQ5'@;
put 'NzlmMDZhY2ZlYmQ3ZTg2ZDI3NzQ3NTY1NjEzODM4NWI2YyIsIjg1ZTg5YmMwMzc5NDVkOTNiMzQzMDgzYjVhMWM4NjEzMWEwMWY2MGM1MDI2OTc2M2I1NzBjODU0ZTVjMDliN2EiXSxbIjM1MmJiZjRhNGNkZDEyNTY0ZjkzZmEzMzJjZTMzMzMwMWQ5YWQ0MDI3MWY4MTA3MTgxMzQwYWVmMjVi'@;
put 'ZTU5ZDUiLCIzMjFlYjQwNzUzNDhmNTM0ZDU5YzE4MjU5ZGRhM2UxZjRhMWIzYjJlNzFiMTAzOWM2N2JkM2Q4YmNmODE5OThjIl0sWyIyZmEyMTA0ZDZiMzhkMTFiMDIzMDAxMDU1OTg3OTEyNGU0MmFiOGRmZWZmNWZmMjlkYzljZGFkZDRlY2FjYzNmIiwiMmRlMTA2ODI5NWRkODY1YjY0NTY5'@;
put 'MzM1YmQ1ZGQ4MDE4MWQ3MGVjZmM4ODI2NDg0MjNiYTc2YjUzMmI3ZDY3Il0sWyI5MjQ4Mjc5YjA5YjRkNjhkYWIyMWE5YjA2NmVkZGE4MzI2M2MzZDg0ZTA5NTcyZTI2OWNhMGNkN2Y1NDUzNzE0IiwiNzMwMTZmN2JmMjM0YWFkZTVkMWFhNzFiZGVhMmIxZmYzZmMwZGUyYTg4NzkxMmZmZTU0'@;
put 'YTMyY2U5N2NiMzQwMiJdLFsiZGFlZDRmMmJlM2E4YmYyNzhlNzAxMzJmYjBiZWI3NTIyZjU3MGUxNDRiZjYxNWMwN2U5OTZkNDQzZGVlODcyOSIsImE2OWRjZTRhN2Q2Yzk4ZThkNGExYWNhODdlZjhkNzAwM2Y4M2MyMzBmM2FmYTcyNmFiNDBlNTIyOTBiZTFjNTUiXSxbImM0NGQxMmM3MDY1'@;
put 'ZDgxMmU4YWNmMjhkN2NiYjE5ZjkwMTFlY2Q5ZTlmZGYyODFiMGU2YTNiNWU4N2QyMmU3ZGIiLCIyMTE5YTQ2MGNlMzI2Y2RjNzZjNDU5MjZjOTgyZmRhYzBlMTA2ZTg2MWVkZjYxYzVhMDM5MDYzZjBlMGU2NDgyIl0sWyI2YTI0NWJmNmRjNjk4NTA0Yzg5YTIwY2ZkZWQ2MDg1MzE1MmI2OTUz'@;
put 'MzZjMjgwNjNiNjFjNjVjYmQyNjllNmI0IiwiZTAyMmNmNDJjMmJkNGE3MDhiM2Y1MTI2ZjE2YTI0YWQ4YjMzYmE0OGQwNDIzYjZlZmQ1ZTYzNDgxMDBkOGE4MiJdLFsiMTY5N2ZmYTZmZDlkZTYyN2MwNzdlM2QyZmU1NDEwODRjZTEzMzAwYjBiZWMxMTQ2Zjk1YWU1N2YwZDBiZDZhNSIsImI5'@;
put 'YzM5OGYxODY4MDZmNWQyNzU2MTUwNmU0NTU3NDMzYTJjZjE1MDA5ZTQ5OGFlN2FkZWU5ZDYzZDAxYjIzOTYiXSxbIjYwNWJkYjAxOTk4MTcxOGI5ODZkMGYwN2U4MzRjYjBkOWRlYjgzNjBmZmI3ZjYxZGY5ODIzNDVlZjI3YTc0NzkiLCIyOTcyZDJkZTRmOGQyMDY4MWE3OGQ5M2VjOTZmZTIz'@;
put 'YzI2YmZhZTg0ZmIxNGRiNDNiMDFlMWU5MDU2YjhjNDkiXSxbIjYyZDE0ZGFiNDE1MGJmNDk3NDAyZmRjNDVhMjE1ZTEwZGNiMDFjMzU0OTU5YjEwY2ZlMzFjN2U5ZDg3ZmYzM2QiLCI4MGZjMDZiZDhjYzViMDEwOTgwODhhMTk1MGVlZDBkYjAxYWExMzI5NjdhYjQ3MjIzNWY1NjQyNDgzYjI1'@;
put 'ZWFmIl0sWyI4MGM2MGFkMDA0MGYyN2RhZGU1YjRiMDZjNDA4ZTU2YjJjNTBlOWY1NmI5YjhiNDI1ZTU1NWMyZjg2MzA4YjZmIiwiMWMzODMwM2YxY2M1YzMwZjI2ZTY2YmFkN2ZlNzJmNzBhNjVlZWQ0Y2JlNzAyNGViMWFhMDFmNTY0MzBiZDU3YSJdLFsiN2E5Mzc1YWQ2MTY3YWQ1NGFhNzRj'@;
put 'NjM0OGNjNTRkMzQ0Y2M1ZGM5NDg3ZDg0NzA0OWQ1ZWFiYjBmYTAzYzhmYiIsImQwZTNmYTllY2E4NzI2OTA5NTU5ZTBkNzkyNjkwNDZiZGM1OWVhMTBjNzBjZTJiMDJkNDk5ZWMyMjRkYzdmNyJdLFsiZDUyOGVjZDliNjk2YjU0YzkwN2E5ZWQwNDU0NDdhNzliYjQwOGVjMzliNjhkZjUwNGJi'@;
put 'NTFmNDU5YmMzZmZjOSIsImVlY2Y0MTI1MzEzNmU1Zjk5OTY2ZjIxODgxZmQ2NTZlYmM0MzQ1NDA1YzUyMGRiYzA2MzQ2NWI1MjE0MDk5MzMiXSxbIjQ5MzcwYTRiNWY0MzQxMmVhMjVmNTE0ZThlY2RhZDA1MjY2MTE1ZTRhN2VjYjEzODcyMzE4MDhmOGI0NTk2MyIsIjc1OGYzZjQxYWZkNmVk'@;
put 'NDI4YjMwODFiMDUxMmZkNjJhNTRjM2YzYWZiYjViNjc2NGI2NTMwNTJhMTI5NDljOWEiXSxbIjc3ZjIzMDkzNmVlODhjYmJkNzNkZjkzMGQ2NDcwMmVmODgxZDgxMWUwZTE0OThlMmYxYzEzZWIxZmMzNDVkNzQiLCI5NThlZjQyYTc4ODZiNjQwMGEwODI2NmU5YmExYjM3ODk2Yzk1MzMwZDk3'@;
put 'MDc3Y2JiZThlYjNjNzY3MWM2MGQ2Il0sWyJmMmRhYzk5MWNjNGNlNGI5ZWE0NDg4N2U1YzdjMGJjZTU4YzgwMDc0YWI5ZDRkYmFlYjI4NTMxYjc3MzlmNTMwIiwiZTBkZWRjOWIzYjJmOGRhZDRkYTFmMzJkZWMyNTMxZGY5ZWI1ZmJlYjA1OThlNGZkMWExMTdkYmE3MDNhM2MzNyJdLFsiNDYz'@;
put 'YjNkOWY2NjI2MjFmYjFiNGJlOGZiYmUyNTIwMTI1YTIxNmNkZmM5ZGFlM2RlYmNiYTQ4NTBjNjkwZDQ1YiIsIjVlZDQzMGQ3OGMyOTZjMzU0MzExNDMwNmRkODYyMmQ3YzYyMmUyN2M5NzBhMWRlMzFjYjM3N2IwMWFmNzMwN2UiXSxbImYxNmY4MDQyNDRlNDZlMmEwOTIzMmQ0YWZmM2I1OTk3'@;
put 'NmI5OGZhYzE0MzI4YTJkMWEzMjQ5NmI0OTk5OGYyNDciLCJjZWRhYmQ5YjgyMjAzZjdlMTNkMjA2ZmNkZjRlMzNkOTJhNmM1M2MyNmU1Y2NlMjZkNjU3OTk2MmM0ZTMxZGY2Il0sWyJjYWY3NTQyNzJkYzg0NTYzYjAzNTJiN2ExNDMxMWFmNTVkMjQ1MzE1YWNlMjdjNjUzNjllMTVmNzE1MWQ0'@;
put 'MWQxIiwiY2I0NzQ2NjBlZjM1ZjVmMmE0MWI2NDNmYTVlNDYwNTc1ZjRmYTliNzk2MjIzMmE1YzMyZjkwODMxOGEwNDQ3NiJdLFsiMjYwMGNhNGIyODJjYjk4NmY4NWQwZjE3MDk5NzlkOGI0NGEwOWMwN2NiODZkN2MxMjQ0OTdiYzg2ZjA4MjEyMCIsIjQxMTliODg3NTNjMTViZDZhNjkzYjAz'@;
put 'ZmNkZGJiNDVkNWFjNmJlNzRhYjVmMGVmNDRiMGJlOTQ3NWE3ZTRiNDAiXSxbIjc2MzVjYTcyZDdlODQzMmMzMzhlYzUzY2QxMjIyMGJjMDFjNDg2ODVlMjRmN2RjOGM2MDJhNzc0Njk5OGU0MzUiLCI5MWI2NDk2MDk0ODlkNjEzZDFkNWU1OTBmNzhlNmQ3NGVjZmMwNjFkNTcwNDhiYWQ5ZTc2'@;
put 'ZjMwMmM1YjljNjEiXSxbIjc1NGUzMjM5ZjMyNTU3MGNkYmJmNGE4N2RlZWU4YTY2YjdmMmIzMzQ3OWQ0NjhmYmMxYTUwNzQzYmY1NmNjMTgiLCI2NzNmYjg2ZTViZGEzMGZiM2NkMGVkMzA0ZWE0OWEwMjNlZTMzZDAxOTdhNjk1ZDBjNWQ5ODA5M2M1MzY2ODMiXSxbImUzZTZiZDEwNzFhMWU5'@;
put 'NmFmZjU3ODU5YzgyZDU3MGYwMzMwODAwNjYxZDFjOTUyZjlmZTI2OTQ2OTFkOWI5ZTgiLCI1OWM5ZTBiYmEzOTRlNzZmNDBjMGFhNTgzNzlhM2NiNmE1YTIyODM5OTNlOTBjNDE2NzAwMmFmNDkyMGUzN2Y1Il0sWyIxODZiNDgzZDA1NmEwMzM4MjZhZTczZDg4ZjczMjk4NWM0Y2NiMWYzMmJh'@;
put 'MzVmNGI0Y2M0N2ZkY2YwNGFhNmViIiwiM2I5NTJkMzJjNjdjZjc3ZTJlMTc0NDZlMjA0MTgwYWIyMWZiODA5MDg5NTEzOGI0YTRhNzk3Zjg2ZTgwODg4YiJdLFsiZGY5ZDcwYTZiOTg3NmNlNTQ0Yzk4NTYxZjRiZTRmNzI1NDQyZTZkMmI3MzdkOWM5MWE4MzIxNzI0Y2UwOTYzZiIsIjU1ZWIy'@;
put 'ZGFmZDg0ZDZjY2Q1Zjg2MmI3ODVkYzM5ZDRhYjE1NzIyMjcyMGVmOWRhMjE3YjhjNDVjZjJiYTI0MTciXSxbIjVlZGQ1Y2MyM2M1MWU4N2E0OTdjYTgxNWQ1ZGNlMGY4YWI1MjU1NGY4NDllZDg5OTVkZTY0YzVmMzRjZTcxNDMiLCJlZmFlOWM4ZGJjMTQxMzA2NjFlOGNlYzAzMGM4OWFkMGMx'@;
put 'M2M2NmMwZDE3YTI5MDVjZGM3MDZhYjczOTlhODY4Il0sWyIyOTA3OThjMmI2NDc2ODMwZGExMmZlMDIyODdlOWU3NzdhYTNmYmExYzM1NWIxN2E3MjJkMzYyZjg0NjE0ZmJhIiwiZTM4ZGE3NmRjZDQ0MDYyMTk4OGQwMGJjZjc5YWYyNWQ1YjI5YzA5NGRiMmEyMzE0NmQwMDNhZmQ0MTk0M2U3'@;
put 'YSJdLFsiYWYzYzQyM2E5NWQ5ZjViMzA1NDc1NGVmYTE1MGFjMzljZDI5NTUyZmUzNjAyNTczNjJkZmRlY2VmNDA1M2I0NSIsImY5OGEzZmQ4MzFlYjJiNzQ5YTkzYjBlNmYzNWNmYjQwYzhjZDVhYTY2N2ExNTU4MWJjMmZlZGVkNDk4ZmQ5YzYiXSxbIjc2NmRiYjI0ZDEzNGU3NDVjY2NhYTI4'@;
put 'Yzk5YmYyNzQ5MDZiYjY2YjI2ZGNmOThkZjhkMmZlZDUwZDg4NDI0OWEiLCI3NDRiMTE1MmVhY2JlNWUzOGRjYzg4Nzk4MGRhMzhiODk3NTg0YTY1ZmEwNmNlZGQyYzkyNGY5N2NiYWM1OTk2Il0sWyI1OWRiZjQ2ZjhjOTQ3NTliYTIxMjc3YzMzNzg0ZjQxNjQ1ZjdiNDRmNmM1OTZhNThjZTky'@;
put 'ZTY2NjE5MWFiZTNlIiwiYzUzNGFkNDQxNzVmYmMzMDBmNGVhNmNlNjQ4MzA5YTA0MmNlNzM5YTc5MTk3OThjZDg1ZTIxNmM0YTMwN2Y2ZSJdLFsiZjEzYWRhOTUxMDNjNDUzNzMwNWU2OTFlNzRlOWE0YThkZDY0N2U3MTFhOTVlNzNjYjYyZGM2MDE4Y2ZkODdiOCIsImUxMzgxN2I0NGVlMTRk'@;
put 'ZTY2M2JmNGJjODA4MzQxZjMyNjk0OWUyMWE2YTc1YzI1NzA3Nzg0MTliZGFmNTczM2QiXSxbIjc3NTRiNGZhMGU4YWNlZDA2ZDQxNjdhMmM1OWNjYTRjZGExODY5YzA2ZWJhZGZiNjQ4ODU1MDAxNWE4ODUyMmMiLCIzMGU5M2U4NjRlNjY5ZDgyMjI0Yjk2N2MzMDIwYjhmYThkMWU0ZTM1MGI2'@;
put 'Y2JjYzUzN2E0OGI1Nzg0MTE2M2EyIl0sWyI5NDhkY2FkZjU5OTBlMDQ4YWEzODc0ZDQ2YWJlZjlkNzAxODU4Zjk1ZGU4MDQxZDJhNjgyOGM5OWUyMjYyNTE5IiwiZTQ5MWE0MjUzN2Y2ZTU5N2Q1ZDI4YTMyMjRiMWJjMjVkZjkxNTRlZmJkMmVmMWQyY2JiYTJjYWU1MzQ3ZDU3ZSJdLFsiNzk2'@;
put 'MjQxNDQ1MGM3NmMxNjg5YzdiNDhmODIwMmVjMzdmYjIyNGNmNWFjMGJmYTE1NzAzMjhhOGEzZDdjNzdhYiIsIjEwMGI2MTBlYzRmZmI0NzYwZDVjMWZjMTMzZWY2ZjZiMTI1MDdhMDUxZjA0YWM1NzYwYWZhNWIyOWRiODM0MzciXSxbIjM1MTQwODc4MzQ5NjRiNTRiMTViMTYwNjQ0ZDkxNTQ4'@;
put 'NWExNjk3NzIyNWI4ODQ3YmIwZGQwODUxMzdlYzQ3Y2EiLCJlZjBhZmJiMjA1NjIwNTQ0OGUxNjUyYzQ4ZTgxMjdmYzYwMzllNzdjMTVjMjM3OGI3ZTdkMTVhMGRlMjkzMzExIl0sWyJkM2NjMzBhZDZiNDgzZTRiYzc5Y2UyYzlkZDhiYzU0OTkzZTk0N2ViOGRmNzg3YjQ0Mjk0M2QzZjdiNTI3'@;
put 'ZWFmIiwiOGIzNzhhMjJkODI3Mjc4ZDg5YzVlOWJlOGY5NTA4YWUzYzJhZDQ2MjkwMzU4NjMwYWZiMzRkYjA0ZWVkZTBhNCJdLFsiMTYyNGQ4NDc4MDczMjg2MGNlMWM3OGZjYmZlZmUwOGIyYjI5ODIzZGI5MTNmNjQ5Mzk3NWJhMGZmNDg0NzYxMCIsIjY4NjUxY2Y5YjZkYTkwM2UwOTE0NDQ4'@;
put 'YzZjZDlkNGNhODk2ODc4ZjUyODJiZTRjOGNjMDZlMmE0MDQwNzg1NzUiXSxbIjczM2NlODBkYTk1NWE4YTI2OTAyYzk1NjMzZTYyYTk4NTE5MjQ3NGI1YWYyMDdkYTZkZjdiNGZkNWZjNjFjZDQiLCJmNTQzNWEyYmQyYmFkZjdkNDg1YTRkOGI4ZGI5ZmNjZTNlMWVmOGUwMjAxZTQ1NzhjNTQ2'@;
put 'NzNiYzFkYzVlYTFkIl0sWyIxNWQ5NDQxMjU0OTQ1MDY0Y2YxYTFjMzNiYmQzYjQ5Zjg5NjZjNTA5MjE3MWU2OTllZjI1OGRmYWI4MWMwNDVjIiwiZDU2ZWIzMGI2OTQ2M2U3MjM0ZjUxMzdiNzNiODQxNzc0MzQ4MDBiYWNlYmZjNjg1ZmMzN2JiZTllZmU0MDcwZCJdLFsiYTFkMGZjZjJlYzlk'@;
put 'ZTY3NWI2MTIxMzZlNWNlNzBkMjcxYzIxNDE3YzlkMmI4YWFhYWMxMzg1OTlkMDcxNzk0MCIsImVkZDc3ZjUwYmNiNWEzY2FiMmU5MDczNzMwOTY2N2YyNjQxNDYyYTU0MDcwZjNkNTE5MjEyZDM5YzE5N2E2MjkiXSxbImUyMmZiZTE1YzBhZjhjY2M1NzgwYzA3MzVmODRkYmU5YTc5MGJhZGVl'@;
put 'ODI0NWMwNmM3Y2EzNzMzMWNiMzY5ODAiLCJhODU1YmFiYWQ1Y2Q2MGM4OGI0MzBhNjlmNTNhMWE3YTM4Mjg5MTU0OTY0Nzk5YmU0M2QwNmQ3N2QzMWRhMDYiXSxbIjMxMTA5MWRkOTg2MGU4ZTIwZWUxMzQ3M2MxMTU1ZjVmNjk2MzVlMzk0NzA0ZWFhNzQwMDk0NTIyNDZjZmE5YjMiLCI2NmRi'@;
put 'NjU2Zjg3ZDFmMDRmZmZkMWYwNDc4OGMwNjgzMDg3MWVjNWE2NGZlZWU2ODViZDgwZjBiMTI4NmQ4Mzc0Il0sWyIzNGMxZmQwNGQzMDFiZTg5YjMxYzA0NDJkM2U2YWMyNDg4MzkyOGI0NWE5MzQwNzgxODY3ZDQyMzJlYzJkYmRmIiwiOTQxNDY4NWU5N2IxYjU5NTRiZDQ2ZjczMDE3NDEzNmQ1'@;
put 'N2YxY2VlYjQ4NzQ0M2RjNTMyMTg1N2JhNzNhYmVlIl0sWyJmMjE5ZWE1ZDZiNTQ3MDFjMWMxNGRlNWI1NTdlYjQyYThkMTNmM2FiYmNkMDhhZmZjYzJhNWU2YjA0OWI4ZDYzIiwiNGNiOTU5NTdlODNkNDBiMGY3M2FmNDU0NGNjY2Y2YjFmNGIwOGQzYzA3YjI3ZmI4ZDhjMjk2MmE0MDA3NjZk'@;
put 'MSJdLFsiZDdiODc0MGY3NGE4ZmJhYWIxZjY4M2RiOGY0NWRlMjY1NDNhNTQ5MGJjYTYyNzA4NzIzNjkxMjQ2OWEwYjQ0OCIsImZhNzc5NjgxMjhkOWM5MmVlMTAxMGYzMzdhZDQ3MTdlZmYxNWRiNWVkM2MwNDliMzQxMWUwMzE1ZWFhNDU5M2IiXSxbIjMyZDMxYzIyMmY4ZjZmMGVmODZmN2M5'@;
put 'OGQzYTMzMzVlYWQ1YmNkMzJhYmRkOTQyODlmZTRkMzA5MWFhODI0YmYiLCI1ZjMwMzJmNTg5MjE1NmUzOWNjZDNkNzkxNWI5ZTFkYTJlNmRhYzllNmYyNmU5NjExMThkMTRiODQ2MmUxNjYxIl0sWyI3NDYxZjM3MTkxNGFiMzI2NzEwNDVhMTU1ZDk4MzFlYTg3OTNkNzdjZDU5NTkyYzQzNDBm'@;
put 'ODZjYmMxODM0N2I1IiwiOGVjMGJhMjM4Yjk2YmVjMGNiZGRkY2FlMGFhNDQyNTQyZWVlMWZmNTBjOTg2ZWE2YjM5ODQ3YjNjYzA5MmZmNiJdLFsiZWUwNzlhZGIxZGYxODYwMDc0MzU2YTI1YWEzODIwNmE2ZDcxNmIyYzNlNjc0NTNkMjg3Njk4YmFkN2IyYjJkNiIsIjhkYzI0MTJhYWZlM2Jl'@;
put 'NWM0YzVmMzdlMGVjYzVmOWY2YTQ0Njk4OWFmMDRjNGUyNWViYWFjNDc5ZWMxYzhjMWUiXSxbIjE2ZWM5M2U0NDdlYzgzZjA0NjdiMTgzMDJlZTYyMGY3ZTY1ZGUzMzE4NzRjOWRjNzJiZmQ4NjE2YmE5ZGE2YjUiLCI1ZTQ2MzExNTBlNjJmYjQwZDBlOGMyYTdjYTU4MDRhMzlkNTgxODZhNTBl'@;
put 'NDk3MTM5NjI2Nzc4ZTI1YjA2NzRkIl0sWyJlYWE1Zjk4MGMyNDVmNmYwMzg5NzgyOTBhZmE3MGI2YmQ4ODU1ODk3Zjk4YjZhYTQ4NWI5NjA2NWQ1MzdiZDk5IiwiZjY1ZjVkM2UyOTJjMmUwODE5YTUyODM5MWM5OTQ2MjRkNzg0ODY5ZDdlNmVhNjdmYjE4MDQxMDI0ZWRjMDdkYyJdLFsiNzhj'@;
put 'OTQwNzU0NGFjMTMyNjkyZWUxOTEwYTAyNDM5OTU4YWUwNDg3NzE1MTM0MmVhOTZjNGI2YjM1YTQ5ZjUxIiwiZjNlMDMxOTE2OWViOWI4NWQ1NDA0Nzk1NTM5YTVlNjhmYTFmYmQ1ODNjMDY0ZDI0NjJiNjc1ZjE5NGEzZGRiNCJdLFsiNDk0ZjRiZTIxOWExYTc3MDE2ZGNkODM4NDMxYWVhMDAw'@;
put 'MWNkYzhhZTdhNmZjNjg4NzI2NTc4ZDk3MDI4NTdhNSIsIjQyMjQyYTk2OTI4M2E1ZjMzOWJhN2YwNzVlMzZiYTJhZjkyNWNlMzBkNzY3ZWQ2ZTU1ZjRiMDMxODgwZDU2MmMiXSxbImE1OThhODAzMGRhNmQ4NmM2YmM3ZjJmNTE0NGVhNTQ5ZDI4MjExZWE1OGZhYTcwZWJmNGMxZTY2NWMxZmU5'@;
put 'YjUiLCIyMDRiNWQ2Zjg0ODIyYzMwN2U0YjRhNzE0MDczN2FlYzIzZmM2M2I2NWIzNWY4NmExMDAyNmRiZDJkODY0ZTZiIl0sWyJjNDE5MTYzNjVhYmIyYjVkMDkxOTJmNWYyZGJlYWZlYzIwOGYwMjBmMTI1NzBhMTg0ZGJhZGMzZTU4NTk1OTk3IiwiNGYxNDM1MWQwMDg3ZWZhNDlkMjQ1YjMy'@;
put 'ODk4NDk4OWQ1Y2FmOTQ1MGYzNGJmYzBlZDE2ZTk2YjU4ZmE5OTEzIl0sWyI4NDFkNjA2M2E1ODZmYTQ3NWE3MjQ2MDRkYTAzYmM1YjkyYTJlMGQyZTBhMzZhY2ZlNGM3M2E1NTE0NzQyODgxIiwiNzM4NjdmNTljMDY1OWU4MTkwNGY5YTFjNzU0MzY5OGU2MjU2MmQ2NzQ0YzE2OWNlN2EzNmRl'@;
put 'MDFhOGQ2MTU0Il0sWyI1ZTk1YmIzOTlhNjk3MWQzNzYwMjY5NDdmODliZGUyZjI4MmIzMzgxMDkyOGJlNGRlZDExMmFjNGQ3MGUyMGQ1IiwiMzlmMjNmMzY2ODA5MDg1YmVlYmZjNzExODEzMTM3NzVhOTljOWFlZDdkOGJhMzhiMTYxMzg0Yzc0NjAxMjg2NSJdLFsiMzZlNDY0MWE1Mzk0OGZk'@;
put 'NDc2YzM5ZjhhOTlmZDk3NGU1ZWMwNzU2NGI1MzE1ZDhiZjk5NDcxYmNhMGVmMmY2NiIsImQyNDI0YjFiMWFiZTRlYjgxNjQyMjdiMDg1YzlhYTk0NTZlYTEzNDkzZmQ1NjNlMDZmZDUxY2Y1Njk0Yzc4ZmMiXSxbIjMzNjU4MWVhN2JmYmJiMjkwYzE5MWEyZjUwN2E0MWNmNTY0Mzg0MjE3MGU5'@;
put 'MTRmYWVhYjI3YzJjNTc5ZjcyNiIsImVhZDEyMTY4NTk1ZmUxYmU5OTI1MjEyOWI2ZTU2YjMzOTFmN2FiMTQxMGNkMWUwZWYzZGNkY2FiZDJmZGEyMjQiXSxbIjhhYjg5ODE2ZGFkZmQ2YjZhMWYyNjM0ZmNmMDBlYzg0MDM3ODEwMjVlZDY4OTBjNDg0OTc0MjcwNmJkNDNlZGUiLCI2ZmRjZWYw'@;
put 'OWYyZjZkMGEwNDRlNjU0YWVmNjI0MTM2ZjUwM2Q0NTljM2U4OTg0NTg1OGE0N2E5MTI5Y2RkMjRlIl0sWyIxZTMzZjFhNzQ2YzljNTc3ODEzMzM0NGQ5Mjk5ZmNhYTIwYjA5MzhlOGFjZmYyNTQ0YmI0MDI4NGI4YzVmYjk0IiwiNjA2NjAyNTdkZDExYjNhYTljOGVkNjE4ZDI0ZWRmZjIzMDZk'@;
put 'MzIwZjFkMDMwMTBlMzNhN2QyMDU3ZjNiM2I2Il0sWyI4NWI3YzFkY2IzY2VjMWI3ZWU3ZjMwZGVkNzlkZDIwYTBlZDFmNGNjMThjYmNmY2ZhNDEwMzYxZmQ4ZjA4ZjMxIiwiM2Q5OGE5Y2RkMDI2ZGQ0M2YzOTA0OGYyNWE4ODQ3ZjRmY2FmYWQxODk1ZDdhNjMzYzZmZWQzYzM1ZTk5OTUxMSJd'@;
put 'LFsiMjlkZjlmYmQ4ZDllNDY1MDkyNzVmNGIxMjVkNmQ0NWQ3ZmJlOWEzYjg3OGE3YWY4NzJhMjgwMDY2MWFjNWY1MSIsImI0YzRmZTk5Yzc3NWE2MDZlMmQ4ODYyMTc5MTM5ZmZkYTYxZGM4NjFjMDE5ZTU1Y2QyODc2ZWIyYTI3ZDg0YiJdLFsiYTBiMWNhZTA2YjBhODQ3YTNmZWE2ZTY3MWFh'@;
put 'ZjhhZGZkZmU1OGNhMmY3NjgxMDVjODA4MmIyZTQ0OWZjZTI1MiIsImFlNDM0MTAyZWRkZTA5NThlYzRiMTlkOTE3YTZhMjhlNmI3MmRhMTgzNGFmZjBlNjUwZjA0OTUwM2EyOTZjZjIiXSxbIjRlOGNlYWZiOWIzZTlhMTM2ZGM3ZmY2N2U4NDAyOTViNDk5ZGZiM2IyMTMzZTRiYTExM2YyZTRj'@;
put 'MGUxMjFlNSIsImNmMjE3NDExOGM4YjZkN2E0YjQ4ZjZkNTM0Y2U1Yzc5NDIyYzA4NmE2MzQ2MDUwMmI4MjdjZTYyYTMyNjY4M2MiXSxbImQyNGE0NGUwNDdlMTliNmY1YWZiODFjN2NhMmY2OTA4MGE1MDc2Njg5YTAxMDkxOWY0MjcyNWMyYjc4OWEzM2IiLCI2ZmI4ZDU1OTFiNDY2ZjhmYzYz'@;
put 'ZGI1MGYxYzBmMWM2OTAxM2Y5OTY4ODdiODI0NGQyY2RlYzQxN2FmZWE4ZmEzIl0sWyJlYTAxNjA2YTdhNmM5Y2RkMjQ5ZmRmY2ZhY2I5OTU4NDAwMWVkZDI4YWJiYWI3N2I1MTA0ZTk4ZThlM2IzNWQ0IiwiMzIyYWY0OTA4YzczMTJiMGNmYmZlMzY5ZjdhN2IzY2RiN2Q0NDk0YmMyODIzNzAw'@;
put 'Y2ZkNjUyMTg4YTNlYTk4ZCJdLFsiYWY4YWRkYmYyYjY2MWM4YTZjNjMyODY1NWViOTY2NTEyNTIwMDdkOGM1ZWEzMWJlNGFkMTk2ZGU4Y2UyMTMxZiIsIjY3NDllNjdjMDI5Yjg1ZjUyYTAzNGVhZmQwOTY4MzZiMjUyMDgxODY4MGUyNmFjOGYzZGZiY2RiNzE3NDk3MDAiXSxbImUzYWUxOTc0'@;
put 'NTY2Y2EwNmNjNTE2ZDQ3ZTBmYjE2NWE2NzRhM2RhYmNmY2ExNWU3MjJmMGUzNDUwZjQ1ODg5IiwiMmFlYWJlN2U0NTMxNTEwMTE2MjE3ZjA3YmY0ZDA3MzAwZGU5N2U0ODc0ZjgxZjUzMzQyMGE3MmVlYjBiZDZhNCJdLFsiNTkxZWUzNTUzMTNkOTk3MjFjZjY5OTNmZmVkMWUzZTMwMTk5M2Zm'@;
put 'M2VkMjU4ODAyMDc1ZWE4Y2VkMzk3ZTI0NiIsImIwZWE1NThhMTEzYzMwYmVhNjBmYzQ3NzU0NjBjNzkwMWZmMGIwNTNkMjVjYTJiZGVlZTk4ZjFhNGJlNWQxOTYiXSxbIjExMzk2ZDU1ZmRhNTRjNDlmMTlhYTk3MzE4ZDhkYTYxZmE4NTg0ZTQ3YjA4NDk0NTA3N2NmMDMyNTViNTI5ODQiLCI5'@;
put 'OThjNzRhOGNkNDVhYzAxMjg5ZDU4MzNhN2JlYjQ3NDRmZjUzNmIwMWIyNTdiZTRjNTc2N2JlYTkzZWE1N2E0Il0sWyIzYzVkMmExYmEzOWM1YTE3OTAwMDA3MzhjOWUwYzQwYjhkY2RmZDU0Njg3NTRiNjQwNTU0MDE1N2UwMTdhYTdhIiwiYjIyODQyNzk5OTVhMzRlMmY5ZDRkZTczOTZmYzE4'@;
put 'YjgwZjliOGI5ZmRkMjcwZjY2NjFmNzljYTRjODFiZDI1NyJdLFsiY2M4NzA0YjhhNjBhMGRlZmEzYTk5YTcyOTlmMmU5YzNmYmMzOTVhZmIwNGFjMDc4NDI1ZWY4YTE3OTNjYzAzMCIsImJkZDQ2MDM5ZmVlZDE3ODgxZDFlMDg2MmRiMzQ3ZjhjZjM5NWI3NGZjNGJjZGM0ZTk0MGI3NGUzYWMx'@;
put 'ZjFiMTMiXSxbImM1MzNlNGY3ZWE4NTU1YWFjZDk3NzdhYzVjYWQyOWI5N2RkNGRlZmNjYzUzZWU3ZWEyMDQxMTliMjg4OWIxOTciLCI2ZjBhMjU2YmM1ZWZkZjQyOWEyZmI2MjQyZjFhNDNhMmQ5YjkyNWJiNGE0YjNhMjZiYjhlMGY0NWViNTk2MDk2Il0sWyJjMTRmOGYyY2NiMjdkNmYxMDlm'@;
put 'NmQwOGQwM2NjOTZhNjliYThjMzRlZWMwN2JiY2Y1NjZkNDhlMzNkYTY1OTMiLCJjMzU5ZDY5MjNiYjM5OGY3ZmQ0NDczZTE2ZmUxYzI4NDc1Yjc0MGRkMDk4MDc1ZTZjMGU4NjQ5MTEzZGMzYTM4Il0sWyJhNmNiYzMwNDZiYzZhNDUwYmFjMjQ3ODlmYTE3MTE1YTRjOTczOWVkNzVmOGYyMWNl'@;
put 'NDQxZjcyZTBiOTBlNmVmIiwiMjFhZTdmNDY4MGU4ODliYjEzMDYxOWUyYzBmOTVhMzYwY2ViNTczYzcwNjAzMTM5ODYyYWZkNjE3ZmE5YjlmIl0sWyIzNDdkNmQ5YTAyYzQ4OTI3ZWJmYjg2YzEzNTliMWNhZjEzMGEzYzAyNjdkMTFjZTYzNDRiMzlmOTlkNDNjYzM4IiwiNjBlYTdmNjFhMzUz'@;
put 'NTI0ZDFjOTg3ZjZlY2VjOTJmMDg2ZDU2NWFiNjg3ODcwY2IxMjY4OWZmMWUzMWM3NDQ0OCJdLFsiZGE2NTQ1ZDIxODFkYjhkOTgzZjdkY2IzNzVlZjU4NjZkNDdjNjdiMWJmMzFjOGNmODU1ZWY3NDM3YjcyNjU2YSIsIjQ5Yjk2NzE1YWI2ODc4YTc5ZTc4ZjA3Y2U1NjgwYzVkNjY3MzA1MWI0'@;
put 'OTM1YmQ4OTdmZWE4MjRiNzdkYzIwOGEiXSxbImM0MDc0N2NjOWQwMTJjYjFhMTNiODE0ODMwOWM2ZGU3ZWMyNWQ2OTQ1ZDY1NzE0NmI5ZDU5OTRiOGZlYjExMTEiLCI1Y2E1NjA3NTNiZTJhMTJmYzZkZTZjYWYyY2I0ODk1NjVkYjkzNjE1NmI5NTE0ZTFiYjVlODMwMzdlMGZhMmQ0Il0sWyI0'@;
put 'ZTQyYzhlYzgyYzk5Nzk4Y2NmM2E2MTBiZTg3MGU3ODMzOGM3ZjcxMzM0OGJkMzRjODIwM2VmNDAzN2YzNTAyIiwiNzU3MWQ3NGVlNWUwZmI5MmE3YThiMzNhMDc3ODMzNDFhNTQ5MjE0NGNjNTRiY2M0MGE5NDQ3MzY5MzYwNjQzNyJdLFsiMzc3NWFiNzA4OWJjNmFmODIzYWJhMmUxYWY3MGIy'@;
put 'MzZkMjUxY2FkYjBjODY3NDMyODc1MjJhMWIzYjBkZWRlYSIsImJlNTJkMTA3YmNmYTA5ZDhiY2I5NzM2YTgyOGNmYTdmYWM4ZGIxN2JmN2E3NmEyYzQyYWQ5NjE0MDkwMThjZjciXSxbImNlZTMxY2JmN2UzNGVjMzc5ZDk0ZmI4MTRkM2Q3NzVhZDk1NDU5NWQxMzE0YmE4ODQ2OTU5ZTNlODJm'@;
put 'NzRlMjYiLCI4ZmQ2NGExNGMwNmI1ODljMjZiOTQ3YWUyYmNmNmJmYTAxNDllZjBiZTE0ZWQ0ZDgwZjQ0OGEwMWM0M2IxYzZkIl0sWyJiNGY5ZWFlYTA5YjY5MTc2MTlmNmVhNmE0ZWI1NDY0ZWZkZGI1OGZkNDViMWViZWZjZGMxYTAxZDA4YjQ3OTg2IiwiMzllNWM5OTI1YjVhNTRiMDc0MzNh'@;
put 'NGYxOGM2MTcyNmY4YmIxMzFjMDEyY2E1NDJlYjI0YThhYzA3MjAwNjgyYSJdLFsiZDQyNjNkZmMzZDJkZjkyM2EwMTc5YTQ4OTY2ZDMwY2U4NGUyNTE1YWZjM2RjY2MxYjc3OTA3NzkyZWJjYzYwZSIsIjYyZGZhZjA3YTBmNzhmZWIzMGUzMGQ2Mjk1ODUzY2UxODllMTI3NzYwYWQ2Y2Y3ZmFl'@;
put 'MTY0ZTEyMmEyMDhkNTQiXSxbIjQ4NDU3NTI0ODIwZmE2NWE0ZjhkMzVlYjY5MzA4NTdjMDAzMmFjYzBhNGEyZGU0MjIyMzNlZWRhODk3NjEyYzQiLCIyNWE3NDhhYjM2Nzk3OWQ5ODczM2MzOGExZmExYzJlN2RjNmNjMDdkYjJkNjBhOWFlN2E3NmFhYTQ5YmQwZjc3Il0sWyJkZmVlZWYxODgx'@;
put 'MTAxZjJjYjExNjQ0ZjNhMmFmZGZjMjA0NWUxOTkxOTE1MjkyM2YzNjdhMTc2N2MxMWNjZWRhIiwiZWNmYjcwNTZjZjFkZTA0MmY5NDIwYmFiMzk2NzkzYzBjMzkwYmRlNzRiNGJiZGZmMTZhODNhZTA5YTlhNzUxNyJdLFsiNmQ3ZWY2YjE3NTQzZjgzNzNjNTczZjQ0ZTFmMzg5ODM1ZDg5YmNi'@;
put 'YzYwNjJjZWQzNmM4MmRmODNiOGZhZTg1OSIsImNkNDUwZWMzMzU0Mzg5ODZkZmVmYTEwYzU3ZmVhOWJjYzUyMWEwOTU5YjJkODBiYmY3NGIxOTBkY2E3MTJkMTAiXSxbImU3NTYwNWQ1OTEwMmE1YTI2ODQ1MDBkM2I5OTFmMmUzZjNjODhiOTMyMjU1NDcwMzVhZjI1YWY2NmUwNDU0MWYiLCJm'@;
put 'NWM1NDc1NGE4ZjcxZWU1NDBiOWI0ODcyODQ3M2UzMTRmNzI5YWM1MzA4YjA2OTM4MzYwOTkwZTJiZmFkMTI1Il0sWyJlYjk4NjYwZjRjNGRmYWEwNmEyYmU0NTNkNTAyMGJjOTlhMGMyZTYwYWJlMzg4NDU3ZGQ0M2ZlZmIxZWQ2MjBjIiwiNmNiOWE4ODc2ZDljYjg1MjA2MDlhZjNhZGQyNmNk'@;
put 'MjBhMGE3Y2Q4YTk0MTExMzFjZTg1ZjQ0MTAwMDk5MjIzZSJdLFsiMTNlODdiMDI3ZDg1MTRkMzU5MzlmMmU2ODkyYjE5OTIyMTU0NTk2OTQxODg4MzM2ZGMzNTYzZTNiOGRiYTk0MiIsImZlZjVhM2M2ODA1OWE2ZGVjNWQ2MjQxMTRiZjFlOTFhYWMyYjlkYTU2OGQ2YWJlYjI1NzBkNTU2NDZi'@;
put 'OGFkZjEiXSxbImVlMTYzMDI2ZTlmZDZmZTAxN2MzOGYwNmE1YmU2ZmMxMjU0MjRiMzcxY2UyNzA4ZTdiZjQ0OTE2OTFlNTc2NGEiLCIxYWNiMjUwZjI1NWRkNjFjNDNkOTRjY2M2NzBkMGY1OGY0OWFlM2ZhMTViOTY2MjNlNTQzMGRhMGFkNmM2MmIyIl0sWyJiMjY4ZjVlZjlhZDUxZTRkNzhk'@;
put 'ZTNhNzUwYzJkYzg5YjFlNjI2ZDQzNTA1ODY3OTk5OTMyZTVkYjMzYWYzZDgwIiwiNWYzMTBkNGIzYzk5YjllYmIxOWY3N2Q0MWMxZGVlMDE4Y2YwZDM0ZmQ0MTkxNjE0MDAzZTk0NWExMjE2ZTQyMyJdLFsiZmYwN2YzMTE4YTlkZjAzNWU5ZmFkODVlYjZjN2JmZTQyYjAyZjAxY2E5OWNlZWEz'@;
put 'YmY3ZmZkYmE5M2M0NzUwZCIsIjQzODEzNmQ2MDNlODU4YTNhNWM0NDBjMzhlY2NiYWRkYzFkMjk0MjExNGUyZWRkZDQ3NDBkMDk4Y2VkMWYwZDgiXSxbIjhkOGI5ODU1YzdjMDUyYTM0MTQ2ZmQyMGZmYjY1OGJlYTRiOWY2OWUwZDgyNWViZWMxNmU4YzNjZTJiNTI2YTEiLCJjZGI1NTllZWRj'@;
put 'MmQ3OWY5MjZiYWY0NGZiODRlYTRkNDRiY2Y1MGZlZTUxZDdjZWIzMGUyZTdmNDYzMDM2NzU4Il0sWyI1MmRiMGI1Mzg0ZGZiZjA1YmZhOWQ0NzJkN2FlMjZkZmU0Yjg1MWNlY2E5MWIxZWJhNTQyNjMxODBkYTMyYjYzIiwiYzNiOTk3ZDA1MGVlNWQ0MjNlYmFmNjZhNmRiOWY1N2IzMTgwYzkw'@;
put 'Mjg3NTY3OWRlOTI0YjY5ZDg0YTdiMzc1Il0sWyJlNjJmOTQ5MGQzZDUxZGE2Mzk1ZWZkMjRlODA5MTljYzdkMGYyOWMzZjNmYTQ4YzZmZmY1NDNiZWNiZDQzMzUyIiwiNmQ4OWFkN2JhNDg3NmIwYjIyYzJjYTI4MGM2ODI4NjJmMzQyYzg1OTFmMWRhZjUxNzBlMDdiZmQ5Y2NhZmE3ZCJdLFsi'@;
put 'N2YzMGVhMjQ3NmIzOTliNDk1NzUwOWM4OGY3N2QwMTkxYWZhMmZmNWNiN2IxNGZkNmQ4ZTdkNjVhYWFiMTE5MyIsImNhNWVmN2Q0YjIzMWM5NGMzYjE1Mzg5YTVmNjMxMWU5ZGFmZjdiYjY3YjEwM2U5ODgwZWY0YmZmNjM3YWNhZWMiXSxbIjUwOThmZjFlMWQ5ZjE0ZmI0NmEyMTBmYWRhNmM5'@;
put 'MDNmZWYwZmI3YjRhMWRkMWQ5YWM2MGEwMzYxODAwYjdhMDAiLCI5NzMxMTQxZDgxZmM4ZjgwODRkMzdjNmU3NTQyMDA2YjNlZTFiNDBkNjBkZmU1MzYyYTViMTMyZmQxN2RkYzAiXSxbIjMyYjc4YzdkZTllZTUxMmE3Mjg5NWJlNmI5Y2JlZmE2ZTJmM2M0Y2NjZTQ0NWM5NmI5ZjJjODFlMjc3'@;
put 'OGFkNTgiLCJlZTE4NDlmNTEzZGY3MWUzMmVmYzM4OTZlZTI4MjYwYzczYmI4MDU0N2FlMjI3NWJhNDk3MjM3Nzk0Yzg3NTNjIl0sWyJlMmNiNzRmZGRjOGU5ZmJjZDA3NmVlZjJhN2M3MmIwY2UzN2Q1MGYwODI2OWRmYzA3NGI1ODE1NTA1NDdhNGY3IiwiZDNhYTJlZDcxYzlkZDIyNDdhNjJk'@;
put 'ZjA2MjczNmViMGJhZGRlYTllMzYxMjJkMmJlODY0MWFiY2IwMDVjYzRhNCJdLFsiODQzODQ0NzU2NmQ0ZDdiZWRhZGMyOTk0OTZhYjM1NzQyNjAwOWEzNWYyMzVjYjE0MWJlMGQ5OWNkMTBhZTNhOCIsImM0ZTEwMjA5MTY5ODBhNGRhNWQwMWFjNWU2YWQzMzA3MzRlZjBkNzkwNjYzMWM0ZjIz'@;
put 'OTA0MjZiMmVkZDc5MWYiXSxbIjQxNjJkNDg4Yjg5NDAyMDM5YjU4NGM2ZmM2YzMwODg3MDU4N2Q5YzQ2ZjY2MGI4NzhhYjY1YzgyYzcxMWQ2N2UiLCI2NzE2M2U5MDMyMzYyODlmNzc2ZjIyYzI1ZmI4YTNhZmMxNzMyZjJiODRiNGU5NWRiZGE0N2FlNWEwODUyNjQ5Il0sWyIzZmFkM2ZhODRj'@;
put 'YWYwZjM0ZjBmODliZmQyZGNmNTRmYzE3NWQ3NjdhZWMzZTUwNjg0ZjNiYTRhNGJmNWY2ODNkIiwiY2QxYmM3Y2I2Y2M0MDdiYjJmMGNhNjQ3YzcxOGE3MzBjZjcxODcyZTdkMGQyYTUzZmEyMGVmY2RmZTYxODI2Il0sWyI2NzRmMjYwMGEzMDA3YTAwNTY4YzFhN2NlMDVkMDgxNmMxZmI4NGJm'@;
put 'MTM3MDc5OGYxYzY5NTMyZmFlYjFhODZiIiwiMjk5ZDIxZjk0MTNmMzNiM2VkZjQzYjI1NzAwNDU4MGI3MGRiNTdkYTBiMTgyMjU5ZTA5ZWVjYzY5ZTBkMzhhNSJdLFsiZDMyZjRkYTU0YWRlNzRhYmI4MWI4MTVhZDFmYjNiMjYzZDgyZDZjNjkyNzE0YmNmZjg3ZDI5YmQ1ZWU5ZjA4ZiIsImY5'@;
put 'NDI5ZTczOGI4ZTUzYjk2OGU5OTAxNmMwNTk3MDc3ODJlMTRmNDUzNTM1OWQ1ODJmYzQxNjkxMGIzZWVhODciXSxbIjMwZTRlNjcwNDM1Mzg1NTU2ZTU5MzY1NzEzNTg0NWQzNmZiYjY5MzFmNzJiMDhjYjFlZDk1NGYxZTNjZTNmZjYiLCI0NjJmOWJjZTYxOTg5ODYzODQ5OTM1MDExM2JiYzli'@;
put 'MTBhODc4ZDM1ZGE3MDc0MGRjNjk1YTU1OWViODhkYjdiIl0sWyJiZTIwNjIwMDNjNTFjYzMwMDQ2ODI5MDQzMzBlNGRlZTdmM2RjZDEwYjAxZTU4MGJmMTk3MWIwNGQ0Y2FkMjk3IiwiNjIxODhiYzQ5ZDYxZTU0Mjg1NzNkNDhhNzRlMWM2NTViMWM2MTA5MDkwNTY4MmEwZDU1NThlZDcyZGNj'@;
put 'YjliYyJdLFsiOTMxNDQ0MjNhY2UzNDUxZWQyOWUwZmI5YWMyYWYyMTFjYjZlODRhNjAxZGY1OTkzYzQxOTg1OWZmZjVkZjA0YSIsIjdjMTBkZmIxNjRjMzQyNWY1YzcxYTNmOWQ3OTkyMDM4ZjEwNjUyMjRmNzJiYjlkMWQ5MDJhNmQxMzAzN2I0N2MiXSxbImIwMTVmODA0NGY1ZmNiZGNmMjFj'@;
put 'YTI2ZDZjMzRmYjgxOTc4MjkyMDVjN2I3ZDJhN2NiNjY0MThjMTU3YjExMmMiLCJhYjhjMWUwODZkMDRlODEzNzQ0YTY1NWIyZGY4ZDVmODNiM2NkYzZmYWEzMDg4YzFkM2FlYTE0NTRlM2ExZDVmIl0sWyJkNWU5ZTFkYTY0OWQ5N2Q4OWU0ODY4MTE3YTQ2NWEzYTRmOGExOGRlNTdhMTQwZDM2'@;
put 'YjNmMmFmMzQxYTIxYjUyIiwiNGNiMDQ0MzdmMzkxZWQ3MzExMWExM2NjMWQ0ZGQwZGIxNjkzNDY1YzIyNDA0ODBkODk1NWU4NTkyZjI3NDQ3YSJdLFsiZDNhZTQxMDQ3ZGQ3Y2EwNjVkYmY4ZWQ3N2I5OTI0Mzk5ODMwMDVjZDcyZTE2ZDZmOTk2YTUzMTZkMzY5NjZiYiIsImJkMWFlYjIxYWQy'@;
put 'MmViYjIyYTEwZjAzMDM0MTdjNmQ5NjRmOGNkZDdkZjBhY2E2MTRiMTBkYzE0ZDEyNWFjNDYiXSxbIjQ2M2UyNzYzZDg4NWY5NThmYzY2Y2RkMjI4MDBmMGE0ODcxOTdkMGE4MmUzNzdiNDlmODBhZjg3Yzg5N2IwNjUiLCJiZmVmYWNkYjBlNWQwZmQ3ZGYzYTMxMWE5NGRlMDYyYjI2YjgwYzYx'@;
put 'ZmJjOTc1MDhiNzk5OTI2NzFlZjdjYTdmIl0sWyI3OTg1ZmRmZDEyN2MwNTY3YzZmNTNlYzFiYjYzZWMzMTU4ZTU5N2M0MGJmZTc0N2M4M2NkZGZjOTEwNjQxOTE3IiwiNjAzYzEyZGFmM2Q5ODYyZWYyYjI1ZmUxZGUyODlhZWQyNGVkMjkxZTBlYzY3MDg3MDNhNWJkNTY3ZjMyZWQwMyJdLFsi'@;
put 'NzRhMWFkNmI1Zjc2ZTM5ZGIyZGQyNDk0MTBlYWM3Zjk5ZTc0YzU5Y2I4M2QyZDBlZDVmZjE1NDNkYTc3MDNlOSIsImNjNjE1N2VmMThjOWM2M2NkNjE5M2Q4MzYzMWJiZWEwMDkzZTA5Njg5NDJlOGMzM2Q1NzM3ZmQ3OTBlMGRiMDgiXSxbIjMwNjgyYTUwNzAzMzc1ZjYwMmQ0MTY2NjRiYTE5'@;
put 'YjdmYzliYWI0MmM3Mjc0NzQ2M2E3MWQwODk2YjIyZjZkYTMiLCI1NTNlMDRmNmIwMThiNGZhNmM4ZjM5ZTdmMzExZDMxNzYyOTBkMGUwZjE5Y2E3M2YxNzcxNGQ5OTc3YTIyZmY4Il0sWyI5ZTIxNThmMGQ3YzBkNWYyNmMzNzkxZWZlZmE3OTU5NzY1NGU3YTJiMjQ2NGY1MmIxZWU2YzEzNDc3'@;
put 'NjllZjU3IiwiNzEyZmNkZDFiOTA1M2YwOTAwM2EzNDgxZmE3NzYyZTlmZmQ3YzhlZjM1YTM4NTA5ZTJmYmYyNjI5MDA4MzczIl0sWyIxNzZlMjY5ODlhNDNjOWNmZWJhNDAyOWMyMDI1MzhjMjgxNzJlNTY2ZTNjNGZjZTczMjI4NTdmM2JlMzI3ZDY2IiwiZWQ4Y2M5ZDA0YjI5ZWI4NzdkMjcw'@;
put 'YjQ4NzhkYzQzYzE5YWVmZDMxZjRlZWUwOWVlN2I0NzgzNGMxZmE0YjFjMyJdLFsiNzVkNDZlZmVhMzc3MWU2ZTY4YWJiODlhMTNhZDc0N2VjZjE4OTIzOTNkZmM0ZjFiNzAwNDc4OGM1MDM3NGRhOCIsIjk4NTIzOTBhOTk1MDc2NzlmZDBiODZmZDJiMzlhODY4ZDdlZmMyMjE1MTM0NmUxYTNj'@;
put 'YTQ3MjY1ODZhNmJlZDgiXSxbIjgwOWEyMGM2N2Q2NDkwMGZmYjY5OGM0YzgyNWY2ZDVmMjMxMGZiMDQ1MWM4NjkzNDViNzMxOWY2NDU2MDU3MjEiLCI5ZTk5NDk4MGQ5OTE3ZTIyYjc2YjA2MTkyN2ZhMDQxNDNkMDk2Y2NjNTQ5NjNlNmE1ZWJmYTVmM2Y4ZTI4NmMxIl0sWyIxYjM4OTAzYTQz'@;
put 'ZjdmMTE0ZWQ0NTAwYjRlYWM3MDgzZmRlZmVjZTFjZjI5YzYzNTI4ZDU2MzQ0NmY5NzJjMTgwIiwiNDAzNmVkYzkzMWE2MGFlODg5MzUzZjc3ZmQ1M2RlNGEyNzA4YjI2YjZmNWRhNzJhZDMzOTQxMTlkYWY0MDhmOSJdXX19fSw5NTM6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9WCxf'@;
put 'PXkoMzc4NSksZz15KDk3NDYpLEI9eSg0NTA0KTtJLmFzc2VydD1nLEkudG9BcnJheT1CLnRvQXJyYXksSS56ZXJvMj1CLnplcm8yLEkudG9IZXg9Qi50b0hleCxJLmVuY29kZT1CLmVuY29kZSxJLmdldE5BRj1mdW5jdGlvbiB3KE4sTCxLKXt2YXIgVyxVPW5ldyBBcnJheShNYXRoLm1heChO'@;
put 'LmJpdExlbmd0aCgpLEspKzEpO2ZvcihXPTA7VzxVLmxlbmd0aDtXKz0xKVVbV109MDt2YXIgWT0xPDxMKzEscT1OLmNsb25lKCk7Zm9yKFc9MDtXPFUubGVuZ3RoO1crKyl7dmFyIGVlLEo9cS5hbmRsbihZLTEpO3EuaXNPZGQoKT9xLmlzdWJuKGVlPUo+KFk+PjEpLTE/KFk+PjEpLUo6Sik6'@;
put 'ZWU9MCxVW1ddPWVlLHEuaXVzaHJuKDEpfXJldHVybiBVfSxJLmdldEpTRj1mdW5jdGlvbiBQKE4sTCl7dmFyIEs9W1tdLFtdXTtOPU4uY2xvbmUoKSxMPUwuY2xvbmUoKTtmb3IodmFyIFksVT0wLFc9MDtOLmNtcG4oLVUpPjB8fEwuY21wbigtVyk+MDspe3ZhciBKLG5lLHE9Ti5hbmRsbigz'@;
put 'KStVJjMsZWU9TC5hbmRsbigzKStXJjM7Mz09PXEmJihxPS0xKSwzPT09ZWUmJihlZT0tMSksSj0xJnE/MyE9KFk9Ti5hbmRsbig3KStVJjcpJiY1IT09WXx8MiE9PWVlP3E6LXE6MCxLWzBdLnB1c2goSiksbmU9MSZlZT8zIT0oWT1MLmFuZGxuKDcpK1cmNykmJjUhPT1ZfHwyIT09cT9lZTot'@;
put 'ZWU6MCxLWzFdLnB1c2gobmUpLDIqVT09PUorMSYmKFU9MS1VKSwyKlc9PT1uZSsxJiYoVz0xLVcpLE4uaXVzaHJuKDEpLEwuaXVzaHJuKDEpfXJldHVybiBLfSxJLmNhY2hlZFByb3BlcnR5PWZ1bmN0aW9uIEYoTixMLEspe3ZhciBVPSJfIitMO04ucHJvdG90eXBlW0xdPWZ1bmN0aW9uKCl7'@;
put 'cmV0dXJuIHZvaWQgMCE9PXRoaXNbVV0/dGhpc1tVXTp0aGlzW1VdPUsuY2FsbCh0aGlzKX19LEkucGFyc2VCeXRlcz1mdW5jdGlvbiBPKE4pe3JldHVybiJzdHJpbmciPT10eXBlb2YgTj9JLnRvQXJyYXkoTiwiaGV4Iik6Tn0sSS5pbnRGcm9tTEU9ZnVuY3Rpb24geihOKXtyZXR1cm4gbmV3'@;
put 'IF8oTiwiaGV4IiwibGUiKX19LDM3ODU6ZnVuY3Rpb24odWUsWCx5KXshZnVuY3Rpb24oSSxfKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gZyhWLHApe2lmKCFWKXRocm93IG5ldyBFcnJvcihwfHwiQXNzZXJ0aW9uIGZhaWxlZCIpfWZ1bmN0aW9uIEIoVixwKXtWLnN1cGVyXz1wO3ZhciBiPWZ1'@;
put 'bmN0aW9uKCl7fTtiLnByb3RvdHlwZT1wLnByb3RvdHlwZSxWLnByb3RvdHlwZT1uZXcgYixWLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1WfWZ1bmN0aW9uIHcoVixwLGIpe2lmKHcuaXNCTihWKSlyZXR1cm4gVjt0aGlzLm5lZ2F0aXZlPTAsdGhpcy53b3Jkcz1udWxsLHRoaXMubGVuZ3RoPTAs'@;
put 'dGhpcy5yZWQ9bnVsbCxudWxsIT09ViYmKCgibGUiPT09cHx8ImJlIj09PXApJiYoYj1wLHA9MTApLHRoaXMuX2luaXQoVnx8MCxwfHwxMCxifHwiYmUiKSl9dmFyIFA7Im9iamVjdCI9PXR5cGVvZiBJP0kuZXhwb3J0cz13Ol8uQk49dyx3LkJOPXcsdy53b3JkU2l6ZT0yNjt0cnl7UD10eXBl'@;
put 'b2Ygd2luZG93PCJ1IiYmdHlwZW9mIHdpbmRvdy5CdWZmZXI8InUiP3dpbmRvdy5CdWZmZXI6eSg1NTY4KS5CdWZmZXJ9Y2F0Y2h7fWZ1bmN0aW9uIEYoVixwKXt2YXIgYj1WLmNoYXJDb2RlQXQocCk7cmV0dXJuIGI+PTY1JiZiPD03MD9iLTU1OmI+PTk3JiZiPD0xMDI/Yi04NzpiLTQ4JjE1'@;
put 'fWZ1bmN0aW9uIE8oVixwLGIpe3ZhciB4PUYoVixiKTtyZXR1cm4gYi0xPj1wJiYoeHw9RihWLGItMSk8PDQpLHh9ZnVuY3Rpb24geihWLHAsYix4KXtmb3IodmFyIEM9MCxUPU1hdGgubWluKFYubGVuZ3RoLGIpLEg9cDtIPFQ7SCsrKXt2YXIgaj1WLmNoYXJDb2RlQXQoSCktNDg7Qyo9eCxD'@;
put 'Kz1qPj00OT9qLTQ5KzEwOmo+PTE3P2otMTcrMTA6an1yZXR1cm4gQ313LmlzQk49ZnVuY3Rpb24ocCl7cmV0dXJuIHAgaW5zdGFuY2VvZiB3fHxudWxsIT09cCYmIm9iamVjdCI9PXR5cGVvZiBwJiZwLmNvbnN0cnVjdG9yLndvcmRTaXplPT09dy53b3JkU2l6ZSYmQXJyYXkuaXNBcnJheShw'@;
put 'LndvcmRzKX0sdy5tYXg9ZnVuY3Rpb24ocCxiKXtyZXR1cm4gcC5jbXAoYik+MD9wOmJ9LHcubWluPWZ1bmN0aW9uKHAsYil7cmV0dXJuIHAuY21wKGIpPDA/cDpifSx3LnByb3RvdHlwZS5faW5pdD1mdW5jdGlvbihwLGIseCl7aWYoIm51bWJlciI9PXR5cGVvZiBwKXJldHVybiB0aGlzLl9p'@;
put 'bml0TnVtYmVyKHAsYix4KTtpZigib2JqZWN0Ij09dHlwZW9mIHApcmV0dXJuIHRoaXMuX2luaXRBcnJheShwLGIseCk7ImhleCI9PT1iJiYoYj0xNiksZyhiPT09KDB8YikmJmI+PTImJmI8PTM2KTt2YXIgQz0wOyItIj09PShwPXAudG9TdHJpbmcoKS5yZXBsYWNlKC9ccysvZywiIikpWzBd'@;
put 'JiYoQysrLHRoaXMubmVnYXRpdmU9MSksQzxwLmxlbmd0aCYmKDE2PT09Yj90aGlzLl9wYXJzZUhleChwLEMseCk6KHRoaXMuX3BhcnNlQmFzZShwLGIsQyksImxlIj09PXgmJnRoaXMuX2luaXRBcnJheSh0aGlzLnRvQXJyYXkoKSxiLHgpKSl9LHcucHJvdG90eXBlLl9pbml0TnVtYmVyPWZ1'@;
put 'bmN0aW9uKHAsYix4KXtwPDAmJih0aGlzLm5lZ2F0aXZlPTEscD0tcCkscDw2NzEwODg2ND8odGhpcy53b3Jkcz1bNjcxMDg4NjMmcF0sdGhpcy5sZW5ndGg9MSk6cDw0NTAzNTk5NjI3MzcwNDk2Pyh0aGlzLndvcmRzPVs2NzEwODg2MyZwLHAvNjcxMDg4NjQmNjcxMDg4NjNdLHRoaXMubGVu'@;
put 'Z3RoPTIpOihnKHA8OTAwNzE5OTI1NDc0MDk5MiksdGhpcy53b3Jkcz1bNjcxMDg4NjMmcCxwLzY3MTA4ODY0JjY3MTA4ODYzLDFdLHRoaXMubGVuZ3RoPTMpLCJsZSI9PT14JiZ0aGlzLl9pbml0QXJyYXkodGhpcy50b0FycmF5KCksYix4KX0sdy5wcm90b3R5cGUuX2luaXRBcnJheT1mdW5j'@;
put 'dGlvbihwLGIseCl7aWYoZygibnVtYmVyIj09dHlwZW9mIHAubGVuZ3RoKSxwLmxlbmd0aDw9MClyZXR1cm4gdGhpcy53b3Jkcz1bMF0sdGhpcy5sZW5ndGg9MSx0aGlzO3RoaXMubGVuZ3RoPU1hdGguY2VpbChwLmxlbmd0aC8zKSx0aGlzLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7'@;
put 'Zm9yKHZhciBDPTA7Qzx0aGlzLmxlbmd0aDtDKyspdGhpcy53b3Jkc1tDXT0wO3ZhciBULEgsaj0wO2lmKCJiZSI9PT14KWZvcihDPXAubGVuZ3RoLTEsVD0wO0M+PTA7Qy09Myl0aGlzLndvcmRzW1RdfD0oSD1wW0NdfHBbQy0xXTw8OHxwW0MtMl08PDE2KTw8aiY2NzEwODg2Myx0aGlzLndv'@;
put 'cmRzW1QrMV09SD4+PjI2LWomNjcxMDg4NjMsKGorPTI0KT49MjYmJihqLT0yNixUKyspO2Vsc2UgaWYoImxlIj09PXgpZm9yKEM9MCxUPTA7QzxwLmxlbmd0aDtDKz0zKXRoaXMud29yZHNbVF18PShIPXBbQ118cFtDKzFdPDw4fHBbQysyXTw8MTYpPDxqJjY3MTA4ODYzLHRoaXMud29yZHNb'@;
put 'VCsxXT1IPj4+MjYtaiY2NzEwODg2Mywoais9MjQpPj0yNiYmKGotPTI2LFQrKyk7cmV0dXJuIHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuX3BhcnNlSGV4PWZ1bmN0aW9uKHAsYix4KXt0aGlzLmxlbmd0aD1NYXRoLmNlaWwoKHAubGVuZ3RoLWIpLzYpLHRoaXMud29yZHM9bmV3IEFycmF5'@;
put 'KHRoaXMubGVuZ3RoKTtmb3IodmFyIEM9MDtDPHRoaXMubGVuZ3RoO0MrKyl0aGlzLndvcmRzW0NdPTA7dmFyIGosVD0wLEg9MDtpZigiYmUiPT09eClmb3IoQz1wLmxlbmd0aC0xO0M+PWI7Qy09MilqPU8ocCxiLEMpPDxULHRoaXMud29yZHNbSF18PTY3MTA4ODYzJmosVD49MTg/KFQtPTE4'@;
put 'LHRoaXMud29yZHNbSCs9MV18PWo+Pj4yNik6VCs9ODtlbHNlIGZvcihDPShwLmxlbmd0aC1iKSUyPT0wP2IrMTpiO0M8cC5sZW5ndGg7Qys9MilqPU8ocCxiLEMpPDxULHRoaXMud29yZHNbSF18PTY3MTA4ODYzJmosVD49MTg/KFQtPTE4LHRoaXMud29yZHNbSCs9MV18PWo+Pj4yNik6VCs9'@;
put 'ODt0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLl9wYXJzZUJhc2U9ZnVuY3Rpb24ocCxiLHgpe3RoaXMud29yZHM9WzBdLHRoaXMubGVuZ3RoPTE7Zm9yKHZhciBDPTAsVD0xO1Q8PTY3MTA4ODYzO1QqPWIpQysrO0MtLSxUPVQvYnwwO2Zvcih2YXIgSD1wLmxlbmd0aC14LGo9SCVDLEU9TWF0'@;
put 'aC5taW4oSCxILWopK3gsbT0wLEE9eDtBPEU7QSs9QyltPXoocCxBLEErQyxiKSx0aGlzLmltdWxuKFQpLHRoaXMud29yZHNbMF0rbTw2NzEwODg2ND90aGlzLndvcmRzWzBdKz1tOnRoaXMuX2lhZGRuKG0pO2lmKDAhPT1qKXt2YXIgYWU9MTtmb3IobT16KHAsQSxwLmxlbmd0aCxiKSxBPTA7'@;
put 'QTxqO0ErKylhZSo9Yjt0aGlzLmltdWxuKGFlKSx0aGlzLndvcmRzWzBdK208NjcxMDg4NjQ/dGhpcy53b3Jkc1swXSs9bTp0aGlzLl9pYWRkbihtKX10aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24ocCl7cC53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2'@;
put 'YXIgYj0wO2I8dGhpcy5sZW5ndGg7YisrKXAud29yZHNbYl09dGhpcy53b3Jkc1tiXTtwLmxlbmd0aD10aGlzLmxlbmd0aCxwLm5lZ2F0aXZlPXRoaXMubmVnYXRpdmUscC5yZWQ9dGhpcy5yZWR9LHcucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKCl7dmFyIHA9bmV3IHcobnVsbCk7cmV0dXJu'@;
put 'IHRoaXMuY29weShwKSxwfSx3LnByb3RvdHlwZS5fZXhwYW5kPWZ1bmN0aW9uKHApe2Zvcig7dGhpcy5sZW5ndGg8cDspdGhpcy53b3Jkc1t0aGlzLmxlbmd0aCsrXT0wO3JldHVybiB0aGlzfSx3LnByb3RvdHlwZS5zdHJpcD1mdW5jdGlvbigpe2Zvcig7dGhpcy5sZW5ndGg+MSYmMD09PXRo'@;
put 'aXMud29yZHNbdGhpcy5sZW5ndGgtMV07KXRoaXMubGVuZ3RoLS07cmV0dXJuIHRoaXMuX25vcm1TaWduKCl9LHcucHJvdG90eXBlLl9ub3JtU2lnbj1mdW5jdGlvbigpe3JldHVybiAxPT09dGhpcy5sZW5ndGgmJjA9PT10aGlzLndvcmRzWzBdJiYodGhpcy5uZWdhdGl2ZT0wKSx0aGlzfSx3'@;
put 'LnByb3RvdHlwZS5pbnNwZWN0PWZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMucmVkPyI8Qk4tUjogIjoiPEJOOiAiKSt0aGlzLnRvU3RyaW5nKDE2KSsiPiJ9O3ZhciBOPVsiIiwiMCIsIjAwIiwiMDAwIiwiMDAwMCIsIjAwMDAwIiwiMDAwMDAwIiwiMDAwMDAwMCIsIjAwMDAwMDAwIiwiMDAwMDAw'@;
put 'MDAwIiwiMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAw'@;
put 'MDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw'@;
put 'MCJdLEw9WzAsMCwyNSwxNiwxMiwxMSwxMCw5LDgsOCw3LDcsNyw3LDYsNiw2LDYsNiw2LDYsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNV0sSz1bMCwwLDMzNTU0NDMyLDQzMDQ2NzIxLDE2Nzc3MjE2LDQ4ODI4MTI1LDYwNDY2MTc2LDQwMzUzNjA3LDE2Nzc3MjE2LDQzMDQ2NzIx'@;
put 'LDFlNywxOTQ4NzE3MSwzNTgzMTgwOCw2Mjc0ODUxNyw3NTI5NTM2LDExMzkwNjI1LDE2Nzc3MjE2LDI0MTM3NTY5LDM0MDEyMjI0LDQ3MDQ1ODgxLDY0ZTYsNDA4NDEwMSw1MTUzNjMyLDY0MzYzNDMsNzk2MjYyNCw5NzY1NjI1LDExODgxMzc2LDE0MzQ4OTA3LDE3MjEwMzY4LDIwNTExMTQ5'@;
put 'LDI0M2U1LDI4NjI5MTUxLDMzNTU0NDMyLDM5MTM1MzkzLDQ1NDM1NDI0LDUyNTIxODc1LDYwNDY2MTc2XTtmdW5jdGlvbiBXKFYscCxiKXtiLm5lZ2F0aXZlPXAubmVnYXRpdmVeVi5uZWdhdGl2ZTt2YXIgeD1WLmxlbmd0aCtwLmxlbmd0aHwwO2IubGVuZ3RoPXgseD14LTF8MDt2YXIgQz0w'@;
put 'fFYud29yZHNbMF0sVD0wfHAud29yZHNbMF0sSD1DKlQsRT1ILzY3MTA4ODY0fDA7Yi53b3Jkc1swXT02NzEwODg2MyZIO2Zvcih2YXIgbT0xO208eDttKyspe2Zvcih2YXIgQT1FPj4+MjYsYWU9NjcxMDg4NjMmRSx0ZT1NYXRoLm1pbihtLHAubGVuZ3RoLTEpLHNlPU1hdGgubWF4KDAsbS1W'@;
put 'Lmxlbmd0aCsxKTtzZTw9dGU7c2UrKylBKz0oSD0oQz0wfFYud29yZHNbbS1zZXwwXSkqKFQ9MHxwLndvcmRzW3NlXSkrYWUpLzY3MTA4ODY0fDAsYWU9NjcxMDg4NjMmSDtiLndvcmRzW21dPTB8YWUsRT0wfEF9cmV0dXJuIDAhPT1FP2Iud29yZHNbbV09MHxFOmIubGVuZ3RoLS0sYi5zdHJp'@;
put 'cCgpfXcucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKHAsYil7dmFyIHg7aWYoYj0wfGJ8fDEsMTY9PT0ocD1wfHwxMCl8fCJoZXgiPT09cCl7eD0iIjtmb3IodmFyIEM9MCxUPTAsSD0wO0g8dGhpcy5sZW5ndGg7SCsrKXt2YXIgaj10aGlzLndvcmRzW0hdLEU9KDE2Nzc3MjE1JihqPDxD'@;
put 'fFQpKS50b1N0cmluZygxNik7VD1qPj4+MjQtQyYxNjc3NzIxNSwoQys9Mik+PTI2JiYoQy09MjYsSC0tKSx4PTAhPT1UfHxIIT09dGhpcy5sZW5ndGgtMT9OWzYtRS5sZW5ndGhdK0UreDpFK3h9Zm9yKDAhPT1UJiYoeD1ULnRvU3RyaW5nKDE2KSt4KTt4Lmxlbmd0aCViIT0wOyl4PSIwIit4'@;
put 'O3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZSYmKHg9Ii0iK3gpLHh9aWYocD09PSgwfHApJiZwPj0yJiZwPD0zNil7dmFyIG09TFtwXSxBPUtbcF07eD0iIjt2YXIgYWU9dGhpcy5jbG9uZSgpO2ZvcihhZS5uZWdhdGl2ZT0wOyFhZS5pc1plcm8oKTspe3ZhciB0ZT1hZS5tb2RuKEEpLnRvU3Ry'@;
put 'aW5nKHApO3g9KGFlPWFlLmlkaXZuKEEpKS5pc1plcm8oKT90ZSt4Ok5bbS10ZS5sZW5ndGhdK3RlK3h9Zm9yKHRoaXMuaXNaZXJvKCkmJih4PSIwIit4KTt4Lmxlbmd0aCViIT0wOyl4PSIwIit4O3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZSYmKHg9Ii0iK3gpLHh9ZyghMSwiQmFzZSBzaG91'@;
put 'bGQgYmUgYmV0d2VlbiAyIGFuZCAzNiIpfSx3LnByb3RvdHlwZS50b051bWJlcj1mdW5jdGlvbigpe3ZhciBwPXRoaXMud29yZHNbMF07cmV0dXJuIDI9PT10aGlzLmxlbmd0aD9wKz02NzEwODg2NCp0aGlzLndvcmRzWzFdOjM9PT10aGlzLmxlbmd0aCYmMT09PXRoaXMud29yZHNbMl0/cCs9'@;
put 'NDUwMzU5OTYyNzM3MDQ5Nis2NzEwODg2NCp0aGlzLndvcmRzWzFdOnRoaXMubGVuZ3RoPjImJmcoITEsIk51bWJlciBjYW4gb25seSBzYWZlbHkgc3RvcmUgdXAgdG8gNTMgYml0cyIpLDAhPT10aGlzLm5lZ2F0aXZlPy1wOnB9LHcucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVy'@;
put 'biB0aGlzLnRvU3RyaW5nKDE2KX0sdy5wcm90b3R5cGUudG9CdWZmZXI9ZnVuY3Rpb24ocCxiKXtyZXR1cm4gZyh0eXBlb2YgUDwidSIpLHRoaXMudG9BcnJheUxpa2UoUCxwLGIpfSx3LnByb3RvdHlwZS50b0FycmF5PWZ1bmN0aW9uKHAsYil7cmV0dXJuIHRoaXMudG9BcnJheUxpa2UoQXJy'@;
put 'YXkscCxiKX0sdy5wcm90b3R5cGUudG9BcnJheUxpa2U9ZnVuY3Rpb24ocCxiLHgpe3ZhciBDPXRoaXMuYnl0ZUxlbmd0aCgpLFQ9eHx8TWF0aC5tYXgoMSxDKTtnKEM8PVQsImJ5dGUgYXJyYXkgbG9uZ2VyIHRoYW4gZGVzaXJlZCBsZW5ndGgiKSxnKFQ+MCwiUmVxdWVzdGVkIGFycmF5IGxl'@;
put 'bmd0aCA8PSAwIiksdGhpcy5zdHJpcCgpO3ZhciBFLG0sSD0ibGUiPT09YixqPW5ldyBwKFQpLEE9dGhpcy5jbG9uZSgpO2lmKEgpe2ZvcihtPTA7IUEuaXNaZXJvKCk7bSsrKUU9QS5hbmRsbigyNTUpLEEuaXVzaHJuKDgpLGpbbV09RTtmb3IoO208VDttKyspalttXT0wfWVsc2V7Zm9yKG09'@;
put 'MDttPFQtQzttKyspalttXT0wO2ZvcihtPTA7IUEuaXNaZXJvKCk7bSsrKUU9QS5hbmRsbigyNTUpLEEuaXVzaHJuKDgpLGpbVC1tLTFdPUV9cmV0dXJuIGp9LHcucHJvdG90eXBlLl9jb3VudEJpdHM9TWF0aC5jbHozMj9mdW5jdGlvbihwKXtyZXR1cm4gMzItTWF0aC5jbHozMihwKX06ZnVu'@;
put 'Y3Rpb24ocCl7dmFyIGI9cCx4PTA7cmV0dXJuIGI+PTQwOTYmJih4Kz0xMyxiPj4+PTEzKSxiPj02NCYmKHgrPTcsYj4+Pj03KSxiPj04JiYoeCs9NCxiPj4+PTQpLGI+PTImJih4Kz0yLGI+Pj49MikseCtifSx3LnByb3RvdHlwZS5femVyb0JpdHM9ZnVuY3Rpb24ocCl7aWYoMD09PXApcmV0'@;
put 'dXJuIDI2O3ZhciBiPXAseD0wO3JldHVybiA4MTkxJmJ8fCh4Kz0xMyxiPj4+PTEzKSwxMjcmYnx8KHgrPTcsYj4+Pj03KSwxNSZifHwoeCs9NCxiPj4+PTQpLDMmYnx8KHgrPTIsYj4+Pj0yKSwxJmJ8fHgrKyx4fSx3LnByb3RvdHlwZS5iaXRMZW5ndGg9ZnVuY3Rpb24oKXt2YXIgYj10aGlz'@;
put 'Ll9jb3VudEJpdHModGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXSk7cmV0dXJuIDI2Kih0aGlzLmxlbmd0aC0xKStifSx3LnByb3RvdHlwZS56ZXJvQml0cz1mdW5jdGlvbigpe2lmKHRoaXMuaXNaZXJvKCkpcmV0dXJuIDA7Zm9yKHZhciBwPTAsYj0wO2I8dGhpcy5sZW5ndGg7YisrKXt2YXIg'@;
put 'eD10aGlzLl96ZXJvQml0cyh0aGlzLndvcmRzW2JdKTtpZihwKz14LDI2IT09eClicmVha31yZXR1cm4gcH0sdy5wcm90b3R5cGUuYnl0ZUxlbmd0aD1mdW5jdGlvbigpe3JldHVybiBNYXRoLmNlaWwodGhpcy5iaXRMZW5ndGgoKS84KX0sdy5wcm90b3R5cGUudG9Ud29zPWZ1bmN0aW9uKHAp'@;
put 'e3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZT90aGlzLmFicygpLmlub3RuKHApLmlhZGRuKDEpOnRoaXMuY2xvbmUoKX0sdy5wcm90b3R5cGUuZnJvbVR3b3M9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMudGVzdG4ocC0xKT90aGlzLm5vdG4ocCkuaWFkZG4oMSkuaW5lZygpOnRoaXMuY2xvbmUo'@;
put 'KX0sdy5wcm90b3R5cGUuaXNOZWc9ZnVuY3Rpb24oKXtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmV9LHcucHJvdG90eXBlLm5lZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNsb25lKCkuaW5lZygpfSx3LnByb3RvdHlwZS5pbmVnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNaZXJvKCl8fCh0'@;
put 'aGlzLm5lZ2F0aXZlXj0xKSx0aGlzfSx3LnByb3RvdHlwZS5pdW9yPWZ1bmN0aW9uKHApe2Zvcig7dGhpcy5sZW5ndGg8cC5sZW5ndGg7KXRoaXMud29yZHNbdGhpcy5sZW5ndGgrK109MDtmb3IodmFyIGI9MDtiPHAubGVuZ3RoO2IrKyl0aGlzLndvcmRzW2JdPXRoaXMud29yZHNbYl18cC53'@;
put 'b3Jkc1tiXTtyZXR1cm4gdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5pb3I9ZnVuY3Rpb24ocCl7cmV0dXJuIGcoISh0aGlzLm5lZ2F0aXZlfHAubmVnYXRpdmUpKSx0aGlzLml1b3IocCl9LHcucHJvdG90eXBlLm9yPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmxlbmd0aD5wLmxlbmd0aD90'@;
put 'aGlzLmNsb25lKCkuaW9yKHApOnAuY2xvbmUoKS5pb3IodGhpcyl9LHcucHJvdG90eXBlLnVvcj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5sZW5ndGg+cC5sZW5ndGg/dGhpcy5jbG9uZSgpLml1b3IocCk6cC5jbG9uZSgpLml1b3IodGhpcyl9LHcucHJvdG90eXBlLml1YW5kPWZ1bmN0aW9u'@;
put 'KHApe3ZhciBiO2I9dGhpcy5sZW5ndGg+cC5sZW5ndGg/cDp0aGlzO2Zvcih2YXIgeD0wO3g8Yi5sZW5ndGg7eCsrKXRoaXMud29yZHNbeF09dGhpcy53b3Jkc1t4XSZwLndvcmRzW3hdO3JldHVybiB0aGlzLmxlbmd0aD1iLmxlbmd0aCx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmlhbmQ9'@;
put 'ZnVuY3Rpb24ocCl7cmV0dXJuIGcoISh0aGlzLm5lZ2F0aXZlfHAubmVnYXRpdmUpKSx0aGlzLml1YW5kKHApfSx3LnByb3RvdHlwZS5hbmQ9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMubGVuZ3RoPnAubGVuZ3RoP3RoaXMuY2xvbmUoKS5pYW5kKHApOnAuY2xvbmUoKS5pYW5kKHRoaXMpfSx3'@;
put 'LnByb3RvdHlwZS51YW5kPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmxlbmd0aD5wLmxlbmd0aD90aGlzLmNsb25lKCkuaXVhbmQocCk6cC5jbG9uZSgpLml1YW5kKHRoaXMpfSx3LnByb3RvdHlwZS5pdXhvcj1mdW5jdGlvbihwKXt2YXIgYix4O3RoaXMubGVuZ3RoPnAubGVuZ3RoPyhiPXRo'@;
put 'aXMseD1wKTooYj1wLHg9dGhpcyk7Zm9yKHZhciBDPTA7Qzx4Lmxlbmd0aDtDKyspdGhpcy53b3Jkc1tDXT1iLndvcmRzW0NdXngud29yZHNbQ107aWYodGhpcyE9PWIpZm9yKDtDPGIubGVuZ3RoO0MrKyl0aGlzLndvcmRzW0NdPWIud29yZHNbQ107cmV0dXJuIHRoaXMubGVuZ3RoPWIubGVu'@;
put 'Z3RoLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuaXhvcj1mdW5jdGlvbihwKXtyZXR1cm4gZyghKHRoaXMubmVnYXRpdmV8cC5uZWdhdGl2ZSkpLHRoaXMuaXV4b3IocCl9LHcucHJvdG90eXBlLnhvcj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5sZW5ndGg+cC5sZW5ndGg/dGhpcy5jbG9u'@;
put 'ZSgpLml4b3IocCk6cC5jbG9uZSgpLml4b3IodGhpcyl9LHcucHJvdG90eXBlLnV4b3I9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMubGVuZ3RoPnAubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdXhvcihwKTpwLmNsb25lKCkuaXV4b3IodGhpcyl9LHcucHJvdG90eXBlLmlub3RuPWZ1bmN0aW9uKHAp'@;
put 'e2coIm51bWJlciI9PXR5cGVvZiBwJiZwPj0wKTt2YXIgYj0wfE1hdGguY2VpbChwLzI2KSx4PXAlMjY7dGhpcy5fZXhwYW5kKGIpLHg+MCYmYi0tO2Zvcih2YXIgQz0wO0M8YjtDKyspdGhpcy53b3Jkc1tDXT02NzEwODg2MyZ+dGhpcy53b3Jkc1tDXTtyZXR1cm4geD4wJiYodGhpcy53b3Jk'@;
put 'c1tDXT1+dGhpcy53b3Jkc1tDXSY2NzEwODg2Mz4+MjYteCksdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5ub3RuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaW5vdG4ocCl9LHcucHJvdG90eXBlLnNldG49ZnVuY3Rpb24ocCxiKXtnKCJudW1iZXIiPT10eXBlb2YgcCYmcD49'@;
put 'MCk7dmFyIHg9cC8yNnwwLEM9cCUyNjtyZXR1cm4gdGhpcy5fZXhwYW5kKHgrMSksdGhpcy53b3Jkc1t4XT1iP3RoaXMud29yZHNbeF18MTw8Qzp0aGlzLndvcmRzW3hdJn4oMTw8QyksdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5pYWRkPWZ1bmN0aW9uKHApe3ZhciBiLHgsQztpZigwIT09'@;
put 'dGhpcy5uZWdhdGl2ZSYmMD09PXAubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCxiPXRoaXMuaXN1YihwKSx0aGlzLm5lZ2F0aXZlXj0xLHRoaXMuX25vcm1TaWduKCk7aWYoMD09PXRoaXMubmVnYXRpdmUmJjAhPT1wLm5lZ2F0aXZlKXJldHVybiBwLm5lZ2F0aXZlPTAsYj10aGlz'@;
put 'LmlzdWIocCkscC5uZWdhdGl2ZT0xLGIuX25vcm1TaWduKCk7dGhpcy5sZW5ndGg+cC5sZW5ndGg/KHg9dGhpcyxDPXApOih4PXAsQz10aGlzKTtmb3IodmFyIFQ9MCxIPTA7SDxDLmxlbmd0aDtIKyspdGhpcy53b3Jkc1tIXT02NzEwODg2MyYoYj0oMHx4LndvcmRzW0hdKSsoMHxDLndvcmRz'@;
put 'W0hdKStUKSxUPWI+Pj4yNjtmb3IoOzAhPT1UJiZIPHgubGVuZ3RoO0grKyl0aGlzLndvcmRzW0hdPTY3MTA4ODYzJihiPSgwfHgud29yZHNbSF0pK1QpLFQ9Yj4+PjI2O2lmKHRoaXMubGVuZ3RoPXgubGVuZ3RoLDAhPT1UKXRoaXMud29yZHNbdGhpcy5sZW5ndGhdPVQsdGhpcy5sZW5ndGgr'@;
put 'KztlbHNlIGlmKHghPT10aGlzKWZvcig7SDx4Lmxlbmd0aDtIKyspdGhpcy53b3Jkc1tIXT14LndvcmRzW0hdO3JldHVybiB0aGlzfSx3LnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24ocCl7dmFyIGI7cmV0dXJuIDAhPT1wLm5lZ2F0aXZlJiYwPT09dGhpcy5uZWdhdGl2ZT8ocC5uZWdhdGl2ZT0w'@;
put 'LGI9dGhpcy5zdWIocCkscC5uZWdhdGl2ZV49MSxiKTowPT09cC5uZWdhdGl2ZSYmMCE9PXRoaXMubmVnYXRpdmU/KHRoaXMubmVnYXRpdmU9MCxiPXAuc3ViKHRoaXMpLHRoaXMubmVnYXRpdmU9MSxiKTp0aGlzLmxlbmd0aD5wLmxlbmd0aD90aGlzLmNsb25lKCkuaWFkZChwKTpwLmNsb25l'@;
put 'KCkuaWFkZCh0aGlzKX0sdy5wcm90b3R5cGUuaXN1Yj1mdW5jdGlvbihwKXtpZigwIT09cC5uZWdhdGl2ZSl7cC5uZWdhdGl2ZT0wO3ZhciBiPXRoaXMuaWFkZChwKTtyZXR1cm4gcC5uZWdhdGl2ZT0xLGIuX25vcm1TaWduKCl9aWYoMCE9PXRoaXMubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVn'@;
put 'YXRpdmU9MCx0aGlzLmlhZGQocCksdGhpcy5uZWdhdGl2ZT0xLHRoaXMuX25vcm1TaWduKCk7dmFyIEMsVCx4PXRoaXMuY21wKHApO2lmKDA9PT14KXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5sZW5ndGg9MSx0aGlzLndvcmRzWzBdPTAsdGhpczt4PjA/KEM9dGhpcyxUPXApOihDPXAs'@;
put 'VD10aGlzKTtmb3IodmFyIEg9MCxqPTA7ajxULmxlbmd0aDtqKyspSD0oYj0oMHxDLndvcmRzW2pdKS0oMHxULndvcmRzW2pdKStIKT4+MjYsdGhpcy53b3Jkc1tqXT02NzEwODg2MyZiO2Zvcig7MCE9PUgmJmo8Qy5sZW5ndGg7aisrKUg9KGI9KDB8Qy53b3Jkc1tqXSkrSCk+PjI2LHRoaXMu'@;
put 'd29yZHNbal09NjcxMDg4NjMmYjtpZigwPT09SCYmajxDLmxlbmd0aCYmQyE9PXRoaXMpZm9yKDtqPEMubGVuZ3RoO2orKyl0aGlzLndvcmRzW2pdPUMud29yZHNbal07cmV0dXJuIHRoaXMubGVuZ3RoPU1hdGgubWF4KHRoaXMubGVuZ3RoLGopLEMhPT10aGlzJiYodGhpcy5uZWdhdGl2ZT0x'@;
put 'KSx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLnN1Yj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzdWIocCl9O3ZhciBZPWZ1bmN0aW9uKHAsYix4KXt2YXIgRSxtLEEsQz1wLndvcmRzLFQ9Yi53b3JkcyxIPXgud29yZHMsaj0wLGFlPTB8Q1swXSx0ZT04MTkxJmFlLHNlPWFl'@;
put 'Pj4+MTMsd2U9MHxDWzFdLFVlPTgxOTEmd2UsSmU9d2U+Pj4xMyxvdD0wfENbMl0seGU9ODE5MSZvdCx2ZT1vdD4+PjEzLFhlPTB8Q1szXSx6ZT04MTkxJlhlLERlPVhlPj4+MTMsRmU9MHxDWzRdLE9lPTgxOTEmRmUsSWU9RmU+Pj4xMyxWZT0wfENbNV0sa2U9ODE5MSZWZSxBZT1WZT4+PjEz'@;
put 'LF90PTB8Q1s2XSxudD04MTkxJl90LFFlPV90Pj4+MTMsdW49MHxDWzddLHl0PTgxOTEmdW4sTXQ9dW4+Pj4xMyxEdD0wfENbOF0saXQ9ODE5MSZEdCwkZT1EdD4+PjEzLHR0PTB8Q1s5XSxIZT04MTkxJnR0LHV0PXR0Pj4+MTMscXQ9MHxUWzBdLFJ0PTgxOTEmcXQsUHQ9cXQ+Pj4xMyxjaT0w'@;
put 'fFRbMV0sUXQ9ODE5MSZjaSxzbj1jaT4+PjEzLFJpPTB8VFsyXSxobj04MTkxJlJpLGZ0PVJpPj4+MTMsT3I9MHxUWzNdLFd0PTgxOTEmT3IsQXQ9T3I+Pj4xMyxSbj0wfFRbNF0sc3Q9ODE5MSZSbixVdD1Sbj4+PjEzLHJpPTB8VFs1XSxXZT04MTkxJnJpLFR0PXJpPj4+MTMsbnI9MHxUWzZd'@;
put 'LGh0PTgxOTEmbnIseHQ9bnI+Pj4xMyxqbj0wfFRbN10scm49ODE5MSZqbix6dD1qbj4+PjEzLGhpPTB8VFs4XSxjbj04MTkxJmhpLGZuPWhpPj4+MTMsSWk9MHxUWzldLFh0PTgxOTEmSWksZW49SWk+Pj4xMzt4Lm5lZ2F0aXZlPXAubmVnYXRpdmVeYi5uZWdhdGl2ZSx4Lmxlbmd0aD0xOTt2'@;
put 'YXIgdWE9KGorKEU9TWF0aC5pbXVsKHRlLFJ0KSl8MCkrKCg4MTkxJihtPShtPU1hdGguaW11bCh0ZSxQdCkpK01hdGguaW11bChzZSxSdCl8MCkpPDwxMyl8MDtqPSgoQT1NYXRoLmltdWwoc2UsUHQpKSsobT4+PjEzKXwwKSsodWE+Pj4yNil8MCx1YSY9NjcxMDg4NjMsRT1NYXRoLmltdWwo'@;
put 'VWUsUnQpLG09KG09TWF0aC5pbXVsKFVlLFB0KSkrTWF0aC5pbXVsKEplLFJ0KXwwLEE9TWF0aC5pbXVsKEplLFB0KTt2YXIgRWk9KGorKEU9RStNYXRoLmltdWwodGUsUXQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh0ZSxzbil8MCkrTWF0aC5pbXVsKHNlLFF0KXwwKSk8PDEz'@;
put 'KXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLHNuKXwwKSsobT4+PjEzKXwwKSsoRWk+Pj4yNil8MCxFaSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoeGUsUnQpLG09KG09TWF0aC5pbXVsKHhlLFB0KSkrTWF0aC5pbXVsKHZlLFJ0KXwwLEE9TWF0aC5pbXVsKHZlLFB0KSxFPUUrTWF0aC5pbXVsKFVl'@;
put 'LFF0KXwwLG09KG09bStNYXRoLmltdWwoVWUsc24pfDApK01hdGguaW11bChKZSxRdCl8MCxBPUErTWF0aC5pbXVsKEplLHNuKXwwO3ZhciB2cj0oaisoRT1FK01hdGguaW11bCh0ZSxobil8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKHRlLGZ0KXwwKStNYXRoLmltdWwoc2UsaG4p'@;
put 'fDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2UsZnQpfDApKyhtPj4+MTMpfDApKyh2cj4+PjI2KXwwLHZyJj02NzEwODg2MyxFPU1hdGguaW11bCh6ZSxSdCksbT0obT1NYXRoLmltdWwoemUsUHQpKStNYXRoLmltdWwoRGUsUnQpfDAsQT1NYXRoLmltdWwoRGUsUHQpLEU9RStNYXRo'@;
put 'LmltdWwoeGUsUXQpfDAsbT0obT1tK01hdGguaW11bCh4ZSxzbil8MCkrTWF0aC5pbXVsKHZlLFF0KXwwLEE9QStNYXRoLmltdWwodmUsc24pfDAsRT1FK01hdGguaW11bChVZSxobil8MCxtPShtPW0rTWF0aC5pbXVsKFVlLGZ0KXwwKStNYXRoLmltdWwoSmUsaG4pfDAsQT1BK01hdGguaW11'@;
put 'bChKZSxmdCl8MDt2YXIgV249KGorKEU9RStNYXRoLmltdWwodGUsV3QpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh0ZSxBdCl8MCkrTWF0aC5pbXVsKHNlLFd0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLEF0KXwwKSsobT4+PjEzKXwwKSsoV24+Pj4yNil8MCxX'@;
put 'biY9NjcxMDg4NjMsRT1NYXRoLmltdWwoT2UsUnQpLG09KG09TWF0aC5pbXVsKE9lLFB0KSkrTWF0aC5pbXVsKEllLFJ0KXwwLEE9TWF0aC5pbXVsKEllLFB0KSxFPUUrTWF0aC5pbXVsKHplLFF0KXwwLG09KG09bStNYXRoLmltdWwoemUsc24pfDApK01hdGguaW11bChEZSxRdCl8MCxBPUEr'@;
put 'TWF0aC5pbXVsKERlLHNuKXwwLEU9RStNYXRoLmltdWwoeGUsaG4pfDAsbT0obT1tK01hdGguaW11bCh4ZSxmdCl8MCkrTWF0aC5pbXVsKHZlLGhuKXwwLEE9QStNYXRoLmltdWwodmUsZnQpfDAsRT1FK01hdGguaW11bChVZSxXdCl8MCxtPShtPW0rTWF0aC5pbXVsKFVlLEF0KXwwKStNYXRo'@;
put 'LmltdWwoSmUsV3QpfDAsQT1BK01hdGguaW11bChKZSxBdCl8MDt2YXIgJGk9KGorKEU9RStNYXRoLmltdWwodGUsc3QpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh0ZSxVdCl8MCkrTWF0aC5pbXVsKHNlLHN0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLFV0KXww'@;
put 'KSsobT4+PjEzKXwwKSsoJGk+Pj4yNil8MCwkaSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoa2UsUnQpLG09KG09TWF0aC5pbXVsKGtlLFB0KSkrTWF0aC5pbXVsKEFlLFJ0KXwwLEE9TWF0aC5pbXVsKEFlLFB0KSxFPUUrTWF0aC5pbXVsKE9lLFF0KXwwLG09KG09bStNYXRoLmltdWwoT2Usc24p'@;
put 'fDApK01hdGguaW11bChJZSxRdCl8MCxBPUErTWF0aC5pbXVsKEllLHNuKXwwLEU9RStNYXRoLmltdWwoemUsaG4pfDAsbT0obT1tK01hdGguaW11bCh6ZSxmdCl8MCkrTWF0aC5pbXVsKERlLGhuKXwwLEE9QStNYXRoLmltdWwoRGUsZnQpfDAsRT1FK01hdGguaW11bCh4ZSxXdCl8MCxtPSht'@;
put 'PW0rTWF0aC5pbXVsKHhlLEF0KXwwKStNYXRoLmltdWwodmUsV3QpfDAsQT1BK01hdGguaW11bCh2ZSxBdCl8MCxFPUUrTWF0aC5pbXVsKFVlLHN0KXwwLG09KG09bStNYXRoLmltdWwoVWUsVXQpfDApK01hdGguaW11bChKZSxzdCl8MCxBPUErTWF0aC5pbXVsKEplLFV0KXwwO3ZhciBlaT0o'@;
put 'aisoRT1FK01hdGguaW11bCh0ZSxXZSl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKHRlLFR0KXwwKStNYXRoLmltdWwoc2UsV2UpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2UsVHQpfDApKyhtPj4+MTMpfDApKyhlaT4+PjI2KXwwLGVpJj02NzEwODg2MyxFPU1hdGgu'@;
put 'aW11bChudCxSdCksbT0obT1NYXRoLmltdWwobnQsUHQpKStNYXRoLmltdWwoUWUsUnQpfDAsQT1NYXRoLmltdWwoUWUsUHQpLEU9RStNYXRoLmltdWwoa2UsUXQpfDAsbT0obT1tK01hdGguaW11bChrZSxzbil8MCkrTWF0aC5pbXVsKEFlLFF0KXwwLEE9QStNYXRoLmltdWwoQWUsc24pfDAs'@;
put 'RT1FK01hdGguaW11bChPZSxobil8MCxtPShtPW0rTWF0aC5pbXVsKE9lLGZ0KXwwKStNYXRoLmltdWwoSWUsaG4pfDAsQT1BK01hdGguaW11bChJZSxmdCl8MCxFPUUrTWF0aC5pbXVsKHplLFd0KXwwLG09KG09bStNYXRoLmltdWwoemUsQXQpfDApK01hdGguaW11bChEZSxXdCl8MCxBPUEr'@;
put 'TWF0aC5pbXVsKERlLEF0KXwwLEU9RStNYXRoLmltdWwoeGUsc3QpfDAsbT0obT1tK01hdGguaW11bCh4ZSxVdCl8MCkrTWF0aC5pbXVsKHZlLHN0KXwwLEE9QStNYXRoLmltdWwodmUsVXQpfDAsRT1FK01hdGguaW11bChVZSxXZSl8MCxtPShtPW0rTWF0aC5pbXVsKFVlLFR0KXwwKStNYXRo'@;
put 'LmltdWwoSmUsV2UpfDAsQT1BK01hdGguaW11bChKZSxUdCl8MDt2YXIgUXI9KGorKEU9RStNYXRoLmltdWwodGUsaHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh0ZSx4dCl8MCkrTWF0aC5pbXVsKHNlLGh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLHh0KXww'@;
put 'KSsobT4+PjEzKXwwKSsoUXI+Pj4yNil8MCxRciY9NjcxMDg4NjMsRT1NYXRoLmltdWwoeXQsUnQpLG09KG09TWF0aC5pbXVsKHl0LFB0KSkrTWF0aC5pbXVsKE10LFJ0KXwwLEE9TWF0aC5pbXVsKE10LFB0KSxFPUUrTWF0aC5pbXVsKG50LFF0KXwwLG09KG09bStNYXRoLmltdWwobnQsc24p'@;
put 'fDApK01hdGguaW11bChRZSxRdCl8MCxBPUErTWF0aC5pbXVsKFFlLHNuKXwwLEU9RStNYXRoLmltdWwoa2UsaG4pfDAsbT0obT1tK01hdGguaW11bChrZSxmdCl8MCkrTWF0aC5pbXVsKEFlLGhuKXwwLEE9QStNYXRoLmltdWwoQWUsZnQpfDAsRT1FK01hdGguaW11bChPZSxXdCl8MCxtPSht'@;
put 'PW0rTWF0aC5pbXVsKE9lLEF0KXwwKStNYXRoLmltdWwoSWUsV3QpfDAsQT1BK01hdGguaW11bChJZSxBdCl8MCxFPUUrTWF0aC5pbXVsKHplLHN0KXwwLG09KG09bStNYXRoLmltdWwoemUsVXQpfDApK01hdGguaW11bChEZSxzdCl8MCxBPUErTWF0aC5pbXVsKERlLFV0KXwwLEU9RStNYXRo'@;
put 'LmltdWwoeGUsV2UpfDAsbT0obT1tK01hdGguaW11bCh4ZSxUdCl8MCkrTWF0aC5pbXVsKHZlLFdlKXwwLEE9QStNYXRoLmltdWwodmUsVHQpfDAsRT1FK01hdGguaW11bChVZSxodCl8MCxtPShtPW0rTWF0aC5pbXVsKFVlLHh0KXwwKStNYXRoLmltdWwoSmUsaHQpfDAsQT1BK01hdGguaW11'@;
put 'bChKZSx4dCl8MDt2YXIgVmk9KGorKEU9RStNYXRoLmltdWwodGUscm4pfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh0ZSx6dCl8MCkrTWF0aC5pbXVsKHNlLHJuKXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLHp0KXwwKSsobT4+PjEzKXwwKSsoVmk+Pj4yNil8MCxW'@;
put 'aSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoaXQsUnQpLG09KG09TWF0aC5pbXVsKGl0LFB0KSkrTWF0aC5pbXVsKCRlLFJ0KXwwLEE9TWF0aC5pbXVsKCRlLFB0KSxFPUUrTWF0aC5pbXVsKHl0LFF0KXwwLG09KG09bStNYXRoLmltdWwoeXQsc24pfDApK01hdGguaW11bChNdCxRdCl8MCxBPUEr'@;
put 'TWF0aC5pbXVsKE10LHNuKXwwLEU9RStNYXRoLmltdWwobnQsaG4pfDAsbT0obT1tK01hdGguaW11bChudCxmdCl8MCkrTWF0aC5pbXVsKFFlLGhuKXwwLEE9QStNYXRoLmltdWwoUWUsZnQpfDAsRT1FK01hdGguaW11bChrZSxXdCl8MCxtPShtPW0rTWF0aC5pbXVsKGtlLEF0KXwwKStNYXRo'@;
put 'LmltdWwoQWUsV3QpfDAsQT1BK01hdGguaW11bChBZSxBdCl8MCxFPUUrTWF0aC5pbXVsKE9lLHN0KXwwLG09KG09bStNYXRoLmltdWwoT2UsVXQpfDApK01hdGguaW11bChJZSxzdCl8MCxBPUErTWF0aC5pbXVsKEllLFV0KXwwLEU9RStNYXRoLmltdWwoemUsV2UpfDAsbT0obT1tK01hdGgu'@;
put 'aW11bCh6ZSxUdCl8MCkrTWF0aC5pbXVsKERlLFdlKXwwLEE9QStNYXRoLmltdWwoRGUsVHQpfDAsRT1FK01hdGguaW11bCh4ZSxodCl8MCxtPShtPW0rTWF0aC5pbXVsKHhlLHh0KXwwKStNYXRoLmltdWwodmUsaHQpfDAsQT1BK01hdGguaW11bCh2ZSx4dCl8MCxFPUUrTWF0aC5pbXVsKFVl'@;
put 'LHJuKXwwLG09KG09bStNYXRoLmltdWwoVWUsenQpfDApK01hdGguaW11bChKZSxybil8MCxBPUErTWF0aC5pbXVsKEplLHp0KXwwO3ZhciBOaT0oaisoRT1FK01hdGguaW11bCh0ZSxjbil8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKHRlLGZuKXwwKStNYXRoLmltdWwoc2UsY24p'@;
put 'fDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2UsZm4pfDApKyhtPj4+MTMpfDApKyhOaT4+PjI2KXwwLE5pJj02NzEwODg2MyxFPU1hdGguaW11bChIZSxSdCksbT0obT1NYXRoLmltdWwoSGUsUHQpKStNYXRoLmltdWwodXQsUnQpfDAsQT1NYXRoLmltdWwodXQsUHQpLEU9RStNYXRo'@;
put 'LmltdWwoaXQsUXQpfDAsbT0obT1tK01hdGguaW11bChpdCxzbil8MCkrTWF0aC5pbXVsKCRlLFF0KXwwLEE9QStNYXRoLmltdWwoJGUsc24pfDAsRT1FK01hdGguaW11bCh5dCxobil8MCxtPShtPW0rTWF0aC5pbXVsKHl0LGZ0KXwwKStNYXRoLmltdWwoTXQsaG4pfDAsQT1BK01hdGguaW11'@;
put 'bChNdCxmdCl8MCxFPUUrTWF0aC5pbXVsKG50LFd0KXwwLG09KG09bStNYXRoLmltdWwobnQsQXQpfDApK01hdGguaW11bChRZSxXdCl8MCxBPUErTWF0aC5pbXVsKFFlLEF0KXwwLEU9RStNYXRoLmltdWwoa2Usc3QpfDAsbT0obT1tK01hdGguaW11bChrZSxVdCl8MCkrTWF0aC5pbXVsKEFl'@;
put 'LHN0KXwwLEE9QStNYXRoLmltdWwoQWUsVXQpfDAsRT1FK01hdGguaW11bChPZSxXZSl8MCxtPShtPW0rTWF0aC5pbXVsKE9lLFR0KXwwKStNYXRoLmltdWwoSWUsV2UpfDAsQT1BK01hdGguaW11bChJZSxUdCl8MCxFPUUrTWF0aC5pbXVsKHplLGh0KXwwLG09KG09bStNYXRoLmltdWwoemUs'@;
put 'eHQpfDApK01hdGguaW11bChEZSxodCl8MCxBPUErTWF0aC5pbXVsKERlLHh0KXwwLEU9RStNYXRoLmltdWwoeGUscm4pfDAsbT0obT1tK01hdGguaW11bCh4ZSx6dCl8MCkrTWF0aC5pbXVsKHZlLHJuKXwwLEE9QStNYXRoLmltdWwodmUsenQpfDAsRT1FK01hdGguaW11bChVZSxjbil8MCxt'@;
put 'PShtPW0rTWF0aC5pbXVsKFVlLGZuKXwwKStNYXRoLmltdWwoSmUsY24pfDAsQT1BK01hdGguaW11bChKZSxmbil8MDt2YXIgRGE9KGorKEU9RStNYXRoLmltdWwodGUsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh0ZSxlbil8MCkrTWF0aC5pbXVsKHNlLFh0KXwwKSk8PDEz'@;
put 'KXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLGVuKXwwKSsobT4+PjEzKXwwKSsoRGE+Pj4yNil8MCxEYSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSGUsUXQpLG09KG09TWF0aC5pbXVsKEhlLHNuKSkrTWF0aC5pbXVsKHV0LFF0KXwwLEE9TWF0aC5pbXVsKHV0LHNuKSxFPUUrTWF0aC5pbXVsKGl0'@;
put 'LGhuKXwwLG09KG09bStNYXRoLmltdWwoaXQsZnQpfDApK01hdGguaW11bCgkZSxobil8MCxBPUErTWF0aC5pbXVsKCRlLGZ0KXwwLEU9RStNYXRoLmltdWwoeXQsV3QpfDAsbT0obT1tK01hdGguaW11bCh5dCxBdCl8MCkrTWF0aC5pbXVsKE10LFd0KXwwLEE9QStNYXRoLmltdWwoTXQsQXQp'@;
put 'fDAsRT1FK01hdGguaW11bChudCxzdCl8MCxtPShtPW0rTWF0aC5pbXVsKG50LFV0KXwwKStNYXRoLmltdWwoUWUsc3QpfDAsQT1BK01hdGguaW11bChRZSxVdCl8MCxFPUUrTWF0aC5pbXVsKGtlLFdlKXwwLG09KG09bStNYXRoLmltdWwoa2UsVHQpfDApK01hdGguaW11bChBZSxXZSl8MCxB'@;
put 'PUErTWF0aC5pbXVsKEFlLFR0KXwwLEU9RStNYXRoLmltdWwoT2UsaHQpfDAsbT0obT1tK01hdGguaW11bChPZSx4dCl8MCkrTWF0aC5pbXVsKEllLGh0KXwwLEE9QStNYXRoLmltdWwoSWUseHQpfDAsRT1FK01hdGguaW11bCh6ZSxybil8MCxtPShtPW0rTWF0aC5pbXVsKHplLHp0KXwwKStN'@;
put 'YXRoLmltdWwoRGUscm4pfDAsQT1BK01hdGguaW11bChEZSx6dCl8MCxFPUUrTWF0aC5pbXVsKHhlLGNuKXwwLG09KG09bStNYXRoLmltdWwoeGUsZm4pfDApK01hdGguaW11bCh2ZSxjbil8MCxBPUErTWF0aC5pbXVsKHZlLGZuKXwwO3ZhciBMcj0oaisoRT1FK01hdGguaW11bChVZSxYdCl8'@;
put 'MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKFVlLGVuKXwwKStNYXRoLmltdWwoSmUsWHQpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoSmUsZW4pfDApKyhtPj4+MTMpfDApKyhMcj4+PjI2KXwwLExyJj02NzEwODg2MyxFPU1hdGguaW11bChIZSxobiksbT0obT1NYXRoLmlt'@;
put 'dWwoSGUsZnQpKStNYXRoLmltdWwodXQsaG4pfDAsQT1NYXRoLmltdWwodXQsZnQpLEU9RStNYXRoLmltdWwoaXQsV3QpfDAsbT0obT1tK01hdGguaW11bChpdCxBdCl8MCkrTWF0aC5pbXVsKCRlLFd0KXwwLEE9QStNYXRoLmltdWwoJGUsQXQpfDAsRT1FK01hdGguaW11bCh5dCxzdCl8MCxt'@;
put 'PShtPW0rTWF0aC5pbXVsKHl0LFV0KXwwKStNYXRoLmltdWwoTXQsc3QpfDAsQT1BK01hdGguaW11bChNdCxVdCl8MCxFPUUrTWF0aC5pbXVsKG50LFdlKXwwLG09KG09bStNYXRoLmltdWwobnQsVHQpfDApK01hdGguaW11bChRZSxXZSl8MCxBPUErTWF0aC5pbXVsKFFlLFR0KXwwLEU9RStN'@;
put 'YXRoLmltdWwoa2UsaHQpfDAsbT0obT1tK01hdGguaW11bChrZSx4dCl8MCkrTWF0aC5pbXVsKEFlLGh0KXwwLEE9QStNYXRoLmltdWwoQWUseHQpfDAsRT1FK01hdGguaW11bChPZSxybil8MCxtPShtPW0rTWF0aC5pbXVsKE9lLHp0KXwwKStNYXRoLmltdWwoSWUscm4pfDAsQT1BK01hdGgu'@;
put 'aW11bChJZSx6dCl8MCxFPUUrTWF0aC5pbXVsKHplLGNuKXwwLG09KG09bStNYXRoLmltdWwoemUsZm4pfDApK01hdGguaW11bChEZSxjbil8MCxBPUErTWF0aC5pbXVsKERlLGZuKXwwO3ZhciBXaT0oaisoRT1FK01hdGguaW11bCh4ZSxYdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5p'@;
put 'bXVsKHhlLGVuKXwwKStNYXRoLmltdWwodmUsWHQpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwodmUsZW4pfDApKyhtPj4+MTMpfDApKyhXaT4+PjI2KXwwLFdpJj02NzEwODg2MyxFPU1hdGguaW11bChIZSxXdCksbT0obT1NYXRoLmltdWwoSGUsQXQpKStNYXRoLmltdWwodXQsV3Qp'@;
put 'fDAsQT1NYXRoLmltdWwodXQsQXQpLEU9RStNYXRoLmltdWwoaXQsc3QpfDAsbT0obT1tK01hdGguaW11bChpdCxVdCl8MCkrTWF0aC5pbXVsKCRlLHN0KXwwLEE9QStNYXRoLmltdWwoJGUsVXQpfDAsRT1FK01hdGguaW11bCh5dCxXZSl8MCxtPShtPW0rTWF0aC5pbXVsKHl0LFR0KXwwKStN'@;
put 'YXRoLmltdWwoTXQsV2UpfDAsQT1BK01hdGguaW11bChNdCxUdCl8MCxFPUUrTWF0aC5pbXVsKG50LGh0KXwwLG09KG09bStNYXRoLmltdWwobnQseHQpfDApK01hdGguaW11bChRZSxodCl8MCxBPUErTWF0aC5pbXVsKFFlLHh0KXwwLEU9RStNYXRoLmltdWwoa2Uscm4pfDAsbT0obT1tK01h'@;
put 'dGguaW11bChrZSx6dCl8MCkrTWF0aC5pbXVsKEFlLHJuKXwwLEE9QStNYXRoLmltdWwoQWUsenQpfDAsRT1FK01hdGguaW11bChPZSxjbil8MCxtPShtPW0rTWF0aC5pbXVsKE9lLGZuKXwwKStNYXRoLmltdWwoSWUsY24pfDAsQT1BK01hdGguaW11bChJZSxmbil8MDt2YXIgcGE9KGorKEU9'@;
put 'RStNYXRoLmltdWwoemUsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh6ZSxlbil8MCkrTWF0aC5pbXVsKERlLFh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKERlLGVuKXwwKSsobT4+PjEzKXwwKSsocGE+Pj4yNil8MCxwYSY9NjcxMDg4NjMsRT1NYXRoLmltdWwo'@;
put 'SGUsc3QpLG09KG09TWF0aC5pbXVsKEhlLFV0KSkrTWF0aC5pbXVsKHV0LHN0KXwwLEE9TWF0aC5pbXVsKHV0LFV0KSxFPUUrTWF0aC5pbXVsKGl0LFdlKXwwLG09KG09bStNYXRoLmltdWwoaXQsVHQpfDApK01hdGguaW11bCgkZSxXZSl8MCxBPUErTWF0aC5pbXVsKCRlLFR0KXwwLEU9RStN'@;
put 'YXRoLmltdWwoeXQsaHQpfDAsbT0obT1tK01hdGguaW11bCh5dCx4dCl8MCkrTWF0aC5pbXVsKE10LGh0KXwwLEE9QStNYXRoLmltdWwoTXQseHQpfDAsRT1FK01hdGguaW11bChudCxybil8MCxtPShtPW0rTWF0aC5pbXVsKG50LHp0KXwwKStNYXRoLmltdWwoUWUscm4pfDAsQT1BK01hdGgu'@;
put 'aW11bChRZSx6dCl8MCxFPUUrTWF0aC5pbXVsKGtlLGNuKXwwLG09KG09bStNYXRoLmltdWwoa2UsZm4pfDApK01hdGguaW11bChBZSxjbil8MCxBPUErTWF0aC5pbXVsKEFlLGZuKXwwO3ZhciBRbj0oaisoRT1FK01hdGguaW11bChPZSxYdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5p'@;
put 'bXVsKE9lLGVuKXwwKStNYXRoLmltdWwoSWUsWHQpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoSWUsZW4pfDApKyhtPj4+MTMpfDApKyhRbj4+PjI2KXwwLFFuJj02NzEwODg2MyxFPU1hdGguaW11bChIZSxXZSksbT0obT1NYXRoLmltdWwoSGUsVHQpKStNYXRoLmltdWwodXQsV2Up'@;
put 'fDAsQT1NYXRoLmltdWwodXQsVHQpLEU9RStNYXRoLmltdWwoaXQsaHQpfDAsbT0obT1tK01hdGguaW11bChpdCx4dCl8MCkrTWF0aC5pbXVsKCRlLGh0KXwwLEE9QStNYXRoLmltdWwoJGUseHQpfDAsRT1FK01hdGguaW11bCh5dCxybil8MCxtPShtPW0rTWF0aC5pbXVsKHl0LHp0KXwwKStN'@;
put 'YXRoLmltdWwoTXQscm4pfDAsQT1BK01hdGguaW11bChNdCx6dCl8MCxFPUUrTWF0aC5pbXVsKG50LGNuKXwwLG09KG09bStNYXRoLmltdWwobnQsZm4pfDApK01hdGguaW11bChRZSxjbil8MCxBPUErTWF0aC5pbXVsKFFlLGZuKXwwO3ZhciBsYT0oaisoRT1FK01hdGguaW11bChrZSxYdCl8'@;
put 'MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKGtlLGVuKXwwKStNYXRoLmltdWwoQWUsWHQpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoQWUsZW4pfDApKyhtPj4+MTMpfDApKyhsYT4+PjI2KXwwLGxhJj02NzEwODg2MyxFPU1hdGguaW11bChIZSxodCksbT0obT1NYXRoLmlt'@;
put 'dWwoSGUseHQpKStNYXRoLmltdWwodXQsaHQpfDAsQT1NYXRoLmltdWwodXQseHQpLEU9RStNYXRoLmltdWwoaXQscm4pfDAsbT0obT1tK01hdGguaW11bChpdCx6dCl8MCkrTWF0aC5pbXVsKCRlLHJuKXwwLEE9QStNYXRoLmltdWwoJGUsenQpfDAsRT1FK01hdGguaW11bCh5dCxjbil8MCxt'@;
put 'PShtPW0rTWF0aC5pbXVsKHl0LGZuKXwwKStNYXRoLmltdWwoTXQsY24pfDAsQT1BK01hdGguaW11bChNdCxmbil8MDt2YXIgeWE9KGorKEU9RStNYXRoLmltdWwobnQsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChudCxlbil8MCkrTWF0aC5pbXVsKFFlLFh0KXwwKSk8PDEz'@;
put 'KXwwO2o9KChBPUErTWF0aC5pbXVsKFFlLGVuKXwwKSsobT4+PjEzKXwwKSsoeWE+Pj4yNil8MCx5YSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSGUscm4pLG09KG09TWF0aC5pbXVsKEhlLHp0KSkrTWF0aC5pbXVsKHV0LHJuKXwwLEE9TWF0aC5pbXVsKHV0LHp0KSxFPUUrTWF0aC5pbXVsKGl0'@;
put 'LGNuKXwwLG09KG09bStNYXRoLmltdWwoaXQsZm4pfDApK01hdGguaW11bCgkZSxjbil8MCxBPUErTWF0aC5pbXVsKCRlLGZuKXwwO3ZhciBMYT0oaisoRT1FK01hdGguaW11bCh5dCxYdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKHl0LGVuKXwwKStNYXRoLmltdWwoTXQsWHQp'@;
put 'fDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoTXQsZW4pfDApKyhtPj4+MTMpfDApKyhMYT4+PjI2KXwwLExhJj02NzEwODg2MyxFPU1hdGguaW11bChIZSxjbiksbT0obT1NYXRoLmltdWwoSGUsZm4pKStNYXRoLmltdWwodXQsY24pfDAsQT1NYXRoLmltdWwodXQsZm4pO3ZhciBGYT0o'@;
put 'aisoRT1FK01hdGguaW11bChpdCxYdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKGl0LGVuKXwwKStNYXRoLmltdWwoJGUsWHQpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoJGUsZW4pfDApKyhtPj4+MTMpfDApKyhGYT4+PjI2KXwwLEZhJj02NzEwODg2Mzt2YXIgdGk9'@;
put 'KGorKEU9TWF0aC5pbXVsKEhlLFh0KSl8MCkrKCg4MTkxJihtPShtPU1hdGguaW11bChIZSxlbikpK01hdGguaW11bCh1dCxYdCl8MCkpPDwxMyl8MDtyZXR1cm4gaj0oKEE9TWF0aC5pbXVsKHV0LGVuKSkrKG0+Pj4xMyl8MCkrKHRpPj4+MjYpfDAsdGkmPTY3MTA4ODYzLEhbMF09dWEsSFsx'@;
put 'XT1FaSxIWzJdPXZyLEhbM109V24sSFs0XT0kaSxIWzVdPWVpLEhbNl09UXIsSFs3XT1WaSxIWzhdPU5pLEhbOV09RGEsSFsxMF09THIsSFsxMV09V2ksSFsxMl09cGEsSFsxM109UW4sSFsxNF09bGEsSFsxNV09eWEsSFsxNl09TGEsSFsxN109RmEsSFsxOF09dGksMCE9PWomJihIWzE5XT1q'@;
put 'LHgubGVuZ3RoKyspLHh9O2Z1bmN0aW9uIGVlKFYscCxiKXtyZXR1cm4obmV3IEopLm11bHAoVixwLGIpfWZ1bmN0aW9uIEooVixwKXt0aGlzLng9Vix0aGlzLnk9cH1NYXRoLmltdWx8fChZPVcpLHcucHJvdG90eXBlLm11bFRvPWZ1bmN0aW9uKHAsYil7dmFyIHgsQz10aGlzLmxlbmd0aCtw'@;
put 'Lmxlbmd0aDtyZXR1cm4geD0xMD09PXRoaXMubGVuZ3RoJiYxMD09PXAubGVuZ3RoP1kodGhpcyxwLGIpOkM8NjM/Vyh0aGlzLHAsYik6QzwxMDI0P2Z1bmN0aW9uIHEoVixwLGIpe2IubmVnYXRpdmU9cC5uZWdhdGl2ZV5WLm5lZ2F0aXZlLGIubGVuZ3RoPVYubGVuZ3RoK3AubGVuZ3RoO2Zv'@;
put 'cih2YXIgeD0wLEM9MCxUPTA7VDxiLmxlbmd0aC0xO1QrKyl7dmFyIEg9QztDPTA7Zm9yKHZhciBqPTY3MTA4ODYzJngsRT1NYXRoLm1pbihULHAubGVuZ3RoLTEpLG09TWF0aC5tYXgoMCxULVYubGVuZ3RoKzEpO208PUU7bSsrKXt2YXIgc2U9KDB8Vi53b3Jkc1tULW1dKSooMHxwLndvcmRz'@;
put 'W21dKSx3ZT02NzEwODg2MyZzZTtqPTY3MTA4ODYzJih3ZT13ZStqfDApLEMrPShIPShIPUgrKHNlLzY3MTA4ODY0fDApfDApKyh3ZT4+PjI2KXwwKT4+PjI2LEgmPTY3MTA4ODYzfWIud29yZHNbVF09aix4PUgsSD1DfXJldHVybiAwIT09eD9iLndvcmRzW1RdPXg6Yi5sZW5ndGgtLSxiLnN0'@;
put 'cmlwKCl9KHRoaXMscCxiKTplZSh0aGlzLHAsYikseH0sSi5wcm90b3R5cGUubWFrZVJCVD1mdW5jdGlvbihwKXtmb3IodmFyIGI9bmV3IEFycmF5KHApLHg9dy5wcm90b3R5cGUuX2NvdW50Qml0cyhwKS0xLEM9MDtDPHA7QysrKWJbQ109dGhpcy5yZXZCaW4oQyx4LHApO3JldHVybiBifSxK'@;
put 'LnByb3RvdHlwZS5yZXZCaW49ZnVuY3Rpb24ocCxiLHgpe2lmKDA9PT1wfHxwPT09eC0xKXJldHVybiBwO2Zvcih2YXIgQz0wLFQ9MDtUPGI7VCsrKUN8PSgxJnApPDxiLVQtMSxwPj49MTtyZXR1cm4gQ30sSi5wcm90b3R5cGUucGVybXV0ZT1mdW5jdGlvbihwLGIseCxDLFQsSCl7Zm9yKHZh'@;
put 'ciBqPTA7ajxIO2orKylDW2pdPWJbcFtqXV0sVFtqXT14W3Bbal1dfSxKLnByb3RvdHlwZS50cmFuc2Zvcm09ZnVuY3Rpb24ocCxiLHgsQyxULEgpe3RoaXMucGVybXV0ZShILHAsYix4LEMsVCk7Zm9yKHZhciBqPTE7ajxUO2o8PD0xKWZvcih2YXIgRT1qPDwxLG09TWF0aC5jb3MoMipNYXRo'@;
put 'LlBJL0UpLEE9TWF0aC5zaW4oMipNYXRoLlBJL0UpLGFlPTA7YWU8VDthZSs9RSlmb3IodmFyIHRlPW0sc2U9QSx3ZT0wO3dlPGo7d2UrKyl7dmFyIFVlPXhbYWUrd2VdLEplPUNbYWUrd2VdLG90PXhbYWUrd2Ural0seGU9Q1thZSt3ZStqXSx2ZT10ZSpvdC1zZSp4ZTt4ZT10ZSp4ZStzZSpv'@;
put 'dCx4W2FlK3dlXT1VZSsob3Q9dmUpLENbYWUrd2VdPUplK3hlLHhbYWUrd2Ural09VWUtb3QsQ1thZSt3ZStqXT1KZS14ZSx3ZSE9PUUmJih2ZT1tKnRlLUEqc2Usc2U9bSpzZStBKnRlLHRlPXZlKX19LEoucHJvdG90eXBlLmd1ZXNzTGVuMTNiPWZ1bmN0aW9uKHAsYil7dmFyIHg9MXxNYXRo'@;
put 'Lm1heChiLHApLEM9MSZ4LFQ9MDtmb3IoeD14LzJ8MDt4O3g+Pj49MSlUKys7cmV0dXJuIDE8PFQrMStDfSxKLnByb3RvdHlwZS5jb25qdWdhdGU9ZnVuY3Rpb24ocCxiLHgpe2lmKCEoeDw9MSkpZm9yKHZhciBDPTA7Qzx4LzI7QysrKXt2YXIgVD1wW0NdO3BbQ109cFt4LUMtMV0scFt4LUMt'@;
put 'MV09VCxUPWJbQ10sYltDXT0tYlt4LUMtMV0sYlt4LUMtMV09LVR9fSxKLnByb3RvdHlwZS5ub3JtYWxpemUxM2I9ZnVuY3Rpb24ocCxiKXtmb3IodmFyIHg9MCxDPTA7QzxiLzI7QysrKXt2YXIgVD04MTkyKk1hdGgucm91bmQocFsyKkMrMV0vYikrTWF0aC5yb3VuZChwWzIqQ10vYikreDtw'@;
put 'W0NdPTY3MTA4ODYzJlQseD1UPDY3MTA4ODY0PzA6VC82NzEwODg2NHwwfXJldHVybiBwfSxKLnByb3RvdHlwZS5jb252ZXJ0MTNiPWZ1bmN0aW9uKHAsYix4LEMpe2Zvcih2YXIgVD0wLEg9MDtIPGI7SCsrKXhbMipIXT04MTkxJihUKz0wfHBbSF0pLHhbMipIKzFdPTgxOTEmKFQ+Pj49MTMp'@;
put 'LFQ+Pj49MTM7Zm9yKEg9MipiO0g8QzsrK0gpeFtIXT0wO2coMD09PVQpLGcoISgtODE5MiZUKSl9LEoucHJvdG90eXBlLnN0dWI9ZnVuY3Rpb24ocCl7Zm9yKHZhciBiPW5ldyBBcnJheShwKSx4PTA7eDxwO3grKyliW3hdPTA7cmV0dXJuIGJ9LEoucHJvdG90eXBlLm11bHA9ZnVuY3Rpb24o'@;
put 'cCxiLHgpe3ZhciBDPTIqdGhpcy5ndWVzc0xlbjEzYihwLmxlbmd0aCxiLmxlbmd0aCksVD10aGlzLm1ha2VSQlQoQyksSD10aGlzLnN0dWIoQyksaj1uZXcgQXJyYXkoQyksRT1uZXcgQXJyYXkoQyksbT1uZXcgQXJyYXkoQyksQT1uZXcgQXJyYXkoQyksYWU9bmV3IEFycmF5KEMpLHRlPW5l'@;
put 'dyBBcnJheShDKSxzZT14LndvcmRzO3NlLmxlbmd0aD1DLHRoaXMuY29udmVydDEzYihwLndvcmRzLHAubGVuZ3RoLGosQyksdGhpcy5jb252ZXJ0MTNiKGIud29yZHMsYi5sZW5ndGgsQSxDKSx0aGlzLnRyYW5zZm9ybShqLEgsRSxtLEMsVCksdGhpcy50cmFuc2Zvcm0oQSxILGFlLHRlLEMs'@;
put 'VCk7Zm9yKHZhciB3ZT0wO3dlPEM7d2UrKyl7dmFyIFVlPUVbd2VdKmFlW3dlXS1tW3dlXSp0ZVt3ZV07bVt3ZV09RVt3ZV0qdGVbd2VdK21bd2VdKmFlW3dlXSxFW3dlXT1VZX1yZXR1cm4gdGhpcy5jb25qdWdhdGUoRSxtLEMpLHRoaXMudHJhbnNmb3JtKEUsbSxzZSxILEMsVCksdGhpcy5j'@;
put 'b25qdWdhdGUoc2UsSCxDKSx0aGlzLm5vcm1hbGl6ZTEzYihzZSxDKSx4Lm5lZ2F0aXZlPXAubmVnYXRpdmVeYi5uZWdhdGl2ZSx4Lmxlbmd0aD1wLmxlbmd0aCtiLmxlbmd0aCx4LnN0cmlwKCl9LHcucHJvdG90eXBlLm11bD1mdW5jdGlvbihwKXt2YXIgYj1uZXcgdyhudWxsKTtyZXR1cm4g'@;
put 'Yi53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgrcC5sZW5ndGgpLHRoaXMubXVsVG8ocCxiKX0sdy5wcm90b3R5cGUubXVsZj1mdW5jdGlvbihwKXt2YXIgYj1uZXcgdyhudWxsKTtyZXR1cm4gYi53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgrcC5sZW5ndGgpLGVlKHRoaXMscCxiKX0s'@;
put 'dy5wcm90b3R5cGUuaW11bD1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLm11bFRvKHAsdGhpcyl9LHcucHJvdG90eXBlLmltdWxuPWZ1bmN0aW9uKHApe2coIm51bWJlciI9PXR5cGVvZiBwKSxnKHA8NjcxMDg4NjQpO2Zvcih2YXIgYj0wLHg9MDt4PHRoaXMubGVuZ3RoO3grKyl7'@;
put 'dmFyIEM9KDB8dGhpcy53b3Jkc1t4XSkqcCxUPSg2NzEwODg2MyZDKSsoNjcxMDg4NjMmYik7Yj4+PTI2LGIrPUMvNjcxMDg4NjR8MCxiKz1UPj4+MjYsdGhpcy53b3Jkc1t4XT02NzEwODg2MyZUfXJldHVybiAwIT09YiYmKHRoaXMud29yZHNbeF09Yix0aGlzLmxlbmd0aCsrKSx0aGlzfSx3'@;
put 'LnByb3RvdHlwZS5tdWxuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaW11bG4ocCl9LHcucHJvdG90eXBlLnNxcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLm11bCh0aGlzKX0sdy5wcm90b3R5cGUuaXNxcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmltdWwodGhpcy5jbG9uZSgp'@;
put 'KX0sdy5wcm90b3R5cGUucG93PWZ1bmN0aW9uKHApe3ZhciBiPWZ1bmN0aW9uIFUoVil7Zm9yKHZhciBwPW5ldyBBcnJheShWLmJpdExlbmd0aCgpKSxiPTA7YjxwLmxlbmd0aDtiKyspe3ZhciBDPWIlMjY7cFtiXT0oVi53b3Jkc1tiLzI2fDBdJjE8PEMpPj4+Q31yZXR1cm4gcH0ocCk7aWYo'@;
put 'MD09PWIubGVuZ3RoKXJldHVybiBuZXcgdygxKTtmb3IodmFyIHg9dGhpcyxDPTA7QzxiLmxlbmd0aCYmMD09PWJbQ107QysrLHg9eC5zcXIoKSk7aWYoKytDPGIubGVuZ3RoKWZvcih2YXIgVD14LnNxcigpO0M8Yi5sZW5ndGg7QysrLFQ9VC5zcXIoKSkwIT09YltDXSYmKHg9eC5tdWwoVCkp'@;
put 'O3JldHVybiB4fSx3LnByb3RvdHlwZS5pdXNobG49ZnVuY3Rpb24ocCl7ZygibnVtYmVyIj09dHlwZW9mIHAmJnA+PTApO3ZhciBULGI9cCUyNix4PShwLWIpLzI2LEM9NjcxMDg4NjM+Pj4yNi1iPDwyNi1iO2lmKDAhPT1iKXt2YXIgSD0wO2ZvcihUPTA7VDx0aGlzLmxlbmd0aDtUKyspe3Zh'@;
put 'ciBqPXRoaXMud29yZHNbVF0mQzt0aGlzLndvcmRzW1RdPSgwfHRoaXMud29yZHNbVF0pLWo8PGJ8SCxIPWo+Pj4yNi1ifUgmJih0aGlzLndvcmRzW1RdPUgsdGhpcy5sZW5ndGgrKyl9aWYoMCE9PXgpe2ZvcihUPXRoaXMubGVuZ3RoLTE7VD49MDtULS0pdGhpcy53b3Jkc1tUK3hdPXRoaXMu'@;
put 'd29yZHNbVF07Zm9yKFQ9MDtUPHg7VCsrKXRoaXMud29yZHNbVF09MDt0aGlzLmxlbmd0aCs9eH1yZXR1cm4gdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5pc2hsbj1mdW5jdGlvbihwKXtyZXR1cm4gZygwPT09dGhpcy5uZWdhdGl2ZSksdGhpcy5pdXNobG4ocCl9LHcucHJvdG90eXBlLml1'@;
put 'c2hybj1mdW5jdGlvbihwLGIseCl7dmFyIEM7ZygibnVtYmVyIj09dHlwZW9mIHAmJnA+PTApLEM9Yj8oYi1iJTI2KS8yNjowO3ZhciBUPXAlMjYsSD1NYXRoLm1pbigocC1UKS8yNix0aGlzLmxlbmd0aCksaj02NzEwODg2M142NzEwODg2Mz4+PlQ8PFQsRT14O2lmKEMtPUgsQz1NYXRoLm1h'@;
put 'eCgwLEMpLEUpe2Zvcih2YXIgbT0wO208SDttKyspRS53b3Jkc1ttXT10aGlzLndvcmRzW21dO0UubGVuZ3RoPUh9aWYoMCE9PUgpaWYodGhpcy5sZW5ndGg+SClmb3IodGhpcy5sZW5ndGgtPUgsbT0wO208dGhpcy5sZW5ndGg7bSsrKXRoaXMud29yZHNbbV09dGhpcy53b3Jkc1ttK0hdO2Vs'@;
put 'c2UgdGhpcy53b3Jkc1swXT0wLHRoaXMubGVuZ3RoPTE7dmFyIEE9MDtmb3IobT10aGlzLmxlbmd0aC0xO20+PTAmJigwIT09QXx8bT49Qyk7bS0tKXt2YXIgYWU9MHx0aGlzLndvcmRzW21dO3RoaXMud29yZHNbbV09QTw8MjYtVHxhZT4+PlQsQT1hZSZqfXJldHVybiBFJiYwIT09QSYmKEUu'@;
put 'd29yZHNbRS5sZW5ndGgrK109QSksMD09PXRoaXMubGVuZ3RoJiYodGhpcy53b3Jkc1swXT0wLHRoaXMubGVuZ3RoPTEpLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuaXNocm49ZnVuY3Rpb24ocCxiLHgpe3JldHVybiBnKDA9PT10aGlzLm5lZ2F0aXZlKSx0aGlzLml1c2hybihwLGIseCl9'@;
put 'LHcucHJvdG90eXBlLnNobG49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc2hsbihwKX0sdy5wcm90b3R5cGUudXNobG49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pdXNobG4ocCl9LHcucHJvdG90eXBlLnNocm49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xv'@;
put 'bmUoKS5pc2hybihwKX0sdy5wcm90b3R5cGUudXNocm49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pdXNocm4ocCl9LHcucHJvdG90eXBlLnRlc3RuPWZ1bmN0aW9uKHApe2coIm51bWJlciI9PXR5cGVvZiBwJiZwPj0wKTt2YXIgYj1wJTI2LHg9KHAtYikvMjY7cmV0dXJuISh0'@;
put 'aGlzLmxlbmd0aDw9eHx8ISh0aGlzLndvcmRzW3hdJjE8PGIpKX0sdy5wcm90b3R5cGUuaW1hc2tuPWZ1bmN0aW9uKHApe2coIm51bWJlciI9PXR5cGVvZiBwJiZwPj0wKTt2YXIgYj1wJTI2LHg9KHAtYikvMjY7cmV0dXJuIGcoMD09PXRoaXMubmVnYXRpdmUsImltYXNrbiB3b3JrcyBvbmx5'@;
put 'IHdpdGggcG9zaXRpdmUgbnVtYmVycyIpLHRoaXMubGVuZ3RoPD14P3RoaXM6KDAhPT1iJiZ4KyssdGhpcy5sZW5ndGg9TWF0aC5taW4oeCx0aGlzLmxlbmd0aCksMCE9PWImJih0aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdJj02NzEwODg2M142NzEwODg2Mz4+PmI8PGIpLHRoaXMuc3RyaXAo'@;
put 'KSl9LHcucHJvdG90eXBlLm1hc2tuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaW1hc2tuKHApfSx3LnByb3RvdHlwZS5pYWRkbj1mdW5jdGlvbihwKXtyZXR1cm4gZygibnVtYmVyIj09dHlwZW9mIHApLGcocDw2NzEwODg2NCkscDwwP3RoaXMuaXN1Ym4oLXApOjAhPT10aGlz'@;
put 'Lm5lZ2F0aXZlPzE9PT10aGlzLmxlbmd0aCYmKDB8dGhpcy53b3Jkc1swXSk8cD8odGhpcy53b3Jkc1swXT1wLSgwfHRoaXMud29yZHNbMF0pLHRoaXMubmVnYXRpdmU9MCx0aGlzKToodGhpcy5uZWdhdGl2ZT0wLHRoaXMuaXN1Ym4ocCksdGhpcy5uZWdhdGl2ZT0xLHRoaXMpOnRoaXMuX2lh'@;
put 'ZGRuKHApfSx3LnByb3RvdHlwZS5faWFkZG49ZnVuY3Rpb24ocCl7dGhpcy53b3Jkc1swXSs9cDtmb3IodmFyIGI9MDtiPHRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzW2JdPj02NzEwODg2NDtiKyspdGhpcy53b3Jkc1tiXS09NjcxMDg4NjQsYj09PXRoaXMubGVuZ3RoLTE/dGhpcy53b3Jkc1ti'@;
put 'KzFdPTE6dGhpcy53b3Jkc1tiKzFdKys7cmV0dXJuIHRoaXMubGVuZ3RoPU1hdGgubWF4KHRoaXMubGVuZ3RoLGIrMSksdGhpc30sdy5wcm90b3R5cGUuaXN1Ym49ZnVuY3Rpb24ocCl7aWYoZygibnVtYmVyIj09dHlwZW9mIHApLGcocDw2NzEwODg2NCkscDwwKXJldHVybiB0aGlzLmlhZGRu'@;
put 'KC1wKTtpZigwIT09dGhpcy5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMuaWFkZG4ocCksdGhpcy5uZWdhdGl2ZT0xLHRoaXM7aWYodGhpcy53b3Jkc1swXS09cCwxPT09dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbMF08MCl0aGlzLndvcmRzWzBdPS10aGlzLndvcmRzWzBd'@;
put 'LHRoaXMubmVnYXRpdmU9MTtlbHNlIGZvcih2YXIgYj0wO2I8dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbYl08MDtiKyspdGhpcy53b3Jkc1tiXSs9NjcxMDg4NjQsdGhpcy53b3Jkc1tiKzFdLT0xO3JldHVybiB0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmFkZG49ZnVuY3Rpb24ocCl7cmV0'@;
put 'dXJuIHRoaXMuY2xvbmUoKS5pYWRkbihwKX0sdy5wcm90b3R5cGUuc3Vibj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzdWJuKHApfSx3LnByb3RvdHlwZS5pYWJzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzfSx3LnByb3RvdHlwZS5hYnM9ZnVuY3Rp'@;
put 'b24oKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlhYnMoKX0sdy5wcm90b3R5cGUuX2lzaGxuc3VibXVsPWZ1bmN0aW9uKHAsYix4KXt2YXIgVDt0aGlzLl9leHBhbmQocC5sZW5ndGgreCk7dmFyIEgsaj0wO2ZvcihUPTA7VDxwLmxlbmd0aDtUKyspe0g9KDB8dGhpcy53b3Jkc1tUK3hdKStqO3Zh'@;
put 'ciBFPSgwfHAud29yZHNbVF0pKmI7aj0oKEgtPTY3MTA4ODYzJkUpPj4yNiktKEUvNjcxMDg4NjR8MCksdGhpcy53b3Jkc1tUK3hdPTY3MTA4ODYzJkh9Zm9yKDtUPHRoaXMubGVuZ3RoLXg7VCsrKWo9KEg9KDB8dGhpcy53b3Jkc1tUK3hdKStqKT4+MjYsdGhpcy53b3Jkc1tUK3hdPTY3MTA4'@;
put 'ODYzJkg7aWYoMD09PWopcmV0dXJuIHRoaXMuc3RyaXAoKTtmb3IoZygtMT09PWopLGo9MCxUPTA7VDx0aGlzLmxlbmd0aDtUKyspaj0oSD0tKDB8dGhpcy53b3Jkc1tUXSkraik+PjI2LHRoaXMud29yZHNbVF09NjcxMDg4NjMmSDtyZXR1cm4gdGhpcy5uZWdhdGl2ZT0xLHRoaXMuc3RyaXAo'@;
put 'KX0sdy5wcm90b3R5cGUuX3dvcmREaXY9ZnVuY3Rpb24ocCxiKXt2YXIgeCxDPXRoaXMuY2xvbmUoKSxUPXAsSD0wfFQud29yZHNbVC5sZW5ndGgtMV07MCE9KHg9MjYtdGhpcy5fY291bnRCaXRzKEgpKSYmKFQ9VC51c2hsbih4KSxDLml1c2hsbih4KSxIPTB8VC53b3Jkc1tULmxlbmd0aC0x'@;
put 'XSk7dmFyIG0sRT1DLmxlbmd0aC1ULmxlbmd0aDtpZigibW9kIiE9PWIpeyhtPW5ldyB3KG51bGwpKS5sZW5ndGg9RSsxLG0ud29yZHM9bmV3IEFycmF5KG0ubGVuZ3RoKTtmb3IodmFyIEE9MDtBPG0ubGVuZ3RoO0ErKyltLndvcmRzW0FdPTB9dmFyIGFlPUMuY2xvbmUoKS5faXNobG5zdWJt'@;
put 'dWwoVCwxLEUpOzA9PT1hZS5uZWdhdGl2ZSYmKEM9YWUsbSYmKG0ud29yZHNbRV09MSkpO2Zvcih2YXIgdGU9RS0xO3RlPj0wO3RlLS0pe3ZhciBzZT02NzEwODg2NCooMHxDLndvcmRzW1QubGVuZ3RoK3RlXSkrKDB8Qy53b3Jkc1tULmxlbmd0aCt0ZS0xXSk7Zm9yKHNlPU1hdGgubWluKHNl'@;
put 'L0h8MCw2NzEwODg2MyksQy5faXNobG5zdWJtdWwoVCxzZSx0ZSk7MCE9PUMubmVnYXRpdmU7KXNlLS0sQy5uZWdhdGl2ZT0wLEMuX2lzaGxuc3VibXVsKFQsMSx0ZSksQy5pc1plcm8oKXx8KEMubmVnYXRpdmVePTEpO20mJihtLndvcmRzW3RlXT1zZSl9cmV0dXJuIG0mJm0uc3RyaXAoKSxD'@;
put 'LnN0cmlwKCksImRpdiIhPT1iJiYwIT09eCYmQy5pdXNocm4oeCkse2RpdjptfHxudWxsLG1vZDpDfX0sdy5wcm90b3R5cGUuZGl2bW9kPWZ1bmN0aW9uKHAsYix4KXtyZXR1cm4gZyghcC5pc1plcm8oKSksdGhpcy5pc1plcm8oKT97ZGl2Om5ldyB3KDApLG1vZDpuZXcgdygwKX06MCE9PXRo'@;
put 'aXMubmVnYXRpdmUmJjA9PT1wLm5lZ2F0aXZlPyhIPXRoaXMubmVnKCkuZGl2bW9kKHAsYiksIm1vZCIhPT1iJiYoQz1ILmRpdi5uZWcoKSksImRpdiIhPT1iJiYoVD1ILm1vZC5uZWcoKSx4JiYwIT09VC5uZWdhdGl2ZSYmVC5pYWRkKHApKSx7ZGl2OkMsbW9kOlR9KTowPT09dGhpcy5uZWdh'@;
put 'dGl2ZSYmMCE9PXAubmVnYXRpdmU/KEg9dGhpcy5kaXZtb2QocC5uZWcoKSxiKSwibW9kIiE9PWImJihDPUguZGl2Lm5lZygpKSx7ZGl2OkMsbW9kOkgubW9kfSk6dGhpcy5uZWdhdGl2ZSZwLm5lZ2F0aXZlPyhIPXRoaXMubmVnKCkuZGl2bW9kKHAubmVnKCksYiksImRpdiIhPT1iJiYoVD1I'@;
put 'Lm1vZC5uZWcoKSx4JiYwIT09VC5uZWdhdGl2ZSYmVC5pc3ViKHApKSx7ZGl2OkguZGl2LG1vZDpUfSk6cC5sZW5ndGg+dGhpcy5sZW5ndGh8fHRoaXMuY21wKHApPDA/e2RpdjpuZXcgdygwKSxtb2Q6dGhpc306MT09PXAubGVuZ3RoPyJkaXYiPT09Yj97ZGl2OnRoaXMuZGl2bihwLndvcmRz'@;
put 'WzBdKSxtb2Q6bnVsbH06Im1vZCI9PT1iP3tkaXY6bnVsbCxtb2Q6bmV3IHcodGhpcy5tb2RuKHAud29yZHNbMF0pKX06e2Rpdjp0aGlzLmRpdm4ocC53b3Jkc1swXSksbW9kOm5ldyB3KHRoaXMubW9kbihwLndvcmRzWzBdKSl9OnRoaXMuX3dvcmREaXYocCxiKTt2YXIgQyxULEh9LHcucHJv'@;
put 'dG90eXBlLmRpdj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5kaXZtb2QocCwiZGl2IiwhMSkuZGl2fSx3LnByb3RvdHlwZS5tb2Q9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuZGl2bW9kKHAsIm1vZCIsITEpLm1vZH0sdy5wcm90b3R5cGUudW1vZD1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5k'@;
put 'aXZtb2QocCwibW9kIiwhMCkubW9kfSx3LnByb3RvdHlwZS5kaXZSb3VuZD1mdW5jdGlvbihwKXt2YXIgYj10aGlzLmRpdm1vZChwKTtpZihiLm1vZC5pc1plcm8oKSlyZXR1cm4gYi5kaXY7dmFyIHg9MCE9PWIuZGl2Lm5lZ2F0aXZlP2IubW9kLmlzdWIocCk6Yi5tb2QsQz1wLnVzaHJuKDEp'@;
put 'LFQ9cC5hbmRsbigxKSxIPXguY21wKEMpO3JldHVybiBIPDB8fDE9PT1UJiYwPT09SD9iLmRpdjowIT09Yi5kaXYubmVnYXRpdmU/Yi5kaXYuaXN1Ym4oMSk6Yi5kaXYuaWFkZG4oMSl9LHcucHJvdG90eXBlLm1vZG49ZnVuY3Rpb24ocCl7ZyhwPD02NzEwODg2Myk7Zm9yKHZhciBiPSgxPDwy'@;
put 'NiklcCx4PTAsQz10aGlzLmxlbmd0aC0xO0M+PTA7Qy0tKXg9KGIqeCsoMHx0aGlzLndvcmRzW0NdKSklcDtyZXR1cm4geH0sdy5wcm90b3R5cGUuaWRpdm49ZnVuY3Rpb24ocCl7ZyhwPD02NzEwODg2Myk7Zm9yKHZhciBiPTAseD10aGlzLmxlbmd0aC0xO3g+PTA7eC0tKXt2YXIgQz0oMHx0'@;
put 'aGlzLndvcmRzW3hdKSs2NzEwODg2NCpiO3RoaXMud29yZHNbeF09Qy9wfDAsYj1DJXB9cmV0dXJuIHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuZGl2bj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlkaXZuKHApfSx3LnByb3RvdHlwZS5lZ2NkPWZ1bmN0aW9uKHApe2coMD09'@;
put 'PXAubmVnYXRpdmUpLGcoIXAuaXNaZXJvKCkpO3ZhciBiPXRoaXMseD1wLmNsb25lKCk7Yj0wIT09Yi5uZWdhdGl2ZT9iLnVtb2QocCk6Yi5jbG9uZSgpO2Zvcih2YXIgQz1uZXcgdygxKSxUPW5ldyB3KDApLEg9bmV3IHcoMCksaj1uZXcgdygxKSxFPTA7Yi5pc0V2ZW4oKSYmeC5pc0V2ZW4o'@;
put 'KTspYi5pdXNocm4oMSkseC5pdXNocm4oMSksKytFO2Zvcih2YXIgbT14LmNsb25lKCksQT1iLmNsb25lKCk7IWIuaXNaZXJvKCk7KXtmb3IodmFyIGFlPTAsdGU9MTshKGIud29yZHNbMF0mdGUpJiZhZTwyNjsrK2FlLHRlPDw9MSk7aWYoYWU+MClmb3IoYi5pdXNocm4oYWUpO2FlLS0gPjA7'@;
put 'KShDLmlzT2RkKCl8fFQuaXNPZGQoKSkmJihDLmlhZGQobSksVC5pc3ViKEEpKSxDLml1c2hybigxKSxULml1c2hybigxKTtmb3IodmFyIHNlPTAsd2U9MTshKHgud29yZHNbMF0md2UpJiZzZTwyNjsrK3NlLHdlPDw9MSk7aWYoc2U+MClmb3IoeC5pdXNocm4oc2UpO3NlLS0gPjA7KShILmlz'@;
put 'T2RkKCl8fGouaXNPZGQoKSkmJihILmlhZGQobSksai5pc3ViKEEpKSxILml1c2hybigxKSxqLml1c2hybigxKTtiLmNtcCh4KT49MD8oYi5pc3ViKHgpLEMuaXN1YihIKSxULmlzdWIoaikpOih4LmlzdWIoYiksSC5pc3ViKEMpLGouaXN1YihUKSl9cmV0dXJue2E6SCxiOmosZ2NkOnguaXVz'@;
put 'aGxuKEUpfX0sdy5wcm90b3R5cGUuX2ludm1wPWZ1bmN0aW9uKHApe2coMD09PXAubmVnYXRpdmUpLGcoIXAuaXNaZXJvKCkpO3ZhciBhZSxiPXRoaXMseD1wLmNsb25lKCk7Yj0wIT09Yi5uZWdhdGl2ZT9iLnVtb2QocCk6Yi5jbG9uZSgpO2Zvcih2YXIgQz1uZXcgdygxKSxUPW5ldyB3KDAp'@;
put 'LEg9eC5jbG9uZSgpO2IuY21wbigxKT4wJiZ4LmNtcG4oMSk+MDspe2Zvcih2YXIgaj0wLEU9MTshKGIud29yZHNbMF0mRSkmJmo8MjY7KytqLEU8PD0xKTtpZihqPjApZm9yKGIuaXVzaHJuKGopO2otLSA+MDspQy5pc09kZCgpJiZDLmlhZGQoSCksQy5pdXNocm4oMSk7Zm9yKHZhciBtPTAs'@;
put 'QT0xOyEoeC53b3Jkc1swXSZBKSYmbTwyNjsrK20sQTw8PTEpO2lmKG0+MClmb3IoeC5pdXNocm4obSk7bS0tID4wOylULmlzT2RkKCkmJlQuaWFkZChIKSxULml1c2hybigxKTtiLmNtcCh4KT49MD8oYi5pc3ViKHgpLEMuaXN1YihUKSk6KHguaXN1YihiKSxULmlzdWIoQykpfXJldHVybihh'@;
put 'ZT0wPT09Yi5jbXBuKDEpP0M6VCkuY21wbigwKTwwJiZhZS5pYWRkKHApLGFlfSx3LnByb3RvdHlwZS5nY2Q9ZnVuY3Rpb24ocCl7aWYodGhpcy5pc1plcm8oKSlyZXR1cm4gcC5hYnMoKTtpZihwLmlzWmVybygpKXJldHVybiB0aGlzLmFicygpO3ZhciBiPXRoaXMuY2xvbmUoKSx4PXAuY2xv'@;
put 'bmUoKTtiLm5lZ2F0aXZlPTAseC5uZWdhdGl2ZT0wO2Zvcih2YXIgQz0wO2IuaXNFdmVuKCkmJnguaXNFdmVuKCk7QysrKWIuaXVzaHJuKDEpLHguaXVzaHJuKDEpO2Zvcig7Oyl7Zm9yKDtiLmlzRXZlbigpOyliLml1c2hybigxKTtmb3IoO3guaXNFdmVuKCk7KXguaXVzaHJuKDEpO3ZhciBU'@;
put 'PWIuY21wKHgpO2lmKFQ8MCl7dmFyIEg9YjtiPXgseD1IfWVsc2UgaWYoMD09PVR8fDA9PT14LmNtcG4oMSkpYnJlYWs7Yi5pc3ViKHgpfXJldHVybiB4Lml1c2hsbihDKX0sdy5wcm90b3R5cGUuaW52bT1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5lZ2NkKHApLmEudW1vZChwKX0sdy5wcm90'@;
put 'b3R5cGUuaXNFdmVuPWZ1bmN0aW9uKCl7cmV0dXJuISgxJnRoaXMud29yZHNbMF0pfSx3LnByb3RvdHlwZS5pc09kZD1mdW5jdGlvbigpe3JldHVybiEoMSZ+dGhpcy53b3Jkc1swXSl9LHcucHJvdG90eXBlLmFuZGxuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLndvcmRzWzBdJnB9LHcucHJv'@;
put 'dG90eXBlLmJpbmNuPWZ1bmN0aW9uKHApe2coIm51bWJlciI9PXR5cGVvZiBwKTt2YXIgYj1wJTI2LHg9KHAtYikvMjYsQz0xPDxiO2lmKHRoaXMubGVuZ3RoPD14KXJldHVybiB0aGlzLl9leHBhbmQoeCsxKSx0aGlzLndvcmRzW3hdfD1DLHRoaXM7Zm9yKHZhciBUPUMsSD14OzAhPT1UJiZI'@;
put 'PHRoaXMubGVuZ3RoO0grKyl7dmFyIGo9MHx0aGlzLndvcmRzW0hdO1Q9KGorPVQpPj4+MjYsdGhpcy53b3Jkc1tIXT1qJj02NzEwODg2M31yZXR1cm4gMCE9PVQmJih0aGlzLndvcmRzW0hdPVQsdGhpcy5sZW5ndGgrKyksdGhpc30sdy5wcm90b3R5cGUuaXNaZXJvPWZ1bmN0aW9uKCl7cmV0'@;
put 'dXJuIDE9PT10aGlzLmxlbmd0aCYmMD09PXRoaXMud29yZHNbMF19LHcucHJvdG90eXBlLmNtcG49ZnVuY3Rpb24ocCl7dmFyIHgsYj1wPDA7aWYoMCE9PXRoaXMubmVnYXRpdmUmJiFiKXJldHVybi0xO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiZiKXJldHVybiAxO2lmKHRoaXMuc3RyaXAoKSx0'@;
put 'aGlzLmxlbmd0aD4xKXg9MTtlbHNle2ImJihwPS1wKSxnKHA8PTY3MTA4ODYzLCJOdW1iZXIgaXMgdG9vIGJpZyIpO3ZhciBDPTB8dGhpcy53b3Jkc1swXTt4PUM9PT1wPzA6QzxwPy0xOjF9cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlPzB8LXg6eH0sdy5wcm90b3R5cGUuY21wPWZ1bmN0aW9u'@;
put 'KHApe2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYwPT09cC5uZWdhdGl2ZSlyZXR1cm4tMTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmMCE9PXAubmVnYXRpdmUpcmV0dXJuIDE7dmFyIGI9dGhpcy51Y21wKHApO3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZT8wfC1iOmJ9LHcucHJvdG90eXBlLnVjbXA9'@;
put 'ZnVuY3Rpb24ocCl7aWYodGhpcy5sZW5ndGg+cC5sZW5ndGgpcmV0dXJuIDE7aWYodGhpcy5sZW5ndGg8cC5sZW5ndGgpcmV0dXJuLTE7Zm9yKHZhciBiPTAseD10aGlzLmxlbmd0aC0xO3g+PTA7eC0tKXt2YXIgQz0wfHRoaXMud29yZHNbeF0sVD0wfHAud29yZHNbeF07aWYoQyE9PVQpe0M8'@;
put 'VD9iPS0xOkM+VCYmKGI9MSk7YnJlYWt9fXJldHVybiBifSx3LnByb3RvdHlwZS5ndG49ZnVuY3Rpb24ocCl7cmV0dXJuIDE9PT10aGlzLmNtcG4ocCl9LHcucHJvdG90eXBlLmd0PWZ1bmN0aW9uKHApe3JldHVybiAxPT09dGhpcy5jbXAocCl9LHcucHJvdG90eXBlLmd0ZW49ZnVuY3Rpb24o'@;
put 'cCl7cmV0dXJuIHRoaXMuY21wbihwKT49MH0sdy5wcm90b3R5cGUuZ3RlPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNtcChwKT49MH0sdy5wcm90b3R5cGUubHRuPWZ1bmN0aW9uKHApe3JldHVybi0xPT09dGhpcy5jbXBuKHApfSx3LnByb3RvdHlwZS5sdD1mdW5jdGlvbihwKXtyZXR1cm4t'@;
put 'MT09PXRoaXMuY21wKHApfSx3LnByb3RvdHlwZS5sdGVuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNtcG4ocCk8PTB9LHcucHJvdG90eXBlLmx0ZT1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbXAocCk8PTB9LHcucHJvdG90eXBlLmVxbj1mdW5jdGlvbihwKXtyZXR1cm4gMD09PXRoaXMu'@;
put 'Y21wbihwKX0sdy5wcm90b3R5cGUuZXE9ZnVuY3Rpb24ocCl7cmV0dXJuIDA9PT10aGlzLmNtcChwKX0sdy5yZWQ9ZnVuY3Rpb24ocCl7cmV0dXJuIG5ldyBTZShwKX0sdy5wcm90b3R5cGUudG9SZWQ9ZnVuY3Rpb24ocCl7cmV0dXJuIGcoIXRoaXMucmVkLCJBbHJlYWR5IGEgbnVtYmVyIGlu'@;
put 'IHJlZHVjdGlvbiBjb250ZXh0IiksZygwPT09dGhpcy5uZWdhdGl2ZSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSxwLmNvbnZlcnRUbyh0aGlzKS5fZm9yY2VSZWQocCl9LHcucHJvdG90eXBlLmZyb21SZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gZyh0aGlzLnJlZCwiZnJvbVJlZCB3'@;
put 'b3JrcyBvbmx5IHdpdGggbnVtYmVycyBpbiByZWR1Y3Rpb24gY29udGV4dCIpLHRoaXMucmVkLmNvbnZlcnRGcm9tKHRoaXMpfSx3LnByb3RvdHlwZS5fZm9yY2VSZWQ9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMucmVkPXAsdGhpc30sdy5wcm90b3R5cGUuZm9yY2VSZWQ9ZnVuY3Rpb24ocCl7'@;
put 'cmV0dXJuIGcoIXRoaXMucmVkLCJBbHJlYWR5IGEgbnVtYmVyIGluIHJlZHVjdGlvbiBjb250ZXh0IiksdGhpcy5fZm9yY2VSZWQocCl9LHcucHJvdG90eXBlLnJlZEFkZD1mdW5jdGlvbihwKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkQWRkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIp'@;
put 'LHRoaXMucmVkLmFkZCh0aGlzLHApfSx3LnByb3RvdHlwZS5yZWRJQWRkPWZ1bmN0aW9uKHApe3JldHVybiBnKHRoaXMucmVkLCJyZWRJQWRkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmlhZGQodGhpcyxwKX0sdy5wcm90b3R5cGUucmVkU3ViPWZ1bmN0aW9uKHAp'@;
put 'e3JldHVybiBnKHRoaXMucmVkLCJyZWRTdWIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuc3ViKHRoaXMscCl9LHcucHJvdG90eXBlLnJlZElTdWI9ZnVuY3Rpb24ocCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZElTdWIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJz'@;
put 'IiksdGhpcy5yZWQuaXN1Yih0aGlzLHApfSx3LnByb3RvdHlwZS5yZWRTaGw9ZnVuY3Rpb24ocCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZFNobCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5zaGwodGhpcyxwKX0sdy5wcm90b3R5cGUucmVkTXVsPWZ1bmN0aW9uKHAp'@;
put 'e3JldHVybiBnKHRoaXMucmVkLCJyZWRNdWwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTIodGhpcyxwKSx0aGlzLnJlZC5tdWwodGhpcyxwKX0sdy5wcm90b3R5cGUucmVkSU11bD1mdW5jdGlvbihwKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkTXVsIHdv'@;
put 'cmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkyKHRoaXMscCksdGhpcy5yZWQuaW11bCh0aGlzLHApfSx3LnByb3RvdHlwZS5yZWRTcXI9ZnVuY3Rpb24oKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkU3FyIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRo'@;
put 'aXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnNxcih0aGlzKX0sdy5wcm90b3R5cGUucmVkSVNxcj1mdW5jdGlvbigpe3JldHVybiBnKHRoaXMucmVkLCJyZWRJU3FyIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLmlz'@;
put 'cXIodGhpcyl9LHcucHJvdG90eXBlLnJlZFNxcnQ9ZnVuY3Rpb24oKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkU3FydCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5zcXJ0KHRoaXMpfSx3LnByb3RvdHlwZS5yZWRJbnZtPWZ1'@;
put 'bmN0aW9uKCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZEludm0gd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuaW52bSh0aGlzKX0sdy5wcm90b3R5cGUucmVkTmVnPWZ1bmN0aW9uKCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZE5l'@;
put 'ZyB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5uZWcodGhpcyl9LHcucHJvdG90eXBlLnJlZFBvdz1mdW5jdGlvbihwKXtyZXR1cm4gZyh0aGlzLnJlZCYmIXAucmVkLCJyZWRQb3cobm9ybWFsTnVtKSIpLHRoaXMucmVkLl92'@;
put 'ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnBvdyh0aGlzLHApfTt2YXIgbmU9e2syNTY6bnVsbCxwMjI0Om51bGwscDE5MjpudWxsLHAyNTUxOTpudWxsfTtmdW5jdGlvbiBpZShWLHApe3RoaXMubmFtZT1WLHRoaXMucD1uZXcgdyhwLDE2KSx0aGlzLm49dGhpcy5wLmJpdExlbmd0aCgpLHRoaXMu'@;
put 'az1uZXcgdygxKS5pdXNobG4odGhpcy5uKS5pc3ViKHRoaXMucCksdGhpcy50bXA9dGhpcy5fdG1wKCl9ZnVuY3Rpb24gbGUoKXtpZS5jYWxsKHRoaXMsImsyNTYiLCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmMy'@;
put 'ZiIpfWZ1bmN0aW9uIG1lKCl7aWUuY2FsbCh0aGlzLCJwMjI0IiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgMDAwMDAwMDAgMDAwMDAwMDAgMDAwMDAwMDEiKX1mdW5jdGlvbiBfZSgpe2llLmNhbGwodGhpcywicDE5MiIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZm'@;
put 'IGZmZmZmZmZlIGZmZmZmZmZmIGZmZmZmZmZmIil9ZnVuY3Rpb24gVGUoKXtpZS5jYWxsKHRoaXMsIjI1NTE5IiwiN2ZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZlZCIpfWZ1bmN0aW9uIFNlKFYpe2lmKCJzdHJpbmciPT10'@;
put 'eXBlb2YgVil7dmFyIHA9dy5fcHJpbWUoVik7dGhpcy5tPXAucCx0aGlzLnByaW1lPXB9ZWxzZSBnKFYuZ3RuKDEpLCJtb2R1bHVzIG11c3QgYmUgZ3JlYXRlciB0aGFuIDEiKSx0aGlzLm09Vix0aGlzLnByaW1lPW51bGx9ZnVuY3Rpb24gamUoVil7U2UuY2FsbCh0aGlzLFYpLHRoaXMuc2hp'@;
put 'ZnQ9dGhpcy5tLmJpdExlbmd0aCgpLHRoaXMuc2hpZnQlMjYhPTAmJih0aGlzLnNoaWZ0Kz0yNi10aGlzLnNoaWZ0JTI2KSx0aGlzLnI9bmV3IHcoMSkuaXVzaGxuKHRoaXMuc2hpZnQpLHRoaXMucjI9dGhpcy5pbW9kKHRoaXMuci5zcXIoKSksdGhpcy5yaW52PXRoaXMuci5faW52bXAodGhp'@;
put 'cy5tKSx0aGlzLm1pbnY9dGhpcy5yaW52Lm11bCh0aGlzLnIpLmlzdWJuKDEpLmRpdih0aGlzLm0pLHRoaXMubWludj10aGlzLm1pbnYudW1vZCh0aGlzLnIpLHRoaXMubWludj10aGlzLnIuc3ViKHRoaXMubWludil9aWUucHJvdG90eXBlLl90bXA9ZnVuY3Rpb24oKXt2YXIgcD1uZXcgdyhu'@;
put 'dWxsKTtyZXR1cm4gcC53b3Jkcz1uZXcgQXJyYXkoTWF0aC5jZWlsKHRoaXMubi8xMykpLHB9LGllLnByb3RvdHlwZS5pcmVkdWNlPWZ1bmN0aW9uKHApe3ZhciB4LGI9cDtkb3t0aGlzLnNwbGl0KGIsdGhpcy50bXApLHg9KGI9KGI9dGhpcy5pbXVsSyhiKSkuaWFkZCh0aGlzLnRtcCkpLmJp'@;
put 'dExlbmd0aCgpfXdoaWxlKHg+dGhpcy5uKTt2YXIgQz14PHRoaXMubj8tMTpiLnVjbXAodGhpcy5wKTtyZXR1cm4gMD09PUM/KGIud29yZHNbMF09MCxiLmxlbmd0aD0xKTpDPjA/Yi5pc3ViKHRoaXMucCk6dm9pZCAwIT09Yi5zdHJpcD9iLnN0cmlwKCk6Yi5fc3RyaXAoKSxifSxpZS5wcm90'@;
put 'b3R5cGUuc3BsaXQ9ZnVuY3Rpb24ocCxiKXtwLml1c2hybih0aGlzLm4sMCxiKX0saWUucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKHApe3JldHVybiBwLmltdWwodGhpcy5rKX0sQihsZSxpZSksbGUucHJvdG90eXBlLnNwbGl0PWZ1bmN0aW9uKHAsYil7Zm9yKHZhciB4PTQxOTQzMDMsQz1N'@;
put 'YXRoLm1pbihwLmxlbmd0aCw5KSxUPTA7VDxDO1QrKyliLndvcmRzW1RdPXAud29yZHNbVF07aWYoYi5sZW5ndGg9QyxwLmxlbmd0aDw9OSlyZXR1cm4gcC53b3Jkc1swXT0wLHZvaWQocC5sZW5ndGg9MSk7dmFyIEg9cC53b3Jkc1s5XTtmb3IoYi53b3Jkc1tiLmxlbmd0aCsrXT1IJngsVD0x'@;
put 'MDtUPHAubGVuZ3RoO1QrKyl7dmFyIGo9MHxwLndvcmRzW1RdO3Aud29yZHNbVC0xMF09KGomeCk8PDR8SD4+PjIyLEg9an1wLndvcmRzW1QtMTBdPUg+Pj49MjIscC5sZW5ndGgtPTA9PT1IJiZwLmxlbmd0aD4xMD8xMDo5fSxsZS5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24ocCl7cC53b3Jk'@;
put 'c1twLmxlbmd0aF09MCxwLndvcmRzW3AubGVuZ3RoKzFdPTAscC5sZW5ndGgrPTI7Zm9yKHZhciBiPTAseD0wO3g8cC5sZW5ndGg7eCsrKXt2YXIgQz0wfHAud29yZHNbeF07cC53b3Jkc1t4XT02NzEwODg2MyYoYis9OTc3KkMpLGI9NjQqQysoYi82NzEwODg2NHwwKX1yZXR1cm4gMD09PXAu'@;
put 'd29yZHNbcC5sZW5ndGgtMV0mJihwLmxlbmd0aC0tLDA9PT1wLndvcmRzW3AubGVuZ3RoLTFdJiZwLmxlbmd0aC0tKSxwfSxCKG1lLGllKSxCKF9lLGllKSxCKFRlLGllKSxUZS5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24ocCl7Zm9yKHZhciBiPTAseD0wO3g8cC5sZW5ndGg7eCsrKXt2YXIg'@;
put 'Qz0xOSooMHxwLndvcmRzW3hdKStiLFQ9NjcxMDg4NjMmQztDPj4+PTI2LHAud29yZHNbeF09VCxiPUN9cmV0dXJuIDAhPT1iJiYocC53b3Jkc1twLmxlbmd0aCsrXT1iKSxwfSx3Ll9wcmltZT1mdW5jdGlvbihwKXtpZihuZVtwXSlyZXR1cm4gbmVbcF07dmFyIGI7aWYoImsyNTYiPT09cCli'@;
put 'PW5ldyBsZTtlbHNlIGlmKCJwMjI0Ij09PXApYj1uZXcgbWU7ZWxzZSBpZigicDE5MiI9PT1wKWI9bmV3IF9lO2Vsc2V7aWYoInAyNTUxOSIhPT1wKXRocm93IG5ldyBFcnJvcigiVW5rbm93biBwcmltZSAiK3ApO2I9bmV3IFRlfXJldHVybiBuZVtwXT1iLGJ9LFNlLnByb3RvdHlwZS5fdmVy'@;
put 'aWZ5MT1mdW5jdGlvbihwKXtnKDA9PT1wLm5lZ2F0aXZlLCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIpLGcocC5yZWQsInJlZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKX0sU2UucHJvdG90eXBlLl92ZXJpZnkyPWZ1bmN0aW9uKHAsYil7ZyghKHAubmVnYXRpdmV8Yi5u'@;
put 'ZWdhdGl2ZSksInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIiksZyhwLnJlZCYmcC5yZWQ9PT1iLnJlZCwicmVkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpfSxTZS5wcm90b3R5cGUuaW1vZD1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5wcmltZT90aGlzLnByaW1lLmlyZWR1'@;
put 'Y2UocCkuX2ZvcmNlUmVkKHRoaXMpOnAudW1vZCh0aGlzLm0pLl9mb3JjZVJlZCh0aGlzKX0sU2UucHJvdG90eXBlLm5lZz1mdW5jdGlvbihwKXtyZXR1cm4gcC5pc1plcm8oKT9wLmNsb25lKCk6dGhpcy5tLnN1YihwKS5fZm9yY2VSZWQodGhpcyl9LFNlLnByb3RvdHlwZS5hZGQ9ZnVuY3Rp'@;
put 'b24ocCxiKXt0aGlzLl92ZXJpZnkyKHAsYik7dmFyIHg9cC5hZGQoYik7cmV0dXJuIHguY21wKHRoaXMubSk+PTAmJnguaXN1Yih0aGlzLm0pLHguX2ZvcmNlUmVkKHRoaXMpfSxTZS5wcm90b3R5cGUuaWFkZD1mdW5jdGlvbihwLGIpe3RoaXMuX3ZlcmlmeTIocCxiKTt2YXIgeD1wLmlhZGQo'@;
put 'Yik7cmV0dXJuIHguY21wKHRoaXMubSk+PTAmJnguaXN1Yih0aGlzLm0pLHh9LFNlLnByb3RvdHlwZS5zdWI9ZnVuY3Rpb24ocCxiKXt0aGlzLl92ZXJpZnkyKHAsYik7dmFyIHg9cC5zdWIoYik7cmV0dXJuIHguY21wbigwKTwwJiZ4LmlhZGQodGhpcy5tKSx4Ll9mb3JjZVJlZCh0aGlzKX0s'@;
put 'U2UucHJvdG90eXBlLmlzdWI9ZnVuY3Rpb24ocCxiKXt0aGlzLl92ZXJpZnkyKHAsYik7dmFyIHg9cC5pc3ViKGIpO3JldHVybiB4LmNtcG4oMCk8MCYmeC5pYWRkKHRoaXMubSkseH0sU2UucHJvdG90eXBlLnNobD1mdW5jdGlvbihwLGIpe3JldHVybiB0aGlzLl92ZXJpZnkxKHApLHRoaXMu'@;
put 'aW1vZChwLnVzaGxuKGIpKX0sU2UucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24ocCxiKXtyZXR1cm4gdGhpcy5fdmVyaWZ5MihwLGIpLHRoaXMuaW1vZChwLmltdWwoYikpfSxTZS5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKHAsYil7cmV0dXJuIHRoaXMuX3ZlcmlmeTIocCxiKSx0aGlzLmltb2Qo'@;
put 'cC5tdWwoYikpfSxTZS5wcm90b3R5cGUuaXNxcj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5pbXVsKHAscC5jbG9uZSgpKX0sU2UucHJvdG90eXBlLnNxcj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5tdWwocCxwKX0sU2UucHJvdG90eXBlLnNxcnQ9ZnVuY3Rpb24ocCl7aWYocC5pc1plcm8o'@;
put 'KSlyZXR1cm4gcC5jbG9uZSgpO3ZhciBiPXRoaXMubS5hbmRsbigzKTtpZihnKGIlMj09MSksMz09PWIpe3ZhciB4PXRoaXMubS5hZGQobmV3IHcoMSkpLml1c2hybigyKTtyZXR1cm4gdGhpcy5wb3cocCx4KX1mb3IodmFyIEM9dGhpcy5tLnN1Ym4oMSksVD0wOyFDLmlzWmVybygpJiYwPT09'@;
put 'Qy5hbmRsbigxKTspVCsrLEMuaXVzaHJuKDEpO2coIUMuaXNaZXJvKCkpO3ZhciBIPW5ldyB3KDEpLnRvUmVkKHRoaXMpLGo9SC5yZWROZWcoKSxFPXRoaXMubS5zdWJuKDEpLml1c2hybigxKSxtPXRoaXMubS5iaXRMZW5ndGgoKTtmb3IobT1uZXcgdygyKm0qbSkudG9SZWQodGhpcyk7MCE9'@;
put 'PXRoaXMucG93KG0sRSkuY21wKGopOyltLnJlZElBZGQoaik7Zm9yKHZhciBBPXRoaXMucG93KG0sQyksYWU9dGhpcy5wb3cocCxDLmFkZG4oMSkuaXVzaHJuKDEpKSx0ZT10aGlzLnBvdyhwLEMpLHNlPVQ7MCE9PXRlLmNtcChIKTspe2Zvcih2YXIgd2U9dGUsVWU9MDswIT09d2UuY21wKEgp'@;
put 'O1VlKyspd2U9d2UucmVkU3FyKCk7ZyhVZTxzZSk7dmFyIEplPXRoaXMucG93KEEsbmV3IHcoMSkuaXVzaGxuKHNlLVVlLTEpKTthZT1hZS5yZWRNdWwoSmUpLEE9SmUucmVkU3FyKCksdGU9dGUucmVkTXVsKEEpLHNlPVVlfXJldHVybiBhZX0sU2UucHJvdG90eXBlLmludm09ZnVuY3Rpb24o'@;
put 'cCl7dmFyIGI9cC5faW52bXAodGhpcy5tKTtyZXR1cm4gMCE9PWIubmVnYXRpdmU/KGIubmVnYXRpdmU9MCx0aGlzLmltb2QoYikucmVkTmVnKCkpOnRoaXMuaW1vZChiKX0sU2UucHJvdG90eXBlLnBvdz1mdW5jdGlvbihwLGIpe2lmKGIuaXNaZXJvKCkpcmV0dXJuIG5ldyB3KDEpLnRvUmVk'@;
put 'KHRoaXMpO2lmKDA9PT1iLmNtcG4oMSkpcmV0dXJuIHAuY2xvbmUoKTt2YXIgQz1uZXcgQXJyYXkoMTYpO0NbMF09bmV3IHcoMSkudG9SZWQodGhpcyksQ1sxXT1wO2Zvcih2YXIgVD0yO1Q8Qy5sZW5ndGg7VCsrKUNbVF09dGhpcy5tdWwoQ1tULTFdLHApO3ZhciBIPUNbMF0saj0wLEU9MCxt'@;
put 'PWIuYml0TGVuZ3RoKCklMjY7Zm9yKDA9PT1tJiYobT0yNiksVD1iLmxlbmd0aC0xO1Q+PTA7VC0tKXtmb3IodmFyIEE9Yi53b3Jkc1tUXSxhZT1tLTE7YWU+PTA7YWUtLSl7dmFyIHRlPUE+PmFlJjE7SCE9PUNbMF0mJihIPXRoaXMuc3FyKEgpKSwwIT09dGV8fDAhPT1qPyhqPDw9MSxqfD10'@;
put 'ZSwoND09KytFfHwwPT09VCYmMD09PWFlKSYmKEg9dGhpcy5tdWwoSCxDW2pdKSxFPTAsaj0wKSk6RT0wfW09MjZ9cmV0dXJuIEh9LFNlLnByb3RvdHlwZS5jb252ZXJ0VG89ZnVuY3Rpb24ocCl7dmFyIGI9cC51bW9kKHRoaXMubSk7cmV0dXJuIGI9PT1wP2IuY2xvbmUoKTpifSxTZS5wcm90'@;
put 'b3R5cGUuY29udmVydEZyb209ZnVuY3Rpb24ocCl7dmFyIGI9cC5jbG9uZSgpO3JldHVybiBiLnJlZD1udWxsLGJ9LHcubW9udD1mdW5jdGlvbihwKXtyZXR1cm4gbmV3IGplKHApfSxCKGplLFNlKSxqZS5wcm90b3R5cGUuY29udmVydFRvPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmltb2Qo'@;
put 'cC51c2hsbih0aGlzLnNoaWZ0KSl9LGplLnByb3RvdHlwZS5jb252ZXJ0RnJvbT1mdW5jdGlvbihwKXt2YXIgYj10aGlzLmltb2QocC5tdWwodGhpcy5yaW52KSk7cmV0dXJuIGIucmVkPW51bGwsYn0samUucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24ocCxiKXtpZihwLmlzWmVybygpfHxiLmlz'@;
put 'WmVybygpKXJldHVybiBwLndvcmRzWzBdPTAscC5sZW5ndGg9MSxwO3ZhciB4PXAuaW11bChiKSxDPXgubWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubWludikuaW1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm0pLFQ9eC5pc3ViKEMpLml1c2hybih0aGlzLnNoaWZ0KSxIPVQ7cmV0dXJu'@;
put 'IFQuY21wKHRoaXMubSk+PTA/SD1ULmlzdWIodGhpcy5tKTpULmNtcG4oMCk8MCYmKEg9VC5pYWRkKHRoaXMubSkpLEguX2ZvcmNlUmVkKHRoaXMpfSxqZS5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKHAsYil7aWYocC5pc1plcm8oKXx8Yi5pc1plcm8oKSlyZXR1cm4gbmV3IHcoMCkuX2ZvcmNl'@;
put 'UmVkKHRoaXMpO3ZhciB4PXAubXVsKGIpLEM9eC5tYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5taW52KS5pbWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubSksVD14LmlzdWIoQykuaXVzaHJuKHRoaXMuc2hpZnQpLEg9VDtyZXR1cm4gVC5jbXAodGhpcy5tKT49MD9IPVQuaXN1Yih0aGlz'@;
put 'Lm0pOlQuY21wbigwKTwwJiYoSD1ULmlhZGQodGhpcy5tKSksSC5fZm9yY2VSZWQodGhpcyl9LGplLnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmltb2QocC5faW52bXAodGhpcy5tKS5tdWwodGhpcy5yMikpLl9mb3JjZVJlZCh0aGlzKX19KHVlPXkubm1kKHVlKSx0'@;
put 'aGlzKX0sNDQyOTp1ZT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgWD1PYmplY3QuZGVmaW5lUHJvcGVydHl8fCExO2lmKFgpdHJ5e1goe30sImEiLHt2YWx1ZToxfSl9Y2F0Y2h7WD0hMX11ZS5leHBvcnRzPVh9LDM5ODE6dWU9PnsidXNlIHN0cmljdCI7dWUuZXhwb3J0cz1FdmFsRXJyb3J9LDE2NDg6'@;
put 'dWU9PnsidXNlIHN0cmljdCI7dWUuZXhwb3J0cz1FcnJvcn0sNDcyNjp1ZT0+eyJ1c2Ugc3RyaWN0Ijt1ZS5leHBvcnRzPVJhbmdlRXJyb3J9LDY3MTI6dWU9PnsidXNlIHN0cmljdCI7dWUuZXhwb3J0cz1SZWZlcmVuY2VFcnJvcn0sMzQ2NDp1ZT0+eyJ1c2Ugc3RyaWN0Ijt1ZS5leHBvcnRz'@;
put 'PVN5bnRheEVycm9yfSw0NDUzOnVlPT57InVzZSBzdHJpY3QiO3VlLmV4cG9ydHM9VHlwZUVycm9yfSwzOTE1OnVlPT57InVzZSBzdHJpY3QiO3VlLmV4cG9ydHM9VVJJRXJyb3J9LDg4OTI6dWU9PnsidXNlIHN0cmljdCI7dWUuZXhwb3J0cz1PYmplY3R9LDcxODc6KHVlLFgseSk9PnsidXNl'@;
put 'IHN0cmljdCI7dmFyIEIsST15KDUxMDgpLF89Im9iamVjdCI9PXR5cGVvZiBSZWZsZWN0P1JlZmxlY3Q6bnVsbCxnPV8mJiJmdW5jdGlvbiI9PXR5cGVvZiBfLmFwcGx5P18uYXBwbHk6ZnVuY3Rpb24oX2UsVGUsU2Upe3JldHVybiBGdW5jdGlvbi5wcm90b3R5cGUuYXBwbHkuY2FsbChfZSxU'@;
put 'ZSxTZSl9O0I9XyYmImZ1bmN0aW9uIj09dHlwZW9mIF8ub3duS2V5cz9fLm93bktleXM6T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scz9mdW5jdGlvbihfZSl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKF9lKS5jb25jYXQoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9s'@;
put 'cyhfZSkpfTpmdW5jdGlvbihfZSl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKF9lKX07dmFyIFA9TnVtYmVyLmlzTmFOfHxmdW5jdGlvbihfZSl7cmV0dXJuIF9lIT1fZX07ZnVuY3Rpb24gRigpe0YuaW5pdC5jYWxsKHRoaXMpfXVlLmV4cG9ydHM9Rix1ZS5leHBvcnRzLm9u'@;
put 'Y2U9ZnVuY3Rpb24gbmUobWUsX2Upe3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihUZSxTZSl7ZnVuY3Rpb24gamUocCl7bWUucmVtb3ZlTGlzdGVuZXIoX2UsViksU2UocCl9ZnVuY3Rpb24gVigpeyJmdW5jdGlvbiI9PXR5cGVvZiBtZS5yZW1vdmVMaXN0ZW5lciYmbWUucmVtb3ZlTGlz'@;
put 'dGVuZXIoImVycm9yIixqZSksVGUoW10uc2xpY2UuY2FsbChhcmd1bWVudHMpKX1sZShtZSxfZSxWLHtvbmNlOiEwfSksImVycm9yIiE9PV9lJiZmdW5jdGlvbiBpZShtZSxfZSxUZSl7ImZ1bmN0aW9uIj09dHlwZW9mIG1lLm9uJiZsZShtZSwiZXJyb3IiLF9lLFRlKX0obWUsamUse29uY2U6'@;
put 'ITB9KX0pfSxGLkV2ZW50RW1pdHRlcj1GLEYucHJvdG90eXBlLl9ldmVudHM9dm9pZCAwLEYucHJvdG90eXBlLl9ldmVudHNDb3VudD0wLEYucHJvdG90eXBlLl9tYXhMaXN0ZW5lcnM9dm9pZCAwO3ZhciBPPTEwO2Z1bmN0aW9uIHoobWUpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBtZSl0aHJv'@;
put 'dyBuZXcgVHlwZUVycm9yKCdUaGUgImxpc3RlbmVyIiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgRnVuY3Rpb24uIFJlY2VpdmVkIHR5cGUgJyt0eXBlb2YgbWUpfWZ1bmN0aW9uIE4obWUpe3JldHVybiB2b2lkIDA9PT1tZS5fbWF4TGlzdGVuZXJzP0YuZGVmYXVsdE1heExpc3RlbmVyczpt'@;
put 'ZS5fbWF4TGlzdGVuZXJzfWZ1bmN0aW9uIEwobWUsX2UsVGUsU2Upe3ZhciBqZSxWLHA7aWYoeihUZSksdm9pZCAwPT09KFY9bWUuX2V2ZW50cyk/KFY9bWUuX2V2ZW50cz1PYmplY3QuY3JlYXRlKG51bGwpLG1lLl9ldmVudHNDb3VudD0wKToodm9pZCAwIT09Vi5uZXdMaXN0ZW5lciYmKG1l'@;
put 'LmVtaXQoIm5ld0xpc3RlbmVyIixfZSxUZS5saXN0ZW5lcj9UZS5saXN0ZW5lcjpUZSksVj1tZS5fZXZlbnRzKSxwPVZbX2VdKSx2b2lkIDA9PT1wKXA9VltfZV09VGUsKyttZS5fZXZlbnRzQ291bnQ7ZWxzZSBpZigiZnVuY3Rpb24iPT10eXBlb2YgcD9wPVZbX2VdPVNlP1tUZSxwXTpbcCxU'@;
put 'ZV06U2U/cC51bnNoaWZ0KFRlKTpwLnB1c2goVGUpLChqZT1OKG1lKSk+MCYmcC5sZW5ndGg+amUmJiFwLndhcm5lZCl7cC53YXJuZWQ9ITA7dmFyIGI9bmV3IEVycm9yKCJQb3NzaWJsZSBFdmVudEVtaXR0ZXIgbWVtb3J5IGxlYWsgZGV0ZWN0ZWQuICIrcC5sZW5ndGgrIiAiK1N0cmluZyhf'@;
put 'ZSkrIiBsaXN0ZW5lcnMgYWRkZWQuIFVzZSBlbWl0dGVyLnNldE1heExpc3RlbmVycygpIHRvIGluY3JlYXNlIGxpbWl0Iik7Yi5uYW1lPSJNYXhMaXN0ZW5lcnNFeGNlZWRlZFdhcm5pbmciLGIuZW1pdHRlcj1tZSxiLnR5cGU9X2UsYi5jb3VudD1wLmxlbmd0aCxmdW5jdGlvbiB3KG1lKXtJ'@;
put 'JiZJLndhcm4mJkkud2FybihtZSl9KGIpfXJldHVybiBtZX1mdW5jdGlvbiBLKCl7aWYoIXRoaXMuZmlyZWQpcmV0dXJuIHRoaXMudGFyZ2V0LnJlbW92ZUxpc3RlbmVyKHRoaXMudHlwZSx0aGlzLndyYXBGbiksdGhpcy5maXJlZD0hMCwwPT09YXJndW1lbnRzLmxlbmd0aD90aGlzLmxpc3Rl'@;
put 'bmVyLmNhbGwodGhpcy50YXJnZXQpOnRoaXMubGlzdGVuZXIuYXBwbHkodGhpcy50YXJnZXQsYXJndW1lbnRzKX1mdW5jdGlvbiBVKG1lLF9lLFRlKXt2YXIgU2U9e2ZpcmVkOiExLHdyYXBGbjp2b2lkIDAsdGFyZ2V0Om1lLHR5cGU6X2UsbGlzdGVuZXI6VGV9LGplPUsuYmluZChTZSk7cmV0'@;
put 'dXJuIGplLmxpc3RlbmVyPVRlLFNlLndyYXBGbj1qZSxqZX1mdW5jdGlvbiBXKG1lLF9lLFRlKXt2YXIgU2U9bWUuX2V2ZW50cztpZih2b2lkIDA9PT1TZSlyZXR1cm5bXTt2YXIgamU9U2VbX2VdO3JldHVybiB2b2lkIDA9PT1qZT9bXToiZnVuY3Rpb24iPT10eXBlb2YgamU/VGU/W2plLmxp'@;
put 'c3RlbmVyfHxqZV06W2plXTpUZT9mdW5jdGlvbiBKKG1lKXtmb3IodmFyIF9lPW5ldyBBcnJheShtZS5sZW5ndGgpLFRlPTA7VGU8X2UubGVuZ3RoOysrVGUpX2VbVGVdPW1lW1RlXS5saXN0ZW5lcnx8bWVbVGVdO3JldHVybiBfZX0oamUpOnEoamUsamUubGVuZ3RoKX1mdW5jdGlvbiBZKG1l'@;
put 'KXt2YXIgX2U9dGhpcy5fZXZlbnRzO2lmKHZvaWQgMCE9PV9lKXt2YXIgVGU9X2VbbWVdO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBUZSlyZXR1cm4gMTtpZih2b2lkIDAhPT1UZSlyZXR1cm4gVGUubGVuZ3RofXJldHVybiAwfWZ1bmN0aW9uIHEobWUsX2Upe2Zvcih2YXIgVGU9bmV3IEFycmF5'@;
put 'KF9lKSxTZT0wO1NlPF9lOysrU2UpVGVbU2VdPW1lW1NlXTtyZXR1cm4gVGV9ZnVuY3Rpb24gbGUobWUsX2UsVGUsU2Upe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBtZS5vbilTZS5vbmNlP21lLm9uY2UoX2UsVGUpOm1lLm9uKF9lLFRlKTtlbHNle2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBtZS5h'@;
put 'ZGRFdmVudExpc3RlbmVyKXRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSAiZW1pdHRlciIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIEV2ZW50RW1pdHRlci4gUmVjZWl2ZWQgdHlwZSAnK3R5cGVvZiBtZSk7bWUuYWRkRXZlbnRMaXN0ZW5lcihfZSxmdW5jdGlvbiBqZShWKXtTZS5vbmNlJiZt'@;
put 'ZS5yZW1vdmVFdmVudExpc3RlbmVyKF9lLGplKSxUZShWKX0pfX1PYmplY3QuZGVmaW5lUHJvcGVydHkoRiwiZGVmYXVsdE1heExpc3RlbmVycyIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIE99LHNldDpmdW5jdGlvbihtZSl7aWYoIm51bWJlciIhPXR5cGVvZiBtZXx8'@;
put 'bWU8MHx8UChtZSkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1RoZSB2YWx1ZSBvZiAiZGVmYXVsdE1heExpc3RlbmVycyIgaXMgb3V0IG9mIHJhbmdlLiBJdCBtdXN0IGJlIGEgbm9uLW5lZ2F0aXZlIG51bWJlci4gUmVjZWl2ZWQgJyttZSsiLiIpO089bWV9fSksRi5pbml0PWZ1bmN0aW9uKCl7'@;
put 'KHZvaWQgMD09PXRoaXMuX2V2ZW50c3x8dGhpcy5fZXZlbnRzPT09T2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpLl9ldmVudHMpJiYodGhpcy5fZXZlbnRzPU9iamVjdC5jcmVhdGUobnVsbCksdGhpcy5fZXZlbnRzQ291bnQ9MCksdGhpcy5fbWF4TGlzdGVuZXJzPXRoaXMuX21heExpc3Rl'@;
put 'bmVyc3x8dm9pZCAwfSxGLnByb3RvdHlwZS5zZXRNYXhMaXN0ZW5lcnM9ZnVuY3Rpb24oX2Upe2lmKCJudW1iZXIiIT10eXBlb2YgX2V8fF9lPDB8fFAoX2UpKXRocm93IG5ldyBSYW5nZUVycm9yKCdUaGUgdmFsdWUgb2YgIm4iIGlzIG91dCBvZiByYW5nZS4gSXQgbXVzdCBiZSBhIG5vbi1u'@;
put 'ZWdhdGl2ZSBudW1iZXIuIFJlY2VpdmVkICcrX2UrIi4iKTtyZXR1cm4gdGhpcy5fbWF4TGlzdGVuZXJzPV9lLHRoaXN9LEYucHJvdG90eXBlLmdldE1heExpc3RlbmVycz1mdW5jdGlvbigpe3JldHVybiBOKHRoaXMpfSxGLnByb3RvdHlwZS5lbWl0PWZ1bmN0aW9uKF9lKXtmb3IodmFyIFRl'@;
put 'PVtdLFNlPTE7U2U8YXJndW1lbnRzLmxlbmd0aDtTZSsrKVRlLnB1c2goYXJndW1lbnRzW1NlXSk7dmFyIGplPSJlcnJvciI9PT1fZSxWPXRoaXMuX2V2ZW50cztpZih2b2lkIDAhPT1WKWplPWplJiZ2b2lkIDA9PT1WLmVycm9yO2Vsc2UgaWYoIWplKXJldHVybiExO2lmKGplKXt2YXIgcDtp'@;
put 'ZihUZS5sZW5ndGg+MCYmKHA9VGVbMF0pLHAgaW5zdGFuY2VvZiBFcnJvcil0aHJvdyBwO3ZhciBiPW5ldyBFcnJvcigiVW5oYW5kbGVkIGVycm9yLiIrKHA/IiAoIitwLm1lc3NhZ2UrIikiOiIiKSk7dGhyb3cgYi5jb250ZXh0PXAsYn12YXIgeD1WW19lXTtpZih2b2lkIDA9PT14KXJldHVy'@;
put 'biExO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiB4KWcoeCx0aGlzLFRlKTtlbHNle3ZhciBDPXgubGVuZ3RoLFQ9cSh4LEMpO2ZvcihTZT0wO1NlPEM7KytTZSlnKFRbU2VdLHRoaXMsVGUpfXJldHVybiEwfSxGLnByb3RvdHlwZS5vbj1GLnByb3RvdHlwZS5hZGRMaXN0ZW5lcj1mdW5jdGlvbihf'@;
put 'ZSxUZSl7cmV0dXJuIEwodGhpcyxfZSxUZSwhMSl9LEYucHJvdG90eXBlLnByZXBlbmRMaXN0ZW5lcj1mdW5jdGlvbihfZSxUZSl7cmV0dXJuIEwodGhpcyxfZSxUZSwhMCl9LEYucHJvdG90eXBlLm9uY2U9ZnVuY3Rpb24oX2UsVGUpe3JldHVybiB6KFRlKSx0aGlzLm9uKF9lLFUodGhpcyxf'@;
put 'ZSxUZSkpLHRoaXN9LEYucHJvdG90eXBlLnByZXBlbmRPbmNlTGlzdGVuZXI9ZnVuY3Rpb24oX2UsVGUpe3JldHVybiB6KFRlKSx0aGlzLnByZXBlbmRMaXN0ZW5lcihfZSxVKHRoaXMsX2UsVGUpKSx0aGlzfSxGLnByb3RvdHlwZS5vZmY9Ri5wcm90b3R5cGUucmVtb3ZlTGlzdGVuZXI9ZnVu'@;
put 'Y3Rpb24oX2UsVGUpe3ZhciBTZSxqZSxWLHAsYjtpZih6KFRlKSx2b2lkIDA9PT0oamU9dGhpcy5fZXZlbnRzKSlyZXR1cm4gdGhpcztpZih2b2lkIDA9PT0oU2U9amVbX2VdKSlyZXR1cm4gdGhpcztpZihTZT09PVRlfHxTZS5saXN0ZW5lcj09PVRlKTA9PS0tdGhpcy5fZXZlbnRzQ291bnQ/'@;
put 'dGhpcy5fZXZlbnRzPU9iamVjdC5jcmVhdGUobnVsbCk6KGRlbGV0ZSBqZVtfZV0samUucmVtb3ZlTGlzdGVuZXImJnRoaXMuZW1pdCgicmVtb3ZlTGlzdGVuZXIiLF9lLFNlLmxpc3RlbmVyfHxUZSkpO2Vsc2UgaWYoImZ1bmN0aW9uIiE9dHlwZW9mIFNlKXtmb3IoVj0tMSxwPVNlLmxlbmd0'@;
put 'aC0xO3A+PTA7cC0tKWlmKFNlW3BdPT09VGV8fFNlW3BdLmxpc3RlbmVyPT09VGUpe2I9U2VbcF0ubGlzdGVuZXIsVj1wO2JyZWFrfWlmKFY8MClyZXR1cm4gdGhpczswPT09Vj9TZS5zaGlmdCgpOmZ1bmN0aW9uIGVlKG1lLF9lKXtmb3IoO19lKzE8bWUubGVuZ3RoO19lKyspbWVbX2VdPW1l'@;
put 'W19lKzFdO21lLnBvcCgpfShTZSxWKSwxPT09U2UubGVuZ3RoJiYoamVbX2VdPVNlWzBdKSx2b2lkIDAhPT1qZS5yZW1vdmVMaXN0ZW5lciYmdGhpcy5lbWl0KCJyZW1vdmVMaXN0ZW5lciIsX2UsYnx8VGUpfXJldHVybiB0aGlzfSxGLnByb3RvdHlwZS5yZW1vdmVBbGxMaXN0ZW5lcnM9ZnVu'@;
put 'Y3Rpb24oX2Upe3ZhciBUZSxTZSxqZTtpZih2b2lkIDA9PT0oU2U9dGhpcy5fZXZlbnRzKSlyZXR1cm4gdGhpcztpZih2b2lkIDA9PT1TZS5yZW1vdmVMaXN0ZW5lcilyZXR1cm4gMD09PWFyZ3VtZW50cy5sZW5ndGg/KHRoaXMuX2V2ZW50cz1PYmplY3QuY3JlYXRlKG51bGwpLHRoaXMuX2V2'@;
put 'ZW50c0NvdW50PTApOnZvaWQgMCE9PVNlW19lXSYmKDA9PS0tdGhpcy5fZXZlbnRzQ291bnQ/dGhpcy5fZXZlbnRzPU9iamVjdC5jcmVhdGUobnVsbCk6ZGVsZXRlIFNlW19lXSksdGhpcztpZigwPT09YXJndW1lbnRzLmxlbmd0aCl7dmFyIHAsVj1PYmplY3Qua2V5cyhTZSk7Zm9yKGplPTA7'@;
put 'amU8Vi5sZW5ndGg7KytqZSkicmVtb3ZlTGlzdGVuZXIiIT09KHA9VltqZV0pJiZ0aGlzLnJlbW92ZUFsbExpc3RlbmVycyhwKTtyZXR1cm4gdGhpcy5yZW1vdmVBbGxMaXN0ZW5lcnMoInJlbW92ZUxpc3RlbmVyIiksdGhpcy5fZXZlbnRzPU9iamVjdC5jcmVhdGUobnVsbCksdGhpcy5fZXZl'@;
put 'bnRzQ291bnQ9MCx0aGlzfWlmKCJmdW5jdGlvbiI9PXR5cGVvZihUZT1TZVtfZV0pKXRoaXMucmVtb3ZlTGlzdGVuZXIoX2UsVGUpO2Vsc2UgaWYodm9pZCAwIT09VGUpZm9yKGplPVRlLmxlbmd0aC0xO2plPj0wO2plLS0pdGhpcy5yZW1vdmVMaXN0ZW5lcihfZSxUZVtqZV0pO3JldHVybiB0'@;
put 'aGlzfSxGLnByb3RvdHlwZS5saXN0ZW5lcnM9ZnVuY3Rpb24oX2Upe3JldHVybiBXKHRoaXMsX2UsITApfSxGLnByb3RvdHlwZS5yYXdMaXN0ZW5lcnM9ZnVuY3Rpb24oX2Upe3JldHVybiBXKHRoaXMsX2UsITEpfSxGLmxpc3RlbmVyQ291bnQ9ZnVuY3Rpb24obWUsX2Upe3JldHVybiJmdW5j'@;
put 'dGlvbiI9PXR5cGVvZiBtZS5saXN0ZW5lckNvdW50P21lLmxpc3RlbmVyQ291bnQoX2UpOlkuY2FsbChtZSxfZSl9LEYucHJvdG90eXBlLmxpc3RlbmVyQ291bnQ9WSxGLnByb3RvdHlwZS5ldmVudE5hbWVzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2V2ZW50c0NvdW50PjA/Qih0aGlzLl9l'@;
put 'dmVudHMpOltdfX0sMzA0ODoodWUsWCx5KT0+e3ZhciBJPXkoOTUwOSkuQnVmZmVyLF89eSgyMzE4KTt1ZS5leHBvcnRzPWZ1bmN0aW9uIGcoQix3LFAsRil7aWYoSS5pc0J1ZmZlcihCKXx8KEI9SS5mcm9tKEIsImJpbmFyeSIpKSx3JiYoSS5pc0J1ZmZlcih3KXx8KHc9SS5mcm9tKHcsImJp'@;
put 'bmFyeSIpKSw4IT09dy5sZW5ndGgpKXRocm93IG5ldyBSYW5nZUVycm9yKCJzYWx0IHNob3VsZCBiZSBCdWZmZXIgd2l0aCA4IGJ5dGUgbGVuZ3RoIik7Zm9yKHZhciBPPVAvOCx6PUkuYWxsb2MoTyksTj1JLmFsbG9jKEZ8fDApLEw9SS5hbGxvYygwKTtPPjB8fEY+MDspe3ZhciBLPW5ldyBf'@;
put 'O0sudXBkYXRlKEwpLEsudXBkYXRlKEIpLHcmJksudXBkYXRlKHcpLEw9Sy5kaWdlc3QoKTt2YXIgVT0wO2lmKE8+MCl7dmFyIFc9ei5sZW5ndGgtTztVPU1hdGgubWluKE8sTC5sZW5ndGgpLEwuY29weSh6LFcsMCxVKSxPLT1VfWlmKFU8TC5sZW5ndGgmJkY+MCl7dmFyIFk9Ti5sZW5ndGgt'@;
put 'RixxPU1hdGgubWluKEYsTC5sZW5ndGgtVSk7TC5jb3B5KE4sWSxVLFUrcSksRi09cX19cmV0dXJuIEwuZmlsbCgwKSx7a2V5OnosaXY6Tn19fSw0MDI5Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoNTMyMCksXz1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLGc9T2JqZWN0LnBy'@;
put 'b3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTt1ZS5leHBvcnRzPWZ1bmN0aW9uKHosTixMKXtpZighSShOKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJpdGVyYXRvciBtdXN0IGJlIGEgZnVuY3Rpb24iKTt2YXIgSzthcmd1bWVudHMubGVuZ3RoPj0zJiYoSz1MKSxmdW5jdGlvbiBGKE8pe3JldHVybiJb'@;
put 'b2JqZWN0IEFycmF5XSI9PT1fLmNhbGwoTyl9KHopP2Z1bmN0aW9uKHosTixMKXtmb3IodmFyIEs9MCxVPXoubGVuZ3RoO0s8VTtLKyspZy5jYWxsKHosSykmJihudWxsPT1MP04oeltLXSxLLHopOk4uY2FsbChMLHpbS10sSyx6KSl9KHosTixLKToic3RyaW5nIj09dHlwZW9mIHo/ZnVuY3Rp'@;
put 'b24oeixOLEwpe2Zvcih2YXIgSz0wLFU9ei5sZW5ndGg7SzxVO0srKyludWxsPT1MP04oei5jaGFyQXQoSyksSyx6KTpOLmNhbGwoTCx6LmNoYXJBdChLKSxLLHopfSh6LE4sSyk6ZnVuY3Rpb24oeixOLEwpe2Zvcih2YXIgSyBpbiB6KWcuY2FsbCh6LEspJiYobnVsbD09TD9OKHpbS10sSyx6'@;
put 'KTpOLmNhbGwoTCx6W0tdLEsseikpfSh6LE4sSyl9fSw2MjMwOnVlPT57dWUuZXhwb3J0cz0ib2JqZWN0Ij09dHlwZW9mIHNlbGY/c2VsZi5Gb3JtRGF0YTp3aW5kb3cuRm9ybURhdGF9LDM4NzM6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg0MTU1KTtjb25zdCBfPXkoNzcpLGc9'@;
put 'eSgyNTIwKSxCPXkoMTM4MSkubWtkaXJzU3luYyx3PXkoMzE4KS51dGltZXNNaWxsaXNTeW5jLFA9eSgyNzMzKTtmdW5jdGlvbiBPKF9lLFRlLFNlLGplKXtjb25zdCBwPShqZS5kZXJlZmVyZW5jZT9fLnN0YXRTeW5jOl8ubHN0YXRTeW5jKShUZSk7aWYocC5pc0RpcmVjdG9yeSgpKXJldHVy'@;
put 'biBmdW5jdGlvbiBlZShfZSxUZSxTZSxqZSxWKXtyZXR1cm4gVGU/bmUoU2UsamUsVik6ZnVuY3Rpb24gSihfZSxUZSxTZSxqZSl7cmV0dXJuIF8ubWtkaXJTeW5jKFNlKSxuZShUZSxTZSxqZSksWShTZSxfZSl9KF9lLm1vZGUsU2UsamUsVil9KHAsX2UsVGUsU2UsamUpO2lmKHAuaXNGaWxl'@;
put 'KCl8fHAuaXNDaGFyYWN0ZXJEZXZpY2UoKXx8cC5pc0Jsb2NrRGV2aWNlKCkpcmV0dXJuIGZ1bmN0aW9uIHooX2UsVGUsU2UsamUsVil7cmV0dXJuIFRlP2Z1bmN0aW9uIE4oX2UsVGUsU2UsamUpe2lmKGplLm92ZXJ3cml0ZSlyZXR1cm4gXy51bmxpbmtTeW5jKFNlKSxMKF9lLFRlLFNlLGpl'@;
put 'KTtpZihqZS5lcnJvck9uRXhpc3QpdGhyb3cgbmV3IEVycm9yKGAnJHtTZX0nIGFscmVhZHkgZXhpc3RzYCl9KF9lLFNlLGplLFYpOkwoX2UsU2UsamUsVil9KHAsX2UsVGUsU2UsamUpO2lmKHAuaXNTeW1ib2xpY0xpbmsoKSlyZXR1cm4gZnVuY3Rpb24gbGUoX2UsVGUsU2UsamUpe2xldCBW'@;
put 'PV8ucmVhZGxpbmtTeW5jKFRlKTtpZihqZS5kZXJlZmVyZW5jZSYmKFY9Zy5yZXNvbHZlKEkuY3dkKCksVikpLF9lKXtsZXQgcDt0cnl7cD1fLnJlYWRsaW5rU3luYyhTZSl9Y2F0Y2goYil7aWYoIkVJTlZBTCI9PT1iLmNvZGV8fCJVTktOT1dOIj09PWIuY29kZSlyZXR1cm4gXy5zeW1saW5r'@;
put 'U3luYyhWLFNlKTt0aHJvdyBifWlmKGplLmRlcmVmZXJlbmNlJiYocD1nLnJlc29sdmUoSS5jd2QoKSxwKSksUC5pc1NyY1N1YmRpcihWLHApKXRocm93IG5ldyBFcnJvcihgQ2Fubm90IGNvcHkgJyR7Vn0nIHRvIGEgc3ViZGlyZWN0b3J5IG9mIGl0c2VsZiwgJyR7cH0nLmApO2lmKFAuaXNT'@;
put 'cmNTdWJkaXIocCxWKSl0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBvdmVyd3JpdGUgJyR7cH0nIHdpdGggJyR7Vn0nLmApO3JldHVybiBmdW5jdGlvbiBtZShfZSxUZSl7cmV0dXJuIF8udW5saW5rU3luYyhUZSksXy5zeW1saW5rU3luYyhfZSxUZSl9KFYsU2UpfXJldHVybiBfLnN5bWxpbmtT'@;
put 'eW5jKFYsU2UpfShfZSxUZSxTZSxqZSk7dGhyb3cgcC5pc1NvY2tldCgpP25ldyBFcnJvcihgQ2Fubm90IGNvcHkgYSBzb2NrZXQgZmlsZTogJHtUZX1gKTpwLmlzRklGTygpP25ldyBFcnJvcihgQ2Fubm90IGNvcHkgYSBGSUZPIHBpcGU6ICR7VGV9YCk6bmV3IEVycm9yKGBVbmtub3duIGZp'@;
put 'bGU6ICR7VGV9YCl9ZnVuY3Rpb24gTChfZSxUZSxTZSxqZSl7cmV0dXJuIF8uY29weUZpbGVTeW5jKFRlLFNlKSxqZS5wcmVzZXJ2ZVRpbWVzdGFtcHMmJmZ1bmN0aW9uIEsoX2UsVGUsU2UpeyhmdW5jdGlvbiBVKF9lKXtyZXR1cm4hKDEyOCZfZSl9KShfZSkmJmZ1bmN0aW9uIFcoX2UsVGUp'@;
put 'e1koX2UsMTI4fFRlKX0oU2UsX2UpLGZ1bmN0aW9uIHEoX2UsVGUpe2NvbnN0IFNlPV8uc3RhdFN5bmMoX2UpO3coVGUsU2UuYXRpbWUsU2UubXRpbWUpfShUZSxTZSl9KF9lLm1vZGUsVGUsU2UpLFkoU2UsX2UubW9kZSl9ZnVuY3Rpb24gWShfZSxUZSl7cmV0dXJuIF8uY2htb2RTeW5jKF9l'@;
put 'LFRlKX1mdW5jdGlvbiBuZShfZSxUZSxTZSl7Y29uc3QgamU9Xy5vcGVuZGlyU3luYyhfZSk7dHJ5e2xldCBWO2Zvcig7bnVsbCE9PShWPWplLnJlYWRTeW5jKCkpOylpZShWLm5hbWUsX2UsVGUsU2UpfWZpbmFsbHl7amUuY2xvc2VTeW5jKCl9fWZ1bmN0aW9uIGllKF9lLFRlLFNlLGplKXtj'@;
put 'b25zdCBWPWcuam9pbihUZSxfZSkscD1nLmpvaW4oU2UsX2UpO2lmKGplLmZpbHRlciYmIWplLmZpbHRlcihWLHApKXJldHVybjtjb25zdHtkZXN0U3RhdDpifT1QLmNoZWNrUGF0aHNTeW5jKFYscCwiY29weSIsamUpO3JldHVybiBPKGIsVixwLGplKX11ZS5leHBvcnRzPWZ1bmN0aW9uIEYo'@;
put 'X2UsVGUsU2UpeyJmdW5jdGlvbiI9PXR5cGVvZiBTZSYmKFNlPXtmaWx0ZXI6U2V9KSwoU2U9U2V8fHt9KS5jbG9iYmVyPSEoImNsb2JiZXIiaW4gU2UpfHwhIVNlLmNsb2JiZXIsU2Uub3ZlcndyaXRlPSJvdmVyd3JpdGUiaW4gU2U/ISFTZS5vdmVyd3JpdGU6U2UuY2xvYmJlcixTZS5wcmVz'@;
put 'ZXJ2ZVRpbWVzdGFtcHMmJiJpYTMyIj09PUkuYXJjaCYmSS5lbWl0V2FybmluZygiVXNpbmcgdGhlIHByZXNlcnZlVGltZXN0YW1wcyBvcHRpb24gaW4gMzItYml0IG5vZGUgaXMgbm90IHJlY29tbWVuZGVkO1xuXG5cdHNlZSBodHRwczovL2dpdGh1Yi5jb20vanByaWNoYXJkc29uL25vZGUt'@;
put 'ZnMtZXh0cmEvaXNzdWVzLzI2OSIsIldhcm5pbmciLCJmcy1leHRyYS1XQVJOMDAwMiIpO2NvbnN0e3NyY1N0YXQ6amUsZGVzdFN0YXQ6Vn09UC5jaGVja1BhdGhzU3luYyhfZSxUZSwiY29weSIsU2UpO2lmKFAuY2hlY2tQYXJlbnRQYXRoc1N5bmMoX2UsamUsVGUsImNvcHkiKSxTZS5maWx0'@;
put 'ZXImJiFTZS5maWx0ZXIoX2UsVGUpKXJldHVybjtjb25zdCBwPWcuZGlybmFtZShUZSk7cmV0dXJuIF8uZXhpc3RzU3luYyhwKXx8QihwKSxPKFYsX2UsVGUsU2UpfX0sNzE4OToodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDQxNTUpO2NvbnN0IF89eSg3NzQ5KSxnPXkoMjUyMCks'@;
put 'e21rZGlyczpCfT15KDEzODEpLHtwYXRoRXhpc3RzOnd9PXkoOTI1Nykse3V0aW1lc01pbGxpczpQfT15KDMxOCksRj15KDI3MzMpO2Z1bmN0aW9uIHooKXtyZXR1cm4oej1fYXN5bmNUb0dlbmVyYXRvcihmdW5jdGlvbiooVGUsU2UsamU9e30peyJmdW5jdGlvbiI9PXR5cGVvZiBqZSYmKGpl'@;
put 'PXtmaWx0ZXI6amV9KSxqZS5jbG9iYmVyPSEoImNsb2JiZXIiaW4gamUpfHwhIWplLmNsb2JiZXIsamUub3ZlcndyaXRlPSJvdmVyd3JpdGUiaW4gamU/ISFqZS5vdmVyd3JpdGU6amUuY2xvYmJlcixqZS5wcmVzZXJ2ZVRpbWVzdGFtcHMmJiJpYTMyIj09PUkuYXJjaCYmSS5lbWl0V2Fybmlu'@;
put 'ZygiVXNpbmcgdGhlIHByZXNlcnZlVGltZXN0YW1wcyBvcHRpb24gaW4gMzItYml0IG5vZGUgaXMgbm90IHJlY29tbWVuZGVkO1xuXG5cdHNlZSBodHRwczovL2dpdGh1Yi5jb20vanByaWNoYXJkc29uL25vZGUtZnMtZXh0cmEvaXNzdWVzLzI2OSIsIldhcm5pbmciLCJmcy1leHRyYS1XQVJO'@;
put 'MDAwMSIpO2NvbnN0e3NyY1N0YXQ6VixkZXN0U3RhdDpwfT15aWVsZCBGLmNoZWNrUGF0aHMoVGUsU2UsImNvcHkiLGplKTtpZih5aWVsZCBGLmNoZWNrUGFyZW50UGF0aHMoVGUsVixTZSwiY29weSIpLCEoeWllbGQgTihUZSxTZSxqZSkpKXJldHVybjtjb25zdCB4PWcuZGlybmFtZShTZSk7'@;
put 'KHlpZWxkIHcoeCkpfHwoeWllbGQgQih4KSkseWllbGQgSyhwLFRlLFNlLGplKX0pKS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gTihUZSxTZSxqZSl7cmV0dXJuIEwuYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIEwoKXtyZXR1cm4oTD1fYXN5bmNUb0dlbmVyYXRvcihm'@;
put 'dW5jdGlvbiooVGUsU2UsamUpe3JldHVybiFqZS5maWx0ZXJ8fGplLmZpbHRlcihUZSxTZSl9KSkuYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIEsoVGUsU2UsamUsVil7cmV0dXJuIFUuYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIFUoKXtyZXR1cm4gVT1fYXN5bmNUb0dl'@;
put 'bmVyYXRvcihmdW5jdGlvbiooVGUsU2UsamUsVil7Y29uc3QgYj15aWVsZChWLmRlcmVmZXJlbmNlP18uc3RhdDpfLmxzdGF0KShTZSk7aWYoYi5pc0RpcmVjdG9yeSgpKXJldHVybiBmdW5jdGlvbiBpZShUZSxTZSxqZSxWLHApe3JldHVybiBsZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KGIs'@;
put 'VGUsU2UsamUsVik7aWYoYi5pc0ZpbGUoKXx8Yi5pc0NoYXJhY3RlckRldmljZSgpfHxiLmlzQmxvY2tEZXZpY2UoKSlyZXR1cm4gZnVuY3Rpb24gVyhUZSxTZSxqZSxWLHApe3JldHVybiBZLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0oYixUZSxTZSxqZSxWKTtpZihiLmlzU3ltYm9saWNMaW5r'@;
put 'KCkpcmV0dXJuIGZ1bmN0aW9uIG1lKFRlLFNlLGplLFYpe3JldHVybiBfZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KFRlLFNlLGplLFYpO3Rocm93IGIuaXNTb2NrZXQoKT9uZXcgRXJyb3IoYENhbm5vdCBjb3B5IGEgc29ja2V0IGZpbGU6ICR7U2V9YCk6Yi5pc0ZJRk8oKT9uZXcgRXJyb3Io'@;
put 'YENhbm5vdCBjb3B5IGEgRklGTyBwaXBlOiAke1NlfWApOm5ldyBFcnJvcihgVW5rbm93biBmaWxlOiAke1NlfWApfSksVS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gWSgpe3JldHVybihZPV9hc3luY1RvR2VuZXJhdG9yKGZ1bmN0aW9uKihUZSxTZSxqZSxWLHApe2lmKCFTZSly'@;
put 'ZXR1cm4gcShUZSxqZSxWLHApO2lmKHAub3ZlcndyaXRlKXJldHVybiB5aWVsZCBfLnVubGluayhWKSxxKFRlLGplLFYscCk7aWYocC5lcnJvck9uRXhpc3QpdGhyb3cgbmV3IEVycm9yKGAnJHtWfScgYWxyZWFkeSBleGlzdHNgKX0pKS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24g'@;
put 'cShUZSxTZSxqZSxWKXtyZXR1cm4gZWUuYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIGVlKCl7cmV0dXJuKGVlPV9hc3luY1RvR2VuZXJhdG9yKGZ1bmN0aW9uKihUZSxTZSxqZSxWKXtpZih5aWVsZCBfLmNvcHlGaWxlKFNlLGplKSxWLnByZXNlcnZlVGltZXN0YW1wcyl7KGZ1bmN0'@;
put 'aW9uIEooVGUpe3JldHVybiEoMTI4JlRlKX0pKFRlLm1vZGUpJiYoeWllbGQgZnVuY3Rpb24gbmUoVGUsU2Upe3JldHVybiBfLmNobW9kKFRlLDEyOHxTZSl9KGplLFRlLm1vZGUpKTtjb25zdCBwPXlpZWxkIF8uc3RhdChTZSk7eWllbGQgUChqZSxwLmF0aW1lLHAubXRpbWUpfXJldHVybiBf'@;
put 'LmNobW9kKGplLFRlLm1vZGUpfSkpLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBsZSgpe3JldHVybihsZT1fYXN5bmNUb0dlbmVyYXRvcihmdW5jdGlvbiooVGUsU2UsamUsVixwKXtTZXx8KHlpZWxkIF8ubWtkaXIoVikpO2NvbnN0IGI9W107dmFyIFQseD0hMSxDPSExO3RyeXtm'@;
put 'b3IodmFyIGosSD1fYXN5bmNJdGVyYXRvcih5aWVsZCBfLm9wZW5kaXIoamUpKTt4PSEoaj15aWVsZCBILm5leHQoKSkuZG9uZTt4PSExKXtjb25zdCBFPWoudmFsdWU7e2NvbnN0IG09Zy5qb2luKGplLEUubmFtZSksQT1nLmpvaW4oVixFLm5hbWUpO2IucHVzaChOKG0sQSxwKS50aGVuKGFl'@;
put 'PT57aWYoYWUpcmV0dXJuIEYuY2hlY2tQYXRocyhtLEEsImNvcHkiLHApLnRoZW4oKHtkZXN0U3RhdDp0ZX0pPT5LKHRlLG0sQSxwKSl9KSl9fX1jYXRjaChFKXtDPSEwLFQ9RX1maW5hbGx5e3RyeXt4JiZudWxsIT1ILnJldHVybiYmKHlpZWxkIEgucmV0dXJuKCkpfWZpbmFsbHl7aWYoQyl0'@;
put 'aHJvdyBUfX15aWVsZCBQcm9taXNlLmFsbChiKSxTZXx8KHlpZWxkIF8uY2htb2QoVixUZS5tb2RlKSl9KSkuYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIF9lKCl7cmV0dXJuKF9lPV9hc3luY1RvR2VuZXJhdG9yKGZ1bmN0aW9uKihUZSxTZSxqZSxWKXtsZXQgcD15aWVsZCBfLnJl'@;
put 'YWRsaW5rKFNlKTtpZihWLmRlcmVmZXJlbmNlJiYocD1nLnJlc29sdmUoSS5jd2QoKSxwKSksIVRlKXJldHVybiBfLnN5bWxpbmsocCxqZSk7bGV0IGI9bnVsbDt0cnl7Yj15aWVsZCBfLnJlYWRsaW5rKGplKX1jYXRjaCh4KXtpZigiRUlOVkFMIj09PXguY29kZXx8IlVOS05PV04iPT09eC5j'@;
put 'b2RlKXJldHVybiBfLnN5bWxpbmsocCxqZSk7dGhyb3cgeH1pZihWLmRlcmVmZXJlbmNlJiYoYj1nLnJlc29sdmUoSS5jd2QoKSxiKSksRi5pc1NyY1N1YmRpcihwLGIpKXRocm93IG5ldyBFcnJvcihgQ2Fubm90IGNvcHkgJyR7cH0nIHRvIGEgc3ViZGlyZWN0b3J5IG9mIGl0c2VsZiwgJyR7'@;
put 'Yn0nLmApO2lmKEYuaXNTcmNTdWJkaXIoYixwKSl0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBvdmVyd3JpdGUgJyR7Yn0nIHdpdGggJyR7cH0nLmApO3JldHVybiB5aWVsZCBfLnVubGluayhqZSksXy5zeW1saW5rKHAsamUpfSkpLmFwcGx5KHRoaXMsYXJndW1lbnRzKX11ZS5leHBvcnRzPWZ1'@;
put 'bmN0aW9uIE8oVGUsU2Upe3JldHVybiB6LmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LDY0NjQ6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7Y29uc3QgST15KDg5ODEpLmZyb21Qcm9taXNlO3VlLmV4cG9ydHM9e2NvcHk6SSh5KDcxODkpKSxjb3B5U3luYzp5KDM4NzMpfX0sNTU5MDoodWUsWCx5'@;
put 'KT0+eyJ1c2Ugc3RyaWN0Ijtjb25zdCBJPXkoODk4MSkuZnJvbVByb21pc2UsXz15KDc3NDkpLGc9eSgyNTIwKSxCPXkoMTM4MSksdz15KDQ1NDIpLFA9SShmdW5jdGlvbigpe3ZhciBPPV9hc3luY1RvR2VuZXJhdG9yKGZ1bmN0aW9uKihOKXtsZXQgTDt0cnl7TD15aWVsZCBfLnJlYWRkaXIo'@;
put 'Til9Y2F0Y2h7cmV0dXJuIEIubWtkaXJzKE4pfXJldHVybiBQcm9taXNlLmFsbChMLm1hcChLPT53LnJlbW92ZShnLmpvaW4oTixLKSkpKX0pO3JldHVybiBmdW5jdGlvbiB6KE4pe3JldHVybiBPLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KCkpO2Z1bmN0aW9uIEYoTyl7bGV0IHo7dHJ5e3o9'@;
put 'Xy5yZWFkZGlyU3luYyhPKX1jYXRjaHtyZXR1cm4gQi5ta2RpcnNTeW5jKE8pfXouZm9yRWFjaChOPT57Tj1nLmpvaW4oTyxOKSx3LnJlbW92ZVN5bmMoTil9KX11ZS5leHBvcnRzPXtlbXB0eURpclN5bmM6RixlbXB0eWRpclN5bmM6RixlbXB0eURpcjpQLGVtcHR5ZGlyOlB9fSw2NTMwOih1'@;
put 'ZSxYLHkpPT57InVzZSBzdHJpY3QiO2NvbnN0IEk9eSg4OTgxKS5mcm9tUHJvbWlzZSxfPXkoMjUyMCksZz15KDc3NDkpLEI9eSgxMzgxKTtmdW5jdGlvbiBQKCl7cmV0dXJuKFA9X2FzeW5jVG9HZW5lcmF0b3IoZnVuY3Rpb24qKE8pe2xldCB6O3RyeXt6PXlpZWxkIGcuc3RhdChPKX1jYXRj'@;
put 'aHt9aWYoeiYmei5pc0ZpbGUoKSlyZXR1cm47Y29uc3QgTj1fLmRpcm5hbWUoTyk7bGV0IEw9bnVsbDt0cnl7TD15aWVsZCBnLnN0YXQoTil9Y2F0Y2goSyl7aWYoIkVOT0VOVCI9PT1LLmNvZGUpcmV0dXJuIHlpZWxkIEIubWtkaXJzKE4pLHZvaWQoeWllbGQgZy53cml0ZUZpbGUoTywiIikp'@;
put 'O3Rocm93IEt9TC5pc0RpcmVjdG9yeSgpP3lpZWxkIGcud3JpdGVGaWxlKE8sIiIpOnlpZWxkIGcucmVhZGRpcihOKX0pKS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9dWUuZXhwb3J0cz17Y3JlYXRlRmlsZTpJKGZ1bmN0aW9uIHcoTyl7cmV0dXJuIFAuYXBwbHkodGhpcyxhcmd1bWVudHMpfSks'@;
put 'Y3JlYXRlRmlsZVN5bmM6ZnVuY3Rpb24gRihPKXtsZXQgejt0cnl7ej1nLnN0YXRTeW5jKE8pfWNhdGNoe31pZih6JiZ6LmlzRmlsZSgpKXJldHVybjtjb25zdCBOPV8uZGlybmFtZShPKTt0cnl7Zy5zdGF0U3luYyhOKS5pc0RpcmVjdG9yeSgpfHxnLnJlYWRkaXJTeW5jKE4pfWNhdGNoKEwp'@;
put 'e2lmKCFMfHwiRU5PRU5UIiE9PUwuY29kZSl0aHJvdyBMO0IubWtkaXJzU3luYyhOKX1nLndyaXRlRmlsZVN5bmMoTywiIil9fX0sMTcyMDoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijtjb25zdHtjcmVhdGVGaWxlOkksY3JlYXRlRmlsZVN5bmM6X309eSg2NTMwKSx7Y3JlYXRlTGluazpnLGNy'@;
put 'ZWF0ZUxpbmtTeW5jOkJ9PXkoNDE0Nykse2NyZWF0ZVN5bWxpbms6dyxjcmVhdGVTeW1saW5rU3luYzpQfT15KDM2MzUpO3VlLmV4cG9ydHM9e2NyZWF0ZUZpbGU6SSxjcmVhdGVGaWxlU3luYzpfLGVuc3VyZUZpbGU6SSxlbnN1cmVGaWxlU3luYzpfLGNyZWF0ZUxpbms6ZyxjcmVhdGVMaW5r'@;
put 'U3luYzpCLGVuc3VyZUxpbms6ZyxlbnN1cmVMaW5rU3luYzpCLGNyZWF0ZVN5bWxpbms6dyxjcmVhdGVTeW1saW5rU3luYzpQLGVuc3VyZVN5bWxpbms6dyxlbnN1cmVTeW1saW5rU3luYzpQfX0sNDE0NzoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijtjb25zdCBJPXkoODk4MSkuZnJvbVByb21p'@;
put 'c2UsXz15KDI1MjApLGc9eSg3NzQ5KSxCPXkoMTM4MSkse3BhdGhFeGlzdHM6d309eSg5MjU3KSx7YXJlSWRlbnRpY2FsOlB9PXkoMjczMyk7ZnVuY3Rpb24gTygpe3JldHVybihPPV9hc3luY1RvR2VuZXJhdG9yKGZ1bmN0aW9uKihOLEwpe2xldCBLLFU7dHJ5e0s9eWllbGQgZy5sc3RhdChM'@;
put 'KX1jYXRjaHt9dHJ5e1U9eWllbGQgZy5sc3RhdChOKX1jYXRjaChxKXt0aHJvdyBxLm1lc3NhZ2U9cS5tZXNzYWdlLnJlcGxhY2UoImxzdGF0IiwiZW5zdXJlTGluayIpLHF9aWYoSyYmUChVLEspKXJldHVybjtjb25zdCBXPV8uZGlybmFtZShMKTsoeWllbGQgdyhXKSl8fCh5aWVsZCBCLm1r'@;
put 'ZGlycyhXKSkseWllbGQgZy5saW5rKE4sTCl9KSkuYXBwbHkodGhpcyxhcmd1bWVudHMpfXVlLmV4cG9ydHM9e2NyZWF0ZUxpbms6SShmdW5jdGlvbiBGKE4sTCl7cmV0dXJuIE8uYXBwbHkodGhpcyxhcmd1bWVudHMpfSksY3JlYXRlTGlua1N5bmM6ZnVuY3Rpb24geihOLEwpe2xldCBLO3Ry'@;
put 'eXtLPWcubHN0YXRTeW5jKEwpfWNhdGNoe310cnl7Y29uc3QgWT1nLmxzdGF0U3luYyhOKTtpZihLJiZQKFksSykpcmV0dXJufWNhdGNoKFkpe3Rocm93IFkubWVzc2FnZT1ZLm1lc3NhZ2UucmVwbGFjZSgibHN0YXQiLCJlbnN1cmVMaW5rIiksWX1jb25zdCBVPV8uZGlybmFtZShMKTtyZXR1'@;
put 'cm4gZy5leGlzdHNTeW5jKFUpfHxCLm1rZGlyc1N5bmMoVSksZy5saW5rU3luYyhOLEwpfX19LDYwNzI6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7Y29uc3QgST15KDI1MjApLF89eSg3NzQ5KSx7cGF0aEV4aXN0czpnfT15KDkyNTcpLEI9eSg4OTgxKS5mcm9tUHJvbWlzZTtmdW5jdGlvbiBQ'@;
put 'KCl7cmV0dXJuKFA9X2FzeW5jVG9HZW5lcmF0b3IoZnVuY3Rpb24qKE8seil7aWYoSS5pc0Fic29sdXRlKE8pKXt0cnl7eWllbGQgXy5sc3RhdChPKX1jYXRjaChVKXt0aHJvdyBVLm1lc3NhZ2U9VS5tZXNzYWdlLnJlcGxhY2UoImxzdGF0IiwiZW5zdXJlU3ltbGluayIpLFV9cmV0dXJue3Rv'@;
put 'Q3dkOk8sdG9Ec3Q6T319Y29uc3QgTj1JLmRpcm5hbWUoeiksTD1JLmpvaW4oTixPKTtpZih5aWVsZCBnKEwpKXJldHVybnt0b0N3ZDpMLHRvRHN0Ok99O3RyeXt5aWVsZCBfLmxzdGF0KE8pfWNhdGNoKFUpe3Rocm93IFUubWVzc2FnZT1VLm1lc3NhZ2UucmVwbGFjZSgibHN0YXQiLCJlbnN1'@;
put 'cmVTeW1saW5rIiksVX1yZXR1cm57dG9Dd2Q6Tyx0b0RzdDpJLnJlbGF0aXZlKE4sTyl9fSkpLmFwcGx5KHRoaXMsYXJndW1lbnRzKX11ZS5leHBvcnRzPXtzeW1saW5rUGF0aHM6QihmdW5jdGlvbiB3KE8seil7cmV0dXJuIFAuYXBwbHkodGhpcyxhcmd1bWVudHMpfSksc3ltbGlua1BhdGhz'@;
put 'U3luYzpmdW5jdGlvbiBGKE8seil7aWYoSS5pc0Fic29sdXRlKE8pKXtpZighXy5leGlzdHNTeW5jKE8pKXRocm93IG5ldyBFcnJvcigiYWJzb2x1dGUgc3JjcGF0aCBkb2VzIG5vdCBleGlzdCIpO3JldHVybnt0b0N3ZDpPLHRvRHN0Ok99fWNvbnN0IE49SS5kaXJuYW1lKHopLEw9SS5qb2lu'@;
put 'KE4sTyk7aWYoXy5leGlzdHNTeW5jKEwpKXJldHVybnt0b0N3ZDpMLHRvRHN0Ok99O2lmKCFfLmV4aXN0c1N5bmMoTykpdGhyb3cgbmV3IEVycm9yKCJyZWxhdGl2ZSBzcmNwYXRoIGRvZXMgbm90IGV4aXN0Iik7cmV0dXJue3RvQ3dkOk8sdG9Ec3Q6SS5yZWxhdGl2ZShOLE8pfX19fSw5MjU5'@;
put 'Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO2NvbnN0IEk9eSg3NzQ5KSxfPXkoODk4MSkuZnJvbVByb21pc2U7ZnVuY3Rpb24gQigpe3JldHVybihCPV9hc3luY1RvR2VuZXJhdG9yKGZ1bmN0aW9uKihQLEYpe2lmKEYpcmV0dXJuIEY7bGV0IE87dHJ5e089eWllbGQgSS5sc3RhdChQKX1jYXRj'@;
put 'aHtyZXR1cm4iZmlsZSJ9cmV0dXJuIE8mJk8uaXNEaXJlY3RvcnkoKT8iZGlyIjoiZmlsZSJ9KSkuYXBwbHkodGhpcyxhcmd1bWVudHMpfXVlLmV4cG9ydHM9e3N5bWxpbmtUeXBlOl8oZnVuY3Rpb24gZyhQLEYpe3JldHVybiBCLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pLHN5bWxpbmtUeXBl'@;
put 'U3luYzpmdW5jdGlvbiB3KFAsRil7aWYoRilyZXR1cm4gRjtsZXQgTzt0cnl7Tz1JLmxzdGF0U3luYyhQKX1jYXRjaHtyZXR1cm4iZmlsZSJ9cmV0dXJuIE8mJk8uaXNEaXJlY3RvcnkoKT8iZGlyIjoiZmlsZSJ9fX0sMzYzNToodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijtjb25zdCBJPXkoODk4'@;
put 'MSkuZnJvbVByb21pc2UsXz15KDI1MjApLGc9eSg3NzQ5KSx7bWtkaXJzOkIsbWtkaXJzU3luYzp3fT15KDEzODEpLHtzeW1saW5rUGF0aHM6UCxzeW1saW5rUGF0aHNTeW5jOkZ9PXkoNjA3Mikse3N5bWxpbmtUeXBlOk8sc3ltbGlua1R5cGVTeW5jOnp9PXkoOTI1OSkse3BhdGhFeGlzdHM6'@;
put 'Tn09eSg5MjU3KSx7YXJlSWRlbnRpY2FsOkx9PXkoMjczMyk7ZnVuY3Rpb24gVSgpe3JldHVybihVPV9hc3luY1RvR2VuZXJhdG9yKGZ1bmN0aW9uKihZLHEsZWUpe2xldCBKO3RyeXtKPXlpZWxkIGcubHN0YXQocSl9Y2F0Y2h7fWlmKEomJkouaXNTeW1ib2xpY0xpbmsoKSl7Y29uc3RbbWUs'@;
put 'X2VdPXlpZWxkIFByb21pc2UuYWxsKFtnLnN0YXQoWSksZy5zdGF0KHEpXSk7aWYoTChtZSxfZSkpcmV0dXJufWNvbnN0IG5lPXlpZWxkIFAoWSxxKTtZPW5lLnRvRHN0O2NvbnN0IGllPXlpZWxkIE8obmUudG9Dd2QsZWUpLGxlPV8uZGlybmFtZShxKTtyZXR1cm4oeWllbGQgTihsZSkpfHwo'@;
put 'eWllbGQgQihsZSkpLGcuc3ltbGluayhZLHEsaWUpfSkpLmFwcGx5KHRoaXMsYXJndW1lbnRzKX11ZS5leHBvcnRzPXtjcmVhdGVTeW1saW5rOkkoZnVuY3Rpb24gSyhZLHEsZWUpe3JldHVybiBVLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pLGNyZWF0ZVN5bWxpbmtTeW5jOmZ1bmN0aW9uIFco'@;
put 'WSxxLGVlKXtsZXQgSjt0cnl7Sj1nLmxzdGF0U3luYyhxKX1jYXRjaHt9aWYoSiYmSi5pc1N5bWJvbGljTGluaygpKXtjb25zdCBtZT1nLnN0YXRTeW5jKFkpLF9lPWcuc3RhdFN5bmMocSk7aWYoTChtZSxfZSkpcmV0dXJufWNvbnN0IG5lPUYoWSxxKTtZPW5lLnRvRHN0LGVlPXoobmUudG9D'@;
put 'd2QsZWUpO2NvbnN0IGllPV8uZGlybmFtZShxKTtyZXR1cm4gZy5leGlzdHNTeW5jKGllKXx8dyhpZSksZy5zeW1saW5rU3luYyhZLHEsZWUpfX19LDc3NDk6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg0MTU1KTtjb25zdCBfPXkoODk4MSkuZnJvbUNhbGxiYWNrLGc9eSg3Nyks'@;
put 'Qj1bImFjY2VzcyIsImFwcGVuZEZpbGUiLCJjaG1vZCIsImNob3duIiwiY2xvc2UiLCJjb3B5RmlsZSIsImNwIiwiZmNobW9kIiwiZmNob3duIiwiZmRhdGFzeW5jIiwiZnN0YXQiLCJmc3luYyIsImZ0cnVuY2F0ZSIsImZ1dGltZXMiLCJnbG9iIiwibGNobW9kIiwibGNob3duIiwibHV0aW1l'@;
put 'cyIsImxpbmsiLCJsc3RhdCIsIm1rZGlyIiwibWtkdGVtcCIsIm9wZW4iLCJvcGVuZGlyIiwicmVhZGRpciIsInJlYWRGaWxlIiwicmVhZGxpbmsiLCJyZWFscGF0aCIsInJlbmFtZSIsInJtIiwicm1kaXIiLCJzdGF0Iiwic3RhdGZzIiwic3ltbGluayIsInRydW5jYXRlIiwidW5saW5rIiwi'@;
put 'dXRpbWVzIiwid3JpdGVGaWxlIl0uZmlsdGVyKHc9PiJmdW5jdGlvbiI9PXR5cGVvZiBnW3ddKTtPYmplY3QuYXNzaWduKFgsZyksQi5mb3JFYWNoKHc9PntYW3ddPV8oZ1t3XSl9KSxYLmV4aXN0cz1mdW5jdGlvbih3LFApe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBQP2cuZXhpc3RzKHcs'@;
put 'UCk6bmV3IFByb21pc2UoRj0+Zy5leGlzdHModyxGKSl9LFgucmVhZD1mdW5jdGlvbih3LFAsRixPLHosTil7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIE4/Zy5yZWFkKHcsUCxGLE8seixOKTpuZXcgUHJvbWlzZSgoTCxLKT0+e2cucmVhZCh3LFAsRixPLHosKFUsVyxZKT0+e2lmKFUpcmV0'@;
put 'dXJuIEsoVSk7TCh7Ynl0ZXNSZWFkOlcsYnVmZmVyOll9KX0pfSl9LFgud3JpdGU9ZnVuY3Rpb24odyxQLC4uLkYpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBGW0YubGVuZ3RoLTFdP2cud3JpdGUodyxQLC4uLkYpOm5ldyBQcm9taXNlKChPLHopPT57Zy53cml0ZSh3LFAsLi4uRiwoTixM'@;
put 'LEspPT57aWYoTilyZXR1cm4geihOKTtPKHtieXRlc1dyaXR0ZW46TCxidWZmZXI6S30pfSl9KX0sWC5yZWFkdj1mdW5jdGlvbih3LFAsLi4uRil7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIEZbRi5sZW5ndGgtMV0/Zy5yZWFkdih3LFAsLi4uRik6bmV3IFByb21pc2UoKE8seik9PntnLnJl'@;
put 'YWR2KHcsUCwuLi5GLChOLEwsSyk9PntpZihOKXJldHVybiB6KE4pO08oe2J5dGVzUmVhZDpMLGJ1ZmZlcnM6S30pfSl9KX0sWC53cml0ZXY9ZnVuY3Rpb24odyxQLC4uLkYpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBGW0YubGVuZ3RoLTFdP2cud3JpdGV2KHcsUCwuLi5GKTpuZXcgUHJv'@;
put 'bWlzZSgoTyx6KT0+e2cud3JpdGV2KHcsUCwuLi5GLChOLEwsSyk9PntpZihOKXJldHVybiB6KE4pO08oe2J5dGVzV3JpdHRlbjpMLGJ1ZmZlcnM6S30pfSl9KX0sImZ1bmN0aW9uIj09dHlwZW9mIGcucmVhbHBhdGgubmF0aXZlP1gucmVhbHBhdGgubmF0aXZlPV8oZy5yZWFscGF0aC5uYXRp'@;
put 'dmUpOkkuZW1pdFdhcm5pbmcoImZzLnJlYWxwYXRoLm5hdGl2ZSBpcyBub3QgYSBmdW5jdGlvbi4gSXMgZnMgYmVpbmcgbW9ua2V5LXBhdGNoZWQ/IiwiV2FybmluZyIsImZzLWV4dHJhLVdBUk4wMDAzIil9LDU2NzQ6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dWUuZXhwb3J0cz17Li4ueSg3'@;
put 'NzQ5KSwuLi55KDY0NjQpLC4uLnkoNTU5MCksLi4ueSgxNzIwKSwuLi55KDY1NzMpLC4uLnkoMTM4MSksLi4ueSg1MzApLC4uLnkoNDY3MCksLi4ueSg5MjU3KSwuLi55KDQ1NDIpfX0sNjU3MzoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijtjb25zdCBJPXkoODk4MSkuZnJvbVByb21pc2UsXz15'@;
put 'KDcxODMpO18ub3V0cHV0SnNvbj1JKHkoMzUwOCkpLF8ub3V0cHV0SnNvblN5bmM9eSg5NTc4KSxfLm91dHB1dEpTT049Xy5vdXRwdXRKc29uLF8ub3V0cHV0SlNPTlN5bmM9Xy5vdXRwdXRKc29uU3luYyxfLndyaXRlSlNPTj1fLndyaXRlSnNvbixfLndyaXRlSlNPTlN5bmM9Xy53cml0ZUpz'@;
put 'b25TeW5jLF8ucmVhZEpTT049Xy5yZWFkSnNvbixfLnJlYWRKU09OU3luYz1fLnJlYWRKc29uU3luYyx1ZS5leHBvcnRzPV99LDcxODM6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7Y29uc3QgST15KDY4MTMpO3VlLmV4cG9ydHM9e3JlYWRKc29uOkkucmVhZEZpbGUscmVhZEpzb25TeW5jOkku'@;
put 'cmVhZEZpbGVTeW5jLHdyaXRlSnNvbjpJLndyaXRlRmlsZSx3cml0ZUpzb25TeW5jOkkud3JpdGVGaWxlU3luY319LDk1Nzg6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7Y29uc3R7c3RyaW5naWZ5Okl9PXkoNjc4MCkse291dHB1dEZpbGVTeW5jOl99PXkoNDY3MCk7dWUuZXhwb3J0cz1mdW5j'@;
put 'dGlvbiBnKEIsdyxQKXtjb25zdCBGPUkodyxQKTtfKEIsRixQKX19LDM1MDg6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7Y29uc3R7c3RyaW5naWZ5Okl9PXkoNjc4MCkse291dHB1dEZpbGU6X309eSg0NjcwKTtmdW5jdGlvbiBCKCl7cmV0dXJuKEI9X2FzeW5jVG9HZW5lcmF0b3IoZnVuY3Rp'@;
put 'b24qKHcsUCxGPXt9KXtjb25zdCBPPUkoUCxGKTt5aWVsZCBfKHcsTyxGKX0pKS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9dWUuZXhwb3J0cz1mdW5jdGlvbiBnKHcsUCl7cmV0dXJuIEIuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0sMTM4MToodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijtjb25zdCBJ'@;
put 'PXkoODk4MSkuZnJvbVByb21pc2Use21ha2VEaXI6XyxtYWtlRGlyU3luYzpnfT15KDgyMzMpLEI9SShfKTt1ZS5leHBvcnRzPXtta2RpcnM6Qixta2RpcnNTeW5jOmcsbWtkaXJwOkIsbWtkaXJwU3luYzpnLGVuc3VyZURpcjpCLGVuc3VyZURpclN5bmM6Z319LDgyMzM6KHVlLFgseSk9Pnsi'@;
put 'dXNlIHN0cmljdCI7Y29uc3QgST15KDc3NDkpLHtjaGVja1BhdGg6X309eSgzNDY4KSxnPUI9PiJudW1iZXIiPT10eXBlb2YgQj9COnttb2RlOjUxMSwuLi5CfS5tb2RlO3VlLmV4cG9ydHMubWFrZURpcj1mdW5jdGlvbigpe3ZhciBCPV9hc3luY1RvR2VuZXJhdG9yKGZ1bmN0aW9uKih3LFAp'@;
put 'e3JldHVybiBfKHcpLEkubWtkaXIodyx7bW9kZTpnKFApLHJlY3Vyc2l2ZTohMH0pfSk7cmV0dXJuIGZ1bmN0aW9uKHcsUCl7cmV0dXJuIEIuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0oKSx1ZS5leHBvcnRzLm1ha2VEaXJTeW5jPShCLHcpPT4oXyhCKSxJLm1rZGlyU3luYyhCLHttb2RlOmco'@;
put 'dykscmVjdXJzaXZlOiEwfSkpfSwzNDY4Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoNDE1NSk7Y29uc3QgXz15KDI1MjApO3VlLmV4cG9ydHMuY2hlY2tQYXRoPWZ1bmN0aW9uKEIpe2lmKCJ3aW4zMiI9PT1JLnBsYXRmb3JtJiYvWzw+OiJ8PypdLy50ZXN0KEIucmVwbGFjZShf'@;
put 'LnBhcnNlKEIpLnJvb3QsIiIpKSl7Y29uc3QgUD1uZXcgRXJyb3IoYFBhdGggY29udGFpbnMgaW52YWxpZCBjaGFyYWN0ZXJzOiAke0J9YCk7dGhyb3cgUC5jb2RlPSJFSU5WQUwiLFB9fX0sNTMwOih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO2NvbnN0IEk9eSg4OTgxKS5mcm9tUHJvbWlzZTt1'@;
put 'ZS5leHBvcnRzPXttb3ZlOkkoeSg0MzYpKSxtb3ZlU3luYzp5KDM3MzYpfX0sMzczNjoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijtjb25zdCBJPXkoNzcpLF89eSgyNTIwKSxnPXkoNjQ2NCkuY29weVN5bmMsQj15KDQ1NDIpLnJlbW92ZVN5bmMsdz15KDEzODEpLm1rZGlycFN5bmMsUD15KDI3'@;
put 'MzMpO2Z1bmN0aW9uIE4oSyxVLFcpe3RyeXtJLnJlbmFtZVN5bmMoSyxVKX1jYXRjaChZKXtpZigiRVhERVYiIT09WS5jb2RlKXRocm93IFk7cmV0dXJuIGZ1bmN0aW9uIEwoSyxVLFcpe3JldHVybiBnKEssVSx7b3ZlcndyaXRlOlcsZXJyb3JPbkV4aXN0OiEwLHByZXNlcnZlVGltZXN0YW1w'@;
put 'czohMH0pLEIoSyl9KEssVSxXKX19dWUuZXhwb3J0cz1mdW5jdGlvbiBGKEssVSxXKXtjb25zdCBZPShXPVd8fHt9KS5vdmVyd3JpdGV8fFcuY2xvYmJlcnx8ITEse3NyY1N0YXQ6cSxpc0NoYW5naW5nQ2FzZTplZT0hMX09UC5jaGVja1BhdGhzU3luYyhLLFUsIm1vdmUiLFcpO3JldHVybiBQ'@;
put 'LmNoZWNrUGFyZW50UGF0aHNTeW5jKEsscSxVLCJtb3ZlIiksZnVuY3Rpb24gTyhLKXtjb25zdCBVPV8uZGlybmFtZShLKTtyZXR1cm4gXy5wYXJzZShVKS5yb290PT09VX0oVSl8fHcoXy5kaXJuYW1lKFUpKSxmdW5jdGlvbiB6KEssVSxXLFkpe2lmKFkpcmV0dXJuIE4oSyxVLFcpO2lmKFcp'@;
put 'cmV0dXJuIEIoVSksTihLLFUsVyk7aWYoSS5leGlzdHNTeW5jKFUpKXRocm93IG5ldyBFcnJvcigiZGVzdCBhbHJlYWR5IGV4aXN0cy4iKTtyZXR1cm4gTihLLFUsVyl9KEssVSxZLGVlKX19LDQzNjoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijtjb25zdCBJPXkoNzc0OSksXz15KDI1MjApLHtj'@;
put 'b3B5Omd9PXkoNjQ2NCkse3JlbW92ZTpCfT15KDQ1NDIpLHtta2RpcnA6d309eSgxMzgxKSx7cGF0aEV4aXN0czpQfT15KDkyNTcpLEY9eSgyNzMzKTtmdW5jdGlvbiB6KCl7cmV0dXJuIHo9X2FzeW5jVG9HZW5lcmF0b3IoZnVuY3Rpb24qKFcsWSxxPXt9KXtjb25zdCBlZT1xLm92ZXJ3cml0'@;
put 'ZXx8cS5jbG9iYmVyfHwhMSx7c3JjU3RhdDpKLGlzQ2hhbmdpbmdDYXNlOm5lPSExfT15aWVsZCBGLmNoZWNrUGF0aHMoVyxZLCJtb3ZlIixxKTt5aWVsZCBGLmNoZWNrUGFyZW50UGF0aHMoVyxKLFksIm1vdmUiKTtjb25zdCBpZT1fLmRpcm5hbWUoWSk7cmV0dXJuIF8ucGFyc2UoaWUpLnJv'@;
put 'b3QhPT1pZSYmKHlpZWxkIHcoaWUpKSxmdW5jdGlvbiBOKFcsWSxxLGVlKXtyZXR1cm4gTC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KFcsWSxlZSxuZSl9KSx6LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBMKCl7cmV0dXJuIEw9X2FzeW5jVG9HZW5lcmF0b3IoZnVuY3Rpb24qKFcs'@;
put 'WSxxLGVlKXtpZighZWUpaWYocSl5aWVsZCBCKFkpO2Vsc2UgaWYoeWllbGQgUChZKSl0aHJvdyBuZXcgRXJyb3IoImRlc3QgYWxyZWFkeSBleGlzdHMuIik7dHJ5e3lpZWxkIEkucmVuYW1lKFcsWSl9Y2F0Y2goSil7aWYoIkVYREVWIiE9PUouY29kZSl0aHJvdyBKO3lpZWxkIGZ1bmN0aW9u'@;
put 'IEsoVyxZLHEpe3JldHVybiBVLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0oVyxZLHEpfX0pLEwuYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIFUoKXtyZXR1cm4oVT1fYXN5bmNUb0dlbmVyYXRvcihmdW5jdGlvbiooVyxZLHEpe3JldHVybiB5aWVsZCBnKFcsWSx7b3ZlcndyaXRlOnEs'@;
put 'ZXJyb3JPbkV4aXN0OiEwLHByZXNlcnZlVGltZXN0YW1wczohMH0pLEIoVyl9KSkuYXBwbHkodGhpcyxhcmd1bWVudHMpfXVlLmV4cG9ydHM9ZnVuY3Rpb24gTyhXLFkpe3JldHVybiB6LmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LDQ2NzA6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7Y29uc3Qg'@;
put 'ST15KDg5ODEpLmZyb21Qcm9taXNlLF89eSg3NzQ5KSxnPXkoMjUyMCksQj15KDEzODEpLHc9eSg5MjU3KS5wYXRoRXhpc3RzO2Z1bmN0aW9uIEYoKXtyZXR1cm4oRj1fYXN5bmNUb0dlbmVyYXRvcihmdW5jdGlvbiooeixOLEw9InV0Zi04Iil7Y29uc3QgSz1nLmRpcm5hbWUoeik7cmV0dXJu'@;
put 'KHlpZWxkIHcoSykpfHwoeWllbGQgQi5ta2RpcnMoSykpLF8ud3JpdGVGaWxlKHosTixMKX0pKS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9dWUuZXhwb3J0cz17b3V0cHV0RmlsZTpJKGZ1bmN0aW9uIFAoeixOKXtyZXR1cm4gRi5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KSxvdXRwdXRGaWxlU3lu'@;
put 'YzpmdW5jdGlvbiBPKHosLi4uTil7Y29uc3QgTD1nLmRpcm5hbWUoeik7Xy5leGlzdHNTeW5jKEwpfHxCLm1rZGlyc1N5bmMoTCksXy53cml0ZUZpbGVTeW5jKHosLi4uTil9fX0sOTI1NzoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijtjb25zdCBJPXkoODk4MSkuZnJvbVByb21pc2UsXz15KDc3'@;
put 'NDkpO3VlLmV4cG9ydHM9e3BhdGhFeGlzdHM6SShmdW5jdGlvbiBnKEIpe3JldHVybiBfLmFjY2VzcyhCKS50aGVuKCgpPT4hMCkuY2F0Y2goKCk9PiExKX0pLHBhdGhFeGlzdHNTeW5jOl8uZXhpc3RzU3luY319LDQ1NDI6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7Y29uc3QgST15KDc3KSxf'@;
put 'PXkoODk4MSkuZnJvbUNhbGxiYWNrO3VlLmV4cG9ydHM9e3JlbW92ZTpfKGZ1bmN0aW9uIGcodyxQKXtJLnJtKHcse3JlY3Vyc2l2ZTohMCxmb3JjZTohMH0sUCl9KSxyZW1vdmVTeW5jOmZ1bmN0aW9uIEIodyl7SS5ybVN5bmModyx7cmVjdXJzaXZlOiEwLGZvcmNlOiEwfSl9fX0sMjczMzoo'@;
put 'dWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijtjb25zdCBJPXkoNzc0OSksXz15KDI1MjApLGc9eSg4OTgxKS5mcm9tUHJvbWlzZTtmdW5jdGlvbiBGKCl7cmV0dXJuKEY9X2FzeW5jVG9HZW5lcmF0b3IoZnVuY3Rpb24qKFkscSxlZSxKKXtjb25zdHtzcmNTdGF0Om5lLGRlc3RTdGF0OmllfT15aWVs'@;
put 'ZCBmdW5jdGlvbiBCKFkscSxlZSl7Y29uc3QgSj1lZS5kZXJlZmVyZW5jZT9uZT0+SS5zdGF0KG5lLHtiaWdpbnQ6ITB9KTpuZT0+SS5sc3RhdChuZSx7YmlnaW50OiEwfSk7cmV0dXJuIFByb21pc2UuYWxsKFtKKFkpLEoocSkuY2F0Y2gobmU9PntpZigiRU5PRU5UIj09PW5lLmNvZGUpcmV0'@;
put 'dXJuIG51bGw7dGhyb3cgbmV9KV0pLnRoZW4oKFtuZSxpZV0pPT4oe3NyY1N0YXQ6bmUsZGVzdFN0YXQ6aWV9KSl9KFkscSxKKTtpZihpZSl7aWYoSyhuZSxpZSkpe2NvbnN0IGxlPV8uYmFzZW5hbWUoWSksbWU9Xy5iYXNlbmFtZShxKTtpZigibW92ZSI9PT1lZSYmbGUhPT1tZSYmbGUudG9M'@;
put 'b3dlckNhc2UoKT09PW1lLnRvTG93ZXJDYXNlKCkpcmV0dXJue3NyY1N0YXQ6bmUsZGVzdFN0YXQ6aWUsaXNDaGFuZ2luZ0Nhc2U6ITB9O3Rocm93IG5ldyBFcnJvcigiU291cmNlIGFuZCBkZXN0aW5hdGlvbiBtdXN0IG5vdCBiZSB0aGUgc2FtZS4iKX1pZihuZS5pc0RpcmVjdG9yeSgpJiYh'@;
put 'aWUuaXNEaXJlY3RvcnkoKSl0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBvdmVyd3JpdGUgbm9uLWRpcmVjdG9yeSAnJHtxfScgd2l0aCBkaXJlY3RvcnkgJyR7WX0nLmApO2lmKCFuZS5pc0RpcmVjdG9yeSgpJiZpZS5pc0RpcmVjdG9yeSgpKXRocm93IG5ldyBFcnJvcihgQ2Fubm90IG92ZXJ3'@;
put 'cml0ZSBkaXJlY3RvcnkgJyR7cX0nIHdpdGggbm9uLWRpcmVjdG9yeSAnJHtZfScuYCl9aWYobmUuaXNEaXJlY3RvcnkoKSYmVShZLHEpKXRocm93IG5ldyBFcnJvcihXKFkscSxlZSkpO3JldHVybntzcmNTdGF0Om5lLGRlc3RTdGF0OmllfX0pKS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVu'@;
put 'Y3Rpb24geihZLHEsZWUsSil7cmV0dXJuIE4uYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIE4oKXtyZXR1cm4oTj1fYXN5bmNUb0dlbmVyYXRvcihmdW5jdGlvbiooWSxxLGVlLEope2NvbnN0IG5lPV8ucmVzb2x2ZShfLmRpcm5hbWUoWSkpLGllPV8ucmVzb2x2ZShfLmRpcm5hbWUo'@;
put 'ZWUpKTtpZihpZT09PW5lfHxpZT09PV8ucGFyc2UoaWUpLnJvb3QpcmV0dXJuO2xldCBsZTt0cnl7bGU9eWllbGQgSS5zdGF0KGllLHtiaWdpbnQ6ITB9KX1jYXRjaChtZSl7aWYoIkVOT0VOVCI9PT1tZS5jb2RlKXJldHVybjt0aHJvdyBtZX1pZihLKHEsbGUpKXRocm93IG5ldyBFcnJvcihX'@;
put 'KFksZWUsSikpO3JldHVybiB6KFkscSxpZSxKKX0pKS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gSyhZLHEpe3JldHVybiBxLmlubyYmcS5kZXYmJnEuaW5vPT09WS5pbm8mJnEuZGV2PT09WS5kZXZ9ZnVuY3Rpb24gVShZLHEpe2NvbnN0IGVlPV8ucmVzb2x2ZShZKS5zcGxpdChf'@;
put 'LnNlcCkuZmlsdGVyKG5lPT5uZSksSj1fLnJlc29sdmUocSkuc3BsaXQoXy5zZXApLmZpbHRlcihuZT0+bmUpO3JldHVybiBlZS5ldmVyeSgobmUsaWUpPT5KW2llXT09PW5lKX1mdW5jdGlvbiBXKFkscSxlZSl7cmV0dXJuYENhbm5vdCAke2VlfSAnJHtZfScgdG8gYSBzdWJkaXJlY3Rvcnkg'@;
put 'b2YgaXRzZWxmLCAnJHtxfScuYH11ZS5leHBvcnRzPXtjaGVja1BhdGhzOmcoZnVuY3Rpb24gUChZLHEsZWUsSil7cmV0dXJuIEYuYXBwbHkodGhpcyxhcmd1bWVudHMpfSksY2hlY2tQYXRoc1N5bmM6ZnVuY3Rpb24gTyhZLHEsZWUsSil7Y29uc3R7c3JjU3RhdDpuZSxkZXN0U3RhdDppZX09'@;
put 'ZnVuY3Rpb24gdyhZLHEsZWUpe2xldCBKO2NvbnN0IG5lPWVlLmRlcmVmZXJlbmNlP2xlPT5JLnN0YXRTeW5jKGxlLHtiaWdpbnQ6ITB9KTpsZT0+SS5sc3RhdFN5bmMobGUse2JpZ2ludDohMH0pLGllPW5lKFkpO3RyeXtKPW5lKHEpfWNhdGNoKGxlKXtpZigiRU5PRU5UIj09PWxlLmNvZGUp'@;
put 'cmV0dXJue3NyY1N0YXQ6aWUsZGVzdFN0YXQ6bnVsbH07dGhyb3cgbGV9cmV0dXJue3NyY1N0YXQ6aWUsZGVzdFN0YXQ6Sn19KFkscSxKKTtpZihpZSl7aWYoSyhuZSxpZSkpe2NvbnN0IGxlPV8uYmFzZW5hbWUoWSksbWU9Xy5iYXNlbmFtZShxKTtpZigibW92ZSI9PT1lZSYmbGUhPT1tZSYm'@;
put 'bGUudG9Mb3dlckNhc2UoKT09PW1lLnRvTG93ZXJDYXNlKCkpcmV0dXJue3NyY1N0YXQ6bmUsZGVzdFN0YXQ6aWUsaXNDaGFuZ2luZ0Nhc2U6ITB9O3Rocm93IG5ldyBFcnJvcigiU291cmNlIGFuZCBkZXN0aW5hdGlvbiBtdXN0IG5vdCBiZSB0aGUgc2FtZS4iKX1pZihuZS5pc0RpcmVjdG9y'@;
put 'eSgpJiYhaWUuaXNEaXJlY3RvcnkoKSl0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBvdmVyd3JpdGUgbm9uLWRpcmVjdG9yeSAnJHtxfScgd2l0aCBkaXJlY3RvcnkgJyR7WX0nLmApO2lmKCFuZS5pc0RpcmVjdG9yeSgpJiZpZS5pc0RpcmVjdG9yeSgpKXRocm93IG5ldyBFcnJvcihgQ2Fubm90'@;
put 'IG92ZXJ3cml0ZSBkaXJlY3RvcnkgJyR7cX0nIHdpdGggbm9uLWRpcmVjdG9yeSAnJHtZfScuYCl9aWYobmUuaXNEaXJlY3RvcnkoKSYmVShZLHEpKXRocm93IG5ldyBFcnJvcihXKFkscSxlZSkpO3JldHVybntzcmNTdGF0Om5lLGRlc3RTdGF0OmllfX0sY2hlY2tQYXJlbnRQYXRoczpnKHop'@;
put 'LGNoZWNrUGFyZW50UGF0aHNTeW5jOmZ1bmN0aW9uIEwoWSxxLGVlLEope2NvbnN0IG5lPV8ucmVzb2x2ZShfLmRpcm5hbWUoWSkpLGllPV8ucmVzb2x2ZShfLmRpcm5hbWUoZWUpKTtpZihpZT09PW5lfHxpZT09PV8ucGFyc2UoaWUpLnJvb3QpcmV0dXJuO2xldCBsZTt0cnl7bGU9SS5zdGF0'@;
put 'U3luYyhpZSx7YmlnaW50OiEwfSl9Y2F0Y2gobWUpe2lmKCJFTk9FTlQiPT09bWUuY29kZSlyZXR1cm47dGhyb3cgbWV9aWYoSyhxLGxlKSl0aHJvdyBuZXcgRXJyb3IoVyhZLGVlLEopKTtyZXR1cm4gTChZLHEsaWUsSil9LGlzU3JjU3ViZGlyOlUsYXJlSWRlbnRpY2FsOkt9fSwzMTg6KHVl'@;
put 'LFgseSk9PnsidXNlIHN0cmljdCI7Y29uc3QgST15KDc3NDkpLF89eSg4OTgxKS5mcm9tUHJvbWlzZTtmdW5jdGlvbiBCKCl7cmV0dXJuKEI9X2FzeW5jVG9HZW5lcmF0b3IoZnVuY3Rpb24qKFAsRixPKXtjb25zdCB6PXlpZWxkIEkub3BlbihQLCJyKyIpO2xldCBOPW51bGw7dHJ5e3lpZWxk'@;
put 'IEkuZnV0aW1lcyh6LEYsTyl9ZmluYWxseXt0cnl7eWllbGQgSS5jbG9zZSh6KX1jYXRjaChMKXtOPUx9fWlmKE4pdGhyb3cgTn0pKS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9dWUuZXhwb3J0cz17dXRpbWVzTWlsbGlzOl8oZnVuY3Rpb24gZyhQLEYsTyl7cmV0dXJuIEIuYXBwbHkodGhpcyxh'@;
put 'cmd1bWVudHMpfSksdXRpbWVzTWlsbGlzU3luYzpmdW5jdGlvbiB3KFAsRixPKXtjb25zdCB6PUkub3BlblN5bmMoUCwicisiKTtyZXR1cm4gSS5mdXRpbWVzU3luYyh6LEYsTyksSS5jbG9zZVN5bmMoeil9fX0sNzY0ODp1ZT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgeT1PYmplY3QucHJvdG90eXBl'@;
put 'LnRvU3RyaW5nLEk9TWF0aC5tYXgsZz1mdW5jdGlvbihGLE8pe2Zvcih2YXIgej1bXSxOPTA7TjxGLmxlbmd0aDtOKz0xKXpbTl09RltOXTtmb3IodmFyIEw9MDtMPE8ubGVuZ3RoO0wrPTEpeltMK0YubGVuZ3RoXT1PW0xdO3JldHVybiB6fTt1ZS5leHBvcnRzPWZ1bmN0aW9uKEYpe3ZhciBP'@;
put 'PXRoaXM7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIE98fCJbb2JqZWN0IEZ1bmN0aW9uXSIhPT15LmFwcGx5KE8pKXRocm93IG5ldyBUeXBlRXJyb3IoIkZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kIGNhbGxlZCBvbiBpbmNvbXBhdGlibGUgIitPKTtmb3IodmFyIE4sej1mdW5jdGlvbihGLE8pe2Zv'@;
put 'cih2YXIgej1bXSxOPTEsTD0wO048Ri5sZW5ndGg7Tis9MSxMKz0xKXpbTF09RltOXTtyZXR1cm4gen0oYXJndW1lbnRzKSxLPUkoMCxPLmxlbmd0aC16Lmxlbmd0aCksVT1bXSxXPTA7VzxLO1crKylVW1ddPSIkIitXO2lmKE49RnVuY3Rpb24oImJpbmRlciIsInJldHVybiBmdW5jdGlvbiAo'@;
put 'IitmdW5jdGlvbihQLEYpe2Zvcih2YXIgTz0iIix6PTA7ejxQLmxlbmd0aDt6Kz0xKU8rPVBbel0seisxPFAubGVuZ3RoJiYoTys9IiwiKTtyZXR1cm4gT30oVSkrIil7IHJldHVybiBiaW5kZXIuYXBwbHkodGhpcyxhcmd1bWVudHMpOyB9IikoZnVuY3Rpb24oKXtpZih0aGlzIGluc3RhbmNl'@;
put 'b2YgTil7dmFyIHE9Ty5hcHBseSh0aGlzLGcoeixhcmd1bWVudHMpKTtyZXR1cm4gT2JqZWN0KHEpPT09cT9xOnRoaXN9cmV0dXJuIE8uYXBwbHkoRixnKHosYXJndW1lbnRzKSl9KSxPLnByb3RvdHlwZSl7dmFyIFk9ZnVuY3Rpb24oKXt9O1kucHJvdG90eXBlPU8ucHJvdG90eXBlLE4ucHJv'@;
put 'dG90eXBlPW5ldyBZLFkucHJvdG90eXBlPW51bGx9cmV0dXJuIE59fSw4NjEyOih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoNzY0OCk7dWUuZXhwb3J0cz1GdW5jdGlvbi5wcm90b3R5cGUuYmluZHx8SX0sMjEwOih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJLF89eSg4ODky'@;
put 'KSxnPXkoMTY0OCksQj15KDM5ODEpLHc9eSg0NzI2KSxQPXkoNjcxMiksRj15KDM0NjQpLE89eSg0NDUzKSx6PXkoMzkxNSksTj15KDk3MzgpLEw9eSg2MzI5KSxLPXkoMjI2NCksVT15KDU3MzApLFc9eSg3MDcpLFk9eSgzODYyKSxxPXkoOTU1MCksZWU9RnVuY3Rpb24sSj1mdW5jdGlvbih2'@;
put 'ZSl7dHJ5e3JldHVybiBlZSgnInVzZSBzdHJpY3QiOyByZXR1cm4gKCcrdmUrIikuY29uc3RydWN0b3I7IikoKX1jYXRjaHt9fSxuZT15KDcyOTYpLGllPXkoNDQyOSksbGU9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgT30sbWU9bmU/ZnVuY3Rpb24oKXt0cnl7cmV0dXJuIGxlfWNhdGNoe3RyeXty'@;
put 'ZXR1cm4gbmUoYXJndW1lbnRzLCJjYWxsZWUiKS5nZXR9Y2F0Y2h7cmV0dXJuIGxlfX19KCk6bGUsX2U9eSgxNDA1KSgpLFRlPXkoMTYxOCksU2U9eSg4ODk5KSxqZT15KDQ0MyksVj15KDE3NjgpLHA9eSg4OTI4KSxiPXt9LHg9dHlwZW9mIFVpbnQ4QXJyYXk+InUifHwhVGU/STpUZShVaW50'@;
put 'OEFycmF5KSxDPXtfX3Byb3RvX186bnVsbCwiJUFnZ3JlZ2F0ZUVycm9yJSI6dHlwZW9mIEFnZ3JlZ2F0ZUVycm9yPiJ1Ij9JOkFnZ3JlZ2F0ZUVycm9yLCIlQXJyYXklIjpBcnJheSwiJUFycmF5QnVmZmVyJSI6dHlwZW9mIEFycmF5QnVmZmVyPiJ1Ij9JOkFycmF5QnVmZmVyLCIlQXJyYXlJ'@;
put 'dGVyYXRvclByb3RvdHlwZSUiOl9lJiZUZT9UZShbXVtTeW1ib2wuaXRlcmF0b3JdKCkpOkksIiVBc3luY0Zyb21TeW5jSXRlcmF0b3JQcm90b3R5cGUlIjpJLCIlQXN5bmNGdW5jdGlvbiUiOmIsIiVBc3luY0dlbmVyYXRvciUiOmIsIiVBc3luY0dlbmVyYXRvckZ1bmN0aW9uJSI6YiwiJUFz'@;
put 'eW5jSXRlcmF0b3JQcm90b3R5cGUlIjpiLCIlQXRvbWljcyUiOnR5cGVvZiBBdG9taWNzPiJ1Ij9JOkF0b21pY3MsIiVCaWdJbnQlIjp0eXBlb2YgQmlnSW50PiJ1Ij9JOkJpZ0ludCwiJUJpZ0ludDY0QXJyYXklIjp0eXBlb2YgQmlnSW50NjRBcnJheT4idSI/STpCaWdJbnQ2NEFycmF5LCIl'@;
put 'QmlnVWludDY0QXJyYXklIjp0eXBlb2YgQmlnVWludDY0QXJyYXk+InUiP0k6QmlnVWludDY0QXJyYXksIiVCb29sZWFuJSI6Qm9vbGVhbiwiJURhdGFWaWV3JSI6dHlwZW9mIERhdGFWaWV3PiJ1Ij9JOkRhdGFWaWV3LCIlRGF0ZSUiOkRhdGUsIiVkZWNvZGVVUkklIjpkZWNvZGVVUkksIiVk'@;
put 'ZWNvZGVVUklDb21wb25lbnQlIjpkZWNvZGVVUklDb21wb25lbnQsIiVlbmNvZGVVUkklIjplbmNvZGVVUkksIiVlbmNvZGVVUklDb21wb25lbnQlIjplbmNvZGVVUklDb21wb25lbnQsIiVFcnJvciUiOmcsIiVldmFsJSI6ZXZhbCwiJUV2YWxFcnJvciUiOkIsIiVGbG9hdDE2QXJyYXklIjp0'@;
put 'eXBlb2YgRmxvYXQxNkFycmF5PiJ1Ij9JOkZsb2F0MTZBcnJheSwiJUZsb2F0MzJBcnJheSUiOnR5cGVvZiBGbG9hdDMyQXJyYXk+InUiP0k6RmxvYXQzMkFycmF5LCIlRmxvYXQ2NEFycmF5JSI6dHlwZW9mIEZsb2F0NjRBcnJheT4idSI/STpGbG9hdDY0QXJyYXksIiVGaW5hbGl6YXRpb25S'@;
put 'ZWdpc3RyeSUiOnR5cGVvZiBGaW5hbGl6YXRpb25SZWdpc3RyeT4idSI/STpGaW5hbGl6YXRpb25SZWdpc3RyeSwiJUZ1bmN0aW9uJSI6ZWUsIiVHZW5lcmF0b3JGdW5jdGlvbiUiOmIsIiVJbnQ4QXJyYXklIjp0eXBlb2YgSW50OEFycmF5PiJ1Ij9JOkludDhBcnJheSwiJUludDE2QXJyYXkl'@;
put 'Ijp0eXBlb2YgSW50MTZBcnJheT4idSI/STpJbnQxNkFycmF5LCIlSW50MzJBcnJheSUiOnR5cGVvZiBJbnQzMkFycmF5PiJ1Ij9JOkludDMyQXJyYXksIiVpc0Zpbml0ZSUiOmlzRmluaXRlLCIlaXNOYU4lIjppc05hTiwiJUl0ZXJhdG9yUHJvdG90eXBlJSI6X2UmJlRlP1RlKFRlKFtdW1N5'@;
put 'bWJvbC5pdGVyYXRvcl0oKSkpOkksIiVKU09OJSI6Im9iamVjdCI9PXR5cGVvZiBKU09OP0pTT046SSwiJU1hcCUiOnR5cGVvZiBNYXA+InUiP0k6TWFwLCIlTWFwSXRlcmF0b3JQcm90b3R5cGUlIjp0eXBlb2YgTWFwPiJ1Inx8IV9lfHwhVGU/STpUZSgobmV3IE1hcClbU3ltYm9sLml0ZXJh'@;
put 'dG9yXSgpKSwiJU1hdGglIjpNYXRoLCIlTnVtYmVyJSI6TnVtYmVyLCIlT2JqZWN0JSI6XywiJU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IlIjpuZSwiJXBhcnNlRmxvYXQlIjpwYXJzZUZsb2F0LCIlcGFyc2VJbnQlIjpwYXJzZUludCwiJVByb21pc2UlIjp0eXBlb2YgUHJvbWlz'@;
put 'ZT4idSI/STpQcm9taXNlLCIlUHJveHklIjp0eXBlb2YgUHJveHk+InUiP0k6UHJveHksIiVSYW5nZUVycm9yJSI6dywiJVJlZmVyZW5jZUVycm9yJSI6UCwiJVJlZmxlY3QlIjp0eXBlb2YgUmVmbGVjdD4idSI/STpSZWZsZWN0LCIlUmVnRXhwJSI6UmVnRXhwLCIlU2V0JSI6dHlwZW9mIFNl'@;
put 'dD4idSI/STpTZXQsIiVTZXRJdGVyYXRvclByb3RvdHlwZSUiOnR5cGVvZiBTZXQ+InUifHwhX2V8fCFUZT9JOlRlKChuZXcgU2V0KVtTeW1ib2wuaXRlcmF0b3JdKCkpLCIlU2hhcmVkQXJyYXlCdWZmZXIlIjp0eXBlb2YgU2hhcmVkQXJyYXlCdWZmZXI+InUiP0k6U2hhcmVkQXJyYXlCdWZm'@;
put 'ZXIsIiVTdHJpbmclIjpTdHJpbmcsIiVTdHJpbmdJdGVyYXRvclByb3RvdHlwZSUiOl9lJiZUZT9UZSgiIltTeW1ib2wuaXRlcmF0b3JdKCkpOkksIiVTeW1ib2wlIjpfZT9TeW1ib2w6SSwiJVN5bnRheEVycm9yJSI6RiwiJVRocm93VHlwZUVycm9yJSI6bWUsIiVUeXBlZEFycmF5JSI6eCwi'@;
put 'JVR5cGVFcnJvciUiOk8sIiVVaW50OEFycmF5JSI6dHlwZW9mIFVpbnQ4QXJyYXk+InUiP0k6VWludDhBcnJheSwiJVVpbnQ4Q2xhbXBlZEFycmF5JSI6dHlwZW9mIFVpbnQ4Q2xhbXBlZEFycmF5PiJ1Ij9JOlVpbnQ4Q2xhbXBlZEFycmF5LCIlVWludDE2QXJyYXklIjp0eXBlb2YgVWludDE2'@;
put 'QXJyYXk+InUiP0k6VWludDE2QXJyYXksIiVVaW50MzJBcnJheSUiOnR5cGVvZiBVaW50MzJBcnJheT4idSI/STpVaW50MzJBcnJheSwiJVVSSUVycm9yJSI6eiwiJVdlYWtNYXAlIjp0eXBlb2YgV2Vha01hcD4idSI/STpXZWFrTWFwLCIlV2Vha1JlZiUiOnR5cGVvZiBXZWFrUmVmPiJ1Ij9J'@;
put 'OldlYWtSZWYsIiVXZWFrU2V0JSI6dHlwZW9mIFdlYWtTZXQ+InUiP0k6V2Vha1NldCwiJUZ1bmN0aW9uLnByb3RvdHlwZS5jYWxsJSI6cCwiJUZ1bmN0aW9uLnByb3RvdHlwZS5hcHBseSUiOlYsIiVPYmplY3QuZGVmaW5lUHJvcGVydHklIjppZSwiJU9iamVjdC5nZXRQcm90b3R5cGVPZiUi'@;
put 'OlNlLCIlTWF0aC5hYnMlIjpOLCIlTWF0aC5mbG9vciUiOkwsIiVNYXRoLm1heCUiOkssIiVNYXRoLm1pbiUiOlUsIiVNYXRoLnBvdyUiOlcsIiVNYXRoLnJvdW5kJSI6WSwiJU1hdGguc2lnbiUiOnEsIiVSZWZsZWN0LmdldFByb3RvdHlwZU9mJSI6amV9O2lmKFRlKXRyeXtudWxsLmVycm9y'@;
put 'fWNhdGNoKHZlKXt2YXIgVD1UZShUZSh2ZSkpO0NbIiVFcnJvci5wcm90b3R5cGUlIl09VH12YXIgSD1mdW5jdGlvbiB2ZShYZSl7dmFyIHplO2lmKCIlQXN5bmNGdW5jdGlvbiUiPT09WGUpemU9SigiYXN5bmMgZnVuY3Rpb24gKCkge30iKTtlbHNlIGlmKCIlR2VuZXJhdG9yRnVuY3Rpb24l'@;
put 'Ij09PVhlKXplPUooImZ1bmN0aW9uKiAoKSB7fSIpO2Vsc2UgaWYoIiVBc3luY0dlbmVyYXRvckZ1bmN0aW9uJSI9PT1YZSl6ZT1KKCJhc3luYyBmdW5jdGlvbiogKCkge30iKTtlbHNlIGlmKCIlQXN5bmNHZW5lcmF0b3IlIj09PVhlKXt2YXIgRGU9dmUoIiVBc3luY0dlbmVyYXRvckZ1bmN0'@;
put 'aW9uJSIpO0RlJiYoemU9RGUucHJvdG90eXBlKX1lbHNlIGlmKCIlQXN5bmNJdGVyYXRvclByb3RvdHlwZSUiPT09WGUpe3ZhciBGZT12ZSgiJUFzeW5jR2VuZXJhdG9yJSIpO0ZlJiZUZSYmKHplPVRlKEZlLnByb3RvdHlwZSkpfXJldHVybiBDW1hlXT16ZSx6ZX0saj17X19wcm90b19fOm51'@;
put 'bGwsIiVBcnJheUJ1ZmZlclByb3RvdHlwZSUiOlsiQXJyYXlCdWZmZXIiLCJwcm90b3R5cGUiXSwiJUFycmF5UHJvdG90eXBlJSI6WyJBcnJheSIsInByb3RvdHlwZSJdLCIlQXJyYXlQcm90b19lbnRyaWVzJSI6WyJBcnJheSIsInByb3RvdHlwZSIsImVudHJpZXMiXSwiJUFycmF5UHJvdG9f'@;
put 'Zm9yRWFjaCUiOlsiQXJyYXkiLCJwcm90b3R5cGUiLCJmb3JFYWNoIl0sIiVBcnJheVByb3RvX2tleXMlIjpbIkFycmF5IiwicHJvdG90eXBlIiwia2V5cyJdLCIlQXJyYXlQcm90b192YWx1ZXMlIjpbIkFycmF5IiwicHJvdG90eXBlIiwidmFsdWVzIl0sIiVBc3luY0Z1bmN0aW9uUHJvdG90'@;
put 'eXBlJSI6WyJBc3luY0Z1bmN0aW9uIiwicHJvdG90eXBlIl0sIiVBc3luY0dlbmVyYXRvciUiOlsiQXN5bmNHZW5lcmF0b3JGdW5jdGlvbiIsInByb3RvdHlwZSJdLCIlQXN5bmNHZW5lcmF0b3JQcm90b3R5cGUlIjpbIkFzeW5jR2VuZXJhdG9yRnVuY3Rpb24iLCJwcm90b3R5cGUiLCJwcm90'@;
put 'b3R5cGUiXSwiJUJvb2xlYW5Qcm90b3R5cGUlIjpbIkJvb2xlYW4iLCJwcm90b3R5cGUiXSwiJURhdGFWaWV3UHJvdG90eXBlJSI6WyJEYXRhVmlldyIsInByb3RvdHlwZSJdLCIlRGF0ZVByb3RvdHlwZSUiOlsiRGF0ZSIsInByb3RvdHlwZSJdLCIlRXJyb3JQcm90b3R5cGUlIjpbIkVycm9y'@;
put 'IiwicHJvdG90eXBlIl0sIiVFdmFsRXJyb3JQcm90b3R5cGUlIjpbIkV2YWxFcnJvciIsInByb3RvdHlwZSJdLCIlRmxvYXQzMkFycmF5UHJvdG90eXBlJSI6WyJGbG9hdDMyQXJyYXkiLCJwcm90b3R5cGUiXSwiJUZsb2F0NjRBcnJheVByb3RvdHlwZSUiOlsiRmxvYXQ2NEFycmF5IiwicHJv'@;
put 'dG90eXBlIl0sIiVGdW5jdGlvblByb3RvdHlwZSUiOlsiRnVuY3Rpb24iLCJwcm90b3R5cGUiXSwiJUdlbmVyYXRvciUiOlsiR2VuZXJhdG9yRnVuY3Rpb24iLCJwcm90b3R5cGUiXSwiJUdlbmVyYXRvclByb3RvdHlwZSUiOlsiR2VuZXJhdG9yRnVuY3Rpb24iLCJwcm90b3R5cGUiLCJwcm90'@;
put 'b3R5cGUiXSwiJUludDhBcnJheVByb3RvdHlwZSUiOlsiSW50OEFycmF5IiwicHJvdG90eXBlIl0sIiVJbnQxNkFycmF5UHJvdG90eXBlJSI6WyJJbnQxNkFycmF5IiwicHJvdG90eXBlIl0sIiVJbnQzMkFycmF5UHJvdG90eXBlJSI6WyJJbnQzMkFycmF5IiwicHJvdG90eXBlIl0sIiVKU09O'@;
put 'UGFyc2UlIjpbIkpTT04iLCJwYXJzZSJdLCIlSlNPTlN0cmluZ2lmeSUiOlsiSlNPTiIsInN0cmluZ2lmeSJdLCIlTWFwUHJvdG90eXBlJSI6WyJNYXAiLCJwcm90b3R5cGUiXSwiJU51bWJlclByb3RvdHlwZSUiOlsiTnVtYmVyIiwicHJvdG90eXBlIl0sIiVPYmplY3RQcm90b3R5cGUlIjpb'@;
put 'Ik9iamVjdCIsInByb3RvdHlwZSJdLCIlT2JqUHJvdG9fdG9TdHJpbmclIjpbIk9iamVjdCIsInByb3RvdHlwZSIsInRvU3RyaW5nIl0sIiVPYmpQcm90b192YWx1ZU9mJSI6WyJPYmplY3QiLCJwcm90b3R5cGUiLCJ2YWx1ZU9mIl0sIiVQcm9taXNlUHJvdG90eXBlJSI6WyJQcm9taXNlIiwi'@;
put 'cHJvdG90eXBlIl0sIiVQcm9taXNlUHJvdG9fdGhlbiUiOlsiUHJvbWlzZSIsInByb3RvdHlwZSIsInRoZW4iXSwiJVByb21pc2VfYWxsJSI6WyJQcm9taXNlIiwiYWxsIl0sIiVQcm9taXNlX3JlamVjdCUiOlsiUHJvbWlzZSIsInJlamVjdCJdLCIlUHJvbWlzZV9yZXNvbHZlJSI6WyJQcm9t'@;
put 'aXNlIiwicmVzb2x2ZSJdLCIlUmFuZ2VFcnJvclByb3RvdHlwZSUiOlsiUmFuZ2VFcnJvciIsInByb3RvdHlwZSJdLCIlUmVmZXJlbmNlRXJyb3JQcm90b3R5cGUlIjpbIlJlZmVyZW5jZUVycm9yIiwicHJvdG90eXBlIl0sIiVSZWdFeHBQcm90b3R5cGUlIjpbIlJlZ0V4cCIsInByb3RvdHlw'@;
put 'ZSJdLCIlU2V0UHJvdG90eXBlJSI6WyJTZXQiLCJwcm90b3R5cGUiXSwiJVNoYXJlZEFycmF5QnVmZmVyUHJvdG90eXBlJSI6WyJTaGFyZWRBcnJheUJ1ZmZlciIsInByb3RvdHlwZSJdLCIlU3RyaW5nUHJvdG90eXBlJSI6WyJTdHJpbmciLCJwcm90b3R5cGUiXSwiJVN5bWJvbFByb3RvdHlw'@;
put 'ZSUiOlsiU3ltYm9sIiwicHJvdG90eXBlIl0sIiVTeW50YXhFcnJvclByb3RvdHlwZSUiOlsiU3ludGF4RXJyb3IiLCJwcm90b3R5cGUiXSwiJVR5cGVkQXJyYXlQcm90b3R5cGUlIjpbIlR5cGVkQXJyYXkiLCJwcm90b3R5cGUiXSwiJVR5cGVFcnJvclByb3RvdHlwZSUiOlsiVHlwZUVycm9y'@;
put 'IiwicHJvdG90eXBlIl0sIiVVaW50OEFycmF5UHJvdG90eXBlJSI6WyJVaW50OEFycmF5IiwicHJvdG90eXBlIl0sIiVVaW50OENsYW1wZWRBcnJheVByb3RvdHlwZSUiOlsiVWludDhDbGFtcGVkQXJyYXkiLCJwcm90b3R5cGUiXSwiJVVpbnQxNkFycmF5UHJvdG90eXBlJSI6WyJVaW50MTZB'@;
put 'cnJheSIsInByb3RvdHlwZSJdLCIlVWludDMyQXJyYXlQcm90b3R5cGUlIjpbIlVpbnQzMkFycmF5IiwicHJvdG90eXBlIl0sIiVVUklFcnJvclByb3RvdHlwZSUiOlsiVVJJRXJyb3IiLCJwcm90b3R5cGUiXSwiJVdlYWtNYXBQcm90b3R5cGUlIjpbIldlYWtNYXAiLCJwcm90b3R5cGUiXSwi'@;
put 'JVdlYWtTZXRQcm90b3R5cGUlIjpbIldlYWtTZXQiLCJwcm90b3R5cGUiXX0sRT15KDg2MTIpLG09eSg4ODI0KSxBPUUuY2FsbChwLEFycmF5LnByb3RvdHlwZS5jb25jYXQpLGFlPUUuY2FsbChWLEFycmF5LnByb3RvdHlwZS5zcGxpY2UpLHRlPUUuY2FsbChwLFN0cmluZy5wcm90b3R5cGUu'@;
put 'cmVwbGFjZSksc2U9RS5jYWxsKHAsU3RyaW5nLnByb3RvdHlwZS5zbGljZSksd2U9RS5jYWxsKHAsUmVnRXhwLnByb3RvdHlwZS5leGVjKSxVZT0vW14lLltcXV0rfFxbKD86KC0/XGQrKD86XC5cZCspPyl8KFsiJ10pKCg/Oig/IVwyKVteXFxdfFxcLikqPylcMilcXXwoPz0oPzpcLnxcW1xd'@;
put 'KSg/OlwufFxbXF18JSQpKS9nLEplPS9cXChcXCk/L2cseGU9ZnVuY3Rpb24oWGUsemUpe3ZhciBGZSxEZT1YZTtpZihtKGosRGUpJiYoRGU9IiUiKyhGZT1qW0RlXSlbMF0rIiUiKSxtKEMsRGUpKXt2YXIgT2U9Q1tEZV07aWYoT2U9PT1iJiYoT2U9SChEZSkpLHR5cGVvZiBPZT4idSImJiF6'@;
put 'ZSl0aHJvdyBuZXcgTygiaW50cmluc2ljICIrWGUrIiBleGlzdHMsIGJ1dCBpcyBub3QgYXZhaWxhYmxlLiBQbGVhc2UgZmlsZSBhbiBpc3N1ZSEiKTtyZXR1cm57YWxpYXM6RmUsbmFtZTpEZSx2YWx1ZTpPZX19dGhyb3cgbmV3IEYoImludHJpbnNpYyAiK1hlKyIgZG9lcyBub3QgZXhpc3Qh'@;
put 'Iil9O3VlLmV4cG9ydHM9ZnVuY3Rpb24oWGUsemUpe2lmKCJzdHJpbmciIT10eXBlb2YgWGV8fDA9PT1YZS5sZW5ndGgpdGhyb3cgbmV3IE8oImludHJpbnNpYyBuYW1lIG11c3QgYmUgYSBub24tZW1wdHkgc3RyaW5nIik7aWYoYXJndW1lbnRzLmxlbmd0aD4xJiYiYm9vbGVhbiIhPXR5cGVv'@;
put 'ZiB6ZSl0aHJvdyBuZXcgTygnImFsbG93TWlzc2luZyIgYXJndW1lbnQgbXVzdCBiZSBhIGJvb2xlYW4nKTtpZihudWxsPT09d2UoL14lP1teJV0qJT8kLyxYZSkpdGhyb3cgbmV3IEYoImAlYCBtYXkgbm90IGJlIHByZXNlbnQgYW55d2hlcmUgYnV0IGF0IHRoZSBiZWdpbm5pbmcgYW5kIGVu'@;
put 'ZCBvZiB0aGUgaW50cmluc2ljIG5hbWUiKTt2YXIgRGU9ZnVuY3Rpb24oWGUpe3ZhciB6ZT1zZShYZSwwLDEpLERlPXNlKFhlLC0xKTtpZigiJSI9PT16ZSYmIiUiIT09RGUpdGhyb3cgbmV3IEYoImludmFsaWQgaW50cmluc2ljIHN5bnRheCwgZXhwZWN0ZWQgY2xvc2luZyBgJWAiKTtpZigi'@;
put 'JSI9PT1EZSYmIiUiIT09emUpdGhyb3cgbmV3IEYoImludmFsaWQgaW50cmluc2ljIHN5bnRheCwgZXhwZWN0ZWQgb3BlbmluZyBgJWAiKTt2YXIgRmU9W107cmV0dXJuIHRlKFhlLFVlLGZ1bmN0aW9uKE9lLEllLFZlLGtlKXtGZVtGZS5sZW5ndGhdPVZlP3RlKGtlLEplLCIkMSIpOkllfHxP'@;
put 'ZX0pLEZlfShYZSksRmU9RGUubGVuZ3RoPjA/RGVbMF06IiIsT2U9eGUoIiUiK0ZlKyIlIix6ZSksSWU9T2UubmFtZSxWZT1PZS52YWx1ZSxrZT0hMSxBZT1PZS5hbGlhcztBZSYmKEZlPUFlWzBdLGFlKERlLEEoWzAsMV0sQWUpKSk7Zm9yKHZhciBfdD0xLG50PSEwO190PERlLmxlbmd0aDtf'@;
put 'dCs9MSl7dmFyIFFlPURlW190XSx1bj1zZShRZSwwLDEpLHl0PXNlKFFlLC0xKTtpZigoJyInPT09dW58fCInIj09PXVufHwiYCI9PT11bnx8JyInPT09eXR8fCInIj09PXl0fHwiYCI9PT15dCkmJnVuIT09eXQpdGhyb3cgbmV3IEYoInByb3BlcnR5IG5hbWVzIHdpdGggcXVvdGVzIG11c3Qg'@;
put 'aGF2ZSBtYXRjaGluZyBxdW90ZXMiKTtpZigoImNvbnN0cnVjdG9yIj09PVFlfHwhbnQpJiYoa2U9ITApLG0oQyxJZT0iJSIrKEZlKz0iLiIrUWUpKyIlIikpVmU9Q1tJZV07ZWxzZSBpZihudWxsIT1WZSl7aWYoIShRZSBpbiBWZSkpe2lmKCF6ZSl0aHJvdyBuZXcgTygiYmFzZSBpbnRyaW5z'@;
put 'aWMgZm9yICIrWGUrIiBleGlzdHMsIGJ1dCB0aGUgcHJvcGVydHkgaXMgbm90IGF2YWlsYWJsZS4iKTtyZXR1cm59aWYobmUmJl90KzE+PURlLmxlbmd0aCl7dmFyIE10PW5lKFZlLFFlKTtWZT0obnQ9ISFNdCkmJiJnZXQiaW4gTXQmJiEoIm9yaWdpbmFsVmFsdWUiaW4gTXQuZ2V0KT9NdC5n'@;
put 'ZXQ6VmVbUWVdfWVsc2UgbnQ9bShWZSxRZSksVmU9VmVbUWVdO250JiYha2UmJihDW0llXT1WZSl9fXJldHVybiBWZX19LDg4OTk6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg4ODkyKTt1ZS5leHBvcnRzPUkuZ2V0UHJvdG90eXBlT2Z8fG51bGx9LDQ0Mzp1ZT0+eyJ1c2Ugc3Ry'@;
put 'aWN0Ijt1ZS5leHBvcnRzPXR5cGVvZiBSZWZsZWN0PCJ1IiYmUmVmbGVjdC5nZXRQcm90b3R5cGVPZnx8bnVsbH0sMTYxODoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDQ0MyksXz15KDg4OTkpLGc9eSg2NTA0KTt1ZS5leHBvcnRzPUk/ZnVuY3Rpb24odyl7cmV0dXJuIEkodyl9'@;
put 'Ol8/ZnVuY3Rpb24odyl7aWYoIXd8fCJvYmplY3QiIT10eXBlb2YgdyYmImZ1bmN0aW9uIiE9dHlwZW9mIHcpdGhyb3cgbmV3IFR5cGVFcnJvcigiZ2V0UHJvdG86IG5vdCBhbiBvYmplY3QiKTtyZXR1cm4gXyh3KX06Zz9mdW5jdGlvbih3KXtyZXR1cm4gZyh3KX06bnVsbH0sNjkwOnVlPT57'@;
put 'InVzZSBzdHJpY3QiO3VlLmV4cG9ydHM9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcn0sNzI5NjoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDY5MCk7aWYoSSl0cnl7SShbXSwibGVuZ3RoIil9Y2F0Y2h7ST1udWxsfXVlLmV4cG9ydHM9SX0sNjQ1ODp1ZT0+eyJ1c2Ug'@;
put 'c3RyaWN0Ijt1ZS5leHBvcnRzPWZ1bmN0aW9uIHkoSSl7aWYobnVsbD09PUl8fCJvYmplY3QiIT10eXBlb2YgSSlyZXR1cm4gSTtpZihJIGluc3RhbmNlb2YgT2JqZWN0KXZhciBfPXtfX3Byb3RvX186WChJKX07ZWxzZSBfPU9iamVjdC5jcmVhdGUobnVsbCk7cmV0dXJuIE9iamVjdC5nZXRP'@;
put 'd25Qcm9wZXJ0eU5hbWVzKEkpLmZvckVhY2goZnVuY3Rpb24oZyl7T2JqZWN0LmRlZmluZVByb3BlcnR5KF8sZyxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEksZykpfSksX307dmFyIFg9T2JqZWN0LmdldFByb3RvdHlwZU9mfHxmdW5jdGlvbihJKXtyZXR1cm4gSS5fX3Byb3Rv'@;
put 'X199fSw3NzoodWUsWCx5KT0+e3ZhciBPLHosST15KDQxNTUpLF89eSg1MTA4KSxnPXkoNTQ0MyksQj15KDIxNjEpLHc9eSg4NTIwKSxQPXkoNjQ1OCksRj15KDk1MzkpO2Z1bmN0aW9uIEwobmUsaWUpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShuZSxPLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4g'@;
put 'aWV9fSl9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbC5mb3I/KE89U3ltYm9sLmZvcigiZ3JhY2VmdWwtZnMucXVldWUiKSx6PVN5bWJvbC5mb3IoImdyYWNlZnVsLWZzLnByZXZpb3VzIikpOihPPSJfX19ncmFjZWZ1bC1mcy5xdWV1ZSIsej0i'@;
put 'X19fZ3JhY2VmdWwtZnMucHJldmlvdXMiKTt2YXIgcSxLPWZ1bmN0aW9uIE4oKXt9O2Z1bmN0aW9uIFcobmUpe0IobmUpLG5lLmdyYWNlZnVsaWZ5PVcsbmUuY3JlYXRlUmVhZFN0cmVhbT1mdW5jdGlvbiBzZShvdCx4ZSl7cmV0dXJuIG5ldyBuZS5SZWFkU3RyZWFtKG90LHhlKX0sbmUuY3Jl'@;
put 'YXRlV3JpdGVTdHJlYW09ZnVuY3Rpb24gd2Uob3QseGUpe3JldHVybiBuZXcgbmUuV3JpdGVTdHJlYW0ob3QseGUpfTt2YXIgaWU9bmUucmVhZEZpbGU7bmUucmVhZEZpbGU9ZnVuY3Rpb24gbGUob3QseGUsdmUpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB4ZSYmKHZlPXhlLHhlPW51bGwp'@;
put 'LGZ1bmN0aW9uIFhlKHplLERlLEZlLE9lKXtyZXR1cm4gaWUoemUsRGUsZnVuY3Rpb24oSWUpeyFJZXx8IkVNRklMRSIhPT1JZS5jb2RlJiYiRU5GSUxFIiE9PUllLmNvZGU/ImZ1bmN0aW9uIj09dHlwZW9mIEZlJiZGZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk6WShbWGUsW3plLERlLEZlXSxJ'@;
put 'ZSxPZXx8RGF0ZS5ub3coKSxEYXRlLm5vdygpXSl9KX0ob3QseGUsdmUpfTt2YXIgbWU9bmUud3JpdGVGaWxlO25lLndyaXRlRmlsZT1mdW5jdGlvbiBfZShvdCx4ZSx2ZSxYZSl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHZlJiYoWGU9dmUsdmU9bnVsbCksZnVuY3Rpb24gemUoRGUsRmUs'@;
put 'T2UsSWUsVmUpe3JldHVybiBtZShEZSxGZSxPZSxmdW5jdGlvbihrZSl7IWtlfHwiRU1GSUxFIiE9PWtlLmNvZGUmJiJFTkZJTEUiIT09a2UuY29kZT8iZnVuY3Rpb24iPT10eXBlb2YgSWUmJkllLmFwcGx5KHRoaXMsYXJndW1lbnRzKTpZKFt6ZSxbRGUsRmUsT2UsSWVdLGtlLFZlfHxEYXRl'@;
put 'Lm5vdygpLERhdGUubm93KCldKX0pfShvdCx4ZSx2ZSxYZSl9O3ZhciBUZT1uZS5hcHBlbmRGaWxlO1RlJiYobmUuYXBwZW5kRmlsZT1mdW5jdGlvbiBTZShvdCx4ZSx2ZSxYZSl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHZlJiYoWGU9dmUsdmU9bnVsbCksZnVuY3Rpb24gemUoRGUsRmUs'@;
put 'T2UsSWUsVmUpe3JldHVybiBUZShEZSxGZSxPZSxmdW5jdGlvbihrZSl7IWtlfHwiRU1GSUxFIiE9PWtlLmNvZGUmJiJFTkZJTEUiIT09a2UuY29kZT8iZnVuY3Rpb24iPT10eXBlb2YgSWUmJkllLmFwcGx5KHRoaXMsYXJndW1lbnRzKTpZKFt6ZSxbRGUsRmUsT2UsSWVdLGtlLFZlfHxEYXRl'@;
put 'Lm5vdygpLERhdGUubm93KCldKX0pfShvdCx4ZSx2ZSxYZSl9KTt2YXIgamU9bmUuY29weUZpbGU7amUmJihuZS5jb3B5RmlsZT1mdW5jdGlvbiBWKG90LHhlLHZlLFhlKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgdmUmJihYZT12ZSx2ZT0wKSxmdW5jdGlvbiB6ZShEZSxGZSxPZSxJZSxW'@;
put 'ZSl7cmV0dXJuIGplKERlLEZlLE9lLGZ1bmN0aW9uKGtlKXsha2V8fCJFTUZJTEUiIT09a2UuY29kZSYmIkVORklMRSIhPT1rZS5jb2RlPyJmdW5jdGlvbiI9PXR5cGVvZiBJZSYmSWUuYXBwbHkodGhpcyxhcmd1bWVudHMpOlkoW3plLFtEZSxGZSxPZSxJZV0sa2UsVmV8fERhdGUubm93KCks'@;
put 'RGF0ZS5ub3coKV0pfSl9KG90LHhlLHZlLFhlKX0pO3ZhciBwPW5lLnJlYWRkaXI7bmUucmVhZGRpcj1mdW5jdGlvbiB4KG90LHhlLHZlKXsiZnVuY3Rpb24iPT10eXBlb2YgeGUmJih2ZT14ZSx4ZT1udWxsKTt2YXIgWGU9Yi50ZXN0KEkudmVyc2lvbik/ZnVuY3Rpb24oRmUsT2UsSWUsVmUp'@;
put 'e3JldHVybiBwKEZlLHplKEZlLE9lLEllLFZlKSl9OmZ1bmN0aW9uKEZlLE9lLEllLFZlKXtyZXR1cm4gcChGZSxPZSx6ZShGZSxPZSxJZSxWZSkpfTtyZXR1cm4gWGUob3QseGUsdmUpO2Z1bmN0aW9uIHplKERlLEZlLE9lLEllKXtyZXR1cm4gZnVuY3Rpb24oVmUsa2UpeyFWZXx8IkVNRklM'@;
put 'RSIhPT1WZS5jb2RlJiYiRU5GSUxFIiE9PVZlLmNvZGU/KGtlJiZrZS5zb3J0JiZrZS5zb3J0KCksImZ1bmN0aW9uIj09dHlwZW9mIE9lJiZPZS5jYWxsKHRoaXMsVmUsa2UpKTpZKFtYZSxbRGUsRmUsT2VdLFZlLEllfHxEYXRlLm5vdygpLERhdGUubm93KCldKX19fTt2YXIgYj0vXnZbMC01'@;
put 'XVwuLztpZigidjAuOCI9PT1JLnZlcnNpb24uc3Vic3RyKDAsNCkpe3ZhciBDPXcobmUpO209Qy5SZWFkU3RyZWFtLGFlPUMuV3JpdGVTdHJlYW19dmFyIFQ9bmUuUmVhZFN0cmVhbTtUJiYobS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShULnByb3RvdHlwZSksbS5wcm90b3R5cGUub3Blbj1m'@;
put 'dW5jdGlvbiBBKCl7dmFyIG90PXRoaXM7SmUob3QucGF0aCxvdC5mbGFncyxvdC5tb2RlLGZ1bmN0aW9uKHhlLHZlKXt4ZT8ob3QuYXV0b0Nsb3NlJiZvdC5kZXN0cm95KCksb3QuZW1pdCgiZXJyb3IiLHhlKSk6KG90LmZkPXZlLG90LmVtaXQoIm9wZW4iLHZlKSxvdC5yZWFkKCkpfSl9KTt2'@;
put 'YXIgSD1uZS5Xcml0ZVN0cmVhbTtIJiYoYWUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoSC5wcm90b3R5cGUpLGFlLnByb3RvdHlwZS5vcGVuPWZ1bmN0aW9uIHRlKCl7dmFyIG90PXRoaXM7SmUob3QucGF0aCxvdC5mbGFncyxvdC5tb2RlLGZ1bmN0aW9uKHhlLHZlKXt4ZT8ob3QuZGVzdHJv'@;
put 'eSgpLG90LmVtaXQoImVycm9yIix4ZSkpOihvdC5mZD12ZSxvdC5lbWl0KCJvcGVuIix2ZSkpfSl9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkobmUsIlJlYWRTdHJlYW0iLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbX0sc2V0OmZ1bmN0aW9uKG90KXttPW90fSxlbnVtZXJhYmxlOiEwLGNvbmZp'@;
put 'Z3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShuZSwiV3JpdGVTdHJlYW0iLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gYWV9LHNldDpmdW5jdGlvbihvdCl7YWU9b3R9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSk7dmFyIGo9bTtPYmplY3QuZGVmaW5lUHJvcGVydHko'@;
put 'bmUsIkZpbGVSZWFkU3RyZWFtIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGp9LHNldDpmdW5jdGlvbihvdCl7aj1vdH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KTt2YXIgRT1hZTtmdW5jdGlvbiBtKG90LHhlKXtyZXR1cm4gdGhpcyBpbnN0YW5jZW9mIG0/KFQuYXBwbHkodGhp'@;
put 'cyxhcmd1bWVudHMpLHRoaXMpOm0uYXBwbHkoT2JqZWN0LmNyZWF0ZShtLnByb3RvdHlwZSksYXJndW1lbnRzKX1mdW5jdGlvbiBhZShvdCx4ZSl7cmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBhZT8oSC5hcHBseSh0aGlzLGFyZ3VtZW50cyksdGhpcyk6YWUuYXBwbHkoT2JqZWN0LmNyZWF0ZShh'@;
put 'ZS5wcm90b3R5cGUpLGFyZ3VtZW50cyl9T2JqZWN0LmRlZmluZVByb3BlcnR5KG5lLCJGaWxlV3JpdGVTdHJlYW0iLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gRX0sc2V0OmZ1bmN0aW9uKG90KXtFPW90fSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pO3ZhciBVZT1uZS5vcGVuO2Z1'@;
put 'bmN0aW9uIEplKG90LHhlLHZlLFhlKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgdmUmJihYZT12ZSx2ZT1udWxsKSxmdW5jdGlvbiB6ZShEZSxGZSxPZSxJZSxWZSl7cmV0dXJuIFVlKERlLEZlLE9lLGZ1bmN0aW9uKGtlLEFlKXsha2V8fCJFTUZJTEUiIT09a2UuY29kZSYmIkVORklMRSIh'@;
put 'PT1rZS5jb2RlPyJmdW5jdGlvbiI9PXR5cGVvZiBJZSYmSWUuYXBwbHkodGhpcyxhcmd1bWVudHMpOlkoW3plLFtEZSxGZSxPZSxJZV0sa2UsVmV8fERhdGUubm93KCksRGF0ZS5ub3coKV0pfSl9KG90LHhlLHZlLFhlKX1yZXR1cm4gbmUub3Blbj1KZSxuZX1mdW5jdGlvbiBZKG5lKXtLKCJF'@;
put 'TlFVRVVFIixuZVswXS5uYW1lLG5lWzFdKSxnW09dLnB1c2gobmUpLEooKX1mdW5jdGlvbiBlZSgpe2Zvcih2YXIgbmU9RGF0ZS5ub3coKSxpZT0wO2llPGdbT10ubGVuZ3RoOysraWUpZ1tPXVtpZV0ubGVuZ3RoPjImJihnW09dW2llXVszXT1uZSxnW09dW2llXVs0XT1uZSk7SigpfWZ1bmN0'@;
put 'aW9uIEooKXtpZihjbGVhclRpbWVvdXQocSkscT12b2lkIDAsMCE9PWdbT10ubGVuZ3RoKXt2YXIgbmU9Z1tPXS5zaGlmdCgpLGllPW5lWzBdLGxlPW5lWzFdLG1lPW5lWzJdLF9lPW5lWzNdLFRlPW5lWzRdO2lmKHZvaWQgMD09PV9lKUsoIlJFVFJZIixpZS5uYW1lLGxlKSxpZS5hcHBseShu'@;
put 'dWxsLGxlKTtlbHNlIGlmKERhdGUubm93KCktX2U+PTZlNCl7SygiVElNRU9VVCIsaWUubmFtZSxsZSk7dmFyIFNlPWxlLnBvcCgpOyJmdW5jdGlvbiI9PXR5cGVvZiBTZSYmU2UuY2FsbChudWxsLG1lKX1lbHNle3ZhciBqZT1EYXRlLm5vdygpLVRlLFY9TWF0aC5tYXgoVGUtX2UsMSk7amU+'@;
put 'PU1hdGgubWluKDEuMipWLDEwMCk/KEsoIlJFVFJZIixpZS5uYW1lLGxlKSxpZS5hcHBseShudWxsLGxlLmNvbmNhdChbX2VdKSkpOmdbT10ucHVzaChuZSl9dm9pZCAwPT09cSYmKHE9c2V0VGltZW91dChKLDApKX19Ri5kZWJ1Z2xvZz9LPUYuZGVidWdsb2coImdmczQiKTovXGJnZnM0XGIv'@;
put 'aS50ZXN0KEkuZW52Lk5PREVfREVCVUd8fCIiKSYmKEs9ZnVuY3Rpb24oKXt2YXIgbmU9Ri5mb3JtYXQuYXBwbHkoRixhcmd1bWVudHMpO25lPSJHRlM0OiAiK25lLnNwbGl0KC9cbi8pLmpvaW4oIlxuR0ZTNDogIiksXy5lcnJvcihuZSl9KSxnW09dfHwoTChnLHkuZ1tPXXx8W10pLGcuY2xv'@;
put 'c2U9ZnVuY3Rpb24obmUpe2Z1bmN0aW9uIGllKGxlLG1lKXtyZXR1cm4gbmUuY2FsbChnLGxlLGZ1bmN0aW9uKF9lKXtfZXx8ZWUoKSwiZnVuY3Rpb24iPT10eXBlb2YgbWUmJm1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pfXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoaWUseix7dmFs'@;
put 'dWU6bmV9KSxpZX0oZy5jbG9zZSksZy5jbG9zZVN5bmM9ZnVuY3Rpb24obmUpe2Z1bmN0aW9uIGllKGxlKXtuZS5hcHBseShnLGFyZ3VtZW50cyksZWUoKX1yZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGllLHose3ZhbHVlOm5lfSksaWV9KGcuY2xvc2VTeW5jKSwvXGJnZnM0XGIvaS50'@;
put 'ZXN0KEkuZW52Lk5PREVfREVCVUd8fCIiKSYmSS5vbigiZXhpdCIsZnVuY3Rpb24oKXtLKGdbT10pLHkoOTI4MikuZXF1YWwoZ1tPXS5sZW5ndGgsMCl9KSkseS5nW09dfHxMKHkuZyxnW09dKSx1ZS5leHBvcnRzPVcoUChnKSksSS5lbnYuVEVTVF9HUkFDRUZVTF9GU19HTE9CQUxfUEFUQ0gm'@;
put 'JiFnLl9fcGF0Y2hlZCYmKHVlLmV4cG9ydHM9VyhnKSxnLl9fcGF0Y2hlZD0hMCl9LDg1MjA6KHVlLFgseSk9Pnt2YXIgST15KDQxNTUpLF89eSgyODMwKS5TdHJlYW07dWUuZXhwb3J0cz1mdW5jdGlvbiBnKEIpe3JldHVybntSZWFkU3RyZWFtOmZ1bmN0aW9uIHcoRixPKXtpZighKHRoaXMg'@;
put 'aW5zdGFuY2VvZiB3KSlyZXR1cm4gbmV3IHcoRixPKTtfLmNhbGwodGhpcyk7dmFyIHo9dGhpczt0aGlzLnBhdGg9Rix0aGlzLmZkPW51bGwsdGhpcy5yZWFkYWJsZT0hMCx0aGlzLnBhdXNlZD0hMSx0aGlzLmZsYWdzPSJyIix0aGlzLm1vZGU9NDM4LHRoaXMuYnVmZmVyU2l6ZT02NTUzNixP'@;
put 'PU98fHt9O2Zvcih2YXIgTj1PYmplY3Qua2V5cyhPKSxMPTAsSz1OLmxlbmd0aDtMPEs7TCsrKXt2YXIgVT1OW0xdO3RoaXNbVV09T1tVXX1pZih0aGlzLmVuY29kaW5nJiZ0aGlzLnNldEVuY29kaW5nKHRoaXMuZW5jb2RpbmcpLHZvaWQgMCE9PXRoaXMuc3RhcnQpe2lmKCJudW1iZXIiIT10'@;
put 'eXBlb2YgdGhpcy5zdGFydCl0aHJvdyBUeXBlRXJyb3IoInN0YXJ0IG11c3QgYmUgYSBOdW1iZXIiKTtpZih2b2lkIDA9PT10aGlzLmVuZCl0aGlzLmVuZD0xLzA7ZWxzZSBpZigibnVtYmVyIiE9dHlwZW9mIHRoaXMuZW5kKXRocm93IFR5cGVFcnJvcigiZW5kIG11c3QgYmUgYSBOdW1iZXIi'@;
put 'KTtpZih0aGlzLnN0YXJ0PnRoaXMuZW5kKXRocm93IG5ldyBFcnJvcigic3RhcnQgbXVzdCBiZSA8PSBlbmQiKTt0aGlzLnBvcz10aGlzLnN0YXJ0fW51bGw9PT10aGlzLmZkP0Iub3Blbih0aGlzLnBhdGgsdGhpcy5mbGFncyx0aGlzLm1vZGUsZnVuY3Rpb24oVyxZKXtpZihXKXJldHVybiB6'@;
put 'LmVtaXQoImVycm9yIixXKSx2b2lkKHoucmVhZGFibGU9ITEpO3ouZmQ9WSx6LmVtaXQoIm9wZW4iLFkpLHouX3JlYWQoKX0pOkkubmV4dFRpY2soZnVuY3Rpb24oKXt6Ll9yZWFkKCl9KX0sV3JpdGVTdHJlYW06ZnVuY3Rpb24gUChGLE8pe2lmKCEodGhpcyBpbnN0YW5jZW9mIFApKXJldHVy'@;
put 'biBuZXcgUChGLE8pO18uY2FsbCh0aGlzKSx0aGlzLnBhdGg9Rix0aGlzLmZkPW51bGwsdGhpcy53cml0YWJsZT0hMCx0aGlzLmZsYWdzPSJ3Iix0aGlzLmVuY29kaW5nPSJiaW5hcnkiLHRoaXMubW9kZT00MzgsdGhpcy5ieXRlc1dyaXR0ZW49MCxPPU98fHt9O2Zvcih2YXIgej1PYmplY3Qu'@;
put 'a2V5cyhPKSxOPTAsTD16Lmxlbmd0aDtOPEw7TisrKXt2YXIgSz16W05dO3RoaXNbS109T1tLXX1pZih2b2lkIDAhPT10aGlzLnN0YXJ0KXtpZigibnVtYmVyIiE9dHlwZW9mIHRoaXMuc3RhcnQpdGhyb3cgVHlwZUVycm9yKCJzdGFydCBtdXN0IGJlIGEgTnVtYmVyIik7aWYodGhpcy5zdGFy'@;
put 'dDwwKXRocm93IG5ldyBFcnJvcigic3RhcnQgbXVzdCBiZSA+PSB6ZXJvIik7dGhpcy5wb3M9dGhpcy5zdGFydH10aGlzLmJ1c3k9ITEsdGhpcy5fcXVldWU9W10sbnVsbD09PXRoaXMuZmQmJih0aGlzLl9vcGVuPUIub3Blbix0aGlzLl9xdWV1ZS5wdXNoKFt0aGlzLl9vcGVuLHRoaXMucGF0'@;
put 'aCx0aGlzLmZsYWdzLHRoaXMubW9kZSx2b2lkIDBdKSx0aGlzLmZsdXNoKCkpfX19fSwyMTYxOih1ZSxYLHkpPT57dmFyIEk9eSg0MTU1KSxfPXkoMzIwOCksZz1JLmN3ZCxCPW51bGwsdz1JLmVudi5HUkFDRUZVTF9GU19QTEFURk9STXx8SS5wbGF0Zm9ybTtJLmN3ZD1mdW5jdGlvbigpe3Jl'@;
put 'dHVybiBCfHwoQj1nLmNhbGwoSSkpLEJ9O3RyeXtJLmN3ZCgpfWNhdGNoe31pZigiZnVuY3Rpb24iPT10eXBlb2YgSS5jaGRpcil7dmFyIFA9SS5jaGRpcjtJLmNoZGlyPWZ1bmN0aW9uKE8pe0I9bnVsbCxQLmNhbGwoSSxPKX0sT2JqZWN0LnNldFByb3RvdHlwZU9mJiZPYmplY3Quc2V0UHJv'@;
put 'dG90eXBlT2YoSS5jaGRpcixQKX11ZS5leHBvcnRzPWZ1bmN0aW9uIEYoTyl7ZnVuY3Rpb24gTChKKXtyZXR1cm4gSiYmZnVuY3Rpb24obmUsaWUsbGUpe3JldHVybiBKLmNhbGwoTyxuZSxpZSxmdW5jdGlvbihtZSl7ZWUobWUpJiYobWU9bnVsbCksbGUmJmxlLmFwcGx5KHRoaXMsYXJndW1l'@;
put 'bnRzKX0pfX1mdW5jdGlvbiBLKEope3JldHVybiBKJiZmdW5jdGlvbihuZSxpZSl7dHJ5e3JldHVybiBKLmNhbGwoTyxuZSxpZSl9Y2F0Y2gobGUpe2lmKCFlZShsZSkpdGhyb3cgbGV9fX1mdW5jdGlvbiBVKEope3JldHVybiBKJiZmdW5jdGlvbihuZSxpZSxsZSxtZSl7cmV0dXJuIEouY2Fs'@;
put 'bChPLG5lLGllLGxlLGZ1bmN0aW9uKF9lKXtlZShfZSkmJihfZT1udWxsKSxtZSYmbWUuYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9fWZ1bmN0aW9uIFcoSil7cmV0dXJuIEomJmZ1bmN0aW9uKG5lLGllLGxlKXt0cnl7cmV0dXJuIEouY2FsbChPLG5lLGllLGxlKX1jYXRjaChtZSl7aWYoIWVl'@;
put 'KG1lKSl0aHJvdyBtZX19fWZ1bmN0aW9uIFkoSil7cmV0dXJuIEomJmZ1bmN0aW9uKG5lLGllLGxlKXtmdW5jdGlvbiBtZShfZSxUZSl7VGUmJihUZS51aWQ8MCYmKFRlLnVpZCs9NDI5NDk2NzI5NiksVGUuZ2lkPDAmJihUZS5naWQrPTQyOTQ5NjcyOTYpKSxsZSYmbGUuYXBwbHkodGhpcyxh'@;
put 'cmd1bWVudHMpfXJldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBpZSYmKGxlPWllLGllPW51bGwpLGllP0ouY2FsbChPLG5lLGllLG1lKTpKLmNhbGwoTyxuZSxtZSl9fWZ1bmN0aW9uIHEoSil7cmV0dXJuIEomJmZ1bmN0aW9uKG5lLGllKXt2YXIgbGU9aWU/Si5jYWxsKE8sbmUsaWUpOkouY2Fs'@;
put 'bChPLG5lKTtyZXR1cm4gbGUmJihsZS51aWQ8MCYmKGxlLnVpZCs9NDI5NDk2NzI5NiksbGUuZ2lkPDAmJihsZS5naWQrPTQyOTQ5NjcyOTYpKSxsZX19ZnVuY3Rpb24gZWUoSil7cmV0dXJuIUp8fCJFTk9TWVMiPT09Si5jb2RlfHwhKEkuZ2V0dWlkJiYwPT09SS5nZXR1aWQoKXx8IkVJTlZB'@;
put 'TCIhPT1KLmNvZGUmJiJFUEVSTSIhPT1KLmNvZGUpfV8uaGFzT3duUHJvcGVydHkoIk9fU1lNTElOSyIpJiZJLnZlcnNpb24ubWF0Y2goL152MFwuNlwuWzAtMl18XnYwXC41XC4vKSYmZnVuY3Rpb24geihKKXtKLmxjaG1vZD1mdW5jdGlvbihuZSxpZSxsZSl7Si5vcGVuKG5lLF8uT19XUk9O'@;
put 'TFl8Xy5PX1NZTUxJTkssaWUsZnVuY3Rpb24obWUsX2Upe21lP2xlJiZsZShtZSk6Si5mY2htb2QoX2UsaWUsZnVuY3Rpb24oVGUpe0ouY2xvc2UoX2UsZnVuY3Rpb24oU2Upe2xlJiZsZShUZXx8U2UpfSl9KX0pfSxKLmxjaG1vZFN5bmM9ZnVuY3Rpb24obmUsaWUpe3ZhciBfZSxsZT1KLm9w'@;
put 'ZW5TeW5jKG5lLF8uT19XUk9OTFl8Xy5PX1NZTUxJTkssaWUpLG1lPSEwO3RyeXtfZT1KLmZjaG1vZFN5bmMobGUsaWUpLG1lPSExfWZpbmFsbHl7aWYobWUpdHJ5e0ouY2xvc2VTeW5jKGxlKX1jYXRjaHt9ZWxzZSBKLmNsb3NlU3luYyhsZSl9cmV0dXJuIF9lfX0oTyksTy5sdXRpbWVzfHxm'@;
put 'dW5jdGlvbiBOKEope18uaGFzT3duUHJvcGVydHkoIk9fU1lNTElOSyIpJiZKLmZ1dGltZXM/KEoubHV0aW1lcz1mdW5jdGlvbihuZSxpZSxsZSxtZSl7Si5vcGVuKG5lLF8uT19TWU1MSU5LLGZ1bmN0aW9uKF9lLFRlKXtfZT9tZSYmbWUoX2UpOkouZnV0aW1lcyhUZSxpZSxsZSxmdW5jdGlv'@;
put 'bihTZSl7Si5jbG9zZShUZSxmdW5jdGlvbihqZSl7bWUmJm1lKFNlfHxqZSl9KX0pfSl9LEoubHV0aW1lc1N5bmM9ZnVuY3Rpb24obmUsaWUsbGUpe3ZhciBfZSxtZT1KLm9wZW5TeW5jKG5lLF8uT19TWU1MSU5LKSxUZT0hMDt0cnl7X2U9Si5mdXRpbWVzU3luYyhtZSxpZSxsZSksVGU9ITF9'@;
put 'ZmluYWxseXtpZihUZSl0cnl7Si5jbG9zZVN5bmMobWUpfWNhdGNoe31lbHNlIEouY2xvc2VTeW5jKG1lKX1yZXR1cm4gX2V9KTpKLmZ1dGltZXMmJihKLmx1dGltZXM9ZnVuY3Rpb24obmUsaWUsbGUsbWUpe21lJiZJLm5leHRUaWNrKG1lKX0sSi5sdXRpbWVzU3luYz1mdW5jdGlvbigpe30p'@;
put 'fShPKSxPLmNob3duPVUoTy5jaG93biksTy5mY2hvd249VShPLmZjaG93biksTy5sY2hvd249VShPLmxjaG93biksTy5jaG1vZD1MKE8uY2htb2QpLE8uZmNobW9kPUwoTy5mY2htb2QpLE8ubGNobW9kPUwoTy5sY2htb2QpLE8uY2hvd25TeW5jPVcoTy5jaG93blN5bmMpLE8uZmNob3duU3lu'@;
put 'Yz1XKE8uZmNob3duU3luYyksTy5sY2hvd25TeW5jPVcoTy5sY2hvd25TeW5jKSxPLmNobW9kU3luYz1LKE8uY2htb2RTeW5jKSxPLmZjaG1vZFN5bmM9SyhPLmZjaG1vZFN5bmMpLE8ubGNobW9kU3luYz1LKE8ubGNobW9kU3luYyksTy5zdGF0PVkoTy5zdGF0KSxPLmZzdGF0PVkoTy5mc3Rh'@;
put 'dCksTy5sc3RhdD1ZKE8ubHN0YXQpLE8uc3RhdFN5bmM9cShPLnN0YXRTeW5jKSxPLmZzdGF0U3luYz1xKE8uZnN0YXRTeW5jKSxPLmxzdGF0U3luYz1xKE8ubHN0YXRTeW5jKSxPLmNobW9kJiYhTy5sY2htb2QmJihPLmxjaG1vZD1mdW5jdGlvbihKLG5lLGllKXtpZSYmSS5uZXh0VGljayhp'@;
put 'ZSl9LE8ubGNobW9kU3luYz1mdW5jdGlvbigpe30pLE8uY2hvd24mJiFPLmxjaG93biYmKE8ubGNob3duPWZ1bmN0aW9uKEosbmUsaWUsbGUpe2xlJiZJLm5leHRUaWNrKGxlKX0sTy5sY2hvd25TeW5jPWZ1bmN0aW9uKCl7fSksIndpbjMyIj09PXcmJihPLnJlbmFtZT0iZnVuY3Rpb24iIT10'@;
put 'eXBlb2YgTy5yZW5hbWU/Ty5yZW5hbWU6ZnVuY3Rpb24oSil7ZnVuY3Rpb24gbmUoaWUsbGUsbWUpe3ZhciBfZT1EYXRlLm5vdygpLFRlPTA7SihpZSxsZSxmdW5jdGlvbiBTZShqZSl7aWYoamUmJigiRUFDQ0VTIj09PWplLmNvZGV8fCJFUEVSTSI9PT1qZS5jb2RlfHwiRUJVU1kiPT09amUu'@;
put 'Y29kZSkmJkRhdGUubm93KCktX2U8NmU0KXJldHVybiBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7Ty5zdGF0KGxlLGZ1bmN0aW9uKFYscCl7ViYmIkVOT0VOVCI9PT1WLmNvZGU/SihpZSxsZSxTZSk6bWUoamUpfSl9LFRlKSx2b2lkKFRlPDEwMCYmKFRlKz0xMCkpO21lJiZtZShqZSl9KX1yZXR1'@;
put 'cm4gT2JqZWN0LnNldFByb3RvdHlwZU9mJiZPYmplY3Quc2V0UHJvdG90eXBlT2YobmUsSiksbmV9KE8ucmVuYW1lKSksTy5yZWFkPSJmdW5jdGlvbiIhPXR5cGVvZiBPLnJlYWQ/Ty5yZWFkOmZ1bmN0aW9uKEope2Z1bmN0aW9uIG5lKGllLGxlLG1lLF9lLFRlLFNlKXt2YXIgamU7aWYoU2Um'@;
put 'JiJmdW5jdGlvbiI9PXR5cGVvZiBTZSl7dmFyIFY9MDtqZT1mdW5jdGlvbihwLGIseCl7aWYocCYmIkVBR0FJTiI9PT1wLmNvZGUmJlY8MTApcmV0dXJuIFYrKyxKLmNhbGwoTyxpZSxsZSxtZSxfZSxUZSxqZSk7U2UuYXBwbHkodGhpcyxhcmd1bWVudHMpfX1yZXR1cm4gSi5jYWxsKE8saWUs'@;
put 'bGUsbWUsX2UsVGUsamUpfXJldHVybiBPYmplY3Quc2V0UHJvdG90eXBlT2YmJk9iamVjdC5zZXRQcm90b3R5cGVPZihuZSxKKSxuZX0oTy5yZWFkKSxPLnJlYWRTeW5jPSJmdW5jdGlvbiIhPXR5cGVvZiBPLnJlYWRTeW5jP08ucmVhZFN5bmM6ZnVuY3Rpb24oSil7cmV0dXJuIGZ1bmN0aW9u'@;
put 'KG5lLGllLGxlLG1lLF9lKXtmb3IodmFyIFRlPTA7Oyl0cnl7cmV0dXJuIEouY2FsbChPLG5lLGllLGxlLG1lLF9lKX1jYXRjaChTZSl7aWYoIkVBR0FJTiI9PT1TZS5jb2RlJiZUZTwxMCl7VGUrKztjb250aW51ZX10aHJvdyBTZX19fShPLnJlYWRTeW5jKX19LDEwNDQ6KHVlLFgseSk9Pnsi'@;
put 'dXNlIHN0cmljdCI7dmFyIEk9eSg0NDI5KSxfPWZ1bmN0aW9uKCl7cmV0dXJuISFJfTtfLmhhc0FycmF5TGVuZ3RoRGVmaW5lQnVnPWZ1bmN0aW9uKCl7aWYoIUkpcmV0dXJuIG51bGw7dHJ5e3JldHVybiAxIT09SShbXSwibGVuZ3RoIix7dmFsdWU6MX0pLmxlbmd0aH1jYXRjaHtyZXR1cm4h'@;
put 'MH19LHVlLmV4cG9ydHM9X30sMTQwNToodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST10eXBlb2YgU3ltYm9sPCJ1IiYmU3ltYm9sLF89eSg1NDE5KTt1ZS5leHBvcnRzPWZ1bmN0aW9uKCl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIEkmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wm'@;
put 'JiJzeW1ib2wiPT10eXBlb2YgSSgiZm9vIikmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sKCJiYXIiKSYmXygpfX0sNTQxOTp1ZT0+eyJ1c2Ugc3RyaWN0Ijt1ZS5leHBvcnRzPWZ1bmN0aW9uKCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIFN5bWJvbHx8ImZ1bmN0aW9uIiE9dHlwZW9mIE9iamVj'@;
put 'dC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpcmV0dXJuITE7aWYoInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3IpcmV0dXJuITA7dmFyIHk9e30sST1TeW1ib2woInRlc3QiKSxfPU9iamVjdChJKTtpZigic3RyaW5nIj09dHlwZW9mIEl8fCJbb2JqZWN0IFN5bWJvbF0iIT09T2JqZWN0'@;
put 'LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKEkpfHwiW29iamVjdCBTeW1ib2xdIiE9PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChfKSlyZXR1cm4hMTtmb3IodmFyIEIgaW4geVtJXT00Mix5KXJldHVybiExO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBPYmplY3Qua2V5cyYmMCE9PU9i'@;
put 'amVjdC5rZXlzKHkpLmxlbmd0aHx8ImZ1bmN0aW9uIj09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzJiYwIT09T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoeSkubGVuZ3RoKXJldHVybiExO3ZhciB3PU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoeSk7aWYoMSE9PXcu'@;
put 'bGVuZ3RofHx3WzBdIT09SXx8IU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbCh5LEkpKXJldHVybiExO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKXt2YXIgUD1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlw'@;
put 'dG9yKHksSSk7aWYoNDIhPT1QLnZhbHVlfHwhMCE9PVAuZW51bWVyYWJsZSlyZXR1cm4hMX1yZXR1cm4hMH19LDY0MTA6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg1NDE5KTt1ZS5leHBvcnRzPWZ1bmN0aW9uKCl7cmV0dXJuIEkoKSYmISFTeW1ib2wudG9TdHJpbmdUYWd9fSwz'@;
put 'MzQ5Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoOTUwOSkuQnVmZmVyLF89eSgyODMwKS5UcmFuc2Zvcm07ZnVuY3Rpb24gQihPKXtfLmNhbGwodGhpcyksdGhpcy5fYmxvY2s9SS5hbGxvY1Vuc2FmZShPKSx0aGlzLl9ibG9ja1NpemU9Tyx0aGlzLl9ibG9ja09mZnNldD0wLHRo'@;
put 'aXMuX2xlbmd0aD1bMCwwLDAsMF0sdGhpcy5fZmluYWxpemVkPSExfXkoNTcxNykoQixfKSxCLnByb3RvdHlwZS5fdHJhbnNmb3JtPWZ1bmN0aW9uKE8seixOKXt2YXIgTD1udWxsO3RyeXt0aGlzLnVwZGF0ZShPLHopfWNhdGNoKEspe0w9S31OKEwpfSxCLnByb3RvdHlwZS5fZmx1c2g9ZnVu'@;
put 'Y3Rpb24oTyl7dmFyIHo9bnVsbDt0cnl7dGhpcy5wdXNoKHRoaXMuZGlnZXN0KCkpfWNhdGNoKE4pe3o9Tn1PKHopfTt2YXIgdz10eXBlb2YgVWludDhBcnJheTwidSIsUD10eXBlb2YgQXJyYXlCdWZmZXI8InUiJiZ0eXBlb2YgVWludDhBcnJheTwidSImJkFycmF5QnVmZmVyLmlzVmlldyYm'@;
put 'KEkucHJvdG90eXBlIGluc3RhbmNlb2YgVWludDhBcnJheXx8SS5UWVBFRF9BUlJBWV9TVVBQT1JUKTtCLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24oTyx6KXtpZih0aGlzLl9maW5hbGl6ZWQpdGhyb3cgbmV3IEVycm9yKCJEaWdlc3QgYWxyZWFkeSBjYWxsZWQiKTtPPWZ1bmN0aW9uIEYo'@;
put 'Tyx6KXtpZihPIGluc3RhbmNlb2YgSSlyZXR1cm4gTztpZigic3RyaW5nIj09dHlwZW9mIE8pcmV0dXJuIEkuZnJvbShPLHopO2lmKFAmJkFycmF5QnVmZmVyLmlzVmlldyhPKSl7aWYoMD09PU8uYnl0ZUxlbmd0aClyZXR1cm4gSS5hbGxvYygwKTt2YXIgTj1JLmZyb20oTy5idWZmZXIsTy5i'@;
put 'eXRlT2Zmc2V0LE8uYnl0ZUxlbmd0aCk7aWYoTi5ieXRlTGVuZ3RoPT09Ty5ieXRlTGVuZ3RoKXJldHVybiBOfWlmKHcmJk8gaW5zdGFuY2VvZiBVaW50OEFycmF5fHxJLmlzQnVmZmVyKE8pJiZPLmNvbnN0cnVjdG9yJiYiZnVuY3Rpb24iPT10eXBlb2YgTy5jb25zdHJ1Y3Rvci5pc0J1ZmZl'@;
put 'ciYmTy5jb25zdHJ1Y3Rvci5pc0J1ZmZlcihPKSlyZXR1cm4gSS5mcm9tKE8pO3Rocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSAiZGF0YSIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIHN0cmluZyBvciBhbiBpbnN0YW5jZSBvZiBCdWZmZXIsIFR5cGVkQXJyYXksIG9yIERhdGFWaWV3LicpfShP'@;
put 'LHopO2Zvcih2YXIgTj10aGlzLl9ibG9jayxMPTA7dGhpcy5fYmxvY2tPZmZzZXQrTy5sZW5ndGgtTD49dGhpcy5fYmxvY2tTaXplOyl7Zm9yKHZhciBLPXRoaXMuX2Jsb2NrT2Zmc2V0O0s8dGhpcy5fYmxvY2tTaXplOylOW0srK109T1tMKytdO3RoaXMuX3VwZGF0ZSgpLHRoaXMuX2Jsb2Nr'@;
put 'T2Zmc2V0PTB9Zm9yKDtMPE8ubGVuZ3RoOylOW3RoaXMuX2Jsb2NrT2Zmc2V0KytdPU9bTCsrXTtmb3IodmFyIFU9MCxXPTgqTy5sZW5ndGg7Vz4wOysrVSl0aGlzLl9sZW5ndGhbVV0rPVcsKFc9dGhpcy5fbGVuZ3RoW1VdLzQyOTQ5NjcyOTZ8MCk+MCYmKHRoaXMuX2xlbmd0aFtVXS09NDI5'@;
put 'NDk2NzI5NipXKTtyZXR1cm4gdGhpc30sQi5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiX3VwZGF0ZSBpcyBub3QgaW1wbGVtZW50ZWQiKX0sQi5wcm90b3R5cGUuZGlnZXN0PWZ1bmN0aW9uKE8pe2lmKHRoaXMuX2ZpbmFsaXplZCl0aHJvdyBuZXcgRXJy'@;
put 'b3IoIkRpZ2VzdCBhbHJlYWR5IGNhbGxlZCIpO3RoaXMuX2ZpbmFsaXplZD0hMDt2YXIgej10aGlzLl9kaWdlc3QoKTt2b2lkIDAhPT1PJiYoej16LnRvU3RyaW5nKE8pKSx0aGlzLl9ibG9jay5maWxsKDApLHRoaXMuX2Jsb2NrT2Zmc2V0PTA7Zm9yKHZhciBOPTA7Tjw0OysrTil0aGlzLl9s'@;
put 'ZW5ndGhbTl09MDtyZXR1cm4gen0sQi5wcm90b3R5cGUuX2RpZ2VzdD1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiX2RpZ2VzdCBpcyBub3QgaW1wbGVtZW50ZWQiKX0sdWUuZXhwb3J0cz1CfSwzNzE1Oih1ZSxYLHkpPT57dmFyIEk9WDtJLnV0aWxzPXkoNjQzNiksSS5jb21tb249eSg1'@;
put 'NzcyKSxJLnNoYT15KDkwNDEpLEkucmlwZW1kPXkoMjk0OSksSS5obWFjPXkoMjM0NCksSS5zaGExPUkuc2hhLnNoYTEsSS5zaGEyNTY9SS5zaGEuc2hhMjU2LEkuc2hhMjI0PUkuc2hhLnNoYTIyNCxJLnNoYTM4ND1JLnNoYS5zaGEzODQsSS5zaGE1MTI9SS5zaGEuc2hhNTEyLEkucmlwZW1k'@;
put 'MTYwPUkucmlwZW1kLnJpcGVtZDE2MH0sNTc3MjoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDY0MzYpLF89eSg5NzQ2KTtmdW5jdGlvbiBnKCl7dGhpcy5wZW5kaW5nPW51bGwsdGhpcy5wZW5kaW5nVG90YWw9MCx0aGlzLmJsb2NrU2l6ZT10aGlzLmNvbnN0cnVjdG9yLmJsb2Nr'@;
put 'U2l6ZSx0aGlzLm91dFNpemU9dGhpcy5jb25zdHJ1Y3Rvci5vdXRTaXplLHRoaXMuaG1hY1N0cmVuZ3RoPXRoaXMuY29uc3RydWN0b3IuaG1hY1N0cmVuZ3RoLHRoaXMucGFkTGVuZ3RoPXRoaXMuY29uc3RydWN0b3IucGFkTGVuZ3RoLzgsdGhpcy5lbmRpYW49ImJpZyIsdGhpcy5fZGVsdGE4'@;
put 'PXRoaXMuYmxvY2tTaXplLzgsdGhpcy5fZGVsdGEzMj10aGlzLmJsb2NrU2l6ZS8zMn1YLkJsb2NrSGFzaD1nLGcucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbih3LFApe2lmKHc9SS50b0FycmF5KHcsUCksdGhpcy5wZW5kaW5nPXRoaXMucGVuZGluZz90aGlzLnBlbmRpbmcuY29uY2F0KHcp'@;
put 'OncsdGhpcy5wZW5kaW5nVG90YWwrPXcubGVuZ3RoLHRoaXMucGVuZGluZy5sZW5ndGg+PXRoaXMuX2RlbHRhOCl7dmFyIEY9KHc9dGhpcy5wZW5kaW5nKS5sZW5ndGgldGhpcy5fZGVsdGE4O3RoaXMucGVuZGluZz13LnNsaWNlKHcubGVuZ3RoLUYsdy5sZW5ndGgpLDA9PT10aGlzLnBlbmRp'@;
put 'bmcubGVuZ3RoJiYodGhpcy5wZW5kaW5nPW51bGwpLHc9SS5qb2luMzIodywwLHcubGVuZ3RoLUYsdGhpcy5lbmRpYW4pO2Zvcih2YXIgTz0wO088dy5sZW5ndGg7Tys9dGhpcy5fZGVsdGEzMil0aGlzLl91cGRhdGUodyxPLE8rdGhpcy5fZGVsdGEzMil9cmV0dXJuIHRoaXN9LGcucHJvdG90'@;
put 'eXBlLmRpZ2VzdD1mdW5jdGlvbih3KXtyZXR1cm4gdGhpcy51cGRhdGUodGhpcy5fcGFkKCkpLF8obnVsbD09PXRoaXMucGVuZGluZyksdGhpcy5fZGlnZXN0KHcpfSxnLnByb3RvdHlwZS5fcGFkPWZ1bmN0aW9uKCl7dmFyIHc9dGhpcy5wZW5kaW5nVG90YWwsUD10aGlzLl9kZWx0YTgsRj1Q'@;
put 'LSh3K3RoaXMucGFkTGVuZ3RoKSVQLE89bmV3IEFycmF5KEYrdGhpcy5wYWRMZW5ndGgpO09bMF09MTI4O2Zvcih2YXIgej0xO3o8Rjt6KyspT1t6XT0wO2lmKHc8PD0zLCJiaWciPT09dGhpcy5lbmRpYW4pe2Zvcih2YXIgTj04O048dGhpcy5wYWRMZW5ndGg7TisrKU9beisrXT0wO09beisr'@;
put 'XT0wLE9beisrXT0wLE9beisrXT0wLE9beisrXT0wLE9beisrXT13Pj4+MjQmMjU1LE9beisrXT13Pj4+MTYmMjU1LE9beisrXT13Pj4+OCYyNTUsT1t6KytdPTI1NSZ3fWVsc2UgZm9yKE9beisrXT0yNTUmdyxPW3orK109dz4+PjgmMjU1LE9beisrXT13Pj4+MTYmMjU1LE9beisrXT13Pj4+'@;
put 'MjQmMjU1LE9beisrXT0wLE9beisrXT0wLE9beisrXT0wLE9beisrXT0wLE49ODtOPHRoaXMucGFkTGVuZ3RoO04rKylPW3orK109MDtyZXR1cm4gT319LDIzNDQ6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg2NDM2KSxfPXkoOTc0Nik7ZnVuY3Rpb24gZyhCLHcsUCl7aWYoISh0'@;
put 'aGlzIGluc3RhbmNlb2YgZykpcmV0dXJuIG5ldyBnKEIsdyxQKTt0aGlzLkhhc2g9Qix0aGlzLmJsb2NrU2l6ZT1CLmJsb2NrU2l6ZS84LHRoaXMub3V0U2l6ZT1CLm91dFNpemUvOCx0aGlzLmlubmVyPW51bGwsdGhpcy5vdXRlcj1udWxsLHRoaXMuX2luaXQoSS50b0FycmF5KHcsUCkpfXVl'@;
put 'LmV4cG9ydHM9ZyxnLnByb3RvdHlwZS5faW5pdD1mdW5jdGlvbih3KXt3Lmxlbmd0aD50aGlzLmJsb2NrU2l6ZSYmKHc9KG5ldyB0aGlzLkhhc2gpLnVwZGF0ZSh3KS5kaWdlc3QoKSksXyh3Lmxlbmd0aDw9dGhpcy5ibG9ja1NpemUpO2Zvcih2YXIgUD13Lmxlbmd0aDtQPHRoaXMuYmxvY2tT'@;
put 'aXplO1ArKyl3LnB1c2goMCk7Zm9yKFA9MDtQPHcubGVuZ3RoO1ArKyl3W1BdXj01NDtmb3IodGhpcy5pbm5lcj0obmV3IHRoaXMuSGFzaCkudXBkYXRlKHcpLFA9MDtQPHcubGVuZ3RoO1ArKyl3W1BdXj0xMDY7dGhpcy5vdXRlcj0obmV3IHRoaXMuSGFzaCkudXBkYXRlKHcpfSxnLnByb3Rv'@;
put 'dHlwZS51cGRhdGU9ZnVuY3Rpb24odyxQKXtyZXR1cm4gdGhpcy5pbm5lci51cGRhdGUodyxQKSx0aGlzfSxnLnByb3RvdHlwZS5kaWdlc3Q9ZnVuY3Rpb24odyl7cmV0dXJuIHRoaXMub3V0ZXIudXBkYXRlKHRoaXMuaW5uZXIuZGlnZXN0KCkpLHRoaXMub3V0ZXIuZGlnZXN0KHcpfX0sMjk0'@;
put 'OToodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDY0MzYpLF89eSg1NzcyKSxnPUkucm90bDMyLEI9SS5zdW0zMix3PUkuc3VtMzJfMyxQPUkuc3VtMzJfNCxGPV8uQmxvY2tIYXNoO2Z1bmN0aW9uIE8oKXtpZighKHRoaXMgaW5zdGFuY2VvZiBPKSlyZXR1cm4gbmV3IE87Ri5jYWxs'@;
put 'KHRoaXMpLHRoaXMuaD1bMTczMjU4NDE5Myw0MDIzMjMzNDE3LDI1NjIzODMxMDIsMjcxNzMzODc4LDMyODUzNzc1MjBdLHRoaXMuZW5kaWFuPSJsaXR0bGUifWZ1bmN0aW9uIHoocSxlZSxKLG5lKXtyZXR1cm4gcTw9MTU/ZWVeSl5uZTpxPD0zMT9lZSZKfH5lZSZuZTpxPD00Nz8oZWV8fkop'@;
put 'Xm5lOnE8PTYzP2VlJm5lfEomfm5lOmVlXihKfH5uZSl9ZnVuY3Rpb24gTChxKXtyZXR1cm4gcTw9MTU/MTM1MjgyOTkyNjpxPD0zMT8xNTQ4NjAzNjg0OnE8PTQ3PzE4MzYwNzI2OTE6cTw9NjM/MjA1Mzk5NDIxNzowfUkuaW5oZXJpdHMoTyxGKSxYLnJpcGVtZDE2MD1PLE8uYmxvY2tTaXpl'@;
put 'PTUxMixPLm91dFNpemU9MTYwLE8uaG1hY1N0cmVuZ3RoPTE5MixPLnBhZExlbmd0aD02NCxPLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKGVlLEope2Zvcih2YXIgbmU9dGhpcy5oWzBdLGllPXRoaXMuaFsxXSxsZT10aGlzLmhbMl0sbWU9dGhpcy5oWzNdLF9lPXRoaXMuaFs0XSxUZT1u'@;
put 'ZSxTZT1pZSxqZT1sZSxWPW1lLHA9X2UsYj0wO2I8ODA7YisrKXt2YXIgeD1CKGcoUChuZSx6KGIsaWUsbGUsbWUpLGVlW0tbYl0rSl0sKHE9Yik8PTE1PzA6cTw9MzE/MTUxODUwMDI0OTpxPD00Nz8xODU5Nzc1MzkzOnE8PTYzPzI0MDA5NTk3MDg6Mjg0MDg1MzgzOCksV1tiXSksX2UpO25l'@;
put 'PV9lLF9lPW1lLG1lPWcobGUsMTApLGxlPWllLGllPXgseD1CKGcoUChUZSx6KDc5LWIsU2UsamUsViksZWVbVVtiXStKXSxMKGIpKSxZW2JdKSxwKSxUZT1wLHA9VixWPWcoamUsMTApLGplPVNlLFNlPXh9dmFyIHE7eD13KHRoaXMuaFsxXSxsZSxWKSx0aGlzLmhbMV09dyh0aGlzLmhbMl0s'@;
put 'bWUscCksdGhpcy5oWzJdPXcodGhpcy5oWzNdLF9lLFRlKSx0aGlzLmhbM109dyh0aGlzLmhbNF0sbmUsU2UpLHRoaXMuaFs0XT13KHRoaXMuaFswXSxpZSxqZSksdGhpcy5oWzBdPXh9LE8ucHJvdG90eXBlLl9kaWdlc3Q9ZnVuY3Rpb24oZWUpe3JldHVybiJoZXgiPT09ZWU/SS50b0hleDMy'@;
put 'KHRoaXMuaCwibGl0dGxlIik6SS5zcGxpdDMyKHRoaXMuaCwibGl0dGxlIil9O3ZhciBLPVswLDEsMiwzLDQsNSw2LDcsOCw5LDEwLDExLDEyLDEzLDE0LDE1LDcsNCwxMywxLDEwLDYsMTUsMywxMiwwLDksNSwyLDE0LDExLDgsMywxMCwxNCw0LDksMTUsOCwxLDIsNywwLDYsMTMsMTEsNSwx'@;
put 'MiwxLDksMTEsMTAsMCw4LDEyLDQsMTMsMyw3LDE1LDE0LDUsNiwyLDQsMCw1LDksNywxMiwyLDEwLDE0LDEsMyw4LDExLDYsMTUsMTNdLFU9WzUsMTQsNywwLDksMiwxMSw0LDEzLDYsMTUsOCwxLDEwLDMsMTIsNiwxMSwzLDcsMCwxMyw1LDEwLDE0LDE1LDgsMTIsNCw5LDEsMiwxNSw1LDEs'@;
put 'Myw3LDE0LDYsOSwxMSw4LDEyLDIsMTAsMCw0LDEzLDgsNiw0LDEsMywxMSwxNSwwLDUsMTIsMiwxMyw5LDcsMTAsMTQsMTIsMTUsMTAsNCwxLDUsOCw3LDYsMiwxMywxNCwwLDMsOSwxMV0sVz1bMTEsMTQsMTUsMTIsNSw4LDcsOSwxMSwxMywxNCwxNSw2LDcsOSw4LDcsNiw4LDEzLDExLDks'@;
put 'NywxNSw3LDEyLDE1LDksMTEsNywxMywxMiwxMSwxMyw2LDcsMTQsOSwxMywxNSwxNCw4LDEzLDYsNSwxMiw3LDUsMTEsMTIsMTQsMTUsMTQsMTUsOSw4LDksMTQsNSw2LDgsNiw1LDEyLDksMTUsNSwxMSw2LDgsMTMsMTIsNSwxMiwxMywxNCwxMSw4LDUsNl0sWT1bOCw5LDksMTEsMTMsMTUs'@;
put 'MTUsNSw3LDcsOCwxMSwxNCwxNCwxMiw2LDksMTMsMTUsNywxMiw4LDksMTEsNyw3LDEyLDcsNiwxNSwxMywxMSw5LDcsMTUsMTEsOCw2LDYsMTQsMTIsMTMsNSwxNCwxMywxMyw3LDUsMTUsNSw4LDExLDE0LDE0LDYsMTQsNiw5LDEyLDksMTIsNSwxNSw4LDgsNSwxMiw5LDEyLDUsMTQsNiw4'@;
put 'LDEzLDYsNSwxNSwxMywxMSwxMV19LDkwNDE6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7WC5zaGExPXkoNDc2MSksWC5zaGEyMjQ9eSg3OTkpLFguc2hhMjU2PXkoOTM0NCksWC5zaGEzODQ9eSg3NzIpLFguc2hhNTEyPXkoNTkwMCl9LDQ3NjE6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFy'@;
put 'IEk9eSg2NDM2KSxfPXkoNTc3MiksZz15KDcwMzgpLEI9SS5yb3RsMzIsdz1JLnN1bTMyLFA9SS5zdW0zMl81LEY9Zy5mdF8xLE89Xy5CbG9ja0hhc2gsej1bMTUxODUwMDI0OSwxODU5Nzc1MzkzLDI0MDA5NTk3MDgsMzM5NTQ2OTc4Ml07ZnVuY3Rpb24gTigpe2lmKCEodGhpcyBpbnN0YW5j'@;
put 'ZW9mIE4pKXJldHVybiBuZXcgTjtPLmNhbGwodGhpcyksdGhpcy5oPVsxNzMyNTg0MTkzLDQwMjMyMzM0MTcsMjU2MjM4MzEwMiwyNzE3MzM4NzgsMzI4NTM3NzUyMF0sdGhpcy5XPW5ldyBBcnJheSg4MCl9SS5pbmhlcml0cyhOLE8pLHVlLmV4cG9ydHM9TixOLmJsb2NrU2l6ZT01MTIsTi5v'@;
put 'dXRTaXplPTE2MCxOLmhtYWNTdHJlbmd0aD04MCxOLnBhZExlbmd0aD02NCxOLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKEssVSl7Zm9yKHZhciBXPXRoaXMuVyxZPTA7WTwxNjtZKyspV1tZXT1LW1UrWV07Zm9yKDtZPFcubGVuZ3RoO1krKylXW1ldPUIoV1tZLTNdXldbWS04XV5XW1kt'@;
put 'MTRdXldbWS0xNl0sMSk7dmFyIHE9dGhpcy5oWzBdLGVlPXRoaXMuaFsxXSxKPXRoaXMuaFsyXSxuZT10aGlzLmhbM10saWU9dGhpcy5oWzRdO2ZvcihZPTA7WTxXLmxlbmd0aDtZKyspe3ZhciBsZT1+fihZLzIwKSxtZT1QKEIocSw1KSxGKGxlLGVlLEosbmUpLGllLFdbWV0seltsZV0pO2ll'@;
put 'PW5lLG5lPUosSj1CKGVlLDMwKSxlZT1xLHE9bWV9dGhpcy5oWzBdPXcodGhpcy5oWzBdLHEpLHRoaXMuaFsxXT13KHRoaXMuaFsxXSxlZSksdGhpcy5oWzJdPXcodGhpcy5oWzJdLEopLHRoaXMuaFszXT13KHRoaXMuaFszXSxuZSksdGhpcy5oWzRdPXcodGhpcy5oWzRdLGllKX0sTi5wcm90'@;
put 'b3R5cGUuX2RpZ2VzdD1mdW5jdGlvbihLKXtyZXR1cm4iaGV4Ij09PUs/SS50b0hleDMyKHRoaXMuaCwiYmlnIik6SS5zcGxpdDMyKHRoaXMuaCwiYmlnIil9fSw3OTk6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg2NDM2KSxfPXkoOTM0NCk7ZnVuY3Rpb24gZygpe2lmKCEodGhp'@;
put 'cyBpbnN0YW5jZW9mIGcpKXJldHVybiBuZXcgZztfLmNhbGwodGhpcyksdGhpcy5oPVszMjM4MzcxMDMyLDkxNDE1MDY2Myw4MTI3MDI5OTksNDE0NDkxMjY5Nyw0MjkwNzc1ODU3LDE3NTA2MDMwMjUsMTY5NDA3NjgzOSwzMjA0MDc1NDI4XX1JLmluaGVyaXRzKGcsXyksdWUuZXhwb3J0cz1n'@;
put 'LGcuYmxvY2tTaXplPTUxMixnLm91dFNpemU9MjI0LGcuaG1hY1N0cmVuZ3RoPTE5MixnLnBhZExlbmd0aD02NCxnLnByb3RvdHlwZS5fZGlnZXN0PWZ1bmN0aW9uKHcpe3JldHVybiJoZXgiPT09dz9JLnRvSGV4MzIodGhpcy5oLnNsaWNlKDAsNyksImJpZyIpOkkuc3BsaXQzMih0aGlzLmgu'@;
put 'c2xpY2UoMCw3KSwiYmlnIil9fSw5MzQ0Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoNjQzNiksXz15KDU3NzIpLGc9eSg3MDM4KSxCPXkoOTc0Niksdz1JLnN1bTMyLFA9SS5zdW0zMl80LEY9SS5zdW0zMl81LE89Zy5jaDMyLHo9Zy5tYWozMixOPWcuczBfMjU2LEw9Zy5zMV8y'@;
put 'NTYsSz1nLmcwXzI1NixVPWcuZzFfMjU2LFc9Xy5CbG9ja0hhc2gsWT1bMTExNjM1MjQwOCwxODk5NDQ3NDQxLDMwNDkzMjM0NzEsMzkyMTAwOTU3Myw5NjE5ODcxNjMsMTUwODk3MDk5MywyNDUzNjM1NzQ4LDI4NzA3NjMyMjEsMzYyNDM4MTA4MCwzMTA1OTg0MDEsNjA3MjI1Mjc4LDE0MjY4'@;
put 'ODE5ODcsMTkyNTA3ODM4OCwyMTYyMDc4MjA2LDI2MTQ4ODgxMDMsMzI0ODIyMjU4MCwzODM1MzkwNDAxLDQwMjIyMjQ3NzQsMjY0MzQ3MDc4LDYwNDgwNzYyOCw3NzAyNTU5ODMsMTI0OTE1MDEyMiwxNTU1MDgxNjkyLDE5OTYwNjQ5ODYsMjU1NDIyMDg4MiwyODIxODM0MzQ5LDI5NTI5OTY4'@;
put 'MDgsMzIxMDMxMzY3MSwzMzM2NTcxODkxLDM1ODQ1Mjg3MTEsMTEzOTI2OTkzLDMzODI0MTg5NSw2NjYzMDcyMDUsNzczNTI5OTEyLDEyOTQ3NTczNzIsMTM5NjE4MjI5MSwxNjk1MTgzNzAwLDE5ODY2NjEwNTEsMjE3NzAyNjM1MCwyNDU2OTU2MDM3LDI3MzA0ODU5MjEsMjgyMDMwMjQxMSwz'@;
put 'MjU5NzMwODAwLDMzNDU3NjQ3NzEsMzUxNjA2NTgxNywzNjAwMzUyODA0LDQwOTQ1NzE5MDksMjc1NDIzMzQ0LDQzMDIyNzczNCw1MDY5NDg2MTYsNjU5MDYwNTU2LDg4Mzk5Nzg3Nyw5NTgxMzk1NzEsMTMyMjgyMjIxOCwxNTM3MDAyMDYzLDE3NDc4NzM3NzksMTk1NTU2MjIyMiwyMDI0MTA0'@;
put 'ODE1LDIyMjc3MzA0NTIsMjM2MTg1MjQyNCwyNDI4NDM2NDc0LDI3NTY3MzQxODcsMzIwNDAzMTQ3OSwzMzI5MzI1Mjk4XTtmdW5jdGlvbiBxKCl7aWYoISh0aGlzIGluc3RhbmNlb2YgcSkpcmV0dXJuIG5ldyBxO1cuY2FsbCh0aGlzKSx0aGlzLmg9WzE3NzkwMzM3MDMsMzE0NDEzNDI3Nywx'@;
put 'MDEzOTA0MjQyLDI3NzM0ODA3NjIsMTM1OTg5MzExOSwyNjAwODIyOTI0LDUyODczNDYzNSwxNTQxNDU5MjI1XSx0aGlzLms9WSx0aGlzLlc9bmV3IEFycmF5KDY0KX1JLmluaGVyaXRzKHEsVyksdWUuZXhwb3J0cz1xLHEuYmxvY2tTaXplPTUxMixxLm91dFNpemU9MjU2LHEuaG1hY1N0cmVu'@;
put 'Z3RoPTE5MixxLnBhZExlbmd0aD02NCxxLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKEosbmUpe2Zvcih2YXIgaWU9dGhpcy5XLGxlPTA7bGU8MTY7bGUrKylpZVtsZV09SltuZStsZV07Zm9yKDtsZTxpZS5sZW5ndGg7bGUrKylpZVtsZV09UChVKGllW2xlLTJdKSxpZVtsZS03XSxLKGll'@;
put 'W2xlLTE1XSksaWVbbGUtMTZdKTt2YXIgbWU9dGhpcy5oWzBdLF9lPXRoaXMuaFsxXSxUZT10aGlzLmhbMl0sU2U9dGhpcy5oWzNdLGplPXRoaXMuaFs0XSxWPXRoaXMuaFs1XSxwPXRoaXMuaFs2XSxiPXRoaXMuaFs3XTtmb3IoQih0aGlzLmsubGVuZ3RoPT09aWUubGVuZ3RoKSxsZT0wO2xl'@;
put 'PGllLmxlbmd0aDtsZSsrKXt2YXIgeD1GKGIsTChqZSksTyhqZSxWLHApLHRoaXMua1tsZV0saWVbbGVdKSxDPXcoTihtZSkseihtZSxfZSxUZSkpO2I9cCxwPVYsVj1qZSxqZT13KFNlLHgpLFNlPVRlLFRlPV9lLF9lPW1lLG1lPXcoeCxDKX10aGlzLmhbMF09dyh0aGlzLmhbMF0sbWUpLHRo'@;
put 'aXMuaFsxXT13KHRoaXMuaFsxXSxfZSksdGhpcy5oWzJdPXcodGhpcy5oWzJdLFRlKSx0aGlzLmhbM109dyh0aGlzLmhbM10sU2UpLHRoaXMuaFs0XT13KHRoaXMuaFs0XSxqZSksdGhpcy5oWzVdPXcodGhpcy5oWzVdLFYpLHRoaXMuaFs2XT13KHRoaXMuaFs2XSxwKSx0aGlzLmhbN109dyh0'@;
put 'aGlzLmhbN10sYil9LHEucHJvdG90eXBlLl9kaWdlc3Q9ZnVuY3Rpb24oSil7cmV0dXJuImhleCI9PT1KP0kudG9IZXgzMih0aGlzLmgsImJpZyIpOkkuc3BsaXQzMih0aGlzLmgsImJpZyIpfX0sNzcyOih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoNjQzNiksXz15KDU5MDApO2Z1'@;
put 'bmN0aW9uIGcoKXtpZighKHRoaXMgaW5zdGFuY2VvZiBnKSlyZXR1cm4gbmV3IGc7Xy5jYWxsKHRoaXMpLHRoaXMuaD1bMzQxODA3MDM2NSwzMjM4MzcxMDMyLDE2NTQyNzAyNTAsOTE0MTUwNjYzLDI0Mzg1MjkzNzAsODEyNzAyOTk5LDM1NTQ2MjM2MCw0MTQ0OTEyNjk3LDE3MzE0MDU0MTUs'@;
put 'NDI5MDc3NTg1NywyMzk0MTgwMjMxLDE3NTA2MDMwMjUsMzY3NTAwODUyNSwxNjk0MDc2ODM5LDEyMDMwNjI4MTMsMzIwNDA3NTQyOF19SS5pbmhlcml0cyhnLF8pLHVlLmV4cG9ydHM9ZyxnLmJsb2NrU2l6ZT0xMDI0LGcub3V0U2l6ZT0zODQsZy5obWFjU3RyZW5ndGg9MTkyLGcucGFkTGVu'@;
put 'Z3RoPTEyOCxnLnByb3RvdHlwZS5fZGlnZXN0PWZ1bmN0aW9uKHcpe3JldHVybiJoZXgiPT09dz9JLnRvSGV4MzIodGhpcy5oLnNsaWNlKDAsMTIpLCJiaWciKTpJLnNwbGl0MzIodGhpcy5oLnNsaWNlKDAsMTIpLCJiaWciKX19LDU5MDA6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9'@;
put 'eSg2NDM2KSxfPXkoNTc3MiksZz15KDk3NDYpLEI9SS5yb3RyNjRfaGksdz1JLnJvdHI2NF9sbyxQPUkuc2hyNjRfaGksRj1JLnNocjY0X2xvLE89SS5zdW02NCx6PUkuc3VtNjRfaGksTj1JLnN1bTY0X2xvLEw9SS5zdW02NF80X2hpLEs9SS5zdW02NF80X2xvLFU9SS5zdW02NF81X2hpLFc9'@;
put 'SS5zdW02NF81X2xvLFk9Xy5CbG9ja0hhc2gscT1bMTExNjM1MjQwOCwzNjA5NzY3NDU4LDE4OTk0NDc0NDEsNjAyODkxNzI1LDMwNDkzMjM0NzEsMzk2NDQ4NDM5OSwzOTIxMDA5NTczLDIxNzMyOTU1NDgsOTYxOTg3MTYzLDQwODE2Mjg0NzIsMTUwODk3MDk5MywzMDUzODM0MjY1LDI0NTM2'@;
put 'MzU3NDgsMjkzNzY3MTU3OSwyODcwNzYzMjIxLDM2NjQ2MDk1NjAsMzYyNDM4MTA4MCwyNzM0ODgzMzk0LDMxMDU5ODQwMSwxMTY0OTk2NTQyLDYwNzIyNTI3OCwxMzIzNjEwNzY0LDE0MjY4ODE5ODcsMzU5MDMwNDk5NCwxOTI1MDc4Mzg4LDQwNjgxODIzODMsMjE2MjA3ODIwNiw5OTEzMzYx'@;
put 'MTMsMjYxNDg4ODEwMyw2MzM4MDMzMTcsMzI0ODIyMjU4MCwzNDc5Nzc0ODY4LDM4MzUzOTA0MDEsMjY2NjYxMzQ1OCw0MDIyMjI0Nzc0LDk0NDcxMTEzOSwyNjQzNDcwNzgsMjM0MTI2Mjc3Myw2MDQ4MDc2MjgsMjAwNzgwMDkzMyw3NzAyNTU5ODMsMTQ5NTk5MDkwMSwxMjQ5MTUwMTIyLDE4'@;
put 'NTY0MzEyMzUsMTU1NTA4MTY5MiwzMTc1MjE4MTMyLDE5OTYwNjQ5ODYsMjE5ODk1MDgzNywyNTU0MjIwODgyLDM5OTk3MTkzMzksMjgyMTgzNDM0OSw3NjY3ODQwMTYsMjk1Mjk5NjgwOCwyNTY2NTk0ODc5LDMyMTAzMTM2NzEsMzIwMzMzNzk1NiwzMzM2NTcxODkxLDEwMzQ0NTcwMjYsMzU4'@;
put 'NDUyODcxMSwyNDY2OTQ4OTAxLDExMzkyNjk5MywzNzU4MzI2MzgzLDMzODI0MTg5NSwxNjg3MTc5MzYsNjY2MzA3MjA1LDExODgxNzk5NjQsNzczNTI5OTEyLDE1NDYwNDU3MzQsMTI5NDc1NzM3MiwxNTIyODA1NDg1LDEzOTYxODIyOTEsMjY0MzgzMzgyMywxNjk1MTgzNzAwLDIzNDM1Mjcz'@;
put 'OTAsMTk4NjY2MTA1MSwxMDE0NDc3NDgwLDIxNzcwMjYzNTAsMTIwNjc1OTE0MiwyNDU2OTU2MDM3LDM0NDA3NzYyNywyNzMwNDg1OTIxLDEyOTA4NjM0NjAsMjgyMDMwMjQxMSwzMTU4NDU0MjczLDMyNTk3MzA4MDAsMzUwNTk1MjY1NywzMzQ1NzY0NzcxLDEwNjIxNzAwOCwzNTE2MDY1ODE3'@;
put 'LDM2MDYwMDgzNDQsMzYwMDM1MjgwNCwxNDMyNzI1Nzc2LDQwOTQ1NzE5MDksMTQ2NzAzMTU5NCwyNzU0MjMzNDQsODUxMTY5NzIwLDQzMDIyNzczNCwzMTAwODIzNzUyLDUwNjk0ODYxNiwxMzYzMjU4MTk1LDY1OTA2MDU1NiwzNzUwNjg1NTkzLDg4Mzk5Nzg3NywzNzg1MDUwMjgwLDk1ODEz'@;
put 'OTU3MSwzMzE4MzA3NDI3LDEzMjI4MjIyMTgsMzgxMjcyMzQwMywxNTM3MDAyMDYzLDIwMDMwMzQ5OTUsMTc0Nzg3Mzc3OSwzNjAyMDM2ODk5LDE5NTU1NjIyMjIsMTU3NTk5MDAxMiwyMDI0MTA0ODE1LDExMjU1OTI5MjgsMjIyNzczMDQ1MiwyNzE2OTA0MzA2LDIzNjE4NTI0MjQsNDQyNzc2'@;
put 'MDQ0LDI0Mjg0MzY0NzQsNTkzNjk4MzQ0LDI3NTY3MzQxODcsMzczMzExMDI0OSwzMjA0MDMxNDc5LDI5OTkzNTE1NzMsMzMyOTMyNTI5OCwzODE1OTIwNDI3LDMzOTE1Njk2MTQsMzkyODM4MzkwMCwzNTE1MjY3MjcxLDU2NjI4MDcxMSwzOTQwMTg3NjA2LDM0NTQwNjk1MzQsNDExODYzMDI3'@;
put 'MSw0MDAwMjM5OTkyLDExNjQxODQ3NCwxOTE0MTM4NTU0LDE3NDI5MjQyMSwyNzMxMDU1MjcwLDI4OTM4MDM1NiwzMjAzOTkzMDA2LDQ2MDM5MzI2OSwzMjA2MjAzMTUsNjg1NDcxNzMzLDU4NzQ5NjgzNiw4NTIxNDI5NzEsMTA4Njc5Mjg1MSwxMDE3MDM2Mjk4LDM2NTU0MzEwMCwxMTI2MDAw'@;
put 'NTgwLDI2MTgyOTc2NzYsMTI4ODAzMzQ3MCwzNDA5ODU1MTU4LDE1MDE1MDU5NDgsNDIzNDUwOTg2NiwxNjA3MTY3OTE1LDk4NzE2NzQ2OCwxODE2NDAyMzE2LDEyNDYxODk1OTFdO2Z1bmN0aW9uIGVlKCl7aWYoISh0aGlzIGluc3RhbmNlb2YgZWUpKXJldHVybiBuZXcgZWU7WS5jYWxsKHRo'@;
put 'aXMpLHRoaXMuaD1bMTc3OTAzMzcwMyw0MDg5MjM1NzIwLDMxNDQxMzQyNzcsMjIyNzg3MzU5NSwxMDEzOTA0MjQyLDQyNzExNzU3MjMsMjc3MzQ4MDc2MiwxNTk1NzUwMTI5LDEzNTk4OTMxMTksMjkxNzU2NTEzNywyNjAwODIyOTI0LDcyNTUxMTE5OSw1Mjg3MzQ2MzUsNDIxNTM4OTU0Nywx'@;
put 'NTQxNDU5MjI1LDMyNzAzMzIwOV0sdGhpcy5rPXEsdGhpcy5XPW5ldyBBcnJheSgxNjApfWZ1bmN0aW9uIEooeCxDLFQsSCxqKXt2YXIgRT14JlRefngmajtyZXR1cm4gRTwwJiYoRSs9NDI5NDk2NzI5NiksRX1mdW5jdGlvbiBuZSh4LEMsVCxILGosRSl7dmFyIG09QyZIXn5DJkU7cmV0dXJu'@;
put 'IG08MCYmKG0rPTQyOTQ5NjcyOTYpLG19ZnVuY3Rpb24gaWUoeCxDLFQsSCxqKXt2YXIgRT14JlReeCZqXlQmajtyZXR1cm4gRTwwJiYoRSs9NDI5NDk2NzI5NiksRX1mdW5jdGlvbiBsZSh4LEMsVCxILGosRSl7dmFyIG09QyZIXkMmRV5IJkU7cmV0dXJuIG08MCYmKG0rPTQyOTQ5NjcyOTYp'@;
put 'LG19ZnVuY3Rpb24gbWUoeCxDKXt2YXIgRT1CKHgsQywyOCleQihDLHgsMileQihDLHgsNyk7cmV0dXJuIEU8MCYmKEUrPTQyOTQ5NjcyOTYpLEV9ZnVuY3Rpb24gX2UoeCxDKXt2YXIgRT13KHgsQywyOCledyhDLHgsMiledyhDLHgsNyk7cmV0dXJuIEU8MCYmKEUrPTQyOTQ5NjcyOTYpLEV9'@;
put 'ZnVuY3Rpb24gVGUoeCxDKXt2YXIgRT1CKHgsQywxNCleQih4LEMsMTgpXkIoQyx4LDkpO3JldHVybiBFPDAmJihFKz00Mjk0OTY3Mjk2KSxFfWZ1bmN0aW9uIFNlKHgsQyl7dmFyIEU9dyh4LEMsMTQpXncoeCxDLDE4KV53KEMseCw5KTtyZXR1cm4gRTwwJiYoRSs9NDI5NDk2NzI5NiksRX1m'@;
put 'dW5jdGlvbiBqZSh4LEMpe3ZhciBFPUIoeCxDLDEpXkIoeCxDLDgpXlAoeCxDLDcpO3JldHVybiBFPDAmJihFKz00Mjk0OTY3Mjk2KSxFfWZ1bmN0aW9uIFYoeCxDKXt2YXIgRT13KHgsQywxKV53KHgsQyw4KV5GKHgsQyw3KTtyZXR1cm4gRTwwJiYoRSs9NDI5NDk2NzI5NiksRX1mdW5jdGlv'@;
put 'biBwKHgsQyl7dmFyIEU9Qih4LEMsMTkpXkIoQyx4LDI5KV5QKHgsQyw2KTtyZXR1cm4gRTwwJiYoRSs9NDI5NDk2NzI5NiksRX1mdW5jdGlvbiBiKHgsQyl7dmFyIEU9dyh4LEMsMTkpXncoQyx4LDI5KV5GKHgsQyw2KTtyZXR1cm4gRTwwJiYoRSs9NDI5NDk2NzI5NiksRX1JLmluaGVyaXRz'@;
put 'KGVlLFkpLHVlLmV4cG9ydHM9ZWUsZWUuYmxvY2tTaXplPTEwMjQsZWUub3V0U2l6ZT01MTIsZWUuaG1hY1N0cmVuZ3RoPTE5MixlZS5wYWRMZW5ndGg9MTI4LGVlLnByb3RvdHlwZS5fcHJlcGFyZUJsb2NrPWZ1bmN0aW9uKEMsVCl7Zm9yKHZhciBIPXRoaXMuVyxqPTA7ajwzMjtqKyspSFtq'@;
put 'XT1DW1Qral07Zm9yKDtqPEgubGVuZ3RoO2orPTIpe3ZhciBFPXAoSFtqLTRdLEhbai0zXSksbT1iKEhbai00XSxIW2otM10pLEE9SFtqLTE0XSxhZT1IW2otMTNdLHRlPWplKEhbai0zMF0sSFtqLTI5XSksc2U9VihIW2otMzBdLEhbai0yOV0pLHdlPUhbai0zMl0sVWU9SFtqLTMxXTtIW2pd'@;
put 'PUwoRSxtLEEsYWUsdGUsc2Usd2UsVWUpLEhbaisxXT1LKEUsbSxBLGFlLHRlLHNlLHdlLFVlKX19LGVlLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKEMsVCl7dGhpcy5fcHJlcGFyZUJsb2NrKEMsVCk7dmFyIEg9dGhpcy5XLGo9dGhpcy5oWzBdLEU9dGhpcy5oWzFdLG09dGhpcy5oWzJd'@;
put 'LEE9dGhpcy5oWzNdLGFlPXRoaXMuaFs0XSx0ZT10aGlzLmhbNV0sc2U9dGhpcy5oWzZdLHdlPXRoaXMuaFs3XSxVZT10aGlzLmhbOF0sSmU9dGhpcy5oWzldLG90PXRoaXMuaFsxMF0seGU9dGhpcy5oWzExXSx2ZT10aGlzLmhbMTJdLFhlPXRoaXMuaFsxM10semU9dGhpcy5oWzE0XSxEZT10'@;
put 'aGlzLmhbMTVdO2codGhpcy5rLmxlbmd0aD09PUgubGVuZ3RoKTtmb3IodmFyIEZlPTA7RmU8SC5sZW5ndGg7RmUrPTIpe3ZhciBPZT16ZSxJZT1EZSxWZT1UZShVZSxKZSksa2U9U2UoVWUsSmUpLEFlPUooVWUsMCxvdCwwLHZlKSxfdD1uZSgwLEplLDAseGUsMCxYZSksbnQ9dGhpcy5rW0Zl'@;
put 'XSxRZT10aGlzLmtbRmUrMV0sdW49SFtGZV0seXQ9SFtGZSsxXSxNdD1VKE9lLEllLFZlLGtlLEFlLF90LG50LFFlLHVuLHl0KSxEdD1XKE9lLEllLFZlLGtlLEFlLF90LG50LFFlLHVuLHl0KTtPZT1tZShqLEUpLEllPV9lKGosRSksVmU9aWUoaiwwLG0sMCxhZSksa2U9bGUoMCxFLDAsQSww'@;
put 'LHRlKTt2YXIgaXQ9eihPZSxJZSxWZSxrZSksJGU9TihPZSxJZSxWZSxrZSk7emU9dmUsRGU9WGUsdmU9b3QsWGU9eGUsb3Q9VWUseGU9SmUsVWU9eihzZSx3ZSxNdCxEdCksSmU9Tih3ZSx3ZSxNdCxEdCksc2U9YWUsd2U9dGUsYWU9bSx0ZT1BLG09aixBPUUsaj16KE10LER0LGl0LCRlKSxF'@;
put 'PU4oTXQsRHQsaXQsJGUpfU8odGhpcy5oLDAsaixFKSxPKHRoaXMuaCwyLG0sQSksTyh0aGlzLmgsNCxhZSx0ZSksTyh0aGlzLmgsNixzZSx3ZSksTyh0aGlzLmgsOCxVZSxKZSksTyh0aGlzLmgsMTAsb3QseGUpLE8odGhpcy5oLDEyLHZlLFhlKSxPKHRoaXMuaCwxNCx6ZSxEZSl9LGVlLnBy'@;
put 'b3RvdHlwZS5fZGlnZXN0PWZ1bmN0aW9uKEMpe3JldHVybiJoZXgiPT09Qz9JLnRvSGV4MzIodGhpcy5oLCJiaWciKTpJLnNwbGl0MzIodGhpcy5oLCJiaWciKX19LDcwMzg6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIF89eSg2NDM2KS5yb3RyMzI7ZnVuY3Rpb24gQihMLEssVSl7cmV0'@;
put 'dXJuIEwmS15+TCZVfWZ1bmN0aW9uIHcoTCxLLFUpe3JldHVybiBMJkteTCZVXksmVX1mdW5jdGlvbiBQKEwsSyxVKXtyZXR1cm4gTF5LXlV9WC5mdF8xPWZ1bmN0aW9uIGcoTCxLLFUsVyl7cmV0dXJuIDA9PT1MP0IoSyxVLFcpOjE9PT1MfHwzPT09TD9QKEssVSxXKToyPT09TD93KEssVSxX'@;
put 'KTp2b2lkIDB9LFguY2gzMj1CLFgubWFqMzI9dyxYLnAzMj1QLFguczBfMjU2PWZ1bmN0aW9uIEYoTCl7cmV0dXJuIF8oTCwyKV5fKEwsMTMpXl8oTCwyMil9LFguczFfMjU2PWZ1bmN0aW9uIE8oTCl7cmV0dXJuIF8oTCw2KV5fKEwsMTEpXl8oTCwyNSl9LFguZzBfMjU2PWZ1bmN0aW9uIHoo'@;
put 'TCl7cmV0dXJuIF8oTCw3KV5fKEwsMTgpXkw+Pj4zfSxYLmcxXzI1Nj1mdW5jdGlvbiBOKEwpe3JldHVybiBfKEwsMTcpXl8oTCwxOSleTD4+PjEwfX0sNjQzNjoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDk3NDYpLF89eSg1NzE3KTtmdW5jdGlvbiBnKGIseCl7cmV0dXJuISg1'@;
put 'NTI5NiE9KDY0NTEyJmIuY2hhckNvZGVBdCh4KSl8fHg8MHx8eCsxPj1iLmxlbmd0aCkmJjU2MzIwPT0oNjQ1MTImYi5jaGFyQ29kZUF0KHgrMSkpfWZ1bmN0aW9uIFAoYil7cmV0dXJuKGI+Pj4yNHxiPj4+OCY2NTI4MHxiPDw4JjE2NzExNjgwfCgyNTUmYik8PDI0KT4+PjB9ZnVuY3Rpb24g'@;
put 'TyhiKXtyZXR1cm4gMT09PWIubGVuZ3RoPyIwIitiOmJ9ZnVuY3Rpb24geihiKXtyZXR1cm4gNz09PWIubGVuZ3RoPyIwIitiOjY9PT1iLmxlbmd0aD8iMDAiK2I6NT09PWIubGVuZ3RoPyIwMDAiK2I6ND09PWIubGVuZ3RoPyIwMDAwIitiOjM9PT1iLmxlbmd0aD8iMDAwMDAiK2I6Mj09PWIu'@;
put 'bGVuZ3RoPyIwMDAwMDAiK2I6MT09PWIubGVuZ3RoPyIwMDAwMDAwIitiOmJ9WC5pbmhlcml0cz1fLFgudG9BcnJheT1mdW5jdGlvbiBCKGIseCl7aWYoQXJyYXkuaXNBcnJheShiKSlyZXR1cm4gYi5zbGljZSgpO2lmKCFiKXJldHVybltdO3ZhciBDPVtdO2lmKCJzdHJpbmciPT10eXBlb2Yg'@;
put 'YilpZih4KXtpZigiaGV4Ij09PXgpZm9yKChiPWIucmVwbGFjZSgvW15hLXowLTldKy9naSwiIikpLmxlbmd0aCUyIT0wJiYoYj0iMCIrYiksSD0wO0g8Yi5sZW5ndGg7SCs9MilDLnB1c2gocGFyc2VJbnQoYltIXStiW0grMV0sMTYpKX1lbHNlIGZvcih2YXIgVD0wLEg9MDtIPGIubGVuZ3Ro'@;
put 'O0grKyl7dmFyIGo9Yi5jaGFyQ29kZUF0KEgpO2o8MTI4P0NbVCsrXT1qOmo8MjA0OD8oQ1tUKytdPWo+PjZ8MTkyLENbVCsrXT02MyZqfDEyOCk6ZyhiLEgpPyhqPTY1NTM2KygoMTAyMyZqKTw8MTApKygxMDIzJmIuY2hhckNvZGVBdCgrK0gpKSxDW1QrK109aj4+MTh8MjQwLENbVCsrXT1q'@;
put 'Pj4xMiY2M3wxMjgsQ1tUKytdPWo+PjYmNjN8MTI4LENbVCsrXT02MyZqfDEyOCk6KENbVCsrXT1qPj4xMnwyMjQsQ1tUKytdPWo+PjYmNjN8MTI4LENbVCsrXT02MyZqfDEyOCl9ZWxzZSBmb3IoSD0wO0g8Yi5sZW5ndGg7SCsrKUNbSF09MHxiW0hdO3JldHVybiBDfSxYLnRvSGV4PWZ1bmN0'@;
put 'aW9uIHcoYil7Zm9yKHZhciB4PSIiLEM9MDtDPGIubGVuZ3RoO0MrKyl4Kz1PKGJbQ10udG9TdHJpbmcoMTYpKTtyZXR1cm4geH0sWC5odG9ubD1QLFgudG9IZXgzMj1mdW5jdGlvbiBGKGIseCl7Zm9yKHZhciBDPSIiLFQ9MDtUPGIubGVuZ3RoO1QrKyl7dmFyIEg9YltUXTsibGl0dGxlIj09'@;
put 'PXgmJihIPVAoSCkpLEMrPXooSC50b1N0cmluZygxNikpfXJldHVybiBDfSxYLnplcm8yPU8sWC56ZXJvOD16LFguam9pbjMyPWZ1bmN0aW9uIE4oYix4LEMsVCl7dmFyIEg9Qy14O0koSCU0PT0wKTtmb3IodmFyIGo9bmV3IEFycmF5KEgvNCksRT0wLG09eDtFPGoubGVuZ3RoO0UrKyxtKz00'@;
put 'KWpbRV09KCJiaWciPT09VD9iW21dPDwyNHxiW20rMV08PDE2fGJbbSsyXTw8OHxiW20rM106YlttKzNdPDwyNHxiW20rMl08PDE2fGJbbSsxXTw8OHxiW21dKT4+PjA7cmV0dXJuIGp9LFguc3BsaXQzMj1mdW5jdGlvbiBMKGIseCl7Zm9yKHZhciBDPW5ldyBBcnJheSg0KmIubGVuZ3RoKSxU'@;
put 'PTAsSD0wO1Q8Yi5sZW5ndGg7VCsrLEgrPTQpe3ZhciBqPWJbVF07ImJpZyI9PT14PyhDW0hdPWo+Pj4yNCxDW0grMV09aj4+PjE2JjI1NSxDW0grMl09aj4+PjgmMjU1LENbSCszXT0yNTUmaik6KENbSCszXT1qPj4+MjQsQ1tIKzJdPWo+Pj4xNiYyNTUsQ1tIKzFdPWo+Pj44JjI1NSxDW0hd'@;
put 'PTI1NSZqKX1yZXR1cm4gQ30sWC5yb3RyMzI9ZnVuY3Rpb24gSyhiLHgpe3JldHVybiBiPj4+eHxiPDwzMi14fSxYLnJvdGwzMj1mdW5jdGlvbiBVKGIseCl7cmV0dXJuIGI8PHh8Yj4+PjMyLXh9LFguc3VtMzI9ZnVuY3Rpb24gVyhiLHgpe3JldHVybiBiK3g+Pj4wfSxYLnN1bTMyXzM9ZnVu'@;
put 'Y3Rpb24gWShiLHgsQyl7cmV0dXJuIGIreCtDPj4+MH0sWC5zdW0zMl80PWZ1bmN0aW9uIHEoYix4LEMsVCl7cmV0dXJuIGIreCtDK1Q+Pj4wfSxYLnN1bTMyXzU9ZnVuY3Rpb24gZWUoYix4LEMsVCxIKXtyZXR1cm4gYit4K0MrVCtIPj4+MH0sWC5zdW02ND1mdW5jdGlvbiBKKGIseCxDLFQp'@;
put 'e3ZhciBFPVQrYlt4KzFdPj4+MDtiW3hdPShFPFQ/MTowKStDK2JbeF0+Pj4wLGJbeCsxXT1FfSxYLnN1bTY0X2hpPWZ1bmN0aW9uIG5lKGIseCxDLFQpe3JldHVybih4K1Q+Pj4wPHg/MTowKStiK0M+Pj4wfSxYLnN1bTY0X2xvPWZ1bmN0aW9uIGllKGIseCxDLFQpe3JldHVybiB4K1Q+Pj4w'@;
put 'fSxYLnN1bTY0XzRfaGk9ZnVuY3Rpb24gbGUoYix4LEMsVCxILGosRSxtKXt2YXIgQT0wLGFlPXg7cmV0dXJuIEErPShhZT1hZStUPj4+MCk8eD8xOjAsQSs9KGFlPWFlK2o+Pj4wKTxqPzE6MCxiK0MrSCtFKyhBKz0oYWU9YWUrbT4+PjApPG0/MTowKT4+PjB9LFguc3VtNjRfNF9sbz1mdW5j'@;
put 'dGlvbiBtZShiLHgsQyxULEgsaixFLG0pe3JldHVybiB4K1QraittPj4+MH0sWC5zdW02NF81X2hpPWZ1bmN0aW9uIF9lKGIseCxDLFQsSCxqLEUsbSxBLGFlKXt2YXIgdGU9MCxzZT14O3JldHVybiB0ZSs9KHNlPXNlK1Q+Pj4wKTx4PzE6MCx0ZSs9KHNlPXNlK2o+Pj4wKTxqPzE6MCx0ZSs9'@;
put 'KHNlPXNlK20+Pj4wKTxtPzE6MCxiK0MrSCtFK0ErKHRlKz0oc2U9c2UrYWU+Pj4wKTxhZT8xOjApPj4+MH0sWC5zdW02NF81X2xvPWZ1bmN0aW9uIFRlKGIseCxDLFQsSCxqLEUsbSxBLGFlKXtyZXR1cm4geCtUK2orbSthZT4+PjB9LFgucm90cjY0X2hpPWZ1bmN0aW9uIFNlKGIseCxDKXty'@;
put 'ZXR1cm4oeDw8MzItQ3xiPj4+Qyk+Pj4wfSxYLnJvdHI2NF9sbz1mdW5jdGlvbiBqZShiLHgsQyl7cmV0dXJuKGI8PDMyLUN8eD4+PkMpPj4+MH0sWC5zaHI2NF9oaT1mdW5jdGlvbiBWKGIseCxDKXtyZXR1cm4gYj4+PkN9LFguc2hyNjRfbG89ZnVuY3Rpb24gcChiLHgsQyl7cmV0dXJuKGI8'@;
put 'PDMyLUN8eD4+PkMpPj4+MH19LDg4MjQ6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9RnVuY3Rpb24ucHJvdG90eXBlLmNhbGwsXz1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LGc9eSg4NjEyKTt1ZS5leHBvcnRzPWcuY2FsbChJLF8pfSwyMTU2Oih1ZSxYLHkpPT57InVz'@;
put 'ZSBzdHJpY3QiO3ZhciBJPXkoMzcxNSksXz15KDQ1MDQpLGc9eSg5NzQ2KTtmdW5jdGlvbiBCKHcpe2lmKCEodGhpcyBpbnN0YW5jZW9mIEIpKXJldHVybiBuZXcgQih3KTt0aGlzLmhhc2g9dy5oYXNoLHRoaXMucHJlZFJlc2lzdD0hIXcucHJlZFJlc2lzdCx0aGlzLm91dExlbj10aGlzLmhh'@;
put 'c2gub3V0U2l6ZSx0aGlzLm1pbkVudHJvcHk9dy5taW5FbnRyb3B5fHx0aGlzLmhhc2guaG1hY1N0cmVuZ3RoLHRoaXMuX3Jlc2VlZD1udWxsLHRoaXMucmVzZWVkSW50ZXJ2YWw9bnVsbCx0aGlzLks9bnVsbCx0aGlzLlY9bnVsbDt2YXIgUD1fLnRvQXJyYXkody5lbnRyb3B5LHcuZW50cm9w'@;
put 'eUVuY3x8ImhleCIpLEY9Xy50b0FycmF5KHcubm9uY2Usdy5ub25jZUVuY3x8ImhleCIpLE89Xy50b0FycmF5KHcucGVycyx3LnBlcnNFbmN8fCJoZXgiKTtnKFAubGVuZ3RoPj10aGlzLm1pbkVudHJvcHkvOCwiTm90IGVub3VnaCBlbnRyb3B5LiBNaW5pbXVtIGlzOiAiK3RoaXMubWluRW50'@;
put 'cm9weSsiIGJpdHMiKSx0aGlzLl9pbml0KFAsRixPKX11ZS5leHBvcnRzPUIsQi5wcm90b3R5cGUuX2luaXQ9ZnVuY3Rpb24oUCxGLE8pe3ZhciB6PVAuY29uY2F0KEYpLmNvbmNhdChPKTt0aGlzLks9bmV3IEFycmF5KHRoaXMub3V0TGVuLzgpLHRoaXMuVj1uZXcgQXJyYXkodGhpcy5vdXRM'@;
put 'ZW4vOCk7Zm9yKHZhciBOPTA7Tjx0aGlzLlYubGVuZ3RoO04rKyl0aGlzLktbTl09MCx0aGlzLlZbTl09MTt0aGlzLl91cGRhdGUoeiksdGhpcy5fcmVzZWVkPTEsdGhpcy5yZXNlZWRJbnRlcnZhbD0yODE0NzQ5NzY3MTA2NTZ9LEIucHJvdG90eXBlLl9obWFjPWZ1bmN0aW9uKCl7cmV0dXJu'@;
put 'IG5ldyBJLmhtYWModGhpcy5oYXNoLHRoaXMuSyl9LEIucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oUCl7dmFyIEY9dGhpcy5faG1hYygpLnVwZGF0ZSh0aGlzLlYpLnVwZGF0ZShbMF0pO1AmJihGPUYudXBkYXRlKFApKSx0aGlzLks9Ri5kaWdlc3QoKSx0aGlzLlY9dGhpcy5faG1hYygp'@;
put 'LnVwZGF0ZSh0aGlzLlYpLmRpZ2VzdCgpLFAmJih0aGlzLks9dGhpcy5faG1hYygpLnVwZGF0ZSh0aGlzLlYpLnVwZGF0ZShbMV0pLnVwZGF0ZShQKS5kaWdlc3QoKSx0aGlzLlY9dGhpcy5faG1hYygpLnVwZGF0ZSh0aGlzLlYpLmRpZ2VzdCgpKX0sQi5wcm90b3R5cGUucmVzZWVkPWZ1bmN0'@;
put 'aW9uKFAsRixPLHopeyJzdHJpbmciIT10eXBlb2YgRiYmKHo9TyxPPUYsRj1udWxsKSxQPV8udG9BcnJheShQLEYpLE89Xy50b0FycmF5KE8seiksZyhQLmxlbmd0aD49dGhpcy5taW5FbnRyb3B5LzgsIk5vdCBlbm91Z2ggZW50cm9weS4gTWluaW11bSBpczogIit0aGlzLm1pbkVudHJvcHkr'@;
put 'IiBiaXRzIiksdGhpcy5fdXBkYXRlKFAuY29uY2F0KE98fFtdKSksdGhpcy5fcmVzZWVkPTF9LEIucHJvdG90eXBlLmdlbmVyYXRlPWZ1bmN0aW9uKFAsRixPLHope2lmKHRoaXMuX3Jlc2VlZD50aGlzLnJlc2VlZEludGVydmFsKXRocm93IG5ldyBFcnJvcigiUmVzZWVkIGlzIHJlcXVpcmVk'@;
put 'Iik7InN0cmluZyIhPXR5cGVvZiBGJiYoej1PLE89RixGPW51bGwpLE8mJihPPV8udG9BcnJheShPLHp8fCJoZXgiKSx0aGlzLl91cGRhdGUoTykpO2Zvcih2YXIgTj1bXTtOLmxlbmd0aDxQOyl0aGlzLlY9dGhpcy5faG1hYygpLnVwZGF0ZSh0aGlzLlYpLmRpZ2VzdCgpLE49Ti5jb25jYXQo'@;
put 'dGhpcy5WKTt2YXIgTD1OLnNsaWNlKDAsUCk7cmV0dXJuIHRoaXMuX3VwZGF0ZShPKSx0aGlzLl9yZXNlZWQrKyxfLmVuY29kZShMLEYpfX0sNjQ1Oih1ZSxYKT0+e1gucmVhZD1mdW5jdGlvbih5LEksXyxnLEIpe3ZhciB3LFAsRj04KkItZy0xLE89KDE8PEYpLTEsej1PPj4xLE49LTcsTD1f'@;
put 'P0ItMTowLEs9Xz8tMToxLFU9eVtJK0xdO2ZvcihMKz1LLHc9VSYoMTw8LU4pLTEsVT4+PS1OLE4rPUY7Tj4wO3c9MjU2KncreVtJK0xdLEwrPUssTi09OCk7Zm9yKFA9dyYoMTw8LU4pLTEsdz4+PS1OLE4rPWc7Tj4wO1A9MjU2KlAreVtJK0xdLEwrPUssTi09OCk7aWYoMD09PXcpdz0xLXo7'@;
put 'ZWxzZXtpZih3PT09TylyZXR1cm4gUD9OYU46MS8wKihVPy0xOjEpO1ArPU1hdGgucG93KDIsZyksdy09en1yZXR1cm4oVT8tMToxKSpQKk1hdGgucG93KDIsdy1nKX0sWC53cml0ZT1mdW5jdGlvbih5LEksXyxnLEIsdyl7dmFyIFAsRixPLHo9OCp3LUItMSxOPSgxPDx6KS0xLEw9Tj4+MSxL'@;
put 'PTIzPT09Qj9NYXRoLnBvdygyLC0yNCktTWF0aC5wb3coMiwtNzcpOjAsVT1nPzA6dy0xLFc9Zz8xOi0xLFk9STwwfHwwPT09SSYmMS9JPDA/MTowO2ZvcihJPU1hdGguYWJzKEkpLGlzTmFOKEkpfHxJPT09MS8wPyhGPWlzTmFOKEkpPzE6MCxQPU4pOihQPU1hdGguZmxvb3IoTWF0aC5sb2co'@;
put 'SSkvTWF0aC5MTjIpLEkqKE89TWF0aC5wb3coMiwtUCkpPDEmJihQLS0sTyo9MiksKEkrPVArTD49MT9LL086SypNYXRoLnBvdygyLDEtTCkpKk8+PTImJihQKyssTy89MiksUCtMPj1OPyhGPTAsUD1OKTpQK0w+PTE/KEY9KEkqTy0xKSpNYXRoLnBvdygyLEIpLFArPUwpOihGPUkqTWF0aC5w'@;
put 'b3coMixMLTEpKk1hdGgucG93KDIsQiksUD0wKSk7Qj49ODt5W18rVV09MjU1JkYsVSs9VyxGLz0yNTYsQi09OCk7Zm9yKFA9UDw8QnxGLHorPUI7ej4wO3lbXytVXT0yNTUmUCxVKz1XLFAvPTI1Nix6LT04KTt5W18rVS1XXXw9MTI4Kll9fSw1NzE3OnVlPT57dWUuZXhwb3J0cz0iZnVuY3Rp'@;
put 'b24iPT10eXBlb2YgT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbih5LEkpe0kmJih5LnN1cGVyXz1JLHkucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoSS5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTp5LGVudW1lcmFibGU6ITEsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pKX06ZnVu'@;
put 'Y3Rpb24oeSxJKXtpZihJKXt5LnN1cGVyXz1JO3ZhciBfPWZ1bmN0aW9uKCl7fTtfLnByb3RvdHlwZT1JLnByb3RvdHlwZSx5LnByb3RvdHlwZT1uZXcgXyx5LnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj15fX19LDI1ODQ6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg2NDEwKSgpLGc9'@;
put 'eSg3Mzc5KSgiT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyIpLEI9ZnVuY3Rpb24oTyl7cmV0dXJuIShJJiZPJiYib2JqZWN0Ij09dHlwZW9mIE8mJlN5bWJvbC50b1N0cmluZ1RhZyBpbiBPKSYmIltvYmplY3QgQXJndW1lbnRzXSI9PT1nKE8pfSx3PWZ1bmN0aW9uKE8pe3JldHVybiEhQihP'@;
put 'KXx8bnVsbCE9PU8mJiJvYmplY3QiPT10eXBlb2YgTyYmImxlbmd0aCJpbiBPJiYibnVtYmVyIj09dHlwZW9mIE8ubGVuZ3RoJiZPLmxlbmd0aD49MCYmIltvYmplY3QgQXJyYXldIiE9PWcoTykmJiJjYWxsZWUiaW4gTyYmIltvYmplY3QgRnVuY3Rpb25dIj09PWcoTy5jYWxsZWUpfSxQPWZ1'@;
put 'bmN0aW9uKCl7cmV0dXJuIEIoYXJndW1lbnRzKX0oKTtCLmlzTGVnYWN5QXJndW1lbnRzPXcsdWUuZXhwb3J0cz1QP0I6d30sNTMyMDp1ZT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgSSxfLFg9RnVuY3Rpb24ucHJvdG90eXBlLnRvU3RyaW5nLHk9Im9iamVjdCI9PXR5cGVvZiBSZWZsZWN0JiZudWxs'@;
put 'IT09UmVmbGVjdCYmUmVmbGVjdC5hcHBseTtpZigiZnVuY3Rpb24iPT10eXBlb2YgeSYmImZ1bmN0aW9uIj09dHlwZW9mIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSl0cnl7ST1PYmplY3QuZGVmaW5lUHJvcGVydHkoe30sImxlbmd0aCIse2dldDpmdW5jdGlvbigpe3Rocm93IF99fSksXz17fSx5'@;
put 'KGZ1bmN0aW9uKCl7dGhyb3cgNDJ9LG51bGwsSSl9Y2F0Y2goZWUpe2VlIT09XyYmKHk9bnVsbCl9ZWxzZSB5PW51bGw7dmFyIGc9L15ccypjbGFzc1xiLyxCPWZ1bmN0aW9uKEope3RyeXt2YXIgbmU9WC5jYWxsKEopO3JldHVybiBnLnRlc3QobmUpfWNhdGNoe3JldHVybiExfX0sdz1mdW5j'@;
put 'dGlvbihKKXt0cnl7cmV0dXJuIUIoSikmJihYLmNhbGwoSiksITApfWNhdGNoe3JldHVybiExfX0sUD1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLFU9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmISFTeW1ib2wudG9TdHJpbmdUYWcsVz0hKDAgaW5bLF0pLFk9ZnVuY3Rpb24oKXtyZXR1'@;
put 'cm4hMX07aWYoIm9iamVjdCI9PXR5cGVvZiBkb2N1bWVudCl7dmFyIHE9ZG9jdW1lbnQuYWxsO1AuY2FsbChxKT09PVAuY2FsbChkb2N1bWVudC5hbGwpJiYoWT1mdW5jdGlvbihKKXtpZigoV3x8IUopJiYodHlwZW9mIEo+InUifHwib2JqZWN0Ij09dHlwZW9mIEopKXRyeXt2YXIgbmU9UC5j'@;
put 'YWxsKEopO3JldHVybigiW29iamVjdCBIVE1MQWxsQ29sbGVjdGlvbl0iPT09bmV8fCJbb2JqZWN0IEhUTUwgZG9jdW1lbnQuYWxsIGNsYXNzXSI9PT1uZXx8IltvYmplY3QgSFRNTENvbGxlY3Rpb25dIj09PW5lfHwiW29iamVjdCBPYmplY3RdIj09PW5lKSYmbnVsbD09SigiIil9Y2F0Y2h7'@;
put 'fXJldHVybiExfSl9dWUuZXhwb3J0cz15P2Z1bmN0aW9uKEope2lmKFkoSikpcmV0dXJuITA7aWYoIUp8fCJmdW5jdGlvbiIhPXR5cGVvZiBKJiYib2JqZWN0IiE9dHlwZW9mIEopcmV0dXJuITE7dHJ5e3koSixudWxsLEkpfWNhdGNoKG5lKXtpZihuZSE9PV8pcmV0dXJuITF9cmV0dXJuIUIo'@;
put 'SikmJncoSil9OmZ1bmN0aW9uKEope2lmKFkoSikpcmV0dXJuITA7aWYoIUp8fCJmdW5jdGlvbiIhPXR5cGVvZiBKJiYib2JqZWN0IiE9dHlwZW9mIEopcmV0dXJuITE7aWYoVSlyZXR1cm4gdyhKKTtpZihCKEopKXJldHVybiExO3ZhciBuZT1QLmNhbGwoSik7cmV0dXJuISgiW29iamVjdCBG'@;
put 'dW5jdGlvbl0iIT09bmUmJiJbb2JqZWN0IEdlbmVyYXRvckZ1bmN0aW9uXSIhPT1uZSYmIS9eXFtvYmplY3QgSFRNTC8udGVzdChuZSkpJiZ3KEopfX0sODY2MjoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgeixJPXkoNzM3OSksZz15KDkyNDYpKC9eXHMqKD86ZnVuY3Rpb24pP1wqLyks'@;
put 'Qj15KDY0MTApKCksdz15KDE2MTgpLFA9SSgiT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyIpLEY9SSgiRnVuY3Rpb24ucHJvdG90eXBlLnRvU3RyaW5nIik7dWUuZXhwb3J0cz1mdW5jdGlvbihMKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgTClyZXR1cm4hMTtpZihnKEYoTCkpKXJldHVybiEw'@;
put 'O2lmKCFCKXJldHVybiJbb2JqZWN0IEdlbmVyYXRvckZ1bmN0aW9uXSI9PT1QKEwpO2lmKCF3KXJldHVybiExO2lmKHR5cGVvZiB6PiJ1Iil7dmFyIFU9ZnVuY3Rpb24oKXtpZighQilyZXR1cm4hMTt0cnl7cmV0dXJuIEZ1bmN0aW9uKCJyZXR1cm4gZnVuY3Rpb24qKCkge30iKSgpfWNhdGNo'@;
put 'e319KCk7ej0hIVUmJncoVSl9cmV0dXJuIHcoTCk9PT16fX0sODYxMTp1ZT0+eyJ1c2Ugc3RyaWN0Ijt1ZS5leHBvcnRzPWZ1bmN0aW9uKHkpe3JldHVybiB5IT15fX0sMzYwOih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoNTU1OSksXz15KDQyODkpLGc9eSg4NjExKSxCPXkoOTQx'@;
put 'NSksdz15KDMxOTQpLFA9SShCKCksTnVtYmVyKTtfKFAse2dldFBvbHlmaWxsOkIsaW1wbGVtZW50YXRpb246ZyxzaGltOnd9KSx1ZS5leHBvcnRzPVB9LDk0MTU6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg4NjExKTt1ZS5leHBvcnRzPWZ1bmN0aW9uKCl7cmV0dXJuIE51bWJl'@;
put 'ci5pc05hTiYmTnVtYmVyLmlzTmFOKE5hTikmJiFOdW1iZXIuaXNOYU4oImEiKT9OdW1iZXIuaXNOYU46SX19LDMxOTQ6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg0Mjg5KSxfPXkoOTQxNSk7dWUuZXhwb3J0cz1mdW5jdGlvbigpe3ZhciBCPV8oKTtyZXR1cm4gSShOdW1iZXIs'@;
put 'e2lzTmFOOkJ9LHtpc05hTjpmdW5jdGlvbigpe3JldHVybiBOdW1iZXIuaXNOYU4hPT1CfX0pLEJ9fSw4NDIwOih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciB3LEk9eSg3Mzc5KSxfPXkoNjQxMCkoKSxnPXkoODgyNCksQj15KDcyOTYpO2lmKF8pe3ZhciBQPUkoIlJlZ0V4cC5wcm90b3R5'@;
put 'cGUuZXhlYyIpLEY9e30sTz1mdW5jdGlvbigpe3Rocm93IEZ9LHo9e3RvU3RyaW5nOk8sdmFsdWVPZjpPfTsic3ltYm9sIj09dHlwZW9mIFN5bWJvbC50b1ByaW1pdGl2ZSYmKHpbU3ltYm9sLnRvUHJpbWl0aXZlXT1PKSx3PWZ1bmN0aW9uKFUpe2lmKCFVfHwib2JqZWN0IiE9dHlwZW9mIFUp'@;
put 'cmV0dXJuITE7dmFyIFc9QihVLCJsYXN0SW5kZXgiKTtpZighV3x8IWcoVywidmFsdWUiKSlyZXR1cm4hMTt0cnl7UChVLHopfWNhdGNoKHEpe3JldHVybiBxPT09Rn19fWVsc2V7dmFyIE49SSgiT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyIpO3c9ZnVuY3Rpb24oVSl7cmV0dXJuISghVXx8'@;
put 'Im9iamVjdCIhPXR5cGVvZiBVJiYiZnVuY3Rpb24iIT10eXBlb2YgVSkmJiJbb2JqZWN0IFJlZ0V4cF0iPT09TihVKX19dWUuZXhwb3J0cz13fSw1NjkyOih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoNjQzMCk7dWUuZXhwb3J0cz1mdW5jdGlvbihnKXtyZXR1cm4hIUkoZyl9fSw1'@;
put 'ODI2OnVlPT57dmFyIFg9e30udG9TdHJpbmc7dWUuZXhwb3J0cz1BcnJheS5pc0FycmF5fHxmdW5jdGlvbih5KXtyZXR1cm4iW29iamVjdCBBcnJheV0iPT1YLmNhbGwoeSl9fSw2ODEzOih1ZSxYLHkpPT57bGV0IEk7dHJ5e0k9eSg3Nyl9Y2F0Y2h7ST15KDQxMjkpfWNvbnN0IF89eSg4OTgx'@;
put 'KSx7c3RyaW5naWZ5Omcsc3RyaXBCb206Qn09eSg2NzgwKTtmdW5jdGlvbiBQKCl7cmV0dXJuKFA9X2FzeW5jVG9HZW5lcmF0b3IoZnVuY3Rpb24qKFcsWT17fSl7InN0cmluZyI9PXR5cGVvZiBZJiYoWT17ZW5jb2Rpbmc6WX0pO2NvbnN0IHE9WS5mc3x8SSxlZT0hKCJ0aHJvd3MiaW4gWSl8'@;
put 'fFkudGhyb3dzO2xldCBuZSxKPXlpZWxkIF8uZnJvbUNhbGxiYWNrKHEucmVhZEZpbGUpKFcsWSk7Sj1CKEopO3RyeXtuZT1KU09OLnBhcnNlKEosWT9ZLnJldml2ZXI6bnVsbCl9Y2F0Y2goaWUpe2lmKGVlKXRocm93IGllLm1lc3NhZ2U9YCR7V306ICR7aWUubWVzc2FnZX1gLGllO3JldHVy'@;
put 'biBudWxsfXJldHVybiBuZX0pKS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9Y29uc3QgRj1fLmZyb21Qcm9taXNlKGZ1bmN0aW9uIHcoVyl7cmV0dXJuIFAuYXBwbHkodGhpcyxhcmd1bWVudHMpfSk7ZnVuY3Rpb24gTigpe3JldHVybihOPV9hc3luY1RvR2VuZXJhdG9yKGZ1bmN0aW9uKihXLFks'@;
put 'cT17fSl7Y29uc3QgZWU9cS5mc3x8SSxKPWcoWSxxKTt5aWVsZCBfLmZyb21DYWxsYmFjayhlZS53cml0ZUZpbGUpKFcsSixxKX0pKS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9Y29uc3QgTD1fLmZyb21Qcm9taXNlKGZ1bmN0aW9uIHooVyxZKXtyZXR1cm4gTi5hcHBseSh0aGlzLGFyZ3VtZW50'@;
put 'cyl9KTt1ZS5leHBvcnRzPXtyZWFkRmlsZTpGLHJlYWRGaWxlU3luYzpmdW5jdGlvbiBPKFcsWT17fSl7InN0cmluZyI9PXR5cGVvZiBZJiYoWT17ZW5jb2Rpbmc6WX0pO2NvbnN0IHE9WS5mc3x8SSxlZT0hKCJ0aHJvd3MiaW4gWSl8fFkudGhyb3dzO3RyeXtsZXQgSj1xLnJlYWRGaWxlU3lu'@;
put 'YyhXLFkpO3JldHVybiBKPUIoSiksSlNPTi5wYXJzZShKLFkucmV2aXZlcil9Y2F0Y2goSil7aWYoZWUpdGhyb3cgSi5tZXNzYWdlPWAke1d9OiAke0oubWVzc2FnZX1gLEo7cmV0dXJuIG51bGx9fSx3cml0ZUZpbGU6TCx3cml0ZUZpbGVTeW5jOmZ1bmN0aW9uIEsoVyxZLHE9e30pe2NvbnN0'@;
put 'IGVlPXEuZnN8fEksSj1nKFkscSk7cmV0dXJuIGVlLndyaXRlRmlsZVN5bmMoVyxKLHEpfX19LDY3ODA6KHVlLFgseSk9Pnt2YXIgST15KDg3NjQpLkJ1ZmZlcjt1ZS5leHBvcnRzPXtzdHJpbmdpZnk6ZnVuY3Rpb24gXyhCLHtFT0w6dz0iXG4iLGZpbmFsRU9MOlA9ITAscmVwbGFjZXI6Rj1u'@;
put 'dWxsLHNwYWNlczpPfT17fSl7Y29uc3Qgej1QP3c6IiI7cmV0dXJuIEpTT04uc3RyaW5naWZ5KEIsRixPKS5yZXBsYWNlKC9cbi9nLHcpK3p9LHN0cmlwQm9tOmZ1bmN0aW9uIGcoQil7cmV0dXJuIEkuaXNCdWZmZXIoQikmJihCPUIudG9TdHJpbmcoInV0ZjgiKSksQi5yZXBsYWNlKC9eXHVG'@;
put 'RUZGLywiIil9fX0sNjI0NToodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBJKEYpe3RoaXMubWVzc2FnZT1GfXkucihYKSx5LmQoWCx7SW52YWxpZFRva2VuRXJyb3I6KCk9PkIsZGVmYXVsdDooKT0+UH0pLChJLnByb3RvdHlwZT1uZXcgRXJyb3IpLm5hbWU9IkludmFsaWRDaGFy'@;
put 'YWN0ZXJFcnJvciI7dmFyIF89dHlwZW9mIHdpbmRvdzwidSImJndpbmRvdy5hdG9iJiZ3aW5kb3cuYXRvYi5iaW5kKHdpbmRvdyl8fGZ1bmN0aW9uKEYpe3ZhciBPPVN0cmluZyhGKS5yZXBsYWNlKC89KyQvLCIiKTtpZihPLmxlbmd0aCU0PT0xKXRocm93IG5ldyBJKCInYXRvYicgZmFpbGVk'@;
put 'OiBUaGUgc3RyaW5nIHRvIGJlIGRlY29kZWQgaXMgbm90IGNvcnJlY3RseSBlbmNvZGVkLiIpO2Zvcih2YXIgeixOLEw9MCxLPTAsVT0iIjtOPU8uY2hhckF0KEsrKyk7fk4mJih6PUwlND82NCp6K046TixMKyslNCk/VSs9U3RyaW5nLmZyb21DaGFyQ29kZSgyNTUmej4+KC0yKkwmNikpOjAp'@;
put 'Tj0iQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLz0iLmluZGV4T2YoTik7cmV0dXJuIFV9O2Z1bmN0aW9uIEIoRil7dGhpcy5tZXNzYWdlPUZ9KEIucHJvdG90eXBlPW5ldyBFcnJvcikubmFtZT0iSW52YWxpZFRva2VuRXJy'@;
put 'b3IiO2NvbnN0IFA9ZnVuY3Rpb24gdyhGLE8pe2lmKCJzdHJpbmciIT10eXBlb2YgRil0aHJvdyBuZXcgQigiSW52YWxpZCB0b2tlbiBzcGVjaWZpZWQiKTt2YXIgej0hMD09PShPPU98fHt9KS5oZWFkZXI/MDoxO3RyeXtyZXR1cm4gSlNPTi5wYXJzZShmdW5jdGlvbiBnKEYpe3ZhciBPPUYu'@;
put 'cmVwbGFjZSgvLS9nLCIrIikucmVwbGFjZSgvXy9nLCIvIik7c3dpdGNoKE8ubGVuZ3RoJTQpe2Nhc2UgMDpicmVhaztjYXNlIDI6Tys9Ij09IjticmVhaztjYXNlIDM6Tys9Ij0iO2JyZWFrO2RlZmF1bHQ6dGhyb3ciSWxsZWdhbCBiYXNlNjR1cmwgc3RyaW5nISJ9dHJ5e3JldHVybiBkZWNv'@;
put 'ZGVVUklDb21wb25lbnQoXyhPKS5yZXBsYWNlKC8oLikvZyxmdW5jdGlvbihOLEwpe3ZhciBLPUwuY2hhckNvZGVBdCgwKS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKTtyZXR1cm4gSy5sZW5ndGg8MiYmKEs9IjAiK0spLCIlIitLfSkpfWNhdGNoe3JldHVybiBfKE8pfX0oRi5zcGxpdCgi'@;
put 'LiIpW3pdKSl9Y2F0Y2goTil7dGhyb3cgbmV3IEIoIkludmFsaWQgdG9rZW4gc3BlY2lmaWVkOiAiK04ubWVzc2FnZSl9fX0sMTY1ODoodWUsWCx5KT0+e3ZhciBnPS9bXFxeJC4qKz8oKVtcXXt9fF0vZyxCPVJlZ0V4cChnLnNvdXJjZSksUD0ib2JqZWN0Ij09dHlwZW9mIHNlbGYmJnNlbGYm'@;
put 'JnNlbGYuT2JqZWN0PT09T2JqZWN0JiZzZWxmLEY9Im9iamVjdCI9PXR5cGVvZiB5LmcmJnkuZyYmeS5nLk9iamVjdD09PU9iamVjdCYmeS5nfHxQfHxGdW5jdGlvbigicmV0dXJuIHRoaXMiKSgpLHo9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyxOPUYuU3ltYm9sLEw9Tj9OLnByb3RvdHlw'@;
put 'ZTp2b2lkIDAsSz1MP0wudG9TdHJpbmc6dm9pZCAwO3VlLmV4cG9ydHM9ZnVuY3Rpb24gZWUoSil7cmV0dXJuKEo9ZnVuY3Rpb24gcShKKXtyZXR1cm4gbnVsbD09Sj8iIjpmdW5jdGlvbiBVKEope2lmKCJzdHJpbmciPT10eXBlb2YgSilyZXR1cm4gSjtpZihmdW5jdGlvbiBZKEope3JldHVy'@;
put 'biJzeW1ib2wiPT10eXBlb2YgSnx8ZnVuY3Rpb24gVyhKKXtyZXR1cm4hIUomJiJvYmplY3QiPT10eXBlb2YgSn0oSikmJiJbb2JqZWN0IFN5bWJvbF0iPT16LmNhbGwoSil9KEopKXJldHVybiBLP0suY2FsbChKKToiIjt2YXIgbmU9SisiIjtyZXR1cm4iMCI9PW5lJiYxL0o9PS0xLzA/Ii0w'@;
put 'IjpuZX0oSil9KEopKSYmQi50ZXN0KEopP0oucmVwbGFjZShnLCJcXCQmIik6Sn19LDgwOTQ6dWU9Pnt2YXIgST1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO3VlLmV4cG9ydHM9ZnVuY3Rpb24gXyhCKXtyZXR1cm4hMD09PUJ8fCExPT09Qnx8ZnVuY3Rpb24gZyhCKXtyZXR1cm4hIUImJiJv'@;
put 'YmplY3QiPT10eXBlb2YgQn0oQikmJiJbb2JqZWN0IEJvb2xlYW5dIj09SS5jYWxsKEIpfX0sMjMwNzoodWUsWCx5KT0+e3VlPXkubm1kKHVlKTt2YXIgXz0iX19sb2Rhc2hfaGFzaF91bmRlZmluZWRfXyIsZz0xLEI9Mix3PTkwMDcxOTkyNTQ3NDA5OTEsUD0iW29iamVjdCBBcmd1bWVudHNd'@;
put 'IixGPSJbb2JqZWN0IEFycmF5XSIsTz0iW29iamVjdCBBc3luY0Z1bmN0aW9uXSIsej0iW29iamVjdCBCb29sZWFuXSIsTj0iW29iamVjdCBEYXRlXSIsTD0iW29iamVjdCBFcnJvcl0iLEs9IltvYmplY3QgRnVuY3Rpb25dIixVPSJbb2JqZWN0IEdlbmVyYXRvckZ1bmN0aW9uXSIsVz0iW29i'@;
put 'amVjdCBNYXBdIixZPSJbb2JqZWN0IE51bWJlcl0iLHE9IltvYmplY3QgTnVsbF0iLGVlPSJbb2JqZWN0IE9iamVjdF0iLEo9IltvYmplY3QgUHJvbWlzZV0iLG5lPSJbb2JqZWN0IFByb3h5XSIsaWU9IltvYmplY3QgUmVnRXhwXSIsbGU9IltvYmplY3QgU2V0XSIsbWU9IltvYmplY3QgU3Ry'@;
put 'aW5nXSIsVGU9IltvYmplY3QgVW5kZWZpbmVkXSIsU2U9IltvYmplY3QgV2Vha01hcF0iLGplPSJbb2JqZWN0IEFycmF5QnVmZmVyXSIsVj0iW29iamVjdCBEYXRhVmlld10iLGFlPS9eXFtvYmplY3QgLis/Q29uc3RydWN0b3JcXSQvLHRlPS9eKD86MHxbMS05XVxkKikkLyxzZT17fTtzZVsi'@;
put 'W29iamVjdCBGbG9hdDMyQXJyYXldIl09c2VbIltvYmplY3QgRmxvYXQ2NEFycmF5XSJdPXNlWyJbb2JqZWN0IEludDhBcnJheV0iXT1zZVsiW29iamVjdCBJbnQxNkFycmF5XSJdPXNlWyJbb2JqZWN0IEludDMyQXJyYXldIl09c2VbIltvYmplY3QgVWludDhBcnJheV0iXT1zZVsiW29iamVj'@;
put 'dCBVaW50OENsYW1wZWRBcnJheV0iXT1zZVsiW29iamVjdCBVaW50MTZBcnJheV0iXT1zZVsiW29iamVjdCBVaW50MzJBcnJheV0iXT0hMCxzZVtQXT1zZVtGXT1zZVtqZV09c2Vbel09c2VbVl09c2VbTl09c2VbTF09c2VbS109c2VbV109c2VbWV09c2VbZWVdPXNlW2llXT1zZVtsZV09c2Vb'@;
put 'bWVdPXNlW1NlXT0hMTt2YXIgd2U9Im9iamVjdCI9PXR5cGVvZiB5LmcmJnkuZyYmeS5nLk9iamVjdD09PU9iamVjdCYmeS5nLFVlPSJvYmplY3QiPT10eXBlb2Ygc2VsZiYmc2VsZiYmc2VsZi5PYmplY3Q9PT1PYmplY3QmJnNlbGYsSmU9d2V8fFVlfHxGdW5jdGlvbigicmV0dXJuIHRoaXMi'@;
put 'KSgpLG90PVgmJiFYLm5vZGVUeXBlJiZYLHhlPW90JiZ1ZSYmIXVlLm5vZGVUeXBlJiZ1ZSx2ZT14ZSYmeGUuZXhwb3J0cz09PW90LFhlPXZlJiZ3ZS5wcm9jZXNzLHplPWZ1bmN0aW9uKCl7dHJ5e3JldHVybiBYZSYmWGUuYmluZGluZyYmWGUuYmluZGluZygidXRpbCIpfWNhdGNoe319KCks'@;
put 'RGU9emUmJnplLmlzVHlwZWRBcnJheTtmdW5jdGlvbiBJZShBbixhbil7Zm9yKHZhciB2aT0tMSxBcj1udWxsPT1Bbj8wOkFuLmxlbmd0aDsrK3ZpPEFyOylpZihhbihBblt2aV0sdmksQW4pKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIEFlKEFuLGFuKXtyZXR1cm4gQW4uaGFzKGFuKX1m'@;
put 'dW5jdGlvbiBudChBbil7dmFyIGFuPS0xLHZpPUFycmF5KEFuLnNpemUpO3JldHVybiBBbi5mb3JFYWNoKGZ1bmN0aW9uKEFyLFBvKXt2aVsrK2FuXT1bUG8sQXJdfSksdml9ZnVuY3Rpb24gdW4oQW4pe3ZhciBhbj0tMSx2aT1BcnJheShBbi5zaXplKTtyZXR1cm4gQW4uZm9yRWFjaChmdW5j'@;
put 'dGlvbihBcil7dmlbKythbl09QXJ9KSx2aX12YXIgQW4seXQ9QXJyYXkucHJvdG90eXBlLER0PU9iamVjdC5wcm90b3R5cGUsaXQ9SmVbIl9fY29yZS1qc19zaGFyZWRfXyJdLCRlPUZ1bmN0aW9uLnByb3RvdHlwZS50b1N0cmluZyx0dD1EdC5oYXNPd25Qcm9wZXJ0eSxIZT0oQW49L1teLl0r'@;
put 'JC8uZXhlYyhpdCYmaXQua2V5cyYmaXQua2V5cy5JRV9QUk9UT3x8IiIpKT8iU3ltYm9sKHNyYylfMS4iK0FuOiIiLHV0PUR0LnRvU3RyaW5nLHF0PVJlZ0V4cCgiXiIrJGUuY2FsbCh0dCkucmVwbGFjZSgvW1xcXiQuKis/KClbXF17fXxdL2csIlxcJCYiKS5yZXBsYWNlKC9oYXNPd25Qcm9w'@;
put 'ZXJ0eXwoZnVuY3Rpb24pLio/KD89XFxcKCl8IGZvciAuKz8oPz1cXFxdKS9nLCIkMS4qPyIpKyIkIiksUnQ9dmU/SmUuQnVmZmVyOnZvaWQgMCxQdD1KZS5TeW1ib2wsY2k9SmUuVWludDhBcnJheSxRdD1EdC5wcm9wZXJ0eUlzRW51bWVyYWJsZSxzbj15dC5zcGxpY2UsUmk9UHQ/UHQudG9T'@;
put 'dHJpbmdUYWc6dm9pZCAwLGhuPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMsZnQ9UnQ/UnQuaXNCdWZmZXI6dm9pZCAwLE9yPWZ1bmN0aW9uIFFlKEFuLGFuKXtyZXR1cm4gZnVuY3Rpb24odmkpe3JldHVybiBBbihhbih2aSkpfX0oT2JqZWN0LmtleXMsT2JqZWN0KSxXdD1ZaChKZSwi'@;
put 'RGF0YVZpZXciKSxBdD1ZaChKZSwiTWFwIiksUm49WWgoSmUsIlByb21pc2UiKSxzdD1ZaChKZSwiU2V0IiksVXQ9WWgoSmUsIldlYWtNYXAiKSxyaT1ZaChPYmplY3QsImNyZWF0ZSIpLFdlPU9sKFd0KSxUdD1PbChBdCksbnI9T2woUm4pLGh0PU9sKHN0KSx4dD1PbChVdCksam49UHQ/UHQu'@;
put 'cHJvdG90eXBlOnZvaWQgMCxybj1qbj9qbi52YWx1ZU9mOnZvaWQgMDtmdW5jdGlvbiB6dChBbil7dmFyIGFuPS0xLHZpPW51bGw9PUFuPzA6QW4ubGVuZ3RoO2Zvcih0aGlzLmNsZWFyKCk7Kythbjx2aTspe3ZhciBBcj1Bblthbl07dGhpcy5zZXQoQXJbMF0sQXJbMV0pfX1mdW5jdGlvbiBl'@;
put 'bihBbil7dmFyIGFuPS0xLHZpPW51bGw9PUFuPzA6QW4ubGVuZ3RoO2Zvcih0aGlzLmNsZWFyKCk7Kythbjx2aTspe3ZhciBBcj1Bblthbl07dGhpcy5zZXQoQXJbMF0sQXJbMV0pfX1mdW5jdGlvbiBlaShBbil7dmFyIGFuPS0xLHZpPW51bGw9PUFuPzA6QW4ubGVuZ3RoO2Zvcih0aGlzLmNs'@;
put 'ZWFyKCk7Kythbjx2aTspe3ZhciBBcj1Bblthbl07dGhpcy5zZXQoQXJbMF0sQXJbMV0pfX1mdW5jdGlvbiBXaShBbil7dmFyIGFuPS0xLHZpPW51bGw9PUFuPzA6QW4ubGVuZ3RoO2Zvcih0aGlzLl9fZGF0YV9fPW5ldyBlaTsrK2FuPHZpOyl0aGlzLmFkZChBblthbl0pfWZ1bmN0aW9uIGxh'@;
put 'KEFuKXt2YXIgYW49dGhpcy5fX2RhdGFfXz1uZXcgZW4oQW4pO3RoaXMuc2l6ZT1hbi5zaXplfWZ1bmN0aW9uIGJsKEFuLGFuKXtmb3IodmFyIHZpPUFuLmxlbmd0aDt2aS0tOylpZih1ZihBblt2aV1bMF0sYW4pKXJldHVybiB2aTtyZXR1cm4tMX1mdW5jdGlvbiBMYyhBbil7cmV0dXJuIG51'@;
put 'bGw9PUFuP3ZvaWQgMD09PUFuP1RlOnE6UmkmJlJpIGluIE9iamVjdChBbik/ZnVuY3Rpb24gY2YoQW4pe3ZhciBhbj10dC5jYWxsKEFuLFJpKSx2aT1BbltSaV07dHJ5e0FuW1JpXT12b2lkIDA7dmFyIEFyPSEwfWNhdGNoe312YXIgUG89dXQuY2FsbChBbik7cmV0dXJuIEFyJiYoYW4/QW5b'@;
put 'UmldPXZpOmRlbGV0ZSBBbltSaV0pLFBvfShBbik6ZnVuY3Rpb24gcjUoQW4pe3JldHVybiB1dC5jYWxsKEFuKX0oQW4pfWZ1bmN0aW9uIEQwKEFuKXtyZXR1cm4gTmEoQW4pJiZMYyhBbik9PVB9ZnVuY3Rpb24gaXIoQW4sYW4sdmksQXIsUG8pe3JldHVybiBBbj09PWFufHwobnVsbD09QW58'@;
put 'fG51bGw9PWFufHwhTmEoQW4pJiYhTmEoYW4pP0FuIT1BbiYmYW4hPWFuOmZ1bmN0aW9uIHhhKEFuLGFuLHZpLEFyLFBvLGVvKXt2YXIgb2w9ZGYoQW4pLHpvPWRmKGFuKSxWcz1vbD9GOllpKEFuKSxTcz16bz9GOllpKGFuKSxqbD0oVnM9VnM9PVA/ZWU6VnMpPT1lZSxIbz0oU3M9U3M9PVA/'@;
put 'ZWU6U3MpPT1lZSxrbz1Wcz09U3M7aWYoa28mJmhmKEFuKSl7aWYoIWhmKGFuKSlyZXR1cm4hMTtvbD0hMCxqbD0hMX1pZihrbyYmIWpsKXJldHVybiBlb3x8KGVvPW5ldyBsYSksb2x8fEQzKEFuKT9iMChBbixhbix2aSxBcixQbyxlbyk6ZnVuY3Rpb24gSGEoQW4sYW4sdmksQXIsUG8sZW8s'@;
put 'b2wpe3N3aXRjaCh2aSl7Y2FzZSBWOmlmKEFuLmJ5dGVMZW5ndGghPWFuLmJ5dGVMZW5ndGh8fEFuLmJ5dGVPZmZzZXQhPWFuLmJ5dGVPZmZzZXQpcmV0dXJuITE7QW49QW4uYnVmZmVyLGFuPWFuLmJ1ZmZlcjtjYXNlIGplOnJldHVybiEoQW4uYnl0ZUxlbmd0aCE9YW4uYnl0ZUxlbmd0aHx8'@;
put 'IWVvKG5ldyBjaShBbiksbmV3IGNpKGFuKSkpO2Nhc2UgejpjYXNlIE46Y2FzZSBZOnJldHVybiB1ZigrQW4sK2FuKTtjYXNlIEw6cmV0dXJuIEFuLm5hbWU9PWFuLm5hbWUmJkFuLm1lc3NhZ2U9PWFuLm1lc3NhZ2U7Y2FzZSBpZTpjYXNlIG1lOnJldHVybiBBbj09YW4rIiI7Y2FzZSBXOnZh'@;
put 'ciB6bz1udDtjYXNlIGxlOmlmKHpvfHwoem89dW4pLEFuLnNpemUhPWFuLnNpemUmJiEoQXImZykpcmV0dXJuITE7dmFyIFNzPW9sLmdldChBbik7aWYoU3MpcmV0dXJuIFNzPT1hbjtBcnw9QixvbC5zZXQoQW4sYW4pO3ZhciBqbD1iMCh6byhBbiksem8oYW4pLEFyLFBvLGVvLG9sKTtyZXR1'@;
put 'cm4gb2wuZGVsZXRlKEFuKSxqbDtjYXNlIltvYmplY3QgU3ltYm9sXSI6aWYocm4pcmV0dXJuIHJuLmNhbGwoQW4pPT1ybi5jYWxsKGFuKX1yZXR1cm4hMX0oQW4sYW4sVnMsdmksQXIsUG8sZW8pO2lmKCEodmkmZykpe3ZhciBTdD1qbCYmdHQuY2FsbChBbiwiX193cmFwcGVkX18iKSxCdD1I'@;
put 'byYmdHQuY2FsbChhbiwiX193cmFwcGVkX18iKTtpZihTdHx8QnQpe3ZhciBfbj1TdD9Bbi52YWx1ZSgpOkFuLG1uPUJ0P2FuLnZhbHVlKCk6YW47cmV0dXJuIGVvfHwoZW89bmV3IGxhKSxQbyhfbixtbix2aSxBcixlbyl9fXJldHVybiEha28mJihlb3x8KGVvPW5ldyBsYSksZnVuY3Rpb24g'@;
put 'THUoQW4sYW4sdmksQXIsUG8sZW8pe3ZhciBvbD12aSZnLHpvPVByKEFuKSxWcz16by5sZW5ndGg7aWYoVnMhPVByKGFuKS5sZW5ndGgmJiFvbClyZXR1cm4hMTtmb3IodmFyIEhvPVZzO0hvLS07KXt2YXIga289em9bSG9dO2lmKCEob2w/a28gaW4gYW46dHQuY2FsbChhbixrbykpKXJldHVy'@;
put 'biExfXZhciBTdD1lby5nZXQoQW4pO2lmKFN0JiZlby5nZXQoYW4pKXJldHVybiBTdD09YW47dmFyIEJ0PSEwO2VvLnNldChBbixhbiksZW8uc2V0KGFuLEFuKTtmb3IodmFyIF9uPW9sOysrSG88VnM7KXt2YXIgbW49QW5ba289em9bSG9dXSxJbj1hbltrb107aWYoQXIpdmFyIGJuPW9sP0Fy'@;
put 'KEluLG1uLGtvLGFuLEFuLGVvKTpBcihtbixJbixrbyxBbixhbixlbyk7aWYoISh2b2lkIDA9PT1ibj9tbj09PUlufHxQbyhtbixJbix2aSxBcixlbyk6Ym4pKXtCdD0hMTticmVha31fbnx8KF9uPSJjb25zdHJ1Y3RvciI9PWtvKX1pZihCdCYmIV9uKXt2YXIgdXI9QW4uY29uc3RydWN0b3Is'@;
put 'Ymk9YW4uY29uc3RydWN0b3I7dXIhPWJpJiYiY29uc3RydWN0b3IiaW4gQW4mJiJjb25zdHJ1Y3RvciJpbiBhbiYmISgiZnVuY3Rpb24iPT10eXBlb2YgdXImJnVyIGluc3RhbmNlb2YgdXImJiJmdW5jdGlvbiI9PXR5cGVvZiBiaSYmYmkgaW5zdGFuY2VvZiBiaSkmJihCdD0hMSl9cmV0dXJu'@;
put 'IGVvLmRlbGV0ZShBbiksZW8uZGVsZXRlKGFuKSxCdH0oQW4sYW4sdmksQXIsUG8sZW8pKX0oQW4sYW4sdmksQXIsaXIsUG8pKX1mdW5jdGlvbiBiMChBbixhbix2aSxBcixQbyxlbyl7dmFyIG9sPXZpJmcsem89QW4ubGVuZ3RoLFZzPWFuLmxlbmd0aDtpZih6byE9VnMmJiEob2wmJlZzPnpv'@;
put 'KSlyZXR1cm4hMTt2YXIgU3M9ZW8uZ2V0KEFuKTtpZihTcyYmZW8uZ2V0KGFuKSlyZXR1cm4gU3M9PWFuO3ZhciBqbD0tMSxIbz0hMCxrbz12aSZCP25ldyBXaTp2b2lkIDA7Zm9yKGVvLnNldChBbixhbiksZW8uc2V0KGFuLEFuKTsrK2psPHpvOyl7dmFyIFN0PUFuW2psXSxCdD1hbltqbF07'@;
put 'aWYoQXIpdmFyIF9uPW9sP0FyKEJ0LFN0LGpsLGFuLEFuLGVvKTpBcihTdCxCdCxqbCxBbixhbixlbyk7aWYodm9pZCAwIT09X24pe2lmKF9uKWNvbnRpbnVlO0hvPSExO2JyZWFrfWlmKGtvKXtpZighSWUoYW4sZnVuY3Rpb24obW4sSW4pe2lmKCFBZShrbyxJbikmJihTdD09PW1ufHxQbyhT'@;
put 'dCxtbix2aSxBcixlbykpKXJldHVybiBrby5wdXNoKEluKX0pKXtIbz0hMTticmVha319ZWxzZSBpZihTdCE9PUJ0JiYhUG8oU3QsQnQsdmksQXIsZW8pKXtIbz0hMTticmVha319cmV0dXJuIGVvLmRlbGV0ZShBbiksZW8uZGVsZXRlKGFuKSxIb31mdW5jdGlvbiBQcihBbil7cmV0dXJuIGZ1'@;
put 'bmN0aW9uIHB1KEFuLGFuLHZpKXt2YXIgQXI9YW4oQW4pO3JldHVybiBkZihBbik/QXI6ZnVuY3Rpb24gT2UoQW4sYW4pe2Zvcih2YXIgdmk9LTEsQXI9YW4ubGVuZ3RoLFBvPUFuLmxlbmd0aDsrK3ZpPEFyOylBbltQbyt2aV09YW5bdmldO3JldHVybiBBbn0oQXIsdmkoQW4pKX0oQW4sJGgs'@;
put 'Q3MpfWZ1bmN0aW9uIG9kKEFuLGFuKXt2YXIgdmk9QW4uX19kYXRhX187cmV0dXJuIGZ1bmN0aW9uIFFjKEFuKXt2YXIgYW49dHlwZW9mIEFuO3JldHVybiJzdHJpbmciPT1hbnx8Im51bWJlciI9PWFufHwic3ltYm9sIj09YW58fCJib29sZWFuIj09YW4/Il9fcHJvdG9fXyIhPT1BbjpudWxs'@;
put 'PT09QW59KGFuKT92aVsic3RyaW5nIj09dHlwZW9mIGFuPyJzdHJpbmciOiJoYXNoIl06dmkubWFwfWZ1bmN0aW9uIFloKEFuLGFuKXt2YXIgdmk9ZnVuY3Rpb24gX3QoQW4sYW4pe3JldHVybiBBbj8uW2FuXX0oQW4sYW4pO3JldHVybiBmdW5jdGlvbiB1aShBbil7cmV0dXJuISghT2MoQW4p'@;
put 'fHxmdW5jdGlvbiBuNShBbil7cmV0dXJuISFIZSYmSGUgaW4gQW59KEFuKSkmJihmZihBbik/cXQ6YWUpLnRlc3QoT2woQW4pKX0odmkpP3ZpOnZvaWQgMH16dC5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24gaGkoKXt0aGlzLl9fZGF0YV9fPXJpP3JpKG51bGwpOnt9LHRoaXMuc2l6ZT0wfSx6'@;
put 'dC5wcm90b3R5cGUuZGVsZXRlPWZ1bmN0aW9uIGNuKEFuKXt2YXIgYW49dGhpcy5oYXMoQW4pJiZkZWxldGUgdGhpcy5fX2RhdGFfX1tBbl07cmV0dXJuIHRoaXMuc2l6ZS09YW4/MTowLGFufSx6dC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uIGZuKEFuKXt2YXIgYW49dGhpcy5fX2RhdGFfXztp'@;
put 'ZihyaSl7dmFyIHZpPWFuW0FuXTtyZXR1cm4gdmk9PT1fP3ZvaWQgMDp2aX1yZXR1cm4gdHQuY2FsbChhbixBbik/YW5bQW5dOnZvaWQgMH0senQucHJvdG90eXBlLmhhcz1mdW5jdGlvbiBJaShBbil7dmFyIGFuPXRoaXMuX19kYXRhX187cmV0dXJuIHJpP3ZvaWQgMCE9PWFuW0FuXTp0dC5j'@;
put 'YWxsKGFuLEFuKX0senQucHJvdG90eXBlLnNldD1mdW5jdGlvbiBYdChBbixhbil7dmFyIHZpPXRoaXMuX19kYXRhX187cmV0dXJuIHRoaXMuc2l6ZSs9dGhpcy5oYXMoQW4pPzA6MSx2aVtBbl09cmkmJnZvaWQgMD09PWFuP186YW4sdGhpc30sZW4ucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9u'@;
put 'IHVhKCl7dGhpcy5fX2RhdGFfXz1bXSx0aGlzLnNpemU9MH0sZW4ucHJvdG90eXBlLmRlbGV0ZT1mdW5jdGlvbiBFaShBbil7dmFyIGFuPXRoaXMuX19kYXRhX18sdmk9YmwoYW4sQW4pO3JldHVybiEodmk8MHx8KHZpPT1hbi5sZW5ndGgtMT9hbi5wb3AoKTpzbi5jYWxsKGFuLHZpLDEpLC0t'@;
put 'dGhpcy5zaXplLDApKX0sZW4ucHJvdG90eXBlLmdldD1mdW5jdGlvbiB2cihBbil7dmFyIGFuPXRoaXMuX19kYXRhX18sdmk9YmwoYW4sQW4pO3JldHVybiB2aTwwP3ZvaWQgMDphblt2aV1bMV19LGVuLnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24gV24oQW4pe3JldHVybiBibCh0aGlzLl9fZGF0'@;
put 'YV9fLEFuKT4tMX0sZW4ucHJvdG90eXBlLnNldD1mdW5jdGlvbiAkaShBbixhbil7dmFyIHZpPXRoaXMuX19kYXRhX18sQXI9YmwodmksQW4pO3JldHVybiBBcjwwPygrK3RoaXMuc2l6ZSx2aS5wdXNoKFtBbixhbl0pKTp2aVtBcl1bMV09YW4sdGhpc30sZWkucHJvdG90eXBlLmNsZWFyPWZ1'@;
put 'bmN0aW9uIFFyKCl7dGhpcy5zaXplPTAsdGhpcy5fX2RhdGFfXz17aGFzaDpuZXcgenQsbWFwOm5ldyhBdHx8ZW4pLHN0cmluZzpuZXcgenR9fSxlaS5wcm90b3R5cGUuZGVsZXRlPWZ1bmN0aW9uIFZpKEFuKXt2YXIgYW49b2QodGhpcyxBbikuZGVsZXRlKEFuKTtyZXR1cm4gdGhpcy5zaXpl'@;
put 'LT1hbj8xOjAsYW59LGVpLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24gTmkoQW4pe3JldHVybiBvZCh0aGlzLEFuKS5nZXQoQW4pfSxlaS5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uIERhKEFuKXtyZXR1cm4gb2QodGhpcyxBbikuaGFzKEFuKX0sZWkucHJvdG90eXBlLnNldD1mdW5jdGlvbiBMcihB'@;
put 'bixhbil7dmFyIHZpPW9kKHRoaXMsQW4pLEFyPXZpLnNpemU7cmV0dXJuIHZpLnNldChBbixhbiksdGhpcy5zaXplKz12aS5zaXplPT1Bcj8wOjEsdGhpc30sV2kucHJvdG90eXBlLmFkZD1XaS5wcm90b3R5cGUucHVzaD1mdW5jdGlvbiBwYShBbil7cmV0dXJuIHRoaXMuX19kYXRhX18uc2V0'@;
put 'KEFuLF8pLHRoaXN9LFdpLnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24gUW4oQW4pe3JldHVybiB0aGlzLl9fZGF0YV9fLmhhcyhBbil9LGxhLnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbiB5YSgpe3RoaXMuX19kYXRhX189bmV3IGVuLHRoaXMuc2l6ZT0wfSxsYS5wcm90b3R5cGUuZGVsZXRlPWZ1'@;
put 'bmN0aW9uIExhKEFuKXt2YXIgYW49dGhpcy5fX2RhdGFfXyx2aT1hbi5kZWxldGUoQW4pO3JldHVybiB0aGlzLnNpemU9YW4uc2l6ZSx2aX0sbGEucHJvdG90eXBlLmdldD1mdW5jdGlvbiBGYShBbil7cmV0dXJuIHRoaXMuX19kYXRhX18uZ2V0KEFuKX0sbGEucHJvdG90eXBlLmhhcz1mdW5j'@;
put 'dGlvbiB0aShBbil7cmV0dXJuIHRoaXMuX19kYXRhX18uaGFzKEFuKX0sbGEucHJvdG90eXBlLnNldD1mdW5jdGlvbiBnbyhBbixhbil7dmFyIHZpPXRoaXMuX19kYXRhX187aWYodmkgaW5zdGFuY2VvZiBlbil7dmFyIEFyPXZpLl9fZGF0YV9fO2lmKCFBdHx8QXIubGVuZ3RoPDE5OSlyZXR1'@;
put 'cm4gQXIucHVzaChbQW4sYW5dKSx0aGlzLnNpemU9Kyt2aS5zaXplLHRoaXM7dmk9dGhpcy5fX2RhdGFfXz1uZXcgZWkoQXIpfXJldHVybiB2aS5zZXQoQW4sYW4pLHRoaXMuc2l6ZT12aS5zaXplLHRoaXN9O3ZhciBDcz1obj9mdW5jdGlvbihBbil7cmV0dXJuIG51bGw9PUFuP1tdOihBbj1P'@;
put 'YmplY3QoQW4pLGZ1bmN0aW9uIEZlKEFuLGFuKXtmb3IodmFyIHZpPS0xLEFyPW51bGw9PUFuPzA6QW4ubGVuZ3RoLFBvPTAsZW89W107Kyt2aTxBcjspe3ZhciBvbD1Bblt2aV07YW4ob2wsdmksQW4pJiYoZW9bUG8rK109b2wpfXJldHVybiBlb30oaG4oQW4pLGZ1bmN0aW9uKGFuKXtyZXR1'@;
put 'cm4gUXQuY2FsbChBbixhbil9KSl9OmZ1bmN0aW9uIEtoKCl7cmV0dXJuW119LFlpPUxjO2Z1bmN0aW9uIHlsKEFuLGFuKXtyZXR1cm4hIShhbj1hbj8/dykmJigibnVtYmVyIj09dHlwZW9mIEFufHx0ZS50ZXN0KEFuKSkmJkFuPi0xJiZBbiUxPT0wJiZBbjxhbn1mdW5jdGlvbiBPbChBbil7'@;
put 'aWYobnVsbCE9QW4pe3RyeXtyZXR1cm4gJGUuY2FsbChBbil9Y2F0Y2h7fXRyeXtyZXR1cm4gQW4rIiJ9Y2F0Y2h7fX1yZXR1cm4iIn1mdW5jdGlvbiB1ZihBbixhbil7cmV0dXJuIEFuPT09YW58fEFuIT1BbiYmYW4hPWFufShXdCYmWWkobmV3IFd0KG5ldyBBcnJheUJ1ZmZlcigxKSkpIT1W'@;
put 'fHxBdCYmWWkobmV3IEF0KSE9V3x8Um4mJllpKFJuLnJlc29sdmUoKSkhPUp8fHN0JiZZaShuZXcgc3QpIT1sZXx8VXQmJllpKG5ldyBVdCkhPVNlKSYmKFlpPWZ1bmN0aW9uKEFuKXt2YXIgYW49TGMoQW4pLHZpPWFuPT1lZT9Bbi5jb25zdHJ1Y3Rvcjp2b2lkIDAsQXI9dmk/T2wodmkpOiIi'@;
put 'O2lmKEFyKXN3aXRjaChBcil7Y2FzZSBXZTpyZXR1cm4gVjtjYXNlIFR0OnJldHVybiBXO2Nhc2UgbnI6cmV0dXJuIEo7Y2FzZSBodDpyZXR1cm4gbGU7Y2FzZSB4dDpyZXR1cm4gU2V9cmV0dXJuIGFufSk7dmFyIHNkPUQwKGZ1bmN0aW9uKCl7cmV0dXJuIGFyZ3VtZW50c30oKSk/RDA6ZnVu'@;
put 'Y3Rpb24oQW4pe3JldHVybiBOYShBbikmJnR0LmNhbGwoQW4sImNhbGxlZSIpJiYhUXQuY2FsbChBbiwiY2FsbGVlIil9LGRmPUFycmF5LmlzQXJyYXksaGY9ZnR8fGZ1bmN0aW9uIHFoKCl7cmV0dXJuITF9O2Z1bmN0aW9uIGZmKEFuKXtpZighT2MoQW4pKXJldHVybiExO3ZhciBhbj1MYyhB'@;
put 'bik7cmV0dXJuIGFuPT1LfHxhbj09VXx8YW49PU98fGFuPT1uZX1mdW5jdGlvbiBHaChBbil7cmV0dXJuIm51bWJlciI9PXR5cGVvZiBBbiYmQW4+LTEmJkFuJTE9PTAmJkFuPD13fWZ1bmN0aW9uIE9jKEFuKXt2YXIgYW49dHlwZW9mIEFuO3JldHVybiBudWxsIT1BbiYmKCJvYmplY3QiPT1h'@;
put 'bnx8ImZ1bmN0aW9uIj09YW4pfWZ1bmN0aW9uIE5hKEFuKXtyZXR1cm4gbnVsbCE9QW4mJiJvYmplY3QiPT10eXBlb2YgQW59dmFyIEQzPURlP2Z1bmN0aW9uIGtlKEFuKXtyZXR1cm4gZnVuY3Rpb24oYW4pe3JldHVybiBBbihhbil9fShEZSk6ZnVuY3Rpb24gVnQoQW4pe3JldHVybiBOYShB'@;
put 'bikmJkdoKEFuLmxlbmd0aCkmJiEhc2VbTGMoQW4pXX07ZnVuY3Rpb24gJGgoQW4pe3JldHVybiBmdW5jdGlvbiBrMShBbil7cmV0dXJuIG51bGwhPUFuJiZHaChBbi5sZW5ndGgpJiYhZmYoQW4pfShBbik/ZnVuY3Rpb24gTnMoQW4sYW4pe3ZhciB2aT1kZihBbiksQXI9IXZpJiZzZChBbiks'@;
put 'UG89IXZpJiYhQXImJmhmKEFuKSxlbz0hdmkmJiFBciYmIVBvJiZEMyhBbiksb2w9dml8fEFyfHxQb3x8ZW8sem89b2w/ZnVuY3Rpb24gVmUoQW4sYW4pe2Zvcih2YXIgdmk9LTEsQXI9QXJyYXkoQW4pOysrdmk8QW47KUFyW3ZpXT1hbih2aSk7cmV0dXJuIEFyfShBbi5sZW5ndGgsU3RyaW5n'@;
put 'KTpbXSxWcz16by5sZW5ndGg7Zm9yKHZhciBTcyBpbiBBbikoYW58fHR0LmNhbGwoQW4sU3MpKSYmKCFvbHx8ISgibGVuZ3RoIj09U3N8fFBvJiYoIm9mZnNldCI9PVNzfHwicGFyZW50Ij09U3MpfHxlbyYmKCJidWZmZXIiPT1Tc3x8ImJ5dGVMZW5ndGgiPT1Tc3x8ImJ5dGVPZmZzZXQiPT1T'@;
put 'cyl8fHlsKFNzLFZzKSkpJiZ6by5wdXNoKFNzKTtyZXR1cm4gem99KEFuKTpmdW5jdGlvbiBKcihBbil7aWYoIWZ1bmN0aW9uIHkwKEFuKXt2YXIgYW49QW4mJkFuLmNvbnN0cnVjdG9yO3JldHVybiBBbj09PSgiZnVuY3Rpb24iPT10eXBlb2YgYW4mJmFuLnByb3RvdHlwZXx8RHQpfShBbikp'@;
put 'cmV0dXJuIE9yKEFuKTt2YXIgYW49W107Zm9yKHZhciB2aSBpbiBPYmplY3QoQW4pKXR0LmNhbGwoQW4sdmkpJiYiY29uc3RydWN0b3IiIT12aSYmYW4ucHVzaCh2aSk7cmV0dXJuIGFufShBbil9dWUuZXhwb3J0cz1mdW5jdGlvbiBlaChBbixhbil7cmV0dXJuIGlyKEFuLGFuKX19LDg0MjM6'@;
put 'KHVlLFgseSk9Pnt2YXIgTz0ib2JqZWN0Ij09dHlwZW9mIHNlbGYmJnNlbGYmJnNlbGYuT2JqZWN0PT09T2JqZWN0JiZzZWxmLHo9Im9iamVjdCI9PXR5cGVvZiB5LmcmJnkuZyYmeS5nLk9iamVjdD09PU9iamVjdCYmeS5nfHxPfHxGdW5jdGlvbigicmV0dXJuIHRoaXMiKSgpLE49T2JqZWN0'@;
put 'LnByb3RvdHlwZSxMPU4uaGFzT3duUHJvcGVydHksSz1OLnRvU3RyaW5nLFU9ei5TeW1ib2wsVz1VP1UudG9TdHJpbmdUYWc6dm9pZCAwO3VlLmV4cG9ydHM9ZnVuY3Rpb24gSihpZSl7aWYoIWZ1bmN0aW9uIG5lKGllKXt2YXIgbGU9dHlwZW9mIGllO3JldHVybiBudWxsIT1pZSYmKCJvYmpl'@;
put 'Y3QiPT1sZXx8ImZ1bmN0aW9uIj09bGUpfShpZSkpcmV0dXJuITE7dmFyIGxlPWZ1bmN0aW9uIFkoaWUpe3JldHVybiBudWxsPT1pZT92b2lkIDA9PT1pZT8iW29iamVjdCBVbmRlZmluZWRdIjoiW29iamVjdCBOdWxsXSI6VyYmVyBpbiBPYmplY3QoaWUpP2Z1bmN0aW9uIHEoaWUpe3ZhciBs'@;
put 'ZT1MLmNhbGwoaWUsVyksbWU9aWVbV107dHJ5e2llW1ddPXZvaWQgMDt2YXIgX2U9ITB9Y2F0Y2h7fXZhciBUZT1LLmNhbGwoaWUpO3JldHVybiBfZSYmKGxlP2llW1ddPW1lOmRlbGV0ZSBpZVtXXSksVGV9KGllKTpmdW5jdGlvbiBlZShpZSl7cmV0dXJuIEsuY2FsbChpZSl9KGllKX0oaWUp'@;
put 'O3JldHVybiJbb2JqZWN0IEZ1bmN0aW9uXSI9PWxlfHwiW29iamVjdCBHZW5lcmF0b3JGdW5jdGlvbl0iPT1sZXx8IltvYmplY3QgQXN5bmNGdW5jdGlvbl0iPT1sZXx8IltvYmplY3QgUHJveHldIj09bGV9fSw5NzIyOnVlPT57dWUuZXhwb3J0cz1mdW5jdGlvbiBYKHkpe3JldHVybiBudWxs'@;
put 'PT15fX0sOTczODp1ZT0+eyJ1c2Ugc3RyaWN0Ijt1ZS5leHBvcnRzPU1hdGguYWJzfSw2MzI5OnVlPT57InVzZSBzdHJpY3QiO3VlLmV4cG9ydHM9TWF0aC5mbG9vcn0sMzY3ODp1ZT0+eyJ1c2Ugc3RyaWN0Ijt1ZS5leHBvcnRzPU51bWJlci5pc05hTnx8ZnVuY3Rpb24oeSl7cmV0dXJuIHkh'@;
put 'PXl9fSwyMjY0OnVlPT57InVzZSBzdHJpY3QiO3VlLmV4cG9ydHM9TWF0aC5tYXh9LDU3MzA6dWU9PnsidXNlIHN0cmljdCI7dWUuZXhwb3J0cz1NYXRoLm1pbn0sNzA3OnVlPT57InVzZSBzdHJpY3QiO3VlLmV4cG9ydHM9TWF0aC5wb3d9LDM4NjI6dWU9PnsidXNlIHN0cmljdCI7dWUuZXhw'@;
put 'b3J0cz1NYXRoLnJvdW5kfSw5NTUwOih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoMzY3OCk7dWUuZXhwb3J0cz1mdW5jdGlvbihnKXtyZXR1cm4gSShnKXx8MD09PWc/ZzpnPDA/LTE6MX19LDIzMTg6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg1NzE3KSxfPXkoMzM0'@;
put 'OSksZz15KDk1MDkpLkJ1ZmZlcixCPW5ldyBBcnJheSgxNik7ZnVuY3Rpb24gdygpe18uY2FsbCh0aGlzLDY0KSx0aGlzLl9hPTE3MzI1ODQxOTMsdGhpcy5fYj00MDIzMjMzNDE3LHRoaXMuX2M9MjU2MjM4MzEwMix0aGlzLl9kPTI3MTczMzg3OH1mdW5jdGlvbiBQKEwsSyl7cmV0dXJuIEw8'@;
put 'PEt8TD4+PjMyLUt9ZnVuY3Rpb24gRihMLEssVSxXLFkscSxlZSl7cmV0dXJuIFAoTCsoSyZVfH5LJlcpK1krcXwwLGVlKStLfDB9ZnVuY3Rpb24gTyhMLEssVSxXLFkscSxlZSl7cmV0dXJuIFAoTCsoSyZXfFUmflcpK1krcXwwLGVlKStLfDB9ZnVuY3Rpb24geihMLEssVSxXLFkscSxlZSl7'@;
put 'cmV0dXJuIFAoTCsoS15VXlcpK1krcXwwLGVlKStLfDB9ZnVuY3Rpb24gTihMLEssVSxXLFkscSxlZSl7cmV0dXJuIFAoTCsoVV4oS3x+VykpK1krcXwwLGVlKStLfDB9SSh3LF8pLHcucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oKXtmb3IodmFyIEw9QixLPTA7SzwxNjsrK0spTFtLXT10'@;
put 'aGlzLl9ibG9jay5yZWFkSW50MzJMRSg0KkspO3ZhciBVPXRoaXMuX2EsVz10aGlzLl9iLFk9dGhpcy5fYyxxPXRoaXMuX2Q7VT1GKFUsVyxZLHEsTFswXSwzNjE0MDkwMzYwLDcpLHE9RihxLFUsVyxZLExbMV0sMzkwNTQwMjcxMCwxMiksWT1GKFkscSxVLFcsTFsyXSw2MDYxMDU4MTksMTcp'@;
put 'LFc9RihXLFkscSxVLExbM10sMzI1MDQ0MTk2NiwyMiksVT1GKFUsVyxZLHEsTFs0XSw0MTE4NTQ4Mzk5LDcpLHE9RihxLFUsVyxZLExbNV0sMTIwMDA4MDQyNiwxMiksWT1GKFkscSxVLFcsTFs2XSwyODIxNzM1OTU1LDE3KSxXPUYoVyxZLHEsVSxMWzddLDQyNDkyNjEzMTMsMjIpLFU9RihV'@;
put 'LFcsWSxxLExbOF0sMTc3MDAzNTQxNiw3KSxxPUYocSxVLFcsWSxMWzldLDIzMzY1NTI4NzksMTIpLFk9RihZLHEsVSxXLExbMTBdLDQyOTQ5MjUyMzMsMTcpLFc9RihXLFkscSxVLExbMTFdLDIzMDQ1NjMxMzQsMjIpLFU9RihVLFcsWSxxLExbMTJdLDE4MDQ2MDM2ODIsNykscT1GKHEsVSxX'@;
put 'LFksTFsxM10sNDI1NDYyNjE5NSwxMiksWT1GKFkscSxVLFcsTFsxNF0sMjc5Mjk2NTAwNiwxNyksVT1PKFUsVz1GKFcsWSxxLFUsTFsxNV0sMTIzNjUzNTMyOSwyMiksWSxxLExbMV0sNDEyOTE3MDc4Niw1KSxxPU8ocSxVLFcsWSxMWzZdLDMyMjU0NjU2NjQsOSksWT1PKFkscSxVLFcsTFsx'@;
put 'MV0sNjQzNzE3NzEzLDE0KSxXPU8oVyxZLHEsVSxMWzBdLDM5MjEwNjk5OTQsMjApLFU9TyhVLFcsWSxxLExbNV0sMzU5MzQwODYwNSw1KSxxPU8ocSxVLFcsWSxMWzEwXSwzODAxNjA4Myw5KSxZPU8oWSxxLFUsVyxMWzE1XSwzNjM0NDg4OTYxLDE0KSxXPU8oVyxZLHEsVSxMWzRdLDM4ODk0'@;
put 'Mjk0NDgsMjApLFU9TyhVLFcsWSxxLExbOV0sNTY4NDQ2NDM4LDUpLHE9TyhxLFUsVyxZLExbMTRdLDMyNzUxNjM2MDYsOSksWT1PKFkscSxVLFcsTFszXSw0MTA3NjAzMzM1LDE0KSxXPU8oVyxZLHEsVSxMWzhdLDExNjM1MzE1MDEsMjApLFU9TyhVLFcsWSxxLExbMTNdLDI4NTAyODU4Mjks'@;
put 'NSkscT1PKHEsVSxXLFksTFsyXSw0MjQzNTYzNTEyLDkpLFk9TyhZLHEsVSxXLExbN10sMTczNTMyODQ3MywxNCksVT16KFUsVz1PKFcsWSxxLFUsTFsxMl0sMjM2ODM1OTU2MiwyMCksWSxxLExbNV0sNDI5NDU4ODczOCw0KSxxPXoocSxVLFcsWSxMWzhdLDIyNzIzOTI4MzMsMTEpLFk9eihZ'@;
put 'LHEsVSxXLExbMTFdLDE4MzkwMzA1NjIsMTYpLFc9eihXLFkscSxVLExbMTRdLDQyNTk2NTc3NDAsMjMpLFU9eihVLFcsWSxxLExbMV0sMjc2Mzk3NTIzNiw0KSxxPXoocSxVLFcsWSxMWzRdLDEyNzI4OTMzNTMsMTEpLFk9eihZLHEsVSxXLExbN10sNDEzOTQ2OTY2NCwxNiksVz16KFcsWSxx'@;
put 'LFUsTFsxMF0sMzIwMDIzNjY1NiwyMyksVT16KFUsVyxZLHEsTFsxM10sNjgxMjc5MTc0LDQpLHE9eihxLFUsVyxZLExbMF0sMzkzNjQzMDA3NCwxMSksWT16KFkscSxVLFcsTFszXSwzNTcyNDQ1MzE3LDE2KSxXPXooVyxZLHEsVSxMWzZdLDc2MDI5MTg5LDIzKSxVPXooVSxXLFkscSxMWzld'@;
put 'LDM2NTQ2MDI4MDksNCkscT16KHEsVSxXLFksTFsxMl0sMzg3MzE1MTQ2MSwxMSksWT16KFkscSxVLFcsTFsxNV0sNTMwNzQyNTIwLDE2KSxVPU4oVSxXPXooVyxZLHEsVSxMWzJdLDMyOTk2Mjg2NDUsMjMpLFkscSxMWzBdLDQwOTYzMzY0NTIsNikscT1OKHEsVSxXLFksTFs3XSwxMTI2ODkx'@;
put 'NDE1LDEwKSxZPU4oWSxxLFUsVyxMWzE0XSwyODc4NjEyMzkxLDE1KSxXPU4oVyxZLHEsVSxMWzVdLDQyMzc1MzMyNDEsMjEpLFU9TihVLFcsWSxxLExbMTJdLDE3MDA0ODU1NzEsNikscT1OKHEsVSxXLFksTFszXSwyMzk5OTgwNjkwLDEwKSxZPU4oWSxxLFUsVyxMWzEwXSw0MjkzOTE1Nzcz'@;
put 'LDE1KSxXPU4oVyxZLHEsVSxMWzFdLDIyNDAwNDQ0OTcsMjEpLFU9TihVLFcsWSxxLExbOF0sMTg3MzMxMzM1OSw2KSxxPU4ocSxVLFcsWSxMWzE1XSw0MjY0MzU1NTUyLDEwKSxZPU4oWSxxLFUsVyxMWzZdLDI3MzQ3Njg5MTYsMTUpLFc9TihXLFkscSxVLExbMTNdLDEzMDkxNTE2NDksMjEp'@;
put 'LFU9TihVLFcsWSxxLExbNF0sNDE0OTQ0NDIyNiw2KSxxPU4ocSxVLFcsWSxMWzExXSwzMTc0NzU2OTE3LDEwKSxZPU4oWSxxLFUsVyxMWzJdLDcxODc4NzI1OSwxNSksVz1OKFcsWSxxLFUsTFs5XSwzOTUxNDgxNzQ1LDIxKSx0aGlzLl9hPXRoaXMuX2ErVXwwLHRoaXMuX2I9dGhpcy5fYitX'@;
put 'fDAsdGhpcy5fYz10aGlzLl9jK1l8MCx0aGlzLl9kPXRoaXMuX2QrcXwwfSx3LnByb3RvdHlwZS5fZGlnZXN0PWZ1bmN0aW9uKCl7dGhpcy5fYmxvY2tbdGhpcy5fYmxvY2tPZmZzZXQrK109MTI4LHRoaXMuX2Jsb2NrT2Zmc2V0PjU2JiYodGhpcy5fYmxvY2suZmlsbCgwLHRoaXMuX2Jsb2Nr'@;
put 'T2Zmc2V0LDY0KSx0aGlzLl91cGRhdGUoKSx0aGlzLl9ibG9ja09mZnNldD0wKSx0aGlzLl9ibG9jay5maWxsKDAsdGhpcy5fYmxvY2tPZmZzZXQsNTYpLHRoaXMuX2Jsb2NrLndyaXRlVUludDMyTEUodGhpcy5fbGVuZ3RoWzBdLDU2KSx0aGlzLl9ibG9jay53cml0ZVVJbnQzMkxFKHRoaXMu'@;
put 'X2xlbmd0aFsxXSw2MCksdGhpcy5fdXBkYXRlKCk7dmFyIEw9Zy5hbGxvY1Vuc2FmZSgxNik7cmV0dXJuIEwud3JpdGVJbnQzMkxFKHRoaXMuX2EsMCksTC53cml0ZUludDMyTEUodGhpcy5fYiw0KSxMLndyaXRlSW50MzJMRSh0aGlzLl9jLDgpLEwud3JpdGVJbnQzMkxFKHRoaXMuX2QsMTIp'@;
put 'LEx9LHVlLmV4cG9ydHM9d30sMzA0NzoodWUsWCx5KT0+e3ZhciBJPXkoNjI0MCksXz15KDk5MzEpO2Z1bmN0aW9uIGcoQil7dGhpcy5yYW5kPUJ8fG5ldyBfLlJhbmR9dWUuZXhwb3J0cz1nLGcuY3JlYXRlPWZ1bmN0aW9uKHcpe3JldHVybiBuZXcgZyh3KX0sZy5wcm90b3R5cGUuX3JhbmRi'@;
put 'ZWxvdz1mdW5jdGlvbih3KXt2YXIgUD13LmJpdExlbmd0aCgpLEY9TWF0aC5jZWlsKFAvOCk7ZG97dmFyIE89bmV3IEkodGhpcy5yYW5kLmdlbmVyYXRlKEYpKX13aGlsZShPLmNtcCh3KT49MCk7cmV0dXJuIE99LGcucHJvdG90eXBlLl9yYW5kcmFuZ2U9ZnVuY3Rpb24odyxQKXt2YXIgRj1Q'@;
put 'LnN1Yih3KTtyZXR1cm4gdy5hZGQodGhpcy5fcmFuZGJlbG93KEYpKX0sZy5wcm90b3R5cGUudGVzdD1mdW5jdGlvbih3LFAsRil7dmFyIE89dy5iaXRMZW5ndGgoKSx6PUkubW9udCh3KSxOPW5ldyBJKDEpLnRvUmVkKHopO1B8fChQPU1hdGgubWF4KDEsTy80OHwwKSk7Zm9yKHZhciBMPXcu'@;
put 'c3VibigxKSxLPTA7IUwudGVzdG4oSyk7SysrKTtmb3IodmFyIFU9dy5zaHJuKEspLFc9TC50b1JlZCh6KTtQPjA7UC0tKXt2YXIgcT10aGlzLl9yYW5kcmFuZ2UobmV3IEkoMiksTCk7RiYmRihxKTt2YXIgZWU9cS50b1JlZCh6KS5yZWRQb3coVSk7aWYoMCE9PWVlLmNtcChOKSYmMCE9PWVl'@;
put 'LmNtcChXKSl7Zm9yKHZhciBKPTE7SjxLO0orKyl7aWYoMD09PShlZT1lZS5yZWRTcXIoKSkuY21wKE4pKXJldHVybiExO2lmKDA9PT1lZS5jbXAoVykpYnJlYWt9aWYoSj09PUspcmV0dXJuITF9fXJldHVybiEwfSxnLnByb3RvdHlwZS5nZXREaXZpc29yPWZ1bmN0aW9uKHcsUCl7dmFyIEY9'@;
put 'dy5iaXRMZW5ndGgoKSxPPUkubW9udCh3KSx6PW5ldyBJKDEpLnRvUmVkKE8pO1B8fChQPU1hdGgubWF4KDEsRi80OHwwKSk7Zm9yKHZhciBOPXcuc3VibigxKSxMPTA7IU4udGVzdG4oTCk7TCsrKTtmb3IodmFyIEs9dy5zaHJuKEwpLFU9Ti50b1JlZChPKTtQPjA7UC0tKXt2YXIgVz10aGlz'@;
put 'Ll9yYW5kcmFuZ2UobmV3IEkoMiksTiksWT13LmdjZChXKTtpZigwIT09WS5jbXBuKDEpKXJldHVybiBZO3ZhciBxPVcudG9SZWQoTykucmVkUG93KEspO2lmKDAhPT1xLmNtcCh6KSYmMCE9PXEuY21wKFUpKXtmb3IodmFyIGVlPTE7ZWU8TDtlZSsrKXtpZigwPT09KHE9cS5yZWRTcXIoKSku'@;
put 'Y21wKHopKXJldHVybiBxLmZyb21SZWQoKS5zdWJuKDEpLmdjZCh3KTtpZigwPT09cS5jbXAoVSkpYnJlYWt9aWYoZWU9PT1MKXJldHVybihxPXEucmVkU3FyKCkpLmZyb21SZWQoKS5zdWJuKDEpLmdjZCh3KX19cmV0dXJuITF9fSw2MjQwOmZ1bmN0aW9uKHVlLFgseSl7IWZ1bmN0aW9uKEks'@;
put 'Xyl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGcoVixwKXtpZighVil0aHJvdyBuZXcgRXJyb3IocHx8IkFzc2VydGlvbiBmYWlsZWQiKX1mdW5jdGlvbiBCKFYscCl7Vi5zdXBlcl89cDt2YXIgYj1mdW5jdGlvbigpe307Yi5wcm90b3R5cGU9cC5wcm90b3R5cGUsVi5wcm90b3R5cGU9bmV3IGIs'@;
put 'Vi5wcm90b3R5cGUuY29uc3RydWN0b3I9Vn1mdW5jdGlvbiB3KFYscCxiKXtpZih3LmlzQk4oVikpcmV0dXJuIFY7dGhpcy5uZWdhdGl2ZT0wLHRoaXMud29yZHM9bnVsbCx0aGlzLmxlbmd0aD0wLHRoaXMucmVkPW51bGwsbnVsbCE9PVYmJigoImxlIj09PXB8fCJiZSI9PT1wKSYmKGI9cCxw'@;
put 'PTEwKSx0aGlzLl9pbml0KFZ8fDAscHx8MTAsYnx8ImJlIikpfXZhciBQOyJvYmplY3QiPT10eXBlb2YgST9JLmV4cG9ydHM9dzpfLkJOPXcsdy5CTj13LHcud29yZFNpemU9MjY7dHJ5e1A9dHlwZW9mIHdpbmRvdzwidSImJnR5cGVvZiB3aW5kb3cuQnVmZmVyPCJ1Ij93aW5kb3cuQnVmZmVy'@;
put 'OnkoNjYxOSkuQnVmZmVyfWNhdGNoe31mdW5jdGlvbiBGKFYscCl7dmFyIGI9Vi5jaGFyQ29kZUF0KHApO3JldHVybiBiPj02NSYmYjw9NzA/Yi01NTpiPj05NyYmYjw9MTAyP2ItODc6Yi00OCYxNX1mdW5jdGlvbiBPKFYscCxiKXt2YXIgeD1GKFYsYik7cmV0dXJuIGItMT49cCYmKHh8PUYo'@;
put 'VixiLTEpPDw0KSx4fWZ1bmN0aW9uIHooVixwLGIseCl7Zm9yKHZhciBDPTAsVD1NYXRoLm1pbihWLmxlbmd0aCxiKSxIPXA7SDxUO0grKyl7dmFyIGo9Vi5jaGFyQ29kZUF0KEgpLTQ4O0MqPXgsQys9aj49NDk/ai00OSsxMDpqPj0xNz9qLTE3KzEwOmp9cmV0dXJuIEN9dy5pc0JOPWZ1bmN0'@;
put 'aW9uKHApe3JldHVybiBwIGluc3RhbmNlb2Ygd3x8bnVsbCE9PXAmJiJvYmplY3QiPT10eXBlb2YgcCYmcC5jb25zdHJ1Y3Rvci53b3JkU2l6ZT09PXcud29yZFNpemUmJkFycmF5LmlzQXJyYXkocC53b3Jkcyl9LHcubWF4PWZ1bmN0aW9uKHAsYil7cmV0dXJuIHAuY21wKGIpPjA/cDpifSx3'@;
put 'Lm1pbj1mdW5jdGlvbihwLGIpe3JldHVybiBwLmNtcChiKTwwP3A6Yn0sdy5wcm90b3R5cGUuX2luaXQ9ZnVuY3Rpb24ocCxiLHgpe2lmKCJudW1iZXIiPT10eXBlb2YgcClyZXR1cm4gdGhpcy5faW5pdE51bWJlcihwLGIseCk7aWYoIm9iamVjdCI9PXR5cGVvZiBwKXJldHVybiB0aGlzLl9p'@;
put 'bml0QXJyYXkocCxiLHgpOyJoZXgiPT09YiYmKGI9MTYpLGcoYj09PSgwfGIpJiZiPj0yJiZiPD0zNik7dmFyIEM9MDsiLSI9PT0ocD1wLnRvU3RyaW5nKCkucmVwbGFjZSgvXHMrL2csIiIpKVswXSYmKEMrKyx0aGlzLm5lZ2F0aXZlPTEpLEM8cC5sZW5ndGgmJigxNj09PWI/dGhpcy5fcGFy'@;
put 'c2VIZXgocCxDLHgpOih0aGlzLl9wYXJzZUJhc2UocCxiLEMpLCJsZSI9PT14JiZ0aGlzLl9pbml0QXJyYXkodGhpcy50b0FycmF5KCksYix4KSkpfSx3LnByb3RvdHlwZS5faW5pdE51bWJlcj1mdW5jdGlvbihwLGIseCl7cDwwJiYodGhpcy5uZWdhdGl2ZT0xLHA9LXApLHA8NjcxMDg4NjQ/'@;
put 'KHRoaXMud29yZHM9WzY3MTA4ODYzJnBdLHRoaXMubGVuZ3RoPTEpOnA8NDUwMzU5OTYyNzM3MDQ5Nj8odGhpcy53b3Jkcz1bNjcxMDg4NjMmcCxwLzY3MTA4ODY0JjY3MTA4ODYzXSx0aGlzLmxlbmd0aD0yKTooZyhwPDkwMDcxOTkyNTQ3NDA5OTIpLHRoaXMud29yZHM9WzY3MTA4ODYzJnAs'@;
put 'cC82NzEwODg2NCY2NzEwODg2MywxXSx0aGlzLmxlbmd0aD0zKSwibGUiPT09eCYmdGhpcy5faW5pdEFycmF5KHRoaXMudG9BcnJheSgpLGIseCl9LHcucHJvdG90eXBlLl9pbml0QXJyYXk9ZnVuY3Rpb24ocCxiLHgpe2lmKGcoIm51bWJlciI9PXR5cGVvZiBwLmxlbmd0aCkscC5sZW5ndGg8'@;
put 'PTApcmV0dXJuIHRoaXMud29yZHM9WzBdLHRoaXMubGVuZ3RoPTEsdGhpczt0aGlzLmxlbmd0aD1NYXRoLmNlaWwocC5sZW5ndGgvMyksdGhpcy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgQz0wO0M8dGhpcy5sZW5ndGg7QysrKXRoaXMud29yZHNbQ109MDt2YXIgVCxI'@;
put 'LGo9MDtpZigiYmUiPT09eClmb3IoQz1wLmxlbmd0aC0xLFQ9MDtDPj0wO0MtPTMpdGhpcy53b3Jkc1tUXXw9KEg9cFtDXXxwW0MtMV08PDh8cFtDLTJdPDwxNik8PGomNjcxMDg4NjMsdGhpcy53b3Jkc1tUKzFdPUg+Pj4yNi1qJjY3MTA4ODYzLChqKz0yNCk+PTI2JiYoai09MjYsVCsrKTtl'@;
put 'bHNlIGlmKCJsZSI9PT14KWZvcihDPTAsVD0wO0M8cC5sZW5ndGg7Qys9Myl0aGlzLndvcmRzW1RdfD0oSD1wW0NdfHBbQysxXTw8OHxwW0MrMl08PDE2KTw8aiY2NzEwODg2Myx0aGlzLndvcmRzW1QrMV09SD4+PjI2LWomNjcxMDg4NjMsKGorPTI0KT49MjYmJihqLT0yNixUKyspO3JldHVy'@;
put 'biB0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLl9wYXJzZUhleD1mdW5jdGlvbihwLGIseCl7dGhpcy5sZW5ndGg9TWF0aC5jZWlsKChwLmxlbmd0aC1iKS82KSx0aGlzLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciBDPTA7Qzx0aGlzLmxlbmd0aDtDKyspdGhpcy53b3Jk'@;
put 'c1tDXT0wO3ZhciBqLFQ9MCxIPTA7aWYoImJlIj09PXgpZm9yKEM9cC5sZW5ndGgtMTtDPj1iO0MtPTIpaj1PKHAsYixDKTw8VCx0aGlzLndvcmRzW0hdfD02NzEwODg2MyZqLFQ+PTE4PyhULT0xOCx0aGlzLndvcmRzW0grPTFdfD1qPj4+MjYpOlQrPTg7ZWxzZSBmb3IoQz0ocC5sZW5ndGgt'@;
put 'YiklMj09MD9iKzE6YjtDPHAubGVuZ3RoO0MrPTIpaj1PKHAsYixDKTw8VCx0aGlzLndvcmRzW0hdfD02NzEwODg2MyZqLFQ+PTE4PyhULT0xOCx0aGlzLndvcmRzW0grPTFdfD1qPj4+MjYpOlQrPTg7dGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5fcGFyc2VCYXNlPWZ1bmN0aW9uKHAsYix4'@;
put 'KXt0aGlzLndvcmRzPVswXSx0aGlzLmxlbmd0aD0xO2Zvcih2YXIgQz0wLFQ9MTtUPD02NzEwODg2MztUKj1iKUMrKztDLS0sVD1UL2J8MDtmb3IodmFyIEg9cC5sZW5ndGgteCxqPUglQyxFPU1hdGgubWluKEgsSC1qKSt4LG09MCxBPXg7QTxFO0ErPUMpbT16KHAsQSxBK0MsYiksdGhpcy5p'@;
put 'bXVsbihUKSx0aGlzLndvcmRzWzBdK208NjcxMDg4NjQ/dGhpcy53b3Jkc1swXSs9bTp0aGlzLl9pYWRkbihtKTtpZigwIT09ail7dmFyIGFlPTE7Zm9yKG09eihwLEEscC5sZW5ndGgsYiksQT0wO0E8ajtBKyspYWUqPWI7dGhpcy5pbXVsbihhZSksdGhpcy53b3Jkc1swXSttPDY3MTA4ODY0'@;
put 'P3RoaXMud29yZHNbMF0rPW06dGhpcy5faWFkZG4obSl9dGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKHApe3Aud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIGI9MDtiPHRoaXMubGVuZ3RoO2IrKylwLndvcmRzW2JdPXRoaXMud29yZHNbYl07cC5s'@;
put 'ZW5ndGg9dGhpcy5sZW5ndGgscC5uZWdhdGl2ZT10aGlzLm5lZ2F0aXZlLHAucmVkPXRoaXMucmVkfSx3LnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbigpe3ZhciBwPW5ldyB3KG51bGwpO3JldHVybiB0aGlzLmNvcHkocCkscH0sdy5wcm90b3R5cGUuX2V4cGFuZD1mdW5jdGlvbihwKXtmb3Io'@;
put 'O3RoaXMubGVuZ3RoPHA7KXRoaXMud29yZHNbdGhpcy5sZW5ndGgrK109MDtyZXR1cm4gdGhpc30sdy5wcm90b3R5cGUuc3RyaXA9ZnVuY3Rpb24oKXtmb3IoO3RoaXMubGVuZ3RoPjEmJjA9PT10aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdOyl0aGlzLmxlbmd0aC0tO3JldHVybiB0aGlzLl9u'@;
put 'b3JtU2lnbigpfSx3LnByb3RvdHlwZS5fbm9ybVNpZ249ZnVuY3Rpb24oKXtyZXR1cm4gMT09PXRoaXMubGVuZ3RoJiYwPT09dGhpcy53b3Jkc1swXSYmKHRoaXMubmVnYXRpdmU9MCksdGhpc30sdy5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlvbigpe3JldHVybih0aGlzLnJlZD8iPEJOLVI6'@;
put 'ICI6IjxCTjogIikrdGhpcy50b1N0cmluZygxNikrIj4ifTt2YXIgTj1bIiIsIjAiLCIwMCIsIjAwMCIsIjAwMDAiLCIwMDAwMCIsIjAwMDAwMCIsIjAwMDAwMDAiLCIwMDAwMDAwMCIsIjAwMDAwMDAwMCIsIjAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMCIsIjAwMDAw'@;
put 'MDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAw'@;
put 'MDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiXSxMPVswLDAsMjUsMTYsMTIsMTEsMTAsOSw4LDgsNyw3LDcsNyw2LDYsNiw2LDYsNiw2'@;
put 'LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDVdLEs9WzAsMCwzMzU1NDQzMiw0MzA0NjcyMSwxNjc3NzIxNiw0ODgyODEyNSw2MDQ2NjE3Niw0MDM1MzYwNywxNjc3NzIxNiw0MzA0NjcyMSwxZTcsMTk0ODcxNzEsMzU4MzE4MDgsNjI3NDg1MTcsNzUyOTUzNiwxMTM5MDYyNSwxNjc3'@;
put 'NzIxNiwyNDEzNzU2OSwzNDAxMjIyNCw0NzA0NTg4MSw2NGU2LDQwODQxMDEsNTE1MzYzMiw2NDM2MzQzLDc5NjI2MjQsOTc2NTYyNSwxMTg4MTM3NiwxNDM0ODkwNywxNzIxMDM2OCwyMDUxMTE0OSwyNDNlNSwyODYyOTE1MSwzMzU1NDQzMiwzOTEzNTM5Myw0NTQzNTQyNCw1MjUyMTg3NSw2'@;
put 'MDQ2NjE3Nl07ZnVuY3Rpb24gVyhWLHAsYil7Yi5uZWdhdGl2ZT1wLm5lZ2F0aXZlXlYubmVnYXRpdmU7dmFyIHg9Vi5sZW5ndGgrcC5sZW5ndGh8MDtiLmxlbmd0aD14LHg9eC0xfDA7dmFyIEM9MHxWLndvcmRzWzBdLFQ9MHxwLndvcmRzWzBdLEg9QypULEU9SC82NzEwODg2NHwwO2Iud29y'@;
put 'ZHNbMF09NjcxMDg4NjMmSDtmb3IodmFyIG09MTttPHg7bSsrKXtmb3IodmFyIEE9RT4+PjI2LGFlPTY3MTA4ODYzJkUsdGU9TWF0aC5taW4obSxwLmxlbmd0aC0xKSxzZT1NYXRoLm1heCgwLG0tVi5sZW5ndGgrMSk7c2U8PXRlO3NlKyspQSs9KEg9KEM9MHxWLndvcmRzW20tc2V8MF0pKihU'@;
put 'PTB8cC53b3Jkc1tzZV0pK2FlKS82NzEwODg2NHwwLGFlPTY3MTA4ODYzJkg7Yi53b3Jkc1ttXT0wfGFlLEU9MHxBfXJldHVybiAwIT09RT9iLndvcmRzW21dPTB8RTpiLmxlbmd0aC0tLGIuc3RyaXAoKX13LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbihwLGIpe3ZhciB4O2lmKGI9MHxi'@;
put 'fHwxLDE2PT09KHA9cHx8MTApfHwiaGV4Ij09PXApe3g9IiI7Zm9yKHZhciBDPTAsVD0wLEg9MDtIPHRoaXMubGVuZ3RoO0grKyl7dmFyIGo9dGhpcy53b3Jkc1tIXSxFPSgxNjc3NzIxNSYoajw8Q3xUKSkudG9TdHJpbmcoMTYpO1Q9aj4+PjI0LUMmMTY3NzcyMTUsKEMrPTIpPj0yNiYmKEMt'@;
put 'PTI2LEgtLSkseD0wIT09VHx8SCE9PXRoaXMubGVuZ3RoLTE/Tls2LUUubGVuZ3RoXStFK3g6RSt4fWZvcigwIT09VCYmKHg9VC50b1N0cmluZygxNikreCk7eC5sZW5ndGglYiE9MDspeD0iMCIreDtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmUmJih4PSItIit4KSx4fWlmKHA9PT0oMHxwKSYm'@;
put 'cD49MiYmcDw9MzYpe3ZhciBtPUxbcF0sQT1LW3BdO3g9IiI7dmFyIGFlPXRoaXMuY2xvbmUoKTtmb3IoYWUubmVnYXRpdmU9MDshYWUuaXNaZXJvKCk7KXt2YXIgdGU9YWUubW9kbihBKS50b1N0cmluZyhwKTt4PShhZT1hZS5pZGl2bihBKSkuaXNaZXJvKCk/dGUreDpOW20tdGUubGVuZ3Ro'@;
put 'XSt0ZSt4fWZvcih0aGlzLmlzWmVybygpJiYoeD0iMCIreCk7eC5sZW5ndGglYiE9MDspeD0iMCIreDtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmUmJih4PSItIit4KSx4fWcoITEsIkJhc2Ugc2hvdWxkIGJlIGJldHdlZW4gMiBhbmQgMzYiKX0sdy5wcm90b3R5cGUudG9OdW1iZXI9ZnVuY3Rp'@;
put 'b24oKXt2YXIgcD10aGlzLndvcmRzWzBdO3JldHVybiAyPT09dGhpcy5sZW5ndGg/cCs9NjcxMDg4NjQqdGhpcy53b3Jkc1sxXTozPT09dGhpcy5sZW5ndGgmJjE9PT10aGlzLndvcmRzWzJdP3ArPTQ1MDM1OTk2MjczNzA0OTYrNjcxMDg4NjQqdGhpcy53b3Jkc1sxXTp0aGlzLmxlbmd0aD4y'@;
put 'JiZnKCExLCJOdW1iZXIgY2FuIG9ubHkgc2FmZWx5IHN0b3JlIHVwIHRvIDUzIGJpdHMiKSwwIT09dGhpcy5uZWdhdGl2ZT8tcDpwfSx3LnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50b1N0cmluZygxNil9LHcucHJvdG90eXBlLnRvQnVmZmVyPWZ1bmN0aW9uKHAs'@;
put 'Yil7cmV0dXJuIGcodHlwZW9mIFA8InUiKSx0aGlzLnRvQXJyYXlMaWtlKFAscCxiKX0sdy5wcm90b3R5cGUudG9BcnJheT1mdW5jdGlvbihwLGIpe3JldHVybiB0aGlzLnRvQXJyYXlMaWtlKEFycmF5LHAsYil9LHcucHJvdG90eXBlLnRvQXJyYXlMaWtlPWZ1bmN0aW9uKHAsYix4KXt2YXIg'@;
put 'Qz10aGlzLmJ5dGVMZW5ndGgoKSxUPXh8fE1hdGgubWF4KDEsQyk7ZyhDPD1ULCJieXRlIGFycmF5IGxvbmdlciB0aGFuIGRlc2lyZWQgbGVuZ3RoIiksZyhUPjAsIlJlcXVlc3RlZCBhcnJheSBsZW5ndGggPD0gMCIpLHRoaXMuc3RyaXAoKTt2YXIgRSxtLEg9ImxlIj09PWIsaj1uZXcgcChU'@;
put 'KSxBPXRoaXMuY2xvbmUoKTtpZihIKXtmb3IobT0wOyFBLmlzWmVybygpO20rKylFPUEuYW5kbG4oMjU1KSxBLml1c2hybig4KSxqW21dPUU7Zm9yKDttPFQ7bSsrKWpbbV09MH1lbHNle2ZvcihtPTA7bTxULUM7bSsrKWpbbV09MDtmb3IobT0wOyFBLmlzWmVybygpO20rKylFPUEuYW5kbG4o'@;
put 'MjU1KSxBLml1c2hybig4KSxqW1QtbS0xXT1FfXJldHVybiBqfSx3LnByb3RvdHlwZS5fY291bnRCaXRzPU1hdGguY2x6MzI/ZnVuY3Rpb24ocCl7cmV0dXJuIDMyLU1hdGguY2x6MzIocCl9OmZ1bmN0aW9uKHApe3ZhciBiPXAseD0wO3JldHVybiBiPj00MDk2JiYoeCs9MTMsYj4+Pj0xMyks'@;
put 'Yj49NjQmJih4Kz03LGI+Pj49NyksYj49OCYmKHgrPTQsYj4+Pj00KSxiPj0yJiYoeCs9MixiPj4+PTIpLHgrYn0sdy5wcm90b3R5cGUuX3plcm9CaXRzPWZ1bmN0aW9uKHApe2lmKDA9PT1wKXJldHVybiAyNjt2YXIgYj1wLHg9MDtyZXR1cm4gODE5MSZifHwoeCs9MTMsYj4+Pj0xMyksMTI3'@;
put 'JmJ8fCh4Kz03LGI+Pj49NyksMTUmYnx8KHgrPTQsYj4+Pj00KSwzJmJ8fCh4Kz0yLGI+Pj49MiksMSZifHx4KysseH0sdy5wcm90b3R5cGUuYml0TGVuZ3RoPWZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5fY291bnRCaXRzKHRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV0pO3JldHVybiAyNioodGhp'@;
put 'cy5sZW5ndGgtMSkrYn0sdy5wcm90b3R5cGUuemVyb0JpdHM9ZnVuY3Rpb24oKXtpZih0aGlzLmlzWmVybygpKXJldHVybiAwO2Zvcih2YXIgcD0wLGI9MDtiPHRoaXMubGVuZ3RoO2IrKyl7dmFyIHg9dGhpcy5femVyb0JpdHModGhpcy53b3Jkc1tiXSk7aWYocCs9eCwyNiE9PXgpYnJlYWt9'@;
put 'cmV0dXJuIHB9LHcucHJvdG90eXBlLmJ5dGVMZW5ndGg9ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5jZWlsKHRoaXMuYml0TGVuZ3RoKCkvOCl9LHcucHJvdG90eXBlLnRvVHdvcz1mdW5jdGlvbihwKXtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/dGhpcy5hYnMoKS5pbm90bihwKS5pYWRkbigx'@;
put 'KTp0aGlzLmNsb25lKCl9LHcucHJvdG90eXBlLmZyb21Ud29zPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLnRlc3RuKHAtMSk/dGhpcy5ub3RuKHApLmlhZGRuKDEpLmluZWcoKTp0aGlzLmNsb25lKCl9LHcucHJvdG90eXBlLmlzTmVnPWZ1bmN0aW9uKCl7cmV0dXJuIDAhPT10aGlzLm5lZ2F0'@;
put 'aXZlfSx3LnByb3RvdHlwZS5uZWc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmluZWcoKX0sdy5wcm90b3R5cGUuaW5lZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzWmVybygpfHwodGhpcy5uZWdhdGl2ZV49MSksdGhpc30sdy5wcm90b3R5cGUuaXVvcj1mdW5jdGlvbihwKXtm'@;
put 'b3IoO3RoaXMubGVuZ3RoPHAubGVuZ3RoOyl0aGlzLndvcmRzW3RoaXMubGVuZ3RoKytdPTA7Zm9yKHZhciBiPTA7YjxwLmxlbmd0aDtiKyspdGhpcy53b3Jkc1tiXT10aGlzLndvcmRzW2JdfHAud29yZHNbYl07cmV0dXJuIHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuaW9yPWZ1bmN0aW9u'@;
put 'KHApe3JldHVybiBnKCEodGhpcy5uZWdhdGl2ZXxwLm5lZ2F0aXZlKSksdGhpcy5pdW9yKHApfSx3LnByb3RvdHlwZS5vcj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5sZW5ndGg+cC5sZW5ndGg/dGhpcy5jbG9uZSgpLmlvcihwKTpwLmNsb25lKCkuaW9yKHRoaXMpfSx3LnByb3RvdHlwZS51'@;
put 'b3I9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMubGVuZ3RoPnAubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdW9yKHApOnAuY2xvbmUoKS5pdW9yKHRoaXMpfSx3LnByb3RvdHlwZS5pdWFuZD1mdW5jdGlvbihwKXt2YXIgYjtiPXRoaXMubGVuZ3RoPnAubGVuZ3RoP3A6dGhpcztmb3IodmFyIHg9MDt4'@;
put 'PGIubGVuZ3RoO3grKyl0aGlzLndvcmRzW3hdPXRoaXMud29yZHNbeF0mcC53b3Jkc1t4XTtyZXR1cm4gdGhpcy5sZW5ndGg9Yi5sZW5ndGgsdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5pYW5kPWZ1bmN0aW9uKHApe3JldHVybiBnKCEodGhpcy5uZWdhdGl2ZXxwLm5lZ2F0aXZlKSksdGhp'@;
put 'cy5pdWFuZChwKX0sdy5wcm90b3R5cGUuYW5kPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmxlbmd0aD5wLmxlbmd0aD90aGlzLmNsb25lKCkuaWFuZChwKTpwLmNsb25lKCkuaWFuZCh0aGlzKX0sdy5wcm90b3R5cGUudWFuZD1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5sZW5ndGg+cC5sZW5n'@;
put 'dGg/dGhpcy5jbG9uZSgpLml1YW5kKHApOnAuY2xvbmUoKS5pdWFuZCh0aGlzKX0sdy5wcm90b3R5cGUuaXV4b3I9ZnVuY3Rpb24ocCl7dmFyIGIseDt0aGlzLmxlbmd0aD5wLmxlbmd0aD8oYj10aGlzLHg9cCk6KGI9cCx4PXRoaXMpO2Zvcih2YXIgQz0wO0M8eC5sZW5ndGg7QysrKXRoaXMu'@;
put 'd29yZHNbQ109Yi53b3Jkc1tDXV54LndvcmRzW0NdO2lmKHRoaXMhPT1iKWZvcig7QzxiLmxlbmd0aDtDKyspdGhpcy53b3Jkc1tDXT1iLndvcmRzW0NdO3JldHVybiB0aGlzLmxlbmd0aD1iLmxlbmd0aCx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLml4b3I9ZnVuY3Rpb24ocCl7cmV0dXJu'@;
put 'IGcoISh0aGlzLm5lZ2F0aXZlfHAubmVnYXRpdmUpKSx0aGlzLml1eG9yKHApfSx3LnByb3RvdHlwZS54b3I9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMubGVuZ3RoPnAubGVuZ3RoP3RoaXMuY2xvbmUoKS5peG9yKHApOnAuY2xvbmUoKS5peG9yKHRoaXMpfSx3LnByb3RvdHlwZS51eG9yPWZ1'@;
put 'bmN0aW9uKHApe3JldHVybiB0aGlzLmxlbmd0aD5wLmxlbmd0aD90aGlzLmNsb25lKCkuaXV4b3IocCk6cC5jbG9uZSgpLml1eG9yKHRoaXMpfSx3LnByb3RvdHlwZS5pbm90bj1mdW5jdGlvbihwKXtnKCJudW1iZXIiPT10eXBlb2YgcCYmcD49MCk7dmFyIGI9MHxNYXRoLmNlaWwocC8yNiks'@;
put 'eD1wJTI2O3RoaXMuX2V4cGFuZChiKSx4PjAmJmItLTtmb3IodmFyIEM9MDtDPGI7QysrKXRoaXMud29yZHNbQ109NjcxMDg4NjMmfnRoaXMud29yZHNbQ107cmV0dXJuIHg+MCYmKHRoaXMud29yZHNbQ109fnRoaXMud29yZHNbQ10mNjcxMDg4NjM+PjI2LXgpLHRoaXMuc3RyaXAoKX0sdy5w'@;
put 'cm90b3R5cGUubm90bj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlub3RuKHApfSx3LnByb3RvdHlwZS5zZXRuPWZ1bmN0aW9uKHAsYil7ZygibnVtYmVyIj09dHlwZW9mIHAmJnA+PTApO3ZhciB4PXAvMjZ8MCxDPXAlMjY7cmV0dXJuIHRoaXMuX2V4cGFuZCh4KzEpLHRoaXMu'@;
put 'd29yZHNbeF09Yj90aGlzLndvcmRzW3hdfDE8PEM6dGhpcy53b3Jkc1t4XSZ+KDE8PEMpLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuaWFkZD1mdW5jdGlvbihwKXt2YXIgYix4LEM7aWYoMCE9PXRoaXMubmVnYXRpdmUmJjA9PT1wLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAs'@;
put 'Yj10aGlzLmlzdWIocCksdGhpcy5uZWdhdGl2ZV49MSx0aGlzLl9ub3JtU2lnbigpO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiYwIT09cC5uZWdhdGl2ZSlyZXR1cm4gcC5uZWdhdGl2ZT0wLGI9dGhpcy5pc3ViKHApLHAubmVnYXRpdmU9MSxiLl9ub3JtU2lnbigpO3RoaXMubGVuZ3RoPnAubGVu'@;
put 'Z3RoPyh4PXRoaXMsQz1wKTooeD1wLEM9dGhpcyk7Zm9yKHZhciBUPTAsSD0wO0g8Qy5sZW5ndGg7SCsrKXRoaXMud29yZHNbSF09NjcxMDg4NjMmKGI9KDB8eC53b3Jkc1tIXSkrKDB8Qy53b3Jkc1tIXSkrVCksVD1iPj4+MjY7Zm9yKDswIT09VCYmSDx4Lmxlbmd0aDtIKyspdGhpcy53b3Jk'@;
put 'c1tIXT02NzEwODg2MyYoYj0oMHx4LndvcmRzW0hdKStUKSxUPWI+Pj4yNjtpZih0aGlzLmxlbmd0aD14Lmxlbmd0aCwwIT09VCl0aGlzLndvcmRzW3RoaXMubGVuZ3RoXT1ULHRoaXMubGVuZ3RoKys7ZWxzZSBpZih4IT09dGhpcylmb3IoO0g8eC5sZW5ndGg7SCsrKXRoaXMud29yZHNbSF09'@;
put 'eC53b3Jkc1tIXTtyZXR1cm4gdGhpc30sdy5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKHApe3ZhciBiO3JldHVybiAwIT09cC5uZWdhdGl2ZSYmMD09PXRoaXMubmVnYXRpdmU/KHAubmVnYXRpdmU9MCxiPXRoaXMuc3ViKHApLHAubmVnYXRpdmVePTEsYik6MD09PXAubmVnYXRpdmUmJjAhPT10'@;
put 'aGlzLm5lZ2F0aXZlPyh0aGlzLm5lZ2F0aXZlPTAsYj1wLnN1Yih0aGlzKSx0aGlzLm5lZ2F0aXZlPTEsYik6dGhpcy5sZW5ndGg+cC5sZW5ndGg/dGhpcy5jbG9uZSgpLmlhZGQocCk6cC5jbG9uZSgpLmlhZGQodGhpcyl9LHcucHJvdG90eXBlLmlzdWI9ZnVuY3Rpb24ocCl7aWYoMCE9PXAu'@;
put 'bmVnYXRpdmUpe3AubmVnYXRpdmU9MDt2YXIgYj10aGlzLmlhZGQocCk7cmV0dXJuIHAubmVnYXRpdmU9MSxiLl9ub3JtU2lnbigpfWlmKDAhPT10aGlzLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pYWRkKHApLHRoaXMubmVnYXRpdmU9MSx0aGlzLl9ub3JtU2lnbigp'@;
put 'O3ZhciBDLFQseD10aGlzLmNtcChwKTtpZigwPT09eClyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMubGVuZ3RoPTEsdGhpcy53b3Jkc1swXT0wLHRoaXM7eD4wPyhDPXRoaXMsVD1wKTooQz1wLFQ9dGhpcyk7Zm9yKHZhciBIPTAsaj0wO2o8VC5sZW5ndGg7aisrKUg9KGI9KDB8Qy53b3Jk'@;
put 'c1tqXSktKDB8VC53b3Jkc1tqXSkrSCk+PjI2LHRoaXMud29yZHNbal09NjcxMDg4NjMmYjtmb3IoOzAhPT1IJiZqPEMubGVuZ3RoO2orKylIPShiPSgwfEMud29yZHNbal0pK0gpPj4yNix0aGlzLndvcmRzW2pdPTY3MTA4ODYzJmI7aWYoMD09PUgmJmo8Qy5sZW5ndGgmJkMhPT10aGlzKWZv'@;
put 'cig7ajxDLmxlbmd0aDtqKyspdGhpcy53b3Jkc1tqXT1DLndvcmRzW2pdO3JldHVybiB0aGlzLmxlbmd0aD1NYXRoLm1heCh0aGlzLmxlbmd0aCxqKSxDIT09dGhpcyYmKHRoaXMubmVnYXRpdmU9MSksdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5zdWI9ZnVuY3Rpb24ocCl7cmV0dXJuIHRo'@;
put 'aXMuY2xvbmUoKS5pc3ViKHApfTt2YXIgWT1mdW5jdGlvbihwLGIseCl7dmFyIEUsbSxBLEM9cC53b3JkcyxUPWIud29yZHMsSD14LndvcmRzLGo9MCxhZT0wfENbMF0sdGU9ODE5MSZhZSxzZT1hZT4+PjEzLHdlPTB8Q1sxXSxVZT04MTkxJndlLEplPXdlPj4+MTMsb3Q9MHxDWzJdLHhlPTgx'@;
put 'OTEmb3QsdmU9b3Q+Pj4xMyxYZT0wfENbM10semU9ODE5MSZYZSxEZT1YZT4+PjEzLEZlPTB8Q1s0XSxPZT04MTkxJkZlLEllPUZlPj4+MTMsVmU9MHxDWzVdLGtlPTgxOTEmVmUsQWU9VmU+Pj4xMyxfdD0wfENbNl0sbnQ9ODE5MSZfdCxRZT1fdD4+PjEzLHVuPTB8Q1s3XSx5dD04MTkxJnVu'@;
put 'LE10PXVuPj4+MTMsRHQ9MHxDWzhdLGl0PTgxOTEmRHQsJGU9RHQ+Pj4xMyx0dD0wfENbOV0sSGU9ODE5MSZ0dCx1dD10dD4+PjEzLHF0PTB8VFswXSxSdD04MTkxJnF0LFB0PXF0Pj4+MTMsY2k9MHxUWzFdLFF0PTgxOTEmY2ksc249Y2k+Pj4xMyxSaT0wfFRbMl0saG49ODE5MSZSaSxmdD1S'@;
put 'aT4+PjEzLE9yPTB8VFszXSxXdD04MTkxJk9yLEF0PU9yPj4+MTMsUm49MHxUWzRdLHN0PTgxOTEmUm4sVXQ9Um4+Pj4xMyxyaT0wfFRbNV0sV2U9ODE5MSZyaSxUdD1yaT4+PjEzLG5yPTB8VFs2XSxodD04MTkxJm5yLHh0PW5yPj4+MTMsam49MHxUWzddLHJuPTgxOTEmam4senQ9am4+Pj4x'@;
put 'MyxoaT0wfFRbOF0sY249ODE5MSZoaSxmbj1oaT4+PjEzLElpPTB8VFs5XSxYdD04MTkxJklpLGVuPUlpPj4+MTM7eC5uZWdhdGl2ZT1wLm5lZ2F0aXZlXmIubmVnYXRpdmUseC5sZW5ndGg9MTk7dmFyIHVhPShqKyhFPU1hdGguaW11bCh0ZSxSdCkpfDApKygoODE5MSYobT0obT1NYXRoLmlt'@;
put 'dWwodGUsUHQpKStNYXRoLmltdWwoc2UsUnQpfDApKTw8MTMpfDA7aj0oKEE9TWF0aC5pbXVsKHNlLFB0KSkrKG0+Pj4xMyl8MCkrKHVhPj4+MjYpfDAsdWEmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKFVlLFJ0KSxtPShtPU1hdGguaW11bChVZSxQdCkpK01hdGguaW11bChKZSxSdCl8MCxBPU1h'@;
put 'dGguaW11bChKZSxQdCk7dmFyIEVpPShqKyhFPUUrTWF0aC5pbXVsKHRlLFF0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwodGUsc24pfDApK01hdGguaW11bChzZSxRdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSxzbil8MCkrKG0+Pj4xMyl8MCkrKEVpPj4+MjYp'@;
put 'fDAsRWkmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKHhlLFJ0KSxtPShtPU1hdGguaW11bCh4ZSxQdCkpK01hdGguaW11bCh2ZSxSdCl8MCxBPU1hdGguaW11bCh2ZSxQdCksRT1FK01hdGguaW11bChVZSxRdCl8MCxtPShtPW0rTWF0aC5pbXVsKFVlLHNuKXwwKStNYXRoLmltdWwoSmUsUXQpfDAs'@;
put 'QT1BK01hdGguaW11bChKZSxzbil8MDt2YXIgdnI9KGorKEU9RStNYXRoLmltdWwodGUsaG4pfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh0ZSxmdCl8MCkrTWF0aC5pbXVsKHNlLGhuKXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLGZ0KXwwKSsobT4+PjEzKXwwKSso'@;
put 'dnI+Pj4yNil8MCx2ciY9NjcxMDg4NjMsRT1NYXRoLmltdWwoemUsUnQpLG09KG09TWF0aC5pbXVsKHplLFB0KSkrTWF0aC5pbXVsKERlLFJ0KXwwLEE9TWF0aC5pbXVsKERlLFB0KSxFPUUrTWF0aC5pbXVsKHhlLFF0KXwwLG09KG09bStNYXRoLmltdWwoeGUsc24pfDApK01hdGguaW11bCh2'@;
put 'ZSxRdCl8MCxBPUErTWF0aC5pbXVsKHZlLHNuKXwwLEU9RStNYXRoLmltdWwoVWUsaG4pfDAsbT0obT1tK01hdGguaW11bChVZSxmdCl8MCkrTWF0aC5pbXVsKEplLGhuKXwwLEE9QStNYXRoLmltdWwoSmUsZnQpfDA7dmFyIFduPShqKyhFPUUrTWF0aC5pbXVsKHRlLFd0KXwwKXwwKSsoKDgx'@;
put 'OTEmKG09KG09bStNYXRoLmltdWwodGUsQXQpfDApK01hdGguaW11bChzZSxXdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSxBdCl8MCkrKG0+Pj4xMyl8MCkrKFduPj4+MjYpfDAsV24mPTY3MTA4ODYzLEU9TWF0aC5pbXVsKE9lLFJ0KSxtPShtPU1hdGguaW11bChPZSxQdCkp'@;
put 'K01hdGguaW11bChJZSxSdCl8MCxBPU1hdGguaW11bChJZSxQdCksRT1FK01hdGguaW11bCh6ZSxRdCl8MCxtPShtPW0rTWF0aC5pbXVsKHplLHNuKXwwKStNYXRoLmltdWwoRGUsUXQpfDAsQT1BK01hdGguaW11bChEZSxzbil8MCxFPUUrTWF0aC5pbXVsKHhlLGhuKXwwLG09KG09bStNYXRo'@;
put 'LmltdWwoeGUsZnQpfDApK01hdGguaW11bCh2ZSxobil8MCxBPUErTWF0aC5pbXVsKHZlLGZ0KXwwLEU9RStNYXRoLmltdWwoVWUsV3QpfDAsbT0obT1tK01hdGguaW11bChVZSxBdCl8MCkrTWF0aC5pbXVsKEplLFd0KXwwLEE9QStNYXRoLmltdWwoSmUsQXQpfDA7dmFyICRpPShqKyhFPUUr'@;
put 'TWF0aC5pbXVsKHRlLHN0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwodGUsVXQpfDApK01hdGguaW11bChzZSxzdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSxVdCl8MCkrKG0+Pj4xMyl8MCkrKCRpPj4+MjYpfDAsJGkmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKGtl'@;
put 'LFJ0KSxtPShtPU1hdGguaW11bChrZSxQdCkpK01hdGguaW11bChBZSxSdCl8MCxBPU1hdGguaW11bChBZSxQdCksRT1FK01hdGguaW11bChPZSxRdCl8MCxtPShtPW0rTWF0aC5pbXVsKE9lLHNuKXwwKStNYXRoLmltdWwoSWUsUXQpfDAsQT1BK01hdGguaW11bChJZSxzbil8MCxFPUUrTWF0'@;
put 'aC5pbXVsKHplLGhuKXwwLG09KG09bStNYXRoLmltdWwoemUsZnQpfDApK01hdGguaW11bChEZSxobil8MCxBPUErTWF0aC5pbXVsKERlLGZ0KXwwLEU9RStNYXRoLmltdWwoeGUsV3QpfDAsbT0obT1tK01hdGguaW11bCh4ZSxBdCl8MCkrTWF0aC5pbXVsKHZlLFd0KXwwLEE9QStNYXRoLmlt'@;
put 'dWwodmUsQXQpfDAsRT1FK01hdGguaW11bChVZSxzdCl8MCxtPShtPW0rTWF0aC5pbXVsKFVlLFV0KXwwKStNYXRoLmltdWwoSmUsc3QpfDAsQT1BK01hdGguaW11bChKZSxVdCl8MDt2YXIgZWk9KGorKEU9RStNYXRoLmltdWwodGUsV2UpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11'@;
put 'bCh0ZSxUdCl8MCkrTWF0aC5pbXVsKHNlLFdlKXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLFR0KXwwKSsobT4+PjEzKXwwKSsoZWk+Pj4yNil8MCxlaSY9NjcxMDg4NjMsRT1NYXRoLmltdWwobnQsUnQpLG09KG09TWF0aC5pbXVsKG50LFB0KSkrTWF0aC5pbXVsKFFlLFJ0KXww'@;
put 'LEE9TWF0aC5pbXVsKFFlLFB0KSxFPUUrTWF0aC5pbXVsKGtlLFF0KXwwLG09KG09bStNYXRoLmltdWwoa2Usc24pfDApK01hdGguaW11bChBZSxRdCl8MCxBPUErTWF0aC5pbXVsKEFlLHNuKXwwLEU9RStNYXRoLmltdWwoT2UsaG4pfDAsbT0obT1tK01hdGguaW11bChPZSxmdCl8MCkrTWF0'@;
put 'aC5pbXVsKEllLGhuKXwwLEE9QStNYXRoLmltdWwoSWUsZnQpfDAsRT1FK01hdGguaW11bCh6ZSxXdCl8MCxtPShtPW0rTWF0aC5pbXVsKHplLEF0KXwwKStNYXRoLmltdWwoRGUsV3QpfDAsQT1BK01hdGguaW11bChEZSxBdCl8MCxFPUUrTWF0aC5pbXVsKHhlLHN0KXwwLG09KG09bStNYXRo'@;
put 'LmltdWwoeGUsVXQpfDApK01hdGguaW11bCh2ZSxzdCl8MCxBPUErTWF0aC5pbXVsKHZlLFV0KXwwLEU9RStNYXRoLmltdWwoVWUsV2UpfDAsbT0obT1tK01hdGguaW11bChVZSxUdCl8MCkrTWF0aC5pbXVsKEplLFdlKXwwLEE9QStNYXRoLmltdWwoSmUsVHQpfDA7dmFyIFFyPShqKyhFPUUr'@;
put 'TWF0aC5pbXVsKHRlLGh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwodGUseHQpfDApK01hdGguaW11bChzZSxodCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSx4dCl8MCkrKG0+Pj4xMyl8MCkrKFFyPj4+MjYpfDAsUXImPTY3MTA4ODYzLEU9TWF0aC5pbXVsKHl0'@;
put 'LFJ0KSxtPShtPU1hdGguaW11bCh5dCxQdCkpK01hdGguaW11bChNdCxSdCl8MCxBPU1hdGguaW11bChNdCxQdCksRT1FK01hdGguaW11bChudCxRdCl8MCxtPShtPW0rTWF0aC5pbXVsKG50LHNuKXwwKStNYXRoLmltdWwoUWUsUXQpfDAsQT1BK01hdGguaW11bChRZSxzbil8MCxFPUUrTWF0'@;
put 'aC5pbXVsKGtlLGhuKXwwLG09KG09bStNYXRoLmltdWwoa2UsZnQpfDApK01hdGguaW11bChBZSxobil8MCxBPUErTWF0aC5pbXVsKEFlLGZ0KXwwLEU9RStNYXRoLmltdWwoT2UsV3QpfDAsbT0obT1tK01hdGguaW11bChPZSxBdCl8MCkrTWF0aC5pbXVsKEllLFd0KXwwLEE9QStNYXRoLmlt'@;
put 'dWwoSWUsQXQpfDAsRT1FK01hdGguaW11bCh6ZSxzdCl8MCxtPShtPW0rTWF0aC5pbXVsKHplLFV0KXwwKStNYXRoLmltdWwoRGUsc3QpfDAsQT1BK01hdGguaW11bChEZSxVdCl8MCxFPUUrTWF0aC5pbXVsKHhlLFdlKXwwLG09KG09bStNYXRoLmltdWwoeGUsVHQpfDApK01hdGguaW11bCh2'@;
put 'ZSxXZSl8MCxBPUErTWF0aC5pbXVsKHZlLFR0KXwwLEU9RStNYXRoLmltdWwoVWUsaHQpfDAsbT0obT1tK01hdGguaW11bChVZSx4dCl8MCkrTWF0aC5pbXVsKEplLGh0KXwwLEE9QStNYXRoLmltdWwoSmUseHQpfDA7dmFyIFZpPShqKyhFPUUrTWF0aC5pbXVsKHRlLHJuKXwwKXwwKSsoKDgx'@;
put 'OTEmKG09KG09bStNYXRoLmltdWwodGUsenQpfDApK01hdGguaW11bChzZSxybil8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSx6dCl8MCkrKG0+Pj4xMyl8MCkrKFZpPj4+MjYpfDAsVmkmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKGl0LFJ0KSxtPShtPU1hdGguaW11bChpdCxQdCkp'@;
put 'K01hdGguaW11bCgkZSxSdCl8MCxBPU1hdGguaW11bCgkZSxQdCksRT1FK01hdGguaW11bCh5dCxRdCl8MCxtPShtPW0rTWF0aC5pbXVsKHl0LHNuKXwwKStNYXRoLmltdWwoTXQsUXQpfDAsQT1BK01hdGguaW11bChNdCxzbil8MCxFPUUrTWF0aC5pbXVsKG50LGhuKXwwLG09KG09bStNYXRo'@;
put 'LmltdWwobnQsZnQpfDApK01hdGguaW11bChRZSxobil8MCxBPUErTWF0aC5pbXVsKFFlLGZ0KXwwLEU9RStNYXRoLmltdWwoa2UsV3QpfDAsbT0obT1tK01hdGguaW11bChrZSxBdCl8MCkrTWF0aC5pbXVsKEFlLFd0KXwwLEE9QStNYXRoLmltdWwoQWUsQXQpfDAsRT1FK01hdGguaW11bChP'@;
put 'ZSxzdCl8MCxtPShtPW0rTWF0aC5pbXVsKE9lLFV0KXwwKStNYXRoLmltdWwoSWUsc3QpfDAsQT1BK01hdGguaW11bChJZSxVdCl8MCxFPUUrTWF0aC5pbXVsKHplLFdlKXwwLG09KG09bStNYXRoLmltdWwoemUsVHQpfDApK01hdGguaW11bChEZSxXZSl8MCxBPUErTWF0aC5pbXVsKERlLFR0'@;
put 'KXwwLEU9RStNYXRoLmltdWwoeGUsaHQpfDAsbT0obT1tK01hdGguaW11bCh4ZSx4dCl8MCkrTWF0aC5pbXVsKHZlLGh0KXwwLEE9QStNYXRoLmltdWwodmUseHQpfDAsRT1FK01hdGguaW11bChVZSxybil8MCxtPShtPW0rTWF0aC5pbXVsKFVlLHp0KXwwKStNYXRoLmltdWwoSmUscm4pfDAs'@;
put 'QT1BK01hdGguaW11bChKZSx6dCl8MDt2YXIgTmk9KGorKEU9RStNYXRoLmltdWwodGUsY24pfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh0ZSxmbil8MCkrTWF0aC5pbXVsKHNlLGNuKXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLGZuKXwwKSsobT4+PjEzKXwwKSso'@;
put 'Tmk+Pj4yNil8MCxOaSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSGUsUnQpLG09KG09TWF0aC5pbXVsKEhlLFB0KSkrTWF0aC5pbXVsKHV0LFJ0KXwwLEE9TWF0aC5pbXVsKHV0LFB0KSxFPUUrTWF0aC5pbXVsKGl0LFF0KXwwLG09KG09bStNYXRoLmltdWwoaXQsc24pfDApK01hdGguaW11bCgk'@;
put 'ZSxRdCl8MCxBPUErTWF0aC5pbXVsKCRlLHNuKXwwLEU9RStNYXRoLmltdWwoeXQsaG4pfDAsbT0obT1tK01hdGguaW11bCh5dCxmdCl8MCkrTWF0aC5pbXVsKE10LGhuKXwwLEE9QStNYXRoLmltdWwoTXQsZnQpfDAsRT1FK01hdGguaW11bChudCxXdCl8MCxtPShtPW0rTWF0aC5pbXVsKG50'@;
put 'LEF0KXwwKStNYXRoLmltdWwoUWUsV3QpfDAsQT1BK01hdGguaW11bChRZSxBdCl8MCxFPUUrTWF0aC5pbXVsKGtlLHN0KXwwLG09KG09bStNYXRoLmltdWwoa2UsVXQpfDApK01hdGguaW11bChBZSxzdCl8MCxBPUErTWF0aC5pbXVsKEFlLFV0KXwwLEU9RStNYXRoLmltdWwoT2UsV2UpfDAs'@;
put 'bT0obT1tK01hdGguaW11bChPZSxUdCl8MCkrTWF0aC5pbXVsKEllLFdlKXwwLEE9QStNYXRoLmltdWwoSWUsVHQpfDAsRT1FK01hdGguaW11bCh6ZSxodCl8MCxtPShtPW0rTWF0aC5pbXVsKHplLHh0KXwwKStNYXRoLmltdWwoRGUsaHQpfDAsQT1BK01hdGguaW11bChEZSx4dCl8MCxFPUUr'@;
put 'TWF0aC5pbXVsKHhlLHJuKXwwLG09KG09bStNYXRoLmltdWwoeGUsenQpfDApK01hdGguaW11bCh2ZSxybil8MCxBPUErTWF0aC5pbXVsKHZlLHp0KXwwLEU9RStNYXRoLmltdWwoVWUsY24pfDAsbT0obT1tK01hdGguaW11bChVZSxmbil8MCkrTWF0aC5pbXVsKEplLGNuKXwwLEE9QStNYXRo'@;
put 'LmltdWwoSmUsZm4pfDA7dmFyIERhPShqKyhFPUUrTWF0aC5pbXVsKHRlLFh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwodGUsZW4pfDApK01hdGguaW11bChzZSxYdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSxlbil8MCkrKG0+Pj4xMyl8MCkrKERhPj4+MjYp'@;
put 'fDAsRGEmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKEhlLFF0KSxtPShtPU1hdGguaW11bChIZSxzbikpK01hdGguaW11bCh1dCxRdCl8MCxBPU1hdGguaW11bCh1dCxzbiksRT1FK01hdGguaW11bChpdCxobil8MCxtPShtPW0rTWF0aC5pbXVsKGl0LGZ0KXwwKStNYXRoLmltdWwoJGUsaG4pfDAs'@;
put 'QT1BK01hdGguaW11bCgkZSxmdCl8MCxFPUUrTWF0aC5pbXVsKHl0LFd0KXwwLG09KG09bStNYXRoLmltdWwoeXQsQXQpfDApK01hdGguaW11bChNdCxXdCl8MCxBPUErTWF0aC5pbXVsKE10LEF0KXwwLEU9RStNYXRoLmltdWwobnQsc3QpfDAsbT0obT1tK01hdGguaW11bChudCxVdCl8MCkr'@;
put 'TWF0aC5pbXVsKFFlLHN0KXwwLEE9QStNYXRoLmltdWwoUWUsVXQpfDAsRT1FK01hdGguaW11bChrZSxXZSl8MCxtPShtPW0rTWF0aC5pbXVsKGtlLFR0KXwwKStNYXRoLmltdWwoQWUsV2UpfDAsQT1BK01hdGguaW11bChBZSxUdCl8MCxFPUUrTWF0aC5pbXVsKE9lLGh0KXwwLG09KG09bStN'@;
put 'YXRoLmltdWwoT2UseHQpfDApK01hdGguaW11bChJZSxodCl8MCxBPUErTWF0aC5pbXVsKEllLHh0KXwwLEU9RStNYXRoLmltdWwoemUscm4pfDAsbT0obT1tK01hdGguaW11bCh6ZSx6dCl8MCkrTWF0aC5pbXVsKERlLHJuKXwwLEE9QStNYXRoLmltdWwoRGUsenQpfDAsRT1FK01hdGguaW11'@;
put 'bCh4ZSxjbil8MCxtPShtPW0rTWF0aC5pbXVsKHhlLGZuKXwwKStNYXRoLmltdWwodmUsY24pfDAsQT1BK01hdGguaW11bCh2ZSxmbil8MDt2YXIgTHI9KGorKEU9RStNYXRoLmltdWwoVWUsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChVZSxlbil8MCkrTWF0aC5pbXVsKEpl'@;
put 'LFh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKEplLGVuKXwwKSsobT4+PjEzKXwwKSsoTHI+Pj4yNil8MCxMciY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSGUsaG4pLG09KG09TWF0aC5pbXVsKEhlLGZ0KSkrTWF0aC5pbXVsKHV0LGhuKXwwLEE9TWF0aC5pbXVsKHV0LGZ0KSxFPUUr'@;
put 'TWF0aC5pbXVsKGl0LFd0KXwwLG09KG09bStNYXRoLmltdWwoaXQsQXQpfDApK01hdGguaW11bCgkZSxXdCl8MCxBPUErTWF0aC5pbXVsKCRlLEF0KXwwLEU9RStNYXRoLmltdWwoeXQsc3QpfDAsbT0obT1tK01hdGguaW11bCh5dCxVdCl8MCkrTWF0aC5pbXVsKE10LHN0KXwwLEE9QStNYXRo'@;
put 'LmltdWwoTXQsVXQpfDAsRT1FK01hdGguaW11bChudCxXZSl8MCxtPShtPW0rTWF0aC5pbXVsKG50LFR0KXwwKStNYXRoLmltdWwoUWUsV2UpfDAsQT1BK01hdGguaW11bChRZSxUdCl8MCxFPUUrTWF0aC5pbXVsKGtlLGh0KXwwLG09KG09bStNYXRoLmltdWwoa2UseHQpfDApK01hdGguaW11'@;
put 'bChBZSxodCl8MCxBPUErTWF0aC5pbXVsKEFlLHh0KXwwLEU9RStNYXRoLmltdWwoT2Uscm4pfDAsbT0obT1tK01hdGguaW11bChPZSx6dCl8MCkrTWF0aC5pbXVsKEllLHJuKXwwLEE9QStNYXRoLmltdWwoSWUsenQpfDAsRT1FK01hdGguaW11bCh6ZSxjbil8MCxtPShtPW0rTWF0aC5pbXVs'@;
put 'KHplLGZuKXwwKStNYXRoLmltdWwoRGUsY24pfDAsQT1BK01hdGguaW11bChEZSxmbil8MDt2YXIgV2k9KGorKEU9RStNYXRoLmltdWwoeGUsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh4ZSxlbil8MCkrTWF0aC5pbXVsKHZlLFh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0'@;
put 'aC5pbXVsKHZlLGVuKXwwKSsobT4+PjEzKXwwKSsoV2k+Pj4yNil8MCxXaSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSGUsV3QpLG09KG09TWF0aC5pbXVsKEhlLEF0KSkrTWF0aC5pbXVsKHV0LFd0KXwwLEE9TWF0aC5pbXVsKHV0LEF0KSxFPUUrTWF0aC5pbXVsKGl0LHN0KXwwLG09KG09bStN'@;
put 'YXRoLmltdWwoaXQsVXQpfDApK01hdGguaW11bCgkZSxzdCl8MCxBPUErTWF0aC5pbXVsKCRlLFV0KXwwLEU9RStNYXRoLmltdWwoeXQsV2UpfDAsbT0obT1tK01hdGguaW11bCh5dCxUdCl8MCkrTWF0aC5pbXVsKE10LFdlKXwwLEE9QStNYXRoLmltdWwoTXQsVHQpfDAsRT1FK01hdGguaW11'@;
put 'bChudCxodCl8MCxtPShtPW0rTWF0aC5pbXVsKG50LHh0KXwwKStNYXRoLmltdWwoUWUsaHQpfDAsQT1BK01hdGguaW11bChRZSx4dCl8MCxFPUUrTWF0aC5pbXVsKGtlLHJuKXwwLG09KG09bStNYXRoLmltdWwoa2UsenQpfDApK01hdGguaW11bChBZSxybil8MCxBPUErTWF0aC5pbXVsKEFl'@;
put 'LHp0KXwwLEU9RStNYXRoLmltdWwoT2UsY24pfDAsbT0obT1tK01hdGguaW11bChPZSxmbil8MCkrTWF0aC5pbXVsKEllLGNuKXwwLEE9QStNYXRoLmltdWwoSWUsZm4pfDA7dmFyIHBhPShqKyhFPUUrTWF0aC5pbXVsKHplLFh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwoemUs'@;
put 'ZW4pfDApK01hdGguaW11bChEZSxYdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChEZSxlbil8MCkrKG0+Pj4xMyl8MCkrKHBhPj4+MjYpfDAscGEmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKEhlLHN0KSxtPShtPU1hdGguaW11bChIZSxVdCkpK01hdGguaW11bCh1dCxzdCl8MCxBPU1h'@;
put 'dGguaW11bCh1dCxVdCksRT1FK01hdGguaW11bChpdCxXZSl8MCxtPShtPW0rTWF0aC5pbXVsKGl0LFR0KXwwKStNYXRoLmltdWwoJGUsV2UpfDAsQT1BK01hdGguaW11bCgkZSxUdCl8MCxFPUUrTWF0aC5pbXVsKHl0LGh0KXwwLG09KG09bStNYXRoLmltdWwoeXQseHQpfDApK01hdGguaW11'@;
put 'bChNdCxodCl8MCxBPUErTWF0aC5pbXVsKE10LHh0KXwwLEU9RStNYXRoLmltdWwobnQscm4pfDAsbT0obT1tK01hdGguaW11bChudCx6dCl8MCkrTWF0aC5pbXVsKFFlLHJuKXwwLEE9QStNYXRoLmltdWwoUWUsenQpfDAsRT1FK01hdGguaW11bChrZSxjbil8MCxtPShtPW0rTWF0aC5pbXVs'@;
put 'KGtlLGZuKXwwKStNYXRoLmltdWwoQWUsY24pfDAsQT1BK01hdGguaW11bChBZSxmbil8MDt2YXIgUW49KGorKEU9RStNYXRoLmltdWwoT2UsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChPZSxlbil8MCkrTWF0aC5pbXVsKEllLFh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0'@;
put 'aC5pbXVsKEllLGVuKXwwKSsobT4+PjEzKXwwKSsoUW4+Pj4yNil8MCxRbiY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSGUsV2UpLG09KG09TWF0aC5pbXVsKEhlLFR0KSkrTWF0aC5pbXVsKHV0LFdlKXwwLEE9TWF0aC5pbXVsKHV0LFR0KSxFPUUrTWF0aC5pbXVsKGl0LGh0KXwwLG09KG09bStN'@;
put 'YXRoLmltdWwoaXQseHQpfDApK01hdGguaW11bCgkZSxodCl8MCxBPUErTWF0aC5pbXVsKCRlLHh0KXwwLEU9RStNYXRoLmltdWwoeXQscm4pfDAsbT0obT1tK01hdGguaW11bCh5dCx6dCl8MCkrTWF0aC5pbXVsKE10LHJuKXwwLEE9QStNYXRoLmltdWwoTXQsenQpfDAsRT1FK01hdGguaW11'@;
put 'bChudCxjbil8MCxtPShtPW0rTWF0aC5pbXVsKG50LGZuKXwwKStNYXRoLmltdWwoUWUsY24pfDAsQT1BK01hdGguaW11bChRZSxmbil8MDt2YXIgbGE9KGorKEU9RStNYXRoLmltdWwoa2UsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChrZSxlbil8MCkrTWF0aC5pbXVsKEFl'@;
put 'LFh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKEFlLGVuKXwwKSsobT4+PjEzKXwwKSsobGE+Pj4yNil8MCxsYSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSGUsaHQpLG09KG09TWF0aC5pbXVsKEhlLHh0KSkrTWF0aC5pbXVsKHV0LGh0KXwwLEE9TWF0aC5pbXVsKHV0LHh0KSxFPUUr'@;
put 'TWF0aC5pbXVsKGl0LHJuKXwwLG09KG09bStNYXRoLmltdWwoaXQsenQpfDApK01hdGguaW11bCgkZSxybil8MCxBPUErTWF0aC5pbXVsKCRlLHp0KXwwLEU9RStNYXRoLmltdWwoeXQsY24pfDAsbT0obT1tK01hdGguaW11bCh5dCxmbil8MCkrTWF0aC5pbXVsKE10LGNuKXwwLEE9QStNYXRo'@;
put 'LmltdWwoTXQsZm4pfDA7dmFyIHlhPShqKyhFPUUrTWF0aC5pbXVsKG50LFh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwobnQsZW4pfDApK01hdGguaW11bChRZSxYdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChRZSxlbil8MCkrKG0+Pj4xMyl8MCkrKHlhPj4+MjYp'@;
put 'fDAseWEmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKEhlLHJuKSxtPShtPU1hdGguaW11bChIZSx6dCkpK01hdGguaW11bCh1dCxybil8MCxBPU1hdGguaW11bCh1dCx6dCksRT1FK01hdGguaW11bChpdCxjbil8MCxtPShtPW0rTWF0aC5pbXVsKGl0LGZuKXwwKStNYXRoLmltdWwoJGUsY24pfDAs'@;
put 'QT1BK01hdGguaW11bCgkZSxmbil8MDt2YXIgTGE9KGorKEU9RStNYXRoLmltdWwoeXQsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh5dCxlbil8MCkrTWF0aC5pbXVsKE10LFh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKE10LGVuKXwwKSsobT4+PjEzKXwwKSso'@;
put 'TGE+Pj4yNil8MCxMYSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSGUsY24pLG09KG09TWF0aC5pbXVsKEhlLGZuKSkrTWF0aC5pbXVsKHV0LGNuKXwwLEE9TWF0aC5pbXVsKHV0LGZuKTt2YXIgRmE9KGorKEU9RStNYXRoLmltdWwoaXQsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11'@;
put 'bChpdCxlbil8MCkrTWF0aC5pbXVsKCRlLFh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKCRlLGVuKXwwKSsobT4+PjEzKXwwKSsoRmE+Pj4yNil8MCxGYSY9NjcxMDg4NjM7dmFyIHRpPShqKyhFPU1hdGguaW11bChIZSxYdCkpfDApKygoODE5MSYobT0obT1NYXRoLmltdWwoSGUs'@;
put 'ZW4pKStNYXRoLmltdWwodXQsWHQpfDApKTw8MTMpfDA7cmV0dXJuIGo9KChBPU1hdGguaW11bCh1dCxlbikpKyhtPj4+MTMpfDApKyh0aT4+PjI2KXwwLHRpJj02NzEwODg2MyxIWzBdPXVhLEhbMV09RWksSFsyXT12cixIWzNdPVduLEhbNF09JGksSFs1XT1laSxIWzZdPVFyLEhbN109Vmks'@;
put 'SFs4XT1OaSxIWzldPURhLEhbMTBdPUxyLEhbMTFdPVdpLEhbMTJdPXBhLEhbMTNdPVFuLEhbMTRdPWxhLEhbMTVdPXlhLEhbMTZdPUxhLEhbMTddPUZhLEhbMThdPXRpLDAhPT1qJiYoSFsxOV09aix4Lmxlbmd0aCsrKSx4fTtmdW5jdGlvbiBlZShWLHAsYil7cmV0dXJuKG5ldyBKKS5tdWxw'@;
put 'KFYscCxiKX1mdW5jdGlvbiBKKFYscCl7dGhpcy54PVYsdGhpcy55PXB9TWF0aC5pbXVsfHwoWT1XKSx3LnByb3RvdHlwZS5tdWxUbz1mdW5jdGlvbihwLGIpe3ZhciB4LEM9dGhpcy5sZW5ndGgrcC5sZW5ndGg7cmV0dXJuIHg9MTA9PT10aGlzLmxlbmd0aCYmMTA9PT1wLmxlbmd0aD9ZKHRo'@;
put 'aXMscCxiKTpDPDYzP1codGhpcyxwLGIpOkM8MTAyND9mdW5jdGlvbiBxKFYscCxiKXtiLm5lZ2F0aXZlPXAubmVnYXRpdmVeVi5uZWdhdGl2ZSxiLmxlbmd0aD1WLmxlbmd0aCtwLmxlbmd0aDtmb3IodmFyIHg9MCxDPTAsVD0wO1Q8Yi5sZW5ndGgtMTtUKyspe3ZhciBIPUM7Qz0wO2Zvcih2'@;
put 'YXIgaj02NzEwODg2MyZ4LEU9TWF0aC5taW4oVCxwLmxlbmd0aC0xKSxtPU1hdGgubWF4KDAsVC1WLmxlbmd0aCsxKTttPD1FO20rKyl7dmFyIHNlPSgwfFYud29yZHNbVC1tXSkqKDB8cC53b3Jkc1ttXSksd2U9NjcxMDg4NjMmc2U7aj02NzEwODg2MyYod2U9d2UranwwKSxDKz0oSD0oSD1I'@;
put 'KyhzZS82NzEwODg2NHwwKXwwKSsod2U+Pj4yNil8MCk+Pj4yNixIJj02NzEwODg2M31iLndvcmRzW1RdPWoseD1ILEg9Q31yZXR1cm4gMCE9PXg/Yi53b3Jkc1tUXT14OmIubGVuZ3RoLS0sYi5zdHJpcCgpfSh0aGlzLHAsYik6ZWUodGhpcyxwLGIpLHh9LEoucHJvdG90eXBlLm1ha2VSQlQ9'@;
put 'ZnVuY3Rpb24ocCl7Zm9yKHZhciBiPW5ldyBBcnJheShwKSx4PXcucHJvdG90eXBlLl9jb3VudEJpdHMocCktMSxDPTA7QzxwO0MrKyliW0NdPXRoaXMucmV2QmluKEMseCxwKTtyZXR1cm4gYn0sSi5wcm90b3R5cGUucmV2QmluPWZ1bmN0aW9uKHAsYix4KXtpZigwPT09cHx8cD09PXgtMSly'@;
put 'ZXR1cm4gcDtmb3IodmFyIEM9MCxUPTA7VDxiO1QrKylDfD0oMSZwKTw8Yi1ULTEscD4+PTE7cmV0dXJuIEN9LEoucHJvdG90eXBlLnBlcm11dGU9ZnVuY3Rpb24ocCxiLHgsQyxULEgpe2Zvcih2YXIgaj0wO2o8SDtqKyspQ1tqXT1iW3Bbal1dLFRbal09eFtwW2pdXX0sSi5wcm90b3R5cGUu'@;
put 'dHJhbnNmb3JtPWZ1bmN0aW9uKHAsYix4LEMsVCxIKXt0aGlzLnBlcm11dGUoSCxwLGIseCxDLFQpO2Zvcih2YXIgaj0xO2o8VDtqPDw9MSlmb3IodmFyIEU9ajw8MSxtPU1hdGguY29zKDIqTWF0aC5QSS9FKSxBPU1hdGguc2luKDIqTWF0aC5QSS9FKSxhZT0wO2FlPFQ7YWUrPUUpZm9yKHZh'@;
put 'ciB0ZT1tLHNlPUEsd2U9MDt3ZTxqO3dlKyspe3ZhciBVZT14W2FlK3dlXSxKZT1DW2FlK3dlXSxvdD14W2FlK3dlK2pdLHhlPUNbYWUrd2Ural0sdmU9dGUqb3Qtc2UqeGU7eGU9dGUqeGUrc2Uqb3QseFthZSt3ZV09VWUrKG90PXZlKSxDW2FlK3dlXT1KZSt4ZSx4W2FlK3dlK2pdPVVlLW90'@;
put 'LENbYWUrd2Ural09SmUteGUsd2UhPT1FJiYodmU9bSp0ZS1BKnNlLHNlPW0qc2UrQSp0ZSx0ZT12ZSl9fSxKLnByb3RvdHlwZS5ndWVzc0xlbjEzYj1mdW5jdGlvbihwLGIpe3ZhciB4PTF8TWF0aC5tYXgoYixwKSxDPTEmeCxUPTA7Zm9yKHg9eC8yfDA7eDt4Pj4+PTEpVCsrO3JldHVybiAx'@;
put 'PDxUKzErQ30sSi5wcm90b3R5cGUuY29uanVnYXRlPWZ1bmN0aW9uKHAsYix4KXtpZighKHg8PTEpKWZvcih2YXIgQz0wO0M8eC8yO0MrKyl7dmFyIFQ9cFtDXTtwW0NdPXBbeC1DLTFdLHBbeC1DLTFdPVQsVD1iW0NdLGJbQ109LWJbeC1DLTFdLGJbeC1DLTFdPS1UfX0sSi5wcm90b3R5cGUu'@;
put 'bm9ybWFsaXplMTNiPWZ1bmN0aW9uKHAsYil7Zm9yKHZhciB4PTAsQz0wO0M8Yi8yO0MrKyl7dmFyIFQ9ODE5MipNYXRoLnJvdW5kKHBbMipDKzFdL2IpK01hdGgucm91bmQocFsyKkNdL2IpK3g7cFtDXT02NzEwODg2MyZULHg9VDw2NzEwODg2ND8wOlQvNjcxMDg4NjR8MH1yZXR1cm4gcH0s'@;
put 'Si5wcm90b3R5cGUuY29udmVydDEzYj1mdW5jdGlvbihwLGIseCxDKXtmb3IodmFyIFQ9MCxIPTA7SDxiO0grKyl4WzIqSF09ODE5MSYoVCs9MHxwW0hdKSx4WzIqSCsxXT04MTkxJihUPj4+PTEzKSxUPj4+PTEzO2ZvcihIPTIqYjtIPEM7KytIKXhbSF09MDtnKDA9PT1UKSxnKCEoLTgxOTIm'@;
put 'VCkpfSxKLnByb3RvdHlwZS5zdHViPWZ1bmN0aW9uKHApe2Zvcih2YXIgYj1uZXcgQXJyYXkocCkseD0wO3g8cDt4KyspYlt4XT0wO3JldHVybiBifSxKLnByb3RvdHlwZS5tdWxwPWZ1bmN0aW9uKHAsYix4KXt2YXIgQz0yKnRoaXMuZ3Vlc3NMZW4xM2IocC5sZW5ndGgsYi5sZW5ndGgpLFQ9'@;
put 'dGhpcy5tYWtlUkJUKEMpLEg9dGhpcy5zdHViKEMpLGo9bmV3IEFycmF5KEMpLEU9bmV3IEFycmF5KEMpLG09bmV3IEFycmF5KEMpLEE9bmV3IEFycmF5KEMpLGFlPW5ldyBBcnJheShDKSx0ZT1uZXcgQXJyYXkoQyksc2U9eC53b3JkcztzZS5sZW5ndGg9Qyx0aGlzLmNvbnZlcnQxM2IocC53'@;
put 'b3JkcyxwLmxlbmd0aCxqLEMpLHRoaXMuY29udmVydDEzYihiLndvcmRzLGIubGVuZ3RoLEEsQyksdGhpcy50cmFuc2Zvcm0oaixILEUsbSxDLFQpLHRoaXMudHJhbnNmb3JtKEEsSCxhZSx0ZSxDLFQpO2Zvcih2YXIgd2U9MDt3ZTxDO3dlKyspe3ZhciBVZT1FW3dlXSphZVt3ZV0tbVt3ZV0q'@;
put 'dGVbd2VdO21bd2VdPUVbd2VdKnRlW3dlXSttW3dlXSphZVt3ZV0sRVt3ZV09VWV9cmV0dXJuIHRoaXMuY29uanVnYXRlKEUsbSxDKSx0aGlzLnRyYW5zZm9ybShFLG0sc2UsSCxDLFQpLHRoaXMuY29uanVnYXRlKHNlLEgsQyksdGhpcy5ub3JtYWxpemUxM2Ioc2UsQykseC5uZWdhdGl2ZT1w'@;
put 'Lm5lZ2F0aXZlXmIubmVnYXRpdmUseC5sZW5ndGg9cC5sZW5ndGgrYi5sZW5ndGgseC5zdHJpcCgpfSx3LnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24ocCl7dmFyIGI9bmV3IHcobnVsbCk7cmV0dXJuIGIud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoK3AubGVuZ3RoKSx0aGlzLm11bFRvKHAs'@;
put 'Yil9LHcucHJvdG90eXBlLm11bGY9ZnVuY3Rpb24ocCl7dmFyIGI9bmV3IHcobnVsbCk7cmV0dXJuIGIud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoK3AubGVuZ3RoKSxlZSh0aGlzLHAsYil9LHcucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5tdWxU'@;
put 'byhwLHRoaXMpfSx3LnByb3RvdHlwZS5pbXVsbj1mdW5jdGlvbihwKXtnKCJudW1iZXIiPT10eXBlb2YgcCksZyhwPDY3MTA4ODY0KTtmb3IodmFyIGI9MCx4PTA7eDx0aGlzLmxlbmd0aDt4Kyspe3ZhciBDPSgwfHRoaXMud29yZHNbeF0pKnAsVD0oNjcxMDg4NjMmQykrKDY3MTA4ODYzJmIp'@;
put 'O2I+Pj0yNixiKz1DLzY3MTA4ODY0fDAsYis9VD4+PjI2LHRoaXMud29yZHNbeF09NjcxMDg4NjMmVH1yZXR1cm4gMCE9PWImJih0aGlzLndvcmRzW3hdPWIsdGhpcy5sZW5ndGgrKyksdGhpc30sdy5wcm90b3R5cGUubXVsbj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmltdWxu'@;
put 'KHApfSx3LnByb3RvdHlwZS5zcXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tdWwodGhpcyl9LHcucHJvdG90eXBlLmlzcXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbXVsKHRoaXMuY2xvbmUoKSl9LHcucHJvdG90eXBlLnBvdz1mdW5jdGlvbihwKXt2YXIgYj1mdW5jdGlvbiBVKFYpe2Zv'@;
put 'cih2YXIgcD1uZXcgQXJyYXkoVi5iaXRMZW5ndGgoKSksYj0wO2I8cC5sZW5ndGg7YisrKXt2YXIgQz1iJTI2O3BbYl09KFYud29yZHNbYi8yNnwwXSYxPDxDKT4+PkN9cmV0dXJuIHB9KHApO2lmKDA9PT1iLmxlbmd0aClyZXR1cm4gbmV3IHcoMSk7Zm9yKHZhciB4PXRoaXMsQz0wO0M8Yi5s'@;
put 'ZW5ndGgmJjA9PT1iW0NdO0MrKyx4PXguc3FyKCkpO2lmKCsrQzxiLmxlbmd0aClmb3IodmFyIFQ9eC5zcXIoKTtDPGIubGVuZ3RoO0MrKyxUPVQuc3FyKCkpMCE9PWJbQ10mJih4PXgubXVsKFQpKTtyZXR1cm4geH0sdy5wcm90b3R5cGUuaXVzaGxuPWZ1bmN0aW9uKHApe2coIm51bWJlciI9'@;
put 'PXR5cGVvZiBwJiZwPj0wKTt2YXIgVCxiPXAlMjYseD0ocC1iKS8yNixDPTY3MTA4ODYzPj4+MjYtYjw8MjYtYjtpZigwIT09Yil7dmFyIEg9MDtmb3IoVD0wO1Q8dGhpcy5sZW5ndGg7VCsrKXt2YXIgaj10aGlzLndvcmRzW1RdJkM7dGhpcy53b3Jkc1tUXT0oMHx0aGlzLndvcmRzW1RdKS1q'@;
put 'PDxifEgsSD1qPj4+MjYtYn1IJiYodGhpcy53b3Jkc1tUXT1ILHRoaXMubGVuZ3RoKyspfWlmKDAhPT14KXtmb3IoVD10aGlzLmxlbmd0aC0xO1Q+PTA7VC0tKXRoaXMud29yZHNbVCt4XT10aGlzLndvcmRzW1RdO2ZvcihUPTA7VDx4O1QrKyl0aGlzLndvcmRzW1RdPTA7dGhpcy5sZW5ndGgr'@;
put 'PXh9cmV0dXJuIHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuaXNobG49ZnVuY3Rpb24ocCl7cmV0dXJuIGcoMD09PXRoaXMubmVnYXRpdmUpLHRoaXMuaXVzaGxuKHApfSx3LnByb3RvdHlwZS5pdXNocm49ZnVuY3Rpb24ocCxiLHgpe3ZhciBDO2coIm51bWJlciI9PXR5cGVvZiBwJiZwPj0w'@;
put 'KSxDPWI/KGItYiUyNikvMjY6MDt2YXIgVD1wJTI2LEg9TWF0aC5taW4oKHAtVCkvMjYsdGhpcy5sZW5ndGgpLGo9NjcxMDg4NjNeNjcxMDg4NjM+Pj5UPDxULEU9eDtpZihDLT1ILEM9TWF0aC5tYXgoMCxDKSxFKXtmb3IodmFyIG09MDttPEg7bSsrKUUud29yZHNbbV09dGhpcy53b3Jkc1tt'@;
put 'XTtFLmxlbmd0aD1IfWlmKDAhPT1IKWlmKHRoaXMubGVuZ3RoPkgpZm9yKHRoaXMubGVuZ3RoLT1ILG09MDttPHRoaXMubGVuZ3RoO20rKyl0aGlzLndvcmRzW21dPXRoaXMud29yZHNbbStIXTtlbHNlIHRoaXMud29yZHNbMF09MCx0aGlzLmxlbmd0aD0xO3ZhciBBPTA7Zm9yKG09dGhpcy5s'@;
put 'ZW5ndGgtMTttPj0wJiYoMCE9PUF8fG0+PUMpO20tLSl7dmFyIGFlPTB8dGhpcy53b3Jkc1ttXTt0aGlzLndvcmRzW21dPUE8PDI2LVR8YWU+Pj5ULEE9YWUman1yZXR1cm4gRSYmMCE9PUEmJihFLndvcmRzW0UubGVuZ3RoKytdPUEpLDA9PT10aGlzLmxlbmd0aCYmKHRoaXMud29yZHNbMF09'@;
put 'MCx0aGlzLmxlbmd0aD0xKSx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmlzaHJuPWZ1bmN0aW9uKHAsYix4KXtyZXR1cm4gZygwPT09dGhpcy5uZWdhdGl2ZSksdGhpcy5pdXNocm4ocCxiLHgpfSx3LnByb3RvdHlwZS5zaGxuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaXNo'@;
put 'bG4ocCl9LHcucHJvdG90eXBlLnVzaGxuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaXVzaGxuKHApfSx3LnByb3RvdHlwZS5zaHJuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaXNocm4ocCl9LHcucHJvdG90eXBlLnVzaHJuPWZ1bmN0aW9uKHApe3JldHVybiB0'@;
put 'aGlzLmNsb25lKCkuaXVzaHJuKHApfSx3LnByb3RvdHlwZS50ZXN0bj1mdW5jdGlvbihwKXtnKCJudW1iZXIiPT10eXBlb2YgcCYmcD49MCk7dmFyIGI9cCUyNix4PShwLWIpLzI2O3JldHVybiEodGhpcy5sZW5ndGg8PXh8fCEodGhpcy53b3Jkc1t4XSYxPDxiKSl9LHcucHJvdG90eXBlLmlt'@;
put 'YXNrbj1mdW5jdGlvbihwKXtnKCJudW1iZXIiPT10eXBlb2YgcCYmcD49MCk7dmFyIGI9cCUyNix4PShwLWIpLzI2O3JldHVybiBnKDA9PT10aGlzLm5lZ2F0aXZlLCJpbWFza24gd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlIG51bWJlcnMiKSx0aGlzLmxlbmd0aDw9eD90aGlzOigwIT09YiYm'@;
put 'eCsrLHRoaXMubGVuZ3RoPU1hdGgubWluKHgsdGhpcy5sZW5ndGgpLDAhPT1iJiYodGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXSY9NjcxMDg4NjNeNjcxMDg4NjM+Pj5iPDxiKSx0aGlzLnN0cmlwKCkpfSx3LnByb3RvdHlwZS5tYXNrbj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgp'@;
put 'LmltYXNrbihwKX0sdy5wcm90b3R5cGUuaWFkZG49ZnVuY3Rpb24ocCl7cmV0dXJuIGcoIm51bWJlciI9PXR5cGVvZiBwKSxnKHA8NjcxMDg4NjQpLHA8MD90aGlzLmlzdWJuKC1wKTowIT09dGhpcy5uZWdhdGl2ZT8xPT09dGhpcy5sZW5ndGgmJigwfHRoaXMud29yZHNbMF0pPHA/KHRoaXMu'@;
put 'd29yZHNbMF09cC0oMHx0aGlzLndvcmRzWzBdKSx0aGlzLm5lZ2F0aXZlPTAsdGhpcyk6KHRoaXMubmVnYXRpdmU9MCx0aGlzLmlzdWJuKHApLHRoaXMubmVnYXRpdmU9MSx0aGlzKTp0aGlzLl9pYWRkbihwKX0sdy5wcm90b3R5cGUuX2lhZGRuPWZ1bmN0aW9uKHApe3RoaXMud29yZHNbMF0r'@;
put 'PXA7Zm9yKHZhciBiPTA7Yjx0aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1tiXT49NjcxMDg4NjQ7YisrKXRoaXMud29yZHNbYl0tPTY3MTA4ODY0LGI9PT10aGlzLmxlbmd0aC0xP3RoaXMud29yZHNbYisxXT0xOnRoaXMud29yZHNbYisxXSsrO3JldHVybiB0aGlzLmxlbmd0aD1NYXRoLm1heCh0'@;
put 'aGlzLmxlbmd0aCxiKzEpLHRoaXN9LHcucHJvdG90eXBlLmlzdWJuPWZ1bmN0aW9uKHApe2lmKGcoIm51bWJlciI9PXR5cGVvZiBwKSxnKHA8NjcxMDg4NjQpLHA8MClyZXR1cm4gdGhpcy5pYWRkbigtcCk7aWYoMCE9PXRoaXMubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlz'@;
put 'LmlhZGRuKHApLHRoaXMubmVnYXRpdmU9MSx0aGlzO2lmKHRoaXMud29yZHNbMF0tPXAsMT09PXRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzWzBdPDApdGhpcy53b3Jkc1swXT0tdGhpcy53b3Jkc1swXSx0aGlzLm5lZ2F0aXZlPTE7ZWxzZSBmb3IodmFyIGI9MDtiPHRoaXMubGVuZ3RoJiZ0aGlz'@;
put 'LndvcmRzW2JdPDA7YisrKXRoaXMud29yZHNbYl0rPTY3MTA4ODY0LHRoaXMud29yZHNbYisxXS09MTtyZXR1cm4gdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5hZGRuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaWFkZG4ocCl9LHcucHJvdG90eXBlLnN1Ym49ZnVuY3Rpb24o'@;
put 'cCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc3VibihwKX0sdy5wcm90b3R5cGUuaWFicz1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpc30sdy5wcm90b3R5cGUuYWJzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pYWJzKCl9LHcucHJvdG90eXBlLl9pc2hsbnN1'@;
put 'Ym11bD1mdW5jdGlvbihwLGIseCl7dmFyIFQ7dGhpcy5fZXhwYW5kKHAubGVuZ3RoK3gpO3ZhciBILGo9MDtmb3IoVD0wO1Q8cC5sZW5ndGg7VCsrKXtIPSgwfHRoaXMud29yZHNbVCt4XSkrajt2YXIgRT0oMHxwLndvcmRzW1RdKSpiO2o9KChILT02NzEwODg2MyZFKT4+MjYpLShFLzY3MTA4'@;
put 'ODY0fDApLHRoaXMud29yZHNbVCt4XT02NzEwODg2MyZIfWZvcig7VDx0aGlzLmxlbmd0aC14O1QrKylqPShIPSgwfHRoaXMud29yZHNbVCt4XSkraik+PjI2LHRoaXMud29yZHNbVCt4XT02NzEwODg2MyZIO2lmKDA9PT1qKXJldHVybiB0aGlzLnN0cmlwKCk7Zm9yKGcoLTE9PT1qKSxqPTAs'@;
put 'VD0wO1Q8dGhpcy5sZW5ndGg7VCsrKWo9KEg9LSgwfHRoaXMud29yZHNbVF0pK2opPj4yNix0aGlzLndvcmRzW1RdPTY3MTA4ODYzJkg7cmV0dXJuIHRoaXMubmVnYXRpdmU9MSx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLl93b3JkRGl2PWZ1bmN0aW9uKHAsYil7dmFyIHgsQz10aGlzLmNs'@;
put 'b25lKCksVD1wLEg9MHxULndvcmRzW1QubGVuZ3RoLTFdOzAhPSh4PTI2LXRoaXMuX2NvdW50Qml0cyhIKSkmJihUPVQudXNobG4oeCksQy5pdXNobG4oeCksSD0wfFQud29yZHNbVC5sZW5ndGgtMV0pO3ZhciBtLEU9Qy5sZW5ndGgtVC5sZW5ndGg7aWYoIm1vZCIhPT1iKXsobT1uZXcgdyhu'@;
put 'dWxsKSkubGVuZ3RoPUUrMSxtLndvcmRzPW5ldyBBcnJheShtLmxlbmd0aCk7Zm9yKHZhciBBPTA7QTxtLmxlbmd0aDtBKyspbS53b3Jkc1tBXT0wfXZhciBhZT1DLmNsb25lKCkuX2lzaGxuc3VibXVsKFQsMSxFKTswPT09YWUubmVnYXRpdmUmJihDPWFlLG0mJihtLndvcmRzW0VdPTEpKTtm'@;
put 'b3IodmFyIHRlPUUtMTt0ZT49MDt0ZS0tKXt2YXIgc2U9NjcxMDg4NjQqKDB8Qy53b3Jkc1tULmxlbmd0aCt0ZV0pKygwfEMud29yZHNbVC5sZW5ndGgrdGUtMV0pO2ZvcihzZT1NYXRoLm1pbihzZS9IfDAsNjcxMDg4NjMpLEMuX2lzaGxuc3VibXVsKFQsc2UsdGUpOzAhPT1DLm5lZ2F0aXZl'@;
put 'OylzZS0tLEMubmVnYXRpdmU9MCxDLl9pc2hsbnN1Ym11bChULDEsdGUpLEMuaXNaZXJvKCl8fChDLm5lZ2F0aXZlXj0xKTttJiYobS53b3Jkc1t0ZV09c2UpfXJldHVybiBtJiZtLnN0cmlwKCksQy5zdHJpcCgpLCJkaXYiIT09YiYmMCE9PXgmJkMuaXVzaHJuKHgpLHtkaXY6bXx8bnVsbCxt'@;
put 'b2Q6Q319LHcucHJvdG90eXBlLmRpdm1vZD1mdW5jdGlvbihwLGIseCl7cmV0dXJuIGcoIXAuaXNaZXJvKCkpLHRoaXMuaXNaZXJvKCk/e2RpdjpuZXcgdygwKSxtb2Q6bmV3IHcoMCl9OjAhPT10aGlzLm5lZ2F0aXZlJiYwPT09cC5uZWdhdGl2ZT8oSD10aGlzLm5lZygpLmRpdm1vZChwLGIp'@;
put 'LCJtb2QiIT09YiYmKEM9SC5kaXYubmVnKCkpLCJkaXYiIT09YiYmKFQ9SC5tb2QubmVnKCkseCYmMCE9PVQubmVnYXRpdmUmJlQuaWFkZChwKSkse2RpdjpDLG1vZDpUfSk6MD09PXRoaXMubmVnYXRpdmUmJjAhPT1wLm5lZ2F0aXZlPyhIPXRoaXMuZGl2bW9kKHAubmVnKCksYiksIm1vZCIh'@;
put 'PT1iJiYoQz1ILmRpdi5uZWcoKSkse2RpdjpDLG1vZDpILm1vZH0pOnRoaXMubmVnYXRpdmUmcC5uZWdhdGl2ZT8oSD10aGlzLm5lZygpLmRpdm1vZChwLm5lZygpLGIpLCJkaXYiIT09YiYmKFQ9SC5tb2QubmVnKCkseCYmMCE9PVQubmVnYXRpdmUmJlQuaXN1YihwKSkse2RpdjpILmRpdixt'@;
put 'b2Q6VH0pOnAubGVuZ3RoPnRoaXMubGVuZ3RofHx0aGlzLmNtcChwKTwwP3tkaXY6bmV3IHcoMCksbW9kOnRoaXN9OjE9PT1wLmxlbmd0aD8iZGl2Ij09PWI/e2Rpdjp0aGlzLmRpdm4ocC53b3Jkc1swXSksbW9kOm51bGx9OiJtb2QiPT09Yj97ZGl2Om51bGwsbW9kOm5ldyB3KHRoaXMubW9k'@;
put 'bihwLndvcmRzWzBdKSl9OntkaXY6dGhpcy5kaXZuKHAud29yZHNbMF0pLG1vZDpuZXcgdyh0aGlzLm1vZG4ocC53b3Jkc1swXSkpfTp0aGlzLl93b3JkRGl2KHAsYik7dmFyIEMsVCxIfSx3LnByb3RvdHlwZS5kaXY9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuZGl2bW9kKHAsImRpdiIsITEp'@;
put 'LmRpdn0sdy5wcm90b3R5cGUubW9kPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmRpdm1vZChwLCJtb2QiLCExKS5tb2R9LHcucHJvdG90eXBlLnVtb2Q9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuZGl2bW9kKHAsIm1vZCIsITApLm1vZH0sdy5wcm90b3R5cGUuZGl2Um91bmQ9ZnVuY3Rpb24o'@;
put 'cCl7dmFyIGI9dGhpcy5kaXZtb2QocCk7aWYoYi5tb2QuaXNaZXJvKCkpcmV0dXJuIGIuZGl2O3ZhciB4PTAhPT1iLmRpdi5uZWdhdGl2ZT9iLm1vZC5pc3ViKHApOmIubW9kLEM9cC51c2hybigxKSxUPXAuYW5kbG4oMSksSD14LmNtcChDKTtyZXR1cm4gSDwwfHwxPT09VCYmMD09PUg/Yi5k'@;
put 'aXY6MCE9PWIuZGl2Lm5lZ2F0aXZlP2IuZGl2LmlzdWJuKDEpOmIuZGl2LmlhZGRuKDEpfSx3LnByb3RvdHlwZS5tb2RuPWZ1bmN0aW9uKHApe2cocDw9NjcxMDg4NjMpO2Zvcih2YXIgYj0oMTw8MjYpJXAseD0wLEM9dGhpcy5sZW5ndGgtMTtDPj0wO0MtLSl4PShiKngrKDB8dGhpcy53b3Jk'@;
put 'c1tDXSkpJXA7cmV0dXJuIHh9LHcucHJvdG90eXBlLmlkaXZuPWZ1bmN0aW9uKHApe2cocDw9NjcxMDg4NjMpO2Zvcih2YXIgYj0wLHg9dGhpcy5sZW5ndGgtMTt4Pj0wO3gtLSl7dmFyIEM9KDB8dGhpcy53b3Jkc1t4XSkrNjcxMDg4NjQqYjt0aGlzLndvcmRzW3hdPUMvcHwwLGI9QyVwfXJl'@;
put 'dHVybiB0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmRpdm49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pZGl2bihwKX0sdy5wcm90b3R5cGUuZWdjZD1mdW5jdGlvbihwKXtnKDA9PT1wLm5lZ2F0aXZlKSxnKCFwLmlzWmVybygpKTt2YXIgYj10aGlzLHg9cC5jbG9uZSgpO2I9'@;
put 'MCE9PWIubmVnYXRpdmU/Yi51bW9kKHApOmIuY2xvbmUoKTtmb3IodmFyIEM9bmV3IHcoMSksVD1uZXcgdygwKSxIPW5ldyB3KDApLGo9bmV3IHcoMSksRT0wO2IuaXNFdmVuKCkmJnguaXNFdmVuKCk7KWIuaXVzaHJuKDEpLHguaXVzaHJuKDEpLCsrRTtmb3IodmFyIG09eC5jbG9uZSgpLEE9'@;
put 'Yi5jbG9uZSgpOyFiLmlzWmVybygpOyl7Zm9yKHZhciBhZT0wLHRlPTE7IShiLndvcmRzWzBdJnRlKSYmYWU8MjY7KythZSx0ZTw8PTEpO2lmKGFlPjApZm9yKGIuaXVzaHJuKGFlKTthZS0tID4wOykoQy5pc09kZCgpfHxULmlzT2RkKCkpJiYoQy5pYWRkKG0pLFQuaXN1YihBKSksQy5pdXNo'@;
put 'cm4oMSksVC5pdXNocm4oMSk7Zm9yKHZhciBzZT0wLHdlPTE7ISh4LndvcmRzWzBdJndlKSYmc2U8MjY7KytzZSx3ZTw8PTEpO2lmKHNlPjApZm9yKHguaXVzaHJuKHNlKTtzZS0tID4wOykoSC5pc09kZCgpfHxqLmlzT2RkKCkpJiYoSC5pYWRkKG0pLGouaXN1YihBKSksSC5pdXNocm4oMSks'@;
put 'ai5pdXNocm4oMSk7Yi5jbXAoeCk+PTA/KGIuaXN1Yih4KSxDLmlzdWIoSCksVC5pc3ViKGopKTooeC5pc3ViKGIpLEguaXN1YihDKSxqLmlzdWIoVCkpfXJldHVybnthOkgsYjpqLGdjZDp4Lml1c2hsbihFKX19LHcucHJvdG90eXBlLl9pbnZtcD1mdW5jdGlvbihwKXtnKDA9PT1wLm5lZ2F0'@;
put 'aXZlKSxnKCFwLmlzWmVybygpKTt2YXIgYWUsYj10aGlzLHg9cC5jbG9uZSgpO2I9MCE9PWIubmVnYXRpdmU/Yi51bW9kKHApOmIuY2xvbmUoKTtmb3IodmFyIEM9bmV3IHcoMSksVD1uZXcgdygwKSxIPXguY2xvbmUoKTtiLmNtcG4oMSk+MCYmeC5jbXBuKDEpPjA7KXtmb3IodmFyIGo9MCxF'@;
put 'PTE7IShiLndvcmRzWzBdJkUpJiZqPDI2OysraixFPDw9MSk7aWYoaj4wKWZvcihiLml1c2hybihqKTtqLS0gPjA7KUMuaXNPZGQoKSYmQy5pYWRkKEgpLEMuaXVzaHJuKDEpO2Zvcih2YXIgbT0wLEE9MTshKHgud29yZHNbMF0mQSkmJm08MjY7KyttLEE8PD0xKTtpZihtPjApZm9yKHguaXVz'@;
put 'aHJuKG0pO20tLSA+MDspVC5pc09kZCgpJiZULmlhZGQoSCksVC5pdXNocm4oMSk7Yi5jbXAoeCk+PTA/KGIuaXN1Yih4KSxDLmlzdWIoVCkpOih4LmlzdWIoYiksVC5pc3ViKEMpKX1yZXR1cm4oYWU9MD09PWIuY21wbigxKT9DOlQpLmNtcG4oMCk8MCYmYWUuaWFkZChwKSxhZX0sdy5wcm90'@;
put 'b3R5cGUuZ2NkPWZ1bmN0aW9uKHApe2lmKHRoaXMuaXNaZXJvKCkpcmV0dXJuIHAuYWJzKCk7aWYocC5pc1plcm8oKSlyZXR1cm4gdGhpcy5hYnMoKTt2YXIgYj10aGlzLmNsb25lKCkseD1wLmNsb25lKCk7Yi5uZWdhdGl2ZT0wLHgubmVnYXRpdmU9MDtmb3IodmFyIEM9MDtiLmlzRXZlbigp'@;
put 'JiZ4LmlzRXZlbigpO0MrKyliLml1c2hybigxKSx4Lml1c2hybigxKTtmb3IoOzspe2Zvcig7Yi5pc0V2ZW4oKTspYi5pdXNocm4oMSk7Zm9yKDt4LmlzRXZlbigpOyl4Lml1c2hybigxKTt2YXIgVD1iLmNtcCh4KTtpZihUPDApe3ZhciBIPWI7Yj14LHg9SH1lbHNlIGlmKDA9PT1UfHwwPT09'@;
put 'eC5jbXBuKDEpKWJyZWFrO2IuaXN1Yih4KX1yZXR1cm4geC5pdXNobG4oQyl9LHcucHJvdG90eXBlLmludm09ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuZWdjZChwKS5hLnVtb2QocCl9LHcucHJvdG90eXBlLmlzRXZlbj1mdW5jdGlvbigpe3JldHVybiEoMSZ0aGlzLndvcmRzWzBdKX0sdy5w'@;
put 'cm90b3R5cGUuaXNPZGQ9ZnVuY3Rpb24oKXtyZXR1cm4hKDEmfnRoaXMud29yZHNbMF0pfSx3LnByb3RvdHlwZS5hbmRsbj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy53b3Jkc1swXSZwfSx3LnByb3RvdHlwZS5iaW5jbj1mdW5jdGlvbihwKXtnKCJudW1iZXIiPT10eXBlb2YgcCk7dmFyIGI9'@;
put 'cCUyNix4PShwLWIpLzI2LEM9MTw8YjtpZih0aGlzLmxlbmd0aDw9eClyZXR1cm4gdGhpcy5fZXhwYW5kKHgrMSksdGhpcy53b3Jkc1t4XXw9Qyx0aGlzO2Zvcih2YXIgVD1DLEg9eDswIT09VCYmSDx0aGlzLmxlbmd0aDtIKyspe3ZhciBqPTB8dGhpcy53b3Jkc1tIXTtUPShqKz1UKT4+PjI2'@;
put 'LHRoaXMud29yZHNbSF09aiY9NjcxMDg4NjN9cmV0dXJuIDAhPT1UJiYodGhpcy53b3Jkc1tIXT1ULHRoaXMubGVuZ3RoKyspLHRoaXN9LHcucHJvdG90eXBlLmlzWmVybz1mdW5jdGlvbigpe3JldHVybiAxPT09dGhpcy5sZW5ndGgmJjA9PT10aGlzLndvcmRzWzBdfSx3LnByb3RvdHlwZS5j'@;
put 'bXBuPWZ1bmN0aW9uKHApe3ZhciB4LGI9cDwwO2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYhYilyZXR1cm4tMTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmYilyZXR1cm4gMTtpZih0aGlzLnN0cmlwKCksdGhpcy5sZW5ndGg+MSl4PTE7ZWxzZXtiJiYocD0tcCksZyhwPD02NzEwODg2MywiTnVtYmVy'@;
put 'IGlzIHRvbyBiaWciKTt2YXIgQz0wfHRoaXMud29yZHNbMF07eD1DPT09cD8wOkM8cD8tMToxfXJldHVybiAwIT09dGhpcy5uZWdhdGl2ZT8wfC14Onh9LHcucHJvdG90eXBlLmNtcD1mdW5jdGlvbihwKXtpZigwIT09dGhpcy5uZWdhdGl2ZSYmMD09PXAubmVnYXRpdmUpcmV0dXJuLTE7aWYo'@;
put 'MD09PXRoaXMubmVnYXRpdmUmJjAhPT1wLm5lZ2F0aXZlKXJldHVybiAxO3ZhciBiPXRoaXMudWNtcChwKTtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/MHwtYjpifSx3LnByb3RvdHlwZS51Y21wPWZ1bmN0aW9uKHApe2lmKHRoaXMubGVuZ3RoPnAubGVuZ3RoKXJldHVybiAxO2lmKHRoaXMu'@;
put 'bGVuZ3RoPHAubGVuZ3RoKXJldHVybi0xO2Zvcih2YXIgYj0wLHg9dGhpcy5sZW5ndGgtMTt4Pj0wO3gtLSl7dmFyIEM9MHx0aGlzLndvcmRzW3hdLFQ9MHxwLndvcmRzW3hdO2lmKEMhPT1UKXtDPFQ/Yj0tMTpDPlQmJihiPTEpO2JyZWFrfX1yZXR1cm4gYn0sdy5wcm90b3R5cGUuZ3RuPWZ1'@;
put 'bmN0aW9uKHApe3JldHVybiAxPT09dGhpcy5jbXBuKHApfSx3LnByb3RvdHlwZS5ndD1mdW5jdGlvbihwKXtyZXR1cm4gMT09PXRoaXMuY21wKHApfSx3LnByb3RvdHlwZS5ndGVuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNtcG4ocCk+PTB9LHcucHJvdG90eXBlLmd0ZT1mdW5jdGlvbihw'@;
put 'KXtyZXR1cm4gdGhpcy5jbXAocCk+PTB9LHcucHJvdG90eXBlLmx0bj1mdW5jdGlvbihwKXtyZXR1cm4tMT09PXRoaXMuY21wbihwKX0sdy5wcm90b3R5cGUubHQ9ZnVuY3Rpb24ocCl7cmV0dXJuLTE9PT10aGlzLmNtcChwKX0sdy5wcm90b3R5cGUubHRlbj1mdW5jdGlvbihwKXtyZXR1cm4g'@;
put 'dGhpcy5jbXBuKHApPD0wfSx3LnByb3RvdHlwZS5sdGU9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY21wKHApPD0wfSx3LnByb3RvdHlwZS5lcW49ZnVuY3Rpb24ocCl7cmV0dXJuIDA9PT10aGlzLmNtcG4ocCl9LHcucHJvdG90eXBlLmVxPWZ1bmN0aW9uKHApe3JldHVybiAwPT09dGhpcy5j'@;
put 'bXAocCl9LHcucmVkPWZ1bmN0aW9uKHApe3JldHVybiBuZXcgU2UocCl9LHcucHJvdG90eXBlLnRvUmVkPWZ1bmN0aW9uKHApe3JldHVybiBnKCF0aGlzLnJlZCwiQWxyZWFkeSBhIG51bWJlciBpbiByZWR1Y3Rpb24gY29udGV4dCIpLGcoMD09PXRoaXMubmVnYXRpdmUsInJlZCB3b3JrcyBv'@;
put 'bmx5IHdpdGggcG9zaXRpdmVzIikscC5jb252ZXJ0VG8odGhpcykuX2ZvcmNlUmVkKHApfSx3LnByb3RvdHlwZS5mcm9tUmVkPWZ1bmN0aW9uKCl7cmV0dXJuIGcodGhpcy5yZWQsImZyb21SZWQgd29ya3Mgb25seSB3aXRoIG51bWJlcnMgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSx0aGlzLnJl'@;
put 'ZC5jb252ZXJ0RnJvbSh0aGlzKX0sdy5wcm90b3R5cGUuX2ZvcmNlUmVkPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLnJlZD1wLHRoaXN9LHcucHJvdG90eXBlLmZvcmNlUmVkPWZ1bmN0aW9uKHApe3JldHVybiBnKCF0aGlzLnJlZCwiQWxyZWFkeSBhIG51bWJlciBpbiByZWR1Y3Rpb24gY29u'@;
put 'dGV4dCIpLHRoaXMuX2ZvcmNlUmVkKHApfSx3LnByb3RvdHlwZS5yZWRBZGQ9ZnVuY3Rpb24ocCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZEFkZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5hZGQodGhpcyxwKX0sdy5wcm90b3R5cGUucmVkSUFkZD1mdW5jdGlvbihw'@;
put 'KXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkSUFkZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5pYWRkKHRoaXMscCl9LHcucHJvdG90eXBlLnJlZFN1Yj1mdW5jdGlvbihwKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkU3ViIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVy'@;
put 'cyIpLHRoaXMucmVkLnN1Yih0aGlzLHApfSx3LnByb3RvdHlwZS5yZWRJU3ViPWZ1bmN0aW9uKHApe3JldHVybiBnKHRoaXMucmVkLCJyZWRJU3ViIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmlzdWIodGhpcyxwKX0sdy5wcm90b3R5cGUucmVkU2hsPWZ1bmN0aW9u'@;
put 'KHApe3JldHVybiBnKHRoaXMucmVkLCJyZWRTaGwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuc2hsKHRoaXMscCl9LHcucHJvdG90eXBlLnJlZE11bD1mdW5jdGlvbihwKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkTXVsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVy'@;
put 'cyIpLHRoaXMucmVkLl92ZXJpZnkyKHRoaXMscCksdGhpcy5yZWQubXVsKHRoaXMscCl9LHcucHJvdG90eXBlLnJlZElNdWw9ZnVuY3Rpb24ocCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZE11bCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5Mih0aGlzLHAp'@;
put 'LHRoaXMucmVkLmltdWwodGhpcyxwKX0sdy5wcm90b3R5cGUucmVkU3FyPWZ1bmN0aW9uKCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZFNxciB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5zcXIodGhpcyl9LHcucHJvdG90eXBl'@;
put 'LnJlZElTcXI9ZnVuY3Rpb24oKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkSVNxciB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5pc3FyKHRoaXMpfSx3LnByb3RvdHlwZS5yZWRTcXJ0PWZ1bmN0aW9uKCl7cmV0dXJuIGcodGhp'@;
put 'cy5yZWQsInJlZFNxcnQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuc3FydCh0aGlzKX0sdy5wcm90b3R5cGUucmVkSW52bT1mdW5jdGlvbigpe3JldHVybiBnKHRoaXMucmVkLCJyZWRJbnZtIHdvcmtzIG9ubHkgd2l0aCBy'@;
put 'ZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLmludm0odGhpcyl9LHcucHJvdG90eXBlLnJlZE5lZz1mdW5jdGlvbigpe3JldHVybiBnKHRoaXMucmVkLCJyZWROZWcgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhp'@;
put 'cyksdGhpcy5yZWQubmVnKHRoaXMpfSx3LnByb3RvdHlwZS5yZWRQb3c9ZnVuY3Rpb24ocCl7cmV0dXJuIGcodGhpcy5yZWQmJiFwLnJlZCwicmVkUG93KG5vcm1hbE51bSkiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5wb3codGhpcyxwKX07dmFyIG5lPXtrMjU2Om51bGws'@;
put 'cDIyNDpudWxsLHAxOTI6bnVsbCxwMjU1MTk6bnVsbH07ZnVuY3Rpb24gaWUoVixwKXt0aGlzLm5hbWU9Vix0aGlzLnA9bmV3IHcocCwxNiksdGhpcy5uPXRoaXMucC5iaXRMZW5ndGgoKSx0aGlzLms9bmV3IHcoMSkuaXVzaGxuKHRoaXMubikuaXN1Yih0aGlzLnApLHRoaXMudG1wPXRoaXMu'@;
put 'X3RtcCgpfWZ1bmN0aW9uIGxlKCl7aWUuY2FsbCh0aGlzLCJrMjU2IiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZjMmYiKX1mdW5jdGlvbiBtZSgpe2llLmNhbGwodGhpcywicDIyNCIsImZmZmZmZmZmIGZmZmZm'@;
put 'ZmZmIGZmZmZmZmZmIGZmZmZmZmZmIDAwMDAwMDAwIDAwMDAwMDAwIDAwMDAwMDAxIil9ZnVuY3Rpb24gX2UoKXtpZS5jYWxsKHRoaXMsInAxOTIiLCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmZmZiBmZmZmZmZmZiIpfWZ1bmN0aW9uIFRlKCl7aWUuY2FsbCh0'@;
put 'aGlzLCIyNTUxOSIsIjdmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZWQiKX1mdW5jdGlvbiBTZShWKXtpZigic3RyaW5nIj09dHlwZW9mIFYpe3ZhciBwPXcuX3ByaW1lKFYpO3RoaXMubT1wLnAsdGhpcy5wcmltZT1wfWVs'@;
put 'c2UgZyhWLmd0bigxKSwibW9kdWx1cyBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAxIiksdGhpcy5tPVYsdGhpcy5wcmltZT1udWxsfWZ1bmN0aW9uIGplKFYpe1NlLmNhbGwodGhpcyxWKSx0aGlzLnNoaWZ0PXRoaXMubS5iaXRMZW5ndGgoKSx0aGlzLnNoaWZ0JTI2IT0wJiYodGhpcy5zaGlmdCs9'@;
put 'MjYtdGhpcy5zaGlmdCUyNiksdGhpcy5yPW5ldyB3KDEpLml1c2hsbih0aGlzLnNoaWZ0KSx0aGlzLnIyPXRoaXMuaW1vZCh0aGlzLnIuc3FyKCkpLHRoaXMucmludj10aGlzLnIuX2ludm1wKHRoaXMubSksdGhpcy5taW52PXRoaXMucmludi5tdWwodGhpcy5yKS5pc3VibigxKS5kaXYodGhp'@;
put 'cy5tKSx0aGlzLm1pbnY9dGhpcy5taW52LnVtb2QodGhpcy5yKSx0aGlzLm1pbnY9dGhpcy5yLnN1Yih0aGlzLm1pbnYpfWllLnByb3RvdHlwZS5fdG1wPWZ1bmN0aW9uKCl7dmFyIHA9bmV3IHcobnVsbCk7cmV0dXJuIHAud29yZHM9bmV3IEFycmF5KE1hdGguY2VpbCh0aGlzLm4vMTMpKSxw'@;
put 'fSxpZS5wcm90b3R5cGUuaXJlZHVjZT1mdW5jdGlvbihwKXt2YXIgeCxiPXA7ZG97dGhpcy5zcGxpdChiLHRoaXMudG1wKSx4PShiPShiPXRoaXMuaW11bEsoYikpLmlhZGQodGhpcy50bXApKS5iaXRMZW5ndGgoKX13aGlsZSh4PnRoaXMubik7dmFyIEM9eDx0aGlzLm4/LTE6Yi51Y21wKHRo'@;
put 'aXMucCk7cmV0dXJuIDA9PT1DPyhiLndvcmRzWzBdPTAsYi5sZW5ndGg9MSk6Qz4wP2IuaXN1Yih0aGlzLnApOnZvaWQgMCE9PWIuc3RyaXA/Yi5zdHJpcCgpOmIuX3N0cmlwKCksYn0saWUucHJvdG90eXBlLnNwbGl0PWZ1bmN0aW9uKHAsYil7cC5pdXNocm4odGhpcy5uLDAsYil9LGllLnBy'@;
put 'b3RvdHlwZS5pbXVsSz1mdW5jdGlvbihwKXtyZXR1cm4gcC5pbXVsKHRoaXMuayl9LEIobGUsaWUpLGxlLnByb3RvdHlwZS5zcGxpdD1mdW5jdGlvbihwLGIpe2Zvcih2YXIgeD00MTk0MzAzLEM9TWF0aC5taW4ocC5sZW5ndGgsOSksVD0wO1Q8QztUKyspYi53b3Jkc1tUXT1wLndvcmRzW1Rd'@;
put 'O2lmKGIubGVuZ3RoPUMscC5sZW5ndGg8PTkpcmV0dXJuIHAud29yZHNbMF09MCx2b2lkKHAubGVuZ3RoPTEpO3ZhciBIPXAud29yZHNbOV07Zm9yKGIud29yZHNbYi5sZW5ndGgrK109SCZ4LFQ9MTA7VDxwLmxlbmd0aDtUKyspe3ZhciBqPTB8cC53b3Jkc1tUXTtwLndvcmRzW1QtMTBdPShq'@;
put 'JngpPDw0fEg+Pj4yMixIPWp9cC53b3Jkc1tULTEwXT1IPj4+PTIyLHAubGVuZ3RoLT0wPT09SCYmcC5sZW5ndGg+MTA/MTA6OX0sbGUucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKHApe3Aud29yZHNbcC5sZW5ndGhdPTAscC53b3Jkc1twLmxlbmd0aCsxXT0wLHAubGVuZ3RoKz0yO2Zvcih2'@;
put 'YXIgYj0wLHg9MDt4PHAubGVuZ3RoO3grKyl7dmFyIEM9MHxwLndvcmRzW3hdO3Aud29yZHNbeF09NjcxMDg4NjMmKGIrPTk3NypDKSxiPTY0KkMrKGIvNjcxMDg4NjR8MCl9cmV0dXJuIDA9PT1wLndvcmRzW3AubGVuZ3RoLTFdJiYocC5sZW5ndGgtLSwwPT09cC53b3Jkc1twLmxlbmd0aC0x'@;
put 'XSYmcC5sZW5ndGgtLSkscH0sQihtZSxpZSksQihfZSxpZSksQihUZSxpZSksVGUucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKHApe2Zvcih2YXIgYj0wLHg9MDt4PHAubGVuZ3RoO3grKyl7dmFyIEM9MTkqKDB8cC53b3Jkc1t4XSkrYixUPTY3MTA4ODYzJkM7Qz4+Pj0yNixwLndvcmRzW3hd'@;
put 'PVQsYj1DfXJldHVybiAwIT09YiYmKHAud29yZHNbcC5sZW5ndGgrK109YikscH0sdy5fcHJpbWU9ZnVuY3Rpb24ocCl7aWYobmVbcF0pcmV0dXJuIG5lW3BdO3ZhciBiO2lmKCJrMjU2Ij09PXApYj1uZXcgbGU7ZWxzZSBpZigicDIyNCI9PT1wKWI9bmV3IG1lO2Vsc2UgaWYoInAxOTIiPT09'@;
put 'cCliPW5ldyBfZTtlbHNle2lmKCJwMjU1MTkiIT09cCl0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gcHJpbWUgIitwKTtiPW5ldyBUZX1yZXR1cm4gbmVbcF09YixifSxTZS5wcm90b3R5cGUuX3ZlcmlmeTE9ZnVuY3Rpb24ocCl7ZygwPT09cC5uZWdhdGl2ZSwicmVkIHdvcmtzIG9ubHkgd2l0'@;
put 'aCBwb3NpdGl2ZXMiKSxnKHAucmVkLCJyZWQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIil9LFNlLnByb3RvdHlwZS5fdmVyaWZ5Mj1mdW5jdGlvbihwLGIpe2coIShwLm5lZ2F0aXZlfGIubmVnYXRpdmUpLCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIpLGcocC5yZWQmJnAu'@;
put 'cmVkPT09Yi5yZWQsInJlZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKX0sU2UucHJvdG90eXBlLmltb2Q9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMucHJpbWU/dGhpcy5wcmltZS5pcmVkdWNlKHApLl9mb3JjZVJlZCh0aGlzKTpwLnVtb2QodGhpcy5tKS5fZm9yY2VSZWQodGhpcyl9'@;
put 'LFNlLnByb3RvdHlwZS5uZWc9ZnVuY3Rpb24ocCl7cmV0dXJuIHAuaXNaZXJvKCk/cC5jbG9uZSgpOnRoaXMubS5zdWIocCkuX2ZvcmNlUmVkKHRoaXMpfSxTZS5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKHAsYil7dGhpcy5fdmVyaWZ5MihwLGIpO3ZhciB4PXAuYWRkKGIpO3JldHVybiB4LmNt'@;
put 'cCh0aGlzLm0pPj0wJiZ4LmlzdWIodGhpcy5tKSx4Ll9mb3JjZVJlZCh0aGlzKX0sU2UucHJvdG90eXBlLmlhZGQ9ZnVuY3Rpb24ocCxiKXt0aGlzLl92ZXJpZnkyKHAsYik7dmFyIHg9cC5pYWRkKGIpO3JldHVybiB4LmNtcCh0aGlzLm0pPj0wJiZ4LmlzdWIodGhpcy5tKSx4fSxTZS5wcm90'@;
put 'b3R5cGUuc3ViPWZ1bmN0aW9uKHAsYil7dGhpcy5fdmVyaWZ5MihwLGIpO3ZhciB4PXAuc3ViKGIpO3JldHVybiB4LmNtcG4oMCk8MCYmeC5pYWRkKHRoaXMubSkseC5fZm9yY2VSZWQodGhpcyl9LFNlLnByb3RvdHlwZS5pc3ViPWZ1bmN0aW9uKHAsYil7dGhpcy5fdmVyaWZ5MihwLGIpO3Zh'@;
put 'ciB4PXAuaXN1YihiKTtyZXR1cm4geC5jbXBuKDApPDAmJnguaWFkZCh0aGlzLm0pLHh9LFNlLnByb3RvdHlwZS5zaGw9ZnVuY3Rpb24ocCxiKXtyZXR1cm4gdGhpcy5fdmVyaWZ5MShwKSx0aGlzLmltb2QocC51c2hsbihiKSl9LFNlLnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKHAsYil7cmV0'@;
put 'dXJuIHRoaXMuX3ZlcmlmeTIocCxiKSx0aGlzLmltb2QocC5pbXVsKGIpKX0sU2UucHJvdG90eXBlLm11bD1mdW5jdGlvbihwLGIpe3JldHVybiB0aGlzLl92ZXJpZnkyKHAsYiksdGhpcy5pbW9kKHAubXVsKGIpKX0sU2UucHJvdG90eXBlLmlzcXI9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMu'@;
put 'aW11bChwLHAuY2xvbmUoKSl9LFNlLnByb3RvdHlwZS5zcXI9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMubXVsKHAscCl9LFNlLnByb3RvdHlwZS5zcXJ0PWZ1bmN0aW9uKHApe2lmKHAuaXNaZXJvKCkpcmV0dXJuIHAuY2xvbmUoKTt2YXIgYj10aGlzLm0uYW5kbG4oMyk7aWYoZyhiJTI9PTEp'@;
put 'LDM9PT1iKXt2YXIgeD10aGlzLm0uYWRkKG5ldyB3KDEpKS5pdXNocm4oMik7cmV0dXJuIHRoaXMucG93KHAseCl9Zm9yKHZhciBDPXRoaXMubS5zdWJuKDEpLFQ9MDshQy5pc1plcm8oKSYmMD09PUMuYW5kbG4oMSk7KVQrKyxDLml1c2hybigxKTtnKCFDLmlzWmVybygpKTt2YXIgSD1uZXcg'@;
put 'dygxKS50b1JlZCh0aGlzKSxqPUgucmVkTmVnKCksRT10aGlzLm0uc3VibigxKS5pdXNocm4oMSksbT10aGlzLm0uYml0TGVuZ3RoKCk7Zm9yKG09bmV3IHcoMiptKm0pLnRvUmVkKHRoaXMpOzAhPT10aGlzLnBvdyhtLEUpLmNtcChqKTspbS5yZWRJQWRkKGopO2Zvcih2YXIgQT10aGlzLnBv'@;
put 'dyhtLEMpLGFlPXRoaXMucG93KHAsQy5hZGRuKDEpLml1c2hybigxKSksdGU9dGhpcy5wb3cocCxDKSxzZT1UOzAhPT10ZS5jbXAoSCk7KXtmb3IodmFyIHdlPXRlLFVlPTA7MCE9PXdlLmNtcChIKTtVZSsrKXdlPXdlLnJlZFNxcigpO2coVWU8c2UpO3ZhciBKZT10aGlzLnBvdyhBLG5ldyB3'@;
put 'KDEpLml1c2hsbihzZS1VZS0xKSk7YWU9YWUucmVkTXVsKEplKSxBPUplLnJlZFNxcigpLHRlPXRlLnJlZE11bChBKSxzZT1VZX1yZXR1cm4gYWV9LFNlLnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKHApe3ZhciBiPXAuX2ludm1wKHRoaXMubSk7cmV0dXJuIDAhPT1iLm5lZ2F0aXZlPyhiLm5l'@;
put 'Z2F0aXZlPTAsdGhpcy5pbW9kKGIpLnJlZE5lZygpKTp0aGlzLmltb2QoYil9LFNlLnByb3RvdHlwZS5wb3c9ZnVuY3Rpb24ocCxiKXtpZihiLmlzWmVybygpKXJldHVybiBuZXcgdygxKS50b1JlZCh0aGlzKTtpZigwPT09Yi5jbXBuKDEpKXJldHVybiBwLmNsb25lKCk7dmFyIEM9bmV3IEFy'@;
put 'cmF5KDE2KTtDWzBdPW5ldyB3KDEpLnRvUmVkKHRoaXMpLENbMV09cDtmb3IodmFyIFQ9MjtUPEMubGVuZ3RoO1QrKylDW1RdPXRoaXMubXVsKENbVC0xXSxwKTt2YXIgSD1DWzBdLGo9MCxFPTAsbT1iLmJpdExlbmd0aCgpJTI2O2ZvcigwPT09bSYmKG09MjYpLFQ9Yi5sZW5ndGgtMTtUPj0w'@;
put 'O1QtLSl7Zm9yKHZhciBBPWIud29yZHNbVF0sYWU9bS0xO2FlPj0wO2FlLS0pe3ZhciB0ZT1BPj5hZSYxO0ghPT1DWzBdJiYoSD10aGlzLnNxcihIKSksMCE9PXRlfHwwIT09aj8oajw8PTEsanw9dGUsKDQ9PSsrRXx8MD09PVQmJjA9PT1hZSkmJihIPXRoaXMubXVsKEgsQ1tqXSksRT0wLGo9'@;
put 'MCkpOkU9MH1tPTI2fXJldHVybiBIfSxTZS5wcm90b3R5cGUuY29udmVydFRvPWZ1bmN0aW9uKHApe3ZhciBiPXAudW1vZCh0aGlzLm0pO3JldHVybiBiPT09cD9iLmNsb25lKCk6Yn0sU2UucHJvdG90eXBlLmNvbnZlcnRGcm9tPWZ1bmN0aW9uKHApe3ZhciBiPXAuY2xvbmUoKTtyZXR1cm4g'@;
put 'Yi5yZWQ9bnVsbCxifSx3Lm1vbnQ9ZnVuY3Rpb24ocCl7cmV0dXJuIG5ldyBqZShwKX0sQihqZSxTZSksamUucHJvdG90eXBlLmNvbnZlcnRUbz1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5pbW9kKHAudXNobG4odGhpcy5zaGlmdCkpfSxqZS5wcm90b3R5cGUuY29udmVydEZyb209ZnVuY3Rp'@;
put 'b24ocCl7dmFyIGI9dGhpcy5pbW9kKHAubXVsKHRoaXMucmludikpO3JldHVybiBiLnJlZD1udWxsLGJ9LGplLnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKHAsYil7aWYocC5pc1plcm8oKXx8Yi5pc1plcm8oKSlyZXR1cm4gcC53b3Jkc1swXT0wLHAubGVuZ3RoPTEscDt2YXIgeD1wLmltdWwo'@;
put 'YiksQz14Lm1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm1pbnYpLmltYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5tKSxUPXguaXN1YihDKS5pdXNocm4odGhpcy5zaGlmdCksSD1UO3JldHVybiBULmNtcCh0aGlzLm0pPj0wP0g9VC5pc3ViKHRoaXMubSk6VC5jbXBuKDApPDAmJihIPVQu'@;
put 'aWFkZCh0aGlzLm0pKSxILl9mb3JjZVJlZCh0aGlzKX0samUucHJvdG90eXBlLm11bD1mdW5jdGlvbihwLGIpe2lmKHAuaXNaZXJvKCl8fGIuaXNaZXJvKCkpcmV0dXJuIG5ldyB3KDApLl9mb3JjZVJlZCh0aGlzKTt2YXIgeD1wLm11bChiKSxDPXgubWFza24odGhpcy5zaGlmdCkubXVsKHRo'@;
put 'aXMubWludikuaW1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm0pLFQ9eC5pc3ViKEMpLml1c2hybih0aGlzLnNoaWZ0KSxIPVQ7cmV0dXJuIFQuY21wKHRoaXMubSk+PTA/SD1ULmlzdWIodGhpcy5tKTpULmNtcG4oMCk8MCYmKEg9VC5pYWRkKHRoaXMubSkpLEguX2ZvcmNlUmVkKHRoaXMp'@;
put 'fSxqZS5wcm90b3R5cGUuaW52bT1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5pbW9kKHAuX2ludm1wKHRoaXMubSkubXVsKHRoaXMucjIpKS5fZm9yY2VSZWQodGhpcyl9fSh1ZT15Lm5tZCh1ZSksdGhpcyl9LDk3NDY6dWU9PntmdW5jdGlvbiBYKHksSSl7aWYoIXkpdGhyb3cgbmV3IEVycm9y'@;
put 'KEl8fCJBc3NlcnRpb24gZmFpbGVkIil9dWUuZXhwb3J0cz1YLFguZXF1YWw9ZnVuY3Rpb24oSSxfLGcpe2lmKEkhPV8pdGhyb3cgbmV3IEVycm9yKGd8fCJBc3NlcnRpb24gZmFpbGVkOiAiK0krIiAhPSAiK18pfX0sNDUwNDoodWUsWCk9PnsidXNlIHN0cmljdCI7dmFyIHk9WDtmdW5jdGlv'@;
put 'biBfKEIpe3JldHVybiAxPT09Qi5sZW5ndGg/IjAiK0I6Qn1mdW5jdGlvbiBnKEIpe2Zvcih2YXIgdz0iIixQPTA7UDxCLmxlbmd0aDtQKyspdys9XyhCW1BdLnRvU3RyaW5nKDE2KSk7cmV0dXJuIHd9eS50b0FycmF5PWZ1bmN0aW9uIEkoQix3KXtpZihBcnJheS5pc0FycmF5KEIpKXJldHVy'@;
put 'biBCLnNsaWNlKCk7aWYoIUIpcmV0dXJuW107dmFyIFA9W107aWYoInN0cmluZyIhPXR5cGVvZiBCKXtmb3IodmFyIEY9MDtGPEIubGVuZ3RoO0YrKylQW0ZdPTB8QltGXTtyZXR1cm4gUH1pZigiaGV4Ij09PXcpZm9yKChCPUIucmVwbGFjZSgvW15hLXowLTldKy9naSwiIikpLmxlbmd0aCUy'@;
put 'IT0wJiYoQj0iMCIrQiksRj0wO0Y8Qi5sZW5ndGg7Ris9MilQLnB1c2gocGFyc2VJbnQoQltGXStCW0YrMV0sMTYpKTtlbHNlIGZvcihGPTA7RjxCLmxlbmd0aDtGKyspe3ZhciBPPUIuY2hhckNvZGVBdChGKSx6PU8+PjgsTj0yNTUmTzt6P1AucHVzaCh6LE4pOlAucHVzaChOKX1yZXR1cm4g'@;
put 'UH0seS56ZXJvMj1fLHkudG9IZXg9Zyx5LmVuY29kZT1mdW5jdGlvbih3LFApe3JldHVybiJoZXgiPT09UD9nKHcpOnd9fSw0MjQ0OnVlPT57InVzZSBzdHJpY3QiO3ZhciBYPWZ1bmN0aW9uKHkpe3JldHVybiB5IT15fTt1ZS5leHBvcnRzPWZ1bmN0aW9uKEksXyl7cmV0dXJuIDA9PT1JJiYw'@;
put 'PT09Xz8xL0k9PTEvXzohIShJPT09X3x8WChJKSYmWChfKSl9fSw2MDk6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg0Mjg5KSxfPXkoNTU1OSksZz15KDQyNDQpLEI9eSg1NjI0KSx3PXkoMjI4MSksUD1fKEIoKSxPYmplY3QpO0koUCx7Z2V0UG9seWZpbGw6QixpbXBsZW1lbnRh'@;
put 'dGlvbjpnLHNoaW06d30pLHVlLmV4cG9ydHM9UH0sNTYyNDoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDQyNDQpO3VlLmV4cG9ydHM9ZnVuY3Rpb24oKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgT2JqZWN0LmlzP09iamVjdC5pczpJfX0sMjI4MToodWUsWCx5KT0+eyJ1c2Ug'@;
put 'c3RyaWN0Ijt2YXIgST15KDU2MjQpLF89eSg0Mjg5KTt1ZS5leHBvcnRzPWZ1bmN0aW9uKCl7dmFyIEI9SSgpO3JldHVybiBfKE9iamVjdCx7aXM6Qn0se2lzOmZ1bmN0aW9uKCl7cmV0dXJuIE9iamVjdC5pcyE9PUJ9fSksQn19LDg5ODc6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk7'@;
put 'aWYoIU9iamVjdC5rZXlzKXt2YXIgXz1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LGc9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyxCPXkoMTQxNCksdz1PYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLFA9IXcuY2FsbCh7dG9TdHJpbmc6bnVsbH0sInRvU3Ry'@;
put 'aW5nIiksRj13LmNhbGwoZnVuY3Rpb24oKXt9LCJwcm90b3R5cGUiKSxPPVsidG9TdHJpbmciLCJ0b0xvY2FsZVN0cmluZyIsInZhbHVlT2YiLCJoYXNPd25Qcm9wZXJ0eSIsImlzUHJvdG90eXBlT2YiLCJwcm9wZXJ0eUlzRW51bWVyYWJsZSIsImNvbnN0cnVjdG9yIl0sej1mdW5jdGlvbihV'@;
put 'KXt2YXIgVz1VLmNvbnN0cnVjdG9yO3JldHVybiBXJiZXLnByb3RvdHlwZT09PVV9LE49eyRhcHBsaWNhdGlvbkNhY2hlOiEwLCRjb25zb2xlOiEwLCRleHRlcm5hbDohMCwkZnJhbWU6ITAsJGZyYW1lRWxlbWVudDohMCwkZnJhbWVzOiEwLCRpbm5lckhlaWdodDohMCwkaW5uZXJXaWR0aDoh'@;
put 'MCwkb25tb3pmdWxsc2NyZWVuY2hhbmdlOiEwLCRvbm1vemZ1bGxzY3JlZW5lcnJvcjohMCwkb3V0ZXJIZWlnaHQ6ITAsJG91dGVyV2lkdGg6ITAsJHBhZ2VYT2Zmc2V0OiEwLCRwYWdlWU9mZnNldDohMCwkcGFyZW50OiEwLCRzY3JvbGxMZWZ0OiEwLCRzY3JvbGxUb3A6ITAsJHNjcm9sbFg6'@;
put 'ITAsJHNjcm9sbFk6ITAsJHNlbGY6ITAsJHdlYmtpdEluZGV4ZWREQjohMCwkd2Via2l0U3RvcmFnZUluZm86ITAsJHdpbmRvdzohMH0sTD1mdW5jdGlvbigpe2lmKHR5cGVvZiB3aW5kb3c+InUiKXJldHVybiExO2Zvcih2YXIgVSBpbiB3aW5kb3cpdHJ5e2lmKCFOWyIkIitVXSYmXy5jYWxs'@;
put 'KHdpbmRvdyxVKSYmbnVsbCE9PXdpbmRvd1tVXSYmIm9iamVjdCI9PXR5cGVvZiB3aW5kb3dbVV0pdHJ5e3ood2luZG93W1VdKX1jYXRjaHtyZXR1cm4hMH19Y2F0Y2h7cmV0dXJuITB9cmV0dXJuITF9KCk7ST1mdW5jdGlvbihXKXt2YXIgWT1udWxsIT09VyYmIm9iamVjdCI9PXR5cGVvZiBX'@;
put 'LHE9IltvYmplY3QgRnVuY3Rpb25dIj09PWcuY2FsbChXKSxlZT1CKFcpLEo9WSYmIltvYmplY3QgU3RyaW5nXSI9PT1nLmNhbGwoVyksbmU9W107aWYoIVkmJiFxJiYhZWUpdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0LmtleXMgY2FsbGVkIG9uIGEgbm9uLW9iamVjdCIpO3ZhciBpZT1G'@;
put 'JiZxO2lmKEomJlcubGVuZ3RoPjAmJiFfLmNhbGwoVywwKSlmb3IodmFyIGxlPTA7bGU8Vy5sZW5ndGg7KytsZSluZS5wdXNoKFN0cmluZyhsZSkpO2lmKGVlJiZXLmxlbmd0aD4wKWZvcih2YXIgbWU9MDttZTxXLmxlbmd0aDsrK21lKW5lLnB1c2goU3RyaW5nKG1lKSk7ZWxzZSBmb3IodmFy'@;
put 'IF9lIGluIFcpKCFpZXx8InByb3RvdHlwZSIhPT1fZSkmJl8uY2FsbChXLF9lKSYmbmUucHVzaChTdHJpbmcoX2UpKTtpZihQKWZvcih2YXIgVGU9ZnVuY3Rpb24oVSl7aWYodHlwZW9mIHdpbmRvdz4idSJ8fCFMKXJldHVybiB6KFUpO3RyeXtyZXR1cm4geihVKX1jYXRjaHtyZXR1cm4hMX19'@;
put 'KFcpLFNlPTA7U2U8Ty5sZW5ndGg7KytTZSkoIVRlfHwiY29uc3RydWN0b3IiIT09T1tTZV0pJiZfLmNhbGwoVyxPW1NlXSkmJm5lLnB1c2goT1tTZV0pO3JldHVybiBuZX19dWUuZXhwb3J0cz1JfSwyMjE1Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPUFycmF5LnByb3RvdHlwZS5z'@;
put 'bGljZSxfPXkoMTQxNCksZz1PYmplY3Qua2V5cyxCPWc/ZnVuY3Rpb24oRil7cmV0dXJuIGcoRil9OnkoODk4Nyksdz1PYmplY3Qua2V5cztCLnNoaW09ZnVuY3Rpb24oKXtpZihPYmplY3Qua2V5cyl7dmFyIEY9ZnVuY3Rpb24oKXt2YXIgTz1PYmplY3Qua2V5cyhhcmd1bWVudHMpO3JldHVy'@;
put 'biBPJiZPLmxlbmd0aD09PWFyZ3VtZW50cy5sZW5ndGh9KDEsMik7Rnx8KE9iamVjdC5rZXlzPWZ1bmN0aW9uKHope3JldHVybiBfKHopP3coSS5jYWxsKHopKTp3KHopfSl9ZWxzZSBPYmplY3Qua2V5cz1CO3JldHVybiBPYmplY3Qua2V5c3x8Qn0sdWUuZXhwb3J0cz1CfSwxNDE0OnVlPT57'@;
put 'InVzZSBzdHJpY3QiO3ZhciBYPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7dWUuZXhwb3J0cz1mdW5jdGlvbihJKXt2YXIgXz1YLmNhbGwoSSksZz0iW29iamVjdCBBcmd1bWVudHNdIj09PV87cmV0dXJuIGd8fChnPSJbb2JqZWN0IEFycmF5XSIhPT1fJiZudWxsIT09SSYmIm9iamVjdCI9'@;
put 'PXR5cGVvZiBJJiYibnVtYmVyIj09dHlwZW9mIEkubGVuZ3RoJiZJLmxlbmd0aD49MCYmIltvYmplY3QgRnVuY3Rpb25dIj09PVguY2FsbChJLmNhbGxlZSkpLGd9fSwyODM3Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoMjIxNSksXz15KDU0MTkpKCksZz15KDczNzkpLEI9eSg4'@;
put 'ODkyKSx3PWcoIkFycmF5LnByb3RvdHlwZS5wdXNoIiksUD1nKCJPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlIiksRj1fP0IuZ2V0T3duUHJvcGVydHlTeW1ib2xzOm51bGw7dWUuZXhwb3J0cz1mdW5jdGlvbih6LE4pe2lmKG51bGw9PXopdGhyb3cgbmV3IFR5cGVFcnJv'@;
put 'cigidGFyZ2V0IG11c3QgYmUgYW4gb2JqZWN0Iik7dmFyIEw9Qih6KTtpZigxPT09YXJndW1lbnRzLmxlbmd0aClyZXR1cm4gTDtmb3IodmFyIEs9MTtLPGFyZ3VtZW50cy5sZW5ndGg7KytLKXt2YXIgVT1CKGFyZ3VtZW50c1tLXSksVz1JKFUpLFk9XyYmKEIuZ2V0T3duUHJvcGVydHlTeW1i'@;
put 'b2xzfHxGKTtpZihZKWZvcih2YXIgcT1ZKFUpLGVlPTA7ZWU8cS5sZW5ndGg7KytlZSl7dmFyIEo9cVtlZV07UChVLEopJiZ3KFcsSil9Zm9yKHZhciBuZT0wO25lPFcubGVuZ3RoOysrbmUpe3ZhciBpZT1XW25lXTtQKFUsaWUpJiYoTFtpZV09VVtpZV0pfX1yZXR1cm4gTH19LDgxNjI6KHVl'@;
put 'LFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSgyODM3KTt1ZS5leHBvcnRzPWZ1bmN0aW9uKCl7cmV0dXJuIU9iamVjdC5hc3NpZ258fGZ1bmN0aW9uKCl7aWYoIU9iamVjdC5hc3NpZ24pcmV0dXJuITE7Zm9yKHZhciBCPSJhYmNkZWZnaGlqa2xtbm9wcXJzdCIsdz1CLnNwbGl0KCIiKSxQ'@;
put 'PXt9LEY9MDtGPHcubGVuZ3RoOysrRilQW3dbRl1dPXdbRl07dmFyIE89T2JqZWN0LmFzc2lnbih7fSxQKSx6PSIiO2Zvcih2YXIgTiBpbiBPKXorPU47cmV0dXJuIEIhPT16fSgpfHxmdW5jdGlvbigpe2lmKCFPYmplY3QuYXNzaWdufHwhT2JqZWN0LnByZXZlbnRFeHRlbnNpb25zKXJldHVy'@;
put 'biExO3ZhciBCPU9iamVjdC5wcmV2ZW50RXh0ZW5zaW9ucyh7MToyfSk7dHJ5e09iamVjdC5hc3NpZ24oQiwieHkiKX1jYXRjaHtyZXR1cm4ieSI9PT1CWzFdfXJldHVybiExfSgpP0k6T2JqZWN0LmFzc2lnbn19LDc0MzU6KHVlLFgpPT57WC5lbmRpYW5uZXNzPWZ1bmN0aW9uKCl7cmV0dXJu'@;
put 'IkxFIn0sWC5ob3N0bmFtZT1mdW5jdGlvbigpe3JldHVybiB0eXBlb2YgbG9jYXRpb248InUiP2xvY2F0aW9uLmhvc3RuYW1lOiIifSxYLmxvYWRhdmc9ZnVuY3Rpb24oKXtyZXR1cm5bXX0sWC51cHRpbWU9ZnVuY3Rpb24oKXtyZXR1cm4gMH0sWC5mcmVlbWVtPWZ1bmN0aW9uKCl7cmV0dXJu'@;
put 'IE51bWJlci5NQVhfVkFMVUV9LFgudG90YWxtZW09ZnVuY3Rpb24oKXtyZXR1cm4gTnVtYmVyLk1BWF9WQUxVRX0sWC5jcHVzPWZ1bmN0aW9uKCl7cmV0dXJuW119LFgudHlwZT1mdW5jdGlvbigpe3JldHVybiJCcm93c2VyIn0sWC5yZWxlYXNlPWZ1bmN0aW9uKCl7cmV0dXJuIHR5cGVvZiBu'@;
put 'YXZpZ2F0b3I8InUiP25hdmlnYXRvci5hcHBWZXJzaW9uOiIifSxYLm5ldHdvcmtJbnRlcmZhY2VzPVguZ2V0TmV0d29ya0ludGVyZmFjZXM9ZnVuY3Rpb24oKXtyZXR1cm57fX0sWC5hcmNoPWZ1bmN0aW9uKCl7cmV0dXJuImphdmFzY3JpcHQifSxYLnBsYXRmb3JtPWZ1bmN0aW9uKCl7cmV0'@;
put 'dXJuImJyb3dzZXIifSxYLnRtcGRpcj1YLnRtcERpcj1mdW5jdGlvbigpe3JldHVybiIvdG1wIn0sWC5FT0w9IlxuIixYLmhvbWVkaXI9ZnVuY3Rpb24oKXtyZXR1cm4iLyJ9fSwyODE4Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoOTgwOSk7WC5jZXJ0aWZpY2F0ZT15KDE5MzQp'@;
put 'O3ZhciBfPUkuZGVmaW5lKCJSU0FQcml2YXRlS2V5IixmdW5jdGlvbigpe3RoaXMuc2VxKCkub2JqKHRoaXMua2V5KCJ2ZXJzaW9uIikuaW50KCksdGhpcy5rZXkoIm1vZHVsdXMiKS5pbnQoKSx0aGlzLmtleSgicHVibGljRXhwb25lbnQiKS5pbnQoKSx0aGlzLmtleSgicHJpdmF0ZUV4cG9u'@;
put 'ZW50IikuaW50KCksdGhpcy5rZXkoInByaW1lMSIpLmludCgpLHRoaXMua2V5KCJwcmltZTIiKS5pbnQoKSx0aGlzLmtleSgiZXhwb25lbnQxIikuaW50KCksdGhpcy5rZXkoImV4cG9uZW50MiIpLmludCgpLHRoaXMua2V5KCJjb2VmZmljaWVudCIpLmludCgpKX0pO1guUlNBUHJpdmF0ZUtl'@;
put 'eT1fO3ZhciBnPUkuZGVmaW5lKCJSU0FQdWJsaWNLZXkiLGZ1bmN0aW9uKCl7dGhpcy5zZXEoKS5vYmoodGhpcy5rZXkoIm1vZHVsdXMiKS5pbnQoKSx0aGlzLmtleSgicHVibGljRXhwb25lbnQiKS5pbnQoKSl9KTtYLlJTQVB1YmxpY0tleT1nO3ZhciBCPUkuZGVmaW5lKCJBbGdvcml0aG1J'@;
put 'ZGVudGlmaWVyIixmdW5jdGlvbigpe3RoaXMuc2VxKCkub2JqKHRoaXMua2V5KCJhbGdvcml0aG0iKS5vYmppZCgpLHRoaXMua2V5KCJub25lIikubnVsbF8oKS5vcHRpb25hbCgpLHRoaXMua2V5KCJjdXJ2ZSIpLm9iamlkKCkub3B0aW9uYWwoKSx0aGlzLmtleSgicGFyYW1zIikuc2VxKCku'@;
put 'b2JqKHRoaXMua2V5KCJwIikuaW50KCksdGhpcy5rZXkoInEiKS5pbnQoKSx0aGlzLmtleSgiZyIpLmludCgpKS5vcHRpb25hbCgpKX0pLHc9SS5kZWZpbmUoIlN1YmplY3RQdWJsaWNLZXlJbmZvIixmdW5jdGlvbigpe3RoaXMuc2VxKCkub2JqKHRoaXMua2V5KCJhbGdvcml0aG0iKS51c2Uo'@;
put 'QiksdGhpcy5rZXkoInN1YmplY3RQdWJsaWNLZXkiKS5iaXRzdHIoKSl9KTtYLlB1YmxpY0tleT13O3ZhciBQPUkuZGVmaW5lKCJQcml2YXRlS2V5SW5mbyIsZnVuY3Rpb24oKXt0aGlzLnNlcSgpLm9iaih0aGlzLmtleSgidmVyc2lvbiIpLmludCgpLHRoaXMua2V5KCJhbGdvcml0aG0iKS51'@;
put 'c2UoQiksdGhpcy5rZXkoInN1YmplY3RQcml2YXRlS2V5Iikub2N0c3RyKCkpfSk7WC5Qcml2YXRlS2V5PVA7dmFyIEY9SS5kZWZpbmUoIkVuY3J5cHRlZFByaXZhdGVLZXlJbmZvIixmdW5jdGlvbigpe3RoaXMuc2VxKCkub2JqKHRoaXMua2V5KCJhbGdvcml0aG0iKS5zZXEoKS5vYmoodGhp'@;
put 'cy5rZXkoImlkIikub2JqaWQoKSx0aGlzLmtleSgiZGVjcnlwdCIpLnNlcSgpLm9iaih0aGlzLmtleSgia2RlIikuc2VxKCkub2JqKHRoaXMua2V5KCJpZCIpLm9iamlkKCksdGhpcy5rZXkoImtkZXBhcmFtcyIpLnNlcSgpLm9iaih0aGlzLmtleSgic2FsdCIpLm9jdHN0cigpLHRoaXMua2V5'@;
put 'KCJpdGVycyIpLmludCgpKSksdGhpcy5rZXkoImNpcGhlciIpLnNlcSgpLm9iaih0aGlzLmtleSgiYWxnbyIpLm9iamlkKCksdGhpcy5rZXkoIml2Iikub2N0c3RyKCkpKSksdGhpcy5rZXkoInN1YmplY3RQcml2YXRlS2V5Iikub2N0c3RyKCkpfSk7WC5FbmNyeXB0ZWRQcml2YXRlS2V5PUY7'@;
put 'dmFyIE89SS5kZWZpbmUoIkRTQVByaXZhdGVLZXkiLGZ1bmN0aW9uKCl7dGhpcy5zZXEoKS5vYmoodGhpcy5rZXkoInZlcnNpb24iKS5pbnQoKSx0aGlzLmtleSgicCIpLmludCgpLHRoaXMua2V5KCJxIikuaW50KCksdGhpcy5rZXkoImciKS5pbnQoKSx0aGlzLmtleSgicHViX2tleSIpLmlu'@;
put 'dCgpLHRoaXMua2V5KCJwcml2X2tleSIpLmludCgpKX0pO1guRFNBUHJpdmF0ZUtleT1PLFguRFNBcGFyYW09SS5kZWZpbmUoIkRTQXBhcmFtIixmdW5jdGlvbigpe3RoaXMuaW50KCl9KTt2YXIgej1JLmRlZmluZSgiRUNQYXJhbWV0ZXJzIixmdW5jdGlvbigpe3RoaXMuY2hvaWNlKHtuYW1l'@;
put 'ZEN1cnZlOnRoaXMub2JqaWQoKX0pfSksTj1JLmRlZmluZSgiRUNQcml2YXRlS2V5IixmdW5jdGlvbigpe3RoaXMuc2VxKCkub2JqKHRoaXMua2V5KCJ2ZXJzaW9uIikuaW50KCksdGhpcy5rZXkoInByaXZhdGVLZXkiKS5vY3RzdHIoKSx0aGlzLmtleSgicGFyYW1ldGVycyIpLm9wdGlvbmFs'@;
put 'KCkuZXhwbGljaXQoMCkudXNlKHopLHRoaXMua2V5KCJwdWJsaWNLZXkiKS5vcHRpb25hbCgpLmV4cGxpY2l0KDEpLmJpdHN0cigpKX0pO1guRUNQcml2YXRlS2V5PU4sWC5zaWduYXR1cmU9SS5kZWZpbmUoInNpZ25hdHVyZSIsZnVuY3Rpb24oKXt0aGlzLnNlcSgpLm9iaih0aGlzLmtleSgi'@;
put 'ciIpLmludCgpLHRoaXMua2V5KCJzIikuaW50KCkpfSl9LDE5MzQ6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg5ODA5KSxfPUkuZGVmaW5lKCJUaW1lIixmdW5jdGlvbigpe3RoaXMuY2hvaWNlKHt1dGNUaW1lOnRoaXMudXRjdGltZSgpLGdlbmVyYWxUaW1lOnRoaXMuZ2VudGlt'@;
put 'ZSgpfSl9KSxnPUkuZGVmaW5lKCJBdHRyaWJ1dGVUeXBlVmFsdWUiLGZ1bmN0aW9uKCl7dGhpcy5zZXEoKS5vYmoodGhpcy5rZXkoInR5cGUiKS5vYmppZCgpLHRoaXMua2V5KCJ2YWx1ZSIpLmFueSgpKX0pLEI9SS5kZWZpbmUoIkFsZ29yaXRobUlkZW50aWZpZXIiLGZ1bmN0aW9uKCl7dGhp'@;
put 'cy5zZXEoKS5vYmoodGhpcy5rZXkoImFsZ29yaXRobSIpLm9iamlkKCksdGhpcy5rZXkoInBhcmFtZXRlcnMiKS5vcHRpb25hbCgpLHRoaXMua2V5KCJjdXJ2ZSIpLm9iamlkKCkub3B0aW9uYWwoKSl9KSx3PUkuZGVmaW5lKCJTdWJqZWN0UHVibGljS2V5SW5mbyIsZnVuY3Rpb24oKXt0aGlz'@;
put 'LnNlcSgpLm9iaih0aGlzLmtleSgiYWxnb3JpdGhtIikudXNlKEIpLHRoaXMua2V5KCJzdWJqZWN0UHVibGljS2V5IikuYml0c3RyKCkpfSksUD1JLmRlZmluZSgiUmVsYXRpdmVEaXN0aW5ndWlzaGVkTmFtZSIsZnVuY3Rpb24oKXt0aGlzLnNldG9mKGcpfSksRj1JLmRlZmluZSgiUkROU2Vx'@;
put 'dWVuY2UiLGZ1bmN0aW9uKCl7dGhpcy5zZXFvZihQKX0pLE89SS5kZWZpbmUoIk5hbWUiLGZ1bmN0aW9uKCl7dGhpcy5jaG9pY2Uoe3JkblNlcXVlbmNlOnRoaXMudXNlKEYpfSl9KSx6PUkuZGVmaW5lKCJWYWxpZGl0eSIsZnVuY3Rpb24oKXt0aGlzLnNlcSgpLm9iaih0aGlzLmtleSgibm90'@;
put 'QmVmb3JlIikudXNlKF8pLHRoaXMua2V5KCJub3RBZnRlciIpLnVzZShfKSl9KSxOPUkuZGVmaW5lKCJFeHRlbnNpb24iLGZ1bmN0aW9uKCl7dGhpcy5zZXEoKS5vYmoodGhpcy5rZXkoImV4dG5JRCIpLm9iamlkKCksdGhpcy5rZXkoImNyaXRpY2FsIikuYm9vbCgpLmRlZighMSksdGhpcy5r'@;
put 'ZXkoImV4dG5WYWx1ZSIpLm9jdHN0cigpKX0pLEw9SS5kZWZpbmUoIlRCU0NlcnRpZmljYXRlIixmdW5jdGlvbigpe3RoaXMuc2VxKCkub2JqKHRoaXMua2V5KCJ2ZXJzaW9uIikuZXhwbGljaXQoMCkuaW50KCkub3B0aW9uYWwoKSx0aGlzLmtleSgic2VyaWFsTnVtYmVyIikuaW50KCksdGhp'@;
put 'cy5rZXkoInNpZ25hdHVyZSIpLnVzZShCKSx0aGlzLmtleSgiaXNzdWVyIikudXNlKE8pLHRoaXMua2V5KCJ2YWxpZGl0eSIpLnVzZSh6KSx0aGlzLmtleSgic3ViamVjdCIpLnVzZShPKSx0aGlzLmtleSgic3ViamVjdFB1YmxpY0tleUluZm8iKS51c2UodyksdGhpcy5rZXkoImlzc3VlclVu'@;
put 'aXF1ZUlEIikuaW1wbGljaXQoMSkuYml0c3RyKCkub3B0aW9uYWwoKSx0aGlzLmtleSgic3ViamVjdFVuaXF1ZUlEIikuaW1wbGljaXQoMikuYml0c3RyKCkub3B0aW9uYWwoKSx0aGlzLmtleSgiZXh0ZW5zaW9ucyIpLmV4cGxpY2l0KDMpLnNlcW9mKE4pLm9wdGlvbmFsKCkpfSksSz1JLmRl'@;
put 'ZmluZSgiWDUwOUNlcnRpZmljYXRlIixmdW5jdGlvbigpe3RoaXMuc2VxKCkub2JqKHRoaXMua2V5KCJ0YnNDZXJ0aWZpY2F0ZSIpLnVzZShMKSx0aGlzLmtleSgic2lnbmF0dXJlQWxnb3JpdGhtIikudXNlKEIpLHRoaXMua2V5KCJzaWduYXR1cmVWYWx1ZSIpLmJpdHN0cigpKX0pO3VlLmV4'@;
put 'cG9ydHM9S30sNzYzMToodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST0vUHJvYy1UeXBlOiA0LEVOQ1JZUFRFRFtcblxyXStERUstSW5mbzogQUVTLSgoPzoxMjgpfCg/OjE5Mil8KD86MjU2KSktQ0JDLChbMC05QS1IXSspW1xuXHJdKyhbMC05QS16XG5ccisvPV0rKVtcblxyXSsvbSxf'@;
put 'PS9eLS0tLS1CRUdJTiAoKD86Lio/IEtFWSl8Q0VSVElGSUNBVEUpLS0tLS0vbSxnPS9eLS0tLS1CRUdJTiAoKD86Lio/IEtFWSl8Q0VSVElGSUNBVEUpLS0tLS0oWzAtOUEtelxuXHIrLz1dKyktLS0tLUVORCBcMS0tLS0tJC9tLEI9eSgzMDQ4KSx3PXkoNDY5NiksUD15KDk1MDkpLkJ1ZmZl'@;
put 'cjt1ZS5leHBvcnRzPWZ1bmN0aW9uKEYsTyl7dmFyIEwsej1GLnRvU3RyaW5nKCksTj16Lm1hdGNoKEkpO2lmKE4pe3ZhciBVPSJhZXMiK05bMV0sVz1QLmZyb20oTlsyXSwiaGV4IiksWT1QLmZyb20oTlszXS5yZXBsYWNlKC9bXHJcbl0vZywiIiksImJhc2U2NCIpLHE9QihPLFcuc2xpY2Uo'@;
put 'MCw4KSxwYXJzZUludChOWzFdLDEwKSkua2V5LGVlPVtdLEo9dy5jcmVhdGVEZWNpcGhlcml2KFUscSxXKTtlZS5wdXNoKEoudXBkYXRlKFkpKSxlZS5wdXNoKEouZmluYWwoKSksTD1QLmNvbmNhdChlZSl9ZWxzZXt2YXIgSz16Lm1hdGNoKGcpO0w9UC5mcm9tKEtbMl0ucmVwbGFjZSgvW1xy'@;
put 'XG5dL2csIiIpLCJiYXNlNjQiKX1yZXR1cm57dGFnOnoubWF0Y2goXylbMV0sZGF0YTpMfX19LDk4MDoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDI4MTgpLF89eSgyNTYyKSxnPXkoNzYzMSksQj15KDQ2OTYpLHc9eSg1NjMyKSxQPXkoOTUwOSkuQnVmZmVyO2Z1bmN0aW9uIE8o'@;
put 'eil7dmFyIE47Im9iamVjdCI9PXR5cGVvZiB6JiYhUC5pc0J1ZmZlcih6KSYmKE49ei5wYXNzcGhyYXNlLHo9ei5rZXkpLCJzdHJpbmciPT10eXBlb2YgeiYmKHo9UC5mcm9tKHopKTt2YXIgVyxZLEw9Zyh6LE4pLEs9TC50YWcsVT1MLmRhdGE7c3dpdGNoKEspe2Nhc2UiQ0VSVElGSUNBVEUi'@;
put 'Olk9SS5jZXJ0aWZpY2F0ZS5kZWNvZGUoVSwiZGVyIikudGJzQ2VydGlmaWNhdGUuc3ViamVjdFB1YmxpY0tleUluZm87Y2FzZSJQVUJMSUMgS0VZIjpzd2l0Y2goWXx8KFk9SS5QdWJsaWNLZXkuZGVjb2RlKFUsImRlciIpKSxXPVkuYWxnb3JpdGhtLmFsZ29yaXRobS5qb2luKCIuIikpe2Nh'@;
put 'c2UiMS4yLjg0MC4xMTM1NDkuMS4xLjEiOnJldHVybiBJLlJTQVB1YmxpY0tleS5kZWNvZGUoWS5zdWJqZWN0UHVibGljS2V5LmRhdGEsImRlciIpO2Nhc2UiMS4yLjg0MC4xMDA0NS4yLjEiOnJldHVybiBZLnN1YmplY3RQcml2YXRlS2V5PVkuc3ViamVjdFB1YmxpY0tleSx7dHlwZToiZWMi'@;
put 'LGRhdGE6WX07Y2FzZSIxLjIuODQwLjEwMDQwLjQuMSI6cmV0dXJuIFkuYWxnb3JpdGhtLnBhcmFtcy5wdWJfa2V5PUkuRFNBcGFyYW0uZGVjb2RlKFkuc3ViamVjdFB1YmxpY0tleS5kYXRhLCJkZXIiKSx7dHlwZToiZHNhIixkYXRhOlkuYWxnb3JpdGhtLnBhcmFtc307ZGVmYXVsdDp0aHJv'@;
put 'dyBuZXcgRXJyb3IoInVua25vd24ga2V5IGlkICIrVyl9Y2FzZSJFTkNSWVBURUQgUFJJVkFURSBLRVkiOlU9ZnVuY3Rpb24gRih6LE4pe3ZhciBMPXouYWxnb3JpdGhtLmRlY3J5cHQua2RlLmtkZXBhcmFtcy5zYWx0LEs9cGFyc2VJbnQoei5hbGdvcml0aG0uZGVjcnlwdC5rZGUua2RlcGFy'@;
put 'YW1zLml0ZXJzLnRvU3RyaW5nKCksMTApLFU9X1t6LmFsZ29yaXRobS5kZWNyeXB0LmNpcGhlci5hbGdvLmpvaW4oIi4iKV0sVz16LmFsZ29yaXRobS5kZWNyeXB0LmNpcGhlci5pdixZPXouc3ViamVjdFByaXZhdGVLZXkscT1wYXJzZUludChVLnNwbGl0KCItIilbMV0sMTApLzgsZWU9dy5w'@;
put 'YmtkZjJTeW5jKE4sTCxLLHEsInNoYTEiKSxKPUIuY3JlYXRlRGVjaXBoZXJpdihVLGVlLFcpLG5lPVtdO3JldHVybiBuZS5wdXNoKEoudXBkYXRlKFkpKSxuZS5wdXNoKEouZmluYWwoKSksUC5jb25jYXQobmUpfShVPUkuRW5jcnlwdGVkUHJpdmF0ZUtleS5kZWNvZGUoVSwiZGVyIiksTik7'@;
put 'Y2FzZSJQUklWQVRFIEtFWSI6c3dpdGNoKFc9KFk9SS5Qcml2YXRlS2V5LmRlY29kZShVLCJkZXIiKSkuYWxnb3JpdGhtLmFsZ29yaXRobS5qb2luKCIuIikpe2Nhc2UiMS4yLjg0MC4xMTM1NDkuMS4xLjEiOnJldHVybiBJLlJTQVByaXZhdGVLZXkuZGVjb2RlKFkuc3ViamVjdFByaXZhdGVL'@;
put 'ZXksImRlciIpO2Nhc2UiMS4yLjg0MC4xMDA0NS4yLjEiOnJldHVybntjdXJ2ZTpZLmFsZ29yaXRobS5jdXJ2ZSxwcml2YXRlS2V5OkkuRUNQcml2YXRlS2V5LmRlY29kZShZLnN1YmplY3RQcml2YXRlS2V5LCJkZXIiKS5wcml2YXRlS2V5fTtjYXNlIjEuMi44NDAuMTAwNDAuNC4xIjpyZXR1'@;
put 'cm4gWS5hbGdvcml0aG0ucGFyYW1zLnByaXZfa2V5PUkuRFNBcGFyYW0uZGVjb2RlKFkuc3ViamVjdFByaXZhdGVLZXksImRlciIpLHt0eXBlOiJkc2EiLHBhcmFtczpZLmFsZ29yaXRobS5wYXJhbXN9O2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIGtleSBpZCAiK1cpfWNhc2Ui'@;
put 'UlNBIFBVQkxJQyBLRVkiOnJldHVybiBJLlJTQVB1YmxpY0tleS5kZWNvZGUoVSwiZGVyIik7Y2FzZSJSU0EgUFJJVkFURSBLRVkiOnJldHVybiBJLlJTQVByaXZhdGVLZXkuZGVjb2RlKFUsImRlciIpO2Nhc2UiRFNBIFBSSVZBVEUgS0VZIjpyZXR1cm57dHlwZToiZHNhIixwYXJhbXM6SS5E'@;
put 'U0FQcml2YXRlS2V5LmRlY29kZShVLCJkZXIiKX07Y2FzZSJFQyBQUklWQVRFIEtFWSI6cmV0dXJue2N1cnZlOihVPUkuRUNQcml2YXRlS2V5LmRlY29kZShVLCJkZXIiKSkucGFyYW1ldGVycy52YWx1ZSxwcml2YXRlS2V5OlUucHJpdmF0ZUtleX07ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3Io'@;
put 'InVua25vd24ga2V5IHR5cGUgIitLKX19Ty5zaWduYXR1cmU9SS5zaWduYXR1cmUsdWUuZXhwb3J0cz1PfSwxNzI1OnVlPT57dWUuZXhwb3J0cz0iZnVuY3Rpb24iPT10eXBlb2YgT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbih5LEkpe3kuc3VwZXJfPUkseS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0'@;
put 'ZShJLnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOnksZW51bWVyYWJsZTohMSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSl9OmZ1bmN0aW9uKHksSSl7eS5zdXBlcl89STt2YXIgXz1mdW5jdGlvbigpe307Xy5wcm90b3R5cGU9SS5wcm90b3R5cGUseS5wcm90b3R5cGU9bmV3'@;
put 'IF8seS5wcm90b3R5cGUuY29uc3RydWN0b3I9eX19LDI5NzQ6dWU9Pnt1ZS5leHBvcnRzPWZ1bmN0aW9uKHkpe3JldHVybiB5JiYib2JqZWN0Ij09dHlwZW9mIHkmJiJmdW5jdGlvbiI9PXR5cGVvZiB5LmNvcHkmJiJmdW5jdGlvbiI9PXR5cGVvZiB5LmZpbGwmJiJmdW5jdGlvbiI9PXR5cGVv'@;
put 'ZiB5LnJlYWRVSW50OH19LDgwNTk6KHVlLFgseSk9Pnt2YXIgST15KDQxNTUpLF89eSg1MTA4KSxnPS8lW3NkaiVdL2c7WC5mb3JtYXQ9ZnVuY3Rpb24oRSl7aWYoIWxlKEUpKXtmb3IodmFyIG09W10sQT0wO0E8YXJndW1lbnRzLmxlbmd0aDtBKyspbS5wdXNoKFAoYXJndW1lbnRzW0FdKSk7'@;
put 'cmV0dXJuIG0uam9pbigiICIpfUE9MTtmb3IodmFyIGFlPWFyZ3VtZW50cyx0ZT1hZS5sZW5ndGgsc2U9U3RyaW5nKEUpLnJlcGxhY2UoZyxmdW5jdGlvbihVZSl7aWYoIiUlIj09PVVlKXJldHVybiIlIjtpZihBPj10ZSlyZXR1cm4gVWU7c3dpdGNoKFVlKXtjYXNlIiVzIjpyZXR1cm4gU3Ry'@;
put 'aW5nKGFlW0ErK10pO2Nhc2UiJWQiOnJldHVybiBOdW1iZXIoYWVbQSsrXSk7Y2FzZSIlaiI6dHJ5e3JldHVybiBKU09OLnN0cmluZ2lmeShhZVtBKytdKX1jYXRjaHtyZXR1cm4iW0NpcmN1bGFyXSJ9ZGVmYXVsdDpyZXR1cm4gVWV9fSksd2U9YWVbQV07QTx0ZTt3ZT1hZVsrK0FdKUood2Up'@;
put 'fHwhU2Uod2UpP3NlKz0iICIrd2U6c2UrPSIgIitQKHdlKTtyZXR1cm4gc2V9LFguZGVwcmVjYXRlPWZ1bmN0aW9uKEUsbSl7aWYoX2UoeS5nLnByb2Nlc3MpKXJldHVybiBmdW5jdGlvbigpe3JldHVybiBYLmRlcHJlY2F0ZShFLG0pLmFwcGx5KHRoaXMsYXJndW1lbnRzKX07aWYoITA9PT1J'@;
put 'Lm5vRGVwcmVjYXRpb24pcmV0dXJuIEU7dmFyIEE9ITE7cmV0dXJuIGZ1bmN0aW9uIGFlKCl7aWYoIUEpe2lmKEkudGhyb3dEZXByZWNhdGlvbil0aHJvdyBuZXcgRXJyb3IobSk7SS50cmFjZURlcHJlY2F0aW9uP18udHJhY2UobSk6Xy5lcnJvcihtKSxBPSEwfXJldHVybiBFLmFwcGx5KHRo'@;
put 'aXMsYXJndW1lbnRzKX19O3ZhciB3LEI9e307ZnVuY3Rpb24gUChFLG0pe3ZhciBBPXtzZWVuOltdLHN0eWxpemU6T307cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+PTMmJihBLmRlcHRoPWFyZ3VtZW50c1syXSksYXJndW1lbnRzLmxlbmd0aD49NCYmKEEuY29sb3JzPWFyZ3VtZW50c1szXSks'@;
put 'ZWUobSk/QS5zaG93SGlkZGVuPW06bSYmWC5fZXh0ZW5kKEEsbSksX2UoQS5zaG93SGlkZGVuKSYmKEEuc2hvd0hpZGRlbj0hMSksX2UoQS5kZXB0aCkmJihBLmRlcHRoPTIpLF9lKEEuY29sb3JzKSYmKEEuY29sb3JzPSExKSxfZShBLmN1c3RvbUluc3BlY3QpJiYoQS5jdXN0b21JbnNwZWN0'@;
put 'PSEwKSxBLmNvbG9ycyYmKEEuc3R5bGl6ZT1GKSxOKEEsRSxBLmRlcHRoKX1mdW5jdGlvbiBGKEUsbSl7dmFyIEE9UC5zdHlsZXNbbV07cmV0dXJuIEE/Ilx4MWJbIitQLmNvbG9yc1tBXVswXSsibSIrRSsiXHgxYlsiK1AuY29sb3JzW0FdWzFdKyJtIjpFfWZ1bmN0aW9uIE8oRSxtKXtyZXR1'@;
put 'cm4gRX1mdW5jdGlvbiBOKEUsbSxBKXtpZihFLmN1c3RvbUluc3BlY3QmJm0mJnAobS5pbnNwZWN0KSYmbS5pbnNwZWN0IT09WC5pbnNwZWN0JiYoIW0uY29uc3RydWN0b3J8fG0uY29uc3RydWN0b3IucHJvdG90eXBlIT09bSkpe3ZhciBhZT1tLmluc3BlY3QoQSxFKTtyZXR1cm4gbGUoYWUp'@;
put 'fHwoYWU9TihFLGFlLEEpKSxhZX12YXIgdGU9ZnVuY3Rpb24gTChFLG0pe2lmKF9lKG0pKXJldHVybiBFLnN0eWxpemUoInVuZGVmaW5lZCIsInVuZGVmaW5lZCIpO2lmKGxlKG0pKXt2YXIgQT0iJyIrSlNPTi5zdHJpbmdpZnkobSkucmVwbGFjZSgvXiJ8IiQvZywiIikucmVwbGFjZSgvJy9n'@;
put 'LCJcXCciKS5yZXBsYWNlKC9cXCIvZywnIicpKyInIjtyZXR1cm4gRS5zdHlsaXplKEEsInN0cmluZyIpfXJldHVybiBpZShtKT9FLnN0eWxpemUoIiIrbSwibnVtYmVyIik6ZWUobSk/RS5zdHlsaXplKCIiK20sImJvb2xlYW4iKTpKKG0pP0Uuc3R5bGl6ZSgibnVsbCIsIm51bGwiKTp2b2lk'@;
put 'IDB9KEUsbSk7aWYodGUpcmV0dXJuIHRlO3ZhciBzZT1PYmplY3Qua2V5cyhtKSx3ZT1mdW5jdGlvbiB6KEUpe3ZhciBtPXt9O3JldHVybiBFLmZvckVhY2goZnVuY3Rpb24oQSxhZSl7bVtBXT0hMH0pLG19KHNlKTtpZihFLnNob3dIaWRkZW4mJihzZT1PYmplY3QuZ2V0T3duUHJvcGVydHlO'@;
put 'YW1lcyhtKSksVihtKSYmKHNlLmluZGV4T2YoIm1lc3NhZ2UiKT49MHx8c2UuaW5kZXhPZigiZGVzY3JpcHRpb24iKT49MCkpcmV0dXJuIEsobSk7aWYoMD09PXNlLmxlbmd0aCl7aWYocChtKSlyZXR1cm4gRS5zdHlsaXplKCJbRnVuY3Rpb24iKyhtLm5hbWU/IjogIittLm5hbWU6IiIpKyJd'@;
put 'Iiwic3BlY2lhbCIpO2lmKFRlKG0pKXJldHVybiBFLnN0eWxpemUoUmVnRXhwLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG0pLCJyZWdleHAiKTtpZihqZShtKSlyZXR1cm4gRS5zdHlsaXplKERhdGUucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobSksImRhdGUiKTtpZihWKG0pKXJldHVybiBL'@;
put 'KG0pfXZhciBYZSxKZT0iIixvdD0hMSx4ZT1bInsiLCJ9Il07cmV0dXJuIHEobSkmJihvdD0hMCx4ZT1bIlsiLCJdIl0pLHAobSkmJihKZT0iIFtGdW5jdGlvbiIrKG0ubmFtZT8iOiAiK20ubmFtZToiIikrIl0iKSxUZShtKSYmKEplPSIgIitSZWdFeHAucHJvdG90eXBlLnRvU3RyaW5nLmNh'@;
put 'bGwobSkpLGplKG0pJiYoSmU9IiAiK0RhdGUucHJvdG90eXBlLnRvVVRDU3RyaW5nLmNhbGwobSkpLFYobSkmJihKZT0iICIrSyhtKSksMCE9PXNlLmxlbmd0aHx8b3QmJjAhPW0ubGVuZ3RoP0E8MD9UZShtKT9FLnN0eWxpemUoUmVnRXhwLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG0pLCJy'@;
put 'ZWdleHAiKTpFLnN0eWxpemUoIltPYmplY3RdIiwic3BlY2lhbCIpOihFLnNlZW4ucHVzaChtKSxYZT1vdD9mdW5jdGlvbiBVKEUsbSxBLGFlLHRlKXtmb3IodmFyIHNlPVtdLHdlPTAsVWU9bS5sZW5ndGg7d2U8VWU7Kyt3ZSlqKG0sU3RyaW5nKHdlKSk/c2UucHVzaChXKEUsbSxBLGFlLFN0'@;
put 'cmluZyh3ZSksITApKTpzZS5wdXNoKCIiKTtyZXR1cm4gdGUuZm9yRWFjaChmdW5jdGlvbihKZSl7SmUubWF0Y2goL15cZCskLyl8fHNlLnB1c2goVyhFLG0sQSxhZSxKZSwhMCkpfSksc2V9KEUsbSxBLHdlLHNlKTpzZS5tYXAoZnVuY3Rpb24oemUpe3JldHVybiBXKEUsbSxBLHdlLHplLG90'@;
put 'KX0pLEUuc2Vlbi5wb3AoKSxmdW5jdGlvbiBZKEUsbSxBKXt2YXIgdGU9RS5yZWR1Y2UoZnVuY3Rpb24oc2Usd2Upe3JldHVybiB3ZS5pbmRleE9mKCJcbiIpLHNlK3dlLnJlcGxhY2UoL1x1MDAxYlxbXGRcZD9tL2csIiIpLmxlbmd0aCsxfSwwKTtyZXR1cm4gdGU+NjA/QVswXSsoIiI9PT1t'@;
put 'PyIiOm0rIlxuICIpKyIgIitFLmpvaW4oIixcbiAgIikrIiAiK0FbMV06QVswXSttKyIgIitFLmpvaW4oIiwgIikrIiAiK0FbMV19KFhlLEplLHhlKSk6eGVbMF0rSmUreGVbMV19ZnVuY3Rpb24gSyhFKXtyZXR1cm4iWyIrRXJyb3IucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoRSkrIl0ifWZ1'@;
put 'bmN0aW9uIFcoRSxtLEEsYWUsdGUsc2Upe3ZhciB3ZSxVZSxKZTtpZigoSmU9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihtLHRlKXx8e3ZhbHVlOm1bdGVdfSkuZ2V0P1VlPUUuc3R5bGl6ZShKZS5zZXQ/IltHZXR0ZXIvU2V0dGVyXSI6IltHZXR0ZXJdIiwic3BlY2lhbCIpOkpl'@;
put 'LnNldCYmKFVlPUUuc3R5bGl6ZSgiW1NldHRlcl0iLCJzcGVjaWFsIikpLGooYWUsdGUpfHwod2U9IlsiK3RlKyJdIiksVWV8fChFLnNlZW4uaW5kZXhPZihKZS52YWx1ZSk8MD8oVWU9SihBKT9OKEUsSmUudmFsdWUsbnVsbCk6TihFLEplLnZhbHVlLEEtMSkpLmluZGV4T2YoIlxuIik+LTEm'@;
put 'JihVZT1zZT9VZS5zcGxpdCgiXG4iKS5tYXAoZnVuY3Rpb24ob3Qpe3JldHVybiIgICIrb3R9KS5qb2luKCJcbiIpLnN1YnN0cigyKToiXG4iK1VlLnNwbGl0KCJcbiIpLm1hcChmdW5jdGlvbihvdCl7cmV0dXJuIiAgICIrb3R9KS5qb2luKCJcbiIpKTpVZT1FLnN0eWxpemUoIltDaXJjdWxh'@;
put 'cl0iLCJzcGVjaWFsIikpLF9lKHdlKSl7aWYoc2UmJnRlLm1hdGNoKC9eXGQrJC8pKXJldHVybiBVZTsod2U9SlNPTi5zdHJpbmdpZnkoIiIrdGUpKS5tYXRjaCgvXiIoW2EtekEtWl9dW2EtekEtWl8wLTldKikiJC8pPyh3ZT13ZS5zdWJzdHIoMSx3ZS5sZW5ndGgtMiksd2U9RS5zdHlsaXpl'@;
put 'KHdlLCJuYW1lIikpOih3ZT13ZS5yZXBsYWNlKC8nL2csIlxcJyIpLnJlcGxhY2UoL1xcIi9nLCciJykucmVwbGFjZSgvKF4ifCIkKS9nLCInIiksd2U9RS5zdHlsaXplKHdlLCJzdHJpbmciKSl9cmV0dXJuIHdlKyI6ICIrVWV9ZnVuY3Rpb24gcShFKXtyZXR1cm4gQXJyYXkuaXNBcnJheShF'@;
put 'KX1mdW5jdGlvbiBlZShFKXtyZXR1cm4iYm9vbGVhbiI9PXR5cGVvZiBFfWZ1bmN0aW9uIEooRSl7cmV0dXJuIG51bGw9PT1FfWZ1bmN0aW9uIGllKEUpe3JldHVybiJudW1iZXIiPT10eXBlb2YgRX1mdW5jdGlvbiBsZShFKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIEV9ZnVuY3Rpb24gX2Uo'@;
put 'RSl7cmV0dXJuIHZvaWQgMD09PUV9ZnVuY3Rpb24gVGUoRSl7cmV0dXJuIFNlKEUpJiYiW29iamVjdCBSZWdFeHBdIj09PXgoRSl9ZnVuY3Rpb24gU2UoRSl7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiBFJiZudWxsIT09RX1mdW5jdGlvbiBqZShFKXtyZXR1cm4gU2UoRSkmJiJbb2JqZWN0IERh'@;
put 'dGVdIj09PXgoRSl9ZnVuY3Rpb24gVihFKXtyZXR1cm4gU2UoRSkmJigiW29iamVjdCBFcnJvcl0iPT09eChFKXx8RSBpbnN0YW5jZW9mIEVycm9yKX1mdW5jdGlvbiBwKEUpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBFfWZ1bmN0aW9uIHgoRSl7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUu'@;
put 'dG9TdHJpbmcuY2FsbChFKX1mdW5jdGlvbiBDKEUpe3JldHVybiBFPDEwPyIwIitFLnRvU3RyaW5nKDEwKTpFLnRvU3RyaW5nKDEwKX1YLmRlYnVnbG9nPWZ1bmN0aW9uKEUpe2lmKF9lKHcpJiYodz1JLmVudi5OT0RFX0RFQlVHfHwiIiksRT1FLnRvVXBwZXJDYXNlKCksIUJbRV0paWYobmV3'@;
put 'IFJlZ0V4cCgiXFxiIitFKyJcXGIiLCJpIikudGVzdCh3KSl7dmFyIG09SS5waWQ7QltFXT1mdW5jdGlvbigpe3ZhciBBPVguZm9ybWF0LmFwcGx5KFgsYXJndW1lbnRzKTtfLmVycm9yKCIlcyAlZDogJXMiLEUsbSxBKX19ZWxzZSBCW0VdPWZ1bmN0aW9uKCl7fTtyZXR1cm4gQltFXX0sWC5p'@;
put 'bnNwZWN0PVAsUC5jb2xvcnM9e2JvbGQ6WzEsMjJdLGl0YWxpYzpbMywyM10sdW5kZXJsaW5lOls0LDI0XSxpbnZlcnNlOls3LDI3XSx3aGl0ZTpbMzcsMzldLGdyZXk6WzkwLDM5XSxibGFjazpbMzAsMzldLGJsdWU6WzM0LDM5XSxjeWFuOlszNiwzOV0sZ3JlZW46WzMyLDM5XSxtYWdlbnRh'@;
put 'OlszNSwzOV0scmVkOlszMSwzOV0seWVsbG93OlszMywzOV19LFAuc3R5bGVzPXtzcGVjaWFsOiJjeWFuIixudW1iZXI6InllbGxvdyIsYm9vbGVhbjoieWVsbG93Iix1bmRlZmluZWQ6ImdyZXkiLG51bGw6ImJvbGQiLHN0cmluZzoiZ3JlZW4iLGRhdGU6Im1hZ2VudGEiLHJlZ2V4cDoicmVk'@;
put 'In0sWC5pc0FycmF5PXEsWC5pc0Jvb2xlYW49ZWUsWC5pc051bGw9SixYLmlzTnVsbE9yVW5kZWZpbmVkPWZ1bmN0aW9uIG5lKEUpe3JldHVybiBudWxsPT1FfSxYLmlzTnVtYmVyPWllLFguaXNTdHJpbmc9bGUsWC5pc1N5bWJvbD1mdW5jdGlvbiBtZShFKXtyZXR1cm4ic3ltYm9sIj09dHlw'@;
put 'ZW9mIEV9LFguaXNVbmRlZmluZWQ9X2UsWC5pc1JlZ0V4cD1UZSxYLmlzT2JqZWN0PVNlLFguaXNEYXRlPWplLFguaXNFcnJvcj1WLFguaXNGdW5jdGlvbj1wLFguaXNQcmltaXRpdmU9ZnVuY3Rpb24gYihFKXtyZXR1cm4gbnVsbD09PUV8fCJib29sZWFuIj09dHlwZW9mIEV8fCJudW1iZXIi'@;
put 'PT10eXBlb2YgRXx8InN0cmluZyI9PXR5cGVvZiBFfHwic3ltYm9sIj09dHlwZW9mIEV8fHR5cGVvZiBFPiJ1In0sWC5pc0J1ZmZlcj15KDI5NzQpO3ZhciBUPVsiSmFuIiwiRmViIiwiTWFyIiwiQXByIiwiTWF5IiwiSnVuIiwiSnVsIiwiQXVnIiwiU2VwIiwiT2N0IiwiTm92IiwiRGVjIl07'@;
put 'ZnVuY3Rpb24gaihFLG0pe3JldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoRSxtKX1YLmxvZz1mdW5jdGlvbigpe18ubG9nKCIlcyAtICVzIixmdW5jdGlvbiBIKCl7dmFyIEU9bmV3IERhdGUsbT1bQyhFLmdldEhvdXJzKCkpLEMoRS5nZXRNaW51dGVzKCkpLEMo'@;
put 'RS5nZXRTZWNvbmRzKCkpXS5qb2luKCI6Iik7cmV0dXJuW0UuZ2V0RGF0ZSgpLFRbRS5nZXRNb250aCgpXSxtXS5qb2luKCIgIil9KCksWC5mb3JtYXQuYXBwbHkoWCxhcmd1bWVudHMpKX0sWC5pbmhlcml0cz15KDE3MjUpLFguX2V4dGVuZD1mdW5jdGlvbihFLG0pe2lmKCFtfHwhU2UobSkp'@;
put 'cmV0dXJuIEU7Zm9yKHZhciBBPU9iamVjdC5rZXlzKG0pLGFlPUEubGVuZ3RoO2FlLS07KUVbQVthZV1dPW1bQVthZV1dO3JldHVybiBFfX0sMjUyMDoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDQxNTUpLF89IndpbjMyIj09PUkucGxhdGZvcm0sZz15KDgwNTkpO2Z1bmN0aW9u'@;
put 'IEIoWSxxKXtmb3IodmFyIGVlPVtdLEo9MDtKPFkubGVuZ3RoO0orKyl7dmFyIG5lPVlbSl07IW5lfHwiLiI9PT1uZXx8KCIuLiI9PT1uZT9lZS5sZW5ndGgmJiIuLiIhPT1lZVtlZS5sZW5ndGgtMV0/ZWUucG9wKCk6cSYmZWUucHVzaCgiLi4iKTplZS5wdXNoKG5lKSl9cmV0dXJuIGVlfWZ1'@;
put 'bmN0aW9uIHcoWSl7Zm9yKHZhciBxPVkubGVuZ3RoLTEsZWU9MDtlZTw9cSYmIVlbZWVdO2VlKyspO2Zvcih2YXIgSj1xO0o+PTAmJiFZW0pdO0otLSk7cmV0dXJuIDA9PT1lZSYmSj09PXE/WTplZT5KP1tdOlkuc2xpY2UoZWUsSisxKX12YXIgUD0vXihbYS16QS1aXTp8W1xcXC9dezJ9W15c'@;
put 'XFwvXStbXFxcL10rW15cXFwvXSspPyhbXFxcL10pPyhbXHNcU10qPykkLyxGPS9eKFtcc1xTXSo/KSgoPzpcLnsxLDJ9fFteXFxcL10rP3wpKFwuW14uXC9cXF0qfCkpKD86W1xcXC9dKikkLyxPPXt9O2Z1bmN0aW9uIHooWSl7dmFyIHE9UC5leGVjKFkpLGVlPShxWzFdfHwiIikrKHFbMl18'@;
put 'fCIiKSxuZT1GLmV4ZWMocVszXXx8IiIpO3JldHVybltlZSxuZVsxXSxuZVsyXSxuZVszXV19ZnVuY3Rpb24gTihZKXt2YXIgcT1QLmV4ZWMoWSksZWU9cVsxXXx8IiIsSj0hIWVlJiYiOiIhPT1lZVsxXTtyZXR1cm57ZGV2aWNlOmVlLGlzVW5jOkosaXNBYnNvbHV0ZTpKfHwhIXFbMl0sdGFp'@;
put 'bDpxWzNdfX1mdW5jdGlvbiBMKFkpe3JldHVybiJcXFxcIitZLnJlcGxhY2UoL15bXFxcL10rLywiIikucmVwbGFjZSgvW1xcXC9dKy9nLCJcXCIpfU8ucmVzb2x2ZT1mdW5jdGlvbigpe2Zvcih2YXIgWT0iIixxPSIiLGVlPSExLEo9YXJndW1lbnRzLmxlbmd0aC0xO0o+PS0xO0otLSl7dmFy'@;
put 'IG5lO2lmKEo+PTA/bmU9YXJndW1lbnRzW0pdOlk/KCEobmU9SS5lbnZbIj0iK1ldKXx8bmUuc3Vic3RyKDAsMykudG9Mb3dlckNhc2UoKSE9PVkudG9Mb3dlckNhc2UoKSsiXFwiKSYmKG5lPVkrIlxcIik6bmU9SS5jd2QoKSwhZy5pc1N0cmluZyhuZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigi'@;
put 'QXJndW1lbnRzIHRvIHBhdGgucmVzb2x2ZSBtdXN0IGJlIHN0cmluZ3MiKTtpZihuZSl7dmFyIGllPU4obmUpLGxlPWllLmRldmljZSxtZT1pZS5pc1VuYyxfZT1pZS5pc0Fic29sdXRlLFRlPWllLnRhaWw7aWYoKCFsZXx8IVl8fGxlLnRvTG93ZXJDYXNlKCk9PT1ZLnRvTG93ZXJDYXNlKCkp'@;
put 'JiYoWXx8KFk9bGUpLGVlfHwocT1UZSsiXFwiK3EsZWU9X2UpLFkmJmVlKSlicmVha319cmV0dXJuIG1lJiYoWT1MKFkpKSxZKyhlZT8iXFwiOiIiKSsocT1CKHEuc3BsaXQoL1tcXFwvXSsvKSwhZWUpLmpvaW4oIlxcIikpfHwiLiJ9LE8ubm9ybWFsaXplPWZ1bmN0aW9uKFkpe3ZhciBxPU4o'@;
put 'WSksZWU9cS5kZXZpY2UsSj1xLmlzVW5jLG5lPXEuaXNBYnNvbHV0ZSxpZT1xLnRhaWwsbGU9L1tcXFwvXSQvLnRlc3QoaWUpO3JldHVybiEoaWU9QihpZS5zcGxpdCgvW1xcXC9dKy8pLCFuZSkuam9pbigiXFwiKSkmJiFuZSYmKGllPSIuIiksaWUmJmxlJiYoaWUrPSJcXCIpLEomJihlZT1M'@;
put 'KGVlKSksZWUrKG5lPyJcXCI6IiIpK2llfSxPLmlzQWJzb2x1dGU9ZnVuY3Rpb24oWSl7cmV0dXJuIE4oWSkuaXNBYnNvbHV0ZX0sTy5qb2luPWZ1bmN0aW9uKCl7Zm9yKHZhciBZPVtdLHE9MDtxPGFyZ3VtZW50cy5sZW5ndGg7cSsrKXt2YXIgZWU9YXJndW1lbnRzW3FdO2lmKCFnLmlzU3Ry'@;
put 'aW5nKGVlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudHMgdG8gcGF0aC5qb2luIG11c3QgYmUgc3RyaW5ncyIpO2VlJiZZLnB1c2goZWUpfXZhciBKPVkuam9pbigiXFwiKTtyZXR1cm4vXltcXFwvXXsyfVteXFxcL10vLnRlc3QoWVswXSl8fChKPUoucmVwbGFjZSgvXltcXFwvXXsy'@;
put 'LH0vLCJcXCIpKSxPLm5vcm1hbGl6ZShKKX0sTy5yZWxhdGl2ZT1mdW5jdGlvbihZLHEpe1k9Ty5yZXNvbHZlKFkpLHE9Ty5yZXNvbHZlKHEpO2Zvcih2YXIgZWU9WS50b0xvd2VyQ2FzZSgpLEo9cS50b0xvd2VyQ2FzZSgpLG5lPXcocS5zcGxpdCgiXFwiKSksaWU9dyhlZS5zcGxpdCgiXFwi'@;
put 'KSksbGU9dyhKLnNwbGl0KCJcXCIpKSxtZT1NYXRoLm1pbihpZS5sZW5ndGgsbGUubGVuZ3RoKSxfZT1tZSxUZT0wO1RlPG1lO1RlKyspaWYoaWVbVGVdIT09bGVbVGVdKXtfZT1UZTticmVha31pZigwPT1fZSlyZXR1cm4gcTt2YXIgU2U9W107Zm9yKFRlPV9lO1RlPGllLmxlbmd0aDtUZSsr'@;
put 'KVNlLnB1c2goIi4uIik7cmV0dXJuKFNlPVNlLmNvbmNhdChuZS5zbGljZShfZSkpKS5qb2luKCJcXCIpfSxPLl9tYWtlTG9uZz1mdW5jdGlvbihZKXtpZighZy5pc1N0cmluZyhZKSlyZXR1cm4gWTtpZighWSlyZXR1cm4iIjt2YXIgcT1PLnJlc29sdmUoWSk7cmV0dXJuL15bYS16QS1aXVw6'@;
put 'XFwvLnRlc3QocSk/IlxcXFw/XFwiK3E6L15cXFxcW14/Ll0vLnRlc3QocSk/IlxcXFw/XFxVTkNcXCIrcS5zdWJzdHJpbmcoMik6WX0sTy5kaXJuYW1lPWZ1bmN0aW9uKFkpe3ZhciBxPXooWSksZWU9cVswXSxKPXFbMV07cmV0dXJuIGVlfHxKPyhKJiYoSj1KLnN1YnN0cigwLEoubGVuZ3Ro'@;
put 'LTEpKSxlZStKKToiLiJ9LE8uYmFzZW5hbWU9ZnVuY3Rpb24oWSxxKXt2YXIgZWU9eihZKVsyXTtyZXR1cm4gcSYmZWUuc3Vic3RyKC0xKnEubGVuZ3RoKT09PXEmJihlZT1lZS5zdWJzdHIoMCxlZS5sZW5ndGgtcS5sZW5ndGgpKSxlZX0sTy5leHRuYW1lPWZ1bmN0aW9uKFkpe3JldHVybiB6'@;
put 'KFkpWzNdfSxPLmZvcm1hdD1mdW5jdGlvbihZKXtpZighZy5pc09iamVjdChZKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJQYXJhbWV0ZXIgJ3BhdGhPYmplY3QnIG11c3QgYmUgYW4gb2JqZWN0LCBub3QgIit0eXBlb2YgWSk7aWYoIWcuaXNTdHJpbmcoWS5yb290fHwiIikpdGhyb3cgbmV3IFR5'@;
put 'cGVFcnJvcigiJ3BhdGhPYmplY3Qucm9vdCcgbXVzdCBiZSBhIHN0cmluZyBvciB1bmRlZmluZWQsIG5vdCAiK3R5cGVvZiBZLnJvb3QpO3ZhciBlZT1ZLmRpcixKPVkuYmFzZXx8IiI7cmV0dXJuIGVlP2VlW2VlLmxlbmd0aC0xXT09PU8uc2VwP2VlK0o6ZWUrTy5zZXArSjpKfSxPLnBhcnNl'@;
put 'PWZ1bmN0aW9uKFkpe2lmKCFnLmlzU3RyaW5nKFkpKXRocm93IG5ldyBUeXBlRXJyb3IoIlBhcmFtZXRlciAncGF0aFN0cmluZycgbXVzdCBiZSBhIHN0cmluZywgbm90ICIrdHlwZW9mIFkpO3ZhciBxPXooWSk7aWYoIXF8fDQhPT1xLmxlbmd0aCl0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZh'@;
put 'bGlkIHBhdGggJyIrWSsiJyIpO3JldHVybntyb290OnFbMF0sZGlyOnFbMF0rcVsxXS5zbGljZSgwLC0xKSxiYXNlOnFbMl0sZXh0OnFbM10sbmFtZTpxWzJdLnNsaWNlKDAscVsyXS5sZW5ndGgtcVszXS5sZW5ndGgpfX0sTy5zZXA9IlxcIixPLmRlbGltaXRlcj0iOyI7dmFyIEs9L14oXC8/'@;
put 'fCkoW1xzXFNdKj8pKCg/OlwuezEsMn18W15cL10rP3wpKFwuW14uXC9dKnwpKSg/OltcL10qKSQvLFU9e307ZnVuY3Rpb24gVyhZKXtyZXR1cm4gSy5leGVjKFkpLnNsaWNlKDEpfVUucmVzb2x2ZT1mdW5jdGlvbigpe2Zvcih2YXIgWT0iIixxPSExLGVlPWFyZ3VtZW50cy5sZW5ndGgtMTtl'@;
put 'ZT49LTEmJiFxO2VlLS0pe3ZhciBKPWVlPj0wP2FyZ3VtZW50c1tlZV06SS5jd2QoKTtpZighZy5pc1N0cmluZyhKKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudHMgdG8gcGF0aC5yZXNvbHZlIG11c3QgYmUgc3RyaW5ncyIpO0omJihZPUorIi8iK1kscT0iLyI9PT1KWzBdKX1yZXR1'@;
put 'cm4ocT8iLyI6IiIpKyhZPUIoWS5zcGxpdCgiLyIpLCFxKS5qb2luKCIvIikpfHwiLiJ9LFUubm9ybWFsaXplPWZ1bmN0aW9uKFkpe3ZhciBxPVUuaXNBYnNvbHV0ZShZKSxlZT1ZJiYiLyI9PT1ZW1kubGVuZ3RoLTFdO3JldHVybiEoWT1CKFkuc3BsaXQoIi8iKSwhcSkuam9pbigiLyIpKSYm'@;
put 'IXEmJihZPSIuIiksWSYmZWUmJihZKz0iLyIpLChxPyIvIjoiIikrWX0sVS5pc0Fic29sdXRlPWZ1bmN0aW9uKFkpe3JldHVybiIvIj09PVkuY2hhckF0KDApfSxVLmpvaW49ZnVuY3Rpb24oKXtmb3IodmFyIFk9IiIscT0wO3E8YXJndW1lbnRzLmxlbmd0aDtxKyspe3ZhciBlZT1hcmd1bWVu'@;
put 'dHNbcV07aWYoIWcuaXNTdHJpbmcoZWUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50cyB0byBwYXRoLmpvaW4gbXVzdCBiZSBzdHJpbmdzIik7ZWUmJihZKz1ZPyIvIitlZTplZSl9cmV0dXJuIFUubm9ybWFsaXplKFkpfSxVLnJlbGF0aXZlPWZ1bmN0aW9uKFkscSl7WT1VLnJlc29s'@;
put 'dmUoWSkuc3Vic3RyKDEpLHE9VS5yZXNvbHZlKHEpLnN1YnN0cigxKTtmb3IodmFyIGVlPXcoWS5zcGxpdCgiLyIpKSxKPXcocS5zcGxpdCgiLyIpKSxuZT1NYXRoLm1pbihlZS5sZW5ndGgsSi5sZW5ndGgpLGllPW5lLGxlPTA7bGU8bmU7bGUrKylpZihlZVtsZV0hPT1KW2xlXSl7aWU9bGU7'@;
put 'YnJlYWt9dmFyIG1lPVtdO2ZvcihsZT1pZTtsZTxlZS5sZW5ndGg7bGUrKyltZS5wdXNoKCIuLiIpO3JldHVybihtZT1tZS5jb25jYXQoSi5zbGljZShpZSkpKS5qb2luKCIvIil9LFUuX21ha2VMb25nPWZ1bmN0aW9uKFkpe3JldHVybiBZfSxVLmRpcm5hbWU9ZnVuY3Rpb24oWSl7dmFyIHE9'@;
put 'VyhZKSxlZT1xWzBdLEo9cVsxXTtyZXR1cm4gZWV8fEo/KEomJihKPUouc3Vic3RyKDAsSi5sZW5ndGgtMSkpLGVlK0opOiIuIn0sVS5iYXNlbmFtZT1mdW5jdGlvbihZLHEpe3ZhciBlZT1XKFkpWzJdO3JldHVybiBxJiZlZS5zdWJzdHIoLTEqcS5sZW5ndGgpPT09cSYmKGVlPWVlLnN1YnN0'@;
put 'cigwLGVlLmxlbmd0aC1xLmxlbmd0aCkpLGVlfSxVLmV4dG5hbWU9ZnVuY3Rpb24oWSl7cmV0dXJuIFcoWSlbM119LFUuZm9ybWF0PWZ1bmN0aW9uKFkpe2lmKCFnLmlzT2JqZWN0KFkpKXRocm93IG5ldyBUeXBlRXJyb3IoIlBhcmFtZXRlciAncGF0aE9iamVjdCcgbXVzdCBiZSBhbiBvYmpl'@;
put 'Y3QsIG5vdCAiK3R5cGVvZiBZKTtpZighZy5pc1N0cmluZyhZLnJvb3R8fCIiKSl0aHJvdyBuZXcgVHlwZUVycm9yKCIncGF0aE9iamVjdC5yb290JyBtdXN0IGJlIGEgc3RyaW5nIG9yIHVuZGVmaW5lZCwgbm90ICIrdHlwZW9mIFkucm9vdCk7cmV0dXJuKFkuZGlyP1kuZGlyK1Uuc2VwOiIi'@;
put 'KSsoWS5iYXNlfHwiIil9LFUucGFyc2U9ZnVuY3Rpb24oWSl7aWYoIWcuaXNTdHJpbmcoWSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiUGFyYW1ldGVyICdwYXRoU3RyaW5nJyBtdXN0IGJlIGEgc3RyaW5nLCBub3QgIit0eXBlb2YgWSk7dmFyIHE9VyhZKTtpZighcXx8NCE9PXEubGVuZ3RoKXRo'@;
put 'cm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgcGF0aCAnIitZKyInIik7cmV0dXJuIHFbMV09cVsxXXx8IiIscVsyXT1xWzJdfHwiIixxWzNdPXFbM118fCIiLHtyb290OnFbMF0sZGlyOnFbMF0rcVsxXS5zbGljZSgwLC0xKSxiYXNlOnFbMl0sZXh0OnFbM10sbmFtZTpxWzJdLnNsaWNlKDAs'@;
put 'cVsyXS5sZW5ndGgtcVszXS5sZW5ndGgpfX0sVS5zZXA9Ii8iLFUuZGVsaW1pdGVyPSI6Iix1ZS5leHBvcnRzPV8/TzpVLHVlLmV4cG9ydHMucG9zaXg9VSx1ZS5leHBvcnRzLndpbjMyPU99LDU2MzI6KHVlLFgseSk9PntYLnBia2RmMj15KDg2MzgpLFgucGJrZGYyU3luYz15KDEyNTcpfSw4'@;
put 'NjM4Oih1ZSxYLHkpPT57dmFyIFAsTCxJPXkoOTUwOSkuQnVmZmVyLF89eSg3MzU3KSxnPXkoMjM2OCksQj15KDEyNTcpLHc9eSg3Nzc3KSxGPXkuZy5jcnlwdG8mJnkuZy5jcnlwdG8uc3VidGxlLE89e3NoYToiU0hBLTEiLCJzaGEtMSI6IlNIQS0xIixzaGExOiJTSEEtMSIsc2hhMjU2OiJT'@;
put 'SEEtMjU2Iiwic2hhLTI1NiI6IlNIQS0yNTYiLHNoYTM4NDoiU0hBLTM4NCIsInNoYS0zODQiOiJTSEEtMzg0Iiwic2hhLTUxMiI6IlNIQS01MTIiLHNoYTUxMjoiU0hBLTUxMiJ9LHo9W107ZnVuY3Rpb24gSygpe3JldHVybiBMfHwoTD15LmcucHJvY2VzcyYmeS5nLnByb2Nlc3MubmV4dFRp'@;
put 'Y2s/eS5nLnByb2Nlc3MubmV4dFRpY2s6eS5nLnF1ZXVlTWljcm90YXNrP3kuZy5xdWV1ZU1pY3JvdGFzazp5Lmcuc2V0SW1tZWRpYXRlP3kuZy5zZXRJbW1lZGlhdGU6eS5nLnNldFRpbWVvdXQpfWZ1bmN0aW9uIFUoWSxxLGVlLEosbmUpe3JldHVybiBGLmltcG9ydEtleSgicmF3IixZLHtu'@;
put 'YW1lOiJQQktERjIifSwhMSxbImRlcml2ZUJpdHMiXSkudGhlbihmdW5jdGlvbihpZSl7cmV0dXJuIEYuZGVyaXZlQml0cyh7bmFtZToiUEJLREYyIixzYWx0OnEsaXRlcmF0aW9uczplZSxoYXNoOntuYW1lOm5lfX0saWUsSjw8Myl9KS50aGVuKGZ1bmN0aW9uKGllKXtyZXR1cm4gSS5mcm9t'@;
put 'KGllKX0pfXVlLmV4cG9ydHM9ZnVuY3Rpb24oWSxxLGVlLEosbmUsaWUpeyJmdW5jdGlvbiI9PXR5cGVvZiBuZSYmKGllPW5lLG5lPXZvaWQgMCk7dmFyIGxlPU9bKG5lPW5lfHwic2hhMSIpLnRvTG93ZXJDYXNlKCldO2lmKGxlJiYiZnVuY3Rpb24iPT10eXBlb2YgeS5nLlByb21pc2Upe2lm'@;
put 'KF8oZWUsSiksWT13KFksZywiUGFzc3dvcmQiKSxxPXcocSxnLCJTYWx0IiksImZ1bmN0aW9uIiE9dHlwZW9mIGllKXRocm93IG5ldyBFcnJvcigiTm8gY2FsbGJhY2sgcHJvdmlkZWQgdG8gcGJrZGYyIik7IWZ1bmN0aW9uIFcoWSxxKXtZLnRoZW4oZnVuY3Rpb24oZWUpe0soKShmdW5jdGlv'@;
put 'bigpe3EobnVsbCxlZSl9KX0sZnVuY3Rpb24oZWUpe0soKShmdW5jdGlvbigpe3EoZWUpfSl9KX0oZnVuY3Rpb24gTihZKXtpZih5LmcucHJvY2VzcyYmIXkuZy5wcm9jZXNzLmJyb3dzZXJ8fCFGfHwhRi5pbXBvcnRLZXl8fCFGLmRlcml2ZUJpdHMpcmV0dXJuIFByb21pc2UucmVzb2x2ZSgh'@;
put 'MSk7aWYodm9pZCAwIT09eltZXSlyZXR1cm4geltZXTt2YXIgcT1VKFA9UHx8SS5hbGxvYyg4KSxQLDEwLDEyOCxZKS50aGVuKGZ1bmN0aW9uKCl7cmV0dXJuITB9KS5jYXRjaChmdW5jdGlvbigpe3JldHVybiExfSk7cmV0dXJuIHpbWV09cSxxfShsZSkudGhlbihmdW5jdGlvbihtZSl7cmV0'@;
put 'dXJuIG1lP1UoWSxxLGVlLEosbGUpOkIoWSxxLGVlLEosbmUpfSksaWUpfWVsc2UgSygpKGZ1bmN0aW9uKCl7dmFyIG1lO3RyeXttZT1CKFkscSxlZSxKLG5lKX1jYXRjaChfZSl7cmV0dXJuIGllKF9lKX1pZShudWxsLG1lKX0pfX0sMjM2ODoodWUsWCx5KT0+e3ZhciBfLEk9eSg0MTU1KTtf'@;
put 'PXkuZy5wcm9jZXNzJiZ5LmcucHJvY2Vzcy5icm93c2VyPyJ1dGYtOCI6eS5nLnByb2Nlc3MmJnkuZy5wcm9jZXNzLnZlcnNpb24/cGFyc2VJbnQoSS52ZXJzaW9uLnNwbGl0KCIuIilbMF0uc2xpY2UoMSksMTApPj02PyJ1dGYtOCI6ImJpbmFyeSI6InV0Zi04Iix1ZS5leHBvcnRzPV99LDcz'@;
put 'NTc6dWU9Pnt2YXIgWD1NYXRoLnBvdygyLDMwKS0xO3VlLmV4cG9ydHM9ZnVuY3Rpb24oeSxJKXtpZigibnVtYmVyIiE9dHlwZW9mIHkpdGhyb3cgbmV3IFR5cGVFcnJvcigiSXRlcmF0aW9ucyBub3QgYSBudW1iZXIiKTtpZih5PDApdGhyb3cgbmV3IFR5cGVFcnJvcigiQmFkIGl0ZXJhdGlv'@;
put 'bnMiKTtpZigibnVtYmVyIiE9dHlwZW9mIEkpdGhyb3cgbmV3IFR5cGVFcnJvcigiS2V5IGxlbmd0aCBub3QgYSBudW1iZXIiKTtpZihJPDB8fEk+WHx8SSE9SSl0aHJvdyBuZXcgVHlwZUVycm9yKCJCYWQga2V5IGxlbmd0aCIpfX0sMTI1NzoodWUsWCx5KT0+e3ZhciBJPXkoODAyOCksXz15'@;
put 'KDk3ODUpLGc9eSg5MDcyKSxCPXkoOTUwOSkuQnVmZmVyLHc9eSg3MzU3KSxQPXkoMjM2OCksRj15KDc3NzcpLE89Qi5hbGxvYygxMjgpLHo9e21kNToxNixzaGExOjIwLHNoYTIyNDoyOCxzaGEyNTY6MzIsc2hhMzg0OjQ4LHNoYTUxMjo2NCxybWQxNjA6MjAscmlwZW1kMTYwOjIwfTtmdW5j'@;
put 'dGlvbiBOKFUsVyxZKXt2YXIgcT1mdW5jdGlvbiBMKFUpe3JldHVybiJybWQxNjAiPT09VXx8InJpcGVtZDE2MCI9PT1VP2Z1bmN0aW9uIFkocSl7cmV0dXJuKG5ldyBfKS51cGRhdGUocSkuZGlnZXN0KCl9OiJtZDUiPT09VT9JOmZ1bmN0aW9uIFcocSl7cmV0dXJuIGcoVSkudXBkYXRlKHEp'@;
put 'LmRpZ2VzdCgpfX0oVSksZWU9InNoYTUxMiI9PT1VfHwic2hhMzg0Ij09PVU/MTI4OjY0O1cubGVuZ3RoPmVlP1c9cShXKTpXLmxlbmd0aDxlZSYmKFc9Qi5jb25jYXQoW1csT10sZWUpKTtmb3IodmFyIEo9Qi5hbGxvY1Vuc2FmZShlZSt6W1VdKSxuZT1CLmFsbG9jVW5zYWZlKGVlK3pbVV0p'@;
put 'LGllPTA7aWU8ZWU7aWUrKylKW2llXT01NF5XW2llXSxuZVtpZV09OTJeV1tpZV07dmFyIGxlPUIuYWxsb2NVbnNhZmUoZWUrWSs0KTtKLmNvcHkobGUsMCwwLGVlKSx0aGlzLmlwYWQxPWxlLHRoaXMuaXBhZDI9Six0aGlzLm9wYWQ9bmUsdGhpcy5hbGc9VSx0aGlzLmJsb2Nrc2l6ZT1lZSx0'@;
put 'aGlzLmhhc2g9cSx0aGlzLnNpemU9eltVXX1OLnByb3RvdHlwZS5ydW49ZnVuY3Rpb24oVSxXKXtyZXR1cm4gVS5jb3B5KFcsdGhpcy5ibG9ja3NpemUpLHRoaXMuaGFzaChXKS5jb3B5KHRoaXMub3BhZCx0aGlzLmJsb2Nrc2l6ZSksdGhpcy5oYXNoKHRoaXMub3BhZCl9LHVlLmV4cG9ydHM9'@;
put 'ZnVuY3Rpb24gSyhVLFcsWSxxLGVlKXt3KFkscSk7dmFyIEo9bmV3IE4oZWU9ZWV8fCJzaGExIixVPUYoVSxQLCJQYXNzd29yZCIpLChXPUYoVyxQLCJTYWx0IikpLmxlbmd0aCksbmU9Qi5hbGxvY1Vuc2FmZShxKSxpZT1CLmFsbG9jVW5zYWZlKFcubGVuZ3RoKzQpO1cuY29weShpZSwwLDAs'@;
put 'Vy5sZW5ndGgpO2Zvcih2YXIgbGU9MCxtZT16W2VlXSxfZT1NYXRoLmNlaWwocS9tZSksVGU9MTtUZTw9X2U7VGUrKyl7aWUud3JpdGVVSW50MzJCRShUZSxXLmxlbmd0aCk7Zm9yKHZhciBTZT1KLnJ1bihpZSxKLmlwYWQxKSxqZT1TZSxWPTE7VjxZO1YrKyl7amU9Si5ydW4oamUsSi5pcGFk'@;
put 'Mik7Zm9yKHZhciBwPTA7cDxtZTtwKyspU2VbcF1ePWplW3BdfVNlLmNvcHkobmUsbGUpLGxlKz1tZX1yZXR1cm4gbmV9fSw3Nzc3Oih1ZSxYLHkpPT57dmFyIEk9eSg5NTA5KS5CdWZmZXI7dWUuZXhwb3J0cz1mdW5jdGlvbihfLGcsQil7aWYoSS5pc0J1ZmZlcihfKSlyZXR1cm4gXztpZigi'@;
put 'c3RyaW5nIj09dHlwZW9mIF8pcmV0dXJuIEkuZnJvbShfLGcpO2lmKEFycmF5QnVmZmVyLmlzVmlldyhfKSlyZXR1cm4gSS5mcm9tKF8uYnVmZmVyKTt0aHJvdyBuZXcgVHlwZUVycm9yKEIrIiBtdXN0IGJlIGEgc3RyaW5nLCBhIEJ1ZmZlciwgYSB0eXBlZCBhcnJheSBvciBhIERhdGFWaWV3'@;
put 'Iil9fSw5OTA4OnVlPT57InVzZSBzdHJpY3QiO3VlLmV4cG9ydHM9WyJGbG9hdDE2QXJyYXkiLCJGbG9hdDMyQXJyYXkiLCJGbG9hdDY0QXJyYXkiLCJJbnQ4QXJyYXkiLCJJbnQxNkFycmF5IiwiSW50MzJBcnJheSIsIlVpbnQ4QXJyYXkiLCJVaW50OENsYW1wZWRBcnJheSIsIlVpbnQxNkFy'@;
put 'cmF5IiwiVWludDMyQXJyYXkiLCJCaWdJbnQ2NEFycmF5IiwiQmlnVWludDY0QXJyYXkiXX0sODIxMjoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDQxNTUpO3VlLmV4cG9ydHM9dHlwZW9mIEk+InUifHwhSS52ZXJzaW9ufHwwPT09SS52ZXJzaW9uLmluZGV4T2YoInYwLiIpfHww'@;
put 'PT09SS52ZXJzaW9uLmluZGV4T2YoInYxLiIpJiYwIT09SS52ZXJzaW9uLmluZGV4T2YoInYxLjguIik/e25leHRUaWNrOmZ1bmN0aW9uIF8oZyxCLHcsUCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGcpdGhyb3cgbmV3IFR5cGVFcnJvcignImNhbGxiYWNrIiBhcmd1bWVudCBtdXN0IGJlIGEg'@;
put 'ZnVuY3Rpb24nKTt2YXIgTyx6LEY9YXJndW1lbnRzLmxlbmd0aDtzd2l0Y2goRil7Y2FzZSAwOmNhc2UgMTpyZXR1cm4gSS5uZXh0VGljayhnKTtjYXNlIDI6cmV0dXJuIEkubmV4dFRpY2soZnVuY3Rpb24oKXtnLmNhbGwobnVsbCxCKX0pO2Nhc2UgMzpyZXR1cm4gSS5uZXh0VGljayhmdW5j'@;
put 'dGlvbigpe2cuY2FsbChudWxsLEIsdyl9KTtjYXNlIDQ6cmV0dXJuIEkubmV4dFRpY2soZnVuY3Rpb24oKXtnLmNhbGwobnVsbCxCLHcsUCl9KTtkZWZhdWx0OmZvcihPPW5ldyBBcnJheShGLTEpLHo9MDt6PE8ubGVuZ3RoOylPW3orK109YXJndW1lbnRzW3pdO3JldHVybiBJLm5leHRUaWNr'@;
put 'KGZ1bmN0aW9uKCl7Zy5hcHBseShudWxsLE8pfSl9fX06SX0sNDE1NTp1ZT0+e3ZhciB5LEksWD11ZS5leHBvcnRzPXt9O2Z1bmN0aW9uIF8oKXt0aHJvdyBuZXcgRXJyb3IoInNldFRpbWVvdXQgaGFzIG5vdCBiZWVuIGRlZmluZWQiKX1mdW5jdGlvbiBnKCl7dGhyb3cgbmV3IEVycm9yKCJj'@;
put 'bGVhclRpbWVvdXQgaGFzIG5vdCBiZWVuIGRlZmluZWQiKX1mdW5jdGlvbiBCKFcpe2lmKHk9PT1zZXRUaW1lb3V0KXJldHVybiBzZXRUaW1lb3V0KFcsMCk7aWYoKHk9PT1ffHwheSkmJnNldFRpbWVvdXQpcmV0dXJuIHk9c2V0VGltZW91dCxzZXRUaW1lb3V0KFcsMCk7dHJ5e3JldHVybiB5'@;
put 'KFcsMCl9Y2F0Y2h7dHJ5e3JldHVybiB5LmNhbGwobnVsbCxXLDApfWNhdGNoe3JldHVybiB5LmNhbGwodGhpcyxXLDApfX19IWZ1bmN0aW9uKCl7dHJ5e3k9ImZ1bmN0aW9uIj09dHlwZW9mIHNldFRpbWVvdXQ/c2V0VGltZW91dDpffWNhdGNoe3k9X310cnl7ST0iZnVuY3Rpb24iPT10eXBl'@;
put 'b2YgY2xlYXJUaW1lb3V0P2NsZWFyVGltZW91dDpnfWNhdGNoe0k9Z319KCk7dmFyIE8sUD1bXSxGPSExLHo9LTE7ZnVuY3Rpb24gTigpeyFGfHwhT3x8KEY9ITEsTy5sZW5ndGg/UD1PLmNvbmNhdChQKTp6PS0xLFAubGVuZ3RoJiZMKCkpfWZ1bmN0aW9uIEwoKXtpZighRil7dmFyIFc9QihO'@;
put 'KTtGPSEwO2Zvcih2YXIgWT1QLmxlbmd0aDtZOyl7Zm9yKE89UCxQPVtdOysrejxZOylPJiZPW3pdLnJ1bigpO3o9LTEsWT1QLmxlbmd0aH1PPW51bGwsRj0hMSxmdW5jdGlvbiB3KFcpe2lmKEk9PT1jbGVhclRpbWVvdXQpcmV0dXJuIGNsZWFyVGltZW91dChXKTtpZigoST09PWd8fCFJKSYm'@;
put 'Y2xlYXJUaW1lb3V0KXJldHVybiBJPWNsZWFyVGltZW91dCxjbGVhclRpbWVvdXQoVyk7dHJ5e3JldHVybiBJKFcpfWNhdGNoe3RyeXtyZXR1cm4gSS5jYWxsKG51bGwsVyl9Y2F0Y2h7cmV0dXJuIEkuY2FsbCh0aGlzLFcpfX19KFcpfX1mdW5jdGlvbiBLKFcsWSl7dGhpcy5mdW49Vyx0aGlz'@;
put 'LmFycmF5PVl9ZnVuY3Rpb24gVSgpe31YLm5leHRUaWNrPWZ1bmN0aW9uKFcpe3ZhciBZPW5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoLTEpO2lmKGFyZ3VtZW50cy5sZW5ndGg+MSlmb3IodmFyIHE9MTtxPGFyZ3VtZW50cy5sZW5ndGg7cSsrKVlbcS0xXT1hcmd1bWVudHNbcV07UC5wdXNo'@;
put 'KG5ldyBLKFcsWSkpLDE9PT1QLmxlbmd0aCYmIUYmJkIoTCl9LEsucHJvdG90eXBlLnJ1bj1mdW5jdGlvbigpe3RoaXMuZnVuLmFwcGx5KG51bGwsdGhpcy5hcnJheSl9LFgudGl0bGU9ImJyb3dzZXIiLFguYnJvd3Nlcj0hMCxYLmVudj17fSxYLmFyZ3Y9W10sWC52ZXJzaW9uPSIiLFgudmVy'@;
put 'c2lvbnM9e30sWC5vbj1VLFguYWRkTGlzdGVuZXI9VSxYLm9uY2U9VSxYLm9mZj1VLFgucmVtb3ZlTGlzdGVuZXI9VSxYLnJlbW92ZUFsbExpc3RlbmVycz1VLFguZW1pdD1VLFgucHJlcGVuZExpc3RlbmVyPVUsWC5wcmVwZW5kT25jZUxpc3RlbmVyPVUsWC5saXN0ZW5lcnM9ZnVuY3Rpb24o'@;
put 'Vyl7cmV0dXJuW119LFguYmluZGluZz1mdW5jdGlvbihXKXt0aHJvdyBuZXcgRXJyb3IoInByb2Nlc3MuYmluZGluZyBpcyBub3Qgc3VwcG9ydGVkIil9LFguY3dkPWZ1bmN0aW9uKCl7cmV0dXJuIi8ifSxYLmNoZGlyPWZ1bmN0aW9uKFcpe3Rocm93IG5ldyBFcnJvcigicHJvY2Vzcy5jaGRp'@;
put 'ciBpcyBub3Qgc3VwcG9ydGVkIil9LFgudW1hc2s9ZnVuY3Rpb24oKXtyZXR1cm4gMH19LDc5MDA6KHVlLFgseSk9PntYLnB1YmxpY0VuY3J5cHQ9eSg2NTU5KSxYLnByaXZhdGVEZWNyeXB0PXkoNjEzOCksWC5wcml2YXRlRW5jcnlwdD1mdW5jdGlvbihfLGcpe3JldHVybiBYLnB1YmxpY0Vu'@;
put 'Y3J5cHQoXyxnLCEwKX0sWC5wdWJsaWNEZWNyeXB0PWZ1bmN0aW9uKF8sZyl7cmV0dXJuIFgucHJpdmF0ZURlY3J5cHQoXyxnLCEwKX19LDkxOTk6KHVlLFgseSk9Pnt2YXIgST15KDM0ODIpLF89eSg5NTA5KS5CdWZmZXI7ZnVuY3Rpb24gZyhCKXt2YXIgdz1fLmFsbG9jVW5zYWZlKDQpO3Jl'@;
put 'dHVybiB3LndyaXRlVUludDMyQkUoQiwwKSx3fXVlLmV4cG9ydHM9ZnVuY3Rpb24oQix3KXtmb3IodmFyIE8sUD1fLmFsbG9jKDApLEY9MDtQLmxlbmd0aDx3OylPPWcoRisrKSxQPV8uY29uY2F0KFtQLEkoInNoYTEiKS51cGRhdGUoQikudXBkYXRlKE8pLmRpZ2VzdCgpXSk7cmV0dXJuIFAu'@;
put 'c2xpY2UoMCx3KX19LDIxNDQ6ZnVuY3Rpb24odWUsWCx5KXshZnVuY3Rpb24oSSxfKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gZyhWLHApe2lmKCFWKXRocm93IG5ldyBFcnJvcihwfHwiQXNzZXJ0aW9uIGZhaWxlZCIpfWZ1bmN0aW9uIEIoVixwKXtWLnN1cGVyXz1wO3ZhciBiPWZ1bmN0aW9u'@;
put 'KCl7fTtiLnByb3RvdHlwZT1wLnByb3RvdHlwZSxWLnByb3RvdHlwZT1uZXcgYixWLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1WfWZ1bmN0aW9uIHcoVixwLGIpe2lmKHcuaXNCTihWKSlyZXR1cm4gVjt0aGlzLm5lZ2F0aXZlPTAsdGhpcy53b3Jkcz1udWxsLHRoaXMubGVuZ3RoPTAsdGhpcy5y'@;
put 'ZWQ9bnVsbCxudWxsIT09ViYmKCgibGUiPT09cHx8ImJlIj09PXApJiYoYj1wLHA9MTApLHRoaXMuX2luaXQoVnx8MCxwfHwxMCxifHwiYmUiKSl9dmFyIFA7Im9iamVjdCI9PXR5cGVvZiBJP0kuZXhwb3J0cz13Ol8uQk49dyx3LkJOPXcsdy53b3JkU2l6ZT0yNjt0cnl7UD10eXBlb2Ygd2lu'@;
put 'ZG93PCJ1IiYmdHlwZW9mIHdpbmRvdy5CdWZmZXI8InUiP3dpbmRvdy5CdWZmZXI6eSg3MTA4KS5CdWZmZXJ9Y2F0Y2h7fWZ1bmN0aW9uIEYoVixwKXt2YXIgYj1WLmNoYXJDb2RlQXQocCk7cmV0dXJuIGI+PTY1JiZiPD03MD9iLTU1OmI+PTk3JiZiPD0xMDI/Yi04NzpiLTQ4JjE1fWZ1bmN0'@;
put 'aW9uIE8oVixwLGIpe3ZhciB4PUYoVixiKTtyZXR1cm4gYi0xPj1wJiYoeHw9RihWLGItMSk8PDQpLHh9ZnVuY3Rpb24geihWLHAsYix4KXtmb3IodmFyIEM9MCxUPU1hdGgubWluKFYubGVuZ3RoLGIpLEg9cDtIPFQ7SCsrKXt2YXIgaj1WLmNoYXJDb2RlQXQoSCktNDg7Qyo9eCxDKz1qPj00'@;
put 'OT9qLTQ5KzEwOmo+PTE3P2otMTcrMTA6an1yZXR1cm4gQ313LmlzQk49ZnVuY3Rpb24ocCl7cmV0dXJuIHAgaW5zdGFuY2VvZiB3fHxudWxsIT09cCYmIm9iamVjdCI9PXR5cGVvZiBwJiZwLmNvbnN0cnVjdG9yLndvcmRTaXplPT09dy53b3JkU2l6ZSYmQXJyYXkuaXNBcnJheShwLndvcmRz'@;
put 'KX0sdy5tYXg9ZnVuY3Rpb24ocCxiKXtyZXR1cm4gcC5jbXAoYik+MD9wOmJ9LHcubWluPWZ1bmN0aW9uKHAsYil7cmV0dXJuIHAuY21wKGIpPDA/cDpifSx3LnByb3RvdHlwZS5faW5pdD1mdW5jdGlvbihwLGIseCl7aWYoIm51bWJlciI9PXR5cGVvZiBwKXJldHVybiB0aGlzLl9pbml0TnVt'@;
put 'YmVyKHAsYix4KTtpZigib2JqZWN0Ij09dHlwZW9mIHApcmV0dXJuIHRoaXMuX2luaXRBcnJheShwLGIseCk7ImhleCI9PT1iJiYoYj0xNiksZyhiPT09KDB8YikmJmI+PTImJmI8PTM2KTt2YXIgQz0wOyItIj09PShwPXAudG9TdHJpbmcoKS5yZXBsYWNlKC9ccysvZywiIikpWzBdJiYoQysr'@;
put 'LHRoaXMubmVnYXRpdmU9MSksQzxwLmxlbmd0aCYmKDE2PT09Yj90aGlzLl9wYXJzZUhleChwLEMseCk6KHRoaXMuX3BhcnNlQmFzZShwLGIsQyksImxlIj09PXgmJnRoaXMuX2luaXRBcnJheSh0aGlzLnRvQXJyYXkoKSxiLHgpKSl9LHcucHJvdG90eXBlLl9pbml0TnVtYmVyPWZ1bmN0aW9u'@;
put 'KHAsYix4KXtwPDAmJih0aGlzLm5lZ2F0aXZlPTEscD0tcCkscDw2NzEwODg2ND8odGhpcy53b3Jkcz1bNjcxMDg4NjMmcF0sdGhpcy5sZW5ndGg9MSk6cDw0NTAzNTk5NjI3MzcwNDk2Pyh0aGlzLndvcmRzPVs2NzEwODg2MyZwLHAvNjcxMDg4NjQmNjcxMDg4NjNdLHRoaXMubGVuZ3RoPTIp'@;
put 'OihnKHA8OTAwNzE5OTI1NDc0MDk5MiksdGhpcy53b3Jkcz1bNjcxMDg4NjMmcCxwLzY3MTA4ODY0JjY3MTA4ODYzLDFdLHRoaXMubGVuZ3RoPTMpLCJsZSI9PT14JiZ0aGlzLl9pbml0QXJyYXkodGhpcy50b0FycmF5KCksYix4KX0sdy5wcm90b3R5cGUuX2luaXRBcnJheT1mdW5jdGlvbihw'@;
put 'LGIseCl7aWYoZygibnVtYmVyIj09dHlwZW9mIHAubGVuZ3RoKSxwLmxlbmd0aDw9MClyZXR1cm4gdGhpcy53b3Jkcz1bMF0sdGhpcy5sZW5ndGg9MSx0aGlzO3RoaXMubGVuZ3RoPU1hdGguY2VpbChwLmxlbmd0aC8zKSx0aGlzLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZh'@;
put 'ciBDPTA7Qzx0aGlzLmxlbmd0aDtDKyspdGhpcy53b3Jkc1tDXT0wO3ZhciBULEgsaj0wO2lmKCJiZSI9PT14KWZvcihDPXAubGVuZ3RoLTEsVD0wO0M+PTA7Qy09Myl0aGlzLndvcmRzW1RdfD0oSD1wW0NdfHBbQy0xXTw8OHxwW0MtMl08PDE2KTw8aiY2NzEwODg2Myx0aGlzLndvcmRzW1Qr'@;
put 'MV09SD4+PjI2LWomNjcxMDg4NjMsKGorPTI0KT49MjYmJihqLT0yNixUKyspO2Vsc2UgaWYoImxlIj09PXgpZm9yKEM9MCxUPTA7QzxwLmxlbmd0aDtDKz0zKXRoaXMud29yZHNbVF18PShIPXBbQ118cFtDKzFdPDw4fHBbQysyXTw8MTYpPDxqJjY3MTA4ODYzLHRoaXMud29yZHNbVCsxXT1I'@;
put 'Pj4+MjYtaiY2NzEwODg2Mywoais9MjQpPj0yNiYmKGotPTI2LFQrKyk7cmV0dXJuIHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuX3BhcnNlSGV4PWZ1bmN0aW9uKHAsYix4KXt0aGlzLmxlbmd0aD1NYXRoLmNlaWwoKHAubGVuZ3RoLWIpLzYpLHRoaXMud29yZHM9bmV3IEFycmF5KHRoaXMu'@;
put 'bGVuZ3RoKTtmb3IodmFyIEM9MDtDPHRoaXMubGVuZ3RoO0MrKyl0aGlzLndvcmRzW0NdPTA7dmFyIGosVD0wLEg9MDtpZigiYmUiPT09eClmb3IoQz1wLmxlbmd0aC0xO0M+PWI7Qy09MilqPU8ocCxiLEMpPDxULHRoaXMud29yZHNbSF18PTY3MTA4ODYzJmosVD49MTg/KFQtPTE4LHRoaXMu'@;
put 'd29yZHNbSCs9MV18PWo+Pj4yNik6VCs9ODtlbHNlIGZvcihDPShwLmxlbmd0aC1iKSUyPT0wP2IrMTpiO0M8cC5sZW5ndGg7Qys9MilqPU8ocCxiLEMpPDxULHRoaXMud29yZHNbSF18PTY3MTA4ODYzJmosVD49MTg/KFQtPTE4LHRoaXMud29yZHNbSCs9MV18PWo+Pj4yNik6VCs9ODt0aGlz'@;
put 'LnN0cmlwKCl9LHcucHJvdG90eXBlLl9wYXJzZUJhc2U9ZnVuY3Rpb24ocCxiLHgpe3RoaXMud29yZHM9WzBdLHRoaXMubGVuZ3RoPTE7Zm9yKHZhciBDPTAsVD0xO1Q8PTY3MTA4ODYzO1QqPWIpQysrO0MtLSxUPVQvYnwwO2Zvcih2YXIgSD1wLmxlbmd0aC14LGo9SCVDLEU9TWF0aC5taW4o'@;
put 'SCxILWopK3gsbT0wLEE9eDtBPEU7QSs9QyltPXoocCxBLEErQyxiKSx0aGlzLmltdWxuKFQpLHRoaXMud29yZHNbMF0rbTw2NzEwODg2ND90aGlzLndvcmRzWzBdKz1tOnRoaXMuX2lhZGRuKG0pO2lmKDAhPT1qKXt2YXIgYWU9MTtmb3IobT16KHAsQSxwLmxlbmd0aCxiKSxBPTA7QTxqO0Er'@;
put 'KylhZSo9Yjt0aGlzLmltdWxuKGFlKSx0aGlzLndvcmRzWzBdK208NjcxMDg4NjQ/dGhpcy53b3Jkc1swXSs9bTp0aGlzLl9pYWRkbihtKX10aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24ocCl7cC53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgYj0w'@;
put 'O2I8dGhpcy5sZW5ndGg7YisrKXAud29yZHNbYl09dGhpcy53b3Jkc1tiXTtwLmxlbmd0aD10aGlzLmxlbmd0aCxwLm5lZ2F0aXZlPXRoaXMubmVnYXRpdmUscC5yZWQ9dGhpcy5yZWR9LHcucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKCl7dmFyIHA9bmV3IHcobnVsbCk7cmV0dXJuIHRoaXMu'@;
put 'Y29weShwKSxwfSx3LnByb3RvdHlwZS5fZXhwYW5kPWZ1bmN0aW9uKHApe2Zvcig7dGhpcy5sZW5ndGg8cDspdGhpcy53b3Jkc1t0aGlzLmxlbmd0aCsrXT0wO3JldHVybiB0aGlzfSx3LnByb3RvdHlwZS5zdHJpcD1mdW5jdGlvbigpe2Zvcig7dGhpcy5sZW5ndGg+MSYmMD09PXRoaXMud29y'@;
put 'ZHNbdGhpcy5sZW5ndGgtMV07KXRoaXMubGVuZ3RoLS07cmV0dXJuIHRoaXMuX25vcm1TaWduKCl9LHcucHJvdG90eXBlLl9ub3JtU2lnbj1mdW5jdGlvbigpe3JldHVybiAxPT09dGhpcy5sZW5ndGgmJjA9PT10aGlzLndvcmRzWzBdJiYodGhpcy5uZWdhdGl2ZT0wKSx0aGlzfSx3LnByb3Rv'@;
put 'dHlwZS5pbnNwZWN0PWZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMucmVkPyI8Qk4tUjogIjoiPEJOOiAiKSt0aGlzLnRvU3RyaW5nKDE2KSsiPiJ9O3ZhciBOPVsiIiwiMCIsIjAwIiwiMDAwIiwiMDAwMCIsIjAwMDAwIiwiMDAwMDAwIiwiMDAwMDAwMCIsIjAwMDAwMDAwIiwiMDAwMDAwMDAwIiwi'@;
put 'MDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAw'@;
put 'MDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCJdLEw9'@;
put 'WzAsMCwyNSwxNiwxMiwxMSwxMCw5LDgsOCw3LDcsNyw3LDYsNiw2LDYsNiw2LDYsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNV0sSz1bMCwwLDMzNTU0NDMyLDQzMDQ2NzIxLDE2Nzc3MjE2LDQ4ODI4MTI1LDYwNDY2MTc2LDQwMzUzNjA3LDE2Nzc3MjE2LDQzMDQ2NzIxLDFlNywx'@;
put 'OTQ4NzE3MSwzNTgzMTgwOCw2Mjc0ODUxNyw3NTI5NTM2LDExMzkwNjI1LDE2Nzc3MjE2LDI0MTM3NTY5LDM0MDEyMjI0LDQ3MDQ1ODgxLDY0ZTYsNDA4NDEwMSw1MTUzNjMyLDY0MzYzNDMsNzk2MjYyNCw5NzY1NjI1LDExODgxMzc2LDE0MzQ4OTA3LDE3MjEwMzY4LDIwNTExMTQ5LDI0M2U1'@;
put 'LDI4NjI5MTUxLDMzNTU0NDMyLDM5MTM1MzkzLDQ1NDM1NDI0LDUyNTIxODc1LDYwNDY2MTc2XTtmdW5jdGlvbiBXKFYscCxiKXtiLm5lZ2F0aXZlPXAubmVnYXRpdmVeVi5uZWdhdGl2ZTt2YXIgeD1WLmxlbmd0aCtwLmxlbmd0aHwwO2IubGVuZ3RoPXgseD14LTF8MDt2YXIgQz0wfFYud29y'@;
put 'ZHNbMF0sVD0wfHAud29yZHNbMF0sSD1DKlQsRT1ILzY3MTA4ODY0fDA7Yi53b3Jkc1swXT02NzEwODg2MyZIO2Zvcih2YXIgbT0xO208eDttKyspe2Zvcih2YXIgQT1FPj4+MjYsYWU9NjcxMDg4NjMmRSx0ZT1NYXRoLm1pbihtLHAubGVuZ3RoLTEpLHNlPU1hdGgubWF4KDAsbS1WLmxlbmd0'@;
put 'aCsxKTtzZTw9dGU7c2UrKylBKz0oSD0oQz0wfFYud29yZHNbbS1zZXwwXSkqKFQ9MHxwLndvcmRzW3NlXSkrYWUpLzY3MTA4ODY0fDAsYWU9NjcxMDg4NjMmSDtiLndvcmRzW21dPTB8YWUsRT0wfEF9cmV0dXJuIDAhPT1FP2Iud29yZHNbbV09MHxFOmIubGVuZ3RoLS0sYi5zdHJpcCgpfXcu'@;
put 'cHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKHAsYil7dmFyIHg7aWYoYj0wfGJ8fDEsMTY9PT0ocD1wfHwxMCl8fCJoZXgiPT09cCl7eD0iIjtmb3IodmFyIEM9MCxUPTAsSD0wO0g8dGhpcy5sZW5ndGg7SCsrKXt2YXIgaj10aGlzLndvcmRzW0hdLEU9KDE2Nzc3MjE1JihqPDxDfFQpKS50'@;
put 'b1N0cmluZygxNik7VD1qPj4+MjQtQyYxNjc3NzIxNSwoQys9Mik+PTI2JiYoQy09MjYsSC0tKSx4PTAhPT1UfHxIIT09dGhpcy5sZW5ndGgtMT9OWzYtRS5sZW5ndGhdK0UreDpFK3h9Zm9yKDAhPT1UJiYoeD1ULnRvU3RyaW5nKDE2KSt4KTt4Lmxlbmd0aCViIT0wOyl4PSIwIit4O3JldHVy'@;
put 'biAwIT09dGhpcy5uZWdhdGl2ZSYmKHg9Ii0iK3gpLHh9aWYocD09PSgwfHApJiZwPj0yJiZwPD0zNil7dmFyIG09TFtwXSxBPUtbcF07eD0iIjt2YXIgYWU9dGhpcy5jbG9uZSgpO2ZvcihhZS5uZWdhdGl2ZT0wOyFhZS5pc1plcm8oKTspe3ZhciB0ZT1hZS5tb2RuKEEpLnRvU3RyaW5nKHAp'@;
put 'O3g9KGFlPWFlLmlkaXZuKEEpKS5pc1plcm8oKT90ZSt4Ok5bbS10ZS5sZW5ndGhdK3RlK3h9Zm9yKHRoaXMuaXNaZXJvKCkmJih4PSIwIit4KTt4Lmxlbmd0aCViIT0wOyl4PSIwIit4O3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZSYmKHg9Ii0iK3gpLHh9ZyghMSwiQmFzZSBzaG91bGQgYmUg'@;
put 'YmV0d2VlbiAyIGFuZCAzNiIpfSx3LnByb3RvdHlwZS50b051bWJlcj1mdW5jdGlvbigpe3ZhciBwPXRoaXMud29yZHNbMF07cmV0dXJuIDI9PT10aGlzLmxlbmd0aD9wKz02NzEwODg2NCp0aGlzLndvcmRzWzFdOjM9PT10aGlzLmxlbmd0aCYmMT09PXRoaXMud29yZHNbMl0/cCs9NDUwMzU5'@;
put 'OTYyNzM3MDQ5Nis2NzEwODg2NCp0aGlzLndvcmRzWzFdOnRoaXMubGVuZ3RoPjImJmcoITEsIk51bWJlciBjYW4gb25seSBzYWZlbHkgc3RvcmUgdXAgdG8gNTMgYml0cyIpLDAhPT10aGlzLm5lZ2F0aXZlPy1wOnB9LHcucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybiB0aGlz'@;
put 'LnRvU3RyaW5nKDE2KX0sdy5wcm90b3R5cGUudG9CdWZmZXI9ZnVuY3Rpb24ocCxiKXtyZXR1cm4gZyh0eXBlb2YgUDwidSIpLHRoaXMudG9BcnJheUxpa2UoUCxwLGIpfSx3LnByb3RvdHlwZS50b0FycmF5PWZ1bmN0aW9uKHAsYil7cmV0dXJuIHRoaXMudG9BcnJheUxpa2UoQXJyYXkscCxi'@;
put 'KX0sdy5wcm90b3R5cGUudG9BcnJheUxpa2U9ZnVuY3Rpb24ocCxiLHgpe3ZhciBDPXRoaXMuYnl0ZUxlbmd0aCgpLFQ9eHx8TWF0aC5tYXgoMSxDKTtnKEM8PVQsImJ5dGUgYXJyYXkgbG9uZ2VyIHRoYW4gZGVzaXJlZCBsZW5ndGgiKSxnKFQ+MCwiUmVxdWVzdGVkIGFycmF5IGxlbmd0aCA8'@;
put 'PSAwIiksdGhpcy5zdHJpcCgpO3ZhciBFLG0sSD0ibGUiPT09YixqPW5ldyBwKFQpLEE9dGhpcy5jbG9uZSgpO2lmKEgpe2ZvcihtPTA7IUEuaXNaZXJvKCk7bSsrKUU9QS5hbmRsbigyNTUpLEEuaXVzaHJuKDgpLGpbbV09RTtmb3IoO208VDttKyspalttXT0wfWVsc2V7Zm9yKG09MDttPFQt'@;
put 'QzttKyspalttXT0wO2ZvcihtPTA7IUEuaXNaZXJvKCk7bSsrKUU9QS5hbmRsbigyNTUpLEEuaXVzaHJuKDgpLGpbVC1tLTFdPUV9cmV0dXJuIGp9LHcucHJvdG90eXBlLl9jb3VudEJpdHM9TWF0aC5jbHozMj9mdW5jdGlvbihwKXtyZXR1cm4gMzItTWF0aC5jbHozMihwKX06ZnVuY3Rpb24o'@;
put 'cCl7dmFyIGI9cCx4PTA7cmV0dXJuIGI+PTQwOTYmJih4Kz0xMyxiPj4+PTEzKSxiPj02NCYmKHgrPTcsYj4+Pj03KSxiPj04JiYoeCs9NCxiPj4+PTQpLGI+PTImJih4Kz0yLGI+Pj49MikseCtifSx3LnByb3RvdHlwZS5femVyb0JpdHM9ZnVuY3Rpb24ocCl7aWYoMD09PXApcmV0dXJuIDI2'@;
put 'O3ZhciBiPXAseD0wO3JldHVybiA4MTkxJmJ8fCh4Kz0xMyxiPj4+PTEzKSwxMjcmYnx8KHgrPTcsYj4+Pj03KSwxNSZifHwoeCs9NCxiPj4+PTQpLDMmYnx8KHgrPTIsYj4+Pj0yKSwxJmJ8fHgrKyx4fSx3LnByb3RvdHlwZS5iaXRMZW5ndGg9ZnVuY3Rpb24oKXt2YXIgYj10aGlzLl9jb3Vu'@;
put 'dEJpdHModGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXSk7cmV0dXJuIDI2Kih0aGlzLmxlbmd0aC0xKStifSx3LnByb3RvdHlwZS56ZXJvQml0cz1mdW5jdGlvbigpe2lmKHRoaXMuaXNaZXJvKCkpcmV0dXJuIDA7Zm9yKHZhciBwPTAsYj0wO2I8dGhpcy5sZW5ndGg7YisrKXt2YXIgeD10aGlz'@;
put 'Ll96ZXJvQml0cyh0aGlzLndvcmRzW2JdKTtpZihwKz14LDI2IT09eClicmVha31yZXR1cm4gcH0sdy5wcm90b3R5cGUuYnl0ZUxlbmd0aD1mdW5jdGlvbigpe3JldHVybiBNYXRoLmNlaWwodGhpcy5iaXRMZW5ndGgoKS84KX0sdy5wcm90b3R5cGUudG9Ud29zPWZ1bmN0aW9uKHApe3JldHVy'@;
put 'biAwIT09dGhpcy5uZWdhdGl2ZT90aGlzLmFicygpLmlub3RuKHApLmlhZGRuKDEpOnRoaXMuY2xvbmUoKX0sdy5wcm90b3R5cGUuZnJvbVR3b3M9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMudGVzdG4ocC0xKT90aGlzLm5vdG4ocCkuaWFkZG4oMSkuaW5lZygpOnRoaXMuY2xvbmUoKX0sdy5w'@;
put 'cm90b3R5cGUuaXNOZWc9ZnVuY3Rpb24oKXtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmV9LHcucHJvdG90eXBlLm5lZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNsb25lKCkuaW5lZygpfSx3LnByb3RvdHlwZS5pbmVnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNaZXJvKCl8fCh0aGlzLm5l'@;
put 'Z2F0aXZlXj0xKSx0aGlzfSx3LnByb3RvdHlwZS5pdW9yPWZ1bmN0aW9uKHApe2Zvcig7dGhpcy5sZW5ndGg8cC5sZW5ndGg7KXRoaXMud29yZHNbdGhpcy5sZW5ndGgrK109MDtmb3IodmFyIGI9MDtiPHAubGVuZ3RoO2IrKyl0aGlzLndvcmRzW2JdPXRoaXMud29yZHNbYl18cC53b3Jkc1ti'@;
put 'XTtyZXR1cm4gdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5pb3I9ZnVuY3Rpb24ocCl7cmV0dXJuIGcoISh0aGlzLm5lZ2F0aXZlfHAubmVnYXRpdmUpKSx0aGlzLml1b3IocCl9LHcucHJvdG90eXBlLm9yPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmxlbmd0aD5wLmxlbmd0aD90aGlzLmNs'@;
put 'b25lKCkuaW9yKHApOnAuY2xvbmUoKS5pb3IodGhpcyl9LHcucHJvdG90eXBlLnVvcj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5sZW5ndGg+cC5sZW5ndGg/dGhpcy5jbG9uZSgpLml1b3IocCk6cC5jbG9uZSgpLml1b3IodGhpcyl9LHcucHJvdG90eXBlLml1YW5kPWZ1bmN0aW9uKHApe3Zh'@;
put 'ciBiO2I9dGhpcy5sZW5ndGg+cC5sZW5ndGg/cDp0aGlzO2Zvcih2YXIgeD0wO3g8Yi5sZW5ndGg7eCsrKXRoaXMud29yZHNbeF09dGhpcy53b3Jkc1t4XSZwLndvcmRzW3hdO3JldHVybiB0aGlzLmxlbmd0aD1iLmxlbmd0aCx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmlhbmQ9ZnVuY3Rp'@;
put 'b24ocCl7cmV0dXJuIGcoISh0aGlzLm5lZ2F0aXZlfHAubmVnYXRpdmUpKSx0aGlzLml1YW5kKHApfSx3LnByb3RvdHlwZS5hbmQ9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMubGVuZ3RoPnAubGVuZ3RoP3RoaXMuY2xvbmUoKS5pYW5kKHApOnAuY2xvbmUoKS5pYW5kKHRoaXMpfSx3LnByb3Rv'@;
put 'dHlwZS51YW5kPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmxlbmd0aD5wLmxlbmd0aD90aGlzLmNsb25lKCkuaXVhbmQocCk6cC5jbG9uZSgpLml1YW5kKHRoaXMpfSx3LnByb3RvdHlwZS5pdXhvcj1mdW5jdGlvbihwKXt2YXIgYix4O3RoaXMubGVuZ3RoPnAubGVuZ3RoPyhiPXRoaXMseD1w'@;
put 'KTooYj1wLHg9dGhpcyk7Zm9yKHZhciBDPTA7Qzx4Lmxlbmd0aDtDKyspdGhpcy53b3Jkc1tDXT1iLndvcmRzW0NdXngud29yZHNbQ107aWYodGhpcyE9PWIpZm9yKDtDPGIubGVuZ3RoO0MrKyl0aGlzLndvcmRzW0NdPWIud29yZHNbQ107cmV0dXJuIHRoaXMubGVuZ3RoPWIubGVuZ3RoLHRo'@;
put 'aXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuaXhvcj1mdW5jdGlvbihwKXtyZXR1cm4gZyghKHRoaXMubmVnYXRpdmV8cC5uZWdhdGl2ZSkpLHRoaXMuaXV4b3IocCl9LHcucHJvdG90eXBlLnhvcj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5sZW5ndGg+cC5sZW5ndGg/dGhpcy5jbG9uZSgpLml4'@;
put 'b3IocCk6cC5jbG9uZSgpLml4b3IodGhpcyl9LHcucHJvdG90eXBlLnV4b3I9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMubGVuZ3RoPnAubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdXhvcihwKTpwLmNsb25lKCkuaXV4b3IodGhpcyl9LHcucHJvdG90eXBlLmlub3RuPWZ1bmN0aW9uKHApe2coIm51'@;
put 'bWJlciI9PXR5cGVvZiBwJiZwPj0wKTt2YXIgYj0wfE1hdGguY2VpbChwLzI2KSx4PXAlMjY7dGhpcy5fZXhwYW5kKGIpLHg+MCYmYi0tO2Zvcih2YXIgQz0wO0M8YjtDKyspdGhpcy53b3Jkc1tDXT02NzEwODg2MyZ+dGhpcy53b3Jkc1tDXTtyZXR1cm4geD4wJiYodGhpcy53b3Jkc1tDXT1+'@;
put 'dGhpcy53b3Jkc1tDXSY2NzEwODg2Mz4+MjYteCksdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5ub3RuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaW5vdG4ocCl9LHcucHJvdG90eXBlLnNldG49ZnVuY3Rpb24ocCxiKXtnKCJudW1iZXIiPT10eXBlb2YgcCYmcD49MCk7dmFy'@;
put 'IHg9cC8yNnwwLEM9cCUyNjtyZXR1cm4gdGhpcy5fZXhwYW5kKHgrMSksdGhpcy53b3Jkc1t4XT1iP3RoaXMud29yZHNbeF18MTw8Qzp0aGlzLndvcmRzW3hdJn4oMTw8QyksdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5pYWRkPWZ1bmN0aW9uKHApe3ZhciBiLHgsQztpZigwIT09dGhpcy5u'@;
put 'ZWdhdGl2ZSYmMD09PXAubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCxiPXRoaXMuaXN1YihwKSx0aGlzLm5lZ2F0aXZlXj0xLHRoaXMuX25vcm1TaWduKCk7aWYoMD09PXRoaXMubmVnYXRpdmUmJjAhPT1wLm5lZ2F0aXZlKXJldHVybiBwLm5lZ2F0aXZlPTAsYj10aGlzLmlzdWIo'@;
put 'cCkscC5uZWdhdGl2ZT0xLGIuX25vcm1TaWduKCk7dGhpcy5sZW5ndGg+cC5sZW5ndGg/KHg9dGhpcyxDPXApOih4PXAsQz10aGlzKTtmb3IodmFyIFQ9MCxIPTA7SDxDLmxlbmd0aDtIKyspdGhpcy53b3Jkc1tIXT02NzEwODg2MyYoYj0oMHx4LndvcmRzW0hdKSsoMHxDLndvcmRzW0hdKStU'@;
put 'KSxUPWI+Pj4yNjtmb3IoOzAhPT1UJiZIPHgubGVuZ3RoO0grKyl0aGlzLndvcmRzW0hdPTY3MTA4ODYzJihiPSgwfHgud29yZHNbSF0pK1QpLFQ9Yj4+PjI2O2lmKHRoaXMubGVuZ3RoPXgubGVuZ3RoLDAhPT1UKXRoaXMud29yZHNbdGhpcy5sZW5ndGhdPVQsdGhpcy5sZW5ndGgrKztlbHNl'@;
put 'IGlmKHghPT10aGlzKWZvcig7SDx4Lmxlbmd0aDtIKyspdGhpcy53b3Jkc1tIXT14LndvcmRzW0hdO3JldHVybiB0aGlzfSx3LnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24ocCl7dmFyIGI7cmV0dXJuIDAhPT1wLm5lZ2F0aXZlJiYwPT09dGhpcy5uZWdhdGl2ZT8ocC5uZWdhdGl2ZT0wLGI9dGhp'@;
put 'cy5zdWIocCkscC5uZWdhdGl2ZV49MSxiKTowPT09cC5uZWdhdGl2ZSYmMCE9PXRoaXMubmVnYXRpdmU/KHRoaXMubmVnYXRpdmU9MCxiPXAuc3ViKHRoaXMpLHRoaXMubmVnYXRpdmU9MSxiKTp0aGlzLmxlbmd0aD5wLmxlbmd0aD90aGlzLmNsb25lKCkuaWFkZChwKTpwLmNsb25lKCkuaWFk'@;
put 'ZCh0aGlzKX0sdy5wcm90b3R5cGUuaXN1Yj1mdW5jdGlvbihwKXtpZigwIT09cC5uZWdhdGl2ZSl7cC5uZWdhdGl2ZT0wO3ZhciBiPXRoaXMuaWFkZChwKTtyZXR1cm4gcC5uZWdhdGl2ZT0xLGIuX25vcm1TaWduKCl9aWYoMCE9PXRoaXMubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9'@;
put 'MCx0aGlzLmlhZGQocCksdGhpcy5uZWdhdGl2ZT0xLHRoaXMuX25vcm1TaWduKCk7dmFyIEMsVCx4PXRoaXMuY21wKHApO2lmKDA9PT14KXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5sZW5ndGg9MSx0aGlzLndvcmRzWzBdPTAsdGhpczt4PjA/KEM9dGhpcyxUPXApOihDPXAsVD10aGlz'@;
put 'KTtmb3IodmFyIEg9MCxqPTA7ajxULmxlbmd0aDtqKyspSD0oYj0oMHxDLndvcmRzW2pdKS0oMHxULndvcmRzW2pdKStIKT4+MjYsdGhpcy53b3Jkc1tqXT02NzEwODg2MyZiO2Zvcig7MCE9PUgmJmo8Qy5sZW5ndGg7aisrKUg9KGI9KDB8Qy53b3Jkc1tqXSkrSCk+PjI2LHRoaXMud29yZHNb'@;
put 'al09NjcxMDg4NjMmYjtpZigwPT09SCYmajxDLmxlbmd0aCYmQyE9PXRoaXMpZm9yKDtqPEMubGVuZ3RoO2orKyl0aGlzLndvcmRzW2pdPUMud29yZHNbal07cmV0dXJuIHRoaXMubGVuZ3RoPU1hdGgubWF4KHRoaXMubGVuZ3RoLGopLEMhPT10aGlzJiYodGhpcy5uZWdhdGl2ZT0xKSx0aGlz'@;
put 'LnN0cmlwKCl9LHcucHJvdG90eXBlLnN1Yj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzdWIocCl9O3ZhciBZPWZ1bmN0aW9uKHAsYix4KXt2YXIgRSxtLEEsQz1wLndvcmRzLFQ9Yi53b3JkcyxIPXgud29yZHMsaj0wLGFlPTB8Q1swXSx0ZT04MTkxJmFlLHNlPWFlPj4+MTMs'@;
put 'd2U9MHxDWzFdLFVlPTgxOTEmd2UsSmU9d2U+Pj4xMyxvdD0wfENbMl0seGU9ODE5MSZvdCx2ZT1vdD4+PjEzLFhlPTB8Q1szXSx6ZT04MTkxJlhlLERlPVhlPj4+MTMsRmU9MHxDWzRdLE9lPTgxOTEmRmUsSWU9RmU+Pj4xMyxWZT0wfENbNV0sa2U9ODE5MSZWZSxBZT1WZT4+PjEzLF90PTB8'@;
put 'Q1s2XSxudD04MTkxJl90LFFlPV90Pj4+MTMsdW49MHxDWzddLHl0PTgxOTEmdW4sTXQ9dW4+Pj4xMyxEdD0wfENbOF0saXQ9ODE5MSZEdCwkZT1EdD4+PjEzLHR0PTB8Q1s5XSxIZT04MTkxJnR0LHV0PXR0Pj4+MTMscXQ9MHxUWzBdLFJ0PTgxOTEmcXQsUHQ9cXQ+Pj4xMyxjaT0wfFRbMV0s'@;
put 'UXQ9ODE5MSZjaSxzbj1jaT4+PjEzLFJpPTB8VFsyXSxobj04MTkxJlJpLGZ0PVJpPj4+MTMsT3I9MHxUWzNdLFd0PTgxOTEmT3IsQXQ9T3I+Pj4xMyxSbj0wfFRbNF0sc3Q9ODE5MSZSbixVdD1Sbj4+PjEzLHJpPTB8VFs1XSxXZT04MTkxJnJpLFR0PXJpPj4+MTMsbnI9MHxUWzZdLGh0PTgx'@;
put 'OTEmbnIseHQ9bnI+Pj4xMyxqbj0wfFRbN10scm49ODE5MSZqbix6dD1qbj4+PjEzLGhpPTB8VFs4XSxjbj04MTkxJmhpLGZuPWhpPj4+MTMsSWk9MHxUWzldLFh0PTgxOTEmSWksZW49SWk+Pj4xMzt4Lm5lZ2F0aXZlPXAubmVnYXRpdmVeYi5uZWdhdGl2ZSx4Lmxlbmd0aD0xOTt2YXIgdWE9'@;
put 'KGorKEU9TWF0aC5pbXVsKHRlLFJ0KSl8MCkrKCg4MTkxJihtPShtPU1hdGguaW11bCh0ZSxQdCkpK01hdGguaW11bChzZSxSdCl8MCkpPDwxMyl8MDtqPSgoQT1NYXRoLmltdWwoc2UsUHQpKSsobT4+PjEzKXwwKSsodWE+Pj4yNil8MCx1YSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoVWUsUnQp'@;
put 'LG09KG09TWF0aC5pbXVsKFVlLFB0KSkrTWF0aC5pbXVsKEplLFJ0KXwwLEE9TWF0aC5pbXVsKEplLFB0KTt2YXIgRWk9KGorKEU9RStNYXRoLmltdWwodGUsUXQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh0ZSxzbil8MCkrTWF0aC5pbXVsKHNlLFF0KXwwKSk8PDEzKXwwO2o9'@;
put 'KChBPUErTWF0aC5pbXVsKHNlLHNuKXwwKSsobT4+PjEzKXwwKSsoRWk+Pj4yNil8MCxFaSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoeGUsUnQpLG09KG09TWF0aC5pbXVsKHhlLFB0KSkrTWF0aC5pbXVsKHZlLFJ0KXwwLEE9TWF0aC5pbXVsKHZlLFB0KSxFPUUrTWF0aC5pbXVsKFVlLFF0KXww'@;
put 'LG09KG09bStNYXRoLmltdWwoVWUsc24pfDApK01hdGguaW11bChKZSxRdCl8MCxBPUErTWF0aC5pbXVsKEplLHNuKXwwO3ZhciB2cj0oaisoRT1FK01hdGguaW11bCh0ZSxobil8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKHRlLGZ0KXwwKStNYXRoLmltdWwoc2UsaG4pfDApKTw8'@;
put 'MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2UsZnQpfDApKyhtPj4+MTMpfDApKyh2cj4+PjI2KXwwLHZyJj02NzEwODg2MyxFPU1hdGguaW11bCh6ZSxSdCksbT0obT1NYXRoLmltdWwoemUsUHQpKStNYXRoLmltdWwoRGUsUnQpfDAsQT1NYXRoLmltdWwoRGUsUHQpLEU9RStNYXRoLmltdWwo'@;
put 'eGUsUXQpfDAsbT0obT1tK01hdGguaW11bCh4ZSxzbil8MCkrTWF0aC5pbXVsKHZlLFF0KXwwLEE9QStNYXRoLmltdWwodmUsc24pfDAsRT1FK01hdGguaW11bChVZSxobil8MCxtPShtPW0rTWF0aC5pbXVsKFVlLGZ0KXwwKStNYXRoLmltdWwoSmUsaG4pfDAsQT1BK01hdGguaW11bChKZSxm'@;
put 'dCl8MDt2YXIgV249KGorKEU9RStNYXRoLmltdWwodGUsV3QpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh0ZSxBdCl8MCkrTWF0aC5pbXVsKHNlLFd0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLEF0KXwwKSsobT4+PjEzKXwwKSsoV24+Pj4yNil8MCxXbiY9Njcx'@;
put 'MDg4NjMsRT1NYXRoLmltdWwoT2UsUnQpLG09KG09TWF0aC5pbXVsKE9lLFB0KSkrTWF0aC5pbXVsKEllLFJ0KXwwLEE9TWF0aC5pbXVsKEllLFB0KSxFPUUrTWF0aC5pbXVsKHplLFF0KXwwLG09KG09bStNYXRoLmltdWwoemUsc24pfDApK01hdGguaW11bChEZSxRdCl8MCxBPUErTWF0aC5p'@;
put 'bXVsKERlLHNuKXwwLEU9RStNYXRoLmltdWwoeGUsaG4pfDAsbT0obT1tK01hdGguaW11bCh4ZSxmdCl8MCkrTWF0aC5pbXVsKHZlLGhuKXwwLEE9QStNYXRoLmltdWwodmUsZnQpfDAsRT1FK01hdGguaW11bChVZSxXdCl8MCxtPShtPW0rTWF0aC5pbXVsKFVlLEF0KXwwKStNYXRoLmltdWwo'@;
put 'SmUsV3QpfDAsQT1BK01hdGguaW11bChKZSxBdCl8MDt2YXIgJGk9KGorKEU9RStNYXRoLmltdWwodGUsc3QpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh0ZSxVdCl8MCkrTWF0aC5pbXVsKHNlLHN0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLFV0KXwwKSsobT4+'@;
put 'PjEzKXwwKSsoJGk+Pj4yNil8MCwkaSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoa2UsUnQpLG09KG09TWF0aC5pbXVsKGtlLFB0KSkrTWF0aC5pbXVsKEFlLFJ0KXwwLEE9TWF0aC5pbXVsKEFlLFB0KSxFPUUrTWF0aC5pbXVsKE9lLFF0KXwwLG09KG09bStNYXRoLmltdWwoT2Usc24pfDApK01h'@;
put 'dGguaW11bChJZSxRdCl8MCxBPUErTWF0aC5pbXVsKEllLHNuKXwwLEU9RStNYXRoLmltdWwoemUsaG4pfDAsbT0obT1tK01hdGguaW11bCh6ZSxmdCl8MCkrTWF0aC5pbXVsKERlLGhuKXwwLEE9QStNYXRoLmltdWwoRGUsZnQpfDAsRT1FK01hdGguaW11bCh4ZSxXdCl8MCxtPShtPW0rTWF0'@;
put 'aC5pbXVsKHhlLEF0KXwwKStNYXRoLmltdWwodmUsV3QpfDAsQT1BK01hdGguaW11bCh2ZSxBdCl8MCxFPUUrTWF0aC5pbXVsKFVlLHN0KXwwLG09KG09bStNYXRoLmltdWwoVWUsVXQpfDApK01hdGguaW11bChKZSxzdCl8MCxBPUErTWF0aC5pbXVsKEplLFV0KXwwO3ZhciBlaT0oaisoRT1F'@;
put 'K01hdGguaW11bCh0ZSxXZSl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKHRlLFR0KXwwKStNYXRoLmltdWwoc2UsV2UpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2UsVHQpfDApKyhtPj4+MTMpfDApKyhlaT4+PjI2KXwwLGVpJj02NzEwODg2MyxFPU1hdGguaW11bChu'@;
put 'dCxSdCksbT0obT1NYXRoLmltdWwobnQsUHQpKStNYXRoLmltdWwoUWUsUnQpfDAsQT1NYXRoLmltdWwoUWUsUHQpLEU9RStNYXRoLmltdWwoa2UsUXQpfDAsbT0obT1tK01hdGguaW11bChrZSxzbil8MCkrTWF0aC5pbXVsKEFlLFF0KXwwLEE9QStNYXRoLmltdWwoQWUsc24pfDAsRT1FK01h'@;
put 'dGguaW11bChPZSxobil8MCxtPShtPW0rTWF0aC5pbXVsKE9lLGZ0KXwwKStNYXRoLmltdWwoSWUsaG4pfDAsQT1BK01hdGguaW11bChJZSxmdCl8MCxFPUUrTWF0aC5pbXVsKHplLFd0KXwwLG09KG09bStNYXRoLmltdWwoemUsQXQpfDApK01hdGguaW11bChEZSxXdCl8MCxBPUErTWF0aC5p'@;
put 'bXVsKERlLEF0KXwwLEU9RStNYXRoLmltdWwoeGUsc3QpfDAsbT0obT1tK01hdGguaW11bCh4ZSxVdCl8MCkrTWF0aC5pbXVsKHZlLHN0KXwwLEE9QStNYXRoLmltdWwodmUsVXQpfDAsRT1FK01hdGguaW11bChVZSxXZSl8MCxtPShtPW0rTWF0aC5pbXVsKFVlLFR0KXwwKStNYXRoLmltdWwo'@;
put 'SmUsV2UpfDAsQT1BK01hdGguaW11bChKZSxUdCl8MDt2YXIgUXI9KGorKEU9RStNYXRoLmltdWwodGUsaHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh0ZSx4dCl8MCkrTWF0aC5pbXVsKHNlLGh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLHh0KXwwKSsobT4+'@;
put 'PjEzKXwwKSsoUXI+Pj4yNil8MCxRciY9NjcxMDg4NjMsRT1NYXRoLmltdWwoeXQsUnQpLG09KG09TWF0aC5pbXVsKHl0LFB0KSkrTWF0aC5pbXVsKE10LFJ0KXwwLEE9TWF0aC5pbXVsKE10LFB0KSxFPUUrTWF0aC5pbXVsKG50LFF0KXwwLG09KG09bStNYXRoLmltdWwobnQsc24pfDApK01h'@;
put 'dGguaW11bChRZSxRdCl8MCxBPUErTWF0aC5pbXVsKFFlLHNuKXwwLEU9RStNYXRoLmltdWwoa2UsaG4pfDAsbT0obT1tK01hdGguaW11bChrZSxmdCl8MCkrTWF0aC5pbXVsKEFlLGhuKXwwLEE9QStNYXRoLmltdWwoQWUsZnQpfDAsRT1FK01hdGguaW11bChPZSxXdCl8MCxtPShtPW0rTWF0'@;
put 'aC5pbXVsKE9lLEF0KXwwKStNYXRoLmltdWwoSWUsV3QpfDAsQT1BK01hdGguaW11bChJZSxBdCl8MCxFPUUrTWF0aC5pbXVsKHplLHN0KXwwLG09KG09bStNYXRoLmltdWwoemUsVXQpfDApK01hdGguaW11bChEZSxzdCl8MCxBPUErTWF0aC5pbXVsKERlLFV0KXwwLEU9RStNYXRoLmltdWwo'@;
put 'eGUsV2UpfDAsbT0obT1tK01hdGguaW11bCh4ZSxUdCl8MCkrTWF0aC5pbXVsKHZlLFdlKXwwLEE9QStNYXRoLmltdWwodmUsVHQpfDAsRT1FK01hdGguaW11bChVZSxodCl8MCxtPShtPW0rTWF0aC5pbXVsKFVlLHh0KXwwKStNYXRoLmltdWwoSmUsaHQpfDAsQT1BK01hdGguaW11bChKZSx4'@;
put 'dCl8MDt2YXIgVmk9KGorKEU9RStNYXRoLmltdWwodGUscm4pfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh0ZSx6dCl8MCkrTWF0aC5pbXVsKHNlLHJuKXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLHp0KXwwKSsobT4+PjEzKXwwKSsoVmk+Pj4yNil8MCxWaSY9Njcx'@;
put 'MDg4NjMsRT1NYXRoLmltdWwoaXQsUnQpLG09KG09TWF0aC5pbXVsKGl0LFB0KSkrTWF0aC5pbXVsKCRlLFJ0KXwwLEE9TWF0aC5pbXVsKCRlLFB0KSxFPUUrTWF0aC5pbXVsKHl0LFF0KXwwLG09KG09bStNYXRoLmltdWwoeXQsc24pfDApK01hdGguaW11bChNdCxRdCl8MCxBPUErTWF0aC5p'@;
put 'bXVsKE10LHNuKXwwLEU9RStNYXRoLmltdWwobnQsaG4pfDAsbT0obT1tK01hdGguaW11bChudCxmdCl8MCkrTWF0aC5pbXVsKFFlLGhuKXwwLEE9QStNYXRoLmltdWwoUWUsZnQpfDAsRT1FK01hdGguaW11bChrZSxXdCl8MCxtPShtPW0rTWF0aC5pbXVsKGtlLEF0KXwwKStNYXRoLmltdWwo'@;
put 'QWUsV3QpfDAsQT1BK01hdGguaW11bChBZSxBdCl8MCxFPUUrTWF0aC5pbXVsKE9lLHN0KXwwLG09KG09bStNYXRoLmltdWwoT2UsVXQpfDApK01hdGguaW11bChJZSxzdCl8MCxBPUErTWF0aC5pbXVsKEllLFV0KXwwLEU9RStNYXRoLmltdWwoemUsV2UpfDAsbT0obT1tK01hdGguaW11bCh6'@;
put 'ZSxUdCl8MCkrTWF0aC5pbXVsKERlLFdlKXwwLEE9QStNYXRoLmltdWwoRGUsVHQpfDAsRT1FK01hdGguaW11bCh4ZSxodCl8MCxtPShtPW0rTWF0aC5pbXVsKHhlLHh0KXwwKStNYXRoLmltdWwodmUsaHQpfDAsQT1BK01hdGguaW11bCh2ZSx4dCl8MCxFPUUrTWF0aC5pbXVsKFVlLHJuKXww'@;
put 'LG09KG09bStNYXRoLmltdWwoVWUsenQpfDApK01hdGguaW11bChKZSxybil8MCxBPUErTWF0aC5pbXVsKEplLHp0KXwwO3ZhciBOaT0oaisoRT1FK01hdGguaW11bCh0ZSxjbil8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKHRlLGZuKXwwKStNYXRoLmltdWwoc2UsY24pfDApKTw8'@;
put 'MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2UsZm4pfDApKyhtPj4+MTMpfDApKyhOaT4+PjI2KXwwLE5pJj02NzEwODg2MyxFPU1hdGguaW11bChIZSxSdCksbT0obT1NYXRoLmltdWwoSGUsUHQpKStNYXRoLmltdWwodXQsUnQpfDAsQT1NYXRoLmltdWwodXQsUHQpLEU9RStNYXRoLmltdWwo'@;
put 'aXQsUXQpfDAsbT0obT1tK01hdGguaW11bChpdCxzbil8MCkrTWF0aC5pbXVsKCRlLFF0KXwwLEE9QStNYXRoLmltdWwoJGUsc24pfDAsRT1FK01hdGguaW11bCh5dCxobil8MCxtPShtPW0rTWF0aC5pbXVsKHl0LGZ0KXwwKStNYXRoLmltdWwoTXQsaG4pfDAsQT1BK01hdGguaW11bChNdCxm'@;
put 'dCl8MCxFPUUrTWF0aC5pbXVsKG50LFd0KXwwLG09KG09bStNYXRoLmltdWwobnQsQXQpfDApK01hdGguaW11bChRZSxXdCl8MCxBPUErTWF0aC5pbXVsKFFlLEF0KXwwLEU9RStNYXRoLmltdWwoa2Usc3QpfDAsbT0obT1tK01hdGguaW11bChrZSxVdCl8MCkrTWF0aC5pbXVsKEFlLHN0KXww'@;
put 'LEE9QStNYXRoLmltdWwoQWUsVXQpfDAsRT1FK01hdGguaW11bChPZSxXZSl8MCxtPShtPW0rTWF0aC5pbXVsKE9lLFR0KXwwKStNYXRoLmltdWwoSWUsV2UpfDAsQT1BK01hdGguaW11bChJZSxUdCl8MCxFPUUrTWF0aC5pbXVsKHplLGh0KXwwLG09KG09bStNYXRoLmltdWwoemUseHQpfDAp'@;
put 'K01hdGguaW11bChEZSxodCl8MCxBPUErTWF0aC5pbXVsKERlLHh0KXwwLEU9RStNYXRoLmltdWwoeGUscm4pfDAsbT0obT1tK01hdGguaW11bCh4ZSx6dCl8MCkrTWF0aC5pbXVsKHZlLHJuKXwwLEE9QStNYXRoLmltdWwodmUsenQpfDAsRT1FK01hdGguaW11bChVZSxjbil8MCxtPShtPW0r'@;
put 'TWF0aC5pbXVsKFVlLGZuKXwwKStNYXRoLmltdWwoSmUsY24pfDAsQT1BK01hdGguaW11bChKZSxmbil8MDt2YXIgRGE9KGorKEU9RStNYXRoLmltdWwodGUsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh0ZSxlbil8MCkrTWF0aC5pbXVsKHNlLFh0KXwwKSk8PDEzKXwwO2o9'@;
put 'KChBPUErTWF0aC5pbXVsKHNlLGVuKXwwKSsobT4+PjEzKXwwKSsoRGE+Pj4yNil8MCxEYSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSGUsUXQpLG09KG09TWF0aC5pbXVsKEhlLHNuKSkrTWF0aC5pbXVsKHV0LFF0KXwwLEE9TWF0aC5pbXVsKHV0LHNuKSxFPUUrTWF0aC5pbXVsKGl0LGhuKXww'@;
put 'LG09KG09bStNYXRoLmltdWwoaXQsZnQpfDApK01hdGguaW11bCgkZSxobil8MCxBPUErTWF0aC5pbXVsKCRlLGZ0KXwwLEU9RStNYXRoLmltdWwoeXQsV3QpfDAsbT0obT1tK01hdGguaW11bCh5dCxBdCl8MCkrTWF0aC5pbXVsKE10LFd0KXwwLEE9QStNYXRoLmltdWwoTXQsQXQpfDAsRT1F'@;
put 'K01hdGguaW11bChudCxzdCl8MCxtPShtPW0rTWF0aC5pbXVsKG50LFV0KXwwKStNYXRoLmltdWwoUWUsc3QpfDAsQT1BK01hdGguaW11bChRZSxVdCl8MCxFPUUrTWF0aC5pbXVsKGtlLFdlKXwwLG09KG09bStNYXRoLmltdWwoa2UsVHQpfDApK01hdGguaW11bChBZSxXZSl8MCxBPUErTWF0'@;
put 'aC5pbXVsKEFlLFR0KXwwLEU9RStNYXRoLmltdWwoT2UsaHQpfDAsbT0obT1tK01hdGguaW11bChPZSx4dCl8MCkrTWF0aC5pbXVsKEllLGh0KXwwLEE9QStNYXRoLmltdWwoSWUseHQpfDAsRT1FK01hdGguaW11bCh6ZSxybil8MCxtPShtPW0rTWF0aC5pbXVsKHplLHp0KXwwKStNYXRoLmlt'@;
put 'dWwoRGUscm4pfDAsQT1BK01hdGguaW11bChEZSx6dCl8MCxFPUUrTWF0aC5pbXVsKHhlLGNuKXwwLG09KG09bStNYXRoLmltdWwoeGUsZm4pfDApK01hdGguaW11bCh2ZSxjbil8MCxBPUErTWF0aC5pbXVsKHZlLGZuKXwwO3ZhciBMcj0oaisoRT1FK01hdGguaW11bChVZSxYdCl8MCl8MCkr'@;
put 'KCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKFVlLGVuKXwwKStNYXRoLmltdWwoSmUsWHQpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoSmUsZW4pfDApKyhtPj4+MTMpfDApKyhMcj4+PjI2KXwwLExyJj02NzEwODg2MyxFPU1hdGguaW11bChIZSxobiksbT0obT1NYXRoLmltdWwoSGUs'@;
put 'ZnQpKStNYXRoLmltdWwodXQsaG4pfDAsQT1NYXRoLmltdWwodXQsZnQpLEU9RStNYXRoLmltdWwoaXQsV3QpfDAsbT0obT1tK01hdGguaW11bChpdCxBdCl8MCkrTWF0aC5pbXVsKCRlLFd0KXwwLEE9QStNYXRoLmltdWwoJGUsQXQpfDAsRT1FK01hdGguaW11bCh5dCxzdCl8MCxtPShtPW0r'@;
put 'TWF0aC5pbXVsKHl0LFV0KXwwKStNYXRoLmltdWwoTXQsc3QpfDAsQT1BK01hdGguaW11bChNdCxVdCl8MCxFPUUrTWF0aC5pbXVsKG50LFdlKXwwLG09KG09bStNYXRoLmltdWwobnQsVHQpfDApK01hdGguaW11bChRZSxXZSl8MCxBPUErTWF0aC5pbXVsKFFlLFR0KXwwLEU9RStNYXRoLmlt'@;
put 'dWwoa2UsaHQpfDAsbT0obT1tK01hdGguaW11bChrZSx4dCl8MCkrTWF0aC5pbXVsKEFlLGh0KXwwLEE9QStNYXRoLmltdWwoQWUseHQpfDAsRT1FK01hdGguaW11bChPZSxybil8MCxtPShtPW0rTWF0aC5pbXVsKE9lLHp0KXwwKStNYXRoLmltdWwoSWUscm4pfDAsQT1BK01hdGguaW11bChJ'@;
put 'ZSx6dCl8MCxFPUUrTWF0aC5pbXVsKHplLGNuKXwwLG09KG09bStNYXRoLmltdWwoemUsZm4pfDApK01hdGguaW11bChEZSxjbil8MCxBPUErTWF0aC5pbXVsKERlLGZuKXwwO3ZhciBXaT0oaisoRT1FK01hdGguaW11bCh4ZSxYdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKHhl'@;
put 'LGVuKXwwKStNYXRoLmltdWwodmUsWHQpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwodmUsZW4pfDApKyhtPj4+MTMpfDApKyhXaT4+PjI2KXwwLFdpJj02NzEwODg2MyxFPU1hdGguaW11bChIZSxXdCksbT0obT1NYXRoLmltdWwoSGUsQXQpKStNYXRoLmltdWwodXQsV3QpfDAsQT1N'@;
put 'YXRoLmltdWwodXQsQXQpLEU9RStNYXRoLmltdWwoaXQsc3QpfDAsbT0obT1tK01hdGguaW11bChpdCxVdCl8MCkrTWF0aC5pbXVsKCRlLHN0KXwwLEE9QStNYXRoLmltdWwoJGUsVXQpfDAsRT1FK01hdGguaW11bCh5dCxXZSl8MCxtPShtPW0rTWF0aC5pbXVsKHl0LFR0KXwwKStNYXRoLmlt'@;
put 'dWwoTXQsV2UpfDAsQT1BK01hdGguaW11bChNdCxUdCl8MCxFPUUrTWF0aC5pbXVsKG50LGh0KXwwLG09KG09bStNYXRoLmltdWwobnQseHQpfDApK01hdGguaW11bChRZSxodCl8MCxBPUErTWF0aC5pbXVsKFFlLHh0KXwwLEU9RStNYXRoLmltdWwoa2Uscm4pfDAsbT0obT1tK01hdGguaW11'@;
put 'bChrZSx6dCl8MCkrTWF0aC5pbXVsKEFlLHJuKXwwLEE9QStNYXRoLmltdWwoQWUsenQpfDAsRT1FK01hdGguaW11bChPZSxjbil8MCxtPShtPW0rTWF0aC5pbXVsKE9lLGZuKXwwKStNYXRoLmltdWwoSWUsY24pfDAsQT1BK01hdGguaW11bChJZSxmbil8MDt2YXIgcGE9KGorKEU9RStNYXRo'@;
put 'LmltdWwoemUsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh6ZSxlbil8MCkrTWF0aC5pbXVsKERlLFh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKERlLGVuKXwwKSsobT4+PjEzKXwwKSsocGE+Pj4yNil8MCxwYSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSGUsc3Qp'@;
put 'LG09KG09TWF0aC5pbXVsKEhlLFV0KSkrTWF0aC5pbXVsKHV0LHN0KXwwLEE9TWF0aC5pbXVsKHV0LFV0KSxFPUUrTWF0aC5pbXVsKGl0LFdlKXwwLG09KG09bStNYXRoLmltdWwoaXQsVHQpfDApK01hdGguaW11bCgkZSxXZSl8MCxBPUErTWF0aC5pbXVsKCRlLFR0KXwwLEU9RStNYXRoLmlt'@;
put 'dWwoeXQsaHQpfDAsbT0obT1tK01hdGguaW11bCh5dCx4dCl8MCkrTWF0aC5pbXVsKE10LGh0KXwwLEE9QStNYXRoLmltdWwoTXQseHQpfDAsRT1FK01hdGguaW11bChudCxybil8MCxtPShtPW0rTWF0aC5pbXVsKG50LHp0KXwwKStNYXRoLmltdWwoUWUscm4pfDAsQT1BK01hdGguaW11bChR'@;
put 'ZSx6dCl8MCxFPUUrTWF0aC5pbXVsKGtlLGNuKXwwLG09KG09bStNYXRoLmltdWwoa2UsZm4pfDApK01hdGguaW11bChBZSxjbil8MCxBPUErTWF0aC5pbXVsKEFlLGZuKXwwO3ZhciBRbj0oaisoRT1FK01hdGguaW11bChPZSxYdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKE9l'@;
put 'LGVuKXwwKStNYXRoLmltdWwoSWUsWHQpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoSWUsZW4pfDApKyhtPj4+MTMpfDApKyhRbj4+PjI2KXwwLFFuJj02NzEwODg2MyxFPU1hdGguaW11bChIZSxXZSksbT0obT1NYXRoLmltdWwoSGUsVHQpKStNYXRoLmltdWwodXQsV2UpfDAsQT1N'@;
put 'YXRoLmltdWwodXQsVHQpLEU9RStNYXRoLmltdWwoaXQsaHQpfDAsbT0obT1tK01hdGguaW11bChpdCx4dCl8MCkrTWF0aC5pbXVsKCRlLGh0KXwwLEE9QStNYXRoLmltdWwoJGUseHQpfDAsRT1FK01hdGguaW11bCh5dCxybil8MCxtPShtPW0rTWF0aC5pbXVsKHl0LHp0KXwwKStNYXRoLmlt'@;
put 'dWwoTXQscm4pfDAsQT1BK01hdGguaW11bChNdCx6dCl8MCxFPUUrTWF0aC5pbXVsKG50LGNuKXwwLG09KG09bStNYXRoLmltdWwobnQsZm4pfDApK01hdGguaW11bChRZSxjbil8MCxBPUErTWF0aC5pbXVsKFFlLGZuKXwwO3ZhciBsYT0oaisoRT1FK01hdGguaW11bChrZSxYdCl8MCl8MCkr'@;
put 'KCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKGtlLGVuKXwwKStNYXRoLmltdWwoQWUsWHQpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoQWUsZW4pfDApKyhtPj4+MTMpfDApKyhsYT4+PjI2KXwwLGxhJj02NzEwODg2MyxFPU1hdGguaW11bChIZSxodCksbT0obT1NYXRoLmltdWwoSGUs'@;
put 'eHQpKStNYXRoLmltdWwodXQsaHQpfDAsQT1NYXRoLmltdWwodXQseHQpLEU9RStNYXRoLmltdWwoaXQscm4pfDAsbT0obT1tK01hdGguaW11bChpdCx6dCl8MCkrTWF0aC5pbXVsKCRlLHJuKXwwLEE9QStNYXRoLmltdWwoJGUsenQpfDAsRT1FK01hdGguaW11bCh5dCxjbil8MCxtPShtPW0r'@;
put 'TWF0aC5pbXVsKHl0LGZuKXwwKStNYXRoLmltdWwoTXQsY24pfDAsQT1BK01hdGguaW11bChNdCxmbil8MDt2YXIgeWE9KGorKEU9RStNYXRoLmltdWwobnQsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChudCxlbil8MCkrTWF0aC5pbXVsKFFlLFh0KXwwKSk8PDEzKXwwO2o9'@;
put 'KChBPUErTWF0aC5pbXVsKFFlLGVuKXwwKSsobT4+PjEzKXwwKSsoeWE+Pj4yNil8MCx5YSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSGUscm4pLG09KG09TWF0aC5pbXVsKEhlLHp0KSkrTWF0aC5pbXVsKHV0LHJuKXwwLEE9TWF0aC5pbXVsKHV0LHp0KSxFPUUrTWF0aC5pbXVsKGl0LGNuKXww'@;
put 'LG09KG09bStNYXRoLmltdWwoaXQsZm4pfDApK01hdGguaW11bCgkZSxjbil8MCxBPUErTWF0aC5pbXVsKCRlLGZuKXwwO3ZhciBMYT0oaisoRT1FK01hdGguaW11bCh5dCxYdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKHl0LGVuKXwwKStNYXRoLmltdWwoTXQsWHQpfDApKTw8'@;
put 'MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoTXQsZW4pfDApKyhtPj4+MTMpfDApKyhMYT4+PjI2KXwwLExhJj02NzEwODg2MyxFPU1hdGguaW11bChIZSxjbiksbT0obT1NYXRoLmltdWwoSGUsZm4pKStNYXRoLmltdWwodXQsY24pfDAsQT1NYXRoLmltdWwodXQsZm4pO3ZhciBGYT0oaisoRT1F'@;
put 'K01hdGguaW11bChpdCxYdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKGl0LGVuKXwwKStNYXRoLmltdWwoJGUsWHQpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoJGUsZW4pfDApKyhtPj4+MTMpfDApKyhGYT4+PjI2KXwwLEZhJj02NzEwODg2Mzt2YXIgdGk9KGorKEU9'@;
put 'TWF0aC5pbXVsKEhlLFh0KSl8MCkrKCg4MTkxJihtPShtPU1hdGguaW11bChIZSxlbikpK01hdGguaW11bCh1dCxYdCl8MCkpPDwxMyl8MDtyZXR1cm4gaj0oKEE9TWF0aC5pbXVsKHV0LGVuKSkrKG0+Pj4xMyl8MCkrKHRpPj4+MjYpfDAsdGkmPTY3MTA4ODYzLEhbMF09dWEsSFsxXT1FaSxI'@;
put 'WzJdPXZyLEhbM109V24sSFs0XT0kaSxIWzVdPWVpLEhbNl09UXIsSFs3XT1WaSxIWzhdPU5pLEhbOV09RGEsSFsxMF09THIsSFsxMV09V2ksSFsxMl09cGEsSFsxM109UW4sSFsxNF09bGEsSFsxNV09eWEsSFsxNl09TGEsSFsxN109RmEsSFsxOF09dGksMCE9PWomJihIWzE5XT1qLHgubGVu'@;
put 'Z3RoKyspLHh9O2Z1bmN0aW9uIGVlKFYscCxiKXtyZXR1cm4obmV3IEopLm11bHAoVixwLGIpfWZ1bmN0aW9uIEooVixwKXt0aGlzLng9Vix0aGlzLnk9cH1NYXRoLmltdWx8fChZPVcpLHcucHJvdG90eXBlLm11bFRvPWZ1bmN0aW9uKHAsYil7dmFyIHgsQz10aGlzLmxlbmd0aCtwLmxlbmd0'@;
put 'aDtyZXR1cm4geD0xMD09PXRoaXMubGVuZ3RoJiYxMD09PXAubGVuZ3RoP1kodGhpcyxwLGIpOkM8NjM/Vyh0aGlzLHAsYik6QzwxMDI0P2Z1bmN0aW9uIHEoVixwLGIpe2IubmVnYXRpdmU9cC5uZWdhdGl2ZV5WLm5lZ2F0aXZlLGIubGVuZ3RoPVYubGVuZ3RoK3AubGVuZ3RoO2Zvcih2YXIg'@;
put 'eD0wLEM9MCxUPTA7VDxiLmxlbmd0aC0xO1QrKyl7dmFyIEg9QztDPTA7Zm9yKHZhciBqPTY3MTA4ODYzJngsRT1NYXRoLm1pbihULHAubGVuZ3RoLTEpLG09TWF0aC5tYXgoMCxULVYubGVuZ3RoKzEpO208PUU7bSsrKXt2YXIgc2U9KDB8Vi53b3Jkc1tULW1dKSooMHxwLndvcmRzW21dKSx3'@;
put 'ZT02NzEwODg2MyZzZTtqPTY3MTA4ODYzJih3ZT13ZStqfDApLEMrPShIPShIPUgrKHNlLzY3MTA4ODY0fDApfDApKyh3ZT4+PjI2KXwwKT4+PjI2LEgmPTY3MTA4ODYzfWIud29yZHNbVF09aix4PUgsSD1DfXJldHVybiAwIT09eD9iLndvcmRzW1RdPXg6Yi5sZW5ndGgtLSxiLnN0cmlwKCl9'@;
put 'KHRoaXMscCxiKTplZSh0aGlzLHAsYikseH0sSi5wcm90b3R5cGUubWFrZVJCVD1mdW5jdGlvbihwKXtmb3IodmFyIGI9bmV3IEFycmF5KHApLHg9dy5wcm90b3R5cGUuX2NvdW50Qml0cyhwKS0xLEM9MDtDPHA7QysrKWJbQ109dGhpcy5yZXZCaW4oQyx4LHApO3JldHVybiBifSxKLnByb3Rv'@;
put 'dHlwZS5yZXZCaW49ZnVuY3Rpb24ocCxiLHgpe2lmKDA9PT1wfHxwPT09eC0xKXJldHVybiBwO2Zvcih2YXIgQz0wLFQ9MDtUPGI7VCsrKUN8PSgxJnApPDxiLVQtMSxwPj49MTtyZXR1cm4gQ30sSi5wcm90b3R5cGUucGVybXV0ZT1mdW5jdGlvbihwLGIseCxDLFQsSCl7Zm9yKHZhciBqPTA7'@;
put 'ajxIO2orKylDW2pdPWJbcFtqXV0sVFtqXT14W3Bbal1dfSxKLnByb3RvdHlwZS50cmFuc2Zvcm09ZnVuY3Rpb24ocCxiLHgsQyxULEgpe3RoaXMucGVybXV0ZShILHAsYix4LEMsVCk7Zm9yKHZhciBqPTE7ajxUO2o8PD0xKWZvcih2YXIgRT1qPDwxLG09TWF0aC5jb3MoMipNYXRoLlBJL0Up'@;
put 'LEE9TWF0aC5zaW4oMipNYXRoLlBJL0UpLGFlPTA7YWU8VDthZSs9RSlmb3IodmFyIHRlPW0sc2U9QSx3ZT0wO3dlPGo7d2UrKyl7dmFyIFVlPXhbYWUrd2VdLEplPUNbYWUrd2VdLG90PXhbYWUrd2Ural0seGU9Q1thZSt3ZStqXSx2ZT10ZSpvdC1zZSp4ZTt4ZT10ZSp4ZStzZSpvdCx4W2Fl'@;
put 'K3dlXT1VZSsob3Q9dmUpLENbYWUrd2VdPUplK3hlLHhbYWUrd2Ural09VWUtb3QsQ1thZSt3ZStqXT1KZS14ZSx3ZSE9PUUmJih2ZT1tKnRlLUEqc2Usc2U9bSpzZStBKnRlLHRlPXZlKX19LEoucHJvdG90eXBlLmd1ZXNzTGVuMTNiPWZ1bmN0aW9uKHAsYil7dmFyIHg9MXxNYXRoLm1heChi'@;
put 'LHApLEM9MSZ4LFQ9MDtmb3IoeD14LzJ8MDt4O3g+Pj49MSlUKys7cmV0dXJuIDE8PFQrMStDfSxKLnByb3RvdHlwZS5jb25qdWdhdGU9ZnVuY3Rpb24ocCxiLHgpe2lmKCEoeDw9MSkpZm9yKHZhciBDPTA7Qzx4LzI7QysrKXt2YXIgVD1wW0NdO3BbQ109cFt4LUMtMV0scFt4LUMtMV09VCxU'@;
put 'PWJbQ10sYltDXT0tYlt4LUMtMV0sYlt4LUMtMV09LVR9fSxKLnByb3RvdHlwZS5ub3JtYWxpemUxM2I9ZnVuY3Rpb24ocCxiKXtmb3IodmFyIHg9MCxDPTA7QzxiLzI7QysrKXt2YXIgVD04MTkyKk1hdGgucm91bmQocFsyKkMrMV0vYikrTWF0aC5yb3VuZChwWzIqQ10vYikreDtwW0NdPTY3'@;
put 'MTA4ODYzJlQseD1UPDY3MTA4ODY0PzA6VC82NzEwODg2NHwwfXJldHVybiBwfSxKLnByb3RvdHlwZS5jb252ZXJ0MTNiPWZ1bmN0aW9uKHAsYix4LEMpe2Zvcih2YXIgVD0wLEg9MDtIPGI7SCsrKXhbMipIXT04MTkxJihUKz0wfHBbSF0pLHhbMipIKzFdPTgxOTEmKFQ+Pj49MTMpLFQ+Pj49'@;
put 'MTM7Zm9yKEg9MipiO0g8QzsrK0gpeFtIXT0wO2coMD09PVQpLGcoISgtODE5MiZUKSl9LEoucHJvdG90eXBlLnN0dWI9ZnVuY3Rpb24ocCl7Zm9yKHZhciBiPW5ldyBBcnJheShwKSx4PTA7eDxwO3grKyliW3hdPTA7cmV0dXJuIGJ9LEoucHJvdG90eXBlLm11bHA9ZnVuY3Rpb24ocCxiLHgp'@;
put 'e3ZhciBDPTIqdGhpcy5ndWVzc0xlbjEzYihwLmxlbmd0aCxiLmxlbmd0aCksVD10aGlzLm1ha2VSQlQoQyksSD10aGlzLnN0dWIoQyksaj1uZXcgQXJyYXkoQyksRT1uZXcgQXJyYXkoQyksbT1uZXcgQXJyYXkoQyksQT1uZXcgQXJyYXkoQyksYWU9bmV3IEFycmF5KEMpLHRlPW5ldyBBcnJh'@;
put 'eShDKSxzZT14LndvcmRzO3NlLmxlbmd0aD1DLHRoaXMuY29udmVydDEzYihwLndvcmRzLHAubGVuZ3RoLGosQyksdGhpcy5jb252ZXJ0MTNiKGIud29yZHMsYi5sZW5ndGgsQSxDKSx0aGlzLnRyYW5zZm9ybShqLEgsRSxtLEMsVCksdGhpcy50cmFuc2Zvcm0oQSxILGFlLHRlLEMsVCk7Zm9y'@;
put 'KHZhciB3ZT0wO3dlPEM7d2UrKyl7dmFyIFVlPUVbd2VdKmFlW3dlXS1tW3dlXSp0ZVt3ZV07bVt3ZV09RVt3ZV0qdGVbd2VdK21bd2VdKmFlW3dlXSxFW3dlXT1VZX1yZXR1cm4gdGhpcy5jb25qdWdhdGUoRSxtLEMpLHRoaXMudHJhbnNmb3JtKEUsbSxzZSxILEMsVCksdGhpcy5jb25qdWdh'@;
put 'dGUoc2UsSCxDKSx0aGlzLm5vcm1hbGl6ZTEzYihzZSxDKSx4Lm5lZ2F0aXZlPXAubmVnYXRpdmVeYi5uZWdhdGl2ZSx4Lmxlbmd0aD1wLmxlbmd0aCtiLmxlbmd0aCx4LnN0cmlwKCl9LHcucHJvdG90eXBlLm11bD1mdW5jdGlvbihwKXt2YXIgYj1uZXcgdyhudWxsKTtyZXR1cm4gYi53b3Jk'@;
put 'cz1uZXcgQXJyYXkodGhpcy5sZW5ndGgrcC5sZW5ndGgpLHRoaXMubXVsVG8ocCxiKX0sdy5wcm90b3R5cGUubXVsZj1mdW5jdGlvbihwKXt2YXIgYj1uZXcgdyhudWxsKTtyZXR1cm4gYi53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgrcC5sZW5ndGgpLGVlKHRoaXMscCxiKX0sdy5wcm90'@;
put 'b3R5cGUuaW11bD1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLm11bFRvKHAsdGhpcyl9LHcucHJvdG90eXBlLmltdWxuPWZ1bmN0aW9uKHApe2coIm51bWJlciI9PXR5cGVvZiBwKSxnKHA8NjcxMDg4NjQpO2Zvcih2YXIgYj0wLHg9MDt4PHRoaXMubGVuZ3RoO3grKyl7dmFyIEM9'@;
put 'KDB8dGhpcy53b3Jkc1t4XSkqcCxUPSg2NzEwODg2MyZDKSsoNjcxMDg4NjMmYik7Yj4+PTI2LGIrPUMvNjcxMDg4NjR8MCxiKz1UPj4+MjYsdGhpcy53b3Jkc1t4XT02NzEwODg2MyZUfXJldHVybiAwIT09YiYmKHRoaXMud29yZHNbeF09Yix0aGlzLmxlbmd0aCsrKSx0aGlzfSx3LnByb3Rv'@;
put 'dHlwZS5tdWxuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaW11bG4ocCl9LHcucHJvdG90eXBlLnNxcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLm11bCh0aGlzKX0sdy5wcm90b3R5cGUuaXNxcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmltdWwodGhpcy5jbG9uZSgpKX0sdy5w'@;
put 'cm90b3R5cGUucG93PWZ1bmN0aW9uKHApe3ZhciBiPWZ1bmN0aW9uIFUoVil7Zm9yKHZhciBwPW5ldyBBcnJheShWLmJpdExlbmd0aCgpKSxiPTA7YjxwLmxlbmd0aDtiKyspe3ZhciBDPWIlMjY7cFtiXT0oVi53b3Jkc1tiLzI2fDBdJjE8PEMpPj4+Q31yZXR1cm4gcH0ocCk7aWYoMD09PWIu'@;
put 'bGVuZ3RoKXJldHVybiBuZXcgdygxKTtmb3IodmFyIHg9dGhpcyxDPTA7QzxiLmxlbmd0aCYmMD09PWJbQ107QysrLHg9eC5zcXIoKSk7aWYoKytDPGIubGVuZ3RoKWZvcih2YXIgVD14LnNxcigpO0M8Yi5sZW5ndGg7QysrLFQ9VC5zcXIoKSkwIT09YltDXSYmKHg9eC5tdWwoVCkpO3JldHVy'@;
put 'biB4fSx3LnByb3RvdHlwZS5pdXNobG49ZnVuY3Rpb24ocCl7ZygibnVtYmVyIj09dHlwZW9mIHAmJnA+PTApO3ZhciBULGI9cCUyNix4PShwLWIpLzI2LEM9NjcxMDg4NjM+Pj4yNi1iPDwyNi1iO2lmKDAhPT1iKXt2YXIgSD0wO2ZvcihUPTA7VDx0aGlzLmxlbmd0aDtUKyspe3ZhciBqPXRo'@;
put 'aXMud29yZHNbVF0mQzt0aGlzLndvcmRzW1RdPSgwfHRoaXMud29yZHNbVF0pLWo8PGJ8SCxIPWo+Pj4yNi1ifUgmJih0aGlzLndvcmRzW1RdPUgsdGhpcy5sZW5ndGgrKyl9aWYoMCE9PXgpe2ZvcihUPXRoaXMubGVuZ3RoLTE7VD49MDtULS0pdGhpcy53b3Jkc1tUK3hdPXRoaXMud29yZHNb'@;
put 'VF07Zm9yKFQ9MDtUPHg7VCsrKXRoaXMud29yZHNbVF09MDt0aGlzLmxlbmd0aCs9eH1yZXR1cm4gdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5pc2hsbj1mdW5jdGlvbihwKXtyZXR1cm4gZygwPT09dGhpcy5uZWdhdGl2ZSksdGhpcy5pdXNobG4ocCl9LHcucHJvdG90eXBlLml1c2hybj1m'@;
put 'dW5jdGlvbihwLGIseCl7dmFyIEM7ZygibnVtYmVyIj09dHlwZW9mIHAmJnA+PTApLEM9Yj8oYi1iJTI2KS8yNjowO3ZhciBUPXAlMjYsSD1NYXRoLm1pbigocC1UKS8yNix0aGlzLmxlbmd0aCksaj02NzEwODg2M142NzEwODg2Mz4+PlQ8PFQsRT14O2lmKEMtPUgsQz1NYXRoLm1heCgwLEMp'@;
put 'LEUpe2Zvcih2YXIgbT0wO208SDttKyspRS53b3Jkc1ttXT10aGlzLndvcmRzW21dO0UubGVuZ3RoPUh9aWYoMCE9PUgpaWYodGhpcy5sZW5ndGg+SClmb3IodGhpcy5sZW5ndGgtPUgsbT0wO208dGhpcy5sZW5ndGg7bSsrKXRoaXMud29yZHNbbV09dGhpcy53b3Jkc1ttK0hdO2Vsc2UgdGhp'@;
put 'cy53b3Jkc1swXT0wLHRoaXMubGVuZ3RoPTE7dmFyIEE9MDtmb3IobT10aGlzLmxlbmd0aC0xO20+PTAmJigwIT09QXx8bT49Qyk7bS0tKXt2YXIgYWU9MHx0aGlzLndvcmRzW21dO3RoaXMud29yZHNbbV09QTw8MjYtVHxhZT4+PlQsQT1hZSZqfXJldHVybiBFJiYwIT09QSYmKEUud29yZHNb'@;
put 'RS5sZW5ndGgrK109QSksMD09PXRoaXMubGVuZ3RoJiYodGhpcy53b3Jkc1swXT0wLHRoaXMubGVuZ3RoPTEpLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuaXNocm49ZnVuY3Rpb24ocCxiLHgpe3JldHVybiBnKDA9PT10aGlzLm5lZ2F0aXZlKSx0aGlzLml1c2hybihwLGIseCl9LHcucHJv'@;
put 'dG90eXBlLnNobG49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc2hsbihwKX0sdy5wcm90b3R5cGUudXNobG49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pdXNobG4ocCl9LHcucHJvdG90eXBlLnNocm49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5p'@;
put 'c2hybihwKX0sdy5wcm90b3R5cGUudXNocm49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pdXNocm4ocCl9LHcucHJvdG90eXBlLnRlc3RuPWZ1bmN0aW9uKHApe2coIm51bWJlciI9PXR5cGVvZiBwJiZwPj0wKTt2YXIgYj1wJTI2LHg9KHAtYikvMjY7cmV0dXJuISh0aGlzLmxl'@;
put 'bmd0aDw9eHx8ISh0aGlzLndvcmRzW3hdJjE8PGIpKX0sdy5wcm90b3R5cGUuaW1hc2tuPWZ1bmN0aW9uKHApe2coIm51bWJlciI9PXR5cGVvZiBwJiZwPj0wKTt2YXIgYj1wJTI2LHg9KHAtYikvMjY7cmV0dXJuIGcoMD09PXRoaXMubmVnYXRpdmUsImltYXNrbiB3b3JrcyBvbmx5IHdpdGgg'@;
put 'cG9zaXRpdmUgbnVtYmVycyIpLHRoaXMubGVuZ3RoPD14P3RoaXM6KDAhPT1iJiZ4KyssdGhpcy5sZW5ndGg9TWF0aC5taW4oeCx0aGlzLmxlbmd0aCksMCE9PWImJih0aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdJj02NzEwODg2M142NzEwODg2Mz4+PmI8PGIpLHRoaXMuc3RyaXAoKSl9LHcu'@;
put 'cHJvdG90eXBlLm1hc2tuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaW1hc2tuKHApfSx3LnByb3RvdHlwZS5pYWRkbj1mdW5jdGlvbihwKXtyZXR1cm4gZygibnVtYmVyIj09dHlwZW9mIHApLGcocDw2NzEwODg2NCkscDwwP3RoaXMuaXN1Ym4oLXApOjAhPT10aGlzLm5lZ2F0'@;
put 'aXZlPzE9PT10aGlzLmxlbmd0aCYmKDB8dGhpcy53b3Jkc1swXSk8cD8odGhpcy53b3Jkc1swXT1wLSgwfHRoaXMud29yZHNbMF0pLHRoaXMubmVnYXRpdmU9MCx0aGlzKToodGhpcy5uZWdhdGl2ZT0wLHRoaXMuaXN1Ym4ocCksdGhpcy5uZWdhdGl2ZT0xLHRoaXMpOnRoaXMuX2lhZGRuKHAp'@;
put 'fSx3LnByb3RvdHlwZS5faWFkZG49ZnVuY3Rpb24ocCl7dGhpcy53b3Jkc1swXSs9cDtmb3IodmFyIGI9MDtiPHRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzW2JdPj02NzEwODg2NDtiKyspdGhpcy53b3Jkc1tiXS09NjcxMDg4NjQsYj09PXRoaXMubGVuZ3RoLTE/dGhpcy53b3Jkc1tiKzFdPTE6'@;
put 'dGhpcy53b3Jkc1tiKzFdKys7cmV0dXJuIHRoaXMubGVuZ3RoPU1hdGgubWF4KHRoaXMubGVuZ3RoLGIrMSksdGhpc30sdy5wcm90b3R5cGUuaXN1Ym49ZnVuY3Rpb24ocCl7aWYoZygibnVtYmVyIj09dHlwZW9mIHApLGcocDw2NzEwODg2NCkscDwwKXJldHVybiB0aGlzLmlhZGRuKC1wKTtp'@;
put 'ZigwIT09dGhpcy5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMuaWFkZG4ocCksdGhpcy5uZWdhdGl2ZT0xLHRoaXM7aWYodGhpcy53b3Jkc1swXS09cCwxPT09dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbMF08MCl0aGlzLndvcmRzWzBdPS10aGlzLndvcmRzWzBdLHRoaXMu'@;
put 'bmVnYXRpdmU9MTtlbHNlIGZvcih2YXIgYj0wO2I8dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbYl08MDtiKyspdGhpcy53b3Jkc1tiXSs9NjcxMDg4NjQsdGhpcy53b3Jkc1tiKzFdLT0xO3JldHVybiB0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmFkZG49ZnVuY3Rpb24ocCl7cmV0dXJuIHRo'@;
put 'aXMuY2xvbmUoKS5pYWRkbihwKX0sdy5wcm90b3R5cGUuc3Vibj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzdWJuKHApfSx3LnByb3RvdHlwZS5pYWJzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzfSx3LnByb3RvdHlwZS5hYnM9ZnVuY3Rpb24oKXty'@;
put 'ZXR1cm4gdGhpcy5jbG9uZSgpLmlhYnMoKX0sdy5wcm90b3R5cGUuX2lzaGxuc3VibXVsPWZ1bmN0aW9uKHAsYix4KXt2YXIgVDt0aGlzLl9leHBhbmQocC5sZW5ndGgreCk7dmFyIEgsaj0wO2ZvcihUPTA7VDxwLmxlbmd0aDtUKyspe0g9KDB8dGhpcy53b3Jkc1tUK3hdKStqO3ZhciBFPSgw'@;
put 'fHAud29yZHNbVF0pKmI7aj0oKEgtPTY3MTA4ODYzJkUpPj4yNiktKEUvNjcxMDg4NjR8MCksdGhpcy53b3Jkc1tUK3hdPTY3MTA4ODYzJkh9Zm9yKDtUPHRoaXMubGVuZ3RoLXg7VCsrKWo9KEg9KDB8dGhpcy53b3Jkc1tUK3hdKStqKT4+MjYsdGhpcy53b3Jkc1tUK3hdPTY3MTA4ODYzJkg7'@;
put 'aWYoMD09PWopcmV0dXJuIHRoaXMuc3RyaXAoKTtmb3IoZygtMT09PWopLGo9MCxUPTA7VDx0aGlzLmxlbmd0aDtUKyspaj0oSD0tKDB8dGhpcy53b3Jkc1tUXSkraik+PjI2LHRoaXMud29yZHNbVF09NjcxMDg4NjMmSDtyZXR1cm4gdGhpcy5uZWdhdGl2ZT0xLHRoaXMuc3RyaXAoKX0sdy5w'@;
put 'cm90b3R5cGUuX3dvcmREaXY9ZnVuY3Rpb24ocCxiKXt2YXIgeCxDPXRoaXMuY2xvbmUoKSxUPXAsSD0wfFQud29yZHNbVC5sZW5ndGgtMV07MCE9KHg9MjYtdGhpcy5fY291bnRCaXRzKEgpKSYmKFQ9VC51c2hsbih4KSxDLml1c2hsbih4KSxIPTB8VC53b3Jkc1tULmxlbmd0aC0xXSk7dmFy'@;
put 'IG0sRT1DLmxlbmd0aC1ULmxlbmd0aDtpZigibW9kIiE9PWIpeyhtPW5ldyB3KG51bGwpKS5sZW5ndGg9RSsxLG0ud29yZHM9bmV3IEFycmF5KG0ubGVuZ3RoKTtmb3IodmFyIEE9MDtBPG0ubGVuZ3RoO0ErKyltLndvcmRzW0FdPTB9dmFyIGFlPUMuY2xvbmUoKS5faXNobG5zdWJtdWwoVCwx'@;
put 'LEUpOzA9PT1hZS5uZWdhdGl2ZSYmKEM9YWUsbSYmKG0ud29yZHNbRV09MSkpO2Zvcih2YXIgdGU9RS0xO3RlPj0wO3RlLS0pe3ZhciBzZT02NzEwODg2NCooMHxDLndvcmRzW1QubGVuZ3RoK3RlXSkrKDB8Qy53b3Jkc1tULmxlbmd0aCt0ZS0xXSk7Zm9yKHNlPU1hdGgubWluKHNlL0h8MCw2'@;
put 'NzEwODg2MyksQy5faXNobG5zdWJtdWwoVCxzZSx0ZSk7MCE9PUMubmVnYXRpdmU7KXNlLS0sQy5uZWdhdGl2ZT0wLEMuX2lzaGxuc3VibXVsKFQsMSx0ZSksQy5pc1plcm8oKXx8KEMubmVnYXRpdmVePTEpO20mJihtLndvcmRzW3RlXT1zZSl9cmV0dXJuIG0mJm0uc3RyaXAoKSxDLnN0cmlw'@;
put 'KCksImRpdiIhPT1iJiYwIT09eCYmQy5pdXNocm4oeCkse2RpdjptfHxudWxsLG1vZDpDfX0sdy5wcm90b3R5cGUuZGl2bW9kPWZ1bmN0aW9uKHAsYix4KXtyZXR1cm4gZyghcC5pc1plcm8oKSksdGhpcy5pc1plcm8oKT97ZGl2Om5ldyB3KDApLG1vZDpuZXcgdygwKX06MCE9PXRoaXMubmVn'@;
put 'YXRpdmUmJjA9PT1wLm5lZ2F0aXZlPyhIPXRoaXMubmVnKCkuZGl2bW9kKHAsYiksIm1vZCIhPT1iJiYoQz1ILmRpdi5uZWcoKSksImRpdiIhPT1iJiYoVD1ILm1vZC5uZWcoKSx4JiYwIT09VC5uZWdhdGl2ZSYmVC5pYWRkKHApKSx7ZGl2OkMsbW9kOlR9KTowPT09dGhpcy5uZWdhdGl2ZSYm'@;
put 'MCE9PXAubmVnYXRpdmU/KEg9dGhpcy5kaXZtb2QocC5uZWcoKSxiKSwibW9kIiE9PWImJihDPUguZGl2Lm5lZygpKSx7ZGl2OkMsbW9kOkgubW9kfSk6dGhpcy5uZWdhdGl2ZSZwLm5lZ2F0aXZlPyhIPXRoaXMubmVnKCkuZGl2bW9kKHAubmVnKCksYiksImRpdiIhPT1iJiYoVD1ILm1vZC5u'@;
put 'ZWcoKSx4JiYwIT09VC5uZWdhdGl2ZSYmVC5pc3ViKHApKSx7ZGl2OkguZGl2LG1vZDpUfSk6cC5sZW5ndGg+dGhpcy5sZW5ndGh8fHRoaXMuY21wKHApPDA/e2RpdjpuZXcgdygwKSxtb2Q6dGhpc306MT09PXAubGVuZ3RoPyJkaXYiPT09Yj97ZGl2OnRoaXMuZGl2bihwLndvcmRzWzBdKSxt'@;
put 'b2Q6bnVsbH06Im1vZCI9PT1iP3tkaXY6bnVsbCxtb2Q6bmV3IHcodGhpcy5tb2RuKHAud29yZHNbMF0pKX06e2Rpdjp0aGlzLmRpdm4ocC53b3Jkc1swXSksbW9kOm5ldyB3KHRoaXMubW9kbihwLndvcmRzWzBdKSl9OnRoaXMuX3dvcmREaXYocCxiKTt2YXIgQyxULEh9LHcucHJvdG90eXBl'@;
put 'LmRpdj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5kaXZtb2QocCwiZGl2IiwhMSkuZGl2fSx3LnByb3RvdHlwZS5tb2Q9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuZGl2bW9kKHAsIm1vZCIsITEpLm1vZH0sdy5wcm90b3R5cGUudW1vZD1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5kaXZtb2Qo'@;
put 'cCwibW9kIiwhMCkubW9kfSx3LnByb3RvdHlwZS5kaXZSb3VuZD1mdW5jdGlvbihwKXt2YXIgYj10aGlzLmRpdm1vZChwKTtpZihiLm1vZC5pc1plcm8oKSlyZXR1cm4gYi5kaXY7dmFyIHg9MCE9PWIuZGl2Lm5lZ2F0aXZlP2IubW9kLmlzdWIocCk6Yi5tb2QsQz1wLnVzaHJuKDEpLFQ9cC5h'@;
put 'bmRsbigxKSxIPXguY21wKEMpO3JldHVybiBIPDB8fDE9PT1UJiYwPT09SD9iLmRpdjowIT09Yi5kaXYubmVnYXRpdmU/Yi5kaXYuaXN1Ym4oMSk6Yi5kaXYuaWFkZG4oMSl9LHcucHJvdG90eXBlLm1vZG49ZnVuY3Rpb24ocCl7ZyhwPD02NzEwODg2Myk7Zm9yKHZhciBiPSgxPDwyNiklcCx4'@;
put 'PTAsQz10aGlzLmxlbmd0aC0xO0M+PTA7Qy0tKXg9KGIqeCsoMHx0aGlzLndvcmRzW0NdKSklcDtyZXR1cm4geH0sdy5wcm90b3R5cGUuaWRpdm49ZnVuY3Rpb24ocCl7ZyhwPD02NzEwODg2Myk7Zm9yKHZhciBiPTAseD10aGlzLmxlbmd0aC0xO3g+PTA7eC0tKXt2YXIgQz0oMHx0aGlzLndv'@;
put 'cmRzW3hdKSs2NzEwODg2NCpiO3RoaXMud29yZHNbeF09Qy9wfDAsYj1DJXB9cmV0dXJuIHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuZGl2bj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlkaXZuKHApfSx3LnByb3RvdHlwZS5lZ2NkPWZ1bmN0aW9uKHApe2coMD09PXAubmVn'@;
put 'YXRpdmUpLGcoIXAuaXNaZXJvKCkpO3ZhciBiPXRoaXMseD1wLmNsb25lKCk7Yj0wIT09Yi5uZWdhdGl2ZT9iLnVtb2QocCk6Yi5jbG9uZSgpO2Zvcih2YXIgQz1uZXcgdygxKSxUPW5ldyB3KDApLEg9bmV3IHcoMCksaj1uZXcgdygxKSxFPTA7Yi5pc0V2ZW4oKSYmeC5pc0V2ZW4oKTspYi5p'@;
put 'dXNocm4oMSkseC5pdXNocm4oMSksKytFO2Zvcih2YXIgbT14LmNsb25lKCksQT1iLmNsb25lKCk7IWIuaXNaZXJvKCk7KXtmb3IodmFyIGFlPTAsdGU9MTshKGIud29yZHNbMF0mdGUpJiZhZTwyNjsrK2FlLHRlPDw9MSk7aWYoYWU+MClmb3IoYi5pdXNocm4oYWUpO2FlLS0gPjA7KShDLmlz'@;
put 'T2RkKCl8fFQuaXNPZGQoKSkmJihDLmlhZGQobSksVC5pc3ViKEEpKSxDLml1c2hybigxKSxULml1c2hybigxKTtmb3IodmFyIHNlPTAsd2U9MTshKHgud29yZHNbMF0md2UpJiZzZTwyNjsrK3NlLHdlPDw9MSk7aWYoc2U+MClmb3IoeC5pdXNocm4oc2UpO3NlLS0gPjA7KShILmlzT2RkKCl8'@;
put 'fGouaXNPZGQoKSkmJihILmlhZGQobSksai5pc3ViKEEpKSxILml1c2hybigxKSxqLml1c2hybigxKTtiLmNtcCh4KT49MD8oYi5pc3ViKHgpLEMuaXN1YihIKSxULmlzdWIoaikpOih4LmlzdWIoYiksSC5pc3ViKEMpLGouaXN1YihUKSl9cmV0dXJue2E6SCxiOmosZ2NkOnguaXVzaGxuKEUp'@;
put 'fX0sdy5wcm90b3R5cGUuX2ludm1wPWZ1bmN0aW9uKHApe2coMD09PXAubmVnYXRpdmUpLGcoIXAuaXNaZXJvKCkpO3ZhciBhZSxiPXRoaXMseD1wLmNsb25lKCk7Yj0wIT09Yi5uZWdhdGl2ZT9iLnVtb2QocCk6Yi5jbG9uZSgpO2Zvcih2YXIgQz1uZXcgdygxKSxUPW5ldyB3KDApLEg9eC5j'@;
put 'bG9uZSgpO2IuY21wbigxKT4wJiZ4LmNtcG4oMSk+MDspe2Zvcih2YXIgaj0wLEU9MTshKGIud29yZHNbMF0mRSkmJmo8MjY7KytqLEU8PD0xKTtpZihqPjApZm9yKGIuaXVzaHJuKGopO2otLSA+MDspQy5pc09kZCgpJiZDLmlhZGQoSCksQy5pdXNocm4oMSk7Zm9yKHZhciBtPTAsQT0xOyEo'@;
put 'eC53b3Jkc1swXSZBKSYmbTwyNjsrK20sQTw8PTEpO2lmKG0+MClmb3IoeC5pdXNocm4obSk7bS0tID4wOylULmlzT2RkKCkmJlQuaWFkZChIKSxULml1c2hybigxKTtiLmNtcCh4KT49MD8oYi5pc3ViKHgpLEMuaXN1YihUKSk6KHguaXN1YihiKSxULmlzdWIoQykpfXJldHVybihhZT0wPT09'@;
put 'Yi5jbXBuKDEpP0M6VCkuY21wbigwKTwwJiZhZS5pYWRkKHApLGFlfSx3LnByb3RvdHlwZS5nY2Q9ZnVuY3Rpb24ocCl7aWYodGhpcy5pc1plcm8oKSlyZXR1cm4gcC5hYnMoKTtpZihwLmlzWmVybygpKXJldHVybiB0aGlzLmFicygpO3ZhciBiPXRoaXMuY2xvbmUoKSx4PXAuY2xvbmUoKTti'@;
put 'Lm5lZ2F0aXZlPTAseC5uZWdhdGl2ZT0wO2Zvcih2YXIgQz0wO2IuaXNFdmVuKCkmJnguaXNFdmVuKCk7QysrKWIuaXVzaHJuKDEpLHguaXVzaHJuKDEpO2Zvcig7Oyl7Zm9yKDtiLmlzRXZlbigpOyliLml1c2hybigxKTtmb3IoO3guaXNFdmVuKCk7KXguaXVzaHJuKDEpO3ZhciBUPWIuY21w'@;
put 'KHgpO2lmKFQ8MCl7dmFyIEg9YjtiPXgseD1IfWVsc2UgaWYoMD09PVR8fDA9PT14LmNtcG4oMSkpYnJlYWs7Yi5pc3ViKHgpfXJldHVybiB4Lml1c2hsbihDKX0sdy5wcm90b3R5cGUuaW52bT1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5lZ2NkKHApLmEudW1vZChwKX0sdy5wcm90b3R5cGUu'@;
put 'aXNFdmVuPWZ1bmN0aW9uKCl7cmV0dXJuISgxJnRoaXMud29yZHNbMF0pfSx3LnByb3RvdHlwZS5pc09kZD1mdW5jdGlvbigpe3JldHVybiEoMSZ+dGhpcy53b3Jkc1swXSl9LHcucHJvdG90eXBlLmFuZGxuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLndvcmRzWzBdJnB9LHcucHJvdG90eXBl'@;
put 'LmJpbmNuPWZ1bmN0aW9uKHApe2coIm51bWJlciI9PXR5cGVvZiBwKTt2YXIgYj1wJTI2LHg9KHAtYikvMjYsQz0xPDxiO2lmKHRoaXMubGVuZ3RoPD14KXJldHVybiB0aGlzLl9leHBhbmQoeCsxKSx0aGlzLndvcmRzW3hdfD1DLHRoaXM7Zm9yKHZhciBUPUMsSD14OzAhPT1UJiZIPHRoaXMu'@;
put 'bGVuZ3RoO0grKyl7dmFyIGo9MHx0aGlzLndvcmRzW0hdO1Q9KGorPVQpPj4+MjYsdGhpcy53b3Jkc1tIXT1qJj02NzEwODg2M31yZXR1cm4gMCE9PVQmJih0aGlzLndvcmRzW0hdPVQsdGhpcy5sZW5ndGgrKyksdGhpc30sdy5wcm90b3R5cGUuaXNaZXJvPWZ1bmN0aW9uKCl7cmV0dXJuIDE9'@;
put 'PT10aGlzLmxlbmd0aCYmMD09PXRoaXMud29yZHNbMF19LHcucHJvdG90eXBlLmNtcG49ZnVuY3Rpb24ocCl7dmFyIHgsYj1wPDA7aWYoMCE9PXRoaXMubmVnYXRpdmUmJiFiKXJldHVybi0xO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiZiKXJldHVybiAxO2lmKHRoaXMuc3RyaXAoKSx0aGlzLmxl'@;
put 'bmd0aD4xKXg9MTtlbHNle2ImJihwPS1wKSxnKHA8PTY3MTA4ODYzLCJOdW1iZXIgaXMgdG9vIGJpZyIpO3ZhciBDPTB8dGhpcy53b3Jkc1swXTt4PUM9PT1wPzA6QzxwPy0xOjF9cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlPzB8LXg6eH0sdy5wcm90b3R5cGUuY21wPWZ1bmN0aW9uKHApe2lm'@;
put 'KDAhPT10aGlzLm5lZ2F0aXZlJiYwPT09cC5uZWdhdGl2ZSlyZXR1cm4tMTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmMCE9PXAubmVnYXRpdmUpcmV0dXJuIDE7dmFyIGI9dGhpcy51Y21wKHApO3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZT8wfC1iOmJ9LHcucHJvdG90eXBlLnVjbXA9ZnVuY3Rp'@;
put 'b24ocCl7aWYodGhpcy5sZW5ndGg+cC5sZW5ndGgpcmV0dXJuIDE7aWYodGhpcy5sZW5ndGg8cC5sZW5ndGgpcmV0dXJuLTE7Zm9yKHZhciBiPTAseD10aGlzLmxlbmd0aC0xO3g+PTA7eC0tKXt2YXIgQz0wfHRoaXMud29yZHNbeF0sVD0wfHAud29yZHNbeF07aWYoQyE9PVQpe0M8VD9iPS0x'@;
put 'OkM+VCYmKGI9MSk7YnJlYWt9fXJldHVybiBifSx3LnByb3RvdHlwZS5ndG49ZnVuY3Rpb24ocCl7cmV0dXJuIDE9PT10aGlzLmNtcG4ocCl9LHcucHJvdG90eXBlLmd0PWZ1bmN0aW9uKHApe3JldHVybiAxPT09dGhpcy5jbXAocCl9LHcucHJvdG90eXBlLmd0ZW49ZnVuY3Rpb24ocCl7cmV0'@;
put 'dXJuIHRoaXMuY21wbihwKT49MH0sdy5wcm90b3R5cGUuZ3RlPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNtcChwKT49MH0sdy5wcm90b3R5cGUubHRuPWZ1bmN0aW9uKHApe3JldHVybi0xPT09dGhpcy5jbXBuKHApfSx3LnByb3RvdHlwZS5sdD1mdW5jdGlvbihwKXtyZXR1cm4tMT09PXRo'@;
put 'aXMuY21wKHApfSx3LnByb3RvdHlwZS5sdGVuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNtcG4ocCk8PTB9LHcucHJvdG90eXBlLmx0ZT1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbXAocCk8PTB9LHcucHJvdG90eXBlLmVxbj1mdW5jdGlvbihwKXtyZXR1cm4gMD09PXRoaXMuY21wbihw'@;
put 'KX0sdy5wcm90b3R5cGUuZXE9ZnVuY3Rpb24ocCl7cmV0dXJuIDA9PT10aGlzLmNtcChwKX0sdy5yZWQ9ZnVuY3Rpb24ocCl7cmV0dXJuIG5ldyBTZShwKX0sdy5wcm90b3R5cGUudG9SZWQ9ZnVuY3Rpb24ocCl7cmV0dXJuIGcoIXRoaXMucmVkLCJBbHJlYWR5IGEgbnVtYmVyIGluIHJlZHVj'@;
put 'dGlvbiBjb250ZXh0IiksZygwPT09dGhpcy5uZWdhdGl2ZSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSxwLmNvbnZlcnRUbyh0aGlzKS5fZm9yY2VSZWQocCl9LHcucHJvdG90eXBlLmZyb21SZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gZyh0aGlzLnJlZCwiZnJvbVJlZCB3b3JrcyBv'@;
put 'bmx5IHdpdGggbnVtYmVycyBpbiByZWR1Y3Rpb24gY29udGV4dCIpLHRoaXMucmVkLmNvbnZlcnRGcm9tKHRoaXMpfSx3LnByb3RvdHlwZS5fZm9yY2VSZWQ9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMucmVkPXAsdGhpc30sdy5wcm90b3R5cGUuZm9yY2VSZWQ9ZnVuY3Rpb24ocCl7cmV0dXJu'@;
put 'IGcoIXRoaXMucmVkLCJBbHJlYWR5IGEgbnVtYmVyIGluIHJlZHVjdGlvbiBjb250ZXh0IiksdGhpcy5fZm9yY2VSZWQocCl9LHcucHJvdG90eXBlLnJlZEFkZD1mdW5jdGlvbihwKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkQWRkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMu'@;
put 'cmVkLmFkZCh0aGlzLHApfSx3LnByb3RvdHlwZS5yZWRJQWRkPWZ1bmN0aW9uKHApe3JldHVybiBnKHRoaXMucmVkLCJyZWRJQWRkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmlhZGQodGhpcyxwKX0sdy5wcm90b3R5cGUucmVkU3ViPWZ1bmN0aW9uKHApe3JldHVy'@;
put 'biBnKHRoaXMucmVkLCJyZWRTdWIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuc3ViKHRoaXMscCl9LHcucHJvdG90eXBlLnJlZElTdWI9ZnVuY3Rpb24ocCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZElTdWIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhp'@;
put 'cy5yZWQuaXN1Yih0aGlzLHApfSx3LnByb3RvdHlwZS5yZWRTaGw9ZnVuY3Rpb24ocCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZFNobCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5zaGwodGhpcyxwKX0sdy5wcm90b3R5cGUucmVkTXVsPWZ1bmN0aW9uKHApe3JldHVy'@;
put 'biBnKHRoaXMucmVkLCJyZWRNdWwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTIodGhpcyxwKSx0aGlzLnJlZC5tdWwodGhpcyxwKX0sdy5wcm90b3R5cGUucmVkSU11bD1mdW5jdGlvbihwKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkTXVsIHdvcmtzIG9u'@;
put 'bHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkyKHRoaXMscCksdGhpcy5yZWQuaW11bCh0aGlzLHApfSx3LnByb3RvdHlwZS5yZWRTcXI9ZnVuY3Rpb24oKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkU3FyIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVk'@;
put 'Ll92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnNxcih0aGlzKX0sdy5wcm90b3R5cGUucmVkSVNxcj1mdW5jdGlvbigpe3JldHVybiBnKHRoaXMucmVkLCJyZWRJU3FyIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLmlzcXIodGhp'@;
put 'cyl9LHcucHJvdG90eXBlLnJlZFNxcnQ9ZnVuY3Rpb24oKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkU3FydCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5zcXJ0KHRoaXMpfSx3LnByb3RvdHlwZS5yZWRJbnZtPWZ1bmN0aW9u'@;
put 'KCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZEludm0gd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuaW52bSh0aGlzKX0sdy5wcm90b3R5cGUucmVkTmVnPWZ1bmN0aW9uKCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZE5lZyB3b3Jr'@;
put 'cyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5uZWcodGhpcyl9LHcucHJvdG90eXBlLnJlZFBvdz1mdW5jdGlvbihwKXtyZXR1cm4gZyh0aGlzLnJlZCYmIXAucmVkLCJyZWRQb3cobm9ybWFsTnVtKSIpLHRoaXMucmVkLl92ZXJpZnkx'@;
put 'KHRoaXMpLHRoaXMucmVkLnBvdyh0aGlzLHApfTt2YXIgbmU9e2syNTY6bnVsbCxwMjI0Om51bGwscDE5MjpudWxsLHAyNTUxOTpudWxsfTtmdW5jdGlvbiBpZShWLHApe3RoaXMubmFtZT1WLHRoaXMucD1uZXcgdyhwLDE2KSx0aGlzLm49dGhpcy5wLmJpdExlbmd0aCgpLHRoaXMuaz1uZXcg'@;
put 'dygxKS5pdXNobG4odGhpcy5uKS5pc3ViKHRoaXMucCksdGhpcy50bXA9dGhpcy5fdG1wKCl9ZnVuY3Rpb24gbGUoKXtpZS5jYWxsKHRoaXMsImsyNTYiLCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmMyZiIpfWZ1'@;
put 'bmN0aW9uIG1lKCl7aWUuY2FsbCh0aGlzLCJwMjI0IiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgMDAwMDAwMDAgMDAwMDAwMDAgMDAwMDAwMDEiKX1mdW5jdGlvbiBfZSgpe2llLmNhbGwodGhpcywicDE5MiIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZm'@;
put 'ZmZlIGZmZmZmZmZmIGZmZmZmZmZmIil9ZnVuY3Rpb24gVGUoKXtpZS5jYWxsKHRoaXMsIjI1NTE5IiwiN2ZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZlZCIpfWZ1bmN0aW9uIFNlKFYpe2lmKCJzdHJpbmciPT10eXBlb2Yg'@;
put 'Vil7dmFyIHA9dy5fcHJpbWUoVik7dGhpcy5tPXAucCx0aGlzLnByaW1lPXB9ZWxzZSBnKFYuZ3RuKDEpLCJtb2R1bHVzIG11c3QgYmUgZ3JlYXRlciB0aGFuIDEiKSx0aGlzLm09Vix0aGlzLnByaW1lPW51bGx9ZnVuY3Rpb24gamUoVil7U2UuY2FsbCh0aGlzLFYpLHRoaXMuc2hpZnQ9dGhp'@;
put 'cy5tLmJpdExlbmd0aCgpLHRoaXMuc2hpZnQlMjYhPTAmJih0aGlzLnNoaWZ0Kz0yNi10aGlzLnNoaWZ0JTI2KSx0aGlzLnI9bmV3IHcoMSkuaXVzaGxuKHRoaXMuc2hpZnQpLHRoaXMucjI9dGhpcy5pbW9kKHRoaXMuci5zcXIoKSksdGhpcy5yaW52PXRoaXMuci5faW52bXAodGhpcy5tKSx0'@;
put 'aGlzLm1pbnY9dGhpcy5yaW52Lm11bCh0aGlzLnIpLmlzdWJuKDEpLmRpdih0aGlzLm0pLHRoaXMubWludj10aGlzLm1pbnYudW1vZCh0aGlzLnIpLHRoaXMubWludj10aGlzLnIuc3ViKHRoaXMubWludil9aWUucHJvdG90eXBlLl90bXA9ZnVuY3Rpb24oKXt2YXIgcD1uZXcgdyhudWxsKTty'@;
put 'ZXR1cm4gcC53b3Jkcz1uZXcgQXJyYXkoTWF0aC5jZWlsKHRoaXMubi8xMykpLHB9LGllLnByb3RvdHlwZS5pcmVkdWNlPWZ1bmN0aW9uKHApe3ZhciB4LGI9cDtkb3t0aGlzLnNwbGl0KGIsdGhpcy50bXApLHg9KGI9KGI9dGhpcy5pbXVsSyhiKSkuaWFkZCh0aGlzLnRtcCkpLmJpdExlbmd0'@;
put 'aCgpfXdoaWxlKHg+dGhpcy5uKTt2YXIgQz14PHRoaXMubj8tMTpiLnVjbXAodGhpcy5wKTtyZXR1cm4gMD09PUM/KGIud29yZHNbMF09MCxiLmxlbmd0aD0xKTpDPjA/Yi5pc3ViKHRoaXMucCk6dm9pZCAwIT09Yi5zdHJpcD9iLnN0cmlwKCk6Yi5fc3RyaXAoKSxifSxpZS5wcm90b3R5cGUu'@;
put 'c3BsaXQ9ZnVuY3Rpb24ocCxiKXtwLml1c2hybih0aGlzLm4sMCxiKX0saWUucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKHApe3JldHVybiBwLmltdWwodGhpcy5rKX0sQihsZSxpZSksbGUucHJvdG90eXBlLnNwbGl0PWZ1bmN0aW9uKHAsYil7Zm9yKHZhciB4PTQxOTQzMDMsQz1NYXRoLm1p'@;
put 'bihwLmxlbmd0aCw5KSxUPTA7VDxDO1QrKyliLndvcmRzW1RdPXAud29yZHNbVF07aWYoYi5sZW5ndGg9QyxwLmxlbmd0aDw9OSlyZXR1cm4gcC53b3Jkc1swXT0wLHZvaWQocC5sZW5ndGg9MSk7dmFyIEg9cC53b3Jkc1s5XTtmb3IoYi53b3Jkc1tiLmxlbmd0aCsrXT1IJngsVD0xMDtUPHAu'@;
put 'bGVuZ3RoO1QrKyl7dmFyIGo9MHxwLndvcmRzW1RdO3Aud29yZHNbVC0xMF09KGomeCk8PDR8SD4+PjIyLEg9an1wLndvcmRzW1QtMTBdPUg+Pj49MjIscC5sZW5ndGgtPTA9PT1IJiZwLmxlbmd0aD4xMD8xMDo5fSxsZS5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24ocCl7cC53b3Jkc1twLmxl'@;
put 'bmd0aF09MCxwLndvcmRzW3AubGVuZ3RoKzFdPTAscC5sZW5ndGgrPTI7Zm9yKHZhciBiPTAseD0wO3g8cC5sZW5ndGg7eCsrKXt2YXIgQz0wfHAud29yZHNbeF07cC53b3Jkc1t4XT02NzEwODg2MyYoYis9OTc3KkMpLGI9NjQqQysoYi82NzEwODg2NHwwKX1yZXR1cm4gMD09PXAud29yZHNb'@;
put 'cC5sZW5ndGgtMV0mJihwLmxlbmd0aC0tLDA9PT1wLndvcmRzW3AubGVuZ3RoLTFdJiZwLmxlbmd0aC0tKSxwfSxCKG1lLGllKSxCKF9lLGllKSxCKFRlLGllKSxUZS5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24ocCl7Zm9yKHZhciBiPTAseD0wO3g8cC5sZW5ndGg7eCsrKXt2YXIgQz0xOSoo'@;
put 'MHxwLndvcmRzW3hdKStiLFQ9NjcxMDg4NjMmQztDPj4+PTI2LHAud29yZHNbeF09VCxiPUN9cmV0dXJuIDAhPT1iJiYocC53b3Jkc1twLmxlbmd0aCsrXT1iKSxwfSx3Ll9wcmltZT1mdW5jdGlvbihwKXtpZihuZVtwXSlyZXR1cm4gbmVbcF07dmFyIGI7aWYoImsyNTYiPT09cCliPW5ldyBs'@;
put 'ZTtlbHNlIGlmKCJwMjI0Ij09PXApYj1uZXcgbWU7ZWxzZSBpZigicDE5MiI9PT1wKWI9bmV3IF9lO2Vsc2V7aWYoInAyNTUxOSIhPT1wKXRocm93IG5ldyBFcnJvcigiVW5rbm93biBwcmltZSAiK3ApO2I9bmV3IFRlfXJldHVybiBuZVtwXT1iLGJ9LFNlLnByb3RvdHlwZS5fdmVyaWZ5MT1m'@;
put 'dW5jdGlvbihwKXtnKDA9PT1wLm5lZ2F0aXZlLCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIpLGcocC5yZWQsInJlZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKX0sU2UucHJvdG90eXBlLl92ZXJpZnkyPWZ1bmN0aW9uKHAsYil7ZyghKHAubmVnYXRpdmV8Yi5uZWdhdGl2'@;
put 'ZSksInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIiksZyhwLnJlZCYmcC5yZWQ9PT1iLnJlZCwicmVkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpfSxTZS5wcm90b3R5cGUuaW1vZD1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5wcmltZT90aGlzLnByaW1lLmlyZWR1Y2UocCku'@;
put 'X2ZvcmNlUmVkKHRoaXMpOnAudW1vZCh0aGlzLm0pLl9mb3JjZVJlZCh0aGlzKX0sU2UucHJvdG90eXBlLm5lZz1mdW5jdGlvbihwKXtyZXR1cm4gcC5pc1plcm8oKT9wLmNsb25lKCk6dGhpcy5tLnN1YihwKS5fZm9yY2VSZWQodGhpcyl9LFNlLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24ocCxi'@;
put 'KXt0aGlzLl92ZXJpZnkyKHAsYik7dmFyIHg9cC5hZGQoYik7cmV0dXJuIHguY21wKHRoaXMubSk+PTAmJnguaXN1Yih0aGlzLm0pLHguX2ZvcmNlUmVkKHRoaXMpfSxTZS5wcm90b3R5cGUuaWFkZD1mdW5jdGlvbihwLGIpe3RoaXMuX3ZlcmlmeTIocCxiKTt2YXIgeD1wLmlhZGQoYik7cmV0'@;
put 'dXJuIHguY21wKHRoaXMubSk+PTAmJnguaXN1Yih0aGlzLm0pLHh9LFNlLnByb3RvdHlwZS5zdWI9ZnVuY3Rpb24ocCxiKXt0aGlzLl92ZXJpZnkyKHAsYik7dmFyIHg9cC5zdWIoYik7cmV0dXJuIHguY21wbigwKTwwJiZ4LmlhZGQodGhpcy5tKSx4Ll9mb3JjZVJlZCh0aGlzKX0sU2UucHJv'@;
put 'dG90eXBlLmlzdWI9ZnVuY3Rpb24ocCxiKXt0aGlzLl92ZXJpZnkyKHAsYik7dmFyIHg9cC5pc3ViKGIpO3JldHVybiB4LmNtcG4oMCk8MCYmeC5pYWRkKHRoaXMubSkseH0sU2UucHJvdG90eXBlLnNobD1mdW5jdGlvbihwLGIpe3JldHVybiB0aGlzLl92ZXJpZnkxKHApLHRoaXMuaW1vZChw'@;
put 'LnVzaGxuKGIpKX0sU2UucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24ocCxiKXtyZXR1cm4gdGhpcy5fdmVyaWZ5MihwLGIpLHRoaXMuaW1vZChwLmltdWwoYikpfSxTZS5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKHAsYil7cmV0dXJuIHRoaXMuX3ZlcmlmeTIocCxiKSx0aGlzLmltb2QocC5tdWwo'@;
put 'YikpfSxTZS5wcm90b3R5cGUuaXNxcj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5pbXVsKHAscC5jbG9uZSgpKX0sU2UucHJvdG90eXBlLnNxcj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5tdWwocCxwKX0sU2UucHJvdG90eXBlLnNxcnQ9ZnVuY3Rpb24ocCl7aWYocC5pc1plcm8oKSlyZXR1'@;
put 'cm4gcC5jbG9uZSgpO3ZhciBiPXRoaXMubS5hbmRsbigzKTtpZihnKGIlMj09MSksMz09PWIpe3ZhciB4PXRoaXMubS5hZGQobmV3IHcoMSkpLml1c2hybigyKTtyZXR1cm4gdGhpcy5wb3cocCx4KX1mb3IodmFyIEM9dGhpcy5tLnN1Ym4oMSksVD0wOyFDLmlzWmVybygpJiYwPT09Qy5hbmRs'@;
put 'bigxKTspVCsrLEMuaXVzaHJuKDEpO2coIUMuaXNaZXJvKCkpO3ZhciBIPW5ldyB3KDEpLnRvUmVkKHRoaXMpLGo9SC5yZWROZWcoKSxFPXRoaXMubS5zdWJuKDEpLml1c2hybigxKSxtPXRoaXMubS5iaXRMZW5ndGgoKTtmb3IobT1uZXcgdygyKm0qbSkudG9SZWQodGhpcyk7MCE9PXRoaXMu'@;
put 'cG93KG0sRSkuY21wKGopOyltLnJlZElBZGQoaik7Zm9yKHZhciBBPXRoaXMucG93KG0sQyksYWU9dGhpcy5wb3cocCxDLmFkZG4oMSkuaXVzaHJuKDEpKSx0ZT10aGlzLnBvdyhwLEMpLHNlPVQ7MCE9PXRlLmNtcChIKTspe2Zvcih2YXIgd2U9dGUsVWU9MDswIT09d2UuY21wKEgpO1VlKysp'@;
put 'd2U9d2UucmVkU3FyKCk7ZyhVZTxzZSk7dmFyIEplPXRoaXMucG93KEEsbmV3IHcoMSkuaXVzaGxuKHNlLVVlLTEpKTthZT1hZS5yZWRNdWwoSmUpLEE9SmUucmVkU3FyKCksdGU9dGUucmVkTXVsKEEpLHNlPVVlfXJldHVybiBhZX0sU2UucHJvdG90eXBlLmludm09ZnVuY3Rpb24ocCl7dmFy'@;
put 'IGI9cC5faW52bXAodGhpcy5tKTtyZXR1cm4gMCE9PWIubmVnYXRpdmU/KGIubmVnYXRpdmU9MCx0aGlzLmltb2QoYikucmVkTmVnKCkpOnRoaXMuaW1vZChiKX0sU2UucHJvdG90eXBlLnBvdz1mdW5jdGlvbihwLGIpe2lmKGIuaXNaZXJvKCkpcmV0dXJuIG5ldyB3KDEpLnRvUmVkKHRoaXMp'@;
put 'O2lmKDA9PT1iLmNtcG4oMSkpcmV0dXJuIHAuY2xvbmUoKTt2YXIgQz1uZXcgQXJyYXkoMTYpO0NbMF09bmV3IHcoMSkudG9SZWQodGhpcyksQ1sxXT1wO2Zvcih2YXIgVD0yO1Q8Qy5sZW5ndGg7VCsrKUNbVF09dGhpcy5tdWwoQ1tULTFdLHApO3ZhciBIPUNbMF0saj0wLEU9MCxtPWIuYml0'@;
put 'TGVuZ3RoKCklMjY7Zm9yKDA9PT1tJiYobT0yNiksVD1iLmxlbmd0aC0xO1Q+PTA7VC0tKXtmb3IodmFyIEE9Yi53b3Jkc1tUXSxhZT1tLTE7YWU+PTA7YWUtLSl7dmFyIHRlPUE+PmFlJjE7SCE9PUNbMF0mJihIPXRoaXMuc3FyKEgpKSwwIT09dGV8fDAhPT1qPyhqPDw9MSxqfD10ZSwoND09'@;
put 'KytFfHwwPT09VCYmMD09PWFlKSYmKEg9dGhpcy5tdWwoSCxDW2pdKSxFPTAsaj0wKSk6RT0wfW09MjZ9cmV0dXJuIEh9LFNlLnByb3RvdHlwZS5jb252ZXJ0VG89ZnVuY3Rpb24ocCl7dmFyIGI9cC51bW9kKHRoaXMubSk7cmV0dXJuIGI9PT1wP2IuY2xvbmUoKTpifSxTZS5wcm90b3R5cGUu'@;
put 'Y29udmVydEZyb209ZnVuY3Rpb24ocCl7dmFyIGI9cC5jbG9uZSgpO3JldHVybiBiLnJlZD1udWxsLGJ9LHcubW9udD1mdW5jdGlvbihwKXtyZXR1cm4gbmV3IGplKHApfSxCKGplLFNlKSxqZS5wcm90b3R5cGUuY29udmVydFRvPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmltb2QocC51c2hs'@;
put 'bih0aGlzLnNoaWZ0KSl9LGplLnByb3RvdHlwZS5jb252ZXJ0RnJvbT1mdW5jdGlvbihwKXt2YXIgYj10aGlzLmltb2QocC5tdWwodGhpcy5yaW52KSk7cmV0dXJuIGIucmVkPW51bGwsYn0samUucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24ocCxiKXtpZihwLmlzWmVybygpfHxiLmlzWmVybygp'@;
put 'KXJldHVybiBwLndvcmRzWzBdPTAscC5sZW5ndGg9MSxwO3ZhciB4PXAuaW11bChiKSxDPXgubWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubWludikuaW1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm0pLFQ9eC5pc3ViKEMpLml1c2hybih0aGlzLnNoaWZ0KSxIPVQ7cmV0dXJuIFQuY21w'@;
put 'KHRoaXMubSk+PTA/SD1ULmlzdWIodGhpcy5tKTpULmNtcG4oMCk8MCYmKEg9VC5pYWRkKHRoaXMubSkpLEguX2ZvcmNlUmVkKHRoaXMpfSxqZS5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKHAsYil7aWYocC5pc1plcm8oKXx8Yi5pc1plcm8oKSlyZXR1cm4gbmV3IHcoMCkuX2ZvcmNlUmVkKHRo'@;
put 'aXMpO3ZhciB4PXAubXVsKGIpLEM9eC5tYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5taW52KS5pbWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubSksVD14LmlzdWIoQykuaXVzaHJuKHRoaXMuc2hpZnQpLEg9VDtyZXR1cm4gVC5jbXAodGhpcy5tKT49MD9IPVQuaXN1Yih0aGlzLm0pOlQu'@;
put 'Y21wbigwKTwwJiYoSD1ULmlhZGQodGhpcy5tKSksSC5fZm9yY2VSZWQodGhpcyl9LGplLnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmltb2QocC5faW52bXAodGhpcy5tKS5tdWwodGhpcy5yMikpLl9mb3JjZVJlZCh0aGlzKX19KHVlPXkubm1kKHVlKSx0aGlzKX0s'@;
put 'NjEzODoodWUsWCx5KT0+e3ZhciBJPXkoOTgwKSxfPXkoOTE5OSksZz15KDc4NTkpLEI9eSgyMTQ0KSx3PXkoMzY2MyksUD15KDM0ODIpLEY9eSg0ODE4KSxPPXkoOTUwOSkuQnVmZmVyO3VlLmV4cG9ydHM9ZnVuY3Rpb24oVSxXLFkpe3ZhciBxO3E9VS5wYWRkaW5nP1UucGFkZGluZzpZPzE6'@;
put 'NDt2YXIgbmUsZWU9SShVKSxKPWVlLm1vZHVsdXMuYnl0ZUxlbmd0aCgpO2lmKFcubGVuZ3RoPkp8fG5ldyBCKFcpLmNtcChlZS5tb2R1bHVzKT49MCl0aHJvdyBuZXcgRXJyb3IoImRlY3J5cHRpb24gZXJyb3IiKTtuZT1ZP0YobmV3IEIoVyksZWUpOncoVyxlZSk7dmFyIGllPU8uYWxsb2Mo'@;
put 'Si1uZS5sZW5ndGgpO2lmKG5lPU8uY29uY2F0KFtpZSxuZV0sSiksND09PXEpcmV0dXJuIGZ1bmN0aW9uIHooSyxVKXt2YXIgVz1LLm1vZHVsdXMuYnl0ZUxlbmd0aCgpLFk9UCgic2hhMSIpLnVwZGF0ZShPLmFsbG9jKDApKS5kaWdlc3QoKSxxPVkubGVuZ3RoO2lmKDAhPT1VWzBdKXRocm93'@;
put 'IG5ldyBFcnJvcigiZGVjcnlwdGlvbiBlcnJvciIpO3ZhciBlZT1VLnNsaWNlKDEscSsxKSxKPVUuc2xpY2UocSsxKSxuZT1nKGVlLF8oSixxKSksaWU9ZyhKLF8obmUsVy1xLTEpKTtpZihmdW5jdGlvbiBMKEssVSl7Sz1PLmZyb20oSyksVT1PLmZyb20oVSk7dmFyIFc9MCxZPUsubGVuZ3Ro'@;
put 'O0subGVuZ3RoIT09VS5sZW5ndGgmJihXKyssWT1NYXRoLm1pbihLLmxlbmd0aCxVLmxlbmd0aCkpO2Zvcih2YXIgcT0tMTsrK3E8WTspVys9S1txXV5VW3FdO3JldHVybiBXfShZLGllLnNsaWNlKDAscSkpKXRocm93IG5ldyBFcnJvcigiZGVjcnlwdGlvbiBlcnJvciIpO2Zvcih2YXIgbGU9'@;
put 'cTswPT09aWVbbGVdOylsZSsrO2lmKDEhPT1pZVtsZSsrXSl0aHJvdyBuZXcgRXJyb3IoImRlY3J5cHRpb24gZXJyb3IiKTtyZXR1cm4gaWUuc2xpY2UobGUpfShlZSxuZSk7aWYoMT09PXEpcmV0dXJuIGZ1bmN0aW9uIE4oSyxVLFcpe2Zvcih2YXIgWT1VLnNsaWNlKDAsMikscT0yLGVlPTA7'@;
put 'MCE9PVVbcSsrXTspaWYocT49VS5sZW5ndGgpe2VlKys7YnJlYWt9dmFyIEo9VS5zbGljZSgyLHEtMSk7aWYoKCIwMDAyIiE9PVkudG9TdHJpbmcoImhleCIpJiYhV3x8IjAwMDEiIT09WS50b1N0cmluZygiaGV4IikmJlcpJiZlZSsrLEoubGVuZ3RoPDgmJmVlKyssZWUpdGhyb3cgbmV3IEVy'@;
put 'cm9yKCJkZWNyeXB0aW9uIGVycm9yIik7cmV0dXJuIFUuc2xpY2UocSl9KDAsbmUsWSk7aWYoMz09PXEpcmV0dXJuIG5lO3Rocm93IG5ldyBFcnJvcigidW5rbm93biBwYWRkaW5nIil9fSw2NTU5Oih1ZSxYLHkpPT57dmFyIEk9eSg5ODApLF89eSgxNzk4KSxnPXkoMzQ4MiksQj15KDkxOTkp'@;
put 'LHc9eSg3ODU5KSxQPXkoMjE0NCksRj15KDQ4MTgpLE89eSgzNjYzKSx6PXkoOTUwOSkuQnVmZmVyO3VlLmV4cG9ydHM9ZnVuY3Rpb24oVyxZLHEpe3ZhciBlZTtlZT1XLnBhZGRpbmc/Vy5wYWRkaW5nOnE/MTo0O3ZhciBuZSxKPUkoVyk7aWYoND09PWVlKW5lPWZ1bmN0aW9uIE4oVSxXKXt2'@;
put 'YXIgWT1VLm1vZHVsdXMuYnl0ZUxlbmd0aCgpLHE9Vy5sZW5ndGgsZWU9Zygic2hhMSIpLnVwZGF0ZSh6LmFsbG9jKDApKS5kaWdlc3QoKSxKPWVlLmxlbmd0aCxuZT0yKko7aWYocT5ZLW5lLTIpdGhyb3cgbmV3IEVycm9yKCJtZXNzYWdlIHRvbyBsb25nIik7dmFyIGllPXouYWxsb2MoWS1x'@;
put 'LW5lLTIpLGxlPVktSi0xLG1lPV8oSiksX2U9dyh6LmNvbmNhdChbZWUsaWUsei5hbGxvYygxLDEpLFddLGxlKSxCKG1lLGxlKSksVGU9dyhtZSxCKF9lLEopKTtyZXR1cm4gbmV3IFAoei5jb25jYXQoW3ouYWxsb2MoMSksVGUsX2VdLFkpKX0oSixZKTtlbHNlIGlmKDE9PT1lZSluZT1mdW5j'@;
put 'dGlvbiBMKFUsVyxZKXt2YXIgSixxPVcubGVuZ3RoLGVlPVUubW9kdWx1cy5ieXRlTGVuZ3RoKCk7aWYocT5lZS0xMSl0aHJvdyBuZXcgRXJyb3IoIm1lc3NhZ2UgdG9vIGxvbmciKTtyZXR1cm4gSj1ZP3ouYWxsb2MoZWUtcS0zLDI1NSk6ZnVuY3Rpb24gSyhVKXtmb3IodmFyIEosVz16LmFs'@;
put 'bG9jVW5zYWZlKFUpLFk9MCxxPV8oMipVKSxlZT0wO1k8VTspZWU9PT1xLmxlbmd0aCYmKHE9XygyKlUpLGVlPTApLChKPXFbZWUrK10pJiYoV1tZKytdPUopO3JldHVybiBXfShlZS1xLTMpLG5ldyBQKHouY29uY2F0KFt6LmZyb20oWzAsWT8xOjJdKSxKLHouYWxsb2MoMSksV10sZWUpKX0o'@;
put 'SixZLHEpO2Vsc2V7aWYoMyE9PWVlKXRocm93IG5ldyBFcnJvcigidW5rbm93biBwYWRkaW5nIik7aWYoKG5lPW5ldyBQKFkpKS5jbXAoSi5tb2R1bHVzKT49MCl0aHJvdyBuZXcgRXJyb3IoImRhdGEgdG9vIGxvbmcgZm9yIG1vZHVsdXMiKX1yZXR1cm4gcT9PKG5lLEopOkYobmUsSil9fSw0'@;
put 'ODE4Oih1ZSxYLHkpPT57dmFyIEk9eSgyMTQ0KSxfPXkoOTUwOSkuQnVmZmVyO3VlLmV4cG9ydHM9ZnVuY3Rpb24gZyhCLHcpe3JldHVybiBfLmZyb20oQi50b1JlZChJLm1vbnQody5tb2R1bHVzKSkucmVkUG93KG5ldyBJKHcucHVibGljRXhwb25lbnQpKS5mcm9tUmVkKCkudG9BcnJheSgp'@;
put 'KX19LDc4NTk6dWU9Pnt1ZS5leHBvcnRzPWZ1bmN0aW9uKHksSSl7Zm9yKHZhciBfPXkubGVuZ3RoLGc9LTE7KytnPF87KXlbZ11ePUlbZ107cmV0dXJuIHl9fSwzNjg5Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3kucihYKSx5LmQoWCx7ZGVjb2RlOigpPT5TZSxkZWZhdWx0OigpPT54LGVu'@;
put 'Y29kZTooKT0+amUsdG9BU0NJSTooKT0+cCx0b1VuaWNvZGU6KCk9PlYsdWNzMmRlY29kZTooKT0+aWUsdWNzMmVuY29kZTooKT0+bGV9KTtjb25zdCBJPTIxNDc0ODM2NDcsXz0zNixOPS9eeG4tLS8sTD0vW15cMC1ceDdGXS8sSz0vW1x4MkVcdTMwMDJcdUZGMEVcdUZGNjFdL2csVT17b3Zl'@;
put 'cmZsb3c6Ik92ZXJmbG93OiBpbnB1dCBuZWVkcyB3aWRlciBpbnRlZ2VycyB0byBwcm9jZXNzIiwibm90LWJhc2ljIjoiSWxsZWdhbCBpbnB1dCA+PSAweDgwIChub3QgYSBiYXNpYyBjb2RlIHBvaW50KSIsImludmFsaWQtaW5wdXQiOiJJbnZhbGlkIGlucHV0In0sWT1NYXRoLmZsb29yLHE9'@;
put 'U3RyaW5nLmZyb21DaGFyQ29kZTtmdW5jdGlvbiBlZShDKXt0aHJvdyBuZXcgUmFuZ2VFcnJvcihVW0NdKX1mdW5jdGlvbiBuZShDLFQpe2NvbnN0IEg9Qy5zcGxpdCgiQCIpO2xldCBqPSIiO0gubGVuZ3RoPjEmJihqPUhbMF0rIkAiLEM9SFsxXSk7Y29uc3QgbT1mdW5jdGlvbiBKKEMsVCl7'@;
put 'Y29uc3QgSD1bXTtsZXQgaj1DLmxlbmd0aDtmb3IoO2otLTspSFtqXT1UKENbal0pO3JldHVybiBIfSgoQz1DLnJlcGxhY2UoSywiLiIpKS5zcGxpdCgiLiIpLFQpLmpvaW4oIi4iKTtyZXR1cm4gaittfWZ1bmN0aW9uIGllKEMpe2NvbnN0IFQ9W107bGV0IEg9MDtjb25zdCBqPUMubGVuZ3Ro'@;
put 'O2Zvcig7SDxqOyl7Y29uc3QgRT1DLmNoYXJDb2RlQXQoSCsrKTtpZihFPj01NTI5NiYmRTw9NTYzMTkmJkg8ail7Y29uc3QgbT1DLmNoYXJDb2RlQXQoSCsrKTs1NjMyMD09KDY0NTEyJm0pP1QucHVzaCgoKDEwMjMmRSk8PDEwKSsoMTAyMyZtKSs2NTUzNik6KFQucHVzaChFKSxILS0pfWVs'@;
put 'c2UgVC5wdXNoKEUpfXJldHVybiBUfWNvbnN0IGxlPUM9PlN0cmluZy5mcm9tQ29kZVBvaW50KC4uLkMpLG1lPWZ1bmN0aW9uKEMpe3JldHVybiBDPj00OCYmQzw1OD9DLTQ4KzI2OkM+PTY1JiZDPDkxP0MtNjU6Qz49OTcmJkM8MTIzP0MtOTc6X30sX2U9ZnVuY3Rpb24oQyxUKXtyZXR1cm4g'@;
put 'QysyMis3NSooQzwyNiktKCgwIT1UKTw8NSl9LFRlPWZ1bmN0aW9uKEMsVCxIKXtsZXQgaj0wO2ZvcihDPUg/WShDLzcwMCk6Qz4+MSxDKz1ZKEMvVCk7Qz40NTU7ais9XylDPVkoQy8zNSk7cmV0dXJuIFkoaiszNipDLyhDKzM4KSl9LFNlPWZ1bmN0aW9uKEMpe2NvbnN0IFQ9W10sSD1DLmxl'@;
put 'bmd0aDtsZXQgaj0wLEU9MTI4LG09NzIsQT1DLmxhc3RJbmRleE9mKCItIik7QTwwJiYoQT0wKTtmb3IobGV0IGFlPTA7YWU8QTsrK2FlKUMuY2hhckNvZGVBdChhZSk+PTEyOCYmZWUoIm5vdC1iYXNpYyIpLFQucHVzaChDLmNoYXJDb2RlQXQoYWUpKTtmb3IobGV0IGFlPUE+MD9BKzE6MDth'@;
put 'ZTxIOyl7Y29uc3QgdGU9ajtmb3IobGV0IHdlPTEsVWU9Xzs7VWUrPV8pe2FlPj1IJiZlZSgiaW52YWxpZC1pbnB1dCIpO2NvbnN0IEplPW1lKEMuY2hhckNvZGVBdChhZSsrKSk7SmU+PV8mJmVlKCJpbnZhbGlkLWlucHV0IiksSmU+WSgoSS1qKS93ZSkmJmVlKCJvdmVyZmxvdyIpLGorPUpl'@;
put 'KndlO2NvbnN0IG90PVVlPD1tPzE6VWU+PW0rMjY/MjY6VWUtbTtpZihKZTxvdClicmVhaztjb25zdCB4ZT1fLW90O3dlPlkoSS94ZSkmJmVlKCJvdmVyZmxvdyIpLHdlKj14ZX1jb25zdCBzZT1ULmxlbmd0aCsxO209VGUoai10ZSxzZSwwPT10ZSksWShqL3NlKT5JLUUmJmVlKCJvdmVyZmxv'@;
put 'dyIpLEUrPVkoai9zZSksaiU9c2UsVC5zcGxpY2UoaisrLDAsRSl9cmV0dXJuIFN0cmluZy5mcm9tQ29kZVBvaW50KC4uLlQpfSxqZT1mdW5jdGlvbihDKXtjb25zdCBUPVtdLEg9KEM9aWUoQykpLmxlbmd0aDtsZXQgaj0xMjgsRT0wLG09NzI7Zm9yKGNvbnN0IHRlIG9mIEMpdGU8MTI4JiZU'@;
put 'LnB1c2gocSh0ZSkpO2NvbnN0IEE9VC5sZW5ndGg7bGV0IGFlPUE7Zm9yKEEmJlQucHVzaCgiLSIpO2FlPEg7KXtsZXQgdGU9STtmb3IoY29uc3Qgd2Ugb2YgQyl3ZT49aiYmd2U8dGUmJih0ZT13ZSk7Y29uc3Qgc2U9YWUrMTt0ZS1qPlkoKEktRSkvc2UpJiZlZSgib3ZlcmZsb3ciKSxFKz0o'@;
put 'dGUtaikqc2Usaj10ZTtmb3IoY29uc3Qgd2Ugb2YgQylpZih3ZTxqJiYrK0U+SSYmZWUoIm92ZXJmbG93Iiksd2U9PT1qKXtsZXQgVWU9RTtmb3IobGV0IEplPV87O0plKz1fKXtjb25zdCBvdD1KZTw9bT8xOkplPj1tKzI2PzI2OkplLW07aWYoVWU8b3QpYnJlYWs7Y29uc3QgeGU9VWUtb3Qs'@;
put 'dmU9Xy1vdDtULnB1c2gocShfZShvdCt4ZSV2ZSwwKSkpLFVlPVkoeGUvdmUpfVQucHVzaChxKF9lKFVlLDApKSksbT1UZShFLHNlLGFlPT09QSksRT0wLCsrYWV9KytFLCsran1yZXR1cm4gVC5qb2luKCIiKX0sVj1mdW5jdGlvbihDKXtyZXR1cm4gbmUoQyxmdW5jdGlvbihUKXtyZXR1cm4g'@;
put 'Ti50ZXN0KFQpP1NlKFQuc2xpY2UoNCkudG9Mb3dlckNhc2UoKSk6VH0pfSxwPWZ1bmN0aW9uKEMpe3JldHVybiBuZShDLGZ1bmN0aW9uKFQpe3JldHVybiBMLnRlc3QoVCk/InhuLS0iK2plKFQpOlR9KX0seD17dmVyc2lvbjoiMi4zLjEiLHVjczI6e2RlY29kZTppZSxlbmNvZGU6bGV9LGRl'@;
put 'Y29kZTpTZSxlbmNvZGU6amUsdG9BU0NJSTpwLHRvVW5pY29kZTpWfX0sNzEyOToodWUsWCk9PnsidXNlIHN0cmljdCI7dmFyIHk9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtmdW5jdGlvbiBfKFApe3RyeXtyZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KFAucmVwbGFjZSgvXCsv'@;
put 'ZywiICIpKX1jYXRjaHtyZXR1cm4gbnVsbH19ZnVuY3Rpb24gZyhQKXt0cnl7cmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChQKX1jYXRjaHtyZXR1cm4gbnVsbH19WC5zdHJpbmdpZnk9ZnVuY3Rpb24gdyhQLEYpe0Y9Rnx8IiI7dmFyIHosTixPPVtdO2ZvcihOIGluInN0cmluZyIhPXR5cGVv'@;
put 'ZiBGJiYoRj0iPyIpLFApaWYoeS5jYWxsKFAsTikpe2lmKCEoej1QW05dKSYmKG51bGw9PXp8fGlzTmFOKHopKSYmKHo9IiIpLE49ZyhOKSx6PWcoeiksbnVsbD09PU58fG51bGw9PT16KWNvbnRpbnVlO08ucHVzaChOKyI9Iit6KX1yZXR1cm4gTy5sZW5ndGg/RitPLmpvaW4oIiYiKToiIn0s'@;
put 'WC5wYXJzZT1mdW5jdGlvbiBCKFApe2Zvcih2YXIgeixGPS8oW149PyMmXSspPT8oW14mXSopL2csTz17fTt6PUYuZXhlYyhQKTspe3ZhciBOPV8oelsxXSksTD1fKHpbMl0pO251bGw9PT1OfHxudWxsPT09THx8TiBpbiBPfHwoT1tOXT1MKX1yZXR1cm4gT319LDE3OTg6KHVlLFgseSk9Pnsi'@;
put 'dXNlIHN0cmljdCI7dmFyIEk9eSg0MTU1KSxfPTY1NTM2LHc9eSg5NTA5KS5CdWZmZXIsUD15LmcuY3J5cHRvfHx5LmcubXNDcnlwdG87dWUuZXhwb3J0cz1QJiZQLmdldFJhbmRvbVZhbHVlcz9mdW5jdGlvbiBGKE8seil7aWYoTz40Mjk0OTY3Mjk1KXRocm93IG5ldyBSYW5nZUVycm9yKCJy'@;
put 'ZXF1ZXN0ZWQgdG9vIG1hbnkgcmFuZG9tIGJ5dGVzIik7dmFyIE49dy5hbGxvY1Vuc2FmZShPKTtpZihPPjApaWYoTz5fKWZvcih2YXIgTD0wO0w8TztMKz1fKVAuZ2V0UmFuZG9tVmFsdWVzKE4uc2xpY2UoTCxMK18pKTtlbHNlIFAuZ2V0UmFuZG9tVmFsdWVzKE4pO3JldHVybiJmdW5jdGlv'@;
put 'biI9PXR5cGVvZiB6P0kubmV4dFRpY2soZnVuY3Rpb24oKXt6KG51bGwsTil9KTpOfTpmdW5jdGlvbiBCKCl7dGhyb3cgbmV3IEVycm9yKCJTZWN1cmUgcmFuZG9tIG51bWJlciBnZW5lcmF0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBicm93c2VyLlxuVXNlIENocm9tZSwgRmlyZWZv'@;
put 'eCBvciBJbnRlcm5ldCBFeHBsb3JlciAxMSIpfX0sNzk2MzoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDQxNTUpO2Z1bmN0aW9uIF8oKXt0aHJvdyBuZXcgRXJyb3IoInNlY3VyZSByYW5kb20gbnVtYmVyIGdlbmVyYXRpb24gbm90IHN1cHBvcnRlZCBieSB0aGlzIGJyb3dzZXJc'@;
put 'bnVzZSBjaHJvbWUsIEZpcmVGb3ggb3IgSW50ZXJuZXQgRXhwbG9yZXIgMTEiKX12YXIgZz15KDk1MDkpLEI9eSgxNzk4KSx3PWcuQnVmZmVyLFA9Zy5rTWF4TGVuZ3RoLEY9eS5nLmNyeXB0b3x8eS5nLm1zQ3J5cHRvLE89TWF0aC5wb3coMiwzMiktMTtmdW5jdGlvbiB6KFcsWSl7aWYoIm51'@;
put 'bWJlciIhPXR5cGVvZiBXfHxXIT1XKXRocm93IG5ldyBUeXBlRXJyb3IoIm9mZnNldCBtdXN0IGJlIGEgbnVtYmVyIik7aWYoVz5PfHxXPDApdGhyb3cgbmV3IFR5cGVFcnJvcigib2Zmc2V0IG11c3QgYmUgYSB1aW50MzIiKTtpZihXPlB8fFc+WSl0aHJvdyBuZXcgUmFuZ2VFcnJvcigib2Zm'@;
put 'c2V0IG91dCBvZiByYW5nZSIpfWZ1bmN0aW9uIE4oVyxZLHEpe2lmKCJudW1iZXIiIT10eXBlb2YgV3x8VyE9Vyl0aHJvdyBuZXcgVHlwZUVycm9yKCJzaXplIG11c3QgYmUgYSBudW1iZXIiKTtpZihXPk98fFc8MCl0aHJvdyBuZXcgVHlwZUVycm9yKCJzaXplIG11c3QgYmUgYSB1aW50MzIi'@;
put 'KTtpZihXK1k+cXx8Vz5QKXRocm93IG5ldyBSYW5nZUVycm9yKCJidWZmZXIgdG9vIHNtYWxsIil9ZnVuY3Rpb24gSyhXLFkscSxlZSl7aWYoSS5icm93c2VyKXt2YXIgbmU9bmV3IFVpbnQ4QXJyYXkoVy5idWZmZXIsWSxxKTtyZXR1cm4gRi5nZXRSYW5kb21WYWx1ZXMobmUpLGVlP3ZvaWQg'@;
put 'SS5uZXh0VGljayhmdW5jdGlvbigpe2VlKG51bGwsVyl9KTpXfWlmKCFlZSlyZXR1cm4gQihxKS5jb3B5KFcsWSksVztCKHEsZnVuY3Rpb24obGUsbWUpe2lmKGxlKXJldHVybiBlZShsZSk7bWUuY29weShXLFkpLGVlKG51bGwsVyl9KX1GJiZGLmdldFJhbmRvbVZhbHVlc3x8IUkuYnJvd3Nl'@;
put 'cj8oWC5yYW5kb21GaWxsPWZ1bmN0aW9uIEwoVyxZLHEsZWUpe2lmKCEody5pc0J1ZmZlcihXKXx8VyBpbnN0YW5jZW9mIHkuZy5VaW50OEFycmF5KSl0aHJvdyBuZXcgVHlwZUVycm9yKCciYnVmIiBhcmd1bWVudCBtdXN0IGJlIGEgQnVmZmVyIG9yIFVpbnQ4QXJyYXknKTtpZigiZnVuY3Rp'@;
put 'b24iPT10eXBlb2YgWSllZT1ZLFk9MCxxPVcubGVuZ3RoO2Vsc2UgaWYoImZ1bmN0aW9uIj09dHlwZW9mIHEpZWU9cSxxPVcubGVuZ3RoLVk7ZWxzZSBpZigiZnVuY3Rpb24iIT10eXBlb2YgZWUpdGhyb3cgbmV3IFR5cGVFcnJvcignImNiIiBhcmd1bWVudCBtdXN0IGJlIGEgZnVuY3Rpb24n'@;
put 'KTtyZXR1cm4geihZLFcubGVuZ3RoKSxOKHEsWSxXLmxlbmd0aCksSyhXLFkscSxlZSl9LFgucmFuZG9tRmlsbFN5bmM9ZnVuY3Rpb24gVShXLFkscSl7aWYodHlwZW9mIFk+InUiJiYoWT0wKSwhKHcuaXNCdWZmZXIoVyl8fFcgaW5zdGFuY2VvZiB5LmcuVWludDhBcnJheSkpdGhyb3cgbmV3'@;
put 'IFR5cGVFcnJvcignImJ1ZiIgYXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlciBvciBVaW50OEFycmF5Jyk7cmV0dXJuIHooWSxXLmxlbmd0aCksdm9pZCAwPT09cSYmKHE9Vy5sZW5ndGgtWSksTihxLFksVy5sZW5ndGgpLEsoVyxZLHEpfSk6KFgucmFuZG9tRmlsbD1fLFgucmFuZG9tRmlsbFN5'@;
put 'bmM9Xyl9LDQyODE6dWU9PnsidXNlIHN0cmljdCI7dmFyIHk9e307ZnVuY3Rpb24gSShQLEYsTyl7T3x8KE89RXJyb3IpO3ZhciBOPWZ1bmN0aW9uKEwpe2Z1bmN0aW9uIEsoVSxXLFkpe3JldHVybiBMLmNhbGwodGhpcyxmdW5jdGlvbiB6KEwsSyxVKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9m'@;
put 'IEY/RjpGKEwsSyxVKX0oVSxXLFkpKXx8dGhpc31yZXR1cm4gZnVuY3Rpb24gWChQLEYpe1AucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoRi5wcm90b3R5cGUpLFAucHJvdG90eXBlLmNvbnN0cnVjdG9yPVAsUC5fX3Byb3RvX189Rn0oSyxMKSxLfShPKTtOLnByb3RvdHlwZS5uYW1lPU8ubmFt'@;
put 'ZSxOLnByb3RvdHlwZS5jb2RlPVAseVtQXT1OfWZ1bmN0aW9uIF8oUCxGKXtpZihBcnJheS5pc0FycmF5KFApKXt2YXIgTz1QLmxlbmd0aDtyZXR1cm4gUD1QLm1hcChmdW5jdGlvbih6KXtyZXR1cm4gU3RyaW5nKHopfSksTz4yPyJvbmUgb2YgIi5jb25jYXQoRiwiICIpLmNvbmNhdChQLnNs'@;
put 'aWNlKDAsTy0xKS5qb2luKCIsICIpLCIsIG9yICIpK1BbTy0xXToyPT09Tz8ib25lIG9mICIuY29uY2F0KEYsIiAiKS5jb25jYXQoUFswXSwiIG9yICIpLmNvbmNhdChQWzFdKToib2YgIi5jb25jYXQoRiwiICIpLmNvbmNhdChQWzBdKX1yZXR1cm4ib2YgIi5jb25jYXQoRiwiICIpLmNvbmNh'@;
put 'dChTdHJpbmcoUCkpfUkoIkVSUl9JTlZBTElEX09QVF9WQUxVRSIsZnVuY3Rpb24oUCxGKXtyZXR1cm4nVGhlIHZhbHVlICInK0YrJyIgaXMgaW52YWxpZCBmb3Igb3B0aW9uICInK1ArJyInfSxUeXBlRXJyb3IpLEkoIkVSUl9JTlZBTElEX0FSR19UWVBFIixmdW5jdGlvbihQLEYsTyl7dmFy'@;
put 'IHosTjtpZigic3RyaW5nIj09dHlwZW9mIEYmJmZ1bmN0aW9uIGcoUCxGLE8pe3JldHVybiBQLnN1YnN0cighT3x8TzwwPzA6K08sRi5sZW5ndGgpPT09Rn0oRiwibm90ICIpPyh6PSJtdXN0IG5vdCBiZSIsRj1GLnJlcGxhY2UoL15ub3QgLywiIikpOno9Im11c3QgYmUiLGZ1bmN0aW9uIEIo'@;
put 'UCxGLE8pe3JldHVybih2b2lkIDA9PT1PfHxPPlAubGVuZ3RoKSYmKE89UC5sZW5ndGgpLFAuc3Vic3RyaW5nKE8tRi5sZW5ndGgsTyk9PT1GfShQLCIgYXJndW1lbnQiKSlOPSJUaGUgIi5jb25jYXQoUCwiICIpLmNvbmNhdCh6LCIgIikuY29uY2F0KF8oRiwidHlwZSIpKTtlbHNle3ZhciBM'@;
put 'PWZ1bmN0aW9uIHcoUCxGLE8pe3JldHVybiJudW1iZXIiIT10eXBlb2YgTyYmKE89MCksIShPK0YubGVuZ3RoPlAubGVuZ3RoKSYmLTEhPT1QLmluZGV4T2YoRixPKX0oUCwiLiIpPyJwcm9wZXJ0eSI6ImFyZ3VtZW50IjtOPSdUaGUgIicuY29uY2F0KFAsJyIgJykuY29uY2F0KEwsIiAiKS5j'@;
put 'b25jYXQoeiwiICIpLmNvbmNhdChfKEYsInR5cGUiKSl9cmV0dXJuIE4rIi4gUmVjZWl2ZWQgdHlwZSAiLmNvbmNhdCh0eXBlb2YgTyl9LFR5cGVFcnJvciksSSgiRVJSX1NUUkVBTV9QVVNIX0FGVEVSX0VPRiIsInN0cmVhbS5wdXNoKCkgYWZ0ZXIgRU9GIiksSSgiRVJSX01FVEhPRF9OT1Rf'@;
put 'SU1QTEVNRU5URUQiLGZ1bmN0aW9uKFApe3JldHVybiJUaGUgIitQKyIgbWV0aG9kIGlzIG5vdCBpbXBsZW1lbnRlZCJ9KSxJKCJFUlJfU1RSRUFNX1BSRU1BVFVSRV9DTE9TRSIsIlByZW1hdHVyZSBjbG9zZSIpLEkoIkVSUl9TVFJFQU1fREVTVFJPWUVEIixmdW5jdGlvbihQKXtyZXR1cm4i'@;
put 'Q2Fubm90IGNhbGwgIitQKyIgYWZ0ZXIgYSBzdHJlYW0gd2FzIGRlc3Ryb3llZCJ9KSxJKCJFUlJfTVVMVElQTEVfQ0FMTEJBQ0siLCJDYWxsYmFjayBjYWxsZWQgbXVsdGlwbGUgdGltZXMiKSxJKCJFUlJfU1RSRUFNX0NBTk5PVF9QSVBFIiwiQ2Fubm90IHBpcGUsIG5vdCByZWFkYWJsZSIp'@;
put 'LEkoIkVSUl9TVFJFQU1fV1JJVEVfQUZURVJfRU5EIiwid3JpdGUgYWZ0ZXIgZW5kIiksSSgiRVJSX1NUUkVBTV9OVUxMX1ZBTFVFUyIsIk1heSBub3Qgd3JpdGUgbnVsbCB2YWx1ZXMgdG8gc3RyZWFtIixUeXBlRXJyb3IpLEkoIkVSUl9VTktOT1dOX0VOQ09ESU5HIixmdW5jdGlvbihQKXty'@;
put 'ZXR1cm4iVW5rbm93biBlbmNvZGluZzogIitQfSxUeXBlRXJyb3IpLEkoIkVSUl9TVFJFQU1fVU5TSElGVF9BRlRFUl9FTkRfRVZFTlQiLCJzdHJlYW0udW5zaGlmdCgpIGFmdGVyIGVuZCBldmVudCIpLHVlLmV4cG9ydHMucT15fSw2NzUzOih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJ'@;
put 'PXkoNDE1NSksXz1PYmplY3Qua2V5c3x8ZnVuY3Rpb24oTCl7dmFyIEs9W107Zm9yKHZhciBVIGluIEwpSy5wdXNoKFUpO3JldHVybiBLfTt1ZS5leHBvcnRzPU87dmFyIGc9eSg5NDgxKSxCPXkoNDIyOSk7eSg1NzE3KShPLGcpO2Zvcih2YXIgdz1fKEIucHJvdG90eXBlKSxQPTA7UDx3Lmxl'@;
put 'bmd0aDtQKyspe3ZhciBGPXdbUF07Ty5wcm90b3R5cGVbRl18fChPLnByb3RvdHlwZVtGXT1CLnByb3RvdHlwZVtGXSl9ZnVuY3Rpb24gTyhMKXtpZighKHRoaXMgaW5zdGFuY2VvZiBPKSlyZXR1cm4gbmV3IE8oTCk7Zy5jYWxsKHRoaXMsTCksQi5jYWxsKHRoaXMsTCksdGhpcy5hbGxvd0hh'@;
put 'bGZPcGVuPSEwLEwmJighMT09PUwucmVhZGFibGUmJih0aGlzLnJlYWRhYmxlPSExKSwhMT09PUwud3JpdGFibGUmJih0aGlzLndyaXRhYmxlPSExKSwhMT09PUwuYWxsb3dIYWxmT3BlbiYmKHRoaXMuYWxsb3dIYWxmT3Blbj0hMSx0aGlzLm9uY2UoImVuZCIseikpKX1mdW5jdGlvbiB6KCl7'@;
put 'dGhpcy5fd3JpdGFibGVTdGF0ZS5lbmRlZHx8SS5uZXh0VGljayhOLHRoaXMpfWZ1bmN0aW9uIE4oTCl7TC5lbmQoKX1PYmplY3QuZGVmaW5lUHJvcGVydHkoTy5wcm90b3R5cGUsIndyaXRhYmxlSGlnaFdhdGVyTWFyayIse2VudW1lcmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRo'@;
put 'aXMuX3dyaXRhYmxlU3RhdGUuaGlnaFdhdGVyTWFya319KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoTy5wcm90b3R5cGUsIndyaXRhYmxlQnVmZmVyIix7ZW51bWVyYWJsZTohMSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fd3JpdGFibGVTdGF0ZSYmdGhpcy5fd3JpdGFibGVTdGF0ZS5n'@;
put 'ZXRCdWZmZXIoKX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoTy5wcm90b3R5cGUsIndyaXRhYmxlTGVuZ3RoIix7ZW51bWVyYWJsZTohMSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fd3JpdGFibGVTdGF0ZS5sZW5ndGh9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KE8ucHJvdG90eXBl'@;
put 'LCJkZXN0cm95ZWQiLHtlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiB2b2lkIDAhPT10aGlzLl9yZWFkYWJsZVN0YXRlJiZ2b2lkIDAhPT10aGlzLl93cml0YWJsZVN0YXRlJiZ0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZCYmdGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0'@;
put 'cm95ZWR9LHNldDpmdW5jdGlvbihLKXt2b2lkIDA9PT10aGlzLl9yZWFkYWJsZVN0YXRlfHx2b2lkIDA9PT10aGlzLl93cml0YWJsZVN0YXRlfHwodGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWQ9Syx0aGlzLl93cml0YWJsZVN0YXRlLmRlc3Ryb3llZD1LKX19KX0sMjcyNToodWUsWCx5'@;
put 'KT0+eyJ1c2Ugc3RyaWN0Ijt1ZS5leHBvcnRzPV87dmFyIEk9eSg0NjA1KTtmdW5jdGlvbiBfKGcpe2lmKCEodGhpcyBpbnN0YW5jZW9mIF8pKXJldHVybiBuZXcgXyhnKTtJLmNhbGwodGhpcyxnKX15KDU3MTcpKF8sSSksXy5wcm90b3R5cGUuX3RyYW5zZm9ybT1mdW5jdGlvbihnLEIsdyl7'@;
put 'dyhudWxsLGcpfX0sOTQ4MToodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgXyxJPXkoNDE1NSk7dWUuZXhwb3J0cz1wLHAuUmVhZGFibGVTdGF0ZT1WLHkoNzE4Nyk7dmFyIEwsQj1mdW5jdGlvbihPZSxJZSl7cmV0dXJuIE9lLmxpc3RlbmVycyhJZSkubGVuZ3RofSx3PXkoMjUwMyksUD15'@;
put 'KDg3NjQpLkJ1ZmZlcixGPSh0eXBlb2YgeS5nPCJ1Ij95Lmc6dHlwZW9mIHdpbmRvdzwidSI/d2luZG93OnR5cGVvZiBzZWxmPCJ1Ij9zZWxmOnt9KS5VaW50OEFycmF5fHxmdW5jdGlvbigpe30sTj15KDQ2MTYpO0w9TiYmTi5kZWJ1Z2xvZz9OLmRlYnVnbG9nKCJzdHJlYW0iKTpmdW5jdGlv'@;
put 'bigpe307dmFyIGxlLG1lLF9lLEs9eSg3MzI3KSxVPXkoMTE5NSksWT15KDI0NTcpLmdldEhpZ2hXYXRlck1hcmsscT15KDQyODEpLnEsZWU9cS5FUlJfSU5WQUxJRF9BUkdfVFlQRSxKPXEuRVJSX1NUUkVBTV9QVVNIX0FGVEVSX0VPRixuZT1xLkVSUl9NRVRIT0RfTk9UX0lNUExFTUVOVEVE'@;
put 'LGllPXEuRVJSX1NUUkVBTV9VTlNISUZUX0FGVEVSX0VORF9FVkVOVDt5KDU3MTcpKHAsdyk7dmFyIFRlPVUuZXJyb3JPckRlc3Ryb3ksU2U9WyJlcnJvciIsImNsb3NlIiwiZGVzdHJveSIsInBhdXNlIiwicmVzdW1lIl07ZnVuY3Rpb24gVihGZSxPZSxJZSl7Xz1ffHx5KDY3NTMpLCJib29s'@;
put 'ZWFuIiE9dHlwZW9mIEllJiYoSWU9T2UgaW5zdGFuY2VvZiBfKSx0aGlzLm9iamVjdE1vZGU9ISEoRmU9RmV8fHt9KS5vYmplY3RNb2RlLEllJiYodGhpcy5vYmplY3RNb2RlPXRoaXMub2JqZWN0TW9kZXx8ISFGZS5yZWFkYWJsZU9iamVjdE1vZGUpLHRoaXMuaGlnaFdhdGVyTWFyaz1ZKHRo'@;
put 'aXMsRmUsInJlYWRhYmxlSGlnaFdhdGVyTWFyayIsSWUpLHRoaXMuYnVmZmVyPW5ldyBLLHRoaXMubGVuZ3RoPTAsdGhpcy5waXBlcz1udWxsLHRoaXMucGlwZXNDb3VudD0wLHRoaXMuZmxvd2luZz1udWxsLHRoaXMuZW5kZWQ9ITEsdGhpcy5lbmRFbWl0dGVkPSExLHRoaXMucmVhZGluZz0h'@;
put 'MSx0aGlzLnN5bmM9ITAsdGhpcy5uZWVkUmVhZGFibGU9ITEsdGhpcy5lbWl0dGVkUmVhZGFibGU9ITEsdGhpcy5yZWFkYWJsZUxpc3RlbmluZz0hMSx0aGlzLnJlc3VtZVNjaGVkdWxlZD0hMSx0aGlzLnBhdXNlZD0hMCx0aGlzLmVtaXRDbG9zZT0hMSE9PUZlLmVtaXRDbG9zZSx0aGlzLmF1'@;
put 'dG9EZXN0cm95PSEhRmUuYXV0b0Rlc3Ryb3ksdGhpcy5kZXN0cm95ZWQ9ITEsdGhpcy5kZWZhdWx0RW5jb2Rpbmc9RmUuZGVmYXVsdEVuY29kaW5nfHwidXRmOCIsdGhpcy5hd2FpdERyYWluPTAsdGhpcy5yZWFkaW5nTW9yZT0hMSx0aGlzLmRlY29kZXI9bnVsbCx0aGlzLmVuY29kaW5nPW51'@;
put 'bGwsRmUuZW5jb2RpbmcmJihsZXx8KGxlPXkoMjU1MykucyksdGhpcy5kZWNvZGVyPW5ldyBsZShGZS5lbmNvZGluZyksdGhpcy5lbmNvZGluZz1GZS5lbmNvZGluZyl9ZnVuY3Rpb24gcChGZSl7aWYoXz1ffHx5KDY3NTMpLCEodGhpcyBpbnN0YW5jZW9mIHApKXJldHVybiBuZXcgcChGZSk7'@;
put 'dGhpcy5fcmVhZGFibGVTdGF0ZT1uZXcgVihGZSx0aGlzLHRoaXMgaW5zdGFuY2VvZiBfKSx0aGlzLnJlYWRhYmxlPSEwLEZlJiYoImZ1bmN0aW9uIj09dHlwZW9mIEZlLnJlYWQmJih0aGlzLl9yZWFkPUZlLnJlYWQpLCJmdW5jdGlvbiI9PXR5cGVvZiBGZS5kZXN0cm95JiYodGhpcy5fZGVz'@;
put 'dHJveT1GZS5kZXN0cm95KSksdy5jYWxsKHRoaXMpfWZ1bmN0aW9uIGIoRmUsT2UsSWUsVmUsa2Upe0woInJlYWRhYmxlQWRkQ2h1bmsiLE9lKTt2YXIgX3QsQWU9RmUuX3JlYWRhYmxlU3RhdGU7aWYobnVsbD09PU9lKUFlLnJlYWRpbmc9ITEsZnVuY3Rpb24gRShGZSxPZSl7aWYoTCgib25F'@;
put 'b2ZDaHVuayIpLCFPZS5lbmRlZCl7aWYoT2UuZGVjb2Rlcil7dmFyIEllPU9lLmRlY29kZXIuZW5kKCk7SWUmJkllLmxlbmd0aCYmKE9lLmJ1ZmZlci5wdXNoKEllKSxPZS5sZW5ndGgrPU9lLm9iamVjdE1vZGU/MTpJZS5sZW5ndGgpfU9lLmVuZGVkPSEwLE9lLnN5bmM/bShGZSk6KE9lLm5l'@;
put 'ZWRSZWFkYWJsZT0hMSxPZS5lbWl0dGVkUmVhZGFibGV8fChPZS5lbWl0dGVkUmVhZGFibGU9ITAsQShGZSkpKX19KEZlLEFlKTtlbHNlIGlmKGtlfHwoX3Q9ZnVuY3Rpb24gQyhGZSxPZSl7dmFyIEllO3JldHVybiFmdW5jdGlvbiB6KEZlKXtyZXR1cm4gUC5pc0J1ZmZlcihGZSl8fEZlIGlu'@;
put 'c3RhbmNlb2YgRn0oT2UpJiYic3RyaW5nIiE9dHlwZW9mIE9lJiZ2b2lkIDAhPT1PZSYmIUZlLm9iamVjdE1vZGUmJihJZT1uZXcgZWUoImNodW5rIixbInN0cmluZyIsIkJ1ZmZlciIsIlVpbnQ4QXJyYXkiXSxPZSkpLEllfShBZSxPZSkpLF90KVRlKEZlLF90KTtlbHNlIGlmKEFlLm9iamVj'@;
put 'dE1vZGV8fE9lJiZPZS5sZW5ndGg+MClpZigic3RyaW5nIiE9dHlwZW9mIE9lJiYhQWUub2JqZWN0TW9kZSYmT2JqZWN0LmdldFByb3RvdHlwZU9mKE9lKSE9PVAucHJvdG90eXBlJiYoT2U9ZnVuY3Rpb24gTyhGZSl7cmV0dXJuIFAuZnJvbShGZSl9KE9lKSksVmUpQWUuZW5kRW1pdHRlZD9U'@;
put 'ZShGZSxuZXcgaWUpOngoRmUsQWUsT2UsITApO2Vsc2UgaWYoQWUuZW5kZWQpVGUoRmUsbmV3IEopO2Vsc2V7aWYoQWUuZGVzdHJveWVkKXJldHVybiExO0FlLnJlYWRpbmc9ITEsQWUuZGVjb2RlciYmIUllPyhPZT1BZS5kZWNvZGVyLndyaXRlKE9lKSxBZS5vYmplY3RNb2RlfHwwIT09T2Uu'@;
put 'bGVuZ3RoP3goRmUsQWUsT2UsITEpOmFlKEZlLEFlKSk6eChGZSxBZSxPZSwhMSl9ZWxzZSBWZXx8KEFlLnJlYWRpbmc9ITEsYWUoRmUsQWUpKTtyZXR1cm4hQWUuZW5kZWQmJihBZS5sZW5ndGg8QWUuaGlnaFdhdGVyTWFya3x8MD09PUFlLmxlbmd0aCl9ZnVuY3Rpb24geChGZSxPZSxJZSxW'@;
put 'ZSl7T2UuZmxvd2luZyYmMD09PU9lLmxlbmd0aCYmIU9lLnN5bmM/KE9lLmF3YWl0RHJhaW49MCxGZS5lbWl0KCJkYXRhIixJZSkpOihPZS5sZW5ndGgrPU9lLm9iamVjdE1vZGU/MTpJZS5sZW5ndGgsVmU/T2UuYnVmZmVyLnVuc2hpZnQoSWUpOk9lLmJ1ZmZlci5wdXNoKEllKSxPZS5uZWVk'@;
put 'UmVhZGFibGUmJm0oRmUpKSxhZShGZSxPZSl9T2JqZWN0LmRlZmluZVByb3BlcnR5KHAucHJvdG90eXBlLCJkZXN0cm95ZWQiLHtlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiB2b2lkIDAhPT10aGlzLl9yZWFkYWJsZVN0YXRlJiZ0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ry'@;
put 'b3llZH0sc2V0OmZ1bmN0aW9uKE9lKXt0aGlzLl9yZWFkYWJsZVN0YXRlJiYodGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWQ9T2UpfX0pLHAucHJvdG90eXBlLmRlc3Ryb3k9VS5kZXN0cm95LHAucHJvdG90eXBlLl91bmRlc3Ryb3k9VS51bmRlc3Ryb3kscC5wcm90b3R5cGUuX2Rlc3Ry'@;
put 'b3k9ZnVuY3Rpb24oRmUsT2Upe09lKEZlKX0scC5wcm90b3R5cGUucHVzaD1mdW5jdGlvbihGZSxPZSl7dmFyIFZlLEllPXRoaXMuX3JlYWRhYmxlU3RhdGU7cmV0dXJuIEllLm9iamVjdE1vZGU/VmU9ITA6InN0cmluZyI9PXR5cGVvZiBGZSYmKChPZT1PZXx8SWUuZGVmYXVsdEVuY29kaW5n'@;
put 'KSE9PUllLmVuY29kaW5nJiYoRmU9UC5mcm9tKEZlLE9lKSxPZT0iIiksVmU9ITApLGIodGhpcyxGZSxPZSwhMSxWZSl9LHAucHJvdG90eXBlLnVuc2hpZnQ9ZnVuY3Rpb24oRmUpe3JldHVybiBiKHRoaXMsRmUsbnVsbCwhMCwhMSl9LHAucHJvdG90eXBlLmlzUGF1c2VkPWZ1bmN0aW9uKCl7'@;
put 'cmV0dXJuITE9PT10aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmd9LHAucHJvdG90eXBlLnNldEVuY29kaW5nPWZ1bmN0aW9uKEZlKXtsZXx8KGxlPXkoMjU1Mykucyk7dmFyIE9lPW5ldyBsZShGZSk7dGhpcy5fcmVhZGFibGVTdGF0ZS5kZWNvZGVyPU9lLHRoaXMuX3JlYWRhYmxlU3RhdGUu'@;
put 'ZW5jb2Rpbmc9dGhpcy5fcmVhZGFibGVTdGF0ZS5kZWNvZGVyLmVuY29kaW5nO2Zvcih2YXIgSWU9dGhpcy5fcmVhZGFibGVTdGF0ZS5idWZmZXIuaGVhZCxWZT0iIjtudWxsIT09SWU7KVZlKz1PZS53cml0ZShJZS5kYXRhKSxJZT1JZS5uZXh0O3JldHVybiB0aGlzLl9yZWFkYWJsZVN0YXRl'@;
put 'LmJ1ZmZlci5jbGVhcigpLCIiIT09VmUmJnRoaXMuX3JlYWRhYmxlU3RhdGUuYnVmZmVyLnB1c2goVmUpLHRoaXMuX3JlYWRhYmxlU3RhdGUubGVuZ3RoPVZlLmxlbmd0aCx0aGlzfTt2YXIgVD0xMDczNzQxODI0O2Z1bmN0aW9uIGooRmUsT2Upe3JldHVybiBGZTw9MHx8MD09PU9lLmxlbmd0'@;
put 'aCYmT2UuZW5kZWQ/MDpPZS5vYmplY3RNb2RlPzE6RmUhPUZlP09lLmZsb3dpbmcmJk9lLmxlbmd0aD9PZS5idWZmZXIuaGVhZC5kYXRhLmxlbmd0aDpPZS5sZW5ndGg6KEZlPk9lLmhpZ2hXYXRlck1hcmsmJihPZS5oaWdoV2F0ZXJNYXJrPWZ1bmN0aW9uIEgoRmUpe3JldHVybiBGZT49VD9G'@;
put 'ZT1UOihGZS0tLEZlfD1GZT4+PjEsRmV8PUZlPj4+MixGZXw9RmU+Pj40LEZlfD1GZT4+PjgsRmV8PUZlPj4+MTYsRmUrKyksRmV9KEZlKSksRmU8PU9lLmxlbmd0aD9GZTpPZS5lbmRlZD9PZS5sZW5ndGg6KE9lLm5lZWRSZWFkYWJsZT0hMCwwKSl9ZnVuY3Rpb24gbShGZSl7dmFyIE9lPUZl'@;
put 'Ll9yZWFkYWJsZVN0YXRlO0woImVtaXRSZWFkYWJsZSIsT2UubmVlZFJlYWRhYmxlLE9lLmVtaXR0ZWRSZWFkYWJsZSksT2UubmVlZFJlYWRhYmxlPSExLE9lLmVtaXR0ZWRSZWFkYWJsZXx8KEwoImVtaXRSZWFkYWJsZSIsT2UuZmxvd2luZyksT2UuZW1pdHRlZFJlYWRhYmxlPSEwLEkubmV4'@;
put 'dFRpY2soQSxGZSkpfWZ1bmN0aW9uIEEoRmUpe3ZhciBPZT1GZS5fcmVhZGFibGVTdGF0ZTtMKCJlbWl0UmVhZGFibGVfIixPZS5kZXN0cm95ZWQsT2UubGVuZ3RoLE9lLmVuZGVkKSwhT2UuZGVzdHJveWVkJiYoT2UubGVuZ3RofHxPZS5lbmRlZCkmJihGZS5lbWl0KCJyZWFkYWJsZSIpLE9l'@;
put 'LmVtaXR0ZWRSZWFkYWJsZT0hMSksT2UubmVlZFJlYWRhYmxlPSFPZS5mbG93aW5nJiYhT2UuZW5kZWQmJk9lLmxlbmd0aDw9T2UuaGlnaFdhdGVyTWFyayx4ZShGZSl9ZnVuY3Rpb24gYWUoRmUsT2Upe09lLnJlYWRpbmdNb3JlfHwoT2UucmVhZGluZ01vcmU9ITAsSS5uZXh0VGljayh0ZSxG'@;
put 'ZSxPZSkpfWZ1bmN0aW9uIHRlKEZlLE9lKXtmb3IoOyFPZS5yZWFkaW5nJiYhT2UuZW5kZWQmJihPZS5sZW5ndGg8T2UuaGlnaFdhdGVyTWFya3x8T2UuZmxvd2luZyYmMD09PU9lLmxlbmd0aCk7KXt2YXIgSWU9T2UubGVuZ3RoO2lmKEwoIm1heWJlUmVhZE1vcmUgcmVhZCAwIiksRmUucmVh'@;
put 'ZCgwKSxJZT09PU9lLmxlbmd0aClicmVha31PZS5yZWFkaW5nTW9yZT0hMX1mdW5jdGlvbiB3ZShGZSl7dmFyIE9lPUZlLl9yZWFkYWJsZVN0YXRlO09lLnJlYWRhYmxlTGlzdGVuaW5nPUZlLmxpc3RlbmVyQ291bnQoInJlYWRhYmxlIik+MCxPZS5yZXN1bWVTY2hlZHVsZWQmJiFPZS5wYXVz'@;
put 'ZWQ/T2UuZmxvd2luZz0hMDpGZS5saXN0ZW5lckNvdW50KCJkYXRhIik+MCYmRmUucmVzdW1lKCl9ZnVuY3Rpb24gVWUoRmUpe0woInJlYWRhYmxlIG5leHR0aWNrIHJlYWQgMCIpLEZlLnJlYWQoMCl9ZnVuY3Rpb24gb3QoRmUsT2Upe0woInJlc3VtZSIsT2UucmVhZGluZyksT2UucmVhZGlu'@;
put 'Z3x8RmUucmVhZCgwKSxPZS5yZXN1bWVTY2hlZHVsZWQ9ITEsRmUuZW1pdCgicmVzdW1lIikseGUoRmUpLE9lLmZsb3dpbmcmJiFPZS5yZWFkaW5nJiZGZS5yZWFkKDApfWZ1bmN0aW9uIHhlKEZlKXt2YXIgT2U9RmUuX3JlYWRhYmxlU3RhdGU7Zm9yKEwoImZsb3ciLE9lLmZsb3dpbmcpO09l'@;
put 'LmZsb3dpbmcmJm51bGwhPT1GZS5yZWFkKCk7KTt9ZnVuY3Rpb24gdmUoRmUsT2Upe3JldHVybiAwPT09T2UubGVuZ3RoP251bGw6KE9lLm9iamVjdE1vZGU/SWU9T2UuYnVmZmVyLnNoaWZ0KCk6IUZlfHxGZT49T2UubGVuZ3RoPyhJZT1PZS5kZWNvZGVyP09lLmJ1ZmZlci5qb2luKCIiKTox'@;
put 'PT09T2UuYnVmZmVyLmxlbmd0aD9PZS5idWZmZXIuZmlyc3QoKTpPZS5idWZmZXIuY29uY2F0KE9lLmxlbmd0aCksT2UuYnVmZmVyLmNsZWFyKCkpOkllPU9lLmJ1ZmZlci5jb25zdW1lKEZlLE9lLmRlY29kZXIpLEllKTt2YXIgSWV9ZnVuY3Rpb24gWGUoRmUpe3ZhciBPZT1GZS5fcmVhZGFi'@;
put 'bGVTdGF0ZTtMKCJlbmRSZWFkYWJsZSIsT2UuZW5kRW1pdHRlZCksT2UuZW5kRW1pdHRlZHx8KE9lLmVuZGVkPSEwLEkubmV4dFRpY2soemUsT2UsRmUpKX1mdW5jdGlvbiB6ZShGZSxPZSl7aWYoTCgiZW5kUmVhZGFibGVOVCIsRmUuZW5kRW1pdHRlZCxGZS5sZW5ndGgpLCFGZS5lbmRFbWl0'@;
put 'dGVkJiYwPT09RmUubGVuZ3RoJiYoRmUuZW5kRW1pdHRlZD0hMCxPZS5yZWFkYWJsZT0hMSxPZS5lbWl0KCJlbmQiKSxGZS5hdXRvRGVzdHJveSkpe3ZhciBJZT1PZS5fd3JpdGFibGVTdGF0ZTsoIUllfHxJZS5hdXRvRGVzdHJveSYmSWUuZmluaXNoZWQpJiZPZS5kZXN0cm95KCl9fWZ1bmN0'@;
put 'aW9uIERlKEZlLE9lKXtmb3IodmFyIEllPTAsVmU9RmUubGVuZ3RoO0llPFZlO0llKyspaWYoRmVbSWVdPT09T2UpcmV0dXJuIEllO3JldHVybi0xfXAucHJvdG90eXBlLnJlYWQ9ZnVuY3Rpb24oRmUpe0woInJlYWQiLEZlKSxGZT1wYXJzZUludChGZSwxMCk7dmFyIE9lPXRoaXMuX3JlYWRh'@;
put 'YmxlU3RhdGUsSWU9RmU7aWYoMCE9PUZlJiYoT2UuZW1pdHRlZFJlYWRhYmxlPSExKSwwPT09RmUmJk9lLm5lZWRSZWFkYWJsZSYmKCgwIT09T2UuaGlnaFdhdGVyTWFyaz9PZS5sZW5ndGg+PU9lLmhpZ2hXYXRlck1hcms6T2UubGVuZ3RoPjApfHxPZS5lbmRlZCkpcmV0dXJuIEwoInJlYWQ6'@;
put 'IGVtaXRSZWFkYWJsZSIsT2UubGVuZ3RoLE9lLmVuZGVkKSwwPT09T2UubGVuZ3RoJiZPZS5lbmRlZD9YZSh0aGlzKTptKHRoaXMpLG51bGw7aWYoMD09PShGZT1qKEZlLE9lKSkmJk9lLmVuZGVkKXJldHVybiAwPT09T2UubGVuZ3RoJiZYZSh0aGlzKSxudWxsO3ZhciBrZSxWZT1PZS5uZWVk'@;
put 'UmVhZGFibGU7cmV0dXJuIEwoIm5lZWQgcmVhZGFibGUiLFZlKSwoMD09PU9lLmxlbmd0aHx8T2UubGVuZ3RoLUZlPE9lLmhpZ2hXYXRlck1hcmspJiZMKCJsZW5ndGggbGVzcyB0aGFuIHdhdGVybWFyayIsVmU9ITApLE9lLmVuZGVkfHxPZS5yZWFkaW5nP0woInJlYWRpbmcgb3IgZW5kZWQi'@;
put 'LFZlPSExKTpWZSYmKEwoImRvIHJlYWQiKSxPZS5yZWFkaW5nPSEwLE9lLnN5bmM9ITAsMD09PU9lLmxlbmd0aCYmKE9lLm5lZWRSZWFkYWJsZT0hMCksdGhpcy5fcmVhZChPZS5oaWdoV2F0ZXJNYXJrKSxPZS5zeW5jPSExLE9lLnJlYWRpbmd8fChGZT1qKEllLE9lKSkpLG51bGw9PT0oa2U9'@;
put 'RmU+MD92ZShGZSxPZSk6bnVsbCk/KE9lLm5lZWRSZWFkYWJsZT1PZS5sZW5ndGg8PU9lLmhpZ2hXYXRlck1hcmssRmU9MCk6KE9lLmxlbmd0aC09RmUsT2UuYXdhaXREcmFpbj0wKSwwPT09T2UubGVuZ3RoJiYoT2UuZW5kZWR8fChPZS5uZWVkUmVhZGFibGU9ITApLEllIT09RmUmJk9lLmVu'@;
put 'ZGVkJiZYZSh0aGlzKSksbnVsbCE9PWtlJiZ0aGlzLmVtaXQoImRhdGEiLGtlKSxrZX0scC5wcm90b3R5cGUuX3JlYWQ9ZnVuY3Rpb24oRmUpe1RlKHRoaXMsbmV3IG5lKCJfcmVhZCgpIikpfSxwLnByb3RvdHlwZS5waXBlPWZ1bmN0aW9uKEZlLE9lKXt2YXIgSWU9dGhpcyxWZT10aGlzLl9y'@;
put 'ZWFkYWJsZVN0YXRlO3N3aXRjaChWZS5waXBlc0NvdW50KXtjYXNlIDA6VmUucGlwZXM9RmU7YnJlYWs7Y2FzZSAxOlZlLnBpcGVzPVtWZS5waXBlcyxGZV07YnJlYWs7ZGVmYXVsdDpWZS5waXBlcy5wdXNoKEZlKX1WZS5waXBlc0NvdW50Kz0xLEwoInBpcGUgY291bnQ9JWQgb3B0cz0laiIs'@;
put 'VmUucGlwZXNDb3VudCxPZSk7dmFyIEFlPU9lJiYhMT09PU9lLmVuZHx8RmU9PT1JLnN0ZG91dHx8RmU9PT1JLnN0ZGVycj90dDpudDtmdW5jdGlvbiBudCgpe0woIm9uZW5kIiksRmUuZW5kKCl9VmUuZW5kRW1pdHRlZD9JLm5leHRUaWNrKEFlKTpJZS5vbmNlKCJlbmQiLEFlKSxGZS5vbigi'@;
put 'dW5waXBlIixmdW5jdGlvbiBfdChIZSx1dCl7TCgib251bnBpcGUiKSxIZT09PUllJiZ1dCYmITE9PT11dC5oYXNVbnBpcGVkJiYodXQuaGFzVW5waXBlZD0hMCxmdW5jdGlvbiB5dCgpe0woImNsZWFudXAiKSxGZS5yZW1vdmVMaXN0ZW5lcigiY2xvc2UiLGl0KSxGZS5yZW1vdmVMaXN0ZW5l'@;
put 'cigiZmluaXNoIiwkZSksRmUucmVtb3ZlTGlzdGVuZXIoImRyYWluIixRZSksRmUucmVtb3ZlTGlzdGVuZXIoImVycm9yIixEdCksRmUucmVtb3ZlTGlzdGVuZXIoInVucGlwZSIsX3QpLEllLnJlbW92ZUxpc3RlbmVyKCJlbmQiLG50KSxJZS5yZW1vdmVMaXN0ZW5lcigiZW5kIix0dCksSWUu'@;
put 'cmVtb3ZlTGlzdGVuZXIoImRhdGEiLE10KSx1bj0hMCxWZS5hd2FpdERyYWluJiYoIUZlLl93cml0YWJsZVN0YXRlfHxGZS5fd3JpdGFibGVTdGF0ZS5uZWVkRHJhaW4pJiZRZSgpfSgpKX0pO3ZhciBRZT1mdW5jdGlvbiBzZShGZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIEllPUZlLl9yZWFk'@;
put 'YWJsZVN0YXRlO0woInBpcGVPbkRyYWluIixJZS5hd2FpdERyYWluKSxJZS5hd2FpdERyYWluJiZJZS5hd2FpdERyYWluLS0sMD09PUllLmF3YWl0RHJhaW4mJkIoRmUsImRhdGEiKSYmKEllLmZsb3dpbmc9ITAseGUoRmUpKX19KEllKTtGZS5vbigiZHJhaW4iLFFlKTt2YXIgdW49ITE7ZnVu'@;
put 'Y3Rpb24gTXQoSGUpe0woIm9uZGF0YSIpO3ZhciB1dD1GZS53cml0ZShIZSk7TCgiZGVzdC53cml0ZSIsdXQpLCExPT09dXQmJigoMT09PVZlLnBpcGVzQ291bnQmJlZlLnBpcGVzPT09RmV8fFZlLnBpcGVzQ291bnQ+MSYmLTEhPT1EZShWZS5waXBlcyxGZSkpJiYhdW4mJihMKCJmYWxzZSB3'@;
put 'cml0ZSByZXNwb25zZSwgcGF1c2UiLFZlLmF3YWl0RHJhaW4pLFZlLmF3YWl0RHJhaW4rKyksSWUucGF1c2UoKSl9ZnVuY3Rpb24gRHQoSGUpe0woIm9uZXJyb3IiLEhlKSx0dCgpLEZlLnJlbW92ZUxpc3RlbmVyKCJlcnJvciIsRHQpLDA9PT1CKEZlLCJlcnJvciIpJiZUZShGZSxIZSl9ZnVu'@;
put 'Y3Rpb24gaXQoKXtGZS5yZW1vdmVMaXN0ZW5lcigiZmluaXNoIiwkZSksdHQoKX1mdW5jdGlvbiAkZSgpe0woIm9uZmluaXNoIiksRmUucmVtb3ZlTGlzdGVuZXIoImNsb3NlIixpdCksdHQoKX1mdW5jdGlvbiB0dCgpe0woInVucGlwZSIpLEllLnVucGlwZShGZSl9cmV0dXJuIEllLm9uKCJk'@;
put 'YXRhIixNdCksZnVuY3Rpb24gamUoRmUsT2UsSWUpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBGZS5wcmVwZW5kTGlzdGVuZXIpcmV0dXJuIEZlLnByZXBlbmRMaXN0ZW5lcihPZSxJZSk7RmUuX2V2ZW50cyYmRmUuX2V2ZW50c1tPZV0/QXJyYXkuaXNBcnJheShGZS5fZXZlbnRzW09lXSk/RmUu'@;
put 'X2V2ZW50c1tPZV0udW5zaGlmdChJZSk6RmUuX2V2ZW50c1tPZV09W0llLEZlLl9ldmVudHNbT2VdXTpGZS5vbihPZSxJZSl9KEZlLCJlcnJvciIsRHQpLEZlLm9uY2UoImNsb3NlIixpdCksRmUub25jZSgiZmluaXNoIiwkZSksRmUuZW1pdCgicGlwZSIsSWUpLFZlLmZsb3dpbmd8fChMKCJw'@;
put 'aXBlIHJlc3VtZSIpLEllLnJlc3VtZSgpKSxGZX0scC5wcm90b3R5cGUudW5waXBlPWZ1bmN0aW9uKEZlKXt2YXIgT2U9dGhpcy5fcmVhZGFibGVTdGF0ZSxJZT17aGFzVW5waXBlZDohMX07aWYoMD09PU9lLnBpcGVzQ291bnQpcmV0dXJuIHRoaXM7aWYoMT09PU9lLnBpcGVzQ291bnQpcmV0'@;
put 'dXJuIEZlJiZGZSE9PU9lLnBpcGVzfHwoRmV8fChGZT1PZS5waXBlcyksT2UucGlwZXM9bnVsbCxPZS5waXBlc0NvdW50PTAsT2UuZmxvd2luZz0hMSxGZSYmRmUuZW1pdCgidW5waXBlIix0aGlzLEllKSksdGhpcztpZighRmUpe3ZhciBWZT1PZS5waXBlcyxrZT1PZS5waXBlc0NvdW50O09l'@;
put 'LnBpcGVzPW51bGwsT2UucGlwZXNDb3VudD0wLE9lLmZsb3dpbmc9ITE7Zm9yKHZhciBBZT0wO0FlPGtlO0FlKyspVmVbQWVdLmVtaXQoInVucGlwZSIsdGhpcyx7aGFzVW5waXBlZDohMX0pO3JldHVybiB0aGlzfXZhciBfdD1EZShPZS5waXBlcyxGZSk7cmV0dXJuLTE9PT1fdHx8KE9lLnBp'@;
put 'cGVzLnNwbGljZShfdCwxKSxPZS5waXBlc0NvdW50LT0xLDE9PT1PZS5waXBlc0NvdW50JiYoT2UucGlwZXM9T2UucGlwZXNbMF0pLEZlLmVtaXQoInVucGlwZSIsdGhpcyxJZSkpLHRoaXN9LHAucHJvdG90eXBlLmFkZExpc3RlbmVyPXAucHJvdG90eXBlLm9uPWZ1bmN0aW9uKEZlLE9lKXt2'@;
put 'YXIgSWU9dy5wcm90b3R5cGUub24uY2FsbCh0aGlzLEZlLE9lKSxWZT10aGlzLl9yZWFkYWJsZVN0YXRlO3JldHVybiJkYXRhIj09PUZlPyhWZS5yZWFkYWJsZUxpc3RlbmluZz10aGlzLmxpc3RlbmVyQ291bnQoInJlYWRhYmxlIik+MCwhMSE9PVZlLmZsb3dpbmcmJnRoaXMucmVzdW1lKCkp'@;
put 'OiJyZWFkYWJsZSI9PT1GZSYmIVZlLmVuZEVtaXR0ZWQmJiFWZS5yZWFkYWJsZUxpc3RlbmluZyYmKFZlLnJlYWRhYmxlTGlzdGVuaW5nPVZlLm5lZWRSZWFkYWJsZT0hMCxWZS5mbG93aW5nPSExLFZlLmVtaXR0ZWRSZWFkYWJsZT0hMSxMKCJvbiByZWFkYWJsZSIsVmUubGVuZ3RoLFZlLnJl'@;
put 'YWRpbmcpLFZlLmxlbmd0aD9tKHRoaXMpOlZlLnJlYWRpbmd8fEkubmV4dFRpY2soVWUsdGhpcykpLEllfSxwLnByb3RvdHlwZS5yZW1vdmVMaXN0ZW5lcj1mdW5jdGlvbihGZSxPZSl7dmFyIEllPXcucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyLmNhbGwodGhpcyxGZSxPZSk7cmV0dXJuInJl'@;
put 'YWRhYmxlIj09PUZlJiZJLm5leHRUaWNrKHdlLHRoaXMpLEllfSxwLnByb3RvdHlwZS5yZW1vdmVBbGxMaXN0ZW5lcnM9ZnVuY3Rpb24oRmUpe3ZhciBPZT13LnByb3RvdHlwZS5yZW1vdmVBbGxMaXN0ZW5lcnMuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybigicmVhZGFibGUiPT09RmV8'@;
put 'fHZvaWQgMD09PUZlKSYmSS5uZXh0VGljayh3ZSx0aGlzKSxPZX0scC5wcm90b3R5cGUucmVzdW1lPWZ1bmN0aW9uKCl7dmFyIEZlPXRoaXMuX3JlYWRhYmxlU3RhdGU7cmV0dXJuIEZlLmZsb3dpbmd8fChMKCJyZXN1bWUiKSxGZS5mbG93aW5nPSFGZS5yZWFkYWJsZUxpc3RlbmluZyxmdW5j'@;
put 'dGlvbiBKZShGZSxPZSl7T2UucmVzdW1lU2NoZWR1bGVkfHwoT2UucmVzdW1lU2NoZWR1bGVkPSEwLEkubmV4dFRpY2sob3QsRmUsT2UpKX0odGhpcyxGZSkpLEZlLnBhdXNlZD0hMSx0aGlzfSxwLnByb3RvdHlwZS5wYXVzZT1mdW5jdGlvbigpe3JldHVybiBMKCJjYWxsIHBhdXNlIGZsb3dp'@;
put 'bmc9JWoiLHRoaXMuX3JlYWRhYmxlU3RhdGUuZmxvd2luZyksITEhPT10aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmcmJihMKCJwYXVzZSIpLHRoaXMuX3JlYWRhYmxlU3RhdGUuZmxvd2luZz0hMSx0aGlzLmVtaXQoInBhdXNlIikpLHRoaXMuX3JlYWRhYmxlU3RhdGUucGF1c2VkPSEwLHRo'@;
put 'aXN9LHAucHJvdG90eXBlLndyYXA9ZnVuY3Rpb24oRmUpe3ZhciBPZT10aGlzLEllPXRoaXMuX3JlYWRhYmxlU3RhdGUsVmU9ITE7Zm9yKHZhciBrZSBpbiBGZS5vbigiZW5kIixmdW5jdGlvbigpe2lmKEwoIndyYXBwZWQgZW5kIiksSWUuZGVjb2RlciYmIUllLmVuZGVkKXt2YXIgX3Q9SWUu'@;
put 'ZGVjb2Rlci5lbmQoKTtfdCYmX3QubGVuZ3RoJiZPZS5wdXNoKF90KX1PZS5wdXNoKG51bGwpfSksRmUub24oImRhdGEiLGZ1bmN0aW9uKF90KXtMKCJ3cmFwcGVkIGRhdGEiKSxJZS5kZWNvZGVyJiYoX3Q9SWUuZGVjb2Rlci53cml0ZShfdCkpLEllLm9iamVjdE1vZGUmJm51bGw9PV90fHwh'@;
put 'KEllLm9iamVjdE1vZGV8fF90JiZfdC5sZW5ndGgpfHxPZS5wdXNoKF90KXx8KFZlPSEwLEZlLnBhdXNlKCkpfSksRmUpdm9pZCAwPT09dGhpc1trZV0mJiJmdW5jdGlvbiI9PXR5cGVvZiBGZVtrZV0mJih0aGlzW2tlXT1mdW5jdGlvbihudCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIEZl'@;
put 'W250XS5hcHBseShGZSxhcmd1bWVudHMpfX0oa2UpKTtmb3IodmFyIEFlPTA7QWU8U2UubGVuZ3RoO0FlKyspRmUub24oU2VbQWVdLHRoaXMuZW1pdC5iaW5kKHRoaXMsU2VbQWVdKSk7cmV0dXJuIHRoaXMuX3JlYWQ9ZnVuY3Rpb24oX3Qpe0woIndyYXBwZWQgX3JlYWQiLF90KSxWZSYmKFZl'@;
put 'PSExLEZlLnJlc3VtZSgpKX0sdGhpc30sImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmKHAucHJvdG90eXBlW1N5bWJvbC5hc3luY0l0ZXJhdG9yXT1mdW5jdGlvbigpe3JldHVybiB2b2lkIDA9PT1tZSYmKG1lPXkoNTg1MCkpLG1lKHRoaXMpfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHAu'@;
put 'cHJvdG90eXBlLCJyZWFkYWJsZUhpZ2hXYXRlck1hcmsiLHtlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9yZWFkYWJsZVN0YXRlLmhpZ2hXYXRlck1hcmt9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHAucHJvdG90eXBlLCJyZWFkYWJsZUJ1ZmZlciIse2VudW1l'@;
put 'cmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JlYWRhYmxlU3RhdGUmJnRoaXMuX3JlYWRhYmxlU3RhdGUuYnVmZmVyfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShwLnByb3RvdHlwZSwicmVhZGFibGVGbG93aW5nIix7ZW51bWVyYWJsZTohMSxnZXQ6ZnVuY3Rpb24oKXty'@;
put 'ZXR1cm4gdGhpcy5fcmVhZGFibGVTdGF0ZS5mbG93aW5nfSxzZXQ6ZnVuY3Rpb24oT2Upe3RoaXMuX3JlYWRhYmxlU3RhdGUmJih0aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmc9T2UpfX0pLHAuX2Zyb21MaXN0PXZlLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShwLnByb3RvdHlwZSwicmVhZGFi'@;
put 'bGVMZW5ndGgiLHtlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9yZWFkYWJsZVN0YXRlLmxlbmd0aH19KSwiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYocC5mcm9tPWZ1bmN0aW9uKEZlLE9lKXtyZXR1cm4gdm9pZCAwPT09X2UmJihfZT15KDUxNjcpKSxfZShw'@;
put 'LEZlLE9lKX0pfSw0NjA1Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3VlLmV4cG9ydHM9Tzt2YXIgST15KDQyODEpLnEsXz1JLkVSUl9NRVRIT0RfTk9UX0lNUExFTUVOVEVELGc9SS5FUlJfTVVMVElQTEVfQ0FMTEJBQ0ssQj1JLkVSUl9UUkFOU0ZPUk1fQUxSRUFEWV9UUkFOU0ZPUk1JTkcs'@;
put 'dz1JLkVSUl9UUkFOU0ZPUk1fV0lUSF9MRU5HVEhfMCxQPXkoNjc1Myk7ZnVuY3Rpb24gRihMLEspe3ZhciBVPXRoaXMuX3RyYW5zZm9ybVN0YXRlO1UudHJhbnNmb3JtaW5nPSExO3ZhciBXPVUud3JpdGVjYjtpZihudWxsPT09VylyZXR1cm4gdGhpcy5lbWl0KCJlcnJvciIsbmV3IGcpO1Uu'@;
put 'd3JpdGVjaHVuaz1udWxsLFUud3JpdGVjYj1udWxsLG51bGwhPUsmJnRoaXMucHVzaChLKSxXKEwpO3ZhciBZPXRoaXMuX3JlYWRhYmxlU3RhdGU7WS5yZWFkaW5nPSExLChZLm5lZWRSZWFkYWJsZXx8WS5sZW5ndGg8WS5oaWdoV2F0ZXJNYXJrKSYmdGhpcy5fcmVhZChZLmhpZ2hXYXRlck1h'@;
put 'cmspfWZ1bmN0aW9uIE8oTCl7aWYoISh0aGlzIGluc3RhbmNlb2YgTykpcmV0dXJuIG5ldyBPKEwpO1AuY2FsbCh0aGlzLEwpLHRoaXMuX3RyYW5zZm9ybVN0YXRlPXthZnRlclRyYW5zZm9ybTpGLmJpbmQodGhpcyksbmVlZFRyYW5zZm9ybTohMSx0cmFuc2Zvcm1pbmc6ITEsd3JpdGVjYjpu'@;
put 'dWxsLHdyaXRlY2h1bms6bnVsbCx3cml0ZWVuY29kaW5nOm51bGx9LHRoaXMuX3JlYWRhYmxlU3RhdGUubmVlZFJlYWRhYmxlPSEwLHRoaXMuX3JlYWRhYmxlU3RhdGUuc3luYz0hMSxMJiYoImZ1bmN0aW9uIj09dHlwZW9mIEwudHJhbnNmb3JtJiYodGhpcy5fdHJhbnNmb3JtPUwudHJhbnNm'@;
put 'b3JtKSwiZnVuY3Rpb24iPT10eXBlb2YgTC5mbHVzaCYmKHRoaXMuX2ZsdXNoPUwuZmx1c2gpKSx0aGlzLm9uKCJwcmVmaW5pc2giLHopfWZ1bmN0aW9uIHooKXt2YXIgTD10aGlzOyJmdW5jdGlvbiIhPXR5cGVvZiB0aGlzLl9mbHVzaHx8dGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWQ/'@;
put 'Tih0aGlzLG51bGwsbnVsbCk6dGhpcy5fZmx1c2goZnVuY3Rpb24oSyxVKXtOKEwsSyxVKX0pfWZ1bmN0aW9uIE4oTCxLLFUpe2lmKEspcmV0dXJuIEwuZW1pdCgiZXJyb3IiLEspO2lmKG51bGwhPVUmJkwucHVzaChVKSxMLl93cml0YWJsZVN0YXRlLmxlbmd0aCl0aHJvdyBuZXcgdztpZihM'@;
put 'Ll90cmFuc2Zvcm1TdGF0ZS50cmFuc2Zvcm1pbmcpdGhyb3cgbmV3IEI7cmV0dXJuIEwucHVzaChudWxsKX15KDU3MTcpKE8sUCksTy5wcm90b3R5cGUucHVzaD1mdW5jdGlvbihMLEspe3JldHVybiB0aGlzLl90cmFuc2Zvcm1TdGF0ZS5uZWVkVHJhbnNmb3JtPSExLFAucHJvdG90eXBlLnB1'@;
put 'c2guY2FsbCh0aGlzLEwsSyl9LE8ucHJvdG90eXBlLl90cmFuc2Zvcm09ZnVuY3Rpb24oTCxLLFUpe1UobmV3IF8oIl90cmFuc2Zvcm0oKSIpKX0sTy5wcm90b3R5cGUuX3dyaXRlPWZ1bmN0aW9uKEwsSyxVKXt2YXIgVz10aGlzLl90cmFuc2Zvcm1TdGF0ZTtpZihXLndyaXRlY2I9VSxXLndy'@;
put 'aXRlY2h1bms9TCxXLndyaXRlZW5jb2Rpbmc9SywhVy50cmFuc2Zvcm1pbmcpe3ZhciBZPXRoaXMuX3JlYWRhYmxlU3RhdGU7KFcubmVlZFRyYW5zZm9ybXx8WS5uZWVkUmVhZGFibGV8fFkubGVuZ3RoPFkuaGlnaFdhdGVyTWFyaykmJnRoaXMuX3JlYWQoWS5oaWdoV2F0ZXJNYXJrKX19LE8u'@;
put 'cHJvdG90eXBlLl9yZWFkPWZ1bmN0aW9uKEwpe3ZhciBLPXRoaXMuX3RyYW5zZm9ybVN0YXRlO251bGw9PT1LLndyaXRlY2h1bmt8fEsudHJhbnNmb3JtaW5nP0submVlZFRyYW5zZm9ybT0hMDooSy50cmFuc2Zvcm1pbmc9ITAsdGhpcy5fdHJhbnNmb3JtKEsud3JpdGVjaHVuayxLLndyaXRl'@;
put 'ZW5jb2RpbmcsSy5hZnRlclRyYW5zZm9ybSkpfSxPLnByb3RvdHlwZS5fZGVzdHJveT1mdW5jdGlvbihMLEspe1AucHJvdG90eXBlLl9kZXN0cm95LmNhbGwodGhpcyxMLGZ1bmN0aW9uKFUpe0soVSl9KX19LDQyMjk6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEIsST15KDQxNTUpO2Z1'@;
put 'bmN0aW9uIGcoeGUpe3ZhciB2ZT10aGlzO3RoaXMubmV4dD1udWxsLHRoaXMuZW50cnk9bnVsbCx0aGlzLmZpbmlzaD1mdW5jdGlvbigpeyFmdW5jdGlvbiBvdCh4ZSx2ZSxYZSl7dmFyIHplPXhlLmVudHJ5O2Zvcih4ZS5lbnRyeT1udWxsO3plOyl7dmFyIERlPXplLmNhbGxiYWNrO3ZlLnBl'@;
put 'bmRpbmdjYi0tLERlKFhlKSx6ZT16ZS5uZXh0fXZlLmNvcmtlZFJlcXVlc3RzRnJlZS5uZXh0PXhlfSh2ZSx4ZSl9fXVlLmV4cG9ydHM9VixWLldyaXRhYmxlU3RhdGU9U2U7dmFyIGplLHc9e2RlcHJlY2F0ZTp5KDQ5MjcpfSxQPXkoMjUwMyksRj15KDg3NjQpLkJ1ZmZlcixPPSh0eXBlb2Yg'@;
put 'eS5nPCJ1Ij95Lmc6dHlwZW9mIHdpbmRvdzwidSI/d2luZG93OnR5cGVvZiBzZWxmPCJ1Ij9zZWxmOnt9KS5VaW50OEFycmF5fHxmdW5jdGlvbigpe30sTD15KDExOTUpLFU9eSgyNDU3KS5nZXRIaWdoV2F0ZXJNYXJrLFc9eSg0MjgxKS5xLFk9Vy5FUlJfSU5WQUxJRF9BUkdfVFlQRSxxPVcu'@;
put 'RVJSX01FVEhPRF9OT1RfSU1QTEVNRU5URUQsZWU9Vy5FUlJfTVVMVElQTEVfQ0FMTEJBQ0ssSj1XLkVSUl9TVFJFQU1fQ0FOTk9UX1BJUEUsbmU9Vy5FUlJfU1RSRUFNX0RFU1RST1lFRCxpZT1XLkVSUl9TVFJFQU1fTlVMTF9WQUxVRVMsbGU9Vy5FUlJfU1RSRUFNX1dSSVRFX0FGVEVSX0VO'@;
put 'RCxtZT1XLkVSUl9VTktOT1dOX0VOQ09ESU5HLF9lPUwuZXJyb3JPckRlc3Ryb3k7ZnVuY3Rpb24gVGUoKXt9ZnVuY3Rpb24gU2UoeGUsdmUsWGUpe0I9Qnx8eSg2NzUzKSwiYm9vbGVhbiIhPXR5cGVvZiBYZSYmKFhlPXZlIGluc3RhbmNlb2YgQiksdGhpcy5vYmplY3RNb2RlPSEhKHhlPXhl'@;
put 'fHx7fSkub2JqZWN0TW9kZSxYZSYmKHRoaXMub2JqZWN0TW9kZT10aGlzLm9iamVjdE1vZGV8fCEheGUud3JpdGFibGVPYmplY3RNb2RlKSx0aGlzLmhpZ2hXYXRlck1hcms9VSh0aGlzLHhlLCJ3cml0YWJsZUhpZ2hXYXRlck1hcmsiLFhlKSx0aGlzLmZpbmFsQ2FsbGVkPSExLHRoaXMubmVl'@;
put 'ZERyYWluPSExLHRoaXMuZW5kaW5nPSExLHRoaXMuZW5kZWQ9ITEsdGhpcy5maW5pc2hlZD0hMSx0aGlzLmRlc3Ryb3llZD0hMSx0aGlzLmRlY29kZVN0cmluZ3M9ISghMT09PXhlLmRlY29kZVN0cmluZ3MpLHRoaXMuZGVmYXVsdEVuY29kaW5nPXhlLmRlZmF1bHRFbmNvZGluZ3x8InV0Zjgi'@;
put 'LHRoaXMubGVuZ3RoPTAsdGhpcy53cml0aW5nPSExLHRoaXMuY29ya2VkPTAsdGhpcy5zeW5jPSEwLHRoaXMuYnVmZmVyUHJvY2Vzc2luZz0hMSx0aGlzLm9ud3JpdGU9ZnVuY3Rpb24oRGUpeyFmdW5jdGlvbiBFKHhlLHZlKXt2YXIgWGU9eGUuX3dyaXRhYmxlU3RhdGUsemU9WGUuc3luYyxE'@;
put 'ZT1YZS53cml0ZWNiO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBEZSl0aHJvdyBuZXcgZWU7aWYoZnVuY3Rpb24gaih4ZSl7eGUud3JpdGluZz0hMSx4ZS53cml0ZWNiPW51bGwseGUubGVuZ3RoLT14ZS53cml0ZWxlbix4ZS53cml0ZWxlbj0wfShYZSksdmUpIWZ1bmN0aW9uIEgoeGUsdmUsWGUs'@;
put 'emUsRGUpey0tdmUucGVuZGluZ2NiLFhlPyhJLm5leHRUaWNrKERlLHplKSxJLm5leHRUaWNrKFVlLHhlLHZlKSx4ZS5fd3JpdGFibGVTdGF0ZS5lcnJvckVtaXR0ZWQ9ITAsX2UoeGUsemUpKTooRGUoemUpLHhlLl93cml0YWJsZVN0YXRlLmVycm9yRW1pdHRlZD0hMCxfZSh4ZSx6ZSksVWUo'@;
put 'eGUsdmUpKX0oeGUsWGUsemUsdmUsRGUpO2Vsc2V7dmFyIEZlPXRlKFhlKXx8eGUuZGVzdHJveWVkOyFGZSYmIVhlLmNvcmtlZCYmIVhlLmJ1ZmZlclByb2Nlc3NpbmcmJlhlLmJ1ZmZlcmVkUmVxdWVzdCYmYWUoeGUsWGUpLHplP0kubmV4dFRpY2sobSx4ZSxYZSxGZSxEZSk6bSh4ZSxYZSxG'@;
put 'ZSxEZSl9fSh2ZSxEZSl9LHRoaXMud3JpdGVjYj1udWxsLHRoaXMud3JpdGVsZW49MCx0aGlzLmJ1ZmZlcmVkUmVxdWVzdD1udWxsLHRoaXMubGFzdEJ1ZmZlcmVkUmVxdWVzdD1udWxsLHRoaXMucGVuZGluZ2NiPTAsdGhpcy5wcmVmaW5pc2hlZD0hMSx0aGlzLmVycm9yRW1pdHRlZD0hMSx0'@;
put 'aGlzLmVtaXRDbG9zZT0hMSE9PXhlLmVtaXRDbG9zZSx0aGlzLmF1dG9EZXN0cm95PSEheGUuYXV0b0Rlc3Ryb3ksdGhpcy5idWZmZXJlZFJlcXVlc3RDb3VudD0wLHRoaXMuY29ya2VkUmVxdWVzdHNGcmVlPW5ldyBnKHRoaXMpfWZ1bmN0aW9uIFYoeGUpe3ZhciB2ZT10aGlzIGluc3RhbmNl'@;
put 'b2YoQj1CfHx5KDY3NTMpKTtpZighdmUmJiFqZS5jYWxsKFYsdGhpcykpcmV0dXJuIG5ldyBWKHhlKTt0aGlzLl93cml0YWJsZVN0YXRlPW5ldyBTZSh4ZSx0aGlzLHZlKSx0aGlzLndyaXRhYmxlPSEwLHhlJiYoImZ1bmN0aW9uIj09dHlwZW9mIHhlLndyaXRlJiYodGhpcy5fd3JpdGU9eGUu'@;
put 'd3JpdGUpLCJmdW5jdGlvbiI9PXR5cGVvZiB4ZS53cml0ZXYmJih0aGlzLl93cml0ZXY9eGUud3JpdGV2KSwiZnVuY3Rpb24iPT10eXBlb2YgeGUuZGVzdHJveSYmKHRoaXMuX2Rlc3Ryb3k9eGUuZGVzdHJveSksImZ1bmN0aW9uIj09dHlwZW9mIHhlLmZpbmFsJiYodGhpcy5fZmluYWw9eGUu'@;
put 'ZmluYWwpKSxQLmNhbGwodGhpcyl9ZnVuY3Rpb24gVCh4ZSx2ZSxYZSx6ZSxEZSxGZSxPZSl7dmUud3JpdGVsZW49emUsdmUud3JpdGVjYj1PZSx2ZS53cml0aW5nPSEwLHZlLnN5bmM9ITAsdmUuZGVzdHJveWVkP3ZlLm9ud3JpdGUobmV3IG5lKCJ3cml0ZSIpKTpYZT94ZS5fd3JpdGV2KERl'@;
put 'LHZlLm9ud3JpdGUpOnhlLl93cml0ZShEZSxGZSx2ZS5vbndyaXRlKSx2ZS5zeW5jPSExfWZ1bmN0aW9uIG0oeGUsdmUsWGUsemUpe1hlfHxmdW5jdGlvbiBBKHhlLHZlKXswPT09dmUubGVuZ3RoJiZ2ZS5uZWVkRHJhaW4mJih2ZS5uZWVkRHJhaW49ITEseGUuZW1pdCgiZHJhaW4iKSl9KHhl'@;
put 'LHZlKSx2ZS5wZW5kaW5nY2ItLSx6ZSgpLFVlKHhlLHZlKX1mdW5jdGlvbiBhZSh4ZSx2ZSl7dmUuYnVmZmVyUHJvY2Vzc2luZz0hMDt2YXIgWGU9dmUuYnVmZmVyZWRSZXF1ZXN0O2lmKHhlLl93cml0ZXYmJlhlJiZYZS5uZXh0KXt2YXIgRGU9bmV3IEFycmF5KHZlLmJ1ZmZlcmVkUmVxdWVz'@;
put 'dENvdW50KSxGZT12ZS5jb3JrZWRSZXF1ZXN0c0ZyZWU7RmUuZW50cnk9WGU7Zm9yKHZhciBPZT0wLEllPSEwO1hlOylEZVtPZV09WGUsWGUuaXNCdWZ8fChJZT0hMSksWGU9WGUubmV4dCxPZSs9MTtEZS5hbGxCdWZmZXJzPUllLFQoeGUsdmUsITAsdmUubGVuZ3RoLERlLCIiLEZlLmZpbmlz'@;
put 'aCksdmUucGVuZGluZ2NiKyssdmUubGFzdEJ1ZmZlcmVkUmVxdWVzdD1udWxsLEZlLm5leHQ/KHZlLmNvcmtlZFJlcXVlc3RzRnJlZT1GZS5uZXh0LEZlLm5leHQ9bnVsbCk6dmUuY29ya2VkUmVxdWVzdHNGcmVlPW5ldyBnKHZlKSx2ZS5idWZmZXJlZFJlcXVlc3RDb3VudD0wfWVsc2V7Zm9y'@;
put 'KDtYZTspe3ZhciBWZT1YZS5jaHVuaztpZihUKHhlLHZlLCExLHZlLm9iamVjdE1vZGU/MTpWZS5sZW5ndGgsVmUsWGUuZW5jb2RpbmcsWGUuY2FsbGJhY2spLFhlPVhlLm5leHQsdmUuYnVmZmVyZWRSZXF1ZXN0Q291bnQtLSx2ZS53cml0aW5nKWJyZWFrfW51bGw9PT1YZSYmKHZlLmxhc3RC'@;
put 'dWZmZXJlZFJlcXVlc3Q9bnVsbCl9dmUuYnVmZmVyZWRSZXF1ZXN0PVhlLHZlLmJ1ZmZlclByb2Nlc3Npbmc9ITF9ZnVuY3Rpb24gdGUoeGUpe3JldHVybiB4ZS5lbmRpbmcmJjA9PT14ZS5sZW5ndGgmJm51bGw9PT14ZS5idWZmZXJlZFJlcXVlc3QmJiF4ZS5maW5pc2hlZCYmIXhlLndyaXRp'@;
put 'bmd9ZnVuY3Rpb24gc2UoeGUsdmUpe3hlLl9maW5hbChmdW5jdGlvbihYZSl7dmUucGVuZGluZ2NiLS0sWGUmJl9lKHhlLFhlKSx2ZS5wcmVmaW5pc2hlZD0hMCx4ZS5lbWl0KCJwcmVmaW5pc2giKSxVZSh4ZSx2ZSl9KX1mdW5jdGlvbiBVZSh4ZSx2ZSl7dmFyIFhlPXRlKHZlKTtpZihYZSYm'@;
put 'KGZ1bmN0aW9uIHdlKHhlLHZlKXshdmUucHJlZmluaXNoZWQmJiF2ZS5maW5hbENhbGxlZCYmKCJmdW5jdGlvbiIhPXR5cGVvZiB4ZS5fZmluYWx8fHZlLmRlc3Ryb3llZD8odmUucHJlZmluaXNoZWQ9ITAseGUuZW1pdCgicHJlZmluaXNoIikpOih2ZS5wZW5kaW5nY2IrKyx2ZS5maW5hbENh'@;
put 'bGxlZD0hMCxJLm5leHRUaWNrKHNlLHhlLHZlKSkpfSh4ZSx2ZSksMD09PXZlLnBlbmRpbmdjYiYmKHZlLmZpbmlzaGVkPSEwLHhlLmVtaXQoImZpbmlzaCIpLHZlLmF1dG9EZXN0cm95KSkpe3ZhciB6ZT14ZS5fcmVhZGFibGVTdGF0ZTsoIXplfHx6ZS5hdXRvRGVzdHJveSYmemUuZW5kRW1p'@;
put 'dHRlZCkmJnhlLmRlc3Ryb3koKX1yZXR1cm4gWGV9eSg1NzE3KShWLFApLFNlLnByb3RvdHlwZS5nZXRCdWZmZXI9ZnVuY3Rpb24oKXtmb3IodmFyIHZlPXRoaXMuYnVmZmVyZWRSZXF1ZXN0LFhlPVtdO3ZlOylYZS5wdXNoKHZlKSx2ZT12ZS5uZXh0O3JldHVybiBYZX0sZnVuY3Rpb24oKXt0'@;
put 'cnl7T2JqZWN0LmRlZmluZVByb3BlcnR5KFNlLnByb3RvdHlwZSwiYnVmZmVyIix7Z2V0OncuZGVwcmVjYXRlKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0QnVmZmVyKCl9LCJfd3JpdGFibGVTdGF0ZS5idWZmZXIgaXMgZGVwcmVjYXRlZC4gVXNlIF93cml0YWJsZVN0YXRlLmdldEJ1ZmZl'@;
put 'ciBpbnN0ZWFkLiIsIkRFUDAwMDMiKX0pfWNhdGNoe319KCksImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmU3ltYm9sLmhhc0luc3RhbmNlJiYiZnVuY3Rpb24iPT10eXBlb2YgRnVuY3Rpb24ucHJvdG90eXBlW1N5bWJvbC5oYXNJbnN0YW5jZV0/KGplPUZ1bmN0aW9uLnByb3RvdHlwZVtT'@;
put 'eW1ib2wuaGFzSW5zdGFuY2VdLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShWLFN5bWJvbC5oYXNJbnN0YW5jZSx7dmFsdWU6ZnVuY3Rpb24odmUpe3JldHVybiEhamUuY2FsbCh0aGlzLHZlKXx8dGhpcz09PVYmJnZlJiZ2ZS5fd3JpdGFibGVTdGF0ZSBpbnN0YW5jZW9mIFNlfX0pKTpqZT1mdW5j'@;
put 'dGlvbih2ZSl7cmV0dXJuIHZlIGluc3RhbmNlb2YgdGhpc30sVi5wcm90b3R5cGUucGlwZT1mdW5jdGlvbigpe19lKHRoaXMsbmV3IEopfSxWLnByb3RvdHlwZS53cml0ZT1mdW5jdGlvbih4ZSx2ZSxYZSl7dmFyIHplPXRoaXMuX3dyaXRhYmxlU3RhdGUsRGU9ITEsRmU9IXplLm9iamVjdE1v'@;
put 'ZGUmJmZ1bmN0aW9uIE4oeGUpe3JldHVybiBGLmlzQnVmZmVyKHhlKXx8eGUgaW5zdGFuY2VvZiBPfSh4ZSk7cmV0dXJuIEZlJiYhRi5pc0J1ZmZlcih4ZSkmJih4ZT1mdW5jdGlvbiB6KHhlKXtyZXR1cm4gRi5mcm9tKHhlKX0oeGUpKSwiZnVuY3Rpb24iPT10eXBlb2YgdmUmJihYZT12ZSx2'@;
put 'ZT1udWxsKSxGZT92ZT0iYnVmZmVyIjp2ZXx8KHZlPXplLmRlZmF1bHRFbmNvZGluZyksImZ1bmN0aW9uIiE9dHlwZW9mIFhlJiYoWGU9VGUpLHplLmVuZGluZz9mdW5jdGlvbiBwKHhlLHZlKXt2YXIgWGU9bmV3IGxlO19lKHhlLFhlKSxJLm5leHRUaWNrKHZlLFhlKX0odGhpcyxYZSk6KEZl'@;
put 'fHxmdW5jdGlvbiBiKHhlLHZlLFhlLHplKXt2YXIgRGU7cmV0dXJuIG51bGw9PT1YZT9EZT1uZXcgaWU6InN0cmluZyIhPXR5cGVvZiBYZSYmIXZlLm9iamVjdE1vZGUmJihEZT1uZXcgWSgiY2h1bmsiLFsic3RyaW5nIiwiQnVmZmVyIl0sWGUpKSwhRGV8fChfZSh4ZSxEZSksSS5uZXh0VGlj'@;
put 'ayh6ZSxEZSksITEpfSh0aGlzLHplLHhlLFhlKSkmJih6ZS5wZW5kaW5nY2IrKyxEZT1mdW5jdGlvbiBDKHhlLHZlLFhlLHplLERlLEZlKXtpZighWGUpe3ZhciBPZT1mdW5jdGlvbiB4KHhlLHZlLFhlKXtyZXR1cm4heGUub2JqZWN0TW9kZSYmITEhPT14ZS5kZWNvZGVTdHJpbmdzJiYic3Ry'@;
put 'aW5nIj09dHlwZW9mIHZlJiYodmU9Ri5mcm9tKHZlLFhlKSksdmV9KHZlLHplLERlKTt6ZSE9PU9lJiYoWGU9ITAsRGU9ImJ1ZmZlciIsemU9T2UpfXZhciBJZT12ZS5vYmplY3RNb2RlPzE6emUubGVuZ3RoO3ZlLmxlbmd0aCs9SWU7dmFyIFZlPXZlLmxlbmd0aDx2ZS5oaWdoV2F0ZXJNYXJr'@;
put 'O2lmKFZlfHwodmUubmVlZERyYWluPSEwKSx2ZS53cml0aW5nfHx2ZS5jb3JrZWQpe3ZhciBrZT12ZS5sYXN0QnVmZmVyZWRSZXF1ZXN0O3ZlLmxhc3RCdWZmZXJlZFJlcXVlc3Q9e2NodW5rOnplLGVuY29kaW5nOkRlLGlzQnVmOlhlLGNhbGxiYWNrOkZlLG5leHQ6bnVsbH0sa2U/a2UubmV4'@;
put 'dD12ZS5sYXN0QnVmZmVyZWRSZXF1ZXN0OnZlLmJ1ZmZlcmVkUmVxdWVzdD12ZS5sYXN0QnVmZmVyZWRSZXF1ZXN0LHZlLmJ1ZmZlcmVkUmVxdWVzdENvdW50Kz0xfWVsc2UgVCh4ZSx2ZSwhMSxJZSx6ZSxEZSxGZSk7cmV0dXJuIFZlfSh0aGlzLHplLEZlLHhlLHZlLFhlKSksRGV9LFYucHJv'@;
put 'dG90eXBlLmNvcms9ZnVuY3Rpb24oKXt0aGlzLl93cml0YWJsZVN0YXRlLmNvcmtlZCsrfSxWLnByb3RvdHlwZS51bmNvcms9ZnVuY3Rpb24oKXt2YXIgeGU9dGhpcy5fd3JpdGFibGVTdGF0ZTt4ZS5jb3JrZWQmJih4ZS5jb3JrZWQtLSwheGUud3JpdGluZyYmIXhlLmNvcmtlZCYmIXhlLmJ1'@;
put 'ZmZlclByb2Nlc3NpbmcmJnhlLmJ1ZmZlcmVkUmVxdWVzdCYmYWUodGhpcyx4ZSkpfSxWLnByb3RvdHlwZS5zZXREZWZhdWx0RW5jb2Rpbmc9ZnVuY3Rpb24odmUpe2lmKCJzdHJpbmciPT10eXBlb2YgdmUmJih2ZT12ZS50b0xvd2VyQ2FzZSgpKSwhKFsiaGV4IiwidXRmOCIsInV0Zi04Iiwi'@;
put 'YXNjaWkiLCJiaW5hcnkiLCJiYXNlNjQiLCJ1Y3MyIiwidWNzLTIiLCJ1dGYxNmxlIiwidXRmLTE2bGUiLCJyYXciXS5pbmRleE9mKCh2ZSsiIikudG9Mb3dlckNhc2UoKSk+LTEpKXRocm93IG5ldyBtZSh2ZSk7cmV0dXJuIHRoaXMuX3dyaXRhYmxlU3RhdGUuZGVmYXVsdEVuY29kaW5nPXZl'@;
put 'LHRoaXN9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShWLnByb3RvdHlwZSwid3JpdGFibGVCdWZmZXIiLHtlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl93cml0YWJsZVN0YXRlJiZ0aGlzLl93cml0YWJsZVN0YXRlLmdldEJ1ZmZlcigpfX0pLE9iamVjdC5kZWZpbmVQ'@;
put 'cm9wZXJ0eShWLnByb3RvdHlwZSwid3JpdGFibGVIaWdoV2F0ZXJNYXJrIix7ZW51bWVyYWJsZTohMSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fd3JpdGFibGVTdGF0ZS5oaWdoV2F0ZXJNYXJrfX0pLFYucHJvdG90eXBlLl93cml0ZT1mdW5jdGlvbih4ZSx2ZSxYZSl7WGUobmV3IHEo'@;
put 'Il93cml0ZSgpIikpfSxWLnByb3RvdHlwZS5fd3JpdGV2PW51bGwsVi5wcm90b3R5cGUuZW5kPWZ1bmN0aW9uKHhlLHZlLFhlKXt2YXIgemU9dGhpcy5fd3JpdGFibGVTdGF0ZTtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgeGU/KFhlPXhlLHhlPW51bGwsdmU9bnVsbCk6ImZ1bmN0aW9uIj09'@;
put 'dHlwZW9mIHZlJiYoWGU9dmUsdmU9bnVsbCksbnVsbCE9eGUmJnRoaXMud3JpdGUoeGUsdmUpLHplLmNvcmtlZCYmKHplLmNvcmtlZD0xLHRoaXMudW5jb3JrKCkpLHplLmVuZGluZ3x8ZnVuY3Rpb24gSmUoeGUsdmUsWGUpe3ZlLmVuZGluZz0hMCxVZSh4ZSx2ZSksWGUmJih2ZS5maW5pc2hl'@;
put 'ZD9JLm5leHRUaWNrKFhlKTp4ZS5vbmNlKCJmaW5pc2giLFhlKSksdmUuZW5kZWQ9ITAseGUud3JpdGFibGU9ITF9KHRoaXMsemUsWGUpLHRoaXN9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShWLnByb3RvdHlwZSwid3JpdGFibGVMZW5ndGgiLHtlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbigp'@;
put 'e3JldHVybiB0aGlzLl93cml0YWJsZVN0YXRlLmxlbmd0aH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoVi5wcm90b3R5cGUsImRlc3Ryb3llZCIse2VudW1lcmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHZvaWQgMCE9PXRoaXMuX3dyaXRhYmxlU3RhdGUmJnRoaXMuX3dyaXRhYmxl'@;
put 'U3RhdGUuZGVzdHJveWVkfSxzZXQ6ZnVuY3Rpb24odmUpe3RoaXMuX3dyaXRhYmxlU3RhdGUmJih0aGlzLl93cml0YWJsZVN0YXRlLmRlc3Ryb3llZD12ZSl9fSksVi5wcm90b3R5cGUuZGVzdHJveT1MLmRlc3Ryb3ksVi5wcm90b3R5cGUuX3VuZGVzdHJveT1MLnVuZGVzdHJveSxWLnByb3Rv'@;
put 'dHlwZS5fZGVzdHJveT1mdW5jdGlvbih4ZSx2ZSl7dmUoeGUpfX0sNTg1MDoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgXyxJPXkoNDE1NSk7ZnVuY3Rpb24gZyhsZSxtZSxfZSl7cmV0dXJuIG1lPWZ1bmN0aW9uIEIobGUpe3ZhciBtZT1mdW5jdGlvbiB3KGxlLG1lKXtpZigib2JqZWN0'@;
put 'IiE9dHlwZW9mIGxlfHxudWxsPT09bGUpcmV0dXJuIGxlO3ZhciBfZT1sZVtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PV9lKXt2YXIgVGU9X2UuY2FsbChsZSxtZXx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIFRlKXJldHVybiBUZTt0aHJvdyBuZXcgVHlwZUVycm9y'@;
put 'KCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PW1lP1N0cmluZzpOdW1iZXIpKGxlKX0obGUsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbWU/bWU6U3RyaW5nKG1lKX0obWUpLG1lIGluIGxlP09iamVjdC5k'@;
put 'ZWZpbmVQcm9wZXJ0eShsZSxtZSx7dmFsdWU6X2UsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpsZVttZV09X2UsbGV9dmFyIFA9eSg4NjEwKSxGPVN5bWJvbCgibGFzdFJlc29sdmUiKSxPPVN5bWJvbCgibGFzdFJlamVjdCIpLHo9U3ltYm9sKCJlcnJvciIp'@;
put 'LE49U3ltYm9sKCJlbmRlZCIpLEw9U3ltYm9sKCJsYXN0UHJvbWlzZSIpLEs9U3ltYm9sKCJoYW5kbGVQcm9taXNlIiksVT1TeW1ib2woInN0cmVhbSIpO2Z1bmN0aW9uIFcobGUsbWUpe3JldHVybnt2YWx1ZTpsZSxkb25lOm1lfX1mdW5jdGlvbiBZKGxlKXt2YXIgbWU9bGVbRl07aWYobnVs'@;
put 'bCE9PW1lKXt2YXIgX2U9bGVbVV0ucmVhZCgpO251bGwhPT1fZSYmKGxlW0xdPW51bGwsbGVbRl09bnVsbCxsZVtPXT1udWxsLG1lKFcoX2UsITEpKSl9fWZ1bmN0aW9uIHEobGUpe0kubmV4dFRpY2soWSxsZSl9dmFyIEo9T2JqZWN0LmdldFByb3RvdHlwZU9mKGZ1bmN0aW9uKCl7fSksbmU9'@;
put 'T2JqZWN0LnNldFByb3RvdHlwZU9mKChnKF89e2dldCBzdHJlYW0oKXtyZXR1cm4gdGhpc1tVXX0sbmV4dDpmdW5jdGlvbigpe3ZhciBtZT10aGlzLF9lPXRoaXNbel07aWYobnVsbCE9PV9lKXJldHVybiBQcm9taXNlLnJlamVjdChfZSk7aWYodGhpc1tOXSlyZXR1cm4gUHJvbWlzZS5yZXNv'@;
put 'bHZlKFcodm9pZCAwLCEwKSk7aWYodGhpc1tVXS5kZXN0cm95ZWQpcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKFYscCl7SS5uZXh0VGljayhmdW5jdGlvbigpe21lW3pdP3AobWVbel0pOlYoVyh2b2lkIDAsITApKX0pfSk7dmFyIFNlLFRlPXRoaXNbTF07aWYoVGUpU2U9bmV3IFByb21p'@;
put 'c2UoZnVuY3Rpb24gZWUobGUsbWUpe3JldHVybiBmdW5jdGlvbihfZSxUZSl7bGUudGhlbihmdW5jdGlvbigpe21lW05dP19lKFcodm9pZCAwLCEwKSk6bWVbS10oX2UsVGUpfSxUZSl9fShUZSx0aGlzKSk7ZWxzZXt2YXIgamU9dGhpc1tVXS5yZWFkKCk7aWYobnVsbCE9PWplKXJldHVybiBQ'@;
put 'cm9taXNlLnJlc29sdmUoVyhqZSwhMSkpO1NlPW5ldyBQcm9taXNlKHRoaXNbS10pfXJldHVybiB0aGlzW0xdPVNlLFNlfX0sU3ltYm9sLmFzeW5jSXRlcmF0b3IsZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pLGcoXywicmV0dXJuIixmdW5jdGlvbigpe3ZhciBtZT10aGlzO3JldHVybiBuZXcg'@;
put 'UHJvbWlzZShmdW5jdGlvbihfZSxUZSl7bWVbVV0uZGVzdHJveShudWxsLGZ1bmN0aW9uKFNlKXtTZT9UZShTZSk6X2UoVyh2b2lkIDAsITApKX0pfSl9KSxfKSxKKTt1ZS5leHBvcnRzPWZ1bmN0aW9uKG1lKXt2YXIgX2UsVGU9T2JqZWN0LmNyZWF0ZShuZSwoZyhfZT17fSxVLHt2YWx1ZTpt'@;
put 'ZSx3cml0YWJsZTohMH0pLGcoX2UsRix7dmFsdWU6bnVsbCx3cml0YWJsZTohMH0pLGcoX2UsTyx7dmFsdWU6bnVsbCx3cml0YWJsZTohMH0pLGcoX2Useix7dmFsdWU6bnVsbCx3cml0YWJsZTohMH0pLGcoX2UsTix7dmFsdWU6bWUuX3JlYWRhYmxlU3RhdGUuZW5kRW1pdHRlZCx3cml0YWJs'@;
put 'ZTohMH0pLGcoX2UsSyx7dmFsdWU6ZnVuY3Rpb24oamUsVil7dmFyIHA9VGVbVV0ucmVhZCgpO3A/KFRlW0xdPW51bGwsVGVbRl09bnVsbCxUZVtPXT1udWxsLGplKFcocCwhMSkpKTooVGVbRl09amUsVGVbT109Vil9LHdyaXRhYmxlOiEwfSksX2UpKTtyZXR1cm4gVGVbTF09bnVsbCxQKG1l'@;
put 'LGZ1bmN0aW9uKFNlKXtpZihTZSYmIkVSUl9TVFJFQU1fUFJFTUFUVVJFX0NMT1NFIiE9PVNlLmNvZGUpe3ZhciBqZT1UZVtPXTtyZXR1cm4gbnVsbCE9PWplJiYoVGVbTF09bnVsbCxUZVtGXT1udWxsLFRlW09dPW51bGwsamUoU2UpKSx2b2lkKFRlW3pdPVNlKX12YXIgVj1UZVtGXTtudWxs'@;
put 'IT09ViYmKFRlW0xdPW51bGwsVGVbRl09bnVsbCxUZVtPXT1udWxsLFYoVyh2b2lkIDAsITApKSksVGVbTl09ITB9KSxtZS5vbigicmVhZGFibGUiLHEuYmluZChudWxsLFRlKSksVGV9fSw3MzI3Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO2Z1bmN0aW9uIEkoWSxxKXt2YXIgZWU9T2JqZWN0'@;
put 'LmtleXMoWSk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIEo9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhZKTtxJiYoSj1KLmZpbHRlcihmdW5jdGlvbihuZSl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoWSxuZSkuZW51bWVyYWJsZX0p'@;
put 'KSxlZS5wdXNoLmFwcGx5KGVlLEopfXJldHVybiBlZX1mdW5jdGlvbiBfKFkpe2Zvcih2YXIgcT0xO3E8YXJndW1lbnRzLmxlbmd0aDtxKyspe3ZhciBlZT1udWxsIT1hcmd1bWVudHNbcV0/YXJndW1lbnRzW3FdOnt9O3ElMj9JKE9iamVjdChlZSksITApLmZvckVhY2goZnVuY3Rpb24oSil7'@;
put 'ZyhZLEosZWVbSl0pfSk6T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM/T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoWSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhlZSkpOkkoT2JqZWN0KGVlKSkuZm9yRWFjaChmdW5jdGlvbihKKXtPYmplY3QuZGVmaW5lUHJvcGVy'@;
put 'dHkoWSxKLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZWUsSikpfSl9cmV0dXJuIFl9ZnVuY3Rpb24gZyhZLHEsZWUpe3JldHVybihxPUYocSkpaW4gWT9PYmplY3QuZGVmaW5lUHJvcGVydHkoWSxxLHt2YWx1ZTplZSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0'@;
put 'YWJsZTohMH0pOllbcV09ZWUsWX1mdW5jdGlvbiB3KFkscSl7Zm9yKHZhciBlZT0wO2VlPHEubGVuZ3RoO2VlKyspe3ZhciBKPXFbZWVdO0ouZW51bWVyYWJsZT1KLmVudW1lcmFibGV8fCExLEouY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBKJiYoSi53cml0YWJsZT0hMCksT2JqZWN0LmRl'@;
put 'ZmluZVByb3BlcnR5KFksRihKLmtleSksSil9fWZ1bmN0aW9uIEYoWSl7dmFyIHE9ZnVuY3Rpb24gTyhZLHEpe2lmKCJvYmplY3QiIT10eXBlb2YgWXx8bnVsbD09PVkpcmV0dXJuIFk7dmFyIGVlPVlbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1lZSl7dmFyIEo9ZWUuY2FsbChZ'@;
put 'LHF8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBKKXJldHVybiBKO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09cT9TdHJpbmc6TnVtYmVyKShZKX0oWSwic3RyaW5nIik7'@;
put 'cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBxP3E6U3RyaW5nKHEpfXZhciBOPXkoODc2NCkuQnVmZmVyLEs9eSgyMzYxKS5pbnNwZWN0LFU9SyYmSy5jdXN0b218fCJpbnNwZWN0IjtmdW5jdGlvbiBXKFkscSxlZSl7Ti5wcm90b3R5cGUuY29weS5jYWxsKFkscSxlZSl9dWUuZXhwb3J0cz1mdW5j'@;
put 'dGlvbigpe2Z1bmN0aW9uIFkoKXsoZnVuY3Rpb24gQihZLHEpe2lmKCEoWSBpbnN0YW5jZW9mIHEpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSkodGhpcyxZKSx0aGlzLmhlYWQ9bnVsbCx0aGlzLnRhaWw9bnVsbCx0aGlzLmxlbmd0'@;
put 'aD0wfXJldHVybiBmdW5jdGlvbiBQKFkscSxlZSl7cSYmdyhZLnByb3RvdHlwZSxxKSxlZSYmdyhZLGVlKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoWSwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KX0oWSxbe2tleToicHVzaCIsdmFsdWU6ZnVuY3Rpb24oZWUpe3ZhciBKPXtkYXRhOmVlLG5l'@;
put 'eHQ6bnVsbH07dGhpcy5sZW5ndGg+MD90aGlzLnRhaWwubmV4dD1KOnRoaXMuaGVhZD1KLHRoaXMudGFpbD1KLCsrdGhpcy5sZW5ndGh9fSx7a2V5OiJ1bnNoaWZ0Iix2YWx1ZTpmdW5jdGlvbihlZSl7dmFyIEo9e2RhdGE6ZWUsbmV4dDp0aGlzLmhlYWR9OzA9PT10aGlzLmxlbmd0aCYmKHRo'@;
put 'aXMudGFpbD1KKSx0aGlzLmhlYWQ9SiwrK3RoaXMubGVuZ3RofX0se2tleToic2hpZnQiLHZhbHVlOmZ1bmN0aW9uKCl7aWYoMCE9PXRoaXMubGVuZ3RoKXt2YXIgZWU9dGhpcy5oZWFkLmRhdGE7cmV0dXJuIHRoaXMuaGVhZD0xPT09dGhpcy5sZW5ndGg/dGhpcy50YWlsPW51bGw6dGhpcy5o'@;
put 'ZWFkLm5leHQsLS10aGlzLmxlbmd0aCxlZX19fSx7a2V5OiJjbGVhciIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLmhlYWQ9dGhpcy50YWlsPW51bGwsdGhpcy5sZW5ndGg9MH19LHtrZXk6ImpvaW4iLHZhbHVlOmZ1bmN0aW9uKGVlKXtpZigwPT09dGhpcy5sZW5ndGgpcmV0dXJuIiI7Zm9yKHZh'@;
put 'ciBKPXRoaXMuaGVhZCxuZT0iIitKLmRhdGE7Sj1KLm5leHQ7KW5lKz1lZStKLmRhdGE7cmV0dXJuIG5lfX0se2tleToiY29uY2F0Iix2YWx1ZTpmdW5jdGlvbihlZSl7aWYoMD09PXRoaXMubGVuZ3RoKXJldHVybiBOLmFsbG9jKDApO2Zvcih2YXIgSj1OLmFsbG9jVW5zYWZlKGVlPj4+MCks'@;
put 'bmU9dGhpcy5oZWFkLGllPTA7bmU7KVcobmUuZGF0YSxKLGllKSxpZSs9bmUuZGF0YS5sZW5ndGgsbmU9bmUubmV4dDtyZXR1cm4gSn19LHtrZXk6ImNvbnN1bWUiLHZhbHVlOmZ1bmN0aW9uKGVlLEope3ZhciBuZTtyZXR1cm4gZWU8dGhpcy5oZWFkLmRhdGEubGVuZ3RoPyhuZT10aGlzLmhl'@;
put 'YWQuZGF0YS5zbGljZSgwLGVlKSx0aGlzLmhlYWQuZGF0YT10aGlzLmhlYWQuZGF0YS5zbGljZShlZSkpOm5lPWVlPT09dGhpcy5oZWFkLmRhdGEubGVuZ3RoP3RoaXMuc2hpZnQoKTpKP3RoaXMuX2dldFN0cmluZyhlZSk6dGhpcy5fZ2V0QnVmZmVyKGVlKSxuZX19LHtrZXk6ImZpcnN0Iix2'@;
put 'YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmhlYWQuZGF0YX19LHtrZXk6Il9nZXRTdHJpbmciLHZhbHVlOmZ1bmN0aW9uKGVlKXt2YXIgSj10aGlzLmhlYWQsbmU9MSxpZT1KLmRhdGE7Zm9yKGVlLT1pZS5sZW5ndGg7Sj1KLm5leHQ7KXt2YXIgbGU9Si5kYXRhLG1lPWVlPmxlLmxlbmd0'@;
put 'aD9sZS5sZW5ndGg6ZWU7aWYoaWUrPW1lPT09bGUubGVuZ3RoP2xlOmxlLnNsaWNlKDAsZWUpLDA9PShlZS09bWUpKXttZT09PWxlLmxlbmd0aD8oKytuZSx0aGlzLmhlYWQ9Si5uZXh0P0oubmV4dDp0aGlzLnRhaWw9bnVsbCk6KHRoaXMuaGVhZD1KLEouZGF0YT1sZS5zbGljZShtZSkpO2Jy'@;
put 'ZWFrfSsrbmV9cmV0dXJuIHRoaXMubGVuZ3RoLT1uZSxpZX19LHtrZXk6Il9nZXRCdWZmZXIiLHZhbHVlOmZ1bmN0aW9uKGVlKXt2YXIgSj1OLmFsbG9jVW5zYWZlKGVlKSxuZT10aGlzLmhlYWQsaWU9MTtmb3IobmUuZGF0YS5jb3B5KEopLGVlLT1uZS5kYXRhLmxlbmd0aDtuZT1uZS5uZXh0'@;
put 'Oyl7dmFyIGxlPW5lLmRhdGEsbWU9ZWU+bGUubGVuZ3RoP2xlLmxlbmd0aDplZTtpZihsZS5jb3B5KEosSi5sZW5ndGgtZWUsMCxtZSksMD09KGVlLT1tZSkpe21lPT09bGUubGVuZ3RoPygrK2llLHRoaXMuaGVhZD1uZS5uZXh0P25lLm5leHQ6dGhpcy50YWlsPW51bGwpOih0aGlzLmhlYWQ9'@;
put 'bmUsbmUuZGF0YT1sZS5zbGljZShtZSkpO2JyZWFrfSsraWV9cmV0dXJuIHRoaXMubGVuZ3RoLT1pZSxKfX0se2tleTpVLHZhbHVlOmZ1bmN0aW9uKGVlLEope3JldHVybiBLKHRoaXMsXyhfKHt9LEopLHt9LHtkZXB0aDowLGN1c3RvbUluc3BlY3Q6ITF9KSl9fV0pLFl9KCl9LDExOTU6KHVl'@;
put 'LFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg0MTU1KTtmdW5jdGlvbiBnKE8seil7UChPLHopLEIoTyl9ZnVuY3Rpb24gQihPKXtPLl93cml0YWJsZVN0YXRlJiYhTy5fd3JpdGFibGVTdGF0ZS5lbWl0Q2xvc2V8fE8uX3JlYWRhYmxlU3RhdGUmJiFPLl9yZWFkYWJsZVN0YXRlLmVtaXRD'@;
put 'bG9zZXx8Ty5lbWl0KCJjbG9zZSIpfWZ1bmN0aW9uIFAoTyx6KXtPLmVtaXQoImVycm9yIix6KX11ZS5leHBvcnRzPXtkZXN0cm95OmZ1bmN0aW9uIF8oTyx6KXt2YXIgTj10aGlzO3JldHVybiB0aGlzLl9yZWFkYWJsZVN0YXRlJiZ0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZHx8dGhp'@;
put 'cy5fd3JpdGFibGVTdGF0ZSYmdGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWQ/KHo/eihPKTpPJiYodGhpcy5fd3JpdGFibGVTdGF0ZT90aGlzLl93cml0YWJsZVN0YXRlLmVycm9yRW1pdHRlZHx8KHRoaXMuX3dyaXRhYmxlU3RhdGUuZXJyb3JFbWl0dGVkPSEwLEkubmV4dFRpY2soUCx0'@;
put 'aGlzLE8pKTpJLm5leHRUaWNrKFAsdGhpcyxPKSksdGhpcyk6KHRoaXMuX3JlYWRhYmxlU3RhdGUmJih0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZD0hMCksdGhpcy5fd3JpdGFibGVTdGF0ZSYmKHRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkPSEwKSx0aGlzLl9kZXN0cm95KE98'@;
put 'fG51bGwsZnVuY3Rpb24oVSl7IXomJlU/Ti5fd3JpdGFibGVTdGF0ZT9OLl93cml0YWJsZVN0YXRlLmVycm9yRW1pdHRlZD9JLm5leHRUaWNrKEIsTik6KE4uX3dyaXRhYmxlU3RhdGUuZXJyb3JFbWl0dGVkPSEwLEkubmV4dFRpY2soZyxOLFUpKTpJLm5leHRUaWNrKGcsTixVKTp6PyhJLm5l'@;
put 'eHRUaWNrKEIsTikseihVKSk6SS5uZXh0VGljayhCLE4pfSksdGhpcyl9LHVuZGVzdHJveTpmdW5jdGlvbiB3KCl7dGhpcy5fcmVhZGFibGVTdGF0ZSYmKHRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkPSExLHRoaXMuX3JlYWRhYmxlU3RhdGUucmVhZGluZz0hMSx0aGlzLl9yZWFkYWJs'@;
put 'ZVN0YXRlLmVuZGVkPSExLHRoaXMuX3JlYWRhYmxlU3RhdGUuZW5kRW1pdHRlZD0hMSksdGhpcy5fd3JpdGFibGVTdGF0ZSYmKHRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkPSExLHRoaXMuX3dyaXRhYmxlU3RhdGUuZW5kZWQ9ITEsdGhpcy5fd3JpdGFibGVTdGF0ZS5lbmRpbmc9ITEs'@;
put 'dGhpcy5fd3JpdGFibGVTdGF0ZS5maW5hbENhbGxlZD0hMSx0aGlzLl93cml0YWJsZVN0YXRlLnByZWZpbmlzaGVkPSExLHRoaXMuX3dyaXRhYmxlU3RhdGUuZmluaXNoZWQ9ITEsdGhpcy5fd3JpdGFibGVTdGF0ZS5lcnJvckVtaXR0ZWQ9ITEpfSxlcnJvck9yRGVzdHJveTpmdW5jdGlvbiBG'@;
put 'KE8seil7dmFyIE49Ty5fcmVhZGFibGVTdGF0ZSxMPU8uX3dyaXRhYmxlU3RhdGU7TiYmTi5hdXRvRGVzdHJveXx8TCYmTC5hdXRvRGVzdHJveT9PLmRlc3Ryb3koeik6Ty5lbWl0KCJlcnJvciIseil9fX0sODYxMDoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDQyODEpLnEuRVJS'@;
put 'X1NUUkVBTV9QUkVNQVRVUkVfQ0xPU0U7ZnVuY3Rpb24gZygpe311ZS5leHBvcnRzPWZ1bmN0aW9uIHcoUCxGLE8pe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBGKXJldHVybiB3KFAsbnVsbCxGKTtGfHwoRj17fSksTz1mdW5jdGlvbiBfKFApe3ZhciBGPSExO3JldHVybiBmdW5jdGlvbigpe2lm'@;
put 'KCFGKXtGPSEwO2Zvcih2YXIgTz1hcmd1bWVudHMubGVuZ3RoLHo9bmV3IEFycmF5KE8pLE49MDtOPE87TisrKXpbTl09YXJndW1lbnRzW05dO1AuYXBwbHkodGhpcyx6KX19fShPfHxnKTt2YXIgej1GLnJlYWRhYmxlfHwhMSE9PUYucmVhZGFibGUmJlAucmVhZGFibGUsTj1GLndyaXRhYmxl'@;
put 'fHwhMSE9PUYud3JpdGFibGUmJlAud3JpdGFibGUsTD1mdW5jdGlvbigpe1Aud3JpdGFibGV8fFUoKX0sSz1QLl93cml0YWJsZVN0YXRlJiZQLl93cml0YWJsZVN0YXRlLmZpbmlzaGVkLFU9ZnVuY3Rpb24oKXtOPSExLEs9ITAsenx8Ty5jYWxsKFApfSxXPVAuX3JlYWRhYmxlU3RhdGUmJlAu'@;
put 'X3JlYWRhYmxlU3RhdGUuZW5kRW1pdHRlZCxZPWZ1bmN0aW9uKCl7ej0hMSxXPSEwLE58fE8uY2FsbChQKX0scT1mdW5jdGlvbihpZSl7Ty5jYWxsKFAsaWUpfSxlZT1mdW5jdGlvbigpe3ZhciBpZTtyZXR1cm4geiYmIVc/KCghUC5fcmVhZGFibGVTdGF0ZXx8IVAuX3JlYWRhYmxlU3RhdGUu'@;
put 'ZW5kZWQpJiYoaWU9bmV3IEkpLE8uY2FsbChQLGllKSk6TiYmIUs/KCghUC5fd3JpdGFibGVTdGF0ZXx8IVAuX3dyaXRhYmxlU3RhdGUuZW5kZWQpJiYoaWU9bmV3IEkpLE8uY2FsbChQLGllKSk6dm9pZCAwfSxKPWZ1bmN0aW9uKCl7UC5yZXEub24oImZpbmlzaCIsVSl9O3JldHVybiBmdW5j'@;
put 'dGlvbiBCKFApe3JldHVybiBQLnNldEhlYWRlciYmImZ1bmN0aW9uIj09dHlwZW9mIFAuYWJvcnR9KFApPyhQLm9uKCJjb21wbGV0ZSIsVSksUC5vbigiYWJvcnQiLGVlKSxQLnJlcT9KKCk6UC5vbigicmVxdWVzdCIsSikpOk4mJiFQLl93cml0YWJsZVN0YXRlJiYoUC5vbigiZW5kIixMKSxQ'@;
put 'Lm9uKCJjbG9zZSIsTCkpLFAub24oImVuZCIsWSksUC5vbigiZmluaXNoIixVKSwhMSE9PUYuZXJyb3ImJlAub24oImVycm9yIixxKSxQLm9uKCJjbG9zZSIsZWUpLGZ1bmN0aW9uKCl7UC5yZW1vdmVMaXN0ZW5lcigiY29tcGxldGUiLFUpLFAucmVtb3ZlTGlzdGVuZXIoImFib3J0IixlZSks'@;
put 'UC5yZW1vdmVMaXN0ZW5lcigicmVxdWVzdCIsSiksUC5yZXEmJlAucmVxLnJlbW92ZUxpc3RlbmVyKCJmaW5pc2giLFUpLFAucmVtb3ZlTGlzdGVuZXIoImVuZCIsTCksUC5yZW1vdmVMaXN0ZW5lcigiY2xvc2UiLEwpLFAucmVtb3ZlTGlzdGVuZXIoImZpbmlzaCIsVSksUC5yZW1vdmVMaXN0'@;
put 'ZW5lcigiZW5kIixZKSxQLnJlbW92ZUxpc3RlbmVyKCJlcnJvciIscSksUC5yZW1vdmVMaXN0ZW5lcigiY2xvc2UiLGVlKX19fSw1MTY3OnVlPT57dWUuZXhwb3J0cz1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiUmVhZGFibGUuZnJvbSBpcyBub3QgYXZhaWxhYmxlIGluIHRoZSBicm93'@;
put 'c2VyIil9fSw5OTQ2Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJLGc9eSg0MjgxKS5xLEI9Zy5FUlJfTUlTU0lOR19BUkdTLHc9Zy5FUlJfU1RSRUFNX0RFU1RST1lFRDtmdW5jdGlvbiBQKFUpe2lmKFUpdGhyb3cgVX1mdW5jdGlvbiB6KFUpe1UoKX1mdW5jdGlvbiBOKFUsVyl7cmV0'@;
put 'dXJuIFUucGlwZShXKX11ZS5leHBvcnRzPWZ1bmN0aW9uIEsoKXtmb3IodmFyIFU9YXJndW1lbnRzLmxlbmd0aCxXPW5ldyBBcnJheShVKSxZPTA7WTxVO1krKylXW1ldPWFyZ3VtZW50c1tZXTt2YXIgcT1mdW5jdGlvbiBMKFUpe3JldHVybiBVLmxlbmd0aCYmImZ1bmN0aW9uIj09dHlwZW9m'@;
put 'IFVbVS5sZW5ndGgtMV0/VS5wb3AoKTpQfShXKTtpZihBcnJheS5pc0FycmF5KFdbMF0pJiYoVz1XWzBdKSxXLmxlbmd0aDwyKXRocm93IG5ldyBCKCJzdHJlYW1zIik7dmFyIGVlLEo9Vy5tYXAoZnVuY3Rpb24obmUsaWUpe3ZhciBsZT1pZTxXLmxlbmd0aC0xO3JldHVybiBmdW5jdGlvbiBP'@;
put 'KFUsVyxZLHEpe3E9ZnVuY3Rpb24gXyhVKXt2YXIgVz0hMTtyZXR1cm4gZnVuY3Rpb24oKXtXfHwoVz0hMCxVLmFwcGx5KHZvaWQgMCxhcmd1bWVudHMpKX19KHEpO3ZhciBlZT0hMTtVLm9uKCJjbG9zZSIsZnVuY3Rpb24oKXtlZT0hMH0pLHZvaWQgMD09PUkmJihJPXkoODYxMCkpLEkoVSx7'@;
put 'cmVhZGFibGU6Vyx3cml0YWJsZTpZfSxmdW5jdGlvbihuZSl7aWYobmUpcmV0dXJuIHEobmUpO2VlPSEwLHEoKX0pO3ZhciBKPSExO3JldHVybiBmdW5jdGlvbihuZSl7aWYoIWVlJiYhSil7aWYoSj0hMCxmdW5jdGlvbiBGKFUpe3JldHVybiBVLnNldEhlYWRlciYmImZ1bmN0aW9uIj09dHlw'@;
put 'ZW9mIFUuYWJvcnR9KFUpKXJldHVybiBVLmFib3J0KCk7aWYoImZ1bmN0aW9uIj09dHlwZW9mIFUuZGVzdHJveSlyZXR1cm4gVS5kZXN0cm95KCk7cShuZXx8bmV3IHcoInBpcGUiKSl9fX0obmUsbGUsaWU+MCxmdW5jdGlvbihfZSl7ZWV8fChlZT1fZSksX2UmJkouZm9yRWFjaCh6KSwhbGUm'@;
put 'JihKLmZvckVhY2goeikscShlZSkpfSl9KTtyZXR1cm4gVy5yZWR1Y2UoTil9fSwyNDU3Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoNDI4MSkucS5FUlJfSU5WQUxJRF9PUFRfVkFMVUU7dWUuZXhwb3J0cz17Z2V0SGlnaFdhdGVyTWFyazpmdW5jdGlvbiBnKEIsdyxQLEYpe3Zh'@;
put 'ciBPPWZ1bmN0aW9uIF8oQix3LFApe3JldHVybiBudWxsIT1CLmhpZ2hXYXRlck1hcms/Qi5oaWdoV2F0ZXJNYXJrOnc/QltQXTpudWxsfSh3LEYsUCk7aWYobnVsbCE9Tyl7aWYoIWlzRmluaXRlKE8pfHxNYXRoLmZsb29yKE8pIT09T3x8TzwwKXRocm93IG5ldyBJKEY/UDoiaGlnaFdhdGVy'@;
put 'TWFyayIsTyk7cmV0dXJuIE1hdGguZmxvb3IoTyl9cmV0dXJuIEIub2JqZWN0TW9kZT8xNjoxNjM4NH19fSwyNTAzOih1ZSxYLHkpPT57dWUuZXhwb3J0cz15KDcxODcpLkV2ZW50RW1pdHRlcn0sNzQxODp1ZT0+eyJ1c2Ugc3RyaWN0Ijt1ZS5leHBvcnRzPWZ1bmN0aW9uKHksSSl7aWYoST1J'@;
put 'LnNwbGl0KCI6IilbMF0sISh5PSt5KSlyZXR1cm4hMTtzd2l0Y2goSSl7Y2FzZSJodHRwIjpjYXNlIndzIjpyZXR1cm4gODAhPT15O2Nhc2UiaHR0cHMiOmNhc2Uid3NzIjpyZXR1cm4gNDQzIT09eTtjYXNlImZ0cCI6cmV0dXJuIDIxIT09eTtjYXNlImdvcGhlciI6cmV0dXJuIDcwIT09eTtj'@;
put 'YXNlImZpbGUiOnJldHVybiExfXJldHVybiAwIT09eX19LDk3ODU6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg4NzY0KS5CdWZmZXIsXz15KDU3MTcpLGc9eSgzMzQ5KSxCPW5ldyBBcnJheSgxNiksdz1bMCwxLDIsMyw0LDUsNiw3LDgsOSwxMCwxMSwxMiwxMywxNCwxNSw3LDQs'@;
put 'MTMsMSwxMCw2LDE1LDMsMTIsMCw5LDUsMiwxNCwxMSw4LDMsMTAsMTQsNCw5LDE1LDgsMSwyLDcsMCw2LDEzLDExLDUsMTIsMSw5LDExLDEwLDAsOCwxMiw0LDEzLDMsNywxNSwxNCw1LDYsMiw0LDAsNSw5LDcsMTIsMiwxMCwxNCwxLDMsOCwxMSw2LDE1LDEzXSxQPVs1LDE0LDcsMCw5LDIs'@;
put 'MTEsNCwxMyw2LDE1LDgsMSwxMCwzLDEyLDYsMTEsMyw3LDAsMTMsNSwxMCwxNCwxNSw4LDEyLDQsOSwxLDIsMTUsNSwxLDMsNywxNCw2LDksMTEsOCwxMiwyLDEwLDAsNCwxMyw4LDYsNCwxLDMsMTEsMTUsMCw1LDEyLDIsMTMsOSw3LDEwLDE0LDEyLDE1LDEwLDQsMSw1LDgsNyw2LDIsMTMs'@;
put 'MTQsMCwzLDksMTFdLEY9WzExLDE0LDE1LDEyLDUsOCw3LDksMTEsMTMsMTQsMTUsNiw3LDksOCw3LDYsOCwxMywxMSw5LDcsMTUsNywxMiwxNSw5LDExLDcsMTMsMTIsMTEsMTMsNiw3LDE0LDksMTMsMTUsMTQsOCwxMyw2LDUsMTIsNyw1LDExLDEyLDE0LDE1LDE0LDE1LDksOCw5LDE0LDUs'@;
put 'Niw4LDYsNSwxMiw5LDE1LDUsMTEsNiw4LDEzLDEyLDUsMTIsMTMsMTQsMTEsOCw1LDZdLE89WzgsOSw5LDExLDEzLDE1LDE1LDUsNyw3LDgsMTEsMTQsMTQsMTIsNiw5LDEzLDE1LDcsMTIsOCw5LDExLDcsNywxMiw3LDYsMTUsMTMsMTEsOSw3LDE1LDExLDgsNiw2LDE0LDEyLDEzLDUsMTQs'@;
put 'MTMsMTMsNyw1LDE1LDUsOCwxMSwxNCwxNCw2LDE0LDYsOSwxMiw5LDEyLDUsMTUsOCw4LDUsMTIsOSwxMiw1LDE0LDYsOCwxMyw2LDUsMTUsMTMsMTEsMTFdLHo9WzAsMTUxODUwMDI0OSwxODU5Nzc1MzkzLDI0MDA5NTk3MDgsMjg0MDg1MzgzOF0sTj1bMTM1MjgyOTkyNiwxNTQ4NjAzNjg0'@;
put 'LDE4MzYwNzI2OTEsMjA1Mzk5NDIxNywwXTtmdW5jdGlvbiBMKCl7Zy5jYWxsKHRoaXMsNjQpLHRoaXMuX2E9MTczMjU4NDE5Myx0aGlzLl9iPTQwMjMyMzM0MTcsdGhpcy5fYz0yNTYyMzgzMTAyLHRoaXMuX2Q9MjcxNzMzODc4LHRoaXMuX2U9MzI4NTM3NzUyMH1mdW5jdGlvbiBLKEosbmUp'@;
put 'e3JldHVybiBKPDxuZXxKPj4+MzItbmV9ZnVuY3Rpb24gVShKLG5lLGllLGxlLG1lLF9lLFRlLFNlKXtyZXR1cm4gSyhKKyhuZV5pZV5sZSkrX2UrVGV8MCxTZSkrbWV8MH1mdW5jdGlvbiBXKEosbmUsaWUsbGUsbWUsX2UsVGUsU2Upe3JldHVybiBLKEorKG5lJmllfH5uZSZsZSkrX2UrVGV8'@;
put 'MCxTZSkrbWV8MH1mdW5jdGlvbiBZKEosbmUsaWUsbGUsbWUsX2UsVGUsU2Upe3JldHVybiBLKEorKChuZXx+aWUpXmxlKStfZStUZXwwLFNlKSttZXwwfWZ1bmN0aW9uIHEoSixuZSxpZSxsZSxtZSxfZSxUZSxTZSl7cmV0dXJuIEsoSisobmUmbGV8aWUmfmxlKStfZStUZXwwLFNlKSttZXww'@;
put 'fWZ1bmN0aW9uIGVlKEosbmUsaWUsbGUsbWUsX2UsVGUsU2Upe3JldHVybiBLKEorKG5lXihpZXx+bGUpKStfZStUZXwwLFNlKSttZXwwfV8oTCxnKSxMLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKCl7Zm9yKHZhciBKPUIsbmU9MDtuZTwxNjsrK25lKUpbbmVdPXRoaXMuX2Jsb2NrLnJl'@;
put 'YWRJbnQzMkxFKDQqbmUpO2Zvcih2YXIgaWU9MHx0aGlzLl9hLGxlPTB8dGhpcy5fYixtZT0wfHRoaXMuX2MsX2U9MHx0aGlzLl9kLFRlPTB8dGhpcy5fZSxTZT0wfHRoaXMuX2EsamU9MHx0aGlzLl9iLFY9MHx0aGlzLl9jLHA9MHx0aGlzLl9kLGI9MHx0aGlzLl9lLHg9MDt4PDgwO3grPTEp'@;
put 'e3ZhciBDLFQ7eDwxNj8oQz1VKGllLGxlLG1lLF9lLFRlLEpbd1t4XV0selswXSxGW3hdKSxUPWVlKFNlLGplLFYscCxiLEpbUFt4XV0sTlswXSxPW3hdKSk6eDwzMj8oQz1XKGllLGxlLG1lLF9lLFRlLEpbd1t4XV0selsxXSxGW3hdKSxUPXEoU2UsamUsVixwLGIsSltQW3hdXSxOWzFdLE9b'@;
put 'eF0pKTp4PDQ4PyhDPVkoaWUsbGUsbWUsX2UsVGUsSlt3W3hdXSx6WzJdLEZbeF0pLFQ9WShTZSxqZSxWLHAsYixKW1BbeF1dLE5bMl0sT1t4XSkpOng8NjQ/KEM9cShpZSxsZSxtZSxfZSxUZSxKW3dbeF1dLHpbM10sRlt4XSksVD1XKFNlLGplLFYscCxiLEpbUFt4XV0sTlszXSxPW3hdKSk6'@;
put 'KEM9ZWUoaWUsbGUsbWUsX2UsVGUsSlt3W3hdXSx6WzRdLEZbeF0pLFQ9VShTZSxqZSxWLHAsYixKW1BbeF1dLE5bNF0sT1t4XSkpLGllPVRlLFRlPV9lLF9lPUsobWUsMTApLG1lPWxlLGxlPUMsU2U9YixiPXAscD1LKFYsMTApLFY9amUsamU9VH12YXIgSD10aGlzLl9iK21lK3B8MDt0aGlz'@;
put 'Ll9iPXRoaXMuX2MrX2UrYnwwLHRoaXMuX2M9dGhpcy5fZCtUZStTZXwwLHRoaXMuX2Q9dGhpcy5fZStpZStqZXwwLHRoaXMuX2U9dGhpcy5fYStsZStWfDAsdGhpcy5fYT1IfSxMLnByb3RvdHlwZS5fZGlnZXN0PWZ1bmN0aW9uKCl7dGhpcy5fYmxvY2tbdGhpcy5fYmxvY2tPZmZzZXQrK109'@;
put 'MTI4LHRoaXMuX2Jsb2NrT2Zmc2V0PjU2JiYodGhpcy5fYmxvY2suZmlsbCgwLHRoaXMuX2Jsb2NrT2Zmc2V0LDY0KSx0aGlzLl91cGRhdGUoKSx0aGlzLl9ibG9ja09mZnNldD0wKSx0aGlzLl9ibG9jay5maWxsKDAsdGhpcy5fYmxvY2tPZmZzZXQsNTYpLHRoaXMuX2Jsb2NrLndyaXRlVUlu'@;
put 'dDMyTEUodGhpcy5fbGVuZ3RoWzBdLDU2KSx0aGlzLl9ibG9jay53cml0ZVVJbnQzMkxFKHRoaXMuX2xlbmd0aFsxXSw2MCksdGhpcy5fdXBkYXRlKCk7dmFyIEo9SS5hbGxvYz9JLmFsbG9jKDIwKTpuZXcgSSgyMCk7cmV0dXJuIEoud3JpdGVJbnQzMkxFKHRoaXMuX2EsMCksSi53cml0ZUlu'@;
put 'dDMyTEUodGhpcy5fYiw0KSxKLndyaXRlSW50MzJMRSh0aGlzLl9jLDgpLEoud3JpdGVJbnQzMkxFKHRoaXMuX2QsMTIpLEoud3JpdGVJbnQzMkxFKHRoaXMuX2UsMTYpLEp9LHVlLmV4cG9ydHM9TH0sOTUwOToodWUsWCx5KT0+e3ZhciBJPXkoODc2NCksXz1JLkJ1ZmZlcjtmdW5jdGlvbiBn'@;
put 'KHcsUCl7Zm9yKHZhciBGIGluIHcpUFtGXT13W0ZdfWZ1bmN0aW9uIEIodyxQLEYpe3JldHVybiBfKHcsUCxGKX1fLmZyb20mJl8uYWxsb2MmJl8uYWxsb2NVbnNhZmUmJl8uYWxsb2NVbnNhZmVTbG93P3VlLmV4cG9ydHM9STooZyhJLFgpLFguQnVmZmVyPUIpLEIucHJvdG90eXBlPU9iamVj'@;
put 'dC5jcmVhdGUoXy5wcm90b3R5cGUpLGcoXyxCKSxCLmZyb209ZnVuY3Rpb24odyxQLEYpe2lmKCJudW1iZXIiPT10eXBlb2Ygdyl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudCBtdXN0IG5vdCBiZSBhIG51bWJlciIpO3JldHVybiBfKHcsUCxGKX0sQi5hbGxvYz1mdW5jdGlvbih3LFAs'@;
put 'Ril7aWYoIm51bWJlciIhPXR5cGVvZiB3KXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3QgYmUgYSBudW1iZXIiKTt2YXIgTz1fKHcpO3JldHVybiB2b2lkIDAhPT1QPyJzdHJpbmciPT10eXBlb2YgRj9PLmZpbGwoUCxGKTpPLmZpbGwoUCk6Ty5maWxsKDApLE99LEIuYWxsb2NV'@;
put 'bnNhZmU9ZnVuY3Rpb24odyl7aWYoIm51bWJlciIhPXR5cGVvZiB3KXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3QgYmUgYSBudW1iZXIiKTtyZXR1cm4gXyh3KX0sQi5hbGxvY1Vuc2FmZVNsb3c9ZnVuY3Rpb24odyl7aWYoIm51bWJlciIhPXR5cGVvZiB3KXRocm93IG5ldyBU'@;
put 'eXBlRXJyb3IoIkFyZ3VtZW50IG11c3QgYmUgYSBudW1iZXIiKTtyZXR1cm4gSS5TbG93QnVmZmVyKHcpfX0sOTI0NjoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDczNzkpLF89eSg4NDIwKSxnPUkoIlJlZ0V4cC5wcm90b3R5cGUuZXhlYyIpLEI9eSg0NDUzKTt1ZS5leHBvcnRz'@;
put 'PWZ1bmN0aW9uKFApe2lmKCFfKFApKXRocm93IG5ldyBCKCJgcmVnZXhgIG11c3QgYmUgYSBSZWdFeHAiKTtyZXR1cm4gZnVuY3Rpb24oTyl7cmV0dXJuIG51bGwhPT1nKFAsTyl9fX0sNzc3MToodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDIxMCksXz15KDIyOTYpLGc9eSgxMDQ0'@;
put 'KSgpLEI9eSg3Mjk2KSx3PXkoNDQ1MyksUD1JKCIlTWF0aC5mbG9vciUiKTt1ZS5leHBvcnRzPWZ1bmN0aW9uKE8seil7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIE8pdGhyb3cgbmV3IHcoImBmbmAgaXMgbm90IGEgZnVuY3Rpb24iKTtpZigibnVtYmVyIiE9dHlwZW9mIHp8fHo8MHx8ej40Mjk0'@;
put 'OTY3Mjk1fHxQKHopIT09eil0aHJvdyBuZXcgdygiYGxlbmd0aGAgbXVzdCBiZSBhIHBvc2l0aXZlIDMyLWJpdCBpbnRlZ2VyIik7dmFyIE49YXJndW1lbnRzLmxlbmd0aD4yJiYhIWFyZ3VtZW50c1syXSxMPSEwLEs9ITA7aWYoImxlbmd0aCJpbiBPJiZCKXt2YXIgVT1CKE8sImxlbmd0aCIp'@;
put 'O1UmJiFVLmNvbmZpZ3VyYWJsZSYmKEw9ITEpLFUmJiFVLndyaXRhYmxlJiYoSz0hMSl9cmV0dXJuKEx8fEt8fCFOKSYmKGc/XyhPLCJsZW5ndGgiLHosITAsITApOl8oTywibGVuZ3RoIix6KSksT319LDQxODk6KHVlLFgseSk9Pnt2YXIgST15KDk1MDkpLkJ1ZmZlcjtmdW5jdGlvbiBfKGcs'@;
put 'Qil7dGhpcy5fYmxvY2s9SS5hbGxvYyhnKSx0aGlzLl9maW5hbFNpemU9Qix0aGlzLl9ibG9ja1NpemU9Zyx0aGlzLl9sZW49MH1fLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24oZyxCKXsic3RyaW5nIj09dHlwZW9mIGcmJihnPUkuZnJvbShnLEI9Qnx8InV0ZjgiKSk7Zm9yKHZhciB3PXRo'@;
put 'aXMuX2Jsb2NrLFA9dGhpcy5fYmxvY2tTaXplLEY9Zy5sZW5ndGgsTz10aGlzLl9sZW4sej0wO3o8Rjspe2Zvcih2YXIgTj1PJVAsTD1NYXRoLm1pbihGLXosUC1OKSxLPTA7SzxMO0srKyl3W04rS109Z1t6K0tdO3orPUwsKE8rPUwpJVA9PTAmJnRoaXMuX3VwZGF0ZSh3KX1yZXR1cm4gdGhp'@;
put 'cy5fbGVuKz1GLHRoaXN9LF8ucHJvdG90eXBlLmRpZ2VzdD1mdW5jdGlvbihnKXt2YXIgQj10aGlzLl9sZW4ldGhpcy5fYmxvY2tTaXplO3RoaXMuX2Jsb2NrW0JdPTEyOCx0aGlzLl9ibG9jay5maWxsKDAsQisxKSxCPj10aGlzLl9maW5hbFNpemUmJih0aGlzLl91cGRhdGUodGhpcy5fYmxv'@;
put 'Y2spLHRoaXMuX2Jsb2NrLmZpbGwoMCkpO3ZhciB3PTgqdGhpcy5fbGVuO2lmKHc8PTQyOTQ5NjcyOTUpdGhpcy5fYmxvY2sud3JpdGVVSW50MzJCRSh3LHRoaXMuX2Jsb2NrU2l6ZS00KTtlbHNle3ZhciBQPSg0Mjk0OTY3Mjk1JncpPj4+MDt0aGlzLl9ibG9jay53cml0ZVVJbnQzMkJFKCh3'@;
put 'LVApLzQyOTQ5NjcyOTYsdGhpcy5fYmxvY2tTaXplLTgpLHRoaXMuX2Jsb2NrLndyaXRlVUludDMyQkUoUCx0aGlzLl9ibG9ja1NpemUtNCl9dGhpcy5fdXBkYXRlKHRoaXMuX2Jsb2NrKTt2YXIgTz10aGlzLl9oYXNoKCk7cmV0dXJuIGc/Ty50b1N0cmluZyhnKTpPfSxfLnByb3RvdHlwZS5f'@;
put 'dXBkYXRlPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJfdXBkYXRlIG11c3QgYmUgaW1wbGVtZW50ZWQgYnkgc3ViY2xhc3MiKX0sdWUuZXhwb3J0cz1ffSw5MDcyOih1ZSxYLHkpPT57dmFyIEk9dWUuZXhwb3J0cz1mdW5jdGlvbihnKXtnPWcudG9Mb3dlckNhc2UoKTt2YXIgQj1JW2dd'@;
put 'O2lmKCFCKXRocm93IG5ldyBFcnJvcihnKyIgaXMgbm90IHN1cHBvcnRlZCAod2UgYWNjZXB0IHB1bGwgcmVxdWVzdHMpIik7cmV0dXJuIG5ldyBCfTtJLnNoYT15KDQ0NDgpLEkuc2hhMT15KDgzMzYpLEkuc2hhMjI0PXkoODQzMiksSS5zaGEyNTY9eSg3NDk5KSxJLnNoYTM4ND15KDE2ODYp'@;
put 'LEkuc2hhNTEyPXkoNzgxNil9LDQ0NDg6KHVlLFgseSk9Pnt2YXIgST15KDU3MTcpLF89eSg0MTg5KSxnPXkoOTUwOSkuQnVmZmVyLEI9WzE1MTg1MDAyNDksMTg1OTc3NTM5MywtMTg5NDAwNzU4OCwtODk5NDk3NTE0XSx3PW5ldyBBcnJheSg4MCk7ZnVuY3Rpb24gUCgpe3RoaXMuaW5pdCgp'@;
put 'LHRoaXMuX3c9dyxfLmNhbGwodGhpcyw2NCw1Nil9ZnVuY3Rpb24gRihOKXtyZXR1cm4gTjw8NXxOPj4+Mjd9ZnVuY3Rpb24gTyhOKXtyZXR1cm4gTjw8MzB8Tj4+PjJ9ZnVuY3Rpb24geihOLEwsSyxVKXtyZXR1cm4gMD09PU4/TCZLfH5MJlU6Mj09PU4/TCZLfEwmVXxLJlU6TF5LXlV9SShQ'@;
put 'LF8pLFAucHJvdG90eXBlLmluaXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYT0xNzMyNTg0MTkzLHRoaXMuX2I9NDAyMzIzMzQxNyx0aGlzLl9jPTI1NjIzODMxMDIsdGhpcy5fZD0yNzE3MzM4NzgsdGhpcy5fZT0zMjg1Mzc3NTIwLHRoaXN9LFAucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rp'@;
put 'b24oTil7Zm9yKHZhciBMPXRoaXMuX3csSz0wfHRoaXMuX2EsVT0wfHRoaXMuX2IsVz0wfHRoaXMuX2MsWT0wfHRoaXMuX2QscT0wfHRoaXMuX2UsZWU9MDtlZTwxNjsrK2VlKUxbZWVdPU4ucmVhZEludDMyQkUoNCplZSk7Zm9yKDtlZTw4MDsrK2VlKUxbZWVdPUxbZWUtM11eTFtlZS04XV5M'@;
put 'W2VlLTE0XV5MW2VlLTE2XTtmb3IodmFyIEo9MDtKPDgwOysrSil7dmFyIG5lPX5+KEovMjApLGllPUYoSykreihuZSxVLFcsWSkrcStMW0pdK0JbbmVdfDA7cT1ZLFk9VyxXPU8oVSksVT1LLEs9aWV9dGhpcy5fYT1LK3RoaXMuX2F8MCx0aGlzLl9iPVUrdGhpcy5fYnwwLHRoaXMuX2M9Vyt0'@;
put 'aGlzLl9jfDAsdGhpcy5fZD1ZK3RoaXMuX2R8MCx0aGlzLl9lPXErdGhpcy5fZXwwfSxQLnByb3RvdHlwZS5faGFzaD1mdW5jdGlvbigpe3ZhciBOPWcuYWxsb2NVbnNhZmUoMjApO3JldHVybiBOLndyaXRlSW50MzJCRSgwfHRoaXMuX2EsMCksTi53cml0ZUludDMyQkUoMHx0aGlzLl9iLDQp'@;
put 'LE4ud3JpdGVJbnQzMkJFKDB8dGhpcy5fYyw4KSxOLndyaXRlSW50MzJCRSgwfHRoaXMuX2QsMTIpLE4ud3JpdGVJbnQzMkJFKDB8dGhpcy5fZSwxNiksTn0sdWUuZXhwb3J0cz1QfSw4MzM2Oih1ZSxYLHkpPT57dmFyIEk9eSg1NzE3KSxfPXkoNDE4OSksZz15KDk1MDkpLkJ1ZmZlcixCPVsx'@;
put 'NTE4NTAwMjQ5LDE4NTk3NzUzOTMsLTE4OTQwMDc1ODgsLTg5OTQ5NzUxNF0sdz1uZXcgQXJyYXkoODApO2Z1bmN0aW9uIFAoKXt0aGlzLmluaXQoKSx0aGlzLl93PXcsXy5jYWxsKHRoaXMsNjQsNTYpfWZ1bmN0aW9uIEYoTCl7cmV0dXJuIEw8PDF8TD4+PjMxfWZ1bmN0aW9uIE8oTCl7cmV0'@;
put 'dXJuIEw8PDV8TD4+PjI3fWZ1bmN0aW9uIHooTCl7cmV0dXJuIEw8PDMwfEw+Pj4yfWZ1bmN0aW9uIE4oTCxLLFUsVyl7cmV0dXJuIDA9PT1MP0smVXx+SyZXOjI9PT1MP0smVXxLJld8VSZXOkteVV5XfUkoUCxfKSxQLnByb3RvdHlwZS5pbml0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2E9'@;
put 'MTczMjU4NDE5Myx0aGlzLl9iPTQwMjMyMzM0MTcsdGhpcy5fYz0yNTYyMzgzMTAyLHRoaXMuX2Q9MjcxNzMzODc4LHRoaXMuX2U9MzI4NTM3NzUyMCx0aGlzfSxQLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKEwpe2Zvcih2YXIgSz10aGlzLl93LFU9MHx0aGlzLl9hLFc9MHx0aGlzLl9i'@;
put 'LFk9MHx0aGlzLl9jLHE9MHx0aGlzLl9kLGVlPTB8dGhpcy5fZSxKPTA7SjwxNjsrK0opS1tKXT1MLnJlYWRJbnQzMkJFKDQqSik7Zm9yKDtKPDgwOysrSilLW0pdPUYoS1tKLTNdXktbSi04XV5LW0otMTRdXktbSi0xNl0pO2Zvcih2YXIgbmU9MDtuZTw4MDsrK25lKXt2YXIgaWU9fn4obmUv'@;
put 'MjApLGxlPU8oVSkrTihpZSxXLFkscSkrZWUrS1tuZV0rQltpZV18MDtlZT1xLHE9WSxZPXooVyksVz1VLFU9bGV9dGhpcy5fYT1VK3RoaXMuX2F8MCx0aGlzLl9iPVcrdGhpcy5fYnwwLHRoaXMuX2M9WSt0aGlzLl9jfDAsdGhpcy5fZD1xK3RoaXMuX2R8MCx0aGlzLl9lPWVlK3RoaXMuX2V8'@;
put 'MH0sUC5wcm90b3R5cGUuX2hhc2g9ZnVuY3Rpb24oKXt2YXIgTD1nLmFsbG9jVW5zYWZlKDIwKTtyZXR1cm4gTC53cml0ZUludDMyQkUoMHx0aGlzLl9hLDApLEwud3JpdGVJbnQzMkJFKDB8dGhpcy5fYiw0KSxMLndyaXRlSW50MzJCRSgwfHRoaXMuX2MsOCksTC53cml0ZUludDMyQkUoMHx0'@;
put 'aGlzLl9kLDEyKSxMLndyaXRlSW50MzJCRSgwfHRoaXMuX2UsMTYpLEx9LHVlLmV4cG9ydHM9UH0sODQzMjoodWUsWCx5KT0+e3ZhciBJPXkoNTcxNyksXz15KDc0OTkpLGc9eSg0MTg5KSxCPXkoOTUwOSkuQnVmZmVyLHc9bmV3IEFycmF5KDY0KTtmdW5jdGlvbiBQKCl7dGhpcy5pbml0KCks'@;
put 'dGhpcy5fdz13LGcuY2FsbCh0aGlzLDY0LDU2KX1JKFAsXyksUC5wcm90b3R5cGUuaW5pdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9hPTMyMzgzNzEwMzIsdGhpcy5fYj05MTQxNTA2NjMsdGhpcy5fYz04MTI3MDI5OTksdGhpcy5fZD00MTQ0OTEyNjk3LHRoaXMuX2U9NDI5MDc3NTg1Nyx0'@;
put 'aGlzLl9mPTE3NTA2MDMwMjUsdGhpcy5fZz0xNjk0MDc2ODM5LHRoaXMuX2g9MzIwNDA3NTQyOCx0aGlzfSxQLnByb3RvdHlwZS5faGFzaD1mdW5jdGlvbigpe3ZhciBGPUIuYWxsb2NVbnNhZmUoMjgpO3JldHVybiBGLndyaXRlSW50MzJCRSh0aGlzLl9hLDApLEYud3JpdGVJbnQzMkJFKHRo'@;
put 'aXMuX2IsNCksRi53cml0ZUludDMyQkUodGhpcy5fYyw4KSxGLndyaXRlSW50MzJCRSh0aGlzLl9kLDEyKSxGLndyaXRlSW50MzJCRSh0aGlzLl9lLDE2KSxGLndyaXRlSW50MzJCRSh0aGlzLl9mLDIwKSxGLndyaXRlSW50MzJCRSh0aGlzLl9nLDI0KSxGfSx1ZS5leHBvcnRzPVB9LDc0OTk6'@;
put 'KHVlLFgseSk9Pnt2YXIgST15KDU3MTcpLF89eSg0MTg5KSxnPXkoOTUwOSkuQnVmZmVyLEI9WzExMTYzNTI0MDgsMTg5OTQ0NzQ0MSwzMDQ5MzIzNDcxLDM5MjEwMDk1NzMsOTYxOTg3MTYzLDE1MDg5NzA5OTMsMjQ1MzYzNTc0OCwyODcwNzYzMjIxLDM2MjQzODEwODAsMzEwNTk4NDAxLDYw'@;
put 'NzIyNTI3OCwxNDI2ODgxOTg3LDE5MjUwNzgzODgsMjE2MjA3ODIwNiwyNjE0ODg4MTAzLDMyNDgyMjI1ODAsMzgzNTM5MDQwMSw0MDIyMjI0Nzc0LDI2NDM0NzA3OCw2MDQ4MDc2MjgsNzcwMjU1OTgzLDEyNDkxNTAxMjIsMTU1NTA4MTY5MiwxOTk2MDY0OTg2LDI1NTQyMjA4ODIsMjgyMTgz'@;
put 'NDM0OSwyOTUyOTk2ODA4LDMyMTAzMTM2NzEsMzMzNjU3MTg5MSwzNTg0NTI4NzExLDExMzkyNjk5MywzMzgyNDE4OTUsNjY2MzA3MjA1LDc3MzUyOTkxMiwxMjk0NzU3MzcyLDEzOTYxODIyOTEsMTY5NTE4MzcwMCwxOTg2NjYxMDUxLDIxNzcwMjYzNTAsMjQ1Njk1NjAzNywyNzMwNDg1OTIx'@;
put 'LDI4MjAzMDI0MTEsMzI1OTczMDgwMCwzMzQ1NzY0NzcxLDM1MTYwNjU4MTcsMzYwMDM1MjgwNCw0MDk0NTcxOTA5LDI3NTQyMzM0NCw0MzAyMjc3MzQsNTA2OTQ4NjE2LDY1OTA2MDU1Niw4ODM5OTc4NzcsOTU4MTM5NTcxLDEzMjI4MjIyMTgsMTUzNzAwMjA2MywxNzQ3ODczNzc5LDE5NTU1'@;
put 'NjIyMjIsMjAyNDEwNDgxNSwyMjI3NzMwNDUyLDIzNjE4NTI0MjQsMjQyODQzNjQ3NCwyNzU2NzM0MTg3LDMyMDQwMzE0NzksMzMyOTMyNTI5OF0sdz1uZXcgQXJyYXkoNjQpO2Z1bmN0aW9uIFAoKXt0aGlzLmluaXQoKSx0aGlzLl93PXcsXy5jYWxsKHRoaXMsNjQsNTYpfWZ1bmN0aW9uIEYo'@;
put 'VSxXLFkpe3JldHVybiBZXlUmKFdeWSl9ZnVuY3Rpb24gTyhVLFcsWSl7cmV0dXJuIFUmV3xZJihVfFcpfWZ1bmN0aW9uIHooVSl7cmV0dXJuKFU+Pj4yfFU8PDMwKV4oVT4+PjEzfFU8PDE5KV4oVT4+PjIyfFU8PDEwKX1mdW5jdGlvbiBOKFUpe3JldHVybihVPj4+NnxVPDwyNileKFU+Pj4x'@;
put 'MXxVPDwyMSleKFU+Pj4yNXxVPDw3KX1mdW5jdGlvbiBMKFUpe3JldHVybihVPj4+N3xVPDwyNSleKFU+Pj4xOHxVPDwxNCleVT4+PjN9ZnVuY3Rpb24gSyhVKXtyZXR1cm4oVT4+PjE3fFU8PDE1KV4oVT4+PjE5fFU8PDEzKV5VPj4+MTB9SShQLF8pLFAucHJvdG90eXBlLmluaXQ9ZnVuY3Rp'@;
put 'b24oKXtyZXR1cm4gdGhpcy5fYT0xNzc5MDMzNzAzLHRoaXMuX2I9MzE0NDEzNDI3Nyx0aGlzLl9jPTEwMTM5MDQyNDIsdGhpcy5fZD0yNzczNDgwNzYyLHRoaXMuX2U9MTM1OTg5MzExOSx0aGlzLl9mPTI2MDA4MjI5MjQsdGhpcy5fZz01Mjg3MzQ2MzUsdGhpcy5faD0xNTQxNDU5MjI1LHRo'@;
put 'aXN9LFAucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oVSl7Zm9yKHZhciBXPXRoaXMuX3csWT0wfHRoaXMuX2EscT0wfHRoaXMuX2IsZWU9MHx0aGlzLl9jLEo9MHx0aGlzLl9kLG5lPTB8dGhpcy5fZSxpZT0wfHRoaXMuX2YsbGU9MHx0aGlzLl9nLG1lPTB8dGhpcy5faCxfZT0wO19lPDE2'@;
put 'OysrX2UpV1tfZV09VS5yZWFkSW50MzJCRSg0Kl9lKTtmb3IoO19lPDY0OysrX2UpV1tfZV09SyhXW19lLTJdKStXW19lLTddK0woV1tfZS0xNV0pK1dbX2UtMTZdfDA7Zm9yKHZhciBUZT0wO1RlPDY0OysrVGUpe3ZhciBTZT1tZStOKG5lKStGKG5lLGllLGxlKStCW1RlXStXW1RlXXwwLGpl'@;
put 'PXooWSkrTyhZLHEsZWUpfDA7bWU9bGUsbGU9aWUsaWU9bmUsbmU9SitTZXwwLEo9ZWUsZWU9cSxxPVksWT1TZStqZXwwfXRoaXMuX2E9WSt0aGlzLl9hfDAsdGhpcy5fYj1xK3RoaXMuX2J8MCx0aGlzLl9jPWVlK3RoaXMuX2N8MCx0aGlzLl9kPUordGhpcy5fZHwwLHRoaXMuX2U9bmUrdGhp'@;
put 'cy5fZXwwLHRoaXMuX2Y9aWUrdGhpcy5fZnwwLHRoaXMuX2c9bGUrdGhpcy5fZ3wwLHRoaXMuX2g9bWUrdGhpcy5faHwwfSxQLnByb3RvdHlwZS5faGFzaD1mdW5jdGlvbigpe3ZhciBVPWcuYWxsb2NVbnNhZmUoMzIpO3JldHVybiBVLndyaXRlSW50MzJCRSh0aGlzLl9hLDApLFUud3JpdGVJ'@;
put 'bnQzMkJFKHRoaXMuX2IsNCksVS53cml0ZUludDMyQkUodGhpcy5fYyw4KSxVLndyaXRlSW50MzJCRSh0aGlzLl9kLDEyKSxVLndyaXRlSW50MzJCRSh0aGlzLl9lLDE2KSxVLndyaXRlSW50MzJCRSh0aGlzLl9mLDIwKSxVLndyaXRlSW50MzJCRSh0aGlzLl9nLDI0KSxVLndyaXRlSW50MzJC'@;
put 'RSh0aGlzLl9oLDI4KSxVfSx1ZS5leHBvcnRzPVB9LDE2ODY6KHVlLFgseSk9Pnt2YXIgST15KDU3MTcpLF89eSg3ODE2KSxnPXkoNDE4OSksQj15KDk1MDkpLkJ1ZmZlcix3PW5ldyBBcnJheSgxNjApO2Z1bmN0aW9uIFAoKXt0aGlzLmluaXQoKSx0aGlzLl93PXcsZy5jYWxsKHRoaXMsMTI4'@;
put 'LDExMil9SShQLF8pLFAucHJvdG90eXBlLmluaXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYWg9MzQxODA3MDM2NSx0aGlzLl9iaD0xNjU0MjcwMjUwLHRoaXMuX2NoPTI0Mzg1MjkzNzAsdGhpcy5fZGg9MzU1NDYyMzYwLHRoaXMuX2VoPTE3MzE0MDU0MTUsdGhpcy5fZmg9MjM5NDE4MDIz'@;
put 'MSx0aGlzLl9naD0zNjc1MDA4NTI1LHRoaXMuX2hoPTEyMDMwNjI4MTMsdGhpcy5fYWw9MzIzODM3MTAzMix0aGlzLl9ibD05MTQxNTA2NjMsdGhpcy5fY2w9ODEyNzAyOTk5LHRoaXMuX2RsPTQxNDQ5MTI2OTcsdGhpcy5fZWw9NDI5MDc3NTg1Nyx0aGlzLl9mbD0xNzUwNjAzMDI1LHRoaXMu'@;
put 'X2dsPTE2OTQwNzY4MzksdGhpcy5faGw9MzIwNDA3NTQyOCx0aGlzfSxQLnByb3RvdHlwZS5faGFzaD1mdW5jdGlvbigpe3ZhciBGPUIuYWxsb2NVbnNhZmUoNDgpO2Z1bmN0aW9uIE8oeixOLEwpe0Yud3JpdGVJbnQzMkJFKHosTCksRi53cml0ZUludDMyQkUoTixMKzQpfXJldHVybiBPKHRo'@;
put 'aXMuX2FoLHRoaXMuX2FsLDApLE8odGhpcy5fYmgsdGhpcy5fYmwsOCksTyh0aGlzLl9jaCx0aGlzLl9jbCwxNiksTyh0aGlzLl9kaCx0aGlzLl9kbCwyNCksTyh0aGlzLl9laCx0aGlzLl9lbCwzMiksTyh0aGlzLl9maCx0aGlzLl9mbCw0MCksRn0sdWUuZXhwb3J0cz1QfSw3ODE2Oih1ZSxY'@;
put 'LHkpPT57dmFyIEk9eSg1NzE3KSxfPXkoNDE4OSksZz15KDk1MDkpLkJ1ZmZlcixCPVsxMTE2MzUyNDA4LDM2MDk3Njc0NTgsMTg5OTQ0NzQ0MSw2MDI4OTE3MjUsMzA0OTMyMzQ3MSwzOTY0NDg0Mzk5LDM5MjEwMDk1NzMsMjE3MzI5NTU0OCw5NjE5ODcxNjMsNDA4MTYyODQ3MiwxNTA4OTcw'@;
put 'OTkzLDMwNTM4MzQyNjUsMjQ1MzYzNTc0OCwyOTM3NjcxNTc5LDI4NzA3NjMyMjEsMzY2NDYwOTU2MCwzNjI0MzgxMDgwLDI3MzQ4ODMzOTQsMzEwNTk4NDAxLDExNjQ5OTY1NDIsNjA3MjI1Mjc4LDEzMjM2MTA3NjQsMTQyNjg4MTk4NywzNTkwMzA0OTk0LDE5MjUwNzgzODgsNDA2ODE4MjM4'@;
put 'MywyMTYyMDc4MjA2LDk5MTMzNjExMywyNjE0ODg4MTAzLDYzMzgwMzMxNywzMjQ4MjIyNTgwLDM0Nzk3NzQ4NjgsMzgzNTM5MDQwMSwyNjY2NjEzNDU4LDQwMjIyMjQ3NzQsOTQ0NzExMTM5LDI2NDM0NzA3OCwyMzQxMjYyNzczLDYwNDgwNzYyOCwyMDA3ODAwOTMzLDc3MDI1NTk4MywxNDk1'@;
put 'OTkwOTAxLDEyNDkxNTAxMjIsMTg1NjQzMTIzNSwxNTU1MDgxNjkyLDMxNzUyMTgxMzIsMTk5NjA2NDk4NiwyMTk4OTUwODM3LDI1NTQyMjA4ODIsMzk5OTcxOTMzOSwyODIxODM0MzQ5LDc2Njc4NDAxNiwyOTUyOTk2ODA4LDI1NjY1OTQ4NzksMzIxMDMxMzY3MSwzMjAzMzM3OTU2LDMzMzY1'@;
put 'NzE4OTEsMTAzNDQ1NzAyNiwzNTg0NTI4NzExLDI0NjY5NDg5MDEsMTEzOTI2OTkzLDM3NTgzMjYzODMsMzM4MjQxODk1LDE2ODcxNzkzNiw2NjYzMDcyMDUsMTE4ODE3OTk2NCw3NzM1Mjk5MTIsMTU0NjA0NTczNCwxMjk0NzU3MzcyLDE1MjI4MDU0ODUsMTM5NjE4MjI5MSwyNjQzODMzODIz'@;
put 'LDE2OTUxODM3MDAsMjM0MzUyNzM5MCwxOTg2NjYxMDUxLDEwMTQ0Nzc0ODAsMjE3NzAyNjM1MCwxMjA2NzU5MTQyLDI0NTY5NTYwMzcsMzQ0MDc3NjI3LDI3MzA0ODU5MjEsMTI5MDg2MzQ2MCwyODIwMzAyNDExLDMxNTg0NTQyNzMsMzI1OTczMDgwMCwzNTA1OTUyNjU3LDMzNDU3NjQ3NzEs'@;
put 'MTA2MjE3MDA4LDM1MTYwNjU4MTcsMzYwNjAwODM0NCwzNjAwMzUyODA0LDE0MzI3MjU3NzYsNDA5NDU3MTkwOSwxNDY3MDMxNTk0LDI3NTQyMzM0NCw4NTExNjk3MjAsNDMwMjI3NzM0LDMxMDA4MjM3NTIsNTA2OTQ4NjE2LDEzNjMyNTgxOTUsNjU5MDYwNTU2LDM3NTA2ODU1OTMsODgzOTk3'@;
put 'ODc3LDM3ODUwNTAyODAsOTU4MTM5NTcxLDMzMTgzMDc0MjcsMTMyMjgyMjIxOCwzODEyNzIzNDAzLDE1MzcwMDIwNjMsMjAwMzAzNDk5NSwxNzQ3ODczNzc5LDM2MDIwMzY4OTksMTk1NTU2MjIyMiwxNTc1OTkwMDEyLDIwMjQxMDQ4MTUsMTEyNTU5MjkyOCwyMjI3NzMwNDUyLDI3MTY5MDQz'@;
put 'MDYsMjM2MTg1MjQyNCw0NDI3NzYwNDQsMjQyODQzNjQ3NCw1OTM2OTgzNDQsMjc1NjczNDE4NywzNzMzMTEwMjQ5LDMyMDQwMzE0NzksMjk5OTM1MTU3MywzMzI5MzI1Mjk4LDM4MTU5MjA0MjcsMzM5MTU2OTYxNCwzOTI4MzgzOTAwLDM1MTUyNjcyNzEsNTY2MjgwNzExLDM5NDAxODc2MDYs'@;
put 'MzQ1NDA2OTUzNCw0MTE4NjMwMjcxLDQwMDAyMzk5OTIsMTE2NDE4NDc0LDE5MTQxMzg1NTQsMTc0MjkyNDIxLDI3MzEwNTUyNzAsMjg5MzgwMzU2LDMyMDM5OTMwMDYsNDYwMzkzMjY5LDMyMDYyMDMxNSw2ODU0NzE3MzMsNTg3NDk2ODM2LDg1MjE0Mjk3MSwxMDg2NzkyODUxLDEwMTcwMzYy'@;
put 'OTgsMzY1NTQzMTAwLDExMjYwMDA1ODAsMjYxODI5NzY3NiwxMjg4MDMzNDcwLDM0MDk4NTUxNTgsMTUwMTUwNTk0OCw0MjM0NTA5ODY2LDE2MDcxNjc5MTUsOTg3MTY3NDY4LDE4MTY0MDIzMTYsMTI0NjE4OTU5MV0sdz1uZXcgQXJyYXkoMTYwKTtmdW5jdGlvbiBQKCl7dGhpcy5pbml0KCks'@;
put 'dGhpcy5fdz13LF8uY2FsbCh0aGlzLDEyOCwxMTIpfWZ1bmN0aW9uIEYocSxlZSxKKXtyZXR1cm4gSl5xJihlZV5KKX1mdW5jdGlvbiBPKHEsZWUsSil7cmV0dXJuIHEmZWV8SiYocXxlZSl9ZnVuY3Rpb24geihxLGVlKXtyZXR1cm4ocT4+PjI4fGVlPDw0KV4oZWU+Pj4yfHE8PDMwKV4oZWU+'@;
put 'Pj43fHE8PDI1KX1mdW5jdGlvbiBOKHEsZWUpe3JldHVybihxPj4+MTR8ZWU8PDE4KV4ocT4+PjE4fGVlPDwxNCleKGVlPj4+OXxxPDwyMyl9ZnVuY3Rpb24gTChxLGVlKXtyZXR1cm4ocT4+PjF8ZWU8PDMxKV4ocT4+Pjh8ZWU8PDI0KV5xPj4+N31mdW5jdGlvbiBLKHEsZWUpe3JldHVybihx'@;
put 'Pj4+MXxlZTw8MzEpXihxPj4+OHxlZTw8MjQpXihxPj4+N3xlZTw8MjUpfWZ1bmN0aW9uIFUocSxlZSl7cmV0dXJuKHE+Pj4xOXxlZTw8MTMpXihlZT4+PjI5fHE8PDMpXnE+Pj42fWZ1bmN0aW9uIFcocSxlZSl7cmV0dXJuKHE+Pj4xOXxlZTw8MTMpXihlZT4+PjI5fHE8PDMpXihxPj4+Nnxl'@;
put 'ZTw8MjYpfWZ1bmN0aW9uIFkocSxlZSl7cmV0dXJuIHE+Pj4wPGVlPj4+MD8xOjB9SShQLF8pLFAucHJvdG90eXBlLmluaXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYWg9MTc3OTAzMzcwMyx0aGlzLl9iaD0zMTQ0MTM0Mjc3LHRoaXMuX2NoPTEwMTM5MDQyNDIsdGhpcy5fZGg9Mjc3MzQ4'@;
put 'MDc2Mix0aGlzLl9laD0xMzU5ODkzMTE5LHRoaXMuX2ZoPTI2MDA4MjI5MjQsdGhpcy5fZ2g9NTI4NzM0NjM1LHRoaXMuX2hoPTE1NDE0NTkyMjUsdGhpcy5fYWw9NDA4OTIzNTcyMCx0aGlzLl9ibD0yMjI3ODczNTk1LHRoaXMuX2NsPTQyNzExNzU3MjMsdGhpcy5fZGw9MTU5NTc1MDEyOSx0'@;
put 'aGlzLl9lbD0yOTE3NTY1MTM3LHRoaXMuX2ZsPTcyNTUxMTE5OSx0aGlzLl9nbD00MjE1Mzg5NTQ3LHRoaXMuX2hsPTMyNzAzMzIwOSx0aGlzfSxQLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKHEpe2Zvcih2YXIgZWU9dGhpcy5fdyxKPTB8dGhpcy5fYWgsbmU9MHx0aGlzLl9iaCxpZT0w'@;
put 'fHRoaXMuX2NoLGxlPTB8dGhpcy5fZGgsbWU9MHx0aGlzLl9laCxfZT0wfHRoaXMuX2ZoLFRlPTB8dGhpcy5fZ2gsU2U9MHx0aGlzLl9oaCxqZT0wfHRoaXMuX2FsLFY9MHx0aGlzLl9ibCxwPTB8dGhpcy5fY2wsYj0wfHRoaXMuX2RsLHg9MHx0aGlzLl9lbCxDPTB8dGhpcy5fZmwsVD0wfHRo'@;
put 'aXMuX2dsLEg9MHx0aGlzLl9obCxqPTA7ajwzMjtqKz0yKWVlW2pdPXEucmVhZEludDMyQkUoNCpqKSxlZVtqKzFdPXEucmVhZEludDMyQkUoNCpqKzQpO2Zvcig7ajwxNjA7ais9Mil7dmFyIEU9ZWVbai0zMF0sbT1lZVtqLTMwKzFdLEE9TChFLG0pLGFlPUsobSxFKSx0ZT1VKEU9ZWVbai00'@;
put 'XSxtPWVlW2otNCsxXSksc2U9VyhtLEUpLEplPWVlW2otMzJdLG90PWVlW2otMzIrMV0seGU9YWUrZWVbai0xNCsxXXwwLHZlPUErZWVbai0xNF0rWSh4ZSxhZSl8MDt2ZT0odmU9dmUrdGUrWSh4ZT14ZStzZXwwLHNlKXwwKStKZStZKHhlPXhlK290fDAsb3QpfDAsZWVbal09dmUsZWVbaisx'@;
put 'XT14ZX1mb3IodmFyIFhlPTA7WGU8MTYwO1hlKz0yKXt2ZT1lZVtYZV0seGU9ZWVbWGUrMV07dmFyIHplPU8oSixuZSxpZSksRGU9TyhqZSxWLHApLEZlPXooSixqZSksT2U9eihqZSxKKSxJZT1OKG1lLHgpLFZlPU4oeCxtZSksa2U9QltYZV0sQWU9QltYZSsxXSxfdD1GKG1lLF9lLFRlKSxu'@;
put 'dD1GKHgsQyxUKSxRZT1IK1ZlfDAsdW49U2UrSWUrWShRZSxIKXwwO3VuPSh1bj0odW49dW4rX3QrWShRZT1RZStudHwwLG50KXwwKStrZStZKFFlPVFlK0FlfDAsQWUpfDApK3ZlK1koUWU9UWUreGV8MCx4ZSl8MDt2YXIgeXQ9T2UrRGV8MCxNdD1GZSt6ZStZKHl0LE9lKXwwO1NlPVRlLEg9'@;
put 'VCxUZT1fZSxUPUMsX2U9bWUsQz14LG1lPWxlK3VuK1koeD1iK1FlfDAsYil8MCxsZT1pZSxiPXAsaWU9bmUscD1WLG5lPUosVj1qZSxKPXVuK010K1koamU9UWUreXR8MCxRZSl8MH10aGlzLl9hbD10aGlzLl9hbCtqZXwwLHRoaXMuX2JsPXRoaXMuX2JsK1Z8MCx0aGlzLl9jbD10aGlzLl9j'@;
put 'bCtwfDAsdGhpcy5fZGw9dGhpcy5fZGwrYnwwLHRoaXMuX2VsPXRoaXMuX2VsK3h8MCx0aGlzLl9mbD10aGlzLl9mbCtDfDAsdGhpcy5fZ2w9dGhpcy5fZ2wrVHwwLHRoaXMuX2hsPXRoaXMuX2hsK0h8MCx0aGlzLl9haD10aGlzLl9haCtKK1kodGhpcy5fYWwsamUpfDAsdGhpcy5fYmg9dGhp'@;
put 'cy5fYmgrbmUrWSh0aGlzLl9ibCxWKXwwLHRoaXMuX2NoPXRoaXMuX2NoK2llK1kodGhpcy5fY2wscCl8MCx0aGlzLl9kaD10aGlzLl9kaCtsZStZKHRoaXMuX2RsLGIpfDAsdGhpcy5fZWg9dGhpcy5fZWgrbWUrWSh0aGlzLl9lbCx4KXwwLHRoaXMuX2ZoPXRoaXMuX2ZoK19lK1kodGhpcy5f'@;
put 'ZmwsQyl8MCx0aGlzLl9naD10aGlzLl9naCtUZStZKHRoaXMuX2dsLFQpfDAsdGhpcy5faGg9dGhpcy5faGgrU2UrWSh0aGlzLl9obCxIKXwwfSxQLnByb3RvdHlwZS5faGFzaD1mdW5jdGlvbigpe3ZhciBxPWcuYWxsb2NVbnNhZmUoNjQpO2Z1bmN0aW9uIGVlKEosbmUsaWUpe3Eud3JpdGVJ'@;
put 'bnQzMkJFKEosaWUpLHEud3JpdGVJbnQzMkJFKG5lLGllKzQpfXJldHVybiBlZSh0aGlzLl9haCx0aGlzLl9hbCwwKSxlZSh0aGlzLl9iaCx0aGlzLl9ibCw4KSxlZSh0aGlzLl9jaCx0aGlzLl9jbCwxNiksZWUodGhpcy5fZGgsdGhpcy5fZGwsMjQpLGVlKHRoaXMuX2VoLHRoaXMuX2VsLDMy'@;
put 'KSxlZSh0aGlzLl9maCx0aGlzLl9mbCw0MCksZWUodGhpcy5fZ2gsdGhpcy5fZ2wsNDgpLGVlKHRoaXMuX2hoLHRoaXMuX2hsLDU2KSxxfSx1ZS5leHBvcnRzPVB9LDI4MzA6KHVlLFgseSk9Pnt1ZS5leHBvcnRzPWc7dmFyIEk9eSg3MTg3KS5FdmVudEVtaXR0ZXI7ZnVuY3Rpb24gZygpe0ku'@;
put 'Y2FsbCh0aGlzKX15KDU3MTcpKGcsSSksZy5SZWFkYWJsZT15KDk0ODEpLGcuV3JpdGFibGU9eSg0MjI5KSxnLkR1cGxleD15KDY3NTMpLGcuVHJhbnNmb3JtPXkoNDYwNSksZy5QYXNzVGhyb3VnaD15KDI3MjUpLGcuZmluaXNoZWQ9eSg4NjEwKSxnLnBpcGVsaW5lPXkoOTk0NiksZy5TdHJl'@;
put 'YW09ZyxnLnByb3RvdHlwZS5waXBlPWZ1bmN0aW9uKEIsdyl7dmFyIFA9dGhpcztmdW5jdGlvbiBGKFcpe0Iud3JpdGFibGUmJiExPT09Qi53cml0ZShXKSYmUC5wYXVzZSYmUC5wYXVzZSgpfWZ1bmN0aW9uIE8oKXtQLnJlYWRhYmxlJiZQLnJlc3VtZSYmUC5yZXN1bWUoKX1QLm9uKCJkYXRh'@;
put 'IixGKSxCLm9uKCJkcmFpbiIsTyksIUIuX2lzU3RkaW8mJighd3x8ITEhPT13LmVuZCkmJihQLm9uKCJlbmQiLE4pLFAub24oImNsb3NlIixMKSk7dmFyIHo9ITE7ZnVuY3Rpb24gTigpe3p8fCh6PSEwLEIuZW5kKCkpfWZ1bmN0aW9uIEwoKXt6fHwoej0hMCwiZnVuY3Rpb24iPT10eXBlb2Yg'@;
put 'Qi5kZXN0cm95JiZCLmRlc3Ryb3koKSl9ZnVuY3Rpb24gSyhXKXtpZihVKCksMD09PUkubGlzdGVuZXJDb3VudCh0aGlzLCJlcnJvciIpKXRocm93IFd9ZnVuY3Rpb24gVSgpe1AucmVtb3ZlTGlzdGVuZXIoImRhdGEiLEYpLEIucmVtb3ZlTGlzdGVuZXIoImRyYWluIixPKSxQLnJlbW92ZUxp'@;
put 'c3RlbmVyKCJlbmQiLE4pLFAucmVtb3ZlTGlzdGVuZXIoImNsb3NlIixMKSxQLnJlbW92ZUxpc3RlbmVyKCJlcnJvciIsSyksQi5yZW1vdmVMaXN0ZW5lcigiZXJyb3IiLEspLFAucmVtb3ZlTGlzdGVuZXIoImVuZCIsVSksUC5yZW1vdmVMaXN0ZW5lcigiY2xvc2UiLFUpLEIucmVtb3ZlTGlz'@;
put 'dGVuZXIoImNsb3NlIixVKX1yZXR1cm4gUC5vbigiZXJyb3IiLEspLEIub24oImVycm9yIixLKSxQLm9uKCJlbmQiLFUpLFAub24oImNsb3NlIixVKSxCLm9uKCJjbG9zZSIsVSksQi5lbWl0KCJwaXBlIixQKSxCfX0sMjU1MzoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDk1MDkp'@;
put 'LkJ1ZmZlcixfPUkuaXNFbmNvZGluZ3x8ZnVuY3Rpb24oSil7c3dpdGNoKChKPSIiK0opJiZKLnRvTG93ZXJDYXNlKCkpe2Nhc2UiaGV4IjpjYXNlInV0ZjgiOmNhc2UidXRmLTgiOmNhc2UiYXNjaWkiOmNhc2UiYmluYXJ5IjpjYXNlImJhc2U2NCI6Y2FzZSJ1Y3MyIjpjYXNlInVjcy0yIjpj'@;
put 'YXNlInV0ZjE2bGUiOmNhc2UidXRmLTE2bGUiOmNhc2UicmF3IjpyZXR1cm4hMDtkZWZhdWx0OnJldHVybiExfX07ZnVuY3Rpb24gdyhKKXt2YXIgbmU7c3dpdGNoKHRoaXMuZW5jb2Rpbmc9ZnVuY3Rpb24gQihKKXt2YXIgbmU9ZnVuY3Rpb24gZyhKKXtpZighSilyZXR1cm4idXRmOCI7Zm9y'@;
put 'KHZhciBuZTs7KXN3aXRjaChKKXtjYXNlInV0ZjgiOmNhc2UidXRmLTgiOnJldHVybiJ1dGY4IjtjYXNlInVjczIiOmNhc2UidWNzLTIiOmNhc2UidXRmMTZsZSI6Y2FzZSJ1dGYtMTZsZSI6cmV0dXJuInV0ZjE2bGUiO2Nhc2UibGF0aW4xIjpjYXNlImJpbmFyeSI6cmV0dXJuImxhdGluMSI7'@;
put 'Y2FzZSJiYXNlNjQiOmNhc2UiYXNjaWkiOmNhc2UiaGV4IjpyZXR1cm4gSjtkZWZhdWx0OmlmKG5lKXJldHVybjtKPSgiIitKKS50b0xvd2VyQ2FzZSgpLG5lPSEwfX0oSik7aWYoInN0cmluZyIhPXR5cGVvZiBuZSYmKEkuaXNFbmNvZGluZz09PV98fCFfKEopKSl0aHJvdyBuZXcgRXJyb3Io'@;
put 'IlVua25vd24gZW5jb2Rpbmc6ICIrSik7cmV0dXJuIG5lfHxKfShKKSx0aGlzLmVuY29kaW5nKXtjYXNlInV0ZjE2bGUiOnRoaXMudGV4dD1LLHRoaXMuZW5kPVUsbmU9NDticmVhaztjYXNlInV0ZjgiOnRoaXMuZmlsbExhc3Q9eixuZT00O2JyZWFrO2Nhc2UiYmFzZTY0Ijp0aGlzLnRleHQ9'@;
put 'Vyx0aGlzLmVuZD1ZLG5lPTM7YnJlYWs7ZGVmYXVsdDpyZXR1cm4gdGhpcy53cml0ZT1xLHZvaWQodGhpcy5lbmQ9ZWUpfXRoaXMubGFzdE5lZWQ9MCx0aGlzLmxhc3RUb3RhbD0wLHRoaXMubGFzdENoYXI9SS5hbGxvY1Vuc2FmZShuZSl9ZnVuY3Rpb24gUChKKXtyZXR1cm4gSjw9MTI3PzA6'@;
put 'Sj4+NT09Nj8yOko+PjQ9PTE0PzM6Sj4+Mz09MzA/NDpKPj42PT0yPy0xOi0yfWZ1bmN0aW9uIHooSil7dmFyIG5lPXRoaXMubGFzdFRvdGFsLXRoaXMubGFzdE5lZWQsaWU9ZnVuY3Rpb24gTyhKLG5lLGllKXtpZigxMjghPSgxOTImbmVbMF0pKXJldHVybiBKLmxhc3ROZWVkPTAsIlx1ZmZm'@;
put 'ZCI7aWYoSi5sYXN0TmVlZD4xJiZuZS5sZW5ndGg+MSl7aWYoMTI4IT0oMTkyJm5lWzFdKSlyZXR1cm4gSi5sYXN0TmVlZD0xLCJcdWZmZmQiO2lmKEoubGFzdE5lZWQ+MiYmbmUubGVuZ3RoPjImJjEyOCE9KDE5MiZuZVsyXSkpcmV0dXJuIEoubGFzdE5lZWQ9MiwiXHVmZmZkIn19KHRoaXMs'@;
put 'Sik7cmV0dXJuIHZvaWQgMCE9PWllP2llOnRoaXMubGFzdE5lZWQ8PUoubGVuZ3RoPyhKLmNvcHkodGhpcy5sYXN0Q2hhcixuZSwwLHRoaXMubGFzdE5lZWQpLHRoaXMubGFzdENoYXIudG9TdHJpbmcodGhpcy5lbmNvZGluZywwLHRoaXMubGFzdFRvdGFsKSk6KEouY29weSh0aGlzLmxhc3RD'@;
put 'aGFyLG5lLDAsSi5sZW5ndGgpLHZvaWQodGhpcy5sYXN0TmVlZC09Si5sZW5ndGgpKX1mdW5jdGlvbiBLKEosbmUpe2lmKChKLmxlbmd0aC1uZSklMj09MCl7dmFyIGllPUoudG9TdHJpbmcoInV0ZjE2bGUiLG5lKTtpZihpZSl7dmFyIGxlPWllLmNoYXJDb2RlQXQoaWUubGVuZ3RoLTEpO2lm'@;
put 'KGxlPj01NTI5NiYmbGU8PTU2MzE5KXJldHVybiB0aGlzLmxhc3ROZWVkPTIsdGhpcy5sYXN0VG90YWw9NCx0aGlzLmxhc3RDaGFyWzBdPUpbSi5sZW5ndGgtMl0sdGhpcy5sYXN0Q2hhclsxXT1KW0oubGVuZ3RoLTFdLGllLnNsaWNlKDAsLTEpfXJldHVybiBpZX1yZXR1cm4gdGhpcy5sYXN0'@;
put 'TmVlZD0xLHRoaXMubGFzdFRvdGFsPTIsdGhpcy5sYXN0Q2hhclswXT1KW0oubGVuZ3RoLTFdLEoudG9TdHJpbmcoInV0ZjE2bGUiLG5lLEoubGVuZ3RoLTEpfWZ1bmN0aW9uIFUoSil7dmFyIG5lPUomJkoubGVuZ3RoP3RoaXMud3JpdGUoSik6IiI7cmV0dXJuIHRoaXMubGFzdE5lZWQ/bmUr'@;
put 'dGhpcy5sYXN0Q2hhci50b1N0cmluZygidXRmMTZsZSIsMCx0aGlzLmxhc3RUb3RhbC10aGlzLmxhc3ROZWVkKTpuZX1mdW5jdGlvbiBXKEosbmUpe3ZhciBpZT0oSi5sZW5ndGgtbmUpJTM7cmV0dXJuIDA9PT1pZT9KLnRvU3RyaW5nKCJiYXNlNjQiLG5lKToodGhpcy5sYXN0TmVlZD0zLWll'@;
put 'LHRoaXMubGFzdFRvdGFsPTMsMT09PWllP3RoaXMubGFzdENoYXJbMF09SltKLmxlbmd0aC0xXToodGhpcy5sYXN0Q2hhclswXT1KW0oubGVuZ3RoLTJdLHRoaXMubGFzdENoYXJbMV09SltKLmxlbmd0aC0xXSksSi50b1N0cmluZygiYmFzZTY0IixuZSxKLmxlbmd0aC1pZSkpfWZ1bmN0aW9u'@;
put 'IFkoSil7dmFyIG5lPUomJkoubGVuZ3RoP3RoaXMud3JpdGUoSik6IiI7cmV0dXJuIHRoaXMubGFzdE5lZWQ/bmUrdGhpcy5sYXN0Q2hhci50b1N0cmluZygiYmFzZTY0IiwwLDMtdGhpcy5sYXN0TmVlZCk6bmV9ZnVuY3Rpb24gcShKKXtyZXR1cm4gSi50b1N0cmluZyh0aGlzLmVuY29kaW5n'@;
put 'KX1mdW5jdGlvbiBlZShKKXtyZXR1cm4gSiYmSi5sZW5ndGg/dGhpcy53cml0ZShKKToiIn1YLnM9dyx3LnByb3RvdHlwZS53cml0ZT1mdW5jdGlvbihKKXtpZigwPT09Si5sZW5ndGgpcmV0dXJuIiI7dmFyIG5lLGllO2lmKHRoaXMubGFzdE5lZWQpe2lmKHZvaWQgMD09PShuZT10aGlzLmZp'@;
put 'bGxMYXN0KEopKSlyZXR1cm4iIjtpZT10aGlzLmxhc3ROZWVkLHRoaXMubGFzdE5lZWQ9MH1lbHNlIGllPTA7cmV0dXJuIGllPEoubGVuZ3RoP25lP25lK3RoaXMudGV4dChKLGllKTp0aGlzLnRleHQoSixpZSk6bmV8fCIifSx3LnByb3RvdHlwZS5lbmQ9ZnVuY3Rpb24gTChKKXt2YXIgbmU9'@;
put 'SiYmSi5sZW5ndGg/dGhpcy53cml0ZShKKToiIjtyZXR1cm4gdGhpcy5sYXN0TmVlZD9uZSsiXHVmZmZkIjpuZX0sdy5wcm90b3R5cGUudGV4dD1mdW5jdGlvbiBOKEosbmUpe3ZhciBpZT1mdW5jdGlvbiBGKEosbmUsaWUpe3ZhciBsZT1uZS5sZW5ndGgtMTtpZihsZTxpZSlyZXR1cm4gMDt2'@;
put 'YXIgbWU9UChuZVtsZV0pO3JldHVybiBtZT49MD8obWU+MCYmKEoubGFzdE5lZWQ9bWUtMSksbWUpOi0tbGU8aWV8fC0yPT09bWU/MDoobWU9UChuZVtsZV0pKT49MD8obWU+MCYmKEoubGFzdE5lZWQ9bWUtMiksbWUpOi0tbGU8aWV8fC0yPT09bWU/MDoobWU9UChuZVtsZV0pKT49MD8obWU+'@;
put 'MCYmKDI9PT1tZT9tZT0wOkoubGFzdE5lZWQ9bWUtMyksbWUpOjB9KHRoaXMsSixuZSk7aWYoIXRoaXMubGFzdE5lZWQpcmV0dXJuIEoudG9TdHJpbmcoInV0ZjgiLG5lKTt0aGlzLmxhc3RUb3RhbD1pZTt2YXIgbGU9Si5sZW5ndGgtKGllLXRoaXMubGFzdE5lZWQpO3JldHVybiBKLmNvcHko'@;
put 'dGhpcy5sYXN0Q2hhciwwLGxlKSxKLnRvU3RyaW5nKCJ1dGY4IixuZSxsZSl9LHcucHJvdG90eXBlLmZpbGxMYXN0PWZ1bmN0aW9uKEope2lmKHRoaXMubGFzdE5lZWQ8PUoubGVuZ3RoKXJldHVybiBKLmNvcHkodGhpcy5sYXN0Q2hhcix0aGlzLmxhc3RUb3RhbC10aGlzLmxhc3ROZWVkLDAs'@;
put 'dGhpcy5sYXN0TmVlZCksdGhpcy5sYXN0Q2hhci50b1N0cmluZyh0aGlzLmVuY29kaW5nLDAsdGhpcy5sYXN0VG90YWwpO0ouY29weSh0aGlzLmxhc3RDaGFyLHRoaXMubGFzdFRvdGFsLXRoaXMubGFzdE5lZWQsMCxKLmxlbmd0aCksdGhpcy5sYXN0TmVlZC09Si5sZW5ndGh9fSw3ODU3Oih1'@;
put 'ZSxYLHkpPT57InVzZSBzdHJpY3QiO2NvbnN0IEk9eSgzNjg5KSxfPXkoNDU2NCksZz15KDc1MiksQj15KDIyMjQpLnksdz15KDU3NjEpLm0sUD15KDg5NzEpLlUsRj15KDc2NTIpLE89eSg0NTYpLHtmcm9tQ2FsbGJhY2s6en09eSg3MDQxKSx7Z2V0Q3VzdG9tSW5zcGVjdFN5bWJvbDpOfT15'@;
put 'KDEyNjkpLEw9L15bXHgyMVx4MjMtXHgyQlx4MkQtXHgzQVx4M0MtXHg1Qlx4NUQtXHg3RV0rJC8sSz0vW1x4MDAtXHgxRl0vLFU9WyJcbiIsIlxyIiwiXDAiXSxXPS9bXHgyMC1ceDNBXHgzQy1ceDdFXSsvLFk9L1tceDA5XHgyMC1ceDJGXHgzQi1ceDQwXHg1Qi1ceDYwXHg3Qi1ceDdFXS8s'@;
put 'cT17amFuOjAsZmViOjEsbWFyOjIsYXByOjMsbWF5OjQsanVuOjUsanVsOjYsYXVnOjcsc2VwOjgsb2N0Ojksbm92OjEwLGRlYzoxMX0sZWU9MjE0NzQ4MzY0N2UzLG5lPSdJbnZhbGlkIHNhbWVTaXRlQ29udGV4dCBvcHRpb24gZm9yIGdldENvb2tpZXMoKTsgZXhwZWN0ZWQgb25lIG9mICJz'@;
put 'dHJpY3QiLCAibGF4Iiwgb3IgIm5vbmUiJztmdW5jdGlvbiBpZSh6ZSl7Ri52YWxpZGF0ZShGLmlzTm9uRW1wdHlTdHJpbmcoemUpLHplKTtjb25zdCBEZT1TdHJpbmcoemUpLnRvTG93ZXJDYXNlKCk7cmV0dXJuIm5vbmUiPT09RGV8fCJsYXgiPT09RGV8fCJzdHJpY3QiPT09RGU/RGU6bnVs'@;
put 'bH1jb25zdCBsZT1PYmplY3QuZnJlZXplKHtTSUxFTlQ6InNpbGVudCIsU1RSSUNUOiJzdHJpY3QiLERJU0FCTEVEOiJ1bnNhZmUtZGlzYWJsZWQifSksbWU9Lyg/Ol4oPzoyNVswLTVdfDJbMC00XVxkfDFcZFxkfFsxLTldXGR8XGQpKD86XC4oPzoyNVswLTVdfDJbMC00XVxkfDFcZFxkfFsx'@;
put 'LTldXGR8XGQpKXszfSQpfCg/Ol4oPzooPzpbYS1mXGRdezEsNH06KXs3fSg/OlthLWZcZF17MSw0fXw6KXwoPzpbYS1mXGRdezEsNH06KXs2fSg/Oig/OjI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV1cZHxcZCkoPzpcLig/OjI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV1cZHxcZCkp'@;
put 'ezN9fDpbYS1mXGRdezEsNH18Oil8KD86W2EtZlxkXXsxLDR9Oil7NX0oPzo6KD86MjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XVxkfFxkKSg/OlwuKD86MjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XVxkfFxkKSl7M318KD86OlthLWZcZF17MSw0fSl7MSwyfXw6KXwoPzpbYS1mXGRd'@;
put 'ezEsNH06KXs0fSg/Oig/OjpbYS1mXGRdezEsNH0pezAsMX06KD86MjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XVxkfFxkKSg/OlwuKD86MjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XVxkfFxkKSl7M318KD86OlthLWZcZF17MSw0fSl7MSwzfXw6KXwoPzpbYS1mXGRdezEsNH06KXsz'@;
put 'fSg/Oig/OjpbYS1mXGRdezEsNH0pezAsMn06KD86MjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XVxkfFxkKSg/OlwuKD86MjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XVxkfFxkKSl7M318KD86OlthLWZcZF17MSw0fSl7MSw0fXw6KXwoPzpbYS1mXGRdezEsNH06KXsyfSg/Oig/Ojpb'@;
put 'YS1mXGRdezEsNH0pezAsM306KD86MjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XVxkfFxkKSg/OlwuKD86MjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XVxkfFxkKSl7M318KD86OlthLWZcZF17MSw0fSl7MSw1fXw6KXwoPzpbYS1mXGRdezEsNH06KXsxfSg/Oig/OjpbYS1mXGRdezEs'@;
put 'NH0pezAsNH06KD86MjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XVxkfFxkKSg/OlwuKD86MjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XVxkfFxkKSl7M318KD86OlthLWZcZF17MSw0fSl7MSw2fXw6KXwoPzo6KD86KD86OlthLWZcZF17MSw0fSl7MCw1fTooPzoyNVswLTVdfDJbMC00'@;
put 'XVxkfDFcZFxkfFsxLTldXGR8XGQpKD86XC4oPzoyNVswLTVdfDJbMC00XVxkfDFcZFxkfFsxLTldXGR8XGQpKXszfXwoPzo6W2EtZlxkXXsxLDR9KXsxLDd9fDopKSkkKS8sX2U9IlxuXFxbPyg/OlxuKD86W2EtZkEtRlxcZF17MSw0fTopezd9KD86W2EtZkEtRlxcZF17MSw0fXw6KXxcbig/'@;
put 'OlthLWZBLUZcXGRdezEsNH06KXs2fSg/Oig/OjI1WzAtNV18MlswLTRdXFxkfDFcXGRcXGR8WzEtOV1cXGR8XFxkKSg/OlxcLig/OjI1WzAtNV18MlswLTRdXFxkfDFcXGRcXGR8WzEtOV1cXGR8XFxkKSl7M318OlthLWZBLUZcXGRdezEsNH18Oil8XG4oPzpbYS1mQS1GXFxkXXsxLDR9Oil7'@;
put 'NX0oPzo6KD86MjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XVxcZHxcXGQpKD86XFwuKD86MjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XVxcZHxcXGQpKXszfXwoPzo6W2EtZkEtRlxcZF17MSw0fSl7MSwyfXw6KXxcbig/OlthLWZBLUZcXGRdezEsNH06KXs0fSg/Oig/Ojpb'@;
put 'YS1mQS1GXFxkXXsxLDR9KXswLDF9Oig/OjI1WzAtNV18MlswLTRdXFxkfDFcXGRcXGR8WzEtOV1cXGR8XFxkKSg/OlxcLig/OjI1WzAtNV18MlswLTRdXFxkfDFcXGRcXGR8WzEtOV1cXGR8XFxkKSl7M318KD86OlthLWZBLUZcXGRdezEsNH0pezEsM318Oil8XG4oPzpbYS1mQS1GXFxkXXsx'@;
put 'LDR9Oil7M30oPzooPzo6W2EtZkEtRlxcZF17MSw0fSl7MCwyfTooPzoyNVswLTVdfDJbMC00XVxcZHwxXFxkXFxkfFsxLTldXFxkfFxcZCkoPzpcXC4oPzoyNVswLTVdfDJbMC00XVxcZHwxXFxkXFxkfFsxLTldXFxkfFxcZCkpezN9fCg/OjpbYS1mQS1GXFxkXXsxLDR9KXsxLDR9fDopfFxu'@;
put 'KD86W2EtZkEtRlxcZF17MSw0fTopezJ9KD86KD86OlthLWZBLUZcXGRdezEsNH0pezAsM306KD86MjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XVxcZHxcXGQpKD86XFwuKD86MjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XVxcZHxcXGQpKXszfXwoPzo6W2EtZkEtRlxcZF17'@;
put 'MSw0fSl7MSw1fXw6KXxcbig/OlthLWZBLUZcXGRdezEsNH06KXsxfSg/Oig/OjpbYS1mQS1GXFxkXXsxLDR9KXswLDR9Oig/OjI1WzAtNV18MlswLTRdXFxkfDFcXGRcXGR8WzEtOV1cXGR8XFxkKSg/OlxcLig/OjI1WzAtNV18MlswLTRdXFxkfDFcXGRcXGR8WzEtOV1cXGR8XFxkKSl7M318'@;
put 'KD86OlthLWZBLUZcXGRdezEsNH0pezEsNn18Oil8XG4oPzo6KD86KD86OlthLWZBLUZcXGRdezEsNH0pezAsNX06KD86MjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XVxcZHxcXGQpKD86XFwuKD86MjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XVxcZHxcXGQpKXszfXwoPzo6'@;
put 'W2EtZkEtRlxcZF17MSw0fSl7MSw3fXw6KSlcbikoPzolWzAtOWEtekEtWl17MSx9KT9cXF0/XG4iLnJlcGxhY2UoL1xzKlwvXC8uKiQvZ20sIiIpLnJlcGxhY2UoL1xuL2csIiIpLnRyaW0oKSxUZT1uZXcgUmVnRXhwKGBeJHtfZX0kYCk7ZnVuY3Rpb24gU2UoemUsRGUsRmUsT2Upe2xldCBJ'@;
put 'ZT0wO2Zvcig7SWU8emUubGVuZ3RoOyl7Y29uc3QgVmU9emUuY2hhckNvZGVBdChJZSk7aWYoVmU8PTQ3fHxWZT49NTgpYnJlYWs7SWUrK31yZXR1cm4gSWU8RGV8fEllPkZlfHwhT2UmJkllIT16ZS5sZW5ndGg/bnVsbDpwYXJzZUludCh6ZS5zdWJzdHIoMCxJZSksMTApfWZ1bmN0aW9uIGpl'@;
put 'KHplKXtjb25zdCBEZT16ZS5zcGxpdCgiOiIpLEZlPVswLDAsMF07aWYoMyE9PURlLmxlbmd0aClyZXR1cm4gbnVsbDtmb3IobGV0IE9lPTA7T2U8MztPZSsrKXtjb25zdCBWZT1TZShEZVtPZV0sMSwyLDI9PU9lKTtpZihudWxsPT09VmUpcmV0dXJuIG51bGw7RmVbT2VdPVZlfXJldHVybiBG'@;
put 'ZX1mdW5jdGlvbiBWKHplKXt6ZT1TdHJpbmcoemUpLnN1YnN0cigwLDMpLnRvTG93ZXJDYXNlKCk7Y29uc3QgRGU9cVt6ZV07cmV0dXJuIERlPj0wP0RlOm51bGx9ZnVuY3Rpb24gcCh6ZSl7aWYoIXplKXJldHVybjtjb25zdCBEZT16ZS5zcGxpdChZKTtpZighRGUpcmV0dXJuO2xldCBGZT1u'@;
put 'dWxsLE9lPW51bGwsSWU9bnVsbCxWZT1udWxsLGtlPW51bGwsQWU9bnVsbDtmb3IobGV0IF90PTA7X3Q8RGUubGVuZ3RoO190Kyspe2NvbnN0IG50PURlW190XS50cmltKCk7aWYoIW50Lmxlbmd0aCljb250aW51ZTtsZXQgUWU7bnVsbD09PUllJiYoUWU9amUobnQpLFFlKT8oRmU9UWVbMF0s'@;
put 'T2U9UWVbMV0sSWU9UWVbMl0pOm51bGwhPT1WZXx8KFFlPVNlKG50LDEsMiwhMCksbnVsbD09PVFlKT9udWxsIT09a2V8fChRZT1WKG50KSxudWxsPT09UWUpP251bGw9PT1BZSYmKFFlPVNlKG50LDIsNCwhMCksbnVsbCE9PVFlJiYoQWU9UWUsQWU+PTcwJiZBZTw9OTk/QWUrPTE5MDA6QWU+'@;
put 'PTAmJkFlPD02OSYmKEFlKz0yZTMpKSk6a2U9UWU6VmU9UWV9cmV0dXJuIG51bGw9PT1WZXx8bnVsbD09PWtlfHxudWxsPT09QWV8fG51bGw9PT1JZXx8VmU8MXx8VmU+MzF8fEFlPDE2MDF8fEZlPjIzfHxPZT41OXx8SWU+NTk/dm9pZCAwOm5ldyBEYXRlKERhdGUuVVRDKEFlLGtlLFZlLEZl'@;
put 'LE9lLEllKSl9ZnVuY3Rpb24gYih6ZSl7cmV0dXJuIEYudmFsaWRhdGUoRi5pc0RhdGUoemUpLHplKSx6ZS50b1VUQ1N0cmluZygpfWZ1bmN0aW9uIHgoemUpe3JldHVybiBudWxsPT16ZT9udWxsOih6ZT16ZS50cmltKCkucmVwbGFjZSgvXlwuLywiIiksVGUudGVzdCh6ZSkmJih6ZT16ZS5y'@;
put 'ZXBsYWNlKCJbIiwiIikucmVwbGFjZSgiXSIsIiIpKSxJJiYvW15cdTAwMDEtXHUwMDdmXS8udGVzdCh6ZSkmJih6ZT1JLnRvQVNDSUkoemUpKSx6ZS50b0xvd2VyQ2FzZSgpKX1mdW5jdGlvbiBDKHplLERlLEZlKXtpZihudWxsPT16ZXx8bnVsbD09RGUpcmV0dXJuIG51bGw7aWYoITEhPT1G'@;
put 'ZSYmKHplPXgoemUpLERlPXgoRGUpKSx6ZT09RGUpcmV0dXJuITA7Y29uc3QgT2U9emUubGFzdEluZGV4T2YoRGUpO3JldHVybiEoT2U8PTB8fHplLmxlbmd0aCE9PURlLmxlbmd0aCtPZXx8Ii4iIT09emUuc3Vic3RyKE9lLTEsMSl8fG1lLnRlc3QoemUpKX1mdW5jdGlvbiBUKHplKXtpZigh'@;
put 'emV8fCIvIiE9PXplLnN1YnN0cigwLDEpKXJldHVybiIvIjtpZigiLyI9PT16ZSlyZXR1cm4gemU7Y29uc3QgRGU9emUubGFzdEluZGV4T2YoIi8iKTtyZXR1cm4gMD09PURlPyIvIjp6ZS5zbGljZSgwLERlKX1mdW5jdGlvbiBFKHplLERlKXtpZigoIURlfHwib2JqZWN0IiE9dHlwZW9mIERl'@;
put 'KSYmKERlPXt9KSxGLmlzRW1wdHlTdHJpbmcoemUpfHwhRi5pc1N0cmluZyh6ZSkpcmV0dXJuIG51bGw7Y29uc3QgRmU9KHplPXplLnRyaW0oKSkuaW5kZXhPZigiOyIpLEllPWZ1bmN0aW9uIGooemUsRGUpe3plPWZ1bmN0aW9uIEgoemUpe2lmKEYuaXNFbXB0eVN0cmluZyh6ZSkpcmV0dXJu'@;
put 'IHplO2ZvcihsZXQgRGU9MDtEZTxVLmxlbmd0aDtEZSsrKXtjb25zdCBGZT16ZS5pbmRleE9mKFVbRGVdKTstMSE9PUZlJiYoemU9emUuc3Vic3RyKDAsRmUpKX1yZXR1cm4gemV9KHplKSxGLnZhbGlkYXRlKEYuaXNTdHJpbmcoemUpLHplKTtsZXQgT2UsSWUsRmU9emUuaW5kZXhPZigiPSIp'@;
put 'O2lmKERlKTA9PT1GZSYmKEZlPSh6ZT16ZS5zdWJzdHIoMSkpLmluZGV4T2YoIj0iKSk7ZWxzZSBpZihGZTw9MClyZXR1cm47aWYoRmU8PTA/KE9lPSIiLEllPXplLnRyaW0oKSk6KE9lPXplLnN1YnN0cigwLEZlKS50cmltKCksSWU9emUuc3Vic3RyKEZlKzEpLnRyaW0oKSksSy50ZXN0KE9l'@;
put 'KXx8Sy50ZXN0KEllKSlyZXR1cm47Y29uc3QgVmU9bmV3IG90O3JldHVybiBWZS5rZXk9T2UsVmUudmFsdWU9SWUsVmV9KC0xPT09RmU/emU6emUuc3Vic3RyKDAsRmUpLCEhRGUubG9vc2UpO2lmKCFJZSlyZXR1cm47aWYoLTE9PT1GZSlyZXR1cm4gSWU7Y29uc3QgVmU9emUuc2xpY2UoRmUr'@;
put 'MSkudHJpbSgpO2lmKDA9PT1WZS5sZW5ndGgpcmV0dXJuIEllO2NvbnN0IGtlPVZlLnNwbGl0KCI7Iik7Zm9yKDtrZS5sZW5ndGg7KXtjb25zdCBBZT1rZS5zaGlmdCgpLnRyaW0oKTtpZigwPT09QWUubGVuZ3RoKWNvbnRpbnVlO2NvbnN0IF90PUFlLmluZGV4T2YoIj0iKTtsZXQgbnQsUWU7'@;
put 'c3dpdGNoKC0xPT09X3Q/KG50PUFlLFFlPW51bGwpOihudD1BZS5zdWJzdHIoMCxfdCksUWU9QWUuc3Vic3RyKF90KzEpKSxudD1udC50cmltKCkudG9Mb3dlckNhc2UoKSxRZSYmKFFlPVFlLnRyaW0oKSksbnQpe2Nhc2UiZXhwaXJlcyI6aWYoUWUpe2NvbnN0IHl0PXAoUWUpO3l0JiYoSWUu'@;
put 'ZXhwaXJlcz15dCl9YnJlYWs7Y2FzZSJtYXgtYWdlIjppZihRZSYmL14tP1swLTldKyQvLnRlc3QoUWUpKXtjb25zdCB5dD1wYXJzZUludChRZSwxMCk7SWUuc2V0TWF4QWdlKHl0KX1icmVhaztjYXNlImRvbWFpbiI6aWYoUWUpe2NvbnN0IHl0PVFlLnRyaW0oKS5yZXBsYWNlKC9eXC4vLCIi'@;
put 'KTt5dCYmKEllLmRvbWFpbj15dC50b0xvd2VyQ2FzZSgpKX1icmVhaztjYXNlInBhdGgiOkllLnBhdGg9UWUmJiIvIj09PVFlWzBdP1FlOm51bGw7YnJlYWs7Y2FzZSJzZWN1cmUiOkllLnNlY3VyZT0hMDticmVhaztjYXNlImh0dHBvbmx5IjpJZS5odHRwT25seT0hMDticmVhaztjYXNlInNh'@;
put 'bWVzaXRlIjpzd2l0Y2goUWU/UWUudG9Mb3dlckNhc2UoKToiIil7Y2FzZSJzdHJpY3QiOkllLnNhbWVTaXRlPSJzdHJpY3QiO2JyZWFrO2Nhc2UibGF4IjpJZS5zYW1lU2l0ZT0ibGF4IjticmVhaztjYXNlIm5vbmUiOkllLnNhbWVTaXRlPSJub25lIjticmVhaztkZWZhdWx0OkllLnNhbWVT'@;
put 'aXRlPXZvaWQgMH1icmVhaztkZWZhdWx0OkllLmV4dGVuc2lvbnM9SWUuZXh0ZW5zaW9uc3x8W10sSWUuZXh0ZW5zaW9ucy5wdXNoKEFlKX19cmV0dXJuIEllfWZ1bmN0aW9uIGFlKHplKXtsZXQgRGU7dHJ5e0RlPUpTT04ucGFyc2UoemUpfWNhdGNoKEZlKXtyZXR1cm4gRmV9cmV0dXJuIERl'@;
put 'fWZ1bmN0aW9uIHRlKHplKXtpZighemV8fEYuaXNFbXB0eVN0cmluZyh6ZSkpcmV0dXJuIG51bGw7bGV0IERlO2lmKCJzdHJpbmciPT10eXBlb2YgemUpe2lmKERlPWFlKHplKSxEZSBpbnN0YW5jZW9mIEVycm9yKXJldHVybiBudWxsfWVsc2UgRGU9emU7Y29uc3QgRmU9bmV3IG90O2Zvcihs'@;
put 'ZXQgT2U9MDtPZTxvdC5zZXJpYWxpemFibGVQcm9wZXJ0aWVzLmxlbmd0aDtPZSsrKXtjb25zdCBJZT1vdC5zZXJpYWxpemFibGVQcm9wZXJ0aWVzW09lXTt2b2lkIDA9PT1EZVtJZV18fERlW0llXT09PUplW0llXXx8KEZlW0llXT0iZXhwaXJlcyI9PT1JZXx8ImNyZWF0aW9uIj09PUllfHwi'@;
put 'bGFzdEFjY2Vzc2VkIj09PUllP251bGw9PT1EZVtJZV0/bnVsbDoiSW5maW5pdHkiPT1EZVtJZV0/IkluZmluaXR5IjpuZXcgRGF0ZShEZVtJZV0pOkRlW0llXSl9cmV0dXJuIEZlfWZ1bmN0aW9uIHNlKHplLERlKXtGLnZhbGlkYXRlKEYuaXNPYmplY3QoemUpLHplKSxGLnZhbGlkYXRlKEYu'@;
put 'aXNPYmplY3QoRGUpLERlKTtsZXQgRmU9MDtyZXR1cm4gRmU9KERlLnBhdGg/RGUucGF0aC5sZW5ndGg6MCktKHplLnBhdGg/emUucGF0aC5sZW5ndGg6MCksMCE9PUZlfHwoRmU9KHplLmNyZWF0aW9uP3plLmNyZWF0aW9uLmdldFRpbWUoKTplZSktKERlLmNyZWF0aW9uP0RlLmNyZWF0aW9u'@;
put 'LmdldFRpbWUoKTplZSksMCE9PUZlfHwoRmU9emUuY3JlYXRpb25JbmRleC1EZS5jcmVhdGlvbkluZGV4KSksRmV9ZnVuY3Rpb24gVWUoemUpe2lmKHplIGluc3RhbmNlb2YgT2JqZWN0KXJldHVybiB6ZTt0cnl7emU9ZGVjb2RlVVJJKHplKX1jYXRjaHt9cmV0dXJuIF8oemUpfWNvbnN0IEpl'@;
put 'PXtrZXk6IiIsdmFsdWU6IiIsZXhwaXJlczoiSW5maW5pdHkiLG1heEFnZTpudWxsLGRvbWFpbjpudWxsLHBhdGg6bnVsbCxzZWN1cmU6ITEsaHR0cE9ubHk6ITEsZXh0ZW5zaW9uczpudWxsLGhvc3RPbmx5Om51bGwscGF0aElzRGVmYXVsdDpudWxsLGNyZWF0aW9uOm51bGwsbGFzdEFjY2Vz'@;
put 'c2VkOm51bGwsc2FtZVNpdGU6dm9pZCAwfTtjbGFzcyBvdHtjb25zdHJ1Y3RvcihEZT17fSl7Y29uc3QgRmU9TigpO0ZlJiYodGhpc1tGZV09dGhpcy5pbnNwZWN0KSxPYmplY3QuYXNzaWduKHRoaXMsSmUsRGUpLHRoaXMuY3JlYXRpb249dGhpcy5jcmVhdGlvbnx8bmV3IERhdGUsT2JqZWN0'@;
put 'LmRlZmluZVByb3BlcnR5KHRoaXMsImNyZWF0aW9uSW5kZXgiLHtjb25maWd1cmFibGU6ITEsZW51bWVyYWJsZTohMSx3cml0YWJsZTohMCx2YWx1ZTorK290LmNvb2tpZXNDcmVhdGVkfSl9aW5zcGVjdCgpe2NvbnN0IERlPURhdGUubm93KCksRmU9bnVsbCE9dGhpcy5ob3N0T25seT90aGlz'@;
put 'Lmhvc3RPbmx5OiI/IixPZT10aGlzLmNyZWF0aW9uP0RlLXRoaXMuY3JlYXRpb24uZ2V0VGltZSgpKyJtcyI6Ij8iLEllPXRoaXMubGFzdEFjY2Vzc2VkP0RlLXRoaXMubGFzdEFjY2Vzc2VkLmdldFRpbWUoKSsibXMiOiI/IjtyZXR1cm5gQ29va2llPSIke3RoaXMudG9TdHJpbmcoKX07IGhv'@;
put 'c3RPbmx5PSR7RmV9OyBhQWdlPSR7SWV9OyBjQWdlPSR7T2V9ImB9dG9KU09OKCl7Y29uc3QgRGU9e307Zm9yKGNvbnN0IEZlIG9mIG90LnNlcmlhbGl6YWJsZVByb3BlcnRpZXMpdGhpc1tGZV0hPT1KZVtGZV0mJigiZXhwaXJlcyI9PT1GZXx8ImNyZWF0aW9uIj09PUZlfHwibGFzdEFjY2Vz'@;
put 'c2VkIj09PUZlP0RlW0ZlXT1udWxsPT09dGhpc1tGZV0/bnVsbDoiSW5maW5pdHkiPT10aGlzW0ZlXT8iSW5maW5pdHkiOnRoaXNbRmVdLnRvSVNPU3RyaW5nKCk6Im1heEFnZSI9PT1GZT9udWxsIT09dGhpc1tGZV0mJihEZVtGZV09dGhpc1tGZV09PTEvMHx8dGhpc1tGZV09PS0xLzA/dGhp'@;
put 'c1tGZV0udG9TdHJpbmcoKTp0aGlzW0ZlXSk6dGhpc1tGZV0hPT1KZVtGZV0mJihEZVtGZV09dGhpc1tGZV0pKTtyZXR1cm4gRGV9Y2xvbmUoKXtyZXR1cm4gdGUodGhpcy50b0pTT04oKSl9dmFsaWRhdGUoKXtpZighTC50ZXN0KHRoaXMudmFsdWUpfHx0aGlzLmV4cGlyZXMhPTEvMCYmISh0'@;
put 'aGlzLmV4cGlyZXMgaW5zdGFuY2VvZiBEYXRlKSYmIXAodGhpcy5leHBpcmVzKXx8bnVsbCE9dGhpcy5tYXhBZ2UmJnRoaXMubWF4QWdlPD0wfHxudWxsIT10aGlzLnBhdGgmJiFXLnRlc3QodGhpcy5wYXRoKSlyZXR1cm4hMTtjb25zdCBEZT10aGlzLmNkb21haW4oKTtyZXR1cm4hKERlJiYo'@;
put 'RGUubWF0Y2goL1wuJC8pfHxudWxsPT1nLmdldFB1YmxpY1N1ZmZpeChEZSkpKX1zZXRFeHBpcmVzKERlKXt0aGlzLmV4cGlyZXM9RGUgaW5zdGFuY2VvZiBEYXRlP0RlOnAoRGUpfHwiSW5maW5pdHkifXNldE1heEFnZShEZSl7dGhpcy5tYXhBZ2U9RGU9PT0xLzB8fERlPT09LTEvMD9EZS50'@;
put 'b1N0cmluZygpOkRlfWNvb2tpZVN0cmluZygpe2xldCBEZT10aGlzLnZhbHVlO3JldHVybiBudWxsPT1EZSYmKERlPSIiKSwiIj09PXRoaXMua2V5P0RlOmAke3RoaXMua2V5fT0ke0RlfWB9dG9TdHJpbmcoKXtsZXQgRGU9dGhpcy5jb29raWVTdHJpbmcoKTtpZih0aGlzLmV4cGlyZXMhPTEv'@;
put 'MCYmKHRoaXMuZXhwaXJlcyBpbnN0YW5jZW9mIERhdGU/RGUrPWA7IEV4cGlyZXM9JHtiKHRoaXMuZXhwaXJlcyl9YDpEZSs9YDsgRXhwaXJlcz0ke3RoaXMuZXhwaXJlc31gKSxudWxsIT10aGlzLm1heEFnZSYmdGhpcy5tYXhBZ2UhPTEvMCYmKERlKz1gOyBNYXgtQWdlPSR7dGhpcy5tYXhB'@;
put 'Z2V9YCksdGhpcy5kb21haW4mJiF0aGlzLmhvc3RPbmx5JiYoRGUrPWA7IERvbWFpbj0ke3RoaXMuZG9tYWlufWApLHRoaXMucGF0aCYmKERlKz1gOyBQYXRoPSR7dGhpcy5wYXRofWApLHRoaXMuc2VjdXJlJiYoRGUrPSI7IFNlY3VyZSIpLHRoaXMuaHR0cE9ubHkmJihEZSs9IjsgSHR0cE9u'@;
put 'bHkiKSx0aGlzLnNhbWVTaXRlJiYibm9uZSIhPT10aGlzLnNhbWVTaXRlKXtjb25zdCBGZT1vdC5zYW1lU2l0ZUNhbm9uaWNhbFt0aGlzLnNhbWVTaXRlLnRvTG93ZXJDYXNlKCldO0RlKz1gOyBTYW1lU2l0ZT0ke0ZlfHx0aGlzLnNhbWVTaXRlfWB9cmV0dXJuIHRoaXMuZXh0ZW5zaW9ucyYm'@;
put 'dGhpcy5leHRlbnNpb25zLmZvckVhY2goRmU9PntEZSs9YDsgJHtGZX1gfSksRGV9VFRMKERlKXtpZihudWxsIT10aGlzLm1heEFnZSlyZXR1cm4gdGhpcy5tYXhBZ2U8PTA/MDoxZTMqdGhpcy5tYXhBZ2U7bGV0IEZlPXRoaXMuZXhwaXJlcztyZXR1cm4gRmUhPTEvMD8oRmUgaW5zdGFuY2Vv'@;
put 'ZiBEYXRlfHwoRmU9cChGZSl8fDEvMCksRmU9PTEvMD8xLzA6RmUuZ2V0VGltZSgpLShEZXx8RGF0ZS5ub3coKSkpOjEvMH1leHBpcnlUaW1lKERlKXtpZihudWxsIT10aGlzLm1heEFnZSl7Y29uc3QgT2U9dGhpcy5tYXhBZ2U8PTA/LTEvMDoxZTMqdGhpcy5tYXhBZ2U7cmV0dXJuKERlfHx0'@;
put 'aGlzLmNyZWF0aW9ufHxuZXcgRGF0ZSkuZ2V0VGltZSgpK09lfXJldHVybiB0aGlzLmV4cGlyZXM9PTEvMD8xLzA6dGhpcy5leHBpcmVzLmdldFRpbWUoKX1leHBpcnlEYXRlKERlKXtjb25zdCBGZT10aGlzLmV4cGlyeVRpbWUoRGUpO3JldHVybiBGZT09MS8wP25ldyBEYXRlKGVlKTpGZT09'@;
put 'LTEvMD9uZXcgRGF0ZSgwKTpuZXcgRGF0ZShGZSl9aXNQZXJzaXN0ZW50KCl7cmV0dXJuIG51bGwhPXRoaXMubWF4QWdlfHx0aGlzLmV4cGlyZXMhPTEvMH1jYW5vbmljYWxpemVkRG9tYWluKCl7cmV0dXJuIG51bGw9PXRoaXMuZG9tYWluP251bGw6eCh0aGlzLmRvbWFpbil9Y2RvbWFpbigp'@;
put 'e3JldHVybiB0aGlzLmNhbm9uaWNhbGl6ZWREb21haW4oKX19ZnVuY3Rpb24geGUoemUpe2lmKG51bGwhPXplKXtjb25zdCBEZT16ZS50b0xvd2VyQ2FzZSgpO3N3aXRjaChEZSl7Y2FzZSBsZS5TVFJJQ1Q6Y2FzZSBsZS5TSUxFTlQ6Y2FzZSBsZS5ESVNBQkxFRDpyZXR1cm4gRGV9fXJldHVy'@;
put 'biBsZS5TSUxFTlR9b3QuY29va2llc0NyZWF0ZWQ9MCxvdC5wYXJzZT1FLG90LmZyb21KU09OPXRlLG90LnNlcmlhbGl6YWJsZVByb3BlcnRpZXM9T2JqZWN0LmtleXMoSmUpLG90LnNhbWVTaXRlTGV2ZWw9e3N0cmljdDozLGxheDoyLG5vbmU6MX0sb3Quc2FtZVNpdGVDYW5vbmljYWw9e3N0'@;
put 'cmljdDoiU3RyaWN0IixsYXg6IkxheCJ9O2NsYXNzIHZle2NvbnN0cnVjdG9yKERlLEZlPXtyZWplY3RQdWJsaWNTdWZmaXhlczohMH0peyJib29sZWFuIj09dHlwZW9mIEZlJiYoRmU9e3JlamVjdFB1YmxpY1N1ZmZpeGVzOkZlfSksRi52YWxpZGF0ZShGLmlzT2JqZWN0KEZlKSxGZSksdGhp'@;
put 'cy5yZWplY3RQdWJsaWNTdWZmaXhlcz1GZS5yZWplY3RQdWJsaWNTdWZmaXhlcyx0aGlzLmVuYWJsZUxvb3NlTW9kZT0hIUZlLmxvb3NlTW9kZSx0aGlzLmFsbG93U3BlY2lhbFVzZURvbWFpbj0iYm9vbGVhbiIhPXR5cGVvZiBGZS5hbGxvd1NwZWNpYWxVc2VEb21haW58fEZlLmFsbG93U3Bl'@;
put 'Y2lhbFVzZURvbWFpbix0aGlzLnN0b3JlPURlfHxuZXcgdyx0aGlzLnByZWZpeFNlY3VyaXR5PXhlKEZlLnByZWZpeFNlY3VyaXR5KSx0aGlzLl9jbG9uZVN5bmM9WGUoImNsb25lIiksdGhpcy5faW1wb3J0Q29va2llc1N5bmM9WGUoIl9pbXBvcnRDb29raWVzIiksdGhpcy5nZXRDb29raWVz'@;
put 'U3luYz1YZSgiZ2V0Q29va2llcyIpLHRoaXMuZ2V0Q29va2llU3RyaW5nU3luYz1YZSgiZ2V0Q29va2llU3RyaW5nIiksdGhpcy5nZXRTZXRDb29raWVTdHJpbmdzU3luYz1YZSgiZ2V0U2V0Q29va2llU3RyaW5ncyIpLHRoaXMucmVtb3ZlQWxsQ29va2llc1N5bmM9WGUoInJlbW92ZUFsbENv'@;
put 'b2tpZXMiKSx0aGlzLnNldENvb2tpZVN5bmM9WGUoInNldENvb2tpZSIpLHRoaXMuc2VyaWFsaXplU3luYz1YZSgic2VyaWFsaXplIil9c2V0Q29va2llKERlLEZlLE9lLEllKXtsZXQgVmU7aWYoRi52YWxpZGF0ZShGLmlzTm9uRW1wdHlTdHJpbmcoRmUpLEllLE9lKSxGLmlzRnVuY3Rpb24o'@;
put 'RmUpKXJldHVybihJZT1GZSkobmV3IEVycm9yKCJObyBVUkwgd2FzIHNwZWNpZmllZCIpKTtjb25zdCBrZT1VZShGZSk7aWYoRi5pc0Z1bmN0aW9uKE9lKSYmKEllPU9lLE9lPXt9KSxGLnZhbGlkYXRlKEYuaXNGdW5jdGlvbihJZSksSWUpLCFGLmlzTm9uRW1wdHlTdHJpbmcoRGUpJiYhRi5p'@;
put 'c09iamVjdChEZSkmJkRlIGluc3RhbmNlb2YgU3RyaW5nJiYwPT1EZS5sZW5ndGgpcmV0dXJuIEllKG51bGwpO2NvbnN0IEFlPXgoa2UuaG9zdG5hbWUpLF90PU9lLmxvb3NlfHx0aGlzLmVuYWJsZUxvb3NlTW9kZTtsZXQgbnQ9bnVsbDtpZihPZS5zYW1lU2l0ZUNvbnRleHQmJihudD1pZShP'@;
put 'ZS5zYW1lU2l0ZUNvbnRleHQpLCFudCkpcmV0dXJuIEllKG5ldyBFcnJvcihuZSkpO2lmKCJzdHJpbmciPT10eXBlb2YgRGV8fERlIGluc3RhbmNlb2YgU3RyaW5nKXtpZighKERlPW90LnBhcnNlKERlLHtsb29zZTpfdH0pKSlyZXR1cm4gVmU9bmV3IEVycm9yKCJDb29raWUgZmFpbGVkIHRv'@;
put 'IHBhcnNlIiksSWUoT2UuaWdub3JlRXJyb3I/bnVsbDpWZSl9ZWxzZSBpZighKERlIGluc3RhbmNlb2Ygb3QpKXJldHVybiBWZT1uZXcgRXJyb3IoIkZpcnN0IGFyZ3VtZW50IHRvIHNldENvb2tpZSBtdXN0IGJlIGEgQ29va2llIG9iamVjdCBvciBzdHJpbmciKSxJZShPZS5pZ25vcmVFcnJv'@;
put 'cj9udWxsOlZlKTtjb25zdCBRZT1PZS5ub3d8fG5ldyBEYXRlO2lmKHRoaXMucmVqZWN0UHVibGljU3VmZml4ZXMmJkRlLmRvbWFpbiYmbnVsbD09Zy5nZXRQdWJsaWNTdWZmaXgoRGUuY2RvbWFpbigpLHthbGxvd1NwZWNpYWxVc2VEb21haW46dGhpcy5hbGxvd1NwZWNpYWxVc2VEb21haW4s'@;
put 'aWdub3JlRXJyb3I6T2UuaWdub3JlRXJyb3J9KSYmIVRlLnRlc3QoRGUuZG9tYWluKSlyZXR1cm4gVmU9bmV3IEVycm9yKCJDb29raWUgaGFzIGRvbWFpbiBzZXQgdG8gYSBwdWJsaWMgc3VmZml4IiksSWUoT2UuaWdub3JlRXJyb3I/bnVsbDpWZSk7aWYoRGUuZG9tYWluKXtpZighQyhBZSxE'@;
put 'ZS5jZG9tYWluKCksITEpKXJldHVybiBWZT1uZXcgRXJyb3IoYENvb2tpZSBub3QgaW4gdGhpcyBob3N0J3MgZG9tYWluLiBDb29raWU6JHtEZS5jZG9tYWluKCl9IFJlcXVlc3Q6JHtBZX1gKSxJZShPZS5pZ25vcmVFcnJvcj9udWxsOlZlKTtudWxsPT1EZS5ob3N0T25seSYmKERlLmhvc3RP'@;
put 'bmx5PSExKX1lbHNlIERlLmhvc3RPbmx5PSEwLERlLmRvbWFpbj1BZTtpZigoIURlLnBhdGh8fCIvIiE9PURlLnBhdGhbMF0pJiYoRGUucGF0aD1UKGtlLnBhdGhuYW1lKSxEZS5wYXRoSXNEZWZhdWx0PSEwKSwhMT09PU9lLmh0dHAmJkRlLmh0dHBPbmx5KXJldHVybiBWZT1uZXcgRXJyb3Io'@;
put 'IkNvb2tpZSBpcyBIdHRwT25seSBhbmQgdGhpcyBpc24ndCBhbiBIVFRQIEFQSSIpLEllKE9lLmlnbm9yZUVycm9yP251bGw6VmUpO2lmKCJub25lIiE9PURlLnNhbWVTaXRlJiZ2b2lkIDAhPT1EZS5zYW1lU2l0ZSYmbnQmJiJub25lIj09PW50KXJldHVybiBWZT1uZXcgRXJyb3IoIkNvb2tp'@;
put 'ZSBpcyBTYW1lU2l0ZSBidXQgdGhpcyBpcyBhIGNyb3NzLW9yaWdpbiByZXF1ZXN0IiksSWUoT2UuaWdub3JlRXJyb3I/bnVsbDpWZSk7Y29uc3QgdW49dGhpcy5wcmVmaXhTZWN1cml0eT09PWxlLlNJTEVOVDtpZih0aGlzLnByZWZpeFNlY3VyaXR5IT09bGUuRElTQUJMRUQpe2xldCAkZSxp'@;
put 'dD0hMTtpZihmdW5jdGlvbiBtKHplKXtyZXR1cm4gRi52YWxpZGF0ZShGLmlzT2JqZWN0KHplKSx6ZSksIXplLmtleS5zdGFydHNXaXRoKCJfX1NlY3VyZS0iKXx8emUuc2VjdXJlfShEZSk/ZnVuY3Rpb24gQSh6ZSl7cmV0dXJuIEYudmFsaWRhdGUoRi5pc09iamVjdCh6ZSkpLCF6ZS5rZXku'@;
put 'c3RhcnRzV2l0aCgiX19Ib3N0LSIpfHx6ZS5zZWN1cmUmJnplLmhvc3RPbmx5JiZudWxsIT16ZS5wYXRoJiYiLyI9PT16ZS5wYXRofShEZSl8fChpdD0hMCwkZT0iQ29va2llIGhhcyBfX0hvc3QgcHJlZml4IGJ1dCBlaXRoZXIgU2VjdXJlIG9yIEhvc3RPbmx5IGF0dHJpYnV0ZSBpcyBub3Qg'@;
put 'c2V0IG9yIFBhdGggaXMgbm90ICcvJyIpOihpdD0hMCwkZT0iQ29va2llIGhhcyBfX1NlY3VyZSBwcmVmaXggYnV0IFNlY3VyZSBhdHRyaWJ1dGUgaXMgbm90IHNldCIpLGl0KXJldHVybiBJZShPZS5pZ25vcmVFcnJvcnx8dW4/bnVsbDpuZXcgRXJyb3IoJGUpKX1jb25zdCBNdD10aGlzLnN0'@;
put 'b3JlO010LnVwZGF0ZUNvb2tpZXx8KE10LnVwZGF0ZUNvb2tpZT1mdW5jdGlvbihpdCwkZSx0dCl7dGhpcy5wdXRDb29raWUoJGUsdHQpfSksTXQuZmluZENvb2tpZShEZS5kb21haW4sRGUucGF0aCxEZS5rZXksZnVuY3Rpb24gRHQoaXQsJGUpe2lmKGl0KXJldHVybiBJZShpdCk7Y29uc3Qg'@;
put 'dHQ9ZnVuY3Rpb24oSGUpe2lmKEhlKXJldHVybiBJZShIZSk7SWUobnVsbCxEZSl9O2lmKCRlKXtpZighMT09PU9lLmh0dHAmJiRlLmh0dHBPbmx5KXJldHVybiBpdD1uZXcgRXJyb3IoIm9sZCBDb29raWUgaXMgSHR0cE9ubHkgYW5kIHRoaXMgaXNuJ3QgYW4gSFRUUCBBUEkiKSxJZShPZS5p'@;
put 'Z25vcmVFcnJvcj9udWxsOml0KTtEZS5jcmVhdGlvbj0kZS5jcmVhdGlvbixEZS5jcmVhdGlvbkluZGV4PSRlLmNyZWF0aW9uSW5kZXgsRGUubGFzdEFjY2Vzc2VkPVFlLE10LnVwZGF0ZUNvb2tpZSgkZSxEZSx0dCl9ZWxzZSBEZS5jcmVhdGlvbj1EZS5sYXN0QWNjZXNzZWQ9UWUsTXQucHV0'@;
put 'Q29va2llKERlLHR0KX0pfWdldENvb2tpZXMoRGUsRmUsT2Upe0YudmFsaWRhdGUoRi5pc05vbkVtcHR5U3RyaW5nKERlKSxPZSxEZSk7Y29uc3QgSWU9VWUoRGUpO0YuaXNGdW5jdGlvbihGZSkmJihPZT1GZSxGZT17fSksRi52YWxpZGF0ZShGLmlzT2JqZWN0KEZlKSxPZSxGZSksRi52YWxp'@;
put 'ZGF0ZShGLmlzRnVuY3Rpb24oT2UpLE9lKTtjb25zdCBWZT14KEllLmhvc3RuYW1lKSxrZT1JZS5wYXRobmFtZXx8Ii8iO2xldCBBZT1GZS5zZWN1cmU7bnVsbD09QWUmJkllLnByb3RvY29sJiYoImh0dHBzOiI9PUllLnByb3RvY29sfHwid3NzOiI9PUllLnByb3RvY29sKSYmKEFlPSEwKTts'@;
put 'ZXQgX3Q9MDtpZihGZS5zYW1lU2l0ZUNvbnRleHQpe2NvbnN0IGl0PWllKEZlLnNhbWVTaXRlQ29udGV4dCk7aWYoX3Q9b3Quc2FtZVNpdGVMZXZlbFtpdF0sIV90KXJldHVybiBPZShuZXcgRXJyb3IobmUpKX1sZXQgbnQ9RmUuaHR0cDtudWxsPT1udCYmKG50PSEwKTtjb25zdCBRZT1GZS5u'@;
put 'b3d8fERhdGUubm93KCksdW49ITEhPT1GZS5leHBpcmUseXQ9ISFGZS5hbGxQYXRocyxNdD10aGlzLnN0b3JlO2Z1bmN0aW9uIER0KGl0KXtpZihpdC5ob3N0T25seSl7aWYoaXQuZG9tYWluIT1WZSlyZXR1cm4hMX1lbHNlIGlmKCFDKFZlLGl0LmRvbWFpbiwhMSkpcmV0dXJuITE7cmV0dXJu'@;
put 'ISgheXQmJiFQKGtlLGl0LnBhdGgpfHxpdC5zZWN1cmUmJiFBZXx8aXQuaHR0cE9ubHkmJiFudHx8X3QmJm90LnNhbWVTaXRlTGV2ZWxbaXQuc2FtZVNpdGV8fCJub25lIl0+X3R8fHVuJiZpdC5leHBpcnlUaW1lKCk8PVFlJiYoTXQucmVtb3ZlQ29va2llKGl0LmRvbWFpbixpdC5wYXRoLGl0'@;
put 'LmtleSwoKT0+e30pLDEpKX1NdC5maW5kQ29va2llcyhWZSx5dD9udWxsOmtlLHRoaXMuYWxsb3dTcGVjaWFsVXNlRG9tYWluLChpdCwkZSk9PntpZihpdClyZXR1cm4gT2UoaXQpOyRlPSRlLmZpbHRlcihEdCksITEhPT1GZS5zb3J0JiYoJGU9JGUuc29ydChzZSkpO2NvbnN0IHR0PW5ldyBE'@;
put 'YXRlO2Zvcihjb25zdCBIZSBvZiAkZSlIZS5sYXN0QWNjZXNzZWQ9dHQ7T2UobnVsbCwkZSl9KX1nZXRDb29raWVTdHJpbmcoLi4uRGUpe2NvbnN0IEZlPURlLnBvcCgpO0YudmFsaWRhdGUoRi5pc0Z1bmN0aW9uKEZlKSxGZSksRGUucHVzaChmdW5jdGlvbihJZSxWZSl7SWU/RmUoSWUpOkZl'@;
put 'KG51bGwsVmUuc29ydChzZSkubWFwKGtlPT5rZS5jb29raWVTdHJpbmcoKSkuam9pbigiOyAiKSl9KSx0aGlzLmdldENvb2tpZXMuYXBwbHkodGhpcyxEZSl9Z2V0U2V0Q29va2llU3RyaW5ncyguLi5EZSl7Y29uc3QgRmU9RGUucG9wKCk7Ri52YWxpZGF0ZShGLmlzRnVuY3Rpb24oRmUpLEZl'@;
put 'KSxEZS5wdXNoKGZ1bmN0aW9uKEllLFZlKXtJZT9GZShJZSk6RmUobnVsbCxWZS5tYXAoa2U9PmtlLnRvU3RyaW5nKCkpKX0pLHRoaXMuZ2V0Q29va2llcy5hcHBseSh0aGlzLERlKX1zZXJpYWxpemUoRGUpe0YudmFsaWRhdGUoRi5pc0Z1bmN0aW9uKERlKSxEZSk7bGV0IEZlPXRoaXMuc3Rv'@;
put 'cmUuY29uc3RydWN0b3IubmFtZTtGLmlzT2JqZWN0KEZlKSYmKEZlPW51bGwpO2NvbnN0IE9lPXt2ZXJzaW9uOmB0b3VnaC1jb29raWVAJHtPfWAsc3RvcmVUeXBlOkZlLHJlamVjdFB1YmxpY1N1ZmZpeGVzOiEhdGhpcy5yZWplY3RQdWJsaWNTdWZmaXhlcyxlbmFibGVMb29zZU1vZGU6ISF0'@;
put 'aGlzLmVuYWJsZUxvb3NlTW9kZSxhbGxvd1NwZWNpYWxVc2VEb21haW46ISF0aGlzLmFsbG93U3BlY2lhbFVzZURvbWFpbixwcmVmaXhTZWN1cml0eTp4ZSh0aGlzLnByZWZpeFNlY3VyaXR5KSxjb29raWVzOltdfTtpZighdGhpcy5zdG9yZS5nZXRBbGxDb29raWVzfHwiZnVuY3Rpb24iIT10'@;
put 'eXBlb2YgdGhpcy5zdG9yZS5nZXRBbGxDb29raWVzKXJldHVybiBEZShuZXcgRXJyb3IoInN0b3JlIGRvZXMgbm90IHN1cHBvcnQgZ2V0QWxsQ29va2llcyBhbmQgY2Fubm90IGJlIHNlcmlhbGl6ZWQiKSk7dGhpcy5zdG9yZS5nZXRBbGxDb29raWVzKChJZSxWZSk9PkllP0RlKEllKTooT2Uu'@;
put 'Y29va2llcz1WZS5tYXAoa2U9PihkZWxldGUoa2U9a2UgaW5zdGFuY2VvZiBvdD9rZS50b0pTT04oKTprZSkuY3JlYXRpb25JbmRleCxrZSkpLERlKG51bGwsT2UpKSl9dG9KU09OKCl7cmV0dXJuIHRoaXMuc2VyaWFsaXplU3luYygpfV9pbXBvcnRDb29raWVzKERlLEZlKXtsZXQgT2U9RGUu'@;
put 'Y29va2llcztpZighT2V8fCFBcnJheS5pc0FycmF5KE9lKSlyZXR1cm4gRmUobmV3IEVycm9yKCJzZXJpYWxpemVkIGphciBoYXMgbm8gY29va2llcyBhcnJheSIpKTtPZT1PZS5zbGljZSgpO2NvbnN0IEllPVZlPT57aWYoVmUpcmV0dXJuIEZlKFZlKTtpZighT2UubGVuZ3RoKXJldHVybiBG'@;
put 'ZShWZSx0aGlzKTtsZXQga2U7dHJ5e2tlPXRlKE9lLnNoaWZ0KCkpfWNhdGNoKEFlKXtyZXR1cm4gRmUoQWUpfWlmKG51bGw9PT1rZSlyZXR1cm4gSWUobnVsbCk7dGhpcy5zdG9yZS5wdXRDb29raWUoa2UsSWUpfTtJZSgpfWNsb25lKERlLEZlKXsxPT09YXJndW1lbnRzLmxlbmd0aCYmKEZl'@;
put 'PURlLERlPW51bGwpLHRoaXMuc2VyaWFsaXplKChPZSxJZSk9PntpZihPZSlyZXR1cm4gRmUoT2UpO3ZlLmRlc2VyaWFsaXplKEllLERlLEZlKX0pfWNsb25lU3luYyhEZSl7aWYoMD09PWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIHRoaXMuX2Nsb25lU3luYygpO2lmKCFEZS5zeW5jaHJvbm91'@;
put 'cyl0aHJvdyBuZXcgRXJyb3IoIkNvb2tpZUphciBjbG9uZSBkZXN0aW5hdGlvbiBzdG9yZSBpcyBub3Qgc3luY2hyb25vdXM7IHVzZSBhc3luYyBBUEkgaW5zdGVhZC4iKTtyZXR1cm4gdGhpcy5fY2xvbmVTeW5jKERlKX1yZW1vdmVBbGxDb29raWVzKERlKXtGLnZhbGlkYXRlKEYuaXNGdW5j'@;
put 'dGlvbihEZSksRGUpO2NvbnN0IEZlPXRoaXMuc3RvcmU7aWYoImZ1bmN0aW9uIj09dHlwZW9mIEZlLnJlbW92ZUFsbENvb2tpZXMmJkZlLnJlbW92ZUFsbENvb2tpZXMhPT1CLnByb3RvdHlwZS5yZW1vdmVBbGxDb29raWVzKXJldHVybiBGZS5yZW1vdmVBbGxDb29raWVzKERlKTtGZS5nZXRB'@;
put 'bGxDb29raWVzKChPZSxJZSk9PntpZihPZSlyZXR1cm4gRGUoT2UpO2lmKDA9PT1JZS5sZW5ndGgpcmV0dXJuIERlKG51bGwpO2xldCBWZT0wO2NvbnN0IGtlPVtdO2Z1bmN0aW9uIEFlKF90KXtpZihfdCYma2UucHVzaChfdCksVmUrKyxWZT09PUllLmxlbmd0aClyZXR1cm4gRGUoa2UubGVu'@;
put 'Z3RoP2tlWzBdOm51bGwpfUllLmZvckVhY2goX3Q9PntGZS5yZW1vdmVDb29raWUoX3QuZG9tYWluLF90LnBhdGgsX3Qua2V5LEFlKX0pfSl9c3RhdGljIGRlc2VyaWFsaXplKERlLEZlLE9lKXtsZXQgSWU7aWYoMyE9PWFyZ3VtZW50cy5sZW5ndGgmJihPZT1GZSxGZT1udWxsKSxGLnZhbGlk'@;
put 'YXRlKEYuaXNGdW5jdGlvbihPZSksT2UpLCJzdHJpbmciPT10eXBlb2YgRGUpe2lmKEllPWFlKERlKSxJZSBpbnN0YW5jZW9mIEVycm9yKXJldHVybiBPZShJZSl9ZWxzZSBJZT1EZTtjb25zdCBWZT1uZXcgdmUoRmUse3JlamVjdFB1YmxpY1N1ZmZpeGVzOkllLnJlamVjdFB1YmxpY1N1ZmZp'@;
put 'eGVzLGxvb3NlTW9kZTpJZS5lbmFibGVMb29zZU1vZGUsYWxsb3dTcGVjaWFsVXNlRG9tYWluOkllLmFsbG93U3BlY2lhbFVzZURvbWFpbixwcmVmaXhTZWN1cml0eTpJZS5wcmVmaXhTZWN1cml0eX0pO1ZlLl9pbXBvcnRDb29raWVzKEllLGtlPT57aWYoa2UpcmV0dXJuIE9lKGtlKTtPZShu'@;
put 'dWxsLFZlKX0pfXN0YXRpYyBkZXNlcmlhbGl6ZVN5bmMoRGUsRmUpe2NvbnN0IE9lPSJzdHJpbmciPT10eXBlb2YgRGU/SlNPTi5wYXJzZShEZSk6RGUsSWU9bmV3IHZlKEZlLHtyZWplY3RQdWJsaWNTdWZmaXhlczpPZS5yZWplY3RQdWJsaWNTdWZmaXhlcyxsb29zZU1vZGU6T2UuZW5hYmxl'@;
put 'TG9vc2VNb2RlfSk7aWYoIUllLnN0b3JlLnN5bmNocm9ub3VzKXRocm93IG5ldyBFcnJvcigiQ29va2llSmFyIHN0b3JlIGlzIG5vdCBzeW5jaHJvbm91czsgdXNlIGFzeW5jIEFQSSBpbnN0ZWFkLiIpO3JldHVybiBJZS5faW1wb3J0Q29va2llc1N5bmMoT2UpLEllfX1mdW5jdGlvbiBYZSh6'@;
put 'ZSl7cmV0dXJuIGZ1bmN0aW9uKC4uLkRlKXtpZighdGhpcy5zdG9yZS5zeW5jaHJvbm91cyl0aHJvdyBuZXcgRXJyb3IoIkNvb2tpZUphciBzdG9yZSBpcyBub3Qgc3luY2hyb25vdXM7IHVzZSBhc3luYyBBUEkgaW5zdGVhZC4iKTtsZXQgRmUsT2U7aWYodGhpc1t6ZV0oLi4uRGUsKEllLFZl'@;
put 'KT0+e0ZlPUllLE9lPVZlfSksRmUpdGhyb3cgRmU7cmV0dXJuIE9lfX12ZS5mcm9tSlNPTj12ZS5kZXNlcmlhbGl6ZVN5bmMsWyJfaW1wb3J0Q29va2llcyIsImNsb25lIiwiZ2V0Q29va2llcyIsImdldENvb2tpZVN0cmluZyIsImdldFNldENvb2tpZVN0cmluZ3MiLCJyZW1vdmVBbGxDb29r'@;
put 'aWVzIiwic2VyaWFsaXplIiwic2V0Q29va2llIl0uZm9yRWFjaCh6ZT0+e3ZlLnByb3RvdHlwZVt6ZV09eih2ZS5wcm90b3R5cGVbemVdKX0pLHZlLmRlc2VyaWFsaXplPXoodmUuZGVzZXJpYWxpemUpLFgudmVyc2lvbj1PLFguQ29va2llSmFyPXZlLFguQ29va2llPW90LFguU3RvcmU9QixY'@;
put 'Lk1lbW9yeUNvb2tpZVN0b3JlPXcsWC5wYXJzZURhdGU9cCxYLmZvcm1hdERhdGU9YixYLnBhcnNlPUUsWC5mcm9tSlNPTj10ZSxYLmRvbWFpbk1hdGNoPUMsWC5kZWZhdWx0UGF0aD1ULFgucGF0aE1hdGNoPVAsWC5nZXRQdWJsaWNTdWZmaXg9Zy5nZXRQdWJsaWNTdWZmaXgsWC5jb29raWVD'@;
put 'b21wYXJlPXNlLFgucGVybXV0ZURvbWFpbj15KDczMjQpLnBlcm11dGVEb21haW4sWC5wZXJtdXRlUGF0aD1mdW5jdGlvbiB3ZSh6ZSl7aWYoRi52YWxpZGF0ZShGLmlzU3RyaW5nKHplKSksIi8iPT09emUpcmV0dXJuWyIvIl07Y29uc3QgRGU9W3plXTtmb3IoO3plLmxlbmd0aD4xOyl7Y29u'@;
put 'c3QgRmU9emUubGFzdEluZGV4T2YoIi8iKTtpZigwPT09RmUpYnJlYWs7emU9emUuc3Vic3RyKDAsRmUpLERlLnB1c2goemUpfXJldHVybiBEZS5wdXNoKCIvIiksRGV9LFguY2Fub25pY2FsRG9tYWluPXgsWC5QcmVmaXhTZWN1cml0eUVudW09bGUsWC5QYXJhbWV0ZXJFcnJvcj1GLlBhcmFt'@;
put 'ZXRlckVycm9yfSw1NzYxOih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO2NvbnN0e2Zyb21DYWxsYmFjazpffT15KDcwNDEpLGc9eSgyMjI0KS55LEI9eSg3MzI0KS5wZXJtdXRlRG9tYWluLHc9eSg4OTcxKS5VLHtnZXRDdXN0b21JbnNwZWN0U3ltYm9sOlAsZ2V0VXRpbEluc3BlY3Q6Rn09eSgx'@;
put 'MjY5KTtjbGFzcyBPIGV4dGVuZHMgZ3tjb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy5zeW5jaHJvbm91cz0hMCx0aGlzLmlkeD1PYmplY3QuY3JlYXRlKG51bGwpO2NvbnN0IFU9UCgpO1UmJih0aGlzW1VdPXRoaXMuaW5zcGVjdCl9aW5zcGVjdCgpe3JldHVybmB7IGlkeDogJHtGKHopKHRo'@;
put 'aXMuaWR4LCExLDIpfSB9YH1maW5kQ29va2llKFUsVyxZLHEpe3JldHVybiBxKG51bGwsdGhpcy5pZHhbVV0mJnRoaXMuaWR4W1VdW1ddP3RoaXMuaWR4W1VdW1ddW1ldfHxudWxsOnZvaWQgMCl9ZmluZENvb2tpZXMoVSxXLFkscSl7Y29uc3QgZWU9W107aWYoImZ1bmN0aW9uIj09dHlwZW9m'@;
put 'IFkmJihxPVksWT0hMCksIVUpcmV0dXJuIHEobnVsbCxbXSk7bGV0IEo7Sj1XP2Z1bmN0aW9uKG1lKXtPYmplY3Qua2V5cyhtZSkuZm9yRWFjaChfZT0+e2lmKHcoVyxfZSkpe2NvbnN0IFRlPW1lW19lXTtmb3IoY29uc3QgU2UgaW4gVGUpZWUucHVzaChUZVtTZV0pfX0pfTpmdW5jdGlvbiht'@;
put 'ZSl7Zm9yKGNvbnN0IF9lIGluIG1lKXtjb25zdCBUZT1tZVtfZV07Zm9yKGNvbnN0IFNlIGluIFRlKWVlLnB1c2goVGVbU2VdKX19O2NvbnN0IG5lPUIoVSxZKXx8W1VdLGllPXRoaXMuaWR4O25lLmZvckVhY2gobGU9Pntjb25zdCBtZT1pZVtsZV07bWUmJkoobWUpfSkscShudWxsLGVlKX1w'@;
put 'dXRDb29raWUoVSxXKXt0aGlzLmlkeFtVLmRvbWFpbl18fCh0aGlzLmlkeFtVLmRvbWFpbl09T2JqZWN0LmNyZWF0ZShudWxsKSksdGhpcy5pZHhbVS5kb21haW5dW1UucGF0aF18fCh0aGlzLmlkeFtVLmRvbWFpbl1bVS5wYXRoXT1PYmplY3QuY3JlYXRlKG51bGwpKSx0aGlzLmlkeFtVLmRv'@;
put 'bWFpbl1bVS5wYXRoXVtVLmtleV09VSxXKG51bGwpfXVwZGF0ZUNvb2tpZShVLFcsWSl7dGhpcy5wdXRDb29raWUoVyxZKX1yZW1vdmVDb29raWUoVSxXLFkscSl7dGhpcy5pZHhbVV0mJnRoaXMuaWR4W1VdW1ddJiZ0aGlzLmlkeFtVXVtXXVtZXSYmZGVsZXRlIHRoaXMuaWR4W1VdW1ddW1ld'@;
put 'LHEobnVsbCl9cmVtb3ZlQ29va2llcyhVLFcsWSl7cmV0dXJuIHRoaXMuaWR4W1VdJiYoVz9kZWxldGUgdGhpcy5pZHhbVV1bV106ZGVsZXRlIHRoaXMuaWR4W1VdKSxZKG51bGwpfXJlbW92ZUFsbENvb2tpZXMoVSl7cmV0dXJuIHRoaXMuaWR4PU9iamVjdC5jcmVhdGUobnVsbCksVShudWxs'@;
put 'KX1nZXRBbGxDb29raWVzKFUpe2NvbnN0IFc9W10sWT10aGlzLmlkeDtPYmplY3Qua2V5cyhZKS5mb3JFYWNoKGVlPT57T2JqZWN0LmtleXMoWVtlZV0pLmZvckVhY2gobmU9PntPYmplY3Qua2V5cyhZW2VlXVtuZV0pLmZvckVhY2gobGU9PntudWxsIT09bGUmJlcucHVzaChZW2VlXVtuZV1b'@;
put 'bGVdKX0pfSl9KSxXLnNvcnQoKGVlLEopPT4oZWUuY3JlYXRpb25JbmRleHx8MCktKEouY3JlYXRpb25JbmRleHx8MCkpLFUobnVsbCxXKX19ZnVuY3Rpb24geihLKXtjb25zdCBVPU9iamVjdC5rZXlzKEspO2lmKDA9PT1VLmxlbmd0aClyZXR1cm4iW09iamVjdDogbnVsbCBwcm90b3R5cGVd'@;
put 'IHt9IjtsZXQgVz0iW09iamVjdDogbnVsbCBwcm90b3R5cGVdIHtcbiI7cmV0dXJuIE9iamVjdC5rZXlzKEspLmZvckVhY2goKFkscSk9PntXKz1mdW5jdGlvbiBOKEssVSl7bGV0IFk9YCAgJyR7S30nOiBbT2JqZWN0OiBudWxsIHByb3RvdHlwZV0ge1xuYDtyZXR1cm4gT2JqZWN0LmtleXMo'@;
put 'VSkuZm9yRWFjaCgocSxlZSxKKT0+e1krPWZ1bmN0aW9uIEwoSyxVKXtjb25zdCBXPSIgICAgIjtsZXQgWT1gJHtXfScke0t9JzogW09iamVjdDogbnVsbCBwcm90b3R5cGVdIHtcbmA7cmV0dXJuIE9iamVjdC5rZXlzKFUpLmZvckVhY2goKHEsZWUsSik9PntZKz1gICAgICAgJHtxfTogJHtV'@;
put 'W3FdLmluc3BlY3QoKX1gLGVlPEoubGVuZ3RoLTEmJihZKz0iLCIpLFkrPSJcbiJ9KSxZKz1gJHtXfX1gLFl9KHEsVVtxXSksZWU8Si5sZW5ndGgtMSYmKFkrPSIsIiksWSs9IlxuIn0pLFkrPSIgIH0iLFl9KFksS1tZXSkscTxVLmxlbmd0aC0xJiYoVys9IiwiKSxXKz0iXG4ifSksVys9In0i'@;
put 'LFd9WyJmaW5kQ29va2llIiwiZmluZENvb2tpZXMiLCJwdXRDb29raWUiLCJ1cGRhdGVDb29raWUiLCJyZW1vdmVDb29raWUiLCJyZW1vdmVDb29raWVzIiwicmVtb3ZlQWxsQ29va2llcyIsImdldEFsbENvb2tpZXMiXS5mb3JFYWNoKEs9PntPLnByb3RvdHlwZVtLXT1fKE8ucHJvdG90eXBl'@;
put 'W0tdKX0pLFgubT1PfSw4OTcxOih1ZSxYKT0+eyJ1c2Ugc3RyaWN0IjtYLlU9ZnVuY3Rpb24geShJLF8pe3JldHVybiBfPT09SXx8MD09PUkuaW5kZXhPZihfKSYmKCIvIj09PV8uc3Vic3RyKC0xKXx8Ii8iPT09SS5zdWJzdHIoXy5sZW5ndGgsMSkpfX0sNzMyNDoodWUsWCx5KT0+eyJ1c2Ug'@;
put 'c3RyaWN0Ijtjb25zdCBJPXkoNzUyKTtYLnBlcm11dGVEb21haW49ZnVuY3Rpb24gXyhnLEIpe2NvbnN0IHc9SS5nZXRQdWJsaWNTdWZmaXgoZyx7YWxsb3dTcGVjaWFsVXNlRG9tYWluOkJ9KTtpZighdylyZXR1cm4gbnVsbDtpZih3PT1nKXJldHVybltnXTsiLiI9PWcuc2xpY2UoLTEpJiYo'@;
put 'Zz1nLnNsaWNlKDAsLTEpKTtjb25zdCBGPWcuc2xpY2UoMCwtKHcubGVuZ3RoKzEpKS5zcGxpdCgiLiIpLnJldmVyc2UoKTtsZXQgTz13O2NvbnN0IHo9W09dO2Zvcig7Ri5sZW5ndGg7KU89YCR7Ri5zaGlmdCgpfS4ke099YCx6LnB1c2goTyk7cmV0dXJuIHp9fSw3NTI6KHVlLFgseSk9Pnsi'@;
put 'dXNlIHN0cmljdCI7Y29uc3QgST15KDg1NjYpLF89WyJsb2NhbCIsImV4YW1wbGUiLCJpbnZhbGlkIiwibG9jYWxob3N0IiwidGVzdCJdLGc9WyJsb2NhbGhvc3QiLCJpbnZhbGlkIl07WC5nZXRQdWJsaWNTdWZmaXg9ZnVuY3Rpb24gQih3LFA9e30pe2NvbnN0IEY9dy5zcGxpdCgiLiIpLE89'@;
put 'RltGLmxlbmd0aC0xXSxOPSEhUC5pZ25vcmVFcnJvcjtpZihQLmFsbG93U3BlY2lhbFVzZURvbWFpbiYmXy5pbmNsdWRlcyhPKSl7aWYoRi5sZW5ndGg+MSlyZXR1cm5gJHtGW0YubGVuZ3RoLTJdfS4ke099YDtpZihnLmluY2x1ZGVzKE8pKXJldHVybmAke099YH1pZighTiYmXy5pbmNsdWRl'@;
put 'cyhPKSl0aHJvdyBuZXcgRXJyb3IoYENvb2tpZSBoYXMgZG9tYWluIHNldCB0byB0aGUgcHVibGljIHN1ZmZpeCAiJHtPfSIgd2hpY2ggaXMgYSBzcGVjaWFsIHVzZSBkb21haW4uIFRvIGFsbG93IHRoaXMsIGNvbmZpZ3VyZSB5b3VyIENvb2tpZUphciB3aXRoIHthbGxvd1NwZWNpYWxVc2VE'@;
put 'b21haW46dHJ1ZSwgcmVqZWN0UHVibGljU3VmZml4ZXM6IGZhbHNlfS5gKTtyZXR1cm4gSS5nZXQodyl9fSwyMjI0Oih1ZSxYKT0+eyJ1c2Ugc3RyaWN0IjtYLnk9Y2xhc3MgeXtjb25zdHJ1Y3Rvcigpe3RoaXMuc3luY2hyb25vdXM9ITF9ZmluZENvb2tpZShfLGcsQix3KXt0aHJvdyBuZXcg'@;
put 'RXJyb3IoImZpbmRDb29raWUgaXMgbm90IGltcGxlbWVudGVkIil9ZmluZENvb2tpZXMoXyxnLEIsdyl7dGhyb3cgbmV3IEVycm9yKCJmaW5kQ29va2llcyBpcyBub3QgaW1wbGVtZW50ZWQiKX1wdXRDb29raWUoXyxnKXt0aHJvdyBuZXcgRXJyb3IoInB1dENvb2tpZSBpcyBub3QgaW1wbGVt'@;
put 'ZW50ZWQiKX11cGRhdGVDb29raWUoXyxnLEIpe3Rocm93IG5ldyBFcnJvcigidXBkYXRlQ29va2llIGlzIG5vdCBpbXBsZW1lbnRlZCIpfXJlbW92ZUNvb2tpZShfLGcsQix3KXt0aHJvdyBuZXcgRXJyb3IoInJlbW92ZUNvb2tpZSBpcyBub3QgaW1wbGVtZW50ZWQiKX1yZW1vdmVDb29raWVz'@;
put 'KF8sZyxCKXt0aHJvdyBuZXcgRXJyb3IoInJlbW92ZUNvb2tpZXMgaXMgbm90IGltcGxlbWVudGVkIil9cmVtb3ZlQWxsQ29va2llcyhfKXt0aHJvdyBuZXcgRXJyb3IoInJlbW92ZUFsbENvb2tpZXMgaXMgbm90IGltcGxlbWVudGVkIil9Z2V0QWxsQ29va2llcyhfKXt0aHJvdyBuZXcgRXJy'@;
put 'b3IoImdldEFsbENvb2tpZXMgaXMgbm90IGltcGxlbWVudGVkICh0aGVyZWZvcmUgamFyIGNhbm5vdCBiZSBzZXJpYWxpemVkKSIpfX19LDEyNjk6KHVlLFgseSk9PntmdW5jdGlvbiBJKCl7dHJ5e3JldHVybiB5KDk1MzkpfWNhdGNoe3JldHVybiBudWxsfX1mdW5jdGlvbiBfKCl7cmV0dXJu'@;
put 'IFN5bWJvbC5mb3IoIm5vZGVqcy51dGlsLmluc3BlY3QuY3VzdG9tIil9WC5nZXRVdGlsSW5zcGVjdD1mdW5jdGlvbih3LFA9e30pe2NvbnN0IE89KFAucmVxdWlyZVV0aWx8fEkpKCk7cmV0dXJuIGZ1bmN0aW9uKE4sTCxLKXtyZXR1cm4gTz9PLmluc3BlY3QoTixMLEspOncoTil9fSxYLmdl'@;
put 'dEN1c3RvbUluc3BlY3RTeW1ib2w9ZnVuY3Rpb24odz17fSl7cmV0dXJuKHcubG9va3VwQ3VzdG9tSW5zcGVjdFN5bWJvbHx8XykoKXx8ZnVuY3Rpb24gZyhCKXtjb25zdCBQPShCLnJlcXVpcmVVdGlsfHxJKSgpO3JldHVybiBQP1AuaW5zcGVjdC5jdXN0b206bnVsbH0odyl9fSw3NjUyOih1'@;
put 'ZSxYKT0+eyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiB5KE4pe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBOfWZ1bmN0aW9uIEIoTil7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBOfHxOIGluc3RhbmNlb2YgU3RyaW5nfWZ1bmN0aW9uIHcoTil7cmV0dXJuIltvYmplY3QgT2JqZWN0XSI9PT10b1N0'@;
put 'cmluZy5jYWxsKE4pfWNsYXNzIHogZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3RvciguLi5MKXtzdXBlciguLi5MKX19WC5QYXJhbWV0ZXJFcnJvcj16LFguaXNGdW5jdGlvbj15LFguaXNOb25FbXB0eVN0cmluZz1mdW5jdGlvbiBJKE4pe3JldHVybiBCKE4pJiYiIiE9PU59LFguaXNEYXRlPWZ1'@;
put 'bmN0aW9uIF8oTil7cmV0dXJuIGZ1bmN0aW9uIFAoTixMKXt0cnl7cmV0dXJuIE4gaW5zdGFuY2VvZiBMfWNhdGNoe3JldHVybiExfX0oTixEYXRlKSYmZnVuY3Rpb24gRihOKXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIE4mJk4lMT09MH0oTi5nZXRUaW1lKCkpfSxYLmlzRW1wdHlTdHJpbmc9'@;
put 'ZnVuY3Rpb24gZyhOKXtyZXR1cm4iIj09PU58fE4gaW5zdGFuY2VvZiBTdHJpbmcmJiIiPT09Ti50b1N0cmluZygpfSxYLmlzU3RyaW5nPUIsWC5pc09iamVjdD13LFgudmFsaWRhdGU9ZnVuY3Rpb24gTyhOLEwsSyl7aWYoeShMKXx8KEs9TCxMPW51bGwpLHcoSyl8fChLPXtFcnJvcjoiRmFp'@;
put 'bGVkIENoZWNrIn0pLCFOKXtpZighTCl0aHJvdyBuZXcgeihLKTtMKG5ldyB6KEspKX19fSw0NTY6dWU9Pnt1ZS5leHBvcnRzPSI0LjEuMyJ9LDcwNDE6KHVlLFgpPT57InVzZSBzdHJpY3QiO1guZnJvbUNhbGxiYWNrPWZ1bmN0aW9uKHkpe3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHko'@;
put 'ZnVuY3Rpb24oKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgYXJndW1lbnRzW2FyZ3VtZW50cy5sZW5ndGgtMV0pcmV0dXJuIG5ldyBQcm9taXNlKChJLF8pPT57YXJndW1lbnRzW2FyZ3VtZW50cy5sZW5ndGhdPShnLEIpPT57aWYoZylyZXR1cm4gXyhnKTtJKEIpfSxhcmd1bWVudHMubGVuZ3Ro'@;
put 'KysseS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KTt5LmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sIm5hbWUiLHt2YWx1ZTp5Lm5hbWV9KX0sWC5mcm9tUHJvbWlzZT1mdW5jdGlvbih5KXtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGZ1bmN0aW9uKCl7Y29uc3QgST1hcmd1bWVudHNbYXJn'@;
put 'dW1lbnRzLmxlbmd0aC0xXTtpZigiZnVuY3Rpb24iIT10eXBlb2YgSSlyZXR1cm4geS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7ZGVsZXRlIGFyZ3VtZW50c1thcmd1bWVudHMubGVuZ3RoLTFdLGFyZ3VtZW50cy5sZW5ndGgtLSx5LmFwcGx5KHRoaXMsYXJndW1lbnRzKS50aGVuKF89PkkobnVs'@;
put 'bCxfKSxJKX0sIm5hbWUiLHt2YWx1ZTp5Lm5hbWV9KX19LDY3MjpmdW5jdGlvbih1ZSxYLHkpeyJ1c2Ugc3RyaWN0Ijt2YXIgST10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rpb24odyxQLEYsTyl7cmV0dXJuIG5ldyhGfHwoRj1Qcm9taXNlKSkoZnVuY3Rpb24oTixMKXtmdW5jdGlvbiBL'@;
put 'KFkpe3RyeXtXKE8ubmV4dChZKSl9Y2F0Y2gocSl7TChxKX19ZnVuY3Rpb24gVShZKXt0cnl7VyhPLnRocm93KFkpKX1jYXRjaChxKXtMKHEpfX1mdW5jdGlvbiBXKFkpe1kuZG9uZT9OKFkudmFsdWUpOmZ1bmN0aW9uIHooTil7cmV0dXJuIE4gaW5zdGFuY2VvZiBGP046bmV3IEYoZnVuY3Rp'@;
put 'b24oTCl7TChOKX0pfShZLnZhbHVlKS50aGVuKEssVSl9VygoTz1PLmFwcGx5KHcsUHx8W10pKS5uZXh0KCkpfSl9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLkNvbnRleHRNYW5hZ2VyPXZvaWQgMDtjb25zdCBfPXkoNTkyOCksZz15KDk3Nzgp'@;
put 'O1guQ29udGV4dE1hbmFnZXI9Y2xhc3MgQntnZXQgZ2V0RGVmYXVsdENvbXB1dGVDb250ZXh0cygpe3JldHVybiB0aGlzLmRlZmF1bHRDb21wdXRlQ29udGV4dHN9Z2V0IGdldERlZmF1bHRMYXVuY2hlckNvbnRleHRzKCl7cmV0dXJuIHRoaXMuZGVmYXVsdExhdW5jaGVyQ29udGV4dHN9Y29u'@;
put 'c3RydWN0b3IoUCxGKXt0aGlzLnNlcnZlclVybD1QLHRoaXMucmVxdWVzdENsaWVudD1GLHRoaXMuZGVmYXVsdENvbXB1dGVDb250ZXh0cz1bIkNBUyBGb3JtYXRzIHNlcnZpY2UgY29tcHV0ZSBjb250ZXh0IiwiRGF0YSBNaW5pbmcgY29tcHV0ZSBjb250ZXh0IiwiSW1wb3J0IDkgc2Vydmlj'@;
put 'ZSBjb21wdXRlIGNvbnRleHQiLCJTQVMgSm9iIEV4ZWN1dGlvbiBjb21wdXRlIGNvbnRleHQiLCJTQVMgTW9kZWwgTWFuYWdlciBjb21wdXRlIGNvbnRleHQiLCJTQVMgU3R1ZGlvIGNvbXB1dGUgY29udGV4dCIsIlNBUyBWaXN1YWwgRm9yZWNhc3RpbmcgY29tcHV0ZSBjb250ZXh0Il0sdGhp'@;
put 'cy5kZWZhdWx0TGF1bmNoZXJDb250ZXh0cz1bIkNBUyBGb3JtYXRzIHNlcnZpY2UgbGF1bmNoZXIgY29udGV4dCIsIkRhdGEgTWluaW5nIGxhdW5jaGVyIGNvbnRleHQiLCJJbXBvcnQgOSBzZXJ2aWNlIGxhdW5jaGVyIGNvbnRleHQiLCJKb2IgRmxvdyBFeGVjdXRpb24gbGF1bmNoZXIgY29u'@;
put 'dGV4dCIsIlNBUyBKb2IgRXhlY3V0aW9uIGxhdW5jaGVyIGNvbnRleHQiLCJTQVMgTW9kZWwgTWFuYWdlciBsYXVuY2hlciBjb250ZXh0IiwiU0FTIFN0dWRpbyBsYXVuY2hlciBjb250ZXh0IiwiU0FTIFZpc3VhbCBGb3JlY2FzdGluZyBsYXVuY2hlciBjb250ZXh0Il0sUCYmKDAsXy5pc1Vy'@;
put 'bCkoUCl9Z2V0Q29tcHV0ZUNvbnRleHRzKFApe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdHtyZXN1bHQ6Rn09eWllbGQgdGhpcy5yZXF1ZXN0Q2xpZW50LmdldChgJHt0aGlzLnNlcnZlclVybH0vY29tcHV0ZS9jb250ZXh0cz9saW1pdD0xMDAwMGAsUCku'@;
put 'Y2F0Y2goej0+e3Rocm93KDAsZy5wcmVmaXhNZXNzYWdlKSh6LCJFcnJvciB3aGlsZSBnZXR0aW5nIGNvbXB1dGUgY29udGV4dHMuICIpfSk7cmV0dXJuKEYmJkYuaXRlbXM/Ri5pdGVtczpbXSkubWFwKHo9Pih7Y3JlYXRlZEJ5OnouY3JlYXRlZEJ5LGlkOnouaWQsbmFtZTp6Lm5hbWUsdmVy'@;
put 'c2lvbjp6LnZlcnNpb24sYXR0cmlidXRlczp7fX0pKX0pfWdldExhdW5jaGVyQ29udGV4dHMoUCl7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0e3Jlc3VsdDpGfT15aWVsZCB0aGlzLnJlcXVlc3RDbGllbnQuZ2V0KGAke3RoaXMuc2VydmVyVXJsfS9sYXVu'@;
put 'Y2hlci9jb250ZXh0cz9saW1pdD0xMDAwMGAsUCkuY2F0Y2goej0+e3Rocm93KDAsZy5wcmVmaXhNZXNzYWdlKSh6LCJFcnJvciB3aGlsZSBnZXR0aW5nIGxhdW5jaGVyIGNvbnRleHRzLiAiKX0pO3JldHVybihGJiZGLml0ZW1zP0YuaXRlbXM6W10pLm1hcCh6PT4oe2NyZWF0ZWRCeTp6LmNy'@;
put 'ZWF0ZWRCeSxpZDp6LmlkLG5hbWU6ei5uYW1lLHZlcnNpb246ei52ZXJzaW9uLGF0dHJpYnV0ZXM6e319KSl9KX1jcmVhdGVDb21wdXRlQ29udGV4dChQLEYsTyx6LE4sTCl7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2lmKHRoaXMudmFsaWRhdGVDb250ZXh0TmFt'@;
put 'ZShQKSx0aGlzLmlzRGVmYXVsdENvbnRleHQoUCx0aGlzLmRlZmF1bHRDb21wdXRlQ29udGV4dHMsYENvbXB1dGUgY29udGV4dCAnJHtQfScgYWxyZWFkeSBleGlzdHMuYCksKHlpZWxkIHRoaXMuZ2V0Q29tcHV0ZUNvbnRleHRzKE4pKS5maW5kKGVlPT5lZS5uYW1lPT09UCkpdGhyb3cgbmV3'@;
put 'IEVycm9yKGBDb21wdXRlIGNvbnRleHQgJyR7UH0nIGFscmVhZHkgZXhpc3RzLmApO2lmKEYmJiF0aGlzLmRlZmF1bHRMYXVuY2hlckNvbnRleHRzLmluY2x1ZGVzKEYpJiYhKHlpZWxkIHRoaXMuZ2V0TGF1bmNoZXJDb250ZXh0cyhOKSkuZmluZChKPT5KLm5hbWU9PT1GKSl7Y29uc3QgSj1g'@;
put 'VGhlIGxhdW5jaGVyIGNvbnRleHQgZm9yICR7Rn1gLGllPXlpZWxkIHRoaXMuY3JlYXRlTGF1bmNoZXJDb250ZXh0KEYsSiwiZGlyZWN0IixOKS5jYXRjaChsZT0+e3Rocm93IG5ldyBFcnJvcihgRXJyb3Igd2hpbGUgY3JlYXRpbmcgbGF1bmNoZXIgY29udGV4dC4gJHtsZX1gKX0pO2lmKCFp'@;
put 'ZXx8IWllLm5hbWUpdGhyb3cgbmV3IEVycm9yKCJFcnJvciB3aGlsZSBjcmVhdGluZyBsYXVuY2hlciBjb250ZXh0LiIpO0Y9aWUubmFtZX1sZXQgVz17cmV1c2VTZXJ2ZXJQcm9jZXNzZXM6ITB9O08mJihXPU9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxXKSx7cnVuU2VydmVyQXM6'@;
put 'T30pKTtjb25zdCBZPXtuYW1lOlAsbGF1bmNoQ29udGV4dDp7Y29udGV4dE5hbWU6Rnx8IiJ9LGF0dHJpYnV0ZXM6V307TCYmTC5sZW5ndGg/WS5hdXRob3JpemVkVXNlcnM9TDpZLmF1dGhvcml6ZUFsbEF1dGhlbnRpY2F0ZWRVc2Vycz0hMCx6JiYoWS5lbnZpcm9ubWVudD17YXV0b0V4ZWNM'@;
put 'aW5lczp6fSk7Y29uc3R7cmVzdWx0OnF9PXlpZWxkIHRoaXMucmVxdWVzdENsaWVudC5wb3N0KGAke3RoaXMuc2VydmVyVXJsfS9jb21wdXRlL2NvbnRleHRzYCxZLE4pLmNhdGNoKGVlPT57dGhyb3coMCxnLnByZWZpeE1lc3NhZ2UpKGVlLCJFcnJvciB3aGlsZSBjcmVhdGluZyBjb21wdXRl'@;
put 'IGNvbnRleHQuICIpfSk7cmV0dXJuIHF9KX1jcmVhdGVMYXVuY2hlckNvbnRleHQoUCxGLE89ImRpcmVjdCIseil7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2lmKCFQKXRocm93IG5ldyBFcnJvcigiQ29udGV4dCBuYW1lIGlzIHJlcXVpcmVkLiIpO2lmKHRoaXMu'@;
put 'aXNEZWZhdWx0Q29udGV4dChQLHRoaXMuZGVmYXVsdExhdW5jaGVyQ29udGV4dHMsYExhdW5jaGVyIGNvbnRleHQgJyR7UH0nIGFscmVhZHkgZXhpc3RzLmApLCh5aWVsZCB0aGlzLmdldExhdW5jaGVyQ29udGV4dHMoeikpLmZpbmQoVz0+Vy5uYW1lPT09UCkpdGhyb3cgbmV3IEVycm9yKGBM'@;
put 'YXVuY2hlciBjb250ZXh0ICcke1B9JyBhbHJlYWR5IGV4aXN0cy5gKTtjb25zdCBLPXtuYW1lOlAsZGVzY3JpcHRpb246RixsYXVuY2hUeXBlOk99LHtyZXN1bHQ6VX09eWllbGQgdGhpcy5yZXF1ZXN0Q2xpZW50LnBvc3QoYCR7dGhpcy5zZXJ2ZXJVcmx9L2xhdW5jaGVyL2NvbnRleHRzYCxL'@;
put 'LHopLmNhdGNoKFc9Pnt0aHJvdygwLGcucHJlZml4TWVzc2FnZSkoVywiRXJyb3Igd2hpbGUgY3JlYXRpbmcgbGF1bmNoZXIgY29udGV4dC4gIil9KTtyZXR1cm4gVX0pfWVkaXRDb21wdXRlQ29udGV4dChQLEYsTyl7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2xl'@;
put 'dCB6O3RoaXMudmFsaWRhdGVDb250ZXh0TmFtZShQKSx0aGlzLmlzRGVmYXVsdENvbnRleHQoUCx0aGlzLmRlZmF1bHRDb21wdXRlQ29udGV4dHMsIkVkaXRpbmcgZGVmYXVsdCBTQVMgY29tcHV0ZSBjb250ZXh0cyBpcyBub3QgYWxsb3dlZC4iLCEwKSx6PXlpZWxkIHRoaXMuZ2V0Q29tcHV0'@;
put 'ZUNvbnRleHRCeU5hbWUoUCxPKSx6fHwoej15aWVsZCB0aGlzLmdldENvbXB1dGVDb250ZXh0QnlJZChGLmlkLE8pKTtjb25zdHtyZXN1bHQ6TixldGFnOkx9PXlpZWxkIHRoaXMucmVxdWVzdENsaWVudC5nZXQoYCR7dGhpcy5zZXJ2ZXJVcmx9L2NvbXB1dGUvY29udGV4dHMvJHt6LmlkfWAs'@;
put 'TykuY2F0Y2goSz0+e3Rocm93IEsmJjQwND09PUsuc3RhdHVzP25ldyBFcnJvcihgVGhlIGNvbnRleHQgJyR7UH0nIHdhcyBub3QgZm91bmQgb24gdGhpcyBzZXJ2ZXIuYCk6S30pO3JldHVybiB5aWVsZCB0aGlzLnJlcXVlc3RDbGllbnQucHV0KGAvY29tcHV0ZS9jb250ZXh0cy8ke04uaWR9'@;
put 'YCxPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxOKSxGKSx7YXR0cmlidXRlczpPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sTi5hdHRyaWJ1dGVzKSxGLmF0dHJpYnV0ZXMpfSksTyx7IklmLU1hdGNoIjpMfSl9KX1nZXRDb21wdXRlQ29udGV4dEJ5'@;
put 'TmFtZShQLEYpe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdHtyZXN1bHQ6T309eWllbGQgdGhpcy5yZXF1ZXN0Q2xpZW50LmdldChgJHt0aGlzLnNlcnZlclVybH0vY29tcHV0ZS9jb250ZXh0cz9maWx0ZXI9ZXEobmFtZSwgIiR7UH0iKWAsRikuY2F0Y2go'@;
put 'ej0+e3Rocm93KDAsZy5wcmVmaXhNZXNzYWdlKSh6LCJFcnJvciB3aGlsZSBnZXR0aW5nIGNvbXB1dGUgY29udGV4dCBieSBuYW1lLiAiKX0pO2lmKCFPfHwhTy5pdGVtc3x8IU8uaXRlbXMubGVuZ3RoKXRocm93IG5ldyBFcnJvcihgVGhlIGNvbnRleHQgJyR7UH0nIHdhcyBub3QgZm91bmQg'@;
put 'YXQgJyR7dGhpcy5zZXJ2ZXJVcmx9Jy5gKTtyZXR1cm4gTy5pdGVtc1swXX0pfWdldENvbXB1dGVDb250ZXh0QnlJZChQLEYpe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdHtyZXN1bHQ6T309eWllbGQgdGhpcy5yZXF1ZXN0Q2xpZW50LmdldChgJHt0aGlz'@;
put 'LnNlcnZlclVybH0vY29tcHV0ZS9jb250ZXh0cy8ke1B9YCxGKS5jYXRjaCh6PT57dGhyb3coMCxnLnByZWZpeE1lc3NhZ2UpKHosIkVycm9yIHdoaWxlIGdldHRpbmcgY29tcHV0ZSBjb250ZXh0IGJ5IGlkLiAiKX0pO3JldHVybiBPfSl9Z2V0RXhlY3V0YWJsZUNvbnRleHRzKFAsRil7cmV0'@;
put 'dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0e3Jlc3VsdDpPfT15aWVsZCB0aGlzLnJlcXVlc3RDbGllbnQuZ2V0KGAke3RoaXMuc2VydmVyVXJsfS9jb21wdXRlL2NvbnRleHRzP2xpbWl0PTEwMDAwYCxGPy5hY2Nlc3NfdG9rZW4pLmNhdGNoKFU9Pnt0aHJvdygw'@;
put 'LGcucHJlZml4TWVzc2FnZSkoVSwiRXJyb3Igd2hpbGUgZmV0Y2hpbmcgY29tcHV0ZSBjb250ZXh0cy4iKX0pLHo9Ty5pdGVtc3x8W10sTj1bXSxMPXoubWFwKFU9Pntjb25zdCBXPVsiJXB1dCAmPXN5c3VzZXJpZDsiXTtyZXR1cm4oKT0+UChgdGVzdC0ke1UubmFtZX1gLFcsVS5uYW1lLEYs'@;
put 'bnVsbCwhMSwhMCwhMCkuY2F0Y2goWT0+WSl9KTtsZXQgSz1bXTtmb3IoY29uc3QgVSBvZiBMKUsucHVzaCh5aWVsZCBVKCkpO3JldHVybiBLLmZvckVhY2goKFUsVyk9PntpZihVJiZVLmxvZyl0cnl7bGV0IHE9IiI7Y29uc3QgZWU9VS5sb2cuc3BsaXQoIlxuIikuZmluZChKPT5KLnN0YXJ0'@;
put 'c1dpdGgoIlNZU1VTRVJJRD0iKSk7ZWUmJihxPWVlLnJlcGxhY2UoIlNZU1VTRVJJRD0iLCIiKSxOLnB1c2goe2NyZWF0ZWRCeTp6W1ddLmNyZWF0ZWRCeSxpZDp6W1ddLmlkLG5hbWU6eltXXS5uYW1lLHZlcnNpb246eltXXS52ZXJzaW9uLGF0dHJpYnV0ZXM6e3N5c1VzZXJJZDpxfX0pKX1j'@;
put 'YXRjaChZKXt0aHJvdyBZfX0pLE59KX1kZWxldGVDb21wdXRlQ29udGV4dChQLEYpe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXt0aGlzLnZhbGlkYXRlQ29udGV4dE5hbWUoUCksdGhpcy5pc0RlZmF1bHRDb250ZXh0KFAsdGhpcy5kZWZhdWx0Q29tcHV0ZUNvbnRl'@;
put 'eHRzLCJEZWxldGluZyBkZWZhdWx0IFNBUyBjb21wdXRlIGNvbnRleHRzIGlzIG5vdCBhbGxvd2VkLiIsITApO2NvbnN0IHo9eWllbGQgdGhpcy5nZXRDb21wdXRlQ29udGV4dEJ5TmFtZShQLEYpO3JldHVybiB5aWVsZCB0aGlzLnJlcXVlc3RDbGllbnQuZGVsZXRlKGAke3RoaXMuc2VydmVy'@;
put 'VXJsfS9jb21wdXRlL2NvbnRleHRzLyR7ei5pZH1gLEYpfSl9dmFsaWRhdGVDb250ZXh0TmFtZShQKXtpZighUCl0aHJvdyBuZXcgRXJyb3IoIkNvbnRleHQgbmFtZSBpcyByZXF1aXJlZC4iKX1pc0RlZmF1bHRDb250ZXh0KFAsRj10aGlzLmRlZmF1bHRDb21wdXRlQ29udGV4dHMsTz0iIix6'@;
put 'PSExKXtpZihGLmluY2x1ZGVzKFApKXRocm93IG5ldyBFcnJvcihgJHtPfSR7ej8iXG5EZWZhdWx0IGNvbnRleHRzOiIrRi5tYXAoKE4sTCk9PmBcbiR7TCsxfS4gJHtOfWApOiIifWApfX19LDgzMDY6ZnVuY3Rpb24odWUsWCx5KXsidXNlIHN0cmljdCI7dmFyIEk9dGhpcyYmdGhpcy5fX2F3'@;
put 'YWl0ZXJ8fGZ1bmN0aW9uKHosTixMLEspe3JldHVybiBuZXcoTHx8KEw9UHJvbWlzZSkpKGZ1bmN0aW9uKFcsWSl7ZnVuY3Rpb24gcShuZSl7dHJ5e0ooSy5uZXh0KG5lKSl9Y2F0Y2goaWUpe1koaWUpfX1mdW5jdGlvbiBlZShuZSl7dHJ5e0ooSy50aHJvdyhuZSkpfWNhdGNoKGllKXtZKGll'@;
put 'KX19ZnVuY3Rpb24gSihuZSl7bmUuZG9uZT9XKG5lLnZhbHVlKTpmdW5jdGlvbiBVKFcpe3JldHVybiBXIGluc3RhbmNlb2YgTD9XOm5ldyBMKGZ1bmN0aW9uKFkpe1koVyl9KX0obmUudmFsdWUpLnRoZW4ocSxlZSl9SigoSz1LLmFwcGx5KHosTnx8W10pKS5uZXh0KCkpfSl9LF89dGhpcyYm'@;
put 'dGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKHope3JldHVybiB6JiZ6Ll9fZXNNb2R1bGU/ejp7ZGVmYXVsdDp6fX07T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFguU0FTOUFwaUNsaWVudD12b2lkIDA7Y29uc3QgZz15KDc3NTcpLEI9Xyh5'@;
put 'KDYyMzApKSx3PXkoNzk1KSxQPXkoNTkyOCk7WC5TQVM5QXBpQ2xpZW50PWNsYXNzIEZ7Y29uc3RydWN0b3IoTixMLEspe3RoaXMuc2VydmVyVXJsPU4sdGhpcy5qb2JzUGF0aD1MLE4mJigwLFAuaXNVcmwpKE4pLHRoaXMucmVxdWVzdENsaWVudD1uZXcgdy5TYXM5UmVxdWVzdENsaWVudChO'@;
put 'LEspfWdldENvbmZpZygpe3JldHVybntzZXJ2ZXJVcmw6dGhpcy5zZXJ2ZXJVcmx9fXNldENvbmZpZyhOKXtOJiYodGhpcy5zZXJ2ZXJVcmw9Til9ZXhlY3V0ZVNjcmlwdChOLEwsSyl7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMucmVxdWVzdENs'@;
put 'aWVudC5sb2dpbihMLEssdGhpcy5qb2JzUGF0aCk7Y29uc3QgVz1PKFsuLi5OLCJkYXRhIF9udWxsXzsiLCJmaWxlIF93ZWJvdXQ7IiwicHV0ICdFeGVjdXRlZCBzYXNqcyBydW4nOyIsInJ1bjsiXS5qb2luKCJcbiIpKSxZPWAvVXNlciBGb2xkZXJzLyR7TH0vTXkgRm9sZGVyL3Nhc2pzL3J1'@;
put 'bm5lcmAscT0ibXVsdGlwYXJ0L2Zvcm0tZGF0YTsgYm91bmRhcnk9IitXLmdldEJvdW5kYXJ5KCksSj17ImNhY2hlLWNvbnRyb2wiOiJuby1jYWNoZSIsQWNjZXB0OiIqLyoiLCJDb250ZW50LVR5cGUiOnEsIkNvbnRlbnQtTGVuZ3RoIjpXLmdldExlbmd0aFN5bmMoKSxDb25uZWN0aW9uOiJr'@;
put 'ZWVwLWFsaXZlIn0sbmU9YCR7dGhpcy5qb2JzUGF0aH0vPyR7Il9wcm9ncmFtPSIrWSsiJl9kZWJ1Zz1sb2cifWA7cmV0dXJuKHlpZWxkIHRoaXMucmVxdWVzdENsaWVudC5wb3N0KG5lLFcsdm9pZCAwLHEsSikpLnJlc3VsdH0pfX07Y29uc3QgTz16PT57Y29uc3QgTj1uZXcgQi5kZWZhdWx0'@;
put 'LEw9YHNhc2pzLWV4ZWN1dGUtc2FzOS0keygwLGcuZ2VuZXJhdGVUaW1lc3RhbXApKCIiKX0uc2FzYDtyZXR1cm4gTi5hcHBlbmQoTCx6LHtmaWxlbmFtZTpMLGNvbnRlbnRUeXBlOiJ0ZXh0L3BsYWluIn0pLE59fSw5ODIxOmZ1bmN0aW9uKHVlLFgseSl7InVzZSBzdHJpY3QiO3ZhciBJPXko'@;
put 'NDE1NSksXz15KDUxMDgpLGc9dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKG5lLGllLGxlLG1lKXtyZXR1cm4gbmV3KGxlfHwobGU9UHJvbWlzZSkpKGZ1bmN0aW9uKFRlLFNlKXtmdW5jdGlvbiBqZShiKXt0cnl7cChtZS5uZXh0KGIpKX1jYXRjaCh4KXtTZSh4KX19ZnVuY3Rpb24g'@;
put 'VihiKXt0cnl7cChtZS50aHJvdyhiKSl9Y2F0Y2goeCl7U2UoeCl9fWZ1bmN0aW9uIHAoYil7Yi5kb25lP1RlKGIudmFsdWUpOmZ1bmN0aW9uIF9lKFRlKXtyZXR1cm4gVGUgaW5zdGFuY2VvZiBsZT9UZTpuZXcgbGUoZnVuY3Rpb24oU2Upe1NlKFRlKX0pfShiLnZhbHVlKS50aGVuKGplLFYp'@;
put 'fXAoKG1lPW1lLmFwcGx5KG5lLGllfHxbXSkpLm5leHQoKSl9KX0sQj10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24obmUpe3JldHVybiBuZSYmbmUuX19lc01vZHVsZT9uZTp7ZGVmYXVsdDpuZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFs'@;
put 'dWU6ITB9KSxYLlNBU1ZpeWFBcGlDbGllbnQ9dm9pZCAwO2NvbnN0IHc9eSg1OTI4KSxQPUIoeSg2MjMwKSksRj15KDEzOTUpLE89eSg2OTAzKSx6PXkoNjcyKSxOPXkoOTA5NyksTD15KDk3NzgpLEs9eSgxMzQzKSxVPXkoNzA0KSxXPXkoNjQ5NiksWT15KDE2MjIpLHE9eSgzNTY5KSxlZT15'@;
put 'KDM2Nik7WC5TQVNWaXlhQXBpQ2xpZW50PWNsYXNzIEp7Y29uc3RydWN0b3IoaWUsbGUsbWUsX2Upe3RoaXMuc2VydmVyVXJsPWllLHRoaXMucm9vdEZvbGRlck5hbWU9bGUsdGhpcy5jb250ZXh0TmFtZT1tZSx0aGlzLnJlcXVlc3RDbGllbnQ9X2UsdGhpcy5fZGVidWc9ITEsdGhpcy5zZXNz'@;
put 'aW9uTWFuYWdlcj1uZXcgTy5TZXNzaW9uTWFuYWdlcih0aGlzLnNlcnZlclVybCx0aGlzLmNvbnRleHROYW1lLHRoaXMucmVxdWVzdENsaWVudCksdGhpcy5jb250ZXh0TWFuYWdlcj1uZXcgei5Db250ZXh0TWFuYWdlcih0aGlzLnNlcnZlclVybCx0aGlzLnJlcXVlc3RDbGllbnQpLHRoaXMu'@;
put 'Zm9sZGVyTWFwPW5ldyBNYXAsaWUmJigwLHcuaXNVcmwpKGllKX1hcHBlbmRSZXF1ZXN0KGllLGxlLG1lKXt0aGlzLnJlcXVlc3RDbGllbnQuYXBwZW5kUmVxdWVzdChpZSxsZSxtZSl9Z2V0IGRlYnVnKCl7cmV0dXJuIHRoaXMuX2RlYnVnfXNldCBkZWJ1ZyhpZSl7dGhpcy5fZGVidWc9aWUs'@;
put 'dGhpcy5zZXNzaW9uTWFuYWdlciYmKHRoaXMuc2Vzc2lvbk1hbmFnZXIuZGVidWc9aWUpfWdldEpvYnNJbkZvbGRlcihpZSl7cmV0dXJuIGcodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0IGxlPSgwLHcuaXNSZWxhdGl2ZVBhdGgpKGllKT9gJHt0aGlzLnJvb3RGb2xkZXJO'@;
put 'YW1lfS8ke2llfWA6aWU7cmV0dXJuIHRoaXMuZm9sZGVyTWFwLmdldChsZSl8fCh5aWVsZCB0aGlzLnBvcHVsYXRlRm9sZGVyTWFwKGxlKSksdGhpcy5mb2xkZXJNYXAuZ2V0KGxlKX0pfWdldENvbmZpZygpe3JldHVybntzZXJ2ZXJVcmw6dGhpcy5zZXJ2ZXJVcmwscm9vdEZvbGRlck5hbWU6'@;
put 'dGhpcy5yb290Rm9sZGVyTmFtZX19c2V0Q29uZmlnKGllLGxlKXtpZSYmKHRoaXMuc2VydmVyVXJsPWllKSxsZSYmKHRoaXMucm9vdEZvbGRlck5hbWU9bGUpfWdldENvbXB1dGVDb250ZXh0cyhpZSl7cmV0dXJuIGcodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiB5aWVs'@;
put 'ZCB0aGlzLmNvbnRleHRNYW5hZ2VyLmdldENvbXB1dGVDb250ZXh0cyhpZSl9KX1nZXREZWZhdWx0Q29tcHV0ZUNvbnRleHRzKCl7cmV0dXJuIHRoaXMuY29udGV4dE1hbmFnZXIuZ2V0RGVmYXVsdENvbXB1dGVDb250ZXh0c31nZXRMYXVuY2hlckNvbnRleHRzKGllKXtyZXR1cm4gZyh0aGlz'@;
put 'LHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIHlpZWxkIHRoaXMuY29udGV4dE1hbmFnZXIuZ2V0TGF1bmNoZXJDb250ZXh0cyhpZSl9KX1nZXRFeGVjdXRhYmxlQ29udGV4dHMoaWUpe3JldHVybiBnKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdCBsZT10aGlz'@;
put 'LmV4ZWN1dGVTY3JpcHQuYmluZCh0aGlzKTtyZXR1cm4geWllbGQgdGhpcy5jb250ZXh0TWFuYWdlci5nZXRFeGVjdXRhYmxlQ29udGV4dHMobGUsaWUpfSl9Y3JlYXRlU2Vzc2lvbihpZSxsZSl7cmV0dXJuIGcodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0e3Jlc3VsdDpf'@;
put 'ZX09eWllbGQgdGhpcy5yZXF1ZXN0Q2xpZW50LmdldCgiL2NvbXB1dGUvY29udGV4dHM/bGltaXQ9MTAwMDAiLGxlKSxUZT1fZS5pdGVtcyYmX2UuaXRlbXMubGVuZ3RoP19lLml0ZW1zLmZpbmQoamU9PmplLm5hbWU9PT1pZSk6bnVsbDtpZighVGUpdGhyb3cgbmV3IEVycm9yKGBFeGVjdXRp'@;
put 'b24gY29udGV4dCAke2llfSBub3QgZm91bmQuYCk7Y29uc3R7cmVzdWx0OlNlfT15aWVsZCB0aGlzLnJlcXVlc3RDbGllbnQucG9zdChgL2NvbXB1dGUvY29udGV4dHMvJHtUZS5pZH0vc2Vzc2lvbnNgLHt9LGxlKTtyZXR1cm4gU2V9KX1jcmVhdGVDb21wdXRlQ29udGV4dChpZSxsZSxtZSxf'@;
put 'ZSxUZSxTZSl7cmV0dXJuIGcodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiB5aWVsZCB0aGlzLmNvbnRleHRNYW5hZ2VyLmNyZWF0ZUNvbXB1dGVDb250ZXh0KGllLGxlLG1lLF9lLFRlLFNlKX0pfWNyZWF0ZUxhdW5jaGVyQ29udGV4dChpZSxsZSxtZT0iZGlyZWN0Iixf'@;
put 'ZSl7cmV0dXJuIGcodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiB5aWVsZCB0aGlzLmNvbnRleHRNYW5hZ2VyLmNyZWF0ZUxhdW5jaGVyQ29udGV4dChpZSxsZSxtZSxfZSl9KX1lZGl0Q29tcHV0ZUNvbnRleHQoaWUsbGUsbWUpe3JldHVybiBnKHRoaXMsdm9pZCAwLHZv'@;
put 'aWQgMCxmdW5jdGlvbiooKXtyZXR1cm4geWllbGQgdGhpcy5jb250ZXh0TWFuYWdlci5lZGl0Q29tcHV0ZUNvbnRleHQoaWUsbGUsbWUpfSl9ZGVsZXRlQ29tcHV0ZUNvbnRleHQoaWUsbGUpe3JldHVybiBnKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4geWllbGQgdGhp'@;
put 'cy5jb250ZXh0TWFuYWdlci5kZWxldGVDb21wdXRlQ29udGV4dChpZSxsZSl9KX1leGVjdXRlU2NyaXB0KGllLGxlLG1lLF9lLFRlPW51bGwsU2U9ITEsamU9ITEsVj0hMCxwLGI9ITEseCl7cmV0dXJuIGcodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybigwLFkuZXhlY3V0'@;
put 'ZU9uQ29tcHV0ZUFwaSkodGhpcy5yZXF1ZXN0Q2xpZW50LHRoaXMuc2Vzc2lvbk1hbmFnZXIsdGhpcy5yb290Rm9sZGVyTmFtZSxpZSxsZSxtZSxfZSxUZSxTZSxqZSxWLHAsYix4KX0pfWdldEZpbGVDb250ZW50KGllLGxlLG1lKXtyZXR1cm4gZyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rp'@;
put 'b24qKCl7Y29uc3QgX2U9eWllbGQgdGhpcy5nZXRGaWxlVXJpKGllLGxlLG1lKS5jYXRjaChUZT0+e3Rocm93KDAsTC5wcmVmaXhNZXNzYWdlKShUZSxgRXJyb3Igd2hpbGUgZ2V0dGluZyBmaWxlIFVSSSBmb3I6ICR7bGV9IGluIGZvbGRlcjogJHtpZX0uIGApfSk7cmV0dXJuIHlpZWxkIHRo'@;
put 'aXMucmVxdWVzdENsaWVudC5nZXQoYCR7dGhpcy5zZXJ2ZXJVcmx9JHtfZX0vY29udGVudGAsbWUpLnRoZW4oVGU9PlRlLnJlc3VsdCl9KX11cGRhdGVGaWxlQ29udGVudChpZSxsZSxtZSxfZSl7cmV0dXJuIGcodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0IFRlPXlpZWxk'@;
put 'IHRoaXMuZ2V0RmlsZVVyaShpZSxsZSxfZSkuY2F0Y2goVj0+e3Rocm93KDAsTC5wcmVmaXhNZXNzYWdlKShWLGBFcnJvciB3aGlsZSBnZXR0aW5nIGZpbGUgVVJJIGZvcjogJHtsZX0gaW4gZm9sZGVyOiAke2llfS4gYCl9KSx7cmVzdWx0OlNlLGV0YWc6amV9PXlpZWxkIHRoaXMucmVxdWVz'@;
put 'dENsaWVudC5nZXQoYCR7dGhpcy5zZXJ2ZXJVcmx9JHtUZX1gLF9lKTtpZighU2V8fCFqZSl0aHJvdyBuZXcgRXJyb3IoYEZpbGUgJHtsZX0gZG9lcyBub3QgaGF2ZSBhbiBFVGFnLCBvciByZXF1ZXN0IGZhaWxlZC5gKTtyZXR1cm4geWllbGQgdGhpcy5yZXF1ZXN0Q2xpZW50LnB1dChgJHt0'@;
put 'aGlzLnNlcnZlclVybH0ke1RlfS9jb250ZW50YCxtZSxfZSx7IklmLU1hdGNoIjpqZSwiQ29udGVudC1UeXBlIjpTZS5jb250ZW50VHlwZX0pLnRoZW4oVj0+Vi5yZXN1bHQpfSl9Z2V0Rm9sZGVyKGllLGxlKXtyZXR1cm4gZyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJu'@;
put 'IHlpZWxkIHRoaXMucmVxdWVzdENsaWVudC5nZXQoYC9mb2xkZXJzL2ZvbGRlcnMvQGl0ZW0/cGF0aD0ke2llfWAsbGUpLnRoZW4obWU9Pm1lLnJlc3VsdCl9KX1jcmVhdGVGaWxlKGllLGxlLG1lLF9lLFRlKXtyZXR1cm4gZyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7aWYoIW1l'@;
put 'JiYhX2UpdGhyb3cgbmV3IEVycm9yKCJQYXRoIG9yIFVSSSBvZiB0aGUgcGFyZW50IGZvbGRlciBpcyByZXF1aXJlZC4iKTshX2UmJm1lJiYoX2U9eWllbGQgdGhpcy5nZXRGb2xkZXJVcmkobWUsVGUpKTtjb25zdCBTZT17QWNjZXB0OiJhcHBsaWNhdGlvbi92bmQuc2FzLmZpbGUranNvbiIs'@;
put 'IkNvbnRlbnQtRGlzcG9zaXRpb24iOmBmaWxlbmFtZT0iJHtpZX0iO2B9LGplPW5ldyBQLmRlZmF1bHQ7cmV0dXJuIGplLmFwcGVuZCgiZmlsZSIsbGUsaWUpLCh5aWVsZCB0aGlzLnJlcXVlc3RDbGllbnQucG9zdChgL2ZpbGVzL2ZpbGVzP3BhcmVudEZvbGRlclVyaT0ke19lfSZ0eXBlRGVm'@;
put 'TmFtZT1maWxlI3Jhd1VwbG9hZGAsamUsVGUsIm11bHRpcGFydC9mb3JtLWRhdGE7IGJvdW5kYXJ5PSIramUuX2JvdW5kYXJ5LFNlKSkucmVzdWx0fSl9Y3JlYXRlRm9sZGVyKGllLGxlLG1lLF9lLFRlKXtyZXR1cm4gZyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3QgU2U9'@;
put 'SS5sb2dnZXJ8fF87aWYoIWxlJiYhbWUpdGhyb3cgbmV3IEVycm9yKCJQYXRoIG9yIFVSSSBvZiB0aGUgcGFyZW50IGZvbGRlciBpcyByZXF1aXJlZC4iKTtpZighbWUmJmxlKWlmKG1lPXlpZWxkIHRoaXMuZ2V0Rm9sZGVyVXJpKGxlLF9lKSl7aWYoVGUpe2NvbnN0IFY9bGUrIi8iK2llOyh5'@;
put 'aWVsZCB0aGlzLmdldEZvbGRlclVyaShWLF9lKSkmJih5aWVsZCB0aGlzLmRlbGV0ZUZvbGRlcihsZSsiLyIraWUsX2UpKX19ZWxzZXtTZS5pbmZvKGBQYXJlbnQgZm9sZGVyIGF0IHBhdGggJyR7bGV9JyBpcyBub3QgcHJlc2VudC5gKTtjb25zdCBWPWxlLnN1YnN0cmluZygwLGxlLmxhc3RJ'@;
put 'bmRleE9mKCIvIikpLHA9YCR7bGUuc3BsaXQoIi8iKS5wb3AoKX1gO2lmKCIiPT09Vil0aHJvdyBuZXcgRi5Sb290Rm9sZGVyTm90Rm91bmRFcnJvcihsZSx0aGlzLnNlcnZlclVybCxfZSk7U2UuaW5mbyhgQ3JlYXRpbmcgcGFyZW50IGZvbGRlcjpcbicke3B9JyBpbiAnJHtWfSdgKTtjb25z'@;
put 'dCBiPXlpZWxkIHRoaXMuY3JlYXRlRm9sZGVyKHAsVix2b2lkIDAsX2UpO1NlLmluZm8oYFBhcmVudCBmb2xkZXIgJyR7cH0nIGhhcyBiZWVuIHN1Y2Nlc3NmdWxseSBjcmVhdGVkLmApLG1lPWAvZm9sZGVycy9mb2xkZXJzLyR7Yi5pZH1gfWNvbnN0e3Jlc3VsdDpqZX09eWllbGQgdGhpcy5y'@;
put 'ZXF1ZXN0Q2xpZW50LnBvc3QoYC9mb2xkZXJzL2ZvbGRlcnM/cGFyZW50Rm9sZGVyVXJpPSR7bWV9YCx7bmFtZTppZSx0eXBlOiJmb2xkZXIifSxfZSkuY2F0Y2goVj0+e2NvbnN0e21lc3NhZ2U6cCxyZXNwb25zZTpifT1WO2lmKHAmJmImJmIuZGF0YSYmYi5kYXRhLm1lc3NhZ2Upe2NvbnN0'@;
put 'e3N0YXR1czp4fT1iLHttZXNzYWdlOkN9PWIuZGF0YSxUPVtwLENdLm1hcChqPT4vXC4kLy50ZXN0KGopP2o6YCR7an0uYCk7dGhyb3chVGUmJjQwOT09PXgmJlQucHVzaCgnVG8gb3ZlcnJpZGUsIHBsZWFzZSBzZXQgImlzRm9yY2VkIiB0byAidHJ1ZSIuJyksVC5qb2luKCIgIil9dGhyb3cg'@;
put 'Vn0pO3JldHVybiB5aWVsZCB0aGlzLnBvcHVsYXRlRm9sZGVyTWFwKGAke2xlfS8ke2llfWAsX2UpLGplfSl9Y3JlYXRlSm9iRGVmaW5pdGlvbihpZSxsZSxtZSxfZSxUZSl7cmV0dXJuIGcodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2lmKCFtZSYmIV9lKXRocm93IG5ldyBFcnJv'@;
put 'cigiUGF0aCB0byBvciBVUkkgb2YgdGhlIHBhcmVudCBmb2xkZXIgaXMgcmVxdWlyZWQuIik7cmV0dXJuIV9lJiZtZSYmKF9lPXlpZWxkIHRoaXMuZ2V0Rm9sZGVyVXJpKG1lLFRlKSkseWllbGQgdGhpcy5yZXF1ZXN0Q2xpZW50LnBvc3QoYCR7dGhpcy5zZXJ2ZXJVcmx9L2pvYkRlZmluaXRp'@;
put 'b25zL2RlZmluaXRpb25zP3BhcmVudEZvbGRlclVyaT0ke19lfWAse25hbWU6aWUscGFyYW1ldGVyczpbe25hbWU6Il9hZGRqZXNiZWdpbmVuZG1hY3JvcyIsdHlwZToiQ0hBUkFDVEVSIixkZWZhdWx0VmFsdWU6ImZhbHNlIn1dLHR5cGU6IkNvbXB1dGUiLGNvZGU6bGV9LFRlKX0pfWdldEF1'@;
put 'dGhDb2RlKGllKXtyZXR1cm4gZyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3QgbGU9YCR7dGhpcy5zZXJ2ZXJVcmx9L1NBU0xvZ29uL29hdXRoL2F1dGhvcml6ZT9jbGllbnRfaWQ9JHtpZX0mcmVzcG9uc2VfdHlwZT1jb2RlYDtyZXR1cm4geWllbGQgdGhpcy5yZXF1ZXN0'@;
put 'Q2xpZW50LmdldChsZSx2b2lkIDAsInRleHQvcGxhaW4iKS50aGVuKF9lPT5fZS5yZXN1bHQpLnRoZW4oX2U9PmcodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2xldCBUZT0iIjtpZigoMCxOLmlzQXV0aG9yaXplRm9ybVJlcXVpcmVkKShfZSkpe2NvbnN0IGplPSh5aWVsZCB0aGlz'@;
put 'LnJlcXVlc3RDbGllbnQuYXV0aG9yaXplKF9lKSkuc3BsaXQoIjxib2R5PiIpWzFdLnNwbGl0KCI8L2JvZHk+IilbMF0sVj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtyZXR1cm4gVi5pbm5lckhUTUw9amUsVGU9Vi5xdWVyeVNlbGVjdG9yKCIuaW5mb2JveCBoNCIpLmlubmVyVGV4'@;
put 'dCxUZX17Y29uc3QgU2U9X2Uuc3BsaXQoIjxib2R5PiIpWzFdLnNwbGl0KCI8L2JvZHk+IilbMF0samU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7cmV0dXJuIGplLmlubmVySFRNTD1TZSxqZSYmKFRlPWplLnF1ZXJ5U2VsZWN0b3IoIi5pbmZvYm94IGg0IikuaW5uZXJUZXh0KSxU'@;
put 'ZX19KSkuY2F0Y2goKCk9Pm51bGwpfSl9Z2V0QWNjZXNzVG9rZW4oaWUsbGUsbWUpe3JldHVybiBnKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4oMCxxLmdldEFjY2Vzc1Rva2VuRm9yVml5YSkodGhpcy5yZXF1ZXN0Q2xpZW50LGllLGxlLG1lKX0pfXJlZnJlc2hUb2tl'@;
put 'bnMoaWUsbGUsbWUpe3JldHVybiBnKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4oMCxlZS5yZWZyZXNoVG9rZW5zRm9yVml5YSkodGhpcy5yZXF1ZXN0Q2xpZW50LGllLGxlLG1lKX0pfWRlbGV0ZUNsaWVudChpZSxsZSl7cmV0dXJuIGcodGhpcyx2b2lkIDAsdm9pZCAw'@;
put 'LGZ1bmN0aW9uKigpe2NvbnN0IG1lPXRoaXMuc2VydmVyVXJsK2Avb2F1dGgvY2xpZW50cy8ke2llfWA7cmV0dXJuKHlpZWxkIHRoaXMucmVxdWVzdENsaWVudC5kZWxldGUobWUsbGUpKS5yZXN1bHR9KX1leGVjdXRlQ29tcHV0ZUpvYihpZSxsZSxtZSxfZSxUZSxTZT0hMCxqZT0hMSxWLHA9'@;
put 'ITEsYil7cmV0dXJuIGcodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2xldCB4PShUZXx8e30pLmFjY2Vzc190b2tlbjtpZihUZSYmKHthY2Nlc3NfdG9rZW46eH09eWllbGQoMCxVLmdldFRva2VucykodGhpcy5yZXF1ZXN0Q2xpZW50LFRlKSksKDAsdy5pc1JlbGF0aXZlUGF0aCko'@;
put 'aWUpJiYhdGhpcy5yb290Rm9sZGVyTmFtZSl0aHJvdyBuZXcgRXJyb3IoIlJlbGF0aXZlIHBhdGhzIGNhbm5vdCBiZSB1c2VkIHdpdGhvdXQgc3BlY2lmeWluZyBhIHJvb3QgZm9sZGVyIG5hbWUiKTtjb25zdCBDPWllLnNwbGl0KCIvIiksVD1DLnBvcCgpLEg9Qy5qb2luKCIvIiksaj0oMCx3'@;
put 'LmlzUmVsYXRpdmVQYXRoKShpZSk/YCR7dGhpcy5yb290Rm9sZGVyTmFtZX0vJHtIfWA6SDt5aWVsZCB0aGlzLnBvcHVsYXRlRm9sZGVyTWFwKGoseCkuY2F0Y2godGU9Pnt0aHJvdygwLEwucHJlZml4TWVzc2FnZSkodGUsIkVycm9yIHdoaWxlIHBvcHVsYXRpbmcgZm9sZGVyIG1hcC4gIil9'@;
put 'KTtjb25zdCBFPXRoaXMuZm9sZGVyTWFwLmdldChqKTtpZighRSl0aHJvdyBuZXcgRXJyb3IoYFRoZSBmb2xkZXIgJyR7an0nIHdhcyBub3QgZm91bmQgb24gJyR7dGhpcy5zZXJ2ZXJVcmx9J2ApO2NvbnN0IG09RT8uZmluZCh0ZT0+dGUubmFtZT09PVQpO2lmKCFtKXRocm93IG5ldyBFcnJv'@;
put 'cigiSm9iIHdhcyBub3QgZm91bmQuIik7bGV0IEE9bT8uY29kZTtpZighQSl7Y29uc3QgdGU9bT8ubGlua3MuZmluZCh3ZT0+ImdldFJlc291cmNlIj09PXdlLnJlbCk7aWYoIXRlKXRocm93IG5ldyBFcnJvcigiVVJJIG9mIGpvYiBkZWZpbml0aW9uIHdhcyBub3QgZm91bmQuIik7Y29uc3R7'@;
put 'cmVzdWx0OnNlfT15aWVsZCB0aGlzLnJlcXVlc3RDbGllbnQuZ2V0KGAke3RoaXMuc2VydmVyVXJsfSR7dGUuaHJlZn1gLHgpLmNhdGNoKHdlPT57dGhyb3coMCxMLnByZWZpeE1lc3NhZ2UpKHdlLCJFcnJvciB3aGlsZSBnZXR0aW5nIGpvYiBkZWZpbml0aW9uLiAiKX0pO0E9c2UuY29kZSxt'@;
put 'LmNvZGU9QX1BfHwoQT0iIik7Y29uc3QgYWU9QS5yZXBsYWNlKC9cclxuL2csIlxuIikuc3BsaXQoIlxuIik7cmV0dXJuIHlpZWxkIHRoaXMuZXhlY3V0ZVNjcmlwdChpZSxhZSxsZSxUZSxfZSxtZSxqZSxTZSxWLHAsYil9KX1leGVjdXRlSm9iKGllLGxlLG1lLF9lLFRlKXt2YXIgU2UsamUs'@;
put 'VjtyZXR1cm4gZyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7bGV0IHA9KFRlfHx7fSkuYWNjZXNzX3Rva2VuO2lmKFRlJiYoe2FjY2Vzc190b2tlbjpwfT15aWVsZCgwLFUuZ2V0VG9rZW5zKSh0aGlzLnJlcXVlc3RDbGllbnQsVGUpKSwoMCx3LmlzUmVsYXRpdmVQYXRoKShpZSkm'@;
put 'JiF0aGlzLnJvb3RGb2xkZXJOYW1lKXRocm93IG5ldyBFcnJvcigiUmVsYXRpdmUgcGF0aHMgY2Fubm90IGJlIHVzZWQgd2l0aG91dCBzcGVjaWZ5aW5nIGEgcm9vdCBmb2xkZXIgbmFtZS4iKTtjb25zdCBiPWllLnNwbGl0KCIvIikseD1iLnBvcCgpLEM9Yi5qb2luKCIvIiksVD0oMCx3Lmlz'@;
put 'UmVsYXRpdmVQYXRoKShpZSk/YCR7dGhpcy5yb290Rm9sZGVyTmFtZX0vJHtDfWA6Qzt5aWVsZCB0aGlzLnBvcHVsYXRlRm9sZGVyTWFwKFQscCk7Y29uc3QgSD10aGlzLmZvbGRlck1hcC5nZXQoVCk7aWYoIUgpdGhyb3cgbmV3IEVycm9yKGBUaGUgZm9sZGVyICcke1R9JyB3YXMgbm90IGZv'@;
put 'dW5kIG9uICcke3RoaXMuc2VydmVyVXJsfScuYCk7Y29uc3Qgaj1IPy5maW5kKERlPT5EZS5uYW1lPT09eCk7bGV0IEU9W107aWYoX2UmJk9iamVjdC5rZXlzKF9lKS5sZW5ndGgmJihFPXlpZWxkIHRoaXMudXBsb2FkVGFibGVzKF9lLHApKSwhail0aHJvdyBuZXcgRXJyb3IoIkpvYiB3YXMg'@;
put 'bm90IGZvdW5kLiIpO2NvbnN0IG09bnVsbD09PShTZT1qPy5saW5rcy5maW5kKERlPT4iZ2V0UmVzb3VyY2UiPT09RGUucmVsKSl8fHZvaWQgMD09PVNlP3ZvaWQgMDpTZS5ocmVmLHtyZXN1bHQ6QX09eWllbGQgdGhpcy5yZXF1ZXN0Q2xpZW50LmdldChgJHt0aGlzLnNlcnZlclVybH0ke219'@;
put 'YCxwKSxhZT17X2NvbnRleHROYW1lOmxlLF9wcm9ncmFtOmAke1R9LyR7eH1gLF93ZWJpbl9maWxlX2NvdW50OkUubGVuZ3RoLF9PTUlUSlNPTkxJU1RJTkc6ITAsX09NSVRKU09OTE9HOiEwLF9vbWl0U2Vzc2lvblJlc3VsdHM6ITEsX09NSVRURVhUTElTVElORzohMCxfT01JVFRFWFRMT0c6'@;
put 'ITB9O21lJiYoYWUuX09NSVRURVhUTE9HPSJmYWxzZSIsYWUuX29taXRTZXNzaW9uUmVzdWx0cz0iZmFsc2UiLGFlLl9ERUJVRz0xMzEpLEUuZm9yRWFjaCgoRGUsRmUpPT57YWVbYF93ZWJpbl9maWxldXJpJHtGZSsxfWBdPWAvZmlsZXMvZmlsZXMvJHtEZS5maWxlLmlkfWAsYWVbYF93ZWJp'@;
put 'bl9uYW1lJHtGZSsxfWBdPURlLnRhYmxlTmFtZX0pO2NvbnN0IHRlPXtuYW1lOmBleGVjLSR7eH1gLGRlc2NyaXB0aW9uOiJQb3dlcmVkIGJ5IFNBU2pzIixqb2JEZWZpbml0aW9uOkEsYXJndW1lbnRzOmFlfSx7cmVzdWx0OnNlfT15aWVsZCB0aGlzLnJlcXVlc3RDbGllbnQucG9zdChgJHt0'@;
put 'aGlzLnNlcnZlclVybH0vam9iRXhlY3V0aW9uL2pvYnM/X2FjdGlvbj13YWl0YCx0ZSxwKSx3ZT15aWVsZCB0aGlzLnBvbGxKb2JTdGF0ZShzZSxUZSkuY2F0Y2goRGU9Pnt0aHJvdygwLEwucHJlZml4TWVzc2FnZSkoRGUsIkVycm9yIHdoaWxlIHBvbGxpbmcgam9iIHN0YXR1cy4gIil9KSx7'@;
put 'cmVzdWx0OlVlfT15aWVsZCB0aGlzLnJlcXVlc3RDbGllbnQuZ2V0KGAke3RoaXMuc2VydmVyVXJsfS9qb2JFeGVjdXRpb24vam9icy8ke3NlLmlkfWAscCk7bGV0IEplLG90O2NvbnN0IHhlPVVlLnJlc3VsdHNbIl93ZWJvdXQuanNvbiJdLHZlPVVlLmxpbmtzLmZpbmQoRGU9PiJsb2ciPT09'@;
put 'RGUucmVsKTtpZih4ZSYmKEplPXlpZWxkIHRoaXMucmVxdWVzdENsaWVudC5nZXQoYCR7dGhpcy5zZXJ2ZXJVcmx9JHt4ZX0vY29udGVudGAscCwidGV4dC9wbGFpbiIpKSxtZSYmdmUmJihvdD15aWVsZCB0aGlzLnJlcXVlc3RDbGllbnQuZ2V0KGAke3RoaXMuc2VydmVyVXJsfSR7dmUuaHJl'@;
put 'Zn0vY29udGVudGAscCkudGhlbihEZT0+RGUucmVzdWx0Lml0ZW1zLm1hcChGZT0+RmUubGluZSkuam9pbigiXG4iKSkpLCJmYWlsZWQiPT09d2UpdGhyb3cgbmV3IEYuSm9iRXhlY3V0aW9uRXJyb3IobnVsbD09PShqZT1VZS5lcnJvcil8fHZvaWQgMD09PWplP3ZvaWQgMDpqZS5lcnJvckNv'@;
put 'ZGUsbnVsbD09PShWPVVlLmVycm9yKXx8dm9pZCAwPT09Vj92b2lkIDA6Vi5tZXNzYWdlLG90KTtjb25zdCBYZT17cmVzdWx0OkplPy5yZXN1bHQsbG9nOm90fSx7ZXJyb3I6emV9PVVlO3JldHVybiB6ZSYmKFhlLmVycm9yPXplKSxYZX0pfXBvcHVsYXRlRm9sZGVyTWFwKGllLGxlKXtyZXR1'@;
put 'cm4gZyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3QgbWU9KDAsdy5pc1JlbGF0aXZlUGF0aCkoaWUpP2Ake3RoaXMucm9vdEZvbGRlck5hbWV9LyR7aWV9YDppZTtpZih0aGlzLmZvbGRlck1hcC5nZXQobWUpKXJldHVybjtjb25zdCBfZT0iL2ZvbGRlcnMvZm9sZGVycy9A'@;
put 'aXRlbT9wYXRoPSIrbWUse3Jlc3VsdDpUZX09eWllbGQgdGhpcy5yZXF1ZXN0Q2xpZW50LmdldChgJHtfZX1gLGxlKS5jYXRjaChWPT57dGhyb3coMCxMLnByZWZpeE1lc3NhZ2UpKFYsIkVycm9yIHdoaWxlIGdldHRpbmcgZm9sZGVyLiAiKX0pO2lmKCFUZSl0aHJvdyBuZXcgRXJyb3IoYFRo'@;
put 'ZSBwYXRoICR7bWV9IGRvZXMgbm90IGV4aXN0IG9uICR7dGhpcy5zZXJ2ZXJVcmx9YCk7Y29uc3R7cmVzdWx0OlNlfT15aWVsZCB0aGlzLnJlcXVlc3RDbGllbnQuZ2V0KGAvZm9sZGVycy9mb2xkZXJzLyR7VGUuaWR9L21lbWJlcnM/bGltaXQ9JHtUZS5tZW1iZXJDb3VudDw1MDA/NTAwOlRl'@;
put 'Lm1lbWJlckNvdW50fWAsbGUpLmNhdGNoKFY9Pnt0aHJvdygwLEwucHJlZml4TWVzc2FnZSkoViwiRXJyb3Igd2hpbGUgZ2V0dGluZyBtZW1iZXJzLiAiKX0pO3RoaXMuZm9sZGVyTWFwLnNldChtZSxTZS5pdGVtcyl9KX1wb2xsSm9iU3RhdGUoaWUsbGUsbWUpe3JldHVybiBnKHRoaXMsdm9p'@;
put 'ZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4oMCxLLnBvbGxKb2JTdGF0ZSkodGhpcy5yZXF1ZXN0Q2xpZW50LGllLHRoaXMuZGVidWcsbGUsbWUpfSl9dXBsb2FkVGFibGVzKGllLGxlKXtyZXR1cm4gZyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuKDAsVy51cGxv'@;
put 'YWRUYWJsZXMpKHRoaXMucmVxdWVzdENsaWVudCxpZSxsZSl9KX1nZXRGb2xkZXJEZXRhaWxzKGllLGxlKXtyZXR1cm4gZyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3QgbWU9KDAsdy5pc1VyaSkoaWUpP2llOmAvZm9sZGVycy9mb2xkZXJzL0BpdGVtP3BhdGg9JHtpZX1g'@;
put 'LHtyZXN1bHQ6X2V9PXlpZWxkIHRoaXMucmVxdWVzdENsaWVudC5nZXQoYCR7dGhpcy5zZXJ2ZXJVcmx9JHttZX1gLGxlKS5jYXRjaChUZT0+e2lmKFRlIGluc3RhbmNlb2YgRi5DZXJ0aWZpY2F0ZUVycm9yKXRocm93IFRlO3JldHVybntyZXN1bHQ6bnVsbH19KTtpZihfZSlyZXR1cm4gX2V9'@;
put 'KX1nZXRGb2xkZXJVcmkoaWUsbGUpe3JldHVybiBnKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdCBtZT15aWVsZCB0aGlzLmdldEZvbGRlckRldGFpbHMoaWUsbGUpO2lmKG1lKXJldHVybmAvZm9sZGVycy9mb2xkZXJzLyR7bWUuaWR9YH0pfWdldEZpbGVVcmkoaWUsbGUs'@;
put 'bWUpe3ZhciBfZTtyZXR1cm4gZyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3QgVGU9eWllbGQgdGhpcy5saXN0Rm9sZGVyKGllLG1lLDFlMyx7cmV0dXJuRGV0YWlsczohMH0pLmNhdGNoKGplPT57dGhyb3coMCxMLnByZWZpeE1lc3NhZ2UpKGplLGBFcnJvciB3aGlsZSBs'@;
put 'aXN0aW5nIGZvbGRlcjogJHtpZX0uIGApfSk7aWYoIVRlfHwhVGUubGVuZ3RoKXRocm93IG5ldyBFcnJvcihgTm8gbWVtYmVycyBmb3VuZCBpbiBmb2xkZXI6ICR7aWV9YCk7Y29uc3QgU2U9bnVsbD09PShfZT1UZS5maW5kKGplPT5qZS5uYW1lPT09bGUpKXx8dm9pZCAwPT09X2U/dm9pZCAw'@;
put 'Ol9lLnVyaTtpZighU2UpdGhyb3cgbmV3IEVycm9yKGBGaWxlICR7bGV9IG5vdCBmb3VuZCBpbiBmb2xkZXI6ICR7aWV9YCk7cmV0dXJuIFNlfSl9Z2V0UmVjeWNsZUJpblVyaShpZSl7cmV0dXJuIGcodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0e3Jlc3VsdDptZX09eWll'@;
put 'bGQgdGhpcy5yZXF1ZXN0Q2xpZW50LmdldChgJHt0aGlzLnNlcnZlclVybH0vZm9sZGVycy9mb2xkZXJzL0BteVJlY3ljbGVCaW5gLGllKS5jYXRjaChfZT0+e2lmKF9lIGluc3RhbmNlb2YgRi5DZXJ0aWZpY2F0ZUVycm9yKXRocm93IF9lO3JldHVybntyZXN1bHQ6bnVsbH19KTtpZihtZSly'@;
put 'ZXR1cm5gL2ZvbGRlcnMvZm9sZGVycy8ke21lLmlkfWB9KX1nZXRDb21wdXRlQ29udGV4dEJ5TmFtZShpZSxsZSl7cmV0dXJuIGcodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiB5aWVsZCB0aGlzLmNvbnRleHRNYW5hZ2VyLmdldENvbXB1dGVDb250ZXh0QnlOYW1lKGll'@;
put 'LGxlKX0pfWdldENvbXB1dGVDb250ZXh0QnlJZChpZSxsZSl7cmV0dXJuIGcodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiB5aWVsZCB0aGlzLmNvbnRleHRNYW5hZ2VyLmdldENvbXB1dGVDb250ZXh0QnlJZChpZSxsZSl9KX1saXN0Rm9sZGVyKGllLGxlLG1lPTIwLF9l'@;
put 'KXtyZXR1cm4gZyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3QgVGU9KDAsdy5pc1VyaSkoaWUpP2llOnlpZWxkIHRoaXMuZ2V0Rm9sZGVyVXJpKGllLGxlKSx7cmVzdWx0OlNlfT15aWVsZCB0aGlzLnJlcXVlc3RDbGllbnQuZ2V0KGAke3RoaXMuc2VydmVyVXJsfSR7VGV9'@;
put 'L21lbWJlcnM/bGltaXQ9JHttZX1gLGxlKTtsZXQgamU9W107cmV0dXJuIFNlJiZTZS5pdGVtcyYmKGplPV9lPy5yZXR1cm5EZXRhaWxzP1NlLml0ZW1zOlNlLml0ZW1zLm1hcChWPT5WLm5hbWUpKSxqZX0pfW1vdmVGb2xkZXIoaWUsbGUsbWUsX2Upe3JldHVybiBnKHRoaXMsdm9pZCAwLHZv'@;
put 'aWQgMCxmdW5jdGlvbiooKXtjb25zdCBUZT1pZS5zcGxpdCgiLyIpLnBvcCgpO2lmKHlpZWxkIHRoaXMuZ2V0Rm9sZGVyRGV0YWlscyhsZSxfZSkpbWU9VGU7ZWxzZXtsZXQgeD1sZS5zcGxpdCgiLyIpO3guc3BsaWNlKHgubGVuZ3RoLTEsMSksbGU9eC5qb2luKCIvIil9Y29uc3QgamU9eWll'@;
put 'bGQgdGhpcy5nZXRGb2xkZXJVcmkoaWUsX2UpLFY9eWllbGQgdGhpcy5nZXRGb2xkZXJVcmkobGUsX2UpO2lmKCFqZSlyZXR1cm47Y29uc3QgcD1qZT8uc3BsaXQoIi8iKS5wb3AoKSx7cmVzdWx0OmJ9PXlpZWxkIHRoaXMucmVxdWVzdENsaWVudC5wYXRjaChgJHt0aGlzLnNlcnZlclVybH0k'@;
put 'e2plfWAse2lkOnAsbmFtZTptZSxwYXJlbnRGb2xkZXJVcmk6Vn0sX2UpLmNhdGNoKHg9Pnt0aHJvdyB4LmNvZGUmJiJFTk9URk9VTkQiPT09eC5jb2RlP3tib2R5OnttZXNzYWdlOmBGb2xkZXIgJyR7aWUuc3BsaXQoIi8iKS5wb3AoKX0nIHdhcyBub3QgZm91bmQuYH19Onh9KTtyZXR1cm4g'@;
put 'Ynx8dm9pZCAwfSl9ZGVsZXRlRm9sZGVyKGllLGxlKXtyZXR1cm4gZyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3QgbWU9eWllbGQgdGhpcy5nZXRSZWN5Y2xlQmluVXJpKGxlKSxfZT1pZS5zcGxpdCgiLyIpLnBvcCgpfHwiIixUZT1uZXcgRGF0ZSxqZT1fZSsiICIrVGUu'@;
put 'dG9Mb2NhbGVEYXRlU3RyaW5nKCkrIiAiK1RlLnRvTG9jYWxlVGltZVN0cmluZygpO3JldHVybiB5aWVsZCB0aGlzLm1vdmVGb2xkZXIoaWUsbWUsamUsbGUpfSl9fX0sNTk1NjpmdW5jdGlvbih1ZSxYLHkpeyJ1c2Ugc3RyaWN0Ijt2YXIgST10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rp'@;
put 'b24oVyxZLHEsZWUpe3JldHVybiBuZXcocXx8KHE9UHJvbWlzZSkpKGZ1bmN0aW9uKG5lLGllKXtmdW5jdGlvbiBsZShUZSl7dHJ5e19lKGVlLm5leHQoVGUpKX1jYXRjaChTZSl7aWUoU2UpfX1mdW5jdGlvbiBtZShUZSl7dHJ5e19lKGVlLnRocm93KFRlKSl9Y2F0Y2goU2Upe2llKFNlKX19'@;
put 'ZnVuY3Rpb24gX2UoVGUpe1RlLmRvbmU/bmUoVGUudmFsdWUpOmZ1bmN0aW9uIEoobmUpe3JldHVybiBuZSBpbnN0YW5jZW9mIHE/bmU6bmV3IHEoZnVuY3Rpb24oaWUpe2llKG5lKX0pfShUZS52YWx1ZSkudGhlbihsZSxtZSl9X2UoKGVlPWVlLmFwcGx5KFcsWXx8W10pKS5uZXh0KCkpfSl9'@;
put 'O09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTtjb25zdCBfPXkoNTkyOCksZz15KDEyMzApLEI9eSg5ODIxKSx3PXkoODMwNiksUD15KDM0NjcpLEY9eSgxNTI3KSxPPXkoMzkwMCksej15KDQ1ODgpLE49eSgzNjAyKSxMPXkoODIxNyksSz17c2VydmVy'@;
put 'VXJsOiIiLHBhdGhTQVNKUzoiL1NBU2pzQXBpL3N0cC9leGVjdXRlIixwYXRoU0FTOToiL1NBU1N0b3JlZFByb2Nlc3MvZG8iLHBhdGhTQVNWaXlhOiIvU0FTSm9iRXhlY3V0aW9uIixhcHBMb2M6Ii9QdWJsaWMvc2VlZGFwcCIsc2VydmVyVHlwZTpPLlNlcnZlclR5cGUuU2FzVml5YSxkZWJ1'@;
put 'ZzohMSxjb250ZXh0TmFtZToiU0FTIEpvYiBFeGVjdXRpb24gY29tcHV0ZSBjb250ZXh0Iix1c2VDb21wdXRlQXBpOm51bGwsbG9naW5NZWNoYW5pc206Zy5Mb2dpbk1lY2hhbmlzbS5EZWZhdWx0fTtYLmRlZmF1bHQ9Y2xhc3MgVXtjb25zdHJ1Y3RvcihZKXt0aGlzLnNhc2pzQ29uZmlnPW5l'@;
put 'dyBnLlNBU2pzQ29uZmlnLHRoaXMuam9ic1BhdGg9IiIsdGhpcy5zYXNWaXlhQXBpQ2xpZW50PW51bGwsdGhpcy5zYXM5QXBpQ2xpZW50PW51bGwsdGhpcy5zYXNKU0FwaUNsaWVudD1udWxsLHRoaXMuZmlsZVVwbG9hZGVyPW51bGwsdGhpcy5hdXRoTWFuYWdlcj1udWxsLHRoaXMucmVxdWVz'@;
put 'dENsaWVudD1udWxsLHRoaXMud2ViSm9iRXhlY3V0b3I9bnVsbCx0aGlzLnNhc2pzSm9iRXhlY3V0b3I9bnVsbCx0aGlzLmNvbXB1dGVKb2JFeGVjdXRvcj1udWxsLHRoaXMuamVzSm9iRXhlY3V0b3I9bnVsbCx0aGlzLnNhczlKb2JFeGVjdXRvcj1udWxsLHRoaXMucmVzZW5kV2FpdGluZ1Jl'@;
put 'cXVlc3RzPSgpPT5JKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXt2YXIgcSxlZSxKLG5lLGllO3lpZWxkIG51bGw9PT0ocT10aGlzLndlYkpvYkV4ZWN1dG9yKXx8dm9pZCAwPT09cT92b2lkIDA6cS5yZXNlbmRXYWl0aW5nUmVxdWVzdHMoKSx5aWVsZCBudWxsPT09KGVlPXRoaXMu'@;
put 'Y29tcHV0ZUpvYkV4ZWN1dG9yKXx8dm9pZCAwPT09ZWU/dm9pZCAwOmVlLnJlc2VuZFdhaXRpbmdSZXF1ZXN0cygpLHlpZWxkIG51bGw9PT0oSj10aGlzLmplc0pvYkV4ZWN1dG9yKXx8dm9pZCAwPT09Sj92b2lkIDA6Si5yZXNlbmRXYWl0aW5nUmVxdWVzdHMoKSx5aWVsZCBudWxsPT09KG5l'@;
put 'PXRoaXMuZmlsZVVwbG9hZGVyKXx8dm9pZCAwPT09bmU/dm9pZCAwOm5lLnJlc2VuZFdhaXRpbmdSZXF1ZXN0cygpLHlpZWxkIG51bGw9PT0oaWU9dGhpcy5zYXNqc0pvYkV4ZWN1dG9yKXx8dm9pZCAwPT09aWU/dm9pZCAwOmllLnJlc2VuZFdhaXRpbmdSZXF1ZXN0cygpfSksdGhpcy5zZXRW'@;
put 'ZXJib3NlTW9kZT1xPT57dmFyIGVlO251bGw9PT0oZWU9dGhpcy5yZXF1ZXN0Q2xpZW50KXx8dm9pZCAwPT09ZWV8fGVlLnNldFZlcmJvc2VNb2RlKHEpfSx0aGlzLnNhc2pzQ29uZmlnPU9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxLKSxZKSx0aGlzLnNldHVwQ29uZmlndXJhdGlv'@;
put 'bigpfWdldENzcmZUb2tlbihZPSJnZW5lcmFsIil7dmFyIHE7cmV0dXJuIG51bGw9PT0ocT10aGlzLnJlcXVlc3RDbGllbnQpfHx2b2lkIDA9PT1xP3ZvaWQgMDpxLmdldENzcmZUb2tlbihZKX1leGVjdXRlU2NyaXB0KHtsaW5lc09mQ29kZTpZLGZpbGVOYW1lOnEsY29udGV4dE5hbWU6ZWUs'@;
put 'cnVuVGltZTpKLGF1dGhDb25maWc6bmUsYXV0aENvbmZpZ1Nhczk6aWUsZGVidWc6bGV9KXt2YXIgbWUsX2U7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2lmKHRoaXMuaXNNZXRob2RTdXBwb3J0ZWQoImV4ZWN1dGVTY3JpcHQiLFtPLlNlcnZlclR5cGUuU2FzOSxP'@;
put 'LlNlcnZlclR5cGUuU2FzanMsTy5TZXJ2ZXJUeXBlLlNhc1ZpeWFdKSx0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclR5cGU9PT1PLlNlcnZlclR5cGUuU2FzOSl7aWYoIWllKXRocm93IG5ldyBFcnJvcigiQXV0aCBjb25maWcgZm9yIHNhczkgaXMgbm90IHByb3ZpZGVkIik7cmV0dXJuIHlpZWxk'@;
put 'IG51bGw9PT0obWU9dGhpcy5zYXM5QXBpQ2xpZW50KXx8dm9pZCAwPT09bWU/dm9pZCAwOm1lLmV4ZWN1dGVTY3JpcHQoWSxpZS51c2VyTmFtZSxpZS5wYXNzd29yZCl9aWYodGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJUeXBlPT09Ty5TZXJ2ZXJUeXBlLlNhc2pzKXJldHVybiB5aWVsZCBudWxs'@;
put 'PT09KF9lPXRoaXMuc2FzSlNBcGlDbGllbnQpfHx2b2lkIDA9PT1fZT92b2lkIDA6X2UuZXhlY3V0ZVNjcmlwdChZLmpvaW4oIlxuIiksSixuZSk7aWYodGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJUeXBlPT09Ty5TZXJ2ZXJUeXBlLlNhc1ZpeWEpe2lmKCEoZWU9ZWV8fHRoaXMuc2FzanNDb25m'@;
put 'aWcuY29udGV4dE5hbWUpKXRocm93IG5ldyBFcnJvcigiQ29udGV4dCBuYW1lIGlzIHVuZGVmaW5lZC4gUGxlYXNlIHNldCBhIGBjb250ZXh0TmFtZWAgaW4geW91ciBTQVNqcyBvciBvdmVycmlkZSBjb25maWcuIik7aWYoIXEpdGhyb3cgbmV3IEVycm9yKCJGaWxlIG5hbWUgaXMgcmVxdWly'@;
put 'ZWQgaW4gY2FzZSBvZiBTQVMgVklZQS4gUGxlYXNlIHByb3ZpZGUgYSBgZmlsZU5hbWVgLiIpO3JldHVybiB5aWVsZCB0aGlzLnNhc1ZpeWFBcGlDbGllbnQuZXhlY3V0ZVNjcmlwdChxLFksZWUsbmUsbnVsbCxsZXx8dGhpcy5zYXNqc0NvbmZpZy5kZWJ1Zyl9fSl9ZXhlY3V0ZUpvYihZLHEs'@;
put 'ZWUpe3ZhciBKO3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5pc01ldGhvZFN1cHBvcnRlZCgiZXhlY3V0ZVNjcmlwdCIsW08uU2VydmVyVHlwZS5TYXNqc10pLHlpZWxkIG51bGw9PT0oSj10aGlzLnNhc0pTQXBpQ2xpZW50KXx8dm9pZCAwPT09'@;
put 'Sj92b2lkIDA6Si5leGVjdXRlSm9iKFkscSxlZSl9KX1nZXRDb21wdXRlQ29udGV4dHMoWSl7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiB0aGlzLmlzTWV0aG9kU3VwcG9ydGVkKCJnZXRDb21wdXRlQ29udGV4dHMiLFtPLlNlcnZlclR5cGUuU2FzVml5'@;
put 'YV0pLHlpZWxkIHRoaXMuc2FzVml5YUFwaUNsaWVudC5nZXRDb21wdXRlQ29udGV4dHMoWSl9KX1nZXRMYXVuY2hlckNvbnRleHRzKFkpe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5pc01ldGhvZFN1cHBvcnRlZCgiZ2V0TGF1bmNoZXJDb250'@;
put 'ZXh0cyIsW08uU2VydmVyVHlwZS5TYXNWaXlhXSkseWllbGQgdGhpcy5zYXNWaXlhQXBpQ2xpZW50LmdldExhdW5jaGVyQ29udGV4dHMoWSl9KX1nZXREZWZhdWx0Q29tcHV0ZUNvbnRleHRzKCl7cmV0dXJuIHRoaXMuaXNNZXRob2RTdXBwb3J0ZWQoImdldERlZmF1bHRDb21wdXRlQ29udGV4'@;
put 'dHMiLFtPLlNlcnZlclR5cGUuU2FzVml5YV0pLHRoaXMuc2FzVml5YUFwaUNsaWVudC5nZXREZWZhdWx0Q29tcHV0ZUNvbnRleHRzKCl9Z2V0RXhlY3V0YWJsZUNvbnRleHRzKFkpe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5pc01ldGhvZFN1'@;
put 'cHBvcnRlZCgiZ2V0RXhlY3V0YWJsZUNvbnRleHRzIixbTy5TZXJ2ZXJUeXBlLlNhc1ZpeWFdKSx5aWVsZCB0aGlzLnNhc1ZpeWFBcGlDbGllbnQuZ2V0RXhlY3V0YWJsZUNvbnRleHRzKFkpfSl9Y3JlYXRlQ29tcHV0ZUNvbnRleHQoWSxxLGVlLEosbmUsaWUpe3JldHVybiBJKHRoaXMsdm9p'@;
put 'ZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5pc01ldGhvZFN1cHBvcnRlZCgiY3JlYXRlQ29tcHV0ZUNvbnRleHQiLFtPLlNlcnZlclR5cGUuU2FzVml5YV0pLHlpZWxkIHRoaXMuc2FzVml5YUFwaUNsaWVudC5jcmVhdGVDb21wdXRlQ29udGV4dChZLHEsZWUsSixuZSxpZSl9'@;
put 'KX1jcmVhdGVMYXVuY2hlckNvbnRleHQoWSxxLGVlLEope3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5pc01ldGhvZFN1cHBvcnRlZCgiY3JlYXRlTGF1bmNoZXJDb250ZXh0IixbTy5TZXJ2ZXJUeXBlLlNhc1ZpeWFdKSx5aWVsZCB0aGlzLnNh'@;
put 'c1ZpeWFBcGlDbGllbnQuY3JlYXRlTGF1bmNoZXJDb250ZXh0KFkscSxlZSxKKX0pfWVkaXRDb21wdXRlQ29udGV4dChZLHEsZWUpe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5pc01ldGhvZFN1cHBvcnRlZCgiZWRpdENvbXB1dGVDb250ZXh0'@;
put 'IixbTy5TZXJ2ZXJUeXBlLlNhc1ZpeWFdKSx5aWVsZCB0aGlzLnNhc1ZpeWFBcGlDbGllbnQuZWRpdENvbXB1dGVDb250ZXh0KFkscSxlZSl9KX1kZWxldGVDb21wdXRlQ29udGV4dChZLHEpe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5pc01l'@;
put 'dGhvZFN1cHBvcnRlZCgiZGVsZXRlQ29tcHV0ZUNvbnRleHQiLFtPLlNlcnZlclR5cGUuU2FzVml5YV0pLHlpZWxkIHRoaXMuc2FzVml5YUFwaUNsaWVudC5kZWxldGVDb21wdXRlQ29udGV4dChZLHEpfSl9Z2V0Q29tcHV0ZUNvbnRleHRCeU5hbWUoWSxxKXtyZXR1cm4gSSh0aGlzLHZvaWQg'@;
put 'MCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuaXNNZXRob2RTdXBwb3J0ZWQoImdldENvbXB1dGVDb250ZXh0QnlOYW1lIixbTy5TZXJ2ZXJUeXBlLlNhc1ZpeWFdKSx5aWVsZCB0aGlzLnNhc1ZpeWFBcGlDbGllbnQuZ2V0Q29tcHV0ZUNvbnRleHRCeU5hbWUoWSxxKX0pfWdldENv'@;
put 'bXB1dGVDb250ZXh0QnlJZChZLHEpe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5pc01ldGhvZFN1cHBvcnRlZCgiZ2V0Q29tcHV0ZUNvbnRleHRCeUlkIixbTy5TZXJ2ZXJUeXBlLlNhc1ZpeWFdKSx5aWVsZCB0aGlzLnNhc1ZpeWFBcGlDbGll'@;
put 'bnQuZ2V0Q29tcHV0ZUNvbnRleHRCeUlkKFkscSl9KX1jcmVhdGVTZXNzaW9uKFkscSl7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiB0aGlzLmlzTWV0aG9kU3VwcG9ydGVkKCJjcmVhdGVTZXNzaW9uIixbTy5TZXJ2ZXJUeXBlLlNhc1ZpeWFdKSx5aWVs'@;
put 'ZCB0aGlzLnNhc1ZpeWFBcGlDbGllbnQuY3JlYXRlU2Vzc2lvbihZLHEpfSl9Y3JlYXRlRm9sZGVyKFkscSxlZSxKLG5lLGllKXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIG5lP3lpZWxkIG5lLmNyZWF0ZUZvbGRlcihZLHEsZWUsSixpZSk6eWllbGQg'@;
put 'dGhpcy5zYXNWaXlhQXBpQ2xpZW50LmNyZWF0ZUZvbGRlcihZLHEsZWUsSixpZSl9KX1jcmVhdGVGaWxlKFkscSxlZSxKLG5lLGllKXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIGllP3lpZWxkIGllLmNyZWF0ZUZpbGUoWSxxLGVlLEosbmUpOnlpZWxk'@;
put 'IHRoaXMuc2FzVml5YUFwaUNsaWVudC5jcmVhdGVGaWxlKFkscSxlZSxKLG5lKX0pfWdldEZpbGVDb250ZW50KFkscSxlZSl7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiB0aGlzLmlzTWV0aG9kU3VwcG9ydGVkKCJnZXRGaWxlQ29udGVudCIsW08uU2Vy'@;
put 'dmVyVHlwZS5TYXNWaXlhXSkseWllbGQgdGhpcy5zYXNWaXlhQXBpQ2xpZW50LmdldEZpbGVDb250ZW50KFkscSxlZSl9KX11cGRhdGVGaWxlQ29udGVudChZLHEsZWUsSil7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiB0aGlzLmlzTWV0aG9kU3VwcG9y'@;
put 'dGVkKCJ1cGRhdGVGaWxlQ29udGVudCIsW08uU2VydmVyVHlwZS5TYXNWaXlhXSkseWllbGQgdGhpcy5zYXNWaXlhQXBpQ2xpZW50LnVwZGF0ZUZpbGVDb250ZW50KFkscSxlZSxKKX0pfWdldEZvbGRlcihZLHEpe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1'@;
put 'cm4gdGhpcy5pc01ldGhvZFN1cHBvcnRlZCgiZ2V0Rm9sZGVyIixbTy5TZXJ2ZXJUeXBlLlNhc1ZpeWFdKSx5aWVsZCB0aGlzLnNhc1ZpeWFBcGlDbGllbnQuZ2V0Rm9sZGVyKFkscSl9KX1kZWxldGVGb2xkZXIoWSxxKXt2YXIgZWU7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0'@;
put 'aW9uKigpe3JldHVybiB0aGlzLmlzTWV0aG9kU3VwcG9ydGVkKCJkZWxldGVGb2xkZXIiLFtPLlNlcnZlclR5cGUuU2FzVml5YV0pLHlpZWxkIG51bGw9PT0oZWU9dGhpcy5zYXNWaXlhQXBpQ2xpZW50KXx8dm9pZCAwPT09ZWU/dm9pZCAwOmVlLmRlbGV0ZUZvbGRlcihZLHEpfSl9bGlzdEZv'@;
put 'bGRlcihZLHEsZWUsSj0hMSl7dmFyIG5lO3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5pc01ldGhvZFN1cHBvcnRlZCgibGlzdEZvbGRlciIsW08uU2VydmVyVHlwZS5TYXNWaXlhXSkseWllbGQgbnVsbD09PShuZT10aGlzLnNhc1ZpeWFBcGlD'@;
put 'bGllbnQpfHx2b2lkIDA9PT1uZT92b2lkIDA6bmUubGlzdEZvbGRlcihZLHEsZWUse3JldHVybkRldGFpbHM6Sn0pfSl9bW92ZUZvbGRlcihZLHEsZWUsSil7dmFyIG5lO3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5pc01ldGhvZFN1cHBvcnRl'@;
put 'ZCgibW92ZUZvbGRlciIsW08uU2VydmVyVHlwZS5TYXNWaXlhXSkseWllbGQgbnVsbD09PShuZT10aGlzLnNhc1ZpeWFBcGlDbGllbnQpfHx2b2lkIDA9PT1uZT92b2lkIDA6bmUubW92ZUZvbGRlcihZLHEsZWUsSil9KX1jcmVhdGVKb2JEZWZpbml0aW9uKFkscSxlZSxKLG5lLGllKXtyZXR1'@;
put 'cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuaXNNZXRob2RTdXBwb3J0ZWQoImNyZWF0ZUpvYkRlZmluaXRpb24iLFtPLlNlcnZlclR5cGUuU2FzVml5YV0pLGllP3lpZWxkIGllLmNyZWF0ZUpvYkRlZmluaXRpb24oWSxxLGVlLEosbmUpOnlpZWxkIHRo'@;
put 'aXMuc2FzVml5YUFwaUNsaWVudC5jcmVhdGVKb2JEZWZpbml0aW9uKFkscSxlZSxKLG5lKX0pfWdldEF1dGhDb2RlKFkpe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5pc01ldGhvZFN1cHBvcnRlZCgiZ2V0QXV0aENvZGUiLFtPLlNlcnZlclR5'@;
put 'cGUuU2FzVml5YV0pLHlpZWxkIHRoaXMuc2FzVml5YUFwaUNsaWVudC5nZXRBdXRoQ29kZShZKX0pfWdldEFjY2Vzc1Rva2VuKFkscSxlZSl7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiB0aGlzLmlzTWV0aG9kU3VwcG9ydGVkKCJnZXRBY2Nlc3NUb2tl'@;
put 'biIsW08uU2VydmVyVHlwZS5TYXNWaXlhLE8uU2VydmVyVHlwZS5TYXNqc10pLHRoaXMuc2FzanNDb25maWcuc2VydmVyVHlwZT09PU8uU2VydmVyVHlwZS5TYXNqcz95aWVsZCB0aGlzLnNhc0pTQXBpQ2xpZW50LmdldEFjY2Vzc1Rva2VuKFksZWUpOnlpZWxkIHRoaXMuc2FzVml5YUFwaUNs'@;
put 'aWVudC5nZXRBY2Nlc3NUb2tlbihZLHEsZWUpfSl9cmVmcmVzaFRva2VucyhZLHEsZWUpe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5pc01ldGhvZFN1cHBvcnRlZCgicmVmcmVzaFRva2VucyIsW08uU2VydmVyVHlwZS5TYXNWaXlhLE8uU2Vy'@;
put 'dmVyVHlwZS5TYXNqc10pLHRoaXMuc2FzanNDb25maWcuc2VydmVyVHlwZT09PU8uU2VydmVyVHlwZS5TYXNqcz95aWVsZCB0aGlzLnNhc0pTQXBpQ2xpZW50LnJlZnJlc2hUb2tlbnMoZWUpOnlpZWxkIHRoaXMuc2FzVml5YUFwaUNsaWVudC5yZWZyZXNoVG9rZW5zKFkscSxlZSl9KX1kZWxl'@;
put 'dGVDbGllbnQoWSxxKXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuaXNNZXRob2RTdXBwb3J0ZWQoImRlbGV0ZUNsaWVudCIsW08uU2VydmVyVHlwZS5TYXNWaXlhXSkseWllbGQgdGhpcy5zYXNWaXlhQXBpQ2xpZW50LmRlbGV0ZUNsaWVudChZ'@;
put 'LHEpfSl9Z2V0U2FzanNDb25maWcoKXtyZXR1cm4gdGhpcy5zYXNqc0NvbmZpZ31nZXRVc2VyTmFtZSgpe3JldHVybiB0aGlzLmF1dGhNYW5hZ2VyLnVzZXJOYW1lfXNldFNBU2pzQ29uZmlnKFkpe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXt0aGlzLnNhc2pzQ29u'@;
put 'ZmlnPU9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0aGlzLnNhc2pzQ29uZmlnKSxZKSx0aGlzLnNldHVwQ29uZmlndXJhdGlvbigpfSl9c2V0RGVidWdTdGF0ZShZKXt0aGlzLnNhc2pzQ29uZmlnLmRlYnVnPVksdGhpcy5zYXNWaXlhQXBpQ2xpZW50JiYodGhpcy5zYXNWaXlhQXBp'@;
put 'Q2xpZW50LmRlYnVnPVkpfWNoZWNrU2Vzc2lvbigpe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5hdXRoTWFuYWdlci5jaGVja1Nlc3Npb24oKX0pfWxvZ0luKFkscSxlZSxKPXt9KXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rp'@;
put 'b24qKCl7aWYodGhpcy5zYXNqc0NvbmZpZy5sb2dpbk1lY2hhbmlzbT09PWcuTG9naW5NZWNoYW5pc20uRGVmYXVsdCl7aWYoIVl8fCFxKXRocm93IG5ldyBFcnJvcigiQSB1c2VybmFtZSBhbmQgcGFzc3dvcmQgYXJlIHJlcXVpcmVkIHdoZW4gdXNpbmcgdGhlIGRlZmF1bHQgbG9naW4gbWVj'@;
put 'aGFuaXNtLiIpO3JldHVybiB0aGlzLmF1dGhNYW5hZ2VyLmxvZ0luKFkscSl9aWYodHlwZW9mIHdpbmRvdz4idSIpdGhyb3cgbmV3IEVycm9yKCJUaGUgcmVkaXJlY3RlZCBsb2dpbiBtZWNoYW5pc20gaXMgb25seSBhdmFpbGFibGUgZm9yIHVzZSBpbiB0aGUgYnJvd3Nlci4iKTtyZXR1cm4g'@;
put 'dGhpcy5hdXRoTWFuYWdlci5yZWRpcmVjdGVkTG9nSW4oSil9KX1sb2dPdXQoKXtyZXR1cm4gdGhpcy5hdXRoTWFuYWdlci5sb2dPdXQoKX11cGxvYWRGaWxlKFkscSxlZSxKPXt9LG5lKXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Sj1PYmplY3QuYXNzaWduKE9i'@;
put 'amVjdC5hc3NpZ24oe30sdGhpcy5zYXNqc0NvbmZpZyksSik7Y29uc3QgaWU9e2ZpbGVzOnEscGFyYW1zOmVlfTtyZXR1cm4geWllbGQgdGhpcy5maWxlVXBsb2FkZXIuZXhlY3V0ZShZLGllLEosbmUpfSl9cmVxdWVzdChZLHEsZWU9e30sSixuZSxpZT1bXSl7cmV0dXJuIEkodGhpcyx2b2lk'@;
put 'IDAsdm9pZCAwLGZ1bmN0aW9uKigpe2VlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0aGlzLnNhc2pzQ29uZmlnKSxlZSk7Y29uc3QgbGU9KDAsXy52YWxpZGF0ZUlucHV0KShxKTtyZXR1cm4gbGUuc3RhdHVzP2VlLnNlcnZlclR5cGU9PT1PLlNlcnZlclR5cGUuU2FzanM/eWll'@;
put 'bGQgdGhpcy5zYXNqc0pvYkV4ZWN1dG9yLmV4ZWN1dGUoWSxxLGVlLEosbmUsaWUpOmVlLnNlcnZlclR5cGU9PT1PLlNlcnZlclR5cGUuU2FzVml5YSYmbnVsbCE9ZWUudXNlQ29tcHV0ZUFwaT9lZS51c2VDb21wdXRlQXBpP3lpZWxkIHRoaXMuY29tcHV0ZUpvYkV4ZWN1dG9yLmV4ZWN1dGUo'@;
put 'WSxxLGVlLEosbmUpOihlZS5jb250ZXh0TmFtZXx8KGVlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxlZSkse2NvbnRleHROYW1lOiJTQVMgSm9iIEV4ZWN1dGlvbiBjb21wdXRlIGNvbnRleHQifSkpLHlpZWxkIHRoaXMuamVzSm9iRXhlY3V0b3IuZXhlY3V0ZShZLHEsZWUsSixu'@;
put 'ZSxpZSkpOmVlLnNlcnZlclR5cGU9PT1PLlNlcnZlclR5cGUuU2FzOSYmZWUudXNlcm5hbWUmJmVlLnBhc3N3b3JkP3lpZWxkIHRoaXMuc2FzOUpvYkV4ZWN1dG9yLmV4ZWN1dGUoWSxxLGVlKTp5aWVsZCB0aGlzLndlYkpvYkV4ZWN1dG9yLmV4ZWN1dGUoWSxxLGVlLEosbmUsaWUpOlByb21p'@;
put 'c2UucmVqZWN0KG5ldyBnLkVycm9yUmVzcG9uc2UobGUubXNnKSl9KX1kZXBsb3lTZXJ2aWNlUGFjayhZLHEsZWUsSixuZT0hMSl7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3RoaXMuaXNNZXRob2RTdXBwb3J0ZWQoImRlcGxveVNlcnZpY2VQYWNrIixbTy5TZXJ2'@;
put 'ZXJUeXBlLlNhc1ZpeWFdKTtsZXQgaWU9bnVsbDtpZihlZXx8cSllZXx8KGVlPXRoaXMuc2FzanNDb25maWcuc2VydmVyVXJsKSxxfHwocT10aGlzLnNhc2pzQ29uZmlnLmFwcExvYyksdGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJUeXBlPT09Ty5TZXJ2ZXJUeXBlLlNhc1ZpeWE/KGllPW5ldyBC'@;
put 'LlNBU1ZpeWFBcGlDbGllbnQoZWUscSx0aGlzLnNhc2pzQ29uZmlnLmNvbnRleHROYW1lLHRoaXMucmVxdWVzdENsaWVudCksaWUuZGVidWc9dGhpcy5zYXNqc0NvbmZpZy5kZWJ1Zyk6dGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJUeXBlPT09Ty5TZXJ2ZXJUeXBlLlNhczkmJihpZT1uZXcgdy5T'@;
put 'QVM5QXBpQ2xpZW50KGVlLHRoaXMuam9ic1BhdGgsdGhpcy5zYXNqc0NvbmZpZy5odHRwc0FnZW50T3B0aW9ucykpO2Vsc2V7bGV0IG1lPW51bGw7dGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJUeXBlPT09Ty5TZXJ2ZXJUeXBlLlNhc1ZpeWE/bWU9dGhpcy5zYXNWaXlhQXBpQ2xpZW50LmdldENv'@;
put 'bmZpZygpOnRoaXMuc2FzanNDb25maWcuc2VydmVyVHlwZT09PU8uU2VydmVyVHlwZS5TYXM5JiYobWU9dGhpcy5zYXM5QXBpQ2xpZW50LmdldENvbmZpZygpKSxlZT1tZS5zZXJ2ZXJVcmwscT1tZS5yb290Rm9sZGVyTmFtZX1ZLm1lbWJlcnNbMF0ubWVtYmVycyYmWS5tZW1iZXJzWzBdLm1l'@;
put 'bWJlcnMuc29ydChtZT0+ImZvbGRlciI9PT1tZS50eXBlPy0xOjEpO2NvbnN0IGxlPVkubWVtYmVyczt5aWVsZCB0aGlzLmNyZWF0ZUZvbGRlcnNBbmRTZXJ2aWNlcyhxLGxlLEosaWUsbmUpfSl9c3RhcnRDb21wdXRlSm9iKFkscSxlZT17fSxKLG5lLGllLGxlPSExLG1lLF9lKXt2YXIgVGUs'@;
put 'U2UsamUsVjtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7aWYoZWU9T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHRoaXMuc2FzanNDb25maWcpLGVlKSx0aGlzLmlzTWV0aG9kU3VwcG9ydGVkKCJzdGFydENvbXB1dGVKb2IiLFtPLlNlcnZlclR5cGUuU2Fz'@;
put 'Vml5YV0pLCFlZS5jb250ZXh0TmFtZSl0aHJvdyBuZXcgRXJyb3IoIkNvbnRleHQgbmFtZSBpcyB1bmRlZmluZWQuIFBsZWFzZSBzZXQgYSBgY29udGV4dE5hbWVgIGluIHlvdXIgU0FTanMgb3Igb3ZlcnJpZGUgY29uZmlnLiIpO3JldHVybiBfZT8obnVsbD09PShUZT10aGlzLnJlcXVlc3RD'@;
put 'bGllbnQpfHx2b2lkIDA9PT1UZXx8VGUuc2V0VmVyYm9zZU1vZGUoX2UpLG51bGw9PT0oU2U9dGhpcy5yZXF1ZXN0Q2xpZW50KXx8dm9pZCAwPT09U2V8fFNlLmVuYWJsZVZlcmJvc2VNb2RlKCkpOiExPT09X2UmJihudWxsPT09KGplPXRoaXMucmVxdWVzdENsaWVudCl8fHZvaWQgMD09PWpl'@;
put 'fHxqZS5kaXNhYmxlVmVyYm9zZU1vZGUoKSksbnVsbD09PShWPXRoaXMuc2FzVml5YUFwaUNsaWVudCl8fHZvaWQgMD09PVY/dm9pZCAwOlYuZXhlY3V0ZUNvbXB1dGVKb2IoWSxlZS5jb250ZXh0TmFtZSxlZS5kZWJ1ZyxxLEosISFuZSwhMSxpZSxsZSxtZSl9KX1mZXRjaExvZ0ZpbGVDb250'@;
put 'ZW50KFkscSl7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiB5aWVsZCB0aGlzLnJlcXVlc3RDbGllbnQuZ2V0KFkscSkudGhlbihlZT0+e2lmKCFlZSlyZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IGcuRXJyb3JSZXNwb25zZSgiRXJyb3Igd2hpbGUgZmV0'@;
put 'Y2hpbmcgbG9nLiBSZXNwb25zZSB3YXMgbm90IHByb3ZpZGVkLiIpKTt0cnl7cmV0dXJuIEpTT04uc3RyaW5naWZ5KGVlLnJlc3VsdCl9Y2F0Y2goSil7cmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBnLkVycm9yUmVzcG9uc2UoIkVycm9yIHdoaWxlIGZldGNoaW5nIGxvZy4gVGhlIHJlc3Vs'@;
put 'dCBpcyBub3QgdmFsaWQuIixKKSl9fSl9KX1nZXRTYXNSZXF1ZXN0cygpe3JldHVyblsuLi50aGlzLnJlcXVlc3RDbGllbnQuZ2V0UmVxdWVzdHMoKV0uc29ydChfLmNvbXBhcmVUaW1lc3RhbXBzKX1jbGVhclNhc1JlcXVlc3RzKCl7dGhpcy5yZXF1ZXN0Q2xpZW50LmNsZWFyUmVxdWVzdHMo'@;
put 'KX1zZXR1cENvbmZpZ3VyYXRpb24oKXtpZih2b2lkIDA9PT10aGlzLnNhc2pzQ29uZmlnLnNlcnZlclVybHx8IiI9PT10aGlzLnNhc2pzQ29uZmlnLnNlcnZlclVybClpZih0eXBlb2YgbG9jYXRpb248InUiKXtsZXQgWT1gJHtsb2NhdGlvbi5wcm90b2NvbH0vLyR7bG9jYXRpb24uaG9zdG5h'@;
put 'bWV9YDtsb2NhdGlvbi5wb3J0JiYoWT1gJHtZfToke2xvY2F0aW9uLnBvcnR9YCksdGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJVcmw9WX1lbHNlIHRoaXMuc2FzanNDb25maWcuc2VydmVyVXJsPSIiOyIvIj09PXRoaXMuc2FzanNDb25maWcuc2VydmVyVXJsLnNsaWNlKC0xKSYmKHRoaXMuc2Fz'@;
put 'anNDb25maWcuc2VydmVyVXJsPXRoaXMuc2FzanNDb25maWcuc2VydmVyVXJsLnNsaWNlKDAsLTEpKSx0aGlzLnJlcXVlc3RDbGllbnQ/dGhpcy5yZXF1ZXN0Q2xpZW50LnNldENvbmZpZyh0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclVybCx0aGlzLnNhc2pzQ29uZmlnLmh0dHBzQWdlbnRPcHRp'@;
put 'b25zKTp0aGlzLnJlcXVlc3RDbGllbnQ9bmV3KHRoaXMuc2FzanNDb25maWcuc2VydmVyVHlwZT09PU8uU2VydmVyVHlwZS5TYXNqcz9OLlNhc2pzUmVxdWVzdENsaWVudDp6LlJlcXVlc3RDbGllbnQpKHRoaXMuc2FzanNDb25maWcuc2VydmVyVXJsLHRoaXMuc2FzanNDb25maWcuaHR0cHNB'@;
put 'Z2VudE9wdGlvbnMsdGhpcy5zYXNqc0NvbmZpZy5yZXF1ZXN0SGlzdG9yeUxpbWl0LHRoaXMuc2FzanNDb25maWcudmVyYm9zZSksdGhpcy5qb2JzUGF0aD10aGlzLnNhc2pzQ29uZmlnLnNlcnZlclR5cGU9PT1PLlNlcnZlclR5cGUuU2FzVml5YT90aGlzLnNhc2pzQ29uZmlnLnBhdGhTQVNW'@;
put 'aXlhOnRoaXMuc2FzanNDb25maWcuc2VydmVyVHlwZT09PU8uU2VydmVyVHlwZS5TYXM5P3RoaXMuc2FzanNDb25maWcucGF0aFNBUzk6dGhpcy5zYXNqc0NvbmZpZy5wYXRoU0FTSlMsdGhpcy5hdXRoTWFuYWdlcj1uZXcgRi5BdXRoTWFuYWdlcih0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclVy'@;
put 'bCx0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclR5cGUsdGhpcy5yZXF1ZXN0Q2xpZW50LHRoaXMucmVzZW5kV2FpdGluZ1JlcXVlc3RzKSx0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclR5cGU9PT1PLlNlcnZlclR5cGUuU2FzVml5YSYmKHRoaXMuc2FzVml5YUFwaUNsaWVudD90aGlzLnNhc1ZpeWFB'@;
put 'cGlDbGllbnQuc2V0Q29uZmlnKHRoaXMuc2FzanNDb25maWcuc2VydmVyVXJsLHRoaXMuc2FzanNDb25maWcuYXBwTG9jKTp0aGlzLnNhc1ZpeWFBcGlDbGllbnQ9bmV3IEIuU0FTVml5YUFwaUNsaWVudCh0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclVybCx0aGlzLnNhc2pzQ29uZmlnLmFwcExv'@;
put 'Yyx0aGlzLnNhc2pzQ29uZmlnLmNvbnRleHROYW1lLHRoaXMucmVxdWVzdENsaWVudCksdGhpcy5zYXNWaXlhQXBpQ2xpZW50LmRlYnVnPXRoaXMuc2FzanNDb25maWcuZGVidWcpLHRoaXMuc2FzanNDb25maWcuc2VydmVyVHlwZT09PU8uU2VydmVyVHlwZS5TYXM5JiYodGhpcy5zYXM5QXBp'@;
put 'Q2xpZW50P3RoaXMuc2FzOUFwaUNsaWVudC5zZXRDb25maWcodGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJVcmwpOnRoaXMuc2FzOUFwaUNsaWVudD1uZXcgdy5TQVM5QXBpQ2xpZW50KHRoaXMuc2FzanNDb25maWcuc2VydmVyVXJsLHRoaXMuam9ic1BhdGgsdGhpcy5zYXNqc0NvbmZpZy5odHRw'@;
put 'c0FnZW50T3B0aW9ucykpLHRoaXMuc2FzanNDb25maWcuc2VydmVyVHlwZT09PU8uU2VydmVyVHlwZS5TYXNqcyYmKHRoaXMuc2FzSlNBcGlDbGllbnR8fCh0aGlzLnNhc0pTQXBpQ2xpZW50PW5ldyBQLlNBU2pzQXBpQ2xpZW50KHRoaXMucmVxdWVzdENsaWVudCkpKSx0aGlzLmZpbGVVcGxv'@;
put 'YWRlcj1uZXcgTC5GaWxlVXBsb2FkZXIodGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJVcmwsdGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJUeXBlLHRoaXMuam9ic1BhdGgsdGhpcy5yZXF1ZXN0Q2xpZW50KSx0aGlzLndlYkpvYkV4ZWN1dG9yPW5ldyBMLldlYkpvYkV4ZWN1dG9yKHRoaXMuc2FzanND'@;
put 'b25maWcuc2VydmVyVXJsLHRoaXMuc2FzanNDb25maWcuc2VydmVyVHlwZSx0aGlzLmpvYnNQYXRoLHRoaXMucmVxdWVzdENsaWVudCx0aGlzLnNhc1ZpeWFBcGlDbGllbnQpLHRoaXMuc2FzanNKb2JFeGVjdXRvcj1uZXcgTC5TYXNqc0pvYkV4ZWN1dG9yKHRoaXMuc2FzanNDb25maWcuc2Vy'@;
put 'dmVyVXJsLHRoaXMuam9ic1BhdGgsdGhpcy5yZXF1ZXN0Q2xpZW50KSx0aGlzLnNhczlKb2JFeGVjdXRvcj1uZXcgTC5TYXM5Sm9iRXhlY3V0b3IodGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJVcmwsdGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJUeXBlLHRoaXMuam9ic1BhdGgsdGhpcy5yZXF1ZXN0'@;
put 'Q2xpZW50LHRoaXMuc2FzanNDb25maWcuaHR0cHNBZ2VudE9wdGlvbnMpLHRoaXMuY29tcHV0ZUpvYkV4ZWN1dG9yPW5ldyBMLkNvbXB1dGVKb2JFeGVjdXRvcih0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclVybCx0aGlzLnNhc1ZpeWFBcGlDbGllbnQpLHRoaXMuamVzSm9iRXhlY3V0b3I9bmV3'@;
put 'IEwuSmVzSm9iRXhlY3V0b3IodGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJVcmwsdGhpcy5zYXNWaXlhQXBpQ2xpZW50KX1jcmVhdGVGb2xkZXJzQW5kU2VydmljZXMoWSxxLGVlLEosbmUpe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXt5aWVsZCgwLF8uYXN5bmNGb3JF'@;
put 'YWNoKShxLGllPT5JKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtzd2l0Y2goaWUudHlwZSl7Y2FzZSJmb2xkZXIiOnlpZWxkIHRoaXMuY3JlYXRlRm9sZGVyKGllLm5hbWUsWSx2b2lkIDAsZWUsSixuZSk7YnJlYWs7Y2FzZSJmaWxlIjp5aWVsZCB0aGlzLmNyZWF0ZUZpbGUoaWUu'@;
put 'bmFtZSxpZS5jb2RlLFksdm9pZCAwLGVlLEopO2JyZWFrO2Nhc2Uic2VydmljZSI6eWllbGQgdGhpcy5jcmVhdGVKb2JEZWZpbml0aW9uKGllLm5hbWUsaWUuY29kZSxZLHZvaWQgMCxlZSxKKTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcihgVW5pZGVudGlmaWVkIG1lbWJlciAnJHtp'@;
put 'ZS5uYW1lfScgcHJvdmlkZWQuYCl9ImZvbGRlciI9PT1pZS50eXBlJiZpZS5tZW1iZXJzJiZpZS5tZW1iZXJzLmxlbmd0aCYmKHlpZWxkIHRoaXMuY3JlYXRlRm9sZGVyc0FuZFNlcnZpY2VzKGAke1l9LyR7aWUubmFtZX1gLGllLm1lbWJlcnMsZWUsSixuZSkpfSkpfSl9aXNNZXRob2RTdXBw'@;
put 'b3J0ZWQoWSxxKXtpZighdGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJUeXBlfHwhcS5pbmNsdWRlcyh0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclR5cGUpKXRocm93IG5ldyBFcnJvcihgTWV0aG9kICcke1l9JyBpcyBvbmx5IHN1cHBvcnRlZCBvbiAke3Euam9pbigiLCAiKX0gc2VydmVycy5gKX1l'@;
put 'bmFibGVWZXJib3NlTW9kZShZLHEpe3ZhciBlZTtudWxsPT09KGVlPXRoaXMucmVxdWVzdENsaWVudCl8fHZvaWQgMD09PWVlfHxlZS5lbmFibGVWZXJib3NlTW9kZShZLHEpfWRpc2FibGVWZXJib3NlTW9kZSgpe3ZhciBZO251bGw9PT0oWT10aGlzLnJlcXVlc3RDbGllbnQpfHx2b2lkIDA9'@;
put 'PT1ZfHxZLmRpc2FibGVWZXJib3NlTW9kZSgpfX19LDM0Njc6ZnVuY3Rpb24odWUsWCx5KXsidXNlIHN0cmljdCI7dmFyIEk9dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKE4sTCxLLFUpe3JldHVybiBuZXcoS3x8KEs9UHJvbWlzZSkpKGZ1bmN0aW9uKFkscSl7ZnVuY3Rpb24gZWUo'@;
put 'aWUpe3RyeXtuZShVLm5leHQoaWUpKX1jYXRjaChsZSl7cShsZSl9fWZ1bmN0aW9uIEooaWUpe3RyeXtuZShVLnRocm93KGllKSl9Y2F0Y2gobGUpe3EobGUpfX1mdW5jdGlvbiBuZShpZSl7aWUuZG9uZT9ZKGllLnZhbHVlKTpmdW5jdGlvbiBXKFkpe3JldHVybiBZIGluc3RhbmNlb2YgSz9Z'@;
put 'Om5ldyBLKGZ1bmN0aW9uKHEpe3EoWSl9KX0oaWUudmFsdWUpLnRoZW4oZWUsSil9bmUoKFU9VS5hcHBseShOLEx8fFtdKSkubmV4dCgpKX0pfSxfPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihOKXtyZXR1cm4gTiYmTi5fX2VzTW9kdWxlP046e2RlZmF1bHQ6Tn19O09i'@;
put 'amVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLlNBU2pzQXBpQ2xpZW50PXZvaWQgMDtjb25zdCBnPV8oeSg2MjMwKSksQj15KDM5MDApLHc9eSg5Nzc4KSxQPXkoNTcpLEY9eSgyNDkpLE89eSg3MDQpO1guU0FTanNBcGlDbGllbnQ9Y2xhc3Mgentjb25z'@;
put 'dHJ1Y3RvcihMKXt0aGlzLnJlcXVlc3RDbGllbnQ9TH1nZXRBY2Nlc3NUb2tlbkZvclJlcXVlc3QoTCl7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2lmKEwpe2NvbnN0e2FjY2Vzc190b2tlbjpLfT15aWVsZCgwLE8uZ2V0VG9rZW5zKSh0aGlzLnJlcXVlc3RDbGll'@;
put 'bnQsTCxCLlNlcnZlclR5cGUuU2FzanMpO3JldHVybiBLfX0pfWRlcGxveShMLEssVSl7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0IFc9eWllbGQgdGhpcy5nZXRBY2Nlc3NUb2tlbkZvclJlcXVlc3QoVSk7TC5hcHBMb2M9TC5hcHBMb2N8fEs7Y29uc3R7'@;
put 'cmVzdWx0Oll9PXlpZWxkIHRoaXMucmVxdWVzdENsaWVudC5wb3N0KCJTQVNqc0FwaS9kcml2ZS9kZXBsb3kiLEwsVyx2b2lkIDAse30se21heENvbnRlbnRMZW5ndGg6MS8wLG1heEJvZHlMZW5ndGg6MS8wfSk7cmV0dXJuIFByb21pc2UucmVzb2x2ZShZKX0pfWRlcGxveVppcEZpbGUoTCxL'@;
put 'KXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3R7Y3JlYXRlUmVhZFN0cmVhbTpVfT15KDI5NzUpLFc9eWllbGQgdGhpcy5nZXRBY2Nlc3NUb2tlbkZvclJlcXVlc3QoSyksWT15aWVsZCBVKEwpLHE9bmV3IGcuZGVmYXVsdDtxLmFwcGVuZCgiZmlsZSIsWSk7'@;
put 'Y29uc3QgZWU9YG11bHRpcGFydC9mb3JtLWRhdGE7IGJvdW5kYXJ5PSR7cS5nZXRCb3VuZGFyeSgpfWAse3Jlc3VsdDpKfT15aWVsZCB0aGlzLnJlcXVlc3RDbGllbnQucG9zdCgiU0FTanNBcGkvZHJpdmUvZGVwbG95L3VwbG9hZCIscSxXLGVlLHt9LHttYXhDb250ZW50TGVuZ3RoOjEvMCxt'@;
put 'YXhCb2R5TGVuZ3RoOjEvMH0pO3JldHVybiBQcm9taXNlLnJlc29sdmUoSil9KX1leGVjdXRlSm9iKEwsSyxVKXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3QgVz1VP1UuYWNjZXNzX3Rva2VuOnZvaWQgMDtsZXQgWTtZPUwuX3Byb2dyYW0uc3RhcnRzV2l0'@;
put 'aCgiLyIpP0wuX3Byb2dyYW06YCR7S30vJHtMLl9wcm9ncmFtfWA7Y29uc3QgcT15aWVsZCB0aGlzLnJlcXVlc3RDbGllbnQucG9zdCgiU0FTanNBcGkvc3RwL2V4ZWN1dGUiLE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7X2RlYnVnOjEzMX0sTCkse19wcm9ncmFtOll9KSxXKTtyZXR1'@;
put 'cm57cmVzdWx0OnEucmVzdWx0LGxvZzpxLmxvZ319KX1leGVjdXRlU2NyaXB0KEwsSz0ic2FzIixVKXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3QgVz15aWVsZCB0aGlzLmdldEFjY2Vzc1Rva2VuRm9yUmVxdWVzdChVKSxZPXtsb2c6IiJ9O3JldHVybiB5'@;
put 'aWVsZCB0aGlzLnJlcXVlc3RDbGllbnQucG9zdCgiU0FTanNBcGkvY29kZS9leGVjdXRlIix7Y29kZTpMLHJ1blRpbWU6S30sVykudGhlbihxPT57Y29uc3R7bG9nOmVlLHByaW50T3V0cHV0OkoscmVzdWx0Om5lfT1xO1kubG9nPWVlLEomJihZLnByaW50T3V0cHV0PUopLG5lJiYoWS53ZWJv'@;
put 'dXQ9bmUpfSkuY2F0Y2gocT0+e3Rocm93KDAsdy5wcmVmaXhNZXNzYWdlKShxLCJFcnJvciB3aGlsZSBzZW5kaW5nIFBPU1QgcmVxdWVzdCB0byBleGVjdXRlIGNvZGUuICIpfSksWX0pfWdldEFjY2Vzc1Rva2VuKEwsSyl7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigp'@;
put 'e3JldHVybigwLFAuZ2V0QWNjZXNzVG9rZW5Gb3JTYXNqcykodGhpcy5yZXF1ZXN0Q2xpZW50LEwsSyl9KX1yZWZyZXNoVG9rZW5zKEwpe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4oMCxGLnJlZnJlc2hUb2tlbnNGb3JTYXNqcykodGhpcy5yZXF1ZXN0'@;
put 'Q2xpZW50LEwpfSl9fX0sNjkwMzpmdW5jdGlvbih1ZSxYLHkpeyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDQxNTUpLF89eSg1MTA4KSxnPXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbihOLEwsSyxVKXtyZXR1cm4gbmV3KEt8fChLPVByb21pc2UpKShmdW5jdGlvbihZLHEpe2Z1bmN0aW9u'@;
put 'IGVlKGllKXt0cnl7bmUoVS5uZXh0KGllKSl9Y2F0Y2gobGUpe3EobGUpfX1mdW5jdGlvbiBKKGllKXt0cnl7bmUoVS50aHJvdyhpZSkpfWNhdGNoKGxlKXtxKGxlKX19ZnVuY3Rpb24gbmUoaWUpe2llLmRvbmU/WShpZS52YWx1ZSk6ZnVuY3Rpb24gVyhZKXtyZXR1cm4gWSBpbnN0YW5jZW9m'@;
put 'IEs/WTpuZXcgSyhmdW5jdGlvbihxKXtxKFkpfSl9KGllLnZhbHVlKS50aGVuKGVlLEopfW5lKChVPVUuYXBwbHkoTixMfHxbXSkpLm5leHQoKSl9KX07T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFguU2Vzc2lvbk1hbmFnZXI9dm9pZCAwO2NvbnN0'@;
put 'IEI9eSgxMjMwKSx3PXkoMTM5NSksUD15KDU5MjgpLEY9eSg5Nzc4KTtYLlNlc3Npb25NYW5hZ2VyPWNsYXNzIHp7Y29uc3RydWN0b3IoTCxLLFUpe3RoaXMuc2VydmVyVXJsPUwsdGhpcy5jb250ZXh0TmFtZT1LLHRoaXMucmVxdWVzdENsaWVudD1VLHRoaXMubG9nZ2VkRXJyb3JzPVtdLHRo'@;
put 'aXMuc2Vzc2lvblN0YXRlTGlua0Vycm9yPSJFcnJvciB3aGlsZSBnZXR0aW5nIHNlc3Npb24gc3RhdGUgbGluay4gIix0aGlzLnNlc3Npb25zPVtdLHRoaXMuY3VycmVudENvbnRleHQ9bnVsbCx0aGlzLnNldHRpbmdDb250ZXh0PSExLHRoaXMuX2RlYnVnPSExLHRoaXMucHJpbnRlZFNlc3Np'@;
put 'b25TdGF0ZT17cHJpbnRlZDohMSxzdGF0ZTpCLlNlc3Npb25TdGF0ZS5Ob1N0YXRlfSxMJiYoMCxQLmlzVXJsKShMKX1nZXQgZGVidWcoKXtyZXR1cm4gdGhpcy5fZGVidWd9c2V0IGRlYnVnKEwpe3RoaXMuX2RlYnVnPUx9aXNTZXNzaW9uVmFsaWQoTCl7aWYoIUwpcmV0dXJuITE7Y29uc3Qg'@;
put 'Sz0oKG5ldyBEYXRlKS5nZXRUaW1lKCktbmV3IERhdGUoTC5jcmVhdGlvblRpbWVTdGFtcCkuZ2V0VGltZSgpKS8xZTM7cmV0dXJuISghTC5hdHRyaWJ1dGVzfHxLPj1MLmF0dHJpYnV0ZXMuc2Vzc2lvbkluYWN0aXZlVGltZW91dCl9cmVtb3ZlU2Vzc2lvbkZyb21Qb29sKEwpe3RoaXMuc2Vz'@;
put 'c2lvbnM9dGhpcy5zZXNzaW9ucy5maWx0ZXIoSz0+Sy5pZCE9PUwuaWQpfXJlbW92ZUV4cGlyZWRTZXNzaW9ucygpe3RoaXMuc2Vzc2lvbnM9dGhpcy5zZXNzaW9ucy5maWx0ZXIoTD0+dGhpcy5pc1Nlc3Npb25WYWxpZChMKSl9dGhyb3dFcnJvcnMoTCxLKXt0aHJvdyBLPygwLEYucHJlZml4'@;
put 'TWVzc2FnZSkobmV3IEVycm9yKEwuam9pbigiLiAiKSksSyk6bmV3IEVycm9yKEwubWFwKFU9PlUubWVzc2FnZT9VLm1lc3NhZ2U6VSkuam9pbigiLiAiKSl9Z2V0U2Vzc2lvbihMKXtyZXR1cm4gZyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3QgSz1bXTtsZXQgVT0hMTtj'@;
put 'b25zdCBXPSgpPT57Sy5sZW5ndGgmJiFVJiYoVT0hMCx0aGlzLnRocm93RXJyb3JzKEspKX07aWYodGhpcy5yZW1vdmVFeHBpcmVkU2Vzc2lvbnMoKSx0aGlzLnNlc3Npb25zLmxlbmd0aCl7Y29uc3QgWT10aGlzLnNlc3Npb25zWzBdO3JldHVybiB0aGlzLnJlbW92ZVNlc3Npb25Gcm9tUG9v'@;
put 'bChZKSx0aGlzLmNyZWF0ZVNlc3Npb25zKEwpLmNhdGNoKHE9PntLLnB1c2gocSl9KSx0aGlzLmNyZWF0ZUFuZFdhaXRGb3JTZXNzaW9uKEwpLmNhdGNoKHE9PntLLnB1c2gocSl9KSxXKCksWX17dGhpcy5jcmVhdGVTZXNzaW9ucyhMKS5jYXRjaChxPT57Sy5wdXNoKHEpfSkseWllbGQgdGhp'@;
put 'cy5jcmVhdGVBbmRXYWl0Rm9yU2Vzc2lvbihMKS5jYXRjaChxPT57Sy5wdXNoKHEpfSksdGhpcy5yZW1vdmVFeHBpcmVkU2Vzc2lvbnMoKTtjb25zdCBZPXRoaXMuc2Vzc2lvbnMucG9wKCk7cmV0dXJuIHRoaXMucmVtb3ZlU2Vzc2lvbkZyb21Qb29sKFkpLFcoKSxZfX0pfWdldEVycm9yTWVz'@;
put 'c2FnZShMLEssVSl7cmV0dXJuYCR7VX0gcmVxdWVzdCB0byAke0t9IGZhaWxlZCB3aXRoIHN0YXR1cyBjb2RlICR7TC5yZXNwb25zZS5zdGF0dXN8fCJ1bmtub3duIn0uIGArTC5yZXNwb25zZS5kYXRhLm1lc3NhZ2V8fCIifWNsZWFyU2Vzc2lvbihMLEspe3JldHVybiBnKHRoaXMsdm9pZCAw'@;
put 'LHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdCBVPWAvY29tcHV0ZS9zZXNzaW9ucy8ke0x9YDtyZXR1cm4geWllbGQgdGhpcy5yZXF1ZXN0Q2xpZW50LmRlbGV0ZShVLEspLnRoZW4oKCk9Pnt0aGlzLnNlc3Npb25zPXRoaXMuc2Vzc2lvbnMuZmlsdGVyKFc9PlcuaWQhPT1MKX0pLmNhdGNoKFc9'@;
put 'Pnt0aHJvdygwLEYucHJlZml4TWVzc2FnZSkodGhpcy5nZXRFcnJvck1lc3NhZ2UoVyxVLCJERUxFVEUiKSwiRXJyb3Igd2hpbGUgZGVsZXRpbmcgc2Vzc2lvbi4gIil9KX0pfWNyZWF0ZVNlc3Npb25zKEwpe3JldHVybiBnKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdCBL'@;
put 'PVtdO3RoaXMuc2Vzc2lvbnMubGVuZ3RofHwoeWllbGQoMCxQLmFzeW5jRm9yRWFjaCkobmV3IEFycmF5KDEpLCgpPT5nKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXt5aWVsZCB0aGlzLmNyZWF0ZUFuZFdhaXRGb3JTZXNzaW9uKEwpLmNhdGNoKFU9PntLLnB1c2goVSl9KX0pKSks'@;
put 'Sy5sZW5ndGgmJnRoaXMudGhyb3dFcnJvcnMoSywiRXJyb3Igd2hpbGUgY3JlYXRpbmcgc2Vzc2lvbi4gIil9KX13YWl0Rm9yQ3VycmVudENvbnRleHQoKXtyZXR1cm4gZyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIG5ldyBQcm9taXNlKEw9Pntjb25zdCBLPXNldElu'@;
put 'dGVydmFsKCgpPT57dGhpcy5jdXJyZW50Q29udGV4dCYmKHRoaXMuc2V0dGluZ0NvbnRleHQ9ITEsY2xlYXJJbnRlcnZhbChLKSxMKCkpfSwxMDApfSl9KX1jcmVhdGVBbmRXYWl0Rm9yU2Vzc2lvbihMKXtyZXR1cm4gZyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7dGhpcy5jdXJy'@;
put 'ZW50Q29udGV4dHx8KHRoaXMuc2V0dGluZ0NvbnRleHQ/eWllbGQgdGhpcy53YWl0Rm9yQ3VycmVudENvbnRleHQoKTp5aWVsZCB0aGlzLnNldEN1cnJlbnRDb250ZXh0KEwpKTtjb25zdCBLPWAke3RoaXMuc2VydmVyVXJsfS9jb21wdXRlL2NvbnRleHRzLyR7dGhpcy5jdXJyZW50Q29udGV4'@;
put 'dC5pZH0vc2Vzc2lvbnNgLHtyZXN1bHQ6VSxldGFnOld9PXlpZWxkIHRoaXMucmVxdWVzdENsaWVudC5wb3N0KEsse30sTCkuY2F0Y2gocT0+e3Rocm93KDAsRi5wcmVmaXhNZXNzYWdlKSh0aGlzLmdldEVycm9yTWVzc2FnZShxLEssIlBPU1QiKSwiRXJyb3Igd2hpbGUgY3JlYXRpbmcgc2Vz'@;
put 'c2lvbi4gIil9KTtVLmV0YWc9Vztjb25zdCBZPVUubGlua3MuZmluZChxPT4ic3RhdGUiPT09cS5yZWwpO2lmKCFZKXRocm93IHRoaXMuc2Vzc2lvblN0YXRlTGlua0Vycm9yO3JldHVybiBVLnN0YXRlVXJsPVkuaHJlZix5aWVsZCB0aGlzLndhaXRGb3JTZXNzaW9uKFUsVyxMKSx0aGlzLnNl'@;
put 'c3Npb25zLnB1c2goVSksVX0pfXNldEN1cnJlbnRDb250ZXh0KEwpe3JldHVybiBnKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtpZighdGhpcy5jdXJyZW50Q29udGV4dCl7Y29uc3QgSz1gJHt0aGlzLnNlcnZlclVybH0vY29tcHV0ZS9jb250ZXh0cz9saW1pdD0xMDAwMGA7dGhp'@;
put 'cy5zZXR0aW5nQ29udGV4dD0hMDtjb25zdHtyZXN1bHQ6VX09eWllbGQgdGhpcy5yZXF1ZXN0Q2xpZW50LmdldChLLEwpLmNhdGNoKHE9Pnt0aHJvdygwLEYucHJlZml4TWVzc2FnZSkodGhpcy5nZXRFcnJvck1lc3NhZ2UocSxLLCJHRVQiKSwiRXJyb3Igd2hpbGUgZ2V0dGluZyBsaXN0IG9m'@;
put 'IGNvbnRleHRzLiAiKX0pLFk9KFUmJlUuaXRlbXMmJlUuaXRlbXMubGVuZ3RoP1UuaXRlbXM6W10pLmZpbmQocT0+cS5uYW1lPT09dGhpcy5jb250ZXh0TmFtZSk7aWYoIVkpdGhyb3cgbmV3IEVycm9yKGBUaGUgY29udGV4dCAnJHt0aGlzLmNvbnRleHROYW1lfScgd2FzIG5vdCBmb3VuZCBv'@;
put 'biB0aGUgc2VydmVyICR7dGhpcy5zZXJ2ZXJVcmx9LmApO3RoaXMuY3VycmVudENvbnRleHQ9WSxQcm9taXNlLnJlc29sdmUoKX19KX13YWl0Rm9yU2Vzc2lvbihMLEssVSl7dmFyIFc7cmV0dXJuIGcodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2xldHtzdGF0ZTpZfT1MO2NvbnN0'@;
put 'e3N0YXRlVXJsOnF9PUwsZWU9SS5sb2dnZXJ8fF87aWYoWT09PUIuU2Vzc2lvblN0YXRlLlBlbmRpbmd8fFk9PT1CLlNlc3Npb25TdGF0ZS5SdW5uaW5nfHxZPT09Qi5TZXNzaW9uU3RhdGUuTm9TdGF0ZSl7aWYocSl7dGhpcy5kZWJ1ZyYmIXRoaXMucHJpbnRlZFNlc3Npb25TdGF0ZS5wcmlu'@;
put 'dGVkJiYoZWUuaW5mbyhgUG9sbGluZzogJHt0aGlzLnNlcnZlclVybCtxfWApLHRoaXMucHJpbnRlZFNlc3Npb25TdGF0ZS5wcmludGVkPSEwKTtjb25zdCBKPWAke3RoaXMuc2VydmVyVXJsfSR7cX0/d2FpdD0zMGAse3Jlc3VsdDpuZSxyZXNwb25zZVN0YXR1czppZX09eWllbGQgdGhpcy5n'@;
put 'ZXRTZXNzaW9uU3RhdGUoSixLLFUpLmNhdGNoKGxlPT57dGhyb3coMCxGLnByZWZpeE1lc3NhZ2UpKGxlLCJFcnJvciB3aGlsZSB3YWl0aW5nIGZvciBzZXNzaW9uLiAiKX0pO2lmKFk9bmUudHJpbSgpLHRoaXMuZGVidWcmJnRoaXMucHJpbnRlZFNlc3Npb25TdGF0ZS5zdGF0ZSE9PVkmJihl'@;
put 'ZS5pbmZvKGBDdXJyZW50IHNlc3Npb24gc3RhdGUgaXMgJyR7WX0nYCksdGhpcy5wcmludGVkU2Vzc2lvblN0YXRlLnN0YXRlPVksdGhpcy5wcmludGVkU2Vzc2lvblN0YXRlLnByaW50ZWQ9ITEpLCFZKXtjb25zdCBsZT1uZXcgdy5Ob1Nlc3Npb25TdGF0ZUVycm9yKGllLHRoaXMuc2VydmVy'@;
put 'VXJsK3EsbnVsbD09PShXPUwubGlua3MuZmluZChtZT0+ImxvZyI9PT1tZS5yZWwpKXx8dm9pZCAwPT09Vz92b2lkIDA6Vy5ocmVmKTtyZXR1cm4gdGhpcy5sb2dnZWRFcnJvcnMuZmluZChtZT0+bWUuc2VydmVyUmVzcG9uc2VTdGF0dXM9PT1sZS5zZXJ2ZXJSZXNwb25zZVN0YXR1cyl8fCh0'@;
put 'aGlzLmxvZ2dlZEVycm9ycy5wdXNoKGxlKSxlZS5pbmZvKGxlLm1lc3NhZ2UpKSx5aWVsZCB0aGlzLndhaXRGb3JTZXNzaW9uKEwsSyxVKX1yZXR1cm4gdGhpcy5sb2dnZWRFcnJvcnM9W10sWX10aHJvdyB0aGlzLnNlc3Npb25TdGF0ZUxpbmtFcnJvcn1yZXR1cm4gdGhpcy5sb2dnZWRFcnJv'@;
put 'cnM9W10sWX0pfWdldFNlc3Npb25TdGF0ZShMLEssVSl7cmV0dXJuIGcodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiB5aWVsZCB0aGlzLnJlcXVlc3RDbGllbnQuZ2V0KEwsVSwidGV4dC9wbGFpbiIseyJJZi1Ob25lLU1hdGNoIjpLfSkudGhlbihXPT4oe3Jlc3VsdDpX'@;
put 'LnJlc3VsdCxyZXNwb25zZVN0YXR1czpXLnN0YXR1c30pKS5jYXRjaChXPT57dGhyb3coMCxGLnByZWZpeE1lc3NhZ2UpKHRoaXMuZ2V0RXJyb3JNZXNzYWdlKFcsTCwiR0VUIiksIkVycm9yIHdoaWxlIGdldHRpbmcgc2Vzc2lvbiBzdGF0ZS4gIil9KX0pfWdldFZhcmlhYmxlKEwsSyxVKXty'@;
put 'ZXR1cm4gZyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3QgVz1gJHt0aGlzLnNlcnZlclVybH0vY29tcHV0ZS9zZXNzaW9ucy8ke0x9L3ZhcmlhYmxlcy8ke0t9YDtyZXR1cm4geWllbGQgdGhpcy5yZXF1ZXN0Q2xpZW50LmdldChXLFUpLmNhdGNoKFk9Pnt0aHJvdygwLEYu'@;
put 'cHJlZml4TWVzc2FnZSkodGhpcy5nZXRFcnJvck1lc3NhZ2UoWSxXLCJHRVQiKSxgRXJyb3Igd2hpbGUgZmV0Y2hpbmcgc2Vzc2lvbiB2YXJpYWJsZSAnJHtLfScuIGApfSl9KX19fSwxNjIyOmZ1bmN0aW9uKHVlLFgseSl7InVzZSBzdHJpY3QiO3ZhciBJPXkoNDE1NSksXz15KDUxMDgpLGc9'@;
put 'dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKFUsVyxZLHEpe3JldHVybiBuZXcoWXx8KFk9UHJvbWlzZSkpKGZ1bmN0aW9uKEosbmUpe2Z1bmN0aW9uIGllKF9lKXt0cnl7bWUocS5uZXh0KF9lKSl9Y2F0Y2goVGUpe25lKFRlKX19ZnVuY3Rpb24gbGUoX2Upe3RyeXttZShxLnRocm93'@;
put 'KF9lKSl9Y2F0Y2goVGUpe25lKFRlKX19ZnVuY3Rpb24gbWUoX2Upe19lLmRvbmU/SihfZS52YWx1ZSk6ZnVuY3Rpb24gZWUoSil7cmV0dXJuIEogaW5zdGFuY2VvZiBZP0o6bmV3IFkoZnVuY3Rpb24obmUpe25lKEopfSl9KF9lLnZhbHVlKS50aGVuKGllLGxlKX1tZSgocT1xLmFwcGx5KFUs'@;
put 'V3x8W10pKS5uZXh0KCkpfSl9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLmV4ZWN1dGVPbkNvbXB1dGVBcGk9dm9pZCAwO2NvbnN0IEI9eSg3NzU3KSx3PXkoOTc3OCksUD15KDM2MDcpLEY9eSg3MDQpLE89eSg1OTI4KSx6PXkoNzE0KSxOPXko'@;
put 'MTM0MyksTD15KDY0OTYpO1guZXhlY3V0ZU9uQ29tcHV0ZUFwaT1mdW5jdGlvbiBLKFUsVyxZLHEsZWUsSixuZSxpZT1udWxsLGxlPSExLG1lPSExLF9lPSEwLFRlLFNlPSExLGplKXt2YXIgVixwO3JldHVybiBnKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtsZXQgYj0obmV8fHt9'@;
put 'KS5hY2Nlc3NfdG9rZW47bmUmJih7YWNjZXNzX3Rva2VuOmJ9PXlpZWxkKDAsRi5nZXRUb2tlbnMpKFUsbmUpKTtjb25zdCB4PUkubG9nZ2VyfHxfO3RyeXtsZXQgQztjb25zdCBUPXlpZWxkIFcuZ2V0U2Vzc2lvbihiKS5jYXRjaCh4ZT0+e3Rocm93KDAsdy5wcmVmaXhNZXNzYWdlKSh4ZSwi'@;
put 'RXJyb3Igd2hpbGUgZ2V0dGluZyBzZXNzaW9uLiAiKX0pO2lmKEM9VC5pZCxTZSl7Y29uc3R7cmVzdWx0OnhlfT15aWVsZCBXLmdldFZhcmlhYmxlKEMsIlNZU0pPQklEIixiKS5jYXRjaCh2ZT0+e3Rocm93KDAsdy5wcmVmaXhNZXNzYWdlKSh2ZSwiRXJyb3Igd2hpbGUgZ2V0dGluZyBzZXNz'@;
put 'aW9uIHZhcmlhYmxlLiAiKX0pO2lmKHhlJiZ4ZS52YWx1ZSl7Y29uc3QgdmU9WT9xLnNwbGl0KFkpLmpvaW4oIiIpLnJlcGxhY2UoL15cLy8sIiIpOnE7KEkubG9nZ2VyfHxfKS5pbmZvKGBUcmlnZ2VyaW5nICcke3ZlfScgd2l0aCBQSUQgJHt4ZS52YWx1ZX0gYXQgJHsoMCxCLnRpbWVzdGFt'@;
put 'cFRvWVlZWU1NRERISE1NU1MpKCl9YCl9fWxldCBIO0g9KDAsTy5pc1JlbGF0aXZlUGF0aCkocSk/YGV4ZWMtJHtxLmluY2x1ZGVzKCIvIik/cS5zcGxpdCgiLyIpWzFdOnF9YDpxLnNwbGl0KCIvIikucG9wKCk7bGV0IGo9e1NZU19KRVNfSk9CX1VSSToiIixfcHJvZ3JhbTooMCxPLmlzUmVs'@;
put 'YXRpdmVQYXRoKShxKT9ZKyIvIitxOnF9O2plJiYoaj1PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30saiksamUpKSxsZSYmKGo9T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LGopLHtfREVCVUc6MTMxfSkpO2xldCBFPVtdO2llJiYoSlNPTi5zdHJpbmdpZnkoaWUpLmluY2x1'@;
put 'ZGVzKCI7Iik/KEU9eWllbGQoMCxMLnVwbG9hZFRhYmxlcykoVSxpZSxiKS5jYXRjaCh4ZT0+e3Rocm93KDAsdy5wcmVmaXhNZXNzYWdlKSh4ZSwiRXJyb3Igd2hpbGUgdXBsb2FkaW5nIHRhYmxlcy4gIil9KSxqLl93ZWJpbl9maWxlX2NvdW50PUUubGVuZ3RoLEUuZm9yRWFjaCgoeGUsdmUp'@;
put 'PT57altgX3dlYmluX2ZpbGV1cmkke3ZlKzF9YF09YC9maWxlcy9maWxlcy8ke3hlLmZpbGUuaWR9YCxqW2Bfd2ViaW5fbmFtZSR7dmUrMX1gXT14ZS50YWJsZU5hbWV9KSk6aj1PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30saiksKDAsei5mb3JtYXREYXRhRm9yUmVxdWVzdCkoaWUp'@;
put 'KSk7Y29uc3QgbT17bmFtZTpIfHwiRGVmYXVsdCBKb2IgTmFtZSIsZGVzY3JpcHRpb246IlBvd2VyZWQgYnkgU0FTanMiLGNvZGU6ZWUsdmFyaWFibGVzOmosdmVyc2lvbjoyfSx7cmVzdWx0OkF9PXlpZWxkIFUucG9zdChgL2NvbXB1dGUvc2Vzc2lvbnMvJHtDfS9qb2JzYCxtLGIpLmNhdGNo'@;
put 'KHhlPT57dGhyb3coMCx3LnByZWZpeE1lc3NhZ2UpKHhlLCJFcnJvciB3aGlsZSBwb3N0aW5nIGpvYi4gIil9KTtpZighX2UpcmV0dXJuIFQ7bGUmJih4LmluZm8oYEpvYiBoYXMgYmVlbiBzdWJtaXR0ZWQgZm9yICcke0h9Jy5gKSx4LmluZm8oYFlvdSBjYW4gbW9uaXRvciB0aGUgam9iIHBy'@;
put 'b2dyZXNzIGF0ICcke1UuZ2V0QmFzZVVybCgpfSR7QS5saW5rcy5maW5kKHhlPT4ic3RhdGUiPT09eGUucmVsKS5ocmVmfScuYCkpO2NvbnN0IHRlPXlpZWxkKDAsTi5wb2xsSm9iU3RhdGUpKFUsQSxsZSxuZSxUZSx7c2Vzc2lvbjpULHNlc3Npb25NYW5hZ2VyOld9KS5jYXRjaCh4ZT0+Zyh0'@;
put 'aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7dmFyIHZlLFhlO2NvbnN0IHplPW51bGw9PT0odmU9eGU/LnJlc3BvbnNlKXx8dm9pZCAwPT09dmU/dm9pZCAwOnZlLmRhdGEsRGU9L2Vycj1bMC05XSosLy5leGVjKHplKTtpZigiNTExMyI9PT0obnVsbD09PShYZT1EZT8uWzBdKXx8dm9p'@;
put 'ZCAwPT09WGU/dm9pZCAwOlhlLnNsaWNlKDQsLTEpKSl7Y29uc3QgSWU9QS5saW5rcy5maW5kKFZlPT4idXAiPT09VmUucmVsKS5ocmVmKyIvbG9nIjt4ZS5sb2c9eWllbGQoMCxPLmZldGNoTG9nQnlDaHVua3MpKFUsYixJZSwxZTYpfXRocm93KDAsdy5wcmVmaXhNZXNzYWdlKSh4ZSwiRXJy'@;
put 'b3Igd2hpbGUgcG9sbGluZyBqb2Igc3RhdHVzLiAiKX0pKTtuZSYmKHthY2Nlc3NfdG9rZW46Yn09eWllbGQoMCxGLmdldFRva2VucykoVSxuZSkpO2NvbnN0e3Jlc3VsdDpzZX09eWllbGQgVS5nZXQoYC9jb21wdXRlL3Nlc3Npb25zLyR7Q30vam9icy8ke0EuaWR9YCxiKS5jYXRjaCh4ZT0+'@;
put 'e3Rocm93KDAsdy5wcmVmaXhNZXNzYWdlKSh4ZSwiRXJyb3Igd2hpbGUgZ2V0dGluZyBqb2IuICIpfSk7bGV0IHdlLFVlPSIiO2NvbnN0IEplPXNlLmxpbmtzLmZpbmQoeGU9PiJsb2ciPT09eGUucmVsKTtpZihsZSYmSmUpe2NvbnN0IHhlPWAke0plLmhyZWZ9L2NvbnRlbnRgLHZlPW51bGwh'@;
put 'PT0ocD1udWxsPT09KFY9c2UubG9nU3RhdGlzdGljcyl8fHZvaWQgMD09PVY/dm9pZCAwOlYubGluZUNvdW50KSYmdm9pZCAwIT09cD9wOjFlNjtVZT15aWVsZCgwLE8uZmV0Y2hMb2dCeUNodW5rcykoVSxiLHhlLHZlKX1pZih0ZT09PU4uSm9iU3RhdGUuRmFpbGVkfHx0ZT09PU4uSm9iU3Rh'@;
put 'dGUuRXJyb3IpdGhyb3cgbmV3IFAuQ29tcHV0ZUpvYkV4ZWN1dGlvbkVycm9yKHNlLFVlKTtpZighbWUpcmV0dXJue2pvYjpzZSxsb2c6VWV9O2NvbnN0IG90PWAvY29tcHV0ZS9zZXNzaW9ucy8ke0N9L2ZpbGVyZWZzL193ZWJvdXQvY29udGVudGA7cmV0dXJuIHdlPXlpZWxkIFUuZ2V0KG90'@;
put 'LGIsInRleHQvcGxhaW4iKS5jYXRjaCh4ZT0+Zyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7dmFyIHZlLFhlO2lmKHhlIGluc3RhbmNlb2YgUC5Ob3RGb3VuZEVycm9yJiZKZSl7Y29uc3QgemU9YCR7SmUuaHJlZn0vY29udGVudGAsRGU9bnVsbCE9PShYZT1udWxsPT09KHZlPXNl'@;
put 'LmxvZ1N0YXRpc3RpY3MpfHx2b2lkIDA9PT12ZT92b2lkIDA6dmUubGluZUNvdW50KSYmdm9pZCAwIT09WGU/WGU6MWU2O3JldHVybiBVZT15aWVsZCgwLE8uZmV0Y2hMb2dCeUNodW5rcykoVSxiLHplLERlKSxQcm9taXNlLnJlamVjdCh7c3RhdHVzOjUwMCxsb2c6VWV9KX1yZXR1cm57cmVz'@;
put 'dWx0OkpTT04uc3RyaW5naWZ5KHhlKX19KSkseWllbGQgVy5jbGVhclNlc3Npb24oQyxiKS5jYXRjaCh4ZT0+e3Rocm93KDAsdy5wcmVmaXhNZXNzYWdlKSh4ZSwiRXJyb3Igd2hpbGUgY2xlYXJpbmcgc2Vzc2lvbi4gIil9KSx7cmVzdWx0OndlPy5yZXN1bHQsbG9nOlVlfX1jYXRjaChDKXtp'@;
put 'Zig0MDQ9PT1DLnN0YXR1cylyZXR1cm4gSyhVLFcsWSxxLGVlLEosbmUsaWUsbGUsITEsITApO3Rocm93KDAsdy5wcmVmaXhNZXNzYWdlKShDLCJFcnJvciB3aGlsZSBleGVjdXRpbmcgc2NyaXB0LiAiKX19KX19LDc0NTg6ZnVuY3Rpb24odWUsWCx5KXsidXNlIHN0cmljdCI7dmFyIEk9eSg0'@;
put 'MTU1KSxfPXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbihQLEYsTyx6KXtyZXR1cm4gbmV3KE98fChPPVByb21pc2UpKShmdW5jdGlvbihMLEspe2Z1bmN0aW9uIFUocSl7dHJ5e1koei5uZXh0KHEpKX1jYXRjaChlZSl7SyhlZSl9fWZ1bmN0aW9uIFcocSl7dHJ5e1koei50aHJvdyhx'@;
put 'KSl9Y2F0Y2goZWUpe0soZWUpfX1mdW5jdGlvbiBZKHEpe3EuZG9uZT9MKHEudmFsdWUpOmZ1bmN0aW9uIE4oTCl7cmV0dXJuIEwgaW5zdGFuY2VvZiBPP0w6bmV3IE8oZnVuY3Rpb24oSyl7SyhMKX0pfShxLnZhbHVlKS50aGVuKFUsVyl9WSgoej16LmFwcGx5KFAsRnx8W10pKS5uZXh0KCkp'@;
put 'fSl9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLmdldEZpbGVTdHJlYW09dm9pZCAwO2NvbnN0IGc9eSgyOTc1KSxCPXkoNzc1Nyk7WC5nZXRGaWxlU3RyZWFtPShQLEYpPT5fKHZvaWQgMCx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0'@;
put 'e2NyZWF0ZVdyaXRlU3RyZWFtOk99PXkoMjk3NSksej1GfHxJLmN3ZCgpO2lmKHlpZWxkKDAsZy5pc0ZvbGRlcikoeikpe2NvbnN0IEw9YCR7UC5uYW1lfHwiam9iIn0tJHsoMCxCLmdlbmVyYXRlVGltZXN0YW1wKSgpfS5sb2dgLFU9eSgyNTIwKS5qb2luKEZ8fEkuY3dkKCksTCk7cmV0dXJu'@;
put 'IHlpZWxkIE8oVSl9cmV0dXJuIHlpZWxkIE8oeil9KX0sMTM0MzpmdW5jdGlvbih1ZSxYLHkpeyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDQxNTUpLF89eSg1MTA4KSxnPXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbihXLFkscSxlZSl7cmV0dXJuIG5ldyhxfHwocT1Qcm9taXNlKSkoZnVu'@;
put 'Y3Rpb24obmUsaWUpe2Z1bmN0aW9uIGxlKFRlKXt0cnl7X2UoZWUubmV4dChUZSkpfWNhdGNoKFNlKXtpZShTZSl9fWZ1bmN0aW9uIG1lKFRlKXt0cnl7X2UoZWUudGhyb3coVGUpKX1jYXRjaChTZSl7aWUoU2UpfX1mdW5jdGlvbiBfZShUZSl7VGUuZG9uZT9uZShUZS52YWx1ZSk6ZnVuY3Rp'@;
put 'b24gSihuZSl7cmV0dXJuIG5lIGluc3RhbmNlb2YgcT9uZTpuZXcgcShmdW5jdGlvbihpZSl7aWUobmUpfSl9KFRlLnZhbHVlKS50aGVuKGxlLG1lKX1fZSgoZWU9ZWUuYXBwbHkoVyxZfHxbXSkpLm5leHQoKSl9KX07T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1'@;
put 'ZTohMH0pLFguZG9Qb2xsPVgucG9sbEpvYlN0YXRlPVguSm9iU3RhdGU9dm9pZCAwO2NvbnN0IEI9eSg3MDQpLHc9eSgxMzk1KSxQPXkoMTIzMCksRj15KDU5MjgpO3ZhciBPLFc7KFc9Tz1YLkpvYlN0YXRlfHwoWC5Kb2JTdGF0ZT17fSkpLkNvbXBsZXRlZD0iY29tcGxldGVkIixXLlJ1bm5p'@;
put 'bmc9InJ1bm5pbmciLFcuUGVuZGluZz0icGVuZGluZyIsVy5VbmF2YWlsYWJsZT0idW5hdmFpbGFibGUiLFcuTm9TdGF0ZT0iIixXLkZhaWxlZD0iZmFpbGVkIixXLkVycm9yPSJlcnJvciIsWC5wb2xsSm9iU3RhdGU9ZnVuY3Rpb24geihXLFkscSxlZSxKLG5lKXtyZXR1cm4gZyh0aGlzLHZv'@;
put 'aWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3QgaWU9SS5sb2dnZXJ8fF8sbGU9Sj8uc3RyZWFtTG9nfHwhMSxtZT1be21heFBvbGxDb3VudDoyMDAscG9sbEludGVydmFsOjMwMH0se21heFBvbGxDb3VudDozMDAscG9sbEludGVydmFsOjNlM30se21heFBvbGxDb3VudDo1MDAscG9sbElu'@;
put 'dGVydmFsOjNlNH0se21heFBvbGxDb3VudDozNDAwLHBvbGxJbnRlcnZhbDo2ZTR9XTtsZXQgX2U7aWYodm9pZCAwIT09Sil7X2U9W0pdO2xldHtwb2xsU3RyYXRlZ3k6eH09Sjt2b2lkIDAhPT14PyhVKHgpLHg9eC5zb3J0KChDLFQpPT5DLm1heFBvbGxDb3VudC1ULm1heFBvbGxDb3VudCks'@;
put 'X2U9Wy4uLl9lLC4uLnhdKTpfZT1bLi4uX2UsLi4ubWVdfWVsc2UgX2U9bWU7bGV0IFRlPV9lLnNwbGljZSgwLDEpWzBdO0o9T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LFRlKSxKfHx7fSk7Y29uc3QgU2U9WS5saW5rcy5maW5kKHg9PiJzdGF0ZSI9PT14LnJlbCk7aWYoIVNlKXRo'@;
put 'cm93IG5ldyBFcnJvcigiSm9iIHN0YXRlIGxpbmsgd2FzIG5vdCBmb3VuZC4iKTtsZXQgcCxqZT15aWVsZCBOKFcsWSxPLk5vU3RhdGUscSxlZSkuY2F0Y2goeD0+KGllLmVycm9yKGBFcnJvciBmZXRjaGluZyBqb2Igc3RhdGUgZnJvbSAke1NlLmhyZWZ9LiBTdGFydGluZyBwb2xsLCBhc3N1'@;
put 'bWluZyBqb2IgdG8gYmUgcnVubmluZy5gLHgpLE8uVW5hdmFpbGFibGUpKSxWPTA7aWYoamU9PT1PLkNvbXBsZXRlZClyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGplKTtpZihsZSYmKDAsRi5pc05vZGUpKCkpe2NvbnN0e2dldEZpbGVTdHJlYW06eH09eSg3NDU4KTtwPXlpZWxkIHgoWSxKLmxv'@;
put 'Z0ZvbGRlclBhdGgpfWxldCBiPXlpZWxkKDAsWC5kb1BvbGwpKFcsWSxqZSxxLFYsSixlZSxsZSxwLG5lKTtpZihqZT1iLnN0YXRlLFY9Yi5wb2xsQ291bnQsIUwoamUpfHxWPj1KLm1heFBvbGxDb3VudCYmIV9lLmxlbmd0aClyZXR1cm4gamU7Zm9yKDtfZS5sZW5ndGgmJkwoamUpOylUZT1f'@;
put 'ZS5zcGxpY2UoMCwxKVswXSxKJiYoVGUubG9nRm9sZGVyUGF0aD1KLmxvZ0ZvbGRlclBhdGgpLGI9eWllbGQoMCxYLmRvUG9sbCkoVyxZLGplLHEsVixUZSxlZSxsZSxwLG5lKSxqZT1iLnN0YXRlLFY9Yi5wb2xsQ291bnQ7cmV0dXJuIHAmJnAuZW5kKCksamV9KX07Y29uc3QgTj0oVyxZLHEs'@;
put 'ZWUsSik9Pmcodm9pZCAwLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3QgbmU9WS5saW5rcy5maW5kKGllPT4ic3RhdGUiPT09aWUucmVsKTtpZihMKHEpKXtsZXQgaWU7SiYmKGllPXlpZWxkKDAsQi5nZXRUb2tlbnMpKFcsSikpO2NvbnN0e3Jlc3VsdDpsZX09eWllbGQgVy5nZXQo'@;
put 'YCR7bmUuaHJlZn0/X2FjdGlvbj13YWl0JndhaXQ9MzAwYCxpZT8uYWNjZXNzX3Rva2VuLCJ0ZXh0L3BsYWluIix7fSxlZSkuY2F0Y2gobWU9Pnt0aHJvdyBuZXcgdy5Kb2JTdGF0ZVBvbGxFcnJvcihZLmlkLG1lKX0pO3JldHVybiBsZS50cmltKCl9cmV0dXJuIHF9KSxMPVc9Plc9PT1PLlJ1'@;
put 'bm5pbmd8fFc9PT1PLk5vU3RhdGV8fFc9PT1PLlBlbmRpbmd8fFc9PT1PLlVuYXZhaWxhYmxlO1guZG9Qb2xsPShXLFkscSxlZSxKLG5lLGllLGxlLG1lLF9lKT0+Zyh2b2lkIDAsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXt2YXIgVGUsU2U7Y29uc3R7bWF4UG9sbENvdW50OmplLHBvbGxJ'@;
put 'bnRlcnZhbDpWfT1uZSxwPUkubG9nZ2VyfHxfLGI9WS5saW5rcy5maW5kKEU9PiJzdGF0ZSI9PT1FLnJlbCk7bGV0IEM9MCxUPXEsSD1PLk5vU3RhdGUsaj0wO2Zvcig7TChUKSYmSjw9amU7KXtpZihfZSYmSiYmSiUxMD09MCYmaWUpe2NvbnN0e3Nlc3Npb246bSxzZXNzaW9uTWFuYWdlcjpB'@;
put 'fT1fZSx7c3RhdGVVcmw6YWUsZXRhZzp0ZSxpZDpzZX09bSx7YWNjZXNzX3Rva2VuOndlfT1pZSx7aWQ6VWV9PVkse3Jlc3VsdDpKZSxyZXNwb25zZVN0YXR1czpvdH09eWllbGQgQS5nZXRTZXNzaW9uU3RhdGUoYWUsdGUsd2UpLmNhdGNoKHZlPT57dGhyb3cgbmV3IHcuSm9iU3RhdGVQb2xs'@;
put 'RXJyb3IoVWUsdmUpfSkseGU9dmU9PltQLlNlc3Npb25TdGF0ZS5SdW5uaW5nLFAuU2Vzc2lvblN0YXRlLklkbGVdLmluY2x1ZGVzKHZlKTtpZigheGUoSmUpfHwyMDAhPT1vdCl7QS5jbGVhclNlc3Npb24oc2Usd2UpO2NvbnN0IHZlPXhlKEplKT9gU2Vzc2lvbiByZXNwb25zZSBzdGF0dXMg'@;
put 'aXMgbm90IDIwMC4gU2Vzc2lvbiByZXNwb25zZSBzdGF0dXMgaXMgJHtvdH0uYDpgU2Vzc2lvbiBzdGF0ZSBvZiB0aGUgam9iIGlzIG5vdCAncnVubmluZycgb3IgJ2lkbGUnLiBTZXNzaW9uIHN0YXRlIGlzICcke0plfSdgO3Rocm93IG5ldyB3LkpvYlN0YXRlUG9sbEVycm9yKFVlLG5ldyBF'@;
put 'cnJvcih2ZSkpfX1UPXlpZWxkIE4oVyxZLFQsZWUsaWUpLmNhdGNoKG09PntpZihDKyssSj49amV8fEM+PTUpdGhyb3cgbTtyZXR1cm4gcC5lcnJvcihgRXJyb3IgZmV0Y2hpbmcgam9iIHN0YXRlIGZyb20gJHtiLmhyZWZ9LiBSZXN1bWluZyBwb2xsLCBhc3N1bWluZyBqb2IgdG8gYmUgcnVu'@;
put 'bmluZy5gLG0pLE8uVW5hdmFpbGFibGV9KSxKKys7Y29uc3QgRT1ZLmxpbmtzLmZpbmQobT0+InNlbGYiPT09bS5yZWwpLmhyZWY7aWYobGUpe2NvbnN0e3Jlc3VsdDptfT15aWVsZCBXLmdldChFLGllPy5hY2Nlc3NfdG9rZW4pLEE9bnVsbCE9PShTZT1udWxsPT09KFRlPW0ubG9nU3RhdGlz'@;
put 'dGljcyl8fHZvaWQgMD09PVRlP3ZvaWQgMDpUZS5saW5lQ291bnQpJiZ2b2lkIDAhPT1TZT9TZToxZTYse3NhdmVMb2c6YWV9PSgwLEYuaXNOb2RlKSgpP3koMjA4MCk6e3NhdmVMb2c6bnVsbH07YWUmJih5aWVsZCBhZShZLFcsaixBLG1lLGllPy5hY2Nlc3NfdG9rZW4pKSxqKz1BfWVlJiZI'@;
put 'IT09VCYmKHAuaW5mbyhgUG9sbGluZzogJHtXLmdldEJhc2VVcmwoKStFfS9zdGF0ZWApLHAuaW5mbyhgQ3VycmVudCBqb2Igc3RhdGU6ICR7VH1gKSxIPVQpLFQhPT1PLlVuYXZhaWxhYmxlJiZDPjAmJihDPTApLFQhPT1PLkNvbXBsZXRlZCYmKHlpZWxkKDAsRi5kZWxheSkoVikpfXJldHVy'@;
put 'bntzdGF0ZTpULHBvbGxDb3VudDpKfX0pO2NvbnN0IFU9Vz0+e2NvbnN0IFk9KHEsZWUpPT57dGhyb3cgbmV3IEVycm9yKGBQb2xsIHN0cmF0ZWdpZXMgYXJlIG5vdCB2YWxpZC4ke3E/YCAke3F9YDoiIn0ke2VlP2AgSW52YWxpZCBwb2xsIHN0cmF0ZWd5OiBcbiR7SlNPTi5zdHJpbmdpZnko'@;
put 'ZWUsbnVsbCwyKX1gOiIifWApfTtXLmZvckVhY2goKHEsZWUpPT57Y29uc3R7bWF4UG9sbENvdW50OkoscG9sbEludGVydmFsOm5lfT1xO0o8MT9ZKCInbWF4UG9sbENvdW50JyBoYXMgdG8gYmUgZ3JlYXRlciB0aGFuIDAuIixxKTowIT09ZWU/Sjw9V1tlZS0xXS5tYXhQb2xsQ291bnQmJlko'@;
put 'IidtYXhQb2xsQ291bnQnIGhhcyB0byBiZSBncmVhdGVyIHRoYW4gJ21heFBvbGxDb3VudCcgaW4gcHJldmlvdXMgcG9sbCBzdHJhdGVneS4iLHEpOm5lPDEmJlkoIidwb2xsSW50ZXJ2YWwnIGhhcyB0byBiZSBncmVhdGVyIHRoYW4gMC4iLHEpfSl9fSwyMDgwOmZ1bmN0aW9uKHVlLFgseSl7'@;
put 'InVzZSBzdHJpY3QiO3ZhciBJPXkoNDE1NSksXz15KDUxMDgpLGc9dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKEYsTyx6LE4pe3JldHVybiBuZXcoenx8KHo9UHJvbWlzZSkpKGZ1bmN0aW9uKEssVSl7ZnVuY3Rpb24gVyhlZSl7dHJ5e3EoTi5uZXh0KGVlKSl9Y2F0Y2goSil7VShK'@;
put 'KX19ZnVuY3Rpb24gWShlZSl7dHJ5e3EoTi50aHJvdyhlZSkpfWNhdGNoKEope1UoSil9fWZ1bmN0aW9uIHEoZWUpe2VlLmRvbmU/SyhlZS52YWx1ZSk6ZnVuY3Rpb24gTChLKXtyZXR1cm4gSyBpbnN0YW5jZW9mIHo/SzpuZXcgeihmdW5jdGlvbihVKXtVKEspfSl9KGVlLnZhbHVlKS50aGVu'@;
put 'KFcsWSl9cSgoTj1OLmFwcGx5KEYsT3x8W10pKS5uZXh0KCkpfSl9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLnNhdmVMb2c9dm9pZCAwO2NvbnN0IEI9eSg1OTI4KSx3PXkoNjEzMSk7WC5zYXZlTG9nPWZ1bmN0aW9uIFAoRixPLHosTixMLEsp'@;
put 'e3JldHVybiBnKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtpZighSyl0aHJvdyBuZXcgRXJyb3IoYExvZ3MgZm9yIGpvYiAke0YuaWR9IGNhbm5vdCBiZSBmZXRjaGVkIHdpdGhvdXQgYSB2YWxpZCBhY2Nlc3MgdG9rZW4uYCk7aWYoIUwpdGhyb3cgbmV3IEVycm9yKGBMb2dzIGZv'@;
put 'ciBqb2IgJHtGLmlkfSBjYW5ub3QgYmUgd3JpdHRlbiB3aXRob3V0IGEgdmFsaWQgd3JpdGUgc3RyZWFtLmApO2NvbnN0IFU9SS5sb2dnZXJ8fF8sVz1GLmxpbmtzLmZpbmQocT0+ImxvZyI9PT1xLnJlbCk7aWYoIVcpdGhyb3cgbmV3IEVycm9yKGBMb2cgVVJMIGZvciBqb2IgJHtGLmlkfSB3'@;
put 'YXMgbm90IGZvdW5kLmApO2NvbnN0IFk9eWllbGQoMCxCLmZldGNoTG9nKShPLEssYCR7Vy5ocmVmfS9jb250ZW50YCx6LE4pO1UuaW5mbyhgV3JpdGluZyBsb2dzIHRvICR7TC5wYXRofWApLHlpZWxkKDAsdy53cml0ZVN0cmVhbSkoTCxZfHwiIil9KX19LDY0OTY6ZnVuY3Rpb24odWUsWCx5'@;
put 'KXsidXNlIHN0cmljdCI7dmFyIEk9dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKHcsUCxGLE8pe3JldHVybiBuZXcoRnx8KEY9UHJvbWlzZSkpKGZ1bmN0aW9uKE4sTCl7ZnVuY3Rpb24gSyhZKXt0cnl7VyhPLm5leHQoWSkpfWNhdGNoKHEpe0wocSl9fWZ1bmN0aW9uIFUoWSl7dHJ5'@;
put 'e1coTy50aHJvdyhZKSl9Y2F0Y2gocSl7TChxKX19ZnVuY3Rpb24gVyhZKXtZLmRvbmU/TihZLnZhbHVlKTpmdW5jdGlvbiB6KE4pe3JldHVybiBOIGluc3RhbmNlb2YgRj9OOm5ldyBGKGZ1bmN0aW9uKEwpe0woTil9KX0oWS52YWx1ZSkudGhlbihLLFUpfVcoKE89Ty5hcHBseSh3LFB8fFtd'@;
put 'KSkubmV4dCgpKX0pfTtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksWC51cGxvYWRUYWJsZXM9dm9pZCAwO2NvbnN0IF89eSg5Nzc4KSxnPXkoMjQwMik7WC51cGxvYWRUYWJsZXM9ZnVuY3Rpb24gQih3LFAsRil7cmV0dXJuIEkodGhpcyx2b2lkIDAs'@;
put 'dm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0IE89W107Zm9yKGNvbnN0IHogaW4gUCl7Y29uc3QgTj0oMCxnLmNvbnZlcnRUb0NTVikoUCx6KTtpZigiRVJST1I6IExBUkdFIFNUUklORyBMRU5HVEgiPT09Til0aHJvdyBuZXcgRXJyb3IoIlRoZSBtYXggbGVuZ3RoIG9mIGEgc3RyaW5nIHZhbHVl'@;
put 'IGluIFNBU2pzIGlzIDMyNzY1IGNoYXJhY3RlcnMuIik7Y29uc3QgTD15aWVsZCB3LnVwbG9hZEZpbGUoIi9maWxlcy9maWxlcyNyYXdVcGxvYWQiLE4sRikuY2F0Y2goSz0+e3Rocm93KDAsXy5wcmVmaXhNZXNzYWdlKShLLCJFcnJvciB3aGlsZSB1cGxvYWRpbmcgZmlsZS4gIil9KTtPLnB1'@;
put 'c2goe3RhYmxlTmFtZTp6LGZpbGU6TC5yZXN1bHR9KX1yZXR1cm4gT30pfX0sNjEzMTpmdW5jdGlvbih1ZSxYKXsidXNlIHN0cmljdCI7dmFyIHk9dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKF8sZyxCLHcpe3JldHVybiBuZXcoQnx8KEI9UHJvbWlzZSkpKGZ1bmN0aW9uKEYsTyl7'@;
put 'ZnVuY3Rpb24geihLKXt0cnl7TCh3Lm5leHQoSykpfWNhdGNoKFUpe08oVSl9fWZ1bmN0aW9uIE4oSyl7dHJ5e0wody50aHJvdyhLKSl9Y2F0Y2goVSl7TyhVKX19ZnVuY3Rpb24gTChLKXtLLmRvbmU/RihLLnZhbHVlKTpmdW5jdGlvbiBQKEYpe3JldHVybiBGIGluc3RhbmNlb2YgQj9GOm5l'@;
put 'dyBCKGZ1bmN0aW9uKE8pe08oRil9KX0oSy52YWx1ZSkudGhlbih6LE4pfUwoKHc9dy5hcHBseShfLGd8fFtdKSkubmV4dCgpKX0pfTtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksWC53cml0ZVN0cmVhbT12b2lkIDAsWC53cml0ZVN0cmVhbT0oXyxn'@;
put 'KT0+eSh2b2lkIDAsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4gbmV3IFByb21pc2UoKEIsdyk9PntfLndyaXRlKGcrIlxuIixQPT57UD93KFApOkIoITApfSl9KX0pfSwyODUxOmZ1bmN0aW9uKHVlLFgseSl7InVzZSBzdHJpY3QiO3ZhciBJPXkoNTEwOCksXz15KDQxNTUpLGc9'@;
put 'dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKFcsWSxxLGVlKXtyZXR1cm4gbmV3KHF8fChxPVByb21pc2UpKShmdW5jdGlvbihuZSxpZSl7ZnVuY3Rpb24gbGUoVGUpe3RyeXtfZShlZS5uZXh0KFRlKSl9Y2F0Y2goU2Upe2llKFNlKX19ZnVuY3Rpb24gbWUoVGUpe3RyeXtfZShlZS50'@;
put 'aHJvdyhUZSkpfWNhdGNoKFNlKXtpZShTZSl9fWZ1bmN0aW9uIF9lKFRlKXtUZS5kb25lP25lKFRlLnZhbHVlKTpmdW5jdGlvbiBKKG5lKXtyZXR1cm4gbmUgaW5zdGFuY2VvZiBxP25lOm5ldyBxKGZ1bmN0aW9uKGllKXtpZShuZSl9KX0oVGUudmFsdWUpLnRoZW4obGUsbWUpfV9lKChlZT1l'@;
put 'ZS5hcHBseShXLFl8fFtdKSkubmV4dCgpKX0pfTtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksWC5BdXRoTWFuYWdlcj12b2lkIDA7Y29uc3QgQj15KDM5MDApLHc9eSgxMzk1KSxQPXkoNTkyOCksRj15KDExNzApLE89eSg1NDE4KSx6PXkoNDU4Miks'@;
put 'Tj15KDY1NDcpLEw9eSgxNTI3KTtYLkF1dGhNYW5hZ2VyPWNsYXNzIEt7Y29uc3RydWN0b3IoWSxxLGVlLEope3RoaXMuc2VydmVyVXJsPVksdGhpcy5zZXJ2ZXJUeXBlPXEsdGhpcy5yZXF1ZXN0Q2xpZW50PWVlLHRoaXMubG9naW5DYWxsYmFjaz1KLHRoaXMudXNlck5hbWU9IiIsdGhpcy51'@;
put 'c2VyTG9uZ05hbWU9IiIsdGhpcy5yZWRpcmVjdGVkTG9naW5Vcmw9Ii9TQVNMb2dvbiIsdGhpcy5leHRyYWN0VXNlck5hbWU9bmU9Pntzd2l0Y2godGhpcy5zZXJ2ZXJUeXBlKXtjYXNlIEIuU2VydmVyVHlwZS5TYXNWaXlhOnJldHVybiBuZT8uaWQ7Y2FzZSBCLlNlcnZlclR5cGUuU2FzOTpy'@;
put 'ZXR1cm4iIjtjYXNlIEIuU2VydmVyVHlwZS5TYXNqczpyZXR1cm4gbmU/LnVzZXJuYW1lO2RlZmF1bHQ6cmV0dXJuIEkuZXJyb3IoIlNlcnZlciBUeXBlIG5vdCBmb3VuZCBpbiBleHRyYWN0VXNlck5hbWUgZnVuY3Rpb24iKSwiIn19LHRoaXMuZXh0cmFjdFVzZXJMb25nTmFtZT1uZT0+e3N3'@;
put 'aXRjaCh0aGlzLnNlcnZlclR5cGUpe2Nhc2UgQi5TZXJ2ZXJUeXBlLlNhc1ZpeWE6cmV0dXJuIG5lPy5uYW1lO2Nhc2UgQi5TZXJ2ZXJUeXBlLlNhczk6cmV0dXJuKDAsRi5leHRyYWN0VXNlckxvbmdOYW1lU2FzOSkobmUpO2Nhc2UgQi5TZXJ2ZXJUeXBlLlNhc2pzOnJldHVybiBuZT8uZGlz'@;
put 'cGxheU5hbWU7ZGVmYXVsdDpyZXR1cm4gSS5lcnJvcigiU2VydmVyIFR5cGUgbm90IGZvdW5kIGluIGV4dHJhY3RVc2VyTmFtZSBmdW5jdGlvbiIpLCIifX0sdGhpcy5zZXRMb2dpblVybD1uZT0+e2xldCBpZT1uZVsxXS5yZXBsYWNlKC9cPy4qLywiIik7aWYoIi8iPT09aWVbMF0pe2llPWll'@;
put 'LnN1YnN0cigxKTtjb25zdCBsZT10aGlzLnNlcnZlclVybD9gJHt0aGlzLnNlcnZlclVybH0vJHtpZX1gOmAke2llfWA7dGhpcy5sb2dpblVybD10aGlzLnNlcnZlclR5cGU9PT1CLlNlcnZlclR5cGUuU2FzVml5YT9sZTpsZS5yZXBsYWNlKCIvU0FTTG9nb24vbG9naW4uZG8iLCIvU0FTTG9n'@;
put 'b24vbG9naW4iKX19LHRoaXMubG9naW5Vcmw9Ii9TQVNMb2dvbi9sb2dpbiIsdGhpcy5sb2dvdXRVcmw9dGhpcy5zZXJ2ZXJUeXBlPT09Qi5TZXJ2ZXJUeXBlLlNhczk/Ii9TQVNMb2dvbi9sb2dvdXQ/Ijp0aGlzLnNlcnZlclR5cGU9PT1CLlNlcnZlclR5cGUuU2FzVml5YT8iL1NBU0xvZ29u'@;
put 'L2xvZ291dC5kbz8iOiIvU0FTTG9nb24vbG9nb3V0Iix0aGlzLnJlZGlyZWN0ZWRMb2dpblVybD10aGlzLnNlcnZlclVybCt0aGlzLnJlZGlyZWN0ZWRMb2dpblVybH1yZWRpcmVjdGVkTG9nSW4oe29uTG9nZ2VkT3V0Oll9KXtyZXR1cm4gZyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24q'@;
put 'KCl7Y29uc3R7aXNMb2dnZWRJbjpxLHVzZXJOYW1lOmVlLHVzZXJMb25nTmFtZTpKfT15aWVsZCB0aGlzLmZldGNoVXNlck5hbWUoKTtpZihxKXJldHVybihfLmxvZ2dlcnx8SSkubG9nKCJsb2dpbiB3YXMgbm90IGF0dGVtcHRlZCBhcyBhIHZhbGlkIHNlc3Npb24gYWxyZWFkeSBleGlzdHMi'@;
put 'KSx5aWVsZCB0aGlzLmxvZ2luQ2FsbGJhY2soKSx7aXNMb2dnZWRJbjohMCx1c2VyTmFtZTplZSx1c2VyTG9uZ05hbWU6Sn07Y29uc3QgbmU9eWllbGQoMCxPLm9wZW5XZWJQYWdlKSh0aGlzLnJlZGlyZWN0ZWRMb2dpblVybCwiU0FTTG9nb24iLHt3aWR0aDo1MDAsaGVpZ2h0OjYwMH0sWSk7'@;
put 'aWYoIW5lKXJldHVybntpc0xvZ2dlZEluOiExLHVzZXJOYW1lOiIiLHVzZXJMb25nTmFtZToiIn07Y29uc3R7aXNMb2dnZWRJbjppZX09dGhpcy5zZXJ2ZXJUeXBlPT09Qi5TZXJ2ZXJUeXBlLlNhc1ZpeWE/eWllbGQoMCxOLnZlcmlmeVNhc1ZpeWFMb2dpbikobmUpOnlpZWxkKDAsei52ZXJp'@;
put 'ZnlTYXM5TG9naW4pKG5lKTtpZihuZS5jbG9zZSgpLGllKXt0aGlzLnNlcnZlclR5cGU9PT1CLlNlcnZlclR5cGUuU2FzOSYmKHlpZWxkIHRoaXMucGVyZm9ybUNBU1NlY3VyaXR5Q2hlY2soKSk7Y29uc3R7dXNlck5hbWU6bGUsdXNlckxvbmdOYW1lOm1lfT15aWVsZCB0aGlzLmZldGNoVXNl'@;
put 'ck5hbWUoKTtyZXR1cm4geWllbGQgdGhpcy5sb2dpbkNhbGxiYWNrKCkse2lzTG9nZ2VkSW46ITAsdXNlck5hbWU6bGUsdXNlckxvbmdOYW1lOm1lfX1yZXR1cm57aXNMb2dnZWRJbjohMSx1c2VyTmFtZToiIix1c2VyTG9uZ05hbWU6IiJ9fSl9bG9nSW4oWSxxKXtyZXR1cm4gZyh0aGlzLHZv'@;
put 'aWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3QgZWU9e19zZXJ2aWNlOiJkZWZhdWx0Iix1c2VybmFtZTpZLHBhc3N3b3JkOnF9O3RoaXMudXNlck5hbWU9IiIsdGhpcy51c2VyTG9uZ05hbWU9IiI7bGV0e2lzTG9nZ2VkSW46Sixsb2dpbkZvcm06bmUsdXNlckxvbmdOYW1lOmllfT15aWVs'@;
put 'ZCB0aGlzLmNoZWNrU2Vzc2lvbigpO2lmKEopcmV0dXJuKF8ubG9nZ2VyfHxJKS5sb2coImxvZ2luIHdhcyBub3QgYXR0ZW1wdGVkIGFzIGEgdmFsaWQgc2Vzc2lvbiBhbHJlYWR5IGV4aXN0cyIpLHlpZWxkIHRoaXMubG9naW5DYWxsYmFjaygpLHRoaXMudXNlck5hbWU9ZWUudXNlcm5hbWUs'@;
put 'dGhpcy51c2VyTG9uZ05hbWU9aWUse2lzTG9nZ2VkSW46ITAsdXNlck5hbWU6dGhpcy51c2VyTmFtZSx1c2VyTG9uZ05hbWU6dGhpcy51c2VyTG9uZ05hbWV9O2xldCBsZT15aWVsZCB0aGlzLnNlbmRMb2dpblJlcXVlc3QobmUsZWUpLG1lPSgwLEwuaXNMb2dJblN1Y2Nlc3NIZWFkZXJQcmVz'@;
put 'ZW50KSh0aGlzLnNlcnZlclR5cGUsbGUpO2lmKCFtZSl7aWYoVShsZSkpe2NvbnN0IFRlPXlpZWxkIHRoaXMuZ2V0TG9naW5Gb3JtKGxlKTtsZT15aWVsZCB0aGlzLnNlbmRMb2dpblJlcXVlc3QoVGUsZWUpfWNvbnN0IF9lPXlpZWxkIHRoaXMuY2hlY2tTZXNzaW9uKCk7bWU9X2UuaXNMb2dn'@;
put 'ZWRJbix0aGlzLnVzZXJMb25nTmFtZT1fZS51c2VyTG9uZ05hbWV9cmV0dXJuIG1lJiYodGhpcy5zZXJ2ZXJUeXBlPT09Qi5TZXJ2ZXJUeXBlLlNhczkmJih5aWVsZCB0aGlzLnBlcmZvcm1DQVNTZWN1cml0eUNoZWNrKCkpLHRoaXMubG9naW5DYWxsYmFjaygpLHRoaXMudXNlck5hbWU9ZWUu'@;
put 'dXNlcm5hbWUpLHtpc0xvZ2dlZEluOm1lLHVzZXJOYW1lOnRoaXMudXNlck5hbWUsdXNlckxvbmdOYW1lOnRoaXMudXNlckxvbmdOYW1lfX0pfXBlcmZvcm1DQVNTZWN1cml0eUNoZWNrKCl7cmV0dXJuIGcodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0IFk9YCR7dGhpcy5z'@;
put 'ZXJ2ZXJVcmx9L1NBU1N0b3JlZFByb2Nlc3Mval9zcHJpbmdfY2FzX3NlY3VyaXR5X2NoZWNrYDt5aWVsZCB0aGlzLnJlcXVlc3RDbGllbnQuZ2V0KGAvU0FTTG9nb24vbG9naW4/c2VydmljZT0ke1l9YCx2b2lkIDApLmNhdGNoKHE9PntpZighKHEgaW5zdGFuY2VvZiB3Lk5vdEZvdW5kRXJy'@;
put 'b3IpKXRocm93IHF9KX0pfXNlbmRMb2dpblJlcXVlc3QoWSxxKXtyZXR1cm4gZyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7aWYodGhpcy5zZXJ2ZXJUeXBlPT09Qi5TZXJ2ZXJUeXBlLlNhc2pzKXtjb25zdHt1c2VybmFtZTpuZSxwYXNzd29yZDppZX09cSx7cmVzdWx0OmxlfT15'@;
put 'aWVsZCB0aGlzLnJlcXVlc3RDbGllbnQucG9zdCh0aGlzLmxvZ2luVXJsLHt1c2VybmFtZTpuZSxwYXNzd29yZDppZX0sdm9pZCAwKTtyZXR1cm4gbGV9Zm9yKGNvbnN0IG5lIGluIFkpcVtuZV09WVtuZV07Y29uc3QgZWU9KDAsUC5zZXJpYWxpemUpKHEpLHtyZXN1bHQ6Sn09eWllbGQgdGhp'@;
put 'cy5yZXF1ZXN0Q2xpZW50LnBvc3QodGhpcy5sb2dpblVybCxlZSx2b2lkIDAsInRleHQvcGxhaW4iLHsiQ29udGVudC1UeXBlIjoiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIixBY2NlcHQ6IiovKiJ9KTtyZXR1cm4gSn0pfWNoZWNrU2Vzc2lvbigpe3JldHVybiBnKHRoaXMs'@;
put 'dm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdHtpc0xvZ2dlZEluOlksdXNlck5hbWU6cSx1c2VyTG9uZ05hbWU6ZWV9PXlpZWxkIHRoaXMuZmV0Y2hVc2VyTmFtZSgpO2xldCBKPW51bGw7cmV0dXJuIFl8fCh5aWVsZCB0aGlzLmxvZ091dCgpLEo9eWllbGQgdGhpcy5nZXROZXdMb2dp'@;
put 'bkZvcm0oKSksUHJvbWlzZS5yZXNvbHZlKHtpc0xvZ2dlZEluOlksdXNlck5hbWU6cSx1c2VyTG9uZ05hbWU6ZWUsbG9naW5Gb3JtOkp9KX0pfWdldE5ld0xvZ2luRm9ybSgpe3JldHVybiBnKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtpZih0aGlzLnNlcnZlclR5cGU9PT1CLlNl'@;
put 'cnZlclR5cGUuU2FzanMpcmV0dXJuIHRoaXMucmVxdWVzdENsaWVudC5nZXQoIi8iLHZvaWQgMCkudGhlbigoe3Jlc3VsdDpxfSk9Pnt2YXIgZWU7Y29uc3QgSj1udWxsPT09KGVlPS88c2NyaXB0PmRvY3VtZW50LmNvb2tpZSA9ICcoWFNSRi1UT0tFTj0uKjsgTWF4LUFnZT04NjQwMDsgU2Ft'@;
put 'ZVNpdGU9U3RyaWN0OyBQYXRoPVwvOyknPFwvc2NyaXB0Pi8uZXhlYyhxKSl8fHZvaWQgMD09PWVlP3ZvaWQgMDplZVsxXTtKJiYoZG9jdW1lbnQuY29va2llPUopfSk7Y29uc3R7cmVzdWx0Oll9PXlpZWxkIHRoaXMucmVxdWVzdENsaWVudC5nZXQodGhpcy5sb2dpblVybC5yZXBsYWNlKCIv'@;
put 'U0FTTG9nb24vbG9naW4uZG8iLCIvU0FTTG9nb24vbG9naW4iKSx2b2lkIDAsInRleHQvcGxhaW4iKTtyZXR1cm4geWllbGQgdGhpcy5nZXRMb2dpbkZvcm0oWSl9KX1mZXRjaFVzZXJOYW1lKCl7cmV0dXJuIGcodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0IFk9dGhpcy5z'@;
put 'ZXJ2ZXJUeXBlPT09Qi5TZXJ2ZXJUeXBlLlNhc1ZpeWE/YCR7dGhpcy5zZXJ2ZXJVcmx9L2lkZW50aXRpZXMvdXNlcnMvQGN1cnJlbnRVc2VyYDp0aGlzLnNlcnZlclR5cGU9PT1CLlNlcnZlclR5cGUuU2FzOT9gJHt0aGlzLnNlcnZlclVybH0vU0FTU3RvcmVkUHJvY2Vzc2A6YCR7dGhpcy5z'@;
put 'ZXJ2ZXJVcmx9L1NBU2pzQXBpL3Nlc3Npb25gLHtyZXN1bHQ6cX09eWllbGQgdGhpcy5yZXF1ZXN0Q2xpZW50LmdldChZLHZvaWQgMCwidGV4dC9wbGFpbiIpLmNhdGNoKEo9Pih7cmVzdWx0OiJhdXRoRXJyIn0pKSxlZT0iYXV0aEVyciIhPT1xO3JldHVybiBlZT97aXNMb2dnZWRJbjplZSx1'@;
put 'c2VyTmFtZTp0aGlzLmV4dHJhY3RVc2VyTmFtZShxKSx1c2VyTG9uZ05hbWU6dGhpcy5leHRyYWN0VXNlckxvbmdOYW1lKHEpfTooeWllbGQgdGhpcy5sb2dPdXQoKSx7aXNMb2dnZWRJbjplZSx1c2VyTmFtZToiIix1c2VyTG9uZ05hbWU6IiJ9KX0pfWdldExvZ2luRm9ybShZKXtjb25zdCBl'@;
put 'ZT0vPGZvcm0uK2FjdGlvbj0iKC4qKExvZ29ufGxvZ2luKVteIl0qKS4qPi8uZXhlYyhZKSxKPXt9O2lmKGVlJiZlZS5sZW5ndGgpe3RoaXMuc2V0TG9naW5VcmwoZWUpO2NvbnN0IG5lPShZPVkucmVwbGFjZSgvPGlucHV0L2csIlxuPGlucHV0IikpLm1hdGNoKC88aW5wdXQuKiJoaWRkZW4i'@;
put 'W14+XSo+L2cpO25lJiZuZS5mb3JFYWNoKGllPT57Y29uc3QgbGU9aWUubWF0Y2goL25hbWU9IihbXiJdKikiXHN2YWx1ZT0iKFteIl0qKS8pO2xlJiZsZS5sZW5ndGgmJihKW2xlWzFdXT1sZVsyXSl9KX1yZXR1cm4gT2JqZWN0LmtleXMoSikubGVuZ3RoP0o6bnVsbH1sb2dPdXQoKXtyZXR1'@;
put 'cm4gZyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMucmVxdWVzdENsaWVudC5jbGVhckNzcmZUb2tlbnMoKSx0aGlzLnJlcXVlc3RDbGllbnQuZ2V0KHRoaXMubG9nb3V0VXJsLHZvaWQgMCkudGhlbigoKT0+ITApfSl9fTtjb25zdCBVPVc9Pi9BbiBlcnJvciBv'@;
put 'Y2N1cnJlZCB3aGlsZSB0aGUgc3lzdGVtIHdhcyB2ZXJpZnlpbmcgeW91ciBjcmVkZW50aWFscy4gUGxlYXNlIGVudGVyIHlvdXIgY3JlZGVudGlhbHMgYWdhaW4uL2dtLnRlc3QoVyl9LDU3OmZ1bmN0aW9uKHVlLFgseSl7InVzZSBzdHJpY3QiO3ZhciBJPXRoaXMmJnRoaXMuX19hd2FpdGVy'@;
put 'fHxmdW5jdGlvbihQLEYsTyx6KXtyZXR1cm4gbmV3KE98fChPPVByb21pc2UpKShmdW5jdGlvbihMLEspe2Z1bmN0aW9uIFUocSl7dHJ5e1koei5uZXh0KHEpKX1jYXRjaChlZSl7SyhlZSl9fWZ1bmN0aW9uIFcocSl7dHJ5e1koei50aHJvdyhxKSl9Y2F0Y2goZWUpe0soZWUpfX1mdW5jdGlv'@;
put 'biBZKHEpe3EuZG9uZT9MKHEudmFsdWUpOmZ1bmN0aW9uIE4oTCl7cmV0dXJuIEwgaW5zdGFuY2VvZiBPP0w6bmV3IE8oZnVuY3Rpb24oSyl7SyhMKX0pfShxLnZhbHVlKS50aGVuKFUsVyl9WSgoej16LmFwcGx5KFAsRnx8W10pKS5uZXh0KCkpfSl9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShY'@;
put 'LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLmdldEFjY2Vzc1Rva2VuRm9yU2FzanM9dm9pZCAwO2NvbnN0IF89eSg5Nzc4KSxnPXkoOTAxNyksQj15KDM5MDApO1guZ2V0QWNjZXNzVG9rZW5Gb3JTYXNqcz1mdW5jdGlvbiB3KFAsRixPKXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAs'@;
put 'ZnVuY3Rpb24qKCl7Y29uc3Qgej0iL1NBU2pzQXBpL2F1dGgvdG9rZW4iLE49e2NsaWVudElkOkYsY29kZTpPfTtyZXR1cm4geWllbGQgUC5wb3N0KHosTix2b2lkIDApLnRoZW4oTD0+e2NvbnN0IEs9TC5yZXN1bHQ7cmV0dXJue2FjY2Vzc190b2tlbjpLLmFjY2Vzc1Rva2VuLHJlZnJlc2hf'@;
put 'dG9rZW46Sy5yZWZyZXNoVG9rZW59fSkuY2F0Y2goTD0+e3Rocm93KDAsXy5wcmVmaXhNZXNzYWdlKShMLCgwLGcuZ2V0VG9rZW5SZXF1ZXN0RXJyb3JQcmVmaXgpKCJmZXRjaGluZyBhY2Nlc3MgdG9rZW4iLCJnZXRBY2Nlc3NUb2tlbkZvclNhc2pzIixCLlNlcnZlclR5cGUuU2FzanMseixO'@;
put 'LEYpKX0pfSl9fSwzNTY5OmZ1bmN0aW9uKHVlLFgseSl7InVzZSBzdHJpY3QiO3ZhciBJPXkoODc2NCkuQnVmZmVyLF89dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKE8seixOLEwpe3JldHVybiBuZXcoTnx8KE49UHJvbWlzZSkpKGZ1bmN0aW9uKFUsVyl7ZnVuY3Rpb24gWShKKXt0'@;
put 'cnl7ZWUoTC5uZXh0KEopKX1jYXRjaChuZSl7VyhuZSl9fWZ1bmN0aW9uIHEoSil7dHJ5e2VlKEwudGhyb3coSikpfWNhdGNoKG5lKXtXKG5lKX19ZnVuY3Rpb24gZWUoSil7Si5kb25lP1UoSi52YWx1ZSk6ZnVuY3Rpb24gSyhVKXtyZXR1cm4gVSBpbnN0YW5jZW9mIE4/VTpuZXcgTihmdW5j'@;
put 'dGlvbihXKXtXKFUpfSl9KEoudmFsdWUpLnRoZW4oWSxxKX1lZSgoTD1MLmFwcGx5KE8senx8W10pKS5uZXh0KCkpfSl9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLmdldEFjY2Vzc1Rva2VuRm9yVml5YT12b2lkIDA7Y29uc3QgZz15KDM5MDAp'@;
put 'LEI9eSg5Nzc4KSx3PXkoMTM5NSksUD15KDkwMTcpO1guZ2V0QWNjZXNzVG9rZW5Gb3JWaXlhPWZ1bmN0aW9uIEYoTyx6LE4sTCl7cmV0dXJuIF8odGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2xldCBLO0s9dHlwZW9mIEk+InUiP2J0b2EoeisiOiIrTik6SS5mcm9tKHorIjoiK04p'@;
put 'LnRvU3RyaW5nKCJiYXNlNjQiKTtjb25zdCBVPSIvU0FTTG9nb24vb2F1dGgvdG9rZW4iLFc9e0F1dGhvcml6YXRpb246IkJhc2ljICIrSyxBY2NlcHQ6ImFwcGxpY2F0aW9uL2pzb24ifSxZPW5ldyBVUkxTZWFyY2hQYXJhbXMoe2dyYW50X3R5cGU6ImF1dGhvcml6YXRpb25fY29kZSIsY29k'@;
put 'ZTpMfSkscT1uZXcgVVJMU2VhcmNoUGFyYW1zKFkpO3JldHVybiB5aWVsZCBPLnBvc3QoVSxxLHZvaWQgMCwiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIixXKS50aGVuKEo9PkoucmVzdWx0KS5jYXRjaChKPT57dGhyb3cgSiBpbnN0YW5jZW9mIHcuQ2VydGlmaWNhdGVFcnJv'@;
put 'cj9KOigwLEIucHJlZml4TWVzc2FnZSkoSiwoMCxQLmdldFRva2VuUmVxdWVzdEVycm9yUHJlZml4KSgiZmV0Y2hpbmcgYWNjZXNzIHRva2VuIiwiZ2V0QWNjZXNzVG9rZW5Gb3JWaXlhIixnLlNlcnZlclR5cGUuU2FzVml5YSxVLFksVyx6LE4pKX0pfSl9fSw5MDE3Oih1ZSxYLHkpPT57InVz'@;
put 'ZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLmdldFRva2VuUmVxdWVzdEVycm9yUHJlZml4UmVzcG9uc2U9WC5nZXRUb2tlblJlcXVlc3RFcnJvclByZWZpeD12b2lkIDA7Y29uc3QgST15KDM5MDApLGc9UD0+YFJlc3BvbnNlIGZy'@;
put 'b20gJHsoUD0+UD09PUkuU2VydmVyVHlwZS5TYXNWaXlhPyJWaXlhIjoiU2FzanMiKShQKX0gaXMgYmVsb3cuYDtYLmdldFRva2VuUmVxdWVzdEVycm9yUHJlZml4PShQLEYsTyx6LE4sTCxLLFUpPT57Y29uc3QgVz1xPT5KU09OLnN0cmluZ2lmeShxLG51bGwsMiksWT1bYEVycm9yIHdoaWxl'@;
put 'ICR7UH0gZnJvbSAke3p9YCxgVGhyb3duIGJ5IHRoZSBAc2FzanMvYWRhcHRlciAke0Z9IGZ1bmN0aW9uLmBdO3JldHVybiBOJiYoWS5wdXNoKCJQYXlsb2FkOiIpLFkucHVzaChXKE4pKSksTCYmKFkucHVzaCgiSGVhZGVyczoiKSxZLnB1c2goVyhMKSkpLEsmJlkucHVzaChgQ2xpZW50SWQ6'@;
put 'ICR7S31gKSxVJiZZLnB1c2goYENsaWVudFNlY3JldDogJHtVfWApLFkucHVzaCgiIiksWS5wdXNoKGAke2coTyl9YCksWS5wdXNoKCIiKSxZLmpvaW4oIlxuIil9LFguZ2V0VG9rZW5SZXF1ZXN0RXJyb3JQcmVmaXhSZXNwb25zZT0oUCxGKT0+UC5zcGxpdChgJHtnKEYpfVxuYCkucG9wKCl9'@;
put 'LDcwNDpmdW5jdGlvbih1ZSxYLHkpeyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDQxNTUpLF89eSg1MTA4KSxnPXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbih6LE4sTCxLKXtyZXR1cm4gbmV3KEx8fChMPVByb21pc2UpKShmdW5jdGlvbihXLFkpe2Z1bmN0aW9uIHEobmUpe3RyeXtKKEsu'@;
put 'bmV4dChuZSkpfWNhdGNoKGllKXtZKGllKX19ZnVuY3Rpb24gZWUobmUpe3RyeXtKKEsudGhyb3cobmUpKX1jYXRjaChpZSl7WShpZSl9fWZ1bmN0aW9uIEoobmUpe25lLmRvbmU/VyhuZS52YWx1ZSk6ZnVuY3Rpb24gVShXKXtyZXR1cm4gVyBpbnN0YW5jZW9mIEw/VzpuZXcgTChmdW5jdGlv'@;
put 'bihZKXtZKFcpfSl9KG5lLnZhbHVlKS50aGVuKHEsZWUpfUooKEs9Sy5hcHBseSh6LE58fFtdKSkubmV4dCgpKX0pfTtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksWC5nZXRUb2tlbnM9dm9pZCAwO2NvbnN0IEI9eSg2Nzk5KSx3PXkoMzkwMCksUD15'@;
put 'KDM2NiksRj15KDI0OSk7WC5nZXRUb2tlbnM9ZnVuY3Rpb24gTyh6LE4sTD13LlNlcnZlclR5cGUuU2FzVml5YSl7cmV0dXJuIGcodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0IEs9SS5sb2dnZXJ8fF87bGV0e2FjY2Vzc190b2tlbjpVLHJlZnJlc2hfdG9rZW46VyxjbGll'@;
put 'bnQ6WSxzZWNyZXQ6cX09TjtpZigoMCxCLmlzQWNjZXNzVG9rZW5FeHBpcmluZykoVSl8fCgwLEIuaXNSZWZyZXNoVG9rZW5FeHBpcmluZykoVykpe2lmKCgwLEIuaGFzVG9rZW5FeHBpcmVkKShXKSl7Y29uc3QgSj0iVW5hYmxlIHRvIG9idGFpbiBuZXcgYWNjZXNzIHRva2VuLiBZb3VyIHJl'@;
put 'ZnJlc2ggdG9rZW4gaGFzIGV4cGlyZWQuIjt0aHJvdyBLLmVycm9yKEopLG5ldyBFcnJvcihKKX1LLmluZm8oIlJlZnJlc2hpbmcgYWNjZXNzIGFuZCByZWZyZXNoIHRva2Vucy4iKSwoe2FjY2Vzc190b2tlbjpVLHJlZnJlc2hfdG9rZW46V309TD09PXcuU2VydmVyVHlwZS5TYXNWaXlhP3lp'@;
put 'ZWxkKDAsUC5yZWZyZXNoVG9rZW5zRm9yVml5YSkoeixZLHEsVyk6eWllbGQoMCxGLnJlZnJlc2hUb2tlbnNGb3JTYXNqcykoeixXKSl9cmV0dXJue2FjY2Vzc190b2tlbjpVLHJlZnJlc2hfdG9rZW46VyxjbGllbnQ6WSxzZWNyZXQ6cX19KX19LDE1Mjc6ZnVuY3Rpb24odWUsWCx5KXsidXNl'@;
put 'IHN0cmljdCI7dmFyIEk9dGhpcyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKGcsQix3LFApe3ZvaWQgMD09PVAmJihQPXcpO3ZhciBGPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoQix3KTsoIUZ8fCgiZ2V0ImluIEY/IUIuX19lc01vZHVs'@;
put 'ZTpGLndyaXRhYmxlfHxGLmNvbmZpZ3VyYWJsZSkpJiYoRj17ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gQlt3XX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZyxQLEYpfTpmdW5jdGlvbihnLEIsdyxQKXt2b2lkIDA9PT1QJiYoUD13KSxnW1BdPUJbd119KSxfPXRoaXMm'@;
put 'JnRoaXMuX19leHBvcnRTdGFyfHxmdW5jdGlvbihnLEIpe2Zvcih2YXIgdyBpbiBnKSJkZWZhdWx0IiE9PXcmJiFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoQix3KSYmSShCLGcsdyl9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9'@;
put 'KSxfKHkoMjg1MSksWCksXyh5KDkwOTcpLFgpLF8oeSg5MTY2KSxYKSxfKHkoNjY0MyksWCl9LDkwOTc6KHVlLFgpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLmlzQXV0aG9yaXplRm9ybVJlcXVpcmVkPXZvaWQgMCxY'@;
put 'LmlzQXV0aG9yaXplRm9ybVJlcXVpcmVkPUk9Pi88Zm9ybS4rYWN0aW9uPSIoLipMb2dvblwvb2F1dGhcL2F1dGhvcml6ZVteIl0qKS4qPi9nbS50ZXN0KEkpfSw5MTY2Oih1ZSxYKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEw'@;
put 'fSksWC5pc0xvZ0luUmVxdWlyZWQ9dm9pZCAwLFguaXNMb2dJblJlcXVpcmVkPUk9Pi88Zm9ybS4rYWN0aW9uPSIoLiooTG9nb24pfChsb2dpbilbXiJdKikuKj4vZ20udGVzdChJKX0sNjY0MzoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01v'@;
put 'ZHVsZSIse3ZhbHVlOiEwfSksWC5pc0xvZ0luU3VjY2Vzc0hlYWRlclByZXNlbnQ9WC5nZXRFeHBlY3RlZExvZ0luU3VjY2Vzc0hlYWRlcj1YLmxvZ2luU3VjY2Vzc0hlYWRlcnM9WC5kZWZhdWx0U3VjY2Vzc0hlYWRlcktleT12b2lkIDA7Y29uc3QgST15KDM5MDApLF89eSg1OTI4KSxnPSJZ'@;
put 'b3UgaGF2ZSBzaWduZWQgaW4uIjtYLmRlZmF1bHRTdWNjZXNzSGVhZGVyS2V5PSJkZWZhdWx0IixYLmxvZ2luU3VjY2Vzc0hlYWRlcnM9e2VzOiJZYSBzZSBoYSBpbmljaWFkbyBsYSBzZXNpXHhmM24uIix0aDoiXHUwZTA0XHUwZTM4XHUwZTEzXHUwZTI1XHUwZTA3XHUwZTBhXHUwZTM3XHUw'@;
put 'ZTQ4XHUwZTJkXHUwZTQwXHUwZTAyXHUwZTQ5XHUwZTMyXHUwZTQzXHUwZTBhXHUwZTQ5XHUwZTQxXHUwZTI1XHUwZTQ5XHUwZTI3IixqYToiXHUzMGI1XHUzMGE0XHUzMGYzXHUzMGE0XHUzMGYzXHUzMDU3XHUzMDdlXHUzMDU3XHUzMDVmXHUzMDAyIixuYjoiRHUgaGFyIGxvZ2dldCBkZWcg'@;
put 'cFx4ZTUuIixzbDoiUHJpamF2aWxpIHN0ZSBzZS4iLGFyOiJcdTA2NDRcdTA2NDJcdTA2MmYgXHUwNjQyXHUwNjQ1XHUwNjJhICIsc2s6IlByaWhsXHhlMXNpbGkgc3RlIHNhLiIsemhfSEs6Ilx1NjBhOFx1NWRmMlx1NzY3Ylx1NTE2NVx1MzAwMiIsemhfQ046Ilx1NjBhOFx1NWRmMlx1NzY3'@;
put 'Ylx1NWY1NVx1MzAwMiIsaXQ6IkwndXRlbnRlIHNpIFx4ZTggY29ubmVzc28uIixzdjoiRHUgaGFyIGxvZ2dhdCBpbi4iLGhlOiJcdTA1ZTBcdTA1ZGJcdTA1ZTBcdTA1ZTFcdTA1ZWEgIixubDoiVSBoZWJ0IHppY2ggYWFuZ2VtZWxkLiIscGw6Ilpvc3RhXHUwMTQyZVx1MDE1YiB6YWxvZ293'@;
put 'YW55LiIsa286Ilx1Yjg1Y1x1YWRmOFx1Yzc3OFx1ZDU4OFx1YzJiNVx1YjJjOFx1YjJlNC4iLHpoX1RXOiJcdTYwYThcdTVkZjJcdTc2N2JcdTUxNjVcdTMwMDIiLHRyOiJPdHVydW0gYVx4ZTd0XHUwMTMxblx1MDEzMXouIixpdzoiXHUwNWUwXHUwNWRiXHUwNWUwXHUwNWUxXHUwNWVhICIs'@;
put 'ZnI6IlZvdXMgXHhlYXRlcyBjb25uZWN0XHhlOS4iLHVrOiJcdTA0MTJcdTA0MzggXHUwNDMyXHUwNDMyXHUwNDU2XHUwNDM5XHUwNDQ4XHUwNDNiXHUwNDM4IFx1MDQzMiBcdTA0M2VcdTA0MzFcdTA0M2JcdTA0NTZcdTA0M2FcdTA0M2VcdTA0MzJcdTA0MzhcdTA0MzkgXHUwNDM3XHUwNDMw'@;
put 'XHUwNDNmXHUwNDM4XHUwNDQxLiIscHRfQlI6IlZvY1x4ZWEgc2UgY29uZWN0b3UuIixubzoiRHUgaGFyIGxvZ2dldCBkZWcgcFx4ZTUuIixjczoiSnN0ZSBwXHUwMTU5aWhsXHhlMVx1MDE2MWVuaS4iLGZpOiJPbGV0IGtpcmphdXR1bnV0IHNpc1x4ZTRceGU0bi4iLHJ1OiJcdTA0MTJcdTA0'@;
put 'NGIgXHUwNDMyXHUwNDRiXHUwNDNmXHUwNDNlXHUwNDNiXHUwNDNkXHUwNDM4XHUwNDNiXHUwNDM4IFx1MDQzMlx1MDQ0NVx1MDQzZVx1MDQzNCBcdTA0MzIgXHUwNDQxXHUwNDM4XHUwNDQxXHUwNDQyXHUwNDM1XHUwNDNjXHUwNDQzLiIsZWw6Ilx1MDM4OFx1MDNjN1x1MDNiNVx1MDNjNFx1'@;
put 'MDNiNSBcdTAzYzNcdTAzYzVcdTAzYmRcdTAzYjRcdTAzYjVcdTAzYjhcdTAzYjVcdTAzYWYuIixocjoiUHJpamF2aWxpIHN0ZSBzZS4iLGRhOiJEdSBlciBsb2dnZXQgcFx4ZTUuIixkZToiU2llIHNpbmQgamV0enQgYW5nZW1lbGRldC4iLHNoOiJQcmlqYXZsamVuaSBzdGUuIixwdDoiSW5p'@;
put 'Y2lvdSBzZXNzXHhlM28uIixodToiQmVqZWxlbnRrZXpldHQuIixzcjoiUHJpamF2bGplbmkgc3RlLiIsZW46ZyxbWC5kZWZhdWx0U3VjY2Vzc0hlYWRlcktleV06Z30sWC5nZXRFeHBlY3RlZExvZ0luU3VjY2Vzc0hlYWRlcj0oKT0+e2xldCBQPVgubG9naW5TdWNjZXNzSGVhZGVyc1tYLmRl'@;
put 'ZmF1bHRTdWNjZXNzSGVhZGVyS2V5XTtjb25zdCBGPSgwLF8uZ2V0VXNlckxhbmd1YWdlKSgpO2lmKEYpe2xldCBPPVgubG9naW5TdWNjZXNzSGVhZGVyc1tGXTtpZihPKVA9TztlbHNle2NvbnN0IE49T2JqZWN0LmtleXMoWC5sb2dpblN1Y2Nlc3NIZWFkZXJzKS5maW5kKEw9Pm5ldyBSZWdF'@;
put 'eHAoTCwiaSIpLnRlc3QoRikpO04mJihQPVgubG9naW5TdWNjZXNzSGVhZGVyc1tOXSl9fXJldHVybiBQfSxYLmlzTG9nSW5TdWNjZXNzSGVhZGVyUHJlc2VudD0oUCxGKT0+UD09PUkuU2VydmVyVHlwZS5TYXNqcz9GPy5sb2dnZWRJbjpuZXcgUmVnRXhwKCgwLFguZ2V0RXhwZWN0ZWRMb2dJ'@;
put 'blN1Y2Nlc3NIZWFkZXIpKCksImdtIikudGVzdChGKX0sNTQxODpmdW5jdGlvbih1ZSxYLHkpeyJ1c2Ugc3RyaWN0Ijt2YXIgST10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rpb24odyxQLEYsTyl7cmV0dXJuIG5ldyhGfHwoRj1Qcm9taXNlKSkoZnVuY3Rpb24oTixMKXtmdW5jdGlvbiBL'@;
put 'KFkpe3RyeXtXKE8ubmV4dChZKSl9Y2F0Y2gocSl7TChxKX19ZnVuY3Rpb24gVShZKXt0cnl7VyhPLnRocm93KFkpKX1jYXRjaChxKXtMKHEpfX1mdW5jdGlvbiBXKFkpe1kuZG9uZT9OKFkudmFsdWUpOmZ1bmN0aW9uIHooTil7cmV0dXJuIE4gaW5zdGFuY2VvZiBGP046bmV3IEYoZnVuY3Rp'@;
put 'b24oTCl7TChOKX0pfShZLnZhbHVlKS50aGVuKEssVSl9VygoTz1PLmFwcGx5KHcsUHx8W10pKS5uZXh0KCkpfSl9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLm9wZW5XZWJQYWdlPXZvaWQgMDtjb25zdCBfPXkoMTIxMCksZz17d2lkdGg6NTAw'@;
put 'LGhlaWdodDo2MDB9O1gub3BlbldlYlBhZ2U9ZnVuY3Rpb24gQih3LFA9IiIsRj1nLE8pe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdHt3aWR0aDp6LGhlaWdodDpOfT1GLEw9c2NyZWVuLndpZHRoLzItei8yLEs9c2NyZWVuLmhlaWdodC8yLU4vMjtyZXR1'@;
put 'cm4gd2luZG93Lm9wZW4odyxQLGB0b29sYmFyPTAsbG9jYXRpb249MCxtZW51YmFyPTAsd2lkdGg9JHt6fSxoZWlnaHQ9JHtOfSxsZWZ0PSR7TH0sdG9wPSR7S31gKXx8KCh5aWVsZChPPz9fLm9wZW5Mb2dpblByb21wdCkoKSk/d2luZG93Lm9wZW4odyxQLGB0b29sYmFyPTAsbG9jYXRpb249'@;
put 'MCxtZW51YmFyPTAsd2lkdGg9JHt6fSxoZWlnaHQ9JHtOfSxsZWZ0PSR7TH0sdG9wPSR7S31gKTpudWxsKX0pfX0sMjQ5OmZ1bmN0aW9uKHVlLFgseSl7InVzZSBzdHJpY3QiO3ZhciBJPXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbihQLEYsTyx6KXtyZXR1cm4gbmV3KE98fChPPVBy'@;
put 'b21pc2UpKShmdW5jdGlvbihMLEspe2Z1bmN0aW9uIFUocSl7dHJ5e1koei5uZXh0KHEpKX1jYXRjaChlZSl7SyhlZSl9fWZ1bmN0aW9uIFcocSl7dHJ5e1koei50aHJvdyhxKSl9Y2F0Y2goZWUpe0soZWUpfX1mdW5jdGlvbiBZKHEpe3EuZG9uZT9MKHEudmFsdWUpOmZ1bmN0aW9uIE4oTCl7'@;
put 'cmV0dXJuIEwgaW5zdGFuY2VvZiBPP0w6bmV3IE8oZnVuY3Rpb24oSyl7SyhMKX0pfShxLnZhbHVlKS50aGVuKFUsVyl9WSgoej16LmFwcGx5KFAsRnx8W10pKS5uZXh0KCkpfSl9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLnJlZnJlc2hUb2tl'@;
put 'bnNGb3JTYXNqcz12b2lkIDA7Y29uc3QgXz15KDk3NzgpLGc9eSg5MDE3KSxCPXkoMzkwMCk7WC5yZWZyZXNoVG9rZW5zRm9yU2FzanM9ZnVuY3Rpb24gdyhQLEYpe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdCBPPSIvU0FTanNBcGkvYXV0aC9yZWZyZXNo'@;
put 'Iix6PXtBdXRob3JpemF0aW9uOiJCZWFyZXIgIitGfTtyZXR1cm4geWllbGQgUC5wb3N0KE8sdm9pZCAwLHZvaWQgMCx2b2lkIDAseikudGhlbihMPT57Y29uc3QgSz1MLnJlc3VsdDtyZXR1cm57YWNjZXNzX3Rva2VuOksuYWNjZXNzVG9rZW4scmVmcmVzaF90b2tlbjpLLnJlZnJlc2hUb2tl'@;
put 'bn19KS5jYXRjaChMPT57dGhyb3coMCxfLnByZWZpeE1lc3NhZ2UpKEwsKDAsZy5nZXRUb2tlblJlcXVlc3RFcnJvclByZWZpeCkoInJlZnJlc2hpbmcgdG9rZW5zIiwicmVmcmVzaFRva2Vuc0ZvclNhc2pzIixCLlNlcnZlclR5cGUuU2FzanMsTykpfSl9KX19LDM2NjpmdW5jdGlvbih1ZSxY'@;
put 'LHkpeyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDg3NjQpLkJ1ZmZlcixfPXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbihOLEwsSyxVKXtyZXR1cm4gbmV3KEt8fChLPVByb21pc2UpKShmdW5jdGlvbihZLHEpe2Z1bmN0aW9uIGVlKGllKXt0cnl7bmUoVS5uZXh0KGllKSl9Y2F0Y2gobGUp'@;
put 'e3EobGUpfX1mdW5jdGlvbiBKKGllKXt0cnl7bmUoVS50aHJvdyhpZSkpfWNhdGNoKGxlKXtxKGxlKX19ZnVuY3Rpb24gbmUoaWUpe2llLmRvbmU/WShpZS52YWx1ZSk6ZnVuY3Rpb24gVyhZKXtyZXR1cm4gWSBpbnN0YW5jZW9mIEs/WTpuZXcgSyhmdW5jdGlvbihxKXtxKFkpfSl9KGllLnZh'@;
put 'bHVlKS50aGVuKGVlLEopfW5lKChVPVUuYXBwbHkoTixMfHxbXSkpLm5leHQoKSl9KX0sZz10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oTil7cmV0dXJuIE4mJk4uX19lc01vZHVsZT9OOntkZWZhdWx0Ok59fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVs'@;
put 'ZSIse3ZhbHVlOiEwfSksWC5yZWZyZXNoVG9rZW5zRm9yVml5YT12b2lkIDA7Y29uc3QgQj15KDM5MDApLHc9eSg5Nzc4KSxQPWcoeSg2MjMwKSksRj15KDU5MjgpLE89eSg5MDE3KTtYLnJlZnJlc2hUb2tlbnNGb3JWaXlhPWZ1bmN0aW9uIHooTixMLEssVSl7cmV0dXJuIF8odGhpcyx2b2lk'@;
put 'IDAsdm9pZCAwLGZ1bmN0aW9uKigpe2lmKCEoMCxGLmlzTm9kZSkoKSl0aHJvdyBuZXcgRXJyb3IoIk1ldGhvZCAncmVmcmVzaFRva2Vuc0ZvclZpeWEnIGNhbiBvbmx5IGJlIHVzZWQgYnkgTm9kZS4iKTtjb25zdCBXPSIvU0FTTG9nb24vb2F1dGgvdG9rZW4iLHE9e0F1dGhvcml6YXRpb246'@;
put 'IkJhc2ljICIrKHR5cGVvZiBJPiJ1Ij9idG9hKEwrIjoiK0spOkkuZnJvbShMKyI6IitLKS50b1N0cmluZygiYmFzZTY0IikpfSxlZT1uZXcgUC5kZWZhdWx0O3JldHVybiBlZS5hcHBlbmQoImdyYW50X3R5cGUiLCJyZWZyZXNoX3Rva2VuIiksZWUuYXBwZW5kKCJyZWZyZXNoX3Rva2VuIixV'@;
put 'KSx5aWVsZCBOLnBvc3QoVyxlZSx2b2lkIDAsIm11bHRpcGFydC9mb3JtLWRhdGE7IGJvdW5kYXJ5PSIrZWUuX2JvdW5kYXJ5LHEpLnRoZW4obmU9Pm5lLnJlc3VsdCkuY2F0Y2gobmU9Pnt0aHJvdygwLHcucHJlZml4TWVzc2FnZSkobmUsKDAsTy5nZXRUb2tlblJlcXVlc3RFcnJvclByZWZp'@;
put 'eCkoInJlZnJlc2hpbmcgdG9rZW5zIiwicmVmcmVzaFRva2Vuc0ZvclZpeWEiLEIuU2VydmVyVHlwZS5TYXNWaXlhLFcsZWUscSxMLEspKX0pfSl9fSw0NTgyOmZ1bmN0aW9uKHVlLFgseSl7InVzZSBzdHJpY3QiO3ZhciBJPXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbih3LFAsRixP'@;
put 'KXtyZXR1cm4gbmV3KEZ8fChGPVByb21pc2UpKShmdW5jdGlvbihOLEwpe2Z1bmN0aW9uIEsoWSl7dHJ5e1coTy5uZXh0KFkpKX1jYXRjaChxKXtMKHEpfX1mdW5jdGlvbiBVKFkpe3RyeXtXKE8udGhyb3coWSkpfWNhdGNoKHEpe0wocSl9fWZ1bmN0aW9uIFcoWSl7WS5kb25lP04oWS52YWx1'@;
put 'ZSk6ZnVuY3Rpb24geihOKXtyZXR1cm4gTiBpbnN0YW5jZW9mIEY/TjpuZXcgRihmdW5jdGlvbihMKXtMKE4pfSl9KFkudmFsdWUpLnRoZW4oSyxVKX1XKChPPU8uYXBwbHkodyxQfHxbXSkpLm5leHQoKSl9KX07T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZToh'@;
put 'MH0pLFgudmVyaWZ5U2FzOUxvZ2luPXZvaWQgMDtjb25zdCBfPXkoNTkyOCksZz15KDE1MjcpO1gudmVyaWZ5U2FzOUxvZ2luPWZ1bmN0aW9uIEIodyl7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2xldCBQPSExLEY9bmV3IERhdGUsTz0wO2Rve2lmKHlpZWxkKDAs'@;
put 'Xy5kZWxheSkoMWUzKSx3LmNsb3NlZClicmVhaztQPXcud2luZG93LmxvY2F0aW9uLmhyZWYuaW5jbHVkZXMoIlNBU0xvZ29uIikmJncud2luZG93LmRvY3VtZW50LmJvZHkuaW5uZXJUZXh0LmluY2x1ZGVzKCgwLGcuZ2V0RXhwZWN0ZWRMb2dJblN1Y2Nlc3NIZWFkZXIpKCkpLE89KChuZXcg'@;
put 'RGF0ZSkudmFsdWVPZigpLUYudmFsdWVPZigpKS8xZTN9d2hpbGUoIVAmJk88MzAwKTtyZXR1cm57aXNMb2dnZWRJbjpQfX0pfX0sNjU0NzpmdW5jdGlvbih1ZSxYLHkpeyJ1c2Ugc3RyaWN0Ijt2YXIgST10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rpb24oUCxGLE8seil7cmV0dXJuIG5l'@;
put 'dyhPfHwoTz1Qcm9taXNlKSkoZnVuY3Rpb24oTCxLKXtmdW5jdGlvbiBVKHEpe3RyeXtZKHoubmV4dChxKSl9Y2F0Y2goZWUpe0soZWUpfX1mdW5jdGlvbiBXKHEpe3RyeXtZKHoudGhyb3cocSkpfWNhdGNoKGVlKXtLKGVlKX19ZnVuY3Rpb24gWShxKXtxLmRvbmU/TChxLnZhbHVlKTpmdW5j'@;
put 'dGlvbiBOKEwpe3JldHVybiBMIGluc3RhbmNlb2YgTz9MOm5ldyBPKGZ1bmN0aW9uKEspe0soTCl9KX0ocS52YWx1ZSkudGhlbihVLFcpfVkoKHo9ei5hcHBseShQLEZ8fFtdKSkubmV4dCgpKX0pfTtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksWC5p'@;
put 'c0xvZ2dlZEluU0FTVklZQT1YLnZlcmlmeVNhc1ZpeWFMb2dpbj12b2lkIDA7Y29uc3QgXz15KDU5MjgpLGc9eSgxNTI3KTtYLnZlcmlmeVNhc1ZpeWFMb2dpbj1mdW5jdGlvbiBCKFApe3ZhciBGLE87cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2xldCB6PSExLE49'@;
put 'bmV3IERhdGUsTD0wO2Rve2lmKHlpZWxkKDAsXy5kZWxheSkoMWUzKSxQLmNsb3NlZClicmVhazt6PSgwLFguaXNMb2dnZWRJblNBU1ZJWUEpKCksTD0oKG5ldyBEYXRlKS52YWx1ZU9mKCktTi52YWx1ZU9mKCkpLzFlM313aGlsZSgheiYmTDwzMDApO2xldCBLPSExO049bmV3IERhdGU7ZG97'@;
put 'aWYoeWllbGQoMCxfLmRlbGF5KSgxZTMpLFAuY2xvc2VkKWJyZWFrO0s9UC53aW5kb3cubG9jYXRpb24uaHJlZi5pbmNsdWRlcygiU0FTTG9nb24iKXx8KG51bGw9PT0oTz1udWxsPT09KEY9UC53aW5kb3cuZG9jdW1lbnQuYm9keSl8fHZvaWQgMD09PUY/dm9pZCAwOkYuaW5uZXJUZXh0KXx8'@;
put 'dm9pZCAwPT09Tz92b2lkIDA6Ty5pbmNsdWRlcygoMCxnLmdldEV4cGVjdGVkTG9nSW5TdWNjZXNzSGVhZGVyKSgpKSksTD0oKG5ldyBEYXRlKS52YWx1ZU9mKCktTi52YWx1ZU9mKCkpLzFlM313aGlsZSghSyYmTDwzMDApO3JldHVybntpc0xvZ2dlZEluOnomJkt9fSl9LFguaXNMb2dnZWRJ'@;
put 'blNBU1ZJWUE9KCk9PmRvY3VtZW50LmNvb2tpZS5pbmNsdWRlcygiQ3VycmVudC1Vc2VyIikmJmRvY3VtZW50LmNvb2tpZS5pbmNsdWRlcygidXNlcklkIil9LDQwMzc6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZToh'@;
put 'MH0pLFguZ2VuZXJhdGVGaWxlVXBsb2FkRm9ybT12b2lkIDA7Y29uc3QgST15KDI0MDIpLF89eSg1OTI4KTtYLmdlbmVyYXRlRmlsZVVwbG9hZEZvcm09KEIsdyk9Pntmb3IoY29uc3QgUCBpbiB3KXtpZighQXJyYXkuaXNBcnJheSh3W1BdKSljb250aW51ZTtjb25zdCBGPVAsTz0oMCxJLmNv'@;
put 'bnZlcnRUb0NTVikodyxQKTtpZigiRVJST1I6IExBUkdFIFNUUklORyBMRU5HVEgiPT09Tyl0aHJvdyBuZXcgRXJyb3IoIlRoZSBtYXggbGVuZ3RoIG9mIGEgc3RyaW5nIHZhbHVlIGluIFNBU2pzIGlzIDMyNzY1IGNoYXJhY3RlcnMuIik7aWYoKDAsXy5pc05vZGUpKCkpQi5hcHBlbmQoRixP'@;
put 'LHtmaWxlbmFtZTpgJHtGfS5jc3ZgLGNvbnRlbnRUeXBlOiJhcHBsaWNhdGlvbi9jc3YifSk7ZWxzZXtjb25zdCB6PW5ldyBCbG9iKFtPXSx7dHlwZToiYXBwbGljYXRpb24vY3N2In0pO0IuYXBwZW5kKEYseixgJHtGfS5jc3ZgKX19cmV0dXJuIEJ9fSwyMTcwOih1ZSxYLHkpPT57InVzZSBz'@;
put 'dHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLmdlbmVyYXRlVGFibGVVcGxvYWRGb3JtPXZvaWQgMDtjb25zdCBJPXkoMjQwMiksXz15KDQ3OTkpO1guZ2VuZXJhdGVUYWJsZVVwbG9hZEZvcm09KEIsdyk9Pntjb25zdCBQPVtdLEY9e307'@;
put 'bGV0IE89MDtmb3IoY29uc3QgeiBpbiB3KXtPKyssKDAsSS5pc0Zvcm1hdHNUYWJsZSkoeil8fFAucHVzaCh6KTtjb25zdCBOPSgwLEkuY29udmVydFRvQ1NWKSh3LHopO2lmKCJFUlJPUjogTEFSR0UgU1RSSU5HIExFTkdUSCI9PT1OKXRocm93IG5ldyBFcnJvcigiVGhlIG1heCBsZW5ndGgg'@;
put 'b2YgYSBzdHJpbmcgdmFsdWUgaW4gU0FTanMgaXMgMzI3NjUgY2hhcmFjdGVycy4iKTtOLmxlbmd0aD4xNmUzPygwLF8uc3BsaXRDaHVua3MpKE4pLm1hcChLPT57Qi5hcHBlbmQoYHNhc2pzJHtPfWRhdGFgLEspfSk6Rltgc2FzanMke099ZGF0YWBdPU59cmV0dXJuIEYuc2FzanNfdGFibGVz'@;
put 'PVAuam9pbigiICIpLHtmb3JtRGF0YTpCLHJlcXVlc3RQYXJhbXM6Rn19fSwzNjA3OmZ1bmN0aW9uKHVlLFgseSl7InVzZSBzdHJpY3QiO3ZhciBJPXRoaXMmJnRoaXMuX19jcmVhdGVCaW5kaW5nfHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbih3LFAsRixPKXt2b2lkIDA9PT1PJiYoTz1GKTt2'@;
put 'YXIgej1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKFAsRik7KCF6fHwoImdldCJpbiB6PyFQLl9fZXNNb2R1bGU6ei53cml0YWJsZXx8ei5jb25maWd1cmFibGUpKSYmKHo9e2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIFBbRl19fSksT2JqZWN0LmRlZmluZVBy'@;
put 'b3BlcnR5KHcsTyx6KX06ZnVuY3Rpb24odyxQLEYsTyl7dm9pZCAwPT09TyYmKE89Riksd1tPXT1QW0ZdfSksXz10aGlzJiZ0aGlzLl9fZXhwb3J0U3Rhcnx8ZnVuY3Rpb24odyxQKXtmb3IodmFyIEYgaW4gdykiZGVmYXVsdCIhPT1GJiYhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0'@;
put 'eS5jYWxsKFAsRikmJkkoUCx3LEYpfSxnPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbih3KXtyZXR1cm4gdyYmdy5fX2VzTW9kdWxlP3c6e2RlZmF1bHQ6d319O09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTtjb25zdCBCPWcoeSg1'@;
put 'OTU2KSk7Xyh5KDEyMzApLFgpLF8oeSgxMzk1KSxYKSxfKHkoOTgyMSksWCksXyh5KDgzMDYpLFgpLF8oeSgzNDY3KSxYKSxfKHkoMzYwMiksWCksWC5kZWZhdWx0PUIuZGVmYXVsdH0sMTU3MDpmdW5jdGlvbih1ZSxYLHkpeyJ1c2Ugc3RyaWN0Ijt2YXIgST10aGlzJiZ0aGlzLl9fYXdhaXRl'@;
put 'cnx8ZnVuY3Rpb24oUCxGLE8seil7cmV0dXJuIG5ldyhPfHwoTz1Qcm9taXNlKSkoZnVuY3Rpb24oTCxLKXtmdW5jdGlvbiBVKHEpe3RyeXtZKHoubmV4dChxKSl9Y2F0Y2goZWUpe0soZWUpfX1mdW5jdGlvbiBXKHEpe3RyeXtZKHoudGhyb3cocSkpfWNhdGNoKGVlKXtLKGVlKX19ZnVuY3Rp'@;
put 'b24gWShxKXtxLmRvbmU/TChxLnZhbHVlKTpmdW5jdGlvbiBOKEwpe3JldHVybiBMIGluc3RhbmNlb2YgTz9MOm5ldyBPKGZ1bmN0aW9uKEspe0soTCl9KX0ocS52YWx1ZSkudGhlbihVLFcpfVkoKHo9ei5hcHBseShQLEZ8fFtdKSkubmV4dCgpKX0pfTtPYmplY3QuZGVmaW5lUHJvcGVydHko'@;
put 'WCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksWC5Db21wdXRlSm9iRXhlY3V0b3I9dm9pZCAwO2NvbnN0IF89eSgzOTAwKSxnPXkoMTM5NSksQj15KDYxMTgpO1guQ29tcHV0ZUpvYkV4ZWN1dG9yPWNsYXNzIHcgZXh0ZW5kcyBCLkJhc2VKb2JFeGVjdXRvcntjb25zdHJ1Y3RvcihGLE8pe3N1'@;
put 'cGVyKEYsXy5TZXJ2ZXJUeXBlLlNhc1ZpeWEpLHRoaXMuc2FzVml5YUFwaUNsaWVudD1PfWV4ZWN1dGUoRixPLHosTixMKXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3QgSz1OfHwoKCk9PlByb21pc2UucmVzb2x2ZSgpKTtyZXR1cm4gbmV3IFByb21pc2Uo'@;
put 'KHEsZWUpPT57dmFyIEo7bnVsbD09PShKPXRoaXMuc2FzVml5YUFwaUNsaWVudCl8fHZvaWQgMD09PUp8fEouZXhlY3V0ZUNvbXB1dGVKb2IoRix6LmNvbnRleHROYW1lLHouZGVidWcsTyxMLCEwLCEwKS50aGVuKG5lPT57dGhpcy5zYXNWaXlhQXBpQ2xpZW50LmFwcGVuZFJlcXVlc3QobmUs'@;
put 'Rix6LmRlYnVnKSxxKG5lLnJlc3VsdCl9KS5jYXRjaChuZT0+SSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7bmUgaW5zdGFuY2VvZiBnLkNvbXB1dGVKb2JFeGVjdXRpb25FcnJvciYmKHRoaXMuc2FzVml5YUFwaUNsaWVudC5hcHBlbmRSZXF1ZXN0KG5lLEYsei5kZWJ1ZyksZWUo'@;
put 'bmV3IGcuRXJyb3JSZXNwb25zZShuZT8ubWVzc2FnZSxuZSkpKSxuZSBpbnN0YW5jZW9mIGcuTG9naW5SZXF1aXJlZEVycm9yPyh0aGlzLmFwcGVuZFdhaXRpbmdSZXF1ZXN0KCgpPT50aGlzLmV4ZWN1dGUoRixPLHosTikudGhlbihpZT0+e3EoaWUpfSxpZT0+e2VlKGllKX0pKSx5aWVsZCBL'@;
put 'KCkpOmVlKG5ldyBnLkVycm9yUmVzcG9uc2UobmU/Lm1lc3NhZ2UsbmUpKX0pKX0pfSl9fX0sMzQ5MTpmdW5jdGlvbih1ZSxYLHkpeyJ1c2Ugc3RyaWN0Ijt2YXIgST10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rpb24oRixPLHosTil7cmV0dXJuIG5ldyh6fHwoej1Qcm9taXNlKSkoZnVu'@;
put 'Y3Rpb24oSyxVKXtmdW5jdGlvbiBXKGVlKXt0cnl7cShOLm5leHQoZWUpKX1jYXRjaChKKXtVKEopfX1mdW5jdGlvbiBZKGVlKXt0cnl7cShOLnRocm93KGVlKSl9Y2F0Y2goSil7VShKKX19ZnVuY3Rpb24gcShlZSl7ZWUuZG9uZT9LKGVlLnZhbHVlKTpmdW5jdGlvbiBMKEspe3JldHVybiBL'@;
put 'IGluc3RhbmNlb2Ygej9LOm5ldyB6KGZ1bmN0aW9uKFUpe1UoSyl9KX0oZWUudmFsdWUpLnRoZW4oVyxZKX1xKChOPU4uYXBwbHkoRixPfHxbXSkpLm5leHQoKSl9KX07T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFguRmlsZVVwbG9hZGVyPXZvaWQg'@;
put 'MDtjb25zdCBfPXkoNTkyOCksZz15KDEzOTUpLEI9eSgzOTAwKSx3PXkoNjExOCk7WC5GaWxlVXBsb2FkZXI9Y2xhc3MgUCBleHRlbmRzIHcuQmFzZUpvYkV4ZWN1dG9ye2NvbnN0cnVjdG9yKE8seixOLEwpe3N1cGVyKE8seiksdGhpcy5qb2JzUGF0aD1OLHRoaXMucmVxdWVzdENsaWVudD1M'@;
put 'fWV4ZWN1dGUoTyx6LE4sTCl7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0e2ZpbGVzOksscGFyYW1zOlV9PXosVz1MfHwoKCk9PlByb21pc2UucmVzb2x2ZSgpKTtpZighSz8ubGVuZ3RoKXRocm93IG5ldyBnLkVycm9yUmVzcG9uc2UoIkF0IGxlYXN0IG9u'@;
put 'ZSBmaWxlIG11c3QgYmUgcHJvdmlkZWQuIik7aWYoIU98fCIiPT09Tyl0aHJvdyBuZXcgZy5FcnJvclJlc3BvbnNlKCJzYXNKb2IgbXVzdCBiZSBwcm92aWRlZC4iKTtsZXQgWT0iIjtmb3IobGV0IG1lIGluIFUpVS5oYXNPd25Qcm9wZXJ0eShtZSkmJihZKz1gJiR7bWV9PSR7VVttZV19YCk7'@;
put 'Y29uc3QgcT1OLmFwcExvYz9OLmFwcExvYy5yZXBsYWNlKC9cLz8kLywiLyIpK08ucmVwbGFjZSgvXlwvLywiIik6TyxlZT1gJHt0aGlzLmpvYnNQYXRofS8/JHsiX3Byb2dyYW09IitxfSR7WX1gLEo9bmV3IEZvcm1EYXRhO2ZvcihsZXQgbWUgb2YgSylKLmFwcGVuZCgiZmlsZSIsbWUuZmls'@;
put 'ZSxtZS5maWxlTmFtZSk7Y29uc3QgbmU9dGhpcy5yZXF1ZXN0Q2xpZW50LmdldENzcmZUb2tlbigiZmlsZSIpO25lJiZKLmFwcGVuZCgiX2NzcmYiLG5lLnZhbHVlKSxOLmRlYnVnJiZKLmFwcGVuZCgiX2RlYnVnIiwiMTMxIiksTi5zZXJ2ZXJUeXBlPT09Qi5TZXJ2ZXJUeXBlLlNhc1ZpeWEm'@;
put 'Jk4uY29udGV4dE5hbWUmJkouYXBwZW5kKCJfY29udGV4dG5hbWUiLE4uY29udGV4dE5hbWUpO2NvbnN0IGllPXsiY2FjaGUtY29udHJvbCI6Im5vLWNhY2hlIixBY2NlcHQ6IiovKiIsIkNvbnRlbnQtVHlwZSI6InRleHQvcGxhaW4ifTtyZXR1cm4gbmV3IFByb21pc2UoKG1lLF9lKT0+e3Ro'@;
put 'aXMucmVxdWVzdENsaWVudC5wb3N0KGVlLEosdm9pZCAwLCJhcHBsaWNhdGlvbi9qc29uIixpZSkudGhlbihUZT0+SSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7dGhpcy5yZXF1ZXN0Q2xpZW50LmFwcGVuZFJlcXVlc3QoVGUsTyxOLmRlYnVnKTtsZXQgU2U9VGUucmVzdWx0O2lm'@;
put 'KE4uZGVidWcpc3dpdGNoKHRoaXMuc2VydmVyVHlwZSl7Y2FzZSBCLlNlcnZlclR5cGUuU2FzVml5YTpTZT15aWVsZCgwLF8ucGFyc2VTYXNWaXlhRGVidWdSZXNwb25zZSkoVGUucmVzdWx0LHRoaXMucmVxdWVzdENsaWVudCxOLnNlcnZlclVybCk7YnJlYWs7Y2FzZSBCLlNlcnZlclR5cGUu'@;
put 'U2FzOTpTZT0ic3RyaW5nIj09dHlwZW9mIFRlLnJlc3VsdD8oMCxfLnBhcnNlV2Vib3V0UmVzcG9uc2UpKFRlLnJlc3VsdCxlZSk6VGUucmVzdWx0O2JyZWFrO2Nhc2UgQi5TZXJ2ZXJUeXBlLlNhc2pzOlNlPSJzdHJpbmciPT10eXBlb2YgVGUucmVzdWx0PygwLF8uZ2V0VmFsaWRKc29uKShU'@;
put 'ZS5yZXN1bHQpOlRlLnJlc3VsdH1lbHNlIFNlPSJzdHJpbmciPT10eXBlb2YgVGUucmVzdWx0PygwLF8uZ2V0VmFsaWRKc29uKShUZS5yZXN1bHQpOlRlLnJlc3VsdDttZShTZSl9KSkuY2F0Y2goVGU9PkkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe1RlIGluc3RhbmNlb2YgZy5K'@;
put 'b2JFeGVjdXRpb25FcnJvciYmKHRoaXMucmVxdWVzdENsaWVudC5hcHBlbmRSZXF1ZXN0KFRlLE8sTi5kZWJ1ZyksX2UobmV3IGcuRXJyb3JSZXNwb25zZShUZT8ubWVzc2FnZSxUZSkpKSxUZSBpbnN0YW5jZW9mIGcuTG9naW5SZXF1aXJlZEVycm9yPyh0aGlzLmFwcGVuZFdhaXRpbmdSZXF1'@;
put 'ZXN0KCgpPT50aGlzLmV4ZWN1dGUoTyx6LE4sTCkudGhlbihTZT0+e21lKFNlKX0sU2U9PntfZShTZSl9KSkseWllbGQgVygpKTpfZShuZXcgZy5FcnJvclJlc3BvbnNlKCJGaWxlIHVwbG9hZCByZXF1ZXN0IGZhaWxlZC4iLFRlKSl9KSl9KX0pfX19LDQ0NDY6ZnVuY3Rpb24odWUsWCx5KXsi'@;
put 'dXNlIHN0cmljdCI7dmFyIEk9dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKEYsTyx6LE4pe3JldHVybiBuZXcoenx8KHo9UHJvbWlzZSkpKGZ1bmN0aW9uKEssVSl7ZnVuY3Rpb24gVyhlZSl7dHJ5e3EoTi5uZXh0KGVlKSl9Y2F0Y2goSil7VShKKX19ZnVuY3Rpb24gWShlZSl7dHJ5'@;
put 'e3EoTi50aHJvdyhlZSkpfWNhdGNoKEope1UoSil9fWZ1bmN0aW9uIHEoZWUpe2VlLmRvbmU/SyhlZS52YWx1ZSk6ZnVuY3Rpb24gTChLKXtyZXR1cm4gSyBpbnN0YW5jZW9mIHo/SzpuZXcgeihmdW5jdGlvbihVKXtVKEspfSl9KGVlLnZhbHVlKS50aGVuKFcsWSl9cSgoTj1OLmFwcGx5KEYs'@;
put 'T3x8W10pKS5uZXh0KCkpfSl9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLkplc0pvYkV4ZWN1dG9yPXZvaWQgMDtjb25zdCBfPXkoMzkwMCksZz15KDEzOTUpLEI9eSg2MTE4KSx3PXkoNTkyOCk7WC5KZXNKb2JFeGVjdXRvcj1jbGFzcyBQIGV4'@;
put 'dGVuZHMgQi5CYXNlSm9iRXhlY3V0b3J7Y29uc3RydWN0b3IoTyx6KXtzdXBlcihPLF8uU2VydmVyVHlwZS5TYXNWaXlhKSx0aGlzLnNhc1ZpeWFBcGlDbGllbnQ9en1leGVjdXRlKE8seixOLEwsSyxVPVtdKXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3Qg'@;
put 'Vz1MfHwoKCk9PlByb21pc2UucmVzb2x2ZSgpKTtyZXR1cm4gbmV3IFByb21pc2UoKHEsZWUpPT57dmFyIEo7bnVsbD09PShKPXRoaXMuc2FzVml5YUFwaUNsaWVudCl8fHZvaWQgMD09PUp8fEouZXhlY3V0ZUpvYihPLE4uY29udGV4dE5hbWUsTi5kZWJ1Zyx6LEspLnRoZW4obmU9Pnt0aGlz'@;
put 'LnNhc1ZpeWFBcGlDbGllbnQuYXBwZW5kUmVxdWVzdChuZSxPLE4uZGVidWcpO2NvbnN0IGllPSgwLHcuYXBwZW5kRXh0cmFSZXNwb25zZUF0dHJpYnV0ZXMpKG5lLFUpO3EoaWUpfSkuY2F0Y2gobmU9PkkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe25lIGluc3RhbmNlb2YgZy5K'@;
put 'b2JFeGVjdXRpb25FcnJvciYmKHRoaXMuc2FzVml5YUFwaUNsaWVudC5hcHBlbmRSZXF1ZXN0KG5lLE8sTi5kZWJ1ZyksZWUobmV3IGcuRXJyb3JSZXNwb25zZShuZT8ubWVzc2FnZSxuZSkpKSxuZSBpbnN0YW5jZW9mIGcuTG9naW5SZXF1aXJlZEVycm9yPyh0aGlzLmFwcGVuZFdhaXRpbmdS'@;
put 'ZXF1ZXN0KCgpPT50aGlzLmV4ZWN1dGUoTyx6LE4sTCxLLFUpLnRoZW4oaWU9PntxKGllKX0saWU9PntlZShpZSl9KSkseWllbGQgVygpKTplZShuZXcgZy5FcnJvclJlc3BvbnNlKG5lPy5tZXNzYWdlLG5lKSl9KSl9KX0pfX19LDYxMTg6ZnVuY3Rpb24odWUsWCx5KXsidXNlIHN0cmljdCI7'@;
put 'dmFyIEk9dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKEIsdyxQLEYpe3JldHVybiBuZXcoUHx8KFA9UHJvbWlzZSkpKGZ1bmN0aW9uKHosTil7ZnVuY3Rpb24gTChXKXt0cnl7VShGLm5leHQoVykpfWNhdGNoKFkpe04oWSl9fWZ1bmN0aW9uIEsoVyl7dHJ5e1UoRi50aHJvdyhXKSl9'@;
put 'Y2F0Y2goWSl7TihZKX19ZnVuY3Rpb24gVShXKXtXLmRvbmU/eihXLnZhbHVlKTpmdW5jdGlvbiBPKHope3JldHVybiB6IGluc3RhbmNlb2YgUD96Om5ldyBQKGZ1bmN0aW9uKE4pe04oeil9KX0oVy52YWx1ZSkudGhlbihMLEspfVUoKEY9Ri5hcHBseShCLHd8fFtdKSkubmV4dCgpKX0pfTtP'@;
put 'YmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksWC5CYXNlSm9iRXhlY3V0b3I9dm9pZCAwO2NvbnN0IF89eSg1OTI4KTtYLkJhc2VKb2JFeGVjdXRvcj1jbGFzcyBne2NvbnN0cnVjdG9yKHcsUCl7dGhpcy5zZXJ2ZXJVcmw9dyx0aGlzLnNlcnZlclR5cGU9'@;
put 'UCx0aGlzLndhaXRpbmdSZXF1ZXN0cz1bXSx0aGlzLnJlc2VuZFdhaXRpbmdSZXF1ZXN0cz0oKT0+SSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7eWllbGQoMCxfLmFzeW5jRm9yRWFjaCkodGhpcy53YWl0aW5nUmVxdWVzdHMsRj0+SSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rp'@;
put 'b24qKCl7eWllbGQgRigpfSkpLHRoaXMud2FpdGluZ1JlcXVlc3RzPVtdfSl9YXBwZW5kV2FpdGluZ1JlcXVlc3Qodyl7dGhpcy53YWl0aW5nUmVxdWVzdHMucHVzaCh3KX1nZXRSZXF1ZXN0UGFyYW1zKHcpe2NvbnN0IFA9e307cmV0dXJuIHcuZGVidWcmJihQLl9vbWl0dGV4dGxvZz0iZmFs'@;
put 'c2UiLFAuX29taXRTZXNzaW9uUmVzdWx0cz0iZmFsc2UiLFAuX2RlYnVnPTEzMSksUH19fSwyNjkzOmZ1bmN0aW9uKHVlLFgseSl7InVzZSBzdHJpY3QiO3ZhciBJPXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbihOLEwsSyxVKXtyZXR1cm4gbmV3KEt8fChLPVByb21pc2UpKShmdW5j'@;
put 'dGlvbihZLHEpe2Z1bmN0aW9uIGVlKGllKXt0cnl7bmUoVS5uZXh0KGllKSl9Y2F0Y2gobGUpe3EobGUpfX1mdW5jdGlvbiBKKGllKXt0cnl7bmUoVS50aHJvdyhpZSkpfWNhdGNoKGxlKXtxKGxlKX19ZnVuY3Rpb24gbmUoaWUpe2llLmRvbmU/WShpZS52YWx1ZSk6ZnVuY3Rpb24gVyhZKXty'@;
put 'ZXR1cm4gWSBpbnN0YW5jZW9mIEs/WTpuZXcgSyhmdW5jdGlvbihxKXtxKFkpfSl9KGllLnZhbHVlKS50aGVuKGVlLEopfW5lKChVPVUuYXBwbHkoTixMfHxbXSkpLm5leHQoKSl9KX0sXz10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oTil7cmV0dXJuIE4mJk4uX19lc01v'@;
put 'ZHVsZT9OOntkZWZhdWx0Ok59fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksWC5TYXM5Sm9iRXhlY3V0b3I9dm9pZCAwO2NvbnN0IGc9Xyh5KDYyMzApKSxCPXkoMTM5NSksdz15KDU5MjgpLFA9eSg2MTE4KSxGPXkoNzk1KTtYLlNhczlKb2JFeGVj'@;
put 'dXRvcj1jbGFzcyBPIGV4dGVuZHMgUC5CYXNlSm9iRXhlY3V0b3J7Y29uc3RydWN0b3IoTCxLLFUsVyxZKXtzdXBlcihMLEspLHRoaXMuam9ic1BhdGg9VSx0aGlzLnJlcXVlc3RDbGllbnQ9Vyx0aGlzLnNhczlSZXF1ZXN0Q2xpZW50PW5ldyBGLlNhczlSZXF1ZXN0Q2xpZW50KEwsWSl9ZXhl'@;
put 'Y3V0ZShMLEssVSl7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0IFc9KDAsdy5pc1JlbGF0aXZlUGF0aCkoTCkmJlUuYXBwTG9jP1UuYXBwTG9jLnJlcGxhY2UoL1wvPyQvLCIvIikrTC5yZXBsYWNlKC9eXC8vLCIiKTpMO2xldCBZPWAke1Uuc2VydmVyVXJs'@;
put 'fSR7dGhpcy5qb2JzUGF0aH0/JHsiX3Byb2dyYW09IitXfWA7WT1gJHtZfSR7VS51c2VybmFtZSYmVS5wYXNzd29yZD8iJl91c2VybmFtZT0iK1UudXNlcm5hbWUrIiZfcGFzc3dvcmQ9IitVLnBhc3N3b3JkOiIifWAsWT1gJHtZfSR7VS5kZWJ1Zz8iJl9kZWJ1Zz0xMzEiOiIifWA7bGV0IHE9'@;
put 'T2JqZWN0LmFzc2lnbih7fSx0aGlzLmdldFJlcXVlc3RQYXJhbXMoVSkpLGVlPW5ldyBnLmRlZmF1bHQ7aWYoSyl0cnl7ZWU9eihlZSxLKX1jYXRjaChpZSl7cmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBCLkVycm9yUmVzcG9uc2UoaWU/Lm1lc3NhZ2UsaWUpKX1lbHNlIEs9IiI7Zm9yKGNv'@;
put 'bnN0IGllIGluIHEpcS5oYXNPd25Qcm9wZXJ0eShpZSkmJmVlLmFwcGVuZChpZSxxW2llXSk7eWllbGQgdGhpcy5zYXM5UmVxdWVzdENsaWVudC5sb2dpbihVLnVzZXJuYW1lLFUucGFzc3dvcmQsdGhpcy5qb2JzUGF0aCk7Y29uc3QgSj1LJiZPYmplY3Qua2V5cyhLKS5sZW5ndGg/Im11bHRp'@;
put 'cGFydC9mb3JtLWRhdGE7IGJvdW5kYXJ5PSIrZWUuX2JvdW5kYXJ5OiJ0ZXh0L3BsYWluIjtyZXR1cm4gbmV3IFByb21pc2UoKGllLGxlKT0+dGhpcy5zYXM5UmVxdWVzdENsaWVudC5wb3N0KFksZWUsdm9pZCAwLEose0FjY2VwdDoiKi8qIixDb25uZWN0aW9uOiJLZWVwLUFsaXZlIn0pLnRo'@;
put 'ZW4obWU9Pnt0aGlzLnJlcXVlc3RDbGllbnQuYXBwZW5kUmVxdWVzdChtZSxMLFUuZGVidWcpLGllKG1lKX0pLmNhdGNoKG1lPT57bGV0IF9lPW1lO21lLnJlc3VsdCYmIiIhPT1tZS5yZXN1bHQ/X2U9bWUucmVzdWx0Om1lLm1lc3NhZ2UmJihfZT1tZS5tZXNzYWdlKSx0aGlzLnJlcXVlc3RD'@;
put 'bGllbnQuYXBwZW5kUmVxdWVzdChfZSxMLFUuZGVidWcpLGxlKG5ldyBCLkVycm9yUmVzcG9uc2UobWU/Lm1lc3NhZ2UsbWUpKX0pKX0pfWdldFJlcXVlc3RQYXJhbXMoTCl7Y29uc3QgSz17fTtyZXR1cm4gTC5kZWJ1ZyYmKEsuX2RlYnVnPTEzMSksS319O2NvbnN0IHo9KE4sTCk9Pntmb3Io'@;
put 'Y29uc3QgSyBpbiBMKXtjb25zdCBVPUssVz0oMCx3LmNvbnZlcnRUb0NTVikoTCxLKTtpZigiRVJST1I6IExBUkdFIFNUUklORyBMRU5HVEgiPT09Vyl0aHJvdyBuZXcgRXJyb3IoIlRoZSBtYXggbGVuZ3RoIG9mIGEgc3RyaW5nIHZhbHVlIGluIFNBU2pzIGlzIDMyNzY1IGNoYXJhY3RlcnMu'@;
put 'Iik7Ti5hcHBlbmQoVSxXLHtmaWxlbmFtZTpgJHtVfS5jc3ZgLGNvbnRlbnRUeXBlOiJhcHBsaWNhdGlvbi9jc3YifSl9cmV0dXJuIE59fSwxMDY1OmZ1bmN0aW9uKHVlLFgseSl7InVzZSBzdHJpY3QiO3ZhciBJPXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbihMLEssVSxXKXtyZXR1'@;
put 'cm4gbmV3KFV8fChVPVByb21pc2UpKShmdW5jdGlvbihxLGVlKXtmdW5jdGlvbiBKKGxlKXt0cnl7aWUoVy5uZXh0KGxlKSl9Y2F0Y2gobWUpe2VlKG1lKX19ZnVuY3Rpb24gbmUobGUpe3RyeXtpZShXLnRocm93KGxlKSl9Y2F0Y2gobWUpe2VlKG1lKX19ZnVuY3Rpb24gaWUobGUpe2xlLmRv'@;
put 'bmU/cShsZS52YWx1ZSk6ZnVuY3Rpb24gWShxKXtyZXR1cm4gcSBpbnN0YW5jZW9mIFU/cTpuZXcgVShmdW5jdGlvbihlZSl7ZWUocSl9KX0obGUudmFsdWUpLnRoZW4oSixuZSl9aWUoKFc9Vy5hcHBseShMLEt8fFtdKSkubmV4dCgpKX0pfSxfPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0'@;
put 'fHxmdW5jdGlvbihMKXtyZXR1cm4gTCYmTC5fX2VzTW9kdWxlP0w6e2RlZmF1bHQ6TH19O09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLlNhc2pzSm9iRXhlY3V0b3I9dm9pZCAwO2NvbnN0IGc9Xyh5KDYyMzApKSxCPXkoMzkwMCksdz15KDEzOTUp'@;
put 'LFA9eSg0MDM3KSxGPXkoNTkyOCksTz15KDU5MjgpLHo9eSg2MTE4KTtYLlNhc2pzSm9iRXhlY3V0b3I9Y2xhc3MgTiBleHRlbmRzIHouQmFzZUpvYkV4ZWN1dG9ye2NvbnN0cnVjdG9yKEssVSxXKXtzdXBlcihLLEIuU2VydmVyVHlwZS5TYXNqcyksdGhpcy5qb2JzUGF0aD1VLHRoaXMucmVx'@;
put 'dWVzdENsaWVudD1XfWV4ZWN1dGUoSyxVLFcsWSxxLGVlPVtdKXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3QgSj1ZLG5lPSgwLE8uaXNSZWxhdGl2ZVBhdGgpKEspJiZXLmFwcExvYz9XLmFwcExvYy5yZXBsYWNlKC9cLz8kLywiLyIpK0sucmVwbGFjZSgv'@;
put 'XlwvLywiIik6SztsZXQgaWU9YCR7Vy5zZXJ2ZXJVcmx9JHt0aGlzLmpvYnNQYXRofS8/JHsiX3Byb2dyYW09IituZX1gLGxlPU9iamVjdC5hc3NpZ24oe30sdGhpcy5nZXRSZXF1ZXN0UGFyYW1zKFcpKSxtZT0oMCxGLmdldEZvcm1EYXRhKSgpO2lmKFUpdHJ5e21lPSgwLFAuZ2VuZXJhdGVG'@;
put 'aWxlVXBsb2FkRm9ybSkobWUsVSl9Y2F0Y2goU2Upe3JldHVybiBQcm9taXNlLnJlamVjdChuZXcgdy5FcnJvclJlc3BvbnNlKFNlPy5tZXNzYWdlLFNlKSl9Zm9yKGNvbnN0IFNlIGluIGxlKWxlLmhhc093blByb3BlcnR5KFNlKSYmbWUuYXBwZW5kKFNlLGxlW1NlXSk7Y29uc3QgX2U9bWUg'@;
put 'aW5zdGFuY2VvZiBnLmRlZmF1bHQmJnR5cGVvZiBGb3JtRGF0YT4idSI/YG11bHRpcGFydC9mb3JtLWRhdGE7IGJvdW5kYXJ5PSR7bWUuZ2V0SGVhZGVycygpWyJjb250ZW50LXR5cGUiXX1gOiJtdWx0aXBhcnQvZm9ybS1kYXRhIjtyZXR1cm4gbmV3IFByb21pc2UoKFNlLGplKT0+e3RoaXMu'@;
put 'cmVxdWVzdENsaWVudC5wb3N0KGllLG1lLHE/LmFjY2Vzc190b2tlbixfZSkudGhlbihWPT5JKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtpZihPYmplY3QuZW50cmllcyhWLnJlc3VsdCkubGVuZ3RoPDEpdGhyb3cgbmV3IHcuSm9iRXhlY3V0aW9uRXJyb3IoMCxgTm8gd2Vib3V0'@;
put 'IHdhcyByZXR1cm5lZCBieSBqb2IgJHtuZX0uICBQbGVhc2UgY2hlY2sgdGhlIFNBUyBsb2cgZm9yIG1vcmUgaW5mby5gLFYubG9nKTtjb25zdHtyZXN1bHQ6cH09VjtwJiYic3RyaW5nIj09dHlwZW9mIHAmJnAudHJpbSgpJiYoVi5yZXN1bHQ9KDAsTy5nZXRWYWxpZEpzb24pKHApKSx0aGlz'@;
put 'LnJlcXVlc3RDbGllbnQuYXBwZW5kUmVxdWVzdChWLEssVy5kZWJ1Zyk7Y29uc3QgYj0oMCxPLmFwcGVuZEV4dHJhUmVzcG9uc2VBdHRyaWJ1dGVzKShWLGVlKTtTZShiKX0pKS5jYXRjaChWPT5JKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtWIGluc3RhbmNlb2Ygdy5Kb2JFeGVj'@;
put 'dXRpb25FcnJvciYmKHRoaXMucmVxdWVzdENsaWVudC5hcHBlbmRSZXF1ZXN0KFYsSyxXLmRlYnVnKSxqZShuZXcgdy5FcnJvclJlc3BvbnNlKFY/Lm1lc3NhZ2UsVikpKSxWIGluc3RhbmNlb2Ygdy5Mb2dpblJlcXVpcmVkRXJyb3I/KFl8fGplKG5ldyB3LkVycm9yUmVzcG9uc2UoIlJlcXVl'@;
put 'c3QgaXMgbm90IGF1dGhlbnRpY2F0ZWQuIE1ha2Ugc3VyZSAuZW52IGZpbGUgZXhpc3RzIHdpdGggdmFsaWQgY3JlZGVudGlhbHMuIixWKSksdGhpcy5hcHBlbmRXYWl0aW5nUmVxdWVzdCgoKT0+dGhpcy5leGVjdXRlKEssVSxXLFkscSxlZSkudGhlbihwPT57U2UocCl9LHA9PntqZShwKX0p'@;
put 'KSxKJiYoeWllbGQgSigpKSk6amUobmV3IHcuRXJyb3JSZXNwb25zZShWPy5tZXNzYWdlLFYpKX0pKX0pfSl9fX0sNjA4NDpmdW5jdGlvbih1ZSxYLHkpeyJ1c2Ugc3RyaWN0Ijt2YXIgST10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rpb24oTCxLLFUsVyl7cmV0dXJuIG5ldyhVfHwoVT1Q'@;
put 'cm9taXNlKSkoZnVuY3Rpb24ocSxlZSl7ZnVuY3Rpb24gSihsZSl7dHJ5e2llKFcubmV4dChsZSkpfWNhdGNoKG1lKXtlZShtZSl9fWZ1bmN0aW9uIG5lKGxlKXt0cnl7aWUoVy50aHJvdyhsZSkpfWNhdGNoKG1lKXtlZShtZSl9fWZ1bmN0aW9uIGllKGxlKXtsZS5kb25lP3EobGUudmFsdWUp'@;
put 'OmZ1bmN0aW9uIFkocSl7cmV0dXJuIHEgaW5zdGFuY2VvZiBVP3E6bmV3IFUoZnVuY3Rpb24oZWUpe2VlKHEpfSl9KGxlLnZhbHVlKS50aGVuKEosbmUpfWllKChXPVcuYXBwbHkoTCxLfHxbXSkpLm5leHQoKSl9KX0sXz10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oTCl7'@;
put 'cmV0dXJuIEwmJkwuX19lc01vZHVsZT9MOntkZWZhdWx0Okx9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksWC5XZWJKb2JFeGVjdXRvcj12b2lkIDA7Y29uc3QgZz1fKHkoNjIzMCkpLEI9eSgzOTAwKSx3PXkoMTM5NSksUD15KDQwMzcpLEY9eSgy'@;
put 'MTcwKSxPPXkoNTkyOCksej15KDYxMTgpO1guV2ViSm9iRXhlY3V0b3I9Y2xhc3MgTiBleHRlbmRzIHouQmFzZUpvYkV4ZWN1dG9ye2NvbnN0cnVjdG9yKEssVSxXLFkscSl7c3VwZXIoSyxVKSx0aGlzLmpvYnNQYXRoPVcsdGhpcy5yZXF1ZXN0Q2xpZW50PVksdGhpcy5zYXNWaXlhQXBpQ2xp'@;
put 'ZW50PXF9ZXhlY3V0ZShLLFUsVyxZLHEsZWU9W10pe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdCBKPVksbmU9KDAsTy5pc1JlbGF0aXZlUGF0aCkoSykmJlcuYXBwTG9jP1cuYXBwTG9jLnJlcGxhY2UoL1wvPyQvLCIvIikrSy5yZXBsYWNlKC9eXC8vLCIi'@;
put 'KTpLO2xldCBpZT1gJHtXLnNlcnZlclVybH0ke3RoaXMuam9ic1BhdGh9Lz8keyJfcHJvZ3JhbT0iK25lfWA7aWYoVy5zZXJ2ZXJUeXBlPT09Qi5TZXJ2ZXJUeXBlLlNhc1ZpeWEpe2xldCBTZTt0cnl7U2U9eWllbGQgdGhpcy5nZXRKb2JVcmkoSyl9Y2F0Y2goamUpe3JldHVybiBuZXcgUHJv'@;
put 'bWlzZSgoVixwKT0+SSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7amUgaW5zdGFuY2VvZiB3LkxvZ2luUmVxdWlyZWRFcnJvcj8odGhpcy5hcHBlbmRXYWl0aW5nUmVxdWVzdCgoKT0+dGhpcy5leGVjdXRlKEssVSxXLFkscSxlZSkudGhlbihiPT57VihiKX0sYj0+e3AoYil9KSks'@;
put 'SiYmKHlpZWxkIEooKSkpOnAobmV3IHcuRXJyb3JSZXNwb25zZShqZT8ubWVzc2FnZSxqZSkpfSkpfWllKz1TZS5sZW5ndGg+MD8iJl9qb2I9IitTZToiIixTZS5sZW5ndGg+MCYmKGllKz0iJl9qb2I9IitTZSxpZT1pZS5yZXBsYWNlKCJfcHJvZ3JhbT0iLCJfX3Byb2dyYW09IikpLGllKz1X'@;
put 'LmNvbnRleHROYW1lJiYhL1xzLy50ZXN0KFcuY29udGV4dE5hbWUpP2AmX2NvbnRleHRuYW1lPSR7Vy5jb250ZXh0TmFtZX1gOiIifWxldCBsZT1PYmplY3QuYXNzaWduKHt9LHRoaXMuZ2V0UmVxdWVzdFBhcmFtcyhXKSksbWU9KDAsTy5nZXRGb3JtRGF0YSkoKTtpZihVKXtjb25zdCBTZT1K'@;
put 'U09OLnN0cmluZ2lmeShVKTtpZihXLnNlcnZlclR5cGU9PT1CLlNlcnZlclR5cGUuU2FzOXx8U2UubGVuZ3RoPjVlNXx8U2UuaW5jbHVkZXMoIjsiKSl0cnl7bWU9KDAsUC5nZW5lcmF0ZUZpbGVVcGxvYWRGb3JtKShtZSxVKX1jYXRjaChqZSl7cmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyB3'@;
put 'LkVycm9yUmVzcG9uc2UoamU/Lm1lc3NhZ2UsamUpKX1lbHNlIHRyeXtjb25zdHtmb3JtRGF0YTpqZSxyZXF1ZXN0UGFyYW1zOlZ9PSgwLEYuZ2VuZXJhdGVUYWJsZVVwbG9hZEZvcm0pKG1lLFUpO21lPWplLGxlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxsZSksVil9Y2F0Y2go'@;
put 'amUpe3JldHVybiBQcm9taXNlLnJlamVjdChuZXcgdy5FcnJvclJlc3BvbnNlKGplPy5tZXNzYWdlLGplKSl9fWZvcihjb25zdCBTZSBpbiBsZSlsZS5oYXNPd25Qcm9wZXJ0eShTZSkmJm1lLmFwcGVuZChTZSxsZVtTZV0pO2NvbnN0IF9lPW1lIGluc3RhbmNlb2YgZy5kZWZhdWx0JiZ0eXBl'@;
put 'b2YgRm9ybURhdGE+InUiP2BtdWx0aXBhcnQvZm9ybS1kYXRhOyBib3VuZGFyeT0ke21lLmdldEhlYWRlcnMoKVsiY29udGVudC10eXBlIl19YDoibXVsdGlwYXJ0L2Zvcm0tZGF0YSI7cmV0dXJuIG5ldyBQcm9taXNlKChTZSxqZSk9Pnt0aGlzLnJlcXVlc3RDbGllbnQucG9zdChpZSxtZSxx'@;
put 'Py5hY2Nlc3NfdG9rZW4sX2UpLnRoZW4oVj0+SSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7dGhpcy5yZXF1ZXN0Q2xpZW50LmFwcGVuZFJlcXVlc3QoVixLLFcuZGVidWcpO2xldCBwPVYucmVzdWx0O2lmKFcuZGVidWcpc3dpdGNoKHRoaXMuc2VydmVyVHlwZSl7Y2FzZSBCLlNl'@;
put 'cnZlclR5cGUuU2FzVml5YTpwPXlpZWxkKDAsTy5wYXJzZVNhc1ZpeWFEZWJ1Z1Jlc3BvbnNlKShWLnJlc3VsdCx0aGlzLnJlcXVlc3RDbGllbnQsdGhpcy5zZXJ2ZXJVcmwpO2JyZWFrO2Nhc2UgQi5TZXJ2ZXJUeXBlLlNhczk6cD0ic3RyaW5nIj09dHlwZW9mIFYucmVzdWx0PygwLE8ucGFy'@;
put 'c2VXZWJvdXRSZXNwb25zZSkoVi5yZXN1bHQsaWUpOlYucmVzdWx0fWNvbnN0IGI9KDAsTy5hcHBlbmRFeHRyYVJlc3BvbnNlQXR0cmlidXRlcykoe3Jlc3VsdDpwLGxvZzpWLmxvZ30sZWUpO1NlKGIpfSkpLmNhdGNoKFY9PkkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe1YgaW5z'@;
put 'dGFuY2VvZiB3LkpvYkV4ZWN1dGlvbkVycm9yJiYodGhpcy5yZXF1ZXN0Q2xpZW50LmFwcGVuZFJlcXVlc3QoVixLLFcuZGVidWcpLGplKG5ldyB3LkVycm9yUmVzcG9uc2UoVj8ubWVzc2FnZSxWKSkpLFYgaW5zdGFuY2VvZiB3LkxvZ2luUmVxdWlyZWRFcnJvcj8oWXx8amUobmV3IHcuRXJy'@;
put 'b3JSZXNwb25zZSgiUmVxdWVzdCBpcyBub3QgYXV0aGVudGljYXRlZC4gTWFrZSBzdXJlIC5lbnYgZmlsZSBleGlzdHMgd2l0aCB2YWxpZCBjcmVkZW50aWFscy4iLFYpKSx0aGlzLmFwcGVuZFdhaXRpbmdSZXF1ZXN0KCgpPT50aGlzLmV4ZWN1dGUoSyxVLFcsWSxxLGVlKS50aGVuKHA9PntT'@;
put 'ZShwKX0scD0+e2plKHApfSkpLEomJih5aWVsZCBKKCkpKTpqZShuZXcgdy5FcnJvclJlc3BvbnNlKFY/Lm1lc3NhZ2UsVikpfSkpfSl9KX1nZXRKb2JVcmkoSyl7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2lmKCF0aGlzLnNhc1ZpeWFBcGlDbGllbnQpcmV0dXJu'@;
put 'IiI7bGV0IFcsWSxVPSIiO2lmKCgwLE8uaXNSZWxhdGl2ZVBhdGgpKEspKXtjb25zdCBlZT1LLnNwbGl0KCIvIik7Vz1lZS5sZW5ndGg+MT9lZVswXToiIixZPWVlLmxlbmd0aD4xP2VlWzFdOiIifWVsc2V7Y29uc3QgZWU9Sy5zcGxpdCgiLyIpO1k9ZWUucG9wKCl8fCIiLFc9ZWUuam9pbigi'@;
put 'LyIpfWlmKCFZKXRocm93IG5ldyBFcnJvcigiSm9iIG5hbWUgaXMgZW1wdHksIG51bGwgb3IgdW5kZWZpbmVkLiIpO2NvbnN0IHE9eWllbGQgdGhpcy5zYXNWaXlhQXBpQ2xpZW50LmdldEpvYnNJbkZvbGRlcihXKTtpZihxKXtjb25zdCBlZT1xLmZpbmQoSj0+Si5uYW1lPT09WSYmImpvYkRl'@;
put 'ZmluaXRpb24iPT09Si5jb250ZW50VHlwZSk7ZWUmJihVPWVlLnVyaSl9cmV0dXJuIFV9KX19fSw4MjE3OmZ1bmN0aW9uKHVlLFgseSl7InVzZSBzdHJpY3QiO3ZhciBJPXRoaXMmJnRoaXMuX19jcmVhdGVCaW5kaW5nfHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihnLEIsdyxQKXt2b2lkIDA9'@;
put 'PT1QJiYoUD13KTt2YXIgRj1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEIsdyk7KCFGfHwoImdldCJpbiBGPyFCLl9fZXNNb2R1bGU6Ri53cml0YWJsZXx8Ri5jb25maWd1cmFibGUpKSYmKEY9e2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEJbd119fSksT2Jq'@;
put 'ZWN0LmRlZmluZVByb3BlcnR5KGcsUCxGKX06ZnVuY3Rpb24oZyxCLHcsUCl7dm9pZCAwPT09UCYmKFA9dyksZ1tQXT1CW3ddfSksXz10aGlzJiZ0aGlzLl9fZXhwb3J0U3Rhcnx8ZnVuY3Rpb24oZyxCKXtmb3IodmFyIHcgaW4gZykiZGVmYXVsdCIhPT13JiYhT2JqZWN0LnByb3RvdHlwZS5o'@;
put 'YXNPd25Qcm9wZXJ0eS5jYWxsKEIsdykmJkkoQixnLHcpfTtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksXyh5KDE1NzApLFgpLF8oeSgzNDkxKSxYKSxfKHkoNDQ0NiksWCksXyh5KDYxMTgpLFgpLF8oeSgyNjkzKSxYKSxfKHkoNjA4NCksWCksXyh5'@;
put 'KDEwNjUpLFgpfSw0NTg4OmZ1bmN0aW9uKHVlLFgseSl7InVzZSBzdHJpY3QiO3ZhciBJPXkoNDE1NSksXz15KDUxMDgpLGc9dGhpcyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKG5lLGllLGxlLG1lKXt2b2lkIDA9PT1tZSYmKG1lPWxlKTt2YXIgX2U9'@;
put 'T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihpZSxsZSk7KCFfZXx8KCJnZXQiaW4gX2U/IWllLl9fZXNNb2R1bGU6X2Uud3JpdGFibGV8fF9lLmNvbmZpZ3VyYWJsZSkpJiYoX2U9e2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGllW2xlXX19KSxPYmplY3QuZGVm'@;
put 'aW5lUHJvcGVydHkobmUsbWUsX2UpfTpmdW5jdGlvbihuZSxpZSxsZSxtZSl7dm9pZCAwPT09bWUmJihtZT1sZSksbmVbbWVdPWllW2xlXX0pLEI9dGhpcyYmdGhpcy5fX3NldE1vZHVsZURlZmF1bHR8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKG5lLGllKXtPYmplY3QuZGVmaW5lUHJvcGVy'@;
put 'dHkobmUsImRlZmF1bHQiLHtlbnVtZXJhYmxlOiEwLHZhbHVlOmllfSl9OmZ1bmN0aW9uKG5lLGllKXtuZS5kZWZhdWx0PWllfSksdz10aGlzJiZ0aGlzLl9faW1wb3J0U3Rhcnx8ZnVuY3Rpb24obmUpe2lmKG5lJiZuZS5fX2VzTW9kdWxlKXJldHVybiBuZTt2YXIgaWU9e307aWYobnVsbCE9'@;
put 'bmUpZm9yKHZhciBsZSBpbiBuZSkiZGVmYXVsdCIhPT1sZSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG5lLGxlKSYmZyhpZSxuZSxsZSk7cmV0dXJuIEIoaWUsbmUpLGllfSxQPXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbihuZSxpZSxsZSxtZSl7cmV0dXJu'@;
put 'IG5ldyhsZXx8KGxlPVByb21pc2UpKShmdW5jdGlvbihUZSxTZSl7ZnVuY3Rpb24gamUoYil7dHJ5e3AobWUubmV4dChiKSl9Y2F0Y2goeCl7U2UoeCl9fWZ1bmN0aW9uIFYoYil7dHJ5e3AobWUudGhyb3coYikpfWNhdGNoKHgpe1NlKHgpfX1mdW5jdGlvbiBwKGIpe2IuZG9uZT9UZShiLnZh'@;
put 'bHVlKTpmdW5jdGlvbiBfZShUZSl7cmV0dXJuIFRlIGluc3RhbmNlb2YgbGU/VGU6bmV3IGxlKGZ1bmN0aW9uKFNlKXtTZShUZSl9KX0oYi52YWx1ZSkudGhlbihqZSxWKX1wKChtZT1tZS5hcHBseShuZSxpZXx8W10pKS5uZXh0KCkpfSl9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2Vz'@;
put 'TW9kdWxlIix7dmFsdWU6ITB9KSxYLnRocm93SWZFcnJvcj1YLlJlcXVlc3RDbGllbnQ9dm9pZCAwO2NvbnN0IEY9dyh5KDgzNzMpKSxPPXkoMTUyNyksej15KDEzOTUpLE49eSgyODEzKSxMPXkoOTc3OCksSz15KDk1MjYpLFU9eSg1OTI4KSxXPXkoMTAwNSksWT15KDk1MzkpO1guUmVxdWVz'@;
put 'dENsaWVudD1jbGFzcyBxe2NvbnN0cnVjdG9yKGllLGxlLG1lLF9lKXt0aGlzLmJhc2VVcmw9aWUsdGhpcy5yZXF1ZXN0cz1bXSx0aGlzLnJlcXVlc3RzTGltaXQ9MTAsdGhpcy52ZXJib3NlTW9kZT0hMSx0aGlzLmNzcmZUb2tlbj17aGVhZGVyTmFtZToiIix2YWx1ZToiIn0sdGhpcy5nZXRS'@;
put 'ZXF1ZXN0cz0oKT0+dGhpcy5yZXF1ZXN0cyx0aGlzLmNsZWFyUmVxdWVzdHM9KCk9Pnt0aGlzLnJlcXVlc3RzPVtdfSx0aGlzLmF1dGhvcml6ZT1UZT0+UCh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7bGV0IFNlPW51bGw7Y29uc3QgamU9e30sVj1UZS5zcGxpdCgiPGJvZHk+Iilb'@;
put 'MV0uc3BsaXQoIjwvYm9keT4iKVswXSxwPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3AuaW5uZXJIVE1MPVY7Y29uc3QgYj1wLnF1ZXJ5U2VsZWN0b3IoIiNhcHBsaWNhdGlvbl9hdXRob3JpemF0aW9uIik7U2U9Yj90aGlzLmJhc2VVcmwrYi5nZXRBdHRyaWJ1dGUoImFjdGlvbiIp'@;
put 'Om51bGw7Y29uc3QgeD1iPy5xdWVyeVNlbGVjdG9yQWxsKCJpbnB1dCIpO2Zvcihjb25zdCBIIG9mIHgpInVzZXJfb2F1dGhfYXBwcm92YWwiPT09SC5uYW1lJiYoSC52YWx1ZT0idHJ1ZSIpLGplW0gubmFtZV09SC52YWx1ZTtjb25zdCBDPU9iamVjdC5rZXlzKGplKS5maW5kKEg9Pkg/LnRv'@;
put 'TG93ZXJDYXNlKCkuaW5jbHVkZXMoImNzcmYiKSk7QyYmKHRoaXMuY3NyZlRva2VuLnZhbHVlPWplW0NdLHRoaXMuY3NyZlRva2VuLmhlYWRlck5hbWU9dGhpcy5jc3JmVG9rZW4uaGVhZGVyTmFtZXx8IngtY3NyZi10b2tlbiIpO2NvbnN0IFQ9bmV3IEZvcm1EYXRhO2Zvcihjb25zdCBIIGlu'@;
put 'IGplKWplLmhhc093blByb3BlcnR5KEgpJiZULmFwcGVuZChILGplW0hdKTtpZighU2UpdGhyb3cgbmV3IEVycm9yKCJBdXRoIEZvcm0gVVJMIGlzIG51bGwgb3IgdW5kZWZpbmVkLiIpO3JldHVybiB5aWVsZCB0aGlzLmh0dHBDbGllbnQucG9zdChTZSxULHtyZXNwb25zZVR5cGU6InRleHQi'@;
put 'LGhlYWRlcnM6e0FjY2VwdDoiKi8qIiwiQ29udGVudC1UeXBlIjoidGV4dC9wbGFpbiJ9fSkudGhlbihIPT5ILmRhdGEpLmNhdGNoKEg9PnsoSS5sb2dnZXJ8fF8pLmVycm9yKEgpfSl9KSx0aGlzLnByZXR0aWZ5U3RyaW5nPVRlPT4oMCxZLmluc3BlY3QpKFRlLHtjb2xvcnM6ImJsZWFjaGVk'@;
put 'IiE9PXRoaXMudmVyYm9zZU1vZGV9KSx0aGlzLnBhcnNlSW50ZXJjZXB0ZWRCb2R5PVRlPT57aWYoIVRlKXJldHVybiIiO2xldCBTZTtpZigic3RyaW5nIj09dHlwZW9mIFRlKXRyeXtTZT1KU09OLnBhcnNlKFRlKX1jYXRjaHtTZT1UZX1lbHNlIFNlPVRlO2NvbnN0IGplPXRoaXMucHJldHRp'@;
put 'ZnlTdHJpbmcoU2UpLnNwbGl0KCJcbiIpO3JldHVybiBqZS5sZW5ndGg+NTEmJihqZS5zcGxpY2UoNTApLGplLnB1c2goIi4uLiIpKSxqZS5qb2luKCJcbiIpfSx0aGlzLmhhbmRsZUF4aW9zUmVzcG9uc2U9VGU9Pnt2YXIgU2UsamUsVixwO2NvbnN0e3N0YXR1czpiLGNvbmZpZzp4LHJlcXVl'@;
put 'c3Q6QyxkYXRhOlR9PVRlLEg9bnVsbCE9PShTZT1DPy5faGVhZGVyKSYmdm9pZCAwIT09U2U/U2U6Ik5vdCBwcm92aWRlZFxuIixqPW51bGwhPT0oVj1udWxsPT09KGplPUM/LnJlcyl8fHZvaWQgMD09PWplP3ZvaWQgMDpqZS5yYXdIZWFkZXJzKSYmdm9pZCAwIT09Vj9WOlsiTm90IHByb3Zp'@;
put 'ZGVkIl0sRT10aGlzLmZvcm1hdEhlYWRlcnMoaiksbT10aGlzLnBhcnNlSW50ZXJjZXB0ZWRCb2R5KFQpO3JldHVybiBudWxsPT09KHA9SS5sb2dnZXIpfHx2b2lkIDA9PT1wfHxwLmluZm8oYEhUVFAgUmVxdWVzdCAoZmlyc3QgNTAgbGluZXMpOlxuJHtIfSR7dGhpcy5wYXJzZUludGVyY2Vw'@;
put 'dGVkQm9keSh4LmRhdGEpfVxuXG5IVFRQIFJlc3BvbnNlIENvZGU6ICR7dGhpcy5wcmV0dGlmeVN0cmluZyhiKX1cblxuSFRUUCBSZXNwb25zZSAoZmlyc3QgNTAgbGluZXMpOlxuJHtFfSR7bT9gXG5cbiR7bX1gOiIifVxuYCksVGV9LHRoaXMuaGFuZGxlQXhpb3NFcnJvcj1UZT0+e3ZhciBT'@;
put 'ZSxqZSxWLHAsYix4O2NvbnN0IEM9Ik5vdCBwcm92aWRlZCIse3Jlc3BvbnNlOlQscmVxdWVzdDpILGNvbmZpZzpqfT1UZTtsZXQgRT17X2hlYWRlcjpgJHtDfVxuYCxyZXM6e3Jhd0hlYWRlcnM6W0NdfX07SCYmKEU9e19oZWFkZXI6bnVsbCE9PShWPW51bGwhPT0oU2U9SC5faGVhZGVyKSYm'@;
put 'dm9pZCAwIT09U2U/U2U6bnVsbD09PShqZT1ILl9jdXJyZW50UmVxdWVzdCl8fHZvaWQgMD09PWplP3ZvaWQgMDpqZS5faGVhZGVyKSYmdm9pZCAwIT09Vj9WOkMscmVzOntyYXdIZWFkZXJzOm51bGwhPT0oYj1udWxsPT09KHA9SC5yZXMpfHx2b2lkIDA9PT1wP3ZvaWQgMDpwLnJhd0hlYWRl'@;
put 'cnMpJiZ2b2lkIDAhPT1iP2I6W0NdfX0pO2xldCBtPVR8fHtzdGF0dXM6QyxyZXF1ZXN0OkUsY29uZmlnOmp8fHtkYXRhOkMsaGVhZGVyczp7fX0sZGF0YTpDfTtjb25zdHtzdGF0dXM6QSxyZXF1ZXN0OmFlLGRhdGE6dGV9PW0se19oZWFkZXI6c2UscmVzOndlfT1hZSxVZT10aGlzLmZvcm1h'@;
put 'dEhlYWRlcnMod2UucmF3SGVhZGVycyksSmU9dGhpcy5wYXJzZUludGVyY2VwdGVkQm9keSh0ZSk7cmV0dXJuIG51bGw9PT0oeD1JLmxvZ2dlcil8fHZvaWQgMD09PXh8fHguaW5mbyhgSFRUUCBSZXF1ZXN0IChmaXJzdCA1MCBsaW5lcyk6XG4ke3NlfSR7dGhpcy5wYXJzZUludGVyY2VwdGVk'@;
put 'Qm9keShqPy5kYXRhKX1cblxuSFRUUCBSZXNwb25zZSBDb2RlOiAke3RoaXMucHJldHRpZnlTdHJpbmcoQSl9XG5cbkhUVFAgUmVzcG9uc2UgKGZpcnN0IDUwIGxpbmVzKTpcbiR7VWV9JHtKZT9gXG5cbiR7SmV9YDoiIn1cbmApLFRlfSx0aGlzLmZvcm1hdEhlYWRlcnM9VGU9PlRlLnJlZHVj'@;
put 'ZSgoU2UsamUsVik9PlNlKyhWJTI9PTA/YCR7MD09PVY/IiI6IlxuIn0ke2plfWA6YDogJHtqZX1gKSwiIiksdGhpcy5zZXRWZXJib3NlTW9kZT1UZT0+e3RoaXMudmVyYm9zZU1vZGU9VGUsdGhpcy52ZXJib3NlTW9kZT90aGlzLmVuYWJsZVZlcmJvc2VNb2RlKCk6dGhpcy5kaXNhYmxlVmVy'@;
put 'Ym9zZU1vZGUoKX0sdGhpcy5lbmFibGVWZXJib3NlTW9kZT0oVGU9dGhpcy5oYW5kbGVBeGlvc1Jlc3BvbnNlLFNlPXRoaXMuaGFuZGxlQXhpb3NFcnJvcik9Pnt0aGlzLmh0dHBJbnRlcmNlcHRvcj10aGlzLmh0dHBDbGllbnQuaW50ZXJjZXB0b3JzLnJlc3BvbnNlLnVzZShUZSxTZSl9LHRo'@;
put 'aXMuZGlzYWJsZVZlcmJvc2VNb2RlPSgpPT57dGhpcy5odHRwSW50ZXJjZXB0b3ImJnRoaXMuaHR0cENsaWVudC5pbnRlcmNlcHRvcnMucmVzcG9uc2UuZWplY3QodGhpcy5odHRwSW50ZXJjZXB0b3IpfSx0aGlzLmdldEhlYWRlcnM9KFRlLFNlKT0+e2NvbnN0IGplPXt9O3JldHVybiJhcHBs'@;
put 'aWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiIT09U2UmJihqZVsiQ29udGVudC1UeXBlIl09U2UpLGplLkFjY2VwdD0iYXBwbGljYXRpb24vanNvbiI9PT1TZT8iYXBwbGljYXRpb24vanNvbiI6IiovKiIsVGUmJihqZS5BdXRob3JpemF0aW9uPWBCZWFyZXIgJHtUZX1gKSx0aGlzLmNz'@;
put 'cmZUb2tlbi5oZWFkZXJOYW1lJiZ0aGlzLmNzcmZUb2tlbi52YWx1ZSYmKGplW3RoaXMuY3NyZlRva2VuLmhlYWRlck5hbWVdPXRoaXMuY3NyZlRva2VuLnZhbHVlKSxqZX0sdGhpcy5wYXJzZUFuZFNldEZpbGVVcGxvYWRDc3JmVG9rZW49VGU9Pntjb25zdCBTZT10aGlzLnBhcnNlQ3NyZlRv'@;
put 'a2VuKFRlKTtTZSYmKHRoaXMuZmlsZVVwbG9hZENzcmZUb2tlbj1TZSl9LHRoaXMucGFyc2VBbmRTZXRDc3JmVG9rZW49VGU9Pntjb25zdCBTZT10aGlzLnBhcnNlQ3NyZlRva2VuKFRlKTtTZSYmKHRoaXMuY3NyZlRva2VuPVNlKX0sdGhpcy5wYXJzZUNzcmZUb2tlbj1UZT0+e3ZhciBTZTtj'@;
put 'b25zdCBqZT1udWxsPT09KFNlPVRlLmhlYWRlcnNbIngtY3NyZi1oZWFkZXIiXSl8fHZvaWQgMD09PVNlP3ZvaWQgMDpTZS50b0xvd2VyQ2FzZSgpO2lmKGplKXJldHVybntoZWFkZXJOYW1lOmplLHZhbHVlOlRlLmhlYWRlcnNbamVdfHwiIn19LHRoaXMuaGFuZGxlRXJyb3I9KFRlLFNlLGpl'@;
put 'PSExKT0+UCh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3QgVj1UZS5yZXNwb25zZTtpZihUZSBpbnN0YW5jZW9mIHouQXV0aG9yaXplRXJyb3Ipe2NvbnN0IHA9eWllbGQgdGhpcy5odHRwQ2xpZW50LmdldChUZS5jb25maXJtVXJsLHtyZXNwb25zZVR5cGU6InRleHQiLGhl'@;
put 'YWRlcnM6eyJDb250ZW50LVR5cGUiOiJ0ZXh0L3BsYWluIixBY2NlcHQ6IiovKiJ9fSkuY2F0Y2goYj0+e3Rocm93KDAsTC5wcmVmaXhNZXNzYWdlKShiLCJFcnJvciB3aGlsZSBnZXR0aW5nIGVycm9yIGNvbmZpcm1VcmwuICIpfSk7cmV0dXJuKDAsTy5pc0F1dGhvcml6ZUZvcm1SZXF1aXJl'@;
put 'ZCkocD8uZGF0YSkmJih5aWVsZCB0aGlzLmF1dGhvcml6ZShwLmRhdGEpLmNhdGNoKGI9Pnt0aHJvdygwLEwucHJlZml4TWVzc2FnZSkoYiwiRXJyb3Igd2hpbGUgYXV0aG9yaXppbmcgcmVxdWVzdC4gIil9KSkseWllbGQgU2UoKS5jYXRjaChiPT57dGhyb3coMCxMLnByZWZpeE1lc3NhZ2Up'@;
put 'KGIsIkVycm9yIHdoaWxlIGV4ZWN1dGluZyBjYWxsYmFjayBpbiBoYW5kbGVFcnJvci4gIil9KX1pZihUZSBpbnN0YW5jZW9mIHouTG9naW5SZXF1aXJlZEVycm9yKXRocm93IHRoaXMuY2xlYXJDc3JmVG9rZW5zKCksVGU7aWYoVGUgaW5zdGFuY2VvZiBXLkludmFsaWRTQVNqc0NzcmZFcnJv'@;
put 'cilyZXR1cm4geWllbGQgdGhpcy5odHRwQ2xpZW50LmdldCgiLyIse3dpdGhYU1JGVG9rZW46ITB9KS50aGVuKHA9Pnt2YXIgYjtjb25zdCB4PW51bGw9PT0oYj0vPHNjcmlwdD5kb2N1bWVudC5jb29raWUgPSAnKFhTUkYtVE9LRU49Lio7IE1heC1BZ2U9ODY0MDA7IFNhbWVTaXRlPVN0cmlj'@;
put 'dDsgUGF0aD1cLzspJzxcL3NjcmlwdD4vLmV4ZWMocC5kYXRhKSl8fHZvaWQgMD09PWI/dm9pZCAwOmJbMV07eCYmKGRvY3VtZW50LmNvb2tpZT14KX0pLmNhdGNoKHA9Pnt0aHJvdygwLEwucHJlZml4TWVzc2FnZSkocCwiRXJyb3Igd2hpbGUgcmUtZmV0Y2hpbmcgQ1NSRiB0b2tlbi4iKX0p'@;
put 'LHlpZWxkIFNlKCkuY2F0Y2gocD0+e3Rocm93KDAsTC5wcmVmaXhNZXNzYWdlKShwLCJFcnJvciB3aGlsZSBleGVjdXRpbmcgY2FsbGJhY2sgaW4gaGFuZGxlRXJyb3IuICIpfSk7aWYoNDAzPT09Vj8uc3RhdHVzfHw0NDk9PT1WPy5zdGF0dXMpe2lmKHRoaXMucGFyc2VBbmRTZXRDc3JmVG9r'@;
put 'ZW4oViksdGhpcy5jc3JmVG9rZW4uaGVhZGVyTmFtZSYmdGhpcy5jc3JmVG9rZW4udmFsdWUpcmV0dXJuIHlpZWxkIFNlKCkuY2F0Y2gocD0+e3Rocm93KDAsTC5wcmVmaXhNZXNzYWdlKShwLCJFcnJvciB3aGlsZSBleGVjdXRpbmcgY2FsbGJhY2sgaW4gaGFuZGxlRXJyb3IuICIpfSk7dGhy'@;
put 'b3cgVGV9aWYoNDA0PT09Vj8uc3RhdHVzKXRocm93IG5ldyB6Lk5vdEZvdW5kRXJyb3IoVi5jb25maWcudXJsKTtpZig1MDIhPT1WPy5zdGF0dXMpdGhyb3cgVGUuaXNBeGlvc0Vycm9yJiYiVU5BQkxFX1RPX1ZFUklGWV9MRUFGX1NJR05BVFVSRSI9PT1UZS5jb2RlP25ldyB6LkNlcnRpZmlj'@;
put 'YXRlRXJyb3IoVGUubWVzc2FnZSk6VGUubWVzc2FnZT9UZTooMCxMLnByZWZpeE1lc3NhZ2UpKFRlLCJFcnJvciB3aGlsZSBoYW5kbGluZyBlcnJvci4gIik7aWYoamUpdGhyb3cgbmV3IHouSW50ZXJuYWxTZXJ2ZXJFcnJvcn0pLHRoaXMuY3JlYXRlSHR0cENsaWVudChpZSxsZSksbWUmJih0'@;
put 'aGlzLnJlcXVlc3RzTGltaXQ9bWUpLF9lJiYodGhpcy5zZXRWZXJib3NlTW9kZShfZSksdGhpcy5lbmFibGVWZXJib3NlTW9kZSgpKX1zZXRDb25maWcoaWUsbGUpe3RoaXMuY3JlYXRlSHR0cENsaWVudChpZSxsZSl9c2F2ZUxvY2FsU3RvcmFnZVRva2VuKGllLGxlKXtsb2NhbFN0b3JhZ2Uu'@;
put 'c2V0SXRlbSgiYWNjZXNzVG9rZW4iLGllKSxsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgicmVmcmVzaFRva2VuIixsZSl9Z2V0Q3NyZlRva2VuKGllPSJnZW5lcmFsIil7cmV0dXJuImZpbGUiPT09aWU/dGhpcy5maWxlVXBsb2FkQ3NyZlRva2VuOnRoaXMuY3NyZlRva2VufWNsZWFyQ3NyZlRva2Vu'@;
put 'cygpe3RoaXMuY3NyZlRva2VuPXtoZWFkZXJOYW1lOiIiLHZhbHVlOiIifSx0aGlzLmZpbGVVcGxvYWRDc3JmVG9rZW49e2hlYWRlck5hbWU6IiIsdmFsdWU6IiJ9fWNsZWFyTG9jYWxTdG9yYWdlVG9rZW5zKCl7bG9jYWxTdG9yYWdlLnNldEl0ZW0oImFjY2Vzc1Rva2VuIiwiIiksbG9jYWxT'@;
put 'dG9yYWdlLnNldEl0ZW0oInJlZnJlc2hUb2tlbiIsIiIpfWdldEJhc2VVcmwoKXtyZXR1cm4gdGhpcy5odHRwQ2xpZW50LmRlZmF1bHRzLmJhc2VVUkx8fCIifWFwcGVuZFJlcXVlc3QoaWUsbGUsbWUpe2xldCBfZT0iIixUZT0iIixTZT1udWxsO21lJiYoaWU/LmxvZz8oX2U9KDAsVS5wYXJz'@;
put 'ZVNvdXJjZUNvZGUpKGllLmxvZyksVGU9KDAsVS5wYXJzZUdlbmVyYXRlZENvZGUpKGllLmxvZyksU2U9aWU/LnJlc3VsdD9pZS5yZXN1bHQuV09SSzppZS5sb2cpOmllPy5yZXN1bHQmJigic3RyaW5nIj09dHlwZW9mIGllLnJlc3VsdCYmKF9lPSgwLFUucGFyc2VTb3VyY2VDb2RlKShpZS5y'@;
put 'ZXN1bHQpLFRlPSgwLFUucGFyc2VHZW5lcmF0ZWRDb2RlKShpZS5yZXN1bHQpKSxTZT1pZS5yZXN1bHQuV09SSykpO2NvbnN0IGplPSJzdHJpbmciPT10eXBlb2YgaWU/LnJlc3VsdD9pZT8ucmVzdWx0OkpTT04uc3RyaW5naWZ5KGllPy5yZXN1bHQsbnVsbCwyKTt0aGlzLnJlcXVlc3RzLnB1'@;
put 'c2goe2xvZ0ZpbGU6aWU/LmxvZ3x8amV8fGllLHNlcnZpY2VMaW5rOmxlLHRpbWVzdGFtcDpuZXcgRGF0ZSxzb3VyY2VDb2RlOl9lLGdlbmVyYXRlZENvZGU6VGUsU0FTV09SSzpTZX0pLHRoaXMucmVxdWVzdHMubGVuZ3RoPnRoaXMucmVxdWVzdHNMaW1pdCYmdGhpcy5yZXF1ZXN0cy5zcGxp'@;
put 'Y2UoMCwxKX1nZXQoaWUsbGUsbWU9ImFwcGxpY2F0aW9uL2pzb24iLF9lPXt9LFRlPSExKXtyZXR1cm4gUCh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3QgamU9e2hlYWRlcnM6T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHRoaXMuZ2V0SGVhZGVycyhsZSxtZSkp'@;
put 'LF9lKSxyZXNwb25zZVR5cGU6InRleHQvcGxhaW4iPT09bWU/InRleHQiOiJqc29uIix3aXRoWFNSRlRva2VuOiEwfTtyZXR1cm4idGV4dC9wbGFpbiI9PT1tZSYmKGplLnRyYW5zZm9ybVJlc3BvbnNlPXZvaWQgMCksdGhpcy5odHRwQ2xpZW50LmdldChpZSxqZSkudGhlbihWPT4oKDAsWC50'@;
put 'aHJvd0lmRXJyb3IpKFYpLHRoaXMucGFyc2VSZXNwb25zZShWKSkpLmNhdGNoKFY9PlAodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiB5aWVsZCB0aGlzLmhhbmRsZUVycm9yKFYsKCk9PnRoaXMuZ2V0KGllLGxlLG1lLF9lKS5jYXRjaChwPT57dGhyb3coMCxMLnByZWZp'@;
put 'eE1lc3NhZ2UpKHAsIkVycm9yIHdoaWxlIGV4ZWN1dGluZyBoYW5kbGUgZXJyb3IgY2FsbGJhY2suICIpfSksVGUpfSkpfSl9cG9zdChpZSxsZSxtZSxfZT0iYXBwbGljYXRpb24vanNvbiIsVGU9e30sU2U9e30pe3JldHVybiBQKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25z'@;
put 'dCBqZT1PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdGhpcy5nZXRIZWFkZXJzKG1lLF9lKSksVGUpO3JldHVybiB0aGlzLmh0dHBDbGllbnQucG9zdChpZSxsZSxPYmplY3QuYXNzaWduKHtoZWFkZXJzOmplLHdpdGhYU1JGVG9rZW46ITB9LFNlKSkudGhlbihWPT4oKDAsWC50aHJv'@;
put 'd0lmRXJyb3IpKFYpLHRoaXMucGFyc2VSZXNwb25zZShWKSkpLmNhdGNoKFY9PlAodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiB5aWVsZCB0aGlzLmhhbmRsZUVycm9yKFYsKCk9PnRoaXMucG9zdChpZSxsZSxtZSxfZSxUZSkpfSkpfSl9cHV0KGllLGxlLG1lLF9lPXt9'@;
put 'KXtyZXR1cm4gUCh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3QgVGU9T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHRoaXMuZ2V0SGVhZGVycyhtZSwiYXBwbGljYXRpb24vanNvbiIpKSxfZSk7cmV0dXJuIHRoaXMuaHR0cENsaWVudC5wdXQoaWUsbGUse2hlYWRl'@;
put 'cnM6VGUsd2l0aFhTUkZUb2tlbjohMH0pLnRoZW4oU2U9PigoMCxYLnRocm93SWZFcnJvcikoU2UpLHRoaXMucGFyc2VSZXNwb25zZShTZSkpKS5jYXRjaChTZT0+UCh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIHlpZWxkIHRoaXMuaGFuZGxlRXJyb3IoU2UsKCk9PnRo'@;
put 'aXMucHV0KGllLGxlLG1lLF9lKSl9KSl9KX1kZWxldGUoaWUsbGUpe3JldHVybiBQKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdCBtZT10aGlzLmdldEhlYWRlcnMobGUsImFwcGxpY2F0aW9uL2pzb24iKTtyZXR1cm4gdGhpcy5odHRwQ2xpZW50LmRlbGV0ZShpZSx7aGVh'@;
put 'ZGVyczptZSx3aXRoWFNSRlRva2VuOiEwfSkudGhlbihfZT0+KCgwLFgudGhyb3dJZkVycm9yKShfZSksdGhpcy5wYXJzZVJlc3BvbnNlKF9lKSkpLmNhdGNoKF9lPT5QKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4geWllbGQgdGhpcy5oYW5kbGVFcnJvcihfZSwoKT0+'@;
put 'dGhpcy5kZWxldGUoaWUsbGUpKX0pKX0pfXBhdGNoKGllLGxlPXt9LG1lKXtyZXR1cm4gUCh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3QgX2U9dGhpcy5nZXRIZWFkZXJzKG1lLCJhcHBsaWNhdGlvbi9qc29uIik7cmV0dXJuIHRoaXMuaHR0cENsaWVudC5wYXRjaChpZSxs'@;
put 'ZSx7aGVhZGVyczpfZSx3aXRoWFNSRlRva2VuOiEwfSkudGhlbihUZT0+KCgwLFgudGhyb3dJZkVycm9yKShUZSksdGhpcy5wYXJzZVJlc3BvbnNlKFRlKSkpLmNhdGNoKFRlPT5QKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4geWllbGQgdGhpcy5oYW5kbGVFcnJvcihU'@;
put 'ZSwoKT0+dGhpcy5wYXRjaChpZSxsZSxtZSkpfSkpfSl9dXBsb2FkRmlsZShpZSxsZSxtZSl7dmFyIF9lO3JldHVybiBQKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdCBUZT10aGlzLmdldEhlYWRlcnMobWUsImFwcGxpY2F0aW9uL2pzb24iKTtudWxsIT09KF9lPXRoaXMu'@;
put 'ZmlsZVVwbG9hZENzcmZUb2tlbikmJnZvaWQgMCE9PV9lJiZfZS52YWx1ZSYmKFRlW3RoaXMuZmlsZVVwbG9hZENzcmZUb2tlbi5oZWFkZXJOYW1lXT10aGlzLmZpbGVVcGxvYWRDc3JmVG9rZW4udmFsdWUpO3RyeXtjb25zdCBTZT15aWVsZCB0aGlzLmh0dHBDbGllbnQucG9zdChpZSxsZSx7'@;
put 'aGVhZGVyczpUZSx0cmFuc2Zvcm1SZXF1ZXN0OmplPT5qZX0pO3JldHVybntyZXN1bHQ6U2UuZGF0YSxldGFnOlNlLmhlYWRlcnMuZXRhZ319Y2F0Y2goU2Upe2NvbnN0IGplPVNlLnJlc3BvbnNlO2lmKDQwMz09PWplPy5zdGF0dXN8fDQ0OT09PWplPy5zdGF0dXMpe2lmKHRoaXMucGFyc2VB'@;
put 'bmRTZXRGaWxlVXBsb2FkQ3NyZlRva2VuKGplKSx0aGlzLmZpbGVVcGxvYWRDc3JmVG9rZW4pcmV0dXJuIHRoaXMudXBsb2FkRmlsZShpZSxsZSxtZSk7dGhyb3cgU2V9dGhyb3cgU2V9fSl9cGFyc2VSZXNwb25zZShpZSl7Y29uc3QgbGU9aWU/LmhlYWRlcnM/aWUuaGVhZGVycy5ldGFnOiIi'@;
put 'O2xldCBtZSxfZT0hMTt0cnl7bWU9InN0cmluZyI9PXR5cGVvZiBpZS5kYXRhP0pTT04ucGFyc2UoaWUuZGF0YSk6aWUuZGF0YX1jYXRjaHt0cnl7bWU9SlNPTi5wYXJzZSgoMCxOLnBhcnNlV2Vib3V0UmVzcG9uc2UpKGllLmRhdGEpKX1jYXRjaHttZT1pZS5kYXRhfV9lPSEwfWxldCBUZT17'@;
put 'cmVzdWx0Om1lLGV0YWc6bGUsc3RhdHVzOmllLnN0YXR1c307cmV0dXJuIF9lJiYoVGUubG9nPWllLmRhdGEpLFRlfWNyZWF0ZUh0dHBDbGllbnQoaWUsbGUpe2NvbnN0IG1lPWxlP25ldyBGLkFnZW50KGxlKTp2b2lkIDA7dGhpcy5odHRwQ2xpZW50PSgwLFUuY3JlYXRlQXhpb3NJbnN0YW5j'@;
put 'ZSkoaWUsbWUpLHRoaXMuaHR0cENsaWVudC5kZWZhdWx0cy52YWxpZGF0ZVN0YXR1cz1fZT0+X2U+PTIwMCYmX2U8PTQwMX19LFgudGhyb3dJZkVycm9yPW5lPT57dmFyIGllLGxlLG1lLF9lLFRlLFNlLGplO3N3aXRjaChuZS5zdGF0dXMpe2Nhc2UgNDAwOmlmKCJvYmplY3QiPT10eXBlb2Yg'@;
put 'bmUuZGF0YSYmImludmFsaWRfZ3JhbnQiPT09bmUuZGF0YS5lcnJvcil0aHJvdyBuZXcgei5Mb2dpblJlcXVpcmVkRXJyb3IobmUuZGF0YSk7aWYoInN0cmluZyI9PXR5cGVvZiBuZS5kYXRhJiYiaW52YWxpZCBjc3JmIHRva2VuISI9PT1uZS5kYXRhLnRvTG93ZXJDYXNlKCkpdGhyb3cgbmV3'@;
put 'IFcuSW52YWxpZFNBU2pzQ3NyZkVycm9yO2JyZWFrO2Nhc2UgNDAxOnRocm93Im9iamVjdCI9PXR5cGVvZiBuZS5kYXRhP25ldyB6LkxvZ2luUmVxdWlyZWRFcnJvcihuZS5kYXRhKTpuZXcgei5Mb2dpblJlcXVpcmVkRXJyb3J9aWYobnVsbCE9PShsZT1udWxsPT09KGllPW5lLmRhdGEpfHx2'@;
put 'b2lkIDA9PT1pZT92b2lkIDA6aWUuZW50aXR5SUQpJiZ2b2lkIDAhPT1sZSYmbGUuaW5jbHVkZXMoImxvZ2luIikpdGhyb3cgbmV3IHouTG9naW5SZXF1aXJlZEVycm9yO2lmKCJzdHJpbmciPT10eXBlb2YgbmUuZGF0YSYmKDAsTy5pc0F1dGhvcml6ZUZvcm1SZXF1aXJlZCkobmUuZGF0YSkp'@;
put 'dGhyb3cgbmV3IHouQXV0aG9yaXplRXJyb3IoIkF1dGhvcml6YXRpb24gcmVxdWlyZWQiLG5lLnJlcXVlc3QucmVzcG9uc2VVUkwpO2lmKCJzdHJpbmciPT10eXBlb2YgbmUuZGF0YSYmKDAsTy5pc0xvZ0luUmVxdWlyZWQpKG5lLmRhdGEpJiYobnVsbD09PShfZT1udWxsPT09KG1lPW5lLmNv'@;
put 'bmZpZyl8fHZvaWQgMD09PW1lP3ZvaWQgMDptZS51cmwpfHx2b2lkIDA9PT1fZXx8IV9lLmluY2x1ZGVzKCIvU0FTTG9nb24vbG9naW4iKSkpdGhyb3cgbmV3IHouTG9naW5SZXF1aXJlZEVycm9yO2lmKG51bGwhPT0oVGU9bmUuZGF0YSkmJnZvaWQgMCE9PVRlJiZUZS5hdXRoX3JlcXVlc3Qp'@;
put 'dGhyb3cgbmV3IHouQXV0aG9yaXplRXJyb3IobmUuZGF0YS5tZXNzYWdlLG5lLnJlcXVlc3QucmVzcG9uc2VVUkwpO2lmKG51bGwhPT0oamU9bnVsbD09PShTZT1uZS5jb25maWcpfHx2b2lkIDA9PT1TZT92b2lkIDA6U2UudXJsKSYmdm9pZCAwIT09amUmJmplLmluY2x1ZGVzKCJzYXNBdXRo'@;
put 'RXJyb3IiKSl0aHJvdyBuZXcgSy5TQVM5QXV0aEVycm9yO2NvbnN0IFY9SihuZS5kYXRhKTtpZihWKXRocm93IFZ9O2NvbnN0IEo9bmU9PntpZighbmUpcmV0dXJuIG51bGw7dHJ5e2NvbnN0IGllPUpTT04ucGFyc2UobmU/LnJlcGxhY2UoL1tcblxyXS9nLCIgIikpO2lmKGllLmVycm9yQ29k'@;
put 'ZSYmaWUubWVzc2FnZSlyZXR1cm4gbmV3IHouSm9iRXhlY3V0aW9uRXJyb3IoaWUuZXJyb3JDb2RlLGllLm1lc3NhZ2UsbmU/LnJlcGxhY2UoL1tcblxyXS9nLCIgIikpfWNhdGNoe310cnl7aWYobmU/LmluY2x1ZGVzKCd7ImVycm9yQ29kZScpKXtjb25zdCBsZT1uZS5zcGxpdCgneyJlcnJv'@;
put 'ckNvZGUnKTtpZihsZS5sZW5ndGg+MSl7Y29uc3QgbWU9J3siZXJyb3JDb2RlJytsZVsxXS5zcGxpdCgnIn0nKVswXSsnIn0nLF9lPUpTT04ucGFyc2UobWUucmVwbGFjZSgvW1xuXHJdL2csIiAiKSk7cmV0dXJuIG5ldyB6LkpvYkV4ZWN1dGlvbkVycm9yKF9lLmVycm9yQ29kZSxfZS5tZXNz'@;
put 'YWdlLG5lPy5yZXBsYWNlKC9bXG5ccl0vZywiXG4iKSl9fX1jYXRjaHt9dHJ5e2lmKG5lPy5tYXRjaCgvc3RvcmVkIHByb2Nlc3Mgbm90IGZvdW5kOiAvaSkpe2NvbnN0IGxlPW5lLnNwbGl0KC9zdG9yZWQgcHJvY2VzcyBub3QgZm91bmQ6IC9pKTtpZihsZS5sZW5ndGg+MSl7Y29uc3QgbWU9'@;
put 'bGVbMV0uc3BsaXQoIjxpPiIpWzFdLnNwbGl0KCI8L2k+IilbMF0sX2U9bWUuZW5kc1dpdGgoInJ1bm5lciIpPyJTQVNKUyBydW5uZXIgbm90IGZvdW5kLiBIZXJlJ3MgdGhlIGxpbmsgKGh0dHBzOi8vY2xpLnNhc2pzLmlvL2F1dGgvI3Nhc2pzLXJ1bm5lcikgdG8gdGhlIFNBUyBjb2RlIGZv'@;
put 'ciByZWdpc3RlcmluZyB0aGUgU0FTanMgcnVubmVyIjpgU3RvcmVkIHByb2Nlc3Mgbm90IGZvdW5kOiAke21lfWA7cmV0dXJuIG5ldyB6LkpvYkV4ZWN1dGlvbkVycm9yKDUwMCxfZSwiIil9fX1jYXRjaHt9dHJ5e2lmKCFuZT8ubWF0Y2goLz4+d2Vib3V0QkVHSU48PC8pJiZuZT8ubWF0Y2go'@;
put 'L1N0b3JlZCBQcm9jZXNzIEVycm9yL2kpJiZuZT8ubWF0Y2goL1RoaXMgcmVxdWVzdCBjb21wbGV0ZWQgd2l0aCBlcnJvcnMuL2kpKXtjb25zdCBsZT1uZS5zcGxpdCgiPGgyPlNBUyBMb2c8L2gyPiIpO2lmKGxlLmxlbmd0aD4xKXtjb25zdCBtZT1sZVsxXS5zcGxpdCgiPHByZT4iKVsxXS5z'@;
put 'cGxpdCgiPC9wcmU+IilbMF07cmV0dXJuIG5ldyB6LkpvYkV4ZWN1dGlvbkVycm9yKDUwMCwiVGhpcyByZXF1ZXN0IGNvbXBsZXRlZCB3aXRoIGVycm9ycy4iLG1lKX19fWNhdGNoe31yZXR1cm4gbnVsbH19LDc5NTpmdW5jdGlvbih1ZSxYLHkpeyJ1c2Ugc3RyaWN0Ijt2YXIgST10aGlzJiZ0'@;
put 'aGlzLl9fY3JlYXRlQmluZGluZ3x8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oTCxLLFUsVyl7dm9pZCAwPT09VyYmKFc9VSk7dmFyIFk9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihLLFUpOyghWXx8KCJnZXQiaW4gWT8hSy5fX2VzTW9kdWxlOlkud3JpdGFibGV8fFkuY29uZmln'@;
put 'dXJhYmxlKSkmJihZPXtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBLW1VdfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShMLFcsWSl9OmZ1bmN0aW9uKEwsSyxVLFcpe3ZvaWQgMD09PVcmJihXPVUpLExbV109S1tVXX0pLF89dGhpcyYmdGhpcy5fX3NldE1vZHVsZURlZmF1'@;
put 'bHR8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKEwsSyl7T2JqZWN0LmRlZmluZVByb3BlcnR5KEwsImRlZmF1bHQiLHtlbnVtZXJhYmxlOiEwLHZhbHVlOkt9KX06ZnVuY3Rpb24oTCxLKXtMLmRlZmF1bHQ9S30pLGc9dGhpcyYmdGhpcy5fX2ltcG9ydFN0YXJ8fGZ1bmN0aW9uKEwpe2lmKEwm'@;
put 'JkwuX19lc01vZHVsZSlyZXR1cm4gTDt2YXIgSz17fTtpZihudWxsIT1MKWZvcih2YXIgVSBpbiBMKSJkZWZhdWx0IiE9PVUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChMLFUpJiZJKEssTCxVKTtyZXR1cm4gXyhLLEwpLEt9LEI9dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8'@;
put 'fGZ1bmN0aW9uKEwsSyxVLFcpe3JldHVybiBuZXcoVXx8KFU9UHJvbWlzZSkpKGZ1bmN0aW9uKHEsZWUpe2Z1bmN0aW9uIEoobGUpe3RyeXtpZShXLm5leHQobGUpKX1jYXRjaChtZSl7ZWUobWUpfX1mdW5jdGlvbiBuZShsZSl7dHJ5e2llKFcudGhyb3cobGUpKX1jYXRjaChtZSl7ZWUobWUp'@;
put 'fX1mdW5jdGlvbiBpZShsZSl7bGUuZG9uZT9xKGxlLnZhbHVlKTpmdW5jdGlvbiBZKHEpe3JldHVybiBxIGluc3RhbmNlb2YgVT9xOm5ldyBVKGZ1bmN0aW9uKGVlKXtlZShxKX0pfShsZS52YWx1ZSkudGhlbihKLG5lKX1pZSgoVz1XLmFwcGx5KEwsS3x8W10pKS5uZXh0KCkpfSl9O09iamVj'@;
put 'dC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLlNhczlSZXF1ZXN0Q2xpZW50PXZvaWQgMDtjb25zdCB3PXkoODIyNCksUD1nKHkoNzg1NykpLEY9eSg5Nzc4KSxPPXkoNDU4OCksej15KDEzOTUpO1guU2FzOVJlcXVlc3RDbGllbnQ9Y2xhc3MgTiBleHRlbmRz'@;
put 'IE8uUmVxdWVzdENsaWVudHtjb25zdHJ1Y3RvcihLLFUpe3N1cGVyKEssVSksdGhpcy5odHRwQ2xpZW50LmRlZmF1bHRzLm1heFJlZGlyZWN0cz0wLHRoaXMuaHR0cENsaWVudC5kZWZhdWx0cy52YWxpZGF0ZVN0YXR1cz1XPT5XPj0yMDAmJlc8MzAzLHcud3JhcHBlciYmKCgwLHcud3JhcHBl'@;
put 'cikodGhpcy5odHRwQ2xpZW50KSx0aGlzLmh0dHBDbGllbnQuZGVmYXVsdHMuamFyPW5ldyBQLkNvb2tpZUphcil9bG9naW4oSyxVLFcpe3JldHVybiBCKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdCBZPWAvVXNlciBGb2xkZXJzLyR7S30vTXkgRm9sZGVyL3Nhc2pzL3J1'@;
put 'bm5lcmA7dGhpcy5odHRwQ2xpZW50LmRlZmF1bHRzLmphciYmKHRoaXMuaHR0cENsaWVudC5kZWZhdWx0cy5qYXIucmVtb3ZlQWxsQ29va2llcygpLHlpZWxkIHRoaXMuZ2V0KGAke1d9P19wcm9ncmFtPSR7WX0mX3VzZXJuYW1lPSR7S30mX3Bhc3N3b3JkPSR7VX1gLHZvaWQgMCwidGV4dC9w'@;
put 'bGFpbiIpKX0pfWdldChLLFUsVz0iYXBwbGljYXRpb24vanNvbiIsWT17fSxxPSExKXtyZXR1cm4gQih0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3QgSj17aGVhZGVyczpPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdGhpcy5nZXRIZWFkZXJzKFUsVykpLFkpLHJl'@;
put 'c3BvbnNlVHlwZToidGV4dC9wbGFpbiI9PT1XPyJ0ZXh0IjoianNvbiIsd2l0aFhTUkZUb2tlbjohMH07cmV0dXJuInRleHQvcGxhaW4iPT09VyYmKEoudHJhbnNmb3JtUmVzcG9uc2U9dm9pZCAwKSx0aGlzLmh0dHBDbGllbnQuZ2V0KEssSikudGhlbihuZT0+MzAyPT09bmUuc3RhdHVzP3Ro'@;
put 'aXMuZ2V0KG5lLmhlYWRlcnMubG9jYXRpb24sVSxXKTooKDAsTy50aHJvd0lmRXJyb3IpKG5lKSx0aGlzLnBhcnNlUmVzcG9uc2UobmUpKSkuY2F0Y2gobmU9PkIodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2lmKG5lIGluc3RhbmNlb2Ygei5Kb2JFeGVjdXRpb25FcnJvcil0aHJv'@;
put 'dyBuZTtyZXR1cm4geWllbGQgdGhpcy5oYW5kbGVFcnJvcihuZSwoKT0+dGhpcy5nZXQoSyxVLFcsWSkuY2F0Y2goaWU9Pnt0aHJvdygwLEYucHJlZml4TWVzc2FnZSkoaWUsIkVycm9yIHdoaWxlIGV4ZWN1dGluZyBoYW5kbGUgZXJyb3IgY2FsbGJhY2suICIpfSkscSkuY2F0Y2goaWU9Pnt0'@;
put 'aHJvdygwLEYucHJlZml4TWVzc2FnZSkoaWUsIkVycm9yIHdoaWxlIGhhbmRsaW5nIGVycm9yLiAiKX0pfSkpfSl9cG9zdChLLFUsVyxZPSJhcHBsaWNhdGlvbi9qc29uIixxPXt9KXtyZXR1cm4gQih0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3QgZWU9T2JqZWN0LmFzc2ln'@;
put 'bihPYmplY3QuYXNzaWduKHt9LHRoaXMuZ2V0SGVhZGVycyhXLFkpKSxxKTtyZXR1cm4gdGhpcy5odHRwQ2xpZW50LnBvc3QoSyxVLHtoZWFkZXJzOmVlLHdpdGhYU1JGVG9rZW46ITB9KS50aGVuKEo9PkIodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiAzMDI9PT1KLnN0'@;
put 'YXR1cz95aWVsZCB0aGlzLmdldChKLmhlYWRlcnMubG9jYXRpb24sdm9pZCAwLFkscSk6KCgwLE8udGhyb3dJZkVycm9yKShKKSx0aGlzLnBhcnNlUmVzcG9uc2UoSikpfSkpLmNhdGNoKEo9PkIodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiB5aWVsZCB0aGlzLmhhbmRs'@;
put 'ZUVycm9yKEosKCk9PnRoaXMucG9zdChLLFUsVyxZLHEpKX0pKX0pfX19LDM2MDI6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFguU0FTSlNfTE9HU19TRVBBUkFUT1I9WC5TYXNqc1JlcXVlc3RDbGllbnQ9'@;
put 'dm9pZCAwO2NvbnN0IEk9eSg0NTg4KTtYLlNhc2pzUmVxdWVzdENsaWVudD1jbGFzcyBfIGV4dGVuZHMgSS5SZXF1ZXN0Q2xpZW50e2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmdldEhlYWRlcnM9KEIsdyk9Pnt2YXIgUDtjb25zdCBGPXt9O3JldHVybiJhcHBsaWNh'@;
put 'dGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiIT09dyYmKEZbIkNvbnRlbnQtVHlwZSJdPXcpLEYuQWNjZXB0PSJhcHBsaWNhdGlvbi9qc29uIj09PXc/dzoiKi8qIiwhQiYmdHlwZW9mIHdpbmRvdzwidSImJihCPW51bGwhPT0oUD1sb2NhbFN0b3JhZ2UuZ2V0SXRlbSgiYWNjZXNzVG9rZW4i'@;
put 'KSkmJnZvaWQgMCE9PVA/UDp2b2lkIDApLEImJihGLkF1dGhvcml6YXRpb249YEJlYXJlciAke0J9YCksRn19cGFyc2VSZXNwb25zZShCKXtjb25zdCB3PUI/LmhlYWRlcnM/Qi5oZWFkZXJzLmV0YWc6IiI7bGV0IEYsTyx6LFA9e307dHJ5e1A9InN0cmluZyI9PXR5cGVvZiBCLmRhdGE/SlNP'@;
put 'Ti5wYXJzZShCLmRhdGEpOkIuZGF0YX1jYXRjaHtpZihCLmRhdGEuaW5jbHVkZXMoWC5TQVNKU19MT0dTX1NFUEFSQVRPUikpe2NvbnN0e2RhdGE6S309QixVPUsuc3BsaXQoWC5TQVNKU19MT0dTX1NFUEFSQVRPUik7Rj1VLnNwbGljZSgwLDEpWzBdLHZvaWQgMCE9PUYmJihQPUYpO2NvbnN0'@;
put 'IFc9VS5zcGxpY2UoMCxVLmxlbmd0aC0xKSxZPW5ldyBSZWdFeHAoYCR7WC5TQVNKU19MT0dTX1NFUEFSQVRPUn0kYCkscT1VWzBdO3EmJihZLnRlc3QoSyk/Vy5sZW5ndGg+MSYmVy5wdXNoKHEpOno9cSksTz1XLmpvaW4oWC5TQVNKU19MT0dTX1NFUEFSQVRPUil9ZWxzZSBQPUIuZGF0YX1j'@;
put 'b25zdCBOPXtyZXN1bHQ6UCxsb2c6T3x8IiIsZXRhZzp3LHN0YXR1czpCLnN0YXR1c307cmV0dXJuIHomJihOLnByaW50T3V0cHV0PXopLE59fSxYLlNBU0pTX0xPR1NfU0VQQVJBVE9SPSJTQVNKU19MT0dTX1NFUEFSQVRPUl8xNjNlZTE3YjZmZjI0ZjAyODkyODk3MmQ4MGEyNjc4NCJ9LDQ3'@;
put 'MDoodWUsWCk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSw0NjY2Oih1ZSxYKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9LDYxNzc6KHVlLFgpPT57'@;
put 'InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0sNTc2NjoodWUsWCk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSw0OTc1Oih1ZSxYKT0+eyJ1c2Ugc3RyaWN0'@;
put 'IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9LDIxNToodWUsWCk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSw0NzgyOih1ZSxYKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVm'@;
put 'aW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9LDQxNjg6KHVlLFgpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0sODUxNjoodWUsWCk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5'@;
put 'KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSwzODQwOih1ZSxYKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9LDMxNTM6KHVlLFgpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9k'@;
put 'dWxlIix7dmFsdWU6ITB9KX0sMTQyODoodWUsWCk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSw1ODQxOih1ZSxYKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgSSxfO09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxl'@;
put 'Iix7dmFsdWU6ITB9KSxYLkxvZ2luTWVjaGFuaXNtPVguU0FTanNDb25maWc9dm9pZCAwLFguU0FTanNDb25maWc9Y2xhc3MgeXtjb25zdHJ1Y3Rvcigpe3RoaXMuc2VydmVyVXJsPSIiLHRoaXMucGF0aFNBU0pTPSIiLHRoaXMucGF0aFNBUzk9IiIsdGhpcy5wYXRoU0FTVml5YT0iIix0aGlz'@;
put 'LmFwcExvYz0iIix0aGlzLnNlcnZlclR5cGU9bnVsbCx0aGlzLmRlYnVnPSEwLHRoaXMudmVyYm9zZT0hMCx0aGlzLmNvbnRleHROYW1lPSIiLHRoaXMudXNlQ29tcHV0ZUFwaT1udWxsLHRoaXMubG9naW5NZWNoYW5pc209SS5EZWZhdWx0LHRoaXMucmVxdWVzdEhpc3RvcnlMaW1pdD0xMH19'@;
put 'LChfPUk9WC5Mb2dpbk1lY2hhbmlzbXx8KFguTG9naW5NZWNoYW5pc209e30pKS5EZWZhdWx0PSJEZWZhdWx0IixfLlJlZGlyZWN0ZWQ9IlJlZGlyZWN0ZWQifSw2MDM4Oih1ZSxYKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgSTtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3Zh'@;
put 'bHVlOiEwfSksWC5TZXNzaW9uU3RhdGU9dm9pZCAwLChJPVguU2Vzc2lvblN0YXRlfHwoWC5TZXNzaW9uU3RhdGU9e30pKS5Db21wbGV0ZWQ9ImNvbXBsZXRlZCIsSS5SdW5uaW5nPSJydW5uaW5nIixJLlBlbmRpbmc9InBlbmRpbmciLEkuSWRsZT0iaWRsZSIsSS5VbmF2YWlsYWJsZT0idW5h'@;
put 'dmFpbGFibGUiLEkuTm9TdGF0ZT0iIixJLkZhaWxlZD0iZmFpbGVkIixJLkVycm9yPSJlcnJvciJ9LDk0OTM6KHVlLFgpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0sODY1MDoodWUsWCk9PnsidXNlIHN0cmljdCI7T2Jq'@;
put 'ZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSwxMjQ6KHVlLFgpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLkF1dGhvcml6ZUVycm9yPXZvaWQgMDtjbGFzcyB5IGV4dGVuZHMgRXJy'@;
put 'b3J7Y29uc3RydWN0b3IoXyxnKXtzdXBlcihfKSx0aGlzLm1lc3NhZ2U9Xyx0aGlzLmNvbmZpcm1Vcmw9Zyx0aGlzLm5hbWU9IkF1dGhvcml6ZUVycm9yIixPYmplY3Quc2V0UHJvdG90eXBlT2YodGhpcyx5LnByb3RvdHlwZSl9fVguQXV0aG9yaXplRXJyb3I9eX0sOTQ2NToodWUsWCk9Pnsi'@;
put 'dXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFguQ2VydGlmaWNhdGVFcnJvcj12b2lkIDA7Y2xhc3MgSSBleHRlbmRzIEVycm9ye2NvbnN0cnVjdG9yKGcpe3N1cGVyKGAke2d9XG5QbGVhc2UgdmlzaXQgdGhlIGxpbmsgYmVsb3cg'@;
put 'Zm9yIGZ1cnRoZXIgaW5mb3JtYXRpb24gb24gdGhpcyBpc3N1ZTpcbi0gaHR0cHM6Ly9naXRodWIuY29tL3Nhc2pzL2NsaS9pc3N1ZXMvMTE4MSNpc3N1ZWNvbW1lbnQtMTA5MDYzODU4NFxuYCksdGhpcy5uYW1lPSJDZXJ0aWZpY2F0ZUVycm9yIixPYmplY3Quc2V0UHJvdG90eXBlT2YodGhp'@;
put 'cyxJLnByb3RvdHlwZSl9fVguQ2VydGlmaWNhdGVFcnJvcj1JfSw1MjY3Oih1ZSxYKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksWC5Db21wdXRlSm9iRXhlY3V0aW9uRXJyb3I9dm9pZCAwO2NsYXNzIHkgZXh0ZW5kcyBF'@;
put 'cnJvcntjb25zdHJ1Y3RvcihfLGcpe3N1cGVyKCJFcnJvcjogSm9iIGV4ZWN1dGlvbiBmYWlsZWQiKSx0aGlzLmpvYj1fLHRoaXMubG9nPWcsdGhpcy5uYW1lPSJDb21wdXRlSm9iRXhlY3V0aW9uRXJyb3IiLE9iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLHkucHJvdG90eXBlKX19WC5Db21w'@;
put 'dXRlSm9iRXhlY3V0aW9uRXJyb3I9eX0sOTIzMjoodWUsWCk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFguRXJyb3JSZXNwb25zZT12b2lkIDAsWC5FcnJvclJlc3BvbnNlPWNsYXNzIHl7Y29uc3RydWN0b3IoXyxnLEIp'@;
put 'e2xldCB3PWc7aWYoIm9iamVjdCIhPXR5cGVvZiBnKXRyeXt3PUpTT04ucGFyc2UoZyl9Y2F0Y2h7Qj1nLHc9IiJ9dGhpcy5lcnJvcj17bWVzc2FnZTpfLGRldGFpbHM6dyxyYXc6Qn19fX0sNTEwOToodWUsWCk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNN'@;
put 'b2R1bGUiLHt2YWx1ZTohMH0pLFguSW50ZXJuYWxTZXJ2ZXJFcnJvcj12b2lkIDA7Y2xhc3MgeSBleHRlbmRzIEVycm9ye2NvbnN0cnVjdG9yKCl7c3VwZXIoIkVycm9yOiBJbnRlcm5hbCBzZXJ2ZXIgZXJyb3IuIiksdGhpcy5uYW1lPSJJbnRlcm5hbFNlcnZlckVycm9yIixPYmplY3Quc2V0'@;
put 'UHJvdG90eXBlT2YodGhpcyx5LnByb3RvdHlwZSl9fVguSW50ZXJuYWxTZXJ2ZXJFcnJvcj15fSw1NTE4Oih1ZSxYKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksWC5JbnZhbGlkSnNvbkVycm9yPXZvaWQgMDtjbGFzcyB5'@;
put 'IGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IoKXtzdXBlcigiRXJyb3I6IGludmFsaWQgSnNvbiBzdHJpbmciKSx0aGlzLm5hbWU9IkludmFsaWRKc29uRXJyb3IiLE9iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLHkucHJvdG90eXBlKX19WC5JbnZhbGlkSnNvbkVycm9yPXl9LDEwMDU6KHVl'@;
put 'LFgpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLkludmFsaWRTQVNqc0NzcmZFcnJvcj12b2lkIDA7Y2xhc3MgeSBleHRlbmRzIEVycm9ye2NvbnN0cnVjdG9yKCl7c3VwZXIoIkF1dGggZXJyb3I6IEludmFsaWQgQ1NS'@;
put 'RiB0b2tlbiEiKSx0aGlzLm5hbWU9IkludmFsaWRTQVNqc0NzcmZFcnJvciIsT2JqZWN0LnNldFByb3RvdHlwZU9mKHRoaXMseS5wcm90b3R5cGUpfX1YLkludmFsaWRTQVNqc0NzcmZFcnJvcj15fSw4NTMxOih1ZSxYKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwi'@;
put 'X19lc01vZHVsZSIse3ZhbHVlOiEwfSksWC5Kb2JFeGVjdXRpb25FcnJvcj12b2lkIDA7Y2xhc3MgeSBleHRlbmRzIEVycm9ye2NvbnN0cnVjdG9yKF8sZyxCKXtzdXBlcihgRXJyb3IgQ29kZSAke199OiAke2d9YCksdGhpcy5lcnJvckNvZGU9Xyx0aGlzLmVycm9yTWVzc2FnZT1nLHRoaXMu'@;
put 'cmVzdWx0PUIsdGhpcy5uYW1lPSJKb2JFeGVjdXRpb25FcnJvciIsT2JqZWN0LnNldFByb3RvdHlwZU9mKHRoaXMseS5wcm90b3R5cGUpfX1YLkpvYkV4ZWN1dGlvbkVycm9yPXl9LDkwNzk6KHVlLFgpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxl'@;
put 'Iix7dmFsdWU6ITB9KSxYLkpvYlN0YXRlUG9sbEVycm9yPXZvaWQgMDtjbGFzcyB5IGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IoXyxnKXtzdXBlcihgRXJyb3Igd2hpbGUgcG9sbGluZyBqb2Igc3RhdGUgZm9yIGpvYiAke199OiAke2cubWVzc2FnZXx8Z31gKSx0aGlzLm9yaWdpbmFsRXJy'@;
put 'b3I9Zyx0aGlzLm5hbWU9IkpvYlN0YXRlUG9sbEVycm9yIixPYmplY3Quc2V0UHJvdG90eXBlT2YodGhpcyx5LnByb3RvdHlwZSl9fVguSm9iU3RhdGVQb2xsRXJyb3I9eX0sMzA5NjoodWUsWCk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2'@;
put 'YWx1ZTohMH0pLFguSnNvblBhcnNlQXJyYXlFcnJvcj12b2lkIDA7Y2xhc3MgeSBleHRlbmRzIEVycm9ye2NvbnN0cnVjdG9yKCl7c3VwZXIoIkNhbiBub3QgcGFyc2UgYXJyYXkgb2JqZWN0IHRvIGpzb24uIiksdGhpcy5uYW1lPSJKc29uUGFyc2VBcnJheUVycm9yIixPYmplY3Quc2V0UHJv'@;
put 'dG90eXBlT2YodGhpcyx5LnByb3RvdHlwZSl9fVguSnNvblBhcnNlQXJyYXlFcnJvcj15fSw2NzQzOih1ZSxYKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksWC5Mb2dpblJlcXVpcmVkRXJyb3I9dm9pZCAwO2NsYXNzIHkg'@;
put 'ZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3RvcihfKXtzdXBlcihgQXV0aCBlcnJvcjogJHtfP0pTT04uc3RyaW5naWZ5KF8sbnVsbCwyKToiWW91IG11c3QgYmUgbG9nZ2VkIGluIHRvIGFjY2VzcyB0aGlzIHJlc291cmNlIn1gKSx0aGlzLm5hbWU9IkxvZ2luUmVxdWlyZWRFcnJvciIsT2JqZWN0'@;
put 'LnNldFByb3RvdHlwZU9mKHRoaXMseS5wcm90b3R5cGUpfX1YLkxvZ2luUmVxdWlyZWRFcnJvcj15fSw3ODY0Oih1ZSxYKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksWC5Ob1Nlc3Npb25TdGF0ZUVycm9yPXZvaWQgMDtj'@;
put 'bGFzcyB5IGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IoXyxnLEIpe3N1cGVyKGBDb3VsZCBub3QgZ2V0IHNlc3Npb24gc3RhdGUuIFNlcnZlciByZXNwb25kZWQgd2l0aCAke199IHdoaWxzdCBjaGVja2luZyBzdGF0ZTogJHtnfWApLHRoaXMuc2VydmVyUmVzcG9uc2VTdGF0dXM9Xyx0aGlz'@;
put 'LnNlc3Npb25TdGF0ZVVybD1nLHRoaXMubG9nVXJsPUIsdGhpcy5uYW1lPSJOb1Nlc3Npb25TdGF0dXMiLE9iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLHkucHJvdG90eXBlKX19WC5Ob1Nlc3Npb25TdGF0ZUVycm9yPXl9LDk1Nzc6KHVlLFgpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZp'@;
put 'bmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLk5vdEZvdW5kRXJyb3I9dm9pZCAwO2NsYXNzIHkgZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3RvcihfKXtzdXBlcihgRXJyb3I6IFJlc291cmNlIGF0ICR7X30gd2FzIG5vdCBmb3VuZGApLHRoaXMudXJsPV8sdGhpcy5uYW1l'@;
put 'PSJOb3RGb3VuZEVycm9yIixPYmplY3Quc2V0UHJvdG90eXBlT2YodGhpcyx5LnByb3RvdHlwZSl9fVguTm90Rm91bmRFcnJvcj15fSw5Mjc5Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLlJvb3RGb2xk'@;
put 'ZXJOb3RGb3VuZEVycm9yPXZvaWQgMDtjb25zdCBJPXkoNjc5OSk7Y2xhc3MgXyBleHRlbmRzIEVycm9ye2NvbnN0cnVjdG9yKEIsdyxQKXtsZXQgRj1gUm9vdCBmb2xkZXIgJHtCfSB3YXMgbm90IGZvdW5kLlxuUGxlYXNlIGNoZWNrICR7d30vU0FTRHJpdmUuXG5JZiB0aGUgZm9sZGVyIERP'@;
put 'RVMgZXhpc3QgdGhlbiBpdCBpcyBsaWtlbHkgYSBwZXJtaXNzaW9uIHByb2JsZW0uXG5gO2lmKFApe2xldCB6PSgwLEkuZGVjb2RlVG9rZW4pKFApLnNjb3BlO3o9ei5tYXAoTj0+IiogIitOKSxGKz0iWW91ciBhY2Nlc3MgdG9rZW4gY29udGFpbnMgdGhlIGZvbGxvd2luZyBzY29wZXM6XG4i'@;
put 'K3ouam9pbigiXG4iKX1zdXBlcihGKSx0aGlzLm5hbWU9IlJvb3RGb2xkZXJOb3RGb3VuZEVycm9yIixPYmplY3Quc2V0UHJvdG90eXBlT2YodGhpcyxfLnByb3RvdHlwZSl9fVguUm9vdEZvbGRlck5vdEZvdW5kRXJyb3I9X30sOTUyNjoodWUsWCk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRl'@;
put 'ZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFguU0FTOUF1dGhFcnJvcj12b2lkIDA7Y2xhc3MgeSBleHRlbmRzIEVycm9ye2NvbnN0cnVjdG9yKCl7c3VwZXIoIlRoZSBjcmVkZW50aWFscyB5b3UgcHJvdmlkZWQgY2Fubm90IGJlIGF1dGhlbnRpY2F0ZWQuIFBsZWFz'@;
put 'ZSBwcm92aWRlIGEgdmFsaWQgc2V0IG9mIGNyZWRlbnRpYWxzLiIpLHRoaXMubmFtZT0iQXV0aG9yaXplRXJyb3IiLE9iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLHkucHJvdG90eXBlKX19WC5TQVM5QXV0aEVycm9yPXl9LDg4NzU6KHVlLFgpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZp'@;
put 'bmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLldlYm91dFJlc3BvbnNlRXJyb3I9dm9pZCAwO2NsYXNzIHkgZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3RvcihfKXtzdXBlcihgRXJyb3I6IGVycm9yIHdoaWxlIHBhcnNpbmcgcmVzcG9uc2UgZnJvbSAke199YCksdGhpcy51'@;
put 'cmw9Xyx0aGlzLm5hbWU9IldlYm91dFJlc3BvbnNlRXJyb3IiLE9iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLHkucHJvdG90eXBlKX19WC5XZWJvdXRSZXNwb25zZUVycm9yPXl9LDEzOTU6ZnVuY3Rpb24odWUsWCx5KXsidXNlIHN0cmljdCI7dmFyIEk9dGhpcyYmdGhpcy5fX2NyZWF0ZUJp'@;
put 'bmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKGcsQix3LFApe3ZvaWQgMD09PVAmJihQPXcpO3ZhciBGPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoQix3KTsoIUZ8fCgiZ2V0ImluIEY/IUIuX19lc01vZHVsZTpGLndyaXRhYmxlfHxGLmNvbmZpZ3VyYWJsZSkpJiYoRj17'@;
put 'ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gQlt3XX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZyxQLEYpfTpmdW5jdGlvbihnLEIsdyxQKXt2b2lkIDA9PT1QJiYoUD13KSxnW1BdPUJbd119KSxfPXRoaXMmJnRoaXMuX19leHBvcnRTdGFyfHxmdW5jdGlvbihnLEIpe2Zv'@;
put 'cih2YXIgdyBpbiBnKSJkZWZhdWx0IiE9PXcmJiFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoQix3KSYmSShCLGcsdyl9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxfKHkoMTI0KSxYKSxfKHkoOTQ2NSksWCksXyh5KDUyNjcp'@;
put 'LFgpLF8oeSg5MjMyKSxYKSxfKHkoNTEwOSksWCksXyh5KDU1MTgpLFgpLF8oeSg4NTMxKSxYKSxfKHkoOTA3OSksWCksXyh5KDMwOTYpLFgpLF8oeSg2NzQzKSxYKSxfKHkoNzg2NCksWCksXyh5KDk1NzcpLFgpLF8oeSg5Mjc5KSxYKSxfKHkoODg3NSksWCl9LDEyMzA6ZnVuY3Rpb24odWUs'@;
put 'WCx5KXsidXNlIHN0cmljdCI7dmFyIEk9dGhpcyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKGcsQix3LFApe3ZvaWQgMD09PVAmJihQPXcpO3ZhciBGPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoQix3KTsoIUZ8fCgiZ2V0ImluIEY/IUIu'@;
put 'X19lc01vZHVsZTpGLndyaXRhYmxlfHxGLmNvbmZpZ3VyYWJsZSkpJiYoRj17ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gQlt3XX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZyxQLEYpfTpmdW5jdGlvbihnLEIsdyxQKXt2b2lkIDA9PT1QJiYoUD13KSxnW1BdPUJbd119'@;
put 'KSxfPXRoaXMmJnRoaXMuX19leHBvcnRTdGFyfHxmdW5jdGlvbihnLEIpe2Zvcih2YXIgdyBpbiBnKSJkZWZhdWx0IiE9PXcmJiFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoQix3KSYmSShCLGcsdyl9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7'@;
put 'dmFsdWU6ITB9KSxfKHkoNDcwKSxYKSxfKHkoNDY2NiksWCksXyh5KDQ5NzUpLFgpLF8oeSg1NzY2KSxYKSxfKHkoMjE1KSxYKSxfKHkoNDc4MiksWCksXyh5KDQxNjgpLFgpLF8oeSg4NTE2KSxYKSxfKHkoMzg0MCksWCksXyh5KDU4NDEpLFgpLF8oeSgxNDI4KSxYKSxfKHkoNjAzOCksWCks'@;
put 'Xyh5KDk0OTMpLFgpLF8oeSgzMTUzKSxYKSxfKHkoODY1MCksWCksXyh5KDYxNzcpLFgpLF8oeSgxMzk1KSxYKX0sMzMwMjpmdW5jdGlvbih1ZSxYKXsidXNlIHN0cmljdCI7dmFyIHk9dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKF8sZyxCLHcpe3JldHVybiBuZXcoQnx8KEI9UHJv'@;
put 'bWlzZSkpKGZ1bmN0aW9uKEYsTyl7ZnVuY3Rpb24geihLKXt0cnl7TCh3Lm5leHQoSykpfWNhdGNoKFUpe08oVSl9fWZ1bmN0aW9uIE4oSyl7dHJ5e0wody50aHJvdyhLKSl9Y2F0Y2goVSl7TyhVKX19ZnVuY3Rpb24gTChLKXtLLmRvbmU/RihLLnZhbHVlKTpmdW5jdGlvbiBQKEYpe3JldHVy'@;
put 'biBGIGluc3RhbmNlb2YgQj9GOm5ldyBCKGZ1bmN0aW9uKE8pe08oRil9KX0oSy52YWx1ZSkudGhlbih6LE4pfUwoKHc9dy5hcHBseShfLGd8fFtdKSkubmV4dCgpKX0pfTtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksWC5hcHBlbmRFeHRyYVJlc3Bv'@;
put 'bnNlQXR0cmlidXRlcz12b2lkIDAsWC5hcHBlbmRFeHRyYVJlc3BvbnNlQXR0cmlidXRlcz1mdW5jdGlvbiBJKF8sZyl7cmV0dXJuIHkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2xldCBCPXt9O2lmKGc/Lmxlbmd0aCl7Y29uc3Qgdz1nLnJlZHVjZSgoUCxGKT0+KFBbRl09X1tG'@;
put 'XSxQKSx7fSk7Qj1PYmplY3QuYXNzaWduKHtyZXN1bHQ6Xy5yZXN1bHR9LHcpfWVsc2UgQj1fLnJlc3VsdDtyZXR1cm4gQn0pfX0sNzkyMjpmdW5jdGlvbih1ZSxYKXsidXNlIHN0cmljdCI7dmFyIHk9dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKF8sZyxCLHcpe3JldHVybiBuZXco'@;
put 'Qnx8KEI9UHJvbWlzZSkpKGZ1bmN0aW9uKEYsTyl7ZnVuY3Rpb24geihLKXt0cnl7TCh3Lm5leHQoSykpfWNhdGNoKFUpe08oVSl9fWZ1bmN0aW9uIE4oSyl7dHJ5e0wody50aHJvdyhLKSl9Y2F0Y2goVSl7TyhVKX19ZnVuY3Rpb24gTChLKXtLLmRvbmU/RihLLnZhbHVlKTpmdW5jdGlvbiBQ'@;
put 'KEYpe3JldHVybiBGIGluc3RhbmNlb2YgQj9GOm5ldyBCKGZ1bmN0aW9uKE8pe08oRil9KX0oSy52YWx1ZSkudGhlbih6LE4pfUwoKHc9dy5hcHBseShfLGd8fFtdKSkubmV4dCgpKX0pfTtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksWC5hc3luY0Zv'@;
put 'ckVhY2g9dm9pZCAwLFguYXN5bmNGb3JFYWNoPWZ1bmN0aW9uIEkoXyxnKXtyZXR1cm4geSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Zm9yKGxldCBCPTA7QjxfLmxlbmd0aDtCKyspeWllbGQgZyhfW0JdLEIsXyl9KX19LDM3OTM6KHVlLFgpPT57InVzZSBzdHJpY3QiO09iamVj'@;
put 'dC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLmNvbXBhcmVUaW1lc3RhbXBzPXZvaWQgMCxYLmNvbXBhcmVUaW1lc3RhbXBzPShJLF8pPT5fLnRpbWVzdGFtcC5nZXRUaW1lKCktSS50aW1lc3RhbXAuZ2V0VGltZSgpfSwyNDAyOih1ZSxYLHkpPT57InVzZSBz'@;
put 'dHJpY3QiO3ZhciBJPXkoNTEwOCk7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFguaXNGb3JtYXRzVGFibGU9WC5jb252ZXJ0VG9DU1Y9dm9pZCAwO2NvbnN0IF89eSg2NDY3KSxnPXkoOTc3OCk7WC5jb252ZXJ0VG9DU1Y9KEYsTyk9Pnt2YXIgejtp'@;
put 'ZighRltPXSl7Y29uc3QgZWU9KDAsZy5wcmVmaXhNZXNzYWdlKSgiTm8gdGFibGUgcHJvdmlkZWQgdG8gYmUgY29udmVydGVkIHRvIENTVi4iLCJFcnJvciB3aGlsZSBjb252ZXJ0aW5nIHRvIENTVi4gIik7dGhyb3cic3RyaW5nIj09dHlwZW9mIGVlP25ldyBFcnJvcihlZSk6ZWV9Y29uc3Qg'@;
put 'Tj1GW09dO2lmKCFBcnJheS5pc0FycmF5KE4pKXJldHVybiIiO2xldCBVLEw9bnVsbD09PSh6PUZbYCQke099YF0pfHx2b2lkIDA9PT16P3ZvaWQgMDp6LmZvcm1hdHMsSz1bXSxXPSExO0wmJihLPU9iamVjdC5rZXlzKEwpLm1hcChlZT0+YCR7ZWV9OiR7TFtlZV19YCkpO2NvbnN0IFk9T2Jq'@;
put 'ZWN0LmtleXMoTlswXSk7cmV0dXJuIFkuZm9yRWFjaChlZT0+e2lmKCFMfHwhT2JqZWN0LmtleXMoTCkuaW5jbHVkZXMoZWUpKXtsZXQgSj0hMSxuZT0hMTtpZihOLmZvckVhY2goaWU9PntudWxsPT09aWVbZWVdfHwibnVtYmVyIj09dHlwZW9mIGllW2VlXT9KPSEwOiJzdHJpbmciPT10eXBl'@;
put 'b2YgaWVbZWVdJiYoMCxfLmlzU3BlY2lhbE1pc3NpbmcpKGllW2VlXSkmJihuZT0hMCl9KSxKJiZuZSlLLnB1c2goYCR7ZWV9OmJlc3QuYCksTHx8KEw9e30pLExbZWVdPSJiZXN0LiI7ZWxzZXtsZXQgaWU9bnVsbCxsZT0hMSxtZT0tMTtjb25zdCBfZT1OLm1hcCgoVGUsU2UpPT57aWYoVGVb'@;
put 'ZWVdfHwiIj09PVRlW2VlXSl7bGV0IGplO3JldHVybiBpZT9sZXx8KGxlPSgiIj09PVRlW2VlXXx8InN0cmluZyI9PXR5cGVvZiBUZVtlZV0/ImNoYXJzIjoibnVtYmVyIikhPT1pZSxtZT1sZT9TZSsxOi0xKTppZT0iIj09PVRlW2VlXXx8InN0cmluZyI9PXR5cGVvZiBUZVtlZV0/ImNoYXJz'@;
put 'IjoibnVtYmVyIiwic3RyaW5nIj09dHlwZW9mIFRlW2VlXSYmKGplPVAoVGVbZWVdKSksamV9fSkuc29ydCgoVGUsU2UpPT5TZS1UZSlbMF07X2UmJl9lPjMyNzY1JiYoVz0hMCksbGUmJkkuZXJyb3IoYFJvdyAoJHttZX0pLCBDb2x1bW4gKCR7ZWV9KSBoYXMgbWl4ZWQgdHlwZXM6IEVSUk9S'@;
put 'YCksSy5wdXNoKGAke2VlfTokeyJjaGFycyI9PT1pZT8iJGNoYXIiOiIifSR7X2V8fCgiY2hhcnMiPT09aWU/IjEiOiJiZXN0Iil9LmApfX19KSxMJiYoSz1LLnNvcnQoKGVlLEopPT5ZLmluZGV4T2YoZWUucmVwbGFjZSgvOi4qLywiIikpLVkuaW5kZXhPZihKLnJlcGxhY2UoLzouKi8sIiIp'@;
put 'KSkpLFc/IkVSUk9SOiBMQVJHRSBTVFJJTkcgTEVOR1RIIjooVT1OLm1hcChlZT0+T2JqZWN0LmtleXMoZWUpLm1hcCgobmUsaWUpPT57bGV0IGxlO2NvbnN0IG1lPWVlW25lXTtpZigibnVtYmVyIj09dHlwZW9mIG1lKXJldHVybiBtZTtpZihsZT1udWxsPT09bWU/IiI6bWUsTCYmImJlc3Qu'@;
put 'Ij09PUxbbmVdKXtpZihsZSYmISgwLF8uaXNTcGVjaWFsTWlzc2luZykobGUpKXRocm93IG5ldyBFcnJvcigiQSBTcGVjaWFsIG1pc3NpbmcgdmFsdWUgY2FuIG9ubHkgYmUgYSBzaW5nbGUgY2hhcmFjdGVyIGZyb20gJ0EnIHRvICdaJywgJ18nLCAnLlthLXpdJywgJy5fJyIpO3JldHVybmAk'@;
put 'e2xlLmluY2x1ZGVzKCIuIik/IiI6Ii4ifSR7bGUudG9Mb3dlckNhc2UoKX1gfXJldHVybiBsZT1sZS5yZXBsYWNlKC8iL2csJyIiJyksbGU9YCIke2xlfSJgLGxlLnN1YnN0cmluZygxLGxlLmxlbmd0aC0xKS5zZWFyY2goLyhcdHxcbnxccnwsfFwnfFwiKS9nbSk8MCYmKGxlPWxlLnN1YnN0'@;
put 'cmluZygxLGxlLmxlbmd0aC0xKSksbGU9bGUucmVwbGFjZSgvXHJcbi9nbSwiXG4iKSwiIj09PWxlJiZLW2llXS5pbmNsdWRlcygiYmVzdCIpJiYobGU9Ii4iKSxsZX0pLmpvaW4oIiwiKSksSy5qb2luKCIsIikucmVwbGFjZSgvLC9nLCIgIikrIlxyXG4iK1Uuam9pbigiXHJcbiIpKX0sWC5p'@;
put 'c0Zvcm1hdHNUYWJsZT1GPT4vXlwkLiovLnRlc3QoRik7Y29uc3QgUD1GPT57bGV0IE89Ri5sZW5ndGg7Zm9yKGxldCB6PUYubGVuZ3RoLTE7ej49MDt6LS0pe2NvbnN0IE49Ri5jaGFyQ29kZUF0KHopO04+MTI3JiZOPD0yMDQ3P08rKzpOPjIwNDcmJk48PTY1NTM1JiYoTys9MiksTj49NTYz'@;
put 'MjAmJk48PTU3MzQzJiZ6LS19cmV0dXJuIE99fSw2MTE2OmZ1bmN0aW9uKHVlLFgseSl7InVzZSBzdHJpY3QiO3ZhciBJPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihCKXtyZXR1cm4gQiYmQi5fX2VzTW9kdWxlP0I6e2RlZmF1bHQ6Qn19O09iamVjdC5kZWZpbmVQcm9w'@;
put 'ZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLmNyZWF0ZUF4aW9zSW5zdGFuY2U9dm9pZCAwO2NvbnN0IF89SSh5KDcyMTgpKTtYLmNyZWF0ZUF4aW9zSW5zdGFuY2U9KEIsdyk9Pl8uZGVmYXVsdC5jcmVhdGUoe2Jhc2VVUkw6QixodHRwc0FnZW50Ond9KX0sOTgyNToodWUsWCk9'@;
put 'PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFguZGVsYXk9dm9pZCAwLFguZGVsYXk9ST0+bmV3IFByb21pc2UoXz0+c2V0VGltZW91dChfLEkpKX0sOTkwOmZ1bmN0aW9uKHVlLFgseSl7InVzZSBzdHJpY3QiO3ZhciBJPXko'@;
put 'NDE1NSksXz15KDUxMDgpLGc9dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKEYsTyx6LE4pe3JldHVybiBuZXcoenx8KHo9UHJvbWlzZSkpKGZ1bmN0aW9uKEssVSl7ZnVuY3Rpb24gVyhlZSl7dHJ5e3EoTi5uZXh0KGVlKSl9Y2F0Y2goSil7VShKKX19ZnVuY3Rpb24gWShlZSl7dHJ5'@;
put 'e3EoTi50aHJvdyhlZSkpfWNhdGNoKEope1UoSil9fWZ1bmN0aW9uIHEoZWUpe2VlLmRvbmU/SyhlZS52YWx1ZSk6ZnVuY3Rpb24gTChLKXtyZXR1cm4gSyBpbnN0YW5jZW9mIHo/SzpuZXcgeihmdW5jdGlvbihVKXtVKEspfSl9KGVlLnZhbHVlKS50aGVuKFcsWSl9cSgoTj1OLmFwcGx5KEYs'@;
put 'T3x8W10pKS5uZXh0KCkpfSl9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLmZldGNoTG9nPVguZmV0Y2hMb2dCeUNodW5rcz12b2lkIDA7Y29uc3QgQj15KDk3NzgpO1guZmV0Y2hMb2dCeUNodW5rcz0oRixPLHosTik9Pmcodm9pZCAwLHZvaWQg'@;
put 'MCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIHlpZWxkKDAsWC5mZXRjaExvZykoRixPLHosMCxOKX0pLFguZmV0Y2hMb2c9KEYsTyx6LE4sTCk9Pmcodm9pZCAwLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3QgSz1JLmxvZ2dlcnx8XztsZXQgVT0iIjtjb25zdCBXPUw8MWU0P0w6'@;
put 'MWU0O2Rve0suaW5mbyhgRmV0Y2hpbmcgbG9ncyBmcm9tIGxpbmUgbm86ICR7TisxfSB0byAke04rV30gb2YgJHtMfS5gKTtjb25zdCBZPXlpZWxkIEYuZ2V0KGAke3p9P3N0YXJ0PSR7Tn0mbGltaXQ9JHtXfWAsTykudGhlbihlZT0+ZWUucmVzdWx0KS5jYXRjaChlZT0+e3Rocm93KDAsQi5w'@;
put 'cmVmaXhNZXNzYWdlKShlZSwiRXJyb3Igd2hpbGUgZ2V0dGluZyBsb2cuICIpfSk7aWYoMD09PVkuaXRlbXMubGVuZ3RoKWJyZWFrO1UrPVkuaXRlbXMubWFwKGVlPT5lZS5saW5lKS5qb2luKCJcbiIpLE4rPVd9d2hpbGUoTjxMKTtyZXR1cm4gVX0pfSw3MTQ6KHVlLFgseSk9PnsidXNlIHN0'@;
put 'cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFguZm9ybWF0RGF0YUZvclJlcXVlc3Q9dm9pZCAwO2NvbnN0IEk9eSgyNDAyKSxfPXkoNDc5OSk7WC5mb3JtYXREYXRhRm9yUmVxdWVzdD1CPT57Y29uc3Qgdz1bXTtsZXQgUD0wO2NvbnN0IEY9'@;
put 'e307Zm9yKGNvbnN0IE8gaW4gQil7aWYoKDAsSS5pc0Zvcm1hdHNUYWJsZSkoTykmJk9iamVjdC5rZXlzKEIpLmluY2x1ZGVzKE8ucmVwbGFjZSgvXlwkLywiIikpKWNvbnRpbnVlO1ArKywoMCxJLmlzRm9ybWF0c1RhYmxlKShPKXx8dy5wdXNoKE8pO2NvbnN0IHo9KDAsSS5jb252ZXJ0VG9D'@;
put 'U1YpKEIsTyk7aWYoIkVSUk9SOiBMQVJHRSBTVFJJTkcgTEVOR1RIIj09PXopdGhyb3cgbmV3IEVycm9yKCJUaGUgbWF4IGxlbmd0aCBvZiBhIHN0cmluZyB2YWx1ZSBpbiBTQVNqcyBpcyAzMjc2NSBjaGFyYWN0ZXJzLiIpO2lmKHoubGVuZ3RoPjE2ZTMpe2NvbnN0IE49KDAsXy5zcGxpdENo'@;
put 'dW5rcykoeik7Rltgc2FzanMke1B9ZGF0YTBgXT1OLmxlbmd0aCxOLmZvckVhY2goKEwsSyk9PntGW2BzYXNqcyR7UH1kYXRhJHtLKzF9YF09TH0pfWVsc2UgRltgc2FzanMke1B9ZGF0YWBdPXp9cmV0dXJuIEYuc2FzanNfdGFibGVzPXcuam9pbigiICIpLEZ9fSw4NDU4OmZ1bmN0aW9uKHVl'@;
put 'LFgseSl7InVzZSBzdHJpY3QiO3ZhciBJPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbih3KXtyZXR1cm4gdyYmdy5fX2VzTW9kdWxlP3c6e2RlZmF1bHQ6d319O09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLmdldEZvcm1EYXRh'@;
put 'PXZvaWQgMDtjb25zdCBfPXkoNTkyOCksZz1JKHkoNjIzMCkpO1guZ2V0Rm9ybURhdGE9KCk9PigwLF8uaXNOb2RlKSgpP25ldyBnLmRlZmF1bHQ6bmV3IEZvcm1EYXRhfSwzMjYwOih1ZSxYKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3Zh'@;
put 'bHVlOiEwfSksWC5nZXRVc2VyTGFuZ3VhZ2U9dm9pZCAwLFguZ2V0VXNlckxhbmd1YWdlPSgpPT53aW5kb3cubmF2aWdhdG9yLmxhbmd1YWdlfHx3aW5kb3cubmF2aWdhdG9yLnVzZXJMYW5ndWFnZX0sMTg4NDoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHko'@;
put 'WCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksWC5nZXRWYWxpZEpzb249dm9pZCAwO2NvbnN0IEk9eSgxMzk1KTtYLmdldFZhbGlkSnNvbj1nPT57dHJ5e2lmKG51bGw9PWcpdGhyb3cgbmV3IEkuSW52YWxpZEpzb25FcnJvcjtpZihBcnJheS5pc0FycmF5KGcpKXRocm93IG5ldyBJLkpzb25Q'@;
put 'YXJzZUFycmF5RXJyb3I7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiBnP2c6IiI9PT1nP3t9OkpTT04ucGFyc2UoZyl9Y2F0Y2goQil7dGhyb3cgQiBpbnN0YW5jZW9mIEkuSnNvblBhcnNlQXJyYXlFcnJvcj9COm5ldyBJLkludmFsaWRKc29uRXJyb3J9fX0sNTkyODpmdW5jdGlvbih1ZSxYLHkp'@;
put 'eyJ1c2Ugc3RyaWN0Ijt2YXIgST10aGlzJiZ0aGlzLl9fY3JlYXRlQmluZGluZ3x8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oZyxCLHcsUCl7dm9pZCAwPT09UCYmKFA9dyk7dmFyIEY9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihCLHcpOyghRnx8KCJnZXQiaW4gRj8hQi5fX2Vz'@;
put 'TW9kdWxlOkYud3JpdGFibGV8fEYuY29uZmlndXJhYmxlKSkmJihGPXtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBCW3ddfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShnLFAsRil9OmZ1bmN0aW9uKGcsQix3LFApe3ZvaWQgMD09PVAmJihQPXcpLGdbUF09Qlt3XX0pLF89'@;
put 'dGhpcyYmdGhpcy5fX2V4cG9ydFN0YXJ8fGZ1bmN0aW9uKGcsQil7Zm9yKHZhciB3IGluIGcpImRlZmF1bHQiIT09dyYmIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChCLHcpJiZJKEIsZyx3KX07T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1'@;
put 'ZTohMH0pLF8oeSgzMzAyKSxYKSxfKHkoNzkyMiksWCksXyh5KDM3OTMpLFgpLF8oeSgyNDAyKSxYKSxfKHkoNjExNiksWCksXyh5KDk4MjUpLFgpLF8oeSg5OTApLFgpLF8oeSgxODg0KSxYKSxfKHkoNDI0MyksWCksXyh5KDI1NyksWCksXyh5KDIpLFgpLF8oeSgyNjE1KSxYKSxfKHkoMjky'@;
put 'MCksWCksXyh5KDI0MjIpLFgpLF8oeSgzMSksWCksXyh5KDY1MTUpLFgpLF8oeSg2NDE2KSxYKSxfKHkoMjgxMyksWCksXyh5KDk4OTYpLFgpLF8oeSg0Nzk5KSxYKSxfKHkoNDUxNiksWCksXyh5KDg0NTgpLFgpLF8oeSgzMjYwKSxYKX0sNDI0MzoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2'@;
put 'YXIgST15KDQxNTUpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLmlzTm9kZT12b2lkIDAsWC5pc05vZGU9KCk9PnR5cGVvZiBJPCJ1IiYmbnVsbCE9SS52ZXJzaW9ucyYmbnVsbCE9SS52ZXJzaW9ucy5ub2RlfSwyNTc6KHVlLFgpPT57InVzZSBz'@;
put 'dHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLmlzUmVsYXRpdmVQYXRoPXZvaWQgMCxYLmlzUmVsYXRpdmVQYXRoPUk9PiEhSSYmIUkuc3RhcnRzV2l0aCgiLyIpfSwyOih1ZSxYKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJv'@;
put 'cGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksWC5pc1VyaT12b2lkIDAsWC5pc1VyaT1JPT4vXlwvZm9sZGVyc1wvZm9sZGVyc1wvLy50ZXN0KEkpfSwyNjE1Oih1ZSxYKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEw'@;
put 'fSksWC5pc1VybD12b2lkIDAsWC5pc1VybD1JPT57Y29uc3QgXz1bImh0dHA6IiwiaHR0cHM6Il07dHJ5e2NvbnN0IGc9bmV3IFVSTChJKTtpZighXy5pbmNsdWRlcyhnLnByb3RvY29sKSlyZXR1cm4hMX1jYXRjaHtyZXR1cm4hMX1yZXR1cm4hMH19LDEyMTA6ZnVuY3Rpb24odWUsWCl7InVz'@;
put 'ZSBzdHJpY3QiO3ZhciB5PXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbihGLE8seixOKXtyZXR1cm4gbmV3KHp8fCh6PVByb21pc2UpKShmdW5jdGlvbihLLFUpe2Z1bmN0aW9uIFcoZWUpe3RyeXtxKE4ubmV4dChlZSkpfWNhdGNoKEope1UoSil9fWZ1bmN0aW9uIFkoZWUpe3RyeXtx'@;
put 'KE4udGhyb3coZWUpKX1jYXRjaChKKXtVKEopfX1mdW5jdGlvbiBxKGVlKXtlZS5kb25lP0soZWUudmFsdWUpOmZ1bmN0aW9uIEwoSyl7cmV0dXJuIEsgaW5zdGFuY2VvZiB6P0s6bmV3IHooZnVuY3Rpb24oVSl7VShLKX0pfShlZS52YWx1ZSkudGhlbihXLFkpfXEoKE49Ti5hcHBseShGLE98'@;
put 'fFtdKSkubmV4dCgpKX0pfTtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksWC5vcGVuTG9naW5Qcm9tcHQ9dm9pZCAwO3ZhciBJPWZ1bmN0aW9uKEYpe3JldHVybiBGLnN0eWxlcz0ic2FzanNBZGFwdGVyU3R5bGVzIixGLm92ZXJsYXk9InNhc2pzQWRh'@;
put 'cHRlckxvZ2luUHJvbXB0QkciLEYuZGlhbG9nPSJzYXNqc0FkYXB0ZXJMb2dpblByb21wdCIsRn0oSXx8e30pO2NvbnN0IF89InNhc2pzLWFkYXB0ZXIiLGc9e3BvcFVwOmAke199cG9wVXBgLHBvcFVwQkc6YCR7X31wb3BVcEJHYH07WC5vcGVuTG9naW5Qcm9tcHQ9KCk9Pm5ldyBQcm9taXNl'@;
put 'KEY9Pnkodm9pZCAwLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3QgTz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzdHlsZSIpO08uaWQ9SS5zdHlsZXMsTy5pbm5lclRleHQ9UDtjb25zdCB6PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3ouaWQ9SS5vdmVybGF5LHouY2xh'@;
put 'c3NMaXN0LmFkZChnLnBvcFVwQkcpO2NvbnN0IE49ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7Ti5pZD1JLmRpYWxvZyxOLmNsYXNzTGlzdC5hZGQoZy5wb3BVcCk7Y29uc3QgTD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJoMSIpO0wuaW5uZXJUZXh0PSJTZXNzaW9uIEV4cGlyZWQh'@;
put 'IixOLmFwcGVuZENoaWxkKEwpO2NvbnN0IEs9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksVT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIik7VS5pbm5lclRleHQ9IllvdSBuZWVkIHRvIHJlbG9naW4sIGNsaWNrIE9LIHRvIGxvZ2luLiIsSy5hcHBlbmRDaGlsZChVKSxOLmFw'@;
put 'cGVuZENoaWxkKEspO2NvbnN0IFc9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYnV0dG9uIik7Vy5jbGFzc0xpc3QuYWRkKCJjYW5jZWwiKSxXLmlubmVyVGV4dD0iQ2FuY2VsIixXLm9uY2xpY2s9KCk9Pnt3KCksRighMSl9LE4uYXBwZW5kQ2hpbGQoVyk7Y29uc3QgWT1kb2N1bWVudC5jcmVh'@;
put 'dGVFbGVtZW50KCJidXR0b24iKTtZLmNsYXNzTGlzdC5hZGQoImNvbmZpcm0iKSxZLmlubmVyVGV4dD0iT2siLFkub25jbGljaz0oKT0+e3coKSxGKCEwKX0sTi5hcHBlbmRDaGlsZChZKSxkb2N1bWVudC5ib2R5LnN0eWxlLm92ZXJmbG93PSJoaWRkZW4iLGRvY3VtZW50LmJvZHkuYXBwZW5k'@;
put 'Q2hpbGQoTyksZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh6KSxkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKE4pfSkpO2NvbnN0IHc9KCk9PntPYmplY3QudmFsdWVzKEkpLmZvckVhY2goRj0+e3ZhciBPO2NvbnN0IHo9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoRik7bnVsbD09PShPPXo/'@;
put 'LnBhcmVudE5vZGUpfHx2b2lkIDA9PT1PfHxPLnJlbW92ZUNoaWxkKHopfSksZG9jdW1lbnQuYm9keS5zdHlsZS5vdmVyZmxvdz0iYXV0byJ9LFA9YFxuLiR7Zy5wb3BVcEJHfSAsXG4uJHtnLnBvcFVwfSB7XG4gIHotaW5kZXg6IDEwMDAwO1xufVxuLiR7Zy5wb3BVcH0ge1xuICBib3gtc2l6'@;
put 'aW5nOiBib3JkZXItYm94O1xuICAtd2Via2l0LWJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIC1tb3otYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgZGlzcGxheTogYmxvY2s7XG4gIHBvc2l0aW9uOiBmaXhlZDtcbiAgdG9wOiA0MCU7XG4gIGxlZnQ6IDUwJTtcbiAgcGFkZGluZzogMDtc'@;
put 'biAgZm9udC1zaXplOiAxNHB4O1xuICBmb250LWZhbWlseTogJ1BUIFNhbnMnLCBzYW5zLXNlcmlmO1xuICBjb2xvcjogI2ZmZjtcbiAgYm9yZGVyLXN0eWxlOiBub25lO1xuICB6LWluZGV4OiA5OTk7XG4gIG92ZXJmbG93OiBoaWRkZW47XG4gIGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwg'@;
put 'MC4yKTtcbiAgbWFyZ2luOiAwO1xuICB3aWR0aDogMTAwJTtcbiAgbWF4LXdpZHRoOiAzMDBweDtcbiAgaGVpZ2h0OiBhdXRvO1xuICBtYXgtaGVpZ2h0OiAzMDBweDtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTUwJSk7XG59XG4uJHtnLnBvcFVwfSA+IGgxIHtcbiAgYm94LXNp'@;
put 'emluZzogYm9yZGVyLWJveDtcbiAgLXdlYmtpdC1ib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAtbW96LWJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIHBhZGRpbmc6IDVweDtcbiAgbWluLWhlaWdodDogNDBweDtcbiAgZm9udC1zaXplOiAxLjJlbTtcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7'@;
put 'XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgY29sb3I6ICNmZmY7XG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xuICBib3JkZXItc3R5bGU6IG5vbmU7XG4gIGJvcmRlci13aWR0aDogNXB4O1xuICBib3JkZXItY29sb3I6IGJsYWNrO1xufVxuLiR7Zy5wb3BVcH0gPiBkaXYg'@;
put 'e1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiBjYWxjKDEwMCUgLTEwOHB4KTtcbiAgbWFyZ2luOiAwO1xuICBkaXNwbGF5OiBibG9jaztcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgLXdlYmtpdC1ib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAtbW96LWJveC1zaXppbmc6IGJv'@;
put 'cmRlci1ib3g7XG4gIHBhZGRpbmc6IDUlO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIGJvcmRlci13aWR0aDogMXB4O1xuICBib3JkZXItY29sb3I6ICNjY2M7XG4gIGJvcmRlci1zdHlsZTogbm9uZSBub25lIHNvbGlkIG5vbmU7XG4gIG92ZXJmbG93OiBhdXRvO1xufVxuLiR7Zy5wb3BV'@;
put 'cH0gPiBkaXYgPiBzcGFuIHtcbiAgZGlzcGxheTogdGFibGUtY2VsbDtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgLXdlYmtpdC1ib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAtbW96LWJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIG1hcmdpbjogMDtcbiAgcGFkZGluZzogMDtc'@;
put 'biAgd2lkdGg6IDMwMHB4O1xuICBoZWlnaHQ6IDEwOHB4O1xuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICBib3JkZXItc3R5bGU6IG5vbmU7XG59XG4uJHtnLnBvcFVwfSAuY2FuY2VsIHtcbiAgZmxvYXQ6IGxlZnQ7XG59XG4uJHtnLnBvcFVwfSAuY29uZmlybSB7XG4gIGZsb2F0OiBy'@;
put 'aWdodDtcbn1cbi4ke2cucG9wVXB9ID4gYnV0dG9uIHtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgLXdlYmtpdC1ib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAtbW96LWJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIG1hcmdpbjogMDtcbiAgcGFkZGluZzogMTBweDtcbiAgd2lk'@;
put 'dGg6IDUwJTtcbiAgYm9yZGVyOiAxcHggbm9uZSAjY2NjO1xuICBjb2xvcjogI2ZmZjtcbiAgZm9udC1mYW1pbHk6IGluaGVyaXQ7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgaGVpZ2h0OiA1MHB4O1xuICBiYWNrZ3JvdW5kOiByZ2JhKDEsIDEsIDEsIDAuMik7XG59XG4uJHtnLnBvcFVwfSA+'@;
put 'IGJ1dHRvbjpob3ZlciB7XG4gIGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC4yKTtcbn1cbi4ke2cucG9wVXBCR30ge1xuICBkaXNwbGF5OiBibG9jaztcbiAgcG9zaXRpb246IGZpeGVkO1xuICB0b3A6IDA7XG4gIGxlZnQ6IDA7XG4gIHdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6IDEwMCU7'@;
put 'XG4gIG1hcmdpbjogMDtcbiAgcGFkZGluZzogMDtcbiAgb3BhY2l0eTogMC45NTtcbiAgei1pbmRleDogNTA7XG4gIGJhY2tncm91bmQtaW1hZ2U6IHJhZGlhbC1ncmFkaWVudCgjMDM3OGNkLCAjMDEyMDM2KTtcbn1cbmB9LDI5MjA6KHVlLFgpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZp'@;
put 'bmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLm5lZWRzUmV0cnk9dm9pZCAwLFgubmVlZHNSZXRyeT1JPT4hIUkmJihJLmluY2x1ZGVzKCciZXJyb3JDb2RlIjo0MDMnKSYmSS5pbmNsdWRlcygiX2NzcmYiKSYmSS5pbmNsdWRlcygiWC1DU1JGLVRPS0VOIil8fEkuaW5j'@;
put 'bHVkZXMoJyJzdGF0dXMiOjQwMycpJiZJLmluY2x1ZGVzKCciZXJyb3IiOiJGb3JiaWRkZW4iJyl8fEkuaW5jbHVkZXMoJyJzdGF0dXMiOjQ0OScpJiZJLmluY2x1ZGVzKCJBdXRoZW50aWNhdGlvbiBzdWNjZXNzLCByZXRyeSBvcmlnaW5hbCByZXF1ZXN0IikpfSwyNDIyOih1ZSxYKT0+eyJ1'@;
put 'c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksWC5wYXJzZUdlbmVyYXRlZENvZGU9dm9pZCAwLFgucGFyc2VHZW5lcmF0ZWRDb2RlPUk9Pkkuc3BsaXQoIlxuIikuZmlsdGVyKHc9PncudHJpbSgpLnN0YXJ0c1dpdGgoIk1QUklOVCIp'@;
put 'KS5qb2luKCJcclxuIil9LDMxOih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoNTEwOCk7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFgucGFyc2VTYXNWaXlhTG9nPXZvaWQgMCxYLnBhcnNlU2FzVml5YUxvZz1nPT57bGV0IEI7dHJ5e0I9'@;
put 'Zy5pdGVtcz9nLml0ZW1zLm1hcCh3PT53LmxpbmUpLmpvaW4oIlxuIik6SlNPTi5zdHJpbmdpZnkoZyl9Y2F0Y2godyl7SS5lcnJvcigiQW4gZXJyb3IgaGFzIG9jY3VycmVkIHdoaWxlIHBhcnNpbmcgdGhlIGxvZyByZXNwb25zZSIsdyksQj1nfXJldHVybiBCfX0sNjUxNToodWUsWCk9Pnsi'@;
put 'dXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFgucGFyc2VTb3VyY2VDb2RlPXZvaWQgMCxYLnBhcnNlU291cmNlQ29kZT1JPT5JLnNwbGl0KCJcbiIpLmZpbHRlcihCPT5CLnRyaW0oKS5zdWJzdHJpbmcoMCwxMCkudHJpbVN0YXJ0'@;
put 'KCkubWF0Y2goL15cZC8pKS5qb2luKCJcclxuIil9LDY0MTY6ZnVuY3Rpb24odWUsWCx5KXsidXNlIHN0cmljdCI7dmFyIEk9dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKEIsdyxQLEYpe3JldHVybiBuZXcoUHx8KFA9UHJvbWlzZSkpKGZ1bmN0aW9uKHosTil7ZnVuY3Rpb24gTChX'@;
put 'KXt0cnl7VShGLm5leHQoVykpfWNhdGNoKFkpe04oWSl9fWZ1bmN0aW9uIEsoVyl7dHJ5e1UoRi50aHJvdyhXKSl9Y2F0Y2goWSl7TihZKX19ZnVuY3Rpb24gVShXKXtXLmRvbmU/eihXLnZhbHVlKTpmdW5jdGlvbiBPKHope3JldHVybiB6IGluc3RhbmNlb2YgUD96Om5ldyBQKGZ1bmN0aW9u'@;
put 'KE4pe04oeil9KX0oVy52YWx1ZSkudGhlbihMLEspfVUoKEY9Ri5hcHBseShCLHd8fFtdKSkubmV4dCgpKX0pfTtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksWC5wYXJzZVNhc1ZpeWFEZWJ1Z1Jlc3BvbnNlPXZvaWQgMDtjb25zdCBfPXkoNTkyOCk7'@;
put 'WC5wYXJzZVNhc1ZpeWFEZWJ1Z1Jlc3BvbnNlPShCLHcsUCk9Pkkodm9pZCAwLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3QgRj1CLnNwbGl0KC88aWZyYW1lIHN0eWxlPSJ3aWR0aDogOTklOyBoZWlnaHQ6IDUwMHB4IiBzcmM9Inw8aWZyYW1lIHN0eWxlPSJ3aWR0aDogOTklOyBo'@;
put 'ZWlnaHQ6IDUwMHB4OyBiYWNrZ3JvdW5kLWNvbG9yOkNhbnZhczsiIHNyYz0vKVsxXSxPPUY/Ri5zcGxpdCgvIj48XC9pZnJhbWU+fD48XC9pZnJhbWU+LylbMF06bnVsbDtpZighTyl0aHJvdyBuZXcgRXJyb3IoIlVuYWJsZSB0byBmaW5kIHdlYm91dCBmaWxlIFVSTC4iKTtyZXR1cm4gdy5n'@;
put 'ZXQoUCtPLHZvaWQgMCwidGV4dC9wbGFpbiIpLnRoZW4oej0+KDAsXy5nZXRWYWxpZEpzb24pKHoucmVzdWx0KSl9KX0sMjgxMzoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDUxMDgpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLnBh'@;
put 'cnNlV2Vib3V0UmVzcG9uc2U9dm9pZCAwO2NvbnN0IF89eSgxMzk1KTtYLnBhcnNlV2Vib3V0UmVzcG9uc2U9KEIsdyk9PntsZXQgUD0iIjtpZihCLmluY2x1ZGVzKCI+PndlYm91dEJFR0lOPDwiKSl0cnl7UD1CLnNwbGl0KCI+PndlYm91dEJFR0lOPDwiKVsxXS5zcGxpdCgiPj53ZWJvdXRF'@;
put 'TkQ8PCIpWzBdfWNhdGNoKEYpe2lmKHcpdGhyb3cgbmV3IF8uV2Vib3V0UmVzcG9uc2VFcnJvcih3KTtQPSIiLEkuZXJyb3IoRil9cmV0dXJuIFB9fSwxMTcwOih1ZSxYKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksWC5l'@;
put 'eHRyYWN0VXNlckxvbmdOYW1lU2FzOT12b2lkIDA7Y29uc3QgeT1bIkxvZyBPZmYiXTtYLmV4dHJhY3RVc2VyTG9uZ05hbWVTYXM5PV89Pntjb25zdCBCPV8/Lm1hdGNoKC8idGl0bGUiOlxzPyIuKj8iLyk7bGV0IHc9Qj8uWzBdLnNwbGl0KCI6IilbMV0udHJpbSgpLFA9dz8uaW5kZXhPZigi'@;
put 'ICIpO3JldHVybiB3Pyh5Lm1hcChGPT57Y29uc3QgTz13Py5pbmRleE9mKEYpfHwtMTtPPi0xJiYoUD1PK0YubGVuZ3RoKX0pLHcuc2xpY2UoUCwtMSkudHJpbSgpKToidW5rbm93biJ9fSw5ODk2Oih1ZSxYKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01v'@;
put 'ZHVsZSIse3ZhbHVlOiEwfSksWC5zZXJpYWxpemU9dm9pZCAwLFguc2VyaWFsaXplPUk9Pntjb25zdCBfPVtdO2Zvcihjb25zdCBnIGluIEkpaWYoSS5oYXNPd25Qcm9wZXJ0eShnKSlpZihJW2ddaW5zdGFuY2VvZiBBcnJheSlmb3IobGV0IEI9MCx3PUlbZ10ubGVuZ3RoO0I8dztCKyspXy5w'@;
put 'dXNoKGVuY29kZVVSSUNvbXBvbmVudChnKSsiPSIrZW5jb2RlVVJJQ29tcG9uZW50KElbZ11bQl0pKTtlbHNlIF8ucHVzaChlbmNvZGVVUklDb21wb25lbnQoZykrIj0iK2VuY29kZVVSSUNvbXBvbmVudChJW2ddKSk7cmV0dXJuIF8uam9pbigiJiIpfX0sNDc5OToodWUsWCk9PnsidXNlIHN0'@;
put 'cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFguc3BsaXRDaHVua3M9dm9pZCAwLFguc3BsaXRDaHVua3M9ST0+e2NvbnN0IGc9TWF0aC5jZWlsKEkubGVuZ3RoLzE2ZTMpLEI9bmV3IEFycmF5KGcpO2ZvcihsZXQgdz0wLFA9MDt3PGc7Kyt3'@;
put 'LFArPTE2ZTMpQlt3XT1JLnN1YnN0cihQLDE2ZTMpO3JldHVybiBCfX0sNDUxNjoodWUsWCk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFgudmFsaWRhdGVJbnB1dD1YLklOVkFMSURfVEFCTEVfU1RSVUNUVVJFPVguTU9S'@;
put 'RV9JTkZPPXZvaWQgMCxYLk1PUkVfSU5GTz0iRm9yIG1vcmUgaW5mbyBzZWUgaHR0cHM6Ly9zYXNqcy5pby9zYXNqcy1hZGFwdGVyLyNyZXF1ZXN0LXJlc3BvbnNlIixYLklOVkFMSURfVEFCTEVfU1RSVUNUVVJFPWBQYXJhbWV0ZXIgZGF0YSBjb250YWlucyBpbnZhbGlkIHRhYmxlIHN0cnVj'@;
put 'dHVyZS4gJHtYLk1PUkVfSU5GT31gLFgudmFsaWRhdGVJbnB1dD1fPT57aWYobnVsbD09PV8pcmV0dXJue3N0YXR1czohMCxtc2c6IiJ9O2lmKCJvYmplY3QiIT09SShfKSlyZXR1cm57c3RhdHVzOiExLG1zZzpYLklOVkFMSURfVEFCTEVfU1RSVUNUVVJFfTtjb25zdCBnPUI9PkIubWF0Y2go'@;
put 'L15cJC4qLykmJk9iamVjdC5rZXlzKF8pLmluY2x1ZGVzKEIucmVwbGFjZSgvXlwkLywiIikpO2Zvcihjb25zdCBCIGluIF8pe2lmKCFCLm1hdGNoKC9eW2EtekEtWl9dLykmJiFnKEIpKXJldHVybntzdGF0dXM6ITEsbXNnOiJGaXJzdCBsZXR0ZXIgb2YgdGFibGUgc2hvdWxkIGJlIGFscGhh'@;
put 'YmV0IG9yIHVuZGVyc2NvcmUuIn07aWYoIUIubWF0Y2goL15bYS16QS1aX11bYS16QS1aMC05X10qJC8pJiYhZyhCKSlyZXR1cm57c3RhdHVzOiExLG1zZzoiVGFibGUgbmFtZSBzaG91bGQgYmUgYWxwaGFudW1lcmljLiJ9O2lmKEIubGVuZ3RoPjMyKXJldHVybntzdGF0dXM6ITEsbXNnOiJN'@;
put 'YXhpbXVtIGxlbmd0aCBmb3IgdGFibGUgbmFtZSBjb3VsZCBiZSAzMiBjaGFyYWN0ZXJzLiJ9O2lmKCJBcnJheSIhPT1JKF9bQl0pJiYhZyhCKSlyZXR1cm57c3RhdHVzOiExLG1zZzpYLklOVkFMSURfVEFCTEVfU1RSVUNUVVJFfTtpZihBcnJheS5pc0FycmF5KF9bQl0pKWZvcihjb25zdCB3'@;
put 'IG9mIF9bQl0pe2lmKCJvYmplY3QiIT09SSh3KSlyZXR1cm57c3RhdHVzOiExLG1zZzpgVGFibGUgJHtCfSBjb250YWlucyBpbnZhbGlkIHN0cnVjdHVyZS4gJHtYLk1PUkVfSU5GT31gfTt7Y29uc3QgUD1PYmplY3Qua2V5cyh3KTtmb3IoY29uc3QgRiBvZiBQKWlmKHZvaWQgMD09PXdbRl0p'@;
put 'cmV0dXJue3N0YXR1czohMSxtc2c6YEEgcm93IGluIHRhYmxlICR7Qn0gY29udGFpbnMgaW52YWxpZCB2YWx1ZS4gQ2FuJ3QgYXNzaWduIHVuZGVmaW5lZCB0byAke0Z9LmB9fX19cmV0dXJue3N0YXR1czohMCxtc2c6IiJ9fTtjb25zdCBJPV89PkFycmF5LmlzQXJyYXkoXyk/IkFycmF5Ijp0'@;
put 'eXBlb2YgX30sODk4MToodWUsWCk9PnsidXNlIHN0cmljdCI7WC5mcm9tQ2FsbGJhY2s9ZnVuY3Rpb24oeSl7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmdW5jdGlvbiguLi5JKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgSVtJLmxlbmd0aC0xXSlyZXR1cm4gbmV3IFByb21pc2UoKF8s'@;
put 'Zyk9PntJLnB1c2goKEIsdyk9Pm51bGwhPUI/ZyhCKTpfKHcpKSx5LmFwcGx5KHRoaXMsSSl9KTt5LmFwcGx5KHRoaXMsSSl9LCJuYW1lIix7dmFsdWU6eS5uYW1lfSl9LFguZnJvbVByb21pc2U9ZnVuY3Rpb24oeSl7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmdW5jdGlvbiguLi5J'@;
put 'KXtjb25zdCBfPUlbSS5sZW5ndGgtMV07aWYoImZ1bmN0aW9uIiE9dHlwZW9mIF8pcmV0dXJuIHkuYXBwbHkodGhpcyxJKTtJLnBvcCgpLHkuYXBwbHkodGhpcyxJKS50aGVuKGc9Pl8obnVsbCxnKSxfKX0sIm5hbWUiLHt2YWx1ZTp5Lm5hbWV9KX19LDQ1NjQ6KHVlLFgseSk9PnsidXNlIHN0'@;
put 'cmljdCI7dmFyIEk9eSg3NDE4KSxfPXkoNzEyOSksZz0vXltceDAwLVx4MjBcdTAwYTBcdTE2ODBcdTIwMDAtXHUyMDBhXHUyMDI4XHUyMDI5XHUyMDJmXHUyMDVmXHUzMDAwXHVmZWZmXSsvLEI9L1tcblxyXHRdL2csdz0vXltBLVphLXpdW0EtWmEtejAtOSstLl0qOlwvXC8vLFA9LzpcZCsk'@;
put 'LyxGPS9eKFthLXpdW2EtejAtOS4rLV0qOik/KFwvXC8pPyhbXFwvXSspPyhbXFNcc10qKS9pLE89L15bYS16QS1aXTovO2Z1bmN0aW9uIHoobmUpe3JldHVybihuZXx8IiIpLnRvU3RyaW5nKCkucmVwbGFjZShnLCIiKX12YXIgTj1bWyIjIiwiaGFzaCJdLFsiPyIsInF1ZXJ5Il0sZnVuY3Rp'@;
put 'b24oaWUsbGUpe3JldHVybiBVKGxlLnByb3RvY29sKT9pZS5yZXBsYWNlKC9cXC9nLCIvIik6aWV9LFsiLyIsInBhdGhuYW1lIl0sWyJAIiwiYXV0aCIsMV0sW05hTiwiaG9zdCIsdm9pZCAwLDEsMV0sWy86KFxkKikkLywicG9ydCIsdm9pZCAwLDFdLFtOYU4sImhvc3RuYW1lIix2b2lkIDAs'@;
put 'MSwxXV0sTD17aGFzaDoxLHF1ZXJ5OjF9O2Z1bmN0aW9uIEsobmUpe3ZhciBpZTtpZT10eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3c6dHlwZW9mIHkuZzwidSI/eS5nOnR5cGVvZiBzZWxmPCJ1Ij9zZWxmOnt9O3ZhciBUZSxtZT17fSxfZT10eXBlb2YobmU9bmV8fGllLmxvY2F0aW9ufHx7fSk7'@;
put 'aWYoImJsb2I6Ij09PW5lLnByb3RvY29sKW1lPW5ldyBxKHVuZXNjYXBlKG5lLnBhdGhuYW1lKSx7fSk7ZWxzZSBpZigic3RyaW5nIj09PV9lKWZvcihUZSBpbiBtZT1uZXcgcShuZSx7fSksTClkZWxldGUgbWVbVGVdO2Vsc2UgaWYoIm9iamVjdCI9PT1fZSl7Zm9yKFRlIGluIG5lKVRlIGlu'@;
put 'IEx8fChtZVtUZV09bmVbVGVdKTt2b2lkIDA9PT1tZS5zbGFzaGVzJiYobWUuc2xhc2hlcz13LnRlc3QobmUuaHJlZikpfXJldHVybiBtZX1mdW5jdGlvbiBVKG5lKXtyZXR1cm4iZmlsZToiPT09bmV8fCJmdHA6Ij09PW5lfHwiaHR0cDoiPT09bmV8fCJodHRwczoiPT09bmV8fCJ3czoiPT09'@;
put 'bmV8fCJ3c3M6Ij09PW5lfWZ1bmN0aW9uIFcobmUsaWUpe25lPShuZT16KG5lKSkucmVwbGFjZShCLCIiKSxpZT1pZXx8e307dmFyIGplLGxlPUYuZXhlYyhuZSksbWU9bGVbMV0/bGVbMV0udG9Mb3dlckNhc2UoKToiIixfZT0hIWxlWzJdLFRlPSEhbGVbM10sU2U9MDtyZXR1cm4gX2U/VGU/'@;
put 'KGplPWxlWzJdK2xlWzNdK2xlWzRdLFNlPWxlWzJdLmxlbmd0aCtsZVszXS5sZW5ndGgpOihqZT1sZVsyXStsZVs0XSxTZT1sZVsyXS5sZW5ndGgpOlRlPyhqZT1sZVszXStsZVs0XSxTZT1sZVszXS5sZW5ndGgpOmplPWxlWzRdLCJmaWxlOiI9PT1tZT9TZT49MiYmKGplPWplLnNsaWNlKDIp'@;
put 'KTpVKG1lKT9qZT1sZVs0XTptZT9fZSYmKGplPWplLnNsaWNlKDIpKTpTZT49MiYmVShpZS5wcm90b2NvbCkmJihqZT1sZVs0XSkse3Byb3RvY29sOm1lLHNsYXNoZXM6X2V8fFUobWUpLHNsYXNoZXNDb3VudDpTZSxyZXN0OmplfX1mdW5jdGlvbiBxKG5lLGllLGxlKXtpZihuZT0obmU9eihu'@;
put 'ZSkpLnJlcGxhY2UoQiwiIiksISh0aGlzIGluc3RhbmNlb2YgcSkpcmV0dXJuIG5ldyBxKG5lLGllLGxlKTt2YXIgbWUsX2UsVGUsU2UsamUsVixwPU4uc2xpY2UoKSxiPXR5cGVvZiBpZSx4PXRoaXMsQz0wO2Zvcigib2JqZWN0IiE9PWImJiJzdHJpbmciIT09YiYmKGxlPWllLGllPW51bGwp'@;
put 'LGxlJiYiZnVuY3Rpb24iIT10eXBlb2YgbGUmJihsZT1fLnBhcnNlKSxtZT0hKF9lPVcobmV8fCIiLGllPUsoaWUpKSkucHJvdG9jb2wmJiFfZS5zbGFzaGVzLHguc2xhc2hlcz1fZS5zbGFzaGVzfHxtZSYmaWUuc2xhc2hlcyx4LnByb3RvY29sPV9lLnByb3RvY29sfHxpZS5wcm90b2NvbHx8'@;
put 'IiIsbmU9X2UucmVzdCwoImZpbGU6Ij09PV9lLnByb3RvY29sJiYoMiE9PV9lLnNsYXNoZXNDb3VudHx8Ty50ZXN0KG5lKSl8fCFfZS5zbGFzaGVzJiYoX2UucHJvdG9jb2x8fF9lLnNsYXNoZXNDb3VudDwyfHwhVSh4LnByb3RvY29sKSkpJiYocFszXT1bLyguKikvLCJwYXRobmFtZSJdKTtD'@;
put 'PHAubGVuZ3RoO0MrKykiZnVuY3Rpb24iIT10eXBlb2YoU2U9cFtDXSk/KFY9U2VbMV0sKFRlPVNlWzBdKSE9VGU/eFtWXT1uZToic3RyaW5nIj09dHlwZW9mIFRlP34oamU9IkAiPT09VGU/bmUubGFzdEluZGV4T2YoVGUpOm5lLmluZGV4T2YoVGUpKSYmKCJudW1iZXIiPT10eXBlb2YgU2Vb'@;
put 'Ml0/KHhbVl09bmUuc2xpY2UoMCxqZSksbmU9bmUuc2xpY2UoamUrU2VbMl0pKTooeFtWXT1uZS5zbGljZShqZSksbmU9bmUuc2xpY2UoMCxqZSkpKTooamU9VGUuZXhlYyhuZSkpJiYoeFtWXT1qZVsxXSxuZT1uZS5zbGljZSgwLGplLmluZGV4KSkseFtWXT14W1ZdfHxtZSYmU2VbM10mJmll'@;
put 'W1ZdfHwiIixTZVs0XSYmKHhbVl09eFtWXS50b0xvd2VyQ2FzZSgpKSk6bmU9U2UobmUseCk7bGUmJih4LnF1ZXJ5PWxlKHgucXVlcnkpKSxtZSYmaWUuc2xhc2hlcyYmIi8iIT09eC5wYXRobmFtZS5jaGFyQXQoMCkmJigiIiE9PXgucGF0aG5hbWV8fCIiIT09aWUucGF0aG5hbWUpJiYoeC5w'@;
put 'YXRobmFtZT1mdW5jdGlvbiBZKG5lLGllKXtpZigiIj09PW5lKXJldHVybiBpZTtmb3IodmFyIGxlPShpZXx8Ii8iKS5zcGxpdCgiLyIpLnNsaWNlKDAsLTEpLmNvbmNhdChuZS5zcGxpdCgiLyIpKSxtZT1sZS5sZW5ndGgsX2U9bGVbbWUtMV0sVGU9ITEsU2U9MDttZS0tOykiLiI9PT1sZVtt'@;
put 'ZV0/bGUuc3BsaWNlKG1lLDEpOiIuLiI9PT1sZVttZV0/KGxlLnNwbGljZShtZSwxKSxTZSsrKTpTZSYmKDA9PT1tZSYmKFRlPSEwKSxsZS5zcGxpY2UobWUsMSksU2UtLSk7cmV0dXJuIFRlJiZsZS51bnNoaWZ0KCIiKSwoIi4iPT09X2V8fCIuLiI9PT1fZSkmJmxlLnB1c2goIiIpLGxlLmpv'@;
put 'aW4oIi8iKX0oeC5wYXRobmFtZSxpZS5wYXRobmFtZSkpLCIvIiE9PXgucGF0aG5hbWUuY2hhckF0KDApJiZVKHgucHJvdG9jb2wpJiYoeC5wYXRobmFtZT0iLyIreC5wYXRobmFtZSksSSh4LnBvcnQseC5wcm90b2NvbCl8fCh4Lmhvc3Q9eC5ob3N0bmFtZSx4LnBvcnQ9IiIpLHgudXNlcm5h'@;
put 'bWU9eC5wYXNzd29yZD0iIix4LmF1dGgmJih+KGplPXguYXV0aC5pbmRleE9mKCI6IikpPyh4LnVzZXJuYW1lPXguYXV0aC5zbGljZSgwLGplKSx4LnVzZXJuYW1lPWVuY29kZVVSSUNvbXBvbmVudChkZWNvZGVVUklDb21wb25lbnQoeC51c2VybmFtZSkpLHgucGFzc3dvcmQ9eC5hdXRoLnNs'@;
put 'aWNlKGplKzEpLHgucGFzc3dvcmQ9ZW5jb2RlVVJJQ29tcG9uZW50KGRlY29kZVVSSUNvbXBvbmVudCh4LnBhc3N3b3JkKSkpOngudXNlcm5hbWU9ZW5jb2RlVVJJQ29tcG9uZW50KGRlY29kZVVSSUNvbXBvbmVudCh4LmF1dGgpKSx4LmF1dGg9eC5wYXNzd29yZD94LnVzZXJuYW1lKyI6Iit4'@;
put 'LnBhc3N3b3JkOngudXNlcm5hbWUpLHgub3JpZ2luPSJmaWxlOiIhPT14LnByb3RvY29sJiZVKHgucHJvdG9jb2wpJiZ4Lmhvc3Q/eC5wcm90b2NvbCsiLy8iK3guaG9zdDoibnVsbCIseC5ocmVmPXgudG9TdHJpbmcoKX1xLnByb3RvdHlwZT17c2V0OmZ1bmN0aW9uIGVlKG5lLGllLGxlKXt2'@;
put 'YXIgbWU9dGhpcztzd2l0Y2gobmUpe2Nhc2UicXVlcnkiOiJzdHJpbmciPT10eXBlb2YgaWUmJmllLmxlbmd0aCYmKGllPShsZXx8Xy5wYXJzZSkoaWUpKSxtZVtuZV09aWU7YnJlYWs7Y2FzZSJwb3J0IjptZVtuZV09aWUsSShpZSxtZS5wcm90b2NvbCk/aWUmJihtZS5ob3N0PW1lLmhvc3Ru'@;
put 'YW1lKyI6IitpZSk6KG1lLmhvc3Q9bWUuaG9zdG5hbWUsbWVbbmVdPSIiKTticmVhaztjYXNlImhvc3RuYW1lIjptZVtuZV09aWUsbWUucG9ydCYmKGllKz0iOiIrbWUucG9ydCksbWUuaG9zdD1pZTticmVhaztjYXNlImhvc3QiOm1lW25lXT1pZSxQLnRlc3QoaWUpPyhpZT1pZS5zcGxpdCgi'@;
put 'OiIpLG1lLnBvcnQ9aWUucG9wKCksbWUuaG9zdG5hbWU9aWUuam9pbigiOiIpKToobWUuaG9zdG5hbWU9aWUsbWUucG9ydD0iIik7YnJlYWs7Y2FzZSJwcm90b2NvbCI6bWUucHJvdG9jb2w9aWUudG9Mb3dlckNhc2UoKSxtZS5zbGFzaGVzPSFsZTticmVhaztjYXNlInBhdGhuYW1lIjpjYXNl'@;
put 'Imhhc2giOmlmKGllKXt2YXIgX2U9InBhdGhuYW1lIj09PW5lPyIvIjoiIyI7bWVbbmVdPWllLmNoYXJBdCgwKSE9PV9lP19lK2llOmllfWVsc2UgbWVbbmVdPWllO2JyZWFrO2Nhc2UidXNlcm5hbWUiOmNhc2UicGFzc3dvcmQiOm1lW25lXT1lbmNvZGVVUklDb21wb25lbnQoaWUpO2JyZWFr'@;
put 'O2Nhc2UiYXV0aCI6dmFyIFRlPWllLmluZGV4T2YoIjoiKTt+VGU/KG1lLnVzZXJuYW1lPWllLnNsaWNlKDAsVGUpLG1lLnVzZXJuYW1lPWVuY29kZVVSSUNvbXBvbmVudChkZWNvZGVVUklDb21wb25lbnQobWUudXNlcm5hbWUpKSxtZS5wYXNzd29yZD1pZS5zbGljZShUZSsxKSxtZS5wYXNz'@;
put 'd29yZD1lbmNvZGVVUklDb21wb25lbnQoZGVjb2RlVVJJQ29tcG9uZW50KG1lLnBhc3N3b3JkKSkpOm1lLnVzZXJuYW1lPWVuY29kZVVSSUNvbXBvbmVudChkZWNvZGVVUklDb21wb25lbnQoaWUpKX1mb3IodmFyIFNlPTA7U2U8Ti5sZW5ndGg7U2UrKyl7dmFyIGplPU5bU2VdO2plWzRdJiYo'@;
put 'bWVbamVbMV1dPW1lW2plWzFdXS50b0xvd2VyQ2FzZSgpKX1yZXR1cm4gbWUuYXV0aD1tZS5wYXNzd29yZD9tZS51c2VybmFtZSsiOiIrbWUucGFzc3dvcmQ6bWUudXNlcm5hbWUsbWUub3JpZ2luPSJmaWxlOiIhPT1tZS5wcm90b2NvbCYmVShtZS5wcm90b2NvbCkmJm1lLmhvc3Q/bWUucHJv'@;
put 'dG9jb2wrIi8vIittZS5ob3N0OiJudWxsIixtZS5ocmVmPW1lLnRvU3RyaW5nKCksbWV9LHRvU3RyaW5nOmZ1bmN0aW9uIEoobmUpeyghbmV8fCJmdW5jdGlvbiIhPXR5cGVvZiBuZSkmJihuZT1fLnN0cmluZ2lmeSk7dmFyIGllLGxlPXRoaXMsbWU9bGUuaG9zdCxfZT1sZS5wcm90b2NvbDtf'@;
put 'ZSYmIjoiIT09X2UuY2hhckF0KF9lLmxlbmd0aC0xKSYmKF9lKz0iOiIpO3ZhciBUZT1fZSsobGUucHJvdG9jb2wmJmxlLnNsYXNoZXN8fFUobGUucHJvdG9jb2wpPyIvLyI6IiIpO3JldHVybiBsZS51c2VybmFtZT8oVGUrPWxlLnVzZXJuYW1lLGxlLnBhc3N3b3JkJiYoVGUrPSI6IitsZS5w'@;
put 'YXNzd29yZCksVGUrPSJAIik6bGUucGFzc3dvcmQ/KFRlKz0iOiIrbGUucGFzc3dvcmQsVGUrPSJAIik6ImZpbGU6IiE9PWxlLnByb3RvY29sJiZVKGxlLnByb3RvY29sKSYmIW1lJiYiLyIhPT1sZS5wYXRobmFtZSYmKFRlKz0iQCIpLCgiOiI9PT1tZVttZS5sZW5ndGgtMV18fFAudGVzdChs'@;
put 'ZS5ob3N0bmFtZSkmJiFsZS5wb3J0KSYmKG1lKz0iOiIpLFRlKz1tZStsZS5wYXRobmFtZSwoaWU9Im9iamVjdCI9PXR5cGVvZiBsZS5xdWVyeT9uZShsZS5xdWVyeSk6bGUucXVlcnkpJiYoVGUrPSI/IiE9PWllLmNoYXJBdCgwKT8iPyIraWU6aWUpLGxlLmhhc2gmJihUZSs9bGUuaGFzaCks'@;
put 'VGV9fSxxLmV4dHJhY3RQcm90b2NvbD1XLHEubG9jYXRpb249SyxxLnRyaW1MZWZ0PXoscS5xcz1fLHVlLmV4cG9ydHM9cX0sNDkyNzoodWUsWCx5KT0+e3ZhciBJPXkoNTEwOCk7ZnVuY3Rpb24gZyhCKXt0cnl7aWYoIXkuZy5sb2NhbFN0b3JhZ2UpcmV0dXJuITF9Y2F0Y2h7cmV0dXJuITF9'@;
put 'dmFyIHc9eS5nLmxvY2FsU3RvcmFnZVtCXTtyZXR1cm4gbnVsbCE9dyYmInRydWUiPT09U3RyaW5nKHcpLnRvTG93ZXJDYXNlKCl9dWUuZXhwb3J0cz1mdW5jdGlvbiBfKEIsdyl7aWYoZygibm9EZXByZWNhdGlvbiIpKXJldHVybiBCO3ZhciBQPSExO3JldHVybiBmdW5jdGlvbiBGKCl7aWYo'@;
put 'IVApe2lmKGcoInRocm93RGVwcmVjYXRpb24iKSl0aHJvdyBuZXcgRXJyb3Iodyk7ZygidHJhY2VEZXByZWNhdGlvbiIpP0kudHJhY2Uodyk6SS53YXJuKHcpLFA9ITB9cmV0dXJuIEIuYXBwbHkodGhpcyxhcmd1bWVudHMpfX19LDM4NDp1ZT0+e3VlLmV4cG9ydHM9ZnVuY3Rpb24oeSl7cmV0'@;
put 'dXJuIHkmJiJvYmplY3QiPT10eXBlb2YgeSYmImZ1bmN0aW9uIj09dHlwZW9mIHkuY29weSYmImZ1bmN0aW9uIj09dHlwZW9mIHkuZmlsbCYmImZ1bmN0aW9uIj09dHlwZW9mIHkucmVhZFVJbnQ4fX0sNTk1NToodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDI1ODQpLF89eSg4NjYy'@;
put 'KSxnPXkoNjQzMCksQj15KDU2OTIpO2Z1bmN0aW9uIHcoQWUpe3JldHVybiBBZS5jYWxsLmJpbmQoQWUpfXZhciBQPXR5cGVvZiBCaWdJbnQ8InUiLEY9dHlwZW9mIFN5bWJvbDwidSIsTz13KE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcpLHo9dyhOdW1iZXIucHJvdG90eXBlLnZhbHVlT2Yp'@;
put 'LE49dyhTdHJpbmcucHJvdG90eXBlLnZhbHVlT2YpLEw9dyhCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mKTtpZihQKXZhciBLPXcoQmlnSW50LnByb3RvdHlwZS52YWx1ZU9mKTtpZihGKXZhciBVPXcoU3ltYm9sLnByb3RvdHlwZS52YWx1ZU9mKTtmdW5jdGlvbiBXKEFlLF90KXtpZigib2Jq'@;
put 'ZWN0IiE9dHlwZW9mIEFlKXJldHVybiExO3RyeXtyZXR1cm4gX3QoQWUpLCEwfWNhdGNoe3JldHVybiExfX1mdW5jdGlvbiBwKEFlKXtyZXR1cm4iW29iamVjdCBNYXBdIj09PU8oQWUpfWZ1bmN0aW9uIHgoQWUpe3JldHVybiJbb2JqZWN0IFNldF0iPT09TyhBZSl9ZnVuY3Rpb24gVChBZSl7'@;
put 'cmV0dXJuIltvYmplY3QgV2Vha01hcF0iPT09TyhBZSl9ZnVuY3Rpb24gaihBZSl7cmV0dXJuIltvYmplY3QgV2Vha1NldF0iPT09TyhBZSl9ZnVuY3Rpb24gbShBZSl7cmV0dXJuIltvYmplY3QgQXJyYXlCdWZmZXJdIj09PU8oQWUpfWZ1bmN0aW9uIEEoQWUpe3JldHVybiEodHlwZW9mIEFy'@;
put 'cmF5QnVmZmVyPiJ1IikmJihtLndvcmtpbmc/bShBZSk6QWUgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcil9ZnVuY3Rpb24gYWUoQWUpe3JldHVybiJbb2JqZWN0IERhdGFWaWV3XSI9PT1PKEFlKX1mdW5jdGlvbiB0ZShBZSl7cmV0dXJuISh0eXBlb2YgRGF0YVZpZXc+InUiKSYmKGFlLndvcmtp'@;
put 'bmc/YWUoQWUpOkFlIGluc3RhbmNlb2YgRGF0YVZpZXcpfVguaXNBcmd1bWVudHNPYmplY3Q9SSxYLmlzR2VuZXJhdG9yRnVuY3Rpb249XyxYLmlzVHlwZWRBcnJheT1CLFguaXNQcm9taXNlPWZ1bmN0aW9uIFkoQWUpe3JldHVybiB0eXBlb2YgUHJvbWlzZTwidSImJkFlIGluc3RhbmNlb2Yg'@;
put 'UHJvbWlzZXx8bnVsbCE9PUFlJiYib2JqZWN0Ij09dHlwZW9mIEFlJiYiZnVuY3Rpb24iPT10eXBlb2YgQWUudGhlbiYmImZ1bmN0aW9uIj09dHlwZW9mIEFlLmNhdGNofSxYLmlzQXJyYXlCdWZmZXJWaWV3PWZ1bmN0aW9uIHEoQWUpe3JldHVybiB0eXBlb2YgQXJyYXlCdWZmZXI8InUiJiZB'@;
put 'cnJheUJ1ZmZlci5pc1ZpZXc/QXJyYXlCdWZmZXIuaXNWaWV3KEFlKTpCKEFlKXx8dGUoQWUpfSxYLmlzVWludDhBcnJheT1mdW5jdGlvbiBlZShBZSl7cmV0dXJuIlVpbnQ4QXJyYXkiPT09ZyhBZSl9LFguaXNVaW50OENsYW1wZWRBcnJheT1mdW5jdGlvbiBKKEFlKXtyZXR1cm4iVWludDhD'@;
put 'bGFtcGVkQXJyYXkiPT09ZyhBZSl9LFguaXNVaW50MTZBcnJheT1mdW5jdGlvbiBuZShBZSl7cmV0dXJuIlVpbnQxNkFycmF5Ij09PWcoQWUpfSxYLmlzVWludDMyQXJyYXk9ZnVuY3Rpb24gaWUoQWUpe3JldHVybiJVaW50MzJBcnJheSI9PT1nKEFlKX0sWC5pc0ludDhBcnJheT1mdW5jdGlv'@;
put 'biBsZShBZSl7cmV0dXJuIkludDhBcnJheSI9PT1nKEFlKX0sWC5pc0ludDE2QXJyYXk9ZnVuY3Rpb24gbWUoQWUpe3JldHVybiJJbnQxNkFycmF5Ij09PWcoQWUpfSxYLmlzSW50MzJBcnJheT1mdW5jdGlvbiBfZShBZSl7cmV0dXJuIkludDMyQXJyYXkiPT09ZyhBZSl9LFguaXNGbG9hdDMy'@;
put 'QXJyYXk9ZnVuY3Rpb24gVGUoQWUpe3JldHVybiJGbG9hdDMyQXJyYXkiPT09ZyhBZSl9LFguaXNGbG9hdDY0QXJyYXk9ZnVuY3Rpb24gU2UoQWUpe3JldHVybiJGbG9hdDY0QXJyYXkiPT09ZyhBZSl9LFguaXNCaWdJbnQ2NEFycmF5PWZ1bmN0aW9uIGplKEFlKXtyZXR1cm4iQmlnSW50NjRB'@;
put 'cnJheSI9PT1nKEFlKX0sWC5pc0JpZ1VpbnQ2NEFycmF5PWZ1bmN0aW9uIFYoQWUpe3JldHVybiJCaWdVaW50NjRBcnJheSI9PT1nKEFlKX0scC53b3JraW5nPXR5cGVvZiBNYXA8InUiJiZwKG5ldyBNYXApLFguaXNNYXA9ZnVuY3Rpb24gYihBZSl7cmV0dXJuISh0eXBlb2YgTWFwPiJ1Iikm'@;
put 'JihwLndvcmtpbmc/cChBZSk6QWUgaW5zdGFuY2VvZiBNYXApfSx4Lndvcmtpbmc9dHlwZW9mIFNldDwidSImJngobmV3IFNldCksWC5pc1NldD1mdW5jdGlvbiBDKEFlKXtyZXR1cm4hKHR5cGVvZiBTZXQ+InUiKSYmKHgud29ya2luZz94KEFlKTpBZSBpbnN0YW5jZW9mIFNldCl9LFQud29y'@;
put 'a2luZz10eXBlb2YgV2Vha01hcDwidSImJlQobmV3IFdlYWtNYXApLFguaXNXZWFrTWFwPWZ1bmN0aW9uIEgoQWUpe3JldHVybiEodHlwZW9mIFdlYWtNYXA+InUiKSYmKFQud29ya2luZz9UKEFlKTpBZSBpbnN0YW5jZW9mIFdlYWtNYXApfSxqLndvcmtpbmc9dHlwZW9mIFdlYWtTZXQ8InUi'@;
put 'JiZqKG5ldyBXZWFrU2V0KSxYLmlzV2Vha1NldD1mdW5jdGlvbiBFKEFlKXtyZXR1cm4gaihBZSl9LG0ud29ya2luZz10eXBlb2YgQXJyYXlCdWZmZXI8InUiJiZtKG5ldyBBcnJheUJ1ZmZlciksWC5pc0FycmF5QnVmZmVyPUEsYWUud29ya2luZz10eXBlb2YgQXJyYXlCdWZmZXI8InUiJiZ0'@;
put 'eXBlb2YgRGF0YVZpZXc8InUiJiZhZShuZXcgRGF0YVZpZXcobmV3IEFycmF5QnVmZmVyKDEpLDAsMSkpLFguaXNEYXRhVmlldz10ZTt2YXIgc2U9dHlwZW9mIFNoYXJlZEFycmF5QnVmZmVyPCJ1Ij9TaGFyZWRBcnJheUJ1ZmZlcjp2b2lkIDA7ZnVuY3Rpb24gd2UoQWUpe3JldHVybiJbb2Jq'@;
put 'ZWN0IFNoYXJlZEFycmF5QnVmZmVyXSI9PT1PKEFlKX1mdW5jdGlvbiBVZShBZSl7cmV0dXJuISh0eXBlb2Ygc2U+InUiKSYmKHR5cGVvZiB3ZS53b3JraW5nPiJ1IiYmKHdlLndvcmtpbmc9d2UobmV3IHNlKSksd2Uud29ya2luZz93ZShBZSk6QWUgaW5zdGFuY2VvZiBzZSl9ZnVuY3Rpb24g'@;
put 'emUoQWUpe3JldHVybiBXKEFlLHopfWZ1bmN0aW9uIERlKEFlKXtyZXR1cm4gVyhBZSxOKX1mdW5jdGlvbiBGZShBZSl7cmV0dXJuIFcoQWUsTCl9ZnVuY3Rpb24gT2UoQWUpe3JldHVybiBQJiZXKEFlLEspfWZ1bmN0aW9uIEllKEFlKXtyZXR1cm4gRiYmVyhBZSxVKX1YLmlzU2hhcmVkQXJy'@;
put 'YXlCdWZmZXI9VWUsWC5pc0FzeW5jRnVuY3Rpb249ZnVuY3Rpb24gSmUoQWUpe3JldHVybiJbb2JqZWN0IEFzeW5jRnVuY3Rpb25dIj09PU8oQWUpfSxYLmlzTWFwSXRlcmF0b3I9ZnVuY3Rpb24gb3QoQWUpe3JldHVybiJbb2JqZWN0IE1hcCBJdGVyYXRvcl0iPT09TyhBZSl9LFguaXNTZXRJ'@;
put 'dGVyYXRvcj1mdW5jdGlvbiB4ZShBZSl7cmV0dXJuIltvYmplY3QgU2V0IEl0ZXJhdG9yXSI9PT1PKEFlKX0sWC5pc0dlbmVyYXRvck9iamVjdD1mdW5jdGlvbiB2ZShBZSl7cmV0dXJuIltvYmplY3QgR2VuZXJhdG9yXSI9PT1PKEFlKX0sWC5pc1dlYkFzc2VtYmx5Q29tcGlsZWRNb2R1bGU9'@;
put 'ZnVuY3Rpb24gWGUoQWUpe3JldHVybiJbb2JqZWN0IFdlYkFzc2VtYmx5Lk1vZHVsZV0iPT09TyhBZSl9LFguaXNOdW1iZXJPYmplY3Q9emUsWC5pc1N0cmluZ09iamVjdD1EZSxYLmlzQm9vbGVhbk9iamVjdD1GZSxYLmlzQmlnSW50T2JqZWN0PU9lLFguaXNTeW1ib2xPYmplY3Q9SWUsWC5p'@;
put 'c0JveGVkUHJpbWl0aXZlPWZ1bmN0aW9uIFZlKEFlKXtyZXR1cm4gemUoQWUpfHxEZShBZSl8fEZlKEFlKXx8T2UoQWUpfHxJZShBZSl9LFguaXNBbnlBcnJheUJ1ZmZlcj1mdW5jdGlvbiBrZShBZSl7cmV0dXJuIHR5cGVvZiBVaW50OEFycmF5PCJ1IiYmKEEoQWUpfHxVZShBZSkpfSxbImlz'@;
put 'UHJveHkiLCJpc0V4dGVybmFsIiwiaXNNb2R1bGVOYW1lc3BhY2VPYmplY3QiXS5mb3JFYWNoKGZ1bmN0aW9uKEFlKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCxBZSx7ZW51bWVyYWJsZTohMSx2YWx1ZTpmdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcihBZSsiIGlzIG5vdCBzdXBwb3J0ZWQg'@;
put 'aW4gdXNlcmxhbmQiKX19KX0pfSw5NTM5Oih1ZSxYLHkpPT57dmFyIEk9eSg0MTU1KSxfPXkoNTEwOCksZz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yc3x8ZnVuY3Rpb24od2Upe2Zvcih2YXIgVWU9T2JqZWN0LmtleXMod2UpLEplPXt9LG90PTA7b3Q8VWUubGVuZ3RoO290Kysp'@;
put 'SmVbVWVbb3RdXT1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHdlLFVlW290XSk7cmV0dXJuIEplfSxCPS8lW3NkaiVdL2c7WC5mb3JtYXQ9ZnVuY3Rpb24oc2Upe2lmKCFfZShzZSkpe2Zvcih2YXIgd2U9W10sVWU9MDtVZTxhcmd1bWVudHMubGVuZ3RoO1VlKyspd2UucHVzaChP'@;
put 'KGFyZ3VtZW50c1tVZV0pKTtyZXR1cm4gd2Uuam9pbigiICIpfVVlPTE7Zm9yKHZhciBKZT1hcmd1bWVudHMsb3Q9SmUubGVuZ3RoLHhlPVN0cmluZyhzZSkucmVwbGFjZShCLGZ1bmN0aW9uKFhlKXtpZigiJSUiPT09WGUpcmV0dXJuIiUiO2lmKFVlPj1vdClyZXR1cm4gWGU7c3dpdGNoKFhl'@;
put 'KXtjYXNlIiVzIjpyZXR1cm4gU3RyaW5nKEplW1VlKytdKTtjYXNlIiVkIjpyZXR1cm4gTnVtYmVyKEplW1VlKytdKTtjYXNlIiVqIjp0cnl7cmV0dXJuIEpTT04uc3RyaW5naWZ5KEplW1VlKytdKX1jYXRjaHtyZXR1cm4iW0NpcmN1bGFyXSJ9ZGVmYXVsdDpyZXR1cm4gWGV9fSksdmU9SmVb'@;
put 'VWVdO1VlPG90O3ZlPUplWysrVWVdKWllKHZlKXx8IVYodmUpP3hlKz0iICIrdmU6eGUrPSIgIitPKHZlKTtyZXR1cm4geGV9LFguZGVwcmVjYXRlPWZ1bmN0aW9uKHNlLHdlKXtpZih0eXBlb2YgSTwidSImJiEwPT09SS5ub0RlcHJlY2F0aW9uKXJldHVybiBzZTtpZih0eXBlb2YgST4idSIp'@;
put 'cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIFguZGVwcmVjYXRlKHNlLHdlKS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9O3ZhciBVZT0hMTtyZXR1cm4gZnVuY3Rpb24gSmUoKXtpZighVWUpe2lmKEkudGhyb3dEZXByZWNhdGlvbil0aHJvdyBuZXcgRXJyb3Iod2UpO0kudHJhY2VEZXByZWNhdGlv'@;
put 'bj9fLnRyYWNlKHdlKTpfLmVycm9yKHdlKSxVZT0hMH1yZXR1cm4gc2UuYXBwbHkodGhpcyxhcmd1bWVudHMpfX07dmFyIHc9e30sUD0vXiQvO2lmKEkuZW52Lk5PREVfREVCVUcpe3ZhciBGPUkuZW52Lk5PREVfREVCVUc7Rj1GLnJlcGxhY2UoL1t8XFx7fSgpW1xdXiQrPy5dL2csIlxcJCYi'@;
put 'KS5yZXBsYWNlKC9cKi9nLCIuKiIpLnJlcGxhY2UoLywvZywiJHxeIikudG9VcHBlckNhc2UoKSxQPW5ldyBSZWdFeHAoIl4iK0YrIiQiLCJpIil9ZnVuY3Rpb24gTyhzZSx3ZSl7dmFyIFVlPXtzZWVuOltdLHN0eWxpemU6Tn07cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+PTMmJihVZS5kZXB0'@;
put 'aD1hcmd1bWVudHNbMl0pLGFyZ3VtZW50cy5sZW5ndGg+PTQmJihVZS5jb2xvcnM9YXJndW1lbnRzWzNdKSxuZSh3ZSk/VWUuc2hvd0hpZGRlbj13ZTp3ZSYmWC5fZXh0ZW5kKFVlLHdlKSxTZShVZS5zaG93SGlkZGVuKSYmKFVlLnNob3dIaWRkZW49ITEpLFNlKFVlLmRlcHRoKSYmKFVlLmRl'@;
put 'cHRoPTIpLFNlKFVlLmNvbG9ycykmJihVZS5jb2xvcnM9ITEpLFNlKFVlLmN1c3RvbUluc3BlY3QpJiYoVWUuY3VzdG9tSW5zcGVjdD0hMCksVWUuY29sb3JzJiYoVWUuc3R5bGl6ZT16KSxLKFVlLHNlLFVlLmRlcHRoKX1mdW5jdGlvbiB6KHNlLHdlKXt2YXIgVWU9Ty5zdHlsZXNbd2VdO3Jl'@;
put 'dHVybiBVZT8iXHgxYlsiK08uY29sb3JzW1VlXVswXSsibSIrc2UrIlx4MWJbIitPLmNvbG9yc1tVZV1bMV0rIm0iOnNlfWZ1bmN0aW9uIE4oc2Usd2Upe3JldHVybiBzZX1mdW5jdGlvbiBLKHNlLHdlLFVlKXtpZihzZS5jdXN0b21JbnNwZWN0JiZ3ZSYmeCh3ZS5pbnNwZWN0KSYmd2UuaW5z'@;
put 'cGVjdCE9PVguaW5zcGVjdCYmKCF3ZS5jb25zdHJ1Y3Rvcnx8d2UuY29uc3RydWN0b3IucHJvdG90eXBlIT09d2UpKXt2YXIgSmU9d2UuaW5zcGVjdChVZSxzZSk7cmV0dXJuIF9lKEplKXx8KEplPUsoc2UsSmUsVWUpKSxKZX12YXIgb3Q9ZnVuY3Rpb24gVShzZSx3ZSl7aWYoU2Uod2UpKXJl'@;
put 'dHVybiBzZS5zdHlsaXplKCJ1bmRlZmluZWQiLCJ1bmRlZmluZWQiKTtpZihfZSh3ZSkpe3ZhciBVZT0iJyIrSlNPTi5zdHJpbmdpZnkod2UpLnJlcGxhY2UoL14ifCIkL2csIiIpLnJlcGxhY2UoLycvZywiXFwnIikucmVwbGFjZSgvXFwiL2csJyInKSsiJyI7cmV0dXJuIHNlLnN0eWxpemUo'@;
put 'VWUsInN0cmluZyIpfXJldHVybiBtZSh3ZSk/c2Uuc3R5bGl6ZSgiIit3ZSwibnVtYmVyIik6bmUod2UpP3NlLnN0eWxpemUoIiIrd2UsImJvb2xlYW4iKTppZSh3ZSk/c2Uuc3R5bGl6ZSgibnVsbCIsIm51bGwiKTp2b2lkIDB9KHNlLHdlKTtpZihvdClyZXR1cm4gb3Q7dmFyIHhlPU9iamVj'@;
put 'dC5rZXlzKHdlKSx2ZT1mdW5jdGlvbiBMKHNlKXt2YXIgd2U9e307cmV0dXJuIHNlLmZvckVhY2goZnVuY3Rpb24oVWUsSmUpe3dlW1VlXT0hMH0pLHdlfSh4ZSk7aWYoc2Uuc2hvd0hpZGRlbiYmKHhlPU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHdlKSksYih3ZSkmJih4ZS5pbmRleE9m'@;
put 'KCJtZXNzYWdlIik+PTB8fHhlLmluZGV4T2YoImRlc2NyaXB0aW9uIik+PTApKXJldHVybiBXKHdlKTtpZigwPT09eGUubGVuZ3RoKXtpZih4KHdlKSlyZXR1cm4gc2Uuc3R5bGl6ZSgiW0Z1bmN0aW9uIisod2UubmFtZT8iOiAiK3dlLm5hbWU6IiIpKyJdIiwic3BlY2lhbCIpO2lmKGplKHdl'@;
put 'KSlyZXR1cm4gc2Uuc3R5bGl6ZShSZWdFeHAucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwod2UpLCJyZWdleHAiKTtpZihwKHdlKSlyZXR1cm4gc2Uuc3R5bGl6ZShEYXRlLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHdlKSwiZGF0ZSIpO2lmKGIod2UpKXJldHVybiBXKHdlKX12YXIgSWUsemU9'@;
put 'IiIsRGU9ITEsRmU9WyJ7IiwifSJdO3JldHVybiBKKHdlKSYmKERlPSEwLEZlPVsiWyIsIl0iXSkseCh3ZSkmJih6ZT0iIFtGdW5jdGlvbiIrKHdlLm5hbWU/IjogIit3ZS5uYW1lOiIiKSsiXSIpLGplKHdlKSYmKHplPSIgIitSZWdFeHAucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwod2UpKSxw'@;
put 'KHdlKSYmKHplPSIgIitEYXRlLnByb3RvdHlwZS50b1VUQ1N0cmluZy5jYWxsKHdlKSksYih3ZSkmJih6ZT0iICIrVyh3ZSkpLDAhPT14ZS5sZW5ndGh8fERlJiYwIT13ZS5sZW5ndGg/VWU8MD9qZSh3ZSk/c2Uuc3R5bGl6ZShSZWdFeHAucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwod2UpLCJy'@;
put 'ZWdleHAiKTpzZS5zdHlsaXplKCJbT2JqZWN0XSIsInNwZWNpYWwiKTooc2Uuc2Vlbi5wdXNoKHdlKSxJZT1EZT9mdW5jdGlvbiBZKHNlLHdlLFVlLEplLG90KXtmb3IodmFyIHhlPVtdLHZlPTAsWGU9d2UubGVuZ3RoO3ZlPFhlOysrdmUpbSh3ZSxTdHJpbmcodmUpKT94ZS5wdXNoKHEoc2Us'@;
put 'd2UsVWUsSmUsU3RyaW5nKHZlKSwhMCkpOnhlLnB1c2goIiIpO3JldHVybiBvdC5mb3JFYWNoKGZ1bmN0aW9uKHplKXt6ZS5tYXRjaCgvXlxkKyQvKXx8eGUucHVzaChxKHNlLHdlLFVlLEplLHplLCEwKSl9KSx4ZX0oc2Usd2UsVWUsdmUseGUpOnhlLm1hcChmdW5jdGlvbihWZSl7cmV0dXJu'@;
put 'IHEoc2Usd2UsVWUsdmUsVmUsRGUpfSksc2Uuc2Vlbi5wb3AoKSxmdW5jdGlvbiBlZShzZSx3ZSxVZSl7dmFyIG90PXNlLnJlZHVjZShmdW5jdGlvbih4ZSx2ZSl7cmV0dXJuIHZlLmluZGV4T2YoIlxuIikseGUrdmUucmVwbGFjZSgvXHUwMDFiXFtcZFxkP20vZywiIikubGVuZ3RoKzF9LDAp'@;
put 'O3JldHVybiBvdD42MD9VZVswXSsoIiI9PT13ZT8iIjp3ZSsiXG4gIikrIiAiK3NlLmpvaW4oIixcbiAgIikrIiAiK1VlWzFdOlVlWzBdK3dlKyIgIitzZS5qb2luKCIsICIpKyIgIitVZVsxXX0oSWUsemUsRmUpKTpGZVswXSt6ZStGZVsxXX1mdW5jdGlvbiBXKHNlKXtyZXR1cm4iWyIrRXJy'@;
put 'b3IucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoc2UpKyJdIn1mdW5jdGlvbiBxKHNlLHdlLFVlLEplLG90LHhlKXt2YXIgdmUsWGUsemU7aWYoKHplPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iod2Usb3QpfHx7dmFsdWU6d2Vbb3RdfSkuZ2V0P1hlPXNlLnN0eWxpemUoemUuc2V0'@;
put 'PyJbR2V0dGVyL1NldHRlcl0iOiJbR2V0dGVyXSIsInNwZWNpYWwiKTp6ZS5zZXQmJihYZT1zZS5zdHlsaXplKCJbU2V0dGVyXSIsInNwZWNpYWwiKSksbShKZSxvdCl8fCh2ZT0iWyIrb3QrIl0iKSxYZXx8KHNlLnNlZW4uaW5kZXhPZih6ZS52YWx1ZSk8MD8oWGU9aWUoVWUpP0soc2UsemUu'@;
put 'dmFsdWUsbnVsbCk6SyhzZSx6ZS52YWx1ZSxVZS0xKSkuaW5kZXhPZigiXG4iKT4tMSYmKFhlPXhlP1hlLnNwbGl0KCJcbiIpLm1hcChmdW5jdGlvbihEZSl7cmV0dXJuIiAgIitEZX0pLmpvaW4oIlxuIikuc2xpY2UoMik6IlxuIitYZS5zcGxpdCgiXG4iKS5tYXAoZnVuY3Rpb24oRGUpe3Jl'@;
put 'dHVybiIgICAiK0RlfSkuam9pbigiXG4iKSk6WGU9c2Uuc3R5bGl6ZSgiW0NpcmN1bGFyXSIsInNwZWNpYWwiKSksU2UodmUpKXtpZih4ZSYmb3QubWF0Y2goL15cZCskLykpcmV0dXJuIFhlOyh2ZT1KU09OLnN0cmluZ2lmeSgiIitvdCkpLm1hdGNoKC9eIihbYS16QS1aX11bYS16QS1aXzAt'@;
put 'OV0qKSIkLyk/KHZlPXZlLnNsaWNlKDEsLTEpLHZlPXNlLnN0eWxpemUodmUsIm5hbWUiKSk6KHZlPXZlLnJlcGxhY2UoLycvZywiXFwnIikucmVwbGFjZSgvXFwiL2csJyInKS5yZXBsYWNlKC8oXiJ8IiQpL2csIiciKSx2ZT1zZS5zdHlsaXplKHZlLCJzdHJpbmciKSl9cmV0dXJuIHZlKyI6'@;
put 'ICIrWGV9ZnVuY3Rpb24gSihzZSl7cmV0dXJuIEFycmF5LmlzQXJyYXkoc2UpfWZ1bmN0aW9uIG5lKHNlKXtyZXR1cm4iYm9vbGVhbiI9PXR5cGVvZiBzZX1mdW5jdGlvbiBpZShzZSl7cmV0dXJuIG51bGw9PT1zZX1mdW5jdGlvbiBtZShzZSl7cmV0dXJuIm51bWJlciI9PXR5cGVvZiBzZX1m'@;
put 'dW5jdGlvbiBfZShzZSl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBzZX1mdW5jdGlvbiBTZShzZSl7cmV0dXJuIHZvaWQgMD09PXNlfWZ1bmN0aW9uIGplKHNlKXtyZXR1cm4gVihzZSkmJiJbb2JqZWN0IFJlZ0V4cF0iPT09VChzZSl9ZnVuY3Rpb24gVihzZSl7cmV0dXJuIm9iamVjdCI9PXR5'@;
put 'cGVvZiBzZSYmbnVsbCE9PXNlfWZ1bmN0aW9uIHAoc2Upe3JldHVybiBWKHNlKSYmIltvYmplY3QgRGF0ZV0iPT09VChzZSl9ZnVuY3Rpb24gYihzZSl7cmV0dXJuIFYoc2UpJiYoIltvYmplY3QgRXJyb3JdIj09PVQoc2UpfHxzZSBpbnN0YW5jZW9mIEVycm9yKX1mdW5jdGlvbiB4KHNlKXty'@;
put 'ZXR1cm4iZnVuY3Rpb24iPT10eXBlb2Ygc2V9ZnVuY3Rpb24gVChzZSl7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChzZSl9ZnVuY3Rpb24gSChzZSl7cmV0dXJuIHNlPDEwPyIwIitzZS50b1N0cmluZygxMCk6c2UudG9TdHJpbmcoMTApfVguZGVidWdsb2c9ZnVuY3Rp'@;
put 'b24oc2Upe2lmKHNlPXNlLnRvVXBwZXJDYXNlKCksIXdbc2VdKWlmKFAudGVzdChzZSkpe3ZhciB3ZT1JLnBpZDt3W3NlXT1mdW5jdGlvbigpe3ZhciBVZT1YLmZvcm1hdC5hcHBseShYLGFyZ3VtZW50cyk7Xy5lcnJvcigiJXMgJWQ6ICVzIixzZSx3ZSxVZSl9fWVsc2Ugd1tzZV09ZnVuY3Rp'@;
put 'b24oKXt9O3JldHVybiB3W3NlXX0sWC5pbnNwZWN0PU8sTy5jb2xvcnM9e2JvbGQ6WzEsMjJdLGl0YWxpYzpbMywyM10sdW5kZXJsaW5lOls0LDI0XSxpbnZlcnNlOls3LDI3XSx3aGl0ZTpbMzcsMzldLGdyZXk6WzkwLDM5XSxibGFjazpbMzAsMzldLGJsdWU6WzM0LDM5XSxjeWFuOlszNiwz'@;
put 'OV0sZ3JlZW46WzMyLDM5XSxtYWdlbnRhOlszNSwzOV0scmVkOlszMSwzOV0seWVsbG93OlszMywzOV19LE8uc3R5bGVzPXtzcGVjaWFsOiJjeWFuIixudW1iZXI6InllbGxvdyIsYm9vbGVhbjoieWVsbG93Iix1bmRlZmluZWQ6ImdyZXkiLG51bGw6ImJvbGQiLHN0cmluZzoiZ3JlZW4iLGRh'@;
put 'dGU6Im1hZ2VudGEiLHJlZ2V4cDoicmVkIn0sWC50eXBlcz15KDU5NTUpLFguaXNBcnJheT1KLFguaXNCb29sZWFuPW5lLFguaXNOdWxsPWllLFguaXNOdWxsT3JVbmRlZmluZWQ9ZnVuY3Rpb24gbGUoc2Upe3JldHVybiBudWxsPT1zZX0sWC5pc051bWJlcj1tZSxYLmlzU3RyaW5nPV9lLFgu'@;
put 'aXNTeW1ib2w9ZnVuY3Rpb24gVGUoc2Upe3JldHVybiJzeW1ib2wiPT10eXBlb2Ygc2V9LFguaXNVbmRlZmluZWQ9U2UsWC5pc1JlZ0V4cD1qZSxYLnR5cGVzLmlzUmVnRXhwPWplLFguaXNPYmplY3Q9VixYLmlzRGF0ZT1wLFgudHlwZXMuaXNEYXRlPXAsWC5pc0Vycm9yPWIsWC50eXBlcy5p'@;
put 'c05hdGl2ZUVycm9yPWIsWC5pc0Z1bmN0aW9uPXgsWC5pc1ByaW1pdGl2ZT1mdW5jdGlvbiBDKHNlKXtyZXR1cm4gbnVsbD09PXNlfHwiYm9vbGVhbiI9PXR5cGVvZiBzZXx8Im51bWJlciI9PXR5cGVvZiBzZXx8InN0cmluZyI9PXR5cGVvZiBzZXx8InN5bWJvbCI9PXR5cGVvZiBzZXx8dHlw'@;
put 'ZW9mIHNlPiJ1In0sWC5pc0J1ZmZlcj15KDM4NCk7dmFyIGo9WyJKYW4iLCJGZWIiLCJNYXIiLCJBcHIiLCJNYXkiLCJKdW4iLCJKdWwiLCJBdWciLCJTZXAiLCJPY3QiLCJOb3YiLCJEZWMiXTtmdW5jdGlvbiBtKHNlLHdlKXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0'@;
put 'eS5jYWxsKHNlLHdlKX1YLmxvZz1mdW5jdGlvbigpe18ubG9nKCIlcyAtICVzIixmdW5jdGlvbiBFKCl7dmFyIHNlPW5ldyBEYXRlLHdlPVtIKHNlLmdldEhvdXJzKCkpLEgoc2UuZ2V0TWludXRlcygpKSxIKHNlLmdldFNlY29uZHMoKSldLmpvaW4oIjoiKTtyZXR1cm5bc2UuZ2V0RGF0ZSgp'@;
put 'LGpbc2UuZ2V0TW9udGgoKV0sd2VdLmpvaW4oIiAiKX0oKSxYLmZvcm1hdC5hcHBseShYLGFyZ3VtZW50cykpfSxYLmluaGVyaXRzPXkoNTcxNyksWC5fZXh0ZW5kPWZ1bmN0aW9uKHNlLHdlKXtpZighd2V8fCFWKHdlKSlyZXR1cm4gc2U7Zm9yKHZhciBVZT1PYmplY3Qua2V5cyh3ZSksSmU9'@;
put 'VWUubGVuZ3RoO0plLS07KXNlW1VlW0plXV09d2VbVWVbSmVdXTtyZXR1cm4gc2V9O3ZhciBBPXR5cGVvZiBTeW1ib2w8InUiP1N5bWJvbCgidXRpbC5wcm9taXNpZnkuY3VzdG9tIik6dm9pZCAwO2Z1bmN0aW9uIGFlKHNlLHdlKXtpZighc2Upe3ZhciBVZT1uZXcgRXJyb3IoIlByb21pc2Ug'@;
put 'd2FzIHJlamVjdGVkIHdpdGggYSBmYWxzeSB2YWx1ZSIpO1VlLnJlYXNvbj1zZSxzZT1VZX1yZXR1cm4gd2Uoc2UpfVgucHJvbWlzaWZ5PWZ1bmN0aW9uKHdlKXtpZigiZnVuY3Rpb24iIT10eXBlb2Ygd2UpdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlICJvcmlnaW5hbCIgYXJndW1lbnQgbXVz'@;
put 'dCBiZSBvZiB0eXBlIEZ1bmN0aW9uJyk7aWYoQSYmd2VbQV0pe3ZhciBVZTtpZigiZnVuY3Rpb24iIT10eXBlb2YoVWU9d2VbQV0pKXRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSAidXRpbC5wcm9taXNpZnkuY3VzdG9tIiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgRnVuY3Rpb24nKTtyZXR1'@;
put 'cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KFVlLEEse3ZhbHVlOlVlLGVudW1lcmFibGU6ITEsd3JpdGFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksVWV9ZnVuY3Rpb24gVWUoKXtmb3IodmFyIEplLG90LHhlPW5ldyBQcm9taXNlKGZ1bmN0aW9uKHplLERlKXtKZT16ZSxvdD1EZX0pLHZlPVtd'@;
put 'LFhlPTA7WGU8YXJndW1lbnRzLmxlbmd0aDtYZSsrKXZlLnB1c2goYXJndW1lbnRzW1hlXSk7dmUucHVzaChmdW5jdGlvbih6ZSxEZSl7emU/b3QoemUpOkplKERlKX0pO3RyeXt3ZS5hcHBseSh0aGlzLHZlKX1jYXRjaCh6ZSl7b3QoemUpfXJldHVybiB4ZX1yZXR1cm4gT2JqZWN0LnNldFBy'@;
put 'b3RvdHlwZU9mKFVlLE9iamVjdC5nZXRQcm90b3R5cGVPZih3ZSkpLEEmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShVZSxBLHt2YWx1ZTpVZSxlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFVlLGcod2UpKX0sWC5wcm9t'@;
put 'aXNpZnkuY3VzdG9tPUEsWC5jYWxsYmFja2lmeT1mdW5jdGlvbiB0ZShzZSl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHNlKXRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSAib3JpZ2luYWwiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBGdW5jdGlvbicpO2Z1bmN0aW9uIHdlKCl7Zm9yKHZhciBV'@;
put 'ZT1bXSxKZT0wO0plPGFyZ3VtZW50cy5sZW5ndGg7SmUrKylVZS5wdXNoKGFyZ3VtZW50c1tKZV0pO3ZhciBvdD1VZS5wb3AoKTtpZigiZnVuY3Rpb24iIT10eXBlb2Ygb3QpdGhyb3cgbmV3IFR5cGVFcnJvcigiVGhlIGxhc3QgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIEZ1bmN0aW9uIik7'@;
put 'dmFyIHhlPXRoaXMsdmU9ZnVuY3Rpb24oKXtyZXR1cm4gb3QuYXBwbHkoeGUsYXJndW1lbnRzKX07c2UuYXBwbHkodGhpcyxVZSkudGhlbihmdW5jdGlvbihYZSl7SS5uZXh0VGljayh2ZS5iaW5kKG51bGwsbnVsbCxYZSkpfSxmdW5jdGlvbihYZSl7SS5uZXh0VGljayhhZS5iaW5kKG51bGws'@;
put 'WGUsdmUpKX0pfXJldHVybiBPYmplY3Quc2V0UHJvdG90eXBlT2Yod2UsT2JqZWN0LmdldFByb3RvdHlwZU9mKHNlKSksT2JqZWN0LmRlZmluZVByb3BlcnRpZXMod2UsZyhzZSkpLHdlfX0sNDgxOih1ZSxYLHkpPT57IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0IjtJLmV4cG9ydHMuaXNfdXJp'@;
put 'PWcsSS5leHBvcnRzLmlzX2h0dHBfdXJpPUIsSS5leHBvcnRzLmlzX2h0dHBzX3VyaT13LEkuZXhwb3J0cy5pc193ZWJfdXJpPVAsSS5leHBvcnRzLmlzVXJpPWcsSS5leHBvcnRzLmlzSHR0cFVyaT1CLEkuZXhwb3J0cy5pc0h0dHBzVXJpPXcsSS5leHBvcnRzLmlzV2ViVXJpPVA7dmFyIF89'@;
put 'ZnVuY3Rpb24oRil7cmV0dXJuIEYubWF0Y2goLyg/OihbXjpcLz8jXSspOik/KD86XC9cLyhbXlwvPyNdKikpPyhbXj8jXSopKD86XD8oW14jXSopKT8oPzojKC4qKSk/Lyl9O2Z1bmN0aW9uIGcoRil7aWYoRiYmIS9bXmEtejAtOVw6XC9cP1wjXFtcXVxAXCFcJFwmXCdcKFwpXCpcK1wsXDtc'@;
put 'PVwuXC1cX1x+XCVdL2kudGVzdChGKSYmIS8lW14wLTlhLWZdL2kudGVzdChGKSYmIS8lWzAtOWEtZl0oOj9bXjAtOWEtZl18JCkvaS50ZXN0KEYpKXt2YXIgTyxOLEwsSyxVLHo9IiIsVz0iIjtpZihOPShPPV8oRikpWzJdLEw9T1szXSxLPU9bNF0sVT1PWzVdLCh6PU9bMV0pJiZ6Lmxlbmd0'@;
put 'aCYmTC5sZW5ndGg+PTApe2lmKE4mJk4ubGVuZ3RoKXtpZigwIT09TC5sZW5ndGgmJiEvXlwvLy50ZXN0KEwpKXJldHVybn1lbHNlIGlmKC9eXC9cLy8udGVzdChMKSlyZXR1cm47aWYoL15bYS16XVthLXowLTlcK1wtXC5dKiQvLnRlc3Qoei50b0xvd2VyQ2FzZSgpKSlyZXR1cm4gVys9eisi'@;
put 'OiIsTiYmTi5sZW5ndGgmJihXKz0iLy8iK04pLFcrPUwsSyYmSy5sZW5ndGgmJihXKz0iPyIrSyksVSYmVS5sZW5ndGgmJihXKz0iIyIrVSksV319fWZ1bmN0aW9uIEIoRixPKXtpZihnKEYpKXt2YXIgeixLLFcsWSxOPSIiLEw9IiIsVT0iIixxPSIiO2lmKEw9KHo9XyhGKSlbMl0sSz16WzNd'@;
put 'LFc9els0XSxZPXpbNV0sTj16WzFdKXtpZihPKXtpZigiaHR0cHMiIT1OLnRvTG93ZXJDYXNlKCkpcmV0dXJufWVsc2UgaWYoImh0dHAiIT1OLnRvTG93ZXJDYXNlKCkpcmV0dXJuO2lmKEwpcmV0dXJuLzooXGQrKSQvLnRlc3QoTCkmJihVPUwubWF0Y2goLzooXGQrKSQvKVswXSxMPUwucmVw'@;
put 'bGFjZSgvOlxkKyQvLCIiKSkscSs9TisiOiIscSs9Ii8vIitMLFUmJihxKz1VKSxxKz1LLFcmJlcubGVuZ3RoJiYocSs9Ij8iK1cpLFkmJlkubGVuZ3RoJiYocSs9IiMiK1kpLHF9fX1mdW5jdGlvbiB3KEYpe3JldHVybiBCKEYsITApfWZ1bmN0aW9uIFAoRil7cmV0dXJuIEIoRil8fHcoRil9'@;
put 'fSh1ZT15Lm5tZCh1ZSkpfSw1MTQwOihfX3VudXNlZF93ZWJwYWNrX21vZHVsZSxleHBvcnRzKT0+e3ZhciBpbmRleE9mPWZ1bmN0aW9uKHVlLFgpe2lmKHVlLmluZGV4T2YpcmV0dXJuIHVlLmluZGV4T2YoWCk7Zm9yKHZhciB5PTA7eTx1ZS5sZW5ndGg7eSsrKWlmKHVlW3ldPT09WClyZXR1'@;
put 'cm4geTtyZXR1cm4tMX0sT2JqZWN0X2tleXM9ZnVuY3Rpb24odWUpe2lmKE9iamVjdC5rZXlzKXJldHVybiBPYmplY3Qua2V5cyh1ZSk7dmFyIFg9W107Zm9yKHZhciB5IGluIHVlKVgucHVzaCh5KTtyZXR1cm4gWH0sZm9yRWFjaD1mdW5jdGlvbih1ZSxYKXtpZih1ZS5mb3JFYWNoKXJldHVy'@;
put 'biB1ZS5mb3JFYWNoKFgpO2Zvcih2YXIgeT0wO3k8dWUubGVuZ3RoO3krKylYKHVlW3ldLHksdWUpfSxkZWZpbmVQcm9wPWZ1bmN0aW9uKCl7dHJ5e3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoe30sIl8iLHt9KSxmdW5jdGlvbih1ZSxYLHkpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh1'@;
put 'ZSxYLHt3cml0YWJsZTohMCxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMCx2YWx1ZTp5fSl9fWNhdGNoe3JldHVybiBmdW5jdGlvbihYLHksSSl7WFt5XT1JfX19KCksZ2xvYmFscz1bIkFycmF5IiwiQm9vbGVhbiIsIkRhdGUiLCJFcnJvciIsIkV2YWxFcnJvciIsIkZ1bmN0aW9uIiwi'@;
put 'SW5maW5pdHkiLCJKU09OIiwiTWF0aCIsIk5hTiIsIk51bWJlciIsIk9iamVjdCIsIlJhbmdlRXJyb3IiLCJSZWZlcmVuY2VFcnJvciIsIlJlZ0V4cCIsIlN0cmluZyIsIlN5bnRheEVycm9yIiwiVHlwZUVycm9yIiwiVVJJRXJyb3IiLCJkZWNvZGVVUkkiLCJkZWNvZGVVUklDb21wb25lbnQi'@;
put 'LCJlbmNvZGVVUkkiLCJlbmNvZGVVUklDb21wb25lbnQiLCJlc2NhcGUiLCJldmFsIiwiaXNGaW5pdGUiLCJpc05hTiIsInBhcnNlRmxvYXQiLCJwYXJzZUludCIsInVuZGVmaW5lZCIsInVuZXNjYXBlIl07ZnVuY3Rpb24gQ29udGV4dCgpe31Db250ZXh0LnByb3RvdHlwZT17fTt2YXIgU2Ny'@;
put 'aXB0PWV4cG9ydHMuU2NyaXB0PWZ1bmN0aW9uKFgpe2lmKCEodGhpcyBpbnN0YW5jZW9mIFNjcmlwdCkpcmV0dXJuIG5ldyBTY3JpcHQoWCk7dGhpcy5jb2RlPVh9O1NjcmlwdC5wcm90b3R5cGUucnVuSW5Db250ZXh0PWZ1bmN0aW9uKHVlKXtpZighKHVlIGluc3RhbmNlb2YgQ29udGV4dCkp'@;
put 'dGhyb3cgbmV3IFR5cGVFcnJvcigibmVlZHMgYSAnY29udGV4dCcgYXJndW1lbnQuIik7dmFyIFg9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaWZyYW1lIik7WC5zdHlsZXx8KFguc3R5bGU9e30pLFguc3R5bGUuZGlzcGxheT0ibm9uZSIsZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChYKTt2'@;
put 'YXIgeT1YLmNvbnRlbnRXaW5kb3csST15LmV2YWwsXz15LmV4ZWNTY3JpcHQ7IUkmJl8mJihfLmNhbGwoeSwibnVsbCIpLEk9eS5ldmFsKSxmb3JFYWNoKE9iamVjdF9rZXlzKHVlKSxmdW5jdGlvbih3KXt5W3ddPXVlW3ddfSksZm9yRWFjaChnbG9iYWxzLGZ1bmN0aW9uKHcpe3VlW3ddJiYo'@;
put 'eVt3XT11ZVt3XSl9KTt2YXIgZz1PYmplY3Rfa2V5cyh5KSxCPUkuY2FsbCh5LHRoaXMuY29kZSk7cmV0dXJuIGZvckVhY2goT2JqZWN0X2tleXMoeSksZnVuY3Rpb24odyl7KHcgaW4gdWV8fC0xPT09aW5kZXhPZihnLHcpKSYmKHVlW3ddPXlbd10pfSksZm9yRWFjaChnbG9iYWxzLGZ1bmN0'@;
put 'aW9uKHcpe3cgaW4gdWV8fGRlZmluZVByb3AodWUsdyx5W3ddKX0pLGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoWCksQn0sU2NyaXB0LnByb3RvdHlwZS5ydW5JblRoaXNDb250ZXh0PWZ1bmN0aW9uKCl7cmV0dXJuIGV2YWwodGhpcy5jb2RlKX0sU2NyaXB0LnByb3RvdHlwZS5ydW5Jbk5l'@;
put 'd0NvbnRleHQ9ZnVuY3Rpb24odWUpe3ZhciBYPVNjcmlwdC5jcmVhdGVDb250ZXh0KHVlKSx5PXRoaXMucnVuSW5Db250ZXh0KFgpO3JldHVybiB1ZSYmZm9yRWFjaChPYmplY3Rfa2V5cyhYKSxmdW5jdGlvbihJKXt1ZVtJXT1YW0ldfSkseX0sZm9yRWFjaChPYmplY3Rfa2V5cyhTY3JpcHQu'@;
put 'cHJvdG90eXBlKSxmdW5jdGlvbih1ZSl7ZXhwb3J0c1t1ZV09U2NyaXB0W3VlXT1mdW5jdGlvbihYKXt2YXIgeT1TY3JpcHQoWCk7cmV0dXJuIHlbdWVdLmFwcGx5KHksW10uc2xpY2UuY2FsbChhcmd1bWVudHMsMSkpfX0pLGV4cG9ydHMuaXNDb250ZXh0PWZ1bmN0aW9uKHVlKXtyZXR1cm4g'@;
put 'dWUgaW5zdGFuY2VvZiBDb250ZXh0fSxleHBvcnRzLmNyZWF0ZVNjcmlwdD1mdW5jdGlvbih1ZSl7cmV0dXJuIGV4cG9ydHMuU2NyaXB0KHVlKX0sZXhwb3J0cy5jcmVhdGVDb250ZXh0PVNjcmlwdC5jcmVhdGVDb250ZXh0PWZ1bmN0aW9uKHVlKXt2YXIgWD1uZXcgQ29udGV4dDtyZXR1cm4i'@;
put 'b2JqZWN0Ij09dHlwZW9mIHVlJiZmb3JFYWNoKE9iamVjdF9rZXlzKHVlKSxmdW5jdGlvbih5KXtYW3ldPXVlW3ldfSksWH19LDY0MzA6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg0MDI5KSxfPXkoMzA4MyksZz15KDU1NTkpLEI9eSg3Mzc5KSx3PXkoNzI5NiksUD1CKCJPYmpl'@;
put 'Y3QucHJvdG90eXBlLnRvU3RyaW5nIiksRj15KDY0MTApKCksTz10eXBlb2YgZ2xvYmFsVGhpcz4idSI/eS5nOmdsb2JhbFRoaXMsej1fKCksTj1CKCJTdHJpbmcucHJvdG90eXBlLnNsaWNlIiksTD1PYmplY3QuZ2V0UHJvdG90eXBlT2YsSz1CKCJBcnJheS5wcm90b3R5cGUuaW5kZXhPZiIs'@;
put 'ITApfHxmdW5jdGlvbihlZSxKKXtmb3IodmFyIG5lPTA7bmU8ZWUubGVuZ3RoO25lKz0xKWlmKGVlW25lXT09PUopcmV0dXJuIG5lO3JldHVybi0xfSxVPXtfX3Byb3RvX186bnVsbH07SSh6LEYmJncmJkw/ZnVuY3Rpb24ocSl7dmFyIGVlPW5ldyBPW3FdO2lmKFN5bWJvbC50b1N0cmluZ1Rh'@;
put 'ZyBpbiBlZSl7dmFyIEo9TChlZSksbmU9dyhKLFN5bWJvbC50b1N0cmluZ1RhZyk7aWYoIW5lKXt2YXIgaWU9TChKKTtuZT13KGllLFN5bWJvbC50b1N0cmluZ1RhZyl9VVsiJCIrcV09ZyhuZS5nZXQpfX06ZnVuY3Rpb24ocSl7dmFyIGVlPW5ldyBPW3FdLEo9ZWUuc2xpY2V8fGVlLnNldDtK'@;
put 'JiYoVVsiJCIrcV09ZyhKKSl9KSx1ZS5leHBvcnRzPWZ1bmN0aW9uKGVlKXtpZighZWV8fCJvYmplY3QiIT10eXBlb2YgZWUpcmV0dXJuITE7aWYoIUYpe3ZhciBKPU4oUChlZSksOCwtMSk7cmV0dXJuIEsoeixKKT4tMT9KOiJPYmplY3QiPT09SiYmZnVuY3Rpb24oZWUpe3ZhciBKPSExO3Jl'@;
put 'dHVybiBJKFUsZnVuY3Rpb24obmUsaWUpe2lmKCFKKXRyeXtuZShlZSksSj1OKGllLDEpfWNhdGNoe319KSxKfShlZSl9cmV0dXJuIHc/ZnVuY3Rpb24oZWUpe3ZhciBKPSExO3JldHVybiBJKFUsZnVuY3Rpb24obmUsaWUpe2lmKCFKKXRyeXsiJCIrbmUoZWUpPT09aWUmJihKPU4oaWUsMSkp'@;
put 'fWNhdGNoe319KSxKfShlZSk6bnVsbH19LDg2NDY6KCk9Pnt9LDk1MDooKT0+e30sNjYwMTooKT0+e30sOTIxNDooKT0+e30sNjQxOTooKT0+e30sNjM1MzooKT0+e30sODYyMzooKT0+e30sNzc0ODooKT0+e30sNTU2ODooKT0+e30sNTQ0MzooKT0+e30sNDEyOTooKT0+e30sNjYxOTooKT0+'@;
put 'e30sNzEwODooKT0+e30sMjM2MTooKT0+e30sNDYxNjooKT0+e30sODM3MzooKT0+e30sMzA4MzoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDk5MDgpLF89dHlwZW9mIGdsb2JhbFRoaXM+InUiP3kuZzpnbG9iYWxUaGlzO3VlLmV4cG9ydHM9ZnVuY3Rpb24oKXtmb3IodmFyIEI9'@;
put 'W10sdz0wO3c8SS5sZW5ndGg7dysrKSJmdW5jdGlvbiI9PXR5cGVvZiBfW0lbd11dJiYoQltCLmxlbmd0aF09SVt3XSk7cmV0dXJuIEJ9fSw3MjE4Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoNDE1NSksXz15KDg3NjQpLkJ1ZmZlcixnPXkoNTEwOCk7ZnVuY3Rpb24gQihTdCxC'@;
put 'dCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIFN0LmFwcGx5KEJ0LGFyZ3VtZW50cyl9fWNvbnN0e3RvU3RyaW5nOnd9PU9iamVjdC5wcm90b3R5cGUse2dldFByb3RvdHlwZU9mOlB9PU9iamVjdCxGPShTdD0+QnQ9Pntjb25zdCBfbj13LmNhbGwoQnQpO3JldHVybiBTdFtfbl18fChTdFtf'@;
put 'bl09X24uc2xpY2UoOCwtMSkudG9Mb3dlckNhc2UoKSl9KShPYmplY3QuY3JlYXRlKG51bGwpKSxPPVN0PT4oU3Q9U3QudG9Mb3dlckNhc2UoKSxCdD0+RihCdCk9PT1TdCksej1TdD0+QnQ9PnR5cGVvZiBCdD09PVN0LHtpc0FycmF5Ok59PUFycmF5LEw9eigidW5kZWZpbmVkIiksVT1PKCJB'@;
put 'cnJheUJ1ZmZlciIpLFk9eigic3RyaW5nIikscT16KCJmdW5jdGlvbiIpLGVlPXooIm51bWJlciIpLEo9U3Q9Pm51bGwhPT1TdCYmIm9iamVjdCI9PXR5cGVvZiBTdCxpZT1TdD0+e2lmKCJvYmplY3QiIT09RihTdCkpcmV0dXJuITE7Y29uc3QgQnQ9UChTdCk7cmV0dXJuIShudWxsIT09QnQm'@;
put 'JkJ0IT09T2JqZWN0LnByb3RvdHlwZSYmbnVsbCE9PU9iamVjdC5nZXRQcm90b3R5cGVPZihCdCl8fFN5bWJvbC50b1N0cmluZ1RhZyBpbiBTdHx8U3ltYm9sLml0ZXJhdG9yIGluIFN0KX0sbGU9TygiRGF0ZSIpLG1lPU8oIkZpbGUiKSxfZT1PKCJCbG9iIiksVGU9TygiRmlsZUxpc3QiKSxW'@;
put 'PU8oIlVSTFNlYXJjaFBhcmFtcyIpLFtwLGIseCxDXT1bIlJlYWRhYmxlU3RyZWFtIiwiUmVxdWVzdCIsIlJlc3BvbnNlIiwiSGVhZGVycyJdLm1hcChPKTtmdW5jdGlvbiBIKFN0LEJ0LHthbGxPd25LZXlzOl9uPSExfT17fSl7aWYobnVsbD09PVN0fHx0eXBlb2YgU3Q+InUiKXJldHVybjts'@;
put 'ZXQgbW4sSW47aWYoIm9iamVjdCIhPXR5cGVvZiBTdCYmKFN0PVtTdF0pLE4oU3QpKWZvcihtbj0wLEluPVN0Lmxlbmd0aDttbjxJbjttbisrKUJ0LmNhbGwobnVsbCxTdFttbl0sbW4sU3QpO2Vsc2V7Y29uc3QgYm49X24/T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoU3QpOk9iamVjdC5r'@;
put 'ZXlzKFN0KSx1cj1ibi5sZW5ndGg7bGV0IGJpO2Zvcihtbj0wO21uPHVyO21uKyspYmk9Ym5bbW5dLEJ0LmNhbGwobnVsbCxTdFtiaV0sYmksU3QpfX1mdW5jdGlvbiBqKFN0LEJ0KXtCdD1CdC50b0xvd2VyQ2FzZSgpO2NvbnN0IF9uPU9iamVjdC5rZXlzKFN0KTtsZXQgSW4sbW49X24ubGVu'@;
put 'Z3RoO2Zvcig7bW4tLSA+MDspaWYoSW49X25bbW5dLEJ0PT09SW4udG9Mb3dlckNhc2UoKSlyZXR1cm4gSW47cmV0dXJuIG51bGx9Y29uc3QgRT10eXBlb2YgZ2xvYmFsVGhpczwidSI/Z2xvYmFsVGhpczp0eXBlb2Ygc2VsZjwidSI/c2VsZjp0eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3c6eS5n'@;
put 'LG09U3Q9PiFMKFN0KSYmU3QhPT1FLG90PShTdD0+QnQ9PlN0JiZCdCBpbnN0YW5jZW9mIFN0KSh0eXBlb2YgVWludDhBcnJheTwidSImJlAoVWludDhBcnJheSkpLFhlPU8oIkhUTUxGb3JtRWxlbWVudCIpLERlPSgoe2hhc093blByb3BlcnR5OlN0fSk9PihCdCxfbik9PlN0LmNhbGwoQnQs'@;
put 'X24pKShPYmplY3QucHJvdG90eXBlKSxGZT1PKCJSZWdFeHAiKSxPZT0oU3QsQnQpPT57Y29uc3QgX249T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoU3QpLG1uPXt9O0goX24sKEluLGJuKT0+e2xldCB1cjshMSE9PSh1cj1CdChJbixibixTdCkpJiYobW5bYm5dPXVyfHxJbil9'@;
put 'KSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyhTdCxtbil9LFFlPU8oIkFzeW5jRnVuY3Rpb24iKSx5dD0oU3Q9ImZ1bmN0aW9uIj09dHlwZW9mIHNldEltbWVkaWF0ZSxCdD1xKEUucG9zdE1lc3NhZ2UpLFN0P3NldEltbWVkaWF0ZTpCdD8oX249YGF4aW9zQCR7TWF0aC5yYW5kb20oKX1gLG1u'@;
put 'PVtdLEUuYWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsKHtzb3VyY2U6SW4sZGF0YTpibn0pPT57SW49PT1FJiZibj09PV9uJiZtbi5sZW5ndGgmJm1uLnNoaWZ0KCkoKX0sITEpLEluPT57bW4ucHVzaChJbiksRS5wb3N0TWVzc2FnZShfbiwiKiIpfSk6X249PnNldFRpbWVvdXQoX24pKSxN'@;
put 'dD10eXBlb2YgcXVldWVNaWNyb3Rhc2s8InUiP3F1ZXVlTWljcm90YXNrLmJpbmQoRSk6dHlwZW9mIEk8InUiJiZJLm5leHRUaWNrfHx5dDt2YXIgU3QsQnQsX24sbW4sRHQ9e2lzQXJyYXk6Tixpc0FycmF5QnVmZmVyOlUsaXNCdWZmZXI6ZnVuY3Rpb24gSyhTdCl7cmV0dXJuIG51bGwhPT1T'@;
put 'dCYmIUwoU3QpJiZudWxsIT09U3QuY29uc3RydWN0b3ImJiFMKFN0LmNvbnN0cnVjdG9yKSYmcShTdC5jb25zdHJ1Y3Rvci5pc0J1ZmZlcikmJlN0LmNvbnN0cnVjdG9yLmlzQnVmZmVyKFN0KX0saXNGb3JtRGF0YTpTdD0+e2xldCBCdDtyZXR1cm4gU3QmJigiZnVuY3Rpb24iPT10eXBlb2Yg'@;
put 'Rm9ybURhdGEmJlN0IGluc3RhbmNlb2YgRm9ybURhdGF8fHEoU3QuYXBwZW5kKSYmKCJmb3JtZGF0YSI9PT0oQnQ9RihTdCkpfHwib2JqZWN0Ij09PUJ0JiZxKFN0LnRvU3RyaW5nKSYmIltvYmplY3QgRm9ybURhdGFdIj09PVN0LnRvU3RyaW5nKCkpKX0saXNBcnJheUJ1ZmZlclZpZXc6ZnVu'@;
put 'Y3Rpb24gVyhTdCl7bGV0IEJ0O3JldHVybiBCdD10eXBlb2YgQXJyYXlCdWZmZXI8InUiJiZBcnJheUJ1ZmZlci5pc1ZpZXc/QXJyYXlCdWZmZXIuaXNWaWV3KFN0KTpTdCYmU3QuYnVmZmVyJiZVKFN0LmJ1ZmZlciksQnR9LGlzU3RyaW5nOlksaXNOdW1iZXI6ZWUsaXNCb29sZWFuOlN0PT4h'@;
put 'MD09PVN0fHwhMT09PVN0LGlzT2JqZWN0OkosaXNQbGFpbk9iamVjdDppZSxpc1JlYWRhYmxlU3RyZWFtOnAsaXNSZXF1ZXN0OmIsaXNSZXNwb25zZTp4LGlzSGVhZGVyczpDLGlzVW5kZWZpbmVkOkwsaXNEYXRlOmxlLGlzRmlsZTptZSxpc0Jsb2I6X2UsaXNSZWdFeHA6RmUsaXNGdW5jdGlv'@;
put 'bjpxLGlzU3RyZWFtOlN0PT5KKFN0KSYmcShTdC5waXBlKSxpc1VSTFNlYXJjaFBhcmFtczpWLGlzVHlwZWRBcnJheTpvdCxpc0ZpbGVMaXN0OlRlLGZvckVhY2g6SCxtZXJnZTpmdW5jdGlvbiBBKCl7Y29uc3R7Y2FzZWxlc3M6U3R9PW0odGhpcykmJnRoaXN8fHt9LEJ0PXt9LF9uPShtbixJ'@;
put 'bik9Pntjb25zdCBibj1TdCYmaihCdCxJbil8fEluO0J0W2JuXT1pZShCdFtibl0pJiZpZShtbik/QShCdFtibl0sbW4pOmllKG1uKT9BKHt9LG1uKTpOKG1uKT9tbi5zbGljZSgpOm1ufTtmb3IobGV0IG1uPTAsSW49YXJndW1lbnRzLmxlbmd0aDttbjxJbjttbisrKWFyZ3VtZW50c1ttbl0m'@;
put 'JkgoYXJndW1lbnRzW21uXSxfbik7cmV0dXJuIEJ0fSxleHRlbmQ6KFN0LEJ0LF9uLHthbGxPd25LZXlzOm1ufT17fSk9PihIKEJ0LChJbixibik9PntTdFtibl09X24mJnEoSW4pP0IoSW4sX24pOklufSx7YWxsT3duS2V5czptbn0pLFN0KSx0cmltOlN0PT5TdC50cmltP1N0LnRyaW0oKTpT'@;
put 'dC5yZXBsYWNlKC9eW1xzXHVGRUZGXHhBMF0rfFtcc1x1RkVGRlx4QTBdKyQvZywiIiksc3RyaXBCT006U3Q9Pig2NTI3OT09PVN0LmNoYXJDb2RlQXQoMCkmJihTdD1TdC5zbGljZSgxKSksU3QpLGluaGVyaXRzOihTdCxCdCxfbixtbik9PntTdC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShC'@;
put 'dC5wcm90b3R5cGUsbW4pLFN0LnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1TdCxPYmplY3QuZGVmaW5lUHJvcGVydHkoU3QsInN1cGVyIix7dmFsdWU6QnQucHJvdG90eXBlfSksX24mJk9iamVjdC5hc3NpZ24oU3QucHJvdG90eXBlLF9uKX0sdG9GbGF0T2JqZWN0OihTdCxCdCxfbixtbik9Pnts'@;
put 'ZXQgSW4sYm4sdXI7Y29uc3QgYmk9e307aWYoQnQ9QnR8fHt9LG51bGw9PVN0KXJldHVybiBCdDtkb3tmb3IoSW49T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoU3QpLGJuPUluLmxlbmd0aDtibi0tID4wOyl1cj1Jbltibl0sKCFtbnx8bW4odXIsU3QsQnQpKSYmIWJpW3VyXSYmKEJ0W3Vy'@;
put 'XT1TdFt1cl0sYmlbdXJdPSEwKTtTdD0hMSE9PV9uJiZQKFN0KX13aGlsZShTdCYmKCFfbnx8X24oU3QsQnQpKSYmU3QhPT1PYmplY3QucHJvdG90eXBlKTtyZXR1cm4gQnR9LGtpbmRPZjpGLGtpbmRPZlRlc3Q6TyxlbmRzV2l0aDooU3QsQnQsX24pPT57U3Q9U3RyaW5nKFN0KSwodm9pZCAw'@;
put 'PT09X258fF9uPlN0Lmxlbmd0aCkmJihfbj1TdC5sZW5ndGgpO2NvbnN0IG1uPVN0LmluZGV4T2YoQnQsX24tPUJ0Lmxlbmd0aCk7cmV0dXJuLTEhPT1tbiYmbW49PT1fbn0sdG9BcnJheTpTdD0+e2lmKCFTdClyZXR1cm4gbnVsbDtpZihOKFN0KSlyZXR1cm4gU3Q7bGV0IEJ0PVN0Lmxlbmd0'@;
put 'aDtpZighZWUoQnQpKXJldHVybiBudWxsO2NvbnN0IF9uPW5ldyBBcnJheShCdCk7Zm9yKDtCdC0tID4wOylfbltCdF09U3RbQnRdO3JldHVybiBfbn0sZm9yRWFjaEVudHJ5OihTdCxCdCk9Pntjb25zdCBtbj0oU3QmJlN0W1N5bWJvbC5pdGVyYXRvcl0pLmNhbGwoU3QpO2xldCBJbjtmb3Io'@;
put 'OyhJbj1tbi5uZXh0KCkpJiYhSW4uZG9uZTspe2NvbnN0IGJuPUluLnZhbHVlO0J0LmNhbGwoU3QsYm5bMF0sYm5bMV0pfX0sbWF0Y2hBbGw6KFN0LEJ0KT0+e2xldCBfbjtjb25zdCBtbj1bXTtmb3IoO251bGwhPT0oX249U3QuZXhlYyhCdCkpOyltbi5wdXNoKF9uKTtyZXR1cm4gbW59LGlz'@;
put 'SFRNTEZvcm06WGUsaGFzT3duUHJvcGVydHk6RGUsaGFzT3duUHJvcDpEZSxyZWR1Y2VEZXNjcmlwdG9yczpPZSxmcmVlemVNZXRob2RzOlN0PT57T2UoU3QsKEJ0LF9uKT0+e2lmKHEoU3QpJiYtMSE9PVsiYXJndW1lbnRzIiwiY2FsbGVyIiwiY2FsbGVlIl0uaW5kZXhPZihfbikpcmV0dXJu'@;
put 'ITE7aWYocShTdFtfbl0pKXtpZihCdC5lbnVtZXJhYmxlPSExLCJ3cml0YWJsZSJpbiBCdClyZXR1cm4gdm9pZChCdC53cml0YWJsZT0hMSk7QnQuc2V0fHwoQnQuc2V0PSgpPT57dGhyb3cgRXJyb3IoIkNhbiBub3QgcmV3cml0ZSByZWFkLW9ubHkgbWV0aG9kICciK19uKyInIil9KX19KX0s'@;
put 'dG9PYmplY3RTZXQ6KFN0LEJ0KT0+e2NvbnN0IF9uPXt9LG1uPUluPT57SW4uZm9yRWFjaChibj0+e19uW2JuXT0hMH0pfTtyZXR1cm4gTihTdCk/bW4oU3QpOm1uKFN0cmluZyhTdCkuc3BsaXQoQnQpKSxfbn0sdG9DYW1lbENhc2U6U3Q9PlN0LnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvWy1f'@;
put 'XHNdKFthLXpcZF0pKFx3KikvZyxmdW5jdGlvbihfbixtbixJbil7cmV0dXJuIG1uLnRvVXBwZXJDYXNlKCkrSW59KSxub29wOigpPT57fSx0b0Zpbml0ZU51bWJlcjooU3QsQnQpPT5udWxsIT1TdCYmTnVtYmVyLmlzRmluaXRlKFN0PStTdCk/U3Q6QnQsZmluZEtleTpqLGdsb2JhbDpFLGlz'@;
put 'Q29udGV4dERlZmluZWQ6bSxpc1NwZWNDb21wbGlhbnRGb3JtOmZ1bmN0aW9uIF90KFN0KXtyZXR1cm4hIShTdCYmcShTdC5hcHBlbmQpJiYiRm9ybURhdGEiPT09U3RbU3ltYm9sLnRvU3RyaW5nVGFnXSYmU3RbU3ltYm9sLml0ZXJhdG9yXSl9LHRvSlNPTk9iamVjdDpTdD0+e2NvbnN0IEJ0'@;
put 'PW5ldyBBcnJheSgxMCksX249KG1uLEluKT0+e2lmKEoobW4pKXtpZihCdC5pbmRleE9mKG1uKT49MClyZXR1cm47aWYoISgidG9KU09OImluIG1uKSl7QnRbSW5dPW1uO2NvbnN0IGJuPU4obW4pP1tdOnt9O3JldHVybiBIKG1uLCh1cixiaSk9Pntjb25zdCBGcj1fbih1cixJbisxKTshTChG'@;
put 'cikmJihibltiaV09RnIpfSksQnRbSW5dPXZvaWQgMCxibn19cmV0dXJuIG1ufTtyZXR1cm4gX24oU3QsMCl9LGlzQXN5bmNGbjpRZSxpc1RoZW5hYmxlOlN0PT5TdCYmKEooU3QpfHxxKFN0KSkmJnEoU3QudGhlbikmJnEoU3QuY2F0Y2gpLHNldEltbWVkaWF0ZTp5dCxhc2FwOk10fTtmdW5j'@;
put 'dGlvbiBpdChTdCxCdCxfbixtbixJbil7RXJyb3IuY2FsbCh0aGlzKSxFcnJvci5jYXB0dXJlU3RhY2tUcmFjZT9FcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLHRoaXMuY29uc3RydWN0b3IpOnRoaXMuc3RhY2s9KG5ldyBFcnJvcikuc3RhY2ssdGhpcy5tZXNzYWdlPVN0LHRoaXMubmFt'@;
put 'ZT0iQXhpb3NFcnJvciIsQnQmJih0aGlzLmNvZGU9QnQpLF9uJiYodGhpcy5jb25maWc9X24pLG1uJiYodGhpcy5yZXF1ZXN0PW1uKSxJbiYmKHRoaXMucmVzcG9uc2U9SW4sdGhpcy5zdGF0dXM9SW4uc3RhdHVzP0luLnN0YXR1czpudWxsKX1EdC5pbmhlcml0cyhpdCxFcnJvcix7dG9KU09O'@;
put 'OmZ1bmN0aW9uKCl7cmV0dXJue21lc3NhZ2U6dGhpcy5tZXNzYWdlLG5hbWU6dGhpcy5uYW1lLGRlc2NyaXB0aW9uOnRoaXMuZGVzY3JpcHRpb24sbnVtYmVyOnRoaXMubnVtYmVyLGZpbGVOYW1lOnRoaXMuZmlsZU5hbWUsbGluZU51bWJlcjp0aGlzLmxpbmVOdW1iZXIsY29sdW1uTnVtYmVy'@;
put 'OnRoaXMuY29sdW1uTnVtYmVyLHN0YWNrOnRoaXMuc3RhY2ssY29uZmlnOkR0LnRvSlNPTk9iamVjdCh0aGlzLmNvbmZpZyksY29kZTp0aGlzLmNvZGUsc3RhdHVzOnRoaXMuc3RhdHVzfX19KTtjb25zdCAkZT1pdC5wcm90b3R5cGUsdHQ9e307ZnVuY3Rpb24gdXQoU3Qpe3JldHVybiBEdC5p'@;
put 'c1BsYWluT2JqZWN0KFN0KXx8RHQuaXNBcnJheShTdCl9ZnVuY3Rpb24gcXQoU3Qpe3JldHVybiBEdC5lbmRzV2l0aChTdCwiW10iKT9TdC5zbGljZSgwLC0yKTpTdH1mdW5jdGlvbiBSdChTdCxCdCxfbil7cmV0dXJuIFN0P1N0LmNvbmNhdChCdCkubWFwKGZ1bmN0aW9uKEluLGJuKXtyZXR1'@;
put 'cm4gSW49cXQoSW4pLCFfbiYmYm4/IlsiK0luKyJdIjpJbn0pLmpvaW4oX24/Ii4iOiIiKTpCdH1bIkVSUl9CQURfT1BUSU9OX1ZBTFVFIiwiRVJSX0JBRF9PUFRJT04iLCJFQ09OTkFCT1JURUQiLCJFVElNRURPVVQiLCJFUlJfTkVUV09SSyIsIkVSUl9GUl9UT09fTUFOWV9SRURJUkVDVFMi'@;
put 'LCJFUlJfREVQUkVDQVRFRCIsIkVSUl9CQURfUkVTUE9OU0UiLCJFUlJfQkFEX1JFUVVFU1QiLCJFUlJfQ0FOQ0VMRUQiLCJFUlJfTk9UX1NVUFBPUlQiLCJFUlJfSU5WQUxJRF9VUkwiXS5mb3JFYWNoKFN0PT57dHRbU3RdPXt2YWx1ZTpTdH19KSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyhp'@;
put 'dCx0dCksT2JqZWN0LmRlZmluZVByb3BlcnR5KCRlLCJpc0F4aW9zRXJyb3IiLHt2YWx1ZTohMH0pLGl0LmZyb209KFN0LEJ0LF9uLG1uLEluLGJuKT0+e2NvbnN0IHVyPU9iamVjdC5jcmVhdGUoJGUpO3JldHVybiBEdC50b0ZsYXRPYmplY3QoU3QsdXIsZnVuY3Rpb24oRnIpe3JldHVybiBG'@;
put 'ciE9PUVycm9yLnByb3RvdHlwZX0sYmk9PiJpc0F4aW9zRXJyb3IiIT09YmkpLGl0LmNhbGwodXIsU3QubWVzc2FnZSxCdCxfbixtbixJbiksdXIuY2F1c2U9U3QsdXIubmFtZT1TdC5uYW1lLGJuJiZPYmplY3QuYXNzaWduKHVyLGJuKSx1cn07Y29uc3QgY2k9RHQudG9GbGF0T2JqZWN0KER0'@;
put 'LHt9LG51bGwsZnVuY3Rpb24oQnQpe3JldHVybi9eaXNbQS1aXS8udGVzdChCdCl9KTtmdW5jdGlvbiBRdChTdCxCdCxfbil7aWYoIUR0LmlzT2JqZWN0KFN0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJ0YXJnZXQgbXVzdCBiZSBhbiBvYmplY3QiKTtCdD1CdHx8bmV3IEZvcm1EYXRhO2NvbnN0'@;
put 'IG1uPShfbj1EdC50b0ZsYXRPYmplY3QoX24se21ldGFUb2tlbnM6ITAsZG90czohMSxpbmRleGVzOiExfSwhMSxmdW5jdGlvbihfbyxqaSl7cmV0dXJuIUR0LmlzVW5kZWZpbmVkKGppW19vXSl9KSkubWV0YVRva2VucyxJbj1fbi52aXNpdG9yfHxvYSxibj1fbi5kb3RzLHVyPV9uLmluZGV4'@;
put 'ZXMsRnI9KF9uLkJsb2J8fHR5cGVvZiBCbG9iPCJ1IiYmQmxvYikmJkR0LmlzU3BlY0NvbXBsaWFudEZvcm0oQnQpO2lmKCFEdC5pc0Z1bmN0aW9uKEluKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJ2aXNpdG9yIG11c3QgYmUgYSBmdW5jdGlvbiIpO2Z1bmN0aW9uIHRhKHRvKXtpZihudWxsPT09'@;
put 'dG8pcmV0dXJuIiI7aWYoRHQuaXNEYXRlKHRvKSlyZXR1cm4gdG8udG9JU09TdHJpbmcoKTtpZighRnImJkR0LmlzQmxvYih0bykpdGhyb3cgbmV3IGl0KCJCbG9iIGlzIG5vdCBzdXBwb3J0ZWQuIFVzZSBhIEJ1ZmZlciBpbnN0ZWFkLiIpO3JldHVybiBEdC5pc0FycmF5QnVmZmVyKHRvKXx8'@;
put 'RHQuaXNUeXBlZEFycmF5KHRvKT9GciYmImZ1bmN0aW9uIj09dHlwZW9mIEJsb2I/bmV3IEJsb2IoW3RvXSk6Xy5mcm9tKHRvKTp0b31mdW5jdGlvbiBvYSh0byxfbyxqaSl7bGV0IFBjPXRvO2lmKHRvJiYhamkmJiJvYmplY3QiPT10eXBlb2YgdG8paWYoRHQuZW5kc1dpdGgoX28sInt9Iikp'@;
put 'X289bW4/X286X28uc2xpY2UoMCwtMiksdG89SlNPTi5zdHJpbmdpZnkodG8pO2Vsc2UgaWYoRHQuaXNBcnJheSh0bykmJmZ1bmN0aW9uIFB0KFN0KXtyZXR1cm4gRHQuaXNBcnJheShTdCkmJiFTdC5zb21lKHV0KX0odG8pfHwoRHQuaXNGaWxlTGlzdCh0byl8fER0LmVuZHNXaXRoKF9vLCJb'@;
put 'XSIpKSYmKFBjPUR0LnRvQXJyYXkodG8pKSlyZXR1cm4gX289cXQoX28pLFBjLmZvckVhY2goZnVuY3Rpb24oQ2EsVGEpeyFEdC5pc1VuZGVmaW5lZChDYSkmJm51bGwhPT1DYSYmQnQuYXBwZW5kKCEwPT09dXI/UnQoW19vXSxUYSxibik6bnVsbD09PXVyP19vOl9vKyJbXSIsdGEoQ2EpKX0p'@;
put 'LCExO3JldHVybiEhdXQodG8pfHwoQnQuYXBwZW5kKFJ0KGppLF9vLGJuKSx0YSh0bykpLCExKX1jb25zdCBWYT1bXSwkbz1PYmplY3QuYXNzaWduKGNpLHtkZWZhdWx0VmlzaXRvcjpvYSxjb252ZXJ0VmFsdWU6dGEsaXNWaXNpdGFibGU6dXR9KTtpZighRHQuaXNPYmplY3QoU3QpKXRocm93'@;
put 'IG5ldyBUeXBlRXJyb3IoImRhdGEgbXVzdCBiZSBhbiBvYmplY3QiKTtyZXR1cm4gZnVuY3Rpb24gWGwodG8sX28pe2lmKCFEdC5pc1VuZGVmaW5lZCh0bykpe2lmKC0xIT09VmEuaW5kZXhPZih0bykpdGhyb3cgRXJyb3IoIkNpcmN1bGFyIHJlZmVyZW5jZSBkZXRlY3RlZCBpbiAiK19vLmpv'@;
put 'aW4oIi4iKSk7VmEucHVzaCh0byksRHQuZm9yRWFjaCh0byxmdW5jdGlvbihQYyx6bCl7ITA9PT0oIShEdC5pc1VuZGVmaW5lZChQYyl8fG51bGw9PT1QYykmJkluLmNhbGwoQnQsUGMsRHQuaXNTdHJpbmcoemwpP3psLnRyaW0oKTp6bCxfbywkbykpJiZYbChQYyxfbz9fby5jb25jYXQoemwp'@;
put 'Olt6bF0pfSksVmEucG9wKCl9fShTdCksQnR9ZnVuY3Rpb24gc24oU3Qpe2NvbnN0IEJ0PXsiISI6IiUyMSIsIiciOiIlMjciLCIoIjoiJTI4IiwiKSI6IiUyOSIsIn4iOiIlN0UiLCIlMjAiOiIrIiwiJTAwIjoiXDAifTtyZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KFN0KS5yZXBsYWNlKC9b'@;
put 'IScoKX5dfCUyMHwlMDAvZyxmdW5jdGlvbihtbil7cmV0dXJuIEJ0W21uXX0pfWZ1bmN0aW9uIFJpKFN0LEJ0KXt0aGlzLl9wYWlycz1bXSxTdCYmUXQoU3QsdGhpcyxCdCl9Y29uc3QgaG49UmkucHJvdG90eXBlO2Z1bmN0aW9uIGZ0KFN0KXtyZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KFN0'@;
put 'KS5yZXBsYWNlKC8lM0EvZ2ksIjoiKS5yZXBsYWNlKC8lMjQvZywiJCIpLnJlcGxhY2UoLyUyQy9naSwiLCIpLnJlcGxhY2UoLyUyMC9nLCIrIikucmVwbGFjZSgvJTVCL2dpLCJbIikucmVwbGFjZSgvJTVEL2dpLCJdIil9ZnVuY3Rpb24gT3IoU3QsQnQsX24pe2lmKCFCdClyZXR1cm4gU3Q7'@;
put 'Y29uc3QgbW49X24mJl9uLmVuY29kZXx8ZnQ7RHQuaXNGdW5jdGlvbihfbikmJihfbj17c2VyaWFsaXplOl9ufSk7Y29uc3QgSW49X24mJl9uLnNlcmlhbGl6ZTtsZXQgYm47aWYoYm49SW4/SW4oQnQsX24pOkR0LmlzVVJMU2VhcmNoUGFyYW1zKEJ0KT9CdC50b1N0cmluZygpOm5ldyBSaShC'@;
put 'dCxfbikudG9TdHJpbmcobW4pLGJuKXtjb25zdCB1cj1TdC5pbmRleE9mKCIjIik7LTEhPT11ciYmKFN0PVN0LnNsaWNlKDAsdXIpKSxTdCs9KC0xPT09U3QuaW5kZXhPZigiPyIpPyI/IjoiJiIpK2JufXJldHVybiBTdH1obi5hcHBlbmQ9ZnVuY3Rpb24oQnQsX24pe3RoaXMuX3BhaXJzLnB1'@;
put 'c2goW0J0LF9uXSl9LGhuLnRvU3RyaW5nPWZ1bmN0aW9uKEJ0KXtjb25zdCBfbj1CdD9mdW5jdGlvbihtbil7cmV0dXJuIEJ0LmNhbGwodGhpcyxtbixzbil9OnNuO3JldHVybiB0aGlzLl9wYWlycy5tYXAoZnVuY3Rpb24oSW4pe3JldHVybiBfbihJblswXSkrIj0iK19uKEluWzFdKX0sIiIp'@;
put 'LmpvaW4oIiYiKX07dmFyIEF0PWNsYXNzIFd0e2NvbnN0cnVjdG9yKCl7dGhpcy5oYW5kbGVycz1bXX11c2UoQnQsX24sbW4pe3JldHVybiB0aGlzLmhhbmRsZXJzLnB1c2goe2Z1bGZpbGxlZDpCdCxyZWplY3RlZDpfbixzeW5jaHJvbm91czohIW1uJiZtbi5zeW5jaHJvbm91cyxydW5XaGVu'@;
put 'Om1uP21uLnJ1bldoZW46bnVsbH0pLHRoaXMuaGFuZGxlcnMubGVuZ3RoLTF9ZWplY3QoQnQpe3RoaXMuaGFuZGxlcnNbQnRdJiYodGhpcy5oYW5kbGVyc1tCdF09bnVsbCl9Y2xlYXIoKXt0aGlzLmhhbmRsZXJzJiYodGhpcy5oYW5kbGVycz1bXSl9Zm9yRWFjaChCdCl7RHQuZm9yRWFjaCh0'@;
put 'aGlzLmhhbmRsZXJzLGZ1bmN0aW9uKG1uKXtudWxsIT09bW4mJkJ0KG1uKX0pfX0sUm49e3NpbGVudEpTT05QYXJzaW5nOiEwLGZvcmNlZEpTT05QYXJzaW5nOiEwLGNsYXJpZnlUaW1lb3V0RXJyb3I6ITF9LFdlPXtpc0Jyb3dzZXI6ITAsY2xhc3Nlczp7VVJMU2VhcmNoUGFyYW1zOnR5cGVv'@;
put 'ZiBVUkxTZWFyY2hQYXJhbXM8InUiP1VSTFNlYXJjaFBhcmFtczpSaSxGb3JtRGF0YTp0eXBlb2YgRm9ybURhdGE8InUiP0Zvcm1EYXRhOm51bGwsQmxvYjp0eXBlb2YgQmxvYjwidSI/QmxvYjpudWxsfSxwcm90b2NvbHM6WyJodHRwIiwiaHR0cHMiLCJmaWxlIiwiYmxvYiIsInVybCIsImRh'@;
put 'dGEiXX07Y29uc3QgVHQ9dHlwZW9mIHdpbmRvdzwidSImJnR5cGVvZiBkb2N1bWVudDwidSIsbnI9Im9iamVjdCI9PXR5cGVvZiBuYXZpZ2F0b3ImJm5hdmlnYXRvcnx8dm9pZCAwLGh0PVR0JiYoIW5yfHxbIlJlYWN0TmF0aXZlIiwiTmF0aXZlU2NyaXB0IiwiTlMiXS5pbmRleE9mKG5yLnBy'@;
put 'b2R1Y3QpPDApLHh0PXR5cGVvZiBXb3JrZXJHbG9iYWxTY29wZTwidSImJnNlbGYgaW5zdGFuY2VvZiBXb3JrZXJHbG9iYWxTY29wZSYmImZ1bmN0aW9uIj09dHlwZW9mIHNlbGYuaW1wb3J0U2NyaXB0cyxqbj1UdCYmd2luZG93LmxvY2F0aW9uLmhyZWZ8fCJodHRwOi8vbG9jYWxob3N0Ijt2'@;
put 'YXIgenQ9ey4uLk9iamVjdC5mcmVlemUoe19fcHJvdG9fXzpudWxsLGhhc0Jyb3dzZXJFbnY6VHQsaGFzU3RhbmRhcmRCcm93c2VyV2ViV29ya2VyRW52Onh0LGhhc1N0YW5kYXJkQnJvd3NlckVudjpodCxuYXZpZ2F0b3I6bnIsb3JpZ2luOmpufSksLi4uV2V9O2Z1bmN0aW9uIElpKFN0KXtm'@;
put 'dW5jdGlvbiBCdChfbixtbixJbixibil7bGV0IHVyPV9uW2JuKytdO2lmKCJfX3Byb3RvX18iPT09dXIpcmV0dXJuITA7Y29uc3QgYmk9TnVtYmVyLmlzRmluaXRlKCt1ciksRnI9Ym4+PV9uLmxlbmd0aDtyZXR1cm4gdXI9IXVyJiZEdC5pc0FycmF5KEluKT9Jbi5sZW5ndGg6dXIsRnI/KElu'@;
put 'W3VyXT1EdC5oYXNPd25Qcm9wKEluLHVyKT9bSW5bdXJdLG1uXTptbiwhYmkpOigoIUluW3VyXXx8IUR0LmlzT2JqZWN0KEluW3VyXSkpJiYoSW5bdXJdPVtdKSxCdChfbixtbixJblt1cl0sYm4pJiZEdC5pc0FycmF5KEluW3VyXSkmJihJblt1cl09ZnVuY3Rpb24gZm4oU3Qpe2NvbnN0IEJ0'@;
put 'PXt9LF9uPU9iamVjdC5rZXlzKFN0KTtsZXQgbW47Y29uc3QgSW49X24ubGVuZ3RoO2xldCBibjtmb3IobW49MDttbjxJbjttbisrKWJuPV9uW21uXSxCdFtibl09U3RbYm5dO3JldHVybiBCdH0oSW5bdXJdKSksIWJpKX1pZihEdC5pc0Zvcm1EYXRhKFN0KSYmRHQuaXNGdW5jdGlvbihTdC5l'@;
put 'bnRyaWVzKSl7Y29uc3QgX249e307cmV0dXJuIER0LmZvckVhY2hFbnRyeShTdCwobW4sSW4pPT57QnQoZnVuY3Rpb24gY24oU3Qpe3JldHVybiBEdC5tYXRjaEFsbCgvXHcrfFxbKFx3KildL2csU3QpLm1hcChCdD0+IltdIj09PUJ0WzBdPyIiOkJ0WzFdfHxCdFswXSl9KG1uKSxJbixfbiww'@;
put 'KX0pLF9ufXJldHVybiBudWxsfWNvbnN0IGVuPXt0cmFuc2l0aW9uYWw6Um4sYWRhcHRlcjpbInhociIsImh0dHAiLCJmZXRjaCJdLHRyYW5zZm9ybVJlcXVlc3Q6W2Z1bmN0aW9uKEJ0LF9uKXtjb25zdCBtbj1fbi5nZXRDb250ZW50VHlwZSgpfHwiIixJbj1tbi5pbmRleE9mKCJhcHBsaWNh'@;
put 'dGlvbi9qc29uIik+LTEsYm49RHQuaXNPYmplY3QoQnQpO2lmKGJuJiZEdC5pc0hUTUxGb3JtKEJ0KSYmKEJ0PW5ldyBGb3JtRGF0YShCdCkpLER0LmlzRm9ybURhdGEoQnQpKXJldHVybiBJbj9KU09OLnN0cmluZ2lmeShJaShCdCkpOkJ0O2lmKER0LmlzQXJyYXlCdWZmZXIoQnQpfHxEdC5p'@;
put 'c0J1ZmZlcihCdCl8fER0LmlzU3RyZWFtKEJ0KXx8RHQuaXNGaWxlKEJ0KXx8RHQuaXNCbG9iKEJ0KXx8RHQuaXNSZWFkYWJsZVN0cmVhbShCdCkpcmV0dXJuIEJ0O2lmKER0LmlzQXJyYXlCdWZmZXJWaWV3KEJ0KSlyZXR1cm4gQnQuYnVmZmVyO2lmKER0LmlzVVJMU2VhcmNoUGFyYW1zKEJ0'@;
put 'KSlyZXR1cm4gX24uc2V0Q29udGVudFR5cGUoImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDtjaGFyc2V0PXV0Zi04IiwhMSksQnQudG9TdHJpbmcoKTtsZXQgYmk7aWYoYm4pe2lmKG1uLmluZGV4T2YoImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCIpPi0xKXJl'@;
put 'dHVybiBmdW5jdGlvbiBoaShTdCxCdCl7cmV0dXJuIFF0KFN0LG5ldyB6dC5jbGFzc2VzLlVSTFNlYXJjaFBhcmFtcyxPYmplY3QuYXNzaWduKHt2aXNpdG9yOmZ1bmN0aW9uKF9uLG1uLEluLGJuKXtyZXR1cm4genQuaXNOb2RlJiZEdC5pc0J1ZmZlcihfbik/KHRoaXMuYXBwZW5kKG1uLF9u'@;
put 'LnRvU3RyaW5nKCJiYXNlNjQiKSksITEpOmJuLmRlZmF1bHRWaXNpdG9yLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LEJ0KSl9KEJ0LHRoaXMuZm9ybVNlcmlhbGl6ZXIpLnRvU3RyaW5nKCk7aWYoKGJpPUR0LmlzRmlsZUxpc3QoQnQpKXx8bW4uaW5kZXhPZigibXVsdGlwYXJ0L2Zvcm0tZGF0'@;
put 'YSIpPi0xKXtjb25zdCBGcj10aGlzLmVudiYmdGhpcy5lbnYuRm9ybURhdGE7cmV0dXJuIFF0KGJpP3siZmlsZXNbXSI6QnR9OkJ0LEZyJiZuZXcgRnIsdGhpcy5mb3JtU2VyaWFsaXplcil9fXJldHVybiBibnx8SW4/KF9uLnNldENvbnRlbnRUeXBlKCJhcHBsaWNhdGlvbi9qc29uIiwhMSks'@;
put 'ZnVuY3Rpb24gWHQoU3QsQnQsX24pe2lmKER0LmlzU3RyaW5nKFN0KSl0cnl7cmV0dXJuKEJ0fHxKU09OLnBhcnNlKShTdCksRHQudHJpbShTdCl9Y2F0Y2gobW4pe2lmKCJTeW50YXhFcnJvciIhPT1tbi5uYW1lKXRocm93IG1ufXJldHVybihfbnx8SlNPTi5zdHJpbmdpZnkpKFN0KX0oQnQp'@;
put 'KTpCdH1dLHRyYW5zZm9ybVJlc3BvbnNlOltmdW5jdGlvbihCdCl7Y29uc3QgX249dGhpcy50cmFuc2l0aW9uYWx8fGVuLnRyYW5zaXRpb25hbCxtbj1fbiYmX24uZm9yY2VkSlNPTlBhcnNpbmcsSW49Impzb24iPT09dGhpcy5yZXNwb25zZVR5cGU7aWYoRHQuaXNSZXNwb25zZShCdCl8fER0'@;
put 'LmlzUmVhZGFibGVTdHJlYW0oQnQpKXJldHVybiBCdDtpZihCdCYmRHQuaXNTdHJpbmcoQnQpJiYobW4mJiF0aGlzLnJlc3BvbnNlVHlwZXx8SW4pKXtjb25zdCB1cj0hKF9uJiZfbi5zaWxlbnRKU09OUGFyc2luZykmJkluO3RyeXtyZXR1cm4gSlNPTi5wYXJzZShCdCl9Y2F0Y2goYmkpe2lm'@;
put 'KHVyKXRocm93IlN5bnRheEVycm9yIj09PWJpLm5hbWU/aXQuZnJvbShiaSxpdC5FUlJfQkFEX1JFU1BPTlNFLHRoaXMsbnVsbCx0aGlzLnJlc3BvbnNlKTpiaX19cmV0dXJuIEJ0fV0sdGltZW91dDowLHhzcmZDb29raWVOYW1lOiJYU1JGLVRPS0VOIix4c3JmSGVhZGVyTmFtZToiWC1YU1JG'@;
put 'LVRPS0VOIixtYXhDb250ZW50TGVuZ3RoOi0xLG1heEJvZHlMZW5ndGg6LTEsZW52OntGb3JtRGF0YTp6dC5jbGFzc2VzLkZvcm1EYXRhLEJsb2I6enQuY2xhc3Nlcy5CbG9ifSx2YWxpZGF0ZVN0YXR1czpmdW5jdGlvbihCdCl7cmV0dXJuIEJ0Pj0yMDAmJkJ0PDMwMH0saGVhZGVyczp7Y29t'@;
put 'bW9uOntBY2NlcHQ6ImFwcGxpY2F0aW9uL2pzb24sIHRleHQvcGxhaW4sICovKiIsIkNvbnRlbnQtVHlwZSI6dm9pZCAwfX19O0R0LmZvckVhY2goWyJkZWxldGUiLCJnZXQiLCJoZWFkIiwicG9zdCIsInB1dCIsInBhdGNoIl0sU3Q9Pntlbi5oZWFkZXJzW1N0XT17fX0pO3ZhciB1YT1lbjtj'@;
put 'b25zdCBFaT1EdC50b09iamVjdFNldChbImFnZSIsImF1dGhvcml6YXRpb24iLCJjb250ZW50LWxlbmd0aCIsImNvbnRlbnQtdHlwZSIsImV0YWciLCJleHBpcmVzIiwiZnJvbSIsImhvc3QiLCJpZi1tb2RpZmllZC1zaW5jZSIsImlmLXVubW9kaWZpZWQtc2luY2UiLCJsYXN0LW1vZGlmaWVk'@;
put 'IiwibG9jYXRpb24iLCJtYXgtZm9yd2FyZHMiLCJwcm94eS1hdXRob3JpemF0aW9uIiwicmVmZXJlciIsInJldHJ5LWFmdGVyIiwidXNlci1hZ2VudCJdKSxXbj1TeW1ib2woImludGVybmFscyIpO2Z1bmN0aW9uICRpKFN0KXtyZXR1cm4gU3QmJlN0cmluZyhTdCkudHJpbSgpLnRvTG93ZXJD'@;
put 'YXNlKCl9ZnVuY3Rpb24gZWkoU3Qpe3JldHVybiExPT09U3R8fG51bGw9PVN0P1N0OkR0LmlzQXJyYXkoU3QpP1N0Lm1hcChlaSk6U3RyaW5nKFN0KX1mdW5jdGlvbiBOaShTdCxCdCxfbixtbixJbil7aWYoRHQuaXNGdW5jdGlvbihtbikpcmV0dXJuIG1uLmNhbGwodGhpcyxCdCxfbik7aWYo'@;
put 'SW4mJihCdD1fbiksRHQuaXNTdHJpbmcoQnQpKXtpZihEdC5pc1N0cmluZyhtbikpcmV0dXJuLTEhPT1CdC5pbmRleE9mKG1uKTtpZihEdC5pc1JlZ0V4cChtbikpcmV0dXJuIG1uLnRlc3QoQnQpfX1jbGFzcyBXaXtjb25zdHJ1Y3RvcihCdCl7QnQmJnRoaXMuc2V0KEJ0KX1zZXQoQnQsX24s'@;
put 'bW4pe2NvbnN0IEluPXRoaXM7ZnVuY3Rpb24gYm4oYmksRnIsdGEpe2NvbnN0IG9hPSRpKEZyKTtpZighb2EpdGhyb3cgbmV3IEVycm9yKCJoZWFkZXIgbmFtZSBtdXN0IGJlIGEgbm9uLWVtcHR5IHN0cmluZyIpO2NvbnN0IFZhPUR0LmZpbmRLZXkoSW4sb2EpOyghVmF8fHZvaWQgMD09PUlu'@;
put 'W1ZhXXx8ITA9PT10YXx8dm9pZCAwPT09dGEmJiExIT09SW5bVmFdKSYmKEluW1ZhfHxGcl09ZWkoYmkpKX1jb25zdCB1cj0oYmksRnIpPT5EdC5mb3JFYWNoKGJpLCh0YSxvYSk9PmJuKHRhLG9hLEZyKSk7aWYoRHQuaXNQbGFpbk9iamVjdChCdCl8fEJ0IGluc3RhbmNlb2YgdGhpcy5jb25z'@;
put 'dHJ1Y3Rvcil1cihCdCxfbik7ZWxzZSBpZihEdC5pc1N0cmluZyhCdCkmJihCdD1CdC50cmltKCkpJiYhKFN0PT4vXlstX2EtekEtWjAtOV5gfH4sISMkJSYnKisuXSskLy50ZXN0KFN0LnRyaW0oKSkpKEJ0KSl1cigoU3Q9Pntjb25zdCBCdD17fTtsZXQgX24sbW4sSW47cmV0dXJuIFN0JiZT'@;
put 'dC5zcGxpdCgiXG4iKS5mb3JFYWNoKGZ1bmN0aW9uKHVyKXtJbj11ci5pbmRleE9mKCI6IiksX249dXIuc3Vic3RyaW5nKDAsSW4pLnRyaW0oKS50b0xvd2VyQ2FzZSgpLG1uPXVyLnN1YnN0cmluZyhJbisxKS50cmltKCksISghX258fEJ0W19uXSYmRWlbX25dKSYmKCJzZXQtY29va2llIj09'@;
put 'PV9uP0J0W19uXT9CdFtfbl0ucHVzaChtbik6QnRbX25dPVttbl06QnRbX25dPUJ0W19uXT9CdFtfbl0rIiwgIittbjptbil9KSxCdH0pKEJ0KSxfbik7ZWxzZSBpZihEdC5pc0hlYWRlcnMoQnQpKWZvcihjb25zdFtiaSxGcl1vZiBCdC5lbnRyaWVzKCkpYm4oRnIsYmksbW4pO2Vsc2UgbnVs'@;
put 'bCE9QnQmJmJuKF9uLEJ0LG1uKTtyZXR1cm4gdGhpc31nZXQoQnQsX24pe2lmKEJ0PSRpKEJ0KSl7Y29uc3QgbW49RHQuZmluZEtleSh0aGlzLEJ0KTtpZihtbil7Y29uc3QgSW49dGhpc1ttbl07aWYoIV9uKXJldHVybiBJbjtpZighMD09PV9uKXJldHVybiBmdW5jdGlvbiBRcihTdCl7Y29u'@;
put 'c3QgQnQ9T2JqZWN0LmNyZWF0ZShudWxsKSxfbj0vKFteXHMsOz1dKylccyooPzo9XHMqKFteLDtdKykpPy9nO2xldCBtbjtmb3IoO21uPV9uLmV4ZWMoU3QpOylCdFttblsxXV09bW5bMl07cmV0dXJuIEJ0fShJbik7aWYoRHQuaXNGdW5jdGlvbihfbikpcmV0dXJuIF9uLmNhbGwodGhpcyxJ'@;
put 'bixtbik7aWYoRHQuaXNSZWdFeHAoX24pKXJldHVybiBfbi5leGVjKEluKTt0aHJvdyBuZXcgVHlwZUVycm9yKCJwYXJzZXIgbXVzdCBiZSBib29sZWFufHJlZ2V4cHxmdW5jdGlvbiIpfX19aGFzKEJ0LF9uKXtpZihCdD0kaShCdCkpe2NvbnN0IG1uPUR0LmZpbmRLZXkodGhpcyxCdCk7cmV0'@;
put 'dXJuISghbW58fHZvaWQgMD09PXRoaXNbbW5dfHxfbiYmIU5pKDAsdGhpc1ttbl0sbW4sX24pKX1yZXR1cm4hMX1kZWxldGUoQnQsX24pe2NvbnN0IG1uPXRoaXM7bGV0IEluPSExO2Z1bmN0aW9uIGJuKHVyKXtpZih1cj0kaSh1cikpe2NvbnN0IGJpPUR0LmZpbmRLZXkobW4sdXIpO2JpJiYo'@;
put 'IV9ufHxOaSgwLG1uW2JpXSxiaSxfbikpJiYoZGVsZXRlIG1uW2JpXSxJbj0hMCl9fXJldHVybiBEdC5pc0FycmF5KEJ0KT9CdC5mb3JFYWNoKGJuKTpibihCdCksSW59Y2xlYXIoQnQpe2NvbnN0IF9uPU9iamVjdC5rZXlzKHRoaXMpO2xldCBtbj1fbi5sZW5ndGgsSW49ITE7Zm9yKDttbi0t'@;
put 'Oyl7Y29uc3QgYm49X25bbW5dOyghQnR8fE5pKDAsdGhpc1tibl0sYm4sQnQsITApKSYmKGRlbGV0ZSB0aGlzW2JuXSxJbj0hMCl9cmV0dXJuIElufW5vcm1hbGl6ZShCdCl7Y29uc3QgX249dGhpcyxtbj17fTtyZXR1cm4gRHQuZm9yRWFjaCh0aGlzLChJbixibik9Pntjb25zdCB1cj1EdC5m'@;
put 'aW5kS2V5KG1uLGJuKTtpZih1cilyZXR1cm4gX25bdXJdPWVpKEluKSx2b2lkIGRlbGV0ZSBfbltibl07Y29uc3QgYmk9QnQ/ZnVuY3Rpb24gRGEoU3Qpe3JldHVybiBTdC50cmltKCkudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC8oW2EtelxkXSkoXHcqKS9nLChCdCxfbixtbik9Pl9uLnRvVXBw'@;
put 'ZXJDYXNlKCkrbW4pfShibik6U3RyaW5nKGJuKS50cmltKCk7YmkhPT1ibiYmZGVsZXRlIF9uW2JuXSxfbltiaV09ZWkoSW4pLG1uW2JpXT0hMH0pLHRoaXN9Y29uY2F0KC4uLkJ0KXtyZXR1cm4gdGhpcy5jb25zdHJ1Y3Rvci5jb25jYXQodGhpcywuLi5CdCl9dG9KU09OKEJ0KXtjb25zdCBf'@;
put 'bj1PYmplY3QuY3JlYXRlKG51bGwpO3JldHVybiBEdC5mb3JFYWNoKHRoaXMsKG1uLEluKT0+e251bGwhPW1uJiYhMSE9PW1uJiYoX25bSW5dPUJ0JiZEdC5pc0FycmF5KG1uKT9tbi5qb2luKCIsICIpOm1uKX0pLF9ufVtTeW1ib2wuaXRlcmF0b3JdKCl7cmV0dXJuIE9iamVjdC5lbnRyaWVz'@;
put 'KHRoaXMudG9KU09OKCkpW1N5bWJvbC5pdGVyYXRvcl0oKX10b1N0cmluZygpe3JldHVybiBPYmplY3QuZW50cmllcyh0aGlzLnRvSlNPTigpKS5tYXAoKFtCdCxfbl0pPT5CdCsiOiAiK19uKS5qb2luKCJcbiIpfWdldFtTeW1ib2wudG9TdHJpbmdUYWddKCl7cmV0dXJuIkF4aW9zSGVhZGVy'@;
put 'cyJ9c3RhdGljIGZyb20oQnQpe3JldHVybiBCdCBpbnN0YW5jZW9mIHRoaXM/QnQ6bmV3IHRoaXMoQnQpfXN0YXRpYyBjb25jYXQoQnQsLi4uX24pe2NvbnN0IG1uPW5ldyB0aGlzKEJ0KTtyZXR1cm4gX24uZm9yRWFjaChJbj0+bW4uc2V0KEluKSksbW59c3RhdGljIGFjY2Vzc29yKEJ0KXtj'@;
put 'b25zdCBtbj0odGhpc1tXbl09dGhpc1tXbl09e2FjY2Vzc29yczp7fX0pLmFjY2Vzc29ycyxJbj10aGlzLnByb3RvdHlwZTtmdW5jdGlvbiBibih1cil7Y29uc3QgYmk9JGkodXIpO21uW2JpXXx8KGZ1bmN0aW9uIExyKFN0LEJ0KXtjb25zdCBfbj1EdC50b0NhbWVsQ2FzZSgiICIrQnQpO1si'@;
put 'Z2V0Iiwic2V0IiwiaGFzIl0uZm9yRWFjaChtbj0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eShTdCxtbitfbix7dmFsdWU6ZnVuY3Rpb24oSW4sYm4sdXIpe3JldHVybiB0aGlzW21uXS5jYWxsKHRoaXMsQnQsSW4sYm4sdXIpfSxjb25maWd1cmFibGU6ITB9KX0pfShJbix1ciksbW5bYmldPSEw'@;
put 'KX1yZXR1cm4gRHQuaXNBcnJheShCdCk/QnQuZm9yRWFjaChibik6Ym4oQnQpLHRoaXN9fVdpLmFjY2Vzc29yKFsiQ29udGVudC1UeXBlIiwiQ29udGVudC1MZW5ndGgiLCJBY2NlcHQiLCJBY2NlcHQtRW5jb2RpbmciLCJVc2VyLUFnZW50IiwiQXV0aG9yaXphdGlvbiJdKSxEdC5yZWR1Y2VE'@;
put 'ZXNjcmlwdG9ycyhXaS5wcm90b3R5cGUsKHt2YWx1ZTpTdH0sQnQpPT57bGV0IF9uPUJ0WzBdLnRvVXBwZXJDYXNlKCkrQnQuc2xpY2UoMSk7cmV0dXJue2dldDooKT0+U3Qsc2V0KG1uKXt0aGlzW19uXT1tbn19fSksRHQuZnJlZXplTWV0aG9kcyhXaSk7dmFyIHBhPVdpO2Z1bmN0aW9uIFFu'@;
put 'KFN0LEJ0KXtjb25zdCBfbj10aGlzfHx1YSxtbj1CdHx8X24sSW49cGEuZnJvbShtbi5oZWFkZXJzKTtsZXQgYm49bW4uZGF0YTtyZXR1cm4gRHQuZm9yRWFjaChTdCxmdW5jdGlvbihiaSl7Ym49YmkuY2FsbChfbixibixJbi5ub3JtYWxpemUoKSxCdD9CdC5zdGF0dXM6dm9pZCAwKX0pLElu'@;
put 'Lm5vcm1hbGl6ZSgpLGJufWZ1bmN0aW9uIGxhKFN0KXtyZXR1cm4hKCFTdHx8IVN0Ll9fQ0FOQ0VMX18pfWZ1bmN0aW9uIHlhKFN0LEJ0LF9uKXtpdC5jYWxsKHRoaXMsU3Q/PyJjYW5jZWxlZCIsaXQuRVJSX0NBTkNFTEVELEJ0LF9uKSx0aGlzLm5hbWU9IkNhbmNlbGVkRXJyb3IifWZ1bmN0'@;
put 'aW9uIExhKFN0LEJ0LF9uKXtjb25zdCBtbj1fbi5jb25maWcudmFsaWRhdGVTdGF0dXM7X24uc3RhdHVzJiZtbiYmIW1uKF9uLnN0YXR1cyk/QnQobmV3IGl0KCJSZXF1ZXN0IGZhaWxlZCB3aXRoIHN0YXR1cyBjb2RlICIrX24uc3RhdHVzLFtpdC5FUlJfQkFEX1JFUVVFU1QsaXQuRVJSX0JB'@;
put 'RF9SRVNQT05TRV1bTWF0aC5mbG9vcihfbi5zdGF0dXMvMTAwKS00XSxfbi5jb25maWcsX24ucmVxdWVzdCxfbikpOlN0KF9uKX1EdC5pbmhlcml0cyh5YSxpdCx7X19DQU5DRUxfXzohMH0pO2NvbnN0IE5zPShTdCxCdCxfbj0zKT0+e2xldCBtbj0wO2NvbnN0IEluPWZ1bmN0aW9uIHRpKFN0'@;
put 'LEJ0KXtTdD1TdHx8MTA7Y29uc3QgX249bmV3IEFycmF5KFN0KSxtbj1uZXcgQXJyYXkoU3QpO2xldCB1cixJbj0wLGJuPTA7cmV0dXJuIEJ0PXZvaWQgMCE9PUJ0P0J0OjFlMyxmdW5jdGlvbihGcil7Y29uc3QgdGE9RGF0ZS5ub3coKSxvYT1tbltibl07dXJ8fCh1cj10YSksX25bSW5dPUZy'@;
put 'LG1uW0luXT10YTtsZXQgVmE9Ym4sJG89MDtmb3IoO1ZhIT09SW47KSRvKz1fbltWYSsrXSxWYSU9U3Q7aWYoSW49KEluKzEpJVN0LEluPT09Ym4mJihibj0oYm4rMSklU3QpLHRhLXVyPEJ0KXJldHVybjtjb25zdCBYbD1vYSYmdGEtb2E7cmV0dXJuIFhsP01hdGgucm91bmQoMWUzKiRvL1hs'@;
put 'KTp2b2lkIDB9fSg1MCwyNTApO3JldHVybiBmdW5jdGlvbiBnbyhTdCxCdCl7bGV0IEluLGJuLF9uPTAsbW49MWUzL0J0O2NvbnN0IHVyPSh0YSxvYT1EYXRlLm5vdygpKT0+e19uPW9hLEluPW51bGwsYm4mJihjbGVhclRpbWVvdXQoYm4pLGJuPW51bGwpLFN0LmFwcGx5KG51bGwsdGEpfTty'@;
put 'ZXR1cm5bKC4uLnRhKT0+e2NvbnN0IG9hPURhdGUubm93KCksVmE9b2EtX247VmE+PW1uP3VyKHRhLG9hKTooSW49dGEsYm58fChibj1zZXRUaW1lb3V0KCgpPT57Ym49bnVsbCx1cihJbil9LG1uLVZhKSkpfSwoKT0+SW4mJnVyKEluKV19KGJuPT57Y29uc3QgdXI9Ym4ubG9hZGVkLGJpPWJu'@;
put 'Lmxlbmd0aENvbXB1dGFibGU/Ym4udG90YWw6dm9pZCAwLEZyPXVyLW1uLHRhPUluKEZyKTttbj11cixTdCh7bG9hZGVkOnVyLHRvdGFsOmJpLHByb2dyZXNzOmJpP3VyL2JpOnZvaWQgMCxieXRlczpGcixyYXRlOnRhfHx2b2lkIDAsZXN0aW1hdGVkOnRhJiZiaSYmdXI8PWJpPyhiaS11cikv'@;
put 'dGE6dm9pZCAwLGV2ZW50OmJuLGxlbmd0aENvbXB1dGFibGU6bnVsbCE9YmksW0J0PyJkb3dubG9hZCI6InVwbG9hZCJdOiEwfSl9LF9uKX0sYmw9KFN0LEJ0KT0+e2NvbnN0IF9uPW51bGwhPVN0O3JldHVyblttbj0+QnRbMF0oe2xlbmd0aENvbXB1dGFibGU6X24sdG90YWw6U3QsbG9hZGVk'@;
put 'Om1ufSksQnRbMV1dfSxwdT1TdD0+KC4uLkJ0KT0+RHQuYXNhcCgoKT0+U3QoLi4uQnQpKTt2YXIgTGM9enQuaGFzU3RhbmRhcmRCcm93c2VyRW52PygoU3QsQnQpPT5fbj0+KF9uPW5ldyBVUkwoX24senQub3JpZ2luKSxTdC5wcm90b2NvbD09PV9uLnByb3RvY29sJiZTdC5ob3N0PT09X24u'@;
put 'aG9zdCYmKEJ0fHxTdC5wb3J0PT09X24ucG9ydCkpKShuZXcgVVJMKHp0Lm9yaWdpbiksenQubmF2aWdhdG9yJiYvKG1zaWV8dHJpZGVudCkvaS50ZXN0KHp0Lm5hdmlnYXRvci51c2VyQWdlbnQpKTooKT0+ITAsRDA9enQuaGFzU3RhbmRhcmRCcm93c2VyRW52P3t3cml0ZShTdCxCdCxfbixt'@;
put 'bixJbixibil7Y29uc3QgdXI9W1N0KyI9IitlbmNvZGVVUklDb21wb25lbnQoQnQpXTtEdC5pc051bWJlcihfbikmJnVyLnB1c2goImV4cGlyZXM9IituZXcgRGF0ZShfbikudG9HTVRTdHJpbmcoKSksRHQuaXNTdHJpbmcobW4pJiZ1ci5wdXNoKCJwYXRoPSIrbW4pLER0LmlzU3RyaW5nKElu'@;
put 'KSYmdXIucHVzaCgiZG9tYWluPSIrSW4pLCEwPT09Ym4mJnVyLnB1c2goInNlY3VyZSIpLGRvY3VtZW50LmNvb2tpZT11ci5qb2luKCI7ICIpfSxyZWFkKFN0KXtjb25zdCBCdD1kb2N1bWVudC5jb29raWUubWF0Y2gobmV3IFJlZ0V4cCgiKF58O1xccyopKCIrU3QrIik9KFteO10qKSIpKTty'@;
put 'ZXR1cm4gQnQ/ZGVjb2RlVVJJQ29tcG9uZW50KEJ0WzNdKTpudWxsfSxyZW1vdmUoU3Qpe3RoaXMud3JpdGUoU3QsIiIsRGF0ZS5ub3coKS04NjRlNSl9fTp7d3JpdGUoKXt9LHJlYWQ6KCk9Pm51bGwscmVtb3ZlKCl7fX07ZnVuY3Rpb24gdWkoU3QsQnQsX24pe2xldCBtbj0hZnVuY3Rpb24g'@;
put 'aXIoU3Qpe3JldHVybi9eKFthLXpdW2EtelxkK1wtLl0qOik/XC9cLy9pLnRlc3QoU3QpfShCdCk7cmV0dXJuIFN0JiZtbnx8MD09X24/ZnVuY3Rpb24geGEoU3QsQnQpe3JldHVybiBCdD9TdC5yZXBsYWNlKC9cLz9cLyQvLCIiKSsiLyIrQnQucmVwbGFjZSgvXlwvKy8sIiIpOlN0fShTdCxC'@;
put 'dCk6QnR9Y29uc3QgVnQ9U3Q9PlN0IGluc3RhbmNlb2YgcGE/ey4uLlN0fTpTdDtmdW5jdGlvbiBKcihTdCxCdCl7QnQ9QnR8fHt9O2NvbnN0IF9uPXt9O2Z1bmN0aW9uIG1uKHRhLG9hLFZhLCRvKXtyZXR1cm4gRHQuaXNQbGFpbk9iamVjdCh0YSkmJkR0LmlzUGxhaW5PYmplY3Qob2EpP0R0'@;
put 'Lm1lcmdlLmNhbGwoe2Nhc2VsZXNzOiRvfSx0YSxvYSk6RHQuaXNQbGFpbk9iamVjdChvYSk/RHQubWVyZ2Uoe30sb2EpOkR0LmlzQXJyYXkob2EpP29hLnNsaWNlKCk6b2F9ZnVuY3Rpb24gSW4odGEsb2EsVmEsJG8pe3JldHVybiBEdC5pc1VuZGVmaW5lZChvYSk/RHQuaXNVbmRlZmluZWQo'@;
put 'dGEpP3ZvaWQgMDptbih2b2lkIDAsdGEsMCwkbyk6bW4odGEsb2EsMCwkbyl9ZnVuY3Rpb24gYm4odGEsb2Epe2lmKCFEdC5pc1VuZGVmaW5lZChvYSkpcmV0dXJuIG1uKHZvaWQgMCxvYSl9ZnVuY3Rpb24gdXIodGEsb2Epe3JldHVybiBEdC5pc1VuZGVmaW5lZChvYSk/RHQuaXNVbmRlZmlu'@;
put 'ZWQodGEpP3ZvaWQgMDptbih2b2lkIDAsdGEpOm1uKHZvaWQgMCxvYSl9ZnVuY3Rpb24gYmkodGEsb2EsVmEpe3JldHVybiBWYSBpbiBCdD9tbih0YSxvYSk6VmEgaW4gU3Q/bW4odm9pZCAwLHRhKTp2b2lkIDB9Y29uc3QgRnI9e3VybDpibixtZXRob2Q6Ym4sZGF0YTpibixiYXNlVVJMOnVy'@;
put 'LHRyYW5zZm9ybVJlcXVlc3Q6dXIsdHJhbnNmb3JtUmVzcG9uc2U6dXIscGFyYW1zU2VyaWFsaXplcjp1cix0aW1lb3V0OnVyLHRpbWVvdXRNZXNzYWdlOnVyLHdpdGhDcmVkZW50aWFsczp1cix3aXRoWFNSRlRva2VuOnVyLGFkYXB0ZXI6dXIscmVzcG9uc2VUeXBlOnVyLHhzcmZDb29raWVO'@;
put 'YW1lOnVyLHhzcmZIZWFkZXJOYW1lOnVyLG9uVXBsb2FkUHJvZ3Jlc3M6dXIsb25Eb3dubG9hZFByb2dyZXNzOnVyLGRlY29tcHJlc3M6dXIsbWF4Q29udGVudExlbmd0aDp1cixtYXhCb2R5TGVuZ3RoOnVyLGJlZm9yZVJlZGlyZWN0OnVyLHRyYW5zcG9ydDp1cixodHRwQWdlbnQ6dXIsaHR0'@;
put 'cHNBZ2VudDp1cixjYW5jZWxUb2tlbjp1cixzb2NrZXRQYXRoOnVyLHJlc3BvbnNlRW5jb2Rpbmc6dXIsdmFsaWRhdGVTdGF0dXM6YmksaGVhZGVyczoodGEsb2EsVmEpPT5JbihWdCh0YSksVnQob2EpLDAsITApfTtyZXR1cm4gRHQuZm9yRWFjaChPYmplY3Qua2V5cyhPYmplY3QuYXNzaWdu'@;
put 'KHt9LFN0LEJ0KSksZnVuY3Rpb24ob2Epe2NvbnN0IFZhPUZyW29hXXx8SW4sJG89VmEoU3Rbb2FdLEJ0W29hXSxvYSk7RHQuaXNVbmRlZmluZWQoJG8pJiZWYSE9PWJpfHwoX25bb2FdPSRvKX0pLF9ufXZhciBiMD1TdD0+e2NvbnN0IEJ0PUpyKHt9LFN0KTtsZXQgRnIse2RhdGE6X24sd2l0'@;
put 'aFhTUkZUb2tlbjptbix4c3JmSGVhZGVyTmFtZTpJbix4c3JmQ29va2llTmFtZTpibixoZWFkZXJzOnVyLGF1dGg6Yml9PUJ0O2lmKEJ0LmhlYWRlcnM9dXI9cGEuZnJvbSh1ciksQnQudXJsPU9yKHVpKEJ0LmJhc2VVUkwsQnQudXJsKSxTdC5wYXJhbXMsU3QucGFyYW1zU2VyaWFsaXplciks'@;
put 'YmkmJnVyLnNldCgiQXV0aG9yaXphdGlvbiIsIkJhc2ljICIrYnRvYSgoYmkudXNlcm5hbWV8fCIiKSsiOiIrKGJpLnBhc3N3b3JkP3VuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChiaS5wYXNzd29yZCkpOiIiKSkpLER0LmlzRm9ybURhdGEoX24pKWlmKHp0Lmhhc1N0YW5kYXJkQnJvd3Nl'@;
put 'ckVudnx8enQuaGFzU3RhbmRhcmRCcm93c2VyV2ViV29ya2VyRW52KXVyLnNldENvbnRlbnRUeXBlKHZvaWQgMCk7ZWxzZSBpZighMSE9PShGcj11ci5nZXRDb250ZW50VHlwZSgpKSl7Y29uc3RbdGEsLi4ub2FdPUZyP0ZyLnNwbGl0KCI7IikubWFwKFZhPT5WYS50cmltKCkpLmZpbHRlcihC'@;
put 'b29sZWFuKTpbXTt1ci5zZXRDb250ZW50VHlwZShbdGF8fCJtdWx0aXBhcnQvZm9ybS1kYXRhIiwuLi5vYV0uam9pbigiOyAiKSl9aWYoenQuaGFzU3RhbmRhcmRCcm93c2VyRW52JiYobW4mJkR0LmlzRnVuY3Rpb24obW4pJiYobW49bW4oQnQpKSxtbnx8ITEhPT1tbiYmTGMoQnQudXJsKSkp'@;
put 'e2NvbnN0IHRhPUluJiZibiYmRDAucmVhZChibik7dGEmJnVyLnNldChJbix0YSl9cmV0dXJuIEJ0fSxMdT10eXBlb2YgWE1MSHR0cFJlcXVlc3Q8InUiJiZmdW5jdGlvbihTdCl7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKF9uLG1uKXtjb25zdCBJbj1iMChTdCk7bGV0IGJuPUluLmRh'@;
put 'dGE7Y29uc3QgdXI9cGEuZnJvbShJbi5oZWFkZXJzKS5ub3JtYWxpemUoKTtsZXQgb2EsVmEsJG8sWGwsdG8se3Jlc3BvbnNlVHlwZTpiaSxvblVwbG9hZFByb2dyZXNzOkZyLG9uRG93bmxvYWRQcm9ncmVzczp0YX09SW47ZnVuY3Rpb24gX28oKXtYbCYmWGwoKSx0byYmdG8oKSxJbi5jYW5j'@;
put 'ZWxUb2tlbiYmSW4uY2FuY2VsVG9rZW4udW5zdWJzY3JpYmUob2EpLEluLnNpZ25hbCYmSW4uc2lnbmFsLnJlbW92ZUV2ZW50TGlzdGVuZXIoImFib3J0IixvYSl9bGV0IGppPW5ldyBYTUxIdHRwUmVxdWVzdDtmdW5jdGlvbiBQYygpe2lmKCFqaSlyZXR1cm47Y29uc3QgQ2E9cGEuZnJvbSgi'@;
put 'Z2V0QWxsUmVzcG9uc2VIZWFkZXJzImluIGppJiZqaS5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKSk7TGEoZnVuY3Rpb24oJDApe19uKCQwKSxfbygpfSxmdW5jdGlvbigkMCl7bW4oJDApLF9vKCl9LHtkYXRhOmJpJiYidGV4dCIhPT1iaSYmImpzb24iIT09Ymk/amkucmVzcG9uc2U6amkucmVz'@;
put 'cG9uc2VUZXh0LHN0YXR1czpqaS5zdGF0dXMsc3RhdHVzVGV4dDpqaS5zdGF0dXNUZXh0LGhlYWRlcnM6Q2EsY29uZmlnOlN0LHJlcXVlc3Q6aml9KSxqaT1udWxsfWppLm9wZW4oSW4ubWV0aG9kLnRvVXBwZXJDYXNlKCksSW4udXJsLCEwKSxqaS50aW1lb3V0PUluLnRpbWVvdXQsIm9ubG9h'@;
put 'ZGVuZCJpbiBqaT9qaS5vbmxvYWRlbmQ9UGM6amkub25yZWFkeXN0YXRlY2hhbmdlPWZ1bmN0aW9uKCl7IWppfHw0IT09amkucmVhZHlTdGF0ZXx8MD09PWppLnN0YXR1cyYmKCFqaS5yZXNwb25zZVVSTHx8MCE9PWppLnJlc3BvbnNlVVJMLmluZGV4T2YoImZpbGU6IikpfHxzZXRUaW1lb3V0'@;
put 'KFBjKX0samkub25hYm9ydD1mdW5jdGlvbigpe2ppJiYobW4obmV3IGl0KCJSZXF1ZXN0IGFib3J0ZWQiLGl0LkVDT05OQUJPUlRFRCxTdCxqaSkpLGppPW51bGwpfSxqaS5vbmVycm9yPWZ1bmN0aW9uKCl7bW4obmV3IGl0KCJOZXR3b3JrIEVycm9yIixpdC5FUlJfTkVUV09SSyxTdCxqaSkp'@;
put 'LGppPW51bGx9LGppLm9udGltZW91dD1mdW5jdGlvbigpe2xldCBUYT1Jbi50aW1lb3V0PyJ0aW1lb3V0IG9mICIrSW4udGltZW91dCsibXMgZXhjZWVkZWQiOiJ0aW1lb3V0IGV4Y2VlZGVkIjtJbi50aW1lb3V0RXJyb3JNZXNzYWdlJiYoVGE9SW4udGltZW91dEVycm9yTWVzc2FnZSksbW4o'@;
put 'bmV3IGl0KFRhLChJbi50cmFuc2l0aW9uYWx8fFJuKS5jbGFyaWZ5VGltZW91dEVycm9yP2l0LkVUSU1FRE9VVDppdC5FQ09OTkFCT1JURUQsU3QsamkpKSxqaT1udWxsfSx2b2lkIDA9PT1ibiYmdXIuc2V0Q29udGVudFR5cGUobnVsbCksInNldFJlcXVlc3RIZWFkZXIiaW4gamkmJkR0LmZv'@;
put 'ckVhY2godXIudG9KU09OKCksZnVuY3Rpb24oVGEsWGgpe2ppLnNldFJlcXVlc3RIZWFkZXIoWGgsVGEpfSksRHQuaXNVbmRlZmluZWQoSW4ud2l0aENyZWRlbnRpYWxzKXx8KGppLndpdGhDcmVkZW50aWFscz0hIUluLndpdGhDcmVkZW50aWFscyksYmkmJiJqc29uIiE9PWJpJiYoamkucmVz'@;
put 'cG9uc2VUeXBlPUluLnJlc3BvbnNlVHlwZSksdGEmJihbJG8sdG9dPU5zKHRhLCEwKSxqaS5hZGRFdmVudExpc3RlbmVyKCJwcm9ncmVzcyIsJG8pKSxGciYmamkudXBsb2FkJiYoW1ZhLFhsXT1OcyhGciksamkudXBsb2FkLmFkZEV2ZW50TGlzdGVuZXIoInByb2dyZXNzIixWYSksamkudXBs'@;
put 'b2FkLmFkZEV2ZW50TGlzdGVuZXIoImxvYWRlbmQiLFhsKSksKEluLmNhbmNlbFRva2VufHxJbi5zaWduYWwpJiYob2E9Q2E9PntqaSYmKG1uKCFDYXx8Q2EudHlwZT9uZXcgeWEobnVsbCxTdCxqaSk6Q2EpLGppLmFib3J0KCksamk9bnVsbCl9LEluLmNhbmNlbFRva2VuJiZJbi5jYW5jZWxU'@;
put 'b2tlbi5zdWJzY3JpYmUob2EpLEluLnNpZ25hbCYmKEluLnNpZ25hbC5hYm9ydGVkP29hKCk6SW4uc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoImFib3J0IixvYSkpKTtjb25zdCB6bD1mdW5jdGlvbiBGYShTdCl7Y29uc3QgQnQ9L14oWy0rXHddezEsMjV9KSg6P1wvXC98OikvLmV4ZWMoU3Qp'@;
put 'O3JldHVybiBCdCYmQnRbMV18fCIifShJbi51cmwpO3psJiYtMT09PXp0LnByb3RvY29scy5pbmRleE9mKHpsKT9tbihuZXcgaXQoIlVuc3VwcG9ydGVkIHByb3RvY29sICIremwrIjoiLGl0LkVSUl9CQURfUkVRVUVTVCxTdCkpOmppLnNlbmQoYm58fG51bGwpfSl9LG9kPShTdCxCdCk9Pntj'@;
put 'b25zdHtsZW5ndGg6X259PVN0PVN0P1N0LmZpbHRlcihCb29sZWFuKTpbXTtpZihCdHx8X24pe2xldCBJbixtbj1uZXcgQWJvcnRDb250cm9sbGVyO2NvbnN0IGJuPWZ1bmN0aW9uKHRhKXtpZighSW4pe0luPSEwLGJpKCk7Y29uc3Qgb2E9dGEgaW5zdGFuY2VvZiBFcnJvcj90YTp0aGlzLnJl'@;
put 'YXNvbjttbi5hYm9ydChvYSBpbnN0YW5jZW9mIGl0P29hOm5ldyB5YShvYSBpbnN0YW5jZW9mIEVycm9yP29hLm1lc3NhZ2U6b2EpKX19O2xldCB1cj1CdCYmc2V0VGltZW91dCgoKT0+e3VyPW51bGwsYm4obmV3IGl0KGB0aW1lb3V0ICR7QnR9IG9mIG1zIGV4Y2VlZGVkYCxpdC5FVElNRURP'@;
put 'VVQpKX0sQnQpO2NvbnN0IGJpPSgpPT57U3QmJih1ciYmY2xlYXJUaW1lb3V0KHVyKSx1cj1udWxsLFN0LmZvckVhY2godGE9Pnt0YS51bnN1YnNjcmliZT90YS51bnN1YnNjcmliZShibik6dGEucmVtb3ZlRXZlbnRMaXN0ZW5lcigiYWJvcnQiLGJuKX0pLFN0PW51bGwpfTtTdC5mb3JFYWNo'@;
put 'KHRhPT50YS5hZGRFdmVudExpc3RlbmVyKCJhYm9ydCIsYm4pKTtjb25zdHtzaWduYWw6RnJ9PW1uO3JldHVybiBGci51bnN1YnNjcmliZT0oKT0+RHQuYXNhcChiaSksRnJ9fTtjb25zdCBZaD1mdW5jdGlvbiooU3QsQnQpe2xldCBfbj1TdC5ieXRlTGVuZ3RoO2lmKCFCdHx8X248QnQpcmV0'@;
put 'dXJuIHZvaWQoeWllbGQgU3QpO2xldCBJbixtbj0wO2Zvcig7bW48X247KUluPW1uK0J0LHlpZWxkIFN0LnNsaWNlKG1uLEluKSxtbj1Jbn0sY2Y9ZnVuY3Rpb24oKXt2YXIgU3Q9X3dyYXBBc3luY0dlbmVyYXRvcihmdW5jdGlvbiooQnQsX24pe3ZhciBibixtbj0hMSxJbj0hMTt0cnl7Zm9y'@;
put 'KHZhciBiaSx1cj1fYXN5bmNJdGVyYXRvcihDcyhCdCkpO21uPSEoYmk9eWllbGQgX2F3YWl0QXN5bmNHZW5lcmF0b3IodXIubmV4dCgpKSkuZG9uZTttbj0hMSl7Y29uc3QgRnI9YmkudmFsdWU7eWllbGQqX2FzeW5jR2VuZXJhdG9yRGVsZWdhdGUoX2FzeW5jSXRlcmF0b3IoWWgoRnIsX24p'@;
put 'KSxfYXdhaXRBc3luY0dlbmVyYXRvcil9fWNhdGNoKEZyKXtJbj0hMCxibj1Gcn1maW5hbGx5e3RyeXttbiYmbnVsbCE9dXIucmV0dXJuJiYoeWllbGQgX2F3YWl0QXN5bmNHZW5lcmF0b3IodXIucmV0dXJuKCkpKX1maW5hbGx5e2lmKEluKXRocm93IGJufX19KTtyZXR1cm4gZnVuY3Rpb24o'@;
put 'X24sbW4pe3JldHVybiBTdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSgpLENzPWZ1bmN0aW9uKCl7dmFyIFN0PV93cmFwQXN5bmNHZW5lcmF0b3IoZnVuY3Rpb24qKEJ0KXtpZihCdFtTeW1ib2wuYXN5bmNJdGVyYXRvcl0pcmV0dXJuIHZvaWQoeWllbGQqX2FzeW5jR2VuZXJhdG9yRGVsZWdh'@;
put 'dGUoX2FzeW5jSXRlcmF0b3IoQnQpLF9hd2FpdEFzeW5jR2VuZXJhdG9yKSk7Y29uc3QgX249QnQuZ2V0UmVhZGVyKCk7dHJ5e2Zvcig7Oyl7Y29uc3R7ZG9uZTptbix2YWx1ZTpJbn09eWllbGQgX2F3YWl0QXN5bmNHZW5lcmF0b3IoX24ucmVhZCgpKTtpZihtbilicmVhazt5aWVsZCBJbn19'@;
put 'ZmluYWxseXt5aWVsZCBfYXdhaXRBc3luY0dlbmVyYXRvcihfbi5jYW5jZWwoKSl9fSk7cmV0dXJuIGZ1bmN0aW9uKF9uKXtyZXR1cm4gU3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0oKSxZaT0oU3QsQnQsX24sbW4pPT57Y29uc3QgSW49Y2YoU3QsQnQpO2xldCB1cixibj0wLGJpPUZyPT57'@;
put 'dXJ8fCh1cj0hMCxtbiYmbW4oRnIpKX07cmV0dXJuIG5ldyBSZWFkYWJsZVN0cmVhbSh7cHVsbDpGcj0+X2FzeW5jVG9HZW5lcmF0b3IoZnVuY3Rpb24qKCl7dHJ5e2NvbnN0e2RvbmU6dGEsdmFsdWU6b2F9PXlpZWxkIEluLm5leHQoKTtpZih0YSlyZXR1cm4gYmkoKSx2b2lkIEZyLmNsb3Nl'@;
put 'KCk7aWYoX24pe2xldCAkbz1ibis9b2EuYnl0ZUxlbmd0aDtfbigkbyl9RnIuZW5xdWV1ZShuZXcgVWludDhBcnJheShvYSkpfWNhdGNoKHRhKXt0aHJvdyBiaSh0YSksdGF9fSkoKSxjYW5jZWw6RnI9PihiaShGciksSW4ucmV0dXJuKCkpfSx7aGlnaFdhdGVyTWFyazoyfSl9LHlsPSJmdW5j'@;
put 'dGlvbiI9PXR5cGVvZiBmZXRjaCYmImZ1bmN0aW9uIj09dHlwZW9mIFJlcXVlc3QmJiJmdW5jdGlvbiI9PXR5cGVvZiBSZXNwb25zZSxRYz15bCYmImZ1bmN0aW9uIj09dHlwZW9mIFJlYWRhYmxlU3RyZWFtLG41PXlsJiYoImZ1bmN0aW9uIj09dHlwZW9mIFRleHRFbmNvZGVyPyhTdD0+QnQ9'@;
put 'PlN0LmVuY29kZShCdCkpKG5ldyBUZXh0RW5jb2Rlcik6ZnVuY3Rpb24oKXt2YXIgU3Q9X2FzeW5jVG9HZW5lcmF0b3IoZnVuY3Rpb24qKEJ0KXtyZXR1cm4gbmV3IFVpbnQ4QXJyYXkoeWllbGQgbmV3IFJlc3BvbnNlKEJ0KS5hcnJheUJ1ZmZlcigpKX0pO3JldHVybiBmdW5jdGlvbihCdCl7'@;
put 'cmV0dXJuIFN0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KCkpLHkwPShTdCwuLi5CdCk9Pnt0cnl7cmV0dXJuISFTdCguLi5CdCl9Y2F0Y2h7cmV0dXJuITF9fSxyNT1RYyYmeTAoKCk9PntsZXQgU3Q9ITE7Y29uc3QgQnQ9bmV3IFJlcXVlc3QoenQub3JpZ2luLHtib2R5Om5ldyBSZWFkYWJs'@;
put 'ZVN0cmVhbSxtZXRob2Q6IlBPU1QiLGdldCBkdXBsZXgoKXtyZXR1cm4gU3Q9ITAsImhhbGYifX0pLmhlYWRlcnMuaGFzKCJDb250ZW50LVR5cGUiKTtyZXR1cm4gU3QmJiFCdH0pLHVmPVFjJiZ5MCgoKT0+RHQuaXNSZWFkYWJsZVN0cmVhbShuZXcgUmVzcG9uc2UoIiIpLmJvZHkpKSxzZD17'@;
put 'c3RyZWFtOnVmJiYoU3Q9PlN0LmJvZHkpfTt5bCYmKFN0PT57WyJ0ZXh0IiwiYXJyYXlCdWZmZXIiLCJibG9iIiwiZm9ybURhdGEiLCJzdHJlYW0iXS5mb3JFYWNoKEJ0PT57IXNkW0J0XSYmKHNkW0J0XT1EdC5pc0Z1bmN0aW9uKFN0W0J0XSk/X249Pl9uW0J0XSgpOihfbixtbik9Pnt0aHJv'@;
put 'dyBuZXcgaXQoYFJlc3BvbnNlIHR5cGUgJyR7QnR9JyBpcyBub3Qgc3VwcG9ydGVkYCxpdC5FUlJfTk9UX1NVUFBPUlQsbW4pfSl9KX0pKG5ldyBSZXNwb25zZSk7Y29uc3QgZGY9ZnVuY3Rpb24oKXt2YXIgU3Q9X2FzeW5jVG9HZW5lcmF0b3IoZnVuY3Rpb24qKEJ0KXtyZXR1cm4gbnVsbD09'@;
put 'QnQ/MDpEdC5pc0Jsb2IoQnQpP0J0LnNpemU6RHQuaXNTcGVjQ29tcGxpYW50Rm9ybShCdCk/KHlpZWxkIG5ldyBSZXF1ZXN0KHp0Lm9yaWdpbix7bWV0aG9kOiJQT1NUIixib2R5OkJ0fSkuYXJyYXlCdWZmZXIoKSkuYnl0ZUxlbmd0aDpEdC5pc0FycmF5QnVmZmVyVmlldyhCdCl8fER0Lmlz'@;
put 'QXJyYXlCdWZmZXIoQnQpP0J0LmJ5dGVMZW5ndGg6KER0LmlzVVJMU2VhcmNoUGFyYW1zKEJ0KSYmKEJ0Kz0iIiksRHQuaXNTdHJpbmcoQnQpPyh5aWVsZCBuNShCdCkpLmJ5dGVMZW5ndGg6dm9pZCAwKX0pO3JldHVybiBmdW5jdGlvbihfbil7cmV0dXJuIFN0LmFwcGx5KHRoaXMsYXJndW1l'@;
put 'bnRzKX19KCksazE9ZnVuY3Rpb24oKXt2YXIgU3Q9X2FzeW5jVG9HZW5lcmF0b3IoZnVuY3Rpb24qKEJ0LF9uKXtyZXR1cm4gRHQudG9GaW5pdGVOdW1iZXIoQnQuZ2V0Q29udGVudExlbmd0aCgpKT8/ZGYoX24pfSk7cmV0dXJuIGZ1bmN0aW9uKF9uLG1uKXtyZXR1cm4gU3QuYXBwbHkodGhp'@;
put 'cyxhcmd1bWVudHMpfX0oKTt2YXIgaGY9eWwmJmZ1bmN0aW9uKCl7dmFyIFN0PV9hc3luY1RvR2VuZXJhdG9yKGZ1bmN0aW9uKihCdCl7bGV0e3VybDpfbixtZXRob2Q6bW4sZGF0YTpJbixzaWduYWw6Ym4sY2FuY2VsVG9rZW46dXIsdGltZW91dDpiaSxvbkRvd25sb2FkUHJvZ3Jlc3M6RnIs'@;
put 'b25VcGxvYWRQcm9ncmVzczp0YSxyZXNwb25zZVR5cGU6b2EsaGVhZGVyczpWYSx3aXRoQ3JlZGVudGlhbHM6JG89InNhbWUtb3JpZ2luIixmZXRjaE9wdGlvbnM6WGx9PWIwKEJ0KTtvYT1vYT8ob2ErIiIpLnRvTG93ZXJDYXNlKCk6InRleHQiO2xldCBfbyx0bz1vZChbYm4sdXImJnVyLnRv'@;
put 'QWJvcnRTaWduYWwoKV0sYmkpO2NvbnN0IGppPXRvJiZ0by51bnN1YnNjcmliZSYmKCgpPT57dG8udW5zdWJzY3JpYmUoKX0pO2xldCBQYzt0cnl7aWYodGEmJnI1JiYiZ2V0IiE9PW1uJiYiaGVhZCIhPT1tbiYmMCE9PShQYz15aWVsZCBrMShWYSxJbikpKXtsZXQgJDAsRzA9bmV3IFJlcXVl'@;
put 'c3QoX24se21ldGhvZDoiUE9TVCIsYm9keTpJbixkdXBsZXg6ImhhbGYifSk7aWYoRHQuaXNGb3JtRGF0YShJbikmJigkMD1HMC5oZWFkZXJzLmdldCgiY29udGVudC10eXBlIikpJiZWYS5zZXRDb250ZW50VHlwZSgkMCksRzAuYm9keSl7Y29uc3RbTm8scWldPWJsKFBjLE5zKHB1KHRhKSkp'@;
put 'O0luPVlpKEcwLmJvZHksNjU1MzYsTm8scWkpfX1EdC5pc1N0cmluZygkbyl8fCgkbz0kbz8iaW5jbHVkZSI6Im9taXQiKTtjb25zdCB6bD0iY3JlZGVudGlhbHMiaW4gUmVxdWVzdC5wcm90b3R5cGU7X289bmV3IFJlcXVlc3QoX24sey4uLlhsLHNpZ25hbDp0byxtZXRob2Q6bW4udG9VcHBl'@;
put 'ckNhc2UoKSxoZWFkZXJzOlZhLm5vcm1hbGl6ZSgpLnRvSlNPTigpLGJvZHk6SW4sZHVwbGV4OiJoYWxmIixjcmVkZW50aWFsczp6bD8kbzp2b2lkIDB9KTtsZXQgQ2E9eWllbGQgZmV0Y2goX28pO2NvbnN0IFRhPXVmJiYoInN0cmVhbSI9PT1vYXx8InJlc3BvbnNlIj09PW9hKTtpZih1ZiYm'@;
put 'KEZyfHxUYSYmamkpKXtjb25zdCBHMD17fTtbInN0YXR1cyIsInN0YXR1c1RleHQiLCJoZWFkZXJzIl0uZm9yRWFjaChNcz0+e0cwW01zXT1DYVtNc119KTtjb25zdCAkMD1EdC50b0Zpbml0ZU51bWJlcihDYS5oZWFkZXJzLmdldCgiY29udGVudC1sZW5ndGgiKSksW05vLHFpXT1GciYmYmwo'@;
put 'JDAsTnMocHUoRnIpLCEwKSl8fFtdO0NhPW5ldyBSZXNwb25zZShZaShDYS5ib2R5LDY1NTM2LE5vLCgpPT57cWkmJnFpKCksamkmJmppKCl9KSxHMCl9b2E9b2F8fCJ0ZXh0IjtsZXQgWGg9eWllbGQgc2RbRHQuZmluZEtleShzZCxvYSl8fCJ0ZXh0Il0oQ2EsQnQpO3JldHVybiFUYSYmamkm'@;
put 'JmppKCkseWllbGQgbmV3IFByb21pc2UoKEcwLCQwKT0+e0xhKEcwLCQwLHtkYXRhOlhoLGhlYWRlcnM6cGEuZnJvbShDYS5oZWFkZXJzKSxzdGF0dXM6Q2Euc3RhdHVzLHN0YXR1c1RleHQ6Q2Euc3RhdHVzVGV4dCxjb25maWc6QnQscmVxdWVzdDpfb30pfSl9Y2F0Y2goemwpe3Rocm93IGpp'@;
put 'JiZqaSgpLHpsJiYiVHlwZUVycm9yIj09PXpsLm5hbWUmJi9mZXRjaC9pLnRlc3QoemwubWVzc2FnZSk/T2JqZWN0LmFzc2lnbihuZXcgaXQoIk5ldHdvcmsgRXJyb3IiLGl0LkVSUl9ORVRXT1JLLEJ0LF9vKSx7Y2F1c2U6emwuY2F1c2V8fHpsfSk6aXQuZnJvbSh6bCx6bCYmemwuY29kZSxC'@;
put 'dCxfbyl9fSk7cmV0dXJuIGZ1bmN0aW9uKEJ0KXtyZXR1cm4gU3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0oKTtjb25zdCBlaD17aHR0cDpudWxsLHhocjpMdSxmZXRjaDpoZn07RHQuZm9yRWFjaChlaCwoU3QsQnQpPT57aWYoU3Qpe3RyeXtPYmplY3QuZGVmaW5lUHJvcGVydHkoU3QsIm5h'@;
put 'bWUiLHt2YWx1ZTpCdH0pfWNhdGNoe31PYmplY3QuZGVmaW5lUHJvcGVydHkoU3QsImFkYXB0ZXJOYW1lIix7dmFsdWU6QnR9KX19KTtjb25zdCBmZj1TdD0+YC0gJHtTdH1gLEdoPVN0PT5EdC5pc0Z1bmN0aW9uKFN0KXx8bnVsbD09PVN0fHwhMT09PVN0O3ZhciBPY19nZXRBZGFwdGVyPVN0'@;
put 'PT57U3Q9RHQuaXNBcnJheShTdCk/U3Q6W1N0XTtjb25zdHtsZW5ndGg6QnR9PVN0O2xldCBfbixtbjtjb25zdCBJbj17fTtmb3IobGV0IGJuPTA7Ym48QnQ7Ym4rKyl7bGV0IHVyO2lmKF9uPVN0W2JuXSxtbj1fbiwhR2goX24pJiYobW49ZWhbKHVyPVN0cmluZyhfbikpLnRvTG93ZXJDYXNl'@;
put 'KCldLHZvaWQgMD09PW1uKSl0aHJvdyBuZXcgaXQoYFVua25vd24gYWRhcHRlciAnJHt1cn0nYCk7aWYobW4pYnJlYWs7SW5bdXJ8fCIjIitibl09bW59aWYoIW1uKXtjb25zdCBibj1PYmplY3QuZW50cmllcyhJbikubWFwKChbYmksRnJdKT0+YGFkYXB0ZXIgJHtiaX0gYCsoITE9PT1Gcj8i'@;
put 'aXMgbm90IHN1cHBvcnRlZCBieSB0aGUgZW52aXJvbm1lbnQiOiJpcyBub3QgYXZhaWxhYmxlIGluIHRoZSBidWlsZCIpKTt0aHJvdyBuZXcgaXQoIlRoZXJlIGlzIG5vIHN1aXRhYmxlIGFkYXB0ZXIgdG8gZGlzcGF0Y2ggdGhlIHJlcXVlc3QgIisoQnQ/Ym4ubGVuZ3RoPjE/InNpbmNlIDpc'@;
put 'biIrYm4ubWFwKGZmKS5qb2luKCJcbiIpOiIgIitmZihiblswXSk6ImFzIG5vIGFkYXB0ZXIgc3BlY2lmaWVkIiksIkVSUl9OT1RfU1VQUE9SVCIpfXJldHVybiBtbn07ZnVuY3Rpb24gTmEoU3Qpe2lmKFN0LmNhbmNlbFRva2VuJiZTdC5jYW5jZWxUb2tlbi50aHJvd0lmUmVxdWVzdGVkKCks'@;
put 'U3Quc2lnbmFsJiZTdC5zaWduYWwuYWJvcnRlZCl0aHJvdyBuZXcgeWEobnVsbCxTdCl9ZnVuY3Rpb24gRDMoU3Qpe3JldHVybiBOYShTdCksU3QuaGVhZGVycz1wYS5mcm9tKFN0LmhlYWRlcnMpLFN0LmRhdGE9UW4uY2FsbChTdCxTdC50cmFuc2Zvcm1SZXF1ZXN0KSwtMSE9PVsicG9zdCIs'@;
put 'InB1dCIsInBhdGNoIl0uaW5kZXhPZihTdC5tZXRob2QpJiZTdC5oZWFkZXJzLnNldENvbnRlbnRUeXBlKCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiLCExKSxPY19nZXRBZGFwdGVyKFN0LmFkYXB0ZXJ8fHVhLmFkYXB0ZXIpKFN0KS50aGVuKGZ1bmN0aW9uKG1uKXtyZXR1'@;
put 'cm4gTmEoU3QpLG1uLmRhdGE9UW4uY2FsbChTdCxTdC50cmFuc2Zvcm1SZXNwb25zZSxtbiksbW4uaGVhZGVycz1wYS5mcm9tKG1uLmhlYWRlcnMpLG1ufSxmdW5jdGlvbihtbil7cmV0dXJuIGxhKG1uKXx8KE5hKFN0KSxtbiYmbW4ucmVzcG9uc2UmJihtbi5yZXNwb25zZS5kYXRhPVFuLmNh'@;
put 'bGwoU3QsU3QudHJhbnNmb3JtUmVzcG9uc2UsbW4ucmVzcG9uc2UpLG1uLnJlc3BvbnNlLmhlYWRlcnM9cGEuZnJvbShtbi5yZXNwb25zZS5oZWFkZXJzKSkpLFByb21pc2UucmVqZWN0KG1uKX0pfWNvbnN0IEtoPXt9O1sib2JqZWN0IiwiYm9vbGVhbiIsIm51bWJlciIsImZ1bmN0aW9uIiwi'@;
put 'c3RyaW5nIiwic3ltYm9sIl0uZm9yRWFjaCgoU3QsQnQpPT57S2hbU3RdPWZ1bmN0aW9uKG1uKXtyZXR1cm4gdHlwZW9mIG1uPT09U3R8fCJhIisoQnQ8MT8ibiAiOiIgIikrU3R9fSk7Y29uc3QgcWg9e307S2gudHJhbnNpdGlvbmFsPWZ1bmN0aW9uKEJ0LF9uLG1uKXtmdW5jdGlvbiBJbihi'@;
put 'bix1cil7cmV0dXJuIltBeGlvcyB2MS44LjJdIFRyYW5zaXRpb25hbCBvcHRpb24gJyIrYm4rIiciK3VyKyhtbj8iLiAiK21uOiIiKX1yZXR1cm4oYm4sdXIsYmkpPT57aWYoITE9PT1CdCl0aHJvdyBuZXcgaXQoSW4odXIsIiBoYXMgYmVlbiByZW1vdmVkIisoX24/IiBpbiAiK19uOiIiKSks'@;
put 'aXQuRVJSX0RFUFJFQ0FURUQpO3JldHVybiBfbiYmIXFoW3VyXSYmKHFoW3VyXT0hMCxnLndhcm4oSW4odXIsIiBoYXMgYmVlbiBkZXByZWNhdGVkIHNpbmNlIHYiK19uKyIgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgbmVhciBmdXR1cmUiKSkpLCFCdHx8QnQoYm4sdXIsYmkpfX0sS2gu'@;
put 'c3BlbGxpbmc9ZnVuY3Rpb24oQnQpe3JldHVybihfbixtbik9PihnLndhcm4oYCR7bW59IGlzIGxpa2VseSBhIG1pc3NwZWxsaW5nIG9mICR7QnR9YCksITApfTt2YXIgYW49e2Fzc2VydE9wdGlvbnM6ZnVuY3Rpb24gQW4oU3QsQnQsX24pe2lmKCJvYmplY3QiIT10eXBlb2YgU3QpdGhyb3cg'@;
put 'bmV3IGl0KCJvcHRpb25zIG11c3QgYmUgYW4gb2JqZWN0IixpdC5FUlJfQkFEX09QVElPTl9WQUxVRSk7Y29uc3QgbW49T2JqZWN0LmtleXMoU3QpO2xldCBJbj1tbi5sZW5ndGg7Zm9yKDtJbi0tID4wOyl7Y29uc3QgYm49bW5bSW5dLHVyPUJ0W2JuXTtpZih1cil7Y29uc3QgYmk9U3RbYm5d'@;
put 'LEZyPXZvaWQgMD09PWJpfHx1cihiaSxibixTdCk7aWYoITAhPT1Gcil0aHJvdyBuZXcgaXQoIm9wdGlvbiAiK2JuKyIgbXVzdCBiZSAiK0ZyLGl0LkVSUl9CQURfT1BUSU9OX1ZBTFVFKX1lbHNlIGlmKCEwIT09X24pdGhyb3cgbmV3IGl0KCJVbmtub3duIG9wdGlvbiAiK2JuLGl0LkVSUl9C'@;
put 'QURfT1BUSU9OKX19LHZhbGlkYXRvcnM6S2h9O2NvbnN0IHZpPWFuLnZhbGlkYXRvcnM7Y2xhc3MgQXJ7Y29uc3RydWN0b3IoQnQpe3RoaXMuZGVmYXVsdHM9QnQsdGhpcy5pbnRlcmNlcHRvcnM9e3JlcXVlc3Q6bmV3IEF0LHJlc3BvbnNlOm5ldyBBdH19cmVxdWVzdChCdCxfbil7dmFyIG1u'@;
put 'PXRoaXM7cmV0dXJuIF9hc3luY1RvR2VuZXJhdG9yKGZ1bmN0aW9uKigpe3RyeXtyZXR1cm4geWllbGQgbW4uX3JlcXVlc3QoQnQsX24pfWNhdGNoKEluKXtpZihJbiBpbnN0YW5jZW9mIEVycm9yKXtsZXQgYm49e307RXJyb3IuY2FwdHVyZVN0YWNrVHJhY2U/RXJyb3IuY2FwdHVyZVN0YWNr'@;
put 'VHJhY2UoYm4pOmJuPW5ldyBFcnJvcjtjb25zdCB1cj1ibi5zdGFjaz9ibi5zdGFjay5yZXBsYWNlKC9eLitcbi8sIiIpOiIiO3RyeXtJbi5zdGFjaz91ciYmIVN0cmluZyhJbi5zdGFjaykuZW5kc1dpdGgodXIucmVwbGFjZSgvXi4rXG4uK1xuLywiIikpJiYoSW4uc3RhY2srPSJcbiIrdXIp'@;
put 'OkluLnN0YWNrPXVyfWNhdGNoe319dGhyb3cgSW59fSkoKX1fcmVxdWVzdChCdCxfbil7InN0cmluZyI9PXR5cGVvZiBCdD8oX249X258fHt9KS51cmw9QnQ6X249QnR8fHt9LF9uPUpyKHRoaXMuZGVmYXVsdHMsX24pO2NvbnN0e3RyYW5zaXRpb25hbDptbixwYXJhbXNTZXJpYWxpemVyOklu'@;
put 'LGhlYWRlcnM6Ym59PV9uO3ZvaWQgMCE9PW1uJiZhbi5hc3NlcnRPcHRpb25zKG1uLHtzaWxlbnRKU09OUGFyc2luZzp2aS50cmFuc2l0aW9uYWwodmkuYm9vbGVhbiksZm9yY2VkSlNPTlBhcnNpbmc6dmkudHJhbnNpdGlvbmFsKHZpLmJvb2xlYW4pLGNsYXJpZnlUaW1lb3V0RXJyb3I6dmku'@;
put 'dHJhbnNpdGlvbmFsKHZpLmJvb2xlYW4pfSwhMSksbnVsbCE9SW4mJihEdC5pc0Z1bmN0aW9uKEluKT9fbi5wYXJhbXNTZXJpYWxpemVyPXtzZXJpYWxpemU6SW59OmFuLmFzc2VydE9wdGlvbnMoSW4se2VuY29kZTp2aS5mdW5jdGlvbixzZXJpYWxpemU6dmkuZnVuY3Rpb259LCEwKSksdm9p'@;
put 'ZCAwIT09X24uYWxsb3dBYnNvbHV0ZVVybHN8fChfbi5hbGxvd0Fic29sdXRlVXJscz12b2lkIDA9PT10aGlzLmRlZmF1bHRzLmFsbG93QWJzb2x1dGVVcmxzfHx0aGlzLmRlZmF1bHRzLmFsbG93QWJzb2x1dGVVcmxzKSxhbi5hc3NlcnRPcHRpb25zKF9uLHtiYXNlVXJsOnZpLnNwZWxsaW5n'@;
put 'KCJiYXNlVVJMIiksd2l0aFhzcmZUb2tlbjp2aS5zcGVsbGluZygid2l0aFhTUkZUb2tlbiIpfSwhMCksX24ubWV0aG9kPShfbi5tZXRob2R8fHRoaXMuZGVmYXVsdHMubWV0aG9kfHwiZ2V0IikudG9Mb3dlckNhc2UoKTtsZXQgdXI9Ym4mJkR0Lm1lcmdlKGJuLmNvbW1vbixibltfbi5tZXRo'@;
put 'b2RdKTtibiYmRHQuZm9yRWFjaChbImRlbGV0ZSIsImdldCIsImhlYWQiLCJwb3N0IiwicHV0IiwicGF0Y2giLCJjb21tb24iXSx0bz0+e2RlbGV0ZSBiblt0b119KSxfbi5oZWFkZXJzPXBhLmNvbmNhdCh1cixibik7Y29uc3QgYmk9W107bGV0IEZyPSEwO3RoaXMuaW50ZXJjZXB0b3JzLnJl'@;
put 'cXVlc3QuZm9yRWFjaChmdW5jdGlvbihfbyl7ImZ1bmN0aW9uIj09dHlwZW9mIF9vLnJ1bldoZW4mJiExPT09X28ucnVuV2hlbihfbil8fChGcj1GciYmX28uc3luY2hyb25vdXMsYmkudW5zaGlmdChfby5mdWxmaWxsZWQsX28ucmVqZWN0ZWQpKX0pO2NvbnN0IHRhPVtdO3RoaXMuaW50ZXJj'@;
put 'ZXB0b3JzLnJlc3BvbnNlLmZvckVhY2goZnVuY3Rpb24oX28pe3RhLnB1c2goX28uZnVsZmlsbGVkLF9vLnJlamVjdGVkKX0pO2xldCBvYSwkbyxWYT0wO2lmKCFGcil7Y29uc3QgdG89W0QzLmJpbmQodGhpcyksdm9pZCAwXTtmb3IodG8udW5zaGlmdC5hcHBseSh0byxiaSksdG8ucHVzaC5h'@;
put 'cHBseSh0byx0YSksJG89dG8ubGVuZ3RoLG9hPVByb21pc2UucmVzb2x2ZShfbik7VmE8JG87KW9hPW9hLnRoZW4odG9bVmErK10sdG9bVmErK10pO3JldHVybiBvYX0kbz1iaS5sZW5ndGg7bGV0IFhsPV9uO2ZvcihWYT0wO1ZhPCRvOyl7Y29uc3QgdG89YmlbVmErK10sX289YmlbVmErK107'@;
put 'dHJ5e1hsPXRvKFhsKX1jYXRjaChqaSl7X28uY2FsbCh0aGlzLGppKTticmVha319dHJ5e29hPUQzLmNhbGwodGhpcyxYbCl9Y2F0Y2godG8pe3JldHVybiBQcm9taXNlLnJlamVjdCh0byl9Zm9yKFZhPTAsJG89dGEubGVuZ3RoO1ZhPCRvOylvYT1vYS50aGVuKHRhW1ZhKytdLHRhW1ZhKytd'@;
put 'KTtyZXR1cm4gb2F9Z2V0VXJpKEJ0KXtyZXR1cm4gT3IodWkoKEJ0PUpyKHRoaXMuZGVmYXVsdHMsQnQpKS5iYXNlVVJMLEJ0LnVybCxCdC5hbGxvd0Fic29sdXRlVXJscyksQnQucGFyYW1zLEJ0LnBhcmFtc1NlcmlhbGl6ZXIpfX1EdC5mb3JFYWNoKFsiZGVsZXRlIiwiZ2V0IiwiaGVhZCIs'@;
put 'Im9wdGlvbnMiXSxmdW5jdGlvbihCdCl7QXIucHJvdG90eXBlW0J0XT1mdW5jdGlvbihfbixtbil7cmV0dXJuIHRoaXMucmVxdWVzdChKcihtbnx8e30se21ldGhvZDpCdCx1cmw6X24sZGF0YToobW58fHt9KS5kYXRhfSkpfX0pLER0LmZvckVhY2goWyJwb3N0IiwicHV0IiwicGF0Y2giXSxm'@;
put 'dW5jdGlvbihCdCl7ZnVuY3Rpb24gX24obW4pe3JldHVybiBmdW5jdGlvbihibix1cixiaSl7cmV0dXJuIHRoaXMucmVxdWVzdChKcihiaXx8e30se21ldGhvZDpCdCxoZWFkZXJzOm1uP3siQ29udGVudC1UeXBlIjoibXVsdGlwYXJ0L2Zvcm0tZGF0YSJ9Ont9LHVybDpibixkYXRhOnVyfSkp'@;
put 'fX1Bci5wcm90b3R5cGVbQnRdPV9uKCksQXIucHJvdG90eXBlW0J0KyJGb3JtIl09X24oITApfSk7dmFyIFBvPUFyO2NsYXNzIGVve2NvbnN0cnVjdG9yKEJ0KXtpZigiZnVuY3Rpb24iIT10eXBlb2YgQnQpdGhyb3cgbmV3IFR5cGVFcnJvcigiZXhlY3V0b3IgbXVzdCBiZSBhIGZ1bmN0aW9u'@;
put 'LiIpO2xldCBfbjt0aGlzLnByb21pc2U9bmV3IFByb21pc2UoZnVuY3Rpb24oYm4pe19uPWJufSk7Y29uc3QgbW49dGhpczt0aGlzLnByb21pc2UudGhlbihJbj0+e2lmKCFtbi5fbGlzdGVuZXJzKXJldHVybjtsZXQgYm49bW4uX2xpc3RlbmVycy5sZW5ndGg7Zm9yKDtibi0tID4wOyltbi5f'@;
put 'bGlzdGVuZXJzW2JuXShJbik7bW4uX2xpc3RlbmVycz1udWxsfSksdGhpcy5wcm9taXNlLnRoZW49SW49PntsZXQgYm47Y29uc3QgdXI9bmV3IFByb21pc2UoYmk9Pnttbi5zdWJzY3JpYmUoYmkpLGJuPWJpfSkudGhlbihJbik7cmV0dXJuIHVyLmNhbmNlbD1mdW5jdGlvbigpe21uLnVuc3Vi'@;
put 'c2NyaWJlKGJuKX0sdXJ9LEJ0KGZ1bmN0aW9uKGJuLHVyLGJpKXttbi5yZWFzb258fChtbi5yZWFzb249bmV3IHlhKGJuLHVyLGJpKSxfbihtbi5yZWFzb24pKX0pfXRocm93SWZSZXF1ZXN0ZWQoKXtpZih0aGlzLnJlYXNvbil0aHJvdyB0aGlzLnJlYXNvbn1zdWJzY3JpYmUoQnQpe3RoaXMu'@;
put 'cmVhc29uP0J0KHRoaXMucmVhc29uKTp0aGlzLl9saXN0ZW5lcnM/dGhpcy5fbGlzdGVuZXJzLnB1c2goQnQpOnRoaXMuX2xpc3RlbmVycz1bQnRdfXVuc3Vic2NyaWJlKEJ0KXtpZighdGhpcy5fbGlzdGVuZXJzKXJldHVybjtjb25zdCBfbj10aGlzLl9saXN0ZW5lcnMuaW5kZXhPZihCdCk7'@;
put 'LTEhPT1fbiYmdGhpcy5fbGlzdGVuZXJzLnNwbGljZShfbiwxKX10b0Fib3J0U2lnbmFsKCl7Y29uc3QgQnQ9bmV3IEFib3J0Q29udHJvbGxlcixfbj1tbj0+e0J0LmFib3J0KG1uKX07cmV0dXJuIHRoaXMuc3Vic2NyaWJlKF9uKSxCdC5zaWduYWwudW5zdWJzY3JpYmU9KCk9PnRoaXMudW5z'@;
put 'dWJzY3JpYmUoX24pLEJ0LnNpZ25hbH1zdGF0aWMgc291cmNlKCl7bGV0IEJ0O3JldHVybnt0b2tlbjpuZXcgZW8oZnVuY3Rpb24oSW4pe0J0PUlufSksY2FuY2VsOkJ0fX19dmFyIG9sPWVvO2NvbnN0IFNzPXtDb250aW51ZToxMDAsU3dpdGNoaW5nUHJvdG9jb2xzOjEwMSxQcm9jZXNzaW5n'@;
put 'OjEwMixFYXJseUhpbnRzOjEwMyxPazoyMDAsQ3JlYXRlZDoyMDEsQWNjZXB0ZWQ6MjAyLE5vbkF1dGhvcml0YXRpdmVJbmZvcm1hdGlvbjoyMDMsTm9Db250ZW50OjIwNCxSZXNldENvbnRlbnQ6MjA1LFBhcnRpYWxDb250ZW50OjIwNixNdWx0aVN0YXR1czoyMDcsQWxyZWFkeVJlcG9ydGVk'@;
put 'OjIwOCxJbVVzZWQ6MjI2LE11bHRpcGxlQ2hvaWNlczozMDAsTW92ZWRQZXJtYW5lbnRseTozMDEsRm91bmQ6MzAyLFNlZU90aGVyOjMwMyxOb3RNb2RpZmllZDozMDQsVXNlUHJveHk6MzA1LFVudXNlZDozMDYsVGVtcG9yYXJ5UmVkaXJlY3Q6MzA3LFBlcm1hbmVudFJlZGlyZWN0OjMwOCxC'@;
put 'YWRSZXF1ZXN0OjQwMCxVbmF1dGhvcml6ZWQ6NDAxLFBheW1lbnRSZXF1aXJlZDo0MDIsRm9yYmlkZGVuOjQwMyxOb3RGb3VuZDo0MDQsTWV0aG9kTm90QWxsb3dlZDo0MDUsTm90QWNjZXB0YWJsZTo0MDYsUHJveHlBdXRoZW50aWNhdGlvblJlcXVpcmVkOjQwNyxSZXF1ZXN0VGltZW91dDo0'@;
put 'MDgsQ29uZmxpY3Q6NDA5LEdvbmU6NDEwLExlbmd0aFJlcXVpcmVkOjQxMSxQcmVjb25kaXRpb25GYWlsZWQ6NDEyLFBheWxvYWRUb29MYXJnZTo0MTMsVXJpVG9vTG9uZzo0MTQsVW5zdXBwb3J0ZWRNZWRpYVR5cGU6NDE1LFJhbmdlTm90U2F0aXNmaWFibGU6NDE2LEV4cGVjdGF0aW9uRmFp'@;
put 'bGVkOjQxNyxJbUFUZWFwb3Q6NDE4LE1pc2RpcmVjdGVkUmVxdWVzdDo0MjEsVW5wcm9jZXNzYWJsZUVudGl0eTo0MjIsTG9ja2VkOjQyMyxGYWlsZWREZXBlbmRlbmN5OjQyNCxUb29FYXJseTo0MjUsVXBncmFkZVJlcXVpcmVkOjQyNixQcmVjb25kaXRpb25SZXF1aXJlZDo0MjgsVG9vTWFu'@;
put 'eVJlcXVlc3RzOjQyOSxSZXF1ZXN0SGVhZGVyRmllbGRzVG9vTGFyZ2U6NDMxLFVuYXZhaWxhYmxlRm9yTGVnYWxSZWFzb25zOjQ1MSxJbnRlcm5hbFNlcnZlckVycm9yOjUwMCxOb3RJbXBsZW1lbnRlZDo1MDEsQmFkR2F0ZXdheTo1MDIsU2VydmljZVVuYXZhaWxhYmxlOjUwMyxHYXRld2F5'@;
put 'VGltZW91dDo1MDQsSHR0cFZlcnNpb25Ob3RTdXBwb3J0ZWQ6NTA1LFZhcmlhbnRBbHNvTmVnb3RpYXRlczo1MDYsSW5zdWZmaWNpZW50U3RvcmFnZTo1MDcsTG9vcERldGVjdGVkOjUwOCxOb3RFeHRlbmRlZDo1MTAsTmV0d29ya0F1dGhlbnRpY2F0aW9uUmVxdWlyZWQ6NTExfTtPYmplY3Qu'@;
put 'ZW50cmllcyhTcykuZm9yRWFjaCgoW1N0LEJ0XSk9PntTc1tCdF09U3R9KTt2YXIgamw9U3M7Y29uc3Qga289ZnVuY3Rpb24gSG8oU3Qpe2NvbnN0IEJ0PW5ldyBQbyhTdCksX249QihQby5wcm90b3R5cGUucmVxdWVzdCxCdCk7cmV0dXJuIER0LmV4dGVuZChfbixQby5wcm90b3R5cGUsQnQs'@;
put 'e2FsbE93bktleXM6ITB9KSxEdC5leHRlbmQoX24sQnQsbnVsbCx7YWxsT3duS2V5czohMH0pLF9uLmNyZWF0ZT1mdW5jdGlvbihJbil7cmV0dXJuIEhvKEpyKFN0LEluKSl9LF9ufSh1YSk7a28uQXhpb3M9UG8sa28uQ2FuY2VsZWRFcnJvcj15YSxrby5DYW5jZWxUb2tlbj1vbCxrby5pc0Nh'@;
put 'bmNlbD1sYSxrby5WRVJTSU9OPSIxLjguMiIsa28udG9Gb3JtRGF0YT1RdCxrby5BeGlvc0Vycm9yPWl0LGtvLkNhbmNlbD1rby5DYW5jZWxlZEVycm9yLGtvLmFsbD1mdW5jdGlvbihCdCl7cmV0dXJuIFByb21pc2UuYWxsKEJ0KX0sa28uc3ByZWFkPWZ1bmN0aW9uIHpvKFN0KXtyZXR1cm4g'@;
put 'ZnVuY3Rpb24oX24pe3JldHVybiBTdC5hcHBseShudWxsLF9uKX19LGtvLmlzQXhpb3NFcnJvcj1mdW5jdGlvbiBWcyhTdCl7cmV0dXJuIER0LmlzT2JqZWN0KFN0KSYmITA9PT1TdC5pc0F4aW9zRXJyb3J9LGtvLm1lcmdlQ29uZmlnPUpyLGtvLkF4aW9zSGVhZGVycz1wYSxrby5mb3JtVG9K'@;
put 'U09OPVN0PT5JaShEdC5pc0hUTUxGb3JtKFN0KT9uZXcgRm9ybURhdGEoU3QpOlN0KSxrby5nZXRBZGFwdGVyPU9jX2dldEFkYXB0ZXIsa28uSHR0cFN0YXR1c0NvZGU9amwsa28uZGVmYXVsdD1rbyx1ZS5leHBvcnRzPWtvfSw4NTY2Oih1ZSxYKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgSSxfO09i'@;
put 'amVjdC5kZWZpbmVQcm9wZXJ0aWVzKFgse19fZXNNb2R1bGU6e3ZhbHVlOiEwfSxbU3ltYm9sLnRvU3RyaW5nVGFnXTp7dmFsdWU6Ik1vZHVsZSJ9fSk7Y29uc3Qgdz1mdW5jdGlvbiB5KFkpe3JldHVybiBZJiZZLl9fZXNNb2R1bGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHku'@;
put 'Y2FsbChZLCJkZWZhdWx0Iik/WS5kZWZhdWx0Oll9KGZ1bmN0aW9uIGcoKXtpZihfKXJldHVybiBJO189MTtjb25zdCBZPTIxNDc0ODM2NDcscT0zNixUZT0vXnhuLS0vLFNlPS9bXlwwLVx4N0ZdLyxqZT0vW1x4MkVcdTMwMDJcdUZGMEVcdUZGNjFdL2csVj17b3ZlcmZsb3c6Ik92ZXJmbG93'@;
put 'OiBpbnB1dCBuZWVkcyB3aWRlciBpbnRlZ2VycyB0byBwcm9jZXNzIiwibm90LWJhc2ljIjoiSWxsZWdhbCBpbnB1dCA+PSAweDgwIChub3QgYSBiYXNpYyBjb2RlIHBvaW50KSIsImludmFsaWQtaW5wdXQiOiJJbnZhbGlkIGlucHV0In0sYj1NYXRoLmZsb29yLHg9U3RyaW5nLmZyb21DaGFy'@;
put 'Q29kZTtmdW5jdGlvbiBDKHdlKXt0aHJvdyBuZXcgUmFuZ2VFcnJvcihWW3dlXSl9ZnVuY3Rpb24gSCh3ZSxVZSl7Y29uc3QgSmU9d2Uuc3BsaXQoIkAiKTtsZXQgb3Q9IiI7SmUubGVuZ3RoPjEmJihvdD1KZVswXSsiQCIsd2U9SmVbMV0pO2NvbnN0IHZlPWZ1bmN0aW9uIFQod2UsVWUpe2Nv'@;
put 'bnN0IEplPVtdO2xldCBvdD13ZS5sZW5ndGg7Zm9yKDtvdC0tOylKZVtvdF09VWUod2Vbb3RdKTtyZXR1cm4gSmV9KCh3ZT13ZS5yZXBsYWNlKGplLCIuIikpLnNwbGl0KCIuIiksVWUpLmpvaW4oIi4iKTtyZXR1cm4gb3QrdmV9ZnVuY3Rpb24gaih3ZSl7Y29uc3QgVWU9W107bGV0IEplPTA7'@;
put 'Y29uc3Qgb3Q9d2UubGVuZ3RoO2Zvcig7SmU8b3Q7KXtjb25zdCB4ZT13ZS5jaGFyQ29kZUF0KEplKyspO2lmKHhlPj01NTI5NiYmeGU8PTU2MzE5JiZKZTxvdCl7Y29uc3QgdmU9d2UuY2hhckNvZGVBdChKZSsrKTs1NjMyMD09KDY0NTEyJnZlKT9VZS5wdXNoKCgoMTAyMyZ4ZSk8PDEwKSso'@;
put 'MTAyMyZ2ZSkrNjU1MzYpOihVZS5wdXNoKHhlKSxKZS0tKX1lbHNlIFVlLnB1c2goeGUpfXJldHVybiBVZX1jb25zdCBtPWZ1bmN0aW9uKHdlKXtyZXR1cm4gd2U+PTQ4JiZ3ZTw1OD93ZS00OCsyNjp3ZT49NjUmJndlPDkxP3dlLTY1OndlPj05NyYmd2U8MTIzP3dlLTk3OnF9LEE9ZnVuY3Rp'@;
put 'b24od2UsVWUpe3JldHVybiB3ZSsyMis3NSood2U8MjYpLSgoMCE9VWUpPDw1KX0sYWU9ZnVuY3Rpb24od2UsVWUsSmUpe2xldCBvdD0wO2Zvcih3ZT1KZT9iKHdlLzcwMCk6d2U+PjEsd2UrPWIod2UvVWUpO3dlPjQ1NTtvdCs9cSl3ZT1iKHdlLzM1KTtyZXR1cm4gYihvdCszNip3ZS8od2Ur'@;
put 'MzgpKX0sdGU9ZnVuY3Rpb24od2Upe2NvbnN0IFVlPVtdLEplPXdlLmxlbmd0aDtsZXQgb3Q9MCx4ZT0xMjgsdmU9NzIsWGU9d2UubGFzdEluZGV4T2YoIi0iKTtYZTwwJiYoWGU9MCk7Zm9yKGxldCB6ZT0wO3plPFhlOysremUpd2UuY2hhckNvZGVBdCh6ZSk+PTEyOCYmQygibm90LWJhc2lj'@;
put 'IiksVWUucHVzaCh3ZS5jaGFyQ29kZUF0KHplKSk7Zm9yKGxldCB6ZT1YZT4wP1hlKzE6MDt6ZTxKZTspe2NvbnN0IERlPW90O2ZvcihsZXQgT2U9MSxJZT1xOztJZSs9cSl7emU+PUplJiZDKCJpbnZhbGlkLWlucHV0Iik7Y29uc3QgVmU9bSh3ZS5jaGFyQ29kZUF0KHplKyspKTtWZT49cSYm'@;
put 'QygiaW52YWxpZC1pbnB1dCIpLFZlPmIoKFktb3QpL09lKSYmQygib3ZlcmZsb3ciKSxvdCs9VmUqT2U7Y29uc3Qga2U9SWU8PXZlPzE6SWU+PXZlKzI2PzI2OkllLXZlO2lmKFZlPGtlKWJyZWFrO2NvbnN0IEFlPXEta2U7T2U+YihZL0FlKSYmQygib3ZlcmZsb3ciKSxPZSo9QWV9Y29uc3Qg'@;
put 'RmU9VWUubGVuZ3RoKzE7dmU9YWUob3QtRGUsRmUsMD09RGUpLGIob3QvRmUpPlkteGUmJkMoIm92ZXJmbG93IikseGUrPWIob3QvRmUpLG90JT1GZSxVZS5zcGxpY2Uob3QrKywwLHhlKX1yZXR1cm4gU3RyaW5nLmZyb21Db2RlUG9pbnQoLi4uVWUpfSxzZT1mdW5jdGlvbih3ZSl7Y29uc3Qg'@;
put 'VWU9W10sSmU9KHdlPWood2UpKS5sZW5ndGg7bGV0IG90PTEyOCx4ZT0wLHZlPTcyO2Zvcihjb25zdCBEZSBvZiB3ZSlEZTwxMjgmJlVlLnB1c2goeChEZSkpO2NvbnN0IFhlPVVlLmxlbmd0aDtsZXQgemU9WGU7Zm9yKFhlJiZVZS5wdXNoKCItIik7emU8SmU7KXtsZXQgRGU9WTtmb3IoY29u'@;
put 'c3QgT2Ugb2Ygd2UpT2U+PW90JiZPZTxEZSYmKERlPU9lKTtjb25zdCBGZT16ZSsxO0RlLW90PmIoKFkteGUpL0ZlKSYmQygib3ZlcmZsb3ciKSx4ZSs9KERlLW90KSpGZSxvdD1EZTtmb3IoY29uc3QgT2Ugb2Ygd2UpaWYoT2U8b3QmJisreGU+WSYmQygib3ZlcmZsb3ciKSxPZT09PW90KXts'@;
put 'ZXQgSWU9eGU7Zm9yKGxldCBWZT1xOztWZSs9cSl7Y29uc3Qga2U9VmU8PXZlPzE6VmU+PXZlKzI2PzI2OlZlLXZlO2lmKEllPGtlKWJyZWFrO2NvbnN0IEFlPUllLWtlLF90PXEta2U7VWUucHVzaCh4KEEoa2UrQWUlX3QsMCkpKSxJZT1iKEFlL190KX1VZS5wdXNoKHgoQShJZSwwKSkpLHZl'@;
put 'PWFlKHhlLEZlLHplPT09WGUpLHhlPTAsKyt6ZX0rK3hlLCsrb3R9cmV0dXJuIFVlLmpvaW4oIiIpfTtyZXR1cm4gST17dmVyc2lvbjoiMi4zLjEiLHVjczI6e2RlY29kZTpqLGVuY29kZTp3ZT0+U3RyaW5nLmZyb21Db2RlUG9pbnQoLi4ud2UpfSxkZWNvZGU6dGUsZW5jb2RlOnNlLHRvQVND'@;
put 'SUk6ZnVuY3Rpb24od2Upe3JldHVybiBIKHdlLGZ1bmN0aW9uKFVlKXtyZXR1cm4gU2UudGVzdChVZSk/InhuLS0iK3NlKFVlKTpVZX0pfSx0b1VuaWNvZGU6ZnVuY3Rpb24od2Upe3JldHVybiBIKHdlLGZ1bmN0aW9uKFVlKXtyZXR1cm4gVGUudGVzdChVZSk/dGUoVWUuc2xpY2UoNCkudG9M'@;
put 'b3dlckNhc2UoKSk6VWV9KX19fSgpKSxGPVsiYWMiLCJjb20uYWMiLCJlZHUuYWMiLCJnb3YuYWMiLCJtaWwuYWMiLCJuZXQuYWMiLCJvcmcuYWMiLCJhZCIsImFlIiwiYWMuYWUiLCJjby5hZSIsImdvdi5hZSIsIm1pbC5hZSIsIm5ldC5hZSIsIm9yZy5hZSIsInNjaC5hZSIsImFlcm8iLCJh'@;
put 'aXJsaW5lLmFlcm8iLCJhaXJwb3J0LmFlcm8iLCJhY2NpZGVudC1pbnZlc3RpZ2F0aW9uLmFlcm8iLCJhY2NpZGVudC1wcmV2ZW50aW9uLmFlcm8iLCJhZXJvYmF0aWMuYWVybyIsImFlcm9jbHViLmFlcm8iLCJhZXJvZHJvbWUuYWVybyIsImFnZW50cy5hZXJvIiwiYWlyLXN1cnZlaWxsYW5j'@;
put 'ZS5hZXJvIiwiYWlyLXRyYWZmaWMtY29udHJvbC5hZXJvIiwiYWlyY3JhZnQuYWVybyIsImFpcnRyYWZmaWMuYWVybyIsImFtYnVsYW5jZS5hZXJvIiwiYXNzb2NpYXRpb24uYWVybyIsImF1dGhvci5hZXJvIiwiYmFsbG9vbmluZy5hZXJvIiwiYnJva2VyLmFlcm8iLCJjYWEuYWVybyIsImNh'@;
put 'cmdvLmFlcm8iLCJjYXRlcmluZy5hZXJvIiwiY2VydGlmaWNhdGlvbi5hZXJvIiwiY2hhbXBpb25zaGlwLmFlcm8iLCJjaGFydGVyLmFlcm8iLCJjaXZpbGF2aWF0aW9uLmFlcm8iLCJjbHViLmFlcm8iLCJjb25mZXJlbmNlLmFlcm8iLCJjb25zdWx0YW50LmFlcm8iLCJjb25zdWx0aW5nLmFl'@;
put 'cm8iLCJjb250cm9sLmFlcm8iLCJjb3VuY2lsLmFlcm8iLCJjcmV3LmFlcm8iLCJkZXNpZ24uYWVybyIsImRnY2EuYWVybyIsImVkdWNhdG9yLmFlcm8iLCJlbWVyZ2VuY3kuYWVybyIsImVuZ2luZS5hZXJvIiwiZW5naW5lZXIuYWVybyIsImVudGVydGFpbm1lbnQuYWVybyIsImVxdWlwbWVu'@;
put 'dC5hZXJvIiwiZXhjaGFuZ2UuYWVybyIsImV4cHJlc3MuYWVybyIsImZlZGVyYXRpb24uYWVybyIsImZsaWdodC5hZXJvIiwiZnJlaWdodC5hZXJvIiwiZnVlbC5hZXJvIiwiZ2xpZGluZy5hZXJvIiwiZ292ZXJubWVudC5hZXJvIiwiZ3JvdW5kaGFuZGxpbmcuYWVybyIsImdyb3VwLmFlcm8i'@;
put 'LCJoYW5nZ2xpZGluZy5hZXJvIiwiaG9tZWJ1aWx0LmFlcm8iLCJpbnN1cmFuY2UuYWVybyIsImpvdXJuYWwuYWVybyIsImpvdXJuYWxpc3QuYWVybyIsImxlYXNpbmcuYWVybyIsImxvZ2lzdGljcy5hZXJvIiwibWFnYXppbmUuYWVybyIsIm1haW50ZW5hbmNlLmFlcm8iLCJtYXJrZXRwbGFj'@;
put 'ZS5hZXJvIiwibWVkaWEuYWVybyIsIm1pY3JvbGlnaHQuYWVybyIsIm1vZGVsbGluZy5hZXJvIiwibmF2aWdhdGlvbi5hZXJvIiwicGFyYWNodXRpbmcuYWVybyIsInBhcmFnbGlkaW5nLmFlcm8iLCJwYXNzZW5nZXItYXNzb2NpYXRpb24uYWVybyIsInBpbG90LmFlcm8iLCJwcmVzcy5hZXJv'@;
put 'IiwicHJvZHVjdGlvbi5hZXJvIiwicmVjcmVhdGlvbi5hZXJvIiwicmVwYm9keS5hZXJvIiwicmVzLmFlcm8iLCJyZXNlYXJjaC5hZXJvIiwicm90b3JjcmFmdC5hZXJvIiwic2FmZXR5LmFlcm8iLCJzY2llbnRpc3QuYWVybyIsInNlcnZpY2VzLmFlcm8iLCJzaG93LmFlcm8iLCJza3lkaXZp'@;
put 'bmcuYWVybyIsInNvZnR3YXJlLmFlcm8iLCJzdHVkZW50LmFlcm8iLCJ0YXhpLmFlcm8iLCJ0cmFkZXIuYWVybyIsInRyYWRpbmcuYWVybyIsInRyYWluZXIuYWVybyIsInVuaW9uLmFlcm8iLCJ3b3JraW5nZ3JvdXAuYWVybyIsIndvcmtzLmFlcm8iLCJhZiIsImNvbS5hZiIsImVkdS5hZiIs'@;
put 'Imdvdi5hZiIsIm5ldC5hZiIsIm9yZy5hZiIsImFnIiwiY28uYWciLCJjb20uYWciLCJuZXQuYWciLCJub20uYWciLCJvcmcuYWciLCJhaSIsImNvbS5haSIsIm5ldC5haSIsIm9mZi5haSIsIm9yZy5haSIsImFsIiwiY29tLmFsIiwiZWR1LmFsIiwiZ292LmFsIiwibWlsLmFsIiwibmV0LmFs'@;
put 'Iiwib3JnLmFsIiwiYW0iLCJjby5hbSIsImNvbS5hbSIsImNvbW11bmUuYW0iLCJuZXQuYW0iLCJvcmcuYW0iLCJhbyIsImNvLmFvIiwiZWQuYW8iLCJlZHUuYW8iLCJnb3YuYW8iLCJndi5hbyIsIml0LmFvIiwib2cuYW8iLCJvcmcuYW8iLCJwYi5hbyIsImFxIiwiYXIiLCJiZXQuYXIiLCJj'@;
put 'b20uYXIiLCJjb29wLmFyIiwiZWR1LmFyIiwiZ29iLmFyIiwiZ292LmFyIiwiaW50LmFyIiwibWlsLmFyIiwibXVzaWNhLmFyIiwibXV0dWFsLmFyIiwibmV0LmFyIiwib3JnLmFyIiwic2VuYXNhLmFyIiwidHVyLmFyIiwiYXJwYSIsImUxNjQuYXJwYSIsImhvbWUuYXJwYSIsImluLWFkZHIu'@;
put 'YXJwYSIsImlwNi5hcnBhIiwiaXJpcy5hcnBhIiwidXJpLmFycGEiLCJ1cm4uYXJwYSIsImFzIiwiZ292LmFzIiwiYXNpYSIsImF0IiwiYWMuYXQiLCJzdGguYWMuYXQiLCJjby5hdCIsImd2LmF0Iiwib3IuYXQiLCJhdSIsImFzbi5hdSIsImNvbS5hdSIsImVkdS5hdSIsImdvdi5hdSIsImlk'@;
put 'LmF1IiwibmV0LmF1Iiwib3JnLmF1IiwiY29uZi5hdSIsIm96LmF1IiwiYWN0LmF1IiwibnN3LmF1IiwibnQuYXUiLCJxbGQuYXUiLCJzYS5hdSIsInRhcy5hdSIsInZpYy5hdSIsIndhLmF1IiwiYWN0LmVkdS5hdSIsImNhdGhvbGljLmVkdS5hdSIsIm5zdy5lZHUuYXUiLCJudC5lZHUuYXUi'@;
put 'LCJxbGQuZWR1LmF1Iiwic2EuZWR1LmF1IiwidGFzLmVkdS5hdSIsInZpYy5lZHUuYXUiLCJ3YS5lZHUuYXUiLCJxbGQuZ292LmF1Iiwic2EuZ292LmF1IiwidGFzLmdvdi5hdSIsInZpYy5nb3YuYXUiLCJ3YS5nb3YuYXUiLCJzY2hvb2xzLm5zdy5lZHUuYXUiLCJhdyIsImNvbS5hdyIsImF4'@;
put 'IiwiYXoiLCJiaXouYXoiLCJjb20uYXoiLCJlZHUuYXoiLCJnb3YuYXoiLCJpbmZvLmF6IiwiaW50LmF6IiwibWlsLmF6IiwibmFtZS5heiIsIm5ldC5heiIsIm9yZy5heiIsInBwLmF6IiwicHJvLmF6IiwiYmEiLCJjb20uYmEiLCJlZHUuYmEiLCJnb3YuYmEiLCJtaWwuYmEiLCJuZXQuYmEi'@;
put 'LCJvcmcuYmEiLCJiYiIsImJpei5iYiIsImNvLmJiIiwiY29tLmJiIiwiZWR1LmJiIiwiZ292LmJiIiwiaW5mby5iYiIsIm5ldC5iYiIsIm9yZy5iYiIsInN0b3JlLmJiIiwidHYuYmIiLCIqLmJkIiwiYmUiLCJhYy5iZSIsImJmIiwiZ292LmJmIiwiYmciLCIwLmJnIiwiMS5iZyIsIjIuYmci'@;
put 'LCIzLmJnIiwiNC5iZyIsIjUuYmciLCI2LmJnIiwiNy5iZyIsIjguYmciLCI5LmJnIiwiYS5iZyIsImIuYmciLCJjLmJnIiwiZC5iZyIsImUuYmciLCJmLmJnIiwiZy5iZyIsImguYmciLCJpLmJnIiwiai5iZyIsImsuYmciLCJsLmJnIiwibS5iZyIsIm4uYmciLCJvLmJnIiwicC5iZyIsInEu'@;
put 'YmciLCJyLmJnIiwicy5iZyIsInQuYmciLCJ1LmJnIiwidi5iZyIsIncuYmciLCJ4LmJnIiwieS5iZyIsInouYmciLCJiaCIsImNvbS5iaCIsImVkdS5iaCIsImdvdi5iaCIsIm5ldC5iaCIsIm9yZy5iaCIsImJpIiwiY28uYmkiLCJjb20uYmkiLCJlZHUuYmkiLCJvci5iaSIsIm9yZy5iaSIs'@;
put 'ImJpeiIsImJqIiwiYWZyaWNhLmJqIiwiYWdyby5iaiIsImFyY2hpdGVjdGVzLmJqIiwiYXNzdXIuYmoiLCJhdm9jYXRzLmJqIiwiY28uYmoiLCJjb20uYmoiLCJlY28uYmoiLCJlY29uby5iaiIsImVkdS5iaiIsImluZm8uYmoiLCJsb2lzaXJzLmJqIiwibW9uZXkuYmoiLCJuZXQuYmoiLCJv'@;
put 'cmcuYmoiLCJvdGUuYmoiLCJyZXN0YXVyYW50LmJqIiwicmVzdG8uYmoiLCJ0b3VyaXNtLmJqIiwidW5pdi5iaiIsImJtIiwiY29tLmJtIiwiZWR1LmJtIiwiZ292LmJtIiwibmV0LmJtIiwib3JnLmJtIiwiYm4iLCJjb20uYm4iLCJlZHUuYm4iLCJnb3YuYm4iLCJuZXQuYm4iLCJvcmcuYm4i'@;
put 'LCJibyIsImNvbS5ibyIsImVkdS5ibyIsImdvYi5ibyIsImludC5ibyIsIm1pbC5ibyIsIm5ldC5ibyIsIm9yZy5ibyIsInR2LmJvIiwid2ViLmJvIiwiYWNhZGVtaWEuYm8iLCJhZ3JvLmJvIiwiYXJ0ZS5ibyIsImJsb2cuYm8iLCJib2xpdmlhLmJvIiwiY2llbmNpYS5ibyIsImNvb3BlcmF0'@;
put 'aXZhLmJvIiwiZGVtb2NyYWNpYS5ibyIsImRlcG9ydGUuYm8iLCJlY29sb2dpYS5ibyIsImVjb25vbWlhLmJvIiwiZW1wcmVzYS5ibyIsImluZGlnZW5hLmJvIiwiaW5kdXN0cmlhLmJvIiwiaW5mby5ibyIsIm1lZGljaW5hLmJvIiwibW92aW1pZW50by5ibyIsIm11c2ljYS5ibyIsIm5hdHVy'@;
put 'YWwuYm8iLCJub21icmUuYm8iLCJub3RpY2lhcy5ibyIsInBhdHJpYS5ibyIsInBsdXJpbmFjaW9uYWwuYm8iLCJwb2xpdGljYS5ibyIsInByb2Zlc2lvbmFsLmJvIiwicHVlYmxvLmJvIiwicmV2aXN0YS5ibyIsInNhbHVkLmJvIiwidGVjbm9sb2dpYS5ibyIsInRrc2F0LmJvIiwidHJhbnNw'@;
put 'b3J0ZS5ibyIsIndpa2kuYm8iLCJiciIsIjlndWFjdS5iciIsImFiYy5iciIsImFkbS5iciIsImFkdi5iciIsImFnci5iciIsImFqdS5iciIsImFtLmJyIiwiYW5hbmkuYnIiLCJhcGFyZWNpZGEuYnIiLCJhcHAuYnIiLCJhcnEuYnIiLCJhcnQuYnIiLCJhdG8uYnIiLCJiLmJyIiwiYmFydWVy'@;
put 'aS5iciIsImJlbGVtLmJyIiwiYmV0LmJyIiwiYmh6LmJyIiwiYmliLmJyIiwiYmlvLmJyIiwiYmxvZy5iciIsImJtZC5iciIsImJvYXZpc3RhLmJyIiwiYnNiLmJyIiwiY2FtcGluYWdyYW5kZS5iciIsImNhbXBpbmFzLmJyIiwiY2F4aWFzLmJyIiwiY2ltLmJyIiwiY25nLmJyIiwiY250LmJy'@;
put 'IiwiY29tLmJyIiwiY29udGFnZW0uYnIiLCJjb29wLmJyIiwiY296LmJyIiwiY3JpLmJyIiwiY3VpYWJhLmJyIiwiY3VyaXRpYmEuYnIiLCJkZWYuYnIiLCJkZXMuYnIiLCJkZXQuYnIiLCJkZXYuYnIiLCJlY24uYnIiLCJlY28uYnIiLCJlZHUuYnIiLCJlbXAuYnIiLCJlbmYuYnIiLCJlbmcu'@;
put 'YnIiLCJlc3AuYnIiLCJldGMuYnIiLCJldGkuYnIiLCJmYXIuYnIiLCJmZWlyYS5iciIsImZsb2cuYnIiLCJmbG9yaXBhLmJyIiwiZm0uYnIiLCJmbmQuYnIiLCJmb3J0YWwuYnIiLCJmb3QuYnIiLCJmb3ouYnIiLCJmc3QuYnIiLCJnMTIuYnIiLCJnZW8uYnIiLCJnZ2YuYnIiLCJnb2lhbmlh'@;
put 'LmJyIiwiZ292LmJyIiwiYWMuZ292LmJyIiwiYWwuZ292LmJyIiwiYW0uZ292LmJyIiwiYXAuZ292LmJyIiwiYmEuZ292LmJyIiwiY2UuZ292LmJyIiwiZGYuZ292LmJyIiwiZXMuZ292LmJyIiwiZ28uZ292LmJyIiwibWEuZ292LmJyIiwibWcuZ292LmJyIiwibXMuZ292LmJyIiwibXQuZ292'@;
put 'LmJyIiwicGEuZ292LmJyIiwicGIuZ292LmJyIiwicGUuZ292LmJyIiwicGkuZ292LmJyIiwicHIuZ292LmJyIiwicmouZ292LmJyIiwicm4uZ292LmJyIiwicm8uZ292LmJyIiwicnIuZ292LmJyIiwicnMuZ292LmJyIiwic2MuZ292LmJyIiwic2UuZ292LmJyIiwic3AuZ292LmJyIiwidG8u'@;
put 'Z292LmJyIiwiZ3J1LmJyIiwiaW1iLmJyIiwiaW5kLmJyIiwiaW5mLmJyIiwiamFiLmJyIiwiamFtcGEuYnIiLCJqZGYuYnIiLCJqb2ludmlsbGUuYnIiLCJqb3IuYnIiLCJqdXMuYnIiLCJsZWcuYnIiLCJsZWlsYW8uYnIiLCJsZWwuYnIiLCJsb2cuYnIiLCJsb25kcmluYS5iciIsIm1hY2Fw'@;
put 'YS5iciIsIm1hY2Vpby5iciIsIm1hbmF1cy5iciIsIm1hcmluZ2EuYnIiLCJtYXQuYnIiLCJtZWQuYnIiLCJtaWwuYnIiLCJtb3JlbmEuYnIiLCJtcC5iciIsIm11cy5iciIsIm5hdGFsLmJyIiwibmV0LmJyIiwibml0ZXJvaS5iciIsIioubm9tLmJyIiwibm90LmJyIiwibnRyLmJyIiwib2Rv'@;
put 'LmJyIiwib25nLmJyIiwib3JnLmJyIiwib3Nhc2NvLmJyIiwicGFsbWFzLmJyIiwicG9hLmJyIiwicHBnLmJyIiwicHJvLmJyIiwicHNjLmJyIiwicHNpLmJyIiwicHZoLmJyIiwicXNsLmJyIiwicmFkaW8uYnIiLCJyZWMuYnIiLCJyZWNpZmUuYnIiLCJyZXAuYnIiLCJyaWJlaXJhby5iciIs'@;
put 'InJpby5iciIsInJpb2JyYW5jby5iciIsInJpb3ByZXRvLmJyIiwic2FsdmFkb3IuYnIiLCJzYW1wYS5iciIsInNhbnRhbWFyaWEuYnIiLCJzYW50b2FuZHJlLmJyIiwic2FvYmVybmFyZG8uYnIiLCJzYW9nb25jYS5iciIsInNlZy5iciIsInNqYy5iciIsInNsZy5iciIsInNsei5iciIsInNv'@;
put 'cm9jYWJhLmJyIiwic3J2LmJyIiwidGF4aS5iciIsInRjLmJyIiwidGVjLmJyIiwidGVvLmJyIiwidGhlLmJyIiwidG1wLmJyIiwidHJkLmJyIiwidHVyLmJyIiwidHYuYnIiLCJ1ZGkuYnIiLCJ2ZXQuYnIiLCJ2aXguYnIiLCJ2bG9nLmJyIiwid2lraS5iciIsInpsZy5iciIsImJzIiwiY29t'@;
put 'LmJzIiwiZWR1LmJzIiwiZ292LmJzIiwibmV0LmJzIiwib3JnLmJzIiwiYnQiLCJjb20uYnQiLCJlZHUuYnQiLCJnb3YuYnQiLCJuZXQuYnQiLCJvcmcuYnQiLCJidiIsImJ3IiwiY28uYnciLCJvcmcuYnciLCJieSIsImdvdi5ieSIsIm1pbC5ieSIsImNvbS5ieSIsIm9mLmJ5IiwiYnoiLCJj'@;
put 'by5ieiIsImNvbS5ieiIsImVkdS5ieiIsImdvdi5ieiIsIm5ldC5ieiIsIm9yZy5ieiIsImNhIiwiYWIuY2EiLCJiYy5jYSIsIm1iLmNhIiwibmIuY2EiLCJuZi5jYSIsIm5sLmNhIiwibnMuY2EiLCJudC5jYSIsIm51LmNhIiwib24uY2EiLCJwZS5jYSIsInFjLmNhIiwic2suY2EiLCJ5ay5j'@;
put 'YSIsImdjLmNhIiwiY2F0IiwiY2MiLCJjZCIsImdvdi5jZCIsImNmIiwiY2ciLCJjaCIsImNpIiwiYWMuY2kiLCJhXHhlOXJvcG9ydC5jaSIsImFzc28uY2kiLCJjby5jaSIsImNvbS5jaSIsImVkLmNpIiwiZWR1LmNpIiwiZ28uY2kiLCJnb3V2LmNpIiwiaW50LmNpIiwibmV0LmNpIiwib3Iu'@;
put 'Y2kiLCJvcmcuY2kiLCIqLmNrIiwiIXd3dy5jayIsImNsIiwiY28uY2wiLCJnb2IuY2wiLCJnb3YuY2wiLCJtaWwuY2wiLCJjbSIsImNvLmNtIiwiY29tLmNtIiwiZ292LmNtIiwibmV0LmNtIiwiY24iLCJhYy5jbiIsImNvbS5jbiIsImVkdS5jbiIsImdvdi5jbiIsIm1pbC5jbiIsIm5ldC5j'@;
put 'biIsIm9yZy5jbiIsIlx1NTE2Y1x1NTNmOC5jbiIsIlx1N2RiMlx1N2Q2MS5jbiIsIlx1N2Y1MVx1N2VkYy5jbiIsImFoLmNuIiwiYmouY24iLCJjcS5jbiIsImZqLmNuIiwiZ2QuY24iLCJncy5jbiIsImd4LmNuIiwiZ3ouY24iLCJoYS5jbiIsImhiLmNuIiwiaGUuY24iLCJoaS5jbiIsImhr'@;
put 'LmNuIiwiaGwuY24iLCJobi5jbiIsImpsLmNuIiwianMuY24iLCJqeC5jbiIsImxuLmNuIiwibW8uY24iLCJubS5jbiIsIm54LmNuIiwicWguY24iLCJzYy5jbiIsInNkLmNuIiwic2guY24iLCJzbi5jbiIsInN4LmNuIiwidGouY24iLCJ0dy5jbiIsInhqLmNuIiwieHouY24iLCJ5bi5jbiIs'@;
put 'InpqLmNuIiwiY28iLCJjb20uY28iLCJlZHUuY28iLCJnb3YuY28iLCJtaWwuY28iLCJuZXQuY28iLCJub20uY28iLCJvcmcuY28iLCJjb20iLCJjb29wIiwiY3IiLCJhYy5jciIsImNvLmNyIiwiZWQuY3IiLCJmaS5jciIsImdvLmNyIiwib3IuY3IiLCJzYS5jciIsImN1IiwiY29tLmN1Iiwi'@;
put 'ZWR1LmN1IiwiZ29iLmN1IiwiaW5mLmN1IiwibmF0LmN1IiwibmV0LmN1Iiwib3JnLmN1IiwiY3YiLCJjb20uY3YiLCJlZHUuY3YiLCJpZC5jdiIsImludC5jdiIsIm5ldC5jdiIsIm5vbWUuY3YiLCJvcmcuY3YiLCJwdWJsLmN2IiwiY3ciLCJjb20uY3ciLCJlZHUuY3ciLCJuZXQuY3ciLCJv'@;
put 'cmcuY3ciLCJjeCIsImdvdi5jeCIsImN5IiwiYWMuY3kiLCJiaXouY3kiLCJjb20uY3kiLCJla2xvZ2VzLmN5IiwiZ292LmN5IiwibHRkLmN5IiwibWlsLmN5IiwibmV0LmN5Iiwib3JnLmN5IiwicHJlc3MuY3kiLCJwcm8uY3kiLCJ0bS5jeSIsImN6IiwiZGUiLCJkaiIsImRrIiwiZG0iLCJj'@;
put 'by5kbSIsImNvbS5kbSIsImVkdS5kbSIsImdvdi5kbSIsIm5ldC5kbSIsIm9yZy5kbSIsImRvIiwiYXJ0LmRvIiwiY29tLmRvIiwiZWR1LmRvIiwiZ29iLmRvIiwiZ292LmRvIiwibWlsLmRvIiwibmV0LmRvIiwib3JnLmRvIiwic2xkLmRvIiwid2ViLmRvIiwiZHoiLCJhcnQuZHoiLCJhc3Nv'@;
put 'LmR6IiwiY29tLmR6IiwiZWR1LmR6IiwiZ292LmR6IiwibmV0LmR6Iiwib3JnLmR6IiwicG9sLmR6Iiwic29jLmR6IiwidG0uZHoiLCJlYyIsImNvbS5lYyIsImVkdS5lYyIsImZpbi5lYyIsImdvYi5lYyIsImdvdi5lYyIsImluZm8uZWMiLCJrMTIuZWMiLCJtZWQuZWMiLCJtaWwuZWMiLCJu'@;
put 'ZXQuZWMiLCJvcmcuZWMiLCJwcm8uZWMiLCJlZHUiLCJlZSIsImFpcC5lZSIsImNvbS5lZSIsImVkdS5lZSIsImZpZS5lZSIsImdvdi5lZSIsImxpYi5lZSIsIm1lZC5lZSIsIm9yZy5lZSIsInByaS5lZSIsInJpaWsuZWUiLCJlZyIsImFjLmVnIiwiY29tLmVnIiwiZWR1LmVnIiwiZXVuLmVn'@;
put 'IiwiZ292LmVnIiwiaW5mby5lZyIsIm1lLmVnIiwibWlsLmVnIiwibmFtZS5lZyIsIm5ldC5lZyIsIm9yZy5lZyIsInNjaS5lZyIsInNwb3J0LmVnIiwidHYuZWciLCIqLmVyIiwiZXMiLCJjb20uZXMiLCJlZHUuZXMiLCJnb2IuZXMiLCJub20uZXMiLCJvcmcuZXMiLCJldCIsImJpei5ldCIs'@;
put 'ImNvbS5ldCIsImVkdS5ldCIsImdvdi5ldCIsImluZm8uZXQiLCJuYW1lLmV0IiwibmV0LmV0Iiwib3JnLmV0IiwiZXUiLCJmaSIsImFsYW5kLmZpIiwiZmoiLCJhYy5maiIsImJpei5maiIsImNvbS5maiIsImdvdi5maiIsImluZm8uZmoiLCJtaWwuZmoiLCJuYW1lLmZqIiwibmV0LmZqIiwi'@;
put 'b3JnLmZqIiwicHJvLmZqIiwiKi5mayIsImZtIiwiY29tLmZtIiwiZWR1LmZtIiwibmV0LmZtIiwib3JnLmZtIiwiZm8iLCJmciIsImFzc28uZnIiLCJjb20uZnIiLCJnb3V2LmZyIiwibm9tLmZyIiwicHJkLmZyIiwidG0uZnIiLCJhdm91ZXMuZnIiLCJjY2kuZnIiLCJncmV0YS5mciIsImh1'@;
put 'aXNzaWVyLWp1c3RpY2UuZnIiLCJnYSIsImdiIiwiZ2QiLCJlZHUuZ2QiLCJnb3YuZ2QiLCJnZSIsImNvbS5nZSIsImVkdS5nZSIsImdvdi5nZSIsIm5ldC5nZSIsIm9yZy5nZSIsInB2dC5nZSIsInNjaG9vbC5nZSIsImdmIiwiZ2ciLCJjby5nZyIsIm5ldC5nZyIsIm9yZy5nZyIsImdoIiwi'@;
put 'Y29tLmdoIiwiZWR1LmdoIiwiZ292LmdoIiwibWlsLmdoIiwib3JnLmdoIiwiZ2kiLCJjb20uZ2kiLCJlZHUuZ2kiLCJnb3YuZ2kiLCJsdGQuZ2kiLCJtb2QuZ2kiLCJvcmcuZ2kiLCJnbCIsImNvLmdsIiwiY29tLmdsIiwiZWR1LmdsIiwibmV0LmdsIiwib3JnLmdsIiwiZ20iLCJnbiIsImFj'@;
put 'LmduIiwiY29tLmduIiwiZWR1LmduIiwiZ292LmduIiwibmV0LmduIiwib3JnLmduIiwiZ292IiwiZ3AiLCJhc3NvLmdwIiwiY29tLmdwIiwiZWR1LmdwIiwibW9iaS5ncCIsIm5ldC5ncCIsIm9yZy5ncCIsImdxIiwiZ3IiLCJjb20uZ3IiLCJlZHUuZ3IiLCJnb3YuZ3IiLCJuZXQuZ3IiLCJv'@;
put 'cmcuZ3IiLCJncyIsImd0IiwiY29tLmd0IiwiZWR1Lmd0IiwiZ29iLmd0IiwiaW5kLmd0IiwibWlsLmd0IiwibmV0Lmd0Iiwib3JnLmd0IiwiZ3UiLCJjb20uZ3UiLCJlZHUuZ3UiLCJnb3YuZ3UiLCJndWFtLmd1IiwiaW5mby5ndSIsIm5ldC5ndSIsIm9yZy5ndSIsIndlYi5ndSIsImd3Iiwi'@;
put 'Z3kiLCJjby5neSIsImNvbS5neSIsImVkdS5neSIsImdvdi5neSIsIm5ldC5neSIsIm9yZy5neSIsImhrIiwiY29tLmhrIiwiZWR1LmhrIiwiZ292LmhrIiwiaWR2LmhrIiwibmV0LmhrIiwib3JnLmhrIiwiXHU0ZTJhXHU0ZWJhLmhrIiwiXHU1MDBiXHU0ZWJhLmhrIiwiXHU1MTZjXHU1M2Y4'@;
put 'LmhrIiwiXHU2NTNmXHU1ZTljLmhrIiwiXHU2NTRlXHU4MGIyLmhrIiwiXHU2NTU5XHU4MGIyLmhrIiwiXHU3Yjg3XHU0ZWJhLmhrIiwiXHU3ZDQ0XHU3ZTU0LmhrIiwiXHU3ZDQ0XHU3ZWM3LmhrIiwiXHU3ZGIyXHU3ZDYxLmhrIiwiXHU3ZGIyXHU3ZWRjLmhrIiwiXHU3ZWM0XHU3ZTU0Lmhr'@;
put 'IiwiXHU3ZWM0XHU3ZWM3LmhrIiwiXHU3ZjUxXHU3ZDYxLmhrIiwiXHU3ZjUxXHU3ZWRjLmhrIiwiaG0iLCJobiIsImNvbS5obiIsImVkdS5obiIsImdvYi5obiIsIm1pbC5obiIsIm5ldC5obiIsIm9yZy5obiIsImhyIiwiY29tLmhyIiwiZnJvbS5ociIsIml6LmhyIiwibmFtZS5ociIsImh0'@;
put 'IiwiYWR1bHQuaHQiLCJhcnQuaHQiLCJhc3NvLmh0IiwiY29tLmh0IiwiY29vcC5odCIsImVkdS5odCIsImZpcm0uaHQiLCJnb3V2Lmh0IiwiaW5mby5odCIsIm1lZC5odCIsIm5ldC5odCIsIm9yZy5odCIsInBlcnNvLmh0IiwicG9sLmh0IiwicHJvLmh0IiwicmVsLmh0Iiwic2hvcC5odCIs'@;
put 'Imh1IiwiMjAwMC5odSIsImFncmFyLmh1IiwiYm9sdC5odSIsImNhc2luby5odSIsImNpdHkuaHUiLCJjby5odSIsImVyb3RpY2EuaHUiLCJlcm90aWthLmh1IiwiZmlsbS5odSIsImZvcnVtLmh1IiwiZ2FtZXMuaHUiLCJob3RlbC5odSIsImluZm8uaHUiLCJpbmdhdGxhbi5odSIsImpvZ2Fz'@;
put 'ei5odSIsImtvbnl2ZWxvLmh1IiwibGFrYXMuaHUiLCJtZWRpYS5odSIsIm5ld3MuaHUiLCJvcmcuaHUiLCJwcml2Lmh1IiwicmVrbGFtLmh1Iiwic2V4Lmh1Iiwic2hvcC5odSIsInNwb3J0Lmh1Iiwic3VsaS5odSIsInN6ZXguaHUiLCJ0bS5odSIsInRvenNkZS5odSIsInV0YXphcy5odSIs'@;
put 'InZpZGVvLmh1IiwiaWQiLCJhYy5pZCIsImJpei5pZCIsImNvLmlkIiwiZGVzYS5pZCIsImdvLmlkIiwibWlsLmlkIiwibXkuaWQiLCJuZXQuaWQiLCJvci5pZCIsInBvbnBlcy5pZCIsInNjaC5pZCIsIndlYi5pZCIsImllIiwiZ292LmllIiwiaWwiLCJhYy5pbCIsImNvLmlsIiwiZ292Lmls'@;
put 'IiwiaWRmLmlsIiwiazEyLmlsIiwibXVuaS5pbCIsIm5ldC5pbCIsIm9yZy5pbCIsIlx1MDVkOVx1MDVlOVx1MDVlOFx1MDVkMFx1MDVkYyIsIlx1MDVkMFx1MDVlN1x1MDVkM1x1MDVkZVx1MDVkOVx1MDVkNC5cdTA1ZDlcdTA1ZTlcdTA1ZThcdTA1ZDBcdTA1ZGMiLCJcdTA1ZDlcdTA1ZTlc'@;
put 'dTA1ZDVcdTA1ZDEuXHUwNWQ5XHUwNWU5XHUwNWU4XHUwNWQwXHUwNWRjIiwiXHUwNWU2XHUwNWQ0XHUwNWRjLlx1MDVkOVx1MDVlOVx1MDVlOFx1MDVkMFx1MDVkYyIsIlx1MDVkZVx1MDVkZVx1MDVlOVx1MDVkYy5cdTA1ZDlcdTA1ZTlcdTA1ZThcdTA1ZDBcdTA1ZGMiLCJpbSIsImFjLmlt'@;
put 'IiwiY28uaW0iLCJsdGQuY28uaW0iLCJwbGMuY28uaW0iLCJjb20uaW0iLCJuZXQuaW0iLCJvcmcuaW0iLCJ0dC5pbSIsInR2LmltIiwiaW4iLCI1Zy5pbiIsIjZnLmluIiwiYWMuaW4iLCJhaS5pbiIsImFtLmluIiwiYmloYXIuaW4iLCJiaXouaW4iLCJidXNpbmVzcy5pbiIsImNhLmluIiwi'@;
put 'Y24uaW4iLCJjby5pbiIsImNvbS5pbiIsImNvb3AuaW4iLCJjcy5pbiIsImRlbGhpLmluIiwiZHIuaW4iLCJlZHUuaW4iLCJlci5pbiIsImZpcm0uaW4iLCJnZW4uaW4iLCJnb3YuaW4iLCJndWphcmF0LmluIiwiaW5kLmluIiwiaW5mby5pbiIsImludC5pbiIsImludGVybmV0LmluIiwiaW8u'@;
put 'aW4iLCJtZS5pbiIsIm1pbC5pbiIsIm5ldC5pbiIsIm5pYy5pbiIsIm9yZy5pbiIsInBnLmluIiwicG9zdC5pbiIsInByby5pbiIsInJlcy5pbiIsInRyYXZlbC5pbiIsInR2LmluIiwidWsuaW4iLCJ1cC5pbiIsInVzLmluIiwiaW5mbyIsImludCIsImV1LmludCIsImlvIiwiY28uaW8iLCJj'@;
put 'b20uaW8iLCJlZHUuaW8iLCJnb3YuaW8iLCJtaWwuaW8iLCJuZXQuaW8iLCJub20uaW8iLCJvcmcuaW8iLCJpcSIsImNvbS5pcSIsImVkdS5pcSIsImdvdi5pcSIsIm1pbC5pcSIsIm5ldC5pcSIsIm9yZy5pcSIsImlyIiwiYWMuaXIiLCJjby5pciIsImdvdi5pciIsImlkLmlyIiwibmV0Lmly'@;
put 'Iiwib3JnLmlyIiwic2NoLmlyIiwiXHUwNjI3XHUwNmNjXHUwNjMxXHUwNjI3XHUwNjQ2LmlyIiwiXHUwNjI3XHUwNjRhXHUwNjMxXHUwNjI3XHUwNjQ2LmlyIiwiaXMiLCJpdCIsImVkdS5pdCIsImdvdi5pdCIsImFici5pdCIsImFicnV6em8uaXQiLCJhb3N0YS12YWxsZXkuaXQiLCJhb3N0'@;
put 'YXZhbGxleS5pdCIsImJhcy5pdCIsImJhc2lsaWNhdGEuaXQiLCJjYWwuaXQiLCJjYWxhYnJpYS5pdCIsImNhbS5pdCIsImNhbXBhbmlhLml0IiwiZW1pbGlhLXJvbWFnbmEuaXQiLCJlbWlsaWFyb21hZ25hLml0IiwiZW1yLml0IiwiZnJpdWxpLXYtZ2l1bGlhLml0IiwiZnJpdWxpLXZlLWdp'@;
put 'dWxpYS5pdCIsImZyaXVsaS12ZWdpdWxpYS5pdCIsImZyaXVsaS12ZW5lemlhLWdpdWxpYS5pdCIsImZyaXVsaS12ZW5lemlhZ2l1bGlhLml0IiwiZnJpdWxpLXZnaXVsaWEuaXQiLCJmcml1bGl2LWdpdWxpYS5pdCIsImZyaXVsaXZlLWdpdWxpYS5pdCIsImZyaXVsaXZlZ2l1bGlhLml0Iiwi'@;
put 'ZnJpdWxpdmVuZXppYS1naXVsaWEuaXQiLCJmcml1bGl2ZW5lemlhZ2l1bGlhLml0IiwiZnJpdWxpdmdpdWxpYS5pdCIsImZ2Zy5pdCIsImxhei5pdCIsImxhemlvLml0IiwibGlnLml0IiwibGlndXJpYS5pdCIsImxvbS5pdCIsImxvbWJhcmRpYS5pdCIsImxvbWJhcmR5Lml0IiwibHVjYW5p'@;
put 'YS5pdCIsIm1hci5pdCIsIm1hcmNoZS5pdCIsIm1vbC5pdCIsIm1vbGlzZS5pdCIsInBpZWRtb250Lml0IiwicGllbW9udGUuaXQiLCJwbW4uaXQiLCJwdWcuaXQiLCJwdWdsaWEuaXQiLCJzYXIuaXQiLCJzYXJkZWduYS5pdCIsInNhcmRpbmlhLml0Iiwic2ljLml0Iiwic2ljaWxpYS5pdCIs'@;
put 'InNpY2lseS5pdCIsInRhYS5pdCIsInRvcy5pdCIsInRvc2NhbmEuaXQiLCJ0cmVudGluLXN1ZC10aXJvbC5pdCIsInRyZW50aW4tc1x4ZmNkLXRpcm9sLml0IiwidHJlbnRpbi1zdWR0aXJvbC5pdCIsInRyZW50aW4tc1x4ZmNkdGlyb2wuaXQiLCJ0cmVudGluLXN1ZWQtdGlyb2wuaXQiLCJ0'@;
put 'cmVudGluLXN1ZWR0aXJvbC5pdCIsInRyZW50aW5vLml0IiwidHJlbnRpbm8tYS1hZGlnZS5pdCIsInRyZW50aW5vLWFhZGlnZS5pdCIsInRyZW50aW5vLWFsdG8tYWRpZ2UuaXQiLCJ0cmVudGluby1hbHRvYWRpZ2UuaXQiLCJ0cmVudGluby1zLXRpcm9sLml0IiwidHJlbnRpbm8tc3Rpcm9s'@;
put 'Lml0IiwidHJlbnRpbm8tc3VkLXRpcm9sLml0IiwidHJlbnRpbm8tc1x4ZmNkLXRpcm9sLml0IiwidHJlbnRpbm8tc3VkdGlyb2wuaXQiLCJ0cmVudGluby1zXHhmY2R0aXJvbC5pdCIsInRyZW50aW5vLXN1ZWQtdGlyb2wuaXQiLCJ0cmVudGluby1zdWVkdGlyb2wuaXQiLCJ0cmVudGlub2Et'@;
put 'YWRpZ2UuaXQiLCJ0cmVudGlub2FhZGlnZS5pdCIsInRyZW50aW5vYWx0by1hZGlnZS5pdCIsInRyZW50aW5vYWx0b2FkaWdlLml0IiwidHJlbnRpbm9zLXRpcm9sLml0IiwidHJlbnRpbm9zdGlyb2wuaXQiLCJ0cmVudGlub3N1ZC10aXJvbC5pdCIsInRyZW50aW5vc1x4ZmNkLXRpcm9sLml0'@;
put 'IiwidHJlbnRpbm9zdWR0aXJvbC5pdCIsInRyZW50aW5vc1x4ZmNkdGlyb2wuaXQiLCJ0cmVudGlub3N1ZWQtdGlyb2wuaXQiLCJ0cmVudGlub3N1ZWR0aXJvbC5pdCIsInRyZW50aW5zdWQtdGlyb2wuaXQiLCJ0cmVudGluc1x4ZmNkLXRpcm9sLml0IiwidHJlbnRpbnN1ZHRpcm9sLml0Iiwi'@;
put 'dHJlbnRpbnNceGZjZHRpcm9sLml0IiwidHJlbnRpbnN1ZWQtdGlyb2wuaXQiLCJ0cmVudGluc3VlZHRpcm9sLml0IiwidHVzY2FueS5pdCIsInVtYi5pdCIsInVtYnJpYS5pdCIsInZhbC1kLWFvc3RhLml0IiwidmFsLWRhb3N0YS5pdCIsInZhbGQtYW9zdGEuaXQiLCJ2YWxkYW9zdGEuaXQi'@;
put 'LCJ2YWxsZS1hb3N0YS5pdCIsInZhbGxlLWQtYW9zdGEuaXQiLCJ2YWxsZS1kYW9zdGEuaXQiLCJ2YWxsZWFvc3RhLml0IiwidmFsbGVkLWFvc3RhLml0IiwidmFsbGVkYW9zdGEuaXQiLCJ2YWxsZWUtYW9zdGUuaXQiLCJ2YWxsXHhlOWUtYW9zdGUuaXQiLCJ2YWxsZWUtZC1hb3N0ZS5pdCIs'@;
put 'InZhbGxceGU5ZS1kLWFvc3RlLml0IiwidmFsbGVlYW9zdGUuaXQiLCJ2YWxsXHhlOWVhb3N0ZS5pdCIsInZhbGxlZWRhb3N0ZS5pdCIsInZhbGxceGU5ZWRhb3N0ZS5pdCIsInZhby5pdCIsInZkYS5pdCIsInZlbi5pdCIsInZlbmV0by5pdCIsImFnLml0IiwiYWdyaWdlbnRvLml0IiwiYWwu'@;
put 'aXQiLCJhbGVzc2FuZHJpYS5pdCIsImFsdG8tYWRpZ2UuaXQiLCJhbHRvYWRpZ2UuaXQiLCJhbi5pdCIsImFuY29uYS5pdCIsImFuZHJpYS1iYXJsZXR0YS10cmFuaS5pdCIsImFuZHJpYS10cmFuaS1iYXJsZXR0YS5pdCIsImFuZHJpYWJhcmxldHRhdHJhbmkuaXQiLCJhbmRyaWF0cmFuaWJh'@;
put 'cmxldHRhLml0IiwiYW8uaXQiLCJhb3N0YS5pdCIsImFvc3RlLml0IiwiYXAuaXQiLCJhcS5pdCIsImFxdWlsYS5pdCIsImFyLml0IiwiYXJlenpvLml0IiwiYXNjb2xpLXBpY2Vuby5pdCIsImFzY29saXBpY2Vuby5pdCIsImFzdGkuaXQiLCJhdC5pdCIsImF2Lml0IiwiYXZlbGxpbm8uaXQi'@;
put 'LCJiYS5pdCIsImJhbHNhbi5pdCIsImJhbHNhbi1zdWR0aXJvbC5pdCIsImJhbHNhbi1zXHhmY2R0aXJvbC5pdCIsImJhbHNhbi1zdWVkdGlyb2wuaXQiLCJiYXJpLml0IiwiYmFybGV0dGEtdHJhbmktYW5kcmlhLml0IiwiYmFybGV0dGF0cmFuaWFuZHJpYS5pdCIsImJlbGx1bm8uaXQiLCJi'@;
put 'ZW5ldmVudG8uaXQiLCJiZXJnYW1vLml0IiwiYmcuaXQiLCJiaS5pdCIsImJpZWxsYS5pdCIsImJsLml0IiwiYm4uaXQiLCJiby5pdCIsImJvbG9nbmEuaXQiLCJib2x6YW5vLml0IiwiYm9semFuby1hbHRvYWRpZ2UuaXQiLCJib3plbi5pdCIsImJvemVuLXN1ZHRpcm9sLml0IiwiYm96ZW4t'@;
put 'c1x4ZmNkdGlyb2wuaXQiLCJib3plbi1zdWVkdGlyb2wuaXQiLCJici5pdCIsImJyZXNjaWEuaXQiLCJicmluZGlzaS5pdCIsImJzLml0IiwiYnQuaXQiLCJidWxzYW4uaXQiLCJidWxzYW4tc3VkdGlyb2wuaXQiLCJidWxzYW4tc1x4ZmNkdGlyb2wuaXQiLCJidWxzYW4tc3VlZHRpcm9sLml0'@;
put 'IiwiYnouaXQiLCJjYS5pdCIsImNhZ2xpYXJpLml0IiwiY2FsdGFuaXNzZXR0YS5pdCIsImNhbXBpZGFuby1tZWRpby5pdCIsImNhbXBpZGFub21lZGlvLml0IiwiY2FtcG9iYXNzby5pdCIsImNhcmJvbmlhLWlnbGVzaWFzLml0IiwiY2FyYm9uaWFpZ2xlc2lhcy5pdCIsImNhcnJhcmEtbWFz'@;
put 'c2EuaXQiLCJjYXJyYXJhbWFzc2EuaXQiLCJjYXNlcnRhLml0IiwiY2F0YW5pYS5pdCIsImNhdGFuemFyby5pdCIsImNiLml0IiwiY2UuaXQiLCJjZXNlbmEtZm9ybGkuaXQiLCJjZXNlbmEtZm9ybFx4ZWMuaXQiLCJjZXNlbmFmb3JsaS5pdCIsImNlc2VuYWZvcmxceGVjLml0IiwiY2guaXQi'@;
put 'LCJjaGlldGkuaXQiLCJjaS5pdCIsImNsLml0IiwiY24uaXQiLCJjby5pdCIsImNvbW8uaXQiLCJjb3NlbnphLml0IiwiY3IuaXQiLCJjcmVtb25hLml0IiwiY3JvdG9uZS5pdCIsImNzLml0IiwiY3QuaXQiLCJjdW5lby5pdCIsImN6Lml0IiwiZGVsbC1vZ2xpYXN0cmEuaXQiLCJkZWxsb2ds'@;
put 'aWFzdHJhLml0IiwiZW4uaXQiLCJlbm5hLml0IiwiZmMuaXQiLCJmZS5pdCIsImZlcm1vLml0IiwiZmVycmFyYS5pdCIsImZnLml0IiwiZmkuaXQiLCJmaXJlbnplLml0IiwiZmxvcmVuY2UuaXQiLCJmbS5pdCIsImZvZ2dpYS5pdCIsImZvcmxpLWNlc2VuYS5pdCIsImZvcmxceGVjLWNlc2Vu'@;
put 'YS5pdCIsImZvcmxpY2VzZW5hLml0IiwiZm9ybFx4ZWNjZXNlbmEuaXQiLCJmci5pdCIsImZyb3Npbm9uZS5pdCIsImdlLml0IiwiZ2Vub2EuaXQiLCJnZW5vdmEuaXQiLCJnby5pdCIsImdvcml6aWEuaXQiLCJnci5pdCIsImdyb3NzZXRvLml0IiwiaWdsZXNpYXMtY2FyYm9uaWEuaXQiLCJp'@;
put 'Z2xlc2lhc2NhcmJvbmlhLml0IiwiaW0uaXQiLCJpbXBlcmlhLml0IiwiaXMuaXQiLCJpc2VybmlhLml0Iiwia3IuaXQiLCJsYS1zcGV6aWEuaXQiLCJsYXF1aWxhLml0IiwibGFzcGV6aWEuaXQiLCJsYXRpbmEuaXQiLCJsYy5pdCIsImxlLml0IiwibGVjY2UuaXQiLCJsZWNjby5pdCIsImxp'@;
put 'Lml0IiwibGl2b3Juby5pdCIsImxvLml0IiwibG9kaS5pdCIsImx0Lml0IiwibHUuaXQiLCJsdWNjYS5pdCIsIm1hY2VyYXRhLml0IiwibWFudG92YS5pdCIsIm1hc3NhLWNhcnJhcmEuaXQiLCJtYXNzYWNhcnJhcmEuaXQiLCJtYXRlcmEuaXQiLCJtYi5pdCIsIm1jLml0IiwibWUuaXQiLCJt'@;
put 'ZWRpby1jYW1waWRhbm8uaXQiLCJtZWRpb2NhbXBpZGFuby5pdCIsIm1lc3NpbmEuaXQiLCJtaS5pdCIsIm1pbGFuLml0IiwibWlsYW5vLml0IiwibW4uaXQiLCJtby5pdCIsIm1vZGVuYS5pdCIsIm1vbnphLml0IiwibW9uemEtYnJpYW56YS5pdCIsIm1vbnphLWUtZGVsbGEtYnJpYW56YS5p'@;
put 'dCIsIm1vbnphYnJpYW56YS5pdCIsIm1vbnphZWJyaWFuemEuaXQiLCJtb256YWVkZWxsYWJyaWFuemEuaXQiLCJtcy5pdCIsIm10Lml0IiwibmEuaXQiLCJuYXBsZXMuaXQiLCJuYXBvbGkuaXQiLCJuby5pdCIsIm5vdmFyYS5pdCIsIm51Lml0IiwibnVvcm8uaXQiLCJvZy5pdCIsIm9nbGlh'@;
put 'c3RyYS5pdCIsIm9sYmlhLXRlbXBpby5pdCIsIm9sYmlhdGVtcGlvLml0Iiwib3IuaXQiLCJvcmlzdGFuby5pdCIsIm90Lml0IiwicGEuaXQiLCJwYWRvdmEuaXQiLCJwYWR1YS5pdCIsInBhbGVybW8uaXQiLCJwYXJtYS5pdCIsInBhdmlhLml0IiwicGMuaXQiLCJwZC5pdCIsInBlLml0Iiwi'@;
put 'cGVydWdpYS5pdCIsInBlc2Fyby11cmJpbm8uaXQiLCJwZXNhcm91cmJpbm8uaXQiLCJwZXNjYXJhLml0IiwicGcuaXQiLCJwaS5pdCIsInBpYWNlbnphLml0IiwicGlzYS5pdCIsInBpc3RvaWEuaXQiLCJwbi5pdCIsInBvLml0IiwicG9yZGVub25lLml0IiwicG90ZW56YS5pdCIsInByLml0'@;
put 'IiwicHJhdG8uaXQiLCJwdC5pdCIsInB1Lml0IiwicHYuaXQiLCJwei5pdCIsInJhLml0IiwicmFndXNhLml0IiwicmF2ZW5uYS5pdCIsInJjLml0IiwicmUuaXQiLCJyZWdnaW8tY2FsYWJyaWEuaXQiLCJyZWdnaW8tZW1pbGlhLml0IiwicmVnZ2lvY2FsYWJyaWEuaXQiLCJyZWdnaW9lbWls'@;
put 'aWEuaXQiLCJyZy5pdCIsInJpLml0IiwicmlldGkuaXQiLCJyaW1pbmkuaXQiLCJybS5pdCIsInJuLml0Iiwicm8uaXQiLCJyb21hLml0Iiwicm9tZS5pdCIsInJvdmlnby5pdCIsInNhLml0Iiwic2FsZXJuby5pdCIsInNhc3NhcmkuaXQiLCJzYXZvbmEuaXQiLCJzaS5pdCIsInNpZW5hLml0'@;
put 'Iiwic2lyYWN1c2EuaXQiLCJzby5pdCIsInNvbmRyaW8uaXQiLCJzcC5pdCIsInNyLml0Iiwic3MuaXQiLCJzXHhmY2R0aXJvbC5pdCIsInN1ZWR0aXJvbC5pdCIsInN2Lml0IiwidGEuaXQiLCJ0YXJhbnRvLml0IiwidGUuaXQiLCJ0ZW1waW8tb2xiaWEuaXQiLCJ0ZW1waW9vbGJpYS5pdCIs'@;
put 'InRlcmFtby5pdCIsInRlcm5pLml0IiwidG4uaXQiLCJ0by5pdCIsInRvcmluby5pdCIsInRwLml0IiwidHIuaXQiLCJ0cmFuaS1hbmRyaWEtYmFybGV0dGEuaXQiLCJ0cmFuaS1iYXJsZXR0YS1hbmRyaWEuaXQiLCJ0cmFuaWFuZHJpYWJhcmxldHRhLml0IiwidHJhbmliYXJsZXR0YWFuZHJp'@;
put 'YS5pdCIsInRyYXBhbmkuaXQiLCJ0cmVudG8uaXQiLCJ0cmV2aXNvLml0IiwidHJpZXN0ZS5pdCIsInRzLml0IiwidHVyaW4uaXQiLCJ0di5pdCIsInVkLml0IiwidWRpbmUuaXQiLCJ1cmJpbm8tcGVzYXJvLml0IiwidXJiaW5vcGVzYXJvLml0IiwidmEuaXQiLCJ2YXJlc2UuaXQiLCJ2Yi5p'@;
put 'dCIsInZjLml0IiwidmUuaXQiLCJ2ZW5lemlhLml0IiwidmVuaWNlLml0IiwidmVyYmFuaWEuaXQiLCJ2ZXJjZWxsaS5pdCIsInZlcm9uYS5pdCIsInZpLml0Iiwidmliby12YWxlbnRpYS5pdCIsInZpYm92YWxlbnRpYS5pdCIsInZpY2VuemEuaXQiLCJ2aXRlcmJvLml0IiwidnIuaXQiLCJ2'@;
put 'cy5pdCIsInZ0Lml0IiwidnYuaXQiLCJqZSIsImNvLmplIiwibmV0LmplIiwib3JnLmplIiwiKi5qbSIsImpvIiwiYWdyaS5qbyIsImFpLmpvIiwiY29tLmpvIiwiZWR1LmpvIiwiZW5nLmpvIiwiZm0uam8iLCJnb3Yuam8iLCJtaWwuam8iLCJuZXQuam8iLCJvcmcuam8iLCJwZXIuam8iLCJw'@;
put 'aGQuam8iLCJzY2guam8iLCJ0di5qbyIsImpvYnMiLCJqcCIsImFjLmpwIiwiYWQuanAiLCJjby5qcCIsImVkLmpwIiwiZ28uanAiLCJnci5qcCIsImxnLmpwIiwibmUuanAiLCJvci5qcCIsImFpY2hpLmpwIiwiYWtpdGEuanAiLCJhb21vcmkuanAiLCJjaGliYS5qcCIsImVoaW1lLmpwIiwi'@;
put 'ZnVrdWkuanAiLCJmdWt1b2thLmpwIiwiZnVrdXNoaW1hLmpwIiwiZ2lmdS5qcCIsImd1bm1hLmpwIiwiaGlyb3NoaW1hLmpwIiwiaG9ra2FpZG8uanAiLCJoeW9nby5qcCIsImliYXJha2kuanAiLCJpc2hpa2F3YS5qcCIsIml3YXRlLmpwIiwia2FnYXdhLmpwIiwia2Fnb3NoaW1hLmpwIiwi'@;
put 'a2FuYWdhd2EuanAiLCJrb2NoaS5qcCIsImt1bWFtb3RvLmpwIiwia3lvdG8uanAiLCJtaWUuanAiLCJtaXlhZ2kuanAiLCJtaXlhemFraS5qcCIsIm5hZ2Fuby5qcCIsIm5hZ2FzYWtpLmpwIiwibmFyYS5qcCIsIm5paWdhdGEuanAiLCJvaXRhLmpwIiwib2theWFtYS5qcCIsIm9raW5hd2Eu'@;
put 'anAiLCJvc2FrYS5qcCIsInNhZ2EuanAiLCJzYWl0YW1hLmpwIiwic2hpZ2EuanAiLCJzaGltYW5lLmpwIiwic2hpenVva2EuanAiLCJ0b2NoaWdpLmpwIiwidG9rdXNoaW1hLmpwIiwidG9reW8uanAiLCJ0b3R0b3JpLmpwIiwidG95YW1hLmpwIiwid2FrYXlhbWEuanAiLCJ5YW1hZ2F0YS5q'@;
put 'cCIsInlhbWFndWNoaS5qcCIsInlhbWFuYXNoaS5qcCIsIlx1NGUwOVx1OTFjZC5qcCIsIlx1NGVhY1x1OTBmZC5qcCIsIlx1NGY1MFx1OGNjMC5qcCIsIlx1NTE3NVx1NWVhYi5qcCIsIlx1NTMxN1x1NmQ3N1x1OTA1My5qcCIsIlx1NTM0M1x1ODQ0OS5qcCIsIlx1NTQ4Y1x1NmI0Y1x1NWM3'@;
put 'MS5qcCIsIlx1NTdmY1x1NzM4OS5qcCIsIlx1NTkyN1x1NTIwNi5qcCIsIlx1NTkyN1x1OTYyYS5qcCIsIlx1NTk0OFx1ODI2Zi5qcCIsIlx1NWJhZVx1NTdjZS5qcCIsIlx1NWJhZVx1NWQwZS5qcCIsIlx1NWJjY1x1NWM3MS5qcCIsIlx1NWM3MVx1NTNlMy5qcCIsIlx1NWM3MVx1NWY2Mi5q'@;
put 'cCIsIlx1NWM3MVx1NjhhOC5qcCIsIlx1NWM5MFx1OTYxYy5qcCIsIlx1NWNhMVx1NWM3MS5qcCIsIlx1NWNhOVx1NjI0Yi5qcCIsIlx1NWNmNlx1NjgzOS5qcCIsIlx1NWU4M1x1NWNmNi5qcCIsIlx1NWZiM1x1NWNmNi5qcCIsIlx1NjExYlx1NWE5Yi5qcCIsIlx1NjExYlx1NzdlNS5qcCIs'@;
put 'Ilx1NjViMFx1NmY1Zi5qcCIsIlx1Njc3MVx1NGVhYy5qcCIsIlx1NjgwM1x1NjcyOC5qcCIsIlx1NmM5Nlx1N2UwNC5qcCIsIlx1NmVjYlx1OGNjMC5qcCIsIlx1NzE4YVx1NjcyYy5qcCIsIlx1NzdmM1x1NWRkZC5qcCIsIlx1Nzk1ZVx1NTk0OFx1NWRkZC5qcCIsIlx1Nzk4Zlx1NGU5NS5q'@;
put 'cCIsIlx1Nzk4Zlx1NWNhMS5qcCIsIlx1Nzk4Zlx1NWNmNi5qcCIsIlx1NzljYlx1NzUzMC5qcCIsIlx1N2ZhNFx1OTlhYy5qcCIsIlx1ODMyOFx1NTdjZS5qcCIsIlx1OTU3N1x1NWQwZS5qcCIsIlx1OTU3N1x1OTFjZS5qcCIsIlx1OTc1Mlx1NjhlZS5qcCIsIlx1OTc1OVx1NWNhMS5qcCIs'@;
put 'Ilx1OTk5OVx1NWRkZC5qcCIsIlx1OWFkOFx1NzdlNS5qcCIsIlx1OWNlNVx1NTNkNi5qcCIsIlx1OWU3Zlx1NTE1MFx1NWNmNi5qcCIsIioua2F3YXNha2kuanAiLCIhY2l0eS5rYXdhc2FraS5qcCIsIioua2l0YWt5dXNodS5qcCIsIiFjaXR5LmtpdGFreXVzaHUuanAiLCIqLmtvYmUuanAi'@;
put 'LCIhY2l0eS5rb2JlLmpwIiwiKi5uYWdveWEuanAiLCIhY2l0eS5uYWdveWEuanAiLCIqLnNhcHBvcm8uanAiLCIhY2l0eS5zYXBwb3JvLmpwIiwiKi5zZW5kYWkuanAiLCIhY2l0eS5zZW5kYWkuanAiLCIqLnlva29oYW1hLmpwIiwiIWNpdHkueW9rb2hhbWEuanAiLCJhaXNhaS5haWNoaS5q'@;
put 'cCIsImFtYS5haWNoaS5qcCIsImFuam8uYWljaGkuanAiLCJhc3VrZS5haWNoaS5qcCIsImNoaXJ5dS5haWNoaS5qcCIsImNoaXRhLmFpY2hpLmpwIiwiZnVzby5haWNoaS5qcCIsImdhbWFnb3JpLmFpY2hpLmpwIiwiaGFuZGEuYWljaGkuanAiLCJoYXp1LmFpY2hpLmpwIiwiaGVraW5hbi5h'@;
put 'aWNoaS5qcCIsImhpZ2FzaGl1cmEuYWljaGkuanAiLCJpY2hpbm9taXlhLmFpY2hpLmpwIiwiaW5hemF3YS5haWNoaS5qcCIsImludXlhbWEuYWljaGkuanAiLCJpc3NoaWtpLmFpY2hpLmpwIiwiaXdha3VyYS5haWNoaS5qcCIsImthbmllLmFpY2hpLmpwIiwia2FyaXlhLmFpY2hpLmpwIiwi'@;
put 'a2FzdWdhaS5haWNoaS5qcCIsImtpcmEuYWljaGkuanAiLCJraXlvc3UuYWljaGkuanAiLCJrb21ha2kuYWljaGkuanAiLCJrb25hbi5haWNoaS5qcCIsImtvdGEuYWljaGkuanAiLCJtaWhhbWEuYWljaGkuanAiLCJtaXlvc2hpLmFpY2hpLmpwIiwibmlzaGlvLmFpY2hpLmpwIiwibmlzc2hp'@;
put 'bi5haWNoaS5qcCIsIm9idS5haWNoaS5qcCIsIm9ndWNoaS5haWNoaS5qcCIsIm9oYXJ1LmFpY2hpLmpwIiwib2themFraS5haWNoaS5qcCIsIm93YXJpYXNhaGkuYWljaGkuanAiLCJzZXRvLmFpY2hpLmpwIiwic2hpa2F0c3UuYWljaGkuanAiLCJzaGluc2hpcm8uYWljaGkuanAiLCJzaGl0'@;
put 'YXJhLmFpY2hpLmpwIiwidGFoYXJhLmFpY2hpLmpwIiwidGFrYWhhbWEuYWljaGkuanAiLCJ0b2Jpc2hpbWEuYWljaGkuanAiLCJ0b2VpLmFpY2hpLmpwIiwidG9nby5haWNoaS5qcCIsInRva2FpLmFpY2hpLmpwIiwidG9rb25hbWUuYWljaGkuanAiLCJ0b3lvYWtlLmFpY2hpLmpwIiwidG95'@;
put 'b2hhc2hpLmFpY2hpLmpwIiwidG95b2thd2EuYWljaGkuanAiLCJ0b3lvbmUuYWljaGkuanAiLCJ0b3lvdGEuYWljaGkuanAiLCJ0c3VzaGltYS5haWNoaS5qcCIsInlhdG9taS5haWNoaS5qcCIsImFraXRhLmFraXRhLmpwIiwiZGFpc2VuLmFraXRhLmpwIiwiZnVqaXNhdG8uYWtpdGEuanAi'@;
put 'LCJnb2pvbWUuYWtpdGEuanAiLCJoYWNoaXJvZ2F0YS5ha2l0YS5qcCIsImhhcHBvdS5ha2l0YS5qcCIsImhpZ2FzaGluYXJ1c2UuYWtpdGEuanAiLCJob25qby5ha2l0YS5qcCIsImhvbmp5by5ha2l0YS5qcCIsImlrYXdhLmFraXRhLmpwIiwia2FtaWtvYW5pLmFraXRhLmpwIiwia2FtaW9r'@;
put 'YS5ha2l0YS5qcCIsImthdGFnYW1pLmFraXRhLmpwIiwia2F6dW5vLmFraXRhLmpwIiwia2l0YWFraXRhLmFraXRhLmpwIiwia29zYWthLmFraXRhLmpwIiwia3lvd2EuYWtpdGEuanAiLCJtaXNhdG8uYWtpdGEuanAiLCJtaXRhbmUuYWtpdGEuanAiLCJtb3JpeW9zaGkuYWtpdGEuanAiLCJu'@;
put 'aWthaG8uYWtpdGEuanAiLCJub3NoaXJvLmFraXRhLmpwIiwib2RhdGUuYWtpdGEuanAiLCJvZ2EuYWtpdGEuanAiLCJvZ2F0YS5ha2l0YS5qcCIsInNlbWJva3UuYWtpdGEuanAiLCJ5b2tvdGUuYWtpdGEuanAiLCJ5dXJpaG9uam8uYWtpdGEuanAiLCJhb21vcmkuYW9tb3JpLmpwIiwiZ29u'@;
put 'b2hlLmFvbW9yaS5qcCIsImhhY2hpbm9oZS5hb21vcmkuanAiLCJoYXNoaWthbWkuYW9tb3JpLmpwIiwiaGlyYW5haS5hb21vcmkuanAiLCJoaXJvc2FraS5hb21vcmkuanAiLCJpdGF5YW5hZ2kuYW9tb3JpLmpwIiwia3Vyb2lzaGkuYW9tb3JpLmpwIiwibWlzYXdhLmFvbW9yaS5qcCIsIm11'@;
put 'dHN1LmFvbW9yaS5qcCIsIm5ha2Fkb21hcmkuYW9tb3JpLmpwIiwibm9oZWppLmFvbW9yaS5qcCIsIm9pcmFzZS5hb21vcmkuanAiLCJvd2FuaS5hb21vcmkuanAiLCJyb2t1bm9oZS5hb21vcmkuanAiLCJzYW5ub2hlLmFvbW9yaS5qcCIsInNoaWNoaW5vaGUuYW9tb3JpLmpwIiwic2hpbmdv'@;
put 'LmFvbW9yaS5qcCIsInRha2tvLmFvbW9yaS5qcCIsInRvd2FkYS5hb21vcmkuanAiLCJ0c3VnYXJ1LmFvbW9yaS5qcCIsInRzdXJ1dGEuYW9tb3JpLmpwIiwiYWJpa28uY2hpYmEuanAiLCJhc2FoaS5jaGliYS5qcCIsImNob25hbi5jaGliYS5qcCIsImNob3NlaS5jaGliYS5qcCIsImNob3No'@;
put 'aS5jaGliYS5qcCIsImNodW8uY2hpYmEuanAiLCJmdW5hYmFzaGkuY2hpYmEuanAiLCJmdXR0c3UuY2hpYmEuanAiLCJoYW5hbWlnYXdhLmNoaWJhLmpwIiwiaWNoaWhhcmEuY2hpYmEuanAiLCJpY2hpa2F3YS5jaGliYS5qcCIsImljaGlub21peWEuY2hpYmEuanAiLCJpbnphaS5jaGliYS5q'@;
put 'cCIsImlzdW1pLmNoaWJhLmpwIiwia2FtYWdheWEuY2hpYmEuanAiLCJrYW1vZ2F3YS5jaGliYS5qcCIsImthc2hpd2EuY2hpYmEuanAiLCJrYXRvcmkuY2hpYmEuanAiLCJrYXRzdXVyYS5jaGliYS5qcCIsImtpbWl0c3UuY2hpYmEuanAiLCJraXNhcmF6dS5jaGliYS5qcCIsImtvemFraS5j'@;
put 'aGliYS5qcCIsImt1anVrdXJpLmNoaWJhLmpwIiwia3lvbmFuLmNoaWJhLmpwIiwibWF0c3Vkby5jaGliYS5qcCIsIm1pZG9yaS5jaGliYS5qcCIsIm1paGFtYS5jaGliYS5qcCIsIm1pbmFtaWJvc28uY2hpYmEuanAiLCJtb2JhcmEuY2hpYmEuanAiLCJtdXRzdXphd2EuY2hpYmEuanAiLCJu'@;
put 'YWdhcmEuY2hpYmEuanAiLCJuYWdhcmV5YW1hLmNoaWJhLmpwIiwibmFyYXNoaW5vLmNoaWJhLmpwIiwibmFyaXRhLmNoaWJhLmpwIiwibm9kYS5jaGliYS5qcCIsIm9hbWlzaGlyYXNhdG8uY2hpYmEuanAiLCJvbWlnYXdhLmNoaWJhLmpwIiwib25qdWt1LmNoaWJhLmpwIiwib3Rha2kuY2hp'@;
put 'YmEuanAiLCJzYWthZS5jaGliYS5qcCIsInNha3VyYS5jaGliYS5qcCIsInNoaW1vZnVzYS5jaGliYS5qcCIsInNoaXJha28uY2hpYmEuanAiLCJzaGlyb2kuY2hpYmEuanAiLCJzaGlzdWkuY2hpYmEuanAiLCJzb2RlZ2F1cmEuY2hpYmEuanAiLCJzb3NhLmNoaWJhLmpwIiwidGFrby5jaGli'@;
put 'YS5qcCIsInRhdGV5YW1hLmNoaWJhLmpwIiwidG9nYW5lLmNoaWJhLmpwIiwidG9obm9zaG8uY2hpYmEuanAiLCJ0b21pc2F0by5jaGliYS5qcCIsInVyYXlhc3UuY2hpYmEuanAiLCJ5YWNoaW1hdGEuY2hpYmEuanAiLCJ5YWNoaXlvLmNoaWJhLmpwIiwieW9rYWljaGliYS5jaGliYS5qcCIs'@;
put 'Inlva29zaGliYWhpa2FyaS5jaGliYS5qcCIsInlvdHN1a2FpZG8uY2hpYmEuanAiLCJhaW5hbi5laGltZS5qcCIsImhvbmFpLmVoaW1lLmpwIiwiaWthdGEuZWhpbWUuanAiLCJpbWFiYXJpLmVoaW1lLmpwIiwiaXlvLmVoaW1lLmpwIiwia2FtaWppbWEuZWhpbWUuanAiLCJraWhva3UuZWhp'@;
put 'bWUuanAiLCJrdW1ha29nZW4uZWhpbWUuanAiLCJtYXNha2kuZWhpbWUuanAiLCJtYXRzdW5vLmVoaW1lLmpwIiwibWF0c3V5YW1hLmVoaW1lLmpwIiwibmFtaWthdGEuZWhpbWUuanAiLCJuaWloYW1hLmVoaW1lLmpwIiwib3p1LmVoaW1lLmpwIiwic2Fpam8uZWhpbWUuanAiLCJzZWl5by5l'@;
put 'aGltZS5qcCIsInNoaWtva3VjaHVvLmVoaW1lLmpwIiwidG9iZS5laGltZS5qcCIsInRvb24uZWhpbWUuanAiLCJ1Y2hpa28uZWhpbWUuanAiLCJ1d2FqaW1hLmVoaW1lLmpwIiwieWF3YXRhaGFtYS5laGltZS5qcCIsImVjaGl6ZW4uZnVrdWkuanAiLCJlaWhlaWppLmZ1a3VpLmpwIiwiZnVr'@;
put 'dWkuZnVrdWkuanAiLCJpa2VkYS5mdWt1aS5qcCIsImthdHN1eWFtYS5mdWt1aS5qcCIsIm1paGFtYS5mdWt1aS5qcCIsIm1pbmFtaWVjaGl6ZW4uZnVrdWkuanAiLCJvYmFtYS5mdWt1aS5qcCIsIm9oaS5mdWt1aS5qcCIsIm9uby5mdWt1aS5qcCIsInNhYmFlLmZ1a3VpLmpwIiwic2FrYWku'@;
put 'ZnVrdWkuanAiLCJ0YWthaGFtYS5mdWt1aS5qcCIsInRzdXJ1Z2EuZnVrdWkuanAiLCJ3YWthc2EuZnVrdWkuanAiLCJhc2hpeWEuZnVrdW9rYS5qcCIsImJ1emVuLmZ1a3Vva2EuanAiLCJjaGlrdWdvLmZ1a3Vva2EuanAiLCJjaGlrdWhvLmZ1a3Vva2EuanAiLCJjaGlrdWpvLmZ1a3Vva2Eu'@;
put 'anAiLCJjaGlrdXNoaW5vLmZ1a3Vva2EuanAiLCJjaGlrdXplbi5mdWt1b2thLmpwIiwiY2h1by5mdWt1b2thLmpwIiwiZGF6YWlmdS5mdWt1b2thLmpwIiwiZnVrdWNoaS5mdWt1b2thLmpwIiwiaGFrYXRhLmZ1a3Vva2EuanAiLCJoaWdhc2hpLmZ1a3Vva2EuanAiLCJoaXJva2F3YS5mdWt1'@;
put 'b2thLmpwIiwiaGlzYXlhbWEuZnVrdW9rYS5qcCIsImlpenVrYS5mdWt1b2thLmpwIiwiaW5hdHN1a2kuZnVrdW9rYS5qcCIsImthaG8uZnVrdW9rYS5qcCIsImthc3VnYS5mdWt1b2thLmpwIiwia2FzdXlhLmZ1a3Vva2EuanAiLCJrYXdhcmEuZnVrdW9rYS5qcCIsImtlaXNlbi5mdWt1b2th'@;
put 'LmpwIiwia29nYS5mdWt1b2thLmpwIiwia3VyYXRlLmZ1a3Vva2EuanAiLCJrdXJvZ2kuZnVrdW9rYS5qcCIsImt1cnVtZS5mdWt1b2thLmpwIiwibWluYW1pLmZ1a3Vva2EuanAiLCJtaXlha28uZnVrdW9rYS5qcCIsIm1peWFtYS5mdWt1b2thLmpwIiwibWl5YXdha2EuZnVrdW9rYS5qcCIs'@;
put 'Im1penVtYWtpLmZ1a3Vva2EuanAiLCJtdW5ha2F0YS5mdWt1b2thLmpwIiwibmFrYWdhd2EuZnVrdW9rYS5qcCIsIm5ha2FtYS5mdWt1b2thLmpwIiwibmlzaGkuZnVrdW9rYS5qcCIsIm5vZ2F0YS5mdWt1b2thLmpwIiwib2dvcmkuZnVrdW9rYS5qcCIsIm9rYWdha2kuZnVrdW9rYS5qcCIs'@;
put 'Im9rYXdhLmZ1a3Vva2EuanAiLCJva2kuZnVrdW9rYS5qcCIsIm9tdXRhLmZ1a3Vva2EuanAiLCJvbmdhLmZ1a3Vva2EuanAiLCJvbm9qby5mdWt1b2thLmpwIiwib3RvLmZ1a3Vva2EuanAiLCJzYWlnYXdhLmZ1a3Vva2EuanAiLCJzYXNhZ3VyaS5mdWt1b2thLmpwIiwic2hpbmd1LmZ1a3Vv'@;
put 'a2EuanAiLCJzaGlueW9zaGl0b21pLmZ1a3Vva2EuanAiLCJzaG9uYWkuZnVrdW9rYS5qcCIsInNvZWRhLmZ1a3Vva2EuanAiLCJzdWUuZnVrdW9rYS5qcCIsInRhY2hpYXJhaS5mdWt1b2thLmpwIiwidGFnYXdhLmZ1a3Vva2EuanAiLCJ0YWthdGEuZnVrdW9rYS5qcCIsInRvaG8uZnVrdW9r'@;
put 'YS5qcCIsInRveW90c3UuZnVrdW9rYS5qcCIsInRzdWlraS5mdWt1b2thLmpwIiwidWtpaGEuZnVrdW9rYS5qcCIsInVtaS5mdWt1b2thLmpwIiwidXN1aS5mdWt1b2thLmpwIiwieWFtYWRhLmZ1a3Vva2EuanAiLCJ5YW1lLmZ1a3Vva2EuanAiLCJ5YW5hZ2F3YS5mdWt1b2thLmpwIiwieXVr'@;
put 'dWhhc2hpLmZ1a3Vva2EuanAiLCJhaXp1YmFuZ2UuZnVrdXNoaW1hLmpwIiwiYWl6dW1pc2F0by5mdWt1c2hpbWEuanAiLCJhaXp1d2FrYW1hdHN1LmZ1a3VzaGltYS5qcCIsImFzYWthd2EuZnVrdXNoaW1hLmpwIiwiYmFuZGFpLmZ1a3VzaGltYS5qcCIsImRhdGUuZnVrdXNoaW1hLmpwIiwi'@;
put 'ZnVrdXNoaW1hLmZ1a3VzaGltYS5qcCIsImZ1cnVkb25vLmZ1a3VzaGltYS5qcCIsImZ1dGFiYS5mdWt1c2hpbWEuanAiLCJoYW5hd2EuZnVrdXNoaW1hLmpwIiwiaGlnYXNoaS5mdWt1c2hpbWEuanAiLCJoaXJhdGEuZnVrdXNoaW1hLmpwIiwiaGlyb25vLmZ1a3VzaGltYS5qcCIsImlpdGF0'@;
put 'ZS5mdWt1c2hpbWEuanAiLCJpbmF3YXNoaXJvLmZ1a3VzaGltYS5qcCIsImlzaGlrYXdhLmZ1a3VzaGltYS5qcCIsIml3YWtpLmZ1a3VzaGltYS5qcCIsIml6dW1pemFraS5mdWt1c2hpbWEuanAiLCJrYWdhbWlpc2hpLmZ1a3VzaGltYS5qcCIsImthbmV5YW1hLmZ1a3VzaGltYS5qcCIsImth'@;
put 'd2FtYXRhLmZ1a3VzaGltYS5qcCIsImtpdGFrYXRhLmZ1a3VzaGltYS5qcCIsImtpdGFzaGlvYmFyYS5mdWt1c2hpbWEuanAiLCJrb29yaS5mdWt1c2hpbWEuanAiLCJrb3JpeWFtYS5mdWt1c2hpbWEuanAiLCJrdW5pbWkuZnVrdXNoaW1hLmpwIiwibWloYXJ1LmZ1a3VzaGltYS5qcCIsIm1p'@;
put 'c2hpbWEuZnVrdXNoaW1hLmpwIiwibmFtaWUuZnVrdXNoaW1hLmpwIiwibmFuZ28uZnVrdXNoaW1hLmpwIiwibmlzaGlhaXp1LmZ1a3VzaGltYS5qcCIsIm5pc2hpZ28uZnVrdXNoaW1hLmpwIiwib2t1bWEuZnVrdXNoaW1hLmpwIiwib21vdGVnby5mdWt1c2hpbWEuanAiLCJvbm8uZnVrdXNo'@;
put 'aW1hLmpwIiwib3RhbWEuZnVrdXNoaW1hLmpwIiwic2FtZWdhd2EuZnVrdXNoaW1hLmpwIiwic2hpbW9nby5mdWt1c2hpbWEuanAiLCJzaGlyYWthd2EuZnVrdXNoaW1hLmpwIiwic2hvd2EuZnVrdXNoaW1hLmpwIiwic29tYS5mdWt1c2hpbWEuanAiLCJzdWthZ2F3YS5mdWt1c2hpbWEuanAi'@;
put 'LCJ0YWlzaGluLmZ1a3VzaGltYS5qcCIsInRhbWFrYXdhLmZ1a3VzaGltYS5qcCIsInRhbmFndXJhLmZ1a3VzaGltYS5qcCIsInRlbmVpLmZ1a3VzaGltYS5qcCIsInlhYnVraS5mdWt1c2hpbWEuanAiLCJ5YW1hdG8uZnVrdXNoaW1hLmpwIiwieWFtYXRzdXJpLmZ1a3VzaGltYS5qcCIsInlh'@;
put 'bmFpenUuZnVrdXNoaW1hLmpwIiwieXVnYXdhLmZ1a3VzaGltYS5qcCIsImFucGFjaGkuZ2lmdS5qcCIsImVuYS5naWZ1LmpwIiwiZ2lmdS5naWZ1LmpwIiwiZ2luYW4uZ2lmdS5qcCIsImdvZG8uZ2lmdS5qcCIsImd1am8uZ2lmdS5qcCIsImhhc2hpbWEuZ2lmdS5qcCIsImhpY2hpc28uZ2lm'@;
put 'dS5qcCIsImhpZGEuZ2lmdS5qcCIsImhpZ2FzaGlzaGlyYWthd2EuZ2lmdS5qcCIsImliaWdhd2EuZ2lmdS5qcCIsImlrZWRhLmdpZnUuanAiLCJrYWthbWlnYWhhcmEuZ2lmdS5qcCIsImthbmkuZ2lmdS5qcCIsImthc2FoYXJhLmdpZnUuanAiLCJrYXNhbWF0c3UuZ2lmdS5qcCIsImthd2F1'@;
put 'ZS5naWZ1LmpwIiwia2l0YWdhdGEuZ2lmdS5qcCIsIm1pbm8uZ2lmdS5qcCIsIm1pbm9rYW1vLmdpZnUuanAiLCJtaXRha2UuZ2lmdS5qcCIsIm1penVuYW1pLmdpZnUuanAiLCJtb3Rvc3UuZ2lmdS5qcCIsIm5ha2F0c3VnYXdhLmdpZnUuanAiLCJvZ2FraS5naWZ1LmpwIiwic2FrYWhvZ2ku'@;
put 'Z2lmdS5qcCIsInNla2kuZ2lmdS5qcCIsInNla2lnYWhhcmEuZ2lmdS5qcCIsInNoaXJha2F3YS5naWZ1LmpwIiwidGFqaW1pLmdpZnUuanAiLCJ0YWtheWFtYS5naWZ1LmpwIiwidGFydWkuZ2lmdS5qcCIsInRva2kuZ2lmdS5qcCIsInRvbWlrYS5naWZ1LmpwIiwid2Fub3VjaGkuZ2lmdS5q'@;
put 'cCIsInlhbWFnYXRhLmdpZnUuanAiLCJ5YW90c3UuZ2lmdS5qcCIsInlvcm8uZ2lmdS5qcCIsImFubmFrYS5ndW5tYS5qcCIsImNoaXlvZGEuZ3VubWEuanAiLCJmdWppb2thLmd1bm1hLmpwIiwiaGlnYXNoaWFnYXRzdW1hLmd1bm1hLmpwIiwiaXNlc2FraS5ndW5tYS5qcCIsIml0YWt1cmEu'@;
put 'Z3VubWEuanAiLCJrYW5uYS5ndW5tYS5qcCIsImthbnJhLmd1bm1hLmpwIiwia2F0YXNoaW5hLmd1bm1hLmpwIiwia2F3YWJhLmd1bm1hLmpwIiwia2lyeXUuZ3VubWEuanAiLCJrdXNhdHN1Lmd1bm1hLmpwIiwibWFlYmFzaGkuZ3VubWEuanAiLCJtZWl3YS5ndW5tYS5qcCIsIm1pZG9yaS5n'@;
put 'dW5tYS5qcCIsIm1pbmFrYW1pLmd1bm1hLmpwIiwibmFnYW5vaGFyYS5ndW5tYS5qcCIsIm5ha2Fub2pvLmd1bm1hLmpwIiwibmFubW9rdS5ndW5tYS5qcCIsIm51bWF0YS5ndW5tYS5qcCIsIm9penVtaS5ndW5tYS5qcCIsIm9yYS5ndW5tYS5qcCIsIm90YS5ndW5tYS5qcCIsInNoaWJ1a2F3'@;
put 'YS5ndW5tYS5qcCIsInNoaW1vbml0YS5ndW5tYS5qcCIsInNoaW50by5ndW5tYS5qcCIsInNob3dhLmd1bm1hLmpwIiwidGFrYXNha2kuZ3VubWEuanAiLCJ0YWtheWFtYS5ndW5tYS5qcCIsInRhbWFtdXJhLmd1bm1hLmpwIiwidGF0ZWJheWFzaGkuZ3VubWEuanAiLCJ0b21pb2thLmd1bm1h'@;
put 'LmpwIiwidHN1a2l5b25vLmd1bm1hLmpwIiwidHN1bWFnb2kuZ3VubWEuanAiLCJ1ZW5vLmd1bm1hLmpwIiwieW9zaGlva2EuZ3VubWEuanAiLCJhc2FtaW5hbWkuaGlyb3NoaW1hLmpwIiwiZGFpd2EuaGlyb3NoaW1hLmpwIiwiZXRhamltYS5oaXJvc2hpbWEuanAiLCJmdWNodS5oaXJvc2hp'@;
put 'bWEuanAiLCJmdWt1eWFtYS5oaXJvc2hpbWEuanAiLCJoYXRzdWthaWNoaS5oaXJvc2hpbWEuanAiLCJoaWdhc2hpaGlyb3NoaW1hLmhpcm9zaGltYS5qcCIsImhvbmdvLmhpcm9zaGltYS5qcCIsImppbnNla2lrb2dlbi5oaXJvc2hpbWEuanAiLCJrYWl0YS5oaXJvc2hpbWEuanAiLCJrdWku'@;
put 'aGlyb3NoaW1hLmpwIiwia3VtYW5vLmhpcm9zaGltYS5qcCIsImt1cmUuaGlyb3NoaW1hLmpwIiwibWloYXJhLmhpcm9zaGltYS5qcCIsIm1peW9zaGkuaGlyb3NoaW1hLmpwIiwibmFrYS5oaXJvc2hpbWEuanAiLCJvbm9taWNoaS5oaXJvc2hpbWEuanAiLCJvc2FraWthbWlqaW1hLmhpcm9z'@;
put 'aGltYS5qcCIsIm90YWtlLmhpcm9zaGltYS5qcCIsInNha2EuaGlyb3NoaW1hLmpwIiwic2VyYS5oaXJvc2hpbWEuanAiLCJzZXJhbmlzaGkuaGlyb3NoaW1hLmpwIiwic2hpbmljaGkuaGlyb3NoaW1hLmpwIiwic2hvYmFyYS5oaXJvc2hpbWEuanAiLCJ0YWtlaGFyYS5oaXJvc2hpbWEuanAi'@;
put 'LCJhYmFzaGlyaS5ob2trYWlkby5qcCIsImFiaXJhLmhva2thaWRvLmpwIiwiYWliZXRzdS5ob2trYWlkby5qcCIsImFrYWJpcmEuaG9ra2FpZG8uanAiLCJha2tlc2hpLmhva2thaWRvLmpwIiwiYXNhaGlrYXdhLmhva2thaWRvLmpwIiwiYXNoaWJldHN1Lmhva2thaWRvLmpwIiwiYXNob3Jv'@;
put 'Lmhva2thaWRvLmpwIiwiYXNzYWJ1Lmhva2thaWRvLmpwIiwiYXRzdW1hLmhva2thaWRvLmpwIiwiYmliYWkuaG9ra2FpZG8uanAiLCJiaWVpLmhva2thaWRvLmpwIiwiYmlmdWthLmhva2thaWRvLmpwIiwiYmlob3JvLmhva2thaWRvLmpwIiwiYmlyYXRvcmkuaG9ra2FpZG8uanAiLCJjaGlw'@;
put 'cHViZXRzdS5ob2trYWlkby5qcCIsImNoaXRvc2UuaG9ra2FpZG8uanAiLCJkYXRlLmhva2thaWRvLmpwIiwiZWJldHN1Lmhva2thaWRvLmpwIiwiZW1iZXRzdS5ob2trYWlkby5qcCIsImVuaXdhLmhva2thaWRvLmpwIiwiZXJpbW8uaG9ra2FpZG8uanAiLCJlc2FuLmhva2thaWRvLmpwIiwi'@;
put 'ZXNhc2hpLmhva2thaWRvLmpwIiwiZnVrYWdhd2EuaG9ra2FpZG8uanAiLCJmdWt1c2hpbWEuaG9ra2FpZG8uanAiLCJmdXJhbm8uaG9ra2FpZG8uanAiLCJmdXJ1YmlyYS5ob2trYWlkby5qcCIsImhhYm9yby5ob2trYWlkby5qcCIsImhha29kYXRlLmhva2thaWRvLmpwIiwiaGFtYXRvbmJl'@;
put 'dHN1Lmhva2thaWRvLmpwIiwiaGlkYWthLmhva2thaWRvLmpwIiwiaGlnYXNoaWthZ3VyYS5ob2trYWlkby5qcCIsImhpZ2FzaGlrYXdhLmhva2thaWRvLmpwIiwiaGlyb28uaG9ra2FpZG8uanAiLCJob2t1cnl1Lmhva2thaWRvLmpwIiwiaG9rdXRvLmhva2thaWRvLmpwIiwiaG9uYmV0c3Uu'@;
put 'aG9ra2FpZG8uanAiLCJob3Jva2FuYWkuaG9ra2FpZG8uanAiLCJob3Jvbm9iZS5ob2trYWlkby5qcCIsImlrZWRhLmhva2thaWRvLmpwIiwiaW1ha2FuZS5ob2trYWlkby5qcCIsImlzaGlrYXJpLmhva2thaWRvLmpwIiwiaXdhbWl6YXdhLmhva2thaWRvLmpwIiwiaXdhbmFpLmhva2thaWRv'@;
put 'LmpwIiwia2FtaWZ1cmFuby5ob2trYWlkby5qcCIsImthbWlrYXdhLmhva2thaWRvLmpwIiwia2FtaXNoaWhvcm8uaG9ra2FpZG8uanAiLCJrYW1pc3VuYWdhd2EuaG9ra2FpZG8uanAiLCJrYW1vZW5haS5ob2trYWlkby5qcCIsImtheWFiZS5ob2trYWlkby5qcCIsImtlbWJ1Y2hpLmhva2th'@;
put 'aWRvLmpwIiwia2lrb25haS5ob2trYWlkby5qcCIsImtpbW9iZXRzdS5ob2trYWlkby5qcCIsImtpdGFoaXJvc2hpbWEuaG9ra2FpZG8uanAiLCJraXRhbWkuaG9ra2FpZG8uanAiLCJraXlvc2F0by5ob2trYWlkby5qcCIsImtvc2hpbWl6dS5ob2trYWlkby5qcCIsImt1bm5lcHB1Lmhva2th'@;
put 'aWRvLmpwIiwia3VyaXlhbWEuaG9ra2FpZG8uanAiLCJrdXJvbWF0c3VuYWkuaG9ra2FpZG8uanAiLCJrdXNoaXJvLmhva2thaWRvLmpwIiwia3V0Y2hhbi5ob2trYWlkby5qcCIsImt5b3dhLmhva2thaWRvLmpwIiwibWFzaGlrZS5ob2trYWlkby5qcCIsIm1hdHN1bWFlLmhva2thaWRvLmpw'@;
put 'IiwibWlrYXNhLmhva2thaWRvLmpwIiwibWluYW1pZnVyYW5vLmhva2thaWRvLmpwIiwibW9tYmV0c3UuaG9ra2FpZG8uanAiLCJtb3NldXNoaS5ob2trYWlkby5qcCIsIm11a2F3YS5ob2trYWlkby5qcCIsIm11cm9yYW4uaG9ra2FpZG8uanAiLCJuYWllLmhva2thaWRvLmpwIiwibmFrYWdh'@;
put 'd2EuaG9ra2FpZG8uanAiLCJuYWthc2F0c3VuYWkuaG9ra2FpZG8uanAiLCJuYWthdG9tYmV0c3UuaG9ra2FpZG8uanAiLCJuYW5hZS5ob2trYWlkby5qcCIsIm5hbnBvcm8uaG9ra2FpZG8uanAiLCJuYXlvcm8uaG9ra2FpZG8uanAiLCJuZW11cm8uaG9ra2FpZG8uanAiLCJuaWlrYXBwdS5o'@;
put 'b2trYWlkby5qcCIsIm5pa2kuaG9ra2FpZG8uanAiLCJuaXNoaW9rb3BwZS5ob2trYWlkby5qcCIsIm5vYm9yaWJldHN1Lmhva2thaWRvLmpwIiwibnVtYXRhLmhva2thaWRvLmpwIiwib2JpaGlyby5ob2trYWlkby5qcCIsIm9iaXJhLmhva2thaWRvLmpwIiwib2tldG8uaG9ra2FpZG8uanAi'@;
put 'LCJva29wcGUuaG9ra2FpZG8uanAiLCJvdGFydS5ob2trYWlkby5qcCIsIm90b2JlLmhva2thaWRvLmpwIiwib3RvZnVrZS5ob2trYWlkby5qcCIsIm90b2luZXBwdS5ob2trYWlkby5qcCIsIm91bXUuaG9ra2FpZG8uanAiLCJvem9yYS5ob2trYWlkby5qcCIsInBpcHB1Lmhva2thaWRvLmpw'@;
put 'IiwicmFua29zaGkuaG9ra2FpZG8uanAiLCJyZWJ1bi5ob2trYWlkby5qcCIsInJpa3ViZXRzdS5ob2trYWlkby5qcCIsInJpc2hpcmkuaG9ra2FpZG8uanAiLCJyaXNoaXJpZnVqaS5ob2trYWlkby5qcCIsInNhcm9tYS5ob2trYWlkby5qcCIsInNhcnVmdXRzdS5ob2trYWlkby5qcCIsInNo'@;
put 'YWtvdGFuLmhva2thaWRvLmpwIiwic2hhcmkuaG9ra2FpZG8uanAiLCJzaGliZWNoYS5ob2trYWlkby5qcCIsInNoaWJldHN1Lmhva2thaWRvLmpwIiwic2hpa2FiZS5ob2trYWlkby5qcCIsInNoaWthb2kuaG9ra2FpZG8uanAiLCJzaGltYW1ha2kuaG9ra2FpZG8uanAiLCJzaGltaXp1Lmhv'@;
put 'a2thaWRvLmpwIiwic2hpbW9rYXdhLmhva2thaWRvLmpwIiwic2hpbnNoaW5vdHN1Lmhva2thaWRvLmpwIiwic2hpbnRva3UuaG9ra2FpZG8uanAiLCJzaGlyYW51a2EuaG9ra2FpZG8uanAiLCJzaGlyYW9pLmhva2thaWRvLmpwIiwic2hpcml1Y2hpLmhva2thaWRvLmpwIiwic29iZXRzdS5o'@;
put 'b2trYWlkby5qcCIsInN1bmFnYXdhLmhva2thaWRvLmpwIiwidGFpa2kuaG9ra2FpZG8uanAiLCJ0YWthc3UuaG9ra2FpZG8uanAiLCJ0YWtpa2F3YS5ob2trYWlkby5qcCIsInRha2lub3VlLmhva2thaWRvLmpwIiwidGVzaGlrYWdhLmhva2thaWRvLmpwIiwidG9iZXRzdS5ob2trYWlkby5q'@;
put 'cCIsInRvaG1hLmhva2thaWRvLmpwIiwidG9tYWtvbWFpLmhva2thaWRvLmpwIiwidG9tYXJpLmhva2thaWRvLmpwIiwidG95YS5ob2trYWlkby5qcCIsInRveWFrby5ob2trYWlkby5qcCIsInRveW90b21pLmhva2thaWRvLmpwIiwidG95b3VyYS5ob2trYWlkby5qcCIsInRzdWJldHN1Lmhv'@;
put 'a2thaWRvLmpwIiwidHN1a2lnYXRhLmhva2thaWRvLmpwIiwidXJha2F3YS5ob2trYWlkby5qcCIsInVyYXVzdS5ob2trYWlkby5qcCIsInVyeXUuaG9ra2FpZG8uanAiLCJ1dGFzaGluYWkuaG9ra2FpZG8uanAiLCJ3YWtrYW5haS5ob2trYWlkby5qcCIsIndhc3NhbXUuaG9ra2FpZG8uanAi'@;
put 'LCJ5YWt1bW8uaG9ra2FpZG8uanAiLCJ5b2ljaGkuaG9ra2FpZG8uanAiLCJhaW9pLmh5b2dvLmpwIiwiYWthc2hpLmh5b2dvLmpwIiwiYWtvLmh5b2dvLmpwIiwiYW1hZ2FzYWtpLmh5b2dvLmpwIiwiYW9nYWtpLmh5b2dvLmpwIiwiYXNhZ28uaHlvZ28uanAiLCJhc2hpeWEuaHlvZ28uanAi'@;
put 'LCJhd2FqaS5oeW9nby5qcCIsImZ1a3VzYWtpLmh5b2dvLmpwIiwiZ29zaGlraS5oeW9nby5qcCIsImhhcmltYS5oeW9nby5qcCIsImhpbWVqaS5oeW9nby5qcCIsImljaGlrYXdhLmh5b2dvLmpwIiwiaW5hZ2F3YS5oeW9nby5qcCIsIml0YW1pLmh5b2dvLmpwIiwia2Frb2dhd2EuaHlvZ28u'@;
put 'anAiLCJrYW1pZ29yaS5oeW9nby5qcCIsImthbWlrYXdhLmh5b2dvLmpwIiwia2FzYWkuaHlvZ28uanAiLCJrYXN1Z2EuaHlvZ28uanAiLCJrYXdhbmlzaGkuaHlvZ28uanAiLCJtaWtpLmh5b2dvLmpwIiwibWluYW1pYXdhamkuaHlvZ28uanAiLCJuaXNoaW5vbWl5YS5oeW9nby5qcCIsIm5p'@;
put 'c2hpd2FraS5oeW9nby5qcCIsIm9uby5oeW9nby5qcCIsInNhbmRhLmh5b2dvLmpwIiwic2FubmFuLmh5b2dvLmpwIiwic2FzYXlhbWEuaHlvZ28uanAiLCJzYXlvLmh5b2dvLmpwIiwic2hpbmd1Lmh5b2dvLmpwIiwic2hpbm9uc2VuLmh5b2dvLmpwIiwic2hpc28uaHlvZ28uanAiLCJzdW1v'@;
put 'dG8uaHlvZ28uanAiLCJ0YWlzaGkuaHlvZ28uanAiLCJ0YWthLmh5b2dvLmpwIiwidGFrYXJhenVrYS5oeW9nby5qcCIsInRha2FzYWdvLmh5b2dvLmpwIiwidGFraW5vLmh5b2dvLmpwIiwidGFtYmEuaHlvZ28uanAiLCJ0YXRzdW5vLmh5b2dvLmpwIiwidG95b29rYS5oeW9nby5qcCIsInlh'@;
put 'YnUuaHlvZ28uanAiLCJ5YXNoaXJvLmh5b2dvLmpwIiwieW9rYS5oeW9nby5qcCIsInlva2F3YS5oeW9nby5qcCIsImFtaS5pYmFyYWtpLmpwIiwiYXNhaGkuaWJhcmFraS5qcCIsImJhbmRvLmliYXJha2kuanAiLCJjaGlrdXNlaS5pYmFyYWtpLmpwIiwiZGFpZ28uaWJhcmFraS5qcCIsImZ1'@;
put 'amlzaGlyby5pYmFyYWtpLmpwIiwiaGl0YWNoaS5pYmFyYWtpLmpwIiwiaGl0YWNoaW5ha2EuaWJhcmFraS5qcCIsImhpdGFjaGlvbWl5YS5pYmFyYWtpLmpwIiwiaGl0YWNoaW90YS5pYmFyYWtpLmpwIiwiaWJhcmFraS5pYmFyYWtpLmpwIiwiaW5hLmliYXJha2kuanAiLCJpbmFzaGlraS5p'@;
put 'YmFyYWtpLmpwIiwiaXRha28uaWJhcmFraS5qcCIsIml3YW1hLmliYXJha2kuanAiLCJqb3NvLmliYXJha2kuanAiLCJrYW1pc3UuaWJhcmFraS5qcCIsImthc2FtYS5pYmFyYWtpLmpwIiwia2FzaGltYS5pYmFyYWtpLmpwIiwia2FzdW1pZ2F1cmEuaWJhcmFraS5qcCIsImtvZ2EuaWJhcmFr'@;
put 'aS5qcCIsIm1paG8uaWJhcmFraS5qcCIsIm1pdG8uaWJhcmFraS5qcCIsIm1vcml5YS5pYmFyYWtpLmpwIiwibmFrYS5pYmFyYWtpLmpwIiwibmFtZWdhdGEuaWJhcmFraS5qcCIsIm9hcmFpLmliYXJha2kuanAiLCJvZ2F3YS5pYmFyYWtpLmpwIiwib21pdGFtYS5pYmFyYWtpLmpwIiwicnl1'@;
put 'Z2FzYWtpLmliYXJha2kuanAiLCJzYWthaS5pYmFyYWtpLmpwIiwic2FrdXJhZ2F3YS5pYmFyYWtpLmpwIiwic2hpbW9kYXRlLmliYXJha2kuanAiLCJzaGltb3RzdW1hLmliYXJha2kuanAiLCJzaGlyb3NhdG8uaWJhcmFraS5qcCIsInNvd2EuaWJhcmFraS5qcCIsInN1aWZ1LmliYXJha2ku'@;
put 'anAiLCJ0YWthaGFnaS5pYmFyYWtpLmpwIiwidGFtYXRzdWt1cmkuaWJhcmFraS5qcCIsInRva2FpLmliYXJha2kuanAiLCJ0b21vYmUuaWJhcmFraS5qcCIsInRvbmUuaWJhcmFraS5qcCIsInRvcmlkZS5pYmFyYWtpLmpwIiwidHN1Y2hpdXJhLmliYXJha2kuanAiLCJ0c3VrdWJhLmliYXJh'@;
put 'a2kuanAiLCJ1Y2hpaGFyYS5pYmFyYWtpLmpwIiwidXNoaWt1LmliYXJha2kuanAiLCJ5YWNoaXlvLmliYXJha2kuanAiLCJ5YW1hZ2F0YS5pYmFyYWtpLmpwIiwieWF3YXJhLmliYXJha2kuanAiLCJ5dWtpLmliYXJha2kuanAiLCJhbmFtaXp1LmlzaGlrYXdhLmpwIiwiaGFrdWkuaXNoaWth'@;
put 'd2EuanAiLCJoYWt1c2FuLmlzaGlrYXdhLmpwIiwia2FnYS5pc2hpa2F3YS5qcCIsImthaG9rdS5pc2hpa2F3YS5qcCIsImthbmF6YXdhLmlzaGlrYXdhLmpwIiwia2F3YWtpdGEuaXNoaWthd2EuanAiLCJrb21hdHN1LmlzaGlrYXdhLmpwIiwibmFrYW5vdG8uaXNoaWthd2EuanAiLCJuYW5h'@;
put 'by5pc2hpa2F3YS5qcCIsIm5vbWkuaXNoaWthd2EuanAiLCJub25vaWNoaS5pc2hpa2F3YS5qcCIsIm5vdG8uaXNoaWthd2EuanAiLCJzaGlrYS5pc2hpa2F3YS5qcCIsInN1enUuaXNoaWthd2EuanAiLCJ0c3ViYXRhLmlzaGlrYXdhLmpwIiwidHN1cnVnaS5pc2hpa2F3YS5qcCIsInVjaGlu'@;
put 'YWRhLmlzaGlrYXdhLmpwIiwid2FqaW1hLmlzaGlrYXdhLmpwIiwiZnVkYWkuaXdhdGUuanAiLCJmdWppc2F3YS5pd2F0ZS5qcCIsImhhbmFtYWtpLml3YXRlLmpwIiwiaGlyYWl6dW1pLml3YXRlLmpwIiwiaGlyb25vLml3YXRlLmpwIiwiaWNoaW5vaGUuaXdhdGUuanAiLCJpY2hpbm9zZWtp'@;
put 'Lml3YXRlLmpwIiwiaXdhaXp1bWkuaXdhdGUuanAiLCJpd2F0ZS5pd2F0ZS5qcCIsImpvYm9qaS5pd2F0ZS5qcCIsImthbWFpc2hpLml3YXRlLmpwIiwia2FuZWdhc2FraS5pd2F0ZS5qcCIsImthcnVtYWkuaXdhdGUuanAiLCJrYXdhaS5pd2F0ZS5qcCIsImtpdGFrYW1pLml3YXRlLmpwIiwi'@;
put 'a3VqaS5pd2F0ZS5qcCIsImt1bm9oZS5pd2F0ZS5qcCIsImt1enVtYWtpLml3YXRlLmpwIiwibWl5YWtvLml3YXRlLmpwIiwibWl6dXNhd2EuaXdhdGUuanAiLCJtb3Jpb2thLml3YXRlLmpwIiwibmlub2hlLml3YXRlLmpwIiwibm9kYS5pd2F0ZS5qcCIsIm9mdW5hdG8uaXdhdGUuanAiLCJv'@;
put 'c2h1Lml3YXRlLmpwIiwib3RzdWNoaS5pd2F0ZS5qcCIsInJpa3V6ZW50YWthdGEuaXdhdGUuanAiLCJzaGl3YS5pd2F0ZS5qcCIsInNoaXp1a3Vpc2hpLml3YXRlLmpwIiwic3VtaXRhLml3YXRlLmpwIiwidGFub2hhdGEuaXdhdGUuanAiLCJ0b25vLml3YXRlLmpwIiwieWFoYWJhLml3YXRl'@;
put 'LmpwIiwieWFtYWRhLml3YXRlLmpwIiwiYXlhZ2F3YS5rYWdhd2EuanAiLCJoaWdhc2hpa2FnYXdhLmthZ2F3YS5qcCIsImthbm9uamkua2FnYXdhLmpwIiwia290b2hpcmEua2FnYXdhLmpwIiwibWFubm8ua2FnYXdhLmpwIiwibWFydWdhbWUua2FnYXdhLmpwIiwibWl0b3lvLmthZ2F3YS5q'@;
put 'cCIsIm5hb3NoaW1hLmthZ2F3YS5qcCIsInNhbnVraS5rYWdhd2EuanAiLCJ0YWRvdHN1LmthZ2F3YS5qcCIsInRha2FtYXRzdS5rYWdhd2EuanAiLCJ0b25vc2hvLmthZ2F3YS5qcCIsInVjaGlub21pLmthZ2F3YS5qcCIsInV0YXp1LmthZ2F3YS5qcCIsInplbnRzdWppLmthZ2F3YS5qcCIs'@;
put 'ImFrdW5lLmthZ29zaGltYS5qcCIsImFtYW1pLmthZ29zaGltYS5qcCIsImhpb2tpLmthZ29zaGltYS5qcCIsImlzYS5rYWdvc2hpbWEuanAiLCJpc2VuLmthZ29zaGltYS5qcCIsIml6dW1pLmthZ29zaGltYS5qcCIsImthZ29zaGltYS5rYWdvc2hpbWEuanAiLCJrYW5veWEua2Fnb3NoaW1h'@;
put 'LmpwIiwia2F3YW5hYmUua2Fnb3NoaW1hLmpwIiwia2lua28ua2Fnb3NoaW1hLmpwIiwia291eWFtYS5rYWdvc2hpbWEuanAiLCJtYWt1cmF6YWtpLmthZ29zaGltYS5qcCIsIm1hdHN1bW90by5rYWdvc2hpbWEuanAiLCJtaW5hbWl0YW5lLmthZ29zaGltYS5qcCIsIm5ha2F0YW5lLmthZ29z'@;
put 'aGltYS5qcCIsIm5pc2hpbm9vbW90ZS5rYWdvc2hpbWEuanAiLCJzYXRzdW1hc2VuZGFpLmthZ29zaGltYS5qcCIsInNvby5rYWdvc2hpbWEuanAiLCJ0YXJ1bWl6dS5rYWdvc2hpbWEuanAiLCJ5dXN1aS5rYWdvc2hpbWEuanAiLCJhaWthd2Eua2FuYWdhd2EuanAiLCJhdHN1Z2kua2FuYWdh'@;
put 'd2EuanAiLCJheWFzZS5rYW5hZ2F3YS5qcCIsImNoaWdhc2FraS5rYW5hZ2F3YS5qcCIsImViaW5hLmthbmFnYXdhLmpwIiwiZnVqaXNhd2Eua2FuYWdhd2EuanAiLCJoYWRhbm8ua2FuYWdhd2EuanAiLCJoYWtvbmUua2FuYWdhd2EuanAiLCJoaXJhdHN1a2Eua2FuYWdhd2EuanAiLCJpc2Vo'@;
put 'YXJhLmthbmFnYXdhLmpwIiwia2Fpc2VpLmthbmFnYXdhLmpwIiwia2FtYWt1cmEua2FuYWdhd2EuanAiLCJraXlva2F3YS5rYW5hZ2F3YS5qcCIsIm1hdHN1ZGEua2FuYWdhd2EuanAiLCJtaW5hbWlhc2hpZ2FyYS5rYW5hZ2F3YS5qcCIsIm1pdXJhLmthbmFnYXdhLmpwIiwibmFrYWkua2Fu'@;
put 'YWdhd2EuanAiLCJuaW5vbWl5YS5rYW5hZ2F3YS5qcCIsIm9kYXdhcmEua2FuYWdhd2EuanAiLCJvaS5rYW5hZ2F3YS5qcCIsIm9pc28ua2FuYWdhd2EuanAiLCJzYWdhbWloYXJhLmthbmFnYXdhLmpwIiwic2FtdWthd2Eua2FuYWdhd2EuanAiLCJ0c3VrdWkua2FuYWdhd2EuanAiLCJ5YW1h'@;
put 'a2l0YS5rYW5hZ2F3YS5qcCIsInlhbWF0by5rYW5hZ2F3YS5qcCIsInlva29zdWthLmthbmFnYXdhLmpwIiwieXVnYXdhcmEua2FuYWdhd2EuanAiLCJ6YW1hLmthbmFnYXdhLmpwIiwienVzaGkua2FuYWdhd2EuanAiLCJha2kua29jaGkuanAiLCJnZWlzZWkua29jaGkuanAiLCJoaWRha2Eu'@;
put 'a29jaGkuanAiLCJoaWdhc2hpdHN1bm8ua29jaGkuanAiLCJpbm8ua29jaGkuanAiLCJrYWdhbWkua29jaGkuanAiLCJrYW1pLmtvY2hpLmpwIiwia2l0YWdhd2Eua29jaGkuanAiLCJrb2NoaS5rb2NoaS5qcCIsIm1paGFyYS5rb2NoaS5qcCIsIm1vdG95YW1hLmtvY2hpLmpwIiwibXVyb3Rv'@;
put 'LmtvY2hpLmpwIiwibmFoYXJpLmtvY2hpLmpwIiwibmFrYW11cmEua29jaGkuanAiLCJuYW5rb2t1LmtvY2hpLmpwIiwibmlzaGl0b3NhLmtvY2hpLmpwIiwibml5b2RvZ2F3YS5rb2NoaS5qcCIsIm9jaGkua29jaGkuanAiLCJva2F3YS5rb2NoaS5qcCIsIm90b3lvLmtvY2hpLmpwIiwib3Rz'@;
put 'dWtpLmtvY2hpLmpwIiwic2FrYXdhLmtvY2hpLmpwIiwic3VrdW1vLmtvY2hpLmpwIiwic3VzYWtpLmtvY2hpLmpwIiwidG9zYS5rb2NoaS5qcCIsInRvc2FzaGltaXp1LmtvY2hpLmpwIiwidG95by5rb2NoaS5qcCIsInRzdW5vLmtvY2hpLmpwIiwidW1hamkua29jaGkuanAiLCJ5YXN1ZGEu'@;
put 'a29jaGkuanAiLCJ5dXN1aGFyYS5rb2NoaS5qcCIsImFtYWt1c2Eua3VtYW1vdG8uanAiLCJhcmFvLmt1bWFtb3RvLmpwIiwiYXNvLmt1bWFtb3RvLmpwIiwiY2hveW8ua3VtYW1vdG8uanAiLCJneW9rdXRvLmt1bWFtb3RvLmpwIiwia2FtaWFtYWt1c2Eua3VtYW1vdG8uanAiLCJraWt1Y2hp'@;
put 'Lmt1bWFtb3RvLmpwIiwia3VtYW1vdG8ua3VtYW1vdG8uanAiLCJtYXNoaWtpLmt1bWFtb3RvLmpwIiwibWlmdW5lLmt1bWFtb3RvLmpwIiwibWluYW1hdGEua3VtYW1vdG8uanAiLCJtaW5hbWlvZ3VuaS5rdW1hbW90by5qcCIsIm5hZ2FzdS5rdW1hbW90by5qcCIsIm5pc2hpaGFyYS5rdW1h'@;
put 'bW90by5qcCIsIm9ndW5pLmt1bWFtb3RvLmpwIiwib3p1Lmt1bWFtb3RvLmpwIiwic3Vtb3RvLmt1bWFtb3RvLmpwIiwidGFrYW1vcmkua3VtYW1vdG8uanAiLCJ1a2kua3VtYW1vdG8uanAiLCJ1dG8ua3VtYW1vdG8uanAiLCJ5YW1hZ2Eua3VtYW1vdG8uanAiLCJ5YW1hdG8ua3VtYW1vdG8u'@;
put 'anAiLCJ5YXRzdXNoaXJvLmt1bWFtb3RvLmpwIiwiYXlhYmUua3lvdG8uanAiLCJmdWt1Y2hpeWFtYS5reW90by5qcCIsImhpZ2FzaGl5YW1hLmt5b3RvLmpwIiwiaWRlLmt5b3RvLmpwIiwiaW5lLmt5b3RvLmpwIiwiam95by5reW90by5qcCIsImthbWVva2Eua3lvdG8uanAiLCJrYW1vLmt5'@;
put 'b3RvLmpwIiwia2l0YS5reW90by5qcCIsImtpenUua3lvdG8uanAiLCJrdW1peWFtYS5reW90by5qcCIsImt5b3RhbWJhLmt5b3RvLmpwIiwia3lvdGFuYWJlLmt5b3RvLmpwIiwia3lvdGFuZ28ua3lvdG8uanAiLCJtYWl6dXJ1Lmt5b3RvLmpwIiwibWluYW1pLmt5b3RvLmpwIiwibWluYW1p'@;
put 'eWFtYXNoaXJvLmt5b3RvLmpwIiwibWl5YXp1Lmt5b3RvLmpwIiwibXVrby5reW90by5qcCIsIm5hZ2Fva2FreW8ua3lvdG8uanAiLCJuYWthZ3lvLmt5b3RvLmpwIiwibmFudGFuLmt5b3RvLmpwIiwib3lhbWF6YWtpLmt5b3RvLmpwIiwic2FreW8ua3lvdG8uanAiLCJzZWlrYS5reW90by5q'@;
put 'cCIsInRhbmFiZS5reW90by5qcCIsInVqaS5reW90by5qcCIsInVqaXRhd2FyYS5reW90by5qcCIsIndhenVrYS5reW90by5qcCIsInlhbWFzaGluYS5reW90by5qcCIsInlhd2F0YS5reW90by5qcCIsImFzYWhpLm1pZS5qcCIsImluYWJlLm1pZS5qcCIsImlzZS5taWUuanAiLCJrYW1leWFt'@;
put 'YS5taWUuanAiLCJrYXdhZ29lLm1pZS5qcCIsImtpaG8ubWllLmpwIiwia2lzb3Nha2kubWllLmpwIiwia2l3YS5taWUuanAiLCJrb21vbm8ubWllLmpwIiwia3VtYW5vLm1pZS5qcCIsImt1d2FuYS5taWUuanAiLCJtYXRzdXNha2EubWllLmpwIiwibWVpd2EubWllLmpwIiwibWloYW1hLm1p'@;
put 'ZS5qcCIsIm1pbmFtaWlzZS5taWUuanAiLCJtaXN1Z2kubWllLmpwIiwibWl5YW1hLm1pZS5qcCIsIm5hYmFyaS5taWUuanAiLCJzaGltYS5taWUuanAiLCJzdXp1a2EubWllLmpwIiwidGFkby5taWUuanAiLCJ0YWlraS5taWUuanAiLCJ0YWtpLm1pZS5qcCIsInRhbWFraS5taWUuanAiLCJ0'@;
put 'b2JhLm1pZS5qcCIsInRzdS5taWUuanAiLCJ1ZG9uby5taWUuanAiLCJ1cmVzaGluby5taWUuanAiLCJ3YXRhcmFpLm1pZS5qcCIsInlva2thaWNoaS5taWUuanAiLCJmdXJ1a2F3YS5taXlhZ2kuanAiLCJoaWdhc2hpbWF0c3VzaGltYS5taXlhZ2kuanAiLCJpc2hpbm9tYWtpLm1peWFnaS5q'@;
put 'cCIsIml3YW51bWEubWl5YWdpLmpwIiwia2FrdWRhLm1peWFnaS5qcCIsImthbWkubWl5YWdpLmpwIiwia2F3YXNha2kubWl5YWdpLmpwIiwibWFydW1vcmkubWl5YWdpLmpwIiwibWF0c3VzaGltYS5taXlhZ2kuanAiLCJtaW5hbWlzYW5yaWt1Lm1peWFnaS5qcCIsIm1pc2F0by5taXlhZ2ku'@;
put 'anAiLCJtdXJhdGEubWl5YWdpLmpwIiwibmF0b3JpLm1peWFnaS5qcCIsIm9nYXdhcmEubWl5YWdpLmpwIiwib2hpcmEubWl5YWdpLmpwIiwib25hZ2F3YS5taXlhZ2kuanAiLCJvc2FraS5taXlhZ2kuanAiLCJyaWZ1Lm1peWFnaS5qcCIsInNlbWluZS5taXlhZ2kuanAiLCJzaGliYXRhLm1p'@;
put 'eWFnaS5qcCIsInNoaWNoaWthc2h1a3UubWl5YWdpLmpwIiwic2hpa2FtYS5taXlhZ2kuanAiLCJzaGlvZ2FtYS5taXlhZ2kuanAiLCJzaGlyb2lzaGkubWl5YWdpLmpwIiwidGFnYWpvLm1peWFnaS5qcCIsInRhaXdhLm1peWFnaS5qcCIsInRvbWUubWl5YWdpLmpwIiwidG9taXlhLm1peWFn'@;
put 'aS5qcCIsIndha3V5YS5taXlhZ2kuanAiLCJ3YXRhcmkubWl5YWdpLmpwIiwieWFtYW1vdG8ubWl5YWdpLmpwIiwiemFvLm1peWFnaS5qcCIsImF5YS5taXlhemFraS5qcCIsImViaW5vLm1peWF6YWtpLmpwIiwiZ29rYXNlLm1peWF6YWtpLmpwIiwiaHl1Z2EubWl5YXpha2kuanAiLCJrYWRv'@;
put 'Z2F3YS5taXlhemFraS5qcCIsImthd2FtaW5hbWkubWl5YXpha2kuanAiLCJraWpvLm1peWF6YWtpLmpwIiwia2l0YWdhd2EubWl5YXpha2kuanAiLCJraXRha2F0YS5taXlhemFraS5qcCIsImtpdGF1cmEubWl5YXpha2kuanAiLCJrb2JheWFzaGkubWl5YXpha2kuanAiLCJrdW5pdG9taS5t'@;
put 'aXlhemFraS5qcCIsImt1c2hpbWEubWl5YXpha2kuanAiLCJtaW1hdGEubWl5YXpha2kuanAiLCJtaXlha29ub2pvLm1peWF6YWtpLmpwIiwibWl5YXpha2kubWl5YXpha2kuanAiLCJtb3JvdHN1a2EubWl5YXpha2kuanAiLCJuaWNoaW5hbi5taXlhemFraS5qcCIsIm5pc2hpbWVyYS5taXlh'@;
put 'emFraS5qcCIsIm5vYmVva2EubWl5YXpha2kuanAiLCJzYWl0by5taXlhemFraS5qcCIsInNoaWliYS5taXlhemFraS5qcCIsInNoaW50b21pLm1peWF6YWtpLmpwIiwidGFrYWhhcnUubWl5YXpha2kuanAiLCJ0YWthbmFiZS5taXlhemFraS5qcCIsInRha2F6YWtpLm1peWF6YWtpLmpwIiwi'@;
put 'dHN1bm8ubWl5YXpha2kuanAiLCJhY2hpLm5hZ2Fuby5qcCIsImFnZW1hdHN1Lm5hZ2Fuby5qcCIsImFuYW4ubmFnYW5vLmpwIiwiYW9raS5uYWdhbm8uanAiLCJhc2FoaS5uYWdhbm8uanAiLCJhenVtaW5vLm5hZ2Fuby5qcCIsImNoaWt1aG9rdS5uYWdhbm8uanAiLCJjaGlrdW1hLm5hZ2Fu'@;
put 'by5qcCIsImNoaW5vLm5hZ2Fuby5qcCIsImZ1amltaS5uYWdhbm8uanAiLCJoYWt1YmEubmFnYW5vLmpwIiwiaGFyYS5uYWdhbm8uanAiLCJoaXJheWEubmFnYW5vLmpwIiwiaWlkYS5uYWdhbm8uanAiLCJpaWppbWEubmFnYW5vLmpwIiwiaWl5YW1hLm5hZ2Fuby5qcCIsImlpenVuYS5uYWdh'@;
put 'bm8uanAiLCJpa2VkYS5uYWdhbm8uanAiLCJpa3VzYWthLm5hZ2Fuby5qcCIsImluYS5uYWdhbm8uanAiLCJrYXJ1aXphd2EubmFnYW5vLmpwIiwia2F3YWthbWkubmFnYW5vLmpwIiwia2lzby5uYWdhbm8uanAiLCJraXNvZnVrdXNoaW1hLm5hZ2Fuby5qcCIsImtpdGFhaWtpLm5hZ2Fuby5q'@;
put 'cCIsImtvbWFnYW5lLm5hZ2Fuby5qcCIsImtvbW9yby5uYWdhbm8uanAiLCJtYXRzdWthd2EubmFnYW5vLmpwIiwibWF0c3Vtb3RvLm5hZ2Fuby5qcCIsIm1pYXNhLm5hZ2Fuby5qcCIsIm1pbmFtaWFpa2kubmFnYW5vLmpwIiwibWluYW1pbWFraS5uYWdhbm8uanAiLCJtaW5hbWltaW5vd2Eu'@;
put 'bmFnYW5vLmpwIiwibWlub3dhLm5hZ2Fuby5qcCIsIm1peWFkYS5uYWdhbm8uanAiLCJtaXlvdGEubmFnYW5vLmpwIiwibW9jaGl6dWtpLm5hZ2Fuby5qcCIsIm5hZ2Fuby5uYWdhbm8uanAiLCJuYWdhd2EubmFnYW5vLmpwIiwibmFnaXNvLm5hZ2Fuby5qcCIsIm5ha2FnYXdhLm5hZ2Fuby5q'@;
put 'cCIsIm5ha2Fuby5uYWdhbm8uanAiLCJub3phd2FvbnNlbi5uYWdhbm8uanAiLCJvYnVzZS5uYWdhbm8uanAiLCJvZ2F3YS5uYWdhbm8uanAiLCJva2F5YS5uYWdhbm8uanAiLCJvbWFjaGkubmFnYW5vLmpwIiwib21pLm5hZ2Fuby5qcCIsIm9va3V3YS5uYWdhbm8uanAiLCJvb3NoaWthLm5h'@;
put 'Z2Fuby5qcCIsIm90YWtpLm5hZ2Fuby5qcCIsIm90YXJpLm5hZ2Fuby5qcCIsInNha2FlLm5hZ2Fuby5qcCIsInNha2FraS5uYWdhbm8uanAiLCJzYWt1Lm5hZ2Fuby5qcCIsInNha3Voby5uYWdhbm8uanAiLCJzaGltb3N1d2EubmFnYW5vLmpwIiwic2hpbmFub21hY2hpLm5hZ2Fuby5qcCIs'@;
put 'InNoaW9qaXJpLm5hZ2Fuby5qcCIsInN1d2EubmFnYW5vLmpwIiwic3V6YWthLm5hZ2Fuby5qcCIsInRha2FnaS5uYWdhbm8uanAiLCJ0YWthbW9yaS5uYWdhbm8uanAiLCJ0YWtheWFtYS5uYWdhbm8uanAiLCJ0YXRlc2hpbmEubmFnYW5vLmpwIiwidGF0c3Vuby5uYWdhbm8uanAiLCJ0b2dh'@;
put 'a3VzaGkubmFnYW5vLmpwIiwidG9ndXJhLm5hZ2Fuby5qcCIsInRvbWkubmFnYW5vLmpwIiwidWVkYS5uYWdhbm8uanAiLCJ3YWRhLm5hZ2Fuby5qcCIsInlhbWFnYXRhLm5hZ2Fuby5qcCIsInlhbWFub3VjaGkubmFnYW5vLmpwIiwieWFzYWthLm5hZ2Fuby5qcCIsInlhc3Vva2EubmFnYW5v'@;
put 'LmpwIiwiY2hpaml3YS5uYWdhc2FraS5qcCIsImZ1dHN1Lm5hZ2FzYWtpLmpwIiwiZ290by5uYWdhc2FraS5qcCIsImhhc2FtaS5uYWdhc2FraS5qcCIsImhpcmFkby5uYWdhc2FraS5qcCIsImlraS5uYWdhc2FraS5qcCIsImlzYWhheWEubmFnYXNha2kuanAiLCJrYXdhdGFuYS5uYWdhc2Fr'@;
put 'aS5qcCIsImt1Y2hpbm90c3UubmFnYXNha2kuanAiLCJtYXRzdXVyYS5uYWdhc2FraS5qcCIsIm5hZ2FzYWtpLm5hZ2FzYWtpLmpwIiwib2JhbWEubmFnYXNha2kuanAiLCJvbXVyYS5uYWdhc2FraS5qcCIsIm9zZXRvLm5hZ2FzYWtpLmpwIiwic2Fpa2FpLm5hZ2FzYWtpLmpwIiwic2FzZWJv'@;
put 'Lm5hZ2FzYWtpLmpwIiwic2VpaGkubmFnYXNha2kuanAiLCJzaGltYWJhcmEubmFnYXNha2kuanAiLCJzaGlua2FtaWdvdG8ubmFnYXNha2kuanAiLCJ0b2dpdHN1Lm5hZ2FzYWtpLmpwIiwidHN1c2hpbWEubmFnYXNha2kuanAiLCJ1bnplbi5uYWdhc2FraS5qcCIsImFuZG8ubmFyYS5qcCIs'@;
put 'Imdvc2UubmFyYS5qcCIsImhlZ3VyaS5uYXJhLmpwIiwiaGlnYXNoaXlvc2hpbm8ubmFyYS5qcCIsImlrYXJ1Z2EubmFyYS5qcCIsImlrb21hLm5hcmEuanAiLCJrYW1pa2l0YXlhbWEubmFyYS5qcCIsImthbm1ha2kubmFyYS5qcCIsImthc2hpYmEubmFyYS5qcCIsImthc2hpaGFyYS5uYXJh'@;
put 'LmpwIiwia2F0c3VyYWdpLm5hcmEuanAiLCJrYXdhaS5uYXJhLmpwIiwia2F3YWthbWkubmFyYS5qcCIsImthd2FuaXNoaS5uYXJhLmpwIiwia29yeW8ubmFyYS5qcCIsImt1cm90YWtpLm5hcmEuanAiLCJtaXRzdWUubmFyYS5qcCIsIm1peWFrZS5uYXJhLmpwIiwibmFyYS5uYXJhLmpwIiwi'@;
put 'bm9zZWdhd2EubmFyYS5qcCIsIm9qaS5uYXJhLmpwIiwib3VkYS5uYXJhLmpwIiwib3lvZG8ubmFyYS5qcCIsInNha3VyYWkubmFyYS5qcCIsInNhbmdvLm5hcmEuanAiLCJzaGltb2ljaGkubmFyYS5qcCIsInNoaW1va2l0YXlhbWEubmFyYS5qcCIsInNoaW5qby5uYXJhLmpwIiwic29uaS5u'@;
put 'YXJhLmpwIiwidGFrYXRvcmkubmFyYS5qcCIsInRhd2FyYW1vdG8ubmFyYS5qcCIsInRlbmthd2EubmFyYS5qcCIsInRlbnJpLm5hcmEuanAiLCJ1ZGEubmFyYS5qcCIsInlhbWF0b2tvcml5YW1hLm5hcmEuanAiLCJ5YW1hdG90YWthZGEubmFyYS5qcCIsInlhbWF6b2UubmFyYS5qcCIsInlv'@;
put 'c2hpbm8ubmFyYS5qcCIsImFnYS5uaWlnYXRhLmpwIiwiYWdhbm8ubmlpZ2F0YS5qcCIsImdvc2VuLm5paWdhdGEuanAiLCJpdG9pZ2F3YS5uaWlnYXRhLmpwIiwiaXp1bW96YWtpLm5paWdhdGEuanAiLCJqb2V0c3UubmlpZ2F0YS5qcCIsImthbW8ubmlpZ2F0YS5qcCIsImthcml3YS5uaWln'@;
put 'YXRhLmpwIiwia2FzaGl3YXpha2kubmlpZ2F0YS5qcCIsIm1pbmFtaXVvbnVtYS5uaWlnYXRhLmpwIiwibWl0c3VrZS5uaWlnYXRhLmpwIiwibXVpa2EubmlpZ2F0YS5qcCIsIm11cmFrYW1pLm5paWdhdGEuanAiLCJteW9rby5uaWlnYXRhLmpwIiwibmFnYW9rYS5uaWlnYXRhLmpwIiwibmlp'@;
put 'Z2F0YS5uaWlnYXRhLmpwIiwib2ppeWEubmlpZ2F0YS5qcCIsIm9taS5uaWlnYXRhLmpwIiwic2Fkby5uaWlnYXRhLmpwIiwic2Fuam8ubmlpZ2F0YS5qcCIsInNlaXJvLm5paWdhdGEuanAiLCJzZWlyb3UubmlpZ2F0YS5qcCIsInNla2lrYXdhLm5paWdhdGEuanAiLCJzaGliYXRhLm5paWdh'@;
put 'dGEuanAiLCJ0YWdhbWkubmlpZ2F0YS5qcCIsInRhaW5haS5uaWlnYXRhLmpwIiwidG9jaGlvLm5paWdhdGEuanAiLCJ0b2thbWFjaGkubmlpZ2F0YS5qcCIsInRzdWJhbWUubmlpZ2F0YS5qcCIsInRzdW5hbi5uaWlnYXRhLmpwIiwidW9udW1hLm5paWdhdGEuanAiLCJ5YWhpa28ubmlpZ2F0'@;
put 'YS5qcCIsInlvaXRhLm5paWdhdGEuanAiLCJ5dXphd2EubmlpZ2F0YS5qcCIsImJlcHB1Lm9pdGEuanAiLCJidW5nb29uby5vaXRhLmpwIiwiYnVuZ290YWthZGEub2l0YS5qcCIsImhhc2FtYS5vaXRhLmpwIiwiaGlqaS5vaXRhLmpwIiwiaGltZXNoaW1hLm9pdGEuanAiLCJoaXRhLm9pdGEu'@;
put 'anAiLCJrYW1pdHN1ZS5vaXRhLmpwIiwia29rb25vZS5vaXRhLmpwIiwia3VqdS5vaXRhLmpwIiwia3VuaXNha2kub2l0YS5qcCIsImt1c3Uub2l0YS5qcCIsIm9pdGEub2l0YS5qcCIsInNhaWtpLm9pdGEuanAiLCJ0YWtldGEub2l0YS5qcCIsInRzdWt1bWkub2l0YS5qcCIsInVzYS5vaXRh'@;
put 'LmpwIiwidXN1a2kub2l0YS5qcCIsInl1ZnUub2l0YS5qcCIsImFrYWl3YS5va2F5YW1hLmpwIiwiYXNha3VjaGkub2theWFtYS5qcCIsImJpemVuLm9rYXlhbWEuanAiLCJoYXlhc2hpbWEub2theWFtYS5qcCIsImliYXJhLm9rYXlhbWEuanAiLCJrYWdhbWluby5va2F5YW1hLmpwIiwia2Fz'@;
put 'YW9rYS5va2F5YW1hLmpwIiwia2liaWNodW8ub2theWFtYS5qcCIsImt1bWVuYW4ub2theWFtYS5qcCIsImt1cmFzaGlraS5va2F5YW1hLmpwIiwibWFuaXdhLm9rYXlhbWEuanAiLCJtaXNha2kub2theWFtYS5qcCIsIm5hZ2kub2theWFtYS5qcCIsIm5paW1pLm9rYXlhbWEuanAiLCJuaXNo'@;
put 'aWF3YWt1cmEub2theWFtYS5qcCIsIm9rYXlhbWEub2theWFtYS5qcCIsInNhdG9zaG8ub2theWFtYS5qcCIsInNldG91Y2hpLm9rYXlhbWEuanAiLCJzaGluam8ub2theWFtYS5qcCIsInNob28ub2theWFtYS5qcCIsInNvamEub2theWFtYS5qcCIsInRha2FoYXNoaS5va2F5YW1hLmpwIiwi'@;
put 'dGFtYW5vLm9rYXlhbWEuanAiLCJ0c3V5YW1hLm9rYXlhbWEuanAiLCJ3YWtlLm9rYXlhbWEuanAiLCJ5YWthZ2Uub2theWFtYS5qcCIsImFndW5pLm9raW5hd2EuanAiLCJnaW5vd2FuLm9raW5hd2EuanAiLCJnaW5vemEub2tpbmF3YS5qcCIsImd1c2hpa2FtaS5va2luYXdhLmpwIiwiaGFl'@;
put 'YmFydS5va2luYXdhLmpwIiwiaGlnYXNoaS5va2luYXdhLmpwIiwiaGlyYXJhLm9raW5hd2EuanAiLCJpaGV5YS5va2luYXdhLmpwIiwiaXNoaWdha2kub2tpbmF3YS5qcCIsImlzaGlrYXdhLm9raW5hd2EuanAiLCJpdG9tYW4ub2tpbmF3YS5qcCIsIml6ZW5hLm9raW5hd2EuanAiLCJrYWRl'@;
put 'bmEub2tpbmF3YS5qcCIsImtpbi5va2luYXdhLmpwIiwia2l0YWRhaXRvLm9raW5hd2EuanAiLCJraXRhbmFrYWd1c3VrdS5va2luYXdhLmpwIiwia3VtZWppbWEub2tpbmF3YS5qcCIsImt1bmlnYW1pLm9raW5hd2EuanAiLCJtaW5hbWlkYWl0by5va2luYXdhLmpwIiwibW90b2J1Lm9raW5h'@;
put 'd2EuanAiLCJuYWdvLm9raW5hd2EuanAiLCJuYWhhLm9raW5hd2EuanAiLCJuYWthZ3VzdWt1Lm9raW5hd2EuanAiLCJuYWtpamluLm9raW5hd2EuanAiLCJuYW5qby5va2luYXdhLmpwIiwibmlzaGloYXJhLm9raW5hd2EuanAiLCJvZ2ltaS5va2luYXdhLmpwIiwib2tpbmF3YS5va2luYXdh'@;
put 'LmpwIiwib25uYS5va2luYXdhLmpwIiwic2hpbW9qaS5va2luYXdhLmpwIiwidGFrZXRvbWkub2tpbmF3YS5qcCIsInRhcmFtYS5va2luYXdhLmpwIiwidG9rYXNoaWtpLm9raW5hd2EuanAiLCJ0b21pZ3VzdWt1Lm9raW5hd2EuanAiLCJ0b25ha2kub2tpbmF3YS5qcCIsInVyYXNvZS5va2lu'@;
put 'YXdhLmpwIiwidXJ1bWEub2tpbmF3YS5qcCIsInlhZXNlLm9raW5hd2EuanAiLCJ5b21pdGFuLm9raW5hd2EuanAiLCJ5b25hYmFydS5va2luYXdhLmpwIiwieW9uYWd1bmkub2tpbmF3YS5qcCIsInphbWFtaS5va2luYXdhLmpwIiwiYWJlbm8ub3Nha2EuanAiLCJjaGloYXlhYWthc2FrYS5v'@;
put 'c2FrYS5qcCIsImNodW8ub3Nha2EuanAiLCJkYWl0by5vc2FrYS5qcCIsImZ1amlpZGVyYS5vc2FrYS5qcCIsImhhYmlraW5vLm9zYWthLmpwIiwiaGFubmFuLm9zYWthLmpwIiwiaGlnYXNoaW9zYWthLm9zYWthLmpwIiwiaGlnYXNoaXN1bWl5b3NoaS5vc2FrYS5qcCIsImhpZ2FzaGl5b2Rv'@;
put 'Z2F3YS5vc2FrYS5qcCIsImhpcmFrYXRhLm9zYWthLmpwIiwiaWJhcmFraS5vc2FrYS5qcCIsImlrZWRhLm9zYWthLmpwIiwiaXp1bWkub3Nha2EuanAiLCJpenVtaW90c3Uub3Nha2EuanAiLCJpenVtaXNhbm8ub3Nha2EuanAiLCJrYWRvbWEub3Nha2EuanAiLCJrYWl6dWthLm9zYWthLmpw'@;
put 'Iiwia2FuYW4ub3Nha2EuanAiLCJrYXNoaXdhcmEub3Nha2EuanAiLCJrYXRhbm8ub3Nha2EuanAiLCJrYXdhY2hpbmFnYW5vLm9zYWthLmpwIiwia2lzaGl3YWRhLm9zYWthLmpwIiwia2l0YS5vc2FrYS5qcCIsImt1bWF0b3JpLm9zYWthLmpwIiwibWF0c3ViYXJhLm9zYWthLmpwIiwibWlu'@;
put 'YXRvLm9zYWthLmpwIiwibWlub2gub3Nha2EuanAiLCJtaXNha2kub3Nha2EuanAiLCJtb3JpZ3VjaGkub3Nha2EuanAiLCJuZXlhZ2F3YS5vc2FrYS5qcCIsIm5pc2hpLm9zYWthLmpwIiwibm9zZS5vc2FrYS5qcCIsIm9zYWthc2F5YW1hLm9zYWthLmpwIiwic2FrYWkub3Nha2EuanAiLCJz'@;
put 'YXlhbWEub3Nha2EuanAiLCJzZW5uYW4ub3Nha2EuanAiLCJzZXR0c3Uub3Nha2EuanAiLCJzaGlqb25hd2F0ZS5vc2FrYS5qcCIsInNoaW1hbW90by5vc2FrYS5qcCIsInN1aXRhLm9zYWthLmpwIiwidGFkYW9rYS5vc2FrYS5qcCIsInRhaXNoaS5vc2FrYS5qcCIsInRhamlyaS5vc2FrYS5q'@;
put 'cCIsInRha2Fpc2hpLm9zYWthLmpwIiwidGFrYXRzdWtpLm9zYWthLmpwIiwidG9uZGFiYXlhc2hpLm9zYWthLmpwIiwidG95b25ha2Eub3Nha2EuanAiLCJ0b3lvbm8ub3Nha2EuanAiLCJ5YW8ub3Nha2EuanAiLCJhcmlha2Uuc2FnYS5qcCIsImFyaXRhLnNhZ2EuanAiLCJmdWt1ZG9taS5z'@;
put 'YWdhLmpwIiwiZ2Vua2FpLnNhZ2EuanAiLCJoYW1hdGFtYS5zYWdhLmpwIiwiaGl6ZW4uc2FnYS5qcCIsImltYXJpLnNhZ2EuanAiLCJrYW1pbWluZS5zYWdhLmpwIiwia2FuemFraS5zYWdhLmpwIiwia2FyYXRzdS5zYWdhLmpwIiwia2FzaGltYS5zYWdhLmpwIiwia2l0YWdhdGEuc2FnYS5q'@;
put 'cCIsImtpdGFoYXRhLnNhZ2EuanAiLCJraXlhbWEuc2FnYS5qcCIsImtvdWhva3Uuc2FnYS5qcCIsImt5dXJhZ2kuc2FnYS5qcCIsIm5pc2hpYXJpdGEuc2FnYS5qcCIsIm9naS5zYWdhLmpwIiwib21hY2hpLnNhZ2EuanAiLCJvdWNoaS5zYWdhLmpwIiwic2FnYS5zYWdhLmpwIiwic2hpcm9p'@;
put 'c2hpLnNhZ2EuanAiLCJ0YWt1LnNhZ2EuanAiLCJ0YXJhLnNhZ2EuanAiLCJ0b3N1LnNhZ2EuanAiLCJ5b3NoaW5vZ2FyaS5zYWdhLmpwIiwiYXJha2F3YS5zYWl0YW1hLmpwIiwiYXNha2Euc2FpdGFtYS5qcCIsImNoaWNoaWJ1LnNhaXRhbWEuanAiLCJmdWppbWkuc2FpdGFtYS5qcCIsImZ1'@;
put 'amltaW5vLnNhaXRhbWEuanAiLCJmdWtheWEuc2FpdGFtYS5qcCIsImhhbm5vLnNhaXRhbWEuanAiLCJoYW55dS5zYWl0YW1hLmpwIiwiaGFzdWRhLnNhaXRhbWEuanAiLCJoYXRvZ2F5YS5zYWl0YW1hLmpwIiwiaGF0b3lhbWEuc2FpdGFtYS5qcCIsImhpZGFrYS5zYWl0YW1hLmpwIiwiaGln'@;
put 'YXNoaWNoaWNoaWJ1LnNhaXRhbWEuanAiLCJoaWdhc2hpbWF0c3V5YW1hLnNhaXRhbWEuanAiLCJob25qby5zYWl0YW1hLmpwIiwiaW5hLnNhaXRhbWEuanAiLCJpcnVtYS5zYWl0YW1hLmpwIiwiaXdhdHN1a2kuc2FpdGFtYS5qcCIsImthbWlpenVtaS5zYWl0YW1hLmpwIiwia2FtaWthd2Eu'@;
put 'c2FpdGFtYS5qcCIsImthbWlzYXRvLnNhaXRhbWEuanAiLCJrYXN1a2FiZS5zYWl0YW1hLmpwIiwia2F3YWdvZS5zYWl0YW1hLmpwIiwia2F3YWd1Y2hpLnNhaXRhbWEuanAiLCJrYXdhamltYS5zYWl0YW1hLmpwIiwia2F6by5zYWl0YW1hLmpwIiwia2l0YW1vdG8uc2FpdGFtYS5qcCIsImtv'@;
put 'c2hpZ2F5YS5zYWl0YW1hLmpwIiwia291bm9zdS5zYWl0YW1hLmpwIiwia3VraS5zYWl0YW1hLmpwIiwia3VtYWdheWEuc2FpdGFtYS5qcCIsIm1hdHN1YnVzaGkuc2FpdGFtYS5qcCIsIm1pbmFuby5zYWl0YW1hLmpwIiwibWlzYXRvLnNhaXRhbWEuanAiLCJtaXlhc2hpcm8uc2FpdGFtYS5q'@;
put 'cCIsIm1peW9zaGkuc2FpdGFtYS5qcCIsIm1vcm95YW1hLnNhaXRhbWEuanAiLCJuYWdhdG9yby5zYWl0YW1hLmpwIiwibmFtZWdhd2Euc2FpdGFtYS5qcCIsIm5paXphLnNhaXRhbWEuanAiLCJvZ2Fuby5zYWl0YW1hLmpwIiwib2dhd2Euc2FpdGFtYS5qcCIsIm9nb3NlLnNhaXRhbWEuanAi'@;
put 'LCJva2VnYXdhLnNhaXRhbWEuanAiLCJvbWl5YS5zYWl0YW1hLmpwIiwib3Rha2kuc2FpdGFtYS5qcCIsInJhbnphbi5zYWl0YW1hLmpwIiwicnlva2FtaS5zYWl0YW1hLmpwIiwic2FpdGFtYS5zYWl0YW1hLmpwIiwic2FrYWRvLnNhaXRhbWEuanAiLCJzYXR0ZS5zYWl0YW1hLmpwIiwic2F5'@;
put 'YW1hLnNhaXRhbWEuanAiLCJzaGlraS5zYWl0YW1hLmpwIiwic2hpcmFva2Euc2FpdGFtYS5qcCIsInNva2Euc2FpdGFtYS5qcCIsInN1Z2l0by5zYWl0YW1hLmpwIiwidG9kYS5zYWl0YW1hLmpwIiwidG9raWdhd2Euc2FpdGFtYS5qcCIsInRva29yb3phd2Euc2FpdGFtYS5qcCIsInRzdXJ1'@;
put 'Z2FzaGltYS5zYWl0YW1hLmpwIiwidXJhd2Euc2FpdGFtYS5qcCIsIndhcmFiaS5zYWl0YW1hLmpwIiwieWFzaGlvLnNhaXRhbWEuanAiLCJ5b2tvemUuc2FpdGFtYS5qcCIsInlvbm8uc2FpdGFtYS5qcCIsInlvcmlpLnNhaXRhbWEuanAiLCJ5b3NoaWRhLnNhaXRhbWEuanAiLCJ5b3NoaWth'@;
put 'd2Euc2FpdGFtYS5qcCIsInlvc2hpbWkuc2FpdGFtYS5qcCIsImFpc2hvLnNoaWdhLmpwIiwiZ2Ftby5zaGlnYS5qcCIsImhpZ2FzaGlvbWkuc2hpZ2EuanAiLCJoaWtvbmUuc2hpZ2EuanAiLCJrb2thLnNoaWdhLmpwIiwia29uYW4uc2hpZ2EuanAiLCJrb3NlaS5zaGlnYS5qcCIsImtvdG8u'@;
put 'c2hpZ2EuanAiLCJrdXNhdHN1LnNoaWdhLmpwIiwibWFpYmFyYS5zaGlnYS5qcCIsIm1vcml5YW1hLnNoaWdhLmpwIiwibmFnYWhhbWEuc2hpZ2EuanAiLCJuaXNoaWF6YWkuc2hpZ2EuanAiLCJub3RvZ2F3YS5zaGlnYS5qcCIsIm9taWhhY2hpbWFuLnNoaWdhLmpwIiwib3RzdS5zaGlnYS5q'@;
put 'cCIsInJpdHRvLnNoaWdhLmpwIiwicnl1b2guc2hpZ2EuanAiLCJ0YWthc2hpbWEuc2hpZ2EuanAiLCJ0YWthdHN1a2kuc2hpZ2EuanAiLCJ0b3JhaGltZS5zaGlnYS5qcCIsInRveW9zYXRvLnNoaWdhLmpwIiwieWFzdS5zaGlnYS5qcCIsImFrYWdpLnNoaW1hbmUuanAiLCJhbWEuc2hpbWFu'@;
put 'ZS5qcCIsImdvdHN1LnNoaW1hbmUuanAiLCJoYW1hZGEuc2hpbWFuZS5qcCIsImhpZ2FzaGlpenVtby5zaGltYW5lLmpwIiwiaGlrYXdhLnNoaW1hbmUuanAiLCJoaWtpbWkuc2hpbWFuZS5qcCIsIml6dW1vLnNoaW1hbmUuanAiLCJrYWtpbm9raS5zaGltYW5lLmpwIiwibWFzdWRhLnNoaW1h'@;
put 'bmUuanAiLCJtYXRzdWUuc2hpbWFuZS5qcCIsIm1pc2F0by5zaGltYW5lLmpwIiwibmlzaGlub3NoaW1hLnNoaW1hbmUuanAiLCJvaGRhLnNoaW1hbmUuanAiLCJva2lub3NoaW1hLnNoaW1hbmUuanAiLCJva3VpenVtby5zaGltYW5lLmpwIiwic2hpbWFuZS5zaGltYW5lLmpwIiwidGFtYXl1'@;
put 'LnNoaW1hbmUuanAiLCJ0c3V3YW5vLnNoaW1hbmUuanAiLCJ1bm5hbi5zaGltYW5lLmpwIiwieWFrdW1vLnNoaW1hbmUuanAiLCJ5YXN1Z2kuc2hpbWFuZS5qcCIsInlhdHN1a2Euc2hpbWFuZS5qcCIsImFyYWkuc2hpenVva2EuanAiLCJhdGFtaS5zaGl6dW9rYS5qcCIsImZ1amkuc2hpenVv'@;
put 'a2EuanAiLCJmdWppZWRhLnNoaXp1b2thLmpwIiwiZnVqaWthd2Euc2hpenVva2EuanAiLCJmdWppbm9taXlhLnNoaXp1b2thLmpwIiwiZnVrdXJvaS5zaGl6dW9rYS5qcCIsImdvdGVtYmEuc2hpenVva2EuanAiLCJoYWliYXJhLnNoaXp1b2thLmpwIiwiaGFtYW1hdHN1LnNoaXp1b2thLmpw'@;
put 'IiwiaGlnYXNoaWl6dS5zaGl6dW9rYS5qcCIsIml0by5zaGl6dW9rYS5qcCIsIml3YXRhLnNoaXp1b2thLmpwIiwiaXp1LnNoaXp1b2thLmpwIiwiaXp1bm9rdW5pLnNoaXp1b2thLmpwIiwia2FrZWdhd2Euc2hpenVva2EuanAiLCJrYW5uYW1pLnNoaXp1b2thLmpwIiwia2F3YW5laG9uLnNo'@;
put 'aXp1b2thLmpwIiwia2F3YXp1LnNoaXp1b2thLmpwIiwia2lrdWdhd2Euc2hpenVva2EuanAiLCJrb3NhaS5zaGl6dW9rYS5qcCIsIm1ha2lub2hhcmEuc2hpenVva2EuanAiLCJtYXRzdXpha2kuc2hpenVva2EuanAiLCJtaW5hbWlpenUuc2hpenVva2EuanAiLCJtaXNoaW1hLnNoaXp1b2th'@;
put 'LmpwIiwibW9yaW1hY2hpLnNoaXp1b2thLmpwIiwibmlzaGlpenUuc2hpenVva2EuanAiLCJudW1henUuc2hpenVva2EuanAiLCJvbWFlemFraS5zaGl6dW9rYS5qcCIsInNoaW1hZGEuc2hpenVva2EuanAiLCJzaGltaXp1LnNoaXp1b2thLmpwIiwic2hpbW9kYS5zaGl6dW9rYS5qcCIsInNo'@;
put 'aXp1b2thLnNoaXp1b2thLmpwIiwic3Vzb25vLnNoaXp1b2thLmpwIiwieWFpenUuc2hpenVva2EuanAiLCJ5b3NoaWRhLnNoaXp1b2thLmpwIiwiYXNoaWthZ2EudG9jaGlnaS5qcCIsImJhdG8udG9jaGlnaS5qcCIsImhhZ2EudG9jaGlnaS5qcCIsImljaGlrYWkudG9jaGlnaS5qcCIsIml3'@;
put 'YWZ1bmUudG9jaGlnaS5qcCIsImthbWlub2thd2EudG9jaGlnaS5qcCIsImthbnVtYS50b2NoaWdpLmpwIiwia2FyYXN1eWFtYS50b2NoaWdpLmpwIiwia3Vyb2lzby50b2NoaWdpLmpwIiwibWFzaGlrby50b2NoaWdpLmpwIiwibWlidS50b2NoaWdpLmpwIiwibW9rYS50b2NoaWdpLmpwIiwi'@;
put 'bW90ZWdpLnRvY2hpZ2kuanAiLCJuYXN1LnRvY2hpZ2kuanAiLCJuYXN1c2hpb2JhcmEudG9jaGlnaS5qcCIsIm5pa2tvLnRvY2hpZ2kuanAiLCJuaXNoaWthdGEudG9jaGlnaS5qcCIsIm5vZ2kudG9jaGlnaS5qcCIsIm9oaXJhLnRvY2hpZ2kuanAiLCJvaHRhd2FyYS50b2NoaWdpLmpwIiwi'@;
put 'b3lhbWEudG9jaGlnaS5qcCIsInNha3VyYS50b2NoaWdpLmpwIiwic2Fuby50b2NoaWdpLmpwIiwic2hpbW90c3VrZS50b2NoaWdpLmpwIiwic2hpb3lhLnRvY2hpZ2kuanAiLCJ0YWthbmV6YXdhLnRvY2hpZ2kuanAiLCJ0b2NoaWdpLnRvY2hpZ2kuanAiLCJ0c3VnYS50b2NoaWdpLmpwIiwi'@;
put 'dWppaWUudG9jaGlnaS5qcCIsInV0c3Vub21peWEudG9jaGlnaS5qcCIsInlhaXRhLnRvY2hpZ2kuanAiLCJhaXp1bWkudG9rdXNoaW1hLmpwIiwiYW5hbi50b2t1c2hpbWEuanAiLCJpY2hpYmEudG9rdXNoaW1hLmpwIiwiaXRhbm8udG9rdXNoaW1hLmpwIiwia2FpbmFuLnRva3VzaGltYS5q'@;
put 'cCIsImtvbWF0c3VzaGltYS50b2t1c2hpbWEuanAiLCJtYXRzdXNoaWdlLnRva3VzaGltYS5qcCIsIm1pbWEudG9rdXNoaW1hLmpwIiwibWluYW1pLnRva3VzaGltYS5qcCIsIm1peW9zaGkudG9rdXNoaW1hLmpwIiwibXVnaS50b2t1c2hpbWEuanAiLCJuYWthZ2F3YS50b2t1c2hpbWEuanAi'@;
put 'LCJuYXJ1dG8udG9rdXNoaW1hLmpwIiwic2FuYWdvY2hpLnRva3VzaGltYS5qcCIsInNoaXNoaWt1aS50b2t1c2hpbWEuanAiLCJ0b2t1c2hpbWEudG9rdXNoaW1hLmpwIiwid2FqaWtpLnRva3VzaGltYS5qcCIsImFkYWNoaS50b2t5by5qcCIsImFraXJ1bm8udG9reW8uanAiLCJha2lzaGlt'@;
put 'YS50b2t5by5qcCIsImFvZ2FzaGltYS50b2t5by5qcCIsImFyYWthd2EudG9reW8uanAiLCJidW5reW8udG9reW8uanAiLCJjaGl5b2RhLnRva3lvLmpwIiwiY2hvZnUudG9reW8uanAiLCJjaHVvLnRva3lvLmpwIiwiZWRvZ2F3YS50b2t5by5qcCIsImZ1Y2h1LnRva3lvLmpwIiwiZnVzc2Eu'@;
put 'dG9reW8uanAiLCJoYWNoaWpvLnRva3lvLmpwIiwiaGFjaGlvamkudG9reW8uanAiLCJoYW11cmEudG9reW8uanAiLCJoaWdhc2hpa3VydW1lLnRva3lvLmpwIiwiaGlnYXNoaW11cmF5YW1hLnRva3lvLmpwIiwiaGlnYXNoaXlhbWF0by50b2t5by5qcCIsImhpbm8udG9reW8uanAiLCJoaW5v'@;
put 'ZGUudG9reW8uanAiLCJoaW5vaGFyYS50b2t5by5qcCIsImluYWdpLnRva3lvLmpwIiwiaXRhYmFzaGkudG9reW8uanAiLCJrYXRzdXNoaWthLnRva3lvLmpwIiwia2l0YS50b2t5by5qcCIsImtpeW9zZS50b2t5by5qcCIsImtvZGFpcmEudG9reW8uanAiLCJrb2dhbmVpLnRva3lvLmpwIiwi'@;
put 'a29rdWJ1bmppLnRva3lvLmpwIiwia29tYWUudG9reW8uanAiLCJrb3RvLnRva3lvLmpwIiwia291enVzaGltYS50b2t5by5qcCIsImt1bml0YWNoaS50b2t5by5qcCIsIm1hY2hpZGEudG9reW8uanAiLCJtZWd1cm8udG9reW8uanAiLCJtaW5hdG8udG9reW8uanAiLCJtaXRha2EudG9reW8u'@;
put 'anAiLCJtaXp1aG8udG9reW8uanAiLCJtdXNhc2hpbXVyYXlhbWEudG9reW8uanAiLCJtdXNhc2hpbm8udG9reW8uanAiLCJuYWthbm8udG9reW8uanAiLCJuZXJpbWEudG9reW8uanAiLCJvZ2FzYXdhcmEudG9reW8uanAiLCJva3V0YW1hLnRva3lvLmpwIiwib21lLnRva3lvLmpwIiwib3No'@;
put 'aW1hLnRva3lvLmpwIiwib3RhLnRva3lvLmpwIiwic2V0YWdheWEudG9reW8uanAiLCJzaGlidXlhLnRva3lvLmpwIiwic2hpbmFnYXdhLnRva3lvLmpwIiwic2hpbmp1a3UudG9reW8uanAiLCJzdWdpbmFtaS50b2t5by5qcCIsInN1bWlkYS50b2t5by5qcCIsInRhY2hpa2F3YS50b2t5by5q'@;
put 'cCIsInRhaXRvLnRva3lvLmpwIiwidGFtYS50b2t5by5qcCIsInRvc2hpbWEudG9reW8uanAiLCJjaGl6dS50b3R0b3JpLmpwIiwiaGluby50b3R0b3JpLmpwIiwia2F3YWhhcmEudG90dG9yaS5qcCIsImtvZ2UudG90dG9yaS5qcCIsImtvdG91cmEudG90dG9yaS5qcCIsIm1pc2FzYS50b3R0'@;
put 'b3JpLmpwIiwibmFuYnUudG90dG9yaS5qcCIsIm5pY2hpbmFuLnRvdHRvcmkuanAiLCJzYWthaW1pbmF0by50b3R0b3JpLmpwIiwidG90dG9yaS50b3R0b3JpLmpwIiwid2FrYXNhLnRvdHRvcmkuanAiLCJ5YXp1LnRvdHRvcmkuanAiLCJ5b25hZ28udG90dG9yaS5qcCIsImFzYWhpLnRveWFt'@;
put 'YS5qcCIsImZ1Y2h1LnRveWFtYS5qcCIsImZ1a3VtaXRzdS50b3lhbWEuanAiLCJmdW5haGFzaGkudG95YW1hLmpwIiwiaGltaS50b3lhbWEuanAiLCJpbWl6dS50b3lhbWEuanAiLCJpbmFtaS50b3lhbWEuanAiLCJqb2hhbmEudG95YW1hLmpwIiwia2FtaWljaGkudG95YW1hLmpwIiwia3Vy'@;
put 'b2JlLnRveWFtYS5qcCIsIm5ha2FuaWlrYXdhLnRveWFtYS5qcCIsIm5hbWVyaWthd2EudG95YW1hLmpwIiwibmFudG8udG95YW1hLmpwIiwibnl1emVuLnRveWFtYS5qcCIsIm95YWJlLnRveWFtYS5qcCIsInRhaXJhLnRveWFtYS5qcCIsInRha2Fva2EudG95YW1hLmpwIiwidGF0ZXlhbWEu'@;
put 'dG95YW1hLmpwIiwidG9nYS50b3lhbWEuanAiLCJ0b25hbWkudG95YW1hLmpwIiwidG95YW1hLnRveWFtYS5qcCIsInVuYXp1a2kudG95YW1hLmpwIiwidW96dS50b3lhbWEuanAiLCJ5YW1hZGEudG95YW1hLmpwIiwiYXJpZGEud2FrYXlhbWEuanAiLCJhcmlkYWdhd2Eud2FrYXlhbWEuanAi'@;
put 'LCJnb2JvLndha2F5YW1hLmpwIiwiaGFzaGltb3RvLndha2F5YW1hLmpwIiwiaGlkYWthLndha2F5YW1hLmpwIiwiaGlyb2dhd2Eud2FrYXlhbWEuanAiLCJpbmFtaS53YWtheWFtYS5qcCIsIml3YWRlLndha2F5YW1hLmpwIiwia2FpbmFuLndha2F5YW1hLmpwIiwia2FtaXRvbmRhLndha2F5'@;
put 'YW1hLmpwIiwia2F0c3VyYWdpLndha2F5YW1hLmpwIiwia2ltaW5vLndha2F5YW1hLmpwIiwia2lub2thd2Eud2FrYXlhbWEuanAiLCJraXRheWFtYS53YWtheWFtYS5qcCIsImtveWEud2FrYXlhbWEuanAiLCJrb3phLndha2F5YW1hLmpwIiwia296YWdhd2Eud2FrYXlhbWEuanAiLCJrdWRv'@;
put 'eWFtYS53YWtheWFtYS5qcCIsImt1c2hpbW90by53YWtheWFtYS5qcCIsIm1paGFtYS53YWtheWFtYS5qcCIsIm1pc2F0by53YWtheWFtYS5qcCIsIm5hY2hpa2F0c3V1cmEud2FrYXlhbWEuanAiLCJzaGluZ3Uud2FrYXlhbWEuanAiLCJzaGlyYWhhbWEud2FrYXlhbWEuanAiLCJ0YWlqaS53'@;
put 'YWtheWFtYS5qcCIsInRhbmFiZS53YWtheWFtYS5qcCIsIndha2F5YW1hLndha2F5YW1hLmpwIiwieXVhc2Eud2FrYXlhbWEuanAiLCJ5dXJhLndha2F5YW1hLmpwIiwiYXNhaGkueWFtYWdhdGEuanAiLCJmdW5hZ2F0YS55YW1hZ2F0YS5qcCIsImhpZ2FzaGluZS55YW1hZ2F0YS5qcCIsImlp'@;
put 'ZGUueWFtYWdhdGEuanAiLCJrYWhva3UueWFtYWdhdGEuanAiLCJrYW1pbm95YW1hLnlhbWFnYXRhLmpwIiwia2FuZXlhbWEueWFtYWdhdGEuanAiLCJrYXdhbmlzaGkueWFtYWdhdGEuanAiLCJtYW11cm9nYXdhLnlhbWFnYXRhLmpwIiwibWlrYXdhLnlhbWFnYXRhLmpwIiwibXVyYXlhbWEu'@;
put 'eWFtYWdhdGEuanAiLCJuYWdhaS55YW1hZ2F0YS5qcCIsIm5ha2F5YW1hLnlhbWFnYXRhLmpwIiwibmFueW8ueWFtYWdhdGEuanAiLCJuaXNoaWthd2EueWFtYWdhdGEuanAiLCJvYmFuYXphd2EueWFtYWdhdGEuanAiLCJvZS55YW1hZ2F0YS5qcCIsIm9ndW5pLnlhbWFnYXRhLmpwIiwib2hr'@;
put 'dXJhLnlhbWFnYXRhLmpwIiwib2lzaGlkYS55YW1hZ2F0YS5qcCIsInNhZ2FlLnlhbWFnYXRhLmpwIiwic2FrYXRhLnlhbWFnYXRhLmpwIiwic2FrZWdhd2EueWFtYWdhdGEuanAiLCJzaGluam8ueWFtYWdhdGEuanAiLCJzaGlyYXRha2EueWFtYWdhdGEuanAiLCJzaG9uYWkueWFtYWdhdGEu'@;
put 'anAiLCJ0YWthaGF0YS55YW1hZ2F0YS5qcCIsInRlbmRvLnlhbWFnYXRhLmpwIiwidG96YXdhLnlhbWFnYXRhLmpwIiwidHN1cnVva2EueWFtYWdhdGEuanAiLCJ5YW1hZ2F0YS55YW1hZ2F0YS5qcCIsInlhbWFub2JlLnlhbWFnYXRhLmpwIiwieW9uZXphd2EueWFtYWdhdGEuanAiLCJ5dXph'@;
put 'LnlhbWFnYXRhLmpwIiwiYWJ1LnlhbWFndWNoaS5qcCIsImhhZ2kueWFtYWd1Y2hpLmpwIiwiaGlrYXJpLnlhbWFndWNoaS5qcCIsImhvZnUueWFtYWd1Y2hpLmpwIiwiaXdha3VuaS55YW1hZ3VjaGkuanAiLCJrdWRhbWF0c3UueWFtYWd1Y2hpLmpwIiwibWl0b3UueWFtYWd1Y2hpLmpwIiwi'@;
put 'bmFnYXRvLnlhbWFndWNoaS5qcCIsIm9zaGltYS55YW1hZ3VjaGkuanAiLCJzaGltb25vc2VraS55YW1hZ3VjaGkuanAiLCJzaHVuYW4ueWFtYWd1Y2hpLmpwIiwidGFidXNlLnlhbWFndWNoaS5qcCIsInRva3V5YW1hLnlhbWFndWNoaS5qcCIsInRveW90YS55YW1hZ3VjaGkuanAiLCJ1YmUu'@;
put 'eWFtYWd1Y2hpLmpwIiwieXV1LnlhbWFndWNoaS5qcCIsImNodW8ueWFtYW5hc2hpLmpwIiwiZG9zaGkueWFtYW5hc2hpLmpwIiwiZnVlZnVraS55YW1hbmFzaGkuanAiLCJmdWppa2F3YS55YW1hbmFzaGkuanAiLCJmdWppa2F3YWd1Y2hpa28ueWFtYW5hc2hpLmpwIiwiZnVqaXlvc2hpZGEu'@;
put 'eWFtYW5hc2hpLmpwIiwiaGF5YWthd2EueWFtYW5hc2hpLmpwIiwiaG9rdXRvLnlhbWFuYXNoaS5qcCIsImljaGlrYXdhbWlzYXRvLnlhbWFuYXNoaS5qcCIsImthaS55YW1hbmFzaGkuanAiLCJrb2Z1LnlhbWFuYXNoaS5qcCIsImtvc2h1LnlhbWFuYXNoaS5qcCIsImtvc3VnZS55YW1hbmFz'@;
put 'aGkuanAiLCJtaW5hbWktYWxwcy55YW1hbmFzaGkuanAiLCJtaW5vYnUueWFtYW5hc2hpLmpwIiwibmFrYW1pY2hpLnlhbWFuYXNoaS5qcCIsIm5hbmJ1LnlhbWFuYXNoaS5qcCIsIm5hcnVzYXdhLnlhbWFuYXNoaS5qcCIsIm5pcmFzYWtpLnlhbWFuYXNoaS5qcCIsIm5pc2hpa2F0c3VyYS55'@;
put 'YW1hbmFzaGkuanAiLCJvc2hpbm8ueWFtYW5hc2hpLmpwIiwib3RzdWtpLnlhbWFuYXNoaS5qcCIsInNob3dhLnlhbWFuYXNoaS5qcCIsInRhYmF5YW1hLnlhbWFuYXNoaS5qcCIsInRzdXJ1LnlhbWFuYXNoaS5qcCIsInVlbm9oYXJhLnlhbWFuYXNoaS5qcCIsInlhbWFuYWtha28ueWFtYW5h'@;
put 'c2hpLmpwIiwieWFtYW5hc2hpLnlhbWFuYXNoaS5qcCIsImtlIiwiYWMua2UiLCJjby5rZSIsImdvLmtlIiwiaW5mby5rZSIsIm1lLmtlIiwibW9iaS5rZSIsIm5lLmtlIiwib3Iua2UiLCJzYy5rZSIsImtnIiwiY29tLmtnIiwiZWR1LmtnIiwiZ292LmtnIiwibWlsLmtnIiwibmV0LmtnIiwi'@;
put 'b3JnLmtnIiwiKi5raCIsImtpIiwiYml6LmtpIiwiY29tLmtpIiwiZWR1LmtpIiwiZ292LmtpIiwiaW5mby5raSIsIm5ldC5raSIsIm9yZy5raSIsImttIiwiYXNzLmttIiwiY29tLmttIiwiZWR1LmttIiwiZ292LmttIiwibWlsLmttIiwibm9tLmttIiwib3JnLmttIiwicHJkLmttIiwidG0u'@;
put 'a20iLCJhc3NvLmttIiwiY29vcC5rbSIsImdvdXYua20iLCJtZWRlY2luLmttIiwibm90YWlyZXMua20iLCJwaGFybWFjaWVucy5rbSIsInByZXNzZS5rbSIsInZldGVyaW5haXJlLmttIiwia24iLCJlZHUua24iLCJnb3Yua24iLCJuZXQua24iLCJvcmcua24iLCJrcCIsImNvbS5rcCIsImVk'@;
put 'dS5rcCIsImdvdi5rcCIsIm9yZy5rcCIsInJlcC5rcCIsInRyYS5rcCIsImtyIiwiYWMua3IiLCJjby5rciIsImVzLmtyIiwiZ28ua3IiLCJocy5rciIsImtnLmtyIiwibWlsLmtyIiwibXMua3IiLCJuZS5rciIsIm9yLmtyIiwicGUua3IiLCJyZS5rciIsInNjLmtyIiwiYnVzYW4ua3IiLCJj'@;
put 'aHVuZ2J1ay5rciIsImNodW5nbmFtLmtyIiwiZGFlZ3Uua3IiLCJkYWVqZW9uLmtyIiwiZ2FuZ3dvbi5rciIsImd3YW5nanUua3IiLCJneWVvbmdidWsua3IiLCJneWVvbmdnaS5rciIsImd5ZW9uZ25hbS5rciIsImluY2hlb24ua3IiLCJqZWp1LmtyIiwiamVvbmJ1ay5rciIsImplb25uYW0u'@;
put 'a3IiLCJzZW91bC5rciIsInVsc2FuLmtyIiwia3ciLCJjb20ua3ciLCJlZHUua3ciLCJlbWIua3ciLCJnb3Yua3ciLCJpbmQua3ciLCJuZXQua3ciLCJvcmcua3ciLCJreSIsImNvbS5reSIsImVkdS5reSIsIm5ldC5reSIsIm9yZy5reSIsImt6IiwiY29tLmt6IiwiZWR1Lmt6IiwiZ292Lmt6'@;
put 'IiwibWlsLmt6IiwibmV0Lmt6Iiwib3JnLmt6IiwibGEiLCJjb20ubGEiLCJlZHUubGEiLCJnb3YubGEiLCJpbmZvLmxhIiwiaW50LmxhIiwibmV0LmxhIiwib3JnLmxhIiwicGVyLmxhIiwibGIiLCJjb20ubGIiLCJlZHUubGIiLCJnb3YubGIiLCJuZXQubGIiLCJvcmcubGIiLCJsYyIsImNv'@;
put 'LmxjIiwiY29tLmxjIiwiZWR1LmxjIiwiZ292LmxjIiwibmV0LmxjIiwib3JnLmxjIiwibGkiLCJsayIsImFjLmxrIiwiYXNzbi5sayIsImNvbS5sayIsImVkdS5sayIsImdvdi5sayIsImdycC5sayIsImhvdGVsLmxrIiwiaW50LmxrIiwibHRkLmxrIiwibmV0LmxrIiwibmdvLmxrIiwib3Jn'@;
put 'LmxrIiwic2NoLmxrIiwic29jLmxrIiwid2ViLmxrIiwibHIiLCJjb20ubHIiLCJlZHUubHIiLCJnb3YubHIiLCJuZXQubHIiLCJvcmcubHIiLCJscyIsImFjLmxzIiwiYml6LmxzIiwiY28ubHMiLCJlZHUubHMiLCJnb3YubHMiLCJpbmZvLmxzIiwibmV0LmxzIiwib3JnLmxzIiwic2MubHMi'@;
put 'LCJsdCIsImdvdi5sdCIsImx1IiwibHYiLCJhc24ubHYiLCJjb20ubHYiLCJjb25mLmx2IiwiZWR1Lmx2IiwiZ292Lmx2IiwiaWQubHYiLCJtaWwubHYiLCJuZXQubHYiLCJvcmcubHYiLCJseSIsImNvbS5seSIsImVkdS5seSIsImdvdi5seSIsImlkLmx5IiwibWVkLmx5IiwibmV0Lmx5Iiwi'@;
put 'b3JnLmx5IiwicGxjLmx5Iiwic2NoLmx5IiwibWEiLCJhYy5tYSIsImNvLm1hIiwiZ292Lm1hIiwibmV0Lm1hIiwib3JnLm1hIiwicHJlc3MubWEiLCJtYyIsImFzc28ubWMiLCJ0bS5tYyIsIm1kIiwibWUiLCJhYy5tZSIsImNvLm1lIiwiZWR1Lm1lIiwiZ292Lm1lIiwiaXRzLm1lIiwibmV0'@;
put 'Lm1lIiwib3JnLm1lIiwicHJpdi5tZSIsIm1nIiwiY28ubWciLCJjb20ubWciLCJlZHUubWciLCJnb3YubWciLCJtaWwubWciLCJub20ubWciLCJvcmcubWciLCJwcmQubWciLCJtaCIsIm1pbCIsIm1rIiwiY29tLm1rIiwiZWR1Lm1rIiwiZ292Lm1rIiwiaW5mLm1rIiwibmFtZS5tayIsIm5l'@;
put 'dC5tayIsIm9yZy5tayIsIm1sIiwiY29tLm1sIiwiZWR1Lm1sIiwiZ291di5tbCIsImdvdi5tbCIsIm5ldC5tbCIsIm9yZy5tbCIsInByZXNzZS5tbCIsIioubW0iLCJtbiIsImVkdS5tbiIsImdvdi5tbiIsIm9yZy5tbiIsIm1vIiwiY29tLm1vIiwiZWR1Lm1vIiwiZ292Lm1vIiwibmV0Lm1v'@;
put 'Iiwib3JnLm1vIiwibW9iaSIsIm1wIiwibXEiLCJtciIsImdvdi5tciIsIm1zIiwiY29tLm1zIiwiZWR1Lm1zIiwiZ292Lm1zIiwibmV0Lm1zIiwib3JnLm1zIiwibXQiLCJjb20ubXQiLCJlZHUubXQiLCJuZXQubXQiLCJvcmcubXQiLCJtdSIsImFjLm11IiwiY28ubXUiLCJjb20ubXUiLCJn'@;
put 'b3YubXUiLCJuZXQubXUiLCJvci5tdSIsIm9yZy5tdSIsIm11c2V1bSIsIm12IiwiYWVyby5tdiIsImJpei5tdiIsImNvbS5tdiIsImNvb3AubXYiLCJlZHUubXYiLCJnb3YubXYiLCJpbmZvLm12IiwiaW50Lm12IiwibWlsLm12IiwibXVzZXVtLm12IiwibmFtZS5tdiIsIm5ldC5tdiIsIm9y'@;
put 'Zy5tdiIsInByby5tdiIsIm13IiwiYWMubXciLCJiaXoubXciLCJjby5tdyIsImNvbS5tdyIsImNvb3AubXciLCJlZHUubXciLCJnb3YubXciLCJpbnQubXciLCJuZXQubXciLCJvcmcubXciLCJteCIsImNvbS5teCIsImVkdS5teCIsImdvYi5teCIsIm5ldC5teCIsIm9yZy5teCIsIm15Iiwi'@;
put 'Yml6Lm15IiwiY29tLm15IiwiZWR1Lm15IiwiZ292Lm15IiwibWlsLm15IiwibmFtZS5teSIsIm5ldC5teSIsIm9yZy5teSIsIm16IiwiYWMubXoiLCJhZHYubXoiLCJjby5teiIsImVkdS5teiIsImdvdi5teiIsIm1pbC5teiIsIm5ldC5teiIsIm9yZy5teiIsIm5hIiwiYWx0Lm5hIiwiY28u'@;
put 'bmEiLCJjb20ubmEiLCJnb3YubmEiLCJuZXQubmEiLCJvcmcubmEiLCJuYW1lIiwibmMiLCJhc3NvLm5jIiwibm9tLm5jIiwibmUiLCJuZXQiLCJuZiIsImFydHMubmYiLCJjb20ubmYiLCJmaXJtLm5mIiwiaW5mby5uZiIsIm5ldC5uZiIsIm90aGVyLm5mIiwicGVyLm5mIiwicmVjLm5mIiwi'@;
put 'c3RvcmUubmYiLCJ3ZWIubmYiLCJuZyIsImNvbS5uZyIsImVkdS5uZyIsImdvdi5uZyIsImkubmciLCJtaWwubmciLCJtb2JpLm5nIiwibmFtZS5uZyIsIm5ldC5uZyIsIm9yZy5uZyIsInNjaC5uZyIsIm5pIiwiYWMubmkiLCJiaXoubmkiLCJjby5uaSIsImNvbS5uaSIsImVkdS5uaSIsImdv'@;
put 'Yi5uaSIsImluLm5pIiwiaW5mby5uaSIsImludC5uaSIsIm1pbC5uaSIsIm5ldC5uaSIsIm5vbS5uaSIsIm9yZy5uaSIsIndlYi5uaSIsIm5sIiwibm8iLCJmaHMubm8iLCJmb2xrZWJpYmwubm8iLCJmeWxrZXNiaWJsLm5vIiwiaWRyZXR0Lm5vIiwibXVzZXVtLm5vIiwicHJpdi5ubyIsInZn'@;
put 'cy5ubyIsImRlcC5ubyIsImhlcmFkLm5vIiwia29tbXVuZS5ubyIsIm1pbC5ubyIsInN0YXQubm8iLCJhYS5ubyIsImFoLm5vIiwiYnUubm8iLCJmbS5ubyIsImhsLm5vIiwiaG0ubm8iLCJqYW4tbWF5ZW4ubm8iLCJtci5ubyIsIm5sLm5vIiwibnQubm8iLCJvZi5ubyIsIm9sLm5vIiwib3Ns'@;
put 'by5ubyIsInJsLm5vIiwic2Yubm8iLCJzdC5ubyIsInN2YWxiYXJkLm5vIiwidG0ubm8iLCJ0ci5ubyIsInZhLm5vIiwidmYubm8iLCJncy5hYS5ubyIsImdzLmFoLm5vIiwiZ3MuYnUubm8iLCJncy5mbS5ubyIsImdzLmhsLm5vIiwiZ3MuaG0ubm8iLCJncy5qYW4tbWF5ZW4ubm8iLCJncy5t'@;
put 'ci5ubyIsImdzLm5sLm5vIiwiZ3MubnQubm8iLCJncy5vZi5ubyIsImdzLm9sLm5vIiwiZ3Mub3Nsby5ubyIsImdzLnJsLm5vIiwiZ3Muc2Yubm8iLCJncy5zdC5ubyIsImdzLnN2YWxiYXJkLm5vIiwiZ3MudG0ubm8iLCJncy50ci5ubyIsImdzLnZhLm5vIiwiZ3MudmYubm8iLCJha3JlaGFt'@;
put 'bi5ubyIsIlx4ZTVrcmVoYW1uLm5vIiwiYWxnYXJkLm5vIiwiXHhlNWxnXHhlNXJkLm5vIiwiYXJuYS5ubyIsImJyb25ub3lzdW5kLm5vIiwiYnJceGY4bm5ceGY4eXN1bmQubm8iLCJicnVtdW5kZGFsLm5vIiwiYnJ5bmUubm8iLCJkcm9iYWsubm8iLCJkclx4ZjhiYWsubm8iLCJlZ2Vyc3Vu'@;
put 'ZC5ubyIsImZldHN1bmQubm8iLCJmbG9yby5ubyIsImZsb3JceGY4Lm5vIiwiZnJlZHJpa3N0YWQubm8iLCJob2trc3VuZC5ubyIsImhvbmVmb3NzLm5vIiwiaFx4ZjhuZWZvc3Mubm8iLCJqZXNzaGVpbS5ubyIsImpvcnBlbGFuZC5ubyIsImpceGY4cnBlbGFuZC5ubyIsImtpcmtlbmVzLm5v'@;
put 'Iiwia29wZXJ2aWsubm8iLCJrcm9rc3RhZGVsdmEubm8iLCJsYW5nZXZhZy5ubyIsImxhbmdldlx4ZTVnLm5vIiwibGVpcnZpay5ubyIsIm1qb25kYWxlbi5ubyIsIm1qXHhmOG5kYWxlbi5ubyIsIm1vLWktcmFuYS5ubyIsIm1vc2pvZW4ubm8iLCJtb3NqXHhmOGVuLm5vIiwibmVzb2RkdGFu'@;
put 'Z2VuLm5vIiwib3JrYW5nZXIubm8iLCJvc295cm8ubm8iLCJvc1x4Zjh5cm8ubm8iLCJyYWhvbHQubm8iLCJyXHhlNWhvbHQubm8iLCJzYW5kbmVzc2pvZW4ubm8iLCJzYW5kbmVzc2pceGY4ZW4ubm8iLCJza2Vkc21va29yc2V0Lm5vIiwic2xhdHR1bS5ubyIsInNwamVsa2F2aWsubm8iLCJz'@;
put 'dGF0aGVsbGUubm8iLCJzdGF2ZXJuLm5vIiwic3Rqb3JkYWxzaGFsc2VuLm5vIiwic3RqXHhmOHJkYWxzaGFsc2VuLm5vIiwidGFuYW5nZXIubm8iLCJ0cmFuYnkubm8iLCJ2b3NzZXZhbmdlbi5ubyIsImFhcmJvcnRlLm5vIiwiYWVqcmllLm5vIiwiYWZqb3JkLm5vIiwiXHhlNWZqb3JkLm5v'@;
put 'IiwiYWdkZW5lcy5ubyIsIm5lcy5ha2Vyc2h1cy5ubyIsImFrbm9sdW9rdGEubm8iLCJceGUxa1x1MDE0Ym9sdW9rdGEubm8iLCJhbC5ubyIsIlx4ZTVsLm5vIiwiYWxhaGVhZGp1Lm5vIiwiXHhlMWxhaGVhZGp1Lm5vIiwiYWxlc3VuZC5ubyIsIlx4ZTVsZXN1bmQubm8iLCJhbHN0YWhhdWcu'@;
put 'bm8iLCJhbHRhLm5vIiwiXHhlMWx0XHhlMS5ubyIsImFsdmRhbC5ubyIsImFtbGkubm8iLCJceGU1bWxpLm5vIiwiYW1vdC5ubyIsIlx4ZTVtb3Qubm8iLCJhbmRhc3VvbG8ubm8iLCJhbmRlYnUubm8iLCJhbmRveS5ubyIsImFuZFx4Zjh5Lm5vIiwiYXJkYWwubm8iLCJceGU1cmRhbC5ubyIs'@;
put 'ImFyZW1hcmsubm8iLCJhcmVuZGFsLm5vIiwiXHhlNXMubm8iLCJhc2VyYWwubm8iLCJceGU1c2VyYWwubm8iLCJhc2tlci5ubyIsImFza2ltLm5vIiwiYXNrb3kubm8iLCJhc2tceGY4eS5ubyIsImFza3ZvbGwubm8iLCJhc25lcy5ubyIsIlx4ZTVzbmVzLm5vIiwiYXVkbmVkYWxuLm5vIiwi'@;
put 'YXVrcmEubm8iLCJhdXJlLm5vIiwiYXVybGFuZC5ubyIsImF1cnNrb2ctaG9sYW5kLm5vIiwiYXVyc2tvZy1oXHhmOGxhbmQubm8iLCJhdXN0ZXZvbGwubm8iLCJhdXN0cmhlaW0ubm8iLCJhdmVyb3kubm8iLCJhdmVyXHhmOHkubm8iLCJiYWRhZGRqYS5ubyIsImJceGU1ZFx4ZTVkZGpceGU1'@;
put 'Lm5vIiwiYlx4ZTZydW0ubm8iLCJiYWhjYXZ1b3RuYS5ubyIsImJceGUxaGNhdnVvdG5hLm5vIiwiYmFoY2NhdnVvdG5hLm5vIiwiYlx4ZTFoY2NhdnVvdG5hLm5vIiwiYmFpZGFyLm5vIiwiYlx4ZTFpZFx4ZTFyLm5vIiwiYmFqZGRhci5ubyIsImJceGUxamRkYXIubm8iLCJiYWxhdC5ubyIs'@;
put 'ImJceGUxbFx4ZTF0Lm5vIiwiYmFsZXN0cmFuZC5ubyIsImJhbGxhbmdlbi5ubyIsImJhbHNmam9yZC5ubyIsImJhbWJsZS5ubyIsImJhcmR1Lm5vIiwiYmFydW0ubm8iLCJiYXRzZmpvcmQubm8iLCJiXHhlNXRzZmpvcmQubm8iLCJiZWFyYWx2YWhraS5ubyIsImJlYXJhbHZceGUxaGtpLm5v'@;
put 'IiwiYmVhcmR1Lm5vIiwiYmVpYXJuLm5vIiwiYmVyZy5ubyIsImJlcmdlbi5ubyIsImJlcmxldmFnLm5vIiwiYmVybGV2XHhlNWcubm8iLCJiaWV2YXQubm8iLCJiaWV2XHhlMXQubm8iLCJiaW5kYWwubm8iLCJiaXJrZW5lcy5ubyIsImJqYXJrb3kubm8iLCJiamFya1x4Zjh5Lm5vIiwiYmpl'@;
put 'cmtyZWltLm5vIiwiYmp1Z24ubm8iLCJib2RvLm5vIiwiYm9kXHhmOC5ubyIsImJva24ubm8iLCJib21sby5ubyIsImJceGY4bWxvLm5vIiwiYnJlbWFuZ2VyLm5vIiwiYnJvbm5veS5ubyIsImJyXHhmOG5uXHhmOHkubm8iLCJidWRlamp1Lm5vIiwibmVzLmJ1c2tlcnVkLm5vIiwiYnlnbGFu'@;
put 'ZC5ubyIsImJ5a2xlLm5vIiwiY2FoY2VzdW9sby5ubyIsIlx1MDEwZFx4ZTFoY2VzdW9sby5ubyIsImRhdnZlbmphcmdhLm5vIiwiZGF2dmVualx4ZTFyZ2Eubm8iLCJkYXZ2ZXNpaWRhLm5vIiwiZGVhdG51Lm5vIiwiZGllbGRkYW51b3JyaS5ubyIsImRpdnRhc3Z1b2RuYS5ubyIsImRpdnR0'@;
put 'YXN2dW90bmEubm8iLCJkb25uYS5ubyIsImRceGY4bm5hLm5vIiwiZG92cmUubm8iLCJkcmFtbWVuLm5vIiwiZHJhbmdlZGFsLm5vIiwiZHlyb3kubm8iLCJkeXJceGY4eS5ubyIsImVpZC5ubyIsImVpZGZqb3JkLm5vIiwiZWlkc2Jlcmcubm8iLCJlaWRza29nLm5vIiwiZWlkc3ZvbGwubm8i'@;
put 'LCJlaWdlcnN1bmQubm8iLCJlbHZlcnVtLm5vIiwiZW5lYmFray5ubyIsImVuZ2VyZGFsLm5vIiwiZXRuZS5ubyIsImV0bmVkYWwubm8iLCJldmVuYXNzaS5ubyIsImV2ZW5ceGUxXHUwMTYxXHUwMTYxaS5ubyIsImV2ZW5lcy5ubyIsImV2amUtb2ctaG9ybm5lcy5ubyIsImZhcnN1bmQubm8i'@;
put 'LCJmYXVza2Uubm8iLCJmZWRqZS5ubyIsImZldC5ubyIsImZpbm5veS5ubyIsImZpbm5ceGY4eS5ubyIsImZpdGphci5ubyIsImZqYWxlci5ubyIsImZqZWxsLm5vIiwiZmxhLm5vIiwiZmxceGU1Lm5vIiwiZmxha3N0YWQubm8iLCJmbGF0YW5nZXIubm8iLCJmbGVra2Vmam9yZC5ubyIsImZs'@;
put 'ZXNiZXJnLm5vIiwiZmxvcmEubm8iLCJmb2xsZGFsLm5vIiwiZm9yZGUubm8iLCJmXHhmOHJkZS5ubyIsImZvcnNhbmQubm8iLCJmb3NuZXMubm8iLCJmclx4ZTZuYS5ubyIsImZyYW5hLm5vIiwiZnJlaS5ubyIsImZyb2duLm5vIiwiZnJvbGFuZC5ubyIsImZyb3N0YS5ubyIsImZyb3lhLm5v'@;
put 'IiwiZnJceGY4eWEubm8iLCJmdW9pc2t1Lm5vIiwiZnVvc3Nrby5ubyIsImZ1c2Eubm8iLCJmeXJlc2RhbC5ubyIsImdhaXZ1b3RuYS5ubyIsImdceGUxaXZ1b3RuYS5ubyIsImdhbHNhLm5vIiwiZ1x4ZTFsc1x4ZTEubm8iLCJnYW12aWsubm8iLCJnYW5nYXZpaWthLm5vIiwiZ1x4ZTFcdTAx'@;
put 'NGJnYXZpaWthLm5vIiwiZ2F1bGFyLm5vIiwiZ2F1c2RhbC5ubyIsImdpZWh0YXZ1b2F0bmEubm8iLCJnaWxkZXNrYWwubm8iLCJnaWxkZXNrXHhlNWwubm8iLCJnaXNrZS5ubyIsImdqZW1uZXMubm8iLCJnamVyZHJ1bS5ubyIsImdqZXJzdGFkLm5vIiwiZ2plc2RhbC5ubyIsImdqb3Zpay5u'@;
put 'byIsImdqXHhmOHZpay5ubyIsImdsb3BwZW4ubm8iLCJnb2wubm8iLCJncmFuLm5vIiwiZ3JhbmUubm8iLCJncmFudmluLm5vIiwiZ3JhdGFuZ2VuLm5vIiwiZ3JpbXN0YWQubm8iLCJncm9uZy5ubyIsImdydWUubm8iLCJndWxlbi5ubyIsImd1b3ZkYWdlYWlkbnUubm8iLCJoYS5ubyIsImhc'@;
put 'eGU1Lm5vIiwiaGFibWVyLm5vIiwiaFx4ZTFibWVyLm5vIiwiaGFkc2VsLm5vIiwiaFx4ZTZnZWJvc3RhZC5ubyIsImhhZ2Vib3N0YWQubm8iLCJoYWxkZW4ubm8iLCJoYWxzYS5ubyIsImhhbWFyLm5vIiwiaGFtYXJveS5ubyIsImhhbW1hcmZlYXN0YS5ubyIsImhceGUxbW1ceGUxcmZlYXN0'@;
put 'YS5ubyIsImhhbW1lcmZlc3Qubm8iLCJoYXBtaXIubm8iLCJoXHhlMXBtaXIubm8iLCJoYXJhbS5ubyIsImhhcmVpZC5ubyIsImhhcnN0YWQubm8iLCJoYXN2aWsubm8iLCJoYXR0ZmplbGxkYWwubm8iLCJoYXVnZXN1bmQubm8iLCJvcy5oZWRtYXJrLm5vIiwidmFsZXIuaGVkbWFyay5ubyIs'@;
put 'InZceGU1bGVyLmhlZG1hcmsubm8iLCJoZW1uZS5ubyIsImhlbW5lcy5ubyIsImhlbXNlZGFsLm5vIiwiaGl0cmEubm8iLCJoamFydGRhbC5ubyIsImhqZWxtZWxhbmQubm8iLCJob2JvbC5ubyIsImhvYlx4ZjhsLm5vIiwiaG9mLm5vIiwiaG9sLm5vIiwiaG9sZS5ubyIsImhvbG1lc3RyYW5k'@;
put 'Lm5vIiwiaG9sdGFsZW4ubm8iLCJob2x0XHhlNWxlbi5ubyIsIm9zLmhvcmRhbGFuZC5ubyIsImhvcm5pbmRhbC5ubyIsImhvcnRlbi5ubyIsImhveWFuZ2VyLm5vIiwiaFx4Zjh5YW5nZXIubm8iLCJob3lsYW5kZXQubm8iLCJoXHhmOHlsYW5kZXQubm8iLCJodXJkYWwubm8iLCJodXJ1bS5u'@;
put 'byIsImh2YWxlci5ubyIsImh5bGxlc3RhZC5ubyIsImliZXN0YWQubm8iLCJpbmRlcm95Lm5vIiwiaW5kZXJceGY4eS5ubyIsIml2ZWxhbmQubm8iLCJpdmd1Lm5vIiwiamV2bmFrZXIubm8iLCJqb2xzdGVyLm5vIiwialx4Zjhsc3Rlci5ubyIsImpvbmRhbC5ubyIsImthZmpvcmQubm8iLCJr'@;
put 'XHhlNWZqb3JkLm5vIiwia2FyYXNqb2hrYS5ubyIsImtceGUxclx4ZTFcdTAxNjFqb2hrYS5ubyIsImthcmFzam9rLm5vIiwia2FybHNveS5ubyIsImthcm1veS5ubyIsImthcm1ceGY4eS5ubyIsImthdXRva2Vpbm8ubm8iLCJrbGFidS5ubyIsImtsXHhlNmJ1Lm5vIiwia2xlcHAubm8iLCJr'@;
put 'b25nc2Jlcmcubm8iLCJrb25nc3Zpbmdlci5ubyIsImtyYWFuZ2hrZS5ubyIsImtyXHhlNWFuZ2hrZS5ubyIsImtyYWdlcm8ubm8iLCJrcmFnZXJceGY4Lm5vIiwia3Jpc3RpYW5zYW5kLm5vIiwia3Jpc3RpYW5zdW5kLm5vIiwia3JvZHNoZXJhZC5ubyIsImtyXHhmOGRzaGVyYWQubm8iLCJr'@;
put 'dlx4ZTZmam9yZC5ubyIsImt2XHhlNm5hbmdlbi5ubyIsImt2YWZqb3JkLm5vIiwia3ZhbHN1bmQubm8iLCJrdmFtLm5vIiwia3ZhbmFuZ2VuLm5vIiwia3ZpbmVzZGFsLm5vIiwia3Zpbm5oZXJhZC5ubyIsImt2aXRlc2VpZC5ubyIsImt2aXRzb3kubm8iLCJrdml0c1x4Zjh5Lm5vIiwibGFh'@;
put 'a2VzdnVlbWllLm5vIiwibFx4ZTZyZGFsLm5vIiwibGFocHBpLm5vIiwibFx4ZTFocHBpLm5vIiwibGFyZGFsLm5vIiwibGFydmlrLm5vIiwibGF2YWdpcy5ubyIsImxhdmFuZ2VuLm5vIiwibGVhbmdhdmlpa2Eubm8iLCJsZWFcdTAxNGJnYXZpaWthLm5vIiwibGViZXNieS5ubyIsImxlaWth'@;
put 'bmdlci5ubyIsImxlaXJmam9yZC5ubyIsImxla2Eubm8iLCJsZWtzdmlrLm5vIiwibGVudmlrLm5vIiwibGVyZGFsLm5vIiwibGVzamEubm8iLCJsZXZhbmdlci5ubyIsImxpZXIubm8iLCJsaWVybmUubm8iLCJsaWxsZWhhbW1lci5ubyIsImxpbGxlc2FuZC5ubyIsImxpbmRhcy5ubyIsImxp'@;
put 'bmRceGU1cy5ubyIsImxpbmRlc25lcy5ubyIsImxvYWJhdC5ubyIsImxvYWJceGUxdC5ubyIsImxvZGluZ2VuLm5vIiwibFx4ZjhkaW5nZW4ubm8iLCJsb20ubm8iLCJsb3BwYS5ubyIsImxvcmVuc2tvZy5ubyIsImxceGY4cmVuc2tvZy5ubyIsImxvdGVuLm5vIiwibFx4Zjh0ZW4ubm8iLCJs'@;
put 'dW5kLm5vIiwibHVubmVyLm5vIiwibHVyb3kubm8iLCJsdXJceGY4eS5ubyIsImx1c3Rlci5ubyIsImx5bmdkYWwubm8iLCJseW5nZW4ubm8iLCJtYWxhdHZ1b3BtaS5ubyIsIm1ceGUxbGF0dnVvcG1pLm5vIiwibWFsc2Vsdi5ubyIsIm1ceGU1bHNlbHYubm8iLCJtYWx2aWsubm8iLCJtYW5k'@;
put 'YWwubm8iLCJtYXJrZXIubm8iLCJtYXJuYXJkYWwubm8iLCJtYXNmam9yZGVuLm5vIiwibWFzb3kubm8iLCJtXHhlNXNceGY4eS5ubyIsIm1hdHRhLXZhcmpqYXQubm8iLCJtXHhlMXR0YS12XHhlMXJqamF0Lm5vIiwibWVsYW5kLm5vIiwibWVsZGFsLm5vIiwibWVsaHVzLm5vIiwibWVsb3ku'@;
put 'bm8iLCJtZWxceGY4eS5ubyIsIm1lcmFrZXIubm8iLCJtZXJceGU1a2VyLm5vIiwibWlkc3VuZC5ubyIsIm1pZHRyZS1nYXVsZGFsLm5vIiwibW9hcmVrZS5ubyIsIm1vXHhlNXJla2Uubm8iLCJtb2RhbGVuLm5vIiwibW9kdW0ubm8iLCJtb2xkZS5ubyIsImhlcm95Lm1vcmUtb2ctcm9tc2Rh'@;
put 'bC5ubyIsInNhbmRlLm1vcmUtb2ctcm9tc2RhbC5ubyIsImhlclx4Zjh5Lm1ceGY4cmUtb2ctcm9tc2RhbC5ubyIsInNhbmRlLm1ceGY4cmUtb2ctcm9tc2RhbC5ubyIsIm1vc2tlbmVzLm5vIiwibW9zcy5ubyIsIm1vc3Zpay5ubyIsIm11b3NhdC5ubyIsIm11b3NceGUxdC5ubyIsIm5hYW1l'@;
put 'c2pldnVlbWllLm5vIiwiblx4ZTVceGU1bWVzamV2dWVtaWUubm8iLCJuXHhlNnJceGY4eS5ubyIsIm5hbWRhbHNlaWQubm8iLCJuYW1zb3Mubm8iLCJuYW1zc2tvZ2FuLm5vIiwibmFubmVzdGFkLm5vIiwibmFyb3kubm8iLCJuYXJ2aWlrYS5ubyIsIm5hcnZpay5ubyIsIm5hdXN0ZGFsLm5v'@;
put 'IiwibmF2dW90bmEubm8iLCJuXHhlMXZ1b3RuYS5ubyIsIm5lZHJlLWVpa2VyLm5vIiwibmVzbmEubm8iLCJuZXNvZGRlbi5ubyIsIm5lc3NlYnkubm8iLCJuZXNzZXQubm8iLCJuaXNzZWRhbC5ubyIsIm5pdHRlZGFsLm5vIiwibm9yZC1hdXJkYWwubm8iLCJub3JkLWZyb24ubm8iLCJub3Jk'@;
put 'LW9kYWwubm8iLCJub3JkZGFsLm5vIiwibm9yZGthcHAubm8iLCJiby5ub3JkbGFuZC5ubyIsImJceGY4Lm5vcmRsYW5kLm5vIiwiaGVyb3kubm9yZGxhbmQubm8iLCJoZXJceGY4eS5ub3JkbGFuZC5ubyIsIm5vcmRyZS1sYW5kLm5vIiwibm9yZHJlaXNhLm5vIiwibm9yZS1vZy11dmRhbC5u'@;
put 'byIsIm5vdG9kZGVuLm5vIiwibm90dGVyb3kubm8iLCJuXHhmOHR0ZXJceGY4eS5ubyIsIm9kZGEubm8iLCJva3NuZXMubm8iLCJceGY4a3NuZXMubm8iLCJvbWFzdnVvdG5hLm5vIiwib3BwZGFsLm5vIiwib3BwZWdhcmQubm8iLCJvcHBlZ1x4ZTVyZC5ubyIsIm9ya2RhbC5ubyIsIm9ybGFu'@;
put 'ZC5ubyIsIlx4ZjhybGFuZC5ubyIsIm9yc2tvZy5ubyIsIlx4Zjhyc2tvZy5ubyIsIm9yc3RhLm5vIiwiXHhmOHJzdGEubm8iLCJvc2VuLm5vIiwib3N0ZXJveS5ubyIsIm9zdGVyXHhmOHkubm8iLCJ2YWxlci5vc3Rmb2xkLm5vIiwidlx4ZTVsZXIuXHhmOHN0Zm9sZC5ubyIsIm9zdHJlLXRv'@;
put 'dGVuLm5vIiwiXHhmOHN0cmUtdG90ZW4ubm8iLCJvdmVyaGFsbGEubm8iLCJvdnJlLWVpa2VyLm5vIiwiXHhmOHZyZS1laWtlci5ubyIsIm95ZXIubm8iLCJceGY4eWVyLm5vIiwib3lnYXJkZW4ubm8iLCJceGY4eWdhcmRlbi5ubyIsIm95c3RyZS1zbGlkcmUubm8iLCJceGY4eXN0cmUtc2xp'@;
put 'ZHJlLm5vIiwicG9yc2FuZ2VyLm5vIiwicG9yc2FuZ3Uubm8iLCJwb3JzXHhlMVx1MDE0Ymd1Lm5vIiwicG9yc2dydW5uLm5vIiwicmFkZS5ubyIsInJceGU1ZGUubm8iLCJyYWRveS5ubyIsInJhZFx4Zjh5Lm5vIiwiclx4ZTZsaW5nZW4ubm8iLCJyYWhra2VyYXZqdS5ubyIsInJceGUxaGtr'@;
put 'ZXJceGUxdmp1Lm5vIiwicmFpc2Eubm8iLCJyXHhlMWlzYS5ubyIsInJha2tlc3RhZC5ubyIsInJhbGluZ2VuLm5vIiwicmFuYS5ubyIsInJhbmRhYmVyZy5ubyIsInJhdW1hLm5vIiwicmVuZGFsZW4ubm8iLCJyZW5uZWJ1Lm5vIiwicmVubmVzb3kubm8iLCJyZW5uZXNceGY4eS5ubyIsInJp'@;
put 'bmRhbC5ubyIsInJpbmdlYnUubm8iLCJyaW5nZXJpa2Uubm8iLCJyaW5nc2FrZXIubm8iLCJyaXNvci5ubyIsInJpc1x4ZjhyLm5vIiwicmlzc2Eubm8iLCJyb2FuLm5vIiwicm9kb3kubm8iLCJyXHhmOGRceGY4eS5ubyIsInJvbGxhZy5ubyIsInJvbXNhLm5vIiwicm9tc2tvZy5ubyIsInJc'@;
put 'eGY4bXNrb2cubm8iLCJyb3Jvcy5ubyIsInJceGY4cm9zLm5vIiwicm9zdC5ubyIsInJceGY4c3Qubm8iLCJyb3lrZW4ubm8iLCJyXHhmOHlrZW4ubm8iLCJyb3lydmlrLm5vIiwiclx4Zjh5cnZpay5ubyIsInJ1b3ZhdC5ubyIsInJ5Z2dlLm5vIiwic2FsYW5nZW4ubm8iLCJzYWxhdC5ubyIs'@;
put 'InNceGUxbGF0Lm5vIiwic1x4ZTFsXHhlMXQubm8iLCJzYWx0ZGFsLm5vIiwic2FtbmFuZ2VyLm5vIiwic2FuZGVmam9yZC5ubyIsInNhbmRuZXMubm8iLCJzYW5kb3kubm8iLCJzYW5kXHhmOHkubm8iLCJzYXJwc2Jvcmcubm8iLCJzYXVkYS5ubyIsInNhdWhlcmFkLm5vIiwic2VsLm5vIiwi'@;
put 'c2VsYnUubm8iLCJzZWxqZS5ubyIsInNlbGpvcmQubm8iLCJzaWVsbGFrLm5vIiwic2lnZGFsLm5vIiwic2lsamFuLm5vIiwic2lyZGFsLm5vIiwic2thbml0Lm5vIiwic2tceGUxbml0Lm5vIiwic2thbmxhbmQubm8iLCJza1x4ZTVubGFuZC5ubyIsInNrYXVuLm5vIiwic2tlZHNtby5ubyIs'@;
put 'InNraS5ubyIsInNraWVuLm5vIiwic2tpZXJ2YS5ubyIsInNraWVydlx4ZTEubm8iLCJza2lwdHZldC5ubyIsInNramFrLm5vIiwic2tqXHhlNWsubm8iLCJza2plcnZveS5ubyIsInNramVydlx4Zjh5Lm5vIiwic2tvZGplLm5vIiwic21vbGEubm8iLCJzbVx4ZjhsYS5ubyIsInNuYWFzZS5u'@;
put 'byIsInNuXHhlNWFzZS5ubyIsInNuYXNhLm5vIiwic25ceGU1c2Eubm8iLCJzbmlsbGZqb3JkLm5vIiwic25vYXNhLm5vIiwic29nbmRhbC5ubyIsInNvZ25lLm5vIiwic1x4ZjhnbmUubm8iLCJzb2tuZGFsLm5vIiwic29sYS5ubyIsInNvbHVuZC5ubyIsInNvbW5hLm5vIiwic1x4ZjhtbmEu'@;
put 'bm8iLCJzb25kcmUtbGFuZC5ubyIsInNceGY4bmRyZS1sYW5kLm5vIiwic29uZ2RhbGVuLm5vIiwic29yLWF1cmRhbC5ubyIsInNceGY4ci1hdXJkYWwubm8iLCJzb3ItZnJvbi5ubyIsInNceGY4ci1mcm9uLm5vIiwic29yLW9kYWwubm8iLCJzXHhmOHItb2RhbC5ubyIsInNvci12YXJhbmdl'@;
put 'ci5ubyIsInNceGY4ci12YXJhbmdlci5ubyIsInNvcmZvbGQubm8iLCJzXHhmOHJmb2xkLm5vIiwic29ycmVpc2Eubm8iLCJzXHhmOHJyZWlzYS5ubyIsInNvcnRsYW5kLm5vIiwic29ydW0ubm8iLCJzXHhmOHJ1bS5ubyIsInNweWRlYmVyZy5ubyIsInN0YW5nZS5ubyIsInN0YXZhbmdlci5u'@;
put 'byIsInN0ZWlnZW4ubm8iLCJzdGVpbmtqZXIubm8iLCJzdGpvcmRhbC5ubyIsInN0alx4ZjhyZGFsLm5vIiwic3Rva2tlLm5vIiwic3Rvci1lbHZkYWwubm8iLCJzdG9yZC5ubyIsInN0b3JkYWwubm8iLCJzdG9yZmpvcmQubm8iLCJzdHJhbmQubm8iLCJzdHJhbmRhLm5vIiwic3RyeW4ubm8i'@;
put 'LCJzdWxhLm5vIiwic3VsZGFsLm5vIiwic3VuZC5ubyIsInN1bm5kYWwubm8iLCJzdXJuYWRhbC5ubyIsInN2ZWlvLm5vIiwic3ZlbHZpay5ubyIsInN5a2t5bHZlbi5ubyIsInRhbmEubm8iLCJiby50ZWxlbWFyay5ubyIsImJceGY4LnRlbGVtYXJrLm5vIiwidGltZS5ubyIsInRpbmd2b2xs'@;
put 'Lm5vIiwidGlubi5ubyIsInRqZWxkc3VuZC5ubyIsInRqb21lLm5vIiwidGpceGY4bWUubm8iLCJ0b2trZS5ubyIsInRvbGdhLm5vIiwidG9uc2Jlcmcubm8iLCJ0XHhmOG5zYmVyZy5ubyIsInRvcnNrZW4ubm8iLCJ0clx4ZTZuYS5ubyIsInRyYW5hLm5vIiwidHJhbm95Lm5vIiwidHJhblx4'@;
put 'Zjh5Lm5vIiwidHJvYW5kaW4ubm8iLCJ0cm9nc3RhZC5ubyIsInRyXHhmOGdzdGFkLm5vIiwidHJvbXNhLm5vIiwidHJvbXNvLm5vIiwidHJvbXNceGY4Lm5vIiwidHJvbmRoZWltLm5vIiwidHJ5c2lsLm5vIiwidHZlZGVzdHJhbmQubm8iLCJ0eWRhbC5ubyIsInR5bnNldC5ubyIsInR5c2Zq'@;
put 'b3JkLm5vIiwidHlzbmVzLm5vIiwidHlzdlx4ZTZyLm5vIiwidHlzdmFyLm5vIiwidWxsZW5zYWtlci5ubyIsInVsbGVuc3Zhbmcubm8iLCJ1bHZpay5ubyIsInVuamFyZ2Eubm8iLCJ1bmpceGUxcmdhLm5vIiwidXRzaXJhLm5vIiwidmFhcHN0ZS5ubyIsInZhZHNvLm5vIiwidmFkc1x4Zjgu'@;
put 'bm8iLCJ2XHhlNnJceGY4eS5ubyIsInZhZ2Eubm8iLCJ2XHhlNWdceGU1Lm5vIiwidmFnYW4ubm8iLCJ2XHhlNWdhbi5ubyIsInZhZ3NveS5ubyIsInZceGU1Z3NceGY4eS5ubyIsInZha3NkYWwubm8iLCJ2YWxsZS5ubyIsInZhbmcubm8iLCJ2YW55bHZlbi5ubyIsInZhcmRvLm5vIiwidmFy'@;
put 'ZFx4Zjgubm8iLCJ2YXJnZ2F0Lm5vIiwidlx4ZTFyZ2dceGUxdC5ubyIsInZhcm95Lm5vIiwidmVmc24ubm8iLCJ2ZWdhLm5vIiwidmVnYXJzaGVpLm5vIiwidmVnXHhlNXJzaGVpLm5vIiwidmVubmVzbGEubm8iLCJ2ZXJkYWwubm8iLCJ2ZXJyYW4ubm8iLCJ2ZXN0Ynkubm8iLCJzYW5kZS52'@;
put 'ZXN0Zm9sZC5ubyIsInZlc3RuZXMubm8iLCJ2ZXN0cmUtc2xpZHJlLm5vIiwidmVzdHJlLXRvdGVuLm5vIiwidmVzdHZhZ295Lm5vIiwidmVzdHZceGU1Z1x4Zjh5Lm5vIiwidmV2ZWxzdGFkLm5vIiwidmlrLm5vIiwidmlrbmEubm8iLCJ2aW5kYWZqb3JkLm5vIiwidm9hZ2F0Lm5vIiwidm9s'@;
put 'ZGEubm8iLCJ2b3NzLm5vIiwiKi5ucCIsIm5yIiwiYml6Lm5yIiwiY29tLm5yIiwiZWR1Lm5yIiwiZ292Lm5yIiwiaW5mby5uciIsIm5ldC5uciIsIm9yZy5uciIsIm51IiwibnoiLCJhYy5ueiIsImNvLm56IiwiY3JpLm56IiwiZ2Vlay5ueiIsImdlbi5ueiIsImdvdnQubnoiLCJoZWFsdGgu'@;
put 'bnoiLCJpd2kubnoiLCJraXdpLm56IiwibWFvcmkubnoiLCJtXHUwMTAxb3JpLm56IiwibWlsLm56IiwibmV0Lm56Iiwib3JnLm56IiwicGFybGlhbWVudC5ueiIsInNjaG9vbC5ueiIsIm9tIiwiY28ub20iLCJjb20ub20iLCJlZHUub20iLCJnb3Yub20iLCJtZWQub20iLCJtdXNldW0ub20i'@;
put 'LCJuZXQub20iLCJvcmcub20iLCJwcm8ub20iLCJvbmlvbiIsIm9yZyIsInBhIiwiYWJvLnBhIiwiYWMucGEiLCJjb20ucGEiLCJlZHUucGEiLCJnb2IucGEiLCJpbmcucGEiLCJtZWQucGEiLCJuZXQucGEiLCJub20ucGEiLCJvcmcucGEiLCJzbGQucGEiLCJwZSIsImNvbS5wZSIsImVkdS5w'@;
put 'ZSIsImdvYi5wZSIsIm1pbC5wZSIsIm5ldC5wZSIsIm5vbS5wZSIsIm9yZy5wZSIsInBmIiwiY29tLnBmIiwiZWR1LnBmIiwib3JnLnBmIiwiKi5wZyIsInBoIiwiY29tLnBoIiwiZWR1LnBoIiwiZ292LnBoIiwiaS5waCIsIm1pbC5waCIsIm5ldC5waCIsIm5nby5waCIsIm9yZy5waCIsInBr'@;
put 'IiwiYWMucGsiLCJiaXoucGsiLCJjb20ucGsiLCJlZHUucGsiLCJmYW0ucGsiLCJna3AucGsiLCJnb2IucGsiLCJnb2cucGsiLCJnb2sucGsiLCJnb24ucGsiLCJnb3AucGsiLCJnb3MucGsiLCJnb3YucGsiLCJuZXQucGsiLCJvcmcucGsiLCJ3ZWIucGsiLCJwbCIsImNvbS5wbCIsIm5ldC5w'@;
put 'bCIsIm9yZy5wbCIsImFncm8ucGwiLCJhaWQucGwiLCJhdG0ucGwiLCJhdXRvLnBsIiwiYml6LnBsIiwiZWR1LnBsIiwiZ21pbmEucGwiLCJnc20ucGwiLCJpbmZvLnBsIiwibWFpbC5wbCIsIm1lZGlhLnBsIiwibWlhc3RhLnBsIiwibWlsLnBsIiwibmllcnVjaG9tb3NjaS5wbCIsIm5vbS5w'@;
put 'bCIsInBjLnBsIiwicG93aWF0LnBsIiwicHJpdi5wbCIsInJlYWxlc3RhdGUucGwiLCJyZWwucGwiLCJzZXgucGwiLCJzaG9wLnBsIiwic2tsZXAucGwiLCJzb3MucGwiLCJzemtvbGEucGwiLCJ0YXJnaS5wbCIsInRtLnBsIiwidG91cmlzbS5wbCIsInRyYXZlbC5wbCIsInR1cnlzdHlrYS5w'@;
put 'bCIsImdvdi5wbCIsImFwLmdvdi5wbCIsImdyaXcuZ292LnBsIiwiaWMuZ292LnBsIiwiaXMuZ292LnBsIiwia21wc3AuZ292LnBsIiwia29uc3VsYXQuZ292LnBsIiwia3Bwc3AuZ292LnBsIiwia3dwLmdvdi5wbCIsImt3cHNwLmdvdi5wbCIsIm11cC5nb3YucGwiLCJtdy5nb3YucGwiLCJv'@;
put 'aWEuZ292LnBsIiwib2lybS5nb3YucGwiLCJva2UuZ292LnBsIiwib293Lmdvdi5wbCIsIm9zY2hyLmdvdi5wbCIsIm91bS5nb3YucGwiLCJwYS5nb3YucGwiLCJwaW5iLmdvdi5wbCIsInBpdy5nb3YucGwiLCJwby5nb3YucGwiLCJwci5nb3YucGwiLCJwc3AuZ292LnBsIiwicHNzZS5nb3Yu'@;
put 'cGwiLCJwdXAuZ292LnBsIiwicnpndy5nb3YucGwiLCJzYS5nb3YucGwiLCJzZG4uZ292LnBsIiwic2tvLmdvdi5wbCIsInNvLmdvdi5wbCIsInNyLmdvdi5wbCIsInN0YXJvc3R3by5nb3YucGwiLCJ1Zy5nb3YucGwiLCJ1Z2ltLmdvdi5wbCIsInVtLmdvdi5wbCIsInVtaWcuZ292LnBsIiwi'@;
put 'dXBvdy5nb3YucGwiLCJ1cHBvLmdvdi5wbCIsInVzLmdvdi5wbCIsInV3Lmdvdi5wbCIsInV6cy5nb3YucGwiLCJ3aWYuZ292LnBsIiwid2lpaC5nb3YucGwiLCJ3aW5iLmdvdi5wbCIsIndpb3MuZ292LnBsIiwid2l0ZC5nb3YucGwiLCJ3aXcuZ292LnBsIiwid2t6Lmdvdi5wbCIsIndzYS5n'@;
put 'b3YucGwiLCJ3c2tyLmdvdi5wbCIsIndzc2UuZ292LnBsIiwid3Vvei5nb3YucGwiLCJ3em1pdXcuZ292LnBsIiwienAuZ292LnBsIiwienBpc2RuLmdvdi5wbCIsImF1Z3VzdG93LnBsIiwiYmFiaWEtZ29yYS5wbCIsImJlZHppbi5wbCIsImJlc2tpZHkucGwiLCJiaWFsb3dpZXphLnBsIiwi'@;
put 'YmlhbHlzdG9rLnBsIiwiYmllbGF3YS5wbCIsImJpZXN6Y3phZHkucGwiLCJib2xlc2xhd2llYy5wbCIsImJ5ZGdvc3pjei5wbCIsImJ5dG9tLnBsIiwiY2llc3p5bi5wbCIsImN6ZWxhZHoucGwiLCJjemVzdC5wbCIsImRsdWdvbGVrYS5wbCIsImVsYmxhZy5wbCIsImVsay5wbCIsImdsb2dv'@;
put 'dy5wbCIsImduaWV6bm8ucGwiLCJnb3JsaWNlLnBsIiwiZ3JhamV3by5wbCIsImlsYXdhLnBsIiwiamF3b3J6bm8ucGwiLCJqZWxlbmlhLWdvcmEucGwiLCJqZ29yYS5wbCIsImthbGlzei5wbCIsImthcnBhY3oucGwiLCJrYXJ0dXp5LnBsIiwia2FzenVieS5wbCIsImthdG93aWNlLnBsIiwi'@;
put 'a2F6aW1pZXJ6LWRvbG55LnBsIiwia2Vwbm8ucGwiLCJrZXRyenluLnBsIiwia2xvZHprby5wbCIsImtvYmllcnp5Y2UucGwiLCJrb2xvYnJ6ZWcucGwiLCJrb25pbi5wbCIsImtvbnNrb3dvbGEucGwiLCJrdXRuby5wbCIsImxhcHkucGwiLCJsZWJvcmsucGwiLCJsZWduaWNhLnBsIiwibGV6'@;
put 'YWpzay5wbCIsImxpbWFub3dhLnBsIiwibG9temEucGwiLCJsb3dpY3oucGwiLCJsdWJpbi5wbCIsImx1a293LnBsIiwibWFsYm9yay5wbCIsIm1hbG9wb2xza2EucGwiLCJtYXpvd3N6ZS5wbCIsIm1henVyeS5wbCIsIm1pZWxlYy5wbCIsIm1pZWxuby5wbCIsIm1yYWdvd28ucGwiLCJuYWts'@;
put 'by5wbCIsIm5vd2FydWRhLnBsIiwibnlzYS5wbCIsIm9sYXdhLnBsIiwib2xlY2tvLnBsIiwib2xrdXN6LnBsIiwib2xzenR5bi5wbCIsIm9wb2N6bm8ucGwiLCJvcG9sZS5wbCIsIm9zdHJvZGEucGwiLCJvc3Ryb2xla2EucGwiLCJvc3Ryb3dpZWMucGwiLCJvc3Ryb3d3bGtwLnBsIiwicGls'@;
put 'YS5wbCIsInBpc3oucGwiLCJwb2RoYWxlLnBsIiwicG9kbGFzaWUucGwiLCJwb2xrb3dpY2UucGwiLCJwb21vcnNraWUucGwiLCJwb21vcnplLnBsIiwicHJvY2hvd2ljZS5wbCIsInBydXN6a293LnBsIiwicHJ6ZXdvcnNrLnBsIiwicHVsYXd5LnBsIiwicmFkb20ucGwiLCJyYXdhLW1hei5w'@;
put 'bCIsInJ5Ym5pay5wbCIsInJ6ZXN6b3cucGwiLCJzYW5vay5wbCIsInNlam55LnBsIiwic2tvY3pvdy5wbCIsInNsYXNrLnBsIiwic2x1cHNrLnBsIiwic29zbm93aWVjLnBsIiwic3RhbG93YS13b2xhLnBsIiwic3RhcmFjaG93aWNlLnBsIiwic3RhcmdhcmQucGwiLCJzdXdhbGtpLnBsIiwi'@;
put 'c3dpZG5pY2EucGwiLCJzd2llYm9kemluLnBsIiwic3dpbm91anNjaWUucGwiLCJzemN6ZWNpbi5wbCIsInN6Y3p5dG5vLnBsIiwidGFybm9icnplZy5wbCIsInRnb3J5LnBsIiwidHVyZWsucGwiLCJ0eWNoeS5wbCIsInVzdGthLnBsIiwid2FsYnJ6eWNoLnBsIiwid2FybWlhLnBsIiwid2Fy'@;
put 'c3phd2EucGwiLCJ3YXcucGwiLCJ3ZWdyb3cucGwiLCJ3aWVsdW4ucGwiLCJ3bG9jbC5wbCIsIndsb2NsYXdlay5wbCIsIndvZHppc2xhdy5wbCIsIndvbG9taW4ucGwiLCJ3cm9jbGF3LnBsIiwiemFjaHBvbW9yLnBsIiwiemFnYW4ucGwiLCJ6YXJvdy5wbCIsInpnb3JhLnBsIiwiemdvcnpl'@;
put 'bGVjLnBsIiwicG0iLCJwbiIsImNvLnBuIiwiZWR1LnBuIiwiZ292LnBuIiwibmV0LnBuIiwib3JnLnBuIiwicG9zdCIsInByIiwiYml6LnByIiwiY29tLnByIiwiZWR1LnByIiwiZ292LnByIiwiaW5mby5wciIsImlzbGEucHIiLCJuYW1lLnByIiwibmV0LnByIiwib3JnLnByIiwicHJvLnBy'@;
put 'IiwiYWMucHIiLCJlc3QucHIiLCJwcm9mLnByIiwicHJvIiwiYWFhLnBybyIsImFjYS5wcm8iLCJhY2N0LnBybyIsImF2b2NhdC5wcm8iLCJiYXIucHJvIiwiY3BhLnBybyIsImVuZy5wcm8iLCJqdXIucHJvIiwibGF3LnBybyIsIm1lZC5wcm8iLCJyZWNodC5wcm8iLCJwcyIsImNvbS5wcyIs'@;
put 'ImVkdS5wcyIsImdvdi5wcyIsIm5ldC5wcyIsIm9yZy5wcyIsInBsby5wcyIsInNlYy5wcyIsInB0IiwiY29tLnB0IiwiZWR1LnB0IiwiZ292LnB0IiwiaW50LnB0IiwibmV0LnB0Iiwibm9tZS5wdCIsIm9yZy5wdCIsInB1YmwucHQiLCJwdyIsImJlbGF1LnB3IiwiY28ucHciLCJlZC5wdyIs'@;
put 'ImdvLnB3Iiwib3IucHciLCJweSIsImNvbS5weSIsImNvb3AucHkiLCJlZHUucHkiLCJnb3YucHkiLCJtaWwucHkiLCJuZXQucHkiLCJvcmcucHkiLCJxYSIsImNvbS5xYSIsImVkdS5xYSIsImdvdi5xYSIsIm1pbC5xYSIsIm5hbWUucWEiLCJuZXQucWEiLCJvcmcucWEiLCJzY2gucWEiLCJy'@;
put 'ZSIsImFzc28ucmUiLCJjb20ucmUiLCJybyIsImFydHMucm8iLCJjb20ucm8iLCJmaXJtLnJvIiwiaW5mby5ybyIsIm5vbS5ybyIsIm50LnJvIiwib3JnLnJvIiwicmVjLnJvIiwic3RvcmUucm8iLCJ0bS5ybyIsInd3dy5ybyIsInJzIiwiYWMucnMiLCJjby5ycyIsImVkdS5ycyIsImdvdi5y'@;
put 'cyIsImluLnJzIiwib3JnLnJzIiwicnUiLCJydyIsImFjLnJ3IiwiY28ucnciLCJjb29wLnJ3IiwiZ292LnJ3IiwibWlsLnJ3IiwibmV0LnJ3Iiwib3JnLnJ3Iiwic2EiLCJjb20uc2EiLCJlZHUuc2EiLCJnb3Yuc2EiLCJtZWQuc2EiLCJuZXQuc2EiLCJvcmcuc2EiLCJwdWIuc2EiLCJzY2gu'@;
put 'c2EiLCJzYiIsImNvbS5zYiIsImVkdS5zYiIsImdvdi5zYiIsIm5ldC5zYiIsIm9yZy5zYiIsInNjIiwiY29tLnNjIiwiZWR1LnNjIiwiZ292LnNjIiwibmV0LnNjIiwib3JnLnNjIiwic2QiLCJjb20uc2QiLCJlZHUuc2QiLCJnb3Yuc2QiLCJpbmZvLnNkIiwibWVkLnNkIiwibmV0LnNkIiwi'@;
put 'b3JnLnNkIiwidHYuc2QiLCJzZSIsImEuc2UiLCJhYy5zZSIsImIuc2UiLCJiZC5zZSIsImJyYW5kLnNlIiwiYy5zZSIsImQuc2UiLCJlLnNlIiwiZi5zZSIsImZoLnNlIiwiZmhzay5zZSIsImZodi5zZSIsImcuc2UiLCJoLnNlIiwiaS5zZSIsImsuc2UiLCJrb21mb3JiLnNlIiwia29tbXVu'@;
put 'YWxmb3JidW5kLnNlIiwia29tdnV4LnNlIiwibC5zZSIsImxhbmJpYi5zZSIsIm0uc2UiLCJuLnNlIiwibmF0dXJicnVrc2d5bW4uc2UiLCJvLnNlIiwib3JnLnNlIiwicC5zZSIsInBhcnRpLnNlIiwicHAuc2UiLCJwcmVzcy5zZSIsInIuc2UiLCJzLnNlIiwidC5zZSIsInRtLnNlIiwidS5z'@;
put 'ZSIsIncuc2UiLCJ4LnNlIiwieS5zZSIsInouc2UiLCJzZyIsImNvbS5zZyIsImVkdS5zZyIsImdvdi5zZyIsIm5ldC5zZyIsIm9yZy5zZyIsInNoIiwiY29tLnNoIiwiZ292LnNoIiwibWlsLnNoIiwibmV0LnNoIiwib3JnLnNoIiwic2kiLCJzaiIsInNrIiwic2wiLCJjb20uc2wiLCJlZHUu'@;
put 'c2wiLCJnb3Yuc2wiLCJuZXQuc2wiLCJvcmcuc2wiLCJzbSIsInNuIiwiYXJ0LnNuIiwiY29tLnNuIiwiZWR1LnNuIiwiZ291di5zbiIsIm9yZy5zbiIsInBlcnNvLnNuIiwidW5pdi5zbiIsInNvIiwiY29tLnNvIiwiZWR1LnNvIiwiZ292LnNvIiwibWUuc28iLCJuZXQuc28iLCJvcmcuc28i'@;
put 'LCJzciIsInNzIiwiYml6LnNzIiwiY28uc3MiLCJjb20uc3MiLCJlZHUuc3MiLCJnb3Yuc3MiLCJtZS5zcyIsIm5ldC5zcyIsIm9yZy5zcyIsInNjaC5zcyIsInN0IiwiY28uc3QiLCJjb20uc3QiLCJjb25zdWxhZG8uc3QiLCJlZHUuc3QiLCJlbWJhaXhhZGEuc3QiLCJtaWwuc3QiLCJuZXQu'@;
put 'c3QiLCJvcmcuc3QiLCJwcmluY2lwZS5zdCIsInNhb3RvbWUuc3QiLCJzdG9yZS5zdCIsInN1Iiwic3YiLCJjb20uc3YiLCJlZHUuc3YiLCJnb2Iuc3YiLCJvcmcuc3YiLCJyZWQuc3YiLCJzeCIsImdvdi5zeCIsInN5IiwiY29tLnN5IiwiZWR1LnN5IiwiZ292LnN5IiwibWlsLnN5IiwibmV0'@;
put 'LnN5Iiwib3JnLnN5Iiwic3oiLCJhYy5zeiIsImNvLnN6Iiwib3JnLnN6IiwidGMiLCJ0ZCIsInRlbCIsInRmIiwidGciLCJ0aCIsImFjLnRoIiwiY28udGgiLCJnby50aCIsImluLnRoIiwibWkudGgiLCJuZXQudGgiLCJvci50aCIsInRqIiwiYWMudGoiLCJiaXoudGoiLCJjby50aiIsImNv'@;
put 'bS50aiIsImVkdS50aiIsImdvLnRqIiwiZ292LnRqIiwiaW50LnRqIiwibWlsLnRqIiwibmFtZS50aiIsIm5ldC50aiIsIm5pYy50aiIsIm9yZy50aiIsInRlc3QudGoiLCJ3ZWIudGoiLCJ0ayIsInRsIiwiZ292LnRsIiwidG0iLCJjby50bSIsImNvbS50bSIsImVkdS50bSIsImdvdi50bSIs'@;
put 'Im1pbC50bSIsIm5ldC50bSIsIm5vbS50bSIsIm9yZy50bSIsInRuIiwiY29tLnRuIiwiZW5zLnRuIiwiZmluLnRuIiwiZ292LnRuIiwiaW5kLnRuIiwiaW5mby50biIsImludGwudG4iLCJtaW5jb20udG4iLCJuYXQudG4iLCJuZXQudG4iLCJvcmcudG4iLCJwZXJzby50biIsInRvdXJpc20u'@;
put 'dG4iLCJ0byIsImNvbS50byIsImVkdS50byIsImdvdi50byIsIm1pbC50byIsIm5ldC50byIsIm9yZy50byIsInRyIiwiYXYudHIiLCJiYnMudHIiLCJiZWwudHIiLCJiaXoudHIiLCJjb20udHIiLCJkci50ciIsImVkdS50ciIsImdlbi50ciIsImdvdi50ciIsImluZm8udHIiLCJrMTIudHIi'@;
put 'LCJrZXAudHIiLCJtaWwudHIiLCJuYW1lLnRyIiwibmV0LnRyIiwib3JnLnRyIiwicG9sLnRyIiwidGVsLnRyIiwidHNrLnRyIiwidHYudHIiLCJ3ZWIudHIiLCJuYy50ciIsImdvdi5uYy50ciIsInR0IiwiYml6LnR0IiwiY28udHQiLCJjb20udHQiLCJlZHUudHQiLCJnb3YudHQiLCJpbmZv'@;
put 'LnR0IiwibWlsLnR0IiwibmFtZS50dCIsIm5ldC50dCIsIm9yZy50dCIsInByby50dCIsInR2IiwidHciLCJjbHViLnR3IiwiY29tLnR3IiwiZWJpei50dyIsImVkdS50dyIsImdhbWUudHciLCJnb3YudHciLCJpZHYudHciLCJtaWwudHciLCJuZXQudHciLCJvcmcudHciLCJ0eiIsImFjLnR6'@;
put 'IiwiY28udHoiLCJnby50eiIsImhvdGVsLnR6IiwiaW5mby50eiIsIm1lLnR6IiwibWlsLnR6IiwibW9iaS50eiIsIm5lLnR6Iiwib3IudHoiLCJzYy50eiIsInR2LnR6IiwidWEiLCJjb20udWEiLCJlZHUudWEiLCJnb3YudWEiLCJpbi51YSIsIm5ldC51YSIsIm9yZy51YSIsImNoZXJrYXNz'@;
put 'eS51YSIsImNoZXJrYXN5LnVhIiwiY2hlcm5pZ292LnVhIiwiY2hlcm5paGl2LnVhIiwiY2hlcm5pdnRzaS51YSIsImNoZXJub3Z0c3kudWEiLCJjay51YSIsImNuLnVhIiwiY3IudWEiLCJjcmltZWEudWEiLCJjdi51YSIsImRuLnVhIiwiZG5lcHJvcGV0cm92c2sudWEiLCJkbmlwcm9wZXRy'@;
put 'b3Zzay51YSIsImRvbmV0c2sudWEiLCJkcC51YSIsImlmLnVhIiwiaXZhbm8tZnJhbmtpdnNrLnVhIiwia2gudWEiLCJraGFya2l2LnVhIiwia2hhcmtvdi51YSIsImtoZXJzb24udWEiLCJraG1lbG5pdHNraXkudWEiLCJraG1lbG55dHNreWkudWEiLCJraWV2LnVhIiwia2lyb3ZvZ3JhZC51'@;
put 'YSIsImttLnVhIiwia3IudWEiLCJrcm9weXZueXRza3lpLnVhIiwia3J5bS51YSIsImtzLnVhIiwia3YudWEiLCJreWl2LnVhIiwibGcudWEiLCJsdC51YSIsImx1Z2Fuc2sudWEiLCJsdWhhbnNrLnVhIiwibHV0c2sudWEiLCJsdi51YSIsImx2aXYudWEiLCJtay51YSIsIm15a29sYWl2LnVh'@;
put 'Iiwibmlrb2xhZXYudWEiLCJvZC51YSIsIm9kZXNhLnVhIiwib2Rlc3NhLnVhIiwicGwudWEiLCJwb2x0YXZhLnVhIiwicml2bmUudWEiLCJyb3Zuby51YSIsInJ2LnVhIiwic2IudWEiLCJzZWJhc3RvcG9sLnVhIiwic2V2YXN0b3BvbC51YSIsInNtLnVhIiwic3VteS51YSIsInRlLnVhIiwi'@;
put 'dGVybm9waWwudWEiLCJ1ei51YSIsInV6aGdvcm9kLnVhIiwidXpoaG9yb2QudWEiLCJ2aW5uaWNhLnVhIiwidmlubnl0c2lhLnVhIiwidm4udWEiLCJ2b2x5bi51YSIsInlhbHRhLnVhIiwiemFrYXJwYXR0aWEudWEiLCJ6YXBvcml6aHpoZS51YSIsInphcG9yaXpoemhpYS51YSIsInpoaXRv'@;
put 'bWlyLnVhIiwiemh5dG9teXIudWEiLCJ6cC51YSIsInp0LnVhIiwidWciLCJhYy51ZyIsImNvLnVnIiwiY29tLnVnIiwiZ28udWciLCJuZS51ZyIsIm9yLnVnIiwib3JnLnVnIiwic2MudWciLCJ1ayIsImFjLnVrIiwiY28udWsiLCJnb3YudWsiLCJsdGQudWsiLCJtZS51ayIsIm5ldC51ayIs'@;
put 'Im5ocy51ayIsIm9yZy51ayIsInBsYy51ayIsInBvbGljZS51ayIsIiouc2NoLnVrIiwidXMiLCJkbmkudXMiLCJmZWQudXMiLCJpc2EudXMiLCJraWRzLnVzIiwibnNuLnVzIiwiYWsudXMiLCJhbC51cyIsImFyLnVzIiwiYXMudXMiLCJhei51cyIsImNhLnVzIiwiY28udXMiLCJjdC51cyIs'@;
put 'ImRjLnVzIiwiZGUudXMiLCJmbC51cyIsImdhLnVzIiwiZ3UudXMiLCJoaS51cyIsImlhLnVzIiwiaWQudXMiLCJpbC51cyIsImluLnVzIiwia3MudXMiLCJreS51cyIsImxhLnVzIiwibWEudXMiLCJtZC51cyIsIm1lLnVzIiwibWkudXMiLCJtbi51cyIsIm1vLnVzIiwibXMudXMiLCJtdC51'@;
put 'cyIsIm5jLnVzIiwibmQudXMiLCJuZS51cyIsIm5oLnVzIiwibmoudXMiLCJubS51cyIsIm52LnVzIiwibnkudXMiLCJvaC51cyIsIm9rLnVzIiwib3IudXMiLCJwYS51cyIsInByLnVzIiwicmkudXMiLCJzYy51cyIsInNkLnVzIiwidG4udXMiLCJ0eC51cyIsInV0LnVzIiwidmEudXMiLCJ2'@;
put 'aS51cyIsInZ0LnVzIiwid2EudXMiLCJ3aS51cyIsInd2LnVzIiwid3kudXMiLCJrMTIuYWsudXMiLCJrMTIuYWwudXMiLCJrMTIuYXIudXMiLCJrMTIuYXMudXMiLCJrMTIuYXoudXMiLCJrMTIuY2EudXMiLCJrMTIuY28udXMiLCJrMTIuY3QudXMiLCJrMTIuZGMudXMiLCJrMTIuZmwudXMi'@;
put 'LCJrMTIuZ2EudXMiLCJrMTIuZ3UudXMiLCJrMTIuaWEudXMiLCJrMTIuaWQudXMiLCJrMTIuaWwudXMiLCJrMTIuaW4udXMiLCJrMTIua3MudXMiLCJrMTIua3kudXMiLCJrMTIubGEudXMiLCJrMTIubWEudXMiLCJrMTIubWQudXMiLCJrMTIubWUudXMiLCJrMTIubWkudXMiLCJrMTIubW4u'@;
put 'dXMiLCJrMTIubW8udXMiLCJrMTIubXMudXMiLCJrMTIubXQudXMiLCJrMTIubmMudXMiLCJrMTIubmUudXMiLCJrMTIubmgudXMiLCJrMTIubmoudXMiLCJrMTIubm0udXMiLCJrMTIubnYudXMiLCJrMTIubnkudXMiLCJrMTIub2gudXMiLCJrMTIub2sudXMiLCJrMTIub3IudXMiLCJrMTIu'@;
put 'cGEudXMiLCJrMTIucHIudXMiLCJrMTIuc2MudXMiLCJrMTIudG4udXMiLCJrMTIudHgudXMiLCJrMTIudXQudXMiLCJrMTIudmEudXMiLCJrMTIudmkudXMiLCJrMTIudnQudXMiLCJrMTIud2EudXMiLCJrMTIud2kudXMiLCJjYy5hay51cyIsImxpYi5hay51cyIsImNjLmFsLnVzIiwibGli'@;
put 'LmFsLnVzIiwiY2MuYXIudXMiLCJsaWIuYXIudXMiLCJjYy5hcy51cyIsImxpYi5hcy51cyIsImNjLmF6LnVzIiwibGliLmF6LnVzIiwiY2MuY2EudXMiLCJsaWIuY2EudXMiLCJjYy5jby51cyIsImxpYi5jby51cyIsImNjLmN0LnVzIiwibGliLmN0LnVzIiwiY2MuZGMudXMiLCJsaWIuZGMu'@;
put 'dXMiLCJjYy5kZS51cyIsImNjLmZsLnVzIiwiY2MuZ2EudXMiLCJjYy5ndS51cyIsImNjLmhpLnVzIiwiY2MuaWEudXMiLCJjYy5pZC51cyIsImNjLmlsLnVzIiwiY2MuaW4udXMiLCJjYy5rcy51cyIsImNjLmt5LnVzIiwiY2MubGEudXMiLCJjYy5tYS51cyIsImNjLm1kLnVzIiwiY2MubWUu'@;
put 'dXMiLCJjYy5taS51cyIsImNjLm1uLnVzIiwiY2MubW8udXMiLCJjYy5tcy51cyIsImNjLm10LnVzIiwiY2MubmMudXMiLCJjYy5uZC51cyIsImNjLm5lLnVzIiwiY2MubmgudXMiLCJjYy5uai51cyIsImNjLm5tLnVzIiwiY2MubnYudXMiLCJjYy5ueS51cyIsImNjLm9oLnVzIiwiY2Mub2su'@;
put 'dXMiLCJjYy5vci51cyIsImNjLnBhLnVzIiwiY2MucHIudXMiLCJjYy5yaS51cyIsImNjLnNjLnVzIiwiY2Muc2QudXMiLCJjYy50bi51cyIsImNjLnR4LnVzIiwiY2MudXQudXMiLCJjYy52YS51cyIsImNjLnZpLnVzIiwiY2MudnQudXMiLCJjYy53YS51cyIsImNjLndpLnVzIiwiY2Mud3Yu'@;
put 'dXMiLCJjYy53eS51cyIsImsxMi53eS51cyIsImxpYi5mbC51cyIsImxpYi5nYS51cyIsImxpYi5ndS51cyIsImxpYi5oaS51cyIsImxpYi5pYS51cyIsImxpYi5pZC51cyIsImxpYi5pbC51cyIsImxpYi5pbi51cyIsImxpYi5rcy51cyIsImxpYi5reS51cyIsImxpYi5sYS51cyIsImxpYi5t'@;
put 'YS51cyIsImxpYi5tZC51cyIsImxpYi5tZS51cyIsImxpYi5taS51cyIsImxpYi5tbi51cyIsImxpYi5tby51cyIsImxpYi5tcy51cyIsImxpYi5tdC51cyIsImxpYi5uYy51cyIsImxpYi5uZC51cyIsImxpYi5uZS51cyIsImxpYi5uaC51cyIsImxpYi5uai51cyIsImxpYi5ubS51cyIsImxp'@;
put 'Yi5udi51cyIsImxpYi5ueS51cyIsImxpYi5vaC51cyIsImxpYi5vay51cyIsImxpYi5vci51cyIsImxpYi5wYS51cyIsImxpYi5wci51cyIsImxpYi5yaS51cyIsImxpYi5zYy51cyIsImxpYi5zZC51cyIsImxpYi50bi51cyIsImxpYi50eC51cyIsImxpYi51dC51cyIsImxpYi52YS51cyIs'@;
put 'ImxpYi52aS51cyIsImxpYi52dC51cyIsImxpYi53YS51cyIsImxpYi53aS51cyIsImxpYi53eS51cyIsImNodHIuazEyLm1hLnVzIiwicGFyb2NoLmsxMi5tYS51cyIsInB2dC5rMTIubWEudXMiLCJhbm4tYXJib3IubWkudXMiLCJjb2cubWkudXMiLCJkc3QubWkudXMiLCJlYXRvbi5taS51'@;
put 'cyIsImdlbi5taS51cyIsIm11cy5taS51cyIsInRlYy5taS51cyIsIndhc2h0ZW5hdy5taS51cyIsInV5IiwiY29tLnV5IiwiZWR1LnV5IiwiZ3ViLnV5IiwibWlsLnV5IiwibmV0LnV5Iiwib3JnLnV5IiwidXoiLCJjby51eiIsImNvbS51eiIsIm5ldC51eiIsIm9yZy51eiIsInZhIiwidmMi'@;
put 'LCJjb20udmMiLCJlZHUudmMiLCJnb3YudmMiLCJtaWwudmMiLCJuZXQudmMiLCJvcmcudmMiLCJ2ZSIsImFydHMudmUiLCJiaWIudmUiLCJjby52ZSIsImNvbS52ZSIsImUxMi52ZSIsImVkdS52ZSIsImZpcm0udmUiLCJnb2IudmUiLCJnb3YudmUiLCJpbmZvLnZlIiwiaW50LnZlIiwibWls'@;
put 'LnZlIiwibmV0LnZlIiwibm9tLnZlIiwib3JnLnZlIiwicmFyLnZlIiwicmVjLnZlIiwic3RvcmUudmUiLCJ0ZWMudmUiLCJ3ZWIudmUiLCJ2ZyIsInZpIiwiY28udmkiLCJjb20udmkiLCJrMTIudmkiLCJuZXQudmkiLCJvcmcudmkiLCJ2biIsImFjLnZuIiwiYWkudm4iLCJiaXoudm4iLCJj'@;
put 'b20udm4iLCJlZHUudm4iLCJnb3Yudm4iLCJoZWFsdGgudm4iLCJpZC52biIsImluZm8udm4iLCJpbnQudm4iLCJpby52biIsIm5hbWUudm4iLCJuZXQudm4iLCJvcmcudm4iLCJwcm8udm4iLCJhbmdpYW5nLnZuIiwiYmFjZ2lhbmcudm4iLCJiYWNrYW4udm4iLCJiYWNsaWV1LnZuIiwiYmFj'@;
put 'bmluaC52biIsImJhcmlhLXZ1bmd0YXUudm4iLCJiZW50cmUudm4iLCJiaW5oZGluaC52biIsImJpbmhkdW9uZy52biIsImJpbmhwaHVvYy52biIsImJpbmh0aHVhbi52biIsImNhbWF1LnZuIiwiY2FudGhvLnZuIiwiY2FvYmFuZy52biIsImRha2xhay52biIsImRha25vbmcudm4iLCJkYW5h'@;
put 'bmcudm4iLCJkaWVuYmllbi52biIsImRvbmduYWkudm4iLCJkb25ndGhhcC52biIsImdpYWxhaS52biIsImhhZ2lhbmcudm4iLCJoYWlkdW9uZy52biIsImhhaXBob25nLnZuIiwiaGFuYW0udm4iLCJoYW5vaS52biIsImhhdGluaC52biIsImhhdWdpYW5nLnZuIiwiaG9hYmluaC52biIsImh1'@;
put 'bmd5ZW4udm4iLCJraGFuaGhvYS52biIsImtpZW5naWFuZy52biIsImtvbnR1bS52biIsImxhaWNoYXUudm4iLCJsYW1kb25nLnZuIiwibGFuZ3Nvbi52biIsImxhb2NhaS52biIsImxvbmdhbi52biIsIm5hbWRpbmgudm4iLCJuZ2hlYW4udm4iLCJuaW5oYmluaC52biIsIm5pbmh0aHVhbi52'@;
put 'biIsInBodXRoby52biIsInBodXllbi52biIsInF1YW5nYmluaC52biIsInF1YW5nbmFtLnZuIiwicXVhbmduZ2FpLnZuIiwicXVhbmduaW5oLnZuIiwicXVhbmd0cmkudm4iLCJzb2N0cmFuZy52biIsInNvbmxhLnZuIiwidGF5bmluaC52biIsInRoYWliaW5oLnZuIiwidGhhaW5ndXllbi52'@;
put 'biIsInRoYW5oaG9hLnZuIiwidGhhbmhwaG9ob2NoaW1pbmgudm4iLCJ0aHVhdGhpZW5odWUudm4iLCJ0aWVuZ2lhbmcudm4iLCJ0cmF2aW5oLnZuIiwidHV5ZW5xdWFuZy52biIsInZpbmhsb25nLnZuIiwidmluaHBodWMudm4iLCJ5ZW5iYWkudm4iLCJ2dSIsImNvbS52dSIsImVkdS52dSIs'@;
put 'Im5ldC52dSIsIm9yZy52dSIsIndmIiwid3MiLCJjb20ud3MiLCJlZHUud3MiLCJnb3Yud3MiLCJuZXQud3MiLCJvcmcud3MiLCJ5dCIsIlx1MDYyN1x1MDY0NVx1MDYyN1x1MDYzMVx1MDYyN1x1MDYyYSIsIlx1MDU3MFx1MDU2MVx1MDU3NSIsIlx1MDlhY1x1MDliZVx1MDk4Mlx1MDliMlx1'@;
put 'MDliZSIsIlx1MDQzMVx1MDQzMyIsIlx1MDYyN1x1MDY0NFx1MDYyOFx1MDYyZFx1MDYzMVx1MDY0YVx1MDY0NiIsIlx1MDQzMVx1MDQzNVx1MDQzYiIsIlx1NGUyZFx1NTZmZCIsIlx1NGUyZFx1NTcwYiIsIlx1MDYyN1x1MDY0NFx1MDYyY1x1MDYzMlx1MDYyN1x1MDYyNlx1MDYzMSIsIlx1'@;
put 'MDY0NVx1MDYzNVx1MDYzMSIsIlx1MDQzNVx1MDQ0ZSIsIlx1MDNiNVx1MDNjNSIsIlx1MDY0NVx1MDY0OFx1MDYzMVx1MDY0YVx1MDYyYVx1MDYyN1x1MDY0Nlx1MDY0YVx1MDYyNyIsIlx1MTBkMlx1MTBkNCIsIlx1MDNiNVx1MDNiYiIsIlx1OTk5OVx1NmUyZiIsIlx1NTAwYlx1NGViYS5c'@;
put 'dTk5OTlcdTZlMmYiLCJcdTUxNmNcdTUzZjguXHU5OTk5XHU2ZTJmIiwiXHU2NTNmXHU1ZTljLlx1OTk5OVx1NmUyZiIsIlx1NjU1OVx1ODBiMi5cdTk5OTlcdTZlMmYiLCJcdTdkNDRcdTdlNTQuXHU5OTk5XHU2ZTJmIiwiXHU3ZGIyXHU3ZDYxLlx1OTk5OVx1NmUyZiIsIlx1MGNhZFx1MGNi'@;
put 'ZVx1MGNiMFx1MGNhNCIsIlx1MGIyZFx1MGIzZVx1MGIzMFx1MGIyNCIsIlx1MDlhZFx1MDliZVx1MDlmMFx1MDlhNCIsIlx1MDkyZFx1MDkzZVx1MDkzMFx1MDkyNFx1MDkyZVx1MDk0ZCIsIlx1MDkyZFx1MDkzZVx1MDkzMFx1MDk0Ylx1MDkyNCIsIlx1MDY4MFx1MDYyN1x1MDYzMVx1MDYy'@;
put 'YSIsIlx1MGQyZFx1MGQzZVx1MGQzMFx1MGQyNFx1MGQwMiIsIlx1MDkyZFx1MDkzZVx1MDkzMFx1MDkyNCIsIlx1MDYyOFx1MDYyN1x1MDYzMVx1MDYyYSIsIlx1MDYyOFx1MDZiZVx1MDYyN1x1MDYzMVx1MDYyYSIsIlx1MGMyZFx1MGMzZVx1MGMzMFx1MGMyNFx1MGM0ZCIsIlx1MGFhZFx1'@;
put 'MGFiZVx1MGFiMFx1MGFhNCIsIlx1MGEyZFx1MGEzZVx1MGEzMFx1MGEyNCIsIlx1MDlhZFx1MDliZVx1MDliMFx1MDlhNCIsIlx1MGI4N1x1MGJhOFx1MGJjZFx1MGJhNFx1MGJiZlx1MGJhZlx1MGJiZSIsIlx1MDYyN1x1MDZjY1x1MDYzMVx1MDYyN1x1MDY0NiIsIlx1MDYyN1x1MDY0YVx1'@;
put 'MDYzMVx1MDYyN1x1MDY0NiIsIlx1MDYzOVx1MDYzMVx1MDYyN1x1MDY0MiIsIlx1MDYyN1x1MDY0NFx1MDYyN1x1MDYzMVx1MDYyZlx1MDY0NiIsIlx1ZDU1Y1x1YWQ2ZCIsIlx1MDQ5Ylx1MDQzMFx1MDQzNyIsIlx1MGVhNVx1MGViMlx1MGVhNyIsIlx1MGRiZFx1MGQ4Mlx1MGQ5YVx1MGRj'@;
put 'ZiIsIlx1MGI4N1x1MGJiMlx1MGI5OVx1MGJjZFx1MGI5NVx1MGJjOCIsIlx1MDYyN1x1MDY0NFx1MDY0NVx1MDYzYVx1MDYzMVx1MDYyOCIsIlx1MDQzY1x1MDQzYVx1MDQzNCIsIlx1MDQzY1x1MDQzZVx1MDQzZCIsIlx1NmZiM1x1OTU4MCIsIlx1NmZiM1x1OTVlOCIsIlx1MDY0NVx1MDY0'@;
put 'NFx1MDY0YVx1MDYzM1x1MDY0YVx1MDYyNyIsIlx1MDYzOVx1MDY0NVx1MDYyN1x1MDY0NiIsIlx1MDY3ZVx1MDYyN1x1MDZhOVx1MDYzM1x1MDYyYVx1MDYyN1x1MDY0NiIsIlx1MDY3ZVx1MDYyN1x1MDY0M1x1MDYzM1x1MDYyYVx1MDYyN1x1MDY0NiIsIlx1MDY0MVx1MDY0NFx1MDYzM1x1'@;
put 'MDYzN1x1MDY0YVx1MDY0NiIsIlx1MDQ0MVx1MDQ0MFx1MDQzMSIsIlx1MDQzMFx1MDQzYS5cdTA0NDFcdTA0NDBcdTA0MzEiLCJcdTA0M2VcdTA0MzFcdTA0NDAuXHUwNDQxXHUwNDQwXHUwNDMxIiwiXHUwNDNlXHUwNDM0Llx1MDQ0MVx1MDQ0MFx1MDQzMSIsIlx1MDQzZVx1MDQ0MFx1MDQz'@;
put 'My5cdTA0NDFcdTA0NDBcdTA0MzEiLCJcdTA0M2ZcdTA0NDAuXHUwNDQxXHUwNDQwXHUwNDMxIiwiXHUwNDQzXHUwNDNmXHUwNDQwLlx1MDQ0MVx1MDQ0MFx1MDQzMSIsIlx1MDQ0MFx1MDQ0NCIsIlx1MDY0Mlx1MDYzN1x1MDYzMSIsIlx1MDYyN1x1MDY0NFx1MDYzM1x1MDYzOVx1MDY0OFx1'@;
put 'MDYyZlx1MDY0YVx1MDYyOSIsIlx1MDYyN1x1MDY0NFx1MDYzM1x1MDYzOVx1MDY0OFx1MDYyZlx1MDZjY1x1MDYyOSIsIlx1MDYyN1x1MDY0NFx1MDYzM1x1MDYzOVx1MDY0OFx1MDYyZlx1MDZjY1x1MDZjMyIsIlx1MDYyN1x1MDY0NFx1MDYzM1x1MDYzOVx1MDY0OFx1MDYyZlx1MDY0YVx1'@;
put 'MDY0NyIsIlx1MDYzM1x1MDY0OFx1MDYyZlx1MDYyN1x1MDY0NiIsIlx1NjViMFx1NTJhMFx1NTc2MSIsIlx1MGI5YVx1MGJiZlx1MGI5OVx1MGJjZFx1MGI5NVx1MGJhYVx1MGJjZFx1MGJhYVx1MGJjMlx1MGJiMFx1MGJjZCIsIlx1MDYzM1x1MDY0OFx1MDYzMVx1MDY0YVx1MDYyOSIsIlx1'@;
put 'MDYzM1x1MDY0OFx1MDYzMVx1MDY0YVx1MDYyNyIsIlx1MGU0NFx1MGUxN1x1MGUyMiIsIlx1MGUxN1x1MGUyYlx1MGUzMlx1MGUyMy5cdTBlNDRcdTBlMTdcdTBlMjIiLCJcdTBlMThcdTBlMzhcdTBlMjNcdTBlMDFcdTBlMzRcdTBlMDguXHUwZTQ0XHUwZTE3XHUwZTIyIiwiXHUwZTQwXHUw'@;
put 'ZTE5XHUwZTQ3XHUwZTE1Llx1MGU0NFx1MGUxN1x1MGUyMiIsIlx1MGUyM1x1MGUzMVx1MGUxMFx1MGUxYVx1MGUzMlx1MGUyNS5cdTBlNDRcdTBlMTdcdTBlMjIiLCJcdTBlMjhcdTBlMzZcdTBlMDFcdTBlMjlcdTBlMzIuXHUwZTQ0XHUwZTE3XHUwZTIyIiwiXHUwZTJkXHUwZTA3XHUwZTA0'@;
put 'XHUwZTRjXHUwZTAxXHUwZTIzLlx1MGU0NFx1MGUxN1x1MGUyMiIsIlx1MDYyYVx1MDY0OFx1MDY0Nlx1MDYzMyIsIlx1NTNmMFx1NzA2MyIsIlx1NTNmMFx1NmU3ZSIsIlx1ODFmYVx1NzA2MyIsIlx1MDQ0M1x1MDQzYVx1MDQ0MCIsIlx1MDYyN1x1MDY0NFx1MDY0YVx1MDY0NVx1MDY0NiIs'@;
put 'Inh4eCIsInllIiwiY29tLnllIiwiZWR1LnllIiwiZ292LnllIiwibWlsLnllIiwibmV0LnllIiwib3JnLnllIiwiYWMuemEiLCJhZ3JpYy56YSIsImFsdC56YSIsImNvLnphIiwiZWR1LnphIiwiZ292LnphIiwiZ3JvbmRhci56YSIsImxhdy56YSIsIm1pbC56YSIsIm5ldC56YSIsIm5nby56'@;
put 'YSIsIm5pYy56YSIsIm5pcy56YSIsIm5vbS56YSIsIm9yZy56YSIsInNjaG9vbC56YSIsInRtLnphIiwid2ViLnphIiwiem0iLCJhYy56bSIsImJpei56bSIsImNvLnptIiwiY29tLnptIiwiZWR1LnptIiwiZ292LnptIiwiaW5mby56bSIsIm1pbC56bSIsIm5ldC56bSIsIm9yZy56bSIsInNj'@;
put 'aC56bSIsInp3IiwiYWMuenciLCJjby56dyIsImdvdi56dyIsIm1pbC56dyIsIm9yZy56dyIsImFhYSIsImFhcnAiLCJhYmIiLCJhYmJvdHQiLCJhYmJ2aWUiLCJhYmMiLCJhYmxlIiwiYWJvZ2FkbyIsImFidWRoYWJpIiwiYWNhZGVteSIsImFjY2VudHVyZSIsImFjY291bnRhbnQiLCJhY2Nv'@;
put 'dW50YW50cyIsImFjbyIsImFjdG9yIiwiYWRzIiwiYWR1bHQiLCJhZWciLCJhZXRuYSIsImFmbCIsImFmcmljYSIsImFnYWtoYW4iLCJhZ2VuY3kiLCJhaWciLCJhaXJidXMiLCJhaXJmb3JjZSIsImFpcnRlbCIsImFrZG4iLCJhbGliYWJhIiwiYWxpcGF5IiwiYWxsZmluYW56IiwiYWxsc3Rh'@;
put 'dGUiLCJhbGx5IiwiYWxzYWNlIiwiYWxzdG9tIiwiYW1hem9uIiwiYW1lcmljYW5leHByZXNzIiwiYW1lcmljYW5mYW1pbHkiLCJhbWV4IiwiYW1mYW0iLCJhbWljYSIsImFtc3RlcmRhbSIsImFuYWx5dGljcyIsImFuZHJvaWQiLCJhbnF1YW4iLCJhbnoiLCJhb2wiLCJhcGFydG1lbnRzIiwi'@;
put 'YXBwIiwiYXBwbGUiLCJhcXVhcmVsbGUiLCJhcmFiIiwiYXJhbWNvIiwiYXJjaGkiLCJhcm15IiwiYXJ0IiwiYXJ0ZSIsImFzZGEiLCJhc3NvY2lhdGVzIiwiYXRobGV0YSIsImF0dG9ybmV5IiwiYXVjdGlvbiIsImF1ZGkiLCJhdWRpYmxlIiwiYXVkaW8iLCJhdXNwb3N0IiwiYXV0aG9yIiwi'@;
put 'YXV0byIsImF1dG9zIiwiYXdzIiwiYXhhIiwiYXp1cmUiLCJiYWJ5IiwiYmFpZHUiLCJiYW5hbWV4IiwiYmFuZCIsImJhbmsiLCJiYXIiLCJiYXJjZWxvbmEiLCJiYXJjbGF5Y2FyZCIsImJhcmNsYXlzIiwiYmFyZWZvb3QiLCJiYXJnYWlucyIsImJhc2ViYWxsIiwiYmFza2V0YmFsbCIsImJh'@;
put 'dWhhdXMiLCJiYXllcm4iLCJiYmMiLCJiYnQiLCJiYnZhIiwiYmNnIiwiYmNuIiwiYmVhdHMiLCJiZWF1dHkiLCJiZWVyIiwiYmVudGxleSIsImJlcmxpbiIsImJlc3QiLCJiZXN0YnV5IiwiYmV0IiwiYmhhcnRpIiwiYmlibGUiLCJiaWQiLCJiaWtlIiwiYmluZyIsImJpbmdvIiwiYmlvIiwi'@;
put 'YmxhY2siLCJibGFja2ZyaWRheSIsImJsb2NrYnVzdGVyIiwiYmxvZyIsImJsb29tYmVyZyIsImJsdWUiLCJibXMiLCJibXciLCJibnBwYXJpYmFzIiwiYm9hdHMiLCJib2VocmluZ2VyIiwiYm9mYSIsImJvbSIsImJvbmQiLCJib28iLCJib29rIiwiYm9va2luZyIsImJvc2NoIiwiYm9zdGlr'@;
put 'IiwiYm9zdG9uIiwiYm90IiwiYm91dGlxdWUiLCJib3giLCJicmFkZXNjbyIsImJyaWRnZXN0b25lIiwiYnJvYWR3YXkiLCJicm9rZXIiLCJicm90aGVyIiwiYnJ1c3NlbHMiLCJidWlsZCIsImJ1aWxkZXJzIiwiYnVzaW5lc3MiLCJidXkiLCJidXp6IiwiYnpoIiwiY2FiIiwiY2FmZSIsImNh'@;
put 'bCIsImNhbGwiLCJjYWx2aW5rbGVpbiIsImNhbSIsImNhbWVyYSIsImNhbXAiLCJjYW5vbiIsImNhcGV0b3duIiwiY2FwaXRhbCIsImNhcGl0YWxvbmUiLCJjYXIiLCJjYXJhdmFuIiwiY2FyZHMiLCJjYXJlIiwiY2FyZWVyIiwiY2FyZWVycyIsImNhcnMiLCJjYXNhIiwiY2FzZSIsImNhc2gi'@;
put 'LCJjYXNpbm8iLCJjYXRlcmluZyIsImNhdGhvbGljIiwiY2JhIiwiY2JuIiwiY2JyZSIsImNlbnRlciIsImNlbyIsImNlcm4iLCJjZmEiLCJjZmQiLCJjaGFuZWwiLCJjaGFubmVsIiwiY2hhcml0eSIsImNoYXNlIiwiY2hhdCIsImNoZWFwIiwiY2hpbnRhaSIsImNocmlzdG1hcyIsImNocm9t'@;
put 'ZSIsImNodXJjaCIsImNpcHJpYW5pIiwiY2lyY2xlIiwiY2lzY28iLCJjaXRhZGVsIiwiY2l0aSIsImNpdGljIiwiY2l0eSIsImNsYWltcyIsImNsZWFuaW5nIiwiY2xpY2siLCJjbGluaWMiLCJjbGluaXF1ZSIsImNsb3RoaW5nIiwiY2xvdWQiLCJjbHViIiwiY2x1Ym1lZCIsImNvYWNoIiwi'@;
put 'Y29kZXMiLCJjb2ZmZWUiLCJjb2xsZWdlIiwiY29sb2duZSIsImNvbW1iYW5rIiwiY29tbXVuaXR5IiwiY29tcGFueSIsImNvbXBhcmUiLCJjb21wdXRlciIsImNvbXNlYyIsImNvbmRvcyIsImNvbnN0cnVjdGlvbiIsImNvbnN1bHRpbmciLCJjb250YWN0IiwiY29udHJhY3RvcnMiLCJjb29r'@;
put 'aW5nIiwiY29vbCIsImNvcnNpY2EiLCJjb3VudHJ5IiwiY291cG9uIiwiY291cG9ucyIsImNvdXJzZXMiLCJjcGEiLCJjcmVkaXQiLCJjcmVkaXRjYXJkIiwiY3JlZGl0dW5pb24iLCJjcmlja2V0IiwiY3Jvd24iLCJjcnMiLCJjcnVpc2UiLCJjcnVpc2VzIiwiY3Vpc2luZWxsYSIsImN5bXJ1'@;
put 'IiwiY3lvdSIsImRhZCIsImRhbmNlIiwiZGF0YSIsImRhdGUiLCJkYXRpbmciLCJkYXRzdW4iLCJkYXkiLCJkY2xrIiwiZGRzIiwiZGVhbCIsImRlYWxlciIsImRlYWxzIiwiZGVncmVlIiwiZGVsaXZlcnkiLCJkZWxsIiwiZGVsb2l0dGUiLCJkZWx0YSIsImRlbW9jcmF0IiwiZGVudGFsIiwi'@;
put 'ZGVudGlzdCIsImRlc2kiLCJkZXNpZ24iLCJkZXYiLCJkaGwiLCJkaWFtb25kcyIsImRpZXQiLCJkaWdpdGFsIiwiZGlyZWN0IiwiZGlyZWN0b3J5IiwiZGlzY291bnQiLCJkaXNjb3ZlciIsImRpc2giLCJkaXkiLCJkbnAiLCJkb2NzIiwiZG9jdG9yIiwiZG9nIiwiZG9tYWlucyIsImRvdCIs'@;
put 'ImRvd25sb2FkIiwiZHJpdmUiLCJkdHYiLCJkdWJhaSIsImR1bmxvcCIsImR1cG9udCIsImR1cmJhbiIsImR2YWciLCJkdnIiLCJlYXJ0aCIsImVhdCIsImVjbyIsImVkZWthIiwiZWR1Y2F0aW9uIiwiZW1haWwiLCJlbWVyY2siLCJlbmVyZ3kiLCJlbmdpbmVlciIsImVuZ2luZWVyaW5nIiwi'@;
put 'ZW50ZXJwcmlzZXMiLCJlcHNvbiIsImVxdWlwbWVudCIsImVyaWNzc29uIiwiZXJuaSIsImVzcSIsImVzdGF0ZSIsImV1cm92aXNpb24iLCJldXMiLCJldmVudHMiLCJleGNoYW5nZSIsImV4cGVydCIsImV4cG9zZWQiLCJleHByZXNzIiwiZXh0cmFzcGFjZSIsImZhZ2UiLCJmYWlsIiwiZmFp'@;
put 'cndpbmRzIiwiZmFpdGgiLCJmYW1pbHkiLCJmYW4iLCJmYW5zIiwiZmFybSIsImZhcm1lcnMiLCJmYXNoaW9uIiwiZmFzdCIsImZlZGV4IiwiZmVlZGJhY2siLCJmZXJyYXJpIiwiZmVycmVybyIsImZpZGVsaXR5IiwiZmlkbyIsImZpbG0iLCJmaW5hbCIsImZpbmFuY2UiLCJmaW5hbmNpYWwi'@;
put 'LCJmaXJlIiwiZmlyZXN0b25lIiwiZmlybWRhbGUiLCJmaXNoIiwiZmlzaGluZyIsImZpdCIsImZpdG5lc3MiLCJmbGlja3IiLCJmbGlnaHRzIiwiZmxpciIsImZsb3Jpc3QiLCJmbG93ZXJzIiwiZmx5IiwiZm9vIiwiZm9vZCIsImZvb3RiYWxsIiwiZm9yZCIsImZvcmV4IiwiZm9yc2FsZSIs'@;
put 'ImZvcnVtIiwiZm91bmRhdGlvbiIsImZveCIsImZyZWUiLCJmcmVzZW5pdXMiLCJmcmwiLCJmcm9nYW5zIiwiZnJvbnRpZXIiLCJmdHIiLCJmdWppdHN1IiwiZnVuIiwiZnVuZCIsImZ1cm5pdHVyZSIsImZ1dGJvbCIsImZ5aSIsImdhbCIsImdhbGxlcnkiLCJnYWxsbyIsImdhbGx1cCIsImdh'@;
put 'bWUiLCJnYW1lcyIsImdhcCIsImdhcmRlbiIsImdheSIsImdiaXoiLCJnZG4iLCJnZWEiLCJnZW50IiwiZ2VudGluZyIsImdlb3JnZSIsImdnZWUiLCJnaWZ0IiwiZ2lmdHMiLCJnaXZlcyIsImdpdmluZyIsImdsYXNzIiwiZ2xlIiwiZ2xvYmFsIiwiZ2xvYm8iLCJnbWFpbCIsImdtYmgiLCJn'@;
put 'bW8iLCJnbXgiLCJnb2RhZGR5IiwiZ29sZCIsImdvbGRwb2ludCIsImdvbGYiLCJnb28iLCJnb29keWVhciIsImdvb2ciLCJnb29nbGUiLCJnb3AiLCJnb3QiLCJncmFpbmdlciIsImdyYXBoaWNzIiwiZ3JhdGlzIiwiZ3JlZW4iLCJncmlwZSIsImdyb2NlcnkiLCJncm91cCIsImd1Y2NpIiwi'@;
put 'Z3VnZSIsImd1aWRlIiwiZ3VpdGFycyIsImd1cnUiLCJoYWlyIiwiaGFtYnVyZyIsImhhbmdvdXQiLCJoYXVzIiwiaGJvIiwiaGRmYyIsImhkZmNiYW5rIiwiaGVhbHRoIiwiaGVhbHRoY2FyZSIsImhlbHAiLCJoZWxzaW5raSIsImhlcmUiLCJoZXJtZXMiLCJoaXBob3AiLCJoaXNhbWl0c3Ui'@;
put 'LCJoaXRhY2hpIiwiaGl2IiwiaGt0IiwiaG9ja2V5IiwiaG9sZGluZ3MiLCJob2xpZGF5IiwiaG9tZWRlcG90IiwiaG9tZWdvb2RzIiwiaG9tZXMiLCJob21lc2Vuc2UiLCJob25kYSIsImhvcnNlIiwiaG9zcGl0YWwiLCJob3N0IiwiaG9zdGluZyIsImhvdCIsImhvdGVscyIsImhvdG1haWwi'@;
put 'LCJob3VzZSIsImhvdyIsImhzYmMiLCJodWdoZXMiLCJoeWF0dCIsImh5dW5kYWkiLCJpYm0iLCJpY2JjIiwiaWNlIiwiaWN1IiwiaWVlZSIsImlmbSIsImlrYW5vIiwiaW1hbWF0IiwiaW1kYiIsImltbW8iLCJpbW1vYmlsaWVuIiwiaW5jIiwiaW5kdXN0cmllcyIsImluZmluaXRpIiwiaW5n'@;
put 'IiwiaW5rIiwiaW5zdGl0dXRlIiwiaW5zdXJhbmNlIiwiaW5zdXJlIiwiaW50ZXJuYXRpb25hbCIsImludHVpdCIsImludmVzdG1lbnRzIiwiaXBpcmFuZ2EiLCJpcmlzaCIsImlzbWFpbGkiLCJpc3QiLCJpc3RhbmJ1bCIsIml0YXUiLCJpdHYiLCJqYWd1YXIiLCJqYXZhIiwiamNiIiwiamVl'@;
put 'cCIsImpldHp0IiwiamV3ZWxyeSIsImppbyIsImpsbCIsImptcCIsImpuaiIsImpvYnVyZyIsImpvdCIsImpveSIsImpwbW9yZ2FuIiwianBycyIsImp1ZWdvcyIsImp1bmlwZXIiLCJrYXVmZW4iLCJrZGRpIiwia2Vycnlob3RlbHMiLCJrZXJyeWxvZ2lzdGljcyIsImtlcnJ5cHJvcGVydGll'@;
put 'cyIsImtmaCIsImtpYSIsImtpZHMiLCJraW0iLCJraW5kbGUiLCJraXRjaGVuIiwia2l3aSIsImtvZWxuIiwia29tYXRzdSIsImtvc2hlciIsImtwbWciLCJrcG4iLCJrcmQiLCJrcmVkIiwia3Vva2dyb3VwIiwia3lvdG8iLCJsYWNhaXhhIiwibGFtYm9yZ2hpbmkiLCJsYW1lciIsImxhbmNh'@;
put 'c3RlciIsImxhbmQiLCJsYW5kcm92ZXIiLCJsYW54ZXNzIiwibGFzYWxsZSIsImxhdCIsImxhdGlubyIsImxhdHJvYmUiLCJsYXciLCJsYXd5ZXIiLCJsZHMiLCJsZWFzZSIsImxlY2xlcmMiLCJsZWZyYWsiLCJsZWdhbCIsImxlZ28iLCJsZXh1cyIsImxnYnQiLCJsaWRsIiwibGlmZSIsImxp'@;
put 'ZmVpbnN1cmFuY2UiLCJsaWZlc3R5bGUiLCJsaWdodGluZyIsImxpa2UiLCJsaWxseSIsImxpbWl0ZWQiLCJsaW1vIiwibGluY29sbiIsImxpbmsiLCJsaXBzeSIsImxpdmUiLCJsaXZpbmciLCJsbGMiLCJsbHAiLCJsb2FuIiwibG9hbnMiLCJsb2NrZXIiLCJsb2N1cyIsImxvbCIsImxvbmRv'@;
put 'biIsImxvdHRlIiwibG90dG8iLCJsb3ZlIiwibHBsIiwibHBsZmluYW5jaWFsIiwibHRkIiwibHRkYSIsImx1bmRiZWNrIiwibHV4ZSIsImx1eHVyeSIsIm1hZHJpZCIsIm1haWYiLCJtYWlzb24iLCJtYWtldXAiLCJtYW4iLCJtYW5hZ2VtZW50IiwibWFuZ28iLCJtYXAiLCJtYXJrZXQiLCJt'@;
put 'YXJrZXRpbmciLCJtYXJrZXRzIiwibWFycmlvdHQiLCJtYXJzaGFsbHMiLCJtYXR0ZWwiLCJtYmEiLCJtY2tpbnNleSIsIm1lZCIsIm1lZGlhIiwibWVldCIsIm1lbGJvdXJuZSIsIm1lbWUiLCJtZW1vcmlhbCIsIm1lbiIsIm1lbnUiLCJtZXJjayIsIm1lcmNrbXNkIiwibWlhbWkiLCJtaWNy'@;
put 'b3NvZnQiLCJtaW5pIiwibWludCIsIm1pdCIsIm1pdHN1YmlzaGkiLCJtbGIiLCJtbHMiLCJtbWEiLCJtb2JpbGUiLCJtb2RhIiwibW9lIiwibW9pIiwibW9tIiwibW9uYXNoIiwibW9uZXkiLCJtb25zdGVyIiwibW9ybW9uIiwibW9ydGdhZ2UiLCJtb3Njb3ciLCJtb3RvIiwibW90b3JjeWNs'@;
put 'ZXMiLCJtb3YiLCJtb3ZpZSIsIm1zZCIsIm10biIsIm10ciIsIm11c2ljIiwibmFiIiwibmFnb3lhIiwibmF2eSIsIm5iYSIsIm5lYyIsIm5ldGJhbmsiLCJuZXRmbGl4IiwibmV0d29yayIsIm5ldXN0YXIiLCJuZXciLCJuZXdzIiwibmV4dCIsIm5leHRkaXJlY3QiLCJuZXh1cyIsIm5mbCIs'@;
put 'Im5nbyIsIm5oayIsIm5pY28iLCJuaWtlIiwibmlrb24iLCJuaW5qYSIsIm5pc3NhbiIsIm5pc3NheSIsIm5va2lhIiwibm9ydG9uIiwibm93Iiwibm93cnV6Iiwibm93dHYiLCJucmEiLCJucnciLCJudHQiLCJueWMiLCJvYmkiLCJvYnNlcnZlciIsIm9mZmljZSIsIm9raW5hd2EiLCJvbGF5'@;
put 'YW4iLCJvbGF5YW5ncm91cCIsIm9sbG8iLCJvbWVnYSIsIm9uZSIsIm9uZyIsIm9ubCIsIm9ubGluZSIsIm9vbyIsIm9wZW4iLCJvcmFjbGUiLCJvcmFuZ2UiLCJvcmdhbmljIiwib3JpZ2lucyIsIm9zYWthIiwib3RzdWthIiwib3R0Iiwib3ZoIiwicGFnZSIsInBhbmFzb25pYyIsInBhcmlz'@;
put 'IiwicGFycyIsInBhcnRuZXJzIiwicGFydHMiLCJwYXJ0eSIsInBheSIsInBjY3ciLCJwZXQiLCJwZml6ZXIiLCJwaGFybWFjeSIsInBoZCIsInBoaWxpcHMiLCJwaG9uZSIsInBob3RvIiwicGhvdG9ncmFwaHkiLCJwaG90b3MiLCJwaHlzaW8iLCJwaWNzIiwicGljdGV0IiwicGljdHVyZXMi'@;
put 'LCJwaWQiLCJwaW4iLCJwaW5nIiwicGluayIsInBpb25lZXIiLCJwaXp6YSIsInBsYWNlIiwicGxheSIsInBsYXlzdGF0aW9uIiwicGx1bWJpbmciLCJwbHVzIiwicG5jIiwicG9obCIsInBva2VyIiwicG9saXRpZSIsInBvcm4iLCJwcmFtZXJpY2EiLCJwcmF4aSIsInByZXNzIiwicHJpbWUi'@;
put 'LCJwcm9kIiwicHJvZHVjdGlvbnMiLCJwcm9mIiwicHJvZ3Jlc3NpdmUiLCJwcm9tbyIsInByb3BlcnRpZXMiLCJwcm9wZXJ0eSIsInByb3RlY3Rpb24iLCJwcnUiLCJwcnVkZW50aWFsIiwicHViIiwicHdjIiwicXBvbiIsInF1ZWJlYyIsInF1ZXN0IiwicmFjaW5nIiwicmFkaW8iLCJyZWFk'@;
put 'IiwicmVhbGVzdGF0ZSIsInJlYWx0b3IiLCJyZWFsdHkiLCJyZWNpcGVzIiwicmVkIiwicmVkc3RvbmUiLCJyZWR1bWJyZWxsYSIsInJlaGFiIiwicmVpc2UiLCJyZWlzZW4iLCJyZWl0IiwicmVsaWFuY2UiLCJyZW4iLCJyZW50IiwicmVudGFscyIsInJlcGFpciIsInJlcG9ydCIsInJlcHVi'@;
put 'bGljYW4iLCJyZXN0IiwicmVzdGF1cmFudCIsInJldmlldyIsInJldmlld3MiLCJyZXhyb3RoIiwicmljaCIsInJpY2hhcmRsaSIsInJpY29oIiwicmlsIiwicmlvIiwicmlwIiwicm9ja3MiLCJyb2RlbyIsInJvZ2VycyIsInJvb20iLCJyc3ZwIiwicnVnYnkiLCJydWhyIiwicnVuIiwicndl'@;
put 'Iiwicnl1a3l1Iiwic2FhcmxhbmQiLCJzYWZlIiwic2FmZXR5Iiwic2FrdXJhIiwic2FsZSIsInNhbG9uIiwic2Ftc2NsdWIiLCJzYW1zdW5nIiwic2FuZHZpayIsInNhbmR2aWtjb3JvbWFudCIsInNhbm9maSIsInNhcCIsInNhcmwiLCJzYXMiLCJzYXZlIiwic2F4byIsInNiaSIsInNicyIs'@;
put 'InNjYiIsInNjaGFlZmZsZXIiLCJzY2htaWR0Iiwic2Nob2xhcnNoaXBzIiwic2Nob29sIiwic2NodWxlIiwic2Nod2FyeiIsInNjaWVuY2UiLCJzY290Iiwic2VhcmNoIiwic2VhdCIsInNlY3VyZSIsInNlY3VyaXR5Iiwic2VlayIsInNlbGVjdCIsInNlbmVyIiwic2VydmljZXMiLCJzZXZl'@;
put 'biIsInNldyIsInNleCIsInNleHkiLCJzZnIiLCJzaGFuZ3JpbGEiLCJzaGFycCIsInNoZWxsIiwic2hpYSIsInNoaWtzaGEiLCJzaG9lcyIsInNob3AiLCJzaG9wcGluZyIsInNob3VqaSIsInNob3ciLCJzaWxrIiwic2luYSIsInNpbmdsZXMiLCJzaXRlIiwic2tpIiwic2tpbiIsInNreSIs'@;
put 'InNreXBlIiwic2xpbmciLCJzbWFydCIsInNtaWxlIiwic25jZiIsInNvY2NlciIsInNvY2lhbCIsInNvZnRiYW5rIiwic29mdHdhcmUiLCJzb2h1Iiwic29sYXIiLCJzb2x1dGlvbnMiLCJzb25nIiwic29ueSIsInNveSIsInNwYSIsInNwYWNlIiwic3BvcnQiLCJzcG90Iiwic3JsIiwic3Rh'@;
put 'ZGEiLCJzdGFwbGVzIiwic3RhciIsInN0YXRlYmFuayIsInN0YXRlZmFybSIsInN0YyIsInN0Y2dyb3VwIiwic3RvY2tob2xtIiwic3RvcmFnZSIsInN0b3JlIiwic3RyZWFtIiwic3R1ZGlvIiwic3R1ZHkiLCJzdHlsZSIsInN1Y2tzIiwic3VwcGxpZXMiLCJzdXBwbHkiLCJzdXBwb3J0Iiwi'@;
put 'c3VyZiIsInN1cmdlcnkiLCJzdXp1a2kiLCJzd2F0Y2giLCJzd2lzcyIsInN5ZG5leSIsInN5c3RlbXMiLCJ0YWIiLCJ0YWlwZWkiLCJ0YWxrIiwidGFvYmFvIiwidGFyZ2V0IiwidGF0YW1vdG9ycyIsInRhdGFyIiwidGF0dG9vIiwidGF4IiwidGF4aSIsInRjaSIsInRkayIsInRlYW0iLCJ0'@;
put 'ZWNoIiwidGVjaG5vbG9neSIsInRlbWFzZWsiLCJ0ZW5uaXMiLCJ0ZXZhIiwidGhkIiwidGhlYXRlciIsInRoZWF0cmUiLCJ0aWFhIiwidGlja2V0cyIsInRpZW5kYSIsInRpcHMiLCJ0aXJlcyIsInRpcm9sIiwidGptYXh4IiwidGp4IiwidGttYXh4IiwidG1hbGwiLCJ0b2RheSIsInRva3lv'@;
put 'IiwidG9vbHMiLCJ0b3AiLCJ0b3JheSIsInRvc2hpYmEiLCJ0b3RhbCIsInRvdXJzIiwidG93biIsInRveW90YSIsInRveXMiLCJ0cmFkZSIsInRyYWRpbmciLCJ0cmFpbmluZyIsInRyYXZlbCIsInRyYXZlbGVycyIsInRyYXZlbGVyc2luc3VyYW5jZSIsInRydXN0IiwidHJ2IiwidHViZSIs'@;
put 'InR1aSIsInR1bmVzIiwidHVzaHUiLCJ0dnMiLCJ1YmFuayIsInVicyIsInVuaWNvbSIsInVuaXZlcnNpdHkiLCJ1bm8iLCJ1b2wiLCJ1cHMiLCJ2YWNhdGlvbnMiLCJ2YW5hIiwidmFuZ3VhcmQiLCJ2ZWdhcyIsInZlbnR1cmVzIiwidmVyaXNpZ24iLCJ2ZXJzaWNoZXJ1bmciLCJ2ZXQiLCJ2'@;
put 'aWFqZXMiLCJ2aWRlbyIsInZpZyIsInZpa2luZyIsInZpbGxhcyIsInZpbiIsInZpcCIsInZpcmdpbiIsInZpc2EiLCJ2aXNpb24iLCJ2aXZhIiwidml2byIsInZsYWFuZGVyZW4iLCJ2b2RrYSIsInZvbHZvIiwidm90ZSIsInZvdGluZyIsInZvdG8iLCJ2b3lhZ2UiLCJ3YWxlcyIsIndhbG1h'@;
put 'cnQiLCJ3YWx0ZXIiLCJ3YW5nIiwid2FuZ2dvdSIsIndhdGNoIiwid2F0Y2hlcyIsIndlYXRoZXIiLCJ3ZWF0aGVyY2hhbm5lbCIsIndlYmNhbSIsIndlYmVyIiwid2Vic2l0ZSIsIndlZCIsIndlZGRpbmciLCJ3ZWlibyIsIndlaXIiLCJ3aG9zd2hvIiwid2llbiIsIndpa2kiLCJ3aWxsaWFt'@;
put 'aGlsbCIsIndpbiIsIndpbmRvd3MiLCJ3aW5lIiwid2lubmVycyIsIndtZSIsIndvbHRlcnNrbHV3ZXIiLCJ3b29kc2lkZSIsIndvcmsiLCJ3b3JrcyIsIndvcmxkIiwid293Iiwid3RjIiwid3RmIiwieGJveCIsInhlcm94IiwieGlodWFuIiwieGluIiwiXHUwOTE1XHUwOTQ5XHUwOTJlIiwi'@;
put 'XHUzMGJiXHUzMGZjXHUzMGViIiwiXHU0ZjViXHU1YzcxIiwiXHU2MTQ4XHU1NTg0IiwiXHU5NmM2XHU1NmUyIiwiXHU1NzI4XHU3ZWJmIiwiXHU3MGI5XHU3NzBiIiwiXHUwZTA0XHUwZTJkXHUwZTIxIiwiXHU1MTZiXHU1MzY2IiwiXHUwNjQ1XHUwNjQ4XHUwNjQyXHUwNjM5IiwiXHU1MTZj'@;
put 'XHU3NmNhIiwiXHU1MTZjXHU1M2Y4IiwiXHU5OTk5XHU2ODNjXHU5MWNjXHU2MmM5IiwiXHU3ZjUxXHU3YWQ5IiwiXHU3OWZiXHU1MmE4IiwiXHU2MjExXHU3MjMxXHU0ZjYwIiwiXHUwNDNjXHUwNDNlXHUwNDQxXHUwNDNhXHUwNDMyXHUwNDMwIiwiXHUwNDNhXHUwNDMwXHUwNDQyXHUwNDNl'@;
put 'XHUwNDNiXHUwNDM4XHUwNDNhIiwiXHUwNDNlXHUwNDNkXHUwNDNiXHUwNDMwXHUwNDM5XHUwNDNkIiwiXHUwNDQxXHUwNDMwXHUwNDM5XHUwNDQyIiwiXHU4MDU0XHU5MDFhIiwiXHUwNWU3XHUwNWQ1XHUwNWRkIiwiXHU2NWY2XHU1YzFhIiwiXHU1ZmFlXHU1MzVhIiwiXHU2ZGUxXHU5YTZj'@;
put 'XHU5NTIxIiwiXHUzMGQ1XHUzMGExXHUzMGMzXHUzMGI3XHUzMGU3XHUzMGYzIiwiXHUwNDNlXHUwNDQwXHUwNDMzIiwiXHUwOTI4XHUwOTQ3XHUwOTFmIiwiXHUzMGI5XHUzMGM4XHUzMGEyIiwiXHUzMGEyXHUzMGRlXHUzMGJlXHUzMGYzIiwiXHVjMGJjXHVjMTMxIiwiXHU1NTQ2XHU2ODA3'@;
put 'IiwiXHU1NTQ2XHU1ZTk3IiwiXHU1NTQ2XHU1N2NlIiwiXHUwNDM0XHUwNDM1XHUwNDQyXHUwNDM4IiwiXHUzMGRkXHUzMGE0XHUzMGYzXHUzMGM4IiwiXHU2NWIwXHU5NWZiIiwiXHU1YmI2XHU5NmZiIiwiXHUwNjQzXHUwNjQ4XHUwNjQ1IiwiXHU0ZTJkXHU2NTg3XHU3ZjUxIiwiXHU0ZTJk'@;
put 'XHU0ZmUxIiwiXHU1YTMxXHU0ZTUwIiwiXHU4YzM3XHU2YjRjIiwiXHU5NmZiXHU4YTBhXHU3NmM4XHU3OWQxIiwiXHU4ZDJkXHU3MjY5IiwiXHUzMGFmXHUzMGU5XHUzMGE2XHUzMGM5IiwiXHU5MDFhXHU4Y2E5IiwiXHU3ZjUxXHU1ZTk3IiwiXHUwOTM4XHUwOTAyXHUwOTE3XHUwOTIwXHUw'@;
put 'OTI4IiwiXHU5OTEwXHU1Mzg1IiwiXHU3ZjUxXHU3ZWRjIiwiXHUwNDNhXHUwNDNlXHUwNDNjIiwiXHU0ZTlhXHU5YTZjXHU5MDBhIiwiXHU5OGRmXHU1NGMxIiwiXHU5OGRlXHU1MjI5XHU2ZDY2IiwiXHU2MjRiXHU2NzNhIiwiXHUwNjI3XHUwNjMxXHUwNjI3XHUwNjQ1XHUwNjQzXHUwNjQ4'@;
put 'IiwiXHUwNjI3XHUwNjQ0XHUwNjM5XHUwNjQ0XHUwNjRhXHUwNjI3XHUwNjQ2IiwiXHUwNjI4XHUwNjI3XHUwNjMyXHUwNjI3XHUwNjMxIiwiXHUwNjI3XHUwNjI4XHUwNjQ4XHUwNjM4XHUwNjI4XHUwNjRhIiwiXHUwNjQzXHUwNjI3XHUwNjJiXHUwNjQ4XHUwNjQ0XHUwNjRhXHUwNjQzIiwi'@;
put 'XHUwNjQ3XHUwNjQ1XHUwNjMxXHUwNjI3XHUwNjQ3IiwiXHViMmY3XHVjZWY0IiwiXHU2NTNmXHU1ZTljIiwiXHUwNjM0XHUwNjI4XHUwNjQzXHUwNjI5IiwiXHUwNjI4XHUwNjRhXHUwNjJhXHUwNjQzIiwiXHUwNjM5XHUwNjMxXHUwNjI4IiwiXHU2NzNhXHU2Nzg0IiwiXHU3ZWM0XHU3ZWM3'@;
put 'XHU2NzNhXHU2Nzg0IiwiXHU1MDY1XHU1ZWI3IiwiXHU2MmRiXHU4MDU4IiwiXHUwNDQwXHUwNDQzXHUwNDQxIiwiXHU1OTI3XHU2MmZmIiwiXHUzMDdmXHUzMDkzXHUzMDZhIiwiXHUzMGIwXHUzMGZjXHUzMGIwXHUzMGViIiwiXHU0ZTE2XHU3NTRjIiwiXHU2NmY4XHU3YzRkIiwiXHU3ZjUx'@;
put 'XHU1NzQwIiwiXHViMmY3XHViMTM3IiwiXHUzMGIzXHUzMGUwIiwiXHU1OTI5XHU0ZTNiXHU2NTU5IiwiXHU2ZTM4XHU2MjBmIiwidmVybVx4ZjZnZW5zYmVyYXRlciIsInZlcm1ceGY2Z2Vuc2JlcmF0dW5nIiwiXHU0ZjAxXHU0ZTFhIiwiXHU0ZmUxXHU2MDZmIiwiXHU1NjA5XHU5MWNjXHU1'@;
put 'OTI3XHU5MTUyXHU1ZTk3IiwiXHU1NjA5XHU5MWNjIiwiXHU1ZTdmXHU0ZTFjIiwiXHU2NTNmXHU1MmExIiwieHl6IiwieWFjaHRzIiwieWFob28iLCJ5YW1heHVuIiwieWFuZGV4IiwieW9kb2Jhc2hpIiwieW9nYSIsInlva29oYW1hIiwieW91IiwieW91dHViZSIsInl1biIsInphcHBvcyIs'@;
put 'InphcmEiLCJ6ZXJvIiwiemlwIiwiem9uZSIsInp1ZXJpY2giLCJjby5rcmQiLCJlZHUua3JkIiwiYXJ0LnBsIiwiZ2xpd2ljZS5wbCIsImtyYWtvdy5wbCIsInBvem5hbi5wbCIsIndyb2MucGwiLCJ6YWtvcGFuZS5wbCIsImxpYi5kZS51cyIsIjEyY2hhcnMuZGV2IiwiMTJjaGFycy5pdCIs'@;
put 'IjEyY2hhcnMucHJvIiwiY2MudWEiLCJpbmYudWEiLCJsdGQudWEiLCI2MTEudG8iLCJhMmhvc3RlZC5jb20iLCJjcHNlcnZlci5jb20iLCJhYWEudm9ka2EiLCIqLm9uLWFjb3JuLmlvIiwiYWN0aXZldHJhaWwuYml6IiwiYWRhcHRhYmxlLmFwcCIsImFkb2JlYWVtY2xvdWQuY29tIiwiKi5k'@;
put 'ZXYuYWRvYmVhZW1jbG91ZC5jb20iLCJhZW0ubGl2ZSIsImhseC5saXZlIiwiYWRvYmVhZW1jbG91ZC5uZXQiLCJhZW0ucGFnZSIsImhseC5wYWdlIiwiaGx4My5wYWdlIiwiYWRvYmVpby1zdGF0aWMubmV0IiwiYWRvYmVpb3J1bnRpbWUubmV0IiwiYWZyaWNhLmNvbSIsImJlZXAucGwiLCJh'@;
put 'aXJraXRhcHBzLmNvbSIsImFpcmtpdGFwcHMtYXUuY29tIiwiYWlya2l0YXBwcy5ldSIsImFpdmVuY2xvdWQuY29tIiwiYWthZG5zLm5ldCIsImFrYW1haS5uZXQiLCJha2FtYWktc3RhZ2luZy5uZXQiLCJha2FtYWllZGdlLm5ldCIsImFrYW1haWVkZ2Utc3RhZ2luZy5uZXQiLCJha2FtYWlo'@;
put 'ZC5uZXQiLCJha2FtYWloZC1zdGFnaW5nLm5ldCIsImFrYW1haW9yaWdpbi5uZXQiLCJha2FtYWlvcmlnaW4tc3RhZ2luZy5uZXQiLCJha2FtYWl6ZWQubmV0IiwiYWthbWFpemVkLXN0YWdpbmcubmV0IiwiZWRnZWtleS5uZXQiLCJlZGdla2V5LXN0YWdpbmcubmV0IiwiZWRnZXN1aXRlLm5l'@;
put 'dCIsImVkZ2VzdWl0ZS1zdGFnaW5nLm5ldCIsImJhcnN5LmNhIiwiKi5jb21wdXRlLmVzdGF0ZSIsIiouYWxjZXMubmV0d29yayIsImthc3NlcnZlci5jb20iLCJhbHRlcnZpc3RhLm9yZyIsImFsd2F5c2RhdGEubmV0IiwibXlhbWF6ZS5uZXQiLCJleGVjdXRlLWFwaS5jbi1ub3J0aC0xLmFt'@;
put 'YXpvbmF3cy5jb20uY24iLCJleGVjdXRlLWFwaS5jbi1ub3J0aHdlc3QtMS5hbWF6b25hd3MuY29tLmNuIiwiZXhlY3V0ZS1hcGkuYWYtc291dGgtMS5hbWF6b25hd3MuY29tIiwiZXhlY3V0ZS1hcGkuYXAtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJleGVjdXRlLWFwaS5hcC1ub3J0aGVhc3Qt'@;
put 'MS5hbWF6b25hd3MuY29tIiwiZXhlY3V0ZS1hcGkuYXAtbm9ydGhlYXN0LTIuYW1hem9uYXdzLmNvbSIsImV4ZWN1dGUtYXBpLmFwLW5vcnRoZWFzdC0zLmFtYXpvbmF3cy5jb20iLCJleGVjdXRlLWFwaS5hcC1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJleGVjdXRlLWFwaS5hcC1zb3V0aC0y'@;
put 'LmFtYXpvbmF3cy5jb20iLCJleGVjdXRlLWFwaS5hcC1zb3V0aGVhc3QtMS5hbWF6b25hd3MuY29tIiwiZXhlY3V0ZS1hcGkuYXAtc291dGhlYXN0LTIuYW1hem9uYXdzLmNvbSIsImV4ZWN1dGUtYXBpLmFwLXNvdXRoZWFzdC0zLmFtYXpvbmF3cy5jb20iLCJleGVjdXRlLWFwaS5hcC1zb3V0'@;
put 'aGVhc3QtNC5hbWF6b25hd3MuY29tIiwiZXhlY3V0ZS1hcGkuYXAtc291dGhlYXN0LTUuYW1hem9uYXdzLmNvbSIsImV4ZWN1dGUtYXBpLmNhLWNlbnRyYWwtMS5hbWF6b25hd3MuY29tIiwiZXhlY3V0ZS1hcGkuY2Etd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJleGVjdXRlLWFwaS5ldS1jZW50'@;
put 'cmFsLTEuYW1hem9uYXdzLmNvbSIsImV4ZWN1dGUtYXBpLmV1LWNlbnRyYWwtMi5hbWF6b25hd3MuY29tIiwiZXhlY3V0ZS1hcGkuZXUtbm9ydGgtMS5hbWF6b25hd3MuY29tIiwiZXhlY3V0ZS1hcGkuZXUtc291dGgtMS5hbWF6b25hd3MuY29tIiwiZXhlY3V0ZS1hcGkuZXUtc291dGgtMi5h'@;
put 'bWF6b25hd3MuY29tIiwiZXhlY3V0ZS1hcGkuZXUtd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJleGVjdXRlLWFwaS5ldS13ZXN0LTIuYW1hem9uYXdzLmNvbSIsImV4ZWN1dGUtYXBpLmV1LXdlc3QtMy5hbWF6b25hd3MuY29tIiwiZXhlY3V0ZS1hcGkuaWwtY2VudHJhbC0xLmFtYXpvbmF3cy5j'@;
put 'b20iLCJleGVjdXRlLWFwaS5tZS1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsImV4ZWN1dGUtYXBpLm1lLXNvdXRoLTEuYW1hem9uYXdzLmNvbSIsImV4ZWN1dGUtYXBpLnNhLWVhc3QtMS5hbWF6b25hd3MuY29tIiwiZXhlY3V0ZS1hcGkudXMtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJleGVj'@;
put 'dXRlLWFwaS51cy1lYXN0LTIuYW1hem9uYXdzLmNvbSIsImV4ZWN1dGUtYXBpLnVzLWdvdi1lYXN0LTEuYW1hem9uYXdzLmNvbSIsImV4ZWN1dGUtYXBpLnVzLWdvdi13ZXN0LTEuYW1hem9uYXdzLmNvbSIsImV4ZWN1dGUtYXBpLnVzLXdlc3QtMS5hbWF6b25hd3MuY29tIiwiZXhlY3V0ZS1h'@;
put 'cGkudXMtd2VzdC0yLmFtYXpvbmF3cy5jb20iLCJjbG91ZGZyb250Lm5ldCIsImF1dGguYWYtc291dGgtMS5hbWF6b25jb2duaXRvLmNvbSIsImF1dGguYXAtZWFzdC0xLmFtYXpvbmNvZ25pdG8uY29tIiwiYXV0aC5hcC1ub3J0aGVhc3QtMS5hbWF6b25jb2duaXRvLmNvbSIsImF1dGguYXAt'@;
put 'bm9ydGhlYXN0LTIuYW1hem9uY29nbml0by5jb20iLCJhdXRoLmFwLW5vcnRoZWFzdC0zLmFtYXpvbmNvZ25pdG8uY29tIiwiYXV0aC5hcC1zb3V0aC0xLmFtYXpvbmNvZ25pdG8uY29tIiwiYXV0aC5hcC1zb3V0aC0yLmFtYXpvbmNvZ25pdG8uY29tIiwiYXV0aC5hcC1zb3V0aGVhc3QtMS5h'@;
put 'bWF6b25jb2duaXRvLmNvbSIsImF1dGguYXAtc291dGhlYXN0LTIuYW1hem9uY29nbml0by5jb20iLCJhdXRoLmFwLXNvdXRoZWFzdC0zLmFtYXpvbmNvZ25pdG8uY29tIiwiYXV0aC5hcC1zb3V0aGVhc3QtNC5hbWF6b25jb2duaXRvLmNvbSIsImF1dGguY2EtY2VudHJhbC0xLmFtYXpvbmNv'@;
put 'Z25pdG8uY29tIiwiYXV0aC5jYS13ZXN0LTEuYW1hem9uY29nbml0by5jb20iLCJhdXRoLmV1LWNlbnRyYWwtMS5hbWF6b25jb2duaXRvLmNvbSIsImF1dGguZXUtY2VudHJhbC0yLmFtYXpvbmNvZ25pdG8uY29tIiwiYXV0aC5ldS1ub3J0aC0xLmFtYXpvbmNvZ25pdG8uY29tIiwiYXV0aC5l'@;
put 'dS1zb3V0aC0xLmFtYXpvbmNvZ25pdG8uY29tIiwiYXV0aC5ldS1zb3V0aC0yLmFtYXpvbmNvZ25pdG8uY29tIiwiYXV0aC5ldS13ZXN0LTEuYW1hem9uY29nbml0by5jb20iLCJhdXRoLmV1LXdlc3QtMi5hbWF6b25jb2duaXRvLmNvbSIsImF1dGguZXUtd2VzdC0zLmFtYXpvbmNvZ25pdG8u'@;
put 'Y29tIiwiYXV0aC5pbC1jZW50cmFsLTEuYW1hem9uY29nbml0by5jb20iLCJhdXRoLm1lLWNlbnRyYWwtMS5hbWF6b25jb2duaXRvLmNvbSIsImF1dGgubWUtc291dGgtMS5hbWF6b25jb2duaXRvLmNvbSIsImF1dGguc2EtZWFzdC0xLmFtYXpvbmNvZ25pdG8uY29tIiwiYXV0aC51cy1lYXN0'@;
put 'LTEuYW1hem9uY29nbml0by5jb20iLCJhdXRoLWZpcHMudXMtZWFzdC0xLmFtYXpvbmNvZ25pdG8uY29tIiwiYXV0aC51cy1lYXN0LTIuYW1hem9uY29nbml0by5jb20iLCJhdXRoLWZpcHMudXMtZWFzdC0yLmFtYXpvbmNvZ25pdG8uY29tIiwiYXV0aC1maXBzLnVzLWdvdi13ZXN0LTEuYW1h'@;
put 'em9uY29nbml0by5jb20iLCJhdXRoLnVzLXdlc3QtMS5hbWF6b25jb2duaXRvLmNvbSIsImF1dGgtZmlwcy51cy13ZXN0LTEuYW1hem9uY29nbml0by5jb20iLCJhdXRoLnVzLXdlc3QtMi5hbWF6b25jb2duaXRvLmNvbSIsImF1dGgtZmlwcy51cy13ZXN0LTIuYW1hem9uY29nbml0by5jb20i'@;
put 'LCIqLmNvbXB1dGUuYW1hem9uYXdzLmNvbS5jbiIsIiouY29tcHV0ZS5hbWF6b25hd3MuY29tIiwiKi5jb21wdXRlLTEuYW1hem9uYXdzLmNvbSIsInVzLWVhc3QtMS5hbWF6b25hd3MuY29tIiwiZW1yYXBwdWktcHJvZC5jbi1ub3J0aC0xLmFtYXpvbmF3cy5jb20uY24iLCJlbXJub3RlYm9v'@;
put 'a3MtcHJvZC5jbi1ub3J0aC0xLmFtYXpvbmF3cy5jb20uY24iLCJlbXJzdHVkaW8tcHJvZC5jbi1ub3J0aC0xLmFtYXpvbmF3cy5jb20uY24iLCJlbXJhcHB1aS1wcm9kLmNuLW5vcnRod2VzdC0xLmFtYXpvbmF3cy5jb20uY24iLCJlbXJub3RlYm9va3MtcHJvZC5jbi1ub3J0aHdlc3QtMS5h'@;
put 'bWF6b25hd3MuY29tLmNuIiwiZW1yc3R1ZGlvLXByb2QuY24tbm9ydGh3ZXN0LTEuYW1hem9uYXdzLmNvbS5jbiIsImVtcmFwcHVpLXByb2QuYWYtc291dGgtMS5hbWF6b25hd3MuY29tIiwiZW1ybm90ZWJvb2tzLXByb2QuYWYtc291dGgtMS5hbWF6b25hd3MuY29tIiwiZW1yc3R1ZGlvLXBy'@;
put 'b2QuYWYtc291dGgtMS5hbWF6b25hd3MuY29tIiwiZW1yYXBwdWktcHJvZC5hcC1lYXN0LTEuYW1hem9uYXdzLmNvbSIsImVtcm5vdGVib29rcy1wcm9kLmFwLWVhc3QtMS5hbWF6b25hd3MuY29tIiwiZW1yc3R1ZGlvLXByb2QuYXAtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJlbXJhcHB1aS1w'@;
put 'cm9kLmFwLW5vcnRoZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJlbXJub3RlYm9va3MtcHJvZC5hcC1ub3J0aGVhc3QtMS5hbWF6b25hd3MuY29tIiwiZW1yc3R1ZGlvLXByb2QuYXAtbm9ydGhlYXN0LTEuYW1hem9uYXdzLmNvbSIsImVtcmFwcHVpLXByb2QuYXAtbm9ydGhlYXN0LTIuYW1hem9u'@;
put 'YXdzLmNvbSIsImVtcm5vdGVib29rcy1wcm9kLmFwLW5vcnRoZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJlbXJzdHVkaW8tcHJvZC5hcC1ub3J0aGVhc3QtMi5hbWF6b25hd3MuY29tIiwiZW1yYXBwdWktcHJvZC5hcC1ub3J0aGVhc3QtMy5hbWF6b25hd3MuY29tIiwiZW1ybm90ZWJvb2tzLXBy'@;
put 'b2QuYXAtbm9ydGhlYXN0LTMuYW1hem9uYXdzLmNvbSIsImVtcnN0dWRpby1wcm9kLmFwLW5vcnRoZWFzdC0zLmFtYXpvbmF3cy5jb20iLCJlbXJhcHB1aS1wcm9kLmFwLXNvdXRoLTEuYW1hem9uYXdzLmNvbSIsImVtcm5vdGVib29rcy1wcm9kLmFwLXNvdXRoLTEuYW1hem9uYXdzLmNvbSIs'@;
put 'ImVtcnN0dWRpby1wcm9kLmFwLXNvdXRoLTEuYW1hem9uYXdzLmNvbSIsImVtcmFwcHVpLXByb2QuYXAtc291dGgtMi5hbWF6b25hd3MuY29tIiwiZW1ybm90ZWJvb2tzLXByb2QuYXAtc291dGgtMi5hbWF6b25hd3MuY29tIiwiZW1yc3R1ZGlvLXByb2QuYXAtc291dGgtMi5hbWF6b25hd3Mu'@;
put 'Y29tIiwiZW1yYXBwdWktcHJvZC5hcC1zb3V0aGVhc3QtMS5hbWF6b25hd3MuY29tIiwiZW1ybm90ZWJvb2tzLXByb2QuYXAtc291dGhlYXN0LTEuYW1hem9uYXdzLmNvbSIsImVtcnN0dWRpby1wcm9kLmFwLXNvdXRoZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJlbXJhcHB1aS1wcm9kLmFwLXNv'@;
put 'dXRoZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJlbXJub3RlYm9va3MtcHJvZC5hcC1zb3V0aGVhc3QtMi5hbWF6b25hd3MuY29tIiwiZW1yc3R1ZGlvLXByb2QuYXAtc291dGhlYXN0LTIuYW1hem9uYXdzLmNvbSIsImVtcmFwcHVpLXByb2QuYXAtc291dGhlYXN0LTMuYW1hem9uYXdzLmNvbSIs'@;
put 'ImVtcm5vdGVib29rcy1wcm9kLmFwLXNvdXRoZWFzdC0zLmFtYXpvbmF3cy5jb20iLCJlbXJzdHVkaW8tcHJvZC5hcC1zb3V0aGVhc3QtMy5hbWF6b25hd3MuY29tIiwiZW1yYXBwdWktcHJvZC5hcC1zb3V0aGVhc3QtNC5hbWF6b25hd3MuY29tIiwiZW1ybm90ZWJvb2tzLXByb2QuYXAtc291'@;
put 'dGhlYXN0LTQuYW1hem9uYXdzLmNvbSIsImVtcnN0dWRpby1wcm9kLmFwLXNvdXRoZWFzdC00LmFtYXpvbmF3cy5jb20iLCJlbXJhcHB1aS1wcm9kLmNhLWNlbnRyYWwtMS5hbWF6b25hd3MuY29tIiwiZW1ybm90ZWJvb2tzLXByb2QuY2EtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJlbXJz'@;
put 'dHVkaW8tcHJvZC5jYS1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsImVtcmFwcHVpLXByb2QuY2Etd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJlbXJub3RlYm9va3MtcHJvZC5jYS13ZXN0LTEuYW1hem9uYXdzLmNvbSIsImVtcnN0dWRpby1wcm9kLmNhLXdlc3QtMS5hbWF6b25hd3MuY29tIiwi'@;
put 'ZW1yYXBwdWktcHJvZC5ldS1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsImVtcm5vdGVib29rcy1wcm9kLmV1LWNlbnRyYWwtMS5hbWF6b25hd3MuY29tIiwiZW1yc3R1ZGlvLXByb2QuZXUtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJlbXJhcHB1aS1wcm9kLmV1LWNlbnRyYWwtMi5hbWF6'@;
put 'b25hd3MuY29tIiwiZW1ybm90ZWJvb2tzLXByb2QuZXUtY2VudHJhbC0yLmFtYXpvbmF3cy5jb20iLCJlbXJzdHVkaW8tcHJvZC5ldS1jZW50cmFsLTIuYW1hem9uYXdzLmNvbSIsImVtcmFwcHVpLXByb2QuZXUtbm9ydGgtMS5hbWF6b25hd3MuY29tIiwiZW1ybm90ZWJvb2tzLXByb2QuZXUt'@;
put 'bm9ydGgtMS5hbWF6b25hd3MuY29tIiwiZW1yc3R1ZGlvLXByb2QuZXUtbm9ydGgtMS5hbWF6b25hd3MuY29tIiwiZW1yYXBwdWktcHJvZC5ldS1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJlbXJub3RlYm9va3MtcHJvZC5ldS1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJlbXJzdHVkaW8tcHJv'@;
put 'ZC5ldS1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJlbXJhcHB1aS1wcm9kLmV1LXNvdXRoLTIuYW1hem9uYXdzLmNvbSIsImVtcm5vdGVib29rcy1wcm9kLmV1LXNvdXRoLTIuYW1hem9uYXdzLmNvbSIsImVtcnN0dWRpby1wcm9kLmV1LXNvdXRoLTIuYW1hem9uYXdzLmNvbSIsImVtcmFwcHVp'@;
put 'LXByb2QuZXUtd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJlbXJub3RlYm9va3MtcHJvZC5ldS13ZXN0LTEuYW1hem9uYXdzLmNvbSIsImVtcnN0dWRpby1wcm9kLmV1LXdlc3QtMS5hbWF6b25hd3MuY29tIiwiZW1yYXBwdWktcHJvZC5ldS13ZXN0LTIuYW1hem9uYXdzLmNvbSIsImVtcm5vdGVi'@;
put 'b29rcy1wcm9kLmV1LXdlc3QtMi5hbWF6b25hd3MuY29tIiwiZW1yc3R1ZGlvLXByb2QuZXUtd2VzdC0yLmFtYXpvbmF3cy5jb20iLCJlbXJhcHB1aS1wcm9kLmV1LXdlc3QtMy5hbWF6b25hd3MuY29tIiwiZW1ybm90ZWJvb2tzLXByb2QuZXUtd2VzdC0zLmFtYXpvbmF3cy5jb20iLCJlbXJz'@;
put 'dHVkaW8tcHJvZC5ldS13ZXN0LTMuYW1hem9uYXdzLmNvbSIsImVtcmFwcHVpLXByb2QuaWwtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJlbXJub3RlYm9va3MtcHJvZC5pbC1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsImVtcnN0dWRpby1wcm9kLmlsLWNlbnRyYWwtMS5hbWF6b25hd3Mu'@;
put 'Y29tIiwiZW1yYXBwdWktcHJvZC5tZS1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsImVtcm5vdGVib29rcy1wcm9kLm1lLWNlbnRyYWwtMS5hbWF6b25hd3MuY29tIiwiZW1yc3R1ZGlvLXByb2QubWUtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJlbXJhcHB1aS1wcm9kLm1lLXNvdXRoLTEu'@;
put 'YW1hem9uYXdzLmNvbSIsImVtcm5vdGVib29rcy1wcm9kLm1lLXNvdXRoLTEuYW1hem9uYXdzLmNvbSIsImVtcnN0dWRpby1wcm9kLm1lLXNvdXRoLTEuYW1hem9uYXdzLmNvbSIsImVtcmFwcHVpLXByb2Quc2EtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJlbXJub3RlYm9va3MtcHJvZC5zYS1l'@;
put 'YXN0LTEuYW1hem9uYXdzLmNvbSIsImVtcnN0dWRpby1wcm9kLnNhLWVhc3QtMS5hbWF6b25hd3MuY29tIiwiZW1yYXBwdWktcHJvZC51cy1lYXN0LTEuYW1hem9uYXdzLmNvbSIsImVtcm5vdGVib29rcy1wcm9kLnVzLWVhc3QtMS5hbWF6b25hd3MuY29tIiwiZW1yc3R1ZGlvLXByb2QudXMt'@;
put 'ZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJlbXJhcHB1aS1wcm9kLnVzLWVhc3QtMi5hbWF6b25hd3MuY29tIiwiZW1ybm90ZWJvb2tzLXByb2QudXMtZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJlbXJzdHVkaW8tcHJvZC51cy1lYXN0LTIuYW1hem9uYXdzLmNvbSIsImVtcmFwcHVpLXByb2QudXMt'@;
put 'Z292LWVhc3QtMS5hbWF6b25hd3MuY29tIiwiZW1ybm90ZWJvb2tzLXByb2QudXMtZ292LWVhc3QtMS5hbWF6b25hd3MuY29tIiwiZW1yc3R1ZGlvLXByb2QudXMtZ292LWVhc3QtMS5hbWF6b25hd3MuY29tIiwiZW1yYXBwdWktcHJvZC51cy1nb3Ytd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJl'@;
put 'bXJub3RlYm9va3MtcHJvZC51cy1nb3Ytd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJlbXJzdHVkaW8tcHJvZC51cy1nb3Ytd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJlbXJhcHB1aS1wcm9kLnVzLXdlc3QtMS5hbWF6b25hd3MuY29tIiwiZW1ybm90ZWJvb2tzLXByb2QudXMtd2VzdC0xLmFtYXpv'@;
put 'bmF3cy5jb20iLCJlbXJzdHVkaW8tcHJvZC51cy13ZXN0LTEuYW1hem9uYXdzLmNvbSIsImVtcmFwcHVpLXByb2QudXMtd2VzdC0yLmFtYXpvbmF3cy5jb20iLCJlbXJub3RlYm9va3MtcHJvZC51cy13ZXN0LTIuYW1hem9uYXdzLmNvbSIsImVtcnN0dWRpby1wcm9kLnVzLXdlc3QtMi5hbWF6'@;
put 'b25hd3MuY29tIiwiKi5jbi1ub3J0aC0xLmFpcmZsb3cuYW1hem9uYXdzLmNvbS5jbiIsIiouY24tbm9ydGh3ZXN0LTEuYWlyZmxvdy5hbWF6b25hd3MuY29tLmNuIiwiKi5hZi1zb3V0aC0xLmFpcmZsb3cuYW1hem9uYXdzLmNvbSIsIiouYXAtZWFzdC0xLmFpcmZsb3cuYW1hem9uYXdzLmNv'@;
put 'bSIsIiouYXAtbm9ydGhlYXN0LTEuYWlyZmxvdy5hbWF6b25hd3MuY29tIiwiKi5hcC1ub3J0aGVhc3QtMi5haXJmbG93LmFtYXpvbmF3cy5jb20iLCIqLmFwLW5vcnRoZWFzdC0zLmFpcmZsb3cuYW1hem9uYXdzLmNvbSIsIiouYXAtc291dGgtMS5haXJmbG93LmFtYXpvbmF3cy5jb20iLCIq'@;
put 'LmFwLXNvdXRoLTIuYWlyZmxvdy5hbWF6b25hd3MuY29tIiwiKi5hcC1zb3V0aGVhc3QtMS5haXJmbG93LmFtYXpvbmF3cy5jb20iLCIqLmFwLXNvdXRoZWFzdC0yLmFpcmZsb3cuYW1hem9uYXdzLmNvbSIsIiouYXAtc291dGhlYXN0LTMuYWlyZmxvdy5hbWF6b25hd3MuY29tIiwiKi5hcC1z'@;
put 'b3V0aGVhc3QtNC5haXJmbG93LmFtYXpvbmF3cy5jb20iLCIqLmNhLWNlbnRyYWwtMS5haXJmbG93LmFtYXpvbmF3cy5jb20iLCIqLmNhLXdlc3QtMS5haXJmbG93LmFtYXpvbmF3cy5jb20iLCIqLmV1LWNlbnRyYWwtMS5haXJmbG93LmFtYXpvbmF3cy5jb20iLCIqLmV1LWNlbnRyYWwtMi5h'@;
put 'aXJmbG93LmFtYXpvbmF3cy5jb20iLCIqLmV1LW5vcnRoLTEuYWlyZmxvdy5hbWF6b25hd3MuY29tIiwiKi5ldS1zb3V0aC0xLmFpcmZsb3cuYW1hem9uYXdzLmNvbSIsIiouZXUtc291dGgtMi5haXJmbG93LmFtYXpvbmF3cy5jb20iLCIqLmV1LXdlc3QtMS5haXJmbG93LmFtYXpvbmF3cy5j'@;
put 'b20iLCIqLmV1LXdlc3QtMi5haXJmbG93LmFtYXpvbmF3cy5jb20iLCIqLmV1LXdlc3QtMy5haXJmbG93LmFtYXpvbmF3cy5jb20iLCIqLmlsLWNlbnRyYWwtMS5haXJmbG93LmFtYXpvbmF3cy5jb20iLCIqLm1lLWNlbnRyYWwtMS5haXJmbG93LmFtYXpvbmF3cy5jb20iLCIqLm1lLXNvdXRo'@;
put 'LTEuYWlyZmxvdy5hbWF6b25hd3MuY29tIiwiKi5zYS1lYXN0LTEuYWlyZmxvdy5hbWF6b25hd3MuY29tIiwiKi51cy1lYXN0LTEuYWlyZmxvdy5hbWF6b25hd3MuY29tIiwiKi51cy1lYXN0LTIuYWlyZmxvdy5hbWF6b25hd3MuY29tIiwiKi51cy13ZXN0LTEuYWlyZmxvdy5hbWF6b25hd3Mu'@;
put 'Y29tIiwiKi51cy13ZXN0LTIuYWlyZmxvdy5hbWF6b25hd3MuY29tIiwiczMuZHVhbHN0YWNrLmNuLW5vcnRoLTEuYW1hem9uYXdzLmNvbS5jbiIsInMzLWFjY2Vzc3BvaW50LmR1YWxzdGFjay5jbi1ub3J0aC0xLmFtYXpvbmF3cy5jb20uY24iLCJzMy13ZWJzaXRlLmR1YWxzdGFjay5jbi1u'@;
put 'b3J0aC0xLmFtYXpvbmF3cy5jb20uY24iLCJzMy5jbi1ub3J0aC0xLmFtYXpvbmF3cy5jb20uY24iLCJzMy1hY2Nlc3Nwb2ludC5jbi1ub3J0aC0xLmFtYXpvbmF3cy5jb20uY24iLCJzMy1kZXByZWNhdGVkLmNuLW5vcnRoLTEuYW1hem9uYXdzLmNvbS5jbiIsInMzLW9iamVjdC1sYW1iZGEu'@;
put 'Y24tbm9ydGgtMS5hbWF6b25hd3MuY29tLmNuIiwiczMtd2Vic2l0ZS5jbi1ub3J0aC0xLmFtYXpvbmF3cy5jb20uY24iLCJzMy5kdWFsc3RhY2suY24tbm9ydGh3ZXN0LTEuYW1hem9uYXdzLmNvbS5jbiIsInMzLWFjY2Vzc3BvaW50LmR1YWxzdGFjay5jbi1ub3J0aHdlc3QtMS5hbWF6b25h'@;
put 'd3MuY29tLmNuIiwiczMuY24tbm9ydGh3ZXN0LTEuYW1hem9uYXdzLmNvbS5jbiIsInMzLWFjY2Vzc3BvaW50LmNuLW5vcnRod2VzdC0xLmFtYXpvbmF3cy5jb20uY24iLCJzMy1vYmplY3QtbGFtYmRhLmNuLW5vcnRod2VzdC0xLmFtYXpvbmF3cy5jb20uY24iLCJzMy13ZWJzaXRlLmNuLW5v'@;
put 'cnRod2VzdC0xLmFtYXpvbmF3cy5jb20uY24iLCJzMy5kdWFsc3RhY2suYWYtc291dGgtMS5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQuZHVhbHN0YWNrLmFmLXNvdXRoLTEuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUuZHVhbHN0YWNrLmFmLXNvdXRoLTEuYW1hem9uYXdzLmNv'@;
put 'bSIsInMzLmFmLXNvdXRoLTEuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LmFmLXNvdXRoLTEuYW1hem9uYXdzLmNvbSIsInMzLW9iamVjdC1sYW1iZGEuYWYtc291dGgtMS5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS5hZi1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJzMy5kdWFs'@;
put 'c3RhY2suYXAtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC5kdWFsc3RhY2suYXAtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy5hcC1lYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LmFwLWVhc3QtMS5hbWF6b25hd3MuY29tIiwiczMtb2JqZWN0LWxh'@;
put 'bWJkYS5hcC1lYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUuYXAtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy5kdWFsc3RhY2suYXAtbm9ydGhlYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LmR1YWxzdGFjay5hcC1ub3J0aGVhc3QtMS5hbWF6b25hd3MuY29t'@;
put 'IiwiczMtd2Vic2l0ZS5kdWFsc3RhY2suYXAtbm9ydGhlYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLmFwLW5vcnRoZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC5hcC1ub3J0aGVhc3QtMS5hbWF6b25hd3MuY29tIiwiczMtb2JqZWN0LWxhbWJkYS5hcC1ub3J0aGVhc3Qt'@;
put 'MS5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS5hcC1ub3J0aGVhc3QtMS5hbWF6b25hd3MuY29tIiwiczMuZHVhbHN0YWNrLmFwLW5vcnRoZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC5kdWFsc3RhY2suYXAtbm9ydGhlYXN0LTIuYW1hem9uYXdzLmNvbSIsInMzLXdl'@;
put 'YnNpdGUuZHVhbHN0YWNrLmFwLW5vcnRoZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy5hcC1ub3J0aGVhc3QtMi5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQuYXAtbm9ydGhlYXN0LTIuYW1hem9uYXdzLmNvbSIsInMzLW9iamVjdC1sYW1iZGEuYXAtbm9ydGhlYXN0LTIuYW1hem9u'@;
put 'YXdzLmNvbSIsInMzLXdlYnNpdGUuYXAtbm9ydGhlYXN0LTIuYW1hem9uYXdzLmNvbSIsInMzLmR1YWxzdGFjay5hcC1ub3J0aGVhc3QtMy5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQuZHVhbHN0YWNrLmFwLW5vcnRoZWFzdC0zLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLmR1'@;
put 'YWxzdGFjay5hcC1ub3J0aGVhc3QtMy5hbWF6b25hd3MuY29tIiwiczMuYXAtbm9ydGhlYXN0LTMuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LmFwLW5vcnRoZWFzdC0zLmFtYXpvbmF3cy5jb20iLCJzMy1vYmplY3QtbGFtYmRhLmFwLW5vcnRoZWFzdC0zLmFtYXpvbmF3cy5jb20i'@;
put 'LCJzMy13ZWJzaXRlLmFwLW5vcnRoZWFzdC0zLmFtYXpvbmF3cy5jb20iLCJzMy5kdWFsc3RhY2suYXAtc291dGgtMS5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQuZHVhbHN0YWNrLmFwLXNvdXRoLTEuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUuZHVhbHN0YWNrLmFwLXNvdXRo'@;
put 'LTEuYW1hem9uYXdzLmNvbSIsInMzLmFwLXNvdXRoLTEuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LmFwLXNvdXRoLTEuYW1hem9uYXdzLmNvbSIsInMzLW9iamVjdC1sYW1iZGEuYXAtc291dGgtMS5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS5hcC1zb3V0aC0xLmFtYXpvbmF3'@;
put 'cy5jb20iLCJzMy5kdWFsc3RhY2suYXAtc291dGgtMi5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQuZHVhbHN0YWNrLmFwLXNvdXRoLTIuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUuZHVhbHN0YWNrLmFwLXNvdXRoLTIuYW1hem9uYXdzLmNvbSIsInMzLmFwLXNvdXRoLTIuYW1h'@;
put 'em9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LmFwLXNvdXRoLTIuYW1hem9uYXdzLmNvbSIsInMzLW9iamVjdC1sYW1iZGEuYXAtc291dGgtMi5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS5hcC1zb3V0aC0yLmFtYXpvbmF3cy5jb20iLCJzMy5kdWFsc3RhY2suYXAtc291dGhlYXN0LTEu'@;
put 'YW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LmR1YWxzdGFjay5hcC1zb3V0aGVhc3QtMS5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS5kdWFsc3RhY2suYXAtc291dGhlYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLmFwLXNvdXRoZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nl'@;
put 'c3Nwb2ludC5hcC1zb3V0aGVhc3QtMS5hbWF6b25hd3MuY29tIiwiczMtb2JqZWN0LWxhbWJkYS5hcC1zb3V0aGVhc3QtMS5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS5hcC1zb3V0aGVhc3QtMS5hbWF6b25hd3MuY29tIiwiczMuZHVhbHN0YWNrLmFwLXNvdXRoZWFzdC0yLmFtYXpvbmF3'@;
put 'cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC5kdWFsc3RhY2suYXAtc291dGhlYXN0LTIuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUuZHVhbHN0YWNrLmFwLXNvdXRoZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy5hcC1zb3V0aGVhc3QtMi5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQu'@;
put 'YXAtc291dGhlYXN0LTIuYW1hem9uYXdzLmNvbSIsInMzLW9iamVjdC1sYW1iZGEuYXAtc291dGhlYXN0LTIuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUuYXAtc291dGhlYXN0LTIuYW1hem9uYXdzLmNvbSIsInMzLmR1YWxzdGFjay5hcC1zb3V0aGVhc3QtMy5hbWF6b25hd3MuY29tIiwi'@;
put 'czMtYWNjZXNzcG9pbnQuZHVhbHN0YWNrLmFwLXNvdXRoZWFzdC0zLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLmR1YWxzdGFjay5hcC1zb3V0aGVhc3QtMy5hbWF6b25hd3MuY29tIiwiczMuYXAtc291dGhlYXN0LTMuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LmFwLXNvdXRo'@;
put 'ZWFzdC0zLmFtYXpvbmF3cy5jb20iLCJzMy1vYmplY3QtbGFtYmRhLmFwLXNvdXRoZWFzdC0zLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLmFwLXNvdXRoZWFzdC0zLmFtYXpvbmF3cy5jb20iLCJzMy5kdWFsc3RhY2suYXAtc291dGhlYXN0LTQuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vz'@;
put 'c3BvaW50LmR1YWxzdGFjay5hcC1zb3V0aGVhc3QtNC5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS5kdWFsc3RhY2suYXAtc291dGhlYXN0LTQuYW1hem9uYXdzLmNvbSIsInMzLmFwLXNvdXRoZWFzdC00LmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC5hcC1zb3V0aGVhc3QtNC5h'@;
put 'bWF6b25hd3MuY29tIiwiczMtb2JqZWN0LWxhbWJkYS5hcC1zb3V0aGVhc3QtNC5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS5hcC1zb3V0aGVhc3QtNC5hbWF6b25hd3MuY29tIiwiczMuZHVhbHN0YWNrLmFwLXNvdXRoZWFzdC01LmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC5k'@;
put 'dWFsc3RhY2suYXAtc291dGhlYXN0LTUuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUuZHVhbHN0YWNrLmFwLXNvdXRoZWFzdC01LmFtYXpvbmF3cy5jb20iLCJzMy5hcC1zb3V0aGVhc3QtNS5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQuYXAtc291dGhlYXN0LTUuYW1hem9uYXdz'@;
put 'LmNvbSIsInMzLWRlcHJlY2F0ZWQuYXAtc291dGhlYXN0LTUuYW1hem9uYXdzLmNvbSIsInMzLW9iamVjdC1sYW1iZGEuYXAtc291dGhlYXN0LTUuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUuYXAtc291dGhlYXN0LTUuYW1hem9uYXdzLmNvbSIsInMzLmR1YWxzdGFjay5jYS1jZW50cmFs'@;
put 'LTEuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LmR1YWxzdGFjay5jYS1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LWZpcHMuZHVhbHN0YWNrLmNhLWNlbnRyYWwtMS5hbWF6b25hd3MuY29tIiwiczMtZmlwcy5kdWFsc3RhY2suY2EtY2VudHJhbC0xLmFt'@;
put 'YXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLmR1YWxzdGFjay5jYS1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsInMzLmNhLWNlbnRyYWwtMS5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQuY2EtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC1maXBzLmNhLWNl'@;
put 'bnRyYWwtMS5hbWF6b25hd3MuY29tIiwiczMtZmlwcy5jYS1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsInMzLW9iamVjdC1sYW1iZGEuY2EtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLmNhLWNlbnRyYWwtMS5hbWF6b25hd3MuY29tIiwiczMuZHVhbHN0YWNrLmNhLXdl'@;
put 'c3QtMS5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQuZHVhbHN0YWNrLmNhLXdlc3QtMS5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQtZmlwcy5kdWFsc3RhY2suY2Etd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy1maXBzLmR1YWxzdGFjay5jYS13ZXN0LTEuYW1hem9uYXdz'@;
put 'LmNvbSIsInMzLXdlYnNpdGUuZHVhbHN0YWNrLmNhLXdlc3QtMS5hbWF6b25hd3MuY29tIiwiczMuY2Etd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC5jYS13ZXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LWZpcHMuY2Etd2VzdC0xLmFtYXpvbmF3cy5j'@;
put 'b20iLCJzMy1maXBzLmNhLXdlc3QtMS5hbWF6b25hd3MuY29tIiwiczMtb2JqZWN0LWxhbWJkYS5jYS13ZXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUuY2Etd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy5kdWFsc3RhY2suZXUtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJzMy1h'@;
put 'Y2Nlc3Nwb2ludC5kdWFsc3RhY2suZXUtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLmR1YWxzdGFjay5ldS1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsInMzLmV1LWNlbnRyYWwtMS5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQuZXUtY2VudHJhbC0xLmFtYXpv'@;
put 'bmF3cy5jb20iLCJzMy1vYmplY3QtbGFtYmRhLmV1LWNlbnRyYWwtMS5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS5ldS1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsInMzLmR1YWxzdGFjay5ldS1jZW50cmFsLTIuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LmR1YWxzdGFjay5l'@;
put 'dS1jZW50cmFsLTIuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUuZHVhbHN0YWNrLmV1LWNlbnRyYWwtMi5hbWF6b25hd3MuY29tIiwiczMuZXUtY2VudHJhbC0yLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC5ldS1jZW50cmFsLTIuYW1hem9uYXdzLmNvbSIsInMzLW9iamVjdC1s'@;
put 'YW1iZGEuZXUtY2VudHJhbC0yLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLmV1LWNlbnRyYWwtMi5hbWF6b25hd3MuY29tIiwiczMuZHVhbHN0YWNrLmV1LW5vcnRoLTEuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LmR1YWxzdGFjay5ldS1ub3J0aC0xLmFtYXpvbmF3cy5jb20i'@;
put 'LCJzMy5ldS1ub3J0aC0xLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC5ldS1ub3J0aC0xLmFtYXpvbmF3cy5jb20iLCJzMy1vYmplY3QtbGFtYmRhLmV1LW5vcnRoLTEuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUuZXUtbm9ydGgtMS5hbWF6b25hd3MuY29tIiwiczMuZHVhbHN0'@;
put 'YWNrLmV1LXNvdXRoLTEuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LmR1YWxzdGFjay5ldS1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLmR1YWxzdGFjay5ldS1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJzMy5ldS1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJzMy1h'@;
put 'Y2Nlc3Nwb2ludC5ldS1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJzMy1vYmplY3QtbGFtYmRhLmV1LXNvdXRoLTEuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUuZXUtc291dGgtMS5hbWF6b25hd3MuY29tIiwiczMuZHVhbHN0YWNrLmV1LXNvdXRoLTIuYW1hem9uYXdzLmNvbSIsInMzLWFj'@;
put 'Y2Vzc3BvaW50LmR1YWxzdGFjay5ldS1zb3V0aC0yLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLmR1YWxzdGFjay5ldS1zb3V0aC0yLmFtYXpvbmF3cy5jb20iLCJzMy5ldS1zb3V0aC0yLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC5ldS1zb3V0aC0yLmFtYXpvbmF3cy5jb20i'@;
put 'LCJzMy1vYmplY3QtbGFtYmRhLmV1LXNvdXRoLTIuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUuZXUtc291dGgtMi5hbWF6b25hd3MuY29tIiwiczMuZHVhbHN0YWNrLmV1LXdlc3QtMS5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQuZHVhbHN0YWNrLmV1LXdlc3QtMS5hbWF6b25h'@;
put 'd3MuY29tIiwiczMtd2Vic2l0ZS5kdWFsc3RhY2suZXUtd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy5ldS13ZXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LmV1LXdlc3QtMS5hbWF6b25hd3MuY29tIiwiczMtZGVwcmVjYXRlZC5ldS13ZXN0LTEuYW1hem9uYXdzLmNvbSIs'@;
put 'InMzLW9iamVjdC1sYW1iZGEuZXUtd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLmV1LXdlc3QtMS5hbWF6b25hd3MuY29tIiwiczMuZHVhbHN0YWNrLmV1LXdlc3QtMi5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQuZHVhbHN0YWNrLmV1LXdlc3QtMi5hbWF6b25hd3Mu'@;
put 'Y29tIiwiczMuZXUtd2VzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC5ldS13ZXN0LTIuYW1hem9uYXdzLmNvbSIsInMzLW9iamVjdC1sYW1iZGEuZXUtd2VzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLmV1LXdlc3QtMi5hbWF6b25hd3MuY29tIiwiczMuZHVhbHN0'@;
put 'YWNrLmV1LXdlc3QtMy5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQuZHVhbHN0YWNrLmV1LXdlc3QtMy5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS5kdWFsc3RhY2suZXUtd2VzdC0zLmFtYXpvbmF3cy5jb20iLCJzMy5ldS13ZXN0LTMuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vz'@;
put 'c3BvaW50LmV1LXdlc3QtMy5hbWF6b25hd3MuY29tIiwiczMtb2JqZWN0LWxhbWJkYS5ldS13ZXN0LTMuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUuZXUtd2VzdC0zLmFtYXpvbmF3cy5jb20iLCJzMy5kdWFsc3RhY2suaWwtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nw'@;
put 'b2ludC5kdWFsc3RhY2suaWwtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLmR1YWxzdGFjay5pbC1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsInMzLmlsLWNlbnRyYWwtMS5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQuaWwtY2VudHJhbC0xLmFtYXpvbmF3cy5j'@;
put 'b20iLCJzMy1vYmplY3QtbGFtYmRhLmlsLWNlbnRyYWwtMS5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS5pbC1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsInMzLmR1YWxzdGFjay5tZS1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LmR1YWxzdGFjay5tZS1jZW50'@;
put 'cmFsLTEuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUuZHVhbHN0YWNrLm1lLWNlbnRyYWwtMS5hbWF6b25hd3MuY29tIiwiczMubWUtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC5tZS1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsInMzLW9iamVjdC1sYW1iZGEu'@;
put 'bWUtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLm1lLWNlbnRyYWwtMS5hbWF6b25hd3MuY29tIiwiczMuZHVhbHN0YWNrLm1lLXNvdXRoLTEuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LmR1YWxzdGFjay5tZS1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJzMy5t'@;
put 'ZS1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC5tZS1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJzMy1vYmplY3QtbGFtYmRhLm1lLXNvdXRoLTEuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUubWUtc291dGgtMS5hbWF6b25hd3MuY29tIiwiczMuYW1hem9uYXdzLmNv'@;
put 'bSIsInMzLTEuYW1hem9uYXdzLmNvbSIsInMzLWFwLWVhc3QtMS5hbWF6b25hd3MuY29tIiwiczMtYXAtbm9ydGhlYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLWFwLW5vcnRoZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy1hcC1ub3J0aGVhc3QtMy5hbWF6b25hd3MuY29tIiwiczMtYXAtc291'@;
put 'dGgtMS5hbWF6b25hd3MuY29tIiwiczMtYXAtc291dGhlYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLWFwLXNvdXRoZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy1jYS1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsInMzLWV1LWNlbnRyYWwtMS5hbWF6b25hd3MuY29tIiwiczMtZXUtbm9ydGgt'@;
put 'MS5hbWF6b25hd3MuY29tIiwiczMtZXUtd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy1ldS13ZXN0LTIuYW1hem9uYXdzLmNvbSIsInMzLWV1LXdlc3QtMy5hbWF6b25hd3MuY29tIiwiczMtZXh0ZXJuYWwtMS5hbWF6b25hd3MuY29tIiwiczMtZmlwcy11cy1nb3YtZWFzdC0xLmFtYXpvbmF3'@;
put 'cy5jb20iLCJzMy1maXBzLXVzLWdvdi13ZXN0LTEuYW1hem9uYXdzLmNvbSIsIm1yYXAuYWNjZXNzcG9pbnQuczMtZ2xvYmFsLmFtYXpvbmF3cy5jb20iLCJzMy1tZS1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJzMy1zYS1lYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLXVzLWVhc3QtMi5hbWF6'@;
put 'b25hd3MuY29tIiwiczMtdXMtZ292LWVhc3QtMS5hbWF6b25hd3MuY29tIiwiczMtdXMtZ292LXdlc3QtMS5hbWF6b25hd3MuY29tIiwiczMtdXMtd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy11cy13ZXN0LTIuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUtYXAtbm9ydGhlYXN0LTEuYW1h'@;
put 'em9uYXdzLmNvbSIsInMzLXdlYnNpdGUtYXAtc291dGhlYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUtYXAtc291dGhlYXN0LTIuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUtZXUtd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLXNhLWVhc3QtMS5hbWF6b25hd3Mu'@;
put 'Y29tIiwiczMtd2Vic2l0ZS11cy1lYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUtdXMtZ292LXdlc3QtMS5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS11cy13ZXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUtdXMtd2VzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy5kdWFs'@;
put 'c3RhY2suc2EtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC5kdWFsc3RhY2suc2EtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLmR1YWxzdGFjay5zYS1lYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLnNhLWVhc3QtMS5hbWF6b25hd3MuY29tIiwiczMtYWNj'@;
put 'ZXNzcG9pbnQuc2EtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy1vYmplY3QtbGFtYmRhLnNhLWVhc3QtMS5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS5zYS1lYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLmR1YWxzdGFjay51cy1lYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3Bv'@;
put 'aW50LmR1YWxzdGFjay51cy1lYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LWZpcHMuZHVhbHN0YWNrLnVzLWVhc3QtMS5hbWF6b25hd3MuY29tIiwiczMtZmlwcy5kdWFsc3RhY2sudXMtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLmR1YWxzdGFjay51cy1l'@;
put 'YXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLnVzLWVhc3QtMS5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQudXMtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC1maXBzLnVzLWVhc3QtMS5hbWF6b25hd3MuY29tIiwiczMtZGVwcmVjYXRlZC51cy1lYXN0LTEuYW1h'@;
put 'em9uYXdzLmNvbSIsInMzLWZpcHMudXMtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy1vYmplY3QtbGFtYmRhLnVzLWVhc3QtMS5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS51cy1lYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLmR1YWxzdGFjay51cy1lYXN0LTIuYW1hem9uYXdzLmNvbSIs'@;
put 'InMzLWFjY2Vzc3BvaW50LmR1YWxzdGFjay51cy1lYXN0LTIuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LWZpcHMuZHVhbHN0YWNrLnVzLWVhc3QtMi5hbWF6b25hd3MuY29tIiwiczMtZmlwcy5kdWFsc3RhY2sudXMtZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLmR1'@;
put 'YWxzdGFjay51cy1lYXN0LTIuYW1hem9uYXdzLmNvbSIsInMzLnVzLWVhc3QtMi5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQudXMtZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC1maXBzLnVzLWVhc3QtMi5hbWF6b25hd3MuY29tIiwiczMtZGVwcmVjYXRlZC51'@;
put 'cy1lYXN0LTIuYW1hem9uYXdzLmNvbSIsInMzLWZpcHMudXMtZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy1vYmplY3QtbGFtYmRhLnVzLWVhc3QtMi5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS51cy1lYXN0LTIuYW1hem9uYXdzLmNvbSIsInMzLmR1YWxzdGFjay51cy1nb3YtZWFzdC0x'@;
put 'LmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC5kdWFsc3RhY2sudXMtZ292LWVhc3QtMS5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQtZmlwcy5kdWFsc3RhY2sudXMtZ292LWVhc3QtMS5hbWF6b25hd3MuY29tIiwiczMtZmlwcy5kdWFsc3RhY2sudXMtZ292LWVhc3QtMS5h'@;
put 'bWF6b25hd3MuY29tIiwiczMudXMtZ292LWVhc3QtMS5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQudXMtZ292LWVhc3QtMS5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQtZmlwcy51cy1nb3YtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy1maXBzLnVzLWdvdi1lYXN0LTEu'@;
put 'YW1hem9uYXdzLmNvbSIsInMzLW9iamVjdC1sYW1iZGEudXMtZ292LWVhc3QtMS5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS51cy1nb3YtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy5kdWFsc3RhY2sudXMtZ292LXdlc3QtMS5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQuZHVh'@;
put 'bHN0YWNrLnVzLWdvdi13ZXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LWZpcHMuZHVhbHN0YWNrLnVzLWdvdi13ZXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLWZpcHMuZHVhbHN0YWNrLnVzLWdvdi13ZXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLnVzLWdvdi13ZXN0LTEuYW1h'@;
put 'em9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LnVzLWdvdi13ZXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LWZpcHMudXMtZ292LXdlc3QtMS5hbWF6b25hd3MuY29tIiwiczMtZmlwcy51cy1nb3Ytd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy1vYmplY3QtbGFtYmRhLnVz'@;
put 'LWdvdi13ZXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUudXMtZ292LXdlc3QtMS5hbWF6b25hd3MuY29tIiwiczMuZHVhbHN0YWNrLnVzLXdlc3QtMS5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQuZHVhbHN0YWNrLnVzLXdlc3QtMS5hbWF6b25hd3MuY29tIiwiczMtYWNj'@;
put 'ZXNzcG9pbnQtZmlwcy5kdWFsc3RhY2sudXMtd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy1maXBzLmR1YWxzdGFjay51cy13ZXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUuZHVhbHN0YWNrLnVzLXdlc3QtMS5hbWF6b25hd3MuY29tIiwiczMudXMtd2VzdC0xLmFtYXpvbmF3cy5j'@;
put 'b20iLCJzMy1hY2Nlc3Nwb2ludC51cy13ZXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LWZpcHMudXMtd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy1maXBzLnVzLXdlc3QtMS5hbWF6b25hd3MuY29tIiwiczMtb2JqZWN0LWxhbWJkYS51cy13ZXN0LTEuYW1hem9uYXdzLmNv'@;
put 'bSIsInMzLXdlYnNpdGUudXMtd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy5kdWFsc3RhY2sudXMtd2VzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC5kdWFsc3RhY2sudXMtd2VzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC1maXBzLmR1YWxzdGFjay51cy13'@;
put 'ZXN0LTIuYW1hem9uYXdzLmNvbSIsInMzLWZpcHMuZHVhbHN0YWNrLnVzLXdlc3QtMi5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS5kdWFsc3RhY2sudXMtd2VzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy51cy13ZXN0LTIuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LnVzLXdlc3Qt'@;
put 'Mi5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQtZmlwcy51cy13ZXN0LTIuYW1hem9uYXdzLmNvbSIsInMzLWRlcHJlY2F0ZWQudXMtd2VzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy1maXBzLnVzLXdlc3QtMi5hbWF6b25hd3MuY29tIiwiczMtb2JqZWN0LWxhbWJkYS51cy13ZXN0LTIu'@;
put 'YW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUudXMtd2VzdC0yLmFtYXpvbmF3cy5jb20iLCJsYWJlbGluZy5hcC1ub3J0aGVhc3QtMS5zYWdlbWFrZXIuYXdzIiwibGFiZWxpbmcuYXAtbm9ydGhlYXN0LTIuc2FnZW1ha2VyLmF3cyIsImxhYmVsaW5nLmFwLXNvdXRoLTEuc2FnZW1ha2VyLmF3'@;
put 'cyIsImxhYmVsaW5nLmFwLXNvdXRoZWFzdC0xLnNhZ2VtYWtlci5hd3MiLCJsYWJlbGluZy5hcC1zb3V0aGVhc3QtMi5zYWdlbWFrZXIuYXdzIiwibGFiZWxpbmcuY2EtY2VudHJhbC0xLnNhZ2VtYWtlci5hd3MiLCJsYWJlbGluZy5ldS1jZW50cmFsLTEuc2FnZW1ha2VyLmF3cyIsImxhYmVs'@;
put 'aW5nLmV1LXdlc3QtMS5zYWdlbWFrZXIuYXdzIiwibGFiZWxpbmcuZXUtd2VzdC0yLnNhZ2VtYWtlci5hd3MiLCJsYWJlbGluZy51cy1lYXN0LTEuc2FnZW1ha2VyLmF3cyIsImxhYmVsaW5nLnVzLWVhc3QtMi5zYWdlbWFrZXIuYXdzIiwibGFiZWxpbmcudXMtd2VzdC0yLnNhZ2VtYWtlci5h'@;
put 'd3MiLCJub3RlYm9vay5hZi1zb3V0aC0xLnNhZ2VtYWtlci5hd3MiLCJub3RlYm9vay5hcC1lYXN0LTEuc2FnZW1ha2VyLmF3cyIsIm5vdGVib29rLmFwLW5vcnRoZWFzdC0xLnNhZ2VtYWtlci5hd3MiLCJub3RlYm9vay5hcC1ub3J0aGVhc3QtMi5zYWdlbWFrZXIuYXdzIiwibm90ZWJvb2su'@;
put 'YXAtbm9ydGhlYXN0LTMuc2FnZW1ha2VyLmF3cyIsIm5vdGVib29rLmFwLXNvdXRoLTEuc2FnZW1ha2VyLmF3cyIsIm5vdGVib29rLmFwLXNvdXRoLTIuc2FnZW1ha2VyLmF3cyIsIm5vdGVib29rLmFwLXNvdXRoZWFzdC0xLnNhZ2VtYWtlci5hd3MiLCJub3RlYm9vay5hcC1zb3V0aGVhc3Qt'@;
put 'Mi5zYWdlbWFrZXIuYXdzIiwibm90ZWJvb2suYXAtc291dGhlYXN0LTMuc2FnZW1ha2VyLmF3cyIsIm5vdGVib29rLmFwLXNvdXRoZWFzdC00LnNhZ2VtYWtlci5hd3MiLCJub3RlYm9vay5jYS1jZW50cmFsLTEuc2FnZW1ha2VyLmF3cyIsIm5vdGVib29rLWZpcHMuY2EtY2VudHJhbC0xLnNh'@;
put 'Z2VtYWtlci5hd3MiLCJub3RlYm9vay5jYS13ZXN0LTEuc2FnZW1ha2VyLmF3cyIsIm5vdGVib29rLWZpcHMuY2Etd2VzdC0xLnNhZ2VtYWtlci5hd3MiLCJub3RlYm9vay5ldS1jZW50cmFsLTEuc2FnZW1ha2VyLmF3cyIsIm5vdGVib29rLmV1LWNlbnRyYWwtMi5zYWdlbWFrZXIuYXdzIiwi'@;
put 'bm90ZWJvb2suZXUtbm9ydGgtMS5zYWdlbWFrZXIuYXdzIiwibm90ZWJvb2suZXUtc291dGgtMS5zYWdlbWFrZXIuYXdzIiwibm90ZWJvb2suZXUtc291dGgtMi5zYWdlbWFrZXIuYXdzIiwibm90ZWJvb2suZXUtd2VzdC0xLnNhZ2VtYWtlci5hd3MiLCJub3RlYm9vay5ldS13ZXN0LTIuc2Fn'@;
put 'ZW1ha2VyLmF3cyIsIm5vdGVib29rLmV1LXdlc3QtMy5zYWdlbWFrZXIuYXdzIiwibm90ZWJvb2suaWwtY2VudHJhbC0xLnNhZ2VtYWtlci5hd3MiLCJub3RlYm9vay5tZS1jZW50cmFsLTEuc2FnZW1ha2VyLmF3cyIsIm5vdGVib29rLm1lLXNvdXRoLTEuc2FnZW1ha2VyLmF3cyIsIm5vdGVi'@;
put 'b29rLnNhLWVhc3QtMS5zYWdlbWFrZXIuYXdzIiwibm90ZWJvb2sudXMtZWFzdC0xLnNhZ2VtYWtlci5hd3MiLCJub3RlYm9vay1maXBzLnVzLWVhc3QtMS5zYWdlbWFrZXIuYXdzIiwibm90ZWJvb2sudXMtZWFzdC0yLnNhZ2VtYWtlci5hd3MiLCJub3RlYm9vay1maXBzLnVzLWVhc3QtMi5z'@;
put 'YWdlbWFrZXIuYXdzIiwibm90ZWJvb2sudXMtZ292LWVhc3QtMS5zYWdlbWFrZXIuYXdzIiwibm90ZWJvb2stZmlwcy51cy1nb3YtZWFzdC0xLnNhZ2VtYWtlci5hd3MiLCJub3RlYm9vay51cy1nb3Ytd2VzdC0xLnNhZ2VtYWtlci5hd3MiLCJub3RlYm9vay1maXBzLnVzLWdvdi13ZXN0LTEu'@;
put 'c2FnZW1ha2VyLmF3cyIsIm5vdGVib29rLnVzLXdlc3QtMS5zYWdlbWFrZXIuYXdzIiwibm90ZWJvb2stZmlwcy51cy13ZXN0LTEuc2FnZW1ha2VyLmF3cyIsIm5vdGVib29rLnVzLXdlc3QtMi5zYWdlbWFrZXIuYXdzIiwibm90ZWJvb2stZmlwcy51cy13ZXN0LTIuc2FnZW1ha2VyLmF3cyIs'@;
put 'Im5vdGVib29rLmNuLW5vcnRoLTEuc2FnZW1ha2VyLmNvbS5jbiIsIm5vdGVib29rLmNuLW5vcnRod2VzdC0xLnNhZ2VtYWtlci5jb20uY24iLCJzdHVkaW8uYWYtc291dGgtMS5zYWdlbWFrZXIuYXdzIiwic3R1ZGlvLmFwLWVhc3QtMS5zYWdlbWFrZXIuYXdzIiwic3R1ZGlvLmFwLW5vcnRo'@;
put 'ZWFzdC0xLnNhZ2VtYWtlci5hd3MiLCJzdHVkaW8uYXAtbm9ydGhlYXN0LTIuc2FnZW1ha2VyLmF3cyIsInN0dWRpby5hcC1ub3J0aGVhc3QtMy5zYWdlbWFrZXIuYXdzIiwic3R1ZGlvLmFwLXNvdXRoLTEuc2FnZW1ha2VyLmF3cyIsInN0dWRpby5hcC1zb3V0aGVhc3QtMS5zYWdlbWFrZXIu'@;
put 'YXdzIiwic3R1ZGlvLmFwLXNvdXRoZWFzdC0yLnNhZ2VtYWtlci5hd3MiLCJzdHVkaW8uYXAtc291dGhlYXN0LTMuc2FnZW1ha2VyLmF3cyIsInN0dWRpby5jYS1jZW50cmFsLTEuc2FnZW1ha2VyLmF3cyIsInN0dWRpby5ldS1jZW50cmFsLTEuc2FnZW1ha2VyLmF3cyIsInN0dWRpby5ldS1u'@;
put 'b3J0aC0xLnNhZ2VtYWtlci5hd3MiLCJzdHVkaW8uZXUtc291dGgtMS5zYWdlbWFrZXIuYXdzIiwic3R1ZGlvLmV1LXNvdXRoLTIuc2FnZW1ha2VyLmF3cyIsInN0dWRpby5ldS13ZXN0LTEuc2FnZW1ha2VyLmF3cyIsInN0dWRpby5ldS13ZXN0LTIuc2FnZW1ha2VyLmF3cyIsInN0dWRpby5l'@;
put 'dS13ZXN0LTMuc2FnZW1ha2VyLmF3cyIsInN0dWRpby5pbC1jZW50cmFsLTEuc2FnZW1ha2VyLmF3cyIsInN0dWRpby5tZS1jZW50cmFsLTEuc2FnZW1ha2VyLmF3cyIsInN0dWRpby5tZS1zb3V0aC0xLnNhZ2VtYWtlci5hd3MiLCJzdHVkaW8uc2EtZWFzdC0xLnNhZ2VtYWtlci5hd3MiLCJz'@;
put 'dHVkaW8udXMtZWFzdC0xLnNhZ2VtYWtlci5hd3MiLCJzdHVkaW8udXMtZWFzdC0yLnNhZ2VtYWtlci5hd3MiLCJzdHVkaW8udXMtZ292LWVhc3QtMS5zYWdlbWFrZXIuYXdzIiwic3R1ZGlvLWZpcHMudXMtZ292LWVhc3QtMS5zYWdlbWFrZXIuYXdzIiwic3R1ZGlvLnVzLWdvdi13ZXN0LTEu'@;
put 'c2FnZW1ha2VyLmF3cyIsInN0dWRpby1maXBzLnVzLWdvdi13ZXN0LTEuc2FnZW1ha2VyLmF3cyIsInN0dWRpby51cy13ZXN0LTEuc2FnZW1ha2VyLmF3cyIsInN0dWRpby51cy13ZXN0LTIuc2FnZW1ha2VyLmF3cyIsInN0dWRpby5jbi1ub3J0aC0xLnNhZ2VtYWtlci5jb20uY24iLCJzdHVk'@;
put 'aW8uY24tbm9ydGh3ZXN0LTEuc2FnZW1ha2VyLmNvbS5jbiIsIiouZXhwZXJpbWVudHMuc2FnZW1ha2VyLmF3cyIsImFuYWx5dGljcy1nYXRld2F5LmFwLW5vcnRoZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJhbmFseXRpY3MtZ2F0ZXdheS5hcC1ub3J0aGVhc3QtMi5hbWF6b25hd3MuY29tIiwi'@;
put 'YW5hbHl0aWNzLWdhdGV3YXkuYXAtc291dGgtMS5hbWF6b25hd3MuY29tIiwiYW5hbHl0aWNzLWdhdGV3YXkuYXAtc291dGhlYXN0LTEuYW1hem9uYXdzLmNvbSIsImFuYWx5dGljcy1nYXRld2F5LmFwLXNvdXRoZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJhbmFseXRpY3MtZ2F0ZXdheS5ldS1j'@;
put 'ZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsImFuYWx5dGljcy1nYXRld2F5LmV1LXdlc3QtMS5hbWF6b25hd3MuY29tIiwiYW5hbHl0aWNzLWdhdGV3YXkudXMtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJhbmFseXRpY3MtZ2F0ZXdheS51cy1lYXN0LTIuYW1hem9uYXdzLmNvbSIsImFuYWx5dGlj'@;
put 'cy1nYXRld2F5LnVzLXdlc3QtMi5hbWF6b25hd3MuY29tIiwiYW1wbGlmeWFwcC5jb20iLCIqLmF3c2FwcHJ1bm5lci5jb20iLCJ3ZWJ2aWV3LWFzc2V0cy5hd3MtY2xvdWQ5LmFmLXNvdXRoLTEuYW1hem9uYXdzLmNvbSIsInZmcy5jbG91ZDkuYWYtc291dGgtMS5hbWF6b25hd3MuY29tIiwi'@;
put 'd2Vidmlldy1hc3NldHMuY2xvdWQ5LmFmLXNvdXRoLTEuYW1hem9uYXdzLmNvbSIsIndlYnZpZXctYXNzZXRzLmF3cy1jbG91ZDkuYXAtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJ2ZnMuY2xvdWQ5LmFwLWVhc3QtMS5hbWF6b25hd3MuY29tIiwid2Vidmlldy1hc3NldHMuY2xvdWQ5LmFwLWVh'@;
put 'c3QtMS5hbWF6b25hd3MuY29tIiwid2Vidmlldy1hc3NldHMuYXdzLWNsb3VkOS5hcC1ub3J0aGVhc3QtMS5hbWF6b25hd3MuY29tIiwidmZzLmNsb3VkOS5hcC1ub3J0aGVhc3QtMS5hbWF6b25hd3MuY29tIiwid2Vidmlldy1hc3NldHMuY2xvdWQ5LmFwLW5vcnRoZWFzdC0xLmFtYXpvbmF3'@;
put 'cy5jb20iLCJ3ZWJ2aWV3LWFzc2V0cy5hd3MtY2xvdWQ5LmFwLW5vcnRoZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJ2ZnMuY2xvdWQ5LmFwLW5vcnRoZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJ3ZWJ2aWV3LWFzc2V0cy5jbG91ZDkuYXAtbm9ydGhlYXN0LTIuYW1hem9uYXdzLmNvbSIsIndlYnZp'@;
put 'ZXctYXNzZXRzLmF3cy1jbG91ZDkuYXAtbm9ydGhlYXN0LTMuYW1hem9uYXdzLmNvbSIsInZmcy5jbG91ZDkuYXAtbm9ydGhlYXN0LTMuYW1hem9uYXdzLmNvbSIsIndlYnZpZXctYXNzZXRzLmNsb3VkOS5hcC1ub3J0aGVhc3QtMy5hbWF6b25hd3MuY29tIiwid2Vidmlldy1hc3NldHMuYXdz'@;
put 'LWNsb3VkOS5hcC1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJ2ZnMuY2xvdWQ5LmFwLXNvdXRoLTEuYW1hem9uYXdzLmNvbSIsIndlYnZpZXctYXNzZXRzLmNsb3VkOS5hcC1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJ3ZWJ2aWV3LWFzc2V0cy5hd3MtY2xvdWQ5LmFwLXNvdXRoZWFzdC0xLmFt'@;
put 'YXpvbmF3cy5jb20iLCJ2ZnMuY2xvdWQ5LmFwLXNvdXRoZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJ3ZWJ2aWV3LWFzc2V0cy5jbG91ZDkuYXAtc291dGhlYXN0LTEuYW1hem9uYXdzLmNvbSIsIndlYnZpZXctYXNzZXRzLmF3cy1jbG91ZDkuYXAtc291dGhlYXN0LTIuYW1hem9uYXdzLmNvbSIs'@;
put 'InZmcy5jbG91ZDkuYXAtc291dGhlYXN0LTIuYW1hem9uYXdzLmNvbSIsIndlYnZpZXctYXNzZXRzLmNsb3VkOS5hcC1zb3V0aGVhc3QtMi5hbWF6b25hd3MuY29tIiwid2Vidmlldy1hc3NldHMuYXdzLWNsb3VkOS5jYS1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsInZmcy5jbG91ZDkuY2Et'@;
put 'Y2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJ3ZWJ2aWV3LWFzc2V0cy5jbG91ZDkuY2EtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJ3ZWJ2aWV3LWFzc2V0cy5hd3MtY2xvdWQ5LmV1LWNlbnRyYWwtMS5hbWF6b25hd3MuY29tIiwidmZzLmNsb3VkOS5ldS1jZW50cmFsLTEuYW1hem9uYXdz'@;
put 'LmNvbSIsIndlYnZpZXctYXNzZXRzLmNsb3VkOS5ldS1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsIndlYnZpZXctYXNzZXRzLmF3cy1jbG91ZDkuZXUtbm9ydGgtMS5hbWF6b25hd3MuY29tIiwidmZzLmNsb3VkOS5ldS1ub3J0aC0xLmFtYXpvbmF3cy5jb20iLCJ3ZWJ2aWV3LWFzc2V0cy5j'@;
put 'bG91ZDkuZXUtbm9ydGgtMS5hbWF6b25hd3MuY29tIiwid2Vidmlldy1hc3NldHMuYXdzLWNsb3VkOS5ldS1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJ2ZnMuY2xvdWQ5LmV1LXNvdXRoLTEuYW1hem9uYXdzLmNvbSIsIndlYnZpZXctYXNzZXRzLmNsb3VkOS5ldS1zb3V0aC0xLmFtYXpvbmF3'@;
put 'cy5jb20iLCJ3ZWJ2aWV3LWFzc2V0cy5hd3MtY2xvdWQ5LmV1LXdlc3QtMS5hbWF6b25hd3MuY29tIiwidmZzLmNsb3VkOS5ldS13ZXN0LTEuYW1hem9uYXdzLmNvbSIsIndlYnZpZXctYXNzZXRzLmNsb3VkOS5ldS13ZXN0LTEuYW1hem9uYXdzLmNvbSIsIndlYnZpZXctYXNzZXRzLmF3cy1j'@;
put 'bG91ZDkuZXUtd2VzdC0yLmFtYXpvbmF3cy5jb20iLCJ2ZnMuY2xvdWQ5LmV1LXdlc3QtMi5hbWF6b25hd3MuY29tIiwid2Vidmlldy1hc3NldHMuY2xvdWQ5LmV1LXdlc3QtMi5hbWF6b25hd3MuY29tIiwid2Vidmlldy1hc3NldHMuYXdzLWNsb3VkOS5ldS13ZXN0LTMuYW1hem9uYXdzLmNv'@;
put 'bSIsInZmcy5jbG91ZDkuZXUtd2VzdC0zLmFtYXpvbmF3cy5jb20iLCJ3ZWJ2aWV3LWFzc2V0cy5jbG91ZDkuZXUtd2VzdC0zLmFtYXpvbmF3cy5jb20iLCJ3ZWJ2aWV3LWFzc2V0cy5hd3MtY2xvdWQ5LmlsLWNlbnRyYWwtMS5hbWF6b25hd3MuY29tIiwidmZzLmNsb3VkOS5pbC1jZW50cmFs'@;
put 'LTEuYW1hem9uYXdzLmNvbSIsIndlYnZpZXctYXNzZXRzLmF3cy1jbG91ZDkubWUtc291dGgtMS5hbWF6b25hd3MuY29tIiwidmZzLmNsb3VkOS5tZS1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJ3ZWJ2aWV3LWFzc2V0cy5jbG91ZDkubWUtc291dGgtMS5hbWF6b25hd3MuY29tIiwid2Vidmll'@;
put 'dy1hc3NldHMuYXdzLWNsb3VkOS5zYS1lYXN0LTEuYW1hem9uYXdzLmNvbSIsInZmcy5jbG91ZDkuc2EtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJ3ZWJ2aWV3LWFzc2V0cy5jbG91ZDkuc2EtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJ3ZWJ2aWV3LWFzc2V0cy5hd3MtY2xvdWQ5LnVzLWVhc3Qt'@;
put 'MS5hbWF6b25hd3MuY29tIiwidmZzLmNsb3VkOS51cy1lYXN0LTEuYW1hem9uYXdzLmNvbSIsIndlYnZpZXctYXNzZXRzLmNsb3VkOS51cy1lYXN0LTEuYW1hem9uYXdzLmNvbSIsIndlYnZpZXctYXNzZXRzLmF3cy1jbG91ZDkudXMtZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJ2ZnMuY2xvdWQ5'@;
put 'LnVzLWVhc3QtMi5hbWF6b25hd3MuY29tIiwid2Vidmlldy1hc3NldHMuY2xvdWQ5LnVzLWVhc3QtMi5hbWF6b25hd3MuY29tIiwid2Vidmlldy1hc3NldHMuYXdzLWNsb3VkOS51cy13ZXN0LTEuYW1hem9uYXdzLmNvbSIsInZmcy5jbG91ZDkudXMtd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJ3'@;
put 'ZWJ2aWV3LWFzc2V0cy5jbG91ZDkudXMtd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJ3ZWJ2aWV3LWFzc2V0cy5hd3MtY2xvdWQ5LnVzLXdlc3QtMi5hbWF6b25hd3MuY29tIiwidmZzLmNsb3VkOS51cy13ZXN0LTIuYW1hem9uYXdzLmNvbSIsIndlYnZpZXctYXNzZXRzLmNsb3VkOS51cy13ZXN0'@;
put 'LTIuYW1hem9uYXdzLmNvbSIsImF3c2FwcHMuY29tIiwiY24tbm9ydGgtMS5lYi5hbWF6b25hd3MuY29tLmNuIiwiY24tbm9ydGh3ZXN0LTEuZWIuYW1hem9uYXdzLmNvbS5jbiIsImVsYXN0aWNiZWFuc3RhbGsuY29tIiwiYWYtc291dGgtMS5lbGFzdGljYmVhbnN0YWxrLmNvbSIsImFwLWVh'@;
put 'c3QtMS5lbGFzdGljYmVhbnN0YWxrLmNvbSIsImFwLW5vcnRoZWFzdC0xLmVsYXN0aWNiZWFuc3RhbGsuY29tIiwiYXAtbm9ydGhlYXN0LTIuZWxhc3RpY2JlYW5zdGFsay5jb20iLCJhcC1ub3J0aGVhc3QtMy5lbGFzdGljYmVhbnN0YWxrLmNvbSIsImFwLXNvdXRoLTEuZWxhc3RpY2JlYW5z'@;
put 'dGFsay5jb20iLCJhcC1zb3V0aGVhc3QtMS5lbGFzdGljYmVhbnN0YWxrLmNvbSIsImFwLXNvdXRoZWFzdC0yLmVsYXN0aWNiZWFuc3RhbGsuY29tIiwiYXAtc291dGhlYXN0LTMuZWxhc3RpY2JlYW5zdGFsay5jb20iLCJjYS1jZW50cmFsLTEuZWxhc3RpY2JlYW5zdGFsay5jb20iLCJldS1j'@;
put 'ZW50cmFsLTEuZWxhc3RpY2JlYW5zdGFsay5jb20iLCJldS1ub3J0aC0xLmVsYXN0aWNiZWFuc3RhbGsuY29tIiwiZXUtc291dGgtMS5lbGFzdGljYmVhbnN0YWxrLmNvbSIsImV1LXdlc3QtMS5lbGFzdGljYmVhbnN0YWxrLmNvbSIsImV1LXdlc3QtMi5lbGFzdGljYmVhbnN0YWxrLmNvbSIs'@;
put 'ImV1LXdlc3QtMy5lbGFzdGljYmVhbnN0YWxrLmNvbSIsImlsLWNlbnRyYWwtMS5lbGFzdGljYmVhbnN0YWxrLmNvbSIsIm1lLXNvdXRoLTEuZWxhc3RpY2JlYW5zdGFsay5jb20iLCJzYS1lYXN0LTEuZWxhc3RpY2JlYW5zdGFsay5jb20iLCJ1cy1lYXN0LTEuZWxhc3RpY2JlYW5zdGFsay5j'@;
put 'b20iLCJ1cy1lYXN0LTIuZWxhc3RpY2JlYW5zdGFsay5jb20iLCJ1cy1nb3YtZWFzdC0xLmVsYXN0aWNiZWFuc3RhbGsuY29tIiwidXMtZ292LXdlc3QtMS5lbGFzdGljYmVhbnN0YWxrLmNvbSIsInVzLXdlc3QtMS5lbGFzdGljYmVhbnN0YWxrLmNvbSIsInVzLXdlc3QtMi5lbGFzdGljYmVh'@;
put 'bnN0YWxrLmNvbSIsIiouZWxiLmFtYXpvbmF3cy5jb20uY24iLCIqLmVsYi5hbWF6b25hd3MuY29tIiwiYXdzZ2xvYmFsYWNjZWxlcmF0b3IuY29tIiwiKi5wcml2YXRlLnJlcG9zdC5hd3MiLCJlZXJvLm9ubGluZSIsImVlcm8tc3RhZ2Uub25saW5lIiwiYXBpZ2VlLmlvIiwicGFuZWwuZGV2'@;
put 'Iiwic2lpaXRlcy5jb20iLCJhcHBzcGFjZWhvc3RlZC5jb20iLCJhcHBzcGFjZXVzZXJjb250ZW50LmNvbSIsImFwcHVkby5uZXQiLCJvbi1hcHRpYmxlLmNvbSIsImY1LnNpIiwiYXJ2YW5lZGdlLmlyIiwidXNlci5hc2VpbmV0Lm5lLmpwIiwiZ3YudmMiLCJkLmd2LnZjIiwidXNlci5wYXJ0'@;
put 'eS5ldXMiLCJwaW1pZW50YS5vcmciLCJwb2l2cm9uLm9yZyIsInBvdGFnZXIub3JnIiwic3dlZXRwZXBwZXIub3JnIiwibXlhc3VzdG9yLmNvbSIsImNkbi5wcm9kLmF0bGFzc2lhbi1kZXYubmV0IiwidHJhbnNsYXRlZC5wYWdlIiwibXlmcml0ei5saW5rIiwibXlmcml0ei5uZXQiLCJvbmF2'@;
put 'c3RhY2submV0IiwiKi5hd2Rldi5jYSIsIiouYWR2aXNvci53cyIsImVjb21tZXJjZS1zaG9wLnBsIiwiYi1kYXRhLmlvIiwiYmFsZW5hLWRldmljZXMuY29tIiwiYmFzZS5lYyIsIm9mZmljaWFsLmVjIiwiYnV5c2hvcC5qcCIsImZhc2hpb25zdG9yZS5qcCIsImhhbmRjcmFmdGVkLmpwIiwi'@;
put 'a2F3YWlpc2hvcC5qcCIsInN1cGVyc2FsZS5qcCIsInRoZXNob3AuanAiLCJzaG9wc2VsZWN0Lm5ldCIsImJhc2Uuc2hvcCIsImJlYWdsZWJvYXJkLmlvIiwiKi5iZWdldC5hcHAiLCJwYWdlcy5nYXkiLCJibnIubGEiLCJiaXRidWNrZXQuaW8iLCJibGFja2JhdWRjZG4ubmV0Iiwib2YuamUi'@;
put 'LCJibHVlYml0ZS5pbyIsImJvb21sYS5uZXQiLCJib3V0aXIuY29tIiwiYm94ZnVzZS5pbyIsInNxdWFyZTcuY2giLCJicGxhY2VkLmNvbSIsImJwbGFjZWQuZGUiLCJzcXVhcmU3LmRlIiwiYnBsYWNlZC5uZXQiLCJzcXVhcmU3Lm5ldCIsIioucy5icmF2ZS5pbyIsInNob3AuYnJlbmRseS5o'@;
put 'ciIsInNob3AuYnJlbmRseS5ycyIsImJyb3dzZXJzYWZldHltYXJrLmlvIiwicmFkaW8uYW0iLCJyYWRpby5mbSIsInVrMC5iaWd2LmlvIiwiZGguYnl0ZW1hcmsuY28udWsiLCJ2bS5ieXRlbWFyay5jby51ayIsImNhZmpzLmNvbSIsImNhbnZhLWFwcHMuY24iLCIqLm15LmNhbnZhc2l0ZS5j'@;
put 'biIsImNhbnZhLWFwcHMuY29tIiwiKi5teS5jYW52YS5zaXRlIiwiZHJyLmFjIiwidXd1LmFpIiwiY2FycmQuY28iLCJjcmQuY28iLCJqdS5tcCIsImFwaS5nb3YudWsiLCJjZG43Ny1zdG9yYWdlLmNvbSIsInJzYy5jb250ZW50cHJveHk5LmN6Iiwici5jZG43Ny5uZXQiLCJjZG43Ny1zc2wu'@;
put 'bmV0IiwiYy5jZG43Ny5vcmciLCJyc2MuY2RuNzcub3JnIiwic3NsLm9yaWdpbi5jZG43Ny1zZWN1cmUub3JnIiwiemEuYnoiLCJici5jb20iLCJjbi5jb20iLCJkZS5jb20iLCJldS5jb20iLCJqcG4uY29tIiwibWV4LmNvbSIsInJ1LmNvbSIsInNhLmNvbSIsInVrLmNvbSIsInVzLmNvbSIs'@;
put 'InphLmNvbSIsImNvbS5kZSIsImdiLm5ldCIsImh1Lm5ldCIsImpwLm5ldCIsInNlLm5ldCIsInVrLm5ldCIsImFlLm9yZyIsImNvbS5zZSIsImN4LnVhIiwiZGlzY291cnNlLmdyb3VwIiwiZGlzY291cnNlLnRlYW0iLCJjbGVyay5hcHAiLCJjbGVya3N0YWdlLmFwcCIsIioubGNsLmRldiIs'@;
put 'IioubGNsc3RhZ2UuZGV2IiwiKi5zdGcuZGV2IiwiKi5zdGdzdGFnZS5kZXYiLCJjbGV2ZXJhcHBzLmNjIiwiKi5zZXJ2aWNlcy5jbGV2ZXItY2xvdWQuY29tIiwiY2xldmVyYXBwcy5pbyIsImNsZXZlcmFwcHMudGVjaCIsImNsaWNrcmlzaW5nLm5ldCIsImNsb3VkbnMuYXNpYSIsImNsb3Vk'@;
put 'bnMuYmUiLCJjbG91ZC1pcC5iaXoiLCJjbG91ZG5zLmJpeiIsImNsb3VkbnMuY2MiLCJjbG91ZG5zLmNoIiwiY2xvdWRucy5jbCIsImNsb3VkbnMuY2x1YiIsImRuc2Fici5jb20iLCJpcC1kZG5zLmNvbSIsImNsb3VkbnMuY3giLCJjbG91ZG5zLmV1IiwiY2xvdWRucy5pbiIsImNsb3VkbnMu'@;
put 'aW5mbyIsImRkbnMtaXAubmV0IiwiZG5zLWNsb3VkLm5ldCIsImRucy1keW5hbWljLm5ldCIsImNsb3VkbnMubnoiLCJjbG91ZG5zLm9yZyIsImlwLWR5bmFtaWMub3JnIiwiY2xvdWRucy5waCIsImNsb3VkbnMucHJvIiwiY2xvdWRucy5wdyIsImNsb3VkbnMudXMiLCJjNjYubWUiLCJjbG91'@;
put 'ZDY2LndzIiwiY2xvdWQ2Ni56b25lIiwiamRldmNsb3VkLmNvbSIsIndwZGV2Y2xvdWQuY29tIiwiY2xvdWRhY2Nlc3MuaG9zdCIsImZyZWVzaXRlLmhvc3QiLCJjbG91ZGFjY2Vzcy5uZXQiLCIqLmNsb3VkZXJhLnNpdGUiLCJjZi1pcGZzLmNvbSIsImNsb3VkZmxhcmUtaXBmcy5jb20iLCJ0'@;
put 'cnljbG91ZGZsYXJlLmNvbSIsInBhZ2VzLmRldiIsInIyLmRldiIsIndvcmtlcnMuZGV2IiwiY2xvdWRmbGFyZS5uZXQiLCJjZG4uY2xvdWRmbGFyZS5uZXQiLCJjZG4uY2xvdWRmbGFyZWFueWNhc3QubmV0IiwiY2RuLmNsb3VkZmxhcmVjbi5uZXQiLCJjZG4uY2xvdWRmbGFyZWdsb2JhbC5u'@;
put 'ZXQiLCJjdXN0LmNsb3Vkc2NhbGUuY2giLCJvYmplY3RzLmxwZy5jbG91ZHNjYWxlLmNoIiwib2JqZWN0cy5ybWEuY2xvdWRzY2FsZS5jaCIsInduZXh0LmFwcCIsImNucHkuZ2RuIiwiKi5vdGFwLmNvIiwiY28uY2EiLCJjby5jb20iLCJjb2RlYmVyZy5wYWdlIiwiY3NiLmFwcCIsInByZXZp'@;
put 'ZXcuY3NiLmFwcCIsImNvLm5sIiwiY28ubm8iLCJ3ZWJob3N0aW5nLmJlIiwiaG9zdGluZy1jbHVzdGVyLm5sIiwiY3RmY2xvdWQubmV0IiwiY29udmV4LnNpdGUiLCJhYy5ydSIsImVkdS5ydSIsImdvdi5ydSIsImludC5ydSIsIm1pbC5ydSIsInRlc3QucnUiLCJkeW4uY29zaWRucy5kZSIs'@;
put 'ImRuc3VwZGF0ZXIuZGUiLCJkeW5hbWlzY2hlcy1kbnMuZGUiLCJpbnRlcm5ldC1kbnMuZGUiLCJsLW8tZy1pLW4uZGUiLCJkeW5hbWljLWRucy5pbmZvIiwiZmVzdGUtaXAubmV0Iiwia254LXNlcnZlci5uZXQiLCJzdGF0aWMtYWNjZXNzLm5ldCIsImNyYWZ0Lm1lIiwicmVhbG0uY3oiLCJv'@;
put 'bi5jcmlzcC5lbWFpbCIsIiouY3J5cHRvbm9taWMubmV0IiwiY3Vydi5kZXYiLCJjZm9sa3MucGwiLCJjeW9uLmxpbmsiLCJjeW9uLnNpdGUiLCJwbGF0Zm9ybTAuYXBwIiwiZm53ay5zaXRlIiwiZm9saW9uZXR3b3JrLnNpdGUiLCJiaXouZGsiLCJjby5kayIsImZpcm0uZGsiLCJyZWcuZGsi'@;
put 'LCJzdG9yZS5kayIsImR5bmRucy5kYXBwbm9kZS5pbyIsImJ1aWx0d2l0aGRhcmsuY29tIiwiZGFya2xhbmcuaW8iLCJkZW1vLmRhdGFkZXRlY3QuY29tIiwiaW5zdGFuY2UuZGF0YWRldGVjdC5jb20iLCJlZGdlc3RhY2subWUiLCJkYXR0b2xvY2FsLmNvbSIsImRhdHRvcmVsYXkuY29tIiwi'@;
put 'ZGF0dG93ZWIuY29tIiwibXlkYXR0by5jb20iLCJkYXR0b2xvY2FsLm5ldCIsIm15ZGF0dG8ubmV0IiwiZGRuc3MuZGUiLCJkeW4uZGRuc3MuZGUiLCJkeW5kbnMuZGRuc3MuZGUiLCJkeW4taXAyNC5kZSIsImR5bmRuczEuZGUiLCJob21lLXdlYnNlcnZlci5kZSIsImR5bi5ob21lLXdlYnNl'@;
put 'cnZlci5kZSIsIm15aG9tZS1zZXJ2ZXIuZGUiLCJkZG5zcy5vcmciLCJkZWJpYW4ubmV0IiwiZGVmaW5pbWEuaW8iLCJkZWZpbmltYS5uZXQiLCJkZW5vLmRldiIsImRlbm8tc3RhZ2luZy5kZXYiLCJkZWR5bi5pbyIsImRldGEuYXBwIiwiZGV0YS5kZXYiLCJkZmlybWEucGwiLCJka29udG8u'@;
put 'cGwiLCJ5b3UyLnBsIiwib25kaWdpdGFsb2NlYW4uYXBwIiwiKi5kaWdpdGFsb2NlYW5zcGFjZXMuY29tIiwidXMua2ciLCJyc3MubXkuaWQiLCJkaWhlci5zb2x1dGlvbnMiLCJkaXNjb3Jkc2F5cy5jb20iLCJkaXNjb3Jkc2V6LmNvbSIsImpvemkuYml6IiwiZG5zaG9tZS5kZSIsIm9ubGlu'@;
put 'ZS50aCIsInNob3AudGgiLCJkcmF5ZGRucy5jb20iLCJzaG9wYXJlbmEucGwiLCJkcmVhbWhvc3RlcnMuY29tIiwiZHVydW1pcy5jb20iLCJteWRyb2JvLmNvbSIsImRydWQuaW8iLCJkcnVkLnVzIiwiZHVja2Rucy5vcmciLCJkeS5maSIsInR1bmsub3JnIiwiZHluZG5zLmJpeiIsImZvci1i'@;
put 'ZXR0ZXIuYml6IiwiZm9yLW1vcmUuYml6IiwiZm9yLXNvbWUuYml6IiwiZm9yLXRoZS5iaXoiLCJzZWxmaXAuYml6Iiwid2ViaG9wLmJpeiIsImZ0cGFjY2Vzcy5jYyIsImdhbWUtc2VydmVyLmNjIiwibXlwaG90b3MuY2MiLCJzY3JhcHBpbmcuY2MiLCJibG9nZG5zLmNvbSIsImNlY2hpcmUu'@;
put 'Y29tIiwiZG5zYWxpYXMuY29tIiwiZG5zZG9qby5jb20iLCJkb2VzbnRleGlzdC5jb20iLCJkb250ZXhpc3QuY29tIiwiZG9vbWRucy5jb20iLCJkeW4tby1zYXVyLmNvbSIsImR5bmFsaWFzLmNvbSIsImR5bmRucy1hdC1ob21lLmNvbSIsImR5bmRucy1hdC13b3JrLmNvbSIsImR5bmRucy1i'@;
put 'bG9nLmNvbSIsImR5bmRucy1mcmVlLmNvbSIsImR5bmRucy1ob21lLmNvbSIsImR5bmRucy1pcC5jb20iLCJkeW5kbnMtbWFpbC5jb20iLCJkeW5kbnMtb2ZmaWNlLmNvbSIsImR5bmRucy1waWNzLmNvbSIsImR5bmRucy1yZW1vdGUuY29tIiwiZHluZG5zLXNlcnZlci5jb20iLCJkeW5kbnMt'@;
put 'd2ViLmNvbSIsImR5bmRucy13aWtpLmNvbSIsImR5bmRucy13b3JrLmNvbSIsImVzdC1hLWxhLW1haXNvbi5jb20iLCJlc3QtYS1sYS1tYXNpb24uY29tIiwiZXN0LWxlLXBhdHJvbi5jb20iLCJlc3QtbW9uLWJsb2d1ZXVyLmNvbSIsImZyb20tYWsuY29tIiwiZnJvbS1hbC5jb20iLCJmcm9t'@;
put 'LWFyLmNvbSIsImZyb20tY2EuY29tIiwiZnJvbS1jdC5jb20iLCJmcm9tLWRjLmNvbSIsImZyb20tZGUuY29tIiwiZnJvbS1mbC5jb20iLCJmcm9tLWdhLmNvbSIsImZyb20taGkuY29tIiwiZnJvbS1pYS5jb20iLCJmcm9tLWlkLmNvbSIsImZyb20taWwuY29tIiwiZnJvbS1pbi5jb20iLCJm'@;
put 'cm9tLWtzLmNvbSIsImZyb20ta3kuY29tIiwiZnJvbS1tYS5jb20iLCJmcm9tLW1kLmNvbSIsImZyb20tbWkuY29tIiwiZnJvbS1tbi5jb20iLCJmcm9tLW1vLmNvbSIsImZyb20tbXMuY29tIiwiZnJvbS1tdC5jb20iLCJmcm9tLW5jLmNvbSIsImZyb20tbmQuY29tIiwiZnJvbS1uZS5jb20i'@;
put 'LCJmcm9tLW5oLmNvbSIsImZyb20tbmouY29tIiwiZnJvbS1ubS5jb20iLCJmcm9tLW52LmNvbSIsImZyb20tb2guY29tIiwiZnJvbS1vay5jb20iLCJmcm9tLW9yLmNvbSIsImZyb20tcGEuY29tIiwiZnJvbS1wci5jb20iLCJmcm9tLXJpLmNvbSIsImZyb20tc2MuY29tIiwiZnJvbS1zZC5j'@;
put 'b20iLCJmcm9tLXRuLmNvbSIsImZyb20tdHguY29tIiwiZnJvbS11dC5jb20iLCJmcm9tLXZhLmNvbSIsImZyb20tdnQuY29tIiwiZnJvbS13YS5jb20iLCJmcm9tLXdpLmNvbSIsImZyb20td3YuY29tIiwiZnJvbS13eS5jb20iLCJnZXRteWlwLmNvbSIsImdvdGRucy5jb20iLCJob2JieS1z'@;
put 'aXRlLmNvbSIsImhvbWVsaW51eC5jb20iLCJob21ldW5peC5jb20iLCJpYW1hbGxhbWEuY29tIiwiaXMtYS1hbmFyY2hpc3QuY29tIiwiaXMtYS1ibG9nZ2VyLmNvbSIsImlzLWEtYm9va2tlZXBlci5jb20iLCJpcy1hLWJ1bGxzLWZhbi5jb20iLCJpcy1hLWNhdGVyZXIuY29tIiwiaXMtYS1j'@;
put 'aGVmLmNvbSIsImlzLWEtY29uc2VydmF0aXZlLmNvbSIsImlzLWEtY3BhLmNvbSIsImlzLWEtY3ViaWNsZS1zbGF2ZS5jb20iLCJpcy1hLWRlbW9jcmF0LmNvbSIsImlzLWEtZGVzaWduZXIuY29tIiwiaXMtYS1kb2N0b3IuY29tIiwiaXMtYS1maW5hbmNpYWxhZHZpc29yLmNvbSIsImlzLWEt'@;
put 'Z2Vlay5jb20iLCJpcy1hLWdyZWVuLmNvbSIsImlzLWEtZ3VydS5jb20iLCJpcy1hLWhhcmQtd29ya2VyLmNvbSIsImlzLWEtaHVudGVyLmNvbSIsImlzLWEtbGFuZHNjYXBlci5jb20iLCJpcy1hLWxhd3llci5jb20iLCJpcy1hLWxpYmVyYWwuY29tIiwiaXMtYS1saWJlcnRhcmlhbi5jb20i'@;
put 'LCJpcy1hLWxsYW1hLmNvbSIsImlzLWEtbXVzaWNpYW4uY29tIiwiaXMtYS1uYXNjYXJmYW4uY29tIiwiaXMtYS1udXJzZS5jb20iLCJpcy1hLXBhaW50ZXIuY29tIiwiaXMtYS1wZXJzb25hbHRyYWluZXIuY29tIiwiaXMtYS1waG90b2dyYXBoZXIuY29tIiwiaXMtYS1wbGF5ZXIuY29tIiwi'@;
put 'aXMtYS1yZXB1YmxpY2FuLmNvbSIsImlzLWEtcm9ja3N0YXIuY29tIiwiaXMtYS1zb2NpYWxpc3QuY29tIiwiaXMtYS1zdHVkZW50LmNvbSIsImlzLWEtdGVhY2hlci5jb20iLCJpcy1hLXRlY2hpZS5jb20iLCJpcy1hLXRoZXJhcGlzdC5jb20iLCJpcy1hbi1hY2NvdW50YW50LmNvbSIsImlz'@;
put 'LWFuLWFjdG9yLmNvbSIsImlzLWFuLWFjdHJlc3MuY29tIiwiaXMtYW4tYW5hcmNoaXN0LmNvbSIsImlzLWFuLWFydGlzdC5jb20iLCJpcy1hbi1lbmdpbmVlci5jb20iLCJpcy1hbi1lbnRlcnRhaW5lci5jb20iLCJpcy1jZXJ0aWZpZWQuY29tIiwiaXMtZ29uZS5jb20iLCJpcy1pbnRvLWFu'@;
put 'aW1lLmNvbSIsImlzLWludG8tY2Fycy5jb20iLCJpcy1pbnRvLWNhcnRvb25zLmNvbSIsImlzLWludG8tZ2FtZXMuY29tIiwiaXMtbGVldC5jb20iLCJpcy1ub3QtY2VydGlmaWVkLmNvbSIsImlzLXNsaWNrLmNvbSIsImlzLXViZXJsZWV0LmNvbSIsImlzLXdpdGgtdGhlYmFuZC5jb20iLCJp'@;
put 'c2EtZ2Vlay5jb20iLCJpc2EtaG9ja2V5bnV0LmNvbSIsImlzc21hcnRlcnRoYW55b3UuY29tIiwibGlrZXMtcGllLmNvbSIsImxpa2VzY2FuZHkuY29tIiwibmVhdC11cmwuY29tIiwic2F2ZXMtdGhlLXdoYWxlcy5jb20iLCJzZWxmaXAuY29tIiwic2VsbHMtZm9yLWxlc3MuY29tIiwic2Vs'@;
put 'bHMtZm9yLXUuY29tIiwic2VydmViYnMuY29tIiwic2ltcGxlLXVybC5jb20iLCJzcGFjZS10by1yZW50LmNvbSIsInRlYWNoZXMteW9nYS5jb20iLCJ3cml0ZXN0aGlzYmxvZy5jb20iLCJhdGguY3giLCJmdWV0dGVydGRhc25ldHouZGUiLCJpc3RlaW5nZWVrLmRlIiwiaXN0bWVpbi5kZSIs'@;
put 'ImxlYnRpbW5ldHouZGUiLCJsZWl0dW5nc2VuLmRlIiwidHJhZXVtdGdlcmFkZS5kZSIsImJhcnJlbC1vZi1rbm93bGVkZ2UuaW5mbyIsImJhcnJlbGwtb2Yta25vd2xlZGdlLmluZm8iLCJkeW5kbnMuaW5mbyIsImZvci1vdXIuaW5mbyIsImdyb2tzLXRoZS5pbmZvIiwiZ3Jva3MtdGhpcy5p'@;
put 'bmZvIiwiaGVyZS1mb3ItbW9yZS5pbmZvIiwia25vd3NpdGFsbC5pbmZvIiwic2VsZmlwLmluZm8iLCJ3ZWJob3AuaW5mbyIsImZvcmdvdC5oZXIubmFtZSIsImZvcmdvdC5oaXMubmFtZSIsImF0LWJhbmQtY2FtcC5uZXQiLCJibG9nZG5zLm5ldCIsImJyb2tlLWl0Lm5ldCIsImJ1eXNob3Vz'@;
put 'ZXMubmV0IiwiZG5zYWxpYXMubmV0IiwiZG5zZG9qby5uZXQiLCJkb2VzLWl0Lm5ldCIsImRvbnRleGlzdC5uZXQiLCJkeW5hbGlhcy5uZXQiLCJkeW5hdGhvbWUubmV0IiwiZW5kb2ZpbnRlcm5ldC5uZXQiLCJmcm9tLWF6Lm5ldCIsImZyb20tY28ubmV0IiwiZnJvbS1sYS5uZXQiLCJmcm9t'@;
put 'LW55Lm5ldCIsImdldHMtaXQubmV0IiwiaGFtLXJhZGlvLW9wLm5ldCIsImhvbWVmdHAubmV0IiwiaG9tZWlwLm5ldCIsImhvbWVsaW51eC5uZXQiLCJob21ldW5peC5uZXQiLCJpbi10aGUtYmFuZC5uZXQiLCJpcy1hLWNoZWYubmV0IiwiaXMtYS1nZWVrLm5ldCIsImlzYS1nZWVrLm5ldCIs'@;
put 'ImtpY2tzLWFzcy5uZXQiLCJvZmZpY2Utb24tdGhlLm5ldCIsInBvZHpvbmUubmV0Iiwic2NyYXBwZXItc2l0ZS5uZXQiLCJzZWxmaXAubmV0Iiwic2VsbHMtaXQubmV0Iiwic2VydmViYnMubmV0Iiwic2VydmVmdHAubmV0IiwidGhydWhlcmUubmV0Iiwid2ViaG9wLm5ldCIsIm1lcnNlaW5l'@;
put 'Lm51IiwibWluZS5udSIsInNoYWNrbmV0Lm51IiwiYmxvZ2Rucy5vcmciLCJibG9nc2l0ZS5vcmciLCJib2xkbHlnb2luZ25vd2hlcmUub3JnIiwiZG5zYWxpYXMub3JnIiwiZG5zZG9qby5vcmciLCJkb2VzbnRleGlzdC5vcmciLCJkb250ZXhpc3Qub3JnIiwiZG9vbWRucy5vcmciLCJkdnJk'@;
put 'bnMub3JnIiwiZHluYWxpYXMub3JnIiwiZHluZG5zLm9yZyIsImdvLmR5bmRucy5vcmciLCJob21lLmR5bmRucy5vcmciLCJlbmRvZmludGVybmV0Lm9yZyIsImVuZG9mdGhlaW50ZXJuZXQub3JnIiwiZnJvbS1tZS5vcmciLCJnYW1lLWhvc3Qub3JnIiwiZ290ZG5zLm9yZyIsImhvYmJ5LXNp'@;
put 'dGUub3JnIiwiaG9tZWRucy5vcmciLCJob21lZnRwLm9yZyIsImhvbWVsaW51eC5vcmciLCJob21ldW5peC5vcmciLCJpcy1hLWJydWluc2Zhbi5vcmciLCJpcy1hLWNhbmRpZGF0ZS5vcmciLCJpcy1hLWNlbHRpY3NmYW4ub3JnIiwiaXMtYS1jaGVmLm9yZyIsImlzLWEtZ2Vlay5vcmciLCJp'@;
put 'cy1hLWtuaWdodC5vcmciLCJpcy1hLWxpbnV4LXVzZXIub3JnIiwiaXMtYS1wYXRzZmFuLm9yZyIsImlzLWEtc294ZmFuLm9yZyIsImlzLWZvdW5kLm9yZyIsImlzLWxvc3Qub3JnIiwiaXMtc2F2ZWQub3JnIiwiaXMtdmVyeS1iYWQub3JnIiwiaXMtdmVyeS1ldmlsLm9yZyIsImlzLXZlcnkt'@;
put 'Z29vZC5vcmciLCJpcy12ZXJ5LW5pY2Uub3JnIiwiaXMtdmVyeS1zd2VldC5vcmciLCJpc2EtZ2Vlay5vcmciLCJraWNrcy1hc3Mub3JnIiwibWlzY29uZnVzZWQub3JnIiwicG9kem9uZS5vcmciLCJyZWFkbXlibG9nLm9yZyIsInNlbGZpcC5vcmciLCJzZWxsc3lvdXJob21lLm9yZyIsInNl'@;
put 'cnZlYmJzLm9yZyIsInNlcnZlZnRwLm9yZyIsInNlcnZlZ2FtZS5vcmciLCJzdHVmZi00LXNhbGUub3JnIiwid2ViaG9wLm9yZyIsImJldHRlci10aGFuLnR2IiwiZHluZG5zLnR2Iiwib24tdGhlLXdlYi50diIsIndvcnNlLXRoYW4udHYiLCJpcy1ieS51cyIsImxhbmQtNC1zYWxlLnVzIiwi'@;
put 'c3R1ZmYtNC1zYWxlLnVzIiwiZHluZG5zLndzIiwibXlwZXRzLndzIiwiZGRuc2ZyZWUuY29tIiwiZGRuc2dlZWsuY29tIiwiZ2lpemUuY29tIiwiZ2xlZXplLmNvbSIsImtvem93LmNvbSIsImxvc2V5b3VyaXAuY29tIiwib29ndXkuY29tIiwidGhld29ya3BjLmNvbSIsImNhc2FjYW0ubmV0'@;
put 'IiwiZHludS5uZXQiLCJhY2Nlc3NjYW0ub3JnIiwiY2FtZHZyLm9yZyIsImZyZWVkZG5zLm9yZyIsIm15d2lyZS5vcmciLCJ3ZWJyZWRpcmVjdC5vcmciLCJteWRkbnMucm9ja3MiLCJkeW52Ni5uZXQiLCJlNC5jeiIsImVhc3lwYW5lbC5hcHAiLCJlYXN5cGFuZWwuaG9zdCIsIiouZXdwLmxp'@;
put 'dmUiLCJ0d21haWwuY2MiLCJ0d21haWwubmV0IiwidHdtYWlsLm9yZyIsIm15bWFpbGVyLmNvbS50dyIsInVybC50dyIsImF0LmVtZi5jYW1wIiwicnQuaHQiLCJlbGVtZW50b3IuY2xvdWQiLCJlbGVtZW50b3IuY29vbCIsImVuLXJvb3QuZnIiLCJteXR1bGVhcC5jb20iLCJ0dWxlYXAtcGFy'@;
put 'dG5lcnMuY29tIiwiZW5jci5hcHAiLCJlbmNvcmVhcGkuY29tIiwiZXUuZW5jb3dheS5jbG91ZCIsImV1Lm9yZyIsImFsLmV1Lm9yZyIsImFzc28uZXUub3JnIiwiYXQuZXUub3JnIiwiYXUuZXUub3JnIiwiYmUuZXUub3JnIiwiYmcuZXUub3JnIiwiY2EuZXUub3JnIiwiY2QuZXUub3JnIiwi'@;
put 'Y2guZXUub3JnIiwiY24uZXUub3JnIiwiY3kuZXUub3JnIiwiY3ouZXUub3JnIiwiZGUuZXUub3JnIiwiZGsuZXUub3JnIiwiZWR1LmV1Lm9yZyIsImVlLmV1Lm9yZyIsImVzLmV1Lm9yZyIsImZpLmV1Lm9yZyIsImZyLmV1Lm9yZyIsImdyLmV1Lm9yZyIsImhyLmV1Lm9yZyIsImh1LmV1Lm9y'@;
put 'ZyIsImllLmV1Lm9yZyIsImlsLmV1Lm9yZyIsImluLmV1Lm9yZyIsImludC5ldS5vcmciLCJpcy5ldS5vcmciLCJpdC5ldS5vcmciLCJqcC5ldS5vcmciLCJrci5ldS5vcmciLCJsdC5ldS5vcmciLCJsdS5ldS5vcmciLCJsdi5ldS5vcmciLCJtZS5ldS5vcmciLCJtay5ldS5vcmciLCJtdC5l'@;
put 'dS5vcmciLCJteS5ldS5vcmciLCJuZXQuZXUub3JnIiwibmcuZXUub3JnIiwibmwuZXUub3JnIiwibm8uZXUub3JnIiwibnouZXUub3JnIiwicGwuZXUub3JnIiwicHQuZXUub3JnIiwicm8uZXUub3JnIiwicnUuZXUub3JnIiwic2UuZXUub3JnIiwic2kuZXUub3JnIiwic2suZXUub3JnIiwi'@;
put 'dHIuZXUub3JnIiwidWsuZXUub3JnIiwidXMuZXUub3JnIiwiZXVyb2Rpci5ydSIsImV1LTEuZXZlbm5vZGUuY29tIiwiZXUtMi5ldmVubm9kZS5jb20iLCJldS0zLmV2ZW5ub2RlLmNvbSIsImV1LTQuZXZlbm5vZGUuY29tIiwidXMtMS5ldmVubm9kZS5jb20iLCJ1cy0yLmV2ZW5ub2RlLmNv'@;
put 'bSIsInVzLTMuZXZlbm5vZGUuY29tIiwidXMtNC5ldmVubm9kZS5jb20iLCJyZWxheS5ldmVydmF1bHQuYXBwIiwicmVsYXkuZXZlcnZhdWx0LmRldiIsImV4cG8uYXBwIiwic3RhZ2luZy5leHBvLmFwcCIsIm9uZmFicmljYS5jb20iLCJydS5uZXQiLCJhZHlnZXlhLnJ1IiwiYmFzaGtpcmlh'@;
put 'LnJ1IiwiYmlyLnJ1IiwiY2JnLnJ1IiwiY29tLnJ1IiwiZGFnZXN0YW4ucnUiLCJncm96bnkucnUiLCJrYWxteWtpYS5ydSIsImt1c3RhbmFpLnJ1IiwibWFyaW5lLnJ1IiwibW9yZG92aWEucnUiLCJtc2sucnUiLCJteXRpcy5ydSIsIm5hbGNoaWsucnUiLCJub3YucnUiLCJweWF0aWdvcnNr'@;
put 'LnJ1Iiwic3BiLnJ1IiwidmxhZGlrYXZrYXoucnUiLCJ2bGFkaW1pci5ydSIsImFia2hhemlhLnN1IiwiYWR5Z2V5YS5zdSIsImFrdHl1Ymluc2suc3UiLCJhcmtoYW5nZWxzay5zdSIsImFybWVuaWEuc3UiLCJhc2hnYWJhZC5zdSIsImF6ZXJiYWlqYW4uc3UiLCJiYWxhc2hvdi5zdSIsImJh'@;
put 'c2hraXJpYS5zdSIsImJyeWFuc2suc3UiLCJidWtoYXJhLnN1IiwiY2hpbWtlbnQuc3UiLCJkYWdlc3Rhbi5zdSIsImVhc3Qta2F6YWtoc3Rhbi5zdSIsImV4bmV0LnN1IiwiZ2VvcmdpYS5zdSIsImdyb3pueS5zdSIsIml2YW5vdm8uc3UiLCJqYW1ieWwuc3UiLCJrYWxteWtpYS5zdSIsImth'@;
put 'bHVnYS5zdSIsImthcmFjb2wuc3UiLCJrYXJhZ2FuZGEuc3UiLCJrYXJlbGlhLnN1Iiwia2hha2Fzc2lhLnN1Iiwia3Jhc25vZGFyLnN1Iiwia3VyZ2FuLnN1Iiwia3VzdGFuYWkuc3UiLCJsZW51Zy5zdSIsIm1hbmd5c2hsYWsuc3UiLCJtb3Jkb3ZpYS5zdSIsIm1zay5zdSIsIm11cm1hbnNr'@;
put 'LnN1IiwibmFsY2hpay5zdSIsIm5hdm9pLnN1Iiwibm9ydGgta2F6YWtoc3Rhbi5zdSIsIm5vdi5zdSIsIm9ibmluc2suc3UiLCJwZW56YS5zdSIsInBva3JvdnNrLnN1Iiwic29jaGkuc3UiLCJzcGIuc3UiLCJ0YXNoa2VudC5zdSIsInRlcm1lei5zdSIsInRvZ2xpYXR0aS5zdSIsInRyb2l0'@;
put 'c2suc3UiLCJ0c2VsaW5vZ3JhZC5zdSIsInR1bGEuc3UiLCJ0dXZhLnN1IiwidmxhZGlrYXZrYXouc3UiLCJ2bGFkaW1pci5zdSIsInZvbG9nZGEuc3UiLCJjaGFubmVsc2R2ci5uZXQiLCJ1LmNoYW5uZWxzZHZyLm5ldCIsImVkZ2Vjb21wdXRlLmFwcCIsImZhc3RseS1lZGdlLmNvbSIsImZh'@;
put 'c3RseS10ZXJyYXJpdW0uY29tIiwiZnJlZXRscy5mYXN0bHkubmV0IiwibWFwLmZhc3RseS5uZXQiLCJhLnByb2QuZmFzdGx5Lm5ldCIsImdsb2JhbC5wcm9kLmZhc3RseS5uZXQiLCJhLnNzbC5mYXN0bHkubmV0IiwiYi5zc2wuZmFzdGx5Lm5ldCIsImdsb2JhbC5zc2wuZmFzdGx5Lm5ldCIs'@;
put 'ImZhc3RseWxiLm5ldCIsIm1hcC5mYXN0bHlsYi5uZXQiLCIqLnVzZXIuZm0iLCJmYXN0dnBzLXNlcnZlci5jb20iLCJmYXN0dnBzLmhvc3QiLCJteWZhc3QuaG9zdCIsImZhc3R2cHMuc2l0ZSIsIm15ZmFzdC5zcGFjZSIsImNvbm4udWsiLCJjb3Byby51ayIsImhvc3AudWsiLCJmZWRvcmFp'@;
put 'bmZyYWNsb3VkLm9yZyIsImZlZG9yYXBlb3BsZS5vcmciLCJjbG91ZC5mZWRvcmFwcm9qZWN0Lm9yZyIsImFwcC5vcy5mZWRvcmFwcm9qZWN0Lm9yZyIsImFwcC5vcy5zdGcuZmVkb3JhcHJvamVjdC5vcmciLCJteWRvYmlzcy5jb20iLCJmaC1tdWVuc3Rlci5pbyIsImZpbGVnZWFyLm1lIiwi'@;
put 'ZmlyZWJhc2VhcHAuY29tIiwiZmxkcnYuY29tIiwiZmx1dHRlcmZsb3cuYXBwIiwiZmx5LmRldiIsInNody5pbyIsImVkZ2VhcHAubmV0IiwiZm9yZ2VibG9ja3MuY29tIiwiaWQuZm9yZ2Vyb2NrLmlvIiwiZnJhbWVyLmFpIiwiZnJhbWVyLmFwcCIsImZyYW1lcmNhbnZhcy5jb20iLCJmcmFt'@;
put 'ZXIubWVkaWEiLCJmcmFtZXIucGhvdG9zIiwiZnJhbWVyLndlYnNpdGUiLCJmcmFtZXIud2lraSIsIjBlLnZjIiwiZnJlZWJveC1vcy5jb20iLCJmcmVlYm94b3MuY29tIiwiZmJ4LW9zLmZyIiwiZmJ4b3MuZnIiLCJmcmVlYm94LW9zLmZyIiwiZnJlZWJveG9zLmZyIiwiZnJlZWRlc2t0b3Au'@;
put 'b3JnIiwiZnJlZW15aXAuY29tIiwiKi5mcnVza3kuZGUiLCJ3aWVuLmZ1bmtmZXVlci5hdCIsImRhZW1vbi5hc2lhIiwiZGl4LmFzaWEiLCJteWRucy5ieiIsIjBhbS5qcCIsIjBnMC5qcCIsIjBqMC5qcCIsIjB0MC5qcCIsIm15ZG5zLmpwIiwicGd3LmpwIiwid2pnLmpwIiwia2V5d29yZC1v'@;
put 'bi5uZXQiLCJsaXZlLW9uLm5ldCIsInNlcnZlci1vbi5uZXQiLCJteWRucy50dyIsIm15ZG5zLnZjIiwiKi5mdXR1cmVjbXMuYXQiLCIqLmV4LmZ1dHVyZWNtcy5hdCIsIiouaW4uZnV0dXJlY21zLmF0IiwiZnV0dXJlaG9zdGluZy5hdCIsImZ1dHVyZW1haWxpbmcuYXQiLCIqLmV4Lm9ydHNp'@;
put 'bmZvLmF0IiwiKi5rdW5kZW4ub3J0c2luZm8uYXQiLCIqLnN0YXRpY3MuY2xvdWQiLCJhbGlhc2VzMTIxLmNvbSIsImNhbXBhaWduLmdvdi51ayIsInNlcnZpY2UuZ292LnVrIiwiaW5kZXBlbmRlbnQtY29tbWlzc2lvbi51ayIsImluZGVwZW5kZW50LWlucXVlc3QudWsiLCJpbmRlcGVuZGVu'@;
put 'dC1pbnF1aXJ5LnVrIiwiaW5kZXBlbmRlbnQtcGFuZWwudWsiLCJpbmRlcGVuZGVudC1yZXZpZXcudWsiLCJwdWJsaWMtaW5xdWlyeS51ayIsInJveWFsLWNvbW1pc3Npb24udWsiLCJnZWhpcm4ubmUuanAiLCJ1c2VyY29udGVudC5qcCIsImdlbnRhcHBzLmNvbSIsImdlbnRsZW50YXBpcy5j'@;
put 'b20iLCJsYWIubXMiLCJjZG4tZWRnZXMubmV0IiwibG9jYWxjZXJ0Lm5ldCIsImxvY2FsaG9zdGNlcnQubmV0IiwiZ3NqLmJ6IiwiZ2l0aHVidXNlcmNvbnRlbnQuY29tIiwiZ2l0aHVicHJldmlldy5kZXYiLCJnaXRodWIuaW8iLCJnaXRsYWIuaW8iLCJnaXRhcHAuc2kiLCJnaXRwYWdlLnNp'@;
put 'IiwiZ2xpdGNoLm1lIiwibm9nLmNvbW11bml0eSIsImNvLnJvIiwic2hvcC5ybyIsImxvbGlwb3AuaW8iLCJhbmdyeS5qcCIsImJhYnlibHVlLmpwIiwiYmFieW1pbGsuanAiLCJiYWNrZHJvcC5qcCIsImJhbWJpbmEuanAiLCJiaXR0ZXIuanAiLCJibHVzaC5qcCIsImJvby5qcCIsImJveS5q'@;
put 'cCIsImJveWZyaWVuZC5qcCIsImJ1dC5qcCIsImNhbmR5cG9wLmpwIiwiY2Fwb28uanAiLCJjYXRmb29kLmpwIiwiY2hlYXAuanAiLCJjaGljYXBwYS5qcCIsImNoaWxsb3V0LmpwIiwiY2hpcHMuanAiLCJjaG93ZGVyLmpwIiwiY2h1LmpwIiwiY2lhby5qcCIsImNvY290dGUuanAiLCJjb29s'@;
put 'YmxvZy5qcCIsImNyYW5reS5qcCIsImN1dGVnaXJsLmpwIiwiZGFhLmpwIiwiZGVjYS5qcCIsImRlY2kuanAiLCJkaWdpY2suanAiLCJlZ29pc20uanAiLCJmYWtlZnVyLmpwIiwiZmVtLmpwIiwiZmxpZXIuanAiLCJmbG9wcHkuanAiLCJmb29sLmpwIiwiZnJlbmNoa2lzcy5qcCIsImdpcmxm'@;
put 'cmllbmQuanAiLCJnaXJseS5qcCIsImdsb29teS5qcCIsImdvbm5hLmpwIiwiZ3JlYXRlci5qcCIsImhhY2NhLmpwIiwiaGVhdnkuanAiLCJoZXIuanAiLCJoaWhvLmpwIiwiaGlwcHkuanAiLCJob2x5LmpwIiwiaHVuZ3J5LmpwIiwiaWN1cnVzLmpwIiwiaXRpZ28uanAiLCJqZWxseWJlYW4u'@;
put 'anAiLCJraWtpcmFyYS5qcCIsImtpbGwuanAiLCJraWxvLmpwIiwia3Vyb24uanAiLCJsaXR0bGVzdGFyLmpwIiwibG9saXBvcG1jLmpwIiwibG9saXRhcHVuay5qcCIsImxvbW8uanAiLCJsb3ZlcG9wLmpwIiwibG92ZXNpY2suanAiLCJtYWluLmpwIiwibW9kcy5qcCIsIm1vbmQuanAiLCJt'@;
put 'b25nb2xpYW4uanAiLCJtb28uanAiLCJuYW1hc3RlLmpwIiwibmlraXRhLmpwIiwibm9idXNoaS5qcCIsIm5vb3IuanAiLCJvb3BzLmpwIiwicGFyYWxsZWwuanAiLCJwYXJhc2l0ZS5qcCIsInBlY29yaS5qcCIsInBlZXdlZS5qcCIsInBlbm5lLmpwIiwicGVwcGVyLmpwIiwicGVybWEuanAi'@;
put 'LCJwaWdib2F0LmpwIiwicGlub2tvLmpwIiwicHVueXUuanAiLCJwdXB1LmpwIiwicHVzc3ljYXQuanAiLCJweWEuanAiLCJyYWluZHJvcC5qcCIsInJlYWR5bWFkZS5qcCIsInNhZGlzdC5qcCIsInNjaG9vbGJ1cy5qcCIsInNlY3JldC5qcCIsInN0YWJhLmpwIiwic3RyaXBwZXIuanAiLCJz'@;
put 'dWIuanAiLCJzdW5ueWRheS5qcCIsInRoaWNrLmpwIiwidG9ua290c3UuanAiLCJ1bmRlci5qcCIsInVwcGVyLmpwIiwidmVsdmV0LmpwIiwidmVyc2UuanAiLCJ2ZXJzdXMuanAiLCJ2aXZpYW4uanAiLCJ3YXRzb24uanAiLCJ3ZWJsaWtlLmpwIiwid2hpdGVzbm93LmpwIiwiem9tYmllLmpw'@;
put 'IiwiaGV0ZW1sLm5ldCIsImdyYXBoaWMuZGVzaWduIiwiZ29pcC5kZSIsImJsb2dzcG90LmFlIiwiYmxvZ3Nwb3QuYWwiLCJibG9nc3BvdC5hbSIsIiouaG9zdGVkLmFwcCIsIioucnVuLmFwcCIsIndlYi5hcHAiLCJibG9nc3BvdC5jb20uYXIiLCJibG9nc3BvdC5jby5hdCIsImJsb2dzcG90'@;
put 'LmNvbS5hdSIsImJsb2dzcG90LmJhIiwiYmxvZ3Nwb3QuYmUiLCJibG9nc3BvdC5iZyIsImJsb2dzcG90LmJqIiwiYmxvZ3Nwb3QuY29tLmJyIiwiYmxvZ3Nwb3QuY29tLmJ5IiwiYmxvZ3Nwb3QuY2EiLCJibG9nc3BvdC5jZiIsImJsb2dzcG90LmNoIiwiYmxvZ3Nwb3QuY2wiLCJibG9nc3Bv'@;
put 'dC5jb20uY28iLCIqLjBlbW0uY29tIiwiYXBwc3BvdC5jb20iLCIqLnIuYXBwc3BvdC5jb20iLCJibG9nc3BvdC5jb20iLCJjb2Rlc3BvdC5jb20iLCJnb29nbGVhcGlzLmNvbSIsImdvb2dsZWNvZGUuY29tIiwicGFnZXNwZWVkbW9iaWxpemVyLmNvbSIsIndpdGhnb29nbGUuY29tIiwid2l0'@;
put 'aHlvdXR1YmUuY29tIiwiYmxvZ3Nwb3QuY3YiLCJibG9nc3BvdC5jb20uY3kiLCJibG9nc3BvdC5jeiIsImJsb2dzcG90LmRlIiwiKi5nYXRld2F5LmRldiIsImJsb2dzcG90LmRrIiwiYmxvZ3Nwb3QuY29tLmVlIiwiYmxvZ3Nwb3QuY29tLmVnIiwiYmxvZ3Nwb3QuY29tLmVzIiwiYmxvZ3Nw'@;
put 'b3QuZmkiLCJibG9nc3BvdC5mciIsImNsb3VkLmdvb2ciLCJ0cmFuc2xhdGUuZ29vZyIsIioudXNlcmNvbnRlbnQuZ29vZyIsImJsb2dzcG90LmdyIiwiYmxvZ3Nwb3QuaGsiLCJibG9nc3BvdC5ociIsImJsb2dzcG90Lmh1IiwiYmxvZ3Nwb3QuY28uaWQiLCJibG9nc3BvdC5pZSIsImJsb2dz'@;
put 'cG90LmNvLmlsIiwiYmxvZ3Nwb3QuaW4iLCJibG9nc3BvdC5pcyIsImJsb2dzcG90Lml0IiwiYmxvZ3Nwb3QuanAiLCJibG9nc3BvdC5jby5rZSIsImJsb2dzcG90LmtyIiwiYmxvZ3Nwb3QubGkiLCJibG9nc3BvdC5sdCIsImJsb2dzcG90Lmx1IiwiYmxvZ3Nwb3QubWQiLCJibG9nc3BvdC5t'@;
put 'ayIsImJsb2dzcG90LmNvbS5tdCIsImJsb2dzcG90Lm14IiwiYmxvZ3Nwb3QubXkiLCJjbG91ZGZ1bmN0aW9ucy5uZXQiLCJibG9nc3BvdC5jb20ubmciLCJibG9nc3BvdC5ubCIsImJsb2dzcG90Lm5vIiwiYmxvZ3Nwb3QuY28ubnoiLCJibG9nc3BvdC5wZSIsImJsb2dzcG90LnB0IiwiYmxv'@;
put 'Z3Nwb3QucWEiLCJibG9nc3BvdC5yZSIsImJsb2dzcG90LnJvIiwiYmxvZ3Nwb3QucnMiLCJibG9nc3BvdC5ydSIsImJsb2dzcG90LnNlIiwiYmxvZ3Nwb3Quc2ciLCJibG9nc3BvdC5zaSIsImJsb2dzcG90LnNrIiwiYmxvZ3Nwb3Quc24iLCJibG9nc3BvdC50ZCIsImJsb2dzcG90LmNvbS50'@;
put 'ciIsImJsb2dzcG90LnR3IiwiYmxvZ3Nwb3QudWciLCJibG9nc3BvdC5jby51ayIsImJsb2dzcG90LmNvbS51eSIsImJsb2dzcG90LnZuIiwiYmxvZ3Nwb3QuY28uemEiLCJnb3VwaWxlLmZyIiwicHltbnQudWsiLCJjbG91ZGFwcHMuZGlnaXRhbCIsImxvbmRvbi5jbG91ZGFwcHMuZGlnaXRh'@;
put 'bCIsImdvdi5ubCIsImdyYWZhbmEtZGV2Lm5ldCIsImdyYXlqYXlsZWFndWVzLmNvbSIsImdceGZjbnN0aWdiZXN0ZWxsZW4uZGUiLCJnXHhmY25zdGlnbGllZmVybi5kZSIsImZpbi5jaSIsImZyZWUuaHIiLCJjYWEubGkiLCJ1YS5ycyIsImNvbmYuc2UiLCJoXHhlNGtraW5lbi5maSIsImhy'@;
put 'c24uZGV2IiwiaGFzaGJhbmcuc2giLCJoYXN1cmEuYXBwIiwiaGFzdXJhLWFwcC5pbyIsImhhdGVuYWJsb2cuY29tIiwiaGF0ZW5hZGlhcnkuY29tIiwiaGF0ZWJsby5qcCIsImhhdGVuYWJsb2cuanAiLCJoYXRlbmFkaWFyeS5qcCIsImhhdGVuYWRpYXJ5Lm9yZyIsInBhZ2VzLml0LmhzLWhl'@;
put 'aWxicm9ubi5kZSIsInBhZ2VzLXJlc2VhcmNoLml0LmhzLWhlaWxicm9ubi5kZSIsImhlaXl1LnNwYWNlIiwiaGVsaW9oby5zdCIsImhlbGlvaG9zdC51cyIsImhlcGZvcmdlLm9yZyIsImhlcm9rdWFwcC5jb20iLCJoZXJva3Vzc2wuY29tIiwiaGV5Zmxvdy5wYWdlIiwiaGV5Zmxvdy5zaXRl'@;
put 'IiwicmF2ZW5kYi5jbG91ZCIsInJhdmVuZGIuY29tbXVuaXR5IiwiZGV2ZWxvcG1lbnQucnVuIiwicmF2ZW5kYi5ydW4iLCJob21lc2tsZXAucGwiLCIqLmtpbi5vbmUiLCIqLmlkLnB1YiIsIioua2luLnB1YiIsInNlY2Fhcy5oayIsImhvcGxpeC5zaG9wIiwib3J4LmJpeiIsImJpei5nbCIs'@;
put 'ImJpei5uZyIsImNvLmJpei5uZyIsImRsLmJpei5uZyIsImdvLmJpei5uZyIsImxnLmJpei5uZyIsIm9uLmJpei5uZyIsImNvbC5uZyIsImZpcm0ubmciLCJnZW4ubmciLCJsdGQubmciLCJuZ28ubmciLCJwbGMubmciLCJpZS51YSIsImhvc3R5aG9zdGluZy5pbyIsImhmLnNwYWNlIiwic3Rh'@;
put 'dGljLmhmLnNwYWNlIiwiaHlwZXJub2RlLmlvIiwiaW9iYi5uZXQiLCJjby5jeiIsIioubW9vbnNjYWxlLmlvIiwibW9vbnNjYWxlLm5ldCIsImdyLmNvbSIsImlraS5maSIsImlieG9zLml0IiwiaWxpYWRib3hvcy5pdCIsInNtdXNoY2RuLmNvbSIsIndwaG9zdGVkbWFpbC5jb20iLCJ3cG11'@;
put 'Y2RuLmNvbSIsInRlbXB1cmwuaG9zdCIsIndwbXVkZXYuaG9zdCIsImR5bi1iZXJsaW4uZGUiLCJpbi1iZXJsaW4uZGUiLCJpbi1icmIuZGUiLCJpbi1idXR0ZXIuZGUiLCJpbi1kc2wuZGUiLCJpbi12cG4uZGUiLCJpbi1kc2wubmV0IiwiaW4tdnBuLm5ldCIsImluLWRzbC5vcmciLCJpbi12'@;
put 'cG4ub3JnIiwiYml6LmF0IiwiaW5mby5hdCIsImluZm8uY3giLCJhYy5sZWcuYnIiLCJhbC5sZWcuYnIiLCJhbS5sZWcuYnIiLCJhcC5sZWcuYnIiLCJiYS5sZWcuYnIiLCJjZS5sZWcuYnIiLCJkZi5sZWcuYnIiLCJlcy5sZWcuYnIiLCJnby5sZWcuYnIiLCJtYS5sZWcuYnIiLCJtZy5sZWcu'@;
put 'YnIiLCJtcy5sZWcuYnIiLCJtdC5sZWcuYnIiLCJwYS5sZWcuYnIiLCJwYi5sZWcuYnIiLCJwZS5sZWcuYnIiLCJwaS5sZWcuYnIiLCJwci5sZWcuYnIiLCJyai5sZWcuYnIiLCJybi5sZWcuYnIiLCJyby5sZWcuYnIiLCJyci5sZWcuYnIiLCJycy5sZWcuYnIiLCJzYy5sZWcuYnIiLCJzZS5s'@;
put 'ZWcuYnIiLCJzcC5sZWcuYnIiLCJ0by5sZWcuYnIiLCJwaXhvbGluby5jb20iLCJuYTR1LnJ1IiwiYXBwcy0xYW5kMS5jb20iLCJsaXZlLXdlYnNpdGUuY29tIiwiYXBwcy0xYW5kMS5uZXQiLCJ3ZWJzaXRlYnVpbGRlci5vbmxpbmUiLCJhcHAtaW9ub3Muc3BhY2UiLCJpb3BzeXMuc2UiLCIq'@;
put 'LmR3ZWIubGluayIsImlwaWZvbnkubmV0IiwiaXIubWQiLCJpcy1hLWdvb2QuZGV2IiwiaXMtYS5kZXYiLCJpc2VydnNjaHVsZS5kZSIsIm1laW4taXNlcnYuZGUiLCJzY2h1bHBsYXR0Zm9ybS5kZSIsInNjaHVsc2VydmVyLmRlIiwidGVzdC1pc2Vydi5kZSIsImlzZXJ2LmRldiIsIm1lbC5j'@;
put 'bG91ZGxldHMuY29tLmF1IiwiY2xvdWQuaW50ZXJob3N0c29sdXRpb25zLmJlIiwiYWxwMS5hZS5mbG93LmNoIiwiYXBwZW5naW5lLmZsb3cuY2giLCJlcy0xLmF4YXJuZXQuY2xvdWQiLCJkaWFkZW0uY2xvdWQiLCJ2aXAuamVsYXN0aWMuY2xvdWQiLCJqZWxlLmNsb3VkIiwiaXQxLmV1ci5h'@;
put 'cnViYS5qZW52LWFydWJhLmNsb3VkIiwiaXQxLmplbnYtYXJ1YmEuY2xvdWQiLCJrZWxpd2ViLmNsb3VkIiwiY3Mua2VsaXdlYi5jbG91ZCIsIm94YS5jbG91ZCIsInRuLm94YS5jbG91ZCIsInVrLm94YS5jbG91ZCIsInByaW1ldGVsLmNsb3VkIiwidWsucHJpbWV0ZWwuY2xvdWQiLCJjYS5y'@;
put 'ZWNsYWltLmNsb3VkIiwidWsucmVjbGFpbS5jbG91ZCIsInVzLnJlY2xhaW0uY2xvdWQiLCJjaC50cmVuZGhvc3RpbmcuY2xvdWQiLCJkZS50cmVuZGhvc3RpbmcuY2xvdWQiLCJqZWxlLmNsdWIiLCJkb3BhYXMuY29tIiwicGFhcy5ob3N0ZWQtYnktcHJldmlkZXIuY29tIiwicmFnLWNsb3Vk'@;
put 'Lmhvc3RldXIuY29tIiwicmFnLWNsb3VkLWNoLmhvc3RldXIuY29tIiwiamNsb3VkLmlrLXNlcnZlci5jb20iLCJqY2xvdWQtdmVyLWpwYy5pay1zZXJ2ZXIuY29tIiwiZGVtby5qZWxhc3RpYy5jb20iLCJwYWFzLm1hc3NpdmVncmlkLmNvbSIsImplZC53YWZhaWNsb3VkLmNvbSIsInJ5ZC53'@;
put 'YWZhaWNsb3VkLmNvbSIsImouc2NhbGVmb3JjZS5jb20uY3kiLCJqZWxhc3RpYy5kb2dhZG8uZXUiLCJmaS5jbG91ZHBsYXRmb3JtLmZpIiwiZGVtby5kYXRhY2VudGVyLmZpIiwicGFhcy5kYXRhY2VudGVyLmZpIiwiamVsZS5ob3N0IiwibWlyY2xvdWQuaG9zdCIsInBhYXMuYmVlYnl0ZS5p'@;
put 'byIsInNla2QxLmJlZWJ5dGVhcHAuaW8iLCJqZWxlLmlvIiwiamMubmVlbi5pdCIsImpjbG91ZC5reiIsImNsb3VkamlmZnkubmV0IiwiZnJhMS1kZS5jbG91ZGppZmZ5Lm5ldCIsIndlc3QxLXVzLmNsb3VkamlmZnkubmV0IiwiamxzLXN0bzEuZWxhc3R4Lm5ldCIsImpscy1zdG8yLmVsYXN0'@;
put 'eC5uZXQiLCJqbHMtc3RvMy5lbGFzdHgubmV0IiwiZnItMS5wYWFzLm1hc3NpdmVncmlkLm5ldCIsImxvbi0xLnBhYXMubWFzc2l2ZWdyaWQubmV0IiwibG9uLTIucGFhcy5tYXNzaXZlZ3JpZC5uZXQiLCJueS0xLnBhYXMubWFzc2l2ZWdyaWQubmV0IiwibnktMi5wYWFzLm1hc3NpdmVncmlk'@;
put 'Lm5ldCIsInNnLTEucGFhcy5tYXNzaXZlZ3JpZC5uZXQiLCJqZWxhc3RpYy5zYXZlaW5jbG91ZC5uZXQiLCJub3JkZXN0ZS1pZGMuc2F2ZWluY2xvdWQubmV0Iiwiai5zY2FsZWZvcmNlLm5ldCIsInNkc2Nsb3VkLnBsIiwidW5pY2xvdWQucGwiLCJtaXJjbG91ZC5ydSIsImVuc2NhbGVkLnNn'@;
put 'IiwiamVsZS5zaXRlIiwiamVsYXN0aWMudGVhbSIsIm9yYW5nZWNsb3VkLnRuIiwiai5sYXllcnNoaWZ0LmNvLnVrIiwicGh4LmVuc2NhbGVkLnVzIiwibWlyY2xvdWQudXMiLCJteWppbm8ucnUiLCIqLmhvc3RpbmcubXlqaW5vLnJ1IiwiKi5sYW5kaW5nLm15amluby5ydSIsIiouc3BlY3Ry'@;
put 'dW0ubXlqaW5vLnJ1IiwiKi52cHMubXlqaW5vLnJ1Iiwiam90ZWx1bHUuY2xvdWQiLCJ3ZWJhZG9yc2l0ZS5jb20iLCJqb3V3d2ViLnNpdGUiLCIqLmNucy5qb3llbnQuY29tIiwiKi50cml0b24uem9uZSIsImpzLm9yZyIsImthYXMuZ2ciLCJraHBsYXkubmwiLCJrYXBzaS5maSIsImV6cHJv'@;
put 'eHkua3VsZXV2ZW4uYmUiLCJrdWxldXZlbi5jbG91ZCIsImtleW1hY2hpbmUuZGUiLCJraW5naG9zdC5uZXQiLCJ1bmk1Lm5ldCIsImtuaWdodHBvaW50LnN5c3RlbXMiLCJrb29iaW4uZXZlbnRzIiwid2VidGhpbmdzLmlvIiwia3JlbGxpYW4ubmV0Iiwib3lhLnRvIiwiZ2l0LXJlcG9zLmRl'@;
put 'IiwibGN1YmUtc2VydmVyLmRlIiwic3ZuLXJlcG9zLmRlIiwibGVhZHBhZ2VzLmNvIiwibHBhZ2VzLmNvIiwibHB1c2VyY29udGVudC5jb20iLCJsZWx1eC5zaXRlIiwibGlicDJwLmRpcmVjdCIsInJ1bmNvbnRhaW5lcnMuZGV2IiwiY28uYnVzaW5lc3MiLCJjby5lZHVjYXRpb24iLCJjby5l'@;
put 'dmVudHMiLCJjby5maW5hbmNpYWwiLCJjby5uZXR3b3JrIiwiY28ucGxhY2UiLCJjby50ZWNobm9sb2d5IiwibGlua3lhcmQtY2xvdWQuY2giLCJsaW5reWFyZC5jbG91ZCIsIm1lbWJlcnMubGlub2RlLmNvbSIsIioubm9kZWJhbGFuY2VyLmxpbm9kZS5jb20iLCIqLmxpbm9kZW9iamVjdHMu'@;
put 'Y29tIiwiaXAubGlub2RldXNlcmNvbnRlbnQuY29tIiwid2UuYnMiLCJmaWxlZ2Vhci1zZy5tZSIsImdnZmYubmV0IiwiKi51c2VyLmxvY2FsY2VydC5kZXYiLCJsb2R6LnBsIiwicGFiaWFuaWNlLnBsIiwicGxvY2sucGwiLCJzaWVyYWR6LnBsIiwic2tpZXJuaWV3aWNlLnBsIiwiemdpZXJ6'@;
put 'LnBsIiwibG9naW5saW5lLmFwcCIsImxvZ2lubGluZS5kZXYiLCJsb2dpbmxpbmUuaW8iLCJsb2dpbmxpbmUuc2VydmljZXMiLCJsb2dpbmxpbmUuc2l0ZSIsImxvaG11cy5tZSIsInNlcnZlcnMucnVuIiwia3Jhc25pay5wbCIsImxlY3puYS5wbCIsImx1YmFydG93LnBsIiwibHVibGluLnBs'@;
put 'IiwicG9uaWF0b3dhLnBsIiwic3dpZG5pay5wbCIsImdsdWcub3JnLnVrIiwibHVnLm9yZy51ayIsImx1Z3Mub3JnLnVrIiwiYmFyc3kuYmciLCJiYXJzeS5jbHViIiwiYmFyc3ljZW50ZXIuY29tIiwiYmFyc3lvbmxpbmUuY29tIiwiYmFyc3kuZGUiLCJiYXJzeS5kZXYiLCJiYXJzeS5ldSIs'@;
put 'ImJhcnN5LmdyIiwiYmFyc3kuaW4iLCJiYXJzeS5pbmZvIiwiYmFyc3kuaW8iLCJiYXJzeS5tZSIsImJhcnN5Lm1lbnUiLCJiYXJzeW9ubGluZS5tZW51IiwiYmFyc3kubW9iaSIsImJhcnN5Lm5ldCIsImJhcnN5Lm9ubGluZSIsImJhcnN5Lm9yZyIsImJhcnN5LnBybyIsImJhcnN5LnB1YiIs'@;
put 'ImJhcnN5LnJvIiwiYmFyc3kucnMiLCJiYXJzeS5zaG9wIiwiYmFyc3lvbmxpbmUuc2hvcCIsImJhcnN5LnNpdGUiLCJiYXJzeS5zdG9yZSIsImJhcnN5LnN1cHBvcnQiLCJiYXJzeS51ayIsImJhcnN5LmNvLnVrIiwiYmFyc3lvbmxpbmUuY28udWsiLCIqLm1hZ2VudG9zaXRlLmNsb3VkIiwi'@;
put 'aGIuY2xkbWFpbC5ydSIsIm1hdGxhYi5jbG91ZCIsIm1vZGVsc2NhcGUuY29tIiwibXdjbG91ZG5vbnByb2QuY29tIiwicG9seXNwYWNlLmNvbSIsIm1heWZpcnN0LmluZm8iLCJtYXlmaXJzdC5vcmciLCJtYXplcGxheS5jb20iLCJtY2Rpci5tZSIsIm1jZGlyLnJ1IiwidnBzLm1jZGlyLnJ1'@;
put 'IiwibWNwcmUucnUiLCJtZWRpYXRlY2guYnkiLCJtZWRpYXRlY2guZGV2IiwiaHJhLmhlYWx0aCIsIm1lZHVzYWpzLmFwcCIsIm1pbmlzZXJ2ZXIuY29tIiwibWVtc2V0Lm5ldCIsIm1lc3NlcmxpLmFwcCIsImF0bWV0YS5jb20iLCJhcHBzLmZic2J4LmNvbSIsIiouY2xvdWQubWV0YWNlbnRy'@;
put 'dW0uY3oiLCJjdXN0b20ubWV0YWNlbnRydW0uY3oiLCJmbHQuY2xvdWQubXVuaS5jeiIsInVzci5jbG91ZC5tdW5pLmN6IiwibWV0ZW9yYXBwLmNvbSIsImV1Lm1ldGVvcmFwcC5jb20iLCJjby5wbCIsIiouYXp1cmVjb250YWluZXIuaW8iLCJhenVyZS1hcGkubmV0IiwiYXp1cmUtbW9iaWxl'@;
put 'Lm5ldCIsImF6dXJlZWRnZS5uZXQiLCJhenVyZWZkLm5ldCIsImF6dXJlc3RhdGljYXBwcy5uZXQiLCIxLmF6dXJlc3RhdGljYXBwcy5uZXQiLCIyLmF6dXJlc3RhdGljYXBwcy5uZXQiLCIzLmF6dXJlc3RhdGljYXBwcy5uZXQiLCI0LmF6dXJlc3RhdGljYXBwcy5uZXQiLCI1LmF6dXJlc3Rh'@;
put 'dGljYXBwcy5uZXQiLCI2LmF6dXJlc3RhdGljYXBwcy5uZXQiLCI3LmF6dXJlc3RhdGljYXBwcy5uZXQiLCJjZW50cmFsdXMuYXp1cmVzdGF0aWNhcHBzLm5ldCIsImVhc3Rhc2lhLmF6dXJlc3RhdGljYXBwcy5uZXQiLCJlYXN0dXMyLmF6dXJlc3RhdGljYXBwcy5uZXQiLCJ3ZXN0ZXVyb3Bl'@;
put 'LmF6dXJlc3RhdGljYXBwcy5uZXQiLCJ3ZXN0dXMyLmF6dXJlc3RhdGljYXBwcy5uZXQiLCJhenVyZXdlYnNpdGVzLm5ldCIsImNsb3VkYXBwLm5ldCIsInRyYWZmaWNtYW5hZ2VyLm5ldCIsImJsb2IuY29yZS53aW5kb3dzLm5ldCIsInNlcnZpY2VidXMud2luZG93cy5uZXQiLCJyb3V0aW5n'@;
put 'dGhlY2xvdWQuY29tIiwic24ubXluZXRuYW1lLm5ldCIsInJvdXRpbmd0aGVjbG91ZC5uZXQiLCJyb3V0aW5ndGhlY2xvdWQub3JnIiwiY3N4LmNjIiwibXlkYnNlcnZlci5jb20iLCJ3ZWJzcGFjZWNvbmZpZy5kZSIsIm1pdHR3YWxkLmluZm8iLCJtaXR0d2FsZHNlcnZlci5pbmZvIiwidHlw'@;
put 'bzNzZXJ2ZXIuaW5mbyIsInByb2plY3Quc3BhY2UiLCJtb2R4LmRldiIsImJtb2F0dGFjaG1lbnRzLm9yZyIsIm5ldC5ydSIsIm9yZy5ydSIsInBwLnJ1IiwiaG9zdGVkcGkuY29tIiwiY2FyYWNhbC5teXRoaWMtYmVhc3RzLmNvbSIsImN1c3RvbWVyLm15dGhpYy1iZWFzdHMuY29tIiwiZmVu'@;
put 'dGlnZXIubXl0aGljLWJlYXN0cy5jb20iLCJseW54Lm15dGhpYy1iZWFzdHMuY29tIiwib2NlbG90Lm15dGhpYy1iZWFzdHMuY29tIiwib25jaWxsYS5teXRoaWMtYmVhc3RzLmNvbSIsIm9uemEubXl0aGljLWJlYXN0cy5jb20iLCJzcGhpbngubXl0aGljLWJlYXN0cy5jb20iLCJ2cy5teXRo'@;
put 'aWMtYmVhc3RzLmNvbSIsIngubXl0aGljLWJlYXN0cy5jb20iLCJ5YWxpLm15dGhpYy1iZWFzdHMuY29tIiwiY3VzdC5yZXRyb3NudWIuY28udWsiLCJ1aS5uYWJ1LmNhc2EiLCJjbG91ZC5ub3NwYW1wcm94eS5jb20iLCJuZXRmeS5hcHAiLCJuZXRsaWZ5LmFwcCIsIjR1LmNvbSIsIm5mc2hv'@;
put 'c3QuY29tIiwiaXBmcy5uZnRzdG9yYWdlLmxpbmsiLCJuZ28udXMiLCJuZ3Jvay5hcHAiLCJuZ3Jvay1mcmVlLmFwcCIsIm5ncm9rLmRldiIsIm5ncm9rLWZyZWUuZGV2Iiwibmdyb2suaW8iLCJhcC5uZ3Jvay5pbyIsImF1Lm5ncm9rLmlvIiwiZXUubmdyb2suaW8iLCJpbi5uZ3Jvay5pbyIs'@;
put 'ImpwLm5ncm9rLmlvIiwic2Eubmdyb2suaW8iLCJ1cy5uZ3Jvay5pbyIsIm5ncm9rLnBpenphIiwibmdyb2sucHJvIiwidG9ydW4ucGwiLCJuaC1zZXJ2LmNvLnVrIiwibmltc2l0ZS51ayIsIm1tYWZhbi5iaXoiLCJteWZ0cC5iaXoiLCJuby1pcC5iaXoiLCJuby1pcC5jYSIsImZhbnRhc3ls'@;
put 'ZWFndWUuY2MiLCJnb3RkbnMuY2giLCIzdXRpbGl0aWVzLmNvbSIsImJsb2dzeXRlLmNvbSIsImNpc2NvZnJlYWsuY29tIiwiZGFtbnNlcnZlci5jb20iLCJkZG5za2luZy5jb20iLCJkaXRjaHlvdXJpcC5jb20iLCJkbnNpc2tpbmt5LmNvbSIsImR5bm5zLmNvbSIsImdlZWtnYWxheHkuY29t'@;
put 'IiwiaGVhbHRoLWNhcmVyZWZvcm0uY29tIiwiaG9tZXNlY3VyaXR5bWFjLmNvbSIsImhvbWVzZWN1cml0eXBjLmNvbSIsIm15YWN0aXZlZGlyZWN0b3J5LmNvbSIsIm15c2VjdXJpdHljYW1lcmEuY29tIiwibXl2bmMuY29tIiwibmV0LWZyZWFrcy5jb20iLCJvbnRoZXdpZmkuY29tIiwicG9p'@;
put 'bnQydGhpcy5jb20iLCJxdWlja3N5dGVzLmNvbSIsInNlY3VyaXR5dGFjdGljcy5jb20iLCJzZXJ2ZWJlZXIuY29tIiwic2VydmVjb3VudGVyc3RyaWtlLmNvbSIsInNlcnZlZXhjaGFuZ2UuY29tIiwic2VydmVmdHAuY29tIiwic2VydmVnYW1lLmNvbSIsInNlcnZlaGFsZmxpZmUuY29tIiwi'@;
put 'c2VydmVodHRwLmNvbSIsInNlcnZlaHVtb3VyLmNvbSIsInNlcnZlaXJjLmNvbSIsInNlcnZlbXAzLmNvbSIsInNlcnZlcDJwLmNvbSIsInNlcnZlcGljcy5jb20iLCJzZXJ2ZXF1YWtlLmNvbSIsInNlcnZlc2FyY2FzbS5jb20iLCJzdHVmZnRvcmVhZC5jb20iLCJ1bnVzdWFscGVyc29uLmNv'@;
put 'bSIsIndvcmtpc2JvcmluZy5jb20iLCJkdnJjYW0uaW5mbyIsImlsb3ZlY29sbGVnZS5pbmZvIiwibm8taXAuaW5mbyIsImJyYXNpbGlhLm1lIiwiZGRucy5tZSIsImRuc2Zvci5tZSIsImhvcHRvLm1lIiwibG9naW50by5tZSIsIm5vaXAubWUiLCJ3ZWJob3AubWUiLCJib3VuY2VtZS5uZXQi'@;
put 'LCJkZG5zLm5ldCIsImVhdGluZy1vcmdhbmljLm5ldCIsIm15ZGlzc2VudC5uZXQiLCJteWVmZmVjdC5uZXQiLCJteW1lZGlhcGMubmV0IiwibXlwc3gubmV0IiwibXlzZWN1cml0eWNhbWVyYS5uZXQiLCJuaGxmYW4ubmV0Iiwibm8taXAubmV0IiwicGdhZmFuLm5ldCIsInByaXZhdGl6ZWhl'@;
put 'YWx0aGluc3VyYW5jZS5uZXQiLCJyZWRpcmVjdG1lLm5ldCIsInNlcnZlYmxvZy5uZXQiLCJzZXJ2ZW1pbmVjcmFmdC5uZXQiLCJzeXRlcy5uZXQiLCJjYWJsZS1tb2RlbS5vcmciLCJjb2xsZWdlZmFuLm9yZyIsImNvdWNocG90YXRvZnJpZXMub3JnIiwiaG9wdG8ub3JnIiwibWxiZmFuLm9y'@;
put 'ZyIsIm15ZnRwLm9yZyIsIm15c2VjdXJpdHljYW1lcmEub3JnIiwibmZsZmFuLm9yZyIsIm5vLWlwLm9yZyIsInJlYWQtYm9va3Mub3JnIiwidWZjZmFuLm9yZyIsInphcHRvLm9yZyIsIm5vLWlwLmNvLnVrIiwiZ29sZmZhbi51cyIsIm5vaXAudXMiLCJwb2ludHRvLnVzIiwic3RhZ2Uubm9k'@;
put 'ZWFydC5pbyIsIiouZGV2ZWxvcGVyLmFwcCIsIm5vb3AuYXBwIiwiKi5ub3J0aGZsYW5rLmFwcCIsIiouYnVpbGQucnVuIiwiKi5jb2RlLnJ1biIsIiouZGF0YWJhc2UucnVuIiwiKi5taWdyYXRpb24ucnVuIiwibm90aWNlYWJsZS5uZXdzIiwibm90aW9uLnNpdGUiLCJkbnNraW5nLmNoIiwi'@;
put 'bXlwaS5jbyIsIm40dC5jbyIsIjAwMXd3dy5jb20iLCJteWlwaG9zdC5jb20iLCJmb3J1bXouaW5mbyIsInNvdW5kY2FzdC5tZSIsInRjcDQubWUiLCJkbnN1cC5uZXQiLCJoaWNhbS5uZXQiLCJub3ctZG5zLm5ldCIsIm93bmlwLm5ldCIsInZwbmRucy5uZXQiLCJkeW5zZXJ2Lm9yZyIsIm5v'@;
put 'dy1kbnMub3JnIiwieDQ0My5wdyIsIm5vdy1kbnMudG9wIiwibnRkbGwudG9wIiwiZnJlZWRkbnMudXMiLCJuc3VwZGF0ZS5pbmZvIiwibmVyZHBvbC5vdmgiLCJueWMubW4iLCJwcnZjeS5wYWdlIiwib2JsLm9uZyIsIm9ic2VydmFibGVocS5jbG91ZCIsInN0YXRpYy5vYnNlcnZhYmxldXNl'@;
put 'cmNvbnRlbnQuY29tIiwib21nLmxvbCIsImNsb3VkeWNsdXN0ZXIubmV0Iiwib21uaXdlLnNpdGUiLCIxMjN3ZWJzZWl0ZS5hdCIsIjEyM3dlYnNpdGUuYmUiLCJzaW1wbGVzaXRlLmNvbS5iciIsIjEyM3dlYnNpdGUuY2giLCJzaW1wbGVzaXRlLmNvbSIsIjEyM3dlYnNlaXRlLmRlIiwiMTIz'@;
put 'aGplbW1lc2lkZS5kayIsIjEyM21pd2ViLmVzIiwiMTIza290aXNpdnUuZmkiLCIxMjNzaXRld2ViLmZyIiwic2ltcGxlc2l0ZS5nciIsIjEyM2hvbWVwYWdlLml0IiwiMTIzd2Vic2l0ZS5sdSIsIjEyM3dlYnNpdGUubmwiLCIxMjNoamVtbWVzaWRlLm5vIiwic2VydmljZS5vbmUiLCJzaW1w'@;
put 'bGVzaXRlLnBsIiwiMTIzcGFnaW5hd2ViLnB0IiwiMTIzbWluc2lkYS5zZSIsImlzLWEtZnVsbHN0YWNrLmRldiIsImlzLWNvb2wuZGV2IiwiaXMtbm90LWEuZGV2IiwibG9jYWxwbGF5ZXIuZGV2IiwiaXMtbG9jYWwub3JnIiwib3BlbnNvY2lhbC5zaXRlIiwib3BlbmNyYWZ0Lmhvc3Rpbmci'@;
put 'LCIxNi1iLml0IiwiMzItYi5pdCIsIjY0LWIuaXQiLCJvcnNpdGVzLmNvbSIsIm9wZXJhdW5pdGUuY29tIiwiKi5jdXN0b21lci1vY2kuY29tIiwiKi5vY2kuY3VzdG9tZXItb2NpLmNvbSIsIioub2NwLmN1c3RvbWVyLW9jaS5jb20iLCIqLm9jcy5jdXN0b21lci1vY2kuY29tIiwiKi5vcmFj'@;
put 'bGVjbG91ZGFwcHMuY29tIiwiKi5vcmFjbGVnb3ZjbG91ZGFwcHMuY29tIiwiKi5vcmFjbGVnb3ZjbG91ZGFwcHMudWsiLCJ0ZWNoLm9yYW5nZSIsImNhbi5yZSIsImF1dGhnZWFyLXN0YWdpbmcuY29tIiwiYXV0aGdlYXJhcHBzLmNvbSIsInNreWdlYXJhcHAuY29tIiwib3V0c3lzdGVtc2Ns'@;
put 'b3VkLmNvbSIsIiouaG9zdGluZy5vdmgubmV0IiwiKi53ZWJwYWFzLm92aC5uZXQiLCJvd25wcm92aWRlci5jb20iLCJvd24ucG0iLCIqLm93by5jb2RlcyIsIm94LnJzIiwib3kubGMiLCJwZ2ZvZy5jb20iLCJwYWdleGwuY29tIiwiZ290cGFudGhlb24uY29tIiwicGFudGhlb25zaXRlLmlv'@;
put 'IiwiKi5wYXl3aGlybC5jb20iLCIqLnhtaXQuY28iLCJ4bWl0LmRldiIsIm1hZGV0aGlzLnNpdGUiLCJzcnYudXMiLCJnaC5zcnYudXMiLCJnbC5zcnYudXMiLCJsazMucnUiLCJteXBlcC5saW5rIiwicGVyc3BlY3RhLmNsb3VkIiwib24td2ViLmZyIiwiKi51cHN1bi5hcHAiLCJ1cHN1bmFw'@;
put 'cC5jb20iLCJlbnQucGxhdGZvcm0uc2giLCJldS5wbGF0Zm9ybS5zaCIsInVzLnBsYXRmb3JtLnNoIiwiKi5wbGF0Zm9ybXNoLnNpdGUiLCIqLnRzdC5zaXRlIiwicGxhdHRlci1hcHAuY29tIiwicGxhdHRlci1hcHAuZGV2IiwicGxhdHRlcnAudXMiLCJwbGV5LmdhbWVzIiwib25wb3J0ZXIu'@;
put 'cnVuIiwiY28uYm4iLCJwb3N0bWFuLWVjaG8uY29tIiwicHN0bW4uaW8iLCJtb2NrLnBzdG1uLmlvIiwiaHR0cGJpbi5vcmciLCJwcmVxdWFsaWZ5bWUudG9kYXkiLCJ4ZW4ucHJnbXIuY29tIiwicHJpdi5hdCIsInByb3RvbmV0LmlvIiwiY2hpcnVyZ2llbnMtZGVudGlzdGVzLWVuLWZyYW5j'@;
put 'ZS5mciIsImJ5ZW4uc2l0ZSIsInB1YnRscy5vcmciLCJweXRob25hbnl3aGVyZS5jb20iLCJldS5weXRob25hbnl3aGVyZS5jb20iLCJxYTIuY29tIiwicWN4LmlvIiwiKi5zeXMucWN4LmlvIiwibXlxbmFwY2xvdWQuY24iLCJhbHBoYS1teXFuYXBjbG91ZC5jb20iLCJkZXYtbXlxbmFwY2xv'@;
put 'dWQuY29tIiwibXljbG91ZG5hcy5jb20iLCJteW5hc2Nsb3VkLmNvbSIsIm15cW5hcGNsb3VkLmNvbSIsInFvdG8uaW8iLCJxdWFsaWZpb2FwcC5jb20iLCJsYWRlc2suY29tIiwicWJ1c2VyLmNvbSIsIioucXVpcGVsZW1lbnRzLmNvbSIsInZhcG9yLmNsb3VkIiwidmFwb3JjbG91ZC5pbyIs'@;
put 'InJhY2ttYXplLmNvbSIsInJhY2ttYXplLm5ldCIsImNsb3Vkc2l0ZS5idWlsZGVycyIsIm15cmFkd2ViLm5ldCIsInNlcnZlcm5hbWUudXMiLCJ3ZWIuaW4iLCJpbi5uZXQiLCJteXJkYnguaW8iLCJzaXRlLnJiLWhvc3RpbmcuaW8iLCIqLm9uLXJhbmNoZXIuY2xvdWQiLCIqLm9uLWszcy5p'@;
put 'byIsIioub24tcmlvLmlvIiwicmF2cGFnZS5jby5pbCIsInJlYWR0aGVkb2NzLWhvc3RlZC5jb20iLCJyZWFkdGhlZG9jcy5pbyIsInJoY2xvdWQuY29tIiwiaW5zdGFuY2VzLnNwYXduLmNjIiwib25yZW5kZXIuY29tIiwiYXBwLnJlbmRlci5jb20iLCJyZXBsaXQuYXBwIiwiaWQucmVwbGl0'@;
put 'LmFwcCIsImZpcmV3YWxsZWRyZXBsaXQuY28iLCJpZC5maXJld2FsbGVkcmVwbGl0LmNvIiwicmVwbC5jbyIsImlkLnJlcGwuY28iLCJyZXBsaXQuZGV2IiwiYXJjaGVyLnJlcGxpdC5kZXYiLCJib25lcy5yZXBsaXQuZGV2IiwiY2FuYXJ5LnJlcGxpdC5kZXYiLCJnbG9iYWwucmVwbGl0LmRl'@;
put 'diIsImhhY2tlci5yZXBsaXQuZGV2IiwiaWQucmVwbGl0LmRldiIsImphbmV3YXkucmVwbGl0LmRldiIsImtpbS5yZXBsaXQuZGV2Iiwia2lyYS5yZXBsaXQuZGV2Iiwia2lyay5yZXBsaXQuZGV2Iiwib2RvLnJlcGxpdC5kZXYiLCJwYXJpcy5yZXBsaXQuZGV2IiwicGljYXJkLnJlcGxpdC5k'@;
put 'ZXYiLCJwaWtlLnJlcGxpdC5kZXYiLCJwcmVyZWxlYXNlLnJlcGxpdC5kZXYiLCJyZWVkLnJlcGxpdC5kZXYiLCJyaWtlci5yZXBsaXQuZGV2Iiwic2lza28ucmVwbGl0LmRldiIsInNwb2NrLnJlcGxpdC5kZXYiLCJzdGFnaW5nLnJlcGxpdC5kZXYiLCJzdWx1LnJlcGxpdC5kZXYiLCJ0YXJw'@;
put 'aXQucmVwbGl0LmRldiIsInRlYW1zLnJlcGxpdC5kZXYiLCJ0dWNrZXIucmVwbGl0LmRldiIsIndlc2xleS5yZXBsaXQuZGV2Iiwid29yZi5yZXBsaXQuZGV2IiwicmVwbC5ydW4iLCJyZXNpbmRldmljZS5pbyIsImRldmljZXMucmVzaW5zdGFnaW5nLmlvIiwiaHpjLmlvIiwiYWRpbW8uY28u'@;
put 'dWsiLCJpdGNvdWxkYmV3b3Iuc2UiLCJhdXMuYmFza2V0YmFsbCIsIm56LmJhc2tldGJhbGwiLCJnaXQtcGFnZXMucml0LmVkdSIsInJvY2t5LnBhZ2UiLCJydWIuZGUiLCJydWhyLXVuaS1ib2NodW0uZGUiLCJpby5ub2MucnVoci11bmktYm9jaHVtLmRlIiwiXHUwNDMxXHUwNDM4XHUwNDM3'@;
put 'Llx1MDQ0MFx1MDQ0M1x1MDQ0MSIsIlx1MDQzYVx1MDQzZVx1MDQzYy5cdTA0NDBcdTA0NDNcdTA0NDEiLCJcdTA0M2FcdTA0NDBcdTA0NGJcdTA0M2MuXHUwNDQwXHUwNDQzXHUwNDQxIiwiXHUwNDNjXHUwNDM4XHUwNDQwLlx1MDQ0MFx1MDQ0M1x1MDQ0MSIsIlx1MDQzY1x1MDQ0MVx1MDQz'@;
put 'YS5cdTA0NDBcdTA0NDNcdTA0NDEiLCJcdTA0M2VcdTA0NDBcdTA0MzMuXHUwNDQwXHUwNDQzXHUwNDQxIiwiXHUwNDQxXHUwNDMwXHUwNDNjXHUwNDMwXHUwNDQwXHUwNDMwLlx1MDQ0MFx1MDQ0M1x1MDQ0MSIsIlx1MDQ0MVx1MDQzZVx1MDQ0N1x1MDQzOC5cdTA0NDBcdTA0NDNcdTA0NDEi'@;
put 'LCJcdTA0NDFcdTA0M2ZcdTA0MzEuXHUwNDQwXHUwNDQzXHUwNDQxIiwiXHUwNDRmLlx1MDQ0MFx1MDQ0M1x1MDQ0MSIsInJhcy5ydSIsIm55YXQuYXBwIiwiMTgwci5jb20iLCJkb2ppbi5jb20iLCJzYWt1cmF0YW4uY29tIiwic2FrdXJhd2ViLmNvbSIsIngwLmNvbSIsIjItZC5qcCIsImJv'@;
put 'bmEuanAiLCJjcmFwLmpwIiwiZGF5bmlnaHQuanAiLCJlZWsuanAiLCJmbG9wLmpwIiwiaGFsZm1vb24uanAiLCJqZWV6LmpwIiwibWF0cml4LmpwIiwibWltb3phLmpwIiwiaXZvcnkubmUuanAiLCJtYWlsLWJveC5uZS5qcCIsIm1pbnRzLm5lLmpwIiwibW9rdXJlbi5uZS5qcCIsIm9wYWwu'@;
put 'bmUuanAiLCJzYWt1cmEubmUuanAiLCJzdW1vbW8ubmUuanAiLCJ0b3Bhei5uZS5qcCIsIm5ldGdhbWVycy5qcCIsIm55YW50YS5qcCIsIm8wbzAuanAiLCJyZHkuanAiLCJyZ3IuanAiLCJydWxlei5qcCIsInMzLmlzazAxLnNha3VyYXN0b3JhZ2UuanAiLCJzMy5pc2swMi5zYWt1cmFzdG9y'@;
put 'YWdlLmpwIiwic2Fsb29uLmpwIiwic2Jsby5qcCIsInNrci5qcCIsInRhbmsuanAiLCJ1aC1vaC5qcCIsInVuZG8uanAiLCJycy53ZWJhY2NlbC5qcCIsInVzZXIud2ViYWNjZWwuanAiLCJ3ZWJzb3phaS5qcCIsInhpaS5qcCIsInNxdWFyZXMubmV0IiwianBuLm9yZyIsImtpcmFyYS5zdCIs'@;
put 'IngwLnRvIiwiZnJvbS50diIsInNha3VyYS50diIsIiouYnVpbGRlci5jb2RlLmNvbSIsIiouZGV2LWJ1aWxkZXIuY29kZS5jb20iLCIqLnN0Zy1idWlsZGVyLmNvZGUuY29tIiwiKi4wMDEudGVzdC5jb2RlLWJ1aWxkZXItc3RnLnBsYXRmb3JtLnNhbGVzZm9yY2UuY29tIiwiKi5kLmNybS5k'@;
put 'ZXYiLCIqLncuY3JtLmRldiIsIioud2EuY3JtLmRldiIsIioud2IuY3JtLmRldiIsIioud2MuY3JtLmRldiIsIioud2QuY3JtLmRldiIsIioud2UuY3JtLmRldiIsIioud2YuY3JtLmRldiIsInNhbmRjYXRzLmlvIiwibG9nb2lwLmNvbSIsImxvZ29pcC5kZSIsImZyLXBhci0xLmJhcmVtZXRh'@;
put 'bC5zY3cuY2xvdWQiLCJmci1wYXItMi5iYXJlbWV0YWwuc2N3LmNsb3VkIiwibmwtYW1zLTEuYmFyZW1ldGFsLnNjdy5jbG91ZCIsImNvY2twaXQuZnItcGFyLnNjdy5jbG91ZCIsImZuYy5mci1wYXIuc2N3LmNsb3VkIiwiZnVuY3Rpb25zLmZuYy5mci1wYXIuc2N3LmNsb3VkIiwiazhzLmZy'@;
put 'LXBhci5zY3cuY2xvdWQiLCJub2Rlcy5rOHMuZnItcGFyLnNjdy5jbG91ZCIsInMzLmZyLXBhci5zY3cuY2xvdWQiLCJzMy13ZWJzaXRlLmZyLXBhci5zY3cuY2xvdWQiLCJ3aG0uZnItcGFyLnNjdy5jbG91ZCIsInByaXYuaW5zdGFuY2VzLnNjdy5jbG91ZCIsInB1Yi5pbnN0YW5jZXMuc2N3'@;
put 'LmNsb3VkIiwiazhzLnNjdy5jbG91ZCIsImNvY2twaXQubmwtYW1zLnNjdy5jbG91ZCIsIms4cy5ubC1hbXMuc2N3LmNsb3VkIiwibm9kZXMuazhzLm5sLWFtcy5zY3cuY2xvdWQiLCJzMy5ubC1hbXMuc2N3LmNsb3VkIiwiczMtd2Vic2l0ZS5ubC1hbXMuc2N3LmNsb3VkIiwid2htLm5sLWFt'@;
put 'cy5zY3cuY2xvdWQiLCJjb2NrcGl0LnBsLXdhdy5zY3cuY2xvdWQiLCJrOHMucGwtd2F3LnNjdy5jbG91ZCIsIm5vZGVzLms4cy5wbC13YXcuc2N3LmNsb3VkIiwiczMucGwtd2F3LnNjdy5jbG91ZCIsInMzLXdlYnNpdGUucGwtd2F3LnNjdy5jbG91ZCIsInNjYWxlYm9vay5zY3cuY2xvdWQi'@;
put 'LCJzbWFydGxhYmVsaW5nLnNjdy5jbG91ZCIsImRlZGlib3guZnIiLCJzY2hva29rZWtzLm5ldCIsImdvdi5zY290Iiwic2VydmljZS5nb3Yuc2NvdCIsInNjcnlzZWMuY29tIiwiY2xpZW50LnNjcnlwdGVkLmlvIiwiZmlyZXdhbGwtZ2F0ZXdheS5jb20iLCJmaXJld2FsbC1nYXRld2F5LmRl'@;
put 'IiwibXktZ2F0ZXdheS5kZSIsIm15LXJvdXRlci5kZSIsInNwZG5zLmRlIiwic3BkbnMuZXUiLCJmaXJld2FsbC1nYXRld2F5Lm5ldCIsIm15LWZpcmV3YWxsLm9yZyIsIm15ZmlyZXdhbGwub3JnIiwic3BkbnMub3JnIiwic2VpZGF0Lm5ldCIsInNlbGxmeS5zdG9yZSIsIm1pbmlzaXRlLm1z'@;
put 'Iiwic2Vuc2VlcmluZy5uZXQiLCJzZXJ2ZWJvbHQuY2xvdWQiLCJiaXoudWEiLCJjby51YSIsInBwLnVhIiwiYXMuc2guY24iLCJzaGVlenkuZ2FtZXMiLCJzaGlmdGVkaXQuaW8iLCJteXNob3BibG9ja3MuY29tIiwibXlzaG9waWZ5LmNvbSIsInNob3BpdHNpdGUuY29tIiwic2hvcHdhcmUu'@;
put 'c2hvcCIsInNob3B3YXJlLnN0b3JlIiwibW8tc2llbWVucy5pbyIsIjFrYXBwLmNvbSIsImFwcGNoaXppLmNvbSIsImFwcGxpbnppLmNvbSIsInNpbmFhcHAuY29tIiwidmlwc2luYWFwcC5jb20iLCJzaXRlbGVhZi5uZXQiLCJzbWFsbC13ZWIub3JnIiwiYWVyb3BvcnQuZnIiLCJhdm9jYXQu'@;
put 'ZnIiLCJjaGFtYmFncmkuZnIiLCJjaGlydXJnaWVucy1kZW50aXN0ZXMuZnIiLCJleHBlcnRzLWNvbXB0YWJsZXMuZnIiLCJtZWRlY2luLmZyIiwibm90YWlyZXMuZnIiLCJwaGFybWFjaWVuLmZyIiwicG9ydC5mciIsInZldGVyaW5haXJlLmZyIiwidnA0Lm1lIiwiKi5zbm93Zmxha2UuYXBw'@;
put 'IiwiKi5wcml2YXRlbGluay5zbm93Zmxha2UuYXBwIiwic3RyZWFtbGl0LmFwcCIsInN0cmVhbWxpdGFwcC5jb20iLCJ0cnktc25vd3Bsb3cuY29tIiwibWFmZWxvLm5ldCIsInBsYXlzdGF0aW9uLWNsb3VkLmNvbSIsInNyaHQuc2l0ZSIsImFwcHMubGFpci5pbyIsIiouc3RvbG9zLmlvIiwi'@;
put 'c3BhY2VraXQuaW8iLCJpbmQubW9tIiwiY3VzdG9tZXIuc3BlZWRwYXJ0bmVyLmRlIiwibXlzcHJlYWRzaG9wLmF0IiwibXlzcHJlYWRzaG9wLmNvbS5hdSIsIm15c3ByZWFkc2hvcC5iZSIsIm15c3ByZWFkc2hvcC5jYSIsIm15c3ByZWFkc2hvcC5jaCIsIm15c3ByZWFkc2hvcC5jb20iLCJt'@;
put 'eXNwcmVhZHNob3AuZGUiLCJteXNwcmVhZHNob3AuZGsiLCJteXNwcmVhZHNob3AuZXMiLCJteXNwcmVhZHNob3AuZmkiLCJteXNwcmVhZHNob3AuZnIiLCJteXNwcmVhZHNob3AuaWUiLCJteXNwcmVhZHNob3AuaXQiLCJteXNwcmVhZHNob3AubmV0IiwibXlzcHJlYWRzaG9wLm5sIiwibXlz'@;
put 'cHJlYWRzaG9wLm5vIiwibXlzcHJlYWRzaG9wLnBsIiwibXlzcHJlYWRzaG9wLnNlIiwibXlzcHJlYWRzaG9wLmNvLnVrIiwidy1jb3JwLXN0YXRpY2JsaXR6LmNvbSIsInctY3JlZGVudGlhbGxlc3Mtc3RhdGljYmxpdHouY29tIiwidy1zdGF0aWNibGl0ei5jb20iLCJzdGFja2hlcm8tbmV0'@;
put 'd29yay5jb20iLCJydW5zLm9uc3RhY2tpdC5jbG91ZCIsInN0YWNraXQuZ2ciLCJzdGFja2l0LnJvY2tzIiwic3RhY2tpdC5ydW4iLCJzdGFja2l0LnpvbmUiLCJtdXNpY2lhbi5pbyIsIm5vdmVjb3JlLnNpdGUiLCJhcGkuc3RkbGliLmNvbSIsImZlZWRiYWNrLmFjIiwiZm9ybXMuYWMiLCJh'@;
put 'c3Nlc3NtZW50cy5jeCIsImNhbGN1bGF0b3JzLmN4IiwiZnVubmVscy5jeCIsInBheW5vdy5jeCIsInF1aXp6ZXMuY3giLCJyZXNlYXJjaGVkLmN4IiwidGVzdHMuY3giLCJzdXJ2ZXlzLnNvIiwic3RvcmViYXNlLnN0b3JlIiwic3RvcmlwcmVzcy5hcHAiLCJzdG9yai5mYXJtIiwic3RyYXBp'@;
put 'YXBwLmNvbSIsIm1lZGlhLnN0cmFwaWFwcC5jb20iLCJ2cHMtaG9zdC5uZXQiLCJhdGwuamVsYXN0aWMudnBzLWhvc3QubmV0IiwibmpzLmplbGFzdGljLnZwcy1ob3N0Lm5ldCIsInJpYy5qZWxhc3RpYy52cHMtaG9zdC5uZXQiLCJzdHJlYWstbGluay5jb20iLCJzdHJlYWtsaW5rcy5jb20i'@;
put 'LCJzdHJlYWt1c2VyY29udGVudC5jb20iLCJzb2Muc3JjZi5uZXQiLCJ1c2VyLnNyY2YubmV0IiwidXR3ZW50ZS5pbyIsInRlbXAtZG5zLmNvbSIsInN1cGFiYXNlLmNvIiwic3VwYWJhc2UuaW4iLCJzdXBhYmFzZS5uZXQiLCJzeW5jbG91ZC5pdCIsImRzY2xvdWQuYml6IiwiZGlyZWN0LnF1'@;
put 'aWNrY29ubmVjdC5jbiIsImRzbXluYXMuY29tIiwiZmFtaWx5ZHMuY29tIiwiZGlza3N0YXRpb24ubWUiLCJkc2Nsb3VkLm1lIiwiaTIzNC5tZSIsIm15ZHMubWUiLCJzeW5vbG9neS5tZSIsImRzY2xvdWQubW9iaSIsImRzbXluYXMubmV0IiwiZmFtaWx5ZHMubmV0IiwiZHNteW5hcy5vcmci'@;
put 'LCJmYW1pbHlkcy5vcmciLCJkaXJlY3QucXVpY2tjb25uZWN0LnRvIiwidnBucGx1cy50byIsIm15dGFiaXQuY29tIiwibXl0YWJpdC5jby5pbCIsInRhYml0b3JkZXIuY28uaWwiLCJ0YWlmdW4tZG5zLmRlIiwidHMubmV0IiwiKi5jLnRzLm5ldCIsImdkYS5wbCIsImdkYW5zay5wbCIsImdk'@;
put 'eW5pYS5wbCIsIm1lZC5wbCIsInNvcG90LnBsIiwidGF2ZXVzZXJjb250ZW50LmNvbSIsInAudGF3ay5lbWFpbCIsInAudGF3a3RvLmVtYWlsIiwic2l0ZS50Yi1ob3N0aW5nLmNvbSIsImVkdWdpdC5pbyIsInMzLnRlY2tpZHMub3JnIiwidGVsZWJpdC5hcHAiLCJ0ZWxlYml0LmlvIiwiKi50'@;
put 'ZWxlYml0Lnh5eiIsIiouZmlyZW5ldC5jaCIsIiouc3ZjLmZpcmVuZXQuY2giLCJyZXNlcnZkLmNvbSIsInRoaW5nZHVzdGRhdGEuY29tIiwiY3VzdC5kZXYudGhpbmdkdXN0LmlvIiwicmVzZXJ2ZC5kZXYudGhpbmdkdXN0LmlvIiwiY3VzdC5kaXNyZWMudGhpbmdkdXN0LmlvIiwicmVzZXJ2'@;
put 'ZC5kaXNyZWMudGhpbmdkdXN0LmlvIiwiY3VzdC5wcm9kLnRoaW5nZHVzdC5pbyIsImN1c3QudGVzdGluZy50aGluZ2R1c3QuaW8iLCJyZXNlcnZkLnRlc3RpbmcudGhpbmdkdXN0LmlvIiwidGlja2V0cy5pbyIsImFydm8ubmV0d29yayIsImF6aW11dGgubmV0d29yayIsInRsb24ubmV0d29y'@;
put 'ayIsInRvcnByb2plY3QubmV0IiwicGFnZXMudG9ycHJvamVjdC5uZXQiLCJ0b3dubmV3cy1zdGFnaW5nLmNvbSIsIjEyaHAuYXQiLCIyaXguYXQiLCI0bGltYS5hdCIsImxpbWEtY2l0eS5hdCIsIjEyaHAuY2giLCIyaXguY2giLCI0bGltYS5jaCIsImxpbWEtY2l0eS5jaCIsInRyYWZmaWNw'@;
put 'bGV4LmNsb3VkIiwiZGUuY29vbCIsIjEyaHAuZGUiLCIyaXguZGUiLCI0bGltYS5kZSIsImxpbWEtY2l0eS5kZSIsIjEzMzcucGljdHVyZXMiLCJjbGFuLnJpcCIsImxpbWEtY2l0eS5yb2NrcyIsIndlYnNwYWNlLnJvY2tzIiwibGltYS56b25lIiwiKi50cmFuc3VybC5iZSIsIioudHJhbnN1'@;
put 'cmwuZXUiLCJzaXRlLnRyYW5zaXAubWUiLCIqLnRyYW5zdXJsLm5sIiwidHV4ZmFtaWx5Lm9yZyIsImRkLWRucy5kZSIsImRyYXktZG5zLmRlIiwiZHJheWRucy5kZSIsImR5bi12cG4uZGUiLCJkeW52cG4uZGUiLCJtZWluLXZpZ29yLmRlIiwibXktdmlnb3IuZGUiLCJteS13YW4uZGUiLCJz'@;
put 'eW5vLWRzLmRlIiwic3lub2xvZ3ktZGlza3N0YXRpb24uZGUiLCJzeW5vbG9neS1kcy5kZSIsImRpc2tzdGF0aW9uLmV1IiwiZGlza3N0YXRpb24ub3JnIiwidHlwZWRyZWFtLmFwcCIsInByby50eXBlZm9ybS5jb20iLCIqLnViZXJzcGFjZS5kZSIsInViZXIuc3BhY2UiLCJoay5jb20iLCJp'@;
put 'bmMuaGsiLCJsdGQuaGsiLCJoay5vcmciLCJpdC5jb20iLCJ1bmlzb24tc2VydmljZXMuY2xvdWQiLCJ2aXJ0dWFsLXVzZXIuZGUiLCJ2aXJ0dWFsdXNlci5kZSIsIm5hbWUucG0iLCJzY2gudGYiLCJiaXoud2YiLCJzY2gud2YiLCJvcmcueXQiLCJycy5iYSIsImJpZWxza28ucGwiLCJ1cGxp'@;
put 'LmlvIiwidXJvd24uY2xvdWQiLCJkbnN1cGRhdGUuaW5mbyIsInVzLm9yZyIsInYudWEiLCJleHByZXNzLnZhbC5ydW4iLCJ3ZWIudmFsLnJ1biIsInZlcmNlbC5hcHAiLCJ2MC5idWlsZCIsInZlcmNlbC5kZXYiLCJ2dXNlcmNvbnRlbnQubmV0Iiwibm93LnNoIiwiMjAzOC5pbyIsInJvdXRl'@;
put 'ci5tYW5hZ2VtZW50Iiwidi1pbmZvLmluZm8iLCJ2b29ybG9wZXIuY2xvdWQiLCIqLnZ1bHRyb2JqZWN0cy5jb20iLCJ3YWZmbGVjZWxsLmNvbSIsIndlYmZsb3cuaW8iLCJ3ZWJmbG93dGVzdC5pbyIsIioud2ViaGFyZS5kZXYiLCJib29rb25saW5lLmFwcCIsImhvdGVsd2l0aGZsaWdodC5j'@;
put 'b20iLCJyZXNlcnZlLW9ubGluZS5jb20iLCJyZXNlcnZlLW9ubGluZS5uZXQiLCJjcHJhcGlkLmNvbSIsInBsZXNrbnMuY29tIiwid3AyLmhvc3QiLCJwZG5zLnBhZ2UiLCJwbGVzay5wYWdlIiwid3BzcXVhcmVkLnNpdGUiLCIqLndhZGwudG9wIiwicmVtb3Rld2QuY29tIiwiYm94LmNhIiwi'@;
put 'cGFnZXMud2lhcmR3ZWIuY29tIiwidG9vbGZvcmdlLm9yZyIsIndtY2xvdWQub3JnIiwid21mbGFicy5vcmciLCJ3ZGguYXBwIiwicGFuZWwuZ2ciLCJkYWVtb24ucGFuZWwuZ2ciLCJ3aXhzaXRlLmNvbSIsIndpeHN0dWRpby5jb20iLCJlZGl0b3J4LmlvIiwid2l4c3R1ZGlvLmlvIiwid2l4'@;
put 'LnJ1biIsIm1lc3N3aXRoZG5zLmNvbSIsIndvbHRsYWItZGVtby5jb20iLCJteWZvcnVtLmNvbW11bml0eSIsImNvbW11bml0eS1wcm8uZGUiLCJkaXNrdXNzaW9uc2JlcmVpY2guZGUiLCJjb21tdW5pdHktcHJvLm5ldCIsIm1laW5mb3J1bS5uZXQiLCJhZmZpbml0eWxvdHRlcnkub3JnLnVr'@;
put 'IiwicmFmZmxlZW50cnkub3JnLnVrIiwid2Vla2x5bG90dGVyeS5vcmcudWsiLCJ3cGVuZ2luZXBvd2VyZWQuY29tIiwianMud3BlbmdpbmVwb3dlcmVkLmNvbSIsImhhbGYuaG9zdCIsInhuYmF5LmNvbSIsInUyLnhuYmF5LmNvbSIsInUyLWxvY2FsLnhuYmF5LmNvbSIsImNpc3Ryb24ubmwi'@;
put 'LCJkZW1vbi5ubCIsInhzNGFsbC5zcGFjZSIsInlhbmRleGNsb3VkLm5ldCIsInN0b3JhZ2UueWFuZGV4Y2xvdWQubmV0Iiwid2Vic2l0ZS55YW5kZXhjbG91ZC5uZXQiLCJvZmZpY2lhbC5hY2FkZW15IiwieW9sYXNpdGUuY29tIiwieW9tYm8ubWUiLCJ5bmguZnIiLCJub2hvc3QubWUiLCJu'@;
put 'b2hvLnN0IiwiemEubmV0IiwiemEub3JnIiwiemFwLmNsb3VkIiwiemVhYnVyLmFwcCIsImJzcy5kZXNpZ24iLCJiYXNpY3NlcnZlci5pbyIsInZpcnR1YWxzZXJ2ZXIuaW8iLCJlbnRlcnByaXNlY2xvdWQubnUiXS5yZWR1Y2UoKFkscSk9Pntjb25zdCBlZT1xLnJlcGxhY2UoL14oXCpcLnxc'@;
put 'ISkvLCIiKSxKPXcudG9BU0NJSShlZSksbmU9cS5jaGFyQXQoMCk7aWYoWS5oYXMoSikpdGhyb3cgbmV3IEVycm9yKGBNdWx0aXBsZSBydWxlcyBmb3VuZCBmb3IgJHtxfSAoJHtKfSlgKTtyZXR1cm4gWS5zZXQoSix7cnVsZTpxLHN1ZmZpeDplZSxwdW55U3VmZml4Okosd2lsZGNhcmQ6Iioi'@;
put 'PT09bmUsZXhjZXB0aW9uOiIhIj09PW5lfSksWX0sbmV3IE1hcCksej17RE9NQUlOX1RPT19TSE9SVDoiRG9tYWluIG5hbWUgdG9vIHNob3J0LiIsRE9NQUlOX1RPT19MT05HOiJEb21haW4gbmFtZSB0b28gbG9uZy4gSXQgc2hvdWxkIGJlIG5vIG1vcmUgdGhhbiAyNTUgY2hhcnMuIixMQUJF'@;
put 'TF9TVEFSVFNfV0lUSF9EQVNIOiJEb21haW4gbmFtZSBsYWJlbCBjYW4gbm90IHN0YXJ0IHdpdGggYSBkYXNoLiIsTEFCRUxfRU5EU19XSVRIX0RBU0g6IkRvbWFpbiBuYW1lIGxhYmVsIGNhbiBub3QgZW5kIHdpdGggYSBkYXNoLiIsTEFCRUxfVE9PX0xPTkc6IkRvbWFpbiBuYW1lIGxhYmVs'@;
put 'IHNob3VsZCBiZSBhdCBtb3N0IDYzIGNoYXJzIGxvbmcuIixMQUJFTF9UT09fU0hPUlQ6IkRvbWFpbiBuYW1lIGxhYmVsIHNob3VsZCBiZSBhdCBsZWFzdCAxIGNoYXJhY3RlciBsb25nLiIsTEFCRUxfSU5WQUxJRF9DSEFSUzoiRG9tYWluIG5hbWUgbGFiZWwgY2FuIG9ubHkgY29udGFpbiBh'@;
put 'bHBoYW51bWVyaWMgY2hhcmFjdGVycyBvciBkYXNoZXMuIn0sTD1ZPT57aWYoInN0cmluZyIhPXR5cGVvZiBZKXRocm93IG5ldyBUeXBlRXJyb3IoIkRvbWFpbiBuYW1lIG11c3QgYmUgYSBzdHJpbmcuIik7bGV0IHE9WS5zbGljZSgwKS50b0xvd2VyQ2FzZSgpOyIuIj09PXEuY2hhckF0KHEu'@;
put 'bGVuZ3RoLTEpJiYocT1xLnNsaWNlKDAscS5sZW5ndGgtMSkpO2NvbnN0IGVlPShZPT57Y29uc3QgcT13LnRvQVNDSUkoWSk7aWYocS5sZW5ndGg8MSlyZXR1cm4iRE9NQUlOX1RPT19TSE9SVCI7aWYocS5sZW5ndGg+MjU1KXJldHVybiJET01BSU5fVE9PX0xPTkciO2NvbnN0IGVlPXEuc3Bs'@;
put 'aXQoIi4iKTtsZXQgSjtmb3IobGV0IG5lPTA7bmU8ZWUubGVuZ3RoOysrbmUpe2lmKEo9ZWVbbmVdLCFKLmxlbmd0aClyZXR1cm4iTEFCRUxfVE9PX1NIT1JUIjtpZihKLmxlbmd0aD42MylyZXR1cm4iTEFCRUxfVE9PX0xPTkciO2lmKCItIj09PUouY2hhckF0KDApKXJldHVybiJMQUJFTF9T'@;
put 'VEFSVFNfV0lUSF9EQVNIIjtpZigiLSI9PT1KLmNoYXJBdChKLmxlbmd0aC0xKSlyZXR1cm4iTEFCRUxfRU5EU19XSVRIX0RBU0giO2lmKCEvXlthLXowLTlcLV9dKyQvLnRlc3QoSikpcmV0dXJuIkxBQkVMX0lOVkFMSURfQ0hBUlMifX0pKHEpO2lmKGVlKXJldHVybntpbnB1dDpZLGVycm9y'@;
put 'OnttZXNzYWdlOnpbZWVdLGNvZGU6ZWV9fTtjb25zdCBKPXtpbnB1dDpZLHRsZDpudWxsLHNsZDpudWxsLGRvbWFpbjpudWxsLHN1YmRvbWFpbjpudWxsLGxpc3RlZDohMX0sbmU9cS5zcGxpdCgiLiIpO2lmKCJsb2NhbCI9PT1uZVtuZS5sZW5ndGgtMV0pcmV0dXJuIEo7Y29uc3QgaWU9KCk9'@;
put 'PigveG4tLS8udGVzdChxKSYmKEouZG9tYWluJiYoSi5kb21haW49dy50b0FTQ0lJKEouZG9tYWluKSksSi5zdWJkb21haW4mJihKLnN1YmRvbWFpbj13LnRvQVNDSUkoSi5zdWJkb21haW4pKSksSiksbGU9KFk9Pntjb25zdCBxPXcudG9BU0NJSShZKS5zcGxpdCgiLiIpO2ZvcihsZXQgZWU9'@;
put 'MDtlZTxxLmxlbmd0aDtlZSsrKXtjb25zdCBKPXEuc2xpY2UoZWUpLmpvaW4oIi4iKSxuZT1GLmdldChKKTtpZihuZSlyZXR1cm4gbmV9cmV0dXJuIG51bGx9KShxKTtpZighbGUpcmV0dXJuIG5lLmxlbmd0aDwyP0o6KEoudGxkPW5lLnBvcCgpLEouc2xkPW5lLnBvcCgpLEouZG9tYWluPVtK'@;
put 'LnNsZCxKLnRsZF0uam9pbigiLiIpLG5lLmxlbmd0aCYmKEouc3ViZG9tYWluPW5lLnBvcCgpKSxpZSgpKTtKLmxpc3RlZD0hMDtjb25zdCBtZT1sZS5zdWZmaXguc3BsaXQoIi4iKSxfZT1uZS5zbGljZSgwLG5lLmxlbmd0aC1tZS5sZW5ndGgpO3JldHVybiBsZS5leGNlcHRpb24mJl9lLnB1'@;
put 'c2gobWUuc2hpZnQoKSksSi50bGQ9bWUuam9pbigiLiIpLCFfZS5sZW5ndGh8fChsZS53aWxkY2FyZCYmKG1lLnVuc2hpZnQoX2UucG9wKCkpLEoudGxkPW1lLmpvaW4oIi4iKSksIV9lLmxlbmd0aCl8fChKLnNsZD1fZS5wb3AoKSxKLmRvbWFpbj1bSi5zbGQsSi50bGRdLmpvaW4oIi4iKSxf'@;
put 'ZS5sZW5ndGgmJihKLnN1YmRvbWFpbj1fZS5qb2luKCIuIikpKSxpZSgpfSxLPVk9PlkmJkwoWSkuZG9tYWlufHxudWxsLFU9WT0+e2NvbnN0IHE9TChZKTtyZXR1cm4hKCFxLmRvbWFpbnx8IXEubGlzdGVkKX07WC5kZWZhdWx0PXtwYXJzZTpMLGdldDpLLGlzVmFsaWQ6VX0sWC5lcnJvckNv'@;
put 'ZGVzPXosWC5nZXQ9SyxYLmlzVmFsaWQ9VSxYLnBhcnNlPUx9LDQ5NDY6dWU9PnsidXNlIHN0cmljdCI7dWUuZXhwb3J0cz1KU09OLnBhcnNlKCd7ImFlcy0xMjgtZWNiIjp7ImNpcGhlciI6IkFFUyIsImtleSI6MTI4LCJpdiI6MCwibW9kZSI6IkVDQiIsInR5cGUiOiJibG9jayJ9LCJhZXMt'@;
put 'MTkyLWVjYiI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjE5MiwiaXYiOjAsIm1vZGUiOiJFQ0IiLCJ0eXBlIjoiYmxvY2sifSwiYWVzLTI1Ni1lY2IiOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoyNTYsIml2IjowLCJtb2RlIjoiRUNCIiwidHlwZSI6ImJsb2NrIn0sImFlcy0xMjgtY2JjIjp7ImNp'@;
put 'cGhlciI6IkFFUyIsImtleSI6MTI4LCJpdiI6MTYsIm1vZGUiOiJDQkMiLCJ0eXBlIjoiYmxvY2sifSwiYWVzLTE5Mi1jYmMiOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoxOTIsIml2IjoxNiwibW9kZSI6IkNCQyIsInR5cGUiOiJibG9jayJ9LCJhZXMtMjU2LWNiYyI6eyJjaXBoZXIiOiJBRVMi'@;
put 'LCJrZXkiOjI1NiwiaXYiOjE2LCJtb2RlIjoiQ0JDIiwidHlwZSI6ImJsb2NrIn0sImFlczEyOCI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjEyOCwiaXYiOjE2LCJtb2RlIjoiQ0JDIiwidHlwZSI6ImJsb2NrIn0sImFlczE5MiI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjE5MiwiaXYiOjE2LCJt'@;
put 'b2RlIjoiQ0JDIiwidHlwZSI6ImJsb2NrIn0sImFlczI1NiI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjI1NiwiaXYiOjE2LCJtb2RlIjoiQ0JDIiwidHlwZSI6ImJsb2NrIn0sImFlcy0xMjgtY2ZiIjp7ImNpcGhlciI6IkFFUyIsImtleSI6MTI4LCJpdiI6MTYsIm1vZGUiOiJDRkIiLCJ0eXBl'@;
put 'Ijoic3RyZWFtIn0sImFlcy0xOTItY2ZiIjp7ImNpcGhlciI6IkFFUyIsImtleSI6MTkyLCJpdiI6MTYsIm1vZGUiOiJDRkIiLCJ0eXBlIjoic3RyZWFtIn0sImFlcy0yNTYtY2ZiIjp7ImNpcGhlciI6IkFFUyIsImtleSI6MjU2LCJpdiI6MTYsIm1vZGUiOiJDRkIiLCJ0eXBlIjoic3RyZWFt'@;
put 'In0sImFlcy0xMjgtY2ZiOCI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjEyOCwiaXYiOjE2LCJtb2RlIjoiQ0ZCOCIsInR5cGUiOiJzdHJlYW0ifSwiYWVzLTE5Mi1jZmI4Ijp7ImNpcGhlciI6IkFFUyIsImtleSI6MTkyLCJpdiI6MTYsIm1vZGUiOiJDRkI4IiwidHlwZSI6InN0cmVhbSJ9LCJh'@;
put 'ZXMtMjU2LWNmYjgiOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoyNTYsIml2IjoxNiwibW9kZSI6IkNGQjgiLCJ0eXBlIjoic3RyZWFtIn0sImFlcy0xMjgtY2ZiMSI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjEyOCwiaXYiOjE2LCJtb2RlIjoiQ0ZCMSIsInR5cGUiOiJzdHJlYW0ifSwiYWVzLTE5'@;
put 'Mi1jZmIxIjp7ImNpcGhlciI6IkFFUyIsImtleSI6MTkyLCJpdiI6MTYsIm1vZGUiOiJDRkIxIiwidHlwZSI6InN0cmVhbSJ9LCJhZXMtMjU2LWNmYjEiOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoyNTYsIml2IjoxNiwibW9kZSI6IkNGQjEiLCJ0eXBlIjoic3RyZWFtIn0sImFlcy0xMjgtb2Zi'@;
put 'Ijp7ImNpcGhlciI6IkFFUyIsImtleSI6MTI4LCJpdiI6MTYsIm1vZGUiOiJPRkIiLCJ0eXBlIjoic3RyZWFtIn0sImFlcy0xOTItb2ZiIjp7ImNpcGhlciI6IkFFUyIsImtleSI6MTkyLCJpdiI6MTYsIm1vZGUiOiJPRkIiLCJ0eXBlIjoic3RyZWFtIn0sImFlcy0yNTYtb2ZiIjp7ImNpcGhl'@;
put 'ciI6IkFFUyIsImtleSI6MjU2LCJpdiI6MTYsIm1vZGUiOiJPRkIiLCJ0eXBlIjoic3RyZWFtIn0sImFlcy0xMjgtY3RyIjp7ImNpcGhlciI6IkFFUyIsImtleSI6MTI4LCJpdiI6MTYsIm1vZGUiOiJDVFIiLCJ0eXBlIjoic3RyZWFtIn0sImFlcy0xOTItY3RyIjp7ImNpcGhlciI6IkFFUyIs'@;
put 'ImtleSI6MTkyLCJpdiI6MTYsIm1vZGUiOiJDVFIiLCJ0eXBlIjoic3RyZWFtIn0sImFlcy0yNTYtY3RyIjp7ImNpcGhlciI6IkFFUyIsImtleSI6MjU2LCJpdiI6MTYsIm1vZGUiOiJDVFIiLCJ0eXBlIjoic3RyZWFtIn0sImFlcy0xMjgtZ2NtIjp7ImNpcGhlciI6IkFFUyIsImtleSI6MTI4'@;
put 'LCJpdiI6MTIsIm1vZGUiOiJHQ00iLCJ0eXBlIjoiYXV0aCJ9LCJhZXMtMTkyLWdjbSI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjE5MiwiaXYiOjEyLCJtb2RlIjoiR0NNIiwidHlwZSI6ImF1dGgifSwiYWVzLTI1Ni1nY20iOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoyNTYsIml2IjoxMiwibW9k'@;
put 'ZSI6IkdDTSIsInR5cGUiOiJhdXRoIn19Jyl9LDUyMDc6dWU9PnsidXNlIHN0cmljdCI7dWUuZXhwb3J0cz1KU09OLnBhcnNlKCd7InNoYTIyNFdpdGhSU0FFbmNyeXB0aW9uIjp7InNpZ24iOiJyc2EiLCJoYXNoIjoic2hhMjI0IiwiaWQiOiIzMDJkMzAwZDA2MDk2MDg2NDgwMTY1MDMwNDAy'@;
put 'MDQwNTAwMDQxYyJ9LCJSU0EtU0hBMjI0Ijp7InNpZ24iOiJlY2RzYS9yc2EiLCJoYXNoIjoic2hhMjI0IiwiaWQiOiIzMDJkMzAwZDA2MDk2MDg2NDgwMTY1MDMwNDAyMDQwNTAwMDQxYyJ9LCJzaGEyNTZXaXRoUlNBRW5jcnlwdGlvbiI6eyJzaWduIjoicnNhIiwiaGFzaCI6InNoYTI1NiIs'@;
put 'ImlkIjoiMzAzMTMwMGQwNjA5NjA4NjQ4MDE2NTAzMDQwMjAxMDUwMDA0MjAifSwiUlNBLVNIQTI1NiI6eyJzaWduIjoiZWNkc2EvcnNhIiwiaGFzaCI6InNoYTI1NiIsImlkIjoiMzAzMTMwMGQwNjA5NjA4NjQ4MDE2NTAzMDQwMjAxMDUwMDA0MjAifSwic2hhMzg0V2l0aFJTQUVuY3J5cHRp'@;
put 'b24iOnsic2lnbiI6InJzYSIsImhhc2giOiJzaGEzODQiLCJpZCI6IjMwNDEzMDBkMDYwOTYwODY0ODAxNjUwMzA0MDIwMjA1MDAwNDMwIn0sIlJTQS1TSEEzODQiOnsic2lnbiI6ImVjZHNhL3JzYSIsImhhc2giOiJzaGEzODQiLCJpZCI6IjMwNDEzMDBkMDYwOTYwODY0ODAxNjUwMzA0MDIw'@;
put 'MjA1MDAwNDMwIn0sInNoYTUxMldpdGhSU0FFbmNyeXB0aW9uIjp7InNpZ24iOiJyc2EiLCJoYXNoIjoic2hhNTEyIiwiaWQiOiIzMDUxMzAwZDA2MDk2MDg2NDgwMTY1MDMwNDAyMDMwNTAwMDQ0MCJ9LCJSU0EtU0hBNTEyIjp7InNpZ24iOiJlY2RzYS9yc2EiLCJoYXNoIjoic2hhNTEyIiwi'@;
put 'aWQiOiIzMDUxMzAwZDA2MDk2MDg2NDgwMTY1MDMwNDAyMDMwNTAwMDQ0MCJ9LCJSU0EtU0hBMSI6eyJzaWduIjoicnNhIiwiaGFzaCI6InNoYTEiLCJpZCI6IjMwMjEzMDA5MDYwNTJiMGUwMzAyMWEwNTAwMDQxNCJ9LCJlY2RzYS13aXRoLVNIQTEiOnsic2lnbiI6ImVjZHNhIiwiaGFzaCI6'@;
put 'InNoYTEiLCJpZCI6IiJ9LCJzaGEyNTYiOnsic2lnbiI6ImVjZHNhIiwiaGFzaCI6InNoYTI1NiIsImlkIjoiIn0sInNoYTIyNCI6eyJzaWduIjoiZWNkc2EiLCJoYXNoIjoic2hhMjI0IiwiaWQiOiIifSwic2hhMzg0Ijp7InNpZ24iOiJlY2RzYSIsImhhc2giOiJzaGEzODQiLCJpZCI6IiJ9'@;
put 'LCJzaGE1MTIiOnsic2lnbiI6ImVjZHNhIiwiaGFzaCI6InNoYTUxMiIsImlkIjoiIn0sIkRTQS1TSEEiOnsic2lnbiI6ImRzYSIsImhhc2giOiJzaGExIiwiaWQiOiIifSwiRFNBLVNIQTEiOnsic2lnbiI6ImRzYSIsImhhc2giOiJzaGExIiwiaWQiOiIifSwiRFNBIjp7InNpZ24iOiJkc2Ei'@;
put 'LCJoYXNoIjoic2hhMSIsImlkIjoiIn0sIkRTQS1XSVRILVNIQTIyNCI6eyJzaWduIjoiZHNhIiwiaGFzaCI6InNoYTIyNCIsImlkIjoiIn0sIkRTQS1TSEEyMjQiOnsic2lnbiI6ImRzYSIsImhhc2giOiJzaGEyMjQiLCJpZCI6IiJ9LCJEU0EtV0lUSC1TSEEyNTYiOnsic2lnbiI6ImRzYSIs'@;
put 'Imhhc2giOiJzaGEyNTYiLCJpZCI6IiJ9LCJEU0EtU0hBMjU2Ijp7InNpZ24iOiJkc2EiLCJoYXNoIjoic2hhMjU2IiwiaWQiOiIifSwiRFNBLVdJVEgtU0hBMzg0Ijp7InNpZ24iOiJkc2EiLCJoYXNoIjoic2hhMzg0IiwiaWQiOiIifSwiRFNBLVNIQTM4NCI6eyJzaWduIjoiZHNhIiwiaGFz'@;
put 'aCI6InNoYTM4NCIsImlkIjoiIn0sIkRTQS1XSVRILVNIQTUxMiI6eyJzaWduIjoiZHNhIiwiaGFzaCI6InNoYTUxMiIsImlkIjoiIn0sIkRTQS1TSEE1MTIiOnsic2lnbiI6ImRzYSIsImhhc2giOiJzaGE1MTIiLCJpZCI6IiJ9LCJEU0EtUklQRU1EMTYwIjp7InNpZ24iOiJkc2EiLCJoYXNo'@;
put 'Ijoicm1kMTYwIiwiaWQiOiIifSwicmlwZW1kMTYwV2l0aFJTQSI6eyJzaWduIjoicnNhIiwiaGFzaCI6InJtZDE2MCIsImlkIjoiMzAyMTMwMDkwNjA1MmIyNDAzMDIwMTA1MDAwNDE0In0sIlJTQS1SSVBFTUQxNjAiOnsic2lnbiI6InJzYSIsImhhc2giOiJybWQxNjAiLCJpZCI6IjMwMjEz'@;
put 'MDA5MDYwNTJiMjQwMzAyMDEwNTAwMDQxNCJ9LCJtZDVXaXRoUlNBRW5jcnlwdGlvbiI6eyJzaWduIjoicnNhIiwiaGFzaCI6Im1kNSIsImlkIjoiMzAyMDMwMGMwNjA4MmE4NjQ4ODZmNzBkMDIwNTA1MDAwNDEwIn0sIlJTQS1NRDUiOnsic2lnbiI6InJzYSIsImhhc2giOiJtZDUiLCJpZCI6'@;
put 'IjMwMjAzMDBjMDYwODJhODY0ODg2ZjcwZDAyMDUwNTAwMDQxMCJ9fScpfSwxMzA4OnVlPT57InVzZSBzdHJpY3QiO3VlLmV4cG9ydHM9SlNPTi5wYXJzZSgneyIxLjMuMTMyLjAuMTAiOiJzZWNwMjU2azEiLCIxLjMuMTMyLjAuMzMiOiJwMjI0IiwiMS4yLjg0MC4xMDA0NS4zLjEuMSI6InAx'@;
put 'OTIiLCIxLjIuODQwLjEwMDQ1LjMuMS43IjoicDI1NiIsIjEuMy4xMzIuMC4zNCI6InAzODQiLCIxLjMuMTMyLjAuMzUiOiJwNTIxIn0nKX0sMzIwODp1ZT0+eyJ1c2Ugc3RyaWN0Ijt1ZS5leHBvcnRzPUpTT04ucGFyc2UoJ3siT19SRE9OTFkiOjAsIk9fV1JPTkxZIjoxLCJPX1JEV1IiOjIs'@;
put 'IlNfSUZNVCI6NjE0NDAsIlNfSUZSRUciOjMyNzY4LCJTX0lGRElSIjoxNjM4NCwiU19JRkNIUiI6ODE5MiwiU19JRkJMSyI6MjQ1NzYsIlNfSUZJRk8iOjQwOTYsIlNfSUZMTksiOjQwOTYwLCJTX0lGU09DSyI6NDkxNTIsIk9fQ1JFQVQiOjUxMiwiT19FWENMIjoyMDQ4LCJPX05PQ1RUWSI6'@;
put 'MTMxMDcyLCJPX1RSVU5DIjoxMDI0LCJPX0FQUEVORCI6OCwiT19ESVJFQ1RPUlkiOjEwNDg1NzYsIk9fTk9GT0xMT1ciOjI1NiwiT19TWU5DIjoxMjgsIk9fU1lNTElOSyI6MjA5NzE1MiwiT19OT05CTE9DSyI6NCwiU19JUldYVSI6NDQ4LCJTX0lSVVNSIjoyNTYsIlNfSVdVU1IiOjEyOCwi'@;
put 'U19JWFVTUiI6NjQsIlNfSVJXWEciOjU2LCJTX0lSR1JQIjozMiwiU19JV0dSUCI6MTYsIlNfSVhHUlAiOjgsIlNfSVJXWE8iOjcsIlNfSVJPVEgiOjQsIlNfSVdPVEgiOjIsIlNfSVhPVEgiOjEsIkUyQklHIjo3LCJFQUNDRVMiOjEzLCJFQUREUklOVVNFIjo0OCwiRUFERFJOT1RBVkFJTCI6'@;
put 'NDksIkVBRk5PU1VQUE9SVCI6NDcsIkVBR0FJTiI6MzUsIkVBTFJFQURZIjozNywiRUJBREYiOjksIkVCQURNU0ciOjk0LCJFQlVTWSI6MTYsIkVDQU5DRUxFRCI6ODksIkVDSElMRCI6MTAsIkVDT05OQUJPUlRFRCI6NTMsIkVDT05OUkVGVVNFRCI6NjEsIkVDT05OUkVTRVQiOjU0LCJFREVB'@;
put 'RExLIjoxMSwiRURFU1RBRERSUkVRIjozOSwiRURPTSI6MzMsIkVEUVVPVCI6NjksIkVFWElTVCI6MTcsIkVGQVVMVCI6MTQsIkVGQklHIjoyNywiRUhPU1RVTlJFQUNIIjo2NSwiRUlEUk0iOjkwLCJFSUxTRVEiOjkyLCJFSU5QUk9HUkVTUyI6MzYsIkVJTlRSIjo0LCJFSU5WQUwiOjIyLCJF'@;
put 'SU8iOjUsIkVJU0NPTk4iOjU2LCJFSVNESVIiOjIxLCJFTE9PUCI6NjIsIkVNRklMRSI6MjQsIkVNTElOSyI6MzEsIkVNU0dTSVpFIjo0MCwiRU1VTFRJSE9QIjo5NSwiRU5BTUVUT09MT05HIjo2MywiRU5FVERPV04iOjUwLCJFTkVUUkVTRVQiOjUyLCJFTkVUVU5SRUFDSCI6NTEsIkVORklM'@;
put 'RSI6MjMsIkVOT0JVRlMiOjU1LCJFTk9EQVRBIjo5NiwiRU5PREVWIjoxOSwiRU5PRU5UIjoyLCJFTk9FWEVDIjo4LCJFTk9MQ0siOjc3LCJFTk9MSU5LIjo5NywiRU5PTUVNIjoxMiwiRU5PTVNHIjo5MSwiRU5PUFJPVE9PUFQiOjQyLCJFTk9TUEMiOjI4LCJFTk9TUiI6OTgsIkVOT1NUUiI6'@;
put 'OTksIkVOT1NZUyI6NzgsIkVOT1RDT05OIjo1NywiRU5PVERJUiI6MjAsIkVOT1RFTVBUWSI6NjYsIkVOT1RTT0NLIjozOCwiRU5PVFNVUCI6NDUsIkVOT1RUWSI6MjUsIkVOWElPIjo2LCJFT1BOT1RTVVBQIjoxMDIsIkVPVkVSRkxPVyI6ODQsIkVQRVJNIjoxLCJFUElQRSI6MzIsIkVQUk9U'@;
put 'TyI6MTAwLCJFUFJPVE9OT1NVUFBPUlQiOjQzLCJFUFJPVE9UWVBFIjo0MSwiRVJBTkdFIjozNCwiRVJPRlMiOjMwLCJFU1BJUEUiOjI5LCJFU1JDSCI6MywiRVNUQUxFIjo3MCwiRVRJTUUiOjEwMSwiRVRJTUVET1VUIjo2MCwiRVRYVEJTWSI6MjYsIkVXT1VMREJMT0NLIjozNSwiRVhERVYi'@;
put 'OjE4LCJTSUdIVVAiOjEsIlNJR0lOVCI6MiwiU0lHUVVJVCI6MywiU0lHSUxMIjo0LCJTSUdUUkFQIjo1LCJTSUdBQlJUIjo2LCJTSUdJT1QiOjYsIlNJR0JVUyI6MTAsIlNJR0ZQRSI6OCwiU0lHS0lMTCI6OSwiU0lHVVNSMSI6MzAsIlNJR1NFR1YiOjExLCJTSUdVU1IyIjozMSwiU0lHUElQ'@;
put 'RSI6MTMsIlNJR0FMUk0iOjE0LCJTSUdURVJNIjoxNSwiU0lHQ0hMRCI6MjAsIlNJR0NPTlQiOjE5LCJTSUdTVE9QIjoxNywiU0lHVFNUUCI6MTgsIlNJR1RUSU4iOjIxLCJTSUdUVE9VIjoyMiwiU0lHVVJHIjoxNiwiU0lHWENQVSI6MjQsIlNJR1hGU1oiOjI1LCJTSUdWVEFMUk0iOjI2LCJT'@;
put 'SUdQUk9GIjoyNywiU0lHV0lOQ0giOjI4LCJTSUdJTyI6MjMsIlNJR1NZUyI6MTIsIlNTTF9PUF9BTEwiOjIxNDc0ODY3MTksIlNTTF9PUF9BTExPV19VTlNBRkVfTEVHQUNZX1JFTkVHT1RJQVRJT04iOjI2MjE0NCwiU1NMX09QX0NJUEhFUl9TRVJWRVJfUFJFRkVSRU5DRSI6NDE5NDMwNCwi'@;
put 'U1NMX09QX0NJU0NPX0FOWUNPTk5FQ1QiOjMyNzY4LCJTU0xfT1BfQ09PS0lFX0VYQ0hBTkdFIjo4MTkyLCJTU0xfT1BfQ1JZUFRPUFJPX1RMU0VYVF9CVUciOjIxNDc0ODM2NDgsIlNTTF9PUF9ET05UX0lOU0VSVF9FTVBUWV9GUkFHTUVOVFMiOjIwNDgsIlNTTF9PUF9FUEhFTUVSQUxfUlNB'@;
put 'IjowLCJTU0xfT1BfTEVHQUNZX1NFUlZFUl9DT05ORUNUIjo0LCJTU0xfT1BfTUlDUk9TT0ZUX0JJR19TU0xWM19CVUZGRVIiOjMyLCJTU0xfT1BfTUlDUk9TT0ZUX1NFU1NfSURfQlVHIjoxLCJTU0xfT1BfTVNJRV9TU0xWMl9SU0FfUEFERElORyI6MCwiU1NMX09QX05FVFNDQVBFX0NBX0RO'@;
put 'X0JVRyI6NTM2ODcwOTEyLCJTU0xfT1BfTkVUU0NBUEVfQ0hBTExFTkdFX0JVRyI6MiwiU1NMX09QX05FVFNDQVBFX0RFTU9fQ0lQSEVSX0NIQU5HRV9CVUciOjEwNzM3NDE4MjQsIlNTTF9PUF9ORVRTQ0FQRV9SRVVTRV9DSVBIRVJfQ0hBTkdFX0JVRyI6OCwiU1NMX09QX05PX0NPTVBSRVNT'@;
put 'SU9OIjoxMzEwNzIsIlNTTF9PUF9OT19RVUVSWV9NVFUiOjQwOTYsIlNTTF9PUF9OT19TRVNTSU9OX1JFU1VNUFRJT05fT05fUkVORUdPVElBVElPTiI6NjU1MzYsIlNTTF9PUF9OT19TU0x2MiI6MTY3NzcyMTYsIlNTTF9PUF9OT19TU0x2MyI6MzM1NTQ0MzIsIlNTTF9PUF9OT19USUNLRVQi'@;
put 'OjE2Mzg0LCJTU0xfT1BfTk9fVExTdjEiOjY3MTA4ODY0LCJTU0xfT1BfTk9fVExTdjFfMSI6MjY4NDM1NDU2LCJTU0xfT1BfTk9fVExTdjFfMiI6MTM0MjE3NzI4LCJTU0xfT1BfUEtDUzFfQ0hFQ0tfMSI6MCwiU1NMX09QX1BLQ1MxX0NIRUNLXzIiOjAsIlNTTF9PUF9TSU5HTEVfREhfVVNF'@;
put 'IjoxMDQ4NTc2LCJTU0xfT1BfU0lOR0xFX0VDREhfVVNFIjo1MjQyODgsIlNTTF9PUF9TU0xFQVlfMDgwX0NMSUVOVF9ESF9CVUciOjEyOCwiU1NMX09QX1NTTFJFRjJfUkVVU0VfQ0VSVF9UWVBFX0JVRyI6MCwiU1NMX09QX1RMU19CTE9DS19QQURESU5HX0JVRyI6NTEyLCJTU0xfT1BfVExT'@;
put 'X0Q1X0JVRyI6MjU2LCJTU0xfT1BfVExTX1JPTExCQUNLX0JVRyI6ODM4ODYwOCwiRU5HSU5FX01FVEhPRF9EU0EiOjIsIkVOR0lORV9NRVRIT0RfREgiOjQsIkVOR0lORV9NRVRIT0RfUkFORCI6OCwiRU5HSU5FX01FVEhPRF9FQ0RIIjoxNiwiRU5HSU5FX01FVEhPRF9FQ0RTQSI6MzIsIkVO'@;
put 'R0lORV9NRVRIT0RfQ0lQSEVSUyI6NjQsIkVOR0lORV9NRVRIT0RfRElHRVNUUyI6MTI4LCJFTkdJTkVfTUVUSE9EX1NUT1JFIjoyNTYsIkVOR0lORV9NRVRIT0RfUEtFWV9NRVRIUyI6NTEyLCJFTkdJTkVfTUVUSE9EX1BLRVlfQVNOMV9NRVRIUyI6MTAyNCwiRU5HSU5FX01FVEhPRF9BTEwi'@;
put 'OjY1NTM1LCJFTkdJTkVfTUVUSE9EX05PTkUiOjAsIkRIX0NIRUNLX1BfTk9UX1NBRkVfUFJJTUUiOjIsIkRIX0NIRUNLX1BfTk9UX1BSSU1FIjoxLCJESF9VTkFCTEVfVE9fQ0hFQ0tfR0VORVJBVE9SIjo0LCJESF9OT1RfU1VJVEFCTEVfR0VORVJBVE9SIjo4LCJOUE5fRU5BQkxFRCI6MSwi'@;
put 'UlNBX1BLQ1MxX1BBRERJTkciOjEsIlJTQV9TU0xWMjNfUEFERElORyI6MiwiUlNBX05PX1BBRERJTkciOjMsIlJTQV9QS0NTMV9PQUVQX1BBRERJTkciOjQsIlJTQV9YOTMxX1BBRERJTkciOjUsIlJTQV9QS0NTMV9QU1NfUEFERElORyI6NiwiUE9JTlRfQ09OVkVSU0lPTl9DT01QUkVTU0VE'@;
put 'IjoyLCJQT0lOVF9DT05WRVJTSU9OX1VOQ09NUFJFU1NFRCI6NCwiUE9JTlRfQ09OVkVSU0lPTl9IWUJSSUQiOjYsIkZfT0siOjAsIlJfT0siOjQsIldfT0siOjIsIlhfT0siOjEsIlVWX1VEUF9SRVVTRUFERFIiOjR9Jyl9LDk3OTk6dWU9PnsidXNlIHN0cmljdCI7dWUuZXhwb3J0cz1KU09O'@;
put 'LnBhcnNlKCd7Im1vZHAxIjp7ImdlbiI6IjAyIiwicHJpbWUiOiJmZmZmZmZmZmZmZmZmZmZmYzkwZmRhYTIyMTY4YzIzNGM0YzY2MjhiODBkYzFjZDEyOTAyNGUwODhhNjdjYzc0MDIwYmJlYTYzYjEzOWIyMjUxNGEwODc5OGUzNDA0ZGRlZjk1MTliM2NkM2E0MzFiMzAyYjBhNmRmMjVmMTQz'@;
put 'NzRmZTEzNTZkNmQ1MWMyNDVlNDg1YjU3NjYyNWU3ZWM2ZjQ0YzQyZTlhNjNhMzYyMGZmZmZmZmZmZmZmZmZmZmYifSwibW9kcDIiOnsiZ2VuIjoiMDIiLCJwcmltZSI6ImZmZmZmZmZmZmZmZmZmZmZjOTBmZGFhMjIxNjhjMjM0YzRjNjYyOGI4MGRjMWNkMTI5MDI0ZTA4OGE2N2NjNzQwMjBi'@;
put 'YmVhNjNiMTM5YjIyNTE0YTA4Nzk4ZTM0MDRkZGVmOTUxOWIzY2QzYTQzMWIzMDJiMGE2ZGYyNWYxNDM3NGZlMTM1NmQ2ZDUxYzI0NWU0ODViNTc2NjI1ZTdlYzZmNDRjNDJlOWE2MzdlZDZiMGJmZjVjYjZmNDA2YjdlZGVlMzg2YmZiNWE4OTlmYTVhZTlmMjQxMTdjNGIxZmU2NDkyODY2NTFl'@;
put 'Y2U2NTM4MWZmZmZmZmZmZmZmZmZmZmYifSwibW9kcDUiOnsiZ2VuIjoiMDIiLCJwcmltZSI6ImZmZmZmZmZmZmZmZmZmZmZjOTBmZGFhMjIxNjhjMjM0YzRjNjYyOGI4MGRjMWNkMTI5MDI0ZTA4OGE2N2NjNzQwMjBiYmVhNjNiMTM5YjIyNTE0YTA4Nzk4ZTM0MDRkZGVmOTUxOWIzY2QzYTQz'@;
put 'MWIzMDJiMGE2ZGYyNWYxNDM3NGZlMTM1NmQ2ZDUxYzI0NWU0ODViNTc2NjI1ZTdlYzZmNDRjNDJlOWE2MzdlZDZiMGJmZjVjYjZmNDA2YjdlZGVlMzg2YmZiNWE4OTlmYTVhZTlmMjQxMTdjNGIxZmU2NDkyODY2NTFlY2U0NWIzZGMyMDA3Y2I4YTE2M2JmMDU5OGRhNDgzNjFjNTVkMzlhNjkx'@;
put 'NjNmYThmZDI0Y2Y1ZjgzNjU1ZDIzZGNhM2FkOTYxYzYyZjM1NjIwODU1MmJiOWVkNTI5MDc3MDk2OTY2ZDY3MGMzNTRlNGFiYzk4MDRmMTc0NmMwOGNhMjM3MzI3ZmZmZmZmZmZmZmZmZmZmZiJ9LCJtb2RwMTQiOnsiZ2VuIjoiMDIiLCJwcmltZSI6ImZmZmZmZmZmZmZmZmZmZmZjOTBmZGFh'@;
put 'MjIxNjhjMjM0YzRjNjYyOGI4MGRjMWNkMTI5MDI0ZTA4OGE2N2NjNzQwMjBiYmVhNjNiMTM5YjIyNTE0YTA4Nzk4ZTM0MDRkZGVmOTUxOWIzY2QzYTQzMWIzMDJiMGE2ZGYyNWYxNDM3NGZlMTM1NmQ2ZDUxYzI0NWU0ODViNTc2NjI1ZTdlYzZmNDRjNDJlOWE2MzdlZDZiMGJmZjVjYjZmNDA2'@;
put 'YjdlZGVlMzg2YmZiNWE4OTlmYTVhZTlmMjQxMTdjNGIxZmU2NDkyODY2NTFlY2U0NWIzZGMyMDA3Y2I4YTE2M2JmMDU5OGRhNDgzNjFjNTVkMzlhNjkxNjNmYThmZDI0Y2Y1ZjgzNjU1ZDIzZGNhM2FkOTYxYzYyZjM1NjIwODU1MmJiOWVkNTI5MDc3MDk2OTY2ZDY3MGMzNTRlNGFiYzk4MDRm'@;
put 'MTc0NmMwOGNhMTgyMTdjMzI5MDVlNDYyZTM2Y2UzYmUzOWU3NzJjMTgwZTg2MDM5YjI3ODNhMmVjMDdhMjhmYjVjNTVkZjA2ZjRjNTJjOWRlMmJjYmY2OTU1ODE3MTgzOTk1NDk3Y2VhOTU2YWU1MTVkMjI2MTg5OGZhMDUxMDE1NzI4ZTVhOGFhY2FhNjhmZmZmZmZmZmZmZmZmZmZmIn0sIm1v'@;
put 'ZHAxNSI6eyJnZW4iOiIwMiIsInByaW1lIjoiZmZmZmZmZmZmZmZmZmZmZmM5MGZkYWEyMjE2OGMyMzRjNGM2NjI4YjgwZGMxY2QxMjkwMjRlMDg4YTY3Y2M3NDAyMGJiZWE2M2IxMzliMjI1MTRhMDg3OThlMzQwNGRkZWY5NTE5YjNjZDNhNDMxYjMwMmIwYTZkZjI1ZjE0Mzc0ZmUxMzU2ZDZk'@;
put 'NTFjMjQ1ZTQ4NWI1NzY2MjVlN2VjNmY0NGM0MmU5YTYzN2VkNmIwYmZmNWNiNmY0MDZiN2VkZWUzODZiZmI1YTg5OWZhNWFlOWYyNDExN2M0YjFmZTY0OTI4NjY1MWVjZTQ1YjNkYzIwMDdjYjhhMTYzYmYwNTk4ZGE0ODM2MWM1NWQzOWE2OTE2M2ZhOGZkMjRjZjVmODM2NTVkMjNkY2EzYWQ5'@;
put 'NjFjNjJmMzU2MjA4NTUyYmI5ZWQ1MjkwNzcwOTY5NjZkNjcwYzM1NGU0YWJjOTgwNGYxNzQ2YzA4Y2ExODIxN2MzMjkwNWU0NjJlMzZjZTNiZTM5ZTc3MmMxODBlODYwMzliMjc4M2EyZWMwN2EyOGZiNWM1NWRmMDZmNGM1MmM5ZGUyYmNiZjY5NTU4MTcxODM5OTU0OTdjZWE5NTZhZTUxNWQy'@;
put 'MjYxODk4ZmEwNTEwMTU3MjhlNWE4YWFhYzQyZGFkMzMxNzBkMDQ1MDdhMzNhODU1MjFhYmRmMWNiYTY0ZWNmYjg1MDQ1OGRiZWYwYThhZWE3MTU3NWQwNjBjN2RiMzk3MGY4NWE2ZTFlNGM3YWJmNWFlOGNkYjA5MzNkNzFlOGM5NGUwNGEyNTYxOWRjZWUzZDIyNjFhZDJlZTZiZjEyZmZhMDZk'@;
put 'OThhMDg2NGQ4NzYwMjczM2VjODZhNjQ1MjFmMmIxODE3N2IyMDBjYmJlMTE3NTc3YTYxNWQ2Yzc3MDk4OGMwYmFkOTQ2ZTIwOGUyNGZhMDc0ZTVhYjMxNDNkYjViZmNlMGZkMTA4ZTRiODJkMTIwYTkzYWQyY2FmZmZmZmZmZmZmZmZmZmZmIn0sIm1vZHAxNiI6eyJnZW4iOiIwMiIsInByaW1l'@;
put 'IjoiZmZmZmZmZmZmZmZmZmZmZmM5MGZkYWEyMjE2OGMyMzRjNGM2NjI4YjgwZGMxY2QxMjkwMjRlMDg4YTY3Y2M3NDAyMGJiZWE2M2IxMzliMjI1MTRhMDg3OThlMzQwNGRkZWY5NTE5YjNjZDNhNDMxYjMwMmIwYTZkZjI1ZjE0Mzc0ZmUxMzU2ZDZkNTFjMjQ1ZTQ4NWI1NzY2MjVlN2VjNmY0'@;
put 'NGM0MmU5YTYzN2VkNmIwYmZmNWNiNmY0MDZiN2VkZWUzODZiZmI1YTg5OWZhNWFlOWYyNDExN2M0YjFmZTY0OTI4NjY1MWVjZTQ1YjNkYzIwMDdjYjhhMTYzYmYwNTk4ZGE0ODM2MWM1NWQzOWE2OTE2M2ZhOGZkMjRjZjVmODM2NTVkMjNkY2EzYWQ5NjFjNjJmMzU2MjA4NTUyYmI5ZWQ1Mjkw'@;
put 'NzcwOTY5NjZkNjcwYzM1NGU0YWJjOTgwNGYxNzQ2YzA4Y2ExODIxN2MzMjkwNWU0NjJlMzZjZTNiZTM5ZTc3MmMxODBlODYwMzliMjc4M2EyZWMwN2EyOGZiNWM1NWRmMDZmNGM1MmM5ZGUyYmNiZjY5NTU4MTcxODM5OTU0OTdjZWE5NTZhZTUxNWQyMjYxODk4ZmEwNTEwMTU3MjhlNWE4YWFh'@;
put 'YzQyZGFkMzMxNzBkMDQ1MDdhMzNhODU1MjFhYmRmMWNiYTY0ZWNmYjg1MDQ1OGRiZWYwYThhZWE3MTU3NWQwNjBjN2RiMzk3MGY4NWE2ZTFlNGM3YWJmNWFlOGNkYjA5MzNkNzFlOGM5NGUwNGEyNTYxOWRjZWUzZDIyNjFhZDJlZTZiZjEyZmZhMDZkOThhMDg2NGQ4NzYwMjczM2VjODZhNjQ1'@;
put 'MjFmMmIxODE3N2IyMDBjYmJlMTE3NTc3YTYxNWQ2Yzc3MDk4OGMwYmFkOTQ2ZTIwOGUyNGZhMDc0ZTVhYjMxNDNkYjViZmNlMGZkMTA4ZTRiODJkMTIwYTkyMTA4MDExYTcyM2MxMmE3ODdlNmQ3ODg3MTlhMTBiZGJhNWIyNjk5YzMyNzE4NmFmNGUyM2MxYTk0NjgzNGI2MTUwYmRhMjU4M2U5'@;
put 'Y2EyYWQ0NGNlOGRiYmJjMmRiMDRkZThlZjkyZThlZmMxNDFmYmVjYWE2Mjg3YzU5NDc0ZTZiYzA1ZDk5YjI5NjRmYTA5MGMzYTIyMzNiYTE4NjUxNWJlN2VkMWY2MTI5NzBjZWUyZDdhZmI4MWJkZDc2MjE3MDQ4MWNkMDA2OTEyN2Q1YjA1YWE5OTNiNGVhOTg4ZDhmZGRjMTg2ZmZiN2RjOTBh'@;
put 'NmMwOGY0ZGY0MzVjOTM0MDYzMTk5ZmZmZmZmZmZmZmZmZmZmZiJ9LCJtb2RwMTciOnsiZ2VuIjoiMDIiLCJwcmltZSI6ImZmZmZmZmZmZmZmZmZmZmZjOTBmZGFhMjIxNjhjMjM0YzRjNjYyOGI4MGRjMWNkMTI5MDI0ZTA4OGE2N2NjNzQwMjBiYmVhNjNiMTM5YjIyNTE0YTA4Nzk4ZTM0MDRk'@;
put 'ZGVmOTUxOWIzY2QzYTQzMWIzMDJiMGE2ZGYyNWYxNDM3NGZlMTM1NmQ2ZDUxYzI0NWU0ODViNTc2NjI1ZTdlYzZmNDRjNDJlOWE2MzdlZDZiMGJmZjVjYjZmNDA2YjdlZGVlMzg2YmZiNWE4OTlmYTVhZTlmMjQxMTdjNGIxZmU2NDkyODY2NTFlY2U0NWIzZGMyMDA3Y2I4YTE2M2JmMDU5OGRh'@;
put 'NDgzNjFjNTVkMzlhNjkxNjNmYThmZDI0Y2Y1ZjgzNjU1ZDIzZGNhM2FkOTYxYzYyZjM1NjIwODU1MmJiOWVkNTI5MDc3MDk2OTY2ZDY3MGMzNTRlNGFiYzk4MDRmMTc0NmMwOGNhMTgyMTdjMzI5MDVlNDYyZTM2Y2UzYmUzOWU3NzJjMTgwZTg2MDM5YjI3ODNhMmVjMDdhMjhmYjVjNTVkZjA2'@;
put 'ZjRjNTJjOWRlMmJjYmY2OTU1ODE3MTgzOTk1NDk3Y2VhOTU2YWU1MTVkMjI2MTg5OGZhMDUxMDE1NzI4ZTVhOGFhYWM0MmRhZDMzMTcwZDA0NTA3YTMzYTg1NTIxYWJkZjFjYmE2NGVjZmI4NTA0NThkYmVmMGE4YWVhNzE1NzVkMDYwYzdkYjM5NzBmODVhNmUxZTRjN2FiZjVhZThjZGIwOTMz'@;
put 'ZDcxZThjOTRlMDRhMjU2MTlkY2VlM2QyMjYxYWQyZWU2YmYxMmZmYTA2ZDk4YTA4NjRkODc2MDI3MzNlYzg2YTY0NTIxZjJiMTgxNzdiMjAwY2JiZTExNzU3N2E2MTVkNmM3NzA5ODhjMGJhZDk0NmUyMDhlMjRmYTA3NGU1YWIzMTQzZGI1YmZjZTBmZDEwOGU0YjgyZDEyMGE5MjEwODAxMWE3'@;
put 'MjNjMTJhNzg3ZTZkNzg4NzE5YTEwYmRiYTViMjY5OWMzMjcxODZhZjRlMjNjMWE5NDY4MzRiNjE1MGJkYTI1ODNlOWNhMmFkNDRjZThkYmJiYzJkYjA0ZGU4ZWY5MmU4ZWZjMTQxZmJlY2FhNjI4N2M1OTQ3NGU2YmMwNWQ5OWIyOTY0ZmEwOTBjM2EyMjMzYmExODY1MTViZTdlZDFmNjEyOTcw'@;
put 'Y2VlMmQ3YWZiODFiZGQ3NjIxNzA0ODFjZDAwNjkxMjdkNWIwNWFhOTkzYjRlYTk4OGQ4ZmRkYzE4NmZmYjdkYzkwYTZjMDhmNGRmNDM1YzkzNDAyODQ5MjM2YzNmYWI0ZDI3YzcwMjZjMWQ0ZGNiMjYwMjY0NmRlYzk3NTFlNzYzZGJhMzdiZGY4ZmY5NDA2YWQ5ZTUzMGVlNWRiMzgyZjQxMzAw'@;
put 'MWFlYjA2YTUzZWQ5MDI3ZDgzMTE3OTcyN2IwODY1YTg5MThkYTNlZGJlYmNmOWIxNGVkNDRjZTZjYmFjZWQ0YmIxYmRiN2YxNDQ3ZTZjYzI1NGIzMzIwNTE1MTJiZDdhZjQyNmZiOGY0MDEzNzhjZDJiZjU5ODNjYTAxYzY0YjkyZWNmMDMyZWExNWQxNzIxZDAzZjQ4MmQ3Y2U2ZTc0ZmVmNmQ1'@;
put 'NWU3MDJmNDY5ODBjODJiNWE4NDAzMTkwMGIxYzllNTllN2M5N2ZiZWM3ZThmMzIzYTk3YTdlMzZjYzg4YmUwZjFkNDViN2ZmNTg1YWM1NGJkNDA3YjIyYjQxNTRhYWNjOGY2ZDdlYmY0OGUxZDgxNGNjNWVkMjBmODAzN2UwYTc5NzE1ZWVmMjliZTMyODA2YTFkNThiYjdjNWRhNzZmNTUwYWEz'@;
put 'ZDhhMWZiZmYwZWIxOWNjYjFhMzEzZDU1Y2RhNTZjOWVjMmVmMjk2MzIzODdmZThkNzZlM2MwNDY4MDQzZThmNjYzZjQ4NjBlZTEyYmYyZDViMGI3NDc0ZDZlNjk0ZjkxZTZkY2M0MDI0ZmZmZmZmZmZmZmZmZmZmZiJ9LCJtb2RwMTgiOnsiZ2VuIjoiMDIiLCJwcmltZSI6ImZmZmZmZmZmZmZm'@;
put 'ZmZmZmZjOTBmZGFhMjIxNjhjMjM0YzRjNjYyOGI4MGRjMWNkMTI5MDI0ZTA4OGE2N2NjNzQwMjBiYmVhNjNiMTM5YjIyNTE0YTA4Nzk4ZTM0MDRkZGVmOTUxOWIzY2QzYTQzMWIzMDJiMGE2ZGYyNWYxNDM3NGZlMTM1NmQ2ZDUxYzI0NWU0ODViNTc2NjI1ZTdlYzZmNDRjNDJlOWE2MzdlZDZi'@;
put 'MGJmZjVjYjZmNDA2YjdlZGVlMzg2YmZiNWE4OTlmYTVhZTlmMjQxMTdjNGIxZmU2NDkyODY2NTFlY2U0NWIzZGMyMDA3Y2I4YTE2M2JmMDU5OGRhNDgzNjFjNTVkMzlhNjkxNjNmYThmZDI0Y2Y1ZjgzNjU1ZDIzZGNhM2FkOTYxYzYyZjM1NjIwODU1MmJiOWVkNTI5MDc3MDk2OTY2ZDY3MGMz'@;
put 'NTRlNGFiYzk4MDRmMTc0NmMwOGNhMTgyMTdjMzI5MDVlNDYyZTM2Y2UzYmUzOWU3NzJjMTgwZTg2MDM5YjI3ODNhMmVjMDdhMjhmYjVjNTVkZjA2ZjRjNTJjOWRlMmJjYmY2OTU1ODE3MTgzOTk1NDk3Y2VhOTU2YWU1MTVkMjI2MTg5OGZhMDUxMDE1NzI4ZTVhOGFhYWM0MmRhZDMzMTcwZDA0'@;
put 'NTA3YTMzYTg1NTIxYWJkZjFjYmE2NGVjZmI4NTA0NThkYmVmMGE4YWVhNzE1NzVkMDYwYzdkYjM5NzBmODVhNmUxZTRjN2FiZjVhZThjZGIwOTMzZDcxZThjOTRlMDRhMjU2MTlkY2VlM2QyMjYxYWQyZWU2YmYxMmZmYTA2ZDk4YTA4NjRkODc2MDI3MzNlYzg2YTY0NTIxZjJiMTgxNzdiMjAw'@;
put 'Y2JiZTExNzU3N2E2MTVkNmM3NzA5ODhjMGJhZDk0NmUyMDhlMjRmYTA3NGU1YWIzMTQzZGI1YmZjZTBmZDEwOGU0YjgyZDEyMGE5MjEwODAxMWE3MjNjMTJhNzg3ZTZkNzg4NzE5YTEwYmRiYTViMjY5OWMzMjcxODZhZjRlMjNjMWE5NDY4MzRiNjE1MGJkYTI1ODNlOWNhMmFkNDRjZThkYmJi'@;
put 'YzJkYjA0ZGU4ZWY5MmU4ZWZjMTQxZmJlY2FhNjI4N2M1OTQ3NGU2YmMwNWQ5OWIyOTY0ZmEwOTBjM2EyMjMzYmExODY1MTViZTdlZDFmNjEyOTcwY2VlMmQ3YWZiODFiZGQ3NjIxNzA0ODFjZDAwNjkxMjdkNWIwNWFhOTkzYjRlYTk4OGQ4ZmRkYzE4NmZmYjdkYzkwYTZjMDhmNGRmNDM1Yzkz'@;
put 'NDAyODQ5MjM2YzNmYWI0ZDI3YzcwMjZjMWQ0ZGNiMjYwMjY0NmRlYzk3NTFlNzYzZGJhMzdiZGY4ZmY5NDA2YWQ5ZTUzMGVlNWRiMzgyZjQxMzAwMWFlYjA2YTUzZWQ5MDI3ZDgzMTE3OTcyN2IwODY1YTg5MThkYTNlZGJlYmNmOWIxNGVkNDRjZTZjYmFjZWQ0YmIxYmRiN2YxNDQ3ZTZjYzI1'@;
put 'NGIzMzIwNTE1MTJiZDdhZjQyNmZiOGY0MDEzNzhjZDJiZjU5ODNjYTAxYzY0YjkyZWNmMDMyZWExNWQxNzIxZDAzZjQ4MmQ3Y2U2ZTc0ZmVmNmQ1NWU3MDJmNDY5ODBjODJiNWE4NDAzMTkwMGIxYzllNTllN2M5N2ZiZWM3ZThmMzIzYTk3YTdlMzZjYzg4YmUwZjFkNDViN2ZmNTg1YWM1NGJk'@;
put 'NDA3YjIyYjQxNTRhYWNjOGY2ZDdlYmY0OGUxZDgxNGNjNWVkMjBmODAzN2UwYTc5NzE1ZWVmMjliZTMyODA2YTFkNThiYjdjNWRhNzZmNTUwYWEzZDhhMWZiZmYwZWIxOWNjYjFhMzEzZDU1Y2RhNTZjOWVjMmVmMjk2MzIzODdmZThkNzZlM2MwNDY4MDQzZThmNjYzZjQ4NjBlZTEyYmYyZDVi'@;
put 'MGI3NDc0ZDZlNjk0ZjkxZTZkYmUxMTU5NzRhMzkyNmYxMmZlZTVlNDM4Nzc3Y2I2YTkzMmRmOGNkOGJlYzRkMDczYjkzMWJhM2JjODMyYjY4ZDlkZDMwMDc0MWZhN2JmOGFmYzQ3ZWQyNTc2ZjY5MzZiYTQyNDY2M2FhYjYzOWM1YWU0ZjU2ODM0MjNiNDc0MmJmMWM5NzgyMzhmMTZjYmUzOWQ2'@;
put 'NTJkZTNmZGI4YmVmYzg0OGFkOTIyMjIyZTA0YTQwMzdjMDcxM2ViNTdhODFhMjNmMGM3MzQ3M2ZjNjQ2Y2VhMzA2YjRiY2JjODg2MmY4Mzg1ZGRmYTlkNGI3ZmEyYzA4N2U4Nzk2ODMzMDNlZDViZGQzYTA2MmIzY2Y1YjNhMjc4YTY2ZDJhMTNmODNmNDRmODJkZGYzMTBlZTA3NGFiNmEzNjQ1'@;
put 'OTdlODk5YTAyNTVkYzE2NGYzMWNjNTA4NDY4NTFkZjlhYjQ4MTk1ZGVkN2VhMWIxZDUxMGJkN2VlNzRkNzNmYWYzNmJjMzFlY2ZhMjY4MzU5MDQ2ZjRlYjg3OWY5MjQwMDk0MzhiNDgxYzZjZDc4ODlhMDAyZWQ1ZWUzODJiYzkxOTBkYTZmYzAyNmU0Nzk1NThlNDQ3NTY3N2U5YWE5ZTMwNTBl'@;
put 'Mjc2NTY5NGRmYzgxZjU2ZTg4MGI5NmU3MTYwYzk4MGRkOThlZGQzZGZmZmZmZmZmZmZmZmZmZmZmIn19Jyl9LDg1OTc6dWU9PnsidXNlIHN0cmljdCI7dWUuZXhwb3J0cz17aTg6IjYuNi4xIn19LDI1NjI6dWU9PnsidXNlIHN0cmljdCI7dWUuZXhwb3J0cz1KU09OLnBhcnNlKCd7IjIuMTYu'@;
put 'ODQwLjEuMTAxLjMuNC4xLjEiOiJhZXMtMTI4LWVjYiIsIjIuMTYuODQwLjEuMTAxLjMuNC4xLjIiOiJhZXMtMTI4LWNiYyIsIjIuMTYuODQwLjEuMTAxLjMuNC4xLjMiOiJhZXMtMTI4LW9mYiIsIjIuMTYuODQwLjEuMTAxLjMuNC4xLjQiOiJhZXMtMTI4LWNmYiIsIjIuMTYuODQwLjEuMTAx'@;
put 'LjMuNC4xLjIxIjoiYWVzLTE5Mi1lY2IiLCIyLjE2Ljg0MC4xLjEwMS4zLjQuMS4yMiI6ImFlcy0xOTItY2JjIiwiMi4xNi44NDAuMS4xMDEuMy40LjEuMjMiOiJhZXMtMTkyLW9mYiIsIjIuMTYuODQwLjEuMTAxLjMuNC4xLjI0IjoiYWVzLTE5Mi1jZmIiLCIyLjE2Ljg0MC4xLjEwMS4zLjQu'@;
put 'MS40MSI6ImFlcy0yNTYtZWNiIiwiMi4xNi44NDAuMS4xMDEuMy40LjEuNDIiOiJhZXMtMjU2LWNiYyIsIjIuMTYuODQwLjEuMTAxLjMuNC4xLjQzIjoiYWVzLTI1Ni1vZmIiLCIyLjE2Ljg0MC4xLjEwMS4zLjQuMS40NCI6ImFlcy0yNTYtY2ZiIn0nKX19LF9fd2VicGFja19tb2R1bGVfY2Fj'@;
put 'aGVfXz17fTtmdW5jdGlvbiBfX25lc3RlZF93ZWJwYWNrX3JlcXVpcmVfMjg5NDkwMl9fKHVlKXt2YXIgWD1fX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bdWVdO2lmKHZvaWQgMCE9PVgpcmV0dXJuIFguZXhwb3J0czt2YXIgeT1fX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bdWVdPXtpZDp1ZSxs'@;
put 'b2FkZWQ6ITEsZXhwb3J0czp7fX07cmV0dXJuIF9fd2VicGFja19tb2R1bGVzX19bdWVdLmNhbGwoeS5leHBvcnRzLHkseS5leHBvcnRzLF9fbmVzdGVkX3dlYnBhY2tfcmVxdWlyZV8yODk0OTAyX18pLHkubG9hZGVkPSEwLHkuZXhwb3J0c31fX25lc3RlZF93ZWJwYWNrX3JlcXVpcmVfMjg5'@;
put 'NDkwMl9fLmQ9KHVlLFgpPT57Zm9yKHZhciB5IGluIFgpX19uZXN0ZWRfd2VicGFja19yZXF1aXJlXzI4OTQ5MDJfXy5vKFgseSkmJiFfX25lc3RlZF93ZWJwYWNrX3JlcXVpcmVfMjg5NDkwMl9fLm8odWUseSkmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eSh1ZSx5LHtlbnVtZXJhYmxlOiEwLGdl'@;
put 'dDpYW3ldfSl9LF9fbmVzdGVkX3dlYnBhY2tfcmVxdWlyZV8yODk0OTAyX18uZz1mdW5jdGlvbigpe2lmKCJvYmplY3QiPT10eXBlb2YgZ2xvYmFsVGhpcylyZXR1cm4gZ2xvYmFsVGhpczt0cnl7cmV0dXJuIHRoaXN8fG5ldyBGdW5jdGlvbigicmV0dXJuIHRoaXMiKSgpfWNhdGNoe2lmKCJv'@;
put 'YmplY3QiPT10eXBlb2Ygd2luZG93KXJldHVybiB3aW5kb3d9fSgpLF9fbmVzdGVkX3dlYnBhY2tfcmVxdWlyZV8yODk0OTAyX18ubz0odWUsWCk9Pk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh1ZSxYKSxfX25lc3RlZF93ZWJwYWNrX3JlcXVpcmVfMjg5NDkwMl9fLnI9'@;
put 'dWU9Pnt0eXBlb2YgU3ltYm9sPCJ1IiYmU3ltYm9sLnRvU3RyaW5nVGFnJiZPYmplY3QuZGVmaW5lUHJvcGVydHkodWUsU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh1ZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9LF9fbmVzdGVk'@;
put 'X3dlYnBhY2tfcmVxdWlyZV8yODk0OTAyX18ubm1kPXVlPT4odWUucGF0aHM9W10sdWUuY2hpbGRyZW58fCh1ZS5jaGlsZHJlbj1bXSksdWUpO3ZhciBfX25lc3RlZF93ZWJwYWNrX2V4cG9ydHNfXz1fX25lc3RlZF93ZWJwYWNrX3JlcXVpcmVfMjg5NDkwMl9fKDM2MDcpO3JldHVybiBfX25l'@;
put 'c3RlZF93ZWJwYWNrX2V4cG9ydHNfX30pKCksbW9kdWxlLmV4cG9ydHM9eSgpfSw1OTQ4OmZ1bmN0aW9uKHVlLFgseSl7InVzZSBzdHJpY3QiO3ZhciBJPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihGKXtyZXR1cm4gRiYmRi5fX2VzTW9kdWxlP0Y6e2RlZmF1bHQ6Rn19'@;
put 'O09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLmlzU3BlY2lhbE1pc3Npbmc9WC5jaG9pY2VWYWxpZGF0b3I9WC5jb25maXJtYXRpb25WYWxpZGF0b3I9WC51cmxWYWxpZGF0b3I9dm9pZCAwO2NvbnN0IF89SSh5KDEyOTU0KSk7WC51cmxWYWxpZGF0'@;
put 'b3I9KEYsTyk9PiEhXy5kZWZhdWx0LmlzSHR0cFVyaShGKXx8ISFfLmRlZmF1bHQuaXNIdHRwc1VyaShGKXx8IiI9PT1GfHxPLFguY29uZmlybWF0aW9uVmFsaWRhdG9yPUY9PiEwPT09Rnx8ITE9PT1GLFguY2hvaWNlVmFsaWRhdG9yPShGLE8seik9PkY+MCYmRjw9T3x8eixYLmlzU3BlY2lh'@;
put 'bE1pc3Npbmc9Rj0+KCJzdHJpbmciIT10eXBlb2YgRnx8IUYuaW5jbHVkZXMoIi4uIikpJiZuZXcgUmVnRXhwKCJeKFxcLik/W2Etel8uXXsxfSQiLCJpIikudGVzdChGKX0sMTMyNDc6KHVlLFgpPT57InVzZSBzdHJpY3QiO3ZhciBfO1guWT12b2lkIDAsKF89WC5ZfHwoWC5ZPXt9KSkuU2Fz'@;
put 'Vml5YT0iU0FTVklZQSIsXy5TYXM5PSJTQVM5IixfLlNhc2pzPSJTQVNKUyJ9LDI1MDAxOih1ZSxYKT0+eyJ1c2Ugc3RyaWN0IjtYLkM9dm9pZCAwLFguQz0oXyxnPTEsQj0xMDk5NTExNjI3Nzc2KT0+e2lmKDA9PT1fKXJldHVybiIwIEIiO189Xz5CP0I6Xztjb25zdCBGPWc8MD8wOmcsTz1N'@;
put 'YXRoLmZsb29yKE1hdGgubG9nKF8pL01hdGgubG9nKDEwMjQpKTtyZXR1cm4oXy9NYXRoLnBvdygxMDI0LE8pKS50b0ZpeGVkKEYpKyIgIitbIkIiLCJLQiIsIk1CIiwiR0IiLCJUQiJdW09dfX0sNDI5MjQ6ZnVuY3Rpb24odWUpe3ZhciBYPXt2ZXJzaW9uOiIxLjE1LjAifTtYWzQzN109ZnVu'@;
put 'Y3Rpb24oKXtmb3IodmFyIHk9IlwwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwN1xiXHRcblx2XGZcclx4MGVceDBmXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTdceDE4XHgxOVx4MWFceDFiXHgxY1x4MWRceDFlXHgxZiAhXCIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+'@;
put 'P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5ceDdmXHhjN1x4ZmNceGU5XHhlMlx4ZTRceGUwXHhlNVx4ZTdceGVhXHhlYlx4ZThceGVmXHhlZVx4ZWNceGM0XHhjNVx4YzlceGU2XHhjNlx4ZjRceGY2XHhmMlx4ZmJceGY5'@;
put 'XHhmZlx4ZDZceGRjXHhhMlx4YTNceGE1XHUyMGE3XHUwMTkyXHhlMVx4ZWRceGYzXHhmYVx4ZjFceGQxXHhhYVx4YmFceGJmXHUyMzEwXHhhY1x4YmRceGJjXHhhMVx4YWJceGJiXHUyNTkxXHUyNTkyXHUyNTkzXHUyNTAyXHUyNTI0XHUyNTYxXHUyNTYyXHUyNTU2XHUyNTU1XHUyNTYzXHUy'@;
put 'NTUxXHUyNTU3XHUyNTVkXHUyNTVjXHUyNTViXHUyNTEwXHUyNTE0XHUyNTM0XHUyNTJjXHUyNTFjXHUyNTAwXHUyNTNjXHUyNTVlXHUyNTVmXHUyNTVhXHUyNTU0XHUyNTY5XHUyNTY2XHUyNTYwXHUyNTUwXHUyNTZjXHUyNTY3XHUyNTY4XHUyNTY0XHUyNTY1XHUyNTU5XHUyNTU4XHUyNTUy'@;
put 'XHUyNTUzXHUyNTZiXHUyNTZhXHUyNTE4XHUyNTBjXHUyNTg4XHUyNTg0XHUyNThjXHUyNTkwXHUyNTgwXHUwM2IxXHhkZlx1MDM5M1x1MDNjMFx1MDNhM1x1MDNjM1x4YjVcdTAzYzRcdTAzYTZcdTAzOThcdTAzYTlcdTAzYjRcdTIyMWVcdTAzYzZcdTAzYjVcdTIyMjlcdTIyNjFceGIxXHUy'@;
put 'MjY1XHUyMjY0XHUyMzIwXHUyMzIxXHhmN1x1MjI0OFx4YjBcdTIyMTlceGI3XHUyMjFhXHUyMDdmXHhiMlx1MjVhMFx4YTAiLEk9W10sXz17fSxnPTA7MjU2IT1nOysrZyk2NTUzMyE9PXkuY2hhckNvZGVBdChnKSYmKF9beS5jaGFyQXQoZyldPWcpLElbZ109eS5jaGFyQXQoZyk7cmV0dXJu'@;
put 'e2VuYzpfLGRlYzpJfX0oKSxYWzYyMF09ZnVuY3Rpb24oKXtmb3IodmFyIHk9IlwwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwN1xiXHRcblx2XGZcclx4MGVceDBmXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTdceDE4XHgxOVx4MWFceDFiXHgxY1x4MWRceDFlXHgxZiAhXCIj'@;
put 'JCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5ceDdmXHhjN1x4ZmNceGU5XHhlMlx4ZTRceGUwXHUwMTA1XHhlN1x4ZWFceGViXHhlOFx4ZWZceGVlXHUwMTA3XHhjNFx1MDEw'@;
put 'NFx1MDExOFx1MDExOVx1MDE0Mlx4ZjRceGY2XHUwMTA2XHhmYlx4ZjlcdTAxNWFceGQ2XHhkY1x4YTJcdTAxNDFceGE1XHUwMTViXHUwMTkyXHUwMTc5XHUwMTdiXHhmM1x4ZDNcdTAxNDRcdTAxNDNcdTAxN2FcdTAxN2NceGJmXHUyMzEwXHhhY1x4YmRceGJjXHhhMVx4YWJceGJiXHUyNTkx'@;
put 'XHUyNTkyXHUyNTkzXHUyNTAyXHUyNTI0XHUyNTYxXHUyNTYyXHUyNTU2XHUyNTU1XHUyNTYzXHUyNTUxXHUyNTU3XHUyNTVkXHUyNTVjXHUyNTViXHUyNTEwXHUyNTE0XHUyNTM0XHUyNTJjXHUyNTFjXHUyNTAwXHUyNTNjXHUyNTVlXHUyNTVmXHUyNTVhXHUyNTU0XHUyNTY5XHUyNTY2XHUy'@;
put 'NTYwXHUyNTUwXHUyNTZjXHUyNTY3XHUyNTY4XHUyNTY0XHUyNTY1XHUyNTU5XHUyNTU4XHUyNTUyXHUyNTUzXHUyNTZiXHUyNTZhXHUyNTE4XHUyNTBjXHUyNTg4XHUyNTg0XHUyNThjXHUyNTkwXHUyNTgwXHUwM2IxXHhkZlx1MDM5M1x1MDNjMFx1MDNhM1x1MDNjM1x4YjVcdTAzYzRcdTAz'@;
put 'YTZcdTAzOThcdTAzYTlcdTAzYjRcdTIyMWVcdTAzYzZcdTAzYjVcdTIyMjlcdTIyNjFceGIxXHUyMjY1XHUyMjY0XHUyMzIwXHUyMzIxXHhmN1x1MjI0OFx4YjBcdTIyMTlceGI3XHUyMjFhXHUyMDdmXHhiMlx1MjVhMFx4YTAiLEk9W10sXz17fSxnPTA7MjU2IT1nOysrZyk2NTUzMyE9PXku'@;
put 'Y2hhckNvZGVBdChnKSYmKF9beS5jaGFyQXQoZyldPWcpLElbZ109eS5jaGFyQXQoZyk7cmV0dXJue2VuYzpfLGRlYzpJfX0oKSxYWzczN109ZnVuY3Rpb24oKXtmb3IodmFyIHk9IlwwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwN1xiXHRcblx2XGZcclx4MGVceDBmXHgxMFx4MTFceDEy'@;
put 'XHgxM1x4MTRceDE1XHgxNlx4MTdceDE4XHgxOVx4MWFceDFiXHgxY1x4MWRceDFlXHgxZiAhXCIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5ceDdmXHUwMzkxXHUwMzky'@;
put 'XHUwMzkzXHUwMzk0XHUwMzk1XHUwMzk2XHUwMzk3XHUwMzk4XHUwMzk5XHUwMzlhXHUwMzliXHUwMzljXHUwMzlkXHUwMzllXHUwMzlmXHUwM2EwXHUwM2ExXHUwM2EzXHUwM2E0XHUwM2E1XHUwM2E2XHUwM2E3XHUwM2E4XHUwM2E5XHUwM2IxXHUwM2IyXHUwM2IzXHUwM2I0XHUwM2I1XHUw'@;
put 'M2I2XHUwM2I3XHUwM2I4XHUwM2I5XHUwM2JhXHUwM2JiXHUwM2JjXHUwM2JkXHUwM2JlXHUwM2JmXHUwM2MwXHUwM2MxXHUwM2MzXHUwM2MyXHUwM2M0XHUwM2M1XHUwM2M2XHUwM2M3XHUwM2M4XHUyNTkxXHUyNTkyXHUyNTkzXHUyNTAyXHUyNTI0XHUyNTYxXHUyNTYyXHUyNTU2XHUyNTU1'@;
put 'XHUyNTYzXHUyNTUxXHUyNTU3XHUyNTVkXHUyNTVjXHUyNTViXHUyNTEwXHUyNTE0XHUyNTM0XHUyNTJjXHUyNTFjXHUyNTAwXHUyNTNjXHUyNTVlXHUyNTVmXHUyNTVhXHUyNTU0XHUyNTY5XHUyNTY2XHUyNTYwXHUyNTUwXHUyNTZjXHUyNTY3XHUyNTY4XHUyNTY0XHUyNTY1XHUyNTU5XHUy'@;
put 'NTU4XHUyNTUyXHUyNTUzXHUyNTZiXHUyNTZhXHUyNTE4XHUyNTBjXHUyNTg4XHUyNTg0XHUyNThjXHUyNTkwXHUyNTgwXHUwM2M5XHUwM2FjXHUwM2FkXHUwM2FlXHUwM2NhXHUwM2FmXHUwM2NjXHUwM2NkXHUwM2NiXHUwM2NlXHUwMzg2XHUwMzg4XHUwMzg5XHUwMzhhXHUwMzhjXHUwMzhl'@;
put 'XHUwMzhmXHhiMVx1MjI2NVx1MjI2NFx1MDNhYVx1MDNhYlx4ZjdcdTIyNDhceGIwXHUyMjE5XHhiN1x1MjIxYVx1MjA3Zlx4YjJcdTI1YTBceGEwIixJPVtdLF89e30sZz0wOzI1NiE9ZzsrK2cpNjU1MzMhPT15LmNoYXJDb2RlQXQoZykmJihfW3kuY2hhckF0KGcpXT1nKSxJW2ddPXkuY2hh'@;
put 'ckF0KGcpO3JldHVybntlbmM6XyxkZWM6SX19KCksWFs4NTBdPWZ1bmN0aW9uKCl7Zm9yKHZhciB5PSJcMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFhXHgxYlx4MWNceDFk'@;
put 'XHgxZVx4MWYgIVwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XHg3Zlx4YzdceGZjXHhlOVx4ZTJceGU0XHhlMFx4ZTVceGU3XHhlYVx4ZWJceGU4XHhlZlx4ZWVceGVj'@;
put 'XHhjNFx4YzVceGM5XHhlNlx4YzZceGY0XHhmNlx4ZjJceGZiXHhmOVx4ZmZceGQ2XHhkY1x4ZjhceGEzXHhkOFx4ZDdcdTAxOTJceGUxXHhlZFx4ZjNceGZhXHhmMVx4ZDFceGFhXHhiYVx4YmZceGFlXHhhY1x4YmRceGJjXHhhMVx4YWJceGJiXHUyNTkxXHUyNTkyXHUyNTkzXHUyNTAyXHUy'@;
put 'NTI0XHhjMVx4YzJceGMwXHhhOVx1MjU2M1x1MjU1MVx1MjU1N1x1MjU1ZFx4YTJceGE1XHUyNTEwXHUyNTE0XHUyNTM0XHUyNTJjXHUyNTFjXHUyNTAwXHUyNTNjXHhlM1x4YzNcdTI1NWFcdTI1NTRcdTI1NjlcdTI1NjZcdTI1NjBcdTI1NTBcdTI1NmNceGE0XHhmMFx4ZDBceGNhXHhjYlx4'@;
put 'YzhcdTAxMzFceGNkXHhjZVx4Y2ZcdTI1MThcdTI1MGNcdTI1ODhcdTI1ODRceGE2XHhjY1x1MjU4MFx4ZDNceGRmXHhkNFx4ZDJceGY1XHhkNVx4YjVceGZlXHhkZVx4ZGFceGRiXHhkOVx4ZmRceGRkXHhhZlx4YjRceGFkXHhiMVx1MjAxN1x4YmVceGI2XHhhN1x4ZjdceGI4XHhiMFx4YThc'@;
put 'eGI3XHhiOVx4YjNceGIyXHUyNWEwXHhhMCIsST1bXSxfPXt9LGc9MDsyNTYhPWc7KytnKTY1NTMzIT09eS5jaGFyQ29kZUF0KGcpJiYoX1t5LmNoYXJBdChnKV09ZyksSVtnXT15LmNoYXJBdChnKTtyZXR1cm57ZW5jOl8sZGVjOkl9fSgpLFhbODUyXT1mdW5jdGlvbigpe2Zvcih2YXIgeT0i'@;
put 'XDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XGJcdFxuXHZcZlxyXHgwZVx4MGZceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmICFcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BR'@;
put 'UlNUVVZXWFlaW1xcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9flx4N2ZceGM3XHhmY1x4ZTlceGUyXHhlNFx1MDE2Zlx1MDEwN1x4ZTdcdTAxNDJceGViXHUwMTUwXHUwMTUxXHhlZVx1MDE3OVx4YzRcdTAxMDZceGM5XHUwMTM5XHUwMTNhXHhmNFx4ZjZcdTAxM2RcdTAxM2Vc'@;
put 'dTAxNWFcdTAxNWJceGQ2XHhkY1x1MDE2NFx1MDE2NVx1MDE0MVx4ZDdcdTAxMGRceGUxXHhlZFx4ZjNceGZhXHUwMTA0XHUwMTA1XHUwMTdkXHUwMTdlXHUwMTE4XHUwMTE5XHhhY1x1MDE3YVx1MDEwY1x1MDE1Zlx4YWJceGJiXHUyNTkxXHUyNTkyXHUyNTkzXHUyNTAyXHUyNTI0XHhjMVx4'@;
put 'YzJcdTAxMWFcdTAxNWVcdTI1NjNcdTI1NTFcdTI1NTdcdTI1NWRcdTAxN2JcdTAxN2NcdTI1MTBcdTI1MTRcdTI1MzRcdTI1MmNcdTI1MWNcdTI1MDBcdTI1M2NcdTAxMDJcdTAxMDNcdTI1NWFcdTI1NTRcdTI1NjlcdTI1NjZcdTI1NjBcdTI1NTBcdTI1NmNceGE0XHUwMTExXHUwMTEwXHUw'@;
put 'MTBlXHhjYlx1MDEwZlx1MDE0N1x4Y2RceGNlXHUwMTFiXHUyNTE4XHUyNTBjXHUyNTg4XHUyNTg0XHUwMTYyXHUwMTZlXHUyNTgwXHhkM1x4ZGZceGQ0XHUwMTQzXHUwMTQ0XHUwMTQ4XHUwMTYwXHUwMTYxXHUwMTU0XHhkYVx1MDE1NVx1MDE3MFx4ZmRceGRkXHUwMTYzXHhiNFx4YWRcdTAy'@;
put 'ZGRcdTAyZGJcdTAyYzdcdTAyZDhceGE3XHhmN1x4YjhceGIwXHhhOFx1MDJkOVx1MDE3MVx1MDE1OFx1MDE1OVx1MjVhMFx4YTAiLEk9W10sXz17fSxnPTA7MjU2IT1nOysrZyk2NTUzMyE9PXkuY2hhckNvZGVBdChnKSYmKF9beS5jaGFyQXQoZyldPWcpLElbZ109eS5jaGFyQXQoZyk7cmV0'@;
put 'dXJue2VuYzpfLGRlYzpJfX0oKSxYWzg1N109ZnVuY3Rpb24oKXtmb3IodmFyIHk9IlwwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwN1xiXHRcblx2XGZcclx4MGVceDBmXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTdceDE4XHgxOVx4MWFceDFiXHgxY1x4MWRceDFlXHgxZiAh'@;
put 'XCIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5ceDdmXHhjN1x4ZmNceGU5XHhlMlx4ZTRceGUwXHhlNVx4ZTdceGVhXHhlYlx4ZThceGVmXHhlZVx1MDEzMVx4YzRceGM1'@;
put 'XHhjOVx4ZTZceGM2XHhmNFx4ZjZceGYyXHhmYlx4ZjlcdTAxMzBceGQ2XHhkY1x4ZjhceGEzXHhkOFx1MDE1ZVx1MDE1Zlx4ZTFceGVkXHhmM1x4ZmFceGYxXHhkMVx1MDExZVx1MDExZlx4YmZceGFlXHhhY1x4YmRceGJjXHhhMVx4YWJceGJiXHUyNTkxXHUyNTkyXHUyNTkzXHUyNTAyXHUy'@;
put 'NTI0XHhjMVx4YzJceGMwXHhhOVx1MjU2M1x1MjU1MVx1MjU1N1x1MjU1ZFx4YTJceGE1XHUyNTEwXHUyNTE0XHUyNTM0XHUyNTJjXHUyNTFjXHUyNTAwXHUyNTNjXHhlM1x4YzNcdTI1NWFcdTI1NTRcdTI1NjlcdTI1NjZcdTI1NjBcdTI1NTBcdTI1NmNceGE0XHhiYVx4YWFceGNhXHhjYlx4'@;
put 'YzhcdWZmZmRceGNkXHhjZVx4Y2ZcdTI1MThcdTI1MGNcdTI1ODhcdTI1ODRceGE2XHhjY1x1MjU4MFx4ZDNceGRmXHhkNFx4ZDJceGY1XHhkNVx4YjVcdWZmZmRceGQ3XHhkYVx4ZGJceGQ5XHhlY1x4ZmZceGFmXHhiNFx4YWRceGIxXHVmZmZkXHhiZVx4YjZceGE3XHhmN1x4YjhceGIwXHhh'@;
put 'OFx4YjdceGI5XHhiM1x4YjJcdTI1YTBceGEwIixJPVtdLF89e30sZz0wOzI1NiE9ZzsrK2cpNjU1MzMhPT15LmNoYXJDb2RlQXQoZykmJihfW3kuY2hhckF0KGcpXT1nKSxJW2ddPXkuY2hhckF0KGcpO3JldHVybntlbmM6XyxkZWM6SX19KCksWFs4NjFdPWZ1bmN0aW9uKCl7Zm9yKHZhciB5'@;
put 'PSJcMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWYgIVwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5P'@;
put 'UFFSU1RVVldYWVpbXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XHg3Zlx4YzdceGZjXHhlOVx4ZTJceGU0XHhlMFx4ZTVceGU3XHhlYVx4ZWJceGU4XHhkMFx4ZjBceGRlXHhjNFx4YzVceGM5XHhlNlx4YzZceGY0XHhmNlx4ZmVceGZiXHhkZFx4ZmRceGQ2XHhkY1x4Zjhc'@;
put 'eGEzXHhkOFx1MjBhN1x1MDE5Mlx4ZTFceGVkXHhmM1x4ZmFceGMxXHhjZFx4ZDNceGRhXHhiZlx1MjMxMFx4YWNceGJkXHhiY1x4YTFceGFiXHhiYlx1MjU5MVx1MjU5Mlx1MjU5M1x1MjUwMlx1MjUyNFx1MjU2MVx1MjU2Mlx1MjU1Nlx1MjU1NVx1MjU2M1x1MjU1MVx1MjU1N1x1MjU1ZFx1'@;
put 'MjU1Y1x1MjU1Ylx1MjUxMFx1MjUxNFx1MjUzNFx1MjUyY1x1MjUxY1x1MjUwMFx1MjUzY1x1MjU1ZVx1MjU1Zlx1MjU1YVx1MjU1NFx1MjU2OVx1MjU2Nlx1MjU2MFx1MjU1MFx1MjU2Y1x1MjU2N1x1MjU2OFx1MjU2NFx1MjU2NVx1MjU1OVx1MjU1OFx1MjU1Mlx1MjU1M1x1MjU2Ylx1MjU2'@;
put 'YVx1MjUxOFx1MjUwY1x1MjU4OFx1MjU4NFx1MjU4Y1x1MjU5MFx1MjU4MFx1MDNiMVx4ZGZcdTAzOTNcdTAzYzBcdTAzYTNcdTAzYzNceGI1XHUwM2M0XHUwM2E2XHUwMzk4XHUwM2E5XHUwM2I0XHUyMjFlXHUwM2M2XHUwM2I1XHUyMjI5XHUyMjYxXHhiMVx1MjI2NVx1MjI2NFx1MjMyMFx1'@;
put 'MjMyMVx4ZjdcdTIyNDhceGIwXHUyMjE5XHhiN1x1MjIxYVx1MjA3Zlx4YjJcdTI1YTBceGEwIixJPVtdLF89e30sZz0wOzI1NiE9ZzsrK2cpNjU1MzMhPT15LmNoYXJDb2RlQXQoZykmJihfW3kuY2hhckF0KGcpXT1nKSxJW2ddPXkuY2hhckF0KGcpO3JldHVybntlbmM6XyxkZWM6SX19KCks'@;
put 'WFs4NjVdPWZ1bmN0aW9uKCl7Zm9yKHZhciB5PSJcMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWYgIVwiIyQlJicoKSorLC0uLzAxMjM0'@;
put 'NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XHg3Zlx4YzdceGZjXHhlOVx4ZTJceGU0XHhlMFx4ZTVceGU3XHhlYVx4ZWJceGU4XHhlZlx4ZWVceGVjXHhjNFx4YzVceGM5XHhlNlx4YzZceGY0XHhmNlx4'@;
put 'ZjJceGZiXHhmOVx4ZmZceGQ2XHhkY1x4ZjhceGEzXHhkOFx1MjBhN1x1MDE5Mlx4ZTFceGVkXHhmM1x4ZmFceGYxXHhkMVx4YWFceGJhXHhiZlx1MjMxMFx4YWNceGJkXHhiY1x4YTFceGFiXHhhNFx1MjU5MVx1MjU5Mlx1MjU5M1x1MjUwMlx1MjUyNFx1MjU2MVx1MjU2Mlx1MjU1Nlx1MjU1'@;
put 'NVx1MjU2M1x1MjU1MVx1MjU1N1x1MjU1ZFx1MjU1Y1x1MjU1Ylx1MjUxMFx1MjUxNFx1MjUzNFx1MjUyY1x1MjUxY1x1MjUwMFx1MjUzY1x1MjU1ZVx1MjU1Zlx1MjU1YVx1MjU1NFx1MjU2OVx1MjU2Nlx1MjU2MFx1MjU1MFx1MjU2Y1x1MjU2N1x1MjU2OFx1MjU2NFx1MjU2NVx1MjU1OVx1'@;
put 'MjU1OFx1MjU1Mlx1MjU1M1x1MjU2Ylx1MjU2YVx1MjUxOFx1MjUwY1x1MjU4OFx1MjU4NFx1MjU4Y1x1MjU5MFx1MjU4MFx1MDNiMVx4ZGZcdTAzOTNcdTAzYzBcdTAzYTNcdTAzYzNceGI1XHUwM2M0XHUwM2E2XHUwMzk4XHUwM2E5XHUwM2I0XHUyMjFlXHUwM2M2XHUwM2I1XHUyMjI5XHUy'@;
put 'MjYxXHhiMVx1MjI2NVx1MjI2NFx1MjMyMFx1MjMyMVx4ZjdcdTIyNDhceGIwXHUyMjE5XHhiN1x1MjIxYVx1MjA3Zlx4YjJcdTI1YTBceGEwIixJPVtdLF89e30sZz0wOzI1NiE9ZzsrK2cpNjU1MzMhPT15LmNoYXJDb2RlQXQoZykmJihfW3kuY2hhckF0KGcpXT1nKSxJW2ddPXkuY2hhckF0'@;
put 'KGcpO3JldHVybntlbmM6XyxkZWM6SX19KCksWFs4NjZdPWZ1bmN0aW9uKCl7Zm9yKHZhciB5PSJcMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgx'@;
put 'ZVx4MWYgIVwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XHg3Zlx1MDQxMFx1MDQxMVx1MDQxMlx1MDQxM1x1MDQxNFx1MDQxNVx1MDQxNlx1MDQxN1x1MDQxOFx1MDQx'@;
put 'OVx1MDQxYVx1MDQxYlx1MDQxY1x1MDQxZFx1MDQxZVx1MDQxZlx1MDQyMFx1MDQyMVx1MDQyMlx1MDQyM1x1MDQyNFx1MDQyNVx1MDQyNlx1MDQyN1x1MDQyOFx1MDQyOVx1MDQyYVx1MDQyYlx1MDQyY1x1MDQyZFx1MDQyZVx1MDQyZlx1MDQzMFx1MDQzMVx1MDQzMlx1MDQzM1x1MDQzNFx1'@;
put 'MDQzNVx1MDQzNlx1MDQzN1x1MDQzOFx1MDQzOVx1MDQzYVx1MDQzYlx1MDQzY1x1MDQzZFx1MDQzZVx1MDQzZlx1MjU5MVx1MjU5Mlx1MjU5M1x1MjUwMlx1MjUyNFx1MjU2MVx1MjU2Mlx1MjU1Nlx1MjU1NVx1MjU2M1x1MjU1MVx1MjU1N1x1MjU1ZFx1MjU1Y1x1MjU1Ylx1MjUxMFx1MjUx'@;
put 'NFx1MjUzNFx1MjUyY1x1MjUxY1x1MjUwMFx1MjUzY1x1MjU1ZVx1MjU1Zlx1MjU1YVx1MjU1NFx1MjU2OVx1MjU2Nlx1MjU2MFx1MjU1MFx1MjU2Y1x1MjU2N1x1MjU2OFx1MjU2NFx1MjU2NVx1MjU1OVx1MjU1OFx1MjU1Mlx1MjU1M1x1MjU2Ylx1MjU2YVx1MjUxOFx1MjUwY1x1MjU4OFx1'@;
put 'MjU4NFx1MjU4Y1x1MjU5MFx1MjU4MFx1MDQ0MFx1MDQ0MVx1MDQ0Mlx1MDQ0M1x1MDQ0NFx1MDQ0NVx1MDQ0Nlx1MDQ0N1x1MDQ0OFx1MDQ0OVx1MDQ0YVx1MDQ0Ylx1MDQ0Y1x1MDQ0ZFx1MDQ0ZVx1MDQ0Zlx1MDQwMVx1MDQ1MVx1MDQwNFx1MDQ1NFx1MDQwN1x1MDQ1N1x1MDQwZVx1MDQ1'@;
put 'ZVx4YjBcdTIyMTlceGI3XHUyMjFhXHUyMTE2XHhhNFx1MjVhMFx4YTAiLEk9W10sXz17fSxnPTA7MjU2IT1nOysrZyk2NTUzMyE9PXkuY2hhckNvZGVBdChnKSYmKF9beS5jaGFyQXQoZyldPWcpLElbZ109eS5jaGFyQXQoZyk7cmV0dXJue2VuYzpfLGRlYzpJfX0oKSxYWzg3NF09ZnVuY3Rp'@;
put 'b24oKXtmb3IodmFyIHk9IlwwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwN1xiXHRcblx2XGZcclx4MGVceDBmXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTdceDE4XHgxOVx4MWFceDFiXHgxY1x4MWRceDFlXHgxZiAhXCIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BB'@;
put 'QkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5ceDdmXHUyMGFjXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUyMDI2XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHUyMDE4XHUyMDE5XHUyMDFjXHUyMDFkXHUyMDIyXHUyMDEzXHUyMDE0XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHhhMFx1MGUwMVx1MGUwMlx1MGUwM1x1MGUwNFx1MGUwNVx1MGUwNlx1MGUwN1x1MGUwOFx1MGUwOVx1MGUwYVx1MGUwYlx1'@;
put 'MGUwY1x1MGUwZFx1MGUwZVx1MGUwZlx1MGUxMFx1MGUxMVx1MGUxMlx1MGUxM1x1MGUxNFx1MGUxNVx1MGUxNlx1MGUxN1x1MGUxOFx1MGUxOVx1MGUxYVx1MGUxYlx1MGUxY1x1MGUxZFx1MGUxZVx1MGUxZlx1MGUyMFx1MGUyMVx1MGUyMlx1MGUyM1x1MGUyNFx1MGUyNVx1MGUyNlx1MGUy'@;
put 'N1x1MGUyOFx1MGUyOVx1MGUyYVx1MGUyYlx1MGUyY1x1MGUyZFx1MGUyZVx1MGUyZlx1MGUzMFx1MGUzMVx1MGUzMlx1MGUzM1x1MGUzNFx1MGUzNVx1MGUzNlx1MGUzN1x1MGUzOFx1MGUzOVx1MGUzYVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MGUzZlx1MGU0MFx1MGU0MVx1MGU0Mlx1'@;
put 'MGU0M1x1MGU0NFx1MGU0NVx1MGU0Nlx1MGU0N1x1MGU0OFx1MGU0OVx1MGU0YVx1MGU0Ylx1MGU0Y1x1MGU0ZFx1MGU0ZVx1MGU0Zlx1MGU1MFx1MGU1MVx1MGU1Mlx1MGU1M1x1MGU1NFx1MGU1NVx1MGU1Nlx1MGU1N1x1MGU1OFx1MGU1OVx1MGU1YVx1MGU1Ylx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZCIsST1bXSxfPXt9LGc9MDsyNTYhPWc7KytnKTY1NTMzIT09eS5jaGFyQ29kZUF0KGcpJiYoX1t5LmNoYXJBdChnKV09ZyksSVtnXT15LmNoYXJBdChnKTtyZXR1cm57ZW5jOl8sZGVjOkl9fSgpLFhbODk1XT1mdW5jdGlvbigpe2Zvcih2YXIgeT0iXDBceDAxXHgwMlx4MDNceDA0'@;
put 'XHgwNVx4MDZceDA3XGJcdFxuXHZcZlxyXHgwZVx4MGZceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmICFcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5fYGFi'@;
put 'Y2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9flx4N2ZcdTAxMGNceGZjXHhlOVx1MDEwZlx4ZTRcdTAxMGVcdTAxNjRcdTAxMGRcdTAxMWJcdTAxMWFcdTAxMzlceGNkXHUwMTNlXHUwMWVhXHhjNFx4YzFceGM5XHUwMTdlXHUwMTdkXHhmNFx4ZjZceGQzXHUwMTZmXHhkYVx4ZmRceGQ2XHhk'@;
put 'Y1x1MDE2MFx1MDEzZFx4ZGRcdTAxNThcdTAxNjVceGUxXHhlZFx4ZjNceGZhXHUwMTQ4XHUwMTQ3XHUwMTZlXHhkNFx1MDE2MVx1MDE1OVx1MDE1NVx1MDE1NFx4YmNceGE3XHhhYlx4YmJcdTI1OTFcdTI1OTJcdTI1OTNcdTI1MDJcdTI1MjRcdTI1NjFcdTI1NjJcdTI1NTZcdTI1NTVcdTI1'@;
put 'NjNcdTI1NTFcdTI1NTdcdTI1NWRcdTI1NWNcdTI1NWJcdTI1MTBcdTI1MTRcdTI1MzRcdTI1MmNcdTI1MWNcdTI1MDBcdTI1M2NcdTI1NWVcdTI1NWZcdTI1NWFcdTI1NTRcdTI1NjlcdTI1NjZcdTI1NjBcdTI1NTBcdTI1NmNcdTI1NjdcdTI1NjhcdTI1NjRcdTI1NjVcdTI1NTlcdTI1NThc'@;
put 'dTI1NTJcdTI1NTNcdTI1NmJcdTI1NmFcdTI1MThcdTI1MGNcdTI1ODhcdTI1ODRcdTI1OGNcdTI1OTBcdTI1ODBcdTAzYjFceGRmXHUwMzkzXHUwM2MwXHUwM2EzXHUwM2MzXHhiNVx1MDNjNFx1MDNhNlx1MDM5OFx1MDNhOVx1MDNiNFx1MjIxZVx1MDNjNlx1MDNiNVx1MjIyOVx1MjI2MVx4'@;
put 'YjFcdTIyNjVcdTIyNjRcdTIzMjBcdTIzMjFceGY3XHUyMjQ4XHhiMFx1MjIxOVx4YjdcdTIyMWFcdTIwN2ZceGIyXHUyNWEwXHhhMCIsST1bXSxfPXt9LGc9MDsyNTYhPWc7KytnKTY1NTMzIT09eS5jaGFyQ29kZUF0KGcpJiYoX1t5LmNoYXJBdChnKV09ZyksSVtnXT15LmNoYXJBdChnKTty'@;
put 'ZXR1cm57ZW5jOl8sZGVjOkl9fSgpLFhbOTMyXT1mdW5jdGlvbigpe3ZhciBnLHk9W10sST17fSxfPVtdO2ZvcihfWzBdPSJcMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFh'@;
put 'XHgxYlx4MWNceDFkXHgxZVx4MWYgIVwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XHg3Zlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmY2MVx1ZmY2'@;
put 'Mlx1ZmY2M1x1ZmY2NFx1ZmY2NVx1ZmY2Nlx1ZmY2N1x1ZmY2OFx1ZmY2OVx1ZmY2YVx1ZmY2Ylx1ZmY2Y1x1ZmY2ZFx1ZmY2ZVx1ZmY2Zlx1ZmY3MFx1ZmY3MVx1ZmY3Mlx1ZmY3M1x1ZmY3NFx1ZmY3NVx1ZmY3Nlx1ZmY3N1x1ZmY3OFx1ZmY3OVx1ZmY3YVx1ZmY3Ylx1ZmY3Y1x1ZmY3ZFx1'@;
put 'ZmY3ZVx1ZmY3Zlx1ZmY4MFx1ZmY4MVx1ZmY4Mlx1ZmY4M1x1ZmY4NFx1ZmY4NVx1ZmY4Nlx1ZmY4N1x1ZmY4OFx1ZmY4OVx1ZmY4YVx1ZmY4Ylx1ZmY4Y1x1ZmY4ZFx1ZmY4ZVx1ZmY4Zlx1ZmY5MFx1ZmY5MVx1ZmY5Mlx1ZmY5M1x1ZmY5NFx1ZmY5NVx1ZmY5Nlx1ZmY5N1x1ZmY5OFx1ZmY5'@;
put 'OVx1ZmY5YVx1ZmY5Ylx1ZmY5Y1x1ZmY5ZFx1ZmY5ZVx1ZmY5Zlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzBdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzBdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMF1bZ11dPTArZyx5WzArZ109X1swXVtnXSk7Zm9y'@;
put 'KF9bMTI5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUzMDAwXHUzMDAxXHUzMDAyXHVmZjBjXHVmZjBlXHUzMGZiXHVmZjFhXHVmZjFiXHVmZjFmXHVmZjAxXHUzMDliXHUzMDljXHhiNFx1ZmY0MFx4YThcdWZmM2VcdWZmZTNcdWZm'@;
put 'M2ZcdTMwZmRcdTMwZmVcdTMwOWRcdTMwOWVcdTMwMDNcdTRlZGRcdTMwMDVcdTMwMDZcdTMwMDdcdTMwZmNcdTIwMTVcdTIwMTBcdWZmMGZcdWZmM2NcdWZmNWVcdTIyMjVcdWZmNWNcdTIwMjZcdTIwMjVcdTIwMThcdTIwMTlcdTIwMWNcdTIwMWRcdWZmMDhcdWZmMDlcdTMwMTRcdTMwMTVc'@;
put 'dWZmM2JcdWZmM2RcdWZmNWJcdWZmNWRcdTMwMDhcdTMwMDlcdTMwMGFcdTMwMGJcdTMwMGNcdTMwMGRcdTMwMGVcdTMwMGZcdTMwMTBcdTMwMTFcdWZmMGJcdWZmMGRceGIxXHhkN1x1ZmZmZFx4ZjdcdWZmMWRcdTIyNjBcdWZmMWNcdWZmMWVcdTIyNjZcdTIyNjdcdTIyMWVcdTIyMzRcdTI2'@;
put 'NDJcdTI2NDBceGIwXHUyMDMyXHUyMDMzXHUyMTAzXHVmZmU1XHVmZjA0XHVmZmUwXHVmZmUxXHVmZjA1XHVmZjAzXHVmZjA2XHVmZjBhXHVmZjIwXHhhN1x1MjYwNlx1MjYwNVx1MjVjYlx1MjVjZlx1MjVjZVx1MjVjN1x1MjVjNlx1MjVhMVx1MjVhMFx1MjViM1x1MjViMlx1MjViZFx1MjVi'@;
put 'Y1x1MjAzYlx1MzAxMlx1MjE5Mlx1MjE5MFx1MjE5MVx1MjE5M1x1MzAxM1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MjIwOFx1MjIwYlx1MjI4Nlx1MjI4N1x1MjI4Mlx1MjI4M1x1MjIyYVx1MjIyOVx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MjIyN1x1MjIyOFx1ZmZlMlx1MjFkMlx1MjFkNFx1MjIwMFx1MjIwM1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MjIyMFx1MjJhNVx1MjMx'@;
put 'Mlx1MjIwMlx1MjIwN1x1MjI2MVx1MjI1Mlx1MjI2YVx1MjI2Ylx1MjIxYVx1MjIzZFx1MjIxZFx1MjIzNVx1MjIyYlx1MjIyY1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MjEyYlx1MjAzMFx1MjY2Zlx1MjY2ZFx1MjY2YVx1MjAyMFx1MjAyMVx4YjZcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTI1ZWZcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxMjldLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzEyOV1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxMjldW2ddXT0zMzAyNCtnLHlbMzMwMjQrZ109X1sxMjldW2ddKTtmb3IoX1sx'@;
put 'MzBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmMTBcdWZmMTFcdWZm'@;
put 'MTJcdWZmMTNcdWZmMTRcdWZmMTVcdWZmMTZcdWZmMTdcdWZmMThcdWZmMTlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmMjFcdWZmMjJcdWZmMjNcdWZmMjRcdWZmMjVcdWZmMjZcdWZmMjdcdWZmMjhcdWZmMjlcdWZmMmFcdWZmMmJcdWZmMmNcdWZmMmRc'@;
put 'dWZmMmVcdWZmMmZcdWZmMzBcdWZmMzFcdWZmMzJcdWZmMzNcdWZmMzRcdWZmMzVcdWZmMzZcdWZmMzdcdWZmMzhcdWZmMzlcdWZmM2FcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmNDFcdWZmNDJcdWZmNDNcdWZmNDRcdWZmNDVcdWZmNDZcdWZmNDdcdWZm'@;
put 'NDhcdWZmNDlcdWZmNGFcdWZmNGJcdWZmNGNcdWZmNGRcdWZmNGVcdWZmNGZcdWZmNTBcdWZmNTFcdWZmNTJcdWZmNTNcdWZmNTRcdWZmNTVcdWZmNTZcdWZmNTdcdWZmNThcdWZmNTlcdWZmNWFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTMwNDFcdTMwNDJcdTMwNDNcdTMwNDRcdTMwNDVc'@;
put 'dTMwNDZcdTMwNDdcdTMwNDhcdTMwNDlcdTMwNGFcdTMwNGJcdTMwNGNcdTMwNGRcdTMwNGVcdTMwNGZcdTMwNTBcdTMwNTFcdTMwNTJcdTMwNTNcdTMwNTRcdTMwNTVcdTMwNTZcdTMwNTdcdTMwNThcdTMwNTlcdTMwNWFcdTMwNWJcdTMwNWNcdTMwNWRcdTMwNWVcdTMwNWZcdTMwNjBcdTMw'@;
put 'NjFcdTMwNjJcdTMwNjNcdTMwNjRcdTMwNjVcdTMwNjZcdTMwNjdcdTMwNjhcdTMwNjlcdTMwNmFcdTMwNmJcdTMwNmNcdTMwNmRcdTMwNmVcdTMwNmZcdTMwNzBcdTMwNzFcdTMwNzJcdTMwNzNcdTMwNzRcdTMwNzVcdTMwNzZcdTMwNzdcdTMwNzhcdTMwNzlcdTMwN2FcdTMwN2JcdTMwN2Nc'@;
put 'dTMwN2RcdTMwN2VcdTMwN2ZcdTMwODBcdTMwODFcdTMwODJcdTMwODNcdTMwODRcdTMwODVcdTMwODZcdTMwODdcdTMwODhcdTMwODlcdTMwOGFcdTMwOGJcdTMwOGNcdTMwOGRcdTMwOGVcdTMwOGZcdTMwOTBcdTMwOTFcdTMwOTJcdTMwOTNcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxMzBdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzEzMF1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxMzBdW2ddXT0zMzI4MCtnLHlbMzMyODArZ109X1sxMzBd'@;
put 'W2ddKTtmb3IoX1sxMzFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTMwYTFcdTMwYTJcdTMwYTNcdTMwYTRcdTMwYTVcdTMwYTZcdTMwYTdcdTMwYThcdTMwYTlcdTMwYWFcdTMwYWJcdTMwYWNcdTMwYWRcdTMwYWVcdTMwYWZcdTMw'@;
put 'YjBcdTMwYjFcdTMwYjJcdTMwYjNcdTMwYjRcdTMwYjVcdTMwYjZcdTMwYjdcdTMwYjhcdTMwYjlcdTMwYmFcdTMwYmJcdTMwYmNcdTMwYmRcdTMwYmVcdTMwYmZcdTMwYzBcdTMwYzFcdTMwYzJcdTMwYzNcdTMwYzRcdTMwYzVcdTMwYzZcdTMwYzdcdTMwYzhcdTMwYzlcdTMwY2FcdTMwY2Jc'@;
put 'dTMwY2NcdTMwY2RcdTMwY2VcdTMwY2ZcdTMwZDBcdTMwZDFcdTMwZDJcdTMwZDNcdTMwZDRcdTMwZDVcdTMwZDZcdTMwZDdcdTMwZDhcdTMwZDlcdTMwZGFcdTMwZGJcdTMwZGNcdTMwZGRcdTMwZGVcdTMwZGZcdWZmZmRcdTMwZTBcdTMwZTFcdTMwZTJcdTMwZTNcdTMwZTRcdTMwZTVcdTMw'@;
put 'ZTZcdTMwZTdcdTMwZThcdTMwZTlcdTMwZWFcdTMwZWJcdTMwZWNcdTMwZWRcdTMwZWVcdTMwZWZcdTMwZjBcdTMwZjFcdTMwZjJcdTMwZjNcdTMwZjRcdTMwZjVcdTMwZjZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTAzOTFcdTAzOTJcdTAzOTNc'@;
put 'dTAzOTRcdTAzOTVcdTAzOTZcdTAzOTdcdTAzOThcdTAzOTlcdTAzOWFcdTAzOWJcdTAzOWNcdTAzOWRcdTAzOWVcdTAzOWZcdTAzYTBcdTAzYTFcdTAzYTNcdTAzYTRcdTAzYTVcdTAzYTZcdTAzYTdcdTAzYThcdTAzYTlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdTAzYjFcdTAzYjJcdTAzYjNcdTAzYjRcdTAzYjVcdTAzYjZcdTAzYjdcdTAzYjhcdTAzYjlcdTAzYmFcdTAzYmJcdTAzYmNcdTAzYmRcdTAzYmVcdTAzYmZcdTAzYzBcdTAzYzFcdTAzYzNcdTAzYzRcdTAzYzVcdTAzYzZcdTAzYzdcdTAzYzhcdTAzYzlcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxMzFdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzEzMV1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxMzFdW2ddXT0zMzUzNitnLHlbMzM1'@;
put 'MzYrZ109X1sxMzFdW2ddKTtmb3IoX1sxMzJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTA0MTBcdTA0MTFcdTA0MTJcdTA0MTNcdTA0MTRcdTA0MTVcdTA0MDFcdTA0MTZcdTA0MTdcdTA0MThcdTA0MTlcdTA0MWFcdTA0MWJcdTA0'@;
put 'MWNcdTA0MWRcdTA0MWVcdTA0MWZcdTA0MjBcdTA0MjFcdTA0MjJcdTA0MjNcdTA0MjRcdTA0MjVcdTA0MjZcdTA0MjdcdTA0MjhcdTA0MjlcdTA0MmFcdTA0MmJcdTA0MmNcdTA0MmRcdTA0MmVcdTA0MmZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTA0MzBcdTA0MzFcdTA0MzJcdTA0MzNcdTA0MzRcdTA0MzVcdTA0NTFcdTA0MzZcdTA0MzdcdTA0MzhcdTA0MzlcdTA0M2FcdTA0M2JcdTA0M2NcdTA0M2RcdWZmZmRcdTA0M2VcdTA0M2ZcdTA0NDBcdTA0NDFcdTA0'@;
put 'NDJcdTA0NDNcdTA0NDRcdTA0NDVcdTA0NDZcdTA0NDdcdTA0NDhcdTA0NDlcdTA0NGFcdTA0NGJcdTA0NGNcdTA0NGRcdTA0NGVcdTA0NGZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTI1MDBc'@;
put 'dTI1MDJcdTI1MGNcdTI1MTBcdTI1MThcdTI1MTRcdTI1MWNcdTI1MmNcdTI1MjRcdTI1MzRcdTI1M2NcdTI1MDFcdTI1MDNcdTI1MGZcdTI1MTNcdTI1MWJcdTI1MTdcdTI1MjNcdTI1MzNcdTI1MmJcdTI1M2JcdTI1NGJcdTI1MjBcdTI1MmZcdTI1MjhcdTI1MzdcdTI1M2ZcdTI1MWRcdTI1'@;
put 'MzBcdTI1MjVcdTI1MzhcdTI1NDJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxMzJdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzEzMl1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxMzJdW2ddXT0z'@;
put 'Mzc5MitnLHlbMzM3OTIrZ109X1sxMzJdW2ddKTtmb3IoX1sxMzVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTI0NjBcdTI0NjFcdTI0NjJcdTI0NjNcdTI0NjRcdTI0NjVcdTI0NjZcdTI0NjdcdTI0NjhcdTI0NjlcdTI0NmFcdTI0'@;
put 'NmJcdTI0NmNcdTI0NmRcdTI0NmVcdTI0NmZcdTI0NzBcdTI0NzFcdTI0NzJcdTI0NzNcdTIxNjBcdTIxNjFcdTIxNjJcdTIxNjNcdTIxNjRcdTIxNjVcdTIxNjZcdTIxNjdcdTIxNjhcdTIxNjlcdWZmZmRcdTMzNDlcdTMzMTRcdTMzMjJcdTMzNGRcdTMzMThcdTMzMjdcdTMzMDNcdTMzMzZc'@;
put 'dTMzNTFcdTMzNTdcdTMzMGRcdTMzMjZcdTMzMjNcdTMzMmJcdTMzNGFcdTMzM2JcdTMzOWNcdTMzOWRcdTMzOWVcdTMzOGVcdTMzOGZcdTMzYzRcdTMzYTFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTMzN2JcdWZmZmRcdTMwMWRcdTMwMWZcdTIx'@;
put 'MTZcdTMzY2RcdTIxMjFcdTMyYTRcdTMyYTVcdTMyYTZcdTMyYTdcdTMyYThcdTMyMzFcdTMyMzJcdTMyMzlcdTMzN2VcdTMzN2RcdTMzN2NcdTIyNTJcdTIyNjFcdTIyMmJcdTIyMmVcdTIyMTFcdTIyMWFcdTIyYTVcdTIyMjBcdTIyMWZcdTIyYmZcdTIyMzVcdTIyMjlcdTIyMmFcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxMzVdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzEzNV1bZ10uY2hhckNvZGVBdCgwKSYmKElb'@;
put 'X1sxMzVdW2ddXT0zNDU2MCtnLHlbMzQ1NjArZ109X1sxMzVdW2ddKTtmb3IoX1sxMzZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdTRlOWNcdTU1MTZcdTVhMDNcdTk2M2ZcdTU0YzBcdTYxMWJcdTYzMjhcdTU5ZjZcdTkwMjJcdTg0NzVcdTgzMWNcdTdhNTBcdTYwYWFcdTYzZTFcdTZlMjVcdTY1ZWRcdTg0NjZcdTgyYTZcdTliZjVcdTY4OTNcdTU3MjdcdTY1YTFcdTYyNzFcdTViOWJcdTU5'@;
put 'ZDBcdTg2N2JcdTk4ZjRcdTdkNjJcdTdkYmVcdTliOGVcdTYyMTZcdTdjOWZcdTg4YjdcdTViODlcdTVlYjVcdTYzMDlcdTY2OTdcdTY4NDhcdTk1YzdcdTk3OGRcdTY3NGZcdTRlZTVcdTRmMGFcdTRmNGRcdTRmOWRcdTUwNDlcdTU2ZjJcdTU5MzdcdTU5ZDRcdTVhMDFcdTVjMDlcdTYwZGZc'@;
put 'dTYxMGZcdTYxNzBcdTY2MTNcdTY5MDVcdTcwYmFcdTc1NGZcdTc1NzBcdTc5ZmJcdTdkYWRcdTdkZWZcdTgwYzNcdTg0MGVcdTg4NjNcdThiMDJcdTkwNTVcdTkwN2FcdTUzM2JcdTRlOTVcdTRlYTVcdTU3ZGZcdTgwYjJcdTkwYzFcdTc4ZWZcdTRlMDBcdTU4ZjFcdTZlYTJcdTkwMzhcdTdh'@;
put 'MzJcdTgzMjhcdTgyOGJcdTljMmZcdTUxNDFcdTUzNzBcdTU0YmRcdTU0ZTFcdTU2ZTBcdTU5ZmJcdTVmMTVcdTk4ZjJcdTZkZWJcdTgwZTRcdTg1MmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxMzZdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzEzNl1bZ10uY2hhckNv'@;
put 'ZGVBdCgwKSYmKElbX1sxMzZdW2ddXT0zNDgxNitnLHlbMzQ4MTYrZ109X1sxMzZdW2ddKTtmb3IoX1sxMzddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTk2NjJcdTk2NzBcdTk2YTBcdTk3ZmJcdTU0MGJcdTUzZjNcdTViODdcdTcw'@;
put 'Y2ZcdTdmYmRcdThmYzJcdTk2ZThcdTUzNmZcdTlkNWNcdTdhYmFcdTRlMTFcdTc4OTNcdTgxZmNcdTZlMjZcdTU2MThcdTU1MDRcdTZiMWRcdTg1MWFcdTljM2JcdTU5ZTVcdTUzYTlcdTZkNjZcdTc0ZGNcdTk1OGZcdTU2NDJcdTRlOTFcdTkwNGJcdTk2ZjJcdTgzNGZcdTk5MGNcdTUzZTFc'@;
put 'dTU1YjZcdTViMzBcdTVmNzFcdTY2MjBcdTY2ZjNcdTY4MDRcdTZjMzhcdTZjZjNcdTZkMjlcdTc0NWJcdTc2YzhcdTdhNGVcdTk4MzRcdTgyZjFcdTg4NWJcdThhNjBcdTkyZWRcdTZkYjJcdTc1YWJcdTc2Y2FcdTk5YzVcdTYwYTZcdThiMDFcdThkOGFcdTk1YjJcdTY5OGVcdTUzYWRcdTUx'@;
put 'ODZcdWZmZmRcdTU3MTJcdTU4MzBcdTU5NDRcdTViYjRcdTVlZjZcdTYwMjhcdTYzYTlcdTYzZjRcdTZjYmZcdTZmMTRcdTcwOGVcdTcxMTRcdTcxNTlcdTcxZDVcdTczM2ZcdTdlMDFcdTgyNzZcdTgyZDFcdTg1OTdcdTkwNjBcdTkyNWJcdTlkMWJcdTU4NjlcdTY1YmNcdTZjNWFcdTc1MjVc'@;
put 'dTUxZjlcdTU5MmVcdTU5NjVcdTVmODBcdTVmZGNcdTYyYmNcdTY1ZmFcdTZhMmFcdTZiMjdcdTZiYjRcdTczOGJcdTdmYzFcdTg5NTZcdTlkMmNcdTlkMGVcdTllYzRcdTVjYTFcdTZjOTZcdTgzN2JcdTUxMDRcdTVjNGJcdTYxYjZcdTgxYzZcdTY4NzZcdTcyNjFcdTRlNTlcdTRmZmFcdTUz'@;
put 'NzhcdTYwNjlcdTZlMjlcdTdhNGZcdTk3ZjNcdTRlMGJcdTUzMTZcdTRlZWVcdTRmNTVcdTRmM2RcdTRmYTFcdTRmNzNcdTUyYTBcdTUzZWZcdTU2MDlcdTU5MGZcdTVhYzFcdTViYjZcdTViZTFcdTc5ZDFcdTY2ODdcdTY3OWNcdTY3YjZcdTZiNGNcdTZjYjNcdTcwNmJcdTczYzJcdTc5OGRc'@;
put 'dTc5YmVcdTdhM2NcdTdiODdcdTgyYjFcdTgyZGJcdTgzMDRcdTgzNzdcdTgzZWZcdTgzZDNcdTg3NjZcdThhYjJcdTU2MjlcdThjYThcdThmZTZcdTkwNGVcdTk3MWVcdTg2OGFcdTRmYzRcdTVjZThcdTYyMTFcdTcyNTlcdTc1M2JcdTgxZTVcdTgyYmRcdTg2ZmVcdThjYzBcdTk2YzVcdTk5'@;
put 'MTNcdTk5ZDVcdTRlY2JcdTRmMWFcdTg5ZTNcdTU2ZGVcdTU4NGFcdTU4Y2FcdTVlZmJcdTVmZWJcdTYwMmFcdTYwOTRcdTYwNjJcdTYxZDBcdTYyMTJcdTYyZDBcdTY1MzlcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxMzddLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzEz'@;
put 'N11bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxMzddW2ddXT0zNTA3MitnLHlbMzUwNzIrZ109X1sxMzddW2ddKTtmb3IoX1sxMzhdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTliNDFcdTY2NjZcdTY4YjBcdTZkNzdcdTcwNzBcdTc1'@;
put 'NGNcdTc2ODZcdTdkNzVcdTgyYTVcdTg3ZjlcdTk1OGJcdTk2OGVcdThjOWRcdTUxZjFcdTUyYmVcdTU5MTZcdTU0YjNcdTViYjNcdTVkMTZcdTYxNjhcdTY5ODJcdTZkYWZcdTc4OGRcdTg0Y2JcdTg4NTdcdThhNzJcdTkzYTdcdTlhYjhcdTZkNmNcdTk5YThcdTg2ZDlcdTU3YTNcdTY3ZmZc'@;
put 'dTg2Y2VcdTkyMGVcdTUyODNcdTU2ODdcdTU0MDRcdTVlZDNcdTYyZTFcdTY0YjlcdTY4M2NcdTY4MzhcdTZiYmJcdTczNzJcdTc4YmFcdTdhNmJcdTg5OWFcdTg5ZDJcdThkNmJcdThmMDNcdTkwZWRcdTk1YTNcdTk2OTRcdTk3NjlcdTViNjZcdTVjYjNcdTY5N2RcdTk4NGRcdTk4NGVcdTYz'@;
put 'OWJcdTdiMjBcdTZhMmJcdWZmZmRcdTZhN2ZcdTY4YjZcdTljMGRcdTZmNWZcdTUyNzJcdTU1OWRcdTYwNzBcdTYyZWNcdTZkM2JcdTZlMDdcdTZlZDFcdTg0NWJcdTg5MTBcdThmNDRcdTRlMTRcdTljMzlcdTUzZjZcdTY5MWJcdTZhM2FcdTk3ODRcdTY4MmFcdTUxNWNcdTdhYzNcdTg0YjJc'@;
put 'dTkxZGNcdTkzOGNcdTU2NWJcdTlkMjhcdTY4MjJcdTgzMDVcdTg0MzFcdTdjYTVcdTUyMDhcdTgyYzVcdTc0ZTZcdTRlN2VcdTRmODNcdTUxYTBcdTViZDJcdTUyMGFcdTUyZDhcdTUyZTdcdTVkZmJcdTU1OWFcdTU4MmFcdTU5ZTZcdTViOGNcdTViOThcdTViZGJcdTVlNzJcdTVlNzlcdTYw'@;
put 'YTNcdTYxMWZcdTYxNjNcdTYxYmVcdTYzZGJcdTY1NjJcdTY3ZDFcdTY4NTNcdTY4ZmFcdTZiM2VcdTZiNTNcdTZjNTdcdTZmMjJcdTZmOTdcdTZmNDVcdTc0YjBcdTc1MThcdTc2ZTNcdTc3MGJcdTdhZmZcdTdiYTFcdTdjMjFcdTdkZTlcdTdmMzZcdTdmZjBcdTgwOWRcdTgyNjZcdTgzOWVc'@;
put 'dTg5YjNcdThhY2NcdThjYWJcdTkwODRcdTk0NTFcdTk1OTNcdTk1OTFcdTk1YTJcdTk2NjVcdTk3ZDNcdTk5MjhcdTgyMThcdTRlMzhcdTU0MmJcdTVjYjhcdTVkY2NcdTczYTlcdTc2NGNcdTc3M2NcdTVjYTlcdTdmZWJcdThkMGJcdTk2YzFcdTk4MTFcdTk4NTRcdTk4NThcdTRmMDFcdTRm'@;
put 'MGVcdTUzNzFcdTU1OWNcdTU2NjhcdTU3ZmFcdTU5NDdcdTViMDlcdTViYzRcdTVjOTBcdTVlMGNcdTVlN2VcdTVmY2NcdTYzZWVcdTY3M2FcdTY1ZDdcdTY1ZTJcdTY3MWZcdTY4Y2JcdTY4YzRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxMzhdLmxlbmd0aDsrK2cp'@;
put 'NjU1MzMhPT1fWzEzOF1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxMzhdW2ddXT0zNTMyOCtnLHlbMzUzMjgrZ109X1sxMzhdW2ddKTtmb3IoX1sxMzldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZhNWZcdTVlMzBcdTZiYzVcdTZj'@;
put 'MTdcdTZjN2RcdTc1N2ZcdTc5NDhcdTViNjNcdTdhMDBcdTdkMDBcdTVmYmRcdTg5OGZcdThhMThcdThjYjRcdThkNzdcdThlY2NcdThmMWRcdTk4ZTJcdTlhMGVcdTliM2NcdTRlODBcdTUwN2RcdTUxMDBcdTU5OTNcdTViOWNcdTYyMmZcdTYyODBcdTY0ZWNcdTZiM2FcdTcyYTBcdTc1OTFc'@;
put 'dTc5NDdcdTdmYTlcdTg3ZmJcdThhYmNcdThiNzBcdTYzYWNcdTgzY2FcdTk3YTBcdTU0MDlcdTU0MDNcdTU1YWJcdTY4NTRcdTZhNThcdThhNzBcdTc4MjdcdTY3NzVcdTllY2RcdTUzNzRcdTViYTJcdTgxMWFcdTg2NTBcdTkwMDZcdTRlMThcdTRlNDVcdTRlYzdcdTRmMTFcdTUzY2FcdTU0'@;
put 'MzhcdTViYWVcdTVmMTNcdTYwMjVcdTY1NTFcdWZmZmRcdTY3M2RcdTZjNDJcdTZjNzJcdTZjZTNcdTcwNzhcdTc0MDNcdTdhNzZcdTdhYWVcdTdiMDhcdTdkMWFcdTdjZmVcdTdkNjZcdTY1ZTdcdTcyNWJcdTUzYmJcdTVjNDVcdTVkZThcdTYyZDJcdTYyZTBcdTYzMTlcdTZlMjBcdTg2NWFc'@;
put 'dThhMzFcdThkZGRcdTkyZjhcdTZmMDFcdTc5YTZcdTliNWFcdTRlYThcdTRlYWJcdTRlYWNcdTRmOWJcdTRmYTBcdTUwZDFcdTUxNDdcdTdhZjZcdTUxNzFcdTUxZjZcdTUzNTRcdTUzMjFcdTUzN2ZcdTUzZWJcdTU1YWNcdTU4ODNcdTVjZTFcdTVmMzdcdTVmNGFcdTYwMmZcdTYwNTBcdTYw'@;
put 'NmRcdTYzMWZcdTY1NTlcdTZhNGJcdTZjYzFcdTcyYzJcdTcyZWRcdTc3ZWZcdTgwZjhcdTgxMDVcdTgyMDhcdTg1NGVcdTkwZjdcdTkzZTFcdTk3ZmZcdTk5NTdcdTlhNWFcdTRlZjBcdTUxZGRcdTVjMmRcdTY2ODFcdTY5NmRcdTVjNDBcdTY2ZjJcdTY5NzVcdTczODlcdTY4NTBcdTdjODFc'@;
put 'dTUwYzVcdTUyZTRcdTU3NDdcdTVkZmVcdTkzMjZcdTY1YTRcdTZiMjNcdTZiM2RcdTc0MzRcdTc5ODFcdTc5YmRcdTdiNGJcdTdkY2FcdTgyYjlcdTgzY2NcdTg4N2ZcdTg5NWZcdThiMzlcdThmZDFcdTkxZDFcdTU0MWZcdTkyODBcdTRlNWRcdTUwMzZcdTUzZTVcdTUzM2FcdTcyZDdcdTcz'@;
put 'OTZcdTc3ZTlcdTgyZTZcdThlYWZcdTk5YzZcdTk5YzhcdTk5ZDJcdTUxNzdcdTYxMWFcdTg2NWVcdTU1YjBcdTdhN2FcdTUwNzZcdTViZDNcdTkwNDdcdTk2ODVcdTRlMzJcdTZhZGJcdTkxZTdcdTVjNTFcdTVjNDhcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxMzld'@;
put 'Lmxlbmd0aDsrK2cpNjU1MzMhPT1fWzEzOV1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxMzldW2ddXT0zNTU4NCtnLHlbMzU1ODQrZ109X1sxMzldW2ddKTtmb3IoX1sxNDBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTYzOThcdTdh'@;
put 'OWZcdTZjOTNcdTk3NzRcdThmNjFcdTdhYWFcdTcxOGFcdTk2ODhcdTdjODJcdTY4MTdcdTdlNzBcdTY4NTFcdTkzNmNcdTUyZjJcdTU0MWJcdTg1YWJcdThhMTNcdTdmYTRcdThlY2RcdTkwZTFcdTUzNjZcdTg4ODhcdTc5NDFcdTRmYzJcdTUwYmVcdTUyMTFcdTUxNDRcdTU1NTNcdTU3MmRc'@;
put 'dTczZWFcdTU3OGJcdTU5NTFcdTVmNjJcdTVmODRcdTYwNzVcdTYxNzZcdTYxNjdcdTYxYTlcdTYzYjJcdTY0M2FcdTY1NmNcdTY2NmZcdTY4NDJcdTZlMTNcdTc1NjZcdTdhM2RcdTdjZmJcdTdkNGNcdTdkOTlcdTdlNGJcdTdmNmJcdTgzMGVcdTgzNGFcdTg2Y2RcdThhMDhcdThhNjNcdThi'@;
put 'NjZcdThlZmRcdTk4MWFcdTlkOGZcdTgyYjhcdThmY2VcdTliZThcdWZmZmRcdTUyODdcdTYyMWZcdTY0ODNcdTZmYzBcdTk2OTlcdTY4NDFcdTUwOTFcdTZiMjBcdTZjN2FcdTZmNTRcdTdhNzRcdTdkNTBcdTg4NDBcdThhMjNcdTY3MDhcdTRlZjZcdTUwMzlcdTUwMjZcdTUwNjVcdTUxN2Nc'@;
put 'dTUyMzhcdTUyNjNcdTU1YTdcdTU3MGZcdTU4MDVcdTVhY2NcdTVlZmFcdTYxYjJcdTYxZjhcdTYyZjNcdTYzNzJcdTY5MWNcdTZhMjlcdTcyN2RcdTcyYWNcdTczMmVcdTc4MTRcdTc4NmZcdTdkNzlcdTc3MGNcdTgwYTlcdTg5OGJcdThiMTlcdThjZTJcdThlZDJcdTkwNjNcdTkzNzVcdTk2'@;
put 'N2FcdTk4NTVcdTlhMTNcdTllNzhcdTUxNDNcdTUzOWZcdTUzYjNcdTVlN2JcdTVmMjZcdTZlMWJcdTZlOTBcdTczODRcdTczZmVcdTdkNDNcdTgyMzdcdThhMDBcdThhZmFcdTk2NTBcdTRlNGVcdTUwMGJcdTUzZTRcdTU0N2NcdTU2ZmFcdTU5ZDFcdTViNjRcdTVkZjFcdTVlYWJcdTVmMjdc'@;
put 'dTYyMzhcdTY1NDVcdTY3YWZcdTZlNTZcdTcyZDBcdTdjY2FcdTg4YjRcdTgwYTFcdTgwZTFcdTgzZjBcdTg2NGVcdThhODdcdThkZThcdTkyMzdcdTk2YzdcdTk4NjdcdTlmMTNcdTRlOTRcdTRlOTJcdTRmMGRcdTUzNDhcdTU0NDlcdTU0M2VcdTVhMmZcdTVmOGNcdTVmYTFcdTYwOWZcdTY4'@;
put 'YTdcdTZhOGVcdTc0NWFcdTc4ODFcdThhOWVcdThhYTRcdThiNzdcdTkxOTBcdTRlNWVcdTliYzlcdTRlYTRcdTRmN2NcdTRmYWZcdTUwMTlcdTUwMTZcdTUxNDlcdTUxNmNcdTUyOWZcdTUyYjlcdTUyZmVcdTUzOWFcdTUzZTNcdTU0MTFcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxn'@;
put 'PTA7ZyE9X1sxNDBdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE0MF1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxNDBdW2ddXT0zNTg0MCtnLHlbMzU4NDArZ109X1sxNDBdW2ddKTtmb3IoX1sxNDFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdTU0MGVcdTU1ODlcdTU3NTFcdTU3YTJcdTU5N2RcdTViNTRcdTViNWRcdTViOGZcdTVkZTVcdTVkZTdcdTVkZjdcdTVlNzhcdTVlODNcdTVlOWFcdTVlYjdcdTVmMThcdTYwNTJcdTYxNGNcdTYyOTdcdTYyZDhcdTYzYTdcdTY1M2JcdTY2MDJcdTY2NDNcdTY2ZjRcdTY3NmRcdTY4MjFc'@;
put 'dTY4OTdcdTY5Y2JcdTZjNWZcdTZkMmFcdTZkNjlcdTZlMmZcdTZlOWRcdTc1MzJcdTc2ODdcdTc4NmNcdTdhM2ZcdTdjZTBcdTdkMDVcdTdkMThcdTdkNWVcdTdkYjFcdTgwMTVcdTgwMDNcdTgwYWZcdTgwYjFcdTgxNTRcdTgxOGZcdTgyMmFcdTgzNTJcdTg4NGNcdTg4NjFcdThiMWJcdThj'@;
put 'YTJcdThjZmNcdTkwY2FcdTkxNzVcdTkyNzFcdTc4M2ZcdTkyZmNcdTk1YTRcdTk2NGRcdWZmZmRcdTk4MDVcdTk5OTlcdTlhZDhcdTlkM2JcdTUyNWJcdTUyYWJcdTUzZjdcdTU0MDhcdTU4ZDVcdTYyZjdcdTZmZTBcdThjNmFcdThmNWZcdTllYjlcdTUxNGJcdTUyM2JcdTU0NGFcdTU2ZmRc'@;
put 'dTdhNDBcdTkxNzdcdTlkNjBcdTllZDJcdTczNDRcdTZmMDlcdTgxNzBcdTc1MTFcdTVmZmRcdTYwZGFcdTlhYThcdTcyZGJcdThmYmNcdTZiNjRcdTk4MDNcdTRlY2FcdTU2ZjBcdTU3NjRcdTU4YmVcdTVhNWFcdTYwNjhcdTYxYzdcdTY2MGZcdTY2MDZcdTY4MzlcdTY4YjFcdTZkZjdcdTc1'@;
put 'ZDVcdTdkM2FcdTgyNmVcdTliNDJcdTRlOWJcdTRmNTBcdTUzYzlcdTU1MDZcdTVkNmZcdTVkZTZcdTVkZWVcdTY3ZmJcdTZjOTlcdTc0NzNcdTc4MDJcdThhNTBcdTkzOTZcdTg4ZGZcdTU3NTBcdTVlYTdcdTYzMmJcdTUwYjVcdTUwYWNcdTUxOGRcdTY3MDBcdTU0YzlcdTU4NWVcdTU5YmJc'@;
put 'dTViYjBcdTVmNjlcdTYyNGRcdTYzYTFcdTY4M2RcdTZiNzNcdTZlMDhcdTcwN2RcdTkxYzdcdTcyODBcdTc4MTVcdTc4MjZcdTc5NmRcdTY1OGVcdTdkMzBcdTgzZGNcdTg4YzFcdThmMDlcdTk2OWJcdTUyNjRcdTU3MjhcdTY3NTBcdTdmNmFcdThjYTFcdTUxYjRcdTU3NDJcdTk2MmFcdTU4'@;
put 'M2FcdTY5OGFcdTgwYjRcdTU0YjJcdTVkMGVcdTU3ZmNcdTc4OTVcdTlkZmFcdTRmNWNcdTUyNGFcdTU0OGJcdTY0M2VcdTY2MjhcdTY3MTRcdTY3ZjVcdTdhODRcdTdiNTZcdTdkMjJcdTkzMmZcdTY4NWNcdTliYWRcdTdiMzlcdTUzMTlcdTUxOGFcdTUyMzdcdWZmZmRcdWZmZmRcdWZmZmQi'@;
put 'LnNwbGl0KCIiKSxnPTA7ZyE9X1sxNDFdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE0MV1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxNDFdW2ddXT0zNjA5NitnLHlbMzYwOTYrZ109X1sxNDFdW2ddKTtmb3IoX1sxNDJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdTViZGZcdTYyZjZcdTY0YWVcdTY0ZTZcdTY3MmRcdTZiYmFcdTg1YTlcdTk2ZDFcdTc2OTBcdTliZDZcdTYzNGNcdTkzMDZcdTliYWJcdTc2YmZcdTY2NTJcdTRlMDlcdTUwOThcdTUzYzJcdTVjNzFcdTYwZThcdTY0OTJcdTY1NjNcdTY4NWZcdTcxZTZcdTczY2Fc'@;
put 'dTc1MjNcdTdiOTdcdTdlODJcdTg2OTVcdThiODNcdThjZGJcdTkxNzhcdTk5MTBcdTY1YWNcdTY2YWJcdTZiOGJcdTRlZDVcdTRlZDRcdTRmM2FcdTRmN2ZcdTUyM2FcdTUzZjhcdTUzZjJcdTU1ZTNcdTU2ZGJcdTU4ZWJcdTU5Y2JcdTU5YzlcdTU5ZmZcdTViNTBcdTVjNGRcdTVlMDJcdTVl'@;
put 'MmJcdTVmZDdcdTYwMWRcdTYzMDdcdTY1MmZcdTViNWNcdTY1YWZcdTY1YmRcdTY1ZThcdTY3OWRcdTZiNjJcdWZmZmRcdTZiN2JcdTZjMGZcdTczNDVcdTc5NDlcdTc5YzFcdTdjZjhcdTdkMTlcdTdkMmJcdTgwYTJcdTgxMDJcdTgxZjNcdTg5OTZcdThhNWVcdThhNjlcdThhNjZcdThhOGNc'@;
put 'dThhZWVcdThjYzdcdThjZGNcdTk2Y2NcdTk4ZmNcdTZiNmZcdTRlOGJcdTRmM2NcdTRmOGRcdTUxNTBcdTViNTdcdTViZmFcdTYxNDhcdTYzMDFcdTY2NDJcdTZiMjFcdTZlY2JcdTZjYmJcdTcyM2VcdTc0YmRcdTc1ZDRcdTc4YzFcdTc5M2FcdTgwMGNcdTgwMzNcdTgxZWFcdTg0OTRcdThm'@;
put 'OWVcdTZjNTBcdTllN2ZcdTVmMGZcdThiNThcdTlkMmJcdTdhZmFcdThlZjhcdTViOGRcdTk2ZWJcdTRlMDNcdTUzZjFcdTU3ZjdcdTU5MzFcdTVhYzlcdTViYTRcdTYwODlcdTZlN2ZcdTZmMDZcdTc1YmVcdThjZWFcdTViOWZcdTg1MDBcdTdiZTBcdTUwNzJcdTY3ZjRcdTgyOWRcdTVjNjFc'@;
put 'dTg1NGFcdTdlMWVcdTgyMGVcdTUxOTlcdTVjMDRcdTYzNjhcdThkNjZcdTY1OWNcdTcxNmVcdTc5M2VcdTdkMTdcdTgwMDVcdThiMWRcdThlY2FcdTkwNmVcdTg2YzdcdTkwYWFcdTUwMWZcdTUyZmFcdTVjM2FcdTY3NTNcdTcwN2NcdTcyMzVcdTkxNGNcdTkxYzhcdTkzMmJcdTgyZTVcdTVi'@;
put 'YzJcdTVmMzFcdTYwZjlcdTRlM2JcdTUzZDZcdTViODhcdTYyNGJcdTY3MzFcdTZiOGFcdTcyZTlcdTczZTBcdTdhMmVcdTgxNmJcdThkYTNcdTkxNTJcdTk5OTZcdTUxMTJcdTUzZDdcdTU0NmFcdTViZmZcdTYzODhcdTZhMzlcdTdkYWNcdTk3MDBcdTU2ZGFcdTUzY2VcdTU0NjhcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxNDJdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE0Ml1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxNDJdW2ddXT0zNjM1MitnLHlbMzYzNTIrZ109X1sxNDJdW2ddKTtmb3IoX1sxNDNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTViOTdcdTVjMzFcdTVkZGVcdTRmZWVcdTYxMDFcdTYyZmVcdTZkMzJcdTc5YzBcdTc5Y2JcdTdkNDJcdTdlNGRcdTdmZDJcdTgxZWRcdTgyMWZcdTg0OTBcdTg4NDZcdTg5NzJcdThiOTBcdThlNzRcdThmMmZcdTkwMzFcdTkxNGJcdTkxNmNc'@;
put 'dTk2YzZcdTkxOWNcdTRlYzBcdTRmNGZcdTUxNDVcdTUzNDFcdTVmOTNcdTYyMGVcdTY3ZDRcdTZjNDFcdTZlMGJcdTczNjNcdTdlMjZcdTkxY2RcdTkyODNcdTUzZDRcdTU5MTlcdTViYmZcdTZkZDFcdTc5NWRcdTdlMmVcdTdjOWJcdTU4N2VcdTcxOWZcdTUxZmFcdTg4NTNcdThmZjBcdTRm'@;
put 'Y2FcdTVjZmJcdTY2MjVcdTc3YWNcdTdhZTNcdTgyMWNcdTk5ZmZcdTUxYzZcdTVmYWFcdTY1ZWNcdTY5NmZcdTZiODlcdTZkZjNcdWZmZmRcdTZlOTZcdTZmNjRcdTc2ZmVcdTdkMTRcdTVkZTFcdTkwNzVcdTkxODdcdTk4MDZcdTUxZTZcdTUyMWRcdTYyNDBcdTY2OTFcdTY2ZDlcdTZlMWFc'@;
put 'dTVlYjZcdTdkZDJcdTdmNzJcdTY2ZjhcdTg1YWZcdTg1ZjdcdThhZjhcdTUyYTlcdTUzZDlcdTU5NzNcdTVlOGZcdTVmOTBcdTYwNTVcdTkyZTRcdTk2NjRcdTUwYjdcdTUxMWZcdTUyZGRcdTUzMjBcdTUzNDdcdTUzZWNcdTU0ZThcdTU1NDZcdTU1MzFcdTU2MTdcdTU5NjhcdTU5YmVcdTVh'@;
put 'M2NcdTViYjVcdTVjMDZcdTVjMGZcdTVjMTFcdTVjMWFcdTVlODRcdTVlOGFcdTVlZTBcdTVmNzBcdTYyN2ZcdTYyODRcdTYyZGJcdTYzOGNcdTYzNzdcdTY2MDdcdTY2MGNcdTY2MmRcdTY2NzZcdTY3N2VcdTY4YTJcdTZhMWZcdTZhMzVcdTZjYmNcdTZkODhcdTZlMDlcdTZlNThcdTcxM2Nc'@;
put 'dTcxMjZcdTcxNjdcdTc1YzdcdTc3MDFcdTc4NWRcdTc5MDFcdTc5NjVcdTc5ZjBcdTdhZTBcdTdiMTFcdTdjYTdcdTdkMzlcdTgwOTZcdTgzZDZcdTg0OGJcdTg1NDlcdTg4NWRcdTg4ZjNcdThhMWZcdThhM2NcdThhNTRcdThhNzNcdThjNjFcdThjZGVcdTkxYTRcdTkyNjZcdTkzN2VcdTk0'@;
put 'MThcdTk2OWNcdTk3OThcdTRlMGFcdTRlMDhcdTRlMWVcdTRlNTdcdTUxOTdcdTUyNzBcdTU3Y2VcdTU4MzRcdTU4Y2NcdTViMjJcdTVlMzhcdTYwYzVcdTY0ZmVcdTY3NjFcdTY3NTZcdTZkNDRcdTcyYjZcdTc1NzNcdTdhNjNcdTg0YjhcdThiNzJcdTkxYjhcdTkzMjBcdTU2MzFcdTU3ZjRc'@;
put 'dTk4ZmVcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxNDNdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE0M11bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxNDNdW2ddXT0zNjYwOCtnLHlbMzY2MDgrZ109X1sxNDNdW2ddKTtmb3IoX1sxNDRdPSJcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTYyZWRcdTY5MGRcdTZiOTZcdTcxZWRcdTdlNTRcdTgwNzdcdTgyNzJcdTg5ZTZcdTk4ZGZcdTg3NTVcdThmYjFcdTVjM2JcdTRmMzhcdTRmZTFcdTRmYjVcdTU1MDdcdTVhMjBcdTViZGRcdTViZTlcdTVmYzNcdTYxNGVc'@;
put 'dTYzMmZcdTY1YjBcdTY2NGJcdTY4ZWVcdTY5OWJcdTZkNzhcdTZkZjFcdTc1MzNcdTc1YjlcdTc3MWZcdTc5NWVcdTc5ZTZcdTdkMzNcdTgxZTNcdTgyYWZcdTg1YWFcdTg5YWFcdThhM2FcdThlYWJcdThmOWJcdTkwMzJcdTkxZGRcdTk3MDdcdTRlYmFcdTRlYzFcdTUyMDNcdTU4NzVcdTU4'@;
put 'ZWNcdTVjMGJcdTc1MWFcdTVjM2RcdTgxNGVcdThhMGFcdThmYzVcdTk2NjNcdTk3NmRcdTdiMjVcdThhY2ZcdTk4MDhcdTkxNjJcdTU2ZjNcdTUzYThcdWZmZmRcdTkwMTdcdTU0MzlcdTU3ODJcdTVlMjVcdTYzYThcdTZjMzRcdTcwOGFcdTc3NjFcdTdjOGJcdTdmZTBcdTg4NzBcdTkwNDJc'@;
put 'dTkxNTRcdTkzMTBcdTkzMThcdTk2OGZcdTc0NWVcdTlhYzRcdTVkMDdcdTVkNjlcdTY1NzBcdTY3YTJcdThkYThcdTk2ZGJcdTYzNmVcdTY3NDlcdTY5MTlcdTgzYzVcdTk4MTdcdTk2YzBcdTg4ZmVcdTZmODRcdTY0N2FcdTViZjhcdTRlMTZcdTcwMmNcdTc1NWRcdTY2MmZcdTUxYzRcdTUy'@;
put 'MzZcdTUyZTJcdTU5ZDNcdTVmODFcdTYwMjdcdTYyMTBcdTY1M2ZcdTY1NzRcdTY2MWZcdTY2NzRcdTY4ZjJcdTY4MTZcdTZiNjNcdTZlMDVcdTcyNzJcdTc1MWZcdTc2ZGJcdTdjYmVcdTgwNTZcdTU4ZjBcdTg4ZmRcdTg5N2ZcdThhYTBcdThhOTNcdThhY2JcdTkwMWRcdTkxOTJcdTk3NTJc'@;
put 'dTk3NTlcdTY1ODlcdTdhMGVcdTgxMDZcdTk2YmJcdTVlMmRcdTYwZGNcdTYyMWFcdTY1YTVcdTY2MTRcdTY3OTBcdTc3ZjNcdTdhNGRcdTdjNGRcdTdlM2VcdTgxMGFcdThjYWNcdThkNjRcdThkZTFcdThlNWZcdTc4YTlcdTUyMDdcdTYyZDlcdTYzYTVcdTY0NDJcdTYyOThcdThhMmRcdTdh'@;
put 'ODNcdTdiYzBcdThhYWNcdTk2ZWFcdTdkNzZcdTgyMGNcdTg3NDlcdTRlZDlcdTUxNDhcdTUzNDNcdTUzNjBcdTViYTNcdTVjMDJcdTVjMTZcdTVkZGRcdTYyMjZcdTYyNDdcdTY0YjBcdTY4MTNcdTY4MzRcdTZjYzlcdTZkNDVcdTZkMTdcdTY3ZDNcdTZmNWNcdTcxNGVcdTcxN2RcdTY1Y2Jc'@;
put 'dTdhN2ZcdTdiYWRcdTdkZGFcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxNDRdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE0NF1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxNDRdW2ddXT0zNjg2NCtnLHlbMzY4NjQrZ109X1sxNDRdW2ddKTtmb3IoX1sxNDVdPSJcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTdlNGFcdTdmYThcdTgxN2FcdTgyMWJcdTgyMzlcdTg1YTZcdThhNmVcdThjY2VcdThkZjVcdTkwNzhcdTkwNzdcdTkyYWRcdTkyOTFcdTk1ODNcdTliYWVcdTUyNGRcdTU1ODRcdTZmMzhcdTcxMzZc'@;
put 'dTUxNjhcdTc5ODVcdTdlNTVcdTgxYjNcdTdjY2VcdTU2NGNcdTU4NTFcdTVjYThcdTYzYWFcdTY2ZmVcdTY2ZmRcdTY5NWFcdTcyZDlcdTc1OGZcdTc1OGVcdTc5MGVcdTc5NTZcdTc5ZGZcdTdjOTdcdTdkMjBcdTdkNDRcdTg2MDdcdThhMzRcdTk2M2JcdTkwNjFcdTlmMjBcdTUwZTdcdTUy'@;
put 'NzVcdTUzY2NcdTUzZTJcdTUwMDlcdTU1YWFcdTU4ZWVcdTU5NGZcdTcyM2RcdTViOGJcdTVjNjRcdTUzMWRcdTYwZTNcdTYwZjNcdTYzNWNcdTYzODNcdTYzM2ZcdTYzYmJcdWZmZmRcdTY0Y2RcdTY1ZTlcdTY2ZjlcdTVkZTNcdTY5Y2RcdTY5ZmRcdTZmMTVcdTcxZTVcdTRlODlcdTc1ZTlc'@;
put 'dTc2ZjhcdTdhOTNcdTdjZGZcdTdkY2ZcdTdkOWNcdTgwNjFcdTgzNDlcdTgzNThcdTg0NmNcdTg0YmNcdTg1ZmJcdTg4YzVcdThkNzBcdTkwMDFcdTkwNmRcdTkzOTdcdTk3MWNcdTlhMTJcdTUwY2ZcdTU4OTdcdTYxOGVcdTgxZDNcdTg1MzVcdThkMDhcdTkwMjBcdTRmYzNcdTUwNzRcdTUy'@;
put 'NDdcdTUzNzNcdTYwNmZcdTYzNDlcdTY3NWZcdTZlMmNcdThkYjNcdTkwMWZcdTRmZDdcdTVjNWVcdThjY2FcdTY1Y2ZcdTdkOWFcdTUzNTJcdTg4OTZcdTUxNzZcdTYzYzNcdTViNThcdTViNmJcdTVjMGFcdTY0MGRcdTY3NTFcdTkwNWNcdTRlZDZcdTU5MWFcdTU5MmFcdTZjNzBcdThhNTFc'@;
put 'dTU1M2VcdTU4MTVcdTU5YTVcdTYwZjBcdTYyNTNcdTY3YzFcdTgyMzVcdTY5NTVcdTk2NDBcdTk5YzRcdTlhMjhcdTRmNTNcdTU4MDZcdTViZmVcdTgwMTBcdTVjYjFcdTVlMmZcdTVmODVcdTYwMjBcdTYxNGJcdTYyMzRcdTY2ZmZcdTZjZjBcdTZlZGVcdTgwY2VcdTgxN2ZcdTgyZDRcdTg4'@;
put 'OGJcdThjYjhcdTkwMDBcdTkwMmVcdTk2OGFcdTllZGJcdTliZGJcdTRlZTNcdTUzZjBcdTU5MjdcdTdiMmNcdTkxOGRcdTk4NGNcdTlkZjlcdTZlZGRcdTcwMjdcdTUzNTNcdTU1NDRcdTViODVcdTYyNThcdTYyOWVcdTYyZDNcdTZjYTJcdTZmZWZcdTc0MjJcdThhMTdcdTk0MzhcdTZmYzFc'@;
put 'dThhZmVcdTgzMzhcdTUxZTdcdTg2ZjhcdTUzZWFcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxNDVdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE0NV1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxNDVdW2ddXT0zNzEyMCtnLHlbMzcxMjArZ109X1sxNDVdW2ddKTtmb3Io'@;
put 'X1sxNDZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTUzZTlcdTRmNDZcdTkwNTRcdThmYjBcdTU5NmFcdTgxMzFcdTVkZmRcdTdhZWFcdThmYmZcdTY4ZGFcdThjMzdcdTcyZjhcdTljNDhcdTZhM2RcdThhYjBcdTRlMzlcdTUzNThc'@;
put 'dTU2MDZcdTU3NjZcdTYyYzVcdTYzYTJcdTY1ZTZcdTZiNGVcdTZkZTFcdTZlNWJcdTcwYWRcdTc3ZWRcdTdhZWZcdTdiYWFcdTdkYmJcdTgwM2RcdTgwYzZcdTg2Y2JcdThhOTVcdTkzNWJcdTU2ZTNcdTU4YzdcdTVmM2VcdTY1YWRcdTY2OTZcdTZhODBcdTZiYjVcdTc1MzdcdThhYzdcdTUw'@;
put 'MjRcdTc3ZTVcdTU3MzBcdTVmMWJcdTYwNjVcdTY2N2FcdTZjNjBcdTc1ZjRcdTdhMWFcdTdmNmVcdTgxZjRcdTg3MThcdTkwNDVcdTk5YjNcdTdiYzlcdTc1NWNcdTdhZjlcdTdiNTFcdTg0YzRcdWZmZmRcdTkwMTBcdTc5ZTlcdTdhOTJcdTgzMzZcdTVhZTFcdTc3NDBcdTRlMmRcdTRlZjJc'@;
put 'dTViOTlcdTVmZTBcdTYyYmRcdTY2M2NcdTY3ZjFcdTZjZThcdTg2NmJcdTg4NzdcdThhM2JcdTkxNGVcdTkyZjNcdTk5ZDBcdTZhMTdcdTcwMjZcdTczMmFcdTgyZTdcdTg0NTdcdThjYWZcdTRlMDFcdTUxNDZcdTUxY2JcdTU1OGJcdTViZjVcdTVlMTZcdTVlMzNcdTVlODFcdTVmMTRcdTVm'@;
put 'MzVcdTVmNmJcdTVmYjRcdTYxZjJcdTYzMTFcdTY2YTJcdTY3MWRcdTZmNmVcdTcyNTJcdTc1M2FcdTc3M2FcdTgwNzRcdTgxMzlcdTgxNzhcdTg3NzZcdThhYmZcdThhZGNcdThkODVcdThkZjNcdTkyOWFcdTk1NzdcdTk4MDJcdTljZTVcdTUyYzVcdTYzNTdcdTc2ZjRcdTY3MTVcdTZjODhc'@;
put 'dTczY2RcdThjYzNcdTkzYWVcdTk2NzNcdTZkMjVcdTU4OWNcdTY5MGVcdTY5Y2NcdThmZmRcdTkzOWFcdTc1ZGJcdTkwMWFcdTU4NWFcdTY4MDJcdTYzYjRcdTY5ZmJcdTRmNDNcdTZmMmNcdTY3ZDhcdThmYmJcdTg1MjZcdTdkYjRcdTkzNTRcdTY5M2ZcdTZmNzBcdTU3NmFcdTU4ZjdcdTVi'@;
put 'MmNcdTdkMmNcdTcyMmFcdTU0MGFcdTkxZTNcdTlkYjRcdTRlYWRcdTRmNGVcdTUwNWNcdTUwNzVcdTUyNDNcdThjOWVcdTU0NDhcdTU4MjRcdTViOWFcdTVlMWRcdTVlOTVcdTVlYWRcdTVlZjdcdTVmMWZcdTYwOGNcdTYyYjVcdTYzM2FcdTYzZDBcdTY4YWZcdTZjNDBcdTc4ODdcdTc5OGVc'@;
put 'dTdhMGJcdTdkZTBcdTgyNDdcdThhMDJcdThhZTZcdThlNDRcdTkwMTNcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxNDZdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE0Nl1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxNDZdW2ddXT0zNzM3NitnLHlbMzczNzYrZ109X1sx'@;
put 'NDZdW2ddKTtmb3IoX1sxNDddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTkwYjhcdTkxMmRcdTkxZDhcdTlmMGVcdTZjZTVcdTY0NThcdTY0ZTJcdTY1NzVcdTZlZjRcdTc2ODRcdTdiMWJcdTkwNjlcdTkzZDFcdTZlYmFcdTU0ZjJc'@;
put 'dTVmYjlcdTY0YTRcdThmNGRcdThmZWRcdTkyNDRcdTUxNzhcdTU4NmJcdTU5MjlcdTVjNTVcdTVlOTdcdTZkZmJcdTdlOGZcdTc1MWNcdThjYmNcdThlZTJcdTk4NWJcdTcwYjlcdTRmMWRcdTZiYmZcdTZmYjFcdTc1MzBcdTk2ZmJcdTUxNGVcdTU0MTBcdTU4MzVcdTU4NTdcdTU5YWNcdTVj'@;
put 'NjBcdTVmOTJcdTY1OTdcdTY3NWNcdTZlMjFcdTc2N2JcdTgzZGZcdThjZWRcdTkwMTRcdTkwZmRcdTkzNGRcdTc4MjVcdTc4M2FcdTUyYWFcdTVlYTZcdTU3MWZcdTU5NzRcdTYwMTJcdTUwMTJcdTUxNWFcdTUxYWNcdWZmZmRcdTUxY2RcdTUyMDBcdTU1MTBcdTU4NTRcdTU4NThcdTU5NTdc'@;
put 'dTViOTVcdTVjZjZcdTVkOGJcdTYwYmNcdTYyOTVcdTY0MmRcdTY3NzFcdTY4NDNcdTY4YmNcdTY4ZGZcdTc2ZDdcdTZkZDhcdTZlNmZcdTZkOWJcdTcwNmZcdTcxYzhcdTVmNTNcdTc1ZDhcdTc5NzdcdTdiNDlcdTdiNTRcdTdiNTJcdTdjZDZcdTdkNzFcdTUyMzBcdTg0NjNcdTg1NjlcdTg1'@;
put 'ZTRcdThhMGVcdThiMDRcdThjNDZcdThlMGZcdTkwMDNcdTkwMGZcdTk0MTlcdTk2NzZcdTk4MmRcdTlhMzBcdTk1ZDhcdTUwY2RcdTUyZDVcdTU0MGNcdTU4MDJcdTVjMGVcdTYxYTdcdTY0OWVcdTZkMWVcdTc3YjNcdTdhZTVcdTgwZjRcdTg0MDRcdTkwNTNcdTkyODVcdTVjZTBcdTlkMDdc'@;
put 'dTUzM2ZcdTVmOTdcdTVmYjNcdTZkOWNcdTcyNzlcdTc3NjNcdTc5YmZcdTdiZTRcdTZiZDJcdTcyZWNcdThhYWRcdTY4MDNcdTZhNjFcdTUxZjhcdTdhODFcdTY5MzRcdTVjNGFcdTljZjZcdTgyZWJcdTViYzVcdTkxNDlcdTcwMWVcdTU2NzhcdTVjNmZcdTYwYzdcdTY1NjZcdTZjOGNcdThj'@;
put 'NWFcdTkwNDFcdTk4MTNcdTU0NTFcdTY2YzdcdTkyMGRcdTU5NDhcdTkwYTNcdTUxODVcdTRlNGRcdTUxZWFcdTg1OTlcdThiMGVcdTcwNThcdTYzN2FcdTkzNGJcdTY5NjJcdTk5YjRcdTdlMDRcdTc1NzdcdTUzNTdcdTY5NjBcdThlZGZcdTk2ZTNcdTZjNWRcdTRlOGNcdTVjM2NcdTVmMTBc'@;
put 'dThmZTlcdTUzMDJcdThjZDFcdTgwODlcdTg2NzlcdTVlZmZcdTY1ZTVcdTRlNzNcdTUxNjVcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxNDddLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE0N11bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxNDddW2ddXT0zNzYzMitnLHlb'@;
put 'Mzc2MzIrZ109X1sxNDddW2ddKTtmb3IoX1sxNDhdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTU5ODJcdTVjM2ZcdTk3ZWVcdTRlZmJcdTU5OGFcdTVmY2RcdThhOGRcdTZmZTFcdTc5YjBcdTc5NjJcdTViZTdcdTg0NzFcdTczMmJc'@;
put 'dTcxYjFcdTVlNzRcdTVmZjVcdTYzN2JcdTY0OWFcdTcxYzNcdTdjOThcdTRlNDNcdTVlZmNcdTRlNGJcdTU3ZGNcdTU2YTJcdTYwYTlcdTZmYzNcdTdkMGRcdTgwZmRcdTgxMzNcdTgxYmZcdThmYjJcdTg5OTdcdTg2YTRcdTVkZjRcdTYyOGFcdTY0YWRcdTg5ODdcdTY3NzdcdTZjZTJcdTZk'@;
put 'M2VcdTc0MzZcdTc4MzRcdTVhNDZcdTdmNzVcdTgyYWRcdTk5YWNcdTRmZjNcdTVlYzNcdTYyZGRcdTYzOTJcdTY1NTdcdTY3NmZcdTc2YzNcdTcyNGNcdTgwY2NcdTgwYmFcdThmMjlcdTkxNGRcdTUwMGRcdTU3ZjlcdTVhOTJcdTY4ODVcdWZmZmRcdTY5NzNcdTcxNjRcdTcyZmRcdThjYjdc'@;
put 'dTU4ZjJcdThjZTBcdTk2NmFcdTkwMTlcdTg3N2ZcdTc5ZTRcdTc3ZTdcdTg0MjlcdTRmMmZcdTUyNjVcdTUzNWFcdTYyY2RcdTY3Y2ZcdTZjY2FcdTc2N2RcdTdiOTRcdTdjOTVcdTgyMzZcdTg1ODRcdThmZWJcdTY2ZGRcdTZmMjBcdTcyMDZcdTdlMWJcdTgzYWJcdTk5YzFcdTllYTZcdTUx'@;
put 'ZmRcdTdiYjFcdTc4NzJcdTdiYjhcdTgwODdcdTdiNDhcdTZhZThcdTVlNjFcdTgwOGNcdTc1NTFcdTc1NjBcdTUxNmJcdTkyNjJcdTZlOGNcdTc2N2FcdTkxOTdcdTlhZWFcdTRmMTBcdTdmNzBcdTYyOWNcdTdiNGZcdTk1YTVcdTljZTlcdTU2N2FcdTU4NTlcdTg2ZTRcdTk2YmNcdTRmMzRc'@;
put 'dTUyMjRcdTUzNGFcdTUzY2RcdTUzZGJcdTVlMDZcdTY0MmNcdTY1OTFcdTY3N2ZcdTZjM2VcdTZjNGVcdTcyNDhcdTcyYWZcdTczZWRcdTc1NTRcdTdlNDFcdTgyMmNcdTg1ZTlcdThjYTlcdTdiYzRcdTkxYzZcdTcxNjlcdTk4MTJcdTk4ZWZcdTYzM2RcdTY2NjlcdTc1NmFcdTc2ZTRcdTc4'@;
put 'ZDBcdTg1NDNcdTg2ZWVcdTUzMmFcdTUzNTFcdTU0MjZcdTU5ODNcdTVlODdcdTVmN2NcdTYwYjJcdTYyNDlcdTYyNzlcdTYyYWJcdTY1OTBcdTZiZDRcdTZjY2NcdTc1YjJcdTc2YWVcdTc4OTFcdTc5ZDhcdTdkY2JcdTdmNzdcdTgwYTVcdTg4YWJcdThhYjlcdThjYmJcdTkwN2ZcdTk3NWVc'@;
put 'dTk4ZGJcdTZhMGJcdTdjMzhcdTUwOTlcdTVjM2VcdTVmYWVcdTY3ODdcdTZiZDhcdTc0MzVcdTc3MDlcdTdmOGVcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxNDhdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE0OF1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxNDhdW2dd'@;
put 'XT0zNzg4OCtnLHlbMzc4ODgrZ109X1sxNDhdW2ddKTtmb3IoX1sxNDldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTlmM2JcdTY3Y2FcdTdhMTdcdTUzMzlcdTc1OGJcdTlhZWRcdTVmNjZcdTgxOWRcdTgzZjFcdTgwOThcdTVmM2Nc'@;
put 'dTVmYzVcdTc1NjJcdTdiNDZcdTkwM2NcdTY4NjdcdTU5ZWJcdTVhOWJcdTdkMTBcdTc2N2VcdThiMmNcdTRmZjVcdTVmNmFcdTZhMTlcdTZjMzdcdTZmMDJcdTc0ZTJcdTc5NjhcdTg4NjhcdThhNTVcdThjNzlcdTVlZGZcdTYzY2ZcdTc1YzVcdTc5ZDJcdTgyZDdcdTkzMjhcdTkyZjJcdTg0'@;
put 'OWNcdTg2ZWRcdTljMmRcdTU0YzFcdTVmNmNcdTY1OGNcdTZkNWNcdTcwMTVcdThjYTdcdThjZDNcdTk4M2JcdTY1NGZcdTc0ZjZcdTRlMGRcdTRlZDhcdTU3ZTBcdTU5MmJcdTVhNjZcdTViY2NcdTUxYThcdTVlMDNcdTVlOWNcdTYwMTZcdTYyNzZcdTY1NzdcdWZmZmRcdTY1YTdcdTY2NmVc'@;
put 'dTZkNmVcdTcyMzZcdTdiMjZcdTgxNTBcdTgxOWFcdTgyOTlcdThiNWNcdThjYTBcdThjZTZcdThkNzRcdTk2MWNcdTk2NDRcdTRmYWVcdTY0YWJcdTZiNjZcdTgyMWVcdTg0NjFcdTg1NmFcdTkwZThcdTVjMDFcdTY5NTNcdTk4YThcdTg0N2FcdTg1NTdcdTRmMGZcdTUyNmZcdTVmYTlcdTVl'@;
put 'NDVcdTY3MGRcdTc5OGZcdTgxNzlcdTg5MDdcdTg5ODZcdTZkZjVcdTVmMTdcdTYyNTVcdTZjYjhcdTRlY2ZcdTcyNjlcdTliOTJcdTUyMDZcdTU0M2JcdTU2NzRcdTU4YjNcdTYxYTRcdTYyNmVcdTcxMWFcdTU5NmVcdTdjODlcdTdjZGVcdTdkMWJcdTk2ZjBcdTY1ODdcdTgwNWVcdTRlMTlc'@;
put 'dTRmNzVcdTUxNzVcdTU4NDBcdTVlNjNcdTVlNzNcdTVmMGFcdTY3YzRcdTRlMjZcdTg1M2RcdTk1ODlcdTk2NWJcdTdjNzNcdTk4MDFcdTUwZmJcdTU4YzFcdTc2NTZcdTc4YTdcdTUyMjVcdTc3YTVcdTg1MTFcdTdiODZcdTUwNGZcdTU5MDlcdTcyNDdcdTdiYzdcdTdkZThcdThmYmFcdThm'@;
put 'ZDRcdTkwNGRcdTRmYmZcdTUyYzlcdTVhMjlcdTVmMDFcdTk3YWRcdTRmZGRcdTgyMTdcdTkyZWFcdTU3MDNcdTYzNTVcdTZiNjlcdTc1MmJcdTg4ZGNcdThmMTRcdTdhNDJcdTUyZGZcdTU4OTNcdTYxNTVcdTYyMGFcdTY2YWVcdTZiY2RcdTdjM2ZcdTgzZTlcdTUwMjNcdTRmZjhcdTUzMDVc'@;
put 'dTU0NDZcdTU4MzFcdTU5NDlcdTViOWRcdTVjZjBcdTVjZWZcdTVkMjlcdTVlOTZcdTYyYjFcdTYzNjdcdTY1M2VcdTY1YjlcdTY3MGJcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxNDldLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE0OV1bZ10uY2hhckNvZGVBdCgwKSYm'@;
put 'KElbX1sxNDldW2ddXT0zODE0NCtnLHlbMzgxNDQrZ109X1sxNDldW2ddKTtmb3IoX1sxNTBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZjZDVcdTZjZTFcdTcwZjlcdTc4MzJcdTdlMmJcdTgwZGVcdTgyYjNcdTg0MGNcdTg0ZWNc'@;
put 'dTg3MDJcdTg5MTJcdThhMmFcdThjNGFcdTkwYTZcdTkyZDJcdTk4ZmRcdTljZjNcdTlkNmNcdTRlNGZcdTRlYTFcdTUwOGRcdTUyNTZcdTU3NGFcdTU5YThcdTVlM2RcdTVmZDhcdTVmZDlcdTYyM2ZcdTY2YjRcdTY3MWJcdTY3ZDBcdTY4ZDJcdTUxOTJcdTdkMjFcdTgwYWFcdTgxYThcdThi'@;
put 'MDBcdThjOGNcdThjYmZcdTkyN2VcdTk2MzJcdTU0MjBcdTk4MmNcdTUzMTdcdTUwZDVcdTUzNWNcdTU4YThcdTY0YjJcdTY3MzRcdTcyNjdcdTc3NjZcdTdhNDZcdTkxZTZcdTUyYzNcdTZjYTFcdTZiODZcdTU4MDBcdTVlNGNcdTU5NTRcdTY3MmNcdTdmZmJcdTUxZTFcdTc2YzZcdWZmZmRc'@;
put 'dTY0NjlcdTc4ZThcdTliNTRcdTllYmJcdTU3Y2JcdTU5YjlcdTY2MjdcdTY3OWFcdTZiY2VcdTU0ZTlcdTY5ZDlcdTVlNTVcdTgxOWNcdTY3OTVcdTliYWFcdTY3ZmVcdTljNTJcdTY4NWRcdTRlYTZcdTRmZTNcdTUzYzhcdTYyYjlcdTY3MmJcdTZjYWJcdThmYzRcdTRmYWRcdTdlNmRcdTll'@;
put 'YmZcdTRlMDdcdTYxNjJcdTZlODBcdTZmMmJcdTg1MTNcdTU0NzNcdTY3MmFcdTliNDVcdTVkZjNcdTdiOTVcdTVjYWNcdTViYzZcdTg3MWNcdTZlNGFcdTg0ZDFcdTdhMTRcdTgxMDhcdTU5OTlcdTdjOGRcdTZjMTFcdTc3MjBcdTUyZDlcdTU5MjJcdTcxMjFcdTcyNWZcdTc3ZGJcdTk3Mjdc'@;
put 'dTlkNjFcdTY5MGJcdTVhN2ZcdTVhMThcdTUxYTVcdTU0MGRcdTU0N2RcdTY2MGVcdTc2ZGZcdThmZjdcdTkyOThcdTljZjRcdTU5ZWFcdTcyNWRcdTZlYzVcdTUxNGRcdTY4YzlcdTdkYmZcdTdkZWNcdTk3NjJcdTllYmFcdTY0NzhcdTZhMjFcdTgzMDJcdTU5ODRcdTViNWZcdTZiZGJcdTcz'@;
put 'MWJcdTc2ZjJcdTdkYjJcdTgwMTdcdTg0OTlcdTUxMzJcdTY3MjhcdTllZDlcdTc2ZWVcdTY3NjJcdTUyZmZcdTk5MDVcdTVjMjRcdTYyM2JcdTdjN2VcdThjYjBcdTU1NGZcdTYwYjZcdTdkMGJcdTk1ODBcdTUzMDFcdTRlNWZcdTUxYjZcdTU5MWNcdTcyM2FcdTgwMzZcdTkxY2VcdTVmMjVc'@;
put 'dTc3ZTJcdTUzODRcdTVmNzlcdTdkMDRcdTg1YWNcdThhMzNcdThlOGRcdTk3NTZcdTY3ZjNcdTg1YWVcdTk0NTNcdTYxMDlcdTYxMDhcdTZjYjlcdTc2NTJcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxNTBdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE1MF1bZ10uY2hh'@;
put 'ckNvZGVBdCgwKSYmKElbX1sxNTBdW2ddXT0zODQwMCtnLHlbMzg0MDArZ109X1sxNTBdW2ddKTtmb3IoX1sxNTFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdThhZWRcdThmMzhcdTU1MmZcdTRmNTFcdTUxMmFcdTUyYzdcdTUzY2Jc'@;
put 'dTViYTVcdTVlN2RcdTYwYTBcdTYxODJcdTYzZDZcdTY3MDlcdTY3ZGFcdTZlNjdcdTZkOGNcdTczMzZcdTczMzdcdTc1MzFcdTc5NTBcdTg4ZDVcdThhOThcdTkwNGFcdTkwOTFcdTkwZjVcdTk2YzRcdTg3OGRcdTU5MTVcdTRlODhcdTRmNTlcdTRlMGVcdThhODlcdThmM2ZcdTk4MTBcdTUw'@;
put 'YWRcdTVlN2NcdTU5OTZcdTViYjlcdTVlYjhcdTYzZGFcdTYzZmFcdTY0YzFcdTY2ZGNcdTY5NGFcdTY5ZDhcdTZkMGJcdTZlYjZcdTcxOTRcdTc1MjhcdTdhYWZcdTdmOGFcdTgwMDBcdTg0NDlcdTg0YzlcdTg5ODFcdThiMjFcdThlMGFcdTkwNjVcdTk2N2RcdTk5MGFcdTYxN2VcdTYyOTFc'@;
put 'dTZiMzJcdWZmZmRcdTZjODNcdTZkNzRcdTdmY2NcdTdmZmNcdTZkYzBcdTdmODVcdTg3YmFcdTg4ZjhcdTY3NjVcdTgzYjFcdTk4M2NcdTk2ZjdcdTZkMWJcdTdkNjFcdTg0M2RcdTkxNmFcdTRlNzFcdTUzNzVcdTVkNTBcdTZiMDRcdTZmZWJcdTg1Y2RcdTg2MmRcdTg5YTdcdTUyMjlcdTU0'@;
put 'MGZcdTVjNjVcdTY3NGVcdTY4YThcdTc0MDZcdTc0ODNcdTc1ZTJcdTg4Y2ZcdTg4ZTFcdTkxY2NcdTk2ZTJcdTk2NzhcdTVmOGJcdTczODdcdTdhY2JcdTg0NGVcdTYzYTBcdTc1NjVcdTUyODlcdTZkNDFcdTZlOWNcdTc0MDlcdTc1NTlcdTc4NmJcdTdjOTJcdTk2ODZcdTdhZGNcdTlmOGRc'@;
put 'dTRmYjZcdTYxNmVcdTY1YzVcdTg2NWNcdTRlODZcdTRlYWVcdTUwZGFcdTRlMjFcdTUxY2NcdTViZWVcdTY1OTlcdTY4ODFcdTZkYmNcdTczMWZcdTc2NDJcdTc3YWRcdTdhMWNcdTdjZTdcdTgyNmZcdThhZDJcdTkwN2NcdTkxY2ZcdTk2NzVcdTk4MThcdTUyOWJcdTdkZDFcdTUwMmJcdTUz'@;
put 'OThcdTY3OTdcdTZkY2JcdTcxZDBcdTc0MzNcdTgxZThcdThmMmFcdTk2YTNcdTljNTdcdTllOWZcdTc0NjBcdTU4NDFcdTZkOTlcdTdkMmZcdTk4NWVcdTRlZTRcdTRmMzZcdTRmOGJcdTUxYjdcdTUyYjFcdTVkYmFcdTYwMWNcdTczYjJcdTc5M2NcdTgyZDNcdTkyMzRcdTk2YjdcdTk2ZjZc'@;
put 'dTk3MGFcdTllOTdcdTlmNjJcdTY2YTZcdTZiNzRcdTUyMTdcdTUyYTNcdTcwYzhcdTg4YzJcdTVlYzlcdTYwNGJcdTYxOTBcdTZmMjNcdTcxNDlcdTdjM2VcdTdkZjRcdTgwNmZcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxNTFdLmxlbmd0aDsrK2cpNjU1MzMhPT1f'@;
put 'WzE1MV1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxNTFdW2ddXT0zODY1NitnLHlbMzg2NTYrZ109X1sxNTFdW2ddKTtmb3IoX1sxNTJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTg0ZWVcdTkwMjNcdTkzMmNcdTU0NDJcdTliNmZc'@;
put 'dTZhZDNcdTcwODlcdThjYzJcdThkZWZcdTk3MzJcdTUyYjRcdTVhNDFcdTVlY2FcdTVmMDRcdTY3MTdcdTY5N2NcdTY5OTRcdTZkNmFcdTZmMGZcdTcyNjJcdTcyZmNcdTdiZWRcdTgwMDFcdTgwN2VcdTg3NGJcdTkwY2VcdTUxNmRcdTllOTNcdTc5ODRcdTgwOGJcdTkzMzJcdThhZDZcdTUw'@;
put 'MmRcdTU0OGNcdThhNzFcdTZiNmFcdThjYzRcdTgxMDdcdTYwZDFcdTY3YTBcdTlkZjJcdTRlOTlcdTRlOThcdTljMTBcdThhNmJcdTg1YzFcdTg1NjhcdTY5MDBcdTZlN2VcdTc4OTdcdTgxNTVcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTVmMGNcdTRlMTBcdTRlMTVcdTRlMmFcdTRlMzFcdTRlMzZcdTRlM2NcdTRlM2ZcdTRlNDJcdTRlNTZcdTRlNThcdTRlODJcdTRlODVcdThjNmJcdTRlOGFcdTgyMTJcdTVmMGRcdTRlOGVcdTRlOWVcdTRlOWZc'@;
put 'dTRlYTBcdTRlYTJcdTRlYjBcdTRlYjNcdTRlYjZcdTRlY2VcdTRlY2RcdTRlYzRcdTRlYzZcdTRlYzJcdTRlZDdcdTRlZGVcdTRlZWRcdTRlZGZcdTRlZjdcdTRmMDlcdTRmNWFcdTRmMzBcdTRmNWJcdTRmNWRcdTRmNTdcdTRmNDdcdTRmNzZcdTRmODhcdTRmOGZcdTRmOThcdTRmN2JcdTRm'@;
put 'NjlcdTRmNzBcdTRmOTFcdTRmNmZcdTRmODZcdTRmOTZcdTUxMThcdTRmZDRcdTRmZGZcdTRmY2VcdTRmZDhcdTRmZGJcdTRmZDFcdTRmZGFcdTRmZDBcdTRmZTRcdTRmZTVcdTUwMWFcdTUwMjhcdTUwMTRcdTUwMmFcdTUwMjVcdTUwMDVcdTRmMWNcdTRmZjZcdTUwMjFcdTUwMjlcdTUwMmNc'@;
put 'dTRmZmVcdTRmZWZcdTUwMTFcdTUwMDZcdTUwNDNcdTUwNDdcdTY3MDNcdTUwNTVcdTUwNTBcdTUwNDhcdTUwNWFcdTUwNTZcdTUwNmNcdTUwNzhcdTUwODBcdTUwOWFcdTUwODVcdTUwYjRcdTUwYjJcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxNTJdLmxlbmd0aDsr'@;
put 'K2cpNjU1MzMhPT1fWzE1Ml1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxNTJdW2ddXT0zODkxMitnLHlbMzg5MTIrZ109X1sxNTJdW2ddKTtmb3IoX1sxNTNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTUwYzlcdTUwY2FcdTUwYjNc'@;
put 'dTUwYzJcdTUwZDZcdTUwZGVcdTUwZTVcdTUwZWRcdTUwZTNcdTUwZWVcdTUwZjlcdTUwZjVcdTUxMDlcdTUxMDFcdTUxMDJcdTUxMTZcdTUxMTVcdTUxMTRcdTUxMWFcdTUxMjFcdTUxM2FcdTUxMzdcdTUxM2NcdTUxM2JcdTUxM2ZcdTUxNDBcdTUxNTJcdTUxNGNcdTUxNTRcdTUxNjJcdTdh'@;
put 'ZjhcdTUxNjlcdTUxNmFcdTUxNmVcdTUxODBcdTUxODJcdTU2ZDhcdTUxOGNcdTUxODlcdTUxOGZcdTUxOTFcdTUxOTNcdTUxOTVcdTUxOTZcdTUxYTRcdTUxYTZcdTUxYTJcdTUxYTlcdTUxYWFcdTUxYWJcdTUxYjNcdTUxYjFcdTUxYjJcdTUxYjBcdTUxYjVcdTUxYmRcdTUxYzVcdTUxYzlc'@;
put 'dTUxZGJcdTUxZTBcdTg2NTVcdTUxZTlcdTUxZWRcdWZmZmRcdTUxZjBcdTUxZjVcdTUxZmVcdTUyMDRcdTUyMGJcdTUyMTRcdTUyMGVcdTUyMjdcdTUyMmFcdTUyMmVcdTUyMzNcdTUyMzlcdTUyNGZcdTUyNDRcdTUyNGJcdTUyNGNcdTUyNWVcdTUyNTRcdTUyNmFcdTUyNzRcdTUyNjlcdTUy'@;
put 'NzNcdTUyN2ZcdTUyN2RcdTUyOGRcdTUyOTRcdTUyOTJcdTUyNzFcdTUyODhcdTUyOTFcdThmYThcdThmYTdcdTUyYWNcdTUyYWRcdTUyYmNcdTUyYjVcdTUyYzFcdTUyY2RcdTUyZDdcdTUyZGVcdTUyZTNcdTUyZTZcdTk4ZWRcdTUyZTBcdTUyZjNcdTUyZjVcdTUyZjhcdTUyZjlcdTUzMDZc'@;
put 'dTUzMDhcdTc1MzhcdTUzMGRcdTUzMTBcdTUzMGZcdTUzMTVcdTUzMWFcdTUzMjNcdTUzMmZcdTUzMzFcdTUzMzNcdTUzMzhcdTUzNDBcdTUzNDZcdTUzNDVcdTRlMTdcdTUzNDlcdTUzNGRcdTUxZDZcdTUzNWVcdTUzNjlcdTUzNmVcdTU5MThcdTUzN2JcdTUzNzdcdTUzODJcdTUzOTZcdTUz'@;
put 'YTBcdTUzYTZcdTUzYTVcdTUzYWVcdTUzYjBcdTUzYjZcdTUzYzNcdTdjMTJcdTk2ZDlcdTUzZGZcdTY2ZmNcdTcxZWVcdTUzZWVcdTUzZThcdTUzZWRcdTUzZmFcdTU0MDFcdTU0M2RcdTU0NDBcdTU0MmNcdTU0MmRcdTU0M2NcdTU0MmVcdTU0MzZcdTU0MjlcdTU0MWRcdTU0NGVcdTU0OGZc'@;
put 'dTU0NzVcdTU0OGVcdTU0NWZcdTU0NzFcdTU0NzdcdTU0NzBcdTU0OTJcdTU0N2JcdTU0ODBcdTU0NzZcdTU0ODRcdTU0OTBcdTU0ODZcdTU0YzdcdTU0YTJcdTU0YjhcdTU0YTVcdTU0YWNcdTU0YzRcdTU0YzhcdTU0YThcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sx'@;
put 'NTNdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE1M11bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxNTNdW2ddXT0zOTE2OCtnLHlbMzkxNjgrZ109X1sxNTNdW2ddKTtmb3IoX1sxNTRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTU0YWJc'@;
put 'dTU0YzJcdTU0YTRcdTU0YmVcdTU0YmNcdTU0ZDhcdTU0ZTVcdTU0ZTZcdTU1MGZcdTU1MTRcdTU0ZmRcdTU0ZWVcdTU0ZWRcdTU0ZmFcdTU0ZTJcdTU1MzlcdTU1NDBcdTU1NjNcdTU1NGNcdTU1MmVcdTU1NWNcdTU1NDVcdTU1NTZcdTU1NTdcdTU1MzhcdTU1MzNcdTU1NWRcdTU1OTlcdTU1'@;
put 'ODBcdTU0YWZcdTU1OGFcdTU1OWZcdTU1N2JcdTU1N2VcdTU1OThcdTU1OWVcdTU1YWVcdTU1N2NcdTU1ODNcdTU1YTlcdTU1ODdcdTU1YThcdTU1ZGFcdTU1YzVcdTU1ZGZcdTU1YzRcdTU1ZGNcdTU1ZTRcdTU1ZDRcdTU2MTRcdTU1ZjdcdTU2MTZcdTU1ZmVcdTU1ZmRcdTU2MWJcdTU1Zjlc'@;
put 'dTU2NGVcdTU2NTBcdTcxZGZcdTU2MzRcdTU2MzZcdTU2MzJcdTU2MzhcdWZmZmRcdTU2NmJcdTU2NjRcdTU2MmZcdTU2NmNcdTU2NmFcdTU2ODZcdTU2ODBcdTU2OGFcdTU2YTBcdTU2OTRcdTU2OGZcdTU2YTVcdTU2YWVcdTU2YjZcdTU2YjRcdTU2YzJcdTU2YmNcdTU2YzFcdTU2YzNcdTU2'@;
put 'YzBcdTU2YzhcdTU2Y2VcdTU2ZDFcdTU2ZDNcdTU2ZDdcdTU2ZWVcdTU2ZjlcdTU3MDBcdTU2ZmZcdTU3MDRcdTU3MDlcdTU3MDhcdTU3MGJcdTU3MGRcdTU3MTNcdTU3MThcdTU3MTZcdTU1YzdcdTU3MWNcdTU3MjZcdTU3MzdcdTU3MzhcdTU3NGVcdTU3M2JcdTU3NDBcdTU3NGZcdTU3Njlc'@;
put 'dTU3YzBcdTU3ODhcdTU3NjFcdTU3N2ZcdTU3ODlcdTU3OTNcdTU3YTBcdTU3YjNcdTU3YTRcdTU3YWFcdTU3YjBcdTU3YzNcdTU3YzZcdTU3ZDRcdTU3ZDJcdTU3ZDNcdTU4MGFcdTU3ZDZcdTU3ZTNcdTU4MGJcdTU4MTlcdTU4MWRcdTU4NzJcdTU4MjFcdTU4NjJcdTU4NGJcdTU4NzBcdTZi'@;
put 'YzBcdTU4NTJcdTU4M2RcdTU4NzlcdTU4ODVcdTU4YjlcdTU4OWZcdTU4YWJcdTU4YmFcdTU4ZGVcdTU4YmJcdTU4YjhcdTU4YWVcdTU4YzVcdTU4ZDNcdTU4ZDFcdTU4ZDdcdTU4ZDlcdTU4ZDhcdTU4ZTVcdTU4ZGNcdTU4ZTRcdTU4ZGZcdTU4ZWZcdTU4ZmFcdTU4ZjlcdTU4ZmJcdTU4ZmNc'@;
put 'dTU4ZmRcdTU5MDJcdTU5MGFcdTU5MTBcdTU5MWJcdTY4YTZcdTU5MjVcdTU5MmNcdTU5MmRcdTU5MzJcdTU5MzhcdTU5M2VcdTdhZDJcdTU5NTVcdTU5NTBcdTU5NGVcdTU5NWFcdTU5NThcdTU5NjJcdTU5NjBcdTU5NjdcdTU5NmNcdTU5NjlcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIi'@;
put 'KSxnPTA7ZyE9X1sxNTRdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE1NF1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxNTRdW2ddXT0zOTQyNCtnLHlbMzk0MjQrZ109X1sxNTRdW2ddKTtmb3IoX1sxNTVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdTU5NzhcdTU5ODFcdTU5OWRcdTRmNWVcdTRmYWJcdTU5YTNcdTU5YjJcdTU5YzZcdTU5ZThcdTU5ZGNcdTU5OGRcdTU5ZDlcdTU5ZGFcdTVhMjVcdTVhMWZcdTVhMTFcdTVhMWNcdTVhMDlcdTVhMWFcdTVhNDBcdTVhNmNcdTVhNDlcdTVhMzVcdTVhMzZcdTVhNjJcdTVhNmFcdTVh'@;
put 'OWFcdTVhYmNcdTVhYmVcdTVhY2JcdTVhYzJcdTVhYmRcdTVhZTNcdTVhZDdcdTVhZTZcdTVhZTlcdTVhZDZcdTVhZmFcdTVhZmJcdTViMGNcdTViMGJcdTViMTZcdTViMzJcdTVhZDBcdTViMmFcdTViMzZcdTViM2VcdTViNDNcdTViNDVcdTViNDBcdTViNTFcdTViNTVcdTViNWFcdTViNWJc'@;
put 'dTViNjVcdTViNjlcdTViNzBcdTViNzNcdTViNzVcdTViNzhcdTY1ODhcdTViN2FcdTViODBcdWZmZmRcdTViODNcdTViYTZcdTViYjhcdTViYzNcdTViYzdcdTViYzlcdTViZDRcdTViZDBcdTViZTRcdTViZTZcdTViZTJcdTViZGVcdTViZTVcdTViZWJcdTViZjBcdTViZjZcdTViZjNcdTVj'@;
put 'MDVcdTVjMDdcdTVjMDhcdTVjMGRcdTVjMTNcdTVjMjBcdTVjMjJcdTVjMjhcdTVjMzhcdTVjMzlcdTVjNDFcdTVjNDZcdTVjNGVcdTVjNTNcdTVjNTBcdTVjNGZcdTViNzFcdTVjNmNcdTVjNmVcdTRlNjJcdTVjNzZcdTVjNzlcdTVjOGNcdTVjOTFcdTVjOTRcdTU5OWJcdTVjYWJcdTVjYmJc'@;
put 'dTVjYjZcdTVjYmNcdTVjYjdcdTVjYzVcdTVjYmVcdTVjYzdcdTVjZDlcdTVjZTlcdTVjZmRcdTVjZmFcdTVjZWRcdTVkOGNcdTVjZWFcdTVkMGJcdTVkMTVcdTVkMTdcdTVkNWNcdTVkMWZcdTVkMWJcdTVkMTFcdTVkMTRcdTVkMjJcdTVkMWFcdTVkMTlcdTVkMThcdTVkNGNcdTVkNTJcdTVk'@;
put 'NGVcdTVkNGJcdTVkNmNcdTVkNzNcdTVkNzZcdTVkODdcdTVkODRcdTVkODJcdTVkYTJcdTVkOWRcdTVkYWNcdTVkYWVcdTVkYmRcdTVkOTBcdTVkYjdcdTVkYmNcdTVkYzlcdTVkY2RcdTVkZDNcdTVkZDJcdTVkZDZcdTVkZGJcdTVkZWJcdTVkZjJcdTVkZjVcdTVlMGJcdTVlMWFcdTVlMTlc'@;
put 'dTVlMTFcdTVlMWJcdTVlMzZcdTVlMzdcdTVlNDRcdTVlNDNcdTVlNDBcdTVlNGVcdTVlNTdcdTVlNTRcdTVlNWZcdTVlNjJcdTVlNjRcdTVlNDdcdTVlNzVcdTVlNzZcdTVlN2FcdTllYmNcdTVlN2ZcdTVlYTBcdTVlYzFcdTVlYzJcdTVlYzhcdTVlZDBcdTVlY2ZcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxNTVdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE1NV1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxNTVdW2ddXT0zOTY4MCtnLHlbMzk2ODArZ109X1sxNTVdW2ddKTtmb3IoX1sxNTZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdTVlZDZcdTVlZTNcdTVlZGRcdTVlZGFcdTVlZGJcdTVlZTJcdTVlZTFcdTVlZThcdTVlZTlcdTVlZWNcdTVlZjFcdTVlZjNcdTVlZjBcdTVlZjRcdTVlZjhcdTVlZmVcdTVmMDNcdTVmMDlcdTVmNWRcdTVmNWNcdTVmMGJcdTVmMTFcdTVmMTZcdTVmMjlcdTVm'@;
put 'MmRcdTVmMzhcdTVmNDFcdTVmNDhcdTVmNGNcdTVmNGVcdTVmMmZcdTVmNTFcdTVmNTZcdTVmNTdcdTVmNTlcdTVmNjFcdTVmNmRcdTVmNzNcdTVmNzdcdTVmODNcdTVmODJcdTVmN2ZcdTVmOGFcdTVmODhcdTVmOTFcdTVmODdcdTVmOWVcdTVmOTlcdTVmOThcdTVmYTBcdTVmYThcdTVmYWRc'@;
put 'dTVmYmNcdTVmZDZcdTVmZmJcdTVmZTRcdTVmZjhcdTVmZjFcdTVmZGRcdTYwYjNcdTVmZmZcdTYwMjFcdTYwNjBcdWZmZmRcdTYwMTlcdTYwMTBcdTYwMjlcdTYwMGVcdTYwMzFcdTYwMWJcdTYwMTVcdTYwMmJcdTYwMjZcdTYwMGZcdTYwM2FcdTYwNWFcdTYwNDFcdTYwNmFcdTYwNzdcdTYw'@;
put 'NWZcdTYwNGFcdTYwNDZcdTYwNGRcdTYwNjNcdTYwNDNcdTYwNjRcdTYwNDJcdTYwNmNcdTYwNmJcdTYwNTlcdTYwODFcdTYwOGRcdTYwZTdcdTYwODNcdTYwOWFcdTYwODRcdTYwOWJcdTYwOTZcdTYwOTdcdTYwOTJcdTYwYTdcdTYwOGJcdTYwZTFcdTYwYjhcdTYwZTBcdTYwZDNcdTYwYjRc'@;
put 'dTVmZjBcdTYwYmRcdTYwYzZcdTYwYjVcdTYwZDhcdTYxNGRcdTYxMTVcdTYxMDZcdTYwZjZcdTYwZjdcdTYxMDBcdTYwZjRcdTYwZmFcdTYxMDNcdTYxMjFcdTYwZmJcdTYwZjFcdTYxMGRcdTYxMGVcdTYxNDdcdTYxM2VcdTYxMjhcdTYxMjdcdTYxNGFcdTYxM2ZcdTYxM2NcdTYxMmNcdTYx'@;
put 'MzRcdTYxM2RcdTYxNDJcdTYxNDRcdTYxNzNcdTYxNzdcdTYxNThcdTYxNTlcdTYxNWFcdTYxNmJcdTYxNzRcdTYxNmZcdTYxNjVcdTYxNzFcdTYxNWZcdTYxNWRcdTYxNTNcdTYxNzVcdTYxOTlcdTYxOTZcdTYxODdcdTYxYWNcdTYxOTRcdTYxOWFcdTYxOGFcdTYxOTFcdTYxYWJcdTYxYWVc'@;
put 'dTYxY2NcdTYxY2FcdTYxYzlcdTYxZjdcdTYxYzhcdTYxYzNcdTYxYzZcdTYxYmFcdTYxY2JcdTdmNzlcdTYxY2RcdTYxZTZcdTYxZTNcdTYxZjZcdTYxZmFcdTYxZjRcdTYxZmZcdTYxZmRcdTYxZmNcdTYxZmVcdTYyMDBcdTYyMDhcdTYyMDlcdTYyMGRcdTYyMGNcdTYyMTRcdTYyMWJcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxNTZdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE1Nl1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxNTZdW2ddXT0zOTkzNitnLHlbMzk5MzYrZ109X1sxNTZdW2ddKTtmb3IoX1sxNTddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTYyMWVcdTYyMjFcdTYyMmFcdTYyMmVcdTYyMzBcdTYyMzJcdTYyMzNcdTYyNDFcdTYyNGVcdTYyNWVcdTYyNjNcdTYyNWJcdTYyNjBcdTYyNjhcdTYyN2NcdTYyODJcdTYyODlcdTYyN2VcdTYyOTJcdTYyOTNcdTYyOTZcdTYyZDRcdTYy'@;
put 'ODNcdTYyOTRcdTYyZDdcdTYyZDFcdTYyYmJcdTYyY2ZcdTYyZmZcdTYyYzZcdTY0ZDRcdTYyYzhcdTYyZGNcdTYyY2NcdTYyY2FcdTYyYzJcdTYyYzdcdTYyOWJcdTYyYzlcdTYzMGNcdTYyZWVcdTYyZjFcdTYzMjdcdTYzMDJcdTYzMDhcdTYyZWZcdTYyZjVcdTYzNTBcdTYzM2VcdTYzNGRc'@;
put 'dTY0MWNcdTYzNGZcdTYzOTZcdTYzOGVcdTYzODBcdTYzYWJcdTYzNzZcdTYzYTNcdTYzOGZcdTYzODlcdTYzOWZcdTYzYjVcdTYzNmJcdWZmZmRcdTYzNjlcdTYzYmVcdTYzZTlcdTYzYzBcdTYzYzZcdTYzZTNcdTYzYzlcdTYzZDJcdTYzZjZcdTYzYzRcdTY0MTZcdTY0MzRcdTY0MDZcdTY0'@;
put 'MTNcdTY0MjZcdTY0MzZcdTY1MWRcdTY0MTdcdTY0MjhcdTY0MGZcdTY0NjdcdTY0NmZcdTY0NzZcdTY0NGVcdTY1MmFcdTY0OTVcdTY0OTNcdTY0YTVcdTY0YTlcdTY0ODhcdTY0YmNcdTY0ZGFcdTY0ZDJcdTY0YzVcdTY0YzdcdTY0YmJcdTY0ZDhcdTY0YzJcdTY0ZjFcdTY0ZTdcdTgyMDlc'@;
put 'dTY0ZTBcdTY0ZTFcdTYyYWNcdTY0ZTNcdTY0ZWZcdTY1MmNcdTY0ZjZcdTY0ZjRcdTY0ZjJcdTY0ZmFcdTY1MDBcdTY0ZmRcdTY1MThcdTY1MWNcdTY1MDVcdTY1MjRcdTY1MjNcdTY1MmJcdTY1MzRcdTY1MzVcdTY1MzdcdTY1MzZcdTY1MzhcdTc1NGJcdTY1NDhcdTY1NTZcdTY1NTVcdTY1'@;
put 'NGRcdTY1NThcdTY1NWVcdTY1NWRcdTY1NzJcdTY1NzhcdTY1ODJcdTY1ODNcdThiOGFcdTY1OWJcdTY1OWZcdTY1YWJcdTY1YjdcdTY1YzNcdTY1YzZcdTY1YzFcdTY1YzRcdTY1Y2NcdTY1ZDJcdTY1ZGJcdTY1ZDlcdTY1ZTBcdTY1ZTFcdTY1ZjFcdTY3NzJcdTY2MGFcdTY2MDNcdTY1ZmJc'@;
put 'dTY3NzNcdTY2MzVcdTY2MzZcdTY2MzRcdTY2MWNcdTY2NGZcdTY2NDRcdTY2NDlcdTY2NDFcdTY2NWVcdTY2NWRcdTY2NjRcdTY2NjdcdTY2NjhcdTY2NWZcdTY2NjJcdTY2NzBcdTY2ODNcdTY2ODhcdTY2OGVcdTY2ODlcdTY2ODRcdTY2OThcdTY2OWRcdTY2YzFcdTY2YjlcdTY2YzlcdTY2'@;
put 'YmVcdTY2YmNcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxNTddLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE1N11bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxNTddW2ddXT00MDE5MitnLHlbNDAxOTIrZ109X1sxNTddW2ddKTtmb3IoX1sxNThdPSJcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTY2YzRcdTY2YjhcdTY2ZDZcdTY2ZGFcdTY2ZTBcdTY2M2ZcdTY2ZTZcdTY2ZTlcdTY2ZjBcdTY2ZjVcdTY2ZjdcdTY3MGZcdTY3MTZcdTY3MWVcdTY3MjZcdTY3MjdcdTk3MzhcdTY3MmVcdTY3M2ZcdTY3MzZcdTY3'@;
put 'NDFcdTY3MzhcdTY3MzdcdTY3NDZcdTY3NWVcdTY3NjBcdTY3NTlcdTY3NjNcdTY3NjRcdTY3ODlcdTY3NzBcdTY3YTlcdTY3N2NcdTY3NmFcdTY3OGNcdTY3OGJcdTY3YTZcdTY3YTFcdTY3ODVcdTY3YjdcdTY3ZWZcdTY3YjRcdTY3ZWNcdTY3YjNcdTY3ZTlcdTY3YjhcdTY3ZTRcdTY3ZGVc'@;
put 'dTY3ZGRcdTY3ZTJcdTY3ZWVcdTY3YjlcdTY3Y2VcdTY3YzZcdTY3ZTdcdTZhOWNcdTY4MWVcdTY4NDZcdTY4MjlcdTY4NDBcdTY4NGRcdTY4MzJcdTY4NGVcdWZmZmRcdTY4YjNcdTY4MmJcdTY4NTlcdTY4NjNcdTY4NzdcdTY4N2ZcdTY4OWZcdTY4OGZcdTY4YWRcdTY4OTRcdTY4OWRcdTY4'@;
put 'OWJcdTY4ODNcdTZhYWVcdTY4YjlcdTY4NzRcdTY4YjVcdTY4YTBcdTY4YmFcdTY5MGZcdTY4OGRcdTY4N2VcdTY5MDFcdTY4Y2FcdTY5MDhcdTY4ZDhcdTY5MjJcdTY5MjZcdTY4ZTFcdTY5MGNcdTY4Y2RcdTY4ZDRcdTY4ZTdcdTY4ZDVcdTY5MzZcdTY5MTJcdTY5MDRcdTY4ZDdcdTY4ZTNc'@;
put 'dTY5MjVcdTY4ZjlcdTY4ZTBcdTY4ZWZcdTY5MjhcdTY5MmFcdTY5MWFcdTY5MjNcdTY5MjFcdTY4YzZcdTY5NzlcdTY5NzdcdTY5NWNcdTY5NzhcdTY5NmJcdTY5NTRcdTY5N2VcdTY5NmVcdTY5MzlcdTY5NzRcdTY5M2RcdTY5NTlcdTY5MzBcdTY5NjFcdTY5NWVcdTY5NWRcdTY5ODFcdTY5'@;
put 'NmFcdTY5YjJcdTY5YWVcdTY5ZDBcdTY5YmZcdTY5YzFcdTY5ZDNcdTY5YmVcdTY5Y2VcdTViZThcdTY5Y2FcdTY5ZGRcdTY5YmJcdTY5YzNcdTY5YTdcdTZhMmVcdTY5OTFcdTY5YTBcdTY5OWNcdTY5OTVcdTY5YjRcdTY5ZGVcdTY5ZThcdTZhMDJcdTZhMWJcdTY5ZmZcdTZiMGFcdTY5Zjlc'@;
put 'dTY5ZjJcdTY5ZTdcdTZhMDVcdTY5YjFcdTZhMWVcdTY5ZWRcdTZhMTRcdTY5ZWJcdTZhMGFcdTZhMTJcdTZhYzFcdTZhMjNcdTZhMTNcdTZhNDRcdTZhMGNcdTZhNzJcdTZhMzZcdTZhNzhcdTZhNDdcdTZhNjJcdTZhNTlcdTZhNjZcdTZhNDhcdTZhMzhcdTZhMjJcdTZhOTBcdTZhOGRcdTZh'@;
put 'YTBcdTZhODRcdTZhYTJcdTZhYTNcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxNThdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE1OF1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxNThdW2ddXT00MDQ0OCtnLHlbNDA0NDgrZ109X1sxNThdW2ddKTtmb3IoX1sxNTldPSJc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZhOTdcdTg2MTdcdTZhYmJcdTZhYzNcdTZhYzJcdTZhYjhcdTZhYjNcdTZhYWNcdTZhZGVcdTZhZDFcdTZhZGZcdTZhYWFcdTZhZGFcdTZhZWFcdTZhZmJcdTZiMDVcdTg2MTZcdTZhZmFcdTZi'@;
put 'MTJcdTZiMTZcdTliMzFcdTZiMWZcdTZiMzhcdTZiMzdcdTc2ZGNcdTZiMzlcdTk4ZWVcdTZiNDdcdTZiNDNcdTZiNDlcdTZiNTBcdTZiNTlcdTZiNTRcdTZiNWJcdTZiNWZcdTZiNjFcdTZiNzhcdTZiNzlcdTZiN2ZcdTZiODBcdTZiODRcdTZiODNcdTZiOGRcdTZiOThcdTZiOTVcdTZiOWVc'@;
put 'dTZiYTRcdTZiYWFcdTZiYWJcdTZiYWZcdTZiYjJcdTZiYjFcdTZiYjNcdTZiYjdcdTZiYmNcdTZiYzZcdTZiY2JcdTZiZDNcdTZiZGZcdTZiZWNcdTZiZWJcdTZiZjNcdTZiZWZcdWZmZmRcdTllYmVcdTZjMDhcdTZjMTNcdTZjMTRcdTZjMWJcdTZjMjRcdTZjMjNcdTZjNWVcdTZjNTVcdTZj'@;
put 'NjJcdTZjNmFcdTZjODJcdTZjOGRcdTZjOWFcdTZjODFcdTZjOWJcdTZjN2VcdTZjNjhcdTZjNzNcdTZjOTJcdTZjOTBcdTZjYzRcdTZjZjFcdTZjZDNcdTZjYmRcdTZjZDdcdTZjYzVcdTZjZGRcdTZjYWVcdTZjYjFcdTZjYmVcdTZjYmFcdTZjZGJcdTZjZWZcdTZjZDlcdTZjZWFcdTZkMWZc'@;
put 'dTg4NGRcdTZkMzZcdTZkMmJcdTZkM2RcdTZkMzhcdTZkMTlcdTZkMzVcdTZkMzNcdTZkMTJcdTZkMGNcdTZkNjNcdTZkOTNcdTZkNjRcdTZkNWFcdTZkNzlcdTZkNTlcdTZkOGVcdTZkOTVcdTZmZTRcdTZkODVcdTZkZjlcdTZlMTVcdTZlMGFcdTZkYjVcdTZkYzdcdTZkZTZcdTZkYjhcdTZk'@;
put 'YzZcdTZkZWNcdTZkZGVcdTZkY2NcdTZkZThcdTZkZDJcdTZkYzVcdTZkZmFcdTZkZDlcdTZkZTRcdTZkZDVcdTZkZWFcdTZkZWVcdTZlMmRcdTZlNmVcdTZlMmVcdTZlMTlcdTZlNzJcdTZlNWZcdTZlM2VcdTZlMjNcdTZlNmJcdTZlMmJcdTZlNzZcdTZlNGRcdTZlMWZcdTZlNDNcdTZlM2Fc'@;
put 'dTZlNGVcdTZlMjRcdTZlZmZcdTZlMWRcdTZlMzhcdTZlODJcdTZlYWFcdTZlOThcdTZlYzlcdTZlYjdcdTZlZDNcdTZlYmRcdTZlYWZcdTZlYzRcdTZlYjJcdTZlZDRcdTZlZDVcdTZlOGZcdTZlYTVcdTZlYzJcdTZlOWZcdTZmNDFcdTZmMTFcdTcwNGNcdTZlZWNcdTZlZjhcdTZlZmVcdTZm'@;
put 'M2ZcdTZlZjJcdTZmMzFcdTZlZWZcdTZmMzJcdTZlY2NcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxNTldLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE1OV1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxNTldW2ddXT00MDcwNCtnLHlbNDA3MDQrZ109X1sxNTldW2ddKTtm'@;
put 'b3IoX1syMjRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZmM2VcdTZmMTNcdTZlZjdcdTZmODZcdTZmN2FcdTZmNzhcdTZmODFcdTZmODBcdTZmNmZcdTZmNWJcdTZmZjNcdTZmNmRcdTZmODJcdTZmN2NcdTZmNThcdTZmOGVcdTZm'@;
put 'OTFcdTZmYzJcdTZmNjZcdTZmYjNcdTZmYTNcdTZmYTFcdTZmYTRcdTZmYjlcdTZmYzZcdTZmYWFcdTZmZGZcdTZmZDVcdTZmZWNcdTZmZDRcdTZmZDhcdTZmZjFcdTZmZWVcdTZmZGJcdTcwMDlcdTcwMGJcdTZmZmFcdTcwMTFcdTcwMDFcdTcwMGZcdTZmZmVcdTcwMWJcdTcwMWFcdTZmNzRc'@;
put 'dTcwMWRcdTcwMThcdTcwMWZcdTcwMzBcdTcwM2VcdTcwMzJcdTcwNTFcdTcwNjNcdTcwOTlcdTcwOTJcdTcwYWZcdTcwZjFcdTcwYWNcdTcwYjhcdTcwYjNcdTcwYWVcdTcwZGZcdTcwY2JcdTcwZGRcdWZmZmRcdTcwZDlcdTcxMDlcdTcwZmRcdTcxMWNcdTcxMTlcdTcxNjVcdTcxNTVcdTcx'@;
put 'ODhcdTcxNjZcdTcxNjJcdTcxNGNcdTcxNTZcdTcxNmNcdTcxOGZcdTcxZmJcdTcxODRcdTcxOTVcdTcxYThcdTcxYWNcdTcxZDdcdTcxYjlcdTcxYmVcdTcxZDJcdTcxYzlcdTcxZDRcdTcxY2VcdTcxZTBcdTcxZWNcdTcxZTdcdTcxZjVcdTcxZmNcdTcxZjlcdTcxZmZcdTcyMGRcdTcyMTBc'@;
put 'dTcyMWJcdTcyMjhcdTcyMmRcdTcyMmNcdTcyMzBcdTcyMzJcdTcyM2JcdTcyM2NcdTcyM2ZcdTcyNDBcdTcyNDZcdTcyNGJcdTcyNThcdTcyNzRcdTcyN2VcdTcyODJcdTcyODFcdTcyODdcdTcyOTJcdTcyOTZcdTcyYTJcdTcyYTdcdTcyYjlcdTcyYjJcdTcyYzNcdTcyYzZcdTcyYzRcdTcy'@;
put 'Y2VcdTcyZDJcdTcyZTJcdTcyZTBcdTcyZTFcdTcyZjlcdTcyZjdcdTUwMGZcdTczMTdcdTczMGFcdTczMWNcdTczMTZcdTczMWRcdTczMzRcdTczMmZcdTczMjlcdTczMjVcdTczM2VcdTczNGVcdTczNGZcdTllZDhcdTczNTdcdTczNmFcdTczNjhcdTczNzBcdTczNzhcdTczNzVcdTczN2Jc'@;
put 'dTczN2FcdTczYzhcdTczYjNcdTczY2VcdTczYmJcdTczYzBcdTczZTVcdTczZWVcdTczZGVcdTc0YTJcdTc0MDVcdTc0NmZcdTc0MjVcdTczZjhcdTc0MzJcdTc0M2FcdTc0NTVcdTc0M2ZcdTc0NWZcdTc0NTlcdTc0NDFcdTc0NWNcdTc0NjlcdTc0NzBcdTc0NjNcdTc0NmFcdTc0NzZcdTc0'@;
put 'N2VcdTc0OGJcdTc0OWVcdTc0YTdcdTc0Y2FcdTc0Y2ZcdTc0ZDRcdTczZjFcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMjRdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIyNF1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMjRdW2ddXT01NzM0NCtnLHlbNTczNDQrZ109'@;
put 'X1syMjRdW2ddKTtmb3IoX1syMjVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc0ZTBcdTc0ZTNcdTc0ZTdcdTc0ZTlcdTc0ZWVcdTc0ZjJcdTc0ZjBcdTc0ZjFcdTc0ZjhcdTc0ZjdcdTc1MDRcdTc1MDNcdTc1MDVcdTc1MGNcdTc1'@;
put 'MGVcdTc1MGRcdTc1MTVcdTc1MTNcdTc1MWVcdTc1MjZcdTc1MmNcdTc1M2NcdTc1NDRcdTc1NGRcdTc1NGFcdTc1NDlcdTc1NWJcdTc1NDZcdTc1NWFcdTc1NjlcdTc1NjRcdTc1NjdcdTc1NmJcdTc1NmRcdTc1NzhcdTc1NzZcdTc1ODZcdTc1ODdcdTc1NzRcdTc1OGFcdTc1ODlcdTc1ODJc'@;
put 'dTc1OTRcdTc1OWFcdTc1OWRcdTc1YTVcdTc1YTNcdTc1YzJcdTc1YjNcdTc1YzNcdTc1YjVcdTc1YmRcdTc1YjhcdTc1YmNcdTc1YjFcdTc1Y2RcdTc1Y2FcdTc1ZDJcdTc1ZDlcdTc1ZTNcdTc1ZGVcdTc1ZmVcdTc1ZmZcdWZmZmRcdTc1ZmNcdTc2MDFcdTc1ZjBcdTc1ZmFcdTc1ZjJcdTc1'@;
put 'ZjNcdTc2MGJcdTc2MGRcdTc2MDlcdTc2MWZcdTc2MjdcdTc2MjBcdTc2MjFcdTc2MjJcdTc2MjRcdTc2MzRcdTc2MzBcdTc2M2JcdTc2NDdcdTc2NDhcdTc2NDZcdTc2NWNcdTc2NThcdTc2NjFcdTc2NjJcdTc2NjhcdTc2NjlcdTc2NmFcdTc2NjdcdTc2NmNcdTc2NzBcdTc2NzJcdTc2NzZc'@;
put 'dTc2NzhcdTc2N2NcdTc2ODBcdTc2ODNcdTc2ODhcdTc2OGJcdTc2OGVcdTc2OTZcdTc2OTNcdTc2OTlcdTc2OWFcdTc2YjBcdTc2YjRcdTc2YjhcdTc2YjlcdTc2YmFcdTc2YzJcdTc2Y2RcdTc2ZDZcdTc2ZDJcdTc2ZGVcdTc2ZTFcdTc2ZTVcdTc2ZTdcdTc2ZWFcdTg2MmZcdTc2ZmJcdTc3'@;
put 'MDhcdTc3MDdcdTc3MDRcdTc3MjlcdTc3MjRcdTc3MWVcdTc3MjVcdTc3MjZcdTc3MWJcdTc3MzdcdTc3MzhcdTc3NDdcdTc3NWFcdTc3NjhcdTc3NmJcdTc3NWJcdTc3NjVcdTc3N2ZcdTc3N2VcdTc3NzlcdTc3OGVcdTc3OGJcdTc3OTFcdTc3YTBcdTc3OWVcdTc3YjBcdTc3YjZcdTc3Yjlc'@;
put 'dTc3YmZcdTc3YmNcdTc3YmRcdTc3YmJcdTc3YzdcdTc3Y2RcdTc3ZDdcdTc3ZGFcdTc3ZGNcdTc3ZTNcdTc3ZWVcdTc3ZmNcdTc4MGNcdTc4MTJcdTc5MjZcdTc4MjBcdTc5MmFcdTc4NDVcdTc4OGVcdTc4NzRcdTc4ODZcdTc4N2NcdTc4OWFcdTc4OGNcdTc4YTNcdTc4YjVcdTc4YWFcdTc4'@;
put 'YWZcdTc4ZDFcdTc4YzZcdTc4Y2JcdTc4ZDRcdTc4YmVcdTc4YmNcdTc4YzVcdTc4Y2FcdTc4ZWNcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMjVdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIyNV1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMjVdW2ddXT01NzYwMCtn'@;
put 'LHlbNTc2MDArZ109X1syMjVdW2ddKTtmb3IoX1syMjZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc4ZTdcdTc4ZGFcdTc4ZmRcdTc4ZjRcdTc5MDdcdTc5MTJcdTc5MTFcdTc5MTlcdTc5MmNcdTc5MmJcdTc5NDBcdTc5NjBcdTc5'@;
put 'NTdcdTc5NWZcdTc5NWFcdTc5NTVcdTc5NTNcdTc5N2FcdTc5N2ZcdTc5OGFcdTc5OWRcdTc5YTdcdTlmNGJcdTc5YWFcdTc5YWVcdTc5YjNcdTc5YjlcdTc5YmFcdTc5YzlcdTc5ZDVcdTc5ZTdcdTc5ZWNcdTc5ZTFcdTc5ZTNcdTdhMDhcdTdhMGRcdTdhMThcdTdhMTlcdTdhMjBcdTdhMWZc'@;
put 'dTc5ODBcdTdhMzFcdTdhM2JcdTdhM2VcdTdhMzdcdTdhNDNcdTdhNTdcdTdhNDlcdTdhNjFcdTdhNjJcdTdhNjlcdTlmOWRcdTdhNzBcdTdhNzlcdTdhN2RcdTdhODhcdTdhOTdcdTdhOTVcdTdhOThcdTdhOTZcdTdhYTlcdTdhYzhcdTdhYjBcdWZmZmRcdTdhYjZcdTdhYzVcdTdhYzRcdTdh'@;
put 'YmZcdTkwODNcdTdhYzdcdTdhY2FcdTdhY2RcdTdhY2ZcdTdhZDVcdTdhZDNcdTdhZDlcdTdhZGFcdTdhZGRcdTdhZTFcdTdhZTJcdTdhZTZcdTdhZWRcdTdhZjBcdTdiMDJcdTdiMGZcdTdiMGFcdTdiMDZcdTdiMzNcdTdiMThcdTdiMTlcdTdiMWVcdTdiMzVcdTdiMjhcdTdiMzZcdTdiNTBc'@;
put 'dTdiN2FcdTdiMDRcdTdiNGRcdTdiMGJcdTdiNGNcdTdiNDVcdTdiNzVcdTdiNjVcdTdiNzRcdTdiNjdcdTdiNzBcdTdiNzFcdTdiNmNcdTdiNmVcdTdiOWRcdTdiOThcdTdiOWZcdTdiOGRcdTdiOWNcdTdiOWFcdTdiOGJcdTdiOTJcdTdiOGZcdTdiNWRcdTdiOTlcdTdiY2JcdTdiYzFcdTdi'@;
put 'Y2NcdTdiY2ZcdTdiYjRcdTdiYzZcdTdiZGRcdTdiZTlcdTdjMTFcdTdjMTRcdTdiZTZcdTdiZTVcdTdjNjBcdTdjMDBcdTdjMDdcdTdjMTNcdTdiZjNcdTdiZjdcdTdjMTdcdTdjMGRcdTdiZjZcdTdjMjNcdTdjMjdcdTdjMmFcdTdjMWZcdTdjMzdcdTdjMmJcdTdjM2RcdTdjNGNcdTdjNDNc'@;
put 'dTdjNTRcdTdjNGZcdTdjNDBcdTdjNTBcdTdjNThcdTdjNWZcdTdjNjRcdTdjNTZcdTdjNjVcdTdjNmNcdTdjNzVcdTdjODNcdTdjOTBcdTdjYTRcdTdjYWRcdTdjYTJcdTdjYWJcdTdjYTFcdTdjYThcdTdjYjNcdTdjYjJcdTdjYjFcdTdjYWVcdTdjYjlcdTdjYmRcdTdjYzBcdTdjYzVcdTdj'@;
put 'YzJcdTdjZDhcdTdjZDJcdTdjZGNcdTdjZTJcdTliM2JcdTdjZWZcdTdjZjJcdTdjZjRcdTdjZjZcdTdjZmFcdTdkMDZcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMjZdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIyNl1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMjZd'@;
put 'W2ddXT01Nzg1NitnLHlbNTc4NTYrZ109X1syMjZdW2ddKTtmb3IoX1syMjddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTdkMDJcdTdkMWNcdTdkMTVcdTdkMGFcdTdkNDVcdTdkNGJcdTdkMmVcdTdkMzJcdTdkM2ZcdTdkMzVcdTdk'@;
put 'NDZcdTdkNzNcdTdkNTZcdTdkNGVcdTdkNzJcdTdkNjhcdTdkNmVcdTdkNGZcdTdkNjNcdTdkOTNcdTdkODlcdTdkNWJcdTdkOGZcdTdkN2RcdTdkOWJcdTdkYmFcdTdkYWVcdTdkYTNcdTdkYjVcdTdkYzdcdTdkYmRcdTdkYWJcdTdlM2RcdTdkYTJcdTdkYWZcdTdkZGNcdTdkYjhcdTdkOWZc'@;
put 'dTdkYjBcdTdkZDhcdTdkZGRcdTdkZTRcdTdkZGVcdTdkZmJcdTdkZjJcdTdkZTFcdTdlMDVcdTdlMGFcdTdlMjNcdTdlMjFcdTdlMTJcdTdlMzFcdTdlMWZcdTdlMDlcdTdlMGJcdTdlMjJcdTdlNDZcdTdlNjZcdTdlM2JcdTdlMzVcdTdlMzlcdTdlNDNcdTdlMzdcdWZmZmRcdTdlMzJcdTdl'@;
put 'M2FcdTdlNjdcdTdlNWRcdTdlNTZcdTdlNWVcdTdlNTlcdTdlNWFcdTdlNzlcdTdlNmFcdTdlNjlcdTdlN2NcdTdlN2JcdTdlODNcdTdkZDVcdTdlN2RcdThmYWVcdTdlN2ZcdTdlODhcdTdlODlcdTdlOGNcdTdlOTJcdTdlOTBcdTdlOTNcdTdlOTRcdTdlOTZcdTdlOGVcdTdlOWJcdTdlOWNc'@;
put 'dTdmMzhcdTdmM2FcdTdmNDVcdTdmNGNcdTdmNGRcdTdmNGVcdTdmNTBcdTdmNTFcdTdmNTVcdTdmNTRcdTdmNThcdTdmNWZcdTdmNjBcdTdmNjhcdTdmNjlcdTdmNjdcdTdmNzhcdTdmODJcdTdmODZcdTdmODNcdTdmODhcdTdmODdcdTdmOGNcdTdmOTRcdTdmOWVcdTdmOWRcdTdmOWFcdTdm'@;
put 'YTNcdTdmYWZcdTdmYjJcdTdmYjlcdTdmYWVcdTdmYjZcdTdmYjhcdThiNzFcdTdmYzVcdTdmYzZcdTdmY2FcdTdmZDVcdTdmZDRcdTdmZTFcdTdmZTZcdTdmZTlcdTdmZjNcdTdmZjlcdTk4ZGNcdTgwMDZcdTgwMDRcdTgwMGJcdTgwMTJcdTgwMThcdTgwMTlcdTgwMWNcdTgwMjFcdTgwMjhc'@;
put 'dTgwM2ZcdTgwM2JcdTgwNGFcdTgwNDZcdTgwNTJcdTgwNThcdTgwNWFcdTgwNWZcdTgwNjJcdTgwNjhcdTgwNzNcdTgwNzJcdTgwNzBcdTgwNzZcdTgwNzlcdTgwN2RcdTgwN2ZcdTgwODRcdTgwODZcdTgwODVcdTgwOWJcdTgwOTNcdTgwOWFcdTgwYWRcdTUxOTBcdTgwYWNcdTgwZGJcdTgw'@;
put 'ZTVcdTgwZDlcdTgwZGRcdTgwYzRcdTgwZGFcdTgwZDZcdTgxMDlcdTgwZWZcdTgwZjFcdTgxMWJcdTgxMjlcdTgxMjNcdTgxMmZcdTgxNGJcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMjddLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIyN11bZ10uY2hhckNvZGVBdCgw'@;
put 'KSYmKElbX1syMjddW2ddXT01ODExMitnLHlbNTgxMTIrZ109X1syMjddW2ddKTtmb3IoX1syMjhdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTk2OGJcdTgxNDZcdTgxM2VcdTgxNTNcdTgxNTFcdTgwZmNcdTgxNzFcdTgxNmVcdTgx'@;
put 'NjVcdTgxNjZcdTgxNzRcdTgxODNcdTgxODhcdTgxOGFcdTgxODBcdTgxODJcdTgxYTBcdTgxOTVcdTgxYTRcdTgxYTNcdTgxNWZcdTgxOTNcdTgxYTlcdTgxYjBcdTgxYjVcdTgxYmVcdTgxYjhcdTgxYmRcdTgxYzBcdTgxYzJcdTgxYmFcdTgxYzlcdTgxY2RcdTgxZDFcdTgxZDlcdTgxZDhc'@;
put 'dTgxYzhcdTgxZGFcdTgxZGZcdTgxZTBcdTgxZTdcdTgxZmFcdTgxZmJcdTgxZmVcdTgyMDFcdTgyMDJcdTgyMDVcdTgyMDdcdTgyMGFcdTgyMGRcdTgyMTBcdTgyMTZcdTgyMjlcdTgyMmJcdTgyMzhcdTgyMzNcdTgyNDBcdTgyNTlcdTgyNThcdTgyNWRcdTgyNWFcdTgyNWZcdTgyNjRcdWZm'@;
put 'ZmRcdTgyNjJcdTgyNjhcdTgyNmFcdTgyNmJcdTgyMmVcdTgyNzFcdTgyNzdcdTgyNzhcdTgyN2VcdTgyOGRcdTgyOTJcdTgyYWJcdTgyOWZcdTgyYmJcdTgyYWNcdTgyZTFcdTgyZTNcdTgyZGZcdTgyZDJcdTgyZjRcdTgyZjNcdTgyZmFcdTgzOTNcdTgzMDNcdTgyZmJcdTgyZjlcdTgyZGVc'@;
put 'dTgzMDZcdTgyZGNcdTgzMDlcdTgyZDlcdTgzMzVcdTgzMzRcdTgzMTZcdTgzMzJcdTgzMzFcdTgzNDBcdTgzMzlcdTgzNTBcdTgzNDVcdTgzMmZcdTgzMmJcdTgzMTdcdTgzMThcdTgzODVcdTgzOWFcdTgzYWFcdTgzOWZcdTgzYTJcdTgzOTZcdTgzMjNcdTgzOGVcdTgzODdcdTgzOGFcdTgz'@;
put 'N2NcdTgzYjVcdTgzNzNcdTgzNzVcdTgzYTBcdTgzODlcdTgzYThcdTgzZjRcdTg0MTNcdTgzZWJcdTgzY2VcdTgzZmRcdTg0MDNcdTgzZDhcdTg0MGJcdTgzYzFcdTgzZjdcdTg0MDdcdTgzZTBcdTgzZjJcdTg0MGRcdTg0MjJcdTg0MjBcdTgzYmRcdTg0MzhcdTg1MDZcdTgzZmJcdTg0NmRc'@;
put 'dTg0MmFcdTg0M2NcdTg1NWFcdTg0ODRcdTg0NzdcdTg0NmJcdTg0YWRcdTg0NmVcdTg0ODJcdTg0NjlcdTg0NDZcdTg0MmNcdTg0NmZcdTg0NzlcdTg0MzVcdTg0Y2FcdTg0NjJcdTg0YjlcdTg0YmZcdTg0OWZcdTg0ZDlcdTg0Y2RcdTg0YmJcdTg0ZGFcdTg0ZDBcdTg0YzFcdTg0YzZcdTg0'@;
put 'ZDZcdTg0YTFcdTg1MjFcdTg0ZmZcdTg0ZjRcdTg1MTdcdTg1MThcdTg1MmNcdTg1MWZcdTg1MTVcdTg1MTRcdTg0ZmNcdTg1NDBcdTg1NjNcdTg1NThcdTg1NDhcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMjhdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIyOF1bZ10u'@;
put 'Y2hhckNvZGVBdCgwKSYmKElbX1syMjhdW2ddXT01ODM2OCtnLHlbNTgzNjgrZ109X1syMjhdW2ddKTtmb3IoX1syMjldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTg1NDFcdTg2MDJcdTg1NGJcdTg1NTVcdTg1ODBcdTg1YTRcdTg1'@;
put 'ODhcdTg1OTFcdTg1OGFcdTg1YThcdTg1NmRcdTg1OTRcdTg1OWJcdTg1ZWFcdTg1ODdcdTg1OWNcdTg1NzdcdTg1N2VcdTg1OTBcdTg1YzlcdTg1YmFcdTg1Y2ZcdTg1YjlcdTg1ZDBcdTg1ZDVcdTg1ZGRcdTg1ZTVcdTg1ZGNcdTg1ZjlcdTg2MGFcdTg2MTNcdTg2MGJcdTg1ZmVcdTg1ZmFc'@;
put 'dTg2MDZcdTg2MjJcdTg2MWFcdTg2MzBcdTg2M2ZcdTg2NGRcdTRlNTVcdTg2NTRcdTg2NWZcdTg2NjdcdTg2NzFcdTg2OTNcdTg2YTNcdTg2YTlcdTg2YWFcdTg2OGJcdTg2OGNcdTg2YjZcdTg2YWZcdTg2YzRcdTg2YzZcdTg2YjBcdTg2YzlcdTg4MjNcdTg2YWJcdTg2ZDRcdTg2ZGVcdTg2'@;
put 'ZTlcdTg2ZWNcdWZmZmRcdTg2ZGZcdTg2ZGJcdTg2ZWZcdTg3MTJcdTg3MDZcdTg3MDhcdTg3MDBcdTg3MDNcdTg2ZmJcdTg3MTFcdTg3MDlcdTg3MGRcdTg2ZjlcdTg3MGFcdTg3MzRcdTg3M2ZcdTg3MzdcdTg3M2JcdTg3MjVcdTg3MjlcdTg3MWFcdTg3NjBcdTg3NWZcdTg3NzhcdTg3NGNc'@;
put 'dTg3NGVcdTg3NzRcdTg3NTdcdTg3NjhcdTg3NmVcdTg3NTlcdTg3NTNcdTg3NjNcdTg3NmFcdTg4MDVcdTg3YTJcdTg3OWZcdTg3ODJcdTg3YWZcdTg3Y2JcdTg3YmRcdTg3YzBcdTg3ZDBcdTk2ZDZcdTg3YWJcdTg3YzRcdTg3YjNcdTg3YzdcdTg3YzZcdTg3YmJcdTg3ZWZcdTg3ZjJcdTg3'@;
put 'ZTBcdTg4MGZcdTg4MGRcdTg3ZmVcdTg3ZjZcdTg3ZjdcdTg4MGVcdTg3ZDJcdTg4MTFcdTg4MTZcdTg4MTVcdTg4MjJcdTg4MjFcdTg4MzFcdTg4MzZcdTg4MzlcdTg4MjdcdTg4M2JcdTg4NDRcdTg4NDJcdTg4NTJcdTg4NTlcdTg4NWVcdTg4NjJcdTg4NmJcdTg4ODFcdTg4N2VcdTg4OWVc'@;
put 'dTg4NzVcdTg4N2RcdTg4YjVcdTg4NzJcdTg4ODJcdTg4OTdcdTg4OTJcdTg4YWVcdTg4OTlcdTg4YTJcdTg4OGRcdTg4YTRcdTg4YjBcdTg4YmZcdTg4YjFcdTg4YzNcdTg4YzRcdTg4ZDRcdTg4ZDhcdTg4ZDlcdTg4ZGRcdTg4ZjlcdTg5MDJcdTg4ZmNcdTg4ZjRcdTg4ZThcdTg4ZjJcdTg5'@;
put 'MDRcdTg5MGNcdTg5MGFcdTg5MTNcdTg5NDNcdTg5MWVcdTg5MjVcdTg5MmFcdTg5MmJcdTg5NDFcdTg5NDRcdTg5M2JcdTg5MzZcdTg5MzhcdTg5NGNcdTg5MWRcdTg5NjBcdTg5NWVcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMjldLmxlbmd0aDsrK2cpNjU1MzMh'@;
put 'PT1fWzIyOV1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMjldW2ddXT01ODYyNCtnLHlbNTg2MjQrZ109X1syMjldW2ddKTtmb3IoX1syMzBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTg5NjZcdTg5NjRcdTg5NmRcdTg5NmFcdTg5'@;
put 'NmZcdTg5NzRcdTg5NzdcdTg5N2VcdTg5ODNcdTg5ODhcdTg5OGFcdTg5OTNcdTg5OThcdTg5YTFcdTg5YTlcdTg5YTZcdTg5YWNcdTg5YWZcdTg5YjJcdTg5YmFcdTg5YmRcdTg5YmZcdTg5YzBcdTg5ZGFcdTg5ZGNcdTg5ZGRcdTg5ZTdcdTg5ZjRcdTg5ZjhcdThhMDNcdThhMTZcdThhMTBc'@;
put 'dThhMGNcdThhMWJcdThhMWRcdThhMjVcdThhMzZcdThhNDFcdThhNWJcdThhNTJcdThhNDZcdThhNDhcdThhN2NcdThhNmRcdThhNmNcdThhNjJcdThhODVcdThhODJcdThhODRcdThhYThcdThhYTFcdThhOTFcdThhYTVcdThhYTZcdThhOWFcdThhYTNcdThhYzRcdThhY2RcdThhYzJcdThh'@;
put 'ZGFcdThhZWJcdThhZjNcdThhZTdcdWZmZmRcdThhZTRcdThhZjFcdThiMTRcdThhZTBcdThhZTJcdThhZjdcdThhZGVcdThhZGJcdThiMGNcdThiMDdcdThiMWFcdThhZTFcdThiMTZcdThiMTBcdThiMTdcdThiMjBcdThiMzNcdTk3YWJcdThiMjZcdThiMmJcdThiM2VcdThiMjhcdThiNDFc'@;
put 'dThiNGNcdThiNGZcdThiNGVcdThiNDlcdThiNTZcdThiNWJcdThiNWFcdThiNmJcdThiNWZcdThiNmNcdThiNmZcdThiNzRcdThiN2RcdThiODBcdThiOGNcdThiOGVcdThiOTJcdThiOTNcdThiOTZcdThiOTlcdThiOWFcdThjM2FcdThjNDFcdThjM2ZcdThjNDhcdThjNGNcdThjNGVcdThj'@;
put 'NTBcdThjNTVcdThjNjJcdThjNmNcdThjNzhcdThjN2FcdThjODJcdThjODlcdThjODVcdThjOGFcdThjOGRcdThjOGVcdThjOTRcdThjN2NcdThjOThcdTYyMWRcdThjYWRcdThjYWFcdThjYmRcdThjYjJcdThjYjNcdThjYWVcdThjYjZcdThjYzhcdThjYzFcdThjZTRcdThjZTNcdThjZGFc'@;
put 'dThjZmRcdThjZmFcdThjZmJcdThkMDRcdThkMDVcdThkMGFcdThkMDdcdThkMGZcdThkMGRcdThkMTBcdTlmNGVcdThkMTNcdThjY2RcdThkMTRcdThkMTZcdThkNjdcdThkNmRcdThkNzFcdThkNzNcdThkODFcdThkOTlcdThkYzJcdThkYmVcdThkYmFcdThkY2ZcdThkZGFcdThkZDZcdThk'@;
put 'Y2NcdThkZGJcdThkY2JcdThkZWFcdThkZWJcdThkZGZcdThkZTNcdThkZmNcdThlMDhcdThlMDlcdThkZmZcdThlMWRcdThlMWVcdThlMTBcdThlMWZcdThlNDJcdThlMzVcdThlMzBcdThlMzRcdThlNGFcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMzBdLmxlbmd0'@;
put 'aDsrK2cpNjU1MzMhPT1fWzIzMF1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMzBdW2ddXT01ODg4MCtnLHlbNTg4ODArZ109X1syMzBdW2ddKTtmb3IoX1syMzFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdThlNDdcdThlNDlcdThl'@;
put 'NGNcdThlNTBcdThlNDhcdThlNTlcdThlNjRcdThlNjBcdThlMmFcdThlNjNcdThlNTVcdThlNzZcdThlNzJcdThlN2NcdThlODFcdThlODdcdThlODVcdThlODRcdThlOGJcdThlOGFcdThlOTNcdThlOTFcdThlOTRcdThlOTlcdThlYWFcdThlYTFcdThlYWNcdThlYjBcdThlYzZcdThlYjFc'@;
put 'dThlYmVcdThlYzVcdThlYzhcdThlY2JcdThlZGJcdThlZTNcdThlZmNcdThlZmJcdThlZWJcdThlZmVcdThmMGFcdThmMDVcdThmMTVcdThmMTJcdThmMTlcdThmMTNcdThmMWNcdThmMWZcdThmMWJcdThmMGNcdThmMjZcdThmMzNcdThmM2JcdThmMzlcdThmNDVcdThmNDJcdThmM2VcdThm'@;
put 'NGNcdThmNDlcdThmNDZcdThmNGVcdThmNTdcdThmNWNcdWZmZmRcdThmNjJcdThmNjNcdThmNjRcdThmOWNcdThmOWZcdThmYTNcdThmYWRcdThmYWZcdThmYjdcdThmZGFcdThmZTVcdThmZTJcdThmZWFcdThmZWZcdTkwODdcdThmZjRcdTkwMDVcdThmZjlcdThmZmFcdTkwMTFcdTkwMTVc'@;
put 'dTkwMjFcdTkwMGRcdTkwMWVcdTkwMTZcdTkwMGJcdTkwMjdcdTkwMzZcdTkwMzVcdTkwMzlcdThmZjhcdTkwNGZcdTkwNTBcdTkwNTFcdTkwNTJcdTkwMGVcdTkwNDlcdTkwM2VcdTkwNTZcdTkwNThcdTkwNWVcdTkwNjhcdTkwNmZcdTkwNzZcdTk2YThcdTkwNzJcdTkwODJcdTkwN2RcdTkw'@;
put 'ODFcdTkwODBcdTkwOGFcdTkwODlcdTkwOGZcdTkwYThcdTkwYWZcdTkwYjFcdTkwYjVcdTkwZTJcdTkwZTRcdTYyNDhcdTkwZGJcdTkxMDJcdTkxMTJcdTkxMTlcdTkxMzJcdTkxMzBcdTkxNGFcdTkxNTZcdTkxNThcdTkxNjNcdTkxNjVcdTkxNjlcdTkxNzNcdTkxNzJcdTkxOGJcdTkxODlc'@;
put 'dTkxODJcdTkxYTJcdTkxYWJcdTkxYWZcdTkxYWFcdTkxYjVcdTkxYjRcdTkxYmFcdTkxYzBcdTkxYzFcdTkxYzlcdTkxY2JcdTkxZDBcdTkxZDZcdTkxZGZcdTkxZTFcdTkxZGJcdTkxZmNcdTkxZjVcdTkxZjZcdTkyMWVcdTkxZmZcdTkyMTRcdTkyMmNcdTkyMTVcdTkyMTFcdTkyNWVcdTky'@;
put 'NTdcdTkyNDVcdTkyNDlcdTkyNjRcdTkyNDhcdTkyOTVcdTkyM2ZcdTkyNGJcdTkyNTBcdTkyOWNcdTkyOTZcdTkyOTNcdTkyOWJcdTkyNWFcdTkyY2ZcdTkyYjlcdTkyYjdcdTkyZTlcdTkzMGZcdTkyZmFcdTkzNDRcdTkzMmVcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9'@;
put 'X1syMzFdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIzMV1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMzFdW2ddXT01OTEzNitnLHlbNTkxMzYrZ109X1syMzFdW2ddKTtmb3IoX1syMzJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTkz'@;
put 'MTlcdTkzMjJcdTkzMWFcdTkzMjNcdTkzM2FcdTkzMzVcdTkzM2JcdTkzNWNcdTkzNjBcdTkzN2NcdTkzNmVcdTkzNTZcdTkzYjBcdTkzYWNcdTkzYWRcdTkzOTRcdTkzYjlcdTkzZDZcdTkzZDdcdTkzZThcdTkzZTVcdTkzZDhcdTkzYzNcdTkzZGRcdTkzZDBcdTkzYzhcdTkzZTRcdTk0MWFc'@;
put 'dTk0MTRcdTk0MTNcdTk0MDNcdTk0MDdcdTk0MTBcdTk0MzZcdTk0MmJcdTk0MzVcdTk0MjFcdTk0M2FcdTk0NDFcdTk0NTJcdTk0NDRcdTk0NWJcdTk0NjBcdTk0NjJcdTk0NWVcdTk0NmFcdTkyMjlcdTk0NzBcdTk0NzVcdTk0NzdcdTk0N2RcdTk0NWFcdTk0N2NcdTk0N2VcdTk0ODFcdTk0'@;
put 'N2ZcdTk1ODJcdTk1ODdcdTk1OGFcdTk1OTRcdTk1OTZcdTk1OThcdTk1OTlcdWZmZmRcdTk1YTBcdTk1YThcdTk1YTdcdTk1YWRcdTk1YmNcdTk1YmJcdTk1YjlcdTk1YmVcdTk1Y2FcdTZmZjZcdTk1YzNcdTk1Y2RcdTk1Y2NcdTk1ZDVcdTk1ZDRcdTk1ZDZcdTk1ZGNcdTk1ZTFcdTk1ZTVc'@;
put 'dTk1ZTJcdTk2MjFcdTk2MjhcdTk2MmVcdTk2MmZcdTk2NDJcdTk2NGNcdTk2NGZcdTk2NGJcdTk2NzdcdTk2NWNcdTk2NWVcdTk2NWRcdTk2NWZcdTk2NjZcdTk2NzJcdTk2NmNcdTk2OGRcdTk2OThcdTk2OTVcdTk2OTdcdTk2YWFcdTk2YTdcdTk2YjFcdTk2YjJcdTk2YjBcdTk2YjRcdTk2'@;
put 'YjZcdTk2YjhcdTk2YjlcdTk2Y2VcdTk2Y2JcdTk2YzlcdTk2Y2RcdTg5NGRcdTk2ZGNcdTk3MGRcdTk2ZDVcdTk2ZjlcdTk3MDRcdTk3MDZcdTk3MDhcdTk3MTNcdTk3MGVcdTk3MTFcdTk3MGZcdTk3MTZcdTk3MTlcdTk3MjRcdTk3MmFcdTk3MzBcdTk3MzlcdTk3M2RcdTk3M2VcdTk3NDRc'@;
put 'dTk3NDZcdTk3NDhcdTk3NDJcdTk3NDlcdTk3NWNcdTk3NjBcdTk3NjRcdTk3NjZcdTk3NjhcdTUyZDJcdTk3NmJcdTk3NzFcdTk3NzlcdTk3ODVcdTk3N2NcdTk3ODFcdTk3N2FcdTk3ODZcdTk3OGJcdTk3OGZcdTk3OTBcdTk3OWNcdTk3YThcdTk3YTZcdTk3YTNcdTk3YjNcdTk3YjRcdTk3'@;
put 'YzNcdTk3YzZcdTk3YzhcdTk3Y2JcdTk3ZGNcdTk3ZWRcdTlmNGZcdTk3ZjJcdTdhZGZcdTk3ZjZcdTk3ZjVcdTk4MGZcdTk4MGNcdTk4MzhcdTk4MjRcdTk4MjFcdTk4MzdcdTk4M2RcdTk4NDZcdTk4NGZcdTk4NGJcdTk4NmJcdTk4NmZcdTk4NzBcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0'@;
put 'KCIiKSxnPTA7ZyE9X1syMzJdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIzMl1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMzJdW2ddXT01OTM5MitnLHlbNTkzOTIrZ109X1syMzJdW2ddKTtmb3IoX1syMzNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdTk4NzFcdTk4NzRcdTk4NzNcdTk4YWFcdTk4YWZcdTk4YjFcdTk4YjZcdTk4YzRcdTk4YzNcdTk4YzZcdTk4ZTlcdTk4ZWJcdTk5MDNcdTk5MDlcdTk5MTJcdTk5MTRcdTk5MThcdTk5MjFcdTk5MWRcdTk5MWVcdTk5MjRcdTk5MjBcdTk5MmNcdTk5MmVcdTk5M2RcdTk5M2Vc'@;
put 'dTk5NDJcdTk5NDlcdTk5NDVcdTk5NTBcdTk5NGJcdTk5NTFcdTk5NTJcdTk5NGNcdTk5NTVcdTk5OTdcdTk5OThcdTk5YTVcdTk5YWRcdTk5YWVcdTk5YmNcdTk5ZGZcdTk5ZGJcdTk5ZGRcdTk5ZDhcdTk5ZDFcdTk5ZWRcdTk5ZWVcdTk5ZjFcdTk5ZjJcdTk5ZmJcdTk5ZjhcdTlhMDFcdTlh'@;
put 'MGZcdTlhMDVcdTk5ZTJcdTlhMTlcdTlhMmJcdTlhMzdcdTlhNDVcdTlhNDJcdTlhNDBcdTlhNDNcdWZmZmRcdTlhM2VcdTlhNTVcdTlhNGRcdTlhNWJcdTlhNTdcdTlhNWZcdTlhNjJcdTlhNjVcdTlhNjRcdTlhNjlcdTlhNmJcdTlhNmFcdTlhYWRcdTlhYjBcdTlhYmNcdTlhYzBcdTlhY2Zc'@;
put 'dTlhZDFcdTlhZDNcdTlhZDRcdTlhZGVcdTlhZGZcdTlhZTJcdTlhZTNcdTlhZTZcdTlhZWZcdTlhZWJcdTlhZWVcdTlhZjRcdTlhZjFcdTlhZjdcdTlhZmJcdTliMDZcdTliMThcdTliMWFcdTliMWZcdTliMjJcdTliMjNcdTliMjVcdTliMjdcdTliMjhcdTliMjlcdTliMmFcdTliMmVcdTli'@;
put 'MmZcdTliMzJcdTliNDRcdTliNDNcdTliNGZcdTliNGRcdTliNGVcdTliNTFcdTliNThcdTliNzRcdTliOTNcdTliODNcdTliOTFcdTliOTZcdTliOTdcdTliOWZcdTliYTBcdTliYThcdTliYjRcdTliYzBcdTliY2FcdTliYjlcdTliYzZcdTliY2ZcdTliZDFcdTliZDJcdTliZTNcdTliZTJc'@;
put 'dTliZTRcdTliZDRcdTliZTFcdTljM2FcdTliZjJcdTliZjFcdTliZjBcdTljMTVcdTljMTRcdTljMDlcdTljMTNcdTljMGNcdTljMDZcdTljMDhcdTljMTJcdTljMGFcdTljMDRcdTljMmVcdTljMWJcdTljMjVcdTljMjRcdTljMjFcdTljMzBcdTljNDdcdTljMzJcdTljNDZcdTljM2VcdTlj'@;
put 'NWFcdTljNjBcdTljNjdcdTljNzZcdTljNzhcdTljZTdcdTljZWNcdTljZjBcdTlkMDlcdTlkMDhcdTljZWJcdTlkMDNcdTlkMDZcdTlkMmFcdTlkMjZcdTlkYWZcdTlkMjNcdTlkMWZcdTlkNDRcdTlkMTVcdTlkMTJcdTlkNDFcdTlkM2ZcdTlkM2VcdTlkNDZcdTlkNDhcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMzNdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIzM11bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMzNdW2ddXT01OTY0OCtnLHlbNTk2NDgrZ109X1syMzNdW2ddKTtmb3IoX1syMzRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTlkNWRcdTlkNWVcdTlkNjRcdTlkNTFcdTlkNTBcdTlkNTlcdTlkNzJcdTlkODlcdTlkODdcdTlkYWJcdTlkNmZcdTlkN2FcdTlkOWFcdTlkYTRcdTlkYTlcdTlkYjJcdTlkYzRcdTlkYzFcdTlkYmJcdTlkYjhcdTlkYmFcdTlkYzZcdTlkY2ZcdTlkYzJc'@;
put 'dTlkZDlcdTlkZDNcdTlkZjhcdTlkZTZcdTlkZWRcdTlkZWZcdTlkZmRcdTllMWFcdTllMWJcdTllMWVcdTllNzVcdTllNzlcdTllN2RcdTllODFcdTllODhcdTllOGJcdTllOGNcdTllOTJcdTllOTVcdTllOTFcdTllOWRcdTllYTVcdTllYTlcdTllYjhcdTllYWFcdTllYWRcdTk3NjFcdTll'@;
put 'Y2NcdTllY2VcdTllY2ZcdTllZDBcdTllZDRcdTllZGNcdTllZGVcdTllZGRcdTllZTBcdTllZTVcdTllZThcdTllZWZcdWZmZmRcdTllZjRcdTllZjZcdTllZjdcdTllZjlcdTllZmJcdTllZmNcdTllZmRcdTlmMDdcdTlmMDhcdTc2YjdcdTlmMTVcdTlmMjFcdTlmMmNcdTlmM2VcdTlmNGFc'@;
put 'dTlmNTJcdTlmNTRcdTlmNjNcdTlmNWZcdTlmNjBcdTlmNjFcdTlmNjZcdTlmNjdcdTlmNmNcdTlmNmFcdTlmNzdcdTlmNzJcdTlmNzZcdTlmOTVcdTlmOWNcdTlmYTBcdTU4MmZcdTY5YzdcdTkwNTlcdTc0NjRcdTUxZGNcdTcxOTlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMzRdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIzNF1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMzRdW2ddXT01OTkwNCtnLHlbNTk5MDQrZ109X1syMzRdW2ddKTtmb3IoX1syMzddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTdlOGFcdTg5MWNcdTkzNDhcdTkyODhcdTg0ZGNcdTRmYzlcdTcwYmJcdTY2MzFcdTY4YzhcdTkyZjlcdTY2ZmJcdTVmNDVcdTRlMjhcdTRlZTFcdTRlZmNcdTRmMDBcdTRmMDNcdTRmMzlcdTRmNTZcdTRmOTJcdTRmOGFcdTRmOWFc'@;
put 'dTRmOTRcdTRmY2RcdTUwNDBcdTUwMjJcdTRmZmZcdTUwMWVcdTUwNDZcdTUwNzBcdTUwNDJcdTUwOTRcdTUwZjRcdTUwZDhcdTUxNGFcdTUxNjRcdTUxOWRcdTUxYmVcdTUxZWNcdTUyMTVcdTUyOWNcdTUyYTZcdTUyYzBcdTUyZGJcdTUzMDBcdTUzMDdcdTUzMjRcdTUzNzJcdTUzOTNcdTUz'@;
put 'YjJcdTUzZGRcdWZhMGVcdTU0OWNcdTU0OGFcdTU0YTlcdTU0ZmZcdTU1ODZcdTU3NTlcdTU3NjVcdTU3YWNcdTU3YzhcdTU3YzdcdWZhMGZcdWZmZmRcdWZhMTBcdTU4OWVcdTU4YjJcdTU5MGJcdTU5NTNcdTU5NWJcdTU5NWRcdTU5NjNcdTU5YTRcdTU5YmFcdTViNTZcdTViYzBcdTc1MmZc'@;
put 'dTViZDhcdTViZWNcdTVjMWVcdTVjYTZcdTVjYmFcdTVjZjVcdTVkMjdcdTVkNTNcdWZhMTFcdTVkNDJcdTVkNmRcdTVkYjhcdTVkYjlcdTVkZDBcdTVmMjFcdTVmMzRcdTVmNjdcdTVmYjdcdTVmZGVcdTYwNWRcdTYwODVcdTYwOGFcdTYwZGVcdTYwZDVcdTYxMjBcdTYwZjJcdTYxMTFcdTYx'@;
put 'MzdcdTYxMzBcdTYxOThcdTYyMTNcdTYyYTZcdTYzZjVcdTY0NjBcdTY0OWRcdTY0Y2VcdTY1NGVcdTY2MDBcdTY2MTVcdTY2M2JcdTY2MDlcdTY2MmVcdTY2MWVcdTY2MjRcdTY2NjVcdTY2NTdcdTY2NTlcdWZhMTJcdTY2NzNcdTY2OTlcdTY2YTBcdTY2YjJcdTY2YmZcdTY2ZmFcdTY3MGVc'@;
put 'dWY5MjlcdTY3NjZcdTY3YmJcdTY4NTJcdTY3YzBcdTY4MDFcdTY4NDRcdTY4Y2ZcdWZhMTNcdTY5NjhcdWZhMTRcdTY5OThcdTY5ZTJcdTZhMzBcdTZhNmJcdTZhNDZcdTZhNzNcdTZhN2VcdTZhZTJcdTZhZTRcdTZiZDZcdTZjM2ZcdTZjNWNcdTZjODZcdTZjNmZcdTZjZGFcdTZkMDRcdTZk'@;
put 'ODdcdTZkNmZcdTZkOTZcdTZkYWNcdTZkY2ZcdTZkZjhcdTZkZjJcdTZkZmNcdTZlMzlcdTZlNWNcdTZlMjdcdTZlM2NcdTZlYmZcdTZmODhcdTZmYjVcdTZmZjVcdTcwMDVcdTcwMDdcdTcwMjhcdTcwODVcdTcwYWJcdTcxMGZcdTcxMDRcdTcxNWNcdTcxNDZcdTcxNDdcdWZhMTVcdTcxYzFc'@;
put 'dTcxZmVcdTcyYjFcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMzddLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIzN11bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMzddW2ddXT02MDY3MitnLHlbNjA2NzIrZ109X1syMzddW2ddKTtmb3IoX1syMzhdPSJcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTcyYmVcdTczMjRcdWZhMTZcdTczNzdcdTczYmRcdTczYzlcdTczZDZcdTczZTNcdTczZDJcdTc0MDdcdTczZjVcdTc0MjZcdTc0MmFcdTc0MjlcdTc0MmVcdTc0NjJcdTc0ODlcdTc0OWZcdTc1MDFcdTc1NmZc'@;
put 'dTc2ODJcdTc2OWNcdTc2OWVcdTc2OWJcdTc2YTZcdWZhMTdcdTc3NDZcdTUyYWZcdTc4MjFcdTc4NGVcdTc4NjRcdTc4N2FcdTc5MzBcdWZhMThcdWZhMTlcdWZhMWFcdTc5OTRcdWZhMWJcdTc5OWJcdTdhZDFcdTdhZTdcdWZhMWNcdTdhZWJcdTdiOWVcdWZhMWRcdTdkNDhcdTdkNWNcdTdk'@;
put 'YjdcdTdkYTBcdTdkZDZcdTdlNTJcdTdmNDdcdTdmYTFcdWZhMWVcdTgzMDFcdTgzNjJcdTgzN2ZcdTgzYzdcdTgzZjZcdTg0NDhcdTg0YjRcdTg1NTNcdTg1NTlcdWZmZmRcdTg1NmJcdWZhMWZcdTg1YjBcdWZhMjBcdWZhMjFcdTg4MDdcdTg4ZjVcdThhMTJcdThhMzdcdThhNzlcdThhYTdc'@;
put 'dThhYmVcdThhZGZcdWZhMjJcdThhZjZcdThiNTNcdThiN2ZcdThjZjBcdThjZjRcdThkMTJcdThkNzZcdWZhMjNcdThlY2ZcdWZhMjRcdWZhMjVcdTkwNjdcdTkwZGVcdWZhMjZcdTkxMTVcdTkxMjdcdTkxZGFcdTkxZDdcdTkxZGVcdTkxZWRcdTkxZWVcdTkxZTRcdTkxZTVcdTkyMDZcdTky'@;
put 'MTBcdTkyMGFcdTkyM2FcdTkyNDBcdTkyM2NcdTkyNGVcdTkyNTlcdTkyNTFcdTkyMzlcdTkyNjdcdTkyYTdcdTkyNzdcdTkyNzhcdTkyZTdcdTkyZDdcdTkyZDlcdTkyZDBcdWZhMjdcdTkyZDVcdTkyZTBcdTkyZDNcdTkzMjVcdTkzMjFcdTkyZmJcdWZhMjhcdTkzMWVcdTkyZmZcdTkzMWRc'@;
put 'dTkzMDJcdTkzNzBcdTkzNTdcdTkzYTRcdTkzYzZcdTkzZGVcdTkzZjhcdTk0MzFcdTk0NDVcdTk0NDhcdTk1OTJcdWY5ZGNcdWZhMjlcdTk2OWRcdTk2YWZcdTk3MzNcdTk3M2JcdTk3NDNcdTk3NGRcdTk3NGZcdTk3NTFcdTk3NTVcdTk4NTdcdTk4NjVcdWZhMmFcdWZhMmJcdTk5MjdcdWZh'@;
put 'MmNcdTk5OWVcdTlhNGVcdTlhZDlcdTlhZGNcdTliNzVcdTliNzJcdTliOGZcdTliYjFcdTliYmJcdTljMDBcdTlkNzBcdTlkNmJcdWZhMmRcdTllMTlcdTllZDFcdWZmZmRcdWZmZmRcdTIxNzBcdTIxNzFcdTIxNzJcdTIxNzNcdTIxNzRcdTIxNzVcdTIxNzZcdTIxNzdcdTIxNzhcdTIxNzlc'@;
put 'dWZmZTJcdWZmZTRcdWZmMDdcdWZmMDJcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMzhdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIzOF1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMzhdW2ddXT02MDkyOCtnLHlbNjA5MjgrZ109X1syMzhdW2ddKTtmb3IoX1syNTBd'@;
put 'PSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTIxNzBcdTIxNzFcdTIxNzJcdTIxNzNcdTIxNzRcdTIxNzVcdTIxNzZcdTIxNzdcdTIxNzhcdTIxNzlcdTIxNjBcdTIxNjFcdTIxNjJcdTIxNjNcdTIxNjRcdTIxNjVcdTIxNjZcdTIxNjdc'@;
put 'dTIxNjhcdTIxNjlcdWZmZTJcdWZmZTRcdWZmMDdcdWZmMDJcdTMyMzFcdTIxMTZcdTIxMjFcdTIyMzVcdTdlOGFcdTg5MWNcdTkzNDhcdTkyODhcdTg0ZGNcdTRmYzlcdTcwYmJcdTY2MzFcdTY4YzhcdTkyZjlcdTY2ZmJcdTVmNDVcdTRlMjhcdTRlZTFcdTRlZmNcdTRmMDBcdTRmMDNcdTRm'@;
put 'MzlcdTRmNTZcdTRmOTJcdTRmOGFcdTRmOWFcdTRmOTRcdTRmY2RcdTUwNDBcdTUwMjJcdTRmZmZcdTUwMWVcdTUwNDZcdTUwNzBcdTUwNDJcdTUwOTRcdTUwZjRcdTUwZDhcdTUxNGFcdWZmZmRcdTUxNjRcdTUxOWRcdTUxYmVcdTUxZWNcdTUyMTVcdTUyOWNcdTUyYTZcdTUyYzBcdTUyZGJc'@;
put 'dTUzMDBcdTUzMDdcdTUzMjRcdTUzNzJcdTUzOTNcdTUzYjJcdTUzZGRcdWZhMGVcdTU0OWNcdTU0OGFcdTU0YTlcdTU0ZmZcdTU1ODZcdTU3NTlcdTU3NjVcdTU3YWNcdTU3YzhcdTU3YzdcdWZhMGZcdWZhMTBcdTU4OWVcdTU4YjJcdTU5MGJcdTU5NTNcdTU5NWJcdTU5NWRcdTU5NjNcdTU5'@;
put 'YTRcdTU5YmFcdTViNTZcdTViYzBcdTc1MmZcdTViZDhcdTViZWNcdTVjMWVcdTVjYTZcdTVjYmFcdTVjZjVcdTVkMjdcdTVkNTNcdWZhMTFcdTVkNDJcdTVkNmRcdTVkYjhcdTVkYjlcdTVkZDBcdTVmMjFcdTVmMzRcdTVmNjdcdTVmYjdcdTVmZGVcdTYwNWRcdTYwODVcdTYwOGFcdTYwZGVc'@;
put 'dTYwZDVcdTYxMjBcdTYwZjJcdTYxMTFcdTYxMzdcdTYxMzBcdTYxOThcdTYyMTNcdTYyYTZcdTYzZjVcdTY0NjBcdTY0OWRcdTY0Y2VcdTY1NGVcdTY2MDBcdTY2MTVcdTY2M2JcdTY2MDlcdTY2MmVcdTY2MWVcdTY2MjRcdTY2NjVcdTY2NTdcdTY2NTlcdWZhMTJcdTY2NzNcdTY2OTlcdTY2'@;
put 'YTBcdTY2YjJcdTY2YmZcdTY2ZmFcdTY3MGVcdWY5MjlcdTY3NjZcdTY3YmJcdTY4NTJcdTY3YzBcdTY4MDFcdTY4NDRcdTY4Y2ZcdWZhMTNcdTY5NjhcdWZhMTRcdTY5OThcdTY5ZTJcdTZhMzBcdTZhNmJcdTZhNDZcdTZhNzNcdTZhN2VcdTZhZTJcdTZhZTRcdTZiZDZcdTZjM2ZcdTZjNWNc'@;
put 'dTZjODZcdTZjNmZcdTZjZGFcdTZkMDRcdTZkODdcdTZkNmZcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syNTBdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzI1MF1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syNTBdW2ddXT02NGUzK2cseVs2NGUzK2ddPV9bMjUwXVtnXSk7'@;
put 'Zm9yKF9bMjUxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2ZDk2XHU2ZGFjXHU2ZGNmXHU2ZGY4XHU2ZGYyXHU2ZGZjXHU2ZTM5XHU2ZTVjXHU2ZTI3XHU2ZTNjXHU2ZWJmXHU2Zjg4XHU2ZmI1XHU2ZmY1XHU3MDA1XHU3MDA3XHU3'@;
put 'MDI4XHU3MDg1XHU3MGFiXHU3MTBmXHU3MTA0XHU3MTVjXHU3MTQ2XHU3MTQ3XHVmYTE1XHU3MWMxXHU3MWZlXHU3MmIxXHU3MmJlXHU3MzI0XHVmYTE2XHU3Mzc3XHU3M2JkXHU3M2M5XHU3M2Q2XHU3M2UzXHU3M2QyXHU3NDA3XHU3M2Y1XHU3NDI2XHU3NDJhXHU3NDI5XHU3NDJlXHU3NDYy'@;
put 'XHU3NDg5XHU3NDlmXHU3NTAxXHU3NTZmXHU3NjgyXHU3NjljXHU3NjllXHU3NjliXHU3NmE2XHVmYTE3XHU3NzQ2XHU1MmFmXHU3ODIxXHU3ODRlXHU3ODY0XHU3ODdhXHU3OTMwXHVmYTE4XHVmYTE5XHVmZmZkXHVmYTFhXHU3OTk0XHVmYTFiXHU3OTliXHU3YWQxXHU3YWU3XHVmYTFjXHU3'@;
put 'YWViXHU3YjllXHVmYTFkXHU3ZDQ4XHU3ZDVjXHU3ZGI3XHU3ZGEwXHU3ZGQ2XHU3ZTUyXHU3ZjQ3XHU3ZmExXHVmYTFlXHU4MzAxXHU4MzYyXHU4MzdmXHU4M2M3XHU4M2Y2XHU4NDQ4XHU4NGI0XHU4NTUzXHU4NTU5XHU4NTZiXHVmYTFmXHU4NWIwXHVmYTIwXHVmYTIxXHU4ODA3XHU4OGY1'@;
put 'XHU4YTEyXHU4YTM3XHU4YTc5XHU4YWE3XHU4YWJlXHU4YWRmXHVmYTIyXHU4YWY2XHU4YjUzXHU4YjdmXHU4Y2YwXHU4Y2Y0XHU4ZDEyXHU4ZDc2XHVmYTIzXHU4ZWNmXHVmYTI0XHVmYTI1XHU5MDY3XHU5MGRlXHVmYTI2XHU5MTE1XHU5MTI3XHU5MWRhXHU5MWQ3XHU5MWRlXHU5MWVkXHU5'@;
put 'MWVlXHU5MWU0XHU5MWU1XHU5MjA2XHU5MjEwXHU5MjBhXHU5MjNhXHU5MjQwXHU5MjNjXHU5MjRlXHU5MjU5XHU5MjUxXHU5MjM5XHU5MjY3XHU5MmE3XHU5Mjc3XHU5Mjc4XHU5MmU3XHU5MmQ3XHU5MmQ5XHU5MmQwXHVmYTI3XHU5MmQ1XHU5MmUwXHU5MmQzXHU5MzI1XHU5MzIxXHU5MmZi'@;
put 'XHVmYTI4XHU5MzFlXHU5MmZmXHU5MzFkXHU5MzAyXHU5MzcwXHU5MzU3XHU5M2E0XHU5M2M2XHU5M2RlXHU5M2Y4XHU5NDMxXHU5NDQ1XHU5NDQ4XHU5NTkyXHVmOWRjXHVmYTI5XHU5NjlkXHU5NmFmXHU5NzMzXHU5NzNiXHU5NzQzXHU5NzRkXHU5NzRmXHU5NzUxXHU5NzU1XHU5ODU3XHU5'@;
put 'ODY1XHVmYTJhXHVmYTJiXHU5OTI3XHVmYTJjXHU5OTllXHU5YTRlXHU5YWQ5XHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjUxXS5sZW5ndGg7KytnKTY1NTMzIT09X1syNTFdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjUxXVtnXV09NjQyNTYrZyx5WzY0MjU2K2dd'@;
put 'PV9bMjUxXVtnXSk7Zm9yKF9bMjUyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5YWRjXHU5Yjc1XHU5YjcyXHU5YjhmXHU5YmIxXHU5YmJiXHU5YzAwXHU5ZDcwXHU5ZDZiXHVmYTJkXHU5ZTE5XHU5ZWQxXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjUyXS5sZW5ndGg7KytnKTY1NTMzIT09X1syNTJdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjUyXVtnXV09NjQ1MTIr'@;
put 'Zyx5WzY0NTEyK2ddPV9bMjUyXVtnXSk7cmV0dXJue2VuYzpJLGRlYzp5fX0oKSxYWzkzNl09ZnVuY3Rpb24oKXt2YXIgZyx5PVtdLEk9e30sXz1bXTtmb3IoX1swXT0iXDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XGJcdFxuXHZcZlxyXHgwZVx4MGZceDEwXHgxMVx4MTJceDEzXHgx'@;
put 'NFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmICFcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9flx4N2ZcdTIwYWNcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1swXS5sZW5ndGg7KytnKTY1NTMzIT09X1swXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzBdW2dd'@;
put 'XT0wK2cseVswK2ddPV9bMF1bZ10pO2ZvcihfWzEyOV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NGUwMlx1NGUwNFx1NGUwNVx1NGUwNlx1NGUwZlx1NGUxMlx1NGUxN1x1NGUxZlx1NGUyMFx1NGUyMVx1NGUyM1x1NGUyNlx1NGUy'@;
put 'OVx1NGUyZVx1NGUyZlx1NGUzMVx1NGUzM1x1NGUzNVx1NGUzN1x1NGUzY1x1NGU0MFx1NGU0MVx1NGU0Mlx1NGU0NFx1NGU0Nlx1NGU0YVx1NGU1MVx1NGU1NVx1NGU1N1x1NGU1YVx1NGU1Ylx1NGU2Mlx1NGU2M1x1NGU2NFx1NGU2NVx1NGU2N1x1NGU2OFx1NGU2YVx1NGU2Ylx1NGU2Y1x1'@;
put 'NGU2ZFx1NGU2ZVx1NGU2Zlx1NGU3Mlx1NGU3NFx1NGU3NVx1NGU3Nlx1NGU3N1x1NGU3OFx1NGU3OVx1NGU3YVx1NGU3Ylx1NGU3Y1x1NGU3ZFx1NGU3Zlx1NGU4MFx1NGU4MVx1NGU4Mlx1NGU4M1x1NGU4NFx1NGU4NVx1NGU4N1x1NGU4YVx1ZmZmZFx1NGU5MFx1NGU5Nlx1NGU5N1x1NGU5'@;
put 'OVx1NGU5Y1x1NGU5ZFx1NGU5ZVx1NGVhM1x1NGVhYVx1NGVhZlx1NGViMFx1NGViMVx1NGViNFx1NGViNlx1NGViN1x1NGViOFx1NGViOVx1NGViY1x1NGViZFx1NGViZVx1NGVjOFx1NGVjY1x1NGVjZlx1NGVkMFx1NGVkMlx1NGVkYVx1NGVkYlx1NGVkY1x1NGVlMFx1NGVlMlx1NGVlNlx1'@;
put 'NGVlN1x1NGVlOVx1NGVlZFx1NGVlZVx1NGVlZlx1NGVmMVx1NGVmNFx1NGVmOFx1NGVmOVx1NGVmYVx1NGVmY1x1NGVmZVx1NGYwMFx1NGYwMlx1NGYwM1x1NGYwNFx1NGYwNVx1NGYwNlx1NGYwN1x1NGYwOFx1NGYwYlx1NGYwY1x1NGYxMlx1NGYxM1x1NGYxNFx1NGYxNVx1NGYxNlx1NGYx'@;
put 'Y1x1NGYxZFx1NGYyMVx1NGYyM1x1NGYyOFx1NGYyOVx1NGYyY1x1NGYyZFx1NGYyZVx1NGYzMVx1NGYzM1x1NGYzNVx1NGYzN1x1NGYzOVx1NGYzYlx1NGYzZVx1NGYzZlx1NGY0MFx1NGY0MVx1NGY0Mlx1NGY0NFx1NGY0NVx1NGY0N1x1NGY0OFx1NGY0OVx1NGY0YVx1NGY0Ylx1NGY0Y1x1'@;
put 'NGY1Mlx1NGY1NFx1NGY1Nlx1NGY2MVx1NGY2Mlx1NGY2Nlx1NGY2OFx1NGY2YVx1NGY2Ylx1NGY2ZFx1NGY2ZVx1NGY3MVx1NGY3Mlx1NGY3NVx1NGY3N1x1NGY3OFx1NGY3OVx1NGY3YVx1NGY3ZFx1NGY4MFx1NGY4MVx1NGY4Mlx1NGY4NVx1NGY4Nlx1NGY4N1x1NGY4YVx1NGY4Y1x1NGY4'@;
put 'ZVx1NGY5MFx1NGY5Mlx1NGY5M1x1NGY5NVx1NGY5Nlx1NGY5OFx1NGY5OVx1NGY5YVx1NGY5Y1x1NGY5ZVx1NGY5Zlx1NGZhMVx1NGZhMlx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzEyOV0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTI5XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzEyOV1b'@;
put 'Z11dPTMzMDI0K2cseVszMzAyNCtnXT1fWzEyOV1bZ10pO2ZvcihfWzEzMF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NGZhNFx1NGZhYlx1NGZhZFx1NGZiMFx1NGZiMVx1NGZiMlx1NGZiM1x1NGZiNFx1NGZiNlx1NGZiN1x1NGZi'@;
put 'OFx1NGZiOVx1NGZiYVx1NGZiYlx1NGZiY1x1NGZiZFx1NGZiZVx1NGZjMFx1NGZjMVx1NGZjMlx1NGZjNlx1NGZjN1x1NGZjOFx1NGZjOVx1NGZjYlx1NGZjY1x1NGZjZFx1NGZkMlx1NGZkM1x1NGZkNFx1NGZkNVx1NGZkNlx1NGZkOVx1NGZkYlx1NGZlMFx1NGZlMlx1NGZlNFx1NGZlNVx1'@;
put 'NGZlN1x1NGZlYlx1NGZlY1x1NGZmMFx1NGZmMlx1NGZmNFx1NGZmNVx1NGZmNlx1NGZmN1x1NGZmOVx1NGZmYlx1NGZmY1x1NGZmZFx1NGZmZlx1NTAwMFx1NTAwMVx1NTAwMlx1NTAwM1x1NTAwNFx1NTAwNVx1NTAwNlx1NTAwN1x1NTAwOFx1NTAwOVx1NTAwYVx1ZmZmZFx1NTAwYlx1NTAw'@;
put 'ZVx1NTAxMFx1NTAxMVx1NTAxM1x1NTAxNVx1NTAxNlx1NTAxN1x1NTAxYlx1NTAxZFx1NTAxZVx1NTAyMFx1NTAyMlx1NTAyM1x1NTAyNFx1NTAyN1x1NTAyYlx1NTAyZlx1NTAzMFx1NTAzMVx1NTAzMlx1NTAzM1x1NTAzNFx1NTAzNVx1NTAzNlx1NTAzN1x1NTAzOFx1NTAzOVx1NTAzYlx1'@;
put 'NTAzZFx1NTAzZlx1NTA0MFx1NTA0MVx1NTA0Mlx1NTA0NFx1NTA0NVx1NTA0Nlx1NTA0OVx1NTA0YVx1NTA0Ylx1NTA0ZFx1NTA1MFx1NTA1MVx1NTA1Mlx1NTA1M1x1NTA1NFx1NTA1Nlx1NTA1N1x1NTA1OFx1NTA1OVx1NTA1Ylx1NTA1ZFx1NTA1ZVx1NTA1Zlx1NTA2MFx1NTA2MVx1NTA2'@;
put 'Mlx1NTA2M1x1NTA2NFx1NTA2Nlx1NTA2N1x1NTA2OFx1NTA2OVx1NTA2YVx1NTA2Ylx1NTA2ZFx1NTA2ZVx1NTA2Zlx1NTA3MFx1NTA3MVx1NTA3Mlx1NTA3M1x1NTA3NFx1NTA3NVx1NTA3OFx1NTA3OVx1NTA3YVx1NTA3Y1x1NTA3ZFx1NTA4MVx1NTA4Mlx1NTA4M1x1NTA4NFx1NTA4Nlx1'@;
put 'NTA4N1x1NTA4OVx1NTA4YVx1NTA4Ylx1NTA4Y1x1NTA4ZVx1NTA4Zlx1NTA5MFx1NTA5MVx1NTA5Mlx1NTA5M1x1NTA5NFx1NTA5NVx1NTA5Nlx1NTA5N1x1NTA5OFx1NTA5OVx1NTA5YVx1NTA5Ylx1NTA5Y1x1NTA5ZFx1NTA5ZVx1NTA5Zlx1NTBhMFx1NTBhMVx1NTBhMlx1NTBhNFx1NTBh'@;
put 'Nlx1NTBhYVx1NTBhYlx1NTBhZFx1NTBhZVx1NTBhZlx1NTBiMFx1NTBiMVx1NTBiM1x1NTBiNFx1NTBiNVx1NTBiNlx1NTBiN1x1NTBiOFx1NTBiOVx1NTBiY1x1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzEzMF0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTMwXVtnXS5jaGFyQ29kZUF0KDAp'@;
put 'JiYoSVtfWzEzMF1bZ11dPTMzMjgwK2cseVszMzI4MCtnXT1fWzEzMF1bZ10pO2ZvcihfWzEzMV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTBiZFx1NTBiZVx1NTBiZlx1NTBjMFx1NTBjMVx1NTBjMlx1NTBjM1x1NTBjNFx1NTBj'@;
put 'NVx1NTBjNlx1NTBjN1x1NTBjOFx1NTBjOVx1NTBjYVx1NTBjYlx1NTBjY1x1NTBjZFx1NTBjZVx1NTBkMFx1NTBkMVx1NTBkMlx1NTBkM1x1NTBkNFx1NTBkNVx1NTBkN1x1NTBkOFx1NTBkOVx1NTBkYlx1NTBkY1x1NTBkZFx1NTBkZVx1NTBkZlx1NTBlMFx1NTBlMVx1NTBlMlx1NTBlM1x1'@;
put 'NTBlNFx1NTBlNVx1NTBlOFx1NTBlOVx1NTBlYVx1NTBlYlx1NTBlZlx1NTBmMFx1NTBmMVx1NTBmMlx1NTBmNFx1NTBmNlx1NTBmN1x1NTBmOFx1NTBmOVx1NTBmYVx1NTBmY1x1NTBmZFx1NTBmZVx1NTBmZlx1NTEwMFx1NTEwMVx1NTEwMlx1NTEwM1x1NTEwNFx1NTEwNVx1NTEwOFx1ZmZm'@;
put 'ZFx1NTEwOVx1NTEwYVx1NTEwY1x1NTEwZFx1NTEwZVx1NTEwZlx1NTExMFx1NTExMVx1NTExM1x1NTExNFx1NTExNVx1NTExNlx1NTExN1x1NTExOFx1NTExOVx1NTExYVx1NTExYlx1NTExY1x1NTExZFx1NTExZVx1NTExZlx1NTEyMFx1NTEyMlx1NTEyM1x1NTEyNFx1NTEyNVx1NTEyNlx1'@;
put 'NTEyN1x1NTEyOFx1NTEyOVx1NTEyYVx1NTEyYlx1NTEyY1x1NTEyZFx1NTEyZVx1NTEyZlx1NTEzMFx1NTEzMVx1NTEzMlx1NTEzM1x1NTEzNFx1NTEzNVx1NTEzNlx1NTEzN1x1NTEzOFx1NTEzOVx1NTEzYVx1NTEzYlx1NTEzY1x1NTEzZFx1NTEzZVx1NTE0Mlx1NTE0N1x1NTE0YVx1NTE0'@;
put 'Y1x1NTE0ZVx1NTE0Zlx1NTE1MFx1NTE1Mlx1NTE1M1x1NTE1N1x1NTE1OFx1NTE1OVx1NTE1Ylx1NTE1ZFx1NTE1ZVx1NTE1Zlx1NTE2MFx1NTE2MVx1NTE2M1x1NTE2NFx1NTE2Nlx1NTE2N1x1NTE2OVx1NTE2YVx1NTE2Zlx1NTE3Mlx1NTE3YVx1NTE3ZVx1NTE3Zlx1NTE4M1x1NTE4NFx1'@;
put 'NTE4Nlx1NTE4N1x1NTE4YVx1NTE4Ylx1NTE4ZVx1NTE4Zlx1NTE5MFx1NTE5MVx1NTE5M1x1NTE5NFx1NTE5OFx1NTE5YVx1NTE5ZFx1NTE5ZVx1NTE5Zlx1NTFhMVx1NTFhM1x1NTFhNlx1NTFhN1x1NTFhOFx1NTFhOVx1NTFhYVx1NTFhZFx1NTFhZVx1NTFiNFx1NTFiOFx1NTFiOVx1NTFi'@;
put 'YVx1NTFiZVx1NTFiZlx1NTFjMVx1NTFjMlx1NTFjM1x1NTFjNVx1NTFjOFx1NTFjYVx1NTFjZFx1NTFjZVx1NTFkMFx1NTFkMlx1NTFkM1x1NTFkNFx1NTFkNVx1NTFkNlx1NTFkN1x1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzEzMV0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTMxXVtnXS5j'@;
put 'aGFyQ29kZUF0KDApJiYoSVtfWzEzMV1bZ11dPTMzNTM2K2cseVszMzUzNitnXT1fWzEzMV1bZ10pO2ZvcihfWzEzMl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTFkOFx1NTFkOVx1NTFkYVx1NTFkY1x1NTFkZVx1NTFkZlx1NTFl'@;
put 'Mlx1NTFlM1x1NTFlNVx1NTFlNlx1NTFlN1x1NTFlOFx1NTFlOVx1NTFlYVx1NTFlY1x1NTFlZVx1NTFmMVx1NTFmMlx1NTFmNFx1NTFmN1x1NTFmZVx1NTIwNFx1NTIwNVx1NTIwOVx1NTIwYlx1NTIwY1x1NTIwZlx1NTIxMFx1NTIxM1x1NTIxNFx1NTIxNVx1NTIxY1x1NTIxZVx1NTIxZlx1'@;
put 'NTIyMVx1NTIyMlx1NTIyM1x1NTIyNVx1NTIyNlx1NTIyN1x1NTIyYVx1NTIyY1x1NTIyZlx1NTIzMVx1NTIzMlx1NTIzNFx1NTIzNVx1NTIzY1x1NTIzZVx1NTI0NFx1NTI0NVx1NTI0Nlx1NTI0N1x1NTI0OFx1NTI0OVx1NTI0Ylx1NTI0ZVx1NTI0Zlx1NTI1Mlx1NTI1M1x1NTI1NVx1NTI1'@;
put 'N1x1NTI1OFx1ZmZmZFx1NTI1OVx1NTI1YVx1NTI1Ylx1NTI1ZFx1NTI1Zlx1NTI2MFx1NTI2Mlx1NTI2M1x1NTI2NFx1NTI2Nlx1NTI2OFx1NTI2Ylx1NTI2Y1x1NTI2ZFx1NTI2ZVx1NTI3MFx1NTI3MVx1NTI3M1x1NTI3NFx1NTI3NVx1NTI3Nlx1NTI3N1x1NTI3OFx1NTI3OVx1NTI3YVx1'@;
put 'NTI3Ylx1NTI3Y1x1NTI3ZVx1NTI4MFx1NTI4M1x1NTI4NFx1NTI4NVx1NTI4Nlx1NTI4N1x1NTI4OVx1NTI4YVx1NTI4Ylx1NTI4Y1x1NTI4ZFx1NTI4ZVx1NTI4Zlx1NTI5MVx1NTI5Mlx1NTI5NFx1NTI5NVx1NTI5Nlx1NTI5N1x1NTI5OFx1NTI5OVx1NTI5YVx1NTI5Y1x1NTJhNFx1NTJh'@;
put 'NVx1NTJhNlx1NTJhN1x1NTJhZVx1NTJhZlx1NTJiMFx1NTJiNFx1NTJiNVx1NTJiNlx1NTJiN1x1NTJiOFx1NTJiOVx1NTJiYVx1NTJiYlx1NTJiY1x1NTJiZFx1NTJjMFx1NTJjMVx1NTJjMlx1NTJjNFx1NTJjNVx1NTJjNlx1NTJjOFx1NTJjYVx1NTJjY1x1NTJjZFx1NTJjZVx1NTJjZlx1'@;
put 'NTJkMVx1NTJkM1x1NTJkNFx1NTJkNVx1NTJkN1x1NTJkOVx1NTJkYVx1NTJkYlx1NTJkY1x1NTJkZFx1NTJkZVx1NTJlMFx1NTJlMVx1NTJlMlx1NTJlM1x1NTJlNVx1NTJlNlx1NTJlN1x1NTJlOFx1NTJlOVx1NTJlYVx1NTJlYlx1NTJlY1x1NTJlZFx1NTJlZVx1NTJlZlx1NTJmMVx1NTJm'@;
put 'Mlx1NTJmM1x1NTJmNFx1NTJmNVx1NTJmNlx1NTJmN1x1NTJmOFx1NTJmYlx1NTJmY1x1NTJmZFx1NTMwMVx1NTMwMlx1NTMwM1x1NTMwNFx1NTMwN1x1NTMwOVx1NTMwYVx1NTMwYlx1NTMwY1x1NTMwZVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzEzMl0ubGVuZ3RoOysrZyk2NTUzMyE9'@;
put 'PV9bMTMyXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzEzMl1bZ11dPTMzNzkyK2cseVszMzc5MitnXT1fWzEzMl1bZ10pO2ZvcihfWzEzM109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTMxMVx1NTMxMlx1NTMxM1x1NTMxNFx1NTMx'@;
put 'OFx1NTMxYlx1NTMxY1x1NTMxZVx1NTMxZlx1NTMyMlx1NTMyNFx1NTMyNVx1NTMyN1x1NTMyOFx1NTMyOVx1NTMyYlx1NTMyY1x1NTMyZFx1NTMyZlx1NTMzMFx1NTMzMVx1NTMzMlx1NTMzM1x1NTMzNFx1NTMzNVx1NTMzNlx1NTMzN1x1NTMzOFx1NTMzY1x1NTMzZFx1NTM0MFx1NTM0Mlx1'@;
put 'NTM0NFx1NTM0Nlx1NTM0Ylx1NTM0Y1x1NTM0ZFx1NTM1MFx1NTM1NFx1NTM1OFx1NTM1OVx1NTM1Ylx1NTM1ZFx1NTM2NVx1NTM2OFx1NTM2YVx1NTM2Y1x1NTM2ZFx1NTM3Mlx1NTM3Nlx1NTM3OVx1NTM3Ylx1NTM3Y1x1NTM3ZFx1NTM3ZVx1NTM4MFx1NTM4MVx1NTM4M1x1NTM4N1x1NTM4'@;
put 'OFx1NTM4YVx1NTM4ZVx1NTM4Zlx1ZmZmZFx1NTM5MFx1NTM5MVx1NTM5Mlx1NTM5M1x1NTM5NFx1NTM5Nlx1NTM5N1x1NTM5OVx1NTM5Ylx1NTM5Y1x1NTM5ZVx1NTNhMFx1NTNhMVx1NTNhNFx1NTNhN1x1NTNhYVx1NTNhYlx1NTNhY1x1NTNhZFx1NTNhZlx1NTNiMFx1NTNiMVx1NTNiMlx1'@;
put 'NTNiM1x1NTNiNFx1NTNiNVx1NTNiN1x1NTNiOFx1NTNiOVx1NTNiYVx1NTNiY1x1NTNiZFx1NTNiZVx1NTNjMFx1NTNjM1x1NTNjNFx1NTNjNVx1NTNjNlx1NTNjN1x1NTNjZVx1NTNjZlx1NTNkMFx1NTNkMlx1NTNkM1x1NTNkNVx1NTNkYVx1NTNkY1x1NTNkZFx1NTNkZVx1NTNlMVx1NTNl'@;
put 'Mlx1NTNlN1x1NTNmNFx1NTNmYVx1NTNmZVx1NTNmZlx1NTQwMFx1NTQwMlx1NTQwNVx1NTQwN1x1NTQwYlx1NTQxNFx1NTQxOFx1NTQxOVx1NTQxYVx1NTQxY1x1NTQyMlx1NTQyNFx1NTQyNVx1NTQyYVx1NTQzMFx1NTQzM1x1NTQzNlx1NTQzN1x1NTQzYVx1NTQzZFx1NTQzZlx1NTQ0MVx1'@;
put 'NTQ0Mlx1NTQ0NFx1NTQ0NVx1NTQ0N1x1NTQ0OVx1NTQ0Y1x1NTQ0ZFx1NTQ0ZVx1NTQ0Zlx1NTQ1MVx1NTQ1YVx1NTQ1ZFx1NTQ1ZVx1NTQ1Zlx1NTQ2MFx1NTQ2MVx1NTQ2M1x1NTQ2NVx1NTQ2N1x1NTQ2OVx1NTQ2YVx1NTQ2Ylx1NTQ2Y1x1NTQ2ZFx1NTQ2ZVx1NTQ2Zlx1NTQ3MFx1NTQ3'@;
put 'NFx1NTQ3OVx1NTQ3YVx1NTQ3ZVx1NTQ3Zlx1NTQ4MVx1NTQ4M1x1NTQ4NVx1NTQ4N1x1NTQ4OFx1NTQ4OVx1NTQ4YVx1NTQ4ZFx1NTQ5MVx1NTQ5M1x1NTQ5N1x1NTQ5OFx1NTQ5Y1x1NTQ5ZVx1NTQ5Zlx1NTRhMFx1NTRhMVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzEzM10ubGVuZ3Ro'@;
put 'OysrZyk2NTUzMyE9PV9bMTMzXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzEzM11bZ11dPTM0MDQ4K2cseVszNDA0OCtnXT1fWzEzM11bZ10pO2ZvcihfWzEzNF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTRhMlx1NTRhNVx1NTRh'@;
put 'ZVx1NTRiMFx1NTRiMlx1NTRiNVx1NTRiNlx1NTRiN1x1NTRiOVx1NTRiYVx1NTRiY1x1NTRiZVx1NTRjM1x1NTRjNVx1NTRjYVx1NTRjYlx1NTRkNlx1NTRkOFx1NTRkYlx1NTRlMFx1NTRlMVx1NTRlMlx1NTRlM1x1NTRlNFx1NTRlYlx1NTRlY1x1NTRlZlx1NTRmMFx1NTRmMVx1NTRmNFx1'@;
put 'NTRmNVx1NTRmNlx1NTRmN1x1NTRmOFx1NTRmOVx1NTRmYlx1NTRmZVx1NTUwMFx1NTUwMlx1NTUwM1x1NTUwNFx1NTUwNVx1NTUwOFx1NTUwYVx1NTUwYlx1NTUwY1x1NTUwZFx1NTUwZVx1NTUxMlx1NTUxM1x1NTUxNVx1NTUxNlx1NTUxN1x1NTUxOFx1NTUxOVx1NTUxYVx1NTUxY1x1NTUx'@;
put 'ZFx1NTUxZVx1NTUxZlx1NTUyMVx1NTUyNVx1NTUyNlx1ZmZmZFx1NTUyOFx1NTUyOVx1NTUyYlx1NTUyZFx1NTUzMlx1NTUzNFx1NTUzNVx1NTUzNlx1NTUzOFx1NTUzOVx1NTUzYVx1NTUzYlx1NTUzZFx1NTU0MFx1NTU0Mlx1NTU0NVx1NTU0N1x1NTU0OFx1NTU0Ylx1NTU0Y1x1NTU0ZFx1'@;
put 'NTU0ZVx1NTU0Zlx1NTU1MVx1NTU1Mlx1NTU1M1x1NTU1NFx1NTU1N1x1NTU1OFx1NTU1OVx1NTU1YVx1NTU1Ylx1NTU1ZFx1NTU1ZVx1NTU1Zlx1NTU2MFx1NTU2Mlx1NTU2M1x1NTU2OFx1NTU2OVx1NTU2Ylx1NTU2Zlx1NTU3MFx1NTU3MVx1NTU3Mlx1NTU3M1x1NTU3NFx1NTU3OVx1NTU3'@;
put 'YVx1NTU3ZFx1NTU3Zlx1NTU4NVx1NTU4Nlx1NTU4Y1x1NTU4ZFx1NTU4ZVx1NTU5MFx1NTU5Mlx1NTU5M1x1NTU5NVx1NTU5Nlx1NTU5N1x1NTU5YVx1NTU5Ylx1NTU5ZVx1NTVhMFx1NTVhMVx1NTVhMlx1NTVhM1x1NTVhNFx1NTVhNVx1NTVhNlx1NTVhOFx1NTVhOVx1NTVhYVx1NTVhYlx1'@;
put 'NTVhY1x1NTVhZFx1NTVhZVx1NTVhZlx1NTViMFx1NTViMlx1NTViNFx1NTViNlx1NTViOFx1NTViYVx1NTViY1x1NTViZlx1NTVjMFx1NTVjMVx1NTVjMlx1NTVjM1x1NTVjNlx1NTVjN1x1NTVjOFx1NTVjYVx1NTVjYlx1NTVjZVx1NTVjZlx1NTVkMFx1NTVkNVx1NTVkN1x1NTVkOFx1NTVk'@;
put 'OVx1NTVkYVx1NTVkYlx1NTVkZVx1NTVlMFx1NTVlMlx1NTVlN1x1NTVlOVx1NTVlZFx1NTVlZVx1NTVmMFx1NTVmMVx1NTVmNFx1NTVmNlx1NTVmOFx1NTVmOVx1NTVmYVx1NTVmYlx1NTVmY1x1NTVmZlx1NTYwMlx1NTYwM1x1NTYwNFx1NTYwNVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1f'@;
put 'WzEzNF0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTM0XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzEzNF1bZ11dPTM0MzA0K2cseVszNDMwNCtnXT1fWzEzNF1bZ10pO2ZvcihfWzEzNV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTYw'@;
put 'Nlx1NTYwN1x1NTYwYVx1NTYwYlx1NTYwZFx1NTYxMFx1NTYxMVx1NTYxMlx1NTYxM1x1NTYxNFx1NTYxNVx1NTYxNlx1NTYxN1x1NTYxOVx1NTYxYVx1NTYxY1x1NTYxZFx1NTYyMFx1NTYyMVx1NTYyMlx1NTYyNVx1NTYyNlx1NTYyOFx1NTYyOVx1NTYyYVx1NTYyYlx1NTYyZVx1NTYyZlx1'@;
put 'NTYzMFx1NTYzM1x1NTYzNVx1NTYzN1x1NTYzOFx1NTYzYVx1NTYzY1x1NTYzZFx1NTYzZVx1NTY0MFx1NTY0MVx1NTY0Mlx1NTY0M1x1NTY0NFx1NTY0NVx1NTY0Nlx1NTY0N1x1NTY0OFx1NTY0OVx1NTY0YVx1NTY0Ylx1NTY0Zlx1NTY1MFx1NTY1MVx1NTY1Mlx1NTY1M1x1NTY1NVx1NTY1'@;
put 'Nlx1NTY1YVx1NTY1Ylx1NTY1ZFx1NTY1ZVx1NTY1Zlx1NTY2MFx1NTY2MVx1ZmZmZFx1NTY2M1x1NTY2NVx1NTY2Nlx1NTY2N1x1NTY2ZFx1NTY2ZVx1NTY2Zlx1NTY3MFx1NTY3Mlx1NTY3M1x1NTY3NFx1NTY3NVx1NTY3N1x1NTY3OFx1NTY3OVx1NTY3YVx1NTY3ZFx1NTY3ZVx1NTY3Zlx1'@;
put 'NTY4MFx1NTY4MVx1NTY4Mlx1NTY4M1x1NTY4NFx1NTY4N1x1NTY4OFx1NTY4OVx1NTY4YVx1NTY4Ylx1NTY4Y1x1NTY4ZFx1NTY5MFx1NTY5MVx1NTY5Mlx1NTY5NFx1NTY5NVx1NTY5Nlx1NTY5N1x1NTY5OFx1NTY5OVx1NTY5YVx1NTY5Ylx1NTY5Y1x1NTY5ZFx1NTY5ZVx1NTY5Zlx1NTZh'@;
put 'MFx1NTZhMVx1NTZhMlx1NTZhNFx1NTZhNVx1NTZhNlx1NTZhN1x1NTZhOFx1NTZhOVx1NTZhYVx1NTZhYlx1NTZhY1x1NTZhZFx1NTZhZVx1NTZiMFx1NTZiMVx1NTZiMlx1NTZiM1x1NTZiNFx1NTZiNVx1NTZiNlx1NTZiOFx1NTZiOVx1NTZiYVx1NTZiYlx1NTZiZFx1NTZiZVx1NTZiZlx1'@;
put 'NTZjMFx1NTZjMVx1NTZjMlx1NTZjM1x1NTZjNFx1NTZjNVx1NTZjNlx1NTZjN1x1NTZjOFx1NTZjOVx1NTZjYlx1NTZjY1x1NTZjZFx1NTZjZVx1NTZjZlx1NTZkMFx1NTZkMVx1NTZkMlx1NTZkM1x1NTZkNVx1NTZkNlx1NTZkOFx1NTZkOVx1NTZkY1x1NTZlM1x1NTZlNVx1NTZlNlx1NTZl'@;
put 'N1x1NTZlOFx1NTZlOVx1NTZlYVx1NTZlY1x1NTZlZVx1NTZlZlx1NTZmMlx1NTZmM1x1NTZmNlx1NTZmN1x1NTZmOFx1NTZmYlx1NTZmY1x1NTcwMFx1NTcwMVx1NTcwMlx1NTcwNVx1NTcwN1x1NTcwYlx1NTcwY1x1NTcwZFx1NTcwZVx1NTcwZlx1NTcxMFx1NTcxMVx1ZmZmZCIuc3BsaXQo'@;
put 'IiIpLGc9MDtnIT1fWzEzNV0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTM1XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzEzNV1bZ11dPTM0NTYwK2cseVszNDU2MCtnXT1fWzEzNV1bZ10pO2ZvcihfWzEzNl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1NTcxMlx1NTcxM1x1NTcxNFx1NTcxNVx1NTcxNlx1NTcxN1x1NTcxOFx1NTcxOVx1NTcxYVx1NTcxYlx1NTcxZFx1NTcxZVx1NTcyMFx1NTcyMVx1NTcyMlx1NTcyNFx1NTcyNVx1NTcyNlx1NTcyN1x1NTcyYlx1NTczMVx1NTczMlx1NTczNFx1NTczNVx1NTczNlx1NTczN1x1'@;
put 'NTczOFx1NTczY1x1NTczZFx1NTczZlx1NTc0MVx1NTc0M1x1NTc0NFx1NTc0NVx1NTc0Nlx1NTc0OFx1NTc0OVx1NTc0Ylx1NTc1Mlx1NTc1M1x1NTc1NFx1NTc1NVx1NTc1Nlx1NTc1OFx1NTc1OVx1NTc2Mlx1NTc2M1x1NTc2NVx1NTc2N1x1NTc2Y1x1NTc2ZVx1NTc3MFx1NTc3MVx1NTc3'@;
put 'Mlx1NTc3NFx1NTc3NVx1NTc3OFx1NTc3OVx1NTc3YVx1NTc3ZFx1NTc3ZVx1NTc3Zlx1NTc4MFx1ZmZmZFx1NTc4MVx1NTc4N1x1NTc4OFx1NTc4OVx1NTc4YVx1NTc4ZFx1NTc4ZVx1NTc4Zlx1NTc5MFx1NTc5MVx1NTc5NFx1NTc5NVx1NTc5Nlx1NTc5N1x1NTc5OFx1NTc5OVx1NTc5YVx1'@;
put 'NTc5Y1x1NTc5ZFx1NTc5ZVx1NTc5Zlx1NTdhNVx1NTdhOFx1NTdhYVx1NTdhY1x1NTdhZlx1NTdiMFx1NTdiMVx1NTdiM1x1NTdiNVx1NTdiNlx1NTdiN1x1NTdiOVx1NTdiYVx1NTdiYlx1NTdiY1x1NTdiZFx1NTdiZVx1NTdiZlx1NTdjMFx1NTdjMVx1NTdjNFx1NTdjNVx1NTdjNlx1NTdj'@;
put 'N1x1NTdjOFx1NTdjOVx1NTdjYVx1NTdjY1x1NTdjZFx1NTdkMFx1NTdkMVx1NTdkM1x1NTdkNlx1NTdkN1x1NTdkYlx1NTdkY1x1NTdkZVx1NTdlMVx1NTdlMlx1NTdlM1x1NTdlNVx1NTdlNlx1NTdlN1x1NTdlOFx1NTdlOVx1NTdlYVx1NTdlYlx1NTdlY1x1NTdlZVx1NTdmMFx1NTdmMVx1'@;
put 'NTdmMlx1NTdmM1x1NTdmNVx1NTdmNlx1NTdmN1x1NTdmYlx1NTdmY1x1NTdmZVx1NTdmZlx1NTgwMVx1NTgwM1x1NTgwNFx1NTgwNVx1NTgwOFx1NTgwOVx1NTgwYVx1NTgwY1x1NTgwZVx1NTgwZlx1NTgxMFx1NTgxMlx1NTgxM1x1NTgxNFx1NTgxNlx1NTgxN1x1NTgxOFx1NTgxYVx1NTgx'@;
put 'Ylx1NTgxY1x1NTgxZFx1NTgxZlx1NTgyMlx1NTgyM1x1NTgyNVx1NTgyNlx1NTgyN1x1NTgyOFx1NTgyOVx1NTgyYlx1NTgyY1x1NTgyZFx1NTgyZVx1NTgyZlx1NTgzMVx1NTgzMlx1NTgzM1x1NTgzNFx1NTgzNlx1NTgzN1x1NTgzOFx1NTgzOVx1NTgzYVx1NTgzYlx1NTgzY1x1NTgzZFx1'@;
put 'ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzEzNl0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTM2XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzEzNl1bZ11dPTM0ODE2K2cseVszNDgxNitnXT1fWzEzNl1bZ10pO2ZvcihfWzEzN109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTgzZVx1NTgzZlx1NTg0MFx1NTg0MVx1NTg0Mlx1NTg0M1x1NTg0NVx1NTg0Nlx1NTg0N1x1NTg0OFx1NTg0OVx1NTg0YVx1NTg0Ylx1NTg0ZVx1NTg0Zlx1NTg1MFx1NTg1Mlx1NTg1M1x1NTg1NVx1NTg1Nlx1NTg1N1x1NTg1OVx1NTg1YVx1NTg1Ylx1'@;
put 'NTg1Y1x1NTg1ZFx1NTg1Zlx1NTg2MFx1NTg2MVx1NTg2Mlx1NTg2M1x1NTg2NFx1NTg2Nlx1NTg2N1x1NTg2OFx1NTg2OVx1NTg2YVx1NTg2ZFx1NTg2ZVx1NTg2Zlx1NTg3MFx1NTg3MVx1NTg3Mlx1NTg3M1x1NTg3NFx1NTg3NVx1NTg3Nlx1NTg3N1x1NTg3OFx1NTg3OVx1NTg3YVx1NTg3'@;
put 'Ylx1NTg3Y1x1NTg3ZFx1NTg3Zlx1NTg4Mlx1NTg4NFx1NTg4Nlx1NTg4N1x1NTg4OFx1NTg4YVx1NTg4Ylx1NTg4Y1x1ZmZmZFx1NTg4ZFx1NTg4ZVx1NTg4Zlx1NTg5MFx1NTg5MVx1NTg5NFx1NTg5NVx1NTg5Nlx1NTg5N1x1NTg5OFx1NTg5Ylx1NTg5Y1x1NTg5ZFx1NThhMFx1NThhMVx1'@;
put 'NThhMlx1NThhM1x1NThhNFx1NThhNVx1NThhNlx1NThhN1x1NThhYVx1NThhYlx1NThhY1x1NThhZFx1NThhZVx1NThhZlx1NThiMFx1NThiMVx1NThiMlx1NThiM1x1NThiNFx1NThiNVx1NThiNlx1NThiN1x1NThiOFx1NThiOVx1NThiYVx1NThiYlx1NThiZFx1NThiZVx1NThiZlx1NThj'@;
put 'MFx1NThjMlx1NThjM1x1NThjNFx1NThjNlx1NThjN1x1NThjOFx1NThjOVx1NThjYVx1NThjYlx1NThjY1x1NThjZFx1NThjZVx1NThjZlx1NThkMFx1NThkMlx1NThkM1x1NThkNFx1NThkNlx1NThkN1x1NThkOFx1NThkOVx1NThkYVx1NThkYlx1NThkY1x1NThkZFx1NThkZVx1NThkZlx1'@;
put 'NThlMFx1NThlMVx1NThlMlx1NThlM1x1NThlNVx1NThlNlx1NThlN1x1NThlOFx1NThlOVx1NThlYVx1NThlZFx1NThlZlx1NThmMVx1NThmMlx1NThmNFx1NThmNVx1NThmN1x1NThmOFx1NThmYVx1NThmYlx1NThmY1x1NThmZFx1NThmZVx1NThmZlx1NTkwMFx1NTkwMVx1NTkwM1x1NTkw'@;
put 'NVx1NTkwNlx1NTkwOFx1NTkwOVx1NTkwYVx1NTkwYlx1NTkwY1x1NTkwZVx1NTkxMFx1NTkxMVx1NTkxMlx1NTkxM1x1NTkxN1x1NTkxOFx1NTkxYlx1NTkxZFx1NTkxZVx1NTkyMFx1NTkyMVx1NTkyMlx1NTkyM1x1NTkyNlx1NTkyOFx1NTkyY1x1NTkzMFx1NTkzMlx1NTkzM1x1NTkzNVx1'@;
put 'NTkzNlx1NTkzYlx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzEzN10ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTM3XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzEzN11bZ11dPTM1MDcyK2cseVszNTA3MitnXT1fWzEzN11bZ10pO2ZvcihfWzEzOF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTkzZFx1NTkzZVx1NTkzZlx1NTk0MFx1NTk0M1x1NTk0NVx1NTk0Nlx1NTk0YVx1NTk0Y1x1NTk0ZFx1NTk1MFx1NTk1Mlx1NTk1M1x1NTk1OVx1NTk1Ylx1NTk1Y1x1NTk1ZFx1NTk1ZVx1NTk1Zlx1NTk2MVx1NTk2M1x1NTk2NFx1'@;
put 'NTk2Nlx1NTk2N1x1NTk2OFx1NTk2OVx1NTk2YVx1NTk2Ylx1NTk2Y1x1NTk2ZFx1NTk2ZVx1NTk2Zlx1NTk3MFx1NTk3MVx1NTk3Mlx1NTk3NVx1NTk3N1x1NTk3YVx1NTk3Ylx1NTk3Y1x1NTk3ZVx1NTk3Zlx1NTk4MFx1NTk4NVx1NTk4OVx1NTk4Ylx1NTk4Y1x1NTk4ZVx1NTk4Zlx1NTk5'@;
put 'MFx1NTk5MVx1NTk5NFx1NTk5NVx1NTk5OFx1NTk5YVx1NTk5Ylx1NTk5Y1x1NTk5ZFx1NTk5Zlx1NTlhMFx1NTlhMVx1NTlhMlx1NTlhNlx1ZmZmZFx1NTlhN1x1NTlhY1x1NTlhZFx1NTliMFx1NTliMVx1NTliM1x1NTliNFx1NTliNVx1NTliNlx1NTliN1x1NTliOFx1NTliYVx1NTliY1x1'@;
put 'NTliZFx1NTliZlx1NTljMFx1NTljMVx1NTljMlx1NTljM1x1NTljNFx1NTljNVx1NTljN1x1NTljOFx1NTljOVx1NTljY1x1NTljZFx1NTljZVx1NTljZlx1NTlkNVx1NTlkNlx1NTlkOVx1NTlkYlx1NTlkZVx1NTlkZlx1NTllMFx1NTllMVx1NTllMlx1NTllNFx1NTllNlx1NTllN1x1NTll'@;
put 'OVx1NTllYVx1NTllYlx1NTllZFx1NTllZVx1NTllZlx1NTlmMFx1NTlmMVx1NTlmMlx1NTlmM1x1NTlmNFx1NTlmNVx1NTlmNlx1NTlmN1x1NTlmOFx1NTlmYVx1NTlmY1x1NTlmZFx1NTlmZVx1NWEwMFx1NWEwMlx1NWEwYVx1NWEwYlx1NWEwZFx1NWEwZVx1NWEwZlx1NWExMFx1NWExMlx1'@;
put 'NWExNFx1NWExNVx1NWExNlx1NWExN1x1NWExOVx1NWExYVx1NWExYlx1NWExZFx1NWExZVx1NWEyMVx1NWEyMlx1NWEyNFx1NWEyNlx1NWEyN1x1NWEyOFx1NWEyYVx1NWEyYlx1NWEyY1x1NWEyZFx1NWEyZVx1NWEyZlx1NWEzMFx1NWEzM1x1NWEzNVx1NWEzN1x1NWEzOFx1NWEzOVx1NWEz'@;
put 'YVx1NWEzYlx1NWEzZFx1NWEzZVx1NWEzZlx1NWE0MVx1NWE0Mlx1NWE0M1x1NWE0NFx1NWE0NVx1NWE0N1x1NWE0OFx1NWE0Ylx1NWE0Y1x1NWE0ZFx1NWE0ZVx1NWE0Zlx1NWE1MFx1NWE1MVx1NWE1Mlx1NWE1M1x1NWE1NFx1NWE1Nlx1NWE1N1x1NWE1OFx1NWE1OVx1NWE1Ylx1NWE1Y1x1'@;
put 'NWE1ZFx1NWE1ZVx1NWE1Zlx1NWE2MFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzEzOF0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTM4XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzEzOF1bZ11dPTM1MzI4K2cseVszNTMyOCtnXT1fWzEzOF1bZ10pO2ZvcihfWzEzOV09Ilx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NWE2MVx1NWE2M1x1NWE2NFx1NWE2NVx1NWE2Nlx1NWE2OFx1NWE2OVx1NWE2Ylx1NWE2Y1x1NWE2ZFx1NWE2ZVx1NWE2Zlx1NWE3MFx1NWE3MVx1NWE3Mlx1NWE3M1x1NWE3OFx1NWE3OVx1NWE3Ylx1NWE3Y1x1'@;
put 'NWE3ZFx1NWE3ZVx1NWE4MFx1NWE4MVx1NWE4Mlx1NWE4M1x1NWE4NFx1NWE4NVx1NWE4Nlx1NWE4N1x1NWE4OFx1NWE4OVx1NWE4YVx1NWE4Ylx1NWE4Y1x1NWE4ZFx1NWE4ZVx1NWE4Zlx1NWE5MFx1NWE5MVx1NWE5M1x1NWE5NFx1NWE5NVx1NWE5Nlx1NWE5N1x1NWE5OFx1NWE5OVx1NWE5'@;
put 'Y1x1NWE5ZFx1NWE5ZVx1NWE5Zlx1NWFhMFx1NWFhMVx1NWFhMlx1NWFhM1x1NWFhNFx1NWFhNVx1NWFhNlx1NWFhN1x1NWFhOFx1NWFhOVx1NWFhYlx1NWFhY1x1ZmZmZFx1NWFhZFx1NWFhZVx1NWFhZlx1NWFiMFx1NWFiMVx1NWFiNFx1NWFiNlx1NWFiN1x1NWFiOVx1NWFiYVx1NWFiYlx1'@;
put 'NWFiY1x1NWFiZFx1NWFiZlx1NWFjMFx1NWFjM1x1NWFjNFx1NWFjNVx1NWFjNlx1NWFjN1x1NWFjOFx1NWFjYVx1NWFjYlx1NWFjZFx1NWFjZVx1NWFjZlx1NWFkMFx1NWFkMVx1NWFkM1x1NWFkNVx1NWFkN1x1NWFkOVx1NWFkYVx1NWFkYlx1NWFkZFx1NWFkZVx1NWFkZlx1NWFlMlx1NWFl'@;
put 'NFx1NWFlNVx1NWFlN1x1NWFlOFx1NWFlYVx1NWFlY1x1NWFlZFx1NWFlZVx1NWFlZlx1NWFmMFx1NWFmMlx1NWFmM1x1NWFmNFx1NWFmNVx1NWFmNlx1NWFmN1x1NWFmOFx1NWFmOVx1NWFmYVx1NWFmYlx1NWFmY1x1NWFmZFx1NWFmZVx1NWFmZlx1NWIwMFx1NWIwMVx1NWIwMlx1NWIwM1x1'@;
put 'NWIwNFx1NWIwNVx1NWIwNlx1NWIwN1x1NWIwOFx1NWIwYVx1NWIwYlx1NWIwY1x1NWIwZFx1NWIwZVx1NWIwZlx1NWIxMFx1NWIxMVx1NWIxMlx1NWIxM1x1NWIxNFx1NWIxNVx1NWIxOFx1NWIxOVx1NWIxYVx1NWIxYlx1NWIxY1x1NWIxZFx1NWIxZVx1NWIxZlx1NWIyMFx1NWIyMVx1NWIy'@;
put 'Mlx1NWIyM1x1NWIyNFx1NWIyNVx1NWIyNlx1NWIyN1x1NWIyOFx1NWIyOVx1NWIyYVx1NWIyYlx1NWIyY1x1NWIyZFx1NWIyZVx1NWIyZlx1NWIzMFx1NWIzMVx1NWIzM1x1NWIzNVx1NWIzNlx1NWIzOFx1NWIzOVx1NWIzYVx1NWIzYlx1NWIzY1x1NWIzZFx1NWIzZVx1NWIzZlx1NWI0MVx1'@;
put 'NWI0Mlx1NWI0M1x1NWI0NFx1NWI0NVx1NWI0Nlx1NWI0N1x1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzEzOV0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTM5XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzEzOV1bZ11dPTM1NTg0K2cseVszNTU4NCtnXT1fWzEzOV1bZ10pO2ZvcihfWzE0MF09'@;
put 'Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NWI0OFx1NWI0OVx1NWI0YVx1NWI0Ylx1NWI0Y1x1NWI0ZFx1NWI0ZVx1NWI0Zlx1NWI1Mlx1NWI1Nlx1NWI1ZVx1NWI2MFx1NWI2MVx1NWI2N1x1NWI2OFx1NWI2Ylx1NWI2ZFx1NWI2ZVx1'@;
put 'NWI2Zlx1NWI3Mlx1NWI3NFx1NWI3Nlx1NWI3N1x1NWI3OFx1NWI3OVx1NWI3Ylx1NWI3Y1x1NWI3ZVx1NWI3Zlx1NWI4Mlx1NWI4Nlx1NWI4YVx1NWI4ZFx1NWI4ZVx1NWI5MFx1NWI5MVx1NWI5Mlx1NWI5NFx1NWI5Nlx1NWI5Zlx1NWJhN1x1NWJhOFx1NWJhOVx1NWJhY1x1NWJhZFx1NWJh'@;
put 'ZVx1NWJhZlx1NWJiMVx1NWJiMlx1NWJiN1x1NWJiYVx1NWJiYlx1NWJiY1x1NWJjMFx1NWJjMVx1NWJjM1x1NWJjOFx1NWJjOVx1NWJjYVx1NWJjYlx1NWJjZFx1NWJjZVx1NWJjZlx1ZmZmZFx1NWJkMVx1NWJkNFx1NWJkNVx1NWJkNlx1NWJkN1x1NWJkOFx1NWJkOVx1NWJkYVx1NWJkYlx1'@;
put 'NWJkY1x1NWJlMFx1NWJlMlx1NWJlM1x1NWJlNlx1NWJlN1x1NWJlOVx1NWJlYVx1NWJlYlx1NWJlY1x1NWJlZFx1NWJlZlx1NWJmMVx1NWJmMlx1NWJmM1x1NWJmNFx1NWJmNVx1NWJmNlx1NWJmN1x1NWJmZFx1NWJmZVx1NWMwMFx1NWMwMlx1NWMwM1x1NWMwNVx1NWMwN1x1NWMwOFx1NWMw'@;
put 'Ylx1NWMwY1x1NWMwZFx1NWMwZVx1NWMxMFx1NWMxMlx1NWMxM1x1NWMxN1x1NWMxOVx1NWMxYlx1NWMxZVx1NWMxZlx1NWMyMFx1NWMyMVx1NWMyM1x1NWMyNlx1NWMyOFx1NWMyOVx1NWMyYVx1NWMyYlx1NWMyZFx1NWMyZVx1NWMyZlx1NWMzMFx1NWMzMlx1NWMzM1x1NWMzNVx1NWMzNlx1'@;
put 'NWMzN1x1NWM0M1x1NWM0NFx1NWM0Nlx1NWM0N1x1NWM0Y1x1NWM0ZFx1NWM1Mlx1NWM1M1x1NWM1NFx1NWM1Nlx1NWM1N1x1NWM1OFx1NWM1YVx1NWM1Ylx1NWM1Y1x1NWM1ZFx1NWM1Zlx1NWM2Mlx1NWM2NFx1NWM2N1x1NWM2OFx1NWM2OVx1NWM2YVx1NWM2Ylx1NWM2Y1x1NWM2ZFx1NWM3'@;
put 'MFx1NWM3Mlx1NWM3M1x1NWM3NFx1NWM3NVx1NWM3Nlx1NWM3N1x1NWM3OFx1NWM3Ylx1NWM3Y1x1NWM3ZFx1NWM3ZVx1NWM4MFx1NWM4M1x1NWM4NFx1NWM4NVx1NWM4Nlx1NWM4N1x1NWM4OVx1NWM4YVx1NWM4Ylx1NWM4ZVx1NWM4Zlx1NWM5Mlx1NWM5M1x1NWM5NVx1NWM5ZFx1NWM5ZVx1'@;
put 'NWM5Zlx1NWNhMFx1NWNhMVx1NWNhNFx1NWNhNVx1NWNhNlx1NWNhN1x1NWNhOFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE0MF0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTQwXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE0MF1bZ11dPTM1ODQwK2cseVszNTg0MCtnXT1fWzE0MF1bZ10p'@;
put 'O2ZvcihfWzE0MV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NWNhYVx1NWNhZVx1NWNhZlx1NWNiMFx1NWNiMlx1NWNiNFx1NWNiNlx1NWNiOVx1NWNiYVx1NWNiYlx1NWNiY1x1NWNiZVx1NWNjMFx1NWNjMlx1NWNjM1x1NWNjNVx1'@;
put 'NWNjNlx1NWNjN1x1NWNjOFx1NWNjOVx1NWNjYVx1NWNjY1x1NWNjZFx1NWNjZVx1NWNjZlx1NWNkMFx1NWNkMVx1NWNkM1x1NWNkNFx1NWNkNVx1NWNkNlx1NWNkN1x1NWNkOFx1NWNkYVx1NWNkYlx1NWNkY1x1NWNkZFx1NWNkZVx1NWNkZlx1NWNlMFx1NWNlMlx1NWNlM1x1NWNlN1x1NWNl'@;
put 'OVx1NWNlYlx1NWNlY1x1NWNlZVx1NWNlZlx1NWNmMVx1NWNmMlx1NWNmM1x1NWNmNFx1NWNmNVx1NWNmNlx1NWNmN1x1NWNmOFx1NWNmOVx1NWNmYVx1NWNmY1x1NWNmZFx1NWNmZVx1NWNmZlx1NWQwMFx1ZmZmZFx1NWQwMVx1NWQwNFx1NWQwNVx1NWQwOFx1NWQwOVx1NWQwYVx1NWQwYlx1'@;
put 'NWQwY1x1NWQwZFx1NWQwZlx1NWQxMFx1NWQxMVx1NWQxMlx1NWQxM1x1NWQxNVx1NWQxN1x1NWQxOFx1NWQxOVx1NWQxYVx1NWQxY1x1NWQxZFx1NWQxZlx1NWQyMFx1NWQyMVx1NWQyMlx1NWQyM1x1NWQyNVx1NWQyOFx1NWQyYVx1NWQyYlx1NWQyY1x1NWQyZlx1NWQzMFx1NWQzMVx1NWQz'@;
put 'Mlx1NWQzM1x1NWQzNVx1NWQzNlx1NWQzN1x1NWQzOFx1NWQzOVx1NWQzYVx1NWQzYlx1NWQzY1x1NWQzZlx1NWQ0MFx1NWQ0MVx1NWQ0Mlx1NWQ0M1x1NWQ0NFx1NWQ0NVx1NWQ0Nlx1NWQ0OFx1NWQ0OVx1NWQ0ZFx1NWQ0ZVx1NWQ0Zlx1NWQ1MFx1NWQ1MVx1NWQ1Mlx1NWQ1M1x1NWQ1NFx1'@;
put 'NWQ1NVx1NWQ1Nlx1NWQ1N1x1NWQ1OVx1NWQ1YVx1NWQ1Y1x1NWQ1ZVx1NWQ1Zlx1NWQ2MFx1NWQ2MVx1NWQ2Mlx1NWQ2M1x1NWQ2NFx1NWQ2NVx1NWQ2Nlx1NWQ2N1x1NWQ2OFx1NWQ2YVx1NWQ2ZFx1NWQ2ZVx1NWQ3MFx1NWQ3MVx1NWQ3Mlx1NWQ3M1x1NWQ3NVx1NWQ3Nlx1NWQ3N1x1NWQ3'@;
put 'OFx1NWQ3OVx1NWQ3YVx1NWQ3Ylx1NWQ3Y1x1NWQ3ZFx1NWQ3ZVx1NWQ3Zlx1NWQ4MFx1NWQ4MVx1NWQ4M1x1NWQ4NFx1NWQ4NVx1NWQ4Nlx1NWQ4N1x1NWQ4OFx1NWQ4OVx1NWQ4YVx1NWQ4Ylx1NWQ4Y1x1NWQ4ZFx1NWQ4ZVx1NWQ4Zlx1NWQ5MFx1NWQ5MVx1NWQ5Mlx1NWQ5M1x1NWQ5NFx1'@;
put 'NWQ5NVx1NWQ5Nlx1NWQ5N1x1NWQ5OFx1NWQ5YVx1NWQ5Ylx1NWQ5Y1x1NWQ5ZVx1NWQ5Zlx1NWRhMFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE0MV0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTQxXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE0MV1bZ11dPTM2MDk2K2cseVszNjA5Nitn'@;
put 'XT1fWzE0MV1bZ10pO2ZvcihfWzE0Ml09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NWRhMVx1NWRhMlx1NWRhM1x1NWRhNFx1NWRhNVx1NWRhNlx1NWRhN1x1NWRhOFx1NWRhOVx1NWRhYVx1NWRhYlx1NWRhY1x1NWRhZFx1NWRhZVx1'@;
put 'NWRhZlx1NWRiMFx1NWRiMVx1NWRiMlx1NWRiM1x1NWRiNFx1NWRiNVx1NWRiNlx1NWRiOFx1NWRiOVx1NWRiYVx1NWRiYlx1NWRiY1x1NWRiZFx1NWRiZVx1NWRiZlx1NWRjMFx1NWRjMVx1NWRjMlx1NWRjM1x1NWRjNFx1NWRjNlx1NWRjN1x1NWRjOFx1NWRjOVx1NWRjYVx1NWRjYlx1NWRj'@;
put 'Y1x1NWRjZVx1NWRjZlx1NWRkMFx1NWRkMVx1NWRkMlx1NWRkM1x1NWRkNFx1NWRkNVx1NWRkNlx1NWRkN1x1NWRkOFx1NWRkOVx1NWRkYVx1NWRkY1x1NWRkZlx1NWRlMFx1NWRlM1x1NWRlNFx1NWRlYVx1NWRlY1x1NWRlZFx1ZmZmZFx1NWRmMFx1NWRmNVx1NWRmNlx1NWRmOFx1NWRmOVx1'@;
put 'NWRmYVx1NWRmYlx1NWRmY1x1NWRmZlx1NWUwMFx1NWUwNFx1NWUwN1x1NWUwOVx1NWUwYVx1NWUwYlx1NWUwZFx1NWUwZVx1NWUxMlx1NWUxM1x1NWUxN1x1NWUxZVx1NWUxZlx1NWUyMFx1NWUyMVx1NWUyMlx1NWUyM1x1NWUyNFx1NWUyNVx1NWUyOFx1NWUyOVx1NWUyYVx1NWUyYlx1NWUy'@;
put 'Y1x1NWUyZlx1NWUzMFx1NWUzMlx1NWUzM1x1NWUzNFx1NWUzNVx1NWUzNlx1NWUzOVx1NWUzYVx1NWUzZVx1NWUzZlx1NWU0MFx1NWU0MVx1NWU0M1x1NWU0Nlx1NWU0N1x1NWU0OFx1NWU0OVx1NWU0YVx1NWU0Ylx1NWU0ZFx1NWU0ZVx1NWU0Zlx1NWU1MFx1NWU1MVx1NWU1Mlx1NWU1M1x1'@;
put 'NWU1Nlx1NWU1N1x1NWU1OFx1NWU1OVx1NWU1YVx1NWU1Y1x1NWU1ZFx1NWU1Zlx1NWU2MFx1NWU2M1x1NWU2NFx1NWU2NVx1NWU2Nlx1NWU2N1x1NWU2OFx1NWU2OVx1NWU2YVx1NWU2Ylx1NWU2Y1x1NWU2ZFx1NWU2ZVx1NWU2Zlx1NWU3MFx1NWU3MVx1NWU3NVx1NWU3N1x1NWU3OVx1NWU3'@;
put 'ZVx1NWU4MVx1NWU4Mlx1NWU4M1x1NWU4NVx1NWU4OFx1NWU4OVx1NWU4Y1x1NWU4ZFx1NWU4ZVx1NWU5Mlx1NWU5OFx1NWU5Ylx1NWU5ZFx1NWVhMVx1NWVhMlx1NWVhM1x1NWVhNFx1NWVhOFx1NWVhOVx1NWVhYVx1NWVhYlx1NWVhY1x1NWVhZVx1NWVhZlx1NWViMFx1NWViMVx1NWViMlx1'@;
put 'NWViNFx1NWViYVx1NWViYlx1NWViY1x1NWViZFx1NWViZlx1NWVjMFx1NWVjMVx1NWVjMlx1NWVjM1x1NWVjNFx1NWVjNVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE0Ml0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTQyXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE0Ml1bZ11dPTM2MzUy'@;
put 'K2cseVszNjM1MitnXT1fWzE0Ml1bZ10pO2ZvcihfWzE0M109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NWVjNlx1NWVjN1x1NWVjOFx1NWVjYlx1NWVjY1x1NWVjZFx1NWVjZVx1NWVjZlx1NWVkMFx1NWVkNFx1NWVkNVx1NWVkN1x1'@;
put 'NWVkOFx1NWVkOVx1NWVkYVx1NWVkY1x1NWVkZFx1NWVkZVx1NWVkZlx1NWVlMFx1NWVlMVx1NWVlMlx1NWVlM1x1NWVlNFx1NWVlNVx1NWVlNlx1NWVlN1x1NWVlOVx1NWVlYlx1NWVlY1x1NWVlZFx1NWVlZVx1NWVlZlx1NWVmMFx1NWVmMVx1NWVmMlx1NWVmM1x1NWVmNVx1NWVmOFx1NWVm'@;
put 'OVx1NWVmYlx1NWVmY1x1NWVmZFx1NWYwNVx1NWYwNlx1NWYwN1x1NWYwOVx1NWYwY1x1NWYwZFx1NWYwZVx1NWYxMFx1NWYxMlx1NWYxNFx1NWYxNlx1NWYxOVx1NWYxYVx1NWYxY1x1NWYxZFx1NWYxZVx1NWYyMVx1NWYyMlx1NWYyM1x1NWYyNFx1ZmZmZFx1NWYyOFx1NWYyYlx1NWYyY1x1'@;
put 'NWYyZVx1NWYzMFx1NWYzMlx1NWYzM1x1NWYzNFx1NWYzNVx1NWYzNlx1NWYzN1x1NWYzOFx1NWYzYlx1NWYzZFx1NWYzZVx1NWYzZlx1NWY0MVx1NWY0Mlx1NWY0M1x1NWY0NFx1NWY0NVx1NWY0Nlx1NWY0N1x1NWY0OFx1NWY0OVx1NWY0YVx1NWY0Ylx1NWY0Y1x1NWY0ZFx1NWY0ZVx1NWY0'@;
put 'Zlx1NWY1MVx1NWY1NFx1NWY1OVx1NWY1YVx1NWY1Ylx1NWY1Y1x1NWY1ZVx1NWY1Zlx1NWY2MFx1NWY2M1x1NWY2NVx1NWY2N1x1NWY2OFx1NWY2Ylx1NWY2ZVx1NWY2Zlx1NWY3Mlx1NWY3NFx1NWY3NVx1NWY3Nlx1NWY3OFx1NWY3YVx1NWY3ZFx1NWY3ZVx1NWY3Zlx1NWY4M1x1NWY4Nlx1'@;
put 'NWY4ZFx1NWY4ZVx1NWY4Zlx1NWY5MVx1NWY5M1x1NWY5NFx1NWY5Nlx1NWY5YVx1NWY5Ylx1NWY5ZFx1NWY5ZVx1NWY5Zlx1NWZhMFx1NWZhMlx1NWZhM1x1NWZhNFx1NWZhNVx1NWZhNlx1NWZhN1x1NWZhOVx1NWZhYlx1NWZhY1x1NWZhZlx1NWZiMFx1NWZiMVx1NWZiMlx1NWZiM1x1NWZi'@;
put 'NFx1NWZiNlx1NWZiOFx1NWZiOVx1NWZiYVx1NWZiYlx1NWZiZVx1NWZiZlx1NWZjMFx1NWZjMVx1NWZjMlx1NWZjN1x1NWZjOFx1NWZjYVx1NWZjYlx1NWZjZVx1NWZkM1x1NWZkNFx1NWZkNVx1NWZkYVx1NWZkYlx1NWZkY1x1NWZkZVx1NWZkZlx1NWZlMlx1NWZlM1x1NWZlNVx1NWZlNlx1'@;
put 'NWZlOFx1NWZlOVx1NWZlY1x1NWZlZlx1NWZmMFx1NWZmMlx1NWZmM1x1NWZmNFx1NWZmNlx1NWZmN1x1NWZmOVx1NWZmYVx1NWZmY1x1NjAwN1x1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE0M10ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTQzXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE0'@;
put 'M11bZ11dPTM2NjA4K2cseVszNjYwOCtnXT1fWzE0M11bZ10pO2ZvcihfWzE0NF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjAwOFx1NjAwOVx1NjAwYlx1NjAwY1x1NjAxMFx1NjAxMVx1NjAxM1x1NjAxN1x1NjAxOFx1NjAxYVx1'@;
put 'NjAxZVx1NjAxZlx1NjAyMlx1NjAyM1x1NjAyNFx1NjAyY1x1NjAyZFx1NjAyZVx1NjAzMFx1NjAzMVx1NjAzMlx1NjAzM1x1NjAzNFx1NjAzNlx1NjAzN1x1NjAzOFx1NjAzOVx1NjAzYVx1NjAzZFx1NjAzZVx1NjA0MFx1NjA0NFx1NjA0NVx1NjA0Nlx1NjA0N1x1NjA0OFx1NjA0OVx1NjA0'@;
put 'YVx1NjA0Y1x1NjA0ZVx1NjA0Zlx1NjA1MVx1NjA1M1x1NjA1NFx1NjA1Nlx1NjA1N1x1NjA1OFx1NjA1Ylx1NjA1Y1x1NjA1ZVx1NjA1Zlx1NjA2MFx1NjA2MVx1NjA2NVx1NjA2Nlx1NjA2ZVx1NjA3MVx1NjA3Mlx1NjA3NFx1NjA3NVx1NjA3N1x1NjA3ZVx1NjA4MFx1ZmZmZFx1NjA4MVx1'@;
put 'NjA4Mlx1NjA4NVx1NjA4Nlx1NjA4N1x1NjA4OFx1NjA4YVx1NjA4Ylx1NjA4ZVx1NjA4Zlx1NjA5MFx1NjA5MVx1NjA5M1x1NjA5NVx1NjA5N1x1NjA5OFx1NjA5OVx1NjA5Y1x1NjA5ZVx1NjBhMVx1NjBhMlx1NjBhNFx1NjBhNVx1NjBhN1x1NjBhOVx1NjBhYVx1NjBhZVx1NjBiMFx1NjBi'@;
put 'M1x1NjBiNVx1NjBiNlx1NjBiN1x1NjBiOVx1NjBiYVx1NjBiZFx1NjBiZVx1NjBiZlx1NjBjMFx1NjBjMVx1NjBjMlx1NjBjM1x1NjBjNFx1NjBjN1x1NjBjOFx1NjBjOVx1NjBjY1x1NjBjZFx1NjBjZVx1NjBjZlx1NjBkMFx1NjBkMlx1NjBkM1x1NjBkNFx1NjBkNlx1NjBkN1x1NjBkOVx1'@;
put 'NjBkYlx1NjBkZVx1NjBlMVx1NjBlMlx1NjBlM1x1NjBlNFx1NjBlNVx1NjBlYVx1NjBmMVx1NjBmMlx1NjBmNVx1NjBmN1x1NjBmOFx1NjBmYlx1NjBmY1x1NjBmZFx1NjBmZVx1NjBmZlx1NjEwMlx1NjEwM1x1NjEwNFx1NjEwNVx1NjEwN1x1NjEwYVx1NjEwYlx1NjEwY1x1NjExMFx1NjEx'@;
put 'MVx1NjExMlx1NjExM1x1NjExNFx1NjExNlx1NjExN1x1NjExOFx1NjExOVx1NjExYlx1NjExY1x1NjExZFx1NjExZVx1NjEyMVx1NjEyMlx1NjEyNVx1NjEyOFx1NjEyOVx1NjEyYVx1NjEyY1x1NjEyZFx1NjEyZVx1NjEyZlx1NjEzMFx1NjEzMVx1NjEzMlx1NjEzM1x1NjEzNFx1NjEzNVx1'@;
put 'NjEzNlx1NjEzN1x1NjEzOFx1NjEzOVx1NjEzYVx1NjEzYlx1NjEzY1x1NjEzZFx1NjEzZVx1NjE0MFx1NjE0MVx1NjE0Mlx1NjE0M1x1NjE0NFx1NjE0NVx1NjE0Nlx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE0NF0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTQ0XVtnXS5jaGFyQ29kZUF0'@;
put 'KDApJiYoSVtfWzE0NF1bZ11dPTM2ODY0K2cseVszNjg2NCtnXT1fWzE0NF1bZ10pO2ZvcihfWzE0NV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjE0N1x1NjE0OVx1NjE0Ylx1NjE0ZFx1NjE0Zlx1NjE1MFx1NjE1Mlx1NjE1M1x1'@;
put 'NjE1NFx1NjE1Nlx1NjE1N1x1NjE1OFx1NjE1OVx1NjE1YVx1NjE1Ylx1NjE1Y1x1NjE1ZVx1NjE1Zlx1NjE2MFx1NjE2MVx1NjE2M1x1NjE2NFx1NjE2NVx1NjE2Nlx1NjE2OVx1NjE2YVx1NjE2Ylx1NjE2Y1x1NjE2ZFx1NjE2ZVx1NjE2Zlx1NjE3MVx1NjE3Mlx1NjE3M1x1NjE3NFx1NjE3'@;
put 'Nlx1NjE3OFx1NjE3OVx1NjE3YVx1NjE3Ylx1NjE3Y1x1NjE3ZFx1NjE3ZVx1NjE3Zlx1NjE4MFx1NjE4MVx1NjE4Mlx1NjE4M1x1NjE4NFx1NjE4NVx1NjE4Nlx1NjE4N1x1NjE4OFx1NjE4OVx1NjE4YVx1NjE4Y1x1NjE4ZFx1NjE4Zlx1NjE5MFx1NjE5MVx1NjE5Mlx1NjE5M1x1NjE5NVx1'@;
put 'ZmZmZFx1NjE5Nlx1NjE5N1x1NjE5OFx1NjE5OVx1NjE5YVx1NjE5Ylx1NjE5Y1x1NjE5ZVx1NjE5Zlx1NjFhMFx1NjFhMVx1NjFhMlx1NjFhM1x1NjFhNFx1NjFhNVx1NjFhNlx1NjFhYVx1NjFhYlx1NjFhZFx1NjFhZVx1NjFhZlx1NjFiMFx1NjFiMVx1NjFiMlx1NjFiM1x1NjFiNFx1NjFi'@;
put 'NVx1NjFiNlx1NjFiOFx1NjFiOVx1NjFiYVx1NjFiYlx1NjFiY1x1NjFiZFx1NjFiZlx1NjFjMFx1NjFjMVx1NjFjM1x1NjFjNFx1NjFjNVx1NjFjNlx1NjFjN1x1NjFjOVx1NjFjY1x1NjFjZFx1NjFjZVx1NjFjZlx1NjFkMFx1NjFkM1x1NjFkNVx1NjFkNlx1NjFkN1x1NjFkOFx1NjFkOVx1'@;
put 'NjFkYVx1NjFkYlx1NjFkY1x1NjFkZFx1NjFkZVx1NjFkZlx1NjFlMFx1NjFlMVx1NjFlMlx1NjFlM1x1NjFlNFx1NjFlNVx1NjFlN1x1NjFlOFx1NjFlOVx1NjFlYVx1NjFlYlx1NjFlY1x1NjFlZFx1NjFlZVx1NjFlZlx1NjFmMFx1NjFmMVx1NjFmMlx1NjFmM1x1NjFmNFx1NjFmNlx1NjFm'@;
put 'N1x1NjFmOFx1NjFmOVx1NjFmYVx1NjFmYlx1NjFmY1x1NjFmZFx1NjFmZVx1NjIwMFx1NjIwMVx1NjIwMlx1NjIwM1x1NjIwNFx1NjIwNVx1NjIwN1x1NjIwOVx1NjIxM1x1NjIxNFx1NjIxOVx1NjIxY1x1NjIxZFx1NjIxZVx1NjIyMFx1NjIyM1x1NjIyNlx1NjIyN1x1NjIyOFx1NjIyOVx1'@;
put 'NjIyYlx1NjIyZFx1NjIyZlx1NjIzMFx1NjIzMVx1NjIzMlx1NjIzNVx1NjIzNlx1NjIzOFx1NjIzOVx1NjIzYVx1NjIzYlx1NjIzY1x1NjI0Mlx1NjI0NFx1NjI0NVx1NjI0Nlx1NjI0YVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE0NV0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTQ1XVtn'@;
put 'XS5jaGFyQ29kZUF0KDApJiYoSVtfWzE0NV1bZ11dPTM3MTIwK2cseVszNzEyMCtnXT1fWzE0NV1bZ10pO2ZvcihfWzE0Nl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjI0Zlx1NjI1MFx1NjI1NVx1NjI1Nlx1NjI1N1x1NjI1OVx1'@;
put 'NjI1YVx1NjI1Y1x1NjI1ZFx1NjI1ZVx1NjI1Zlx1NjI2MFx1NjI2MVx1NjI2Mlx1NjI2NFx1NjI2NVx1NjI2OFx1NjI3MVx1NjI3Mlx1NjI3NFx1NjI3NVx1NjI3N1x1NjI3OFx1NjI3YVx1NjI3Ylx1NjI3ZFx1NjI4MVx1NjI4Mlx1NjI4M1x1NjI4NVx1NjI4Nlx1NjI4N1x1NjI4OFx1NjI4'@;
put 'Ylx1NjI4Y1x1NjI4ZFx1NjI4ZVx1NjI4Zlx1NjI5MFx1NjI5NFx1NjI5OVx1NjI5Y1x1NjI5ZFx1NjI5ZVx1NjJhM1x1NjJhNlx1NjJhN1x1NjJhOVx1NjJhYVx1NjJhZFx1NjJhZVx1NjJhZlx1NjJiMFx1NjJiMlx1NjJiM1x1NjJiNFx1NjJiNlx1NjJiN1x1NjJiOFx1NjJiYVx1NjJiZVx1'@;
put 'NjJjMFx1NjJjMVx1ZmZmZFx1NjJjM1x1NjJjYlx1NjJjZlx1NjJkMVx1NjJkNVx1NjJkZFx1NjJkZVx1NjJlMFx1NjJlMVx1NjJlNFx1NjJlYVx1NjJlYlx1NjJmMFx1NjJmMlx1NjJmNVx1NjJmOFx1NjJmOVx1NjJmYVx1NjJmYlx1NjMwMFx1NjMwM1x1NjMwNFx1NjMwNVx1NjMwNlx1NjMw'@;
put 'YVx1NjMwYlx1NjMwY1x1NjMwZFx1NjMwZlx1NjMxMFx1NjMxMlx1NjMxM1x1NjMxNFx1NjMxNVx1NjMxN1x1NjMxOFx1NjMxOVx1NjMxY1x1NjMyNlx1NjMyN1x1NjMyOVx1NjMyY1x1NjMyZFx1NjMyZVx1NjMzMFx1NjMzMVx1NjMzM1x1NjMzNFx1NjMzNVx1NjMzNlx1NjMzN1x1NjMzOFx1'@;
put 'NjMzYlx1NjMzY1x1NjMzZVx1NjMzZlx1NjM0MFx1NjM0MVx1NjM0NFx1NjM0N1x1NjM0OFx1NjM0YVx1NjM1MVx1NjM1Mlx1NjM1M1x1NjM1NFx1NjM1Nlx1NjM1N1x1NjM1OFx1NjM1OVx1NjM1YVx1NjM1Ylx1NjM1Y1x1NjM1ZFx1NjM2MFx1NjM2NFx1NjM2NVx1NjM2Nlx1NjM2OFx1NjM2'@;
put 'YVx1NjM2Ylx1NjM2Y1x1NjM2Zlx1NjM3MFx1NjM3Mlx1NjM3M1x1NjM3NFx1NjM3NVx1NjM3OFx1NjM3OVx1NjM3Y1x1NjM3ZFx1NjM3ZVx1NjM3Zlx1NjM4MVx1NjM4M1x1NjM4NFx1NjM4NVx1NjM4Nlx1NjM4Ylx1NjM4ZFx1NjM5MVx1NjM5M1x1NjM5NFx1NjM5NVx1NjM5N1x1NjM5OVx1'@;
put 'NjM5YVx1NjM5Ylx1NjM5Y1x1NjM5ZFx1NjM5ZVx1NjM5Zlx1NjNhMVx1NjNhNFx1NjNhNlx1NjNhYlx1NjNhZlx1NjNiMVx1NjNiMlx1NjNiNVx1NjNiNlx1NjNiOVx1NjNiYlx1NjNiZFx1NjNiZlx1NjNjMFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE0Nl0ubGVuZ3RoOysrZyk2NTUz'@;
put 'MyE9PV9bMTQ2XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE0Nl1bZ11dPTM3Mzc2K2cseVszNzM3NitnXT1fWzE0Nl1bZ10pO2ZvcihfWzE0N109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjNjMVx1NjNjMlx1NjNjM1x1NjNjNVx1'@;
put 'NjNjN1x1NjNjOFx1NjNjYVx1NjNjYlx1NjNjY1x1NjNkMVx1NjNkM1x1NjNkNFx1NjNkNVx1NjNkN1x1NjNkOFx1NjNkOVx1NjNkYVx1NjNkYlx1NjNkY1x1NjNkZFx1NjNkZlx1NjNlMlx1NjNlNFx1NjNlNVx1NjNlNlx1NjNlN1x1NjNlOFx1NjNlYlx1NjNlY1x1NjNlZVx1NjNlZlx1NjNm'@;
put 'MFx1NjNmMVx1NjNmM1x1NjNmNVx1NjNmN1x1NjNmOVx1NjNmYVx1NjNmYlx1NjNmY1x1NjNmZVx1NjQwM1x1NjQwNFx1NjQwNlx1NjQwN1x1NjQwOFx1NjQwOVx1NjQwYVx1NjQwZFx1NjQwZVx1NjQxMVx1NjQxMlx1NjQxNVx1NjQxNlx1NjQxN1x1NjQxOFx1NjQxOVx1NjQxYVx1NjQxZFx1'@;
put 'NjQxZlx1NjQyMlx1NjQyM1x1NjQyNFx1ZmZmZFx1NjQyNVx1NjQyN1x1NjQyOFx1NjQyOVx1NjQyYlx1NjQyZVx1NjQyZlx1NjQzMFx1NjQzMVx1NjQzMlx1NjQzM1x1NjQzNVx1NjQzNlx1NjQzN1x1NjQzOFx1NjQzOVx1NjQzYlx1NjQzY1x1NjQzZVx1NjQ0MFx1NjQ0Mlx1NjQ0M1x1NjQ0'@;
put 'OVx1NjQ0Ylx1NjQ0Y1x1NjQ0ZFx1NjQ0ZVx1NjQ0Zlx1NjQ1MFx1NjQ1MVx1NjQ1M1x1NjQ1NVx1NjQ1Nlx1NjQ1N1x1NjQ1OVx1NjQ1YVx1NjQ1Ylx1NjQ1Y1x1NjQ1ZFx1NjQ1Zlx1NjQ2MFx1NjQ2MVx1NjQ2Mlx1NjQ2M1x1NjQ2NFx1NjQ2NVx1NjQ2Nlx1NjQ2OFx1NjQ2YVx1NjQ2Ylx1'@;
put 'NjQ2Y1x1NjQ2ZVx1NjQ2Zlx1NjQ3MFx1NjQ3MVx1NjQ3Mlx1NjQ3M1x1NjQ3NFx1NjQ3NVx1NjQ3Nlx1NjQ3N1x1NjQ3Ylx1NjQ3Y1x1NjQ3ZFx1NjQ3ZVx1NjQ3Zlx1NjQ4MFx1NjQ4MVx1NjQ4M1x1NjQ4Nlx1NjQ4OFx1NjQ4OVx1NjQ4YVx1NjQ4Ylx1NjQ4Y1x1NjQ4ZFx1NjQ4ZVx1NjQ4'@;
put 'Zlx1NjQ5MFx1NjQ5M1x1NjQ5NFx1NjQ5N1x1NjQ5OFx1NjQ5YVx1NjQ5Ylx1NjQ5Y1x1NjQ5ZFx1NjQ5Zlx1NjRhMFx1NjRhMVx1NjRhMlx1NjRhM1x1NjRhNVx1NjRhNlx1NjRhN1x1NjRhOFx1NjRhYVx1NjRhYlx1NjRhZlx1NjRiMVx1NjRiMlx1NjRiM1x1NjRiNFx1NjRiNlx1NjRiOVx1'@;
put 'NjRiYlx1NjRiZFx1NjRiZVx1NjRiZlx1NjRjMVx1NjRjM1x1NjRjNFx1NjRjNlx1NjRjN1x1NjRjOFx1NjRjOVx1NjRjYVx1NjRjYlx1NjRjY1x1NjRjZlx1NjRkMVx1NjRkM1x1NjRkNFx1NjRkNVx1NjRkNlx1NjRkOVx1NjRkYVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE0N10ubGVu'@;
put 'Z3RoOysrZyk2NTUzMyE9PV9bMTQ3XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE0N11bZ11dPTM3NjMyK2cseVszNzYzMitnXT1fWzE0N11bZ10pO2ZvcihfWzE0OF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjRkYlx1NjRkY1x1'@;
put 'NjRkZFx1NjRkZlx1NjRlMFx1NjRlMVx1NjRlM1x1NjRlNVx1NjRlN1x1NjRlOFx1NjRlOVx1NjRlYVx1NjRlYlx1NjRlY1x1NjRlZFx1NjRlZVx1NjRlZlx1NjRmMFx1NjRmMVx1NjRmMlx1NjRmM1x1NjRmNFx1NjRmNVx1NjRmNlx1NjRmN1x1NjRmOFx1NjRmOVx1NjRmYVx1NjRmYlx1NjRm'@;
put 'Y1x1NjRmZFx1NjRmZVx1NjRmZlx1NjUwMVx1NjUwMlx1NjUwM1x1NjUwNFx1NjUwNVx1NjUwNlx1NjUwN1x1NjUwOFx1NjUwYVx1NjUwYlx1NjUwY1x1NjUwZFx1NjUwZVx1NjUwZlx1NjUxMFx1NjUxMVx1NjUxM1x1NjUxNFx1NjUxNVx1NjUxNlx1NjUxN1x1NjUxOVx1NjUxYVx1NjUxYlx1'@;
put 'NjUxY1x1NjUxZFx1NjUxZVx1NjUxZlx1NjUyMFx1NjUyMVx1ZmZmZFx1NjUyMlx1NjUyM1x1NjUyNFx1NjUyNlx1NjUyN1x1NjUyOFx1NjUyOVx1NjUyYVx1NjUyY1x1NjUyZFx1NjUzMFx1NjUzMVx1NjUzMlx1NjUzM1x1NjUzN1x1NjUzYVx1NjUzY1x1NjUzZFx1NjU0MFx1NjU0MVx1NjU0'@;
put 'Mlx1NjU0M1x1NjU0NFx1NjU0Nlx1NjU0N1x1NjU0YVx1NjU0Ylx1NjU0ZFx1NjU0ZVx1NjU1MFx1NjU1Mlx1NjU1M1x1NjU1NFx1NjU1N1x1NjU1OFx1NjU1YVx1NjU1Y1x1NjU1Zlx1NjU2MFx1NjU2MVx1NjU2NFx1NjU2NVx1NjU2N1x1NjU2OFx1NjU2OVx1NjU2YVx1NjU2ZFx1NjU2ZVx1'@;
put 'NjU2Zlx1NjU3MVx1NjU3M1x1NjU3NVx1NjU3Nlx1NjU3OFx1NjU3OVx1NjU3YVx1NjU3Ylx1NjU3Y1x1NjU3ZFx1NjU3ZVx1NjU3Zlx1NjU4MFx1NjU4MVx1NjU4Mlx1NjU4M1x1NjU4NFx1NjU4NVx1NjU4Nlx1NjU4OFx1NjU4OVx1NjU4YVx1NjU4ZFx1NjU4ZVx1NjU4Zlx1NjU5Mlx1NjU5'@;
put 'NFx1NjU5NVx1NjU5Nlx1NjU5OFx1NjU5YVx1NjU5ZFx1NjU5ZVx1NjVhMFx1NjVhMlx1NjVhM1x1NjVhNlx1NjVhOFx1NjVhYVx1NjVhY1x1NjVhZVx1NjViMVx1NjViMlx1NjViM1x1NjViNFx1NjViNVx1NjViNlx1NjViN1x1NjViOFx1NjViYVx1NjViYlx1NjViZVx1NjViZlx1NjVjMFx1'@;
put 'NjVjMlx1NjVjN1x1NjVjOFx1NjVjOVx1NjVjYVx1NjVjZFx1NjVkMFx1NjVkMVx1NjVkM1x1NjVkNFx1NjVkNVx1NjVkOFx1NjVkOVx1NjVkYVx1NjVkYlx1NjVkY1x1NjVkZFx1NjVkZVx1NjVkZlx1NjVlMVx1NjVlM1x1NjVlNFx1NjVlYVx1NjVlYlx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtn'@;
put 'IT1fWzE0OF0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTQ4XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE0OF1bZ11dPTM3ODg4K2cseVszNzg4OCtnXT1fWzE0OF1bZ10pO2ZvcihfWzE0OV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'NjVmMlx1NjVmM1x1NjVmNFx1NjVmNVx1NjVmOFx1NjVmOVx1NjVmYlx1NjVmY1x1NjVmZFx1NjVmZVx1NjVmZlx1NjYwMVx1NjYwNFx1NjYwNVx1NjYwN1x1NjYwOFx1NjYwOVx1NjYwYlx1NjYwZFx1NjYxMFx1NjYxMVx1NjYxMlx1NjYxNlx1NjYxN1x1NjYxOFx1NjYxYVx1NjYxYlx1NjYx'@;
put 'Y1x1NjYxZVx1NjYyMVx1NjYyMlx1NjYyM1x1NjYyNFx1NjYyNlx1NjYyOVx1NjYyYVx1NjYyYlx1NjYyY1x1NjYyZVx1NjYzMFx1NjYzMlx1NjYzM1x1NjYzN1x1NjYzOFx1NjYzOVx1NjYzYVx1NjYzYlx1NjYzZFx1NjYzZlx1NjY0MFx1NjY0Mlx1NjY0NFx1NjY0NVx1NjY0Nlx1NjY0N1x1'@;
put 'NjY0OFx1NjY0OVx1NjY0YVx1NjY0ZFx1NjY0ZVx1NjY1MFx1NjY1MVx1NjY1OFx1ZmZmZFx1NjY1OVx1NjY1Ylx1NjY1Y1x1NjY1ZFx1NjY1ZVx1NjY2MFx1NjY2Mlx1NjY2M1x1NjY2NVx1NjY2N1x1NjY2OVx1NjY2YVx1NjY2Ylx1NjY2Y1x1NjY2ZFx1NjY3MVx1NjY3Mlx1NjY3M1x1NjY3'@;
put 'NVx1NjY3OFx1NjY3OVx1NjY3Ylx1NjY3Y1x1NjY3ZFx1NjY3Zlx1NjY4MFx1NjY4MVx1NjY4M1x1NjY4NVx1NjY4Nlx1NjY4OFx1NjY4OVx1NjY4YVx1NjY4Ylx1NjY4ZFx1NjY4ZVx1NjY4Zlx1NjY5MFx1NjY5Mlx1NjY5M1x1NjY5NFx1NjY5NVx1NjY5OFx1NjY5OVx1NjY5YVx1NjY5Ylx1'@;
put 'NjY5Y1x1NjY5ZVx1NjY5Zlx1NjZhMFx1NjZhMVx1NjZhMlx1NjZhM1x1NjZhNFx1NjZhNVx1NjZhNlx1NjZhOVx1NjZhYVx1NjZhYlx1NjZhY1x1NjZhZFx1NjZhZlx1NjZiMFx1NjZiMVx1NjZiMlx1NjZiM1x1NjZiNVx1NjZiNlx1NjZiN1x1NjZiOFx1NjZiYVx1NjZiYlx1NjZiY1x1NjZi'@;
put 'ZFx1NjZiZlx1NjZjMFx1NjZjMVx1NjZjMlx1NjZjM1x1NjZjNFx1NjZjNVx1NjZjNlx1NjZjN1x1NjZjOFx1NjZjOVx1NjZjYVx1NjZjYlx1NjZjY1x1NjZjZFx1NjZjZVx1NjZjZlx1NjZkMFx1NjZkMVx1NjZkMlx1NjZkM1x1NjZkNFx1NjZkNVx1NjZkNlx1NjZkN1x1NjZkOFx1NjZkYVx1'@;
put 'NjZkZVx1NjZkZlx1NjZlMFx1NjZlMVx1NjZlMlx1NjZlM1x1NjZlNFx1NjZlNVx1NjZlN1x1NjZlOFx1NjZlYVx1NjZlYlx1NjZlY1x1NjZlZFx1NjZlZVx1NjZlZlx1NjZmMVx1NjZmNVx1NjZmNlx1NjZmOFx1NjZmYVx1NjZmYlx1NjZmZFx1NjcwMVx1NjcwMlx1NjcwM1x1ZmZmZCIuc3Bs'@;
put 'aXQoIiIpLGc9MDtnIT1fWzE0OV0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTQ5XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE0OV1bZ11dPTM4MTQ0K2cseVszODE0NCtnXT1fWzE0OV1bZ10pO2ZvcihfWzE1MF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1NjcwNFx1NjcwNVx1NjcwNlx1NjcwN1x1NjcwY1x1NjcwZVx1NjcwZlx1NjcxMVx1NjcxMlx1NjcxM1x1NjcxNlx1NjcxOFx1NjcxOVx1NjcxYVx1NjcxY1x1NjcxZVx1NjcyMFx1NjcyMVx1NjcyMlx1NjcyM1x1NjcyNFx1NjcyNVx1NjcyN1x1NjcyOVx1NjcyZVx1Njcz'@;
put 'MFx1NjczMlx1NjczM1x1NjczNlx1NjczN1x1NjczOFx1NjczOVx1NjczYlx1NjczY1x1NjczZVx1NjczZlx1Njc0MVx1Njc0NFx1Njc0NVx1Njc0N1x1Njc0YVx1Njc0Ylx1Njc0ZFx1Njc1Mlx1Njc1NFx1Njc1NVx1Njc1N1x1Njc1OFx1Njc1OVx1Njc1YVx1Njc1Ylx1Njc1ZFx1Njc2Mlx1'@;
put 'Njc2M1x1Njc2NFx1Njc2Nlx1Njc2N1x1Njc2Ylx1Njc2Y1x1Njc2ZVx1Njc3MVx1Njc3NFx1Njc3Nlx1ZmZmZFx1Njc3OFx1Njc3OVx1Njc3YVx1Njc3Ylx1Njc3ZFx1Njc4MFx1Njc4Mlx1Njc4M1x1Njc4NVx1Njc4Nlx1Njc4OFx1Njc4YVx1Njc4Y1x1Njc4ZFx1Njc4ZVx1Njc4Zlx1Njc5'@;
put 'MVx1Njc5Mlx1Njc5M1x1Njc5NFx1Njc5Nlx1Njc5OVx1Njc5Ylx1Njc5Zlx1NjdhMFx1NjdhMVx1NjdhNFx1NjdhNlx1NjdhOVx1NjdhY1x1NjdhZVx1NjdiMVx1NjdiMlx1NjdiNFx1NjdiOVx1NjdiYVx1NjdiYlx1NjdiY1x1NjdiZFx1NjdiZVx1NjdiZlx1NjdjMFx1NjdjMlx1NjdjNVx1'@;
put 'NjdjNlx1NjdjN1x1NjdjOFx1NjdjOVx1NjdjYVx1NjdjYlx1NjdjY1x1NjdjZFx1NjdjZVx1NjdkNVx1NjdkNlx1NjdkN1x1NjdkYlx1NjdkZlx1NjdlMVx1NjdlM1x1NjdlNFx1NjdlNlx1NjdlN1x1NjdlOFx1NjdlYVx1NjdlYlx1NjdlZFx1NjdlZVx1NjdmMlx1NjdmNVx1NjdmNlx1Njdm'@;
put 'N1x1NjdmOFx1NjdmOVx1NjdmYVx1NjdmYlx1NjdmY1x1NjdmZVx1NjgwMVx1NjgwMlx1NjgwM1x1NjgwNFx1NjgwNlx1NjgwZFx1NjgxMFx1NjgxMlx1NjgxNFx1NjgxNVx1NjgxOFx1NjgxOVx1NjgxYVx1NjgxYlx1NjgxY1x1NjgxZVx1NjgxZlx1NjgyMFx1NjgyMlx1NjgyM1x1NjgyNFx1'@;
put 'NjgyNVx1NjgyNlx1NjgyN1x1NjgyOFx1NjgyYlx1NjgyY1x1NjgyZFx1NjgyZVx1NjgyZlx1NjgzMFx1NjgzMVx1NjgzNFx1NjgzNVx1NjgzNlx1NjgzYVx1NjgzYlx1NjgzZlx1Njg0N1x1Njg0Ylx1Njg0ZFx1Njg0Zlx1Njg1Mlx1Njg1Nlx1Njg1N1x1Njg1OFx1Njg1OVx1Njg1YVx1Njg1'@;
put 'Ylx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE1MF0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTUwXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE1MF1bZ11dPTM4NDAwK2cseVszODQwMCtnXT1fWzE1MF1bZ10pO2ZvcihfWzE1MV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Njg1Y1x1Njg1ZFx1Njg1ZVx1Njg1Zlx1Njg2YVx1Njg2Y1x1Njg2ZFx1Njg2ZVx1Njg2Zlx1Njg3MFx1Njg3MVx1Njg3Mlx1Njg3M1x1Njg3NVx1Njg3OFx1Njg3OVx1Njg3YVx1Njg3Ylx1Njg3Y1x1Njg3ZFx1Njg3ZVx1Njg3Zlx1Njg4MFx1Njg4'@;
put 'Mlx1Njg4NFx1Njg4N1x1Njg4OFx1Njg4OVx1Njg4YVx1Njg4Ylx1Njg4Y1x1Njg4ZFx1Njg4ZVx1Njg5MFx1Njg5MVx1Njg5Mlx1Njg5NFx1Njg5NVx1Njg5Nlx1Njg5OFx1Njg5OVx1Njg5YVx1Njg5Ylx1Njg5Y1x1Njg5ZFx1Njg5ZVx1Njg5Zlx1NjhhMFx1NjhhMVx1NjhhM1x1NjhhNFx1'@;
put 'NjhhNVx1NjhhOVx1NjhhYVx1NjhhYlx1NjhhY1x1NjhhZVx1NjhiMVx1NjhiMlx1NjhiNFx1NjhiNlx1NjhiN1x1NjhiOFx1ZmZmZFx1NjhiOVx1NjhiYVx1NjhiYlx1NjhiY1x1NjhiZFx1NjhiZVx1NjhiZlx1NjhjMVx1NjhjM1x1NjhjNFx1NjhjNVx1NjhjNlx1NjhjN1x1NjhjOFx1Njhj'@;
put 'YVx1NjhjY1x1NjhjZVx1NjhjZlx1NjhkMFx1NjhkMVx1NjhkM1x1NjhkNFx1NjhkNlx1NjhkN1x1NjhkOVx1NjhkYlx1NjhkY1x1NjhkZFx1NjhkZVx1NjhkZlx1NjhlMVx1NjhlMlx1NjhlNFx1NjhlNVx1NjhlNlx1NjhlN1x1NjhlOFx1NjhlOVx1NjhlYVx1NjhlYlx1NjhlY1x1NjhlZFx1'@;
put 'NjhlZlx1NjhmMlx1NjhmM1x1NjhmNFx1NjhmNlx1NjhmN1x1NjhmOFx1NjhmYlx1NjhmZFx1NjhmZVx1NjhmZlx1NjkwMFx1NjkwMlx1NjkwM1x1NjkwNFx1NjkwNlx1NjkwN1x1NjkwOFx1NjkwOVx1NjkwYVx1NjkwY1x1NjkwZlx1NjkxMVx1NjkxM1x1NjkxNFx1NjkxNVx1NjkxNlx1Njkx'@;
put 'N1x1NjkxOFx1NjkxOVx1NjkxYVx1NjkxYlx1NjkxY1x1NjkxZFx1NjkxZVx1NjkyMVx1NjkyMlx1NjkyM1x1NjkyNVx1NjkyNlx1NjkyN1x1NjkyOFx1NjkyOVx1NjkyYVx1NjkyYlx1NjkyY1x1NjkyZVx1NjkyZlx1NjkzMVx1NjkzMlx1NjkzM1x1NjkzNVx1NjkzNlx1NjkzN1x1NjkzOFx1'@;
put 'NjkzYVx1NjkzYlx1NjkzY1x1NjkzZVx1Njk0MFx1Njk0MVx1Njk0M1x1Njk0NFx1Njk0NVx1Njk0Nlx1Njk0N1x1Njk0OFx1Njk0OVx1Njk0YVx1Njk0Ylx1Njk0Y1x1Njk0ZFx1Njk0ZVx1Njk0Zlx1Njk1MFx1Njk1MVx1Njk1Mlx1Njk1M1x1Njk1NVx1Njk1Nlx1Njk1OFx1Njk1OVx1Njk1'@;
put 'Ylx1Njk1Y1x1Njk1Zlx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE1MV0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTUxXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE1MV1bZ11dPTM4NjU2K2cseVszODY1NitnXT1fWzE1MV1bZ10pO2ZvcihfWzE1Ml09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Njk2MVx1Njk2Mlx1Njk2NFx1Njk2NVx1Njk2N1x1Njk2OFx1Njk2OVx1Njk2YVx1Njk2Y1x1Njk2ZFx1Njk2Zlx1Njk3MFx1Njk3Mlx1Njk3M1x1Njk3NFx1Njk3NVx1Njk3Nlx1Njk3YVx1Njk3Ylx1Njk3ZFx1Njk3ZVx1Njk3'@;
put 'Zlx1Njk4MVx1Njk4M1x1Njk4NVx1Njk4YVx1Njk4Ylx1Njk4Y1x1Njk4ZVx1Njk4Zlx1Njk5MFx1Njk5MVx1Njk5Mlx1Njk5M1x1Njk5Nlx1Njk5N1x1Njk5OVx1Njk5YVx1Njk5ZFx1Njk5ZVx1Njk5Zlx1NjlhMFx1NjlhMVx1NjlhMlx1NjlhM1x1NjlhNFx1NjlhNVx1NjlhNlx1NjlhOVx1'@;
put 'NjlhYVx1NjlhY1x1NjlhZVx1NjlhZlx1NjliMFx1NjliMlx1NjliM1x1NjliNVx1NjliNlx1NjliOFx1NjliOVx1NjliYVx1NjliY1x1NjliZFx1ZmZmZFx1NjliZVx1NjliZlx1NjljMFx1NjljMlx1NjljM1x1NjljNFx1NjljNVx1NjljNlx1NjljN1x1NjljOFx1NjljOVx1NjljYlx1Njlj'@;
put 'ZFx1NjljZlx1NjlkMVx1NjlkMlx1NjlkM1x1NjlkNVx1NjlkNlx1NjlkN1x1NjlkOFx1NjlkOVx1NjlkYVx1NjlkY1x1NjlkZFx1NjlkZVx1NjllMVx1NjllMlx1NjllM1x1NjllNFx1NjllNVx1NjllNlx1NjllN1x1NjllOFx1NjllOVx1NjllYVx1NjllYlx1NjllY1x1NjllZVx1NjllZlx1'@;
put 'NjlmMFx1NjlmMVx1NjlmM1x1NjlmNFx1NjlmNVx1NjlmNlx1NjlmN1x1NjlmOFx1NjlmOVx1NjlmYVx1NjlmYlx1NjlmY1x1NjlmZVx1NmEwMFx1NmEwMVx1NmEwMlx1NmEwM1x1NmEwNFx1NmEwNVx1NmEwNlx1NmEwN1x1NmEwOFx1NmEwOVx1NmEwYlx1NmEwY1x1NmEwZFx1NmEwZVx1NmEw'@;
put 'Zlx1NmExMFx1NmExMVx1NmExMlx1NmExM1x1NmExNFx1NmExNVx1NmExNlx1NmExOVx1NmExYVx1NmExYlx1NmExY1x1NmExZFx1NmExZVx1NmEyMFx1NmEyMlx1NmEyM1x1NmEyNFx1NmEyNVx1NmEyNlx1NmEyN1x1NmEyOVx1NmEyYlx1NmEyY1x1NmEyZFx1NmEyZVx1NmEzMFx1NmEzMlx1'@;
put 'NmEzM1x1NmEzNFx1NmEzNlx1NmEzN1x1NmEzOFx1NmEzOVx1NmEzYVx1NmEzYlx1NmEzY1x1NmEzZlx1NmE0MFx1NmE0MVx1NmE0Mlx1NmE0M1x1NmE0NVx1NmE0Nlx1NmE0OFx1NmE0OVx1NmE0YVx1NmE0Ylx1NmE0Y1x1NmE0ZFx1NmE0ZVx1NmE0Zlx1NmE1MVx1NmE1Mlx1NmE1M1x1NmE1'@;
put 'NFx1NmE1NVx1NmE1Nlx1NmE1N1x1NmE1YVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE1Ml0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTUyXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE1Ml1bZ11dPTM4OTEyK2cseVszODkxMitnXT1fWzE1Ml1bZ10pO2ZvcihfWzE1M109Ilx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmE1Y1x1NmE1ZFx1NmE1ZVx1NmE1Zlx1NmE2MFx1NmE2Mlx1NmE2M1x1NmE2NFx1NmE2Nlx1NmE2N1x1NmE2OFx1NmE2OVx1NmE2YVx1NmE2Ylx1NmE2Y1x1NmE2ZFx1NmE2ZVx1NmE2Zlx1NmE3MFx1NmE3'@;
put 'Mlx1NmE3M1x1NmE3NFx1NmE3NVx1NmE3Nlx1NmE3N1x1NmE3OFx1NmE3YVx1NmE3Ylx1NmE3ZFx1NmE3ZVx1NmE3Zlx1NmE4MVx1NmE4Mlx1NmE4M1x1NmE4NVx1NmE4Nlx1NmE4N1x1NmE4OFx1NmE4OVx1NmE4YVx1NmE4Ylx1NmE4Y1x1NmE4ZFx1NmE4Zlx1NmE5Mlx1NmE5M1x1NmE5NFx1'@;
put 'NmE5NVx1NmE5Nlx1NmE5OFx1NmE5OVx1NmE5YVx1NmE5Ylx1NmE5Y1x1NmE5ZFx1NmE5ZVx1NmE5Zlx1NmFhMVx1NmFhMlx1NmFhM1x1NmFhNFx1NmFhNVx1NmFhNlx1ZmZmZFx1NmFhN1x1NmFhOFx1NmFhYVx1NmFhZFx1NmFhZVx1NmFhZlx1NmFiMFx1NmFiMVx1NmFiMlx1NmFiM1x1NmFi'@;
put 'NFx1NmFiNVx1NmFiNlx1NmFiN1x1NmFiOFx1NmFiOVx1NmFiYVx1NmFiYlx1NmFiY1x1NmFiZFx1NmFiZVx1NmFiZlx1NmFjMFx1NmFjMVx1NmFjMlx1NmFjM1x1NmFjNFx1NmFjNVx1NmFjNlx1NmFjN1x1NmFjOFx1NmFjOVx1NmFjYVx1NmFjYlx1NmFjY1x1NmFjZFx1NmFjZVx1NmFjZlx1'@;
put 'NmFkMFx1NmFkMVx1NmFkMlx1NmFkM1x1NmFkNFx1NmFkNVx1NmFkNlx1NmFkN1x1NmFkOFx1NmFkOVx1NmFkYVx1NmFkYlx1NmFkY1x1NmFkZFx1NmFkZVx1NmFkZlx1NmFlMFx1NmFlMVx1NmFlMlx1NmFlM1x1NmFlNFx1NmFlNVx1NmFlNlx1NmFlN1x1NmFlOFx1NmFlOVx1NmFlYVx1NmFl'@;
put 'Ylx1NmFlY1x1NmFlZFx1NmFlZVx1NmFlZlx1NmFmMFx1NmFmMVx1NmFmMlx1NmFmM1x1NmFmNFx1NmFmNVx1NmFmNlx1NmFmN1x1NmFmOFx1NmFmOVx1NmFmYVx1NmFmYlx1NmFmY1x1NmFmZFx1NmFmZVx1NmFmZlx1NmIwMFx1NmIwMVx1NmIwMlx1NmIwM1x1NmIwNFx1NmIwNVx1NmIwNlx1'@;
put 'NmIwN1x1NmIwOFx1NmIwOVx1NmIwYVx1NmIwYlx1NmIwY1x1NmIwZFx1NmIwZVx1NmIwZlx1NmIxMFx1NmIxMVx1NmIxMlx1NmIxM1x1NmIxNFx1NmIxNVx1NmIxNlx1NmIxN1x1NmIxOFx1NmIxOVx1NmIxYVx1NmIxYlx1NmIxY1x1NmIxZFx1NmIxZVx1NmIxZlx1NmIyNVx1NmIyNlx1NmIy'@;
put 'OFx1NmIyOVx1NmIyYVx1NmIyYlx1NmIyY1x1NmIyZFx1NmIyZVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE1M10ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTUzXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE1M11bZ11dPTM5MTY4K2cseVszOTE2OCtnXT1fWzE1M11bZ10pO2ZvcihfWzE1'@;
put 'NF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmIyZlx1NmIzMFx1NmIzMVx1NmIzM1x1NmIzNFx1NmIzNVx1NmIzNlx1NmIzOFx1NmIzYlx1NmIzY1x1NmIzZFx1NmIzZlx1NmI0MFx1NmI0MVx1NmI0Mlx1NmI0NFx1NmI0NVx1NmI0'@;
put 'OFx1NmI0YVx1NmI0Ylx1NmI0ZFx1NmI0ZVx1NmI0Zlx1NmI1MFx1NmI1MVx1NmI1Mlx1NmI1M1x1NmI1NFx1NmI1NVx1NmI1Nlx1NmI1N1x1NmI1OFx1NmI1YVx1NmI1Ylx1NmI1Y1x1NmI1ZFx1NmI1ZVx1NmI1Zlx1NmI2MFx1NmI2MVx1NmI2OFx1NmI2OVx1NmI2Ylx1NmI2Y1x1NmI2ZFx1'@;
put 'NmI2ZVx1NmI2Zlx1NmI3MFx1NmI3MVx1NmI3Mlx1NmI3M1x1NmI3NFx1NmI3NVx1NmI3Nlx1NmI3N1x1NmI3OFx1NmI3YVx1NmI3ZFx1NmI3ZVx1NmI3Zlx1NmI4MFx1NmI4NVx1NmI4OFx1ZmZmZFx1NmI4Y1x1NmI4ZVx1NmI4Zlx1NmI5MFx1NmI5MVx1NmI5NFx1NmI5NVx1NmI5N1x1NmI5'@;
put 'OFx1NmI5OVx1NmI5Y1x1NmI5ZFx1NmI5ZVx1NmI5Zlx1NmJhMFx1NmJhMlx1NmJhM1x1NmJhNFx1NmJhNVx1NmJhNlx1NmJhN1x1NmJhOFx1NmJhOVx1NmJhYlx1NmJhY1x1NmJhZFx1NmJhZVx1NmJhZlx1NmJiMFx1NmJiMVx1NmJiMlx1NmJiNlx1NmJiOFx1NmJiOVx1NmJiYVx1NmJiYlx1'@;
put 'NmJiY1x1NmJiZFx1NmJiZVx1NmJjMFx1NmJjM1x1NmJjNFx1NmJjNlx1NmJjN1x1NmJjOFx1NmJjOVx1NmJjYVx1NmJjY1x1NmJjZVx1NmJkMFx1NmJkMVx1NmJkOFx1NmJkYVx1NmJkY1x1NmJkZFx1NmJkZVx1NmJkZlx1NmJlMFx1NmJlMlx1NmJlM1x1NmJlNFx1NmJlNVx1NmJlNlx1NmJl'@;
put 'N1x1NmJlOFx1NmJlOVx1NmJlY1x1NmJlZFx1NmJlZVx1NmJmMFx1NmJmMVx1NmJmMlx1NmJmNFx1NmJmNlx1NmJmN1x1NmJmOFx1NmJmYVx1NmJmYlx1NmJmY1x1NmJmZVx1NmJmZlx1NmMwMFx1NmMwMVx1NmMwMlx1NmMwM1x1NmMwNFx1NmMwOFx1NmMwOVx1NmMwYVx1NmMwYlx1NmMwY1x1'@;
put 'NmMwZVx1NmMxMlx1NmMxN1x1NmMxY1x1NmMxZFx1NmMxZVx1NmMyMFx1NmMyM1x1NmMyNVx1NmMyYlx1NmMyY1x1NmMyZFx1NmMzMVx1NmMzM1x1NmMzNlx1NmMzN1x1NmMzOVx1NmMzYVx1NmMzYlx1NmMzY1x1NmMzZVx1NmMzZlx1NmM0M1x1NmM0NFx1NmM0NVx1NmM0OFx1NmM0Ylx1NmM0'@;
put 'Y1x1NmM0ZFx1NmM0ZVx1NmM0Zlx1NmM1MVx1NmM1Mlx1NmM1M1x1NmM1Nlx1NmM1OFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE1NF0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTU0XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE1NF1bZ11dPTM5NDI0K2cseVszOTQyNCtnXT1fWzE1NF1b'@;
put 'Z10pO2ZvcihfWzE1NV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmM1OVx1NmM1YVx1NmM2Mlx1NmM2M1x1NmM2NVx1NmM2Nlx1NmM2N1x1NmM2Ylx1NmM2Y1x1NmM2ZFx1NmM2ZVx1NmM2Zlx1NmM3MVx1NmM3M1x1NmM3NVx1NmM3'@;
put 'N1x1NmM3OFx1NmM3YVx1NmM3Ylx1NmM3Y1x1NmM3Zlx1NmM4MFx1NmM4NFx1NmM4N1x1NmM4YVx1NmM4Ylx1NmM4ZFx1NmM4ZVx1NmM5MVx1NmM5Mlx1NmM5NVx1NmM5Nlx1NmM5N1x1NmM5OFx1NmM5YVx1NmM5Y1x1NmM5ZFx1NmM5ZVx1NmNhMFx1NmNhMlx1NmNhOFx1NmNhY1x1NmNhZlx1'@;
put 'NmNiMFx1NmNiNFx1NmNiNVx1NmNiNlx1NmNiN1x1NmNiYVx1NmNjMFx1NmNjMVx1NmNjMlx1NmNjM1x1NmNjNlx1NmNjN1x1NmNjOFx1NmNjYlx1NmNjZFx1NmNjZVx1NmNjZlx1NmNkMVx1NmNkMlx1NmNkOFx1ZmZmZFx1NmNkOVx1NmNkYVx1NmNkY1x1NmNkZFx1NmNkZlx1NmNlNFx1NmNl'@;
put 'Nlx1NmNlN1x1NmNlOVx1NmNlY1x1NmNlZFx1NmNmMlx1NmNmNFx1NmNmOVx1NmNmZlx1NmQwMFx1NmQwMlx1NmQwM1x1NmQwNVx1NmQwNlx1NmQwOFx1NmQwOVx1NmQwYVx1NmQwZFx1NmQwZlx1NmQxMFx1NmQxMVx1NmQxM1x1NmQxNFx1NmQxNVx1NmQxNlx1NmQxOFx1NmQxY1x1NmQxZFx1'@;
put 'NmQxZlx1NmQyMFx1NmQyMVx1NmQyMlx1NmQyM1x1NmQyNFx1NmQyNlx1NmQyOFx1NmQyOVx1NmQyY1x1NmQyZFx1NmQyZlx1NmQzMFx1NmQzNFx1NmQzNlx1NmQzN1x1NmQzOFx1NmQzYVx1NmQzZlx1NmQ0MFx1NmQ0Mlx1NmQ0NFx1NmQ0OVx1NmQ0Y1x1NmQ1MFx1NmQ1NVx1NmQ1Nlx1NmQ1'@;
put 'N1x1NmQ1OFx1NmQ1Ylx1NmQ1ZFx1NmQ1Zlx1NmQ2MVx1NmQ2Mlx1NmQ2NFx1NmQ2NVx1NmQ2N1x1NmQ2OFx1NmQ2Ylx1NmQ2Y1x1NmQ2ZFx1NmQ3MFx1NmQ3MVx1NmQ3Mlx1NmQ3M1x1NmQ3NVx1NmQ3Nlx1NmQ3OVx1NmQ3YVx1NmQ3Ylx1NmQ3ZFx1NmQ3ZVx1NmQ3Zlx1NmQ4MFx1NmQ4MVx1'@;
put 'NmQ4M1x1NmQ4NFx1NmQ4Nlx1NmQ4N1x1NmQ4YVx1NmQ4Ylx1NmQ4ZFx1NmQ4Zlx1NmQ5MFx1NmQ5Mlx1NmQ5Nlx1NmQ5N1x1NmQ5OFx1NmQ5OVx1NmQ5YVx1NmQ5Y1x1NmRhMlx1NmRhNVx1NmRhY1x1NmRhZFx1NmRiMFx1NmRiMVx1NmRiM1x1NmRiNFx1NmRiNlx1NmRiN1x1NmRiOVx1NmRi'@;
put 'YVx1NmRiYlx1NmRiY1x1NmRiZFx1NmRiZVx1NmRjMVx1NmRjMlx1NmRjM1x1NmRjOFx1NmRjOVx1NmRjYVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE1NV0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTU1XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE1NV1bZ11dPTM5NjgwK2cseVszOTY4'@;
put 'MCtnXT1fWzE1NV1bZ10pO2ZvcihfWzE1Nl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmRjZFx1NmRjZVx1NmRjZlx1NmRkMFx1NmRkMlx1NmRkM1x1NmRkNFx1NmRkNVx1NmRkN1x1NmRkYVx1NmRkYlx1NmRkY1x1NmRkZlx1NmRl'@;
put 'Mlx1NmRlM1x1NmRlNVx1NmRlN1x1NmRlOFx1NmRlOVx1NmRlYVx1NmRlZFx1NmRlZlx1NmRmMFx1NmRmMlx1NmRmNFx1NmRmNVx1NmRmNlx1NmRmOFx1NmRmYVx1NmRmZFx1NmRmZVx1NmRmZlx1NmUwMFx1NmUwMVx1NmUwMlx1NmUwM1x1NmUwNFx1NmUwNlx1NmUwN1x1NmUwOFx1NmUwOVx1'@;
put 'NmUwYlx1NmUwZlx1NmUxMlx1NmUxM1x1NmUxNVx1NmUxOFx1NmUxOVx1NmUxYlx1NmUxY1x1NmUxZVx1NmUxZlx1NmUyMlx1NmUyNlx1NmUyN1x1NmUyOFx1NmUyYVx1NmUyY1x1NmUyZVx1NmUzMFx1NmUzMVx1NmUzM1x1NmUzNVx1ZmZmZFx1NmUzNlx1NmUzN1x1NmUzOVx1NmUzYlx1NmUz'@;
put 'Y1x1NmUzZFx1NmUzZVx1NmUzZlx1NmU0MFx1NmU0MVx1NmU0Mlx1NmU0NVx1NmU0Nlx1NmU0N1x1NmU0OFx1NmU0OVx1NmU0YVx1NmU0Ylx1NmU0Y1x1NmU0Zlx1NmU1MFx1NmU1MVx1NmU1Mlx1NmU1NVx1NmU1N1x1NmU1OVx1NmU1YVx1NmU1Y1x1NmU1ZFx1NmU1ZVx1NmU2MFx1NmU2MVx1'@;
put 'NmU2Mlx1NmU2M1x1NmU2NFx1NmU2NVx1NmU2Nlx1NmU2N1x1NmU2OFx1NmU2OVx1NmU2YVx1NmU2Y1x1NmU2ZFx1NmU2Zlx1NmU3MFx1NmU3MVx1NmU3Mlx1NmU3M1x1NmU3NFx1NmU3NVx1NmU3Nlx1NmU3N1x1NmU3OFx1NmU3OVx1NmU3YVx1NmU3Ylx1NmU3Y1x1NmU3ZFx1NmU4MFx1NmU4'@;
put 'MVx1NmU4Mlx1NmU4NFx1NmU4N1x1NmU4OFx1NmU4YVx1NmU4Ylx1NmU4Y1x1NmU4ZFx1NmU4ZVx1NmU5MVx1NmU5Mlx1NmU5M1x1NmU5NFx1NmU5NVx1NmU5Nlx1NmU5N1x1NmU5OVx1NmU5YVx1NmU5Ylx1NmU5ZFx1NmU5ZVx1NmVhMFx1NmVhMVx1NmVhM1x1NmVhNFx1NmVhNlx1NmVhOFx1'@;
put 'NmVhOVx1NmVhYlx1NmVhY1x1NmVhZFx1NmVhZVx1NmViMFx1NmViM1x1NmViNVx1NmViOFx1NmViOVx1NmViY1x1NmViZVx1NmViZlx1NmVjMFx1NmVjM1x1NmVjNFx1NmVjNVx1NmVjNlx1NmVjOFx1NmVjOVx1NmVjYVx1NmVjY1x1NmVjZFx1NmVjZVx1NmVkMFx1NmVkMlx1NmVkNlx1NmVk'@;
put 'OFx1NmVkOVx1NmVkYlx1NmVkY1x1NmVkZFx1NmVlM1x1NmVlN1x1NmVlYVx1NmVlYlx1NmVlY1x1NmVlZFx1NmVlZVx1NmVlZlx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE1Nl0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTU2XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE1Nl1bZ11dPTM5'@;
put 'OTM2K2cseVszOTkzNitnXT1fWzE1Nl1bZ10pO2ZvcihfWzE1N109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmVmMFx1NmVmMVx1NmVmMlx1NmVmM1x1NmVmNVx1NmVmNlx1NmVmN1x1NmVmOFx1NmVmYVx1NmVmYlx1NmVmY1x1NmVm'@;
put 'ZFx1NmVmZVx1NmVmZlx1NmYwMFx1NmYwMVx1NmYwM1x1NmYwNFx1NmYwNVx1NmYwN1x1NmYwOFx1NmYwYVx1NmYwYlx1NmYwY1x1NmYwZFx1NmYwZVx1NmYxMFx1NmYxMVx1NmYxMlx1NmYxNlx1NmYxN1x1NmYxOFx1NmYxOVx1NmYxYVx1NmYxYlx1NmYxY1x1NmYxZFx1NmYxZVx1NmYxZlx1'@;
put 'NmYyMVx1NmYyMlx1NmYyM1x1NmYyNVx1NmYyNlx1NmYyN1x1NmYyOFx1NmYyY1x1NmYyZVx1NmYzMFx1NmYzMlx1NmYzNFx1NmYzNVx1NmYzN1x1NmYzOFx1NmYzOVx1NmYzYVx1NmYzYlx1NmYzY1x1NmYzZFx1NmYzZlx1NmY0MFx1NmY0MVx1NmY0Mlx1ZmZmZFx1NmY0M1x1NmY0NFx1NmY0'@;
put 'NVx1NmY0OFx1NmY0OVx1NmY0YVx1NmY0Y1x1NmY0ZVx1NmY0Zlx1NmY1MFx1NmY1MVx1NmY1Mlx1NmY1M1x1NmY1NFx1NmY1NVx1NmY1Nlx1NmY1N1x1NmY1OVx1NmY1YVx1NmY1Ylx1NmY1ZFx1NmY1Zlx1NmY2MFx1NmY2MVx1NmY2M1x1NmY2NFx1NmY2NVx1NmY2N1x1NmY2OFx1NmY2OVx1'@;
put 'NmY2YVx1NmY2Ylx1NmY2Y1x1NmY2Zlx1NmY3MFx1NmY3MVx1NmY3M1x1NmY3NVx1NmY3Nlx1NmY3N1x1NmY3OVx1NmY3Ylx1NmY3ZFx1NmY3ZVx1NmY3Zlx1NmY4MFx1NmY4MVx1NmY4Mlx1NmY4M1x1NmY4NVx1NmY4Nlx1NmY4N1x1NmY4YVx1NmY4Ylx1NmY4Zlx1NmY5MFx1NmY5MVx1NmY5'@;
put 'Mlx1NmY5M1x1NmY5NFx1NmY5NVx1NmY5Nlx1NmY5N1x1NmY5OFx1NmY5OVx1NmY5YVx1NmY5Ylx1NmY5ZFx1NmY5ZVx1NmY5Zlx1NmZhMFx1NmZhMlx1NmZhM1x1NmZhNFx1NmZhNVx1NmZhNlx1NmZhOFx1NmZhOVx1NmZhYVx1NmZhYlx1NmZhY1x1NmZhZFx1NmZhZVx1NmZhZlx1NmZiMFx1'@;
put 'NmZiMVx1NmZiMlx1NmZiNFx1NmZiNVx1NmZiN1x1NmZiOFx1NmZiYVx1NmZiYlx1NmZiY1x1NmZiZFx1NmZiZVx1NmZiZlx1NmZjMVx1NmZjM1x1NmZjNFx1NmZjNVx1NmZjNlx1NmZjN1x1NmZjOFx1NmZjYVx1NmZjYlx1NmZjY1x1NmZjZFx1NmZjZVx1NmZjZlx1NmZkMFx1NmZkM1x1NmZk'@;
put 'NFx1NmZkNVx1NmZkNlx1NmZkN1x1NmZkOFx1NmZkOVx1NmZkYVx1NmZkYlx1NmZkY1x1NmZkZFx1NmZkZlx1NmZlMlx1NmZlM1x1NmZlNFx1NmZlNVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE1N10ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTU3XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtf'@;
put 'WzE1N11bZ11dPTQwMTkyK2cseVs0MDE5MitnXT1fWzE1N11bZ10pO2ZvcihfWzE1OF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmZlNlx1NmZlN1x1NmZlOFx1NmZlOVx1NmZlYVx1NmZlYlx1NmZlY1x1NmZlZFx1NmZmMFx1NmZm'@;
put 'MVx1NmZmMlx1NmZmM1x1NmZmNFx1NmZmNVx1NmZmNlx1NmZmN1x1NmZmOFx1NmZmOVx1NmZmYVx1NmZmYlx1NmZmY1x1NmZmZFx1NmZmZVx1NmZmZlx1NzAwMFx1NzAwMVx1NzAwMlx1NzAwM1x1NzAwNFx1NzAwNVx1NzAwNlx1NzAwN1x1NzAwOFx1NzAwOVx1NzAwYVx1NzAwYlx1NzAwY1x1'@;
put 'NzAwZFx1NzAwZVx1NzAwZlx1NzAxMFx1NzAxMlx1NzAxM1x1NzAxNFx1NzAxNVx1NzAxNlx1NzAxN1x1NzAxOFx1NzAxOVx1NzAxY1x1NzAxZFx1NzAxZVx1NzAxZlx1NzAyMFx1NzAyMVx1NzAyMlx1NzAyNFx1NzAyNVx1NzAyNlx1NzAyN1x1NzAyOFx1NzAyOVx1NzAyYVx1ZmZmZFx1NzAy'@;
put 'Ylx1NzAyY1x1NzAyZFx1NzAyZVx1NzAyZlx1NzAzMFx1NzAzMVx1NzAzMlx1NzAzM1x1NzAzNFx1NzAzNlx1NzAzN1x1NzAzOFx1NzAzYVx1NzAzYlx1NzAzY1x1NzAzZFx1NzAzZVx1NzAzZlx1NzA0MFx1NzA0MVx1NzA0Mlx1NzA0M1x1NzA0NFx1NzA0NVx1NzA0Nlx1NzA0N1x1NzA0OFx1'@;
put 'NzA0OVx1NzA0YVx1NzA0Ylx1NzA0ZFx1NzA0ZVx1NzA1MFx1NzA1MVx1NzA1Mlx1NzA1M1x1NzA1NFx1NzA1NVx1NzA1Nlx1NzA1N1x1NzA1OFx1NzA1OVx1NzA1YVx1NzA1Ylx1NzA1Y1x1NzA1ZFx1NzA1Zlx1NzA2MFx1NzA2MVx1NzA2Mlx1NzA2M1x1NzA2NFx1NzA2NVx1NzA2Nlx1NzA2'@;
put 'N1x1NzA2OFx1NzA2OVx1NzA2YVx1NzA2ZVx1NzA3MVx1NzA3Mlx1NzA3M1x1NzA3NFx1NzA3N1x1NzA3OVx1NzA3YVx1NzA3Ylx1NzA3ZFx1NzA4MVx1NzA4Mlx1NzA4M1x1NzA4NFx1NzA4Nlx1NzA4N1x1NzA4OFx1NzA4Ylx1NzA4Y1x1NzA4ZFx1NzA4Zlx1NzA5MFx1NzA5MVx1NzA5M1x1'@;
put 'NzA5N1x1NzA5OFx1NzA5YVx1NzA5Ylx1NzA5ZVx1NzA5Zlx1NzBhMFx1NzBhMVx1NzBhMlx1NzBhM1x1NzBhNFx1NzBhNVx1NzBhNlx1NzBhN1x1NzBhOFx1NzBhOVx1NzBhYVx1NzBiMFx1NzBiMlx1NzBiNFx1NzBiNVx1NzBiNlx1NzBiYVx1NzBiZVx1NzBiZlx1NzBjNFx1NzBjNVx1NzBj'@;
put 'Nlx1NzBjN1x1NzBjOVx1NzBjYlx1NzBjY1x1NzBjZFx1NzBjZVx1NzBjZlx1NzBkMFx1NzBkMVx1NzBkMlx1NzBkM1x1NzBkNFx1NzBkNVx1NzBkNlx1NzBkN1x1NzBkYVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE1OF0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTU4XVtnXS5jaGFyQ29k'@;
put 'ZUF0KDApJiYoSVtfWzE1OF1bZ11dPTQwNDQ4K2cseVs0MDQ0OCtnXT1fWzE1OF1bZ10pO2ZvcihfWzE1OV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzBkY1x1NzBkZFx1NzBkZVx1NzBlMFx1NzBlMVx1NzBlMlx1NzBlM1x1NzBl'@;
put 'NVx1NzBlYVx1NzBlZVx1NzBmMFx1NzBmMVx1NzBmMlx1NzBmM1x1NzBmNFx1NzBmNVx1NzBmNlx1NzBmOFx1NzBmYVx1NzBmYlx1NzBmY1x1NzBmZVx1NzBmZlx1NzEwMFx1NzEwMVx1NzEwMlx1NzEwM1x1NzEwNFx1NzEwNVx1NzEwNlx1NzEwN1x1NzEwOFx1NzEwYlx1NzEwY1x1NzEwZFx1'@;
put 'NzEwZVx1NzEwZlx1NzExMVx1NzExMlx1NzExNFx1NzExN1x1NzExYlx1NzExY1x1NzExZFx1NzExZVx1NzExZlx1NzEyMFx1NzEyMVx1NzEyMlx1NzEyM1x1NzEyNFx1NzEyNVx1NzEyN1x1NzEyOFx1NzEyOVx1NzEyYVx1NzEyYlx1NzEyY1x1NzEyZFx1NzEyZVx1NzEzMlx1NzEzM1x1NzEz'@;
put 'NFx1ZmZmZFx1NzEzNVx1NzEzN1x1NzEzOFx1NzEzOVx1NzEzYVx1NzEzYlx1NzEzY1x1NzEzZFx1NzEzZVx1NzEzZlx1NzE0MFx1NzE0MVx1NzE0Mlx1NzE0M1x1NzE0NFx1NzE0Nlx1NzE0N1x1NzE0OFx1NzE0OVx1NzE0Ylx1NzE0ZFx1NzE0Zlx1NzE1MFx1NzE1MVx1NzE1Mlx1NzE1M1x1'@;
put 'NzE1NFx1NzE1NVx1NzE1Nlx1NzE1N1x1NzE1OFx1NzE1OVx1NzE1YVx1NzE1Ylx1NzE1ZFx1NzE1Zlx1NzE2MFx1NzE2MVx1NzE2Mlx1NzE2M1x1NzE2NVx1NzE2OVx1NzE2YVx1NzE2Ylx1NzE2Y1x1NzE2ZFx1NzE2Zlx1NzE3MFx1NzE3MVx1NzE3NFx1NzE3NVx1NzE3Nlx1NzE3N1x1NzE3'@;
put 'OVx1NzE3Ylx1NzE3Y1x1NzE3ZVx1NzE3Zlx1NzE4MFx1NzE4MVx1NzE4Mlx1NzE4M1x1NzE4NVx1NzE4Nlx1NzE4N1x1NzE4OFx1NzE4OVx1NzE4Ylx1NzE4Y1x1NzE4ZFx1NzE4ZVx1NzE5MFx1NzE5MVx1NzE5Mlx1NzE5M1x1NzE5NVx1NzE5Nlx1NzE5N1x1NzE5YVx1NzE5Ylx1NzE5Y1x1'@;
put 'NzE5ZFx1NzE5ZVx1NzFhMVx1NzFhMlx1NzFhM1x1NzFhNFx1NzFhNVx1NzFhNlx1NzFhN1x1NzFhOVx1NzFhYVx1NzFhYlx1NzFhZFx1NzFhZVx1NzFhZlx1NzFiMFx1NzFiMVx1NzFiMlx1NzFiNFx1NzFiNlx1NzFiN1x1NzFiOFx1NzFiYVx1NzFiYlx1NzFiY1x1NzFiZFx1NzFiZVx1NzFi'@;
put 'Zlx1NzFjMFx1NzFjMVx1NzFjMlx1NzFjNFx1NzFjNVx1NzFjNlx1NzFjN1x1NzFjOFx1NzFjOVx1NzFjYVx1NzFjYlx1NzFjY1x1NzFjZFx1NzFjZlx1NzFkMFx1NzFkMVx1NzFkMlx1NzFkM1x1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE1OV0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTU5'@;
put 'XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE1OV1bZ11dPTQwNzA0K2cseVs0MDcwNCtnXT1fWzE1OV1bZ10pO2ZvcihfWzE2MF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzFkNlx1NzFkN1x1NzFkOFx1NzFkOVx1NzFkYVx1NzFk'@;
put 'Ylx1NzFkY1x1NzFkZFx1NzFkZVx1NzFkZlx1NzFlMVx1NzFlMlx1NzFlM1x1NzFlNFx1NzFlNlx1NzFlOFx1NzFlOVx1NzFlYVx1NzFlYlx1NzFlY1x1NzFlZFx1NzFlZlx1NzFmMFx1NzFmMVx1NzFmMlx1NzFmM1x1NzFmNFx1NzFmNVx1NzFmNlx1NzFmN1x1NzFmOFx1NzFmYVx1NzFmYlx1'@;
put 'NzFmY1x1NzFmZFx1NzFmZVx1NzFmZlx1NzIwMFx1NzIwMVx1NzIwMlx1NzIwM1x1NzIwNFx1NzIwNVx1NzIwN1x1NzIwOFx1NzIwOVx1NzIwYVx1NzIwYlx1NzIwY1x1NzIwZFx1NzIwZVx1NzIwZlx1NzIxMFx1NzIxMVx1NzIxMlx1NzIxM1x1NzIxNFx1NzIxNVx1NzIxNlx1NzIxN1x1NzIx'@;
put 'OFx1NzIxOVx1NzIxYVx1ZmZmZFx1NzIxYlx1NzIxY1x1NzIxZVx1NzIxZlx1NzIyMFx1NzIyMVx1NzIyMlx1NzIyM1x1NzIyNFx1NzIyNVx1NzIyNlx1NzIyN1x1NzIyOVx1NzIyYlx1NzIyZFx1NzIyZVx1NzIyZlx1NzIzMlx1NzIzM1x1NzIzNFx1NzIzYVx1NzIzY1x1NzIzZVx1NzI0MFx1'@;
put 'NzI0MVx1NzI0Mlx1NzI0M1x1NzI0NFx1NzI0NVx1NzI0Nlx1NzI0OVx1NzI0YVx1NzI0Ylx1NzI0ZVx1NzI0Zlx1NzI1MFx1NzI1MVx1NzI1M1x1NzI1NFx1NzI1NVx1NzI1N1x1NzI1OFx1NzI1YVx1NzI1Y1x1NzI1ZVx1NzI2MFx1NzI2M1x1NzI2NFx1NzI2NVx1NzI2OFx1NzI2YVx1NzI2'@;
put 'Ylx1NzI2Y1x1NzI2ZFx1NzI3MFx1NzI3MVx1NzI3M1x1NzI3NFx1NzI3Nlx1NzI3N1x1NzI3OFx1NzI3Ylx1NzI3Y1x1NzI3ZFx1NzI4Mlx1NzI4M1x1NzI4NVx1NzI4Nlx1NzI4N1x1NzI4OFx1NzI4OVx1NzI4Y1x1NzI4ZVx1NzI5MFx1NzI5MVx1NzI5M1x1NzI5NFx1NzI5NVx1NzI5Nlx1'@;
put 'NzI5N1x1NzI5OFx1NzI5OVx1NzI5YVx1NzI5Ylx1NzI5Y1x1NzI5ZFx1NzI5ZVx1NzJhMFx1NzJhMVx1NzJhMlx1NzJhM1x1NzJhNFx1NzJhNVx1NzJhNlx1NzJhN1x1NzJhOFx1NzJhOVx1NzJhYVx1NzJhYlx1NzJhZVx1NzJiMVx1NzJiMlx1NzJiM1x1NzJiNVx1NzJiYVx1NzJiYlx1NzJi'@;
put 'Y1x1NzJiZFx1NzJiZVx1NzJiZlx1NzJjMFx1NzJjNVx1NzJjNlx1NzJjN1x1NzJjOVx1NzJjYVx1NzJjYlx1NzJjY1x1NzJjZlx1NzJkMVx1NzJkM1x1NzJkNFx1NzJkNVx1NzJkNlx1NzJkOFx1NzJkYVx1NzJkYlx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE2MF0ubGVuZ3RoOysrZyk2'@;
put 'NTUzMyE9PV9bMTYwXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE2MF1bZ11dPTQwOTYwK2cseVs0MDk2MCtnXT1fWzE2MF1bZ10pO2ZvcihfWzE2MV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MzAwMFx1MzAwMVx1MzAwMlx4YjdcdTAyYzlcdTAyYzdceGE4XHUzMDAzXHUzMDA1XHUyMDE0XHVmZjVlXHUyMDE2XHUyMDI2XHUyMDE4XHUyMDE5XHUyMDFjXHUyMDFkXHUz'@;
put 'MDE0XHUzMDE1XHUzMDA4XHUzMDA5XHUzMDBhXHUzMDBiXHUzMDBjXHUzMDBkXHUzMDBlXHUzMDBmXHUzMDE2XHUzMDE3XHUzMDEwXHUzMDExXHhiMVx4ZDdceGY3XHUyMjM2XHUyMjI3XHUyMjI4XHUyMjExXHUyMjBmXHUyMjJhXHUyMjI5XHUyMjA4XHUyMjM3XHUyMjFhXHUyMmE1XHUyMjI1'@;
put 'XHUyMjIwXHUyMzEyXHUyMjk5XHUyMjJiXHUyMjJlXHUyMjYxXHUyMjRjXHUyMjQ4XHUyMjNkXHUyMjFkXHUyMjYwXHUyMjZlXHUyMjZmXHUyMjY0XHUyMjY1XHUyMjFlXHUyMjM1XHUyMjM0XHUyNjQyXHUyNjQwXHhiMFx1MjAzMlx1MjAzM1x1MjEwM1x1ZmYwNFx4YTRcdWZmZTBcdWZmZTFc'@;
put 'dTIwMzBceGE3XHUyMTE2XHUyNjA2XHUyNjA1XHUyNWNiXHUyNWNmXHUyNWNlXHUyNWM3XHUyNWM2XHUyNWExXHUyNWEwXHUyNWIzXHUyNWIyXHUyMDNiXHUyMTkyXHUyMTkwXHUyMTkxXHUyMTkzXHUzMDEzXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTYxXS5sZW5ndGg7KytnKTY1NTMz'@;
put 'IT09X1sxNjFdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTYxXVtnXV09NDEyMTYrZyx5WzQxMjE2K2ddPV9bMTYxXVtnXSk7Zm9yKF9bMTYyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUyMTcwXHUyMTcxXHUyMTcyXHUyMTczXHUyMTc0XHUyMTc1XHUyMTc2XHUyMTc3XHUyMTc4XHUyMTc5XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUyNDg4XHUy'@;
put 'NDg5XHUyNDhhXHUyNDhiXHUyNDhjXHUyNDhkXHUyNDhlXHUyNDhmXHUyNDkwXHUyNDkxXHUyNDkyXHUyNDkzXHUyNDk0XHUyNDk1XHUyNDk2XHUyNDk3XHUyNDk4XHUyNDk5XHUyNDlhXHUyNDliXHUyNDc0XHUyNDc1XHUyNDc2XHUyNDc3XHUyNDc4XHUyNDc5XHUyNDdhXHUyNDdiXHUyNDdj'@;
put 'XHUyNDdkXHUyNDdlXHUyNDdmXHUyNDgwXHUyNDgxXHUyNDgyXHUyNDgzXHUyNDg0XHUyNDg1XHUyNDg2XHUyNDg3XHUyNDYwXHUyNDYxXHUyNDYyXHUyNDYzXHUyNDY0XHUyNDY1XHUyNDY2XHUyNDY3XHUyNDY4XHUyNDY5XHVmZmZkXHVmZmZkXHUzMjIwXHUzMjIxXHUzMjIyXHUzMjIzXHUz'@;
put 'MjI0XHUzMjI1XHUzMjI2XHUzMjI3XHUzMjI4XHUzMjI5XHVmZmZkXHVmZmZkXHUyMTYwXHUyMTYxXHUyMTYyXHUyMTYzXHUyMTY0XHUyMTY1XHUyMTY2XHUyMTY3XHUyMTY4XHUyMTY5XHUyMTZhXHUyMTZiXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTYyXS5sZW5n'@;
put 'dGg7KytnKTY1NTMzIT09X1sxNjJdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTYyXVtnXV09NDE0NzIrZyx5WzQxNDcyK2ddPV9bMTYyXVtnXSk7Zm9yKF9bMTYzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZjAxXHVmZjAyXHVmZjAzXHVmZmU1XHVmZjA1XHVmZjA2XHVmZjA3XHVmZjA4XHVmZjA5XHVmZjBhXHVmZjBiXHVmZjBjXHVmZjBkXHVmZjBlXHVmZjBmXHVm'@;
put 'ZjEwXHVmZjExXHVmZjEyXHVmZjEzXHVmZjE0XHVmZjE1XHVmZjE2XHVmZjE3XHVmZjE4XHVmZjE5XHVmZjFhXHVmZjFiXHVmZjFjXHVmZjFkXHVmZjFlXHVmZjFmXHVmZjIwXHVmZjIxXHVmZjIyXHVmZjIzXHVmZjI0XHVmZjI1XHVmZjI2XHVmZjI3XHVmZjI4XHVmZjI5XHVmZjJhXHVmZjJi'@;
put 'XHVmZjJjXHVmZjJkXHVmZjJlXHVmZjJmXHVmZjMwXHVmZjMxXHVmZjMyXHVmZjMzXHVmZjM0XHVmZjM1XHVmZjM2XHVmZjM3XHVmZjM4XHVmZjM5XHVmZjNhXHVmZjNiXHVmZjNjXHVmZjNkXHVmZjNlXHVmZjNmXHVmZjQwXHVmZjQxXHVmZjQyXHVmZjQzXHVmZjQ0XHVmZjQ1XHVmZjQ2XHVm'@;
put 'ZjQ3XHVmZjQ4XHVmZjQ5XHVmZjRhXHVmZjRiXHVmZjRjXHVmZjRkXHVmZjRlXHVmZjRmXHVmZjUwXHVmZjUxXHVmZjUyXHVmZjUzXHVmZjU0XHVmZjU1XHVmZjU2XHVmZjU3XHVmZjU4XHVmZjU5XHVmZjVhXHVmZjViXHVmZjVjXHVmZjVkXHVmZmUzXHVmZmZkIi5zcGxpdCgiIiksZz0wO2ch'@;
put 'PV9bMTYzXS5sZW5ndGg7KytnKTY1NTMzIT09X1sxNjNdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTYzXVtnXV09NDE3MjgrZyx5WzQxNzI4K2ddPV9bMTYzXVtnXSk7Zm9yKF9bMTY0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUzMDQxXHUzMDQyXHUzMDQzXHUzMDQ0XHUzMDQ1XHUzMDQ2XHUzMDQ3XHUzMDQ4XHUzMDQ5XHUzMDRhXHUzMDRiXHUzMDRjXHUzMDRkXHUz'@;
put 'MDRlXHUzMDRmXHUzMDUwXHUzMDUxXHUzMDUyXHUzMDUzXHUzMDU0XHUzMDU1XHUzMDU2XHUzMDU3XHUzMDU4XHUzMDU5XHUzMDVhXHUzMDViXHUzMDVjXHUzMDVkXHUzMDVlXHUzMDVmXHUzMDYwXHUzMDYxXHUzMDYyXHUzMDYzXHUzMDY0XHUzMDY1XHUzMDY2XHUzMDY3XHUzMDY4XHUzMDY5'@;
put 'XHUzMDZhXHUzMDZiXHUzMDZjXHUzMDZkXHUzMDZlXHUzMDZmXHUzMDcwXHUzMDcxXHUzMDcyXHUzMDczXHUzMDc0XHUzMDc1XHUzMDc2XHUzMDc3XHUzMDc4XHUzMDc5XHUzMDdhXHUzMDdiXHUzMDdjXHUzMDdkXHUzMDdlXHUzMDdmXHUzMDgwXHUzMDgxXHUzMDgyXHUzMDgzXHUzMDg0XHUz'@;
put 'MDg1XHUzMDg2XHUzMDg3XHUzMDg4XHUzMDg5XHUzMDhhXHUzMDhiXHUzMDhjXHUzMDhkXHUzMDhlXHUzMDhmXHUzMDkwXHUzMDkxXHUzMDkyXHUzMDkzXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxp'@;
put 'dCgiIiksZz0wO2chPV9bMTY0XS5sZW5ndGg7KytnKTY1NTMzIT09X1sxNjRdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTY0XVtnXV09NDE5ODQrZyx5WzQxOTg0K2ddPV9bMTY0XVtnXSk7Zm9yKF9bMTY1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUzMGExXHUzMGEyXHUzMGEzXHUzMGE0XHUzMGE1XHUzMGE2XHUzMGE3XHUzMGE4XHUzMGE5XHUzMGFhXHUzMGFiXHUz'@;
put 'MGFjXHUzMGFkXHUzMGFlXHUzMGFmXHUzMGIwXHUzMGIxXHUzMGIyXHUzMGIzXHUzMGI0XHUzMGI1XHUzMGI2XHUzMGI3XHUzMGI4XHUzMGI5XHUzMGJhXHUzMGJiXHUzMGJjXHUzMGJkXHUzMGJlXHUzMGJmXHUzMGMwXHUzMGMxXHUzMGMyXHUzMGMzXHUzMGM0XHUzMGM1XHUzMGM2XHUzMGM3'@;
put 'XHUzMGM4XHUzMGM5XHUzMGNhXHUzMGNiXHUzMGNjXHUzMGNkXHUzMGNlXHUzMGNmXHUzMGQwXHUzMGQxXHUzMGQyXHUzMGQzXHUzMGQ0XHUzMGQ1XHUzMGQ2XHUzMGQ3XHUzMGQ4XHUzMGQ5XHUzMGRhXHUzMGRiXHUzMGRjXHUzMGRkXHUzMGRlXHUzMGRmXHUzMGUwXHUzMGUxXHUzMGUyXHUz'@;
put 'MGUzXHUzMGU0XHUzMGU1XHUzMGU2XHUzMGU3XHUzMGU4XHUzMGU5XHUzMGVhXHUzMGViXHUzMGVjXHUzMGVkXHUzMGVlXHUzMGVmXHUzMGYwXHUzMGYxXHUzMGYyXHUzMGYzXHUzMGY0XHUzMGY1XHUzMGY2XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTY1XS5sZW5ndGg7KytnKTY1NTMzIT09X1sxNjVdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTY1XVtnXV09NDIyNDArZyx5WzQyMjQwK2ddPV9bMTY1XVtnXSk7Zm9yKF9bMTY2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUwMzkxXHUwMzkyXHUwMzkzXHUwMzk0XHUwMzk1XHUwMzk2XHUwMzk3XHUwMzk4XHUwMzk5XHUw'@;
put 'MzlhXHUwMzliXHUwMzljXHUwMzlkXHUwMzllXHUwMzlmXHUwM2EwXHUwM2ExXHUwM2EzXHUwM2E0XHUwM2E1XHUwM2E2XHUwM2E3XHUwM2E4XHUwM2E5XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUwM2IxXHUwM2IyXHUwM2IzXHUwM2I0XHUwM2I1'@;
put 'XHUwM2I2XHUwM2I3XHUwM2I4XHUwM2I5XHUwM2JhXHUwM2JiXHUwM2JjXHUwM2JkXHUwM2JlXHUwM2JmXHUwM2MwXHUwM2MxXHUwM2MzXHUwM2M0XHUwM2M1XHUwM2M2XHUwM2M3XHUwM2M4XHUwM2M5XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZTM1XHVm'@;
put 'ZTM2XHVmZTM5XHVmZTNhXHVmZTNmXHVmZTQwXHVmZTNkXHVmZTNlXHVmZTQxXHVmZTQyXHVmZTQzXHVmZTQ0XHVmZmZkXHVmZmZkXHVmZTNiXHVmZTNjXHVmZTM3XHVmZTM4XHVmZTMxXHVmZmZkXHVmZTMzXHVmZTM0XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTY2XS5sZW5ndGg7KytnKTY1NTMzIT09X1sxNjZdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTY2XVtnXV09NDI0OTYrZyx5WzQyNDk2K2ddPV9bMTY2XVtnXSk7Zm9yKF9bMTY3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUwNDEwXHUwNDExXHUwNDEyXHUwNDEzXHUwNDE0XHUwNDE1XHUwNDAxXHUw'@;
put 'NDE2XHUwNDE3XHUwNDE4XHUwNDE5XHUwNDFhXHUwNDFiXHUwNDFjXHUwNDFkXHUwNDFlXHUwNDFmXHUwNDIwXHUwNDIxXHUwNDIyXHUwNDIzXHUwNDI0XHUwNDI1XHUwNDI2XHUwNDI3XHUwNDI4XHUwNDI5XHUwNDJhXHUwNDJiXHUwNDJjXHUwNDJkXHUwNDJlXHUwNDJmXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUwNDMwXHUwNDMxXHUwNDMyXHUwNDMzXHUwNDM0XHUwNDM1XHUwNDUxXHUwNDM2XHUwNDM3XHUwNDM4XHUwNDM5XHUwNDNhXHUwNDNiXHUwNDNjXHUw'@;
put 'NDNkXHUwNDNlXHUwNDNmXHUwNDQwXHUwNDQxXHUwNDQyXHUwNDQzXHUwNDQ0XHUwNDQ1XHUwNDQ2XHUwNDQ3XHUwNDQ4XHUwNDQ5XHUwNDRhXHUwNDRiXHUwNDRjXHUwNDRkXHUwNDRlXHUwNDRmXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTY3XS5sZW5ndGg7KytnKTY1NTMzIT09X1sxNjddW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTY3XVtnXV09NDI3NTIrZyx5WzQyNzUyK2ddPV9bMTY3XVtnXSk7Zm9yKF9bMTY4XT0iXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUwMmNhXHUwMmNiXHUwMmQ5XHUyMDEzXHUyMDE1XHUyMDI1XHUyMDM1XHUyMTA1XHUyMTA5XHUyMTk2XHUyMTk3XHUyMTk4XHUyMTk5XHUyMjE1XHUyMjFmXHUyMjIzXHUyMjUyXHUyMjY2XHUyMjY3XHUyMmJm'@;
put 'XHUyNTUwXHUyNTUxXHUyNTUyXHUyNTUzXHUyNTU0XHUyNTU1XHUyNTU2XHUyNTU3XHUyNTU4XHUyNTU5XHUyNTVhXHUyNTViXHUyNTVjXHUyNTVkXHUyNTVlXHUyNTVmXHUyNTYwXHUyNTYxXHUyNTYyXHUyNTYzXHUyNTY0XHUyNTY1XHUyNTY2XHUyNTY3XHUyNTY4XHUyNTY5XHUyNTZhXHUy'@;
put 'NTZiXHUyNTZjXHUyNTZkXHUyNTZlXHUyNTZmXHUyNTcwXHUyNTcxXHUyNTcyXHUyNTczXHUyNTgxXHUyNTgyXHUyNTgzXHUyNTg0XHUyNTg1XHUyNTg2XHUyNTg3XHVmZmZkXHUyNTg4XHUyNTg5XHUyNThhXHUyNThiXHUyNThjXHUyNThkXHUyNThlXHUyNThmXHUyNTkzXHUyNTk0XHUyNTk1'@;
put 'XHUyNWJjXHUyNWJkXHUyNWUyXHUyNWUzXHUyNWU0XHUyNWU1XHUyNjA5XHUyMjk1XHUzMDEyXHUzMDFkXHUzMDFlXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUwMTAxXHhlMVx1MDFjZVx4ZTBcdTAxMTNceGU5XHUw'@;
put 'MTFiXHhlOFx1MDEyYlx4ZWRcdTAxZDBceGVjXHUwMTRkXHhmM1x1MDFkMlx4ZjJcdTAxNmJceGZhXHUwMWQ0XHhmOVx1MDFkNlx1MDFkOFx1MDFkYVx1MDFkY1x4ZmNceGVhXHUwMjUxXHVmZmZkXHUwMTQ0XHUwMTQ4XHVmZmZkXHUwMjYxXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUzMTA1'@;
put 'XHUzMTA2XHUzMTA3XHUzMTA4XHUzMTA5XHUzMTBhXHUzMTBiXHUzMTBjXHUzMTBkXHUzMTBlXHUzMTBmXHUzMTEwXHUzMTExXHUzMTEyXHUzMTEzXHUzMTE0XHUzMTE1XHUzMTE2XHUzMTE3XHUzMTE4XHUzMTE5XHUzMTFhXHUzMTFiXHUzMTFjXHUzMTFkXHUzMTFlXHUzMTFmXHUzMTIwXHUz'@;
put 'MTIxXHUzMTIyXHUzMTIzXHUzMTI0XHUzMTI1XHUzMTI2XHUzMTI3XHUzMTI4XHUzMTI5XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTY4XS5sZW5ndGg7KytnKTY1NTMzIT09X1sxNjhdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTY4XVtnXV09NDMwMDgrZyx5WzQzMDA4K2ddPV9bMTY4XVtnXSk7Zm9yKF9bMTY5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUzMDIxXHUzMDIyXHUzMDIzXHUzMDI0XHUzMDI1XHUzMDI2XHUzMDI3XHUzMDI4XHUzMDI5XHUzMmEzXHUzMzhlXHUzMzhmXHUzMzljXHUzMzlkXHUzMzllXHUzM2ExXHUzM2M0XHUzM2NlXHUzM2QxXHUzM2QyXHUzM2Q1XHVmZTMw'@;
put 'XHVmZmUyXHVmZmU0XHVmZmZkXHUyMTIxXHUzMjMxXHVmZmZkXHUyMDEwXHVmZmZkXHVmZmZkXHVmZmZkXHUzMGZjXHUzMDliXHUzMDljXHUzMGZkXHUzMGZlXHUzMDA2XHUzMDlkXHUzMDllXHVmZTQ5XHVmZTRhXHVmZTRiXHVmZTRjXHVmZTRkXHVmZTRlXHVmZTRmXHVmZTUwXHVmZTUxXHVm'@;
put 'ZTUyXHVmZTU0XHVmZTU1XHVmZTU2XHVmZTU3XHVmZTU5XHVmZTVhXHVmZTViXHVmZTVjXHVmZTVkXHVmZTVlXHVmZTVmXHVmZTYwXHVmZTYxXHVmZmZkXHVmZTYyXHVmZTYzXHVmZTY0XHVmZTY1XHVmZTY2XHVmZTY4XHVmZTY5XHVmZTZhXHVmZTZiXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUzMDA3XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUyNTAwXHUyNTAxXHUyNTAyXHUyNTAzXHUy'@;
put 'NTA0XHUyNTA1XHUyNTA2XHUyNTA3XHUyNTA4XHUyNTA5XHUyNTBhXHUyNTBiXHUyNTBjXHUyNTBkXHUyNTBlXHUyNTBmXHUyNTEwXHUyNTExXHUyNTEyXHUyNTEzXHUyNTE0XHUyNTE1XHUyNTE2XHUyNTE3XHUyNTE4XHUyNTE5XHUyNTFhXHUyNTFiXHUyNTFjXHUyNTFkXHUyNTFlXHUyNTFm'@;
put 'XHUyNTIwXHUyNTIxXHUyNTIyXHUyNTIzXHUyNTI0XHUyNTI1XHUyNTI2XHUyNTI3XHUyNTI4XHUyNTI5XHUyNTJhXHUyNTJiXHUyNTJjXHUyNTJkXHUyNTJlXHUyNTJmXHUyNTMwXHUyNTMxXHUyNTMyXHUyNTMzXHUyNTM0XHUyNTM1XHUyNTM2XHUyNTM3XHUyNTM4XHUyNTM5XHUyNTNhXHUy'@;
put 'NTNiXHUyNTNjXHUyNTNkXHUyNTNlXHUyNTNmXHUyNTQwXHUyNTQxXHUyNTQyXHUyNTQzXHUyNTQ0XHUyNTQ1XHUyNTQ2XHUyNTQ3XHUyNTQ4XHUyNTQ5XHUyNTRhXHUyNTRiXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTY5XS5sZW5ndGg7KytnKTY1NTMzIT09X1sxNjldW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTY5XVtnXV09NDMyNjQrZyx5WzQzMjY0K2ddPV9bMTY5XVtnXSk7Zm9yKF9bMTcwXT0iXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3MmRjXHU3MmRkXHU3MmRmXHU3MmUyXHU3MmUzXHU3MmU0XHU3MmU1XHU3MmU2XHU3MmU3XHU3MmVhXHU3MmViXHU3MmY1XHU3MmY2XHU3MmY5XHU3MmZkXHU3MmZlXHU3MmZmXHU3MzAwXHU3MzAyXHU3MzA0'@;
put 'XHU3MzA1XHU3MzA2XHU3MzA3XHU3MzA4XHU3MzA5XHU3MzBiXHU3MzBjXHU3MzBkXHU3MzBmXHU3MzEwXHU3MzExXHU3MzEyXHU3MzE0XHU3MzE4XHU3MzE5XHU3MzFhXHU3MzFmXHU3MzIwXHU3MzIzXHU3MzI0XHU3MzI2XHU3MzI3XHU3MzI4XHU3MzJkXHU3MzJmXHU3MzMwXHU3MzMyXHU3'@;
put 'MzMzXHU3MzM1XHU3MzM2XHU3MzNhXHU3MzNiXHU3MzNjXHU3MzNkXHU3MzQwXHU3MzQxXHU3MzQyXHU3MzQzXHU3MzQ0XHU3MzQ1XHU3MzQ2XHU3MzQ3XHU3MzQ4XHVmZmZkXHU3MzQ5XHU3MzRhXHU3MzRiXHU3MzRjXHU3MzRlXHU3MzRmXHU3MzUxXHU3MzUzXHU3MzU0XHU3MzU1XHU3MzU2'@;
put 'XHU3MzU4XHU3MzU5XHU3MzVhXHU3MzViXHU3MzVjXHU3MzVkXHU3MzVlXHU3MzVmXHU3MzYxXHU3MzYyXHU3MzYzXHU3MzY0XHU3MzY1XHU3MzY2XHU3MzY3XHU3MzY4XHU3MzY5XHU3MzZhXHU3MzZiXHU3MzZlXHU3MzcwXHU3MzcxXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTcwXS5sZW5ndGg7KytnKTY1NTMzIT09X1sxNzBdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTcwXVtnXV09NDM1MjArZyx5WzQzNTIwK2ddPV9bMTcwXVtnXSk7Zm9yKF9bMTcx'@;
put 'XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3MzcyXHU3MzczXHU3Mzc0XHU3Mzc1XHU3Mzc2XHU3Mzc3XHU3Mzc4XHU3Mzc5XHU3MzdhXHU3MzdiXHU3MzdjXHU3MzdkXHU3MzdmXHU3MzgwXHU3MzgxXHU3MzgyXHU3MzgzXHU3Mzg1'@;
put 'XHU3Mzg2XHU3Mzg4XHU3MzhhXHU3MzhjXHU3MzhkXHU3MzhmXHU3MzkwXHU3MzkyXHU3MzkzXHU3Mzk0XHU3Mzk1XHU3Mzk3XHU3Mzk4XHU3Mzk5XHU3MzlhXHU3MzljXHU3MzlkXHU3MzllXHU3M2EwXHU3M2ExXHU3M2EzXHU3M2E0XHU3M2E1XHU3M2E2XHU3M2E3XHU3M2E4XHU3M2FhXHU3'@;
put 'M2FjXHU3M2FkXHU3M2IxXHU3M2I0XHU3M2I1XHU3M2I2XHU3M2I4XHU3M2I5XHU3M2JjXHU3M2JkXHU3M2JlXHU3M2JmXHU3M2MxXHU3M2MzXHU3M2M0XHU3M2M1XHU3M2M2XHU3M2M3XHVmZmZkXHU3M2NiXHU3M2NjXHU3M2NlXHU3M2QyXHU3M2QzXHU3M2Q0XHU3M2Q1XHU3M2Q2XHU3M2Q3'@;
put 'XHU3M2Q4XHU3M2RhXHU3M2RiXHU3M2RjXHU3M2RkXHU3M2RmXHU3M2UxXHU3M2UyXHU3M2UzXHU3M2U0XHU3M2U2XHU3M2U4XHU3M2VhXHU3M2ViXHU3M2VjXHU3M2VlXHU3M2VmXHU3M2YwXHU3M2YxXHU3M2YzXHU3M2Y0XHU3M2Y1XHU3M2Y2XHU3M2Y3XHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTcxXS5sZW5ndGg7KytnKTY1NTMzIT09X1sxNzFdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTcxXVtnXV09NDM3NzYrZyx5WzQzNzc2K2ddPV9bMTcxXVtn'@;
put 'XSk7Zm9yKF9bMTcyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3M2Y4XHU3M2Y5XHU3M2ZhXHU3M2ZiXHU3M2ZjXHU3M2ZkXHU3M2ZlXHU3M2ZmXHU3NDAwXHU3NDAxXHU3NDAyXHU3NDA0XHU3NDA3XHU3NDA4XHU3NDBiXHU3NDBj'@;
put 'XHU3NDBkXHU3NDBlXHU3NDExXHU3NDEyXHU3NDEzXHU3NDE0XHU3NDE1XHU3NDE2XHU3NDE3XHU3NDE4XHU3NDE5XHU3NDFjXHU3NDFkXHU3NDFlXHU3NDFmXHU3NDIwXHU3NDIxXHU3NDIzXHU3NDI0XHU3NDI3XHU3NDI5XHU3NDJiXHU3NDJkXHU3NDJmXHU3NDMxXHU3NDMyXHU3NDM3XHU3'@;
put 'NDM4XHU3NDM5XHU3NDNhXHU3NDNiXHU3NDNkXHU3NDNlXHU3NDNmXHU3NDQwXHU3NDQyXHU3NDQzXHU3NDQ0XHU3NDQ1XHU3NDQ2XHU3NDQ3XHU3NDQ4XHU3NDQ5XHU3NDRhXHU3NDRiXHU3NDRjXHU3NDRkXHVmZmZkXHU3NDRlXHU3NDRmXHU3NDUwXHU3NDUxXHU3NDUyXHU3NDUzXHU3NDU0'@;
put 'XHU3NDU2XHU3NDU4XHU3NDVkXHU3NDYwXHU3NDYxXHU3NDYyXHU3NDYzXHU3NDY0XHU3NDY1XHU3NDY2XHU3NDY3XHU3NDY4XHU3NDY5XHU3NDZhXHU3NDZiXHU3NDZjXHU3NDZlXHU3NDZmXHU3NDcxXHU3NDcyXHU3NDczXHU3NDc0XHU3NDc1XHU3NDc4XHU3NDc5XHU3NDdhXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTcyXS5sZW5ndGg7KytnKTY1NTMzIT09X1sxNzJdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTcyXVtnXV09NDQwMzIrZyx5WzQ0MDMy'@;
put 'K2ddPV9bMTcyXVtnXSk7Zm9yKF9bMTczXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3NDdiXHU3NDdjXHU3NDdkXHU3NDdmXHU3NDgyXHU3NDg0XHU3NDg1XHU3NDg2XHU3NDg4XHU3NDg5XHU3NDhhXHU3NDhjXHU3NDhkXHU3NDhm'@;
put 'XHU3NDkxXHU3NDkyXHU3NDkzXHU3NDk0XHU3NDk1XHU3NDk2XHU3NDk3XHU3NDk4XHU3NDk5XHU3NDlhXHU3NDliXHU3NDlkXHU3NDlmXHU3NGEwXHU3NGExXHU3NGEyXHU3NGEzXHU3NGE0XHU3NGE1XHU3NGE2XHU3NGFhXHU3NGFiXHU3NGFjXHU3NGFkXHU3NGFlXHU3NGFmXHU3NGIwXHU3'@;
put 'NGIxXHU3NGIyXHU3NGIzXHU3NGI0XHU3NGI1XHU3NGI2XHU3NGI3XHU3NGI4XHU3NGI5XHU3NGJiXHU3NGJjXHU3NGJkXHU3NGJlXHU3NGJmXHU3NGMwXHU3NGMxXHU3NGMyXHU3NGMzXHU3NGM0XHU3NGM1XHU3NGM2XHU3NGM3XHVmZmZkXHU3NGM4XHU3NGM5XHU3NGNhXHU3NGNiXHU3NGNj'@;
put 'XHU3NGNkXHU3NGNlXHU3NGNmXHU3NGQwXHU3NGQxXHU3NGQzXHU3NGQ0XHU3NGQ1XHU3NGQ2XHU3NGQ3XHU3NGQ4XHU3NGQ5XHU3NGRhXHU3NGRiXHU3NGRkXHU3NGRmXHU3NGUxXHU3NGU1XHU3NGU3XHU3NGU4XHU3NGU5XHU3NGVhXHU3NGViXHU3NGVjXHU3NGVkXHU3NGYwXHU3NGYxXHU3'@;
put 'NGYyXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTczXS5sZW5ndGg7KytnKTY1NTMzIT09X1sxNzNdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTczXVtnXV09NDQy'@;
put 'ODgrZyx5WzQ0Mjg4K2ddPV9bMTczXVtnXSk7Zm9yKF9bMTc0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3NGYzXHU3NGY1XHU3NGY4XHU3NGY5XHU3NGZhXHU3NGZiXHU3NGZjXHU3NGZkXHU3NGZlXHU3NTAwXHU3NTAxXHU3NTAy'@;
put 'XHU3NTAzXHU3NTA1XHU3NTA2XHU3NTA3XHU3NTA4XHU3NTA5XHU3NTBhXHU3NTBiXHU3NTBjXHU3NTBlXHU3NTEwXHU3NTEyXHU3NTE0XHU3NTE1XHU3NTE2XHU3NTE3XHU3NTFiXHU3NTFkXHU3NTFlXHU3NTIwXHU3NTIxXHU3NTIyXHU3NTIzXHU3NTI0XHU3NTI2XHU3NTI3XHU3NTJhXHU3'@;
put 'NTJlXHU3NTM0XHU3NTM2XHU3NTM5XHU3NTNjXHU3NTNkXHU3NTNmXHU3NTQxXHU3NTQyXHU3NTQzXHU3NTQ0XHU3NTQ2XHU3NTQ3XHU3NTQ5XHU3NTRhXHU3NTRkXHU3NTUwXHU3NTUxXHU3NTUyXHU3NTUzXHU3NTU1XHU3NTU2XHU3NTU3XHU3NTU4XHVmZmZkXHU3NTVkXHU3NTVlXHU3NTVm'@;
put 'XHU3NTYwXHU3NTYxXHU3NTYyXHU3NTYzXHU3NTY0XHU3NTY3XHU3NTY4XHU3NTY5XHU3NTZiXHU3NTZjXHU3NTZkXHU3NTZlXHU3NTZmXHU3NTcwXHU3NTcxXHU3NTczXHU3NTc1XHU3NTc2XHU3NTc3XHU3NTdhXHU3NTdiXHU3NTdjXHU3NTdkXHU3NTdlXHU3NTgwXHU3NTgxXHU3NTgyXHU3'@;
put 'NTg0XHU3NTg1XHU3NTg3XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTc0XS5sZW5ndGg7KytnKTY1NTMzIT09X1sxNzRdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19b'@;
put 'MTc0XVtnXV09NDQ1NDQrZyx5WzQ0NTQ0K2ddPV9bMTc0XVtnXSk7Zm9yKF9bMTc1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3NTg4XHU3NTg5XHU3NThhXHU3NThjXHU3NThkXHU3NThlXHU3NTkwXHU3NTkzXHU3NTk1XHU3NTk4'@;
put 'XHU3NTliXHU3NTljXHU3NTllXHU3NWEyXHU3NWE2XHU3NWE3XHU3NWE4XHU3NWE5XHU3NWFhXHU3NWFkXHU3NWI2XHU3NWI3XHU3NWJhXHU3NWJiXHU3NWJmXHU3NWMwXHU3NWMxXHU3NWM2XHU3NWNiXHU3NWNjXHU3NWNlXHU3NWNmXHU3NWQwXHU3NWQxXHU3NWQzXHU3NWQ3XHU3NWQ5XHU3'@;
put 'NWRhXHU3NWRjXHU3NWRkXHU3NWRmXHU3NWUwXHU3NWUxXHU3NWU1XHU3NWU5XHU3NWVjXHU3NWVkXHU3NWVlXHU3NWVmXHU3NWYyXHU3NWYzXHU3NWY1XHU3NWY2XHU3NWY3XHU3NWY4XHU3NWZhXHU3NWZiXHU3NWZkXHU3NWZlXHU3NjAyXHU3NjA0XHU3NjA2XHU3NjA3XHVmZmZkXHU3NjA4'@;
put 'XHU3NjA5XHU3NjBiXHU3NjBkXHU3NjBlXHU3NjBmXHU3NjExXHU3NjEyXHU3NjEzXHU3NjE0XHU3NjE2XHU3NjFhXHU3NjFjXHU3NjFkXHU3NjFlXHU3NjIxXHU3NjIzXHU3NjI3XHU3NjI4XHU3NjJjXHU3NjJlXHU3NjJmXHU3NjMxXHU3NjMyXHU3NjM2XHU3NjM3XHU3NjM5XHU3NjNhXHU3'@;
put 'NjNiXHU3NjNkXHU3NjQxXHU3NjQyXHU3NjQ0XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTc1XS5sZW5ndGg7KytnKTY1NTMzIT09X1sxNzVdW2ddLmNoYXJDb2Rl'@;
put 'QXQoMCkmJihJW19bMTc1XVtnXV09NDQ4MDArZyx5WzQ0ODAwK2ddPV9bMTc1XVtnXSk7Zm9yKF9bMTc2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3NjQ1XHU3NjQ2XHU3NjQ3XHU3NjQ4XHU3NjQ5XHU3NjRhXHU3NjRiXHU3NjRl'@;
put 'XHU3NjRmXHU3NjUwXHU3NjUxXHU3NjUyXHU3NjUzXHU3NjU1XHU3NjU3XHU3NjU4XHU3NjU5XHU3NjVhXHU3NjViXHU3NjVkXHU3NjVmXHU3NjYwXHU3NjYxXHU3NjYyXHU3NjY0XHU3NjY1XHU3NjY2XHU3NjY3XHU3NjY4XHU3NjY5XHU3NjZhXHU3NjZjXHU3NjZkXHU3NjZlXHU3NjcwXHU3'@;
put 'NjcxXHU3NjcyXHU3NjczXHU3Njc0XHU3Njc1XHU3Njc2XHU3Njc3XHU3Njc5XHU3NjdhXHU3NjdjXHU3NjdmXHU3NjgwXHU3NjgxXHU3NjgzXHU3Njg1XHU3Njg5XHU3NjhhXHU3NjhjXHU3NjhkXHU3NjhmXHU3NjkwXHU3NjkyXHU3Njk0XHU3Njk1XHU3Njk3XHU3Njk4XHU3NjlhXHU3Njli'@;
put 'XHVmZmZkXHU3NjljXHU3NjlkXHU3NjllXHU3NjlmXHU3NmEwXHU3NmExXHU3NmEyXHU3NmEzXHU3NmE1XHU3NmE2XHU3NmE3XHU3NmE4XHU3NmE5XHU3NmFhXHU3NmFiXHU3NmFjXHU3NmFkXHU3NmFmXHU3NmIwXHU3NmIzXHU3NmI1XHU3NmI2XHU3NmI3XHU3NmI4XHU3NmI5XHU3NmJhXHU3'@;
put 'NmJiXHU3NmJjXHU3NmJkXHU3NmJlXHU3NmMwXHU3NmMxXHU3NmMzXHU1NTRhXHU5NjNmXHU1N2MzXHU2MzI4XHU1NGNlXHU1NTA5XHU1NGMwXHU3NjkxXHU3NjRjXHU4NTNjXHU3N2VlXHU4MjdlXHU3ODhkXHU3MjMxXHU5Njk4XHU5NzhkXHU2YzI4XHU1Yjg5XHU0ZmZhXHU2MzA5XHU2Njk3'@;
put 'XHU1Y2I4XHU4MGZhXHU2ODQ4XHU4MGFlXHU2NjAyXHU3NmNlXHU1MWY5XHU2NTU2XHU3MWFjXHU3ZmYxXHU4ODg0XHU1MGIyXHU1OTY1XHU2MWNhXHU2ZmIzXHU4MmFkXHU2MzRjXHU2MjUyXHU1M2VkXHU1NDI3XHU3YjA2XHU1MTZiXHU3NWE0XHU1ZGY0XHU2MmQ0XHU4ZGNiXHU5Nzc2XHU2'@;
put 'MjhhXHU4MDE5XHU1NzVkXHU5NzM4XHU3ZjYyXHU3MjM4XHU3NjdkXHU2N2NmXHU3NjdlXHU2NDQ2XHU0ZjcwXHU4ZDI1XHU2MmRjXHU3YTE3XHU2NTkxXHU3M2VkXHU2NDJjXHU2MjczXHU4MjJjXHU5ODgxXHU2NzdmXHU3MjQ4XHU2MjZlXHU2MmNjXHU0ZjM0XHU3NGUzXHU1MzRhXHU1Mjll'@;
put 'XHU3ZWNhXHU5MGE2XHU1ZTJlXHU2ODg2XHU2OTljXHU4MTgwXHU3ZWQxXHU2OGQyXHU3OGM1XHU4NjhjXHU5NTUxXHU1MDhkXHU4YzI0XHU4MmRlXHU4MGRlXHU1MzA1XHU4OTEyXHU1MjY1XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTc2XS5sZW5ndGg7KytnKTY1NTMzIT09X1sxNzZd'@;
put 'W2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTc2XVtnXV09NDUwNTYrZyx5WzQ1MDU2K2ddPV9bMTc2XVtnXSk7Zm9yKF9bMTc3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3NmM0XHU3NmM3XHU3NmM5XHU3NmNiXHU3NmNjXHU3NmQz'@;
put 'XHU3NmQ1XHU3NmQ5XHU3NmRhXHU3NmRjXHU3NmRkXHU3NmRlXHU3NmUwXHU3NmUxXHU3NmUyXHU3NmUzXHU3NmU0XHU3NmU2XHU3NmU3XHU3NmU4XHU3NmU5XHU3NmVhXHU3NmViXHU3NmVjXHU3NmVkXHU3NmYwXHU3NmYzXHU3NmY1XHU3NmY2XHU3NmY3XHU3NmZhXHU3NmZiXHU3NmZkXHU3'@;
put 'NmZmXHU3NzAwXHU3NzAyXHU3NzAzXHU3NzA1XHU3NzA2XHU3NzBhXHU3NzBjXHU3NzBlXHU3NzBmXHU3NzEwXHU3NzExXHU3NzEyXHU3NzEzXHU3NzE0XHU3NzE1XHU3NzE2XHU3NzE3XHU3NzE4XHU3NzFiXHU3NzFjXHU3NzFkXHU3NzFlXHU3NzIxXHU3NzIzXHU3NzI0XHU3NzI1XHU3NzI3'@;
put 'XHU3NzJhXHU3NzJiXHVmZmZkXHU3NzJjXHU3NzJlXHU3NzMwXHU3NzMxXHU3NzMyXHU3NzMzXHU3NzM0XHU3NzM5XHU3NzNiXHU3NzNkXHU3NzNlXHU3NzNmXHU3NzQyXHU3NzQ0XHU3NzQ1XHU3NzQ2XHU3NzQ4XHU3NzQ5XHU3NzRhXHU3NzRiXHU3NzRjXHU3NzRkXHU3NzRlXHU3NzRmXHU3'@;
put 'NzUyXHU3NzUzXHU3NzU0XHU3NzU1XHU3NzU2XHU3NzU3XHU3NzU4XHU3NzU5XHU3NzVjXHU4NTg0XHU5NmY5XHU0ZmRkXHU1ODIxXHU5OTcxXHU1YjlkXHU2MmIxXHU2MmE1XHU2NmI0XHU4Yzc5XHU5YzhkXHU3MjA2XHU2NzZmXHU3ODkxXHU2MGIyXHU1MzUxXHU1MzE3XHU4Zjg4XHU4MGNj'@;
put 'XHU4ZDFkXHU5NGExXHU1MDBkXHU3MmM4XHU1OTA3XHU2MGViXHU3MTE5XHU4OGFiXHU1OTU0XHU4MmVmXHU2NzJjXHU3YjI4XHU1ZDI5XHU3ZWY3XHU3NTJkXHU2Y2Y1XHU4ZTY2XHU4ZmY4XHU5MDNjXHU5ZjNiXHU2YmQ0XHU5MTE5XHU3YjE0XHU1ZjdjXHU3OGE3XHU4NGQ2XHU4NTNkXHU2'@;
put 'YmQ1XHU2YmQ5XHU2YmQ2XHU1ZTAxXHU1ZTg3XHU3NWY5XHU5NWVkXHU2NTVkXHU1ZjBhXHU1ZmM1XHU4ZjlmXHU1OGMxXHU4MWMyXHU5MDdmXHU5NjViXHU5N2FkXHU4ZmI5XHU3ZjE2XHU4ZDJjXHU2MjQxXHU0ZmJmXHU1M2Q4XHU1MzVlXHU4ZmE4XHU4ZmE5XHU4ZmFiXHU5MDRkXHU2ODA3'@;
put 'XHU1ZjZhXHU4MTk4XHU4ODY4XHU5Y2Q2XHU2MThiXHU1MjJiXHU3NjJhXHU1ZjZjXHU2NThjXHU2ZmQyXHU2ZWU4XHU1YmJlXHU2NDQ4XHU1MTc1XHU1MWIwXHU2N2M0XHU0ZTE5XHU3OWM5XHU5OTdjXHU3MGIzXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTc3XS5sZW5ndGg7KytnKTY1'@;
put 'NTMzIT09X1sxNzddW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTc3XVtnXV09NDUzMTIrZyx5WzQ1MzEyK2ddPV9bMTc3XVtnXSk7Zm9yKF9bMTc4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3NzVkXHU3NzVlXHU3NzVmXHU3NzYw'@;
put 'XHU3NzY0XHU3NzY3XHU3NzY5XHU3NzZhXHU3NzZkXHU3NzZlXHU3NzZmXHU3NzcwXHU3NzcxXHU3NzcyXHU3NzczXHU3Nzc0XHU3Nzc1XHU3Nzc2XHU3Nzc3XHU3Nzc4XHU3NzdhXHU3NzdiXHU3NzdjXHU3NzgxXHU3NzgyXHU3NzgzXHU3Nzg2XHU3Nzg3XHU3Nzg4XHU3Nzg5XHU3NzhhXHU3'@;
put 'NzhiXHU3NzhmXHU3NzkwXHU3NzkzXHU3Nzk0XHU3Nzk1XHU3Nzk2XHU3Nzk3XHU3Nzk4XHU3Nzk5XHU3NzlhXHU3NzliXHU3NzljXHU3NzlkXHU3NzllXHU3N2ExXHU3N2EzXHU3N2E0XHU3N2E2XHU3N2E4XHU3N2FiXHU3N2FkXHU3N2FlXHU3N2FmXHU3N2IxXHU3N2IyXHU3N2I0XHU3N2I2'@;
put 'XHU3N2I3XHU3N2I4XHU3N2I5XHU3N2JhXHVmZmZkXHU3N2JjXHU3N2JlXHU3N2MwXHU3N2MxXHU3N2MyXHU3N2MzXHU3N2M0XHU3N2M1XHU3N2M2XHU3N2M3XHU3N2M4XHU3N2M5XHU3N2NhXHU3N2NiXHU3N2NjXHU3N2NlXHU3N2NmXHU3N2QwXHU3N2QxXHU3N2QyXHU3N2QzXHU3N2Q0XHU3'@;
put 'N2Q1XHU3N2Q2XHU3N2Q4XHU3N2Q5XHU3N2RhXHU3N2RkXHU3N2RlXHU3N2RmXHU3N2UwXHU3N2UxXHU3N2U0XHU3NWM1XHU1ZTc2XHU3M2JiXHU4M2UwXHU2NGFkXHU2MmU4XHU5NGI1XHU2Y2UyXHU1MzVhXHU1MmMzXHU2NDBmXHU5NGMyXHU3Yjk0XHU0ZjJmXHU1ZTFiXHU4MjM2XHU4MTE2'@;
put 'XHU4MThhXHU2ZTI0XHU2Y2NhXHU5YTczXHU2MzU1XHU1MzVjXHU1NGZhXHU4ODY1XHU1N2UwXHU0ZTBkXHU1ZTAzXHU2YjY1XHU3YzNmXHU5MGU4XHU2MDE2XHU2NGU2XHU3MzFjXHU4OGMxXHU2NzUwXHU2MjRkXHU4ZDIyXHU3NzZjXHU4ZTI5XHU5MWM3XHU1ZjY5XHU4M2RjXHU4NTIxXHU5'@;
put 'OTEwXHU1M2MyXHU4Njk1XHU2YjhiXHU2MGVkXHU2MGU4XHU3MDdmXHU4MmNkXHU4MjMxXHU0ZWQzXHU2Y2E3XHU4NWNmXHU2NGNkXHU3Y2Q5XHU2OWZkXHU2NmY5XHU4MzQ5XHU1Mzk1XHU3YjU2XHU0ZmE3XHU1MThjXHU2ZDRiXHU1YzQyXHU4ZTZkXHU2M2QyXHU1M2M5XHU4MzJjXHU4MzM2'@;
put 'XHU2N2U1XHU3OGI0XHU2NDNkXHU1YmRmXHU1Yzk0XHU1ZGVlXHU4YmU3XHU2MmM2XHU2N2Y0XHU4YzdhXHU2NDAwXHU2M2JhXHU4NzQ5XHU5OThiXHU4YzE3XHU3ZjIwXHU5NGYyXHU0ZWE3XHU5NjEwXHU5OGE0XHU2NjBjXHU3MzE2XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTc4XS5s'@;
put 'ZW5ndGg7KytnKTY1NTMzIT09X1sxNzhdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTc4XVtnXV09NDU1NjgrZyx5WzQ1NTY4K2ddPV9bMTc4XVtnXSk7Zm9yKF9bMTc5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3N2U2XHU3N2U4'@;
put 'XHU3N2VhXHU3N2VmXHU3N2YwXHU3N2YxXHU3N2YyXHU3N2Y0XHU3N2Y1XHU3N2Y3XHU3N2Y5XHU3N2ZhXHU3N2ZiXHU3N2ZjXHU3ODAzXHU3ODA0XHU3ODA1XHU3ODA2XHU3ODA3XHU3ODA4XHU3ODBhXHU3ODBiXHU3ODBlXHU3ODBmXHU3ODEwXHU3ODEzXHU3ODE1XHU3ODE5XHU3ODFiXHU3'@;
put 'ODFlXHU3ODIwXHU3ODIxXHU3ODIyXHU3ODI0XHU3ODI4XHU3ODJhXHU3ODJiXHU3ODJlXHU3ODJmXHU3ODMxXHU3ODMyXHU3ODMzXHU3ODM1XHU3ODM2XHU3ODNkXHU3ODNmXHU3ODQxXHU3ODQyXHU3ODQzXHU3ODQ0XHU3ODQ2XHU3ODQ4XHU3ODQ5XHU3ODRhXHU3ODRiXHU3ODRkXHU3ODRm'@;
put 'XHU3ODUxXHU3ODUzXHU3ODU0XHU3ODU4XHU3ODU5XHU3ODVhXHVmZmZkXHU3ODViXHU3ODVjXHU3ODVlXHU3ODVmXHU3ODYwXHU3ODYxXHU3ODYyXHU3ODYzXHU3ODY0XHU3ODY1XHU3ODY2XHU3ODY3XHU3ODY4XHU3ODY5XHU3ODZmXHU3ODcwXHU3ODcxXHU3ODcyXHU3ODczXHU3ODc0XHU3'@;
put 'ODc1XHU3ODc2XHU3ODc4XHU3ODc5XHU3ODdhXHU3ODdiXHU3ODdkXHU3ODdlXHU3ODdmXHU3ODgwXHU3ODgxXHU3ODgyXHU3ODgzXHU1NzNhXHU1YzFkXHU1ZTM4XHU5NTdmXHU1MDdmXHU4MGEwXHU1MzgyXHU2NTVlXHU3NTQ1XHU1NTMxXHU1MDIxXHU4ZDg1XHU2Mjg0XHU5NDllXHU2NzFk'@;
put 'XHU1NjMyXHU2ZjZlXHU1ZGUyXHU1NDM1XHU3MDkyXHU4ZjY2XHU2MjZmXHU2NGE0XHU2M2EzXHU1ZjdiXHU2Zjg4XHU5MGY0XHU4MWUzXHU4ZmIwXHU1YzE4XHU2NjY4XHU1ZmYxXHU2Yzg5XHU5NjQ4XHU4ZDgxXHU4ODZjXHU2NDkxXHU3OWYwXHU1N2NlXHU2YTU5XHU2MjEwXHU1NDQ4XHU0'@;
put 'ZTU4XHU3YTBiXHU2MGU5XHU2Zjg0XHU4YmRhXHU2MjdmXHU5MDFlXHU5YThiXHU3OWU0XHU1NDAzXHU3NWY0XHU2MzAxXHU1MzE5XHU2YzYwXHU4ZmRmXHU1ZjFiXHU5YTcwXHU4MDNiXHU5ZjdmXHU0Zjg4XHU1YzNhXHU4ZDY0XHU3ZmM1XHU2NWE1XHU3MGJkXHU1MTQ1XHU1MWIyXHU4NjZi'@;
put 'XHU1ZDA3XHU1YmEwXHU2MmJkXHU5MTZjXHU3NTc0XHU4ZTBjXHU3YTIwXHU2MTAxXHU3Yjc5XHU0ZWM3XHU3ZWY4XHU3Nzg1XHU0ZTExXHU4MWVkXHU1MjFkXHU1MWZhXHU2YTcxXHU1M2E4XHU4ZTg3XHU5NTA0XHU5NmNmXHU2ZWMxXHU5NjY0XHU2OTVhXHVmZmZkIi5zcGxpdCgiIiksZz0w'@;
put 'O2chPV9bMTc5XS5sZW5ndGg7KytnKTY1NTMzIT09X1sxNzldW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTc5XVtnXV09NDU4MjQrZyx5WzQ1ODI0K2ddPV9bMTc5XVtnXSk7Zm9yKF9bMTgwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHU3ODg0XHU3ODg1XHU3ODg2XHU3ODg4XHU3ODhhXHU3ODhiXHU3ODhmXHU3ODkwXHU3ODkyXHU3ODk0XHU3ODk1XHU3ODk2XHU3ODk5XHU3ODlkXHU3ODllXHU3OGEwXHU3OGEyXHU3OGE0XHU3OGE2XHU3OGE4XHU3OGE5XHU3OGFhXHU3OGFiXHU3OGFjXHU3OGFkXHU3OGFlXHU3OGFmXHU3'@;
put 'OGI1XHU3OGI2XHU3OGI3XHU3OGI4XHU3OGJhXHU3OGJiXHU3OGJjXHU3OGJkXHU3OGJmXHU3OGMwXHU3OGMyXHU3OGMzXHU3OGM0XHU3OGM2XHU3OGM3XHU3OGM4XHU3OGNjXHU3OGNkXHU3OGNlXHU3OGNmXHU3OGQxXHU3OGQyXHU3OGQzXHU3OGQ2XHU3OGQ3XHU3OGQ4XHU3OGRhXHU3OGRi'@;
put 'XHU3OGRjXHU3OGRkXHU3OGRlXHU3OGRmXHU3OGUwXHU3OGUxXHU3OGUyXHU3OGUzXHVmZmZkXHU3OGU0XHU3OGU1XHU3OGU2XHU3OGU3XHU3OGU5XHU3OGVhXHU3OGViXHU3OGVkXHU3OGVlXHU3OGVmXHU3OGYwXHU3OGYxXHU3OGYzXHU3OGY1XHU3OGY2XHU3OGY4XHU3OGY5XHU3OGZiXHU3'@;
put 'OGZjXHU3OGZkXHU3OGZlXHU3OGZmXHU3OTAwXHU3OTAyXHU3OTAzXHU3OTA0XHU3OTA2XHU3OTA3XHU3OTA4XHU3OTA5XHU3OTBhXHU3OTBiXHU3OTBjXHU3ODQwXHU1MGE4XHU3N2Q3XHU2NDEwXHU4OWU2XHU1OTA0XHU2M2UzXHU1ZGRkXHU3YTdmXHU2OTNkXHU0ZjIwXHU4MjM5XHU1NTk4'@;
put 'XHU0ZTMyXHU3NWFlXHU3YTk3XHU1ZTYyXHU1ZThhXHU5NWVmXHU1MjFiXHU1NDM5XHU3MDhhXHU2Mzc2XHU5NTI0XHU1NzgyXHU2NjI1XHU2OTNmXHU5MTg3XHU1NTA3XHU2ZGYzXHU3ZWFmXHU4ODIyXHU2MjMzXHU3ZWYwXHU3NWI1XHU4MzI4XHU3OGMxXHU5NmNjXHU4ZjllXHU2MTQ4XHU3'@;
put 'NGY3XHU4YmNkXHU2YjY0XHU1MjNhXHU4ZDUwXHU2YjIxXHU4MDZhXHU4NDcxXHU1NmYxXHU1MzA2XHU0ZWNlXHU0ZTFiXHU1MWQxXHU3Yzk3XHU5MThiXHU3YzA3XHU0ZmMzXHU4ZTdmXHU3YmUxXHU3YTljXHU2NDY3XHU1ZDE0XHU1MGFjXHU4MTA2XHU3NjAxXHU3Y2I5XHU2ZGVjXHU3ZmUw'@;
put 'XHU2NzUxXHU1YjU4XHU1YmY4XHU3OGNiXHU2NGFlXHU2NDEzXHU2M2FhXHU2MzJiXHU5NTE5XHU2NDJkXHU4ZmJlXHU3YjU0XHU3NjI5XHU2MjUzXHU1OTI3XHU1NDQ2XHU2Yjc5XHU1MGEzXHU2MjM0XHU1ZTI2XHU2Yjg2XHU0ZWUzXHU4ZDM3XHU4ODhiXHU1Zjg1XHU5MDJlXHVmZmZkIi5z'@;
put 'cGxpdCgiIiksZz0wO2chPV9bMTgwXS5sZW5ndGg7KytnKTY1NTMzIT09X1sxODBdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTgwXVtnXV09NDYwODArZyx5WzQ2MDgwK2ddPV9bMTgwXVtnXSk7Zm9yKF9bMTgxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHU3OTBkXHU3OTBlXHU3OTBmXHU3OTEwXHU3OTExXHU3OTEyXHU3OTE0XHU3OTE1XHU3OTE2XHU3OTE3XHU3OTE4XHU3OTE5XHU3OTFhXHU3OTFiXHU3OTFjXHU3OTFkXHU3OTFmXHU3OTIwXHU3OTIxXHU3OTIyXHU3OTIzXHU3OTI1XHU3OTI2XHU3OTI3XHU3OTI4XHU3'@;
put 'OTI5XHU3OTJhXHU3OTJiXHU3OTJjXHU3OTJkXHU3OTJlXHU3OTJmXHU3OTMwXHU3OTMxXHU3OTMyXHU3OTMzXHU3OTM1XHU3OTM2XHU3OTM3XHU3OTM4XHU3OTM5XHU3OTNkXHU3OTNmXHU3OTQyXHU3OTQzXHU3OTQ0XHU3OTQ1XHU3OTQ3XHU3OTRhXHU3OTRiXHU3OTRjXHU3OTRkXHU3OTRl'@;
put 'XHU3OTRmXHU3OTUwXHU3OTUxXHU3OTUyXHU3OTU0XHU3OTU1XHU3OTU4XHU3OTU5XHU3OTYxXHU3OTYzXHVmZmZkXHU3OTY0XHU3OTY2XHU3OTY5XHU3OTZhXHU3OTZiXHU3OTZjXHU3OTZlXHU3OTcwXHU3OTcxXHU3OTcyXHU3OTczXHU3OTc0XHU3OTc1XHU3OTc2XHU3OTc5XHU3OTdiXHU3'@;
put 'OTdjXHU3OTdkXHU3OTdlXHU3OTdmXHU3OTgyXHU3OTgzXHU3OTg2XHU3OTg3XHU3OTg4XHU3OTg5XHU3OThiXHU3OThjXHU3OThkXHU3OThlXHU3OTkwXHU3OTkxXHU3OTkyXHU2MDIwXHU4MDNkXHU2MmM1XHU0ZTM5XHU1MzU1XHU5MGY4XHU2M2I4XHU4MGM2XHU2NWU2XHU2YzJlXHU0ZjQ2'@;
put 'XHU2MGVlXHU2ZGUxXHU4YmRlXHU1ZjM5XHU4NmNiXHU1ZjUzXHU2MzIxXHU1MTVhXHU4MzYxXHU2ODYzXHU1MjAwXHU2MzYzXHU4ZTQ4XHU1MDEyXHU1YzliXHU3OTc3XHU1YmZjXHU1MjMwXHU3YTNiXHU2MGJjXHU5MDUzXHU3NmQ3XHU1ZmI3XHU1Zjk3XHU3Njg0XHU4ZTZjXHU3MDZmXHU3'@;
put 'NjdiXHU3YjQ5XHU3N2FhXHU1MWYzXHU5MDkzXHU1ODI0XHU0ZjRlXHU2ZWY0XHU4ZmVhXHU2NTRjXHU3YjFiXHU3MmM0XHU2ZGE0XHU3ZmRmXHU1YWUxXHU2MmI1XHU1ZTk1XHU1NzMwXHU4NDgyXHU3YjJjXHU1ZTFkXHU1ZjFmXHU5MDEyXHU3ZjE0XHU5OGEwXHU2MzgyXHU2ZWM3XHU3ODk4'@;
put 'XHU3MGI5XHU1MTc4XHU5NzViXHU1N2FiXHU3NTM1XHU0ZjQzXHU3NTM4XHU1ZTk3XHU2MGU2XHU1OTYwXHU2ZGMwXHU2YmJmXHU3ODg5XHU1M2ZjXHU5NmQ1XHU1MWNiXHU1MjAxXHU2Mzg5XHU1NDBhXHU5NDkzXHU4YzAzXHU4ZGNjXHU3MjM5XHU3ODlmXHU4Nzc2XHU4ZmVkXHU4YzBkXHU1'@;
put 'M2UwXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTgxXS5sZW5ndGg7KytnKTY1NTMzIT09X1sxODFdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTgxXVtnXV09NDYzMzYrZyx5WzQ2MzM2K2ddPV9bMTgxXVtnXSk7Zm9yKF9bMTgyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3OTkzXHU3OTk0XHU3OTk1XHU3OTk2XHU3OTk3XHU3OTk4XHU3OTk5XHU3OTliXHU3OTljXHU3OTlkXHU3OTllXHU3OTlmXHU3OWEwXHU3OWExXHU3OWEyXHU3OWEzXHU3OWE0XHU3OWE1XHU3OWE2XHU3OWE4XHU3OWE5XHU3OWFhXHU3OWFiXHU3'@;
put 'OWFjXHU3OWFkXHU3OWFlXHU3OWFmXHU3OWIwXHU3OWIxXHU3OWIyXHU3OWI0XHU3OWI1XHU3OWI2XHU3OWI3XHU3OWI4XHU3OWJjXHU3OWJmXHU3OWMyXHU3OWM0XHU3OWM1XHU3OWM3XHU3OWM4XHU3OWNhXHU3OWNjXHU3OWNlXHU3OWNmXHU3OWQwXHU3OWQzXHU3OWQ0XHU3OWQ2XHU3OWQ3'@;
put 'XHU3OWQ5XHU3OWRhXHU3OWRiXHU3OWRjXHU3OWRkXHU3OWRlXHU3OWUwXHU3OWUxXHU3OWUyXHU3OWU1XHU3OWU4XHU3OWVhXHVmZmZkXHU3OWVjXHU3OWVlXHU3OWYxXHU3OWYyXHU3OWYzXHU3OWY0XHU3OWY1XHU3OWY2XHU3OWY3XHU3OWY5XHU3OWZhXHU3OWZjXHU3OWZlXHU3OWZmXHU3'@;
put 'YTAxXHU3YTA0XHU3YTA1XHU3YTA3XHU3YTA4XHU3YTA5XHU3YTBhXHU3YTBjXHU3YTBmXHU3YTEwXHU3YTExXHU3YTEyXHU3YTEzXHU3YTE1XHU3YTE2XHU3YTE4XHU3YTE5XHU3YTFiXHU3YTFjXHU0ZTAxXHU3NmVmXHU1M2VlXHU5NDg5XHU5ODc2XHU5ZjBlXHU5NTJkXHU1YjlhXHU4YmEy'@;
put 'XHU0ZTIyXHU0ZTFjXHU1MWFjXHU4NDYzXHU2MWMyXHU1MmE4XHU2ODBiXHU0Zjk3XHU2MDZiXHU1MWJiXHU2ZDFlXHU1MTVjXHU2Mjk2XHU2NTk3XHU5NjYxXHU4YzQ2XHU5MDE3XHU3NWQ4XHU5MGZkXHU3NzYzXHU2YmQyXHU3MjhhXHU3MmVjXHU4YmZiXHU1ODM1XHU3Nzc5XHU4ZDRjXHU2'@;
put 'NzVjXHU5NTQwXHU4MDlhXHU1ZWE2XHU2ZTIxXHU1OTkyXHU3YWVmXHU3N2VkXHU5NTNiXHU2YmI1XHU2NWFkXHU3ZjBlXHU1ODA2XHU1MTUxXHU5NjFmXHU1YmY5XHU1OGE5XHU1NDI4XHU4ZTcyXHU2NTY2XHU5ODdmXHU1NmU0XHU5NDlkXHU3NmZlXHU5MDQxXHU2Mzg3XHU1NGM2XHU1OTFh'@;
put 'XHU1OTNhXHU1NzliXHU4ZWIyXHU2NzM1XHU4ZGZhXHU4MjM1XHU1MjQxXHU2MGYwXHU1ODE1XHU4NmZlXHU1Y2U4XHU5ZTQ1XHU0ZmM0XHU5ODlkXHU4YmI5XHU1YTI1XHU2MDc2XHU1Mzg0XHU2MjdjXHU5MDRmXHU5MTAyXHU5OTdmXHU2MDY5XHU4MDBjXHU1MTNmXHU4MDMzXHU1YzE0XHU5'@;
put 'OTc1XHU2ZDMxXHU0ZThjXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTgyXS5sZW5ndGg7KytnKTY1NTMzIT09X1sxODJdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTgyXVtnXV09NDY1OTIrZyx5WzQ2NTkyK2ddPV9bMTgyXVtnXSk7Zm9yKF9bMTgzXT0iXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3YTFkXHU3YTFmXHU3YTIxXHU3YTIyXHU3YTI0XHU3YTI1XHU3YTI2XHU3YTI3XHU3YTI4XHU3YTI5XHU3YTJhXHU3YTJiXHU3YTJjXHU3YTJkXHU3YTJlXHU3YTJmXHU3YTMwXHU3YTMxXHU3YTMyXHU3YTM0XHU3YTM1XHU3'@;
put 'YTM2XHU3YTM4XHU3YTNhXHU3YTNlXHU3YTQwXHU3YTQxXHU3YTQyXHU3YTQzXHU3YTQ0XHU3YTQ1XHU3YTQ3XHU3YTQ4XHU3YTQ5XHU3YTRhXHU3YTRiXHU3YTRjXHU3YTRkXHU3YTRlXHU3YTRmXHU3YTUwXHU3YTUyXHU3YTUzXHU3YTU0XHU3YTU1XHU3YTU2XHU3YTU4XHU3YTU5XHU3YTVh'@;
put 'XHU3YTViXHU3YTVjXHU3YTVkXHU3YTVlXHU3YTVmXHU3YTYwXHU3YTYxXHU3YTYyXHU3YTYzXHU3YTY0XHU3YTY1XHU3YTY2XHU3YTY3XHU3YTY4XHVmZmZkXHU3YTY5XHU3YTZhXHU3YTZiXHU3YTZjXHU3YTZkXHU3YTZlXHU3YTZmXHU3YTcxXHU3YTcyXHU3YTczXHU3YTc1XHU3YTdiXHU3'@;
put 'YTdjXHU3YTdkXHU3YTdlXHU3YTgyXHU3YTg1XHU3YTg3XHU3YTg5XHU3YThhXHU3YThiXHU3YThjXHU3YThlXHU3YThmXHU3YTkwXHU3YTkzXHU3YTk0XHU3YTk5XHU3YTlhXHU3YTliXHU3YTllXHU3YWExXHU3YWEyXHU4ZDMwXHU1M2QxXHU3ZjVhXHU3YjRmXHU0ZjEwXHU0ZTRmXHU5NjAw'@;
put 'XHU2Y2Q1XHU3M2QwXHU4NWU5XHU1ZTA2XHU3NTZhXHU3ZmZiXHU2YTBhXHU3N2ZlXHU5NDkyXHU3ZTQxXHU1MWUxXHU3MGU2XHU1M2NkXHU4ZmQ0XHU4MzAzXHU4ZDI5XHU3MmFmXHU5OTZkXHU2Y2RiXHU1NzRhXHU4MmIzXHU2NWI5XHU4MGFhXHU2MjNmXHU5NjMyXHU1OWE4XHU0ZWZmXHU4'@;
put 'YmJmXHU3ZWJhXHU2NTNlXHU4M2YyXHU5NzVlXHU1NTYxXHU5OGRlXHU4MGE1XHU1MzJhXHU4YmZkXHU1NDIwXHU4MGJhXHU1ZTlmXHU2Y2I4XHU4ZDM5XHU4MmFjXHU5MTVhXHU1NDI5XHU2YzFiXHU1MjA2XHU3ZWI3XHU1NzVmXHU3MTFhXHU2YzdlXHU3Yzg5XHU1OTRiXHU0ZWZkXHU1ZmZm'@;
put 'XHU2MTI0XHU3Y2FhXHU0ZTMwXHU1YzAxXHU2N2FiXHU4NzAyXHU1Y2YwXHU5NTBiXHU5OGNlXHU3NWFmXHU3MGZkXHU5MDIyXHU1MWFmXHU3ZjFkXHU4YmJkXHU1OTQ5XHU1MWU0XHU0ZjViXHU1NDI2XHU1OTJiXHU2NTc3XHU4MGE0XHU1Yjc1XHU2Mjc2XHU2MmMyXHU4ZjkwXHU1ZTQ1XHU2'@;
put 'YzFmXHU3YjI2XHU0ZjBmXHU0ZmQ4XHU2NzBkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTgzXS5sZW5ndGg7KytnKTY1NTMzIT09X1sxODNdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTgzXVtnXV09NDY4NDgrZyx5WzQ2ODQ4K2ddPV9bMTgzXVtnXSk7Zm9yKF9bMTg0XT0iXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3YWEzXHU3YWE0XHU3YWE3XHU3YWE5XHU3YWFhXHU3YWFiXHU3YWFlXHU3YWFmXHU3YWIwXHU3YWIxXHU3YWIyXHU3YWI0XHU3YWI1XHU3YWI2XHU3YWI3XHU3YWI4XHU3YWI5XHU3YWJhXHU3YWJiXHU3'@;
put 'YWJjXHU3YWJkXHU3YWJlXHU3YWMwXHU3YWMxXHU3YWMyXHU3YWMzXHU3YWM0XHU3YWM1XHU3YWM2XHU3YWM3XHU3YWM4XHU3YWM5XHU3YWNhXHU3YWNjXHU3YWNkXHU3YWNlXHU3YWNmXHU3YWQwXHU3YWQxXHU3YWQyXHU3YWQzXHU3YWQ0XHU3YWQ1XHU3YWQ3XHU3YWQ4XHU3YWRhXHU3YWRi'@;
put 'XHU3YWRjXHU3YWRkXHU3YWUxXHU3YWUyXHU3YWU0XHU3YWU3XHU3YWU4XHU3YWU5XHU3YWVhXHU3YWViXHU3YWVjXHU3YWVlXHU3YWYwXHU3YWYxXHU3YWYyXHU3YWYzXHVmZmZkXHU3YWY0XHU3YWY1XHU3YWY2XHU3YWY3XHU3YWY4XHU3YWZiXHU3YWZjXHU3YWZlXHU3YjAwXHU3YjAxXHU3'@;
put 'YjAyXHU3YjA1XHU3YjA3XHU3YjA5XHU3YjBjXHU3YjBkXHU3YjBlXHU3YjEwXHU3YjEyXHU3YjEzXHU3YjE2XHU3YjE3XHU3YjE4XHU3YjFhXHU3YjFjXHU3YjFkXHU3YjFmXHU3YjIxXHU3YjIyXHU3YjIzXHU3YjI3XHU3YjI5XHU3YjJkXHU2ZDZlXHU2ZGFhXHU3OThmXHU4OGIxXHU1ZjE3'@;
put 'XHU3NTJiXHU2MjlhXHU4Zjg1XHU0ZmVmXHU5MWRjXHU2NWE3XHU4MTJmXHU4MTUxXHU1ZTljXHU4MTUwXHU4ZDc0XHU1MjZmXHU4OTg2XHU4ZDRiXHU1OTBkXHU1MDg1XHU0ZWQ4XHU5NjFjXHU3MjM2XHU4MTc5XHU4ZDFmXHU1YmNjXHU4YmEzXHU5NjQ0XHU1OTg3XHU3ZjFhXHU1NDkwXHU1'@;
put 'Njc2XHU1NjBlXHU4YmU1XHU2NTM5XHU2OTgyXHU5NDk5XHU3NmQ2XHU2ZTg5XHU1ZTcyXHU3NTE4XHU2NzQ2XHU2N2QxXHU3YWZmXHU4MDlkXHU4ZDc2XHU2MTFmXHU3OWM2XHU2NTYyXHU4ZDYzXHU1MTg4XHU1MjFhXHU5NGEyXHU3ZjM4XHU4MDliXHU3ZWIyXHU1Yzk3XHU2ZTJmXHU2NzYw'@;
put 'XHU3YmQ5XHU3NjhiXHU5YWQ4XHU4MThmXHU3Zjk0XHU3Y2Q1XHU2NDFlXHU5NTUwXHU3YTNmXHU1NDRhXHU1NGU1XHU2YjRjXHU2NDAxXHU2MjA4XHU5ZTNkXHU4MGYzXHU3NTk5XHU1MjcyXHU5NzY5XHU4NDViXHU2ODNjXHU4NmU0XHU5NjAxXHU5Njk0XHU5NGVjXHU0ZTJhXHU1NDA0XHU3'@;
put 'ZWQ5XHU2ODM5XHU4ZGRmXHU4MDE1XHU2NmY0XHU1ZTlhXHU3ZmI5XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTg0XS5sZW5ndGg7KytnKTY1NTMzIT09X1sxODRdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTg0XVtnXV09NDcxMDQrZyx5WzQ3MTA0K2ddPV9bMTg0XVtnXSk7Zm9yKF9b'@;
put 'MTg1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3YjJmXHU3YjMwXHU3YjMyXHU3YjM0XHU3YjM1XHU3YjM2XHU3YjM3XHU3YjM5XHU3YjNiXHU3YjNkXHU3YjNmXHU3YjQwXHU3YjQxXHU3YjQyXHU3YjQzXHU3YjQ0XHU3YjQ2XHU3'@;
put 'YjQ4XHU3YjRhXHU3YjRkXHU3YjRlXHU3YjUzXHU3YjU1XHU3YjU3XHU3YjU5XHU3YjVjXHU3YjVlXHU3YjVmXHU3YjYxXHU3YjYzXHU3YjY0XHU3YjY1XHU3YjY2XHU3YjY3XHU3YjY4XHU3YjY5XHU3YjZhXHU3YjZiXHU3YjZjXHU3YjZkXHU3YjZmXHU3YjcwXHU3YjczXHU3Yjc0XHU3Yjc2'@;
put 'XHU3Yjc4XHU3YjdhXHU3YjdjXHU3YjdkXHU3YjdmXHU3YjgxXHU3YjgyXHU3YjgzXHU3Yjg0XHU3Yjg2XHU3Yjg3XHU3Yjg4XHU3Yjg5XHU3YjhhXHU3YjhiXHU3YjhjXHU3YjhlXHU3YjhmXHVmZmZkXHU3YjkxXHU3YjkyXHU3YjkzXHU3Yjk2XHU3Yjk4XHU3Yjk5XHU3YjlhXHU3YjliXHU3'@;
put 'YjllXHU3YjlmXHU3YmEwXHU3YmEzXHU3YmE0XHU3YmE1XHU3YmFlXHU3YmFmXHU3YmIwXHU3YmIyXHU3YmIzXHU3YmI1XHU3YmI2XHU3YmI3XHU3YmI5XHU3YmJhXHU3YmJiXHU3YmJjXHU3YmJkXHU3YmJlXHU3YmJmXHU3YmMwXHU3YmMyXHU3YmMzXHU3YmM0XHU1N2MyXHU4MDNmXHU2ODk3'@;
put 'XHU1ZGU1XHU2NTNiXHU1MjlmXHU2MDZkXHU5ZjlhXHU0ZjliXHU4ZWFjXHU1MTZjXHU1YmFiXHU1ZjEzXHU1ZGU5XHU2YzVlXHU2MmYxXHU4ZDIxXHU1MTcxXHU5NGE5XHU1MmZlXHU2YzlmXHU4MmRmXHU3MmQ3XHU1N2EyXHU2Nzg0XHU4ZDJkXHU1OTFmXHU4ZjljXHU4M2M3XHU1NDk1XHU3'@;
put 'YjhkXHU0ZjMwXHU2Y2JkXHU1YjY0XHU1OWQxXHU5ZjEzXHU1M2U0XHU4NmNhXHU5YWE4XHU4YzM3XHU4MGExXHU2NTQ1XHU5ODdlXHU1NmZhXHU5NmM3XHU1MjJlXHU3NGRjXHU1MjUwXHU1YmUxXHU2MzAyXHU4OTAyXHU0ZTU2XHU2MmQwXHU2MDJhXHU2OGZhXHU1MTczXHU1Yjk4XHU1MWEw'@;
put 'XHU4OWMyXHU3YmExXHU5OTg2XHU3ZjUwXHU2MGVmXHU3MDRjXHU4ZDJmXHU1MTQ5XHU1ZTdmXHU5MDFiXHU3NDcwXHU4OWM0XHU1NzJkXHU3ODQ1XHU1ZjUyXHU5ZjlmXHU5NWZhXHU4ZjY4XHU5YjNjXHU4YmUxXHU3Njc4XHU2ODQyXHU2N2RjXHU4ZGVhXHU4ZDM1XHU1MjNkXHU4ZjhhXHU2'@;
put 'ZWRhXHU2OGNkXHU5NTA1XHU5MGVkXHU1NmZkXHU2NzljXHU4OGY5XHU4ZmM3XHU1NGM4XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTg1XS5sZW5ndGg7KytnKTY1NTMzIT09X1sxODVdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTg1XVtnXV09NDczNjArZyx5WzQ3MzYwK2ddPV9bMTg1'@;
put 'XVtnXSk7Zm9yKF9bMTg2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3YmM1XHU3YmM4XHU3YmM5XHU3YmNhXHU3YmNiXHU3YmNkXHU3YmNlXHU3YmNmXHU3YmQwXHU3YmQyXHU3YmQ0XHU3YmQ1XHU3YmQ2XHU3YmQ3XHU3YmQ4XHU3'@;
put 'YmRiXHU3YmRjXHU3YmRlXHU3YmRmXHU3YmUwXHU3YmUyXHU3YmUzXHU3YmU0XHU3YmU3XHU3YmU4XHU3YmU5XHU3YmViXHU3YmVjXHU3YmVkXHU3YmVmXHU3YmYwXHU3YmYyXHU3YmYzXHU3YmY0XHU3YmY1XHU3YmY2XHU3YmY4XHU3YmY5XHU3YmZhXHU3YmZiXHU3YmZkXHU3YmZmXHU3YzAw'@;
put 'XHU3YzAxXHU3YzAyXHU3YzAzXHU3YzA0XHU3YzA1XHU3YzA2XHU3YzA4XHU3YzA5XHU3YzBhXHU3YzBkXHU3YzBlXHU3YzEwXHU3YzExXHU3YzEyXHU3YzEzXHU3YzE0XHU3YzE1XHU3YzE3XHU3YzE4XHU3YzE5XHVmZmZkXHU3YzFhXHU3YzFiXHU3YzFjXHU3YzFkXHU3YzFlXHU3YzIwXHU3'@;
put 'YzIxXHU3YzIyXHU3YzIzXHU3YzI0XHU3YzI1XHU3YzI4XHU3YzI5XHU3YzJiXHU3YzJjXHU3YzJkXHU3YzJlXHU3YzJmXHU3YzMwXHU3YzMxXHU3YzMyXHU3YzMzXHU3YzM0XHU3YzM1XHU3YzM2XHU3YzM3XHU3YzM5XHU3YzNhXHU3YzNiXHU3YzNjXHU3YzNkXHU3YzNlXHU3YzQyXHU5YWI4'@;
put 'XHU1YjY5XHU2ZDc3XHU2YzI2XHU0ZWE1XHU1YmIzXHU5YTg3XHU5MTYzXHU2MWE4XHU5MGFmXHU5N2U5XHU1NDJiXHU2ZGI1XHU1YmQyXHU1MWZkXHU1NThhXHU3ZjU1XHU3ZmYwXHU2NGJjXHU2MzRkXHU2NWYxXHU2MWJlXHU2MDhkXHU3MTBhXHU2YzU3XHU2YzQ5XHU1OTJmXHU2NzZkXHU4'@;
put 'MjJhXHU1OGQ1XHU1NjhlXHU4YzZhXHU2YmViXHU5MGRkXHU1OTdkXHU4MDE3XHU1M2Y3XHU2ZDY5XHU1NDc1XHU1NTlkXHU4Mzc3XHU4M2NmXHU2ODM4XHU3OWJlXHU1NDhjXHU0ZjU1XHU1NDA4XHU3NmQyXHU4Yzg5XHU5NjAyXHU2Y2IzXHU2ZGI4XHU4ZDZiXHU4OTEwXHU5ZTY0XHU4ZDNh'@;
put 'XHU1NjNmXHU5ZWQxXHU3NWQ1XHU1Zjg4XHU3MmUwXHU2MDY4XHU1NGZjXHU0ZWE4XHU2YTJhXHU4ODYxXHU2MDUyXHU4ZjcwXHU1NGM0XHU3MGQ4XHU4Njc5XHU5ZTNmXHU2ZDJhXHU1YjhmXHU1ZjE4XHU3ZWEyXHU1NTg5XHU0ZmFmXHU3MzM0XHU1NDNjXHU1MzlhXHU1MDE5XHU1NDBlXHU1'@;
put 'NDdjXHU0ZTRlXHU1ZmZkXHU3NDVhXHU1OGY2XHU4NDZiXHU4MGUxXHU4Nzc0XHU3MmQwXHU3Y2NhXHU2ZTU2XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTg2XS5sZW5ndGg7KytnKTY1NTMzIT09X1sxODZdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTg2XVtnXV09NDc2MTYrZyx5WzQ3'@;
put 'NjE2K2ddPV9bMTg2XVtnXSk7Zm9yKF9bMTg3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3YzQzXHU3YzQ0XHU3YzQ1XHU3YzQ2XHU3YzQ3XHU3YzQ4XHU3YzQ5XHU3YzRhXHU3YzRiXHU3YzRjXHU3YzRlXHU3YzRmXHU3YzUwXHU3'@;
put 'YzUxXHU3YzUyXHU3YzUzXHU3YzU0XHU3YzU1XHU3YzU2XHU3YzU3XHU3YzU4XHU3YzU5XHU3YzVhXHU3YzViXHU3YzVjXHU3YzVkXHU3YzVlXHU3YzVmXHU3YzYwXHU3YzYxXHU3YzYyXHU3YzYzXHU3YzY0XHU3YzY1XHU3YzY2XHU3YzY3XHU3YzY4XHU3YzY5XHU3YzZhXHU3YzZiXHU3YzZj'@;
put 'XHU3YzZkXHU3YzZlXHU3YzZmXHU3YzcwXHU3YzcxXHU3YzcyXHU3Yzc1XHU3Yzc2XHU3Yzc3XHU3Yzc4XHU3Yzc5XHU3YzdhXHU3YzdlXHU3YzdmXHU3YzgwXHU3YzgxXHU3YzgyXHU3YzgzXHU3Yzg0XHU3Yzg1XHU3Yzg2XHU3Yzg3XHVmZmZkXHU3Yzg4XHU3YzhhXHU3YzhiXHU3YzhjXHU3'@;
put 'YzhkXHU3YzhlXHU3YzhmXHU3YzkwXHU3YzkzXHU3Yzk0XHU3Yzk2XHU3Yzk5XHU3YzlhXHU3YzliXHU3Y2EwXHU3Y2ExXHU3Y2EzXHU3Y2E2XHU3Y2E3XHU3Y2E4XHU3Y2E5XHU3Y2FiXHU3Y2FjXHU3Y2FkXHU3Y2FmXHU3Y2IwXHU3Y2I0XHU3Y2I1XHU3Y2I2XHU3Y2I3XHU3Y2I4XHU3Y2Jh'@;
put 'XHU3Y2JiXHU1ZjI3XHU4NjRlXHU1NTJjXHU2MmE0XHU0ZTkyXHU2Y2FhXHU2MjM3XHU4MmIxXHU1NGQ3XHU1MzRlXHU3MzNlXHU2ZWQxXHU3NTNiXHU1MjEyXHU1MzE2XHU4YmRkXHU2OWQwXHU1ZjhhXHU2MDAwXHU2ZGVlXHU1NzRmXHU2YjIyXHU3M2FmXHU2ODUzXHU4ZmQ4XHU3ZjEzXHU2'@;
put 'MzYyXHU2MGEzXHU1NTI0XHU3NWVhXHU4YzYyXHU3MTE1XHU2ZGEzXHU1YmE2XHU1ZTdiXHU4MzUyXHU2MTRjXHU5ZWM0XHU3OGZhXHU4NzU3XHU3YzI3XHU3Njg3XHU1MWYwXHU2MGY2XHU3MTRjXHU2NjQzXHU1ZTRjXHU2MDRkXHU4YzBlXHU3MDcwXHU2MzI1XHU4Zjg5XHU1ZmJkXHU2MDYy'@;
put 'XHU4NmQ0XHU1NmRlXHU2YmMxXHU2MDk0XHU2MTY3XHU1MzQ5XHU2MGUwXHU2NjY2XHU4ZDNmXHU3OWZkXHU0ZjFhXHU3MGU5XHU2YzQ3XHU4YmIzXHU4YmYyXHU3ZWQ4XHU4MzY0XHU2NjBmXHU1YTVhXHU5YjQyXHU2ZDUxXHU2ZGY3XHU4YzQxXHU2ZDNiXHU0ZjE5XHU3MDZiXHU4M2I3XHU2'@;
put 'MjE2XHU2MGQxXHU5NzBkXHU4ZDI3XHU3OTc4XHU1MWZiXHU1NzNlXHU1N2ZhXHU2NzNhXHU3NTc4XHU3YTNkXHU3OWVmXHU3Yjk1XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTg3XS5sZW5ndGg7KytnKTY1NTMzIT09X1sxODddW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTg3XVtnXV09'@;
put 'NDc4NzIrZyx5WzQ3ODcyK2ddPV9bMTg3XVtnXSk7Zm9yKF9bMTg4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3Y2JmXHU3Y2MwXHU3Y2MyXHU3Y2MzXHU3Y2M0XHU3Y2M2XHU3Y2M5XHU3Y2NiXHU3Y2NlXHU3Y2NmXHU3Y2QwXHU3'@;
put 'Y2QxXHU3Y2QyXHU3Y2QzXHU3Y2Q0XHU3Y2Q4XHU3Y2RhXHU3Y2RiXHU3Y2RkXHU3Y2RlXHU3Y2UxXHU3Y2UyXHU3Y2UzXHU3Y2U0XHU3Y2U1XHU3Y2U2XHU3Y2U3XHU3Y2U5XHU3Y2VhXHU3Y2ViXHU3Y2VjXHU3Y2VkXHU3Y2VlXHU3Y2YwXHU3Y2YxXHU3Y2YyXHU3Y2YzXHU3Y2Y0XHU3Y2Y1'@;
put 'XHU3Y2Y2XHU3Y2Y3XHU3Y2Y5XHU3Y2ZhXHU3Y2ZjXHU3Y2ZkXHU3Y2ZlXHU3Y2ZmXHU3ZDAwXHU3ZDAxXHU3ZDAyXHU3ZDAzXHU3ZDA0XHU3ZDA1XHU3ZDA2XHU3ZDA3XHU3ZDA4XHU3ZDA5XHU3ZDBiXHU3ZDBjXHU3ZDBkXHU3ZDBlXHU3ZDBmXHU3ZDEwXHVmZmZkXHU3ZDExXHU3ZDEyXHU3'@;
put 'ZDEzXHU3ZDE0XHU3ZDE1XHU3ZDE2XHU3ZDE3XHU3ZDE4XHU3ZDE5XHU3ZDFhXHU3ZDFiXHU3ZDFjXHU3ZDFkXHU3ZDFlXHU3ZDFmXHU3ZDIxXHU3ZDIzXHU3ZDI0XHU3ZDI1XHU3ZDI2XHU3ZDI4XHU3ZDI5XHU3ZDJhXHU3ZDJjXHU3ZDJkXHU3ZDJlXHU3ZDMwXHU3ZDMxXHU3ZDMyXHU3ZDMz'@;
put 'XHU3ZDM0XHU3ZDM1XHU3ZDM2XHU4MDhjXHU5OTY1XHU4ZmY5XHU2ZmMwXHU4YmE1XHU5ZTIxXHU1OWVjXHU3ZWU5XHU3ZjA5XHU1NDA5XHU2NzgxXHU2OGQ4XHU4ZjkxXHU3YzRkXHU5NmM2XHU1M2NhXHU2MDI1XHU3NWJlXHU2YzcyXHU1MzczXHU1YWM5XHU3ZWE3XHU2MzI0XHU1MWUwXHU4'@;
put 'MTBhXHU1ZGYxXHU4NGRmXHU2MjgwXHU1MTgwXHU1YjYzXHU0ZjBlXHU3OTZkXHU1MjQyXHU2MGI4XHU2ZDRlXHU1YmM0XHU1YmMyXHU4YmExXHU4YmIwXHU2NWUyXHU1ZmNjXHU5NjQ1XHU1OTkzXHU3ZWU3XHU3ZWFhXHU1NjA5XHU2N2I3XHU1OTM5XHU0ZjczXHU1YmI2XHU1MmEwXHU4MzVh'@;
put 'XHU5ODhhXHU4ZDNlXHU3NTMyXHU5NGJlXHU1MDQ3XHU3YTNjXHU0ZWY3XHU2N2I2XHU5YTdlXHU1YWMxXHU2YjdjXHU3NmQxXHU1NzVhXHU1YzE2XHU3YjNhXHU5NWY0XHU3MTRlXHU1MTdjXHU4MGE5XHU4MjcwXHU1OTc4XHU3ZjA0XHU4MzI3XHU2OGMwXHU2N2VjXHU3OGIxXHU3ODc3XHU2'@;
put 'MmUzXHU2MzYxXHU3YjgwXHU0ZmVkXHU1MjZhXHU1MWNmXHU4MzUwXHU2OWRiXHU5Mjc0XHU4ZGY1XHU4ZDMxXHU4OWMxXHU5NTJlXHU3YmFkXHU0ZWY2XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTg4XS5sZW5ndGg7KytnKTY1NTMzIT09X1sxODhdW2ddLmNoYXJDb2RlQXQoMCkmJihJ'@;
put 'W19bMTg4XVtnXV09NDgxMjgrZyx5WzQ4MTI4K2ddPV9bMTg4XVtnXSk7Zm9yKF9bMTg5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3ZDM3XHU3ZDM4XHU3ZDM5XHU3ZDNhXHU3ZDNiXHU3ZDNjXHU3ZDNkXHU3ZDNlXHU3ZDNmXHU3'@;
put 'ZDQwXHU3ZDQxXHU3ZDQyXHU3ZDQzXHU3ZDQ0XHU3ZDQ1XHU3ZDQ2XHU3ZDQ3XHU3ZDQ4XHU3ZDQ5XHU3ZDRhXHU3ZDRiXHU3ZDRjXHU3ZDRkXHU3ZDRlXHU3ZDRmXHU3ZDUwXHU3ZDUxXHU3ZDUyXHU3ZDUzXHU3ZDU0XHU3ZDU1XHU3ZDU2XHU3ZDU3XHU3ZDU4XHU3ZDU5XHU3ZDVhXHU3ZDVi'@;
put 'XHU3ZDVjXHU3ZDVkXHU3ZDVlXHU3ZDVmXHU3ZDYwXHU3ZDYxXHU3ZDYyXHU3ZDYzXHU3ZDY0XHU3ZDY1XHU3ZDY2XHU3ZDY3XHU3ZDY4XHU3ZDY5XHU3ZDZhXHU3ZDZiXHU3ZDZjXHU3ZDZkXHU3ZDZmXHU3ZDcwXHU3ZDcxXHU3ZDcyXHU3ZDczXHU3ZDc0XHU3ZDc1XHU3ZDc2XHVmZmZkXHU3'@;
put 'ZDc4XHU3ZDc5XHU3ZDdhXHU3ZDdiXHU3ZDdjXHU3ZDdkXHU3ZDdlXHU3ZDdmXHU3ZDgwXHU3ZDgxXHU3ZDgyXHU3ZDgzXHU3ZDg0XHU3ZDg1XHU3ZDg2XHU3ZDg3XHU3ZDg4XHU3ZDg5XHU3ZDhhXHU3ZDhiXHU3ZDhjXHU3ZDhkXHU3ZDhlXHU3ZDhmXHU3ZDkwXHU3ZDkxXHU3ZDkyXHU3ZDkz'@;
put 'XHU3ZDk0XHU3ZDk1XHU3ZDk2XHU3ZDk3XHU3ZDk4XHU1MDY1XHU4MjMwXHU1MjUxXHU5OTZmXHU2ZTEwXHU2ZTg1XHU2ZGE3XHU1ZWZhXHU1MGY1XHU1OWRjXHU1YzA2XHU2ZDQ2XHU2YzVmXHU3NTg2XHU4NDhiXHU2ODY4XHU1OTU2XHU4YmIyXHU1MzIwXHU5MTcxXHU5NjRkXHU4NTQ5XHU2'@;
put 'OTEyXHU3OTAxXHU3MTI2XHU4MGY2XHU0ZWE0XHU5MGNhXHU2ZDQ3XHU5YTg0XHU1YTA3XHU1NmJjXHU2NDA1XHU5NGYwXHU3N2ViXHU0ZmE1XHU4MTFhXHU3MmUxXHU4OWQyXHU5OTdhXHU3ZjM0XHU3ZWRlXHU1MjdmXHU2NTU5XHU5MTc1XHU4ZjdmXHU4ZjgzXHU1M2ViXHU3YTk2XHU2M2Vk'@;
put 'XHU2M2E1XHU3Njg2XHU3OWY4XHU4ODU3XHU5NjM2XHU2MjJhXHU1MmFiXHU4MjgyXHU2ODU0XHU2NzcwXHU2Mzc3XHU3NzZiXHU3YWVkXHU2ZDAxXHU3ZWQzXHU4OWUzXHU1OWQwXHU2MjEyXHU4NWM5XHU4MmE1XHU3NTRjXHU1MDFmXHU0ZWNiXHU3NWE1XHU4YmViXHU1YzRhXHU1ZGZlXHU3'@;
put 'YjRiXHU2NWE0XHU5MWQxXHU0ZWNhXHU2ZDI1XHU4OTVmXHU3ZDI3XHU5NTI2XHU0ZWM1XHU4YzI4XHU4ZmRiXHU5NzczXHU2NjRiXHU3OTgxXHU4ZmQxXHU3MGVjXHU2ZDc4XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTg5XS5sZW5ndGg7KytnKTY1NTMzIT09X1sxODldW2ddLmNoYXJD'@;
put 'b2RlQXQoMCkmJihJW19bMTg5XVtnXV09NDgzODQrZyx5WzQ4Mzg0K2ddPV9bMTg5XVtnXSk7Zm9yKF9bMTkwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3ZDk5XHU3ZDlhXHU3ZDliXHU3ZDljXHU3ZDlkXHU3ZDllXHU3ZDlmXHU3'@;
put 'ZGEwXHU3ZGExXHU3ZGEyXHU3ZGEzXHU3ZGE0XHU3ZGE1XHU3ZGE3XHU3ZGE4XHU3ZGE5XHU3ZGFhXHU3ZGFiXHU3ZGFjXHU3ZGFkXHU3ZGFmXHU3ZGIwXHU3ZGIxXHU3ZGIyXHU3ZGIzXHU3ZGI0XHU3ZGI1XHU3ZGI2XHU3ZGI3XHU3ZGI4XHU3ZGI5XHU3ZGJhXHU3ZGJiXHU3ZGJjXHU3ZGJk'@;
put 'XHU3ZGJlXHU3ZGJmXHU3ZGMwXHU3ZGMxXHU3ZGMyXHU3ZGMzXHU3ZGM0XHU3ZGM1XHU3ZGM2XHU3ZGM3XHU3ZGM4XHU3ZGM5XHU3ZGNhXHU3ZGNiXHU3ZGNjXHU3ZGNkXHU3ZGNlXHU3ZGNmXHU3ZGQwXHU3ZGQxXHU3ZGQyXHU3ZGQzXHU3ZGQ0XHU3ZGQ1XHU3ZGQ2XHU3ZGQ3XHU3ZGQ4XHU3'@;
put 'ZGQ5XHVmZmZkXHU3ZGRhXHU3ZGRiXHU3ZGRjXHU3ZGRkXHU3ZGRlXHU3ZGRmXHU3ZGUwXHU3ZGUxXHU3ZGUyXHU3ZGUzXHU3ZGU0XHU3ZGU1XHU3ZGU2XHU3ZGU3XHU3ZGU4XHU3ZGU5XHU3ZGVhXHU3ZGViXHU3ZGVjXHU3ZGVkXHU3ZGVlXHU3ZGVmXHU3ZGYwXHU3ZGYxXHU3ZGYyXHU3ZGYz'@;
put 'XHU3ZGY0XHU3ZGY1XHU3ZGY2XHU3ZGY3XHU3ZGY4XHU3ZGY5XHU3ZGZhXHU1YzNkXHU1MmIyXHU4MzQ2XHU1MTYyXHU4MzBlXHU3NzViXHU2Njc2XHU5Y2I4XHU0ZWFjXHU2MGNhXHU3Y2JlXHU3Y2IzXHU3ZWNmXHU0ZTk1XHU4YjY2XHU2NjZmXHU5ODg4XHU5NzU5XHU1ODgzXHU2NTZjXHU5'@;
put 'NTVjXHU1Zjg0XHU3NWM5XHU5NzU2XHU3YWRmXHU3YWRlXHU1MWMwXHU3MGFmXHU3YTk4XHU2M2VhXHU3YTc2XHU3ZWEwXHU3Mzk2XHU5N2VkXHU0ZTQ1XHU3MDc4XHU0ZTVkXHU5MTUyXHU1M2E5XHU2NTUxXHU2NWU3XHU4MWZjXHU4MjA1XHU1NDhlXHU1YzMxXHU3NTlhXHU5N2EwXHU2MmQ4'@;
put 'XHU3MmQ5XHU3NWJkXHU1YzQ1XHU5YTc5XHU4M2NhXHU1YzQwXHU1NDgwXHU3N2U5XHU0ZTNlXHU2Y2FlXHU4MDVhXHU2MmQyXHU2MzZlXHU1ZGU4XHU1MTc3XHU4ZGRkXHU4ZTFlXHU5NTJmXHU0ZmYxXHU1M2U1XHU2MGU3XHU3MGFjXHU1MjY3XHU2MzUwXHU5ZTQzXHU1YTFmXHU1MDI2XHU3'@;
put 'NzM3XHU1Mzc3XHU3ZWUyXHU2NDg1XHU2NTJiXHU2Mjg5XHU2Mzk4XHU1MDE0XHU3MjM1XHU4OWM5XHU1MWIzXHU4YmMwXHU3ZWRkXHU1NzQ3XHU4M2NjXHU5NGE3XHU1MTliXHU1NDFiXHU1Y2ZiXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTkwXS5sZW5ndGg7KytnKTY1NTMzIT09X1sx'@;
put 'OTBdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTkwXVtnXV09NDg2NDArZyx5WzQ4NjQwK2ddPV9bMTkwXVtnXSk7Zm9yKF9bMTkxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3ZGZiXHU3ZGZjXHU3ZGZkXHU3ZGZlXHU3ZGZmXHU3'@;
put 'ZTAwXHU3ZTAxXHU3ZTAyXHU3ZTAzXHU3ZTA0XHU3ZTA1XHU3ZTA2XHU3ZTA3XHU3ZTA4XHU3ZTA5XHU3ZTBhXHU3ZTBiXHU3ZTBjXHU3ZTBkXHU3ZTBlXHU3ZTBmXHU3ZTEwXHU3ZTExXHU3ZTEyXHU3ZTEzXHU3ZTE0XHU3ZTE1XHU3ZTE2XHU3ZTE3XHU3ZTE4XHU3ZTE5XHU3ZTFhXHU3ZTFi'@;
put 'XHU3ZTFjXHU3ZTFkXHU3ZTFlXHU3ZTFmXHU3ZTIwXHU3ZTIxXHU3ZTIyXHU3ZTIzXHU3ZTI0XHU3ZTI1XHU3ZTI2XHU3ZTI3XHU3ZTI4XHU3ZTI5XHU3ZTJhXHU3ZTJiXHU3ZTJjXHU3ZTJkXHU3ZTJlXHU3ZTJmXHU3ZTMwXHU3ZTMxXHU3ZTMyXHU3ZTMzXHU3ZTM0XHU3ZTM1XHU3ZTM2XHU3'@;
put 'ZTM3XHU3ZTM4XHU3ZTM5XHVmZmZkXHU3ZTNhXHU3ZTNjXHU3ZTNkXHU3ZTNlXHU3ZTNmXHU3ZTQwXHU3ZTQyXHU3ZTQzXHU3ZTQ0XHU3ZTQ1XHU3ZTQ2XHU3ZTQ4XHU3ZTQ5XHU3ZTRhXHU3ZTRiXHU3ZTRjXHU3ZTRkXHU3ZTRlXHU3ZTRmXHU3ZTUwXHU3ZTUxXHU3ZTUyXHU3ZTUzXHU3ZTU0'@;
put 'XHU3ZTU1XHU3ZTU2XHU3ZTU3XHU3ZTU4XHU3ZTU5XHU3ZTVhXHU3ZTViXHU3ZTVjXHU3ZTVkXHU0ZmNhXHU3YWUzXHU2ZDVhXHU5MGUxXHU5YThmXHU1NTgwXHU1NDk2XHU1MzYxXHU1NGFmXHU1ZjAwXHU2M2U5XHU2OTc3XHU1MWVmXHU2MTY4XHU1MjBhXHU1ODJhXHU1MmQ4XHU1NzRlXHU3'@;
put 'ODBkXHU3NzBiXHU1ZWI3XHU2MTc3XHU3Y2UwXHU2MjViXHU2Mjk3XHU0ZWEyXHU3MDk1XHU4MDAzXHU2MmY3XHU3MGU0XHU5NzYwXHU1Nzc3XHU4MmRiXHU2N2VmXHU2OGY1XHU3OGQ1XHU5ODk3XHU3OWQxXHU1OGYzXHU1NGIzXHU1M2VmXHU2ZTM0XHU1MTRiXHU1MjNiXHU1YmEyXHU4YmZl'@;
put 'XHU4MGFmXHU1NTQzXHU1N2E2XHU2MDczXHU1NzUxXHU1NDJkXHU3YTdhXHU2MDUwXHU1YjU0XHU2M2E3XHU2MmEwXHU1M2UzXHU2MjYzXHU1YmM3XHU2N2FmXHU1NGVkXHU3YTlmXHU4MmU2XHU5MTc3XHU1ZTkzXHU4OGU0XHU1OTM4XHU1N2FlXHU2MzBlXHU4ZGU4XHU4MGVmXHU1NzU3XHU3'@;
put 'Yjc3XHU0ZmE5XHU1ZmViXHU1YmJkXHU2YjNlXHU1MzIxXHU3YjUwXHU3MmMyXHU2ODQ2XHU3N2ZmXHU3NzM2XHU2NWY3XHU1MWI1XHU0ZThmXHU3NmQ0XHU1Y2JmXHU3YWE1XHU4NDc1XHU1OTRlXHU5YjQxXHU1MDgwXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTkxXS5sZW5ndGg7Kytn'@;
put 'KTY1NTMzIT09X1sxOTFdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTkxXVtnXV09NDg4OTYrZyx5WzQ4ODk2K2ddPV9bMTkxXVtnXSk7Zm9yKF9bMTkyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3ZTVlXHU3ZTVmXHU3ZTYwXHU3'@;
put 'ZTYxXHU3ZTYyXHU3ZTYzXHU3ZTY0XHU3ZTY1XHU3ZTY2XHU3ZTY3XHU3ZTY4XHU3ZTY5XHU3ZTZhXHU3ZTZiXHU3ZTZjXHU3ZTZkXHU3ZTZlXHU3ZTZmXHU3ZTcwXHU3ZTcxXHU3ZTcyXHU3ZTczXHU3ZTc0XHU3ZTc1XHU3ZTc2XHU3ZTc3XHU3ZTc4XHU3ZTc5XHU3ZTdhXHU3ZTdiXHU3ZTdj'@;
put 'XHU3ZTdkXHU3ZTdlXHU3ZTdmXHU3ZTgwXHU3ZTgxXHU3ZTgzXHU3ZTg0XHU3ZTg1XHU3ZTg2XHU3ZTg3XHU3ZTg4XHU3ZTg5XHU3ZThhXHU3ZThiXHU3ZThjXHU3ZThkXHU3ZThlXHU3ZThmXHU3ZTkwXHU3ZTkxXHU3ZTkyXHU3ZTkzXHU3ZTk0XHU3ZTk1XHU3ZTk2XHU3ZTk3XHU3ZTk4XHU3'@;
put 'ZTk5XHU3ZTlhXHU3ZTljXHU3ZTlkXHU3ZTllXHVmZmZkXHU3ZWFlXHU3ZWI0XHU3ZWJiXHU3ZWJjXHU3ZWQ2XHU3ZWU0XHU3ZWVjXHU3ZWY5XHU3ZjBhXHU3ZjEwXHU3ZjFlXHU3ZjM3XHU3ZjM5XHU3ZjNiXHU3ZjNjXHU3ZjNkXHU3ZjNlXHU3ZjNmXHU3ZjQwXHU3ZjQxXHU3ZjQzXHU3ZjQ2'@;
put 'XHU3ZjQ3XHU3ZjQ4XHU3ZjQ5XHU3ZjRhXHU3ZjRiXHU3ZjRjXHU3ZjRkXHU3ZjRlXHU3ZjRmXHU3ZjUyXHU3ZjUzXHU5OTg4XHU2MTI3XHU2ZTgzXHU1NzY0XHU2NjA2XHU2MzQ2XHU1NmYwXHU2MmVjXHU2MjY5XHU1ZWQzXHU5NjE0XHU1NzgzXHU2MmM5XHU1NTg3XHU4NzIxXHU4MTRhXHU4'@;
put 'ZmEzXHU1NTY2XHU4M2IxXHU2NzY1XHU4ZDU2XHU4NGRkXHU1YTZhXHU2ODBmXHU2MmU2XHU3YmVlXHU5NjExXHU1MTcwXHU2ZjljXHU4YzMwXHU2M2ZkXHU4OWM4XHU2MWQyXHU3ZjA2XHU3MGMyXHU2ZWU1XHU3NDA1XHU2OTk0XHU3MmZjXHU1ZWNhXHU5MGNlXHU2NzE3XHU2ZDZhXHU2MzVl'@;
put 'XHU1MmIzXHU3MjYyXHU4MDAxXHU0ZjZjXHU1OWU1XHU5MTZhXHU3MGQ5XHU2ZDlkXHU1MmQyXHU0ZTUwXHU5NmY3XHU5NTZkXHU4NTdlXHU3OGNhXHU3ZDJmXHU1MTIxXHU1NzkyXHU2NGMyXHU4MDhiXHU3YzdiXHU2Y2VhXHU2OGYxXHU2OTVlXHU1MWI3XHU1Mzk4XHU2OGE4XHU3MjgxXHU5'@;
put 'ZWNlXHU3YmYxXHU3MmY4XHU3OWJiXHU2ZjEzXHU3NDA2XHU2NzRlXHU5MWNjXHU5Y2E0XHU3OTNjXHU4Mzg5XHU4MzU0XHU1NDBmXHU2ODE3XHU0ZTNkXHU1Mzg5XHU1MmIxXHU3ODNlXHU1Mzg2XHU1MjI5XHU1MDg4XHU0ZjhiXHU0ZmQwXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTky'@;
put 'XS5sZW5ndGg7KytnKTY1NTMzIT09X1sxOTJdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTkyXVtnXV09NDkxNTIrZyx5WzQ5MTUyK2ddPV9bMTkyXVtnXSk7Zm9yKF9bMTkzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3ZjU2XHU3'@;
put 'ZjU5XHU3ZjViXHU3ZjVjXHU3ZjVkXHU3ZjVlXHU3ZjYwXHU3ZjYzXHU3ZjY0XHU3ZjY1XHU3ZjY2XHU3ZjY3XHU3ZjZiXHU3ZjZjXHU3ZjZkXHU3ZjZmXHU3ZjcwXHU3ZjczXHU3Zjc1XHU3Zjc2XHU3Zjc3XHU3Zjc4XHU3ZjdhXHU3ZjdiXHU3ZjdjXHU3ZjdkXHU3ZjdmXHU3ZjgwXHU3Zjgy'@;
put 'XHU3ZjgzXHU3Zjg0XHU3Zjg1XHU3Zjg2XHU3Zjg3XHU3Zjg4XHU3Zjg5XHU3ZjhiXHU3ZjhkXHU3ZjhmXHU3ZjkwXHU3ZjkxXHU3ZjkyXHU3ZjkzXHU3Zjk1XHU3Zjk2XHU3Zjk3XHU3Zjk4XHU3Zjk5XHU3ZjliXHU3ZjljXHU3ZmEwXHU3ZmEyXHU3ZmEzXHU3ZmE1XHU3ZmE2XHU3ZmE4XHU3'@;
put 'ZmE5XHU3ZmFhXHU3ZmFiXHU3ZmFjXHU3ZmFkXHU3ZmFlXHU3ZmIxXHVmZmZkXHU3ZmIzXHU3ZmI0XHU3ZmI1XHU3ZmI2XHU3ZmI3XHU3ZmJhXHU3ZmJiXHU3ZmJlXHU3ZmMwXHU3ZmMyXHU3ZmMzXHU3ZmM0XHU3ZmM2XHU3ZmM3XHU3ZmM4XHU3ZmM5XHU3ZmNiXHU3ZmNkXHU3ZmNmXHU3ZmQw'@;
put 'XHU3ZmQxXHU3ZmQyXHU3ZmQzXHU3ZmQ2XHU3ZmQ3XHU3ZmQ5XHU3ZmRhXHU3ZmRiXHU3ZmRjXHU3ZmRkXHU3ZmRlXHU3ZmUyXHU3ZmUzXHU3NWUyXHU3YWNiXHU3YzkyXHU2Y2E1XHU5NmI2XHU1MjliXHU3NDgzXHU1NGU5XHU0ZmU5XHU4MDU0XHU4M2IyXHU4ZmRlXHU5NTcwXHU1ZWM5XHU2'@;
put 'MDFjXHU2ZDlmXHU1ZTE4XHU2NTViXHU4MTM4XHU5NGZlXHU2MDRiXHU3MGJjXHU3ZWMzXHU3Y2FlXHU1MWM5XHU2ODgxXHU3Y2IxXHU4MjZmXHU0ZTI0XHU4Zjg2XHU5MWNmXHU2NjdlXHU0ZWFlXHU4YzA1XHU2NGE5XHU4MDRhXHU1MGRhXHU3NTk3XHU3MWNlXHU1YmU1XHU4ZmJkXHU2ZjY2'@;
put 'XHU0ZTg2XHU2NDgyXHU5NTYzXHU1ZWQ2XHU2NTk5XHU1MjE3XHU4OGMyXHU3MGM4XHU1MmEzXHU3MzBlXHU3NDMzXHU2Nzk3XHU3OGY3XHU5NzE2XHU0ZTM0XHU5MGJiXHU5Y2RlXHU2ZGNiXHU1MWRiXHU4ZDQxXHU1NDFkXHU2MmNlXHU3M2IyXHU4M2YxXHU5NmY2XHU5Zjg0XHU5NGMzXHU0'@;
put 'ZjM2XHU3ZjlhXHU1MWNjXHU3MDc1XHU5Njc1XHU1Y2FkXHU5ODg2XHU1M2U2XHU0ZWU0XHU2ZTljXHU3NDA5XHU2OWI0XHU3ODZiXHU5OThmXHU3NTU5XHU1MjE4XHU3NjI0XHU2ZDQxXHU2N2YzXHU1MTZkXHU5Zjk5XHU4MDRiXHU1NDk5XHU3YjNjXHU3YWJmXHVmZmZkIi5zcGxpdCgiIiks'@;
put 'Zz0wO2chPV9bMTkzXS5sZW5ndGg7KytnKTY1NTMzIT09X1sxOTNdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTkzXVtnXV09NDk0MDgrZyx5WzQ5NDA4K2ddPV9bMTkzXVtnXSk7Zm9yKF9bMTk0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHU3ZmU0XHU3ZmU3XHU3ZmU4XHU3ZmVhXHU3ZmViXHU3ZmVjXHU3ZmVkXHU3ZmVmXHU3ZmYyXHU3ZmY0XHU3ZmY1XHU3ZmY2XHU3ZmY3XHU3ZmY4XHU3ZmY5XHU3ZmZhXHU3ZmZkXHU3ZmZlXHU3ZmZmXHU4MDAyXHU4MDA3XHU4MDA4XHU4MDA5XHU4MDBhXHU4MDBlXHU4MDBmXHU4MDEx'@;
put 'XHU4MDEzXHU4MDFhXHU4MDFiXHU4MDFkXHU4MDFlXHU4MDFmXHU4MDIxXHU4MDIzXHU4MDI0XHU4MDJiXHU4MDJjXHU4MDJkXHU4MDJlXHU4MDJmXHU4MDMwXHU4MDMyXHU4MDM0XHU4MDM5XHU4MDNhXHU4MDNjXHU4MDNlXHU4MDQwXHU4MDQxXHU4MDQ0XHU4MDQ1XHU4MDQ3XHU4MDQ4XHU4'@;
put 'MDQ5XHU4MDRlXHU4MDRmXHU4MDUwXHU4MDUxXHU4MDUzXHU4MDU1XHU4MDU2XHU4MDU3XHVmZmZkXHU4MDU5XHU4MDViXHU4MDVjXHU4MDVkXHU4MDVlXHU4MDVmXHU4MDYwXHU4MDYxXHU4MDYyXHU4MDYzXHU4MDY0XHU4MDY1XHU4MDY2XHU4MDY3XHU4MDY4XHU4MDZiXHU4MDZjXHU4MDZk'@;
put 'XHU4MDZlXHU4MDZmXHU4MDcwXHU4MDcyXHU4MDczXHU4MDc0XHU4MDc1XHU4MDc2XHU4MDc3XHU4MDc4XHU4MDc5XHU4MDdhXHU4MDdiXHU4MDdjXHU4MDdkXHU5Njg2XHU1Nzg0XHU2MmUyXHU5NjQ3XHU2OTdjXHU1YTA0XHU2NDAyXHU3YmQzXHU2ZjBmXHU5NjRiXHU4MmE2XHU1MzYyXHU5'@;
put 'ODg1XHU1ZTkwXHU3MDg5XHU2M2IzXHU1MzY0XHU4NjRmXHU5YzgxXHU5ZTkzXHU3ODhjXHU5NzMyXHU4ZGVmXHU4ZDQyXHU5ZTdmXHU2ZjVlXHU3OTg0XHU1ZjU1XHU5NjQ2XHU2MjJlXHU5YTc0XHU1NDE1XHU5NGRkXHU0ZmEzXHU2NWM1XHU1YzY1XHU1YzYxXHU3ZjE1XHU4NjUxXHU2YzJm'@;
put 'XHU1ZjhiXHU3Mzg3XHU2ZWU0XHU3ZWZmXHU1Y2U2XHU2MzFiXHU1YjZhXHU2ZWU2XHU1Mzc1XHU0ZTcxXHU2M2EwXHU3NTY1XHU2MmExXHU4ZjZlXHU0ZjI2XHU0ZWQxXHU2Y2E2XHU3ZWI2XHU4YmJhXHU4NDFkXHU4N2JhXHU3ZjU3XHU5MDNiXHU5NTIzXHU3YmE5XHU5YWExXHU4OGY4XHU4'@;
put 'NDNkXHU2ZDFiXHU5YTg2XHU3ZWRjXHU1OTg4XHU5ZWJiXHU3MzliXHU3ODAxXHU4NjgyXHU5YTZjXHU5YTgyXHU1NjFiXHU1NDE3XHU1N2NiXHU0ZTcwXHU5ZWE2XHU1MzU2XHU4ZmM4XHU4MTA5XHU3NzkyXHU5OTkyXHU4NmVlXHU2ZWUxXHU4NTEzXHU2NmZjXHU2MTYyXHU2ZjJiXHVmZmZk'@;
put 'Ii5zcGxpdCgiIiksZz0wO2chPV9bMTk0XS5sZW5ndGg7KytnKTY1NTMzIT09X1sxOTRdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTk0XVtnXV09NDk2NjQrZyx5WzQ5NjY0K2ddPV9bMTk0XVtnXSk7Zm9yKF9bMTk1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHU4MDdlXHU4MDgxXHU4MDgyXHU4MDg1XHU4MDg4XHU4MDhhXHU4MDhkXHU4MDhlXHU4MDhmXHU4MDkwXHU4MDkxXHU4MDkyXHU4MDk0XHU4MDk1XHU4MDk3XHU4MDk5XHU4MDllXHU4MGEzXHU4MGE2XHU4MGE3XHU4MGE4XHU4MGFjXHU4MGIwXHU4MGIzXHU4MGI1'@;
put 'XHU4MGI2XHU4MGI4XHU4MGI5XHU4MGJiXHU4MGM1XHU4MGM3XHU4MGM4XHU4MGM5XHU4MGNhXHU4MGNiXHU4MGNmXHU4MGQwXHU4MGQxXHU4MGQyXHU4MGQzXHU4MGQ0XHU4MGQ1XHU4MGQ4XHU4MGRmXHU4MGUwXHU4MGUyXHU4MGUzXHU4MGU2XHU4MGVlXHU4MGY1XHU4MGY3XHU4MGY5XHU4'@;
put 'MGZiXHU4MGZlXHU4MGZmXHU4MTAwXHU4MTAxXHU4MTAzXHU4MTA0XHU4MTA1XHU4MTA3XHU4MTA4XHU4MTBiXHVmZmZkXHU4MTBjXHU4MTE1XHU4MTE3XHU4MTE5XHU4MTFiXHU4MTFjXHU4MTFkXHU4MTFmXHU4MTIwXHU4MTIxXHU4MTIyXHU4MTIzXHU4MTI0XHU4MTI1XHU4MTI2XHU4MTI3'@;
put 'XHU4MTI4XHU4MTI5XHU4MTJhXHU4MTJiXHU4MTJkXHU4MTJlXHU4MTMwXHU4MTMzXHU4MTM0XHU4MTM1XHU4MTM3XHU4MTM5XHU4MTNhXHU4MTNiXHU4MTNjXHU4MTNkXHU4MTNmXHU4YzI5XHU4MjkyXHU4MzJiXHU3NmYyXHU2YzEzXHU1ZmQ5XHU4M2JkXHU3MzJiXHU4MzA1XHU5NTFhXHU2'@;
put 'YmRiXHU3N2RiXHU5NGM2XHU1MzZmXHU4MzAyXHU1MTkyXHU1ZTNkXHU4YzhjXHU4ZDM4XHU0ZTQ4XHU3M2FiXHU2NzlhXHU2ODg1XHU5MTc2XHU5NzA5XHU3MTY0XHU2Y2ExXHU3NzA5XHU1YTkyXHU5NTQxXHU2YmNmXHU3ZjhlXHU2NjI3XHU1YmQwXHU1OWI5XHU1YTlhXHU5NWU4XHU5NWY3'@;
put 'XHU0ZWVjXHU4NDBjXHU4NDk5XHU2YWFjXHU3NmRmXHU5NTMwXHU3MzFiXHU2OGE2XHU1YjVmXHU3NzJmXHU5MTlhXHU5NzYxXHU3Y2RjXHU4ZmY3XHU4YzFjXHU1ZjI1XHU3YzczXHU3OWQ4XHU4OWM1XHU2Y2NjXHU4NzFjXHU1YmM2XHU1ZTQyXHU2OGM5XHU3NzIwXHU3ZWY1XHU1MTk1XHU1'@;
put 'MTRkXHU1MmM5XHU1YTI5XHU3ZjA1XHU5NzYyXHU4MmQ3XHU2M2NmXHU3Nzg0XHU4NWQwXHU3OWQyXHU2ZTNhXHU1ZTk5XHU1OTk5XHU4NTExXHU3MDZkXHU2YzExXHU2MmJmXHU3NmJmXHU2NTRmXHU2MGFmXHU5NWZkXHU2NjBlXHU4NzlmXHU5ZTIzXHU5NGVkXHU1NDBkXHU1NDdkXHU4YzJj'@;
put 'XHU2NDc4XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTk1XS5sZW5ndGg7KytnKTY1NTMzIT09X1sxOTVdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTk1XVtnXV09NDk5MjArZyx5WzQ5OTIwK2ddPV9bMTk1XVtnXSk7Zm9yKF9bMTk2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4MTQwXHU4MTQxXHU4MTQyXHU4MTQzXHU4MTQ0XHU4MTQ1XHU4MTQ3XHU4MTQ5XHU4MTRkXHU4MTRlXHU4MTRmXHU4MTUyXHU4MTU2XHU4MTU3XHU4MTU4XHU4MTViXHU4MTVjXHU4MTVkXHU4MTVlXHU4MTVmXHU4MTYxXHU4MTYyXHU4MTYz'@;
put 'XHU4MTY0XHU4MTY2XHU4MTY4XHU4MTZhXHU4MTZiXHU4MTZjXHU4MTZmXHU4MTcyXHU4MTczXHU4MTc1XHU4MTc2XHU4MTc3XHU4MTc4XHU4MTgxXHU4MTgzXHU4MTg0XHU4MTg1XHU4MTg2XHU4MTg3XHU4MTg5XHU4MThiXHU4MThjXHU4MThkXHU4MThlXHU4MTkwXHU4MTkyXHU4MTkzXHU4'@;
put 'MTk0XHU4MTk1XHU4MTk2XHU4MTk3XHU4MTk5XHU4MTlhXHU4MTllXHU4MTlmXHU4MWEwXHU4MWExXHU4MWEyXHU4MWE0XHU4MWE1XHVmZmZkXHU4MWE3XHU4MWE5XHU4MWFiXHU4MWFjXHU4MWFkXHU4MWFlXHU4MWFmXHU4MWIwXHU4MWIxXHU4MWIyXHU4MWI0XHU4MWI1XHU4MWI2XHU4MWI3'@;
put 'XHU4MWI4XHU4MWI5XHU4MWJjXHU4MWJkXHU4MWJlXHU4MWJmXHU4MWM0XHU4MWM1XHU4MWM3XHU4MWM4XHU4MWM5XHU4MWNiXHU4MWNkXHU4MWNlXHU4MWNmXHU4MWQwXHU4MWQxXHU4MWQyXHU4MWQzXHU2NDc5XHU4NjExXHU2YTIxXHU4MTljXHU3OGU4XHU2NDY5XHU5YjU0XHU2MmI5XHU2'@;
put 'NzJiXHU4M2FiXHU1OGE4XHU5ZWQ4XHU2Y2FiXHU2ZjIwXHU1YmRlXHU5NjRjXHU4YzBiXHU3MjVmXHU2N2QwXHU2MmM3XHU3MjYxXHU0ZWE5XHU1OWM2XHU2YmNkXHU1ODkzXHU2NmFlXHU1ZTU1XHU1MmRmXHU2MTU1XHU2NzI4XHU3NmVlXHU3NzY2XHU3MjY3XHU3YTQ2XHU2MmZmXHU1NGVh'@;
put 'XHU1NDUwXHU5NGEwXHU5MGEzXHU1YTFjXHU3ZWIzXHU2YzE2XHU0ZTQzXHU1OTc2XHU4MDEwXHU1OTQ4XHU1MzU3XHU3NTM3XHU5NmJlXHU1NmNhXHU2MzIwXHU4MTExXHU2MDdjXHU5NWY5XHU2ZGQ2XHU1NDYyXHU5OTgxXHU1MTg1XHU1YWU5XHU4MGZkXHU1OWFlXHU5NzEzXHU1MDJhXHU2'@;
put 'Y2U1XHU1YzNjXHU2MmRmXHU0ZjYwXHU1MzNmXHU4MTdiXHU5MDA2XHU2ZWJhXHU4NTJiXHU2MmM4XHU1ZTc0XHU3OGJlXHU2NGI1XHU2MzdiXHU1ZmY1XHU1YTE4XHU5MTdmXHU5ZTFmXHU1YzNmXHU2MzRmXHU4MDQyXHU1YjdkXHU1NTZlXHU5NTRhXHU5NTRkXHU2ZDg1XHU2MGE4XHU2N2Uw'@;
put 'XHU3MmRlXHU1MWRkXHU1YjgxXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTk2XS5sZW5ndGg7KytnKTY1NTMzIT09X1sxOTZdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTk2XVtnXV09NTAxNzYrZyx5WzUwMTc2K2ddPV9bMTk2XVtnXSk7Zm9yKF9bMTk3XT0iXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4MWQ0XHU4MWQ1XHU4MWQ2XHU4MWQ3XHU4MWQ4XHU4MWQ5XHU4MWRhXHU4MWRiXHU4MWRjXHU4MWRkXHU4MWRlXHU4MWRmXHU4MWUwXHU4MWUxXHU4MWUyXHU4MWU0XHU4MWU1XHU4MWU2XHU4MWU4XHU4MWU5XHU4MWVi'@;
put 'XHU4MWVlXHU4MWVmXHU4MWYwXHU4MWYxXHU4MWYyXHU4MWY1XHU4MWY2XHU4MWY3XHU4MWY4XHU4MWY5XHU4MWZhXHU4MWZkXHU4MWZmXHU4MjAzXHU4MjA3XHU4MjA4XHU4MjA5XHU4MjBhXHU4MjBiXHU4MjBlXHU4MjBmXHU4MjExXHU4MjEzXHU4MjE1XHU4MjE2XHU4MjE3XHU4MjE4XHU4'@;
put 'MjE5XHU4MjFhXHU4MjFkXHU4MjIwXHU4MjI0XHU4MjI1XHU4MjI2XHU4MjI3XHU4MjI5XHU4MjJlXHU4MjMyXHU4MjNhXHU4MjNjXHU4MjNkXHU4MjNmXHVmZmZkXHU4MjQwXHU4MjQxXHU4MjQyXHU4MjQzXHU4MjQ1XHU4MjQ2XHU4MjQ4XHU4MjRhXHU4MjRjXHU4MjRkXHU4MjRlXHU4MjUw'@;
put 'XHU4MjUxXHU4MjUyXHU4MjUzXHU4MjU0XHU4MjU1XHU4MjU2XHU4MjU3XHU4MjU5XHU4MjViXHU4MjVjXHU4MjVkXHU4MjVlXHU4MjYwXHU4MjYxXHU4MjYyXHU4MjYzXHU4MjY0XHU4MjY1XHU4MjY2XHU4MjY3XHU4MjY5XHU2MmU3XHU2Y2RlXHU3MjViXHU2MjZkXHU5NGFlXHU3ZWJkXHU4'@;
put 'MTEzXHU2ZDUzXHU1MTljXHU1ZjA0XHU1OTc0XHU1MmFhXHU2MDEyXHU1OTczXHU2Njk2XHU4NjUwXHU3NTlmXHU2MzJhXHU2MWU2XHU3Y2VmXHU4YmZhXHU1NGU2XHU2YjI3XHU5ZTI1XHU2YmI0XHU4NWQ1XHU1NDU1XHU1MDc2XHU2Y2E0XHU1NTZhXHU4ZGI0XHU3MjJjXHU1ZTE1XHU2MDE1'@;
put 'XHU3NDM2XHU2MmNkXHU2MzkyXHU3MjRjXHU1Zjk4XHU2ZTQzXHU2ZDNlXHU2NTAwXHU2ZjU4XHU3NmQ4XHU3OGQwXHU3NmZjXHU3NTU0XHU1MjI0XHU1M2RiXHU0ZTUzXHU1ZTllXHU2NWMxXHU4MDJhXHU4MGQ2XHU2MjliXHU1NDg2XHU1MjI4XHU3MGFlXHU4ODhkXHU4ZGQxXHU2Y2UxXHU1'@;
put 'NDc4XHU4MGRhXHU1N2Y5XHU4OGY0XHU4ZDU0XHU5NjZhXHU5MTRkXHU0ZjY5XHU2YzliXHU1NWI3XHU3NmM2XHU3ODMwXHU2MmE4XHU3MGY5XHU2ZjhlXHU1ZjZkXHU4NGVjXHU2OGRhXHU3ODdjXHU3YmY3XHU4MWE4XHU2NzBiXHU5ZTRmXHU2MzY3XHU3OGIwXHU1NzZmXHU3ODEyXHU5NzM5'@;
put 'XHU2Mjc5XHU2MmFiXHU1Mjg4XHU3NDM1XHU2YmQ3XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTk3XS5sZW5ndGg7KytnKTY1NTMzIT09X1sxOTddW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTk3XVtnXV09NTA0MzIrZyx5WzUwNDMyK2ddPV9bMTk3XVtnXSk7Zm9yKF9bMTk4XT0iXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4MjZhXHU4MjZiXHU4MjZjXHU4MjZkXHU4MjcxXHU4Mjc1XHU4Mjc2XHU4Mjc3XHU4Mjc4XHU4MjdiXHU4MjdjXHU4MjgwXHU4MjgxXHU4MjgzXHU4Mjg1XHU4Mjg2XHU4Mjg3XHU4Mjg5XHU4Mjhj'@;
put 'XHU4MjkwXHU4MjkzXHU4Mjk0XHU4Mjk1XHU4Mjk2XHU4MjlhXHU4MjliXHU4MjllXHU4MmEwXHU4MmEyXHU4MmEzXHU4MmE3XHU4MmIyXHU4MmI1XHU4MmI2XHU4MmJhXHU4MmJiXHU4MmJjXHU4MmJmXHU4MmMwXHU4MmMyXHU4MmMzXHU4MmM1XHU4MmM2XHU4MmM5XHU4MmQwXHU4MmQ2XHU4'@;
put 'MmQ5XHU4MmRhXHU4MmRkXHU4MmUyXHU4MmU3XHU4MmU4XHU4MmU5XHU4MmVhXHU4MmVjXHU4MmVkXHU4MmVlXHU4MmYwXHU4MmYyXHU4MmYzXHU4MmY1XHU4MmY2XHU4MmY4XHVmZmZkXHU4MmZhXHU4MmZjXHU4MmZkXHU4MmZlXHU4MmZmXHU4MzAwXHU4MzBhXHU4MzBiXHU4MzBkXHU4MzEw'@;
put 'XHU4MzEyXHU4MzEzXHU4MzE2XHU4MzE4XHU4MzE5XHU4MzFkXHU4MzFlXHU4MzFmXHU4MzIwXHU4MzIxXHU4MzIyXHU4MzIzXHU4MzI0XHU4MzI1XHU4MzI2XHU4MzI5XHU4MzJhXHU4MzJlXHU4MzMwXHU4MzMyXHU4MzM3XHU4MzNiXHU4MzNkXHU1NTY0XHU4MTNlXHU3NWIyXHU3NmFlXHU1'@;
put 'MzM5XHU3NWRlXHU1MGZiXHU1YzQxXHU4YjZjXHU3YmM3XHU1MDRmXHU3MjQ3XHU5YTk3XHU5OGQ4XHU2ZjAyXHU3NGUyXHU3OTY4XHU2NDg3XHU3N2E1XHU2MmZjXHU5ODkxXHU4ZDJiXHU1NGMxXHU4MDU4XHU0ZTUyXHU1NzZhXHU4MmY5XHU4NDBkXHU1ZTczXHU1MWVkXHU3NGY2XHU4YmM0'@;
put 'XHU1YzRmXHU1NzYxXHU2Y2ZjXHU5ODg3XHU1YTQ2XHU3ODM0XHU5YjQ0XHU4ZmViXHU3Yzk1XHU1MjU2XHU2MjUxXHU5NGZhXHU0ZWM2XHU4Mzg2XHU4NDYxXHU4M2U5XHU4NGIyXHU1N2Q0XHU2NzM0XHU1NzAzXHU2NjZlXHU2ZDY2XHU4YzMxXHU2NmRkXHU3MDExXHU2NzFmXHU2YjNhXHU2'@;
put 'ODE2XHU2MjFhXHU1OWJiXHU0ZTAzXHU1MWM0XHU2ZjA2XHU2N2QyXHU2YzhmXHU1MTc2XHU2OGNiXHU1OTQ3XHU2YjY3XHU3NTY2XHU1ZDBlXHU4MTEwXHU5ZjUwXHU2NWQ3XHU3OTQ4XHU3OTQxXHU5YTkxXHU4ZDc3XHU1YzgyXHU0ZTVlXHU0ZjAxXHU1NDJmXHU1OTUxXHU3ODBjXHU1NjY4'@;
put 'XHU2YzE0XHU4ZmM0XHU1ZjAzXHU2YzdkXHU2Y2UzXHU4YmFiXHU2MzkwXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTk4XS5sZW5ndGg7KytnKTY1NTMzIT09X1sxOThdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTk4XVtnXV09NTA2ODgrZyx5WzUwNjg4K2ddPV9bMTk4XVtnXSk7Zm9y'@;
put 'KF9bMTk5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4MzNlXHU4MzNmXHU4MzQxXHU4MzQyXHU4MzQ0XHU4MzQ1XHU4MzQ4XHU4MzRhXHU4MzRiXHU4MzRjXHU4MzRkXHU4MzRlXHU4MzUzXHU4MzU1XHU4MzU2XHU4MzU3XHU4MzU4'@;
put 'XHU4MzU5XHU4MzVkXHU4MzYyXHU4MzcwXHU4MzcxXHU4MzcyXHU4MzczXHU4Mzc0XHU4Mzc1XHU4Mzc2XHU4Mzc5XHU4MzdhXHU4MzdlXHU4MzdmXHU4MzgwXHU4MzgxXHU4MzgyXHU4MzgzXHU4Mzg0XHU4Mzg3XHU4Mzg4XHU4MzhhXHU4MzhiXHU4MzhjXHU4MzhkXHU4MzhmXHU4MzkwXHU4'@;
put 'MzkxXHU4Mzk0XHU4Mzk1XHU4Mzk2XHU4Mzk3XHU4Mzk5XHU4MzlhXHU4MzlkXHU4MzlmXHU4M2ExXHU4M2EyXHU4M2EzXHU4M2E0XHU4M2E1XHU4M2E2XHU4M2E3XHU4M2FjXHU4M2FkXHU4M2FlXHVmZmZkXHU4M2FmXHU4M2I1XHU4M2JiXHU4M2JlXHU4M2JmXHU4M2MyXHU4M2MzXHU4M2M0'@;
put 'XHU4M2M2XHU4M2M4XHU4M2M5XHU4M2NiXHU4M2NkXHU4M2NlXHU4M2QwXHU4M2QxXHU4M2QyXHU4M2QzXHU4M2Q1XHU4M2Q3XHU4M2Q5XHU4M2RhXHU4M2RiXHU4M2RlXHU4M2UyXHU4M2UzXHU4M2U0XHU4M2U2XHU4M2U3XHU4M2U4XHU4M2ViXHU4M2VjXHU4M2VkXHU2MDcwXHU2ZDNkXHU3'@;
put 'Mjc1XHU2MjY2XHU5NDhlXHU5NGM1XHU1MzQzXHU4ZmMxXHU3YjdlXHU0ZWRmXHU4YzI2XHU0ZTdlXHU5ZWQ0XHU5NGIxXHU5NGIzXHU1MjRkXHU2ZjVjXHU5MDYzXHU2ZDQ1XHU4YzM0XHU1ODExXHU1ZDRjXHU2YjIwXHU2YjQ5XHU2N2FhXHU1NDViXHU4MTU0XHU3ZjhjXHU1ODk5XHU4NTM3'@;
put 'XHU1ZjNhXHU2MmEyXHU2YTQ3XHU5NTM5XHU2NTcyXHU2MDg0XHU2ODY1XHU3N2E3XHU0ZTU0XHU0ZmE4XHU1ZGU3XHU5Nzk4XHU2NGFjXHU3ZmQ4XHU1Y2VkXHU0ZmNmXHU3YThkXHU1MjA3XHU4MzA0XHU0ZTE0XHU2MDJmXHU3YTgzXHU5NGE2XHU0ZmI1XHU0ZWIyXHU3OWU2XHU3NDM0XHU1'@;
put 'MmU0XHU4MmI5XHU2NGQyXHU3OWJkXHU1YmRkXHU2YzgxXHU5NzUyXHU4ZjdiXHU2YzIyXHU1MDNlXHU1MzdmXHU2ZTA1XHU2NGNlXHU2Njc0XHU2YzMwXHU2MGM1XHU5ODc3XHU4YmY3XHU1ZTg2XHU3NDNjXHU3YTc3XHU3OWNiXHU0ZTE4XHU5MGIxXHU3NDAzXHU2YzQyXHU1NmRhXHU5MTRi'@;
put 'XHU2Y2M1XHU4ZDhiXHU1MzNhXHU4NmM2XHU2NmYyXHU4ZWFmXHU1YzQ4XHU5YTcxXHU2ZTIwXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTk5XS5sZW5ndGg7KytnKTY1NTMzIT09X1sxOTldW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTk5XVtnXV09NTA5NDQrZyx5WzUwOTQ0K2ddPV9b'@;
put 'MTk5XVtnXSk7Zm9yKF9bMjAwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4M2VlXHU4M2VmXHU4M2YzXHU4M2Y0XHU4M2Y1XHU4M2Y2XHU4M2Y3XHU4M2ZhXHU4M2ZiXHU4M2ZjXHU4M2ZlXHU4M2ZmXHU4NDAwXHU4NDAyXHU4NDA1'@;
put 'XHU4NDA3XHU4NDA4XHU4NDA5XHU4NDBhXHU4NDEwXHU4NDEyXHU4NDEzXHU4NDE0XHU4NDE1XHU4NDE2XHU4NDE3XHU4NDE5XHU4NDFhXHU4NDFiXHU4NDFlXHU4NDFmXHU4NDIwXHU4NDIxXHU4NDIyXHU4NDIzXHU4NDI5XHU4NDJhXHU4NDJiXHU4NDJjXHU4NDJkXHU4NDJlXHU4NDJmXHU4'@;
put 'NDMwXHU4NDMyXHU4NDMzXHU4NDM0XHU4NDM1XHU4NDM2XHU4NDM3XHU4NDM5XHU4NDNhXHU4NDNiXHU4NDNlXHU4NDNmXHU4NDQwXHU4NDQxXHU4NDQyXHU4NDQzXHU4NDQ0XHU4NDQ1XHU4NDQ3XHU4NDQ4XHU4NDQ5XHVmZmZkXHU4NDRhXHU4NDRiXHU4NDRjXHU4NDRkXHU4NDRlXHU4NDRm'@;
put 'XHU4NDUwXHU4NDUyXHU4NDUzXHU4NDU0XHU4NDU1XHU4NDU2XHU4NDU4XHU4NDVkXHU4NDVlXHU4NDVmXHU4NDYwXHU4NDYyXHU4NDY0XHU4NDY1XHU4NDY2XHU4NDY3XHU4NDY4XHU4NDZhXHU4NDZlXHU4NDZmXHU4NDcwXHU4NDcyXHU4NDc0XHU4NDc3XHU4NDc5XHU4NDdiXHU4NDdjXHU1'@;
put 'M2Q2XHU1YTM2XHU5ZjhiXHU4ZGEzXHU1M2JiXHU1NzA4XHU5OGE3XHU2NzQzXHU5MTliXHU2Y2M5XHU1MTY4XHU3NWNhXHU2MmYzXHU3MmFjXHU1MjM4XHU1MjlkXHU3ZjNhXHU3MDk0XHU3NjM4XHU1Mzc0XHU5ZTRhXHU2OWI3XHU3ODZlXHU5NmMwXHU4OGQ5XHU3ZmE0XHU3MTM2XHU3MWMz'@;
put 'XHU1MTg5XHU2N2QzXHU3NGU0XHU1OGU0XHU2NTE4XHU1NmI3XHU4YmE5XHU5OTc2XHU2MjcwXHU3ZWQ1XHU2MGY5XHU3MGVkXHU1OGVjXHU0ZWMxXHU0ZWJhXHU1ZmNkXHU5N2U3XHU0ZWZiXHU4YmE0XHU1MjAzXHU1OThhXHU3ZWFiXHU2MjU0XHU0ZWNkXHU2NWU1XHU2MjBlXHU4MzM4XHU4'@;
put 'NGM5XHU4MzYzXHU4NzhkXHU3MTk0XHU2ZWI2XHU1YmI5XHU3ZWQyXHU1MTk3XHU2M2M5XHU2N2Q0XHU4MDg5XHU4MzM5XHU4ODE1XHU1MTEyXHU1YjdhXHU1OTgyXHU4ZmIxXHU0ZTczXHU2YzVkXHU1MTY1XHU4OTI1XHU4ZjZmXHU5NjJlXHU4NTRhXHU3NDVlXHU5NTEwXHU5NWYwXHU2ZGE2'@;
put 'XHU4MmU1XHU1ZjMxXHU2NDkyXHU2ZDEyXHU4NDI4XHU4MTZlXHU5Y2MzXHU1ODVlXHU4ZDViXHU0ZTA5XHU1M2MxXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjAwXS5sZW5ndGg7KytnKTY1NTMzIT09X1syMDBdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjAwXVtnXV09NTEyMDArZyx5'@;
put 'WzUxMjAwK2ddPV9bMjAwXVtnXSk7Zm9yKF9bMjAxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4NDdkXHU4NDdlXHU4NDdmXHU4NDgwXHU4NDgxXHU4NDgzXHU4NDg0XHU4NDg1XHU4NDg2XHU4NDhhXHU4NDhkXHU4NDhmXHU4NDkw'@;
put 'XHU4NDkxXHU4NDkyXHU4NDkzXHU4NDk0XHU4NDk1XHU4NDk2XHU4NDk4XHU4NDlhXHU4NDliXHU4NDlkXHU4NDllXHU4NDlmXHU4NGEwXHU4NGEyXHU4NGEzXHU4NGE0XHU4NGE1XHU4NGE2XHU4NGE3XHU4NGE4XHU4NGE5XHU4NGFhXHU4NGFiXHU4NGFjXHU4NGFkXHU4NGFlXHU4NGIwXHU4'@;
put 'NGIxXHU4NGIzXHU4NGI1XHU4NGI2XHU4NGI3XHU4NGJiXHU4NGJjXHU4NGJlXHU4NGMwXHU4NGMyXHU4NGMzXHU4NGM1XHU4NGM2XHU4NGM3XHU4NGM4XHU4NGNiXHU4NGNjXHU4NGNlXHU4NGNmXHU4NGQyXHU4NGQ0XHU4NGQ1XHU4NGQ3XHVmZmZkXHU4NGQ4XHU4NGQ5XHU4NGRhXHU4NGRi'@;
put 'XHU4NGRjXHU4NGRlXHU4NGUxXHU4NGUyXHU4NGU0XHU4NGU3XHU4NGU4XHU4NGU5XHU4NGVhXHU4NGViXHU4NGVkXHU4NGVlXHU4NGVmXHU4NGYxXHU4NGYyXHU4NGYzXHU4NGY0XHU4NGY1XHU4NGY2XHU4NGY3XHU4NGY4XHU4NGY5XHU4NGZhXHU4NGZiXHU4NGZkXHU4NGZlXHU4NTAwXHU4'@;
put 'NTAxXHU4NTAyXHU0ZjFlXHU2NTYzXHU2ODUxXHU1NWQzXHU0ZTI3XHU2NDE0XHU5YTlhXHU2MjZiXHU1YWMyXHU3NDVmXHU4MjcyXHU2ZGE5XHU2OGVlXHU1MGU3XHU4MzhlXHU3ODAyXHU2NzQwXHU1MjM5XHU2Yzk5XHU3ZWIxXHU1MGJiXHU1NTY1XHU3MTVlXHU3YjViXHU2NjUyXHU3M2Nh'@;
put 'XHU4MmViXHU2NzQ5XHU1YzcxXHU1MjIwXHU3MTdkXHU4ODZiXHU5NWVhXHU5NjU1XHU2NGM1XHU4ZDYxXHU4MWIzXHU1NTg0XHU2YzU1XHU2MjQ3XHU3ZjJlXHU1ODkyXHU0ZjI0XHU1NTQ2XHU4ZDRmXHU2NjRjXHU0ZTBhXHU1YzFhXHU4OGYzXHU2OGEyXHU2MzRlXHU3YTBkXHU3MGU3XHU4'@;
put 'MjhkXHU1MmZhXHU5N2Y2XHU1YzExXHU1NGU4XHU5MGI1XHU3ZWNkXHU1OTYyXHU4ZDRhXHU4NmM3XHU4MjBjXHU4MjBkXHU4ZDY2XHU2NDQ0XHU1YzA0XHU2MTUxXHU2ZDg5XHU3OTNlXHU4YmJlXHU3ODM3XHU3NTMzXHU1NDdiXHU0ZjM4XHU4ZWFiXHU2ZGYxXHU1YTIwXHU3ZWM1XHU3OTVl'@;
put 'XHU2Yzg4XHU1YmExXHU1YTc2XHU3NTFhXHU4MGJlXHU2MTRlXHU2ZTE3XHU1OGYwXHU3NTFmXHU3NTI1XHU3MjcyXHU1MzQ3XHU3ZWYzXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjAxXS5sZW5ndGg7KytnKTY1NTMzIT09X1syMDFdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjAxXVtn'@;
put 'XV09NTE0NTYrZyx5WzUxNDU2K2ddPV9bMjAxXVtnXSk7Zm9yKF9bMjAyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4NTAzXHU4NTA0XHU4NTA1XHU4NTA2XHU4NTA3XHU4NTA4XHU4NTA5XHU4NTBhXHU4NTBiXHU4NTBkXHU4NTBl'@;
put 'XHU4NTBmXHU4NTEwXHU4NTEyXHU4NTE0XHU4NTE1XHU4NTE2XHU4NTE4XHU4NTE5XHU4NTFiXHU4NTFjXHU4NTFkXHU4NTFlXHU4NTIwXHU4NTIyXHU4NTIzXHU4NTI0XHU4NTI1XHU4NTI2XHU4NTI3XHU4NTI4XHU4NTI5XHU4NTJhXHU4NTJkXHU4NTJlXHU4NTJmXHU4NTMwXHU4NTMxXHU4'@;
put 'NTMyXHU4NTMzXHU4NTM0XHU4NTM1XHU4NTM2XHU4NTNlXHU4NTNmXHU4NTQwXHU4NTQxXHU4NTQyXHU4NTQ0XHU4NTQ1XHU4NTQ2XHU4NTQ3XHU4NTRiXHU4NTRjXHU4NTRkXHU4NTRlXHU4NTRmXHU4NTUwXHU4NTUxXHU4NTUyXHU4NTUzXHU4NTU0XHU4NTU1XHVmZmZkXHU4NTU3XHU4NTU4'@;
put 'XHU4NTVhXHU4NTViXHU4NTVjXHU4NTVkXHU4NTVmXHU4NTYwXHU4NTYxXHU4NTYyXHU4NTYzXHU4NTY1XHU4NTY2XHU4NTY3XHU4NTY5XHU4NTZhXHU4NTZiXHU4NTZjXHU4NTZkXHU4NTZlXHU4NTZmXHU4NTcwXHU4NTcxXHU4NTczXHU4NTc1XHU4NTc2XHU4NTc3XHU4NTc4XHU4NTdjXHU4'@;
put 'NTdkXHU4NTdmXHU4NTgwXHU4NTgxXHU3NzAxXHU3NmRiXHU1MjY5XHU4MGRjXHU1NzIzXHU1ZTA4XHU1OTMxXHU3MmVlXHU2NWJkXHU2ZTdmXHU4YmQ3XHU1YzM4XHU4NjcxXHU1MzQxXHU3N2YzXHU2MmZlXHU2NWY2XHU0ZWMwXHU5OGRmXHU4NjgwXHU1YjllXHU4YmM2XHU1M2YyXHU3N2Uy'@;
put 'XHU0ZjdmXHU1YzRlXHU5YTc2XHU1OWNiXHU1ZjBmXHU3OTNhXHU1OGViXHU0ZTE2XHU2N2ZmXHU0ZThiXHU2MmVkXHU4YTkzXHU5MDFkXHU1MmJmXHU2NjJmXHU1NWRjXHU1NjZjXHU5MDAyXHU0ZWQ1XHU0ZjhkXHU5MWNhXHU5OTcwXHU2YzBmXHU1ZTAyXHU2MDQzXHU1YmE0XHU4OWM2XHU4'@;
put 'YmQ1XHU2NTM2XHU2MjRiXHU5OTk2XHU1Yjg4XHU1YmZmXHU2Mzg4XHU1NTJlXHU1M2Q3XHU3NjI2XHU1MTdkXHU4NTJjXHU2N2EyXHU2OGIzXHU2YjhhXHU2MjkyXHU4ZjkzXHU1M2Q0XHU4MjEyXHU2ZGQxXHU3NThmXHU0ZTY2XHU4ZDRlXHU1YjcwXHU3MTlmXHU4NWFmXHU2NjkxXHU2NmQ5'@;
put 'XHU3ZjcyXHU4NzAwXHU5ZWNkXHU5ZjIwXHU1YzVlXHU2NzJmXHU4ZmYwXHU2ODExXHU2NzVmXHU2MjBkXHU3YWQ2XHU1ODg1XHU1ZWI2XHU2NTcwXHU2ZjMxXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjAyXS5sZW5ndGg7KytnKTY1NTMzIT09X1syMDJdW2ddLmNoYXJDb2RlQXQoMCkm'@;
put 'JihJW19bMjAyXVtnXV09NTE3MTIrZyx5WzUxNzEyK2ddPV9bMjAyXVtnXSk7Zm9yKF9bMjAzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4NTgyXHU4NTgzXHU4NTg2XHU4NTg4XHU4NTg5XHU4NThhXHU4NThiXHU4NThjXHU4NThk'@;
put 'XHU4NThlXHU4NTkwXHU4NTkxXHU4NTkyXHU4NTkzXHU4NTk0XHU4NTk1XHU4NTk2XHU4NTk3XHU4NTk4XHU4NTk5XHU4NTlhXHU4NTlkXHU4NTllXHU4NTlmXHU4NWEwXHU4NWExXHU4NWEyXHU4NWEzXHU4NWE1XHU4NWE2XHU4NWE3XHU4NWE5XHU4NWFiXHU4NWFjXHU4NWFkXHU4NWIxXHU4'@;
put 'NWIyXHU4NWIzXHU4NWI0XHU4NWI1XHU4NWI2XHU4NWI4XHU4NWJhXHU4NWJiXHU4NWJjXHU4NWJkXHU4NWJlXHU4NWJmXHU4NWMwXHU4NWMyXHU4NWMzXHU4NWM0XHU4NWM1XHU4NWM2XHU4NWM3XHU4NWM4XHU4NWNhXHU4NWNiXHU4NWNjXHU4NWNkXHU4NWNlXHU4NWQxXHU4NWQyXHVmZmZk'@;
put 'XHU4NWQ0XHU4NWQ2XHU4NWQ3XHU4NWQ4XHU4NWQ5XHU4NWRhXHU4NWRiXHU4NWRkXHU4NWRlXHU4NWRmXHU4NWUwXHU4NWUxXHU4NWUyXHU4NWUzXHU4NWU1XHU4NWU2XHU4NWU3XHU4NWU4XHU4NWVhXHU4NWViXHU4NWVjXHU4NWVkXHU4NWVlXHU4NWVmXHU4NWYwXHU4NWYxXHU4NWYyXHU4'@;
put 'NWYzXHU4NWY0XHU4NWY1XHU4NWY2XHU4NWY3XHU4NWY4XHU2MDU1XHU1MjM3XHU4MDBkXHU2NDU0XHU4ODcwXHU3NTI5XHU1ZTA1XHU2ODEzXHU2MmY0XHU5NzFjXHU1M2NjXHU3MjNkXHU4YzAxXHU2YzM0XHU3NzYxXHU3YTBlXHU1NDJlXHU3N2FjXHU5ODdhXHU4MjFjXHU4YmY0XHU3ODU1'@;
put 'XHU2NzE0XHU3MGMxXHU2NWFmXHU2NDk1XHU1NjM2XHU2MDFkXHU3OWMxXHU1M2Y4XHU0ZTFkXHU2YjdiXHU4MDg2XHU1YmZhXHU1NWUzXHU1NmRiXHU0ZjNhXHU0ZjNjXHU5OTcyXHU1ZGYzXHU2NzdlXHU4MDM4XHU2MDAyXHU5ODgyXHU5MDAxXHU1YjhiXHU4YmJjXHU4YmY1XHU2NDFjXHU4'@;
put 'MjU4XHU2NGRlXHU1NWZkXHU4MmNmXHU5MTY1XHU0ZmQ3XHU3ZDIwXHU5MDFmXHU3YzlmXHU1MGYzXHU1ODUxXHU2ZWFmXHU1YmJmXHU4YmM5XHU4MDgzXHU5MTc4XHU4NDljXHU3Yjk3XHU4NjdkXHU5NjhiXHU5NjhmXHU3ZWU1XHU5YWQzXHU3ODhlXHU1YzgxXHU3YTU3XHU5MDQyXHU5NmE3'@;
put 'XHU3OTVmXHU1YjU5XHU2MzVmXHU3YjBiXHU4NGQxXHU2OGFkXHU1NTA2XHU3ZjI5XHU3NDEwXHU3ZDIyXHU5NTAxXHU2MjQwXHU1ODRjXHU0ZWQ2XHU1YjgzXHU1OTc5XHU1ODU0XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjAzXS5sZW5ndGg7KytnKTY1NTMzIT09X1syMDNdW2ddLmNo'@;
put 'YXJDb2RlQXQoMCkmJihJW19bMjAzXVtnXV09NTE5NjgrZyx5WzUxOTY4K2ddPV9bMjAzXVtnXSk7Zm9yKF9bMjA0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4NWY5XHU4NWZhXHU4NWZjXHU4NWZkXHU4NWZlXHU4NjAwXHU4NjAx'@;
put 'XHU4NjAyXHU4NjAzXHU4NjA0XHU4NjA2XHU4NjA3XHU4NjA4XHU4NjA5XHU4NjBhXHU4NjBiXHU4NjBjXHU4NjBkXHU4NjBlXHU4NjBmXHU4NjEwXHU4NjEyXHU4NjEzXHU4NjE0XHU4NjE1XHU4NjE3XHU4NjE4XHU4NjE5XHU4NjFhXHU4NjFiXHU4NjFjXHU4NjFkXHU4NjFlXHU4NjFmXHU4'@;
put 'NjIwXHU4NjIxXHU4NjIyXHU4NjIzXHU4NjI0XHU4NjI1XHU4NjI2XHU4NjI4XHU4NjJhXHU4NjJiXHU4NjJjXHU4NjJkXHU4NjJlXHU4NjJmXHU4NjMwXHU4NjMxXHU4NjMyXHU4NjMzXHU4NjM0XHU4NjM1XHU4NjM2XHU4NjM3XHU4NjM5XHU4NjNhXHU4NjNiXHU4NjNkXHU4NjNlXHU4NjNm'@;
put 'XHU4NjQwXHVmZmZkXHU4NjQxXHU4NjQyXHU4NjQzXHU4NjQ0XHU4NjQ1XHU4NjQ2XHU4NjQ3XHU4NjQ4XHU4NjQ5XHU4NjRhXHU4NjRiXHU4NjRjXHU4NjUyXHU4NjUzXHU4NjU1XHU4NjU2XHU4NjU3XHU4NjU4XHU4NjU5XHU4NjViXHU4NjVjXHU4NjVkXHU4NjVmXHU4NjYwXHU4NjYxXHU4'@;
put 'NjYzXHU4NjY0XHU4NjY1XHU4NjY2XHU4NjY3XHU4NjY4XHU4NjY5XHU4NjZhXHU3MzZkXHU2MzFlXHU4ZTRiXHU4ZTBmXHU4MGNlXHU4MmQ0XHU2MmFjXHU1M2YwXHU2Y2YwXHU5MTVlXHU1OTJhXHU2MDAxXHU2YzcwXHU1NzRkXHU2NDRhXHU4ZDJhXHU3NjJiXHU2ZWU5XHU1NzViXHU2YTgw'@;
put 'XHU3NWYwXHU2ZjZkXHU4YzJkXHU4YzA4XHU1NzY2XHU2YmVmXHU4ODkyXHU3OGIzXHU2M2EyXHU1M2Y5XHU3MGFkXHU2YzY0XHU1ODU4XHU2NDJhXHU1ODAyXHU2OGUwXHU4MTliXHU1NTEwXHU3Y2Q2XHU1MDE4XHU4ZWJhXHU2ZGNjXHU4ZDlmXHU3MGViXHU2MzhmXHU2ZDliXHU2ZWQ0XHU3'@;
put 'ZWU2XHU4NDA0XHU2ODQzXHU5MDAzXHU2ZGQ4XHU5Njc2XHU4YmE4XHU1OTU3XHU3Mjc5XHU4NWU0XHU4MTdlXHU3NWJjXHU4YThhXHU2OGFmXHU1MjU0XHU4ZTIyXHU5NTExXHU2M2QwXHU5ODk4XHU4ZTQ0XHU1NTdjXHU0ZjUzXHU2NmZmXHU1NjhmXHU2MGQ1XHU2ZDk1XHU1MjQzXHU1YzQ5'@;
put 'XHU1OTI5XHU2ZGZiXHU1ODZiXHU3NTMwXHU3NTFjXHU2MDZjXHU4MjE0XHU4MTQ2XHU2MzExXHU2NzYxXHU4ZmUyXHU3NzNhXHU4ZGYzXHU4ZDM0XHU5NGMxXHU1ZTE2XHU1Mzg1XHU1NDJjXHU3MGMzXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjA0XS5sZW5ndGg7KytnKTY1NTMzIT09'@;
put 'X1syMDRdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjA0XVtnXV09NTIyMjQrZyx5WzUyMjI0K2ddPV9bMjA0XVtnXSk7Zm9yKF9bMjA1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4NjZkXHU4NjZmXHU4NjcwXHU4NjcyXHU4Njcz'@;
put 'XHU4Njc0XHU4Njc1XHU4Njc2XHU4Njc3XHU4Njc4XHU4NjgzXHU4Njg0XHU4Njg1XHU4Njg2XHU4Njg3XHU4Njg4XHU4Njg5XHU4NjhlXHU4NjhmXHU4NjkwXHU4NjkxXHU4NjkyXHU4Njk0XHU4Njk2XHU4Njk3XHU4Njk4XHU4Njk5XHU4NjlhXHU4NjliXHU4NjllXHU4NjlmXHU4NmEwXHU4'@;
put 'NmExXHU4NmEyXHU4NmE1XHU4NmE2XHU4NmFiXHU4NmFkXHU4NmFlXHU4NmIyXHU4NmIzXHU4NmI3XHU4NmI4XHU4NmI5XHU4NmJiXHU4NmJjXHU4NmJkXHU4NmJlXHU4NmJmXHU4NmMxXHU4NmMyXHU4NmMzXHU4NmM1XHU4NmM4XHU4NmNjXHU4NmNkXHU4NmQyXHU4NmQzXHU4NmQ1XHU4NmQ2'@;
put 'XHU4NmQ3XHU4NmRhXHU4NmRjXHVmZmZkXHU4NmRkXHU4NmUwXHU4NmUxXHU4NmUyXHU4NmUzXHU4NmU1XHU4NmU2XHU4NmU3XHU4NmU4XHU4NmVhXHU4NmViXHU4NmVjXHU4NmVmXHU4NmY1XHU4NmY2XHU4NmY3XHU4NmZhXHU4NmZiXHU4NmZjXHU4NmZkXHU4NmZmXHU4NzAxXHU4NzA0XHU4'@;
put 'NzA1XHU4NzA2XHU4NzBiXHU4NzBjXHU4NzBlXHU4NzBmXHU4NzEwXHU4NzExXHU4NzE0XHU4NzE2XHU2YzQwXHU1ZWY3XHU1MDVjXHU0ZWFkXHU1ZWFkXHU2MzNhXHU4MjQ3XHU5MDFhXHU2ODUwXHU5MTZlXHU3N2IzXHU1NDBjXHU5NGRjXHU1ZjY0XHU3YWU1XHU2ODc2XHU2MzQ1XHU3YjUy'@;
put 'XHU3ZWRmXHU3NWRiXHU1MDc3XHU2Mjk1XHU1OTM0XHU5MDBmXHU1MWY4XHU3OWMzXHU3YTgxXHU1NmZlXHU1ZjkyXHU5MDE0XHU2ZDgyXHU1YzYwXHU1NzFmXHU1NDEwXHU1MTU0XHU2ZTRkXHU1NmUyXHU2M2E4XHU5ODkzXHU4MTdmXHU4NzE1XHU4OTJhXHU5MDAwXHU1NDFlXHU1YzZmXHU4'@;
put 'MWMwXHU2MmQ2XHU2MjU4XHU4MTMxXHU5ZTM1XHU5NjQwXHU5YTZlXHU5YTdjXHU2OTJkXHU1OWE1XHU2MmQzXHU1NTNlXHU2MzE2XHU1NGM3XHU4NmQ5XHU2ZDNjXHU1YTAzXHU3NGU2XHU4ODljXHU2YjZhXHU1OTE2XHU4YzRjXHU1ZjJmXHU2ZTdlXHU3M2E5XHU5ODdkXHU0ZTM4XHU3MGY3'@;
put 'XHU1YjhjXHU3ODk3XHU2MzNkXHU2NjVhXHU3Njk2XHU2MGNiXHU1YjliXHU1YTQ5XHU0ZTA3XHU4MTU1XHU2YzZhXHU3MzhiXHU0ZWExXHU2Nzg5XHU3ZjUxXHU1ZjgwXHU2NWZhXHU2NzFiXHU1ZmQ4XHU1OTg0XHU1YTAxXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjA1XS5sZW5ndGg7'@;
put 'KytnKTY1NTMzIT09X1syMDVdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjA1XVtnXV09NTI0ODArZyx5WzUyNDgwK2ddPV9bMjA1XVtnXSk7Zm9yKF9bMjA2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4NzE5XHU4NzFiXHU4NzFk'@;
put 'XHU4NzFmXHU4NzIwXHU4NzI0XHU4NzI2XHU4NzI3XHU4NzI4XHU4NzJhXHU4NzJiXHU4NzJjXHU4NzJkXHU4NzJmXHU4NzMwXHU4NzMyXHU4NzMzXHU4NzM1XHU4NzM2XHU4NzM4XHU4NzM5XHU4NzNhXHU4NzNjXHU4NzNkXHU4NzQwXHU4NzQxXHU4NzQyXHU4NzQzXHU4NzQ0XHU4NzQ1XHU4'@;
put 'NzQ2XHU4NzRhXHU4NzRiXHU4NzRkXHU4NzRmXHU4NzUwXHU4NzUxXHU4NzUyXHU4NzU0XHU4NzU1XHU4NzU2XHU4NzU4XHU4NzVhXHU4NzViXHU4NzVjXHU4NzVkXHU4NzVlXHU4NzVmXHU4NzYxXHU4NzYyXHU4NzY2XHU4NzY3XHU4NzY4XHU4NzY5XHU4NzZhXHU4NzZiXHU4NzZjXHU4NzZk'@;
put 'XHU4NzZmXHU4NzcxXHU4NzcyXHU4NzczXHU4Nzc1XHVmZmZkXHU4Nzc3XHU4Nzc4XHU4Nzc5XHU4NzdhXHU4NzdmXHU4NzgwXHU4NzgxXHU4Nzg0XHU4Nzg2XHU4Nzg3XHU4Nzg5XHU4NzhhXHU4NzhjXHU4NzhlXHU4NzhmXHU4NzkwXHU4NzkxXHU4NzkyXHU4Nzk0XHU4Nzk1XHU4Nzk2XHU4'@;
put 'Nzk4XHU4Nzk5XHU4NzlhXHU4NzliXHU4NzljXHU4NzlkXHU4NzllXHU4N2EwXHU4N2ExXHU4N2EyXHU4N2EzXHU4N2E0XHU1ZGNkXHU1ZmFlXHU1MzcxXHU5N2U2XHU4ZmRkXHU2ODQ1XHU1NmY0XHU1NTJmXHU2MGRmXHU0ZTNhXHU2ZjRkXHU3ZWY0XHU4MmM3XHU4NDBlXHU1OWQ0XHU0ZjFm'@;
put 'XHU0ZjJhXHU1YzNlXHU3ZWFjXHU2NzJhXHU4NTFhXHU1NDczXHU3NTRmXHU4MGMzXHU1NTgyXHU5YjRmXHU0ZjRkXHU2ZTJkXHU4YzEzXHU1YzA5XHU2MTcwXHU1MzZiXHU3NjFmXHU2ZTI5XHU4NjhhXHU2NTg3XHU5NWZiXHU3ZWI5XHU1NDNiXHU3YTMzXHU3ZDBhXHU5NWVlXHU1NWUxXHU3'@;
put 'ZmMxXHU3NGVlXHU2MzFkXHU4NzE3XHU2ZGExXHU3YTlkXHU2MjExXHU2NWExXHU1MzY3XHU2M2UxXHU2YzgzXHU1ZGViXHU1NDVjXHU5NGE4XHU0ZTRjXHU2YzYxXHU4YmVjXHU1YzRiXHU2NWUwXHU4MjljXHU2OGE3XHU1NDNlXHU1NDM0XHU2YmNiXHU2YjY2XHU0ZTk0XHU2MzQyXHU1MzQ4'@;
put 'XHU4MjFlXHU0ZjBkXHU0ZmFlXHU1NzVlXHU2MjBhXHU5NmZlXHU2NjY0XHU3MjY5XHU1MmZmXHU1MmExXHU2MDlmXHU4YmVmXHU2NjE0XHU3MTk5XHU2NzkwXHU4OTdmXHU3ODUyXHU3N2ZkXHU2NjcwXHU1NjNiXHU1NDM4XHU5NTIxXHU3MjdhXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9b'@;
put 'MjA2XS5sZW5ndGg7KytnKTY1NTMzIT09X1syMDZdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjA2XVtnXV09NTI3MzYrZyx5WzUyNzM2K2ddPV9bMjA2XVtnXSk7Zm9yKF9bMjA3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4N2E1'@;
put 'XHU4N2E2XHU4N2E3XHU4N2E5XHU4N2FhXHU4N2FlXHU4N2IwXHU4N2IxXHU4N2IyXHU4N2I0XHU4N2I2XHU4N2I3XHU4N2I4XHU4N2I5XHU4N2JiXHU4N2JjXHU4N2JlXHU4N2JmXHU4N2MxXHU4N2MyXHU4N2MzXHU4N2M0XHU4N2M1XHU4N2M3XHU4N2M4XHU4N2M5XHU4N2NjXHU4N2NkXHU4'@;
put 'N2NlXHU4N2NmXHU4N2QwXHU4N2Q0XHU4N2Q1XHU4N2Q2XHU4N2Q3XHU4N2Q4XHU4N2Q5XHU4N2RhXHU4N2RjXHU4N2RkXHU4N2RlXHU4N2RmXHU4N2UxXHU4N2UyXHU4N2UzXHU4N2U0XHU4N2U2XHU4N2U3XHU4N2U4XHU4N2U5XHU4N2ViXHU4N2VjXHU4N2VkXHU4N2VmXHU4N2YwXHU4N2Yx'@;
put 'XHU4N2YyXHU4N2YzXHU4N2Y0XHU4N2Y1XHU4N2Y2XHU4N2Y3XHU4N2Y4XHVmZmZkXHU4N2ZhXHU4N2ZiXHU4N2ZjXHU4N2ZkXHU4N2ZmXHU4ODAwXHU4ODAxXHU4ODAyXHU4ODA0XHU4ODA1XHU4ODA2XHU4ODA3XHU4ODA4XHU4ODA5XHU4ODBiXHU4ODBjXHU4ODBkXHU4ODBlXHU4ODBmXHU4'@;
put 'ODEwXHU4ODExXHU4ODEyXHU4ODE0XHU4ODE3XHU4ODE4XHU4ODE5XHU4ODFhXHU4ODFjXHU4ODFkXHU4ODFlXHU4ODFmXHU4ODIwXHU4ODIzXHU3YTAwXHU2MDZmXHU1ZTBjXHU2MDg5XHU4MTlkXHU1OTE1XHU2MGRjXHU3MTg0XHU3MGVmXHU2ZWFhXHU2YzUwXHU3MjgwXHU2YTg0XHU4OGFk'@;
put 'XHU1ZTJkXHU0ZTYwXHU1YWIzXHU1NTljXHU5NGUzXHU2ZDE3XHU3Y2ZiXHU5Njk5XHU2MjBmXHU3ZWM2XHU3NzhlXHU4NjdlXHU1MzIzXHU5NzFlXHU4Zjk2XHU2Njg3XHU1Y2UxXHU0ZmEwXHU3MmVkXHU0ZTBiXHU1M2E2XHU1OTBmXHU1NDEzXHU2MzgwXHU5NTI4XHU1MTQ4XHU0ZWQ5XHU5'@;
put 'YzljXHU3ZWE0XHU1NGI4XHU4ZDI0XHU4ODU0XHU4MjM3XHU5NWYyXHU2ZDhlXHU1ZjI2XHU1YWNjXHU2NjNlXHU5NjY5XHU3M2IwXHU3MzJlXHU1M2JmXHU4MTdhXHU5OTg1XHU3ZmExXHU1YmFhXHU5Njc3XHU5NjUwXHU3ZWJmXHU3NmY4XHU1M2EyXHU5NTc2XHU5OTk5XHU3YmIxXHU4OTQ0'@;
put 'XHU2ZTU4XHU0ZTYxXHU3ZmQ0XHU3OTY1XHU4YmU2XHU2MGYzXHU1NGNkXHU0ZWFiXHU5ODc5XHU1ZGY3XHU2YTYxXHU1MGNmXHU1NDExXHU4YzYxXHU4NDI3XHU3ODVkXHU5NzA0XHU1MjRhXHU1NGVlXHU1NmEzXHU5NTAwXHU2ZDg4XHU1YmI1XHU2ZGM2XHU2NjUzXHVmZmZkIi5zcGxpdCgi'@;
put 'IiksZz0wO2chPV9bMjA3XS5sZW5ndGg7KytnKTY1NTMzIT09X1syMDddW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjA3XVtnXV09NTI5OTIrZyx5WzUyOTkyK2ddPV9bMjA3XVtnXSk7Zm9yKF9bMjA4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHU4ODI0XHU4ODI1XHU4ODI2XHU4ODI3XHU4ODI4XHU4ODI5XHU4ODJhXHU4ODJiXHU4ODJjXHU4ODJkXHU4ODJlXHU4ODJmXHU4ODMwXHU4ODMxXHU4ODMzXHU4ODM0XHU4ODM1XHU4ODM2XHU4ODM3XHU4ODM4XHU4ODNhXHU4ODNiXHU4ODNkXHU4ODNlXHU4ODNmXHU4ODQxXHU4'@;
put 'ODQyXHU4ODQzXHU4ODQ2XHU4ODQ3XHU4ODQ4XHU4ODQ5XHU4ODRhXHU4ODRiXHU4ODRlXHU4ODRmXHU4ODUwXHU4ODUxXHU4ODUyXHU4ODUzXHU4ODU1XHU4ODU2XHU4ODU4XHU4ODVhXHU4ODViXHU4ODVjXHU4ODVkXHU4ODVlXHU4ODVmXHU4ODYwXHU4ODY2XHU4ODY3XHU4ODZhXHU4ODZk'@;
put 'XHU4ODZmXHU4ODcxXHU4ODczXHU4ODc0XHU4ODc1XHU4ODc2XHU4ODc4XHU4ODc5XHU4ODdhXHVmZmZkXHU4ODdiXHU4ODdjXHU4ODgwXHU4ODgzXHU4ODg2XHU4ODg3XHU4ODg5XHU4ODhhXHU4ODhjXHU4ODhlXHU4ODhmXHU4ODkwXHU4ODkxXHU4ODkzXHU4ODk0XHU4ODk1XHU4ODk3XHU4'@;
put 'ODk4XHU4ODk5XHU4ODlhXHU4ODliXHU4ODlkXHU4ODllXHU4ODlmXHU4OGEwXHU4OGExXHU4OGEzXHU4OGE1XHU4OGE2XHU4OGE3XHU4OGE4XHU4OGE5XHU4OGFhXHU1YzBmXHU1YjVkXHU2ODIxXHU4MDk2XHU1NTc4XHU3YjExXHU2NTQ4XHU2OTU0XHU0ZTliXHU2YjQ3XHU4NzRlXHU5Nzhi'@;
put 'XHU1MzRmXHU2MzFmXHU2NDNhXHU5MGFhXHU2NTljXHU4MGMxXHU4YzEwXHU1MTk5XHU2OGIwXHU1Mzc4XHU4N2Y5XHU2MWM4XHU2Y2M0XHU2Y2ZiXHU4YzIyXHU1YzUxXHU4NWFhXHU4MmFmXHU5NTBjXHU2YjIzXHU4ZjliXHU2NWIwXHU1ZmZiXHU1ZmMzXHU0ZmUxXHU4ODQ1XHU2NjFmXHU4'@;
put 'MTY1XHU3MzI5XHU2MGZhXHU1MTc0XHU1MjExXHU1NzhiXHU1ZjYyXHU5MGEyXHU4ODRjXHU5MTkyXHU1ZTc4XHU2NzRmXHU2MDI3XHU1OWQzXHU1MTQ0XHU1MWY2XHU4MGY4XHU1MzA4XHU2Yzc5XHU5NmM0XHU3MThhXHU0ZjExXHU0ZmVlXHU3ZjllXHU2NzNkXHU1NWM1XHU5NTA4XHU3OWMw'@;
put 'XHU4ODk2XHU3ZWUzXHU1ODlmXHU2MjBjXHU5NzAwXHU4NjVhXHU1NjE4XHU5ODdiXHU1ZjkwXHU4YmI4XHU4NGM0XHU5MTU3XHU1M2Q5XHU2NWVkXHU1ZThmXHU3NTVjXHU2MDY0XHU3ZDZlXHU1YTdmXHU3ZWVhXHU3ZWVkXHU4ZjY5XHU1NWE3XHU1YmEzXHU2MGFjXHU2NWNiXHU3Mzg0XHVm'@;
put 'ZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjA4XS5sZW5ndGg7KytnKTY1NTMzIT09X1syMDhdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjA4XVtnXV09NTMyNDgrZyx5WzUzMjQ4K2ddPV9bMjA4XVtnXSk7Zm9yKF9bMjA5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHU4OGFjXHU4OGFlXHU4OGFmXHU4OGIwXHU4OGIyXHU4OGIzXHU4OGI0XHU4OGI1XHU4OGI2XHU4OGI4XHU4OGI5XHU4OGJhXHU4OGJiXHU4OGJkXHU4OGJlXHU4OGJmXHU4OGMwXHU4OGMzXHU4OGM0XHU4OGM3XHU4OGM4XHU4OGNhXHU4OGNiXHU4OGNjXHU4'@;
put 'OGNkXHU4OGNmXHU4OGQwXHU4OGQxXHU4OGQzXHU4OGQ2XHU4OGQ3XHU4OGRhXHU4OGRiXHU4OGRjXHU4OGRkXHU4OGRlXHU4OGUwXHU4OGUxXHU4OGU2XHU4OGU3XHU4OGU5XHU4OGVhXHU4OGViXHU4OGVjXHU4OGVkXHU4OGVlXHU4OGVmXHU4OGYyXHU4OGY1XHU4OGY2XHU4OGY3XHU4OGZh'@;
put 'XHU4OGZiXHU4OGZkXHU4OGZmXHU4OTAwXHU4OTAxXHU4OTAzXHU4OTA0XHU4OTA1XHU4OTA2XHU4OTA3XHU4OTA4XHVmZmZkXHU4OTA5XHU4OTBiXHU4OTBjXHU4OTBkXHU4OTBlXHU4OTBmXHU4OTExXHU4OTE0XHU4OTE1XHU4OTE2XHU4OTE3XHU4OTE4XHU4OTFjXHU4OTFkXHU4OTFlXHU4'@;
put 'OTFmXHU4OTIwXHU4OTIyXHU4OTIzXHU4OTI0XHU4OTI2XHU4OTI3XHU4OTI4XHU4OTI5XHU4OTJjXHU4OTJkXHU4OTJlXHU4OTJmXHU4OTMxXHU4OTMyXHU4OTMzXHU4OTM1XHU4OTM3XHU5MDA5XHU3NjYzXHU3NzI5XHU3ZWRhXHU5Nzc0XHU4NTliXHU1YjY2XHU3YTc0XHU5NmVhXHU4ODQw'@;
put 'XHU1MmNiXHU3MThmXHU1ZmFhXHU2NWVjXHU4YmUyXHU1YmZiXHU5YTZmXHU1ZGUxXHU2Yjg5XHU2YzViXHU4YmFkXHU4YmFmXHU5MDBhXHU4ZmM1XHU1MzhiXHU2MmJjXHU5ZTI2XHU5ZTJkXHU1NDQwXHU0ZTJiXHU4MmJkXHU3MjU5XHU4NjljXHU1ZDE2XHU4ODU5XHU2ZGFmXHU5NmM1XHU1'@;
put 'NGQxXHU0ZTlhXHU4YmI2XHU3MTA5XHU1NGJkXHU5NjA5XHU3MGRmXHU2ZGY5XHU3NmQwXHU0ZTI1XHU3ODE0XHU4NzEyXHU1Y2E5XHU1ZWY2XHU4YTAwXHU5ODljXHU5NjBlXHU3MDhlXHU2Y2JmXHU1OTQ0XHU2M2E5XHU3NzNjXHU4ODRkXHU2ZjE0XHU4MjczXHU1ODMwXHU3MWQ1XHU1Mzhj'@;
put 'XHU3ODFhXHU5NmMxXHU1NTAxXHU1ZjY2XHU3MTMwXHU1YmI0XHU4YzFhXHU5YThjXHU2YjgzXHU1OTJlXHU5ZTJmXHU3OWU3XHU2NzY4XHU2MjZjXHU0ZjZmXHU3NWExXHU3ZjhhXHU2ZDBiXHU5NjMzXHU2YzI3XHU0ZWYwXHU3NWQyXHU1MTdiXHU2ODM3XHU2ZjNlXHU5MDgwXHU4MTcwXHU1'@;
put 'OTk2XHU3NDc2XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjA5XS5sZW5ndGg7KytnKTY1NTMzIT09X1syMDldW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjA5XVtnXV09NTM1MDQrZyx5WzUzNTA0K2ddPV9bMjA5XVtnXSk7Zm9yKF9bMjEwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4OTM4XHU4OTM5XHU4OTNhXHU4OTNiXHU4OTNjXHU4OTNkXHU4OTNlXHU4OTNmXHU4OTQwXHU4OTQyXHU4OTQzXHU4OTQ1XHU4OTQ2XHU4OTQ3XHU4OTQ4XHU4OTQ5XHU4OTRhXHU4OTRiXHU4OTRjXHU4OTRkXHU4OTRlXHU4OTRmXHU4'@;
put 'OTUwXHU4OTUxXHU4OTUyXHU4OTUzXHU4OTU0XHU4OTU1XHU4OTU2XHU4OTU3XHU4OTU4XHU4OTU5XHU4OTVhXHU4OTViXHU4OTVjXHU4OTVkXHU4OTYwXHU4OTYxXHU4OTYyXHU4OTYzXHU4OTY0XHU4OTY1XHU4OTY3XHU4OTY4XHU4OTY5XHU4OTZhXHU4OTZiXHU4OTZjXHU4OTZkXHU4OTZl'@;
put 'XHU4OTZmXHU4OTcwXHU4OTcxXHU4OTcyXHU4OTczXHU4OTc0XHU4OTc1XHU4OTc2XHU4OTc3XHU4OTc4XHU4OTc5XHU4OTdhXHU4OTdjXHVmZmZkXHU4OTdkXHU4OTdlXHU4OTgwXHU4OTgyXHU4OTg0XHU4OTg1XHU4OTg3XHU4OTg4XHU4OTg5XHU4OThhXHU4OThiXHU4OThjXHU4OThkXHU4'@;
put 'OThlXHU4OThmXHU4OTkwXHU4OTkxXHU4OTkyXHU4OTkzXHU4OTk0XHU4OTk1XHU4OTk2XHU4OTk3XHU4OTk4XHU4OTk5XHU4OTlhXHU4OTliXHU4OTljXHU4OTlkXHU4OTllXHU4OTlmXHU4OWEwXHU4OWExXHU2NDQ3XHU1YzI3XHU5MDY1XHU3YTkxXHU4YzIzXHU1OWRhXHU1NGFjXHU4MjAw'@;
put 'XHU4MzZmXHU4OTgxXHU4MDAwXHU2OTMwXHU1NjRlXHU4MDM2XHU3MjM3XHU5MWNlXHU1MWI2XHU0ZTVmXHU5ODc1XHU2Mzk2XHU0ZTFhXHU1M2Y2XHU2NmYzXHU4MTRiXHU1OTFjXHU2ZGIyXHU0ZTAwXHU1OGY5XHU1MzNiXHU2M2Q2XHU5NGYxXHU0ZjlkXHU0ZjBhXHU4ODYzXHU5ODkwXHU1'@;
put 'OTM3XHU5MDU3XHU3OWZiXHU0ZWVhXHU4MGYwXHU3NTkxXHU2YzgyXHU1YjljXHU1OWU4XHU1ZjVkXHU2OTA1XHU4NjgxXHU1MDFhXHU1ZGYyXHU0ZTU5XHU3N2UzXHU0ZWU1XHU4MjdhXHU2MjkxXHU2NjEzXHU5MDkxXHU1Yzc5XHU0ZWJmXHU1Zjc5XHU4MWM2XHU5MDM4XHU4MDg0XHU3NWFi'@;
put 'XHU0ZWE2XHU4OGQ0XHU2MTBmXHU2YmM1XHU1ZmM2XHU0ZTQ5XHU3NmNhXHU2ZWEyXHU4YmUzXHU4YmFlXHU4YzBhXHU4YmQxXHU1ZjAyXHU3ZmZjXHU3ZmNjXHU3ZWNlXHU4MzM1XHU4MzZiXHU1NmUwXHU2YmI3XHU5N2YzXHU5NjM0XHU1OWZiXHU1NDFmXHU5NGY2XHU2ZGViXHU1YmM1XHU5'@;
put 'OTZlXHU1YzM5XHU1ZjE1XHU5NjkwXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjEwXS5sZW5ndGg7KytnKTY1NTMzIT09X1syMTBdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjEwXVtnXV09NTM3NjArZyx5WzUzNzYwK2ddPV9bMjEwXVtnXSk7Zm9yKF9bMjExXT0iXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4OWEyXHU4OWEzXHU4OWE0XHU4OWE1XHU4OWE2XHU4OWE3XHU4OWE4XHU4OWE5XHU4OWFhXHU4OWFiXHU4OWFjXHU4OWFkXHU4OWFlXHU4OWFmXHU4OWIwXHU4OWIxXHU4OWIyXHU4OWIzXHU4OWI0XHU4OWI1XHU4'@;
put 'OWI2XHU4OWI3XHU4OWI4XHU4OWI5XHU4OWJhXHU4OWJiXHU4OWJjXHU4OWJkXHU4OWJlXHU4OWJmXHU4OWMwXHU4OWMzXHU4OWNkXHU4OWQzXHU4OWQ0XHU4OWQ1XHU4OWQ3XHU4OWQ4XHU4OWQ5XHU4OWRiXHU4OWRkXHU4OWRmXHU4OWUwXHU4OWUxXHU4OWUyXHU4OWU0XHU4OWU3XHU4OWU4'@;
put 'XHU4OWU5XHU4OWVhXHU4OWVjXHU4OWVkXHU4OWVlXHU4OWYwXHU4OWYxXHU4OWYyXHU4OWY0XHU4OWY1XHU4OWY2XHU4OWY3XHU4OWY4XHU4OWY5XHU4OWZhXHVmZmZkXHU4OWZiXHU4OWZjXHU4OWZkXHU4OWZlXHU4OWZmXHU4YTAxXHU4YTAyXHU4YTAzXHU4YTA0XHU4YTA1XHU4YTA2XHU4'@;
put 'YTA4XHU4YTA5XHU4YTBhXHU4YTBiXHU4YTBjXHU4YTBkXHU4YTBlXHU4YTBmXHU4YTEwXHU4YTExXHU4YTEyXHU4YTEzXHU4YTE0XHU4YTE1XHU4YTE2XHU4YTE3XHU4YTE4XHU4YTE5XHU4YTFhXHU4YTFiXHU4YTFjXHU4YTFkXHU1MzcwXHU4MmYxXHU2YTMxXHU1YTc0XHU5ZTcwXHU1ZTk0'@;
put 'XHU3ZjI4XHU4M2I5XHU4NDI0XHU4NDI1XHU4MzY3XHU4NzQ3XHU4ZmNlXHU4ZDYyXHU3NmM4XHU1ZjcxXHU5ODk2XHU3ODZjXHU2NjIwXHU1NGRmXHU2MmU1XHU0ZjYzXHU4MWMzXHU3NWM4XHU1ZWI4XHU5NmNkXHU4ZTBhXHU4NmY5XHU1NDhmXHU2Y2YzXHU2ZDhjXHU2YzM4XHU2MDdmXHU1'@;
put 'MmM3XHU3NTI4XHU1ZTdkXHU0ZjE4XHU2MGEwXHU1ZmU3XHU1YzI0XHU3NTMxXHU5MGFlXHU5NGMwXHU3MmI5XHU2Y2I5XHU2ZTM4XHU5MTQ5XHU2NzA5XHU1M2NiXHU1M2YzXHU0ZjUxXHU5MWM5XHU4YmYxXHU1M2M4XHU1ZTdjXHU4ZmMyXHU2ZGU0XHU0ZThlXHU3NmMyXHU2OTg2XHU4NjVl'@;
put 'XHU2MTFhXHU4MjA2XHU0ZjU5XHU0ZmRlXHU5MDNlXHU5YzdjXHU2MTA5XHU2ZTFkXHU2ZTE0XHU5Njg1XHU0ZTg4XHU1YTMxXHU5NmU4XHU0ZTBlXHU1YzdmXHU3OWI5XHU1Yjg3XHU4YmVkXHU3ZmJkXHU3Mzg5XHU1N2RmXHU4MjhiXHU5MGMxXHU1NDAxXHU5MDQ3XHU1NWJiXHU1Y2VhXHU1'@;
put 'ZmExXHU2MTA4XHU2YjMyXHU3MmYxXHU4MGIyXHU4YTg5XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjExXS5sZW5ndGg7KytnKTY1NTMzIT09X1syMTFdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjExXVtnXV09NTQwMTYrZyx5WzU0MDE2K2ddPV9bMjExXVtnXSk7Zm9yKF9bMjEyXT0i'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4YTFlXHU4YTFmXHU4YTIwXHU4YTIxXHU4YTIyXHU4YTIzXHU4YTI0XHU4YTI1XHU4YTI2XHU4YTI3XHU4YTI4XHU4YTI5XHU4YTJhXHU4YTJiXHU4YTJjXHU4YTJkXHU4YTJlXHU4YTJmXHU4'@;
put 'YTMwXHU4YTMxXHU4YTMyXHU4YTMzXHU4YTM0XHU4YTM1XHU4YTM2XHU4YTM3XHU4YTM4XHU4YTM5XHU4YTNhXHU4YTNiXHU4YTNjXHU4YTNkXHU4YTNmXHU4YTQwXHU4YTQxXHU4YTQyXHU4YTQzXHU4YTQ0XHU4YTQ1XHU4YTQ2XHU4YTQ3XHU4YTQ5XHU4YTRhXHU4YTRiXHU4YTRjXHU4YTRk'@;
put 'XHU4YTRlXHU4YTRmXHU4YTUwXHU4YTUxXHU4YTUyXHU4YTUzXHU4YTU0XHU4YTU1XHU4YTU2XHU4YTU3XHU4YTU4XHU4YTU5XHU4YTVhXHU4YTViXHU4YTVjXHU4YTVkXHU4YTVlXHVmZmZkXHU4YTVmXHU4YTYwXHU4YTYxXHU4YTYyXHU4YTYzXHU4YTY0XHU4YTY1XHU4YTY2XHU4YTY3XHU4'@;
put 'YTY4XHU4YTY5XHU4YTZhXHU4YTZiXHU4YTZjXHU4YTZkXHU4YTZlXHU4YTZmXHU4YTcwXHU4YTcxXHU4YTcyXHU4YTczXHU4YTc0XHU4YTc1XHU4YTc2XHU4YTc3XHU4YTc4XHU4YTdhXHU4YTdiXHU4YTdjXHU4YTdkXHU4YTdlXHU4YTdmXHU4YTgwXHU2ZDc0XHU1YmQzXHU4OGQ1XHU5ODg0'@;
put 'XHU4YzZiXHU5YTZkXHU5ZTMzXHU2ZTBhXHU1MWE0XHU1MTQzXHU1N2EzXHU4ODgxXHU1MzlmXHU2M2Y0XHU4Zjk1XHU1NmVkXHU1NDU4XHU1NzA2XHU3MzNmXHU2ZTkwXHU3ZjE4XHU4ZmRjXHU4MmQxXHU2MTNmXHU2MDI4XHU5NjYyXHU2NmYwXHU3ZWE2XHU4ZDhhXHU4ZGMzXHU5NGE1XHU1'@;
put 'Y2IzXHU3Y2E0XHU2NzA4XHU2MGE2XHU5NjA1XHU4MDE4XHU0ZTkxXHU5MGU3XHU1MzAwXHU5NjY4XHU1MTQxXHU4ZmQwXHU4NTc0XHU5MTVkXHU2NjU1XHU5N2Y1XHU1YjU1XHU1MzFkXHU3ODM4XHU2NzQyXHU2ODNkXHU1NGM5XHU3MDdlXHU1YmIwXHU4ZjdkXHU1MThkXHU1NzI4XHU1NGIx'@;
put 'XHU2NTEyXHU2NjgyXHU4ZDVlXHU4ZDQzXHU4MTBmXHU4NDZjXHU5MDZkXHU3Y2RmXHU1MWZmXHU4NWZiXHU2N2EzXHU2NWU5XHU2ZmExXHU4NmE0XHU4ZTgxXHU1NjZhXHU5MDIwXHU3NjgyXHU3MDc2XHU3MWU1XHU4ZDIzXHU2MmU5XHU1MjE5XHU2Y2ZkXHU4ZDNjXHU2MDBlXHU1ODllXHU2'@;
put 'MThlXHU2NmZlXHU4ZDYwXHU2MjRlXHU1NWIzXHU2ZTIzXHU2NzJkXHU4ZjY3XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjEyXS5sZW5ndGg7KytnKTY1NTMzIT09X1syMTJdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjEyXVtnXV09NTQyNzIrZyx5WzU0MjcyK2ddPV9bMjEyXVtnXSk7'@;
put 'Zm9yKF9bMjEzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4YTgxXHU4YTgyXHU4YTgzXHU4YTg0XHU4YTg1XHU4YTg2XHU4YTg3XHU4YTg4XHU4YThiXHU4YThjXHU4YThkXHU4YThlXHU4YThmXHU4YTkwXHU4YTkxXHU4YTkyXHU4'@;
put 'YTk0XHU4YTk1XHU4YTk2XHU4YTk3XHU4YTk4XHU4YTk5XHU4YTlhXHU4YTliXHU4YTljXHU4YTlkXHU4YTllXHU4YTlmXHU4YWEwXHU4YWExXHU4YWEyXHU4YWEzXHU4YWE0XHU4YWE1XHU4YWE2XHU4YWE3XHU4YWE4XHU4YWE5XHU4YWFhXHU4YWFiXHU4YWFjXHU4YWFkXHU4YWFlXHU4YWFm'@;
put 'XHU4YWIwXHU4YWIxXHU4YWIyXHU4YWIzXHU4YWI0XHU4YWI1XHU4YWI2XHU4YWI3XHU4YWI4XHU4YWI5XHU4YWJhXHU4YWJiXHU4YWJjXHU4YWJkXHU4YWJlXHU4YWJmXHU4YWMwXHU4YWMxXHU4YWMyXHVmZmZkXHU4YWMzXHU4YWM0XHU4YWM1XHU4YWM2XHU4YWM3XHU4YWM4XHU4YWM5XHU4'@;
put 'YWNhXHU4YWNiXHU4YWNjXHU4YWNkXHU4YWNlXHU4YWNmXHU4YWQwXHU4YWQxXHU4YWQyXHU4YWQzXHU4YWQ0XHU4YWQ1XHU4YWQ2XHU4YWQ3XHU4YWQ4XHU4YWQ5XHU4YWRhXHU4YWRiXHU4YWRjXHU4YWRkXHU4YWRlXHU4YWRmXHU4YWUwXHU4YWUxXHU4YWUyXHU4YWUzXHU5NGUxXHU5NWY4'@;
put 'XHU3NzI4XHU2ODA1XHU2OWE4XHU1NDhiXHU0ZTRkXHU3MGI4XHU4YmM4XHU2NDU4XHU2NThiXHU1Yjg1XHU3YTg0XHU1MDNhXHU1YmU4XHU3N2JiXHU2YmUxXHU4YTc5XHU3Yzk4XHU2Y2JlXHU3NmNmXHU2NWE5XHU4Zjk3XHU1ZDJkXHU1YzU1XHU4NjM4XHU2ODA4XHU1MzYwXHU2MjE4XHU3'@;
put 'YWQ5XHU2ZTViXHU3ZWZkXHU2YTFmXHU3YWUwXHU1ZjcwXHU2ZjMzXHU1ZjIwXHU2MzhjXHU2ZGE4XHU2NzU2XHU0ZTA4XHU1ZTEwXHU4ZDI2XHU0ZWQ3XHU4MGMwXHU3NjM0XHU5NjljXHU2MmRiXHU2NjJkXHU2MjdlXHU2Y2JjXHU4ZDc1XHU3MTY3XHU3ZjY5XHU1MTQ2XHU4MDg3XHU1M2Vj'@;
put 'XHU5MDZlXHU2Mjk4XHU1NGYyXHU4NmYwXHU4Zjk5XHU4MDA1XHU5NTE3XHU4NTE3XHU4ZmQ5XHU2ZDU5XHU3M2NkXHU2NTlmXHU3NzFmXHU3NTA0XHU3ODI3XHU4MWZiXHU4ZDFlXHU5NDg4XHU0ZmE2XHU2Nzk1XHU3NWI5XHU4YmNhXHU5NzA3XHU2MzJmXHU5NTQ3XHU5NjM1XHU4NGI4XHU2'@;
put 'MzIzXHU3NzQxXHU1ZjgxXHU3MmYwXHU0ZTg5XHU2MDE0XHU2NTc0XHU2MmVmXHU2YjYzXHU2NTNmXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjEzXS5sZW5ndGg7KytnKTY1NTMzIT09X1syMTNdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjEzXVtnXV09NTQ1MjgrZyx5WzU0NTI4K2dd'@;
put 'PV9bMjEzXVtnXSk7Zm9yKF9bMjE0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4YWU0XHU4YWU1XHU4YWU2XHU4YWU3XHU4YWU4XHU4YWU5XHU4YWVhXHU4YWViXHU4YWVjXHU4YWVkXHU4YWVlXHU4YWVmXHU4YWYwXHU4YWYxXHU4'@;
put 'YWYyXHU4YWYzXHU4YWY0XHU4YWY1XHU4YWY2XHU4YWY3XHU4YWY4XHU4YWY5XHU4YWZhXHU4YWZiXHU4YWZjXHU4YWZkXHU4YWZlXHU4YWZmXHU4YjAwXHU4YjAxXHU4YjAyXHU4YjAzXHU4YjA0XHU4YjA1XHU4YjA2XHU4YjA4XHU4YjA5XHU4YjBhXHU4YjBiXHU4YjBjXHU4YjBkXHU4YjBl'@;
put 'XHU4YjBmXHU4YjEwXHU4YjExXHU4YjEyXHU4YjEzXHU4YjE0XHU4YjE1XHU4YjE2XHU4YjE3XHU4YjE4XHU4YjE5XHU4YjFhXHU4YjFiXHU4YjFjXHU4YjFkXHU4YjFlXHU4YjFmXHU4YjIwXHU4YjIxXHU4YjIyXHU4YjIzXHVmZmZkXHU4YjI0XHU4YjI1XHU4YjI3XHU4YjI4XHU4YjI5XHU4'@;
put 'YjJhXHU4YjJiXHU4YjJjXHU4YjJkXHU4YjJlXHU4YjJmXHU4YjMwXHU4YjMxXHU4YjMyXHU4YjMzXHU4YjM0XHU4YjM1XHU4YjM2XHU4YjM3XHU4YjM4XHU4YjM5XHU4YjNhXHU4YjNiXHU4YjNjXHU4YjNkXHU4YjNlXHU4YjNmXHU4YjQwXHU4YjQxXHU4YjQyXHU4YjQzXHU4YjQ0XHU4YjQ1'@;
put 'XHU1ZTI3XHU3NWM3XHU5MGQxXHU4YmMxXHU4MjlkXHU2NzlkXHU2NTJmXHU1NDMxXHU4NzE4XHU3N2U1XHU4MGEyXHU4MTAyXHU2YzQxXHU0ZTRiXHU3ZWM3XHU4MDRjXHU3NmY0XHU2OTBkXHU2Yjk2XHU2MjY3XHU1MDNjXHU0Zjg0XHU1NzQwXHU2MzA3XHU2YjYyXHU4ZGJlXHU1M2VhXHU2'@;
put 'NWU4XHU3ZWI4XHU1ZmQ3XHU2MzFhXHU2M2I3XHU4MWYzXHU4MWY0XHU3ZjZlXHU1ZTFjXHU1Y2Q5XHU1MjM2XHU2NjdhXHU3OWU5XHU3YTFhXHU4ZDI4XHU3MDk5XHU3NWQ0XHU2ZWRlXHU2Y2JiXHU3YTkyXHU0ZTJkXHU3NmM1XHU1ZmUwXHU5NDlmXHU4ODc3XHU3ZWM4XHU3OWNkXHU4MGJm'@;
put 'XHU5MWNkXHU0ZWYyXHU0ZjE3XHU4MjFmXHU1NDY4XHU1ZGRlXHU2ZDMyXHU4YmNjXHU3Y2E1XHU4Zjc0XHU4MDk4XHU1ZTFhXHU1NDkyXHU3NmIxXHU1Yjk5XHU2NjNjXHU5YWE0XHU3M2UwXHU2ODJhXHU4NmRiXHU2NzMxXHU3MzJhXHU4YmY4XHU4YmRiXHU5MDEwXHU3YWY5XHU3MGRiXHU3'@;
put 'MTZlXHU2MmM0XHU3N2E5XHU1NjMxXHU0ZTNiXHU4NDU3XHU2N2YxXHU1MmE5XHU4NmMwXHU4ZDJlXHU5NGY4XHU3YjUxXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjE0XS5sZW5ndGg7KytnKTY1NTMzIT09X1syMTRdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjE0XVtnXV09NTQ3ODQr'@;
put 'Zyx5WzU0Nzg0K2ddPV9bMjE0XVtnXSk7Zm9yKF9bMjE1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4YjQ2XHU4YjQ3XHU4YjQ4XHU4YjQ5XHU4YjRhXHU4YjRiXHU4YjRjXHU4YjRkXHU4YjRlXHU4YjRmXHU4YjUwXHU4YjUxXHU4'@;
put 'YjUyXHU4YjUzXHU4YjU0XHU4YjU1XHU4YjU2XHU4YjU3XHU4YjU4XHU4YjU5XHU4YjVhXHU4YjViXHU4YjVjXHU4YjVkXHU4YjVlXHU4YjVmXHU4YjYwXHU4YjYxXHU4YjYyXHU4YjYzXHU4YjY0XHU4YjY1XHU4YjY3XHU4YjY4XHU4YjY5XHU4YjZhXHU4YjZiXHU4YjZkXHU4YjZlXHU4YjZm'@;
put 'XHU4YjcwXHU4YjcxXHU4YjcyXHU4YjczXHU4Yjc0XHU4Yjc1XHU4Yjc2XHU4Yjc3XHU4Yjc4XHU4Yjc5XHU4YjdhXHU4YjdiXHU4YjdjXHU4YjdkXHU4YjdlXHU4YjdmXHU4YjgwXHU4YjgxXHU4YjgyXHU4YjgzXHU4Yjg0XHU4Yjg1XHU4Yjg2XHVmZmZkXHU4Yjg3XHU4Yjg4XHU4Yjg5XHU4'@;
put 'YjhhXHU4YjhiXHU4YjhjXHU4YjhkXHU4YjhlXHU4YjhmXHU4YjkwXHU4YjkxXHU4YjkyXHU4YjkzXHU4Yjk0XHU4Yjk1XHU4Yjk2XHU4Yjk3XHU4Yjk4XHU4Yjk5XHU4YjlhXHU4YjliXHU4YjljXHU4YjlkXHU4YjllXHU4YjlmXHU4YmFjXHU4YmIxXHU4YmJiXHU4YmM3XHU4YmQwXHU4YmVh'@;
put 'XHU4YzA5XHU4YzFlXHU0ZjRmXHU2Y2U4XHU3OTVkXHU5YTdiXHU2MjkzXHU3MjJhXHU2MmZkXHU0ZTEzXHU3ODE2XHU4ZjZjXHU2NGIwXHU4ZDVhXHU3YmM2XHU2ODY5XHU1ZTg0XHU4OGM1XHU1OTg2XHU2NDllXHU1OGVlXHU3MmI2XHU2OTBlXHU5NTI1XHU4ZmZkXHU4ZDU4XHU1NzYwXHU3'@;
put 'ZjAwXHU4YzA2XHU1MWM2XHU2MzQ5XHU2MmQ5XHU1MzUzXHU2ODRjXHU3NDIyXHU4MzAxXHU5MTRjXHU1NTQ0XHU3NzQwXHU3MDdjXHU2ZDRhXHU1MTc5XHU1NGE4XHU4ZDQ0XHU1OWZmXHU2ZWNiXHU2ZGM0XHU1YjVjXHU3ZDJiXHU0ZWQ0XHU3YzdkXHU2ZWQzXHU1YjUwXHU4MWVhXHU2ZTBk'@;
put 'XHU1YjU3XHU5YjAzXHU2OGQ1XHU4ZTJhXHU1Yjk3XHU3ZWZjXHU2MDNiXHU3ZWI1XHU5MGI5XHU4ZDcwXHU1OTRmXHU2M2NkXHU3OWRmXHU4ZGIzXHU1MzUyXHU2NWNmXHU3OTU2XHU4YmM1XHU5NjNiXHU3ZWM0XHU5NGJiXHU3ZTgyXHU1NjM0XHU5MTg5XHU2NzAwXHU3ZjZhXHU1YzBhXHU5'@;
put 'MDc1XHU2NjI4XHU1ZGU2XHU0ZjUwXHU2N2RlXHU1MDVhXHU0ZjVjXHU1NzUwXHU1ZWE3XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjE1XS5sZW5ndGg7KytnKTY1NTMzIT09X1syMTVdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjE1'@;
put 'XVtnXV09NTUwNDArZyx5WzU1MDQwK2ddPV9bMjE1XVtnXSk7Zm9yKF9bMjE2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4YzM4XHU4YzM5XHU4YzNhXHU4YzNiXHU4YzNjXHU4YzNkXHU4YzNlXHU4YzNmXHU4YzQwXHU4YzQyXHU4'@;
put 'YzQzXHU4YzQ0XHU4YzQ1XHU4YzQ4XHU4YzRhXHU4YzRiXHU4YzRkXHU4YzRlXHU4YzRmXHU4YzUwXHU4YzUxXHU4YzUyXHU4YzUzXHU4YzU0XHU4YzU2XHU4YzU3XHU4YzU4XHU4YzU5XHU4YzViXHU4YzVjXHU4YzVkXHU4YzVlXHU4YzVmXHU4YzYwXHU4YzYzXHU4YzY0XHU4YzY1XHU4YzY2'@;
put 'XHU4YzY3XHU4YzY4XHU4YzY5XHU4YzZjXHU4YzZkXHU4YzZlXHU4YzZmXHU4YzcwXHU4YzcxXHU4YzcyXHU4Yzc0XHU4Yzc1XHU4Yzc2XHU4Yzc3XHU4YzdiXHU4YzdjXHU4YzdkXHU4YzdlXHU4YzdmXHU4YzgwXHU4YzgxXHU4YzgzXHU4Yzg0XHU4Yzg2XHU4Yzg3XHVmZmZkXHU4Yzg4XHU4'@;
put 'YzhiXHU4YzhkXHU4YzhlXHU4YzhmXHU4YzkwXHU4YzkxXHU4YzkyXHU4YzkzXHU4Yzk1XHU4Yzk2XHU4Yzk3XHU4Yzk5XHU4YzlhXHU4YzliXHU4YzljXHU4YzlkXHU4YzllXHU4YzlmXHU4Y2EwXHU4Y2ExXHU4Y2EyXHU4Y2EzXHU4Y2E0XHU4Y2E1XHU4Y2E2XHU4Y2E3XHU4Y2E4XHU4Y2E5'@;
put 'XHU4Y2FhXHU4Y2FiXHU4Y2FjXHU4Y2FkXHU0ZThkXHU0ZTBjXHU1MTQwXHU0ZTEwXHU1ZWZmXHU1MzQ1XHU0ZTE1XHU0ZTk4XHU0ZTFlXHU5YjMyXHU1YjZjXHU1NjY5XHU0ZTI4XHU3OWJhXHU0ZTNmXHU1MzE1XHU0ZTQ3XHU1OTJkXHU3MjNiXHU1MzZlXHU2YzEwXHU1NmRmXHU4MGU0XHU5'@;
put 'OTk3XHU2YmQzXHU3NzdlXHU5ZjE3XHU0ZTM2XHU0ZTlmXHU5ZjEwXHU0ZTVjXHU0ZTY5XHU0ZTkzXHU4Mjg4XHU1YjViXHU1NTZjXHU1NjBmXHU0ZWM0XHU1MzhkXHU1MzlkXHU1M2EzXHU1M2E1XHU1M2FlXHU5NzY1XHU4ZDVkXHU1MzFhXHU1M2Y1XHU1MzI2XHU1MzJlXHU1MzNlXHU4ZDVj'@;
put 'XHU1MzY2XHU1MzYzXHU1MjAyXHU1MjA4XHU1MjBlXHU1MjJkXHU1MjMzXHU1MjNmXHU1MjQwXHU1MjRjXHU1MjVlXHU1MjYxXHU1MjVjXHU4NGFmXHU1MjdkXHU1MjgyXHU1MjgxXHU1MjkwXHU1MjkzXHU1MTgyXHU3ZjU0XHU0ZWJiXHU0ZWMzXHU0ZWM5XHU0ZWMyXHU0ZWU4XHU0ZWUxXHU0'@;
put 'ZWViXHU0ZWRlXHU0ZjFiXHU0ZWYzXHU0ZjIyXHU0ZjY0XHU0ZWY1XHU0ZjI1XHU0ZjI3XHU0ZjA5XHU0ZjJiXHU0ZjVlXHU0ZjY3XHU2NTM4XHU0ZjVhXHU0ZjVkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjE2XS5sZW5ndGg7KytnKTY1NTMzIT09X1syMTZdW2ddLmNoYXJDb2RlQXQo'@;
put 'MCkmJihJW19bMjE2XVtnXV09NTUyOTYrZyx5WzU1Mjk2K2ddPV9bMjE2XVtnXSk7Zm9yKF9bMjE3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4Y2FlXHU4Y2FmXHU4Y2IwXHU4Y2IxXHU4Y2IyXHU4Y2IzXHU4Y2I0XHU4Y2I1XHU4'@;
put 'Y2I2XHU4Y2I3XHU4Y2I4XHU4Y2I5XHU4Y2JhXHU4Y2JiXHU4Y2JjXHU4Y2JkXHU4Y2JlXHU4Y2JmXHU4Y2MwXHU4Y2MxXHU4Y2MyXHU4Y2MzXHU4Y2M0XHU4Y2M1XHU4Y2M2XHU4Y2M3XHU4Y2M4XHU4Y2M5XHU4Y2NhXHU4Y2NiXHU4Y2NjXHU4Y2NkXHU4Y2NlXHU4Y2NmXHU4Y2QwXHU4Y2Qx'@;
put 'XHU4Y2QyXHU4Y2QzXHU4Y2Q0XHU4Y2Q1XHU4Y2Q2XHU4Y2Q3XHU4Y2Q4XHU4Y2Q5XHU4Y2RhXHU4Y2RiXHU4Y2RjXHU4Y2RkXHU4Y2RlXHU4Y2RmXHU4Y2UwXHU4Y2UxXHU4Y2UyXHU4Y2UzXHU4Y2U0XHU4Y2U1XHU4Y2U2XHU4Y2U3XHU4Y2U4XHU4Y2U5XHU4Y2VhXHU4Y2ViXHU4Y2VjXHVm'@;
put 'ZmZkXHU4Y2VkXHU4Y2VlXHU4Y2VmXHU4Y2YwXHU4Y2YxXHU4Y2YyXHU4Y2YzXHU4Y2Y0XHU4Y2Y1XHU4Y2Y2XHU4Y2Y3XHU4Y2Y4XHU4Y2Y5XHU4Y2ZhXHU4Y2ZiXHU4Y2ZjXHU4Y2ZkXHU4Y2ZlXHU4Y2ZmXHU4ZDAwXHU4ZDAxXHU4ZDAyXHU4ZDAzXHU4ZDA0XHU4ZDA1XHU4ZDA2XHU4ZDA3'@;
put 'XHU4ZDA4XHU4ZDA5XHU4ZDBhXHU4ZDBiXHU4ZDBjXHU4ZDBkXHU0ZjVmXHU0ZjU3XHU0ZjMyXHU0ZjNkXHU0Zjc2XHU0Zjc0XHU0ZjkxXHU0Zjg5XHU0ZjgzXHU0ZjhmXHU0ZjdlXHU0ZjdiXHU0ZmFhXHU0ZjdjXHU0ZmFjXHU0Zjk0XHU0ZmU2XHU0ZmU4XHU0ZmVhXHU0ZmM1XHU0ZmRhXHU0'@;
put 'ZmUzXHU0ZmRjXHU0ZmQxXHU0ZmRmXHU0ZmY4XHU1MDI5XHU1MDRjXHU0ZmYzXHU1MDJjXHU1MDBmXHU1MDJlXHU1MDJkXHU0ZmZlXHU1MDFjXHU1MDBjXHU1MDI1XHU1MDI4XHU1MDdlXHU1MDQzXHU1MDU1XHU1MDQ4XHU1MDRlXHU1MDZjXHU1MDdiXHU1MGE1XHU1MGE3XHU1MGE5XHU1MGJh'@;
put 'XHU1MGQ2XHU1MTA2XHU1MGVkXHU1MGVjXHU1MGU2XHU1MGVlXHU1MTA3XHU1MTBiXHU0ZWRkXHU2YzNkXHU0ZjU4XHU0ZjY1XHU0ZmNlXHU5ZmEwXHU2YzQ2XHU3Yzc0XHU1MTZlXHU1ZGZkXHU5ZWM5XHU5OTk4XHU1MTgxXHU1OTE0XHU1MmY5XHU1MzBkXHU4YTA3XHU1MzEwXHU1MWViXHU1'@;
put 'OTE5XHU1MTU1XHU0ZWEwXHU1MTU2XHU0ZWIzXHU4ODZlXHU4OGE0XHU0ZWI1XHU4MTE0XHU4OGQyXHU3OTgwXHU1YjM0XHU4ODAzXHU3ZmI4XHU1MWFiXHU1MWIxXHU1MWJkXHU1MWJjXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjE3XS5sZW5ndGg7KytnKTY1NTMzIT09X1syMTddW2dd'@;
put 'LmNoYXJDb2RlQXQoMCkmJihJW19bMjE3XVtnXV09NTU1NTIrZyx5WzU1NTUyK2ddPV9bMjE3XVtnXSk7Zm9yKF9bMjE4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4ZDBlXHU4ZDBmXHU4ZDEwXHU4ZDExXHU4ZDEyXHU4ZDEzXHU4'@;
put 'ZDE0XHU4ZDE1XHU4ZDE2XHU4ZDE3XHU4ZDE4XHU4ZDE5XHU4ZDFhXHU4ZDFiXHU4ZDFjXHU4ZDIwXHU4ZDUxXHU4ZDUyXHU4ZDU3XHU4ZDVmXHU4ZDY1XHU4ZDY4XHU4ZDY5XHU4ZDZhXHU4ZDZjXHU4ZDZlXHU4ZDZmXHU4ZDcxXHU4ZDcyXHU4ZDc4XHU4ZDc5XHU4ZDdhXHU4ZDdiXHU4ZDdj'@;
put 'XHU4ZDdkXHU4ZDdlXHU4ZDdmXHU4ZDgwXHU4ZDgyXHU4ZDgzXHU4ZDg2XHU4ZDg3XHU4ZDg4XHU4ZDg5XHU4ZDhjXHU4ZDhkXHU4ZDhlXHU4ZDhmXHU4ZDkwXHU4ZDkyXHU4ZDkzXHU4ZDk1XHU4ZDk2XHU4ZDk3XHU4ZDk4XHU4ZDk5XHU4ZDlhXHU4ZDliXHU4ZDljXHU4ZDlkXHU4ZDllXHU4'@;
put 'ZGEwXHU4ZGExXHVmZmZkXHU4ZGEyXHU4ZGE0XHU4ZGE1XHU4ZGE2XHU4ZGE3XHU4ZGE4XHU4ZGE5XHU4ZGFhXHU4ZGFiXHU4ZGFjXHU4ZGFkXHU4ZGFlXHU4ZGFmXHU4ZGIwXHU4ZGIyXHU4ZGI2XHU4ZGI3XHU4ZGI5XHU4ZGJiXHU4ZGJkXHU4ZGMwXHU4ZGMxXHU4ZGMyXHU4ZGM1XHU4ZGM3'@;
put 'XHU4ZGM4XHU4ZGM5XHU4ZGNhXHU4ZGNkXHU4ZGQwXHU4ZGQyXHU4ZGQzXHU4ZGQ0XHU1MWM3XHU1MTk2XHU1MWEyXHU1MWE1XHU4YmEwXHU4YmE2XHU4YmE3XHU4YmFhXHU4YmI0XHU4YmI1XHU4YmI3XHU4YmMyXHU4YmMzXHU4YmNiXHU4YmNmXHU4YmNlXHU4YmQyXHU4YmQzXHU4YmQ0XHU4'@;
put 'YmQ2XHU4YmQ4XHU4YmQ5XHU4YmRjXHU4YmRmXHU4YmUwXHU4YmU0XHU4YmU4XHU4YmU5XHU4YmVlXHU4YmYwXHU4YmYzXHU4YmY2XHU4YmY5XHU4YmZjXHU4YmZmXHU4YzAwXHU4YzAyXHU4YzA0XHU4YzA3XHU4YzBjXHU4YzBmXHU4YzExXHU4YzEyXHU4YzE0XHU4YzE1XHU4YzE2XHU4YzE5'@;
put 'XHU4YzFiXHU4YzE4XHU4YzFkXHU4YzFmXHU4YzIwXHU4YzIxXHU4YzI1XHU4YzI3XHU4YzJhXHU4YzJiXHU4YzJlXHU4YzJmXHU4YzMyXHU4YzMzXHU4YzM1XHU4YzM2XHU1MzY5XHU1MzdhXHU5NjFkXHU5NjIyXHU5NjIxXHU5NjMxXHU5NjJhXHU5NjNkXHU5NjNjXHU5NjQyXHU5NjQ5XHU5'@;
put 'NjU0XHU5NjVmXHU5NjY3XHU5NjZjXHU5NjcyXHU5Njc0XHU5Njg4XHU5NjhkXHU5Njk3XHU5NmIwXHU5MDk3XHU5MDliXHU5MDlkXHU5MDk5XHU5MGFjXHU5MGExXHU5MGI0XHU5MGIzXHU5MGI2XHU5MGJhXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjE4XS5sZW5ndGg7KytnKTY1NTMz'@;
put 'IT09X1syMThdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjE4XVtnXV09NTU4MDgrZyx5WzU1ODA4K2ddPV9bMjE4XVtnXSk7Zm9yKF9bMjE5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4ZGQ1XHU4ZGQ4XHU4ZGQ5XHU4ZGRjXHU4'@;
put 'ZGUwXHU4ZGUxXHU4ZGUyXHU4ZGU1XHU4ZGU2XHU4ZGU3XHU4ZGU5XHU4ZGVkXHU4ZGVlXHU4ZGYwXHU4ZGYxXHU4ZGYyXHU4ZGY0XHU4ZGY2XHU4ZGZjXHU4ZGZlXHU4ZGZmXHU4ZTAwXHU4ZTAxXHU4ZTAyXHU4ZTAzXHU4ZTA0XHU4ZTA2XHU4ZTA3XHU4ZTA4XHU4ZTBiXHU4ZTBkXHU4ZTBl'@;
put 'XHU4ZTEwXHU4ZTExXHU4ZTEyXHU4ZTEzXHU4ZTE1XHU4ZTE2XHU4ZTE3XHU4ZTE4XHU4ZTE5XHU4ZTFhXHU4ZTFiXHU4ZTFjXHU4ZTIwXHU4ZTIxXHU4ZTI0XHU4ZTI1XHU4ZTI2XHU4ZTI3XHU4ZTI4XHU4ZTJiXHU4ZTJkXHU4ZTMwXHU4ZTMyXHU4ZTMzXHU4ZTM0XHU4ZTM2XHU4ZTM3XHU4'@;
put 'ZTM4XHU4ZTNiXHU4ZTNjXHU4ZTNlXHVmZmZkXHU4ZTNmXHU4ZTQzXHU4ZTQ1XHU4ZTQ2XHU4ZTRjXHU4ZTRkXHU4ZTRlXHU4ZTRmXHU4ZTUwXHU4ZTUzXHU4ZTU0XHU4ZTU1XHU4ZTU2XHU4ZTU3XHU4ZTU4XHU4ZTVhXHU4ZTViXHU4ZTVjXHU4ZTVkXHU4ZTVlXHU4ZTVmXHU4ZTYwXHU4ZTYx'@;
put 'XHU4ZTYyXHU4ZTYzXHU4ZTY0XHU4ZTY1XHU4ZTY3XHU4ZTY4XHU4ZTZhXHU4ZTZiXHU4ZTZlXHU4ZTcxXHU5MGI4XHU5MGIwXHU5MGNmXHU5MGM1XHU5MGJlXHU5MGQwXHU5MGM0XHU5MGM3XHU5MGQzXHU5MGU2XHU5MGUyXHU5MGRjXHU5MGQ3XHU5MGRiXHU5MGViXHU5MGVmXHU5MGZlXHU5'@;
put 'MTA0XHU5MTIyXHU5MTFlXHU5MTIzXHU5MTMxXHU5MTJmXHU5MTM5XHU5MTQzXHU5MTQ2XHU1MjBkXHU1OTQyXHU1MmEyXHU1MmFjXHU1MmFkXHU1MmJlXHU1NGZmXHU1MmQwXHU1MmQ2XHU1MmYwXHU1M2RmXHU3MWVlXHU3N2NkXHU1ZWY0XHU1MWY1XHU1MWZjXHU5YjJmXHU1M2I2XHU1ZjAx'@;
put 'XHU3NTVhXHU1ZGVmXHU1NzRjXHU1N2E5XHU1N2ExXHU1ODdlXHU1OGJjXHU1OGM1XHU1OGQxXHU1NzI5XHU1NzJjXHU1NzJhXHU1NzMzXHU1NzM5XHU1NzJlXHU1NzJmXHU1NzVjXHU1NzNiXHU1NzQyXHU1NzY5XHU1Nzg1XHU1NzZiXHU1Nzg2XHU1NzdjXHU1NzdiXHU1NzY4XHU1NzZkXHU1'@;
put 'Nzc2XHU1NzczXHU1N2FkXHU1N2E0XHU1NzhjXHU1N2IyXHU1N2NmXHU1N2E3XHU1N2I0XHU1NzkzXHU1N2EwXHU1N2Q1XHU1N2Q4XHU1N2RhXHU1N2Q5XHU1N2QyXHU1N2I4XHU1N2Y0XHU1N2VmXHU1N2Y4XHU1N2U0XHU1N2RkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjE5XS5sZW5n'@;
put 'dGg7KytnKTY1NTMzIT09X1syMTldW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjE5XVtnXV09NTYwNjQrZyx5WzU2MDY0K2ddPV9bMjE5XVtnXSk7Zm9yKF9bMjIwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4ZTczXHU4ZTc1XHU4'@;
put 'ZTc3XHU4ZTc4XHU4ZTc5XHU4ZTdhXHU4ZTdiXHU4ZTdkXHU4ZTdlXHU4ZTgwXHU4ZTgyXHU4ZTgzXHU4ZTg0XHU4ZTg2XHU4ZTg4XHU4ZTg5XHU4ZThhXHU4ZThiXHU4ZThjXHU4ZThkXHU4ZThlXHU4ZTkxXHU4ZTkyXHU4ZTkzXHU4ZTk1XHU4ZTk2XHU4ZTk3XHU4ZTk4XHU4ZTk5XHU4ZTlh'@;
put 'XHU4ZTliXHU4ZTlkXHU4ZTlmXHU4ZWEwXHU4ZWExXHU4ZWEyXHU4ZWEzXHU4ZWE0XHU4ZWE1XHU4ZWE2XHU4ZWE3XHU4ZWE4XHU4ZWE5XHU4ZWFhXHU4ZWFkXHU4ZWFlXHU4ZWIwXHU4ZWIxXHU4ZWIzXHU4ZWI0XHU4ZWI1XHU4ZWI2XHU4ZWI3XHU4ZWI4XHU4ZWI5XHU4ZWJiXHU4ZWJjXHU4'@;
put 'ZWJkXHU4ZWJlXHU4ZWJmXHU4ZWMwXHU4ZWMxXHU4ZWMyXHVmZmZkXHU4ZWMzXHU4ZWM0XHU4ZWM1XHU4ZWM2XHU4ZWM3XHU4ZWM4XHU4ZWM5XHU4ZWNhXHU4ZWNiXHU4ZWNjXHU4ZWNkXHU4ZWNmXHU4ZWQwXHU4ZWQxXHU4ZWQyXHU4ZWQzXHU4ZWQ0XHU4ZWQ1XHU4ZWQ2XHU4ZWQ3XHU4ZWQ4'@;
put 'XHU4ZWQ5XHU4ZWRhXHU4ZWRiXHU4ZWRjXHU4ZWRkXHU4ZWRlXHU4ZWRmXHU4ZWUwXHU4ZWUxXHU4ZWUyXHU4ZWUzXHU4ZWU0XHU1ODBiXHU1ODBkXHU1N2ZkXHU1N2VkXHU1ODAwXHU1ODFlXHU1ODE5XHU1ODQ0XHU1ODIwXHU1ODY1XHU1ODZjXHU1ODgxXHU1ODg5XHU1ODlhXHU1ODgwXHU5'@;
put 'OWE4XHU5ZjE5XHU2MWZmXHU4Mjc5XHU4MjdkXHU4MjdmXHU4MjhmXHU4MjhhXHU4MmE4XHU4Mjg0XHU4MjhlXHU4MjkxXHU4Mjk3XHU4Mjk5XHU4MmFiXHU4MmI4XHU4MmJlXHU4MmIwXHU4MmM4XHU4MmNhXHU4MmUzXHU4Mjk4XHU4MmI3XHU4MmFlXHU4MmNiXHU4MmNjXHU4MmMxXHU4MmE5'@;
put 'XHU4MmI0XHU4MmExXHU4MmFhXHU4MjlmXHU4MmM0XHU4MmNlXHU4MmE0XHU4MmUxXHU4MzA5XHU4MmY3XHU4MmU0XHU4MzBmXHU4MzA3XHU4MmRjXHU4MmY0XHU4MmQyXHU4MmQ4XHU4MzBjXHU4MmZiXHU4MmQzXHU4MzExXHU4MzFhXHU4MzA2XHU4MzE0XHU4MzE1XHU4MmUwXHU4MmQ1XHU4'@;
put 'MzFjXHU4MzUxXHU4MzViXHU4MzVjXHU4MzA4XHU4MzkyXHU4MzNjXHU4MzM0XHU4MzMxXHU4MzliXHU4MzVlXHU4MzJmXHU4MzRmXHU4MzQ3XHU4MzQzXHU4MzVmXHU4MzQwXHU4MzE3XHU4MzYwXHU4MzJkXHU4MzNhXHU4MzMzXHU4MzY2XHU4MzY1XHVmZmZkIi5zcGxpdCgiIiksZz0wO2ch'@;
put 'PV9bMjIwXS5sZW5ndGg7KytnKTY1NTMzIT09X1syMjBdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjIwXVtnXV09NTYzMjArZyx5WzU2MzIwK2ddPV9bMjIwXVtnXSk7Zm9yKF9bMjIxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4'@;
put 'ZWU1XHU4ZWU2XHU4ZWU3XHU4ZWU4XHU4ZWU5XHU4ZWVhXHU4ZWViXHU4ZWVjXHU4ZWVkXHU4ZWVlXHU4ZWVmXHU4ZWYwXHU4ZWYxXHU4ZWYyXHU4ZWYzXHU4ZWY0XHU4ZWY1XHU4ZWY2XHU4ZWY3XHU4ZWY4XHU4ZWY5XHU4ZWZhXHU4ZWZiXHU4ZWZjXHU4ZWZkXHU4ZWZlXHU4ZWZmXHU4ZjAw'@;
put 'XHU4ZjAxXHU4ZjAyXHU4ZjAzXHU4ZjA0XHU4ZjA1XHU4ZjA2XHU4ZjA3XHU4ZjA4XHU4ZjA5XHU4ZjBhXHU4ZjBiXHU4ZjBjXHU4ZjBkXHU4ZjBlXHU4ZjBmXHU4ZjEwXHU4ZjExXHU4ZjEyXHU4ZjEzXHU4ZjE0XHU4ZjE1XHU4ZjE2XHU4ZjE3XHU4ZjE4XHU4ZjE5XHU4ZjFhXHU4ZjFiXHU4'@;
put 'ZjFjXHU4ZjFkXHU4ZjFlXHU4ZjFmXHU4ZjIwXHU4ZjIxXHU4ZjIyXHU4ZjIzXHVmZmZkXHU4ZjI0XHU4ZjI1XHU4ZjI2XHU4ZjI3XHU4ZjI4XHU4ZjI5XHU4ZjJhXHU4ZjJiXHU4ZjJjXHU4ZjJkXHU4ZjJlXHU4ZjJmXHU4ZjMwXHU4ZjMxXHU4ZjMyXHU4ZjMzXHU4ZjM0XHU4ZjM1XHU4ZjM2'@;
put 'XHU4ZjM3XHU4ZjM4XHU4ZjM5XHU4ZjNhXHU4ZjNiXHU4ZjNjXHU4ZjNkXHU4ZjNlXHU4ZjNmXHU4ZjQwXHU4ZjQxXHU4ZjQyXHU4ZjQzXHU4ZjQ0XHU4MzY4XHU4MzFiXHU4MzY5XHU4MzZjXHU4MzZhXHU4MzZkXHU4MzZlXHU4M2IwXHU4Mzc4XHU4M2IzXHU4M2I0XHU4M2EwXHU4M2FhXHU4'@;
put 'MzkzXHU4MzljXHU4Mzg1XHU4MzdjXHU4M2I2XHU4M2E5XHU4MzdkXHU4M2I4XHU4MzdiXHU4Mzk4XHU4MzllXHU4M2E4XHU4M2JhXHU4M2JjXHU4M2MxXHU4NDAxXHU4M2U1XHU4M2Q4XHU1ODA3XHU4NDE4XHU4NDBiXHU4M2RkXHU4M2ZkXHU4M2Q2XHU4NDFjXHU4NDM4XHU4NDExXHU4NDA2'@;
put 'XHU4M2Q0XHU4M2RmXHU4NDBmXHU4NDAzXHU4M2Y4XHU4M2Y5XHU4M2VhXHU4M2M1XHU4M2MwXHU4NDI2XHU4M2YwXHU4M2UxXHU4NDVjXHU4NDUxXHU4NDVhXHU4NDU5XHU4NDczXHU4NDg3XHU4NDg4XHU4NDdhXHU4NDg5XHU4NDc4XHU4NDNjXHU4NDQ2XHU4NDY5XHU4NDc2XHU4NDhjXHU4'@;
put 'NDhlXHU4NDMxXHU4NDZkXHU4NGMxXHU4NGNkXHU4NGQwXHU4NGU2XHU4NGJkXHU4NGQzXHU4NGNhXHU4NGJmXHU4NGJhXHU4NGUwXHU4NGExXHU4NGI5XHU4NGI0XHU4NDk3XHU4NGU1XHU4NGUzXHU4NTBjXHU3NTBkXHU4NTM4XHU4NGYwXHU4NTM5XHU4NTFmXHU4NTNhXHVmZmZkIi5zcGxp'@;
put 'dCgiIiksZz0wO2chPV9bMjIxXS5sZW5ndGg7KytnKTY1NTMzIT09X1syMjFdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjIxXVtnXV09NTY1NzYrZyx5WzU2NTc2K2ddPV9bMjIxXVtnXSk7Zm9yKF9bMjIyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHU4ZjQ1XHU4ZjQ2XHU4ZjQ3XHU4ZjQ4XHU4ZjQ5XHU4ZjRhXHU4ZjRiXHU4ZjRjXHU4ZjRkXHU4ZjRlXHU4ZjRmXHU4ZjUwXHU4ZjUxXHU4ZjUyXHU4ZjUzXHU4ZjU0XHU4ZjU1XHU4ZjU2XHU4ZjU3XHU4ZjU4XHU4ZjU5XHU4ZjVhXHU4ZjViXHU4ZjVjXHU4ZjVkXHU4ZjVl'@;
put 'XHU4ZjVmXHU4ZjYwXHU4ZjYxXHU4ZjYyXHU4ZjYzXHU4ZjY0XHU4ZjY1XHU4ZjZhXHU4ZjgwXHU4ZjhjXHU4ZjkyXHU4ZjlkXHU4ZmEwXHU4ZmExXHU4ZmEyXHU4ZmE0XHU4ZmE1XHU4ZmE2XHU4ZmE3XHU4ZmFhXHU4ZmFjXHU4ZmFkXHU4ZmFlXHU4ZmFmXHU4ZmIyXHU4ZmIzXHU4ZmI0XHU4'@;
put 'ZmI1XHU4ZmI3XHU4ZmI4XHU4ZmJhXHU4ZmJiXHU4ZmJjXHU4ZmJmXHU4ZmMwXHU4ZmMzXHU4ZmM2XHVmZmZkXHU4ZmM5XHU4ZmNhXHU4ZmNiXHU4ZmNjXHU4ZmNkXHU4ZmNmXHU4ZmQyXHU4ZmQ2XHU4ZmQ3XHU4ZmRhXHU4ZmUwXHU4ZmUxXHU4ZmUzXHU4ZmU3XHU4ZmVjXHU4ZmVmXHU4ZmYx'@;
put 'XHU4ZmYyXHU4ZmY0XHU4ZmY1XHU4ZmY2XHU4ZmZhXHU4ZmZiXHU4ZmZjXHU4ZmZlXHU4ZmZmXHU5MDA3XHU5MDA4XHU5MDBjXHU5MDBlXHU5MDEzXHU5MDE1XHU5MDE4XHU4NTU2XHU4NTNiXHU4NGZmXHU4NGZjXHU4NTU5XHU4NTQ4XHU4NTY4XHU4NTY0XHU4NTVlXHU4NTdhXHU3N2EyXHU4'@;
put 'NTQzXHU4NTcyXHU4NTdiXHU4NWE0XHU4NWE4XHU4NTg3XHU4NThmXHU4NTc5XHU4NWFlXHU4NTljXHU4NTg1XHU4NWI5XHU4NWI3XHU4NWIwXHU4NWQzXHU4NWMxXHU4NWRjXHU4NWZmXHU4NjI3XHU4NjA1XHU4NjI5XHU4NjE2XHU4NjNjXHU1ZWZlXHU1ZjA4XHU1OTNjXHU1OTQxXHU4MDM3'@;
put 'XHU1OTU1XHU1OTVhXHU1OTU4XHU1MzBmXHU1YzIyXHU1YzI1XHU1YzJjXHU1YzM0XHU2MjRjXHU2MjZhXHU2MjlmXHU2MmJiXHU2MmNhXHU2MmRhXHU2MmQ3XHU2MmVlXHU2MzIyXHU2MmY2XHU2MzM5XHU2MzRiXHU2MzQzXHU2M2FkXHU2M2Y2XHU2MzcxXHU2MzdhXHU2MzhlXHU2M2I0XHU2'@;
put 'MzZkXHU2M2FjXHU2MzhhXHU2MzY5XHU2M2FlXHU2M2JjXHU2M2YyXHU2M2Y4XHU2M2UwXHU2M2ZmXHU2M2M0XHU2M2RlXHU2M2NlXHU2NDUyXHU2M2M2XHU2M2JlXHU2NDQ1XHU2NDQxXHU2NDBiXHU2NDFiXHU2NDIwXHU2NDBjXHU2NDI2XHU2NDIxXHU2NDVlXHU2NDg0XHU2NDZkXHU2NDk2'@;
put 'XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjIyXS5sZW5ndGg7KytnKTY1NTMzIT09X1syMjJdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjIyXVtnXV09NTY4MzIrZyx5WzU2ODMyK2ddPV9bMjIyXVtnXSk7Zm9yKF9bMjIzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5MDE5XHU5MDFjXHU5MDIzXHU5MDI0XHU5MDI1XHU5MDI3XHU5MDI4XHU5MDI5XHU5MDJhXHU5MDJiXHU5MDJjXHU5MDMwXHU5MDMxXHU5MDMyXHU5MDMzXHU5MDM0XHU5MDM3XHU5MDM5XHU5MDNhXHU5MDNkXHU5MDNmXHU5MDQwXHU5MDQzXHU5MDQ1'@;
put 'XHU5MDQ2XHU5MDQ4XHU5MDQ5XHU5MDRhXHU5MDRiXHU5MDRjXHU5MDRlXHU5MDU0XHU5MDU1XHU5MDU2XHU5MDU5XHU5MDVhXHU5MDVjXHU5MDVkXHU5MDVlXHU5MDVmXHU5MDYwXHU5MDYxXHU5MDY0XHU5MDY2XHU5MDY3XHU5MDY5XHU5MDZhXHU5MDZiXHU5MDZjXHU5MDZmXHU5MDcwXHU5'@;
put 'MDcxXHU5MDcyXHU5MDczXHU5MDc2XHU5MDc3XHU5MDc4XHU5MDc5XHU5MDdhXHU5MDdiXHU5MDdjXHU5MDdlXHU5MDgxXHVmZmZkXHU5MDg0XHU5MDg1XHU5MDg2XHU5MDg3XHU5MDg5XHU5MDhhXHU5MDhjXHU5MDhkXHU5MDhlXHU5MDhmXHU5MDkwXHU5MDkyXHU5MDk0XHU5MDk2XHU5MDk4'@;
put 'XHU5MDlhXHU5MDljXHU5MDllXHU5MDlmXHU5MGEwXHU5MGE0XHU5MGE1XHU5MGE3XHU5MGE4XHU5MGE5XHU5MGFiXHU5MGFkXHU5MGIyXHU5MGI3XHU5MGJjXHU5MGJkXHU5MGJmXHU5MGMwXHU2NDdhXHU2NGI3XHU2NGI4XHU2NDk5XHU2NGJhXHU2NGMwXHU2NGQwXHU2NGQ3XHU2NGU0XHU2'@;
put 'NGUyXHU2NTA5XHU2NTI1XHU2NTJlXHU1ZjBiXHU1ZmQyXHU3NTE5XHU1ZjExXHU1MzVmXHU1M2YxXHU1M2ZkXHU1M2U5XHU1M2U4XHU1M2ZiXHU1NDEyXHU1NDE2XHU1NDA2XHU1NDRiXHU1NDUyXHU1NDUzXHU1NDU0XHU1NDU2XHU1NDQzXHU1NDIxXHU1NDU3XHU1NDU5XHU1NDIzXHU1NDMy'@;
put 'XHU1NDgyXHU1NDk0XHU1NDc3XHU1NDcxXHU1NDY0XHU1NDlhXHU1NDliXHU1NDg0XHU1NDc2XHU1NDY2XHU1NDlkXHU1NGQwXHU1NGFkXHU1NGMyXHU1NGI0XHU1NGQyXHU1NGE3XHU1NGE2XHU1NGQzXHU1NGQ0XHU1NDcyXHU1NGEzXHU1NGQ1XHU1NGJiXHU1NGJmXHU1NGNjXHU1NGQ5XHU1'@;
put 'NGRhXHU1NGRjXHU1NGE5XHU1NGFhXHU1NGE0XHU1NGRkXHU1NGNmXHU1NGRlXHU1NTFiXHU1NGU3XHU1NTIwXHU1NGZkXHU1NTE0XHU1NGYzXHU1NTIyXHU1NTIzXHU1NTBmXHU1NTExXHU1NTI3XHU1NTJhXHU1NTY3XHU1NThmXHU1NWI1XHU1NTQ5XHU1NTZkXHU1NTQxXHU1NTU1XHU1NTNm'@;
put 'XHU1NTUwXHU1NTNjXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjIzXS5sZW5ndGg7KytnKTY1NTMzIT09X1syMjNdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjIzXVtnXV09NTcwODgrZyx5WzU3MDg4K2ddPV9bMjIzXVtnXSk7Zm9yKF9bMjI0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5MGMyXHU5MGMzXHU5MGM2XHU5MGM4XHU5MGM5XHU5MGNiXHU5MGNjXHU5MGNkXHU5MGQyXHU5MGQ0XHU5MGQ1XHU5MGQ2XHU5MGQ4XHU5MGQ5XHU5MGRhXHU5MGRlXHU5MGRmXHU5MGUwXHU5MGUzXHU5MGU0XHU5MGU1XHU5MGU5'@;
put 'XHU5MGVhXHU5MGVjXHU5MGVlXHU5MGYwXHU5MGYxXHU5MGYyXHU5MGYzXHU5MGY1XHU5MGY2XHU5MGY3XHU5MGY5XHU5MGZhXHU5MGZiXHU5MGZjXHU5MGZmXHU5MTAwXHU5MTAxXHU5MTAzXHU5MTA1XHU5MTA2XHU5MTA3XHU5MTA4XHU5MTA5XHU5MTBhXHU5MTBiXHU5MTBjXHU5MTBkXHU5'@;
put 'MTBlXHU5MTBmXHU5MTEwXHU5MTExXHU5MTEyXHU5MTEzXHU5MTE0XHU5MTE1XHU5MTE2XHU5MTE3XHU5MTE4XHU5MTFhXHU5MTFiXHU5MTFjXHVmZmZkXHU5MTFkXHU5MTFmXHU5MTIwXHU5MTIxXHU5MTI0XHU5MTI1XHU5MTI2XHU5MTI3XHU5MTI4XHU5MTI5XHU5MTJhXHU5MTJiXHU5MTJj'@;
put 'XHU5MTJkXHU5MTJlXHU5MTMwXHU5MTMyXHU5MTMzXHU5MTM0XHU5MTM1XHU5MTM2XHU5MTM3XHU5MTM4XHU5MTNhXHU5MTNiXHU5MTNjXHU5MTNkXHU5MTNlXHU5MTNmXHU5MTQwXHU5MTQxXHU5MTQyXHU5MTQ0XHU1NTM3XHU1NTU2XHU1NTc1XHU1NTc2XHU1NTc3XHU1NTMzXHU1NTMwXHU1'@;
put 'NTVjXHU1NThiXHU1NWQyXHU1NTgzXHU1NWIxXHU1NWI5XHU1NTg4XHU1NTgxXHU1NTlmXHU1NTdlXHU1NWQ2XHU1NTkxXHU1NTdiXHU1NWRmXHU1NWJkXHU1NWJlXHU1NTk0XHU1NTk5XHU1NWVhXHU1NWY3XHU1NWM5XHU1NjFmXHU1NWQxXHU1NWViXHU1NWVjXHU1NWQ0XHU1NWU2XHU1NWRk'@;
put 'XHU1NWM0XHU1NWVmXHU1NWU1XHU1NWYyXHU1NWYzXHU1NWNjXHU1NWNkXHU1NWU4XHU1NWY1XHU1NWU0XHU4Zjk0XHU1NjFlXHU1NjA4XHU1NjBjXHU1NjAxXHU1NjI0XHU1NjIzXHU1NWZlXHU1NjAwXHU1NjI3XHU1NjJkXHU1NjU4XHU1NjM5XHU1NjU3XHU1NjJjXHU1NjRkXHU1NjYyXHU1'@;
put 'NjU5XHU1NjVjXHU1NjRjXHU1NjU0XHU1Njg2XHU1NjY0XHU1NjcxXHU1NjZiXHU1NjdiXHU1NjdjXHU1Njg1XHU1NjkzXHU1NmFmXHU1NmQ0XHU1NmQ3XHU1NmRkXHU1NmUxXHU1NmY1XHU1NmViXHU1NmY5XHU1NmZmXHU1NzA0XHU1NzBhXHU1NzA5XHU1NzFjXHU1ZTBmXHU1ZTE5XHU1ZTE0'@;
put 'XHU1ZTExXHU1ZTMxXHU1ZTNiXHU1ZTNjXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjI0XS5sZW5ndGg7KytnKTY1NTMzIT09X1syMjRdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjI0XVtnXV09NTczNDQrZyx5WzU3MzQ0K2ddPV9bMjI0XVtnXSk7Zm9yKF9bMjI1XT0iXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5MTQ1XHU5MTQ3XHU5MTQ4XHU5MTUxXHU5MTUzXHU5MTU0XHU5MTU1XHU5MTU2XHU5MTU4XHU5MTU5XHU5MTViXHU5MTVjXHU5MTVmXHU5MTYwXHU5MTY2XHU5MTY3XHU5MTY4XHU5MTZiXHU5MTZkXHU5MTcz'@;
put 'XHU5MTdhXHU5MTdiXHU5MTdjXHU5MTgwXHU5MTgxXHU5MTgyXHU5MTgzXHU5MTg0XHU5MTg2XHU5MTg4XHU5MThhXHU5MThlXHU5MThmXHU5MTkzXHU5MTk0XHU5MTk1XHU5MTk2XHU5MTk3XHU5MTk4XHU5MTk5XHU5MTljXHU5MTlkXHU5MTllXHU5MTlmXHU5MWEwXHU5MWExXHU5MWE0XHU5'@;
put 'MWE1XHU5MWE2XHU5MWE3XHU5MWE4XHU5MWE5XHU5MWFiXHU5MWFjXHU5MWIwXHU5MWIxXHU5MWIyXHU5MWIzXHU5MWI2XHU5MWI3XHU5MWI4XHU5MWI5XHU5MWJiXHVmZmZkXHU5MWJjXHU5MWJkXHU5MWJlXHU5MWJmXHU5MWMwXHU5MWMxXHU5MWMyXHU5MWMzXHU5MWM0XHU5MWM1XHU5MWM2'@;
put 'XHU5MWM4XHU5MWNiXHU5MWQwXHU5MWQyXHU5MWQzXHU5MWQ0XHU5MWQ1XHU5MWQ2XHU5MWQ3XHU5MWQ4XHU5MWQ5XHU5MWRhXHU5MWRiXHU5MWRkXHU5MWRlXHU5MWRmXHU5MWUwXHU5MWUxXHU5MWUyXHU5MWUzXHU5MWU0XHU5MWU1XHU1ZTM3XHU1ZTQ0XHU1ZTU0XHU1ZTViXHU1ZTVlXHU1'@;
put 'ZTYxXHU1YzhjXHU1YzdhXHU1YzhkXHU1YzkwXHU1Yzk2XHU1Yzg4XHU1Yzk4XHU1Yzk5XHU1YzkxXHU1YzlhXHU1YzljXHU1Y2I1XHU1Y2EyXHU1Y2JkXHU1Y2FjXHU1Y2FiXHU1Y2IxXHU1Y2EzXHU1Y2MxXHU1Y2I3XHU1Y2M0XHU1Y2QyXHU1Y2U0XHU1Y2NiXHU1Y2U1XHU1ZDAyXHU1ZDAz'@;
put 'XHU1ZDI3XHU1ZDI2XHU1ZDJlXHU1ZDI0XHU1ZDFlXHU1ZDA2XHU1ZDFiXHU1ZDU4XHU1ZDNlXHU1ZDM0XHU1ZDNkXHU1ZDZjXHU1ZDViXHU1ZDZmXHU1ZDVkXHU1ZDZiXHU1ZDRiXHU1ZDRhXHU1ZDY5XHU1ZDc0XHU1ZDgyXHU1ZDk5XHU1ZDlkXHU4YzczXHU1ZGI3XHU1ZGM1XHU1ZjczXHU1'@;
put 'Zjc3XHU1ZjgyXHU1Zjg3XHU1Zjg5XHU1ZjhjXHU1Zjk1XHU1Zjk5XHU1ZjljXHU1ZmE4XHU1ZmFkXHU1ZmI1XHU1ZmJjXHU4ODYyXHU1ZjYxXHU3MmFkXHU3MmIwXHU3MmI0XHU3MmI3XHU3MmI4XHU3MmMzXHU3MmMxXHU3MmNlXHU3MmNkXHU3MmQyXHU3MmU4XHU3MmVmXHU3MmU5XHU3MmYy'@;
put 'XHU3MmY0XHU3MmY3XHU3MzAxXHU3MmYzXHU3MzAzXHU3MmZhXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjI1XS5sZW5ndGg7KytnKTY1NTMzIT09X1syMjVdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjI1XVtnXV09NTc2MDArZyx5WzU3NjAwK2ddPV9bMjI1XVtnXSk7Zm9yKF9bMjI2'@;
put 'XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5MWU2XHU5MWU3XHU5MWU4XHU5MWU5XHU5MWVhXHU5MWViXHU5MWVjXHU5MWVkXHU5MWVlXHU5MWVmXHU5MWYwXHU5MWYxXHU5MWYyXHU5MWYzXHU5MWY0XHU5MWY1XHU5MWY2XHU5MWY3'@;
put 'XHU5MWY4XHU5MWY5XHU5MWZhXHU5MWZiXHU5MWZjXHU5MWZkXHU5MWZlXHU5MWZmXHU5MjAwXHU5MjAxXHU5MjAyXHU5MjAzXHU5MjA0XHU5MjA1XHU5MjA2XHU5MjA3XHU5MjA4XHU5MjA5XHU5MjBhXHU5MjBiXHU5MjBjXHU5MjBkXHU5MjBlXHU5MjBmXHU5MjEwXHU5MjExXHU5MjEyXHU5'@;
put 'MjEzXHU5MjE0XHU5MjE1XHU5MjE2XHU5MjE3XHU5MjE4XHU5MjE5XHU5MjFhXHU5MjFiXHU5MjFjXHU5MjFkXHU5MjFlXHU5MjFmXHU5MjIwXHU5MjIxXHU5MjIyXHU5MjIzXHU5MjI0XHVmZmZkXHU5MjI1XHU5MjI2XHU5MjI3XHU5MjI4XHU5MjI5XHU5MjJhXHU5MjJiXHU5MjJjXHU5MjJk'@;
put 'XHU5MjJlXHU5MjJmXHU5MjMwXHU5MjMxXHU5MjMyXHU5MjMzXHU5MjM0XHU5MjM1XHU5MjM2XHU5MjM3XHU5MjM4XHU5MjM5XHU5MjNhXHU5MjNiXHU5MjNjXHU5MjNkXHU5MjNlXHU5MjNmXHU5MjQwXHU5MjQxXHU5MjQyXHU5MjQzXHU5MjQ0XHU5MjQ1XHU3MmZiXHU3MzE3XHU3MzEzXHU3'@;
put 'MzIxXHU3MzBhXHU3MzFlXHU3MzFkXHU3MzE1XHU3MzIyXHU3MzM5XHU3MzI1XHU3MzJjXHU3MzM4XHU3MzMxXHU3MzUwXHU3MzRkXHU3MzU3XHU3MzYwXHU3MzZjXHU3MzZmXHU3MzdlXHU4MjFiXHU1OTI1XHU5OGU3XHU1OTI0XHU1OTAyXHU5OTYzXHU5OTY3XHU5OTY4XHU5OTY5XHU5OTZh'@;
put 'XHU5OTZiXHU5OTZjXHU5OTc0XHU5OTc3XHU5OTdkXHU5OTgwXHU5OTg0XHU5OTg3XHU5OThhXHU5OThkXHU5OTkwXHU5OTkxXHU5OTkzXHU5OTk0XHU5OTk1XHU1ZTgwXHU1ZTkxXHU1ZThiXHU1ZTk2XHU1ZWE1XHU1ZWEwXHU1ZWI5XHU1ZWI1XHU1ZWJlXHU1ZWIzXHU4ZDUzXHU1ZWQyXHU1'@;
put 'ZWQxXHU1ZWRiXHU1ZWU4XHU1ZWVhXHU4MWJhXHU1ZmM0XHU1ZmM5XHU1ZmQ2XHU1ZmNmXHU2MDAzXHU1ZmVlXHU2MDA0XHU1ZmUxXHU1ZmU0XHU1ZmZlXHU2MDA1XHU2MDA2XHU1ZmVhXHU1ZmVkXHU1ZmY4XHU2MDE5XHU2MDM1XHU2MDI2XHU2MDFiXHU2MDBmXHU2MDBkXHU2MDI5XHU2MDJi'@;
put 'XHU2MDBhXHU2MDNmXHU2MDIxXHU2MDc4XHU2MDc5XHU2MDdiXHU2MDdhXHU2MDQyXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjI2XS5sZW5ndGg7KytnKTY1NTMzIT09X1syMjZdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjI2XVtnXV09NTc4NTYrZyx5WzU3ODU2K2ddPV9bMjI2XVtn'@;
put 'XSk7Zm9yKF9bMjI3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5MjQ2XHU5MjQ3XHU5MjQ4XHU5MjQ5XHU5MjRhXHU5MjRiXHU5MjRjXHU5MjRkXHU5MjRlXHU5MjRmXHU5MjUwXHU5MjUxXHU5MjUyXHU5MjUzXHU5MjU0XHU5MjU1'@;
put 'XHU5MjU2XHU5MjU3XHU5MjU4XHU5MjU5XHU5MjVhXHU5MjViXHU5MjVjXHU5MjVkXHU5MjVlXHU5MjVmXHU5MjYwXHU5MjYxXHU5MjYyXHU5MjYzXHU5MjY0XHU5MjY1XHU5MjY2XHU5MjY3XHU5MjY4XHU5MjY5XHU5MjZhXHU5MjZiXHU5MjZjXHU5MjZkXHU5MjZlXHU5MjZmXHU5MjcwXHU5'@;
put 'MjcxXHU5MjcyXHU5MjczXHU5Mjc1XHU5Mjc2XHU5Mjc3XHU5Mjc4XHU5Mjc5XHU5MjdhXHU5MjdiXHU5MjdjXHU5MjdkXHU5MjdlXHU5MjdmXHU5MjgwXHU5MjgxXHU5MjgyXHU5MjgzXHU5Mjg0XHU5Mjg1XHVmZmZkXHU5Mjg2XHU5Mjg3XHU5Mjg4XHU5Mjg5XHU5MjhhXHU5MjhiXHU5Mjhj'@;
put 'XHU5MjhkXHU5MjhmXHU5MjkwXHU5MjkxXHU5MjkyXHU5MjkzXHU5Mjk0XHU5Mjk1XHU5Mjk2XHU5Mjk3XHU5Mjk4XHU5Mjk5XHU5MjlhXHU5MjliXHU5MjljXHU5MjlkXHU5MjllXHU5MjlmXHU5MmEwXHU5MmExXHU5MmEyXHU5MmEzXHU5MmE0XHU5MmE1XHU5MmE2XHU5MmE3XHU2MDZhXHU2'@;
put 'MDdkXHU2MDk2XHU2MDlhXHU2MGFkXHU2MDlkXHU2MDgzXHU2MDkyXHU2MDhjXHU2MDliXHU2MGVjXHU2MGJiXHU2MGIxXHU2MGRkXHU2MGQ4XHU2MGM2XHU2MGRhXHU2MGI0XHU2MTIwXHU2MTI2XHU2MTE1XHU2MTIzXHU2MGY0XHU2MTAwXHU2MTBlXHU2MTJiXHU2MTRhXHU2MTc1XHU2MWFj'@;
put 'XHU2MTk0XHU2MWE3XHU2MWI3XHU2MWQ0XHU2MWY1XHU1ZmRkXHU5NmIzXHU5NWU5XHU5NWViXHU5NWYxXHU5NWYzXHU5NWY1XHU5NWY2XHU5NWZjXHU5NWZlXHU5NjAzXHU5NjA0XHU5NjA2XHU5NjA4XHU5NjBhXHU5NjBiXHU5NjBjXHU5NjBkXHU5NjBmXHU5NjEyXHU5NjE1XHU5NjE2XHU5'@;
put 'NjE3XHU5NjE5XHU5NjFhXHU0ZTJjXHU3MjNmXHU2MjE1XHU2YzM1XHU2YzU0XHU2YzVjXHU2YzRhXHU2Y2EzXHU2Yzg1XHU2YzkwXHU2Yzk0XHU2YzhjXHU2YzY4XHU2YzY5XHU2Yzc0XHU2Yzc2XHU2Yzg2XHU2Y2E5XHU2Y2QwXHU2Y2Q0XHU2Y2FkXHU2Y2Y3XHU2Y2Y4XHU2Y2YxXHU2Y2Q3'@;
put 'XHU2Y2IyXHU2Y2UwXHU2Y2Q2XHU2Y2ZhXHU2Y2ViXHU2Y2VlXHU2Y2IxXHU2Y2QzXHU2Y2VmXHU2Y2ZlXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjI3XS5sZW5ndGg7KytnKTY1NTMzIT09X1syMjddW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjI3XVtnXV09NTgxMTIrZyx5WzU4MTEy'@;
put 'K2ddPV9bMjI3XVtnXSk7Zm9yKF9bMjI4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5MmE4XHU5MmE5XHU5MmFhXHU5MmFiXHU5MmFjXHU5MmFkXHU5MmFmXHU5MmIwXHU5MmIxXHU5MmIyXHU5MmIzXHU5MmI0XHU5MmI1XHU5MmI2'@;
put 'XHU5MmI3XHU5MmI4XHU5MmI5XHU5MmJhXHU5MmJiXHU5MmJjXHU5MmJkXHU5MmJlXHU5MmJmXHU5MmMwXHU5MmMxXHU5MmMyXHU5MmMzXHU5MmM0XHU5MmM1XHU5MmM2XHU5MmM3XHU5MmM5XHU5MmNhXHU5MmNiXHU5MmNjXHU5MmNkXHU5MmNlXHU5MmNmXHU5MmQwXHU5MmQxXHU5MmQyXHU5'@;
put 'MmQzXHU5MmQ0XHU5MmQ1XHU5MmQ2XHU5MmQ3XHU5MmQ4XHU5MmQ5XHU5MmRhXHU5MmRiXHU5MmRjXHU5MmRkXHU5MmRlXHU5MmRmXHU5MmUwXHU5MmUxXHU5MmUyXHU5MmUzXHU5MmU0XHU5MmU1XHU5MmU2XHU5MmU3XHU5MmU4XHVmZmZkXHU5MmU5XHU5MmVhXHU5MmViXHU5MmVjXHU5MmVk'@;
put 'XHU5MmVlXHU5MmVmXHU5MmYwXHU5MmYxXHU5MmYyXHU5MmYzXHU5MmY0XHU5MmY1XHU5MmY2XHU5MmY3XHU5MmY4XHU5MmY5XHU5MmZhXHU5MmZiXHU5MmZjXHU5MmZkXHU5MmZlXHU5MmZmXHU5MzAwXHU5MzAxXHU5MzAyXHU5MzAzXHU5MzA0XHU5MzA1XHU5MzA2XHU5MzA3XHU5MzA4XHU5'@;
put 'MzA5XHU2ZDM5XHU2ZDI3XHU2ZDBjXHU2ZDQzXHU2ZDQ4XHU2ZDA3XHU2ZDA0XHU2ZDE5XHU2ZDBlXHU2ZDJiXHU2ZDRkXHU2ZDJlXHU2ZDM1XHU2ZDFhXHU2ZDRmXHU2ZDUyXHU2ZDU0XHU2ZDMzXHU2ZDkxXHU2ZDZmXHU2ZDllXHU2ZGEwXHU2ZDVlXHU2ZDkzXHU2ZDk0XHU2ZDVjXHU2ZDYw'@;
put 'XHU2ZDdjXHU2ZDYzXHU2ZTFhXHU2ZGM3XHU2ZGM1XHU2ZGRlXHU2ZTBlXHU2ZGJmXHU2ZGUwXHU2ZTExXHU2ZGU2XHU2ZGRkXHU2ZGQ5XHU2ZTE2XHU2ZGFiXHU2ZTBjXHU2ZGFlXHU2ZTJiXHU2ZTZlXHU2ZTRlXHU2ZTZiXHU2ZWIyXHU2ZTVmXHU2ZTg2XHU2ZTUzXHU2ZTU0XHU2ZTMyXHU2'@;
put 'ZTI1XHU2ZTQ0XHU2ZWRmXHU2ZWIxXHU2ZTk4XHU2ZWUwXHU2ZjJkXHU2ZWUyXHU2ZWE1XHU2ZWE3XHU2ZWJkXHU2ZWJiXHU2ZWI3XHU2ZWQ3XHU2ZWI0XHU2ZWNmXHU2ZThmXHU2ZWMyXHU2ZTlmXHU2ZjYyXHU2ZjQ2XHU2ZjQ3XHU2ZjI0XHU2ZjE1XHU2ZWY5XHU2ZjJmXHU2ZjM2XHU2ZjRi'@;
put 'XHU2Zjc0XHU2ZjJhXHU2ZjA5XHU2ZjI5XHU2Zjg5XHU2ZjhkXHU2ZjhjXHU2Zjc4XHU2ZjcyXHU2ZjdjXHU2ZjdhXHU2ZmQxXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjI4XS5sZW5ndGg7KytnKTY1NTMzIT09X1syMjhdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjI4XVtnXV09NTgz'@;
put 'NjgrZyx5WzU4MzY4K2ddPV9bMjI4XVtnXSk7Zm9yKF9bMjI5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5MzBhXHU5MzBiXHU5MzBjXHU5MzBkXHU5MzBlXHU5MzBmXHU5MzEwXHU5MzExXHU5MzEyXHU5MzEzXHU5MzE0XHU5MzE1'@;
put 'XHU5MzE2XHU5MzE3XHU5MzE4XHU5MzE5XHU5MzFhXHU5MzFiXHU5MzFjXHU5MzFkXHU5MzFlXHU5MzFmXHU5MzIwXHU5MzIxXHU5MzIyXHU5MzIzXHU5MzI0XHU5MzI1XHU5MzI2XHU5MzI3XHU5MzI4XHU5MzI5XHU5MzJhXHU5MzJiXHU5MzJjXHU5MzJkXHU5MzJlXHU5MzJmXHU5MzMwXHU5'@;
put 'MzMxXHU5MzMyXHU5MzMzXHU5MzM0XHU5MzM1XHU5MzM2XHU5MzM3XHU5MzM4XHU5MzM5XHU5MzNhXHU5MzNiXHU5MzNjXHU5MzNkXHU5MzNmXHU5MzQwXHU5MzQxXHU5MzQyXHU5MzQzXHU5MzQ0XHU5MzQ1XHU5MzQ2XHU5MzQ3XHU5MzQ4XHU5MzQ5XHVmZmZkXHU5MzRhXHU5MzRiXHU5MzRj'@;
put 'XHU5MzRkXHU5MzRlXHU5MzRmXHU5MzUwXHU5MzUxXHU5MzUyXHU5MzUzXHU5MzU0XHU5MzU1XHU5MzU2XHU5MzU3XHU5MzU4XHU5MzU5XHU5MzVhXHU5MzViXHU5MzVjXHU5MzVkXHU5MzVlXHU5MzVmXHU5MzYwXHU5MzYxXHU5MzYyXHU5MzYzXHU5MzY0XHU5MzY1XHU5MzY2XHU5MzY3XHU5'@;
put 'MzY4XHU5MzY5XHU5MzZiXHU2ZmM5XHU2ZmE3XHU2ZmI5XHU2ZmI2XHU2ZmMyXHU2ZmUxXHU2ZmVlXHU2ZmRlXHU2ZmUwXHU2ZmVmXHU3MDFhXHU3MDIzXHU3MDFiXHU3MDM5XHU3MDM1XHU3MDRmXHU3MDVlXHU1YjgwXHU1Yjg0XHU1Yjk1XHU1YjkzXHU1YmE1XHU1YmI4XHU3NTJmXHU5YTll'@;
put 'XHU2NDM0XHU1YmU0XHU1YmVlXHU4OTMwXHU1YmYwXHU4ZTQ3XHU4YjA3XHU4ZmI2XHU4ZmQzXHU4ZmQ1XHU4ZmU1XHU4ZmVlXHU4ZmU0XHU4ZmU5XHU4ZmU2XHU4ZmYzXHU4ZmU4XHU5MDA1XHU5MDA0XHU5MDBiXHU5MDI2XHU5MDExXHU5MDBkXHU5MDE2XHU5MDIxXHU5MDM1XHU5MDM2XHU5'@;
put 'MDJkXHU5MDJmXHU5MDQ0XHU5MDUxXHU5MDUyXHU5MDUwXHU5MDY4XHU5MDU4XHU5MDYyXHU5MDViXHU2NmI5XHU5MDc0XHU5MDdkXHU5MDgyXHU5MDg4XHU5MDgzXHU5MDhiXHU1ZjUwXHU1ZjU3XHU1ZjU2XHU1ZjU4XHU1YzNiXHU1NGFiXHU1YzUwXHU1YzU5XHU1YjcxXHU1YzYzXHU1YzY2'@;
put 'XHU3ZmJjXHU1ZjJhXHU1ZjI5XHU1ZjJkXHU4Mjc0XHU1ZjNjXHU5YjNiXHU1YzZlXHU1OTgxXHU1OTgzXHU1OThkXHU1OWE5XHU1OWFhXHU1OWEzXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjI5XS5sZW5ndGg7KytnKTY1NTMzIT09X1syMjldW2ddLmNoYXJDb2RlQXQoMCkmJihJW19b'@;
put 'MjI5XVtnXV09NTg2MjQrZyx5WzU4NjI0K2ddPV9bMjI5XVtnXSk7Zm9yKF9bMjMwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5MzZjXHU5MzZkXHU5MzZlXHU5MzZmXHU5MzcwXHU5MzcxXHU5MzcyXHU5MzczXHU5Mzc0XHU5Mzc1'@;
put 'XHU5Mzc2XHU5Mzc3XHU5Mzc4XHU5Mzc5XHU5MzdhXHU5MzdiXHU5MzdjXHU5MzdkXHU5MzdlXHU5MzdmXHU5MzgwXHU5MzgxXHU5MzgyXHU5MzgzXHU5Mzg0XHU5Mzg1XHU5Mzg2XHU5Mzg3XHU5Mzg4XHU5Mzg5XHU5MzhhXHU5MzhiXHU5MzhjXHU5MzhkXHU5MzhlXHU5MzkwXHU5MzkxXHU5'@;
put 'MzkyXHU5MzkzXHU5Mzk0XHU5Mzk1XHU5Mzk2XHU5Mzk3XHU5Mzk4XHU5Mzk5XHU5MzlhXHU5MzliXHU5MzljXHU5MzlkXHU5MzllXHU5MzlmXHU5M2EwXHU5M2ExXHU5M2EyXHU5M2EzXHU5M2E0XHU5M2E1XHU5M2E2XHU5M2E3XHU5M2E4XHU5M2E5XHU5M2FhXHU5M2FiXHVmZmZkXHU5M2Fj'@;
put 'XHU5M2FkXHU5M2FlXHU5M2FmXHU5M2IwXHU5M2IxXHU5M2IyXHU5M2IzXHU5M2I0XHU5M2I1XHU5M2I2XHU5M2I3XHU5M2I4XHU5M2I5XHU5M2JhXHU5M2JiXHU5M2JjXHU5M2JkXHU5M2JlXHU5M2JmXHU5M2MwXHU5M2MxXHU5M2MyXHU5M2MzXHU5M2M0XHU5M2M1XHU5M2M2XHU5M2M3XHU5'@;
put 'M2M4XHU5M2M5XHU5M2NiXHU5M2NjXHU5M2NkXHU1OTk3XHU1OWNhXHU1OWFiXHU1OTllXHU1OWE0XHU1OWQyXHU1OWIyXHU1OWFmXHU1OWQ3XHU1OWJlXHU1YTA1XHU1YTA2XHU1OWRkXHU1YTA4XHU1OWUzXHU1OWQ4XHU1OWY5XHU1YTBjXHU1YTA5XHU1YTMyXHU1YTM0XHU1YTExXHU1YTIz'@;
put 'XHU1YTEzXHU1YTQwXHU1YTY3XHU1YTRhXHU1YTU1XHU1YTNjXHU1YTYyXHU1YTc1XHU4MGVjXHU1YWFhXHU1YTliXHU1YTc3XHU1YTdhXHU1YWJlXHU1YWViXHU1YWIyXHU1YWQyXHU1YWQ0XHU1YWI4XHU1YWUwXHU1YWUzXHU1YWYxXHU1YWQ2XHU1YWU2XHU1YWQ4XHU1YWRjXHU1YjA5XHU1'@;
put 'YjE3XHU1YjE2XHU1YjMyXHU1YjM3XHU1YjQwXHU1YzE1XHU1YzFjXHU1YjVhXHU1YjY1XHU1YjczXHU1YjUxXHU1YjUzXHU1YjYyXHU5YTc1XHU5YTc3XHU5YTc4XHU5YTdhXHU5YTdmXHU5YTdkXHU5YTgwXHU5YTgxXHU5YTg1XHU5YTg4XHU5YThhXHU5YTkwXHU5YTkyXHU5YTkzXHU5YTk2'@;
put 'XHU5YTk4XHU5YTliXHU5YTljXHU5YTlkXHU5YTlmXHU5YWEwXHU5YWEyXHU5YWEzXHU5YWE1XHU5YWE3XHU3ZTlmXHU3ZWExXHU3ZWEzXHU3ZWE1XHU3ZWE4XHU3ZWE5XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjMwXS5sZW5ndGg7KytnKTY1NTMzIT09X1syMzBdW2ddLmNoYXJDb2Rl'@;
put 'QXQoMCkmJihJW19bMjMwXVtnXV09NTg4ODArZyx5WzU4ODgwK2ddPV9bMjMwXVtnXSk7Zm9yKF9bMjMxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5M2NlXHU5M2NmXHU5M2QwXHU5M2QxXHU5M2QyXHU5M2QzXHU5M2Q0XHU5M2Q1'@;
put 'XHU5M2Q3XHU5M2Q4XHU5M2Q5XHU5M2RhXHU5M2RiXHU5M2RjXHU5M2RkXHU5M2RlXHU5M2RmXHU5M2UwXHU5M2UxXHU5M2UyXHU5M2UzXHU5M2U0XHU5M2U1XHU5M2U2XHU5M2U3XHU5M2U4XHU5M2U5XHU5M2VhXHU5M2ViXHU5M2VjXHU5M2VkXHU5M2VlXHU5M2VmXHU5M2YwXHU5M2YxXHU5'@;
put 'M2YyXHU5M2YzXHU5M2Y0XHU5M2Y1XHU5M2Y2XHU5M2Y3XHU5M2Y4XHU5M2Y5XHU5M2ZhXHU5M2ZiXHU5M2ZjXHU5M2ZkXHU5M2ZlXHU5M2ZmXHU5NDAwXHU5NDAxXHU5NDAyXHU5NDAzXHU5NDA0XHU5NDA1XHU5NDA2XHU5NDA3XHU5NDA4XHU5NDA5XHU5NDBhXHU5NDBiXHU5NDBjXHU5NDBk'@;
put 'XHVmZmZkXHU5NDBlXHU5NDBmXHU5NDEwXHU5NDExXHU5NDEyXHU5NDEzXHU5NDE0XHU5NDE1XHU5NDE2XHU5NDE3XHU5NDE4XHU5NDE5XHU5NDFhXHU5NDFiXHU5NDFjXHU5NDFkXHU5NDFlXHU5NDFmXHU5NDIwXHU5NDIxXHU5NDIyXHU5NDIzXHU5NDI0XHU5NDI1XHU5NDI2XHU5NDI3XHU5'@;
put 'NDI4XHU5NDI5XHU5NDJhXHU5NDJiXHU5NDJjXHU5NDJkXHU5NDJlXHU3ZWFkXHU3ZWIwXHU3ZWJlXHU3ZWMwXHU3ZWMxXHU3ZWMyXHU3ZWM5XHU3ZWNiXHU3ZWNjXHU3ZWQwXHU3ZWQ0XHU3ZWQ3XHU3ZWRiXHU3ZWUwXHU3ZWUxXHU3ZWU4XHU3ZWViXHU3ZWVlXHU3ZWVmXHU3ZWYxXHU3ZWYy'@;
put 'XHU3ZjBkXHU3ZWY2XHU3ZWZhXHU3ZWZiXHU3ZWZlXHU3ZjAxXHU3ZjAyXHU3ZjAzXHU3ZjA3XHU3ZjA4XHU3ZjBiXHU3ZjBjXHU3ZjBmXHU3ZjExXHU3ZjEyXHU3ZjE3XHU3ZjE5XHU3ZjFjXHU3ZjFiXHU3ZjFmXHU3ZjIxXHU3ZjIyXHU3ZjIzXHU3ZjI0XHU3ZjI1XHU3ZjI2XHU3ZjI3XHU3'@;
put 'ZjJhXHU3ZjJiXHU3ZjJjXHU3ZjJkXHU3ZjJmXHU3ZjMwXHU3ZjMxXHU3ZjMyXHU3ZjMzXHU3ZjM1XHU1ZTdhXHU3NTdmXHU1ZGRiXHU3NTNlXHU5MDk1XHU3MzhlXHU3MzkxXHU3M2FlXHU3M2EyXHU3MzlmXHU3M2NmXHU3M2MyXHU3M2QxXHU3M2I3XHU3M2IzXHU3M2MwXHU3M2M5XHU3M2M4'@;
put 'XHU3M2U1XHU3M2Q5XHU5ODdjXHU3NDBhXHU3M2U5XHU3M2U3XHU3M2RlXHU3M2JhXHU3M2YyXHU3NDBmXHU3NDJhXHU3NDViXHU3NDI2XHU3NDI1XHU3NDI4XHU3NDMwXHU3NDJlXHU3NDJjXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjMxXS5sZW5ndGg7KytnKTY1NTMzIT09X1syMzFd'@;
put 'W2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjMxXVtnXV09NTkxMzYrZyx5WzU5MTM2K2ddPV9bMjMxXVtnXSk7Zm9yKF9bMjMyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5NDJmXHU5NDMwXHU5NDMxXHU5NDMyXHU5NDMzXHU5NDM0'@;
put 'XHU5NDM1XHU5NDM2XHU5NDM3XHU5NDM4XHU5NDM5XHU5NDNhXHU5NDNiXHU5NDNjXHU5NDNkXHU5NDNmXHU5NDQwXHU5NDQxXHU5NDQyXHU5NDQzXHU5NDQ0XHU5NDQ1XHU5NDQ2XHU5NDQ3XHU5NDQ4XHU5NDQ5XHU5NDRhXHU5NDRiXHU5NDRjXHU5NDRkXHU5NDRlXHU5NDRmXHU5NDUwXHU5'@;
put 'NDUxXHU5NDUyXHU5NDUzXHU5NDU0XHU5NDU1XHU5NDU2XHU5NDU3XHU5NDU4XHU5NDU5XHU5NDVhXHU5NDViXHU5NDVjXHU5NDVkXHU5NDVlXHU5NDVmXHU5NDYwXHU5NDYxXHU5NDYyXHU5NDYzXHU5NDY0XHU5NDY1XHU5NDY2XHU5NDY3XHU5NDY4XHU5NDY5XHU5NDZhXHU5NDZjXHU5NDZk'@;
put 'XHU5NDZlXHU5NDZmXHVmZmZkXHU5NDcwXHU5NDcxXHU5NDcyXHU5NDczXHU5NDc0XHU5NDc1XHU5NDc2XHU5NDc3XHU5NDc4XHU5NDc5XHU5NDdhXHU5NDdiXHU5NDdjXHU5NDdkXHU5NDdlXHU5NDdmXHU5NDgwXHU5NDgxXHU5NDgyXHU5NDgzXHU5NDg0XHU5NDkxXHU5NDk2XHU5NDk4XHU5'@;
put 'NGM3XHU5NGNmXHU5NGQzXHU5NGQ0XHU5NGRhXHU5NGU2XHU5NGZiXHU5NTFjXHU5NTIwXHU3NDFiXHU3NDFhXHU3NDQxXHU3NDVjXHU3NDU3XHU3NDU1XHU3NDU5XHU3NDc3XHU3NDZkXHU3NDdlXHU3NDljXHU3NDhlXHU3NDgwXHU3NDgxXHU3NDg3XHU3NDhiXHU3NDllXHU3NGE4XHU3NGE5'@;
put 'XHU3NDkwXHU3NGE3XHU3NGQyXHU3NGJhXHU5N2VhXHU5N2ViXHU5N2VjXHU2NzRjXHU2NzUzXHU2NzVlXHU2NzQ4XHU2NzY5XHU2N2E1XHU2Nzg3XHU2NzZhXHU2NzczXHU2Nzk4XHU2N2E3XHU2Nzc1XHU2N2E4XHU2NzllXHU2N2FkXHU2NzhiXHU2Nzc3XHU2NzdjXHU2N2YwXHU2ODA5XHU2'@;
put 'N2Q4XHU2ODBhXHU2N2U5XHU2N2IwXHU2ODBjXHU2N2Q5XHU2N2I1XHU2N2RhXHU2N2IzXHU2N2RkXHU2ODAwXHU2N2MzXHU2N2I4XHU2N2UyXHU2ODBlXHU2N2MxXHU2N2ZkXHU2ODMyXHU2ODMzXHU2ODYwXHU2ODYxXHU2ODRlXHU2ODYyXHU2ODQ0XHU2ODY0XHU2ODgzXHU2ODFkXHU2ODU1'@;
put 'XHU2ODY2XHU2ODQxXHU2ODY3XHU2ODQwXHU2ODNlXHU2ODRhXHU2ODQ5XHU2ODI5XHU2OGI1XHU2ODhmXHU2ODc0XHU2ODc3XHU2ODkzXHU2ODZiXHU2OGMyXHU2OTZlXHU2OGZjXHU2OTFmXHU2OTIwXHU2OGY5XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjMyXS5sZW5ndGg7KytnKTY1'@;
put 'NTMzIT09X1syMzJdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjMyXVtnXV09NTkzOTIrZyx5WzU5MzkyK2ddPV9bMjMyXVtnXSk7Zm9yKF9bMjMzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5NTI3XHU5NTMzXHU5NTNkXHU5NTQz'@;
put 'XHU5NTQ4XHU5NTRiXHU5NTU1XHU5NTVhXHU5NTYwXHU5NTZlXHU5NTc0XHU5NTc1XHU5NTc3XHU5NTc4XHU5NTc5XHU5NTdhXHU5NTdiXHU5NTdjXHU5NTdkXHU5NTdlXHU5NTgwXHU5NTgxXHU5NTgyXHU5NTgzXHU5NTg0XHU5NTg1XHU5NTg2XHU5NTg3XHU5NTg4XHU5NTg5XHU5NThhXHU5'@;
put 'NThiXHU5NThjXHU5NThkXHU5NThlXHU5NThmXHU5NTkwXHU5NTkxXHU5NTkyXHU5NTkzXHU5NTk0XHU5NTk1XHU5NTk2XHU5NTk3XHU5NTk4XHU5NTk5XHU5NTlhXHU5NTliXHU5NTljXHU5NTlkXHU5NTllXHU5NTlmXHU5NWEwXHU5NWExXHU5NWEyXHU5NWEzXHU5NWE0XHU5NWE1XHU5NWE2'@;
put 'XHU5NWE3XHU5NWE4XHU5NWE5XHU5NWFhXHVmZmZkXHU5NWFiXHU5NWFjXHU5NWFkXHU5NWFlXHU5NWFmXHU5NWIwXHU5NWIxXHU5NWIyXHU5NWIzXHU5NWI0XHU5NWI1XHU5NWI2XHU5NWI3XHU5NWI4XHU5NWI5XHU5NWJhXHU5NWJiXHU5NWJjXHU5NWJkXHU5NWJlXHU5NWJmXHU5NWMwXHU5'@;
put 'NWMxXHU5NWMyXHU5NWMzXHU5NWM0XHU5NWM1XHU5NWM2XHU5NWM3XHU5NWM4XHU5NWM5XHU5NWNhXHU5NWNiXHU2OTI0XHU2OGYwXHU2OTBiXHU2OTAxXHU2OTU3XHU2OGUzXHU2OTEwXHU2OTcxXHU2OTM5XHU2OTYwXHU2OTQyXHU2OTVkXHU2OTg0XHU2OTZiXHU2OTgwXHU2OTk4XHU2OTc4'@;
put 'XHU2OTM0XHU2OWNjXHU2OTg3XHU2OTg4XHU2OWNlXHU2OTg5XHU2OTY2XHU2OTYzXHU2OTc5XHU2OTliXHU2OWE3XHU2OWJiXHU2OWFiXHU2OWFkXHU2OWQ0XHU2OWIxXHU2OWMxXHU2OWNhXHU2OWRmXHU2OTk1XHU2OWUwXHU2OThkXHU2OWZmXHU2YTJmXHU2OWVkXHU2YTE3XHU2YTE4XHU2'@;
put 'YTY1XHU2OWYyXHU2YTQ0XHU2YTNlXHU2YWEwXHU2YTUwXHU2YTViXHU2YTM1XHU2YThlXHU2YTc5XHU2YTNkXHU2YTI4XHU2YTU4XHU2YTdjXHU2YTkxXHU2YTkwXHU2YWE5XHU2YTk3XHU2YWFiXHU3MzM3XHU3MzUyXHU2YjgxXHU2YjgyXHU2Yjg3XHU2Yjg0XHU2YjkyXHU2YjkzXHU2Yjhk'@;
put 'XHU2YjlhXHU2YjliXHU2YmExXHU2YmFhXHU4ZjZiXHU4ZjZkXHU4ZjcxXHU4ZjcyXHU4ZjczXHU4Zjc1XHU4Zjc2XHU4Zjc4XHU4Zjc3XHU4Zjc5XHU4ZjdhXHU4ZjdjXHU4ZjdlXHU4ZjgxXHU4ZjgyXHU4Zjg0XHU4Zjg3XHU4ZjhiXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjMzXS5s'@;
put 'ZW5ndGg7KytnKTY1NTMzIT09X1syMzNdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjMzXVtnXV09NTk2NDgrZyx5WzU5NjQ4K2ddPV9bMjMzXVtnXSk7Zm9yKF9bMjM0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5NWNjXHU5NWNk'@;
put 'XHU5NWNlXHU5NWNmXHU5NWQwXHU5NWQxXHU5NWQyXHU5NWQzXHU5NWQ0XHU5NWQ1XHU5NWQ2XHU5NWQ3XHU5NWQ4XHU5NWQ5XHU5NWRhXHU5NWRiXHU5NWRjXHU5NWRkXHU5NWRlXHU5NWRmXHU5NWUwXHU5NWUxXHU5NWUyXHU5NWUzXHU5NWU0XHU5NWU1XHU5NWU2XHU5NWU3XHU5NWVjXHU5'@;
put 'NWZmXHU5NjA3XHU5NjEzXHU5NjE4XHU5NjFiXHU5NjFlXHU5NjIwXHU5NjIzXHU5NjI0XHU5NjI1XHU5NjI2XHU5NjI3XHU5NjI4XHU5NjI5XHU5NjJiXHU5NjJjXHU5NjJkXHU5NjJmXHU5NjMwXHU5NjM3XHU5NjM4XHU5NjM5XHU5NjNhXHU5NjNlXHU5NjQxXHU5NjQzXHU5NjRhXHU5NjRl'@;
put 'XHU5NjRmXHU5NjUxXHU5NjUyXHU5NjUzXHU5NjU2XHU5NjU3XHVmZmZkXHU5NjU4XHU5NjU5XHU5NjVhXHU5NjVjXHU5NjVkXHU5NjVlXHU5NjYwXHU5NjYzXHU5NjY1XHU5NjY2XHU5NjZiXHU5NjZkXHU5NjZlXHU5NjZmXHU5NjcwXHU5NjcxXHU5NjczXHU5Njc4XHU5Njc5XHU5NjdhXHU5'@;
put 'NjdiXHU5NjdjXHU5NjdkXHU5NjdlXHU5NjdmXHU5NjgwXHU5NjgxXHU5NjgyXHU5NjgzXHU5Njg0XHU5Njg3XHU5Njg5XHU5NjhhXHU4ZjhkXHU4ZjhlXHU4ZjhmXHU4Zjk4XHU4ZjlhXHU4ZWNlXHU2MjBiXHU2MjE3XHU2MjFiXHU2MjFmXHU2MjIyXHU2MjIxXHU2MjI1XHU2MjI0XHU2MjJj'@;
put 'XHU4MWU3XHU3NGVmXHU3NGY0XHU3NGZmXHU3NTBmXHU3NTExXHU3NTEzXHU2NTM0XHU2NWVlXHU2NWVmXHU2NWYwXHU2NjBhXHU2NjE5XHU2NzcyXHU2NjAzXHU2NjE1XHU2NjAwXHU3MDg1XHU2NmY3XHU2NjFkXHU2NjM0XHU2NjMxXHU2NjM2XHU2NjM1XHU4MDA2XHU2NjVmXHU2NjU0XHU2'@;
put 'NjQxXHU2NjRmXHU2NjU2XHU2NjYxXHU2NjU3XHU2Njc3XHU2Njg0XHU2NjhjXHU2NmE3XHU2NjlkXHU2NmJlXHU2NmRiXHU2NmRjXHU2NmU2XHU2NmU5XHU4ZDMyXHU4ZDMzXHU4ZDM2XHU4ZDNiXHU4ZDNkXHU4ZDQwXHU4ZDQ1XHU4ZDQ2XHU4ZDQ4XHU4ZDQ5XHU4ZDQ3XHU4ZDRkXHU4ZDU1'@;
put 'XHU4ZDU5XHU4OWM3XHU4OWNhXHU4OWNiXHU4OWNjXHU4OWNlXHU4OWNmXHU4OWQwXHU4OWQxXHU3MjZlXHU3MjlmXHU3MjVkXHU3MjY2XHU3MjZmXHU3MjdlXHU3MjdmXHU3Mjg0XHU3MjhiXHU3MjhkXHU3MjhmXHU3MjkyXHU2MzA4XHU2MzMyXHU2M2IwXHVmZmZkIi5zcGxpdCgiIiksZz0w'@;
put 'O2chPV9bMjM0XS5sZW5ndGg7KytnKTY1NTMzIT09X1syMzRdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjM0XVtnXV09NTk5MDQrZyx5WzU5OTA0K2ddPV9bMjM0XVtnXSk7Zm9yKF9bMjM1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHU5NjhjXHU5NjhlXHU5NjkxXHU5NjkyXHU5NjkzXHU5Njk1XHU5Njk2XHU5NjlhXHU5NjliXHU5NjlkXHU5NjllXHU5NjlmXHU5NmEwXHU5NmExXHU5NmEyXHU5NmEzXHU5NmE0XHU5NmE1XHU5NmE2XHU5NmE4XHU5NmE5XHU5NmFhXHU5NmFiXHU5NmFjXHU5NmFkXHU5NmFlXHU5NmFmXHU5'@;
put 'NmIxXHU5NmIyXHU5NmI0XHU5NmI1XHU5NmI3XHU5NmI4XHU5NmJhXHU5NmJiXHU5NmJmXHU5NmMyXHU5NmMzXHU5NmM4XHU5NmNhXHU5NmNiXHU5NmQwXHU5NmQxXHU5NmQzXHU5NmQ0XHU5NmQ2XHU5NmQ3XHU5NmQ4XHU5NmQ5XHU5NmRhXHU5NmRiXHU5NmRjXHU5NmRkXHU5NmRlXHU5NmRm'@;
put 'XHU5NmUxXHU5NmUyXHU5NmUzXHU5NmU0XHU5NmU1XHU5NmU2XHU5NmU3XHU5NmViXHVmZmZkXHU5NmVjXHU5NmVkXHU5NmVlXHU5NmYwXHU5NmYxXHU5NmYyXHU5NmY0XHU5NmY1XHU5NmY4XHU5NmZhXHU5NmZiXHU5NmZjXHU5NmZkXHU5NmZmXHU5NzAyXHU5NzAzXHU5NzA1XHU5NzBhXHU5'@;
put 'NzBiXHU5NzBjXHU5NzEwXHU5NzExXHU5NzEyXHU5NzE0XHU5NzE1XHU5NzE3XHU5NzE4XHU5NzE5XHU5NzFhXHU5NzFiXHU5NzFkXHU5NzFmXHU5NzIwXHU2NDNmXHU2NGQ4XHU4MDA0XHU2YmVhXHU2YmYzXHU2YmZkXHU2YmY1XHU2YmY5XHU2YzA1XHU2YzA3XHU2YzA2XHU2YzBkXHU2YzE1'@;
put 'XHU2YzE4XHU2YzE5XHU2YzFhXHU2YzIxXHU2YzI5XHU2YzI0XHU2YzJhXHU2YzMyXHU2NTM1XHU2NTU1XHU2NTZiXHU3MjRkXHU3MjUyXHU3MjU2XHU3MjMwXHU4NjYyXHU1MjE2XHU4MDlmXHU4MDljXHU4MDkzXHU4MGJjXHU2NzBhXHU4MGJkXHU4MGIxXHU4MGFiXHU4MGFkXHU4MGI0XHU4'@;
put 'MGI3XHU4MGU3XHU4MGU4XHU4MGU5XHU4MGVhXHU4MGRiXHU4MGMyXHU4MGM0XHU4MGQ5XHU4MGNkXHU4MGQ3XHU2NzEwXHU4MGRkXHU4MGViXHU4MGYxXHU4MGY0XHU4MGVkXHU4MTBkXHU4MTBlXHU4MGYyXHU4MGZjXHU2NzE1XHU4MTEyXHU4YzVhXHU4MTM2XHU4MTFlXHU4MTJjXHU4MTE4'@;
put 'XHU4MTMyXHU4MTQ4XHU4MTRjXHU4MTUzXHU4MTc0XHU4MTU5XHU4MTVhXHU4MTcxXHU4MTYwXHU4MTY5XHU4MTdjXHU4MTdkXHU4MTZkXHU4MTY3XHU1ODRkXHU1YWI1XHU4MTg4XHU4MTgyXHU4MTkxXHU2ZWQ1XHU4MWEzXHU4MWFhXHU4MWNjXHU2NzI2XHU4MWNhXHU4MWJiXHVmZmZkIi5z'@;
put 'cGxpdCgiIiksZz0wO2chPV9bMjM1XS5sZW5ndGg7KytnKTY1NTMzIT09X1syMzVdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjM1XVtnXV09NjAxNjArZyx5WzYwMTYwK2ddPV9bMjM1XVtnXSk7Zm9yKF9bMjM2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHU5NzIxXHU5NzIyXHU5NzIzXHU5NzI0XHU5NzI1XHU5NzI2XHU5NzI3XHU5NzI4XHU5NzI5XHU5NzJiXHU5NzJjXHU5NzJlXHU5NzJmXHU5NzMxXHU5NzMzXHU5NzM0XHU5NzM1XHU5NzM2XHU5NzM3XHU5NzNhXHU5NzNiXHU5NzNjXHU5NzNkXHU5NzNmXHU5NzQwXHU5'@;
put 'NzQxXHU5NzQyXHU5NzQzXHU5NzQ0XHU5NzQ1XHU5NzQ2XHU5NzQ3XHU5NzQ4XHU5NzQ5XHU5NzRhXHU5NzRiXHU5NzRjXHU5NzRkXHU5NzRlXHU5NzRmXHU5NzUwXHU5NzUxXHU5NzU0XHU5NzU1XHU5NzU3XHU5NzU4XHU5NzVhXHU5NzVjXHU5NzVkXHU5NzVmXHU5NzYzXHU5NzY0XHU5NzY2'@;
put 'XHU5NzY3XHU5NzY4XHU5NzZhXHU5NzZiXHU5NzZjXHU5NzZkXHU5NzZlXHU5NzZmXHU5NzcwXHU5NzcxXHVmZmZkXHU5NzcyXHU5Nzc1XHU5Nzc3XHU5Nzc4XHU5Nzc5XHU5NzdhXHU5NzdiXHU5NzdkXHU5NzdlXHU5NzdmXHU5NzgwXHU5NzgxXHU5NzgyXHU5NzgzXHU5Nzg0XHU5Nzg2XHU5'@;
put 'Nzg3XHU5Nzg4XHU5Nzg5XHU5NzhhXHU5NzhjXHU5NzhlXHU5NzhmXHU5NzkwXHU5NzkzXHU5Nzk1XHU5Nzk2XHU5Nzk3XHU5Nzk5XHU5NzlhXHU5NzliXHU5NzljXHU5NzlkXHU4MWMxXHU4MWE2XHU2YjI0XHU2YjM3XHU2YjM5XHU2YjQzXHU2YjQ2XHU2YjU5XHU5OGQxXHU5OGQyXHU5OGQz'@;
put 'XHU5OGQ1XHU5OGQ5XHU5OGRhXHU2YmIzXHU1ZjQwXHU2YmMyXHU4OWYzXHU2NTkwXHU5ZjUxXHU2NTkzXHU2NWJjXHU2NWM2XHU2NWM0XHU2NWMzXHU2NWNjXHU2NWNlXHU2NWQyXHU2NWQ2XHU3MDgwXHU3MDljXHU3MDk2XHU3MDlkXHU3MGJiXHU3MGMwXHU3MGI3XHU3MGFiXHU3MGIxXHU3'@;
put 'MGU4XHU3MGNhXHU3MTEwXHU3MTEzXHU3MTE2XHU3MTJmXHU3MTMxXHU3MTczXHU3MTVjXHU3MTY4XHU3MTQ1XHU3MTcyXHU3MTRhXHU3MTc4XHU3MTdhXHU3MTk4XHU3MWIzXHU3MWI1XHU3MWE4XHU3MWEwXHU3MWUwXHU3MWQ0XHU3MWU3XHU3MWY5XHU3MjFkXHU3MjI4XHU3MDZjXHU3MTE4'@;
put 'XHU3MTY2XHU3MWI5XHU2MjNlXHU2MjNkXHU2MjQzXHU2MjQ4XHU2MjQ5XHU3OTNiXHU3OTQwXHU3OTQ2XHU3OTQ5XHU3OTViXHU3OTVjXHU3OTUzXHU3OTVhXHU3OTYyXHU3OTU3XHU3OTYwXHU3OTZmXHU3OTY3XHU3OTdhXHU3OTg1XHU3OThhXHU3OTlhXHU3OWE3XHU3OWIzXHU1ZmQxXHU1'@;
put 'ZmQwXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjM2XS5sZW5ndGg7KytnKTY1NTMzIT09X1syMzZdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjM2XVtnXV09NjA0MTYrZyx5WzYwNDE2K2ddPV9bMjM2XVtnXSk7Zm9yKF9bMjM3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5NzllXHU5NzlmXHU5N2ExXHU5N2EyXHU5N2E0XHU5N2E1XHU5N2E2XHU5N2E3XHU5N2E4XHU5N2E5XHU5N2FhXHU5N2FjXHU5N2FlXHU5N2IwXHU5N2IxXHU5N2IzXHU5N2I1XHU5N2I2XHU5N2I3XHU5N2I4XHU5N2I5XHU5N2JhXHU5N2JiXHU5'@;
put 'N2JjXHU5N2JkXHU5N2JlXHU5N2JmXHU5N2MwXHU5N2MxXHU5N2MyXHU5N2MzXHU5N2M0XHU5N2M1XHU5N2M2XHU5N2M3XHU5N2M4XHU5N2M5XHU5N2NhXHU5N2NiXHU5N2NjXHU5N2NkXHU5N2NlXHU5N2NmXHU5N2QwXHU5N2QxXHU5N2QyXHU5N2QzXHU5N2Q0XHU5N2Q1XHU5N2Q2XHU5N2Q3'@;
put 'XHU5N2Q4XHU5N2Q5XHU5N2RhXHU5N2RiXHU5N2RjXHU5N2RkXHU5N2RlXHU5N2RmXHU5N2UwXHU5N2UxXHU5N2UyXHU5N2UzXHVmZmZkXHU5N2U0XHU5N2U1XHU5N2U4XHU5N2VlXHU5N2VmXHU5N2YwXHU5N2YxXHU5N2YyXHU5N2Y0XHU5N2Y3XHU5N2Y4XHU5N2Y5XHU5N2ZhXHU5N2ZiXHU5'@;
put 'N2ZjXHU5N2ZkXHU5N2ZlXHU5N2ZmXHU5ODAwXHU5ODAxXHU5ODAyXHU5ODAzXHU5ODA0XHU5ODA1XHU5ODA2XHU5ODA3XHU5ODA4XHU5ODA5XHU5ODBhXHU5ODBiXHU5ODBjXHU5ODBkXHU5ODBlXHU2MDNjXHU2MDVkXHU2MDVhXHU2MDY3XHU2MDQxXHU2MDU5XHU2MDYzXHU2MGFiXHU2MTA2'@;
put 'XHU2MTBkXHU2MTVkXHU2MWE5XHU2MTlkXHU2MWNiXHU2MWQxXHU2MjA2XHU4MDgwXHU4MDdmXHU2YzkzXHU2Y2Y2XHU2ZGZjXHU3N2Y2XHU3N2Y4XHU3ODAwXHU3ODA5XHU3ODE3XHU3ODE4XHU3ODExXHU2NWFiXHU3ODJkXHU3ODFjXHU3ODFkXHU3ODM5XHU3ODNhXHU3ODNiXHU3ODFmXHU3'@;
put 'ODNjXHU3ODI1XHU3ODJjXHU3ODIzXHU3ODI5XHU3ODRlXHU3ODZkXHU3ODU2XHU3ODU3XHU3ODI2XHU3ODUwXHU3ODQ3XHU3ODRjXHU3ODZhXHU3ODliXHU3ODkzXHU3ODlhXHU3ODg3XHU3ODljXHU3OGExXHU3OGEzXHU3OGIyXHU3OGI5XHU3OGE1XHU3OGQ0XHU3OGQ5XHU3OGM5XHU3OGVj'@;
put 'XHU3OGYyXHU3OTA1XHU3OGY0XHU3OTEzXHU3OTI0XHU3OTFlXHU3OTM0XHU5ZjliXHU5ZWY5XHU5ZWZiXHU5ZWZjXHU3NmYxXHU3NzA0XHU3NzBkXHU3NmY5XHU3NzA3XHU3NzA4XHU3NzFhXHU3NzIyXHU3NzE5XHU3NzJkXHU3NzI2XHU3NzM1XHU3NzM4XHU3NzUwXHU3NzUxXHU3NzQ3XHU3'@;
put 'NzQzXHU3NzVhXHU3NzY4XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjM3XS5sZW5ndGg7KytnKTY1NTMzIT09X1syMzddW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjM3XVtnXV09NjA2NzIrZyx5WzYwNjcyK2ddPV9bMjM3XVtnXSk7Zm9yKF9bMjM4XT0iXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5ODBmXHU5ODEwXHU5ODExXHU5ODEyXHU5ODEzXHU5ODE0XHU5ODE1XHU5ODE2XHU5ODE3XHU5ODE4XHU5ODE5XHU5ODFhXHU5ODFiXHU5ODFjXHU5ODFkXHU5ODFlXHU5ODFmXHU5ODIwXHU5ODIxXHU5ODIyXHU5ODIzXHU5'@;
put 'ODI0XHU5ODI1XHU5ODI2XHU5ODI3XHU5ODI4XHU5ODI5XHU5ODJhXHU5ODJiXHU5ODJjXHU5ODJkXHU5ODJlXHU5ODJmXHU5ODMwXHU5ODMxXHU5ODMyXHU5ODMzXHU5ODM0XHU5ODM1XHU5ODM2XHU5ODM3XHU5ODM4XHU5ODM5XHU5ODNhXHU5ODNiXHU5ODNjXHU5ODNkXHU5ODNlXHU5ODNm'@;
put 'XHU5ODQwXHU5ODQxXHU5ODQyXHU5ODQzXHU5ODQ0XHU5ODQ1XHU5ODQ2XHU5ODQ3XHU5ODQ4XHU5ODQ5XHU5ODRhXHU5ODRiXHU5ODRjXHU5ODRkXHVmZmZkXHU5ODRlXHU5ODRmXHU5ODUwXHU5ODUxXHU5ODUyXHU5ODUzXHU5ODU0XHU5ODU1XHU5ODU2XHU5ODU3XHU5ODU4XHU5ODU5XHU5'@;
put 'ODVhXHU5ODViXHU5ODVjXHU5ODVkXHU5ODVlXHU5ODVmXHU5ODYwXHU5ODYxXHU5ODYyXHU5ODYzXHU5ODY0XHU5ODY1XHU5ODY2XHU5ODY3XHU5ODY4XHU5ODY5XHU5ODZhXHU5ODZiXHU5ODZjXHU5ODZkXHU5ODZlXHU3NzYyXHU3NzY1XHU3NzdmXHU3NzhkXHU3NzdkXHU3NzgwXHU3Nzhj'@;
put 'XHU3NzkxXHU3NzlmXHU3N2EwXHU3N2IwXHU3N2I1XHU3N2JkXHU3NTNhXHU3NTQwXHU3NTRlXHU3NTRiXHU3NTQ4XHU3NTViXHU3NTcyXHU3NTc5XHU3NTgzXHU3ZjU4XHU3ZjYxXHU3ZjVmXHU4YTQ4XHU3ZjY4XHU3Zjc0XHU3ZjcxXHU3Zjc5XHU3ZjgxXHU3ZjdlXHU3NmNkXHU3NmU1XHU4'@;
put 'ODMyXHU5NDg1XHU5NDg2XHU5NDg3XHU5NDhiXHU5NDhhXHU5NDhjXHU5NDhkXHU5NDhmXHU5NDkwXHU5NDk0XHU5NDk3XHU5NDk1XHU5NDlhXHU5NDliXHU5NDljXHU5NGEzXHU5NGE0XHU5NGFiXHU5NGFhXHU5NGFkXHU5NGFjXHU5NGFmXHU5NGIwXHU5NGIyXHU5NGI0XHU5NGI2XHU5NGI3'@;
put 'XHU5NGI4XHU5NGI5XHU5NGJhXHU5NGJjXHU5NGJkXHU5NGJmXHU5NGM0XHU5NGM4XHU5NGM5XHU5NGNhXHU5NGNiXHU5NGNjXHU5NGNkXHU5NGNlXHU5NGQwXHU5NGQxXHU5NGQyXHU5NGQ1XHU5NGQ2XHU5NGQ3XHU5NGQ5XHU5NGQ4XHU5NGRiXHU5NGRlXHU5NGRmXHU5NGUwXHU5NGUyXHU5'@;
put 'NGU0XHU5NGU1XHU5NGU3XHU5NGU4XHU5NGVhXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjM4XS5sZW5ndGg7KytnKTY1NTMzIT09X1syMzhdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjM4XVtnXV09NjA5MjgrZyx5WzYwOTI4K2ddPV9bMjM4XVtnXSk7Zm9yKF9bMjM5XT0iXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5ODZmXHU5ODcwXHU5ODcxXHU5ODcyXHU5ODczXHU5ODc0XHU5ODhiXHU5ODhlXHU5ODkyXHU5ODk1XHU5ODk5XHU5OGEzXHU5OGE4XHU5OGE5XHU5OGFhXHU5OGFiXHU5OGFjXHU5OGFkXHU5OGFlXHU5'@;
put 'OGFmXHU5OGIwXHU5OGIxXHU5OGIyXHU5OGIzXHU5OGI0XHU5OGI1XHU5OGI2XHU5OGI3XHU5OGI4XHU5OGI5XHU5OGJhXHU5OGJiXHU5OGJjXHU5OGJkXHU5OGJlXHU5OGJmXHU5OGMwXHU5OGMxXHU5OGMyXHU5OGMzXHU5OGM0XHU5OGM1XHU5OGM2XHU5OGM3XHU5OGM4XHU5OGM5XHU5OGNh'@;
put 'XHU5OGNiXHU5OGNjXHU5OGNkXHU5OGNmXHU5OGQwXHU5OGQ0XHU5OGQ2XHU5OGQ3XHU5OGRiXHU5OGRjXHU5OGRkXHU5OGUwXHU5OGUxXHU5OGUyXHU5OGUzXHU5OGU0XHVmZmZkXHU5OGU1XHU5OGU2XHU5OGU5XHU5OGVhXHU5OGViXHU5OGVjXHU5OGVkXHU5OGVlXHU5OGVmXHU5OGYwXHU5'@;
put 'OGYxXHU5OGYyXHU5OGYzXHU5OGY0XHU5OGY1XHU5OGY2XHU5OGY3XHU5OGY4XHU5OGY5XHU5OGZhXHU5OGZiXHU5OGZjXHU5OGZkXHU5OGZlXHU5OGZmXHU5OTAwXHU5OTAxXHU5OTAyXHU5OTAzXHU5OTA0XHU5OTA1XHU5OTA2XHU5OTA3XHU5NGU5XHU5NGViXHU5NGVlXHU5NGVmXHU5NGYz'@;
put 'XHU5NGY0XHU5NGY1XHU5NGY3XHU5NGY5XHU5NGZjXHU5NGZkXHU5NGZmXHU5NTAzXHU5NTAyXHU5NTA2XHU5NTA3XHU5NTA5XHU5NTBhXHU5NTBkXHU5NTBlXHU5NTBmXHU5NTEyXHU5NTEzXHU5NTE0XHU5NTE1XHU5NTE2XHU5NTE4XHU5NTFiXHU5NTFkXHU5NTFlXHU5NTFmXHU5NTIyXHU5'@;
put 'NTJhXHU5NTJiXHU5NTI5XHU5NTJjXHU5NTMxXHU5NTMyXHU5NTM0XHU5NTM2XHU5NTM3XHU5NTM4XHU5NTNjXHU5NTNlXHU5NTNmXHU5NTQyXHU5NTM1XHU5NTQ0XHU5NTQ1XHU5NTQ2XHU5NTQ5XHU5NTRjXHU5NTRlXHU5NTRmXHU5NTUyXHU5NTUzXHU5NTU0XHU5NTU2XHU5NTU3XHU5NTU4'@;
put 'XHU5NTU5XHU5NTViXHU5NTVlXHU5NTVmXHU5NTVkXHU5NTYxXHU5NTYyXHU5NTY0XHU5NTY1XHU5NTY2XHU5NTY3XHU5NTY4XHU5NTY5XHU5NTZhXHU5NTZiXHU5NTZjXHU5NTZmXHU5NTcxXHU5NTcyXHU5NTczXHU5NTNhXHU3N2U3XHU3N2VjXHU5NmM5XHU3OWQ1XHU3OWVkXHU3OWUzXHU3'@;
put 'OWViXHU3YTA2XHU1ZDQ3XHU3YTAzXHU3YTAyXHU3YTFlXHU3YTE0XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjM5XS5sZW5ndGg7KytnKTY1NTMzIT09X1syMzldW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjM5XVtnXV09NjExODQrZyx5WzYxMTg0K2ddPV9bMjM5XVtnXSk7Zm9yKF9b'@;
put 'MjQwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5OTA4XHU5OTA5XHU5OTBhXHU5OTBiXHU5OTBjXHU5OTBlXHU5OTBmXHU5OTExXHU5OTEyXHU5OTEzXHU5OTE0XHU5OTE1XHU5OTE2XHU5OTE3XHU5OTE4XHU5OTE5XHU5OTFhXHU5'@;
put 'OTFiXHU5OTFjXHU5OTFkXHU5OTFlXHU5OTFmXHU5OTIwXHU5OTIxXHU5OTIyXHU5OTIzXHU5OTI0XHU5OTI1XHU5OTI2XHU5OTI3XHU5OTI4XHU5OTI5XHU5OTJhXHU5OTJiXHU5OTJjXHU5OTJkXHU5OTJmXHU5OTMwXHU5OTMxXHU5OTMyXHU5OTMzXHU5OTM0XHU5OTM1XHU5OTM2XHU5OTM3'@;
put 'XHU5OTM4XHU5OTM5XHU5OTNhXHU5OTNiXHU5OTNjXHU5OTNkXHU5OTNlXHU5OTNmXHU5OTQwXHU5OTQxXHU5OTQyXHU5OTQzXHU5OTQ0XHU5OTQ1XHU5OTQ2XHU5OTQ3XHU5OTQ4XHU5OTQ5XHVmZmZkXHU5OTRhXHU5OTRiXHU5OTRjXHU5OTRkXHU5OTRlXHU5OTRmXHU5OTUwXHU5OTUxXHU5'@;
put 'OTUyXHU5OTUzXHU5OTU2XHU5OTU3XHU5OTU4XHU5OTU5XHU5OTVhXHU5OTViXHU5OTVjXHU5OTVkXHU5OTVlXHU5OTVmXHU5OTYwXHU5OTYxXHU5OTYyXHU5OTY0XHU5OTY2XHU5OTczXHU5OTc4XHU5OTc5XHU5OTdiXHU5OTdlXHU5OTgyXHU5OTgzXHU5OTg5XHU3YTM5XHU3YTM3XHU3YTUx'@;
put 'XHU5ZWNmXHU5OWE1XHU3YTcwXHU3Njg4XHU3NjhlXHU3NjkzXHU3Njk5XHU3NmE0XHU3NGRlXHU3NGUwXHU3NTJjXHU5ZTIwXHU5ZTIyXHU5ZTI4XHU5ZTI5XHU5ZTJhXHU5ZTJiXHU5ZTJjXHU5ZTMyXHU5ZTMxXHU5ZTM2XHU5ZTM4XHU5ZTM3XHU5ZTM5XHU5ZTNhXHU5ZTNlXHU5ZTQxXHU5'@;
put 'ZTQyXHU5ZTQ0XHU5ZTQ2XHU5ZTQ3XHU5ZTQ4XHU5ZTQ5XHU5ZTRiXHU5ZTRjXHU5ZTRlXHU5ZTUxXHU5ZTU1XHU5ZTU3XHU5ZTVhXHU5ZTViXHU5ZTVjXHU5ZTVlXHU5ZTYzXHU5ZTY2XHU5ZTY3XHU5ZTY4XHU5ZTY5XHU5ZTZhXHU5ZTZiXHU5ZTZjXHU5ZTcxXHU5ZTZkXHU5ZTczXHU3NTky'@;
put 'XHU3NTk0XHU3NTk2XHU3NWEwXHU3NTlkXHU3NWFjXHU3NWEzXHU3NWIzXHU3NWI0XHU3NWI4XHU3NWM0XHU3NWIxXHU3NWIwXHU3NWMzXHU3NWMyXHU3NWQ2XHU3NWNkXHU3NWUzXHU3NWU4XHU3NWU2XHU3NWU0XHU3NWViXHU3NWU3XHU3NjAzXHU3NWYxXHU3NWZjXHU3NWZmXHU3NjEwXHU3'@;
put 'NjAwXHU3NjA1XHU3NjBjXHU3NjE3XHU3NjBhXHU3NjI1XHU3NjE4XHU3NjE1XHU3NjE5XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjQwXS5sZW5ndGg7KytnKTY1NTMzIT09X1syNDBdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjQwXVtnXV09NjE0NDArZyx5WzYxNDQwK2ddPV9bMjQw'@;
put 'XVtnXSk7Zm9yKF9bMjQxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5OThjXHU5OThlXHU5OTlhXHU5OTliXHU5OTljXHU5OTlkXHU5OTllXHU5OTlmXHU5OWEwXHU5OWExXHU5OWEyXHU5OWEzXHU5OWE0XHU5OWE2XHU5OWE3XHU5'@;
put 'OWE5XHU5OWFhXHU5OWFiXHU5OWFjXHU5OWFkXHU5OWFlXHU5OWFmXHU5OWIwXHU5OWIxXHU5OWIyXHU5OWIzXHU5OWI0XHU5OWI1XHU5OWI2XHU5OWI3XHU5OWI4XHU5OWI5XHU5OWJhXHU5OWJiXHU5OWJjXHU5OWJkXHU5OWJlXHU5OWJmXHU5OWMwXHU5OWMxXHU5OWMyXHU5OWMzXHU5OWM0'@;
put 'XHU5OWM1XHU5OWM2XHU5OWM3XHU5OWM4XHU5OWM5XHU5OWNhXHU5OWNiXHU5OWNjXHU5OWNkXHU5OWNlXHU5OWNmXHU5OWQwXHU5OWQxXHU5OWQyXHU5OWQzXHU5OWQ0XHU5OWQ1XHU5OWQ2XHU5OWQ3XHU5OWQ4XHVmZmZkXHU5OWQ5XHU5OWRhXHU5OWRiXHU5OWRjXHU5OWRkXHU5OWRlXHU5'@;
put 'OWRmXHU5OWUwXHU5OWUxXHU5OWUyXHU5OWUzXHU5OWU0XHU5OWU1XHU5OWU2XHU5OWU3XHU5OWU4XHU5OWU5XHU5OWVhXHU5OWViXHU5OWVjXHU5OWVkXHU5OWVlXHU5OWVmXHU5OWYwXHU5OWYxXHU5OWYyXHU5OWYzXHU5OWY0XHU5OWY1XHU5OWY2XHU5OWY3XHU5OWY4XHU5OWY5XHU3NjFi'@;
put 'XHU3NjNjXHU3NjIyXHU3NjIwXHU3NjQwXHU3NjJkXHU3NjMwXHU3NjNmXHU3NjM1XHU3NjQzXHU3NjNlXHU3NjMzXHU3NjRkXHU3NjVlXHU3NjU0XHU3NjVjXHU3NjU2XHU3NjZiXHU3NjZmXHU3ZmNhXHU3YWU2XHU3YTc4XHU3YTc5XHU3YTgwXHU3YTg2XHU3YTg4XHU3YTk1XHU3YWE2XHU3'@;
put 'YWEwXHU3YWFjXHU3YWE4XHU3YWFkXHU3YWIzXHU4ODY0XHU4ODY5XHU4ODcyXHU4ODdkXHU4ODdmXHU4ODgyXHU4OGEyXHU4OGM2XHU4OGI3XHU4OGJjXHU4OGM5XHU4OGUyXHU4OGNlXHU4OGUzXHU4OGU1XHU4OGYxXHU4OTFhXHU4OGZjXHU4OGU4XHU4OGZlXHU4OGYwXHU4OTIxXHU4OTE5'@;
put 'XHU4OTEzXHU4OTFiXHU4OTBhXHU4OTM0XHU4OTJiXHU4OTM2XHU4OTQxXHU4OTY2XHU4OTdiXHU3NThiXHU4MGU1XHU3NmIyXHU3NmI0XHU3N2RjXHU4MDEyXHU4MDE0XHU4MDE2XHU4MDFjXHU4MDIwXHU4MDIyXHU4MDI1XHU4MDI2XHU4MDI3XHU4MDI5XHU4MDI4XHU4MDMxXHU4MDBiXHU4'@;
put 'MDM1XHU4MDQzXHU4MDQ2XHU4MDRkXHU4MDUyXHU4MDY5XHU4MDcxXHU4OTgzXHU5ODc4XHU5ODgwXHU5ODgzXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjQxXS5sZW5ndGg7KytnKTY1NTMzIT09X1syNDFdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjQxXVtnXV09NjE2OTYrZyx5WzYx'@;
put 'Njk2K2ddPV9bMjQxXVtnXSk7Zm9yKF9bMjQyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5OWZhXHU5OWZiXHU5OWZjXHU5OWZkXHU5OWZlXHU5OWZmXHU5YTAwXHU5YTAxXHU5YTAyXHU5YTAzXHU5YTA0XHU5YTA1XHU5YTA2XHU5'@;
put 'YTA3XHU5YTA4XHU5YTA5XHU5YTBhXHU5YTBiXHU5YTBjXHU5YTBkXHU5YTBlXHU5YTBmXHU5YTEwXHU5YTExXHU5YTEyXHU5YTEzXHU5YTE0XHU5YTE1XHU5YTE2XHU5YTE3XHU5YTE4XHU5YTE5XHU5YTFhXHU5YTFiXHU5YTFjXHU5YTFkXHU5YTFlXHU5YTFmXHU5YTIwXHU5YTIxXHU5YTIy'@;
put 'XHU5YTIzXHU5YTI0XHU5YTI1XHU5YTI2XHU5YTI3XHU5YTI4XHU5YTI5XHU5YTJhXHU5YTJiXHU5YTJjXHU5YTJkXHU5YTJlXHU5YTJmXHU5YTMwXHU5YTMxXHU5YTMyXHU5YTMzXHU5YTM0XHU5YTM1XHU5YTM2XHU5YTM3XHU5YTM4XHVmZmZkXHU5YTM5XHU5YTNhXHU5YTNiXHU5YTNjXHU5'@;
put 'YTNkXHU5YTNlXHU5YTNmXHU5YTQwXHU5YTQxXHU5YTQyXHU5YTQzXHU5YTQ0XHU5YTQ1XHU5YTQ2XHU5YTQ3XHU5YTQ4XHU5YTQ5XHU5YTRhXHU5YTRiXHU5YTRjXHU5YTRkXHU5YTRlXHU5YTRmXHU5YTUwXHU5YTUxXHU5YTUyXHU5YTUzXHU5YTU0XHU5YTU1XHU5YTU2XHU5YTU3XHU5YTU4'@;
put 'XHU5YTU5XHU5ODg5XHU5ODhjXHU5ODhkXHU5ODhmXHU5ODk0XHU5ODlhXHU5ODliXHU5ODllXHU5ODlmXHU5OGExXHU5OGEyXHU5OGE1XHU5OGE2XHU4NjRkXHU4NjU0XHU4NjZjXHU4NjZlXHU4NjdmXHU4NjdhXHU4NjdjXHU4NjdiXHU4NmE4XHU4NjhkXHU4NjhiXHU4NmFjXHU4NjlkXHU4'@;
put 'NmE3XHU4NmEzXHU4NmFhXHU4NjkzXHU4NmE5XHU4NmI2XHU4NmM0XHU4NmI1XHU4NmNlXHU4NmIwXHU4NmJhXHU4NmIxXHU4NmFmXHU4NmM5XHU4NmNmXHU4NmI0XHU4NmU5XHU4NmYxXHU4NmYyXHU4NmVkXHU4NmYzXHU4NmQwXHU4NzEzXHU4NmRlXHU4NmY0XHU4NmRmXHU4NmQ4XHU4NmQx'@;
put 'XHU4NzAzXHU4NzA3XHU4NmY4XHU4NzA4XHU4NzBhXHU4NzBkXHU4NzA5XHU4NzIzXHU4NzNiXHU4NzFlXHU4NzI1XHU4NzJlXHU4NzFhXHU4NzNlXHU4NzQ4XHU4NzM0XHU4NzMxXHU4NzI5XHU4NzM3XHU4NzNmXHU4NzgyXHU4NzIyXHU4NzdkXHU4NzdlXHU4NzdiXHU4NzYwXHU4NzcwXHU4'@;
put 'NzRjXHU4NzZlXHU4NzhiXHU4NzUzXHU4NzYzXHU4NzdjXHU4NzY0XHU4NzU5XHU4NzY1XHU4NzkzXHU4N2FmXHU4N2E4XHU4N2QyXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjQyXS5sZW5ndGg7KytnKTY1NTMzIT09X1syNDJdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjQyXVtnXV09'@;
put 'NjE5NTIrZyx5WzYxOTUyK2ddPV9bMjQyXVtnXSk7Zm9yKF9bMjQzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5YTVhXHU5YTViXHU5YTVjXHU5YTVkXHU5YTVlXHU5YTVmXHU5YTYwXHU5YTYxXHU5YTYyXHU5YTYzXHU5YTY0XHU5'@;
put 'YTY1XHU5YTY2XHU5YTY3XHU5YTY4XHU5YTY5XHU5YTZhXHU5YTZiXHU5YTcyXHU5YTgzXHU5YTg5XHU5YThkXHU5YThlXHU5YTk0XHU5YTk1XHU5YTk5XHU5YWE2XHU5YWE5XHU5YWFhXHU5YWFiXHU5YWFjXHU5YWFkXHU5YWFlXHU5YWFmXHU5YWIyXHU5YWIzXHU5YWI0XHU5YWI1XHU5YWI5'@;
put 'XHU5YWJiXHU5YWJkXHU5YWJlXHU5YWJmXHU5YWMzXHU5YWM0XHU5YWM2XHU5YWM3XHU5YWM4XHU5YWM5XHU5YWNhXHU5YWNkXHU5YWNlXHU5YWNmXHU5YWQwXHU5YWQyXHU5YWQ0XHU5YWQ1XHU5YWQ2XHU5YWQ3XHU5YWQ5XHU5YWRhXHU5YWRiXHU5YWRjXHVmZmZkXHU5YWRkXHU5YWRlXHU5'@;
put 'YWUwXHU5YWUyXHU5YWUzXHU5YWU0XHU5YWU1XHU5YWU3XHU5YWU4XHU5YWU5XHU5YWVhXHU5YWVjXHU5YWVlXHU5YWYwXHU5YWYxXHU5YWYyXHU5YWYzXHU5YWY0XHU5YWY1XHU5YWY2XHU5YWY3XHU5YWY4XHU5YWZhXHU5YWZjXHU5YWZkXHU5YWZlXHU5YWZmXHU5YjAwXHU5YjAxXHU5YjAy'@;
put 'XHU5YjA0XHU5YjA1XHU5YjA2XHU4N2M2XHU4Nzg4XHU4Nzg1XHU4N2FkXHU4Nzk3XHU4NzgzXHU4N2FiXHU4N2U1XHU4N2FjXHU4N2I1XHU4N2IzXHU4N2NiXHU4N2QzXHU4N2JkXHU4N2QxXHU4N2MwXHU4N2NhXHU4N2RiXHU4N2VhXHU4N2UwXHU4N2VlXHU4ODE2XHU4ODEzXHU4N2ZlXHU4'@;
put 'ODBhXHU4ODFiXHU4ODIxXHU4ODM5XHU4ODNjXHU3ZjM2XHU3ZjQyXHU3ZjQ0XHU3ZjQ1XHU4MjEwXHU3YWZhXHU3YWZkXHU3YjA4XHU3YjAzXHU3YjA0XHU3YjE1XHU3YjBhXHU3YjJiXHU3YjBmXHU3YjQ3XHU3YjM4XHU3YjJhXHU3YjE5XHU3YjJlXHU3YjMxXHU3YjIwXHU3YjI1XHU3YjI0'@;
put 'XHU3YjMzXHU3YjNlXHU3YjFlXHU3YjU4XHU3YjVhXHU3YjQ1XHU3Yjc1XHU3YjRjXHU3YjVkXHU3YjYwXHU3YjZlXHU3YjdiXHU3YjYyXHU3YjcyXHU3YjcxXHU3YjkwXHU3YmE2XHU3YmE3XHU3YmI4XHU3YmFjXHU3YjlkXHU3YmE4XHU3Yjg1XHU3YmFhXHU3YjljXHU3YmEyXHU3YmFiXHU3'@;
put 'YmI0XHU3YmQxXHU3YmMxXHU3YmNjXHU3YmRkXHU3YmRhXHU3YmU1XHU3YmU2XHU3YmVhXHU3YzBjXHU3YmZlXHU3YmZjXHU3YzBmXHU3YzE2XHU3YzBiXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjQzXS5sZW5ndGg7KytnKTY1NTMzIT09X1syNDNdW2ddLmNoYXJDb2RlQXQoMCkmJihJ'@;
put 'W19bMjQzXVtnXV09NjIyMDgrZyx5WzYyMjA4K2ddPV9bMjQzXVtnXSk7Zm9yKF9bMjQ0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5YjA3XHU5YjA5XHU5YjBhXHU5YjBiXHU5YjBjXHU5YjBkXHU5YjBlXHU5YjEwXHU5YjExXHU5'@;
put 'YjEyXHU5YjE0XHU5YjE1XHU5YjE2XHU5YjE3XHU5YjE4XHU5YjE5XHU5YjFhXHU5YjFiXHU5YjFjXHU5YjFkXHU5YjFlXHU5YjIwXHU5YjIxXHU5YjIyXHU5YjI0XHU5YjI1XHU5YjI2XHU5YjI3XHU5YjI4XHU5YjI5XHU5YjJhXHU5YjJiXHU5YjJjXHU5YjJkXHU5YjJlXHU5YjMwXHU5YjMx'@;
put 'XHU5YjMzXHU5YjM0XHU5YjM1XHU5YjM2XHU5YjM3XHU5YjM4XHU5YjM5XHU5YjNhXHU5YjNkXHU5YjNlXHU5YjNmXHU5YjQwXHU5YjQ2XHU5YjRhXHU5YjRiXHU5YjRjXHU5YjRlXHU5YjUwXHU5YjUyXHU5YjUzXHU5YjU1XHU5YjU2XHU5YjU3XHU5YjU4XHU5YjU5XHU5YjVhXHVmZmZkXHU5'@;
put 'YjViXHU5YjVjXHU5YjVkXHU5YjVlXHU5YjVmXHU5YjYwXHU5YjYxXHU5YjYyXHU5YjYzXHU5YjY0XHU5YjY1XHU5YjY2XHU5YjY3XHU5YjY4XHU5YjY5XHU5YjZhXHU5YjZiXHU5YjZjXHU5YjZkXHU5YjZlXHU5YjZmXHU5YjcwXHU5YjcxXHU5YjcyXHU5YjczXHU5Yjc0XHU5Yjc1XHU5Yjc2'@;
put 'XHU5Yjc3XHU5Yjc4XHU5Yjc5XHU5YjdhXHU5YjdiXHU3YzFmXHU3YzJhXHU3YzI2XHU3YzM4XHU3YzQxXHU3YzQwXHU4MWZlXHU4MjAxXHU4MjAyXHU4MjA0XHU4MWVjXHU4ODQ0XHU4MjIxXHU4MjIyXHU4MjIzXHU4MjJkXHU4MjJmXHU4MjI4XHU4MjJiXHU4MjM4XHU4MjNiXHU4MjMzXHU4'@;
put 'MjM0XHU4MjNlXHU4MjQ0XHU4MjQ5XHU4MjRiXHU4MjRmXHU4MjVhXHU4MjVmXHU4MjY4XHU4ODdlXHU4ODg1XHU4ODg4XHU4OGQ4XHU4OGRmXHU4OTVlXHU3ZjlkXHU3ZjlmXHU3ZmE3XHU3ZmFmXHU3ZmIwXHU3ZmIyXHU3YzdjXHU2NTQ5XHU3YzkxXHU3YzlkXHU3YzljXHU3YzllXHU3Y2Ey'@;
put 'XHU3Y2IyXHU3Y2JjXHU3Y2JkXHU3Y2MxXHU3Y2M3XHU3Y2NjXHU3Y2NkXHU3Y2M4XHU3Y2M1XHU3Y2Q3XHU3Y2U4XHU4MjZlXHU2NmE4XHU3ZmJmXHU3ZmNlXHU3ZmQ1XHU3ZmU1XHU3ZmUxXHU3ZmU2XHU3ZmU5XHU3ZmVlXHU3ZmYzXHU3Y2Y4XHU3ZDc3XHU3ZGE2XHU3ZGFlXHU3ZTQ3XHU3'@;
put 'ZTliXHU5ZWI4XHU5ZWI0XHU4ZDczXHU4ZDg0XHU4ZDk0XHU4ZDkxXHU4ZGIxXHU4ZDY3XHU4ZDZkXHU4YzQ3XHU4YzQ5XHU5MTRhXHU5MTUwXHU5MTRlXHU5MTRmXHU5MTY0XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjQ0XS5sZW5ndGg7KytnKTY1NTMzIT09X1syNDRdW2ddLmNoYXJD'@;
put 'b2RlQXQoMCkmJihJW19bMjQ0XVtnXV09NjI0NjQrZyx5WzYyNDY0K2ddPV9bMjQ0XVtnXSk7Zm9yKF9bMjQ1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5YjdjXHU5YjdkXHU5YjdlXHU5YjdmXHU5YjgwXHU5YjgxXHU5YjgyXHU5'@;
put 'YjgzXHU5Yjg0XHU5Yjg1XHU5Yjg2XHU5Yjg3XHU5Yjg4XHU5Yjg5XHU5YjhhXHU5YjhiXHU5YjhjXHU5YjhkXHU5YjhlXHU5YjhmXHU5YjkwXHU5YjkxXHU5YjkyXHU5YjkzXHU5Yjk0XHU5Yjk1XHU5Yjk2XHU5Yjk3XHU5Yjk4XHU5Yjk5XHU5YjlhXHU5YjliXHU5YjljXHU5YjlkXHU5Yjll'@;
put 'XHU5YjlmXHU5YmEwXHU5YmExXHU5YmEyXHU5YmEzXHU5YmE0XHU5YmE1XHU5YmE2XHU5YmE3XHU5YmE4XHU5YmE5XHU5YmFhXHU5YmFiXHU5YmFjXHU5YmFkXHU5YmFlXHU5YmFmXHU5YmIwXHU5YmIxXHU5YmIyXHU5YmIzXHU5YmI0XHU5YmI1XHU5YmI2XHU5YmI3XHU5YmI4XHU5YmI5XHU5'@;
put 'YmJhXHVmZmZkXHU5YmJiXHU5YmJjXHU5YmJkXHU5YmJlXHU5YmJmXHU5YmMwXHU5YmMxXHU5YmMyXHU5YmMzXHU5YmM0XHU5YmM1XHU5YmM2XHU5YmM3XHU5YmM4XHU5YmM5XHU5YmNhXHU5YmNiXHU5YmNjXHU5YmNkXHU5YmNlXHU5YmNmXHU5YmQwXHU5YmQxXHU5YmQyXHU5YmQzXHU5YmQ0'@;
put 'XHU5YmQ1XHU5YmQ2XHU5YmQ3XHU5YmQ4XHU5YmQ5XHU5YmRhXHU5YmRiXHU5MTYyXHU5MTYxXHU5MTcwXHU5MTY5XHU5MTZmXHU5MTdkXHU5MTdlXHU5MTcyXHU5MTc0XHU5MTc5XHU5MThjXHU5MTg1XHU5MTkwXHU5MThkXHU5MTkxXHU5MWEyXHU5MWEzXHU5MWFhXHU5MWFkXHU5MWFlXHU5'@;
put 'MWFmXHU5MWI1XHU5MWI0XHU5MWJhXHU4YzU1XHU5ZTdlXHU4ZGI4XHU4ZGViXHU4ZTA1XHU4ZTU5XHU4ZTY5XHU4ZGI1XHU4ZGJmXHU4ZGJjXHU4ZGJhXHU4ZGM0XHU4ZGQ2XHU4ZGQ3XHU4ZGRhXHU4ZGRlXHU4ZGNlXHU4ZGNmXHU4ZGRiXHU4ZGM2XHU4ZGVjXHU4ZGY3XHU4ZGY4XHU4ZGUz'@;
put 'XHU4ZGY5XHU4ZGZiXHU4ZGU0XHU4ZTA5XHU4ZGZkXHU4ZTE0XHU4ZTFkXHU4ZTFmXHU4ZTJjXHU4ZTJlXHU4ZTIzXHU4ZTJmXHU4ZTNhXHU4ZTQwXHU4ZTM5XHU4ZTM1XHU4ZTNkXHU4ZTMxXHU4ZTQ5XHU4ZTQxXHU4ZTQyXHU4ZTUxXHU4ZTUyXHU4ZTRhXHU4ZTcwXHU4ZTc2XHU4ZTdjXHU4'@;
put 'ZTZmXHU4ZTc0XHU4ZTg1XHU4ZThmXHU4ZTk0XHU4ZTkwXHU4ZTljXHU4ZTllXHU4Yzc4XHU4YzgyXHU4YzhhXHU4Yzg1XHU4Yzk4XHU4Yzk0XHU2NTliXHU4OWQ2XHU4OWRlXHU4OWRhXHU4OWRjXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjQ1XS5sZW5ndGg7KytnKTY1NTMzIT09X1sy'@;
put 'NDVdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjQ1XVtnXV09NjI3MjArZyx5WzYyNzIwK2ddPV9bMjQ1XVtnXSk7Zm9yKF9bMjQ2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5YmRjXHU5YmRkXHU5YmRlXHU5YmRmXHU5YmUwXHU5'@;
put 'YmUxXHU5YmUyXHU5YmUzXHU5YmU0XHU5YmU1XHU5YmU2XHU5YmU3XHU5YmU4XHU5YmU5XHU5YmVhXHU5YmViXHU5YmVjXHU5YmVkXHU5YmVlXHU5YmVmXHU5YmYwXHU5YmYxXHU5YmYyXHU5YmYzXHU5YmY0XHU5YmY1XHU5YmY2XHU5YmY3XHU5YmY4XHU5YmY5XHU5YmZhXHU5YmZiXHU5YmZj'@;
put 'XHU5YmZkXHU5YmZlXHU5YmZmXHU5YzAwXHU5YzAxXHU5YzAyXHU5YzAzXHU5YzA0XHU5YzA1XHU5YzA2XHU5YzA3XHU5YzA4XHU5YzA5XHU5YzBhXHU5YzBiXHU5YzBjXHU5YzBkXHU5YzBlXHU5YzBmXHU5YzEwXHU5YzExXHU5YzEyXHU5YzEzXHU5YzE0XHU5YzE1XHU5YzE2XHU5YzE3XHU5'@;
put 'YzE4XHU5YzE5XHU5YzFhXHVmZmZkXHU5YzFiXHU5YzFjXHU5YzFkXHU5YzFlXHU5YzFmXHU5YzIwXHU5YzIxXHU5YzIyXHU5YzIzXHU5YzI0XHU5YzI1XHU5YzI2XHU5YzI3XHU5YzI4XHU5YzI5XHU5YzJhXHU5YzJiXHU5YzJjXHU5YzJkXHU5YzJlXHU5YzJmXHU5YzMwXHU5YzMxXHU5YzMy'@;
put 'XHU5YzMzXHU5YzM0XHU5YzM1XHU5YzM2XHU5YzM3XHU5YzM4XHU5YzM5XHU5YzNhXHU5YzNiXHU4OWU1XHU4OWViXHU4OWVmXHU4YTNlXHU4YjI2XHU5NzUzXHU5NmU5XHU5NmYzXHU5NmVmXHU5NzA2XHU5NzAxXHU5NzA4XHU5NzBmXHU5NzBlXHU5NzJhXHU5NzJkXHU5NzMwXHU5NzNlXHU5'@;
put 'ZjgwXHU5ZjgzXHU5Zjg1XHU5Zjg2XHU5Zjg3XHU5Zjg4XHU5Zjg5XHU5ZjhhXHU5ZjhjXHU5ZWZlXHU5ZjBiXHU5ZjBkXHU5NmI5XHU5NmJjXHU5NmJkXHU5NmNlXHU5NmQyXHU3N2JmXHU5NmUwXHU5MjhlXHU5MmFlXHU5MmM4XHU5MzNlXHU5MzZhXHU5M2NhXHU5MzhmXHU5NDNlXHU5NDZi'@;
put 'XHU5YzdmXHU5YzgyXHU5Yzg1XHU5Yzg2XHU5Yzg3XHU5Yzg4XHU3YTIzXHU5YzhiXHU5YzhlXHU5YzkwXHU5YzkxXHU5YzkyXHU5Yzk0XHU5Yzk1XHU5YzlhXHU5YzliXHU5YzllXHU5YzlmXHU5Y2EwXHU5Y2ExXHU5Y2EyXHU5Y2EzXHU5Y2E1XHU5Y2E2XHU5Y2E3XHU5Y2E4XHU5Y2E5XHU5'@;
put 'Y2FiXHU5Y2FkXHU5Y2FlXHU5Y2IwXHU5Y2IxXHU5Y2IyXHU5Y2IzXHU5Y2I0XHU5Y2I1XHU5Y2I2XHU5Y2I3XHU5Y2JhXHU5Y2JiXHU5Y2JjXHU5Y2JkXHU5Y2M0XHU5Y2M1XHU5Y2M2XHU5Y2M3XHU5Y2NhXHU5Y2NiXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjQ2XS5sZW5ndGg7Kytn'@;
put 'KTY1NTMzIT09X1syNDZdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjQ2XVtnXV09NjI5NzYrZyx5WzYyOTc2K2ddPV9bMjQ2XVtnXSk7Zm9yKF9bMjQ3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5YzNjXHU5YzNkXHU5YzNlXHU5'@;
put 'YzNmXHU5YzQwXHU5YzQxXHU5YzQyXHU5YzQzXHU5YzQ0XHU5YzQ1XHU5YzQ2XHU5YzQ3XHU5YzQ4XHU5YzQ5XHU5YzRhXHU5YzRiXHU5YzRjXHU5YzRkXHU5YzRlXHU5YzRmXHU5YzUwXHU5YzUxXHU5YzUyXHU5YzUzXHU5YzU0XHU5YzU1XHU5YzU2XHU5YzU3XHU5YzU4XHU5YzU5XHU5YzVh'@;
put 'XHU5YzViXHU5YzVjXHU5YzVkXHU5YzVlXHU5YzVmXHU5YzYwXHU5YzYxXHU5YzYyXHU5YzYzXHU5YzY0XHU5YzY1XHU5YzY2XHU5YzY3XHU5YzY4XHU5YzY5XHU5YzZhXHU5YzZiXHU5YzZjXHU5YzZkXHU5YzZlXHU5YzZmXHU5YzcwXHU5YzcxXHU5YzcyXHU5YzczXHU5Yzc0XHU5Yzc1XHU5'@;
put 'Yzc2XHU5Yzc3XHU5Yzc4XHU5Yzc5XHU5YzdhXHVmZmZkXHU5YzdiXHU5YzdkXHU5YzdlXHU5YzgwXHU5YzgzXHU5Yzg0XHU5Yzg5XHU5YzhhXHU5YzhjXHU5YzhmXHU5YzkzXHU5Yzk2XHU5Yzk3XHU5Yzk4XHU5Yzk5XHU5YzlkXHU5Y2FhXHU5Y2FjXHU5Y2FmXHU5Y2I5XHU5Y2JlXHU5Y2Jm'@;
put 'XHU5Y2MwXHU5Y2MxXHU5Y2MyXHU5Y2M4XHU5Y2M5XHU5Y2QxXHU5Y2QyXHU5Y2RhXHU5Y2RiXHU5Y2UwXHU5Y2UxXHU5Y2NjXHU5Y2NkXHU5Y2NlXHU5Y2NmXHU5Y2QwXHU5Y2QzXHU5Y2Q0XHU5Y2Q1XHU5Y2Q3XHU5Y2Q4XHU5Y2Q5XHU5Y2RjXHU5Y2RkXHU5Y2RmXHU5Y2UyXHU5NzdjXHU5'@;
put 'Nzg1XHU5NzkxXHU5NzkyXHU5Nzk0XHU5N2FmXHU5N2FiXHU5N2EzXHU5N2IyXHU5N2I0XHU5YWIxXHU5YWIwXHU5YWI3XHU5ZTU4XHU5YWI2XHU5YWJhXHU5YWJjXHU5YWMxXHU5YWMwXHU5YWM1XHU5YWMyXHU5YWNiXHU5YWNjXHU5YWQxXHU5YjQ1XHU5YjQzXHU5YjQ3XHU5YjQ5XHU5YjQ4'@;
put 'XHU5YjRkXHU5YjUxXHU5OGU4XHU5OTBkXHU5OTJlXHU5OTU1XHU5OTU0XHU5YWRmXHU5YWUxXHU5YWU2XHU5YWVmXHU5YWViXHU5YWZiXHU5YWVkXHU5YWY5XHU5YjA4XHU5YjBmXHU5YjEzXHU5YjFmXHU5YjIzXHU5ZWJkXHU5ZWJlXHU3ZTNiXHU5ZTgyXHU5ZTg3XHU5ZTg4XHU5ZThiXHU5'@;
put 'ZTkyXHU5M2Q2XHU5ZTlkXHU5ZTlmXHU5ZWRiXHU5ZWRjXHU5ZWRkXHU5ZWUwXHU5ZWRmXHU5ZWUyXHU5ZWU5XHU5ZWU3XHU5ZWU1XHU5ZWVhXHU5ZWVmXHU5ZjIyXHU5ZjJjXHU5ZjJmXHU5ZjM5XHU5ZjM3XHU5ZjNkXHU5ZjNlXHU5ZjQ0XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjQ3'@;
put 'XS5sZW5ndGg7KytnKTY1NTMzIT09X1syNDddW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjQ3XVtnXV09NjMyMzIrZyx5WzYzMjMyK2ddPV9bMjQ3XVtnXSk7Zm9yKF9bMjQ4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5Y2UzXHU5'@;
put 'Y2U0XHU5Y2U1XHU5Y2U2XHU5Y2U3XHU5Y2U4XHU5Y2U5XHU5Y2VhXHU5Y2ViXHU5Y2VjXHU5Y2VkXHU5Y2VlXHU5Y2VmXHU5Y2YwXHU5Y2YxXHU5Y2YyXHU5Y2YzXHU5Y2Y0XHU5Y2Y1XHU5Y2Y2XHU5Y2Y3XHU5Y2Y4XHU5Y2Y5XHU5Y2ZhXHU5Y2ZiXHU5Y2ZjXHU5Y2ZkXHU5Y2ZlXHU5Y2Zm'@;
put 'XHU5ZDAwXHU5ZDAxXHU5ZDAyXHU5ZDAzXHU5ZDA0XHU5ZDA1XHU5ZDA2XHU5ZDA3XHU5ZDA4XHU5ZDA5XHU5ZDBhXHU5ZDBiXHU5ZDBjXHU5ZDBkXHU5ZDBlXHU5ZDBmXHU5ZDEwXHU5ZDExXHU5ZDEyXHU5ZDEzXHU5ZDE0XHU5ZDE1XHU5ZDE2XHU5ZDE3XHU5ZDE4XHU5ZDE5XHU5ZDFhXHU5'@;
put 'ZDFiXHU5ZDFjXHU5ZDFkXHU5ZDFlXHU5ZDFmXHU5ZDIwXHU5ZDIxXHVmZmZkXHU5ZDIyXHU5ZDIzXHU5ZDI0XHU5ZDI1XHU5ZDI2XHU5ZDI3XHU5ZDI4XHU5ZDI5XHU5ZDJhXHU5ZDJiXHU5ZDJjXHU5ZDJkXHU5ZDJlXHU5ZDJmXHU5ZDMwXHU5ZDMxXHU5ZDMyXHU5ZDMzXHU5ZDM0XHU5ZDM1'@;
put 'XHU5ZDM2XHU5ZDM3XHU5ZDM4XHU5ZDM5XHU5ZDNhXHU5ZDNiXHU5ZDNjXHU5ZDNkXHU5ZDNlXHU5ZDNmXHU5ZDQwXHU5ZDQxXHU5ZDQyXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiks'@;
put 'Zz0wO2chPV9bMjQ4XS5sZW5ndGg7KytnKTY1NTMzIT09X1syNDhdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjQ4XVtnXV09NjM0ODgrZyx5WzYzNDg4K2ddPV9bMjQ4XVtnXSk7Zm9yKF9bMjQ5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHU5ZDQzXHU5ZDQ0XHU5ZDQ1XHU5ZDQ2XHU5ZDQ3XHU5ZDQ4XHU5ZDQ5XHU5ZDRhXHU5ZDRiXHU5ZDRjXHU5ZDRkXHU5ZDRlXHU5ZDRmXHU5ZDUwXHU5ZDUxXHU5ZDUyXHU5ZDUzXHU5ZDU0XHU5ZDU1XHU5ZDU2XHU5ZDU3XHU5ZDU4XHU5ZDU5XHU5ZDVhXHU5ZDViXHU5ZDVjXHU5ZDVk'@;
put 'XHU5ZDVlXHU5ZDVmXHU5ZDYwXHU5ZDYxXHU5ZDYyXHU5ZDYzXHU5ZDY0XHU5ZDY1XHU5ZDY2XHU5ZDY3XHU5ZDY4XHU5ZDY5XHU5ZDZhXHU5ZDZiXHU5ZDZjXHU5ZDZkXHU5ZDZlXHU5ZDZmXHU5ZDcwXHU5ZDcxXHU5ZDcyXHU5ZDczXHU5ZDc0XHU5ZDc1XHU5ZDc2XHU5ZDc3XHU5ZDc4XHU5'@;
put 'ZDc5XHU5ZDdhXHU5ZDdiXHU5ZDdjXHU5ZDdkXHU5ZDdlXHU5ZDdmXHU5ZDgwXHU5ZDgxXHVmZmZkXHU5ZDgyXHU5ZDgzXHU5ZDg0XHU5ZDg1XHU5ZDg2XHU5ZDg3XHU5ZDg4XHU5ZDg5XHU5ZDhhXHU5ZDhiXHU5ZDhjXHU5ZDhkXHU5ZDhlXHU5ZDhmXHU5ZDkwXHU5ZDkxXHU5ZDkyXHU5ZDkz'@;
put 'XHU5ZDk0XHU5ZDk1XHU5ZDk2XHU5ZDk3XHU5ZDk4XHU5ZDk5XHU5ZDlhXHU5ZDliXHU5ZDljXHU5ZDlkXHU5ZDllXHU5ZDlmXHU5ZGEwXHU5ZGExXHU5ZGEyXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'Ii5zcGxpdCgiIiksZz0wO2chPV9bMjQ5XS5sZW5ndGg7KytnKTY1NTMzIT09X1syNDldW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjQ5XVtnXV09NjM3NDQrZyx5WzYzNzQ0K2ddPV9bMjQ5XVtnXSk7Zm9yKF9bMjUwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHU5ZGEzXHU5ZGE0XHU5ZGE1XHU5ZGE2XHU5ZGE3XHU5ZGE4XHU5ZGE5XHU5ZGFhXHU5ZGFiXHU5ZGFjXHU5ZGFkXHU5ZGFlXHU5ZGFmXHU5ZGIwXHU5ZGIxXHU5ZGIyXHU5ZGIzXHU5ZGI0XHU5ZGI1XHU5ZGI2XHU5ZGI3XHU5ZGI4XHU5ZGI5XHU5ZGJhXHU5ZGJi'@;
put 'XHU5ZGJjXHU5ZGJkXHU5ZGJlXHU5ZGJmXHU5ZGMwXHU5ZGMxXHU5ZGMyXHU5ZGMzXHU5ZGM0XHU5ZGM1XHU5ZGM2XHU5ZGM3XHU5ZGM4XHU5ZGM5XHU5ZGNhXHU5ZGNiXHU5ZGNjXHU5ZGNkXHU5ZGNlXHU5ZGNmXHU5ZGQwXHU5ZGQxXHU5ZGQyXHU5ZGQzXHU5ZGQ0XHU5ZGQ1XHU5ZGQ2XHU5'@;
put 'ZGQ3XHU5ZGQ4XHU5ZGQ5XHU5ZGRhXHU5ZGRiXHU5ZGRjXHU5ZGRkXHU5ZGRlXHU5ZGRmXHU5ZGUwXHU5ZGUxXHVmZmZkXHU5ZGUyXHU5ZGUzXHU5ZGU0XHU5ZGU1XHU5ZGU2XHU5ZGU3XHU5ZGU4XHU5ZGU5XHU5ZGVhXHU5ZGViXHU5ZGVjXHU5ZGVkXHU5ZGVlXHU5ZGVmXHU5ZGYwXHU5ZGYx'@;
put 'XHU5ZGYyXHU5ZGYzXHU5ZGY0XHU5ZGY1XHU5ZGY2XHU5ZGY3XHU5ZGY4XHU5ZGY5XHU5ZGZhXHU5ZGZiXHU5ZGZjXHU5ZGZkXHU5ZGZlXHU5ZGZmXHU5ZTAwXHU5ZTAxXHU5ZTAyXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjUwXS5sZW5ndGg7KytnKTY1NTMzIT09X1syNTBdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjUwXVtnXV09NjRlMytnLHlbNjRlMytnXT1fWzI1MF1bZ10pO2ZvcihfWzI1MV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OWUwM1x1OWUwNFx1OWUwNVx1OWUwNlx1OWUwN1x1OWUwOFx1OWUwOVx1OWUwYVx1OWUwYlx1OWUwY1x1OWUwZFx1OWUwZVx1OWUwZlx1OWUxMFx1OWUxMVx1OWUxMlx1OWUxM1x1OWUxNFx1OWUxNVx1OWUxNlx1OWUxN1x1OWUxOFx1OWUxOVx1'@;
put 'OWUxYVx1OWUxYlx1OWUxY1x1OWUxZFx1OWUxZVx1OWUyNFx1OWUyN1x1OWUyZVx1OWUzMFx1OWUzNFx1OWUzYlx1OWUzY1x1OWU0MFx1OWU0ZFx1OWU1MFx1OWU1Mlx1OWU1M1x1OWU1NFx1OWU1Nlx1OWU1OVx1OWU1ZFx1OWU1Zlx1OWU2MFx1OWU2MVx1OWU2Mlx1OWU2NVx1OWU2ZVx1OWU2'@;
put 'Zlx1OWU3Mlx1OWU3NFx1OWU3NVx1OWU3Nlx1OWU3N1x1OWU3OFx1OWU3OVx1OWU3YVx1OWU3Ylx1OWU3Y1x1OWU3ZFx1OWU4MFx1ZmZmZFx1OWU4MVx1OWU4M1x1OWU4NFx1OWU4NVx1OWU4Nlx1OWU4OVx1OWU4YVx1OWU4Y1x1OWU4ZFx1OWU4ZVx1OWU4Zlx1OWU5MFx1OWU5MVx1OWU5NFx1'@;
put 'OWU5NVx1OWU5Nlx1OWU5N1x1OWU5OFx1OWU5OVx1OWU5YVx1OWU5Ylx1OWU5Y1x1OWU5ZVx1OWVhMFx1OWVhMVx1OWVhMlx1OWVhM1x1OWVhNFx1OWVhNVx1OWVhN1x1OWVhOFx1OWVhOVx1OWVhYVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzI1MV0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjUxXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzI1MV1bZ11dPTY0MjU2K2cseVs2NDI1NitnXT1fWzI1MV1bZ10pO2ZvcihfWzI1Ml09Ilx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OWVhYlx1OWVhY1x1OWVhZFx1OWVhZVx1OWVhZlx1OWViMFx1OWViMVx1OWViMlx1OWViM1x1OWViNVx1OWViNlx1OWViN1x1OWViOVx1OWViYVx1OWViY1x1OWViZlx1OWVjMFx1OWVjMVx1OWVjMlx1OWVjM1x1OWVjNVx1'@;
put 'OWVjNlx1OWVjN1x1OWVjOFx1OWVjYVx1OWVjYlx1OWVjY1x1OWVkMFx1OWVkMlx1OWVkM1x1OWVkNVx1OWVkNlx1OWVkN1x1OWVkOVx1OWVkYVx1OWVkZVx1OWVlMVx1OWVlM1x1OWVlNFx1OWVlNlx1OWVlOFx1OWVlYlx1OWVlY1x1OWVlZFx1OWVlZVx1OWVmMFx1OWVmMVx1OWVmMlx1OWVm'@;
put 'M1x1OWVmNFx1OWVmNVx1OWVmNlx1OWVmN1x1OWVmOFx1OWVmYVx1OWVmZFx1OWVmZlx1OWYwMFx1OWYwMVx1OWYwMlx1OWYwM1x1OWYwNFx1OWYwNVx1ZmZmZFx1OWYwNlx1OWYwN1x1OWYwOFx1OWYwOVx1OWYwYVx1OWYwY1x1OWYwZlx1OWYxMVx1OWYxMlx1OWYxNFx1OWYxNVx1OWYxNlx1'@;
put 'OWYxOFx1OWYxYVx1OWYxYlx1OWYxY1x1OWYxZFx1OWYxZVx1OWYxZlx1OWYyMVx1OWYyM1x1OWYyNFx1OWYyNVx1OWYyNlx1OWYyN1x1OWYyOFx1OWYyOVx1OWYyYVx1OWYyYlx1OWYyZFx1OWYyZVx1OWYzMFx1OWYzMVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzI1Ml0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjUyXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzI1Ml1bZ11dPTY0NTEyK2cseVs2NDUxMitnXT1fWzI1Ml1bZ10pO2ZvcihfWzI1M109Ilx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OWYzMlx1OWYzM1x1OWYzNFx1OWYzNVx1OWYzNlx1OWYzOFx1OWYzYVx1OWYzY1x1OWYzZlx1OWY0MFx1OWY0MVx1OWY0Mlx1OWY0M1x1OWY0NVx1OWY0Nlx1OWY0N1x1OWY0OFx1OWY0OVx1OWY0YVx1'@;
put 'OWY0Ylx1OWY0Y1x1OWY0ZFx1OWY0ZVx1OWY0Zlx1OWY1Mlx1OWY1M1x1OWY1NFx1OWY1NVx1OWY1Nlx1OWY1N1x1OWY1OFx1OWY1OVx1OWY1YVx1OWY1Ylx1OWY1Y1x1OWY1ZFx1OWY1ZVx1OWY1Zlx1OWY2MFx1OWY2MVx1OWY2Mlx1OWY2M1x1OWY2NFx1OWY2NVx1OWY2Nlx1OWY2N1x1OWY2'@;
put 'OFx1OWY2OVx1OWY2YVx1OWY2Ylx1OWY2Y1x1OWY2ZFx1OWY2ZVx1OWY2Zlx1OWY3MFx1OWY3MVx1OWY3Mlx1OWY3M1x1OWY3NFx1OWY3NVx1OWY3Nlx1OWY3N1x1OWY3OFx1ZmZmZFx1OWY3OVx1OWY3YVx1OWY3Ylx1OWY3Y1x1OWY3ZFx1OWY3ZVx1OWY4MVx1OWY4Mlx1OWY4ZFx1OWY4ZVx1'@;
put 'OWY4Zlx1OWY5MFx1OWY5MVx1OWY5Mlx1OWY5M1x1OWY5NFx1OWY5NVx1OWY5Nlx1OWY5N1x1OWY5OFx1OWY5Y1x1OWY5ZFx1OWY5ZVx1OWZhMVx1OWZhMlx1OWZhM1x1OWZhNFx1OWZhNVx1ZjkyY1x1Zjk3OVx1Zjk5NVx1ZjllN1x1ZjlmMVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzI1M10ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjUzXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzI1M11bZ11dPTY0NzY4K2cseVs2NDc2OCtnXT1fWzI1M11bZ10pO2Zvcihf'@;
put 'WzI1NF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmEwY1x1ZmEwZFx1ZmEwZVx1ZmEwZlx1ZmExMVx1ZmExM1x1ZmExNFx1ZmExOFx1ZmExZlx1ZmEyMFx1ZmEyMVx1ZmEyM1x1ZmEyNFx1ZmEyN1x1ZmEyOFx1ZmEyOVx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzI1NF0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjU0XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzI1NF1bZ11dPTY1MDI0K2cseVs2NTAyNCtnXT1fWzI1'@;
put 'NF1bZ10pO3JldHVybntlbmM6SSxkZWM6eX19KCksWFs5NDldPWZ1bmN0aW9uKCl7dmFyIGcseT1bXSxJPXt9LF89W107Zm9yKF9bMF09IlwwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwN1xiXHRcblx2XGZcclx4MGVceDBmXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTdceDE4'@;
put 'XHgxOVx4MWFceDFiXHgxY1x4MWRceDFlXHgxZiAhXCIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5ceDdmXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMF0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMF1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1swXVtnXV09MCtnLHlbMCtnXT1fWzBd'@;
put 'W2ddKTtmb3IoX1sxMjldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWFjMDJcdWFjMDNcdWFjMDVcdWFjMDZcdWFjMGJcdWFjMGNcdWFjMGRcdWFjMGVcdWFjMGZcdWFjMThcdWFjMWVcdWFjMWZcdWFjMjFcdWFjMjJcdWFj'@;
put 'MjNcdWFjMjVcdWFjMjZcdWFjMjdcdWFjMjhcdWFjMjlcdWFjMmFcdWFjMmJcdWFjMmVcdWFjMzJcdWFjMzNcdWFjMzRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWFjMzVcdWFjMzZcdWFjMzdcdWFjM2FcdWFjM2JcdWFjM2RcdWFjM2VcdWFjM2ZcdWFjNDFcdWFjNDJc'@;
put 'dWFjNDNcdWFjNDRcdWFjNDVcdWFjNDZcdWFjNDdcdWFjNDhcdWFjNDlcdWFjNGFcdWFjNGNcdWFjNGVcdWFjNGZcdWFjNTBcdWFjNTFcdWFjNTJcdWFjNTNcdWFjNTVcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWFjNTZcdWFjNTdcdWFjNTlcdWFjNWFcdWFjNWJcdWFj'@;
put 'NWRcdWFjNWVcdWFjNWZcdWFjNjBcdWFjNjFcdWFjNjJcdWFjNjNcdWFjNjRcdWFjNjVcdWFjNjZcdWFjNjdcdWFjNjhcdWFjNjlcdWFjNmFcdWFjNmJcdWFjNmNcdWFjNmRcdWFjNmVcdWFjNmZcdWFjNzJcdWFjNzNcdWFjNzVcdWFjNzZcdWFjNzlcdWFjN2JcdWFjN2NcdWFjN2RcdWFjN2Vc'@;
put 'dWFjN2ZcdWFjODJcdWFjODdcdWFjODhcdWFjOGRcdWFjOGVcdWFjOGZcdWFjOTFcdWFjOTJcdWFjOTNcdWFjOTVcdWFjOTZcdWFjOTdcdWFjOThcdWFjOTlcdWFjOWFcdWFjOWJcdWFjOWVcdWFjYTJcdWFjYTNcdWFjYTRcdWFjYTVcdWFjYTZcdWFjYTdcdWFjYWJcdWFjYWRcdWFjYWVcdWFj'@;
put 'YjFcdWFjYjJcdWFjYjNcdWFjYjRcdWFjYjVcdWFjYjZcdWFjYjdcdWFjYmFcdWFjYmVcdWFjYmZcdWFjYzBcdWFjYzJcdWFjYzNcdWFjYzVcdWFjYzZcdWFjYzdcdWFjYzlcdWFjY2FcdWFjY2JcdWFjY2RcdWFjY2VcdWFjY2ZcdWFjZDBcdWFjZDFcdWFjZDJcdWFjZDNcdWFjZDRcdWFjZDZc'@;
put 'dWFjZDhcdWFjZDlcdWFjZGFcdWFjZGJcdWFjZGNcdWFjZGRcdWFjZGVcdWFjZGZcdWFjZTJcdWFjZTNcdWFjZTVcdWFjZTZcdWFjZTlcdWFjZWJcdWFjZWRcdWFjZWVcdWFjZjJcdWFjZjRcdWFjZjdcdWFjZjhcdWFjZjlcdWFjZmFcdWFjZmJcdWFjZmVcdWFjZmZcdWFkMDFcdWFkMDJcdWFk'@;
put 'MDNcdWFkMDVcdWFkMDdcdWFkMDhcdWFkMDlcdWFkMGFcdWFkMGJcdWFkMGVcdWFkMTBcdWFkMTJcdWFkMTNcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxMjldLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzEyOV1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxMjldW2ddXT0zMzAyNCtnLHlbMzMw'@;
put 'MjQrZ109X1sxMjldW2ddKTtmb3IoX1sxMzBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWFkMTRcdWFkMTVcdWFkMTZcdWFkMTdcdWFkMTlcdWFkMWFcdWFkMWJcdWFkMWRcdWFkMWVcdWFkMWZcdWFkMjFcdWFkMjJcdWFk'@;
put 'MjNcdWFkMjRcdWFkMjVcdWFkMjZcdWFkMjdcdWFkMjhcdWFkMmFcdWFkMmJcdWFkMmVcdWFkMmZcdWFkMzBcdWFkMzFcdWFkMzJcdWFkMzNcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWFkMzZcdWFkMzdcdWFkMzlcdWFkM2FcdWFkM2JcdWFkM2RcdWFkM2VcdWFkM2Zc'@;
put 'dWFkNDBcdWFkNDFcdWFkNDJcdWFkNDNcdWFkNDZcdWFkNDhcdWFkNGFcdWFkNGJcdWFkNGNcdWFkNGRcdWFkNGVcdWFkNGZcdWFkNTFcdWFkNTJcdWFkNTNcdWFkNTVcdWFkNTZcdWFkNTdcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWFkNTlcdWFkNWFcdWFkNWJcdWFk'@;
put 'NWNcdWFkNWRcdWFkNWVcdWFkNWZcdWFkNjBcdWFkNjJcdWFkNjRcdWFkNjVcdWFkNjZcdWFkNjdcdWFkNjhcdWFkNjlcdWFkNmFcdWFkNmJcdWFkNmVcdWFkNmZcdWFkNzFcdWFkNzJcdWFkNzdcdWFkNzhcdWFkNzlcdWFkN2FcdWFkN2VcdWFkODBcdWFkODNcdWFkODRcdWFkODVcdWFkODZc'@;
put 'dWFkODdcdWFkOGFcdWFkOGJcdWFkOGRcdWFkOGVcdWFkOGZcdWFkOTFcdWFkOTJcdWFkOTNcdWFkOTRcdWFkOTVcdWFkOTZcdWFkOTdcdWFkOThcdWFkOTlcdWFkOWFcdWFkOWJcdWFkOWVcdWFkOWZcdWFkYTBcdWFkYTFcdWFkYTJcdWFkYTNcdWFkYTVcdWFkYTZcdWFkYTdcdWFkYThcdWFk'@;
put 'YTlcdWFkYWFcdWFkYWJcdWFkYWNcdWFkYWRcdWFkYWVcdWFkYWZcdWFkYjBcdWFkYjFcdWFkYjJcdWFkYjNcdWFkYjRcdWFkYjVcdWFkYjZcdWFkYjhcdWFkYjlcdWFkYmFcdWFkYmJcdWFkYmNcdWFkYmRcdWFkYmVcdWFkYmZcdWFkYzJcdWFkYzNcdWFkYzVcdWFkYzZcdWFkYzdcdWFkYzlc'@;
put 'dWFkY2FcdWFkY2JcdWFkY2NcdWFkY2RcdWFkY2VcdWFkY2ZcdWFkZDJcdWFkZDRcdWFkZDVcdWFkZDZcdWFkZDdcdWFkZDhcdWFkZDlcdWFkZGFcdWFkZGJcdWFkZGRcdWFkZGVcdWFkZGZcdWFkZTFcdWFkZTJcdWFkZTNcdWFkZTVcdWFkZTZcdWFkZTdcdWFkZThcdWFkZTlcdWFkZWFcdWFk'@;
put 'ZWJcdWFkZWNcdWFkZWRcdWFkZWVcdWFkZWZcdWFkZjBcdWFkZjFcdWFkZjJcdWFkZjNcdWFkZjRcdWFkZjVcdWFkZjZcdWFkZjdcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxMzBdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzEzMF1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxMzBdW2ddXT0z'@;
put 'MzI4MCtnLHlbMzMyODArZ109X1sxMzBdW2ddKTtmb3IoX1sxMzFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWFkZmFcdWFkZmJcdWFkZmRcdWFkZmVcdWFlMDJcdWFlMDNcdWFlMDRcdWFlMDVcdWFlMDZcdWFlMDdcdWFl'@;
put 'MGFcdWFlMGNcdWFlMGVcdWFlMGZcdWFlMTBcdWFlMTFcdWFlMTJcdWFlMTNcdWFlMTVcdWFlMTZcdWFlMTdcdWFlMThcdWFlMTlcdWFlMWFcdWFlMWJcdWFlMWNcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWFlMWRcdWFlMWVcdWFlMWZcdWFlMjBcdWFlMjFcdWFlMjJc'@;
put 'dWFlMjNcdWFlMjRcdWFlMjVcdWFlMjZcdWFlMjdcdWFlMjhcdWFlMjlcdWFlMmFcdWFlMmJcdWFlMmNcdWFlMmRcdWFlMmVcdWFlMmZcdWFlMzJcdWFlMzNcdWFlMzVcdWFlMzZcdWFlMzlcdWFlM2JcdWFlM2NcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWFlM2RcdWFl'@;
put 'M2VcdWFlM2ZcdWFlNDJcdWFlNDRcdWFlNDdcdWFlNDhcdWFlNDlcdWFlNGJcdWFlNGZcdWFlNTFcdWFlNTJcdWFlNTNcdWFlNTVcdWFlNTdcdWFlNThcdWFlNTlcdWFlNWFcdWFlNWJcdWFlNWVcdWFlNjJcdWFlNjNcdWFlNjRcdWFlNjZcdWFlNjdcdWFlNmFcdWFlNmJcdWFlNmRcdWFlNmVc'@;
put 'dWFlNmZcdWFlNzFcdWFlNzJcdWFlNzNcdWFlNzRcdWFlNzVcdWFlNzZcdWFlNzdcdWFlN2FcdWFlN2VcdWFlN2ZcdWFlODBcdWFlODFcdWFlODJcdWFlODNcdWFlODZcdWFlODdcdWFlODhcdWFlODlcdWFlOGFcdWFlOGJcdWFlOGRcdWFlOGVcdWFlOGZcdWFlOTBcdWFlOTFcdWFlOTJcdWFl'@;
put 'OTNcdWFlOTRcdWFlOTVcdWFlOTZcdWFlOTdcdWFlOThcdWFlOTlcdWFlOWFcdWFlOWJcdWFlOWNcdWFlOWRcdWFlOWVcdWFlOWZcdWFlYTBcdWFlYTFcdWFlYTJcdWFlYTNcdWFlYTRcdWFlYTVcdWFlYTZcdWFlYTdcdWFlYThcdWFlYTlcdWFlYWFcdWFlYWJcdWFlYWNcdWFlYWRcdWFlYWVc'@;
put 'dWFlYWZcdWFlYjBcdWFlYjFcdWFlYjJcdWFlYjNcdWFlYjRcdWFlYjVcdWFlYjZcdWFlYjdcdWFlYjhcdWFlYjlcdWFlYmFcdWFlYmJcdWFlYmZcdWFlYzFcdWFlYzJcdWFlYzNcdWFlYzVcdWFlYzZcdWFlYzdcdWFlYzhcdWFlYzlcdWFlY2FcdWFlY2JcdWFlY2VcdWFlZDJcdWFlZDNcdWFl'@;
put 'ZDRcdWFlZDVcdWFlZDZcdWFlZDdcdWFlZGFcdWFlZGJcdWFlZGRcdWFlZGVcdWFlZGZcdWFlZTBcdWFlZTFcdWFlZTJcdWFlZTNcdWFlZTRcdWFlZTVcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxMzFdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzEzMV1bZ10uY2hhckNvZGVBdCgwKSYmKElb'@;
put 'X1sxMzFdW2ddXT0zMzUzNitnLHlbMzM1MzYrZ109X1sxMzFdW2ddKTtmb3IoX1sxMzJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWFlZTZcdWFlZTdcdWFlZTlcdWFlZWFcdWFlZWNcdWFlZWVcdWFlZWZcdWFlZjBcdWFl'@;
put 'ZjFcdWFlZjJcdWFlZjNcdWFlZjVcdWFlZjZcdWFlZjdcdWFlZjlcdWFlZmFcdWFlZmJcdWFlZmRcdWFlZmVcdWFlZmZcdWFmMDBcdWFmMDFcdWFmMDJcdWFmMDNcdWFmMDRcdWFmMDVcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWFmMDZcdWFmMDlcdWFmMGFcdWFmMGJc'@;
put 'dWFmMGNcdWFmMGVcdWFmMGZcdWFmMTFcdWFmMTJcdWFmMTNcdWFmMTRcdWFmMTVcdWFmMTZcdWFmMTdcdWFmMThcdWFmMTlcdWFmMWFcdWFmMWJcdWFmMWNcdWFmMWRcdWFmMWVcdWFmMWZcdWFmMjBcdWFmMjFcdWFmMjJcdWFmMjNcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWFmMjRcdWFmMjVcdWFmMjZcdWFmMjdcdWFmMjhcdWFmMjlcdWFmMmFcdWFmMmJcdWFmMmVcdWFmMmZcdWFmMzFcdWFmMzNcdWFmMzVcdWFmMzZcdWFmMzdcdWFmMzhcdWFmMzlcdWFmM2FcdWFmM2JcdWFmM2VcdWFmNDBcdWFmNDRcdWFmNDVcdWFmNDZcdWFmNDdcdWFmNGFcdWFmNGJc'@;
put 'dWFmNGNcdWFmNGRcdWFmNGVcdWFmNGZcdWFmNTFcdWFmNTJcdWFmNTNcdWFmNTRcdWFmNTVcdWFmNTZcdWFmNTdcdWFmNThcdWFmNTlcdWFmNWFcdWFmNWJcdWFmNWVcdWFmNWZcdWFmNjBcdWFmNjFcdWFmNjJcdWFmNjNcdWFmNjZcdWFmNjdcdWFmNjhcdWFmNjlcdWFmNmFcdWFmNmJcdWFm'@;
put 'NmNcdWFmNmRcdWFmNmVcdWFmNmZcdWFmNzBcdWFmNzFcdWFmNzJcdWFmNzNcdWFmNzRcdWFmNzVcdWFmNzZcdWFmNzdcdWFmNzhcdWFmN2FcdWFmN2JcdWFmN2NcdWFmN2RcdWFmN2VcdWFmN2ZcdWFmODFcdWFmODJcdWFmODNcdWFmODVcdWFmODZcdWFmODdcdWFmODlcdWFmOGFcdWFmOGJc'@;
put 'dWFmOGNcdWFmOGRcdWFmOGVcdWFmOGZcdWFmOTJcdWFmOTNcdWFmOTRcdWFmOTZcdWFmOTdcdWFmOThcdWFmOTlcdWFmOWFcdWFmOWJcdWFmOWRcdWFmOWVcdWFmOWZcdWFmYTBcdWFmYTFcdWFmYTJcdWFmYTNcdWFmYTRcdWFmYTVcdWFmYTZcdWFmYTdcdWFmYThcdWFmYTlcdWFmYWFcdWFm'@;
put 'YWJcdWFmYWNcdWFmYWRcdWFmYWVcdWFmYWZcdWFmYjBcdWFmYjFcdWFmYjJcdWFmYjNcdWFmYjRcdWFmYjVcdWFmYjZcdWFmYjdcdWFmYmFcdWFmYmJcdWFmYmRcdWFmYmVcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxMzJdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzEzMl1bZ10uY2hhckNv'@;
put 'ZGVBdCgwKSYmKElbX1sxMzJdW2ddXT0zMzc5MitnLHlbMzM3OTIrZ109X1sxMzJdW2ddKTtmb3IoX1sxMzNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWFmYmZcdWFmYzFcdWFmYzJcdWFmYzNcdWFmYzRcdWFmYzVcdWFm'@;
put 'YzZcdWFmY2FcdWFmY2NcdWFmY2ZcdWFmZDBcdWFmZDFcdWFmZDJcdWFmZDNcdWFmZDVcdWFmZDZcdWFmZDdcdWFmZDhcdWFmZDlcdWFmZGFcdWFmZGJcdWFmZGRcdWFmZGVcdWFmZGZcdWFmZTBcdWFmZTFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWFmZTJcdWFmZTNc'@;
put 'dWFmZTRcdWFmZTVcdWFmZTZcdWFmZTdcdWFmZWFcdWFmZWJcdWFmZWNcdWFmZWRcdWFmZWVcdWFmZWZcdWFmZjJcdWFmZjNcdWFmZjVcdWFmZjZcdWFmZjdcdWFmZjlcdWFmZmFcdWFmZmJcdWFmZmNcdWFmZmRcdWFmZmVcdWFmZmZcdWIwMDJcdWIwMDNcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWIwMDVcdWIwMDZcdWIwMDdcdWIwMDhcdWIwMDlcdWIwMGFcdWIwMGJcdWIwMGRcdWIwMGVcdWIwMGZcdWIwMTFcdWIwMTJcdWIwMTNcdWIwMTVcdWIwMTZcdWIwMTdcdWIwMThcdWIwMTlcdWIwMWFcdWIwMWJcdWIwMWVcdWIwMWZcdWIwMjBcdWIwMjFcdWIwMjJc'@;
put 'dWIwMjNcdWIwMjRcdWIwMjVcdWIwMjZcdWIwMjdcdWIwMjlcdWIwMmFcdWIwMmJcdWIwMmNcdWIwMmRcdWIwMmVcdWIwMmZcdWIwMzBcdWIwMzFcdWIwMzJcdWIwMzNcdWIwMzRcdWIwMzVcdWIwMzZcdWIwMzdcdWIwMzhcdWIwMzlcdWIwM2FcdWIwM2JcdWIwM2NcdWIwM2RcdWIwM2VcdWIw'@;
put 'M2ZcdWIwNDBcdWIwNDFcdWIwNDJcdWIwNDNcdWIwNDZcdWIwNDdcdWIwNDlcdWIwNGJcdWIwNGRcdWIwNGZcdWIwNTBcdWIwNTFcdWIwNTJcdWIwNTZcdWIwNThcdWIwNWFcdWIwNWJcdWIwNWNcdWIwNWVcdWIwNWZcdWIwNjBcdWIwNjFcdWIwNjJcdWIwNjNcdWIwNjRcdWIwNjVcdWIwNjZc'@;
put 'dWIwNjdcdWIwNjhcdWIwNjlcdWIwNmFcdWIwNmJcdWIwNmNcdWIwNmRcdWIwNmVcdWIwNmZcdWIwNzBcdWIwNzFcdWIwNzJcdWIwNzNcdWIwNzRcdWIwNzVcdWIwNzZcdWIwNzdcdWIwNzhcdWIwNzlcdWIwN2FcdWIwN2JcdWIwN2VcdWIwN2ZcdWIwODFcdWIwODJcdWIwODNcdWIwODVcdWIw'@;
put 'ODZcdWIwODdcdWIwODhcdWIwODlcdWIwOGFcdWIwOGJcdWIwOGVcdWIwOTBcdWIwOTJcdWIwOTNcdWIwOTRcdWIwOTVcdWIwOTZcdWIwOTdcdWIwOWJcdWIwOWRcdWIwOWVcdWIwYTNcdWIwYTRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxMzNdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzEz'@;
put 'M11bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxMzNdW2ddXT0zNDA0OCtnLHlbMzQwNDgrZ109X1sxMzNdW2ddKTtmb3IoX1sxMzRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWIwYTVcdWIwYTZcdWIwYTdcdWIwYWFcdWIw'@;
put 'YjBcdWIwYjJcdWIwYjZcdWIwYjdcdWIwYjlcdWIwYmFcdWIwYmJcdWIwYmRcdWIwYmVcdWIwYmZcdWIwYzBcdWIwYzFcdWIwYzJcdWIwYzNcdWIwYzZcdWIwY2FcdWIwY2JcdWIwY2NcdWIwY2RcdWIwY2VcdWIwY2ZcdWIwZDJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWIwZDNcdWIwZDVcdWIwZDZcdWIwZDdcdWIwZDlcdWIwZGFcdWIwZGJcdWIwZGNcdWIwZGRcdWIwZGVcdWIwZGZcdWIwZTFcdWIwZTJcdWIwZTNcdWIwZTRcdWIwZTZcdWIwZTdcdWIwZThcdWIwZTlcdWIwZWFcdWIwZWJcdWIwZWNcdWIwZWRcdWIwZWVcdWIwZWZcdWIwZjBcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWIwZjFcdWIwZjJcdWIwZjNcdWIwZjRcdWIwZjVcdWIwZjZcdWIwZjdcdWIwZjhcdWIwZjlcdWIwZmFcdWIwZmJcdWIwZmNcdWIwZmRcdWIwZmVcdWIwZmZcdWIxMDBcdWIxMDFcdWIxMDJcdWIxMDNcdWIxMDRcdWIxMDVcdWIxMDZcdWIxMDdc'@;
put 'dWIxMGFcdWIxMGRcdWIxMGVcdWIxMGZcdWIxMTFcdWIxMTRcdWIxMTVcdWIxMTZcdWIxMTdcdWIxMWFcdWIxMWVcdWIxMWZcdWIxMjBcdWIxMjFcdWIxMjJcdWIxMjZcdWIxMjdcdWIxMjlcdWIxMmFcdWIxMmJcdWIxMmRcdWIxMmVcdWIxMmZcdWIxMzBcdWIxMzFcdWIxMzJcdWIxMzNcdWIx'@;
put 'MzZcdWIxM2FcdWIxM2JcdWIxM2NcdWIxM2RcdWIxM2VcdWIxM2ZcdWIxNDJcdWIxNDNcdWIxNDVcdWIxNDZcdWIxNDdcdWIxNDlcdWIxNGFcdWIxNGJcdWIxNGNcdWIxNGRcdWIxNGVcdWIxNGZcdWIxNTJcdWIxNTNcdWIxNTZcdWIxNTdcdWIxNTlcdWIxNWFcdWIxNWJcdWIxNWRcdWIxNWVc'@;
put 'dWIxNWZcdWIxNjFcdWIxNjJcdWIxNjNcdWIxNjRcdWIxNjVcdWIxNjZcdWIxNjdcdWIxNjhcdWIxNjlcdWIxNmFcdWIxNmJcdWIxNmNcdWIxNmRcdWIxNmVcdWIxNmZcdWIxNzBcdWIxNzFcdWIxNzJcdWIxNzNcdWIxNzRcdWIxNzVcdWIxNzZcdWIxNzdcdWIxN2FcdWIxN2JcdWIxN2RcdWIx'@;
put 'N2VcdWIxN2ZcdWIxODFcdWIxODNcdWIxODRcdWIxODVcdWIxODZcdWIxODdcdWIxOGFcdWIxOGNcdWIxOGVcdWIxOGZcdWIxOTBcdWIxOTFcdWIxOTVcdWIxOTZcdWIxOTdcdWIxOTlcdWIxOWFcdWIxOWJcdWIxOWRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxMzRdLmxlbmd0aDsrK2cp'@;
put 'NjU1MzMhPT1fWzEzNF1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxMzRdW2ddXT0zNDMwNCtnLHlbMzQzMDQrZ109X1sxMzRdW2ddKTtmb3IoX1sxMzVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWIxOWVcdWIxOWZcdWIx'@;
put 'YTBcdWIxYTFcdWIxYTJcdWIxYTNcdWIxYTRcdWIxYTVcdWIxYTZcdWIxYTdcdWIxYTlcdWIxYWFcdWIxYWJcdWIxYWNcdWIxYWRcdWIxYWVcdWIxYWZcdWIxYjBcdWIxYjFcdWIxYjJcdWIxYjNcdWIxYjRcdWIxYjVcdWIxYjZcdWIxYjdcdWIxYjhcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWIxYjlcdWIxYmFcdWIxYmJcdWIxYmNcdWIxYmRcdWIxYmVcdWIxYmZcdWIxYzBcdWIxYzFcdWIxYzJcdWIxYzNcdWIxYzRcdWIxYzVcdWIxYzZcdWIxYzdcdWIxYzhcdWIxYzlcdWIxY2FcdWIxY2JcdWIxY2RcdWIxY2VcdWIxY2ZcdWIxZDFcdWIxZDJcdWIxZDNcdWIx'@;
put 'ZDVcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWIxZDZcdWIxZDdcdWIxZDhcdWIxZDlcdWIxZGFcdWIxZGJcdWIxZGVcdWIxZTBcdWIxZTFcdWIxZTJcdWIxZTNcdWIxZTRcdWIxZTVcdWIxZTZcdWIxZTdcdWIxZWFcdWIxZWJcdWIxZWRcdWIxZWVcdWIxZWZcdWIxZjFc'@;
put 'dWIxZjJcdWIxZjNcdWIxZjRcdWIxZjVcdWIxZjZcdWIxZjdcdWIxZjhcdWIxZmFcdWIxZmNcdWIxZmVcdWIxZmZcdWIyMDBcdWIyMDFcdWIyMDJcdWIyMDNcdWIyMDZcdWIyMDdcdWIyMDlcdWIyMGFcdWIyMGRcdWIyMGVcdWIyMGZcdWIyMTBcdWIyMTFcdWIyMTJcdWIyMTNcdWIyMTZcdWIy'@;
put 'MThcdWIyMWFcdWIyMWJcdWIyMWNcdWIyMWRcdWIyMWVcdWIyMWZcdWIyMjFcdWIyMjJcdWIyMjNcdWIyMjRcdWIyMjVcdWIyMjZcdWIyMjdcdWIyMjhcdWIyMjlcdWIyMmFcdWIyMmJcdWIyMmNcdWIyMmRcdWIyMmVcdWIyMmZcdWIyMzBcdWIyMzFcdWIyMzJcdWIyMzNcdWIyMzVcdWIyMzZc'@;
put 'dWIyMzdcdWIyMzhcdWIyMzlcdWIyM2FcdWIyM2JcdWIyM2RcdWIyM2VcdWIyM2ZcdWIyNDBcdWIyNDFcdWIyNDJcdWIyNDNcdWIyNDRcdWIyNDVcdWIyNDZcdWIyNDdcdWIyNDhcdWIyNDlcdWIyNGFcdWIyNGJcdWIyNGNcdWIyNGRcdWIyNGVcdWIyNGZcdWIyNTBcdWIyNTFcdWIyNTJcdWIy'@;
put 'NTNcdWIyNTRcdWIyNTVcdWIyNTZcdWIyNTdcdWIyNTlcdWIyNWFcdWIyNWJcdWIyNWRcdWIyNWVcdWIyNWZcdWIyNjFcdWIyNjJcdWIyNjNcdWIyNjRcdWIyNjVcdWIyNjZcdWIyNjdcdWIyNmFcdWIyNmJcdWIyNmNcdWIyNmRcdWIyNmVcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxMzVd'@;
put 'Lmxlbmd0aDsrK2cpNjU1MzMhPT1fWzEzNV1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxMzVdW2ddXT0zNDU2MCtnLHlbMzQ1NjArZ109X1sxMzVdW2ddKTtmb3IoX1sxMzZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWIy'@;
put 'NmZcdWIyNzBcdWIyNzFcdWIyNzJcdWIyNzNcdWIyNzZcdWIyNzdcdWIyNzhcdWIyNzlcdWIyN2FcdWIyN2JcdWIyN2RcdWIyN2VcdWIyN2ZcdWIyODBcdWIyODFcdWIyODJcdWIyODNcdWIyODZcdWIyODdcdWIyODhcdWIyOGFcdWIyOGJcdWIyOGNcdWIyOGRcdWIyOGVcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWIyOGZcdWIyOTJcdWIyOTNcdWIyOTVcdWIyOTZcdWIyOTdcdWIyOWJcdWIyOWNcdWIyOWRcdWIyOWVcdWIyOWZcdWIyYTJcdWIyYTRcdWIyYTdcdWIyYThcdWIyYTlcdWIyYWJcdWIyYWRcdWIyYWVcdWIyYWZcdWIyYjFcdWIyYjJcdWIyYjNcdWIy'@;
put 'YjVcdWIyYjZcdWIyYjdcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWIyYjhcdWIyYjlcdWIyYmFcdWIyYmJcdWIyYmNcdWIyYmRcdWIyYmVcdWIyYmZcdWIyYzBcdWIyYzFcdWIyYzJcdWIyYzNcdWIyYzRcdWIyYzVcdWIyYzZcdWIyYzdcdWIyY2FcdWIyY2JcdWIyY2Rc'@;
put 'dWIyY2VcdWIyY2ZcdWIyZDFcdWIyZDNcdWIyZDRcdWIyZDVcdWIyZDZcdWIyZDdcdWIyZGFcdWIyZGNcdWIyZGVcdWIyZGZcdWIyZTBcdWIyZTFcdWIyZTNcdWIyZTdcdWIyZTlcdWIyZWFcdWIyZjBcdWIyZjFcdWIyZjJcdWIyZjZcdWIyZmNcdWIyZmRcdWIyZmVcdWIzMDJcdWIzMDNcdWIz'@;
put 'MDVcdWIzMDZcdWIzMDdcdWIzMDlcdWIzMGFcdWIzMGJcdWIzMGNcdWIzMGRcdWIzMGVcdWIzMGZcdWIzMTJcdWIzMTZcdWIzMTdcdWIzMThcdWIzMTlcdWIzMWFcdWIzMWJcdWIzMWRcdWIzMWVcdWIzMWZcdWIzMjBcdWIzMjFcdWIzMjJcdWIzMjNcdWIzMjRcdWIzMjVcdWIzMjZcdWIzMjdc'@;
put 'dWIzMjhcdWIzMjlcdWIzMmFcdWIzMmJcdWIzMmNcdWIzMmRcdWIzMmVcdWIzMmZcdWIzMzBcdWIzMzFcdWIzMzJcdWIzMzNcdWIzMzRcdWIzMzVcdWIzMzZcdWIzMzdcdWIzMzhcdWIzMzlcdWIzM2FcdWIzM2JcdWIzM2NcdWIzM2RcdWIzM2VcdWIzM2ZcdWIzNDBcdWIzNDFcdWIzNDJcdWIz'@;
put 'NDNcdWIzNDRcdWIzNDVcdWIzNDZcdWIzNDdcdWIzNDhcdWIzNDlcdWIzNGFcdWIzNGJcdWIzNGNcdWIzNGRcdWIzNGVcdWIzNGZcdWIzNTBcdWIzNTFcdWIzNTJcdWIzNTNcdWIzNTdcdWIzNTlcdWIzNWFcdWIzNWRcdWIzNjBcdWIzNjFcdWIzNjJcdWIzNjNcdWZmZmQiLnNwbGl0KCIiKSxn'@;
put 'PTA7ZyE9X1sxMzZdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzEzNl1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxMzZdW2ddXT0zNDgxNitnLHlbMzQ4MTYrZ109X1sxMzZdW2ddKTtmb3IoX1sxMzddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWIzNjZcdWIzNjhcdWIzNmFcdWIzNmNcdWIzNmRcdWIzNmZcdWIzNzJcdWIzNzNcdWIzNzVcdWIzNzZcdWIzNzdcdWIzNzlcdWIzN2FcdWIzN2JcdWIzN2NcdWIzN2RcdWIzN2VcdWIzN2ZcdWIzODJcdWIzODZcdWIzODdcdWIzODhcdWIzODlcdWIzOGFcdWIzOGJcdWIzOGRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWIzOGVcdWIzOGZcdWIzOTFcdWIzOTJcdWIzOTNcdWIzOTVcdWIzOTZcdWIzOTdcdWIzOThcdWIzOTlcdWIzOWFcdWIzOWJcdWIzOWNcdWIzOWRcdWIzOWVcdWIzOWZcdWIzYTJcdWIzYTNcdWIzYTRcdWIzYTVcdWIzYTZcdWIz'@;
put 'YTdcdWIzYTlcdWIzYWFcdWIzYWJcdWIzYWRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWIzYWVcdWIzYWZcdWIzYjBcdWIzYjFcdWIzYjJcdWIzYjNcdWIzYjRcdWIzYjVcdWIzYjZcdWIzYjdcdWIzYjhcdWIzYjlcdWIzYmFcdWIzYmJcdWIzYmNcdWIzYmRcdWIzYmVc'@;
put 'dWIzYmZcdWIzYzBcdWIzYzFcdWIzYzJcdWIzYzNcdWIzYzZcdWIzYzdcdWIzYzlcdWIzY2FcdWIzY2RcdWIzY2ZcdWIzZDFcdWIzZDJcdWIzZDNcdWIzZDZcdWIzZDhcdWIzZGFcdWIzZGNcdWIzZGVcdWIzZGZcdWIzZTFcdWIzZTJcdWIzZTNcdWIzZTVcdWIzZTZcdWIzZTdcdWIzZTlcdWIz'@;
put 'ZWFcdWIzZWJcdWIzZWNcdWIzZWRcdWIzZWVcdWIzZWZcdWIzZjBcdWIzZjFcdWIzZjJcdWIzZjNcdWIzZjRcdWIzZjVcdWIzZjZcdWIzZjdcdWIzZjhcdWIzZjlcdWIzZmFcdWIzZmJcdWIzZmRcdWIzZmVcdWIzZmZcdWI0MDBcdWI0MDFcdWI0MDJcdWI0MDNcdWI0MDRcdWI0MDVcdWI0MDZc'@;
put 'dWI0MDdcdWI0MDhcdWI0MDlcdWI0MGFcdWI0MGJcdWI0MGNcdWI0MGRcdWI0MGVcdWI0MGZcdWI0MTFcdWI0MTJcdWI0MTNcdWI0MTRcdWI0MTVcdWI0MTZcdWI0MTdcdWI0MTlcdWI0MWFcdWI0MWJcdWI0MWRcdWI0MWVcdWI0MWZcdWI0MjFcdWI0MjJcdWI0MjNcdWI0MjRcdWI0MjVcdWI0'@;
put 'MjZcdWI0MjdcdWI0MmFcdWI0MmNcdWI0MmRcdWI0MmVcdWI0MmZcdWI0MzBcdWI0MzFcdWI0MzJcdWI0MzNcdWI0MzVcdWI0MzZcdWI0MzdcdWI0MzhcdWI0MzlcdWI0M2FcdWI0M2JcdWI0M2NcdWI0M2RcdWI0M2VcdWI0M2ZcdWI0NDBcdWI0NDFcdWI0NDJcdWI0NDNcdWI0NDRcdWZmZmQi'@;
put 'LnNwbGl0KCIiKSxnPTA7ZyE9X1sxMzddLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzEzN11bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxMzddW2ddXT0zNTA3MitnLHlbMzUwNzIrZ109X1sxMzddW2ddKTtmb3IoX1sxMzhdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWI0NDVcdWI0NDZcdWI0NDdcdWI0NDhcdWI0NDlcdWI0NGFcdWI0NGJcdWI0NGNcdWI0NGRcdWI0NGVcdWI0NGZcdWI0NTJcdWI0NTNcdWI0NTVcdWI0NTZcdWI0NTdcdWI0NTlcdWI0NWFcdWI0NWJcdWI0NWNcdWI0NWRcdWI0NWVcdWI0NWZcdWI0NjJc'@;
put 'dWI0NjRcdWI0NjZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWI0NjdcdWI0NjhcdWI0NjlcdWI0NmFcdWI0NmJcdWI0NmRcdWI0NmVcdWI0NmZcdWI0NzBcdWI0NzFcdWI0NzJcdWI0NzNcdWI0NzRcdWI0NzVcdWI0NzZcdWI0NzdcdWI0NzhcdWI0NzlcdWI0N2FcdWI0'@;
put 'N2JcdWI0N2NcdWI0N2RcdWI0N2VcdWI0N2ZcdWI0ODFcdWI0ODJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWI0ODNcdWI0ODRcdWI0ODVcdWI0ODZcdWI0ODdcdWI0ODlcdWI0OGFcdWI0OGJcdWI0OGNcdWI0OGRcdWI0OGVcdWI0OGZcdWI0OTBcdWI0OTFcdWI0OTJc'@;
put 'dWI0OTNcdWI0OTRcdWI0OTVcdWI0OTZcdWI0OTdcdWI0OThcdWI0OTlcdWI0OWFcdWI0OWJcdWI0OWNcdWI0OWVcdWI0OWZcdWI0YTBcdWI0YTFcdWI0YTJcdWI0YTNcdWI0YTVcdWI0YTZcdWI0YTdcdWI0YTlcdWI0YWFcdWI0YWJcdWI0YWRcdWI0YWVcdWI0YWZcdWI0YjBcdWI0YjFcdWI0'@;
put 'YjJcdWI0YjNcdWI0YjRcdWI0YjZcdWI0YjhcdWI0YmFcdWI0YmJcdWI0YmNcdWI0YmRcdWI0YmVcdWI0YmZcdWI0YzFcdWI0YzJcdWI0YzNcdWI0YzVcdWI0YzZcdWI0YzdcdWI0YzlcdWI0Y2FcdWI0Y2JcdWI0Y2NcdWI0Y2RcdWI0Y2VcdWI0Y2ZcdWI0ZDFcdWI0ZDJcdWI0ZDNcdWI0ZDRc'@;
put 'dWI0ZDZcdWI0ZDdcdWI0ZDhcdWI0ZDlcdWI0ZGFcdWI0ZGJcdWI0ZGVcdWI0ZGZcdWI0ZTFcdWI0ZTJcdWI0ZTVcdWI0ZTdcdWI0ZThcdWI0ZTlcdWI0ZWFcdWI0ZWJcdWI0ZWVcdWI0ZjBcdWI0ZjJcdWI0ZjNcdWI0ZjRcdWI0ZjVcdWI0ZjZcdWI0ZjdcdWI0ZjlcdWI0ZmFcdWI0ZmJcdWI0'@;
put 'ZmNcdWI0ZmRcdWI0ZmVcdWI0ZmZcdWI1MDBcdWI1MDFcdWI1MDJcdWI1MDNcdWI1MDRcdWI1MDVcdWI1MDZcdWI1MDdcdWI1MDhcdWI1MDlcdWI1MGFcdWI1MGJcdWI1MGNcdWI1MGRcdWI1MGVcdWI1MGZcdWI1MTBcdWI1MTFcdWI1MTJcdWI1MTNcdWI1MTZcdWI1MTdcdWI1MTlcdWI1MWFc'@;
put 'dWI1MWRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxMzhdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzEzOF1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxMzhdW2ddXT0zNTMyOCtnLHlbMzUzMjgrZ109X1sxMzhdW2ddKTtmb3IoX1sxMzldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWI1MWVcdWI1MWZcdWI1MjBcdWI1MjFcdWI1MjJcdWI1MjNcdWI1MjZcdWI1MmJcdWI1MmNcdWI1MmRcdWI1MmVcdWI1MmZcdWI1MzJcdWI1MzNcdWI1MzVcdWI1MzZcdWI1MzdcdWI1MzlcdWI1M2FcdWI1M2JcdWI1M2NcdWI1M2Rc'@;
put 'dWI1M2VcdWI1M2ZcdWI1NDJcdWI1NDZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWI1NDdcdWI1NDhcdWI1NDlcdWI1NGFcdWI1NGVcdWI1NGZcdWI1NTFcdWI1NTJcdWI1NTNcdWI1NTVcdWI1NTZcdWI1NTdcdWI1NThcdWI1NTlcdWI1NWFcdWI1NWJcdWI1NWVcdWI1'@;
put 'NjJcdWI1NjNcdWI1NjRcdWI1NjVcdWI1NjZcdWI1NjdcdWI1NjhcdWI1NjlcdWI1NmFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWI1NmJcdWI1NmNcdWI1NmRcdWI1NmVcdWI1NmZcdWI1NzBcdWI1NzFcdWI1NzJcdWI1NzNcdWI1NzRcdWI1NzVcdWI1NzZcdWI1Nzdc'@;
put 'dWI1NzhcdWI1NzlcdWI1N2FcdWI1N2JcdWI1N2NcdWI1N2RcdWI1N2VcdWI1N2ZcdWI1ODBcdWI1ODFcdWI1ODJcdWI1ODNcdWI1ODRcdWI1ODVcdWI1ODZcdWI1ODdcdWI1ODhcdWI1ODlcdWI1OGFcdWI1OGJcdWI1OGNcdWI1OGRcdWI1OGVcdWI1OGZcdWI1OTBcdWI1OTFcdWI1OTJcdWI1'@;
put 'OTNcdWI1OTRcdWI1OTVcdWI1OTZcdWI1OTdcdWI1OThcdWI1OTlcdWI1OWFcdWI1OWJcdWI1OWNcdWI1OWRcdWI1OWVcdWI1OWZcdWI1YTJcdWI1YTNcdWI1YTVcdWI1YTZcdWI1YTdcdWI1YTlcdWI1YWNcdWI1YWRcdWI1YWVcdWI1YWZcdWI1YjJcdWI1YjZcdWI1YjdcdWI1YjhcdWI1Yjlc'@;
put 'dWI1YmFcdWI1YmVcdWI1YmZcdWI1YzFcdWI1YzJcdWI1YzNcdWI1YzVcdWI1YzZcdWI1YzdcdWI1YzhcdWI1YzlcdWI1Y2FcdWI1Y2JcdWI1Y2VcdWI1ZDJcdWI1ZDNcdWI1ZDRcdWI1ZDVcdWI1ZDZcdWI1ZDdcdWI1ZDlcdWI1ZGFcdWI1ZGJcdWI1ZGNcdWI1ZGRcdWI1ZGVcdWI1ZGZcdWI1'@;
put 'ZTBcdWI1ZTFcdWI1ZTJcdWI1ZTNcdWI1ZTRcdWI1ZTVcdWI1ZTZcdWI1ZTdcdWI1ZThcdWI1ZTlcdWI1ZWFcdWI1ZWJcdWI1ZWRcdWI1ZWVcdWI1ZWZcdWI1ZjBcdWI1ZjFcdWI1ZjJcdWI1ZjNcdWI1ZjRcdWI1ZjVcdWI1ZjZcdWI1ZjdcdWI1ZjhcdWI1ZjlcdWI1ZmFcdWI1ZmJcdWI1ZmNc'@;
put 'dWI1ZmRcdWI1ZmVcdWI1ZmZcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxMzldLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzEzOV1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxMzldW2ddXT0zNTU4NCtnLHlbMzU1ODQrZ109X1sxMzldW2ddKTtmb3IoX1sxNDBdPSJcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWI2MDBcdWI2MDFcdWI2MDJcdWI2MDNcdWI2MDRcdWI2MDVcdWI2MDZcdWI2MDdcdWI2MDhcdWI2MDlcdWI2MGFcdWI2MGJcdWI2MGNcdWI2MGRcdWI2MGVcdWI2MGZcdWI2MTJcdWI2MTNcdWI2MTVcdWI2MTZc'@;
put 'dWI2MTdcdWI2MTlcdWI2MWFcdWI2MWJcdWI2MWNcdWI2MWRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWI2MWVcdWI2MWZcdWI2MjBcdWI2MjFcdWI2MjJcdWI2MjNcdWI2MjRcdWI2MjZcdWI2MjdcdWI2MjhcdWI2MjlcdWI2MmFcdWI2MmJcdWI2MmRcdWI2MmVcdWI2'@;
put 'MmZcdWI2MzBcdWI2MzFcdWI2MzJcdWI2MzNcdWI2MzVcdWI2MzZcdWI2MzdcdWI2MzhcdWI2MzlcdWI2M2FcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWI2M2JcdWI2M2NcdWI2M2RcdWI2M2VcdWI2M2ZcdWI2NDBcdWI2NDFcdWI2NDJcdWI2NDNcdWI2NDRcdWI2NDVc'@;
put 'dWI2NDZcdWI2NDdcdWI2NDlcdWI2NGFcdWI2NGJcdWI2NGNcdWI2NGRcdWI2NGVcdWI2NGZcdWI2NTBcdWI2NTFcdWI2NTJcdWI2NTNcdWI2NTRcdWI2NTVcdWI2NTZcdWI2NTdcdWI2NThcdWI2NTlcdWI2NWFcdWI2NWJcdWI2NWNcdWI2NWRcdWI2NWVcdWI2NWZcdWI2NjBcdWI2NjFcdWI2'@;
put 'NjJcdWI2NjNcdWI2NjVcdWI2NjZcdWI2NjdcdWI2NjlcdWI2NmFcdWI2NmJcdWI2NmNcdWI2NmRcdWI2NmVcdWI2NmZcdWI2NzBcdWI2NzFcdWI2NzJcdWI2NzNcdWI2NzRcdWI2NzVcdWI2NzZcdWI2NzdcdWI2NzhcdWI2NzlcdWI2N2FcdWI2N2JcdWI2N2NcdWI2N2RcdWI2N2VcdWI2N2Zc'@;
put 'dWI2ODBcdWI2ODFcdWI2ODJcdWI2ODNcdWI2ODRcdWI2ODVcdWI2ODZcdWI2ODdcdWI2ODhcdWI2ODlcdWI2OGFcdWI2OGJcdWI2OGNcdWI2OGRcdWI2OGVcdWI2OGZcdWI2OTBcdWI2OTFcdWI2OTJcdWI2OTNcdWI2OTRcdWI2OTVcdWI2OTZcdWI2OTdcdWI2OThcdWI2OTlcdWI2OWFcdWI2'@;
put 'OWJcdWI2OWVcdWI2OWZcdWI2YTFcdWI2YTJcdWI2YTNcdWI2YTVcdWI2YTZcdWI2YTdcdWI2YThcdWI2YTlcdWI2YWFcdWI2YWRcdWI2YWVcdWI2YWZcdWI2YjBcdWI2YjJcdWI2YjNcdWI2YjRcdWI2YjVcdWI2YjZcdWI2YjdcdWI2YjhcdWI2YjlcdWI2YmFcdWI2YmJcdWI2YmNcdWI2YmRc'@;
put 'dWI2YmVcdWI2YmZcdWI2YzBcdWI2YzFcdWI2YzJcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxNDBdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE0MF1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxNDBdW2ddXT0zNTg0MCtnLHlbMzU4NDArZ109X1sxNDBdW2ddKTtmb3IoX1sxNDFdPSJcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWI2YzNcdWI2YzRcdWI2YzVcdWI2YzZcdWI2YzdcdWI2YzhcdWI2YzlcdWI2Y2FcdWI2Y2JcdWI2Y2NcdWI2Y2RcdWI2Y2VcdWI2Y2ZcdWI2ZDBcdWI2ZDFcdWI2ZDJcdWI2ZDNcdWI2ZDVc'@;
put 'dWI2ZDZcdWI2ZDdcdWI2ZDhcdWI2ZDlcdWI2ZGFcdWI2ZGJcdWI2ZGNcdWI2ZGRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWI2ZGVcdWI2ZGZcdWI2ZTBcdWI2ZTFcdWI2ZTJcdWI2ZTNcdWI2ZTRcdWI2ZTVcdWI2ZTZcdWI2ZTdcdWI2ZThcdWI2ZTlcdWI2ZWFcdWI2'@;
put 'ZWJcdWI2ZWNcdWI2ZWRcdWI2ZWVcdWI2ZWZcdWI2ZjFcdWI2ZjJcdWI2ZjNcdWI2ZjVcdWI2ZjZcdWI2ZjdcdWI2ZjlcdWI2ZmFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWI2ZmJcdWI2ZmNcdWI2ZmRcdWI2ZmVcdWI2ZmZcdWI3MDJcdWI3MDNcdWI3MDRcdWI3MDZc'@;
put 'dWI3MDdcdWI3MDhcdWI3MDlcdWI3MGFcdWI3MGJcdWI3MGNcdWI3MGRcdWI3MGVcdWI3MGZcdWI3MTBcdWI3MTFcdWI3MTJcdWI3MTNcdWI3MTRcdWI3MTVcdWI3MTZcdWI3MTdcdWI3MThcdWI3MTlcdWI3MWFcdWI3MWJcdWI3MWNcdWI3MWRcdWI3MWVcdWI3MWZcdWI3MjBcdWI3MjFcdWI3'@;
put 'MjJcdWI3MjNcdWI3MjRcdWI3MjVcdWI3MjZcdWI3MjdcdWI3MmFcdWI3MmJcdWI3MmRcdWI3MmVcdWI3MzFcdWI3MzJcdWI3MzNcdWI3MzRcdWI3MzVcdWI3MzZcdWI3MzdcdWI3M2FcdWI3M2NcdWI3M2RcdWI3M2VcdWI3M2ZcdWI3NDBcdWI3NDFcdWI3NDJcdWI3NDNcdWI3NDVcdWI3NDZc'@;
put 'dWI3NDdcdWI3NDlcdWI3NGFcdWI3NGJcdWI3NGRcdWI3NGVcdWI3NGZcdWI3NTBcdWI3NTFcdWI3NTJcdWI3NTNcdWI3NTZcdWI3NTdcdWI3NThcdWI3NTlcdWI3NWFcdWI3NWJcdWI3NWNcdWI3NWRcdWI3NWVcdWI3NWZcdWI3NjFcdWI3NjJcdWI3NjNcdWI3NjVcdWI3NjZcdWI3NjdcdWI3'@;
put 'NjlcdWI3NmFcdWI3NmJcdWI3NmNcdWI3NmRcdWI3NmVcdWI3NmZcdWI3NzJcdWI3NzRcdWI3NzZcdWI3NzdcdWI3NzhcdWI3NzlcdWI3N2FcdWI3N2JcdWI3N2VcdWI3N2ZcdWI3ODFcdWI3ODJcdWI3ODNcdWI3ODVcdWI3ODZcdWI3ODdcdWI3ODhcdWI3ODlcdWI3OGFcdWI3OGJcdWI3OGVc'@;
put 'dWI3OTNcdWI3OTRcdWI3OTVcdWI3OWFcdWI3OWJcdWI3OWRcdWI3OWVcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxNDFdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE0MV1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxNDFdW2ddXT0zNjA5NitnLHlbMzYwOTYrZ109X1sxNDFdW2ddKTtmb3Io'@;
put 'X1sxNDJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWI3OWZcdWI3YTFcdWI3YTJcdWI3YTNcdWI3YTRcdWI3YTVcdWI3YTZcdWI3YTdcdWI3YWFcdWI3YWVcdWI3YWZcdWI3YjBcdWI3YjFcdWI3YjJcdWI3YjNcdWI3YjZc'@;
put 'dWI3YjdcdWI3YjlcdWI3YmFcdWI3YmJcdWI3YmNcdWI3YmRcdWI3YmVcdWI3YmZcdWI3YzBcdWI3YzFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWI3YzJcdWI3YzNcdWI3YzRcdWI3YzVcdWI3YzZcdWI3YzhcdWI3Y2FcdWI3Y2JcdWI3Y2NcdWI3Y2RcdWI3Y2VcdWI3'@;
put 'Y2ZcdWI3ZDBcdWI3ZDFcdWI3ZDJcdWI3ZDNcdWI3ZDRcdWI3ZDVcdWI3ZDZcdWI3ZDdcdWI3ZDhcdWI3ZDlcdWI3ZGFcdWI3ZGJcdWI3ZGNcdWI3ZGRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWI3ZGVcdWI3ZGZcdWI3ZTBcdWI3ZTFcdWI3ZTJcdWI3ZTNcdWI3ZTRc'@;
put 'dWI3ZTVcdWI3ZTZcdWI3ZTdcdWI3ZThcdWI3ZTlcdWI3ZWFcdWI3ZWJcdWI3ZWVcdWI3ZWZcdWI3ZjFcdWI3ZjJcdWI3ZjNcdWI3ZjVcdWI3ZjZcdWI3ZjdcdWI3ZjhcdWI3ZjlcdWI3ZmFcdWI3ZmJcdWI3ZmVcdWI4MDJcdWI4MDNcdWI4MDRcdWI4MDVcdWI4MDZcdWI4MGFcdWI4MGJcdWI4'@;
put 'MGRcdWI4MGVcdWI4MGZcdWI4MTFcdWI4MTJcdWI4MTNcdWI4MTRcdWI4MTVcdWI4MTZcdWI4MTdcdWI4MWFcdWI4MWNcdWI4MWVcdWI4MWZcdWI4MjBcdWI4MjFcdWI4MjJcdWI4MjNcdWI4MjZcdWI4MjdcdWI4MjlcdWI4MmFcdWI4MmJcdWI4MmRcdWI4MmVcdWI4MmZcdWI4MzBcdWI4MzFc'@;
put 'dWI4MzJcdWI4MzNcdWI4MzZcdWI4M2FcdWI4M2JcdWI4M2NcdWI4M2RcdWI4M2VcdWI4M2ZcdWI4NDFcdWI4NDJcdWI4NDNcdWI4NDVcdWI4NDZcdWI4NDdcdWI4NDhcdWI4NDlcdWI4NGFcdWI4NGJcdWI4NGNcdWI4NGRcdWI4NGVcdWI4NGZcdWI4NTBcdWI4NTJcdWI4NTRcdWI4NTVcdWI4'@;
put 'NTZcdWI4NTdcdWI4NThcdWI4NTlcdWI4NWFcdWI4NWJcdWI4NWVcdWI4NWZcdWI4NjFcdWI4NjJcdWI4NjNcdWI4NjVcdWI4NjZcdWI4NjdcdWI4NjhcdWI4NjlcdWI4NmFcdWI4NmJcdWI4NmVcdWI4NzBcdWI4NzJcdWI4NzNcdWI4NzRcdWI4NzVcdWI4NzZcdWI4NzdcdWI4NzlcdWI4N2Fc'@;
put 'dWI4N2JcdWI4N2RcdWI4N2VcdWI4N2ZcdWI4ODBcdWI4ODFcdWI4ODJcdWI4ODNcdWI4ODRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxNDJdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE0Ml1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxNDJdW2ddXT0zNjM1MitnLHlbMzYzNTIrZ109X1sx'@;
put 'NDJdW2ddKTtmb3IoX1sxNDNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWI4ODVcdWI4ODZcdWI4ODdcdWI4ODhcdWI4ODlcdWI4OGFcdWI4OGJcdWI4OGNcdWI4OGVcdWI4OGZcdWI4OTBcdWI4OTFcdWI4OTJcdWI4OTNc'@;
put 'dWI4OTRcdWI4OTVcdWI4OTZcdWI4OTdcdWI4OThcdWI4OTlcdWI4OWFcdWI4OWJcdWI4OWNcdWI4OWRcdWI4OWVcdWI4OWZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWI4YTBcdWI4YTFcdWI4YTJcdWI4YTNcdWI4YTRcdWI4YTVcdWI4YTZcdWI4YTdcdWI4YTlcdWI4'@;
put 'YWFcdWI4YWJcdWI4YWNcdWI4YWRcdWI4YWVcdWI4YWZcdWI4YjFcdWI4YjJcdWI4YjNcdWI4YjVcdWI4YjZcdWI4YjdcdWI4YjlcdWI4YmFcdWI4YmJcdWI4YmNcdWI4YmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWI4YmVcdWI4YmZcdWI4YzJcdWI4YzRcdWI4YzZc'@;
put 'dWI4YzdcdWI4YzhcdWI4YzlcdWI4Y2FcdWI4Y2JcdWI4Y2RcdWI4Y2VcdWI4Y2ZcdWI4ZDFcdWI4ZDJcdWI4ZDNcdWI4ZDVcdWI4ZDZcdWI4ZDdcdWI4ZDhcdWI4ZDlcdWI4ZGFcdWI4ZGJcdWI4ZGNcdWI4ZGVcdWI4ZTBcdWI4ZTJcdWI4ZTNcdWI4ZTRcdWI4ZTVcdWI4ZTZcdWI4ZTdcdWI4'@;
put 'ZWFcdWI4ZWJcdWI4ZWRcdWI4ZWVcdWI4ZWZcdWI4ZjFcdWI4ZjJcdWI4ZjNcdWI4ZjRcdWI4ZjVcdWI4ZjZcdWI4ZjdcdWI4ZmFcdWI4ZmNcdWI4ZmVcdWI4ZmZcdWI5MDBcdWI5MDFcdWI5MDJcdWI5MDNcdWI5MDVcdWI5MDZcdWI5MDdcdWI5MDhcdWI5MDlcdWI5MGFcdWI5MGJcdWI5MGNc'@;
put 'dWI5MGRcdWI5MGVcdWI5MGZcdWI5MTBcdWI5MTFcdWI5MTJcdWI5MTNcdWI5MTRcdWI5MTVcdWI5MTZcdWI5MTdcdWI5MTlcdWI5MWFcdWI5MWJcdWI5MWNcdWI5MWRcdWI5MWVcdWI5MWZcdWI5MjFcdWI5MjJcdWI5MjNcdWI5MjRcdWI5MjVcdWI5MjZcdWI5MjdcdWI5MjhcdWI5MjlcdWI5'@;
put 'MmFcdWI5MmJcdWI5MmNcdWI5MmRcdWI5MmVcdWI5MmZcdWI5MzBcdWI5MzFcdWI5MzJcdWI5MzNcdWI5MzRcdWI5MzVcdWI5MzZcdWI5MzdcdWI5MzhcdWI5MzlcdWI5M2FcdWI5M2JcdWI5M2VcdWI5M2ZcdWI5NDFcdWI5NDJcdWI5NDNcdWI5NDVcdWI5NDZcdWI5NDdcdWI5NDhcdWI5NDlc'@;
put 'dWI5NGFcdWI5NGJcdWI5NGRcdWI5NGVcdWI5NTBcdWI5NTJcdWI5NTNcdWI5NTRcdWI5NTVcdWI5NTZcdWI5NTdcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxNDNdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE0M11bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxNDNdW2ddXT0zNjYwOCtnLHlb'@;
put 'MzY2MDgrZ109X1sxNDNdW2ddKTtmb3IoX1sxNDRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWI5NWFcdWI5NWJcdWI5NWRcdWI5NWVcdWI5NWZcdWI5NjFcdWI5NjJcdWI5NjNcdWI5NjRcdWI5NjVcdWI5NjZcdWI5Njdc'@;
put 'dWI5NmFcdWI5NmNcdWI5NmVcdWI5NmZcdWI5NzBcdWI5NzFcdWI5NzJcdWI5NzNcdWI5NzZcdWI5NzdcdWI5NzlcdWI5N2FcdWI5N2JcdWI5N2RcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWI5N2VcdWI5N2ZcdWI5ODBcdWI5ODFcdWI5ODJcdWI5ODNcdWI5ODZcdWI5'@;
put 'ODhcdWI5OGJcdWI5OGNcdWI5OGZcdWI5OTBcdWI5OTFcdWI5OTJcdWI5OTNcdWI5OTRcdWI5OTVcdWI5OTZcdWI5OTdcdWI5OThcdWI5OTlcdWI5OWFcdWI5OWJcdWI5OWNcdWI5OWRcdWI5OWVcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWI5OWZcdWI5YTBcdWI5YTFc'@;
put 'dWI5YTJcdWI5YTNcdWI5YTRcdWI5YTVcdWI5YTZcdWI5YTdcdWI5YThcdWI5YTlcdWI5YWFcdWI5YWJcdWI5YWVcdWI5YWZcdWI5YjFcdWI5YjJcdWI5YjNcdWI5YjVcdWI5YjZcdWI5YjdcdWI5YjhcdWI5YjlcdWI5YmFcdWI5YmJcdWI5YmVcdWI5YzBcdWI5YzJcdWI5YzNcdWI5YzRcdWI5'@;
put 'YzVcdWI5YzZcdWI5YzdcdWI5Y2FcdWI5Y2JcdWI5Y2RcdWI5ZDNcdWI5ZDRcdWI5ZDVcdWI5ZDZcdWI5ZDdcdWI5ZGFcdWI5ZGNcdWI5ZGZcdWI5ZTBcdWI5ZTJcdWI5ZTZcdWI5ZTdcdWI5ZTlcdWI5ZWFcdWI5ZWJcdWI5ZWRcdWI5ZWVcdWI5ZWZcdWI5ZjBcdWI5ZjFcdWI5ZjJcdWI5ZjNc'@;
put 'dWI5ZjZcdWI5ZmJcdWI5ZmNcdWI5ZmRcdWI5ZmVcdWI5ZmZcdWJhMDJcdWJhMDNcdWJhMDRcdWJhMDVcdWJhMDZcdWJhMDdcdWJhMDlcdWJhMGFcdWJhMGJcdWJhMGNcdWJhMGRcdWJhMGVcdWJhMGZcdWJhMTBcdWJhMTFcdWJhMTJcdWJhMTNcdWJhMTRcdWJhMTZcdWJhMTdcdWJhMThcdWJh'@;
put 'MTlcdWJhMWFcdWJhMWJcdWJhMWNcdWJhMWRcdWJhMWVcdWJhMWZcdWJhMjBcdWJhMjFcdWJhMjJcdWJhMjNcdWJhMjRcdWJhMjVcdWJhMjZcdWJhMjdcdWJhMjhcdWJhMjlcdWJhMmFcdWJhMmJcdWJhMmNcdWJhMmRcdWJhMmVcdWJhMmZcdWJhMzBcdWJhMzFcdWJhMzJcdWJhMzNcdWJhMzRc'@;
put 'dWJhMzVcdWJhMzZcdWJhMzdcdWJhM2FcdWJhM2JcdWJhM2RcdWJhM2VcdWJhM2ZcdWJhNDFcdWJhNDNcdWJhNDRcdWJhNDVcdWJhNDZcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxNDRdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE0NF1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxNDRdW2dd'@;
put 'XT0zNjg2NCtnLHlbMzY4NjQrZ109X1sxNDRdW2ddKTtmb3IoX1sxNDVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWJhNDdcdWJhNGFcdWJhNGNcdWJhNGZcdWJhNTBcdWJhNTFcdWJhNTJcdWJhNTZcdWJhNTdcdWJhNTlc'@;
put 'dWJhNWFcdWJhNWJcdWJhNWRcdWJhNWVcdWJhNWZcdWJhNjBcdWJhNjFcdWJhNjJcdWJhNjNcdWJhNjZcdWJhNmFcdWJhNmJcdWJhNmNcdWJhNmRcdWJhNmVcdWJhNmZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWJhNzJcdWJhNzNcdWJhNzVcdWJhNzZcdWJhNzdcdWJh'@;
put 'NzlcdWJhN2FcdWJhN2JcdWJhN2NcdWJhN2RcdWJhN2VcdWJhN2ZcdWJhODBcdWJhODFcdWJhODJcdWJhODZcdWJhODhcdWJhODlcdWJhOGFcdWJhOGJcdWJhOGRcdWJhOGVcdWJhOGZcdWJhOTBcdWJhOTFcdWJhOTJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWJhOTNc'@;
put 'dWJhOTRcdWJhOTVcdWJhOTZcdWJhOTdcdWJhOThcdWJhOTlcdWJhOWFcdWJhOWJcdWJhOWNcdWJhOWRcdWJhOWVcdWJhOWZcdWJhYTBcdWJhYTFcdWJhYTJcdWJhYTNcdWJhYTRcdWJhYTVcdWJhYTZcdWJhYTdcdWJhYWFcdWJhYWRcdWJhYWVcdWJhYWZcdWJhYjFcdWJhYjNcdWJhYjRcdWJh'@;
put 'YjVcdWJhYjZcdWJhYjdcdWJhYmFcdWJhYmNcdWJhYmVcdWJhYmZcdWJhYzBcdWJhYzFcdWJhYzJcdWJhYzNcdWJhYzVcdWJhYzZcdWJhYzdcdWJhYzlcdWJhY2FcdWJhY2JcdWJhY2NcdWJhY2RcdWJhY2VcdWJhY2ZcdWJhZDBcdWJhZDFcdWJhZDJcdWJhZDNcdWJhZDRcdWJhZDVcdWJhZDZc'@;
put 'dWJhZDdcdWJhZGFcdWJhZGJcdWJhZGNcdWJhZGRcdWJhZGVcdWJhZGZcdWJhZTBcdWJhZTFcdWJhZTJcdWJhZTNcdWJhZTRcdWJhZTVcdWJhZTZcdWJhZTdcdWJhZThcdWJhZTlcdWJhZWFcdWJhZWJcdWJhZWNcdWJhZWRcdWJhZWVcdWJhZWZcdWJhZjBcdWJhZjFcdWJhZjJcdWJhZjNcdWJh'@;
put 'ZjRcdWJhZjVcdWJhZjZcdWJhZjdcdWJhZjhcdWJhZjlcdWJhZmFcdWJhZmJcdWJhZmRcdWJhZmVcdWJhZmZcdWJiMDFcdWJiMDJcdWJiMDNcdWJiMDVcdWJiMDZcdWJiMDdcdWJiMDhcdWJiMDlcdWJiMGFcdWJiMGJcdWJiMGNcdWJiMGVcdWJiMTBcdWJiMTJcdWJiMTNcdWJiMTRcdWJiMTVc'@;
put 'dWJiMTZcdWJiMTdcdWJiMTlcdWJiMWFcdWJiMWJcdWJiMWRcdWJiMWVcdWJiMWZcdWJiMjFcdWJiMjJcdWJiMjNcdWJiMjRcdWJiMjVcdWJiMjZcdWJiMjdcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxNDVdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE0NV1bZ10uY2hhckNvZGVBdCgwKSYm'@;
put 'KElbX1sxNDVdW2ddXT0zNzEyMCtnLHlbMzcxMjArZ109X1sxNDVdW2ddKTtmb3IoX1sxNDZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWJiMjhcdWJiMmFcdWJiMmNcdWJiMmRcdWJiMmVcdWJiMmZcdWJiMzBcdWJiMzFc'@;
put 'dWJiMzJcdWJiMzNcdWJiMzdcdWJiMzlcdWJiM2FcdWJiM2ZcdWJiNDBcdWJiNDFcdWJiNDJcdWJiNDNcdWJiNDZcdWJiNDhcdWJiNGFcdWJiNGJcdWJiNGNcdWJiNGVcdWJiNTFcdWJiNTJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWJiNTNcdWJiNTVcdWJiNTZcdWJi'@;
put 'NTdcdWJiNTlcdWJiNWFcdWJiNWJcdWJiNWNcdWJiNWRcdWJiNWVcdWJiNWZcdWJiNjBcdWJiNjJcdWJiNjRcdWJiNjVcdWJiNjZcdWJiNjdcdWJiNjhcdWJiNjlcdWJiNmFcdWJiNmJcdWJiNmRcdWJiNmVcdWJiNmZcdWJiNzBcdWJiNzFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWJiNzJcdWJiNzNcdWJiNzRcdWJiNzVcdWJiNzZcdWJiNzdcdWJiNzhcdWJiNzlcdWJiN2FcdWJiN2JcdWJiN2NcdWJiN2RcdWJiN2VcdWJiN2ZcdWJiODBcdWJiODFcdWJiODJcdWJiODNcdWJiODRcdWJiODVcdWJiODZcdWJiODdcdWJiODlcdWJiOGFcdWJiOGJcdWJiOGRcdWJi'@;
put 'OGVcdWJiOGZcdWJiOTFcdWJiOTJcdWJiOTNcdWJiOTRcdWJiOTVcdWJiOTZcdWJiOTdcdWJiOThcdWJiOTlcdWJiOWFcdWJiOWJcdWJiOWNcdWJiOWRcdWJiOWVcdWJiOWZcdWJiYTBcdWJiYTFcdWJiYTJcdWJiYTNcdWJiYTVcdWJiYTZcdWJiYTdcdWJiYTlcdWJiYWFcdWJiYWJcdWJiYWRc'@;
put 'dWJiYWVcdWJiYWZcdWJiYjBcdWJiYjFcdWJiYjJcdWJiYjNcdWJiYjVcdWJiYjZcdWJiYjhcdWJiYjlcdWJiYmFcdWJiYmJcdWJiYmNcdWJiYmRcdWJiYmVcdWJiYmZcdWJiYzFcdWJiYzJcdWJiYzNcdWJiYzVcdWJiYzZcdWJiYzdcdWJiYzlcdWJiY2FcdWJiY2JcdWJiY2NcdWJiY2RcdWJi'@;
put 'Y2VcdWJiY2ZcdWJiZDFcdWJiZDJcdWJiZDRcdWJiZDVcdWJiZDZcdWJiZDdcdWJiZDhcdWJiZDlcdWJiZGFcdWJiZGJcdWJiZGNcdWJiZGRcdWJiZGVcdWJiZGZcdWJiZTBcdWJiZTFcdWJiZTJcdWJiZTNcdWJiZTRcdWJiZTVcdWJiZTZcdWJiZTdcdWJiZThcdWJiZTlcdWJiZWFcdWJiZWJc'@;
put 'dWJiZWNcdWJiZWRcdWJiZWVcdWJiZWZcdWJiZjBcdWJiZjFcdWJiZjJcdWJiZjNcdWJiZjRcdWJiZjVcdWJiZjZcdWJiZjdcdWJiZmFcdWJiZmJcdWJiZmRcdWJiZmVcdWJjMDFcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxNDZdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE0Nl1bZ10uY2hh'@;
put 'ckNvZGVBdCgwKSYmKElbX1sxNDZdW2ddXT0zNzM3NitnLHlbMzczNzYrZ109X1sxNDZdW2ddKTtmb3IoX1sxNDddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWJjMDNcdWJjMDRcdWJjMDVcdWJjMDZcdWJjMDdcdWJjMGFc'@;
put 'dWJjMGVcdWJjMTBcdWJjMTJcdWJjMTNcdWJjMTlcdWJjMWFcdWJjMjBcdWJjMjFcdWJjMjJcdWJjMjNcdWJjMjZcdWJjMjhcdWJjMmFcdWJjMmJcdWJjMmNcdWJjMmVcdWJjMmZcdWJjMzJcdWJjMzNcdWJjMzVcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWJjMzZcdWJj'@;
put 'MzdcdWJjMzlcdWJjM2FcdWJjM2JcdWJjM2NcdWJjM2RcdWJjM2VcdWJjM2ZcdWJjNDJcdWJjNDZcdWJjNDdcdWJjNDhcdWJjNGFcdWJjNGJcdWJjNGVcdWJjNGZcdWJjNTFcdWJjNTJcdWJjNTNcdWJjNTRcdWJjNTVcdWJjNTZcdWJjNTdcdWJjNThcdWJjNTlcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWJjNWFcdWJjNWJcdWJjNWNcdWJjNWVcdWJjNWZcdWJjNjBcdWJjNjFcdWJjNjJcdWJjNjNcdWJjNjRcdWJjNjVcdWJjNjZcdWJjNjdcdWJjNjhcdWJjNjlcdWJjNmFcdWJjNmJcdWJjNmNcdWJjNmRcdWJjNmVcdWJjNmZcdWJjNzBcdWJjNzFcdWJjNzJcdWJj'@;
put 'NzNcdWJjNzRcdWJjNzVcdWJjNzZcdWJjNzdcdWJjNzhcdWJjNzlcdWJjN2FcdWJjN2JcdWJjN2NcdWJjN2RcdWJjN2VcdWJjN2ZcdWJjODBcdWJjODFcdWJjODJcdWJjODNcdWJjODZcdWJjODdcdWJjODlcdWJjOGFcdWJjOGRcdWJjOGZcdWJjOTBcdWJjOTFcdWJjOTJcdWJjOTNcdWJjOTZc'@;
put 'dWJjOThcdWJjOWJcdWJjOWNcdWJjOWRcdWJjOWVcdWJjOWZcdWJjYTJcdWJjYTNcdWJjYTVcdWJjYTZcdWJjYTlcdWJjYWFcdWJjYWJcdWJjYWNcdWJjYWRcdWJjYWVcdWJjYWZcdWJjYjJcdWJjYjZcdWJjYjdcdWJjYjhcdWJjYjlcdWJjYmFcdWJjYmJcdWJjYmVcdWJjYmZcdWJjYzFcdWJj'@;
put 'YzJcdWJjYzNcdWJjYzVcdWJjYzZcdWJjYzdcdWJjYzhcdWJjYzlcdWJjY2FcdWJjY2JcdWJjY2NcdWJjY2VcdWJjZDJcdWJjZDNcdWJjZDRcdWJjZDZcdWJjZDdcdWJjZDlcdWJjZGFcdWJjZGJcdWJjZGRcdWJjZGVcdWJjZGZcdWJjZTBcdWJjZTFcdWJjZTJcdWJjZTNcdWJjZTRcdWJjZTVc'@;
put 'dWJjZTZcdWJjZTdcdWJjZThcdWJjZTlcdWJjZWFcdWJjZWJcdWJjZWNcdWJjZWRcdWJjZWVcdWJjZWZcdWJjZjBcdWJjZjFcdWJjZjJcdWJjZjNcdWJjZjdcdWJjZjlcdWJjZmFcdWJjZmJcdWJjZmRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxNDddLmxlbmd0aDsrK2cpNjU1MzMhPT1f'@;
put 'WzE0N11bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxNDddW2ddXT0zNzYzMitnLHlbMzc2MzIrZ109X1sxNDddW2ddKTtmb3IoX1sxNDhdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWJjZmVcdWJjZmZcdWJkMDBcdWJkMDFc'@;
put 'dWJkMDJcdWJkMDNcdWJkMDZcdWJkMDhcdWJkMGFcdWJkMGJcdWJkMGNcdWJkMGRcdWJkMGVcdWJkMGZcdWJkMTFcdWJkMTJcdWJkMTNcdWJkMTVcdWJkMTZcdWJkMTdcdWJkMThcdWJkMTlcdWJkMWFcdWJkMWJcdWJkMWNcdWJkMWRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWJkMWVcdWJkMWZcdWJkMjBcdWJkMjFcdWJkMjJcdWJkMjNcdWJkMjVcdWJkMjZcdWJkMjdcdWJkMjhcdWJkMjlcdWJkMmFcdWJkMmJcdWJkMmRcdWJkMmVcdWJkMmZcdWJkMzBcdWJkMzFcdWJkMzJcdWJkMzNcdWJkMzRcdWJkMzVcdWJkMzZcdWJkMzdcdWJkMzhcdWJkMzlcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWJkM2FcdWJkM2JcdWJkM2NcdWJkM2RcdWJkM2VcdWJkM2ZcdWJkNDFcdWJkNDJcdWJkNDNcdWJkNDRcdWJkNDVcdWJkNDZcdWJkNDdcdWJkNGFcdWJkNGJcdWJkNGRcdWJkNGVcdWJkNGZcdWJkNTFcdWJkNTJcdWJkNTNcdWJkNTRcdWJk'@;
put 'NTVcdWJkNTZcdWJkNTdcdWJkNWFcdWJkNWJcdWJkNWNcdWJkNWRcdWJkNWVcdWJkNWZcdWJkNjBcdWJkNjFcdWJkNjJcdWJkNjNcdWJkNjVcdWJkNjZcdWJkNjdcdWJkNjlcdWJkNmFcdWJkNmJcdWJkNmNcdWJkNmRcdWJkNmVcdWJkNmZcdWJkNzBcdWJkNzFcdWJkNzJcdWJkNzNcdWJkNzRc'@;
put 'dWJkNzVcdWJkNzZcdWJkNzdcdWJkNzhcdWJkNzlcdWJkN2FcdWJkN2JcdWJkN2NcdWJkN2RcdWJkN2VcdWJkN2ZcdWJkODJcdWJkODNcdWJkODVcdWJkODZcdWJkOGJcdWJkOGNcdWJkOGRcdWJkOGVcdWJkOGZcdWJkOTJcdWJkOTRcdWJkOTZcdWJkOTdcdWJkOThcdWJkOWJcdWJkOWRcdWJk'@;
put 'OWVcdWJkOWZcdWJkYTBcdWJkYTFcdWJkYTJcdWJkYTNcdWJkYTVcdWJkYTZcdWJkYTdcdWJkYThcdWJkYTlcdWJkYWFcdWJkYWJcdWJkYWNcdWJkYWRcdWJkYWVcdWJkYWZcdWJkYjFcdWJkYjJcdWJkYjNcdWJkYjRcdWJkYjVcdWJkYjZcdWJkYjdcdWJkYjlcdWJkYmFcdWJkYmJcdWJkYmNc'@;
put 'dWJkYmRcdWJkYmVcdWJkYmZcdWJkYzBcdWJkYzFcdWJkYzJcdWJkYzNcdWJkYzRcdWJkYzVcdWJkYzZcdWJkYzdcdWJkYzhcdWJkYzlcdWJkY2FcdWJkY2JcdWJkY2NcdWJkY2RcdWJkY2VcdWJkY2ZcdWJkZDBcdWJkZDFcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxNDhdLmxlbmd0aDsr'@;
put 'K2cpNjU1MzMhPT1fWzE0OF1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxNDhdW2ddXT0zNzg4OCtnLHlbMzc4ODgrZ109X1sxNDhdW2ddKTtmb3IoX1sxNDldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWJkZDJcdWJkZDNc'@;
put 'dWJkZDZcdWJkZDdcdWJkZDlcdWJkZGFcdWJkZGJcdWJkZGRcdWJkZGVcdWJkZGZcdWJkZTBcdWJkZTFcdWJkZTJcdWJkZTNcdWJkZTRcdWJkZTVcdWJkZTZcdWJkZTdcdWJkZThcdWJkZWFcdWJkZWJcdWJkZWNcdWJkZWRcdWJkZWVcdWJkZWZcdWJkZjFcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWJkZjJcdWJkZjNcdWJkZjVcdWJkZjZcdWJkZjdcdWJkZjlcdWJkZmFcdWJkZmJcdWJkZmNcdWJkZmRcdWJkZmVcdWJkZmZcdWJlMDFcdWJlMDJcdWJlMDRcdWJlMDZcdWJlMDdcdWJlMDhcdWJlMDlcdWJlMGFcdWJlMGJcdWJlMGVcdWJlMGZcdWJlMTFcdWJlMTJc'@;
put 'dWJlMTNcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWJlMTVcdWJlMTZcdWJlMTdcdWJlMThcdWJlMTlcdWJlMWFcdWJlMWJcdWJlMWVcdWJlMjBcdWJlMjFcdWJlMjJcdWJlMjNcdWJlMjRcdWJlMjVcdWJlMjZcdWJlMjdcdWJlMjhcdWJlMjlcdWJlMmFcdWJlMmJcdWJl'@;
put 'MmNcdWJlMmRcdWJlMmVcdWJlMmZcdWJlMzBcdWJlMzFcdWJlMzJcdWJlMzNcdWJlMzRcdWJlMzVcdWJlMzZcdWJlMzdcdWJlMzhcdWJlMzlcdWJlM2FcdWJlM2JcdWJlM2NcdWJlM2RcdWJlM2VcdWJlM2ZcdWJlNDBcdWJlNDFcdWJlNDJcdWJlNDNcdWJlNDZcdWJlNDdcdWJlNDlcdWJlNGFc'@;
put 'dWJlNGJcdWJlNGRcdWJlNGZcdWJlNTBcdWJlNTFcdWJlNTJcdWJlNTNcdWJlNTZcdWJlNThcdWJlNWNcdWJlNWRcdWJlNWVcdWJlNWZcdWJlNjJcdWJlNjNcdWJlNjVcdWJlNjZcdWJlNjdcdWJlNjlcdWJlNmJcdWJlNmNcdWJlNmRcdWJlNmVcdWJlNmZcdWJlNzJcdWJlNzZcdWJlNzdcdWJl'@;
put 'NzhcdWJlNzlcdWJlN2FcdWJlN2VcdWJlN2ZcdWJlODFcdWJlODJcdWJlODNcdWJlODVcdWJlODZcdWJlODdcdWJlODhcdWJlODlcdWJlOGFcdWJlOGJcdWJlOGVcdWJlOTJcdWJlOTNcdWJlOTRcdWJlOTVcdWJlOTZcdWJlOTdcdWJlOWFcdWJlOWJcdWJlOWNcdWJlOWRcdWJlOWVcdWJlOWZc'@;
put 'dWJlYTBcdWJlYTFcdWJlYTJcdWJlYTNcdWJlYTRcdWJlYTVcdWJlYTZcdWJlYTdcdWJlYTlcdWJlYWFcdWJlYWJcdWJlYWNcdWJlYWRcdWJlYWVcdWJlYWZcdWJlYjBcdWJlYjFcdWJlYjJcdWJlYjNcdWJlYjRcdWJlYjVcdWJlYjZcdWJlYjdcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sx'@;
put 'NDldLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE0OV1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxNDldW2ddXT0zODE0NCtnLHlbMzgxNDQrZ109X1sxNDldW2ddKTtmb3IoX1sxNTBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWJlYjhcdWJlYjlcdWJlYmFcdWJlYmJcdWJlYmNcdWJlYmRcdWJlYmVcdWJlYmZcdWJlYzBcdWJlYzFcdWJlYzJcdWJlYzNcdWJlYzRcdWJlYzVcdWJlYzZcdWJlYzdcdWJlYzhcdWJlYzlcdWJlY2FcdWJlY2JcdWJlY2NcdWJlY2RcdWJlY2VcdWJlY2ZcdWJlZDJcdWJlZDNcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWJlZDVcdWJlZDZcdWJlZDlcdWJlZGFcdWJlZGJcdWJlZGNcdWJlZGRcdWJlZGVcdWJlZGZcdWJlZTFcdWJlZTJcdWJlZTZcdWJlZTdcdWJlZThcdWJlZTlcdWJlZWFcdWJlZWJcdWJlZWRcdWJlZWVcdWJlZWZcdWJlZjBcdWJlZjFcdWJlZjJc'@;
put 'dWJlZjNcdWJlZjRcdWJlZjVcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWJlZjZcdWJlZjdcdWJlZjhcdWJlZjlcdWJlZmFcdWJlZmJcdWJlZmNcdWJlZmRcdWJlZmVcdWJlZmZcdWJmMDBcdWJmMDJcdWJmMDNcdWJmMDRcdWJmMDVcdWJmMDZcdWJmMDdcdWJmMGFcdWJm'@;
put 'MGJcdWJmMGNcdWJmMGRcdWJmMGVcdWJmMGZcdWJmMTBcdWJmMTFcdWJmMTJcdWJmMTNcdWJmMTRcdWJmMTVcdWJmMTZcdWJmMTdcdWJmMWFcdWJmMWVcdWJmMWZcdWJmMjBcdWJmMjFcdWJmMjJcdWJmMjNcdWJmMjRcdWJmMjVcdWJmMjZcdWJmMjdcdWJmMjhcdWJmMjlcdWJmMmFcdWJmMmJc'@;
put 'dWJmMmNcdWJmMmRcdWJmMmVcdWJmMmZcdWJmMzBcdWJmMzFcdWJmMzJcdWJmMzNcdWJmMzRcdWJmMzVcdWJmMzZcdWJmMzdcdWJmMzhcdWJmMzlcdWJmM2FcdWJmM2JcdWJmM2NcdWJmM2RcdWJmM2VcdWJmM2ZcdWJmNDJcdWJmNDNcdWJmNDVcdWJmNDZcdWJmNDdcdWJmNDlcdWJmNGFcdWJm'@;
put 'NGJcdWJmNGNcdWJmNGRcdWJmNGVcdWJmNGZcdWJmNTJcdWJmNTNcdWJmNTRcdWJmNTZcdWJmNTdcdWJmNThcdWJmNTlcdWJmNWFcdWJmNWJcdWJmNWNcdWJmNWRcdWJmNWVcdWJmNWZcdWJmNjBcdWJmNjFcdWJmNjJcdWJmNjNcdWJmNjRcdWJmNjVcdWJmNjZcdWJmNjdcdWJmNjhcdWJmNjlc'@;
put 'dWJmNmFcdWJmNmJcdWJmNmNcdWJmNmRcdWJmNmVcdWJmNmZcdWJmNzBcdWJmNzFcdWJmNzJcdWJmNzNcdWJmNzRcdWJmNzVcdWJmNzZcdWJmNzdcdWJmNzhcdWJmNzlcdWJmN2FcdWJmN2JcdWJmN2NcdWJmN2RcdWJmN2VcdWJmN2ZcdWJmODBcdWJmODFcdWJmODJcdWZmZmQiLnNwbGl0KCIi'@;
put 'KSxnPTA7ZyE9X1sxNTBdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE1MF1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxNTBdW2ddXT0zODQwMCtnLHlbMzg0MDArZ109X1sxNTBdW2ddKTtmb3IoX1sxNTFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWJmODNcdWJmODRcdWJmODVcdWJmODZcdWJmODdcdWJmODhcdWJmODlcdWJmOGFcdWJmOGJcdWJmOGNcdWJmOGRcdWJmOGVcdWJmOGZcdWJmOTBcdWJmOTFcdWJmOTJcdWJmOTNcdWJmOTVcdWJmOTZcdWJmOTdcdWJmOThcdWJmOTlcdWJmOWFcdWJmOWJcdWJmOWNcdWJm'@;
put 'OWRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWJmOWVcdWJmOWZcdWJmYTBcdWJmYTFcdWJmYTJcdWJmYTNcdWJmYTRcdWJmYTVcdWJmYTZcdWJmYTdcdWJmYThcdWJmYTlcdWJmYWFcdWJmYWJcdWJmYWNcdWJmYWRcdWJmYWVcdWJmYWZcdWJmYjFcdWJmYjJcdWJmYjNc'@;
put 'dWJmYjRcdWJmYjVcdWJmYjZcdWJmYjdcdWJmYjhcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWJmYjlcdWJmYmFcdWJmYmJcdWJmYmNcdWJmYmRcdWJmYmVcdWJmYmZcdWJmYzBcdWJmYzFcdWJmYzJcdWJmYzNcdWJmYzRcdWJmYzZcdWJmYzdcdWJmYzhcdWJmYzlcdWJm'@;
put 'Y2FcdWJmY2JcdWJmY2VcdWJmY2ZcdWJmZDFcdWJmZDJcdWJmZDNcdWJmZDVcdWJmZDZcdWJmZDdcdWJmZDhcdWJmZDlcdWJmZGFcdWJmZGJcdWJmZGRcdWJmZGVcdWJmZTBcdWJmZTJcdWJmZTNcdWJmZTRcdWJmZTVcdWJmZTZcdWJmZTdcdWJmZThcdWJmZTlcdWJmZWFcdWJmZWJcdWJmZWNc'@;
put 'dWJmZWRcdWJmZWVcdWJmZWZcdWJmZjBcdWJmZjFcdWJmZjJcdWJmZjNcdWJmZjRcdWJmZjVcdWJmZjZcdWJmZjdcdWJmZjhcdWJmZjlcdWJmZmFcdWJmZmJcdWJmZmNcdWJmZmRcdWJmZmVcdWJmZmZcdWMwMDBcdWMwMDFcdWMwMDJcdWMwMDNcdWMwMDRcdWMwMDVcdWMwMDZcdWMwMDdcdWMw'@;
put 'MDhcdWMwMDlcdWMwMGFcdWMwMGJcdWMwMGNcdWMwMGRcdWMwMGVcdWMwMGZcdWMwMTBcdWMwMTFcdWMwMTJcdWMwMTNcdWMwMTRcdWMwMTVcdWMwMTZcdWMwMTdcdWMwMThcdWMwMTlcdWMwMWFcdWMwMWJcdWMwMWNcdWMwMWRcdWMwMWVcdWMwMWZcdWMwMjBcdWMwMjFcdWMwMjJcdWMwMjNc'@;
put 'dWMwMjRcdWMwMjVcdWMwMjZcdWMwMjdcdWMwMjhcdWMwMjlcdWMwMmFcdWMwMmJcdWMwMmNcdWMwMmRcdWMwMmVcdWMwMmZcdWMwMzBcdWMwMzFcdWMwMzJcdWMwMzNcdWMwMzRcdWMwMzVcdWMwMzZcdWMwMzdcdWMwMzhcdWMwMzlcdWMwM2FcdWMwM2JcdWMwM2RcdWMwM2VcdWMwM2ZcdWZm'@;
put 'ZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxNTFdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE1MV1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxNTFdW2ddXT0zODY1NitnLHlbMzg2NTYrZ109X1sxNTFdW2ddKTtmb3IoX1sxNTJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWMwNDBcdWMwNDFcdWMwNDJcdWMwNDNcdWMwNDRcdWMwNDVcdWMwNDZcdWMwNDdcdWMwNDhcdWMwNDlcdWMwNGFcdWMwNGJcdWMwNGNcdWMwNGRcdWMwNGVcdWMwNGZcdWMwNTBcdWMwNTJcdWMwNTNcdWMwNTRcdWMwNTVcdWMwNTZcdWMwNTdcdWMw'@;
put 'NTlcdWMwNWFcdWMwNWJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWMwNWRcdWMwNWVcdWMwNWZcdWMwNjFcdWMwNjJcdWMwNjNcdWMwNjRcdWMwNjVcdWMwNjZcdWMwNjdcdWMwNmFcdWMwNmJcdWMwNmNcdWMwNmRcdWMwNmVcdWMwNmZcdWMwNzBcdWMwNzFcdWMwNzJc'@;
put 'dWMwNzNcdWMwNzRcdWMwNzVcdWMwNzZcdWMwNzdcdWMwNzhcdWMwNzlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWMwN2FcdWMwN2JcdWMwN2NcdWMwN2RcdWMwN2VcdWMwN2ZcdWMwODBcdWMwODFcdWMwODJcdWMwODNcdWMwODRcdWMwODVcdWMwODZcdWMwODdcdWMw'@;
put 'ODhcdWMwODlcdWMwOGFcdWMwOGJcdWMwOGNcdWMwOGRcdWMwOGVcdWMwOGZcdWMwOTJcdWMwOTNcdWMwOTVcdWMwOTZcdWMwOTdcdWMwOTlcdWMwOWFcdWMwOWJcdWMwOWNcdWMwOWRcdWMwOWVcdWMwOWZcdWMwYTJcdWMwYTRcdWMwYTZcdWMwYTdcdWMwYThcdWMwYTlcdWMwYWFcdWMwYWJc'@;
put 'dWMwYWVcdWMwYjFcdWMwYjJcdWMwYjdcdWMwYjhcdWMwYjlcdWMwYmFcdWMwYmJcdWMwYmVcdWMwYzJcdWMwYzNcdWMwYzRcdWMwYzZcdWMwYzdcdWMwY2FcdWMwY2JcdWMwY2RcdWMwY2VcdWMwY2ZcdWMwZDFcdWMwZDJcdWMwZDNcdWMwZDRcdWMwZDVcdWMwZDZcdWMwZDdcdWMwZGFcdWMw'@;
put 'ZGVcdWMwZGZcdWMwZTBcdWMwZTFcdWMwZTJcdWMwZTNcdWMwZTZcdWMwZTdcdWMwZTlcdWMwZWFcdWMwZWJcdWMwZWRcdWMwZWVcdWMwZWZcdWMwZjBcdWMwZjFcdWMwZjJcdWMwZjNcdWMwZjZcdWMwZjhcdWMwZmFcdWMwZmJcdWMwZmNcdWMwZmRcdWMwZmVcdWMwZmZcdWMxMDFcdWMxMDJc'@;
put 'dWMxMDNcdWMxMDVcdWMxMDZcdWMxMDdcdWMxMDlcdWMxMGFcdWMxMGJcdWMxMGNcdWMxMGRcdWMxMGVcdWMxMGZcdWMxMTFcdWMxMTJcdWMxMTNcdWMxMTRcdWMxMTZcdWMxMTdcdWMxMThcdWMxMTlcdWMxMWFcdWMxMWJcdWMxMjFcdWMxMjJcdWMxMjVcdWMxMjhcdWMxMjlcdWMxMmFcdWMx'@;
put 'MmJcdWMxMmVcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxNTJdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE1Ml1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxNTJdW2ddXT0zODkxMitnLHlbMzg5MTIrZ109X1sxNTJdW2ddKTtmb3IoX1sxNTNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWMxMzJcdWMxMzNcdWMxMzRcdWMxMzVcdWMxMzdcdWMxM2FcdWMxM2JcdWMxM2RcdWMxM2VcdWMxM2ZcdWMxNDFcdWMxNDJcdWMxNDNcdWMxNDRcdWMxNDVcdWMxNDZcdWMxNDdcdWMxNGFcdWMxNGVcdWMxNGZcdWMxNTBcdWMx'@;
put 'NTFcdWMxNTJcdWMxNTNcdWMxNTZcdWMxNTdcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWMxNTlcdWMxNWFcdWMxNWJcdWMxNWRcdWMxNWVcdWMxNWZcdWMxNjBcdWMxNjFcdWMxNjJcdWMxNjNcdWMxNjZcdWMxNmFcdWMxNmJcdWMxNmNcdWMxNmRcdWMxNmVcdWMxNmZc'@;
put 'dWMxNzFcdWMxNzJcdWMxNzNcdWMxNzVcdWMxNzZcdWMxNzdcdWMxNzlcdWMxN2FcdWMxN2JcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWMxN2NcdWMxN2RcdWMxN2VcdWMxN2ZcdWMxODBcdWMxODFcdWMxODJcdWMxODNcdWMxODRcdWMxODZcdWMxODdcdWMxODhcdWMx'@;
put 'ODlcdWMxOGFcdWMxOGJcdWMxOGZcdWMxOTFcdWMxOTJcdWMxOTNcdWMxOTVcdWMxOTdcdWMxOThcdWMxOTlcdWMxOWFcdWMxOWJcdWMxOWVcdWMxYTBcdWMxYTJcdWMxYTNcdWMxYTRcdWMxYTZcdWMxYTdcdWMxYWFcdWMxYWJcdWMxYWRcdWMxYWVcdWMxYWZcdWMxYjFcdWMxYjJcdWMxYjNc'@;
put 'dWMxYjRcdWMxYjVcdWMxYjZcdWMxYjdcdWMxYjhcdWMxYjlcdWMxYmFcdWMxYmJcdWMxYmNcdWMxYmVcdWMxYmZcdWMxYzBcdWMxYzFcdWMxYzJcdWMxYzNcdWMxYzVcdWMxYzZcdWMxYzdcdWMxYzlcdWMxY2FcdWMxY2JcdWMxY2RcdWMxY2VcdWMxY2ZcdWMxZDBcdWMxZDFcdWMxZDJcdWMx'@;
put 'ZDNcdWMxZDVcdWMxZDZcdWMxZDlcdWMxZGFcdWMxZGJcdWMxZGNcdWMxZGRcdWMxZGVcdWMxZGZcdWMxZTFcdWMxZTJcdWMxZTNcdWMxZTVcdWMxZTZcdWMxZTdcdWMxZTlcdWMxZWFcdWMxZWJcdWMxZWNcdWMxZWRcdWMxZWVcdWMxZWZcdWMxZjJcdWMxZjRcdWMxZjVcdWMxZjZcdWMxZjdc'@;
put 'dWMxZjhcdWMxZjlcdWMxZmFcdWMxZmJcdWMxZmVcdWMxZmZcdWMyMDFcdWMyMDJcdWMyMDNcdWMyMDVcdWMyMDZcdWMyMDdcdWMyMDhcdWMyMDlcdWMyMGFcdWMyMGJcdWMyMGVcdWMyMTBcdWMyMTJcdWMyMTNcdWMyMTRcdWMyMTVcdWMyMTZcdWMyMTdcdWMyMWFcdWMyMWJcdWMyMWRcdWMy'@;
put 'MWVcdWMyMjFcdWMyMjJcdWMyMjNcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxNTNdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE1M11bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxNTNdW2ddXT0zOTE2OCtnLHlbMzkxNjgrZ109X1sxNTNdW2ddKTtmb3IoX1sxNTRdPSJcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWMyMjRcdWMyMjVcdWMyMjZcdWMyMjdcdWMyMmFcdWMyMmNcdWMyMmVcdWMyMzBcdWMyMzNcdWMyMzVcdWMyMzZcdWMyMzdcdWMyMzhcdWMyMzlcdWMyM2FcdWMyM2JcdWMyM2NcdWMyM2RcdWMyM2VcdWMy'@;
put 'M2ZcdWMyNDBcdWMyNDFcdWMyNDJcdWMyNDNcdWMyNDRcdWMyNDVcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWMyNDZcdWMyNDdcdWMyNDlcdWMyNGFcdWMyNGJcdWMyNGNcdWMyNGRcdWMyNGVcdWMyNGZcdWMyNTJcdWMyNTNcdWMyNTVcdWMyNTZcdWMyNTdcdWMyNTlc'@;
put 'dWMyNWFcdWMyNWJcdWMyNWNcdWMyNWRcdWMyNWVcdWMyNWZcdWMyNjFcdWMyNjJcdWMyNjNcdWMyNjRcdWMyNjZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWMyNjdcdWMyNjhcdWMyNjlcdWMyNmFcdWMyNmJcdWMyNmVcdWMyNmZcdWMyNzFcdWMyNzJcdWMyNzNcdWMy'@;
put 'NzVcdWMyNzZcdWMyNzdcdWMyNzhcdWMyNzlcdWMyN2FcdWMyN2JcdWMyN2VcdWMyODBcdWMyODJcdWMyODNcdWMyODRcdWMyODVcdWMyODZcdWMyODdcdWMyOGFcdWMyOGJcdWMyOGNcdWMyOGRcdWMyOGVcdWMyOGZcdWMyOTFcdWMyOTJcdWMyOTNcdWMyOTRcdWMyOTVcdWMyOTZcdWMyOTdc'@;
put 'dWMyOTlcdWMyOWFcdWMyOWNcdWMyOWVcdWMyOWZcdWMyYTBcdWMyYTFcdWMyYTJcdWMyYTNcdWMyYTZcdWMyYTdcdWMyYTlcdWMyYWFcdWMyYWJcdWMyYWVcdWMyYWZcdWMyYjBcdWMyYjFcdWMyYjJcdWMyYjNcdWMyYjZcdWMyYjhcdWMyYmFcdWMyYmJcdWMyYmNcdWMyYmRcdWMyYmVcdWMy'@;
put 'YmZcdWMyYzBcdWMyYzFcdWMyYzJcdWMyYzNcdWMyYzRcdWMyYzVcdWMyYzZcdWMyYzdcdWMyYzhcdWMyYzlcdWMyY2FcdWMyY2JcdWMyY2NcdWMyY2RcdWMyY2VcdWMyY2ZcdWMyZDBcdWMyZDFcdWMyZDJcdWMyZDNcdWMyZDRcdWMyZDVcdWMyZDZcdWMyZDdcdWMyZDhcdWMyZDlcdWMyZGFc'@;
put 'dWMyZGJcdWMyZGVcdWMyZGZcdWMyZTFcdWMyZTJcdWMyZTVcdWMyZTZcdWMyZTdcdWMyZThcdWMyZTlcdWMyZWFcdWMyZWVcdWMyZjBcdWMyZjJcdWMyZjNcdWMyZjRcdWMyZjVcdWMyZjdcdWMyZmFcdWMyZmRcdWMyZmVcdWMyZmZcdWMzMDFcdWMzMDJcdWMzMDNcdWMzMDRcdWMzMDVcdWMz'@;
put 'MDZcdWMzMDdcdWMzMGFcdWMzMGJcdWMzMGVcdWMzMGZcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxNTRdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE1NF1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxNTRdW2ddXT0zOTQyNCtnLHlbMzk0MjQrZ109X1sxNTRdW2ddKTtmb3IoX1sxNTVdPSJc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWMzMTBcdWMzMTFcdWMzMTJcdWMzMTZcdWMzMTdcdWMzMTlcdWMzMWFcdWMzMWJcdWMzMWRcdWMzMWVcdWMzMWZcdWMzMjBcdWMzMjFcdWMzMjJcdWMzMjNcdWMzMjZcdWMzMjdcdWMz'@;
put 'MmFcdWMzMmJcdWMzMmNcdWMzMmRcdWMzMmVcdWMzMmZcdWMzMzBcdWMzMzFcdWMzMzJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWMzMzNcdWMzMzRcdWMzMzVcdWMzMzZcdWMzMzdcdWMzMzhcdWMzMzlcdWMzM2FcdWMzM2JcdWMzM2NcdWMzM2RcdWMzM2VcdWMzM2Zc'@;
put 'dWMzNDBcdWMzNDFcdWMzNDJcdWMzNDNcdWMzNDRcdWMzNDZcdWMzNDdcdWMzNDhcdWMzNDlcdWMzNGFcdWMzNGJcdWMzNGNcdWMzNGRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWMzNGVcdWMzNGZcdWMzNTBcdWMzNTFcdWMzNTJcdWMzNTNcdWMzNTRcdWMzNTVcdWMz'@;
put 'NTZcdWMzNTdcdWMzNThcdWMzNTlcdWMzNWFcdWMzNWJcdWMzNWNcdWMzNWRcdWMzNWVcdWMzNWZcdWMzNjBcdWMzNjFcdWMzNjJcdWMzNjNcdWMzNjRcdWMzNjVcdWMzNjZcdWMzNjdcdWMzNmFcdWMzNmJcdWMzNmRcdWMzNmVcdWMzNmZcdWMzNzFcdWMzNzNcdWMzNzRcdWMzNzVcdWMzNzZc'@;
put 'dWMzNzdcdWMzN2FcdWMzN2JcdWMzN2VcdWMzN2ZcdWMzODBcdWMzODFcdWMzODJcdWMzODNcdWMzODVcdWMzODZcdWMzODdcdWMzODlcdWMzOGFcdWMzOGJcdWMzOGRcdWMzOGVcdWMzOGZcdWMzOTBcdWMzOTFcdWMzOTJcdWMzOTNcdWMzOTRcdWMzOTVcdWMzOTZcdWMzOTdcdWMzOThcdWMz'@;
put 'OTlcdWMzOWFcdWMzOWJcdWMzOWNcdWMzOWRcdWMzOWVcdWMzOWZcdWMzYTBcdWMzYTFcdWMzYTJcdWMzYTNcdWMzYTRcdWMzYTVcdWMzYTZcdWMzYTdcdWMzYThcdWMzYTlcdWMzYWFcdWMzYWJcdWMzYWNcdWMzYWRcdWMzYWVcdWMzYWZcdWMzYjBcdWMzYjFcdWMzYjJcdWMzYjNcdWMzYjRc'@;
put 'dWMzYjVcdWMzYjZcdWMzYjdcdWMzYjhcdWMzYjlcdWMzYmFcdWMzYmJcdWMzYmNcdWMzYmRcdWMzYmVcdWMzYmZcdWMzYzFcdWMzYzJcdWMzYzNcdWMzYzRcdWMzYzVcdWMzYzZcdWMzYzdcdWMzYzhcdWMzYzlcdWMzY2FcdWMzY2JcdWMzY2NcdWMzY2RcdWMzY2VcdWMzY2ZcdWMzZDBcdWMz'@;
put 'ZDFcdWMzZDJcdWMzZDNcdWMzZDRcdWMzZDVcdWMzZDZcdWMzZDdcdWMzZGFcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxNTVdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE1NV1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxNTVdW2ddXT0zOTY4MCtnLHlbMzk2ODArZ109X1sxNTVdW2ddKTtm'@;
put 'b3IoX1sxNTZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWMzZGJcdWMzZGRcdWMzZGVcdWMzZTFcdWMzZTNcdWMzZTRcdWMzZTVcdWMzZTZcdWMzZTdcdWMzZWFcdWMzZWJcdWMzZWNcdWMzZWVcdWMzZWZcdWMzZjBcdWMz'@;
put 'ZjFcdWMzZjJcdWMzZjNcdWMzZjZcdWMzZjdcdWMzZjlcdWMzZmFcdWMzZmJcdWMzZmNcdWMzZmRcdWMzZmVcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWMzZmZcdWM0MDBcdWM0MDFcdWM0MDJcdWM0MDNcdWM0MDRcdWM0MDVcdWM0MDZcdWM0MDdcdWM0MDlcdWM0MGFc'@;
put 'dWM0MGJcdWM0MGNcdWM0MGRcdWM0MGVcdWM0MGZcdWM0MTFcdWM0MTJcdWM0MTNcdWM0MTRcdWM0MTVcdWM0MTZcdWM0MTdcdWM0MThcdWM0MTlcdWM0MWFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWM0MWJcdWM0MWNcdWM0MWRcdWM0MWVcdWM0MWZcdWM0MjBcdWM0'@;
put 'MjFcdWM0MjJcdWM0MjNcdWM0MjVcdWM0MjZcdWM0MjdcdWM0MjhcdWM0MjlcdWM0MmFcdWM0MmJcdWM0MmRcdWM0MmVcdWM0MmZcdWM0MzFcdWM0MzJcdWM0MzNcdWM0MzVcdWM0MzZcdWM0MzdcdWM0MzhcdWM0MzlcdWM0M2FcdWM0M2JcdWM0M2VcdWM0M2ZcdWM0NDBcdWM0NDFcdWM0NDJc'@;
put 'dWM0NDNcdWM0NDRcdWM0NDVcdWM0NDZcdWM0NDdcdWM0NDlcdWM0NGFcdWM0NGJcdWM0NGNcdWM0NGRcdWM0NGVcdWM0NGZcdWM0NTBcdWM0NTFcdWM0NTJcdWM0NTNcdWM0NTRcdWM0NTVcdWM0NTZcdWM0NTdcdWM0NThcdWM0NTlcdWM0NWFcdWM0NWJcdWM0NWNcdWM0NWRcdWM0NWVcdWM0'@;
put 'NWZcdWM0NjBcdWM0NjFcdWM0NjJcdWM0NjNcdWM0NjZcdWM0NjdcdWM0NjlcdWM0NmFcdWM0NmJcdWM0NmRcdWM0NmVcdWM0NmZcdWM0NzBcdWM0NzFcdWM0NzJcdWM0NzNcdWM0NzZcdWM0NzdcdWM0NzhcdWM0N2FcdWM0N2JcdWM0N2NcdWM0N2RcdWM0N2VcdWM0N2ZcdWM0ODFcdWM0ODJc'@;
put 'dWM0ODNcdWM0ODRcdWM0ODVcdWM0ODZcdWM0ODdcdWM0ODhcdWM0ODlcdWM0OGFcdWM0OGJcdWM0OGNcdWM0OGRcdWM0OGVcdWM0OGZcdWM0OTBcdWM0OTFcdWM0OTJcdWM0OTNcdWM0OTVcdWM0OTZcdWM0OTdcdWM0OThcdWM0OTlcdWM0OWFcdWM0OWJcdWM0OWRcdWM0OWVcdWM0OWZcdWM0'@;
put 'YTBcdWM0YTFcdWM0YTJcdWM0YTNcdWM0YTRcdWM0YTVcdWM0YTZcdWM0YTdcdWM0YThcdWM0YTlcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxNTZdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE1Nl1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxNTZdW2ddXT0zOTkzNitnLHlbMzk5MzYrZ109'@;
put 'X1sxNTZdW2ddKTtmb3IoX1sxNTddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWM0YWFcdWM0YWJcdWM0YWNcdWM0YWRcdWM0YWVcdWM0YWZcdWM0YjBcdWM0YjFcdWM0YjJcdWM0YjNcdWM0YjRcdWM0YjVcdWM0YjZcdWM0'@;
put 'YjdcdWM0YjlcdWM0YmFcdWM0YmJcdWM0YmRcdWM0YmVcdWM0YmZcdWM0YzBcdWM0YzFcdWM0YzJcdWM0YzNcdWM0YzRcdWM0YzVcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWM0YzZcdWM0YzdcdWM0YzhcdWM0YzlcdWM0Y2FcdWM0Y2JcdWM0Y2NcdWM0Y2RcdWM0Y2Vc'@;
put 'dWM0Y2ZcdWM0ZDBcdWM0ZDFcdWM0ZDJcdWM0ZDNcdWM0ZDRcdWM0ZDVcdWM0ZDZcdWM0ZDdcdWM0ZDhcdWM0ZDlcdWM0ZGFcdWM0ZGJcdWM0ZGNcdWM0ZGRcdWM0ZGVcdWM0ZGZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWM0ZTBcdWM0ZTFcdWM0ZTJcdWM0ZTNcdWM0'@;
put 'ZTRcdWM0ZTVcdWM0ZTZcdWM0ZTdcdWM0ZThcdWM0ZWFcdWM0ZWJcdWM0ZWNcdWM0ZWRcdWM0ZWVcdWM0ZWZcdWM0ZjJcdWM0ZjNcdWM0ZjVcdWM0ZjZcdWM0ZjdcdWM0ZjlcdWM0ZmJcdWM0ZmNcdWM0ZmRcdWM0ZmVcdWM1MDJcdWM1MDNcdWM1MDRcdWM1MDVcdWM1MDZcdWM1MDdcdWM1MDhc'@;
put 'dWM1MDlcdWM1MGFcdWM1MGJcdWM1MGRcdWM1MGVcdWM1MGZcdWM1MTFcdWM1MTJcdWM1MTNcdWM1MTVcdWM1MTZcdWM1MTdcdWM1MThcdWM1MTlcdWM1MWFcdWM1MWJcdWM1MWRcdWM1MWVcdWM1MWZcdWM1MjBcdWM1MjFcdWM1MjJcdWM1MjNcdWM1MjRcdWM1MjVcdWM1MjZcdWM1MjdcdWM1'@;
put 'MmFcdWM1MmJcdWM1MmRcdWM1MmVcdWM1MmZcdWM1MzFcdWM1MzJcdWM1MzNcdWM1MzRcdWM1MzVcdWM1MzZcdWM1MzdcdWM1M2FcdWM1M2NcdWM1M2VcdWM1M2ZcdWM1NDBcdWM1NDFcdWM1NDJcdWM1NDNcdWM1NDZcdWM1NDdcdWM1NGJcdWM1NGZcdWM1NTBcdWM1NTFcdWM1NTJcdWM1NTZc'@;
put 'dWM1NWFcdWM1NWJcdWM1NWNcdWM1NWZcdWM1NjJcdWM1NjNcdWM1NjVcdWM1NjZcdWM1NjdcdWM1NjlcdWM1NmFcdWM1NmJcdWM1NmNcdWM1NmRcdWM1NmVcdWM1NmZcdWM1NzJcdWM1NzZcdWM1NzdcdWM1NzhcdWM1NzlcdWM1N2FcdWM1N2JcdWM1N2VcdWM1N2ZcdWM1ODFcdWM1ODJcdWM1'@;
put 'ODNcdWM1ODVcdWM1ODZcdWM1ODhcdWM1ODlcdWM1OGFcdWM1OGJcdWM1OGVcdWM1OTBcdWM1OTJcdWM1OTNcdWM1OTRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxNTddLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE1N11bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxNTddW2ddXT00MDE5Mitn'@;
put 'LHlbNDAxOTIrZ109X1sxNTddW2ddKTtmb3IoX1sxNThdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWM1OTZcdWM1OTlcdWM1OWFcdWM1OWJcdWM1OWRcdWM1OWVcdWM1OWZcdWM1YTFcdWM1YTJcdWM1YTNcdWM1YTRcdWM1'@;
put 'YTVcdWM1YTZcdWM1YTdcdWM1YThcdWM1YWFcdWM1YWJcdWM1YWNcdWM1YWRcdWM1YWVcdWM1YWZcdWM1YjBcdWM1YjFcdWM1YjJcdWM1YjNcdWM1YjZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWM1YjdcdWM1YmFcdWM1YmZcdWM1YzBcdWM1YzFcdWM1YzJcdWM1YzNc'@;
put 'dWM1Y2JcdWM1Y2RcdWM1Y2ZcdWM1ZDJcdWM1ZDNcdWM1ZDVcdWM1ZDZcdWM1ZDdcdWM1ZDlcdWM1ZGFcdWM1ZGJcdWM1ZGNcdWM1ZGRcdWM1ZGVcdWM1ZGZcdWM1ZTJcdWM1ZTRcdWM1ZTZcdWM1ZTdcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWM1ZThcdWM1ZTlcdWM1'@;
put 'ZWFcdWM1ZWJcdWM1ZWZcdWM1ZjFcdWM1ZjJcdWM1ZjNcdWM1ZjVcdWM1ZjhcdWM1ZjlcdWM1ZmFcdWM1ZmJcdWM2MDJcdWM2MDNcdWM2MDRcdWM2MDlcdWM2MGFcdWM2MGJcdWM2MGRcdWM2MGVcdWM2MGZcdWM2MTFcdWM2MTJcdWM2MTNcdWM2MTRcdWM2MTVcdWM2MTZcdWM2MTdcdWM2MWFc'@;
put 'dWM2MWRcdWM2MWVcdWM2MWZcdWM2MjBcdWM2MjFcdWM2MjJcdWM2MjNcdWM2MjZcdWM2MjdcdWM2MjlcdWM2MmFcdWM2MmJcdWM2MmZcdWM2MzFcdWM2MzJcdWM2MzZcdWM2MzhcdWM2M2FcdWM2M2NcdWM2M2RcdWM2M2VcdWM2M2ZcdWM2NDJcdWM2NDNcdWM2NDVcdWM2NDZcdWM2NDdcdWM2'@;
put 'NDlcdWM2NGFcdWM2NGJcdWM2NGNcdWM2NGRcdWM2NGVcdWM2NGZcdWM2NTJcdWM2NTZcdWM2NTdcdWM2NThcdWM2NTlcdWM2NWFcdWM2NWJcdWM2NWVcdWM2NWZcdWM2NjFcdWM2NjJcdWM2NjNcdWM2NjRcdWM2NjVcdWM2NjZcdWM2NjdcdWM2NjhcdWM2NjlcdWM2NmFcdWM2NmJcdWM2NmRc'@;
put 'dWM2NmVcdWM2NzBcdWM2NzJcdWM2NzNcdWM2NzRcdWM2NzVcdWM2NzZcdWM2NzdcdWM2N2FcdWM2N2JcdWM2N2RcdWM2N2VcdWM2N2ZcdWM2ODFcdWM2ODJcdWM2ODNcdWM2ODRcdWM2ODVcdWM2ODZcdWM2ODdcdWM2OGFcdWM2OGNcdWM2OGVcdWM2OGZcdWM2OTBcdWM2OTFcdWM2OTJcdWM2'@;
put 'OTNcdWM2OTZcdWM2OTdcdWM2OTlcdWM2OWFcdWM2OWJcdWM2OWRcdWM2OWVcdWM2OWZcdWM2YTBcdWM2YTFcdWM2YTJcdWM2YTNcdWM2YTZcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxNThdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE1OF1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxNThd'@;
put 'W2ddXT00MDQ0OCtnLHlbNDA0NDgrZ109X1sxNThdW2ddKTtmb3IoX1sxNTldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWM2YThcdWM2YWFcdWM2YWJcdWM2YWNcdWM2YWRcdWM2YWVcdWM2YWZcdWM2YjJcdWM2YjNcdWM2'@;
put 'YjVcdWM2YjZcdWM2YjdcdWM2YmJcdWM2YmNcdWM2YmRcdWM2YmVcdWM2YmZcdWM2YzJcdWM2YzRcdWM2YzZcdWM2YzdcdWM2YzhcdWM2YzlcdWM2Y2FcdWM2Y2JcdWM2Y2VcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWM2Y2ZcdWM2ZDFcdWM2ZDJcdWM2ZDNcdWM2ZDVc'@;
put 'dWM2ZDZcdWM2ZDdcdWM2ZDhcdWM2ZDlcdWM2ZGFcdWM2ZGJcdWM2ZGVcdWM2ZGZcdWM2ZTJcdWM2ZTNcdWM2ZTRcdWM2ZTVcdWM2ZTZcdWM2ZTdcdWM2ZWFcdWM2ZWJcdWM2ZWRcdWM2ZWVcdWM2ZWZcdWM2ZjFcdWM2ZjJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWM2'@;
put 'ZjNcdWM2ZjRcdWM2ZjVcdWM2ZjZcdWM2ZjdcdWM2ZmFcdWM2ZmJcdWM2ZmNcdWM2ZmVcdWM2ZmZcdWM3MDBcdWM3MDFcdWM3MDJcdWM3MDNcdWM3MDZcdWM3MDdcdWM3MDlcdWM3MGFcdWM3MGJcdWM3MGRcdWM3MGVcdWM3MGZcdWM3MTBcdWM3MTFcdWM3MTJcdWM3MTNcdWM3MTZcdWM3MThc'@;
put 'dWM3MWFcdWM3MWJcdWM3MWNcdWM3MWRcdWM3MWVcdWM3MWZcdWM3MjJcdWM3MjNcdWM3MjVcdWM3MjZcdWM3MjdcdWM3MjlcdWM3MmFcdWM3MmJcdWM3MmNcdWM3MmRcdWM3MmVcdWM3MmZcdWM3MzJcdWM3MzRcdWM3MzZcdWM3MzhcdWM3MzlcdWM3M2FcdWM3M2JcdWM3M2VcdWM3M2ZcdWM3'@;
put 'NDFcdWM3NDJcdWM3NDNcdWM3NDVcdWM3NDZcdWM3NDdcdWM3NDhcdWM3NDlcdWM3NGJcdWM3NGVcdWM3NTBcdWM3NTlcdWM3NWFcdWM3NWJcdWM3NWRcdWM3NWVcdWM3NWZcdWM3NjFcdWM3NjJcdWM3NjNcdWM3NjRcdWM3NjVcdWM3NjZcdWM3NjdcdWM3NjlcdWM3NmFcdWM3NmNcdWM3NmRc'@;
put 'dWM3NmVcdWM3NmZcdWM3NzBcdWM3NzFcdWM3NzJcdWM3NzNcdWM3NzZcdWM3NzdcdWM3NzlcdWM3N2FcdWM3N2JcdWM3N2ZcdWM3ODBcdWM3ODFcdWM3ODJcdWM3ODZcdWM3OGJcdWM3OGNcdWM3OGRcdWM3OGZcdWM3OTJcdWM3OTNcdWM3OTVcdWM3OTlcdWM3OWJcdWM3OWNcdWM3OWRcdWM3'@;
put 'OWVcdWM3OWZcdWM3YTJcdWM3YTdcdWM3YThcdWM3YTlcdWM3YWFcdWM3YWJcdWM3YWVcdWM3YWZcdWM3YjFcdWM3YjJcdWM3YjNcdWM3YjVcdWM3YjZcdWM3YjdcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxNTldLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE1OV1bZ10uY2hhckNvZGVBdCgw'@;
put 'KSYmKElbX1sxNTldW2ddXT00MDcwNCtnLHlbNDA3MDQrZ109X1sxNTldW2ddKTtmb3IoX1sxNjBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWM3YjhcdWM3YjlcdWM3YmFcdWM3YmJcdWM3YmVcdWM3YzJcdWM3YzNcdWM3'@;
put 'YzRcdWM3YzVcdWM3YzZcdWM3YzdcdWM3Y2FcdWM3Y2JcdWM3Y2RcdWM3Y2ZcdWM3ZDFcdWM3ZDJcdWM3ZDNcdWM3ZDRcdWM3ZDVcdWM3ZDZcdWM3ZDdcdWM3ZDlcdWM3ZGFcdWM3ZGJcdWM3ZGNcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWM3ZGVcdWM3ZGZcdWM3ZTBc'@;
put 'dWM3ZTFcdWM3ZTJcdWM3ZTNcdWM3ZTVcdWM3ZTZcdWM3ZTdcdWM3ZTlcdWM3ZWFcdWM3ZWJcdWM3ZWRcdWM3ZWVcdWM3ZWZcdWM3ZjBcdWM3ZjFcdWM3ZjJcdWM3ZjNcdWM3ZjRcdWM3ZjVcdWM3ZjZcdWM3ZjdcdWM3ZjhcdWM3ZjlcdWM3ZmFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWM3ZmJcdWM3ZmNcdWM3ZmRcdWM3ZmVcdWM3ZmZcdWM4MDJcdWM4MDNcdWM4MDVcdWM4MDZcdWM4MDdcdWM4MDlcdWM4MGJcdWM4MGNcdWM4MGRcdWM4MGVcdWM4MGZcdWM4MTJcdWM4MTRcdWM4MTdcdWM4MThcdWM4MTlcdWM4MWFcdWM4MWJcdWM4MWVcdWM4MWZcdWM4MjFc'@;
put 'dWM4MjJcdWM4MjNcdWM4MjVcdWM4MjZcdWM4MjdcdWM4MjhcdWM4MjlcdWM4MmFcdWM4MmJcdWM4MmVcdWM4MzBcdWM4MzJcdWM4MzNcdWM4MzRcdWM4MzVcdWM4MzZcdWM4MzdcdWM4MzlcdWM4M2FcdWM4M2JcdWM4M2RcdWM4M2VcdWM4M2ZcdWM4NDFcdWM4NDJcdWM4NDNcdWM4NDRcdWM4'@;
put 'NDVcdWM4NDZcdWM4NDdcdWM4NGFcdWM4NGJcdWM4NGVcdWM4NGZcdWM4NTBcdWM4NTFcdWM4NTJcdWM4NTNcdWM4NTVcdWM4NTZcdWM4NTdcdWM4NThcdWM4NTlcdWM4NWFcdWM4NWJcdWM4NWNcdWM4NWRcdWM4NWVcdWM4NWZcdWM4NjBcdWM4NjFcdWM4NjJcdWM4NjNcdWM4NjRcdWM4NjVc'@;
put 'dWM4NjZcdWM4NjdcdWM4NjhcdWM4NjlcdWM4NmFcdWM4NmJcdWM4NmNcdWM4NmRcdWM4NmVcdWM4NmZcdWM4NzJcdWM4NzNcdWM4NzVcdWM4NzZcdWM4NzdcdWM4NzlcdWM4N2JcdWM4N2NcdWM4N2RcdWM4N2VcdWM4N2ZcdWM4ODJcdWM4ODRcdWM4ODhcdWM4ODlcdWM4OGFcdWM4OGVcdWM4'@;
put 'OGZcdWM4OTBcdWM4OTFcdWM4OTJcdWM4OTNcdWM4OTVcdWM4OTZcdWM4OTdcdWM4OThcdWM4OTlcdWM4OWFcdWM4OWJcdWM4OWNcdWM4OWVcdWM4YTBcdWM4YTJcdWM4YTNcdWM4YTRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxNjBdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE2MF1bZ10u'@;
put 'Y2hhckNvZGVBdCgwKSYmKElbX1sxNjBdW2ddXT00MDk2MCtnLHlbNDA5NjArZ109X1sxNjBdW2ddKTtmb3IoX1sxNjFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWM4YTVcdWM4YTZcdWM4YTdcdWM4YTlcdWM4YWFcdWM4'@;
put 'YWJcdWM4YWNcdWM4YWRcdWM4YWVcdWM4YWZcdWM4YjBcdWM4YjFcdWM4YjJcdWM4YjNcdWM4YjRcdWM4YjVcdWM4YjZcdWM4YjdcdWM4YjhcdWM4YjlcdWM4YmFcdWM4YmJcdWM4YmVcdWM4YmZcdWM4YzBcdWM4YzFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWM4YzJc'@;
put 'dWM4YzNcdWM4YzVcdWM4YzZcdWM4YzdcdWM4YzlcdWM4Y2FcdWM4Y2JcdWM4Y2RcdWM4Y2VcdWM4Y2ZcdWM4ZDBcdWM4ZDFcdWM4ZDJcdWM4ZDNcdWM4ZDZcdWM4ZDhcdWM4ZGFcdWM4ZGJcdWM4ZGNcdWM4ZGRcdWM4ZGVcdWM4ZGZcdWM4ZTJcdWM4ZTNcdWM4ZTVcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWM4ZTZcdWM4ZTdcdWM4ZThcdWM4ZTlcdWM4ZWFcdWM4ZWJcdWM4ZWNcdWM4ZWRcdWM4ZWVcdWM4ZWZcdWM4ZjBcdWM4ZjFcdWM4ZjJcdWM4ZjNcdWM4ZjRcdWM4ZjZcdWM4ZjdcdWM4ZjhcdWM4ZjlcdWM4ZmFcdWM4ZmJcdWM4ZmVcdWM4ZmZcdWM5MDFc'@;
put 'dWM5MDJcdWM5MDNcdWM5MDdcdWM5MDhcdWM5MDlcdWM5MGFcdWM5MGJcdWM5MGVcdTMwMDBcdTMwMDFcdTMwMDJceGI3XHUyMDI1XHUyMDI2XHhhOFx1MzAwM1x4YWRcdTIwMTVcdTIyMjVcdWZmM2NcdTIyM2NcdTIwMThcdTIwMTlcdTIwMWNcdTIwMWRcdTMwMTRcdTMwMTVcdTMwMDhcdTMw'@;
put 'MDlcdTMwMGFcdTMwMGJcdTMwMGNcdTMwMGRcdTMwMGVcdTMwMGZcdTMwMTBcdTMwMTFceGIxXHhkN1x4ZjdcdTIyNjBcdTIyNjRcdTIyNjVcdTIyMWVcdTIyMzRceGIwXHUyMDMyXHUyMDMzXHUyMTAzXHUyMTJiXHVmZmUwXHVmZmUxXHVmZmU1XHUyNjQyXHUyNjQwXHUyMjIwXHUyMmE1XHUy'@;
put 'MzEyXHUyMjAyXHUyMjA3XHUyMjYxXHUyMjUyXHhhN1x1MjAzYlx1MjYwNlx1MjYwNVx1MjVjYlx1MjVjZlx1MjVjZVx1MjVjN1x1MjVjNlx1MjVhMVx1MjVhMFx1MjViM1x1MjViMlx1MjViZFx1MjViY1x1MjE5Mlx1MjE5MFx1MjE5MVx1MjE5M1x1MjE5NFx1MzAxM1x1MjI2YVx1MjI2Ylx1'@;
put 'MjIxYVx1MjIzZFx1MjIxZFx1MjIzNVx1MjIyYlx1MjIyY1x1MjIwOFx1MjIwYlx1MjI4Nlx1MjI4N1x1MjI4Mlx1MjI4M1x1MjIyYVx1MjIyOVx1MjIyN1x1MjIyOFx1ZmZlMlx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE2MV0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTYxXVtnXS5jaGFy'@;
put 'Q29kZUF0KDApJiYoSVtfWzE2MV1bZ11dPTQxMjE2K2cseVs0MTIxNitnXT1fWzE2MV1bZ10pO2ZvcihfWzE2Ml09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YzkxMFx1YzkxMlx1YzkxM1x1YzkxNFx1YzkxNVx1YzkxNlx1'@;
put 'YzkxN1x1YzkxOVx1YzkxYVx1YzkxYlx1YzkxY1x1YzkxZFx1YzkxZVx1YzkxZlx1YzkyMFx1YzkyMVx1YzkyMlx1YzkyM1x1YzkyNFx1YzkyNVx1YzkyNlx1YzkyN1x1YzkyOFx1YzkyOVx1YzkyYVx1YzkyYlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YzkyZFx1Yzky'@;
put 'ZVx1YzkyZlx1YzkzMFx1YzkzMVx1YzkzMlx1YzkzM1x1YzkzNVx1YzkzNlx1YzkzN1x1YzkzOFx1YzkzOVx1YzkzYVx1YzkzYlx1YzkzY1x1YzkzZFx1YzkzZVx1YzkzZlx1Yzk0MFx1Yzk0MVx1Yzk0Mlx1Yzk0M1x1Yzk0NFx1Yzk0NVx1Yzk0Nlx1Yzk0N1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1Yzk0OFx1Yzk0OVx1Yzk0YVx1Yzk0Ylx1Yzk0Y1x1Yzk0ZFx1Yzk0ZVx1Yzk0Zlx1Yzk1Mlx1Yzk1M1x1Yzk1NVx1Yzk1Nlx1Yzk1N1x1Yzk1OVx1Yzk1YVx1Yzk1Ylx1Yzk1Y1x1Yzk1ZFx1Yzk1ZVx1Yzk1Zlx1Yzk2Mlx1Yzk2NFx1Yzk2NVx1Yzk2Nlx1Yzk2'@;
put 'N1x1Yzk2OFx1Yzk2OVx1Yzk2YVx1Yzk2Ylx1Yzk2ZFx1Yzk2ZVx1Yzk2Zlx1MjFkMlx1MjFkNFx1MjIwMFx1MjIwM1x4YjRcdWZmNWVcdTAyYzdcdTAyZDhcdTAyZGRcdTAyZGFcdTAyZDlceGI4XHUwMmRiXHhhMVx4YmZcdTAyZDBcdTIyMmVcdTIyMTFcdTIyMGZceGE0XHUyMTA5XHUyMDMw'@;
put 'XHUyNWMxXHUyNWMwXHUyNWI3XHUyNWI2XHUyNjY0XHUyNjYwXHUyNjYxXHUyNjY1XHUyNjY3XHUyNjYzXHUyMjk5XHUyNWM4XHUyNWEzXHUyNWQwXHUyNWQxXHUyNTkyXHUyNWE0XHUyNWE1XHUyNWE4XHUyNWE3XHUyNWE2XHUyNWE5XHUyNjY4XHUyNjBmXHUyNjBlXHUyNjFjXHUyNjFlXHhi'@;
put 'Nlx1MjAyMFx1MjAyMVx1MjE5NVx1MjE5N1x1MjE5OVx1MjE5Nlx1MjE5OFx1MjY2ZFx1MjY2OVx1MjY2YVx1MjY2Y1x1MzI3Zlx1MzIxY1x1MjExNlx1MzNjN1x1MjEyMlx1MzNjMlx1MzNkOFx1MjEyMVx1MjBhY1x4YWVcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxNjJdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE2Ml1bZ10uY2hhckNv'@;
put 'ZGVBdCgwKSYmKElbX1sxNjJdW2ddXT00MTQ3MitnLHlbNDE0NzIrZ109X1sxNjJdW2ddKTtmb3IoX1sxNjNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWM5NzFcdWM5NzJcdWM5NzNcdWM5NzVcdWM5NzZcdWM5NzdcdWM5'@;
put 'NzhcdWM5NzlcdWM5N2FcdWM5N2JcdWM5N2RcdWM5N2VcdWM5N2ZcdWM5ODBcdWM5ODFcdWM5ODJcdWM5ODNcdWM5ODRcdWM5ODVcdWM5ODZcdWM5ODdcdWM5OGFcdWM5OGJcdWM5OGRcdWM5OGVcdWM5OGZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWM5OTFcdWM5OTJc'@;
put 'dWM5OTNcdWM5OTRcdWM5OTVcdWM5OTZcdWM5OTdcdWM5OWFcdWM5OWNcdWM5OWVcdWM5OWZcdWM5YTBcdWM5YTFcdWM5YTJcdWM5YTNcdWM5YTRcdWM5YTVcdWM5YTZcdWM5YTdcdWM5YThcdWM5YTlcdWM5YWFcdWM5YWJcdWM5YWNcdWM5YWRcdWM5YWVcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWM5YWZcdWM5YjBcdWM5YjFcdWM5YjJcdWM5YjNcdWM5YjRcdWM5YjVcdWM5YjZcdWM5YjdcdWM5YjhcdWM5YjlcdWM5YmFcdWM5YmJcdWM5YmNcdWM5YmRcdWM5YmVcdWM5YmZcdWM5YzJcdWM5YzNcdWM5YzVcdWM5YzZcdWM5YzlcdWM5Y2JcdWM5Y2NcdWM5Y2Rc'@;
put 'dWM5Y2VcdWM5Y2ZcdWM5ZDJcdWM5ZDRcdWM5ZDdcdWM5ZDhcdWM5ZGJcdWZmMDFcdWZmMDJcdWZmMDNcdWZmMDRcdWZmMDVcdWZmMDZcdWZmMDdcdWZmMDhcdWZmMDlcdWZmMGFcdWZmMGJcdWZmMGNcdWZmMGRcdWZmMGVcdWZmMGZcdWZmMTBcdWZmMTFcdWZmMTJcdWZmMTNcdWZmMTRcdWZm'@;
put 'MTVcdWZmMTZcdWZmMTdcdWZmMThcdWZmMTlcdWZmMWFcdWZmMWJcdWZmMWNcdWZmMWRcdWZmMWVcdWZmMWZcdWZmMjBcdWZmMjFcdWZmMjJcdWZmMjNcdWZmMjRcdWZmMjVcdWZmMjZcdWZmMjdcdWZmMjhcdWZmMjlcdWZmMmFcdWZmMmJcdWZmMmNcdWZmMmRcdWZmMmVcdWZmMmZcdWZmMzBc'@;
put 'dWZmMzFcdWZmMzJcdWZmMzNcdWZmMzRcdWZmMzVcdWZmMzZcdWZmMzdcdWZmMzhcdWZmMzlcdWZmM2FcdWZmM2JcdWZmZTZcdWZmM2RcdWZmM2VcdWZmM2ZcdWZmNDBcdWZmNDFcdWZmNDJcdWZmNDNcdWZmNDRcdWZmNDVcdWZmNDZcdWZmNDdcdWZmNDhcdWZmNDlcdWZmNGFcdWZmNGJcdWZm'@;
put 'NGNcdWZmNGRcdWZmNGVcdWZmNGZcdWZmNTBcdWZmNTFcdWZmNTJcdWZmNTNcdWZmNTRcdWZmNTVcdWZmNTZcdWZmNTdcdWZmNThcdWZmNTlcdWZmNWFcdWZmNWJcdWZmNWNcdWZmNWRcdWZmZTNcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxNjNdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE2'@;
put 'M11bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxNjNdW2ddXT00MTcyOCtnLHlbNDE3MjgrZ109X1sxNjNdW2ddKTtmb3IoX1sxNjRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWM5ZGVcdWM5ZGZcdWM5ZTFcdWM5ZTNcdWM5'@;
put 'ZTVcdWM5ZTZcdWM5ZThcdWM5ZTlcdWM5ZWFcdWM5ZWJcdWM5ZWVcdWM5ZjJcdWM5ZjNcdWM5ZjRcdWM5ZjVcdWM5ZjZcdWM5ZjdcdWM5ZmFcdWM5ZmJcdWM5ZmRcdWM5ZmVcdWM5ZmZcdWNhMDFcdWNhMDJcdWNhMDNcdWNhMDRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWNhMDVcdWNhMDZcdWNhMDdcdWNhMGFcdWNhMGVcdWNhMGZcdWNhMTBcdWNhMTFcdWNhMTJcdWNhMTNcdWNhMTVcdWNhMTZcdWNhMTdcdWNhMTlcdWNhMWFcdWNhMWJcdWNhMWNcdWNhMWRcdWNhMWVcdWNhMWZcdWNhMjBcdWNhMjFcdWNhMjJcdWNhMjNcdWNhMjRcdWNhMjVcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNhMjZcdWNhMjdcdWNhMjhcdWNhMmFcdWNhMmJcdWNhMmNcdWNhMmRcdWNhMmVcdWNhMmZcdWNhMzBcdWNhMzFcdWNhMzJcdWNhMzNcdWNhMzRcdWNhMzVcdWNhMzZcdWNhMzdcdWNhMzhcdWNhMzlcdWNhM2FcdWNhM2JcdWNhM2NcdWNhM2Rc'@;
put 'dWNhM2VcdWNhM2ZcdWNhNDBcdWNhNDFcdWNhNDJcdWNhNDNcdWNhNDRcdWNhNDVcdWNhNDZcdTMxMzFcdTMxMzJcdTMxMzNcdTMxMzRcdTMxMzVcdTMxMzZcdTMxMzdcdTMxMzhcdTMxMzlcdTMxM2FcdTMxM2JcdTMxM2NcdTMxM2RcdTMxM2VcdTMxM2ZcdTMxNDBcdTMxNDFcdTMxNDJcdTMx'@;
put 'NDNcdTMxNDRcdTMxNDVcdTMxNDZcdTMxNDdcdTMxNDhcdTMxNDlcdTMxNGFcdTMxNGJcdTMxNGNcdTMxNGRcdTMxNGVcdTMxNGZcdTMxNTBcdTMxNTFcdTMxNTJcdTMxNTNcdTMxNTRcdTMxNTVcdTMxNTZcdTMxNTdcdTMxNThcdTMxNTlcdTMxNWFcdTMxNWJcdTMxNWNcdTMxNWRcdTMxNWVc'@;
put 'dTMxNWZcdTMxNjBcdTMxNjFcdTMxNjJcdTMxNjNcdTMxNjRcdTMxNjVcdTMxNjZcdTMxNjdcdTMxNjhcdTMxNjlcdTMxNmFcdTMxNmJcdTMxNmNcdTMxNmRcdTMxNmVcdTMxNmZcdTMxNzBcdTMxNzFcdTMxNzJcdTMxNzNcdTMxNzRcdTMxNzVcdTMxNzZcdTMxNzdcdTMxNzhcdTMxNzlcdTMx'@;
put 'N2FcdTMxN2JcdTMxN2NcdTMxN2RcdTMxN2VcdTMxN2ZcdTMxODBcdTMxODFcdTMxODJcdTMxODNcdTMxODRcdTMxODVcdTMxODZcdTMxODdcdTMxODhcdTMxODlcdTMxOGFcdTMxOGJcdTMxOGNcdTMxOGRcdTMxOGVcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxNjRdLmxlbmd0aDsrK2cp'@;
put 'NjU1MzMhPT1fWzE2NF1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxNjRdW2ddXT00MTk4NCtnLHlbNDE5ODQrZ109X1sxNjRdW2ddKTtmb3IoX1sxNjVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNhNDdcdWNhNDhcdWNh'@;
put 'NDlcdWNhNGFcdWNhNGJcdWNhNGVcdWNhNGZcdWNhNTFcdWNhNTJcdWNhNTNcdWNhNTVcdWNhNTZcdWNhNTdcdWNhNThcdWNhNTlcdWNhNWFcdWNhNWJcdWNhNWVcdWNhNjJcdWNhNjNcdWNhNjRcdWNhNjVcdWNhNjZcdWNhNjdcdWNhNjlcdWNhNmFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWNhNmJcdWNhNmNcdWNhNmRcdWNhNmVcdWNhNmZcdWNhNzBcdWNhNzFcdWNhNzJcdWNhNzNcdWNhNzRcdWNhNzVcdWNhNzZcdWNhNzdcdWNhNzhcdWNhNzlcdWNhN2FcdWNhN2JcdWNhN2NcdWNhN2VcdWNhN2ZcdWNhODBcdWNhODFcdWNhODJcdWNhODNcdWNhODVcdWNh'@;
put 'ODZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNhODdcdWNhODhcdWNhODlcdWNhOGFcdWNhOGJcdWNhOGNcdWNhOGRcdWNhOGVcdWNhOGZcdWNhOTBcdWNhOTFcdWNhOTJcdWNhOTNcdWNhOTRcdWNhOTVcdWNhOTZcdWNhOTdcdWNhOTlcdWNhOWFcdWNhOWJcdWNhOWNc'@;
put 'dWNhOWRcdWNhOWVcdWNhOWZcdWNhYTBcdWNhYTFcdWNhYTJcdWNhYTNcdWNhYTRcdWNhYTVcdWNhYTZcdWNhYTdcdTIxNzBcdTIxNzFcdTIxNzJcdTIxNzNcdTIxNzRcdTIxNzVcdTIxNzZcdTIxNzdcdTIxNzhcdTIxNzlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTIxNjBcdTIx'@;
put 'NjFcdTIxNjJcdTIxNjNcdTIxNjRcdTIxNjVcdTIxNjZcdTIxNjdcdTIxNjhcdTIxNjlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTAzOTFcdTAzOTJcdTAzOTNcdTAzOTRcdTAzOTVcdTAzOTZcdTAzOTdcdTAzOThcdTAzOTlcdTAzOWFcdTAzOWJcdTAzOWNc'@;
put 'dTAzOWRcdTAzOWVcdTAzOWZcdTAzYTBcdTAzYTFcdTAzYTNcdTAzYTRcdTAzYTVcdTAzYTZcdTAzYTdcdTAzYThcdTAzYTlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTAzYjFcdTAzYjJcdTAzYjNcdTAzYjRcdTAzYjVcdTAzYjZcdTAzYjdcdTAz'@;
put 'YjhcdTAzYjlcdTAzYmFcdTAzYmJcdTAzYmNcdTAzYmRcdTAzYmVcdTAzYmZcdTAzYzBcdTAzYzFcdTAzYzNcdTAzYzRcdTAzYzVcdTAzYzZcdTAzYzdcdTAzYzhcdTAzYzlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxNjVd'@;
put 'Lmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE2NV1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxNjVdW2ddXT00MjI0MCtnLHlbNDIyNDArZ109X1sxNjVdW2ddKTtmb3IoX1sxNjZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNh'@;
put 'YThcdWNhYTlcdWNhYWFcdWNhYWJcdWNhYWNcdWNhYWRcdWNhYWVcdWNhYWZcdWNhYjBcdWNhYjFcdWNhYjJcdWNhYjNcdWNhYjRcdWNhYjVcdWNhYjZcdWNhYjdcdWNhYjhcdWNhYjlcdWNhYmFcdWNhYmJcdWNhYmVcdWNhYmZcdWNhYzFcdWNhYzJcdWNhYzNcdWNhYzVcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNhYzZcdWNhYzdcdWNhYzhcdWNhYzlcdWNhY2FcdWNhY2JcdWNhY2VcdWNhZDBcdWNhZDJcdWNhZDRcdWNhZDVcdWNhZDZcdWNhZDdcdWNhZGFcdWNhZGJcdWNhZGNcdWNhZGRcdWNhZGVcdWNhZGZcdWNhZTFcdWNhZTJcdWNhZTNcdWNhZTRcdWNh'@;
put 'ZTVcdWNhZTZcdWNhZTdcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNhZThcdWNhZTlcdWNhZWFcdWNhZWJcdWNhZWRcdWNhZWVcdWNhZWZcdWNhZjBcdWNhZjFcdWNhZjJcdWNhZjNcdWNhZjVcdWNhZjZcdWNhZjdcdWNhZjhcdWNhZjlcdWNhZmFcdWNhZmJcdWNhZmNc'@;
put 'dWNhZmRcdWNhZmVcdWNhZmZcdWNiMDBcdWNiMDFcdWNiMDJcdWNiMDNcdWNiMDRcdWNiMDVcdWNiMDZcdWNiMDdcdWNiMDlcdWNiMGFcdTI1MDBcdTI1MDJcdTI1MGNcdTI1MTBcdTI1MThcdTI1MTRcdTI1MWNcdTI1MmNcdTI1MjRcdTI1MzRcdTI1M2NcdTI1MDFcdTI1MDNcdTI1MGZcdTI1'@;
put 'MTNcdTI1MWJcdTI1MTdcdTI1MjNcdTI1MzNcdTI1MmJcdTI1M2JcdTI1NGJcdTI1MjBcdTI1MmZcdTI1MjhcdTI1MzdcdTI1M2ZcdTI1MWRcdTI1MzBcdTI1MjVcdTI1MzhcdTI1NDJcdTI1MTJcdTI1MTFcdTI1MWFcdTI1MTlcdTI1MTZcdTI1MTVcdTI1MGVcdTI1MGRcdTI1MWVcdTI1MWZc'@;
put 'dTI1MjFcdTI1MjJcdTI1MjZcdTI1MjdcdTI1MjlcdTI1MmFcdTI1MmRcdTI1MmVcdTI1MzFcdTI1MzJcdTI1MzVcdTI1MzZcdTI1MzlcdTI1M2FcdTI1M2RcdTI1M2VcdTI1NDBcdTI1NDFcdTI1NDNcdTI1NDRcdTI1NDVcdTI1NDZcdTI1NDdcdTI1NDhcdTI1NDlcdTI1NGFcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxn'@;
put 'PTA7ZyE9X1sxNjZdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE2Nl1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxNjZdW2ddXT00MjQ5NitnLHlbNDI0OTYrZ109X1sxNjZdW2ddKTtmb3IoX1sxNjddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWNiMGJcdWNiMGNcdWNiMGRcdWNiMGVcdWNiMGZcdWNiMTFcdWNiMTJcdWNiMTNcdWNiMTVcdWNiMTZcdWNiMTdcdWNiMTlcdWNiMWFcdWNiMWJcdWNiMWNcdWNiMWRcdWNiMWVcdWNiMWZcdWNiMjJcdWNiMjNcdWNiMjRcdWNiMjVcdWNiMjZcdWNiMjdcdWNiMjhcdWNiMjlc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNiMmFcdWNiMmJcdWNiMmNcdWNiMmRcdWNiMmVcdWNiMmZcdWNiMzBcdWNiMzFcdWNiMzJcdWNiMzNcdWNiMzRcdWNiMzVcdWNiMzZcdWNiMzdcdWNiMzhcdWNiMzlcdWNiM2FcdWNiM2JcdWNiM2NcdWNiM2RcdWNiM2VcdWNi'@;
put 'M2ZcdWNiNDBcdWNiNDJcdWNiNDNcdWNiNDRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNiNDVcdWNiNDZcdWNiNDdcdWNiNGFcdWNiNGJcdWNiNGRcdWNiNGVcdWNiNGZcdWNiNTFcdWNiNTJcdWNiNTNcdWNiNTRcdWNiNTVcdWNiNTZcdWNiNTdcdWNiNWFcdWNiNWJc'@;
put 'dWNiNWNcdWNiNWVcdWNiNWZcdWNiNjBcdWNiNjFcdWNiNjJcdWNiNjNcdWNiNjVcdWNiNjZcdWNiNjdcdWNiNjhcdWNiNjlcdWNiNmFcdWNiNmJcdWNiNmNcdTMzOTVcdTMzOTZcdTMzOTdcdTIxMTNcdTMzOThcdTMzYzRcdTMzYTNcdTMzYTRcdTMzYTVcdTMzYTZcdTMzOTlcdTMzOWFcdTMz'@;
put 'OWJcdTMzOWNcdTMzOWRcdTMzOWVcdTMzOWZcdTMzYTBcdTMzYTFcdTMzYTJcdTMzY2FcdTMzOGRcdTMzOGVcdTMzOGZcdTMzY2ZcdTMzODhcdTMzODlcdTMzYzhcdTMzYTdcdTMzYThcdTMzYjBcdTMzYjFcdTMzYjJcdTMzYjNcdTMzYjRcdTMzYjVcdTMzYjZcdTMzYjdcdTMzYjhcdTMzYjlc'@;
put 'dTMzODBcdTMzODFcdTMzODJcdTMzODNcdTMzODRcdTMzYmFcdTMzYmJcdTMzYmNcdTMzYmRcdTMzYmVcdTMzYmZcdTMzOTBcdTMzOTFcdTMzOTJcdTMzOTNcdTMzOTRcdTIxMjZcdTMzYzBcdTMzYzFcdTMzOGFcdTMzOGJcdTMzOGNcdTMzZDZcdTMzYzVcdTMzYWRcdTMzYWVcdTMzYWZcdTMz'@;
put 'ZGJcdTMzYTlcdTMzYWFcdTMzYWJcdTMzYWNcdTMzZGRcdTMzZDBcdTMzZDNcdTMzYzNcdTMzYzlcdTMzZGNcdTMzYzZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQi'@;
put 'LnNwbGl0KCIiKSxnPTA7ZyE9X1sxNjddLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE2N11bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxNjddW2ddXT00Mjc1MitnLHlbNDI3NTIrZ109X1sxNjddW2ddKTtmb3IoX1sxNjhdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNiNmRcdWNiNmVcdWNiNmZcdWNiNzBcdWNiNzFcdWNiNzJcdWNiNzNcdWNiNzRcdWNiNzVcdWNiNzZcdWNiNzdcdWNiN2FcdWNiN2JcdWNiN2NcdWNiN2RcdWNiN2VcdWNiN2ZcdWNiODBcdWNiODFcdWNiODJcdWNiODNcdWNiODRcdWNiODVcdWNiODZc'@;
put 'dWNiODdcdWNiODhcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNiODlcdWNiOGFcdWNiOGJcdWNiOGNcdWNiOGRcdWNiOGVcdWNiOGZcdWNiOTBcdWNiOTFcdWNiOTJcdWNiOTNcdWNiOTRcdWNiOTVcdWNiOTZcdWNiOTdcdWNiOThcdWNiOTlcdWNiOWFcdWNiOWJcdWNi'@;
put 'OWRcdWNiOWVcdWNiOWZcdWNiYTBcdWNiYTFcdWNiYTJcdWNiYTNcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNiYTRcdWNiYTVcdWNiYTZcdWNiYTdcdWNiYThcdWNiYTlcdWNiYWFcdWNiYWJcdWNiYWNcdWNiYWRcdWNiYWVcdWNiYWZcdWNiYjBcdWNiYjFcdWNiYjJc'@;
put 'dWNiYjNcdWNiYjRcdWNiYjVcdWNiYjZcdWNiYjdcdWNiYjlcdWNiYmFcdWNiYmJcdWNiYmNcdWNiYmRcdWNiYmVcdWNiYmZcdWNiYzBcdWNiYzFcdWNiYzJcdWNiYzNcdWNiYzRceGM2XHhkMFx4YWFcdTAxMjZcdWZmZmRcdTAxMzJcdWZmZmRcdTAxM2ZcdTAxNDFceGQ4XHUwMTUyXHhiYVx4'@;
put 'ZGVcdTAxNjZcdTAxNGFcdWZmZmRcdTMyNjBcdTMyNjFcdTMyNjJcdTMyNjNcdTMyNjRcdTMyNjVcdTMyNjZcdTMyNjdcdTMyNjhcdTMyNjlcdTMyNmFcdTMyNmJcdTMyNmNcdTMyNmRcdTMyNmVcdTMyNmZcdTMyNzBcdTMyNzFcdTMyNzJcdTMyNzNcdTMyNzRcdTMyNzVcdTMyNzZcdTMyNzdc'@;
put 'dTMyNzhcdTMyNzlcdTMyN2FcdTMyN2JcdTI0ZDBcdTI0ZDFcdTI0ZDJcdTI0ZDNcdTI0ZDRcdTI0ZDVcdTI0ZDZcdTI0ZDdcdTI0ZDhcdTI0ZDlcdTI0ZGFcdTI0ZGJcdTI0ZGNcdTI0ZGRcdTI0ZGVcdTI0ZGZcdTI0ZTBcdTI0ZTFcdTI0ZTJcdTI0ZTNcdTI0ZTRcdTI0ZTVcdTI0ZTZcdTI0'@;
put 'ZTdcdTI0ZThcdTI0ZTlcdTI0NjBcdTI0NjFcdTI0NjJcdTI0NjNcdTI0NjRcdTI0NjVcdTI0NjZcdTI0NjdcdTI0NjhcdTI0NjlcdTI0NmFcdTI0NmJcdTI0NmNcdTI0NmRcdTI0NmVceGJkXHUyMTUzXHUyMTU0XHhiY1x4YmVcdTIxNWJcdTIxNWNcdTIxNWRcdTIxNWVcdWZmZmQiLnNwbGl0'@;
put 'KCIiKSxnPTA7ZyE9X1sxNjhdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE2OF1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxNjhdW2ddXT00MzAwOCtnLHlbNDMwMDgrZ109X1sxNjhdW2ddKTtmb3IoX1sxNjldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWNiYzVcdWNiYzZcdWNiYzdcdWNiYzhcdWNiYzlcdWNiY2FcdWNiY2JcdWNiY2NcdWNiY2RcdWNiY2VcdWNiY2ZcdWNiZDBcdWNiZDFcdWNiZDJcdWNiZDNcdWNiZDVcdWNiZDZcdWNiZDdcdWNiZDhcdWNiZDlcdWNiZGFcdWNiZGJcdWNiZGNcdWNiZGRcdWNiZGVc'@;
put 'dWNiZGZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNiZTBcdWNiZTFcdWNiZTJcdWNiZTNcdWNiZTVcdWNiZTZcdWNiZThcdWNiZWFcdWNiZWJcdWNiZWNcdWNiZWRcdWNiZWVcdWNiZWZcdWNiZjBcdWNiZjFcdWNiZjJcdWNiZjNcdWNiZjRcdWNiZjVcdWNiZjZcdWNi'@;
put 'ZjdcdWNiZjhcdWNiZjlcdWNiZmFcdWNiZmJcdWNiZmNcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNiZmRcdWNiZmVcdWNiZmZcdWNjMDBcdWNjMDFcdWNjMDJcdWNjMDNcdWNjMDRcdWNjMDVcdWNjMDZcdWNjMDdcdWNjMDhcdWNjMDlcdWNjMGFcdWNjMGJcdWNjMGVc'@;
put 'dWNjMGZcdWNjMTFcdWNjMTJcdWNjMTNcdWNjMTVcdWNjMTZcdWNjMTdcdWNjMThcdWNjMTlcdWNjMWFcdWNjMWJcdWNjMWVcdWNjMWZcdWNjMjBcdWNjMjNcdWNjMjRceGU2XHUwMTExXHhmMFx1MDEyN1x1MDEzMVx1MDEzM1x1MDEzOFx1MDE0MFx1MDE0Mlx4ZjhcdTAxNTNceGRmXHhmZVx1'@;
put 'MDE2N1x1MDE0Ylx1MDE0OVx1MzIwMFx1MzIwMVx1MzIwMlx1MzIwM1x1MzIwNFx1MzIwNVx1MzIwNlx1MzIwN1x1MzIwOFx1MzIwOVx1MzIwYVx1MzIwYlx1MzIwY1x1MzIwZFx1MzIwZVx1MzIwZlx1MzIxMFx1MzIxMVx1MzIxMlx1MzIxM1x1MzIxNFx1MzIxNVx1MzIxNlx1MzIxN1x1MzIx'@;
put 'OFx1MzIxOVx1MzIxYVx1MzIxYlx1MjQ5Y1x1MjQ5ZFx1MjQ5ZVx1MjQ5Zlx1MjRhMFx1MjRhMVx1MjRhMlx1MjRhM1x1MjRhNFx1MjRhNVx1MjRhNlx1MjRhN1x1MjRhOFx1MjRhOVx1MjRhYVx1MjRhYlx1MjRhY1x1MjRhZFx1MjRhZVx1MjRhZlx1MjRiMFx1MjRiMVx1MjRiMlx1MjRiM1x1'@;
put 'MjRiNFx1MjRiNVx1MjQ3NFx1MjQ3NVx1MjQ3Nlx1MjQ3N1x1MjQ3OFx1MjQ3OVx1MjQ3YVx1MjQ3Ylx1MjQ3Y1x1MjQ3ZFx1MjQ3ZVx1MjQ3Zlx1MjQ4MFx1MjQ4MVx1MjQ4Mlx4YjlceGIyXHhiM1x1MjA3NFx1MjA3Zlx1MjA4MVx1MjA4Mlx1MjA4M1x1MjA4NFx1ZmZmZCIuc3BsaXQoIiIp'@;
put 'LGc9MDtnIT1fWzE2OV0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTY5XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE2OV1bZ11dPTQzMjY0K2cseVs0MzI2NCtnXT1fWzE2OV1bZ10pO2ZvcihfWzE3MF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1Y2MyNVx1Y2MyNlx1Y2MyYVx1Y2MyYlx1Y2MyZFx1Y2MyZlx1Y2MzMVx1Y2MzMlx1Y2MzM1x1Y2MzNFx1Y2MzNVx1Y2MzNlx1Y2MzN1x1Y2MzYVx1Y2MzZlx1Y2M0MFx1Y2M0MVx1Y2M0Mlx1Y2M0M1x1Y2M0Nlx1Y2M0N1x1Y2M0OVx1Y2M0YVx1Y2M0Ylx1Y2M0ZFx1Y2M0'@;
put 'ZVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2M0Zlx1Y2M1MFx1Y2M1MVx1Y2M1Mlx1Y2M1M1x1Y2M1Nlx1Y2M1YVx1Y2M1Ylx1Y2M1Y1x1Y2M1ZFx1Y2M1ZVx1Y2M1Zlx1Y2M2MVx1Y2M2Mlx1Y2M2M1x1Y2M2NVx1Y2M2N1x1Y2M2OVx1Y2M2YVx1Y2M2Ylx1Y2M2Y1x1'@;
put 'Y2M2ZFx1Y2M2ZVx1Y2M2Zlx1Y2M3MVx1Y2M3Mlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2M3M1x1Y2M3NFx1Y2M3Nlx1Y2M3N1x1Y2M3OFx1Y2M3OVx1Y2M3YVx1Y2M3Ylx1Y2M3Y1x1Y2M3ZFx1Y2M3ZVx1Y2M3Zlx1Y2M4MFx1Y2M4MVx1Y2M4Mlx1Y2M4M1x1Y2M4'@;
put 'NFx1Y2M4NVx1Y2M4Nlx1Y2M4N1x1Y2M4OFx1Y2M4OVx1Y2M4YVx1Y2M4Ylx1Y2M4Y1x1Y2M4ZFx1Y2M4ZVx1Y2M4Zlx1Y2M5MFx1Y2M5MVx1Y2M5Mlx1Y2M5M1x1MzA0MVx1MzA0Mlx1MzA0M1x1MzA0NFx1MzA0NVx1MzA0Nlx1MzA0N1x1MzA0OFx1MzA0OVx1MzA0YVx1MzA0Ylx1MzA0Y1x1'@;
put 'MzA0ZFx1MzA0ZVx1MzA0Zlx1MzA1MFx1MzA1MVx1MzA1Mlx1MzA1M1x1MzA1NFx1MzA1NVx1MzA1Nlx1MzA1N1x1MzA1OFx1MzA1OVx1MzA1YVx1MzA1Ylx1MzA1Y1x1MzA1ZFx1MzA1ZVx1MzA1Zlx1MzA2MFx1MzA2MVx1MzA2Mlx1MzA2M1x1MzA2NFx1MzA2NVx1MzA2Nlx1MzA2N1x1MzA2'@;
put 'OFx1MzA2OVx1MzA2YVx1MzA2Ylx1MzA2Y1x1MzA2ZFx1MzA2ZVx1MzA2Zlx1MzA3MFx1MzA3MVx1MzA3Mlx1MzA3M1x1MzA3NFx1MzA3NVx1MzA3Nlx1MzA3N1x1MzA3OFx1MzA3OVx1MzA3YVx1MzA3Ylx1MzA3Y1x1MzA3ZFx1MzA3ZVx1MzA3Zlx1MzA4MFx1MzA4MVx1MzA4Mlx1MzA4M1x1'@;
put 'MzA4NFx1MzA4NVx1MzA4Nlx1MzA4N1x1MzA4OFx1MzA4OVx1MzA4YVx1MzA4Ylx1MzA4Y1x1MzA4ZFx1MzA4ZVx1MzA4Zlx1MzA5MFx1MzA5MVx1MzA5Mlx1MzA5M1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE3MF0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTcwXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE3MF1bZ11dPTQzNTIwK2cseVs0MzUyMCtnXT1fWzE3MF1bZ10pO2ZvcihfWzE3MV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2M5NFx1Y2M5NVx1Y2M5Nlx1Y2M5N1x1Y2M5YVx1Y2M5Ylx1Y2M5ZFx1Y2M5ZVx1Y2M5Zlx1Y2NhMVx1Y2NhMlx1Y2NhM1x1Y2NhNFx1Y2NhNVx1Y2NhNlx1Y2NhN1x1Y2NhYVx1Y2NhZVx1Y2NhZlx1Y2NiMFx1Y2NiMVx1Y2NiMlx1Y2NiM1x1Y2Ni'@;
put 'Nlx1Y2NiN1x1Y2NiOVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2NiYVx1Y2NiYlx1Y2NiZFx1Y2NiZVx1Y2NiZlx1Y2NjMFx1Y2NjMVx1Y2NjMlx1Y2NjM1x1Y2NjNlx1Y2NjOFx1Y2NjYVx1Y2NjYlx1Y2NjY1x1Y2NjZFx1Y2NjZVx1Y2NjZlx1Y2NkMVx1Y2NkMlx1'@;
put 'Y2NkM1x1Y2NkNVx1Y2NkNlx1Y2NkN1x1Y2NkOFx1Y2NkOVx1Y2NkYVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2NkYlx1Y2NkY1x1Y2NkZFx1Y2NkZVx1Y2NkZlx1Y2NlMFx1Y2NlMVx1Y2NlMlx1Y2NlM1x1Y2NlNVx1Y2NlNlx1Y2NlN1x1Y2NlOFx1Y2NlOVx1Y2Nl'@;
put 'YVx1Y2NlYlx1Y2NlZFx1Y2NlZVx1Y2NlZlx1Y2NmMVx1Y2NmMlx1Y2NmM1x1Y2NmNFx1Y2NmNVx1Y2NmNlx1Y2NmN1x1Y2NmOFx1Y2NmOVx1Y2NmYVx1Y2NmYlx1Y2NmY1x1Y2NmZFx1MzBhMVx1MzBhMlx1MzBhM1x1MzBhNFx1MzBhNVx1MzBhNlx1MzBhN1x1MzBhOFx1MzBhOVx1MzBhYVx1'@;
put 'MzBhYlx1MzBhY1x1MzBhZFx1MzBhZVx1MzBhZlx1MzBiMFx1MzBiMVx1MzBiMlx1MzBiM1x1MzBiNFx1MzBiNVx1MzBiNlx1MzBiN1x1MzBiOFx1MzBiOVx1MzBiYVx1MzBiYlx1MzBiY1x1MzBiZFx1MzBiZVx1MzBiZlx1MzBjMFx1MzBjMVx1MzBjMlx1MzBjM1x1MzBjNFx1MzBjNVx1MzBj'@;
put 'Nlx1MzBjN1x1MzBjOFx1MzBjOVx1MzBjYVx1MzBjYlx1MzBjY1x1MzBjZFx1MzBjZVx1MzBjZlx1MzBkMFx1MzBkMVx1MzBkMlx1MzBkM1x1MzBkNFx1MzBkNVx1MzBkNlx1MzBkN1x1MzBkOFx1MzBkOVx1MzBkYVx1MzBkYlx1MzBkY1x1MzBkZFx1MzBkZVx1MzBkZlx1MzBlMFx1MzBlMVx1'@;
put 'MzBlMlx1MzBlM1x1MzBlNFx1MzBlNVx1MzBlNlx1MzBlN1x1MzBlOFx1MzBlOVx1MzBlYVx1MzBlYlx1MzBlY1x1MzBlZFx1MzBlZVx1MzBlZlx1MzBmMFx1MzBmMVx1MzBmMlx1MzBmM1x1MzBmNFx1MzBmNVx1MzBmNlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE3MV0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTcxXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE3MV1bZ11dPTQzNzc2K2cseVs0Mzc3NitnXT1fWzE3MV1bZ10pO2ZvcihfWzE3Ml09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2NmZVx1Y2NmZlx1Y2QwMFx1Y2QwMlx1Y2QwM1x1Y2QwNFx1Y2QwNVx1Y2QwNlx1Y2QwN1x1Y2QwYVx1Y2QwYlx1Y2QwZFx1Y2QwZVx1Y2QwZlx1Y2QxMVx1Y2QxMlx1Y2QxM1x1Y2QxNFx1Y2QxNVx1Y2QxNlx1Y2QxN1x1Y2Qx'@;
put 'YVx1Y2QxY1x1Y2QxZVx1Y2QxZlx1Y2QyMFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2QyMVx1Y2QyMlx1Y2QyM1x1Y2QyNVx1Y2QyNlx1Y2QyN1x1Y2QyOVx1Y2QyYVx1Y2QyYlx1Y2QyZFx1Y2QyZVx1Y2QyZlx1Y2QzMFx1Y2QzMVx1Y2QzMlx1Y2QzM1x1Y2QzNFx1'@;
put 'Y2QzNVx1Y2QzNlx1Y2QzN1x1Y2QzOFx1Y2QzYVx1Y2QzYlx1Y2QzY1x1Y2QzZFx1Y2QzZVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2QzZlx1Y2Q0MFx1Y2Q0MVx1Y2Q0Mlx1Y2Q0M1x1Y2Q0NFx1Y2Q0NVx1Y2Q0Nlx1Y2Q0N1x1Y2Q0OFx1Y2Q0OVx1Y2Q0YVx1Y2Q0'@;
put 'Ylx1Y2Q0Y1x1Y2Q0ZFx1Y2Q0ZVx1Y2Q0Zlx1Y2Q1MFx1Y2Q1MVx1Y2Q1Mlx1Y2Q1M1x1Y2Q1NFx1Y2Q1NVx1Y2Q1Nlx1Y2Q1N1x1Y2Q1OFx1Y2Q1OVx1Y2Q1YVx1Y2Q1Ylx1Y2Q1ZFx1Y2Q1ZVx1Y2Q1Zlx1MDQxMFx1MDQxMVx1MDQxMlx1MDQxM1x1MDQxNFx1MDQxNVx1MDQwMVx1MDQxNlx1'@;
put 'MDQxN1x1MDQxOFx1MDQxOVx1MDQxYVx1MDQxYlx1MDQxY1x1MDQxZFx1MDQxZVx1MDQxZlx1MDQyMFx1MDQyMVx1MDQyMlx1MDQyM1x1MDQyNFx1MDQyNVx1MDQyNlx1MDQyN1x1MDQyOFx1MDQyOVx1MDQyYVx1MDQyYlx1MDQyY1x1MDQyZFx1MDQyZVx1MDQyZlx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MDQzMFx1MDQzMVx1MDQzMlx1MDQzM1x1MDQzNFx1MDQzNVx1MDQ1MVx1MDQzNlx1MDQzN1x1MDQzOFx1MDQzOVx1MDQzYVx1MDQzYlx1MDQzY1x1MDQzZFx1'@;
put 'MDQzZVx1MDQzZlx1MDQ0MFx1MDQ0MVx1MDQ0Mlx1MDQ0M1x1MDQ0NFx1MDQ0NVx1MDQ0Nlx1MDQ0N1x1MDQ0OFx1MDQ0OVx1MDQ0YVx1MDQ0Ylx1MDQ0Y1x1MDQ0ZFx1MDQ0ZVx1MDQ0Zlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE3Ml0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTcyXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE3Ml1bZ11dPTQ0MDMyK2cseVs0NDAzMitnXT1fWzE3Ml1bZ10pO2ZvcihfWzE3M109Ilx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2Q2MVx1Y2Q2Mlx1Y2Q2M1x1Y2Q2NVx1Y2Q2Nlx1Y2Q2N1x1Y2Q2OFx1Y2Q2OVx1Y2Q2YVx1Y2Q2Ylx1Y2Q2ZVx1Y2Q3MFx1Y2Q3Mlx1Y2Q3M1x1Y2Q3NFx1Y2Q3NVx1Y2Q3Nlx1Y2Q3N1x1Y2Q3OVx1Y2Q3'@;
put 'YVx1Y2Q3Ylx1Y2Q3Y1x1Y2Q3ZFx1Y2Q3ZVx1Y2Q3Zlx1Y2Q4MFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2Q4MVx1Y2Q4Mlx1Y2Q4M1x1Y2Q4NFx1Y2Q4NVx1Y2Q4Nlx1Y2Q4N1x1Y2Q4OVx1Y2Q4YVx1Y2Q4Ylx1Y2Q4Y1x1Y2Q4ZFx1Y2Q4ZVx1Y2Q4Zlx1Y2Q5MFx1'@;
put 'Y2Q5MVx1Y2Q5Mlx1Y2Q5M1x1Y2Q5Nlx1Y2Q5N1x1Y2Q5OVx1Y2Q5YVx1Y2Q5Ylx1Y2Q5ZFx1Y2Q5ZVx1Y2Q5Zlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2RhMFx1Y2RhMVx1Y2RhMlx1Y2RhM1x1Y2RhNlx1Y2RhOFx1Y2RhYVx1Y2RhYlx1Y2RhY1x1Y2RhZFx1Y2Rh'@;
put 'ZVx1Y2RhZlx1Y2RiMVx1Y2RiMlx1Y2RiM1x1Y2RiNFx1Y2RiNVx1Y2RiNlx1Y2RiN1x1Y2RiOFx1Y2RiOVx1Y2RiYVx1Y2RiYlx1Y2RiY1x1Y2RiZFx1Y2RiZVx1Y2RiZlx1Y2RjMFx1Y2RjMVx1Y2RjMlx1Y2RjM1x1Y2RjNVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE3M10ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTczXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE3M11bZ11dPTQ0Mjg4K2cseVs0NDI4OCtnXT1fWzE3M11bZ10pO2ZvcihfWzE3NF09Ilx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2RjNlx1Y2RjN1x1Y2RjOFx1Y2RjOVx1Y2RjYVx1Y2RjYlx1Y2RjZFx1Y2RjZVx1Y2RjZlx1Y2RkMVx1Y2RkMlx1Y2RkM1x1Y2RkNFx1Y2RkNVx1Y2RkNlx1Y2RkN1x1Y2RkOFx1Y2Rk'@;
put 'OVx1Y2RkYVx1Y2RkYlx1Y2RkY1x1Y2RkZFx1Y2RkZVx1Y2RkZlx1Y2RlMFx1Y2RlMVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2RlMlx1Y2RlM1x1Y2RlNFx1Y2RlNVx1Y2RlNlx1Y2RlN1x1Y2RlOVx1Y2RlYVx1Y2RlYlx1Y2RlZFx1Y2RlZVx1Y2RlZlx1Y2RmMVx1'@;
put 'Y2RmMlx1Y2RmM1x1Y2RmNFx1Y2RmNVx1Y2RmNlx1Y2RmN1x1Y2RmYVx1Y2RmY1x1Y2RmZVx1Y2RmZlx1Y2UwMFx1Y2UwMVx1Y2UwMlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2UwM1x1Y2UwNVx1Y2UwNlx1Y2UwN1x1Y2UwOVx1Y2UwYVx1Y2UwYlx1Y2UwZFx1Y2Uw'@;
put 'ZVx1Y2UwZlx1Y2UxMFx1Y2UxMVx1Y2UxMlx1Y2UxM1x1Y2UxNVx1Y2UxNlx1Y2UxN1x1Y2UxOFx1Y2UxYVx1Y2UxYlx1Y2UxY1x1Y2UxZFx1Y2UxZVx1Y2UxZlx1Y2UyMlx1Y2UyM1x1Y2UyNVx1Y2UyNlx1Y2UyN1x1Y2UyOVx1Y2UyYVx1Y2UyYlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE3NF0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTc0XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE3NF1bZ11dPTQ0NTQ0K2cseVs0NDU0NCtnXT1fWzE3NF1bZ10pO2Zv'@;
put 'cihfWzE3NV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2UyY1x1Y2UyZFx1Y2UyZVx1Y2UyZlx1Y2UzMlx1Y2UzNFx1Y2UzNlx1Y2UzN1x1Y2UzOFx1Y2UzOVx1Y2UzYVx1Y2UzYlx1Y2UzY1x1Y2UzZFx1Y2UzZVx1Y2Uz'@;
put 'Zlx1Y2U0MFx1Y2U0MVx1Y2U0Mlx1Y2U0M1x1Y2U0NFx1Y2U0NVx1Y2U0Nlx1Y2U0N1x1Y2U0OFx1Y2U0OVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2U0YVx1Y2U0Ylx1Y2U0Y1x1Y2U0ZFx1Y2U0ZVx1Y2U0Zlx1Y2U1MFx1Y2U1MVx1Y2U1Mlx1Y2U1M1x1Y2U1NFx1'@;
put 'Y2U1NVx1Y2U1Nlx1Y2U1N1x1Y2U1YVx1Y2U1Ylx1Y2U1ZFx1Y2U1ZVx1Y2U2Mlx1Y2U2M1x1Y2U2NFx1Y2U2NVx1Y2U2Nlx1Y2U2N1x1Y2U2YVx1Y2U2Y1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2U2ZVx1Y2U2Zlx1Y2U3MFx1Y2U3MVx1Y2U3Mlx1Y2U3M1x1Y2U3'@;
put 'Nlx1Y2U3N1x1Y2U3OVx1Y2U3YVx1Y2U3Ylx1Y2U3ZFx1Y2U3ZVx1Y2U3Zlx1Y2U4MFx1Y2U4MVx1Y2U4Mlx1Y2U4M1x1Y2U4Nlx1Y2U4OFx1Y2U4YVx1Y2U4Ylx1Y2U4Y1x1Y2U4ZFx1Y2U4ZVx1Y2U4Zlx1Y2U5Mlx1Y2U5M1x1Y2U5NVx1Y2U5Nlx1Y2U5N1x1Y2U5OVx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE3NV0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTc1XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE3NV1bZ11dPTQ0ODAwK2cseVs0NDgwMCtnXT1f'@;
put 'WzE3NV1bZ10pO2ZvcihfWzE3Nl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2U5YVx1Y2U5Ylx1Y2U5Y1x1Y2U5ZFx1Y2U5ZVx1Y2U5Zlx1Y2VhMlx1Y2VhNlx1Y2VhN1x1Y2VhOFx1Y2VhOVx1Y2VhYVx1Y2VhYlx1Y2Vh'@;
put 'ZVx1Y2VhZlx1Y2ViMFx1Y2ViMVx1Y2ViMlx1Y2ViM1x1Y2ViNFx1Y2ViNVx1Y2ViNlx1Y2ViN1x1Y2ViOFx1Y2ViOVx1Y2ViYVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2ViYlx1Y2ViY1x1Y2ViZFx1Y2ViZVx1Y2ViZlx1Y2VjMFx1Y2VjMlx1Y2VjM1x1Y2VjNFx1'@;
put 'Y2VjNVx1Y2VjNlx1Y2VjN1x1Y2VjOFx1Y2VjOVx1Y2VjYVx1Y2VjYlx1Y2VjY1x1Y2VjZFx1Y2VjZVx1Y2VjZlx1Y2VkMFx1Y2VkMVx1Y2VkMlx1Y2VkM1x1Y2VkNFx1Y2VkNVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2VkNlx1Y2VkN1x1Y2VkOFx1Y2VkOVx1Y2Vk'@;
put 'YVx1Y2VkYlx1Y2VkY1x1Y2VkZFx1Y2VkZVx1Y2VkZlx1Y2VlMFx1Y2VlMVx1Y2VlMlx1Y2VlM1x1Y2VlNlx1Y2VlN1x1Y2VlOVx1Y2VlYVx1Y2VlZFx1Y2VlZVx1Y2VlZlx1Y2VmMFx1Y2VmMVx1Y2VmMlx1Y2VmM1x1Y2VmNlx1Y2VmYVx1Y2VmYlx1Y2VmY1x1Y2VmZFx1Y2VmZVx1Y2VmZlx1'@;
put 'YWMwMFx1YWMwMVx1YWMwNFx1YWMwN1x1YWMwOFx1YWMwOVx1YWMwYVx1YWMxMFx1YWMxMVx1YWMxMlx1YWMxM1x1YWMxNFx1YWMxNVx1YWMxNlx1YWMxN1x1YWMxOVx1YWMxYVx1YWMxYlx1YWMxY1x1YWMxZFx1YWMyMFx1YWMyNFx1YWMyY1x1YWMyZFx1YWMyZlx1YWMzMFx1YWMzMVx1YWMz'@;
put 'OFx1YWMzOVx1YWMzY1x1YWM0MFx1YWM0Ylx1YWM0ZFx1YWM1NFx1YWM1OFx1YWM1Y1x1YWM3MFx1YWM3MVx1YWM3NFx1YWM3N1x1YWM3OFx1YWM3YVx1YWM4MFx1YWM4MVx1YWM4M1x1YWM4NFx1YWM4NVx1YWM4Nlx1YWM4OVx1YWM4YVx1YWM4Ylx1YWM4Y1x1YWM5MFx1YWM5NFx1YWM5Y1x1'@;
put 'YWM5ZFx1YWM5Zlx1YWNhMFx1YWNhMVx1YWNhOFx1YWNhOVx1YWNhYVx1YWNhY1x1YWNhZlx1YWNiMFx1YWNiOFx1YWNiOVx1YWNiYlx1YWNiY1x1YWNiZFx1YWNjMVx1YWNjNFx1YWNjOFx1YWNjY1x1YWNkNVx1YWNkN1x1YWNlMFx1YWNlMVx1YWNlNFx1YWNlN1x1YWNlOFx1YWNlYVx1YWNl'@;
put 'Y1x1YWNlZlx1YWNmMFx1YWNmMVx1YWNmM1x1YWNmNVx1YWNmNlx1YWNmY1x1YWNmZFx1YWQwMFx1YWQwNFx1YWQwNlx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE3Nl0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTc2XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE3Nl1bZ11dPTQ1MDU2K2cs'@;
put 'eVs0NTA1NitnXT1fWzE3Nl1bZ10pO2ZvcihfWzE3N109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2YwMlx1Y2YwM1x1Y2YwNVx1Y2YwNlx1Y2YwN1x1Y2YwOVx1Y2YwYVx1Y2YwYlx1Y2YwY1x1Y2YwZFx1Y2YwZVx1Y2Yw'@;
put 'Zlx1Y2YxMlx1Y2YxNFx1Y2YxNlx1Y2YxN1x1Y2YxOFx1Y2YxOVx1Y2YxYVx1Y2YxYlx1Y2YxZFx1Y2YxZVx1Y2YxZlx1Y2YyMVx1Y2YyMlx1Y2YyM1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2YyNVx1Y2YyNlx1Y2YyN1x1Y2YyOFx1Y2YyOVx1Y2YyYVx1Y2YyYlx1'@;
put 'Y2YyZVx1Y2YzMlx1Y2YzM1x1Y2YzNFx1Y2YzNVx1Y2YzNlx1Y2YzN1x1Y2YzOVx1Y2YzYVx1Y2YzYlx1Y2YzY1x1Y2YzZFx1Y2YzZVx1Y2YzZlx1Y2Y0MFx1Y2Y0MVx1Y2Y0Mlx1Y2Y0M1x1Y2Y0NFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2Y0NVx1Y2Y0Nlx1Y2Y0'@;
put 'N1x1Y2Y0OFx1Y2Y0OVx1Y2Y0YVx1Y2Y0Ylx1Y2Y0Y1x1Y2Y0ZFx1Y2Y0ZVx1Y2Y0Zlx1Y2Y1MFx1Y2Y1MVx1Y2Y1Mlx1Y2Y1M1x1Y2Y1Nlx1Y2Y1N1x1Y2Y1OVx1Y2Y1YVx1Y2Y1Ylx1Y2Y1ZFx1Y2Y1ZVx1Y2Y1Zlx1Y2Y2MFx1Y2Y2MVx1Y2Y2Mlx1Y2Y2M1x1Y2Y2Nlx1Y2Y2OFx1Y2Y2YVx1'@;
put 'Y2Y2Ylx1Y2Y2Y1x1YWQwY1x1YWQwZFx1YWQwZlx1YWQxMVx1YWQxOFx1YWQxY1x1YWQyMFx1YWQyOVx1YWQyY1x1YWQyZFx1YWQzNFx1YWQzNVx1YWQzOFx1YWQzY1x1YWQ0NFx1YWQ0NVx1YWQ0N1x1YWQ0OVx1YWQ1MFx1YWQ1NFx1YWQ1OFx1YWQ2MVx1YWQ2M1x1YWQ2Y1x1YWQ2ZFx1YWQ3'@;
put 'MFx1YWQ3M1x1YWQ3NFx1YWQ3NVx1YWQ3Nlx1YWQ3Ylx1YWQ3Y1x1YWQ3ZFx1YWQ3Zlx1YWQ4MVx1YWQ4Mlx1YWQ4OFx1YWQ4OVx1YWQ4Y1x1YWQ5MFx1YWQ5Y1x1YWQ5ZFx1YWRhNFx1YWRiN1x1YWRjMFx1YWRjMVx1YWRjNFx1YWRjOFx1YWRkMFx1YWRkMVx1YWRkM1x1YWRkY1x1YWRlMFx1'@;
put 'YWRlNFx1YWRmOFx1YWRmOVx1YWRmY1x1YWRmZlx1YWUwMFx1YWUwMVx1YWUwOFx1YWUwOVx1YWUwYlx1YWUwZFx1YWUxNFx1YWUzMFx1YWUzMVx1YWUzNFx1YWUzN1x1YWUzOFx1YWUzYVx1YWU0MFx1YWU0MVx1YWU0M1x1YWU0NVx1YWU0Nlx1YWU0YVx1YWU0Y1x1YWU0ZFx1YWU0ZVx1YWU1'@;
put 'MFx1YWU1NFx1YWU1Nlx1YWU1Y1x1YWU1ZFx1YWU1Zlx1YWU2MFx1YWU2MVx1YWU2NVx1YWU2OFx1YWU2OVx1YWU2Y1x1YWU3MFx1YWU3OFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE3N10ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTc3XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE3N11b'@;
put 'Z11dPTQ1MzEyK2cseVs0NTMxMitnXT1fWzE3N11bZ10pO2ZvcihfWzE3OF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2Y2ZFx1Y2Y2ZVx1Y2Y2Zlx1Y2Y3Mlx1Y2Y3M1x1Y2Y3NVx1Y2Y3Nlx1Y2Y3N1x1Y2Y3OVx1Y2Y3'@;
put 'YVx1Y2Y3Ylx1Y2Y3Y1x1Y2Y3ZFx1Y2Y3ZVx1Y2Y3Zlx1Y2Y4MVx1Y2Y4Mlx1Y2Y4M1x1Y2Y4NFx1Y2Y4Nlx1Y2Y4N1x1Y2Y4OFx1Y2Y4OVx1Y2Y4YVx1Y2Y4Ylx1Y2Y4ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2Y4ZVx1Y2Y4Zlx1Y2Y5MFx1Y2Y5MVx1Y2Y5Mlx1'@;
put 'Y2Y5M1x1Y2Y5NFx1Y2Y5NVx1Y2Y5Nlx1Y2Y5N1x1Y2Y5OFx1Y2Y5OVx1Y2Y5YVx1Y2Y5Ylx1Y2Y5Y1x1Y2Y5ZFx1Y2Y5ZVx1Y2Y5Zlx1Y2ZhMFx1Y2ZhMlx1Y2ZhM1x1Y2ZhNFx1Y2ZhNVx1Y2ZhNlx1Y2ZhN1x1Y2ZhOVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2Zh'@;
put 'YVx1Y2ZhYlx1Y2ZhY1x1Y2ZhZFx1Y2ZhZVx1Y2ZhZlx1Y2ZiMVx1Y2ZiMlx1Y2ZiM1x1Y2ZiNFx1Y2ZiNVx1Y2ZiNlx1Y2ZiN1x1Y2ZiOFx1Y2ZiOVx1Y2ZiYVx1Y2ZiYlx1Y2ZiY1x1Y2ZiZFx1Y2ZiZVx1Y2ZiZlx1Y2ZjMFx1Y2ZjMVx1Y2ZjMlx1Y2ZjM1x1Y2ZjNVx1Y2ZjNlx1Y2ZjN1x1'@;
put 'Y2ZjOFx1Y2ZjOVx1Y2ZjYVx1Y2ZjYlx1YWU3OVx1YWU3Ylx1YWU3Y1x1YWU3ZFx1YWU4NFx1YWU4NVx1YWU4Y1x1YWViY1x1YWViZFx1YWViZVx1YWVjMFx1YWVjNFx1YWVjY1x1YWVjZFx1YWVjZlx1YWVkMFx1YWVkMVx1YWVkOFx1YWVkOVx1YWVkY1x1YWVlOFx1YWVlYlx1YWVlZFx1YWVm'@;
put 'NFx1YWVmOFx1YWVmY1x1YWYwN1x1YWYwOFx1YWYwZFx1YWYxMFx1YWYyY1x1YWYyZFx1YWYzMFx1YWYzMlx1YWYzNFx1YWYzY1x1YWYzZFx1YWYzZlx1YWY0MVx1YWY0Mlx1YWY0M1x1YWY0OFx1YWY0OVx1YWY1MFx1YWY1Y1x1YWY1ZFx1YWY2NFx1YWY2NVx1YWY3OVx1YWY4MFx1YWY4NFx1'@;
put 'YWY4OFx1YWY5MFx1YWY5MVx1YWY5NVx1YWY5Y1x1YWZiOFx1YWZiOVx1YWZiY1x1YWZjMFx1YWZjN1x1YWZjOFx1YWZjOVx1YWZjYlx1YWZjZFx1YWZjZVx1YWZkNFx1YWZkY1x1YWZlOFx1YWZlOVx1YWZmMFx1YWZmMVx1YWZmNFx1YWZmOFx1YjAwMFx1YjAwMVx1YjAwNFx1YjAwY1x1YjAx'@;
put 'MFx1YjAxNFx1YjAxY1x1YjAxZFx1YjAyOFx1YjA0NFx1YjA0NVx1YjA0OFx1YjA0YVx1YjA0Y1x1YjA0ZVx1YjA1M1x1YjA1NFx1YjA1NVx1YjA1N1x1YjA1OVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE3OF0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTc4XVtnXS5jaGFyQ29kZUF0KDAp'@;
put 'JiYoSVtfWzE3OF1bZ11dPTQ1NTY4K2cseVs0NTU2OCtnXT1fWzE3OF1bZ10pO2ZvcihfWzE3OV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2ZjY1x1Y2ZjZFx1Y2ZjZVx1Y2ZjZlx1Y2ZkMFx1Y2ZkMVx1Y2ZkMlx1Y2Zk'@;
put 'M1x1Y2ZkNFx1Y2ZkNVx1Y2ZkNlx1Y2ZkN1x1Y2ZkOFx1Y2ZkOVx1Y2ZkYVx1Y2ZkYlx1Y2ZkY1x1Y2ZkZFx1Y2ZkZVx1Y2ZkZlx1Y2ZlMlx1Y2ZlM1x1Y2ZlNVx1Y2ZlNlx1Y2ZlN1x1Y2ZlOVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2ZlYVx1Y2ZlYlx1Y2ZlY1x1'@;
put 'Y2ZlZFx1Y2ZlZVx1Y2ZlZlx1Y2ZmMlx1Y2ZmNFx1Y2ZmNlx1Y2ZmN1x1Y2ZmOFx1Y2ZmOVx1Y2ZmYVx1Y2ZmYlx1Y2ZmZFx1Y2ZmZVx1Y2ZmZlx1ZDAwMVx1ZDAwMlx1ZDAwM1x1ZDAwNVx1ZDAwNlx1ZDAwN1x1ZDAwOFx1ZDAwOVx1ZDAwYVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZDAwYlx1ZDAwY1x1ZDAwZFx1ZDAwZVx1ZDAwZlx1ZDAxMFx1ZDAxMlx1ZDAxM1x1ZDAxNFx1ZDAxNVx1ZDAxNlx1ZDAxN1x1ZDAxOVx1ZDAxYVx1ZDAxYlx1ZDAxY1x1ZDAxZFx1ZDAxZVx1ZDAxZlx1ZDAyMFx1ZDAyMVx1ZDAyMlx1ZDAyM1x1ZDAyNFx1ZDAyNVx1ZDAyNlx1'@;
put 'ZDAyN1x1ZDAyOFx1ZDAyOVx1ZDAyYVx1ZDAyYlx1ZDAyY1x1YjA1ZFx1YjA3Y1x1YjA3ZFx1YjA4MFx1YjA4NFx1YjA4Y1x1YjA4ZFx1YjA4Zlx1YjA5MVx1YjA5OFx1YjA5OVx1YjA5YVx1YjA5Y1x1YjA5Zlx1YjBhMFx1YjBhMVx1YjBhMlx1YjBhOFx1YjBhOVx1YjBhYlx1YjBhY1x1YjBh'@;
put 'ZFx1YjBhZVx1YjBhZlx1YjBiMVx1YjBiM1x1YjBiNFx1YjBiNVx1YjBiOFx1YjBiY1x1YjBjNFx1YjBjNVx1YjBjN1x1YjBjOFx1YjBjOVx1YjBkMFx1YjBkMVx1YjBkNFx1YjBkOFx1YjBlMFx1YjBlNVx1YjEwOFx1YjEwOVx1YjEwYlx1YjEwY1x1YjExMFx1YjExMlx1YjExM1x1YjExOFx1'@;
put 'YjExOVx1YjExYlx1YjExY1x1YjExZFx1YjEyM1x1YjEyNFx1YjEyNVx1YjEyOFx1YjEyY1x1YjEzNFx1YjEzNVx1YjEzN1x1YjEzOFx1YjEzOVx1YjE0MFx1YjE0MVx1YjE0NFx1YjE0OFx1YjE1MFx1YjE1MVx1YjE1NFx1YjE1NVx1YjE1OFx1YjE1Y1x1YjE2MFx1YjE3OFx1YjE3OVx1YjE3'@;
put 'Y1x1YjE4MFx1YjE4Mlx1YjE4OFx1YjE4OVx1YjE4Ylx1YjE4ZFx1YjE5Mlx1YjE5M1x1YjE5NFx1YjE5OFx1YjE5Y1x1YjFhOFx1YjFjY1x1YjFkMFx1YjFkNFx1YjFkY1x1YjFkZFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE3OV0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTc5XVtnXS5j'@;
put 'aGFyQ29kZUF0KDApJiYoSVtfWzE3OV1bZ11dPTQ1ODI0K2cseVs0NTgyNCtnXT1fWzE3OV1bZ10pO2ZvcihfWzE4MF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDAyZVx1ZDAyZlx1ZDAzMFx1ZDAzMVx1ZDAzMlx1ZDAz'@;
put 'M1x1ZDAzNlx1ZDAzN1x1ZDAzOVx1ZDAzYVx1ZDAzYlx1ZDAzZFx1ZDAzZVx1ZDAzZlx1ZDA0MFx1ZDA0MVx1ZDA0Mlx1ZDA0M1x1ZDA0Nlx1ZDA0OFx1ZDA0YVx1ZDA0Ylx1ZDA0Y1x1ZDA0ZFx1ZDA0ZVx1ZDA0Zlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDA1MVx1'@;
put 'ZDA1Mlx1ZDA1M1x1ZDA1NVx1ZDA1Nlx1ZDA1N1x1ZDA1OVx1ZDA1YVx1ZDA1Ylx1ZDA1Y1x1ZDA1ZFx1ZDA1ZVx1ZDA1Zlx1ZDA2MVx1ZDA2Mlx1ZDA2M1x1ZDA2NFx1ZDA2NVx1ZDA2Nlx1ZDA2N1x1ZDA2OFx1ZDA2OVx1ZDA2YVx1ZDA2Ylx1ZDA2ZVx1ZDA2Zlx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDA3MVx1ZDA3Mlx1ZDA3M1x1ZDA3NVx1ZDA3Nlx1ZDA3N1x1ZDA3OFx1ZDA3OVx1ZDA3YVx1ZDA3Ylx1ZDA3ZVx1ZDA3Zlx1ZDA4MFx1ZDA4Mlx1ZDA4M1x1ZDA4NFx1ZDA4NVx1ZDA4Nlx1ZDA4N1x1ZDA4OFx1ZDA4OVx1ZDA4YVx1ZDA4Ylx1ZDA4Y1x1'@;
put 'ZDA4ZFx1ZDA4ZVx1ZDA4Zlx1ZDA5MFx1ZDA5MVx1ZDA5Mlx1ZDA5M1x1ZDA5NFx1YjFkZlx1YjFlOFx1YjFlOVx1YjFlY1x1YjFmMFx1YjFmOVx1YjFmYlx1YjFmZFx1YjIwNFx1YjIwNVx1YjIwOFx1YjIwYlx1YjIwY1x1YjIxNFx1YjIxNVx1YjIxN1x1YjIxOVx1YjIyMFx1YjIzNFx1YjIz'@;
put 'Y1x1YjI1OFx1YjI1Y1x1YjI2MFx1YjI2OFx1YjI2OVx1YjI3NFx1YjI3NVx1YjI3Y1x1YjI4NFx1YjI4NVx1YjI4OVx1YjI5MFx1YjI5MVx1YjI5NFx1YjI5OFx1YjI5OVx1YjI5YVx1YjJhMFx1YjJhMVx1YjJhM1x1YjJhNVx1YjJhNlx1YjJhYVx1YjJhY1x1YjJiMFx1YjJiNFx1YjJjOFx1'@;
put 'YjJjOVx1YjJjY1x1YjJkMFx1YjJkMlx1YjJkOFx1YjJkOVx1YjJkYlx1YjJkZFx1YjJlMlx1YjJlNFx1YjJlNVx1YjJlNlx1YjJlOFx1YjJlYlx1YjJlY1x1YjJlZFx1YjJlZVx1YjJlZlx1YjJmM1x1YjJmNFx1YjJmNVx1YjJmN1x1YjJmOFx1YjJmOVx1YjJmYVx1YjJmYlx1YjJmZlx1YjMw'@;
put 'MFx1YjMwMVx1YjMwNFx1YjMwOFx1YjMxMFx1YjMxMVx1YjMxM1x1YjMxNFx1YjMxNVx1YjMxY1x1YjM1NFx1YjM1NVx1YjM1Nlx1YjM1OFx1YjM1Ylx1YjM1Y1x1YjM1ZVx1YjM1Zlx1YjM2NFx1YjM2NVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE4MF0ubGVuZ3RoOysrZyk2NTUzMyE9'@;
put 'PV9bMTgwXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE4MF1bZ11dPTQ2MDgwK2cseVs0NjA4MCtnXT1fWzE4MF1bZ10pO2ZvcihfWzE4MV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDA5NVx1ZDA5Nlx1ZDA5N1x1ZDA5'@;
put 'OFx1ZDA5OVx1ZDA5YVx1ZDA5Ylx1ZDA5Y1x1ZDA5ZFx1ZDA5ZVx1ZDA5Zlx1ZDBhMFx1ZDBhMVx1ZDBhMlx1ZDBhM1x1ZDBhNlx1ZDBhN1x1ZDBhOVx1ZDBhYVx1ZDBhYlx1ZDBhZFx1ZDBhZVx1ZDBhZlx1ZDBiMFx1ZDBiMVx1ZDBiMlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZDBiM1x1ZDBiNlx1ZDBiOFx1ZDBiYVx1ZDBiYlx1ZDBiY1x1ZDBiZFx1ZDBiZVx1ZDBiZlx1ZDBjMlx1ZDBjM1x1ZDBjNVx1ZDBjNlx1ZDBjN1x1ZDBjYVx1ZDBjYlx1ZDBjY1x1ZDBjZFx1ZDBjZVx1ZDBjZlx1ZDBkMlx1ZDBkNlx1ZDBkN1x1ZDBkOFx1ZDBkOVx1ZDBkYVx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDBkYlx1ZDBkZVx1ZDBkZlx1ZDBlMVx1ZDBlMlx1ZDBlM1x1ZDBlNVx1ZDBlNlx1ZDBlN1x1ZDBlOFx1ZDBlOVx1ZDBlYVx1ZDBlYlx1ZDBlZVx1ZDBmMlx1ZDBmM1x1ZDBmNFx1ZDBmNVx1ZDBmNlx1ZDBmN1x1ZDBmOVx1ZDBmYVx1'@;
put 'ZDBmYlx1ZDBmY1x1ZDBmZFx1ZDBmZVx1ZDBmZlx1ZDEwMFx1ZDEwMVx1ZDEwMlx1ZDEwM1x1ZDEwNFx1YjM2N1x1YjM2OVx1YjM2Ylx1YjM2ZVx1YjM3MFx1YjM3MVx1YjM3NFx1YjM3OFx1YjM4MFx1YjM4MVx1YjM4M1x1YjM4NFx1YjM4NVx1YjM4Y1x1YjM5MFx1YjM5NFx1YjNhMFx1YjNh'@;
put 'MVx1YjNhOFx1YjNhY1x1YjNjNFx1YjNjNVx1YjNjOFx1YjNjYlx1YjNjY1x1YjNjZVx1YjNkMFx1YjNkNFx1YjNkNVx1YjNkN1x1YjNkOVx1YjNkYlx1YjNkZFx1YjNlMFx1YjNlNFx1YjNlOFx1YjNmY1x1YjQxMFx1YjQxOFx1YjQxY1x1YjQyMFx1YjQyOFx1YjQyOVx1YjQyYlx1YjQzNFx1'@;
put 'YjQ1MFx1YjQ1MVx1YjQ1NFx1YjQ1OFx1YjQ2MFx1YjQ2MVx1YjQ2M1x1YjQ2NVx1YjQ2Y1x1YjQ4MFx1YjQ4OFx1YjQ5ZFx1YjRhNFx1YjRhOFx1YjRhY1x1YjRiNVx1YjRiN1x1YjRiOVx1YjRjMFx1YjRjNFx1YjRjOFx1YjRkMFx1YjRkNVx1YjRkY1x1YjRkZFx1YjRlMFx1YjRlM1x1YjRl'@;
put 'NFx1YjRlNlx1YjRlY1x1YjRlZFx1YjRlZlx1YjRmMVx1YjRmOFx1YjUxNFx1YjUxNVx1YjUxOFx1YjUxYlx1YjUxY1x1YjUyNFx1YjUyNVx1YjUyN1x1YjUyOFx1YjUyOVx1YjUyYVx1YjUzMFx1YjUzMVx1YjUzNFx1YjUzOFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE4MV0ubGVuZ3Ro'@;
put 'OysrZyk2NTUzMyE9PV9bMTgxXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE4MV1bZ11dPTQ2MzM2K2cseVs0NjMzNitnXT1fWzE4MV1bZ10pO2ZvcihfWzE4Ml09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDEwNVx1ZDEw'@;
put 'Nlx1ZDEwN1x1ZDEwOFx1ZDEwOVx1ZDEwYVx1ZDEwYlx1ZDEwY1x1ZDEwZVx1ZDEwZlx1ZDExMFx1ZDExMVx1ZDExMlx1ZDExM1x1ZDExNFx1ZDExNVx1ZDExNlx1ZDExN1x1ZDExOFx1ZDExOVx1ZDExYVx1ZDExYlx1ZDExY1x1ZDExZFx1ZDExZVx1ZDExZlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDEyMFx1ZDEyMVx1ZDEyMlx1ZDEyM1x1ZDEyNFx1ZDEyNVx1ZDEyNlx1ZDEyN1x1ZDEyOFx1ZDEyOVx1ZDEyYVx1ZDEyYlx1ZDEyY1x1ZDEyZFx1ZDEyZVx1ZDEyZlx1ZDEzMlx1ZDEzM1x1ZDEzNVx1ZDEzNlx1ZDEzN1x1ZDEzOVx1ZDEzYlx1ZDEzY1x1ZDEz'@;
put 'ZFx1ZDEzZVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDEzZlx1ZDE0Mlx1ZDE0Nlx1ZDE0N1x1ZDE0OFx1ZDE0OVx1ZDE0YVx1ZDE0Ylx1ZDE0ZVx1ZDE0Zlx1ZDE1MVx1ZDE1Mlx1ZDE1M1x1ZDE1NVx1ZDE1Nlx1ZDE1N1x1ZDE1OFx1ZDE1OVx1ZDE1YVx1ZDE1Ylx1'@;
put 'ZDE1ZVx1ZDE2MFx1ZDE2Mlx1ZDE2M1x1ZDE2NFx1ZDE2NVx1ZDE2Nlx1ZDE2N1x1ZDE2OVx1ZDE2YVx1ZDE2Ylx1ZDE2ZFx1YjU0MFx1YjU0MVx1YjU0M1x1YjU0NFx1YjU0NVx1YjU0Ylx1YjU0Y1x1YjU0ZFx1YjU1MFx1YjU1NFx1YjU1Y1x1YjU1ZFx1YjU1Zlx1YjU2MFx1YjU2MVx1YjVh'@;
put 'MFx1YjVhMVx1YjVhNFx1YjVhOFx1YjVhYVx1YjVhYlx1YjViMFx1YjViMVx1YjViM1x1YjViNFx1YjViNVx1YjViYlx1YjViY1x1YjViZFx1YjVjMFx1YjVjNFx1YjVjY1x1YjVjZFx1YjVjZlx1YjVkMFx1YjVkMVx1YjVkOFx1YjVlY1x1YjYxMFx1YjYxMVx1YjYxNFx1YjYxOFx1YjYyNVx1'@;
put 'YjYyY1x1YjYzNFx1YjY0OFx1YjY2NFx1YjY2OFx1YjY5Y1x1YjY5ZFx1YjZhMFx1YjZhNFx1YjZhYlx1YjZhY1x1YjZiMVx1YjZkNFx1YjZmMFx1YjZmNFx1YjZmOFx1YjcwMFx1YjcwMVx1YjcwNVx1YjcyOFx1YjcyOVx1YjcyY1x1YjcyZlx1YjczMFx1YjczOFx1YjczOVx1YjczYlx1Yjc0'@;
put 'NFx1Yjc0OFx1Yjc0Y1x1Yjc1NFx1Yjc1NVx1Yjc2MFx1Yjc2NFx1Yjc2OFx1Yjc3MFx1Yjc3MVx1Yjc3M1x1Yjc3NVx1Yjc3Y1x1Yjc3ZFx1Yjc4MFx1Yjc4NFx1Yjc4Y1x1Yjc4ZFx1Yjc4Zlx1Yjc5MFx1Yjc5MVx1Yjc5Mlx1Yjc5Nlx1Yjc5N1x1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1f'@;
put 'WzE4Ml0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTgyXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE4Ml1bZ11dPTQ2NTkyK2cseVs0NjU5MitnXT1fWzE4Ml1bZ10pO2ZvcihfWzE4M109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZDE2ZVx1ZDE2Zlx1ZDE3MFx1ZDE3MVx1ZDE3Mlx1ZDE3M1x1ZDE3NFx1ZDE3NVx1ZDE3Nlx1ZDE3N1x1ZDE3OFx1ZDE3OVx1ZDE3YVx1ZDE3Ylx1ZDE3ZFx1ZDE3ZVx1ZDE3Zlx1ZDE4MFx1ZDE4MVx1ZDE4Mlx1ZDE4M1x1ZDE4NVx1ZDE4Nlx1ZDE4N1x1ZDE4OVx1ZDE4YVx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDE4Ylx1ZDE4Y1x1ZDE4ZFx1ZDE4ZVx1ZDE4Zlx1ZDE5MFx1ZDE5MVx1ZDE5Mlx1ZDE5M1x1ZDE5NFx1ZDE5NVx1ZDE5Nlx1ZDE5N1x1ZDE5OFx1ZDE5OVx1ZDE5YVx1ZDE5Ylx1ZDE5Y1x1ZDE5ZFx1ZDE5ZVx1ZDE5Zlx1ZDFhMlx1ZDFh'@;
put 'M1x1ZDFhNVx1ZDFhNlx1ZDFhN1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDFhOVx1ZDFhYVx1ZDFhYlx1ZDFhY1x1ZDFhZFx1ZDFhZVx1ZDFhZlx1ZDFiMlx1ZDFiNFx1ZDFiNlx1ZDFiN1x1ZDFiOFx1ZDFiOVx1ZDFiYlx1ZDFiZFx1ZDFiZVx1ZDFiZlx1ZDFjMVx1'@;
put 'ZDFjMlx1ZDFjM1x1ZDFjNFx1ZDFjNVx1ZDFjNlx1ZDFjN1x1ZDFjOFx1ZDFjOVx1ZDFjYVx1ZDFjYlx1ZDFjY1x1ZDFjZFx1ZDFjZVx1ZDFjZlx1Yjc5OFx1Yjc5OVx1Yjc5Y1x1YjdhMFx1YjdhOFx1YjdhOVx1YjdhYlx1YjdhY1x1YjdhZFx1YjdiNFx1YjdiNVx1YjdiOFx1YjdjN1x1Yjdj'@;
put 'OVx1YjdlY1x1YjdlZFx1YjdmMFx1YjdmNFx1YjdmY1x1YjdmZFx1YjdmZlx1YjgwMFx1YjgwMVx1YjgwN1x1YjgwOFx1YjgwOVx1YjgwY1x1YjgxMFx1YjgxOFx1YjgxOVx1YjgxYlx1YjgxZFx1YjgyNFx1YjgyNVx1YjgyOFx1YjgyY1x1YjgzNFx1YjgzNVx1YjgzN1x1YjgzOFx1YjgzOVx1'@;
put 'Yjg0MFx1Yjg0NFx1Yjg1MVx1Yjg1M1x1Yjg1Y1x1Yjg1ZFx1Yjg2MFx1Yjg2NFx1Yjg2Y1x1Yjg2ZFx1Yjg2Zlx1Yjg3MVx1Yjg3OFx1Yjg3Y1x1Yjg4ZFx1YjhhOFx1YjhiMFx1YjhiNFx1YjhiOFx1YjhjMFx1YjhjMVx1YjhjM1x1YjhjNVx1YjhjY1x1YjhkMFx1YjhkNFx1YjhkZFx1Yjhk'@;
put 'Zlx1YjhlMVx1YjhlOFx1YjhlOVx1YjhlY1x1YjhmMFx1YjhmOFx1YjhmOVx1YjhmYlx1YjhmZFx1YjkwNFx1YjkxOFx1YjkyMFx1YjkzY1x1YjkzZFx1Yjk0MFx1Yjk0NFx1Yjk0Y1x1Yjk0Zlx1Yjk1MVx1Yjk1OFx1Yjk1OVx1Yjk1Y1x1Yjk2MFx1Yjk2OFx1Yjk2OVx1ZmZmZCIuc3BsaXQo'@;
put 'IiIpLGc9MDtnIT1fWzE4M10ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTgzXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE4M11bZ11dPTQ2ODQ4K2cseVs0Njg0OCtnXT1fWzE4M11bZ10pO2ZvcihfWzE4NF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZDFkMFx1ZDFkMVx1ZDFkMlx1ZDFkM1x1ZDFkNFx1ZDFkNVx1ZDFkNlx1ZDFkN1x1ZDFkOVx1ZDFkYVx1ZDFkYlx1ZDFkY1x1ZDFkZFx1ZDFkZVx1ZDFkZlx1ZDFlMFx1ZDFlMVx1ZDFlMlx1ZDFlM1x1ZDFlNFx1ZDFlNVx1ZDFlNlx1ZDFlN1x1ZDFlOFx1ZDFlOVx1'@;
put 'ZDFlYVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDFlYlx1ZDFlY1x1ZDFlZFx1ZDFlZVx1ZDFlZlx1ZDFmMFx1ZDFmMVx1ZDFmMlx1ZDFmM1x1ZDFmNVx1ZDFmNlx1ZDFmN1x1ZDFmOVx1ZDFmYVx1ZDFmYlx1ZDFmY1x1ZDFmZFx1ZDFmZVx1ZDFmZlx1ZDIwMFx1ZDIw'@;
put 'MVx1ZDIwMlx1ZDIwM1x1ZDIwNFx1ZDIwNVx1ZDIwNlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDIwOFx1ZDIwYVx1ZDIwYlx1ZDIwY1x1ZDIwZFx1ZDIwZVx1ZDIwZlx1ZDIxMVx1ZDIxMlx1ZDIxM1x1ZDIxNFx1ZDIxNVx1ZDIxNlx1ZDIxN1x1ZDIxOFx1ZDIxOVx1'@;
put 'ZDIxYVx1ZDIxYlx1ZDIxY1x1ZDIxZFx1ZDIxZVx1ZDIxZlx1ZDIyMFx1ZDIyMVx1ZDIyMlx1ZDIyM1x1ZDIyNFx1ZDIyNVx1ZDIyNlx1ZDIyN1x1ZDIyOFx1ZDIyOVx1Yjk2Ylx1Yjk2ZFx1Yjk3NFx1Yjk3NVx1Yjk3OFx1Yjk3Y1x1Yjk4NFx1Yjk4NVx1Yjk4N1x1Yjk4OVx1Yjk4YVx1Yjk4'@;
put 'ZFx1Yjk4ZVx1YjlhY1x1YjlhZFx1YjliMFx1YjliNFx1YjliY1x1YjliZFx1YjliZlx1YjljMVx1YjljOFx1YjljOVx1YjljY1x1YjljZVx1YjljZlx1YjlkMFx1YjlkMVx1YjlkMlx1YjlkOFx1YjlkOVx1YjlkYlx1YjlkZFx1YjlkZVx1YjllMVx1YjllM1x1YjllNFx1YjllNVx1YjllOFx1'@;
put 'YjllY1x1YjlmNFx1YjlmNVx1YjlmN1x1YjlmOFx1YjlmOVx1YjlmYVx1YmEwMFx1YmEwMVx1YmEwOFx1YmExNVx1YmEzOFx1YmEzOVx1YmEzY1x1YmE0MFx1YmE0Mlx1YmE0OFx1YmE0OVx1YmE0Ylx1YmE0ZFx1YmE0ZVx1YmE1M1x1YmE1NFx1YmE1NVx1YmE1OFx1YmE1Y1x1YmE2NFx1YmE2'@;
put 'NVx1YmE2N1x1YmE2OFx1YmE2OVx1YmE3MFx1YmE3MVx1YmE3NFx1YmE3OFx1YmE4M1x1YmE4NFx1YmE4NVx1YmE4N1x1YmE4Y1x1YmFhOFx1YmFhOVx1YmFhYlx1YmFhY1x1YmFiMFx1YmFiMlx1YmFiOFx1YmFiOVx1YmFiYlx1YmFiZFx1YmFjNFx1YmFjOFx1YmFkOFx1YmFkOVx1YmFmY1x1'@;
put 'ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE4NF0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTg0XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE4NF1bZ11dPTQ3MTA0K2cseVs0NzEwNCtnXT1fWzE4NF1bZ10pO2ZvcihfWzE4NV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDIyYVx1ZDIyYlx1ZDIyZVx1ZDIyZlx1ZDIzMVx1ZDIzMlx1ZDIzM1x1ZDIzNVx1ZDIzNlx1ZDIzN1x1ZDIzOFx1ZDIzOVx1ZDIzYVx1ZDIzYlx1ZDIzZVx1ZDI0MFx1ZDI0Mlx1ZDI0M1x1ZDI0NFx1ZDI0NVx1ZDI0Nlx1ZDI0N1x1ZDI0OVx1'@;
put 'ZDI0YVx1ZDI0Ylx1ZDI0Y1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDI0ZFx1ZDI0ZVx1ZDI0Zlx1ZDI1MFx1ZDI1MVx1ZDI1Mlx1ZDI1M1x1ZDI1NFx1ZDI1NVx1ZDI1Nlx1ZDI1N1x1ZDI1OFx1ZDI1OVx1ZDI1YVx1ZDI1Ylx1ZDI1ZFx1ZDI1ZVx1ZDI1Zlx1ZDI2'@;
put 'MFx1ZDI2MVx1ZDI2Mlx1ZDI2M1x1ZDI2NVx1ZDI2Nlx1ZDI2N1x1ZDI2OFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDI2OVx1ZDI2YVx1ZDI2Ylx1ZDI2Y1x1ZDI2ZFx1ZDI2ZVx1ZDI2Zlx1ZDI3MFx1ZDI3MVx1ZDI3Mlx1ZDI3M1x1ZDI3NFx1ZDI3NVx1ZDI3Nlx1'@;
put 'ZDI3N1x1ZDI3OFx1ZDI3OVx1ZDI3YVx1ZDI3Ylx1ZDI3Y1x1ZDI3ZFx1ZDI3ZVx1ZDI3Zlx1ZDI4Mlx1ZDI4M1x1ZDI4NVx1ZDI4Nlx1ZDI4N1x1ZDI4OVx1ZDI4YVx1ZDI4Ylx1ZDI4Y1x1YmIwMFx1YmIwNFx1YmIwZFx1YmIwZlx1YmIxMVx1YmIxOFx1YmIxY1x1YmIyMFx1YmIyOVx1YmIy'@;
put 'Ylx1YmIzNFx1YmIzNVx1YmIzNlx1YmIzOFx1YmIzYlx1YmIzY1x1YmIzZFx1YmIzZVx1YmI0NFx1YmI0NVx1YmI0N1x1YmI0OVx1YmI0ZFx1YmI0Zlx1YmI1MFx1YmI1NFx1YmI1OFx1YmI2MVx1YmI2M1x1YmI2Y1x1YmI4OFx1YmI4Y1x1YmI5MFx1YmJhNFx1YmJhOFx1YmJhY1x1YmJiNFx1'@;
put 'YmJiN1x1YmJjMFx1YmJjNFx1YmJjOFx1YmJkMFx1YmJkM1x1YmJmOFx1YmJmOVx1YmJmY1x1YmJmZlx1YmMwMFx1YmMwMlx1YmMwOFx1YmMwOVx1YmMwYlx1YmMwY1x1YmMwZFx1YmMwZlx1YmMxMVx1YmMxNFx1YmMxNVx1YmMxNlx1YmMxN1x1YmMxOFx1YmMxYlx1YmMxY1x1YmMxZFx1YmMx'@;
put 'ZVx1YmMxZlx1YmMyNFx1YmMyNVx1YmMyN1x1YmMyOVx1YmMyZFx1YmMzMFx1YmMzMVx1YmMzNFx1YmMzOFx1YmM0MFx1YmM0MVx1YmM0M1x1YmM0NFx1YmM0NVx1YmM0OVx1YmM0Y1x1YmM0ZFx1YmM1MFx1YmM1ZFx1YmM4NFx1YmM4NVx1YmM4OFx1YmM4Ylx1YmM4Y1x1YmM4ZVx1YmM5NFx1'@;
put 'YmM5NVx1YmM5N1x1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE4NV0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTg1XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE4NV1bZ11dPTQ3MzYwK2cseVs0NzM2MCtnXT1fWzE4NV1bZ10pO2ZvcihfWzE4Nl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDI4ZFx1ZDI4ZVx1ZDI4Zlx1ZDI5Mlx1ZDI5M1x1ZDI5NFx1ZDI5Nlx1ZDI5N1x1ZDI5OFx1ZDI5OVx1ZDI5YVx1ZDI5Ylx1ZDI5ZFx1ZDI5ZVx1ZDI5Zlx1ZDJhMVx1ZDJhMlx1ZDJhM1x1ZDJhNVx1ZDJhNlx1ZDJhN1x1'@;
put 'ZDJhOFx1ZDJhOVx1ZDJhYVx1ZDJhYlx1ZDJhZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDJhZVx1ZDJhZlx1ZDJiMFx1ZDJiMlx1ZDJiM1x1ZDJiNFx1ZDJiNVx1ZDJiNlx1ZDJiN1x1ZDJiYVx1ZDJiYlx1ZDJiZFx1ZDJiZVx1ZDJjMVx1ZDJjM1x1ZDJjNFx1ZDJj'@;
put 'NVx1ZDJjNlx1ZDJjN1x1ZDJjYVx1ZDJjY1x1ZDJjZFx1ZDJjZVx1ZDJjZlx1ZDJkMFx1ZDJkMVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDJkMlx1ZDJkM1x1ZDJkNVx1ZDJkNlx1ZDJkN1x1ZDJkOVx1ZDJkYVx1ZDJkYlx1ZDJkZFx1ZDJkZVx1ZDJkZlx1ZDJlMFx1'@;
put 'ZDJlMVx1ZDJlMlx1ZDJlM1x1ZDJlNlx1ZDJlN1x1ZDJlOFx1ZDJlOVx1ZDJlYVx1ZDJlYlx1ZDJlY1x1ZDJlZFx1ZDJlZVx1ZDJlZlx1ZDJmMlx1ZDJmM1x1ZDJmNVx1ZDJmNlx1ZDJmN1x1ZDJmOVx1ZDJmYVx1YmM5OVx1YmM5YVx1YmNhMFx1YmNhMVx1YmNhNFx1YmNhN1x1YmNhOFx1YmNi'@;
put 'MFx1YmNiMVx1YmNiM1x1YmNiNFx1YmNiNVx1YmNiY1x1YmNiZFx1YmNjMFx1YmNjNFx1YmNjZFx1YmNjZlx1YmNkMFx1YmNkMVx1YmNkNVx1YmNkOFx1YmNkY1x1YmNmNFx1YmNmNVx1YmNmNlx1YmNmOFx1YmNmY1x1YmQwNFx1YmQwNVx1YmQwN1x1YmQwOVx1YmQxMFx1YmQxNFx1YmQyNFx1'@;
put 'YmQyY1x1YmQ0MFx1YmQ0OFx1YmQ0OVx1YmQ0Y1x1YmQ1MFx1YmQ1OFx1YmQ1OVx1YmQ2NFx1YmQ2OFx1YmQ4MFx1YmQ4MVx1YmQ4NFx1YmQ4N1x1YmQ4OFx1YmQ4OVx1YmQ4YVx1YmQ5MFx1YmQ5MVx1YmQ5M1x1YmQ5NVx1YmQ5OVx1YmQ5YVx1YmQ5Y1x1YmRhNFx1YmRiMFx1YmRiOFx1YmRk'@;
put 'NFx1YmRkNVx1YmRkOFx1YmRkY1x1YmRlOVx1YmRmMFx1YmRmNFx1YmRmOFx1YmUwMFx1YmUwM1x1YmUwNVx1YmUwY1x1YmUwZFx1YmUxMFx1YmUxNFx1YmUxY1x1YmUxZFx1YmUxZlx1YmU0NFx1YmU0NVx1YmU0OFx1YmU0Y1x1YmU0ZVx1YmU1NFx1YmU1NVx1YmU1N1x1YmU1OVx1YmU1YVx1'@;
put 'YmU1Ylx1YmU2MFx1YmU2MVx1YmU2NFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE4Nl0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTg2XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE4Nl1bZ11dPTQ3NjE2K2cseVs0NzYxNitnXT1fWzE4Nl1bZ10pO2ZvcihfWzE4N109Ilx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDJmYlx1ZDJmY1x1ZDJmZFx1ZDJmZVx1ZDJmZlx1ZDMwMlx1ZDMwNFx1ZDMwNlx1ZDMwN1x1ZDMwOFx1ZDMwOVx1ZDMwYVx1ZDMwYlx1ZDMwZlx1ZDMxMVx1ZDMxMlx1ZDMxM1x1ZDMxNVx1ZDMxN1x1'@;
put 'ZDMxOFx1ZDMxOVx1ZDMxYVx1ZDMxYlx1ZDMxZVx1ZDMyMlx1ZDMyM1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDMyNFx1ZDMyNlx1ZDMyN1x1ZDMyYVx1ZDMyYlx1ZDMyZFx1ZDMyZVx1ZDMyZlx1ZDMzMVx1ZDMzMlx1ZDMzM1x1ZDMzNFx1ZDMzNVx1ZDMzNlx1ZDMz'@;
put 'N1x1ZDMzYVx1ZDMzZVx1ZDMzZlx1ZDM0MFx1ZDM0MVx1ZDM0Mlx1ZDM0M1x1ZDM0Nlx1ZDM0N1x1ZDM0OFx1ZDM0OVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDM0YVx1ZDM0Ylx1ZDM0Y1x1ZDM0ZFx1ZDM0ZVx1ZDM0Zlx1ZDM1MFx1ZDM1MVx1ZDM1Mlx1ZDM1M1x1'@;
put 'ZDM1NFx1ZDM1NVx1ZDM1Nlx1ZDM1N1x1ZDM1OFx1ZDM1OVx1ZDM1YVx1ZDM1Ylx1ZDM1Y1x1ZDM1ZFx1ZDM1ZVx1ZDM1Zlx1ZDM2MFx1ZDM2MVx1ZDM2Mlx1ZDM2M1x1ZDM2NFx1ZDM2NVx1ZDM2Nlx1ZDM2N1x1ZDM2OFx1ZDM2OVx1YmU2OFx1YmU2YVx1YmU3MFx1YmU3MVx1YmU3M1x1YmU3'@;
put 'NFx1YmU3NVx1YmU3Ylx1YmU3Y1x1YmU3ZFx1YmU4MFx1YmU4NFx1YmU4Y1x1YmU4ZFx1YmU4Zlx1YmU5MFx1YmU5MVx1YmU5OFx1YmU5OVx1YmVhOFx1YmVkMFx1YmVkMVx1YmVkNFx1YmVkN1x1YmVkOFx1YmVlMFx1YmVlM1x1YmVlNFx1YmVlNVx1YmVlY1x1YmYwMVx1YmYwOFx1YmYwOVx1'@;
put 'YmYxOFx1YmYxOVx1YmYxYlx1YmYxY1x1YmYxZFx1YmY0MFx1YmY0MVx1YmY0NFx1YmY0OFx1YmY1MFx1YmY1MVx1YmY1NVx1YmY5NFx1YmZiMFx1YmZjNVx1YmZjY1x1YmZjZFx1YmZkMFx1YmZkNFx1YmZkY1x1YmZkZlx1YmZlMVx1YzAzY1x1YzA1MVx1YzA1OFx1YzA1Y1x1YzA2MFx1YzA2'@;
put 'OFx1YzA2OVx1YzA5MFx1YzA5MVx1YzA5NFx1YzA5OFx1YzBhMFx1YzBhMVx1YzBhM1x1YzBhNVx1YzBhY1x1YzBhZFx1YzBhZlx1YzBiMFx1YzBiM1x1YzBiNFx1YzBiNVx1YzBiNlx1YzBiY1x1YzBiZFx1YzBiZlx1YzBjMFx1YzBjMVx1YzBjNVx1YzBjOFx1YzBjOVx1YzBjY1x1YzBkMFx1'@;
put 'YzBkOFx1YzBkOVx1YzBkYlx1YzBkY1x1YzBkZFx1YzBlNFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE4N10ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTg3XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE4N11bZ11dPTQ3ODcyK2cseVs0Nzg3MitnXT1fWzE4N11bZ10pO2ZvcihfWzE4OF09'@;
put 'Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDM2YVx1ZDM2Ylx1ZDM2Y1x1ZDM2ZFx1ZDM2ZVx1ZDM2Zlx1ZDM3MFx1ZDM3MVx1ZDM3Mlx1ZDM3M1x1ZDM3NFx1ZDM3NVx1ZDM3Nlx1ZDM3N1x1ZDM3OFx1ZDM3OVx1ZDM3YVx1'@;
put 'ZDM3Ylx1ZDM3ZVx1ZDM3Zlx1ZDM4MVx1ZDM4Mlx1ZDM4M1x1ZDM4NVx1ZDM4Nlx1ZDM4N1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDM4OFx1ZDM4OVx1ZDM4YVx1ZDM4Ylx1ZDM4ZVx1ZDM5Mlx1ZDM5M1x1ZDM5NFx1ZDM5NVx1ZDM5Nlx1ZDM5N1x1ZDM5YVx1ZDM5'@;
put 'Ylx1ZDM5ZFx1ZDM5ZVx1ZDM5Zlx1ZDNhMVx1ZDNhMlx1ZDNhM1x1ZDNhNFx1ZDNhNVx1ZDNhNlx1ZDNhN1x1ZDNhYVx1ZDNhY1x1ZDNhZVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDNhZlx1ZDNiMFx1ZDNiMVx1ZDNiMlx1ZDNiM1x1ZDNiNVx1ZDNiNlx1ZDNiN1x1'@;
put 'ZDNiOVx1ZDNiYVx1ZDNiYlx1ZDNiZFx1ZDNiZVx1ZDNiZlx1ZDNjMFx1ZDNjMVx1ZDNjMlx1ZDNjM1x1ZDNjNlx1ZDNjN1x1ZDNjYVx1ZDNjYlx1ZDNjY1x1ZDNjZFx1ZDNjZVx1ZDNjZlx1ZDNkMVx1ZDNkMlx1ZDNkM1x1ZDNkNFx1ZDNkNVx1ZDNkNlx1YzBlNVx1YzBlOFx1YzBlY1x1YzBm'@;
put 'NFx1YzBmNVx1YzBmN1x1YzBmOVx1YzEwMFx1YzEwNFx1YzEwOFx1YzExMFx1YzExNVx1YzExY1x1YzExZFx1YzExZVx1YzExZlx1YzEyMFx1YzEyM1x1YzEyNFx1YzEyNlx1YzEyN1x1YzEyY1x1YzEyZFx1YzEyZlx1YzEzMFx1YzEzMVx1YzEzNlx1YzEzOFx1YzEzOVx1YzEzY1x1YzE0MFx1'@;
put 'YzE0OFx1YzE0OVx1YzE0Ylx1YzE0Y1x1YzE0ZFx1YzE1NFx1YzE1NVx1YzE1OFx1YzE1Y1x1YzE2NFx1YzE2NVx1YzE2N1x1YzE2OFx1YzE2OVx1YzE3MFx1YzE3NFx1YzE3OFx1YzE4NVx1YzE4Y1x1YzE4ZFx1YzE4ZVx1YzE5MFx1YzE5NFx1YzE5Nlx1YzE5Y1x1YzE5ZFx1YzE5Zlx1YzFh'@;
put 'MVx1YzFhNVx1YzFhOFx1YzFhOVx1YzFhY1x1YzFiMFx1YzFiZFx1YzFjNFx1YzFjOFx1YzFjY1x1YzFkNFx1YzFkN1x1YzFkOFx1YzFlMFx1YzFlNFx1YzFlOFx1YzFmMFx1YzFmMVx1YzFmM1x1YzFmY1x1YzFmZFx1YzIwMFx1YzIwNFx1YzIwY1x1YzIwZFx1YzIwZlx1YzIxMVx1YzIxOFx1'@;
put 'YzIxOVx1YzIxY1x1YzIxZlx1YzIyMFx1YzIyOFx1YzIyOVx1YzIyYlx1YzIyZFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE4OF0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTg4XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE4OF1bZ11dPTQ4MTI4K2cseVs0ODEyOCtnXT1fWzE4OF1bZ10p'@;
put 'O2ZvcihfWzE4OV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDNkN1x1ZDNkOVx1ZDNkYVx1ZDNkYlx1ZDNkY1x1ZDNkZFx1ZDNkZVx1ZDNkZlx1ZDNlMFx1ZDNlMlx1ZDNlNFx1ZDNlNVx1ZDNlNlx1ZDNlN1x1ZDNlOFx1'@;
put 'ZDNlOVx1ZDNlYVx1ZDNlYlx1ZDNlZVx1ZDNlZlx1ZDNmMVx1ZDNmMlx1ZDNmM1x1ZDNmNVx1ZDNmNlx1ZDNmN1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDNmOFx1ZDNmOVx1ZDNmYVx1ZDNmYlx1ZDNmZVx1ZDQwMFx1ZDQwMlx1ZDQwM1x1ZDQwNFx1ZDQwNVx1ZDQw'@;
put 'Nlx1ZDQwN1x1ZDQwOVx1ZDQwYVx1ZDQwYlx1ZDQwY1x1ZDQwZFx1ZDQwZVx1ZDQwZlx1ZDQxMFx1ZDQxMVx1ZDQxMlx1ZDQxM1x1ZDQxNFx1ZDQxNVx1ZDQxNlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDQxN1x1ZDQxOFx1ZDQxOVx1ZDQxYVx1ZDQxYlx1ZDQxY1x1'@;
put 'ZDQxZVx1ZDQxZlx1ZDQyMFx1ZDQyMVx1ZDQyMlx1ZDQyM1x1ZDQyNFx1ZDQyNVx1ZDQyNlx1ZDQyN1x1ZDQyOFx1ZDQyOVx1ZDQyYVx1ZDQyYlx1ZDQyY1x1ZDQyZFx1ZDQyZVx1ZDQyZlx1ZDQzMFx1ZDQzMVx1ZDQzMlx1ZDQzM1x1ZDQzNFx1ZDQzNVx1ZDQzNlx1ZDQzN1x1YzIyZlx1YzIz'@;
put 'MVx1YzIzMlx1YzIzNFx1YzI0OFx1YzI1MFx1YzI1MVx1YzI1NFx1YzI1OFx1YzI2MFx1YzI2NVx1YzI2Y1x1YzI2ZFx1YzI3MFx1YzI3NFx1YzI3Y1x1YzI3ZFx1YzI3Zlx1YzI4MVx1YzI4OFx1YzI4OVx1YzI5MFx1YzI5OFx1YzI5Ylx1YzI5ZFx1YzJhNFx1YzJhNVx1YzJhOFx1YzJhY1x1'@;
put 'YzJhZFx1YzJiNFx1YzJiNVx1YzJiN1x1YzJiOVx1YzJkY1x1YzJkZFx1YzJlMFx1YzJlM1x1YzJlNFx1YzJlYlx1YzJlY1x1YzJlZFx1YzJlZlx1YzJmMVx1YzJmNlx1YzJmOFx1YzJmOVx1YzJmYlx1YzJmY1x1YzMwMFx1YzMwOFx1YzMwOVx1YzMwY1x1YzMwZFx1YzMxM1x1YzMxNFx1YzMx'@;
put 'NVx1YzMxOFx1YzMxY1x1YzMyNFx1YzMyNVx1YzMyOFx1YzMyOVx1YzM0NVx1YzM2OFx1YzM2OVx1YzM2Y1x1YzM3MFx1YzM3Mlx1YzM3OFx1YzM3OVx1YzM3Y1x1YzM3ZFx1YzM4NFx1YzM4OFx1YzM4Y1x1YzNjMFx1YzNkOFx1YzNkOVx1YzNkY1x1YzNkZlx1YzNlMFx1YzNlMlx1YzNlOFx1'@;
put 'YzNlOVx1YzNlZFx1YzNmNFx1YzNmNVx1YzNmOFx1YzQwOFx1YzQxMFx1YzQyNFx1YzQyY1x1YzQzMFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE4OV0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTg5XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE4OV1bZ11dPTQ4Mzg0K2cseVs0ODM4NCtn'@;
put 'XT1fWzE4OV1bZ10pO2ZvcihfWzE5MF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDQzOFx1ZDQzOVx1ZDQzYVx1ZDQzYlx1ZDQzY1x1ZDQzZFx1ZDQzZVx1ZDQzZlx1ZDQ0MVx1ZDQ0Mlx1ZDQ0M1x1ZDQ0NVx1ZDQ0Nlx1'@;
put 'ZDQ0N1x1ZDQ0OFx1ZDQ0OVx1ZDQ0YVx1ZDQ0Ylx1ZDQ0Y1x1ZDQ0ZFx1ZDQ0ZVx1ZDQ0Zlx1ZDQ1MFx1ZDQ1MVx1ZDQ1Mlx1ZDQ1M1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDQ1NFx1ZDQ1NVx1ZDQ1Nlx1ZDQ1N1x1ZDQ1OFx1ZDQ1OVx1ZDQ1YVx1ZDQ1Ylx1ZDQ1'@;
put 'ZFx1ZDQ1ZVx1ZDQ1Zlx1ZDQ2MVx1ZDQ2Mlx1ZDQ2M1x1ZDQ2NVx1ZDQ2Nlx1ZDQ2N1x1ZDQ2OFx1ZDQ2OVx1ZDQ2YVx1ZDQ2Ylx1ZDQ2Y1x1ZDQ2ZVx1ZDQ3MFx1ZDQ3MVx1ZDQ3Mlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDQ3M1x1ZDQ3NFx1ZDQ3NVx1ZDQ3Nlx1'@;
put 'ZDQ3N1x1ZDQ3YVx1ZDQ3Ylx1ZDQ3ZFx1ZDQ3ZVx1ZDQ4MVx1ZDQ4M1x1ZDQ4NFx1ZDQ4NVx1ZDQ4Nlx1ZDQ4N1x1ZDQ4YVx1ZDQ4Y1x1ZDQ4ZVx1ZDQ4Zlx1ZDQ5MFx1ZDQ5MVx1ZDQ5Mlx1ZDQ5M1x1ZDQ5NVx1ZDQ5Nlx1ZDQ5N1x1ZDQ5OFx1ZDQ5OVx1ZDQ5YVx1ZDQ5Ylx1ZDQ5Y1x1ZDQ5'@;
put 'ZFx1YzQzNFx1YzQzY1x1YzQzZFx1YzQ0OFx1YzQ2NFx1YzQ2NVx1YzQ2OFx1YzQ2Y1x1YzQ3NFx1YzQ3NVx1YzQ3OVx1YzQ4MFx1YzQ5NFx1YzQ5Y1x1YzRiOFx1YzRiY1x1YzRlOVx1YzRmMFx1YzRmMVx1YzRmNFx1YzRmOFx1YzRmYVx1YzRmZlx1YzUwMFx1YzUwMVx1YzUwY1x1YzUxMFx1'@;
put 'YzUxNFx1YzUxY1x1YzUyOFx1YzUyOVx1YzUyY1x1YzUzMFx1YzUzOFx1YzUzOVx1YzUzYlx1YzUzZFx1YzU0NFx1YzU0NVx1YzU0OFx1YzU0OVx1YzU0YVx1YzU0Y1x1YzU0ZFx1YzU0ZVx1YzU1M1x1YzU1NFx1YzU1NVx1YzU1N1x1YzU1OFx1YzU1OVx1YzU1ZFx1YzU1ZVx1YzU2MFx1YzU2'@;
put 'MVx1YzU2NFx1YzU2OFx1YzU3MFx1YzU3MVx1YzU3M1x1YzU3NFx1YzU3NVx1YzU3Y1x1YzU3ZFx1YzU4MFx1YzU4NFx1YzU4N1x1YzU4Y1x1YzU4ZFx1YzU4Zlx1YzU5MVx1YzU5NVx1YzU5N1x1YzU5OFx1YzU5Y1x1YzVhMFx1YzVhOVx1YzViNFx1YzViNVx1YzViOFx1YzViOVx1YzViYlx1'@;
put 'YzViY1x1YzViZFx1YzViZVx1YzVjNFx1YzVjNVx1YzVjNlx1YzVjN1x1YzVjOFx1YzVjOVx1YzVjYVx1YzVjY1x1YzVjZVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE5MF0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTkwXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE5MF1bZ11dPTQ4NjQw'@;
put 'K2cseVs0ODY0MCtnXT1fWzE5MF1bZ10pO2ZvcihfWzE5MV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDQ5ZVx1ZDQ5Zlx1ZDRhMFx1ZDRhMVx1ZDRhMlx1ZDRhM1x1ZDRhNFx1ZDRhNVx1ZDRhNlx1ZDRhN1x1ZDRhOFx1'@;
put 'ZDRhYVx1ZDRhYlx1ZDRhY1x1ZDRhZFx1ZDRhZVx1ZDRhZlx1ZDRiMFx1ZDRiMVx1ZDRiMlx1ZDRiM1x1ZDRiNFx1ZDRiNVx1ZDRiNlx1ZDRiN1x1ZDRiOFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDRiOVx1ZDRiYVx1ZDRiYlx1ZDRiY1x1ZDRiZFx1ZDRiZVx1ZDRi'@;
put 'Zlx1ZDRjMFx1ZDRjMVx1ZDRjMlx1ZDRjM1x1ZDRjNFx1ZDRjNVx1ZDRjNlx1ZDRjN1x1ZDRjOFx1ZDRjOVx1ZDRjYVx1ZDRjYlx1ZDRjZFx1ZDRjZVx1ZDRjZlx1ZDRkMVx1ZDRkMlx1ZDRkM1x1ZDRkNVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDRkNlx1ZDRkN1x1'@;
put 'ZDRkOFx1ZDRkOVx1ZDRkYVx1ZDRkYlx1ZDRkZFx1ZDRkZVx1ZDRlMFx1ZDRlMVx1ZDRlMlx1ZDRlM1x1ZDRlNFx1ZDRlNVx1ZDRlNlx1ZDRlN1x1ZDRlOVx1ZDRlYVx1ZDRlYlx1ZDRlZFx1ZDRlZVx1ZDRlZlx1ZDRmMVx1ZDRmMlx1ZDRmM1x1ZDRmNFx1ZDRmNVx1ZDRmNlx1ZDRmN1x1ZDRm'@;
put 'OVx1ZDRmYVx1ZDRmY1x1YzVkMFx1YzVkMVx1YzVkNFx1YzVkOFx1YzVlMFx1YzVlMVx1YzVlM1x1YzVlNVx1YzVlY1x1YzVlZFx1YzVlZVx1YzVmMFx1YzVmNFx1YzVmNlx1YzVmN1x1YzVmY1x1YzVmZFx1YzVmZVx1YzVmZlx1YzYwMFx1YzYwMVx1YzYwNVx1YzYwNlx1YzYwN1x1YzYwOFx1'@;
put 'YzYwY1x1YzYxMFx1YzYxOFx1YzYxOVx1YzYxYlx1YzYxY1x1YzYyNFx1YzYyNVx1YzYyOFx1YzYyY1x1YzYyZFx1YzYyZVx1YzYzMFx1YzYzM1x1YzYzNFx1YzYzNVx1YzYzN1x1YzYzOVx1YzYzYlx1YzY0MFx1YzY0MVx1YzY0NFx1YzY0OFx1YzY1MFx1YzY1MVx1YzY1M1x1YzY1NFx1YzY1'@;
put 'NVx1YzY1Y1x1YzY1ZFx1YzY2MFx1YzY2Y1x1YzY2Zlx1YzY3MVx1YzY3OFx1YzY3OVx1YzY3Y1x1YzY4MFx1YzY4OFx1YzY4OVx1YzY4Ylx1YzY4ZFx1YzY5NFx1YzY5NVx1YzY5OFx1YzY5Y1x1YzZhNFx1YzZhNVx1YzZhN1x1YzZhOVx1YzZiMFx1YzZiMVx1YzZiNFx1YzZiOFx1YzZiOVx1'@;
put 'YzZiYVx1YzZjMFx1YzZjMVx1YzZjM1x1YzZjNVx1YzZjY1x1YzZjZFx1YzZkMFx1YzZkNFx1YzZkY1x1YzZkZFx1YzZlMFx1YzZlMVx1YzZlOFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE5MV0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTkxXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE5'@;
put 'MV1bZ11dPTQ4ODk2K2cseVs0ODg5NitnXT1fWzE5MV1bZ10pO2ZvcihfWzE5Ml09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDRmZVx1ZDRmZlx1ZDUwMFx1ZDUwMVx1ZDUwMlx1ZDUwM1x1ZDUwNVx1ZDUwNlx1ZDUwN1x1'@;
put 'ZDUwOVx1ZDUwYVx1ZDUwYlx1ZDUwZFx1ZDUwZVx1ZDUwZlx1ZDUxMFx1ZDUxMVx1ZDUxMlx1ZDUxM1x1ZDUxNlx1ZDUxOFx1ZDUxOVx1ZDUxYVx1ZDUxYlx1ZDUxY1x1ZDUxZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDUxZVx1ZDUxZlx1ZDUyMFx1ZDUyMVx1ZDUy'@;
put 'Mlx1ZDUyM1x1ZDUyNFx1ZDUyNVx1ZDUyNlx1ZDUyN1x1ZDUyOFx1ZDUyOVx1ZDUyYVx1ZDUyYlx1ZDUyY1x1ZDUyZFx1ZDUyZVx1ZDUyZlx1ZDUzMFx1ZDUzMVx1ZDUzMlx1ZDUzM1x1ZDUzNFx1ZDUzNVx1ZDUzNlx1ZDUzN1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZDUzOFx1ZDUzOVx1ZDUzYVx1ZDUzYlx1ZDUzZVx1ZDUzZlx1ZDU0MVx1ZDU0Mlx1ZDU0M1x1ZDU0NVx1ZDU0Nlx1ZDU0N1x1ZDU0OFx1ZDU0OVx1ZDU0YVx1ZDU0Ylx1ZDU0ZVx1ZDU1MFx1ZDU1Mlx1ZDU1M1x1ZDU1NFx1ZDU1NVx1ZDU1Nlx1ZDU1N1x1ZDU1YVx1ZDU1Ylx1ZDU1ZFx1ZDU1'@;
put 'ZVx1ZDU1Zlx1ZDU2MVx1ZDU2Mlx1ZDU2M1x1YzZlOVx1YzZlY1x1YzZmMFx1YzZmOFx1YzZmOVx1YzZmZFx1YzcwNFx1YzcwNVx1YzcwOFx1YzcwY1x1YzcxNFx1YzcxNVx1YzcxN1x1YzcxOVx1YzcyMFx1YzcyMVx1YzcyNFx1YzcyOFx1YzczMFx1YzczMVx1YzczM1x1YzczNVx1YzczN1x1'@;
put 'YzczY1x1YzczZFx1Yzc0MFx1Yzc0NFx1Yzc0YVx1Yzc0Y1x1Yzc0ZFx1Yzc0Zlx1Yzc1MVx1Yzc1Mlx1Yzc1M1x1Yzc1NFx1Yzc1NVx1Yzc1Nlx1Yzc1N1x1Yzc1OFx1Yzc1Y1x1Yzc2MFx1Yzc2OFx1Yzc2Ylx1Yzc3NFx1Yzc3NVx1Yzc3OFx1Yzc3Y1x1Yzc3ZFx1Yzc3ZVx1Yzc4M1x1Yzc4'@;
put 'NFx1Yzc4NVx1Yzc4N1x1Yzc4OFx1Yzc4OVx1Yzc4YVx1Yzc4ZVx1Yzc5MFx1Yzc5MVx1Yzc5NFx1Yzc5Nlx1Yzc5N1x1Yzc5OFx1Yzc5YVx1YzdhMFx1YzdhMVx1YzdhM1x1YzdhNFx1YzdhNVx1YzdhNlx1YzdhY1x1YzdhZFx1YzdiMFx1YzdiNFx1YzdiY1x1YzdiZFx1YzdiZlx1YzdjMFx1'@;
put 'YzdjMVx1YzdjOFx1YzdjOVx1YzdjY1x1YzdjZVx1YzdkMFx1YzdkOFx1YzdkZFx1YzdlNFx1YzdlOFx1YzdlY1x1YzgwMFx1YzgwMVx1YzgwNFx1YzgwOFx1YzgwYVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE5Ml0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTkyXVtnXS5jaGFyQ29kZUF0'@;
put 'KDApJiYoSVtfWzE5Ml1bZ11dPTQ5MTUyK2cseVs0OTE1MitnXT1fWzE5Ml1bZ10pO2ZvcihfWzE5M109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDU2NFx1ZDU2Nlx1ZDU2N1x1ZDU2YVx1ZDU2Y1x1ZDU2ZVx1ZDU2Zlx1'@;
put 'ZDU3MFx1ZDU3MVx1ZDU3Mlx1ZDU3M1x1ZDU3Nlx1ZDU3N1x1ZDU3OVx1ZDU3YVx1ZDU3Ylx1ZDU3ZFx1ZDU3ZVx1ZDU3Zlx1ZDU4MFx1ZDU4MVx1ZDU4Mlx1ZDU4M1x1ZDU4Nlx1ZDU4YVx1ZDU4Ylx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDU4Y1x1ZDU4ZFx1ZDU4'@;
put 'ZVx1ZDU4Zlx1ZDU5MVx1ZDU5Mlx1ZDU5M1x1ZDU5NFx1ZDU5NVx1ZDU5Nlx1ZDU5N1x1ZDU5OFx1ZDU5OVx1ZDU5YVx1ZDU5Ylx1ZDU5Y1x1ZDU5ZFx1ZDU5ZVx1ZDU5Zlx1ZDVhMFx1ZDVhMVx1ZDVhMlx1ZDVhM1x1ZDVhNFx1ZDVhNlx1ZDVhN1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZDVhOFx1ZDVhOVx1ZDVhYVx1ZDVhYlx1ZDVhY1x1ZDVhZFx1ZDVhZVx1ZDVhZlx1ZDViMFx1ZDViMVx1ZDViMlx1ZDViM1x1ZDViNFx1ZDViNVx1ZDViNlx1ZDViN1x1ZDViOFx1ZDViOVx1ZDViYVx1ZDViYlx1ZDViY1x1ZDViZFx1ZDViZVx1ZDViZlx1ZDVjMFx1ZDVj'@;
put 'MVx1ZDVjMlx1ZDVjM1x1ZDVjNFx1ZDVjNVx1ZDVjNlx1ZDVjN1x1YzgxMFx1YzgxMVx1YzgxM1x1YzgxNVx1YzgxNlx1YzgxY1x1YzgxZFx1YzgyMFx1YzgyNFx1YzgyY1x1YzgyZFx1YzgyZlx1YzgzMVx1YzgzOFx1YzgzY1x1Yzg0MFx1Yzg0OFx1Yzg0OVx1Yzg0Y1x1Yzg0ZFx1Yzg1NFx1'@;
put 'Yzg3MFx1Yzg3MVx1Yzg3NFx1Yzg3OFx1Yzg3YVx1Yzg4MFx1Yzg4MVx1Yzg4M1x1Yzg4NVx1Yzg4Nlx1Yzg4N1x1Yzg4Ylx1Yzg4Y1x1Yzg4ZFx1Yzg5NFx1Yzg5ZFx1Yzg5Zlx1YzhhMVx1YzhhOFx1YzhiY1x1YzhiZFx1YzhjNFx1YzhjOFx1YzhjY1x1YzhkNFx1YzhkNVx1YzhkN1x1Yzhk'@;
put 'OVx1YzhlMFx1YzhlMVx1YzhlNFx1YzhmNVx1YzhmY1x1YzhmZFx1YzkwMFx1YzkwNFx1YzkwNVx1YzkwNlx1YzkwY1x1YzkwZFx1YzkwZlx1YzkxMVx1YzkxOFx1YzkyY1x1YzkzNFx1Yzk1MFx1Yzk1MVx1Yzk1NFx1Yzk1OFx1Yzk2MFx1Yzk2MVx1Yzk2M1x1Yzk2Y1x1Yzk3MFx1Yzk3NFx1'@;
put 'Yzk3Y1x1Yzk4OFx1Yzk4OVx1Yzk4Y1x1Yzk5MFx1Yzk5OFx1Yzk5OVx1Yzk5Ylx1Yzk5ZFx1YzljMFx1YzljMVx1YzljNFx1YzljN1x1YzljOFx1YzljYVx1YzlkMFx1YzlkMVx1YzlkM1x1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE5M10ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTkzXVtn'@;
put 'XS5jaGFyQ29kZUF0KDApJiYoSVtfWzE5M11bZ11dPTQ5NDA4K2cseVs0OTQwOCtnXT1fWzE5M11bZ10pO2ZvcihfWzE5NF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDVjYVx1ZDVjYlx1ZDVjZFx1ZDVjZVx1ZDVjZlx1'@;
put 'ZDVkMVx1ZDVkM1x1ZDVkNFx1ZDVkNVx1ZDVkNlx1ZDVkN1x1ZDVkYVx1ZDVkY1x1ZDVkZVx1ZDVkZlx1ZDVlMFx1ZDVlMVx1ZDVlMlx1ZDVlM1x1ZDVlNlx1ZDVlN1x1ZDVlOVx1ZDVlYVx1ZDVlYlx1ZDVlZFx1ZDVlZVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDVl'@;
put 'Zlx1ZDVmMFx1ZDVmMVx1ZDVmMlx1ZDVmM1x1ZDVmNlx1ZDVmOFx1ZDVmYVx1ZDVmYlx1ZDVmY1x1ZDVmZFx1ZDVmZVx1ZDVmZlx1ZDYwMlx1ZDYwM1x1ZDYwNVx1ZDYwNlx1ZDYwN1x1ZDYwOVx1ZDYwYVx1ZDYwYlx1ZDYwY1x1ZDYwZFx1ZDYwZVx1ZDYwZlx1ZDYxMlx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDYxNlx1ZDYxN1x1ZDYxOFx1ZDYxOVx1ZDYxYVx1ZDYxYlx1ZDYxZFx1ZDYxZVx1ZDYxZlx1ZDYyMVx1ZDYyMlx1ZDYyM1x1ZDYyNVx1ZDYyNlx1ZDYyN1x1ZDYyOFx1ZDYyOVx1ZDYyYVx1ZDYyYlx1ZDYyY1x1ZDYyZVx1ZDYyZlx1ZDYzMFx1ZDYz'@;
put 'MVx1ZDYzMlx1ZDYzM1x1ZDYzNFx1ZDYzNVx1ZDYzNlx1ZDYzN1x1ZDYzYVx1ZDYzYlx1YzlkNVx1YzlkNlx1YzlkOVx1YzlkYVx1YzlkY1x1YzlkZFx1YzllMFx1YzllMlx1YzllNFx1YzllN1x1YzllY1x1YzllZFx1YzllZlx1YzlmMFx1YzlmMVx1YzlmOFx1YzlmOVx1YzlmY1x1Y2EwMFx1'@;
put 'Y2EwOFx1Y2EwOVx1Y2EwYlx1Y2EwY1x1Y2EwZFx1Y2ExNFx1Y2ExOFx1Y2EyOVx1Y2E0Y1x1Y2E0ZFx1Y2E1MFx1Y2E1NFx1Y2E1Y1x1Y2E1ZFx1Y2E1Zlx1Y2E2MFx1Y2E2MVx1Y2E2OFx1Y2E3ZFx1Y2E4NFx1Y2E5OFx1Y2FiY1x1Y2FiZFx1Y2FjMFx1Y2FjNFx1Y2FjY1x1Y2FjZFx1Y2Fj'@;
put 'Zlx1Y2FkMVx1Y2FkM1x1Y2FkOFx1Y2FkOVx1Y2FlMFx1Y2FlY1x1Y2FmNFx1Y2IwOFx1Y2IxMFx1Y2IxNFx1Y2IxOFx1Y2IyMFx1Y2IyMVx1Y2I0MVx1Y2I0OFx1Y2I0OVx1Y2I0Y1x1Y2I1MFx1Y2I1OFx1Y2I1OVx1Y2I1ZFx1Y2I2NFx1Y2I3OFx1Y2I3OVx1Y2I5Y1x1Y2JiOFx1Y2JkNFx1'@;
put 'Y2JlNFx1Y2JlN1x1Y2JlOVx1Y2MwY1x1Y2MwZFx1Y2MxMFx1Y2MxNFx1Y2MxY1x1Y2MxZFx1Y2MyMVx1Y2MyMlx1Y2MyN1x1Y2MyOFx1Y2MyOVx1Y2MyY1x1Y2MyZVx1Y2MzMFx1Y2MzOFx1Y2MzOVx1Y2MzYlx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE5NF0ubGVuZ3RoOysrZyk2NTUz'@;
put 'MyE9PV9bMTk0XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE5NF1bZ11dPTQ5NjY0K2cseVs0OTY2NCtnXT1fWzE5NF1bZ10pO2ZvcihfWzE5NV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDYzZFx1ZDYzZVx1ZDYzZlx1'@;
put 'ZDY0MVx1ZDY0Mlx1ZDY0M1x1ZDY0NFx1ZDY0Nlx1ZDY0N1x1ZDY0YVx1ZDY0Y1x1ZDY0ZVx1ZDY0Zlx1ZDY1MFx1ZDY1Mlx1ZDY1M1x1ZDY1Nlx1ZDY1N1x1ZDY1OVx1ZDY1YVx1ZDY1Ylx1ZDY1ZFx1ZDY1ZVx1ZDY1Zlx1ZDY2MFx1ZDY2MVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZDY2Mlx1ZDY2M1x1ZDY2NFx1ZDY2NVx1ZDY2Nlx1ZDY2OFx1ZDY2YVx1ZDY2Ylx1ZDY2Y1x1ZDY2ZFx1ZDY2ZVx1ZDY2Zlx1ZDY3Mlx1ZDY3M1x1ZDY3NVx1ZDY3Nlx1ZDY3N1x1ZDY3OFx1ZDY3OVx1ZDY3YVx1ZDY3Ylx1ZDY3Y1x1ZDY3ZFx1ZDY3ZVx1ZDY3Zlx1ZDY4MFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDY4MVx1ZDY4Mlx1ZDY4NFx1ZDY4Nlx1ZDY4N1x1ZDY4OFx1ZDY4OVx1ZDY4YVx1ZDY4Ylx1ZDY4ZVx1ZDY4Zlx1ZDY5MVx1ZDY5Mlx1ZDY5M1x1ZDY5NVx1ZDY5Nlx1ZDY5N1x1ZDY5OFx1ZDY5OVx1ZDY5YVx1ZDY5Ylx1ZDY5'@;
put 'Y1x1ZDY5ZVx1ZDZhMFx1ZDZhMlx1ZDZhM1x1ZDZhNFx1ZDZhNVx1ZDZhNlx1ZDZhN1x1ZDZhOVx1ZDZhYVx1Y2MzY1x1Y2MzZFx1Y2MzZVx1Y2M0NFx1Y2M0NVx1Y2M0OFx1Y2M0Y1x1Y2M1NFx1Y2M1NVx1Y2M1N1x1Y2M1OFx1Y2M1OVx1Y2M2MFx1Y2M2NFx1Y2M2Nlx1Y2M2OFx1Y2M3MFx1'@;
put 'Y2M3NVx1Y2M5OFx1Y2M5OVx1Y2M5Y1x1Y2NhMFx1Y2NhOFx1Y2NhOVx1Y2NhYlx1Y2NhY1x1Y2NhZFx1Y2NiNFx1Y2NiNVx1Y2NiOFx1Y2NiY1x1Y2NjNFx1Y2NjNVx1Y2NjN1x1Y2NjOVx1Y2NkMFx1Y2NkNFx1Y2NlNFx1Y2NlY1x1Y2NmMFx1Y2QwMVx1Y2QwOFx1Y2QwOVx1Y2QwY1x1Y2Qx'@;
put 'MFx1Y2QxOFx1Y2QxOVx1Y2QxYlx1Y2QxZFx1Y2QyNFx1Y2QyOFx1Y2QyY1x1Y2QzOVx1Y2Q1Y1x1Y2Q2MFx1Y2Q2NFx1Y2Q2Y1x1Y2Q2ZFx1Y2Q2Zlx1Y2Q3MVx1Y2Q3OFx1Y2Q4OFx1Y2Q5NFx1Y2Q5NVx1Y2Q5OFx1Y2Q5Y1x1Y2RhNFx1Y2RhNVx1Y2RhN1x1Y2RhOVx1Y2RiMFx1Y2RjNFx1'@;
put 'Y2RjY1x1Y2RkMFx1Y2RlOFx1Y2RlY1x1Y2RmMFx1Y2RmOFx1Y2RmOVx1Y2RmYlx1Y2RmZFx1Y2UwNFx1Y2UwOFx1Y2UwY1x1Y2UxNFx1Y2UxOVx1Y2UyMFx1Y2UyMVx1Y2UyNFx1Y2UyOFx1Y2UzMFx1Y2UzMVx1Y2UzM1x1Y2UzNVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE5NV0ubGVu'@;
put 'Z3RoOysrZyk2NTUzMyE9PV9bMTk1XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE5NV1bZ11dPTQ5OTIwK2cseVs0OTkyMCtnXT1fWzE5NV1bZ10pO2ZvcihfWzE5Nl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDZhYlx1'@;
put 'ZDZhZFx1ZDZhZVx1ZDZhZlx1ZDZiMVx1ZDZiMlx1ZDZiM1x1ZDZiNFx1ZDZiNVx1ZDZiNlx1ZDZiN1x1ZDZiOFx1ZDZiYVx1ZDZiY1x1ZDZiZFx1ZDZiZVx1ZDZiZlx1ZDZjMFx1ZDZjMVx1ZDZjMlx1ZDZjM1x1ZDZjNlx1ZDZjN1x1ZDZjOVx1ZDZjYVx1ZDZjYlx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDZjZFx1ZDZjZVx1ZDZjZlx1ZDZkMFx1ZDZkMlx1ZDZkM1x1ZDZkNVx1ZDZkNlx1ZDZkOFx1ZDZkYVx1ZDZkYlx1ZDZkY1x1ZDZkZFx1ZDZkZVx1ZDZkZlx1ZDZlMVx1ZDZlMlx1ZDZlM1x1ZDZlNVx1ZDZlNlx1ZDZlN1x1ZDZlOVx1ZDZlYVx1ZDZlYlx1'@;
put 'ZDZlY1x1ZDZlZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDZlZVx1ZDZlZlx1ZDZmMVx1ZDZmMlx1ZDZmM1x1ZDZmNFx1ZDZmNlx1ZDZmN1x1ZDZmOFx1ZDZmOVx1ZDZmYVx1ZDZmYlx1ZDZmZVx1ZDZmZlx1ZDcwMVx1ZDcwMlx1ZDcwM1x1ZDcwNVx1ZDcwNlx1ZDcw'@;
put 'N1x1ZDcwOFx1ZDcwOVx1ZDcwYVx1ZDcwYlx1ZDcwY1x1ZDcwZFx1ZDcwZVx1ZDcwZlx1ZDcxMFx1ZDcxMlx1ZDcxM1x1ZDcxNFx1Y2U1OFx1Y2U1OVx1Y2U1Y1x1Y2U1Zlx1Y2U2MFx1Y2U2MVx1Y2U2OFx1Y2U2OVx1Y2U2Ylx1Y2U2ZFx1Y2U3NFx1Y2U3NVx1Y2U3OFx1Y2U3Y1x1Y2U4NFx1'@;
put 'Y2U4NVx1Y2U4N1x1Y2U4OVx1Y2U5MFx1Y2U5MVx1Y2U5NFx1Y2U5OFx1Y2VhMFx1Y2VhMVx1Y2VhM1x1Y2VhNFx1Y2VhNVx1Y2VhY1x1Y2VhZFx1Y2VjMVx1Y2VlNFx1Y2VlNVx1Y2VlOFx1Y2VlYlx1Y2VlY1x1Y2VmNFx1Y2VmNVx1Y2VmN1x1Y2VmOFx1Y2VmOVx1Y2YwMFx1Y2YwMVx1Y2Yw'@;
put 'NFx1Y2YwOFx1Y2YxMFx1Y2YxMVx1Y2YxM1x1Y2YxNVx1Y2YxY1x1Y2YyMFx1Y2YyNFx1Y2YyY1x1Y2YyZFx1Y2YyZlx1Y2YzMFx1Y2YzMVx1Y2YzOFx1Y2Y1NFx1Y2Y1NVx1Y2Y1OFx1Y2Y1Y1x1Y2Y2NFx1Y2Y2NVx1Y2Y2N1x1Y2Y2OVx1Y2Y3MFx1Y2Y3MVx1Y2Y3NFx1Y2Y3OFx1Y2Y4MFx1'@;
put 'Y2Y4NVx1Y2Y4Y1x1Y2ZhMVx1Y2ZhOFx1Y2ZiMFx1Y2ZjNFx1Y2ZlMFx1Y2ZlMVx1Y2ZlNFx1Y2ZlOFx1Y2ZmMFx1Y2ZmMVx1Y2ZmM1x1Y2ZmNVx1Y2ZmY1x1ZDAwMFx1ZDAwNFx1ZDAxMVx1ZDAxOFx1ZDAyZFx1ZDAzNFx1ZDAzNVx1ZDAzOFx1ZDAzY1x1ZmZmZCIuc3BsaXQoIiIpLGc9MDtn'@;
put 'IT1fWzE5Nl0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTk2XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE5Nl1bZ11dPTUwMTc2K2cseVs1MDE3NitnXT1fWzE5Nl1bZ10pO2ZvcihfWzE5N109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZDcxNVx1ZDcxNlx1ZDcxN1x1ZDcxYVx1ZDcxYlx1ZDcxZFx1ZDcxZVx1ZDcxZlx1ZDcyMVx1ZDcyMlx1ZDcyM1x1ZDcyNFx1ZDcyNVx1ZDcyNlx1ZDcyN1x1ZDcyYVx1ZDcyY1x1ZDcyZVx1ZDcyZlx1ZDczMFx1ZDczMVx1ZDczMlx1ZDczM1x1ZDczNlx1ZDczN1x1ZDczOVx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDczYVx1ZDczYlx1ZDczZFx1ZDczZVx1ZDczZlx1ZDc0MFx1ZDc0MVx1ZDc0Mlx1ZDc0M1x1ZDc0NVx1ZDc0Nlx1ZDc0OFx1ZDc0YVx1ZDc0Ylx1ZDc0Y1x1ZDc0ZFx1ZDc0ZVx1ZDc0Zlx1ZDc1Mlx1ZDc1M1x1ZDc1NVx1ZDc1YVx1'@;
put 'ZDc1Ylx1ZDc1Y1x1ZDc1ZFx1ZDc1ZVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDc1Zlx1ZDc2Mlx1ZDc2NFx1ZDc2Nlx1ZDc2N1x1ZDc2OFx1ZDc2YVx1ZDc2Ylx1ZDc2ZFx1ZDc2ZVx1ZDc2Zlx1ZDc3MVx1ZDc3Mlx1ZDc3M1x1ZDc3NVx1ZDc3Nlx1ZDc3N1x1ZDc3'@;
put 'OFx1ZDc3OVx1ZDc3YVx1ZDc3Ylx1ZDc3ZVx1ZDc3Zlx1ZDc4MFx1ZDc4Mlx1ZDc4M1x1ZDc4NFx1ZDc4NVx1ZDc4Nlx1ZDc4N1x1ZDc4YVx1ZDc4Ylx1ZDA0NFx1ZDA0NVx1ZDA0N1x1ZDA0OVx1ZDA1MFx1ZDA1NFx1ZDA1OFx1ZDA2MFx1ZDA2Y1x1ZDA2ZFx1ZDA3MFx1ZDA3NFx1ZDA3Y1x1'@;
put 'ZDA3ZFx1ZDA4MVx1ZDBhNFx1ZDBhNVx1ZDBhOFx1ZDBhY1x1ZDBiNFx1ZDBiNVx1ZDBiN1x1ZDBiOVx1ZDBjMFx1ZDBjMVx1ZDBjNFx1ZDBjOFx1ZDBjOVx1ZDBkMFx1ZDBkMVx1ZDBkM1x1ZDBkNFx1ZDBkNVx1ZDBkY1x1ZDBkZFx1ZDBlMFx1ZDBlNFx1ZDBlY1x1ZDBlZFx1ZDBlZlx1ZDBm'@;
put 'MFx1ZDBmMVx1ZDBmOFx1ZDEwZFx1ZDEzMFx1ZDEzMVx1ZDEzNFx1ZDEzOFx1ZDEzYVx1ZDE0MFx1ZDE0MVx1ZDE0M1x1ZDE0NFx1ZDE0NVx1ZDE0Y1x1ZDE0ZFx1ZDE1MFx1ZDE1NFx1ZDE1Y1x1ZDE1ZFx1ZDE1Zlx1ZDE2MVx1ZDE2OFx1ZDE2Y1x1ZDE3Y1x1ZDE4NFx1ZDE4OFx1ZDFhMFx1'@;
put 'ZDFhMVx1ZDFhNFx1ZDFhOFx1ZDFiMFx1ZDFiMVx1ZDFiM1x1ZDFiNVx1ZDFiYVx1ZDFiY1x1ZDFjMFx1ZDFkOFx1ZDFmNFx1ZDFmOFx1ZDIwN1x1ZDIwOVx1ZDIxMFx1ZDIyY1x1ZDIyZFx1ZDIzMFx1ZDIzNFx1ZDIzY1x1ZDIzZFx1ZDIzZlx1ZDI0MVx1ZDI0OFx1ZDI1Y1x1ZmZmZCIuc3Bs'@;
put 'aXQoIiIpLGc9MDtnIT1fWzE5N10ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTk3XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE5N11bZ11dPTUwNDMyK2cseVs1MDQzMitnXT1fWzE5N11bZ10pO2ZvcihfWzE5OF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDc4ZFx1ZDc4ZVx1ZDc4Zlx1ZDc5MVx1ZDc5Mlx1ZDc5M1x1ZDc5NFx1ZDc5NVx1ZDc5Nlx1ZDc5N1x1ZDc5YVx1ZDc5Y1x1ZDc5ZVx1ZDc5Zlx1ZDdhMFx1ZDdhMVx1ZDdhMlx1ZDdhM1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDI2NFx1ZDI4MFx1ZDI4MVx1ZDI4NFx1ZDI4OFx1ZDI5MFx1ZDI5MVx1ZDI5NVx1ZDI5Y1x1ZDJhMFx1ZDJhNFx1'@;
put 'ZDJhY1x1ZDJiMVx1ZDJiOFx1ZDJiOVx1ZDJiY1x1ZDJiZlx1ZDJjMFx1ZDJjMlx1ZDJjOFx1ZDJjOVx1ZDJjYlx1ZDJkNFx1ZDJkOFx1ZDJkY1x1ZDJlNFx1ZDJlNVx1ZDJmMFx1ZDJmMVx1ZDJmNFx1ZDJmOFx1ZDMwMFx1ZDMwMVx1ZDMwM1x1ZDMwNVx1ZDMwY1x1ZDMwZFx1ZDMwZVx1ZDMx'@;
put 'MFx1ZDMxNFx1ZDMxNlx1ZDMxY1x1ZDMxZFx1ZDMxZlx1ZDMyMFx1ZDMyMVx1ZDMyNVx1ZDMyOFx1ZDMyOVx1ZDMyY1x1ZDMzMFx1ZDMzOFx1ZDMzOVx1ZDMzYlx1ZDMzY1x1ZDMzZFx1ZDM0NFx1ZDM0NVx1ZDM3Y1x1ZDM3ZFx1ZDM4MFx1ZDM4NFx1ZDM4Y1x1ZDM4ZFx1ZDM4Zlx1ZDM5MFx1'@;
put 'ZDM5MVx1ZDM5OFx1ZDM5OVx1ZDM5Y1x1ZDNhMFx1ZDNhOFx1ZDNhOVx1ZDNhYlx1ZDNhZFx1ZDNiNFx1ZDNiOFx1ZDNiY1x1ZDNjNFx1ZDNjNVx1ZDNjOFx1ZDNjOVx1ZDNkMFx1ZDNkOFx1ZDNlMVx1ZDNlM1x1ZDNlY1x1ZDNlZFx1ZDNmMFx1ZDNmNFx1ZDNmY1x1ZDNmZFx1ZDNmZlx1ZDQw'@;
put 'MVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE5OF0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTk4XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE5OF1bZ11dPTUwNjg4K2cseVs1MDY4OCtnXT1fWzE5OF1bZ10pO2ZvcihfWzE5OV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDQwOFx1ZDQxZFx1ZDQ0MFx1ZDQ0NFx1ZDQ1Y1x1ZDQ2MFx1ZDQ2NFx1ZDQ2ZFx1ZDQ2Zlx1'@;
put 'ZDQ3OFx1ZDQ3OVx1ZDQ3Y1x1ZDQ3Zlx1ZDQ4MFx1ZDQ4Mlx1ZDQ4OFx1ZDQ4OVx1ZDQ4Ylx1ZDQ4ZFx1ZDQ5NFx1ZDRhOVx1ZDRjY1x1ZDRkMFx1ZDRkNFx1ZDRkY1x1ZDRkZlx1ZDRlOFx1ZDRlY1x1ZDRmMFx1ZDRmOFx1ZDRmYlx1ZDRmZFx1ZDUwNFx1ZDUwOFx1ZDUwY1x1ZDUxNFx1ZDUx'@;
put 'NVx1ZDUxN1x1ZDUzY1x1ZDUzZFx1ZDU0MFx1ZDU0NFx1ZDU0Y1x1ZDU0ZFx1ZDU0Zlx1ZDU1MVx1ZDU1OFx1ZDU1OVx1ZDU1Y1x1ZDU2MFx1ZDU2NVx1ZDU2OFx1ZDU2OVx1ZDU2Ylx1ZDU2ZFx1ZDU3NFx1ZDU3NVx1ZDU3OFx1ZDU3Y1x1ZDU4NFx1ZDU4NVx1ZDU4N1x1ZDU4OFx1ZDU4OVx1'@;
put 'ZDU5MFx1ZDVhNVx1ZDVjOFx1ZDVjOVx1ZDVjY1x1ZDVkMFx1ZDVkMlx1ZDVkOFx1ZDVkOVx1ZDVkYlx1ZDVkZFx1ZDVlNFx1ZDVlNVx1ZDVlOFx1ZDVlY1x1ZDVmNFx1ZDVmNVx1ZDVmN1x1ZDVmOVx1ZDYwMFx1ZDYwMVx1ZDYwNFx1ZDYwOFx1ZDYxMFx1ZDYxMVx1ZDYxM1x1ZDYxNFx1ZDYx'@;
put 'NVx1ZDYxY1x1ZDYyMFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE5OV0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTk5XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE5OV1bZ11dPTUwOTQ0K2cseVs1MDk0NCtnXT1fWzE5OV1bZ10pO2ZvcihfWzIwMF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDYyNFx1ZDYyZFx1ZDYzOFx1ZDYzOVx1ZDYzY1x1ZDY0MFx1ZDY0NVx1'@;
put 'ZDY0OFx1ZDY0OVx1ZDY0Ylx1ZDY0ZFx1ZDY1MVx1ZDY1NFx1ZDY1NVx1ZDY1OFx1ZDY1Y1x1ZDY2N1x1ZDY2OVx1ZDY3MFx1ZDY3MVx1ZDY3NFx1ZDY4M1x1ZDY4NVx1ZDY4Y1x1ZDY4ZFx1ZDY5MFx1ZDY5NFx1ZDY5ZFx1ZDY5Zlx1ZDZhMVx1ZDZhOFx1ZDZhY1x1ZDZiMFx1ZDZiOVx1ZDZi'@;
put 'Ylx1ZDZjNFx1ZDZjNVx1ZDZjOFx1ZDZjY1x1ZDZkMVx1ZDZkNFx1ZDZkN1x1ZDZkOVx1ZDZlMFx1ZDZlNFx1ZDZlOFx1ZDZmMFx1ZDZmNVx1ZDZmY1x1ZDZmZFx1ZDcwMFx1ZDcwNFx1ZDcxMVx1ZDcxOFx1ZDcxOVx1ZDcxY1x1ZDcyMFx1ZDcyOFx1ZDcyOVx1ZDcyYlx1ZDcyZFx1ZDczNFx1'@;
put 'ZDczNVx1ZDczOFx1ZDczY1x1ZDc0NFx1ZDc0N1x1ZDc0OVx1ZDc1MFx1ZDc1MVx1ZDc1NFx1ZDc1Nlx1ZDc1N1x1ZDc1OFx1ZDc1OVx1ZDc2MFx1ZDc2MVx1ZDc2M1x1ZDc2NVx1ZDc2OVx1ZDc2Y1x1ZDc3MFx1ZDc3NFx1ZDc3Y1x1ZDc3ZFx1ZDc4MVx1ZDc4OFx1ZDc4OVx1ZDc4Y1x1ZDc5'@;
put 'MFx1ZDc5OFx1ZDc5OVx1ZDc5Ylx1ZDc5ZFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIwMF0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjAwXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIwMF1bZ11dPTUxMjAwK2cseVs1MTIwMCtnXT1fWzIwMF1bZ10pO2ZvcihfWzIwMl09Ilx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NGYzZFx1NGY3M1x1NTA0N1x1NTBmOVx1NTJhMFx1'@;
put 'NTNlZlx1NTQ3NVx1NTRlNVx1NTYwOVx1NWFjMVx1NWJiNlx1NjY4N1x1NjdiNlx1NjdiN1x1NjdlZlx1NmI0Y1x1NzNjMlx1NzVjMlx1N2EzY1x1ODJkYlx1ODMwNFx1ODg1N1x1ODg4OFx1OGEzNlx1OGNjOFx1OGRjZlx1OGVmYlx1OGZlNlx1OTlkNVx1NTIzYlx1NTM3NFx1NTQwNFx1NjA2'@;
put 'YVx1NjE2NFx1NmJiY1x1NzNjZlx1ODExYVx1ODliYVx1ODlkMlx1OTVhM1x1NGY4M1x1NTIwYVx1NThiZVx1NTk3OFx1NTllNlx1NWU3Mlx1NWU3OVx1NjFjN1x1NjNjMFx1Njc0Nlx1NjdlY1x1Njg3Zlx1NmY5N1x1NzY0ZVx1NzcwYlx1NzhmNVx1N2EwOFx1N2FmZlx1N2MyMVx1ODA5ZFx1'@;
put 'ODI2ZVx1ODI3MVx1OGFlYlx1OTU5M1x1NGU2Ylx1NTU5ZFx1NjZmN1x1NmUzNFx1NzhhM1x1N2FlZFx1ODQ1Ylx1ODkxMFx1ODc0ZVx1OTdhOFx1NTJkOFx1NTc0ZVx1NTgyYVx1NWQ0Y1x1NjExZlx1NjFiZVx1NjIyMVx1NjU2Mlx1NjdkMVx1NmE0NFx1NmUxYlx1NzUxOFx1NzViM1x1NzZl'@;
put 'M1x1NzdiMFx1N2QzYVx1OTBhZlx1OTQ1MVx1OTQ1Mlx1OWY5NVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIwMl0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjAyXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIwMl1bZ11dPTUxNzEyK2cseVs1MTcxMitnXT1fWzIwMl1bZ10pO2ZvcihfWzIw'@;
put 'M109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTMyM1x1NWNhY1x1NzUzMlx1'@;
put 'ODBkYlx1OTI0MFx1OTU5OFx1NTI1Ylx1NTgwOFx1NTlkY1x1NWNhMVx1NWQxN1x1NWViN1x1NWYzYVx1NWY0YVx1NjE3N1x1NmM1Zlx1NzU3YVx1NzU4Nlx1N2NlMFx1N2Q3M1x1N2RiMVx1N2Y4Y1x1ODE1NFx1ODIyMVx1ODU5MVx1ODk0MVx1OGIxYlx1OTJmY1x1OTY0ZFx1OWM0N1x1NGVj'@;
put 'Ylx1NGVmN1x1NTAwYlx1NTFmMVx1NTg0Zlx1NjEzN1x1NjEzZVx1NjE2OFx1NjUzOVx1NjllYVx1NmYxMVx1NzVhNVx1NzY4Nlx1NzZkNlx1N2I4N1x1ODJhNVx1ODRjYlx1ZjkwMFx1OTNhN1x1OTU4Ylx1NTU4MFx1NWJhMlx1NTc1MVx1ZjkwMVx1N2NiM1x1N2ZiOVx1OTFiNVx1NTAyOFx1'@;
put 'NTNiYlx1NWM0NVx1NWRlOFx1NjJkMlx1NjM2ZVx1NjRkYVx1NjRlN1x1NmUyMFx1NzBhY1x1Nzk1Ylx1OGRkZFx1OGUxZVx1ZjkwMlx1OTA3ZFx1OTI0NVx1OTJmOFx1NGU3ZVx1NGVmNlx1NTA2NVx1NWRmZVx1NWVmYVx1NjEwNlx1Njk1N1x1ODE3MVx1ODY1NFx1OGU0N1x1OTM3NVx1OWEy'@;
put 'Ylx1NGU1ZVx1NTA5MVx1Njc3MFx1Njg0MFx1NTEwOVx1NTI4ZFx1NTI5Mlx1NmFhMlx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIwM10ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjAzXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIwM11bZ11dPTUxOTY4K2cseVs1MTk2OCtnXT1fWzIwM11b'@;
put 'Z10pO2ZvcihfWzIwNF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzdiY1x1'@;
put 'OTIxMFx1OWVkNFx1NTJhYlx1NjAyZlx1OGZmMlx1NTA0OFx1NjFhOVx1NjNlZFx1NjRjYVx1NjgzY1x1NmE4NFx1NmZjMFx1ODE4OFx1ODlhMVx1OTY5NFx1NTgwNVx1NzI3ZFx1NzJhY1x1NzUwNFx1N2Q3OVx1N2U2ZFx1ODBhOVx1ODk4Ylx1OGI3NFx1OTA2M1x1OWQ1MVx1NjI4OVx1NmM3'@;
put 'YVx1NmY1NFx1N2Q1MFx1N2YzYVx1OGEyM1x1NTE3Y1x1NjE0YVx1N2I5ZFx1OGIxOVx1OTI1N1x1OTM4Y1x1NGVhY1x1NGZkM1x1NTAxZVx1NTBiZVx1NTEwNlx1NTJjMVx1NTJjZFx1NTM3Zlx1NTc3MFx1NTg4M1x1NWU5YVx1NWY5MVx1NjE3Nlx1NjFhY1x1NjRjZVx1NjU2Y1x1NjY2Zlx1'@;
put 'NjZiYlx1NjZmNFx1Njg5N1x1NmQ4N1x1NzA4NVx1NzBmMVx1NzQ5Zlx1NzRhNVx1NzRjYVx1NzVkOVx1Nzg2Y1x1NzhlY1x1N2FkZlx1N2FmNlx1N2Q0NVx1N2Q5M1x1ODAxNVx1ODAzZlx1ODExYlx1ODM5Nlx1OGI2Nlx1OGYxNVx1OTAxNVx1OTNlMVx1OTgwM1x1OTgzOFx1OWE1YVx1OWJl'@;
put 'OFx1NGZjMlx1NTU1M1x1NTgzYVx1NTk1MVx1NWI2M1x1NWM0Nlx1NjBiOFx1NjIxMlx1Njg0Mlx1NjhiMFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIwNF0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjA0XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIwNF1bZ11dPTUyMjI0K2cseVs1MjIy'@;
put 'NCtnXT1fWzIwNF1bZ10pO2ZvcihfWzIwNV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1NjhlOFx1NmVhYVx1NzU0Y1x1NzY3OFx1NzhjZVx1N2EzZFx1N2NmYlx1N2U2Ylx1N2U3Y1x1OGEwOFx1OGFhMVx1OGMzZlx1OTY4ZVx1OWRjNFx1NTNlNFx1NTNlOVx1NTQ0YVx1NTQ3MVx1NTZmYVx1NTlkMVx1NWI2NFx1NWMzYlx1NWVhYlx1NjJmN1x1NjUzN1x1NjU0NVx1NjU3'@;
put 'Mlx1NjZhMFx1NjdhZlx1NjljMVx1NmNiZFx1NzVmY1x1NzY5MFx1Nzc3ZVx1N2EzZlx1N2Y5NFx1ODAwM1x1ODBhMVx1ODE4Zlx1ODJlNlx1ODJmZFx1ODNmMFx1ODVjMVx1ODgzMVx1ODhiNFx1OGFhNVx1ZjkwM1x1OGY5Y1x1OTMyZVx1OTZjN1x1OTg2N1x1OWFkOFx1OWYxM1x1NTRlZFx1'@;
put 'NjU5Ylx1NjZmMlx1Njg4Zlx1N2E0MFx1OGMzN1x1OWQ2MFx1NTZmMFx1NTc2NFx1NWQxMVx1NjYwNlx1NjhiMVx1NjhjZFx1NmVmZVx1NzQyOFx1ODg5ZVx1OWJlNFx1NmM2OFx1ZjkwNFx1OWFhOFx1NGY5Ylx1NTE2Y1x1NTE3MVx1NTI5Zlx1NWI1NFx1NWRlNVx1NjA1MFx1NjA2ZFx1NjJm'@;
put 'MVx1NjNhN1x1NjUzYlx1NzNkOVx1N2E3YVx1ODZhM1x1OGNhMlx1OTc4Zlx1NGUzMlx1NWJlMVx1NjIwOFx1Njc5Y1x1NzRkY1x1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIwNV0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjA1XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIwNV1bZ11dPTUy'@;
put 'NDgwK2cseVs1MjQ4MCtnXT1fWzIwNV1bZ10pO2ZvcihfWzIwNl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1NzlkMVx1ODNkM1x1OGE4N1x1OGFiMlx1OGRlOFx1OTA0ZVx1OTM0Ylx1OTg0Nlx1NWVkM1x1NjllOFx1ODVmZlx1OTBlZFx1ZjkwNVx1NTFhMFx1NWI5OFx1NWJlY1x1NjE2M1x1NjhmYVx1NmIzZVx1NzA0Y1x1NzQyZlx1NzRkOFx1N2JhMVx1N2Y1MFx1ODNj'@;
put 'NVx1ODljMFx1OGNhYlx1OTVkY1x1OTkyOFx1NTIyZVx1NjA1ZFx1NjJlY1x1OTAwMlx1NGY4YVx1NTE0OVx1NTMyMVx1NThkOVx1NWVlM1x1NjZlMFx1NmQzOFx1NzA5YVx1NzJjMlx1NzNkNlx1N2I1MFx1ODBmMVx1OTQ1Ylx1NTM2Nlx1NjM5Ylx1N2Y2Ylx1NGU1Nlx1NTA4MFx1NTg0YVx1'@;
put 'NThkZVx1NjAyYVx1NjEyN1x1NjJkMFx1NjlkMFx1OWI0MVx1NWI4Zlx1N2QxOFx1ODBiMVx1OGY1Zlx1NGVhNFx1NTBkMVx1NTRhY1x1NTVhY1x1NWIwY1x1NWRhMFx1NWRlN1x1NjUyYVx1NjU0ZVx1NjgyMVx1NmE0Ylx1NzJlMVx1NzY4ZVx1NzdlZlx1N2Q1ZVx1N2ZmOVx1ODFhMFx1ODU0'@;
put 'ZVx1ODZkZlx1OGYwM1x1OGY0ZVx1OTBjYVx1OTkwM1x1OWE1NVx1OWJhYlx1NGUxOFx1NGU0NVx1NGU1ZFx1NGVjN1x1NGZmMVx1NTE3N1x1NTJmZVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIwNl0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjA2XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtf'@;
put 'WzIwNl1bZ11dPTUyNzM2K2cseVs1MjczNitnXT1fWzIwNl1bZ10pO2ZvcihfWzIwN109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTM0MFx1NTNlM1x1NTNlNVx1NTQ4ZVx1NTYxNFx1NTc3NVx1NTdhMlx1NWJjN1x1NWQ4N1x1NWVkMFx1NjFmY1x1NjJkOFx1NjU1MVx1NjdiOFx1NjdlOVx1NjljYlx1NmI1MFx1NmJjNlx1NmJlY1x1NmM0Mlx1NmU5ZFx1NzA3OFx1NzJk'@;
put 'N1x1NzM5Nlx1NzQwM1x1NzdiZlx1NzdlOVx1N2E3Nlx1N2Q3Zlx1ODAwOVx1ODFmY1x1ODIwNVx1ODIwYVx1ODJkZlx1ODg2Mlx1OGIzM1x1OGNmY1x1OGVjMFx1OTAxMVx1OTBiMVx1OTI2NFx1OTJiNlx1OTlkMlx1OWE0NVx1OWNlOVx1OWRkN1x1OWY5Y1x1NTcwYlx1NWM0MFx1ODNjYVx1'@;
put 'OTdhMFx1OTdhYlx1OWViNFx1NTQxYlx1N2E5OFx1N2ZhNFx1ODhkOVx1OGVjZFx1OTBlMVx1NTgwMFx1NWM0OFx1NjM5OFx1N2E5Zlx1NWJhZVx1NWYxM1x1N2E3OVx1N2FhZVx1ODI4ZVx1OGVhY1x1NTAyNlx1NTIzOFx1NTJmOFx1NTM3N1x1NTcwOFx1NjJmM1x1NjM3Mlx1NmIwYVx1NmRj'@;
put 'M1x1NzczN1x1NTNhNVx1NzM1N1x1ODU2OFx1OGU3Nlx1OTVkNVx1NjczYVx1NmFjM1x1NmY3MFx1OGE2ZFx1OGVjY1x1OTk0Ylx1ZjkwNlx1NjY3N1x1NmI3OFx1OGNiNFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIwN10ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjA3XVtnXS5jaGFyQ29k'@;
put 'ZUF0KDApJiYoSVtfWzIwN11bZ11dPTUyOTkyK2cseVs1Mjk5MitnXT1fWzIwN11bZ10pO2ZvcihfWzIwOF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OWIzY1x1ZjkwN1x1NTNlYlx1NTcyZFx1NTk0ZVx1NjNjNlx1NjlmYlx1NzNlYVx1Nzg0NVx1N2FiYVx1N2FjNVx1N2NmZVx1ODQ3NVx1ODk4Zlx1OGQ3M1x1OTAzNVx1OTVhOFx1NTJmYlx1NTc0N1x1NzU0N1x1N2I2'@;
put 'MFx1ODNjY1x1OTIxZVx1ZjkwOFx1NmE1OFx1NTE0Ylx1NTI0Ylx1NTI4N1x1NjIxZlx1NjhkOFx1Njk3NVx1OTY5OVx1NTBjNVx1NTJhNFx1NTJlNFx1NjFjM1x1NjVhNFx1NjgzOVx1NjlmZlx1NzQ3ZVx1N2I0Ylx1ODJiOVx1ODNlYlx1ODliMlx1OGIzOVx1OGZkMVx1OTk0OVx1ZjkwOVx1'@;
put 'NGVjYVx1NTk5N1x1NjRkMlx1NjYxMVx1NmE4ZVx1NzQzNFx1Nzk4MVx1NzliZFx1ODJhOVx1ODg3ZVx1ODg3Zlx1ODk1Zlx1ZjkwYVx1OTMyNlx1NGYwYlx1NTNjYVx1NjAyNVx1NjI3MVx1NmM3Mlx1N2QxYVx1N2Q2Nlx1NGU5OFx1NTE2Mlx1NzdkY1x1ODBhZlx1NGYwMVx1NGYwZVx1NTE3'@;
put 'Nlx1NTE4MFx1NTVkY1x1NTY2OFx1NTczYlx1NTdmYVx1NTdmY1x1NTkxNFx1NTk0N1x1NTk5M1x1NWJjNFx1NWM5MFx1NWQwZVx1NWRmMVx1NWU3ZVx1NWZjY1x1NjI4MFx1NjVkN1x1NjVlM1x1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIwOF0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjA4'@;
put 'XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIwOF1bZ11dPTUzMjQ4K2cseVs1MzI0OCtnXT1fWzIwOF1bZ10pO2ZvcihfWzIwOV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjcxZVx1NjcxZlx1Njc1ZVx1NjhjYlx1NjhjNFx1NmE1Zlx1NmIzYVx1NmMyM1x1NmM3ZFx1NmM4Mlx1NmRjN1x1NzM5OFx1NzQyNlx1NzQyYVx1NzQ4Mlx1NzRhM1x1NzU3OFx1NzU3Zlx1Nzg4'@;
put 'MVx1NzhlZlx1Nzk0MVx1Nzk0N1x1Nzk0OFx1Nzk3YVx1N2I5NVx1N2QwMFx1N2RiYVx1N2Y4OFx1ODAwNlx1ODAyZFx1ODA4Y1x1OGExOFx1OGI0Zlx1OGM0OFx1OGQ3N1x1OTMyMVx1OTMyNFx1OThlMlx1OTk1MVx1OWEwZVx1OWEwZlx1OWE2NVx1OWU5Mlx1N2RjYVx1NGY3Nlx1NTQwOVx1'@;
put 'NjJlZVx1Njg1NFx1OTFkMVx1NTVhYlx1NTEzYVx1ZjkwYlx1ZjkwY1x1NWExY1x1NjFlNlx1ZjkwZFx1NjJjZlx1NjJmZlx1ZjkwZVx1ZjkwZlx1ZjkxMFx1ZjkxMVx1ZjkxMlx1ZjkxM1x1OTBhM1x1ZjkxNFx1ZjkxNVx1ZjkxNlx1ZjkxN1x1ZjkxOFx1OGFmZVx1ZjkxOVx1ZjkxYVx1Zjkx'@;
put 'Ylx1ZjkxY1x1NjY5Nlx1ZjkxZFx1NzE1Nlx1ZjkxZVx1ZjkxZlx1OTZlM1x1ZjkyMFx1NjM0Zlx1NjM3YVx1NTM1N1x1ZjkyMVx1Njc4Zlx1Njk2MFx1NmU3M1x1ZjkyMlx1NzUzN1x1ZjkyM1x1ZjkyNFx1ZjkyNVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIwOV0ubGVuZ3RoOysrZyk2'@;
put 'NTUzMyE9PV9bMjA5XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIwOV1bZ11dPTUzNTA0K2cseVs1MzUwNCtnXT1fWzIwOV1bZ10pO2ZvcihfWzIxMF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1N2QwZFx1ZjkyNlx1ZjkyN1x1ODg3Mlx1NTZjYVx1NWExOFx1ZjkyOFx1ZjkyOVx1ZjkyYVx1ZjkyYlx1ZjkyY1x1NGU0M1x1ZjkyZFx1NTE2N1x1NTk0OFx1NjdmMFx1ODAx'@;
put 'MFx1ZjkyZVx1NTk3M1x1NWU3NFx1NjQ5YVx1NzljYVx1NWZmNVx1NjA2Y1x1NjJjOFx1NjM3Ylx1NWJlN1x1NWJkN1x1NTJhYVx1ZjkyZlx1NTk3NFx1NWYyOVx1NjAxMlx1ZjkzMFx1ZjkzMVx1ZjkzMlx1NzQ1OVx1ZjkzM1x1ZjkzNFx1ZjkzNVx1ZjkzNlx1ZjkzN1x1ZjkzOFx1OTlkMVx1'@;
put 'ZjkzOVx1ZjkzYVx1ZjkzYlx1ZjkzY1x1ZjkzZFx1ZjkzZVx1ZjkzZlx1Zjk0MFx1Zjk0MVx1Zjk0Mlx1Zjk0M1x1NmZjM1x1Zjk0NFx1Zjk0NVx1ODFiZlx1OGZiMlx1NjBmMVx1Zjk0Nlx1Zjk0N1x1ODE2Nlx1Zjk0OFx1Zjk0OVx1NWMzZlx1Zjk0YVx1Zjk0Ylx1Zjk0Y1x1Zjk0ZFx1Zjk0'@;
put 'ZVx1Zjk0Zlx1Zjk1MFx1Zjk1MVx1NWFlOVx1OGEyNVx1Njc3Ylx1N2QxMFx1Zjk1Mlx1Zjk1M1x1Zjk1NFx1Zjk1NVx1Zjk1Nlx1Zjk1N1x1ODBmZFx1Zjk1OFx1Zjk1OVx1NWMzY1x1NmNlNVx1NTMzZlx1NmViYVx1NTkxYVx1ODMzNlx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIxMF0u'@;
put 'bGVuZ3RoOysrZyk2NTUzMyE9PV9bMjEwXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIxMF1bZ11dPTUzNzYwK2cseVs1Mzc2MCtnXT1fWzIxMF1bZ10pO2ZvcihfWzIxMV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NGUzOVx1NGViNlx1NGY0Nlx1NTVhZVx1NTcxOFx1NThjN1x1NWY1Nlx1NjViN1x1NjVlNlx1NmE4MFx1NmJiNVx1NmU0ZFx1NzdlZFx1N2FlZlx1N2Mx'@;
put 'ZVx1N2RkZVx1ODZjYlx1ODg5Mlx1OTEzMlx1OTM1Ylx1NjRiYlx1NmZiZVx1NzM3YVx1NzViOFx1OTA1NFx1NTU1Nlx1NTc0ZFx1NjFiYVx1NjRkNFx1NjZjN1x1NmRlMVx1NmU1Ylx1NmY2ZFx1NmZiOVx1NzVmMFx1ODA0M1x1ODFiZFx1ODU0MVx1ODk4M1x1OGFjN1x1OGI1YVx1OTMxZlx1'@;
put 'NmM5M1x1NzU1M1x1N2I1NFx1OGUwZlx1OTA1ZFx1NTUxMFx1NTgwMlx1NTg1OFx1NWU2Mlx1NjIwN1x1NjQ5ZVx1NjhlMFx1NzU3Nlx1N2NkNlx1ODdiM1x1OWVlOFx1NGVlM1x1NTc4OFx1NTc2ZVx1NTkyN1x1NWMwZFx1NWNiMVx1NWUzNlx1NWY4NVx1NjIzNFx1NjRlMVx1NzNiM1x1ODFm'@;
put 'YVx1ODg4Ylx1OGNiOFx1OTY4YVx1OWVkYlx1NWI4NVx1NWZiN1x1NjBiM1x1NTAxMlx1NTIwMFx1NTIzMFx1NTcxNlx1NTgzNVx1NTg1N1x1NWMwZVx1NWM2MFx1NWNmNlx1NWQ4Ylx1NWVhNlx1NWY5Mlx1NjBiY1x1NjMxMVx1NjM4OVx1NjQxN1x1Njg0M1x1ZmZmZCIuc3BsaXQoIiIpLGc9'@;
put 'MDtnIT1fWzIxMV0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjExXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIxMV1bZ11dPTU0MDE2K2cseVs1NDAxNitnXT1fWzIxMV1bZ10pO2ZvcihfWzIxMl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjhmOVx1NmFjMlx1NmRkOFx1NmUyMVx1NmVkNFx1NmZlNFx1NzFmZVx1NzZkY1x1Nzc3OVx1NzliMVx1N2EzYlx1ODQwNFx1ODlh'@;
put 'OVx1OGNlZFx1OGRmM1x1OGU0OFx1OTAwM1x1OTAxNFx1OTA1M1x1OTBmZFx1OTM0ZFx1OTY3Nlx1OTdkY1x1NmJkMlx1NzAwNlx1NzI1OFx1NzJhMlx1NzM2OFx1Nzc2M1x1NzliZlx1N2JlNFx1N2U5Ylx1OGI4MFx1NThhOVx1NjBjN1x1NjU2Nlx1NjVmZFx1NjZiZVx1NmM4Y1x1NzExZVx1'@;
put 'NzFjOVx1OGM1YVx1OTgxM1x1NGU2ZFx1N2E4MVx1NGVkZFx1NTFhY1x1NTFjZFx1NTJkNVx1NTQwY1x1NjFhN1x1Njc3MVx1Njg1MFx1NjhkZlx1NmQxZVx1NmY3Y1x1NzViY1x1NzdiM1x1N2FlNVx1ODBmNFx1ODQ2M1x1OTI4NVx1NTE1Y1x1NjU5N1x1Njc1Y1x1Njc5M1x1NzVkOFx1N2Fj'@;
put 'N1x1ODM3M1x1Zjk1YVx1OGM0Nlx1OTAxN1x1OTgyZFx1NWM2Zlx1ODFjMFx1ODI5YVx1OTA0MVx1OTA2Zlx1OTIwZFx1NWY5N1x1NWQ5ZFx1NmE1OVx1NzFjOFx1NzY3Ylx1N2I0OVx1ODVlNFx1OGIwNFx1OTEyN1x1OWEzMFx1NTU4N1x1NjFmNlx1Zjk1Ylx1NzY2OVx1N2Y4NVx1ZmZmZCIu'@;
put 'c3BsaXQoIiIpLGc9MDtnIT1fWzIxMl0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjEyXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIxMl1bZ11dPTU0MjcyK2cseVs1NDI3MitnXT1fWzIxMl1bZ10pO2ZvcihfWzIxM109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODYzZlx1ODdiYVx1ODhmOFx1OTA4Zlx1Zjk1Y1x1NmQxYlx1NzBkOVx1NzNkZVx1N2Q2MVx1ODQzZFx1Zjk1'@;
put 'ZFx1OTE2YVx1OTlmMVx1Zjk1ZVx1NGU4Mlx1NTM3NVx1NmIwNFx1NmIxMlx1NzAzZVx1NzIxYlx1ODYyZFx1OWUxZVx1NTI0Y1x1OGZhM1x1NWQ1MFx1NjRlNVx1NjUyY1x1NmIxNlx1NmZlYlx1N2M0M1x1N2U5Y1x1ODVjZFx1ODk2NFx1ODliZFx1NjJjOVx1ODFkOFx1ODgxZlx1NWVjYVx1'@;
put 'NjcxN1x1NmQ2YVx1NzJmY1x1NzQwNVx1NzQ2Zlx1ODc4Mlx1OTBkZVx1NGY4Nlx1NWQwZFx1NWZhMFx1ODQwYVx1NTFiN1x1NjNhMFx1NzU2NVx1NGVhZVx1NTAwNlx1NTE2OVx1NTFjOVx1Njg4MVx1NmExMVx1N2NhZVx1N2NiMVx1N2NlN1x1ODI2Zlx1OGFkMlx1OGYxYlx1OTFjZlx1NGZi'@;
put 'Nlx1NTEzN1x1NTJmNVx1NTQ0Mlx1NWVlY1x1NjE2ZVx1NjIzZVx1NjVjNVx1NmFkYVx1NmZmZVx1NzkyYVx1ODVkY1x1ODgyM1x1OTVhZFx1OWE2Mlx1OWE2YVx1OWU5N1x1OWVjZVx1NTI5Ylx1NjZjNlx1NmI3N1x1NzAxZFx1NzkyYlx1OGY2Mlx1OTc0Mlx1NjE5MFx1NjIwMFx1NjUyM1x1'@;
put 'NmYyM1x1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIxM10ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjEzXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIxM11bZ11dPTU0NTI4K2cseVs1NDUyOCtnXT1fWzIxM11bZ10pO2ZvcihfWzIxNF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzE0OVx1NzQ4OVx1N2RmNFx1ODA2Zlx1ODRlZVx1OGYyNlx1OTAyM1x1OTM0YVx1NTFi'@;
put 'ZFx1NTIxN1x1NTJhM1x1NmQwY1x1NzBjOFx1ODhjMlx1NWVjOVx1NjU4Mlx1NmJhZVx1NmZjMlx1N2MzZVx1NzM3NVx1NGVlNFx1NGYzNlx1NTZmOVx1Zjk1Zlx1NWNiYVx1NWRiYVx1NjAxY1x1NzNiMlx1N2IyZFx1N2Y5YVx1N2ZjZVx1ODA0Nlx1OTAxZVx1OTIzNFx1OTZmNlx1OTc0OFx1'@;
put 'OTgxOFx1OWY2MVx1NGY4Ylx1NmZhN1x1NzlhZVx1OTFiNFx1OTZiN1x1NTJkZVx1Zjk2MFx1NjQ4OFx1NjRjNFx1NmFkM1x1NmY1ZVx1NzAxOFx1NzIxMFx1NzZlN1x1ODAwMVx1ODYwNlx1ODY1Y1x1OGRlZlx1OGYwNVx1OTczMlx1OWI2Zlx1OWRmYVx1OWU3NVx1Nzg4Y1x1Nzk3Zlx1N2Rh'@;
put 'MFx1ODNjOVx1OTMwNFx1OWU3Zlx1OWU5M1x1OGFkNlx1NThkZlx1NWYwNFx1NjcyN1x1NzAyN1x1NzRjZlx1N2M2MFx1ODA3ZVx1NTEyMVx1NzAyOFx1NzI2Mlx1NzhjYVx1OGNjMlx1OGNkYVx1OGNmNFx1OTZmN1x1NGU4Nlx1NTBkYVx1NWJlZVx1NWVkNlx1NjU5OVx1NzFjZVx1NzY0Mlx1'@;
put 'NzdhZFx1ODA0YVx1ODRmY1x1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIxNF0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjE0XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIxNF1bZ11dPTU0Nzg0K2cseVs1NDc4NCtnXT1fWzIxNF1bZ10pO2ZvcihfWzIxNV09Ilx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTA3Y1x1OWIyN1x1OWY4ZFx1NThkOFx1NWE0MVx1NWM2Mlx1NmEx'@;
put 'M1x1NmRkYVx1NmYwZlx1NzYzYlx1N2QyZlx1N2UzN1x1ODUxZVx1ODkzOFx1OTNlNFx1OTY0Ylx1NTI4OVx1NjVkMlx1NjdmM1x1NjliNFx1NmQ0MVx1NmU5Y1x1NzAwZlx1NzQwOVx1NzQ2MFx1NzU1OVx1NzYyNFx1Nzg2Ylx1OGIyY1x1OTg1ZVx1NTE2ZFx1NjIyZVx1OTY3OFx1NGY5Nlx1'@;
put 'NTAyYlx1NWQxOVx1NmRlYVx1N2RiOFx1OGYyYVx1NWY4Ylx1NjE0NFx1NjgxN1x1Zjk2MVx1OTY4Nlx1NTJkMlx1ODA4Ylx1NTFkY1x1NTFjY1x1Njk1ZVx1N2ExY1x1N2RiZVx1ODNmMVx1OTY3NVx1NGZkYVx1NTIyOVx1NTM5OFx1NTQwZlx1NTUwZVx1NWM2NVx1NjBhN1x1Njc0ZVx1Njhh'@;
put 'OFx1NmQ2Y1x1NzI4MVx1NzJmOFx1NzQwNlx1NzQ4M1x1Zjk2Mlx1NzVlMlx1N2M2Y1x1N2Y3OVx1N2ZiOFx1ODM4OVx1ODhjZlx1ODhlMVx1OTFjY1x1OTFkMFx1OTZlMlx1OWJjOVx1NTQxZFx1NmY3ZVx1NzFkMFx1NzQ5OFx1ODVmYVx1OGVhYVx1OTZhM1x1OWM1N1x1OWU5Zlx1Njc5N1x1'@;
put 'NmRjYlx1NzQzM1x1ODFlOFx1OTcxNlx1NzgyY1x1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIxNV0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjE1XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIxNV1bZ11dPTU1MDQwK2cseVs1NTA0MCtnXT1fWzIxNV1bZ10pO2ZvcihfWzIxNl09Ilx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1N2FjYlx1N2IyMFx1N2M5Mlx1NjQ2OVx1NzQ2'@;
put 'YVx1NzVmMlx1NzhiY1x1NzhlOFx1OTlhY1x1OWI1NFx1OWViYlx1NWJkZVx1NWU1NVx1NmYyMFx1ODE5Y1x1ODNhYlx1OTA4OFx1NGUwN1x1NTM0ZFx1NWEyOVx1NWRkMlx1NWY0ZVx1NjE2Mlx1NjMzZFx1NjY2OVx1NjZmY1x1NmVmZlx1NmYyYlx1NzA2M1x1Nzc5ZVx1ODQyY1x1ODUxM1x1'@;
put 'ODgzYlx1OGYxM1x1OTk0NVx1OWMzYlx1NTUxY1x1NjJiOVx1NjcyYlx1NmNhYlx1ODMwOVx1ODk2YVx1OTc3YVx1NGVhMVx1NTk4NFx1NWZkOFx1NWZkOVx1NjcxYlx1N2RiMlx1N2Y1NFx1ODI5Mlx1ODMyYlx1ODNiZFx1OGYxZVx1OTA5OVx1NTdjYlx1NTliOVx1NWE5Mlx1NWJkMFx1NjYy'@;
put 'N1x1Njc5YVx1Njg4NVx1NmJjZlx1NzE2NFx1N2Y3NVx1OGNiN1x1OGNlM1x1OTA4MVx1OWI0NVx1ODEwOFx1OGM4YVx1OTY0Y1x1OWE0MFx1OWVhNVx1NWI1Zlx1NmMxM1x1NzMxYlx1NzZmMlx1NzZkZlx1ODQwY1x1NTFhYVx1ODk5M1x1NTE0ZFx1NTE5NVx1NTJjOVx1NjhjOVx1NmM5NFx1'@;
put 'NzcwNFx1NzcyMFx1N2RiZlx1N2RlY1x1OTc2Mlx1OWViNVx1NmVjNVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIxNl0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjE2XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIxNl1bZ11dPTU1Mjk2K2cseVs1NTI5NitnXT1fWzIxNl1bZ10pO2Zvcihf'@;
put 'WzIxN109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODUxMVx1NTFhNVx1NTQw'@;
put 'ZFx1NTQ3ZFx1NjYwZVx1NjY5ZFx1NjkyN1x1NmU5Zlx1NzZiZlx1Nzc5MVx1ODMxN1x1ODRjMlx1ODc5Zlx1OTE2OVx1OTI5OFx1OWNmNFx1ODg4Mlx1NGZhZVx1NTE5Mlx1NTJkZlx1NTljNlx1NWUzZFx1NjE1NVx1NjQ3OFx1NjQ3OVx1NjZhZVx1NjdkMFx1NmEyMVx1NmJjZFx1NmJkYlx1'@;
put 'NzI1Zlx1NzI2MVx1NzQ0MVx1NzczOFx1NzdkYlx1ODAxN1x1ODJiY1x1ODMwNVx1OGIwMFx1OGIyOFx1OGM4Y1x1NjcyOFx1NmM5MFx1NzI2N1x1NzZlZVx1Nzc2Nlx1N2E0Nlx1OWRhOVx1NmI3Zlx1NmM5Mlx1NTkyMlx1NjcyNlx1ODQ5OVx1NTM2Zlx1NTg5M1x1NTk5OVx1NWVkZlx1NjNj'@;
put 'Zlx1NjYzNFx1Njc3M1x1NmUzYVx1NzMyYlx1N2FkN1x1ODJkN1x1OTMyOFx1NTJkOVx1NWRlYlx1NjFhZVx1NjFjYlx1NjIwYVx1NjJjN1x1NjRhYlx1NjVlMFx1Njk1OVx1NmI2Nlx1NmJjYlx1NzEyMVx1NzNmN1x1NzU1ZFx1N2U0Nlx1ODIxZVx1ODMwMlx1ODU2YVx1OGFhM1x1OGNiZlx1'@;
put 'OTcyN1x1OWQ2MVx1NThhOFx1OWVkOFx1NTAxMVx1NTIwZVx1NTQzYlx1NTU0Zlx1NjU4N1x1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIxN10ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjE3XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIxN11bZ11dPTU1NTUyK2cseVs1NTU1MitnXT1fWzIx'@;
put 'N11bZ10pO2ZvcihfWzIxOF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmM3'@;
put 'Nlx1N2QwYVx1N2QwYlx1ODA1ZVx1ODY4YVx1OTU4MFx1OTZlZlx1NTJmZlx1NmM5NVx1NzI2OVx1NTQ3M1x1NWE5YVx1NWMzZVx1NWQ0Ylx1NWY0Y1x1NWZhZVx1NjcyYVx1NjhiNlx1Njk2M1x1NmUzY1x1NmU0NFx1NzcwOVx1N2M3M1x1N2Y4ZVx1ODU4N1x1OGIwZVx1OGZmN1x1OTc2MVx1'@;
put 'OWVmNFx1NWNiN1x1NjBiNlx1NjEwZFx1NjFhYlx1NjU0Zlx1NjVmYlx1NjVmY1x1NmMxMVx1NmNlZlx1NzM5Zlx1NzNjOVx1N2RlMVx1OTU5NFx1NWJjNlx1ODcxY1x1OGIxMFx1NTI1ZFx1NTM1YVx1NjJjZFx1NjQwZlx1NjRiMlx1NjczNFx1NmEzOFx1NmNjYVx1NzNjMFx1NzQ5ZVx1N2I5'@;
put 'NFx1N2M5NVx1N2UxYlx1ODE4YVx1ODIzNlx1ODU4NFx1OGZlYlx1OTZmOVx1OTljMVx1NGYzNFx1NTM0YVx1NTNjZFx1NTNkYlx1NjJjY1x1NjQyY1x1NjUwMFx1NjU5MVx1NjljM1x1NmNlZVx1NmY1OFx1NzNlZFx1NzU1NFx1NzYyMlx1NzZlNFx1NzZmY1x1NzhkMFx1NzhmYlx1NzkyY1x1'@;
put 'N2Q0Nlx1ODIyY1x1ODdlMFx1OGZkNFx1OTgxMlx1OThlZlx1NTJjM1x1NjJkNFx1NjRhNVx1NmUyNFx1NmY1MVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIxOF0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjE4XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIxOF1bZ11dPTU1ODA4K2cseVs1'@;
put 'NTgwOCtnXT1fWzIxOF1bZ10pO2ZvcihfWzIxOV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1NzY3Y1x1OGRjYlx1OTFiMVx1OTI2Mlx1OWFlZVx1OWI0M1x1NTAyM1x1NTA4ZFx1NTc0YVx1NTlhOFx1NWMyOFx1NWU0N1x1NWY3N1x1NjIzZlx1NjUzZVx1NjViOVx1NjVjMVx1NjYwOVx1Njc4Ylx1Njk5Y1x1NmVjMlx1NzhjNVx1N2QyMVx1ODBhYVx1ODE4MFx1ODIyYlx1'@;
put 'ODJiM1x1ODRhMVx1ODY4Y1x1OGEyYVx1OGIxN1x1OTBhNlx1OTYzMlx1OWY5MFx1NTAwZFx1NGZmM1x1Zjk2M1x1NTdmOVx1NWY5OFx1NjJkY1x1NjM5Mlx1Njc2Zlx1NmU0M1x1NzExOVx1NzZjM1x1ODBjY1x1ODBkYVx1ODhmNFx1ODhmNVx1ODkxOVx1OGNlMFx1OGYyOVx1OTE0ZFx1OTY2'@;
put 'YVx1NGYyZlx1NGY3MFx1NWUxYlx1NjdjZlx1NjgyMlx1NzY3ZFx1NzY3ZVx1OWI0NFx1NWU2MVx1NmEwYVx1NzE2OVx1NzFkNFx1NzU2YVx1Zjk2NFx1N2U0MVx1ODU0M1x1ODVlOVx1OThkY1x1NGYxMFx1N2I0Zlx1N2Y3MFx1OTVhNVx1NTFlMVx1NWUwNlx1NjhiNVx1NmMzZVx1NmM0ZVx1'@;
put 'NmNkYlx1NzJhZlx1N2JjNFx1ODMwM1x1NmNkNVx1NzQzYVx1NTBmYlx1NTI4OFx1NThjMVx1NjRkOFx1NmE5N1x1NzRhN1x1NzY1Nlx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIxOV0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjE5XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIxOV1bZ11d'@;
put 'PTU2MDY0K2cseVs1NjA2NCtnXT1fWzIxOV1bZ10pO2ZvcihfWzIyMF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzhhN1x1ODYxN1x1OTVlMlx1OTczOVx1Zjk2NVx1NTM1ZVx1NWYwMVx1OGI4YVx1OGZhOFx1OGZhZlx1OTA4YVx1NTIyNVx1NzdhNVx1OWM0OVx1OWYwOFx1NGUxOVx1NTAwMlx1NTE3NVx1NWM1Ylx1NWU3N1x1NjYxZVx1NjYzYVx1NjdjNFx1NjhjNVx1'@;
put 'NzBiM1x1NzUwMVx1NzVjNVx1NzljOVx1N2FkZFx1OGYyN1x1OTkyMFx1OWEwOFx1NGZkZFx1NTgyMVx1NTgzMVx1NWJmNlx1NjY2ZVx1NmI2NVx1NmQxMVx1NmU3YVx1NmY3ZFx1NzNlNFx1NzUyYlx1ODNlOVx1ODhkY1x1ODkxM1x1OGI1Y1x1OGYxNFx1NGYwZlx1NTBkNVx1NTMxMFx1NTM1'@;
put 'Y1x1NWI5M1x1NWZhOVx1NjcwZFx1Nzk4Zlx1ODE3OVx1ODMyZlx1ODUxNFx1ODkwN1x1ODk4Nlx1OGYzOVx1OGYzYlx1OTlhNVx1OWMxMlx1NjcyY1x1NGU3Nlx1NGZmOFx1NTk0OVx1NWMwMVx1NWNlZlx1NWNmMFx1NjM2N1x1NjhkMlx1NzBmZFx1NzFhMlx1NzQyYlx1N2UyYlx1ODRlY1x1'@;
put 'ODcwMlx1OTAyMlx1OTJkMlx1OWNmM1x1NGUwZFx1NGVkOFx1NGZlZlx1NTA4NVx1NTI1Nlx1NTI2Zlx1NTQyNlx1NTQ5MFx1NTdlMFx1NTkyYlx1NWE2Nlx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIyMF0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjIwXVtnXS5jaGFyQ29kZUF0KDApJiYo'@;
put 'SVtfWzIyMF1bZ11dPTU2MzIwK2cseVs1NjMyMCtnXT1fWzIyMF1bZ10pO2ZvcihfWzIyMV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NWI1YVx1NWI3NVx1NWJjY1x1NWU5Y1x1Zjk2Nlx1NjI3Nlx1NjU3N1x1NjVhN1x1NmQ2ZVx1NmVhNVx1NzIzNlx1N2IyNlx1N2MzZlx1N2YzNlx1ODE1MFx1ODE1MVx1ODE5YVx1ODI0MFx1ODI5OVx1ODNhOVx1OGEwM1x1OGNhMFx1'@;
put 'OGNlNlx1OGNmYlx1OGQ3NFx1OGRiYVx1OTBlOFx1OTFkY1x1OTYxY1x1OTY0NFx1OTlkOVx1OWNlN1x1NTMxN1x1NTIwNlx1NTQyOVx1NTY3NFx1NThiM1x1NTk1NFx1NTk2ZVx1NWZmZlx1NjFhNFx1NjI2ZVx1NjYxMFx1NmM3ZVx1NzExYVx1NzZjNlx1N2M4OVx1N2NkZVx1N2QxYlx1ODJh'@;
put 'Y1x1OGNjMVx1OTZmMFx1Zjk2N1x1NGY1Ylx1NWYxN1x1NWY3Zlx1NjJjMlx1NWQyOVx1NjcwYlx1NjhkYVx1Nzg3Y1x1N2U0M1x1OWQ2Y1x1NGUxNVx1NTA5OVx1NTMxNVx1NTMyYVx1NTM1MVx1NTk4M1x1NWE2Mlx1NWU4N1x1NjBiMlx1NjE4YVx1NjI0OVx1NjI3OVx1NjU5MFx1Njc4N1x1'@;
put 'NjlhN1x1NmJkNFx1NmJkNlx1NmJkN1x1NmJkOFx1NmNiOFx1Zjk2OFx1NzQzNVx1NzVmYVx1NzgxMlx1Nzg5MVx1NzlkNVx1NzlkOFx1N2M4M1x1N2RjYlx1N2ZlMVx1ODBhNVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIyMV0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjIxXVtnXS5jaGFy'@;
put 'Q29kZUF0KDApJiYoSVtfWzIyMV1bZ11dPTU2NTc2K2cseVs1NjU3NitnXT1fWzIyMV1bZ10pO2ZvcihfWzIyMl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODEzZVx1ODFjMlx1ODNmMlx1ODcxYVx1ODhlOFx1OGFiOVx1OGI2Y1x1OGNiYlx1OTExOVx1OTc1ZVx1OThkYlx1OWYzYlx1NTZhY1x1NWIyYVx1NWY2Y1x1NjU4Y1x1NmFiM1x1NmJhZlx1NmQ1Y1x1NmZmMVx1'@;
put 'NzAxNVx1NzI1ZFx1NzNhZFx1OGNhN1x1OGNkM1x1OTgzYlx1NjE5MVx1NmMzN1x1ODA1OFx1OWEwMVx1NGU0ZFx1NGU4Ylx1NGU5Ylx1NGVkNVx1NGYzYVx1NGYzY1x1NGY3Zlx1NGZkZlx1NTBmZlx1NTNmMlx1NTNmOFx1NTUwNlx1NTVlM1x1NTZkYlx1NThlYlx1NTk2Mlx1NWExMVx1NWJl'@;
put 'Ylx1NWJmYVx1NWMwNFx1NWRmM1x1NWUyYlx1NWY5OVx1NjAxZFx1NjM2OFx1NjU5Y1x1NjVhZlx1NjdmNlx1NjdmYlx1NjhhZFx1NmI3Ylx1NmM5OVx1NmNkN1x1NmUyM1x1NzAwOVx1NzM0NVx1NzgwMlx1NzkzZVx1Nzk0MFx1Nzk2MFx1NzljMVx1N2JlOVx1N2QxN1x1N2Q3Mlx1ODA4Nlx1'@;
put 'ODIwZFx1ODM4ZVx1ODRkMVx1ODZjN1x1ODhkZlx1OGE1MFx1OGE1ZVx1OGIxZFx1OGNkY1x1OGQ2Nlx1OGZhZFx1OTBhYVx1OThmY1x1OTlkZlx1OWU5ZFx1NTI0YVx1Zjk2OVx1NjcxNFx1Zjk2YVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIyMl0ubGVuZ3RoOysrZyk2NTUzMyE9PV9b'@;
put 'MjIyXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIyMl1bZ11dPTU2ODMyK2cseVs1NjgzMitnXT1fWzIyMl1bZ10pO2ZvcihfWzIyM109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTA5OFx1NTIyYVx1NWM3MVx1NjU2M1x1NmM1NVx1NzNjYVx1NzUyM1x1NzU5ZFx1N2I5N1x1ODQ5Y1x1OTE3OFx1OTczMFx1NGU3N1x1NjQ5Mlx1NmJiYVx1NzE1ZVx1ODVhOVx1NGUwOVx1'@;
put 'Zjk2Ylx1Njc0OVx1NjhlZVx1NmUxN1x1ODI5Zlx1ODUxOFx1ODg2Ylx1NjNmN1x1NmY4MVx1OTIxMlx1OThhZlx1NGUwYVx1NTBiN1x1NTBjZlx1NTExZlx1NTU0Nlx1NTVhYVx1NTYxN1x1NWI0MFx1NWMxOVx1NWNlMFx1NWUzOFx1NWU4YVx1NWVhMFx1NWVjMlx1NjBmM1x1Njg1MVx1NmE2'@;
put 'MVx1NmU1OFx1NzIzZFx1NzI0MFx1NzJjMFx1NzZmOFx1Nzk2NVx1N2JiMVx1N2ZkNFx1ODhmM1x1ODlmNFx1OGE3M1x1OGM2MVx1OGNkZVx1OTcxY1x1NTg1ZVx1NzRiZFx1OGNmZFx1NTVjN1x1Zjk2Y1x1N2E2MVx1N2QyMlx1ODI3Mlx1NzI3Mlx1NzUxZlx1NzUyNVx1Zjk2ZFx1N2IxOVx1'@;
put 'NTg4NVx1NThmYlx1NWRiY1x1NWU4Zlx1NWViNlx1NWY5MFx1NjA1NVx1NjI5Mlx1NjM3Zlx1NjU0ZFx1NjY5MVx1NjZkOVx1NjZmOFx1NjgxNlx1NjhmMlx1NzI4MFx1NzQ1ZVx1N2I2ZVx1N2Q2ZVx1N2RkNlx1N2Y3Mlx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIyM10ubGVuZ3RoOysr'@;
put 'Zyk2NTUzMyE9PV9bMjIzXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIyM11bZ11dPTU3MDg4K2cseVs1NzA4OCtnXT1fWzIyM11bZ10pO2ZvcihfWzIyNF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODBlNVx1ODIxMlx1ODVhZlx1ODk3Zlx1OGE5M1x1OTAxZFx1OTJlNFx1OWVjZFx1OWYyMFx1NTkxNVx1NTk2ZFx1NWUyZFx1NjBkY1x1NjYxNFx1NjY3M1x1Njc5MFx1'@;
put 'NmM1MFx1NmRjNVx1NmY1Zlx1NzdmM1x1NzhhOVx1ODRjNlx1OTFjYlx1OTMyYlx1NGVkOVx1NTBjYVx1NTE0OFx1NTU4NFx1NWIwYlx1NWJhM1x1NjI0N1x1NjU3ZVx1NjVjYlx1NmUzMlx1NzE3ZFx1NzQwMVx1NzQ0NFx1NzQ4N1x1NzRiZlx1NzY2Y1x1NzlhYVx1N2RkYVx1N2U1NVx1N2Zh'@;
put 'OFx1ODE3YVx1ODFiM1x1ODIzOVx1ODYxYVx1ODdlY1x1OGE3NVx1OGRlM1x1OTA3OFx1OTI5MVx1OTQyNVx1OTk0ZFx1OWJhZVx1NTM2OFx1NWM1MVx1Njk1NFx1NmNjNFx1NmQyOVx1NmUyYlx1ODIwY1x1ODU5Ylx1ODkzYlx1OGEyZFx1OGFhYVx1OTZlYVx1OWY2N1x1NTI2MVx1NjZiOVx1'@;
put 'NmJiMlx1N2U5Nlx1ODdmZVx1OGQwZFx1OTU4M1x1OTY1ZFx1NjUxZFx1NmQ4OVx1NzFlZVx1Zjk2ZVx1NTdjZVx1NTlkM1x1NWJhY1x1NjAyN1x1NjBmYVx1NjIxMFx1NjYxZlx1NjY1Zlx1NzMyOVx1NzNmOVx1NzZkYlx1NzcwMVx1N2I2Y1x1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIy'@;
put 'NF0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjI0XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIyNF1bZ11dPTU3MzQ0K2cseVs1NzM0NCtnXT1fWzIyNF1bZ10pO2ZvcihfWzIyNV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODA1Nlx1ODA3Mlx1ODE2NVx1OGFhMFx1OTE5Mlx1NGUxNlx1NTJlMlx1NmI3Mlx1NmQxN1x1N2EwNVx1N2IzOVx1N2QzMFx1Zjk2Zlx1OGNiMFx1'@;
put 'NTNlY1x1NTYyZlx1NTg1MVx1NWJiNVx1NWMwZlx1NWMxMVx1NWRlMlx1NjI0MFx1NjM4M1x1NjQxNFx1NjYyZFx1NjhiM1x1NmNiY1x1NmQ4OFx1NmVhZlx1NzAxZlx1NzBhNFx1NzFkMlx1NzUyNlx1NzU4Zlx1NzU4ZVx1NzYxOVx1N2IxMVx1N2JlMFx1N2MyYlx1N2QyMFx1N2QzOVx1ODUy'@;
put 'Y1x1ODU2ZFx1ODYwN1x1OGEzNFx1OTAwZFx1OTA2MVx1OTBiNVx1OTJiN1x1OTdmNlx1OWEzN1x1NGZkN1x1NWM2Y1x1Njc1Zlx1NmQ5MVx1N2M5Zlx1N2U4Y1x1OGIxNlx1OGQxNlx1OTAxZlx1NWI2Ylx1NWRmZFx1NjQwZFx1ODRjMFx1OTA1Y1x1OThlMVx1NzM4N1x1NWI4Ylx1NjA5YVx1'@;
put 'Njc3ZVx1NmRkZVx1OGExZlx1OGFhNlx1OTAwMVx1OTgwY1x1NTIzN1x1Zjk3MFx1NzA1MVx1Nzg4ZVx1OTM5Nlx1ODg3MFx1OTFkN1x1NGZlZVx1NTNkN1x1NTVmZFx1NTZkYVx1NTc4Mlx1NThmZFx1NWFjMlx1NWI4OFx1NWNhYlx1NWNjMFx1NWUyNVx1NjEwMVx1ZmZmZCIuc3BsaXQoIiIp'@;
put 'LGc9MDtnIT1fWzIyNV0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjI1XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIyNV1bZ11dPTU3NjAwK2cseVs1NzYwMCtnXT1fWzIyNV1bZ10pO2ZvcihfWzIyNl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjIwZFx1NjI0Ylx1NjM4OFx1NjQxY1x1NjUzNlx1NjU3OFx1NmEzOVx1NmI4YVx1NmMzNFx1NmQxOVx1NmYzMVx1NzFlN1x1'@;
put 'NzJlOVx1NzM3OFx1NzQwN1x1NzRiMlx1NzYyNlx1Nzc2MVx1NzljMFx1N2E1N1x1N2FlYVx1N2NiOVx1N2Q4Zlx1N2RhY1x1N2U2MVx1N2Y5ZVx1ODEyOVx1ODMzMVx1ODQ5MFx1ODRkYVx1ODVlYVx1ODg5Nlx1OGFiMFx1OGI5MFx1OGYzOFx1OTA0Mlx1OTA4M1x1OTE2Y1x1OTI5Nlx1OTJi'@;
put 'OVx1OTY4Ylx1OTZhN1x1OTZhOFx1OTZkNlx1OTcwMFx1OTgwOFx1OTk5Nlx1OWFkM1x1OWIxYVx1NTNkNFx1NTg3ZVx1NTkxOVx1NWI3MFx1NWJiZlx1NmRkMVx1NmY1YVx1NzE5Zlx1NzQyMVx1NzRiOVx1ODA4NVx1ODNmZFx1NWRlMVx1NWY4N1x1NWZhYVx1NjA0Mlx1NjVlY1x1NjgxMlx1'@;
put 'Njk2Zlx1NmE1M1x1NmI4OVx1NmQzNVx1NmRmM1x1NzNlM1x1NzZmZVx1NzdhY1x1N2I0ZFx1N2QxNFx1ODEyM1x1ODIxY1x1ODM0MFx1ODRmNFx1ODU2M1x1OGE2Mlx1OGFjNFx1OTE4N1x1OTMxZVx1OTgwNlx1OTliNFx1NjIwY1x1ODg1M1x1OGZmMFx1OTI2NVx1NWQwN1x1NWQyN1x1ZmZm'@;
put 'ZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIyNl0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjI2XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIyNl1bZ11dPTU3ODU2K2cseVs1Nzg1NitnXT1fWzIyNl1bZ10pO2ZvcihfWzIyN109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NWQ2OVx1NzQ1Zlx1ODE5ZFx1ODc2OFx1NmZkNVx1NjJmZVx1N2ZkMlx1ODkzNlx1ODk3Mlx1NGUxZVx1'@;
put 'NGU1OFx1NTBlN1x1NTJkZFx1NTM0N1x1NjI3Zlx1NjYwN1x1N2U2OVx1ODgwNVx1OTY1ZVx1NGY4ZFx1NTMxOVx1NTYzNlx1NTljYlx1NWFhNFx1NWMzOFx1NWM0ZVx1NWM0ZFx1NWUwMlx1NWYxMVx1NjA0M1x1NjViZFx1NjYyZlx1NjY0Mlx1NjdiZVx1NjdmNFx1NzMxY1x1NzdlMlx1Nzkz'@;
put 'YVx1N2ZjNVx1ODQ5NFx1ODRjZFx1ODk5Nlx1OGE2Nlx1OGE2OVx1OGFlMVx1OGM1NVx1OGM3YVx1NTdmNFx1NWJkNFx1NWYwZlx1NjA2Zlx1NjJlZFx1NjkwZFx1NmI5Nlx1NmU1Y1x1NzE4NFx1N2JkMlx1ODc1NVx1OGI1OFx1OGVmZVx1OThkZlx1OThmZVx1NGYzOFx1NGY4MVx1NGZlMVx1'@;
put 'NTQ3Ylx1NWEyMFx1NWJiOFx1NjEzY1x1NjViMFx1NjY2OFx1NzFmY1x1NzUzM1x1Nzk1ZVx1N2QzM1x1ODE0ZVx1ODFlM1x1ODM5OFx1ODVhYVx1ODVjZVx1ODcwM1x1OGEwYVx1OGVhYlx1OGY5Ylx1Zjk3MVx1OGZjNVx1NTkzMVx1NWJhNFx1NWJlNlx1NjA4OVx1NWJlOVx1NWMwYlx1NWZj'@;
put 'M1x1NmM4MVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIyN10ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjI3XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIyN11bZ11dPTU4MTEyK2cseVs1ODExMitnXT1fWzIyN11bZ10pO2ZvcihfWzIyOF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Zjk3Mlx1NmRmMVx1NzAwYlx1NzUxYVx1ODJhZlx1OGFmNlx1NGVjMFx1NTM0MVx1'@;
put 'Zjk3M1x1OTZkOVx1NmMwZlx1NGU5ZVx1NGZjNFx1NTE1Mlx1NTU1ZVx1NWEyNVx1NWNlOFx1NjIxMVx1NzI1OVx1ODJiZFx1ODNhYVx1ODZmZVx1ODg1OVx1OGExZFx1OTYzZlx1OTZjNVx1OTkxM1x1OWQwOVx1OWQ1ZFx1NTgwYVx1NWNiM1x1NWRiZFx1NWU0NFx1NjBlMVx1NjExNVx1NjNl'@;
put 'MVx1NmEwMlx1NmUyNVx1OTEwMlx1OTM1NFx1OTg0ZVx1OWMxMFx1OWY3N1x1NWI4OVx1NWNiOFx1NjMwOVx1NjY0Zlx1Njg0OFx1NzczY1x1OTZjMVx1OTc4ZFx1OTg1NFx1OWI5Zlx1NjVhMVx1OGIwMVx1OGVjYlx1OTViY1x1NTUzNVx1NWNhOVx1NWRkNlx1NWViNVx1NjY5N1x1NzY0Y1x1'@;
put 'ODNmNFx1OTVjN1x1NThkM1x1NjJiY1x1NzJjZVx1OWQyOFx1NGVmMFx1NTkyZVx1NjAwZlx1NjYzYlx1NmI4M1x1NzllN1x1OWQyNlx1NTM5M1x1NTRjMFx1NTdjM1x1NWQxNlx1NjExYlx1NjZkNlx1NmRhZlx1Nzg4ZFx1ODI3ZVx1OTY5OFx1OTc0NFx1NTM4NFx1NjI3Y1x1NjM5Nlx1NmRi'@;
put 'Mlx1N2UwYVx1ODE0Ylx1OTg0ZFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIyOF0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjI4XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIyOF1bZ11dPTU4MzY4K2cseVs1ODM2OCtnXT1fWzIyOF1bZ10pO2ZvcihfWzIyOV09Ilx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmFmYlx1N2Y0Y1x1OWRhZlx1OWUxYVx1NGU1Zlx1NTAzYlx1'@;
put 'NTFiNlx1NTkxY1x1NjBmOVx1NjNmNlx1NjkzMFx1NzIzYVx1ODAzNlx1Zjk3NFx1OTFjZVx1NWYzMVx1Zjk3NVx1Zjk3Nlx1N2QwNFx1ODJlNVx1ODQ2Zlx1ODRiYlx1ODVlNVx1OGU4ZFx1Zjk3N1x1NGY2Zlx1Zjk3OFx1Zjk3OVx1NThlNFx1NWI0M1x1NjA1OVx1NjNkYVx1NjUxOFx1NjU2'@;
put 'ZFx1NjY5OFx1Zjk3YVx1Njk0YVx1NmEyM1x1NmQwYlx1NzAwMVx1NzE2Y1x1NzVkMlx1NzYwZFx1NzliM1x1N2E3MFx1Zjk3Ylx1N2Y4YVx1Zjk3Y1x1ODk0NFx1Zjk3ZFx1OGI5M1x1OTFjMFx1OTY3ZFx1Zjk3ZVx1OTkwYVx1NTcwNFx1NWZhMVx1NjViY1x1NmYwMVx1NzYwMFx1NzlhNlx1'@;
put 'OGE5ZVx1OTlhZFx1OWI1YVx1OWY2Y1x1NTEwNFx1NjFiNlx1NjI5MVx1NmE4ZFx1ODFjNlx1NTA0M1x1NTgzMFx1NWY2Nlx1NzEwOVx1OGEwMFx1OGFmYVx1NWI3Y1x1ODYxNlx1NGZmYVx1NTEzY1x1NTZiNFx1NTk0NFx1NjNhOVx1NmRmOVx1NWRhYVx1Njk2ZFx1NTE4Nlx1NGU4OFx1NGY1'@;
put 'OVx1Zjk3Zlx1Zjk4MFx1Zjk4MVx1NTk4Mlx1Zjk4Mlx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIyOV0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjI5XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIyOV1bZ11dPTU4NjI0K2cseVs1ODYyNCtnXT1fWzIyOV1bZ10pO2ZvcihfWzIzMF09Ilx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Zjk4M1x1NmI1Zlx1NmM1ZFx1Zjk4NFx1'@;
put 'NzRiNVx1NzkxNlx1Zjk4NVx1ODIwN1x1ODI0NVx1ODMzOVx1OGYzZlx1OGY1ZFx1Zjk4Nlx1OTkxOFx1Zjk4N1x1Zjk4OFx1Zjk4OVx1NGVhNlx1Zjk4YVx1NTdkZlx1NWY3OVx1NjYxM1x1Zjk4Ylx1Zjk4Y1x1NzVhYlx1N2U3OVx1OGI2Zlx1Zjk4ZFx1OTAwNlx1OWE1Ylx1NTZhNVx1NTgy'@;
put 'N1x1NTlmOFx1NWExZlx1NWJiNFx1Zjk4ZVx1NWVmNlx1Zjk4Zlx1Zjk5MFx1NjM1MFx1NjMzYlx1Zjk5MVx1NjkzZFx1NmM4N1x1NmNiZlx1NmQ4ZVx1NmQ5M1x1NmRmNVx1NmYxNFx1Zjk5Mlx1NzBkZlx1NzEzNlx1NzE1OVx1Zjk5M1x1NzFjM1x1NzFkNVx1Zjk5NFx1Nzg0Zlx1Nzg2Zlx1'@;
put 'Zjk5NVx1N2I3NVx1N2RlM1x1Zjk5Nlx1N2UyZlx1Zjk5N1x1ODg0ZFx1OGVkZlx1Zjk5OFx1Zjk5OVx1Zjk5YVx1OTI1Ylx1Zjk5Ylx1OWNmNlx1Zjk5Y1x1Zjk5ZFx1Zjk5ZVx1NjA4NVx1NmQ4NVx1Zjk5Zlx1NzFiMVx1ZjlhMFx1ZjlhMVx1OTViMVx1NTNhZFx1ZjlhMlx1ZjlhM1x1Zjlh'@;
put 'NFx1NjdkM1x1ZjlhNVx1NzA4ZVx1NzEzMFx1NzQzMFx1ODI3Nlx1ODJkMlx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIzMF0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjMwXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIzMF1bZ11dPTU4ODgwK2cseVs1ODg4MCtnXT1fWzIzMF1bZ10pO2Zv'@;
put 'cihfWzIzMV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZjlhNlx1OTViYlx1'@;
put 'OWFlNVx1OWU3ZFx1NjZjNFx1ZjlhN1x1NzFjMVx1ODQ0OVx1ZjlhOFx1ZjlhOVx1NTg0Ylx1ZjlhYVx1ZjlhYlx1NWRiOFx1NWY3MVx1ZjlhY1x1NjYyMFx1NjY4ZVx1Njk3OVx1NjlhZVx1NmMzOFx1NmNmM1x1NmUzNlx1NmY0MVx1NmZkYVx1NzAxYlx1NzAyZlx1NzE1MFx1NzFkZlx1NzM3'@;
put 'MFx1ZjlhZFx1NzQ1Ylx1ZjlhZVx1NzRkNFx1NzZjOFx1N2E0ZVx1N2U5M1x1ZjlhZlx1ZjliMFx1ODJmMVx1OGE2MFx1OGZjZVx1ZjliMVx1OTM0OFx1ZjliMlx1OTcxOVx1ZjliM1x1ZjliNFx1NGU0Mlx1NTAyYVx1ZjliNVx1NTIwOFx1NTNlMVx1NjZmM1x1NmM2ZFx1NmZjYVx1NzMwYVx1'@;
put 'Nzc3Zlx1N2E2Mlx1ODJhZVx1ODVkZFx1ODYwMlx1ZjliNlx1ODhkNFx1OGE2M1x1OGI3ZFx1OGM2Ylx1ZjliN1x1OTJiM1x1ZjliOFx1OTcxM1x1OTgxMFx1NGU5NFx1NGYwZFx1NGZjOVx1NTBiMlx1NTM0OFx1NTQzZVx1NTQzM1x1NTVkYVx1NTg2Mlx1NThiYVx1NTk2N1x1NWExYlx1NWJl'@;
put 'NFx1NjA5Zlx1ZjliOVx1NjFjYVx1NjU1Nlx1NjVmZlx1NjY2NFx1NjhhN1x1NmM1YVx1NmZiM1x1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIzMV0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjMxXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIzMV1bZ11dPTU5MTM2K2cseVs1OTEzNitnXT1f'@;
put 'WzIzMV1bZ10pO2ZvcihfWzIzMl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'NzBjZlx1NzFhY1x1NzM1Mlx1N2I3ZFx1ODcwOFx1OGFhNFx1OWMzMlx1OWYwN1x1NWM0Ylx1NmM4M1x1NzM0NFx1NzM4OVx1OTIzYVx1NmVhYlx1NzQ2NVx1NzYxZlx1N2E2OVx1N2UxNVx1ODYwYVx1NTE0MFx1NThjNVx1NjRjMVx1NzRlZVx1NzUxNVx1NzY3MFx1N2ZjMVx1OTA5NVx1OTZj'@;
put 'ZFx1OTk1NFx1NmUyNlx1NzRlNlx1N2FhOVx1N2FhYVx1ODFlNVx1ODZkOVx1ODc3OFx1OGExYlx1NWE0OVx1NWI4Y1x1NWI5Ylx1NjhhMVx1NjkwMFx1NmQ2M1x1NzNhOVx1NzQxM1x1NzQyY1x1Nzg5N1x1N2RlOVx1N2ZlYlx1ODExOFx1ODE1NVx1ODM5ZVx1OGM0Y1x1OTYyZVx1OTgxMVx1'@;
put 'NjZmMFx1NWY4MFx1NjVmYVx1Njc4OVx1NmM2YVx1NzM4Ylx1NTAyZFx1NWEwM1x1NmI2YVx1NzdlZVx1NTkxNlx1NWQ2Y1x1NWRjZFx1NzMyNVx1NzU0Zlx1ZjliYVx1ZjliYlx1NTBlNVx1NTFmOVx1NTgyZlx1NTkyZFx1NTk5Nlx1NTlkYVx1NWJlNVx1ZjliY1x1ZjliZFx1NWRhMlx1NjJk'@;
put 'N1x1NjQxNlx1NjQ5M1x1NjRmZVx1ZjliZVx1NjZkY1x1ZjliZlx1NmE0OFx1ZjljMFx1NzFmZlx1NzQ2NFx1ZjljMVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIzMl0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjMyXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIzMl1bZ11dPTU5MzkyK2cs'@;
put 'eVs1OTM5MitnXT1fWzIzMl1bZ10pO2ZvcihfWzIzM109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1N2E4OFx1N2FhZlx1N2U0N1x1N2U1ZVx1ODAwMFx1ODE3MFx1ZjljMlx1ODdlZlx1ODk4MVx1OGIyMFx1OTA1OVx1ZjljM1x1OTA4MFx1OTk1Mlx1NjE3ZVx1NmIzMlx1NmQ3NFx1N2UxZlx1ODkyNVx1OGZiMVx1NGZkMVx1NTBhZFx1NTE5N1x1NTJjN1x1NTdjN1x1NTg4'@;
put 'OVx1NWJiOVx1NWViOFx1NjE0Mlx1Njk5NVx1NmQ4Y1x1NmU2N1x1NmViNlx1NzE5NFx1NzQ2Mlx1NzUyOFx1NzUyY1x1ODA3M1x1ODMzOFx1ODRjOVx1OGUwYVx1OTM5NFx1OTNkZVx1ZjljNFx1NGU4ZVx1NGY1MVx1NTA3Nlx1NTEyYVx1NTNjOFx1NTNjYlx1NTNmM1x1NWI4N1x1NWJkM1x1'@;
put 'NWMyNFx1NjExYVx1NjE4Mlx1NjVmNFx1NzI1Ylx1NzM5N1x1NzQ0MFx1NzZjMlx1Nzk1MFx1Nzk5MVx1NzliOVx1N2QwNlx1N2ZiZFx1ODI4Ylx1ODVkNVx1ODY1ZVx1OGZjMlx1OTA0N1x1OTBmNVx1OTFlYVx1OTY4NVx1OTZlOFx1OTZlOVx1NTJkNlx1NWY2N1x1NjVlZFx1NjYzMVx1Njgy'@;
put 'Zlx1NzE1Y1x1N2EzNlx1OTBjMVx1OTgwYVx1NGU5MVx1ZjljNVx1NmE1Mlx1NmI5ZVx1NmY5MFx1NzE4OVx1ODAxOFx1ODJiOFx1ODU1M1x1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIzM10ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjMzXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIzM11b'@;
put 'Z11dPTU5NjQ4K2cseVs1OTY0OCtnXT1fWzIzM11bZ10pO2ZvcihfWzIzNF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTA0Ylx1OTY5NVx1OTZmMlx1OTdmYlx1ODUxYVx1OWIzMVx1NGU5MFx1NzE4YVx1OTZjNFx1NTE0M1x1NTM5Zlx1NTRlMVx1NTcxM1x1NTcxMlx1NTdhM1x1NWE5Ylx1NWFjNFx1NWJjM1x1NjAyOFx1NjEzZlx1NjNmNFx1NmM4NVx1NmQzOVx1NmU3'@;
put 'Mlx1NmU5MFx1NzIzMFx1NzMzZlx1NzQ1N1x1ODJkMVx1ODg4MVx1OGY0NVx1OTA2MFx1ZjljNlx1OTY2Mlx1OTg1OFx1OWQxYlx1NjcwOFx1OGQ4YVx1OTI1ZVx1NGY0ZFx1NTA0OVx1NTBkZVx1NTM3MVx1NTcwZFx1NTlkNFx1NWEwMVx1NWMwOVx1NjE3MFx1NjY5MFx1NmUyZFx1NzIzMlx1'@;
put 'NzQ0Ylx1N2RlZlx1ODBjM1x1ODQwZVx1ODQ2Nlx1ODUzZlx1ODc1Zlx1ODg1Ylx1ODkxOFx1OGIwMlx1OTA1NVx1OTdjYlx1OWI0Zlx1NGU3M1x1NGY5MVx1NTExMlx1NTE2YVx1ZjljN1x1NTUyZlx1NTVhOVx1NWI3YVx1NWJhNVx1NWU3Y1x1NWU3ZFx1NWViZVx1NjBhMFx1NjBkZlx1NjEw'@;
put 'OFx1NjEwOVx1NjNjNFx1NjUzOFx1NjcwOVx1ZjljOFx1NjdkNFx1NjdkYVx1ZjljOVx1Njk2MVx1Njk2Mlx1NmNiOVx1NmQyN1x1ZjljYVx1NmUzOFx1ZjljYlx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIzNF0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjM0XVtnXS5jaGFyQ29kZUF0KDAp'@;
put 'JiYoSVtfWzIzNF1bZ11dPTU5OTA0K2cseVs1OTkwNCtnXT1fWzIzNF1bZ10pO2ZvcihfWzIzNV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmZlMVx1NzMzNlx1NzMzN1x1ZjljY1x1NzQ1Y1x1NzUzMVx1ZjljZFx1NzY1Mlx1ZjljZVx1ZjljZlx1N2RhZFx1ODFmZVx1ODQzOFx1ODhkNVx1OGE5OFx1OGFkYlx1OGFlZFx1OGUzMFx1OGU0Mlx1OTA0YVx1OTAzZVx1OTA3'@;
put 'YVx1OTE0OVx1OTFjOVx1OTM2ZVx1ZjlkMFx1ZjlkMVx1NTgwOVx1ZjlkMlx1NmJkM1x1ODA4OVx1ODBiMlx1ZjlkM1x1ZjlkNFx1NTE0MVx1NTk2Ylx1NWMzOVx1ZjlkNVx1ZjlkNlx1NmY2NFx1NzNhN1x1ODBlNFx1OGQwN1x1ZjlkN1x1OTIxN1x1OTU4Zlx1ZjlkOFx1ZjlkOVx1ZjlkYVx1'@;
put 'ZjlkYlx1ODA3Zlx1NjIwZVx1NzAxY1x1N2Q2OFx1ODc4ZFx1ZjlkY1x1NTdhMFx1NjA2OVx1NjE0N1x1NmJiN1x1OGFiZVx1OTI4MFx1OTZiMVx1NGU1OVx1NTQxZlx1NmRlYlx1ODUyZFx1OTY3MFx1OTdmM1x1OThlZVx1NjNkNlx1NmNlM1x1OTA5MVx1NTFkZFx1NjFjOVx1ODFiYVx1OWRm'@;
put 'OVx1NGY5ZFx1NTAxYVx1NTEwMFx1NWI5Y1x1NjEwZlx1NjFmZlx1NjRlY1x1NjkwNVx1NmJjNVx1NzU5MVx1NzdlM1x1N2ZhOVx1ODI2NFx1ODU4Zlx1ODdmYlx1ODg2M1x1OGFiY1x1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIzNV0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjM1XVtnXS5j'@;
put 'aGFyQ29kZUF0KDApJiYoSVtfWzIzNV1bZ11dPTYwMTYwK2cseVs2MDE2MCtnXT1fWzIzNV1bZ10pO2ZvcihfWzIzNl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGI3MFx1OTFhYlx1NGU4Y1x1NGVlNVx1NGYwYVx1ZjlkZFx1ZjlkZVx1NTkzN1x1NTllOFx1ZjlkZlx1NWRmMlx1NWYxYlx1NWY1Ylx1NjAyMVx1ZjllMFx1ZjllMVx1ZjllMlx1ZjllM1x1NzIzZVx1NzNl'@;
put 'NVx1ZjllNFx1NzU3MFx1NzVjZFx1ZjllNVx1NzlmYlx1ZjllNlx1ODAwY1x1ODAzM1x1ODA4NFx1ODJlMVx1ODM1MVx1ZjllN1x1ZjllOFx1OGNiZFx1OGNiM1x1OTA4N1x1ZjllOVx1ZjllYVx1OThmNFx1OTkwY1x1ZjllYlx1ZjllY1x1NzAzN1x1NzZjYVx1N2ZjYVx1N2ZjY1x1N2ZmY1x1'@;
put 'OGIxYVx1NGViYVx1NGVjMVx1NTIwM1x1NTM3MFx1ZjllZFx1NTRiZFx1NTZlMFx1NTlmYlx1NWJjNVx1NWYxNVx1NWZjZFx1NmU2ZVx1ZjllZVx1ZjllZlx1N2Q2YVx1ODMzNVx1ZjlmMFx1ODY5M1x1OGE4ZFx1ZjlmMVx1OTc2ZFx1OTc3N1x1ZjlmMlx1ZjlmM1x1NGUwMFx1NGY1YVx1NGY3'@;
put 'ZVx1NThmOVx1NjVlNVx1NmVhMlx1OTAzOFx1OTNiMFx1OTliOVx1NGVmYlx1NThlY1x1NTk4YVx1NTlkOVx1NjA0MVx1ZjlmNFx1ZjlmNVx1N2ExNFx1ZjlmNlx1ODM0Zlx1OGNjM1x1NTE2NVx1NTM0NFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIzNl0ubGVuZ3RoOysrZyk2NTUzMyE9'@;
put 'PV9bMjM2XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIzNl1bZ11dPTYwNDE2K2cseVs2MDQxNitnXT1fWzIzNl1bZ10pO2ZvcihfWzIzN109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZjlmN1x1ZjlmOFx1ZjlmOVx1NGVjZFx1NTI2OVx1NWI1NVx1ODJiZlx1NGVkNFx1NTIzYVx1NTRhOFx1NTljOVx1NTlmZlx1NWI1MFx1NWI1N1x1NWI1Y1x1NjA2M1x1NjE0OFx1NmVj'@;
put 'Ylx1NzA5OVx1NzE2ZVx1NzM4Nlx1NzRmN1x1NzViNVx1NzhjMVx1N2QyYlx1ODAwNVx1ODFlYVx1ODMyOFx1ODUxN1x1ODVjOVx1OGFlZVx1OGNjN1x1OTZjY1x1NGY1Y1x1NTJmYVx1NTZiY1x1NjVhYlx1NjYyOFx1NzA3Y1x1NzBiOFx1NzIzNVx1N2RiZFx1ODI4ZFx1OTE0Y1x1OTZjMFx1'@;
put 'OWQ3Mlx1NWI3MVx1NjhlN1x1NmI5OFx1NmY3YVx1NzZkZVx1NWM5MVx1NjZhYlx1NmY1Ylx1N2JiNFx1N2MyYVx1ODgzNlx1OTZkY1x1NGUwOFx1NGVkN1x1NTMyMFx1NTgzNFx1NThiYlx1NThlZlx1NTk2Y1x1NWMwN1x1NWUzM1x1NWU4NFx1NWYzNVx1NjM4Y1x1NjZiMlx1Njc1Nlx1NmEx'@;
put 'Zlx1NmFhM1x1NmIwY1x1NmYzZlx1NzI0Nlx1ZjlmYVx1NzM1MFx1NzQ4Ylx1N2FlMFx1N2NhN1x1ODE3OFx1ODFkZlx1ODFlN1x1ODM4YVx1ODQ2Y1x1ODUyM1x1ODU5NFx1ODVjZlx1ODhkZFx1OGQxM1x1OTFhY1x1OTU3N1x1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIzN10ubGVuZ3Ro'@;
put 'OysrZyk2NTUzMyE9PV9bMjM3XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIzN11bZ11dPTYwNjcyK2cseVs2MDY3MitnXT1fWzIzN11bZ10pO2ZvcihfWzIzOF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTY5Y1x1NTE4ZFx1NTRjOVx1NTcyOFx1NWJiMFx1NjI0ZFx1Njc1MFx1NjgzZFx1Njg5M1x1NmUzZFx1NmVkM1x1NzA3ZFx1N2UyMVx1ODhjMVx1OGNhMVx1OGYw'@;
put 'OVx1OWY0Ylx1OWY0ZVx1NzIyZFx1N2I4Zlx1OGFjZFx1OTMxYVx1NGY0N1x1NGY0ZVx1NTEzMlx1NTQ4MFx1NTlkMFx1NWU5NVx1NjJiNVx1Njc3NVx1Njk2ZVx1NmExN1x1NmNhZVx1NmUxYVx1NzJkOVx1NzMyYVx1NzViZFx1N2JiOFx1N2QzNVx1ODJlN1x1ODNmOVx1ODQ1N1x1ODVmN1x1'@;
put 'OGE1Ylx1OGNhZlx1OGU4N1x1OTAxOVx1OTBiOFx1OTZjZVx1OWY1Zlx1NTJlM1x1NTQwYVx1NWFlMVx1NWJjMlx1NjQ1OFx1NjU3NVx1NmVmNFx1NzJjNFx1ZjlmYlx1NzY4NFx1N2E0ZFx1N2IxYlx1N2M0ZFx1N2UzZVx1N2ZkZlx1ODM3Ylx1OGIyYlx1OGNjYVx1OGQ2NFx1OGRlMVx1OGU1'@;
put 'Zlx1OGZlYVx1OGZmOVx1OTA2OVx1OTNkMVx1NGY0M1x1NGY3YVx1NTBiM1x1NTE2OFx1NTE3OFx1NTI0ZFx1NTI2YVx1NTg2MVx1NTg3Y1x1NTk2MFx1NWMwOFx1NWM1NVx1NWVkYlx1NjA5Ylx1NjIzMFx1NjgxM1x1NmJiZlx1NmMwOFx1NmZiMVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1f'@;
put 'WzIzOF0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjM4XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIzOF1bZ11dPTYwOTI4K2cseVs2MDkyOCtnXT1fWzIzOF1bZ10pO2ZvcihfWzIzOV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzE0ZVx1NzQyMFx1NzUzMFx1NzUzOFx1NzU1MVx1NzY3Mlx1N2I0Y1x1N2I4Ylx1N2JhZFx1N2JjNlx1N2U4Zlx1OGE2ZVx1OGYzZVx1OGY0'@;
put 'OVx1OTIzZlx1OTI5M1x1OTMyMlx1OTQyYlx1OTZmYlx1OTg1YVx1OTg2Ylx1OTkxZVx1NTIwN1x1NjIyYVx1NjI5OFx1NmQ1OVx1NzY2NFx1N2FjYVx1N2JjMFx1N2Q3Nlx1NTM2MFx1NWNiZVx1NWU5N1x1NmYzOFx1NzBiOVx1N2M5OFx1OTcxMVx1OWI4ZVx1OWVkZVx1NjNhNVx1NjQ3YVx1'@;
put 'ODc3Nlx1NGUwMVx1NGU5NVx1NGVhZFx1NTA1Y1x1NTA3NVx1NTQ0OFx1NTljM1x1NWI5YVx1NWU0MFx1NWVhZFx1NWVmN1x1NWY4MVx1NjBjNVx1NjMzYVx1NjUzZlx1NjU3NFx1NjVjY1x1NjY3Nlx1NjY3OFx1NjdmZVx1Njk2OFx1NmE4OVx1NmI2M1x1NmM0MFx1NmRjMFx1NmRlOFx1NmUx'@;
put 'Zlx1NmU1ZVx1NzAxZVx1NzBhMVx1NzM4ZVx1NzNmZFx1NzUzYVx1Nzc1Ylx1Nzg4N1x1Nzk4ZVx1N2EwYlx1N2E3ZFx1N2NiZVx1N2Q4ZVx1ODI0N1x1OGEwMlx1OGFlYVx1OGM5ZVx1OTEyZFx1OTE0YVx1OTFkOFx1OTI2Nlx1OTJjY1x1OTMyMFx1OTcwNlx1OTc1Nlx1ZmZmZCIuc3BsaXQo'@;
put 'IiIpLGc9MDtnIT1fWzIzOV0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjM5XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIzOV1bZ11dPTYxMTg0K2cseVs2MTE4NCtnXT1fWzIzOV1bZ10pO2ZvcihfWzI0MF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTc1Y1x1OTgwMlx1OWYwZVx1NTIzNlx1NTI5MVx1NTU3Y1x1NTgyNFx1NWUxZFx1NWYxZlx1NjA4Y1x1NjNkMFx1Njhh'@;
put 'Zlx1NmZkZlx1Nzk2ZFx1N2IyY1x1ODFjZFx1ODViYVx1ODhmZFx1OGFmOFx1OGU0NFx1OTE4ZFx1OTY2NFx1OTY5Ylx1OTczZFx1OTg0Y1x1OWY0YVx1NGZjZVx1NTE0Nlx1NTFjYlx1NTJhOVx1NTYzMlx1NWYxNFx1NWY2Ylx1NjNhYVx1NjRjZFx1NjVlOVx1NjY0MVx1NjZmYVx1NjZmOVx1'@;
put 'NjcxZFx1Njg5ZFx1NjhkN1x1NjlmZFx1NmYxNVx1NmY2ZVx1NzE2N1x1NzFlNVx1NzIyYVx1NzRhYVx1NzczYVx1Nzk1Nlx1Nzk1YVx1NzlkZlx1N2EyMFx1N2E5NVx1N2M5N1x1N2NkZlx1N2Q0NFx1N2U3MFx1ODA4N1x1ODVmYlx1ODZhNFx1OGE1NFx1OGFiZlx1OGQ5OVx1OGU4MVx1OTAy'@;
put 'MFx1OTA2ZFx1OTFlM1x1OTYzYlx1OTZkNVx1OWNlNVx1NjVjZlx1N2MwN1x1OGRiM1x1OTNjM1x1NWI1OFx1NWMwYVx1NTM1Mlx1NjJkOVx1NzMxZFx1NTAyN1x1NWI5N1x1NWY5ZVx1NjBiMFx1NjE2Ylx1NjhkNVx1NmRkOVx1NzQyZVx1N2EyZVx1N2Q0Mlx1N2Q5Y1x1N2UzMVx1ODE2Ylx1'@;
put 'ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzI0MF0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjQwXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzI0MF1bZ11dPTYxNDQwK2cseVs2MTQ0MCtnXT1fWzI0MF1bZ10pO2ZvcihfWzI0MV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGUyYVx1OGUzNVx1OTM3ZVx1OTQxOFx1NGY1MFx1NTc1MFx1NWRlNlx1NWVhN1x1NjMyYlx1N2Y2'@;
put 'YVx1NGUzYlx1NGY0Zlx1NGY4Zlx1NTA1YVx1NTlkZFx1ODBjNFx1NTQ2YVx1NTQ2OFx1NTVmZVx1NTk0Zlx1NWI5OVx1NWRkZVx1NWVkYVx1NjY1ZFx1NjczMVx1NjdmMVx1NjgyYVx1NmNlOFx1NmQzMlx1NmU0YVx1NmY4ZFx1NzBiN1x1NzNlMFx1NzU4N1x1N2M0Y1x1N2QwMlx1N2QyY1x1'@;
put 'N2RhMlx1ODIxZlx1ODZkYlx1OGEzYlx1OGE4NVx1OGQ3MFx1OGU4YVx1OGYzM1x1OTAzMVx1OTE0ZVx1OTE1Mlx1OTQ0NFx1OTlkMFx1N2FmOVx1N2NhNVx1NGZjYVx1NTEwMVx1NTFjNlx1NTdjOFx1NWJlZlx1NWNmYlx1NjY1OVx1NmEzZFx1NmQ1YVx1NmU5Nlx1NmZlY1x1NzEwY1x1NzU2'@;
put 'Zlx1N2FlM1x1ODgyMlx1OTAyMVx1OTA3NVx1OTZjYlx1OTlmZlx1ODMwMVx1NGUyZFx1NGVmMlx1ODg0Nlx1OTFjZFx1NTM3ZFx1NmFkYlx1Njk2Ylx1NmM0MVx1ODQ3YVx1NTg5ZVx1NjE4ZVx1NjZmZVx1NjJlZlx1NzBkZFx1NzUxMVx1NzVjN1x1N2U1Mlx1ODRiOFx1OGI0OVx1OGQwOFx1'@;
put 'NGU0Ylx1NTNlYVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzI0MV0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjQxXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzI0MV1bZ11dPTYxNjk2K2cseVs2MTY5NitnXT1fWzI0MV1bZ10pO2ZvcihfWzI0Ml09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTRhYlx1NTczMFx1NTc0MFx1NWZkN1x1NjMwMVx1NjMwN1x1NjQ2Zlx1NjUy'@;
put 'Zlx1NjVlOFx1NjY3YVx1Njc5ZFx1NjdiM1x1NmI2Mlx1NmM2MFx1NmM5YVx1NmYyY1x1NzdlNVx1NzgyNVx1Nzk0OVx1Nzk1N1x1N2QxOVx1ODBhMlx1ODEwMlx1ODFmM1x1ODI5ZFx1ODJiN1x1ODcxOFx1OGE4Y1x1ZjlmY1x1OGQwNFx1OGRiZVx1OTA3Mlx1NzZmNFx1N2ExOVx1N2EzN1x1'@;
put 'N2U1NFx1ODA3N1x1NTUwN1x1NTVkNFx1NTg3NVx1NjMyZlx1NjQyMlx1NjY0OVx1NjY0Ylx1Njg2ZFx1Njk5Ylx1NmI4NFx1NmQyNVx1NmViMVx1NzNjZFx1NzQ2OFx1NzRhMVx1NzU1Ylx1NzViOVx1NzZlMVx1NzcxZVx1Nzc4Ylx1NzllNlx1N2UwOVx1N2UxZFx1ODFmYlx1ODUyZlx1ODg5'@;
put 'N1x1OGEzYVx1OGNkMVx1OGVlYlx1OGZiMFx1OTAzMlx1OTNhZFx1OTY2M1x1OTY3M1x1OTcwN1x1NGY4NFx1NTNmMVx1NTllYVx1NWFjOVx1NWUxOVx1Njg0ZVx1NzRjNlx1NzViZVx1NzllOVx1N2E5Mlx1ODFhM1x1ODZlZFx1OGNlYVx1OGRjY1x1OGZlZFx1NjU5Zlx1NjcxNVx1ZjlmZFx1'@;
put 'NTdmN1x1NmY1N1x1N2RkZFx1OGYyZlx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzI0Ml0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjQyXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzI0Ml1bZ11dPTYxOTUyK2cseVs2MTk1MitnXT1fWzI0Ml1bZ10pO2ZvcihfWzI0M109Ilx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTNmNlx1OTZjNlx1NWZiNVx1NjFmMlx1NmY4NFx1NGUx'@;
put 'NFx1NGY5OFx1NTAxZlx1NTNjOVx1NTVkZlx1NWQ2Zlx1NWRlZVx1NmIyMVx1NmI2NFx1NzhjYlx1N2I5YVx1ZjlmZVx1OGU0OVx1OGVjYVx1OTA2ZVx1NjM0OVx1NjQzZVx1Nzc0MFx1N2E4NFx1OTMyZlx1OTQ3Zlx1OWY2YVx1NjRiMFx1NmZhZlx1NzFlNlx1NzRhOFx1NzRkYVx1N2FjNFx1'@;
put 'N2MxMlx1N2U4Mlx1N2NiMlx1N2U5OFx1OGI5YVx1OGQwYVx1OTQ3ZFx1OTkxMFx1OTk0Y1x1NTIzOVx1NWJkZlx1NjRlNlx1NjcyZFx1N2QyZVx1NTBlZFx1NTNjM1x1NTg3OVx1NjE1OFx1NjE1OVx1NjFmYVx1NjVhY1x1N2FkOVx1OGI5Mlx1OGI5Nlx1NTAwOVx1NTAyMVx1NTI3NVx1NTUz'@;
put 'MVx1NWEzY1x1NWVlMFx1NWY3MFx1NjEzNFx1NjU1ZVx1NjYwY1x1NjYzNlx1NjZhMlx1NjljZFx1NmVjNFx1NmYzMlx1NzMxNlx1NzYyMVx1N2E5M1x1ODEzOVx1ODI1OVx1ODNkNlx1ODRiY1x1NTBiNVx1NTdmMFx1NWJjMFx1NWJlOFx1NWY2OVx1NjNhMVx1NzgyNlx1N2RiNVx1ODNkY1x1'@;
put 'ODUyMVx1OTFjN1x1OTFmNVx1NTE4YVx1NjdmNVx1N2I1Nlx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzI0M10ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjQzXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzI0M11bZ11dPTYyMjA4K2cseVs2MjIwOCtnXT1fWzI0M11bZ10pO2ZvcihfWzI0NF09'@;
put 'Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGNhY1x1NTFjNFx1NTliYlx1NjBi'@;
put 'ZFx1ODY1NVx1NTAxY1x1ZjlmZlx1NTI1NFx1NWMzYVx1NjE3ZFx1NjIxYVx1NjJkM1x1NjRmMlx1NjVhNVx1NmVjY1x1NzYyMFx1ODEwYVx1OGU2MFx1OTY1Zlx1OTZiYlx1NGVkZlx1NTM0M1x1NTU5OFx1NTkyOVx1NWRkZFx1NjRjNVx1NmNjOVx1NmRmYVx1NzM5NFx1N2E3Zlx1ODIxYlx1'@;
put 'ODVhNlx1OGNlNFx1OGUxMFx1OTA3N1x1OTFlN1x1OTVlMVx1OTYyMVx1OTdjNlx1NTFmOFx1NTRmMlx1NTU4Nlx1NWZiOVx1NjRhNFx1NmY4OFx1N2RiNFx1OGYxZlx1OGY0ZFx1OTQzNVx1NTBjOVx1NWMxNlx1NmNiZVx1NmRmYlx1NzUxYlx1NzdiYlx1N2MzZFx1N2M2NFx1OGE3OVx1OGFj'@;
put 'Mlx1NTgxZVx1NTliZVx1NWUxNlx1NjM3N1x1NzI1Mlx1NzU4YVx1Nzc2Ylx1OGFkY1x1OGNiY1x1OGYxMlx1NWVmM1x1NjY3NFx1NmRmOFx1ODA3ZFx1ODNjMVx1OGFjYlx1OTc1MVx1OWJkNlx1ZmEwMFx1NTI0M1x1NjZmZlx1NmQ5NVx1NmVlZlx1N2RlMFx1OGFlNlx1OTAyZVx1OTA1ZVx1'@;
put 'OWFkNFx1NTIxZFx1NTI3Zlx1NTRlOFx1NjE5NFx1NjI4NFx1NjJkYlx1NjhhMlx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzI0NF0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjQ0XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzI0NF1bZ11dPTYyNDY0K2cseVs2MjQ2NCtnXT1fWzI0NF1bZ10p'@;
put 'O2ZvcihfWzI0NV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjkxMlx1Njk1'@;
put 'YVx1NmEzNVx1NzA5Mlx1NzEyNlx1Nzg1ZFx1NzkwMVx1NzkwZVx1NzlkMlx1N2EwZFx1ODA5Nlx1ODI3OFx1ODJkNVx1ODM0OVx1ODU0OVx1OGM4Mlx1OGQ4NVx1OTE2Mlx1OTE4Ylx1OTFhZVx1NGZjM1x1NTZkMVx1NzFlZFx1NzdkN1x1ODcwMFx1ODlmOFx1NWJmOFx1NWZkNlx1Njc1MVx1'@;
put 'OTBhOFx1NTNlMlx1NTg1YVx1NWJmNVx1NjBhNFx1NjE4MVx1NjQ2MFx1N2UzZFx1ODA3MFx1ODUyNVx1OTI4M1x1NjRhZVx1NTBhY1x1NWQxNFx1NjcwMFx1NTg5Y1x1NjJiZFx1NjNhOFx1NjkwZVx1Njk3OFx1NmExZVx1NmU2Ylx1NzZiYVx1NzljYlx1ODJiYlx1ODQyOVx1OGFjZlx1OGRh'@;
put 'OFx1OGZmZFx1OTExMlx1OTE0Ylx1OTE5Y1x1OTMxMFx1OTMxOFx1OTM5YVx1OTZkYlx1OWEzNlx1OWMwZFx1NGUxMVx1NzU1Y1x1Nzk1ZFx1N2FmYVx1N2I1MVx1N2JjOVx1N2UyZVx1ODRjNFx1OGU1OVx1OGU3NFx1OGVmOFx1OTAxMFx1NjYyNVx1NjkzZlx1NzQ0M1x1NTFmYVx1NjcyZVx1'@;
put 'OWVkY1x1NTE0NVx1NWZlMFx1NmM5Nlx1ODdmMlx1ODg1ZFx1ODg3N1x1NjBiNFx1ODFiNVx1ODQwM1x1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzI0NV0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjQ1XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzI0NV1bZ11dPTYyNzIwK2cseVs2MjcyMCtn'@;
put 'XT1fWzI0NV1bZ10pO2ZvcihfWzI0Nl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1OGQwNVx1NTNkNlx1NTQzOVx1NTYzNFx1NWEzNlx1NWMzMVx1NzA4YVx1N2ZlMFx1ODA1YVx1ODEwNlx1ODFlZFx1OGRhM1x1OTE4OVx1OWE1Zlx1OWRmMlx1NTA3NFx1NGVjNFx1NTNhMFx1NjBmYlx1NmUyY1x1NWM2NFx1NGY4OFx1NTAyNFx1NTVlNFx1NWNkOVx1NWU1Zlx1NjA2NVx1'@;
put 'Njg5NFx1NmNiYlx1NmRjNFx1NzFiZVx1NzVkNFx1NzVmNFx1NzY2MVx1N2ExYVx1N2E0OVx1N2RjN1x1N2RmYlx1N2Y2ZVx1ODFmNFx1ODZhOVx1OGYxY1x1OTZjOVx1OTliM1x1OWY1Mlx1NTI0N1x1NTJjNVx1OThlZFx1ODlhYVx1NGUwM1x1NjdkMlx1NmYwNlx1NGZiNVx1NWJlMlx1Njc5'@;
put 'NVx1NmM4OFx1NmQ3OFx1NzQxYlx1NzgyN1x1OTFkZFx1OTM3Y1x1ODdjNFx1NzllNFx1N2EzMVx1NWZlYlx1NGVkNlx1NTRhNFx1NTUzZVx1NThhZVx1NTlhNVx1NjBmMFx1NjI1M1x1NjJkNlx1NjczNlx1Njk1NVx1ODIzNVx1OTY0MFx1OTliMVx1OTlkZFx1NTAyY1x1NTM1M1x1NTU0NFx1'@;
put 'NTc3Y1x1ZmEwMVx1NjI1OFx1ZmEwMlx1NjRlMlx1NjY2Ylx1NjdkZFx1NmZjMVx1NmZlZlx1NzQyMlx1NzQzOFx1OGExN1x1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzI0Nl0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjQ2XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzI0Nl1bZ11dPTYyOTc2'@;
put 'K2cseVs2Mjk3NitnXT1fWzI0Nl1bZ10pO2ZvcihfWzI0N109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1OTQzOFx1NTQ1MVx1NTYwNlx1NTc2Nlx1NWY0OFx1NjE5YVx1NmI0ZVx1NzA1OFx1NzBhZFx1N2RiYlx1OGE5NVx1NTk2YVx1ODEyYlx1NjNhMlx1NzcwOFx1ODAzZFx1OGNhYVx1NTg1NFx1NjQyZFx1NjliYlx1NWI5NVx1NWUxMVx1NmU2Zlx1ZmEwM1x1ODU2OVx1'@;
put 'NTE0Y1x1NTNmMFx1NTkyYVx1NjAyMFx1NjE0Ylx1NmI4Nlx1NmM3MFx1NmNmMFx1N2IxZVx1ODBjZVx1ODJkNFx1OGRjNlx1OTBiMFx1OThiMVx1ZmEwNFx1NjRjN1x1NmZhNFx1NjQ5MVx1NjUwNFx1NTE0ZVx1NTQxMFx1NTcxZlx1OGEwZVx1NjE1Zlx1Njg3Nlx1ZmEwNVx1NzVkYlx1N2I1'@;
put 'Mlx1N2Q3MVx1OTAxYVx1NTgwNlx1NjljY1x1ODE3Zlx1ODkyYVx1OTAwMFx1OTgzOVx1NTA3OFx1NTk1N1x1NTlhY1x1NjI5NVx1OTAwZlx1OWIyYVx1NjE1ZFx1NzI3OVx1OTVkNlx1NTc2MVx1NWE0Nlx1NWRmNFx1NjI4YVx1NjRhZFx1NjRmYVx1Njc3N1x1NmNlMlx1NmQzZVx1NzIyY1x1'@;
put 'NzQzNlx1NzgzNFx1N2Y3N1x1ODJhZFx1OGRkYlx1OTgxN1x1NTIyNFx1NTc0Mlx1Njc3Zlx1NzI0OFx1NzRlM1x1OGNhOVx1OGZhNlx1OTIxMVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzI0N10ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjQ3XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzI0'@;
put 'N11bZ11dPTYzMjMyK2cseVs2MzIzMitnXT1fWzI0N11bZ10pO2ZvcihfWzI0OF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTYyYVx1NTE2Ylx1NTNlZFx1NjM0Y1x1NGY2OVx1NTUwNFx1NjA5Nlx1NjU1N1x1NmM5Ylx1NmQ3Zlx1NzI0Y1x1NzJmZFx1N2ExN1x1ODk4N1x1OGM5ZFx1NWY2ZFx1NmY4ZVx1NzBmOVx1ODFhOFx1NjEwZVx1NGZiZlx1NTA0Zlx1NjI0MVx1'@;
put 'NzI0N1x1N2JjN1x1N2RlOFx1N2ZlOVx1OTA0ZFx1OTdhZFx1OWExOVx1OGNiNlx1NTc2YVx1NWU3M1x1NjdiMFx1ODQwZFx1OGE1NVx1NTQyMFx1NWIxNlx1NWU2M1x1NWVlMlx1NWYwYVx1NjU4M1x1ODBiYVx1ODUzZFx1OTU4OVx1OTY1Ylx1NGY0OFx1NTMwNVx1NTMwZFx1NTMwZlx1NTQ4'@;
put 'Nlx1NTRmYVx1NTcwM1x1NWUwM1x1NjAxNlx1NjI5Ylx1NjJiMVx1NjM1NVx1ZmEwNlx1NmNlMVx1NmQ2Nlx1NzViMVx1NzgzMlx1ODBkZVx1ODEyZlx1ODJkZVx1ODQ2MVx1ODRiMlx1ODg4ZFx1ODkxMlx1OTAwYlx1OTJlYVx1OThmZFx1OWI5MVx1NWU0NVx1NjZiNFx1NjZkZFx1NzAxMVx1'@;
put 'NzIwNlx1ZmEwN1x1NGZmNVx1NTI3ZFx1NWY2YVx1NjE1M1x1Njc1M1x1NmExOVx1NmYwMlx1NzRlMlx1Nzk2OFx1ODg2OFx1OGM3OVx1OThjN1x1OThjNFx1OWE0M1x1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzI0OF0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjQ4XVtnXS5jaGFyQ29kZUF0'@;
put 'KDApJiYoSVtfWzI0OF1bZ11dPTYzNDg4K2cseVs2MzQ4OCtnXT1fWzI0OF1bZ10pO2ZvcihfWzI0OV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTRjMVx1N2ExZlx1Njk1M1x1OGFmN1x1OGM0YVx1OThhOFx1OTlhZVx1NWY3Y1x1NjJhYlx1NzViMlx1NzZhZVx1ODhhYlx1OTA3Zlx1OTY0Mlx1NTMzOVx1NWYzY1x1NWZjNVx1NmNjY1x1NzNjY1x1NzU2Mlx1NzU4Ylx1'@;
put 'N2I0Nlx1ODJmZVx1OTk5ZFx1NGU0Zlx1OTAzY1x1NGUwYlx1NGY1NVx1NTNhNlx1NTkwZlx1NWVjOFx1NjYzMFx1NmNiM1x1NzQ1NVx1ODM3N1x1ODc2Nlx1OGNjMFx1OTA1MFx1OTcxZVx1OWMxNVx1NThkMVx1NWI3OFx1ODY1MFx1OGIxNFx1OWRiNFx1NWJkMlx1NjA2OFx1NjA4ZFx1NjVm'@;
put 'MVx1NmM1N1x1NmYyMlx1NmZhM1x1NzAxYVx1N2Y1NVx1N2ZmMFx1OTU5MVx1OTU5Mlx1OTY1MFx1OTdkM1x1NTI3Mlx1OGY0NFx1NTFmZFx1NTQyYlx1NTRiOFx1NTU2M1x1NTU4YVx1NmFiYlx1NmRiNVx1N2RkOFx1ODI2Nlx1OTI5Y1x1OTY3N1x1OWU3OVx1NTQwOFx1NTRjOFx1NzZkMlx1'@;
put 'ODZlNFx1OTVhNFx1OTVkNFx1OTY1Y1x1NGVhMlx1NGYwOVx1NTllZVx1NWFlNlx1NWRmN1x1NjA1Mlx1NjI5N1x1Njc2ZFx1Njg0MVx1NmM4Nlx1NmUyZlx1N2YzOFx1ODA5Ylx1ODIyYVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzI0OV0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjQ5XVtn'@;
put 'XS5jaGFyQ29kZUF0KDApJiYoSVtfWzI0OV1bZ11dPTYzNzQ0K2cseVs2Mzc0NCtnXT1fWzI0OV1bZ10pO2ZvcihfWzI1MF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmEwOFx1ZmEwOVx1OTgwNVx1NGVhNVx1NTA1NVx1NTRiM1x1NTc5M1x1NTk1YVx1NWI2OVx1NWJiM1x1NjFjOFx1Njk3N1x1NmQ3N1x1NzAyM1x1ODdmOVx1ODllM1x1OGE3Mlx1OGFlN1x1OTA4Mlx1'@;
put 'OTllZFx1OWFiOFx1NTJiZVx1NjgzOFx1NTAxNlx1NWU3OFx1Njc0Zlx1ODM0N1x1ODg0Y1x1NGVhYlx1NTQxMVx1NTZhZVx1NzNlNlx1OTExNVx1OTdmZlx1OTkwOVx1OTk1N1x1OTk5OVx1NTY1M1x1NTg5Zlx1ODY1Ylx1OGEzMVx1NjFiMlx1NmFmNlx1NzM3Ylx1OGVkMlx1NmI0N1x1OTZh'@;
put 'YVx1OWE1N1x1NTk1NVx1NzIwMFx1OGQ2Ylx1OTc2OVx1NGZkNFx1NWNmNFx1NWYyNlx1NjFmOFx1NjY1Ylx1NmNlYlx1NzBhYlx1NzM4NFx1NzNiOVx1NzNmZVx1NzcyOVx1Nzc0ZFx1N2Q0M1x1N2Q2Mlx1N2UyM1x1ODIzN1x1ODg1Mlx1ZmEwYVx1OGNlMlx1OTI0OVx1OTg2Zlx1NWI1MVx1'@;
put 'N2E3NFx1ODg0MFx1OTgwMVx1NWFjY1x1NGZlMFx1NTM1NFx1NTkzZVx1NWNmZFx1NjMzZVx1NmQ3OVx1NzJmOVx1ODEwNVx1ODEwN1x1ODNhMlx1OTJjZlx1OTgzMFx1NGVhOFx1NTE0NFx1NTIxMVx1NTc4Ylx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzI1MF0ubGVuZ3RoOysrZyk2NTUz'@;
put 'MyE9PV9bMjUwXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzI1MF1bZ11dPTY0ZTMrZyx5WzY0ZTMrZ109X1syNTBdW2ddKTtmb3IoX1syNTFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTVmNjJcdTZjYzJcdTZlY2VcdTcwMDVcdTcwNTBcdTcwYWZcdTcxOTJcdTczZTlcdTc0NjlcdTgzNGFcdTg3YTJcdTg4NjFcdTkwMDhcdTkwYTJcdTkzYTNcdTk5YThcdTUxNmVcdTVm'@;
put 'NTdcdTYwZTBcdTYxNjdcdTY2YjNcdTg1NTlcdThlNGFcdTkxYWZcdTk3OGJcdTRlNGVcdTRlOTJcdTU0N2NcdTU4ZDVcdTU4ZmFcdTU5N2RcdTVjYjVcdTVmMjdcdTYyMzZcdTYyNDhcdTY2MGFcdTY2NjdcdTZiZWJcdTZkNjlcdTZkY2ZcdTZlNTZcdTZlZjhcdTZmOTRcdTZmZTBcdTZmZTlc'@;
put 'dTcwNWRcdTcyZDBcdTc0MjVcdTc0NWFcdTc0ZTBcdTc2OTNcdTc5NWNcdTdjY2FcdTdlMWVcdTgwZTFcdTgyYTZcdTg0NmJcdTg0YmZcdTg2NGVcdTg2NWZcdTg3NzRcdThiNzdcdThjNmFcdTkzYWNcdTk4MDBcdTk4NjVcdTYwZDFcdTYyMTZcdTkxNzdcdTVhNWFcdTY2MGZcdTZkZjdcdTZl'@;
put 'M2VcdTc0M2ZcdTliNDJcdTVmZmRcdTYwZGFcdTdiMGZcdTU0YzRcdTVmMThcdTZjNWVcdTZjZDNcdTZkMmFcdTcwZDhcdTdkMDVcdTg2NzlcdThhMGNcdTlkM2JcdTUzMTZcdTU0OGNcdTViMDVcdTZhM2FcdTcwNmJcdTc1NzVcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syNTFdLmxlbmd0'@;
put 'aDsrK2cpNjU1MzMhPT1fWzI1MV1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syNTFdW2ddXT02NDI1NitnLHlbNjQyNTYrZ109X1syNTFdW2ddKTtmb3IoX1syNTJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc5OGRcdTc5YmVcdTgyYjFcdTgzZWZcdThhNzFcdThiNDFcdThjYThcdTk3NzRcdWZhMGJcdTY0ZjRcdTY1MmJcdTc4YmFcdTc4YmJcdTdhNmJcdTRlMzhcdTU1'@;
put 'OWFcdTU5NTBcdTViYTZcdTVlN2JcdTYwYTNcdTYzZGJcdTZiNjFcdTY2NjVcdTY4NTNcdTZlMTlcdTcxNjVcdTc0YjBcdTdkMDhcdTkwODRcdTlhNjlcdTljMjVcdTZkM2JcdTZlZDFcdTczM2VcdThjNDFcdTk1Y2FcdTUxZjBcdTVlNGNcdTVmYThcdTYwNGRcdTYwZjZcdTYxMzBcdTYxNGNc'@;
put 'dTY2NDNcdTY2NDRcdTY5YTVcdTZjYzFcdTZlNWZcdTZlYzlcdTZmNjJcdTcxNGNcdTc0OWNcdTc2ODdcdTdiYzFcdTdjMjdcdTgzNTJcdTg3NTdcdTkwNTFcdTk2OGRcdTllYzNcdTUzMmZcdTU2ZGVcdTVlZmJcdTVmOGFcdTYwNjJcdTYwOTRcdTYxZjdcdTY2NjZcdTY3MDNcdTZhOWNcdTZk'@;
put 'ZWVcdTZmYWVcdTcwNzBcdTczNmFcdTdlNmFcdTgxYmVcdTgzMzRcdTg2ZDRcdThhYThcdThjYzRcdTUyODNcdTczNzJcdTViOTZcdTZhNmJcdTk0MDRcdTU0ZWVcdTU2ODZcdTViNWRcdTY1NDhcdTY1ODVcdTY2YzlcdTY4OWZcdTZkOGRcdTZkYzZcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9'@;
put 'X1syNTJdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzI1Ml1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syNTJdW2ddXT02NDUxMitnLHlbNjQ1MTIrZ109X1syNTJdW2ddKTtmb3IoX1syNTNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTcyM2JcdTgwYjRcdTkxNzVcdTlhNGRcdTRmYWZcdTUwMTlcdTUzOWFcdTU0MGVcdTU0M2NcdTU1ODlcdTU1YzVcdTVlM2ZcdTVmOGNcdTY3'@;
put 'M2RcdTcxNjZcdTczZGRcdTkwMDVcdTUyZGJcdTUyZjNcdTU4NjRcdTU4Y2VcdTcxMDRcdTcxOGZcdTcxZmJcdTg1YjBcdThhMTNcdTY2ODhcdTg1YThcdTU1YTdcdTY2ODRcdTcxNGFcdTg0MzFcdTUzNDlcdTU1OTlcdTZiYzFcdTVmNTlcdTVmYmRcdTYzZWVcdTY2ODlcdTcxNDdcdThhZjFc'@;
put 'dThmMWRcdTllYmVcdTRmMTFcdTY0M2FcdTcwY2JcdTc1NjZcdTg2NjdcdTYwNjRcdThiNGVcdTlkZjhcdTUxNDdcdTUxZjZcdTUzMDhcdTZkMzZcdTgwZjhcdTllZDFcdTY2MTVcdTZiMjNcdTcwOThcdTc1ZDVcdTU0MDNcdTVjNzlcdTdkMDdcdThhMTZcdTZiMjBcdTZiM2RcdTZiNDZcdTU0'@;
put 'MzhcdTYwNzBcdTZkM2RcdTdmZDVcdTgyMDhcdTUwZDZcdTUxZGVcdTU1OWNcdTU2NmJcdTU2Y2RcdTU5ZWNcdTViMDlcdTVlMGNcdTYxOTlcdTYxOThcdTYyMzFcdTY2NWVcdTY2ZTZcdTcxOTlcdTcxYjlcdTcxYmFcdTcyYTdcdTc5YTdcdTdhMDBcdTdmYjJcdThhNzBcdWZmZmQiLnNwbGl0'@;
put 'KCIiKSxnPTA7ZyE9X1syNTNdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzI1M11bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syNTNdW2ddXT02NDc2OCtnLHlbNjQ3NjgrZ109X1syNTNdW2ddKTtyZXR1cm57ZW5jOkksZGVjOnl9fSgpLFhbOTUwXT1mdW5jdGlvbigpe3ZhciBnLHk9W10sST17fSxf'@;
put 'PVtdO2ZvcihfWzBdPSJcMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWYgIVwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJD'@;
put 'REVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XHg3Zlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzBdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzBdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMF1bZ11dPTArZyx5WzArZ109X1swXVtnXSk7Zm9yKF9bMTYxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHUzMDAwXHVmZjBjXHUzMDAxXHUzMDAyXHVmZjBlXHUyMDI3XHVmZjFiXHVmZjFhXHVmZjFmXHVmZjAxXHVmZTMwXHUyMDI2XHUyMDI1XHVmZTUwXHVmZTUxXHVmZTUyXHhiN1x1ZmU1NFx1ZmU1NVx1ZmU1Nlx1ZmU1N1x1ZmY1Y1x1MjAxM1x1ZmUzMVx1MjAxNFx1ZmUzM1x1MjU3'@;
put 'NFx1ZmUzNFx1ZmU0Zlx1ZmYwOFx1ZmYwOVx1ZmUzNVx1ZmUzNlx1ZmY1Ylx1ZmY1ZFx1ZmUzN1x1ZmUzOFx1MzAxNFx1MzAxNVx1ZmUzOVx1ZmUzYVx1MzAxMFx1MzAxMVx1ZmUzYlx1ZmUzY1x1MzAwYVx1MzAwYlx1ZmUzZFx1ZmUzZVx1MzAwOFx1MzAwOVx1ZmUzZlx1ZmU0MFx1MzAwY1x1'@;
put 'MzAwZFx1ZmU0MVx1ZmU0Mlx1MzAwZVx1MzAwZlx1ZmU0M1x1ZmU0NFx1ZmU1OVx1ZmU1YVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmU1Ylx1ZmU1Y1x1ZmU1ZFx1ZmU1ZVx1MjAxOFx1MjAxOVx1MjAxY1x1MjAxZFx1MzAxZFx1MzAxZVx1MjAzNVx1MjAzMlx1'@;
put 'ZmYwM1x1ZmYwNlx1ZmYwYVx1MjAzYlx4YTdcdTMwMDNcdTI1Y2JcdTI1Y2ZcdTI1YjNcdTI1YjJcdTI1Y2VcdTI2MDZcdTI2MDVcdTI1YzdcdTI1YzZcdTI1YTFcdTI1YTBcdTI1YmRcdTI1YmNcdTMyYTNcdTIxMDVceGFmXHVmZmUzXHVmZjNmXHUwMmNkXHVmZTQ5XHVmZTRhXHVmZTRkXHVm'@;
put 'ZTRlXHVmZTRiXHVmZTRjXHVmZTVmXHVmZTYwXHVmZTYxXHVmZjBiXHVmZjBkXHhkN1x4ZjdceGIxXHUyMjFhXHVmZjFjXHVmZjFlXHVmZjFkXHUyMjY2XHUyMjY3XHUyMjYwXHUyMjFlXHUyMjUyXHUyMjYxXHVmZTYyXHVmZTYzXHVmZTY0XHVmZTY1XHVmZTY2XHVmZjVlXHUyMjI5XHUyMjJh'@;
put 'XHUyMmE1XHUyMjIwXHUyMjFmXHUyMmJmXHUzM2QyXHUzM2QxXHUyMjJiXHUyMjJlXHUyMjM1XHUyMjM0XHUyNjQwXHUyNjQyXHUyMjk1XHUyMjk5XHUyMTkxXHUyMTkzXHUyMTkwXHUyMTkyXHUyMTk2XHUyMTk3XHUyMTk5XHUyMTk4XHUyMjI1XHUyMjIzXHVmZjBmXHVmZmZkIi5zcGxpdCgi'@;
put 'IiksZz0wO2chPV9bMTYxXS5sZW5ndGg7KytnKTY1NTMzIT09X1sxNjFdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTYxXVtnXV09NDEyMTYrZyx5WzQxMjE2K2ddPV9bMTYxXVtnXSk7Zm9yKF9bMTYyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZjNjXHUyMjE1XHVmZTY4XHVmZjA0XHVmZmU1XHUzMDEyXHVmZmUwXHVmZmUxXHVmZjA1XHVmZjIwXHUyMTAzXHUyMTA5XHVmZTY5XHVmZTZhXHVmZTZiXHUzM2Q1XHUzMzljXHUzMzlkXHUzMzllXHUzM2NlXHUzM2ExXHUzMzhlXHUzMzhmXHUzM2M0XHhiMFx1NTE1OVx1NTE1'@;
put 'Ylx1NTE1ZVx1NTE1ZFx1NTE2MVx1NTE2M1x1NTVlN1x1NzRlOVx1N2NjZVx1MjU4MVx1MjU4Mlx1MjU4M1x1MjU4NFx1MjU4NVx1MjU4Nlx1MjU4N1x1MjU4OFx1MjU4Zlx1MjU4ZVx1MjU4ZFx1MjU4Y1x1MjU4Ylx1MjU4YVx1MjU4OVx1MjUzY1x1MjUzNFx1MjUyY1x1MjUyNFx1MjUxY1x1'@;
put 'MjU5NFx1MjUwMFx1MjUwMlx1MjU5NVx1MjUwY1x1MjUxMFx1MjUxNFx1MjUxOFx1MjU2ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MjU2ZVx1MjU3MFx1MjU2Zlx1MjU1MFx1MjU1ZVx1MjU2YVx1MjU2MVx1MjVlMlx1MjVlM1x1MjVlNVx1MjVlNFx1MjU3MVx1'@;
put 'MjU3Mlx1MjU3M1x1ZmYxMFx1ZmYxMVx1ZmYxMlx1ZmYxM1x1ZmYxNFx1ZmYxNVx1ZmYxNlx1ZmYxN1x1ZmYxOFx1ZmYxOVx1MjE2MFx1MjE2MVx1MjE2Mlx1MjE2M1x1MjE2NFx1MjE2NVx1MjE2Nlx1MjE2N1x1MjE2OFx1MjE2OVx1MzAyMVx1MzAyMlx1MzAyM1x1MzAyNFx1MzAyNVx1MzAy'@;
put 'Nlx1MzAyN1x1MzAyOFx1MzAyOVx1NTM0MVx1NTM0NFx1NTM0NVx1ZmYyMVx1ZmYyMlx1ZmYyM1x1ZmYyNFx1ZmYyNVx1ZmYyNlx1ZmYyN1x1ZmYyOFx1ZmYyOVx1ZmYyYVx1ZmYyYlx1ZmYyY1x1ZmYyZFx1ZmYyZVx1ZmYyZlx1ZmYzMFx1ZmYzMVx1ZmYzMlx1ZmYzM1x1ZmYzNFx1ZmYzNVx1'@;
put 'ZmYzNlx1ZmYzN1x1ZmYzOFx1ZmYzOVx1ZmYzYVx1ZmY0MVx1ZmY0Mlx1ZmY0M1x1ZmY0NFx1ZmY0NVx1ZmY0Nlx1ZmY0N1x1ZmY0OFx1ZmY0OVx1ZmY0YVx1ZmY0Ylx1ZmY0Y1x1ZmY0ZFx1ZmY0ZVx1ZmY0Zlx1ZmY1MFx1ZmY1MVx1ZmY1Mlx1ZmY1M1x1ZmY1NFx1ZmY1NVx1ZmY1Nlx1ZmZm'@;
put 'ZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE2Ml0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTYyXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE2Ml1bZ11dPTQxNDcyK2cseVs0MTQ3MitnXT1fWzE2Ml1bZ10pO2ZvcihfWzE2M109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmY1N1x1ZmY1OFx1ZmY1OVx1ZmY1YVx1MDM5MVx1MDM5Mlx1MDM5M1x1MDM5NFx1MDM5NVx1MDM5Nlx1MDM5N1x1MDM5OFx1MDM5OVx1MDM5YVx1MDM5Ylx1MDM5Y1x1MDM5ZFx1MDM5ZVx1MDM5Zlx1MDNhMFx1MDNhMVx1MDNhM1x1MDNhNFx1MDNhNVx1MDNh'@;
put 'Nlx1MDNhN1x1MDNhOFx1MDNhOVx1MDNiMVx1MDNiMlx1MDNiM1x1MDNiNFx1MDNiNVx1MDNiNlx1MDNiN1x1MDNiOFx1MDNiOVx1MDNiYVx1MDNiYlx1MDNiY1x1MDNiZFx1MDNiZVx1MDNiZlx1MDNjMFx1MDNjMVx1MDNjM1x1MDNjNFx1MDNjNVx1MDNjNlx1MDNjN1x1MDNjOFx1MDNjOVx1'@;
put 'MzEwNVx1MzEwNlx1MzEwN1x1MzEwOFx1MzEwOVx1MzEwYVx1MzEwYlx1MzEwY1x1MzEwZFx1MzEwZVx1MzEwZlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MzExMFx1MzExMVx1MzExMlx1MzExM1x1MzExNFx1MzExNVx1MzExNlx1MzExN1x1MzExOFx1MzExOVx1'@;
put 'MzExYVx1MzExYlx1MzExY1x1MzExZFx1MzExZVx1MzExZlx1MzEyMFx1MzEyMVx1MzEyMlx1MzEyM1x1MzEyNFx1MzEyNVx1MzEyNlx1MzEyN1x1MzEyOFx1MzEyOVx1MDJkOVx1MDJjOVx1MDJjYVx1MDJjN1x1MDJjYlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MjBhY1x1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE2M10ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTYzXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE2M11bZ11dPTQxNzI4K2cseVs0MTcyOCtnXT1fWzE2M11bZ10pO2ZvcihfWzE2NF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NGUwMFx1NGU1OVx1NGUwMVx1NGUwM1x1NGU0M1x1NGU1ZFx1NGU4Nlx1NGU4Y1x1NGViYVx1NTEzZlx1NTE2NVx1NTE2Ylx1NTFlMFx1NTIwMFx1NTIwMVx1NTI5Ylx1NTMxNVx1NTM0MVx1NTM1Y1x1NTNjOFx1NGUwOVx1NGUwYlx1NGUw'@;
put 'OFx1NGUwYVx1NGUyYlx1NGUzOFx1NTFlMVx1NGU0NVx1NGU0OFx1NGU1Zlx1NGU1ZVx1NGU4ZVx1NGVhMVx1NTE0MFx1NTIwM1x1NTJmYVx1NTM0M1x1NTNjOVx1NTNlM1x1NTcxZlx1NThlYlx1NTkxNVx1NTkyN1x1NTk3M1x1NWI1MFx1NWI1MVx1NWI1M1x1NWJmOFx1NWMwZlx1NWMyMlx1'@;
put 'NWMzOFx1NWM3MVx1NWRkZFx1NWRlNVx1NWRmMVx1NWRmMlx1NWRmM1x1NWRmZVx1NWU3Mlx1NWVmZVx1NWYwYlx1NWYxM1x1NjI0ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NGUxMVx1NGUxMFx1NGUwZFx1NGUyZFx1NGUzMFx1NGUzOVx1NGU0Ylx1NWMzOVx1'@;
put 'NGU4OFx1NGU5MVx1NGU5NVx1NGU5Mlx1NGU5NFx1NGVhMlx1NGVjMVx1NGVjMFx1NGVjM1x1NGVjNlx1NGVjN1x1NGVjZFx1NGVjYVx1NGVjYlx1NGVjNFx1NTE0M1x1NTE0MVx1NTE2N1x1NTE2ZFx1NTE2ZVx1NTE2Y1x1NTE5N1x1NTFmNlx1NTIwNlx1NTIwN1x1NTIwOFx1NTJmYlx1NTJm'@;
put 'ZVx1NTJmZlx1NTMxNlx1NTMzOVx1NTM0OFx1NTM0N1x1NTM0NVx1NTM1ZVx1NTM4NFx1NTNjYlx1NTNjYVx1NTNjZFx1NThlY1x1NTkyOVx1NTkyYlx1NTkyYVx1NTkyZFx1NWI1NFx1NWMxMVx1NWMyNFx1NWMzYVx1NWM2Zlx1NWRmNFx1NWU3Ylx1NWVmZlx1NWYxNFx1NWYxNVx1NWZjM1x1'@;
put 'NjIwOFx1NjIzNlx1NjI0Ylx1NjI0ZVx1NjUyZlx1NjU4N1x1NjU5N1x1NjVhNFx1NjViOVx1NjVlNVx1NjZmMFx1NjcwOFx1NjcyOFx1NmIyMFx1NmI2Mlx1NmI3OVx1NmJjYlx1NmJkNFx1NmJkYlx1NmMwZlx1NmMzNFx1NzA2Ylx1NzIyYVx1NzIzNlx1NzIzYlx1NzI0N1x1NzI1OVx1NzI1'@;
put 'Ylx1NzJhY1x1NzM4Ylx1NGUxOVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE2NF0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTY0XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE2NF1bZ11dPTQxOTg0K2cseVs0MTk4NCtnXT1fWzE2NF1bZ10pO2ZvcihfWzE2NV09Ilx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NGUxNlx1NGUxNVx1NGUxNFx1NGUxOFx1NGUzYlx1NGU0ZFx1NGU0Zlx1NGU0ZVx1NGVlNVx1NGVkOFx1NGVkNFx1NGVkNVx1NGVkNlx1NGVkN1x1NGVlM1x1NGVlNFx1NGVkOVx1NGVkZVx1NTE0NVx1NTE0NFx1NTE4'@;
put 'OVx1NTE4YVx1NTFhY1x1NTFmOVx1NTFmYVx1NTFmOFx1NTIwYVx1NTJhMFx1NTI5Zlx1NTMwNVx1NTMwNlx1NTMxN1x1NTMxZFx1NGVkZlx1NTM0YVx1NTM0OVx1NTM2MVx1NTM2MFx1NTM2Zlx1NTM2ZVx1NTNiYlx1NTNlZlx1NTNlNFx1NTNmM1x1NTNlY1x1NTNlZVx1NTNlOVx1NTNlOFx1'@;
put 'NTNmY1x1NTNmOFx1NTNmNVx1NTNlYlx1NTNlNlx1NTNlYVx1NTNmMlx1NTNmMVx1NTNmMFx1NTNlNVx1NTNlZFx1NTNmYlx1NTZkYlx1NTZkYVx1NTkxNlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTkyZVx1NTkzMVx1NTk3NFx1NTk3Nlx1NWI1NVx1NWI4M1x1'@;
put 'NWMzY1x1NWRlOFx1NWRlN1x1NWRlNlx1NWUwMlx1NWUwM1x1NWU3M1x1NWU3Y1x1NWYwMVx1NWYxOFx1NWYxN1x1NWZjNVx1NjIwYVx1NjI1M1x1NjI1NFx1NjI1Mlx1NjI1MVx1NjVhNVx1NjVlNlx1NjcyZVx1NjcyY1x1NjcyYVx1NjcyYlx1NjcyZFx1NmI2M1x1NmJjZFx1NmMxMVx1NmMx'@;
put 'MFx1NmMzOFx1NmM0MVx1NmM0MFx1NmMzZVx1NzJhZlx1NzM4NFx1NzM4OVx1NzRkY1x1NzRlNlx1NzUxOFx1NzUxZlx1NzUyOFx1NzUyOVx1NzUzMFx1NzUzMVx1NzUzMlx1NzUzM1x1NzU4Ylx1NzY3ZFx1NzZhZVx1NzZiZlx1NzZlZVx1NzdkYlx1NzdlMlx1NzdmM1x1NzkzYVx1NzliZVx1'@;
put 'N2E3NFx1N2FjYlx1NGUxZVx1NGUxZlx1NGU1Mlx1NGU1M1x1NGU2OVx1NGU5OVx1NGVhNFx1NGVhNlx1NGVhNVx1NGVmZlx1NGYwOVx1NGYxOVx1NGYwYVx1NGYxNVx1NGYwZFx1NGYxMFx1NGYxMVx1NGYwZlx1NGVmMlx1NGVmNlx1NGVmYlx1NGVmMFx1NGVmM1x1NGVmZFx1NGYwMVx1NGYw'@;
put 'Ylx1NTE0OVx1NTE0N1x1NTE0Nlx1NTE0OFx1NTE2OFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE2NV0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTY1XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE2NV1bZ11dPTQyMjQwK2cseVs0MjI0MCtnXT1fWzE2NV1bZ10pO2ZvcihfWzE2Nl09Ilx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTE3MVx1NTE4ZFx1NTFiMFx1NTIxN1x1NTIxMVx1NTIxMlx1NTIwZVx1NTIxNlx1NTJhM1x1NTMwOFx1NTMyMVx1NTMyMFx1NTM3MFx1NTM3MVx1NTQwOVx1NTQwZlx1NTQwY1x1NTQwYVx1NTQx'@;
put 'MFx1NTQwMVx1NTQwYlx1NTQwNFx1NTQxMVx1NTQwZFx1NTQwOFx1NTQwM1x1NTQwZVx1NTQwNlx1NTQxMlx1NTZlMFx1NTZkZVx1NTZkZFx1NTczM1x1NTczMFx1NTcyOFx1NTcyZFx1NTcyY1x1NTcyZlx1NTcyOVx1NTkxOVx1NTkxYVx1NTkzN1x1NTkzOFx1NTk4NFx1NTk3OFx1NTk4M1x1'@;
put 'NTk3ZFx1NTk3OVx1NTk4Mlx1NTk4MVx1NWI1N1x1NWI1OFx1NWI4N1x1NWI4OFx1NWI4NVx1NWI4OVx1NWJmYVx1NWMxNlx1NWM3OVx1NWRkZVx1NWUwNlx1NWU3Nlx1NWU3NFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NWYwZlx1NWYxYlx1NWZkOVx1NWZkNlx1'@;
put 'NjIwZVx1NjIwY1x1NjIwZFx1NjIxMFx1NjI2M1x1NjI1Ylx1NjI1OFx1NjUzNlx1NjVlOVx1NjVlOFx1NjVlY1x1NjVlZFx1NjZmMlx1NjZmM1x1NjcwOVx1NjczZFx1NjczNFx1NjczMVx1NjczNVx1NmIyMVx1NmI2NFx1NmI3Ylx1NmMxNlx1NmM1ZFx1NmM1N1x1NmM1OVx1NmM1Zlx1NmM2'@;
put 'MFx1NmM1MFx1NmM1NVx1NmM2MVx1NmM1Ylx1NmM0ZFx1NmM0ZVx1NzA3MFx1NzI1Zlx1NzI1ZFx1NzY3ZVx1N2FmOVx1N2M3M1x1N2NmOFx1N2YzNlx1N2Y4YVx1N2ZiZFx1ODAwMVx1ODAwM1x1ODAwY1x1ODAxMlx1ODAzM1x1ODA3Zlx1ODA4OVx1ODA4Ylx1ODA4Y1x1ODFlM1x1ODFlYVx1'@;
put 'ODFmM1x1ODFmY1x1ODIwY1x1ODIxYlx1ODIxZlx1ODI2ZVx1ODI3Mlx1ODI3ZVx1ODY2Ylx1ODg0MFx1ODg0Y1x1ODg2M1x1ODk3Zlx1OTYyMVx1NGUzMlx1NGVhOFx1NGY0ZFx1NGY0Zlx1NGY0N1x1NGY1N1x1NGY1ZVx1NGYzNFx1NGY1Ylx1NGY1NVx1NGYzMFx1NGY1MFx1NGY1MVx1NGYz'@;
put 'ZFx1NGYzYVx1NGYzOFx1NGY0M1x1NGY1NFx1NGYzY1x1NGY0Nlx1NGY2M1x1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE2Nl0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTY2XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE2Nl1bZ11dPTQyNDk2K2cseVs0MjQ5NitnXT1fWzE2Nl1bZ10pO2Zv'@;
put 'cihfWzE2N109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NGY1Y1x1NGY2MFx1NGYyZlx1NGY0ZVx1NGYzNlx1NGY1OVx1NGY1ZFx1NGY0OFx1NGY1YVx1NTE0Y1x1NTE0Ylx1NTE0ZFx1NTE3NVx1NTFiNlx1NTFiN1x1NTIyNVx1NTIy'@;
put 'NFx1NTIyOVx1NTIyYVx1NTIyOFx1NTJhYlx1NTJhOVx1NTJhYVx1NTJhY1x1NTMyM1x1NTM3M1x1NTM3NVx1NTQxZFx1NTQyZFx1NTQxZVx1NTQzZVx1NTQyNlx1NTQ0ZVx1NTQyN1x1NTQ0Nlx1NTQ0M1x1NTQzM1x1NTQ0OFx1NTQ0Mlx1NTQxYlx1NTQyOVx1NTQ0YVx1NTQzOVx1NTQzYlx1'@;
put 'NTQzOFx1NTQyZVx1NTQzNVx1NTQzNlx1NTQyMFx1NTQzY1x1NTQ0MFx1NTQzMVx1NTQyYlx1NTQxZlx1NTQyY1x1NTZlYVx1NTZmMFx1NTZlNFx1NTZlYlx1NTc0YVx1NTc1MVx1NTc0MFx1NTc0ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTc0N1x1NTc0ZVx1'@;
put 'NTczZVx1NTc1MFx1NTc0Zlx1NTczYlx1NThlZlx1NTkzZVx1NTk5ZFx1NTk5Mlx1NTlhOFx1NTk5ZVx1NTlhM1x1NTk5OVx1NTk5Nlx1NTk4ZFx1NTlhNFx1NTk5M1x1NTk4YVx1NTlhNVx1NWI1ZFx1NWI1Y1x1NWI1YVx1NWI1Ylx1NWI4Y1x1NWI4Ylx1NWI4Zlx1NWMyY1x1NWM0MFx1NWM0'@;
put 'MVx1NWMzZlx1NWMzZVx1NWM5MFx1NWM5MVx1NWM5NFx1NWM4Y1x1NWRlYlx1NWUwY1x1NWU4Zlx1NWU4N1x1NWU4YVx1NWVmN1x1NWYwNFx1NWYxZlx1NWY2NFx1NWY2Mlx1NWY3N1x1NWY3OVx1NWZkOFx1NWZjY1x1NWZkN1x1NWZjZFx1NWZmMVx1NWZlYlx1NWZmOFx1NWZlYVx1NjIxMlx1'@;
put 'NjIxMVx1NjI4NFx1NjI5N1x1NjI5Nlx1NjI4MFx1NjI3Nlx1NjI4OVx1NjI2ZFx1NjI4YVx1NjI3Y1x1NjI3ZVx1NjI3OVx1NjI3M1x1NjI5Mlx1NjI2Zlx1NjI5OFx1NjI2ZVx1NjI5NVx1NjI5M1x1NjI5MVx1NjI4Nlx1NjUzOVx1NjUzYlx1NjUzOFx1NjVmMVx1NjZmNFx1Njc1Zlx1Njc0'@;
put 'ZVx1Njc0Zlx1Njc1MFx1Njc1MVx1Njc1Y1x1Njc1Nlx1Njc1ZVx1Njc0OVx1Njc0Nlx1Njc2MFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE2N10ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTY3XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE2N11bZ11dPTQyNzUyK2cseVs0Mjc1MitnXT1f'@;
put 'WzE2N11bZ10pO2ZvcihfWzE2OF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Njc1M1x1Njc1N1x1NmI2NVx1NmJjZlx1NmM0Mlx1NmM1ZVx1NmM5OVx1NmM4MVx1NmM4OFx1NmM4OVx1NmM4NVx1NmM5Ylx1NmM2YVx1NmM3YVx1NmM5'@;
put 'MFx1NmM3MFx1NmM4Y1x1NmM2OFx1NmM5Nlx1NmM5Mlx1NmM3ZFx1NmM4M1x1NmM3Mlx1NmM3ZVx1NmM3NFx1NmM4Nlx1NmM3Nlx1NmM4ZFx1NmM5NFx1NmM5OFx1NmM4Mlx1NzA3Nlx1NzA3Y1x1NzA3ZFx1NzA3OFx1NzI2Mlx1NzI2MVx1NzI2MFx1NzJjNFx1NzJjMlx1NzM5Nlx1NzUyY1x1'@;
put 'NzUyYlx1NzUzN1x1NzUzOFx1NzY4Mlx1NzZlZlx1NzdlM1x1NzljMVx1NzljMFx1NzliZlx1N2E3Nlx1N2NmYlx1N2Y1NVx1ODA5Nlx1ODA5M1x1ODA5ZFx1ODA5OFx1ODA5Ylx1ODA5YVx1ODBiMlx1ODI2Zlx1ODI5Mlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ODI4Ylx1ODI4ZFx1ODk4Ylx1ODlkMlx1OGEwMFx1OGMzN1x1OGM0Nlx1OGM1NVx1OGM5ZFx1OGQ2NFx1OGQ3MFx1OGRiM1x1OGVhYlx1OGVjYVx1OGY5Ylx1OGZiMFx1OGZjMlx1OGZjNlx1OGZjNVx1OGZjNFx1NWRlMVx1OTA5MVx1OTBhMlx1OTBhYVx1OTBhNlx1OTBhM1x1OTE0OVx1OTFj'@;
put 'Nlx1OTFjY1x1OTYzMlx1OTYyZVx1OTYzMVx1OTYyYVx1OTYyY1x1NGUyNlx1NGU1Nlx1NGU3M1x1NGU4Ylx1NGU5Ylx1NGU5ZVx1NGVhYlx1NGVhY1x1NGY2Zlx1NGY5ZFx1NGY4ZFx1NGY3M1x1NGY3Zlx1NGY2Y1x1NGY5Ylx1NGY4Ylx1NGY4Nlx1NGY4M1x1NGY3MFx1NGY3NVx1NGY4OFx1'@;
put 'NGY2OVx1NGY3Ylx1NGY5Nlx1NGY3ZVx1NGY4Zlx1NGY5MVx1NGY3YVx1NTE1NFx1NTE1Mlx1NTE1NVx1NTE2OVx1NTE3N1x1NTE3Nlx1NTE3OFx1NTFiZFx1NTFmZFx1NTIzYlx1NTIzOFx1NTIzN1x1NTIzYVx1NTIzMFx1NTIyZVx1NTIzNlx1NTI0MVx1NTJiZVx1NTJiYlx1NTM1Mlx1NTM1'@;
put 'NFx1NTM1M1x1NTM1MVx1NTM2Nlx1NTM3N1x1NTM3OFx1NTM3OVx1NTNkNlx1NTNkNFx1NTNkN1x1NTQ3M1x1NTQ3NVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE2OF0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTY4XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE2OF1bZ11dPTQzMDA4K2cs'@;
put 'eVs0MzAwOCtnXT1fWzE2OF1bZ10pO2ZvcihfWzE2OV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTQ5Nlx1NTQ3OFx1NTQ5NVx1NTQ4MFx1NTQ3Ylx1NTQ3N1x1NTQ4NFx1NTQ5Mlx1NTQ4Nlx1NTQ3Y1x1NTQ5MFx1NTQ3MVx1NTQ3'@;
put 'Nlx1NTQ4Y1x1NTQ5YVx1NTQ2Mlx1NTQ2OFx1NTQ4Ylx1NTQ3ZFx1NTQ4ZVx1NTZmYVx1NTc4M1x1NTc3N1x1NTc2YVx1NTc2OVx1NTc2MVx1NTc2Nlx1NTc2NFx1NTc3Y1x1NTkxY1x1NTk0OVx1NTk0N1x1NTk0OFx1NTk0NFx1NTk1NFx1NTliZVx1NTliYlx1NTlkNFx1NTliOVx1NTlhZVx1'@;
put 'NTlkMVx1NTljNlx1NTlkMFx1NTljZFx1NTljYlx1NTlkM1x1NTljYVx1NTlhZlx1NTliM1x1NTlkMlx1NTljNVx1NWI1Zlx1NWI2NFx1NWI2M1x1NWI5N1x1NWI5YVx1NWI5OFx1NWI5Y1x1NWI5OVx1NWI5Ylx1NWMxYVx1NWM0OFx1NWM0NVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1NWM0Nlx1NWNiN1x1NWNhMVx1NWNiOFx1NWNhOVx1NWNhYlx1NWNiMVx1NWNiM1x1NWUxOFx1NWUxYVx1NWUxNlx1NWUxNVx1NWUxYlx1NWUxMVx1NWU3OFx1NWU5YVx1NWU5N1x1NWU5Y1x1NWU5NVx1NWU5Nlx1NWVmNlx1NWYyNlx1NWYyN1x1NWYyOVx1NWY4MFx1NWY4'@;
put 'MVx1NWY3Zlx1NWY3Y1x1NWZkZFx1NWZlMFx1NWZmZFx1NWZmNVx1NWZmZlx1NjAwZlx1NjAxNFx1NjAyZlx1NjAzNVx1NjAxNlx1NjAyYVx1NjAxNVx1NjAyMVx1NjAyN1x1NjAyOVx1NjAyYlx1NjAxYlx1NjIxNlx1NjIxNVx1NjIzZlx1NjIzZVx1NjI0MFx1NjI3Zlx1NjJjOVx1NjJjY1x1'@;
put 'NjJjNFx1NjJiZlx1NjJjMlx1NjJiOVx1NjJkMlx1NjJkYlx1NjJhYlx1NjJkM1x1NjJkNFx1NjJjYlx1NjJjOFx1NjJhOFx1NjJiZFx1NjJiY1x1NjJkMFx1NjJkOVx1NjJjN1x1NjJjZFx1NjJiNVx1NjJkYVx1NjJiMVx1NjJkOFx1NjJkNlx1NjJkN1x1NjJjNlx1NjJhY1x1NjJjZVx1NjUz'@;
put 'ZVx1NjVhN1x1NjViY1x1NjVmYVx1NjYxNFx1NjYxM1x1NjYwY1x1NjYwNlx1NjYwMlx1NjYwZVx1NjYwMFx1NjYwZlx1NjYxNVx1NjYwYVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE2OV0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTY5XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE2OV1b'@;
put 'Z11dPTQzMjY0K2cseVs0MzI2NCtnXT1fWzE2OV1bZ10pO2ZvcihfWzE3MF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjYwN1x1NjcwZFx1NjcwYlx1Njc2ZFx1Njc4Ylx1Njc5NVx1Njc3MVx1Njc5Y1x1Njc3M1x1Njc3N1x1Njc4'@;
put 'N1x1Njc5ZFx1Njc5N1x1Njc2Zlx1Njc3MFx1Njc3Zlx1Njc4OVx1Njc3ZVx1Njc5MFx1Njc3NVx1Njc5YVx1Njc5M1x1Njc3Y1x1Njc2YVx1Njc3Mlx1NmIyM1x1NmI2Nlx1NmI2N1x1NmI3Zlx1NmMxM1x1NmMxYlx1NmNlM1x1NmNlOFx1NmNmM1x1NmNiMVx1NmNjY1x1NmNlNVx1NmNiM1x1'@;
put 'NmNiZFx1NmNiZVx1NmNiY1x1NmNlMlx1NmNhYlx1NmNkNVx1NmNkM1x1NmNiOFx1NmNjNFx1NmNiOVx1NmNjMVx1NmNhZVx1NmNkN1x1NmNjNVx1NmNmMVx1NmNiZlx1NmNiYlx1NmNlMVx1NmNkYlx1NmNjYVx1NmNhY1x1NmNlZlx1NmNkY1x1NmNkNlx1NmNlMFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzA5NVx1NzA4ZVx1NzA5Mlx1NzA4YVx1NzA5OVx1NzIyY1x1NzIyZFx1NzIzOFx1NzI0OFx1NzI2N1x1NzI2OVx1NzJjMFx1NzJjZVx1NzJkOVx1NzJkN1x1NzJkMFx1NzNhOVx1NzNhOFx1NzM5Zlx1NzNhYlx1NzNhNVx1NzUzZFx1NzU5ZFx1NzU5'@;
put 'OVx1NzU5YVx1NzY4NFx1NzZjMlx1NzZmMlx1NzZmNFx1NzdlNVx1NzdmZFx1NzkzZVx1Nzk0MFx1Nzk0MVx1NzljOVx1NzljOFx1N2E3YVx1N2E3OVx1N2FmYVx1N2NmZVx1N2Y1NFx1N2Y4Y1x1N2Y4Ylx1ODAwNVx1ODBiYVx1ODBhNVx1ODBhMlx1ODBiMVx1ODBhMVx1ODBhYlx1ODBhOVx1'@;
put 'ODBiNFx1ODBhYVx1ODBhZlx1ODFlNVx1ODFmZVx1ODIwZFx1ODJiM1x1ODI5ZFx1ODI5OVx1ODJhZFx1ODJiZFx1ODI5Zlx1ODJiOVx1ODJiMVx1ODJhY1x1ODJhNVx1ODJhZlx1ODJiOFx1ODJhM1x1ODJiMFx1ODJiZVx1ODJiN1x1ODY0ZVx1ODY3MVx1NTIxZFx1ODg2OFx1OGVjYlx1OGZj'@;
put 'ZVx1OGZkNFx1OGZkMVx1OTBiNVx1OTBiOFx1OTBiMVx1OTBiNlx1OTFjN1x1OTFkMVx1OTU3N1x1OTU4MFx1OTYxY1x1OTY0MFx1OTYzZlx1OTYzYlx1OTY0NFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE3MF0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTcwXVtnXS5jaGFyQ29kZUF0KDAp'@;
put 'JiYoSVtfWzE3MF1bZ11dPTQzNTIwK2cseVs0MzUyMCtnXT1fWzE3MF1bZ10pO2ZvcihfWzE3MV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTY0Mlx1OTZiOVx1OTZlOFx1OTc1Mlx1OTc1ZVx1NGU5Zlx1NGVhZFx1NGVhZVx1NGZl'@;
put 'MVx1NGZiNVx1NGZhZlx1NGZiZlx1NGZlMFx1NGZkMVx1NGZjZlx1NGZkZFx1NGZjM1x1NGZiNlx1NGZkOFx1NGZkZlx1NGZjYVx1NGZkN1x1NGZhZVx1NGZkMFx1NGZjNFx1NGZjMlx1NGZkYVx1NGZjZVx1NGZkZVx1NGZiN1x1NTE1N1x1NTE5Mlx1NTE5MVx1NTFhMFx1NTI0ZVx1NTI0M1x1'@;
put 'NTI0YVx1NTI0ZFx1NTI0Y1x1NTI0Ylx1NTI0N1x1NTJjN1x1NTJjOVx1NTJjM1x1NTJjMVx1NTMwZFx1NTM1N1x1NTM3Ylx1NTM5YVx1NTNkYlx1NTRhY1x1NTRjMFx1NTRhOFx1NTRjZVx1NTRjOVx1NTRiOFx1NTRhNlx1NTRiM1x1NTRjN1x1NTRjMlx1NTRiZFx1NTRhYVx1NTRjMVx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTRjNFx1NTRjOFx1NTRhZlx1NTRhYlx1NTRiMVx1NTRiYlx1NTRhOVx1NTRhN1x1NTRiZlx1NTZmZlx1NTc4Mlx1NTc4Ylx1NTdhMFx1NTdhM1x1NTdhMlx1NTdjZVx1NTdhZVx1NTc5M1x1NTk1NVx1NTk1MVx1NTk0Zlx1NTk0'@;
put 'ZVx1NTk1MFx1NTlkY1x1NTlkOFx1NTlmZlx1NTllM1x1NTllOFx1NWEwM1x1NTllNVx1NTllYVx1NTlkYVx1NTllNlx1NWEwMVx1NTlmYlx1NWI2OVx1NWJhM1x1NWJhNlx1NWJhNFx1NWJhMlx1NWJhNVx1NWMwMVx1NWM0ZVx1NWM0Zlx1NWM0ZFx1NWM0Ylx1NWNkOVx1NWNkMlx1NWRmN1x1'@;
put 'NWUxZFx1NWUyNVx1NWUxZlx1NWU3ZFx1NWVhMFx1NWVhNlx1NWVmYVx1NWYwOFx1NWYyZFx1NWY2NVx1NWY4OFx1NWY4NVx1NWY4YVx1NWY4Ylx1NWY4N1x1NWY4Y1x1NWY4OVx1NjAxMlx1NjAxZFx1NjAyMFx1NjAyNVx1NjAwZVx1NjAyOFx1NjA0ZFx1NjA3MFx1NjA2OFx1NjA2Mlx1NjA0'@;
put 'Nlx1NjA0M1x1NjA2Y1x1NjA2Ylx1NjA2YVx1NjA2NFx1NjI0MVx1NjJkY1x1NjMxNlx1NjMwOVx1NjJmY1x1NjJlZFx1NjMwMVx1NjJlZVx1NjJmZFx1NjMwN1x1NjJmMVx1NjJmN1x1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE3MV0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTcxXVtnXS5j'@;
put 'aGFyQ29kZUF0KDApJiYoSVtfWzE3MV1bZ11dPTQzNzc2K2cseVs0Mzc3NitnXT1fWzE3MV1bZ10pO2ZvcihfWzE3Ml09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjJlZlx1NjJlY1x1NjJmZVx1NjJmNFx1NjMxMVx1NjMwMlx1NjUz'@;
put 'Zlx1NjU0NVx1NjVhYlx1NjViZFx1NjVlMlx1NjYyNVx1NjYyZFx1NjYyMFx1NjYyN1x1NjYyZlx1NjYxZlx1NjYyOFx1NjYzMVx1NjYyNFx1NjZmN1x1NjdmZlx1NjdkM1x1NjdmMVx1NjdkNFx1NjdkMFx1NjdlY1x1NjdiNlx1NjdhZlx1NjdmNVx1NjdlOVx1NjdlZlx1NjdjNFx1NjdkMVx1'@;
put 'NjdiNFx1NjdkYVx1NjdlNVx1NjdiOFx1NjdjZlx1NjdkZVx1NjdmM1x1NjdiMFx1NjdkOVx1NjdlMlx1NjdkZFx1NjdkMlx1NmI2YVx1NmI4M1x1NmI4Nlx1NmJiNVx1NmJkMlx1NmJkN1x1NmMxZlx1NmNjOVx1NmQwYlx1NmQzMlx1NmQyYVx1NmQ0MVx1NmQyNVx1NmQwY1x1NmQzMVx1NmQx'@;
put 'ZVx1NmQxN1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmQzYlx1NmQzZFx1NmQzZVx1NmQzNlx1NmQxYlx1NmNmNVx1NmQzOVx1NmQyN1x1NmQzOFx1NmQyOVx1NmQyZVx1NmQzNVx1NmQwZVx1NmQyYlx1NzBhYlx1NzBiYVx1NzBiM1x1NzBhY1x1NzBhZlx1NzBh'@;
put 'ZFx1NzBiOFx1NzBhZVx1NzBhNFx1NzIzMFx1NzI3Mlx1NzI2Zlx1NzI3NFx1NzJlOVx1NzJlMFx1NzJlMVx1NzNiN1x1NzNjYVx1NzNiYlx1NzNiMlx1NzNjZFx1NzNjMFx1NzNiM1x1NzUxYVx1NzUyZFx1NzU0Zlx1NzU0Y1x1NzU0ZVx1NzU0Ylx1NzVhYlx1NzVhNFx1NzVhNVx1NzVhMlx1'@;
put 'NzVhM1x1NzY3OFx1NzY4Nlx1NzY4N1x1NzY4OFx1NzZjOFx1NzZjNlx1NzZjM1x1NzZjNVx1NzcwMVx1NzZmOVx1NzZmOFx1NzcwOVx1NzcwYlx1NzZmZVx1NzZmY1x1NzcwN1x1NzdkY1x1NzgwMlx1NzgxNFx1NzgwY1x1NzgwZFx1Nzk0Nlx1Nzk0OVx1Nzk0OFx1Nzk0N1x1NzliOVx1Nzli'@;
put 'YVx1NzlkMVx1NzlkMlx1NzljYlx1N2E3Zlx1N2E4MVx1N2FmZlx1N2FmZFx1N2M3ZFx1N2QwMlx1N2QwNVx1N2QwMFx1N2QwOVx1N2QwN1x1N2QwNFx1N2QwNlx1N2YzOFx1N2Y4ZVx1N2ZiZlx1ODAwNFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE3Ml0ubGVuZ3RoOysrZyk2NTUzMyE9'@;
put 'PV9bMTcyXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE3Ml1bZ11dPTQ0MDMyK2cseVs0NDAzMitnXT1fWzE3Ml1bZ10pO2ZvcihfWzE3M109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODAxMFx1ODAwZFx1ODAxMVx1ODAzNlx1ODBk'@;
put 'Nlx1ODBlNVx1ODBkYVx1ODBjM1x1ODBjNFx1ODBjY1x1ODBlMVx1ODBkYlx1ODBjZVx1ODBkZVx1ODBlNFx1ODBkZFx1ODFmNFx1ODIyMlx1ODJlN1x1ODMwM1x1ODMwNVx1ODJlM1x1ODJkYlx1ODJlNlx1ODMwNFx1ODJlNVx1ODMwMlx1ODMwOVx1ODJkMlx1ODJkN1x1ODJmMVx1ODMwMVx1'@;
put 'ODJkY1x1ODJkNFx1ODJkMVx1ODJkZVx1ODJkM1x1ODJkZlx1ODJlZlx1ODMwNlx1ODY1MFx1ODY3OVx1ODY3Ylx1ODY3YVx1ODg0ZFx1ODg2Ylx1ODk4MVx1ODlkNFx1OGEwOFx1OGEwMlx1OGEwM1x1OGM5ZVx1OGNhMFx1OGQ3NFx1OGQ3M1x1OGRiNFx1OGVjZFx1OGVjY1x1OGZmMFx1OGZl'@;
put 'Nlx1OGZlMlx1OGZlYVx1OGZlNVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGZlZFx1OGZlYlx1OGZlNFx1OGZlOFx1OTBjYVx1OTBjZVx1OTBjMVx1OTBjM1x1OTE0Ylx1OTE0YVx1OTFjZFx1OTU4Mlx1OTY1MFx1OTY0Ylx1OTY0Y1x1OTY0ZFx1OTc2Mlx1OTc2'@;
put 'OVx1OTdjYlx1OTdlZFx1OTdmM1x1OTgwMVx1OThhOFx1OThkYlx1OThkZlx1OTk5Nlx1OTk5OVx1NGU1OFx1NGViM1x1NTAwY1x1NTAwZFx1NTAyM1x1NGZlZlx1NTAyNlx1NTAyNVx1NGZmOFx1NTAyOVx1NTAxNlx1NTAwNlx1NTAzY1x1NTAxZlx1NTAxYVx1NTAxMlx1NTAxMVx1NGZmYVx1'@;
put 'NTAwMFx1NTAxNFx1NTAyOFx1NGZmMVx1NTAyMVx1NTAwYlx1NTAxOVx1NTAxOFx1NGZmM1x1NGZlZVx1NTAyZFx1NTAyYVx1NGZmZVx1NTAyYlx1NTAwOVx1NTE3Y1x1NTFhNFx1NTFhNVx1NTFhMlx1NTFjZFx1NTFjY1x1NTFjNlx1NTFjYlx1NTI1Nlx1NTI1Y1x1NTI1NFx1NTI1Ylx1NTI1'@;
put 'ZFx1NTMyYVx1NTM3Zlx1NTM5Zlx1NTM5ZFx1NTNkZlx1NTRlOFx1NTUxMFx1NTUwMVx1NTUzN1x1NTRmY1x1NTRlNVx1NTRmMlx1NTUwNlx1NTRmYVx1NTUxNFx1NTRlOVx1NTRlZFx1NTRlMVx1NTUwOVx1NTRlZVx1NTRlYVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE3M10ubGVuZ3Ro'@;
put 'OysrZyk2NTUzMyE9PV9bMTczXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE3M11bZ11dPTQ0Mjg4K2cseVs0NDI4OCtnXT1fWzE3M11bZ10pO2ZvcihfWzE3NF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTRlNlx1NTUyN1x1NTUw'@;
put 'N1x1NTRmZFx1NTUwZlx1NTcwM1x1NTcwNFx1NTdjMlx1NTdkNFx1NTdjYlx1NTdjM1x1NTgwOVx1NTkwZlx1NTk1N1x1NTk1OFx1NTk1YVx1NWExMVx1NWExOFx1NWExY1x1NWExZlx1NWExYlx1NWExM1x1NTllY1x1NWEyMFx1NWEyM1x1NWEyOVx1NWEyNVx1NWEwY1x1NWEwOVx1NWI2Ylx1'@;
put 'NWM1OFx1NWJiMFx1NWJiM1x1NWJiNlx1NWJiNFx1NWJhZVx1NWJiNVx1NWJiOVx1NWJiOFx1NWMwNFx1NWM1MVx1NWM1NVx1NWM1MFx1NWNlZFx1NWNmZFx1NWNmYlx1NWNlYVx1NWNlOFx1NWNmMFx1NWNmNlx1NWQwMVx1NWNmNFx1NWRlZVx1NWUyZFx1NWUyYlx1NWVhYlx1NWVhZFx1NWVh'@;
put 'N1x1NWYzMVx1NWY5Mlx1NWY5MVx1NWY5MFx1NjA1OVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjA2M1x1NjA2NVx1NjA1MFx1NjA1NVx1NjA2ZFx1NjA2OVx1NjA2Zlx1NjA4NFx1NjA5Zlx1NjA5YVx1NjA4ZFx1NjA5NFx1NjA4Y1x1NjA4NVx1NjA5Nlx1NjI0'@;
put 'N1x1NjJmM1x1NjMwOFx1NjJmZlx1NjM0ZVx1NjMzZVx1NjMyZlx1NjM1NVx1NjM0Mlx1NjM0Nlx1NjM0Zlx1NjM0OVx1NjMzYVx1NjM1MFx1NjMzZFx1NjMyYVx1NjMyYlx1NjMyOFx1NjM0ZFx1NjM0Y1x1NjU0OFx1NjU0OVx1NjU5OVx1NjVjMVx1NjVjNVx1NjY0Mlx1NjY0OVx1NjY0Zlx1'@;
put 'NjY0M1x1NjY1Mlx1NjY0Y1x1NjY0NVx1NjY0MVx1NjZmOFx1NjcxNFx1NjcxNVx1NjcxN1x1NjgyMVx1NjgzOFx1Njg0OFx1Njg0Nlx1Njg1M1x1NjgzOVx1Njg0Mlx1Njg1NFx1NjgyOVx1NjhiM1x1NjgxN1x1Njg0Y1x1Njg1MVx1NjgzZFx1NjdmNFx1Njg1MFx1Njg0MFx1NjgzY1x1Njg0'@;
put 'M1x1NjgyYVx1Njg0NVx1NjgxM1x1NjgxOFx1Njg0MVx1NmI4YVx1NmI4OVx1NmJiN1x1NmMyM1x1NmMyN1x1NmMyOFx1NmMyNlx1NmMyNFx1NmNmMFx1NmQ2YVx1NmQ5NVx1NmQ4OFx1NmQ4N1x1NmQ2Nlx1NmQ3OFx1NmQ3N1x1NmQ1OVx1NmQ5M1x1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1f'@;
put 'WzE3NF0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTc0XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE3NF1bZ11dPTQ0NTQ0K2cseVs0NDU0NCtnXT1fWzE3NF1bZ10pO2ZvcihfWzE3NV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmQ2'@;
put 'Y1x1NmQ4OVx1NmQ2ZVx1NmQ1YVx1NmQ3NFx1NmQ2OVx1NmQ4Y1x1NmQ4YVx1NmQ3OVx1NmQ4NVx1NmQ2NVx1NmQ5NFx1NzBjYVx1NzBkOFx1NzBlNFx1NzBkOVx1NzBjOFx1NzBjZlx1NzIzOVx1NzI3OVx1NzJmY1x1NzJmOVx1NzJmZFx1NzJmOFx1NzJmN1x1NzM4Nlx1NzNlZFx1NzQwOVx1'@;
put 'NzNlZVx1NzNlMFx1NzNlYVx1NzNkZVx1NzU1NFx1NzU1ZFx1NzU1Y1x1NzU1YVx1NzU1OVx1NzViZVx1NzVjNVx1NzVjN1x1NzViMlx1NzViM1x1NzViZFx1NzViY1x1NzViOVx1NzVjMlx1NzViOFx1NzY4Ylx1NzZiMFx1NzZjYVx1NzZjZFx1NzZjZVx1NzcyOVx1NzcxZlx1NzcyMFx1Nzcy'@;
put 'OFx1NzdlOVx1NzgzMFx1NzgyN1x1NzgzOFx1NzgxZFx1NzgzNFx1NzgzN1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzgyNVx1NzgyZFx1NzgyMFx1NzgxZlx1NzgzMlx1Nzk1NVx1Nzk1MFx1Nzk2MFx1Nzk1Zlx1Nzk1Nlx1Nzk1ZVx1Nzk1ZFx1Nzk1N1x1Nzk1'@;
put 'YVx1NzllNFx1NzllM1x1NzllN1x1NzlkZlx1NzllNlx1NzllOVx1NzlkOFx1N2E4NFx1N2E4OFx1N2FkOVx1N2IwNlx1N2IxMVx1N2M4OVx1N2QyMVx1N2QxN1x1N2QwYlx1N2QwYVx1N2QyMFx1N2QyMlx1N2QxNFx1N2QxMFx1N2QxNVx1N2QxYVx1N2QxY1x1N2QwZFx1N2QxOVx1N2QxYlx1'@;
put 'N2YzYVx1N2Y1Zlx1N2Y5NFx1N2ZjNVx1N2ZjMVx1ODAwNlx1ODAxOFx1ODAxNVx1ODAxOVx1ODAxN1x1ODAzZFx1ODAzZlx1ODBmMVx1ODEwMlx1ODBmMFx1ODEwNVx1ODBlZFx1ODBmNFx1ODEwNlx1ODBmOFx1ODBmM1x1ODEwOFx1ODBmZFx1ODEwYVx1ODBmY1x1ODBlZlx1ODFlZFx1ODFl'@;
put 'Y1x1ODIwMFx1ODIxMFx1ODIyYVx1ODIyYlx1ODIyOFx1ODIyY1x1ODJiYlx1ODMyYlx1ODM1Mlx1ODM1NFx1ODM0YVx1ODMzOFx1ODM1MFx1ODM0OVx1ODMzNVx1ODMzNFx1ODM0Zlx1ODMzMlx1ODMzOVx1ODMzNlx1ODMxN1x1ODM0MFx1ODMzMVx1ODMyOFx1ODM0M1x1ZmZmZCIuc3BsaXQo'@;
put 'IiIpLGc9MDtnIT1fWzE3NV0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTc1XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE3NV1bZ11dPTQ0ODAwK2cseVs0NDgwMCtnXT1fWzE3NV1bZ10pO2ZvcihfWzE3Nl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ODY1NFx1ODY4YVx1ODZhYVx1ODY5M1x1ODZhNFx1ODZhOVx1ODY4Y1x1ODZhM1x1ODY5Y1x1ODg3MFx1ODg3N1x1ODg4MVx1ODg4Mlx1ODg3ZFx1ODg3OVx1OGExOFx1OGExMFx1OGEwZVx1OGEwY1x1OGExNVx1OGEwYVx1OGExN1x1OGExM1x1OGExNlx1OGEwZlx1OGExMVx1'@;
put 'OGM0OFx1OGM3YVx1OGM3OVx1OGNhMVx1OGNhMlx1OGQ3N1x1OGVhY1x1OGVkMlx1OGVkNFx1OGVjZlx1OGZiMVx1OTAwMVx1OTAwNlx1OGZmN1x1OTAwMFx1OGZmYVx1OGZmNFx1OTAwM1x1OGZmZFx1OTAwNVx1OGZmOFx1OTA5NVx1OTBlMVx1OTBkZFx1OTBlMlx1OTE1Mlx1OTE0ZFx1OTE0'@;
put 'Y1x1OTFkOFx1OTFkZFx1OTFkN1x1OTFkY1x1OTFkOVx1OTU4M1x1OTY2Mlx1OTY2M1x1OTY2MVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTY1Ylx1OTY1ZFx1OTY2NFx1OTY1OFx1OTY1ZVx1OTZiYlx1OThlMlx1OTlhY1x1OWFhOFx1OWFkOFx1OWIyNVx1OWIz'@;
put 'Mlx1OWIzY1x1NGU3ZVx1NTA3YVx1NTA3ZFx1NTA1Y1x1NTA0N1x1NTA0M1x1NTA0Y1x1NTA1YVx1NTA0OVx1NTA2NVx1NTA3Nlx1NTA0ZVx1NTA1NVx1NTA3NVx1NTA3NFx1NTA3N1x1NTA0Zlx1NTAwZlx1NTA2Zlx1NTA2ZFx1NTE1Y1x1NTE5NVx1NTFmMFx1NTI2YVx1NTI2Zlx1NTJkMlx1'@;
put 'NTJkOVx1NTJkOFx1NTJkNVx1NTMxMFx1NTMwZlx1NTMxOVx1NTMzZlx1NTM0MFx1NTMzZVx1NTNjM1x1NjZmY1x1NTU0Nlx1NTU2YVx1NTU2Nlx1NTU0NFx1NTU1ZVx1NTU2MVx1NTU0M1x1NTU0YVx1NTUzMVx1NTU1Nlx1NTU0Zlx1NTU1NVx1NTUyZlx1NTU2NFx1NTUzOFx1NTUyZVx1NTU1'@;
put 'Y1x1NTUyY1x1NTU2M1x1NTUzM1x1NTU0MVx1NTU1N1x1NTcwOFx1NTcwYlx1NTcwOVx1NTdkZlx1NTgwNVx1NTgwYVx1NTgwNlx1NTdlMFx1NTdlNFx1NTdmYVx1NTgwMlx1NTgzNVx1NTdmN1x1NTdmOVx1NTkyMFx1NTk2Mlx1NWEzNlx1NWE0MVx1NWE0OVx1NWE2Nlx1NWE2YVx1NWE0MFx1'@;
put 'ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE3Nl0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTc2XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE3Nl1bZ11dPTQ1MDU2K2cseVs0NTA1NitnXT1fWzE3Nl1bZ10pO2ZvcihfWzE3N109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NWEzY1x1NWE2Mlx1NWE1YVx1NWE0Nlx1NWE0YVx1NWI3MFx1NWJjN1x1NWJjNVx1NWJjNFx1NWJjMlx1NWJiZlx1NWJjNlx1NWMwOVx1NWMwOFx1NWMwN1x1NWM2MFx1NWM1Y1x1NWM1ZFx1NWQwN1x1NWQwNlx1NWQwZVx1NWQxYlx1NWQxNlx1NWQyMlx1'@;
put 'NWQxMVx1NWQyOVx1NWQxNFx1NWQxOVx1NWQyNFx1NWQyN1x1NWQxN1x1NWRlMlx1NWUzOFx1NWUzNlx1NWUzM1x1NWUzN1x1NWViN1x1NWViOFx1NWViNlx1NWViNVx1NWViZVx1NWYzNVx1NWYzN1x1NWY1N1x1NWY2Y1x1NWY2OVx1NWY2Ylx1NWY5N1x1NWY5OVx1NWY5ZVx1NWY5OFx1NWZh'@;
put 'MVx1NWZhMFx1NWY5Y1x1NjA3Zlx1NjBhM1x1NjA4OVx1NjBhMFx1NjBhOFx1NjBjYlx1NjBiNFx1NjBlNlx1NjBiZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjBjNVx1NjBiYlx1NjBiNVx1NjBkY1x1NjBiY1x1NjBkOFx1NjBkNVx1NjBjNlx1NjBkZlx1NjBi'@;
put 'OFx1NjBkYVx1NjBjN1x1NjIxYVx1NjIxYlx1NjI0OFx1NjNhMFx1NjNhN1x1NjM3Mlx1NjM5Nlx1NjNhMlx1NjNhNVx1NjM3N1x1NjM2N1x1NjM5OFx1NjNhYVx1NjM3MVx1NjNhOVx1NjM4OVx1NjM4M1x1NjM5Ylx1NjM2Ylx1NjNhOFx1NjM4NFx1NjM4OFx1NjM5OVx1NjNhMVx1NjNhY1x1'@;
put 'NjM5Mlx1NjM4Zlx1NjM4MFx1NjM3Ylx1NjM2OVx1NjM2OFx1NjM3YVx1NjU1ZFx1NjU1Nlx1NjU1MVx1NjU1OVx1NjU1N1x1NTU1Zlx1NjU0Zlx1NjU1OFx1NjU1NVx1NjU1NFx1NjU5Y1x1NjU5Ylx1NjVhY1x1NjVjZlx1NjVjYlx1NjVjY1x1NjVjZVx1NjY1ZFx1NjY1YVx1NjY2NFx1NjY2'@;
put 'OFx1NjY2Nlx1NjY1ZVx1NjZmOVx1NTJkN1x1NjcxYlx1Njg4MVx1NjhhZlx1NjhhMlx1Njg5M1x1NjhiNVx1Njg3Zlx1Njg3Nlx1NjhiMVx1NjhhN1x1Njg5N1x1NjhiMFx1Njg4M1x1NjhjNFx1NjhhZFx1Njg4Nlx1Njg4NVx1Njg5NFx1Njg5ZFx1NjhhOFx1Njg5Zlx1NjhhMVx1Njg4Mlx1'@;
put 'NmIzMlx1NmJiYVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE3N10ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTc3XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE3N11bZ11dPTQ1MzEyK2cseVs0NTMxMitnXT1fWzE3N11bZ10pO2ZvcihfWzE3OF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmJlYlx1NmJlY1x1NmMyYlx1NmQ4ZVx1NmRiY1x1NmRmM1x1NmRkOVx1NmRiMlx1NmRlMVx1NmRjY1x1NmRlNFx1NmRmYlx1NmRmYVx1NmUwNVx1NmRjN1x1NmRjYlx1NmRhZlx1NmRkMVx1NmRhZVx1NmRkZVx1NmRmOVx1NmRiOFx1'@;
put 'NmRmN1x1NmRmNVx1NmRjNVx1NmRkMlx1NmUxYVx1NmRiNVx1NmRkYVx1NmRlYlx1NmRkOFx1NmRlYVx1NmRmMVx1NmRlZVx1NmRlOFx1NmRjNlx1NmRjNFx1NmRhYVx1NmRlY1x1NmRiZlx1NmRlNlx1NzBmOVx1NzEwOVx1NzEwYVx1NzBmZFx1NzBlZlx1NzIzZFx1NzI3ZFx1NzI4MVx1NzMx'@;
put 'Y1x1NzMxYlx1NzMxNlx1NzMxM1x1NzMxOVx1NzM4N1x1NzQwNVx1NzQwYVx1NzQwM1x1NzQwNlx1NzNmZVx1NzQwZFx1NzRlMFx1NzRmNlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzRmN1x1NzUxY1x1NzUyMlx1NzU2NVx1NzU2Nlx1NzU2Mlx1NzU3MFx1NzU4'@;
put 'Zlx1NzVkNFx1NzVkNVx1NzViNVx1NzVjYVx1NzVjZFx1NzY4ZVx1NzZkNFx1NzZkMlx1NzZkYlx1NzczN1x1NzczZVx1NzczY1x1NzczNlx1NzczOFx1NzczYVx1Nzg2Ylx1Nzg0M1x1Nzg0ZVx1Nzk2NVx1Nzk2OFx1Nzk2ZFx1NzlmYlx1N2E5Mlx1N2E5NVx1N2IyMFx1N2IyOFx1N2IxYlx1'@;
put 'N2IyY1x1N2IyNlx1N2IxOVx1N2IxZVx1N2IyZVx1N2M5Mlx1N2M5N1x1N2M5NVx1N2Q0Nlx1N2Q0M1x1N2Q3MVx1N2QyZVx1N2QzOVx1N2QzY1x1N2Q0MFx1N2QzMFx1N2QzM1x1N2Q0NFx1N2QyZlx1N2Q0Mlx1N2QzMlx1N2QzMVx1N2YzZFx1N2Y5ZVx1N2Y5YVx1N2ZjY1x1N2ZjZVx1N2Zk'@;
put 'Mlx1ODAxY1x1ODA0YVx1ODA0Nlx1ODEyZlx1ODExNlx1ODEyM1x1ODEyYlx1ODEyOVx1ODEzMFx1ODEyNFx1ODIwMlx1ODIzNVx1ODIzN1x1ODIzNlx1ODIzOVx1ODM4ZVx1ODM5ZVx1ODM5OFx1ODM3OFx1ODNhMlx1ODM5Nlx1ODNiZFx1ODNhYlx1ODM5Mlx1ODM4YVx1ODM5M1x1ODM4OVx1'@;
put 'ODNhMFx1ODM3N1x1ODM3Ylx1ODM3Y1x1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE3OF0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTc4XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE3OF1bZ11dPTQ1NTY4K2cseVs0NTU2OCtnXT1fWzE3OF1bZ10pO2ZvcihfWzE3OV09Ilx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODM4Nlx1ODNhN1x1ODY1NVx1NWY2YVx1ODZjN1x1ODZjMFx1ODZiNlx1ODZjNFx1ODZiNVx1ODZjNlx1ODZjYlx1ODZiMVx1ODZhZlx1ODZjOVx1ODg1M1x1ODg5ZVx1ODg4OFx1ODhhYlx1ODg5Mlx1ODg5Nlx1'@;
put 'ODg4ZFx1ODg4Ylx1ODk5M1x1ODk4Zlx1OGEyYVx1OGExZFx1OGEyM1x1OGEyNVx1OGEzMVx1OGEyZFx1OGExZlx1OGExYlx1OGEyMlx1OGM0OVx1OGM1YVx1OGNhOVx1OGNhY1x1OGNhYlx1OGNhOFx1OGNhYVx1OGNhN1x1OGQ2N1x1OGQ2Nlx1OGRiZVx1OGRiYVx1OGVkYlx1OGVkZlx1OTAx'@;
put 'OVx1OTAwZFx1OTAxYVx1OTAxN1x1OTAyM1x1OTAxZlx1OTAxZFx1OTAxMFx1OTAxNVx1OTAxZVx1OTAyMFx1OTAwZlx1OTAyMlx1OTAxNlx1OTAxYlx1OTAxNFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTBlOFx1OTBlZFx1OTBmZFx1OTE1N1x1OTFjZVx1OTFm'@;
put 'NVx1OTFlNlx1OTFlM1x1OTFlN1x1OTFlZFx1OTFlOVx1OTU4OVx1OTY2YVx1OTY3NVx1OTY3M1x1OTY3OFx1OTY3MFx1OTY3NFx1OTY3Nlx1OTY3N1x1OTY2Y1x1OTZjMFx1OTZlYVx1OTZlOVx1N2FlMFx1N2FkZlx1OTgwMlx1OTgwM1x1OWI1YVx1OWNlNVx1OWU3NVx1OWU3Zlx1OWVhNVx1'@;
put 'OWViYlx1NTBhMlx1NTA4ZFx1NTA4NVx1NTA5OVx1NTA5MVx1NTA4MFx1NTA5Nlx1NTA5OFx1NTA5YVx1NjcwMFx1NTFmMVx1NTI3Mlx1NTI3NFx1NTI3NVx1NTI2OVx1NTJkZVx1NTJkZFx1NTJkYlx1NTM1YVx1NTNhNVx1NTU3Ylx1NTU4MFx1NTVhN1x1NTU3Y1x1NTU4YVx1NTU5ZFx1NTU5'@;
put 'OFx1NTU4Mlx1NTU5Y1x1NTVhYVx1NTU5NFx1NTU4N1x1NTU4Ylx1NTU4M1x1NTViM1x1NTVhZVx1NTU5Zlx1NTUzZVx1NTViMlx1NTU5YVx1NTViYlx1NTVhY1x1NTViMVx1NTU3ZVx1NTU4OVx1NTVhYlx1NTU5OVx1NTcwZFx1NTgyZlx1NTgyYVx1NTgzNFx1NTgyNFx1NTgzMFx1NTgzMVx1'@;
put 'NTgyMVx1NTgxZFx1NTgyMFx1NThmOVx1NThmYVx1NTk2MFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE3OV0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTc5XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE3OV1bZ11dPTQ1ODI0K2cseVs0NTgyNCtnXT1fWzE3OV1bZ10pO2ZvcihfWzE4MF09'@;
put 'Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NWE3N1x1NWE5YVx1NWE3Zlx1NWE5Mlx1NWE5Ylx1NWFhN1x1NWI3M1x1NWI3MVx1NWJkMlx1NWJjY1x1NWJkM1x1NWJkMFx1NWMwYVx1NWMwYlx1NWMzMVx1NWQ0Y1x1NWQ1MFx1NWQzNFx1'@;
put 'NWQ0N1x1NWRmZFx1NWU0NVx1NWUzZFx1NWU0MFx1NWU0M1x1NWU3ZVx1NWVjYVx1NWVjMVx1NWVjMlx1NWVjNFx1NWYzY1x1NWY2ZFx1NWZhOVx1NWZhYVx1NWZhOFx1NjBkMVx1NjBlMVx1NjBiMlx1NjBiNlx1NjBlMFx1NjExY1x1NjEyM1x1NjBmYVx1NjExNVx1NjBmMFx1NjBmYlx1NjBm'@;
put 'NFx1NjE2OFx1NjBmMVx1NjEwZVx1NjBmNlx1NjEwOVx1NjEwMFx1NjExMlx1NjIxZlx1NjI0OVx1NjNhM1x1NjM4Y1x1NjNjZlx1NjNjMFx1NjNlOVx1NjNjOVx1NjNjNlx1NjNjZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjNkMlx1NjNlM1x1NjNkMFx1NjNl'@;
put 'MVx1NjNkNlx1NjNlZFx1NjNlZVx1NjM3Nlx1NjNmNFx1NjNlYVx1NjNkYlx1NjQ1Mlx1NjNkYVx1NjNmOVx1NjU1ZVx1NjU2Nlx1NjU2Mlx1NjU2M1x1NjU5MVx1NjU5MFx1NjVhZlx1NjY2ZVx1NjY3MFx1NjY3NFx1NjY3Nlx1NjY2Zlx1NjY5MVx1NjY3YVx1NjY3ZVx1NjY3N1x1NjZmZVx1'@;
put 'NjZmZlx1NjcxZlx1NjcxZFx1NjhmYVx1NjhkNVx1NjhlMFx1NjhkOFx1NjhkN1x1NjkwNVx1NjhkZlx1NjhmNVx1NjhlZVx1NjhlN1x1NjhmOVx1NjhkMlx1NjhmMlx1NjhlM1x1NjhjYlx1NjhjZFx1NjkwZFx1NjkxMlx1NjkwZVx1NjhjOVx1NjhkYVx1Njk2ZVx1NjhmYlx1NmIzZVx1NmIz'@;
put 'YVx1NmIzZFx1NmI5OFx1NmI5Nlx1NmJiY1x1NmJlZlx1NmMyZVx1NmMyZlx1NmMyY1x1NmUyZlx1NmUzOFx1NmU1NFx1NmUyMVx1NmUzMlx1NmU2N1x1NmU0YVx1NmUyMFx1NmUyNVx1NmUyM1x1NmUxYlx1NmU1Ylx1NmU1OFx1NmUyNFx1NmU1Nlx1NmU2ZVx1NmUyZFx1NmUyNlx1NmU2Zlx1'@;
put 'NmUzNFx1NmU0ZFx1NmUzYVx1NmUyY1x1NmU0M1x1NmUxZFx1NmUzZVx1NmVjYlx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE4MF0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTgwXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE4MF1bZ11dPTQ2MDgwK2cseVs0NjA4MCtnXT1fWzE4MF1bZ10p'@;
put 'O2ZvcihfWzE4MV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmU4OVx1NmUxOVx1NmU0ZVx1NmU2M1x1NmU0NFx1NmU3Mlx1NmU2OVx1NmU1Zlx1NzExOVx1NzExYVx1NzEyNlx1NzEzMFx1NzEyMVx1NzEzNlx1NzE2ZVx1NzExY1x1'@;
put 'NzI0Y1x1NzI4NFx1NzI4MFx1NzMzNlx1NzMyNVx1NzMzNFx1NzMyOVx1NzQzYVx1NzQyYVx1NzQzM1x1NzQyMlx1NzQyNVx1NzQzNVx1NzQzNlx1NzQzNFx1NzQyZlx1NzQxYlx1NzQyNlx1NzQyOFx1NzUyNVx1NzUyNlx1NzU2Ylx1NzU2YVx1NzVlMlx1NzVkYlx1NzVlM1x1NzVkOVx1NzVk'@;
put 'OFx1NzVkZVx1NzVlMFx1NzY3Ylx1NzY3Y1x1NzY5Nlx1NzY5M1x1NzZiNFx1NzZkY1x1Nzc0Zlx1NzdlZFx1Nzg1ZFx1Nzg2Y1x1Nzg2Zlx1N2EwZFx1N2EwOFx1N2EwYlx1N2EwNVx1N2EwMFx1N2E5OFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1N2E5N1x1N2E5'@;
put 'Nlx1N2FlNVx1N2FlM1x1N2I0OVx1N2I1Nlx1N2I0Nlx1N2I1MFx1N2I1Mlx1N2I1NFx1N2I0ZFx1N2I0Ylx1N2I0Zlx1N2I1MVx1N2M5Zlx1N2NhNVx1N2Q1ZVx1N2Q1MFx1N2Q2OFx1N2Q1NVx1N2QyYlx1N2Q2ZVx1N2Q3Mlx1N2Q2MVx1N2Q2Nlx1N2Q2Mlx1N2Q3MFx1N2Q3M1x1NTU4NFx1'@;
put 'N2ZkNFx1N2ZkNVx1ODAwYlx1ODA1Mlx1ODA4NVx1ODE1NVx1ODE1NFx1ODE0Ylx1ODE1MVx1ODE0ZVx1ODEzOVx1ODE0Nlx1ODEzZVx1ODE0Y1x1ODE1M1x1ODE3NFx1ODIxMlx1ODIxY1x1ODNlOVx1ODQwM1x1ODNmOFx1ODQwZFx1ODNlMFx1ODNjNVx1ODQwYlx1ODNjMVx1ODNlZlx1ODNm'@;
put 'MVx1ODNmNFx1ODQ1N1x1ODQwYVx1ODNmMFx1ODQwY1x1ODNjY1x1ODNmZFx1ODNmMlx1ODNjYVx1ODQzOFx1ODQwZVx1ODQwNFx1ODNkY1x1ODQwN1x1ODNkNFx1ODNkZlx1ODY1Ylx1ODZkZlx1ODZkOVx1ODZlZFx1ODZkNFx1ODZkYlx1ODZlNFx1ODZkMFx1ODZkZVx1ODg1N1x1ODhjMVx1'@;
put 'ODhjMlx1ODhiMVx1ODk4M1x1ODk5Nlx1OGEzYlx1OGE2MFx1OGE1NVx1OGE1ZVx1OGEzY1x1OGE0MVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE4MV0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTgxXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE4MV1bZ11dPTQ2MzM2K2cseVs0NjMzNitn'@;
put 'XT1fWzE4MV1bZ10pO2ZvcihfWzE4Ml09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGE1NFx1OGE1Ylx1OGE1MFx1OGE0Nlx1OGEzNFx1OGEzYVx1OGEzNlx1OGE1Nlx1OGM2MVx1OGM4Mlx1OGNhZlx1OGNiY1x1OGNiM1x1OGNiZFx1'@;
put 'OGNjMVx1OGNiYlx1OGNjMFx1OGNiNFx1OGNiN1x1OGNiNlx1OGNiZlx1OGNiOFx1OGQ4YVx1OGQ4NVx1OGQ4MVx1OGRjZVx1OGRkZFx1OGRjYlx1OGRkYVx1OGRkMVx1OGRjY1x1OGRkYlx1OGRjNlx1OGVmYlx1OGVmOFx1OGVmY1x1OGY5Y1x1OTAyZVx1OTAzNVx1OTAzMVx1OTAzOFx1OTAz'@;
put 'Mlx1OTAzNlx1OTEwMlx1OTBmNVx1OTEwOVx1OTBmZVx1OTE2M1x1OTE2NVx1OTFjZlx1OTIxNFx1OTIxNVx1OTIyM1x1OTIwOVx1OTIxZVx1OTIwZFx1OTIxMFx1OTIwN1x1OTIxMVx1OTU5NFx1OTU4Zlx1OTU4Ylx1OTU5MVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1OTU5M1x1OTU5Mlx1OTU4ZVx1OTY4YVx1OTY4ZVx1OTY4Ylx1OTY3ZFx1OTY4NVx1OTY4Nlx1OTY4ZFx1OTY3Mlx1OTY4NFx1OTZjMVx1OTZjNVx1OTZjNFx1OTZjNlx1OTZjN1x1OTZlZlx1OTZmMlx1OTdjY1x1OTgwNVx1OTgwNlx1OTgwOFx1OThlN1x1OThlYVx1OThlZlx1OThlOVx1'@;
put 'OThmMlx1OThlZFx1OTlhZVx1OTlhZFx1OWVjM1x1OWVjZFx1OWVkMVx1NGU4Mlx1NTBhZFx1NTBiNVx1NTBiMlx1NTBiM1x1NTBjNVx1NTBiZVx1NTBhY1x1NTBiN1x1NTBiYlx1NTBhZlx1NTBjN1x1NTI3Zlx1NTI3N1x1NTI3ZFx1NTJkZlx1NTJlNlx1NTJlNFx1NTJlMlx1NTJlM1x1NTMy'@;
put 'Zlx1NTVkZlx1NTVlOFx1NTVkM1x1NTVlNlx1NTVjZVx1NTVkY1x1NTVjN1x1NTVkMVx1NTVlM1x1NTVlNFx1NTVlZlx1NTVkYVx1NTVlMVx1NTVjNVx1NTVjNlx1NTVlNVx1NTVjOVx1NTcxMlx1NTcxM1x1NTg1ZVx1NTg1MVx1NTg1OFx1NTg1N1x1NTg1YVx1NTg1NFx1NTg2Ylx1NTg0Y1x1'@;
put 'NTg2ZFx1NTg0YVx1NTg2Mlx1NTg1Mlx1NTg0Ylx1NTk2N1x1NWFjMVx1NWFjOVx1NWFjY1x1NWFiZVx1NWFiZFx1NWFiY1x1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE4Ml0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTgyXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE4Ml1bZ11dPTQ2NTky'@;
put 'K2cseVs0NjU5MitnXT1fWzE4Ml1bZ10pO2ZvcihfWzE4M109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NWFiM1x1NWFjMlx1NWFiMlx1NWQ2OVx1NWQ2Zlx1NWU0Y1x1NWU3OVx1NWVjOVx1NWVjOFx1NWYxMlx1NWY1OVx1NWZhY1x1'@;
put 'NWZhZVx1NjExYVx1NjEwZlx1NjE0OFx1NjExZlx1NjBmM1x1NjExYlx1NjBmOVx1NjEwMVx1NjEwOFx1NjE0ZVx1NjE0Y1x1NjE0NFx1NjE0ZFx1NjEzZVx1NjEzNFx1NjEyN1x1NjEwZFx1NjEwNlx1NjEzN1x1NjIyMVx1NjIyMlx1NjQxM1x1NjQzZVx1NjQxZVx1NjQyYVx1NjQyZFx1NjQz'@;
put 'ZFx1NjQyY1x1NjQwZlx1NjQxY1x1NjQxNFx1NjQwZFx1NjQzNlx1NjQxNlx1NjQxN1x1NjQwNlx1NjU2Y1x1NjU5Zlx1NjViMFx1NjY5N1x1NjY4OVx1NjY4N1x1NjY4OFx1NjY5Nlx1NjY4NFx1NjY5OFx1NjY4ZFx1NjcwM1x1Njk5NFx1Njk2ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1Njk1YVx1Njk3N1x1Njk2MFx1Njk1NFx1Njk3NVx1NjkzMFx1Njk4Mlx1Njk0YVx1Njk2OFx1Njk2Ylx1Njk1ZVx1Njk1M1x1Njk3OVx1Njk4Nlx1Njk1ZFx1Njk2M1x1Njk1Ylx1NmI0N1x1NmI3Mlx1NmJjMFx1NmJiZlx1NmJkM1x1NmJmZFx1NmVhMlx1NmVhZlx1'@;
put 'NmVkM1x1NmViNlx1NmVjMlx1NmU5MFx1NmU5ZFx1NmVjN1x1NmVjNVx1NmVhNVx1NmU5OFx1NmViY1x1NmViYVx1NmVhYlx1NmVkMVx1NmU5Nlx1NmU5Y1x1NmVjNFx1NmVkNFx1NmVhYVx1NmVhN1x1NmViNFx1NzE0ZVx1NzE1OVx1NzE2OVx1NzE2NFx1NzE0OVx1NzE2N1x1NzE1Y1x1NzE2'@;
put 'Y1x1NzE2Nlx1NzE0Y1x1NzE2NVx1NzE1ZVx1NzE0Nlx1NzE2OFx1NzE1Nlx1NzIzYVx1NzI1Mlx1NzMzN1x1NzM0NVx1NzMzZlx1NzMzZVx1NzQ2Zlx1NzQ1YVx1NzQ1NVx1NzQ1Zlx1NzQ1ZVx1NzQ0MVx1NzQzZlx1NzQ1OVx1NzQ1Ylx1NzQ1Y1x1NzU3Nlx1NzU3OFx1NzYwMFx1NzVmMFx1'@;
put 'NzYwMVx1NzVmMlx1NzVmMVx1NzVmYVx1NzVmZlx1NzVmNFx1NzVmM1x1NzZkZVx1NzZkZlx1Nzc1Ylx1Nzc2Ylx1Nzc2Nlx1Nzc1ZVx1Nzc2M1x1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE4M10ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTgzXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE4'@;
put 'M11bZ11dPTQ2ODQ4K2cseVs0Njg0OCtnXT1fWzE4M11bZ10pO2ZvcihfWzE4NF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Nzc3OVx1Nzc2YVx1Nzc2Y1x1Nzc1Y1x1Nzc2NVx1Nzc2OFx1Nzc2Mlx1NzdlZVx1Nzg4ZVx1NzhiMFx1'@;
put 'Nzg5N1x1Nzg5OFx1Nzg4Y1x1Nzg4OVx1Nzg3Y1x1Nzg5MVx1Nzg5M1x1Nzg3Zlx1Nzk3YVx1Nzk3Zlx1Nzk4MVx1ODQyY1x1NzliZFx1N2ExY1x1N2ExYVx1N2EyMFx1N2ExNFx1N2ExZlx1N2ExZVx1N2E5Zlx1N2FhMFx1N2I3N1x1N2JjMFx1N2I2MFx1N2I2ZVx1N2I2N1x1N2NiMVx1N2Ni'@;
put 'M1x1N2NiNVx1N2Q5M1x1N2Q3OVx1N2Q5MVx1N2Q4MVx1N2Q4Zlx1N2Q1Ylx1N2Y2ZVx1N2Y2OVx1N2Y2YVx1N2Y3Mlx1N2ZhOVx1N2ZhOFx1N2ZhNFx1ODA1Nlx1ODA1OFx1ODA4Nlx1ODA4NFx1ODE3MVx1ODE3MFx1ODE3OFx1ODE2NVx1ODE2ZVx1ODE3M1x1ODE2Ylx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODE3OVx1ODE3YVx1ODE2Nlx1ODIwNVx1ODI0N1x1ODQ4Mlx1ODQ3N1x1ODQzZFx1ODQzMVx1ODQ3NVx1ODQ2Nlx1ODQ2Ylx1ODQ0OVx1ODQ2Y1x1ODQ1Ylx1ODQzY1x1ODQzNVx1ODQ2MVx1ODQ2M1x1ODQ2OVx1ODQ2ZFx1ODQ0Nlx1ODY1ZVx1'@;
put 'ODY1Y1x1ODY1Zlx1ODZmOVx1ODcxM1x1ODcwOFx1ODcwN1x1ODcwMFx1ODZmZVx1ODZmYlx1ODcwMlx1ODcwM1x1ODcwNlx1ODcwYVx1ODg1OVx1ODhkZlx1ODhkNFx1ODhkOVx1ODhkY1x1ODhkOFx1ODhkZFx1ODhlMVx1ODhjYVx1ODhkNVx1ODhkMlx1ODk5Y1x1ODllM1x1OGE2Ylx1OGE3'@;
put 'Mlx1OGE3M1x1OGE2Nlx1OGE2OVx1OGE3MFx1OGE4N1x1OGE3Y1x1OGE2M1x1OGFhMFx1OGE3MVx1OGE4NVx1OGE2ZFx1OGE2Mlx1OGE2ZVx1OGE2Y1x1OGE3OVx1OGE3Ylx1OGEzZVx1OGE2OFx1OGM2Mlx1OGM4YVx1OGM4OVx1OGNjYVx1OGNjN1x1OGNjOFx1OGNjNFx1OGNiMlx1OGNjM1x1'@;
put 'OGNjMlx1OGNjNVx1OGRlMVx1OGRkZlx1OGRlOFx1OGRlZlx1OGRmM1x1OGRmYVx1OGRlYVx1OGRlNFx1OGRlNlx1OGViMlx1OGYwM1x1OGYwOVx1OGVmZVx1OGYwYVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE4NF0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTg0XVtnXS5jaGFyQ29kZUF0'@;
put 'KDApJiYoSVtfWzE4NF1bZ11dPTQ3MTA0K2cseVs0NzEwNCtnXT1fWzE4NF1bZ10pO2ZvcihfWzE4NV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGY5Zlx1OGZiMlx1OTA0Ylx1OTA0YVx1OTA1M1x1OTA0Mlx1OTA1NFx1OTAzY1x1'@;
put 'OTA1NVx1OTA1MFx1OTA0N1x1OTA0Zlx1OTA0ZVx1OTA0ZFx1OTA1MVx1OTAzZVx1OTA0MVx1OTExMlx1OTExN1x1OTE2Y1x1OTE2YVx1OTE2OVx1OTFjOVx1OTIzN1x1OTI1N1x1OTIzOFx1OTIzZFx1OTI0MFx1OTIzZVx1OTI1Ylx1OTI0Ylx1OTI2NFx1OTI1MVx1OTIzNFx1OTI0OVx1OTI0'@;
put 'ZFx1OTI0NVx1OTIzOVx1OTIzZlx1OTI1YVx1OTU5OFx1OTY5OFx1OTY5NFx1OTY5NVx1OTZjZFx1OTZjYlx1OTZjOVx1OTZjYVx1OTZmN1x1OTZmYlx1OTZmOVx1OTZmNlx1OTc1Nlx1OTc3NFx1OTc3Nlx1OTgxMFx1OTgxMVx1OTgxM1x1OTgwYVx1OTgxMlx1OTgwY1x1OThmY1x1OThmNFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OThmZFx1OThmZVx1OTliM1x1OTliMVx1OTliNFx1OWFlMVx1OWNlOVx1OWU4Mlx1OWYwZVx1OWYxM1x1OWYyMFx1NTBlN1x1NTBlZVx1NTBlNVx1NTBkNlx1NTBlZFx1NTBkYVx1NTBkNVx1NTBjZlx1NTBkMVx1NTBmMVx1'@;
put 'NTBjZVx1NTBlOVx1NTE2Mlx1NTFmM1x1NTI4M1x1NTI4Mlx1NTMzMVx1NTNhZFx1NTVmZVx1NTYwMFx1NTYxYlx1NTYxN1x1NTVmZFx1NTYxNFx1NTYwNlx1NTYwOVx1NTYwZFx1NTYwZVx1NTVmN1x1NTYxNlx1NTYxZlx1NTYwOFx1NTYxMFx1NTVmNlx1NTcxOFx1NTcxNlx1NTg3NVx1NTg3'@;
put 'ZVx1NTg4M1x1NTg5M1x1NTg4YVx1NTg3OVx1NTg4NVx1NTg3ZFx1NThmZFx1NTkyNVx1NTkyMlx1NTkyNFx1NTk2YVx1NTk2OVx1NWFlMVx1NWFlNlx1NWFlOVx1NWFkN1x1NWFkNlx1NWFkOFx1NWFlM1x1NWI3NVx1NWJkZVx1NWJlN1x1NWJlMVx1NWJlNVx1NWJlNlx1NWJlOFx1NWJlMlx1'@;
put 'NWJlNFx1NWJkZlx1NWMwZFx1NWM2Mlx1NWQ4NFx1NWQ4N1x1NWU1Ylx1NWU2M1x1NWU1NVx1NWU1N1x1NWU1NFx1NWVkM1x1NWVkNlx1NWYwYVx1NWY0Nlx1NWY3MFx1NWZiOVx1NjE0N1x1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE4NV0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTg1XVtn'@;
put 'XS5jaGFyQ29kZUF0KDApJiYoSVtfWzE4NV1bZ11dPTQ3MzYwK2cseVs0NzM2MCtnXT1fWzE4NV1bZ10pO2ZvcihfWzE4Nl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjEzZlx1NjE0Ylx1NjE3N1x1NjE2Mlx1NjE2M1x1NjE1Zlx1'@;
put 'NjE1YVx1NjE1OFx1NjE3NVx1NjIyYVx1NjQ4N1x1NjQ1OFx1NjQ1NFx1NjRhNFx1NjQ3OFx1NjQ1Zlx1NjQ3YVx1NjQ1MVx1NjQ2N1x1NjQzNFx1NjQ2ZFx1NjQ3Ylx1NjU3Mlx1NjVhMVx1NjVkN1x1NjVkNlx1NjZhMlx1NjZhOFx1NjY5ZFx1Njk5Y1x1NjlhOFx1Njk5NVx1NjljMVx1Njlh'@;
put 'ZVx1NjlkM1x1NjljYlx1Njk5Ylx1NjliN1x1NjliYlx1NjlhYlx1NjliNFx1NjlkMFx1NjljZFx1NjlhZFx1NjljY1x1NjlhNlx1NjljM1x1NjlhM1x1NmI0OVx1NmI0Y1x1NmMzM1x1NmYzM1x1NmYxNFx1NmVmZVx1NmYxM1x1NmVmNFx1NmYyOVx1NmYzZVx1NmYyMFx1NmYyY1x1NmYwZlx1'@;
put 'NmYwMlx1NmYyMlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmVmZlx1NmVlZlx1NmYwNlx1NmYzMVx1NmYzOFx1NmYzMlx1NmYyM1x1NmYxNVx1NmYyYlx1NmYyZlx1NmY4OFx1NmYyYVx1NmVlY1x1NmYwMVx1NmVmMlx1NmVjY1x1NmVmN1x1NzE5NFx1NzE5OVx1'@;
put 'NzE3ZFx1NzE4YVx1NzE4NFx1NzE5Mlx1NzIzZVx1NzI5Mlx1NzI5Nlx1NzM0NFx1NzM1MFx1NzQ2NFx1NzQ2M1x1NzQ2YVx1NzQ3MFx1NzQ2ZFx1NzUwNFx1NzU5MVx1NzYyN1x1NzYwZFx1NzYwYlx1NzYwOVx1NzYxM1x1NzZlMVx1NzZlM1x1Nzc4NFx1Nzc3ZFx1Nzc3Zlx1Nzc2MVx1Nzhj'@;
put 'MVx1Nzg5Zlx1NzhhN1x1NzhiM1x1NzhhOVx1NzhhM1x1Nzk4ZVx1Nzk4Zlx1Nzk4ZFx1N2EyZVx1N2EzMVx1N2FhYVx1N2FhOVx1N2FlZFx1N2FlZlx1N2JhMVx1N2I5NVx1N2I4Ylx1N2I3NVx1N2I5N1x1N2I5ZFx1N2I5NFx1N2I4Zlx1N2JiOFx1N2I4N1x1N2I4NFx1N2NiOVx1N2NiZFx1'@;
put 'N2NiZVx1N2RiYlx1N2RiMFx1N2Q5Y1x1N2RiZFx1N2RiZVx1N2RhMFx1N2RjYVx1N2RiNFx1N2RiMlx1N2RiMVx1N2RiYVx1N2RhMlx1N2RiZlx1N2RiNVx1N2RiOFx1N2RhZFx1N2RkMlx1N2RjN1x1N2RhY1x1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE4Nl0ubGVuZ3RoOysrZyk2NTUz'@;
put 'MyE9PV9bMTg2XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE4Nl1bZ11dPTQ3NjE2K2cseVs0NzYxNitnXT1fWzE4Nl1bZ10pO2ZvcihfWzE4N109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1N2Y3MFx1N2ZlMFx1N2ZlMVx1N2ZkZlx1'@;
put 'ODA1ZVx1ODA1YVx1ODA4N1x1ODE1MFx1ODE4MFx1ODE4Zlx1ODE4OFx1ODE4YVx1ODE3Zlx1ODE4Mlx1ODFlN1x1ODFmYVx1ODIwN1x1ODIxNFx1ODIxZVx1ODI0Ylx1ODRjOVx1ODRiZlx1ODRjNlx1ODRjNFx1ODQ5OVx1ODQ5ZVx1ODRiMlx1ODQ5Y1x1ODRjYlx1ODRiOFx1ODRjMFx1ODRk'@;
put 'M1x1ODQ5MFx1ODRiY1x1ODRkMVx1ODRjYVx1ODczZlx1ODcxY1x1ODczYlx1ODcyMlx1ODcyNVx1ODczNFx1ODcxOFx1ODc1NVx1ODczN1x1ODcyOVx1ODhmM1x1ODkwMlx1ODhmNFx1ODhmOVx1ODhmOFx1ODhmZFx1ODhlOFx1ODkxYVx1ODhlZlx1OGFhNlx1OGE4Y1x1OGE5ZVx1OGFhM1x1'@;
put 'OGE4ZFx1OGFhMVx1OGE5M1x1OGFhNFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGFhYVx1OGFhNVx1OGFhOFx1OGE5OFx1OGE5MVx1OGE5YVx1OGFhN1x1OGM2YVx1OGM4ZFx1OGM4Y1x1OGNkM1x1OGNkMVx1OGNkMlx1OGQ2Ylx1OGQ5OVx1OGQ5NVx1OGRmY1x1'@;
put 'OGYxNFx1OGYxMlx1OGYxNVx1OGYxM1x1OGZhM1x1OTA2MFx1OTA1OFx1OTA1Y1x1OTA2M1x1OTA1OVx1OTA1ZVx1OTA2Mlx1OTA1ZFx1OTA1Ylx1OTExOVx1OTExOFx1OTExZVx1OTE3NVx1OTE3OFx1OTE3N1x1OTE3NFx1OTI3OFx1OTI4MFx1OTI4NVx1OTI5OFx1OTI5Nlx1OTI3Ylx1OTI5'@;
put 'M1x1OTI5Y1x1OTJhOFx1OTI3Y1x1OTI5MVx1OTVhMVx1OTVhOFx1OTVhOVx1OTVhM1x1OTVhNVx1OTVhNFx1OTY5OVx1OTY5Y1x1OTY5Ylx1OTZjY1x1OTZkMlx1OTcwMFx1OTc3Y1x1OTc4NVx1OTdmNlx1OTgxN1x1OTgxOFx1OThhZlx1OThiMVx1OTkwM1x1OTkwNVx1OTkwY1x1OTkwOVx1'@;
put 'OTljMVx1OWFhZlx1OWFiMFx1OWFlNlx1OWI0MVx1OWI0Mlx1OWNmNFx1OWNmNlx1OWNmM1x1OWViY1x1OWYzYlx1OWY0YVx1NTEwNFx1NTEwMFx1NTBmYlx1NTBmNVx1NTBmOVx1NTEwMlx1NTEwOFx1NTEwOVx1NTEwNVx1NTFkY1x1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE4N10ubGVu'@;
put 'Z3RoOysrZyk2NTUzMyE9PV9bMTg3XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE4N11bZ11dPTQ3ODcyK2cseVs0Nzg3MitnXT1fWzE4N11bZ10pO2ZvcihfWzE4OF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTI4N1x1NTI4OFx1'@;
put 'NTI4OVx1NTI4ZFx1NTI4YVx1NTJmMFx1NTNiMlx1NTYyZVx1NTYzYlx1NTYzOVx1NTYzMlx1NTYzZlx1NTYzNFx1NTYyOVx1NTY1M1x1NTY0ZVx1NTY1N1x1NTY3NFx1NTYzNlx1NTYyZlx1NTYzMFx1NTg4MFx1NTg5Zlx1NTg5ZVx1NThiM1x1NTg5Y1x1NThhZVx1NThhOVx1NThhNlx1NTk2'@;
put 'ZFx1NWIwOVx1NWFmYlx1NWIwYlx1NWFmNVx1NWIwY1x1NWIwOFx1NWJlZVx1NWJlY1x1NWJlOVx1NWJlYlx1NWM2NFx1NWM2NVx1NWQ5ZFx1NWQ5NFx1NWU2Mlx1NWU1Zlx1NWU2MVx1NWVlMlx1NWVkYVx1NWVkZlx1NWVkZFx1NWVlM1x1NWVlMFx1NWY0OFx1NWY3MVx1NWZiN1x1NWZiNVx1'@;
put 'NjE3Nlx1NjE2N1x1NjE2ZVx1NjE1ZFx1NjE1NVx1NjE4Mlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjE3Y1x1NjE3MFx1NjE2Ylx1NjE3ZVx1NjFhN1x1NjE5MFx1NjFhYlx1NjE4ZVx1NjFhY1x1NjE5YVx1NjFhNFx1NjE5NFx1NjFhZVx1NjIyZVx1NjQ2OVx1'@;
put 'NjQ2Zlx1NjQ3OVx1NjQ5ZVx1NjRiMlx1NjQ4OFx1NjQ5MFx1NjRiMFx1NjRhNVx1NjQ5M1x1NjQ5NVx1NjRhOVx1NjQ5Mlx1NjRhZVx1NjRhZFx1NjRhYlx1NjQ5YVx1NjRhY1x1NjQ5OVx1NjRhMlx1NjRiM1x1NjU3NVx1NjU3N1x1NjU3OFx1NjZhZVx1NjZhYlx1NjZiNFx1NjZiMVx1NmEy'@;
put 'M1x1NmExZlx1NjllOFx1NmEwMVx1NmExZVx1NmExOVx1NjlmZFx1NmEyMVx1NmExM1x1NmEwYVx1NjlmM1x1NmEwMlx1NmEwNVx1NjllZFx1NmExMVx1NmI1MFx1NmI0ZVx1NmJhNFx1NmJjNVx1NmJjNlx1NmYzZlx1NmY3Y1x1NmY4NFx1NmY1MVx1NmY2Nlx1NmY1NFx1NmY4Nlx1NmY2ZFx1'@;
put 'NmY1Ylx1NmY3OFx1NmY2ZVx1NmY4ZVx1NmY3YVx1NmY3MFx1NmY2NFx1NmY5N1x1NmY1OFx1NmVkNVx1NmY2Zlx1NmY2MFx1NmY1Zlx1NzE5Zlx1NzFhY1x1NzFiMVx1NzFhOFx1NzI1Nlx1NzI5Ylx1NzM0ZVx1NzM1N1x1NzQ2OVx1NzQ4Ylx1NzQ4M1x1ZmZmZCIuc3BsaXQoIiIpLGc9MDtn'@;
put 'IT1fWzE4OF0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTg4XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE4OF1bZ11dPTQ4MTI4K2cseVs0ODEyOCtnXT1fWzE4OF1bZ10pO2ZvcihfWzE4OV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'NzQ3ZVx1NzQ4MFx1NzU3Zlx1NzYyMFx1NzYyOVx1NzYxZlx1NzYyNFx1NzYyNlx1NzYyMVx1NzYyMlx1NzY5YVx1NzZiYVx1NzZlNFx1Nzc4ZVx1Nzc4N1x1Nzc4Y1x1Nzc5MVx1Nzc4Ylx1NzhjYlx1NzhjNVx1NzhiYVx1NzhjYVx1NzhiZVx1NzhkNVx1NzhiY1x1NzhkMFx1N2EzZlx1N2Ez'@;
put 'Y1x1N2E0MFx1N2EzZFx1N2EzN1x1N2EzYlx1N2FhZlx1N2FhZVx1N2JhZFx1N2JiMVx1N2JjNFx1N2JiNFx1N2JjNlx1N2JjN1x1N2JjMVx1N2JhMFx1N2JjY1x1N2NjYVx1N2RlMFx1N2RmNFx1N2RlZlx1N2RmYlx1N2RkOFx1N2RlY1x1N2RkZFx1N2RlOFx1N2RlM1x1N2RkYVx1N2RkZVx1'@;
put 'N2RlOVx1N2Q5ZVx1N2RkOVx1N2RmMlx1N2RmOVx1N2Y3NVx1N2Y3N1x1N2ZhZlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1N2ZlOVx1ODAyNlx1ODE5Ylx1ODE5Y1x1ODE5ZFx1ODFhMFx1ODE5YVx1ODE5OFx1ODUxN1x1ODUzZFx1ODUxYVx1ODRlZVx1ODUyY1x1'@;
put 'ODUyZFx1ODUxM1x1ODUxMVx1ODUyM1x1ODUyMVx1ODUxNFx1ODRlY1x1ODUyNVx1ODRmZlx1ODUwNlx1ODc4Mlx1ODc3NFx1ODc3Nlx1ODc2MFx1ODc2Nlx1ODc3OFx1ODc2OFx1ODc1OVx1ODc1N1x1ODc0Y1x1ODc1M1x1ODg1Ylx1ODg1ZFx1ODkxMFx1ODkwN1x1ODkxMlx1ODkxM1x1ODkx'@;
put 'NVx1ODkwYVx1OGFiY1x1OGFkMlx1OGFjN1x1OGFjNFx1OGE5NVx1OGFjYlx1OGFmOFx1OGFiMlx1OGFjOVx1OGFjMlx1OGFiZlx1OGFiMFx1OGFkNlx1OGFjZFx1OGFiNlx1OGFiOVx1OGFkYlx1OGM0Y1x1OGM0ZVx1OGM2Y1x1OGNlMFx1OGNkZVx1OGNlNlx1OGNlNFx1OGNlY1x1OGNlZFx1'@;
put 'OGNlMlx1OGNlM1x1OGNkY1x1OGNlYVx1OGNlMVx1OGQ2ZFx1OGQ5Zlx1OGRhM1x1OGUyYlx1OGUxMFx1OGUxZFx1OGUyMlx1OGUwZlx1OGUyOVx1OGUxZlx1OGUyMVx1OGUxZVx1OGViYVx1OGYxZFx1OGYxYlx1OGYxZlx1OGYyOVx1OGYyNlx1OGYyYVx1OGYxY1x1OGYxZVx1ZmZmZCIuc3Bs'@;
put 'aXQoIiIpLGc9MDtnIT1fWzE4OV0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTg5XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE4OV1bZ11dPTQ4Mzg0K2cseVs0ODM4NCtnXT1fWzE4OV1bZ10pO2ZvcihfWzE5MF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1OGYyNVx1OTA2OVx1OTA2ZVx1OTA2OFx1OTA2ZFx1OTA3N1x1OTEzMFx1OTEyZFx1OTEyN1x1OTEzMVx1OTE4N1x1OTE4OVx1OTE4Ylx1OTE4M1x1OTJjNVx1OTJiYlx1OTJiN1x1OTJlYVx1OTJhY1x1OTJlNFx1OTJjMVx1OTJiM1x1OTJiY1x1OTJkMlx1OTJjN1x1OTJm'@;
put 'MFx1OTJiMlx1OTVhZFx1OTViMVx1OTcwNFx1OTcwNlx1OTcwN1x1OTcwOVx1OTc2MFx1OTc4ZFx1OTc4Ylx1OTc4Zlx1OTgyMVx1OTgyYlx1OTgxY1x1OThiM1x1OTkwYVx1OTkxM1x1OTkxMlx1OTkxOFx1OTlkZFx1OTlkMFx1OTlkZlx1OTlkYlx1OTlkMVx1OTlkNVx1OTlkMlx1OTlkOVx1'@;
put 'OWFiN1x1OWFlZVx1OWFlZlx1OWIyN1x1OWI0NVx1OWI0NFx1OWI3N1x1OWI2Zlx1OWQwNlx1OWQwOVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OWQwM1x1OWVhOVx1OWViZVx1OWVjZVx1NThhOFx1OWY1Mlx1NTExMlx1NTExOFx1NTExNFx1NTExMFx1NTExNVx1'@;
put 'NTE4MFx1NTFhYVx1NTFkZFx1NTI5MVx1NTI5M1x1NTJmM1x1NTY1OVx1NTY2Ylx1NTY3OVx1NTY2OVx1NTY2NFx1NTY3OFx1NTY2YVx1NTY2OFx1NTY2NVx1NTY3MVx1NTY2Zlx1NTY2Y1x1NTY2Mlx1NTY3Nlx1NThjMVx1NThiZVx1NThjN1x1NThjNVx1NTk2ZVx1NWIxZFx1NWIzNFx1NWI3'@;
put 'OFx1NWJmMFx1NWMwZVx1NWY0YVx1NjFiMlx1NjE5MVx1NjFhOVx1NjE4YVx1NjFjZFx1NjFiNlx1NjFiZVx1NjFjYVx1NjFjOFx1NjIzMFx1NjRjNVx1NjRjMVx1NjRjYlx1NjRiYlx1NjRiY1x1NjRkYVx1NjRjNFx1NjRjN1x1NjRjMlx1NjRjZFx1NjRiZlx1NjRkMlx1NjRkNFx1NjRiZVx1'@;
put 'NjU3NFx1NjZjNlx1NjZjOVx1NjZiOVx1NjZjNFx1NjZjN1x1NjZiOFx1NmEzZFx1NmEzOFx1NmEzYVx1NmE1OVx1NmE2Ylx1NmE1OFx1NmEzOVx1NmE0NFx1NmE2Mlx1NmE2MVx1NmE0Ylx1NmE0N1x1NmEzNVx1NmE1Zlx1NmE0OFx1NmI1OVx1NmI3N1x1NmMwNVx1NmZjMlx1NmZiMVx1NmZh'@;
put 'MVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE5MF0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTkwXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE5MF1bZ11dPTQ4NjQwK2cseVs0ODY0MCtnXT1fWzE5MF1bZ10pO2ZvcihfWzE5MV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmZjM1x1NmZhNFx1NmZjMVx1NmZhN1x1NmZiM1x1NmZjMFx1NmZiOVx1NmZiNlx1NmZhNlx1NmZhMFx1NmZiNFx1NzFiZVx1NzFjOVx1NzFkMFx1NzFkMlx1NzFjOFx1NzFkNVx1NzFiOVx1NzFjZVx1NzFkOVx1NzFkY1x1NzFjM1x1NzFjNFx1NzM2'@;
put 'OFx1NzQ5Y1x1NzRhM1x1NzQ5OFx1NzQ5Zlx1NzQ5ZVx1NzRlMlx1NzUwY1x1NzUwZFx1NzYzNFx1NzYzOFx1NzYzYVx1NzZlN1x1NzZlNVx1NzdhMFx1Nzc5ZVx1Nzc5Zlx1NzdhNVx1NzhlOFx1NzhkYVx1NzhlY1x1NzhlN1x1NzlhNlx1N2E0ZFx1N2E0ZVx1N2E0Nlx1N2E0Y1x1N2E0Ylx1'@;
put 'N2FiYVx1N2JkOVx1N2MxMVx1N2JjOVx1N2JlNFx1N2JkYlx1N2JlMVx1N2JlOVx1N2JlNlx1N2NkNVx1N2NkNlx1N2UwYVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1N2UxMVx1N2UwOFx1N2UxYlx1N2UyM1x1N2UxZVx1N2UxZFx1N2UwOVx1N2UxMFx1N2Y3OVx1'@;
put 'N2ZiMlx1N2ZmMFx1N2ZmMVx1N2ZlZVx1ODAyOFx1ODFiM1x1ODFhOVx1ODFhOFx1ODFmYlx1ODIwOFx1ODI1OFx1ODI1OVx1ODU0YVx1ODU1OVx1ODU0OFx1ODU2OFx1ODU2OVx1ODU0M1x1ODU0OVx1ODU2ZFx1ODU2YVx1ODU1ZVx1ODc4M1x1ODc5Zlx1ODc5ZVx1ODdhMlx1ODc4ZFx1ODg2'@;
put 'MVx1ODkyYVx1ODkzMlx1ODkyNVx1ODkyYlx1ODkyMVx1ODlhYVx1ODlhNlx1OGFlNlx1OGFmYVx1OGFlYlx1OGFmMVx1OGIwMFx1OGFkY1x1OGFlN1x1OGFlZVx1OGFmZVx1OGIwMVx1OGIwMlx1OGFmN1x1OGFlZFx1OGFmM1x1OGFmNlx1OGFmY1x1OGM2Ylx1OGM2ZFx1OGM5M1x1OGNmNFx1'@;
put 'OGU0NFx1OGUzMVx1OGUzNFx1OGU0Mlx1OGUzOVx1OGUzNVx1OGYzYlx1OGYyZlx1OGYzOFx1OGYzM1x1OGZhOFx1OGZhNlx1OTA3NVx1OTA3NFx1OTA3OFx1OTA3Mlx1OTA3Y1x1OTA3YVx1OTEzNFx1OTE5Mlx1OTMyMFx1OTMzNlx1OTJmOFx1OTMzM1x1OTMyZlx1OTMyMlx1OTJmY1x1OTMy'@;
put 'Ylx1OTMwNFx1OTMxYVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE5MV0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTkxXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE5MV1bZ11dPTQ4ODk2K2cseVs0ODg5NitnXT1fWzE5MV1bZ10pO2ZvcihfWzE5Ml09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTMxMFx1OTMyNlx1OTMyMVx1OTMxNVx1OTMyZVx1OTMxOVx1OTViYlx1OTZhN1x1OTZhOFx1OTZhYVx1OTZkNVx1OTcwZVx1OTcxMVx1OTcxNlx1OTcwZFx1OTcxM1x1OTcwZlx1OTc1Ylx1OTc1Y1x1OTc2Nlx1OTc5OFx1OTgz'@;
put 'MFx1OTgzOFx1OTgzYlx1OTgzN1x1OTgyZFx1OTgzOVx1OTgyNFx1OTkxMFx1OTkyOFx1OTkxZVx1OTkxYlx1OTkyMVx1OTkxYVx1OTllZFx1OTllMlx1OTlmMVx1OWFiOFx1OWFiY1x1OWFmYlx1OWFlZFx1OWIyOFx1OWI5MVx1OWQxNVx1OWQyM1x1OWQyNlx1OWQyOFx1OWQxMlx1OWQxYlx1'@;
put 'OWVkOFx1OWVkNFx1OWY4ZFx1OWY5Y1x1NTEyYVx1NTExZlx1NTEyMVx1NTEzMlx1NTJmNVx1NTY4ZVx1NTY4MFx1NTY5MFx1NTY4NVx1NTY4N1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTY4Zlx1NThkNVx1NThkM1x1NThkMVx1NThjZVx1NWIzMFx1NWIyYVx1'@;
put 'NWIyNFx1NWI3YVx1NWMzN1x1NWM2OFx1NWRiY1x1NWRiYVx1NWRiZFx1NWRiOFx1NWU2Ylx1NWY0Y1x1NWZiZFx1NjFjOVx1NjFjMlx1NjFjN1x1NjFlNlx1NjFjYlx1NjIzMlx1NjIzNFx1NjRjZVx1NjRjYVx1NjRkOFx1NjRlMFx1NjRmMFx1NjRlNlx1NjRlY1x1NjRmMVx1NjRlMlx1NjRl'@;
put 'ZFx1NjU4Mlx1NjU4M1x1NjZkOVx1NjZkNlx1NmE4MFx1NmE5NFx1NmE4NFx1NmFhMlx1NmE5Y1x1NmFkYlx1NmFhM1x1NmE3ZVx1NmE5N1x1NmE5MFx1NmFhMFx1NmI1Y1x1NmJhZVx1NmJkYVx1NmMwOFx1NmZkOFx1NmZmMVx1NmZkZlx1NmZlMFx1NmZkYlx1NmZlNFx1NmZlYlx1NmZlZlx1'@;
put 'NmY4MFx1NmZlY1x1NmZlMVx1NmZlOVx1NmZkNVx1NmZlZVx1NmZmMFx1NzFlN1x1NzFkZlx1NzFlZVx1NzFlNlx1NzFlNVx1NzFlZFx1NzFlY1x1NzFmNFx1NzFlMFx1NzIzNVx1NzI0Nlx1NzM3MFx1NzM3Mlx1NzRhOVx1NzRiMFx1NzRhNlx1NzRhOFx1NzY0Nlx1NzY0Mlx1NzY0Y1x1NzZl'@;
put 'YVx1NzdiM1x1NzdhYVx1NzdiMFx1NzdhY1x1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE5Ml0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTkyXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE5Ml1bZ11dPTQ5MTUyK2cseVs0OTE1MitnXT1fWzE5Ml1bZ10pO2ZvcihfWzE5M109Ilx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzdhN1x1NzdhZFx1NzdlZlx1NzhmN1x1NzhmYVx1NzhmNFx1NzhlZlx1NzkwMVx1NzlhN1x1NzlhYVx1N2E1N1x1N2FiZlx1N2MwN1x1N2MwZFx1N2JmZVx1N2JmN1x1N2MwY1x1N2JlMFx1N2NlMFx1N2Nk'@;
put 'Y1x1N2NkZVx1N2NlMlx1N2NkZlx1N2NkOVx1N2NkZFx1N2UyZVx1N2UzZVx1N2U0Nlx1N2UzN1x1N2UzMlx1N2U0M1x1N2UyYlx1N2UzZFx1N2UzMVx1N2U0NVx1N2U0MVx1N2UzNFx1N2UzOVx1N2U0OFx1N2UzNVx1N2UzZlx1N2UyZlx1N2Y0NFx1N2ZmM1x1N2ZmY1x1ODA3MVx1ODA3Mlx1'@;
put 'ODA3MFx1ODA2Zlx1ODA3M1x1ODFjNlx1ODFjM1x1ODFiYVx1ODFjMlx1ODFjMFx1ODFiZlx1ODFiZFx1ODFjOVx1ODFiZVx1ODFlOFx1ODIwOVx1ODI3MVx1ODVhYVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODU4NFx1ODU3ZVx1ODU5Y1x1ODU5MVx1ODU5NFx1'@;
put 'ODVhZlx1ODU5Ylx1ODU4N1x1ODVhOFx1ODU4YVx1ODY2N1x1ODdjMFx1ODdkMVx1ODdiM1x1ODdkMlx1ODdjNlx1ODdhYlx1ODdiYlx1ODdiYVx1ODdjOFx1ODdjYlx1ODkzYlx1ODkzNlx1ODk0NFx1ODkzOFx1ODkzZFx1ODlhY1x1OGIwZVx1OGIxN1x1OGIxOVx1OGIxYlx1OGIwYVx1OGIy'@;
put 'MFx1OGIxZFx1OGIwNFx1OGIxMFx1OGM0MVx1OGMzZlx1OGM3M1x1OGNmYVx1OGNmZFx1OGNmY1x1OGNmOFx1OGNmYlx1OGRhOFx1OGU0OVx1OGU0Ylx1OGU0OFx1OGU0YVx1OGY0NFx1OGYzZVx1OGY0Mlx1OGY0NVx1OGYzZlx1OTA3Zlx1OTA3ZFx1OTA4NFx1OTA4MVx1OTA4Mlx1OTA4MFx1'@;
put 'OTEzOVx1OTFhM1x1OTE5ZVx1OTE5Y1x1OTM0ZFx1OTM4Mlx1OTMyOFx1OTM3NVx1OTM0YVx1OTM2NVx1OTM0Ylx1OTMxOFx1OTM3ZVx1OTM2Y1x1OTM1Ylx1OTM3MFx1OTM1YVx1OTM1NFx1OTVjYVx1OTVjYlx1OTVjY1x1OTVjOFx1OTVjNlx1OTZiMVx1OTZiOFx1OTZkNlx1OTcxY1x1OTcx'@;
put 'ZVx1OTdhMFx1OTdkM1x1OTg0Nlx1OThiNlx1OTkzNVx1OWEwMVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE5M10ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTkzXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE5M11bZ11dPTQ5NDA4K2cseVs0OTQwOCtnXT1fWzE5M11bZ10pO2ZvcihfWzE5'@;
put 'NF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTlmZlx1OWJhZVx1OWJhYlx1OWJhYVx1OWJhZFx1OWQzYlx1OWQzZlx1OWU4Ylx1OWVjZlx1OWVkZVx1OWVkY1x1OWVkZFx1OWVkYlx1OWYzZVx1OWY0Ylx1NTNlMlx1NTY5NVx1NTZh'@;
put 'ZVx1NThkOVx1NThkOFx1NWIzOFx1NWY1ZFx1NjFlM1x1NjIzM1x1NjRmNFx1NjRmMlx1NjRmZVx1NjUwNlx1NjRmYVx1NjRmYlx1NjRmN1x1NjViN1x1NjZkY1x1NjcyNlx1NmFiM1x1NmFhY1x1NmFjM1x1NmFiYlx1NmFiOFx1NmFjMlx1NmFhZVx1NmFhZlx1NmI1Zlx1NmI3OFx1NmJhZlx1'@;
put 'NzAwOVx1NzAwYlx1NmZmZVx1NzAwNlx1NmZmYVx1NzAxMVx1NzAwZlx1NzFmYlx1NzFmY1x1NzFmZVx1NzFmOFx1NzM3N1x1NzM3NVx1NzRhN1x1NzRiZlx1NzUxNVx1NzY1Nlx1NzY1OFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzY1Mlx1NzdiZFx1NzdiZlx1'@;
put 'NzdiYlx1NzdiY1x1NzkwZVx1NzlhZVx1N2E2MVx1N2E2Mlx1N2E2MFx1N2FjNFx1N2FjNVx1N2MyYlx1N2MyN1x1N2MyYVx1N2MxZVx1N2MyM1x1N2MyMVx1N2NlN1x1N2U1NFx1N2U1NVx1N2U1ZVx1N2U1YVx1N2U2MVx1N2U1Mlx1N2U1OVx1N2Y0OFx1N2ZmOVx1N2ZmYlx1ODA3N1x1ODA3'@;
put 'Nlx1ODFjZFx1ODFjZlx1ODIwYVx1ODVjZlx1ODVhOVx1ODVjZFx1ODVkMFx1ODVjOVx1ODViMFx1ODViYVx1ODViOVx1ODVhNlx1ODdlZlx1ODdlY1x1ODdmMlx1ODdlMFx1ODk4Nlx1ODliMlx1ODlmNFx1OGIyOFx1OGIzOVx1OGIyY1x1OGIyYlx1OGM1MFx1OGQwNVx1OGU1OVx1OGU2M1x1'@;
put 'OGU2Nlx1OGU2NFx1OGU1Zlx1OGU1NVx1OGVjMFx1OGY0OVx1OGY0ZFx1OTA4N1x1OTA4M1x1OTA4OFx1OTFhYlx1OTFhY1x1OTFkMFx1OTM5NFx1OTM4YVx1OTM5Nlx1OTNhMlx1OTNiM1x1OTNhZVx1OTNhY1x1OTNiMFx1OTM5OFx1OTM5YVx1OTM5N1x1OTVkNFx1OTVkNlx1OTVkMFx1OTVk'@;
put 'NVx1OTZlMlx1OTZkY1x1OTZkOVx1OTZkYlx1OTZkZVx1OTcyNFx1OTdhM1x1OTdhNlx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE5NF0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTk0XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE5NF1bZ11dPTQ5NjY0K2cseVs0OTY2NCtnXT1fWzE5NF1b'@;
put 'Z10pO2ZvcihfWzE5NV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTdhZFx1OTdmOVx1OTg0ZFx1OTg0Zlx1OTg0Y1x1OTg0ZVx1OTg1M1x1OThiYVx1OTkzZVx1OTkzZlx1OTkzZFx1OTkyZVx1OTlhNVx1OWEwZVx1OWFjMVx1OWIw'@;
put 'M1x1OWIwNlx1OWI0Zlx1OWI0ZVx1OWI0ZFx1OWJjYVx1OWJjOVx1OWJmZFx1OWJjOFx1OWJjMFx1OWQ1MVx1OWQ1ZFx1OWQ2MFx1OWVlMFx1OWYxNVx1OWYyY1x1NTEzM1x1NTZhNVx1NThkZVx1NThkZlx1NThlMlx1NWJmNVx1OWY5MFx1NWVlY1x1NjFmMlx1NjFmN1x1NjFmNlx1NjFmNVx1'@;
put 'NjUwMFx1NjUwZlx1NjZlMFx1NjZkZFx1NmFlNVx1NmFkZFx1NmFkYVx1NmFkM1x1NzAxYlx1NzAxZlx1NzAyOFx1NzAxYVx1NzAxZFx1NzAxNVx1NzAxOFx1NzIwNlx1NzIwZFx1NzI1OFx1NzJhMlx1NzM3OFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzM3YVx1'@;
put 'NzRiZFx1NzRjYVx1NzRlM1x1NzU4N1x1NzU4Nlx1NzY1Zlx1NzY2MVx1NzdjN1x1NzkxOVx1NzliMVx1N2E2Ylx1N2E2OVx1N2MzZVx1N2MzZlx1N2MzOFx1N2MzZFx1N2MzN1x1N2M0MFx1N2U2Ylx1N2U2ZFx1N2U3OVx1N2U2OVx1N2U2YVx1N2Y4NVx1N2U3M1x1N2ZiNlx1N2ZiOVx1N2Zi'@;
put 'OFx1ODFkOFx1ODVlOVx1ODVkZFx1ODVlYVx1ODVkNVx1ODVlNFx1ODVlNVx1ODVmN1x1ODdmYlx1ODgwNVx1ODgwZFx1ODdmOVx1ODdmZVx1ODk2MFx1ODk1Zlx1ODk1Nlx1ODk1ZVx1OGI0MVx1OGI1Y1x1OGI1OFx1OGI0OVx1OGI1YVx1OGI0ZVx1OGI0Zlx1OGI0Nlx1OGI1OVx1OGQwOFx1'@;
put 'OGQwYVx1OGU3Y1x1OGU3Mlx1OGU4N1x1OGU3Nlx1OGU2Y1x1OGU3YVx1OGU3NFx1OGY1NFx1OGY0ZVx1OGZhZFx1OTA4YVx1OTA4Ylx1OTFiMVx1OTFhZVx1OTNlMVx1OTNkMVx1OTNkZlx1OTNjM1x1OTNjOFx1OTNkY1x1OTNkZFx1OTNkNlx1OTNlMlx1OTNjZFx1OTNkOFx1OTNlNFx1OTNk'@;
put 'N1x1OTNlOFx1OTVkY1x1OTZiNFx1OTZlM1x1OTcyYVx1OTcyN1x1OTc2MVx1OTdkY1x1OTdmYlx1OTg1ZVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE5NV0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTk1XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE5NV1bZ11dPTQ5OTIwK2cseVs0OTky'@;
put 'MCtnXT1fWzE5NV1bZ10pO2ZvcihfWzE5Nl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTg1OFx1OTg1Ylx1OThiY1x1OTk0NVx1OTk0OVx1OWExNlx1OWExOVx1OWIwZFx1OWJlOFx1OWJlN1x1OWJkNlx1OWJkYlx1OWQ4OVx1OWQ2'@;
put 'MVx1OWQ3Mlx1OWQ2YVx1OWQ2Y1x1OWU5Mlx1OWU5N1x1OWU5M1x1OWViNFx1NTJmOFx1NTZhOFx1NTZiN1x1NTZiNlx1NTZiNFx1NTZiY1x1NThlNFx1NWI0MFx1NWI0M1x1NWI3ZFx1NWJmNlx1NWRjOVx1NjFmOFx1NjFmYVx1NjUxOFx1NjUxNFx1NjUxOVx1NjZlNlx1NjcyN1x1NmFlY1x1'@;
put 'NzAzZVx1NzAzMFx1NzAzMlx1NzIxMFx1NzM3Ylx1NzRjZlx1NzY2Mlx1NzY2NVx1NzkyNlx1NzkyYVx1NzkyY1x1NzkyYlx1N2FjN1x1N2FmNlx1N2M0Y1x1N2M0M1x1N2M0ZFx1N2NlZlx1N2NmMFx1OGZhZVx1N2U3ZFx1N2U3Y1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1N2U4Mlx1N2Y0Y1x1ODAwMFx1ODFkYVx1ODI2Nlx1ODVmYlx1ODVmOVx1ODYxMVx1ODVmYVx1ODYwNlx1ODYwYlx1ODYwN1x1ODYwYVx1ODgxNFx1ODgxNVx1ODk2NFx1ODliYVx1ODlmOFx1OGI3MFx1OGI2Y1x1OGI2Nlx1OGI2Zlx1OGI1Zlx1OGI2Ylx1OGQwZlx1OGQwZFx1OGU4'@;
put 'OVx1OGU4MVx1OGU4NVx1OGU4Mlx1OTFiNFx1OTFjYlx1OTQxOFx1OTQwM1x1OTNmZFx1OTVlMVx1OTczMFx1OThjNFx1OTk1Mlx1OTk1MVx1OTlhOFx1OWEyYlx1OWEzMFx1OWEzN1x1OWEzNVx1OWMxM1x1OWMwZFx1OWU3OVx1OWViNVx1OWVlOFx1OWYyZlx1OWY1Zlx1OWY2M1x1OWY2MVx1'@;
put 'NTEzN1x1NTEzOFx1NTZjMVx1NTZjMFx1NTZjMlx1NTkxNFx1NWM2Y1x1NWRjZFx1NjFmY1x1NjFmZVx1NjUxZFx1NjUxY1x1NjU5NVx1NjZlOVx1NmFmYlx1NmIwNFx1NmFmYVx1NmJiMlx1NzA0Y1x1NzIxYlx1NzJhN1x1NzRkNlx1NzRkNFx1NzY2OVx1NzdkM1x1N2M1MFx1N2U4Zlx1N2U4'@;
put 'Y1x1N2ZiY1x1ODYxN1x1ODYyZFx1ODYxYVx1ODgyM1x1ODgyMlx1ODgyMVx1ODgxZlx1ODk2YVx1ODk2Y1x1ODliZFx1OGI3NFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE5Nl0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTk2XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE5Nl1bZ11dPTUw'@;
put 'MTc2K2cseVs1MDE3NitnXT1fWzE5Nl1bZ10pO2ZvcihfWzE5N109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGI3N1x1OGI3ZFx1OGQxM1x1OGU4YVx1OGU4ZFx1OGU4Ylx1OGY1Zlx1OGZhZlx1OTFiYVx1OTQyZVx1OTQzM1x1OTQz'@;
put 'NVx1OTQzYVx1OTQzOFx1OTQzMlx1OTQyYlx1OTVlMlx1OTczOFx1OTczOVx1OTczMlx1OTdmZlx1OTg2N1x1OTg2NVx1OTk1N1x1OWE0NVx1OWE0M1x1OWE0MFx1OWEzZVx1OWFjZlx1OWI1NFx1OWI1MVx1OWMyZFx1OWMyNVx1OWRhZlx1OWRiNFx1OWRjMlx1OWRiOFx1OWU5ZFx1OWVlZlx1'@;
put 'OWYxOVx1OWY1Y1x1OWY2Nlx1OWY2N1x1NTEzY1x1NTEzYlx1NTZjOFx1NTZjYVx1NTZjOVx1NWI3Zlx1NWRkNFx1NWRkMlx1NWY0ZVx1NjFmZlx1NjUyNFx1NmIwYVx1NmI2MVx1NzA1MVx1NzA1OFx1NzM4MFx1NzRlNFx1NzU4YVx1NzY2ZVx1NzY2Y1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1NzliM1x1N2M2MFx1N2M1Zlx1ODA3ZVx1ODA3ZFx1ODFkZlx1ODk3Mlx1ODk2Zlx1ODlmY1x1OGI4MFx1OGQxNlx1OGQxN1x1OGU5MVx1OGU5M1x1OGY2MVx1OTE0OFx1OTQ0NFx1OTQ1MVx1OTQ1Mlx1OTczZFx1OTczZVx1OTdjM1x1OTdjMVx1OTg2Ylx1OTk1'@;
put 'NVx1OWE1NVx1OWE0ZFx1OWFkMlx1OWIxYVx1OWM0OVx1OWMzMVx1OWMzZVx1OWMzYlx1OWRkM1x1OWRkN1x1OWYzNFx1OWY2Y1x1OWY2YVx1OWY5NFx1NTZjY1x1NWRkNlx1NjIwMFx1NjUyM1x1NjUyYlx1NjUyYVx1NjZlY1x1NmIxMFx1NzRkYVx1N2FjYVx1N2M2NFx1N2M2M1x1N2M2NVx1'@;
put 'N2U5M1x1N2U5Nlx1N2U5NFx1ODFlMlx1ODYzOFx1ODYzZlx1ODgzMVx1OGI4YVx1OTA5MFx1OTA4Zlx1OTQ2M1x1OTQ2MFx1OTQ2NFx1OTc2OFx1OTg2Zlx1OTk1Y1x1OWE1YVx1OWE1Ylx1OWE1N1x1OWFkM1x1OWFkNFx1OWFkMVx1OWM1NFx1OWM1N1x1OWM1Nlx1OWRlNVx1OWU5Zlx1OWVm'@;
put 'NFx1NTZkMVx1NThlOVx1NjUyY1x1NzA1ZVx1NzY3MVx1NzY3Mlx1NzdkN1x1N2Y1MFx1N2Y4OFx1ODgzNlx1ODgzOVx1ODg2Mlx1OGI5M1x1OGI5Mlx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE5N10ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTk3XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtf'@;
put 'WzE5N11bZ11dPTUwNDMyK2cseVs1MDQzMitnXT1fWzE5N11bZ10pO2ZvcihfWzE5OF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGI5Nlx1ODI3N1x1OGQxYlx1OTFjMFx1OTQ2YVx1OTc0Mlx1OTc0OFx1OTc0NFx1OTdjNlx1OTg3'@;
put 'MFx1OWE1Zlx1OWIyMlx1OWI1OFx1OWM1Zlx1OWRmOVx1OWRmYVx1OWU3Y1x1OWU3ZFx1OWYwN1x1OWY3N1x1OWY3Mlx1NWVmM1x1NmIxNlx1NzA2M1x1N2M2Y1x1N2M2ZVx1ODgzYlx1ODljMFx1OGVhMVx1OTFjMVx1OTQ3Mlx1OTQ3MFx1OTg3MVx1OTk1ZVx1OWFkNlx1OWIyM1x1OWVjY1x1'@;
put 'NzA2NFx1NzdkYVx1OGI5YVx1OTQ3N1x1OTdjOVx1OWE2Mlx1OWE2NVx1N2U5Y1x1OGI5Y1x1OGVhYVx1OTFjNVx1OTQ3ZFx1OTQ3ZVx1OTQ3Y1x1OWM3N1x1OWM3OFx1OWVmN1x1OGM1NFx1OTQ3Zlx1OWUxYVx1NzIyOFx1OWE2YVx1OWIzMVx1OWUxYlx1OWUxZVx1N2M3Mlx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE5OF0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTk4XVtnXS5jaGFyQ29k'@;
put 'ZUF0KDApJiYoSVtfWzE5OF1bZ11dPTUwNjg4K2cseVs1MDY4OCtnXT1fWzE5OF1bZ10pO2ZvcihfWzIwMV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NGU0Mlx1NGU1Y1x1NTFmNVx1NTMxYVx1NTM4Mlx1NGUwN1x1NGUwY1x1NGU0'@;
put 'N1x1NGU4ZFx1NTZkN1x1ZmEwY1x1NWM2ZVx1NWY3M1x1NGUwZlx1NTE4N1x1NGUwZVx1NGUyZVx1NGU5M1x1NGVjMlx1NGVjOVx1NGVjOFx1NTE5OFx1NTJmY1x1NTM2Y1x1NTNiOVx1NTcyMFx1NTkwM1x1NTkyY1x1NWMxMFx1NWRmZlx1NjVlMVx1NmJiM1x1NmJjY1x1NmMxNFx1NzIzZlx1'@;
put 'NGUzMVx1NGUzY1x1NGVlOFx1NGVkY1x1NGVlOVx1NGVlMVx1NGVkZFx1NGVkYVx1NTIwY1x1NTMxY1x1NTM0Y1x1NTcyMlx1NTcyM1x1NTkxN1x1NTkyZlx1NWI4MVx1NWI4NFx1NWMxMlx1NWMzYlx1NWM3NFx1NWM3M1x1NWUwNFx1NWU4MFx1NWU4Mlx1NWZjOVx1NjIwOVx1NjI1MFx1NmMx'@;
put 'NVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmMzNlx1NmM0M1x1NmMzZlx1NmMzYlx1NzJhZVx1NzJiMFx1NzM4YVx1NzliOFx1ODA4YVx1OTYxZVx1NGYwZVx1NGYxOFx1NGYyY1x1NGVmNVx1NGYxNFx1NGVmMVx1NGYwMFx1NGVmN1x1NGYwOFx1NGYxZFx1NGYw'@;
put 'Mlx1NGYwNVx1NGYyMlx1NGYxM1x1NGYwNFx1NGVmNFx1NGYxMlx1NTFiMVx1NTIxM1x1NTIwOVx1NTIxMFx1NTJhNlx1NTMyMlx1NTMxZlx1NTM0ZFx1NTM4YVx1NTQwN1x1NTZlMVx1NTZkZlx1NTcyZVx1NTcyYVx1NTczNFx1NTkzY1x1NTk4MFx1NTk3Y1x1NTk4NVx1NTk3Ylx1NTk3ZVx1'@;
put 'NTk3N1x1NTk3Zlx1NWI1Nlx1NWMxNVx1NWMyNVx1NWM3Y1x1NWM3YVx1NWM3Ylx1NWM3ZVx1NWRkZlx1NWU3NVx1NWU4NFx1NWYwMlx1NWYxYVx1NWY3NFx1NWZkNVx1NWZkNFx1NWZjZlx1NjI1Y1x1NjI1ZVx1NjI2NFx1NjI2MVx1NjI2Nlx1NjI2Mlx1NjI1OVx1NjI2MFx1NjI1YVx1NjI2'@;
put 'NVx1NjVlZlx1NjVlZVx1NjczZVx1NjczOVx1NjczOFx1NjczYlx1NjczYVx1NjczZlx1NjczY1x1NjczM1x1NmMxOFx1NmM0Nlx1NmM1Mlx1NmM1Y1x1NmM0Zlx1NmM0YVx1NmM1NFx1NmM0Ylx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIwMV0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjAx'@;
put 'XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIwMV1bZ11dPTUxNDU2K2cseVs1MTQ1NitnXT1fWzIwMV1bZ10pO2ZvcihfWzIwMl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmM0Y1x1NzA3MVx1NzI1ZVx1NzJiNFx1NzJiNVx1NzM4'@;
put 'ZVx1NzUyYVx1NzY3Zlx1N2E3NVx1N2Y1MVx1ODI3OFx1ODI3Y1x1ODI4MFx1ODI3ZFx1ODI3Zlx1ODY0ZFx1ODk3ZVx1OTA5OVx1OTA5N1x1OTA5OFx1OTA5Ylx1OTA5NFx1OTYyMlx1OTYyNFx1OTYyMFx1OTYyM1x1NGY1Nlx1NGYzYlx1NGY2Mlx1NGY0OVx1NGY1M1x1NGY2NFx1NGYzZVx1'@;
put 'NGY2N1x1NGY1Mlx1NGY1Zlx1NGY0MVx1NGY1OFx1NGYyZFx1NGYzM1x1NGYzZlx1NGY2MVx1NTE4Zlx1NTFiOVx1NTIxY1x1NTIxZVx1NTIyMVx1NTJhZFx1NTJhZVx1NTMwOVx1NTM2M1x1NTM3Mlx1NTM4ZVx1NTM4Zlx1NTQzMFx1NTQzN1x1NTQyYVx1NTQ1NFx1NTQ0NVx1NTQxOVx1NTQx'@;
put 'Y1x1NTQyNVx1NTQxOFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTQzZFx1NTQ0Zlx1NTQ0MVx1NTQyOFx1NTQyNFx1NTQ0N1x1NTZlZVx1NTZlN1x1NTZlNVx1NTc0MVx1NTc0NVx1NTc0Y1x1NTc0OVx1NTc0Ylx1NTc1Mlx1NTkwNlx1NTk0MFx1NTlhNlx1NTk5'@;
put 'OFx1NTlhMFx1NTk5N1x1NTk4ZVx1NTlhMlx1NTk5MFx1NTk4Zlx1NTlhN1x1NTlhMVx1NWI4ZVx1NWI5Mlx1NWMyOFx1NWMyYVx1NWM4ZFx1NWM4Zlx1NWM4OFx1NWM4Ylx1NWM4OVx1NWM5Mlx1NWM4YVx1NWM4Nlx1NWM5M1x1NWM5NVx1NWRlMFx1NWUwYVx1NWUwZVx1NWU4Ylx1NWU4OVx1'@;
put 'NWU4Y1x1NWU4OFx1NWU4ZFx1NWYwNVx1NWYxZFx1NWY3OFx1NWY3Nlx1NWZkMlx1NWZkMVx1NWZkMFx1NWZlZFx1NWZlOFx1NWZlZVx1NWZmM1x1NWZlMVx1NWZlNFx1NWZlM1x1NWZmYVx1NWZlZlx1NWZmN1x1NWZmYlx1NjAwMFx1NWZmNFx1NjIzYVx1NjI4M1x1NjI4Y1x1NjI4ZVx1NjI4'@;
put 'Zlx1NjI5NFx1NjI4N1x1NjI3MVx1NjI3Ylx1NjI3YVx1NjI3MFx1NjI4MVx1NjI4OFx1NjI3N1x1NjI3ZFx1NjI3Mlx1NjI3NFx1NjUzN1x1NjVmMFx1NjVmNFx1NjVmM1x1NjVmMlx1NjVmNVx1Njc0NVx1Njc0N1x1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIwMl0ubGVuZ3RoOysrZyk2'@;
put 'NTUzMyE9PV9bMjAyXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIwMl1bZ11dPTUxNzEyK2cseVs1MTcxMitnXT1fWzIwMl1bZ10pO2ZvcihfWzIwM109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Njc1OVx1Njc1NVx1Njc0Y1x1Njc0'@;
put 'OFx1Njc1ZFx1Njc0ZFx1Njc1YVx1Njc0Ylx1NmJkMFx1NmMxOVx1NmMxYVx1NmM3OFx1NmM2N1x1NmM2Ylx1NmM4NFx1NmM4Ylx1NmM4Zlx1NmM3MVx1NmM2Zlx1NmM2OVx1NmM5YVx1NmM2ZFx1NmM4N1x1NmM5NVx1NmM5Y1x1NmM2Nlx1NmM3M1x1NmM2NVx1NmM3Ylx1NmM4ZVx1NzA3NFx1'@;
put 'NzA3YVx1NzI2M1x1NzJiZlx1NzJiZFx1NzJjM1x1NzJjNlx1NzJjMVx1NzJiYVx1NzJjNVx1NzM5NVx1NzM5N1x1NzM5M1x1NzM5NFx1NzM5Mlx1NzUzYVx1NzUzOVx1NzU5NFx1NzU5NVx1NzY4MVx1NzkzZFx1ODAzNFx1ODA5NVx1ODA5OVx1ODA5MFx1ODA5Mlx1ODA5Y1x1ODI5MFx1ODI4'@;
put 'Zlx1ODI4NVx1ODI4ZVx1ODI5MVx1ODI5M1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODI4YVx1ODI4M1x1ODI4NFx1OGM3OFx1OGZjOVx1OGZiZlx1OTA5Zlx1OTBhMVx1OTBhNVx1OTA5ZVx1OTBhN1x1OTBhMFx1OTYzMFx1OTYyOFx1OTYyZlx1OTYyZFx1NGUz'@;
put 'M1x1NGY5OFx1NGY3Y1x1NGY4NVx1NGY3ZFx1NGY4MFx1NGY4N1x1NGY3Nlx1NGY3NFx1NGY4OVx1NGY4NFx1NGY3N1x1NGY0Y1x1NGY5N1x1NGY2YVx1NGY5YVx1NGY3OVx1NGY4MVx1NGY3OFx1NGY5MFx1NGY5Y1x1NGY5NFx1NGY5ZVx1NGY5Mlx1NGY4Mlx1NGY5NVx1NGY2Ylx1NGY2ZVx1'@;
put 'NTE5ZVx1NTFiY1x1NTFiZVx1NTIzNVx1NTIzMlx1NTIzM1x1NTI0Nlx1NTIzMVx1NTJiY1x1NTMwYVx1NTMwYlx1NTMzY1x1NTM5Mlx1NTM5NFx1NTQ4N1x1NTQ3Zlx1NTQ4MVx1NTQ5MVx1NTQ4Mlx1NTQ4OFx1NTQ2Ylx1NTQ3YVx1NTQ3ZVx1NTQ2NVx1NTQ2Y1x1NTQ3NFx1NTQ2Nlx1NTQ4'@;
put 'ZFx1NTQ2Zlx1NTQ2MVx1NTQ2MFx1NTQ5OFx1NTQ2M1x1NTQ2N1x1NTQ2NFx1NTZmN1x1NTZmOVx1NTc2Zlx1NTc3Mlx1NTc2ZFx1NTc2Ylx1NTc3MVx1NTc3MFx1NTc3Nlx1NTc4MFx1NTc3NVx1NTc3Ylx1NTc3M1x1NTc3NFx1NTc2Mlx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIwM10u'@;
put 'bGVuZ3RoOysrZyk2NTUzMyE9PV9bMjAzXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIwM11bZ11dPTUxOTY4K2cseVs1MTk2OCtnXT1fWzIwM11bZ10pO2ZvcihfWzIwNF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTc2OFx1NTc3'@;
put 'ZFx1NTkwY1x1NTk0NVx1NTliNVx1NTliYVx1NTljZlx1NTljZVx1NTliMlx1NTljY1x1NTljMVx1NTliNlx1NTliY1x1NTljM1x1NTlkNlx1NTliMVx1NTliZFx1NTljMFx1NTljOFx1NTliNFx1NTljN1x1NWI2Mlx1NWI2NVx1NWI5M1x1NWI5NVx1NWM0NFx1NWM0N1x1NWNhZVx1NWNhNFx1'@;
put 'NWNhMFx1NWNiNVx1NWNhZlx1NWNhOFx1NWNhY1x1NWM5Zlx1NWNhM1x1NWNhZFx1NWNhMlx1NWNhYVx1NWNhN1x1NWM5ZFx1NWNhNVx1NWNiNlx1NWNiMFx1NWNhNlx1NWUxN1x1NWUxNFx1NWUxOVx1NWYyOFx1NWYyMlx1NWYyM1x1NWYyNFx1NWY1NFx1NWY4Mlx1NWY3ZVx1NWY3ZFx1NWZk'@;
put 'ZVx1NWZlNVx1NjAyZFx1NjAyNlx1NjAxOVx1NjAzMlx1NjAwYlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjAzNFx1NjAwYVx1NjAxN1x1NjAzM1x1NjAxYVx1NjAxZVx1NjAyY1x1NjAyMlx1NjAwZFx1NjAxMFx1NjAyZVx1NjAxM1x1NjAxMVx1NjAwY1x1NjAw'@;
put 'OVx1NjAxY1x1NjIxNFx1NjIzZFx1NjJhZFx1NjJiNFx1NjJkMVx1NjJiZVx1NjJhYVx1NjJiNlx1NjJjYVx1NjJhZVx1NjJiM1x1NjJhZlx1NjJiYlx1NjJhOVx1NjJiMFx1NjJiOFx1NjUzZFx1NjVhOFx1NjViYlx1NjYwOVx1NjVmY1x1NjYwNFx1NjYxMlx1NjYwOFx1NjVmYlx1NjYwM1x1'@;
put 'NjYwYlx1NjYwZFx1NjYwNVx1NjVmZFx1NjYxMVx1NjYxMFx1NjZmNlx1NjcwYVx1Njc4NVx1Njc2Y1x1Njc4ZVx1Njc5Mlx1Njc3Nlx1Njc3Ylx1Njc5OFx1Njc4Nlx1Njc4NFx1Njc3NFx1Njc4ZFx1Njc4Y1x1Njc3YVx1Njc5Zlx1Njc5MVx1Njc5OVx1Njc4M1x1Njc3ZFx1Njc4MVx1Njc3'@;
put 'OFx1Njc3OVx1Njc5NFx1NmIyNVx1NmI4MFx1NmI3ZVx1NmJkZVx1NmMxZFx1NmM5M1x1NmNlY1x1NmNlYlx1NmNlZVx1NmNkOVx1NmNiNlx1NmNkNFx1NmNhZFx1NmNlN1x1NmNiN1x1NmNkMFx1NmNjMlx1NmNiYVx1NmNjM1x1NmNjNlx1NmNlZFx1NmNmMlx1ZmZmZCIuc3BsaXQoIiIpLGc9'@;
put 'MDtnIT1fWzIwNF0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjA0XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIwNF1bZ11dPTUyMjI0K2cseVs1MjIyNCtnXT1fWzIwNF1bZ10pO2ZvcihfWzIwNV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1NmNkMlx1NmNkZFx1NmNiNFx1NmM4YVx1NmM5ZFx1NmM4MFx1NmNkZVx1NmNjMFx1NmQzMFx1NmNjZFx1NmNjN1x1NmNiMFx1NmNmOVx1NmNjZlx1NmNlOVx1NmNkMVx1NzA5NFx1NzA5OFx1NzA4NVx1NzA5M1x1NzA4Nlx1NzA4NFx1NzA5MVx1NzA5Nlx1NzA4Mlx1NzA5YVx1NzA4M1x1'@;
put 'NzI2YVx1NzJkNlx1NzJjYlx1NzJkOFx1NzJjOVx1NzJkY1x1NzJkMlx1NzJkNFx1NzJkYVx1NzJjY1x1NzJkMVx1NzNhNFx1NzNhMVx1NzNhZFx1NzNhNlx1NzNhMlx1NzNhMFx1NzNhY1x1NzM5ZFx1NzRkZFx1NzRlOFx1NzUzZlx1NzU0MFx1NzUzZVx1NzU4Y1x1NzU5OFx1NzZhZlx1NzZm'@;
put 'M1x1NzZmMVx1NzZmMFx1NzZmNVx1NzdmOFx1NzdmY1x1NzdmOVx1NzdmYlx1NzdmYVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzdmN1x1Nzk0Mlx1NzkzZlx1NzljNVx1N2E3OFx1N2E3Ylx1N2FmYlx1N2M3NVx1N2NmZFx1ODAzNVx1ODA4Zlx1ODBhZVx1ODBh'@;
put 'M1x1ODBiOFx1ODBiNVx1ODBhZFx1ODIyMFx1ODJhMFx1ODJjMFx1ODJhYlx1ODI5YVx1ODI5OFx1ODI5Ylx1ODJiNVx1ODJhN1x1ODJhZVx1ODJiY1x1ODI5ZVx1ODJiYVx1ODJiNFx1ODJhOFx1ODJhMVx1ODJhOVx1ODJjMlx1ODJhNFx1ODJjM1x1ODJiNlx1ODJhMlx1ODY3MFx1ODY2Zlx1'@;
put 'ODY2ZFx1ODY2ZVx1OGM1Nlx1OGZkMlx1OGZjYlx1OGZkM1x1OGZjZFx1OGZkNlx1OGZkNVx1OGZkN1x1OTBiMlx1OTBiNFx1OTBhZlx1OTBiM1x1OTBiMFx1OTYzOVx1OTYzZFx1OTYzY1x1OTYzYVx1OTY0M1x1NGZjZFx1NGZjNVx1NGZkM1x1NGZiMlx1NGZjOVx1NGZjYlx1NGZjMVx1NGZk'@;
put 'NFx1NGZkY1x1NGZkOVx1NGZiYlx1NGZiM1x1NGZkYlx1NGZjN1x1NGZkNlx1NGZiYVx1NGZjMFx1NGZiOVx1NGZlY1x1NTI0NFx1NTI0OVx1NTJjMFx1NTJjMlx1NTMzZFx1NTM3Y1x1NTM5N1x1NTM5Nlx1NTM5OVx1NTM5OFx1NTRiYVx1NTRhMVx1NTRhZFx1NTRhNVx1NTRjZlx1ZmZmZCIu'@;
put 'c3BsaXQoIiIpLGc9MDtnIT1fWzIwNV0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjA1XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIwNV1bZ11dPTUyNDgwK2cseVs1MjQ4MCtnXT1fWzIwNV1bZ10pO2ZvcihfWzIwNl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1NTRjM1x1ODMwZFx1NTRiN1x1NTRhZVx1NTRkNlx1NTRiNlx1NTRjNVx1NTRjNlx1NTRhMFx1NTQ3MFx1NTRiY1x1NTRhMlx1NTRiZVx1NTQ3Mlx1NTRkZVx1NTRiMFx1NTdiNVx1NTc5ZVx1NTc5Zlx1NTdhNFx1NTc4Y1x1NTc5N1x1NTc5ZFx1NTc5Ylx1NTc5NFx1'@;
put 'NTc5OFx1NTc4Zlx1NTc5OVx1NTdhNVx1NTc5YVx1NTc5NVx1NThmNFx1NTkwZFx1NTk1M1x1NTllMVx1NTlkZVx1NTllZVx1NWEwMFx1NTlmMVx1NTlkZFx1NTlmYVx1NTlmZFx1NTlmY1x1NTlmNlx1NTllNFx1NTlmMlx1NTlmN1x1NTlkYlx1NTllOVx1NTlmM1x1NTlmNVx1NTllMFx1NTlm'@;
put 'ZVx1NTlmNFx1NTllZFx1NWJhOFx1NWM0Y1x1NWNkMFx1NWNkOFx1NWNjY1x1NWNkN1x1NWNjYlx1NWNkYlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NWNkZVx1NWNkYVx1NWNjOVx1NWNjN1x1NWNjYVx1NWNkNlx1NWNkM1x1NWNkNFx1NWNjZlx1NWNjOFx1NWNj'@;
put 'Nlx1NWNjZVx1NWNkZlx1NWNmOFx1NWRmOVx1NWUyMVx1NWUyMlx1NWUyM1x1NWUyMFx1NWUyNFx1NWViMFx1NWVhNFx1NWVhMlx1NWU5Ylx1NWVhM1x1NWVhNVx1NWYwN1x1NWYyZVx1NWY1Nlx1NWY4Nlx1NjAzN1x1NjAzOVx1NjA1NFx1NjA3Mlx1NjA1ZVx1NjA0NVx1NjA1M1x1NjA0N1x1'@;
put 'NjA0OVx1NjA1Ylx1NjA0Y1x1NjA0MFx1NjA0Mlx1NjA1Zlx1NjAyNFx1NjA0NFx1NjA1OFx1NjA2Nlx1NjA2ZVx1NjI0Mlx1NjI0M1x1NjJjZlx1NjMwZFx1NjMwYlx1NjJmNVx1NjMwZVx1NjMwM1x1NjJlYlx1NjJmOVx1NjMwZlx1NjMwY1x1NjJmOFx1NjJmNlx1NjMwMFx1NjMxM1x1NjMx'@;
put 'NFx1NjJmYVx1NjMxNVx1NjJmYlx1NjJmMFx1NjU0MVx1NjU0M1x1NjVhYVx1NjViZlx1NjYzNlx1NjYyMVx1NjYzMlx1NjYzNVx1NjYxY1x1NjYyNlx1NjYyMlx1NjYzM1x1NjYyYlx1NjYzYVx1NjYxZFx1NjYzNFx1NjYzOVx1NjYyZVx1NjcwZlx1NjcxMFx1NjdjMVx1NjdmMlx1NjdjOFx1'@;
put 'NjdiYVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIwNl0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjA2XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIwNl1bZ11dPTUyNzM2K2cseVs1MjczNitnXT1fWzIwNl1bZ10pO2ZvcihfWzIwN109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjdkY1x1NjdiYlx1NjdmOFx1NjdkOFx1NjdjMFx1NjdiN1x1NjdjNVx1NjdlYlx1NjdlNFx1NjdkZlx1NjdiNVx1NjdjZFx1NjdiM1x1NjdmN1x1NjdmNlx1NjdlZVx1NjdlM1x1NjdjMlx1NjdiOVx1NjdjZVx1NjdlN1x1NjdmMFx1NjdiMlx1'@;
put 'NjdmY1x1NjdjNlx1NjdlZFx1NjdjY1x1NjdhZVx1NjdlNlx1NjdkYlx1NjdmYVx1NjdjOVx1NjdjYVx1NjdjM1x1NjdlYVx1NjdjYlx1NmIyOFx1NmI4Mlx1NmI4NFx1NmJiNlx1NmJkNlx1NmJkOFx1NmJlMFx1NmMyMFx1NmMyMVx1NmQyOFx1NmQzNFx1NmQyZFx1NmQxZlx1NmQzY1x1NmQz'@;
put 'Zlx1NmQxMlx1NmQwYVx1NmNkYVx1NmQzM1x1NmQwNFx1NmQxOVx1NmQzYVx1NmQxYVx1NmQxMVx1NmQwMFx1NmQxZFx1NmQ0Mlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmQwMVx1NmQxOFx1NmQzN1x1NmQwM1x1NmQwZlx1NmQ0MFx1NmQwN1x1NmQyMFx1NmQy'@;
put 'Y1x1NmQwOFx1NmQyMlx1NmQwOVx1NmQxMFx1NzBiN1x1NzA5Zlx1NzBiZVx1NzBiMVx1NzBiMFx1NzBhMVx1NzBiNFx1NzBiNVx1NzBhOVx1NzI0MVx1NzI0OVx1NzI0YVx1NzI2Y1x1NzI3MFx1NzI3M1x1NzI2ZVx1NzJjYVx1NzJlNFx1NzJlOFx1NzJlYlx1NzJkZlx1NzJlYVx1NzJlNlx1'@;
put 'NzJlM1x1NzM4NVx1NzNjY1x1NzNjMlx1NzNjOFx1NzNjNVx1NzNiOVx1NzNiNlx1NzNiNVx1NzNiNFx1NzNlYlx1NzNiZlx1NzNjN1x1NzNiZVx1NzNjM1x1NzNjNlx1NzNiOFx1NzNjYlx1NzRlY1x1NzRlZVx1NzUyZVx1NzU0N1x1NzU0OFx1NzVhN1x1NzVhYVx1NzY3OVx1NzZjNFx1Nzcw'@;
put 'OFx1NzcwM1x1NzcwNFx1NzcwNVx1NzcwYVx1NzZmN1x1NzZmYlx1NzZmYVx1NzdlN1x1NzdlOFx1NzgwNlx1NzgxMVx1NzgxMlx1NzgwNVx1NzgxMFx1NzgwZlx1NzgwZVx1NzgwOVx1NzgwM1x1NzgxM1x1Nzk0YVx1Nzk0Y1x1Nzk0Ylx1Nzk0NVx1Nzk0NFx1NzlkNVx1NzljZFx1NzljZlx1'@;
put 'NzlkNlx1NzljZVx1N2E4MFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIwN10ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjA3XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIwN11bZ11dPTUyOTkyK2cseVs1Mjk5MitnXT1fWzIwN11bZ10pO2ZvcihfWzIwOF09Ilx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1N2E3ZVx1N2FkMVx1N2IwMFx1N2IwMVx1N2M3YVx1N2M3OFx1N2M3OVx1N2M3Zlx1N2M4MFx1N2M4MVx1N2QwM1x1N2QwOFx1N2QwMVx1N2Y1OFx1N2Y5MVx1N2Y4ZFx1N2ZiZVx1ODAwN1x1ODAwZVx1ODAwZlx1ODAxNFx1'@;
put 'ODAzN1x1ODBkOFx1ODBjN1x1ODBlMFx1ODBkMVx1ODBjOFx1ODBjMlx1ODBkMFx1ODBjNVx1ODBlM1x1ODBkOVx1ODBkY1x1ODBjYVx1ODBkNVx1ODBjOVx1ODBjZlx1ODBkN1x1ODBlNlx1ODBjZFx1ODFmZlx1ODIyMVx1ODI5NFx1ODJkOVx1ODJmZVx1ODJmOVx1ODMwN1x1ODJlOFx1ODMw'@;
put 'MFx1ODJkNVx1ODMzYVx1ODJlYlx1ODJkNlx1ODJmNFx1ODJlY1x1ODJlMVx1ODJmMlx1ODJmNVx1ODMwY1x1ODJmYlx1ODJmNlx1ODJmMFx1ODJlYVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODJlNFx1ODJlMFx1ODJmYVx1ODJmM1x1ODJlZFx1ODY3N1x1ODY3'@;
put 'NFx1ODY3Y1x1ODY3M1x1ODg0MVx1ODg0ZVx1ODg2N1x1ODg2YVx1ODg2OVx1ODlkM1x1OGEwNFx1OGEwN1x1OGQ3Mlx1OGZlM1x1OGZlMVx1OGZlZVx1OGZlMFx1OTBmMVx1OTBiZFx1OTBiZlx1OTBkNVx1OTBjNVx1OTBiZVx1OTBjN1x1OTBjYlx1OTBjOFx1OTFkNFx1OTFkM1x1OTY1NFx1'@;
put 'OTY0Zlx1OTY1MVx1OTY1M1x1OTY0YVx1OTY0ZVx1NTAxZVx1NTAwNVx1NTAwN1x1NTAxM1x1NTAyMlx1NTAzMFx1NTAxYlx1NGZmNVx1NGZmNFx1NTAzM1x1NTAzN1x1NTAyY1x1NGZmNlx1NGZmN1x1NTAxN1x1NTAxY1x1NTAyMFx1NTAyN1x1NTAzNVx1NTAyZlx1NTAzMVx1NTAwZVx1NTE1'@;
put 'YVx1NTE5NFx1NTE5M1x1NTFjYVx1NTFjNFx1NTFjNVx1NTFjOFx1NTFjZVx1NTI2MVx1NTI1YVx1NTI1Mlx1NTI1ZVx1NTI1Zlx1NTI1NVx1NTI2Mlx1NTJjZFx1NTMwZVx1NTM5ZVx1NTUyNlx1NTRlMlx1NTUxN1x1NTUxMlx1NTRlN1x1NTRmM1x1NTRlNFx1NTUxYVx1NTRmZlx1NTUwNFx1'@;
put 'NTUwOFx1NTRlYlx1NTUxMVx1NTUwNVx1NTRmMVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIwOF0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjA4XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIwOF1bZ11dPTUzMjQ4K2cseVs1MzI0OCtnXT1fWzIwOF1bZ10pO2ZvcihfWzIwOV09Ilx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTUwYVx1NTRmYlx1NTRmN1x1NTRmOFx1NTRlMFx1NTUwZVx1NTUwM1x1NTUwYlx1NTcwMVx1NTcwMlx1NTdjY1x1NTgzMlx1NTdkNVx1NTdkMlx1NTdiYVx1NTdjNlx1NTdiZFx1NTdiY1x1NTdiOFx1'@;
put 'NTdiNlx1NTdiZlx1NTdjN1x1NTdkMFx1NTdiOVx1NTdjMVx1NTkwZVx1NTk0YVx1NWExOVx1NWExNlx1NWEyZFx1NWEyZVx1NWExNVx1NWEwZlx1NWExN1x1NWEwYVx1NWExZVx1NWEzM1x1NWI2Y1x1NWJhN1x1NWJhZFx1NWJhY1x1NWMwM1x1NWM1Nlx1NWM1NFx1NWNlY1x1NWNmZlx1NWNl'@;
put 'ZVx1NWNmMVx1NWNmN1x1NWQwMFx1NWNmOVx1NWUyOVx1NWUyOFx1NWVhOFx1NWVhZVx1NWVhYVx1NWVhY1x1NWYzM1x1NWYzMFx1NWY2N1x1NjA1ZFx1NjA1YVx1NjA2N1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjA0MVx1NjBhMlx1NjA4OFx1NjA4MFx1NjA5'@;
put 'Mlx1NjA4MVx1NjA5ZFx1NjA4M1x1NjA5NVx1NjA5Ylx1NjA5N1x1NjA4N1x1NjA5Y1x1NjA4ZVx1NjIxOVx1NjI0Nlx1NjJmMlx1NjMxMFx1NjM1Nlx1NjMyY1x1NjM0NFx1NjM0NVx1NjMzNlx1NjM0M1x1NjNlNFx1NjMzOVx1NjM0Ylx1NjM0YVx1NjMzY1x1NjMyOVx1NjM0MVx1NjMzNFx1'@;
put 'NjM1OFx1NjM1NFx1NjM1OVx1NjMyZFx1NjM0N1x1NjMzM1x1NjM1YVx1NjM1MVx1NjMzOFx1NjM1N1x1NjM0MFx1NjM0OFx1NjU0YVx1NjU0Nlx1NjVjNlx1NjVjM1x1NjVjNFx1NjVjMlx1NjY0YVx1NjY1Zlx1NjY0N1x1NjY1MVx1NjcxMlx1NjcxM1x1NjgxZlx1NjgxYVx1Njg0OVx1Njgz'@;
put 'Mlx1NjgzM1x1NjgzYlx1Njg0Ylx1Njg0Zlx1NjgxNlx1NjgzMVx1NjgxY1x1NjgzNVx1NjgyYlx1NjgyZFx1NjgyZlx1Njg0ZVx1Njg0NFx1NjgzNFx1NjgxZFx1NjgxMlx1NjgxNFx1NjgyNlx1NjgyOFx1NjgyZVx1Njg0ZFx1NjgzYVx1NjgyNVx1NjgyMFx1NmIyY1x1NmIyZlx1NmIyZFx1'@;
put 'NmIzMVx1NmIzNFx1NmI2ZFx1ODA4Mlx1NmI4OFx1NmJlNlx1NmJlNFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIwOV0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjA5XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIwOV1bZ11dPTUzNTA0K2cseVs1MzUwNCtnXT1fWzIwOV1bZ10pO2Zvcihf'@;
put 'WzIxMF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmJlOFx1NmJlM1x1NmJlMlx1NmJlN1x1NmMyNVx1NmQ3YVx1NmQ2M1x1NmQ2NFx1NmQ3Nlx1NmQwZFx1NmQ2MVx1NmQ5Mlx1NmQ1OFx1NmQ2Mlx1NmQ2ZFx1NmQ2Zlx1NmQ5MVx1'@;
put 'NmQ4ZFx1NmRlZlx1NmQ3Zlx1NmQ4Nlx1NmQ1ZVx1NmQ2N1x1NmQ2MFx1NmQ5N1x1NmQ3MFx1NmQ3Y1x1NmQ1Zlx1NmQ4Mlx1NmQ5OFx1NmQyZlx1NmQ2OFx1NmQ4Ylx1NmQ3ZVx1NmQ4MFx1NmQ4NFx1NmQxNlx1NmQ4M1x1NmQ3Ylx1NmQ3ZFx1NmQ3NVx1NmQ5MFx1NzBkY1x1NzBkM1x1NzBk'@;
put 'MVx1NzBkZFx1NzBjYlx1N2YzOVx1NzBlMlx1NzBkN1x1NzBkMlx1NzBkZVx1NzBlMFx1NzBkNFx1NzBjZFx1NzBjNVx1NzBjNlx1NzBjN1x1NzBkYVx1NzBjZVx1NzBlMVx1NzI0Mlx1NzI3OFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzI3N1x1NzI3Nlx1NzMw'@;
put 'MFx1NzJmYVx1NzJmNFx1NzJmZVx1NzJmNlx1NzJmM1x1NzJmYlx1NzMwMVx1NzNkM1x1NzNkOVx1NzNlNVx1NzNkNlx1NzNiY1x1NzNlN1x1NzNlM1x1NzNlOVx1NzNkY1x1NzNkMlx1NzNkYlx1NzNkNFx1NzNkZFx1NzNkYVx1NzNkN1x1NzNkOFx1NzNlOFx1NzRkZVx1NzRkZlx1NzRmNFx1'@;
put 'NzRmNVx1NzUyMVx1NzU1Ylx1NzU1Zlx1NzViMFx1NzVjMVx1NzViYlx1NzVjNFx1NzVjMFx1NzViZlx1NzViNlx1NzViYVx1NzY4YVx1NzZjOVx1NzcxZFx1NzcxYlx1NzcxMFx1NzcxM1x1NzcxMlx1NzcyM1x1NzcxMVx1NzcxNVx1NzcxOVx1NzcxYVx1NzcyMlx1NzcyN1x1NzgyM1x1Nzgy'@;
put 'Y1x1NzgyMlx1NzgzNVx1NzgyZlx1NzgyOFx1NzgyZVx1NzgyYlx1NzgyMVx1NzgyOVx1NzgzM1x1NzgyYVx1NzgzMVx1Nzk1NFx1Nzk1Ylx1Nzk0Zlx1Nzk1Y1x1Nzk1M1x1Nzk1Mlx1Nzk1MVx1NzllYlx1NzllY1x1NzllMFx1NzllZVx1NzllZFx1NzllYVx1NzlkY1x1NzlkZVx1NzlkZFx1'@;
put 'N2E4Nlx1N2E4OVx1N2E4NVx1N2E4Ylx1N2E4Y1x1N2E4YVx1N2E4N1x1N2FkOFx1N2IxMFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIxMF0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjEwXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIxMF1bZ11dPTUzNzYwK2cseVs1Mzc2MCtnXT1fWzIx'@;
put 'MF1bZ10pO2ZvcihfWzIxMV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1N2IwNFx1N2IxM1x1N2IwNVx1N2IwZlx1N2IwOFx1N2IwYVx1N2IwZVx1N2IwOVx1N2IxMlx1N2M4NFx1N2M5MVx1N2M4YVx1N2M4Y1x1N2M4OFx1N2M4ZFx1'@;
put 'N2M4NVx1N2QxZVx1N2QxZFx1N2QxMVx1N2QwZVx1N2QxOFx1N2QxNlx1N2QxM1x1N2QxZlx1N2QxMlx1N2QwZlx1N2QwY1x1N2Y1Y1x1N2Y2MVx1N2Y1ZVx1N2Y2MFx1N2Y1ZFx1N2Y1Ylx1N2Y5Nlx1N2Y5Mlx1N2ZjM1x1N2ZjMlx1N2ZjMFx1ODAxNlx1ODAzZVx1ODAzOVx1ODBmYVx1ODBm'@;
put 'Mlx1ODBmOVx1ODBmNVx1ODEwMVx1ODBmYlx1ODEwMFx1ODIwMVx1ODIyZlx1ODIyNVx1ODMzM1x1ODMyZFx1ODM0NFx1ODMxOVx1ODM1MVx1ODMyNVx1ODM1Nlx1ODMzZlx1ODM0MVx1ODMyNlx1ODMxY1x1ODMyMlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODM0'@;
put 'Mlx1ODM0ZVx1ODMxYlx1ODMyYVx1ODMwOFx1ODMzY1x1ODM0ZFx1ODMxNlx1ODMyNFx1ODMyMFx1ODMzN1x1ODMyZlx1ODMyOVx1ODM0N1x1ODM0NVx1ODM0Y1x1ODM1M1x1ODMxZVx1ODMyY1x1ODM0Ylx1ODMyN1x1ODM0OFx1ODY1M1x1ODY1Mlx1ODZhMlx1ODZhOFx1ODY5Nlx1ODY4ZFx1'@;
put 'ODY5MVx1ODY5ZVx1ODY4N1x1ODY5N1x1ODY4Nlx1ODY4Ylx1ODY5YVx1ODY4NVx1ODZhNVx1ODY5OVx1ODZhMVx1ODZhN1x1ODY5NVx1ODY5OFx1ODY4ZVx1ODY5ZFx1ODY5MFx1ODY5NFx1ODg0M1x1ODg0NFx1ODg2ZFx1ODg3NVx1ODg3Nlx1ODg3Mlx1ODg4MFx1ODg3MVx1ODg3Zlx1ODg2'@;
put 'Zlx1ODg4M1x1ODg3ZVx1ODg3NFx1ODg3Y1x1OGExMlx1OGM0N1x1OGM1N1x1OGM3Ylx1OGNhNFx1OGNhM1x1OGQ3Nlx1OGQ3OFx1OGRiNVx1OGRiN1x1OGRiNlx1OGVkMVx1OGVkM1x1OGZmZVx1OGZmNVx1OTAwMlx1OGZmZlx1OGZmYlx1OTAwNFx1OGZmY1x1OGZmNlx1OTBkNlx1OTBlMFx1'@;
put 'OTBkOVx1OTBkYVx1OTBlM1x1OTBkZlx1OTBlNVx1OTBkOFx1OTBkYlx1OTBkN1x1OTBkY1x1OTBlNFx1OTE1MFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIxMV0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjExXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIxMV1bZ11dPTU0MDE2K2cseVs1'@;
put 'NDAxNitnXT1fWzIxMV1bZ10pO2ZvcihfWzIxMl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTE0ZVx1OTE0Zlx1OTFkNVx1OTFlMlx1OTFkYVx1OTY1Y1x1OTY1Zlx1OTZiY1x1OThlM1x1OWFkZlx1OWIyZlx1NGU3Zlx1NTA3MFx1'@;
put 'NTA2YVx1NTA2MVx1NTA1ZVx1NTA2MFx1NTA1M1x1NTA0Ylx1NTA1ZFx1NTA3Mlx1NTA0OFx1NTA0ZFx1NTA0MVx1NTA1Ylx1NTA0YVx1NTA2Mlx1NTAxNVx1NTA0NVx1NTA1Zlx1NTA2OVx1NTA2Ylx1NTA2M1x1NTA2NFx1NTA0Nlx1NTA0MFx1NTA2ZVx1NTA3M1x1NTA1N1x1NTA1MVx1NTFk'@;
put 'MFx1NTI2Ylx1NTI2ZFx1NTI2Y1x1NTI2ZVx1NTJkNlx1NTJkM1x1NTMyZFx1NTM5Y1x1NTU3NVx1NTU3Nlx1NTUzY1x1NTU0ZFx1NTU1MFx1NTUzNFx1NTUyYVx1NTU1MVx1NTU2Mlx1NTUzNlx1NTUzNVx1NTUzMFx1NTU1Mlx1NTU0NVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1NTUwY1x1NTUzMlx1NTU2NVx1NTU0ZVx1NTUzOVx1NTU0OFx1NTUyZFx1NTUzYlx1NTU0MFx1NTU0Ylx1NTcwYVx1NTcwN1x1NTdmYlx1NTgxNFx1NTdlMlx1NTdmNlx1NTdkY1x1NTdmNFx1NTgwMFx1NTdlZFx1NTdmZFx1NTgwOFx1NTdmOFx1NTgwYlx1NTdmM1x1NTdjZlx1'@;
put 'NTgwN1x1NTdlZVx1NTdlM1x1NTdmMlx1NTdlNVx1NTdlY1x1NTdlMVx1NTgwZVx1NTdmY1x1NTgxMFx1NTdlN1x1NTgwMVx1NTgwY1x1NTdmMVx1NTdlOVx1NTdmMFx1NTgwZFx1NTgwNFx1NTk1Y1x1NWE2MFx1NWE1OFx1NWE1NVx1NWE2N1x1NWE1ZVx1NWEzOFx1NWEzNVx1NWE2ZFx1NWE1'@;
put 'MFx1NWE1Zlx1NWE2NVx1NWE2Y1x1NWE1M1x1NWE2NFx1NWE1N1x1NWE0M1x1NWE1ZFx1NWE1Mlx1NWE0NFx1NWE1Ylx1NWE0OFx1NWE4ZVx1NWEzZVx1NWE0ZFx1NWEzOVx1NWE0Y1x1NWE3MFx1NWE2OVx1NWE0N1x1NWE1MVx1NWE1Nlx1NWE0Mlx1NWE1Y1x1NWI3Mlx1NWI2ZVx1NWJjMVx1'@;
put 'NWJjMFx1NWM1OVx1NWQxZVx1NWQwYlx1NWQxZFx1NWQxYVx1NWQyMFx1NWQwY1x1NWQyOFx1NWQwZFx1NWQyNlx1NWQyNVx1NWQwZlx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIxMl0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjEyXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIxMl1bZ11d'@;
put 'PTU0MjcyK2cseVs1NDI3MitnXT1fWzIxMl1bZ10pO2ZvcihfWzIxM109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NWQzMFx1NWQxMlx1NWQyM1x1NWQxZlx1NWQyZVx1NWUzZVx1NWUzNFx1NWViMVx1NWViNFx1NWViOVx1NWViMlx1'@;
put 'NWViM1x1NWYzNlx1NWYzOFx1NWY5Ylx1NWY5Nlx1NWY5Zlx1NjA4YVx1NjA5MFx1NjA4Nlx1NjBiZVx1NjBiMFx1NjBiYVx1NjBkM1x1NjBkNFx1NjBjZlx1NjBlNFx1NjBkOVx1NjBkZFx1NjBjOFx1NjBiMVx1NjBkYlx1NjBiN1x1NjBjYVx1NjBiZlx1NjBjM1x1NjBjZFx1NjBjMFx1NjMz'@;
put 'Mlx1NjM2NVx1NjM4YVx1NjM4Mlx1NjM3ZFx1NjNiZFx1NjM5ZVx1NjNhZFx1NjM5ZFx1NjM5N1x1NjNhYlx1NjM4ZVx1NjM2Zlx1NjM4N1x1NjM5MFx1NjM2ZVx1NjNhZlx1NjM3NVx1NjM5Y1x1NjM2ZFx1NjNhZVx1NjM3Y1x1NjNhNFx1NjMzYlx1NjM5Zlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjM3OFx1NjM4NVx1NjM4MVx1NjM5MVx1NjM4ZFx1NjM3MFx1NjU1M1x1NjVjZFx1NjY2NVx1NjY2MVx1NjY1Ylx1NjY1OVx1NjY1Y1x1NjY2Mlx1NjcxOFx1Njg3OVx1Njg4N1x1Njg5MFx1Njg5Y1x1Njg2ZFx1Njg2ZVx1NjhhZVx1NjhhYlx1Njk1Nlx1'@;
put 'Njg2Zlx1NjhhM1x1NjhhY1x1NjhhOVx1Njg3NVx1Njg3NFx1NjhiMlx1Njg4Zlx1Njg3N1x1Njg5Mlx1Njg3Y1x1Njg2Ylx1Njg3Mlx1NjhhYVx1Njg4MFx1Njg3MVx1Njg3ZVx1Njg5Ylx1Njg5Nlx1Njg4Ylx1NjhhMFx1Njg4OVx1NjhhNFx1Njg3OFx1Njg3Ylx1Njg5MVx1Njg4Y1x1Njg4'@;
put 'YVx1Njg3ZFx1NmIzNlx1NmIzM1x1NmIzN1x1NmIzOFx1NmI5MVx1NmI4Zlx1NmI4ZFx1NmI4ZVx1NmI4Y1x1NmMyYVx1NmRjMFx1NmRhYlx1NmRiNFx1NmRiM1x1NmU3NFx1NmRhY1x1NmRlOVx1NmRlMlx1NmRiN1x1NmRmNlx1NmRkNFx1NmUwMFx1NmRjOFx1NmRlMFx1NmRkZlx1NmRkNlx1'@;
put 'NmRiZVx1NmRlNVx1NmRkY1x1NmRkZFx1NmRkYlx1NmRmNFx1NmRjYVx1NmRiZFx1NmRlZFx1NmRmMFx1NmRiYVx1NmRkNVx1NmRjMlx1NmRjZlx1NmRjOVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIxM10ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjEzXVtnXS5jaGFyQ29kZUF0KDApJiYo'@;
put 'SVtfWzIxM11bZ11dPTU0NTI4K2cseVs1NDUyOCtnXT1fWzIxM11bZ10pO2ZvcihfWzIxNF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmRkMFx1NmRmMlx1NmRkM1x1NmRmZFx1NmRkN1x1NmRjZFx1NmRlM1x1NmRiYlx1NzBmYVx1'@;
put 'NzEwZFx1NzBmN1x1NzExN1x1NzBmNFx1NzEwY1x1NzBmMFx1NzEwNFx1NzBmM1x1NzExMFx1NzBmY1x1NzBmZlx1NzEwNlx1NzExM1x1NzEwMFx1NzBmOFx1NzBmNlx1NzEwYlx1NzEwMlx1NzEwZVx1NzI3ZVx1NzI3Ylx1NzI3Y1x1NzI3Zlx1NzMxZFx1NzMxN1x1NzMwN1x1NzMxMVx1NzMx'@;
put 'OFx1NzMwYVx1NzMwOFx1NzJmZlx1NzMwZlx1NzMxZVx1NzM4OFx1NzNmNlx1NzNmOFx1NzNmNVx1NzQwNFx1NzQwMVx1NzNmZFx1NzQwN1x1NzQwMFx1NzNmYVx1NzNmY1x1NzNmZlx1NzQwY1x1NzQwYlx1NzNmNFx1NzQwOFx1NzU2NFx1NzU2M1x1NzVjZVx1NzVkMlx1NzVjZlx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzVjYlx1NzVjY1x1NzVkMVx1NzVkMFx1NzY4Zlx1NzY4OVx1NzZkM1x1NzczOVx1NzcyZlx1NzcyZFx1NzczMVx1NzczMlx1NzczNFx1NzczM1x1NzczZFx1NzcyNVx1NzczYlx1NzczNVx1Nzg0OFx1Nzg1Mlx1Nzg0OVx1Nzg0ZFx1'@;
put 'Nzg0YVx1Nzg0Y1x1NzgyNlx1Nzg0NVx1Nzg1MFx1Nzk2NFx1Nzk2N1x1Nzk2OVx1Nzk2YVx1Nzk2M1x1Nzk2Ylx1Nzk2MVx1NzliYlx1NzlmYVx1NzlmOFx1NzlmNlx1NzlmN1x1N2E4Zlx1N2E5NFx1N2E5MFx1N2IzNVx1N2I0N1x1N2IzNFx1N2IyNVx1N2IzMFx1N2IyMlx1N2IyNFx1N2Iz'@;
put 'M1x1N2IxOFx1N2IyYVx1N2IxZFx1N2IzMVx1N2IyYlx1N2IyZFx1N2IyZlx1N2IzMlx1N2IzOFx1N2IxYVx1N2IyM1x1N2M5NFx1N2M5OFx1N2M5Nlx1N2NhM1x1N2QzNVx1N2QzZFx1N2QzOFx1N2QzNlx1N2QzYVx1N2Q0NVx1N2QyY1x1N2QyOVx1N2Q0MVx1N2Q0N1x1N2QzZVx1N2QzZlx1'@;
put 'N2Q0YVx1N2QzYlx1N2QyOFx1N2Y2M1x1N2Y5NVx1N2Y5Y1x1N2Y5ZFx1N2Y5Ylx1N2ZjYVx1N2ZjYlx1N2ZjZFx1N2ZkMFx1N2ZkMVx1N2ZjN1x1N2ZjZlx1N2ZjOVx1ODAxZlx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIxNF0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjE0XVtnXS5jaGFy'@;
put 'Q29kZUF0KDApJiYoSVtfWzIxNF1bZ11dPTU0Nzg0K2cseVs1NDc4NCtnXT1fWzIxNF1bZ10pO2ZvcihfWzIxNV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODAxZVx1ODAxYlx1ODA0N1x1ODA0M1x1ODA0OFx1ODExOFx1ODEyNVx1'@;
put 'ODExOVx1ODExYlx1ODEyZFx1ODExZlx1ODEyY1x1ODExZVx1ODEyMVx1ODExNVx1ODEyN1x1ODExZFx1ODEyMlx1ODIxMVx1ODIzOFx1ODIzM1x1ODIzYVx1ODIzNFx1ODIzMlx1ODI3NFx1ODM5MFx1ODNhM1x1ODNhOFx1ODM4ZFx1ODM3YVx1ODM3M1x1ODNhNFx1ODM3NFx1ODM4Zlx1ODM4'@;
put 'MVx1ODM5NVx1ODM5OVx1ODM3NVx1ODM5NFx1ODNhOVx1ODM3ZFx1ODM4M1x1ODM4Y1x1ODM5ZFx1ODM5Ylx1ODNhYVx1ODM4Ylx1ODM3ZVx1ODNhNVx1ODNhZlx1ODM4OFx1ODM5N1x1ODNiMFx1ODM3Zlx1ODNhNlx1ODM4N1x1ODNhZVx1ODM3Nlx1ODM5YVx1ODY1OVx1ODY1Nlx1ODZiZlx1'@;
put 'ODZiN1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODZjMlx1ODZjMVx1ODZjNVx1ODZiYVx1ODZiMFx1ODZjOFx1ODZiOVx1ODZiM1x1ODZiOFx1ODZjY1x1ODZiNFx1ODZiYlx1ODZiY1x1ODZjM1x1ODZiZFx1ODZiZVx1ODg1Mlx1ODg4OVx1ODg5NVx1ODhhOFx1'@;
put 'ODhhMlx1ODhhYVx1ODg5YVx1ODg5MVx1ODhhMVx1ODg5Zlx1ODg5OFx1ODhhN1x1ODg5OVx1ODg5Ylx1ODg5N1x1ODhhNFx1ODhhY1x1ODg4Y1x1ODg5M1x1ODg4ZVx1ODk4Mlx1ODlkNlx1ODlkOVx1ODlkNVx1OGEzMFx1OGEyN1x1OGEyY1x1OGExZVx1OGMzOVx1OGMzYlx1OGM1Y1x1OGM1'@;
put 'ZFx1OGM3ZFx1OGNhNVx1OGQ3ZFx1OGQ3Ylx1OGQ3OVx1OGRiY1x1OGRjMlx1OGRiOVx1OGRiZlx1OGRjMVx1OGVkOFx1OGVkZVx1OGVkZFx1OGVkY1x1OGVkN1x1OGVlMFx1OGVlMVx1OTAyNFx1OTAwYlx1OTAxMVx1OTAxY1x1OTAwY1x1OTAyMVx1OTBlZlx1OTBlYVx1OTBmMFx1OTBmNFx1'@;
put 'OTBmMlx1OTBmM1x1OTBkNFx1OTBlYlx1OTBlY1x1OTBlOVx1OTE1Nlx1OTE1OFx1OTE1YVx1OTE1M1x1OTE1NVx1OTFlY1x1OTFmNFx1OTFmMVx1OTFmM1x1OTFmOFx1OTFlNFx1OTFmOVx1OTFlYVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIxNV0ubGVuZ3RoOysrZyk2NTUzMyE9PV9b'@;
put 'MjE1XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIxNV1bZ11dPTU1MDQwK2cseVs1NTA0MCtnXT1fWzIxNV1bZ10pO2ZvcihfWzIxNl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTFlYlx1OTFmN1x1OTFlOFx1OTFlZVx1OTU3YVx1'@;
put 'OTU4Nlx1OTU4OFx1OTY3Y1x1OTY2ZFx1OTY2Ylx1OTY3MVx1OTY2Zlx1OTZiZlx1OTc2YVx1OTgwNFx1OThlNVx1OTk5N1x1NTA5Ylx1NTA5NVx1NTA5NFx1NTA5ZVx1NTA4Ylx1NTBhM1x1NTA4M1x1NTA4Y1x1NTA4ZVx1NTA5ZFx1NTA2OFx1NTA5Y1x1NTA5Mlx1NTA4Mlx1NTA4N1x1NTE1'@;
put 'Zlx1NTFkNFx1NTMxMlx1NTMxMVx1NTNhNFx1NTNhN1x1NTU5MVx1NTVhOFx1NTVhNVx1NTVhZFx1NTU3N1x1NTY0NVx1NTVhMlx1NTU5M1x1NTU4OFx1NTU4Zlx1NTViNVx1NTU4MVx1NTVhM1x1NTU5Mlx1NTVhNFx1NTU3ZFx1NTU4Y1x1NTVhNlx1NTU3Zlx1NTU5NVx1NTVhMVx1NTU4ZVx1'@;
put 'NTcwY1x1NTgyOVx1NTgzN1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTgxOVx1NTgxZVx1NTgyN1x1NTgyM1x1NTgyOFx1NTdmNVx1NTg0OFx1NTgyNVx1NTgxY1x1NTgxYlx1NTgzM1x1NTgzZlx1NTgzNlx1NTgyZVx1NTgzOVx1NTgzOFx1NTgyZFx1NTgyY1x1'@;
put 'NTgzYlx1NTk2MVx1NWFhZlx1NWE5NFx1NWE5Zlx1NWE3YVx1NWFhMlx1NWE5ZVx1NWE3OFx1NWFhNlx1NWE3Y1x1NWFhNVx1NWFhY1x1NWE5NVx1NWFhZVx1NWEzN1x1NWE4NFx1NWE4YVx1NWE5N1x1NWE4M1x1NWE4Ylx1NWFhOVx1NWE3Ylx1NWE3ZFx1NWE4Y1x1NWE5Y1x1NWE4Zlx1NWE5'@;
put 'M1x1NWE5ZFx1NWJlYVx1NWJjZFx1NWJjYlx1NWJkNFx1NWJkMVx1NWJjYVx1NWJjZVx1NWMwY1x1NWMzMFx1NWQzN1x1NWQ0M1x1NWQ2Ylx1NWQ0MVx1NWQ0Ylx1NWQzZlx1NWQzNVx1NWQ1MVx1NWQ0ZVx1NWQ1NVx1NWQzM1x1NWQzYVx1NWQ1Mlx1NWQzZFx1NWQzMVx1NWQ1OVx1NWQ0Mlx1'@;
put 'NWQzOVx1NWQ0OVx1NWQzOFx1NWQzY1x1NWQzMlx1NWQzNlx1NWQ0MFx1NWQ0NVx1NWU0NFx1NWU0MVx1NWY1OFx1NWZhNlx1NWZhNVx1NWZhYlx1NjBjOVx1NjBiOVx1NjBjY1x1NjBlMlx1NjBjZVx1NjBjNFx1NjExNFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIxNl0ubGVuZ3RoOysr'@;
put 'Zyk2NTUzMyE9PV9bMjE2XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIxNl1bZ11dPTU1Mjk2K2cseVs1NTI5NitnXT1fWzIxNl1bZ10pO2ZvcihfWzIxN109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjBmMlx1NjEwYVx1NjExNlx1'@;
put 'NjEwNVx1NjBmNVx1NjExM1x1NjBmOFx1NjBmY1x1NjBmZVx1NjBjMVx1NjEwM1x1NjExOFx1NjExZFx1NjExMFx1NjBmZlx1NjEwNFx1NjEwYlx1NjI0YVx1NjM5NFx1NjNiMVx1NjNiMFx1NjNjZVx1NjNlNVx1NjNlOFx1NjNlZlx1NjNjM1x1NjQ5ZFx1NjNmM1x1NjNjYVx1NjNlMFx1NjNm'@;
put 'Nlx1NjNkNVx1NjNmMlx1NjNmNVx1NjQ2MVx1NjNkZlx1NjNiZVx1NjNkZFx1NjNkY1x1NjNjNFx1NjNkOFx1NjNkM1x1NjNjMlx1NjNjN1x1NjNjY1x1NjNjYlx1NjNjOFx1NjNmMFx1NjNkN1x1NjNkOVx1NjUzMlx1NjU2N1x1NjU2YVx1NjU2NFx1NjU1Y1x1NjU2OFx1NjU2NVx1NjU4Y1x1'@;
put 'NjU5ZFx1NjU5ZVx1NjVhZVx1NjVkMFx1NjVkMlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjY3Y1x1NjY2Y1x1NjY3Ylx1NjY4MFx1NjY3MVx1NjY3OVx1NjY2YVx1NjY3Mlx1NjcwMVx1NjkwY1x1NjhkM1x1NjkwNFx1NjhkY1x1NjkyYVx1NjhlY1x1NjhlYVx1'@;
put 'NjhmMVx1NjkwZlx1NjhkNlx1NjhmN1x1NjhlYlx1NjhlNFx1NjhmNlx1NjkxM1x1NjkxMFx1NjhmM1x1NjhlMVx1NjkwN1x1NjhjY1x1NjkwOFx1Njk3MFx1NjhiNFx1NjkxMVx1NjhlZlx1NjhjNlx1NjkxNFx1NjhmOFx1NjhkMFx1NjhmZFx1NjhmY1x1NjhlOFx1NjkwYlx1NjkwYVx1Njkx'@;
put 'N1x1NjhjZVx1NjhjOFx1NjhkZFx1NjhkZVx1NjhlNlx1NjhmNFx1NjhkMVx1NjkwNlx1NjhkNFx1NjhlOVx1NjkxNVx1NjkyNVx1NjhjN1x1NmIzOVx1NmIzYlx1NmIzZlx1NmIzY1x1NmI5NFx1NmI5N1x1NmI5OVx1NmI5NVx1NmJiZFx1NmJmMFx1NmJmMlx1NmJmM1x1NmMzMFx1NmRmY1x1'@;
put 'NmU0Nlx1NmU0N1x1NmUxZlx1NmU0OVx1NmU4OFx1NmUzY1x1NmUzZFx1NmU0NVx1NmU2Mlx1NmUyYlx1NmUzZlx1NmU0MVx1NmU1ZFx1NmU3M1x1NmUxY1x1NmUzM1x1NmU0Ylx1NmU0MFx1NmU1MVx1NmUzYlx1NmUwM1x1NmUyZVx1NmU1ZVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIx'@;
put 'N10ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjE3XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIxN11bZ11dPTU1NTUyK2cseVs1NTU1MitnXT1fWzIxN11bZ10pO2ZvcihfWzIxOF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmU2OFx1'@;
put 'NmU1Y1x1NmU2MVx1NmUzMVx1NmUyOFx1NmU2MFx1NmU3MVx1NmU2Ylx1NmUzOVx1NmUyMlx1NmUzMFx1NmU1M1x1NmU2NVx1NmUyN1x1NmU3OFx1NmU2NFx1NmU3N1x1NmU1NVx1NmU3OVx1NmU1Mlx1NmU2Nlx1NmUzNVx1NmUzNlx1NmU1YVx1NzEyMFx1NzExZVx1NzEyZlx1NzBmYlx1NzEy'@;
put 'ZVx1NzEzMVx1NzEyM1x1NzEyNVx1NzEyMlx1NzEzMlx1NzExZlx1NzEyOFx1NzEzYVx1NzExYlx1NzI0Ylx1NzI1YVx1NzI4OFx1NzI4OVx1NzI4Nlx1NzI4NVx1NzI4Ylx1NzMxMlx1NzMwYlx1NzMzMFx1NzMyMlx1NzMzMVx1NzMzM1x1NzMyN1x1NzMzMlx1NzMyZFx1NzMyNlx1NzMyM1x1'@;
put 'NzMzNVx1NzMwY1x1NzQyZVx1NzQyY1x1NzQzMFx1NzQyYlx1NzQxNlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzQxYVx1NzQyMVx1NzQyZFx1NzQzMVx1NzQyNFx1NzQyM1x1NzQxZFx1NzQyOVx1NzQyMFx1NzQzMlx1NzRmYlx1NzUyZlx1NzU2Zlx1NzU2Y1x1'@;
put 'NzVlN1x1NzVkYVx1NzVlMVx1NzVlNlx1NzVkZFx1NzVkZlx1NzVlNFx1NzVkN1x1NzY5NVx1NzY5Mlx1NzZkYVx1Nzc0Nlx1Nzc0N1x1Nzc0NFx1Nzc0ZFx1Nzc0NVx1Nzc0YVx1Nzc0ZVx1Nzc0Ylx1Nzc0Y1x1NzdkZVx1NzdlY1x1Nzg2MFx1Nzg2NFx1Nzg2NVx1Nzg1Y1x1Nzg2ZFx1Nzg3'@;
put 'MVx1Nzg2YVx1Nzg2ZVx1Nzg3MFx1Nzg2OVx1Nzg2OFx1Nzg1ZVx1Nzg2Mlx1Nzk3NFx1Nzk3M1x1Nzk3Mlx1Nzk3MFx1N2EwMlx1N2EwYVx1N2EwM1x1N2EwY1x1N2EwNFx1N2E5OVx1N2FlNlx1N2FlNFx1N2I0YVx1N2IzYlx1N2I0NFx1N2I0OFx1N2I0Y1x1N2I0ZVx1N2I0MFx1N2I1OFx1'@;
put 'N2I0NVx1N2NhMlx1N2M5ZVx1N2NhOFx1N2NhMVx1N2Q1OFx1N2Q2Zlx1N2Q2M1x1N2Q1M1x1N2Q1Nlx1N2Q2N1x1N2Q2YVx1N2Q0Zlx1N2Q2ZFx1N2Q1Y1x1N2Q2Ylx1N2Q1Mlx1N2Q1NFx1N2Q2OVx1N2Q1MVx1N2Q1Zlx1N2Q0ZVx1N2YzZVx1N2YzZlx1N2Y2NVx1ZmZmZCIuc3BsaXQoIiIp'@;
put 'LGc9MDtnIT1fWzIxOF0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjE4XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIxOF1bZ11dPTU1ODA4K2cseVs1NTgwOCtnXT1fWzIxOF1bZ10pO2ZvcihfWzIxOV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1N2Y2Nlx1N2ZhMlx1N2ZhMFx1N2ZhMVx1N2ZkN1x1ODA1MVx1ODA0Zlx1ODA1MFx1ODBmZVx1ODBkNFx1ODE0M1x1ODE0YVx1ODE1Mlx1ODE0Zlx1ODE0N1x1ODEzZFx1ODE0ZFx1ODEzYVx1ODFlNlx1ODFlZVx1ODFmN1x1ODFmOFx1ODFmOVx1ODIwNFx1ODIzY1x1ODIzZFx1ODIz'@;
put 'Zlx1ODI3NVx1ODMzYlx1ODNjZlx1ODNmOVx1ODQyM1x1ODNjMFx1ODNlOFx1ODQxMlx1ODNlN1x1ODNlNFx1ODNmY1x1ODNmNlx1ODQxMFx1ODNjNlx1ODNjOFx1ODNlYlx1ODNlM1x1ODNiZlx1ODQwMVx1ODNkZFx1ODNlNVx1ODNkOFx1ODNmZlx1ODNlMVx1ODNjYlx1ODNjZVx1ODNkNlx1'@;
put 'ODNmNVx1ODNjOVx1ODQwOVx1ODQwZlx1ODNkZVx1ODQxMVx1ODQwNlx1ODNjMlx1ODNmM1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODNkNVx1ODNmYVx1ODNjN1x1ODNkMVx1ODNlYVx1ODQxM1x1ODNjM1x1ODNlY1x1ODNlZVx1ODNjNFx1ODNmYlx1ODNkN1x1'@;
put 'ODNlMlx1ODQxYlx1ODNkYlx1ODNmZVx1ODZkOFx1ODZlMlx1ODZlNlx1ODZkM1x1ODZlM1x1ODZkYVx1ODZlYVx1ODZkZFx1ODZlYlx1ODZkY1x1ODZlY1x1ODZlOVx1ODZkN1x1ODZlOFx1ODZkMVx1ODg0OFx1ODg1Nlx1ODg1NVx1ODhiYVx1ODhkN1x1ODhiOVx1ODhiOFx1ODhjMFx1ODhi'@;
put 'ZVx1ODhiNlx1ODhiY1x1ODhiN1x1ODhiZFx1ODhiMlx1ODkwMVx1ODhjOVx1ODk5NVx1ODk5OFx1ODk5N1x1ODlkZFx1ODlkYVx1ODlkYlx1OGE0ZVx1OGE0ZFx1OGEzOVx1OGE1OVx1OGE0MFx1OGE1N1x1OGE1OFx1OGE0NFx1OGE0NVx1OGE1Mlx1OGE0OFx1OGE1MVx1OGE0YVx1OGE0Y1x1'@;
put 'OGE0Zlx1OGM1Zlx1OGM4MVx1OGM4MFx1OGNiYVx1OGNiZVx1OGNiMFx1OGNiOVx1OGNiNVx1OGQ4NFx1OGQ4MFx1OGQ4OVx1OGRkOFx1OGRkM1x1OGRjZFx1OGRjN1x1OGRkNlx1OGRkY1x1OGRjZlx1OGRkNVx1OGRkOVx1OGRjOFx1OGRkN1x1OGRjNVx1OGVlZlx1OGVmN1x1OGVmYVx1ZmZm'@;
put 'ZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIxOV0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjE5XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIxOV1bZ11dPTU2MDY0K2cseVs1NjA2NCtnXT1fWzIxOV1bZ10pO2ZvcihfWzIyMF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1OGVmOVx1OGVlNlx1OGVlZVx1OGVlNVx1OGVmNVx1OGVlN1x1OGVlOFx1OGVmNlx1OGVlYlx1OGVmMVx1OGVlY1x1OGVmNFx1OGVlOVx1OTAyZFx1OTAzNFx1OTAyZlx1OTEwNlx1OTEyY1x1OTEwNFx1OTBmZlx1OTBmY1x1OTEwOFx1OTBmOVx1OTBmYlx1OTEw'@;
put 'MVx1OTEwMFx1OTEwN1x1OTEwNVx1OTEwM1x1OTE2MVx1OTE2NFx1OTE1Zlx1OTE2Mlx1OTE2MFx1OTIwMVx1OTIwYVx1OTIyNVx1OTIwM1x1OTIxYVx1OTIyNlx1OTIwZlx1OTIwY1x1OTIwMFx1OTIxMlx1OTFmZlx1OTFmZFx1OTIwNlx1OTIwNFx1OTIyN1x1OTIwMlx1OTIxY1x1OTIyNFx1'@;
put 'OTIxOVx1OTIxN1x1OTIwNVx1OTIxNlx1OTU3Ylx1OTU4ZFx1OTU4Y1x1OTU5MFx1OTY4N1x1OTY3ZVx1OTY4OFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTY4OVx1OTY4M1x1OTY4MFx1OTZjMlx1OTZjOFx1OTZjM1x1OTZmMVx1OTZmMFx1OTc2Y1x1OTc3MFx1'@;
put 'OTc2ZVx1OTgwN1x1OThhOVx1OThlYlx1OWNlNlx1OWVmOVx1NGU4M1x1NGU4NFx1NGViNlx1NTBiZFx1NTBiZlx1NTBjNlx1NTBhZVx1NTBjNFx1NTBjYVx1NTBiNFx1NTBjOFx1NTBjMlx1NTBiMFx1NTBjMVx1NTBiYVx1NTBiMVx1NTBjYlx1NTBjOVx1NTBiNlx1NTBiOFx1NTFkN1x1NTI3'@;
put 'YVx1NTI3OFx1NTI3Ylx1NTI3Y1x1NTVjM1x1NTVkYlx1NTVjY1x1NTVkMFx1NTVjYlx1NTVjYVx1NTVkZFx1NTVjMFx1NTVkNFx1NTVjNFx1NTVlOVx1NTViZlx1NTVkMlx1NTU4ZFx1NTVjZlx1NTVkNVx1NTVlMlx1NTVkNlx1NTVjOFx1NTVmMlx1NTVjZFx1NTVkOVx1NTVjMlx1NTcxNFx1'@;
put 'NTg1M1x1NTg2OFx1NTg2NFx1NTg0Zlx1NTg0ZFx1NTg0OVx1NTg2Zlx1NTg1NVx1NTg0ZVx1NTg1ZFx1NTg1OVx1NTg2NVx1NTg1Ylx1NTgzZFx1NTg2M1x1NTg3MVx1NThmY1x1NWFjN1x1NWFjNFx1NWFjYlx1NWFiYVx1NWFiOFx1NWFiMVx1NWFiNVx1NWFiMFx1NWFiZlx1NWFjOFx1NWFi'@;
put 'Ylx1NWFjNlx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIyMF0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjIwXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIyMF1bZ11dPTU2MzIwK2cseVs1NjMyMCtnXT1fWzIyMF1bZ10pO2ZvcihfWzIyMV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NWFiN1x1NWFjMFx1NWFjYVx1NWFiNFx1NWFiNlx1NWFjZFx1NWFiOVx1NWE5MFx1NWJkNlx1NWJkOFx1NWJkOVx1NWMxZlx1NWMzM1x1NWQ3MVx1NWQ2M1x1NWQ0YVx1NWQ2NVx1NWQ3Mlx1NWQ2Y1x1NWQ1ZVx1NWQ2OFx1NWQ2N1x1NWQ2'@;
put 'Mlx1NWRmMFx1NWU0Zlx1NWU0ZVx1NWU0YVx1NWU0ZFx1NWU0Ylx1NWVjNVx1NWVjY1x1NWVjNlx1NWVjYlx1NWVjN1x1NWY0MFx1NWZhZlx1NWZhZFx1NjBmN1x1NjE0OVx1NjE0YVx1NjEyYlx1NjE0NVx1NjEzNlx1NjEzMlx1NjEyZVx1NjE0Nlx1NjEyZlx1NjE0Zlx1NjEyOVx1NjE0MFx1'@;
put 'NjIyMFx1OTE2OFx1NjIyM1x1NjIyNVx1NjIyNFx1NjNjNVx1NjNmMVx1NjNlYlx1NjQxMFx1NjQxMlx1NjQwOVx1NjQyMFx1NjQyNFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjQzM1x1NjQ0M1x1NjQxZlx1NjQxNVx1NjQxOFx1NjQzOVx1NjQzN1x1NjQyMlx1'@;
put 'NjQyM1x1NjQwY1x1NjQyNlx1NjQzMFx1NjQyOFx1NjQ0MVx1NjQzNVx1NjQyZlx1NjQwYVx1NjQxYVx1NjQ0MFx1NjQyNVx1NjQyN1x1NjQwYlx1NjNlN1x1NjQxYlx1NjQyZVx1NjQyMVx1NjQwZVx1NjU2Zlx1NjU5Mlx1NjVkM1x1NjY4Nlx1NjY4Y1x1NjY5NVx1NjY5MFx1NjY4Ylx1NjY4'@;
put 'YVx1NjY5OVx1NjY5NFx1NjY3OFx1NjcyMFx1Njk2Nlx1Njk1Zlx1NjkzOFx1Njk0ZVx1Njk2Mlx1Njk3MVx1NjkzZlx1Njk0NVx1Njk2YVx1NjkzOVx1Njk0Mlx1Njk1N1x1Njk1OVx1Njk3YVx1Njk0OFx1Njk0OVx1NjkzNVx1Njk2Y1x1NjkzM1x1NjkzZFx1Njk2NVx1NjhmMFx1Njk3OFx1'@;
put 'NjkzNFx1Njk2OVx1Njk0MFx1Njk2Zlx1Njk0NFx1Njk3Nlx1Njk1OFx1Njk0MVx1Njk3NFx1Njk0Y1x1NjkzYlx1Njk0Ylx1NjkzN1x1Njk1Y1x1Njk0Zlx1Njk1MVx1NjkzMlx1Njk1Mlx1NjkyZlx1Njk3Ylx1NjkzY1x1NmI0Nlx1NmI0NVx1NmI0M1x1NmI0Mlx1NmI0OFx1NmI0MVx1NmI5'@;
put 'Ylx1ZmEwZFx1NmJmYlx1NmJmY1x1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIyMV0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjIxXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIyMV1bZ11dPTU2NTc2K2cseVs1NjU3NitnXT1fWzIyMV1bZ10pO2ZvcihfWzIyMl09Ilx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmJmOVx1NmJmN1x1NmJmOFx1NmU5Ylx1NmVkNlx1NmVjOFx1NmU4Zlx1NmVjMFx1NmU5Zlx1NmU5M1x1NmU5NFx1NmVhMFx1NmViMVx1NmViOVx1NmVjNlx1NmVkMlx1NmViZFx1NmVjMVx1NmU5ZVx1NmVjOVx1NmVi'@;
put 'N1x1NmViMFx1NmVjZFx1NmVhNlx1NmVjZlx1NmViMlx1NmViZVx1NmVjM1x1NmVkY1x1NmVkOFx1NmU5OVx1NmU5Mlx1NmU4ZVx1NmU4ZFx1NmVhNFx1NmVhMVx1NmViZlx1NmViM1x1NmVkMFx1NmVjYVx1NmU5N1x1NmVhZVx1NmVhM1x1NzE0N1x1NzE1NFx1NzE1Mlx1NzE2M1x1NzE2MFx1'@;
put 'NzE0MVx1NzE1ZFx1NzE2Mlx1NzE3Mlx1NzE3OFx1NzE2YVx1NzE2MVx1NzE0Mlx1NzE1OFx1NzE0M1x1NzE0Ylx1NzE3MFx1NzE1Zlx1NzE1MFx1NzE1M1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzE0NFx1NzE0ZFx1NzE1YVx1NzI0Zlx1NzI4ZFx1NzI4Y1x1'@;
put 'NzI5MVx1NzI5MFx1NzI4ZVx1NzMzY1x1NzM0Mlx1NzMzYlx1NzMzYVx1NzM0MFx1NzM0YVx1NzM0OVx1NzQ0NFx1NzQ0YVx1NzQ0Ylx1NzQ1Mlx1NzQ1MVx1NzQ1N1x1NzQ0MFx1NzQ0Zlx1NzQ1MFx1NzQ0ZVx1NzQ0Mlx1NzQ0Nlx1NzQ0ZFx1NzQ1NFx1NzRlMVx1NzRmZlx1NzRmZVx1NzRm'@;
put 'ZFx1NzUxZFx1NzU3OVx1NzU3N1x1Njk4M1x1NzVlZlx1NzYwZlx1NzYwM1x1NzVmN1x1NzVmZVx1NzVmY1x1NzVmOVx1NzVmOFx1NzYxMFx1NzVmYlx1NzVmNlx1NzVlZFx1NzVmNVx1NzVmZFx1NzY5OVx1NzZiNVx1NzZkZFx1Nzc1NVx1Nzc1Zlx1Nzc2MFx1Nzc1Mlx1Nzc1Nlx1Nzc1YVx1'@;
put 'Nzc2OVx1Nzc2N1x1Nzc1NFx1Nzc1OVx1Nzc2ZFx1NzdlMFx1Nzg4N1x1Nzg5YVx1Nzg5NFx1Nzg4Zlx1Nzg4NFx1Nzg5NVx1Nzg4NVx1Nzg4Nlx1NzhhMVx1Nzg4M1x1Nzg3OVx1Nzg5OVx1Nzg4MFx1Nzg5Nlx1Nzg3Ylx1Nzk3Y1x1Nzk4Mlx1Nzk3ZFx1Nzk3OVx1N2ExMVx1N2ExOFx1N2Ex'@;
put 'OVx1N2ExMlx1N2ExN1x1N2ExNVx1N2EyMlx1N2ExM1x1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIyMl0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjIyXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIyMl1bZ11dPTU2ODMyK2cseVs1NjgzMitnXT1fWzIyMl1bZ10pO2ZvcihfWzIyM109Ilx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1N2ExYlx1N2ExMFx1N2FhM1x1N2FhMlx1N2E5ZVx1N2FlYlx1N2I2Nlx1N2I2NFx1N2I2ZFx1N2I3NFx1N2I2OVx1N2I3Mlx1N2I2NVx1N2I3M1x1N2I3MVx1N2I3MFx1N2I2MVx1N2I3OFx1N2I3'@;
put 'Nlx1N2I2M1x1N2NiMlx1N2NiNFx1N2NhZlx1N2Q4OFx1N2Q4Nlx1N2Q4MFx1N2Q4ZFx1N2Q3Zlx1N2Q4NVx1N2Q3YVx1N2Q4ZVx1N2Q3Ylx1N2Q4M1x1N2Q3Y1x1N2Q4Y1x1N2Q5NFx1N2Q4NFx1N2Q3ZFx1N2Q5Mlx1N2Y2ZFx1N2Y2Ylx1N2Y2N1x1N2Y2OFx1N2Y2Y1x1N2ZhNlx1N2ZhNVx1'@;
put 'N2ZhN1x1N2ZkYlx1N2ZkY1x1ODAyMVx1ODE2NFx1ODE2MFx1ODE3N1x1ODE1Y1x1ODE2OVx1ODE1Ylx1ODE2Mlx1ODE3Mlx1NjcyMVx1ODE1ZVx1ODE3Nlx1ODE2N1x1ODE2Zlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODE0NFx1ODE2MVx1ODIxZFx1ODI0OVx1'@;
put 'ODI0NFx1ODI0MFx1ODI0Mlx1ODI0NVx1ODRmMVx1ODQzZlx1ODQ1Nlx1ODQ3Nlx1ODQ3OVx1ODQ4Zlx1ODQ4ZFx1ODQ2NVx1ODQ1MVx1ODQ0MFx1ODQ4Nlx1ODQ2N1x1ODQzMFx1ODQ0ZFx1ODQ3ZFx1ODQ1YVx1ODQ1OVx1ODQ3NFx1ODQ3M1x1ODQ1ZFx1ODUwN1x1ODQ1ZVx1ODQzN1x1ODQz'@;
put 'YVx1ODQzNFx1ODQ3YVx1ODQ0M1x1ODQ3OFx1ODQzMlx1ODQ0NVx1ODQyOVx1ODNkOVx1ODQ0Ylx1ODQyZlx1ODQ0Mlx1ODQyZFx1ODQ1Zlx1ODQ3MFx1ODQzOVx1ODQ0ZVx1ODQ0Y1x1ODQ1Mlx1ODQ2Zlx1ODRjNVx1ODQ4ZVx1ODQzYlx1ODQ0N1x1ODQzNlx1ODQzM1x1ODQ2OFx1ODQ3ZVx1'@;
put 'ODQ0NFx1ODQyYlx1ODQ2MFx1ODQ1NFx1ODQ2ZVx1ODQ1MFx1ODcwYlx1ODcwNFx1ODZmN1x1ODcwY1x1ODZmYVx1ODZkNlx1ODZmNVx1ODc0ZFx1ODZmOFx1ODcwZVx1ODcwOVx1ODcwMVx1ODZmNlx1ODcwZFx1ODcwNVx1ODhkNlx1ODhjYlx1ODhjZFx1ODhjZVx1ODhkZVx1ODhkYlx1ODhk'@;
put 'YVx1ODhjY1x1ODhkMFx1ODk4NVx1ODk5Ylx1ODlkZlx1ODllNVx1ODllNFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIyM10ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjIzXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIyM11bZ11dPTU3MDg4K2cseVs1NzA4OCtnXT1fWzIyM11bZ10pO2Zv'@;
put 'cihfWzIyNF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODllMVx1ODllMFx1ODllMlx1ODlkY1x1ODllNlx1OGE3Nlx1OGE4Nlx1OGE3Zlx1OGE2MVx1OGEzZlx1OGE3N1x1OGE4Mlx1OGE4NFx1OGE3NVx1OGE4M1x1OGE4MVx1OGE3'@;
put 'NFx1OGE3YVx1OGMzY1x1OGM0Ylx1OGM0YVx1OGM2NVx1OGM2NFx1OGM2Nlx1OGM4Nlx1OGM4NFx1OGM4NVx1OGNjY1x1OGQ2OFx1OGQ2OVx1OGQ5MVx1OGQ4Y1x1OGQ4ZVx1OGQ4Zlx1OGQ4ZFx1OGQ5M1x1OGQ5NFx1OGQ5MFx1OGQ5Mlx1OGRmMFx1OGRlMFx1OGRlY1x1OGRmMVx1OGRlZVx1'@;
put 'OGRkMFx1OGRlOVx1OGRlM1x1OGRlMlx1OGRlN1x1OGRmMlx1OGRlYlx1OGRmNFx1OGYwNlx1OGVmZlx1OGYwMVx1OGYwMFx1OGYwNVx1OGYwN1x1OGYwOFx1OGYwMlx1OGYwYlx1OTA1Mlx1OTAzZlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTA0NFx1OTA0OVx1'@;
put 'OTAzZFx1OTExMFx1OTEwZFx1OTEwZlx1OTExMVx1OTExNlx1OTExNFx1OTEwYlx1OTEwZVx1OTE2ZVx1OTE2Zlx1OTI0OFx1OTI1Mlx1OTIzMFx1OTIzYVx1OTI2Nlx1OTIzM1x1OTI2NVx1OTI1ZVx1OTI4M1x1OTIyZVx1OTI0YVx1OTI0Nlx1OTI2ZFx1OTI2Y1x1OTI0Zlx1OTI2MFx1OTI2'@;
put 'N1x1OTI2Zlx1OTIzNlx1OTI2MVx1OTI3MFx1OTIzMVx1OTI1NFx1OTI2M1x1OTI1MFx1OTI3Mlx1OTI0ZVx1OTI1M1x1OTI0Y1x1OTI1Nlx1OTIzMlx1OTU5Zlx1OTU5Y1x1OTU5ZVx1OTU5Ylx1OTY5Mlx1OTY5M1x1OTY5MVx1OTY5N1x1OTZjZVx1OTZmYVx1OTZmZFx1OTZmOFx1OTZmNVx1'@;
put 'OTc3M1x1OTc3N1x1OTc3OFx1OTc3Mlx1OTgwZlx1OTgwZFx1OTgwZVx1OThhY1x1OThmNlx1OThmOVx1OTlhZlx1OTliMlx1OTliMFx1OTliNVx1OWFhZFx1OWFhYlx1OWI1Ylx1OWNlYVx1OWNlZFx1OWNlN1x1OWU4MFx1OWVmZFx1NTBlNlx1NTBkNFx1NTBkN1x1NTBlOFx1NTBmM1x1NTBk'@;
put 'Ylx1NTBlYVx1NTBkZFx1NTBlNFx1NTBkM1x1NTBlY1x1NTBmMFx1NTBlZlx1NTBlM1x1NTBlMFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIyNF0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjI0XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIyNF1bZ11dPTU3MzQ0K2cseVs1NzM0NCtnXT1f'@;
put 'WzIyNF1bZ10pO2ZvcihfWzIyNV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTFkOFx1NTI4MFx1NTI4MVx1NTJlOVx1NTJlYlx1NTMzMFx1NTNhY1x1NTYyN1x1NTYxNVx1NTYwY1x1NTYxMlx1NTVmY1x1NTYwZlx1NTYxY1x1NTYw'@;
put 'MVx1NTYxM1x1NTYwMlx1NTVmYVx1NTYxZFx1NTYwNFx1NTVmZlx1NTVmOVx1NTg4OVx1NTg3Y1x1NTg5MFx1NTg5OFx1NTg4Nlx1NTg4MVx1NTg3Zlx1NTg3NFx1NTg4Ylx1NTg3YVx1NTg4N1x1NTg5MVx1NTg4ZVx1NTg3Nlx1NTg4Mlx1NTg4OFx1NTg3Ylx1NTg5NFx1NTg4Zlx1NThmZVx1'@;
put 'NTk2Ylx1NWFkY1x1NWFlZVx1NWFlNVx1NWFkNVx1NWFlYVx1NWFkYVx1NWFlZFx1NWFlYlx1NWFmM1x1NWFlMlx1NWFlMFx1NWFkYlx1NWFlY1x1NWFkZVx1NWFkZFx1NWFkOVx1NWFlOFx1NWFkZlx1NWI3N1x1NWJlMFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'NWJlM1x1NWM2M1x1NWQ4Mlx1NWQ4MFx1NWQ3ZFx1NWQ4Nlx1NWQ3YVx1NWQ4MVx1NWQ3N1x1NWQ4YVx1NWQ4OVx1NWQ4OFx1NWQ3ZVx1NWQ3Y1x1NWQ4ZFx1NWQ3OVx1NWQ3Zlx1NWU1OFx1NWU1OVx1NWU1M1x1NWVkOFx1NWVkMVx1NWVkN1x1NWVjZVx1NWVkY1x1NWVkNVx1NWVkOVx1NWVk'@;
put 'Mlx1NWVkNFx1NWY0NFx1NWY0M1x1NWY2Zlx1NWZiNlx1NjEyY1x1NjEyOFx1NjE0MVx1NjE1ZVx1NjE3MVx1NjE3M1x1NjE1Mlx1NjE1M1x1NjE3Mlx1NjE2Y1x1NjE4MFx1NjE3NFx1NjE1NFx1NjE3YVx1NjE1Ylx1NjE2NVx1NjEzYlx1NjE2YVx1NjE2MVx1NjE1Nlx1NjIyOVx1NjIyN1x1'@;
put 'NjIyYlx1NjQyYlx1NjQ0ZFx1NjQ1Ylx1NjQ1ZFx1NjQ3NFx1NjQ3Nlx1NjQ3Mlx1NjQ3M1x1NjQ3ZFx1NjQ3NVx1NjQ2Nlx1NjRhNlx1NjQ0ZVx1NjQ4Mlx1NjQ1ZVx1NjQ1Y1x1NjQ0Ylx1NjQ1M1x1NjQ2MFx1NjQ1MFx1NjQ3Zlx1NjQzZlx1NjQ2Y1x1NjQ2Ylx1NjQ1OVx1NjQ2NVx1NjQ3'@;
put 'N1x1NjU3M1x1NjVhMFx1NjZhMVx1NjZhMFx1NjY5Zlx1NjcwNVx1NjcwNFx1NjcyMlx1NjliMVx1NjliNlx1NjljOVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIyNV0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjI1XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIyNV1bZ11dPTU3NjAwK2cs'@;
put 'eVs1NzYwMCtnXT1fWzIyNV1bZ10pO2ZvcihfWzIyNl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjlhMFx1NjljZVx1Njk5Nlx1NjliMFx1NjlhY1x1NjliY1x1Njk5MVx1Njk5OVx1Njk4ZVx1NjlhN1x1Njk4ZFx1NjlhOVx1Njli'@;
put 'ZVx1NjlhZlx1NjliZlx1NjljNFx1NjliZFx1NjlhNFx1NjlkNFx1NjliOVx1NjljYVx1Njk5YVx1NjljZlx1NjliM1x1Njk5M1x1NjlhYVx1NjlhMVx1Njk5ZVx1NjlkOVx1Njk5N1x1Njk5MFx1NjljMlx1NjliNVx1NjlhNVx1NjljNlx1NmI0YVx1NmI0ZFx1NmI0Ylx1NmI5ZVx1NmI5Zlx1'@;
put 'NmJhMFx1NmJjM1x1NmJjNFx1NmJmZVx1NmVjZVx1NmVmNVx1NmVmMVx1NmYwM1x1NmYyNVx1NmVmOFx1NmYzN1x1NmVmYlx1NmYyZVx1NmYwOVx1NmY0ZVx1NmYxOVx1NmYxYVx1NmYyN1x1NmYxOFx1NmYzYlx1NmYxMlx1NmVlZFx1NmYwYVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1NmYzNlx1NmY3M1x1NmVmOVx1NmVlZVx1NmYyZFx1NmY0MFx1NmYzMFx1NmYzY1x1NmYzNVx1NmVlYlx1NmYwN1x1NmYwZVx1NmY0M1x1NmYwNVx1NmVmZFx1NmVmNlx1NmYzOVx1NmYxY1x1NmVmY1x1NmYzYVx1NmYxZlx1NmYwZFx1NmYxZVx1NmYwOFx1NmYyMVx1NzE4'@;
put 'N1x1NzE5MFx1NzE4OVx1NzE4MFx1NzE4NVx1NzE4Mlx1NzE4Zlx1NzE3Ylx1NzE4Nlx1NzE4MVx1NzE5N1x1NzI0NFx1NzI1M1x1NzI5N1x1NzI5NVx1NzI5M1x1NzM0M1x1NzM0ZFx1NzM1MVx1NzM0Y1x1NzQ2Mlx1NzQ3M1x1NzQ3MVx1NzQ3NVx1NzQ3Mlx1NzQ2N1x1NzQ2ZVx1NzUwMFx1'@;
put 'NzUwMlx1NzUwM1x1NzU3ZFx1NzU5MFx1NzYxNlx1NzYwOFx1NzYwY1x1NzYxNVx1NzYxMVx1NzYwYVx1NzYxNFx1NzZiOFx1Nzc4MVx1Nzc3Y1x1Nzc4NVx1Nzc4Mlx1Nzc2ZVx1Nzc4MFx1Nzc2Zlx1Nzc3ZVx1Nzc4M1x1NzhiMlx1NzhhYVx1NzhiNFx1NzhhZFx1NzhhOFx1Nzg3ZVx1Nzhh'@;
put 'Ylx1Nzg5ZVx1NzhhNVx1NzhhMFx1NzhhY1x1NzhhMlx1NzhhNFx1Nzk5OFx1Nzk4YVx1Nzk4Ylx1Nzk5Nlx1Nzk5NVx1Nzk5NFx1Nzk5M1x1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIyNl0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjI2XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIyNl1b'@;
put 'Z11dPTU3ODU2K2cseVs1Nzg1NitnXT1fWzIyNl1bZ10pO2ZvcihfWzIyN109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Nzk5N1x1Nzk4OFx1Nzk5Mlx1Nzk5MFx1N2EyYlx1N2E0YVx1N2EzMFx1N2EyZlx1N2EyOFx1N2EyNlx1N2Fh'@;
put 'OFx1N2FhYlx1N2FhY1x1N2FlZVx1N2I4OFx1N2I5Y1x1N2I4YVx1N2I5MVx1N2I5MFx1N2I5Nlx1N2I4ZFx1N2I4Y1x1N2I5Ylx1N2I4ZVx1N2I4NVx1N2I5OFx1NTI4NFx1N2I5OVx1N2JhNFx1N2I4Mlx1N2NiYlx1N2NiZlx1N2NiY1x1N2NiYVx1N2RhN1x1N2RiN1x1N2RjMlx1N2RhM1x1'@;
put 'N2RhYVx1N2RjMVx1N2RjMFx1N2RjNVx1N2Q5ZFx1N2RjZVx1N2RjNFx1N2RjNlx1N2RjYlx1N2RjY1x1N2RhZlx1N2RiOVx1N2Q5Nlx1N2RiY1x1N2Q5Zlx1N2RhNlx1N2RhZVx1N2RhOVx1N2RhMVx1N2RjOVx1N2Y3M1x1N2ZlMlx1N2ZlM1x1N2ZlNVx1N2ZkZVx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODAyNFx1ODA1ZFx1ODA1Y1x1ODE4OVx1ODE4Nlx1ODE4M1x1ODE4N1x1ODE4ZFx1ODE4Y1x1ODE4Ylx1ODIxNVx1ODQ5N1x1ODRhNFx1ODRhMVx1ODQ5Zlx1ODRiYVx1ODRjZVx1ODRjMlx1ODRhY1x1ODRhZVx1ODRhYlx1ODRiOVx1ODRiNFx1ODRj'@;
put 'MVx1ODRjZFx1ODRhYVx1ODQ5YVx1ODRiMVx1ODRkMFx1ODQ5ZFx1ODRhN1x1ODRiYlx1ODRhMlx1ODQ5NFx1ODRjN1x1ODRjY1x1ODQ5Ylx1ODRhOVx1ODRhZlx1ODRhOFx1ODRkNlx1ODQ5OFx1ODRiNlx1ODRjZlx1ODRhMFx1ODRkN1x1ODRkNFx1ODRkMlx1ODRkYlx1ODRiMFx1ODQ5MVx1'@;
put 'ODY2MVx1ODczM1x1ODcyM1x1ODcyOFx1ODc2Ylx1ODc0MFx1ODcyZVx1ODcxZVx1ODcyMVx1ODcxOVx1ODcxYlx1ODc0M1x1ODcyY1x1ODc0MVx1ODczZVx1ODc0Nlx1ODcyMFx1ODczMlx1ODcyYVx1ODcyZFx1ODczY1x1ODcxMlx1ODczYVx1ODczMVx1ODczNVx1ODc0Mlx1ODcyNlx1ODcy'@;
put 'N1x1ODczOFx1ODcyNFx1ODcxYVx1ODczMFx1ODcxMVx1ODhmN1x1ODhlN1x1ODhmMVx1ODhmMlx1ODhmYVx1ODhmZVx1ODhlZVx1ODhmY1x1ODhmNlx1ODhmYlx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIyN10ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjI3XVtnXS5jaGFyQ29kZUF0KDAp'@;
put 'JiYoSVtfWzIyN11bZ11dPTU4MTEyK2cseVs1ODExMitnXT1fWzIyN11bZ10pO2ZvcihfWzIyOF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODhmMFx1ODhlY1x1ODhlYlx1ODk5ZFx1ODlhMVx1ODk5Zlx1ODk5ZVx1ODllOVx1ODll'@;
put 'Ylx1ODllOFx1OGFhYlx1OGE5OVx1OGE4Ylx1OGE5Mlx1OGE4Zlx1OGE5Nlx1OGMzZFx1OGM2OFx1OGM2OVx1OGNkNVx1OGNjZlx1OGNkN1x1OGQ5Nlx1OGUwOVx1OGUwMlx1OGRmZlx1OGUwZFx1OGRmZFx1OGUwYVx1OGUwM1x1OGUwN1x1OGUwNlx1OGUwNVx1OGRmZVx1OGUwMFx1OGUwNFx1'@;
put 'OGYxMFx1OGYxMVx1OGYwZVx1OGYwZFx1OTEyM1x1OTExY1x1OTEyMFx1OTEyMlx1OTExZlx1OTExZFx1OTExYVx1OTEyNFx1OTEyMVx1OTExYlx1OTE3YVx1OTE3Mlx1OTE3OVx1OTE3M1x1OTJhNVx1OTJhNFx1OTI3Nlx1OTI5Ylx1OTI3YVx1OTJhMFx1OTI5NFx1OTJhYVx1OTI4ZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTJhNlx1OTI5YVx1OTJhYlx1OTI3OVx1OTI5N1x1OTI3Zlx1OTJhM1x1OTJlZVx1OTI4ZVx1OTI4Mlx1OTI5NVx1OTJhMlx1OTI3ZFx1OTI4OFx1OTJhMVx1OTI4YVx1OTI4Nlx1OTI4Y1x1OTI5OVx1OTJhN1x1OTI3ZVx1OTI4'@;
put 'N1x1OTJhOVx1OTI5ZFx1OTI4Ylx1OTIyZFx1OTY5ZVx1OTZhMVx1OTZmZlx1OTc1OFx1OTc3ZFx1OTc3YVx1OTc3ZVx1OTc4M1x1OTc4MFx1OTc4Mlx1OTc3Ylx1OTc4NFx1OTc4MVx1OTc3Zlx1OTdjZVx1OTdjZFx1OTgxNlx1OThhZFx1OThhZVx1OTkwMlx1OTkwMFx1OTkwN1x1OTk5ZFx1'@;
put 'OTk5Y1x1OTljM1x1OTliOVx1OTliYlx1OTliYVx1OTljMlx1OTliZFx1OTljN1x1OWFiMVx1OWFlM1x1OWFlN1x1OWIzZVx1OWIzZlx1OWI2MFx1OWI2MVx1OWI1Zlx1OWNmMVx1OWNmMlx1OWNmNVx1OWVhN1x1NTBmZlx1NTEwM1x1NTEzMFx1NTBmOFx1NTEwNlx1NTEwN1x1NTBmNlx1NTBm'@;
put 'ZVx1NTEwYlx1NTEwY1x1NTBmZFx1NTEwYVx1NTI4Ylx1NTI4Y1x1NTJmMVx1NTJlZlx1NTY0OFx1NTY0Mlx1NTY0Y1x1NTYzNVx1NTY0MVx1NTY0YVx1NTY0OVx1NTY0Nlx1NTY1OFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIyOF0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjI4XVtnXS5j'@;
put 'aGFyQ29kZUF0KDApJiYoSVtfWzIyOF1bZ11dPTU4MzY4K2cseVs1ODM2OCtnXT1fWzIyOF1bZ10pO2ZvcihfWzIyOV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTY1YVx1NTY0MFx1NTYzM1x1NTYzZFx1NTYyY1x1NTYzZVx1NTYz'@;
put 'OFx1NTYyYVx1NTYzYVx1NTcxYVx1NThhYlx1NTg5ZFx1NThiMVx1NThhMFx1NThhM1x1NThhZlx1NThhY1x1NThhNVx1NThhMVx1NThmZlx1NWFmZlx1NWFmNFx1NWFmZFx1NWFmN1x1NWFmNlx1NWIwM1x1NWFmOFx1NWIwMlx1NWFmOVx1NWIwMVx1NWIwN1x1NWIwNVx1NWIwZlx1NWM2N1x1'@;
put 'NWQ5OVx1NWQ5N1x1NWQ5Zlx1NWQ5Mlx1NWRhMlx1NWQ5M1x1NWQ5NVx1NWRhMFx1NWQ5Y1x1NWRhMVx1NWQ5YVx1NWQ5ZVx1NWU2OVx1NWU1ZFx1NWU2MFx1NWU1Y1x1N2RmM1x1NWVkYlx1NWVkZVx1NWVlMVx1NWY0OVx1NWZiMlx1NjE4Ylx1NjE4M1x1NjE3OVx1NjFiMVx1NjFiMFx1NjFh'@;
put 'Mlx1NjE4OVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjE5Ylx1NjE5M1x1NjFhZlx1NjFhZFx1NjE5Zlx1NjE5Mlx1NjFhYVx1NjFhMVx1NjE4ZFx1NjE2Nlx1NjFiM1x1NjIyZFx1NjQ2ZVx1NjQ3MFx1NjQ5Nlx1NjRhMFx1NjQ4NVx1NjQ5N1x1NjQ5Y1x1NjQ4'@;
put 'Zlx1NjQ4Ylx1NjQ4YVx1NjQ4Y1x1NjRhM1x1NjQ5Zlx1NjQ2OFx1NjRiMVx1NjQ5OFx1NjU3Nlx1NjU3YVx1NjU3OVx1NjU3Ylx1NjViMlx1NjViM1x1NjZiNVx1NjZiMFx1NjZhOVx1NjZiMlx1NjZiN1x1NjZhYVx1NjZhZlx1NmEwMFx1NmEwNlx1NmExN1x1NjllNVx1NjlmOFx1NmExNVx1'@;
put 'NjlmMVx1NjllNFx1NmEyMFx1NjlmZlx1NjllY1x1NjllMlx1NmExYlx1NmExZFx1NjlmZVx1NmEyN1x1NjlmMlx1NjllZVx1NmExNFx1NjlmN1x1NjllN1x1NmE0MFx1NmEwOFx1NjllNlx1NjlmYlx1NmEwZFx1NjlmY1x1NjllYlx1NmEwOVx1NmEwNFx1NmExOFx1NmEyNVx1NmEwZlx1Njlm'@;
put 'Nlx1NmEyNlx1NmEwN1x1NjlmNFx1NmExNlx1NmI1MVx1NmJhNVx1NmJhM1x1NmJhMlx1NmJhNlx1NmMwMVx1NmMwMFx1NmJmZlx1NmMwMlx1NmY0MVx1NmYyNlx1NmY3ZVx1NmY4N1x1NmZjNlx1NmY5Mlx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIyOV0ubGVuZ3RoOysrZyk2NTUzMyE9'@;
put 'PV9bMjI5XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIyOV1bZ11dPTU4NjI0K2cseVs1ODYyNCtnXT1fWzIyOV1bZ10pO2ZvcihfWzIzMF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmY4ZFx1NmY4OVx1NmY4Y1x1NmY2Mlx1NmY0'@;
put 'Zlx1NmY4NVx1NmY1YVx1NmY5Nlx1NmY3Nlx1NmY2Y1x1NmY4Mlx1NmY1NVx1NmY3Mlx1NmY1Mlx1NmY1MFx1NmY1N1x1NmY5NFx1NmY5M1x1NmY1ZFx1NmYwMFx1NmY2MVx1NmY2Ylx1NmY3ZFx1NmY2N1x1NmY5MFx1NmY1M1x1NmY4Ylx1NmY2OVx1NmY3Zlx1NmY5NVx1NmY2M1x1NmY3N1x1'@;
put 'NmY2YVx1NmY3Ylx1NzFiMlx1NzFhZlx1NzE5Ylx1NzFiMFx1NzFhMFx1NzE5YVx1NzFhOVx1NzFiNVx1NzE5ZFx1NzFhNVx1NzE5ZVx1NzFhNFx1NzFhMVx1NzFhYVx1NzE5Y1x1NzFhN1x1NzFiM1x1NzI5OFx1NzI5YVx1NzM1OFx1NzM1Mlx1NzM1ZVx1NzM1Zlx1NzM2MFx1NzM1ZFx1NzM1'@;
put 'Ylx1NzM2MVx1NzM1YVx1NzM1OVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzM2Mlx1NzQ4N1x1NzQ4OVx1NzQ4YVx1NzQ4Nlx1NzQ4MVx1NzQ3ZFx1NzQ4NVx1NzQ4OFx1NzQ3Y1x1NzQ3OVx1NzUwOFx1NzUwN1x1NzU3ZVx1NzYyNVx1NzYxZVx1NzYxOVx1NzYx'@;
put 'ZFx1NzYxY1x1NzYyM1x1NzYxYVx1NzYyOFx1NzYxYlx1NzY5Y1x1NzY5ZFx1NzY5ZVx1NzY5Ylx1Nzc4ZFx1Nzc4Zlx1Nzc4OVx1Nzc4OFx1NzhjZFx1NzhiYlx1NzhjZlx1NzhjY1x1NzhkMVx1NzhjZVx1NzhkNFx1NzhjOFx1NzhjM1x1NzhjNFx1NzhjOVx1Nzk5YVx1NzlhMVx1NzlhMFx1'@;
put 'Nzk5Y1x1NzlhMlx1Nzk5Ylx1NmI3Nlx1N2EzOVx1N2FiMlx1N2FiNFx1N2FiM1x1N2JiN1x1N2JjYlx1N2JiZVx1N2JhY1x1N2JjZVx1N2JhZlx1N2JiOVx1N2JjYVx1N2JiNVx1N2NjNVx1N2NjOFx1N2NjY1x1N2NjYlx1N2RmN1x1N2RkYlx1N2RlYVx1N2RlN1x1N2RkN1x1N2RlMVx1N2Uw'@;
put 'M1x1N2RmYVx1N2RlNlx1N2RmNlx1N2RmMVx1N2RmMFx1N2RlZVx1N2RkZlx1N2Y3Nlx1N2ZhY1x1N2ZiMFx1N2ZhZFx1N2ZlZFx1N2ZlYlx1N2ZlYVx1N2ZlY1x1N2ZlNlx1N2ZlOFx1ODA2NFx1ODA2N1x1ODFhM1x1ODE5Zlx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIzMF0ubGVuZ3Ro'@;
put 'OysrZyk2NTUzMyE9PV9bMjMwXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIzMF1bZ11dPTU4ODgwK2cseVs1ODg4MCtnXT1fWzIzMF1bZ10pO2ZvcihfWzIzMV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODE5ZVx1ODE5NVx1ODFh'@;
put 'Mlx1ODE5OVx1ODE5N1x1ODIxNlx1ODI0Zlx1ODI1M1x1ODI1Mlx1ODI1MFx1ODI0ZVx1ODI1MVx1ODUyNFx1ODUzYlx1ODUwZlx1ODUwMFx1ODUyOVx1ODUwZVx1ODUwOVx1ODUwZFx1ODUxZlx1ODUwYVx1ODUyN1x1ODUxY1x1ODRmYlx1ODUyYlx1ODRmYVx1ODUwOFx1ODUwY1x1ODRmNFx1'@;
put 'ODUyYVx1ODRmMlx1ODUxNVx1ODRmN1x1ODRlYlx1ODRmM1x1ODRmY1x1ODUxMlx1ODRlYVx1ODRlOVx1ODUxNlx1ODRmZVx1ODUyOFx1ODUxZFx1ODUyZVx1ODUwMlx1ODRmZFx1ODUxZVx1ODRmNlx1ODUzMVx1ODUyNlx1ODRlN1x1ODRlOFx1ODRmMFx1ODRlZlx1ODRmOVx1ODUxOFx1ODUy'@;
put 'MFx1ODUzMFx1ODUwYlx1ODUxOVx1ODUyZlx1ODY2Mlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODc1Nlx1ODc2M1x1ODc2NFx1ODc3N1x1ODdlMVx1ODc3M1x1ODc1OFx1ODc1NFx1ODc1Ylx1ODc1Mlx1ODc2MVx1ODc1YVx1ODc1MVx1ODc1ZVx1ODc2ZFx1ODc2'@;
put 'YVx1ODc1MFx1ODc0ZVx1ODc1Zlx1ODc1ZFx1ODc2Zlx1ODc2Y1x1ODc3YVx1ODc2ZVx1ODc1Y1x1ODc2NVx1ODc0Zlx1ODc3Ylx1ODc3NVx1ODc2Mlx1ODc2N1x1ODc2OVx1ODg1YVx1ODkwNVx1ODkwY1x1ODkxNFx1ODkwYlx1ODkxN1x1ODkxOFx1ODkxOVx1ODkwNlx1ODkxNlx1ODkxMVx1'@;
put 'ODkwZVx1ODkwOVx1ODlhMlx1ODlhNFx1ODlhM1x1ODllZFx1ODlmMFx1ODllY1x1OGFjZlx1OGFjNlx1OGFiOFx1OGFkM1x1OGFkMVx1OGFkNFx1OGFkNVx1OGFiYlx1OGFkN1x1OGFiZVx1OGFjMFx1OGFjNVx1OGFkOFx1OGFjM1x1OGFiYVx1OGFiZFx1OGFkOVx1OGMzZVx1OGM0ZFx1OGM4'@;
put 'Zlx1OGNlNVx1OGNkZlx1OGNkOVx1OGNlOFx1OGNkYVx1OGNkZFx1OGNlN1x1OGRhMFx1OGQ5Y1x1OGRhMVx1OGQ5Ylx1OGUyMFx1OGUyM1x1OGUyNVx1OGUyNFx1OGUyZVx1OGUxNVx1OGUxYlx1OGUxNlx1OGUxMVx1OGUxOVx1OGUyNlx1OGUyN1x1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1f'@;
put 'WzIzMV0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjMxXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIzMV1bZ11dPTU5MTM2K2cseVs1OTEzNitnXT1fWzIzMV1bZ10pO2ZvcihfWzIzMl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGUx'@;
put 'NFx1OGUxMlx1OGUxOFx1OGUxM1x1OGUxY1x1OGUxN1x1OGUxYVx1OGYyY1x1OGYyNFx1OGYxOFx1OGYxYVx1OGYyMFx1OGYyM1x1OGYxNlx1OGYxN1x1OTA3M1x1OTA3MFx1OTA2Zlx1OTA2N1x1OTA2Ylx1OTEyZlx1OTEyYlx1OTEyOVx1OTEyYVx1OTEzMlx1OTEyNlx1OTEyZVx1OTE4NVx1'@;
put 'OTE4Nlx1OTE4YVx1OTE4MVx1OTE4Mlx1OTE4NFx1OTE4MFx1OTJkMFx1OTJjM1x1OTJjNFx1OTJjMFx1OTJkOVx1OTJiNlx1OTJjZlx1OTJmMVx1OTJkZlx1OTJkOFx1OTJlOVx1OTJkN1x1OTJkZFx1OTJjY1x1OTJlZlx1OTJjMlx1OTJlOFx1OTJjYVx1OTJjOFx1OTJjZVx1OTJlNlx1OTJj'@;
put 'ZFx1OTJkNVx1OTJjOVx1OTJlMFx1OTJkZVx1OTJlN1x1OTJkMVx1OTJkM1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTJiNVx1OTJlMVx1OTJjNlx1OTJiNFx1OTU3Y1x1OTVhY1x1OTVhYlx1OTVhZVx1OTViMFx1OTZhNFx1OTZhMlx1OTZkM1x1OTcwNVx1OTcw'@;
put 'OFx1OTcwMlx1OTc1YVx1OTc4YVx1OTc4ZVx1OTc4OFx1OTdkMFx1OTdjZlx1OTgxZVx1OTgxZFx1OTgyNlx1OTgyOVx1OTgyOFx1OTgyMFx1OTgxYlx1OTgyN1x1OThiMlx1OTkwOFx1OThmYVx1OTkxMVx1OTkxNFx1OTkxNlx1OTkxN1x1OTkxNVx1OTlkY1x1OTljZFx1OTljZlx1OTlkM1x1'@;
put 'OTlkNFx1OTljZVx1OTljOVx1OTlkNlx1OTlkOFx1OTljYlx1OTlkN1x1OTljY1x1OWFiM1x1OWFlY1x1OWFlYlx1OWFmM1x1OWFmMlx1OWFmMVx1OWI0Nlx1OWI0M1x1OWI2N1x1OWI3NFx1OWI3MVx1OWI2Nlx1OWI3Nlx1OWI3NVx1OWI3MFx1OWI2OFx1OWI2NFx1OWI2Y1x1OWNmY1x1OWNm'@;
put 'YVx1OWNmZFx1OWNmZlx1OWNmN1x1OWQwN1x1OWQwMFx1OWNmOVx1OWNmYlx1OWQwOFx1OWQwNVx1OWQwNFx1OWU4M1x1OWVkM1x1OWYwZlx1OWYxMFx1NTExY1x1NTExM1x1NTExN1x1NTExYVx1NTExMVx1NTFkZVx1NTMzNFx1NTNlMVx1NTY3MFx1NTY2MFx1NTY2ZVx1ZmZmZCIuc3BsaXQo'@;
put 'IiIpLGc9MDtnIT1fWzIzMl0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjMyXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIzMl1bZ11dPTU5MzkyK2cseVs1OTM5MitnXT1fWzIzMl1bZ10pO2ZvcihfWzIzM109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1NTY3M1x1NTY2Nlx1NTY2M1x1NTY2ZFx1NTY3Mlx1NTY1ZVx1NTY3N1x1NTcxY1x1NTcxYlx1NThjOFx1NThiZFx1NThjOVx1NThiZlx1NThiYVx1NThjMlx1NThiY1x1NThjNlx1NWIxN1x1NWIxOVx1NWIxYlx1NWIyMVx1NWIxNFx1NWIxM1x1NWIxMFx1NWIxNlx1NWIyOFx1'@;
put 'NWIxYVx1NWIyMFx1NWIxZVx1NWJlZlx1NWRhY1x1NWRiMVx1NWRhOVx1NWRhN1x1NWRiNVx1NWRiMFx1NWRhZVx1NWRhYVx1NWRhOFx1NWRiMlx1NWRhZFx1NWRhZlx1NWRiNFx1NWU2N1x1NWU2OFx1NWU2Nlx1NWU2Zlx1NWVlOVx1NWVlN1x1NWVlNlx1NWVlOFx1NWVlNVx1NWY0Ylx1NWZi'@;
put 'Y1x1NjE5ZFx1NjFhOFx1NjE5Nlx1NjFjNVx1NjFiNFx1NjFjNlx1NjFjMVx1NjFjY1x1NjFiYVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjFiZlx1NjFiOFx1NjE4Y1x1NjRkN1x1NjRkNlx1NjRkMFx1NjRjZlx1NjRjOVx1NjRiZFx1NjQ4OVx1NjRjM1x1NjRk'@;
put 'Ylx1NjRmM1x1NjRkOVx1NjUzM1x1NjU3Zlx1NjU3Y1x1NjVhMlx1NjZjOFx1NjZiZVx1NjZjMFx1NjZjYVx1NjZjYlx1NjZjZlx1NjZiZFx1NjZiYlx1NjZiYVx1NjZjY1x1NjcyM1x1NmEzNFx1NmE2Nlx1NmE0OVx1NmE2N1x1NmEzMlx1NmE2OFx1NmEzZVx1NmE1ZFx1NmE2ZFx1NmE3Nlx1'@;
put 'NmE1Ylx1NmE1MVx1NmEyOFx1NmE1YVx1NmEzYlx1NmEzZlx1NmE0MVx1NmE2YVx1NmE2NFx1NmE1MFx1NmE0Zlx1NmE1NFx1NmE2Zlx1NmE2OVx1NmE2MFx1NmEzY1x1NmE1ZVx1NmE1Nlx1NmE1NVx1NmE0ZFx1NmE0ZVx1NmE0Nlx1NmI1NVx1NmI1NFx1NmI1Nlx1NmJhN1x1NmJhYVx1NmJh'@;
put 'Ylx1NmJjOFx1NmJjN1x1NmMwNFx1NmMwM1x1NmMwNlx1NmZhZFx1NmZjYlx1NmZhM1x1NmZjN1x1NmZiY1x1NmZjZVx1NmZjOFx1NmY1ZVx1NmZjNFx1NmZiZFx1NmY5ZVx1NmZjYVx1NmZhOFx1NzAwNFx1NmZhNVx1NmZhZVx1NmZiYVx1NmZhY1x1NmZhYVx1NmZjZlx1NmZiZlx1NmZiOFx1'@;
put 'ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIzM10ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjMzXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIzM11bZ11dPTU5NjQ4K2cseVs1OTY0OCtnXT1fWzIzM11bZ10pO2ZvcihfWzIzNF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmZhMlx1NmZjOVx1NmZhYlx1NmZjZFx1NmZhZlx1NmZiMlx1NmZiMFx1NzFjNVx1NzFjMlx1NzFiZlx1NzFiOFx1NzFkNlx1NzFjMFx1NzFjMVx1NzFjYlx1NzFkNFx1NzFjYVx1NzFjN1x1NzFjZlx1NzFiZFx1NzFkOFx1NzFiY1x1NzFjNlx1NzFkYVx1'@;
put 'NzFkYlx1NzI5ZFx1NzI5ZVx1NzM2OVx1NzM2Nlx1NzM2N1x1NzM2Y1x1NzM2NVx1NzM2Ylx1NzM2YVx1NzQ3Zlx1NzQ5YVx1NzRhMFx1NzQ5NFx1NzQ5Mlx1NzQ5NVx1NzRhMVx1NzUwYlx1NzU4MFx1NzYyZlx1NzYyZFx1NzYzMVx1NzYzZFx1NzYzM1x1NzYzY1x1NzYzNVx1NzYzMlx1NzYz'@;
put 'MFx1NzZiYlx1NzZlNlx1Nzc5YVx1Nzc5ZFx1NzdhMVx1Nzc5Y1x1Nzc5Ylx1NzdhMlx1NzdhM1x1Nzc5NVx1Nzc5OVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Nzc5N1x1NzhkZFx1NzhlOVx1NzhlNVx1NzhlYVx1NzhkZVx1NzhlM1x1NzhkYlx1NzhlMVx1Nzhl'@;
put 'Mlx1NzhlZFx1NzhkZlx1NzhlMFx1NzlhNFx1N2E0NFx1N2E0OFx1N2E0N1x1N2FiNlx1N2FiOFx1N2FiNVx1N2FiMVx1N2FiN1x1N2JkZVx1N2JlM1x1N2JlN1x1N2JkZFx1N2JkNVx1N2JlNVx1N2JkYVx1N2JlOFx1N2JmOVx1N2JkNFx1N2JlYVx1N2JlMlx1N2JkY1x1N2JlYlx1N2JkOFx1'@;
put 'N2JkZlx1N2NkMlx1N2NkNFx1N2NkN1x1N2NkMFx1N2NkMVx1N2UxMlx1N2UyMVx1N2UxN1x1N2UwY1x1N2UxZlx1N2UyMFx1N2UxM1x1N2UwZVx1N2UxY1x1N2UxNVx1N2UxYVx1N2UyMlx1N2UwYlx1N2UwZlx1N2UxNlx1N2UwZFx1N2UxNFx1N2UyNVx1N2UyNFx1N2Y0M1x1N2Y3Ylx1N2Y3'@;
put 'Y1x1N2Y3YVx1N2ZiMVx1N2ZlZlx1ODAyYVx1ODAyOVx1ODA2Y1x1ODFiMVx1ODFhNlx1ODFhZVx1ODFiOVx1ODFiNVx1ODFhYlx1ODFiMFx1ODFhY1x1ODFiNFx1ODFiMlx1ODFiN1x1ODFhN1x1ODFmMlx1ODI1NVx1ODI1Nlx1ODI1N1x1ODU1Nlx1ODU0NVx1ODU2Ylx1ODU0ZFx1ODU1M1x1'@;
put 'ODU2MVx1ODU1OFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIzNF0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjM0XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIzNF1bZ11dPTU5OTA0K2cseVs1OTkwNCtnXT1fWzIzNF1bZ10pO2ZvcihfWzIzNV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODU0MFx1ODU0Nlx1ODU2NFx1ODU0MVx1ODU2Mlx1ODU0NFx1ODU1MVx1ODU0N1x1ODU2M1x1ODUzZVx1ODU1Ylx1ODU3MVx1ODU0ZVx1ODU2ZVx1ODU3NVx1ODU1NVx1ODU2N1x1ODU2MFx1ODU4Y1x1ODU2Nlx1ODU1ZFx1ODU1NFx1'@;
put 'ODU2NVx1ODU2Y1x1ODY2M1x1ODY2NVx1ODY2NFx1ODc5Ylx1ODc4Zlx1ODc5N1x1ODc5M1x1ODc5Mlx1ODc4OFx1ODc4MVx1ODc5Nlx1ODc5OFx1ODc3OVx1ODc4N1x1ODdhM1x1ODc4NVx1ODc5MFx1ODc5MVx1ODc5ZFx1ODc4NFx1ODc5NFx1ODc5Y1x1ODc5YVx1ODc4OVx1ODkxZVx1ODky'@;
put 'Nlx1ODkzMFx1ODkyZFx1ODkyZVx1ODkyN1x1ODkzMVx1ODkyMlx1ODkyOVx1ODkyM1x1ODkyZlx1ODkyY1x1ODkxZlx1ODlmMVx1OGFlMFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGFlMlx1OGFmMlx1OGFmNFx1OGFmNVx1OGFkZFx1OGIxNFx1OGFlNFx1OGFk'@;
put 'Zlx1OGFmMFx1OGFjOFx1OGFkZVx1OGFlMVx1OGFlOFx1OGFmZlx1OGFlZlx1OGFmYlx1OGM5MVx1OGM5Mlx1OGM5MFx1OGNmNVx1OGNlZVx1OGNmMVx1OGNmMFx1OGNmM1x1OGQ2Y1x1OGQ2ZVx1OGRhNVx1OGRhN1x1OGUzM1x1OGUzZVx1OGUzOFx1OGU0MFx1OGU0NVx1OGUzNlx1OGUzY1x1'@;
put 'OGUzZFx1OGU0MVx1OGUzMFx1OGUzZlx1OGViZFx1OGYzNlx1OGYyZVx1OGYzNVx1OGYzMlx1OGYzOVx1OGYzN1x1OGYzNFx1OTA3Nlx1OTA3OVx1OTA3Ylx1OTA4Nlx1OTBmYVx1OTEzM1x1OTEzNVx1OTEzNlx1OTE5M1x1OTE5MFx1OTE5MVx1OTE4ZFx1OTE4Zlx1OTMyN1x1OTMxZVx1OTMw'@;
put 'OFx1OTMxZlx1OTMwNlx1OTMwZlx1OTM3YVx1OTMzOFx1OTMzY1x1OTMxYlx1OTMyM1x1OTMxMlx1OTMwMVx1OTM0Nlx1OTMyZFx1OTMwZVx1OTMwZFx1OTJjYlx1OTMxZFx1OTJmYVx1OTMyNVx1OTMxM1x1OTJmOVx1OTJmN1x1OTMzNFx1OTMwMlx1OTMyNFx1OTJmZlx1OTMyOVx1OTMzOVx1'@;
put 'OTMzNVx1OTMyYVx1OTMxNFx1OTMwY1x1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIzNV0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjM1XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIzNV1bZ11dPTYwMTYwK2cseVs2MDE2MCtnXT1fWzIzNV1bZ10pO2ZvcihfWzIzNl09Ilx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTMwYlx1OTJmZVx1OTMwOVx1OTMwMFx1OTJmYlx1OTMxNlx1OTViY1x1OTVjZFx1OTViZVx1OTViOVx1OTViYVx1OTViNlx1OTViZlx1OTViNVx1OTViZFx1OTZhOVx1OTZkNFx1OTcwYlx1OTcxMlx1OTcxMFx1'@;
put 'OTc5OVx1OTc5N1x1OTc5NFx1OTdmMFx1OTdmOFx1OTgzNVx1OTgyZlx1OTgzMlx1OTkyNFx1OTkxZlx1OTkyN1x1OTkyOVx1OTk5ZVx1OTllZVx1OTllY1x1OTllNVx1OTllNFx1OTlmMFx1OTllM1x1OTllYVx1OTllOVx1OTllN1x1OWFiOVx1OWFiZlx1OWFiNFx1OWFiYlx1OWFmNlx1OWFm'@;
put 'YVx1OWFmOVx1OWFmN1x1OWIzM1x1OWI4MFx1OWI4NVx1OWI4N1x1OWI3Y1x1OWI3ZVx1OWI3Ylx1OWI4Mlx1OWI5M1x1OWI5Mlx1OWI5MFx1OWI3YVx1OWI5NVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OWI3ZFx1OWI4OFx1OWQyNVx1OWQxN1x1OWQyMFx1OWQx'@;
put 'ZVx1OWQxNFx1OWQyOVx1OWQxZFx1OWQxOFx1OWQyMlx1OWQxMFx1OWQxOVx1OWQxZlx1OWU4OFx1OWU4Nlx1OWU4N1x1OWVhZVx1OWVhZFx1OWVkNVx1OWVkNlx1OWVmYVx1OWYxMlx1OWYzZFx1NTEyNlx1NTEyNVx1NTEyMlx1NTEyNFx1NTEyMFx1NTEyOVx1NTJmNFx1NTY5M1x1NTY4Y1x1'@;
put 'NTY4ZFx1NTY4Nlx1NTY4NFx1NTY4M1x1NTY3ZVx1NTY4Mlx1NTY3Zlx1NTY4MVx1NThkNlx1NThkNFx1NThjZlx1NThkMlx1NWIyZFx1NWIyNVx1NWIzMlx1NWIyM1x1NWIyY1x1NWIyN1x1NWIyNlx1NWIyZlx1NWIyZVx1NWI3Ylx1NWJmMVx1NWJmMlx1NWRiN1x1NWU2Y1x1NWU2YVx1NWZi'@;
put 'ZVx1NWZiYlx1NjFjM1x1NjFiNVx1NjFiY1x1NjFlN1x1NjFlMFx1NjFlNVx1NjFlNFx1NjFlOFx1NjFkZVx1NjRlZlx1NjRlOVx1NjRlM1x1NjRlYlx1NjRlNFx1NjRlOFx1NjU4MVx1NjU4MFx1NjViNlx1NjVkYVx1NjZkMlx1NmE4ZFx1NmE5Nlx1NmE4MVx1NmFhNVx1NmE4OVx1NmE5Zlx1'@;
put 'NmE5Ylx1NmFhMVx1NmE5ZVx1NmE4N1x1NmE5M1x1NmE4ZVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIzNl0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjM2XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIzNl1bZ11dPTYwNDE2K2cseVs2MDQxNitnXT1fWzIzNl1bZ10pO2ZvcihfWzIzN109'@;
put 'Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmE5NVx1NmE4M1x1NmFhOFx1NmFhNFx1NmE5MVx1NmE3Zlx1NmFhNlx1NmE5YVx1NmE4NVx1NmE4Y1x1NmE5Mlx1NmI1Ylx1NmJhZFx1NmMwOVx1NmZjY1x1NmZhOVx1NmZmNFx1NmZkNFx1'@;
put 'NmZlM1x1NmZkY1x1NmZlZFx1NmZlN1x1NmZlNlx1NmZkZVx1NmZmMlx1NmZkZFx1NmZlMlx1NmZlOFx1NzFlMVx1NzFmMVx1NzFlOFx1NzFmMlx1NzFlNFx1NzFmMFx1NzFlMlx1NzM3M1x1NzM2ZVx1NzM2Zlx1NzQ5N1x1NzRiMlx1NzRhYlx1NzQ5MFx1NzRhYVx1NzRhZFx1NzRiMVx1NzRh'@;
put 'NVx1NzRhZlx1NzUxMFx1NzUxMVx1NzUxMlx1NzUwZlx1NzU4NFx1NzY0M1x1NzY0OFx1NzY0OVx1NzY0N1x1NzZhNFx1NzZlOVx1NzdiNVx1NzdhYlx1NzdiMlx1NzdiN1x1NzdiNlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzdiNFx1NzdiMVx1NzdhOFx1Nzdm'@;
put 'MFx1NzhmM1x1NzhmZFx1NzkwMlx1NzhmYlx1NzhmY1x1NzhmMlx1NzkwNVx1NzhmOVx1NzhmZVx1NzkwNFx1NzlhYlx1NzlhOFx1N2E1Y1x1N2E1Ylx1N2E1Nlx1N2E1OFx1N2E1NFx1N2E1YVx1N2FiZVx1N2FjMFx1N2FjMVx1N2MwNVx1N2MwZlx1N2JmMlx1N2MwMFx1N2JmZlx1N2JmYlx1'@;
put 'N2MwZVx1N2JmNFx1N2MwYlx1N2JmM1x1N2MwMlx1N2MwOVx1N2MwM1x1N2MwMVx1N2JmOFx1N2JmZFx1N2MwNlx1N2JmMFx1N2JmMVx1N2MxMFx1N2MwYVx1N2NlOFx1N2UyZFx1N2UzY1x1N2U0Mlx1N2UzM1x1OTg0OFx1N2UzOFx1N2UyYVx1N2U0OVx1N2U0MFx1N2U0N1x1N2UyOVx1N2U0'@;
put 'Y1x1N2UzMFx1N2UzYlx1N2UzNlx1N2U0NFx1N2UzYVx1N2Y0NVx1N2Y3Zlx1N2Y3ZVx1N2Y3ZFx1N2ZmNFx1N2ZmMlx1ODAyY1x1ODFiYlx1ODFjNFx1ODFjY1x1ODFjYVx1ODFjNVx1ODFjN1x1ODFiY1x1ODFlOVx1ODI1Ylx1ODI1YVx1ODI1Y1x1ODU4M1x1ODU4MFx1ODU4Zlx1ODVhN1x1'@;
put 'ODU5NVx1ODVhMFx1ODU4Ylx1ODVhM1x1ODU3Ylx1ODVhNFx1ODU5YVx1ODU5ZVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIzN10ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjM3XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIzN11bZ11dPTYwNjcyK2cseVs2MDY3MitnXT1fWzIzN11bZ10p'@;
put 'O2ZvcihfWzIzOF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODU3N1x1ODU3Y1x1ODU4OVx1ODVhMVx1ODU3YVx1ODU3OFx1ODU1N1x1ODU4ZVx1ODU5Nlx1ODU4Nlx1ODU4ZFx1ODU5OVx1ODU5ZFx1ODU4MVx1ODVhMlx1ODU4Mlx1'@;
put 'ODU4OFx1ODU4NVx1ODU3OVx1ODU3Nlx1ODU5OFx1ODU5MFx1ODU5Zlx1ODY2OFx1ODdiZVx1ODdhYVx1ODdhZFx1ODdjNVx1ODdiMFx1ODdhY1x1ODdiOVx1ODdiNVx1ODdiY1x1ODdhZVx1ODdjOVx1ODdjM1x1ODdjMlx1ODdjY1x1ODdiN1x1ODdhZlx1ODdjNFx1ODdjYVx1ODdiNFx1ODdi'@;
put 'Nlx1ODdiZlx1ODdiOFx1ODdiZFx1ODdkZVx1ODdiMlx1ODkzNVx1ODkzM1x1ODkzY1x1ODkzZVx1ODk0MVx1ODk1Mlx1ODkzN1x1ODk0Mlx1ODlhZFx1ODlhZlx1ODlhZVx1ODlmMlx1ODlmM1x1OGIxZVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGIxOFx1OGIx'@;
put 'Nlx1OGIxMVx1OGIwNVx1OGIwYlx1OGIyMlx1OGIwZlx1OGIxMlx1OGIxNVx1OGIwN1x1OGIwZFx1OGIwOFx1OGIwNlx1OGIxY1x1OGIxM1x1OGIxYVx1OGM0Zlx1OGM3MFx1OGM3Mlx1OGM3MVx1OGM2Zlx1OGM5NVx1OGM5NFx1OGNmOVx1OGQ2Zlx1OGU0ZVx1OGU0ZFx1OGU1M1x1OGU1MFx1'@;
put 'OGU0Y1x1OGU0N1x1OGY0M1x1OGY0MFx1OTA4NVx1OTA3ZVx1OTEzOFx1OTE5YVx1OTFhMlx1OTE5Ylx1OTE5OVx1OTE5Zlx1OTFhMVx1OTE5ZFx1OTFhMFx1OTNhMVx1OTM4M1x1OTNhZlx1OTM2NFx1OTM1Nlx1OTM0N1x1OTM3Y1x1OTM1OFx1OTM1Y1x1OTM3Nlx1OTM0OVx1OTM1MFx1OTM1'@;
put 'MVx1OTM2MFx1OTM2ZFx1OTM4Zlx1OTM0Y1x1OTM2YVx1OTM3OVx1OTM1N1x1OTM1NVx1OTM1Mlx1OTM0Zlx1OTM3MVx1OTM3N1x1OTM3Ylx1OTM2MVx1OTM1ZVx1OTM2M1x1OTM2N1x1OTM4MFx1OTM0ZVx1OTM1OVx1OTVjN1x1OTVjMFx1OTVjOVx1OTVjM1x1OTVjNVx1OTViN1x1OTZhZVx1'@;
put 'OTZiMFx1OTZhY1x1OTcyMFx1OTcxZlx1OTcxOFx1OTcxZFx1OTcxOVx1OTc5YVx1OTdhMVx1OTc5Y1x1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIzOF0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjM4XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIzOF1bZ11dPTYwOTI4K2cseVs2MDkyOCtn'@;
put 'XT1fWzIzOF1bZ10pO2ZvcihfWzIzOV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTc5ZVx1OTc5ZFx1OTdkNVx1OTdkNFx1OTdmMVx1OTg0MVx1OTg0NFx1OTg0YVx1OTg0OVx1OTg0NVx1OTg0M1x1OTkyNVx1OTkyYlx1OTkyY1x1'@;
put 'OTkyYVx1OTkzM1x1OTkzMlx1OTkyZlx1OTkyZFx1OTkzMVx1OTkzMFx1OTk5OFx1OTlhM1x1OTlhMVx1OWEwMlx1OTlmYVx1OTlmNFx1OTlmN1x1OTlmOVx1OTlmOFx1OTlmNlx1OTlmYlx1OTlmZFx1OTlmZVx1OTlmY1x1OWEwM1x1OWFiZVx1OWFmZVx1OWFmZFx1OWIwMVx1OWFmY1x1OWI0'@;
put 'OFx1OWI5YVx1OWJhOFx1OWI5ZVx1OWI5Ylx1OWJhNlx1OWJhMVx1OWJhNVx1OWJhNFx1OWI4Nlx1OWJhMlx1OWJhMFx1OWJhZlx1OWQzM1x1OWQ0MVx1OWQ2N1x1OWQzNlx1OWQyZVx1OWQyZlx1OWQzMVx1OWQzOFx1OWQzMFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1OWQ0NVx1OWQ0Mlx1OWQ0M1x1OWQzZVx1OWQzN1x1OWQ0MFx1OWQzZFx1N2ZmNVx1OWQyZFx1OWU4YVx1OWU4OVx1OWU4ZFx1OWViMFx1OWVjOFx1OWVkYVx1OWVmYlx1OWVmZlx1OWYyNFx1OWYyM1x1OWYyMlx1OWY1NFx1OWZhMFx1NTEzMVx1NTEyZFx1NTEyZVx1NTY5OFx1NTY5Y1x1'@;
put 'NTY5N1x1NTY5YVx1NTY5ZFx1NTY5OVx1NTk3MFx1NWIzY1x1NWM2OVx1NWM2YVx1NWRjMFx1NWU2ZFx1NWU2ZVx1NjFkOFx1NjFkZlx1NjFlZFx1NjFlZVx1NjFmMVx1NjFlYVx1NjFmMFx1NjFlYlx1NjFkNlx1NjFlOVx1NjRmZlx1NjUwNFx1NjRmZFx1NjRmOFx1NjUwMVx1NjUwM1x1NjRm'@;
put 'Y1x1NjU5NFx1NjVkYlx1NjZkYVx1NjZkYlx1NjZkOFx1NmFjNVx1NmFiOVx1NmFiZFx1NmFlMVx1NmFjNlx1NmFiYVx1NmFiNlx1NmFiN1x1NmFjN1x1NmFiNFx1NmFhZFx1NmI1ZVx1NmJjOVx1NmMwYlx1NzAwN1x1NzAwY1x1NzAwZFx1NzAwMVx1NzAwNVx1NzAxNFx1NzAwZVx1NmZmZlx1'@;
put 'NzAwMFx1NmZmYlx1NzAyNlx1NmZmY1x1NmZmN1x1NzAwYVx1NzIwMVx1NzFmZlx1NzFmOVx1NzIwM1x1NzFmZFx1NzM3Nlx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIzOV0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjM5XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIzOV1bZ11dPTYxMTg0'@;
put 'K2cseVs2MTE4NCtnXT1fWzIzOV1bZ10pO2ZvcihfWzI0MF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzRiOFx1NzRjMFx1NzRiNVx1NzRjMVx1NzRiZVx1NzRiNlx1NzRiYlx1NzRjMlx1NzUxNFx1NzUxM1x1NzY1Y1x1NzY2NFx1'@;
put 'NzY1OVx1NzY1MFx1NzY1M1x1NzY1N1x1NzY1YVx1NzZhNlx1NzZiZFx1NzZlY1x1NzdjMlx1NzdiYVx1NzhmZlx1NzkwY1x1NzkxM1x1NzkxNFx1NzkwOVx1NzkxMFx1NzkxMlx1NzkxMVx1NzlhZFx1NzlhY1x1N2E1Zlx1N2MxY1x1N2MyOVx1N2MxOVx1N2MyMFx1N2MxZlx1N2MyZFx1N2Mx'@;
put 'ZFx1N2MyNlx1N2MyOFx1N2MyMlx1N2MyNVx1N2MzMFx1N2U1Y1x1N2U1MFx1N2U1Nlx1N2U2M1x1N2U1OFx1N2U2Mlx1N2U1Zlx1N2U1MVx1N2U2MFx1N2U1N1x1N2U1M1x1N2ZiNVx1N2ZiM1x1N2ZmN1x1N2ZmOFx1ODA3NVx1ODFkMVx1ODFkMlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ODFkMFx1ODI1Zlx1ODI1ZVx1ODViNFx1ODVjNlx1ODVjMFx1ODVjM1x1ODVjMlx1ODViM1x1ODViNVx1ODViZFx1ODVjN1x1ODVjNFx1ODViZlx1ODVjYlx1ODVjZVx1ODVjOFx1ODVjNVx1ODViMVx1ODViNlx1ODVkMlx1ODYyNFx1ODViOFx1ODViN1x1ODViZVx1'@;
put 'ODY2OVx1ODdlN1x1ODdlNlx1ODdlMlx1ODdkYlx1ODdlYlx1ODdlYVx1ODdlNVx1ODdkZlx1ODdmM1x1ODdlNFx1ODdkNFx1ODdkY1x1ODdkM1x1ODdlZFx1ODdkOFx1ODdlM1x1ODdhNFx1ODdkN1x1ODdkOVx1ODgwMVx1ODdmNFx1ODdlOFx1ODdkZFx1ODk1M1x1ODk0Ylx1ODk0Zlx1ODk0'@;
put 'Y1x1ODk0Nlx1ODk1MFx1ODk1MVx1ODk0OVx1OGIyYVx1OGIyN1x1OGIyM1x1OGIzM1x1OGIzMFx1OGIzNVx1OGI0N1x1OGIyZlx1OGIzY1x1OGIzZVx1OGIzMVx1OGIyNVx1OGIzN1x1OGIyNlx1OGIzNlx1OGIyZVx1OGIyNFx1OGIzYlx1OGIzZFx1OGIzYVx1OGM0Mlx1OGM3NVx1OGM5OVx1'@;
put 'OGM5OFx1OGM5N1x1OGNmZVx1OGQwNFx1OGQwMlx1OGQwMFx1OGU1Y1x1OGU2Mlx1OGU2MFx1OGU1N1x1OGU1Nlx1OGU1ZVx1OGU2NVx1OGU2N1x1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzI0MF0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjQwXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzI0'@;
put 'MF1bZ11dPTYxNDQwK2cseVs2MTQ0MCtnXT1fWzI0MF1bZ10pO2ZvcihfWzI0MV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGU1Ylx1OGU1YVx1OGU2MVx1OGU1ZFx1OGU2OVx1OGU1NFx1OGY0Nlx1OGY0N1x1OGY0OFx1OGY0Ylx1'@;
put 'OTEyOFx1OTEzYVx1OTEzYlx1OTEzZVx1OTFhOFx1OTFhNVx1OTFhN1x1OTFhZlx1OTFhYVx1OTNiNVx1OTM4Y1x1OTM5Mlx1OTNiN1x1OTM5Ylx1OTM5ZFx1OTM4OVx1OTNhN1x1OTM4ZVx1OTNhYVx1OTM5ZVx1OTNhNlx1OTM5NVx1OTM4OFx1OTM5OVx1OTM5Zlx1OTM4ZFx1OTNiMVx1OTM5'@;
put 'MVx1OTNiMlx1OTNhNFx1OTNhOFx1OTNiNFx1OTNhM1x1OTNhNVx1OTVkMlx1OTVkM1x1OTVkMVx1OTZiM1x1OTZkN1x1OTZkYVx1NWRjMlx1OTZkZlx1OTZkOFx1OTZkZFx1OTcyM1x1OTcyMlx1OTcyNVx1OTdhY1x1OTdhZVx1OTdhOFx1OTdhYlx1OTdhNFx1OTdhYVx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTdhMlx1OTdhNVx1OTdkN1x1OTdkOVx1OTdkNlx1OTdkOFx1OTdmYVx1OTg1MFx1OTg1MVx1OTg1Mlx1OThiOFx1OTk0MVx1OTkzY1x1OTkzYVx1OWEwZlx1OWEwYlx1OWEwOVx1OWEwZFx1OWEwNFx1OWExMVx1OWEwYVx1OWEwNVx1OWEwN1x1'@;
put 'OWEwNlx1OWFjMFx1OWFkY1x1OWIwOFx1OWIwNFx1OWIwNVx1OWIyOVx1OWIzNVx1OWI0YVx1OWI0Y1x1OWI0Ylx1OWJjN1x1OWJjNlx1OWJjM1x1OWJiZlx1OWJjMVx1OWJiNVx1OWJiOFx1OWJkM1x1OWJiNlx1OWJjNFx1OWJiOVx1OWJiZFx1OWQ1Y1x1OWQ1M1x1OWQ0Zlx1OWQ0YVx1OWQ1'@;
put 'Ylx1OWQ0Ylx1OWQ1OVx1OWQ1Nlx1OWQ0Y1x1OWQ1N1x1OWQ1Mlx1OWQ1NFx1OWQ1Zlx1OWQ1OFx1OWQ1YVx1OWU4ZVx1OWU4Y1x1OWVkZlx1OWYwMVx1OWYwMFx1OWYxNlx1OWYyNVx1OWYyYlx1OWYyYVx1OWYyOVx1OWYyOFx1OWY0Y1x1OWY1NVx1NTEzNFx1NTEzNVx1NTI5Nlx1NTJmN1x1'@;
put 'NTNiNFx1NTZhYlx1NTZhZFx1NTZhNlx1NTZhN1x1NTZhYVx1NTZhY1x1NThkYVx1NThkZFx1NThkYlx1NTkxMlx1NWIzZFx1NWIzZVx1NWIzZlx1NWRjM1x1NWU3MFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzI0MV0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjQxXVtnXS5jaGFyQ29kZUF0'@;
put 'KDApJiYoSVtfWzI0MV1bZ11dPTYxNjk2K2cseVs2MTY5NitnXT1fWzI0MV1bZ10pO2ZvcihfWzI0Ml09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NWZiZlx1NjFmYlx1NjUwN1x1NjUxMFx1NjUwZFx1NjUwOVx1NjUwY1x1NjUwZVx1'@;
put 'NjU4NFx1NjVkZVx1NjVkZFx1NjZkZVx1NmFlN1x1NmFlMFx1NmFjY1x1NmFkMVx1NmFkOVx1NmFjYlx1NmFkZlx1NmFkY1x1NmFkMFx1NmFlYlx1NmFjZlx1NmFjZFx1NmFkZVx1NmI2MFx1NmJiMFx1NmMwY1x1NzAxOVx1NzAyN1x1NzAyMFx1NzAxNlx1NzAyYlx1NzAyMVx1NzAyMlx1NzAy'@;
put 'M1x1NzAyOVx1NzAxN1x1NzAyNFx1NzAxY1x1NzAyYVx1NzIwY1x1NzIwYVx1NzIwN1x1NzIwMlx1NzIwNVx1NzJhNVx1NzJhNlx1NzJhNFx1NzJhM1x1NzJhMVx1NzRjYlx1NzRjNVx1NzRiN1x1NzRjM1x1NzUxNlx1NzY2MFx1NzdjOVx1NzdjYVx1NzdjNFx1NzdmMVx1NzkxZFx1NzkxYlx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzkyMVx1NzkxY1x1NzkxN1x1NzkxZVx1NzliMFx1N2E2N1x1N2E2OFx1N2MzM1x1N2MzY1x1N2MzOVx1N2MyY1x1N2MzYlx1N2NlY1x1N2NlYVx1N2U3Nlx1N2U3NVx1N2U3OFx1N2U3MFx1N2U3N1x1N2U2Zlx1N2U3YVx1'@;
put 'N2U3Mlx1N2U3NFx1N2U2OFx1N2Y0Ylx1N2Y0YVx1N2Y4M1x1N2Y4Nlx1N2ZiN1x1N2ZmZFx1N2ZmZVx1ODA3OFx1ODFkN1x1ODFkNVx1ODI2NFx1ODI2MVx1ODI2M1x1ODVlYlx1ODVmMVx1ODVlZFx1ODVkOVx1ODVlMVx1ODVlOFx1ODVkYVx1ODVkN1x1ODVlY1x1ODVmMlx1ODVmOFx1ODVk'@;
put 'OFx1ODVkZlx1ODVlM1x1ODVkY1x1ODVkMVx1ODVmMFx1ODVlNlx1ODVlZlx1ODVkZVx1ODVlMlx1ODgwMFx1ODdmYVx1ODgwM1x1ODdmNlx1ODdmN1x1ODgwOVx1ODgwY1x1ODgwYlx1ODgwNlx1ODdmY1x1ODgwOFx1ODdmZlx1ODgwYVx1ODgwMlx1ODk2Mlx1ODk1YVx1ODk1Ylx1ODk1N1x1'@;
put 'ODk2MVx1ODk1Y1x1ODk1OFx1ODk1ZFx1ODk1OVx1ODk4OFx1ODliN1x1ODliNlx1ODlmNlx1OGI1MFx1OGI0OFx1OGI0YVx1OGI0MFx1OGI1M1x1OGI1Nlx1OGI1NFx1OGI0Ylx1OGI1NVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzI0Ml0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjQyXVtn'@;
put 'XS5jaGFyQ29kZUF0KDApJiYoSVtfWzI0Ml1bZ11dPTYxOTUyK2cseVs2MTk1MitnXT1fWzI0Ml1bZ10pO2ZvcihfWzI0M109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGI1MVx1OGI0Mlx1OGI1Mlx1OGI1N1x1OGM0M1x1OGM3N1x1'@;
put 'OGM3Nlx1OGM5YVx1OGQwNlx1OGQwN1x1OGQwOVx1OGRhY1x1OGRhYVx1OGRhZFx1OGRhYlx1OGU2ZFx1OGU3OFx1OGU3M1x1OGU2YVx1OGU2Zlx1OGU3Ylx1OGVjMlx1OGY1Mlx1OGY1MVx1OGY0Zlx1OGY1MFx1OGY1M1x1OGZiNFx1OTE0MFx1OTEzZlx1OTFiMFx1OTFhZFx1OTNkZVx1OTNj'@;
put 'N1x1OTNjZlx1OTNjMlx1OTNkYVx1OTNkMFx1OTNmOVx1OTNlY1x1OTNjY1x1OTNkOVx1OTNhOVx1OTNlNlx1OTNjYVx1OTNkNFx1OTNlZVx1OTNlM1x1OTNkNVx1OTNjNFx1OTNjZVx1OTNjMFx1OTNkMlx1OTNlN1x1OTU3ZFx1OTVkYVx1OTVkYlx1OTZlMVx1OTcyOVx1OTcyYlx1OTcyY1x1'@;
put 'OTcyOFx1OTcyNlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTdiM1x1OTdiN1x1OTdiNlx1OTdkZFx1OTdkZVx1OTdkZlx1OTg1Y1x1OTg1OVx1OTg1ZFx1OTg1N1x1OThiZlx1OThiZFx1OThiYlx1OThiZVx1OTk0OFx1OTk0N1x1OTk0M1x1OTlhNlx1OTlhN1x1'@;
put 'OWExYVx1OWExNVx1OWEyNVx1OWExZFx1OWEyNFx1OWExYlx1OWEyMlx1OWEyMFx1OWEyN1x1OWEyM1x1OWExZVx1OWExY1x1OWExNFx1OWFjMlx1OWIwYlx1OWIwYVx1OWIwZVx1OWIwY1x1OWIzN1x1OWJlYVx1OWJlYlx1OWJlMFx1OWJkZVx1OWJlNFx1OWJlNlx1OWJlMlx1OWJmMFx1OWJk'@;
put 'NFx1OWJkN1x1OWJlY1x1OWJkY1x1OWJkOVx1OWJlNVx1OWJkNVx1OWJlMVx1OWJkYVx1OWQ3N1x1OWQ4MVx1OWQ4YVx1OWQ4NFx1OWQ4OFx1OWQ3MVx1OWQ4MFx1OWQ3OFx1OWQ4Nlx1OWQ4Ylx1OWQ4Y1x1OWQ3ZFx1OWQ2Ylx1OWQ3NFx1OWQ3NVx1OWQ3MFx1OWQ2OVx1OWQ4NVx1OWQ3M1x1'@;
put 'OWQ3Ylx1OWQ4Mlx1OWQ2Zlx1OWQ3OVx1OWQ3Zlx1OWQ4N1x1OWQ2OFx1OWU5NFx1OWU5MVx1OWVjMFx1OWVmY1x1OWYyZFx1OWY0MFx1OWY0MVx1OWY0ZFx1OWY1Nlx1OWY1N1x1OWY1OFx1NTMzN1x1NTZiMlx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzI0M10ubGVuZ3RoOysrZyk2NTUz'@;
put 'MyE9PV9bMjQzXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzI0M11bZ11dPTYyMjA4K2cseVs2MjIwOCtnXT1fWzI0M11bZ10pO2ZvcihfWzI0NF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTZiNVx1NTZiM1x1NThlM1x1NWI0NVx1'@;
put 'NWRjNlx1NWRjN1x1NWVlZVx1NWVlZlx1NWZjMFx1NWZjMVx1NjFmOVx1NjUxN1x1NjUxNlx1NjUxNVx1NjUxM1x1NjVkZlx1NjZlOFx1NjZlM1x1NjZlNFx1NmFmM1x1NmFmMFx1NmFlYVx1NmFlOFx1NmFmOVx1NmFmMVx1NmFlZVx1NmFlZlx1NzAzY1x1NzAzNVx1NzAyZlx1NzAzN1x1NzAz'@;
put 'NFx1NzAzMVx1NzA0Mlx1NzAzOFx1NzAzZlx1NzAzYVx1NzAzOVx1NzA0MFx1NzAzYlx1NzAzM1x1NzA0MVx1NzIxM1x1NzIxNFx1NzJhOFx1NzM3ZFx1NzM3Y1x1NzRiYVx1NzZhYlx1NzZhYVx1NzZiZVx1NzZlZFx1NzdjY1x1NzdjZVx1NzdjZlx1NzdjZFx1NzdmMlx1NzkyNVx1NzkyM1x1'@;
put 'NzkyN1x1NzkyOFx1NzkyNFx1NzkyOVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzliMlx1N2E2ZVx1N2E2Y1x1N2E2ZFx1N2FmN1x1N2M0OVx1N2M0OFx1N2M0YVx1N2M0N1x1N2M0NVx1N2NlZVx1N2U3Ylx1N2U3ZVx1N2U4MVx1N2U4MFx1N2ZiYVx1N2ZmZlx1'@;
put 'ODA3OVx1ODFkYlx1ODFkOVx1ODIwYlx1ODI2OFx1ODI2OVx1ODYyMlx1ODVmZlx1ODYwMVx1ODVmZVx1ODYxYlx1ODYwMFx1ODVmNlx1ODYwNFx1ODYwOVx1ODYwNVx1ODYwY1x1ODVmZFx1ODgxOVx1ODgxMFx1ODgxMVx1ODgxN1x1ODgxM1x1ODgxNlx1ODk2M1x1ODk2Nlx1ODliOVx1ODlm'@;
put 'N1x1OGI2MFx1OGI2YVx1OGI1ZFx1OGI2OFx1OGI2M1x1OGI2NVx1OGI2N1x1OGI2ZFx1OGRhZVx1OGU4Nlx1OGU4OFx1OGU4NFx1OGY1OVx1OGY1Nlx1OGY1N1x1OGY1NVx1OGY1OFx1OGY1YVx1OTA4ZFx1OTE0M1x1OTE0MVx1OTFiN1x1OTFiNVx1OTFiMlx1OTFiM1x1OTQwYlx1OTQxM1x1'@;
put 'OTNmYlx1OTQyMFx1OTQwZlx1OTQxNFx1OTNmZVx1OTQxNVx1OTQxMFx1OTQyOFx1OTQxOVx1OTQwZFx1OTNmNVx1OTQwMFx1OTNmN1x1OTQwN1x1OTQwZVx1OTQxNlx1OTQxMlx1OTNmYVx1OTQwOVx1OTNmOFx1OTQwYVx1OTNmZlx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzI0NF0ubGVu'@;
put 'Z3RoOysrZyk2NTUzMyE9PV9bMjQ0XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzI0NF1bZ11dPTYyNDY0K2cseVs2MjQ2NCtnXT1fWzI0NF1bZ10pO2ZvcihfWzI0NV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTNmY1x1OTQwY1x1'@;
put 'OTNmNlx1OTQxMVx1OTQwNlx1OTVkZVx1OTVlMFx1OTVkZlx1OTcyZVx1OTcyZlx1OTdiOVx1OTdiYlx1OTdmZFx1OTdmZVx1OTg2MFx1OTg2Mlx1OTg2M1x1OTg1Zlx1OThjMVx1OThjMlx1OTk1MFx1OTk0ZVx1OTk1OVx1OTk0Y1x1OTk0Ylx1OTk1M1x1OWEzMlx1OWEzNFx1OWEzMVx1OWEy'@;
put 'Y1x1OWEyYVx1OWEzNlx1OWEyOVx1OWEyZVx1OWEzOFx1OWEyZFx1OWFjN1x1OWFjYVx1OWFjNlx1OWIxMFx1OWIxMlx1OWIxMVx1OWMwYlx1OWMwOFx1OWJmN1x1OWMwNVx1OWMxMlx1OWJmOFx1OWM0MFx1OWMwN1x1OWMwZVx1OWMwNlx1OWMxN1x1OWMxNFx1OWMwOVx1OWQ5Zlx1OWQ5OVx1'@;
put 'OWRhNFx1OWQ5ZFx1OWQ5Mlx1OWQ5OFx1OWQ5MFx1OWQ5Ylx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OWRhMFx1OWQ5NFx1OWQ5Y1x1OWRhYVx1OWQ5N1x1OWRhMVx1OWQ5YVx1OWRhMlx1OWRhOFx1OWQ5ZVx1OWRhM1x1OWRiZlx1OWRhOVx1OWQ5Nlx1OWRhNlx1'@;
put 'OWRhN1x1OWU5OVx1OWU5Ylx1OWU5YVx1OWVlNVx1OWVlNFx1OWVlN1x1OWVlNlx1OWYzMFx1OWYyZVx1OWY1Ylx1OWY2MFx1OWY1ZVx1OWY1ZFx1OWY1OVx1OWY5MVx1NTEzYVx1NTEzOVx1NTI5OFx1NTI5N1x1NTZjM1x1NTZiZFx1NTZiZVx1NWI0OFx1NWI0N1x1NWRjYlx1NWRjZlx1NWVm'@;
put 'MVx1NjFmZFx1NjUxYlx1NmIwMlx1NmFmY1x1NmIwM1x1NmFmOFx1NmIwMFx1NzA0M1x1NzA0NFx1NzA0YVx1NzA0OFx1NzA0OVx1NzA0NVx1NzA0Nlx1NzIxZFx1NzIxYVx1NzIxOVx1NzM3ZVx1NzUxN1x1NzY2YVx1NzdkMFx1NzkyZFx1NzkzMVx1NzkyZlx1N2M1NFx1N2M1M1x1N2NmMlx1'@;
put 'N2U4YVx1N2U4N1x1N2U4OFx1N2U4Ylx1N2U4Nlx1N2U4ZFx1N2Y0ZFx1N2ZiYlx1ODAzMFx1ODFkZFx1ODYxOFx1ODYyYVx1ODYyNlx1ODYxZlx1ODYyM1x1ODYxY1x1ODYxOVx1ODYyN1x1ODYyZVx1ODYyMVx1ODYyMFx1ODYyOVx1ODYxZVx1ODYyNVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtn'@;
put 'IT1fWzI0NV0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjQ1XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzI0NV1bZ11dPTYyNzIwK2cseVs2MjcyMCtnXT1fWzI0NV1bZ10pO2ZvcihfWzI0Nl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ODgyOVx1ODgxZFx1ODgxYlx1ODgyMFx1ODgyNFx1ODgxY1x1ODgyYlx1ODg0YVx1ODk2ZFx1ODk2OVx1ODk2ZVx1ODk2Ylx1ODlmYVx1OGI3OVx1OGI3OFx1OGI0NVx1OGI3YVx1OGI3Ylx1OGQxMFx1OGQxNFx1OGRhZlx1OGU4ZVx1OGU4Y1x1OGY1ZVx1OGY1Ylx1OGY1ZFx1OTE0Nlx1OTE0'@;
put 'NFx1OTE0NVx1OTFiOVx1OTQzZlx1OTQzYlx1OTQzNlx1OTQyOVx1OTQzZFx1OTQzY1x1OTQzMFx1OTQzOVx1OTQyYVx1OTQzN1x1OTQyY1x1OTQ0MFx1OTQzMVx1OTVlNVx1OTVlNFx1OTVlM1x1OTczNVx1OTczYVx1OTdiZlx1OTdlMVx1OTg2NFx1OThjOVx1OThjNlx1OThjMFx1OTk1OFx1'@;
put 'OTk1Nlx1OWEzOVx1OWEzZFx1OWE0Nlx1OWE0NFx1OWE0Mlx1OWE0MVx1OWEzYVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OWEzZlx1OWFjZFx1OWIxNVx1OWIxN1x1OWIxOFx1OWIxNlx1OWIzYVx1OWI1Mlx1OWMyYlx1OWMxZFx1OWMxY1x1OWMyY1x1OWMyM1x1'@;
put 'OWMyOFx1OWMyOVx1OWMyNFx1OWMyMVx1OWRiN1x1OWRiNlx1OWRiY1x1OWRjMVx1OWRjN1x1OWRjYVx1OWRjZlx1OWRiZVx1OWRjNVx1OWRjM1x1OWRiYlx1OWRiNVx1OWRjZVx1OWRiOVx1OWRiYVx1OWRhY1x1OWRjOFx1OWRiMVx1OWRhZFx1OWRjY1x1OWRiM1x1OWRjZFx1OWRiMlx1OWU3'@;
put 'YVx1OWU5Y1x1OWVlYlx1OWVlZVx1OWVlZFx1OWYxYlx1OWYxOFx1OWYxYVx1OWYzMVx1OWY0ZVx1OWY2NVx1OWY2NFx1OWY5Mlx1NGViOVx1NTZjNlx1NTZjNVx1NTZjYlx1NTk3MVx1NWI0Ylx1NWI0Y1x1NWRkNVx1NWRkMVx1NWVmMlx1NjUyMVx1NjUyMFx1NjUyNlx1NjUyMlx1NmIwYlx1'@;
put 'NmIwOFx1NmIwOVx1NmMwZFx1NzA1NVx1NzA1Nlx1NzA1N1x1NzA1Mlx1NzIxZVx1NzIxZlx1NzJhOVx1NzM3Zlx1NzRkOFx1NzRkNVx1NzRkOVx1NzRkN1x1NzY2ZFx1NzZhZFx1NzkzNVx1NzliNFx1N2E3MFx1N2E3MVx1N2M1N1x1N2M1Y1x1N2M1OVx1N2M1Ylx1N2M1YVx1ZmZmZCIuc3Bs'@;
put 'aXQoIiIpLGc9MDtnIT1fWzI0Nl0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjQ2XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzI0Nl1bZ11dPTYyOTc2K2cseVs2Mjk3NitnXT1fWzI0Nl1bZ10pO2ZvcihfWzI0N109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1N2NmNFx1N2NmMVx1N2U5MVx1N2Y0Zlx1N2Y4N1x1ODFkZVx1ODI2Ylx1ODYzNFx1ODYzNVx1ODYzM1x1ODYyY1x1ODYzMlx1ODYzNlx1ODgyY1x1ODgyOFx1ODgyNlx1ODgyYVx1ODgyNVx1ODk3MVx1ODliZlx1ODliZVx1ODlmYlx1OGI3ZVx1OGI4NFx1OGI4Mlx1OGI4'@;
put 'Nlx1OGI4NVx1OGI3Zlx1OGQxNVx1OGU5NVx1OGU5NFx1OGU5YVx1OGU5Mlx1OGU5MFx1OGU5Nlx1OGU5N1x1OGY2MFx1OGY2Mlx1OTE0N1x1OTQ0Y1x1OTQ1MFx1OTQ0YVx1OTQ0Ylx1OTQ0Zlx1OTQ0N1x1OTQ0NVx1OTQ0OFx1OTQ0OVx1OTQ0Nlx1OTczZlx1OTdlM1x1OTg2YVx1OTg2OVx1'@;
put 'OThjYlx1OTk1NFx1OTk1Ylx1OWE0ZVx1OWE1M1x1OWE1NFx1OWE0Y1x1OWE0Zlx1OWE0OFx1OWE0YVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OWE0OVx1OWE1Mlx1OWE1MFx1OWFkMFx1OWIxOVx1OWIyYlx1OWIzYlx1OWI1Nlx1OWI1NVx1OWM0Nlx1OWM0OFx1'@;
put 'OWMzZlx1OWM0NFx1OWMzOVx1OWMzM1x1OWM0MVx1OWMzY1x1OWMzN1x1OWMzNFx1OWMzMlx1OWMzZFx1OWMzNlx1OWRkYlx1OWRkMlx1OWRkZVx1OWRkYVx1OWRjYlx1OWRkMFx1OWRkY1x1OWRkMVx1OWRkZlx1OWRlOVx1OWRkOVx1OWRkOFx1OWRkNlx1OWRmNVx1OWRkNVx1OWRkZFx1OWVi'@;
put 'Nlx1OWVmMFx1OWYzNVx1OWYzM1x1OWYzMlx1OWY0Mlx1OWY2Ylx1OWY5NVx1OWZhMlx1NTEzZFx1NTI5OVx1NThlOFx1NThlN1x1NTk3Mlx1NWI0ZFx1NWRkOFx1ODgyZlx1NWY0Zlx1NjIwMVx1NjIwM1x1NjIwNFx1NjUyOVx1NjUyNVx1NjU5Nlx1NjZlYlx1NmIxMVx1NmIxMlx1NmIwZlx1'@;
put 'NmJjYVx1NzA1Ylx1NzA1YVx1NzIyMlx1NzM4Mlx1NzM4MVx1NzM4M1x1NzY3MFx1NzdkNFx1N2M2N1x1N2M2Nlx1N2U5NVx1ODI2Y1x1ODYzYVx1ODY0MFx1ODYzOVx1ODYzY1x1ODYzMVx1ODYzYlx1ODYzZVx1ODgzMFx1ODgzMlx1ODgyZVx1ODgzM1x1ODk3Nlx1ODk3NFx1ODk3M1x1ODlm'@;
put 'ZVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzI0N10ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjQ3XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzI0N11bZ11dPTYzMjMyK2cseVs2MzIzMitnXT1fWzI0N11bZ10pO2ZvcihfWzI0OF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGI4Y1x1OGI4ZVx1OGI4Ylx1OGI4OFx1OGM0NVx1OGQxOVx1OGU5OFx1OGY2NFx1OGY2M1x1OTFiY1x1OTQ2Mlx1OTQ1NVx1OTQ1ZFx1OTQ1N1x1OTQ1ZVx1OTdjNFx1OTdjNVx1OTgwMFx1OWE1Nlx1OWE1OVx1OWIxZVx1OWIxZlx1OWIyMFx1OWM1'@;
put 'Mlx1OWM1OFx1OWM1MFx1OWM0YVx1OWM0ZFx1OWM0Ylx1OWM1NVx1OWM1OVx1OWM0Y1x1OWM0ZVx1OWRmYlx1OWRmN1x1OWRlZlx1OWRlM1x1OWRlYlx1OWRmOFx1OWRlNFx1OWRmNlx1OWRlMVx1OWRlZVx1OWRlNlx1OWRmMlx1OWRmMFx1OWRlMlx1OWRlY1x1OWRmNFx1OWRmM1x1OWRlOFx1'@;
put 'OWRlZFx1OWVjMlx1OWVkMFx1OWVmMlx1OWVmM1x1OWYwNlx1OWYxY1x1OWYzOFx1OWYzN1x1OWYzNlx1OWY0M1x1OWY0Zlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OWY3MVx1OWY3MFx1OWY2ZVx1OWY2Zlx1NTZkM1x1NTZjZFx1NWI0ZVx1NWM2ZFx1NjUyZFx1'@;
put 'NjZlZFx1NjZlZVx1NmIxM1x1NzA1Zlx1NzA2MVx1NzA1ZFx1NzA2MFx1NzIyM1x1NzRkYlx1NzRlNVx1NzdkNVx1NzkzOFx1NzliN1x1NzliNlx1N2M2YVx1N2U5N1x1N2Y4OVx1ODI2ZFx1ODY0M1x1ODgzOFx1ODgzN1x1ODgzNVx1ODg0Ylx1OGI5NFx1OGI5NVx1OGU5ZVx1OGU5Zlx1OGVh'@;
put 'MFx1OGU5ZFx1OTFiZVx1OTFiZFx1OTFjMlx1OTQ2Ylx1OTQ2OFx1OTQ2OVx1OTZlNVx1OTc0Nlx1OTc0M1x1OTc0N1x1OTdjN1x1OTdlNVx1OWE1ZVx1OWFkNVx1OWI1OVx1OWM2M1x1OWM2N1x1OWM2Nlx1OWM2Mlx1OWM1ZVx1OWM2MFx1OWUwMlx1OWRmZVx1OWUwN1x1OWUwM1x1OWUwNlx1'@;
put 'OWUwNVx1OWUwMFx1OWUwMVx1OWUwOVx1OWRmZlx1OWRmZFx1OWUwNFx1OWVhMFx1OWYxZVx1OWY0Nlx1OWY3NFx1OWY3NVx1OWY3Nlx1NTZkNFx1NjUyZVx1NjViOFx1NmIxOFx1NmIxOVx1NmIxN1x1NmIxYVx1NzA2Mlx1NzIyNlx1NzJhYVx1NzdkOFx1NzdkOVx1NzkzOVx1N2M2OVx1N2M2'@;
put 'Ylx1N2NmNlx1N2U5YVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzI0OF0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjQ4XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzI0OF1bZ11dPTYzNDg4K2cseVs2MzQ4OCtnXT1fWzI0OF1bZ10pO2ZvcihfWzI0OV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1N2U5OFx1N2U5Ylx1N2U5OVx1ODFlMFx1ODFlMVx1ODY0Nlx1ODY0N1x1ODY0OFx1ODk3OVx1ODk3YVx1ODk3Y1x1ODk3Ylx1ODlmZlx1OGI5OFx1OGI5OVx1OGVhNVx1OGVhNFx1OGVhM1x1OTQ2ZVx1OTQ2ZFx1OTQ2Zlx1OTQ3'@;
put 'MVx1OTQ3M1x1OTc0OVx1OTg3Mlx1OTk1Zlx1OWM2OFx1OWM2ZVx1OWM2ZFx1OWUwYlx1OWUwZFx1OWUxMFx1OWUwZlx1OWUxMlx1OWUxMVx1OWVhMVx1OWVmNVx1OWYwOVx1OWY0N1x1OWY3OFx1OWY3Ylx1OWY3YVx1OWY3OVx1NTcxZVx1NzA2Nlx1N2M2Zlx1ODgzY1x1OGRiMlx1OGVhNlx1'@;
put 'OTFjM1x1OTQ3NFx1OTQ3OFx1OTQ3Nlx1OTQ3NVx1OWE2MFx1OWM3NFx1OWM3M1x1OWM3MVx1OWM3NVx1OWUxNFx1OWUxM1x1OWVmNlx1OWYwYVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OWZhNFx1NzA2OFx1NzA2NVx1N2NmN1x1ODY2YVx1ODgzZVx1ODgzZFx1'@;
put 'ODgzZlx1OGI5ZVx1OGM5Y1x1OGVhOVx1OGVjOVx1OTc0Ylx1OTg3M1x1OTg3NFx1OThjY1x1OTk2MVx1OTlhYlx1OWE2NFx1OWE2Nlx1OWE2N1x1OWIyNFx1OWUxNVx1OWUxN1x1OWY0OFx1NjIwN1x1NmIxZVx1NzIyN1x1ODY0Y1x1OGVhOFx1OTQ4Mlx1OTQ4MFx1OTQ4MVx1OWE2OVx1OWE2'@;
put 'OFx1OWIyZVx1OWUxOVx1NzIyOVx1ODY0Ylx1OGI5Zlx1OTQ4M1x1OWM3OVx1OWViN1x1NzY3NVx1OWE2Ylx1OWM3YVx1OWUxZFx1NzA2OVx1NzA2YVx1OWVhNFx1OWY3ZVx1OWY0OVx1OWY5OFx1Nzg4MVx1OTJiOVx1ODhjZlx1NThiYlx1NjA1Mlx1N2NhN1x1NWFmYVx1MjU1NFx1MjU2Nlx1'@;
put 'MjU1N1x1MjU2MFx1MjU2Y1x1MjU2M1x1MjU1YVx1MjU2OVx1MjU1ZFx1MjU1Mlx1MjU2NFx1MjU1NVx1MjU1ZVx1MjU2YVx1MjU2MVx1MjU1OFx1MjU2N1x1MjU1Ylx1MjU1M1x1MjU2NVx1MjU1Nlx1MjU1Zlx1MjU2Ylx1MjU2Mlx1MjU1OVx1MjU2OFx1MjU1Y1x1MjU1MVx1MjU1MFx1MjU2'@;
put 'ZFx1MjU2ZVx1MjU3MFx1MjU2Zlx1MjU5M1x1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzI0OV0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjQ5XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzI0OV1bZ11dPTYzNzQ0K2cseVs2Mzc0NCtnXT1fWzI0OV1bZ10pO3JldHVybntlbmM6SSxkZWM6eX19'@;
put 'KCksWFsxMjUwXT1mdW5jdGlvbigpe2Zvcih2YXIgeT0iXDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XGJcdFxuXHZcZlxyXHgwZVx4MGZceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmICFcIiMkJSYnKCkqKywtLi8w'@;
put 'MTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9flx4N2ZcdTIwYWNcdWZmZmRcdTIwMWFcdWZmZmRcdTIwMWVcdTIwMjZcdTIwMjBcdTIwMjFcdWZmZmRcdTIwMzBcdTAxNjBcdTIwMzlcdTAxNWFcdTAx'@;
put 'NjRcdTAxN2RcdTAxNzlcdWZmZmRcdTIwMThcdTIwMTlcdTIwMWNcdTIwMWRcdTIwMjJcdTIwMTNcdTIwMTRcdWZmZmRcdTIxMjJcdTAxNjFcdTIwM2FcdTAxNWJcdTAxNjVcdTAxN2VcdTAxN2FceGEwXHUwMmM3XHUwMmQ4XHUwMTQxXHhhNFx1MDEwNFx4YTZceGE3XHhhOFx4YTlcdTAxNWVc'@;
put 'eGFiXHhhY1x4YWRceGFlXHUwMTdiXHhiMFx4YjFcdTAyZGJcdTAxNDJceGI0XHhiNVx4YjZceGI3XHhiOFx1MDEwNVx1MDE1Zlx4YmJcdTAxM2RcdTAyZGRcdTAxM2VcdTAxN2NcdTAxNTRceGMxXHhjMlx1MDEwMlx4YzRcdTAxMzlcdTAxMDZceGM3XHUwMTBjXHhjOVx1MDExOFx4Y2JcdTAx'@;
put 'MWFceGNkXHhjZVx1MDEwZVx1MDExMFx1MDE0M1x1MDE0N1x4ZDNceGQ0XHUwMTUwXHhkNlx4ZDdcdTAxNThcdTAxNmVceGRhXHUwMTcwXHhkY1x4ZGRcdTAxNjJceGRmXHUwMTU1XHhlMVx4ZTJcdTAxMDNceGU0XHUwMTNhXHUwMTA3XHhlN1x1MDEwZFx4ZTlcdTAxMTlceGViXHUwMTFiXHhl'@;
put 'ZFx4ZWVcdTAxMGZcdTAxMTFcdTAxNDRcdTAxNDhceGYzXHhmNFx1MDE1MVx4ZjZceGY3XHUwMTU5XHUwMTZmXHhmYVx1MDE3MVx4ZmNceGZkXHUwMTYzXHUwMmQ5IixJPVtdLF89e30sZz0wOzI1NiE9ZzsrK2cpNjU1MzMhPT15LmNoYXJDb2RlQXQoZykmJihfW3kuY2hhckF0KGcpXT1nKSxJ'@;
put 'W2ddPXkuY2hhckF0KGcpO3JldHVybntlbmM6XyxkZWM6SX19KCksWFsxMjUxXT1mdW5jdGlvbigpe2Zvcih2YXIgeT0iXDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XGJcdFxuXHZcZlxyXHgwZVx4MGZceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4'@;
put 'MWJceDFjXHgxZFx4MWVceDFmICFcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9flx4N2ZcdTA0MDJcdTA0MDNcdTIwMWFcdTA0NTNcdTIwMWVcdTIwMjZcdTIwMjBcdTIw'@;
put 'MjFcdTIwYWNcdTIwMzBcdTA0MDlcdTIwMzlcdTA0MGFcdTA0MGNcdTA0MGJcdTA0MGZcdTA0NTJcdTIwMThcdTIwMTlcdTIwMWNcdTIwMWRcdTIwMjJcdTIwMTNcdTIwMTRcdWZmZmRcdTIxMjJcdTA0NTlcdTIwM2FcdTA0NWFcdTA0NWNcdTA0NWJcdTA0NWZceGEwXHUwNDBlXHUwNDVlXHUw'@;
put 'NDA4XHhhNFx1MDQ5MFx4YTZceGE3XHUwNDAxXHhhOVx1MDQwNFx4YWJceGFjXHhhZFx4YWVcdTA0MDdceGIwXHhiMVx1MDQwNlx1MDQ1Nlx1MDQ5MVx4YjVceGI2XHhiN1x1MDQ1MVx1MjExNlx1MDQ1NFx4YmJcdTA0NThcdTA0MDVcdTA0NTVcdTA0NTdcdTA0MTBcdTA0MTFcdTA0MTJcdTA0'@;
put 'MTNcdTA0MTRcdTA0MTVcdTA0MTZcdTA0MTdcdTA0MThcdTA0MTlcdTA0MWFcdTA0MWJcdTA0MWNcdTA0MWRcdTA0MWVcdTA0MWZcdTA0MjBcdTA0MjFcdTA0MjJcdTA0MjNcdTA0MjRcdTA0MjVcdTA0MjZcdTA0MjdcdTA0MjhcdTA0MjlcdTA0MmFcdTA0MmJcdTA0MmNcdTA0MmRcdTA0MmVc'@;
put 'dTA0MmZcdTA0MzBcdTA0MzFcdTA0MzJcdTA0MzNcdTA0MzRcdTA0MzVcdTA0MzZcdTA0MzdcdTA0MzhcdTA0MzlcdTA0M2FcdTA0M2JcdTA0M2NcdTA0M2RcdTA0M2VcdTA0M2ZcdTA0NDBcdTA0NDFcdTA0NDJcdTA0NDNcdTA0NDRcdTA0NDVcdTA0NDZcdTA0NDdcdTA0NDhcdTA0NDlcdTA0'@;
put 'NGFcdTA0NGJcdTA0NGNcdTA0NGRcdTA0NGVcdTA0NGYiLEk9W10sXz17fSxnPTA7MjU2IT1nOysrZyk2NTUzMyE9PXkuY2hhckNvZGVBdChnKSYmKF9beS5jaGFyQXQoZyldPWcpLElbZ109eS5jaGFyQXQoZyk7cmV0dXJue2VuYzpfLGRlYzpJfX0oKSxYWzEyNTJdPWZ1bmN0aW9uKCl7Zm9y'@;
put 'KHZhciB5PSJcMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWYgIVwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJ'@;
put 'SktMTU5PUFFSU1RVVldYWVpbXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XHg3Zlx1MjBhY1x1ZmZmZFx1MjAxYVx1MDE5Mlx1MjAxZVx1MjAyNlx1MjAyMFx1MjAyMVx1MDJjNlx1MjAzMFx1MDE2MFx1MjAzOVx1MDE1Mlx1ZmZmZFx1MDE3ZFx1ZmZmZFx1ZmZmZFx1MjAx'@;
put 'OFx1MjAxOVx1MjAxY1x1MjAxZFx1MjAyMlx1MjAxM1x1MjAxNFx1MDJkY1x1MjEyMlx1MDE2MVx1MjAzYVx1MDE1M1x1ZmZmZFx1MDE3ZVx1MDE3OFx4YTBceGExXHhhMlx4YTNceGE0XHhhNVx4YTZceGE3XHhhOFx4YTlceGFhXHhhYlx4YWNceGFkXHhhZVx4YWZceGIwXHhiMVx4YjJceGIz'@;
put 'XHhiNFx4YjVceGI2XHhiN1x4YjhceGI5XHhiYVx4YmJceGJjXHhiZFx4YmVceGJmXHhjMFx4YzFceGMyXHhjM1x4YzRceGM1XHhjNlx4YzdceGM4XHhjOVx4Y2FceGNiXHhjY1x4Y2RceGNlXHhjZlx4ZDBceGQxXHhkMlx4ZDNceGQ0XHhkNVx4ZDZceGQ3XHhkOFx4ZDlceGRhXHhkYlx4ZGNc'@;
put 'eGRkXHhkZVx4ZGZceGUwXHhlMVx4ZTJceGUzXHhlNFx4ZTVceGU2XHhlN1x4ZThceGU5XHhlYVx4ZWJceGVjXHhlZFx4ZWVceGVmXHhmMFx4ZjFceGYyXHhmM1x4ZjRceGY1XHhmNlx4ZjdceGY4XHhmOVx4ZmFceGZiXHhmY1x4ZmRceGZlXHhmZiIsST1bXSxfPXt9LGc9MDsyNTYhPWc7Kytn'@;
put 'KTY1NTMzIT09eS5jaGFyQ29kZUF0KGcpJiYoX1t5LmNoYXJBdChnKV09ZyksSVtnXT15LmNoYXJBdChnKTtyZXR1cm57ZW5jOl8sZGVjOkl9fSgpLFhbMTI1M109ZnVuY3Rpb24oKXtmb3IodmFyIHk9IlwwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwN1xiXHRcblx2XGZcclx4MGVceDBm'@;
put 'XHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTdceDE4XHgxOVx4MWFceDFiXHgxY1x4MWRceDFlXHgxZiAhXCIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5ceDdm'@;
put 'XHUyMGFjXHVmZmZkXHUyMDFhXHUwMTkyXHUyMDFlXHUyMDI2XHUyMDIwXHUyMDIxXHVmZmZkXHUyMDMwXHVmZmZkXHUyMDM5XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUyMDE4XHUyMDE5XHUyMDFjXHUyMDFkXHUyMDIyXHUyMDEzXHUyMDE0XHVmZmZkXHUyMTIyXHVmZmZkXHUy'@;
put 'MDNhXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHhhMFx1MDM4NVx1MDM4Nlx4YTNceGE0XHhhNVx4YTZceGE3XHhhOFx4YTlcdWZmZmRceGFiXHhhY1x4YWRceGFlXHUyMDE1XHhiMFx4YjFceGIyXHhiM1x1MDM4NFx4YjVceGI2XHhiN1x1MDM4OFx1MDM4OVx1MDM4YVx4YmJcdTAzOGNceGJk'@;
put 'XHUwMzhlXHUwMzhmXHUwMzkwXHUwMzkxXHUwMzkyXHUwMzkzXHUwMzk0XHUwMzk1XHUwMzk2XHUwMzk3XHUwMzk4XHUwMzk5XHUwMzlhXHUwMzliXHUwMzljXHUwMzlkXHUwMzllXHUwMzlmXHUwM2EwXHUwM2ExXHVmZmZkXHUwM2EzXHUwM2E0XHUwM2E1XHUwM2E2XHUwM2E3XHUwM2E4XHUw'@;
put 'M2E5XHUwM2FhXHUwM2FiXHUwM2FjXHUwM2FkXHUwM2FlXHUwM2FmXHUwM2IwXHUwM2IxXHUwM2IyXHUwM2IzXHUwM2I0XHUwM2I1XHUwM2I2XHUwM2I3XHUwM2I4XHUwM2I5XHUwM2JhXHUwM2JiXHUwM2JjXHUwM2JkXHUwM2JlXHUwM2JmXHUwM2MwXHUwM2MxXHUwM2MyXHUwM2MzXHUwM2M0'@;
put 'XHUwM2M1XHUwM2M2XHUwM2M3XHUwM2M4XHUwM2M5XHUwM2NhXHUwM2NiXHUwM2NjXHUwM2NkXHUwM2NlXHVmZmZkIixJPVtdLF89e30sZz0wOzI1NiE9ZzsrK2cpNjU1MzMhPT15LmNoYXJDb2RlQXQoZykmJihfW3kuY2hhckF0KGcpXT1nKSxJW2ddPXkuY2hhckF0KGcpO3JldHVybntlbmM6'@;
put 'XyxkZWM6SX19KCksWFsxMjU0XT1mdW5jdGlvbigpe2Zvcih2YXIgeT0iXDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XGJcdFxuXHZcZlxyXHgwZVx4MGZceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmICFcIiMkJSYn'@;
put 'KCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9flx4N2ZcdTIwYWNcdWZmZmRcdTIwMWFcdTAxOTJcdTIwMWVcdTIwMjZcdTIwMjBcdTIwMjFcdTAyYzZcdTIwMzBcdTAxNjBcdTIwMzlc'@;
put 'dTAxNTJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTIwMThcdTIwMTlcdTIwMWNcdTIwMWRcdTIwMjJcdTIwMTNcdTIwMTRcdTAyZGNcdTIxMjJcdTAxNjFcdTIwM2FcdTAxNTNcdWZmZmRcdWZmZmRcdTAxNzhceGEwXHhhMVx4YTJceGEzXHhhNFx4YTVceGE2XHhhN1x4YThceGE5XHhhYVx4'@;
put 'YWJceGFjXHhhZFx4YWVceGFmXHhiMFx4YjFceGIyXHhiM1x4YjRceGI1XHhiNlx4YjdceGI4XHhiOVx4YmFceGJiXHhiY1x4YmRceGJlXHhiZlx4YzBceGMxXHhjMlx4YzNceGM0XHhjNVx4YzZceGM3XHhjOFx4YzlceGNhXHhjYlx4Y2NceGNkXHhjZVx4Y2ZcdTAxMWVceGQxXHhkMlx4ZDNc'@;
put 'eGQ0XHhkNVx4ZDZceGQ3XHhkOFx4ZDlceGRhXHhkYlx4ZGNcdTAxMzBcdTAxNWVceGRmXHhlMFx4ZTFceGUyXHhlM1x4ZTRceGU1XHhlNlx4ZTdceGU4XHhlOVx4ZWFceGViXHhlY1x4ZWRceGVlXHhlZlx1MDExZlx4ZjFceGYyXHhmM1x4ZjRceGY1XHhmNlx4ZjdceGY4XHhmOVx4ZmFceGZi'@;
put 'XHhmY1x1MDEzMVx1MDE1Zlx4ZmYiLEk9W10sXz17fSxnPTA7MjU2IT1nOysrZyk2NTUzMyE9PXkuY2hhckNvZGVBdChnKSYmKF9beS5jaGFyQXQoZyldPWcpLElbZ109eS5jaGFyQXQoZyk7cmV0dXJue2VuYzpfLGRlYzpJfX0oKSxYWzEyNTVdPWZ1bmN0aW9uKCl7Zm9yKHZhciB5PSJcMFx4'@;
put 'MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWYgIVwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RV'@;
put 'VldYWVpbXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XHg3Zlx1MjBhY1x1ZmZmZFx1MjAxYVx1MDE5Mlx1MjAxZVx1MjAyNlx1MjAyMFx1MjAyMVx1MDJjNlx1MjAzMFx1ZmZmZFx1MjAzOVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MjAxOFx1MjAxOVx1MjAx'@;
put 'Y1x1MjAxZFx1MjAyMlx1MjAxM1x1MjAxNFx1MDJkY1x1MjEyMlx1ZmZmZFx1MjAzYVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx4YTBceGExXHhhMlx4YTNcdTIwYWFceGE1XHhhNlx4YTdceGE4XHhhOVx4ZDdceGFiXHhhY1x4YWRceGFlXHhhZlx4YjBceGIxXHhiMlx4YjNceGI0XHhiNVx4'@;
put 'YjZceGI3XHhiOFx4YjlceGY3XHhiYlx4YmNceGJkXHhiZVx4YmZcdTA1YjBcdTA1YjFcdTA1YjJcdTA1YjNcdTA1YjRcdTA1YjVcdTA1YjZcdTA1YjdcdTA1YjhcdTA1YjlcdWZmZmRcdTA1YmJcdTA1YmNcdTA1YmRcdTA1YmVcdTA1YmZcdTA1YzBcdTA1YzFcdTA1YzJcdTA1YzNcdTA1ZjBc'@;
put 'dTA1ZjFcdTA1ZjJcdTA1ZjNcdTA1ZjRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTA1ZDBcdTA1ZDFcdTA1ZDJcdTA1ZDNcdTA1ZDRcdTA1ZDVcdTA1ZDZcdTA1ZDdcdTA1ZDhcdTA1ZDlcdTA1ZGFcdTA1ZGJcdTA1ZGNcdTA1ZGRcdTA1ZGVcdTA1ZGZcdTA1'@;
put 'ZTBcdTA1ZTFcdTA1ZTJcdTA1ZTNcdTA1ZTRcdTA1ZTVcdTA1ZTZcdTA1ZTdcdTA1ZThcdTA1ZTlcdTA1ZWFcdWZmZmRcdWZmZmRcdTIwMGVcdTIwMGZcdWZmZmQiLEk9W10sXz17fSxnPTA7MjU2IT1nOysrZyk2NTUzMyE9PXkuY2hhckNvZGVBdChnKSYmKF9beS5jaGFyQXQoZyldPWcpLElb'@;
put 'Z109eS5jaGFyQXQoZyk7cmV0dXJue2VuYzpfLGRlYzpJfX0oKSxYWzEyNTZdPWZ1bmN0aW9uKCl7Zm9yKHZhciB5PSJcMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFhXHgx'@;
put 'Ylx4MWNceDFkXHgxZVx4MWYgIVwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XHg3Zlx1MjBhY1x1MDY3ZVx1MjAxYVx1MDE5Mlx1MjAxZVx1MjAyNlx1MjAyMFx1MjAy'@;
put 'MVx1MDJjNlx1MjAzMFx1MDY3OVx1MjAzOVx1MDE1Mlx1MDY4Nlx1MDY5OFx1MDY4OFx1MDZhZlx1MjAxOFx1MjAxOVx1MjAxY1x1MjAxZFx1MjAyMlx1MjAxM1x1MjAxNFx1MDZhOVx1MjEyMlx1MDY5MVx1MjAzYVx1MDE1M1x1MjAwY1x1MjAwZFx1MDZiYVx4YTBcdTA2MGNceGEyXHhhM1x4'@;
put 'YTRceGE1XHhhNlx4YTdceGE4XHhhOVx1MDZiZVx4YWJceGFjXHhhZFx4YWVceGFmXHhiMFx4YjFceGIyXHhiM1x4YjRceGI1XHhiNlx4YjdceGI4XHhiOVx1MDYxYlx4YmJceGJjXHhiZFx4YmVcdTA2MWZcdTA2YzFcdTA2MjFcdTA2MjJcdTA2MjNcdTA2MjRcdTA2MjVcdTA2MjZcdTA2Mjdc'@;
put 'dTA2MjhcdTA2MjlcdTA2MmFcdTA2MmJcdTA2MmNcdTA2MmRcdTA2MmVcdTA2MmZcdTA2MzBcdTA2MzFcdTA2MzJcdTA2MzNcdTA2MzRcdTA2MzVcdTA2MzZceGQ3XHUwNjM3XHUwNjM4XHUwNjM5XHUwNjNhXHUwNjQwXHUwNjQxXHUwNjQyXHUwNjQzXHhlMFx1MDY0NFx4ZTJcdTA2NDVcdTA2'@;
put 'NDZcdTA2NDdcdTA2NDhceGU3XHhlOFx4ZTlceGVhXHhlYlx1MDY0OVx1MDY0YVx4ZWVceGVmXHUwNjRiXHUwNjRjXHUwNjRkXHUwNjRlXHhmNFx1MDY0Zlx1MDY1MFx4ZjdcdTA2NTFceGY5XHUwNjUyXHhmYlx4ZmNcdTIwMGVcdTIwMGZcdTA2ZDIiLEk9W10sXz17fSxnPTA7MjU2IT1nOysr'@;
put 'Zyk2NTUzMyE9PXkuY2hhckNvZGVBdChnKSYmKF9beS5jaGFyQXQoZyldPWcpLElbZ109eS5jaGFyQXQoZyk7cmV0dXJue2VuYzpfLGRlYzpJfX0oKSxYWzEyNTddPWZ1bmN0aW9uKCl7Zm9yKHZhciB5PSJcMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBlXHgw'@;
put 'Zlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWYgIVwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XHg3'@;
put 'Zlx1MjBhY1x1ZmZmZFx1MjAxYVx1ZmZmZFx1MjAxZVx1MjAyNlx1MjAyMFx1MjAyMVx1ZmZmZFx1MjAzMFx1ZmZmZFx1MjAzOVx1ZmZmZFx4YThcdTAyYzdceGI4XHVmZmZkXHUyMDE4XHUyMDE5XHUyMDFjXHUyMDFkXHUyMDIyXHUyMDEzXHUyMDE0XHVmZmZkXHUyMTIyXHVmZmZkXHUyMDNh'@;
put 'XHVmZmZkXHhhZlx1MDJkYlx1ZmZmZFx4YTBcdWZmZmRceGEyXHhhM1x4YTRcdWZmZmRceGE2XHhhN1x4ZDhceGE5XHUwMTU2XHhhYlx4YWNceGFkXHhhZVx4YzZceGIwXHhiMVx4YjJceGIzXHhiNFx4YjVceGI2XHhiN1x4ZjhceGI5XHUwMTU3XHhiYlx4YmNceGJkXHhiZVx4ZTZcdTAxMDRc'@;
put 'dTAxMmVcdTAxMDBcdTAxMDZceGM0XHhjNVx1MDExOFx1MDExMlx1MDEwY1x4YzlcdTAxNzlcdTAxMTZcdTAxMjJcdTAxMzZcdTAxMmFcdTAxM2JcdTAxNjBcdTAxNDNcdTAxNDVceGQzXHUwMTRjXHhkNVx4ZDZceGQ3XHUwMTcyXHUwMTQxXHUwMTVhXHUwMTZhXHhkY1x1MDE3Ylx1MDE3ZFx4'@;
put 'ZGZcdTAxMDVcdTAxMmZcdTAxMDFcdTAxMDdceGU0XHhlNVx1MDExOVx1MDExM1x1MDEwZFx4ZTlcdTAxN2FcdTAxMTdcdTAxMjNcdTAxMzdcdTAxMmJcdTAxM2NcdTAxNjFcdTAxNDRcdTAxNDZceGYzXHUwMTRkXHhmNVx4ZjZceGY3XHUwMTczXHUwMTQyXHUwMTViXHUwMTZiXHhmY1x1MDE3'@;
put 'Y1x1MDE3ZVx1MDJkOSIsST1bXSxfPXt9LGc9MDsyNTYhPWc7KytnKTY1NTMzIT09eS5jaGFyQ29kZUF0KGcpJiYoX1t5LmNoYXJBdChnKV09ZyksSVtnXT15LmNoYXJBdChnKTtyZXR1cm57ZW5jOl8sZGVjOkl9fSgpLFhbMTI1OF09ZnVuY3Rpb24oKXtmb3IodmFyIHk9IlwwXHgwMVx4MDJc'@;
put 'eDAzXHgwNFx4MDVceDA2XHgwN1xiXHRcblx2XGZcclx4MGVceDBmXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTdceDE4XHgxOVx4MWFceDFiXHgxY1x4MWRceDFlXHgxZiAhXCIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltc'@;
put 'XF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5ceDdmXHUyMGFjXHVmZmZkXHUyMDFhXHUwMTkyXHUyMDFlXHUyMDI2XHUyMDIwXHUyMDIxXHUwMmM2XHUyMDMwXHVmZmZkXHUyMDM5XHUwMTUyXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUyMDE4XHUyMDE5XHUyMDFjXHUyMDFk'@;
put 'XHUyMDIyXHUyMDEzXHUyMDE0XHUwMmRjXHUyMTIyXHVmZmZkXHUyMDNhXHUwMTUzXHVmZmZkXHVmZmZkXHUwMTc4XHhhMFx4YTFceGEyXHhhM1x4YTRceGE1XHhhNlx4YTdceGE4XHhhOVx4YWFceGFiXHhhY1x4YWRceGFlXHhhZlx4YjBceGIxXHhiMlx4YjNceGI0XHhiNVx4YjZceGI3XHhi'@;
put 'OFx4YjlceGJhXHhiYlx4YmNceGJkXHhiZVx4YmZceGMwXHhjMVx4YzJcdTAxMDJceGM0XHhjNVx4YzZceGM3XHhjOFx4YzlceGNhXHhjYlx1MDMwMFx4Y2RceGNlXHhjZlx1MDExMFx4ZDFcdTAzMDlceGQzXHhkNFx1MDFhMFx4ZDZceGQ3XHhkOFx4ZDlceGRhXHhkYlx4ZGNcdTAxYWZcdTAz'@;
put 'MDNceGRmXHhlMFx4ZTFceGUyXHUwMTAzXHhlNFx4ZTVceGU2XHhlN1x4ZThceGU5XHhlYVx4ZWJcdTAzMDFceGVkXHhlZVx4ZWZcdTAxMTFceGYxXHUwMzIzXHhmM1x4ZjRcdTAxYTFceGY2XHhmN1x4ZjhceGY5XHhmYVx4ZmJceGZjXHUwMWIwXHUyMGFiXHhmZiIsST1bXSxfPXt9LGc9MDsy'@;
put 'NTYhPWc7KytnKTY1NTMzIT09eS5jaGFyQ29kZUF0KGcpJiYoX1t5LmNoYXJBdChnKV09ZyksSVtnXT15LmNoYXJBdChnKTtyZXR1cm57ZW5jOl8sZGVjOkl9fSgpLFhbMWU0XT1mdW5jdGlvbigpe2Zvcih2YXIgeT0iXDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XGJcdFxuXHZcZlxy'@;
put 'XHgwZVx4MGZceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmICFcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6'@;
put 'e3x9flx4N2ZceGM0XHhjNVx4YzdceGM5XHhkMVx4ZDZceGRjXHhlMVx4ZTBceGUyXHhlNFx4ZTNceGU1XHhlN1x4ZTlceGU4XHhlYVx4ZWJceGVkXHhlY1x4ZWVceGVmXHhmMVx4ZjNceGYyXHhmNFx4ZjZceGY1XHhmYVx4ZjlceGZiXHhmY1x1MjAyMFx4YjBceGEyXHhhM1x4YTdcdTIwMjJc'@;
put 'eGI2XHhkZlx4YWVceGE5XHUyMTIyXHhiNFx4YThcdTIyNjBceGM2XHhkOFx1MjIxZVx4YjFcdTIyNjRcdTIyNjVceGE1XHhiNVx1MjIwMlx1MjIxMVx1MjIwZlx1MDNjMFx1MjIyYlx4YWFceGJhXHUyMTI2XHhlNlx4ZjhceGJmXHhhMVx4YWNcdTIyMWFcdTAxOTJcdTIyNDhcdTIyMDZceGFi'@;
put 'XHhiYlx1MjAyNlx4YTBceGMwXHhjM1x4ZDVcdTAxNTJcdTAxNTNcdTIwMTNcdTIwMTRcdTIwMWNcdTIwMWRcdTIwMThcdTIwMTlceGY3XHUyNWNhXHhmZlx1MDE3OFx1MjA0NFx4YTRcdTIwMzlcdTIwM2FcdWZiMDFcdWZiMDJcdTIwMjFceGI3XHUyMDFhXHUyMDFlXHUyMDMwXHhjMlx4Y2Fc'@;
put 'eGMxXHhjYlx4YzhceGNkXHhjZVx4Y2ZceGNjXHhkM1x4ZDRcdWZmZmRceGQyXHhkYVx4ZGJceGQ5XHUwMTMxXHUwMmM2XHUwMmRjXHhhZlx1MDJkOFx1MDJkOVx1MDJkYVx4YjhcdTAyZGRcdTAyZGJcdTAyYzciLEk9W10sXz17fSxnPTA7MjU2IT1nOysrZyk2NTUzMyE9PXkuY2hhckNvZGVB'@;
put 'dChnKSYmKF9beS5jaGFyQXQoZyldPWcpLElbZ109eS5jaGFyQXQoZyk7cmV0dXJue2VuYzpfLGRlYzpJfX0oKSxYWzEwMDA2XT1mdW5jdGlvbigpe2Zvcih2YXIgeT0iXDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XGJcdFxuXHZcZlxyXHgwZVx4MGZceDEwXHgxMVx4MTJceDEzXHgx'@;
put 'NFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmICFcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9flx4N2ZceGM0XHhiOVx4YjJceGM5XHhi'@;
put 'M1x4ZDZceGRjXHUwMzg1XHhlMFx4ZTJceGU0XHUwMzg0XHhhOFx4ZTdceGU5XHhlOFx4ZWFceGViXHhhM1x1MjEyMlx4ZWVceGVmXHUyMDIyXHhiZFx1MjAzMFx4ZjRceGY2XHhhNlx4YWRceGY5XHhmYlx4ZmNcdTIwMjBcdTAzOTNcdTAzOTRcdTAzOThcdTAzOWJcdTAzOWVcdTAzYTBceGRm'@;
put 'XHhhZVx4YTlcdTAzYTNcdTAzYWFceGE3XHUyMjYwXHhiMFx1MDM4N1x1MDM5MVx4YjFcdTIyNjRcdTIyNjVceGE1XHUwMzkyXHUwMzk1XHUwMzk2XHUwMzk3XHUwMzk5XHUwMzlhXHUwMzljXHUwM2E2XHUwM2FiXHUwM2E4XHUwM2E5XHUwM2FjXHUwMzlkXHhhY1x1MDM5Zlx1MDNhMVx1MjI0'@;
put 'OFx1MDNhNFx4YWJceGJiXHUyMDI2XHhhMFx1MDNhNVx1MDNhN1x1MDM4Nlx1MDM4OFx1MDE1M1x1MjAxM1x1MjAxNVx1MjAxY1x1MjAxZFx1MjAxOFx1MjAxOVx4ZjdcdTAzODlcdTAzOGFcdTAzOGNcdTAzOGVcdTAzYWRcdTAzYWVcdTAzYWZcdTAzY2NcdTAzOGZcdTAzY2RcdTAzYjFcdTAz'@;
put 'YjJcdTAzYzhcdTAzYjRcdTAzYjVcdTAzYzZcdTAzYjNcdTAzYjdcdTAzYjlcdTAzYmVcdTAzYmFcdTAzYmJcdTAzYmNcdTAzYmRcdTAzYmZcdTAzYzBcdTAzY2VcdTAzYzFcdTAzYzNcdTAzYzRcdTAzYjhcdTAzYzlcdTAzYzJcdTAzYzdcdTAzYzVcdTAzYjZcdTAzY2FcdTAzY2JcdTAzOTBc'@;
put 'dTAzYjBcdWZmZmQiLEk9W10sXz17fSxnPTA7MjU2IT1nOysrZyk2NTUzMyE9PXkuY2hhckNvZGVBdChnKSYmKF9beS5jaGFyQXQoZyldPWcpLElbZ109eS5jaGFyQXQoZyk7cmV0dXJue2VuYzpfLGRlYzpJfX0oKSxYWzEwMDA3XT1mdW5jdGlvbigpe2Zvcih2YXIgeT0iXDBceDAxXHgwMlx4'@;
put 'MDNceDA0XHgwNVx4MDZceDA3XGJcdFxuXHZcZlxyXHgwZVx4MGZceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmICFcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xc'@;
put 'XV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9flx4N2ZcdTA0MTBcdTA0MTFcdTA0MTJcdTA0MTNcdTA0MTRcdTA0MTVcdTA0MTZcdTA0MTdcdTA0MThcdTA0MTlcdTA0MWFcdTA0MWJcdTA0MWNcdTA0MWRcdTA0MWVcdTA0MWZcdTA0MjBcdTA0MjFcdTA0MjJcdTA0MjNcdTA0MjRc'@;
put 'dTA0MjVcdTA0MjZcdTA0MjdcdTA0MjhcdTA0MjlcdTA0MmFcdTA0MmJcdTA0MmNcdTA0MmRcdTA0MmVcdTA0MmZcdTIwMjBceGIwXHhhMlx4YTNceGE3XHUyMDIyXHhiNlx1MDQwNlx4YWVceGE5XHUyMTIyXHUwNDAyXHUwNDUyXHUyMjYwXHUwNDAzXHUwNDUzXHUyMjFlXHhiMVx1MjI2NFx1'@;
put 'MjI2NVx1MDQ1Nlx4YjVcdTIyMDJcdTA0MDhcdTA0MDRcdTA0NTRcdTA0MDdcdTA0NTdcdTA0MDlcdTA0NTlcdTA0MGFcdTA0NWFcdTA0NThcdTA0MDVceGFjXHUyMjFhXHUwMTkyXHUyMjQ4XHUyMjA2XHhhYlx4YmJcdTIwMjZceGEwXHUwNDBiXHUwNDViXHUwNDBjXHUwNDVjXHUwNDU1XHUy'@;
put 'MDEzXHUyMDE0XHUyMDFjXHUyMDFkXHUyMDE4XHUyMDE5XHhmN1x1MjAxZVx1MDQwZVx1MDQ1ZVx1MDQwZlx1MDQ1Zlx1MjExNlx1MDQwMVx1MDQ1MVx1MDQ0Zlx1MDQzMFx1MDQzMVx1MDQzMlx1MDQzM1x1MDQzNFx1MDQzNVx1MDQzNlx1MDQzN1x1MDQzOFx1MDQzOVx1MDQzYVx1MDQzYlx1'@;
put 'MDQzY1x1MDQzZFx1MDQzZVx1MDQzZlx1MDQ0MFx1MDQ0MVx1MDQ0Mlx1MDQ0M1x1MDQ0NFx1MDQ0NVx1MDQ0Nlx1MDQ0N1x1MDQ0OFx1MDQ0OVx1MDQ0YVx1MDQ0Ylx1MDQ0Y1x1MDQ0ZFx1MDQ0ZVx4YTQiLEk9W10sXz17fSxnPTA7MjU2IT1nOysrZyk2NTUzMyE9PXkuY2hhckNvZGVBdChn'@;
put 'KSYmKF9beS5jaGFyQXQoZyldPWcpLElbZ109eS5jaGFyQXQoZyk7cmV0dXJue2VuYzpfLGRlYzpJfX0oKSxYWzEwMDA4XT1mdW5jdGlvbigpe3ZhciBnLHk9W10sST17fSxfPVtdO2ZvcihfWzBdPSJcMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4'@;
put 'MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWYgIVwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XHg3Zlx4'@;
put 'ODBcdWY4ZDhcdWY4ZDlcdWY4ZGFcdWY4ZGJcdWY4ZGNcdWY4ZGRcdWY4ZGVcdWY4ZGZcdWY4ZTBcdWY4ZTFcdWY4ZTJcdWY4ZTNcdWY4ZTRcdWY4ZTVcdWY4ZTZcdWY4ZTdcdWY4ZThcdWY4ZTlcdWY4ZWFcdWY4ZWJcdWY4ZWNcdWY4ZWRcdWY4ZWVcdWY4ZWZcdWY4ZjBcdWY4ZjFcdWY4ZjJc'@;
put 'dWY4ZjNcdWY4ZjRcdWY4ZjVcdWY4ZjZcdWY4ZjdcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWY4ZjhcdWY4ZjlcdWY4ZmFcdWY4ZmJcdWY4ZmNcdWY4ZmRcdWY4ZmVcdWY4ZmYiLnNwbGl0KCIiKSxnPTA7ZyE9X1swXS5sZW5ndGg7KytnKTY1NTMzIT09X1swXVtnXS5jaGFyQ29kZUF0'@;
put 'KDApJiYoSVtfWzBdW2ddXT0wK2cseVswK2ddPV9bMF1bZ10pO2ZvcihfWzE2MV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MzAwMFx1MzAwMVx1MzAwMlx1MzBmYlx1MDJjOVx1MDJjN1x4YThcdTMwMDNcdTMwMDVcdTIwMTVcdWZmNWVcdWZmZmRcdTIwMjZcdTIwMThcdTIwMTlcdTIwMWNcdTIwMWRcdTMwMTRcdTMwMTVcdTMwMDhcdTMwMDlcdTMwMGFcdTMwMGJcdTMw'@;
put 'MGNcdTMwMGRcdTMwMGVcdTMwMGZcdTMwMTZcdTMwMTdcdTMwMTBcdTMwMTFceGIxXHhkN1x4ZjdcdTIyMzZcdTIyMjdcdTIyMjhcdTIyMTFcdTIyMGZcdTIyMmFcdTIyMjlcdTIyMDhcdTIyMzdcdTIyMWFcdTIyYTVcdTIyMjVcdTIyMjBcdTIzMTJcdTIyOTlcdTIyMmJcdTIyMmVcdTIyNjFc'@;
put 'dTIyNGNcdTIyNDhcdTIyM2RcdTIyMWRcdTIyNjBcdTIyNmVcdTIyNmZcdTIyNjRcdTIyNjVcdTIyMWVcdTIyMzVcdTIyMzRcdTI2NDJcdTI2NDBceGIwXHUyMDMyXHUyMDMzXHUyMTAzXHVmZjA0XHhhNFx1ZmZlMFx1ZmZlMVx1MjAzMFx4YTdcdTIxMTZcdTI2MDZcdTI2MDVcdTI1Y2JcdTI1'@;
put 'Y2ZcdTI1Y2VcdTI1YzdcdTI1YzZcdTI1YTFcdTI1YTBcdTI1YjNcdTI1YjJcdTIwM2JcdTIxOTJcdTIxOTBcdTIxOTFcdTIxOTNcdTMwMTNcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxNjFdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE2MV1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxNjFd'@;
put 'W2ddXT00MTIxNitnLHlbNDEyMTYrZ109X1sxNjFdW2ddKTtmb3IoX1sxNjJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTI0ODhcdTI0ODlcdTI0OGFcdTI0OGJcdTI0OGNcdTI0OGRcdTI0OGVcdTI0'@;
put 'OGZcdTI0OTBcdTI0OTFcdTI0OTJcdTI0OTNcdTI0OTRcdTI0OTVcdTI0OTZcdTI0OTdcdTI0OThcdTI0OTlcdTI0OWFcdTI0OWJcdTI0NzRcdTI0NzVcdTI0NzZcdTI0NzdcdTI0NzhcdTI0NzlcdTI0N2FcdTI0N2JcdTI0N2NcdTI0N2RcdTI0N2VcdTI0N2ZcdTI0ODBcdTI0ODFcdTI0ODJc'@;
put 'dTI0ODNcdTI0ODRcdTI0ODVcdTI0ODZcdTI0ODdcdTI0NjBcdTI0NjFcdTI0NjJcdTI0NjNcdTI0NjRcdTI0NjVcdTI0NjZcdTI0NjdcdTI0NjhcdTI0NjlcdWZmZmRcdWZmZmRcdTMyMjBcdTMyMjFcdTMyMjJcdTMyMjNcdTMyMjRcdTMyMjVcdTMyMjZcdTMyMjdcdTMyMjhcdTMyMjlcdWZm'@;
put 'ZmRcdWZmZmRcdTIxNjBcdTIxNjFcdTIxNjJcdTIxNjNcdTIxNjRcdTIxNjVcdTIxNjZcdTIxNjdcdTIxNjhcdTIxNjlcdTIxNmFcdTIxNmJcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxNjJdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE2Ml1bZ10uY2hhckNvZGVBdCgw'@;
put 'KSYmKElbX1sxNjJdW2ddXT00MTQ3MitnLHlbNDE0NzIrZ109X1sxNjJdW2ddKTtmb3IoX1sxNjNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmMDFcdWZmMDJcdWZmMDNcdWZmZTVcdWZmMDVcdWZmMDZcdWZmMDdcdWZmMDhcdWZmMDlcdWZmMGFcdWZmMGJcdWZmMGNcdWZmMGRcdWZmMGVcdWZmMGZcdWZmMTBcdWZmMTFcdWZmMTJcdWZmMTNcdWZmMTRcdWZmMTVcdWZm'@;
put 'MTZcdWZmMTdcdWZmMThcdWZmMTlcdWZmMWFcdWZmMWJcdWZmMWNcdWZmMWRcdWZmMWVcdWZmMWZcdWZmMjBcdWZmMjFcdWZmMjJcdWZmMjNcdWZmMjRcdWZmMjVcdWZmMjZcdWZmMjdcdWZmMjhcdWZmMjlcdWZmMmFcdWZmMmJcdWZmMmNcdWZmMmRcdWZmMmVcdWZmMmZcdWZmMzBcdWZmMzFc'@;
put 'dWZmMzJcdWZmMzNcdWZmMzRcdWZmMzVcdWZmMzZcdWZmMzdcdWZmMzhcdWZmMzlcdWZmM2FcdWZmM2JcdWZmM2NcdWZmM2RcdWZmM2VcdWZmM2ZcdWZmNDBcdWZmNDFcdWZmNDJcdWZmNDNcdWZmNDRcdWZmNDVcdWZmNDZcdWZmNDdcdWZmNDhcdWZmNDlcdWZmNGFcdWZmNGJcdWZmNGNcdWZm'@;
put 'NGRcdWZmNGVcdWZmNGZcdWZmNTBcdWZmNTFcdWZmNTJcdWZmNTNcdWZmNTRcdWZmNTVcdWZmNTZcdWZmNTdcdWZmNThcdWZmNTlcdWZmNWFcdWZmNWJcdWZmNWNcdWZmNWRcdWZmZTNcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxNjNdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE2M11bZ10u'@;
put 'Y2hhckNvZGVBdCgwKSYmKElbX1sxNjNdW2ddXT00MTcyOCtnLHlbNDE3MjgrZ109X1sxNjNdW2ddKTtmb3IoX1sxNjRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTMwNDFcdTMwNDJcdTMwNDNcdTMwNDRcdTMwNDVcdTMwNDZcdTMwNDdcdTMwNDhcdTMwNDlcdTMwNGFcdTMwNGJcdTMwNGNcdTMwNGRcdTMwNGVcdTMwNGZcdTMwNTBcdTMwNTFcdTMwNTJcdTMwNTNcdTMw'@;
put 'NTRcdTMwNTVcdTMwNTZcdTMwNTdcdTMwNThcdTMwNTlcdTMwNWFcdTMwNWJcdTMwNWNcdTMwNWRcdTMwNWVcdTMwNWZcdTMwNjBcdTMwNjFcdTMwNjJcdTMwNjNcdTMwNjRcdTMwNjVcdTMwNjZcdTMwNjdcdTMwNjhcdTMwNjlcdTMwNmFcdTMwNmJcdTMwNmNcdTMwNmRcdTMwNmVcdTMwNmZc'@;
put 'dTMwNzBcdTMwNzFcdTMwNzJcdTMwNzNcdTMwNzRcdTMwNzVcdTMwNzZcdTMwNzdcdTMwNzhcdTMwNzlcdTMwN2FcdTMwN2JcdTMwN2NcdTMwN2RcdTMwN2VcdTMwN2ZcdTMwODBcdTMwODFcdTMwODJcdTMwODNcdTMwODRcdTMwODVcdTMwODZcdTMwODdcdTMwODhcdTMwODlcdTMwOGFcdTMw'@;
put 'OGJcdTMwOGNcdTMwOGRcdTMwOGVcdTMwOGZcdTMwOTBcdTMwOTFcdTMwOTJcdTMwOTNcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxNjRdLmxlbmd0aDsrK2cpNjU1MzMh'@;
put 'PT1fWzE2NF1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxNjRdW2ddXT00MTk4NCtnLHlbNDE5ODQrZ109X1sxNjRdW2ddKTtmb3IoX1sxNjVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTMwYTFcdTMwYTJcdTMwYTNcdTMwYTRcdTMwYTVcdTMwYTZcdTMwYTdcdTMwYThcdTMwYTlcdTMwYWFcdTMwYWJcdTMwYWNcdTMwYWRcdTMwYWVcdTMwYWZcdTMwYjBcdTMwYjFcdTMw'@;
put 'YjJcdTMwYjNcdTMwYjRcdTMwYjVcdTMwYjZcdTMwYjdcdTMwYjhcdTMwYjlcdTMwYmFcdTMwYmJcdTMwYmNcdTMwYmRcdTMwYmVcdTMwYmZcdTMwYzBcdTMwYzFcdTMwYzJcdTMwYzNcdTMwYzRcdTMwYzVcdTMwYzZcdTMwYzdcdTMwYzhcdTMwYzlcdTMwY2FcdTMwY2JcdTMwY2NcdTMwY2Rc'@;
put 'dTMwY2VcdTMwY2ZcdTMwZDBcdTMwZDFcdTMwZDJcdTMwZDNcdTMwZDRcdTMwZDVcdTMwZDZcdTMwZDdcdTMwZDhcdTMwZDlcdTMwZGFcdTMwZGJcdTMwZGNcdTMwZGRcdTMwZGVcdTMwZGZcdTMwZTBcdTMwZTFcdTMwZTJcdTMwZTNcdTMwZTRcdTMwZTVcdTMwZTZcdTMwZTdcdTMwZThcdTMw'@;
put 'ZTlcdTMwZWFcdTMwZWJcdTMwZWNcdTMwZWRcdTMwZWVcdTMwZWZcdTMwZjBcdTMwZjFcdTMwZjJcdTMwZjNcdTMwZjRcdTMwZjVcdTMwZjZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxNjVdLmxlbmd0'@;
put 'aDsrK2cpNjU1MzMhPT1fWzE2NV1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxNjVdW2ddXT00MjI0MCtnLHlbNDIyNDArZ109X1sxNjVdW2ddKTtmb3IoX1sxNjZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTAzOTFcdTAzOTJcdTAzOTNcdTAzOTRcdTAzOTVcdTAzOTZcdTAzOTdcdTAzOThcdTAzOTlcdTAzOWFcdTAzOWJcdTAzOWNcdTAzOWRcdTAzOWVcdTAzOWZcdTAz'@;
put 'YTBcdTAzYTFcdTAzYTNcdTAzYTRcdTAzYTVcdTAzYTZcdTAzYTdcdTAzYThcdTAzYTlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTAzYjFcdTAzYjJcdTAzYjNcdTAzYjRcdTAzYjVcdTAzYjZcdTAzYjdcdTAzYjhcdTAzYjlcdTAzYmFcdTAzYmJc'@;
put 'dTAzYmNcdTAzYmRcdTAzYmVcdTAzYmZcdTAzYzBcdTAzYzFcdTAzYzNcdTAzYzRcdTAzYzVcdTAzYzZcdTAzYzdcdTAzYzhcdTAzYzlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9'@;
put 'X1sxNjZdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE2Nl1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxNjZdW2ddXT00MjQ5NitnLHlbNDI0OTYrZ109X1sxNjZdW2ddKTtmb3IoX1sxNjddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTA0MTBcdTA0MTFcdTA0MTJcdTA0MTNcdTA0MTRcdTA0MTVcdTA0MDFcdTA0MTZcdTA0MTdcdTA0MThcdTA0MTlcdTA0MWFcdTA0MWJcdTA0'@;
put 'MWNcdTA0MWRcdTA0MWVcdTA0MWZcdTA0MjBcdTA0MjFcdTA0MjJcdTA0MjNcdTA0MjRcdTA0MjVcdTA0MjZcdTA0MjdcdTA0MjhcdTA0MjlcdTA0MmFcdTA0MmJcdTA0MmNcdTA0MmRcdTA0MmVcdTA0MmZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTA0MzBcdTA0MzFcdTA0MzJcdTA0MzNcdTA0MzRcdTA0MzVcdTA0NTFcdTA0MzZcdTA0MzdcdTA0MzhcdTA0MzlcdTA0M2FcdTA0M2JcdTA0M2NcdTA0M2RcdTA0M2VcdTA0M2ZcdTA0NDBcdTA0NDFcdTA0NDJcdTA0'@;
put 'NDNcdTA0NDRcdTA0NDVcdTA0NDZcdTA0NDdcdTA0NDhcdTA0NDlcdTA0NGFcdTA0NGJcdTA0NGNcdTA0NGRcdTA0NGVcdTA0NGZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0'@;
put 'KCIiKSxnPTA7ZyE9X1sxNjddLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE2N11bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxNjddW2ddXT00Mjc1MitnLHlbNDI3NTIrZ109X1sxNjddW2ddKTtmb3IoX1sxNjhdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTAxMDFceGUxXHUwMWNlXHhlMFx1MDExM1x4ZTlcdTAxMWJceGU4XHUwMTJiXHhlZFx1MDFkMFx4ZWNcdTAxNGRceGYz'@;
put 'XHUwMWQyXHhmMlx1MDE2Ylx4ZmFcdTAxZDRceGY5XHUwMWQ2XHUwMWQ4XHUwMWRhXHUwMWRjXHhmY1x4ZWFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTMxMDVcdTMxMDZcdTMxMDdcdTMxMDhcdTMxMDlcdTMxMGFcdTMxMGJc'@;
put 'dTMxMGNcdTMxMGRcdTMxMGVcdTMxMGZcdTMxMTBcdTMxMTFcdTMxMTJcdTMxMTNcdTMxMTRcdTMxMTVcdTMxMTZcdTMxMTdcdTMxMThcdTMxMTlcdTMxMWFcdTMxMWJcdTMxMWNcdTMxMWRcdTMxMWVcdTMxMWZcdTMxMjBcdTMxMjFcdTMxMjJcdTMxMjNcdTMxMjRcdTMxMjVcdTMxMjZcdTMx'@;
put 'MjdcdTMxMjhcdTMxMjlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9'@;
put 'X1sxNjhdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE2OF1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxNjhdW2ddXT00MzAwOCtnLHlbNDMwMDgrZ109X1sxNjhdW2ddKTtmb3IoX1sxNjldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTI1MDBcdTI1MDFcdTI1MDJcdTI1MDNcdTI1MDRcdTI1MDVcdTI1MDZcdTI1MDdcdTI1MDhcdTI1MDlcdTI1'@;
put 'MGFcdTI1MGJcdTI1MGNcdTI1MGRcdTI1MGVcdTI1MGZcdTI1MTBcdTI1MTFcdTI1MTJcdTI1MTNcdTI1MTRcdTI1MTVcdTI1MTZcdTI1MTdcdTI1MThcdTI1MTlcdTI1MWFcdTI1MWJcdTI1MWNcdTI1MWRcdTI1MWVcdTI1MWZcdTI1MjBcdTI1MjFcdTI1MjJcdTI1MjNcdTI1MjRcdTI1MjVc'@;
put 'dTI1MjZcdTI1MjdcdTI1MjhcdTI1MjlcdTI1MmFcdTI1MmJcdTI1MmNcdTI1MmRcdTI1MmVcdTI1MmZcdTI1MzBcdTI1MzFcdTI1MzJcdTI1MzNcdTI1MzRcdTI1MzVcdTI1MzZcdTI1MzdcdTI1MzhcdTI1MzlcdTI1M2FcdTI1M2JcdTI1M2NcdTI1M2RcdTI1M2VcdTI1M2ZcdTI1NDBcdTI1'@;
put 'NDFcdTI1NDJcdTI1NDNcdTI1NDRcdTI1NDVcdTI1NDZcdTI1NDdcdTI1NDhcdTI1NDlcdTI1NGFcdTI1NGJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0'@;
put 'KCIiKSxnPTA7ZyE9X1sxNjldLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE2OV1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxNjldW2ddXT00MzI2NCtnLHlbNDMyNjQrZ109X1sxNjldW2ddKTtmb3IoX1sxNzZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTU1NGFcdTk2M2ZcdTU3YzNcdTYzMjhcdTU0Y2VcdTU1MDlcdTU0YzBcdTc2OTFcdTc2NGNcdTg1M2NcdTc3ZWVcdTgy'@;
put 'N2VcdTc4OGRcdTcyMzFcdTk2OThcdTk3OGRcdTZjMjhcdTViODlcdTRmZmFcdTYzMDlcdTY2OTdcdTVjYjhcdTgwZmFcdTY4NDhcdTgwYWVcdTY2MDJcdTc2Y2VcdTUxZjlcdTY1NTZcdTcxYWNcdTdmZjFcdTg4ODRcdTUwYjJcdTU5NjVcdTYxY2FcdTZmYjNcdTgyYWRcdTYzNGNcdTYyNTJc'@;
put 'dTUzZWRcdTU0MjdcdTdiMDZcdTUxNmJcdTc1YTRcdTVkZjRcdTYyZDRcdThkY2JcdTk3NzZcdTYyOGFcdTgwMTlcdTU3NWRcdTk3MzhcdTdmNjJcdTcyMzhcdTc2N2RcdTY3Y2ZcdTc2N2VcdTY0NDZcdTRmNzBcdThkMjVcdTYyZGNcdTdhMTdcdTY1OTFcdTczZWRcdTY0MmNcdTYyNzNcdTgy'@;
put 'MmNcdTk4ODFcdTY3N2ZcdTcyNDhcdTYyNmVcdTYyY2NcdTRmMzRcdTc0ZTNcdTUzNGFcdTUyOWVcdTdlY2FcdTkwYTZcdTVlMmVcdTY4ODZcdTY5OWNcdTgxODBcdTdlZDFcdTY4ZDJcdTc4YzVcdTg2OGNcdTk1NTFcdTUwOGRcdThjMjRcdTgyZGVcdTgwZGVcdTUzMDVcdTg5MTJcdTUyNjVc'@;
put 'dWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxNzZdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE3Nl1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxNzZdW2ddXT00NTA1NitnLHlbNDUwNTYrZ109X1sxNzZdW2ddKTtmb3IoX1sxNzddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTg1ODRcdTk2ZjlcdTRmZGRcdTU4MjFcdTk5NzFcdTViOWRcdTYyYjFcdTYyYTVcdTY2YjRcdThj'@;
put 'NzlcdTljOGRcdTcyMDZcdTY3NmZcdTc4OTFcdTYwYjJcdTUzNTFcdTUzMTdcdThmODhcdTgwY2NcdThkMWRcdTk0YTFcdTUwMGRcdTcyYzhcdTU5MDdcdTYwZWJcdTcxMTlcdTg4YWJcdTU5NTRcdTgyZWZcdTY3MmNcdTdiMjhcdTVkMjlcdTdlZjdcdTc1MmRcdTZjZjVcdThlNjZcdThmZjhc'@;
put 'dTkwM2NcdTlmM2JcdTZiZDRcdTkxMTlcdTdiMTRcdTVmN2NcdTc4YTdcdTg0ZDZcdTg1M2RcdTZiZDVcdTZiZDlcdTZiZDZcdTVlMDFcdTVlODdcdTc1ZjlcdTk1ZWRcdTY1NWRcdTVmMGFcdTVmYzVcdThmOWZcdTU4YzFcdTgxYzJcdTkwN2ZcdTk2NWJcdTk3YWRcdThmYjlcdTdmMTZcdThk'@;
put 'MmNcdTYyNDFcdTRmYmZcdTUzZDhcdTUzNWVcdThmYThcdThmYTlcdThmYWJcdTkwNGRcdTY4MDdcdTVmNmFcdTgxOThcdTg4NjhcdTljZDZcdTYxOGJcdTUyMmJcdTc2MmFcdTVmNmNcdTY1OGNcdTZmZDJcdTZlZThcdTViYmVcdTY0NDhcdTUxNzVcdTUxYjBcdTY3YzRcdTRlMTlcdTc5Yzlc'@;
put 'dTk5N2NcdTcwYjNcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxNzddLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE3N11bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxNzddW2ddXT00NTMxMitnLHlbNDUzMTIrZ109X1sxNzddW2ddKTtmb3IoX1sxNzhdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc1YzVcdTVlNzZcdTczYmJcdTgzZTBcdTY0YWRcdTYyZThcdTk0YjVcdTZj'@;
put 'ZTJcdTUzNWFcdTUyYzNcdTY0MGZcdTk0YzJcdTdiOTRcdTRmMmZcdTVlMWJcdTgyMzZcdTgxMTZcdTgxOGFcdTZlMjRcdTZjY2FcdTlhNzNcdTYzNTVcdTUzNWNcdTU0ZmFcdTg4NjVcdTU3ZTBcdTRlMGRcdTVlMDNcdTZiNjVcdTdjM2ZcdTkwZThcdTYwMTZcdTY0ZTZcdTczMWNcdTg4YzFc'@;
put 'dTY3NTBcdTYyNGRcdThkMjJcdTc3NmNcdThlMjlcdTkxYzdcdTVmNjlcdTgzZGNcdTg1MjFcdTk5MTBcdTUzYzJcdTg2OTVcdTZiOGJcdTYwZWRcdTYwZThcdTcwN2ZcdTgyY2RcdTgyMzFcdTRlZDNcdTZjYTdcdTg1Y2ZcdTY0Y2RcdTdjZDlcdTY5ZmRcdTY2ZjlcdTgzNDlcdTUzOTVcdTdi'@;
put 'NTZcdTRmYTdcdTUxOGNcdTZkNGJcdTVjNDJcdThlNmRcdTYzZDJcdTUzYzlcdTgzMmNcdTgzMzZcdTY3ZTVcdTc4YjRcdTY0M2RcdTViZGZcdTVjOTRcdTVkZWVcdThiZTdcdTYyYzZcdTY3ZjRcdThjN2FcdTY0MDBcdTYzYmFcdTg3NDlcdTk5OGJcdThjMTdcdTdmMjBcdTk0ZjJcdTRlYTdc'@;
put 'dTk2MTBcdTk4YTRcdTY2MGNcdTczMTZcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxNzhdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE3OF1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxNzhdW2ddXT00NTU2OCtnLHlbNDU1NjgrZ109X1sxNzhdW2ddKTtmb3IoX1sxNzldPSJcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTU3M2FcdTVjMWRcdTVlMzhcdTk1N2ZcdTUwN2ZcdTgw'@;
put 'YTBcdTUzODJcdTY1NWVcdTc1NDVcdTU1MzFcdTUwMjFcdThkODVcdTYyODRcdTk0OWVcdTY3MWRcdTU2MzJcdTZmNmVcdTVkZTJcdTU0MzVcdTcwOTJcdThmNjZcdTYyNmZcdTY0YTRcdTYzYTNcdTVmN2JcdTZmODhcdTkwZjRcdTgxZTNcdThmYjBcdTVjMThcdTY2NjhcdTVmZjFcdTZjODlc'@;
put 'dTk2NDhcdThkODFcdTg4NmNcdTY0OTFcdTc5ZjBcdTU3Y2VcdTZhNTlcdTYyMTBcdTU0NDhcdTRlNThcdTdhMGJcdTYwZTlcdTZmODRcdThiZGFcdTYyN2ZcdTkwMWVcdTlhOGJcdTc5ZTRcdTU0MDNcdTc1ZjRcdTYzMDFcdTUzMTlcdTZjNjBcdThmZGZcdTVmMWJcdTlhNzBcdTgwM2JcdTlm'@;
put 'N2ZcdTRmODhcdTVjM2FcdThkNjRcdTdmYzVcdTY1YTVcdTcwYmRcdTUxNDVcdTUxYjJcdTg2NmJcdTVkMDdcdTViYTBcdTYyYmRcdTkxNmNcdTc1NzRcdThlMGNcdTdhMjBcdTYxMDFcdTdiNzlcdTRlYzdcdTdlZjhcdTc3ODVcdTRlMTFcdTgxZWRcdTUyMWRcdTUxZmFcdTZhNzFcdTUzYThc'@;
put 'dThlODdcdTk1MDRcdTk2Y2ZcdTZlYzFcdTk2NjRcdTY5NWFcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxNzldLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE3OV1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxNzldW2ddXT00NTgyNCtnLHlbNDU4MjQrZ109X1sxNzldW2ddKTtmb3IoX1sxODBd'@;
put 'PSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc4NDBcdTUwYThcdTc3ZDdcdTY0'@;
put 'MTBcdTg5ZTZcdTU5MDRcdTYzZTNcdTVkZGRcdTdhN2ZcdTY5M2RcdTRmMjBcdTgyMzlcdTU1OThcdTRlMzJcdTc1YWVcdTdhOTdcdTVlNjJcdTVlOGFcdTk1ZWZcdTUyMWJcdTU0MzlcdTcwOGFcdTYzNzZcdTk1MjRcdTU3ODJcdTY2MjVcdTY5M2ZcdTkxODdcdTU1MDdcdTZkZjNcdTdlYWZc'@;
put 'dTg4MjJcdTYyMzNcdTdlZjBcdTc1YjVcdTgzMjhcdTc4YzFcdTk2Y2NcdThmOWVcdTYxNDhcdTc0ZjdcdThiY2RcdTZiNjRcdTUyM2FcdThkNTBcdTZiMjFcdTgwNmFcdTg0NzFcdTU2ZjFcdTUzMDZcdTRlY2VcdTRlMWJcdTUxZDFcdTdjOTdcdTkxOGJcdTdjMDdcdTRmYzNcdThlN2ZcdTdi'@;
put 'ZTFcdTdhOWNcdTY0NjdcdTVkMTRcdTUwYWNcdTgxMDZcdTc2MDFcdTdjYjlcdTZkZWNcdTdmZTBcdTY3NTFcdTViNThcdTViZjhcdTc4Y2JcdTY0YWVcdTY0MTNcdTYzYWFcdTYzMmJcdTk1MTlcdTY0MmRcdThmYmVcdTdiNTRcdTc2MjlcdTYyNTNcdTU5MjdcdTU0NDZcdTZiNzlcdTUwYTNc'@;
put 'dTYyMzRcdTVlMjZcdTZiODZcdTRlZTNcdThkMzdcdTg4OGJcdTVmODVcdTkwMmVcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxODBdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE4MF1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxODBdW2ddXT00NjA4MCtnLHlbNDYwODArZ109X1sxODBdW2dd'@;
put 'KTtmb3IoX1sxODFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTYwMjBcdTgw'@;
put 'M2RcdTYyYzVcdTRlMzlcdTUzNTVcdTkwZjhcdTYzYjhcdTgwYzZcdTY1ZTZcdTZjMmVcdTRmNDZcdTYwZWVcdTZkZTFcdThiZGVcdTVmMzlcdTg2Y2JcdTVmNTNcdTYzMjFcdTUxNWFcdTgzNjFcdTY4NjNcdTUyMDBcdTYzNjNcdThlNDhcdTUwMTJcdTVjOWJcdTc5NzdcdTViZmNcdTUyMzBc'@;
put 'dTdhM2JcdTYwYmNcdTkwNTNcdTc2ZDdcdTVmYjdcdTVmOTdcdTc2ODRcdThlNmNcdTcwNmZcdTc2N2JcdTdiNDlcdTc3YWFcdTUxZjNcdTkwOTNcdTU4MjRcdTRmNGVcdTZlZjRcdThmZWFcdTY1NGNcdTdiMWJcdTcyYzRcdTZkYTRcdTdmZGZcdTVhZTFcdTYyYjVcdTVlOTVcdTU3MzBcdTg0'@;
put 'ODJcdTdiMmNcdTVlMWRcdTVmMWZcdTkwMTJcdTdmMTRcdTk4YTBcdTYzODJcdTZlYzdcdTc4OThcdTcwYjlcdTUxNzhcdTk3NWJcdTU3YWJcdTc1MzVcdTRmNDNcdTc1MzhcdTVlOTdcdTYwZTZcdTU5NjBcdTZkYzBcdTZiYmZcdTc4ODlcdTUzZmNcdTk2ZDVcdTUxY2JcdTUyMDFcdTYzODlc'@;
put 'dTU0MGFcdTk0OTNcdThjMDNcdThkY2NcdTcyMzlcdTc4OWZcdTg3NzZcdThmZWRcdThjMGRcdTUzZTBcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxODFdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE4MV1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxODFdW2ddXT00NjMzNitnLHlbNDYzMzYr'@;
put 'Z109X1sxODFdW2ddKTtmb3IoX1sxODJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdTRlMDFcdTc2ZWZcdTUzZWVcdTk0ODlcdTk4NzZcdTlmMGVcdTk1MmRcdTViOWFcdThiYTJcdTRlMjJcdTRlMWNcdTUxYWNcdTg0NjNcdTYxYzJcdTUyYThcdTY4MGJcdTRmOTdcdTYwNmJcdTUxYmJcdTZkMWVcdTUxNWNcdTYyOTZcdTY1OTdcdTk2NjFcdThjNDZcdTkwMTdcdTc1ZDhc'@;
put 'dTkwZmRcdTc3NjNcdTZiZDJcdTcyOGFcdTcyZWNcdThiZmJcdTU4MzVcdTc3NzlcdThkNGNcdTY3NWNcdTk1NDBcdTgwOWFcdTVlYTZcdTZlMjFcdTU5OTJcdTdhZWZcdTc3ZWRcdTk1M2JcdTZiYjVcdTY1YWRcdTdmMGVcdTU4MDZcdTUxNTFcdTk2MWZcdTViZjlcdTU4YTlcdTU0MjhcdThl'@;
put 'NzJcdTY1NjZcdTk4N2ZcdTU2ZTRcdTk0OWRcdTc2ZmVcdTkwNDFcdTYzODdcdTU0YzZcdTU5MWFcdTU5M2FcdTU3OWJcdThlYjJcdTY3MzVcdThkZmFcdTgyMzVcdTUyNDFcdTYwZjBcdTU4MTVcdTg2ZmVcdTVjZThcdTllNDVcdTRmYzRcdTk4OWRcdThiYjlcdTVhMjVcdTYwNzZcdTUzODRc'@;
put 'dTYyN2NcdTkwNGZcdTkxMDJcdTk5N2ZcdTYwNjlcdTgwMGNcdTUxM2ZcdTgwMzNcdTVjMTRcdTk5NzVcdTZkMzFcdTRlOGNcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxODJdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE4Ml1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxODJdW2ddXT00NjU5'@;
put 'MitnLHlbNDY1OTIrZ109X1sxODJdW2ddKTtmb3IoX1sxODNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdThkMzBcdTUzZDFcdTdmNWFcdTdiNGZcdTRmMTBcdTRlNGZcdTk2MDBcdTZjZDVcdTczZDBcdTg1ZTlcdTVlMDZcdTc1NmFcdTdmZmJcdTZhMGFcdTc3ZmVcdTk0OTJcdTdlNDFcdTUxZTFcdTcwZTZcdTUzY2RcdThmZDRcdTgzMDNcdThkMjlcdTcyYWZcdTk5NmRc'@;
put 'dTZjZGJcdTU3NGFcdTgyYjNcdTY1YjlcdTgwYWFcdTYyM2ZcdTk2MzJcdTU5YThcdTRlZmZcdThiYmZcdTdlYmFcdTY1M2VcdTgzZjJcdTk3NWVcdTU1NjFcdTk4ZGVcdTgwYTVcdTUzMmFcdThiZmRcdTU0MjBcdTgwYmFcdTVlOWZcdTZjYjhcdThkMzlcdTgyYWNcdTkxNWFcdTU0MjlcdTZj'@;
put 'MWJcdTUyMDZcdTdlYjdcdTU3NWZcdTcxMWFcdTZjN2VcdTdjODlcdTU5NGJcdTRlZmRcdTVmZmZcdTYxMjRcdTdjYWFcdTRlMzBcdTVjMDFcdTY3YWJcdTg3MDJcdTVjZjBcdTk1MGJcdTk4Y2VcdTc1YWZcdTcwZmRcdTkwMjJcdTUxYWZcdTdmMWRcdThiYmRcdTU5NDlcdTUxZTRcdTRmNWJc'@;
put 'dTU0MjZcdTU5MmJcdTY1NzdcdTgwYTRcdTViNzVcdTYyNzZcdTYyYzJcdThmOTBcdTVlNDVcdTZjMWZcdTdiMjZcdTRmMGZcdTRmZDhcdTY3MGRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxODNdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE4M11bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sx'@;
put 'ODNdW2ddXT00Njg0OCtnLHlbNDY4NDgrZ109X1sxODNdW2ddKTtmb3IoX1sxODRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZkNmVcdTZkYWFcdTc5OGZcdTg4YjFcdTVmMTdcdTc1MmJcdTYyOWFcdThmODVcdTRmZWZcdTkxZGNcdTY1YTdcdTgxMmZcdTgxNTFcdTVlOWNcdTgxNTBcdThkNzRcdTUyNmZcdTg5ODZcdThkNGJcdTU5MGRcdTUwODVcdTRlZDhcdTk2MWNc'@;
put 'dTcyMzZcdTgxNzlcdThkMWZcdTViY2NcdThiYTNcdTk2NDRcdTU5ODdcdTdmMWFcdTU0OTBcdTU2NzZcdTU2MGVcdThiZTVcdTY1MzlcdTY5ODJcdTk0OTlcdTc2ZDZcdTZlODlcdTVlNzJcdTc1MThcdTY3NDZcdTY3ZDFcdTdhZmZcdTgwOWRcdThkNzZcdTYxMWZcdTc5YzZcdTY1NjJcdThk'@;
put 'NjNcdTUxODhcdTUyMWFcdTk0YTJcdTdmMzhcdTgwOWJcdTdlYjJcdTVjOTdcdTZlMmZcdTY3NjBcdTdiZDlcdTc2OGJcdTlhZDhcdTgxOGZcdTdmOTRcdTdjZDVcdTY0MWVcdTk1NTBcdTdhM2ZcdTU0NGFcdTU0ZTVcdTZiNGNcdTY0MDFcdTYyMDhcdTllM2RcdTgwZjNcdTc1OTlcdTUyNzJc'@;
put 'dTk3NjlcdTg0NWJcdTY4M2NcdTg2ZTRcdTk2MDFcdTk2OTRcdTk0ZWNcdTRlMmFcdTU0MDRcdTdlZDlcdTY4MzlcdThkZGZcdTgwMTVcdTY2ZjRcdTVlOWFcdTdmYjlcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxODRdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE4NF1bZ10uY2hhckNvZGVB'@;
put 'dCgwKSYmKElbX1sxODRdW2ddXT00NzEwNCtnLHlbNDcxMDQrZ109X1sxODRdW2ddKTtmb3IoX1sxODVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTU3YzJcdTgwM2ZcdTY4OTdcdTVkZTVcdTY1M2JcdTUyOWZcdTYwNmRcdTlmOWFcdTRmOWJcdThlYWNcdTUxNmNcdTViYWJcdTVmMTNcdTVkZTlcdTZjNWVcdTYyZjFcdThkMjFcdTUxNzFcdTk0YTlcdTUyZmVcdTZjOWZc'@;
put 'dTgyZGZcdTcyZDdcdTU3YTJcdTY3ODRcdThkMmRcdTU5MWZcdThmOWNcdTgzYzdcdTU0OTVcdTdiOGRcdTRmMzBcdTZjYmRcdTViNjRcdTU5ZDFcdTlmMTNcdTUzZTRcdTg2Y2FcdTlhYThcdThjMzdcdTgwYTFcdTY1NDVcdTk4N2VcdTU2ZmFcdTk2YzdcdTUyMmVcdTc0ZGNcdTUyNTBcdTVi'@;
put 'ZTFcdTYzMDJcdTg5MDJcdTRlNTZcdTYyZDBcdTYwMmFcdTY4ZmFcdTUxNzNcdTViOThcdTUxYTBcdTg5YzJcdTdiYTFcdTk5ODZcdTdmNTBcdTYwZWZcdTcwNGNcdThkMmZcdTUxNDlcdTVlN2ZcdTkwMWJcdTc0NzBcdTg5YzRcdTU3MmRcdTc4NDVcdTVmNTJcdTlmOWZcdTk1ZmFcdThmNjhc'@;
put 'dTliM2NcdThiZTFcdTc2NzhcdTY4NDJcdTY3ZGNcdThkZWFcdThkMzVcdTUyM2RcdThmOGFcdTZlZGFcdTY4Y2RcdTk1MDVcdTkwZWRcdTU2ZmRcdTY3OWNcdTg4ZjlcdThmYzdcdTU0YzhcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxODVdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE4NV1b'@;
put 'Z10uY2hhckNvZGVBdCgwKSYmKElbX1sxODVdW2ddXT00NzM2MCtnLHlbNDczNjArZ109X1sxODVdW2ddKTtmb3IoX1sxODZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTlhYjhcdTViNjlcdTZkNzdcdTZjMjZcdTRlYTVcdTViYjNcdTlhODdcdTkxNjNcdTYxYThcdTkwYWZcdTk3ZTlcdTU0MmJcdTZkYjVcdTViZDJcdTUxZmRcdTU1OGFcdTdmNTVcdTdmZjBcdTY0YmNc'@;
put 'dTYzNGRcdTY1ZjFcdTYxYmVcdTYwOGRcdTcxMGFcdTZjNTdcdTZjNDlcdTU5MmZcdTY3NmRcdTgyMmFcdTU4ZDVcdTU2OGVcdThjNmFcdTZiZWJcdTkwZGRcdTU5N2RcdTgwMTdcdTUzZjdcdTZkNjlcdTU0NzVcdTU1OWRcdTgzNzdcdTgzY2ZcdTY4MzhcdTc5YmVcdTU0OGNcdTRmNTVcdTU0'@;
put 'MDhcdTc2ZDJcdThjODlcdTk2MDJcdTZjYjNcdTZkYjhcdThkNmJcdTg5MTBcdTllNjRcdThkM2FcdTU2M2ZcdTllZDFcdTc1ZDVcdTVmODhcdTcyZTBcdTYwNjhcdTU0ZmNcdTRlYThcdTZhMmFcdTg4NjFcdTYwNTJcdThmNzBcdTU0YzRcdTcwZDhcdTg2NzlcdTllM2ZcdTZkMmFcdTViOGZc'@;
put 'dTVmMThcdTdlYTJcdTU1ODlcdTRmYWZcdTczMzRcdTU0M2NcdTUzOWFcdTUwMTlcdTU0MGVcdTU0N2NcdTRlNGVcdTVmZmRcdTc0NWFcdTU4ZjZcdTg0NmJcdTgwZTFcdTg3NzRcdTcyZDBcdTdjY2FcdTZlNTZcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxODZdLmxlbmd0aDsrK2cpNjU1'@;
put 'MzMhPT1fWzE4Nl1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxODZdW2ddXT00NzYxNitnLHlbNDc2MTYrZ109X1sxODZdW2ddKTtmb3IoX1sxODddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTVmMjdcdTg2NGVcdTU1MmNcdTYyYTRcdTRlOTJcdTZjYWFcdTYyMzdcdTgyYjFcdTU0ZDdcdTUzNGVcdTczM2VcdTZlZDFcdTc1M2JcdTUyMTJcdTUzMTZcdThiZGRcdTY5ZDBc'@;
put 'dTVmOGFcdTYwMDBcdTZkZWVcdTU3NGZcdTZiMjJcdTczYWZcdTY4NTNcdThmZDhcdTdmMTNcdTYzNjJcdTYwYTNcdTU1MjRcdTc1ZWFcdThjNjJcdTcxMTVcdTZkYTNcdTViYTZcdTVlN2JcdTgzNTJcdTYxNGNcdTllYzRcdTc4ZmFcdTg3NTdcdTdjMjdcdTc2ODdcdTUxZjBcdTYwZjZcdTcx'@;
put 'NGNcdTY2NDNcdTVlNGNcdTYwNGRcdThjMGVcdTcwNzBcdTYzMjVcdThmODlcdTVmYmRcdTYwNjJcdTg2ZDRcdTU2ZGVcdTZiYzFcdTYwOTRcdTYxNjdcdTUzNDlcdTYwZTBcdTY2NjZcdThkM2ZcdTc5ZmRcdTRmMWFcdTcwZTlcdTZjNDdcdThiYjNcdThiZjJcdTdlZDhcdTgzNjRcdTY2MGZc'@;
put 'dTVhNWFcdTliNDJcdTZkNTFcdTZkZjdcdThjNDFcdTZkM2JcdTRmMTlcdTcwNmJcdTgzYjdcdTYyMTZcdTYwZDFcdTk3MGRcdThkMjdcdTc5NzhcdTUxZmJcdTU3M2VcdTU3ZmFcdTY3M2FcdTc1NzhcdTdhM2RcdTc5ZWZcdTdiOTVcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxODddLmxl'@;
put 'bmd0aDsrK2cpNjU1MzMhPT1fWzE4N11bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxODddW2ddXT00Nzg3MitnLHlbNDc4NzIrZ109X1sxODddW2ddKTtmb3IoX1sxODhdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTgwOGNcdTk5NjVcdThmZjlcdTZmYzBcdThiYTVcdTllMjFcdTU5ZWNcdTdlZTlcdTdmMDlcdTU0MDlcdTY3ODFcdTY4ZDhcdThmOTFcdTdjNGRcdTk2YzZc'@;
put 'dTUzY2FcdTYwMjVcdTc1YmVcdTZjNzJcdTUzNzNcdTVhYzlcdTdlYTdcdTYzMjRcdTUxZTBcdTgxMGFcdTVkZjFcdTg0ZGZcdTYyODBcdTUxODBcdTViNjNcdTRmMGVcdTc5NmRcdTUyNDJcdTYwYjhcdTZkNGVcdTViYzRcdTViYzJcdThiYTFcdThiYjBcdTY1ZTJcdTVmY2NcdTk2NDVcdTU5'@;
put 'OTNcdTdlZTdcdTdlYWFcdTU2MDlcdTY3YjdcdTU5MzlcdTRmNzNcdTViYjZcdTUyYTBcdTgzNWFcdTk4OGFcdThkM2VcdTc1MzJcdTk0YmVcdTUwNDdcdTdhM2NcdTRlZjdcdTY3YjZcdTlhN2VcdTVhYzFcdTZiN2NcdTc2ZDFcdTU3NWFcdTVjMTZcdTdiM2FcdTk1ZjRcdTcxNGVcdTUxN2Nc'@;
put 'dTgwYTlcdTgyNzBcdTU5NzhcdTdmMDRcdTgzMjdcdTY4YzBcdTY3ZWNcdTc4YjFcdTc4NzdcdTYyZTNcdTYzNjFcdTdiODBcdTRmZWRcdTUyNmFcdTUxY2ZcdTgzNTBcdTY5ZGJcdTkyNzRcdThkZjVcdThkMzFcdTg5YzFcdTk1MmVcdTdiYWRcdTRlZjZcdWZmZmQiLnNwbGl0KCIiKSxnPTA7'@;
put 'ZyE9X1sxODhdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE4OF1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxODhdW2ddXT00ODEyOCtnLHlbNDgxMjgrZ109X1sxODhdW2ddKTtmb3IoX1sxODldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTUwNjVcdTgyMzBcdTUyNTFcdTk5NmZcdTZlMTBcdTZlODVcdTZkYTdcdTVlZmFcdTUwZjVcdTU5ZGNcdTVjMDZcdTZkNDZcdTZjNWZc'@;
put 'dTc1ODZcdTg0OGJcdTY4NjhcdTU5NTZcdThiYjJcdTUzMjBcdTkxNzFcdTk2NGRcdTg1NDlcdTY5MTJcdTc5MDFcdTcxMjZcdTgwZjZcdTRlYTRcdTkwY2FcdTZkNDdcdTlhODRcdTVhMDdcdTU2YmNcdTY0MDVcdTk0ZjBcdTc3ZWJcdTRmYTVcdTgxMWFcdTcyZTFcdTg5ZDJcdTk5N2FcdTdm'@;
put 'MzRcdTdlZGVcdTUyN2ZcdTY1NTlcdTkxNzVcdThmN2ZcdThmODNcdTUzZWJcdTdhOTZcdTYzZWRcdTYzYTVcdTc2ODZcdTc5ZjhcdTg4NTdcdTk2MzZcdTYyMmFcdTUyYWJcdTgyODJcdTY4NTRcdTY3NzBcdTYzNzdcdTc3NmJcdTdhZWRcdTZkMDFcdTdlZDNcdTg5ZTNcdTU5ZDBcdTYyMTJc'@;
put 'dTg1YzlcdTgyYTVcdTc1NGNcdTUwMWZcdTRlY2JcdTc1YTVcdThiZWJcdTVjNGFcdTVkZmVcdTdiNGJcdTY1YTRcdTkxZDFcdTRlY2FcdTZkMjVcdTg5NWZcdTdkMjdcdTk1MjZcdTRlYzVcdThjMjhcdThmZGJcdTk3NzNcdTY2NGJcdTc5ODFcdThmZDFcdTcwZWNcdTZkNzhcdWZmZmQiLnNw'@;
put 'bGl0KCIiKSxnPTA7ZyE9X1sxODldLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE4OV1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxODldW2ddXT00ODM4NCtnLHlbNDgzODQrZ109X1sxODldW2ddKTtmb3IoX1sxOTBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTVjM2RcdTUyYjJcdTgzNDZcdTUxNjJcdTgzMGVcdTc3NWJcdTY2NzZcdTljYjhcdTRlYWNcdTYwY2FcdTdjYmVc'@;
put 'dTdjYjNcdTdlY2ZcdTRlOTVcdThiNjZcdTY2NmZcdTk4ODhcdTk3NTlcdTU4ODNcdTY1NmNcdTk1NWNcdTVmODRcdTc1YzlcdTk3NTZcdTdhZGZcdTdhZGVcdTUxYzBcdTcwYWZcdTdhOThcdTYzZWFcdTdhNzZcdTdlYTBcdTczOTZcdTk3ZWRcdTRlNDVcdTcwNzhcdTRlNWRcdTkxNTJcdTUz'@;
put 'YTlcdTY1NTFcdTY1ZTdcdTgxZmNcdTgyMDVcdTU0OGVcdTVjMzFcdTc1OWFcdTk3YTBcdTYyZDhcdTcyZDlcdTc1YmRcdTVjNDVcdTlhNzlcdTgzY2FcdTVjNDBcdTU0ODBcdTc3ZTlcdTRlM2VcdTZjYWVcdTgwNWFcdTYyZDJcdTYzNmVcdTVkZThcdTUxNzdcdThkZGRcdThlMWVcdTk1MmZc'@;
put 'dTRmZjFcdTUzZTVcdTYwZTdcdTcwYWNcdTUyNjdcdTYzNTBcdTllNDNcdTVhMWZcdTUwMjZcdTc3MzdcdTUzNzdcdTdlZTJcdTY0ODVcdTY1MmJcdTYyODlcdTYzOThcdTUwMTRcdTcyMzVcdTg5YzlcdTUxYjNcdThiYzBcdTdlZGRcdTU3NDdcdTgzY2NcdTk0YTdcdTUxOWJcdTU0MWJcdTVj'@;
put 'ZmJcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxOTBdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE5MF1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxOTBdW2ddXT00ODY0MCtnLHlbNDg2NDArZ109X1sxOTBdW2ddKTtmb3IoX1sxOTFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTRmY2FcdTdhZTNcdTZkNWFcdTkwZTFcdTlhOGZcdTU1ODBcdTU0OTZcdTUzNjFcdTU0YWZc'@;
put 'dTVmMDBcdTYzZTlcdTY5NzdcdTUxZWZcdTYxNjhcdTUyMGFcdTU4MmFcdTUyZDhcdTU3NGVcdTc4MGRcdTc3MGJcdTVlYjdcdTYxNzdcdTdjZTBcdTYyNWJcdTYyOTdcdTRlYTJcdTcwOTVcdTgwMDNcdTYyZjdcdTcwZTRcdTk3NjBcdTU3NzdcdTgyZGJcdTY3ZWZcdTY4ZjVcdTc4ZDVcdTk4'@;
put 'OTdcdTc5ZDFcdTU4ZjNcdTU0YjNcdTUzZWZcdTZlMzRcdTUxNGJcdTUyM2JcdTViYTJcdThiZmVcdTgwYWZcdTU1NDNcdTU3YTZcdTYwNzNcdTU3NTFcdTU0MmRcdTdhN2FcdTYwNTBcdTViNTRcdTYzYTdcdTYyYTBcdTUzZTNcdTYyNjNcdTViYzdcdTY3YWZcdTU0ZWRcdTdhOWZcdTgyZTZc'@;
put 'dTkxNzdcdTVlOTNcdTg4ZTRcdTU5MzhcdTU3YWVcdTYzMGVcdThkZThcdTgwZWZcdTU3NTdcdTdiNzdcdTRmYTlcdTVmZWJcdTViYmRcdTZiM2VcdTUzMjFcdTdiNTBcdTcyYzJcdTY4NDZcdTc3ZmZcdTc3MzZcdTY1ZjdcdTUxYjVcdTRlOGZcdTc2ZDRcdTVjYmZcdTdhYTVcdTg0NzVcdTU5'@;
put 'NGVcdTliNDFcdTUwODBcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxOTFdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE5MV1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxOTFdW2ddXT00ODg5NitnLHlbNDg4OTYrZ109X1sxOTFdW2ddKTtmb3IoX1sxOTJdPSJcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTk5ODhcdTYxMjdcdTZlODNcdTU3NjRcdTY2MDZcdTYzNDZcdTU2ZjBc'@;
put 'dTYyZWNcdTYyNjlcdTVlZDNcdTk2MTRcdTU3ODNcdTYyYzlcdTU1ODdcdTg3MjFcdTgxNGFcdThmYTNcdTU1NjZcdTgzYjFcdTY3NjVcdThkNTZcdTg0ZGRcdTVhNmFcdTY4MGZcdTYyZTZcdTdiZWVcdTk2MTFcdTUxNzBcdTZmOWNcdThjMzBcdTYzZmRcdTg5YzhcdTYxZDJcdTdmMDZcdTcw'@;
put 'YzJcdTZlZTVcdTc0MDVcdTY5OTRcdTcyZmNcdTVlY2FcdTkwY2VcdTY3MTdcdTZkNmFcdTYzNWVcdTUyYjNcdTcyNjJcdTgwMDFcdTRmNmNcdTU5ZTVcdTkxNmFcdTcwZDlcdTZkOWRcdTUyZDJcdTRlNTBcdTk2ZjdcdTk1NmRcdTg1N2VcdTc4Y2FcdTdkMmZcdTUxMjFcdTU3OTJcdTY0YzJc'@;
put 'dTgwOGJcdTdjN2JcdTZjZWFcdTY4ZjFcdTY5NWVcdTUxYjdcdTUzOThcdTY4YThcdTcyODFcdTllY2VcdTdiZjFcdTcyZjhcdTc5YmJcdTZmMTNcdTc0MDZcdTY3NGVcdTkxY2NcdTljYTRcdTc5M2NcdTgzODlcdTgzNTRcdTU0MGZcdTY4MTdcdTRlM2RcdTUzODlcdTUyYjFcdTc4M2VcdTUz'@;
put 'ODZcdTUyMjlcdTUwODhcdTRmOGJcdTRmZDBcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxOTJdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE5Ml1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxOTJdW2ddXT00OTE1MitnLHlbNDkxNTIrZ109X1sxOTJdW2ddKTtmb3IoX1sxOTNdPSJcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc1ZTJcdTdhY2JcdTdjOTJcdTZjYTVcdTk2YjZc'@;
put 'dTUyOWJcdTc0ODNcdTU0ZTlcdTRmZTlcdTgwNTRcdTgzYjJcdThmZGVcdTk1NzBcdTVlYzlcdTYwMWNcdTZkOWZcdTVlMThcdTY1NWJcdTgxMzhcdTk0ZmVcdTYwNGJcdTcwYmNcdTdlYzNcdTdjYWVcdTUxYzlcdTY4ODFcdTdjYjFcdTgyNmZcdTRlMjRcdThmODZcdTkxY2ZcdTY2N2VcdTRl'@;
put 'YWVcdThjMDVcdTY0YTlcdTgwNGFcdTUwZGFcdTc1OTdcdTcxY2VcdTViZTVcdThmYmRcdTZmNjZcdTRlODZcdTY0ODJcdTk1NjNcdTVlZDZcdTY1OTlcdTUyMTdcdTg4YzJcdTcwYzhcdTUyYTNcdTczMGVcdTc0MzNcdTY3OTdcdTc4ZjdcdTk3MTZcdTRlMzRcdTkwYmJcdTljZGVcdTZkY2Jc'@;
put 'dTUxZGJcdThkNDFcdTU0MWRcdTYyY2VcdTczYjJcdTgzZjFcdTk2ZjZcdTlmODRcdTk0YzNcdTRmMzZcdTdmOWFcdTUxY2NcdTcwNzVcdTk2NzVcdTVjYWRcdTk4ODZcdTUzZTZcdTRlZTRcdTZlOWNcdTc0MDlcdTY5YjRcdTc4NmJcdTk5OGZcdTc1NTlcdTUyMThcdTc2MjRcdTZkNDFcdTY3'@;
put 'ZjNcdTUxNmRcdTlmOTlcdTgwNGJcdTU0OTlcdTdiM2NcdTdhYmZcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxOTNdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE5M11bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxOTNdW2ddXT00OTQwOCtnLHlbNDk0MDgrZ109X1sxOTNdW2ddKTtmb3IoX1sx'@;
put 'OTRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTk2ODZcdTU3ODRcdTYyZTJc'@;
put 'dTk2NDdcdTY5N2NcdTVhMDRcdTY0MDJcdTdiZDNcdTZmMGZcdTk2NGJcdTgyYTZcdTUzNjJcdTk4ODVcdTVlOTBcdTcwODlcdTYzYjNcdTUzNjRcdTg2NGZcdTljODFcdTllOTNcdTc4OGNcdTk3MzJcdThkZWZcdThkNDJcdTllN2ZcdTZmNWVcdTc5ODRcdTVmNTVcdTk2NDZcdTYyMmVcdTlh'@;
put 'NzRcdTU0MTVcdTk0ZGRcdTRmYTNcdTY1YzVcdTVjNjVcdTVjNjFcdTdmMTVcdTg2NTFcdTZjMmZcdTVmOGJcdTczODdcdTZlZTRcdTdlZmZcdTVjZTZcdTYzMWJcdTViNmFcdTZlZTZcdTUzNzVcdTRlNzFcdTYzYTBcdTc1NjVcdTYyYTFcdThmNmVcdTRmMjZcdTRlZDFcdTZjYTZcdTdlYjZc'@;
put 'dThiYmFcdTg0MWRcdTg3YmFcdTdmNTdcdTkwM2JcdTk1MjNcdTdiYTlcdTlhYTFcdTg4ZjhcdTg0M2RcdTZkMWJcdTlhODZcdTdlZGNcdTU5ODhcdTllYmJcdTczOWJcdTc4MDFcdTg2ODJcdTlhNmNcdTlhODJcdTU2MWJcdTU0MTdcdTU3Y2JcdTRlNzBcdTllYTZcdTUzNTZcdThmYzhcdTgx'@;
put 'MDlcdTc3OTJcdTk5OTJcdTg2ZWVcdTZlZTFcdTg1MTNcdTY2ZmNcdTYxNjJcdTZmMmJcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxOTRdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE5NF1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxOTRdW2ddXT00OTY2NCtnLHlbNDk2NjQrZ109X1sxOTRd'@;
put 'W2ddKTtmb3IoX1sxOTVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdThjMjlc'@;
put 'dTgyOTJcdTgzMmJcdTc2ZjJcdTZjMTNcdTVmZDlcdTgzYmRcdTczMmJcdTgzMDVcdTk1MWFcdTZiZGJcdTc3ZGJcdTk0YzZcdTUzNmZcdTgzMDJcdTUxOTJcdTVlM2RcdThjOGNcdThkMzhcdTRlNDhcdTczYWJcdTY3OWFcdTY4ODVcdTkxNzZcdTk3MDlcdTcxNjRcdTZjYTFcdTc3MDlcdTVh'@;
put 'OTJcdTk1NDFcdTZiY2ZcdTdmOGVcdTY2MjdcdTViZDBcdTU5YjlcdTVhOWFcdTk1ZThcdTk1ZjdcdTRlZWNcdTg0MGNcdTg0OTlcdTZhYWNcdTc2ZGZcdTk1MzBcdTczMWJcdTY4YTZcdTViNWZcdTc3MmZcdTkxOWFcdTk3NjFcdTdjZGNcdThmZjdcdThjMWNcdTVmMjVcdTdjNzNcdTc5ZDhc'@;
put 'dTg5YzVcdTZjY2NcdTg3MWNcdTViYzZcdTVlNDJcdTY4YzlcdTc3MjBcdTdlZjVcdTUxOTVcdTUxNGRcdTUyYzlcdTVhMjlcdTdmMDVcdTk3NjJcdTgyZDdcdTYzY2ZcdTc3ODRcdTg1ZDBcdTc5ZDJcdTZlM2FcdTVlOTlcdTU5OTlcdTg1MTFcdTcwNmRcdTZjMTFcdTYyYmZcdTc2YmZcdTY1'@;
put 'NGZcdTYwYWZcdTk1ZmRcdTY2MGVcdTg3OWZcdTllMjNcdTk0ZWRcdTU0MGRcdTU0N2RcdThjMmNcdTY0NzhcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxOTVdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE5NV1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxOTVdW2ddXT00OTkyMCtnLHlbNDk5'@;
put 'MjArZ109X1sxOTVdW2ddKTtmb3IoX1sxOTZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdTY0NzlcdTg2MTFcdTZhMjFcdTgxOWNcdTc4ZThcdTY0NjlcdTliNTRcdTYyYjlcdTY3MmJcdTgzYWJcdTU4YThcdTllZDhcdTZjYWJcdTZmMjBcdTViZGVcdTk2NGNcdThjMGJcdTcyNWZcdTY3ZDBcdTYyYzdcdTcyNjFcdTRlYTlcdTU5YzZcdTZiY2RcdTU4OTNcdTY2YWVcdTVl'@;
put 'NTVcdTUyZGZcdTYxNTVcdTY3MjhcdTc2ZWVcdTc3NjZcdTcyNjdcdTdhNDZcdTYyZmZcdTU0ZWFcdTU0NTBcdTk0YTBcdTkwYTNcdTVhMWNcdTdlYjNcdTZjMTZcdTRlNDNcdTU5NzZcdTgwMTBcdTU5NDhcdTUzNTdcdTc1MzdcdTk2YmVcdTU2Y2FcdTYzMjBcdTgxMTFcdTYwN2NcdTk1Zjlc'@;
put 'dTZkZDZcdTU0NjJcdTk5ODFcdTUxODVcdTVhZTlcdTgwZmRcdTU5YWVcdTk3MTNcdTUwMmFcdTZjZTVcdTVjM2NcdTYyZGZcdTRmNjBcdTUzM2ZcdTgxN2JcdTkwMDZcdTZlYmFcdTg1MmJcdTYyYzhcdTVlNzRcdTc4YmVcdTY0YjVcdTYzN2JcdTVmZjVcdTVhMThcdTkxN2ZcdTllMWZcdTVj'@;
put 'M2ZcdTYzNGZcdTgwNDJcdTViN2RcdTU1NmVcdTk1NGFcdTk1NGRcdTZkODVcdTYwYThcdTY3ZTBcdTcyZGVcdTUxZGRcdTViODFcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxOTZdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE5Nl1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxOTZdW2ddXT01'@;
put 'MDE3NitnLHlbNTAxNzYrZ109X1sxOTZdW2ddKTtmb3IoX1sxOTddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdTYyZTdcdTZjZGVcdTcyNWJcdTYyNmRcdTk0YWVcdTdlYmRcdTgxMTNcdTZkNTNcdTUxOWNcdTVmMDRcdTU5NzRcdTUyYWFcdTYwMTJcdTU5NzNcdTY2OTZcdTg2NTBcdTc1OWZcdTYzMmFcdTYxZTZcdTdjZWZcdThiZmFcdTU0ZTZcdTZiMjdcdTllMjVcdTZi'@;
put 'YjRcdTg1ZDVcdTU0NTVcdTUwNzZcdTZjYTRcdTU1NmFcdThkYjRcdTcyMmNcdTVlMTVcdTYwMTVcdTc0MzZcdTYyY2RcdTYzOTJcdTcyNGNcdTVmOThcdTZlNDNcdTZkM2VcdTY1MDBcdTZmNThcdTc2ZDhcdTc4ZDBcdTc2ZmNcdTc1NTRcdTUyMjRcdTUzZGJcdTRlNTNcdTVlOWVcdTY1YzFc'@;
put 'dTgwMmFcdTgwZDZcdTYyOWJcdTU0ODZcdTUyMjhcdTcwYWVcdTg4OGRcdThkZDFcdTZjZTFcdTU0NzhcdTgwZGFcdTU3ZjlcdTg4ZjRcdThkNTRcdTk2NmFcdTkxNGRcdTRmNjlcdTZjOWJcdTU1YjdcdTc2YzZcdTc4MzBcdTYyYThcdTcwZjlcdTZmOGVcdTVmNmRcdTg0ZWNcdTY4ZGFcdTc4'@;
put 'N2NcdTdiZjdcdTgxYThcdTY3MGJcdTllNGZcdTYzNjdcdTc4YjBcdTU3NmZcdTc4MTJcdTk3MzlcdTYyNzlcdTYyYWJcdTUyODhcdTc0MzVcdTZiZDdcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxOTddLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE5N11bZ10uY2hhckNvZGVBdCgwKSYmKElb'@;
put 'X1sxOTddW2ddXT01MDQzMitnLHlbNTA0MzIrZ109X1sxOTddW2ddKTtmb3IoX1sxOThdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTU1NjRcdTgxM2VcdTc1YjJcdTc2YWVcdTUzMzlcdTc1ZGVcdTUwZmJcdTVjNDFcdThiNmNcdTdiYzdcdTUwNGZcdTcyNDdcdTlhOTdcdTk4ZDhcdTZmMDJcdTc0ZTJcdTc5NjhcdTY0ODdcdTc3YTVcdTYyZmNcdTk4OTFcdThkMmJcdTU0'@;
put 'YzFcdTgwNThcdTRlNTJcdTU3NmFcdTgyZjlcdTg0MGRcdTVlNzNcdTUxZWRcdTc0ZjZcdThiYzRcdTVjNGZcdTU3NjFcdTZjZmNcdTk4ODdcdTVhNDZcdTc4MzRcdTliNDRcdThmZWJcdTdjOTVcdTUyNTZcdTYyNTFcdTk0ZmFcdTRlYzZcdTgzODZcdTg0NjFcdTgzZTlcdTg0YjJcdTU3ZDRc'@;
put 'dTY3MzRcdTU3MDNcdTY2NmVcdTZkNjZcdThjMzFcdTY2ZGRcdTcwMTFcdTY3MWZcdTZiM2FcdTY4MTZcdTYyMWFcdTU5YmJcdTRlMDNcdTUxYzRcdTZmMDZcdTY3ZDJcdTZjOGZcdTUxNzZcdTY4Y2JcdTU5NDdcdTZiNjdcdTc1NjZcdTVkMGVcdTgxMTBcdTlmNTBcdTY1ZDdcdTc5NDhcdTc5'@;
put 'NDFcdTlhOTFcdThkNzdcdTVjODJcdTRlNWVcdTRmMDFcdTU0MmZcdTU5NTFcdTc4MGNcdTU2NjhcdTZjMTRcdThmYzRcdTVmMDNcdTZjN2RcdTZjZTNcdThiYWJcdTYzOTBcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxOThdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE5OF1bZ10uY2hhckNv'@;
put 'ZGVBdCgwKSYmKElbX1sxOThdW2ddXT01MDY4OCtnLHlbNTA2ODgrZ109X1sxOThdW2ddKTtmb3IoX1sxOTldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTYwNzBcdTZkM2RcdTcyNzVcdTYyNjZcdTk0OGVcdTk0YzVcdTUzNDNcdThmYzFcdTdiN2VcdTRlZGZcdThjMjZcdTRlN2VcdTllZDRcdTk0YjFcdTk0YjNcdTUyNGRcdTZmNWNcdTkwNjNcdTZkNDVcdThjMzRcdTU4'@;
put 'MTFcdTVkNGNcdTZiMjBcdTZiNDlcdTY3YWFcdTU0NWJcdTgxNTRcdTdmOGNcdTU4OTlcdTg1MzdcdTVmM2FcdTYyYTJcdTZhNDdcdTk1MzlcdTY1NzJcdTYwODRcdTY4NjVcdTc3YTdcdTRlNTRcdTRmYThcdTVkZTdcdTk3OThcdTY0YWNcdTdmZDhcdTVjZWRcdTRmY2ZcdTdhOGRcdTUyMDdc'@;
put 'dTgzMDRcdTRlMTRcdTYwMmZcdTdhODNcdTk0YTZcdTRmYjVcdTRlYjJcdTc5ZTZcdTc0MzRcdTUyZTRcdTgyYjlcdTY0ZDJcdTc5YmRcdTViZGRcdTZjODFcdTk3NTJcdThmN2JcdTZjMjJcdTUwM2VcdTUzN2ZcdTZlMDVcdTY0Y2VcdTY2NzRcdTZjMzBcdTYwYzVcdTk4NzdcdThiZjdcdTVl'@;
put 'ODZcdTc0M2NcdTdhNzdcdTc5Y2JcdTRlMThcdTkwYjFcdTc0MDNcdTZjNDJcdTU2ZGFcdTkxNGJcdTZjYzVcdThkOGJcdTUzM2FcdTg2YzZcdTY2ZjJcdThlYWZcdTVjNDhcdTlhNzFcdTZlMjBcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxOTldLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE5'@;
put 'OV1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxOTldW2ddXT01MDk0NCtnLHlbNTA5NDQrZ109X1sxOTldW2ddKTtmb3IoX1syMDBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTUzZDZcdTVhMzZcdTlmOGJcdThkYTNcdTUzYmJcdTU3MDhcdTk4YTdcdTY3NDNcdTkxOWJcdTZjYzlcdTUxNjhcdTc1Y2FcdTYyZjNcdTcyYWNcdTUyMzhcdTUyOWRcdTdmM2FcdTcwOTRcdTc2'@;
put 'MzhcdTUzNzRcdTllNGFcdTY5YjdcdTc4NmVcdTk2YzBcdTg4ZDlcdTdmYTRcdTcxMzZcdTcxYzNcdTUxODlcdTY3ZDNcdTc0ZTRcdTU4ZTRcdTY1MThcdTU2YjdcdThiYTlcdTk5NzZcdTYyNzBcdTdlZDVcdTYwZjlcdTcwZWRcdTU4ZWNcdTRlYzFcdTRlYmFcdTVmY2RcdTk3ZTdcdTRlZmJc'@;
put 'dThiYTRcdTUyMDNcdTU5OGFcdTdlYWJcdTYyNTRcdTRlY2RcdTY1ZTVcdTYyMGVcdTgzMzhcdTg0YzlcdTgzNjNcdTg3OGRcdTcxOTRcdTZlYjZcdTViYjlcdTdlZDJcdTUxOTdcdTYzYzlcdTY3ZDRcdTgwODlcdTgzMzlcdTg4MTVcdTUxMTJcdTViN2FcdTU5ODJcdThmYjFcdTRlNzNcdTZj'@;
put 'NWRcdTUxNjVcdTg5MjVcdThmNmZcdTk2MmVcdTg1NGFcdTc0NWVcdTk1MTBcdTk1ZjBcdTZkYTZcdTgyZTVcdTVmMzFcdTY0OTJcdTZkMTJcdTg0MjhcdTgxNmVcdTljYzNcdTU4NWVcdThkNWJcdTRlMDlcdTUzYzFcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMDBdLmxlbmd0aDsrK2cp'@;
put 'NjU1MzMhPT1fWzIwMF1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMDBdW2ddXT01MTIwMCtnLHlbNTEyMDArZ109X1syMDBdW2ddKTtmb3IoX1syMDFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTRmMWVcdTY1NjNcdTY4NTFcdTU1ZDNcdTRlMjdcdTY0MTRcdTlhOWFcdTYyNmJcdTVhYzJcdTc0NWZcdTgyNzJcdTZkYTlcdTY4ZWVcdTUwZTdcdTgzOGVcdTc4MDJcdTY3'@;
put 'NDBcdTUyMzlcdTZjOTlcdTdlYjFcdTUwYmJcdTU1NjVcdTcxNWVcdTdiNWJcdTY2NTJcdTczY2FcdTgyZWJcdTY3NDlcdTVjNzFcdTUyMjBcdTcxN2RcdTg4NmJcdTk1ZWFcdTk2NTVcdTY0YzVcdThkNjFcdTgxYjNcdTU1ODRcdTZjNTVcdTYyNDdcdTdmMmVcdTU4OTJcdTRmMjRcdTU1NDZc'@;
put 'dThkNGZcdTY2NGNcdTRlMGFcdTVjMWFcdTg4ZjNcdTY4YTJcdTYzNGVcdTdhMGRcdTcwZTdcdTgyOGRcdTUyZmFcdTk3ZjZcdTVjMTFcdTU0ZThcdTkwYjVcdTdlY2RcdTU5NjJcdThkNGFcdTg2YzdcdTgyMGNcdTgyMGRcdThkNjZcdTY0NDRcdTVjMDRcdTYxNTFcdTZkODlcdTc5M2VcdThi'@;
put 'YmVcdTc4MzdcdTc1MzNcdTU0N2JcdTRmMzhcdThlYWJcdTZkZjFcdTVhMjBcdTdlYzVcdTc5NWVcdTZjODhcdTViYTFcdTVhNzZcdTc1MWFcdTgwYmVcdTYxNGVcdTZlMTdcdTU4ZjBcdTc1MWZcdTc1MjVcdTcyNzJcdTUzNDdcdTdlZjNcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMDFd'@;
put 'Lmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIwMV1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMDFdW2ddXT01MTQ1NitnLHlbNTE0NTYrZ109X1syMDFdW2ddKTtmb3IoX1syMDJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc3MDFcdTc2ZGJcdTUyNjlcdTgwZGNcdTU3MjNcdTVlMDhcdTU5MzFcdTcyZWVcdTY1YmRcdTZlN2ZcdThiZDdcdTVjMzhcdTg2NzFcdTUzNDFcdTc3'@;
put 'ZjNcdTYyZmVcdTY1ZjZcdTRlYzBcdTk4ZGZcdTg2ODBcdTViOWVcdThiYzZcdTUzZjJcdTc3ZTJcdTRmN2ZcdTVjNGVcdTlhNzZcdTU5Y2JcdTVmMGZcdTc5M2FcdTU4ZWJcdTRlMTZcdTY3ZmZcdTRlOGJcdTYyZWRcdThhOTNcdTkwMWRcdTUyYmZcdTY2MmZcdTU1ZGNcdTU2NmNcdTkwMDJc'@;
put 'dTRlZDVcdTRmOGRcdTkxY2FcdTk5NzBcdTZjMGZcdTVlMDJcdTYwNDNcdTViYTRcdTg5YzZcdThiZDVcdTY1MzZcdTYyNGJcdTk5OTZcdTViODhcdTViZmZcdTYzODhcdTU1MmVcdTUzZDdcdTc2MjZcdTUxN2RcdTg1MmNcdTY3YTJcdTY4YjNcdTZiOGFcdTYyOTJcdThmOTNcdTUzZDRcdTgy'@;
put 'MTJcdTZkZDFcdTc1OGZcdTRlNjZcdThkNGVcdTViNzBcdTcxOWZcdTg1YWZcdTY2OTFcdTY2ZDlcdTdmNzJcdTg3MDBcdTllY2RcdTlmMjBcdTVjNWVcdTY3MmZcdThmZjBcdTY4MTFcdTY3NWZcdTYyMGRcdTdhZDZcdTU4ODVcdTVlYjZcdTY1NzBcdTZmMzFcdWZmZmQiLnNwbGl0KCIiKSxn'@;
put 'PTA7ZyE9X1syMDJdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIwMl1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMDJdW2ddXT01MTcxMitnLHlbNTE3MTIrZ109X1syMDJdW2ddKTtmb3IoX1syMDNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTYwNTVcdTUyMzdcdTgwMGRcdTY0NTRcdTg4NzBcdTc1MjlcdTVlMDVcdTY4MTNcdTYyZjRcdTk3MWNcdTUzY2NcdTcyM2RcdThj'@;
put 'MDFcdTZjMzRcdTc3NjFcdTdhMGVcdTU0MmVcdTc3YWNcdTk4N2FcdTgyMWNcdThiZjRcdTc4NTVcdTY3MTRcdTcwYzFcdTY1YWZcdTY0OTVcdTU2MzZcdTYwMWRcdTc5YzFcdTUzZjhcdTRlMWRcdTZiN2JcdTgwODZcdTViZmFcdTU1ZTNcdTU2ZGJcdTRmM2FcdTRmM2NcdTk5NzJcdTVkZjNc'@;
put 'dTY3N2VcdTgwMzhcdTYwMDJcdTk4ODJcdTkwMDFcdTViOGJcdThiYmNcdThiZjVcdTY0MWNcdTgyNThcdTY0ZGVcdTU1ZmRcdTgyY2ZcdTkxNjVcdTRmZDdcdTdkMjBcdTkwMWZcdTdjOWZcdTUwZjNcdTU4NTFcdTZlYWZcdTViYmZcdThiYzlcdTgwODNcdTkxNzhcdTg0OWNcdTdiOTdcdTg2'@;
put 'N2RcdTk2OGJcdTk2OGZcdTdlZTVcdTlhZDNcdTc4OGVcdTVjODFcdTdhNTdcdTkwNDJcdTk2YTdcdTc5NWZcdTViNTlcdTYzNWZcdTdiMGJcdTg0ZDFcdTY4YWRcdTU1MDZcdTdmMjlcdTc0MTBcdTdkMjJcdTk1MDFcdTYyNDBcdTU4NGNcdTRlZDZcdTViODNcdTU5NzlcdTU4NTRcdWZmZmQi'@;
put 'LnNwbGl0KCIiKSxnPTA7ZyE9X1syMDNdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIwM11bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMDNdW2ddXT01MTk2OCtnLHlbNTE5NjgrZ109X1syMDNdW2ddKTtmb3IoX1syMDRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTczNmRcdTYzMWVcdThlNGJcdThlMGZcdTgwY2VcdTgyZDRcdTYyYWNcdTUzZjBcdTZjZjBcdTkxNWVcdTU5'@;
put 'MmFcdTYwMDFcdTZjNzBcdTU3NGRcdTY0NGFcdThkMmFcdTc2MmJcdTZlZTlcdTU3NWJcdTZhODBcdTc1ZjBcdTZmNmRcdThjMmRcdThjMDhcdTU3NjZcdTZiZWZcdTg4OTJcdTc4YjNcdTYzYTJcdTUzZjlcdTcwYWRcdTZjNjRcdTU4NThcdTY0MmFcdTU4MDJcdTY4ZTBcdTgxOWJcdTU1MTBc'@;
put 'dTdjZDZcdTUwMThcdThlYmFcdTZkY2NcdThkOWZcdTcwZWJcdTYzOGZcdTZkOWJcdTZlZDRcdTdlZTZcdTg0MDRcdTY4NDNcdTkwMDNcdTZkZDhcdTk2NzZcdThiYThcdTU5NTdcdTcyNzlcdTg1ZTRcdTgxN2VcdTc1YmNcdThhOGFcdTY4YWZcdTUyNTRcdThlMjJcdTk1MTFcdTYzZDBcdTk4'@;
put 'OThcdThlNDRcdTU1N2NcdTRmNTNcdTY2ZmZcdTU2OGZcdTYwZDVcdTZkOTVcdTUyNDNcdTVjNDlcdTU5MjlcdTZkZmJcdTU4NmJcdTc1MzBcdTc1MWNcdTYwNmNcdTgyMTRcdTgxNDZcdTYzMTFcdTY3NjFcdThmZTJcdTc3M2FcdThkZjNcdThkMzRcdTk0YzFcdTVlMTZcdTUzODVcdTU0MmNc'@;
put 'dTcwYzNcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMDRdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIwNF1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMDRdW2ddXT01MjIyNCtnLHlbNTIyMjQrZ109X1syMDRdW2ddKTtmb3IoX1syMDVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZjNDBcdTVlZjdcdTUwNWNcdTRlYWRcdTVlYWRcdTYzM2FcdTgyNDdcdTkwMWFcdTY4'@;
put 'NTBcdTkxNmVcdTc3YjNcdTU0MGNcdTk0ZGNcdTVmNjRcdTdhZTVcdTY4NzZcdTYzNDVcdTdiNTJcdTdlZGZcdTc1ZGJcdTUwNzdcdTYyOTVcdTU5MzRcdTkwMGZcdTUxZjhcdTc5YzNcdTdhODFcdTU2ZmVcdTVmOTJcdTkwMTRcdTZkODJcdTVjNjBcdTU3MWZcdTU0MTBcdTUxNTRcdTZlNGRc'@;
put 'dTU2ZTJcdTYzYThcdTk4OTNcdTgxN2ZcdTg3MTVcdTg5MmFcdTkwMDBcdTU0MWVcdTVjNmZcdTgxYzBcdTYyZDZcdTYyNThcdTgxMzFcdTllMzVcdTk2NDBcdTlhNmVcdTlhN2NcdTY5MmRcdTU5YTVcdTYyZDNcdTU1M2VcdTYzMTZcdTU0YzdcdTg2ZDlcdTZkM2NcdTVhMDNcdTc0ZTZcdTg4'@;
put 'OWNcdTZiNmFcdTU5MTZcdThjNGNcdTVmMmZcdTZlN2VcdTczYTlcdTk4N2RcdTRlMzhcdTcwZjdcdTViOGNcdTc4OTdcdTYzM2RcdTY2NWFcdTc2OTZcdTYwY2JcdTViOWJcdTVhNDlcdTRlMDdcdTgxNTVcdTZjNmFcdTczOGJcdTRlYTFcdTY3ODlcdTdmNTFcdTVmODBcdTY1ZmFcdTY3MWJc'@;
put 'dTVmZDhcdTU5ODRcdTVhMDFcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMDVdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIwNV1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMDVdW2ddXT01MjQ4MCtnLHlbNTI0ODArZ109X1syMDVdW2ddKTtmb3IoX1syMDZdPSJcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTVkY2RcdTVmYWVcdTUzNzFcdTk3ZTZcdThmZGRcdTY4NDVcdTU2'@;
put 'ZjRcdTU1MmZcdTYwZGZcdTRlM2FcdTZmNGRcdTdlZjRcdTgyYzdcdTg0MGVcdTU5ZDRcdTRmMWZcdTRmMmFcdTVjM2VcdTdlYWNcdTY3MmFcdTg1MWFcdTU0NzNcdTc1NGZcdTgwYzNcdTU1ODJcdTliNGZcdTRmNGRcdTZlMmRcdThjMTNcdTVjMDlcdTYxNzBcdTUzNmJcdTc2MWZcdTZlMjlc'@;
put 'dTg2OGFcdTY1ODdcdTk1ZmJcdTdlYjlcdTU0M2JcdTdhMzNcdTdkMGFcdTk1ZWVcdTU1ZTFcdTdmYzFcdTc0ZWVcdTYzMWRcdTg3MTdcdTZkYTFcdTdhOWRcdTYyMTFcdTY1YTFcdTUzNjdcdTYzZTFcdTZjODNcdTVkZWJcdTU0NWNcdTk0YThcdTRlNGNcdTZjNjFcdThiZWNcdTVjNGJcdTY1'@;
put 'ZTBcdTgyOWNcdTY4YTdcdTU0M2VcdTU0MzRcdTZiY2JcdTZiNjZcdTRlOTRcdTYzNDJcdTUzNDhcdTgyMWVcdTRmMGRcdTRmYWVcdTU3NWVcdTYyMGFcdTk2ZmVcdTY2NjRcdTcyNjlcdTUyZmZcdTUyYTFcdTYwOWZcdThiZWZcdTY2MTRcdTcxOTlcdTY3OTBcdTg5N2ZcdTc4NTJcdTc3ZmRc'@;
put 'dTY2NzBcdTU2M2JcdTU0MzhcdTk1MjFcdTcyN2FcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMDZdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIwNl1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMDZdW2ddXT01MjczNitnLHlbNTI3MzYrZ109X1syMDZdW2ddKTtmb3IoX1syMDddPSJcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTdhMDBcdTYwNmZcdTVlMGNcdTYwODlcdTgx'@;
put 'OWRcdTU5MTVcdTYwZGNcdTcxODRcdTcwZWZcdTZlYWFcdTZjNTBcdTcyODBcdTZhODRcdTg4YWRcdTVlMmRcdTRlNjBcdTVhYjNcdTU1OWNcdTk0ZTNcdTZkMTdcdTdjZmJcdTk2OTlcdTYyMGZcdTdlYzZcdTc3OGVcdTg2N2VcdTUzMjNcdTk3MWVcdThmOTZcdTY2ODdcdTVjZTFcdTRmYTBc'@;
put 'dTcyZWRcdTRlMGJcdTUzYTZcdTU5MGZcdTU0MTNcdTYzODBcdTk1MjhcdTUxNDhcdTRlZDlcdTljOWNcdTdlYTRcdTU0YjhcdThkMjRcdTg4NTRcdTgyMzdcdTk1ZjJcdTZkOGVcdTVmMjZcdTVhY2NcdTY2M2VcdTk2NjlcdTczYjBcdTczMmVcdTUzYmZcdTgxN2FcdTk5ODVcdTdmYTFcdTVi'@;
put 'YWFcdTk2NzdcdTk2NTBcdTdlYmZcdTc2ZjhcdTUzYTJcdTk1NzZcdTk5OTlcdTdiYjFcdTg5NDRcdTZlNThcdTRlNjFcdTdmZDRcdTc5NjVcdThiZTZcdTYwZjNcdTU0Y2RcdTRlYWJcdTk4NzlcdTVkZjdcdTZhNjFcdTUwY2ZcdTU0MTFcdThjNjFcdTg0MjdcdTc4NWRcdTk3MDRcdTUyNGFc'@;
put 'dTU0ZWVcdTU2YTNcdTk1MDBcdTZkODhcdTViYjVcdTZkYzZcdTY2NTNcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMDddLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIwN11bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMDddW2ddXT01Mjk5MitnLHlbNTI5OTIrZ109X1syMDddW2ddKTtmb3Io'@;
put 'X1syMDhdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTVjMGZcdTViNWRcdTY4'@;
put 'MjFcdTgwOTZcdTU1NzhcdTdiMTFcdTY1NDhcdTY5NTRcdTRlOWJcdTZiNDdcdTg3NGVcdTk3OGJcdTUzNGZcdTYzMWZcdTY0M2FcdTkwYWFcdTY1OWNcdTgwYzFcdThjMTBcdTUxOTlcdTY4YjBcdTUzNzhcdTg3ZjlcdTYxYzhcdTZjYzRcdTZjZmJcdThjMjJcdTVjNTFcdTg1YWFcdTgyYWZc'@;
put 'dTk1MGNcdTZiMjNcdThmOWJcdTY1YjBcdTVmZmJcdTVmYzNcdTRmZTFcdTg4NDVcdTY2MWZcdTgxNjVcdTczMjlcdTYwZmFcdTUxNzRcdTUyMTFcdTU3OGJcdTVmNjJcdTkwYTJcdTg4NGNcdTkxOTJcdTVlNzhcdTY3NGZcdTYwMjdcdTU5ZDNcdTUxNDRcdTUxZjZcdTgwZjhcdTUzMDhcdTZj'@;
put 'NzlcdTk2YzRcdTcxOGFcdTRmMTFcdTRmZWVcdTdmOWVcdTY3M2RcdTU1YzVcdTk1MDhcdTc5YzBcdTg4OTZcdTdlZTNcdTU4OWZcdTYyMGNcdTk3MDBcdTg2NWFcdTU2MThcdTk4N2JcdTVmOTBcdThiYjhcdTg0YzRcdTkxNTdcdTUzZDlcdTY1ZWRcdTVlOGZcdTc1NWNcdTYwNjRcdTdkNmVc'@;
put 'dTVhN2ZcdTdlZWFcdTdlZWRcdThmNjlcdTU1YTdcdTViYTNcdTYwYWNcdTY1Y2JcdTczODRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMDhdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIwOF1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMDhdW2ddXT01MzI0OCtnLHlbNTMyNDgrZ109X1sy'@;
put 'MDhdW2ddKTtmb3IoX1syMDldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTkw'@;
put 'MDlcdTc2NjNcdTc3MjlcdTdlZGFcdTk3NzRcdTg1OWJcdTViNjZcdTdhNzRcdTk2ZWFcdTg4NDBcdTUyY2JcdTcxOGZcdTVmYWFcdTY1ZWNcdThiZTJcdTViZmJcdTlhNmZcdTVkZTFcdTZiODlcdTZjNWJcdThiYWRcdThiYWZcdTkwMGFcdThmYzVcdTUzOGJcdTYyYmNcdTllMjZcdTllMmRc'@;
put 'dTU0NDBcdTRlMmJcdTgyYmRcdTcyNTlcdTg2OWNcdTVkMTZcdTg4NTlcdTZkYWZcdTk2YzVcdTU0ZDFcdTRlOWFcdThiYjZcdTcxMDlcdTU0YmRcdTk2MDlcdTcwZGZcdTZkZjlcdTc2ZDBcdTRlMjVcdTc4MTRcdTg3MTJcdTVjYTlcdTVlZjZcdThhMDBcdTk4OWNcdTk2MGVcdTcwOGVcdTZj'@;
put 'YmZcdTU5NDRcdTYzYTlcdTc3M2NcdTg4NGRcdTZmMTRcdTgyNzNcdTU4MzBcdTcxZDVcdTUzOGNcdTc4MWFcdTk2YzFcdTU1MDFcdTVmNjZcdTcxMzBcdTViYjRcdThjMWFcdTlhOGNcdTZiODNcdTU5MmVcdTllMmZcdTc5ZTdcdTY3NjhcdTYyNmNcdTRmNmZcdTc1YTFcdTdmOGFcdTZkMGJc'@;
put 'dTk2MzNcdTZjMjdcdTRlZjBcdTc1ZDJcdTUxN2JcdTY4MzdcdTZmM2VcdTkwODBcdTgxNzBcdTU5OTZcdTc0NzZcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMDldLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIwOV1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMDldW2ddXT01MzUwNCtnLHlb'@;
put 'NTM1MDQrZ109X1syMDldW2ddKTtmb3IoX1syMTBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdTY0NDdcdTVjMjdcdTkwNjVcdTdhOTFcdThjMjNcdTU5ZGFcdTU0YWNcdTgyMDBcdTgzNmZcdTg5ODFcdTgwMDBcdTY5MzBcdTU2NGVcdTgwMzZcdTcyMzdcdTkxY2VcdTUxYjZcdTRlNWZcdTk4NzVcdTYzOTZcdTRlMWFcdTUzZjZcdTY2ZjNcdTgxNGJcdTU5MWNcdTZkYjJc'@;
put 'dTRlMDBcdTU4ZjlcdTUzM2JcdTYzZDZcdTk0ZjFcdTRmOWRcdTRmMGFcdTg4NjNcdTk4OTBcdTU5MzdcdTkwNTdcdTc5ZmJcdTRlZWFcdTgwZjBcdTc1OTFcdTZjODJcdTViOWNcdTU5ZThcdTVmNWRcdTY5MDVcdTg2ODFcdTUwMWFcdTVkZjJcdTRlNTlcdTc3ZTNcdTRlZTVcdTgyN2FcdTYy'@;
put 'OTFcdTY2MTNcdTkwOTFcdTVjNzlcdTRlYmZcdTVmNzlcdTgxYzZcdTkwMzhcdTgwODRcdTc1YWJcdTRlYTZcdTg4ZDRcdTYxMGZcdTZiYzVcdTVmYzZcdTRlNDlcdTc2Y2FcdTZlYTJcdThiZTNcdThiYWVcdThjMGFcdThiZDFcdTVmMDJcdTdmZmNcdTdmY2NcdTdlY2VcdTgzMzVcdTgzNmJc'@;
put 'dTU2ZTBcdTZiYjdcdTk3ZjNcdTk2MzRcdTU5ZmJcdTU0MWZcdTk0ZjZcdTZkZWJcdTViYzVcdTk5NmVcdTVjMzlcdTVmMTVcdTk2OTBcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMTBdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIxMF1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMTBdW2dd'@;
put 'XT01Mzc2MCtnLHlbNTM3NjArZ109X1syMTBdW2ddKTtmb3IoX1syMTFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTUzNzBcdTgyZjFcdTZhMzFcdTVhNzRcdTllNzBcdTVlOTRcdTdmMjhcdTgzYjlcdTg0MjRcdTg0MjVcdTgzNjdcdTg3NDdcdThmY2VcdThkNjJcdTc2YzhcdTVmNzFcdTk4OTZcdTc4NmNcdTY2MjBcdTU0ZGZcdTYyZTVcdTRmNjNcdTgxYzNcdTc1Yzhc'@;
put 'dTVlYjhcdTk2Y2RcdThlMGFcdTg2ZjlcdTU0OGZcdTZjZjNcdTZkOGNcdTZjMzhcdTYwN2ZcdTUyYzdcdTc1MjhcdTVlN2RcdTRmMThcdTYwYTBcdTVmZTdcdTVjMjRcdTc1MzFcdTkwYWVcdTk0YzBcdTcyYjlcdTZjYjlcdTZlMzhcdTkxNDlcdTY3MDlcdTUzY2JcdTUzZjNcdTRmNTFcdTkx'@;
put 'YzlcdThiZjFcdTUzYzhcdTVlN2NcdThmYzJcdTZkZTRcdTRlOGVcdTc2YzJcdTY5ODZcdTg2NWVcdTYxMWFcdTgyMDZcdTRmNTlcdTRmZGVcdTkwM2VcdTljN2NcdTYxMDlcdTZlMWRcdTZlMTRcdTk2ODVcdTRlODhcdTVhMzFcdTk2ZThcdTRlMGVcdTVjN2ZcdTc5YjlcdTViODdcdThiZWRc'@;
put 'dTdmYmRcdTczODlcdTU3ZGZcdTgyOGJcdTkwYzFcdTU0MDFcdTkwNDdcdTU1YmJcdTVjZWFcdTVmYTFcdTYxMDhcdTZiMzJcdTcyZjFcdTgwYjJcdThhODlcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMTFdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIxMV1bZ10uY2hhckNvZGVBdCgwKSYm'@;
put 'KElbX1syMTFdW2ddXT01NDAxNitnLHlbNTQwMTYrZ109X1syMTFdW2ddKTtmb3IoX1syMTJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZkNzRcdTViZDNcdTg4ZDVcdTk4ODRcdThjNmJcdTlhNmRcdTllMzNcdTZlMGFcdTUxYTRcdTUxNDNcdTU3YTNcdTg4ODFcdTUzOWZcdTYzZjRcdThmOTVcdTU2ZWRcdTU0NThcdTU3MDZcdTczM2ZcdTZlOTBcdTdmMThcdThmZGNc'@;
put 'dTgyZDFcdTYxM2ZcdTYwMjhcdTk2NjJcdTY2ZjBcdTdlYTZcdThkOGFcdThkYzNcdTk0YTVcdTVjYjNcdTdjYTRcdTY3MDhcdTYwYTZcdTk2MDVcdTgwMThcdTRlOTFcdTkwZTdcdTUzMDBcdTk2NjhcdTUxNDFcdThmZDBcdTg1NzRcdTkxNWRcdTY2NTVcdTk3ZjVcdTViNTVcdTUzMWRcdTc4'@;
put 'MzhcdTY3NDJcdTY4M2RcdTU0YzlcdTcwN2VcdTViYjBcdThmN2RcdTUxOGRcdTU3MjhcdTU0YjFcdTY1MTJcdTY2ODJcdThkNWVcdThkNDNcdTgxMGZcdTg0NmNcdTkwNmRcdTdjZGZcdTUxZmZcdTg1ZmJcdTY3YTNcdTY1ZTlcdTZmYTFcdTg2YTRcdThlODFcdTU2NmFcdTkwMjBcdTc2ODJc'@;
put 'dTcwNzZcdTcxZTVcdThkMjNcdTYyZTlcdTUyMTlcdTZjZmRcdThkM2NcdTYwMGVcdTU4OWVcdTYxOGVcdTY2ZmVcdThkNjBcdTYyNGVcdTU1YjNcdTZlMjNcdTY3MmRcdThmNjdcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMTJdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIxMl1bZ10uY2hh'@;
put 'ckNvZGVBdCgwKSYmKElbX1syMTJdW2ddXT01NDI3MitnLHlbNTQyNzIrZ109X1syMTJdW2ddKTtmb3IoX1syMTNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTk0ZTFcdTk1ZjhcdTc3MjhcdTY4MDVcdTY5YThcdTU0OGJcdTRlNGRcdTcwYjhcdThiYzhcdTY0NThcdTY1OGJcdTViODVcdTdhODRcdTUwM2FcdTViZThcdTc3YmJcdTZiZTFcdThhNzlcdTdjOThcdTZjYmVc'@;
put 'dTc2Y2ZcdTY1YTlcdThmOTdcdTVkMmRcdTVjNTVcdTg2MzhcdTY4MDhcdTUzNjBcdTYyMThcdTdhZDlcdTZlNWJcdTdlZmRcdTZhMWZcdTdhZTBcdTVmNzBcdTZmMzNcdTVmMjBcdTYzOGNcdTZkYThcdTY3NTZcdTRlMDhcdTVlMTBcdThkMjZcdTRlZDdcdTgwYzBcdTc2MzRcdTk2OWNcdTYy'@;
put 'ZGJcdTY2MmRcdTYyN2VcdTZjYmNcdThkNzVcdTcxNjdcdTdmNjlcdTUxNDZcdTgwODdcdTUzZWNcdTkwNmVcdTYyOThcdTU0ZjJcdTg2ZjBcdThmOTlcdTgwMDVcdTk1MTdcdTg1MTdcdThmZDlcdTZkNTlcdTczY2RcdTY1OWZcdTc3MWZcdTc1MDRcdTc4MjdcdTgxZmJcdThkMWVcdTk0ODhc'@;
put 'dTRmYTZcdTY3OTVcdTc1YjlcdThiY2FcdTk3MDdcdTYzMmZcdTk1NDdcdTk2MzVcdTg0YjhcdTYzMjNcdTc3NDFcdTVmODFcdTcyZjBcdTRlODlcdTYwMTRcdTY1NzRcdTYyZWZcdTZiNjNcdTY1M2ZcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMTNdLmxlbmd0aDsrK2cpNjU1MzMhPT1f'@;
put 'WzIxM11bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMTNdW2ddXT01NDUyOCtnLHlbNTQ1MjgrZ109X1syMTNdW2ddKTtmb3IoX1syMTRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTVlMjdcdTc1YzdcdTkwZDFcdThiYzFcdTgyOWRcdTY3OWRcdTY1MmZcdTU0MzFcdTg3MThcdTc3ZTVcdTgwYTJcdTgxMDJcdTZjNDFcdTRlNGJcdTdlYzdcdTgwNGNcdTc2ZjRcdTY5MGRc'@;
put 'dTZiOTZcdTYyNjdcdTUwM2NcdTRmODRcdTU3NDBcdTYzMDdcdTZiNjJcdThkYmVcdTUzZWFcdTY1ZThcdTdlYjhcdTVmZDdcdTYzMWFcdTYzYjdcdTgxZjNcdTgxZjRcdTdmNmVcdTVlMWNcdTVjZDlcdTUyMzZcdTY2N2FcdTc5ZTlcdTdhMWFcdThkMjhcdTcwOTlcdTc1ZDRcdTZlZGVcdTZj'@;
put 'YmJcdTdhOTJcdTRlMmRcdTc2YzVcdTVmZTBcdTk0OWZcdTg4NzdcdTdlYzhcdTc5Y2RcdTgwYmZcdTkxY2RcdTRlZjJcdTRmMTdcdTgyMWZcdTU0NjhcdTVkZGVcdTZkMzJcdThiY2NcdTdjYTVcdThmNzRcdTgwOThcdTVlMWFcdTU0OTJcdTc2YjFcdTViOTlcdTY2M2NcdTlhYTRcdTczZTBc'@;
put 'dTY4MmFcdTg2ZGJcdTY3MzFcdTczMmFcdThiZjhcdThiZGJcdTkwMTBcdTdhZjlcdTcwZGJcdTcxNmVcdTYyYzRcdTc3YTlcdTU2MzFcdTRlM2JcdTg0NTdcdTY3ZjFcdTUyYTlcdTg2YzBcdThkMmVcdTk0ZjhcdTdiNTFcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMTRdLmxlbmd0aDsr'@;
put 'K2cpNjU1MzMhPT1fWzIxNF1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMTRdW2ddXT01NDc4NCtnLHlbNTQ3ODQrZ109X1syMTRdW2ddKTtmb3IoX1syMTVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTRmNGZcdTZjZThcdTc5NWRcdTlhN2JcdTYyOTNcdTcyMmFcdTYyZmRcdTRlMTNcdTc4MTZcdThmNmNcdTY0YjBcdThkNWFcdTdiYzZcdTY4NjlcdTVlODRcdTg4YzVc'@;
put 'dTU5ODZcdTY0OWVcdTU4ZWVcdTcyYjZcdTY5MGVcdTk1MjVcdThmZmRcdThkNThcdTU3NjBcdTdmMDBcdThjMDZcdTUxYzZcdTYzNDlcdTYyZDlcdTUzNTNcdTY4NGNcdTc0MjJcdTgzMDFcdTkxNGNcdTU1NDRcdTc3NDBcdTcwN2NcdTZkNGFcdTUxNzlcdTU0YThcdThkNDRcdTU5ZmZcdTZl'@;
put 'Y2JcdTZkYzRcdTViNWNcdTdkMmJcdTRlZDRcdTdjN2RcdTZlZDNcdTViNTBcdTgxZWFcdTZlMGRcdTViNTdcdTliMDNcdTY4ZDVcdThlMmFcdTViOTdcdTdlZmNcdTYwM2JcdTdlYjVcdTkwYjlcdThkNzBcdTU5NGZcdTYzY2RcdTc5ZGZcdThkYjNcdTUzNTJcdTY1Y2ZcdTc5NTZcdThiYzVc'@;
put 'dTk2M2JcdTdlYzRcdTk0YmJcdTdlODJcdTU2MzRcdTkxODlcdTY3MDBcdTdmNmFcdTVjMGFcdTkwNzVcdTY2MjhcdTVkZTZcdTRmNTBcdTY3ZGVcdTUwNWFcdTRmNWNcdTU3NTBcdTVlYTdcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sy'@;
put 'MTVdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIxNV1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMTVdW2ddXT01NTA0MCtnLHlbNTUwNDArZ109X1syMTVdW2ddKTtmb3IoX1syMTZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTRlOGRcdTRlMGNcdTUxNDBcdTRlMTBcdTVlZmZcdTUzNDVcdTRlMTVcdTRlOThcdTRlMWVcdTliMzJcdTViNmNcdTU2NjlcdTRlMjhcdTc5YmFc'@;
put 'dTRlM2ZcdTUzMTVcdTRlNDdcdTU5MmRcdTcyM2JcdTUzNmVcdTZjMTBcdTU2ZGZcdTgwZTRcdTk5OTdcdTZiZDNcdTc3N2VcdTlmMTdcdTRlMzZcdTRlOWZcdTlmMTBcdTRlNWNcdTRlNjlcdTRlOTNcdTgyODhcdTViNWJcdTU1NmNcdTU2MGZcdTRlYzRcdTUzOGRcdTUzOWRcdTUzYTNcdTUz'@;
put 'YTVcdTUzYWVcdTk3NjVcdThkNWRcdTUzMWFcdTUzZjVcdTUzMjZcdTUzMmVcdTUzM2VcdThkNWNcdTUzNjZcdTUzNjNcdTUyMDJcdTUyMDhcdTUyMGVcdTUyMmRcdTUyMzNcdTUyM2ZcdTUyNDBcdTUyNGNcdTUyNWVcdTUyNjFcdTUyNWNcdTg0YWZcdTUyN2RcdTUyODJcdTUyODFcdTUyOTBc'@;
put 'dTUyOTNcdTUxODJcdTdmNTRcdTRlYmJcdTRlYzNcdTRlYzlcdTRlYzJcdTRlZThcdTRlZTFcdTRlZWJcdTRlZGVcdTRmMWJcdTRlZjNcdTRmMjJcdTRmNjRcdTRlZjVcdTRmMjVcdTRmMjdcdTRmMDlcdTRmMmJcdTRmNWVcdTRmNjdcdTY1MzhcdTRmNWFcdTRmNWRcdWZmZmQiLnNwbGl0KCIi'@;
put 'KSxnPTA7ZyE9X1syMTZdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIxNl1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMTZdW2ddXT01NTI5NitnLHlbNTUyOTYrZ109X1syMTZdW2ddKTtmb3IoX1syMTddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTRmNWZcdTRmNTdcdTRmMzJcdTRmM2RcdTRmNzZcdTRmNzRcdTRmOTFcdTRmODlcdTRmODNcdTRmOGZcdTRmN2VcdTRmN2Jc'@;
put 'dTRmYWFcdTRmN2NcdTRmYWNcdTRmOTRcdTRmZTZcdTRmZThcdTRmZWFcdTRmYzVcdTRmZGFcdTRmZTNcdTRmZGNcdTRmZDFcdTRmZGZcdTRmZjhcdTUwMjlcdTUwNGNcdTRmZjNcdTUwMmNcdTUwMGZcdTUwMmVcdTUwMmRcdTRmZmVcdTUwMWNcdTUwMGNcdTUwMjVcdTUwMjhcdTUwN2VcdTUw'@;
put 'NDNcdTUwNTVcdTUwNDhcdTUwNGVcdTUwNmNcdTUwN2JcdTUwYTVcdTUwYTdcdTUwYTlcdTUwYmFcdTUwZDZcdTUxMDZcdTUwZWRcdTUwZWNcdTUwZTZcdTUwZWVcdTUxMDdcdTUxMGJcdTRlZGRcdTZjM2RcdTRmNThcdTRmNjVcdTRmY2VcdTlmYTBcdTZjNDZcdTdjNzRcdTUxNmVcdTVkZmRc'@;
put 'dTllYzlcdTk5OThcdTUxODFcdTU5MTRcdTUyZjlcdTUzMGRcdThhMDdcdTUzMTBcdTUxZWJcdTU5MTlcdTUxNTVcdTRlYTBcdTUxNTZcdTRlYjNcdTg4NmVcdTg4YTRcdTRlYjVcdTgxMTRcdTg4ZDJcdTc5ODBcdTViMzRcdTg4MDNcdTdmYjhcdTUxYWJcdTUxYjFcdTUxYmRcdTUxYmNcdWZm'@;
put 'ZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMTddLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIxN11bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMTddW2ddXT01NTU1MitnLHlbNTU1NTIrZ109X1syMTddW2ddKTtmb3IoX1syMThdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTUxYzdcdTUxOTZcdTUxYTJcdTUxYTVcdThiYTBcdThiYTZcdThiYTdcdThiYWFcdThiYjRcdThiYjVc'@;
put 'dThiYjdcdThiYzJcdThiYzNcdThiY2JcdThiY2ZcdThiY2VcdThiZDJcdThiZDNcdThiZDRcdThiZDZcdThiZDhcdThiZDlcdThiZGNcdThiZGZcdThiZTBcdThiZTRcdThiZThcdThiZTlcdThiZWVcdThiZjBcdThiZjNcdThiZjZcdThiZjlcdThiZmNcdThiZmZcdThjMDBcdThjMDJcdThj'@;
put 'MDRcdThjMDdcdThjMGNcdThjMGZcdThjMTFcdThjMTJcdThjMTRcdThjMTVcdThjMTZcdThjMTlcdThjMWJcdThjMThcdThjMWRcdThjMWZcdThjMjBcdThjMjFcdThjMjVcdThjMjdcdThjMmFcdThjMmJcdThjMmVcdThjMmZcdThjMzJcdThjMzNcdThjMzVcdThjMzZcdTUzNjlcdTUzN2Fc'@;
put 'dTk2MWRcdTk2MjJcdTk2MjFcdTk2MzFcdTk2MmFcdTk2M2RcdTk2M2NcdTk2NDJcdTk2NDlcdTk2NTRcdTk2NWZcdTk2NjdcdTk2NmNcdTk2NzJcdTk2NzRcdTk2ODhcdTk2OGRcdTk2OTdcdTk2YjBcdTkwOTdcdTkwOWJcdTkwOWRcdTkwOTlcdTkwYWNcdTkwYTFcdTkwYjRcdTkwYjNcdTkw'@;
put 'YjZcdTkwYmFcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMThdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIxOF1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMThdW2ddXT01NTgwOCtnLHlbNTU4MDgrZ109X1syMThdW2ddKTtmb3IoX1syMTldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTkwYjhcdTkwYjBcdTkwY2ZcdTkwYzVcdTkwYmVcdTkwZDBcdTkwYzRcdTkwYzdc'@;
put 'dTkwZDNcdTkwZTZcdTkwZTJcdTkwZGNcdTkwZDdcdTkwZGJcdTkwZWJcdTkwZWZcdTkwZmVcdTkxMDRcdTkxMjJcdTkxMWVcdTkxMjNcdTkxMzFcdTkxMmZcdTkxMzlcdTkxNDNcdTkxNDZcdTUyMGRcdTU5NDJcdTUyYTJcdTUyYWNcdTUyYWRcdTUyYmVcdTU0ZmZcdTUyZDBcdTUyZDZcdTUy'@;
put 'ZjBcdTUzZGZcdTcxZWVcdTc3Y2RcdTVlZjRcdTUxZjVcdTUxZmNcdTliMmZcdTUzYjZcdTVmMDFcdTc1NWFcdTVkZWZcdTU3NGNcdTU3YTlcdTU3YTFcdTU4N2VcdTU4YmNcdTU4YzVcdTU4ZDFcdTU3MjlcdTU3MmNcdTU3MmFcdTU3MzNcdTU3MzlcdTU3MmVcdTU3MmZcdTU3NWNcdTU3M2Jc'@;
put 'dTU3NDJcdTU3NjlcdTU3ODVcdTU3NmJcdTU3ODZcdTU3N2NcdTU3N2JcdTU3NjhcdTU3NmRcdTU3NzZcdTU3NzNcdTU3YWRcdTU3YTRcdTU3OGNcdTU3YjJcdTU3Y2ZcdTU3YTdcdTU3YjRcdTU3OTNcdTU3YTBcdTU3ZDVcdTU3ZDhcdTU3ZGFcdTU3ZDlcdTU3ZDJcdTU3YjhcdTU3ZjRcdTU3'@;
put 'ZWZcdTU3ZjhcdTU3ZTRcdTU3ZGRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMTldLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIxOV1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMTldW2ddXT01NjA2NCtnLHlbNTYwNjQrZ109X1syMTldW2ddKTtmb3IoX1syMjBdPSJcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTU4MGJcdTU4MGRcdTU3ZmRcdTU3ZWRcdTU4MDBcdTU4MWVc'@;
put 'dTU4MTlcdTU4NDRcdTU4MjBcdTU4NjVcdTU4NmNcdTU4ODFcdTU4ODlcdTU4OWFcdTU4ODBcdTk5YThcdTlmMTlcdTYxZmZcdTgyNzlcdTgyN2RcdTgyN2ZcdTgyOGZcdTgyOGFcdTgyYThcdTgyODRcdTgyOGVcdTgyOTFcdTgyOTdcdTgyOTlcdTgyYWJcdTgyYjhcdTgyYmVcdTgyYjBcdTgy'@;
put 'YzhcdTgyY2FcdTgyZTNcdTgyOThcdTgyYjdcdTgyYWVcdTgyY2JcdTgyY2NcdTgyYzFcdTgyYTlcdTgyYjRcdTgyYTFcdTgyYWFcdTgyOWZcdTgyYzRcdTgyY2VcdTgyYTRcdTgyZTFcdTgzMDlcdTgyZjdcdTgyZTRcdTgzMGZcdTgzMDdcdTgyZGNcdTgyZjRcdTgyZDJcdTgyZDhcdTgzMGNc'@;
put 'dTgyZmJcdTgyZDNcdTgzMTFcdTgzMWFcdTgzMDZcdTgzMTRcdTgzMTVcdTgyZTBcdTgyZDVcdTgzMWNcdTgzNTFcdTgzNWJcdTgzNWNcdTgzMDhcdTgzOTJcdTgzM2NcdTgzMzRcdTgzMzFcdTgzOWJcdTgzNWVcdTgzMmZcdTgzNGZcdTgzNDdcdTgzNDNcdTgzNWZcdTgzNDBcdTgzMTdcdTgz'@;
put 'NjBcdTgzMmRcdTgzM2FcdTgzMzNcdTgzNjZcdTgzNjVcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMjBdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIyMF1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMjBdW2ddXT01NjMyMCtnLHlbNTYzMjArZ109X1syMjBdW2ddKTtmb3IoX1syMjFdPSJc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTgzNjhcdTgzMWJcdTgzNjlcdTgzNmNc'@;
put 'dTgzNmFcdTgzNmRcdTgzNmVcdTgzYjBcdTgzNzhcdTgzYjNcdTgzYjRcdTgzYTBcdTgzYWFcdTgzOTNcdTgzOWNcdTgzODVcdTgzN2NcdTgzYjZcdTgzYTlcdTgzN2RcdTgzYjhcdTgzN2JcdTgzOThcdTgzOWVcdTgzYThcdTgzYmFcdTgzYmNcdTgzYzFcdTg0MDFcdTgzZTVcdTgzZDhcdTU4'@;
put 'MDdcdTg0MThcdTg0MGJcdTgzZGRcdTgzZmRcdTgzZDZcdTg0MWNcdTg0MzhcdTg0MTFcdTg0MDZcdTgzZDRcdTgzZGZcdTg0MGZcdTg0MDNcdTgzZjhcdTgzZjlcdTgzZWFcdTgzYzVcdTgzYzBcdTg0MjZcdTgzZjBcdTgzZTFcdTg0NWNcdTg0NTFcdTg0NWFcdTg0NTlcdTg0NzNcdTg0ODdc'@;
put 'dTg0ODhcdTg0N2FcdTg0ODlcdTg0NzhcdTg0M2NcdTg0NDZcdTg0NjlcdTg0NzZcdTg0OGNcdTg0OGVcdTg0MzFcdTg0NmRcdTg0YzFcdTg0Y2RcdTg0ZDBcdTg0ZTZcdTg0YmRcdTg0ZDNcdTg0Y2FcdTg0YmZcdTg0YmFcdTg0ZTBcdTg0YTFcdTg0YjlcdTg0YjRcdTg0OTdcdTg0ZTVcdTg0'@;
put 'ZTNcdTg1MGNcdTc1MGRcdTg1MzhcdTg0ZjBcdTg1MzlcdTg1MWZcdTg1M2FcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMjFdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIyMV1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMjFdW2ddXT01NjU3NitnLHlbNTY1NzYrZ109X1syMjFdW2ddKTtm'@;
put 'b3IoX1syMjJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTg1NTZcdTg1M2Jc'@;
put 'dTg0ZmZcdTg0ZmNcdTg1NTlcdTg1NDhcdTg1NjhcdTg1NjRcdTg1NWVcdTg1N2FcdTc3YTJcdTg1NDNcdTg1NzJcdTg1N2JcdTg1YTRcdTg1YThcdTg1ODdcdTg1OGZcdTg1NzlcdTg1YWVcdTg1OWNcdTg1ODVcdTg1YjlcdTg1YjdcdTg1YjBcdTg1ZDNcdTg1YzFcdTg1ZGNcdTg1ZmZcdTg2'@;
put 'MjdcdTg2MDVcdTg2MjlcdTg2MTZcdTg2M2NcdTVlZmVcdTVmMDhcdTU5M2NcdTU5NDFcdTgwMzdcdTU5NTVcdTU5NWFcdTU5NThcdTUzMGZcdTVjMjJcdTVjMjVcdTVjMmNcdTVjMzRcdTYyNGNcdTYyNmFcdTYyOWZcdTYyYmJcdTYyY2FcdTYyZGFcdTYyZDdcdTYyZWVcdTYzMjJcdTYyZjZc'@;
put 'dTYzMzlcdTYzNGJcdTYzNDNcdTYzYWRcdTYzZjZcdTYzNzFcdTYzN2FcdTYzOGVcdTYzYjRcdTYzNmRcdTYzYWNcdTYzOGFcdTYzNjlcdTYzYWVcdTYzYmNcdTYzZjJcdTYzZjhcdTYzZTBcdTYzZmZcdTYzYzRcdTYzZGVcdTYzY2VcdTY0NTJcdTYzYzZcdTYzYmVcdTY0NDVcdTY0NDFcdTY0'@;
put 'MGJcdTY0MWJcdTY0MjBcdTY0MGNcdTY0MjZcdTY0MjFcdTY0NWVcdTY0ODRcdTY0NmRcdTY0OTZcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMjJdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIyMl1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMjJdW2ddXT01NjgzMitnLHlbNTY4MzIrZ109'@;
put 'X1syMjJdW2ddKTtmb3IoX1syMjNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dTY0N2FcdTY0YjdcdTY0YjhcdTY0OTlcdTY0YmFcdTY0YzBcdTY0ZDBcdTY0ZDdcdTY0ZTRcdTY0ZTJcdTY1MDlcdTY1MjVcdTY1MmVcdTVmMGJcdTVmZDJcdTc1MTlcdTVmMTFcdTUzNWZcdTUzZjFcdTUzZmRcdTUzZTlcdTUzZThcdTUzZmJcdTU0MTJcdTU0MTZcdTU0MDZcdTU0NGJcdTU0'@;
put 'NTJcdTU0NTNcdTU0NTRcdTU0NTZcdTU0NDNcdTU0MjFcdTU0NTdcdTU0NTlcdTU0MjNcdTU0MzJcdTU0ODJcdTU0OTRcdTU0NzdcdTU0NzFcdTU0NjRcdTU0OWFcdTU0OWJcdTU0ODRcdTU0NzZcdTU0NjZcdTU0OWRcdTU0ZDBcdTU0YWRcdTU0YzJcdTU0YjRcdTU0ZDJcdTU0YTdcdTU0YTZc'@;
put 'dTU0ZDNcdTU0ZDRcdTU0NzJcdTU0YTNcdTU0ZDVcdTU0YmJcdTU0YmZcdTU0Y2NcdTU0ZDlcdTU0ZGFcdTU0ZGNcdTU0YTlcdTU0YWFcdTU0YTRcdTU0ZGRcdTU0Y2ZcdTU0ZGVcdTU1MWJcdTU0ZTdcdTU1MjBcdTU0ZmRcdTU1MTRcdTU0ZjNcdTU1MjJcdTU1MjNcdTU1MGZcdTU1MTFcdTU1'@;
put 'MjdcdTU1MmFcdTU1NjdcdTU1OGZcdTU1YjVcdTU1NDlcdTU1NmRcdTU1NDFcdTU1NTVcdTU1M2ZcdTU1NTBcdTU1M2NcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMjNdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIyM11bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMjNdW2ddXT01NzA4OCtn'@;
put 'LHlbNTcwODgrZ109X1syMjNdW2ddKTtmb3IoX1syMjRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdTU1MzdcdTU1NTZcdTU1NzVcdTU1NzZcdTU1NzdcdTU1MzNcdTU1MzBcdTU1NWNcdTU1OGJcdTU1ZDJcdTU1ODNcdTU1YjFcdTU1YjlcdTU1ODhcdTU1ODFcdTU1OWZcdTU1N2VcdTU1ZDZcdTU1OTFcdTU1N2JcdTU1ZGZcdTU1YmRcdTU1YmVcdTU1OTRcdTU1OTlcdTU1'@;
put 'ZWFcdTU1ZjdcdTU1YzlcdTU2MWZcdTU1ZDFcdTU1ZWJcdTU1ZWNcdTU1ZDRcdTU1ZTZcdTU1ZGRcdTU1YzRcdTU1ZWZcdTU1ZTVcdTU1ZjJcdTU1ZjNcdTU1Y2NcdTU1Y2RcdTU1ZThcdTU1ZjVcdTU1ZTRcdThmOTRcdTU2MWVcdTU2MDhcdTU2MGNcdTU2MDFcdTU2MjRcdTU2MjNcdTU1ZmVc'@;
put 'dTU2MDBcdTU2MjdcdTU2MmRcdTU2NThcdTU2MzlcdTU2NTdcdTU2MmNcdTU2NGRcdTU2NjJcdTU2NTlcdTU2NWNcdTU2NGNcdTU2NTRcdTU2ODZcdTU2NjRcdTU2NzFcdTU2NmJcdTU2N2JcdTU2N2NcdTU2ODVcdTU2OTNcdTU2YWZcdTU2ZDRcdTU2ZDdcdTU2ZGRcdTU2ZTFcdTU2ZjVcdTU2'@;
put 'ZWJcdTU2ZjlcdTU2ZmZcdTU3MDRcdTU3MGFcdTU3MDlcdTU3MWNcdTVlMGZcdTVlMTlcdTVlMTRcdTVlMTFcdTVlMzFcdTVlM2JcdTVlM2NcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMjRdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIyNF1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMjRd'@;
put 'W2ddXT01NzM0NCtnLHlbNTczNDQrZ109X1syMjRdW2ddKTtmb3IoX1syMjVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTVlMzdcdTVlNDRcdTVlNTRcdTVlNWJcdTVlNWVcdTVlNjFcdTVjOGNcdTVjN2FcdTVjOGRcdTVjOTBcdTVjOTZcdTVjODhcdTVjOThcdTVjOTlcdTVjOTFcdTVjOWFcdTVjOWNcdTVjYjVcdTVjYTJcdTVjYmRcdTVjYWNcdTVjYWJcdTVjYjFcdTVj'@;
put 'YTNcdTVjYzFcdTVjYjdcdTVjYzRcdTVjZDJcdTVjZTRcdTVjY2JcdTVjZTVcdTVkMDJcdTVkMDNcdTVkMjdcdTVkMjZcdTVkMmVcdTVkMjRcdTVkMWVcdTVkMDZcdTVkMWJcdTVkNThcdTVkM2VcdTVkMzRcdTVkM2RcdTVkNmNcdTVkNWJcdTVkNmZcdTVkNWRcdTVkNmJcdTVkNGJcdTVkNGFc'@;
put 'dTVkNjlcdTVkNzRcdTVkODJcdTVkOTlcdTVkOWRcdThjNzNcdTVkYjdcdTVkYzVcdTVmNzNcdTVmNzdcdTVmODJcdTVmODdcdTVmODlcdTVmOGNcdTVmOTVcdTVmOTlcdTVmOWNcdTVmYThcdTVmYWRcdTVmYjVcdTVmYmNcdTg4NjJcdTVmNjFcdTcyYWRcdTcyYjBcdTcyYjRcdTcyYjdcdTcy'@;
put 'YjhcdTcyYzNcdTcyYzFcdTcyY2VcdTcyY2RcdTcyZDJcdTcyZThcdTcyZWZcdTcyZTlcdTcyZjJcdTcyZjRcdTcyZjdcdTczMDFcdTcyZjNcdTczMDNcdTcyZmFcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMjVdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIyNV1bZ10uY2hhckNvZGVBdCgw'@;
put 'KSYmKElbX1syMjVdW2ddXT01NzYwMCtnLHlbNTc2MDArZ109X1syMjVdW2ddKTtmb3IoX1syMjZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTcyZmJcdTczMTdcdTczMTNcdTczMjFcdTczMGFcdTczMWVcdTczMWRcdTczMTVcdTczMjJcdTczMzlcdTczMjVcdTczMmNcdTczMzhcdTczMzFcdTczNTBcdTczNGRcdTczNTdcdTczNjBcdTczNmNcdTczNmZcdTczN2VcdTgy'@;
put 'MWJcdTU5MjVcdTk4ZTdcdTU5MjRcdTU5MDJcdTk5NjNcdTk5NjdcdTk5NjhcdTk5NjlcdTk5NmFcdTk5NmJcdTk5NmNcdTk5NzRcdTk5NzdcdTk5N2RcdTk5ODBcdTk5ODRcdTk5ODdcdTk5OGFcdTk5OGRcdTk5OTBcdTk5OTFcdTk5OTNcdTk5OTRcdTk5OTVcdTVlODBcdTVlOTFcdTVlOGJc'@;
put 'dTVlOTZcdTVlYTVcdTVlYTBcdTVlYjlcdTVlYjVcdTVlYmVcdTVlYjNcdThkNTNcdTVlZDJcdTVlZDFcdTVlZGJcdTVlZThcdTVlZWFcdTgxYmFcdTVmYzRcdTVmYzlcdTVmZDZcdTVmY2ZcdTYwMDNcdTVmZWVcdTYwMDRcdTVmZTFcdTVmZTRcdTVmZmVcdTYwMDVcdTYwMDZcdTVmZWFcdTVm'@;
put 'ZWRcdTVmZjhcdTYwMTlcdTYwMzVcdTYwMjZcdTYwMWJcdTYwMGZcdTYwMGRcdTYwMjlcdTYwMmJcdTYwMGFcdTYwM2ZcdTYwMjFcdTYwNzhcdTYwNzlcdTYwN2JcdTYwN2FcdTYwNDJcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMjZdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIyNl1bZ10u'@;
put 'Y2hhckNvZGVBdCgwKSYmKElbX1syMjZdW2ddXT01Nzg1NitnLHlbNTc4NTYrZ109X1syMjZdW2ddKTtmb3IoX1syMjddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTYwNmFcdTYwN2RcdTYwOTZcdTYwOWFcdTYwYWRcdTYwOWRcdTYwODNcdTYwOTJcdTYwOGNcdTYwOWJcdTYwZWNcdTYwYmJcdTYwYjFcdTYwZGRcdTYwZDhcdTYwYzZcdTYwZGFcdTYwYjRcdTYxMjBcdTYx'@;
put 'MjZcdTYxMTVcdTYxMjNcdTYwZjRcdTYxMDBcdTYxMGVcdTYxMmJcdTYxNGFcdTYxNzVcdTYxYWNcdTYxOTRcdTYxYTdcdTYxYjdcdTYxZDRcdTYxZjVcdTVmZGRcdTk2YjNcdTk1ZTlcdTk1ZWJcdTk1ZjFcdTk1ZjNcdTk1ZjVcdTk1ZjZcdTk1ZmNcdTk1ZmVcdTk2MDNcdTk2MDRcdTk2MDZc'@;
put 'dTk2MDhcdTk2MGFcdTk2MGJcdTk2MGNcdTk2MGRcdTk2MGZcdTk2MTJcdTk2MTVcdTk2MTZcdTk2MTdcdTk2MTlcdTk2MWFcdTRlMmNcdTcyM2ZcdTYyMTVcdTZjMzVcdTZjNTRcdTZjNWNcdTZjNGFcdTZjYTNcdTZjODVcdTZjOTBcdTZjOTRcdTZjOGNcdTZjNjhcdTZjNjlcdTZjNzRcdTZj'@;
put 'NzZcdTZjODZcdTZjYTlcdTZjZDBcdTZjZDRcdTZjYWRcdTZjZjdcdTZjZjhcdTZjZjFcdTZjZDdcdTZjYjJcdTZjZTBcdTZjZDZcdTZjZmFcdTZjZWJcdTZjZWVcdTZjYjFcdTZjZDNcdTZjZWZcdTZjZmVcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMjddLmxlbmd0aDsrK2cpNjU1MzMh'@;
put 'PT1fWzIyN11bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMjddW2ddXT01ODExMitnLHlbNTgxMTIrZ109X1syMjddW2ddKTtmb3IoX1syMjhdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZkMzlcdTZkMjdcdTZkMGNcdTZkNDNcdTZkNDhcdTZkMDdcdTZkMDRcdTZkMTlcdTZkMGVcdTZkMmJcdTZkNGRcdTZkMmVcdTZkMzVcdTZkMWFcdTZkNGZcdTZkNTJcdTZkNTRcdTZk'@;
put 'MzNcdTZkOTFcdTZkNmZcdTZkOWVcdTZkYTBcdTZkNWVcdTZkOTNcdTZkOTRcdTZkNWNcdTZkNjBcdTZkN2NcdTZkNjNcdTZlMWFcdTZkYzdcdTZkYzVcdTZkZGVcdTZlMGVcdTZkYmZcdTZkZTBcdTZlMTFcdTZkZTZcdTZkZGRcdTZkZDlcdTZlMTZcdTZkYWJcdTZlMGNcdTZkYWVcdTZlMmJc'@;
put 'dTZlNmVcdTZlNGVcdTZlNmJcdTZlYjJcdTZlNWZcdTZlODZcdTZlNTNcdTZlNTRcdTZlMzJcdTZlMjVcdTZlNDRcdTZlZGZcdTZlYjFcdTZlOThcdTZlZTBcdTZmMmRcdTZlZTJcdTZlYTVcdTZlYTdcdTZlYmRcdTZlYmJcdTZlYjdcdTZlZDdcdTZlYjRcdTZlY2ZcdTZlOGZcdTZlYzJcdTZl'@;
put 'OWZcdTZmNjJcdTZmNDZcdTZmNDdcdTZmMjRcdTZmMTVcdTZlZjlcdTZmMmZcdTZmMzZcdTZmNGJcdTZmNzRcdTZmMmFcdTZmMDlcdTZmMjlcdTZmODlcdTZmOGRcdTZmOGNcdTZmNzhcdTZmNzJcdTZmN2NcdTZmN2FcdTZmZDFcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMjhdLmxlbmd0'@;
put 'aDsrK2cpNjU1MzMhPT1fWzIyOF1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMjhdW2ddXT01ODM2OCtnLHlbNTgzNjgrZ109X1syMjhdW2ddKTtmb3IoX1syMjldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZmYzlcdTZmYTdcdTZmYjlcdTZmYjZcdTZmYzJcdTZmZTFcdTZmZWVcdTZmZGVcdTZmZTBcdTZmZWZcdTcwMWFcdTcwMjNcdTcwMWJcdTcwMzlcdTcwMzVcdTcw'@;
put 'NGZcdTcwNWVcdTViODBcdTViODRcdTViOTVcdTViOTNcdTViYTVcdTViYjhcdTc1MmZcdTlhOWVcdTY0MzRcdTViZTRcdTViZWVcdTg5MzBcdTViZjBcdThlNDdcdThiMDdcdThmYjZcdThmZDNcdThmZDVcdThmZTVcdThmZWVcdThmZTRcdThmZTlcdThmZTZcdThmZjNcdThmZThcdTkwMDVc'@;
put 'dTkwMDRcdTkwMGJcdTkwMjZcdTkwMTFcdTkwMGRcdTkwMTZcdTkwMjFcdTkwMzVcdTkwMzZcdTkwMmRcdTkwMmZcdTkwNDRcdTkwNTFcdTkwNTJcdTkwNTBcdTkwNjhcdTkwNThcdTkwNjJcdTkwNWJcdTY2YjlcdTkwNzRcdTkwN2RcdTkwODJcdTkwODhcdTkwODNcdTkwOGJcdTVmNTBcdTVm'@;
put 'NTdcdTVmNTZcdTVmNThcdTVjM2JcdTU0YWJcdTVjNTBcdTVjNTlcdTViNzFcdTVjNjNcdTVjNjZcdTdmYmNcdTVmMmFcdTVmMjlcdTVmMmRcdTgyNzRcdTVmM2NcdTliM2JcdTVjNmVcdTU5ODFcdTU5ODNcdTU5OGRcdTU5YTlcdTU5YWFcdTU5YTNcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9'@;
put 'X1syMjldLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIyOV1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMjldW2ddXT01ODYyNCtnLHlbNTg2MjQrZ109X1syMjldW2ddKTtmb3IoX1syMzBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTU5OTdcdTU5Y2FcdTU5YWJcdTU5OWVcdTU5YTRcdTU5ZDJcdTU5YjJcdTU5YWZcdTU5ZDdcdTU5YmVcdTVhMDVcdTVhMDZcdTU5ZGRcdTVh'@;
put 'MDhcdTU5ZTNcdTU5ZDhcdTU5ZjlcdTVhMGNcdTVhMDlcdTVhMzJcdTVhMzRcdTVhMTFcdTVhMjNcdTVhMTNcdTVhNDBcdTVhNjdcdTVhNGFcdTVhNTVcdTVhM2NcdTVhNjJcdTVhNzVcdTgwZWNcdTVhYWFcdTVhOWJcdTVhNzdcdTVhN2FcdTVhYmVcdTVhZWJcdTVhYjJcdTVhZDJcdTVhZDRc'@;
put 'dTVhYjhcdTVhZTBcdTVhZTNcdTVhZjFcdTVhZDZcdTVhZTZcdTVhZDhcdTVhZGNcdTViMDlcdTViMTdcdTViMTZcdTViMzJcdTViMzdcdTViNDBcdTVjMTVcdTVjMWNcdTViNWFcdTViNjVcdTViNzNcdTViNTFcdTViNTNcdTViNjJcdTlhNzVcdTlhNzdcdTlhNzhcdTlhN2FcdTlhN2ZcdTlh'@;
put 'N2RcdTlhODBcdTlhODFcdTlhODVcdTlhODhcdTlhOGFcdTlhOTBcdTlhOTJcdTlhOTNcdTlhOTZcdTlhOThcdTlhOWJcdTlhOWNcdTlhOWRcdTlhOWZcdTlhYTBcdTlhYTJcdTlhYTNcdTlhYTVcdTlhYTdcdTdlOWZcdTdlYTFcdTdlYTNcdTdlYTVcdTdlYThcdTdlYTlcdWZmZmQiLnNwbGl0'@;
put 'KCIiKSxnPTA7ZyE9X1syMzBdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIzMF1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMzBdW2ddXT01ODg4MCtnLHlbNTg4ODArZ109X1syMzBdW2ddKTtmb3IoX1syMzFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTdlYWRcdTdlYjBcdTdlYmVcdTdlYzBcdTdlYzFcdTdlYzJcdTdlYzlcdTdlY2JcdTdlY2NcdTdlZDBcdTdlZDRcdTdl'@;
put 'ZDdcdTdlZGJcdTdlZTBcdTdlZTFcdTdlZThcdTdlZWJcdTdlZWVcdTdlZWZcdTdlZjFcdTdlZjJcdTdmMGRcdTdlZjZcdTdlZmFcdTdlZmJcdTdlZmVcdTdmMDFcdTdmMDJcdTdmMDNcdTdmMDdcdTdmMDhcdTdmMGJcdTdmMGNcdTdmMGZcdTdmMTFcdTdmMTJcdTdmMTdcdTdmMTlcdTdmMWNc'@;
put 'dTdmMWJcdTdmMWZcdTdmMjFcdTdmMjJcdTdmMjNcdTdmMjRcdTdmMjVcdTdmMjZcdTdmMjdcdTdmMmFcdTdmMmJcdTdmMmNcdTdmMmRcdTdmMmZcdTdmMzBcdTdmMzFcdTdmMzJcdTdmMzNcdTdmMzVcdTVlN2FcdTc1N2ZcdTVkZGJcdTc1M2VcdTkwOTVcdTczOGVcdTczOTFcdTczYWVcdTcz'@;
put 'YTJcdTczOWZcdTczY2ZcdTczYzJcdTczZDFcdTczYjdcdTczYjNcdTczYzBcdTczYzlcdTczYzhcdTczZTVcdTczZDlcdTk4N2NcdTc0MGFcdTczZTlcdTczZTdcdTczZGVcdTczYmFcdTczZjJcdTc0MGZcdTc0MmFcdTc0NWJcdTc0MjZcdTc0MjVcdTc0MjhcdTc0MzBcdTc0MmVcdTc0MmNc'@;
put 'dWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMzFdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIzMV1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMzFdW2ddXT01OTEzNitnLHlbNTkxMzYrZ109X1syMzFdW2ddKTtmb3IoX1syMzJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc0MWJcdTc0MWFcdTc0NDFcdTc0NWNcdTc0NTdcdTc0NTVcdTc0NTlcdTc0NzdcdTc0NmRcdTc0'@;
put 'N2VcdTc0OWNcdTc0OGVcdTc0ODBcdTc0ODFcdTc0ODdcdTc0OGJcdTc0OWVcdTc0YThcdTc0YTlcdTc0OTBcdTc0YTdcdTc0ZDJcdTc0YmFcdTk3ZWFcdTk3ZWJcdTk3ZWNcdTY3NGNcdTY3NTNcdTY3NWVcdTY3NDhcdTY3NjlcdTY3YTVcdTY3ODdcdTY3NmFcdTY3NzNcdTY3OThcdTY3YTdc'@;
put 'dTY3NzVcdTY3YThcdTY3OWVcdTY3YWRcdTY3OGJcdTY3NzdcdTY3N2NcdTY3ZjBcdTY4MDlcdTY3ZDhcdTY4MGFcdTY3ZTlcdTY3YjBcdTY4MGNcdTY3ZDlcdTY3YjVcdTY3ZGFcdTY3YjNcdTY3ZGRcdTY4MDBcdTY3YzNcdTY3YjhcdTY3ZTJcdTY4MGVcdTY3YzFcdTY3ZmRcdTY4MzJcdTY4'@;
put 'MzNcdTY4NjBcdTY4NjFcdTY4NGVcdTY4NjJcdTY4NDRcdTY4NjRcdTY4ODNcdTY4MWRcdTY4NTVcdTY4NjZcdTY4NDFcdTY4NjdcdTY4NDBcdTY4M2VcdTY4NGFcdTY4NDlcdTY4MjlcdTY4YjVcdTY4OGZcdTY4NzRcdTY4NzdcdTY4OTNcdTY4NmJcdTY4YzJcdTY5NmVcdTY4ZmNcdTY5MWZc'@;
put 'dTY5MjBcdTY4ZjlcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMzJdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIzMl1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMzJdW2ddXT01OTM5MitnLHlbNTkzOTIrZ109X1syMzJdW2ddKTtmb3IoX1syMzNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTY5MjRcdTY4ZjBcdTY5MGJcdTY5MDFcdTY5NTdcdTY4ZTNcdTY5MTBcdTY5'@;
put 'NzFcdTY5MzlcdTY5NjBcdTY5NDJcdTY5NWRcdTY5ODRcdTY5NmJcdTY5ODBcdTY5OThcdTY5NzhcdTY5MzRcdTY5Y2NcdTY5ODdcdTY5ODhcdTY5Y2VcdTY5ODlcdTY5NjZcdTY5NjNcdTY5NzlcdTY5OWJcdTY5YTdcdTY5YmJcdTY5YWJcdTY5YWRcdTY5ZDRcdTY5YjFcdTY5YzFcdTY5Y2Fc'@;
put 'dTY5ZGZcdTY5OTVcdTY5ZTBcdTY5OGRcdTY5ZmZcdTZhMmZcdTY5ZWRcdTZhMTdcdTZhMThcdTZhNjVcdTY5ZjJcdTZhNDRcdTZhM2VcdTZhYTBcdTZhNTBcdTZhNWJcdTZhMzVcdTZhOGVcdTZhNzlcdTZhM2RcdTZhMjhcdTZhNThcdTZhN2NcdTZhOTFcdTZhOTBcdTZhYTlcdTZhOTdcdTZh'@;
put 'YWJcdTczMzdcdTczNTJcdTZiODFcdTZiODJcdTZiODdcdTZiODRcdTZiOTJcdTZiOTNcdTZiOGRcdTZiOWFcdTZiOWJcdTZiYTFcdTZiYWFcdThmNmJcdThmNmRcdThmNzFcdThmNzJcdThmNzNcdThmNzVcdThmNzZcdThmNzhcdThmNzdcdThmNzlcdThmN2FcdThmN2NcdThmN2VcdThmODFc'@;
put 'dThmODJcdThmODRcdThmODdcdThmOGJcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMzNdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIzM11bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMzNdW2ddXT01OTY0OCtnLHlbNTk2NDgrZ109X1syMzNdW2ddKTtmb3IoX1syMzRdPSJcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdThmOGRcdThmOGVcdThmOGZcdThmOThcdThmOWFcdThl'@;
put 'Y2VcdTYyMGJcdTYyMTdcdTYyMWJcdTYyMWZcdTYyMjJcdTYyMjFcdTYyMjVcdTYyMjRcdTYyMmNcdTgxZTdcdTc0ZWZcdTc0ZjRcdTc0ZmZcdTc1MGZcdTc1MTFcdTc1MTNcdTY1MzRcdTY1ZWVcdTY1ZWZcdTY1ZjBcdTY2MGFcdTY2MTlcdTY3NzJcdTY2MDNcdTY2MTVcdTY2MDBcdTcwODVc'@;
put 'dTY2ZjdcdTY2MWRcdTY2MzRcdTY2MzFcdTY2MzZcdTY2MzVcdTgwMDZcdTY2NWZcdTY2NTRcdTY2NDFcdTY2NGZcdTY2NTZcdTY2NjFcdTY2NTdcdTY2NzdcdTY2ODRcdTY2OGNcdTY2YTdcdTY2OWRcdTY2YmVcdTY2ZGJcdTY2ZGNcdTY2ZTZcdTY2ZTlcdThkMzJcdThkMzNcdThkMzZcdThk'@;
put 'M2JcdThkM2RcdThkNDBcdThkNDVcdThkNDZcdThkNDhcdThkNDlcdThkNDdcdThkNGRcdThkNTVcdThkNTlcdTg5YzdcdTg5Y2FcdTg5Y2JcdTg5Y2NcdTg5Y2VcdTg5Y2ZcdTg5ZDBcdTg5ZDFcdTcyNmVcdTcyOWZcdTcyNWRcdTcyNjZcdTcyNmZcdTcyN2VcdTcyN2ZcdTcyODRcdTcyOGJc'@;
put 'dTcyOGRcdTcyOGZcdTcyOTJcdTYzMDhcdTYzMzJcdTYzYjBcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMzRdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIzNF1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMzRdW2ddXT01OTkwNCtnLHlbNTk5MDQrZ109X1syMzRdW2ddKTtmb3IoX1syMzVd'@;
put 'PSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTY0M2ZcdTY0ZDhcdTgwMDRcdTZi'@;
put 'ZWFcdTZiZjNcdTZiZmRcdTZiZjVcdTZiZjlcdTZjMDVcdTZjMDdcdTZjMDZcdTZjMGRcdTZjMTVcdTZjMThcdTZjMTlcdTZjMWFcdTZjMjFcdTZjMjlcdTZjMjRcdTZjMmFcdTZjMzJcdTY1MzVcdTY1NTVcdTY1NmJcdTcyNGRcdTcyNTJcdTcyNTZcdTcyMzBcdTg2NjJcdTUyMTZcdTgwOWZc'@;
put 'dTgwOWNcdTgwOTNcdTgwYmNcdTY3MGFcdTgwYmRcdTgwYjFcdTgwYWJcdTgwYWRcdTgwYjRcdTgwYjdcdTgwZTdcdTgwZThcdTgwZTlcdTgwZWFcdTgwZGJcdTgwYzJcdTgwYzRcdTgwZDlcdTgwY2RcdTgwZDdcdTY3MTBcdTgwZGRcdTgwZWJcdTgwZjFcdTgwZjRcdTgwZWRcdTgxMGRcdTgx'@;
put 'MGVcdTgwZjJcdTgwZmNcdTY3MTVcdTgxMTJcdThjNWFcdTgxMzZcdTgxMWVcdTgxMmNcdTgxMThcdTgxMzJcdTgxNDhcdTgxNGNcdTgxNTNcdTgxNzRcdTgxNTlcdTgxNWFcdTgxNzFcdTgxNjBcdTgxNjlcdTgxN2NcdTgxN2RcdTgxNmRcdTgxNjdcdTU4NGRcdTVhYjVcdTgxODhcdTgxODJc'@;
put 'dTgxOTFcdTZlZDVcdTgxYTNcdTgxYWFcdTgxY2NcdTY3MjZcdTgxY2FcdTgxYmJcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMzVdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIzNV1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMzVdW2ddXT02MDE2MCtnLHlbNjAxNjArZ109X1syMzVdW2dd'@;
put 'KTtmb3IoX1syMzZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTgxYzFcdTgx'@;
put 'YTZcdTZiMjRcdTZiMzdcdTZiMzlcdTZiNDNcdTZiNDZcdTZiNTlcdTk4ZDFcdTk4ZDJcdTk4ZDNcdTk4ZDVcdTk4ZDlcdTk4ZGFcdTZiYjNcdTVmNDBcdTZiYzJcdTg5ZjNcdTY1OTBcdTlmNTFcdTY1OTNcdTY1YmNcdTY1YzZcdTY1YzRcdTY1YzNcdTY1Y2NcdTY1Y2VcdTY1ZDJcdTY1ZDZc'@;
put 'dTcwODBcdTcwOWNcdTcwOTZcdTcwOWRcdTcwYmJcdTcwYzBcdTcwYjdcdTcwYWJcdTcwYjFcdTcwZThcdTcwY2FcdTcxMTBcdTcxMTNcdTcxMTZcdTcxMmZcdTcxMzFcdTcxNzNcdTcxNWNcdTcxNjhcdTcxNDVcdTcxNzJcdTcxNGFcdTcxNzhcdTcxN2FcdTcxOThcdTcxYjNcdTcxYjVcdTcx'@;
put 'YThcdTcxYTBcdTcxZTBcdTcxZDRcdTcxZTdcdTcxZjlcdTcyMWRcdTcyMjhcdTcwNmNcdTcxMThcdTcxNjZcdTcxYjlcdTYyM2VcdTYyM2RcdTYyNDNcdTYyNDhcdTYyNDlcdTc5M2JcdTc5NDBcdTc5NDZcdTc5NDlcdTc5NWJcdTc5NWNcdTc5NTNcdTc5NWFcdTc5NjJcdTc5NTdcdTc5NjBc'@;
put 'dTc5NmZcdTc5NjdcdTc5N2FcdTc5ODVcdTc5OGFcdTc5OWFcdTc5YTdcdTc5YjNcdTVmZDFcdTVmZDBcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMzZdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIzNl1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMzZdW2ddXT02MDQxNitnLHlbNjA0MTYr'@;
put 'Z109X1syMzZdW2ddKTtmb3IoX1syMzddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdTYwM2NcdTYwNWRcdTYwNWFcdTYwNjdcdTYwNDFcdTYwNTlcdTYwNjNcdTYwYWJcdTYxMDZcdTYxMGRcdTYxNWRcdTYxYTlcdTYxOWRcdTYxY2JcdTYxZDFcdTYyMDZcdTgwODBcdTgwN2ZcdTZjOTNcdTZjZjZcdTZkZmNcdTc3ZjZcdTc3ZjhcdTc4MDBcdTc4MDlcdTc4MTdcdTc4MThc'@;
put 'dTc4MTFcdTY1YWJcdTc4MmRcdTc4MWNcdTc4MWRcdTc4MzlcdTc4M2FcdTc4M2JcdTc4MWZcdTc4M2NcdTc4MjVcdTc4MmNcdTc4MjNcdTc4MjlcdTc4NGVcdTc4NmRcdTc4NTZcdTc4NTdcdTc4MjZcdTc4NTBcdTc4NDdcdTc4NGNcdTc4NmFcdTc4OWJcdTc4OTNcdTc4OWFcdTc4ODdcdTc4'@;
put 'OWNcdTc4YTFcdTc4YTNcdTc4YjJcdTc4YjlcdTc4YTVcdTc4ZDRcdTc4ZDlcdTc4YzlcdTc4ZWNcdTc4ZjJcdTc5MDVcdTc4ZjRcdTc5MTNcdTc5MjRcdTc5MWVcdTc5MzRcdTlmOWJcdTllZjlcdTllZmJcdTllZmNcdTc2ZjFcdTc3MDRcdTc3MGRcdTc2ZjlcdTc3MDdcdTc3MDhcdTc3MWFc'@;
put 'dTc3MjJcdTc3MTlcdTc3MmRcdTc3MjZcdTc3MzVcdTc3MzhcdTc3NTBcdTc3NTFcdTc3NDdcdTc3NDNcdTc3NWFcdTc3NjhcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMzddLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIzN11bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMzddW2ddXT02MDY3'@;
put 'MitnLHlbNjA2NzIrZ109X1syMzddW2ddKTtmb3IoX1syMzhdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdTc3NjJcdTc3NjVcdTc3N2ZcdTc3OGRcdTc3N2RcdTc3ODBcdTc3OGNcdTc3OTFcdTc3OWZcdTc3YTBcdTc3YjBcdTc3YjVcdTc3YmRcdTc1M2FcdTc1NDBcdTc1NGVcdTc1NGJcdTc1NDhcdTc1NWJcdTc1NzJcdTc1NzlcdTc1ODNcdTdmNThcdTdmNjFcdTdmNWZc'@;
put 'dThhNDhcdTdmNjhcdTdmNzRcdTdmNzFcdTdmNzlcdTdmODFcdTdmN2VcdTc2Y2RcdTc2ZTVcdTg4MzJcdTk0ODVcdTk0ODZcdTk0ODdcdTk0OGJcdTk0OGFcdTk0OGNcdTk0OGRcdTk0OGZcdTk0OTBcdTk0OTRcdTk0OTdcdTk0OTVcdTk0OWFcdTk0OWJcdTk0OWNcdTk0YTNcdTk0YTRcdTk0'@;
put 'YWJcdTk0YWFcdTk0YWRcdTk0YWNcdTk0YWZcdTk0YjBcdTk0YjJcdTk0YjRcdTk0YjZcdTk0YjdcdTk0YjhcdTk0YjlcdTk0YmFcdTk0YmNcdTk0YmRcdTk0YmZcdTk0YzRcdTk0YzhcdTk0YzlcdTk0Y2FcdTk0Y2JcdTk0Y2NcdTk0Y2RcdTk0Y2VcdTk0ZDBcdTk0ZDFcdTk0ZDJcdTk0ZDVc'@;
put 'dTk0ZDZcdTk0ZDdcdTk0ZDlcdTk0ZDhcdTk0ZGJcdTk0ZGVcdTk0ZGZcdTk0ZTBcdTk0ZTJcdTk0ZTRcdTk0ZTVcdTk0ZTdcdTk0ZThcdTk0ZWFcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMzhdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIzOF1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sy'@;
put 'MzhdW2ddXT02MDkyOCtnLHlbNjA5MjgrZ109X1syMzhdW2ddKTtmb3IoX1syMzldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTk0ZTlcdTk0ZWJcdTk0ZWVcdTk0ZWZcdTk0ZjNcdTk0ZjRcdTk0ZjVcdTk0ZjdcdTk0ZjlcdTk0ZmNcdTk0ZmRcdTk0ZmZcdTk1MDNcdTk1MDJcdTk1MDZcdTk1MDdcdTk1MDlcdTk1MGFcdTk1MGRcdTk1MGVcdTk1MGZcdTk1MTJcdTk1MTNc'@;
put 'dTk1MTRcdTk1MTVcdTk1MTZcdTk1MThcdTk1MWJcdTk1MWRcdTk1MWVcdTk1MWZcdTk1MjJcdTk1MmFcdTk1MmJcdTk1MjlcdTk1MmNcdTk1MzFcdTk1MzJcdTk1MzRcdTk1MzZcdTk1MzdcdTk1MzhcdTk1M2NcdTk1M2VcdTk1M2ZcdTk1NDJcdTk1MzVcdTk1NDRcdTk1NDVcdTk1NDZcdTk1'@;
put 'NDlcdTk1NGNcdTk1NGVcdTk1NGZcdTk1NTJcdTk1NTNcdTk1NTRcdTk1NTZcdTk1NTdcdTk1NThcdTk1NTlcdTk1NWJcdTk1NWVcdTk1NWZcdTk1NWRcdTk1NjFcdTk1NjJcdTk1NjRcdTk1NjVcdTk1NjZcdTk1NjdcdTk1NjhcdTk1NjlcdTk1NmFcdTk1NmJcdTk1NmNcdTk1NmZcdTk1NzFc'@;
put 'dTk1NzJcdTk1NzNcdTk1M2FcdTc3ZTdcdTc3ZWNcdTk2YzlcdTc5ZDVcdTc5ZWRcdTc5ZTNcdTc5ZWJcdTdhMDZcdTVkNDdcdTdhMDNcdTdhMDJcdTdhMWVcdTdhMTRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMzldLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIzOV1bZ10uY2hhckNvZGVB'@;
put 'dCgwKSYmKElbX1syMzldW2ddXT02MTE4NCtnLHlbNjExODQrZ109X1syMzldW2ddKTtmb3IoX1syNDBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTdhMzlcdTdhMzdcdTdhNTFcdTllY2ZcdTk5YTVcdTdhNzBcdTc2ODhcdTc2OGVcdTc2OTNcdTc2OTlcdTc2YTRcdTc0ZGVcdTc0ZTBcdTc1MmNcdTllMjBcdTllMjJcdTllMjhcdTllMjlcdTllMmFcdTllMmJcdTllMmNc'@;
put 'dTllMzJcdTllMzFcdTllMzZcdTllMzhcdTllMzdcdTllMzlcdTllM2FcdTllM2VcdTllNDFcdTllNDJcdTllNDRcdTllNDZcdTllNDdcdTllNDhcdTllNDlcdTllNGJcdTllNGNcdTllNGVcdTllNTFcdTllNTVcdTllNTdcdTllNWFcdTllNWJcdTllNWNcdTllNWVcdTllNjNcdTllNjZcdTll'@;
put 'NjdcdTllNjhcdTllNjlcdTllNmFcdTllNmJcdTllNmNcdTllNzFcdTllNmRcdTllNzNcdTc1OTJcdTc1OTRcdTc1OTZcdTc1YTBcdTc1OWRcdTc1YWNcdTc1YTNcdTc1YjNcdTc1YjRcdTc1YjhcdTc1YzRcdTc1YjFcdTc1YjBcdTc1YzNcdTc1YzJcdTc1ZDZcdTc1Y2RcdTc1ZTNcdTc1ZThc'@;
put 'dTc1ZTZcdTc1ZTRcdTc1ZWJcdTc1ZTdcdTc2MDNcdTc1ZjFcdTc1ZmNcdTc1ZmZcdTc2MTBcdTc2MDBcdTc2MDVcdTc2MGNcdTc2MTdcdTc2MGFcdTc2MjVcdTc2MThcdTc2MTVcdTc2MTlcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syNDBdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzI0MF1b'@;
put 'Z10uY2hhckNvZGVBdCgwKSYmKElbX1syNDBdW2ddXT02MTQ0MCtnLHlbNjE0NDArZ109X1syNDBdW2ddKTtmb3IoX1syNDFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc2MWJcdTc2M2NcdTc2MjJcdTc2MjBcdTc2NDBcdTc2MmRcdTc2MzBcdTc2M2ZcdTc2MzVcdTc2NDNcdTc2M2VcdTc2MzNcdTc2NGRcdTc2NWVcdTc2NTRcdTc2NWNcdTc2NTZcdTc2NmJcdTc2NmZc'@;
put 'dTdmY2FcdTdhZTZcdTdhNzhcdTdhNzlcdTdhODBcdTdhODZcdTdhODhcdTdhOTVcdTdhYTZcdTdhYTBcdTdhYWNcdTdhYThcdTdhYWRcdTdhYjNcdTg4NjRcdTg4NjlcdTg4NzJcdTg4N2RcdTg4N2ZcdTg4ODJcdTg4YTJcdTg4YzZcdTg4YjdcdTg4YmNcdTg4YzlcdTg4ZTJcdTg4Y2VcdTg4'@;
put 'ZTNcdTg4ZTVcdTg4ZjFcdTg5MWFcdTg4ZmNcdTg4ZThcdTg4ZmVcdTg4ZjBcdTg5MjFcdTg5MTlcdTg5MTNcdTg5MWJcdTg5MGFcdTg5MzRcdTg5MmJcdTg5MzZcdTg5NDFcdTg5NjZcdTg5N2JcdTc1OGJcdTgwZTVcdTc2YjJcdTc2YjRcdTc3ZGNcdTgwMTJcdTgwMTRcdTgwMTZcdTgwMWNc'@;
put 'dTgwMjBcdTgwMjJcdTgwMjVcdTgwMjZcdTgwMjdcdTgwMjlcdTgwMjhcdTgwMzFcdTgwMGJcdTgwMzVcdTgwNDNcdTgwNDZcdTgwNGRcdTgwNTJcdTgwNjlcdTgwNzFcdTg5ODNcdTk4NzhcdTk4ODBcdTk4ODNcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syNDFdLmxlbmd0aDsrK2cpNjU1'@;
put 'MzMhPT1fWzI0MV1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syNDFdW2ddXT02MTY5NitnLHlbNjE2OTYrZ109X1syNDFdW2ddKTtmb3IoX1syNDJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTk4ODlcdTk4OGNcdTk4OGRcdTk4OGZcdTk4OTRcdTk4OWFcdTk4OWJcdTk4OWVcdTk4OWZcdTk4YTFcdTk4YTJcdTk4YTVcdTk4YTZcdTg2NGRcdTg2NTRcdTg2NmNcdTg2NmVc'@;
put 'dTg2N2ZcdTg2N2FcdTg2N2NcdTg2N2JcdTg2YThcdTg2OGRcdTg2OGJcdTg2YWNcdTg2OWRcdTg2YTdcdTg2YTNcdTg2YWFcdTg2OTNcdTg2YTlcdTg2YjZcdTg2YzRcdTg2YjVcdTg2Y2VcdTg2YjBcdTg2YmFcdTg2YjFcdTg2YWZcdTg2YzlcdTg2Y2ZcdTg2YjRcdTg2ZTlcdTg2ZjFcdTg2'@;
put 'ZjJcdTg2ZWRcdTg2ZjNcdTg2ZDBcdTg3MTNcdTg2ZGVcdTg2ZjRcdTg2ZGZcdTg2ZDhcdTg2ZDFcdTg3MDNcdTg3MDdcdTg2ZjhcdTg3MDhcdTg3MGFcdTg3MGRcdTg3MDlcdTg3MjNcdTg3M2JcdTg3MWVcdTg3MjVcdTg3MmVcdTg3MWFcdTg3M2VcdTg3NDhcdTg3MzRcdTg3MzFcdTg3Mjlc'@;
put 'dTg3MzdcdTg3M2ZcdTg3ODJcdTg3MjJcdTg3N2RcdTg3N2VcdTg3N2JcdTg3NjBcdTg3NzBcdTg3NGNcdTg3NmVcdTg3OGJcdTg3NTNcdTg3NjNcdTg3N2NcdTg3NjRcdTg3NTlcdTg3NjVcdTg3OTNcdTg3YWZcdTg3YThcdTg3ZDJcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syNDJdLmxl'@;
put 'bmd0aDsrK2cpNjU1MzMhPT1fWzI0Ml1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syNDJdW2ddXT02MTk1MitnLHlbNjE5NTIrZ109X1syNDJdW2ddKTtmb3IoX1syNDNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTg3YzZcdTg3ODhcdTg3ODVcdTg3YWRcdTg3OTdcdTg3ODNcdTg3YWJcdTg3ZTVcdTg3YWNcdTg3YjVcdTg3YjNcdTg3Y2JcdTg3ZDNcdTg3YmRcdTg3ZDFc'@;
put 'dTg3YzBcdTg3Y2FcdTg3ZGJcdTg3ZWFcdTg3ZTBcdTg3ZWVcdTg4MTZcdTg4MTNcdTg3ZmVcdTg4MGFcdTg4MWJcdTg4MjFcdTg4MzlcdTg4M2NcdTdmMzZcdTdmNDJcdTdmNDRcdTdmNDVcdTgyMTBcdTdhZmFcdTdhZmRcdTdiMDhcdTdiMDNcdTdiMDRcdTdiMTVcdTdiMGFcdTdiMmJcdTdi'@;
put 'MGZcdTdiNDdcdTdiMzhcdTdiMmFcdTdiMTlcdTdiMmVcdTdiMzFcdTdiMjBcdTdiMjVcdTdiMjRcdTdiMzNcdTdiM2VcdTdiMWVcdTdiNThcdTdiNWFcdTdiNDVcdTdiNzVcdTdiNGNcdTdiNWRcdTdiNjBcdTdiNmVcdTdiN2JcdTdiNjJcdTdiNzJcdTdiNzFcdTdiOTBcdTdiYTZcdTdiYTdc'@;
put 'dTdiYjhcdTdiYWNcdTdiOWRcdTdiYThcdTdiODVcdTdiYWFcdTdiOWNcdTdiYTJcdTdiYWJcdTdiYjRcdTdiZDFcdTdiYzFcdTdiY2NcdTdiZGRcdTdiZGFcdTdiZTVcdTdiZTZcdTdiZWFcdTdjMGNcdTdiZmVcdTdiZmNcdTdjMGZcdTdjMTZcdTdjMGJcdWZmZmQiLnNwbGl0KCIiKSxnPTA7'@;
put 'ZyE9X1syNDNdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzI0M11bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syNDNdW2ddXT02MjIwOCtnLHlbNjIyMDgrZ109X1syNDNdW2ddKTtmb3IoX1syNDRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTdjMWZcdTdjMmFcdTdjMjZcdTdjMzhcdTdjNDFcdTdjNDBcdTgxZmVcdTgyMDFcdTgyMDJcdTgyMDRcdTgxZWNcdTg4NDRcdTgyMjFc'@;
put 'dTgyMjJcdTgyMjNcdTgyMmRcdTgyMmZcdTgyMjhcdTgyMmJcdTgyMzhcdTgyM2JcdTgyMzNcdTgyMzRcdTgyM2VcdTgyNDRcdTgyNDlcdTgyNGJcdTgyNGZcdTgyNWFcdTgyNWZcdTgyNjhcdTg4N2VcdTg4ODVcdTg4ODhcdTg4ZDhcdTg4ZGZcdTg5NWVcdTdmOWRcdTdmOWZcdTdmYTdcdTdm'@;
put 'YWZcdTdmYjBcdTdmYjJcdTdjN2NcdTY1NDlcdTdjOTFcdTdjOWRcdTdjOWNcdTdjOWVcdTdjYTJcdTdjYjJcdTdjYmNcdTdjYmRcdTdjYzFcdTdjYzdcdTdjY2NcdTdjY2RcdTdjYzhcdTdjYzVcdTdjZDdcdTdjZThcdTgyNmVcdTY2YThcdTdmYmZcdTdmY2VcdTdmZDVcdTdmZTVcdTdmZTFc'@;
put 'dTdmZTZcdTdmZTlcdTdmZWVcdTdmZjNcdTdjZjhcdTdkNzdcdTdkYTZcdTdkYWVcdTdlNDdcdTdlOWJcdTllYjhcdTllYjRcdThkNzNcdThkODRcdThkOTRcdThkOTFcdThkYjFcdThkNjdcdThkNmRcdThjNDdcdThjNDlcdTkxNGFcdTkxNTBcdTkxNGVcdTkxNGZcdTkxNjRcdWZmZmQiLnNw'@;
put 'bGl0KCIiKSxnPTA7ZyE9X1syNDRdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzI0NF1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syNDRdW2ddXT02MjQ2NCtnLHlbNjI0NjQrZ109X1syNDRdW2ddKTtmb3IoX1syNDVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTkxNjJcdTkxNjFcdTkxNzBcdTkxNjlcdTkxNmZcdTkxN2RcdTkxN2VcdTkxNzJcdTkxNzRcdTkxNzlcdTkxOGNc'@;
put 'dTkxODVcdTkxOTBcdTkxOGRcdTkxOTFcdTkxYTJcdTkxYTNcdTkxYWFcdTkxYWRcdTkxYWVcdTkxYWZcdTkxYjVcdTkxYjRcdTkxYmFcdThjNTVcdTllN2VcdThkYjhcdThkZWJcdThlMDVcdThlNTlcdThlNjlcdThkYjVcdThkYmZcdThkYmNcdThkYmFcdThkYzRcdThkZDZcdThkZDdcdThk'@;
put 'ZGFcdThkZGVcdThkY2VcdThkY2ZcdThkZGJcdThkYzZcdThkZWNcdThkZjdcdThkZjhcdThkZTNcdThkZjlcdThkZmJcdThkZTRcdThlMDlcdThkZmRcdThlMTRcdThlMWRcdThlMWZcdThlMmNcdThlMmVcdThlMjNcdThlMmZcdThlM2FcdThlNDBcdThlMzlcdThlMzVcdThlM2RcdThlMzFc'@;
put 'dThlNDlcdThlNDFcdThlNDJcdThlNTFcdThlNTJcdThlNGFcdThlNzBcdThlNzZcdThlN2NcdThlNmZcdThlNzRcdThlODVcdThlOGZcdThlOTRcdThlOTBcdThlOWNcdThlOWVcdThjNzhcdThjODJcdThjOGFcdThjODVcdThjOThcdThjOTRcdTY1OWJcdTg5ZDZcdTg5ZGVcdTg5ZGFcdTg5'@;
put 'ZGNcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syNDVdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzI0NV1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syNDVdW2ddXT02MjcyMCtnLHlbNjI3MjArZ109X1syNDVdW2ddKTtmb3IoX1syNDZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTg5ZTVcdTg5ZWJcdTg5ZWZcdThhM2VcdThiMjZcdTk3NTNcdTk2ZTlcdTk2ZjNcdTk2ZWZc'@;
put 'dTk3MDZcdTk3MDFcdTk3MDhcdTk3MGZcdTk3MGVcdTk3MmFcdTk3MmRcdTk3MzBcdTk3M2VcdTlmODBcdTlmODNcdTlmODVcdTlmODZcdTlmODdcdTlmODhcdTlmODlcdTlmOGFcdTlmOGNcdTllZmVcdTlmMGJcdTlmMGRcdTk2YjlcdTk2YmNcdTk2YmRcdTk2Y2VcdTk2ZDJcdTc3YmZcdTk2'@;
put 'ZTBcdTkyOGVcdTkyYWVcdTkyYzhcdTkzM2VcdTkzNmFcdTkzY2FcdTkzOGZcdTk0M2VcdTk0NmJcdTljN2ZcdTljODJcdTljODVcdTljODZcdTljODdcdTljODhcdTdhMjNcdTljOGJcdTljOGVcdTljOTBcdTljOTFcdTljOTJcdTljOTRcdTljOTVcdTljOWFcdTljOWJcdTljOWVcdTljOWZc'@;
put 'dTljYTBcdTljYTFcdTljYTJcdTljYTNcdTljYTVcdTljYTZcdTljYTdcdTljYThcdTljYTlcdTljYWJcdTljYWRcdTljYWVcdTljYjBcdTljYjFcdTljYjJcdTljYjNcdTljYjRcdTljYjVcdTljYjZcdTljYjdcdTljYmFcdTljYmJcdTljYmNcdTljYmRcdTljYzRcdTljYzVcdTljYzZcdTlj'@;
put 'YzdcdTljY2FcdTljY2JcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syNDZdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzI0Nl1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syNDZdW2ddXT02Mjk3NitnLHlbNjI5NzYrZ109X1syNDZdW2ddKTtmb3IoX1syNDddPSJcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTljY2NcdTljY2RcdTljY2VcdTljY2ZcdTljZDBcdTljZDNcdTljZDRc'@;
put 'dTljZDVcdTljZDdcdTljZDhcdTljZDlcdTljZGNcdTljZGRcdTljZGZcdTljZTJcdTk3N2NcdTk3ODVcdTk3OTFcdTk3OTJcdTk3OTRcdTk3YWZcdTk3YWJcdTk3YTNcdTk3YjJcdTk3YjRcdTlhYjFcdTlhYjBcdTlhYjdcdTllNThcdTlhYjZcdTlhYmFcdTlhYmNcdTlhYzFcdTlhYzBcdTlh'@;
put 'YzVcdTlhYzJcdTlhY2JcdTlhY2NcdTlhZDFcdTliNDVcdTliNDNcdTliNDdcdTliNDlcdTliNDhcdTliNGRcdTliNTFcdTk4ZThcdTk5MGRcdTk5MmVcdTk5NTVcdTk5NTRcdTlhZGZcdTlhZTFcdTlhZTZcdTlhZWZcdTlhZWJcdTlhZmJcdTlhZWRcdTlhZjlcdTliMDhcdTliMGZcdTliMTNc'@;
put 'dTliMWZcdTliMjNcdTllYmRcdTllYmVcdTdlM2JcdTllODJcdTllODdcdTllODhcdTllOGJcdTllOTJcdTkzZDZcdTllOWRcdTllOWZcdTllZGJcdTllZGNcdTllZGRcdTllZTBcdTllZGZcdTllZTJcdTllZTlcdTllZTdcdTllZTVcdTllZWFcdTllZWZcdTlmMjJcdTlmMmNcdTlmMmZcdTlm'@;
put 'MzlcdTlmMzdcdTlmM2RcdTlmM2VcdTlmNDRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syNDddLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzI0N11bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syNDddW2ddXT02MzIzMitnLHlbNjMyMzIrZ109X1syNDddW2ddKTtyZXR1cm57ZW5jOkksZGVjOnl9'@;
put 'fSgpLFhbMTAwMjldPWZ1bmN0aW9uKCl7Zm9yKHZhciB5PSJcMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWYgIVwiIyQlJicoKSorLC0u'@;
put 'LzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XHg3Zlx4YzRcdTAxMDBcdTAxMDFceGM5XHUwMTA0XHhkNlx4ZGNceGUxXHUwMTA1XHUwMTBjXHhlNFx1MDEwZFx1MDEwNlx1MDEwN1x4ZTlcdTAx'@;
put 'NzlcdTAxN2FcdTAxMGVceGVkXHUwMTBmXHUwMTEyXHUwMTEzXHUwMTE2XHhmM1x1MDExN1x4ZjRceGY2XHhmNVx4ZmFcdTAxMWFcdTAxMWJceGZjXHUyMDIwXHhiMFx1MDExOFx4YTNceGE3XHUyMDIyXHhiNlx4ZGZceGFlXHhhOVx1MjEyMlx1MDExOVx4YThcdTIyNjBcdTAxMjNcdTAxMmVc'@;
put 'dTAxMmZcdTAxMmFcdTIyNjRcdTIyNjVcdTAxMmJcdTAxMzZcdTIyMDJcdTIyMTFcdTAxNDJcdTAxM2JcdTAxM2NcdTAxM2RcdTAxM2VcdTAxMzlcdTAxM2FcdTAxNDVcdTAxNDZcdTAxNDNceGFjXHUyMjFhXHUwMTQ0XHUwMTQ3XHUyMjA2XHhhYlx4YmJcdTIwMjZceGEwXHUwMTQ4XHUwMTUw'@;
put 'XHhkNVx1MDE1MVx1MDE0Y1x1MjAxM1x1MjAxNFx1MjAxY1x1MjAxZFx1MjAxOFx1MjAxOVx4ZjdcdTI1Y2FcdTAxNGRcdTAxNTRcdTAxNTVcdTAxNThcdTIwMzlcdTIwM2FcdTAxNTlcdTAxNTZcdTAxNTdcdTAxNjBcdTIwMWFcdTIwMWVcdTAxNjFcdTAxNWFcdTAxNWJceGMxXHUwMTY0XHUw'@;
put 'MTY1XHhjZFx1MDE3ZFx1MDE3ZVx1MDE2YVx4ZDNceGQ0XHUwMTZiXHUwMTZlXHhkYVx1MDE2Zlx1MDE3MFx1MDE3MVx1MDE3Mlx1MDE3M1x4ZGRceGZkXHUwMTM3XHUwMTdiXHUwMTQxXHUwMTdjXHUwMTIyXHUwMmM3IixJPVtdLF89e30sZz0wOzI1NiE9ZzsrK2cpNjU1MzMhPT15LmNoYXJD'@;
put 'b2RlQXQoZykmJihfW3kuY2hhckF0KGcpXT1nKSxJW2ddPXkuY2hhckF0KGcpO3JldHVybntlbmM6XyxkZWM6SX19KCksWFsxMDA3OV09ZnVuY3Rpb24oKXtmb3IodmFyIHk9IlwwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwN1xiXHRcblx2XGZcclx4MGVceDBmXHgxMFx4MTFceDEyXHgx'@;
put 'M1x4MTRceDE1XHgxNlx4MTdceDE4XHgxOVx4MWFceDFiXHgxY1x4MWRceDFlXHgxZiAhXCIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5ceDdmXHhjNFx4YzVceGM3XHhj'@;
put 'OVx4ZDFceGQ2XHhkY1x4ZTFceGUwXHhlMlx4ZTRceGUzXHhlNVx4ZTdceGU5XHhlOFx4ZWFceGViXHhlZFx4ZWNceGVlXHhlZlx4ZjFceGYzXHhmMlx4ZjRceGY2XHhmNVx4ZmFceGY5XHhmYlx4ZmNceGRkXHhiMFx4YTJceGEzXHhhN1x1MjAyMlx4YjZceGRmXHhhZVx4YTlcdTIxMjJceGI0'@;
put 'XHhhOFx1MjI2MFx4YzZceGQ4XHUyMjFlXHhiMVx1MjI2NFx1MjI2NVx4YTVceGI1XHUyMjAyXHUyMjExXHUyMjBmXHUwM2MwXHUyMjJiXHhhYVx4YmFcdTIxMjZceGU2XHhmOFx4YmZceGExXHhhY1x1MjIxYVx1MDE5Mlx1MjI0OFx1MjIwNlx4YWJceGJiXHUyMDI2XHhhMFx4YzBceGMzXHhk'@;
put 'NVx1MDE1Mlx1MDE1M1x1MjAxM1x1MjAxNFx1MjAxY1x1MjAxZFx1MjAxOFx1MjAxOVx4ZjdcdTI1Y2FceGZmXHUwMTc4XHUyMDQ0XHhhNFx4ZDBceGYwXHhkZVx4ZmVceGZkXHhiN1x1MjAxYVx1MjAxZVx1MjAzMFx4YzJceGNhXHhjMVx4Y2JceGM4XHhjZFx4Y2VceGNmXHhjY1x4ZDNceGQ0'@;
put 'XHVmZmZkXHhkMlx4ZGFceGRiXHhkOVx1MDEzMVx1MDJjNlx1MDJkY1x4YWZcdTAyZDhcdTAyZDlcdTAyZGFceGI4XHUwMmRkXHUwMmRiXHUwMmM3IixJPVtdLF89e30sZz0wOzI1NiE9ZzsrK2cpNjU1MzMhPT15LmNoYXJDb2RlQXQoZykmJihfW3kuY2hhckF0KGcpXT1nKSxJW2ddPXkuY2hh'@;
put 'ckF0KGcpO3JldHVybntlbmM6XyxkZWM6SX19KCksWFsxMDA4MV09ZnVuY3Rpb24oKXtmb3IodmFyIHk9IlwwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwN1xiXHRcblx2XGZcclx4MGVceDBmXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTdceDE4XHgxOVx4MWFceDFiXHgxY1x4'@;
put 'MWRceDFlXHgxZiAhXCIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5ceDdmXHhjNFx4YzVceGM3XHhjOVx4ZDFceGQ2XHhkY1x4ZTFceGUwXHhlMlx4ZTRceGUzXHhlNVx4'@;
put 'ZTdceGU5XHhlOFx4ZWFceGViXHhlZFx4ZWNceGVlXHhlZlx4ZjFceGYzXHhmMlx4ZjRceGY2XHhmNVx4ZmFceGY5XHhmYlx4ZmNcdTIwMjBceGIwXHhhMlx4YTNceGE3XHUyMDIyXHhiNlx4ZGZceGFlXHhhOVx1MjEyMlx4YjRceGE4XHUyMjYwXHhjNlx4ZDhcdTIyMWVceGIxXHUyMjY0XHUy'@;
put 'MjY1XHhhNVx4YjVcdTIyMDJcdTIyMTFcdTIyMGZcdTAzYzBcdTIyMmJceGFhXHhiYVx1MjEyNlx4ZTZceGY4XHhiZlx4YTFceGFjXHUyMjFhXHUwMTkyXHUyMjQ4XHUyMjA2XHhhYlx4YmJcdTIwMjZceGEwXHhjMFx4YzNceGQ1XHUwMTUyXHUwMTUzXHUyMDEzXHUyMDE0XHUyMDFjXHUyMDFk'@;
put 'XHUyMDE4XHUyMDE5XHhmN1x1MjVjYVx4ZmZcdTAxNzhcdTAxMWVcdTAxMWZcdTAxMzBcdTAxMzFcdTAxNWVcdTAxNWZcdTIwMjFceGI3XHUyMDFhXHUyMDFlXHUyMDMwXHhjMlx4Y2FceGMxXHhjYlx4YzhceGNkXHhjZVx4Y2ZceGNjXHhkM1x4ZDRcdWZmZmRceGQyXHhkYVx4ZGJceGQ5XHVm'@;
put 'ZmZkXHUwMmM2XHUwMmRjXHhhZlx1MDJkOFx1MDJkOVx1MDJkYVx4YjhcdTAyZGRcdTAyZGJcdTAyYzciLEk9W10sXz17fSxnPTA7MjU2IT1nOysrZyk2NTUzMyE9PXkuY2hhckNvZGVBdChnKSYmKF9beS5jaGFyQXQoZyldPWcpLElbZ109eS5jaGFyQXQoZyk7cmV0dXJue2VuYzpfLGRlYzpJ'@;
put 'fX0oKSxYWzI4NTkxXT1mdW5jdGlvbigpe2Zvcih2YXIgeT0iXDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XGJcdFxuXHZcZlxyXHgwZVx4MGZceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmICFcIiMkJSYnKCkqKywt'@;
put 'Li8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9flx4N2ZceDgwXHg4MVx4ODJceDgzXHg4NFx4ODVceDg2XHg4N1x4ODhceDg5XHg4YVx4OGJceDhjXHg4ZFx4OGVceDhmXHg5MFx4OTFceDkyXHg5'@;
put 'M1x4OTRceDk1XHg5Nlx4OTdceDk4XHg5OVx4OWFceDliXHg5Y1x4OWRceDllXHg5Zlx4YTBceGExXHhhMlx4YTNceGE0XHhhNVx4YTZceGE3XHhhOFx4YTlceGFhXHhhYlx4YWNceGFkXHhhZVx4YWZceGIwXHhiMVx4YjJceGIzXHhiNFx4YjVceGI2XHhiN1x4YjhceGI5XHhiYVx4YmJceGJj'@;
put 'XHhiZFx4YmVceGJmXHhjMFx4YzFceGMyXHhjM1x4YzRceGM1XHhjNlx4YzdceGM4XHhjOVx4Y2FceGNiXHhjY1x4Y2RceGNlXHhjZlx4ZDBceGQxXHhkMlx4ZDNceGQ0XHhkNVx4ZDZceGQ3XHhkOFx4ZDlceGRhXHhkYlx4ZGNceGRkXHhkZVx4ZGZceGUwXHhlMVx4ZTJceGUzXHhlNFx4ZTVc'@;
put 'eGU2XHhlN1x4ZThceGU5XHhlYVx4ZWJceGVjXHhlZFx4ZWVceGVmXHhmMFx4ZjFceGYyXHhmM1x4ZjRceGY1XHhmNlx4ZjdceGY4XHhmOVx4ZmFceGZiXHhmY1x4ZmRceGZlXHhmZiIsST1bXSxfPXt9LGc9MDsyNTYhPWc7KytnKTY1NTMzIT09eS5jaGFyQ29kZUF0KGcpJiYoX1t5LmNoYXJB'@;
put 'dChnKV09ZyksSVtnXT15LmNoYXJBdChnKTtyZXR1cm57ZW5jOl8sZGVjOkl9fSgpLHVlLmV4cG9ydHMmJnR5cGVvZiBET19OT1RfRVhQT1JUX0NPREVQQUdFPiJ1IiYmKHVlLmV4cG9ydHM9WCksZnVuY3Rpb24oeSxJKXsidXNlIHN0cmljdCI7aWYodHlwZW9mIFg+InUiKXt2YXIgXz1YO3Vl'@;
put 'LmV4cG9ydHMmJnR5cGVvZiBET19OT1RfRVhQT1JUX0NPREVQQUdFPiJ1Ij91ZS5leHBvcnRzPUkoXyk6eS5jcHRhYmxlPUkoXyl9ZWxzZSBYPUkoWCl9KHRoaXMsZnVuY3Rpb24oeSl7InVzZSBzdHJpY3QiO3ZhciBJPXsxMjAwOiJ1dGYxNmxlIiwxMjAxOiJ1dGYxNmJlIiwxMmUzOiJ1dGYz'@;
put 'MmxlIiwxMjAwMToidXRmMzJiZSIsMTY5Njk6InV0ZjY0bGUiLDIwMTI3OiJhc2NpaSIsNjVlMzoidXRmNyIsNjUwMDE6InV0ZjgifSxfPVs4NzQsMTI1MCwxMjUxLDEyNTIsMTI1MywxMjU0LDEyNTUsMTI1NiwxZTRdLGc9WzkzMiw5MzYsOTQ5LDk1MF0sQj1bNjUwMDFdLHc9e30sUD17fSxG'@;
put 'PXt9LE89e30sej1mdW5jdGlvbihqKXtyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShqKX0sTj1mdW5jdGlvbihqKXtyZXR1cm4gai5jaGFyQ29kZUF0KDApfSxMPXR5cGVvZiBCdWZmZXI8InUiLEs9ZnVuY3Rpb24oKXt9O2lmKEwpe3ZhciBVPSFCdWZmZXIuZnJvbTtpZighVSl0cnl7QnVm'@;
put 'ZmVyLmZyb20oImZvbyIsInV0ZjgiKX1jYXRjaHtVPSEwfUs9VT9mdW5jdGlvbihILGope3JldHVybiBqP25ldyBCdWZmZXIoSCxqKTpuZXcgQnVmZmVyKEgpfTpCdWZmZXIuZnJvbS5iaW5kKEJ1ZmZlciksQnVmZmVyLmFsbG9jVW5zYWZlfHwoQnVmZmVyLmFsbG9jVW5zYWZlPWZ1bmN0aW9u'@;
put 'KEgpe3JldHVybiBuZXcgQnVmZmVyKEgpfSk7dmFyIFc9MTAyNCxZPUJ1ZmZlci5hbGxvY1Vuc2FmZShXKSxlZT1mdW5jdGlvbihqKXt2YXIgRT1mdW5jdGlvbihqKXtmb3IodmFyIEU9QnVmZmVyLmFsbG9jVW5zYWZlKDY1NTM2KSxtPTA7bTw2NTUzNjsrK20pRVttXT0wO2Zvcih2YXIgQT1P'@;
put 'YmplY3Qua2V5cyhqKSxhZT1BLmxlbmd0aCx0ZT0wLHNlPUFbdGVdO3RlPGFlOysrdGUpKHNlPUFbdGVdKSYmKEVbc2UuY2hhckNvZGVBdCgwKV09altzZV0pO3JldHVybiBFfSh5W2pdLmVuYyk7cmV0dXJuIGZ1bmN0aW9uKEEsYWUpe3ZhciBzZSx0ZT1BLmxlbmd0aCx3ZT0wLFVlPTAsSmU9'@;
put 'MCxvdD0wO2lmKCJzdHJpbmciPT10eXBlb2YgQSlmb3Ioc2U9QnVmZmVyLmFsbG9jVW5zYWZlKHRlKSx3ZT0wO3dlPHRlOysrd2Upc2Vbd2VdPUVbQS5jaGFyQ29kZUF0KHdlKV07ZWxzZSBpZihCdWZmZXIuaXNCdWZmZXIoQSkpe2ZvcihzZT1CdWZmZXIuYWxsb2NVbnNhZmUoMip0ZSksVWU9'@;
put 'MCx3ZT0wO3dlPHRlOysrd2UpKEplPUFbd2VdKTwxMjg/c2VbVWUrK109RVtKZV06SmU8MjI0PyhzZVtVZSsrXT1FWygoMzEmSmUpPDw2KSsoNjMmQVt3ZSsxXSldLCsrd2UpOkplPDI0MD8oc2VbVWUrK109RVsoKDE1JkplKTw8MTIpKygoNjMmQVt3ZSsxXSk8PDYpKyg2MyZBW3dlKzJdKV0s'@;
put 'd2UrPTIpOihvdD0oKDcmSmUpPDwxOCkrKCg2MyZBW3dlKzFdKTw8MTIpKygoNjMmQVt3ZSsyXSk8PDYpKyg2MyZBW3dlKzNdKSx3ZSs9MyxvdDw2NTUzNj9zZVtVZSsrXT1FW290XTooc2VbVWUrK109RVs1NTI5NisoKG90LT02NTUzNik+PjEwJjEwMjMpXSxzZVtVZSsrXT1FWzU2MzIwKygx'@;
put 'MDIzJm90KV0pKTtzZT1zZS5zbGljZSgwLFVlKX1lbHNlIGZvcihzZT1CdWZmZXIuYWxsb2NVbnNhZmUodGUpLHdlPTA7d2U8dGU7Kyt3ZSlzZVt3ZV09RVtBW3dlXS5jaGFyQ29kZUF0KDApXTtyZXR1cm4gYWUmJiJidWYiIT09YWU/ImFyciIhPT1hZT9zZS50b1N0cmluZygiYmluYXJ5Iik6'@;
put 'W10uc2xpY2UuY2FsbChzZSk6c2V9fSxKPWZ1bmN0aW9uKGope3ZhciBFPXlbal0uZGVjLG09QnVmZmVyLmFsbG9jVW5zYWZlKDEzMTA3MiksQT0wLGFlPSIiO2ZvcihBPTA7QTxFLmxlbmd0aDsrK0EpaWYoYWU9RVtBXSl7dmFyIHRlPWFlLmNoYXJDb2RlQXQoMCk7bVsyKkFdPTI1NSZ0ZSxt'@;
put 'WzIqQSsxXT10ZT4+OH1yZXR1cm4gZnVuY3Rpb24od2Upe3ZhciBVZT13ZS5sZW5ndGgsSmU9MCxvdD0wO2lmKDIqVWU+VyYmKFc9MipVZSxZPUJ1ZmZlci5hbGxvY1Vuc2FmZShXKSksQnVmZmVyLmlzQnVmZmVyKHdlKSlmb3IoSmU9MDtKZTxVZTtKZSsrKVlbMipKZV09bVtvdD0yKndlW0pl'@;
put 'XV0sWVsyKkplKzFdPW1bb3QrMV07ZWxzZSBpZigic3RyaW5nIj09dHlwZW9mIHdlKWZvcihKZT0wO0plPFVlO0plKyspb3Q9Mip3ZS5jaGFyQ29kZUF0KEplKSxZWzIqSmVdPW1bb3RdLFlbMipKZSsxXT1tW290KzFdO2Vsc2UgZm9yKEplPTA7SmU8VWU7SmUrKylZWzIqSmVdPW1bb3Q9Mip3'@;
put 'ZVtKZV1dLFlbMipKZSsxXT1tW290KzFdO3JldHVybiBZLnNsaWNlKDAsMipVZSkudG9TdHJpbmcoInVjczIiKX19LG5lPWZ1bmN0aW9uKGope2Zvcih2YXIgRT15W2pdLmVuYyxtPUJ1ZmZlci5hbGxvY1Vuc2FmZSgxMzEwNzIpLEE9MDtBPDEzMTA3MjsrK0EpbVtBXT0wO2Zvcih2YXIgYWU9'@;
put 'T2JqZWN0LmtleXMoRSksdGU9MCxzZT1hZVt0ZV07dGU8YWUubGVuZ3RoOysrdGUpaWYoc2U9YWVbdGVdKXt2YXIgd2U9c2UuY2hhckNvZGVBdCgwKTttWzIqd2VdPTI1NSZFW3NlXSxtWzIqd2UrMV09RVtzZV0+Pjh9cmV0dXJuIGZ1bmN0aW9uKEplLG90KXt2YXIgeGU9SmUubGVuZ3RoLHZl'@;
put 'PUJ1ZmZlci5hbGxvY1Vuc2FmZSgyKnhlKSxYZT0wLHplPTAsRGU9MCxGZT0wLE9lPTA7aWYoInN0cmluZyI9PXR5cGVvZiBKZSl7Zm9yKFhlPUZlPTA7WGU8eGU7KytYZSl6ZT0yKkplLmNoYXJDb2RlQXQoWGUpLHZlW0ZlKytdPW1bemUrMV18fG1bemVdLG1bemUrMV0+MCYmKHZlW0ZlKytd'@;
put 'PW1bemVdKTt2ZT12ZS5zbGljZSgwLEZlKX1lbHNlIGlmKEJ1ZmZlci5pc0J1ZmZlcihKZSkpe2ZvcihYZT1GZT0wO1hlPHhlOysrWGUpKE9lPUplW1hlXSk8MTI4P3plPU9lOk9lPDIyND8oemU9KCgzMSZPZSk8PDYpKyg2MyZKZVtYZSsxXSksKytYZSk6T2U8MjQwPyh6ZT0oKDE1Jk9lKTw8'@;
put 'MTIpKygoNjMmSmVbWGUrMV0pPDw2KSsoNjMmSmVbWGUrMl0pLFhlKz0yKTooemU9KCg3Jk9lKTw8MTgpKygoNjMmSmVbWGUrMV0pPDwxMikrKCg2MyZKZVtYZSsyXSk8PDYpKyg2MyZKZVtYZSszXSksWGUrPTMpLHplPDY1NTM2Pyh2ZVtGZSsrXT1tWzErKHplKj0yKV18fG1bemVdLG1bemUr'@;
put 'MV0+MCYmKHZlW0ZlKytdPW1bemVdKSk6KHZlW0ZlKytdPW1bMSsoemU9MiooNTUyOTYrKChEZT16ZS02NTUzNik+PjEwJjEwMjMpKSldfHxtW3plXSxtW3plKzFdPjAmJih2ZVtGZSsrXT1tW3plXSksdmVbRmUrK109bVsxKyh6ZT0yKig1NjMyMCsoMTAyMyZEZSkpKV18fG1bemVdLG1bemUr'@;
put 'MV0+MCYmKHZlW0ZlKytdPW1bemVdKSk7dmU9dmUuc2xpY2UoMCxGZSl9ZWxzZSBmb3IoWGU9RmU9MDtYZTx4ZTtYZSsrKXplPTIqSmVbWGVdLmNoYXJDb2RlQXQoMCksdmVbRmUrK109bVt6ZSsxXXx8bVt6ZV0sbVt6ZSsxXT4wJiYodmVbRmUrK109bVt6ZV0pO3JldHVybiBvdCYmImJ1ZiIh'@;
put 'PT1vdD8iYXJyIiE9PW90P3ZlLnRvU3RyaW5nKCJiaW5hcnkiKTpbXS5zbGljZS5jYWxsKHZlKTp2ZX19LGllPWZ1bmN0aW9uKGope3ZhciBhZSxFPXlbal0uZGVjLG09QnVmZmVyLmFsbG9jVW5zYWZlKDEzMTA3MiksQT0wLHRlPTAsc2U9MCx3ZT0wO2Zvcih3ZT0wO3dlPDY1NTM2Oysrd2Up'@;
put 'bVsyKndlXT0yNTUsbVsyKndlKzFdPTI1Mztmb3IoQT0wO0E8RS5sZW5ndGg7KytBKShhZT1FW0FdKSYmKHRlPWFlLmNoYXJDb2RlQXQoMCksbVtzZT0yKkFdPTI1NSZ0ZSxtW3NlKzFdPXRlPj44KTtyZXR1cm4gZnVuY3Rpb24oSmUpe3ZhciBvdD1KZS5sZW5ndGgseGU9QnVmZmVyLmFsbG9j'@;
put 'VW5zYWZlKDIqb3QpLHZlPTAsWGU9MCx6ZT0wO2lmKEJ1ZmZlci5pc0J1ZmZlcihKZSkpZm9yKHZlPTA7dmU8b3Q7dmUrKykyNTU9PT1tW1hlPTIqSmVbdmVdXSYmMjUzPT09bVtYZSsxXSYmKFhlPTIqKChKZVt2ZV08PDgpK0plW3ZlKzFdKSwrK3ZlKSx4ZVt6ZSsrXT1tW1hlXSx4ZVt6ZSsr'@;
put 'XT1tW1hlKzFdO2Vsc2UgaWYoInN0cmluZyI9PXR5cGVvZiBKZSlmb3IodmU9MDt2ZTxvdDt2ZSsrKVhlPTIqSmUuY2hhckNvZGVBdCh2ZSksMjU1PT09bVtYZV0mJjI1Mz09PW1bWGUrMV0mJihYZT0yKigoSmUuY2hhckNvZGVBdCh2ZSk8PDgpK0plLmNoYXJDb2RlQXQodmUrMSkpLCsrdmUp'@;
put 'LHhlW3plKytdPW1bWGVdLHhlW3plKytdPW1bWGUrMV07ZWxzZSBmb3IodmU9MDt2ZTxvdDt2ZSsrKTI1NT09PW1bWGU9MipKZVt2ZV1dJiYyNTM9PT1tW1hlKzFdJiYoWGU9MiooKEplW3ZlXTw8OCkrSmVbdmUrMV0pLCsrdmUpLHhlW3plKytdPW1bWGVdLHhlW3plKytdPW1bWGUrMV07cmV0'@;
put 'dXJuIHhlLnNsaWNlKDAsemUpLnRvU3RyaW5nKCJ1Y3MyIil9fTt3WzY1MDAxXT1mdW5jdGlvbiBIKGope2lmKCJzdHJpbmciPT10eXBlb2YgailyZXR1cm4gSChqLnNwbGl0KCIiKS5tYXAoTikpO3ZhciBFPWoubGVuZ3RoLG09MCxBPTA7NCpFPlcmJihXPTQqRSxZPUJ1ZmZlci5hbGxvY1Vu'@;
put 'c2FmZShXKSk7dmFyIGFlPTA7RT49MyYmMjM5PT1qWzBdJiYxODc9PWpbMV0mJjE5MT09alsyXSYmKGFlPTMpO2Zvcih2YXIgdGU9MSxzZT0wLHdlPTA7YWU8RTthZSs9dGUpdGU9MSwod2U9althZV0pPDEyOD9tPXdlOndlPDIyND8obT02NCooMzEmd2UpKyg2MyZqW2FlKzFdKSx0ZT0yKTp3'@;
put 'ZTwyNDA/KG09KCgxNSZ3ZSk8PDEyKSs2NCooNjMmalthZSsxXSkrKDYzJmpbYWUrMl0pLHRlPTMpOihtPTI2MjE0NCooNyZ3ZSkrKCg2MyZqW2FlKzFdKTw8MTIpKzY0Kig2MyZqW2FlKzJdKSsoNjMmalthZSszXSksdGU9NCksbTw2NTUzNj8oWVtzZSsrXT0yNTUmbSxZW3NlKytdPW0+Pjgp'@;
put 'OihBPTU1Mjk2KygobS09NjU1MzYpPj4xMCYxMDIzKSxtPTU2MzIwKygxMDIzJm0pLFlbc2UrK109MjU1JkEsWVtzZSsrXT1BPj4+OCxZW3NlKytdPTI1NSZtLFlbc2UrK109bT4+PjgmMjU1KTtyZXR1cm4gWS5zbGljZSgwLHNlKS50b1N0cmluZygidWNzMiIpfSxQWzY1MDAxXT1mdW5jdGlv'@;
put 'bihqLEUpe2lmKEwmJkJ1ZmZlci5pc0J1ZmZlcihqKSlyZXR1cm4gRSYmImJ1ZiIhPT1FPyJhcnIiIT09RT9qLnRvU3RyaW5nKCJiaW5hcnkiKTpbXS5zbGljZS5jYWxsKGopOmo7dmFyIG09ai5sZW5ndGgsQT0wLGFlPTAsdGU9MCxzZT0ic3RyaW5nIj09dHlwZW9mIGo7NCptPlcmJihXPTQq'@;
put 'bSxZPUJ1ZmZlci5hbGxvY1Vuc2FmZShXKSk7Zm9yKHZhciB3ZT0wO3dlPG07Kyt3ZSkoQT1zZT9qLmNoYXJDb2RlQXQod2UpOmpbd2VdLmNoYXJDb2RlQXQoMCkpPD0xMjc/WVt0ZSsrXT1BOkE8PTIwNDc/KFlbdGUrK109MTkyKyhBPj42KSxZW3RlKytdPTEyOCsoNjMmQSkpOkE+PTU1Mjk2'@;
put 'JiZBPD01NzM0Mz8oQS09NTUyOTYsKyt3ZSxhZT0oc2U/ai5jaGFyQ29kZUF0KHdlKTpqW3dlXS5jaGFyQ29kZUF0KDApKS01NjMyMCsoQTw8MTApLFlbdGUrK109MjQwKyhhZT4+PjE4JjcpLFlbdGUrK109MTQ0KyhhZT4+PjEyJjYzKSxZW3RlKytdPTEyOCsoYWU+Pj42JjYzKSxZW3RlKytd'@;
put 'PTEyOCsoNjMmYWUpKTooWVt0ZSsrXT0yMjQrKEE+PjEyKSxZW3RlKytdPTEyOCsoQT4+NiY2MyksWVt0ZSsrXT0xMjgrKDYzJkEpKTtyZXR1cm4gRSYmImJ1ZiIhPT1FPyJhcnIiIT09RT9ZLnNsaWNlKDAsdGUpLnRvU3RyaW5nKCJiaW5hcnkiKTpbXS5zbGljZS5jYWxsKFksMCx0ZSk6WS5z'@;
put 'bGljZSgwLHRlKX19dmFyIGxlPWZ1bmN0aW9uKCl7aWYoTCl7aWYoRltfWzBdXSlyZXR1cm47dmFyIGo9MCxFPTA7Zm9yKGo9MDtqPF8ubGVuZ3RoOysrail5W0U9X1tqXV0mJihGW0VdPUooRSksT1tFXT1lZShFKSk7Zm9yKGo9MDtqPGcubGVuZ3RoOysrail5W0U9Z1tqXV0mJihGW0VdPWll'@;
put 'KEUpLE9bRV09bmUoRSkpO2ZvcihqPTA7ajxCLmxlbmd0aDsrK2opd1tFPUJbal1dJiYoRltFXT13W0VdKSxQW0VdJiYoT1tFXT1QW0VdKX19LG1lPWZ1bmN0aW9uKEgsail7cmV0dXJuIiJ9LF9lPWZ1bmN0aW9uKGope2RlbGV0ZSBGW2pdLGRlbGV0ZSBPW2pdfSxTZT17ZW5jYWNoZTpsZSxk'@;
put 'ZWNhY2hlOmZ1bmN0aW9uKCl7aWYoTCl7aWYoIUZbX1swXV0pcmV0dXJuO18uZm9yRWFjaChfZSksZy5mb3JFYWNoKF9lKSxCLmZvckVhY2goX2UpfXA9bWUsYj0wfSxzYmNzOl8sZGJjczpnfTtsZSgpO3ZhciBqZT0iQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9w'@;
put 'cXJzdHV2d3h5ejAxMjM0NTY3ODkrLyIscD1tZSxiPTA7cmV0dXJuIHkudXRpbHM9e2RlY29kZTpmdW5jdGlvbiBIKGosRSl7dmFyIG07aWYobT1GW2pdKXJldHVybiBtKEUpO2lmKCJzdHJpbmciPT10eXBlb2YgRSlyZXR1cm4gSChqLEUuc3BsaXQoIiIpLm1hcChOKSk7dmFyIHZlLEE9RS5s'@;
put 'ZW5ndGgsYWU9bmV3IEFycmF5KEEpLHRlPSIiLHNlPTAsd2U9MCxVZT0xLEplPTAsb3Q9MCx4ZT15W2pdLFhlPSIiO2lmKHhlJiYodmU9eGUuZGVjKSlmb3Iod2U9MDt3ZTxBO3dlKz1VZSl7aWYoVWU9MiwodGU9dmVbKEVbd2VdPDw4KStFW3dlKzFdXSl8fChVZT0xLHRlPXZlW0Vbd2VdXSks'@;
put 'IXRlKXRocm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkIGNvZGU6ICIrRVt3ZV0rIiAiK0Vbd2UrVWUtMV0rIiAiK3dlKyIgIitVZSsiICIrdmVbRVt3ZV1dKTthZVtKZSsrXT10ZX1lbHNle2lmKCEoWGU9SVtqXSkpdGhyb3cgbmV3IEVycm9yKCJVbnJlY29nbml6ZWQgQ1A6ICIraik7c3dp'@;
put 'dGNoKFhlKXtjYXNlInV0ZjgiOmZvcihBPj0zJiYyMzk9PUVbMF0mJjE4Nz09RVsxXSYmMTkxPT1FWzJdJiYod2U9Myk7d2U8QTt3ZSs9VWUpVWU9MSxFW3dlXTwxMjg/c2U9RVt3ZV06RVt3ZV08MjI0PyhzZT02NCooMzEmRVt3ZV0pKyg2MyZFW3dlKzFdKSxVZT0yKTpFW3dlXTwyNDA/KHNl'@;
put 'PSgoMTUmRVt3ZV0pPDwxMikrNjQqKDYzJkVbd2UrMV0pKyg2MyZFW3dlKzJdKSxVZT0zKTooc2U9MjYyMTQ0Kig3JkVbd2VdKSsoKDYzJkVbd2UrMV0pPDwxMikrNjQqKDYzJkVbd2UrMl0pKyg2MyZFW3dlKzNdKSxVZT00KSxzZTw2NTUzNnx8KG90PTU1Mjk2Kygoc2UtPTY1NTM2KT4+MTAm'@;
put 'MTAyMyksc2U9NTYzMjArKDEwMjMmc2UpLGFlW0plKytdPVN0cmluZy5mcm9tQ2hhckNvZGUob3QpKSxhZVtKZSsrXT1TdHJpbmcuZnJvbUNoYXJDb2RlKHNlKTticmVhaztjYXNlImFzY2lpIjppZihMJiZCdWZmZXIuaXNCdWZmZXIoRSkpcmV0dXJuIEUudG9TdHJpbmcoWGUpO2Zvcih3ZT0w'@;
put 'O3dlPEE7d2UrKylhZVt3ZV09U3RyaW5nLmZyb21DaGFyQ29kZShFW3dlXSk7SmU9QTticmVhaztjYXNlInV0ZjE2bGUiOmlmKEE+PTImJjI1NT09RVswXSYmMjU0PT1FWzFdJiYod2U9MiksTCYmQnVmZmVyLmlzQnVmZmVyKEUpKXJldHVybiBFLnRvU3RyaW5nKFhlKTtmb3IoVWU9Mjt3ZSsx'@;
put 'PEE7d2UrPVVlKWFlW0plKytdPVN0cmluZy5mcm9tQ2hhckNvZGUoKEVbd2UrMV08PDgpK0Vbd2VdKTticmVhaztjYXNlInV0ZjE2YmUiOmZvcihBPj0yJiYyNTQ9PUVbMF0mJjI1NT09RVsxXSYmKHdlPTIpLFVlPTI7d2UrMTxBO3dlKz1VZSlhZVtKZSsrXT1TdHJpbmcuZnJvbUNoYXJDb2Rl'@;
put 'KChFW3dlXTw8OCkrRVt3ZSsxXSk7YnJlYWs7Y2FzZSJ1dGYzMmxlIjpmb3IoQT49NCYmMjU1PT1FWzBdJiYyNTQ9PUVbMV0mJjA9PT1FWzJdJiYwPT09RVszXSYmKHdlPTQpLFVlPTQ7d2U8QTt3ZSs9VWUpKHNlPShFW3dlKzNdPDwyNCkrKEVbd2UrMl08PDE2KSsoRVt3ZSsxXTw8OCkrRVt3'@;
put 'ZV0pPjY1NTM1PyhzZS09NjU1MzYsYWVbSmUrK109U3RyaW5nLmZyb21DaGFyQ29kZSg1NTI5Nisoc2U+PjEwJjEwMjMpKSxhZVtKZSsrXT1TdHJpbmcuZnJvbUNoYXJDb2RlKDU2MzIwKygxMDIzJnNlKSkpOmFlW0plKytdPVN0cmluZy5mcm9tQ2hhckNvZGUoc2UpO2JyZWFrO2Nhc2UidXRm'@;
put 'MzJiZSI6Zm9yKEE+PTQmJjI1NT09RVszXSYmMjU0PT1FWzJdJiYwPT09RVsxXSYmMD09PUVbMF0mJih3ZT00KSxVZT00O3dlPEE7d2UrPVVlKShzZT0oRVt3ZV08PDI0KSsoRVt3ZSsxXTw8MTYpKyhFW3dlKzJdPDw4KStFW3dlKzNdKT42NTUzNT8oc2UtPTY1NTM2LGFlW0plKytdPVN0cmlu'@;
put 'Zy5mcm9tQ2hhckNvZGUoNTUyOTYrKHNlPj4xMCYxMDIzKSksYWVbSmUrK109U3RyaW5nLmZyb21DaGFyQ29kZSg1NjMyMCsoMTAyMyZzZSkpKTphZVtKZSsrXT1TdHJpbmcuZnJvbUNoYXJDb2RlKHNlKTticmVhaztjYXNlInV0ZjciOmZvcihBPj00JiY0Mz09RVswXSYmNDc9PUVbMV0mJjEx'@;
put 'OD09RVsyXSYmKEE+PTUmJjU2PT1FWzNdJiY0NT09RVs0XT93ZT01Oig1Nj09RVszXXx8NTc9PUVbM118fDQzPT1FWzNdfHw0Nz09RVszXSkmJih3ZT00KSk7d2U8QTt3ZSs9VWUpaWYoNDM9PT1FW3dlXSlpZihVZT0xLDQ1IT09RVt3ZSsxXSl7Zm9yKDtTdHJpbmcuZnJvbUNoYXJDb2RlKEVb'@;
put 'd2UrVWVdKS5tYXRjaCgvW0EtWmEtejAtOStcL10vKTspVWUrKzt2YXIgemU9MDs0NT09PUVbd2UrVWVdJiYoKytVZSx6ZT0xKTtmb3IodmFyIERlPVtdLEZlPSIiLGtlPTAsQWU9MCxfdD0wLG50PTAsUWU9MTtRZTxVZS16ZSYmKGtlPWplLmluZGV4T2YoU3RyaW5nLmZyb21DaGFyQ29kZShF'@;
put 'W3dlK1FlKytdKSksQWU9amUuaW5kZXhPZihTdHJpbmcuZnJvbUNoYXJDb2RlKEVbd2UrUWUrK10pKSxEZS5wdXNoKGtlPDwyfEFlPj40KSwtMSE9PShfdD1qZS5pbmRleE9mKFN0cmluZy5mcm9tQ2hhckNvZGUoRVt3ZStRZSsrXSkpKSYmKERlLnB1c2goKDE1JkFlKTw8NHxfdD4+MiksLTEh'@;
put 'PT0obnQ9amUuaW5kZXhPZihTdHJpbmcuZnJvbUNoYXJDb2RlKEVbd2UrUWUrK10pKSkpKTspbnQ8NjQmJkRlLnB1c2goKDMmX3QpPDw2fG50KTtmb3IoRmU9SCgxMjAxLERlKSxRZT0wO1FlPEZlLmxlbmd0aDsrK1FlKWFlW0plKytdPUZlLmNoYXJBdChRZSl9ZWxzZSBVZT0yLGFlW0plKytd'@;
put 'PSIrIjtlbHNlIFVlPTEsYWVbSmUrK109U3RyaW5nLmZyb21DaGFyQ29kZShFW3dlXSk7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIG1hZ2ljOiAiK2orIiAiK0lbal0pfX1yZXR1cm4gYWUuc2xpY2UoMCxKZSkuam9pbigiIil9LGVuY29kZTpmdW5jdGlvbiBI'@;
put 'KGosRSxtKXtpZihqPT09YiYmcClyZXR1cm4gcChFLG0pO2lmKE9bal0pcmV0dXJuKHA9T1tiPWpdKShFLG0pO0wmJkJ1ZmZlci5pc0J1ZmZlcihFKSYmKEU9RS50b1N0cmluZygidXRmOCIpKTt2YXIgb3QsQT1FLmxlbmd0aCxhZT1MP0J1ZmZlci5hbGxvY1Vuc2FmZSg0KkEpOltdLHRlPTAs'@;
put 'c2U9MCx3ZT0wLFVlPTAsSmU9eVtqXSx4ZT0iIix2ZT0ic3RyaW5nIj09dHlwZW9mIEU7aWYoSmUmJihvdD1KZS5lbmMpKWZvcihzZT0wO3NlPEE7KytzZSwrK3dlKSh0ZT1vdFt2ZT9FLmNoYXJBdChzZSk6RVtzZV1dKT4yNTU/KGFlW3dlXT10ZT4+OCxhZVsrK3dlXT0yNTUmdGUpOmFlW3dl'@;
put 'XT0yNTUmdGU7ZWxzZXtpZighKHhlPUlbal0pKXRocm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkIENQOiAiK2opO3N3aXRjaCh4ZSl7Y2FzZSJ1dGY4IjppZihMJiZ2ZSl7d2U9KGFlPUsoRSx4ZSkpLmxlbmd0aDticmVha31mb3Ioc2U9MDtzZTxBOysrc2UsKyt3ZSkodGU9dmU/RS5jaGFy'@;
put 'Q29kZUF0KHNlKTpFW3NlXS5jaGFyQ29kZUF0KDApKTw9MTI3P2FlW3dlXT10ZTp0ZTw9MjA0Nz8oYWVbd2VdPTE5MisodGU+PjYpLGFlWysrd2VdPTEyOCsoNjMmdGUpKTp0ZT49NTUyOTYmJnRlPD01NzM0Mz8odGUtPTU1Mjk2LFVlPSh2ZT9FLmNoYXJDb2RlQXQoKytzZSk6RVsrK3NlXS5j'@;
put 'aGFyQ29kZUF0KDApKS01NjMyMCsodGU8PDEwKSxhZVt3ZV09MjQwKyhVZT4+PjE4JjcpLGFlWysrd2VdPTE0NCsoVWU+Pj4xMiY2MyksYWVbKyt3ZV09MTI4KyhVZT4+PjYmNjMpLGFlWysrd2VdPTEyOCsoNjMmVWUpKTooYWVbd2VdPTIyNCsodGU+PjEyKSxhZVsrK3dlXT0xMjgrKHRlPj42'@;
put 'JjYzKSxhZVsrK3dlXT0xMjgrKDYzJnRlKSk7YnJlYWs7Y2FzZSJhc2NpaSI6aWYoTCYmInN0cmluZyI9PXR5cGVvZiBFKXt3ZT0oYWU9SyhFLHhlKSkubGVuZ3RoO2JyZWFrfWZvcihzZT0wO3NlPEE7KytzZSwrK3dlKXtpZighKCh0ZT12ZT9FLmNoYXJDb2RlQXQoc2UpOkVbc2VdLmNoYXJD'@;
put 'b2RlQXQoMCkpPD0xMjcpKXRocm93IG5ldyBFcnJvcigiYmFkIGFzY2lpICIrdGUpO2FlW3dlXT10ZX1icmVhaztjYXNlInV0ZjE2bGUiOmlmKEwmJiJzdHJpbmciPT10eXBlb2YgRSl7d2U9KGFlPUsoRSx4ZSkpLmxlbmd0aDticmVha31mb3Ioc2U9MDtzZTxBOysrc2UpdGU9dmU/RS5jaGFy'@;
put 'Q29kZUF0KHNlKTpFW3NlXS5jaGFyQ29kZUF0KDApLGFlW3dlKytdPTI1NSZ0ZSxhZVt3ZSsrXT10ZT4+ODticmVhaztjYXNlInV0ZjE2YmUiOmZvcihzZT0wO3NlPEE7KytzZSl0ZT12ZT9FLmNoYXJDb2RlQXQoc2UpOkVbc2VdLmNoYXJDb2RlQXQoMCksYWVbd2UrK109dGU+PjgsYWVbd2Ur'@;
put 'K109MjU1JnRlO2JyZWFrO2Nhc2UidXRmMzJsZSI6Zm9yKHNlPTA7c2U8QTsrK3NlKSh0ZT12ZT9FLmNoYXJDb2RlQXQoc2UpOkVbc2VdLmNoYXJDb2RlQXQoMCkpPj01NTI5NiYmdGU8PTU3MzQzJiYodGU9NjU1MzYrKHRlLTU1Mjk2PDwxMCkrKEVbKytzZV0uY2hhckNvZGVBdCgwKS01NjMy'@;
put 'MCkpLGFlW3dlKytdPTI1NSZ0ZSxhZVt3ZSsrXT0yNTUmKHRlPj49OCksYWVbd2UrK109MjU1Jih0ZT4+PTgpLGFlW3dlKytdPTI1NSYodGU+Pj04KTticmVhaztjYXNlInV0ZjMyYmUiOmZvcihzZT0wO3NlPEE7KytzZSkodGU9dmU/RS5jaGFyQ29kZUF0KHNlKTpFW3NlXS5jaGFyQ29kZUF0'@;
put 'KDApKT49NTUyOTYmJnRlPD01NzM0MyYmKHRlPTY1NTM2Kyh0ZS01NTI5Njw8MTApKyhFWysrc2VdLmNoYXJDb2RlQXQoMCktNTYzMjApKSxhZVt3ZSszXT0yNTUmdGUsYWVbd2UrMl09MjU1Jih0ZT4+PTgpLGFlW3dlKzFdPTI1NSYodGU+Pj04KSxhZVt3ZV09MjU1Jih0ZT4+PTgpLHdlKz00'@;
put 'O2JyZWFrO2Nhc2UidXRmNyI6Zm9yKHNlPTA7c2U8QTtzZSsrKXt2YXIgWGU9dmU/RS5jaGFyQXQoc2UpOkVbc2VdLmNoYXJBdCgwKTtpZigiKyIhPT1YZSlpZigiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODknKCksLS4vOj8i'@;
put 'LmluZGV4T2YoWGUpPi0xKWFlW3dlKytdPVhlLmNoYXJDb2RlQXQoMCk7ZWxzZXt2YXIgemU9SCgxMjAxLFhlKTthZVt3ZSsrXT00MyxhZVt3ZSsrXT1qZS5jaGFyQ29kZUF0KHplWzBdPj4yKSxhZVt3ZSsrXT1qZS5jaGFyQ29kZUF0KCgoMyZ6ZVswXSk8PDQpKygoemVbMV18fDApPj40KSks'@;
put 'YWVbd2UrK109amUuY2hhckNvZGVBdCgoKDE1JnplWzFdKTw8MikrKCh6ZVsyXXx8MCk+PjYpKSxhZVt3ZSsrXT00NX1lbHNlIGFlW3dlKytdPTQzLGFlW3dlKytdPTQ1fWJyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCBtYWdpYzogIitqKyIgIitJW2pdKX19cmV0'@;
put 'dXJuIGFlPWFlLnNsaWNlKDAsd2UpLEw/bSYmImJ1ZiIhPT1tPyJhcnIiIT09bT9hZS50b1N0cmluZygiYmluYXJ5Iik6W10uc2xpY2UuY2FsbChhZSk6YWU6InN0ciI9PW0/YWUubWFwKHopLmpvaW4oIiIpOmFlfSxoYXNjcDpmdW5jdGlvbihqKXtyZXR1cm4hKCF5W2pdJiYhSVtqXSl9LG1h'@;
put 'Z2ljOkksY2FjaGU6U2V9LHl9KX0sMzE3OToodWUsWCk9Pnt2YXIgeSxJLF87IWZ1bmN0aW9uKGcpe2lmKHR5cGVvZiBET19OT1RfRVhQT1JUX0pTWklQPiJ1Iil1ZS5leHBvcnRzPWcoKTtlbHNlIGlmKHR5cGVvZiBET19OT1RfRVhQT1JUX0pTWklQPiJ1IilKU1ppcFN5bmM9ZygpLEk9W10s'@;
put 'dm9pZCAwIT09KF89ImZ1bmN0aW9uIj09dHlwZW9mKHk9Zyk/eS5hcHBseShYLEkpOnkpJiYodWUuZXhwb3J0cz1fKTtlbHNle3ZhciBCO3R5cGVvZiBnbG9iYWxUaGlzPCJ1Ij9CPWdsb2JhbFRoaXM6dHlwZW9mIHdpbmRvdzwidSI/Qj13aW5kb3c6dHlwZW9mIGdsb2JhbDwidSI/Qj1nbG9i'@;
put 'YWw6dHlwZW9mICQ8InUiJiYkLmdsb2JhbD9CPSQuZ2xvYmFsOnR5cGVvZiBzZWxmPCJ1IiYmKEI9c2VsZiksQi5KU1ppcFN5bmM9ZygpfX0oZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24gUChGLE8seil7ZnVuY3Rpb24gTihVLFcpe2lmKCFPW1VdKXtpZighRltVXSl7aWYoTClyZXR1cm4g'@;
put 'TChVLCEwKTt0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBmaW5kIG1vZHVsZSAnIitVKyInIil9dmFyIHE9T1tVXT17ZXhwb3J0czp7fX07RltVXVswXS5jYWxsKHEuZXhwb3J0cyxmdW5jdGlvbihlZSl7cmV0dXJuIE4oRltVXVsxXVtlZV18fGVlKX0scSxxLmV4cG9ydHMsUCxGLE8seil9cmV0'@;
put 'dXJuIE9bVV0uZXhwb3J0c31mb3IodmFyIEw9dm9pZCAwLEs9MDtLPHoubGVuZ3RoO0srKylOKHpbS10pO3JldHVybiBOfSh7MTpbZnVuY3Rpb24oUCxGLE8peyJ1c2Ugc3RyaWN0Ijt2YXIgej0iQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAx'@;
put 'MjM0NTY3ODkrLz0iO08uZW5jb2RlPWZ1bmN0aW9uKE4sTCl7Zm9yKHZhciBVLFcsWSxxLGVlLEosbmUsSz0iIixpZT0wO2llPE4ubGVuZ3RoOylxPShVPU4uY2hhckNvZGVBdChpZSsrKSk+PjIsZWU9KDMmVSk8PDR8KFc9Ti5jaGFyQ29kZUF0KGllKyspKT4+NCxKPSgxNSZXKTw8MnwoWT1O'@;
put 'LmNoYXJDb2RlQXQoaWUrKykpPj42LG5lPTYzJlksaXNOYU4oVyk/Sj1uZT02NDppc05hTihZKSYmKG5lPTY0KSxLPUsrei5jaGFyQXQocSkrei5jaGFyQXQoZWUpK3ouY2hhckF0KEopK3ouY2hhckF0KG5lKTtyZXR1cm4gS30sTy5kZWNvZGU9ZnVuY3Rpb24oTixMKXt2YXIgVyxZLHEsZWUs'@;
put 'SixuZSxLPSIiLGllPTA7Zm9yKE49Ti5yZXBsYWNlKC9bXkEtWmEtejAtOVwrXC9cPV0vZywiIik7aWU8Ti5sZW5ndGg7KXE9ei5pbmRleE9mKE4uY2hhckF0KGllKyspKSxXPSgxNSYoZWU9ei5pbmRleE9mKE4uY2hhckF0KGllKyspKSkpPDw0fChKPXouaW5kZXhPZihOLmNoYXJBdChpZSsr'@;
put 'KSkpPj4yLFk9KDMmSik8PDZ8KG5lPXouaW5kZXhPZihOLmNoYXJBdChpZSsrKSkpLEsrPVN0cmluZy5mcm9tQ2hhckNvZGUocTw8MnxlZT4+NCksNjQhPUomJihLKz1TdHJpbmcuZnJvbUNoYXJDb2RlKFcpKSw2NCE9bmUmJihLKz1TdHJpbmcuZnJvbUNoYXJDb2RlKFkpKTtyZXR1cm4gS319'@;
put 'LHt9XSwyOltmdW5jdGlvbihQLEYsTyl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHooKXt0aGlzLmNvbXByZXNzZWRTaXplPTAsdGhpcy51bmNvbXByZXNzZWRTaXplPTAsdGhpcy5jcmMzMj0wLHRoaXMuY29tcHJlc3Npb25NZXRob2Q9bnVsbCx0aGlzLmNvbXByZXNzZWRDb250ZW50PW51bGx9'@;
put 'ei5wcm90b3R5cGU9e2dldENvbnRlbnQ6ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH0sZ2V0Q29tcHJlc3NlZENvbnRlbnQ6ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH19LEYuZXhwb3J0cz16fSx7fV0sMzpbZnVuY3Rpb24oUCxGLE8peyJ1c2Ugc3RyaWN0IjtPLlNUT1JFPXttYWdpYzoiXDBcMCIs'@;
put 'Y29tcHJlc3M6ZnVuY3Rpb24oeil7cmV0dXJuIHp9LHVuY29tcHJlc3M6ZnVuY3Rpb24oeil7cmV0dXJuIHp9LGNvbXByZXNzSW5wdXRUeXBlOm51bGwsdW5jb21wcmVzc0lucHV0VHlwZTpudWxsfSxPLkRFRkxBVEU9UCgiLi9mbGF0ZSIpfSx7Ii4vZmxhdGUiOjh9XSw0OltmdW5jdGlvbihQ'@;
put 'LEYsTyl7InVzZSBzdHJpY3QiO3ZhciB6PVAoIi4vdXRpbHMiKSxOPVswLDE5OTY5NTk4OTQsMzk5MzkxOTc4OCwyNTY3NTI0Nzk0LDEyNDYzNDEzNywxODg2MDU3NjE1LDM5MTU2MjE2ODUsMjY1NzM5MjAzNSwyNDkyNjgyNzQsMjA0NDUwODMyNCwzNzcyMTE1MjMwLDI1NDcxNzc4NjQsMTYy'@;
put 'OTQxOTk1LDIxMjU1NjEwMjEsMzg4NzYwNzA0NywyNDI4NDQ0MDQ5LDQ5ODUzNjU0OCwxNzg5OTI3NjY2LDQwODkwMTY2NDgsMjIyNzA2MTIxNCw0NTA1NDg4NjEsMTg0MzI1ODYwMyw0MTA3NTgwNzUzLDIyMTE2Nzc2MzksMzI1ODgzOTkwLDE2ODQ3NzcxNTIsNDI1MTEyMjA0MiwyMzIxOTI2'@;
put 'NjM2LDMzNTYzMzQ4NywxNjYxMzY1NDY1LDQxOTUzMDI3NTUsMjM2NjExNTMxNyw5OTcwNzMwOTYsMTI4MTk1Mzg4NiwzNTc5ODU1MzMyLDI3MjQ2ODgyNDIsMTAwNjg4ODE0NSwxMjU4NjA3Njg3LDM1MjQxMDE2MjksMjc2ODk0MjQ0Myw5MDEwOTc3MjIsMTExOTAwMDY4NCwzNjg2NTE3MjA2'@;
put 'LDI4OTgwNjU3MjgsODUzMDQ0NDUxLDExNzIyNjYxMDEsMzcwNTAxNTc1OSwyODgyNjE2NjY1LDY1MTc2Nzk4MCwxMzczNTAzNTQ2LDMzNjk1NTQzMDQsMzIxODEwNDU5OCw1NjU1MDcyNTMsMTQ1NDYyMTczMSwzNDg1MTExNzA1LDMwOTk0MzYzMDMsNjcxMjY2OTc0LDE1OTQxOTgwMjQsMzMy'@;
put 'MjczMDkzMCwyOTcwMzQ3ODEyLDc5NTgzNTUyNywxNDgzMjMwMjI1LDMyNDQzNjcyNzUsMzA2MDE0OTU2NSwxOTk0MTQ2MTkyLDMxMTU4NTM0LDI1NjM5MDc3NzIsNDAyMzcxNzkzMCwxOTA3NDU5NDY1LDExMjYzNzIxNSwyNjgwMTUzMjUzLDM5MDQ0MjcwNTksMjAxMzc3NjI5MCwyNTE3MjIw'@;
put 'MzYsMjUxNzIxNTM3NCwzNzc1ODMwMDQwLDIxMzc2NTY3NjMsMTQxMzc2ODEzLDI0MzkyNzc3MTksMzg2NTI3MTI5NywxODAyMTk1NDQ0LDQ3Njg2NDg2NiwyMjM4MDAxMzY4LDQwNjY1MDg4NzgsMTgxMjM3MDkyNSw0NTMwOTI3MzEsMjE4MTYyNTAyNSw0MTExNDUxMjIzLDE3MDYwODg5MDIs'@;
put 'MzE0MDQyNzA0LDIzNDQ1MzIyMDIsNDI0MDAxNzUzMiwxNjU4NjU4MjcxLDM2NjYxOTk3NywyMzYyNjcwMzIzLDQyMjQ5OTQ0MDUsMTMwMzUzNTk2MCw5ODQ5NjE0ODYsMjc0NzAwNzA5MiwzNTY5MDM3NTM4LDEyNTYxNzA4MTcsMTAzNzYwNDMxMSwyNzY1MjEwNzMzLDM1NTQwNzk5OTUsMTEz'@;
put 'MTAxNDUwNiw4Nzk2Nzk5OTYsMjkwOTI0MzQ2MiwzNjYzNzcxODU2LDExNDExMjQ0NjcsODU1ODQyMjc3LDI4NTI4MDE2MzEsMzcwODY0ODY0OSwxMzQyNTMzOTQ4LDY1NDQ1OTMwNiwzMTg4Mzk2MDQ4LDMzNzMwMTUxNzQsMTQ2NjQ3OTkwOSw1NDQxNzk2MzUsMzExMDUyMzkxMywzNDYyNTIy'@;
put 'MDE1LDE1OTE2NzEwNTQsNzAyMTM4Nzc2LDI5NjY0NjA0NTAsMzM1Mjc5OTQxMiwxNTA0OTE4ODA3LDc4MzU1MTg3MywzMDgyNjQwNDQzLDMyMzM0NDI5ODksMzk4ODI5MjM4NCwyNTk2MjU0NjQ2LDYyMzE3MDY4LDE5NTc4MTA4NDIsMzkzOTg0NTk0NSwyNjQ3ODE2MTExLDgxNDcwOTk3LDE5'@;
put 'NDM4MDM1MjMsMzgxNDkxODkzMCwyNDg5NTk2ODA0LDIyNTI3NDQzMCwyMDUzNzkwMzc2LDM4MjYxNzU3NTUsMjQ2NjkwNjAxMywxNjc4MTY3NDMsMjA5NzY1MTM3Nyw0MDI3NTUyNTgwLDIyNjU0OTAzODYsNTAzNDQ0MDcyLDE3NjIwNTA4MTQsNDE1MDQxNzI0NSwyMTU0MTI5MzU1LDQyNjUy'@;
put 'MjIyNSwxODUyNTA3ODc5LDQyNzUzMTM1MjYsMjMxMjMxNzkyMCwyODI3NTM2MjYsMTc0MjU1NTg1Miw0MTg5NzA4MTQzLDIzOTQ4Nzc5NDUsMzk3OTE3NzYzLDE2MjIxODM2MzcsMzYwNDM5MDg4OCwyNzE0ODY2NTU4LDk1MzcyOTczMiwxMzQwMDc2NjI2LDM1MTg3MTk5ODUsMjc5NzM2MDk5'@;
put 'OSwxMDY4ODI4MzgxLDEyMTk2Mzg4NTksMzYyNDc0MTg1MCwyOTM2Njc1MTQ4LDkwNjE4NTQ2MiwxMDkwODEyNTEyLDM3NDc2NzIwMDMsMjgyNTM3OTY2OSw4MjkzMjkxMzUsMTE4MTMzNTE2MSwzNDEyMTc3ODA0LDMxNjA4MzQ4NDIsNjI4MDg1NDA4LDEzODI2MDUzNjYsMzQyMzM2OTEwOSwz'@;
put 'MTM4MDc4NDY3LDU3MDU2MjIzMywxNDI2NDAwODE1LDMzMTczMTY1NDIsMjk5ODczMzYwOCw3MzMyMzk5NTQsMTU1NTI2MTk1NiwzMjY4OTM1NTkxLDMwNTAzNjA2MjUsNzUyNDU5NDAzLDE1NDEzMjAyMjEsMjYwNzA3MTkyMCwzOTY1OTczMDMwLDE5Njk5MjI5NzIsNDA3MzU0OTgsMjYxNzgz'@;
put 'NzIyNSwzOTQzNTc3MTUxLDE5MTMwODc4NzcsODM5MDgzNzEsMjUxMjM0MTYzNCwzODAzNzQwNjkyLDIwNzUyMDg2MjIsMjEzMjYxMTEyLDI0NjMyNzI2MDMsMzg1NTk5MDI4NSwyMDk0ODU0MDcxLDE5ODk1ODg4MSwyMjYyMDI5MDEyLDQwNTcyNjA2MTAsMTc1OTM1OTk5Miw1MzQ0MTQxOTAs'@;
put 'MjE3NjcxODU0MSw0MTM5MzI5MTE1LDE4NzM4MzYwMDEsNDE0NjY0NTY3LDIyODIyNDg5MzQsNDI3OTIwMDM2OCwxNzExNjg0NTU0LDI4NTI4MTExNiwyNDA1ODAxNzI3LDQxNjcyMTY3NDUsMTYzNDQ2Nzc5NSwzNzYyMjk3MDEsMjY4NTA2Nzg5NiwzNjA4MDA3NDA2LDEzMDg5MTg2MTIsOTU2'@;
put 'NTQzOTM4LDI4MDg1NTUxMDUsMzQ5NTk1ODI2MywxMjMxNjM2MzAxLDEwNDc0MjcwMzUsMjkzMjk1OTgxOCwzNjU0NzAzODM2LDEwODgzNTkyNzAsOTM2OTE4ZTMsMjg0NzcxNDg5OSwzNzM2ODM3ODI5LDEyMDI5MDA4NjMsODE3MjMzODk3LDMxODMzNDIxMDgsMzQwMTIzNzEzMCwxNDA0Mjc3'@;
put 'NTUyLDYxNTgxODE1MCwzMTM0MjA3NDkzLDM0NTM0MjEyMDMsMTQyMzg1NzQ0OSw2MDE0NTA0MzEsMzAwOTgzNzYxNCwzMjk0NzEwNDU2LDE1NjcxMDM3NDYsNzExOTI4NzI0LDMwMjA2Njg0NzEsMzI3MjM4MDA2NSwxNTEwMzM0MjM1LDc1NTE2NzExN107Ri5leHBvcnRzPWZ1bmN0aW9uKEss'@;
put 'VSl7aWYodHlwZW9mIEs+InUifHwhSy5sZW5ndGgpcmV0dXJuIDA7dmFyIFc9InN0cmluZyIhPT16LmdldFR5cGVPZihLKTt0eXBlb2YgVT4idSImJihVPTApO3ZhciBlZT0wO1U9flU7Zm9yKHZhciBKPTAsbmU9Sy5sZW5ndGg7SjxuZTtKKyspZWU9Vz9LW0pdOksuY2hhckNvZGVBdChKKSxV'@;
put 'PVU+Pj44Xk5bMjU1JihVXmVlKV07cmV0dXJuflV9fSx7Ii4vdXRpbHMiOjIxfV0sNTpbZnVuY3Rpb24oUCxGLE8peyJ1c2Ugc3RyaWN0Ijt2YXIgej1QKCIuL3V0aWxzIik7ZnVuY3Rpb24gTihMKXt0aGlzLmRhdGE9bnVsbCx0aGlzLmxlbmd0aD0wLHRoaXMuaW5kZXg9MH1OLnByb3RvdHlw'@;
put 'ZT17Y2hlY2tPZmZzZXQ6ZnVuY3Rpb24oTCl7dGhpcy5jaGVja0luZGV4KHRoaXMuaW5kZXgrTCl9LGNoZWNrSW5kZXg6ZnVuY3Rpb24oTCl7aWYodGhpcy5sZW5ndGg8THx8TDwwKXRocm93IG5ldyBFcnJvcigiRW5kIG9mIGRhdGEgcmVhY2hlZCAoZGF0YSBsZW5ndGggPSAiK3RoaXMubGVu'@;
put 'Z3RoKyIsIGFza2VkIGluZGV4ID0gIitMKyIpLiBDb3JydXB0ZWQgemlwID8iKX0sc2V0SW5kZXg6ZnVuY3Rpb24oTCl7dGhpcy5jaGVja0luZGV4KEwpLHRoaXMuaW5kZXg9TH0sc2tpcDpmdW5jdGlvbihMKXt0aGlzLnNldEluZGV4KHRoaXMuaW5kZXgrTCl9LGJ5dGVBdDpmdW5jdGlvbihM'@;
put 'KXt9LHJlYWRJbnQ6ZnVuY3Rpb24oTCl7dmFyIFUsSz0wO2Zvcih0aGlzLmNoZWNrT2Zmc2V0KEwpLFU9dGhpcy5pbmRleCtMLTE7VT49dGhpcy5pbmRleDtVLS0pSz0oSzw8OCkrdGhpcy5ieXRlQXQoVSk7cmV0dXJuIHRoaXMuaW5kZXgrPUwsS30scmVhZFN0cmluZzpmdW5jdGlvbihMKXty'@;
put 'ZXR1cm4gei50cmFuc2Zvcm1Ubygic3RyaW5nIix0aGlzLnJlYWREYXRhKEwpKX0scmVhZERhdGE6ZnVuY3Rpb24oTCl7fSxsYXN0SW5kZXhPZlNpZ25hdHVyZTpmdW5jdGlvbihMKXt9LHJlYWREYXRlOmZ1bmN0aW9uKCl7dmFyIEw9dGhpcy5yZWFkSW50KDQpO3JldHVybiBuZXcgRGF0ZSgx'@;
put 'OTgwKyhMPj4yNSYxMjcpLChMPj4yMSYxNSktMSxMPj4xNiYzMSxMPj4xMSYzMSxMPj41JjYzLCgzMSZMKTw8MSl9fSxGLmV4cG9ydHM9Tn0seyIuL3V0aWxzIjoyMX1dLDY6W2Z1bmN0aW9uKFAsRixPKXsidXNlIHN0cmljdCI7Ty5iYXNlNjQ9ITEsTy5iaW5hcnk9ITEsTy5kaXI9ITEsTy5j'@;
put 'cmVhdGVGb2xkZXJzPSExLE8uZGF0ZT1udWxsLE8uY29tcHJlc3Npb249bnVsbCxPLmNvbW1lbnQ9bnVsbH0se31dLDc6W2Z1bmN0aW9uKFAsRixPKXsidXNlIHN0cmljdCI7dmFyIHo9UCgiLi91dGlscyIpO08uc3RyaW5nMmJpbmFyeT1mdW5jdGlvbihOKXtyZXR1cm4gei5zdHJpbmcyYmlu'@;
put 'YXJ5KE4pfSxPLnN0cmluZzJVaW50OEFycmF5PWZ1bmN0aW9uKE4pe3JldHVybiB6LnRyYW5zZm9ybVRvKCJ1aW50OGFycmF5IixOKX0sTy51aW50OEFycmF5MlN0cmluZz1mdW5jdGlvbihOKXtyZXR1cm4gei50cmFuc2Zvcm1Ubygic3RyaW5nIixOKX0sTy5zdHJpbmcyQmxvYj1mdW5jdGlv'@;
put 'bihOKXt2YXIgTD16LnRyYW5zZm9ybVRvKCJhcnJheWJ1ZmZlciIsTik7cmV0dXJuIHouYXJyYXlCdWZmZXIyQmxvYihMKX0sTy5hcnJheUJ1ZmZlcjJCbG9iPWZ1bmN0aW9uKE4pe3JldHVybiB6LmFycmF5QnVmZmVyMkJsb2IoTil9LE8udHJhbnNmb3JtVG89ZnVuY3Rpb24oTixMKXtyZXR1'@;
put 'cm4gei50cmFuc2Zvcm1UbyhOLEwpfSxPLmdldFR5cGVPZj1mdW5jdGlvbihOKXtyZXR1cm4gei5nZXRUeXBlT2YoTil9LE8uY2hlY2tTdXBwb3J0PWZ1bmN0aW9uKE4pe3JldHVybiB6LmNoZWNrU3VwcG9ydChOKX0sTy5NQVhfVkFMVUVfMTZCSVRTPXouTUFYX1ZBTFVFXzE2QklUUyxPLk1B'@;
put 'WF9WQUxVRV8zMkJJVFM9ei5NQVhfVkFMVUVfMzJCSVRTLE8ucHJldHR5PWZ1bmN0aW9uKE4pe3JldHVybiB6LnByZXR0eShOKX0sTy5maW5kQ29tcHJlc3Npb249ZnVuY3Rpb24oTil7cmV0dXJuIHouZmluZENvbXByZXNzaW9uKE4pfSxPLmlzUmVnRXhwPWZ1bmN0aW9uKE4pe3JldHVybiB6'@;
put 'LmlzUmVnRXhwKE4pfX0seyIuL3V0aWxzIjoyMX1dLDg6W2Z1bmN0aW9uKFAsRixPKXsidXNlIHN0cmljdCI7dmFyIHo9dHlwZW9mIFVpbnQ4QXJyYXk8InUiJiZ0eXBlb2YgVWludDE2QXJyYXk8InUiJiZ0eXBlb2YgVWludDMyQXJyYXk8InUiLE49UCgicGFrbyIpO08udW5jb21wcmVzc0lu'@;
put 'cHV0VHlwZT16PyJ1aW50OGFycmF5IjoiYXJyYXkiLE8uY29tcHJlc3NJbnB1dFR5cGU9ej8idWludDhhcnJheSI6ImFycmF5IixPLm1hZ2ljPSJcYlwwIixPLmNvbXByZXNzPWZ1bmN0aW9uKEwpe3JldHVybiBOLmRlZmxhdGVSYXcoTCl9LE8udW5jb21wcmVzcz1mdW5jdGlvbihMKXtyZXR1'@;
put 'cm4gTi5pbmZsYXRlUmF3KEwpfX0se3Bha286MjR9XSw5OltmdW5jdGlvbihQLEYsTyl7InVzZSBzdHJpY3QiO3ZhciB6PVAoIi4vYmFzZTY0Iik7ZnVuY3Rpb24gTihMLEspe2lmKCEodGhpcyBpbnN0YW5jZW9mIE4pKXJldHVybiBuZXcgTihMLEspO3RoaXMuZmlsZXM9e30sdGhpcy5jb21t'@;
put 'ZW50PW51bGwsdGhpcy5yb290PSIiLEwmJnRoaXMubG9hZChMLEspLHRoaXMuY2xvbmU9ZnVuY3Rpb24oKXt2YXIgVT1uZXcgTjtmb3IodmFyIFcgaW4gdGhpcykiZnVuY3Rpb24iIT10eXBlb2YgdGhpc1tXXSYmKFVbV109dGhpc1tXXSk7cmV0dXJuIFV9fShOLnByb3RvdHlwZT1QKCIuL29i'@;
put 'amVjdCIpKS5sb2FkPVAoIi4vbG9hZCIpLE4uc3VwcG9ydD1QKCIuL3N1cHBvcnQiKSxOLmRlZmF1bHRzPVAoIi4vZGVmYXVsdHMiKSxOLnV0aWxzPVAoIi4vZGVwcmVjYXRlZFB1YmxpY1V0aWxzIiksTi5iYXNlNjQ9e2VuY29kZTpmdW5jdGlvbihMKXtyZXR1cm4gei5lbmNvZGUoTCl9LGRl'@;
put 'Y29kZTpmdW5jdGlvbihMKXtyZXR1cm4gei5kZWNvZGUoTCl9fSxOLmNvbXByZXNzaW9ucz1QKCIuL2NvbXByZXNzaW9ucyIpLEYuZXhwb3J0cz1OfSx7Ii4vYmFzZTY0IjoxLCIuL2NvbXByZXNzaW9ucyI6MywiLi9kZWZhdWx0cyI6NiwiLi9kZXByZWNhdGVkUHVibGljVXRpbHMiOjcsIi4v'@;
put 'bG9hZCI6MTAsIi4vb2JqZWN0IjoxMywiLi9zdXBwb3J0IjoxN31dLDEwOltmdW5jdGlvbihQLEYsTyl7InVzZSBzdHJpY3QiO3ZhciB6PVAoIi4vYmFzZTY0IiksTj1QKCIuL3ppcEVudHJpZXMiKTtGLmV4cG9ydHM9ZnVuY3Rpb24oTCxLKXt2YXIgVSxXLFkscTtmb3IoKEs9S3x8e30pLmJh'@;
put 'c2U2NCYmKEw9ei5kZWNvZGUoTCkpLFU9KFc9bmV3IE4oTCxLKSkuZmlsZXMsWT0wO1k8VS5sZW5ndGg7WSsrKXRoaXMuZmlsZSgocT1VW1ldKS5maWxlTmFtZSxxLmRlY29tcHJlc3NlZCx7YmluYXJ5OiEwLG9wdGltaXplZEJpbmFyeVN0cmluZzohMCxkYXRlOnEuZGF0ZSxkaXI6cS5kaXIs'@;
put 'Y29tbWVudDpxLmZpbGVDb21tZW50Lmxlbmd0aD9xLmZpbGVDb21tZW50Om51bGwsY3JlYXRlRm9sZGVyczpLLmNyZWF0ZUZvbGRlcnN9KTtyZXR1cm4gVy56aXBDb21tZW50Lmxlbmd0aCYmKHRoaXMuY29tbWVudD1XLnppcENvbW1lbnQpLHRoaXN9fSx7Ii4vYmFzZTY0IjoxLCIuL3ppcEVu'@;
put 'dHJpZXMiOjIyfV0sMTE6W2Z1bmN0aW9uKFAsRixPKXsoZnVuY3Rpb24oeil7InVzZSBzdHJpY3QiO3ZhciBOPWZ1bmN0aW9uKCl7fTtpZih0eXBlb2YgejwidSIpe3ZhciBMPSF6LmZyb207aWYoIUwpdHJ5e3ouZnJvbSgiZm9vIiwidXRmOCIpfWNhdGNoe0w9ITB9Tj1MP2Z1bmN0aW9uKEss'@;
put 'VSl7cmV0dXJuIFU/bmV3IHooSyxVKTpuZXcgeihLKX06ei5mcm9tLmJpbmQoeiksei5hbGxvY3x8KHouYWxsb2M9ZnVuY3Rpb24oSyl7cmV0dXJuIG5ldyB6KEspfSl9Ri5leHBvcnRzPWZ1bmN0aW9uKEssVSl7cmV0dXJuIm51bWJlciI9PXR5cGVvZiBLP3ouYWxsb2MoSyk6TihLLFUpfSxG'@;
put 'LmV4cG9ydHMudGVzdD1mdW5jdGlvbihLKXtyZXR1cm4gei5pc0J1ZmZlcihLKX19KS5jYWxsKHRoaXMsdHlwZW9mIEJ1ZmZlcjwidSI/QnVmZmVyOnZvaWQgMCl9LHt9XSwxMjpbZnVuY3Rpb24oUCxGLE8peyJ1c2Ugc3RyaWN0Ijt2YXIgej1QKCIuL3VpbnQ4QXJyYXlSZWFkZXIiKTtmdW5j'@;
put 'dGlvbiBOKEwpe3RoaXMuZGF0YT1MLHRoaXMubGVuZ3RoPXRoaXMuZGF0YS5sZW5ndGgsdGhpcy5pbmRleD0wfShOLnByb3RvdHlwZT1uZXcgeikucmVhZERhdGE9ZnVuY3Rpb24oTCl7dGhpcy5jaGVja09mZnNldChMKTt2YXIgSz10aGlzLmRhdGEuc2xpY2UodGhpcy5pbmRleCx0aGlzLmlu'@;
put 'ZGV4K0wpO3JldHVybiB0aGlzLmluZGV4Kz1MLEt9LEYuZXhwb3J0cz1OfSx7Ii4vdWludDhBcnJheVJlYWRlciI6MTh9XSwxMzpbZnVuY3Rpb24oUCxGLE8peyJ1c2Ugc3RyaWN0Ijt2YXIgej1QKCIuL3N1cHBvcnQiKSxOPVAoIi4vdXRpbHMiKSxMPVAoIi4vY3JjMzIiKSxLPVAoIi4vc2ln'@;
put 'bmF0dXJlIiksVT1QKCIuL2RlZmF1bHRzIiksVz1QKCIuL2Jhc2U2NCIpLFk9UCgiLi9jb21wcmVzc2lvbnMiKSxxPVAoIi4vY29tcHJlc3NlZE9iamVjdCIpLGVlPVAoIi4vbm9kZUJ1ZmZlciIpLEo9UCgiLi91dGY4IiksbmU9UCgiLi9zdHJpbmdXcml0ZXIiKSxpZT1QKCIuL3VpbnQ4QXJy'@;
put 'YXlXcml0ZXIiKSxsZT1mdW5jdGlvbihqKXtpZihqLl9kYXRhIGluc3RhbmNlb2YgcSYmKGouX2RhdGE9ai5fZGF0YS5nZXRDb250ZW50KCksai5vcHRpb25zLmJpbmFyeT0hMCxqLm9wdGlvbnMuYmFzZTY0PSExLCJ1aW50OGFycmF5Ij09PU4uZ2V0VHlwZU9mKGouX2RhdGEpKSl7dmFyIEU9'@;
put 'ai5fZGF0YTtqLl9kYXRhPW5ldyBVaW50OEFycmF5KEUubGVuZ3RoKSwwIT09RS5sZW5ndGgmJmouX2RhdGEuc2V0KEUsMCl9cmV0dXJuIGouX2RhdGF9LG1lPWZ1bmN0aW9uKGope3ZhciBFPWxlKGopO3JldHVybiJzdHJpbmciPT09Ti5nZXRUeXBlT2YoRSk/IWoub3B0aW9ucy5iaW5hcnkm'@;
put 'Jnoubm9kZWJ1ZmZlcj9lZShFLCJ1dGYtOCIpOmouYXNCaW5hcnkoKTpFfSxfZT1mdW5jdGlvbihqKXt2YXIgRT1sZSh0aGlzKTtyZXR1cm4gbnVsbD09PUV8fHR5cGVvZiBFPiJ1Ij8iIjoodGhpcy5vcHRpb25zLmJhc2U2NCYmKEU9Vy5kZWNvZGUoRSkpLEU9aiYmdGhpcy5vcHRpb25zLmJp'@;
put 'bmFyeT9ILnV0ZjhkZWNvZGUoRSk6Ti50cmFuc2Zvcm1Ubygic3RyaW5nIixFKSwhaiYmIXRoaXMub3B0aW9ucy5iaW5hcnkmJihFPU4udHJhbnNmb3JtVG8oInN0cmluZyIsSC51dGY4ZW5jb2RlKEUpKSksRSl9LFRlPWZ1bmN0aW9uKGosRSxtKXt0aGlzLm5hbWU9aix0aGlzLmRpcj1tLmRp'@;
put 'cix0aGlzLmRhdGU9bS5kYXRlLHRoaXMuY29tbWVudD1tLmNvbW1lbnQsdGhpcy5fZGF0YT1FLHRoaXMub3B0aW9ucz1tLHRoaXMuX2luaXRpYWxNZXRhZGF0YT17ZGlyOm0uZGlyLGRhdGU6bS5kYXRlfX07VGUucHJvdG90eXBlPXthc1RleHQ6ZnVuY3Rpb24oKXtyZXR1cm4gX2UuY2FsbCh0'@;
put 'aGlzLCEwKX0sYXNCaW5hcnk6ZnVuY3Rpb24oKXtyZXR1cm4gX2UuY2FsbCh0aGlzLCExKX0sYXNOb2RlQnVmZmVyOmZ1bmN0aW9uKCl7dmFyIGo9bWUodGhpcyk7cmV0dXJuIE4udHJhbnNmb3JtVG8oIm5vZGVidWZmZXIiLGopfSxhc1VpbnQ4QXJyYXk6ZnVuY3Rpb24oKXt2YXIgaj1tZSh0'@;
put 'aGlzKTtyZXR1cm4gTi50cmFuc2Zvcm1UbygidWludDhhcnJheSIsail9LGFzQXJyYXlCdWZmZXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hc1VpbnQ4QXJyYXkoKS5idWZmZXJ9fTt2YXIgU2U9ZnVuY3Rpb24oaixFKXt2YXIgQSxtPSIiO2ZvcihBPTA7QTxFO0ErKyltKz1TdHJpbmcuZnJv'@;
put 'bUNoYXJDb2RlKDI1NSZqKSxqPj4+PTg7cmV0dXJuIG19LGplPWZ1bmN0aW9uKCl7dmFyIEUsbSxqPXt9O2ZvcihFPTA7RTxhcmd1bWVudHMubGVuZ3RoO0UrKylmb3IobSBpbiBhcmd1bWVudHNbRV0pYXJndW1lbnRzW0VdLmhhc093blByb3BlcnR5KG0pJiZ0eXBlb2YgalttXT4idSImJihq'@;
put 'W21dPWFyZ3VtZW50c1tFXVttXSk7cmV0dXJuIGp9LHA9ZnVuY3Rpb24oaixFLG0pe3ZhciBhZSxBPU4uZ2V0VHlwZU9mKEUpO2lmKG09ZnVuY3Rpb24oail7cmV0dXJuITA9PT0oaj1qfHx7fSkuYmFzZTY0JiZudWxsPT1qLmJpbmFyeSYmKGouYmluYXJ5PSEwKSwoaj1qZShqLFUpKS5kYXRl'@;
put 'PWouZGF0ZXx8bmV3IERhdGUsbnVsbCE9PWouY29tcHJlc3Npb24mJihqLmNvbXByZXNzaW9uPWouY29tcHJlc3Npb24udG9VcHBlckNhc2UoKSksan0obSksbS5jcmVhdGVGb2xkZXJzJiYoYWU9YihqKSkmJnguY2FsbCh0aGlzLGFlLCEwKSxtLmRpcnx8bnVsbD09PUV8fHR5cGVvZiBFPiJ1'@;
put 'IiltLmJhc2U2ND0hMSxtLmJpbmFyeT0hMSxFPW51bGw7ZWxzZSBpZigic3RyaW5nIj09PUEpbS5iaW5hcnkmJiFtLmJhc2U2NCYmITAhPT1tLm9wdGltaXplZEJpbmFyeVN0cmluZyYmKEU9Ti5zdHJpbmcyYmluYXJ5KEUpKTtlbHNle2lmKG0uYmFzZTY0PSExLG0uYmluYXJ5PSEwLCEoQXx8'@;
put 'RSBpbnN0YW5jZW9mIHEpKXRocm93IG5ldyBFcnJvcigiVGhlIGRhdGEgb2YgJyIraisiJyBpcyBpbiBhbiB1bnN1cHBvcnRlZCBmb3JtYXQgISIpOyJhcnJheWJ1ZmZlciI9PT1BJiYoRT1OLnRyYW5zZm9ybVRvKCJ1aW50OGFycmF5IixFKSl9dmFyIHRlPW5ldyBUZShqLEUsbSk7cmV0dXJu'@;
put 'IHRoaXMuZmlsZXNbal09dGUsdGV9LGI9ZnVuY3Rpb24oail7Ii8iPT1qLnNsaWNlKC0xKSYmKGo9ai5zdWJzdHJpbmcoMCxqLmxlbmd0aC0xKSk7dmFyIEU9ai5sYXN0SW5kZXhPZigiLyIpO3JldHVybiBFPjA/ai5zdWJzdHJpbmcoMCxFKToiIn0seD1mdW5jdGlvbihqLEUpe3JldHVybiIv'@;
put 'IiE9ai5zbGljZSgtMSkmJihqKz0iLyIpLEU9dHlwZW9mIEU8InUiJiZFLHRoaXMuZmlsZXNbal18fHAuY2FsbCh0aGlzLGosbnVsbCx7ZGlyOiEwLGNyZWF0ZUZvbGRlcnM6RX0pLHRoaXMuZmlsZXNbal19LEM9ZnVuY3Rpb24oaixFKXt2YXIgQSxtPW5ldyBxO3JldHVybiBqLl9kYXRhIGlu'@;
put 'c3RhbmNlb2YgcT8obS51bmNvbXByZXNzZWRTaXplPWouX2RhdGEudW5jb21wcmVzc2VkU2l6ZSxtLmNyYzMyPWouX2RhdGEuY3JjMzIsMD09PW0udW5jb21wcmVzc2VkU2l6ZXx8ai5kaXI/KEU9WS5TVE9SRSxtLmNvbXByZXNzZWRDb250ZW50PSIiLG0uY3JjMzI9MCk6ai5fZGF0YS5jb21w'@;
put 'cmVzc2lvbk1ldGhvZD09PUUubWFnaWM/bS5jb21wcmVzc2VkQ29udGVudD1qLl9kYXRhLmdldENvbXByZXNzZWRDb250ZW50KCk6KEE9ai5fZGF0YS5nZXRDb250ZW50KCksbS5jb21wcmVzc2VkQ29udGVudD1FLmNvbXByZXNzKE4udHJhbnNmb3JtVG8oRS5jb21wcmVzc0lucHV0VHlwZSxB'@;
put 'KSkpKTooKCEoQT1tZShqKSl8fDA9PT1BLmxlbmd0aHx8ai5kaXIpJiYoRT1ZLlNUT1JFLEE9IiIpLG0udW5jb21wcmVzc2VkU2l6ZT1BLmxlbmd0aCxtLmNyYzMyPUwoQSksbS5jb21wcmVzc2VkQ29udGVudD1FLmNvbXByZXNzKE4udHJhbnNmb3JtVG8oRS5jb21wcmVzc0lucHV0VHlwZSxB'@;
put 'KSkpLG0uY29tcHJlc3NlZFNpemU9bS5jb21wcmVzc2VkQ29udGVudC5sZW5ndGgsbS5jb21wcmVzc2lvbk1ldGhvZD1FLm1hZ2ljLG19LFQ9ZnVuY3Rpb24oaixFLG0sQSl7dmFyIHhlLHZlLEZlLE9lLHRlPU4udHJhbnNmb3JtVG8oInN0cmluZyIsSi51dGY4ZW5jb2RlKEUubmFtZSkpLHNl'@;
put 'PUUuY29tbWVudHx8IiIsd2U9Ti50cmFuc2Zvcm1Ubygic3RyaW5nIixKLnV0ZjhlbmNvZGUoc2UpKSxVZT10ZS5sZW5ndGghPT1FLm5hbWUubGVuZ3RoLEplPXdlLmxlbmd0aCE9PXNlLmxlbmd0aCxvdD1FLm9wdGlvbnMsWGU9IiIsemU9IiIsRGU9IiI7RmU9RS5faW5pdGlhbE1ldGFkYXRh'@;
put 'LmRpciE9PUUuZGlyP0UuZGlyOm90LmRpcix4ZT0oT2U9RS5faW5pdGlhbE1ldGFkYXRhLmRhdGUhPT1FLmRhdGU/RS5kYXRlOm90LmRhdGUpLmdldEhvdXJzKCkseGU8PD02LHhlfD1PZS5nZXRNaW51dGVzKCkseGU8PD01LHhlfD1PZS5nZXRTZWNvbmRzKCkvMix2ZT1PZS5nZXRGdWxsWWVh'@;
put 'cigpLTE5ODAsdmU8PD00LHZlfD1PZS5nZXRNb250aCgpKzEsdmU8PD01LHZlfD1PZS5nZXREYXRlKCksVWUmJih6ZT1TZSgxLDEpK1NlKEwodGUpLDQpK3RlLFhlKz0idXAiK1NlKHplLmxlbmd0aCwyKSt6ZSksSmUmJihEZT1TZSgxLDEpK1NlKHRoaXMuY3JjMzIod2UpLDQpK3dlLFhlKz0i'@;
put 'dWMiK1NlKERlLmxlbmd0aCwyKStEZSk7dmFyIEllPSIiO3JldHVybiBJZSs9IlxuXDAiLEllKz1VZXx8SmU/IlwwXGIiOiJcMFwwIixJZSs9bS5jb21wcmVzc2lvbk1ldGhvZCxJZSs9U2UoeGUsMiksSWUrPVNlKHZlLDIpLEllKz1TZShtLmNyYzMyLDQpLEllKz1TZShtLmNvbXByZXNzZWRT'@;
put 'aXplLDQpLEllKz1TZShtLnVuY29tcHJlc3NlZFNpemUsNCksSWUrPVNlKHRlLmxlbmd0aCwyKSxJZSs9U2UoWGUubGVuZ3RoLDIpLHtmaWxlUmVjb3JkOksuTE9DQUxfRklMRV9IRUFERVIrSWUrdGUrWGUsZGlyUmVjb3JkOksuQ0VOVFJBTF9GSUxFX0hFQURFUisiXHgxNFwwIitJZStTZSh3'@;
put 'ZS5sZW5ndGgsMikrIlwwXDBcMFwwIisoITA9PT1GZT8iXHgxMFwwXDBcMCI6IlwwXDBcMFwwIikrU2UoQSw0KSt0ZStYZSt3ZSxjb21wcmVzc2VkT2JqZWN0Om19fSxIPXtsb2FkOmZ1bmN0aW9uKGosRSl7dGhyb3cgbmV3IEVycm9yKCJMb2FkIG1ldGhvZCBpcyBub3QgZGVmaW5lZC4gSXMg'@;
put 'dGhlIGZpbGUganN6aXAtbG9hZC5qcyBpbmNsdWRlZCA/Iil9LGZpbHRlcjpmdW5jdGlvbihqKXt2YXIgbSxBLGFlLHRlLEU9W107Zm9yKG0gaW4gdGhpcy5maWxlcyl0aGlzLmZpbGVzLmhhc093blByb3BlcnR5KG0pJiYodGU9bmV3IFRlKChhZT10aGlzLmZpbGVzW21dKS5uYW1lLGFlLl9k'@;
put 'YXRhLGplKGFlLm9wdGlvbnMpKSxBPW0uc2xpY2UodGhpcy5yb290Lmxlbmd0aCxtLmxlbmd0aCksbS5zbGljZSgwLHRoaXMucm9vdC5sZW5ndGgpPT09dGhpcy5yb290JiZqKEEsdGUpJiZFLnB1c2godGUpKTtyZXR1cm4gRX0sZmlsZTpmdW5jdGlvbihqLEUsbSl7aWYoMT09PWFyZ3VtZW50'@;
put 'cy5sZW5ndGgpe2lmKE4uaXNSZWdFeHAoaikpe3ZhciBBPWo7cmV0dXJuIHRoaXMuZmlsdGVyKGZ1bmN0aW9uKGFlLHRlKXtyZXR1cm4hdGUuZGlyJiZBLnRlc3QoYWUpfSl9cmV0dXJuIHRoaXMuZmlsdGVyKGZ1bmN0aW9uKGFlLHRlKXtyZXR1cm4hdGUuZGlyJiZhZT09PWp9KVswXXx8bnVs'@;
put 'bH1yZXR1cm4gcC5jYWxsKHRoaXMsaj10aGlzLnJvb3QraixFLG0pLHRoaXN9LGZvbGRlcjpmdW5jdGlvbihqKXtpZighailyZXR1cm4gdGhpcztpZihOLmlzUmVnRXhwKGopKXJldHVybiB0aGlzLmZpbHRlcihmdW5jdGlvbihhZSx0ZSl7cmV0dXJuIHRlLmRpciYmai50ZXN0KGFlKX0pO3Zh'@;
put 'ciBtPXguY2FsbCh0aGlzLHRoaXMucm9vdCtqKSxBPXRoaXMuY2xvbmUoKTtyZXR1cm4gQS5yb290PW0ubmFtZSxBfSxyZW1vdmU6ZnVuY3Rpb24oail7dmFyIEU9dGhpcy5maWxlc1tqPXRoaXMucm9vdCtqXTtpZihFfHwoIi8iIT1qLnNsaWNlKC0xKSYmKGorPSIvIiksRT10aGlzLmZpbGVz'@;
put 'W2pdKSxFJiYhRS5kaXIpZGVsZXRlIHRoaXMuZmlsZXNbal07ZWxzZSBmb3IodmFyIG09dGhpcy5maWx0ZXIoZnVuY3Rpb24oYWUsdGUpe3JldHVybiB0ZS5uYW1lLnNsaWNlKDAsai5sZW5ndGgpPT09an0pLEE9MDtBPG0ubGVuZ3RoO0ErKylkZWxldGUgdGhpcy5maWxlc1ttW0FdLm5hbWVd'@;
put 'O3JldHVybiB0aGlzfSxnZW5lcmF0ZTpmdW5jdGlvbihqKXtqPWplKGp8fHt9LHtiYXNlNjQ6ITAsY29tcHJlc3Npb246IlNUT1JFIix0eXBlOiJiYXNlNjQiLGNvbW1lbnQ6bnVsbH0pLE4uY2hlY2tTdXBwb3J0KGoudHlwZSk7dmFyIGFlLHRlLFhlLEU9W10sbT0wLEE9MCxzZT1OLnRyYW5z'@;
put 'Zm9ybVRvKCJzdHJpbmciLHRoaXMudXRmOGVuY29kZShqLmNvbW1lbnR8fHRoaXMuY29tbWVudHx8IiIpKTtmb3IodmFyIHdlIGluIHRoaXMuZmlsZXMpaWYodGhpcy5maWxlcy5oYXNPd25Qcm9wZXJ0eSh3ZSkpe3ZhciBVZT10aGlzLmZpbGVzW3dlXSxKZT1VZS5vcHRpb25zLmNvbXByZXNz'@;
put 'aW9ufHxqLmNvbXByZXNzaW9uLnRvVXBwZXJDYXNlKCksb3Q9WVtKZV07aWYoIW90KXRocm93IG5ldyBFcnJvcihKZSsiIGlzIG5vdCBhIHZhbGlkIGNvbXByZXNzaW9uIG1ldGhvZCAhIik7dmFyIHhlPUMuY2FsbCh0aGlzLFVlLG90KSx2ZT1ULmNhbGwodGhpcyx3ZSxVZSx4ZSxtKTttKz12'@;
put 'ZS5maWxlUmVjb3JkLmxlbmd0aCt4ZS5jb21wcmVzc2VkU2l6ZSxBKz12ZS5kaXJSZWNvcmQubGVuZ3RoLEUucHVzaCh2ZSl9WGU9Sy5DRU5UUkFMX0RJUkVDVE9SWV9FTkQrIlwwXDBcMFwwIitTZShFLmxlbmd0aCwyKStTZShFLmxlbmd0aCwyKStTZShBLDQpK1NlKG0sNCkrU2Uoc2UubGVu'@;
put 'Z3RoLDIpK3NlO3ZhciB6ZT1qLnR5cGUudG9Mb3dlckNhc2UoKTtmb3IoYWU9InVpbnQ4YXJyYXkiPT09emV8fCJhcnJheWJ1ZmZlciI9PT16ZXx8ImJsb2IiPT09emV8fCJub2RlYnVmZmVyIj09PXplP25ldyBpZShtK0ErWGUubGVuZ3RoKTpuZXcgbmUobStBK1hlLmxlbmd0aCksdGU9MDt0'@;
put 'ZTxFLmxlbmd0aDt0ZSsrKWFlLmFwcGVuZChFW3RlXS5maWxlUmVjb3JkKSxhZS5hcHBlbmQoRVt0ZV0uY29tcHJlc3NlZE9iamVjdC5jb21wcmVzc2VkQ29udGVudCk7Zm9yKHRlPTA7dGU8RS5sZW5ndGg7dGUrKylhZS5hcHBlbmQoRVt0ZV0uZGlyUmVjb3JkKTthZS5hcHBlbmQoWGUpO3Zh'@;
put 'ciBEZT1hZS5maW5hbGl6ZSgpO3N3aXRjaChqLnR5cGUudG9Mb3dlckNhc2UoKSl7Y2FzZSJ1aW50OGFycmF5IjpjYXNlImFycmF5YnVmZmVyIjpjYXNlIm5vZGVidWZmZXIiOnJldHVybiBOLnRyYW5zZm9ybVRvKGoudHlwZS50b0xvd2VyQ2FzZSgpLERlKTtjYXNlImJsb2IiOnJldHVybiBO'@;
put 'LmFycmF5QnVmZmVyMkJsb2IoTi50cmFuc2Zvcm1UbygiYXJyYXlidWZmZXIiLERlKSk7Y2FzZSJiYXNlNjQiOnJldHVybiBqLmJhc2U2ND9XLmVuY29kZShEZSk6RGU7ZGVmYXVsdDpyZXR1cm4gRGV9fSxjcmMzMjpmdW5jdGlvbihqLEUpe3JldHVybiBMKGosRSl9LHV0ZjhlbmNvZGU6ZnVu'@;
put 'Y3Rpb24oail7cmV0dXJuIE4udHJhbnNmb3JtVG8oInN0cmluZyIsSi51dGY4ZW5jb2RlKGopKX0sdXRmOGRlY29kZTpmdW5jdGlvbihqKXtyZXR1cm4gSi51dGY4ZGVjb2RlKGopfX07Ri5leHBvcnRzPUh9LHsiLi9iYXNlNjQiOjEsIi4vY29tcHJlc3NlZE9iamVjdCI6MiwiLi9jb21wcmVz'@;
put 'c2lvbnMiOjMsIi4vY3JjMzIiOjQsIi4vZGVmYXVsdHMiOjYsIi4vbm9kZUJ1ZmZlciI6MTEsIi4vc2lnbmF0dXJlIjoxNCwiLi9zdHJpbmdXcml0ZXIiOjE2LCIuL3N1cHBvcnQiOjE3LCIuL3VpbnQ4QXJyYXlXcml0ZXIiOjE5LCIuL3V0ZjgiOjIwLCIuL3V0aWxzIjoyMX1dLDE0OltmdW5j'@;
put 'dGlvbihQLEYsTyl7InVzZSBzdHJpY3QiO08uTE9DQUxfRklMRV9IRUFERVI9IlBLXHgwM1x4MDQiLE8uQ0VOVFJBTF9GSUxFX0hFQURFUj0iUEtceDAxXHgwMiIsTy5DRU5UUkFMX0RJUkVDVE9SWV9FTkQ9IlBLXHgwNVx4MDYiLE8uWklQNjRfQ0VOVFJBTF9ESVJFQ1RPUllfTE9DQVRPUj0i'@;
put 'UEtceDA2XHgwNyIsTy5aSVA2NF9DRU5UUkFMX0RJUkVDVE9SWV9FTkQ9IlBLXHgwNlx4MDYiLE8uREFUQV9ERVNDUklQVE9SPSJQS1x4MDdcYiJ9LHt9XSwxNTpbZnVuY3Rpb24oUCxGLE8peyJ1c2Ugc3RyaWN0Ijt2YXIgej1QKCIuL2RhdGFSZWFkZXIiKSxOPVAoIi4vdXRpbHMiKTtmdW5j'@;
put 'dGlvbiBMKEssVSl7dGhpcy5kYXRhPUssVXx8KHRoaXMuZGF0YT1OLnN0cmluZzJiaW5hcnkodGhpcy5kYXRhKSksdGhpcy5sZW5ndGg9dGhpcy5kYXRhLmxlbmd0aCx0aGlzLmluZGV4PTB9KEwucHJvdG90eXBlPW5ldyB6KS5ieXRlQXQ9ZnVuY3Rpb24oSyl7cmV0dXJuIHRoaXMuZGF0YS5j'@;
put 'aGFyQ29kZUF0KEspfSxMLnByb3RvdHlwZS5sYXN0SW5kZXhPZlNpZ25hdHVyZT1mdW5jdGlvbihLKXtyZXR1cm4gdGhpcy5kYXRhLmxhc3RJbmRleE9mKEspfSxMLnByb3RvdHlwZS5yZWFkRGF0YT1mdW5jdGlvbihLKXt0aGlzLmNoZWNrT2Zmc2V0KEspO3ZhciBVPXRoaXMuZGF0YS5zbGlj'@;
put 'ZSh0aGlzLmluZGV4LHRoaXMuaW5kZXgrSyk7cmV0dXJuIHRoaXMuaW5kZXgrPUssVX0sRi5leHBvcnRzPUx9LHsiLi9kYXRhUmVhZGVyIjo1LCIuL3V0aWxzIjoyMX1dLDE2OltmdW5jdGlvbihQLEYsTyl7InVzZSBzdHJpY3QiO3ZhciB6PVAoIi4vdXRpbHMiKSxOPWZ1bmN0aW9uKCl7dGhp'@;
put 'cy5kYXRhPVtdfTtOLnByb3RvdHlwZT17YXBwZW5kOmZ1bmN0aW9uKEwpe0w9ei50cmFuc2Zvcm1Ubygic3RyaW5nIixMKSx0aGlzLmRhdGEucHVzaChMKX0sZmluYWxpemU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kYXRhLmpvaW4oIiIpfX0sRi5leHBvcnRzPU59LHsiLi91dGlscyI6MjF9'@;
put 'XSwxNzpbZnVuY3Rpb24oUCxGLE8peyhmdW5jdGlvbih6KXsidXNlIHN0cmljdCI7aWYoTy5iYXNlNjQ9ITAsTy5hcnJheT0hMCxPLnN0cmluZz0hMCxPLmFycmF5YnVmZmVyPXR5cGVvZiBBcnJheUJ1ZmZlcjwidSImJnR5cGVvZiBVaW50OEFycmF5PCJ1IixPLm5vZGVidWZmZXI9dHlwZW9m'@;
put 'IHo8InUiLE8udWludDhhcnJheT10eXBlb2YgVWludDhBcnJheTwidSIsdHlwZW9mIEFycmF5QnVmZmVyPiJ1IilPLmJsb2I9ITE7ZWxzZXt2YXIgTj1uZXcgQXJyYXlCdWZmZXIoMCk7dHJ5e08uYmxvYj0wPT09bmV3IEJsb2IoW05dLHt0eXBlOiJhcHBsaWNhdGlvbi96aXAifSkuc2l6ZX1j'@;
put 'YXRjaHt0cnl7dmFyIEs9bmV3KHdpbmRvdy5CbG9iQnVpbGRlcnx8d2luZG93LldlYktpdEJsb2JCdWlsZGVyfHx3aW5kb3cuTW96QmxvYkJ1aWxkZXJ8fHdpbmRvdy5NU0Jsb2JCdWlsZGVyKTtLLmFwcGVuZChOKSxPLmJsb2I9MD09PUsuZ2V0QmxvYigiYXBwbGljYXRpb24vemlwIikuc2l6'@;
put 'ZX1jYXRjaHtPLmJsb2I9ITF9fX19KS5jYWxsKHRoaXMsdHlwZW9mIEJ1ZmZlcjwidSI/QnVmZmVyOnZvaWQgMCl9LHt9XSwxODpbZnVuY3Rpb24oUCxGLE8peyJ1c2Ugc3RyaWN0Ijt2YXIgej1QKCIuL2RhdGFSZWFkZXIiKTtmdW5jdGlvbiBOKEwpe0wmJih0aGlzLmRhdGE9TCx0aGlzLmxl'@;
put 'bmd0aD10aGlzLmRhdGEubGVuZ3RoLHRoaXMuaW5kZXg9MCl9KE4ucHJvdG90eXBlPW5ldyB6KS5ieXRlQXQ9ZnVuY3Rpb24oTCl7cmV0dXJuIHRoaXMuZGF0YVtMXX0sTi5wcm90b3R5cGUubGFzdEluZGV4T2ZTaWduYXR1cmU9ZnVuY3Rpb24oTCl7Zm9yKHZhciBLPUwuY2hhckNvZGVBdCgw'@;
put 'KSxVPUwuY2hhckNvZGVBdCgxKSxXPUwuY2hhckNvZGVBdCgyKSxZPUwuY2hhckNvZGVBdCgzKSxxPXRoaXMubGVuZ3RoLTQ7cT49MDstLXEpaWYodGhpcy5kYXRhW3FdPT09SyYmdGhpcy5kYXRhW3ErMV09PT1VJiZ0aGlzLmRhdGFbcSsyXT09PVcmJnRoaXMuZGF0YVtxKzNdPT09WSlyZXR1'@;
put 'cm4gcTtyZXR1cm4tMX0sTi5wcm90b3R5cGUucmVhZERhdGE9ZnVuY3Rpb24oTCl7aWYodGhpcy5jaGVja09mZnNldChMKSwwPT09TClyZXR1cm4gbmV3IFVpbnQ4QXJyYXkoMCk7dmFyIEs9dGhpcy5kYXRhLnN1YmFycmF5KHRoaXMuaW5kZXgsdGhpcy5pbmRleCtMKTtyZXR1cm4gdGhpcy5p'@;
put 'bmRleCs9TCxLfSxGLmV4cG9ydHM9Tn0seyIuL2RhdGFSZWFkZXIiOjV9XSwxOTpbZnVuY3Rpb24oUCxGLE8peyJ1c2Ugc3RyaWN0Ijt2YXIgej1QKCIuL3V0aWxzIiksTj1mdW5jdGlvbihMKXt0aGlzLmRhdGE9bmV3IFVpbnQ4QXJyYXkoTCksdGhpcy5pbmRleD0wfTtOLnByb3RvdHlwZT17'@;
put 'YXBwZW5kOmZ1bmN0aW9uKEwpezAhPT1MLmxlbmd0aCYmKEw9ei50cmFuc2Zvcm1UbygidWludDhhcnJheSIsTCksdGhpcy5kYXRhLnNldChMLHRoaXMuaW5kZXgpLHRoaXMuaW5kZXgrPUwubGVuZ3RoKX0sZmluYWxpemU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kYXRhfX0sRi5leHBvcnRz'@;
put 'PU59LHsiLi91dGlscyI6MjF9XSwyMDpbZnVuY3Rpb24oUCxGLE8peyJ1c2Ugc3RyaWN0Ijtmb3IodmFyIHo9UCgiLi91dGlscyIpLE49UCgiLi9zdXBwb3J0IiksTD1QKCIuL25vZGVCdWZmZXIiKSxLPW5ldyBBcnJheSgyNTYpLFU9MDtVPDI1NjtVKyspS1tVXT1VPj0yNTI/NjpVPj0yNDg/'@;
put 'NTpVPj0yNDA/NDpVPj0yMjQ/MzpVPj0xOTI/MjoxO0tbMjU0XT1LWzI1NF09MTt2YXIgWT1mdW5jdGlvbihlZSxKKXt2YXIgbmU7Zm9yKChKPUp8fGVlLmxlbmd0aCk+ZWUubGVuZ3RoJiYoSj1lZS5sZW5ndGgpLG5lPUotMTtuZT49MCYmMTI4PT0oMTkyJmVlW25lXSk7KW5lLS07cmV0dXJu'@;
put 'IG5lPDB8fDA9PT1uZT9KOm5lK0tbZWVbbmVdXT5KP25lOkp9LHE9ZnVuY3Rpb24oZWUpe3ZhciBuZSxpZSxsZSxtZSxfZT1lZS5sZW5ndGgsVGU9bmV3IEFycmF5KDIqX2UpO2ZvcihpZT0wLG5lPTA7bmU8X2U7KWlmKChsZT1lZVtuZSsrXSk8MTI4KVRlW2llKytdPWxlO2Vsc2UgaWYoKG1l'@;
put 'PUtbbGVdKT40KVRlW2llKytdPTY1NTMzLG5lKz1tZS0xO2Vsc2V7Zm9yKGxlJj0yPT09bWU/MzE6Mz09PW1lPzE1Ojc7bWU+MSYmbmU8X2U7KWxlPWxlPDw2fDYzJmVlW25lKytdLG1lLS07bWU+MT9UZVtpZSsrXT02NTUzMzpsZTw2NTUzNj9UZVtpZSsrXT1sZTooVGVbaWUrK109NTUyOTZ8'@;
put 'KGxlLT02NTUzNik+PjEwJjEwMjMsVGVbaWUrK109NTYzMjB8MTAyMyZsZSl9cmV0dXJuIFRlLmxlbmd0aCE9PWllJiYoVGUuc3ViYXJyYXk/VGU9VGUuc3ViYXJyYXkoMCxpZSk6VGUubGVuZ3RoPWllKSx6LmFwcGx5RnJvbUNoYXJDb2RlKFRlKX07Ty51dGY4ZW5jb2RlPWZ1bmN0aW9uKEop'@;
put 'e3JldHVybiBOLm5vZGVidWZmZXI/TChKLCJ1dGYtOCIpOmZ1bmN0aW9uKGVlKXt2YXIgSixuZSxpZSxsZSxtZSxfZT1lZS5sZW5ndGgsVGU9MDtmb3IobGU9MDtsZTxfZTtsZSsrKTU1Mjk2PT0oNjQ1MTImKG5lPWVlLmNoYXJDb2RlQXQobGUpKSkmJmxlKzE8X2UmJjU2MzIwPT0oNjQ1MTIm'@;
put 'KGllPWVlLmNoYXJDb2RlQXQobGUrMSkpKSYmKG5lPTY1NTM2KyhuZS01NTI5Njw8MTApKyhpZS01NjMyMCksbGUrKyksVGUrPW5lPDEyOD8xOm5lPDIwNDg/MjpuZTw2NTUzNj8zOjQ7Zm9yKEo9Ti51aW50OGFycmF5P25ldyBVaW50OEFycmF5KFRlKTpuZXcgQXJyYXkoVGUpLG1lPTAsbGU9'@;
put 'MDttZTxUZTtsZSsrKTU1Mjk2PT0oNjQ1MTImKG5lPWVlLmNoYXJDb2RlQXQobGUpKSkmJmxlKzE8X2UmJjU2MzIwPT0oNjQ1MTImKGllPWVlLmNoYXJDb2RlQXQobGUrMSkpKSYmKG5lPTY1NTM2KyhuZS01NTI5Njw8MTApKyhpZS01NjMyMCksbGUrKyksbmU8MTI4P0pbbWUrK109bmU6bmU8'@;
put 'MjA0OD8oSlttZSsrXT0xOTJ8bmU+Pj42LEpbbWUrK109MTI4fDYzJm5lKTpuZTw2NTUzNj8oSlttZSsrXT0yMjR8bmU+Pj4xMixKW21lKytdPTEyOHxuZT4+PjYmNjMsSlttZSsrXT0xMjh8NjMmbmUpOihKW21lKytdPTI0MHxuZT4+PjE4LEpbbWUrK109MTI4fG5lPj4+MTImNjMsSlttZSsr'@;
put 'XT0xMjh8bmU+Pj42JjYzLEpbbWUrK109MTI4fDYzJm5lKTtyZXR1cm4gSn0oSil9LE8udXRmOGRlY29kZT1mdW5jdGlvbihKKXtpZihOLm5vZGVidWZmZXIpcmV0dXJuIHoudHJhbnNmb3JtVG8oIm5vZGVidWZmZXIiLEopLnRvU3RyaW5nKCJ1dGYtOCIpO2Zvcih2YXIgbmU9W10saWU9MCxs'@;
put 'ZT0oSj16LnRyYW5zZm9ybVRvKE4udWludDhhcnJheT8idWludDhhcnJheSI6ImFycmF5IixKKSkubGVuZ3RoO2llPGxlOyl7dmFyIF9lPVkoSixNYXRoLm1pbihpZSs2NTUzNixsZSkpO25lLnB1c2gocShOLnVpbnQ4YXJyYXk/Si5zdWJhcnJheShpZSxfZSk6Si5zbGljZShpZSxfZSkpKSxp'@;
put 'ZT1fZX1yZXR1cm4gbmUuam9pbigiIil9fSx7Ii4vbm9kZUJ1ZmZlciI6MTEsIi4vc3VwcG9ydCI6MTcsIi4vdXRpbHMiOjIxfV0sMjE6W2Z1bmN0aW9uKFAsRixPKXsidXNlIHN0cmljdCI7dmFyIHo9UCgiLi9zdXBwb3J0IiksTj1QKCIuL2NvbXByZXNzaW9ucyIpLEw9UCgiLi9ub2RlQnVm'@;
put 'ZmVyIik7ZnVuY3Rpb24gSyhlZSl7cmV0dXJuIGVlfWZ1bmN0aW9uIFUoZWUsSil7Zm9yKHZhciBuZT0wO25lPGVlLmxlbmd0aDsrK25lKUpbbmVdPTI1NSZlZS5jaGFyQ29kZUF0KG5lKTtyZXR1cm4gSn1mdW5jdGlvbiBXKGVlKXt2YXIgSj02NTUzNixuZT1bXSxpZT1lZS5sZW5ndGgsbGU9'@;
put 'Ty5nZXRUeXBlT2YoZWUpLG1lPTAsX2U9ITA7dHJ5e3N3aXRjaChsZSl7Y2FzZSJ1aW50OGFycmF5IjpTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsbmV3IFVpbnQ4QXJyYXkoMCkpO2JyZWFrO2Nhc2Uibm9kZWJ1ZmZlciI6U3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLEwo'@;
put 'MCkpfX1jYXRjaHtfZT0hMX1pZighX2Upe2Zvcih2YXIgVGU9IiIsU2U9MDtTZTxlZS5sZW5ndGg7U2UrKylUZSs9U3RyaW5nLmZyb21DaGFyQ29kZShlZVtTZV0pO3JldHVybiBUZX1mb3IoO21lPGllJiZKPjE7KXRyeXtuZS5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCwi'@;
put 'YXJyYXkiPT09bGV8fCJub2RlYnVmZmVyIj09PWxlP2VlLnNsaWNlKG1lLE1hdGgubWluKG1lK0osaWUpKTplZS5zdWJhcnJheShtZSxNYXRoLm1pbihtZStKLGllKSkpKSxtZSs9Sn1jYXRjaHtKPU1hdGguZmxvb3IoSi8yKX1yZXR1cm4gbmUuam9pbigiIil9ZnVuY3Rpb24gWShlZSxKKXtm'@;
put 'b3IodmFyIG5lPTA7bmU8ZWUubGVuZ3RoO25lKyspSltuZV09ZWVbbmVdO3JldHVybiBKfU8uc3RyaW5nMmJpbmFyeT1mdW5jdGlvbihlZSl7Zm9yKHZhciBKPSIiLG5lPTA7bmU8ZWUubGVuZ3RoO25lKyspSis9U3RyaW5nLmZyb21DaGFyQ29kZSgyNTUmZWUuY2hhckNvZGVBdChuZSkpO3Jl'@;
put 'dHVybiBKfSxPLmFycmF5QnVmZmVyMkJsb2I9ZnVuY3Rpb24oZWUpe08uY2hlY2tTdXBwb3J0KCJibG9iIik7dHJ5e3JldHVybiBuZXcgQmxvYihbZWVdLHt0eXBlOiJhcHBsaWNhdGlvbi96aXAifSl9Y2F0Y2h7dHJ5e3ZhciBuZT1uZXcod2luZG93LkJsb2JCdWlsZGVyfHx3aW5kb3cuV2Vi'@;
put 'S2l0QmxvYkJ1aWxkZXJ8fHdpbmRvdy5Nb3pCbG9iQnVpbGRlcnx8d2luZG93Lk1TQmxvYkJ1aWxkZXIpO3JldHVybiBuZS5hcHBlbmQoZWUpLG5lLmdldEJsb2IoImFwcGxpY2F0aW9uL3ppcCIpfWNhdGNoe3Rocm93IG5ldyBFcnJvcigiQnVnIDogY2FuJ3QgY29uc3RydWN0IHRoZSBCbG9i'@;
put 'LiIpfX19LE8uYXBwbHlGcm9tQ2hhckNvZGU9Vzt2YXIgcT17fTtxLnN0cmluZz17c3RyaW5nOkssYXJyYXk6ZnVuY3Rpb24oZWUpe3JldHVybiBVKGVlLG5ldyBBcnJheShlZS5sZW5ndGgpKX0sYXJyYXlidWZmZXI6ZnVuY3Rpb24oZWUpe3JldHVybiBxLnN0cmluZy51aW50OGFycmF5KGVl'@;
put 'KS5idWZmZXJ9LHVpbnQ4YXJyYXk6ZnVuY3Rpb24oZWUpe3JldHVybiBVKGVlLG5ldyBVaW50OEFycmF5KGVlLmxlbmd0aCkpfSxub2RlYnVmZmVyOmZ1bmN0aW9uKGVlKXtyZXR1cm4gVShlZSxMKGVlLmxlbmd0aCkpfX0scS5hcnJheT17c3RyaW5nOlcsYXJyYXk6SyxhcnJheWJ1ZmZlcjpm'@;
put 'dW5jdGlvbihlZSl7cmV0dXJuIG5ldyBVaW50OEFycmF5KGVlKS5idWZmZXJ9LHVpbnQ4YXJyYXk6ZnVuY3Rpb24oZWUpe3JldHVybiBuZXcgVWludDhBcnJheShlZSl9LG5vZGVidWZmZXI6ZnVuY3Rpb24oZWUpe3JldHVybiBMKGVlKX19LHEuYXJyYXlidWZmZXI9e3N0cmluZzpmdW5jdGlv'@;
put 'bihlZSl7cmV0dXJuIFcobmV3IFVpbnQ4QXJyYXkoZWUpKX0sYXJyYXk6ZnVuY3Rpb24oZWUpe3JldHVybiBZKG5ldyBVaW50OEFycmF5KGVlKSxuZXcgQXJyYXkoZWUuYnl0ZUxlbmd0aCkpfSxhcnJheWJ1ZmZlcjpLLHVpbnQ4YXJyYXk6ZnVuY3Rpb24oZWUpe3JldHVybiBuZXcgVWludDhB'@;
put 'cnJheShlZSl9LG5vZGVidWZmZXI6ZnVuY3Rpb24oZWUpe3JldHVybiBMKG5ldyBVaW50OEFycmF5KGVlKSl9fSxxLnVpbnQ4YXJyYXk9e3N0cmluZzpXLGFycmF5OmZ1bmN0aW9uKGVlKXtyZXR1cm4gWShlZSxuZXcgQXJyYXkoZWUubGVuZ3RoKSl9LGFycmF5YnVmZmVyOmZ1bmN0aW9uKGVl'@;
put 'KXtyZXR1cm4gZWUuYnVmZmVyfSx1aW50OGFycmF5Okssbm9kZWJ1ZmZlcjpmdW5jdGlvbihlZSl7cmV0dXJuIEwoZWUpfX0scS5ub2RlYnVmZmVyPXtzdHJpbmc6VyxhcnJheTpmdW5jdGlvbihlZSl7cmV0dXJuIFkoZWUsbmV3IEFycmF5KGVlLmxlbmd0aCkpfSxhcnJheWJ1ZmZlcjpmdW5j'@;
put 'dGlvbihlZSl7cmV0dXJuIHEubm9kZWJ1ZmZlci51aW50OGFycmF5KGVlKS5idWZmZXJ9LHVpbnQ4YXJyYXk6ZnVuY3Rpb24oZWUpe3JldHVybiBZKGVlLG5ldyBVaW50OEFycmF5KGVlLmxlbmd0aCkpfSxub2RlYnVmZmVyOkt9LE8udHJhbnNmb3JtVG89ZnVuY3Rpb24oZWUsSil7aWYoSnx8'@;
put 'KEo9IiIpLCFlZSlyZXR1cm4gSjtPLmNoZWNrU3VwcG9ydChlZSk7dmFyIG5lPU8uZ2V0VHlwZU9mKEopO3JldHVybiBxW25lXVtlZV0oSil9LE8uZ2V0VHlwZU9mPWZ1bmN0aW9uKGVlKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIGVlPyJzdHJpbmciOiJbb2JqZWN0IEFycmF5XSI9PT1PYmpl'@;
put 'Y3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZWUpPyJhcnJheSI6ei5ub2RlYnVmZmVyJiZMLnRlc3QoZWUpPyJub2RlYnVmZmVyIjp6LnVpbnQ4YXJyYXkmJmVlIGluc3RhbmNlb2YgVWludDhBcnJheT8idWludDhhcnJheSI6ei5hcnJheWJ1ZmZlciYmZWUgaW5zdGFuY2VvZiBBcnJheUJ1'@;
put 'ZmZlcj8iYXJyYXlidWZmZXIiOnZvaWQgMH0sTy5jaGVja1N1cHBvcnQ9ZnVuY3Rpb24oZWUpe2lmKCF6W2VlLnRvTG93ZXJDYXNlKCldKXRocm93IG5ldyBFcnJvcihlZSsiIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBicm93c2VyIil9LE8uTUFYX1ZBTFVFXzE2QklUUz02NTUzNSxPLk1B'@;
put 'WF9WQUxVRV8zMkJJVFM9LTEsTy5wcmV0dHk9ZnVuY3Rpb24oZWUpe3ZhciBuZSxpZSxKPSIiO2ZvcihpZT0wO2llPChlZXx8IiIpLmxlbmd0aDtpZSsrKUorPSJcXHgiKygobmU9ZWUuY2hhckNvZGVBdChpZSkpPDE2PyIwIjoiIikrbmUudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCk7cmV0'@;
put 'dXJuIEp9LE8uZmluZENvbXByZXNzaW9uPWZ1bmN0aW9uKGVlKXtmb3IodmFyIEogaW4gTilpZihOLmhhc093blByb3BlcnR5KEopJiZOW0pdLm1hZ2ljPT09ZWUpcmV0dXJuIE5bSl07cmV0dXJuIG51bGx9LE8uaXNSZWdFeHA9ZnVuY3Rpb24oZWUpe3JldHVybiJbb2JqZWN0IFJlZ0V4cF0i'@;
put 'PT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGVlKX19LHsiLi9jb21wcmVzc2lvbnMiOjMsIi4vbm9kZUJ1ZmZlciI6MTEsIi4vc3VwcG9ydCI6MTd9XSwyMjpbZnVuY3Rpb24oUCxGLE8peyJ1c2Ugc3RyaWN0Ijt2YXIgej1QKCIuL3N0cmluZ1JlYWRlciIpLE49UCgiLi9ub2Rl'@;
put 'QnVmZmVyUmVhZGVyIiksTD1QKCIuL3VpbnQ4QXJyYXlSZWFkZXIiKSxLPVAoIi4vdXRpbHMiKSxVPVAoIi4vc2lnbmF0dXJlIiksVz1QKCIuL3ppcEVudHJ5IiksWT1QKCIuL3N1cHBvcnQiKSxxPVAoIi4vb2JqZWN0Iik7ZnVuY3Rpb24gZWUoSixuZSl7dGhpcy5maWxlcz1bXSx0aGlzLmxv'@;
put 'YWRPcHRpb25zPW5lLEomJnRoaXMubG9hZChKKX1lZS5wcm90b3R5cGU9e2NoZWNrU2lnbmF0dXJlOmZ1bmN0aW9uKEope3ZhciBuZT10aGlzLnJlYWRlci5yZWFkU3RyaW5nKDQpO2lmKG5lIT09Sil0aHJvdyBuZXcgRXJyb3IoIkNvcnJ1cHRlZCB6aXAgb3IgYnVnIDogdW5leHBlY3RlZCBz'@;
put 'aWduYXR1cmUgKCIrSy5wcmV0dHkobmUpKyIsIGV4cGVjdGVkICIrSy5wcmV0dHkoSikrIikiKX0scmVhZEJsb2NrRW5kT2ZDZW50cmFsOmZ1bmN0aW9uKCl7dGhpcy5kaXNrTnVtYmVyPXRoaXMucmVhZGVyLnJlYWRJbnQoMiksdGhpcy5kaXNrV2l0aENlbnRyYWxEaXJTdGFydD10aGlzLnJl'@;
put 'YWRlci5yZWFkSW50KDIpLHRoaXMuY2VudHJhbERpclJlY29yZHNPblRoaXNEaXNrPXRoaXMucmVhZGVyLnJlYWRJbnQoMiksdGhpcy5jZW50cmFsRGlyUmVjb3Jkcz10aGlzLnJlYWRlci5yZWFkSW50KDIpLHRoaXMuY2VudHJhbERpclNpemU9dGhpcy5yZWFkZXIucmVhZEludCg0KSx0aGlz'@;
put 'LmNlbnRyYWxEaXJPZmZzZXQ9dGhpcy5yZWFkZXIucmVhZEludCg0KSx0aGlzLnppcENvbW1lbnRMZW5ndGg9dGhpcy5yZWFkZXIucmVhZEludCgyKSx0aGlzLnppcENvbW1lbnQ9dGhpcy5yZWFkZXIucmVhZFN0cmluZyh0aGlzLnppcENvbW1lbnRMZW5ndGgpLHRoaXMuemlwQ29tbWVudD1x'@;
put 'LnV0ZjhkZWNvZGUodGhpcy56aXBDb21tZW50KX0scmVhZEJsb2NrWmlwNjRFbmRPZkNlbnRyYWw6ZnVuY3Rpb24oKXt0aGlzLnppcDY0RW5kT2ZDZW50cmFsU2l6ZT10aGlzLnJlYWRlci5yZWFkSW50KDgpLHRoaXMudmVyc2lvbk1hZGVCeT10aGlzLnJlYWRlci5yZWFkU3RyaW5nKDIpLHRo'@;
put 'aXMudmVyc2lvbk5lZWRlZD10aGlzLnJlYWRlci5yZWFkSW50KDIpLHRoaXMuZGlza051bWJlcj10aGlzLnJlYWRlci5yZWFkSW50KDQpLHRoaXMuZGlza1dpdGhDZW50cmFsRGlyU3RhcnQ9dGhpcy5yZWFkZXIucmVhZEludCg0KSx0aGlzLmNlbnRyYWxEaXJSZWNvcmRzT25UaGlzRGlzaz10'@;
put 'aGlzLnJlYWRlci5yZWFkSW50KDgpLHRoaXMuY2VudHJhbERpclJlY29yZHM9dGhpcy5yZWFkZXIucmVhZEludCg4KSx0aGlzLmNlbnRyYWxEaXJTaXplPXRoaXMucmVhZGVyLnJlYWRJbnQoOCksdGhpcy5jZW50cmFsRGlyT2Zmc2V0PXRoaXMucmVhZGVyLnJlYWRJbnQoOCksdGhpcy56aXA2'@;
put 'NEV4dGVuc2libGVEYXRhPXt9O2Zvcih2YXIgaWUsbGUsbWUsSj10aGlzLnppcDY0RW5kT2ZDZW50cmFsU2l6ZS00NDswPEo7KWllPXRoaXMucmVhZGVyLnJlYWRJbnQoMiksbGU9dGhpcy5yZWFkZXIucmVhZEludCg0KSxtZT10aGlzLnJlYWRlci5yZWFkU3RyaW5nKGxlKSx0aGlzLnppcDY0'@;
put 'RXh0ZW5zaWJsZURhdGFbaWVdPXtpZDppZSxsZW5ndGg6bGUsdmFsdWU6bWV9fSxyZWFkQmxvY2taaXA2NEVuZE9mQ2VudHJhbExvY2F0b3I6ZnVuY3Rpb24oKXtpZih0aGlzLmRpc2tXaXRoWmlwNjRDZW50cmFsRGlyU3RhcnQ9dGhpcy5yZWFkZXIucmVhZEludCg0KSx0aGlzLnJlbGF0aXZl'@;
put 'T2Zmc2V0RW5kT2ZaaXA2NENlbnRyYWxEaXI9dGhpcy5yZWFkZXIucmVhZEludCg4KSx0aGlzLmRpc2tzQ291bnQ9dGhpcy5yZWFkZXIucmVhZEludCg0KSx0aGlzLmRpc2tzQ291bnQ+MSl0aHJvdyBuZXcgRXJyb3IoIk11bHRpLXZvbHVtZXMgemlwIGFyZSBub3Qgc3VwcG9ydGVkIil9LHJl'@;
put 'YWRMb2NhbEZpbGVzOmZ1bmN0aW9uKCl7dmFyIEosbmU7Zm9yKEo9MDtKPHRoaXMuZmlsZXMubGVuZ3RoO0orKyl0aGlzLnJlYWRlci5zZXRJbmRleCgobmU9dGhpcy5maWxlc1tKXSkubG9jYWxIZWFkZXJPZmZzZXQpLHRoaXMuY2hlY2tTaWduYXR1cmUoVS5MT0NBTF9GSUxFX0hFQURFUiks'@;
put 'bmUucmVhZExvY2FsUGFydCh0aGlzLnJlYWRlciksbmUuaGFuZGxlVVRGOCgpfSxyZWFkQ2VudHJhbERpcjpmdW5jdGlvbigpe3ZhciBKO2Zvcih0aGlzLnJlYWRlci5zZXRJbmRleCh0aGlzLmNlbnRyYWxEaXJPZmZzZXQpO3RoaXMucmVhZGVyLnJlYWRTdHJpbmcoNCk9PT1VLkNFTlRSQUxf'@;
put 'RklMRV9IRUFERVI7KShKPW5ldyBXKHt6aXA2NDp0aGlzLnppcDY0fSx0aGlzLmxvYWRPcHRpb25zKSkucmVhZENlbnRyYWxQYXJ0KHRoaXMucmVhZGVyKSx0aGlzLmZpbGVzLnB1c2goSil9LHJlYWRFbmRPZkNlbnRyYWw6ZnVuY3Rpb24oKXt2YXIgSj10aGlzLnJlYWRlci5sYXN0SW5kZXhP'@;
put 'ZlNpZ25hdHVyZShVLkNFTlRSQUxfRElSRUNUT1JZX0VORCk7aWYoLTE9PT1KKXRocm93IG5ldyBFcnJvcigiQ29ycnVwdGVkIHppcCA6IGNhbid0IGZpbmQgZW5kIG9mIGNlbnRyYWwgZGlyZWN0b3J5Iik7aWYodGhpcy5yZWFkZXIuc2V0SW5kZXgoSiksdGhpcy5jaGVja1NpZ25hdHVyZShV'@;
put 'LkNFTlRSQUxfRElSRUNUT1JZX0VORCksdGhpcy5yZWFkQmxvY2tFbmRPZkNlbnRyYWwoKSx0aGlzLmRpc2tOdW1iZXI9PT1LLk1BWF9WQUxVRV8xNkJJVFN8fHRoaXMuZGlza1dpdGhDZW50cmFsRGlyU3RhcnQ9PT1LLk1BWF9WQUxVRV8xNkJJVFN8fHRoaXMuY2VudHJhbERpclJlY29yZHNP'@;
put 'blRoaXNEaXNrPT09Sy5NQVhfVkFMVUVfMTZCSVRTfHx0aGlzLmNlbnRyYWxEaXJSZWNvcmRzPT09Sy5NQVhfVkFMVUVfMTZCSVRTfHx0aGlzLmNlbnRyYWxEaXJTaXplPT09Sy5NQVhfVkFMVUVfMzJCSVRTfHx0aGlzLmNlbnRyYWxEaXJPZmZzZXQ9PT1LLk1BWF9WQUxVRV8zMkJJVFMpe2lm'@;
put 'KHRoaXMuemlwNjQ9ITAsLTE9PT0oSj10aGlzLnJlYWRlci5sYXN0SW5kZXhPZlNpZ25hdHVyZShVLlpJUDY0X0NFTlRSQUxfRElSRUNUT1JZX0xPQ0FUT1IpKSl0aHJvdyBuZXcgRXJyb3IoIkNvcnJ1cHRlZCB6aXAgOiBjYW4ndCBmaW5kIHRoZSBaSVA2NCBlbmQgb2YgY2VudHJhbCBkaXJl'@;
put 'Y3RvcnkgbG9jYXRvciIpO3RoaXMucmVhZGVyLnNldEluZGV4KEopLHRoaXMuY2hlY2tTaWduYXR1cmUoVS5aSVA2NF9DRU5UUkFMX0RJUkVDVE9SWV9MT0NBVE9SKSx0aGlzLnJlYWRCbG9ja1ppcDY0RW5kT2ZDZW50cmFsTG9jYXRvcigpLHRoaXMucmVhZGVyLnNldEluZGV4KHRoaXMucmVs'@;
put 'YXRpdmVPZmZzZXRFbmRPZlppcDY0Q2VudHJhbERpciksdGhpcy5jaGVja1NpZ25hdHVyZShVLlpJUDY0X0NFTlRSQUxfRElSRUNUT1JZX0VORCksdGhpcy5yZWFkQmxvY2taaXA2NEVuZE9mQ2VudHJhbCgpfX0scHJlcGFyZVJlYWRlcjpmdW5jdGlvbihKKXt2YXIgbmU9Sy5nZXRUeXBlT2Yo'@;
put 'Sik7dGhpcy5yZWFkZXI9InN0cmluZyIhPT1uZXx8WS51aW50OGFycmF5PyJub2RlYnVmZmVyIj09PW5lP25ldyBOKEopOm5ldyBMKEsudHJhbnNmb3JtVG8oInVpbnQ4YXJyYXkiLEopKTpuZXcgeihKLHRoaXMubG9hZE9wdGlvbnMub3B0aW1pemVkQmluYXJ5U3RyaW5nKX0sbG9hZDpmdW5j'@;
put 'dGlvbihKKXt0aGlzLnByZXBhcmVSZWFkZXIoSiksdGhpcy5yZWFkRW5kT2ZDZW50cmFsKCksdGhpcy5yZWFkQ2VudHJhbERpcigpLHRoaXMucmVhZExvY2FsRmlsZXMoKX19LEYuZXhwb3J0cz1lZX0seyIuL25vZGVCdWZmZXJSZWFkZXIiOjEyLCIuL29iamVjdCI6MTMsIi4vc2lnbmF0dXJl'@;
put 'IjoxNCwiLi9zdHJpbmdSZWFkZXIiOjE1LCIuL3N1cHBvcnQiOjE3LCIuL3VpbnQ4QXJyYXlSZWFkZXIiOjE4LCIuL3V0aWxzIjoyMSwiLi96aXBFbnRyeSI6MjN9XSwyMzpbZnVuY3Rpb24oUCxGLE8peyJ1c2Ugc3RyaWN0Ijt2YXIgej1QKCIuL3N0cmluZ1JlYWRlciIpLE49UCgiLi91dGls'@;
put 'cyIpLEw9UCgiLi9jb21wcmVzc2VkT2JqZWN0IiksSz1QKCIuL29iamVjdCIpO2Z1bmN0aW9uIFUoVyxZKXt0aGlzLm9wdGlvbnM9Vyx0aGlzLmxvYWRPcHRpb25zPVl9VS5wcm90b3R5cGU9e2lzRW5jcnlwdGVkOmZ1bmN0aW9uKCl7cmV0dXJuISgxJn50aGlzLmJpdEZsYWcpfSx1c2VVVEY4'@;
put 'OmZ1bmN0aW9uKCl7cmV0dXJuISgyMDQ4Jn50aGlzLmJpdEZsYWcpfSxwcmVwYXJlQ29tcHJlc3NlZENvbnRlbnQ6ZnVuY3Rpb24oVyxZLHEpe3JldHVybiBmdW5jdGlvbigpe3ZhciBlZT1XLmluZGV4O1cuc2V0SW5kZXgoWSk7dmFyIEo9Vy5yZWFkRGF0YShxKTtyZXR1cm4gVy5zZXRJbmRl'@;
put 'eChlZSksSn19LHByZXBhcmVDb250ZW50OmZ1bmN0aW9uKFcsWSxxLGVlLEope3JldHVybiBmdW5jdGlvbigpe3ZhciBuZT1OLnRyYW5zZm9ybVRvKGVlLnVuY29tcHJlc3NJbnB1dFR5cGUsdGhpcy5nZXRDb21wcmVzc2VkQ29udGVudCgpKSxpZT1lZS51bmNvbXByZXNzKG5lKTtpZihpZS5s'@;
put 'ZW5ndGghPT1KKXRocm93IG5ldyBFcnJvcigiQnVnIDogdW5jb21wcmVzc2VkIGRhdGEgc2l6ZSBtaXNtYXRjaCIpO3JldHVybiBpZX19LHJlYWRMb2NhbFBhcnQ6ZnVuY3Rpb24oVyl7dmFyIFkscTtpZihXLnNraXAoMjIpLHRoaXMuZmlsZU5hbWVMZW5ndGg9Vy5yZWFkSW50KDIpLHE9Vy5y'@;
put 'ZWFkSW50KDIpLHRoaXMuZmlsZU5hbWU9Vy5yZWFkU3RyaW5nKHRoaXMuZmlsZU5hbWVMZW5ndGgpLFcuc2tpcChxKSwtMT09dGhpcy5jb21wcmVzc2VkU2l6ZXx8LTE9PXRoaXMudW5jb21wcmVzc2VkU2l6ZSl0aHJvdyBuZXcgRXJyb3IoIkJ1ZyBvciBjb3JydXB0ZWQgemlwIDogZGlkbid0'@;
put 'IGdldCBlbm91Z2ggaW5mb3JtYXRpb25zIGZyb20gdGhlIGNlbnRyYWwgZGlyZWN0b3J5IChjb21wcmVzc2VkU2l6ZSA9PSAtMSB8fCB1bmNvbXByZXNzZWRTaXplID09IC0xKSIpO2lmKG51bGw9PT0oWT1OLmZpbmRDb21wcmVzc2lvbih0aGlzLmNvbXByZXNzaW9uTWV0aG9kKSkpdGhyb3cg'@;
put 'bmV3IEVycm9yKCJDb3JydXB0ZWQgemlwIDogY29tcHJlc3Npb24gIitOLnByZXR0eSh0aGlzLmNvbXByZXNzaW9uTWV0aG9kKSsiIHVua25vd24gKGlubmVyIGZpbGUgOiAiK3RoaXMuZmlsZU5hbWUrIikiKTtpZih0aGlzLmRlY29tcHJlc3NlZD1uZXcgTCx0aGlzLmRlY29tcHJlc3NlZC5j'@;
put 'b21wcmVzc2VkU2l6ZT10aGlzLmNvbXByZXNzZWRTaXplLHRoaXMuZGVjb21wcmVzc2VkLnVuY29tcHJlc3NlZFNpemU9dGhpcy51bmNvbXByZXNzZWRTaXplLHRoaXMuZGVjb21wcmVzc2VkLmNyYzMyPXRoaXMuY3JjMzIsdGhpcy5kZWNvbXByZXNzZWQuY29tcHJlc3Npb25NZXRob2Q9dGhp'@;
put 'cy5jb21wcmVzc2lvbk1ldGhvZCx0aGlzLmRlY29tcHJlc3NlZC5nZXRDb21wcmVzc2VkQ29udGVudD10aGlzLnByZXBhcmVDb21wcmVzc2VkQ29udGVudChXLFcuaW5kZXgsdGhpcy5jb21wcmVzc2VkU2l6ZSxZKSx0aGlzLmRlY29tcHJlc3NlZC5nZXRDb250ZW50PXRoaXMucHJlcGFyZUNv'@;
put 'bnRlbnQoVyxXLmluZGV4LHRoaXMuY29tcHJlc3NlZFNpemUsWSx0aGlzLnVuY29tcHJlc3NlZFNpemUpLHRoaXMubG9hZE9wdGlvbnMuY2hlY2tDUkMzMiYmKHRoaXMuZGVjb21wcmVzc2VkPU4udHJhbnNmb3JtVG8oInN0cmluZyIsdGhpcy5kZWNvbXByZXNzZWQuZ2V0Q29udGVudCgpKSxL'@;
put 'LmNyYzMyKHRoaXMuZGVjb21wcmVzc2VkKSE9PXRoaXMuY3JjMzIpKXRocm93IG5ldyBFcnJvcigiQ29ycnVwdGVkIHppcCA6IENSQzMyIG1pc21hdGNoIil9LHJlYWRDZW50cmFsUGFydDpmdW5jdGlvbihXKXtpZih0aGlzLnZlcnNpb25NYWRlQnk9Vy5yZWFkU3RyaW5nKDIpLHRoaXMudmVy'@;
put 'c2lvbk5lZWRlZD1XLnJlYWRJbnQoMiksdGhpcy5iaXRGbGFnPVcucmVhZEludCgyKSx0aGlzLmNvbXByZXNzaW9uTWV0aG9kPVcucmVhZFN0cmluZygyKSx0aGlzLmRhdGU9Vy5yZWFkRGF0ZSgpLHRoaXMuY3JjMzI9Vy5yZWFkSW50KDQpLHRoaXMuY29tcHJlc3NlZFNpemU9Vy5yZWFkSW50'@;
put 'KDQpLHRoaXMudW5jb21wcmVzc2VkU2l6ZT1XLnJlYWRJbnQoNCksdGhpcy5maWxlTmFtZUxlbmd0aD1XLnJlYWRJbnQoMiksdGhpcy5leHRyYUZpZWxkc0xlbmd0aD1XLnJlYWRJbnQoMiksdGhpcy5maWxlQ29tbWVudExlbmd0aD1XLnJlYWRJbnQoMiksdGhpcy5kaXNrTnVtYmVyU3RhcnQ9'@;
put 'Vy5yZWFkSW50KDIpLHRoaXMuaW50ZXJuYWxGaWxlQXR0cmlidXRlcz1XLnJlYWRJbnQoMiksdGhpcy5leHRlcm5hbEZpbGVBdHRyaWJ1dGVzPVcucmVhZEludCg0KSx0aGlzLmxvY2FsSGVhZGVyT2Zmc2V0PVcucmVhZEludCg0KSx0aGlzLmlzRW5jcnlwdGVkKCkpdGhyb3cgbmV3IEVycm9y'@;
put 'KCJFbmNyeXB0ZWQgemlwIGFyZSBub3Qgc3VwcG9ydGVkIik7dGhpcy5maWxlTmFtZT1XLnJlYWRTdHJpbmcodGhpcy5maWxlTmFtZUxlbmd0aCksdGhpcy5yZWFkRXh0cmFGaWVsZHMoVyksdGhpcy5wYXJzZVpJUDY0RXh0cmFGaWVsZChXKSx0aGlzLmZpbGVDb21tZW50PVcucmVhZFN0cmlu'@;
put 'Zyh0aGlzLmZpbGVDb21tZW50TGVuZ3RoKSx0aGlzLmRpcj0hISgxNiZ0aGlzLmV4dGVybmFsRmlsZUF0dHJpYnV0ZXMpfSxwYXJzZVpJUDY0RXh0cmFGaWVsZDpmdW5jdGlvbihXKXtpZih0aGlzLmV4dHJhRmllbGRzWzFdKXt2YXIgWT1uZXcgeih0aGlzLmV4dHJhRmllbGRzWzFdLnZhbHVl'@;
put 'KTt0aGlzLnVuY29tcHJlc3NlZFNpemU9PT1OLk1BWF9WQUxVRV8zMkJJVFMmJih0aGlzLnVuY29tcHJlc3NlZFNpemU9WS5yZWFkSW50KDgpKSx0aGlzLmNvbXByZXNzZWRTaXplPT09Ti5NQVhfVkFMVUVfMzJCSVRTJiYodGhpcy5jb21wcmVzc2VkU2l6ZT1ZLnJlYWRJbnQoOCkpLHRoaXMu'@;
put 'bG9jYWxIZWFkZXJPZmZzZXQ9PT1OLk1BWF9WQUxVRV8zMkJJVFMmJih0aGlzLmxvY2FsSGVhZGVyT2Zmc2V0PVkucmVhZEludCg4KSksdGhpcy5kaXNrTnVtYmVyU3RhcnQ9PT1OLk1BWF9WQUxVRV8zMkJJVFMmJih0aGlzLmRpc2tOdW1iZXJTdGFydD1ZLnJlYWRJbnQoNCkpfX0scmVhZEV4'@;
put 'dHJhRmllbGRzOmZ1bmN0aW9uKFcpe3ZhciBxLGVlLEosWT1XLmluZGV4O2Zvcih0aGlzLmV4dHJhRmllbGRzPXRoaXMuZXh0cmFGaWVsZHN8fHt9O1cuaW5kZXg8WSt0aGlzLmV4dHJhRmllbGRzTGVuZ3RoOylxPVcucmVhZEludCgyKSxlZT1XLnJlYWRJbnQoMiksSj1XLnJlYWRTdHJpbmco'@;
put 'ZWUpLHRoaXMuZXh0cmFGaWVsZHNbcV09e2lkOnEsbGVuZ3RoOmVlLHZhbHVlOkp9fSxoYW5kbGVVVEY4OmZ1bmN0aW9uKCl7aWYodGhpcy51c2VVVEY4KCkpdGhpcy5maWxlTmFtZT1LLnV0ZjhkZWNvZGUodGhpcy5maWxlTmFtZSksdGhpcy5maWxlQ29tbWVudD1LLnV0ZjhkZWNvZGUodGhp'@;
put 'cy5maWxlQ29tbWVudCk7ZWxzZXt2YXIgVz10aGlzLmZpbmRFeHRyYUZpZWxkVW5pY29kZVBhdGgoKTtudWxsIT09VyYmKHRoaXMuZmlsZU5hbWU9Vyk7dmFyIFk9dGhpcy5maW5kRXh0cmFGaWVsZFVuaWNvZGVDb21tZW50KCk7bnVsbCE9PVkmJih0aGlzLmZpbGVDb21tZW50PVkpfX0sZmlu'@;
put 'ZEV4dHJhRmllbGRVbmljb2RlUGF0aDpmdW5jdGlvbigpe3ZhciBXPXRoaXMuZXh0cmFGaWVsZHNbMjg3ODldO2lmKFcpe3ZhciBZPW5ldyB6KFcudmFsdWUpO3JldHVybiAxIT09WS5yZWFkSW50KDEpfHxLLmNyYzMyKHRoaXMuZmlsZU5hbWUpIT09WS5yZWFkSW50KDQpP251bGw6Sy51dGY4'@;
put 'ZGVjb2RlKFkucmVhZFN0cmluZyhXLmxlbmd0aC01KSl9cmV0dXJuIG51bGx9LGZpbmRFeHRyYUZpZWxkVW5pY29kZUNvbW1lbnQ6ZnVuY3Rpb24oKXt2YXIgVz10aGlzLmV4dHJhRmllbGRzWzI1NDYxXTtpZihXKXt2YXIgWT1uZXcgeihXLnZhbHVlKTtyZXR1cm4gMSE9PVkucmVhZEludCgx'@;
put 'KXx8Sy5jcmMzMih0aGlzLmZpbGVDb21tZW50KSE9PVkucmVhZEludCg0KT9udWxsOksudXRmOGRlY29kZShZLnJlYWRTdHJpbmcoVy5sZW5ndGgtNSkpfXJldHVybiBudWxsfX0sRi5leHBvcnRzPVV9LHsiLi9jb21wcmVzc2VkT2JqZWN0IjoyLCIuL29iamVjdCI6MTMsIi4vc3RyaW5nUmVh'@;
put 'ZGVyIjoxNSwiLi91dGlscyI6MjF9XSwyNDpbZnVuY3Rpb24oUCxGLE8peyJ1c2Ugc3RyaWN0Ijt2YXIgVT17fTsoMCxQKCIuL2xpYi91dGlscy9jb21tb24iKS5hc3NpZ24pKFUsUCgiLi9saWIvZGVmbGF0ZSIpLFAoIi4vbGliL2luZmxhdGUiKSxQKCIuL2xpYi96bGliL2NvbnN0YW50cyIp'@;
put 'KSxGLmV4cG9ydHM9VX0seyIuL2xpYi9kZWZsYXRlIjoyNSwiLi9saWIvaW5mbGF0ZSI6MjYsIi4vbGliL3V0aWxzL2NvbW1vbiI6MjcsIi4vbGliL3psaWIvY29uc3RhbnRzIjozMH1dLDI1OltmdW5jdGlvbihQLEYsTyl7InVzZSBzdHJpY3QiO3ZhciB6PVAoIi4vemxpYi9kZWZsYXRlLmpz'@;
put 'IiksTj1QKCIuL3V0aWxzL2NvbW1vbiIpLEw9UCgiLi91dGlscy9zdHJpbmdzIiksSz1QKCIuL3psaWIvbWVzc2FnZXMiKSxVPVAoIi4vemxpYi96c3RyZWFtIiksbGU9ZnVuY3Rpb24oU2Upe3RoaXMub3B0aW9ucz1OLmFzc2lnbih7bGV2ZWw6LTEsbWV0aG9kOjgsY2h1bmtTaXplOjE2Mzg0'@;
put 'LHdpbmRvd0JpdHM6MTUsbWVtTGV2ZWw6OCxzdHJhdGVneTowLHRvOiIifSxTZXx8e30pO3ZhciBqZT10aGlzLm9wdGlvbnM7amUucmF3JiZqZS53aW5kb3dCaXRzPjA/amUud2luZG93Qml0cz0tamUud2luZG93Qml0czpqZS5nemlwJiZqZS53aW5kb3dCaXRzPjAmJmplLndpbmRvd0JpdHM8'@;
put 'MTYmJihqZS53aW5kb3dCaXRzKz0xNiksdGhpcy5lcnI9MCx0aGlzLm1zZz0iIix0aGlzLmVuZGVkPSExLHRoaXMuY2h1bmtzPVtdLHRoaXMuc3RybT1uZXcgVSx0aGlzLnN0cm0uYXZhaWxfb3V0PTA7dmFyIFY9ei5kZWZsYXRlSW5pdDIodGhpcy5zdHJtLGplLmxldmVsLGplLm1ldGhvZCxq'@;
put 'ZS53aW5kb3dCaXRzLGplLm1lbUxldmVsLGplLnN0cmF0ZWd5KTtpZigwIT09Vil0aHJvdyBuZXcgRXJyb3IoS1tWXSk7amUuaGVhZGVyJiZ6LmRlZmxhdGVTZXRIZWFkZXIodGhpcy5zdHJtLGplLmhlYWRlcil9O2Z1bmN0aW9uIG1lKFNlLGplKXt2YXIgVj1uZXcgbGUoamUpO2lmKFYucHVz'@;
put 'aChTZSwhMCksVi5lcnIpdGhyb3cgVi5tc2c7cmV0dXJuIFYucmVzdWx0fWxlLnByb3RvdHlwZS5wdXNoPWZ1bmN0aW9uKFNlLGplKXt2YXIgYix4LFY9dGhpcy5zdHJtLHA9dGhpcy5vcHRpb25zLmNodW5rU2l6ZTtpZih0aGlzLmVuZGVkKXJldHVybiExO3g9amU9PT1+fmplP2plOiEwPT09'@;
put 'amU/NDowLFYuaW5wdXQ9InN0cmluZyI9PXR5cGVvZiBTZT9MLnN0cmluZzJidWYoU2UpOlNlLFYubmV4dF9pbj0wLFYuYXZhaWxfaW49Vi5pbnB1dC5sZW5ndGg7ZG97aWYoMD09PVYuYXZhaWxfb3V0JiYoVi5vdXRwdXQ9bmV3IE4uQnVmOChwKSxWLm5leHRfb3V0PTAsVi5hdmFpbF9vdXQ9'@;
put 'cCksMSE9PShiPXouZGVmbGF0ZShWLHgpKSYmMCE9PWIpcmV0dXJuIHRoaXMub25FbmQoYiksdGhpcy5lbmRlZD0hMCwhMTsoMD09PVYuYXZhaWxfb3V0fHwwPT09Vi5hdmFpbF9pbiYmND09PXgpJiZ0aGlzLm9uRGF0YSgic3RyaW5nIj09PXRoaXMub3B0aW9ucy50bz9MLmJ1ZjJiaW5zdHJp'@;
put 'bmcoTi5zaHJpbmtCdWYoVi5vdXRwdXQsVi5uZXh0X291dCkpOk4uc2hyaW5rQnVmKFYub3V0cHV0LFYubmV4dF9vdXQpKX13aGlsZSgoVi5hdmFpbF9pbj4wfHwwPT09Vi5hdmFpbF9vdXQpJiYxIT09Yik7cmV0dXJuIDQhPT14fHwoYj16LmRlZmxhdGVFbmQodGhpcy5zdHJtKSx0aGlzLm9u'@;
put 'RW5kKGIpLHRoaXMuZW5kZWQ9ITAsMD09PWIpfSxsZS5wcm90b3R5cGUub25EYXRhPWZ1bmN0aW9uKFNlKXt0aGlzLmNodW5rcy5wdXNoKFNlKX0sbGUucHJvdG90eXBlLm9uRW5kPWZ1bmN0aW9uKFNlKXswPT09U2UmJih0aGlzLnJlc3VsdD0ic3RyaW5nIj09PXRoaXMub3B0aW9ucy50bz90'@;
put 'aGlzLmNodW5rcy5qb2luKCIiKTpOLmZsYXR0ZW5DaHVua3ModGhpcy5jaHVua3MpKSx0aGlzLmNodW5rcz1bXSx0aGlzLmVycj1TZSx0aGlzLm1zZz10aGlzLnN0cm0ubXNnfSxPLkRlZmxhdGU9bGUsTy5kZWZsYXRlPW1lLE8uZGVmbGF0ZVJhdz1mdW5jdGlvbiBfZShTZSxqZSl7cmV0dXJu'@;
put 'KGplPWplfHx7fSkucmF3PSEwLG1lKFNlLGplKX0sTy5nemlwPWZ1bmN0aW9uIFRlKFNlLGplKXtyZXR1cm4oamU9amV8fHt9KS5nemlwPSEwLG1lKFNlLGplKX19LHsiLi91dGlscy9jb21tb24iOjI3LCIuL3V0aWxzL3N0cmluZ3MiOjI4LCIuL3psaWIvZGVmbGF0ZS5qcyI6MzIsIi4vemxp'@;
put 'Yi9tZXNzYWdlcyI6MzcsIi4vemxpYi96c3RyZWFtIjozOX1dLDI2OltmdW5jdGlvbihQLEYsTyl7InVzZSBzdHJpY3QiO3ZhciB6PVAoIi4vemxpYi9pbmZsYXRlLmpzIiksTj1QKCIuL3V0aWxzL2NvbW1vbiIpLEw9UCgiLi91dGlscy9zdHJpbmdzIiksSz1QKCIuL3psaWIvY29uc3RhbnRz'@;
put 'IiksVT1QKCIuL3psaWIvbWVzc2FnZXMiKSxXPVAoIi4vemxpYi96c3RyZWFtIiksWT1QKCIuL3psaWIvZ3poZWFkZXIiKSxxPWZ1bmN0aW9uKG5lKXt0aGlzLm9wdGlvbnM9Ti5hc3NpZ24oe2NodW5rU2l6ZToxNjM4NCx3aW5kb3dCaXRzOjAsdG86IiJ9LG5lfHx7fSk7dmFyIGllPXRoaXMu'@;
put 'b3B0aW9ucztpZS5yYXcmJmllLndpbmRvd0JpdHM+PTAmJmllLndpbmRvd0JpdHM8MTYmJihpZS53aW5kb3dCaXRzPS1pZS53aW5kb3dCaXRzLDA9PT1pZS53aW5kb3dCaXRzJiYoaWUud2luZG93Qml0cz0tMTUpKSxpZS53aW5kb3dCaXRzPj0wJiZpZS53aW5kb3dCaXRzPDE2JiYhKG5lJiZu'@;
put 'ZS53aW5kb3dCaXRzKSYmKGllLndpbmRvd0JpdHMrPTMyKSxpZS53aW5kb3dCaXRzPjE1JiZpZS53aW5kb3dCaXRzPDQ4JiYoMTUmaWUud2luZG93Qml0c3x8KGllLndpbmRvd0JpdHN8PTE1KSksdGhpcy5lcnI9MCx0aGlzLm1zZz0iIix0aGlzLmVuZGVkPSExLHRoaXMuY2h1bmtzPVtdLHRo'@;
put 'aXMuc3RybT1uZXcgVyx0aGlzLnN0cm0uYXZhaWxfb3V0PTA7dmFyIGxlPXouaW5mbGF0ZUluaXQyKHRoaXMuc3RybSxpZS53aW5kb3dCaXRzKTtpZihsZSE9PUsuWl9PSyl0aHJvdyBuZXcgRXJyb3IoVVtsZV0pO3RoaXMuaGVhZGVyPW5ldyBZLHouaW5mbGF0ZUdldEhlYWRlcih0aGlzLnN0'@;
put 'cm0sdGhpcy5oZWFkZXIpfTtmdW5jdGlvbiBlZShuZSxpZSl7dmFyIGxlPW5ldyBxKGllKTtpZihsZS5wdXNoKG5lLCEwKSxsZS5lcnIpdGhyb3cgbGUubXNnO3JldHVybiBsZS5yZXN1bHR9cS5wcm90b3R5cGUucHVzaD1mdW5jdGlvbihuZSxpZSl7dmFyIF9lLFRlLFNlLGplLFYsbGU9dGhp'@;
put 'cy5zdHJtLG1lPXRoaXMub3B0aW9ucy5jaHVua1NpemU7aWYodGhpcy5lbmRlZClyZXR1cm4hMTtUZT1pZT09PX5+aWU/aWU6ITA9PT1pZT9LLlpfRklOSVNIOksuWl9OT19GTFVTSCxsZS5pbnB1dD0ic3RyaW5nIj09dHlwZW9mIG5lP0wuYmluc3RyaW5nMmJ1ZihuZSk6bmUsbGUubmV4dF9p'@;
put 'bj0wLGxlLmF2YWlsX2luPWxlLmlucHV0Lmxlbmd0aDtkb3tpZigwPT09bGUuYXZhaWxfb3V0JiYobGUub3V0cHV0PW5ldyBOLkJ1ZjgobWUpLGxlLm5leHRfb3V0PTAsbGUuYXZhaWxfb3V0PW1lKSwoX2U9ei5pbmZsYXRlKGxlLEsuWl9OT19GTFVTSCkpIT09Sy5aX1NUUkVBTV9FTkQmJl9l'@;
put 'IT09Sy5aX09LKXJldHVybiB0aGlzLm9uRW5kKF9lKSx0aGlzLmVuZGVkPSEwLCExO2xlLm5leHRfb3V0JiYoMD09PWxlLmF2YWlsX291dHx8X2U9PT1LLlpfU1RSRUFNX0VORHx8MD09PWxlLmF2YWlsX2luJiZUZT09PUsuWl9GSU5JU0gpJiYoInN0cmluZyI9PT10aGlzLm9wdGlvbnMudG8/'@;
put 'KFNlPUwudXRmOGJvcmRlcihsZS5vdXRwdXQsbGUubmV4dF9vdXQpLGplPWxlLm5leHRfb3V0LVNlLFY9TC5idWYyc3RyaW5nKGxlLm91dHB1dCxTZSksbGUubmV4dF9vdXQ9amUsbGUuYXZhaWxfb3V0PW1lLWplLGplJiZOLmFycmF5U2V0KGxlLm91dHB1dCxsZS5vdXRwdXQsU2UsamUsMCks'@;
put 'dGhpcy5vbkRhdGEoVikpOnRoaXMub25EYXRhKE4uc2hyaW5rQnVmKGxlLm91dHB1dCxsZS5uZXh0X291dCkpKX13aGlsZShsZS5hdmFpbF9pbj4wJiZfZSE9PUsuWl9TVFJFQU1fRU5EKTtyZXR1cm4gX2U9PT1LLlpfU1RSRUFNX0VORCYmKFRlPUsuWl9GSU5JU0gpLFRlIT09Sy5aX0ZJTklT'@;
put 'SHx8KF9lPXouaW5mbGF0ZUVuZCh0aGlzLnN0cm0pLHRoaXMub25FbmQoX2UpLHRoaXMuZW5kZWQ9ITAsX2U9PT1LLlpfT0spfSxxLnByb3RvdHlwZS5vbkRhdGE9ZnVuY3Rpb24obmUpe3RoaXMuY2h1bmtzLnB1c2gobmUpfSxxLnByb3RvdHlwZS5vbkVuZD1mdW5jdGlvbihuZSl7bmU9PT1L'@;
put 'LlpfT0smJih0aGlzLnJlc3VsdD0ic3RyaW5nIj09PXRoaXMub3B0aW9ucy50bz90aGlzLmNodW5rcy5qb2luKCIiKTpOLmZsYXR0ZW5DaHVua3ModGhpcy5jaHVua3MpKSx0aGlzLmNodW5rcz1bXSx0aGlzLmVycj1uZSx0aGlzLm1zZz10aGlzLnN0cm0ubXNnfSxPLkluZmxhdGU9cSxPLmlu'@;
put 'ZmxhdGU9ZWUsTy5pbmZsYXRlUmF3PWZ1bmN0aW9uIEoobmUsaWUpe3JldHVybihpZT1pZXx8e30pLnJhdz0hMCxlZShuZSxpZSl9LE8udW5nemlwPWVlfSx7Ii4vdXRpbHMvY29tbW9uIjoyNywiLi91dGlscy9zdHJpbmdzIjoyOCwiLi96bGliL2NvbnN0YW50cyI6MzAsIi4vemxpYi9nemhl'@;
put 'YWRlciI6MzMsIi4vemxpYi9pbmZsYXRlLmpzIjozNSwiLi96bGliL21lc3NhZ2VzIjozNywiLi96bGliL3pzdHJlYW0iOjM5fV0sMjc6W2Z1bmN0aW9uKFAsRixPKXsidXNlIHN0cmljdCI7dmFyIHo9dHlwZW9mIFVpbnQ4QXJyYXk8InUiJiZ0eXBlb2YgVWludDE2QXJyYXk8InUiJiZ0eXBl'@;
put 'b2YgSW50MzJBcnJheTwidSI7Ty5hc3NpZ249ZnVuY3Rpb24oSyl7Zm9yKHZhciBVPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKTtVLmxlbmd0aDspe3ZhciBXPVUuc2hpZnQoKTtpZihXKXtpZigib2JqZWN0IiE9dHlwZW9mIFcpdGhyb3cgbmV3IFR5cGVFcnJvcihX'@;
put 'KyJtdXN0IGJlIG5vbi1vYmplY3QiKTtmb3IodmFyIFkgaW4gVylXLmhhc093blByb3BlcnR5KFkpJiYoS1tZXT1XW1ldKX19cmV0dXJuIEt9LE8uc2hyaW5rQnVmPWZ1bmN0aW9uKEssVSl7cmV0dXJuIEsubGVuZ3RoPT09VT9LOksuc3ViYXJyYXk/Sy5zdWJhcnJheSgwLFUpOihLLmxlbmd0'@;
put 'aD1VLEspfTt2YXIgTj17YXJyYXlTZXQ6ZnVuY3Rpb24oSyxVLFcsWSxxKXtpZihVLnN1YmFycmF5JiZLLnN1YmFycmF5KUsuc2V0KFUuc3ViYXJyYXkoVyxXK1kpLHEpO2Vsc2UgZm9yKHZhciBlZT0wO2VlPFk7ZWUrKylLW3ErZWVdPVVbVytlZV19LGZsYXR0ZW5DaHVua3M6ZnVuY3Rpb24o'@;
put 'Syl7dmFyIFUsVyxZLHEsZWUsSjtmb3IoWT0wLFU9MCxXPUsubGVuZ3RoO1U8VztVKyspWSs9S1tVXS5sZW5ndGg7Zm9yKEo9bmV3IFVpbnQ4QXJyYXkoWSkscT0wLFU9MCxXPUsubGVuZ3RoO1U8VztVKyspSi5zZXQoZWU9S1tVXSxxKSxxKz1lZS5sZW5ndGg7cmV0dXJuIEp9fSxMPXthcnJh'@;
put 'eVNldDpmdW5jdGlvbihLLFUsVyxZLHEpe2Zvcih2YXIgZWU9MDtlZTxZO2VlKyspS1txK2VlXT1VW1crZWVdfSxmbGF0dGVuQ2h1bmtzOmZ1bmN0aW9uKEspe3JldHVybltdLmNvbmNhdC5hcHBseShbXSxLKX19O08uc2V0VHlwZWQ9ZnVuY3Rpb24oSyl7Sz8oTy5CdWY4PVVpbnQ4QXJyYXks'@;
put 'Ty5CdWYxNj1VaW50MTZBcnJheSxPLkJ1ZjMyPUludDMyQXJyYXksTy5hc3NpZ24oTyxOKSk6KE8uQnVmOD1BcnJheSxPLkJ1ZjE2PUFycmF5LE8uQnVmMzI9QXJyYXksTy5hc3NpZ24oTyxMKSl9LE8uc2V0VHlwZWQoeil9LHt9XSwyODpbZnVuY3Rpb24oUCxGLE8peyJ1c2Ugc3RyaWN0Ijt2'@;
put 'YXIgej1QKCIuL2NvbW1vbiIpLE49ITAsTD0hMDt0cnl7U3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLFswXSl9Y2F0Y2h7Tj0hMX10cnl7U3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLG5ldyBVaW50OEFycmF5KDEpKX1jYXRjaHtMPSExfWZvcih2YXIgSz1uZXcgei5CdWY4'@;
put 'KDI1NiksVT0wO1U8MjU2O1UrKylLW1VdPVU+PTI1Mj82OlU+PTI0OD81OlU+PTI0MD80OlU+PTIyND8zOlU+PTE5Mj8yOjE7ZnVuY3Rpb24gVyhZLHEpe2lmKHE8NjU1MzcmJihZLnN1YmFycmF5JiZMfHwhWS5zdWJhcnJheSYmTikpcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHko'@;
put 'bnVsbCx6LnNocmlua0J1ZihZLHEpKTtmb3IodmFyIGVlPSIiLEo9MDtKPHE7SisrKWVlKz1TdHJpbmcuZnJvbUNoYXJDb2RlKFlbSl0pO3JldHVybiBlZX1LWzI1NF09S1syNTRdPTEsTy5zdHJpbmcyYnVmPWZ1bmN0aW9uKFkpe3ZhciBxLGVlLEosbmUsaWUsbGU9WS5sZW5ndGgsbWU9MDtm'@;
put 'b3IobmU9MDtuZTxsZTtuZSsrKTU1Mjk2PT0oNjQ1MTImKGVlPVkuY2hhckNvZGVBdChuZSkpKSYmbmUrMTxsZSYmNTYzMjA9PSg2NDUxMiYoSj1ZLmNoYXJDb2RlQXQobmUrMSkpKSYmKGVlPTY1NTM2KyhlZS01NTI5Njw8MTApKyhKLTU2MzIwKSxuZSsrKSxtZSs9ZWU8MTI4PzE6ZWU8MjA0'@;
put 'OD8yOmVlPDY1NTM2PzM6NDtmb3IocT1uZXcgei5CdWY4KG1lKSxpZT0wLG5lPTA7aWU8bWU7bmUrKyk1NTI5Nj09KDY0NTEyJihlZT1ZLmNoYXJDb2RlQXQobmUpKSkmJm5lKzE8bGUmJjU2MzIwPT0oNjQ1MTImKEo9WS5jaGFyQ29kZUF0KG5lKzEpKSkmJihlZT02NTUzNisoZWUtNTUyOTY8'@;
put 'PDEwKSsoSi01NjMyMCksbmUrKyksZWU8MTI4P3FbaWUrK109ZWU6ZWU8MjA0OD8ocVtpZSsrXT0xOTJ8ZWU+Pj42LHFbaWUrK109MTI4fDYzJmVlKTplZTw2NTUzNj8ocVtpZSsrXT0yMjR8ZWU+Pj4xMixxW2llKytdPTEyOHxlZT4+PjYmNjMscVtpZSsrXT0xMjh8NjMmZWUpOihxW2llKytd'@;
put 'PTI0MHxlZT4+PjE4LHFbaWUrK109MTI4fGVlPj4+MTImNjMscVtpZSsrXT0xMjh8ZWU+Pj42JjYzLHFbaWUrK109MTI4fDYzJmVlKTtyZXR1cm4gcX0sTy5idWYyYmluc3RyaW5nPWZ1bmN0aW9uKFkpe3JldHVybiBXKFksWS5sZW5ndGgpfSxPLmJpbnN0cmluZzJidWY9ZnVuY3Rpb24oWSl7'@;
put 'Zm9yKHZhciBxPW5ldyB6LkJ1ZjgoWS5sZW5ndGgpLGVlPTAsSj1xLmxlbmd0aDtlZTxKO2VlKyspcVtlZV09WS5jaGFyQ29kZUF0KGVlKTtyZXR1cm4gcX0sTy5idWYyc3RyaW5nPWZ1bmN0aW9uKFkscSl7dmFyIGVlLEosbmUsaWUsbGU9cXx8WS5sZW5ndGgsbWU9bmV3IEFycmF5KDIqbGUp'@;
put 'O2ZvcihKPTAsZWU9MDtlZTxsZTspaWYoKG5lPVlbZWUrK10pPDEyOCltZVtKKytdPW5lO2Vsc2UgaWYoKGllPUtbbmVdKT40KW1lW0orK109NjU1MzMsZWUrPWllLTE7ZWxzZXtmb3IobmUmPTI9PT1pZT8zMTozPT09aWU/MTU6NztpZT4xJiZlZTxsZTspbmU9bmU8PDZ8NjMmWVtlZSsrXSxp'@;
put 'ZS0tO2llPjE/bWVbSisrXT02NTUzMzpuZTw2NTUzNj9tZVtKKytdPW5lOihtZVtKKytdPTU1Mjk2fChuZS09NjU1MzYpPj4xMCYxMDIzLG1lW0orK109NTYzMjB8MTAyMyZuZSl9cmV0dXJuIFcobWUsSil9LE8udXRmOGJvcmRlcj1mdW5jdGlvbihZLHEpe3ZhciBlZTtmb3IoKHE9cXx8WS5s'@;
put 'ZW5ndGgpPlkubGVuZ3RoJiYocT1ZLmxlbmd0aCksZWU9cS0xO2VlPj0wJiYxMjg9PSgxOTImWVtlZV0pOyllZS0tO3JldHVybiBlZTwwfHwwPT09ZWU/cTplZStLW1lbZWVdXT5xP2VlOnF9fSx7Ii4vY29tbW9uIjoyN31dLDI5OltmdW5jdGlvbihQLEYsTyl7InVzZSBzdHJpY3QiO0YuZXhw'@;
put 'b3J0cz1mdW5jdGlvbiB6KE4sTCxLLFUpe2Zvcih2YXIgVz02NTUzNSZOLFk9Tj4+PjE2JjY1NTM1LHE9MDswIT09Szspe0stPXE9Sz4yZTM/MmUzOks7ZG97WT1ZKyhXPVcrTFtVKytdfDApfDB9d2hpbGUoLS1xKTtXJT02NTUyMSxZJT02NTUyMX1yZXR1cm4gV3xZPDwxNn19LHt9XSwzMDpb'@;
put 'ZnVuY3Rpb24oUCxGLE8pe0YuZXhwb3J0cz17Wl9OT19GTFVTSDowLFpfUEFSVElBTF9GTFVTSDoxLFpfU1lOQ19GTFVTSDoyLFpfRlVMTF9GTFVTSDozLFpfRklOSVNIOjQsWl9CTE9DSzo1LFpfVFJFRVM6NixaX09LOjAsWl9TVFJFQU1fRU5EOjEsWl9ORUVEX0RJQ1Q6MixaX0VSUk5POi0x'@;
put 'LFpfU1RSRUFNX0VSUk9SOi0yLFpfREFUQV9FUlJPUjotMyxaX0JVRl9FUlJPUjotNSxaX05PX0NPTVBSRVNTSU9OOjAsWl9CRVNUX1NQRUVEOjEsWl9CRVNUX0NPTVBSRVNTSU9OOjksWl9ERUZBVUxUX0NPTVBSRVNTSU9OOi0xLFpfRklMVEVSRUQ6MSxaX0hVRkZNQU5fT05MWToyLFpfUkxF'@;
put 'OjMsWl9GSVhFRDo0LFpfREVGQVVMVF9TVFJBVEVHWTowLFpfQklOQVJZOjAsWl9URVhUOjEsWl9VTktOT1dOOjIsWl9ERUZMQVRFRDo4fX0se31dLDMxOltmdW5jdGlvbihQLEYsTyl7InVzZSBzdHJpY3QiO3ZhciBOPWZ1bmN0aW9uIHooKXtmb3IodmFyIEssVT1bXSxXPTA7VzwyNTY7Vysr'@;
put 'KXtLPVc7Zm9yKHZhciBZPTA7WTw4O1krKylLPTEmSz8zOTg4MjkyMzg0Xks+Pj4xOks+Pj4xO1VbV109S31yZXR1cm4gVX0oKTtGLmV4cG9ydHM9ZnVuY3Rpb24gTChLLFUsVyxZKXt2YXIgcT1OLGVlPVkrVztLPX5LO2Zvcih2YXIgSj1ZO0o8ZWU7SisrKUs9Sz4+PjhecVsyNTUmKEteVVtK'@;
put 'XSldO3JldHVybn5LfX0se31dLDMyOltmdW5jdGlvbihQLEYsTyl7InVzZSBzdHJpY3QiO3ZhciB6PVAoIi4uL3V0aWxzL2NvbW1vbiIpLE49UCgiLi90cmVlcyIpLEw9UCgiLi9hZGxlcjMyIiksSz1QKCIuL2NyYzMyIiksVT1QKCIuL21lc3NhZ2VzIiksVz0wLG5lPTAsbGU9LTIseD0yLEM9'@;
put 'OCxBPTI4NixhZT0zMCx0ZT0xOSxzZT0yKkErMSx3ZT0xNSxVZT0zLEplPTI1OCxvdD1KZStVZSsxLHZlPTQyLE9lPTExMztmdW5jdGlvbiBRZShXZSxUdCl7cmV0dXJuIFdlLm1zZz1VW1R0XSxUdH1mdW5jdGlvbiB1bihXZSl7cmV0dXJuKFdlPDwxKS0oV2U+ND85OjApfWZ1bmN0aW9uIHl0'@;
put 'KFdlKXtmb3IodmFyIFR0PVdlLmxlbmd0aDstLVR0Pj0wOylXZVtUdF09MH1mdW5jdGlvbiBNdChXZSl7dmFyIFR0PVdlLnN0YXRlLG5yPVR0LnBlbmRpbmc7bnI+V2UuYXZhaWxfb3V0JiYobnI9V2UuYXZhaWxfb3V0KSwwIT09bnImJih6LmFycmF5U2V0KFdlLm91dHB1dCxUdC5wZW5kaW5n'@;
put 'X2J1ZixUdC5wZW5kaW5nX291dCxucixXZS5uZXh0X291dCksV2UubmV4dF9vdXQrPW5yLFR0LnBlbmRpbmdfb3V0Kz1ucixXZS50b3RhbF9vdXQrPW5yLFdlLmF2YWlsX291dC09bnIsVHQucGVuZGluZy09bnIsMD09PVR0LnBlbmRpbmcmJihUdC5wZW5kaW5nX291dD0wKSl9ZnVuY3Rpb24g'@;
put 'RHQoV2UsVHQpe04uX3RyX2ZsdXNoX2Jsb2NrKFdlLFdlLmJsb2NrX3N0YXJ0Pj0wP1dlLmJsb2NrX3N0YXJ0Oi0xLFdlLnN0cnN0YXJ0LVdlLmJsb2NrX3N0YXJ0LFR0KSxXZS5ibG9ja19zdGFydD1XZS5zdHJzdGFydCxNdChXZS5zdHJtKX1mdW5jdGlvbiBpdChXZSxUdCl7V2UucGVuZGlu'@;
put 'Z19idWZbV2UucGVuZGluZysrXT1UdH1mdW5jdGlvbiAkZShXZSxUdCl7V2UucGVuZGluZ19idWZbV2UucGVuZGluZysrXT1UdD4+PjgmMjU1LFdlLnBlbmRpbmdfYnVmW1dlLnBlbmRpbmcrK109MjU1JlR0fWZ1bmN0aW9uIHR0KFdlLFR0LG5yLGh0KXt2YXIgeHQ9V2UuYXZhaWxfaW47cmV0'@;
put 'dXJuIHh0Pmh0JiYoeHQ9aHQpLDA9PT14dD8wOihXZS5hdmFpbF9pbi09eHQsei5hcnJheVNldChUdCxXZS5pbnB1dCxXZS5uZXh0X2luLHh0LG5yKSwxPT09V2Uuc3RhdGUud3JhcD9XZS5hZGxlcj1MKFdlLmFkbGVyLFR0LHh0LG5yKToyPT09V2Uuc3RhdGUud3JhcCYmKFdlLmFkbGVyPUso'@;
put 'V2UuYWRsZXIsVHQseHQsbnIpKSxXZS5uZXh0X2luKz14dCxXZS50b3RhbF9pbis9eHQseHQpfWZ1bmN0aW9uIEhlKFdlLFR0KXt2YXIgeHQsam4sbnI9V2UubWF4X2NoYWluX2xlbmd0aCxodD1XZS5zdHJzdGFydCxybj1XZS5wcmV2X2xlbmd0aCx6dD1XZS5uaWNlX21hdGNoLGhpPVdlLnN0'@;
put 'cnN0YXJ0PldlLndfc2l6ZS1vdD9XZS5zdHJzdGFydC0oV2Uud19zaXplLW90KTowLGNuPVdlLndpbmRvdyxmbj1XZS53X21hc2ssSWk9V2UucHJldixYdD1XZS5zdHJzdGFydCtKZSxlbj1jbltodCtybi0xXSx1YT1jbltodCtybl07V2UucHJldl9sZW5ndGg+PVdlLmdvb2RfbWF0Y2gmJihu'@;
put 'cj4+PTIpLHp0PldlLmxvb2thaGVhZCYmKHp0PVdlLmxvb2thaGVhZCk7ZG97aWYoY25bKHh0PVR0KStybl09PT11YSYmY25beHQrcm4tMV09PT1lbiYmY25beHRdPT09Y25baHRdJiZjblsrK3h0XT09PWNuW2h0KzFdKXtodCs9Mix4dCsrO2Rve313aGlsZShjblsrK2h0XT09PWNuWysreHRd'@;
put 'JiZjblsrK2h0XT09PWNuWysreHRdJiZjblsrK2h0XT09PWNuWysreHRdJiZjblsrK2h0XT09PWNuWysreHRdJiZjblsrK2h0XT09PWNuWysreHRdJiZjblsrK2h0XT09PWNuWysreHRdJiZjblsrK2h0XT09PWNuWysreHRdJiZjblsrK2h0XT09PWNuWysreHRdJiZodDxYdCk7aWYoam49SmUt'@;
put 'KFh0LWh0KSxodD1YdC1KZSxqbj5ybil7aWYoV2UubWF0Y2hfc3RhcnQ9VHQscm49am4sam4+PXp0KWJyZWFrO2VuPWNuW2h0K3JuLTFdLHVhPWNuW2h0K3JuXX19fXdoaWxlKChUdD1JaVtUdCZmbl0pPmhpJiYwIT0tLW5yKTtyZXR1cm4gcm48PVdlLmxvb2thaGVhZD9ybjpXZS5sb29rYWhl'@;
put 'YWR9ZnVuY3Rpb24gdXQoV2Upe3ZhciBucixodCx4dCxqbixybixUdD1XZS53X3NpemU7ZG97aWYoam49V2Uud2luZG93X3NpemUtV2UubG9va2FoZWFkLVdlLnN0cnN0YXJ0LFdlLnN0cnN0YXJ0Pj1UdCsoVHQtb3QpKXt6LmFycmF5U2V0KFdlLndpbmRvdyxXZS53aW5kb3csVHQsVHQsMCks'@;
put 'V2UubWF0Y2hfc3RhcnQtPVR0LFdlLnN0cnN0YXJ0LT1UdCxXZS5ibG9ja19zdGFydC09VHQsbnI9aHQ9V2UuaGFzaF9zaXplO2Rve3h0PVdlLmhlYWRbLS1ucl0sV2UuaGVhZFtucl09eHQ+PVR0P3h0LVR0OjB9d2hpbGUoLS1odCk7bnI9aHQ9VHQ7ZG97eHQ9V2UucHJldlstLW5yXSxXZS5w'@;
put 'cmV2W25yXT14dD49VHQ/eHQtVHQ6MH13aGlsZSgtLWh0KTtqbis9VHR9aWYoMD09PVdlLnN0cm0uYXZhaWxfaW4pYnJlYWs7aWYoaHQ9dHQoV2Uuc3RybSxXZS53aW5kb3csV2Uuc3Ryc3RhcnQrV2UubG9va2FoZWFkLGpuKSxXZS5sb29rYWhlYWQrPWh0LFdlLmxvb2thaGVhZCtXZS5pbnNl'@;
put 'cnQ+PVVlKWZvcihXZS5pbnNfaD1XZS53aW5kb3dbcm49V2Uuc3Ryc3RhcnQtV2UuaW5zZXJ0XSxXZS5pbnNfaD0oV2UuaW5zX2g8PFdlLmhhc2hfc2hpZnReV2Uud2luZG93W3JuKzFdKSZXZS5oYXNoX21hc2s7V2UuaW5zZXJ0JiYoV2UuaW5zX2g9KFdlLmluc19oPDxXZS5oYXNoX3NoaWZ0'@;
put 'XldlLndpbmRvd1tybitVZS0xXSkmV2UuaGFzaF9tYXNrLFdlLnByZXZbcm4mV2Uud19tYXNrXT1XZS5oZWFkW1dlLmluc19oXSxXZS5oZWFkW1dlLmluc19oXT1ybixybisrLFdlLmluc2VydC0tLCEoV2UubG9va2FoZWFkK1dlLmluc2VydDxVZSkpOyk7fXdoaWxlKFdlLmxvb2thaGVhZDxv'@;
put 'dCYmMCE9PVdlLnN0cm0uYXZhaWxfaW4pfWZ1bmN0aW9uIFJ0KFdlLFR0KXtmb3IodmFyIG5yLGh0Ozspe2lmKFdlLmxvb2thaGVhZDxvdCl7aWYodXQoV2UpLFdlLmxvb2thaGVhZDxvdCYmVHQ9PT1XKXJldHVybiAxO2lmKDA9PT1XZS5sb29rYWhlYWQpYnJlYWt9aWYobnI9MCxXZS5sb29r'@;
put 'YWhlYWQ+PVVlJiYoV2UuaW5zX2g9KFdlLmluc19oPDxXZS5oYXNoX3NoaWZ0XldlLndpbmRvd1tXZS5zdHJzdGFydCtVZS0xXSkmV2UuaGFzaF9tYXNrLG5yPVdlLnByZXZbV2Uuc3Ryc3RhcnQmV2Uud19tYXNrXT1XZS5oZWFkW1dlLmluc19oXSxXZS5oZWFkW1dlLmluc19oXT1XZS5zdHJz'@;
put 'dGFydCksMCE9PW5yJiZXZS5zdHJzdGFydC1ucjw9V2Uud19zaXplLW90JiYoV2UubWF0Y2hfbGVuZ3RoPUhlKFdlLG5yKSksV2UubWF0Y2hfbGVuZ3RoPj1VZSlpZihodD1OLl90cl90YWxseShXZSxXZS5zdHJzdGFydC1XZS5tYXRjaF9zdGFydCxXZS5tYXRjaF9sZW5ndGgtVWUpLFdlLmxv'@;
put 'b2thaGVhZC09V2UubWF0Y2hfbGVuZ3RoLFdlLm1hdGNoX2xlbmd0aDw9V2UubWF4X2xhenlfbWF0Y2gmJldlLmxvb2thaGVhZD49VWUpe1dlLm1hdGNoX2xlbmd0aC0tO2Rve1dlLnN0cnN0YXJ0KyssV2UuaW5zX2g9KFdlLmluc19oPDxXZS5oYXNoX3NoaWZ0XldlLndpbmRvd1tXZS5zdHJz'@;
put 'dGFydCtVZS0xXSkmV2UuaGFzaF9tYXNrLG5yPVdlLnByZXZbV2Uuc3Ryc3RhcnQmV2Uud19tYXNrXT1XZS5oZWFkW1dlLmluc19oXSxXZS5oZWFkW1dlLmluc19oXT1XZS5zdHJzdGFydH13aGlsZSgwIT0tLVdlLm1hdGNoX2xlbmd0aCk7V2Uuc3Ryc3RhcnQrK31lbHNlIFdlLnN0cnN0YXJ0'@;
put 'Kz1XZS5tYXRjaF9sZW5ndGgsV2UubWF0Y2hfbGVuZ3RoPTAsV2UuaW5zX2g9V2Uud2luZG93W1dlLnN0cnN0YXJ0XSxXZS5pbnNfaD0oV2UuaW5zX2g8PFdlLmhhc2hfc2hpZnReV2Uud2luZG93W1dlLnN0cnN0YXJ0KzFdKSZXZS5oYXNoX21hc2s7ZWxzZSBodD1OLl90cl90YWxseShXZSww'@;
put 'LFdlLndpbmRvd1tXZS5zdHJzdGFydF0pLFdlLmxvb2thaGVhZC0tLFdlLnN0cnN0YXJ0Kys7aWYoaHQmJihEdChXZSwhMSksMD09PVdlLnN0cm0uYXZhaWxfb3V0KSlyZXR1cm4gMX1yZXR1cm4gV2UuaW5zZXJ0PVdlLnN0cnN0YXJ0PFVlLTE/V2Uuc3Ryc3RhcnQ6VWUtMSw0PT09VHQ/KER0'@;
put 'KFdlLCEwKSwwPT09V2Uuc3RybS5hdmFpbF9vdXQ/Mzo0KTpXZS5sYXN0X2xpdCYmKER0KFdlLCExKSwwPT09V2Uuc3RybS5hdmFpbF9vdXQpPzE6Mn1mdW5jdGlvbiBQdChXZSxUdCl7Zm9yKHZhciBucixodCx4dDs7KXtpZihXZS5sb29rYWhlYWQ8b3Qpe2lmKHV0KFdlKSxXZS5sb29rYWhl'@;
put 'YWQ8b3QmJlR0PT09VylyZXR1cm4gMTtpZigwPT09V2UubG9va2FoZWFkKWJyZWFrfWlmKG5yPTAsV2UubG9va2FoZWFkPj1VZSYmKFdlLmluc19oPShXZS5pbnNfaDw8V2UuaGFzaF9zaGlmdF5XZS53aW5kb3dbV2Uuc3Ryc3RhcnQrVWUtMV0pJldlLmhhc2hfbWFzayxucj1XZS5wcmV2W1dl'@;
put 'LnN0cnN0YXJ0JldlLndfbWFza109V2UuaGVhZFtXZS5pbnNfaF0sV2UuaGVhZFtXZS5pbnNfaF09V2Uuc3Ryc3RhcnQpLFdlLnByZXZfbGVuZ3RoPVdlLm1hdGNoX2xlbmd0aCxXZS5wcmV2X21hdGNoPVdlLm1hdGNoX3N0YXJ0LFdlLm1hdGNoX2xlbmd0aD1VZS0xLDAhPT1uciYmV2UucHJl'@;
put 'dl9sZW5ndGg8V2UubWF4X2xhenlfbWF0Y2gmJldlLnN0cnN0YXJ0LW5yPD1XZS53X3NpemUtb3QmJihXZS5tYXRjaF9sZW5ndGg9SGUoV2UsbnIpLFdlLm1hdGNoX2xlbmd0aDw9NSYmKDE9PT1XZS5zdHJhdGVneXx8V2UubWF0Y2hfbGVuZ3RoPT09VWUmJldlLnN0cnN0YXJ0LVdlLm1hdGNo'@;
put 'X3N0YXJ0PjQwOTYpJiYoV2UubWF0Y2hfbGVuZ3RoPVVlLTEpKSxXZS5wcmV2X2xlbmd0aD49VWUmJldlLm1hdGNoX2xlbmd0aDw9V2UucHJldl9sZW5ndGgpe3h0PVdlLnN0cnN0YXJ0K1dlLmxvb2thaGVhZC1VZSxodD1OLl90cl90YWxseShXZSxXZS5zdHJzdGFydC0xLVdlLnByZXZfbWF0'@;
put 'Y2gsV2UucHJldl9sZW5ndGgtVWUpLFdlLmxvb2thaGVhZC09V2UucHJldl9sZW5ndGgtMSxXZS5wcmV2X2xlbmd0aC09Mjtkb3srK1dlLnN0cnN0YXJ0PD14dCYmKFdlLmluc19oPShXZS5pbnNfaDw8V2UuaGFzaF9zaGlmdF5XZS53aW5kb3dbV2Uuc3Ryc3RhcnQrVWUtMV0pJldlLmhhc2hf'@;
put 'bWFzayxucj1XZS5wcmV2W1dlLnN0cnN0YXJ0JldlLndfbWFza109V2UuaGVhZFtXZS5pbnNfaF0sV2UuaGVhZFtXZS5pbnNfaF09V2Uuc3Ryc3RhcnQpfXdoaWxlKDAhPS0tV2UucHJldl9sZW5ndGgpO2lmKFdlLm1hdGNoX2F2YWlsYWJsZT0wLFdlLm1hdGNoX2xlbmd0aD1VZS0xLFdlLnN0'@;
put 'cnN0YXJ0KyssaHQmJihEdChXZSwhMSksMD09PVdlLnN0cm0uYXZhaWxfb3V0KSlyZXR1cm4gMX1lbHNlIGlmKFdlLm1hdGNoX2F2YWlsYWJsZSl7aWYoKGh0PU4uX3RyX3RhbGx5KFdlLDAsV2Uud2luZG93W1dlLnN0cnN0YXJ0LTFdKSkmJkR0KFdlLCExKSxXZS5zdHJzdGFydCsrLFdlLmxv'@;
put 'b2thaGVhZC0tLDA9PT1XZS5zdHJtLmF2YWlsX291dClyZXR1cm4gMX1lbHNlIFdlLm1hdGNoX2F2YWlsYWJsZT0xLFdlLnN0cnN0YXJ0KyssV2UubG9va2FoZWFkLS19cmV0dXJuIFdlLm1hdGNoX2F2YWlsYWJsZSYmKGh0PU4uX3RyX3RhbGx5KFdlLDAsV2Uud2luZG93W1dlLnN0cnN0YXJ0'@;
put 'LTFdKSxXZS5tYXRjaF9hdmFpbGFibGU9MCksV2UuaW5zZXJ0PVdlLnN0cnN0YXJ0PFVlLTE/V2Uuc3Ryc3RhcnQ6VWUtMSw0PT09VHQ/KER0KFdlLCEwKSwwPT09V2Uuc3RybS5hdmFpbF9vdXQ/Mzo0KTpXZS5sYXN0X2xpdCYmKER0KFdlLCExKSwwPT09V2Uuc3RybS5hdmFpbF9vdXQpPzE6'@;
put 'Mn12YXIgUmksc249ZnVuY3Rpb24oV2UsVHQsbnIsaHQseHQpe3RoaXMuZ29vZF9sZW5ndGg9V2UsdGhpcy5tYXhfbGF6eT1UdCx0aGlzLm5pY2VfbGVuZ3RoPW5yLHRoaXMubWF4X2NoYWluPWh0LHRoaXMuZnVuYz14dH07ZnVuY3Rpb24gZnQoKXt0aGlzLnN0cm09bnVsbCx0aGlzLnN0YXR1'@;
put 'cz0wLHRoaXMucGVuZGluZ19idWY9bnVsbCx0aGlzLnBlbmRpbmdfYnVmX3NpemU9MCx0aGlzLnBlbmRpbmdfb3V0PTAsdGhpcy5wZW5kaW5nPTAsdGhpcy53cmFwPTAsdGhpcy5nemhlYWQ9bnVsbCx0aGlzLmd6aW5kZXg9MCx0aGlzLm1ldGhvZD1DLHRoaXMubGFzdF9mbHVzaD0tMSx0aGlz'@;
put 'Lndfc2l6ZT0wLHRoaXMud19iaXRzPTAsdGhpcy53X21hc2s9MCx0aGlzLndpbmRvdz1udWxsLHRoaXMud2luZG93X3NpemU9MCx0aGlzLnByZXY9bnVsbCx0aGlzLmhlYWQ9bnVsbCx0aGlzLmluc19oPTAsdGhpcy5oYXNoX3NpemU9MCx0aGlzLmhhc2hfYml0cz0wLHRoaXMuaGFzaF9tYXNr'@;
put 'PTAsdGhpcy5oYXNoX3NoaWZ0PTAsdGhpcy5ibG9ja19zdGFydD0wLHRoaXMubWF0Y2hfbGVuZ3RoPTAsdGhpcy5wcmV2X21hdGNoPTAsdGhpcy5tYXRjaF9hdmFpbGFibGU9MCx0aGlzLnN0cnN0YXJ0PTAsdGhpcy5tYXRjaF9zdGFydD0wLHRoaXMubG9va2FoZWFkPTAsdGhpcy5wcmV2X2xl'@;
put 'bmd0aD0wLHRoaXMubWF4X2NoYWluX2xlbmd0aD0wLHRoaXMubWF4X2xhenlfbWF0Y2g9MCx0aGlzLmxldmVsPTAsdGhpcy5zdHJhdGVneT0wLHRoaXMuZ29vZF9tYXRjaD0wLHRoaXMubmljZV9tYXRjaD0wLHRoaXMuZHluX2x0cmVlPW5ldyB6LkJ1ZjE2KDIqc2UpLHRoaXMuZHluX2R0cmVl'@;
put 'PW5ldyB6LkJ1ZjE2KDIqKDIqYWUrMSkpLHRoaXMuYmxfdHJlZT1uZXcgei5CdWYxNigyKigyKnRlKzEpKSx5dCh0aGlzLmR5bl9sdHJlZSkseXQodGhpcy5keW5fZHRyZWUpLHl0KHRoaXMuYmxfdHJlZSksdGhpcy5sX2Rlc2M9bnVsbCx0aGlzLmRfZGVzYz1udWxsLHRoaXMuYmxfZGVzYz1u'@;
put 'dWxsLHRoaXMuYmxfY291bnQ9bmV3IHouQnVmMTYod2UrMSksdGhpcy5oZWFwPW5ldyB6LkJ1ZjE2KDIqQSsxKSx5dCh0aGlzLmhlYXApLHRoaXMuaGVhcF9sZW49MCx0aGlzLmhlYXBfbWF4PTAsdGhpcy5kZXB0aD1uZXcgei5CdWYxNigyKkErMSkseXQodGhpcy5kZXB0aCksdGhpcy5sX2J1'@;
put 'Zj0wLHRoaXMubGl0X2J1ZnNpemU9MCx0aGlzLmxhc3RfbGl0PTAsdGhpcy5kX2J1Zj0wLHRoaXMub3B0X2xlbj0wLHRoaXMuc3RhdGljX2xlbj0wLHRoaXMubWF0Y2hlcz0wLHRoaXMuaW5zZXJ0PTAsdGhpcy5iaV9idWY9MCx0aGlzLmJpX3ZhbGlkPTB9ZnVuY3Rpb24gT3IoV2Upe3ZhciBU'@;
put 'dDtyZXR1cm4gV2UmJldlLnN0YXRlPyhXZS50b3RhbF9pbj1XZS50b3RhbF9vdXQ9MCxXZS5kYXRhX3R5cGU9eCwoVHQ9V2Uuc3RhdGUpLnBlbmRpbmc9MCxUdC5wZW5kaW5nX291dD0wLFR0LndyYXA8MCYmKFR0LndyYXA9LVR0LndyYXApLFR0LnN0YXR1cz1UdC53cmFwP3ZlOk9lLFdlLmFk'@;
put 'bGVyPTI9PT1UdC53cmFwPzA6MSxUdC5sYXN0X2ZsdXNoPVcsTi5fdHJfaW5pdChUdCksbmUpOlFlKFdlLGxlKX1mdW5jdGlvbiBXdChXZSl7dmFyIFR0PU9yKFdlKTtyZXR1cm4gVHQ9PT1uZSYmZnVuY3Rpb24gaG4oV2Upe1dlLndpbmRvd19zaXplPTIqV2Uud19zaXplLHl0KFdlLmhlYWQp'@;
put 'LFdlLm1heF9sYXp5X21hdGNoPVJpW1dlLmxldmVsXS5tYXhfbGF6eSxXZS5nb29kX21hdGNoPVJpW1dlLmxldmVsXS5nb29kX2xlbmd0aCxXZS5uaWNlX21hdGNoPVJpW1dlLmxldmVsXS5uaWNlX2xlbmd0aCxXZS5tYXhfY2hhaW5fbGVuZ3RoPVJpW1dlLmxldmVsXS5tYXhfY2hhaW4sV2Uu'@;
put 'c3Ryc3RhcnQ9MCxXZS5ibG9ja19zdGFydD0wLFdlLmxvb2thaGVhZD0wLFdlLmluc2VydD0wLFdlLm1hdGNoX2xlbmd0aD1XZS5wcmV2X2xlbmd0aD1VZS0xLFdlLm1hdGNoX2F2YWlsYWJsZT0wLFdlLmluc19oPTB9KFdlLnN0YXRlKSxUdH1mdW5jdGlvbiBSbihXZSxUdCxucixodCx4dCxq'@;
put 'bil7aWYoIVdlKXJldHVybiBsZTt2YXIgcm49MTtpZigtMT09PVR0JiYoVHQ9NiksaHQ8MD8ocm49MCxodD0taHQpOmh0PjE1JiYocm49MixodC09MTYpLHh0PDF8fHh0Pjl8fG5yIT09Q3x8aHQ8OHx8aHQ+MTV8fFR0PDB8fFR0Pjl8fGpuPDB8fGpuPjQpcmV0dXJuIFFlKFdlLGxlKTs4PT09'@;
put 'aHQmJihodD05KTt2YXIgenQ9bmV3IGZ0O3JldHVybiBXZS5zdGF0ZT16dCx6dC5zdHJtPVdlLHp0LndyYXA9cm4senQuZ3poZWFkPW51bGwsenQud19iaXRzPWh0LHp0Lndfc2l6ZT0xPDx6dC53X2JpdHMsenQud19tYXNrPXp0Lndfc2l6ZS0xLHp0Lmhhc2hfYml0cz14dCs3LHp0Lmhhc2hf'@;
put 'c2l6ZT0xPDx6dC5oYXNoX2JpdHMsenQuaGFzaF9tYXNrPXp0Lmhhc2hfc2l6ZS0xLHp0Lmhhc2hfc2hpZnQ9fn4oKHp0Lmhhc2hfYml0cytVZS0xKS9VZSksenQud2luZG93PW5ldyB6LkJ1ZjgoMip6dC53X3NpemUpLHp0LmhlYWQ9bmV3IHouQnVmMTYoenQuaGFzaF9zaXplKSx6dC5wcmV2'@;
put 'PW5ldyB6LkJ1ZjE2KHp0Lndfc2l6ZSksenQubGl0X2J1ZnNpemU9MTw8eHQrNix6dC5wZW5kaW5nX2J1Zl9zaXplPTQqenQubGl0X2J1ZnNpemUsenQucGVuZGluZ19idWY9bmV3IHouQnVmOCh6dC5wZW5kaW5nX2J1Zl9zaXplKSx6dC5kX2J1Zj16dC5saXRfYnVmc2l6ZT4+MSx6dC5sX2J1'@;
put 'Zj0zKnp0LmxpdF9idWZzaXplLHp0LmxldmVsPVR0LHp0LnN0cmF0ZWd5PWpuLHp0Lm1ldGhvZD1ucixXdChXZSl9Umk9W25ldyBzbigwLDAsMCwwLGZ1bmN0aW9uIHF0KFdlLFR0KXt2YXIgbnI9NjU1MzU7Zm9yKG5yPldlLnBlbmRpbmdfYnVmX3NpemUtNSYmKG5yPVdlLnBlbmRpbmdfYnVm'@;
put 'X3NpemUtNSk7Oyl7aWYoV2UubG9va2FoZWFkPD0xKXtpZih1dChXZSksMD09PVdlLmxvb2thaGVhZCYmVHQ9PT1XKXJldHVybiAxO2lmKDA9PT1XZS5sb29rYWhlYWQpYnJlYWt9V2Uuc3Ryc3RhcnQrPVdlLmxvb2thaGVhZCxXZS5sb29rYWhlYWQ9MDt2YXIgaHQ9V2UuYmxvY2tfc3RhcnQr'@;
put 'bnI7aWYoKDA9PT1XZS5zdHJzdGFydHx8V2Uuc3Ryc3RhcnQ+PWh0KSYmKFdlLmxvb2thaGVhZD1XZS5zdHJzdGFydC1odCxXZS5zdHJzdGFydD1odCxEdChXZSwhMSksMD09PVdlLnN0cm0uYXZhaWxfb3V0KXx8V2Uuc3Ryc3RhcnQtV2UuYmxvY2tfc3RhcnQ+PVdlLndfc2l6ZS1vdCYmKER0'@;
put 'KFdlLCExKSwwPT09V2Uuc3RybS5hdmFpbF9vdXQpKXJldHVybiAxfXJldHVybiBXZS5pbnNlcnQ9MCw0PT09VHQ/KER0KFdlLCEwKSwwPT09V2Uuc3RybS5hdmFpbF9vdXQ/Mzo0KTooV2Uuc3Ryc3RhcnQ+V2UuYmxvY2tfc3RhcnQmJkR0KFdlLCExKSwxKX0pLG5ldyBzbig0LDQsOCw0LFJ0'@;
put 'KSxuZXcgc24oNCw1LDE2LDgsUnQpLG5ldyBzbig0LDYsMzIsMzIsUnQpLG5ldyBzbig0LDQsMTYsMTYsUHQpLG5ldyBzbig4LDE2LDMyLDMyLFB0KSxuZXcgc24oOCwxNiwxMjgsMTI4LFB0KSxuZXcgc24oOCwzMiwxMjgsMjU2LFB0KSxuZXcgc24oMzIsMTI4LDI1OCwxMDI0LFB0KSxuZXcg'@;
put 'c24oMzIsMjU4LDI1OCw0MDk2LFB0KV0sTy5kZWZsYXRlSW5pdD1mdW5jdGlvbiBzdChXZSxUdCl7cmV0dXJuIFJuKFdlLFR0LEMsMTUsOCwwKX0sTy5kZWZsYXRlSW5pdDI9Um4sTy5kZWZsYXRlUmVzZXQ9V3QsTy5kZWZsYXRlUmVzZXRLZWVwPU9yLE8uZGVmbGF0ZVNldEhlYWRlcj1mdW5j'@;
put 'dGlvbiBBdChXZSxUdCl7cmV0dXJuIFdlJiZXZS5zdGF0ZSYmMj09PVdlLnN0YXRlLndyYXA/KFdlLnN0YXRlLmd6aGVhZD1UdCxuZSk6bGV9LE8uZGVmbGF0ZT1mdW5jdGlvbiBVdChXZSxUdCl7dmFyIG5yLGh0LHh0LGpuO2lmKCFXZXx8IVdlLnN0YXRlfHxUdD41fHxUdDwwKXJldHVybiBX'@;
put 'ZT9RZShXZSxsZSk6bGU7aWYoaHQ9V2Uuc3RhdGUsIVdlLm91dHB1dHx8IVdlLmlucHV0JiYwIT09V2UuYXZhaWxfaW58fDY2Nj09PWh0LnN0YXR1cyYmNCE9PVR0KXJldHVybiBRZShXZSwwPT09V2UuYXZhaWxfb3V0Py01OmxlKTtpZihodC5zdHJtPVdlLG5yPWh0Lmxhc3RfZmx1c2gsaHQu'@;
put 'bGFzdF9mbHVzaD1UdCxodC5zdGF0dXM9PT12ZSlpZigyPT09aHQud3JhcClXZS5hZGxlcj0wLGl0KGh0LDMxKSxpdChodCwxMzkpLGl0KGh0LDgpLGh0Lmd6aGVhZD8oaXQoaHQsKGh0Lmd6aGVhZC50ZXh0PzE6MCkrKGh0Lmd6aGVhZC5oY3JjPzI6MCkrKGh0Lmd6aGVhZC5leHRyYT80OjAp'@;
put 'KyhodC5nemhlYWQubmFtZT84OjApKyhodC5nemhlYWQuY29tbWVudD8xNjowKSksaXQoaHQsMjU1Jmh0Lmd6aGVhZC50aW1lKSxpdChodCxodC5nemhlYWQudGltZT4+OCYyNTUpLGl0KGh0LGh0Lmd6aGVhZC50aW1lPj4xNiYyNTUpLGl0KGh0LGh0Lmd6aGVhZC50aW1lPj4yNCYyNTUpLGl0'@;
put 'KGh0LDk9PT1odC5sZXZlbD8yOmh0LnN0cmF0ZWd5Pj0yfHxodC5sZXZlbDwyPzQ6MCksaXQoaHQsMjU1Jmh0Lmd6aGVhZC5vcyksaHQuZ3poZWFkLmV4dHJhJiZodC5nemhlYWQuZXh0cmEubGVuZ3RoJiYoaXQoaHQsMjU1Jmh0Lmd6aGVhZC5leHRyYS5sZW5ndGgpLGl0KGh0LGh0Lmd6aGVh'@;
put 'ZC5leHRyYS5sZW5ndGg+PjgmMjU1KSksaHQuZ3poZWFkLmhjcmMmJihXZS5hZGxlcj1LKFdlLmFkbGVyLGh0LnBlbmRpbmdfYnVmLGh0LnBlbmRpbmcsMCkpLGh0Lmd6aW5kZXg9MCxodC5zdGF0dXM9NjkpOihpdChodCwwKSxpdChodCwwKSxpdChodCwwKSxpdChodCwwKSxpdChodCwwKSxp'@;
put 'dChodCw5PT09aHQubGV2ZWw/MjpodC5zdHJhdGVneT49Mnx8aHQubGV2ZWw8Mj80OjApLGl0KGh0LDMpLGh0LnN0YXR1cz1PZSk7ZWxzZXt2YXIgcm49QysoaHQud19iaXRzLTg8PDQpPDw4O3JufD0oaHQuc3RyYXRlZ3k+PTJ8fGh0LmxldmVsPDI/MDpodC5sZXZlbDw2PzE6Nj09PWh0Lmxl'@;
put 'dmVsPzI6Myk8PDYsMCE9PWh0LnN0cnN0YXJ0JiYocm58PTMyKSxybis9MzEtcm4lMzEsaHQuc3RhdHVzPU9lLCRlKGh0LHJuKSwwIT09aHQuc3Ryc3RhcnQmJigkZShodCxXZS5hZGxlcj4+PjE2KSwkZShodCw2NTUzNSZXZS5hZGxlcikpLFdlLmFkbGVyPTF9aWYoNjk9PT1odC5zdGF0dXMp'@;
put 'aWYoaHQuZ3poZWFkLmV4dHJhKXtmb3IoeHQ9aHQucGVuZGluZztodC5nemluZGV4PCg2NTUzNSZodC5nemhlYWQuZXh0cmEubGVuZ3RoKSYmKGh0LnBlbmRpbmchPT1odC5wZW5kaW5nX2J1Zl9zaXplfHwoaHQuZ3poZWFkLmhjcmMmJmh0LnBlbmRpbmc+eHQmJihXZS5hZGxlcj1LKFdlLmFk'@;
put 'bGVyLGh0LnBlbmRpbmdfYnVmLGh0LnBlbmRpbmcteHQseHQpKSxNdChXZSkseHQ9aHQucGVuZGluZyxodC5wZW5kaW5nIT09aHQucGVuZGluZ19idWZfc2l6ZSkpOylpdChodCwyNTUmaHQuZ3poZWFkLmV4dHJhW2h0Lmd6aW5kZXhdKSxodC5nemluZGV4Kys7aHQuZ3poZWFkLmhjcmMmJmh0'@;
put 'LnBlbmRpbmc+eHQmJihXZS5hZGxlcj1LKFdlLmFkbGVyLGh0LnBlbmRpbmdfYnVmLGh0LnBlbmRpbmcteHQseHQpKSxodC5nemluZGV4PT09aHQuZ3poZWFkLmV4dHJhLmxlbmd0aCYmKGh0Lmd6aW5kZXg9MCxodC5zdGF0dXM9NzMpfWVsc2UgaHQuc3RhdHVzPTczO2lmKDczPT09aHQuc3Rh'@;
put 'dHVzKWlmKGh0Lmd6aGVhZC5uYW1lKXt4dD1odC5wZW5kaW5nO2Rve2lmKGh0LnBlbmRpbmc9PT1odC5wZW5kaW5nX2J1Zl9zaXplJiYoaHQuZ3poZWFkLmhjcmMmJmh0LnBlbmRpbmc+eHQmJihXZS5hZGxlcj1LKFdlLmFkbGVyLGh0LnBlbmRpbmdfYnVmLGh0LnBlbmRpbmcteHQseHQpKSxN'@;
put 'dChXZSkseHQ9aHQucGVuZGluZyxodC5wZW5kaW5nPT09aHQucGVuZGluZ19idWZfc2l6ZSkpe2puPTE7YnJlYWt9am49aHQuZ3ppbmRleDxodC5nemhlYWQubmFtZS5sZW5ndGg/MjU1Jmh0Lmd6aGVhZC5uYW1lLmNoYXJDb2RlQXQoaHQuZ3ppbmRleCsrKTowLGl0KGh0LGpuKX13aGlsZSgw'@;
put 'IT09am4pO2h0Lmd6aGVhZC5oY3JjJiZodC5wZW5kaW5nPnh0JiYoV2UuYWRsZXI9SyhXZS5hZGxlcixodC5wZW5kaW5nX2J1ZixodC5wZW5kaW5nLXh0LHh0KSksMD09PWpuJiYoaHQuZ3ppbmRleD0wLGh0LnN0YXR1cz05MSl9ZWxzZSBodC5zdGF0dXM9OTE7aWYoOTE9PT1odC5zdGF0dXMp'@;
put 'aWYoaHQuZ3poZWFkLmNvbW1lbnQpe3h0PWh0LnBlbmRpbmc7ZG97aWYoaHQucGVuZGluZz09PWh0LnBlbmRpbmdfYnVmX3NpemUmJihodC5nemhlYWQuaGNyYyYmaHQucGVuZGluZz54dCYmKFdlLmFkbGVyPUsoV2UuYWRsZXIsaHQucGVuZGluZ19idWYsaHQucGVuZGluZy14dCx4dCkpLE10'@;
put 'KFdlKSx4dD1odC5wZW5kaW5nLGh0LnBlbmRpbmc9PT1odC5wZW5kaW5nX2J1Zl9zaXplKSl7am49MTticmVha31qbj1odC5nemluZGV4PGh0Lmd6aGVhZC5jb21tZW50Lmxlbmd0aD8yNTUmaHQuZ3poZWFkLmNvbW1lbnQuY2hhckNvZGVBdChodC5nemluZGV4KyspOjAsaXQoaHQsam4pfXdo'@;
put 'aWxlKDAhPT1qbik7aHQuZ3poZWFkLmhjcmMmJmh0LnBlbmRpbmc+eHQmJihXZS5hZGxlcj1LKFdlLmFkbGVyLGh0LnBlbmRpbmdfYnVmLGh0LnBlbmRpbmcteHQseHQpKSwwPT09am4mJihodC5zdGF0dXM9MTAzKX1lbHNlIGh0LnN0YXR1cz0xMDM7aWYoMTAzPT09aHQuc3RhdHVzJiYoaHQu'@;
put 'Z3poZWFkLmhjcmM/KGh0LnBlbmRpbmcrMj5odC5wZW5kaW5nX2J1Zl9zaXplJiZNdChXZSksaHQucGVuZGluZysyPD1odC5wZW5kaW5nX2J1Zl9zaXplJiYoaXQoaHQsMjU1JldlLmFkbGVyKSxpdChodCxXZS5hZGxlcj4+OCYyNTUpLFdlLmFkbGVyPTAsaHQuc3RhdHVzPU9lKSk6aHQuc3Rh'@;
put 'dHVzPU9lKSwwIT09aHQucGVuZGluZyl7aWYoTXQoV2UpLDA9PT1XZS5hdmFpbF9vdXQpcmV0dXJuIGh0Lmxhc3RfZmx1c2g9LTEsbmV9ZWxzZSBpZigwPT09V2UuYXZhaWxfaW4mJnVuKFR0KTw9dW4obnIpJiY0IT09VHQpcmV0dXJuIFFlKFdlLC01KTtpZig2NjY9PT1odC5zdGF0dXMmJjAh'@;
put 'PT1XZS5hdmFpbF9pbilyZXR1cm4gUWUoV2UsLTUpO2lmKDAhPT1XZS5hdmFpbF9pbnx8MCE9PWh0Lmxvb2thaGVhZHx8VHQhPT1XJiY2NjYhPT1odC5zdGF0dXMpe3ZhciBoaT0yPT09aHQuc3RyYXRlZ3k/ZnVuY3Rpb24gUXQoV2UsVHQpe2Zvcih2YXIgbnI7Oyl7aWYoMD09PVdlLmxvb2th'@;
put 'aGVhZCYmKHV0KFdlKSwwPT09V2UubG9va2FoZWFkKSl7aWYoVHQ9PT1XKXJldHVybiAxO2JyZWFrfWlmKFdlLm1hdGNoX2xlbmd0aD0wLG5yPU4uX3RyX3RhbGx5KFdlLDAsV2Uud2luZG93W1dlLnN0cnN0YXJ0XSksV2UubG9va2FoZWFkLS0sV2Uuc3Ryc3RhcnQrKyxuciYmKER0KFdlLCEx'@;
put 'KSwwPT09V2Uuc3RybS5hdmFpbF9vdXQpKXJldHVybiAxfXJldHVybiBXZS5pbnNlcnQ9MCw0PT09VHQ/KER0KFdlLCEwKSwwPT09V2Uuc3RybS5hdmFpbF9vdXQ/Mzo0KTpXZS5sYXN0X2xpdCYmKER0KFdlLCExKSwwPT09V2Uuc3RybS5hdmFpbF9vdXQpPzE6Mn0oaHQsVHQpOjM9PT1odC5z'@;
put 'dHJhdGVneT9mdW5jdGlvbiBjaShXZSxUdCl7Zm9yKHZhciBucixodCx4dCxqbixybj1XZS53aW5kb3c7Oyl7aWYoV2UubG9va2FoZWFkPD1KZSl7aWYodXQoV2UpLFdlLmxvb2thaGVhZDw9SmUmJlR0PT09VylyZXR1cm4gMTtpZigwPT09V2UubG9va2FoZWFkKWJyZWFrfWlmKFdlLm1hdGNo'@;
put 'X2xlbmd0aD0wLFdlLmxvb2thaGVhZD49VWUmJldlLnN0cnN0YXJ0PjAmJihodD1yblt4dD1XZS5zdHJzdGFydC0xXSk9PT1yblsrK3h0XSYmaHQ9PT1yblsrK3h0XSYmaHQ9PT1yblsrK3h0XSl7am49V2Uuc3Ryc3RhcnQrSmU7ZG97fXdoaWxlKGh0PT09cm5bKyt4dF0mJmh0PT09cm5bKyt4'@;
put 'dF0mJmh0PT09cm5bKyt4dF0mJmh0PT09cm5bKyt4dF0mJmh0PT09cm5bKyt4dF0mJmh0PT09cm5bKyt4dF0mJmh0PT09cm5bKyt4dF0mJmh0PT09cm5bKyt4dF0mJnh0PGpuKTtXZS5tYXRjaF9sZW5ndGg9SmUtKGpuLXh0KSxXZS5tYXRjaF9sZW5ndGg+V2UubG9va2FoZWFkJiYoV2UubWF0'@;
put 'Y2hfbGVuZ3RoPVdlLmxvb2thaGVhZCl9aWYoV2UubWF0Y2hfbGVuZ3RoPj1VZT8obnI9Ti5fdHJfdGFsbHkoV2UsMSxXZS5tYXRjaF9sZW5ndGgtVWUpLFdlLmxvb2thaGVhZC09V2UubWF0Y2hfbGVuZ3RoLFdlLnN0cnN0YXJ0Kz1XZS5tYXRjaF9sZW5ndGgsV2UubWF0Y2hfbGVuZ3RoPTAp'@;
put 'Oihucj1OLl90cl90YWxseShXZSwwLFdlLndpbmRvd1tXZS5zdHJzdGFydF0pLFdlLmxvb2thaGVhZC0tLFdlLnN0cnN0YXJ0KyspLG5yJiYoRHQoV2UsITEpLDA9PT1XZS5zdHJtLmF2YWlsX291dCkpcmV0dXJuIDF9cmV0dXJuIFdlLmluc2VydD0wLDQ9PT1UdD8oRHQoV2UsITApLDA9PT1X'@;
put 'ZS5zdHJtLmF2YWlsX291dD8zOjQpOldlLmxhc3RfbGl0JiYoRHQoV2UsITEpLDA9PT1XZS5zdHJtLmF2YWlsX291dCk/MToyfShodCxUdCk6UmlbaHQubGV2ZWxdLmZ1bmMoaHQsVHQpO2lmKCgzPT09aGl8fDQ9PT1oaSkmJihodC5zdGF0dXM9NjY2KSwxPT09aGl8fDM9PT1oaSlyZXR1cm4g'@;
put 'MD09PVdlLmF2YWlsX291dCYmKGh0Lmxhc3RfZmx1c2g9LTEpLG5lO2lmKDI9PT1oaSYmKDE9PT1UdD9OLl90cl9hbGlnbihodCk6NSE9PVR0JiYoTi5fdHJfc3RvcmVkX2Jsb2NrKGh0LDAsMCwhMSksMz09PVR0JiYoeXQoaHQuaGVhZCksMD09PWh0Lmxvb2thaGVhZCYmKGh0LnN0cnN0YXJ0'@;
put 'PTAsaHQuYmxvY2tfc3RhcnQ9MCxodC5pbnNlcnQ9MCkpKSxNdChXZSksMD09PVdlLmF2YWlsX291dCkpcmV0dXJuIGh0Lmxhc3RfZmx1c2g9LTEsbmV9cmV0dXJuIDQhPT1UdD9uZTpodC53cmFwPD0wPzE6KDI9PT1odC53cmFwPyhpdChodCwyNTUmV2UuYWRsZXIpLGl0KGh0LFdlLmFkbGVy'@;
put 'Pj44JjI1NSksaXQoaHQsV2UuYWRsZXI+PjE2JjI1NSksaXQoaHQsV2UuYWRsZXI+PjI0JjI1NSksaXQoaHQsMjU1JldlLnRvdGFsX2luKSxpdChodCxXZS50b3RhbF9pbj4+OCYyNTUpLGl0KGh0LFdlLnRvdGFsX2luPj4xNiYyNTUpLGl0KGh0LFdlLnRvdGFsX2luPj4yNCYyNTUpKTooJGUo'@;
put 'aHQsV2UuYWRsZXI+Pj4xNiksJGUoaHQsNjU1MzUmV2UuYWRsZXIpKSxNdChXZSksaHQud3JhcD4wJiYoaHQud3JhcD0taHQud3JhcCksMCE9PWh0LnBlbmRpbmc/bmU6MSl9LE8uZGVmbGF0ZUVuZD1mdW5jdGlvbiByaShXZSl7dmFyIFR0O3JldHVybiBXZSYmV2Uuc3RhdGU/KFR0PVdlLnN0'@;
put 'YXRlLnN0YXR1cykhPT12ZSYmNjkhPT1UdCYmNzMhPT1UdCYmOTEhPT1UdCYmMTAzIT09VHQmJlR0IT09T2UmJjY2NiE9PVR0P1FlKFdlLGxlKTooV2Uuc3RhdGU9bnVsbCxUdD09PU9lP1FlKFdlLC0zKTpuZSk6bGV9LE8uZGVmbGF0ZUluZm89InBha28gZGVmbGF0ZSAoZnJvbSBOb2RlY2Eg'@;
put 'cHJvamVjdCkifSx7Ii4uL3V0aWxzL2NvbW1vbiI6MjcsIi4vYWRsZXIzMiI6MjksIi4vY3JjMzIiOjMxLCIuL21lc3NhZ2VzIjozNywiLi90cmVlcyI6Mzh9XSwzMzpbZnVuY3Rpb24oUCxGLE8peyJ1c2Ugc3RyaWN0IjtGLmV4cG9ydHM9ZnVuY3Rpb24geigpe3RoaXMudGV4dD0wLHRoaXMu'@;
put 'dGltZT0wLHRoaXMueGZsYWdzPTAsdGhpcy5vcz0wLHRoaXMuZXh0cmE9bnVsbCx0aGlzLmV4dHJhX2xlbj0wLHRoaXMubmFtZT0iIix0aGlzLmNvbW1lbnQ9IiIsdGhpcy5oY3JjPTAsdGhpcy5kb25lPSExfX0se31dLDM0OltmdW5jdGlvbihQLEYsTyl7InVzZSBzdHJpY3QiO0YuZXhwb3J0'@;
put 'cz1mdW5jdGlvbihLLFUpe3ZhciBXLFkscSxlZSxKLG5lLGllLGxlLG1lLF9lLFRlLFNlLGplLFYscCxiLHgsQyxULEgsaixFLG0sQSxhZTtBPUsuaW5wdXQscT0oWT1LLm5leHRfaW4pKyhLLmF2YWlsX2luLTUpLGFlPUsub3V0cHV0LEo9KGVlPUsubmV4dF9vdXQpLShVLUsuYXZhaWxfb3V0'@;
put 'KSxuZT1lZSsoSy5hdmFpbF9vdXQtMjU3KSxpZT0oVz1LLnN0YXRlKS5kbWF4LGxlPVcud3NpemUsbWU9Vy53aGF2ZSxfZT1XLnduZXh0LFRlPVcud2luZG93LFNlPVcuaG9sZCxqZT1XLmJpdHMsVj1XLmxlbmNvZGUscD1XLmRpc3Rjb2RlLGI9KDE8PFcubGVuYml0cyktMSx4PSgxPDxXLmRp'@;
put 'c3RiaXRzKS0xO2U6ZG97amU8MTUmJihTZSs9QVtZKytdPDxqZSxTZSs9QVtZKytdPDwoamUrPTgpLGplKz04KSxDPVZbU2UmYl07dDpmb3IoOzspe2lmKFNlPj4+PVQ9Qz4+PjI0LGplLT1ULDA9PShUPUM+Pj4xNiYyNTUpKWFlW2VlKytdPTY1NTM1JkM7ZWxzZXtpZighKDE2JlQpKXtpZig2'@;
put 'NCZUKXtpZigzMiZUKXtXLm1vZGU9MTI7YnJlYWsgZX1LLm1zZz0iaW52YWxpZCBsaXRlcmFsL2xlbmd0aCBjb2RlIixXLm1vZGU9MzA7YnJlYWsgZX1DPVZbKDY1NTM1JkMpKyhTZSYoMTw8VCktMSldO2NvbnRpbnVlIHR9Zm9yKEg9NjU1MzUmQywoVCY9MTUpJiYoamU8VCYmKFNlKz1BW1kr'@;
put 'K108PGplLGplKz04KSxIKz1TZSYoMTw8VCktMSxTZT4+Pj1ULGplLT1UKSxqZTwxNSYmKFNlKz1BW1krK108PGplLFNlKz1BW1krK108PChqZSs9OCksamUrPTgpLEM9cFtTZSZ4XTs7KXtpZihTZT4+Pj1UPUM+Pj4yNCxqZS09VCwxNiYoVD1DPj4+MTYmMjU1KSl7aWYoaj02NTUzNSZDLGpl'@;
put 'PChUJj0xNSkmJihTZSs9QVtZKytdPDxqZSwoamUrPTgpPFQmJihTZSs9QVtZKytdPDxqZSxqZSs9OCkpLChqKz1TZSYoMTw8VCktMSk+aWUpe0subXNnPSJpbnZhbGlkIGRpc3RhbmNlIHRvbyBmYXIgYmFjayIsVy5tb2RlPTMwO2JyZWFrIGV9aWYoU2U+Pj49VCxqZS09VCxqPihUPWVlLUop'@;
put 'KXtpZigoVD1qLVQpPm1lJiZXLnNhbmUpe0subXNnPSJpbnZhbGlkIGRpc3RhbmNlIHRvbyBmYXIgYmFjayIsVy5tb2RlPTMwO2JyZWFrIGV9aWYoRT0wLG09VGUsMD09PV9lKXtpZihFKz1sZS1ULFQ8SCl7SC09VDtkb3thZVtlZSsrXT1UZVtFKytdfXdoaWxlKC0tVCk7RT1lZS1qLG09YWV9'@;
put 'fWVsc2UgaWYoX2U8VCl7aWYoRSs9bGUrX2UtVCwoVC09X2UpPEgpe0gtPVQ7ZG97YWVbZWUrK109VGVbRSsrXX13aGlsZSgtLVQpO2lmKEU9MCxfZTxIKXtILT1UPV9lO2Rve2FlW2VlKytdPVRlW0UrK119d2hpbGUoLS1UKTtFPWVlLWosbT1hZX19fWVsc2UgaWYoRSs9X2UtVCxUPEgpe0gt'@;
put 'PVQ7ZG97YWVbZWUrK109VGVbRSsrXX13aGlsZSgtLVQpO0U9ZWUtaixtPWFlfWZvcig7SD4yOylhZVtlZSsrXT1tW0UrK10sYWVbZWUrK109bVtFKytdLGFlW2VlKytdPW1bRSsrXSxILT0zO0gmJihhZVtlZSsrXT1tW0UrK10sSD4xJiYoYWVbZWUrK109bVtFKytdKSl9ZWxzZXtFPWVlLWo7'@;
put 'ZG97YWVbZWUrK109YWVbRSsrXSxhZVtlZSsrXT1hZVtFKytdLGFlW2VlKytdPWFlW0UrK10sSC09M313aGlsZShIPjIpO0gmJihhZVtlZSsrXT1hZVtFKytdLEg+MSYmKGFlW2VlKytdPWFlW0UrK10pKX1icmVha31pZig2NCZUKXtLLm1zZz0iaW52YWxpZCBkaXN0YW5jZSBjb2RlIixXLm1v'@;
put 'ZGU9MzA7YnJlYWsgZX1DPXBbKDY1NTM1JkMpKyhTZSYoMTw8VCktMSldfX1icmVha319d2hpbGUoWTxxJiZlZTxuZSk7U2UmPSgxPDwoamUtPShIPWplPj4zKTw8MykpLTEsSy5uZXh0X2luPVktPUgsSy5uZXh0X291dD1lZSxLLmF2YWlsX2luPVk8cT9xLVkrNTo1LShZLXEpLEsuYXZhaWxf'@;
put 'b3V0PWVlPG5lP25lLWVlKzI1NzoyNTctKGVlLW5lKSxXLmhvbGQ9U2UsVy5iaXRzPWplfX0se31dLDM1OltmdW5jdGlvbihQLEYsTyl7InVzZSBzdHJpY3QiO3ZhciB6PVAoIi4uL3V0aWxzL2NvbW1vbiIpLE49UCgiLi9hZGxlcjMyIiksTD1QKCIuL2NyYzMyIiksSz1QKCIuL2luZmZhc3Qi'@;
put 'KSxVPVAoIi4vaW5mdHJlZXMiKSxpZT0wLF9lPS0yLHA9MSx5dD04NTIsTXQ9NTkyO2Z1bmN0aW9uICRlKEF0KXtyZXR1cm4oQXQ+Pj4yNCYyNTUpKyhBdD4+PjgmNjUyODApKygoNjUyODAmQXQpPDw4KSsoKDI1NSZBdCk8PDI0KX1mdW5jdGlvbiB0dCgpe3RoaXMubW9kZT0wLHRoaXMubGFz'@;
put 'dD0hMSx0aGlzLndyYXA9MCx0aGlzLmhhdmVkaWN0PSExLHRoaXMuZmxhZ3M9MCx0aGlzLmRtYXg9MCx0aGlzLmNoZWNrPTAsdGhpcy50b3RhbD0wLHRoaXMuaGVhZD1udWxsLHRoaXMud2JpdHM9MCx0aGlzLndzaXplPTAsdGhpcy53aGF2ZT0wLHRoaXMud25leHQ9MCx0aGlzLndpbmRvdz1u'@;
put 'dWxsLHRoaXMuaG9sZD0wLHRoaXMuYml0cz0wLHRoaXMubGVuZ3RoPTAsdGhpcy5vZmZzZXQ9MCx0aGlzLmV4dHJhPTAsdGhpcy5sZW5jb2RlPW51bGwsdGhpcy5kaXN0Y29kZT1udWxsLHRoaXMubGVuYml0cz0wLHRoaXMuZGlzdGJpdHM9MCx0aGlzLm5jb2RlPTAsdGhpcy5ubGVuPTAsdGhp'@;
put 'cy5uZGlzdD0wLHRoaXMuaGF2ZT0wLHRoaXMubmV4dD1udWxsLHRoaXMubGVucz1uZXcgei5CdWYxNigzMjApLHRoaXMud29yaz1uZXcgei5CdWYxNigyODgpLHRoaXMubGVuZHluPW51bGwsdGhpcy5kaXN0ZHluPW51bGwsdGhpcy5zYW5lPTAsdGhpcy5iYWNrPTAsdGhpcy53YXM9MH1mdW5j'@;
put 'dGlvbiBIZShBdCl7dmFyIFJuO3JldHVybiBBdCYmQXQuc3RhdGU/KEF0LnRvdGFsX2luPUF0LnRvdGFsX291dD0oUm49QXQuc3RhdGUpLnRvdGFsPTAsQXQubXNnPSIiLFJuLndyYXAmJihBdC5hZGxlcj0xJlJuLndyYXApLFJuLm1vZGU9cCxSbi5sYXN0PTAsUm4uaGF2ZWRpY3Q9MCxSbi5k'@;
put 'bWF4PTMyNzY4LFJuLmhlYWQ9bnVsbCxSbi5ob2xkPTAsUm4uYml0cz0wLFJuLmxlbmNvZGU9Um4ubGVuZHluPW5ldyB6LkJ1ZjMyKHl0KSxSbi5kaXN0Y29kZT1Sbi5kaXN0ZHluPW5ldyB6LkJ1ZjMyKE10KSxSbi5zYW5lPTEsUm4uYmFjaz0tMSxpZSk6X2V9ZnVuY3Rpb24gdXQoQXQpe3Zh'@;
put 'ciBSbjtyZXR1cm4gQXQmJkF0LnN0YXRlPygoUm49QXQuc3RhdGUpLndzaXplPTAsUm4ud2hhdmU9MCxSbi53bmV4dD0wLEhlKEF0KSk6X2V9ZnVuY3Rpb24gcXQoQXQsUm4pe3ZhciBzdCxVdDtyZXR1cm4hQXR8fCFBdC5zdGF0ZXx8KFV0PUF0LnN0YXRlLFJuPDA/KHN0PTAsUm49LVJuKToo'@;
put 'c3Q9MSsoUm4+PjQpLFJuPDQ4JiYoUm4mPTE1KSksUm4mJihSbjw4fHxSbj4xNSkpP19lOihudWxsIT09VXQud2luZG93JiZVdC53Yml0cyE9PVJuJiYoVXQud2luZG93PW51bGwpLFV0LndyYXA9c3QsVXQud2JpdHM9Um4sdXQoQXQpKX1mdW5jdGlvbiBSdChBdCxSbil7dmFyIHN0LFV0O3Jl'@;
put 'dHVybiBBdD8oVXQ9bmV3IHR0LEF0LnN0YXRlPVV0LFV0LndpbmRvdz1udWxsLChzdD1xdChBdCxSbikpIT09aWUmJihBdC5zdGF0ZT1udWxsKSxzdCk6X2V9dmFyIFF0LHNuLGNpPSEwO2Z1bmN0aW9uIFJpKEF0KXtpZihjaSl7dmFyIFJuO2ZvcihRdD1uZXcgei5CdWYzMig1MTIpLHNuPW5l'@;
put 'dyB6LkJ1ZjMyKDMyKSxSbj0wO1JuPDE0NDspQXQubGVuc1tSbisrXT04O2Zvcig7Um48MjU2OylBdC5sZW5zW1JuKytdPTk7Zm9yKDtSbjwyODA7KUF0LmxlbnNbUm4rK109Nztmb3IoO1JuPDI4ODspQXQubGVuc1tSbisrXT04O2ZvcihVKDEsQXQubGVucywwLDI4OCxRdCwwLEF0Lndvcmss'@;
put 'e2JpdHM6OX0pLFJuPTA7Um48MzI7KUF0LmxlbnNbUm4rK109NTtVKDIsQXQubGVucywwLDMyLHNuLDAsQXQud29yayx7Yml0czo1fSksY2k9ITF9QXQubGVuY29kZT1RdCxBdC5sZW5iaXRzPTksQXQuZGlzdGNvZGU9c24sQXQuZGlzdGJpdHM9NX1PLmluZmxhdGVSZXNldD11dCxPLmluZmxh'@;
put 'dGVSZXNldDI9cXQsTy5pbmZsYXRlUmVzZXRLZWVwPUhlLE8uaW5mbGF0ZUluaXQ9ZnVuY3Rpb24gUHQoQXQpe3JldHVybiBSdChBdCwxNSl9LE8uaW5mbGF0ZUluaXQyPVJ0LE8uaW5mbGF0ZT1mdW5jdGlvbiBmdChBdCxSbil7dmFyIHN0LFV0LHJpLFdlLFR0LG5yLGh0LHh0LGpuLHJuLHp0'@;
put 'LGhpLGNuLGZuLFh0LGVuLHVhLEVpLHZyLFduLCRpLGVpLFZpLE5pLElpPTAsUXI9bmV3IHouQnVmOCg0KSxEYT1bMTYsMTcsMTgsMCw4LDcsOSw2LDEwLDUsMTEsNCwxMiwzLDEzLDIsMTQsMSwxNV07aWYoIUF0fHwhQXQuc3RhdGV8fCFBdC5vdXRwdXR8fCFBdC5pbnB1dCYmMCE9PUF0LmF2'@;
put 'YWlsX2luKXJldHVybiBfZTsxMj09PShzdD1BdC5zdGF0ZSkubW9kZSYmKHN0Lm1vZGU9MTMpLFR0PUF0Lm5leHRfb3V0LHJpPUF0Lm91dHB1dCxXZT1BdC5uZXh0X2luLFV0PUF0LmlucHV0LHh0PXN0LmhvbGQsam49c3QuYml0cyxybj1ucj1BdC5hdmFpbF9pbix6dD1odD1BdC5hdmFpbF9v'@;
put 'dXQsZWk9aWU7ZTpmb3IoOzspc3dpdGNoKHN0Lm1vZGUpe2Nhc2UgcDppZigwPT09c3Qud3JhcCl7c3QubW9kZT0xMzticmVha31mb3IoO2puPDE2Oyl7aWYoMD09PW5yKWJyZWFrIGU7bnItLSx4dCs9VXRbV2UrK108PGpuLGpuKz04fWlmKDImc3Qud3JhcCYmMzU2MTU9PT14dCl7c3QuY2hl'@;
put 'Y2s9MCxRclswXT0yNTUmeHQsUXJbMV09eHQ+Pj44JjI1NSxzdC5jaGVjaz1MKHN0LmNoZWNrLFFyLDIsMCkseHQ9MCxqbj0wLHN0Lm1vZGU9MjticmVha31pZihzdC5mbGFncz0wLHN0LmhlYWQmJihzdC5oZWFkLmRvbmU9ITEpLCEoMSZzdC53cmFwKXx8KCgoMjU1Jnh0KTw8OCkrKHh0Pj44'@;
put 'KSklMzEpe0F0Lm1zZz0iaW5jb3JyZWN0IGhlYWRlciBjaGVjayIsc3QubW9kZT0zMDticmVha31pZig4IT0oMTUmeHQpKXtBdC5tc2c9InVua25vd24gY29tcHJlc3Npb24gbWV0aG9kIixzdC5tb2RlPTMwO2JyZWFrfWlmKGpuLT00LCRpPTgrKDE1Jih4dD4+Pj00KSksMD09PXN0LndiaXRz'@;
put 'KXN0LndiaXRzPSRpO2Vsc2UgaWYoJGk+c3Qud2JpdHMpe0F0Lm1zZz0iaW52YWxpZCB3aW5kb3cgc2l6ZSIsc3QubW9kZT0zMDticmVha31zdC5kbWF4PTE8PCRpLEF0LmFkbGVyPXN0LmNoZWNrPTEsc3QubW9kZT01MTImeHQ/MTA6MTIseHQ9MCxqbj0wO2JyZWFrO2Nhc2UgMjpmb3IoO2pu'@;
put 'PDE2Oyl7aWYoMD09PW5yKWJyZWFrIGU7bnItLSx4dCs9VXRbV2UrK108PGpuLGpuKz04fWlmKHN0LmZsYWdzPXh0LDghPSgyNTUmc3QuZmxhZ3MpKXtBdC5tc2c9InVua25vd24gY29tcHJlc3Npb24gbWV0aG9kIixzdC5tb2RlPTMwO2JyZWFrfWlmKDU3MzQ0JnN0LmZsYWdzKXtBdC5tc2c9'@;
put 'InVua25vd24gaGVhZGVyIGZsYWdzIHNldCIsc3QubW9kZT0zMDticmVha31zdC5oZWFkJiYoc3QuaGVhZC50ZXh0PXh0Pj44JjEpLDUxMiZzdC5mbGFncyYmKFFyWzBdPTI1NSZ4dCxRclsxXT14dD4+PjgmMjU1LHN0LmNoZWNrPUwoc3QuY2hlY2ssUXIsMiwwKSkseHQ9MCxqbj0wLHN0Lm1v'@;
put 'ZGU9MztjYXNlIDM6Zm9yKDtqbjwzMjspe2lmKDA9PT1ucilicmVhayBlO25yLS0seHQrPVV0W1dlKytdPDxqbixqbis9OH1zdC5oZWFkJiYoc3QuaGVhZC50aW1lPXh0KSw1MTImc3QuZmxhZ3MmJihRclswXT0yNTUmeHQsUXJbMV09eHQ+Pj44JjI1NSxRclsyXT14dD4+PjE2JjI1NSxRclsz'@;
put 'XT14dD4+PjI0JjI1NSxzdC5jaGVjaz1MKHN0LmNoZWNrLFFyLDQsMCkpLHh0PTAsam49MCxzdC5tb2RlPTQ7Y2FzZSA0OmZvcig7am48MTY7KXtpZigwPT09bnIpYnJlYWsgZTtuci0tLHh0Kz1VdFtXZSsrXTw8am4sam4rPTh9c3QuaGVhZCYmKHN0LmhlYWQueGZsYWdzPTI1NSZ4dCxzdC5o'@;
put 'ZWFkLm9zPXh0Pj44KSw1MTImc3QuZmxhZ3MmJihRclswXT0yNTUmeHQsUXJbMV09eHQ+Pj44JjI1NSxzdC5jaGVjaz1MKHN0LmNoZWNrLFFyLDIsMCkpLHh0PTAsam49MCxzdC5tb2RlPTU7Y2FzZSA1OmlmKDEwMjQmc3QuZmxhZ3Mpe2Zvcig7am48MTY7KXtpZigwPT09bnIpYnJlYWsgZTtu'@;
put 'ci0tLHh0Kz1VdFtXZSsrXTw8am4sam4rPTh9c3QubGVuZ3RoPXh0LHN0LmhlYWQmJihzdC5oZWFkLmV4dHJhX2xlbj14dCksNTEyJnN0LmZsYWdzJiYoUXJbMF09MjU1Jnh0LFFyWzFdPXh0Pj4+OCYyNTUsc3QuY2hlY2s9TChzdC5jaGVjayxRciwyLDApKSx4dD0wLGpuPTB9ZWxzZSBzdC5o'@;
put 'ZWFkJiYoc3QuaGVhZC5leHRyYT1udWxsKTtzdC5tb2RlPTY7Y2FzZSA2OmlmKDEwMjQmc3QuZmxhZ3MmJigoaGk9c3QubGVuZ3RoKT5uciYmKGhpPW5yKSxoaSYmKHN0LmhlYWQmJigkaT1zdC5oZWFkLmV4dHJhX2xlbi1zdC5sZW5ndGgsc3QuaGVhZC5leHRyYXx8KHN0LmhlYWQuZXh0cmE9'@;
put 'bmV3IEFycmF5KHN0LmhlYWQuZXh0cmFfbGVuKSksei5hcnJheVNldChzdC5oZWFkLmV4dHJhLFV0LFdlLGhpLCRpKSksNTEyJnN0LmZsYWdzJiYoc3QuY2hlY2s9TChzdC5jaGVjayxVdCxoaSxXZSkpLG5yLT1oaSxXZSs9aGksc3QubGVuZ3RoLT1oaSksc3QubGVuZ3RoKSlicmVhayBlO3N0'@;
put 'Lmxlbmd0aD0wLHN0Lm1vZGU9NztjYXNlIDc6aWYoMjA0OCZzdC5mbGFncyl7aWYoMD09PW5yKWJyZWFrIGU7aGk9MDtkb3skaT1VdFtXZStoaSsrXSxzdC5oZWFkJiYkaSYmc3QubGVuZ3RoPDY1NTM2JiYoc3QuaGVhZC5uYW1lKz1TdHJpbmcuZnJvbUNoYXJDb2RlKCRpKSl9d2hpbGUoJGkm'@;
put 'JmhpPG5yKTtpZig1MTImc3QuZmxhZ3MmJihzdC5jaGVjaz1MKHN0LmNoZWNrLFV0LGhpLFdlKSksbnItPWhpLFdlKz1oaSwkaSlicmVhayBlfWVsc2Ugc3QuaGVhZCYmKHN0LmhlYWQubmFtZT1udWxsKTtzdC5sZW5ndGg9MCxzdC5tb2RlPTg7Y2FzZSA4OmlmKDQwOTYmc3QuZmxhZ3Mpe2lm'@;
put 'KDA9PT1ucilicmVhayBlO2hpPTA7ZG97JGk9VXRbV2UraGkrK10sc3QuaGVhZCYmJGkmJnN0Lmxlbmd0aDw2NTUzNiYmKHN0LmhlYWQuY29tbWVudCs9U3RyaW5nLmZyb21DaGFyQ29kZSgkaSkpfXdoaWxlKCRpJiZoaTxucik7aWYoNTEyJnN0LmZsYWdzJiYoc3QuY2hlY2s9TChzdC5jaGVj'@;
put 'ayxVdCxoaSxXZSkpLG5yLT1oaSxXZSs9aGksJGkpYnJlYWsgZX1lbHNlIHN0LmhlYWQmJihzdC5oZWFkLmNvbW1lbnQ9bnVsbCk7c3QubW9kZT05O2Nhc2UgOTppZig1MTImc3QuZmxhZ3Mpe2Zvcig7am48MTY7KXtpZigwPT09bnIpYnJlYWsgZTtuci0tLHh0Kz1VdFtXZSsrXTw8am4sam4r'@;
put 'PTh9aWYoeHQhPT0oNjU1MzUmc3QuY2hlY2spKXtBdC5tc2c9ImhlYWRlciBjcmMgbWlzbWF0Y2giLHN0Lm1vZGU9MzA7YnJlYWt9eHQ9MCxqbj0wfXN0LmhlYWQmJihzdC5oZWFkLmhjcmM9c3QuZmxhZ3M+PjkmMSxzdC5oZWFkLmRvbmU9ITApLEF0LmFkbGVyPXN0LmNoZWNrPTAsc3QubW9k'@;
put 'ZT0xMjticmVhaztjYXNlIDEwOmZvcig7am48MzI7KXtpZigwPT09bnIpYnJlYWsgZTtuci0tLHh0Kz1VdFtXZSsrXTw8am4sam4rPTh9QXQuYWRsZXI9c3QuY2hlY2s9JGUoeHQpLHh0PTAsam49MCxzdC5tb2RlPTExO2Nhc2UgMTE6aWYoMD09PXN0LmhhdmVkaWN0KXJldHVybiBBdC5uZXh0'@;
put 'X291dD1UdCxBdC5hdmFpbF9vdXQ9aHQsQXQubmV4dF9pbj1XZSxBdC5hdmFpbF9pbj1ucixzdC5ob2xkPXh0LHN0LmJpdHM9am4sMjtBdC5hZGxlcj1zdC5jaGVjaz0xLHN0Lm1vZGU9MTI7Y2FzZSAxMjppZig1PT09Um58fDY9PT1SbilicmVhayBlO2Nhc2UgMTM6aWYoc3QubGFzdCl7eHQ+'@;
put 'Pj49NyZqbixqbi09NyZqbixzdC5tb2RlPTI3O2JyZWFrfWZvcig7am48Mzspe2lmKDA9PT1ucilicmVhayBlO25yLS0seHQrPVV0W1dlKytdPDxqbixqbis9OH1zd2l0Y2goc3QubGFzdD0xJnh0LGpuLT0xLDMmKHh0Pj4+PTEpKXtjYXNlIDA6c3QubW9kZT0xNDticmVhaztjYXNlIDE6aWYo'@;
put 'Umkoc3QpLHN0Lm1vZGU9MjAsNj09PVJuKXt4dD4+Pj0yLGpuLT0yO2JyZWFrIGV9YnJlYWs7Y2FzZSAyOnN0Lm1vZGU9MTc7YnJlYWs7Y2FzZSAzOkF0Lm1zZz0iaW52YWxpZCBibG9jayB0eXBlIixzdC5tb2RlPTMwfXh0Pj4+PTIsam4tPTI7YnJlYWs7Y2FzZSAxNDpmb3IoeHQ+Pj49NyZq'@;
put 'bixqbi09NyZqbjtqbjwzMjspe2lmKDA9PT1ucilicmVhayBlO25yLS0seHQrPVV0W1dlKytdPDxqbixqbis9OH1pZigoNjU1MzUmeHQpIT0oeHQ+Pj4xNl42NTUzNSkpe0F0Lm1zZz0iaW52YWxpZCBzdG9yZWQgYmxvY2sgbGVuZ3RocyIsc3QubW9kZT0zMDticmVha31pZihzdC5sZW5ndGg9'@;
put 'NjU1MzUmeHQseHQ9MCxqbj0wLHN0Lm1vZGU9MTUsNj09PVJuKWJyZWFrIGU7Y2FzZSAxNTpzdC5tb2RlPTE2O2Nhc2UgMTY6aWYoaGk9c3QubGVuZ3RoKXtpZihoaT5uciYmKGhpPW5yKSxoaT5odCYmKGhpPWh0KSwwPT09aGkpYnJlYWsgZTt6LmFycmF5U2V0KHJpLFV0LFdlLGhpLFR0KSxu'@;
put 'ci09aGksV2UrPWhpLGh0LT1oaSxUdCs9aGksc3QubGVuZ3RoLT1oaTticmVha31zdC5tb2RlPTEyO2JyZWFrO2Nhc2UgMTc6Zm9yKDtqbjwxNDspe2lmKDA9PT1ucilicmVhayBlO25yLS0seHQrPVV0W1dlKytdPDxqbixqbis9OH1pZihzdC5ubGVuPTI1NysoMzEmeHQpLGpuLT01LHN0Lm5k'@;
put 'aXN0PTErKDMxJih4dD4+Pj01KSksam4tPTUsc3QubmNvZGU9NCsoMTUmKHh0Pj4+PTUpKSx4dD4+Pj00LGpuLT00LHN0Lm5sZW4+Mjg2fHxzdC5uZGlzdD4zMCl7QXQubXNnPSJ0b28gbWFueSBsZW5ndGggb3IgZGlzdGFuY2Ugc3ltYm9scyIsc3QubW9kZT0zMDticmVha31zdC5oYXZlPTAs'@;
put 'c3QubW9kZT0xODtjYXNlIDE4OmZvcig7c3QuaGF2ZTxzdC5uY29kZTspe2Zvcig7am48Mzspe2lmKDA9PT1ucilicmVhayBlO25yLS0seHQrPVV0W1dlKytdPDxqbixqbis9OH1zdC5sZW5zW0RhW3N0LmhhdmUrK11dPTcmeHQseHQ+Pj49Myxqbi09M31mb3IoO3N0LmhhdmU8MTk7KXN0Lmxl'@;
put 'bnNbRGFbc3QuaGF2ZSsrXV09MDtpZihzdC5sZW5jb2RlPXN0LmxlbmR5bixzdC5sZW5iaXRzPTcsZWk9VSgwLHN0LmxlbnMsMCwxOSxzdC5sZW5jb2RlLDAsc3Qud29yayxWaT17Yml0czpzdC5sZW5iaXRzfSksc3QubGVuYml0cz1WaS5iaXRzLGVpKXtBdC5tc2c9ImludmFsaWQgY29kZSBs'@;
put 'ZW5ndGhzIHNldCIsc3QubW9kZT0zMDticmVha31zdC5oYXZlPTAsc3QubW9kZT0xOTtjYXNlIDE5OmZvcig7c3QuaGF2ZTxzdC5ubGVuK3N0Lm5kaXN0Oyl7Zm9yKDtlbj0oSWk9c3QubGVuY29kZVt4dCYoMTw8c3QubGVuYml0cyktMV0pPj4+MTYmMjU1LHVhPTY1NTM1JklpLCEoKFh0PUlp'@;
put 'Pj4+MjQpPD1qbik7KXtpZigwPT09bnIpYnJlYWsgZTtuci0tLHh0Kz1VdFtXZSsrXTw8am4sam4rPTh9aWYodWE8MTYpeHQ+Pj49WHQsam4tPVh0LHN0LmxlbnNbc3QuaGF2ZSsrXT11YTtlbHNle2lmKDE2PT09dWEpe2ZvcihOaT1YdCsyO2puPE5pOyl7aWYoMD09PW5yKWJyZWFrIGU7bnIt'@;
put 'LSx4dCs9VXRbV2UrK108PGpuLGpuKz04fWlmKHh0Pj4+PVh0LGpuLT1YdCwwPT09c3QuaGF2ZSl7QXQubXNnPSJpbnZhbGlkIGJpdCBsZW5ndGggcmVwZWF0IixzdC5tb2RlPTMwO2JyZWFrfSRpPXN0LmxlbnNbc3QuaGF2ZS0xXSxoaT0zKygzJnh0KSx4dD4+Pj0yLGpuLT0yfWVsc2UgaWYo'@;
put 'MTc9PT11YSl7Zm9yKE5pPVh0KzM7am48Tmk7KXtpZigwPT09bnIpYnJlYWsgZTtuci0tLHh0Kz1VdFtXZSsrXTw8am4sam4rPTh9am4tPVh0LCRpPTAsaGk9MysoNyYoeHQ+Pj49WHQpKSx4dD4+Pj0zLGpuLT0zfWVsc2V7Zm9yKE5pPVh0Kzc7am48Tmk7KXtpZigwPT09bnIpYnJlYWsgZTtu'@;
put 'ci0tLHh0Kz1VdFtXZSsrXTw8am4sam4rPTh9am4tPVh0LCRpPTAsaGk9MTErKDEyNyYoeHQ+Pj49WHQpKSx4dD4+Pj03LGpuLT03fWlmKHN0LmhhdmUraGk+c3QubmxlbitzdC5uZGlzdCl7QXQubXNnPSJpbnZhbGlkIGJpdCBsZW5ndGggcmVwZWF0IixzdC5tb2RlPTMwO2JyZWFrfWZvcig7'@;
put 'aGktLTspc3QubGVuc1tzdC5oYXZlKytdPSRpfX1pZigzMD09PXN0Lm1vZGUpYnJlYWs7aWYoMD09PXN0LmxlbnNbMjU2XSl7QXQubXNnPSJpbnZhbGlkIGNvZGUgLS0gbWlzc2luZyBlbmQtb2YtYmxvY2siLHN0Lm1vZGU9MzA7YnJlYWt9aWYoc3QubGVuYml0cz05LGVpPVUoMSxzdC5sZW5z'@;
put 'LDAsc3QubmxlbixzdC5sZW5jb2RlLDAsc3Qud29yayxWaT17Yml0czpzdC5sZW5iaXRzfSksc3QubGVuYml0cz1WaS5iaXRzLGVpKXtBdC5tc2c9ImludmFsaWQgbGl0ZXJhbC9sZW5ndGhzIHNldCIsc3QubW9kZT0zMDticmVha31pZihzdC5kaXN0Yml0cz02LHN0LmRpc3Rjb2RlPXN0LmRp'@;
put 'c3RkeW4sZWk9VSgyLHN0LmxlbnMsc3QubmxlbixzdC5uZGlzdCxzdC5kaXN0Y29kZSwwLHN0LndvcmssVmk9e2JpdHM6c3QuZGlzdGJpdHN9KSxzdC5kaXN0Yml0cz1WaS5iaXRzLGVpKXtBdC5tc2c9ImludmFsaWQgZGlzdGFuY2VzIHNldCIsc3QubW9kZT0zMDticmVha31pZihzdC5tb2Rl'@;
put 'PTIwLDY9PT1SbilicmVhayBlO2Nhc2UgMjA6c3QubW9kZT0yMTtjYXNlIDIxOmlmKG5yPj02JiZodD49MjU4KXtBdC5uZXh0X291dD1UdCxBdC5hdmFpbF9vdXQ9aHQsQXQubmV4dF9pbj1XZSxBdC5hdmFpbF9pbj1ucixzdC5ob2xkPXh0LHN0LmJpdHM9am4sSyhBdCx6dCksVHQ9QXQubmV4'@;
put 'dF9vdXQscmk9QXQub3V0cHV0LGh0PUF0LmF2YWlsX291dCxXZT1BdC5uZXh0X2luLFV0PUF0LmlucHV0LG5yPUF0LmF2YWlsX2luLHh0PXN0LmhvbGQsam49c3QuYml0cywxMj09PXN0Lm1vZGUmJihzdC5iYWNrPS0xKTticmVha31mb3Ioc3QuYmFjaz0wO2VuPShJaT1zdC5sZW5jb2RlW3h0'@;
put 'JigxPDxzdC5sZW5iaXRzKS0xXSk+Pj4xNiYyNTUsdWE9NjU1MzUmSWksISgoWHQ9SWk+Pj4yNCk8PWpuKTspe2lmKDA9PT1ucilicmVhayBlO25yLS0seHQrPVV0W1dlKytdPDxqbixqbis9OH1pZihlbiYmISgyNDAmZW4pKXtmb3IoRWk9WHQsdnI9ZW4sV249dWE7ZW49KElpPXN0LmxlbmNv'@;
put 'ZGVbV24rKCh4dCYoMTw8RWkrdnIpLTEpPj5FaSldKT4+PjE2JjI1NSx1YT02NTUzNSZJaSwhKEVpKyhYdD1JaT4+PjI0KTw9am4pOyl7aWYoMD09PW5yKWJyZWFrIGU7bnItLSx4dCs9VXRbV2UrK108PGpuLGpuKz04fXh0Pj4+PUVpLGpuLT1FaSxzdC5iYWNrKz1FaX1pZih4dD4+Pj1YdCxq'@;
put 'bi09WHQsc3QuYmFjays9WHQsc3QubGVuZ3RoPXVhLDA9PT1lbil7c3QubW9kZT0yNjticmVha31pZigzMiZlbil7c3QuYmFjaz0tMSxzdC5tb2RlPTEyO2JyZWFrfWlmKDY0JmVuKXtBdC5tc2c9ImludmFsaWQgbGl0ZXJhbC9sZW5ndGggY29kZSIsc3QubW9kZT0zMDticmVha31zdC5leHRy'@;
put 'YT0xNSZlbixzdC5tb2RlPTIyO2Nhc2UgMjI6aWYoc3QuZXh0cmEpe2ZvcihOaT1zdC5leHRyYTtqbjxOaTspe2lmKDA9PT1ucilicmVhayBlO25yLS0seHQrPVV0W1dlKytdPDxqbixqbis9OH1zdC5sZW5ndGgrPXh0JigxPDxzdC5leHRyYSktMSx4dD4+Pj1zdC5leHRyYSxqbi09c3QuZXh0'@;
put 'cmEsc3QuYmFjays9c3QuZXh0cmF9c3Qud2FzPXN0Lmxlbmd0aCxzdC5tb2RlPTIzO2Nhc2UgMjM6Zm9yKDtlbj0oSWk9c3QuZGlzdGNvZGVbeHQmKDE8PHN0LmRpc3RiaXRzKS0xXSk+Pj4xNiYyNTUsdWE9NjU1MzUmSWksISgoWHQ9SWk+Pj4yNCk8PWpuKTspe2lmKDA9PT1ucilicmVhayBl'@;
put 'O25yLS0seHQrPVV0W1dlKytdPDxqbixqbis9OH1pZighKDI0MCZlbikpe2ZvcihFaT1YdCx2cj1lbixXbj11YTtlbj0oSWk9c3QuZGlzdGNvZGVbV24rKCh4dCYoMTw8RWkrdnIpLTEpPj5FaSldKT4+PjE2JjI1NSx1YT02NTUzNSZJaSwhKEVpKyhYdD1JaT4+PjI0KTw9am4pOyl7aWYoMD09'@;
put 'PW5yKWJyZWFrIGU7bnItLSx4dCs9VXRbV2UrK108PGpuLGpuKz04fXh0Pj4+PUVpLGpuLT1FaSxzdC5iYWNrKz1FaX1pZih4dD4+Pj1YdCxqbi09WHQsc3QuYmFjays9WHQsNjQmZW4pe0F0Lm1zZz0iaW52YWxpZCBkaXN0YW5jZSBjb2RlIixzdC5tb2RlPTMwO2JyZWFrfXN0Lm9mZnNldD11'@;
put 'YSxzdC5leHRyYT0xNSZlbixzdC5tb2RlPTI0O2Nhc2UgMjQ6aWYoc3QuZXh0cmEpe2ZvcihOaT1zdC5leHRyYTtqbjxOaTspe2lmKDA9PT1ucilicmVhayBlO25yLS0seHQrPVV0W1dlKytdPDxqbixqbis9OH1zdC5vZmZzZXQrPXh0JigxPDxzdC5leHRyYSktMSx4dD4+Pj1zdC5leHRyYSxq'@;
put 'bi09c3QuZXh0cmEsc3QuYmFjays9c3QuZXh0cmF9aWYoc3Qub2Zmc2V0PnN0LmRtYXgpe0F0Lm1zZz0iaW52YWxpZCBkaXN0YW5jZSB0b28gZmFyIGJhY2siLHN0Lm1vZGU9MzA7YnJlYWt9c3QubW9kZT0yNTtjYXNlIDI1OmlmKDA9PT1odClicmVhayBlO2lmKHN0Lm9mZnNldD4oaGk9enQt'@;
put 'aHQpKXtpZigoaGk9c3Qub2Zmc2V0LWhpKT5zdC53aGF2ZSYmc3Quc2FuZSl7QXQubXNnPSJpbnZhbGlkIGRpc3RhbmNlIHRvbyBmYXIgYmFjayIsc3QubW9kZT0zMDticmVha31jbj1oaT5zdC53bmV4dD9zdC53c2l6ZS0oaGktPXN0LnduZXh0KTpzdC53bmV4dC1oaSxoaT5zdC5sZW5ndGgm'@;
put 'JihoaT1zdC5sZW5ndGgpLGZuPXN0LndpbmRvd31lbHNlIGZuPXJpLGNuPVR0LXN0Lm9mZnNldCxoaT1zdC5sZW5ndGg7aGk+aHQmJihoaT1odCksaHQtPWhpLHN0Lmxlbmd0aC09aGk7ZG97cmlbVHQrK109Zm5bY24rK119d2hpbGUoLS1oaSk7MD09PXN0Lmxlbmd0aCYmKHN0Lm1vZGU9MjEp'@;
put 'O2JyZWFrO2Nhc2UgMjY6aWYoMD09PWh0KWJyZWFrIGU7cmlbVHQrK109c3QubGVuZ3RoLGh0LS0sc3QubW9kZT0yMTticmVhaztjYXNlIDI3OmlmKHN0LndyYXApe2Zvcig7am48MzI7KXtpZigwPT09bnIpYnJlYWsgZTtuci0tLHh0fD1VdFtXZSsrXTw8am4sam4rPTh9aWYoQXQudG90YWxf'@;
put 'b3V0Kz16dC09aHQsc3QudG90YWwrPXp0LHp0JiYoQXQuYWRsZXI9c3QuY2hlY2s9c3QuZmxhZ3M/TChzdC5jaGVjayxyaSx6dCxUdC16dCk6TihzdC5jaGVjayxyaSx6dCxUdC16dCkpLHp0PWh0LChzdC5mbGFncz94dDokZSh4dCkpIT09c3QuY2hlY2spe0F0Lm1zZz0iaW5jb3JyZWN0IGRh'@;
put 'dGEgY2hlY2siLHN0Lm1vZGU9MzA7YnJlYWt9eHQ9MCxqbj0wfXN0Lm1vZGU9Mjg7Y2FzZSAyODppZihzdC53cmFwJiZzdC5mbGFncyl7Zm9yKDtqbjwzMjspe2lmKDA9PT1ucilicmVhayBlO25yLS0seHQrPVV0W1dlKytdPDxqbixqbis9OH1pZih4dCE9PSg0Mjk0OTY3Mjk1JnN0LnRvdGFs'@;
put 'KSl7QXQubXNnPSJpbmNvcnJlY3QgbGVuZ3RoIGNoZWNrIixzdC5tb2RlPTMwO2JyZWFrfXh0PTAsam49MH1zdC5tb2RlPTI5O2Nhc2UgMjk6ZWk9MTticmVhayBlO2Nhc2UgMzA6ZWk9LTM7YnJlYWsgZTtjYXNlIDMxOnJldHVybi00O2RlZmF1bHQ6cmV0dXJuIF9lfXJldHVybiBBdC5uZXh0'@;
put 'X291dD1UdCxBdC5hdmFpbF9vdXQ9aHQsQXQubmV4dF9pbj1XZSxBdC5hdmFpbF9pbj1ucixzdC5ob2xkPXh0LHN0LmJpdHM9am4sKHN0LndzaXplfHx6dCE9PUF0LmF2YWlsX291dCYmc3QubW9kZTwzMCYmKHN0Lm1vZGU8Mjd8fDQhPT1SbikpJiZmdW5jdGlvbiBobihBdCxSbixzdCxVdCl7'@;
put 'dmFyIHJpLFdlPUF0LnN0YXRlO3JldHVybiBudWxsPT09V2Uud2luZG93JiYoV2Uud3NpemU9MTw8V2Uud2JpdHMsV2Uud25leHQ9MCxXZS53aGF2ZT0wLFdlLndpbmRvdz1uZXcgei5CdWY4KFdlLndzaXplKSksVXQ+PVdlLndzaXplPyh6LmFycmF5U2V0KFdlLndpbmRvdyxSbixzdC1XZS53'@;
put 'c2l6ZSxXZS53c2l6ZSwwKSxXZS53bmV4dD0wLFdlLndoYXZlPVdlLndzaXplKTooKHJpPVdlLndzaXplLVdlLnduZXh0KT5VdCYmKHJpPVV0KSx6LmFycmF5U2V0KFdlLndpbmRvdyxSbixzdC1VdCxyaSxXZS53bmV4dCksKFV0LT1yaSk/KHouYXJyYXlTZXQoV2Uud2luZG93LFJuLHN0LVV0'@;
put 'LFV0LDApLFdlLnduZXh0PVV0LFdlLndoYXZlPVdlLndzaXplKTooV2Uud25leHQrPXJpLFdlLnduZXh0PT09V2Uud3NpemUmJihXZS53bmV4dD0wKSxXZS53aGF2ZTxXZS53c2l6ZSYmKFdlLndoYXZlKz1yaSkpKSwwfShBdCxBdC5vdXRwdXQsQXQubmV4dF9vdXQsenQtQXQuYXZhaWxfb3V0'@;
put 'KT8oc3QubW9kZT0zMSwtNCk6KHp0LT1BdC5hdmFpbF9vdXQsQXQudG90YWxfaW4rPXJuLT1BdC5hdmFpbF9pbixBdC50b3RhbF9vdXQrPXp0LHN0LnRvdGFsKz16dCxzdC53cmFwJiZ6dCYmKEF0LmFkbGVyPXN0LmNoZWNrPXN0LmZsYWdzP0woc3QuY2hlY2sscmksenQsQXQubmV4dF9vdXQt'@;
put 'enQpOk4oc3QuY2hlY2sscmksenQsQXQubmV4dF9vdXQtenQpKSxBdC5kYXRhX3R5cGU9c3QuYml0cysoc3QubGFzdD82NDowKSsoMTI9PT1zdC5tb2RlPzEyODowKSsoMjA9PT1zdC5tb2RlfHwxNT09PXN0Lm1vZGU/MjU2OjApLCgwPT09cm4mJjA9PT16dHx8ND09PVJuKSYmZWk9PT1pZSYm'@;
put 'KGVpPS01KSxlaSl9LE8uaW5mbGF0ZUVuZD1mdW5jdGlvbiBPcihBdCl7aWYoIUF0fHwhQXQuc3RhdGUpcmV0dXJuIF9lO3ZhciBSbj1BdC5zdGF0ZTtyZXR1cm4gUm4ud2luZG93JiYoUm4ud2luZG93PW51bGwpLEF0LnN0YXRlPW51bGwsaWV9LE8uaW5mbGF0ZUdldEhlYWRlcj1mdW5jdGlv'@;
put 'biBXdChBdCxSbil7dmFyIHN0O3JldHVybiBBdCYmQXQuc3RhdGUmJjImKHN0PUF0LnN0YXRlKS53cmFwPyhzdC5oZWFkPVJuLFJuLmRvbmU9ITEsaWUpOl9lfSxPLmluZmxhdGVJbmZvPSJwYWtvIGluZmxhdGUgKGZyb20gTm9kZWNhIHByb2plY3QpIn0seyIuLi91dGlscy9jb21tb24iOjI3'@;
put 'LCIuL2FkbGVyMzIiOjI5LCIuL2NyYzMyIjozMSwiLi9pbmZmYXN0IjozNCwiLi9pbmZ0cmVlcyI6MzZ9XSwzNjpbZnVuY3Rpb24oUCxGLE8peyJ1c2Ugc3RyaWN0Ijt2YXIgej1QKCIuLi91dGlscy9jb21tb24iKSxxPVszLDQsNSw2LDcsOCw5LDEwLDExLDEzLDE1LDE3LDE5LDIzLDI3LDMx'@;
put 'LDM1LDQzLDUxLDU5LDY3LDgzLDk5LDExNSwxMzEsMTYzLDE5NSwyMjcsMjU4LDAsMF0sZWU9WzE2LDE2LDE2LDE2LDE2LDE2LDE2LDE2LDE3LDE3LDE3LDE3LDE4LDE4LDE4LDE4LDE5LDE5LDE5LDE5LDIwLDIwLDIwLDIwLDIxLDIxLDIxLDIxLDE2LDcyLDc4XSxKPVsxLDIsMyw0LDUsNyw5'@;
put 'LDEzLDE3LDI1LDMzLDQ5LDY1LDk3LDEyOSwxOTMsMjU3LDM4NSw1MTMsNzY5LDEwMjUsMTUzNywyMDQ5LDMwNzMsNDA5Nyw2MTQ1LDgxOTMsMTIyODksMTYzODUsMjQ1NzcsMCwwXSxuZT1bMTYsMTYsMTYsMTYsMTcsMTcsMTgsMTgsMTksMTksMjAsMjAsMjEsMjEsMjIsMjIsMjMsMjMsMjQs'@;
put 'MjQsMjUsMjUsMjYsMjYsMjcsMjcsMjgsMjgsMjksMjksNjQsNjRdO0YuZXhwb3J0cz1mdW5jdGlvbihsZSxtZSxfZSxUZSxTZSxqZSxWLHApe3ZhciBzZSx3ZSxVZSxKZSxvdCxYZSxJZSxWZSxrZSxiPXAuYml0cyx4PTAsQz0wLFQ9MCxIPTAsaj0wLEU9MCxtPTAsQT0wLGFlPTAsdGU9MCx4'@;
put 'ZT1udWxsLHZlPTAsemU9bmV3IHouQnVmMTYoMTYpLERlPW5ldyB6LkJ1ZjE2KDE2KSxGZT1udWxsLE9lPTA7Zm9yKHg9MDt4PD0xNTt4KyspemVbeF09MDtmb3IoQz0wO0M8VGU7QysrKXplW21lW19lK0NdXSsrO2ZvcihqPWIsSD0xNTtIPj0xJiYwPT09emVbSF07SC0tKTtpZihqPkgmJihq'@;
put 'PUgpLDA9PT1IKXJldHVybiBTZVtqZSsrXT0yMDk3MTUyMCxTZVtqZSsrXT0yMDk3MTUyMCxwLmJpdHM9MSwwO2ZvcihUPTE7VDxIJiYwPT09emVbVF07VCsrKTtmb3IoajxUJiYoaj1UKSxBPTEseD0xO3g8PTE1O3grKylpZihBPDw9MSwoQS09emVbeF0pPDApcmV0dXJuLTE7aWYoQT4wJiYo'@;
put 'MD09PWxlfHwxIT09SCkpcmV0dXJuLTE7Zm9yKERlWzFdPTAseD0xO3g8MTU7eCsrKURlW3grMV09RGVbeF0remVbeF07Zm9yKEM9MDtDPFRlO0MrKykwIT09bWVbX2UrQ10mJihWW0RlW21lW19lK0NdXSsrXT1DKTtpZigwPT09bGU/KHhlPUZlPVYsWGU9MTkpOjE9PT1sZT8oeGU9cSx2ZS09'@;
put 'MjU3LEZlPWVlLE9lLT0yNTcsWGU9MjU2KTooeGU9SixGZT1uZSxYZT0tMSksdGU9MCxDPTAseD1ULG90PWplLEU9aixtPTAsVWU9LTEsSmU9KGFlPTE8PGopLTEsMT09PWxlJiZhZT44NTJ8fDI9PT1sZSYmYWU+NTkyKXJldHVybiAxO2Zvcig7Oyl7SWU9eC1tLFZbQ108WGU/KFZlPTAsa2U9'@;
put 'VltDXSk6VltDXT5YZT8oVmU9RmVbT2UrVltDXV0sa2U9eGVbdmUrVltDXV0pOihWZT05NixrZT0wKSxzZT0xPDx4LW0sVD13ZT0xPDxFO2Rve1NlW290Kyh0ZT4+bSkrKHdlLT1zZSldPUllPDwyNHxWZTw8MTZ8a2V9d2hpbGUoMCE9PXdlKTtmb3Ioc2U9MTw8eC0xO3RlJnNlOylzZT4+PTE7'@;
put 'aWYoMCE9PXNlPyh0ZSY9c2UtMSx0ZSs9c2UpOnRlPTAsQysrLDA9PS0temVbeF0pe2lmKHg9PT1IKWJyZWFrO3g9bWVbX2UrVltDXV19aWYoeD5qJiYodGUmSmUpIT09VWUpe2ZvcigwPT09bSYmKG09aiksb3QrPVQsQT0xPDwoRT14LW0pO0UrbTxIJiYhKChBLT16ZVtFK21dKTw9MCk7KUUr'@;
put 'KyxBPDw9MTtpZihhZSs9MTw8RSwxPT09bGUmJmFlPjg1Mnx8Mj09PWxlJiZhZT41OTIpcmV0dXJuIDE7U2VbVWU9dGUmSmVdPWo8PDI0fEU8PDE2fG90LWplfX1yZXR1cm4gMCE9PXRlJiYoU2Vbb3QrdGVdPXgtbTw8MjR8NjQ8PDE2KSxwLmJpdHM9aiwwfX0seyIuLi91dGlscy9jb21tb24i'@;
put 'OjI3fV0sMzc6W2Z1bmN0aW9uKFAsRixPKXsidXNlIHN0cmljdCI7Ri5leHBvcnRzPXsyOiJuZWVkIGRpY3Rpb25hcnkiLDE6InN0cmVhbSBlbmQiLDA6IiIsIi0xIjoiZmlsZSBlcnJvciIsIi0yIjoic3RyZWFtIGVycm9yIiwiLTMiOiJkYXRhIGVycm9yIiwiLTQiOiJpbnN1ZmZpY2llbnQg'@;
put 'bWVtb3J5IiwiLTUiOiJidWZmZXIgZXJyb3IiLCItNiI6ImluY29tcGF0aWJsZSB2ZXJzaW9uIn19LHt9XSwzODpbZnVuY3Rpb24oUCxGLE8peyJ1c2Ugc3RyaWN0Ijt2YXIgej1QKCIuLi91dGlscy9jb21tb24iKTtmdW5jdGlvbiBXKGZ0KXtmb3IodmFyIE9yPWZ0Lmxlbmd0aDstLU9yPj0w'@;
put 'OylmdFtPcl09MH12YXIgamU9MTUsVj0xNixIPVswLDAsMCwwLDAsMCwwLDAsMSwxLDEsMSwyLDIsMiwyLDMsMywzLDMsNCw0LDQsNCw1LDUsNSw1LDBdLGo9WzAsMCwwLDAsMSwxLDIsMiwzLDMsNCw0LDUsNSw2LDYsNyw3LDgsOCw5LDksMTAsMTAsMTEsMTEsMTIsMTIsMTMsMTNdLEU9WzAs'@;
put 'MCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMiwzLDddLG09WzE2LDE3LDE4LDAsOCw3LDksNiwxMCw1LDExLDQsMTIsMywxMywyLDE0LDEsMTVdLGFlPW5ldyBBcnJheSg1NzYpO1coYWUpO3ZhciB0ZT1uZXcgQXJyYXkoNjApO1codGUpO3ZhciBzZT1uZXcgQXJyYXkoNTEyKTtXKHNl'@;
put 'KTt2YXIgd2U9bmV3IEFycmF5KDI1Nik7Vyh3ZSk7dmFyIFVlPW5ldyBBcnJheSgyOSk7VyhVZSk7dmFyIEplPW5ldyBBcnJheSgzMCk7VyhKZSk7dmFyIHhlLHZlLFhlLG90PWZ1bmN0aW9uKGZ0LE9yLFd0LEF0LFJuKXt0aGlzLnN0YXRpY190cmVlPWZ0LHRoaXMuZXh0cmFfYml0cz1Pcix0'@;
put 'aGlzLmV4dHJhX2Jhc2U9V3QsdGhpcy5lbGVtcz1BdCx0aGlzLm1heF9sZW5ndGg9Um4sdGhpcy5oYXNfc3RyZWU9ZnQmJmZ0Lmxlbmd0aH0semU9ZnVuY3Rpb24oZnQsT3Ipe3RoaXMuZHluX3RyZWU9ZnQsdGhpcy5tYXhfY29kZT0wLHRoaXMuc3RhdF9kZXNjPU9yfTtmdW5jdGlvbiBEZShm'@;
put 'dCl7cmV0dXJuIGZ0PDI1Nj9zZVtmdF06c2VbMjU2KyhmdD4+PjcpXX1mdW5jdGlvbiBGZShmdCxPcil7ZnQucGVuZGluZ19idWZbZnQucGVuZGluZysrXT0yNTUmT3IsZnQucGVuZGluZ19idWZbZnQucGVuZGluZysrXT1Pcj4+PjgmMjU1fWZ1bmN0aW9uIE9lKGZ0LE9yLFd0KXtmdC5iaV92'@;
put 'YWxpZD5WLVd0PyhmdC5iaV9idWZ8PU9yPDxmdC5iaV92YWxpZCY2NTUzNSxGZShmdCxmdC5iaV9idWYpLGZ0LmJpX2J1Zj1Pcj4+Vi1mdC5iaV92YWxpZCxmdC5iaV92YWxpZCs9V3QtVik6KGZ0LmJpX2J1Znw9T3I8PGZ0LmJpX3ZhbGlkJjY1NTM1LGZ0LmJpX3ZhbGlkKz1XdCl9ZnVuY3Rp'@;
put 'b24gSWUoZnQsT3IsV3Qpe09lKGZ0LFd0WzIqT3JdLFd0WzIqT3IrMV0pfWZ1bmN0aW9uIFZlKGZ0LE9yKXt2YXIgV3Q9MDtkb3tXdHw9MSZmdCxmdD4+Pj0xLFd0PDw9MX13aGlsZSgtLU9yPjApO3JldHVybiBXdD4+PjF9ZnVuY3Rpb24gX3QoZnQsT3IsV3Qpe3ZhciBzdCxVdCxBdD1uZXcg'@;
put 'QXJyYXkoamUrMSksUm49MDtmb3Ioc3Q9MTtzdDw9amU7c3QrKylBdFtzdF09Um49Um4rV3Rbc3QtMV08PDE7Zm9yKFV0PTA7VXQ8PU9yO1V0Kyspe3ZhciByaT1mdFsyKlV0KzFdOzAhPT1yaSYmKGZ0WzIqVXRdPVZlKEF0W3JpXSsrLHJpKSl9fWZ1bmN0aW9uIFFlKGZ0KXt2YXIgT3I7Zm9y'@;
put 'KE9yPTA7T3I8Mjg2O09yKyspZnQuZHluX2x0cmVlWzIqT3JdPTA7Zm9yKE9yPTA7T3I8MzA7T3IrKylmdC5keW5fZHRyZWVbMipPcl09MDtmb3IoT3I9MDtPcjwxOTtPcisrKWZ0LmJsX3RyZWVbMipPcl09MDtmdC5keW5fbHRyZWVbNTEyXT0xLGZ0Lm9wdF9sZW49ZnQuc3RhdGljX2xlbj0w'@;
put 'LGZ0Lmxhc3RfbGl0PWZ0Lm1hdGNoZXM9MH1mdW5jdGlvbiB1bihmdCl7ZnQuYmlfdmFsaWQ+OD9GZShmdCxmdC5iaV9idWYpOmZ0LmJpX3ZhbGlkPjAmJihmdC5wZW5kaW5nX2J1ZltmdC5wZW5kaW5nKytdPWZ0LmJpX2J1ZiksZnQuYmlfYnVmPTAsZnQuYmlfdmFsaWQ9MH1mdW5jdGlvbiBN'@;
put 'dChmdCxPcixXdCxBdCl7dmFyIFJuPTIqT3Isc3Q9MipXdDtyZXR1cm4gZnRbUm5dPGZ0W3N0XXx8ZnRbUm5dPT09ZnRbc3RdJiZBdFtPcl08PUF0W1d0XX1mdW5jdGlvbiBEdChmdCxPcixXdCl7Zm9yKHZhciBBdD1mdC5oZWFwW1d0XSxSbj1XdDw8MTtSbjw9ZnQuaGVhcF9sZW4mJihSbjxm'@;
put 'dC5oZWFwX2xlbiYmTXQoT3IsZnQuaGVhcFtSbisxXSxmdC5oZWFwW1JuXSxmdC5kZXB0aCkmJlJuKyssIU10KE9yLEF0LGZ0LmhlYXBbUm5dLGZ0LmRlcHRoKSk7KWZ0LmhlYXBbV3RdPWZ0LmhlYXBbUm5dLFd0PVJuLFJuPDw9MTtmdC5oZWFwW1d0XT1BdH1mdW5jdGlvbiBpdChmdCxPcixX'@;
put 'dCl7dmFyIEF0LFJuLFV0LHJpLHN0PTA7aWYoMCE9PWZ0Lmxhc3RfbGl0KWRve0F0PWZ0LnBlbmRpbmdfYnVmW2Z0LmRfYnVmKzIqc3RdPDw4fGZ0LnBlbmRpbmdfYnVmW2Z0LmRfYnVmKzIqc3QrMV0sUm49ZnQucGVuZGluZ19idWZbZnQubF9idWYrc3RdLHN0KyssMD09PUF0P0llKGZ0LFJu'@;
put 'LE9yKTooSWUoZnQsKFV0PXdlW1JuXSkrMjU2KzEsT3IpLDAhPT0ocmk9SFtVdF0pJiZPZShmdCxSbi09VWVbVXRdLHJpKSxJZShmdCxVdD1EZSgtLUF0KSxXdCksMCE9PShyaT1qW1V0XSkmJk9lKGZ0LEF0LT1KZVtVdF0scmkpKX13aGlsZShzdDxmdC5sYXN0X2xpdCk7SWUoZnQsMjU2LE9y'@;
put 'KX1mdW5jdGlvbiAkZShmdCxPcil7dmFyIFV0LHJpLFR0LFd0PU9yLmR5bl90cmVlLEF0PU9yLnN0YXRfZGVzYy5zdGF0aWNfdHJlZSxSbj1Pci5zdGF0X2Rlc2MuaGFzX3N0cmVlLHN0PU9yLnN0YXRfZGVzYy5lbGVtcyxXZT0tMTtmb3IoZnQuaGVhcF9sZW49MCxmdC5oZWFwX21heD01NzMs'@;
put 'VXQ9MDtVdDxzdDtVdCsrKTAhPT1XdFsyKlV0XT8oZnQuaGVhcFsrK2Z0LmhlYXBfbGVuXT1XZT1VdCxmdC5kZXB0aFtVdF09MCk6V3RbMipVdCsxXT0wO2Zvcig7ZnQuaGVhcF9sZW48MjspV3RbMiooVHQ9ZnQuaGVhcFsrK2Z0LmhlYXBfbGVuXT1XZTwyPysrV2U6MCldPTEsZnQuZGVwdGhb'@;
put 'VHRdPTAsZnQub3B0X2xlbi0tLFJuJiYoZnQuc3RhdGljX2xlbi09QXRbMipUdCsxXSk7Zm9yKE9yLm1heF9jb2RlPVdlLFV0PWZ0LmhlYXBfbGVuPj4xO1V0Pj0xO1V0LS0pRHQoZnQsV3QsVXQpO1R0PXN0O2Rve1V0PWZ0LmhlYXBbMV0sZnQuaGVhcFsxXT1mdC5oZWFwW2Z0LmhlYXBfbGVu'@;
put 'LS1dLER0KGZ0LFd0LDEpLHJpPWZ0LmhlYXBbMV0sZnQuaGVhcFstLWZ0LmhlYXBfbWF4XT1VdCxmdC5oZWFwWy0tZnQuaGVhcF9tYXhdPXJpLFd0WzIqVHRdPVd0WzIqVXRdK1d0WzIqcmldLGZ0LmRlcHRoW1R0XT0oZnQuZGVwdGhbVXRdPj1mdC5kZXB0aFtyaV0/ZnQuZGVwdGhbVXRdOmZ0'@;
put 'LmRlcHRoW3JpXSkrMSxXdFsyKlV0KzFdPVd0WzIqcmkrMV09VHQsZnQuaGVhcFsxXT1UdCsrLER0KGZ0LFd0LDEpfXdoaWxlKGZ0LmhlYXBfbGVuPj0yKTtmdC5oZWFwWy0tZnQuaGVhcF9tYXhdPWZ0LmhlYXBbMV0sZnVuY3Rpb24gQWUoZnQsT3Ipe3ZhciBUdCxucixodCx4dCxqbixybixX'@;
put 'dD1Pci5keW5fdHJlZSxBdD1Pci5tYXhfY29kZSxSbj1Pci5zdGF0X2Rlc2Muc3RhdGljX3RyZWUsc3Q9T3Iuc3RhdF9kZXNjLmhhc19zdHJlZSxVdD1Pci5zdGF0X2Rlc2MuZXh0cmFfYml0cyxyaT1Pci5zdGF0X2Rlc2MuZXh0cmFfYmFzZSxXZT1Pci5zdGF0X2Rlc2MubWF4X2xlbmd0aCx6'@;
put 'dD0wO2Zvcih4dD0wO3h0PD1qZTt4dCsrKWZ0LmJsX2NvdW50W3h0XT0wO2ZvcihXdFsyKmZ0LmhlYXBbZnQuaGVhcF9tYXhdKzFdPTAsVHQ9ZnQuaGVhcF9tYXgrMTtUdDw1NzM7VHQrKykoeHQ9V3RbMipXdFsyKihucj1mdC5oZWFwW1R0XSkrMV0rMV0rMSk+V2UmJih4dD1XZSx6dCsrKSxX'@;
put 'dFsyKm5yKzFdPXh0LCEobnI+QXQpJiYoZnQuYmxfY291bnRbeHRdKyssam49MCxucj49cmkmJihqbj1VdFtuci1yaV0pLGZ0Lm9wdF9sZW4rPShybj1XdFsyKm5yXSkqKHh0K2puKSxzdCYmKGZ0LnN0YXRpY19sZW4rPXJuKihSblsyKm5yKzFdK2puKSkpO2lmKDAhPT16dCl7ZG97Zm9yKHh0'@;
put 'PVdlLTE7MD09PWZ0LmJsX2NvdW50W3h0XTspeHQtLTtmdC5ibF9jb3VudFt4dF0tLSxmdC5ibF9jb3VudFt4dCsxXSs9MixmdC5ibF9jb3VudFtXZV0tLSx6dC09Mn13aGlsZSh6dD4wKTtmb3IoeHQ9V2U7MCE9PXh0O3h0LS0pZm9yKG5yPWZ0LmJsX2NvdW50W3h0XTswIT09bnI7KSEoKGh0'@;
put 'PWZ0LmhlYXBbLS1UdF0pPkF0KSYmKFd0WzIqaHQrMV0hPT14dCYmKGZ0Lm9wdF9sZW4rPSh4dC1XdFsyKmh0KzFdKSpXdFsyKmh0XSxXdFsyKmh0KzFdPXh0KSxuci0tKX19KGZ0LE9yKSxfdChXdCxXZSxmdC5ibF9jb3VudCl9ZnVuY3Rpb24gdHQoZnQsT3IsV3Qpe3ZhciBBdCxzdCxSbj0t'@;
put 'MSxVdD1PclsxXSxyaT0wLFdlPTcsVHQ9NDtmb3IoMD09PVV0JiYoV2U9MTM4LFR0PTMpLE9yWzIqKFd0KzEpKzFdPTY1NTM1LEF0PTA7QXQ8PVd0O0F0Kyspc3Q9VXQsVXQ9T3JbMiooQXQrMSkrMV0sISgrK3JpPFdlJiZzdD09PVV0KSYmKHJpPFR0P2Z0LmJsX3RyZWVbMipzdF0rPXJpOjAh'@;
put 'PT1zdD8oc3QhPT1SbiYmZnQuYmxfdHJlZVsyKnN0XSsrLGZ0LmJsX3RyZWVbMzJdKyspOnJpPD0xMD9mdC5ibF90cmVlWzM0XSsrOmZ0LmJsX3RyZWVbMzZdKysscmk9MCxSbj1zdCwwPT09VXQ/KFdlPTEzOCxUdD0zKTpzdD09PVV0PyhXZT02LFR0PTMpOihXZT03LFR0PTQpKX1mdW5jdGlv'@;
put 'biBIZShmdCxPcixXdCl7dmFyIEF0LHN0LFJuPS0xLFV0PU9yWzFdLHJpPTAsV2U9NyxUdD00O2ZvcigwPT09VXQmJihXZT0xMzgsVHQ9MyksQXQ9MDtBdDw9V3Q7QXQrKylpZihzdD1VdCxVdD1PclsyKihBdCsxKSsxXSwhKCsrcmk8V2UmJnN0PT09VXQpKXtpZihyaTxUdClkb3tJZShmdCxz'@;
put 'dCxmdC5ibF90cmVlKX13aGlsZSgwIT0tLXJpKTtlbHNlIDAhPT1zdD8oc3QhPT1SbiYmKEllKGZ0LHN0LGZ0LmJsX3RyZWUpLHJpLS0pLEllKGZ0LDE2LGZ0LmJsX3RyZWUpLE9lKGZ0LHJpLTMsMikpOnJpPD0xMD8oSWUoZnQsMTcsZnQuYmxfdHJlZSksT2UoZnQscmktMywzKSk6KEllKGZ0'@;
put 'LDE4LGZ0LmJsX3RyZWUpLE9lKGZ0LHJpLTExLDcpKTtyaT0wLFJuPXN0LDA9PT1VdD8oV2U9MTM4LFR0PTMpOnN0PT09VXQ/KFdlPTYsVHQ9Myk6KFdlPTcsVHQ9NCl9fXZhciBQdD0hMTtmdW5jdGlvbiBRdChmdCxPcixXdCxBdCl7T2UoZnQsMCsoQXQ/MTowKSwzKSxmdW5jdGlvbiB5dChm'@;
put 'dCxPcixXdCxBdCl7dW4oZnQpLEF0JiYoRmUoZnQsV3QpLEZlKGZ0LH5XdCkpLHouYXJyYXlTZXQoZnQucGVuZGluZ19idWYsZnQud2luZG93LE9yLFd0LGZ0LnBlbmRpbmcpLGZ0LnBlbmRpbmcrPVd0fShmdCxPcixXdCwhMCl9Ty5fdHJfaW5pdD1mdW5jdGlvbiBjaShmdCl7UHR8fChmdW5j'@;
put 'dGlvbiBudCgpe3ZhciBmdCxPcixXdCxBdCxSbixzdD1uZXcgQXJyYXkoamUrMSk7Zm9yKFd0PTAsQXQ9MDtBdDwyODtBdCsrKWZvcihVZVtBdF09V3QsZnQ9MDtmdDwxPDxIW0F0XTtmdCsrKXdlW1d0KytdPUF0O2Zvcih3ZVtXdC0xXT1BdCxSbj0wLEF0PTA7QXQ8MTY7QXQrKylmb3IoSmVb'@;
put 'QXRdPVJuLGZ0PTA7ZnQ8MTw8altBdF07ZnQrKylzZVtSbisrXT1BdDtmb3IoUm4+Pj03O0F0PDMwO0F0KyspZm9yKEplW0F0XT1Sbjw8NyxmdD0wO2Z0PDE8PGpbQXRdLTc7ZnQrKylzZVsyNTYrUm4rK109QXQ7Zm9yKE9yPTA7T3I8PWplO09yKyspc3RbT3JdPTA7Zm9yKGZ0PTA7ZnQ8PTE0'@;
put 'MzspYWVbMipmdCsxXT04LGZ0Kyssc3RbOF0rKztmb3IoO2Z0PD0yNTU7KWFlWzIqZnQrMV09OSxmdCsrLHN0WzldKys7Zm9yKDtmdDw9Mjc5OylhZVsyKmZ0KzFdPTcsZnQrKyxzdFs3XSsrO2Zvcig7ZnQ8PTI4NzspYWVbMipmdCsxXT04LGZ0Kyssc3RbOF0rKztmb3IoX3QoYWUsMjg3LHN0'@;
put 'KSxmdD0wO2Z0PDMwO2Z0KyspdGVbMipmdCsxXT01LHRlWzIqZnRdPVZlKGZ0LDUpO3hlPW5ldyBvdChhZSxILDI1NywyODYsamUpLHZlPW5ldyBvdCh0ZSxqLDAsMzAsamUpLFhlPW5ldyBvdChuZXcgQXJyYXkoMCksRSwwLDE5LDcpfSgpLFB0PSEwKSxmdC5sX2Rlc2M9bmV3IHplKGZ0LmR5'@;
put 'bl9sdHJlZSx4ZSksZnQuZF9kZXNjPW5ldyB6ZShmdC5keW5fZHRyZWUsdmUpLGZ0LmJsX2Rlc2M9bmV3IHplKGZ0LmJsX3RyZWUsWGUpLGZ0LmJpX2J1Zj0wLGZ0LmJpX3ZhbGlkPTAsUWUoZnQpfSxPLl90cl9zdG9yZWRfYmxvY2s9UXQsTy5fdHJfZmx1c2hfYmxvY2s9ZnVuY3Rpb24gUmko'@;
put 'ZnQsT3IsV3QsQXQpe3ZhciBSbixzdCxVdD0wO2Z0LmxldmVsPjA/KDI9PT1mdC5zdHJtLmRhdGFfdHlwZSYmKGZ0LnN0cm0uZGF0YV90eXBlPWZ1bmN0aW9uIFJ0KGZ0KXt2YXIgV3QsT3I9NDA5MzYyNDQ0Nztmb3IoV3Q9MDtXdDw9MzE7V3QrKyxPcj4+Pj0xKWlmKDEmT3ImJjAhPT1mdC5k'@;
put 'eW5fbHRyZWVbMipXdF0pcmV0dXJuIDA7aWYoMCE9PWZ0LmR5bl9sdHJlZVsxOF18fDAhPT1mdC5keW5fbHRyZWVbMjBdfHwwIT09ZnQuZHluX2x0cmVlWzI2XSlyZXR1cm4gMTtmb3IoV3Q9MzI7V3Q8MjU2O1d0KyspaWYoMCE9PWZ0LmR5bl9sdHJlZVsyKld0XSlyZXR1cm4gMTtyZXR1cm4g'@;
put 'MH0oZnQpKSwkZShmdCxmdC5sX2Rlc2MpLCRlKGZ0LGZ0LmRfZGVzYyksVXQ9ZnVuY3Rpb24gdXQoZnQpe3ZhciBPcjtmb3IodHQoZnQsZnQuZHluX2x0cmVlLGZ0LmxfZGVzYy5tYXhfY29kZSksdHQoZnQsZnQuZHluX2R0cmVlLGZ0LmRfZGVzYy5tYXhfY29kZSksJGUoZnQsZnQuYmxfZGVz'@;
put 'YyksT3I9MTg7T3I+PTMmJjA9PT1mdC5ibF90cmVlWzIqbVtPcl0rMV07T3ItLSk7cmV0dXJuIGZ0Lm9wdF9sZW4rPTMqKE9yKzEpKzUrNSs0LE9yfShmdCksKHN0PWZ0LnN0YXRpY19sZW4rMys3Pj4+Myk8PShSbj1mdC5vcHRfbGVuKzMrNz4+PjMpJiYoUm49c3QpKTpSbj1zdD1XdCs1LFd0'@;
put 'KzQ8PVJuJiYtMSE9PU9yP1F0KGZ0LE9yLFd0LEF0KTo0PT09ZnQuc3RyYXRlZ3l8fHN0PT09Um4/KE9lKGZ0LDIrKEF0PzE6MCksMyksaXQoZnQsYWUsdGUpKTooT2UoZnQsNCsoQXQ/MTowKSwzKSxmdW5jdGlvbiBxdChmdCxPcixXdCxBdCl7dmFyIFJuO2ZvcihPZShmdCxPci0yNTcsNSks'@;
put 'T2UoZnQsV3QtMSw1KSxPZShmdCxBdC00LDQpLFJuPTA7Um48QXQ7Um4rKylPZShmdCxmdC5ibF90cmVlWzIqbVtSbl0rMV0sMyk7SGUoZnQsZnQuZHluX2x0cmVlLE9yLTEpLEhlKGZ0LGZ0LmR5bl9kdHJlZSxXdC0xKX0oZnQsZnQubF9kZXNjLm1heF9jb2RlKzEsZnQuZF9kZXNjLm1heF9j'@;
put 'b2RlKzEsVXQrMSksaXQoZnQsZnQuZHluX2x0cmVlLGZ0LmR5bl9kdHJlZSkpLFFlKGZ0KSxBdCYmdW4oZnQpfSxPLl90cl90YWxseT1mdW5jdGlvbiBobihmdCxPcixXdCl7cmV0dXJuIGZ0LnBlbmRpbmdfYnVmW2Z0LmRfYnVmKzIqZnQubGFzdF9saXRdPU9yPj4+OCYyNTUsZnQucGVuZGlu'@;
put 'Z19idWZbZnQuZF9idWYrMipmdC5sYXN0X2xpdCsxXT0yNTUmT3IsZnQucGVuZGluZ19idWZbZnQubF9idWYrZnQubGFzdF9saXRdPTI1NSZXdCxmdC5sYXN0X2xpdCsrLDA9PT1Pcj9mdC5keW5fbHRyZWVbMipXdF0rKzooZnQubWF0Y2hlcysrLE9yLS0sZnQuZHluX2x0cmVlWzIqKHdlW1d0'@;
put 'XSsyNTYrMSldKyssZnQuZHluX2R0cmVlWzIqRGUoT3IpXSsrKSxmdC5sYXN0X2xpdD09PWZ0LmxpdF9idWZzaXplLTF9LE8uX3RyX2FsaWduPWZ1bmN0aW9uIHNuKGZ0KXtPZShmdCwyLDMpLEllKGZ0LDI1NixhZSksZnVuY3Rpb24ga2UoZnQpezE2PT09ZnQuYmlfdmFsaWQ/KEZlKGZ0LGZ0'@;
put 'LmJpX2J1ZiksZnQuYmlfYnVmPTAsZnQuYmlfdmFsaWQ9MCk6ZnQuYmlfdmFsaWQ+PTgmJihmdC5wZW5kaW5nX2J1ZltmdC5wZW5kaW5nKytdPTI1NSZmdC5iaV9idWYsZnQuYmlfYnVmPj49OCxmdC5iaV92YWxpZC09OCl9KGZ0KX19LHsiLi4vdXRpbHMvY29tbW9uIjoyN31dLDM5OltmdW5j'@;
put 'dGlvbihQLEYsTyl7InVzZSBzdHJpY3QiO0YuZXhwb3J0cz1mdW5jdGlvbiB6KCl7dGhpcy5pbnB1dD1udWxsLHRoaXMubmV4dF9pbj0wLHRoaXMuYXZhaWxfaW49MCx0aGlzLnRvdGFsX2luPTAsdGhpcy5vdXRwdXQ9bnVsbCx0aGlzLm5leHRfb3V0PTAsdGhpcy5hdmFpbF9vdXQ9MCx0aGlz'@;
put 'LnRvdGFsX291dD0wLHRoaXMubXNnPSIiLHRoaXMuc3RhdGU9bnVsbCx0aGlzLmRhdGFfdHlwZT0yLHRoaXMuYWRsZXI9MH19LHt9XX0se30sWzldKSg5KX0pfSw2MzU3ODoodWUsWCx5KT0+eyFmdW5jdGlvbiBfKHcpe3cudmVyc2lvbj0iMS4yMDIxMTEyMi4xIjt2YXIgUD0xMjAwLEY9MTI1'@;
put 'Mjt0eXBlb2YgY3B0YWJsZT4idSImJih0eXBlb2YgZ2xvYmFsPCJ1Ij9nbG9iYWwuY3B0YWJsZT15KDQyOTI0KTp0eXBlb2Ygd2luZG93PCJ1IiYmKHdpbmRvdy5jcHRhYmxlPXkoNDI5MjQpKSk7Zm9yKHZhciBPPVs4NzQsOTMyLDkzNiw5NDksOTUwLDFlNF0sej0wO3o8PTg7Kyt6KU8ucHVz'@;
put 'aCgxMjUwK3opO3ZhciBOPXswOjEyNTIsMTo2NTAwMSwyOjY1MDAxLDc3OjFlNCwxMjg6OTMyLDEyOTo5NDksMTMwOjEzNjEsMTM0OjkzNiwxMzY6OTUwLDE2MToxMjUzLDE2MjoxMjU0LDE2MzoxMjU4LDE3NzoxMjU1LDE3ODoxMjU2LDE4NjoxMjU3LDIwNDoxMjUxLDIyMjo4NzQsMjM4OjEy'@;
put 'NTAsMjU1OjEyNTIsNjk6Njk2OX0sTD1mdW5jdGlvbihTKXstMSE9Ty5pbmRleE9mKFMpJiYoRj1OWzBdPVMpfSxVPWZ1bmN0aW9uKFMpe1A9UyxMKFMpfTtmdW5jdGlvbiBXKCl7VSgxMjAwKSxmdW5jdGlvbiBLKCl7TCgxMjUyKX0oKX1mdW5jdGlvbiBZKFMpe2Zvcih2YXIgUj1bXSxrPTAs'@;
put 'Rz1TLmxlbmd0aDtrPEc7KytrKVJba109Uy5jaGFyQ29kZUF0KGspO3JldHVybiBSfXZhciBKPWZ1bmN0aW9uKFMpe3ZhciBSPVMuY2hhckNvZGVBdCgwKSxrPVMuY2hhckNvZGVBdCgxKTtyZXR1cm4gMjU1PT1SJiYyNTQ9PWs/ZnVuY3Rpb24gcShTKXtmb3IodmFyIFI9W10saz0wO2s8Uy5s'@;
put 'ZW5ndGg+PjE7KytrKVJba109U3RyaW5nLmZyb21DaGFyQ29kZShTLmNoYXJDb2RlQXQoMiprKSsoUy5jaGFyQ29kZUF0KDIqaysxKTw8OCkpO3JldHVybiBSLmpvaW4oIiIpfShTLnNsaWNlKDIpKToyNTQ9PVImJjI1NT09az9mdW5jdGlvbiBlZShTKXtmb3IodmFyIFI9W10saz0wO2s8Uy5s'@;
put 'ZW5ndGg+PjE7KytrKVJba109U3RyaW5nLmZyb21DaGFyQ29kZShTLmNoYXJDb2RlQXQoMiprKzEpKyhTLmNoYXJDb2RlQXQoMiprKTw8OCkpO3JldHVybiBSLmpvaW4oIiIpfShTLnNsaWNlKDIpKTo2NTI3OT09Uj9TLnNsaWNlKDEpOlN9LG5lPWZ1bmN0aW9uKFIpe3JldHVybiBTdHJpbmcu'@;
put 'ZnJvbUNoYXJDb2RlKFIpfSxpZT1mdW5jdGlvbihSKXtyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShSKX07dHlwZW9mIGNwdGFibGU8InUiJiYoVT1mdW5jdGlvbihTKXtQPVMsTChTKX0sSj1mdW5jdGlvbihTKXtyZXR1cm4gMjU1PT09Uy5jaGFyQ29kZUF0KDApJiYyNTQ9PT1TLmNoYXJD'@;
put 'b2RlQXQoMSk/Y3B0YWJsZS51dGlscy5kZWNvZGUoMTIwMCxZKFMuc2xpY2UoMikpKTpTfSxuZT1mdW5jdGlvbihSKXtyZXR1cm4gMTIwMD09PVA/U3RyaW5nLmZyb21DaGFyQ29kZShSKTpjcHRhYmxlLnV0aWxzLmRlY29kZShQLFsyNTUmUixSPj44XSlbMF19LGllPWZ1bmN0aW9uKFIpe3Jl'@;
put 'dHVybiBjcHRhYmxlLnV0aWxzLmRlY29kZShGLFtSXSlbMF19KTt2YXIgbGU9bnVsbCxfZT1mdW5jdGlvbigpe3ZhciBSPSJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvPSI7cmV0dXJue2VuY29kZTpmdW5jdGlvbihrKXtm'@;
put 'b3IodmFyIEc9IiIsUT0wLG9lPTAsZ2U9MCxwZT0wLHllPTAsUGU9MCxOZT0wLFllPTA7WWU8ay5sZW5ndGg7KXBlPShRPWsuY2hhckNvZGVBdChZZSsrKSk+PjIseWU9KDMmUSk8PDR8KG9lPWsuY2hhckNvZGVBdChZZSsrKSk+PjQsUGU9KDE1Jm9lKTw8MnwoZ2U9ay5jaGFyQ29kZUF0KFll'@;
put 'KyspKT4+NixOZT02MyZnZSxpc05hTihvZSk/UGU9TmU9NjQ6aXNOYU4oZ2UpJiYoTmU9NjQpLEcrPVIuY2hhckF0KHBlKStSLmNoYXJBdCh5ZSkrUi5jaGFyQXQoUGUpK1IuY2hhckF0KE5lKTtyZXR1cm4gR30sZGVjb2RlOmZ1bmN0aW9uKEcpe3ZhciBRPSIiLHllPTAsUGU9MCxOZT0wLFll'@;
put 'PTA7Rz1HLnJlcGxhY2UoL1teXHdcK1wvXD1dL2csIiIpO2Zvcih2YXIgZXQ9MDtldDxHLmxlbmd0aDspeWU9Ui5pbmRleE9mKEcuY2hhckF0KGV0KyspKSxQZT1SLmluZGV4T2YoRy5jaGFyQXQoZXQrKykpLFErPVN0cmluZy5mcm9tQ2hhckNvZGUoeWU8PDJ8UGU+PjQpLDY0IT09KE5lPVIu'@;
put 'aW5kZXhPZihHLmNoYXJBdChldCsrKSkpJiYoUSs9U3RyaW5nLmZyb21DaGFyQ29kZSgoMTUmUGUpPDw0fE5lPj4yKSksNjQhPT0oWWU9Ui5pbmRleE9mKEcuY2hhckF0KGV0KyspKSkmJihRKz1TdHJpbmcuZnJvbUNoYXJDb2RlKCgzJk5lKTw8NnxZZSkpO3JldHVybiBRfX19KCksVGU9dHlw'@;
put 'ZW9mIEJ1ZmZlcjwidSImJnR5cGVvZiBwcm9jZXNzPCJ1IiYmdHlwZW9mIHByb2Nlc3MudmVyc2lvbnM8InUiJiYhIXByb2Nlc3MudmVyc2lvbnMubm9kZSxTZT1mdW5jdGlvbigpe307aWYodHlwZW9mIEJ1ZmZlcjwidSIpe3ZhciBqZT0hQnVmZmVyLmZyb207aWYoIWplKXRyeXtCdWZmZXIu'@;
put 'ZnJvbSgiZm9vIiwidXRmOCIpfWNhdGNoe2plPSEwfVNlPWplP2Z1bmN0aW9uKFMsUil7cmV0dXJuIFI/bmV3IEJ1ZmZlcihTLFIpOm5ldyBCdWZmZXIoUyl9OkJ1ZmZlci5mcm9tLmJpbmQoQnVmZmVyKSxCdWZmZXIuYWxsb2N8fChCdWZmZXIuYWxsb2M9ZnVuY3Rpb24oUyl7cmV0dXJuIG5l'@;
put 'dyBCdWZmZXIoUyl9KSxCdWZmZXIuYWxsb2NVbnNhZmV8fChCdWZmZXIuYWxsb2NVbnNhZmU9ZnVuY3Rpb24oUyl7cmV0dXJuIG5ldyBCdWZmZXIoUyl9KX1mdW5jdGlvbiBWKFMpe3JldHVybiBUZT9CdWZmZXIuYWxsb2MoUyk6bmV3IEFycmF5KFMpfWZ1bmN0aW9uIHAoUyl7cmV0dXJuIFRl'@;
put 'P0J1ZmZlci5hbGxvY1Vuc2FmZShTKTpuZXcgQXJyYXkoUyl9dmFyIGI9ZnVuY3Rpb24oUil7cmV0dXJuIFRlP1NlKFIsImJpbmFyeSIpOlIuc3BsaXQoIiIpLm1hcChmdW5jdGlvbihrKXtyZXR1cm4gMjU1JmsuY2hhckNvZGVBdCgwKX0pfTtmdW5jdGlvbiB4KFMpe2lmKHR5cGVvZiBBcnJh'@;
put 'eUJ1ZmZlcj4idSIpcmV0dXJuIGIoUyk7Zm9yKHZhciBSPW5ldyBBcnJheUJ1ZmZlcihTLmxlbmd0aCksaz1uZXcgVWludDhBcnJheShSKSxHPTA7RyE9Uy5sZW5ndGg7KytHKWtbR109MjU1JlMuY2hhckNvZGVBdChHKTtyZXR1cm4gUn1mdW5jdGlvbiBDKFMpe2lmKEFycmF5LmlzQXJyYXko'@;
put 'UykpcmV0dXJuIFMubWFwKGZ1bmN0aW9uKEcpe3JldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKEcpfSkuam9pbigiIik7Zm9yKHZhciBSPVtdLGs9MDtrPFMubGVuZ3RoOysraylSW2tdPVN0cmluZy5mcm9tQ2hhckNvZGUoU1trXSk7cmV0dXJuIFIuam9pbigiIil9ZnVuY3Rpb24gSChTKXtp'@;
put 'Zih0eXBlb2YgQXJyYXlCdWZmZXI+InUiKXRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQiKTtpZihTIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpcmV0dXJuIEgobmV3IFVpbnQ4QXJyYXkoUykpO2Zvcih2YXIgUj1uZXcgQXJyYXkoUy5sZW5ndGgpLGs9MDtrPFMubGVuZ3RoOysraylSW2td'@;
put 'PVNba107cmV0dXJuIFJ9dmFyIGo9ZnVuY3Rpb24oUyl7dmFyIFI9W107cmV0dXJuIFMuZm9yRWFjaChmdW5jdGlvbihrKXtBcnJheS5pc0FycmF5KGspP1I9Ui5jb25jYXQoayk6KHR5cGVvZiBVaW50OEFycmF5PCJ1IiYmayBpbnN0YW5jZW9mIFVpbnQ4QXJyYXl8fHR5cGVvZiBBcnJheUJ1'@;
put 'ZmZlcjwidSImJmsgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikmJihSPVIuY29uY2F0KEgoaykpKX0pLFJ9LEU9L1x1MDAwMC9nLG09L1tcdTAwMDEtXHUwMDA2XS9nLEE9e30sYWU9ZnVuY3Rpb24oUil7ZnVuY3Rpb24gayhsbil7Zm9yKHZhciBFbj0iIixVbj1sbi5sZW5ndGgtMTtVbj49MDsp'@;
put 'RW4rPWxuLmNoYXJBdChVbi0tKTtyZXR1cm4gRW59ZnVuY3Rpb24gRyhsbixFbil7Zm9yKHZhciBVbj0iIjtVbi5sZW5ndGg8RW47KVVuKz1sbjtyZXR1cm4gVW59ZnVuY3Rpb24gUShsbixFbil7dmFyIFVuPSIiK2xuO3JldHVybiBVbi5sZW5ndGg+PUVuP1VuOkcoIjAiLEVuLVVuLmxlbmd0'@;
put 'aCkrVW59ZnVuY3Rpb24gb2UobG4sRW4pe3ZhciBVbj0iIitsbjtyZXR1cm4gVW4ubGVuZ3RoPj1Fbj9VbjpHKCIgIixFbi1Vbi5sZW5ndGgpK1VufWZ1bmN0aW9uIGdlKGxuLEVuKXt2YXIgVW49IiIrbG47cmV0dXJuIFVuLmxlbmd0aD49RW4/VW46VW4rRygiICIsRW4tVW4ubGVuZ3RoKX1S'@;
put 'LnZlcnNpb249IjEuMjAyMTA3MjYuMSI7dmFyIFBlPU1hdGgucG93KDIsMzIpO2Z1bmN0aW9uIE5lKGxuLEVuKXtyZXR1cm4gbG4+UGV8fGxuPC1QZT9mdW5jdGlvbiBwZShsbixFbil7dmFyIFVuPSIiK01hdGgucm91bmQobG4pO3JldHVybiBVbi5sZW5ndGg+PUVuP1VuOkcoIjAiLEVuLVVu'@;
put 'Lmxlbmd0aCkrVW59KGxuLEVuKTpmdW5jdGlvbiB5ZShsbixFbil7dmFyIFVuPSIiK2xuO3JldHVybiBVbi5sZW5ndGg+PUVuP1VuOkcoIjAiLEVuLVVuLmxlbmd0aCkrVW59KE1hdGgucm91bmQobG4pLEVuKX1mdW5jdGlvbiBZZShsbixFbil7cmV0dXJuIGxuLmxlbmd0aD49NysoRW49RW58'@;
put 'fDApJiYxMDM9PSgzMnxsbi5jaGFyQ29kZUF0KEVuKSkmJjEwMT09KDMyfGxuLmNoYXJDb2RlQXQoRW4rMSkpJiYxMTA9PSgzMnxsbi5jaGFyQ29kZUF0KEVuKzIpKSYmMTAxPT0oMzJ8bG4uY2hhckNvZGVBdChFbiszKSkmJjExND09KDMyfGxuLmNoYXJDb2RlQXQoRW4rNCkpJiY5Nz09KDMy'@;
put 'fGxuLmNoYXJDb2RlQXQoRW4rNSkpJiYxMDg9PSgzMnxsbi5jaGFyQ29kZUF0KEVuKzYpKX1mdW5jdGlvbiBldChsbil7Zm9yKHZhciBFbj1bXSxVbj1PYmplY3Qua2V5cyhsbikseGk9MDt4aSE9PVVuLmxlbmd0aDsrK3hpKUVuW2xuW1VuW3hpXV1dPVVuW3hpXTtyZXR1cm4gRW59dmFyIGN0'@;
put 'PVtbIlN1biIsIlN1bmRheSJdLFsiTW9uIiwiTW9uZGF5Il0sWyJUdWUiLCJUdWVzZGF5Il0sWyJXZWQiLCJXZWRuZXNkYXkiXSxbIlRodSIsIlRodXJzZGF5Il0sWyJGcmkiLCJGcmlkYXkiXSxbIlNhdCIsIlNhdHVyZGF5Il1dLEV0PVtbIkoiLCJKYW4iLCJKYW51YXJ5Il0sWyJGIiwiRmVi'@;
put 'IiwiRmVicnVhcnkiXSxbIk0iLCJNYXIiLCJNYXJjaCJdLFsiQSIsIkFwciIsIkFwcmlsIl0sWyJNIiwiTWF5IiwiTWF5Il0sWyJKIiwiSnVuIiwiSnVuZSJdLFsiSiIsIkp1bCIsIkp1bHkiXSxbIkEiLCJBdWciLCJBdWd1c3QiXSxbIlMiLCJTZXAiLCJTZXB0ZW1iZXIiXSxbIk8iLCJPY3Qi'@;
put 'LCJPY3RvYmVyIl0sWyJOIiwiTm92IiwiTm92ZW1iZXIiXSxbIkQiLCJEZWMiLCJEZWNlbWJlciJdXTtmdW5jdGlvbiBhdChsbil7bG5bMF09IkdlbmVyYWwiLGxuWzFdPSIwIixsblsyXT0iMC4wMCIsbG5bM109IiMsIyMwIixsbls0XT0iIywjIzAuMDAiLGxuWzldPSIwJSIsbG5bMTBdPSIw'@;
put 'LjAwJSIsbG5bMTFdPSIwLjAwRSswMCIsbG5bMTJdPSIjID8vPyIsbG5bMTNdPSIjID8/Lz8/IixsblsxNF09Im0vZC95eSIsbG5bMTVdPSJkLW1tbS15eSIsbG5bMTZdPSJkLW1tbSIsbG5bMTddPSJtbW0teXkiLGxuWzE4XT0iaDptbSBBTS9QTSIsbG5bMTldPSJoOm1tOnNzIEFNL1BNIixs'@;
put 'blsyMF09Img6bW0iLGxuWzIxXT0iaDptbTpzcyIsbG5bMjJdPSJtL2QveXkgaDptbSIsbG5bMzddPSIjLCMjMCA7KCMsIyMwKSIsbG5bMzhdPSIjLCMjMCA7W1JlZF0oIywjIzApIixsblszOV09IiMsIyMwLjAwOygjLCMjMC4wMCkiLGxuWzQwXT0iIywjIzAuMDA7W1JlZF0oIywjIzAuMDAp'@;
put 'Iixsbls0NV09Im1tOnNzIixsbls0Nl09IltoXTptbTpzcyIsbG5bNDddPSJtbXNzLjAiLGxuWzQ4XT0iIyMwLjBFKzAiLGxuWzQ5XT0iQCIsbG5bNTZdPSciXHU0ZTBhXHU1MzQ4L1x1NGUwYlx1NTM0OCAiaGgiXHU2NjQyIm1tIlx1NTIwNiJzcyJcdTc5ZDIgIicsRm4obG4pfXZhciBidD17'@;
put 'fTthdChidCk7dmFyIGp0PVtdLGt0PTA7Zm9yKGt0PTU7a3Q8PTg7KytrdClqdFtrdF09MzIra3Q7Zm9yKGt0PTIzO2t0PD0yNjsrK2t0KWp0W2t0XT0wO2ZvcihrdD0yNztrdDw9MzE7KytrdClqdFtrdF09MTQ7Zm9yKGt0PTUwO2t0PD01ODsrK2t0KWp0W2t0XT0xNDtmb3Ioa3Q9NTk7a3Q8'@;
put 'PTYyOysra3QpanRba3RdPWt0LTU4O2ZvcihrdD02NztrdDw9Njg7KytrdClqdFtrdF09a3QtNTg7Zm9yKGt0PTcyO2t0PD03NTsrK2t0KWp0W2t0XT1rdC01ODtmb3Ioa3Q9Njc7a3Q8PTY4Oysra3QpanRba3RdPWt0LTU3O2ZvcihrdD03NjtrdDw9Nzg7KytrdClqdFtrdF09a3QtNTY7Zm9y'@;
put 'KGt0PTc5O2t0PD04MTsrK2t0KWp0W2t0XT1rdC0zNDt2YXIgT3Q9W107ZnVuY3Rpb24gS3QobG4sRW4sVW4pe2Zvcih2YXIgeGk9bG48MD8tMToxLG9yPWxuKnhpLE9pPTAsU3I9MSxQaT0wLFphPTEsSGk9MCxtYT0wLERpPU1hdGguZmxvb3Iob3IpO0hpPEVuJiYoUGk9KERpPU1hdGguZmxv'@;
put 'b3Iob3IpKSpTcitPaSxtYT1EaSpIaStaYSwhKG9yLURpPDVlLTgpKTspb3I9MS8ob3ItRGkpLE9pPVNyLFNyPVBpLFphPUhpLEhpPW1hO2lmKG1hPkVuJiYoSGk+RW4/KG1hPVphLFBpPU9pKToobWE9SGksUGk9U3IpKSwhVW4pcmV0dXJuWzAseGkqUGksbWFdO3ZhciBjcz1NYXRoLmZsb29y'@;
put 'KHhpKlBpL21hKTtyZXR1cm5bY3MseGkqUGktY3MqbWEsbWFdfWZ1bmN0aW9uIFRuKGxuLEVuLFVuKXtpZihsbj4yOTU4NDY1fHxsbjwwKXJldHVybiBudWxsO3ZhciB4aT0wfGxuLG9yPU1hdGguZmxvb3IoODY0MDAqKGxuLXhpKSksT2k9MCxTcj1bXSxQaT17RDp4aSxUOm9yLHU6ODY0MDAq'@;
put 'KGxuLXhpKS1vcix5OjAsbTowLGQ6MCxIOjAsTTowLFM6MCxxOjB9O2lmKE1hdGguYWJzKFBpLnUpPDFlLTYmJihQaS51PTApLEVuJiZFbi5kYXRlMTkwNCYmKHhpKz0xNDYyKSxQaS51Pi45OTk5JiYoUGkudT0wLDg2NDAwPT0rK29yJiYoUGkuVD1vcj0wLCsreGksKytQaS5EKSksNjA9PT14'@;
put 'aSlTcj1Vbj9bMTMxNywxMCwyOV06WzE5MDAsMiwyOV0sT2k9MztlbHNlIGlmKDA9PT14aSlTcj1Vbj9bMTMxNyw4LDI5XTpbMTkwMCwxLDBdLE9pPTY7ZWxzZXt4aT42MCYmLS14aTt2YXIgWmE9bmV3IERhdGUoMTkwMCwwLDEpO1phLnNldERhdGUoWmEuZ2V0RGF0ZSgpK3hpLTEpLFNyPVta'@;
put 'YS5nZXRGdWxsWWVhcigpLFphLmdldE1vbnRoKCkrMSxaYS5nZXREYXRlKCldLE9pPVphLmdldERheSgpLHhpPDYwJiYoT2k9KE9pKzYpJTcpLFVuJiYoT2k9ZnVuY3Rpb24gc28obG4sRW4pe0VuWzBdLT01ODE7dmFyIFVuPWxuLmdldERheSgpO3JldHVybiBsbjw2MCYmKFVuPShVbis2KSU3'@;
put 'KSxVbn0oWmEsU3IpKX1yZXR1cm4gUGkueT1TclswXSxQaS5tPVNyWzFdLFBpLmQ9U3JbMl0sUGkuUz1vciU2MCxvcj1NYXRoLmZsb29yKG9yLzYwKSxQaS5NPW9yJTYwLG9yPU1hdGguZmxvb3Iob3IvNjApLFBpLkg9b3IsUGkucT1PaSxQaX1PdFs1XT1PdFs2M109JyIkIiMsIyMwXyk7XFwo'@;
put 'IiQiIywjIzBcXCknLE90WzZdPU90WzY0XT0nIiQiIywjIzBfKTtbUmVkXVxcKCIkIiMsIyMwXFwpJyxPdFs3XT1PdFs2NV09JyIkIiMsIyMwLjAwXyk7XFwoIiQiIywjIzAuMDBcXCknLE90WzhdPU90WzY2XT0nIiQiIywjIzAuMDBfKTtbUmVkXVxcKCIkIiMsIyMwLjAwXFwpJyxPdFs0MV09'@;
put 'J18oKiAjLCMjMF8pO18oKiBcXCgjLCMjMFxcKTtfKCogIi0iXyk7XyhAXyknLE90WzQyXT0nXygiJCIqICMsIyMwXyk7XygiJCIqIFxcKCMsIyMwXFwpO18oIiQiKiAiLSJfKTtfKEBfKScsT3RbNDNdPSdfKCogIywjIzAuMDBfKTtfKCogXFwoIywjIzAuMDBcXCk7XygqICItIj8/Xyk7XyhA'@;
put 'XyknLE90WzQ0XT0nXygiJCIqICMsIyMwLjAwXyk7XygiJCIqIFxcKCMsIyMwLjAwXFwpO18oIiQiKiAiLSI/P18pO18oQF8pJyxSLnBhcnNlX2RhdGVfY29kZT1Ubjt2YXIgcnI9bmV3IERhdGUoMTg5OSwxMSwzMSwwLDAsMCksU249cnIuZ2V0VGltZSgpLGxyPW5ldyBEYXRlKDE5MDAsMiwx'@;
put 'LDAsMCwwKTtmdW5jdGlvbiBYbihsbixFbil7dmFyIFVuPWxuLmdldFRpbWUoKTtyZXR1cm4gRW4/VW4tPTEyNjIzMDRlNTpsbj49bHImJihVbis9ODY0ZTUpLChVbi0oU24rNmU0Kihsbi5nZXRUaW1lem9uZU9mZnNldCgpLXJyLmdldFRpbWV6b25lT2Zmc2V0KCkpKSkvODY0ZTV9dmFyIEJu'@;
put 'PSIiLGZyPXsiZW4tdXMiOnt5OiJ5IixkOiJkIiwiLCI6IiwiLCIuIjoiLiIsZGF0ZToiXy8ifSwiZGUtZGUiOnt5OiJqIixkOiJ0IiwiLCI6Ii4iLCIuIjoiLCIsZGF0ZToiXy4ifSwiaXQtaXQiOnt5OiJ5IixkOiJkIiwiLCI6Ii4iLCIuIjoiLCIsZGF0ZToiXy8ifX0sYnI9ZnJbQm4udG9M'@;
put 'b3dlckNhc2UoKV18fGZyWyJlbi11cyJdLGVyPWV0KGJyKSxNaT0iJCIsRmk9IiIsTGk9IiwiLGtyPSIuIixWbj0iLyI7ZnVuY3Rpb24gRm4obG4pe3N3aXRjaCgoQm58fCIiKS50b0xvd2VyQ2FzZSgpKXtjYXNlInpoLXR3IjpsblsyN109IlskLTQwNF1lL20vZCIsbG5bMjhdPSdbJC00MDRd'@;
put 'ZSJcdTVlNzQibSJcdTY3MDgiZCJcdTY1ZTUiJyxsblsyOV09J1skLTQwNF1lIlx1NWU3NCJtIlx1NjcwOCJkIlx1NjVlNSInLGxuWzMwXT0nbSIvImQiLyJ5eScsbG5bMzFdPSd5eXl5Ilx1NWU3NCJtIlx1NjcwOCJkIlx1NjVlNSInLGxuWzMyXT0naGgiXHU2NjQyIm1tIlx1NTIwNiInLGxu'@;
put 'WzMzXT0naGgiXHU2NjQyIm1tIlx1NTIwNiJzcyJcdTc5ZDIiJyxsblszNF09J1x1NGUwYVx1NTM0OC9cdTRlMGJcdTUzNDggaGgiXHU2NjQyIm1tIlx1NTIwNiInLGxuWzM1XT0nXHU0ZTBhXHU1MzQ4L1x1NGUwYlx1NTM0OCBoaCJcdTY2NDIibW0iXHU1MjA2InNzIlx1NzlkMiInLGxuWzM2'@;
put 'XT0iWyQtNDA0XWUvbS9kIixsbls1MF09IlskLTQwNF1lL20vZCIsbG5bNTFdPSdbJC00MDRdZSJcdTVlNzQibSJcdTY3MDgiZCJcdTY1ZTUiJyxsbls1Ml09J1x1NGUwYVx1NTM0OC9cdTRlMGJcdTUzNDggaGgiXHU2NjQyIm1tIlx1NTIwNiInLGxuWzUzXT0nXHU0ZTBhXHU1MzQ4L1x1NGUw'@;
put 'Ylx1NTM0OCBoaCJcdTY2NDIibW0iXHU1MjA2InNzIlx1NzlkMiInLGxuWzU0XT0nWyQtNDA0XWUiXHU1ZTc0Im0iXHU2NzA4ImQiXHU2NWU1IicsbG5bNTVdPSdcdTRlMGFcdTUzNDgvXHU0ZTBiXHU1MzQ4IGhoIlx1NjY0MiJtbSJcdTUyMDYiJyxsbls1Nl09J1x1NGUwYVx1NTM0OC9cdTRl'@;
put 'MGJcdTUzNDggaGgiXHU2NjQyIm1tIlx1NTIwNiJzcyJcdTc5ZDIiJyxsbls1N109IlskLTQwNF1lL20vZCIsbG5bNThdPSdbJC00MDRdZSJcdTVlNzQibSJcdTY3MDgiZCJcdTY1ZTUiJzticmVhaztjYXNlInpoLWNuIjpsblsyN109J3l5eXkiXHU1ZTc0Im0iXHU2NzA4IicsbG5bMjhdPSdt'@;
put 'Ilx1NjcwOCJkIlx1NjVlNSInLGxuWzI5XT0nbSJcdTY3MDgiZCJcdTY1ZTUiJyxsblszMF09J20iLSJkIi0ieXknLGxuWzMxXT0neXl5eSJcdTVlNzQibSJcdTY3MDgiZCJcdTY1ZTUiJyxsblszMl09J2giXHU2NWY2Im1tIlx1NTIwNiInLGxuWzMzXT0naCJcdTY1ZjYibW0iXHU1MjA2InNz'@;
put 'Ilx1NzlkMiInLGxuWzM0XT0nXHU0ZTBhXHU1MzQ4L1x1NGUwYlx1NTM0OCBoIlx1NjVmNiJtbSJcdTUyMDYiJyxsblszNV09J1x1NGUwYVx1NTM0OC9cdTRlMGJcdTUzNDggaCJcdTY1ZjYibW0iXHU1MjA2InNzIlx1NzlkMiInLGxuWzM2XT0neXl5eSJcdTVlNzQibSJcdTY3MDgiJyxsbls1'@;
put 'MF09J3l5eXkiXHU1ZTc0Im0iXHU2NzA4IicsbG5bNTFdPSdtIlx1NjcwOCJkIlx1NjVlNSInLGxuWzUyXT0neXl5eSJcdTVlNzQibSJcdTY3MDgiJyxsbls1M109J20iXHU2NzA4ImQiXHU2NWU1IicsbG5bNTRdPSdtIlx1NjcwOCJkIlx1NjVlNSInLGxuWzU1XT0nXHU0ZTBhXHU1MzQ4L1x1'@;
put 'NGUwYlx1NTM0OCBoIlx1NjVmNiJtbSJcdTUyMDYiJyxsbls1Nl09J1x1NGUwYVx1NTM0OC9cdTRlMGJcdTUzNDggaCJcdTY1ZjYibW0iXHU1MjA2InNzIlx1NzlkMiInLGxuWzU3XT0neXl5eSJcdTVlNzQibSJcdTY3MDgiJyxsbls1OF09J20iXHU2NzA4ImQiXHU2NWU1Iic7YnJlYWs7Y2Fz'@;
put 'ZSJqYS1qcCI6bG5bMjddPSdbJC00MTFdZ2UiLiJtIi4iZCcsbG5bMjhdPSdbJC00MTFdZ2dnZSJcdTVlNzQibSJcdTY3MDgiZCJcdTY1ZTUiJyxsblsyOV09J1skLTQxMV1nZ2dlIlx1NWU3NCJtIlx1NjcwOCJkIlx1NjVlNSInLGxuWzMwXT0nbSIvImQiLyJ5eScsbG5bMzFdPSd5eXl5Ilx1'@;
put 'NWU3NCJtIlx1NjcwOCJkIlx1NjVlNSInLGxuWzMyXT0naCJcdTY2NDIibW0iXHU1MjA2IicsbG5bMzNdPSdoIlx1NjY0MiJtbSJcdTUyMDYic3MiXHU3OWQyIicsbG5bMzRdPSd5eXl5Ilx1NWU3NCJtIlx1NjcwOCInLGxuWzM1XT0nbSJcdTY3MDgiZCJcdTY1ZTUiJyxsblszNl09J1skLTQx'@;
put 'MV1nZSIuIm0iLiJkJyxsbls1MF09J1skLTQxMV1nZSIuIm0iLiJkJyxsbls1MV09J1skLTQxMV1nZ2dlIlx1NWU3NCJtIlx1NjcwOCJkIlx1NjVlNSInLGxuWzUyXT0neXl5eSJcdTVlNzQibSJcdTY3MDgiJyxsbls1M109J20iXHU2NzA4ImQiXHU2NWU1IicsbG5bNTRdPSdbJC00MTFdZ2dn'@;
put 'ZSJcdTVlNzQibSJcdTY3MDgiZCJcdTY1ZTUiJyxsbls1NV09J3l5eXkiXHU1ZTc0Im0iXHU2NzA4IicsbG5bNTZdPSdtIlx1NjcwOCJkIlx1NjVlNSInLGxuWzU3XT0nWyQtNDExXWdlIi4ibSIuImQnLGxuWzU4XT0nWyQtNDExXWdnZ2UiXHU1ZTc0Im0iXHU2NzA4ImQiXHU2NWU1Iic7YnJl'@;
put 'YWs7Y2FzZSJrby1rciI6bG5bMjddPSd5eXl5Ilx1NWU3NCIgbW0iXHU2NzA4IiBkZCJcdTY1ZTUiJyxsblsyOF09Im1tLWRkIixsblsyOV09Im1tLWRkIixsblszMF09Im1tLWRkLXl5IixsblszMV09J3l5eXkiXHViMTQ0IiBtbSJcdWM2ZDQiIGRkIlx1Yzc3YyInLGxuWzMyXT0naCJcdWMy'@;
put 'ZGMiIG1tIlx1YmQ4NCInLGxuWzMzXT0naCJcdWMyZGMiIG1tIlx1YmQ4NCIgc3MiXHVjZDA4IicsbG5bMzRdPSJ5eXl5LW1tLWRkIixsblszNV09Inl5eXktbW0tZGQiLGxuWzM2XT0neXl5eSJcdTVlNzQiIG1tIlx1NjcwOCIgZGQiXHU2NWU1IicsbG5bNTBdPSd5eXl5Ilx1NWU3NCIgbW0i'@;
put 'XHU2NzA4IiBkZCJcdTY1ZTUiJyxsbls1MV09Im1tLWRkIixsbls1Ml09Inl5eXktbW0tZGQiLGxuWzUzXT0ieXl5eS1tbS1kZCIsbG5bNTRdPSJtbS1kZCIsbG5bNTVdPSJ5eXl5LW1tLWRkIixsbls1Nl09Inl5eXktbW0tZGQiLGxuWzU3XT0neXl5eSJcdTVlNzQiIG1tIlx1NjcwOCIgZGQi'@;
put 'XHU2NWU1IicsbG5bNThdPSJtbS1kZCI7YnJlYWs7Y2FzZSJ0aC10aCI6bG5bNTldPScidCIwJyxsbls2MF09JyJ0IjAuMDAnLGxuWzYxXT0nInQiIywjIzAnLGxuWzYyXT0nInQiIywjIzAuMDAnLGxuWzY3XT0idDAlIixsbls2OF09InQwLjAwJSIsbG5bNjldPSJ0IyA/Lz8iLGxuWzcwXT0i'@;
put 'dCMgPz8vPz8iLGxuWzcxXT0nXHUwZTI3Ii8iXHUwZTE0Ii8iXHUwZTFiXHUwZTFiXHUwZTFiXHUwZTFiJyxsbls3Ml09J1x1MGUyNyItIlx1MGUxNFx1MGUxNFx1MGUxNCItIlx1MGUxYlx1MGUxYicsbG5bNzNdPSdcdTBlMjciLSJcdTBlMTRcdTBlMTRcdTBlMTQnLGxuWzc0XT0nXHUwZTE0'@;
put 'XHUwZTE0XHUwZTE0Ii0iXHUwZTFiXHUwZTFiJyxsbls3NV09J1x1MGUwYSI6Ilx1MGUxOVx1MGUxOScsbG5bNzZdPSdcdTBlMGEiOiJcdTBlMTlcdTBlMTkiOiJcdTBlMTdcdTBlMTcnLGxuWzc3XT0nXHUwZTI3Ii8iXHUwZTE0Ii8iXHUwZTFiXHUwZTFiXHUwZTFiXHUwZTFiIFx1MGUwYSI6'@;
put 'Ilx1MGUxOVx1MGUxOScsbG5bNzhdPSdcdTBlMTlcdTBlMTkiOiJcdTBlMTdcdTBlMTcnLGxuWzc5XT0nW1x1MGUwYV1cdTBlMTlcdTBlMTkiOiJcdTBlMTdcdTBlMTcnLGxuWzgwXT0nXHUwZTE5XHUwZTE5IjoiXHUwZTE3XHUwZTE3LjAnLGxuWzgxXT0iZC9tL2JiIn19Ui5fZ2VuZXJhbF9p'@;
put 'bnQ9ZnVuY3Rpb24gWmkobG4pe3JldHVybiBsbi50b1N0cmluZygxMCl9O3ZhciB5aT1mdW5jdGlvbigpe3ZhciBFbj0vKD86XC4wKnwoXC5cZCpbMS05XSkwKykkLztmdW5jdGlvbiBVbihIaSl7cmV0dXJuLTE9PUhpLmluZGV4T2YoIi4iKT9IaTpIaS5yZXBsYWNlKEVuLCIkMSIpfXZhciB4'@;
put 'aT0vKD86XC4wKnwoXC5cZCpbMS05XSkwKylbRWVdLyxvcj0vKEVbKy1dKShcZCkkLztyZXR1cm4gZnVuY3Rpb24obWEpe3ZhciBEaT1mdW5jdGlvbiBaYShIaSl7dmFyIERpLG1hPU1hdGguZmxvb3IoTWF0aC5sb2coTWF0aC5hYnMoSGkpKSpNYXRoLkxPRzEwRSk7cmV0dXJuIERpPW1hPj0t'@;
put 'NCYmbWE8PS0xP0hpLnRvUHJlY2lzaW9uKDEwK21hKTpNYXRoLmFicyhtYSk8PTk/ZnVuY3Rpb24gU3IoSGkpe3ZhciBtYT1IaTwwPzEyOjExLERpPVVuKEhpLnRvRml4ZWQoMTIpKTtyZXR1cm4gRGkubGVuZ3RoPD1tYXx8KERpPUhpLnRvUHJlY2lzaW9uKDEwKSkubGVuZ3RoPD1tYT9EaTpI'@;
put 'aS50b0V4cG9uZW50aWFsKDUpfShIaSk6MTA9PT1tYT9IaS50b0ZpeGVkKDEwKS5zdWJzdHIoMCwxMik6ZnVuY3Rpb24gUGkoSGkpe3ZhciBtYT1VbihIaS50b0ZpeGVkKDExKSk7cmV0dXJuIG1hLmxlbmd0aD4oSGk8MD8xMjoxMSl8fCIwIj09PW1hfHwiLTAiPT09bWE/SGkudG9QcmVjaXNp'@;
put 'b24oNik6bWF9KEhpKSxVbihmdW5jdGlvbiBPaShIaSl7cmV0dXJuLTE9PUhpLmluZGV4T2YoIkUiKT9IaTpIaS5yZXBsYWNlKHhpLCIkMUUiKS5yZXBsYWNlKG9yLCIkMTAkMiIpfShEaS50b1VwcGVyQ2FzZSgpKSl9KG1hKTtyZXR1cm4iLCI9PT1MaSYmIi4iPT09a3I/RGk6RGkucmVwbGFj'@;
put 'ZSgvWywuXS9nLGZ1bmN0aW9uKGNzKXtyZXR1cm4iLCI9PWNzP0xpOmtyfSl9fSgpO2Z1bmN0aW9uIF9hKGxuLEVuKXtzd2l0Y2godHlwZW9mIGxuKXtjYXNlInN0cmluZyI6cmV0dXJuIGxuO2Nhc2UiYm9vbGVhbiI6cmV0dXJuIGxuPyJUUlVFIjoiRkFMU0UiO2Nhc2UibnVtYmVyIjpyZXR1'@;
put 'cm4oMHxsbik9PT1sbj9sbi50b1N0cmluZygxMCk6eWkobG4pO2Nhc2UidW5kZWZpbmVkIjpyZXR1cm4iIjtjYXNlIm9iamVjdCI6aWYobnVsbD09bG4pcmV0dXJuIiI7aWYobG4gaW5zdGFuY2VvZiBEYXRlKXJldHVybiB5dSgxNCxYbihsbixFbiYmRW4uZGF0ZTE5MDQpLEVuKX10aHJvdyBu'@;
put 'ZXcgRXJyb3IoInVuc3VwcG9ydGVkIHZhbHVlIGluIEdlbmVyYWwgZm9ybWF0OiAiK2xuKX1SLl9nZW5lcmFsX251bT15aSxSLl9nZW5lcmFsPV9hO3ZhciBpYT0iXHUwZTUwXHUwZTUxXHUwZTUyXHUwZTUzXHUwZTU0XHUwZTU1XHUwZTU2XHUwZTU3XHUwZTU4XHUwZTU5Ii5zcGxpdCgiIik7'@;
put 'ZnVuY3Rpb24gTG8obG4sRW4sVW4seGkpe3ZhciBaYSxvcj0iIixPaT0wLFNyPTAsUGk9VW4ueSxIaT0wO3N3aXRjaChsbil7Y2FzZSA5ODpQaT1Vbi55KzU0MztjYXNlIDEyMTpzd2l0Y2goRW4ubGVuZ3RoKXtjYXNlIDE6Y2FzZSAyOlphPVBpJTEwMCxIaT0yO2JyZWFrO2RlZmF1bHQ6WmE9'@;
put 'UGklMWU0LEhpPTR9YnJlYWs7Y2FzZSAxMDk6c3dpdGNoKEVuLmxlbmd0aCl7Y2FzZSAxOmNhc2UgMjpaYT1Vbi5tLEhpPUVuLmxlbmd0aDticmVhaztjYXNlIDM6cmV0dXJuIEV0W1VuLm0tMV1bMV07Y2FzZSA1OnJldHVybiBFdFtVbi5tLTFdWzBdO2RlZmF1bHQ6cmV0dXJuIEV0W1VuLm0t'@;
put 'MV1bMl19YnJlYWs7Y2FzZSAxMDA6c3dpdGNoKEVuLmxlbmd0aCl7Y2FzZSAxOmNhc2UgMjpaYT1Vbi5kLEhpPUVuLmxlbmd0aDticmVhaztjYXNlIDM6cmV0dXJuIGN0W1VuLnFdWzBdO2RlZmF1bHQ6cmV0dXJuIGN0W1VuLnFdWzFdfWJyZWFrO2Nhc2UgMTA0OnN3aXRjaChFbi5sZW5ndGgp'@;
put 'e2Nhc2UgMTpjYXNlIDI6WmE9MSsoVW4uSCsxMSklMTIsSGk9RW4ubGVuZ3RoO2JyZWFrO2RlZmF1bHQ6dGhyb3ciYmFkIGhvdXIgZm9ybWF0OiAiK0VufWJyZWFrO2Nhc2UgNzI6c3dpdGNoKEVuLmxlbmd0aCl7Y2FzZSAxOmNhc2UgMjpaYT1Vbi5ILEhpPUVuLmxlbmd0aDticmVhaztkZWZh'@;
put 'dWx0OnRocm93ImJhZCBob3VyIGZvcm1hdDogIitFbn1icmVhaztjYXNlIDc3OnN3aXRjaChFbi5sZW5ndGgpe2Nhc2UgMTpjYXNlIDI6WmE9VW4uTSxIaT1Fbi5sZW5ndGg7YnJlYWs7ZGVmYXVsdDp0aHJvdyJiYWQgbWludXRlIGZvcm1hdDogIitFbn1icmVhaztjYXNlIDExNTppZigicyIh'@;
put 'PUVuJiYic3MiIT1FbiYmIi4wIiE9RW4mJiIuMDAiIT1FbiYmIi4wMDAiIT1Fbil0aHJvdyJiYWQgc2Vjb25kIGZvcm1hdDogIitFbjtyZXR1cm4gMCE9PVVuLnV8fCJzIiE9RW4mJiJzcyIhPUVuPyhTcj14aT49Mj8zPT09eGk/MWUzOjEwMDoxPT09eGk/MTA6MSwoT2k9TWF0aC5yb3VuZChT'@;
put 'ciooVW4uUytVbi51KSkpPj02MCpTciYmKE9pPTApLCJzIj09PUVuPzA9PT1PaT8iMCI6IiIrT2kvU3I6KG9yPVEoT2ksMit4aSksInNzIj09PUVuP29yLnN1YnN0cigwLDIpOiIuIitvci5zdWJzdHIoMixFbi5sZW5ndGgtMSkpKTpRKFVuLlMsRW4ubGVuZ3RoKTtjYXNlIDkwOnN3aXRjaChF'@;
put 'bil7Y2FzZSJbaF0iOmNhc2UiW2hoXSI6Y2FzZSJbXHUwZTBhXSI6Y2FzZSJbXHUwZTBhXHUwZTBhXSI6WmE9MjQqVW4uRCtVbi5IO2JyZWFrO2Nhc2UiW21dIjpjYXNlIlttbV0iOmNhc2UiW1x1MGUxOV0iOmNhc2UiW1x1MGUxOVx1MGUxOV0iOlphPTYwKigyNCpVbi5EK1VuLkgpK1VuLk07'@;
put 'YnJlYWs7Y2FzZSJbc10iOmNhc2UiW3NzXSI6Y2FzZSJbXHUwZTE3XSI6Y2FzZSJbXHUwZTE3XHUwZTE3XSI6WmE9NjAqKDYwKigyNCpVbi5EK1VuLkgpK1VuLk0pK01hdGgucm91bmQoVW4uUytVbi51KTticmVhaztkZWZhdWx0OnRocm93ImJhZCBhYnN0aW1lIGZvcm1hdDogIitFbn1IaT0z'@;
put 'PT09RW4ubGVuZ3RoPzE6MjticmVhaztjYXNlIDEwMTpaYT1QaSxIaT0xO2JyZWFrO2Nhc2UgMzYyMzpaYT1Vbi5kLEhpPUVuLmxlbmd0aDticmVhaztjYXNlIDM2MDQ6c3dpdGNoKEVuLmxlbmd0aCl7Y2FzZSAxOmNhc2UgMjpaYT1Vbi5tLEhpPUVuLmxlbmd0aDticmVhaztjYXNlIDM6cmV0'@;
put 'dXJuIEV0W1VuLm0tMV1bMV07Y2FzZSA1OnJldHVybiBFdFtVbi5tLTFdWzBdO2RlZmF1bHQ6cmV0dXJuIEV0W1VuLm0tMV1bMl19YnJlYWs7Y2FzZSAzNjExOnN3aXRjaChQaT1Vbi55KzU0MyxFbi5sZW5ndGgpe2Nhc2UgMTpjYXNlIDI6WmE9UGklMTAwLEhpPTI7YnJlYWs7ZGVmYXVsdDpa'@;
put 'YT1QaSUxZTQsSGk9NH1icmVhaztjYXNlIDM1OTQ6WmE9VW4uSCxIaT1Fbi5sZW5ndGg7YnJlYWs7Y2FzZSAzNjA5OlphPVVuLk0sSGk9RW4ubGVuZ3RoO2JyZWFrO2Nhc2UgMzYwNzpaYT1Vbi5TLEhpPUVuLmxlbmd0aDticmVhaztkZWZhdWx0OnRocm93IGxuLnRvU3RyaW5nKDE2KX12YXIg'@;
put 'bWE9SGk+MD9RKFphLEhpKToiIjtyZXR1cm4oOTA9PWxuP0VuLmNoYXJDb2RlQXQoMSk8MzU4NDpsbjwzNTg0KT9tYTptYS5yZXBsYWNlKC9bMC05XS9nLGZ1bmN0aW9uKERpKXtyZXR1cm4gaWFbK0RpXX0pfWZ1bmN0aW9uIE9hKGxuKXtpZihsbi5sZW5ndGg8PTMpcmV0dXJuIGxuO2Zvcih2'@;
put 'YXIgVW49bG4ubGVuZ3RoJTMseGk9bG4uc3Vic3RyKDAsVW4pO1VuIT1sbi5sZW5ndGg7VW4rPTMpeGkrPSh4aS5sZW5ndGg+MD8iLCI6IiIpK2xuLnN1YnN0cihVbiwzKTtyZXR1cm4geGl9dmFyIGhvPWZ1bmN0aW9uKCl7dmFyIEVuPS8lL2c7ZnVuY3Rpb24gb3Iod24sWnQpe3ZhciBubix4'@;
put 'bj13bi5pbmRleE9mKCJFIiktd24uaW5kZXhPZigiLiIpLTE7aWYod24ubWF0Y2goL14jKzAuMEVcKzAkLykpe2lmKDA9PVp0KXJldHVybiIwLjBFKzAiO2lmKFp0PDApcmV0dXJuIi0iK29yKHduLC1adCk7dmFyIHpuPXduLmluZGV4T2YoIi4iKTstMT09PXpuJiYoem49d24uaW5kZXhPZigi'@;
put 'RSIpKTt2YXIgeXI9TWF0aC5mbG9vcihNYXRoLmxvZyhadCkqTWF0aC5MT0cxMEUpJXpuO2lmKHlyPDAmJih5cis9em4pLC0xPT09KG5uPShadC9NYXRoLnBvdygxMCx5cikpLnRvUHJlY2lzaW9uKHhuKzErKHpuK3lyKSV6bikpLmluZGV4T2YoImUiKSl7dmFyIFdyPU1hdGguZmxvb3IoTWF0'@;
put 'aC5sb2coWnQpKk1hdGguTE9HMTBFKTtmb3IoLTE9PT1ubi5pbmRleE9mKCIuIik/bm49bm4uY2hhckF0KDApKyIuIitubi5zdWJzdHIoMSkrIkUrIisoV3Itbm4ubGVuZ3RoK3lyKTpubis9IkUrIisoV3IteXIpOyIwLiI9PT1ubi5zdWJzdHIoMCwyKTspbm49KG5uPW5uLmNoYXJBdCgwKStu'@;
put 'bi5zdWJzdHIoMix6bikrIi4iK25uLnN1YnN0cigyK3puKSkucmVwbGFjZSgvXjArKFsxLTldKS8sIiQxIikucmVwbGFjZSgvXjArXC4vLCIwLiIpO25uPW5uLnJlcGxhY2UoL1wrLS8sIi0iKX1ubj1ubi5yZXBsYWNlKC9eKFsrLV0/KShcZCopXC4oXGQqKVtFZV0vLGZ1bmN0aW9uKG9pLG5p'@;
put 'LFhpLFVpKXtyZXR1cm4gbmkrWGkrVWkuc3Vic3RyKDAsKHpuK3lyKSV6bikrIi4iK1VpLnN1YnN0cih5cikrIkUifSl9ZWxzZSBubj1adC50b0V4cG9uZW50aWFsKHhuKTtyZXR1cm4gd24ubWF0Y2goL0VcKzAwJC8pJiZubi5tYXRjaCgvZVsrLV1cZCQvKSYmKG5uPW5uLnN1YnN0cigwLG5u'@;
put 'Lmxlbmd0aC0xKSsiMCIrbm4uY2hhckF0KG5uLmxlbmd0aC0xKSksd24ubWF0Y2goL0VcLS8pJiZubi5tYXRjaCgvZVwrLykmJihubj1ubi5yZXBsYWNlKC9lXCsvLCJlIikpLG5uLnJlcGxhY2UoImUiLCJFIil9dmFyIE9pPS8jIChcPyspKCA/KVwvKCA/KShcZCspLyxaYT0vXiMqMCpcLihb'@;
put 'MCNdKykvLEhpPS9cKS4qWzAjXS8sbWE9L1woIyMjXCkgIyMjXFw/LSMjIyMvO2Z1bmN0aW9uIERpKHduKXtmb3IodmFyIG5uLFp0PSIiLHhuPTA7eG4hPXduLmxlbmd0aDsrK3huKXN3aXRjaChubj13bi5jaGFyQ29kZUF0KHhuKSl7Y2FzZSAzNTpicmVhaztjYXNlIDYzOlp0Kz0iICI7YnJl'@;
put 'YWs7Y2FzZSA0ODpadCs9IjAiO2JyZWFrO2RlZmF1bHQ6WnQrPVN0cmluZy5mcm9tQ2hhckNvZGUobm4pfXJldHVybiBadH1mdW5jdGlvbiBjcyh3bixadCl7dmFyIG5uPU1hdGgucG93KDEwLFp0KTtyZXR1cm4iIitNYXRoLnJvdW5kKHduKm5uKS9ubn1mdW5jdGlvbiBZbyh3bixadCl7aWYo'@;
put 'WnQ+MTEpcmV0dXJuIFlvKHduLDExKSpNYXRoLnBvdygxMCxadC0xMSk7dmFyIG5uPXduLU1hdGguZmxvb3Iod24pLHhuPU1hdGgucG93KDEwLFp0KTtyZXR1cm4gWnQ8KCIiK01hdGgucm91bmQobm4qeG4pKS5sZW5ndGg/MDpNYXRoLnJvdW5kKG5uKnhuKX1mdW5jdGlvbiBFbCh3bixadCxu'@;
put 'bil7aWYoNDA9PT13bi5jaGFyQ29kZUF0KDApJiYhWnQubWF0Y2goSGkpKXt2YXIgeG49WnQucmVwbGFjZSgvXCggKi8sIiIpLnJlcGxhY2UoLyBcKS8sIiIpLnJlcGxhY2UoL1wpLywiIik7cmV0dXJuIG5uPj0wP0VsKCJuIix4bixubik6IigiK0VsKCJuIix4biwtbm4pKyIpIn1pZig0ND09'@;
put 'PVp0LmNoYXJDb2RlQXQoWnQubGVuZ3RoLTEpKXJldHVybiBmdW5jdGlvbiB4aSh3bixadCxubil7Zm9yKHZhciB4bj1adC5sZW5ndGgtMTs0ND09PVp0LmNoYXJDb2RlQXQoeG4tMSk7KS0teG47cmV0dXJuIGhvKHduLFp0LnN1YnN0cigwLHhuKSxubi9NYXRoLnBvdygxMCwzKihadC5sZW5n'@;
put 'dGgteG4pKSl9KHduLFp0LG5uKTtpZigtMSE9PVp0LmluZGV4T2YoIiUiKSlyZXR1cm4gZnVuY3Rpb24gVW4od24sWnQsbm4pe3ZhciB4bj1adC5yZXBsYWNlKEVuLCIiKSx6bj1adC5sZW5ndGgteG4ubGVuZ3RoO3JldHVybiBobyh3bix4bixubipNYXRoLnBvdygxMCwyKnpuKSkrRygiJSIs'@;
put 'em4pfSh3bixadCxubik7aWYoLTEhPT1adC5pbmRleE9mKCJFIikpcmV0dXJuIG9yKFp0LG5uKTtpZigzNj09PVp0LmNoYXJDb2RlQXQoMCkpcmV0dXJuIiQiK0VsKHduLFp0LnN1YnN0cigiICI9PVp0LmNoYXJBdCgxKT8yOjEpLG5uKTt2YXIgem4seXIsV3Isb2ksbmk9TWF0aC5hYnMobm4p'@;
put 'LFhpPW5uPDA/Ii0iOiIiO2lmKFp0Lm1hdGNoKC9eMDArJC8pKXJldHVybiBYaStOZShuaSxadC5sZW5ndGgpO2lmKFp0Lm1hdGNoKC9eWyM/XSskLykpcmV0dXJuIjAiPT09KHpuPU5lKG5uLDApKSYmKHpuPSIiKSx6bi5sZW5ndGg+WnQubGVuZ3RoP3puOkRpKFp0LnN1YnN0cigwLFp0Lmxl'@;
put 'bmd0aC16bi5sZW5ndGgpKSt6bjtpZih5cj1adC5tYXRjaChPaSkpcmV0dXJuIGZ1bmN0aW9uIFNyKHduLFp0LG5uKXt2YXIgeG49cGFyc2VJbnQod25bNF0sMTApLHpuPU1hdGgucm91bmQoWnQqeG4pLHlyPU1hdGguZmxvb3Ioem4veG4pLFdyPXpuLXlyKnhuLG9pPXhuO3JldHVybiBubiso'@;
put 'MD09PXlyPyIiOiIiK3lyKSsiICIrKDA9PT1Xcj9HKCIgIix3blsxXS5sZW5ndGgrMSt3bls0XS5sZW5ndGgpOm9lKFdyLHduWzFdLmxlbmd0aCkrd25bMl0rIi8iK3duWzNdK1Eob2ksd25bNF0ubGVuZ3RoKSl9KHlyLG5pLFhpKTtpZihadC5tYXRjaCgvXiMrMCskLykpcmV0dXJuIFhpK05l'@;
put 'KG5pLFp0Lmxlbmd0aC1adC5pbmRleE9mKCIwIikpO2lmKHlyPVp0Lm1hdGNoKFphKSlyZXR1cm4gem49Y3Mobm4seXJbMV0ubGVuZ3RoKS5yZXBsYWNlKC9eKFteXC5dKykkLywiJDEuIitEaSh5clsxXSkpLnJlcGxhY2UoL1wuJC8sIi4iK0RpKHlyWzFdKSkucmVwbGFjZSgvXC4oXGQqKSQv'@;
put 'LGZ1bmN0aW9uKFRvLHhzKXtyZXR1cm4iLiIreHMrRygiMCIsRGkoeXJbMV0pLmxlbmd0aC14cy5sZW5ndGgpfSksLTEhPT1adC5pbmRleE9mKCIwLiIpP3puOnpuLnJlcGxhY2UoL14wXC4vLCIuIik7aWYoWnQ9WnQucmVwbGFjZSgvXiMrKFswLl0pLywiJDEiKSx5cj1adC5tYXRjaCgvXigw'@;
put 'KilcLigjKikkLykpcmV0dXJuIFhpK2NzKG5pLHlyWzJdLmxlbmd0aCkucmVwbGFjZSgvXC4oXGQqWzEtOV0pMCokLywiLiQxIikucmVwbGFjZSgvXigtP1xkKikkLywiJDEuIikucmVwbGFjZSgvXjBcLi8seXJbMV0ubGVuZ3RoPyIwLiI6Ii4iKTtpZih5cj1adC5tYXRjaCgvXiN7MSwzfSwj'@;
put 'IzAoXC4/KSQvKSlyZXR1cm4gWGkrT2EoTmUobmksMCkpO2lmKHlyPVp0Lm1hdGNoKC9eIywjIzBcLihbIzBdKjApJC8pKXJldHVybiBubjwwPyItIitFbCh3bixadCwtbm4pOk9hKCIiKyhNYXRoLmZsb29yKG5uKStmdW5jdGlvbiB4bCh3bixadCl7cmV0dXJuIFp0PCgiIitNYXRoLnJvdW5k'@;
put 'KCh3bi1NYXRoLmZsb29yKHduKSkqTWF0aC5wb3coMTAsWnQpKSkubGVuZ3RoPzE6MH0obm4seXJbMV0ubGVuZ3RoKSkpKyIuIitRKFlvKG5uLHlyWzFdLmxlbmd0aCkseXJbMV0ubGVuZ3RoKTtpZih5cj1adC5tYXRjaCgvXiMsIyosIzAvKSlyZXR1cm4gRWwod24sWnQucmVwbGFjZSgvXiMs'@;
put 'IyosLywiIiksbm4pO2lmKHlyPVp0Lm1hdGNoKC9eKFswI10rKShcXD8tKFswI10rKSkrJC8pKXJldHVybiB6bj1rKEVsKHduLFp0LnJlcGxhY2UoL1tcXC1dL2csIiIpLG5uKSksV3I9MCxrKGsoWnQucmVwbGFjZSgvXFwvZywiIikpLnJlcGxhY2UoL1swI10vZyxmdW5jdGlvbihUbyl7cmV0'@;
put 'dXJuIFdyPHpuLmxlbmd0aD96bi5jaGFyQXQoV3IrKyk6IjAiPT09VG8/IjAiOiIifSkpO2lmKFp0Lm1hdGNoKG1hKSlyZXR1cm4iKCIrKHpuPUVsKHduLCIjIyMjIyMjIyMjIixubikpLnN1YnN0cigwLDMpKyIpICIrem4uc3Vic3RyKDMsMykrIi0iK3puLnN1YnN0cig2KTt2YXIgVWk9IiI7'@;
put 'aWYoeXI9WnQubWF0Y2goL14oWyMwP10rKSggPylcLyggPykoWyMwP10rKS8pKXJldHVybiBXcj1NYXRoLm1pbih5cls0XS5sZW5ndGgsNyksb2k9S3QobmksTWF0aC5wb3coMTAsV3IpLTEsITEpLHpuPSIiK1hpLCIgIj09KFVpPWhvKCJuIix5clsxXSxvaVsxXSkpLmNoYXJBdChVaS5sZW5n'@;
put 'dGgtMSkmJihVaT1VaS5zdWJzdHIoMCxVaS5sZW5ndGgtMSkrIjAiKSx6bis9VWkreXJbMl0rIi8iK3lyWzNdLChVaT1nZShvaVsyXSxXcikpLmxlbmd0aDx5cls0XS5sZW5ndGgmJihVaT1EaSh5cls0XS5zdWJzdHIoeXJbNF0ubGVuZ3RoLVVpLmxlbmd0aCkpK1VpKSx6bis9VWk7aWYoeXI9'@;
put 'WnQubWF0Y2goL14jIChbIzA/XSspKCA/KVwvKCA/KShbIzA/XSspLykpcmV0dXJuIFdyPU1hdGgubWluKE1hdGgubWF4KHlyWzFdLmxlbmd0aCx5cls0XS5sZW5ndGgpLDcpLFhpKygob2k9S3QobmksTWF0aC5wb3coMTAsV3IpLTEsITApKVswXXx8KG9pWzFdPyIiOiIwIikpKyIgIisob2lb'@;
put 'MV0/b2Uob2lbMV0sV3IpK3lyWzJdKyIvIit5clszXStnZShvaVsyXSxXcik6RygiICIsMipXcisxK3lyWzJdLmxlbmd0aCt5clszXS5sZW5ndGgpKTtpZih5cj1adC5tYXRjaCgvXlsjMD9dKyQvKSlyZXR1cm4gem49TmUobm4sMCksWnQubGVuZ3RoPD16bi5sZW5ndGg/em46RGkoWnQuc3Vi'@;
put 'c3RyKDAsWnQubGVuZ3RoLXpuLmxlbmd0aCkpK3puO2lmKHlyPVp0Lm1hdGNoKC9eKFsjMD9dKylcLihbIzBdKykkLykpe3puPSIiK25uLnRvRml4ZWQoTWF0aC5taW4oeXJbMl0ubGVuZ3RoLDEwKSkucmVwbGFjZSgvKFteMF0pMCskLywiJDEiKSxXcj16bi5pbmRleE9mKCIuIik7dmFyIG5v'@;
put 'PVp0LmluZGV4T2YoIi4iKS1XcixqYT1adC5sZW5ndGgtem4ubGVuZ3RoLW5vO3JldHVybiBEaShadC5zdWJzdHIoMCxubykrem4rWnQuc3Vic3RyKFp0Lmxlbmd0aC1qYSkpfWlmKHlyPVp0Lm1hdGNoKC9eMDAsMDAwXC4oWyMwXSowKSQvKSlyZXR1cm4gV3I9WW8obm4seXJbMV0ubGVuZ3Ro'@;
put 'KSxubjwwPyItIitFbCh3bixadCwtbm4pOk9hKGZ1bmN0aW9uIF91KHduKXtyZXR1cm4gd248MjE0NzQ4MzY0NyYmd24+LTIxNDc0ODM2NDg/IiIrKHduPj0wPzB8d246d24tMXwwKToiIitNYXRoLmZsb29yKHduKX0obm4pKS5yZXBsYWNlKC9eXGQsXGR7M30kLywiMCQmIikucmVwbGFjZSgv'@;
put 'XlxkKiQvLGZ1bmN0aW9uKFRvKXtyZXR1cm4iMDAsIisoVG8ubGVuZ3RoPDM/USgwLDMtVG8ubGVuZ3RoKToiIikrVG99KSsiLiIrUShXcix5clsxXS5sZW5ndGgpO3N3aXRjaChadCl7Y2FzZSIjIyMsIyMwLjAwIjpyZXR1cm4gRWwod24sIiMsIyMwLjAwIixubik7Y2FzZSIjIyMsIyMjIjpj'@;
put 'YXNlIiMjLCMjIyI6Y2FzZSIjLCMjIyI6dmFyIHZhPU9hKE5lKG5pLDApKTtyZXR1cm4iMCIhPT12YT9YaSt2YToiIjtjYXNlIiMjIywjIyMuMDAiOnJldHVybiBFbCh3biwiIyMjLCMjMC4wMCIsbm4pLnJlcGxhY2UoL14wXC4vLCIuIik7Y2FzZSIjLCMjIy4wMCI6cmV0dXJuIEVsKHduLCIj'@;
put 'LCMjMC4wMCIsbm4pLnJlcGxhY2UoL14wXC4vLCIuIil9dGhyb3cgbmV3IEVycm9yKCJ1bnN1cHBvcnRlZCBmb3JtYXQgfCIrWnQrInwiKX1mdW5jdGlvbiBnbih3bixadCl7dmFyIG5uLHhuPXduLmluZGV4T2YoIkUiKS13bi5pbmRleE9mKCIuIiktMTtpZih3bi5tYXRjaCgvXiMrMC4wRVwr'@;
put 'MCQvKSl7aWYoMD09WnQpcmV0dXJuIjAuMEUrMCI7aWYoWnQ8MClyZXR1cm4iLSIrZ24od24sLVp0KTt2YXIgem49d24uaW5kZXhPZigiLiIpOy0xPT09em4mJih6bj13bi5pbmRleE9mKCJFIikpO3ZhciB5cj1NYXRoLmZsb29yKE1hdGgubG9nKFp0KSpNYXRoLkxPRzEwRSklem47aWYoeXI8'@;
put 'MCYmKHlyKz16biksIShubj0oWnQvTWF0aC5wb3coMTAseXIpKS50b1ByZWNpc2lvbih4bisxKyh6bit5ciklem4pKS5tYXRjaCgvW0VlXS8pKXt2YXIgV3I9TWF0aC5mbG9vcihNYXRoLmxvZyhadCkqTWF0aC5MT0cxMEUpOy0xPT09bm4uaW5kZXhPZigiLiIpP25uPW5uLmNoYXJBdCgwKSsi'@;
put 'LiIrbm4uc3Vic3RyKDEpKyJFKyIrKFdyLW5uLmxlbmd0aCt5cik6bm4rPSJFKyIrKFdyLXlyKSxubj1ubi5yZXBsYWNlKC9cKy0vLCItIil9bm49bm4ucmVwbGFjZSgvXihbKy1dPykoXGQqKVwuKFxkKilbRWVdLyxmdW5jdGlvbihvaSxuaSxYaSxVaSl7cmV0dXJuIG5pK1hpK1VpLnN1YnN0'@;
put 'cigwLCh6bit5ciklem4pKyIuIitVaS5zdWJzdHIoeXIpKyJFIn0pfWVsc2Ugbm49WnQudG9FeHBvbmVudGlhbCh4bik7cmV0dXJuIHduLm1hdGNoKC9FXCswMCQvKSYmbm4ubWF0Y2goL2VbKy1dXGQkLykmJihubj1ubi5zdWJzdHIoMCxubi5sZW5ndGgtMSkrIjAiK25uLmNoYXJBdChubi5s'@;
put 'ZW5ndGgtMSkpLHduLm1hdGNoKC9FXC0vKSYmbm4ubWF0Y2goL2VcKy8pJiYobm49bm4ucmVwbGFjZSgvZVwrLywiZSIpKSxubi5yZXBsYWNlKCJlIiwiRSIpfWZ1bmN0aW9uIGtuKHduLFp0LG5uKXtpZig0MD09PXduLmNoYXJDb2RlQXQoMCkmJiFadC5tYXRjaChIaSkpe3ZhciB4bj1adC5y'@;
put 'ZXBsYWNlKC9cKCAqLywiIikucmVwbGFjZSgvIFwpLywiIikucmVwbGFjZSgvXCkvLCIiKTtyZXR1cm4gbm4+PTA/a24oIm4iLHhuLG5uKToiKCIra24oIm4iLHhuLC1ubikrIikifWlmKDQ0PT09WnQuY2hhckNvZGVBdChadC5sZW5ndGgtMSkpcmV0dXJuIGZ1bmN0aW9uIEZmKHduLFp0LG5u'@;
put 'KXtmb3IodmFyIHhuPVp0Lmxlbmd0aC0xOzQ0PT09WnQuY2hhckNvZGVBdCh4bi0xKTspLS14bjtyZXR1cm4gaG8od24sWnQuc3Vic3RyKDAseG4pLG5uL01hdGgucG93KDEwLDMqKFp0Lmxlbmd0aC14bikpKX0od24sWnQsbm4pO2lmKC0xIT09WnQuaW5kZXhPZigiJSIpKXJldHVybiBmdW5j'@;
put 'dGlvbiB5ZCh3bixadCxubil7dmFyIHhuPVp0LnJlcGxhY2UoRW4sIiIpLHpuPVp0Lmxlbmd0aC14bi5sZW5ndGg7cmV0dXJuIGhvKHduLHhuLG5uKk1hdGgucG93KDEwLDIqem4pKStHKCIlIix6bil9KHduLFp0LG5uKTtpZigtMSE9PVp0LmluZGV4T2YoIkUiKSlyZXR1cm4gZ24oWnQsbm4p'@;
put 'O2lmKDM2PT09WnQuY2hhckNvZGVBdCgwKSlyZXR1cm4iJCIra24od24sWnQuc3Vic3RyKCIgIj09WnQuY2hhckF0KDEpPzI6MSksbm4pO3ZhciB6bix5cixXcixvaSxuaT1NYXRoLmFicyhubiksWGk9bm48MD8iLSI6IiI7aWYoWnQubWF0Y2goL14wMCskLykpcmV0dXJuIFhpK1EobmksWnQu'@;
put 'bGVuZ3RoKTtpZihadC5tYXRjaCgvXlsjP10rJC8pKXJldHVybiB6bj0iIitubiwwPT09bm4mJih6bj0iIiksem4ubGVuZ3RoPlp0Lmxlbmd0aD96bjpEaShadC5zdWJzdHIoMCxadC5sZW5ndGgtem4ubGVuZ3RoKSkrem47aWYoeXI9WnQubWF0Y2goT2kpKXJldHVybiBmdW5jdGlvbiBQaSh3'@;
put 'bixadCxubil7cmV0dXJuIG5uKygwPT09WnQ/IiI6IiIrWnQpK0coIiAiLHduWzFdLmxlbmd0aCsyK3duWzRdLmxlbmd0aCl9KHlyLG5pLFhpKTtpZihadC5tYXRjaCgvXiMrMCskLykpcmV0dXJuIFhpK1EobmksWnQubGVuZ3RoLVp0LmluZGV4T2YoIjAiKSk7aWYoeXI9WnQubWF0Y2goWmEp'@;
put 'KXJldHVybiB6bj0oem49KCIiK25uKS5yZXBsYWNlKC9eKFteXC5dKykkLywiJDEuIitEaSh5clsxXSkpLnJlcGxhY2UoL1wuJC8sIi4iK0RpKHlyWzFdKSkpLnJlcGxhY2UoL1wuKFxkKikkLyxmdW5jdGlvbihUbyx4cyl7cmV0dXJuIi4iK3hzK0coIjAiLERpKHlyWzFdKS5sZW5ndGgteHMu'@;
put 'bGVuZ3RoKX0pLC0xIT09WnQuaW5kZXhPZigiMC4iKT96bjp6bi5yZXBsYWNlKC9eMFwuLywiLiIpO2lmKFp0PVp0LnJlcGxhY2UoL14jKyhbMC5dKS8sIiQxIikseXI9WnQubWF0Y2goL14oMCopXC4oIyopJC8pKXJldHVybiBYaSsoIiIrbmkpLnJlcGxhY2UoL1wuKFxkKlsxLTldKTAqJC8s'@;
put 'Ii4kMSIpLnJlcGxhY2UoL14oLT9cZCopJC8sIiQxLiIpLnJlcGxhY2UoL14wXC4vLHlyWzFdLmxlbmd0aD8iMC4iOiIuIik7aWYoeXI9WnQubWF0Y2goL14jezEsM30sIyMwKFwuPykkLykpcmV0dXJuIFhpK09hKCIiK25pKTtpZih5cj1adC5tYXRjaCgvXiMsIyMwXC4oWyMwXSowKSQvKSly'@;
put 'ZXR1cm4gbm48MD8iLSIra24od24sWnQsLW5uKTpPYSgiIitubikrIi4iK0coIjAiLHlyWzFdLmxlbmd0aCk7aWYoeXI9WnQubWF0Y2goL14jLCMqLCMwLykpcmV0dXJuIGtuKHduLFp0LnJlcGxhY2UoL14jLCMqLC8sIiIpLG5uKTtpZih5cj1adC5tYXRjaCgvXihbMCNdKykoXFw/LShbMCNd'@;
put 'KykpKyQvKSlyZXR1cm4gem49ayhrbih3bixadC5yZXBsYWNlKC9bXFwtXS9nLCIiKSxubikpLFdyPTAsayhrKFp0LnJlcGxhY2UoL1xcL2csIiIpKS5yZXBsYWNlKC9bMCNdL2csZnVuY3Rpb24oVG8pe3JldHVybiBXcjx6bi5sZW5ndGg/em4uY2hhckF0KFdyKyspOiIwIj09PVRvPyIwIjoi'@;
put 'In0pKTtpZihadC5tYXRjaChtYSkpcmV0dXJuIigiKyh6bj1rbih3biwiIyMjIyMjIyMjIyIsbm4pKS5zdWJzdHIoMCwzKSsiKSAiK3puLnN1YnN0cigzLDMpKyItIit6bi5zdWJzdHIoNik7dmFyIFVpPSIiO2lmKHlyPVp0Lm1hdGNoKC9eKFsjMD9dKykoID8pXC8oID8pKFsjMD9dKykvKSly'@;
put 'ZXR1cm4gV3I9TWF0aC5taW4oeXJbNF0ubGVuZ3RoLDcpLG9pPUt0KG5pLE1hdGgucG93KDEwLFdyKS0xLCExKSx6bj0iIitYaSwiICI9PShVaT1obygibiIseXJbMV0sb2lbMV0pKS5jaGFyQXQoVWkubGVuZ3RoLTEpJiYoVWk9VWkuc3Vic3RyKDAsVWkubGVuZ3RoLTEpKyIwIiksem4rPVVp'@;
put 'K3lyWzJdKyIvIit5clszXSwoVWk9Z2Uob2lbMl0sV3IpKS5sZW5ndGg8eXJbNF0ubGVuZ3RoJiYoVWk9RGkoeXJbNF0uc3Vic3RyKHlyWzRdLmxlbmd0aC1VaS5sZW5ndGgpKStVaSksem4rPVVpO2lmKHlyPVp0Lm1hdGNoKC9eIyAoWyMwP10rKSggPylcLyggPykoWyMwP10rKS8pKXJldHVy'@;
put 'biBXcj1NYXRoLm1pbihNYXRoLm1heCh5clsxXS5sZW5ndGgseXJbNF0ubGVuZ3RoKSw3KSxYaSsoKG9pPUt0KG5pLE1hdGgucG93KDEwLFdyKS0xLCEwKSlbMF18fChvaVsxXT8iIjoiMCIpKSsiICIrKG9pWzFdP29lKG9pWzFdLFdyKSt5clsyXSsiLyIreXJbM10rZ2Uob2lbMl0sV3IpOkco'@;
put 'IiAiLDIqV3IrMSt5clsyXS5sZW5ndGgreXJbM10ubGVuZ3RoKSk7aWYoeXI9WnQubWF0Y2goL15bIzA/XSskLykpcmV0dXJuIFp0Lmxlbmd0aDw9KHpuPSIiK25uKS5sZW5ndGg/em46RGkoWnQuc3Vic3RyKDAsWnQubGVuZ3RoLXpuLmxlbmd0aCkpK3puO2lmKHlyPVp0Lm1hdGNoKC9eKFsj'@;
put 'MF0rKVwuKFsjMF0rKSQvKSl7em49IiIrbm4udG9GaXhlZChNYXRoLm1pbih5clsyXS5sZW5ndGgsMTApKS5yZXBsYWNlKC8oW14wXSkwKyQvLCIkMSIpLFdyPXpuLmluZGV4T2YoIi4iKTt2YXIgbm89WnQuaW5kZXhPZigiLiIpLVdyLGphPVp0Lmxlbmd0aC16bi5sZW5ndGgtbm87cmV0dXJu'@;
put 'IERpKFp0LnN1YnN0cigwLG5vKSt6bitadC5zdWJzdHIoWnQubGVuZ3RoLWphKSl9aWYoeXI9WnQubWF0Y2goL14wMCwwMDBcLihbIzBdKjApJC8pKXJldHVybiBubjwwPyItIitrbih3bixadCwtbm4pOk9hKCIiK25uKS5yZXBsYWNlKC9eXGQsXGR7M30kLywiMCQmIikucmVwbGFjZSgvXlxk'@;
put 'KiQvLGZ1bmN0aW9uKFRvKXtyZXR1cm4iMDAsIisoVG8ubGVuZ3RoPDM/USgwLDMtVG8ubGVuZ3RoKToiIikrVG99KSsiLiIrUSgwLHlyWzFdLmxlbmd0aCk7dmFyIHZhPU9hKCIiK25pKTtzd2l0Y2goWnQpe2Nhc2UiIyMjLCMjIyI6Y2FzZSIjIywjIyMiOmNhc2UiIywjIyMiOnJldHVybiIw'@;
put 'IiE9PXZhP1hpK3ZhOiIiO2Nhc2UiIywjMDAiOnJldHVybiIwMCIhPT0odmE9USh2YSwyKSk/WGkrdmE6IiI7ZGVmYXVsdDppZihadC5tYXRjaCgvXC5bMCM/XSokLykpcmV0dXJuIGtuKHduLFp0LnNsaWNlKDAsWnQubGFzdEluZGV4T2YoIi4iKSksbm4pK0RpKFp0LnNsaWNlKFp0Lmxhc3RJ'@;
put 'bmRleE9mKCIuIikpKX10aHJvdyBuZXcgRXJyb3IoInVuc3VwcG9ydGVkIGZvcm1hdCB8IitadCsifCIpfXJldHVybiBmdW5jdGlvbihadCxubix4bil7cmV0dXJuIjAsMCI9PW5uJiYobm49IiMsIzAwIiksKDB8eG4pPT09eG4/a24oWnQsbm4seG4pOkVsKFp0LG5uLHhuKX19KCk7ZnVuY3Rp'@;
put 'b24gSmEobG4pe2Zvcih2YXIgRW49W10sVW49ITEseGk9MCxvcj0wO3hpPGxuLmxlbmd0aDsrK3hpKXN3aXRjaChsbi5jaGFyQ29kZUF0KHhpKSl7Y2FzZSAzNDpVbj0hVW47YnJlYWs7Y2FzZSA5NTpjYXNlIDQyOmNhc2UgOTI6Kyt4aTticmVhaztjYXNlIDU5OkVuW0VuLmxlbmd0aF09bG4u'@;
put 'c3Vic3RyKG9yLHhpLW9yKSxvcj14aSsxfWlmKEVuW0VuLmxlbmd0aF09bG4uc3Vic3RyKG9yKSwhMD09PVVuKXRocm93IG5ldyBFcnJvcigiRm9ybWF0IHwiK2xuKyJ8IHVudGVybWluYXRlZCBzdHJpbmcgIik7cmV0dXJuIEVufVIuX3NwbGl0PUphO3ZhciBCaT0vXFtbSGhNbVNzXHUwRTBB'@;
put 'XHUwRTE5XHUwRTE3XSpcXS87ZnVuY3Rpb24gSXMobG4pe2Zvcih2YXIgRW49MCxVbj0iIix4aT0iIjtFbjxsbi5sZW5ndGg7KXN3aXRjaChVbj1sbi5jaGFyQXQoRW4pKXtjYXNlIkciOlllKGxuLEVuKSYmKEVuKz02KSxFbisrO2JyZWFrO2Nhc2UnIic6Zm9yKDszNCE9PWxuLmNoYXJDb2Rl'@;
put 'QXQoKytFbikmJkVuPGxuLmxlbmd0aDspOysrRW47YnJlYWs7Y2FzZSJcXCI6Y2FzZSJfIjpFbis9MjticmVhaztjYXNlIkAiOisrRW47YnJlYWs7Y2FzZSJCIjpjYXNlImIiOmlmKCIxIj09PWxuLmNoYXJBdChFbisxKXx8IjIiPT09bG4uY2hhckF0KEVuKzEpKXJldHVybiEwO2Nhc2UiTSI6'@;
put 'Y2FzZSJEIjpjYXNlIlkiOmNhc2UiSCI6Y2FzZSJTIjpjYXNlIkUiOmNhc2UibSI6Y2FzZSJkIjpjYXNlInkiOmNhc2UiaCI6Y2FzZSJzIjpjYXNlImUiOmNhc2UiZyI6cmV0dXJuITA7Y2FzZSJBIjpjYXNlImEiOmNhc2UiXHU0ZTBhIjppZigiQS9QIj09PWxuLnN1YnN0cihFbiwzKS50b1Vw'@;
put 'cGVyQ2FzZSgpfHwiQU0vUE0iPT09bG4uc3Vic3RyKEVuLDUpLnRvVXBwZXJDYXNlKCl8fCJcdTRlMGFcdTUzNDgvXHU0ZTBiXHU1MzQ4Ij09PWxuLnN1YnN0cihFbiw1KS50b1VwcGVyQ2FzZSgpKXJldHVybiEwOysrRW47YnJlYWs7Y2FzZSJbIjpmb3IoeGk9VW47Il0iIT09bG4uY2hhckF0'@;
put 'KEVuKyspJiZFbjxsbi5sZW5ndGg7KXhpKz1sbi5jaGFyQXQoRW4pO2lmKHhpLm1hdGNoKEJpKSlyZXR1cm4hMDticmVhaztjYXNlIi4iOmNhc2UiMCI6Y2FzZSIjIjpmb3IoO0VuPGxuLmxlbmd0aCYmKCIwIz8uLEUrLSUiLmluZGV4T2YoVW49bG4uY2hhckF0KCsrRW4pKT4tMXx8IlxcIj09'@;
put 'VW4mJiItIj09bG4uY2hhckF0KEVuKzEpJiYiMCMiLmluZGV4T2YobG4uY2hhckF0KEVuKzIpKT4tMSk7KTticmVhaztjYXNlIj8iOmZvcig7bG4uY2hhckF0KCsrRW4pPT09VW47KTticmVhaztjYXNlIioiOisrRW4sKCIgIj09bG4uY2hhckF0KEVuKXx8IioiPT1sbi5jaGFyQXQoRW4pKSYm'@;
put 'KytFbjticmVhaztjYXNlIigiOmNhc2UiKSI6KytFbjticmVhaztjYXNlIjEiOmNhc2UiMiI6Y2FzZSIzIjpjYXNlIjQiOmNhc2UiNSI6Y2FzZSI2IjpjYXNlIjciOmNhc2UiOCI6Y2FzZSI5Ijpmb3IoO0VuPGxuLmxlbmd0aCYmIjAxMjM0NTY3ODkiLmluZGV4T2YobG4uY2hhckF0KCsrRW4p'@;
put 'KT4tMTspO2JyZWFrO2RlZmF1bHQ6KytFbn1yZXR1cm4hMX1mdW5jdGlvbiBQbihsbixFbixVbix4aSl7Zm9yKHZhciBIaSxtYSxEaSxvcj1bXSxPaT0iIixTcj0wLFBpPSIiLFphPSJ0Iixjcz0iSCI7U3I8bG4ubGVuZ3RoOylzd2l0Y2goUGk9bG4uY2hhckF0KFNyKSl7Y2FzZSJHIjppZigh'@;
put 'WWUobG4sU3IpKXRocm93IG5ldyBFcnJvcigidW5yZWNvZ25pemVkIGNoYXJhY3RlciAiK1BpKyIgaW4gIitsbik7b3Jbb3IubGVuZ3RoXT17dDoiRyIsdjoiR2VuZXJhbCJ9LFNyKz03O2JyZWFrO2Nhc2UnIic6Zm9yKE9pPSIiOzM0IT09KERpPWxuLmNoYXJDb2RlQXQoKytTcikpJiZTcjxs'@;
put 'bi5sZW5ndGg7KU9pKz1TdHJpbmcuZnJvbUNoYXJDb2RlKERpKTtvcltvci5sZW5ndGhdPXt0OiJ0Iix2Ok9pfSwrK1NyO2JyZWFrO2Nhc2UiXFwiOnZhciBZbz1sbi5jaGFyQXQoKytTcik7b3Jbb3IubGVuZ3RoXT17dDoiKCI9PT1Zb3x8IikiPT09WW8/WW86InQiLHY6WW99LCsrU3I7YnJl'@;
put 'YWs7Y2FzZSJfIjpvcltvci5sZW5ndGhdPXt0OiJ0Iix2OiIgIn0sU3IrPTI7YnJlYWs7Y2FzZSJAIjpvcltvci5sZW5ndGhdPXt0OiJUIix2OkVufSwrK1NyO2JyZWFrO2Nhc2UiQiI6Y2FzZSJiIjppZigiMSI9PT1sbi5jaGFyQXQoU3IrMSl8fCIyIj09PWxuLmNoYXJBdChTcisxKSl7aWYo'@;
put 'bnVsbD09SGkmJm51bGw9PShIaT1UbihFbixVbiwiMiI9PT1sbi5jaGFyQXQoU3IrMSkpKSlyZXR1cm4iIjtvcltvci5sZW5ndGhdPXt0OiJYIix2OmxuLnN1YnN0cihTciwyKX0sWmE9UGksU3IrPTI7YnJlYWt9Y2FzZSJNIjpjYXNlIkQiOmNhc2UiWSI6Y2FzZSJIIjpjYXNlIlMiOmNhc2Ui'@;
put 'RSI6UGk9UGkudG9Mb3dlckNhc2UoKTtjYXNlIm0iOmNhc2UiZCI6Y2FzZSJ5IjpjYXNlImgiOmNhc2UicyI6Y2FzZSJlIjpjYXNlImciOmNhc2UiXHUwZTI3IjpjYXNlIlx1MGUxNCI6Y2FzZSJcdTBlMWIiOmNhc2UiXHUwZTBhIjpjYXNlIlx1MGUxOSI6Y2FzZSJcdTBlMTciOmlmKEVuPDB8'@;
put 'fG51bGw9PUhpJiZudWxsPT0oSGk9VG4oRW4sVW4pKSlyZXR1cm4iIjtmb3IoT2k9UGk7KytTcjxsbi5sZW5ndGgmJmxuLmNoYXJBdChTcikudG9Mb3dlckNhc2UoKT09PVBpOylPaSs9UGk7Im0iPT09UGkmJiJoIj09PVphLnRvTG93ZXJDYXNlKCkmJihQaT0iTSIpLCJoIj09PVBpJiYoUGk9'@;
put 'Y3MpLG9yW29yLmxlbmd0aF09e3Q6UGksdjpPaX0sWmE9UGk7YnJlYWs7Y2FzZSJBIjpjYXNlImEiOmNhc2UiXHU0ZTBhIjp2YXIgX3U9e3Q6UGksdjpQaX07aWYobnVsbD09SGkmJihIaT1UbihFbixVbikpLCJBL1AiPT09bG4uc3Vic3RyKFNyLDMpLnRvVXBwZXJDYXNlKCk/KG51bGwhPUhp'@;
put 'JiYoX3Uudj1IaS5IPj0xMj8iUCI6IkEiKSxfdS50PSJUIixjcz0iaCIsU3IrPTMpOiJBTS9QTSI9PT1sbi5zdWJzdHIoU3IsNSkudG9VcHBlckNhc2UoKT8obnVsbCE9SGkmJihfdS52PUhpLkg+PTEyPyJQTSI6IkFNIiksX3UudD0iVCIsU3IrPTUsY3M9ImgiKToiXHU0ZTBhXHU1MzQ4L1x1'@;
put 'NGUwYlx1NTM0OCI9PT1sbi5zdWJzdHIoU3IsNSkudG9VcHBlckNhc2UoKT8obnVsbCE9SGkmJihfdS52PUhpLkg+PTEyPyJcdTRlMGJcdTUzNDgiOiJcdTRlMGFcdTUzNDgiKSxfdS50PSJUIixTcis9NSxjcz0iaCIpOihfdS50PSJ0IiwrK1NyKSxudWxsPT1IaSYmIlQiPT09X3UudClyZXR1'@;
put 'cm4iIjtvcltvci5sZW5ndGhdPV91LFphPVBpO2JyZWFrO2Nhc2UiWyI6Zm9yKE9pPVBpOyJdIiE9PWxuLmNoYXJBdChTcisrKSYmU3I8bG4ubGVuZ3RoOylPaSs9bG4uY2hhckF0KFNyKTtpZigiXSIhPT1PaS5zbGljZSgtMSkpdGhyb3cndW50ZXJtaW5hdGVkICJbIiBibG9jazogfCcrT2kr'@;
put 'InwiO2lmKE9pLm1hdGNoKEJpKSl7aWYobnVsbD09SGkmJm51bGw9PShIaT1UbihFbixVbikpKXJldHVybiIiO29yW29yLmxlbmd0aF09e3Q6IloiLHY6T2kudG9Mb3dlckNhc2UoKX0sWmE9T2kuY2hhckF0KDEpfWVsc2UgT2kuaW5kZXhPZigiJCIpPi0xJiYoT2k9KE9pLm1hdGNoKC9cJChb'@;
put 'Xi1cW1xdXSopLyl8fFtdKVsxXXx8IiQiLElzKGxuKXx8KG9yW29yLmxlbmd0aF09e3Q6InQiLHY6T2l9KSk7YnJlYWs7Y2FzZSIuIjppZihudWxsIT1IaSl7Zm9yKE9pPVBpOysrU3I8bG4ubGVuZ3RoJiYiMCI9PT0oUGk9bG4uY2hhckF0KFNyKSk7KU9pKz1QaTtvcltvci5sZW5ndGhdPXt0'@;
put 'OiJzIix2Ok9pfTticmVha31jYXNlIjAiOmNhc2UiIyI6Zm9yKE9pPVBpOysrU3I8bG4ubGVuZ3RoJiYiMCM/LixFKy0lIi5pbmRleE9mKFBpPWxuLmNoYXJBdChTcikpPi0xOylPaSs9UGk7b3Jbb3IubGVuZ3RoXT17dDoibiIsdjpPaX07YnJlYWs7Y2FzZSI/Ijpmb3IoT2k9UGk7bG4uY2hh'@;
put 'ckF0KCsrU3IpPT09UGk7KU9pKz1QaTtvcltvci5sZW5ndGhdPXt0OlBpLHY6T2l9LFphPVBpO2JyZWFrO2Nhc2UiKiI6KytTciwoIiAiPT1sbi5jaGFyQXQoU3IpfHwiKiI9PWxuLmNoYXJBdChTcikpJiYrK1NyO2JyZWFrO2Nhc2UiKCI6Y2FzZSIpIjpvcltvci5sZW5ndGhdPXt0OjE9PT14'@;
put 'aT8idCI6UGksdjpQaX0sKytTcjticmVhaztjYXNlIjEiOmNhc2UiMiI6Y2FzZSIzIjpjYXNlIjQiOmNhc2UiNSI6Y2FzZSI2IjpjYXNlIjciOmNhc2UiOCI6Y2FzZSI5Ijpmb3IoT2k9UGk7U3I8bG4ubGVuZ3RoJiYiMDEyMzQ1Njc4OSIuaW5kZXhPZihsbi5jaGFyQXQoKytTcikpPi0xOylP'@;
put 'aSs9bG4uY2hhckF0KFNyKTtvcltvci5sZW5ndGhdPXt0OiJEIix2Ok9pfTticmVhaztjYXNlIiAiOm9yW29yLmxlbmd0aF09e3Q6UGksdjpQaX0sKytTcjticmVhaztjYXNlIiQiOm9yW29yLmxlbmd0aF09e3Q6InQiLHY6TWl9LCsrU3I7YnJlYWs7Y2FzZSIvIjpvcltvci5sZW5ndGhdPW9y'@;
put 'Lmxlbmd0aD4wJiZJcyhvcltvci5sZW5ndGgtMV0udik/e3Q6InQiLHY6Vm59Ont0OiJ0Iix2OiIvIn0sKytTcjticmVhaztkZWZhdWx0OmlmKC0xPT09IiwkLSsvKCk6IV4mJ357fTw+PVx1MjBhY2FjZmlqa2xvcHFydHV2d3h6UCIuaW5kZXhPZihQaSkpdGhyb3cgbmV3IEVycm9yKCJ1bnJl'@;
put 'Y29nbml6ZWQgY2hhcmFjdGVyICIrUGkrIiBpbiAiK2xuKTtvcltvci5sZW5ndGhdPXt0OiJ0Iix2OlBpfSwrK1NyfXZhciB5ZCxFbD0wLEZmPTA7Zm9yKFNyPW9yLmxlbmd0aC0xLFphPSJ0IjtTcj49MDstLVNyKXN3aXRjaChvcltTcl0udCl7Y2FzZSJoIjpjYXNlIkgiOm9yW1NyXS50PWNz'@;
put 'LFphPSJoIixFbDwxJiYoRWw9MSk7YnJlYWs7Y2FzZSJzIjooeWQ9b3JbU3JdLnYubWF0Y2goL1wuMCskLykpJiYoRmY9TWF0aC5tYXgoRmYseWRbMF0ubGVuZ3RoLTEpKSxFbDwzJiYoRWw9Myk7Y2FzZSJkIjpjYXNlInkiOmNhc2UiTSI6Y2FzZSJlIjpaYT1vcltTcl0udDticmVhaztjYXNl'@;
put 'Im0iOiJzIj09PVphJiYob3JbU3JdLnQ9Ik0iLEVsPDImJihFbD0yKSk7YnJlYWs7Y2FzZSJYIjpicmVhaztjYXNlIloiOkVsPDEmJm9yW1NyXS52Lm1hdGNoKC9bSGhdLykmJihFbD0xKSxFbDwyJiZvcltTcl0udi5tYXRjaCgvW01tXS8pJiYoRWw9MiksRWw8MyYmb3JbU3JdLnYubWF0Y2go'@;
put 'L1tTc10vKSYmKEVsPTMpfXN3aXRjaChFbCl7Y2FzZSAwOmJyZWFrO2Nhc2UgMTpIaS51Pj0uNSYmKEhpLnU9MCwrK0hpLlMpLEhpLlM+PTYwJiYoSGkuUz0wLCsrSGkuTSksSGkuTT49NjAmJihIaS5NPTAsKytIaS5IKTticmVhaztjYXNlIDI6SGkudT49LjUmJihIaS51PTAsKytIaS5TKSxI'@;
put 'aS5TPj02MCYmKEhpLlM9MCwrK0hpLk0pfXZhciBrbixnbj0iIjtmb3IoU3I9MDtTcjxvci5sZW5ndGg7KytTcilzd2l0Y2gob3JbU3JdLnQpe2Nhc2UidCI6Y2FzZSJUIjpjYXNlIiAiOmNhc2UiRCI6YnJlYWs7Y2FzZSJYIjpvcltTcl0udj0iIixvcltTcl0udD0iOyI7YnJlYWs7Y2FzZSJk'@;
put 'IjpjYXNlIm0iOmNhc2UieSI6Y2FzZSJoIjpjYXNlIkgiOmNhc2UiTSI6Y2FzZSJzIjpjYXNlImUiOmNhc2UiYiI6Y2FzZSJaIjpjYXNlIlx1MGUyNyI6Y2FzZSJcdTBlMTQiOmNhc2UiXHUwZTFiIjpjYXNlIlx1MGUwYSI6Y2FzZSJcdTBlMTkiOmNhc2UiXHUwZTE3IjpvcltTcl0udj1Mbyhv'@;
put 'cltTcl0udC5jaGFyQ29kZUF0KDApLG9yW1NyXS52LEhpLEZmKSxvcltTcl0udD0idCI7YnJlYWs7Y2FzZSJuIjpjYXNlIj8iOmZvcihrbj1TcisxO251bGwhPW9yW2tuXSYmKCI/Ij09PShQaT1vcltrbl0udCl8fCJEIj09PVBpfHwoIiAiPT09UGl8fCJ0Ij09PVBpKSYmbnVsbCE9b3Jba24r'@;
put 'MV0mJigiPyI9PT1vcltrbisxXS50fHwidCI9PT1vcltrbisxXS50JiYiLyI9PT1vcltrbisxXS52KXx8IigiPT09b3JbU3JdLnQmJigiICI9PT1QaXx8Im4iPT09UGl8fCIpIj09PVBpKXx8InQiPT09UGkmJigiLyI9PT1vcltrbl0udnx8IiAiPT09b3Jba25dLnYmJm51bGwhPW9yW2tuKzFd'@;
put 'JiYiPyI9PW9yW2tuKzFdLnQpKTspb3JbU3JdLnYrPW9yW2tuXS52LG9yW2tuXT17djoiIix0OiI7In0sKytrbjtnbis9b3JbU3JdLnYsU3I9a24tMTticmVhaztjYXNlIkciOm9yW1NyXS50PSJ0IixvcltTcl0udj1fYShFbixVbil9dmFyIFp0LG5uLHduPSIiO2lmKGduLmxlbmd0aD4wKXs0'@;
put 'MD09Z24uY2hhckNvZGVBdCgwKT8oWnQ9RW48MCYmNDU9PT1nbi5jaGFyQ29kZUF0KDApPy1FbjpFbixubj1obygibiIsZ24sWnQpKToobm49aG8oIm4iLGduLFp0PUVuPDAmJnhpPjE/LUVuOkVuKSxadDwwJiZvclswXSYmInQiPT1vclswXS50JiYobm49bm4uc3Vic3RyKDEpLG9yWzBdLnY9'@;
put 'Ii0iK29yWzBdLnYpKSxrbj0obm49bm4ucmVwbGFjZSgvWyxcLl0vZyxmdW5jdGlvbihXcil7cmV0dXJuIi4iPT1Xcj9rcjpMaX0pKS5sZW5ndGgtMTt2YXIgeG49b3IubGVuZ3RoO2ZvcihTcj0wO1NyPG9yLmxlbmd0aDsrK1NyKWlmKG51bGwhPW9yW1NyXSYmInQiIT1vcltTcl0udCYmb3Jb'@;
put 'U3JdLnYuaW5kZXhPZigiLiIpPi0xKXt4bj1TcjticmVha312YXIgem49b3IubGVuZ3RoO2lmKHhuPT09b3IubGVuZ3RoJiYtMT09PW5uLmluZGV4T2YoIkUiKSl7Zm9yKFNyPW9yLmxlbmd0aC0xO1NyPj0wOy0tU3IpbnVsbD09b3JbU3JdfHwtMT09PSJuPyIuaW5kZXhPZihvcltTcl0udCl8'@;
put 'fChrbj49b3JbU3JdLnYubGVuZ3RoLTE/b3JbU3JdLnY9bm4uc3Vic3RyKDErKGtuLT1vcltTcl0udi5sZW5ndGgpLG9yW1NyXS52Lmxlbmd0aCk6a248MD9vcltTcl0udj0iIjoob3JbU3JdLnY9bm4uc3Vic3RyKDAsa24rMSksa249LTEpLG9yW1NyXS50PSJ0Iix6bj1Tcik7a24+PTAmJnpu'@;
put 'PG9yLmxlbmd0aCYmKG9yW3puXS52PW5uLnN1YnN0cigwLGtuKzEpK29yW3puXS52KX1lbHNlIGlmKHhuIT09b3IubGVuZ3RoJiYtMT09PW5uLmluZGV4T2YoIkUiKSl7Zm9yKGtuPW5uLmluZGV4T2Yoa3IpLTEsU3I9eG47U3I+PTA7LS1TcilpZihudWxsIT1vcltTcl0mJi0xIT09Im4/Ii5p'@;
put 'bmRleE9mKG9yW1NyXS50KSl7Zm9yKG1hPW9yW1NyXS52LmluZGV4T2YoIi4iKT4tMSYmU3I9PT14bj9vcltTcl0udi5pbmRleE9mKCIuIiktMTpvcltTcl0udi5sZW5ndGgtMSx3bj1vcltTcl0udi5zdWJzdHIobWErMSk7bWE+PTA7LS1tYSlrbj49MCYmKCIwIj09PW9yW1NyXS52LmNoYXJB'@;
put 'dChtYSl8fCIjIj09PW9yW1NyXS52LmNoYXJBdChtYSkpJiYod249bm4uY2hhckF0KGtuLS0pK3duKTtvcltTcl0udj13bixvcltTcl0udD0idCIsem49U3J9Zm9yKGtuPj0wJiZ6bjxvci5sZW5ndGgmJihvclt6bl0udj1ubi5zdWJzdHIoMCxrbisxKStvclt6bl0udiksa249bm4uaW5kZXhP'@;
put 'ZihrcikrMSxTcj14bjtTcjxvci5sZW5ndGg7KytTcilpZihudWxsIT1vcltTcl0mJigtMSE9PSJuPygiLmluZGV4T2Yob3JbU3JdLnQpfHxTcj09PXhuKSl7Zm9yKG1hPW9yW1NyXS52LmluZGV4T2Yoa3IpPi0xJiZTcj09PXhuP29yW1NyXS52LmluZGV4T2Yoa3IpKzE6MCx3bj1vcltTcl0u'@;
put 'di5zdWJzdHIoMCxtYSk7bWE8b3JbU3JdLnYubGVuZ3RoOysrbWEpa248bm4ubGVuZ3RoJiYod24rPW5uLmNoYXJBdChrbisrKSk7b3JbU3JdLnY9d24sb3JbU3JdLnQ9InQiLHpuPVNyfX19Zm9yKFNyPTA7U3I8b3IubGVuZ3RoOysrU3IpbnVsbCE9b3JbU3JdJiYibj8iLmluZGV4T2Yob3Jb'@;
put 'U3JdLnQpPi0xJiYob3JbU3JdLnY9aG8ob3JbU3JdLnQsb3JbU3JdLnYsWnQ9eGk+MSYmRW48MCYmU3I+MCYmIi0iPT09b3JbU3ItMV0udj8tRW46RW4pLnJlcGxhY2UoL1wuL2csa3IpLnJlcGxhY2UoLywvLExpKSxvcltTcl0udD0idCIpO3ZhciB5cj0iIjtmb3IoU3I9MDtTciE9PW9yLmxl'@;
put 'bmd0aDsrK1NyKW51bGwhPW9yW1NyXSYmKHlyKz1vcltTcl0udik7cmV0dXJuIHlyfVIuaXNfZGF0ZT1JcyxSLl9ldmFsPVBuO3ZhciBocj0vXFtbPTw+XS8sUWw9L1xbKD18Pls9XT98PFs+PV0/KSgtP1xkKyg/OlwuXGQqKT8pXF0vO2Z1bmN0aW9uIFlsKGxuLEVuKXtpZihudWxsPT1Fbily'@;
put 'ZXR1cm4hMTt2YXIgVW49cGFyc2VGbG9hdChFblsyXSk7c3dpdGNoKEVuWzFdKXtjYXNlIj0iOmlmKGxuPT1VbilyZXR1cm4hMDticmVhaztjYXNlIj4iOmlmKGxuPlVuKXJldHVybiEwO2JyZWFrO2Nhc2UiPCI6aWYobG48VW4pcmV0dXJuITA7YnJlYWs7Y2FzZSI8PiI6aWYobG4hPVVuKXJl'@;
put 'dHVybiEwO2JyZWFrO2Nhc2UiPj0iOmlmKGxuPj1VbilyZXR1cm4hMDticmVhaztjYXNlIjw9IjppZihsbjw9VW4pcmV0dXJuITB9cmV0dXJuITF9ZnVuY3Rpb24geXUobG4sRW4sVW4pe251bGw9PVVuJiYoVW49e30pO3ZhciB4aT0iIjtzd2l0Y2godHlwZW9mIGxuKXtjYXNlInN0cmluZyI6'@;
put 'eGk9Im0vZC95eSI9PWxuJiZVbi5kYXRlTkY/VW4uZGF0ZU5GOmxuO2JyZWFrO2Nhc2UibnVtYmVyIjpudWxsPT0oeGk9MTQ9PWxuJiZVbi5kYXRlTkY/VW4uZGF0ZU5GOihudWxsIT1Vbi50YWJsZT9Vbi50YWJsZTpidClbbG5dKSYmKHhpPVVuLnRhYmxlJiZVbi50YWJsZVtqdFtsbl1dfHxi'@;
put 'dFtqdFtsbl1dKSxudWxsPT14aSYmKHhpPU90W2xuXXx8IkdlbmVyYWwiKX1pZihZZSh4aSwwKSlyZXR1cm4gX2EoRW4sVW4pO0VuIGluc3RhbmNlb2YgRGF0ZSYmKEVuPVhuKEVuLFVuLmRhdGUxOTA0KSk7dmFyIG9yPWZ1bmN0aW9uIEdsKGxuLEVuKXt2YXIgVW49SmEobG4pLHhpPVVuLmxl'@;
put 'bmd0aCxvcj1Vblt4aS0xXS5pbmRleE9mKCJAIik7aWYoeGk8NCYmb3I+LTEmJi0teGksVW4ubGVuZ3RoPjQpdGhyb3cgbmV3IEVycm9yKCJjYW5ub3QgZmluZCByaWdodCBmb3JtYXQgZm9yIHwiK1VuLmpvaW4oInwiKSsifCIpO2lmKCJudW1iZXIiIT10eXBlb2YgRW4pcmV0dXJuWzQsND09'@;
put 'PVVuLmxlbmd0aHx8b3I+LTE/VW5bVW4ubGVuZ3RoLTFdOiJAIl07c3dpdGNoKFVuLmxlbmd0aCl7Y2FzZSAxOlVuPW9yPi0xP1siR2VuZXJhbCIsIkdlbmVyYWwiLCJHZW5lcmFsIixVblswXV06W1VuWzBdLFVuWzBdLFVuWzBdLCJAIl07YnJlYWs7Y2FzZSAyOlVuPW9yPi0xP1tVblswXSxV'@;
put 'blswXSxVblswXSxVblsxXV06W1VuWzBdLFVuWzFdLFVuWzBdLCJAIl07YnJlYWs7Y2FzZSAzOlVuPW9yPi0xP1tVblswXSxVblsxXSxVblswXSxVblsyXV06W1VuWzBdLFVuWzFdLFVuWzJdLCJAIl19dmFyIE9pPUVuPjA/VW5bMF06RW48MD9VblsxXTpVblsyXTtpZigtMT09PVVuWzBdLmlu'@;
put 'ZGV4T2YoIlsiKSYmLTE9PT1VblsxXS5pbmRleE9mKCJbIikpcmV0dXJuW3hpLE9pXTtpZihudWxsIT1VblswXS5tYXRjaChocil8fG51bGwhPVVuWzFdLm1hdGNoKGhyKSl7dmFyIFNyPVVuWzBdLm1hdGNoKFFsKSxQaT1VblsxXS5tYXRjaChRbCk7cmV0dXJuIFlsKEVuLFNyKT9beGksVW5b'@;
put 'MF1dOllsKEVuLFBpKT9beGksVW5bMV1dOlt4aSxVbltudWxsIT1TciYmbnVsbCE9UGk/MjoxXV19cmV0dXJuW3hpLE9pXX0oeGksRW4pO2lmKFllKG9yWzFdKSlyZXR1cm4gX2EoRW4sVW4pO2lmKCEwPT09RW4pRW49IlRSVUUiO2Vsc2UgaWYoITE9PT1FbilFbj0iRkFMU0UiO2Vsc2UgaWYo'@;
put 'IiI9PT1Fbnx8bnVsbD09RW4pcmV0dXJuIiI7cmV0dXJuIFBuKG9yWzFdLEVuLFVuLG9yWzBdKX1mdW5jdGlvbiBNbChsbixFbil7aWYoIm51bWJlciIhPXR5cGVvZiBFbil7RW49K0VufHwtMTtmb3IodmFyIFVuPTA7VW48MzkyOysrVW4paWYobnVsbCE9YnRbVW5dKXtpZihidFtVbl09PWxu'@;
put 'KXtFbj1VbjticmVha319ZWxzZSBFbjwwJiYoRW49VW4pO0VuPDAmJihFbj0zOTEpfXJldHVybiBidFtFbl09bG4sRW59Ui5sb2FkPU1sLFIuX3RhYmxlPWJ0LFIuZ2V0X3RhYmxlPWZ1bmN0aW9uKCl7cmV0dXJuIGJ0fSxSLmxvYWRfdGFibGU9ZnVuY3Rpb24oRW4pe2Zvcih2YXIgVW49MDsz'@;
put 'OTIhPVVuOysrVW4pdm9pZCAwIT09RW5bVW5dJiZNbChFbltVbl0sVW4pfSxSLmluaXRfdGFibGU9YXQsUi5mb3JtYXQ9eXUsUi5nZXRsb2NhbGU9ZnVuY3Rpb24gQnIoKXtyZXR1cm4gQm58fCJlbi1VUyJ9LFIuc2V0bG9jYWxlPWZ1bmN0aW9uIF9yKGxuKXtpZihmdW5jdGlvbiBqcihsbil7'@;
put 'dmFyIEVuPTA7c3dpdGNoKChCbnx8IiIpLnRvTG93ZXJDYXNlKCkpe2Nhc2UiemgtdHciOmNhc2UiemgtY24iOmNhc2UiamEtanAiOmNhc2Uia28ta3IiOmZvcihFbj0yNztFbjw9MzY7KytFbilkZWxldGUgbG5bRW5dO2ZvcihFbj01MDtFbjw9NTg7KytFbilkZWxldGUgbG5bRW5dO2JyZWFr'@;
put 'O2Nhc2UidGgtdGgiOmZvcihFbj01OTtFbjw9NjI7KytFbilkZWxldGUgbG5bRW5dO2ZvcihFbj02NztFbjw9ODE7KytFbilkZWxldGUgbG5bRW5dfX0oYnQpLEJuPWxuLEZuKGJ0KSx0eXBlb2YgSW50bDwidSIpe3ZhciBFbj1JbnRsLkRhdGVUaW1lRm9ybWF0KGxuKTtpZihFbi5mb3JtYXRU'@;
put 'b1BhcnRzKXtmb3IodmFyIFVuPUVuLmZvcm1hdFRvUGFydHMobmV3IERhdGUoMjAyMCwwLDUsMCwwLDApKSx4aT0wO3hpPDc7Kyt4aSljdFt4aV1bMV09SW50bC5EYXRlVGltZUZvcm1hdChsbix7d2Vla2RheToibG9uZyJ9KS5mb3JtYXRUb1BhcnRzKG5ldyBEYXRlKDIwMjAsMCw1K3hpLDAs'@;
put 'MCwwKSlbMF0udmFsdWUsY3RbeGldWzBdPUludGwuRGF0ZVRpbWVGb3JtYXQobG4se3dlZWtkYXk6InNob3J0In0pLmZvcm1hdFRvUGFydHMobmV3IERhdGUoMjAyMCwwLDUreGksMCwwLDApKVswXS52YWx1ZTtmb3IodmFyIG9yPTA7b3I8MTI7KytvcilFdFtvcl1bMl09SW50bC5EYXRlVGlt'@;
put 'ZUZvcm1hdChsbix7bW9udGg6ImxvbmcifSkuZm9ybWF0VG9QYXJ0cyhuZXcgRGF0ZSgyMDIwLG9yLDIsMCwwLDApKVswXS52YWx1ZSxFdFtvcl1bMV09SW50bC5EYXRlVGltZUZvcm1hdChsbix7bW9udGg6InNob3J0In0pLmZvcm1hdFRvUGFydHMobmV3IERhdGUoMjAyMCxvciwyLDAsMCww'@;
put 'KSlbMF0udmFsdWUsRXRbb3JdWzBdPUV0W29yXVsxXS5zbGljZSgwLDEpO2Zvcih2YXIgT2k9IiIsU3I9MDtTcjxVbi5sZW5ndGg7KytTcil7dmFyIFBpPVVuW1NyXS52YWx1ZTtzd2l0Y2goVW5bU3JdLnR5cGUpe2Nhc2UieWVhciI6T2krPTI9PVBpLmxlbmd0aD8ieXkiOiJ5eXl5IjticmVh'@;
put 'aztjYXNlIm1vbnRoIjpPaSs9IjEiPT1QaT8ibSI6IjAxIj09UGk/Im1tIjpQaT09RXRbMF1bMV0/Im1tbSI6UGk9PUV0WzBdWzJdPyJtbW1tIjpQaT09RXRbMF1bMF0/Im1tbW1tIjoibW0iO2JyZWFrO2Nhc2UiZGF5IjpPaSs9IjUiPT1QaT8iZCI6IjA1Ij09UGk/ImRkIjpQaT09Y3RbMF1b'@;
put 'MF0/ImRkZCI6UGk9PWN0WzBdWzFdPyJkZGRkIjoiZGQiO2JyZWFrO2Nhc2UibGl0ZXJhbCI6T2krPVBpLnJlcGxhY2UoLy4vZywiXFwkJiIpLDE9PVBpLmxlbmd0aCYmKFZuPVBpKX19KGxuLm1hdGNoKC9lbi9pKSYmbG4ubWF0Y2goL3VzL2kpfHwhbG4pJiYoT2k9Im0vZC95eSIpLGJ0WzE0'@;
put 'XT1PaX1lbHNlImphLWpwIj09bG4udG9Mb3dlckNhc2UoKSYmKGJ0WzE0XT0ieXl5eVxcL21cXC9kIik7dmFyIFphPUludGwuTnVtYmVyRm9ybWF0KGxuLHt9KS5mb3JtYXQoMTIzNDU2Ny44OSk7WmEmJihMaT0oWmEubWF0Y2goLzEoLiopMi8pfHxbXSlbMV0sa3I9KFphLm1hdGNoKC83KC4q'@;
put 'KTgvKXx8W10pWzFdKX1mcltsbi50b0xvd2VyQ2FzZSgpXXx8KGZyW2xuLnRvTG93ZXJDYXNlKCldPXsiLiI6a3IsIiwiOkxpfSksZXI9ZXQoYnI9ZnJbbG4udG9Mb3dlckNhc2UoKV18fGZyWyJlbi11cyJdKX0sUi5ub3JtYWxpemU9ZnVuY3Rpb24gV28obG4pe2Zvcih2YXIgRW49MCxVbj0w'@;
put 'LHhpPSIiLG9yPSIiLE9pPSIiLFNyPWJyLnl8fCJ5IixQaT1Tci50b1VwcGVyQ2FzZSgpLFphPWJyLmR8fCJkIixIaT1aYS50b1VwcGVyQ2FzZSgpLG1hPWJyWyIuIl0sRGk9YnJbIiwiXSxjcz0iMCM/RSstJSIrYnJbIiwiXSttYTtFbjxsbi5sZW5ndGg7KXN3aXRjaCh4aT1sbi5jaGFyQXQo'@;
put 'RW4pKXtjYXNlIkciOkVuKyssT2krPXhpO2JyZWFrO2Nhc2UnIic6Zm9yKE9pKz14aTszNCE9PShVbj1sbi5jaGFyQ29kZUF0KCsrRW4pKSYmRW48bG4ubGVuZ3RoOylPaSs9U3RyaW5nLmZyb21DaGFyQ29kZShVbik7T2krPSciJywrK0VuO2JyZWFrO2Nhc2UiXFwiOmNhc2UiXyI6T2krPWxu'@;
put 'LnNsaWNlKEVuLEVuKzIpLEVuKz0yO2JyZWFrO2Nhc2UiQCI6T2krPXhpLCsrRW47YnJlYWs7Y2FzZSJCIjpjYXNlImIiOisrRW4sT2krPXhpO2JyZWFrO2Nhc2UgU3I6Y2FzZSBQaTpjYXNlIFphOmNhc2UgSGk6T2krPWVyW3hpLnRvTG93ZXJDYXNlKCldLCsrRW47YnJlYWs7Y2FzZSJNIjpj'@;
put 'YXNlIkgiOmNhc2UiUyI6Y2FzZSJFIjpjYXNlIm0iOmNhc2UiaCI6Y2FzZSJzIjpjYXNlImUiOmNhc2UiZyI6Y2FzZSJBIjpjYXNlImEiOk9pKz14aSwrK0VuO2JyZWFrO2Nhc2UiWyI6Zm9yKG9yPXhpOyJdIiE9PWxuLmNoYXJBdChFbisrKSYmRW48bG4ubGVuZ3RoOylvcis9bG4uY2hhckF0'@;
put 'KEVuKTtPaSs9b3I7YnJlYWs7Y2FzZSBEaTpPaSs9JyInK3hpKyciJywrK0VuO2JyZWFrO2Nhc2UgbWE6aWYoIShFbjxsbi5sZW5ndGgmJihjcy5pbmRleE9mKHhpPWxuLmNoYXJBdCgrK0VuKSk+LTF8fCJcXCI9PXhpJiYiLSI9PWxuLmNoYXJBdChFbisxKSYmIjAjIi5pbmRleE9mKGxuLmNo'@;
put 'YXJBdChFbisyKSk+LTEpKSl7T2krPSciJyttYSsnIic7YnJlYWt9eGk9bWEsLS1FbjtjYXNlIjAiOmNhc2UiIyI6Zm9yKE9pKz1lclt4aS50b0xvd2VyQ2FzZSgpXXx8eGk7RW48bG4ubGVuZ3RoJiYoY3MuaW5kZXhPZih4aT1sbi5jaGFyQXQoKytFbikpPi0xfHwiXFwiPT14aSYmIi0iPT1s'@;
put 'bi5jaGFyQXQoRW4rMSkmJiIwIyIuaW5kZXhPZihsbi5jaGFyQXQoRW4rMikpPi0xKTspT2krPWVyW3hpLnRvTG93ZXJDYXNlKCldfHx4aTticmVhaztjYXNlIj8iOmZvcihPaSs9eGk7bG4uY2hhckF0KCsrRW4pPT09eGk7KU9pKz14aTticmVhaztjYXNlIioiOk9pKz14aSwrK0VuLCgiICI9'@;
put 'PWxuLmNoYXJBdChFbil8fCIqIj09bG4uY2hhckF0KEVuKSkmJihPaSs9bG4uY2hhckF0KEVuKSwrK0VuKTticmVhaztjYXNlIigiOmNhc2UiKSI6T2krPXhpLCsrRW47YnJlYWs7Y2FzZSIxIjpjYXNlIjIiOmNhc2UiMyI6Y2FzZSI0IjpjYXNlIjUiOmNhc2UiNiI6Y2FzZSI3IjpjYXNlIjgi'@;
put 'OmNhc2UiOSI6Zm9yKE9pKz14aTtFbjxsbi5sZW5ndGgmJiIwMTIzNDU2Nzg5Ii5pbmRleE9mKGxuLmNoYXJBdCgrK0VuKSk+LTE7KU9pKz1sbi5jaGFyQXQoRW4pO2JyZWFrO2RlZmF1bHQ6T2krPXhpLCsrRW59cmV0dXJuIE9pfSxSLmdldGN1cnJlbmN5PWZ1bmN0aW9uIG5hKCl7cmV0dXJu'@;
put 'IEZpfHwiVVNEIn0sUi5zZXRjdXJyZW5jeT1mdW5jdGlvbiBjYShsbil7Rmk9bG4sTWk9dHlwZW9mIEludGw8InUiP0ludGwuTnVtYmVyRm9ybWF0KEJuLHtzdHlsZToiY3VycmVuY3kiLGN1cnJlbmN5RGlzcGxheToic3ltYm9sIixjdXJyZW5jeTpsbn0pLmZvcm1hdCgwKS5yZXBsYWNlKC9b'@;
put 'MFwuXCxcc10vZywiIik6IiQifX07YWUoQSk7dmFyIHhlLHRlPXsiR2VuZXJhbCBOdW1iZXIiOiJHZW5lcmFsIiwiR2VuZXJhbCBEYXRlIjpBLl90YWJsZVsyMl0sIkxvbmcgRGF0ZSI6ImRkZGQsIG1tbW0gZGQsIHl5eXkiLCJNZWRpdW0gRGF0ZSI6QS5fdGFibGVbMTVdLCJTaG9ydCBEYXRl'@;
put 'IjpBLl90YWJsZVsxNF0sIkxvbmcgVGltZSI6QS5fdGFibGVbMTldLCJNZWRpdW0gVGltZSI6QS5fdGFibGVbMThdLCJTaG9ydCBUaW1lIjpBLl90YWJsZVsyMF0sQ3VycmVuY3k6JyIkIiMsIyMwLjAwXyk7W1JlZF1cXCgiJCIjLCMjMC4wMFxcKScsRml4ZWQ6QS5fdGFibGVbMl0sU3RhbmRh'@;
put 'cmQ6QS5fdGFibGVbNF0sUGVyY2VudDpBLl90YWJsZVsxMF0sU2NpZW50aWZpYzpBLl90YWJsZVsxMV0sIlllcy9ObyI6JyJZZXMiOyJZZXMiOyJObyI7QCcsIlRydWUvRmFsc2UiOiciVHJ1ZSI7IlRydWUiOyJGYWxzZSI7QCcsIk9uL09mZiI6JyJZZXMiOyJZZXMiOyJObyI7QCd9LHNlPXs1'@;
put 'OiciJCIjLCMjMF8pO1xcKCIkIiMsIyMwXFwpJyw2OiciJCIjLCMjMF8pO1tSZWRdXFwoIiQiIywjIzBcXCknLDc6JyIkIiMsIyMwLjAwXyk7XFwoIiQiIywjIzAuMDBcXCknLDg6JyIkIiMsIyMwLjAwXyk7W1JlZF1cXCgiJCIjLCMjMC4wMFxcKScsMjM6IkdlbmVyYWwiLDI0OiJHZW5lcmFs'@;
put 'IiwyNToiR2VuZXJhbCIsMjY6IkdlbmVyYWwiLDI3OiJtL2QveXkiLDI4OiJtL2QveXkiLDI5OiJtL2QveXkiLDMwOiJtL2QveXkiLDMxOiJtL2QveXkiLDMyOiJoOm1tOnNzIiwzMzoiaDptbTpzcyIsMzQ6Img6bW06c3MiLDM1OiJoOm1tOnNzIiwzNjoibS9kL3l5Iiw0MTonXygqICMsIyMw'@;
put 'Xyk7XygqICgjLCMjMCk7XygqICItIl8pO18oQF8pJyw0MjonXygiJCIqICMsIyMwXyk7XygiJCIqICgjLCMjMCk7XygiJCIqICItIl8pO18oQF8pJyw0MzonXygqICMsIyMwLjAwXyk7XygqICgjLCMjMC4wMCk7XygqICItIj8/Xyk7XyhAXyknLDQ0OidfKCIkIiogIywjIzAuMDBfKTtfKCIk'@;
put 'IiogKCMsIyMwLjAwKTtfKCIkIiogIi0iPz9fKTtfKEBfKScsNTA6Im0vZC95eSIsNTE6Im0vZC95eSIsNTI6Im0vZC95eSIsNTM6Im0vZC95eSIsNTQ6Im0vZC95eSIsNTU6Im0vZC95eSIsNTY6Im0vZC95eSIsNTc6Im0vZC95eSIsNTg6Im0vZC95eSIsNTk6IjAiLDYwOiIwLjAwIiw2MToi'@;
put 'IywjIzAiLDYyOiIjLCMjMC4wMCIsNjM6JyIkIiMsIyMwXyk7XFwoIiQiIywjIzBcXCknLDY0OiciJCIjLCMjMF8pO1tSZWRdXFwoIiQiIywjIzBcXCknLDY1OiciJCIjLCMjMC4wMF8pO1xcKCIkIiMsIyMwLjAwXFwpJyw2NjonIiQiIywjIzAuMDBfKTtbUmVkXVxcKCIkIiMsIyMwLjAwXFwp'@;
put 'Jyw2NzoiMCUiLDY4OiIwLjAwJSIsNjk6IiMgPy8/Iiw3MDoiIyA/Py8/PyIsNzE6Im0vZC95eSIsNzI6Im0vZC95eSIsNzM6ImQtbW1tLXl5Iiw3NDoiZC1tbW0iLDc1OiJtbW0teXkiLDc2OiJoOm1tIiw3NzoiaDptbTpzcyIsNzg6Im0vZC95eSBoOm1tIiw3OToibW06c3MiLDgwOiJbaF06'@;
put 'bW06c3MiLDgxOiJtbXNzLjAifSx3ZT0vW2REXSt8W21NXSt8W3lZZUVdK3xbSGhdK3xbU3NdKy9nOyFmdW5jdGlvbihTKXtTLnZlcnNpb249IjEuMi4wIjt2YXIgaz1mdW5jdGlvbiBSKCl7Zm9yKHZhciBwZT0wLHllPW5ldyBBcnJheSgyNTYpLFBlPTA7MjU2IT1QZTsrK1BlKXllW1BlXT1w'@;
put 'ZT0xJihwZT0xJihwZT0xJihwZT0xJihwZT0xJihwZT0xJihwZT0xJihwZT0xJihwZT1QZSk/LTMwNjY3NDkxMl5wZT4+PjE6cGU+Pj4xKT8tMzA2Njc0OTEyXnBlPj4+MTpwZT4+PjEpPy0zMDY2NzQ5MTJecGU+Pj4xOnBlPj4+MSk/LTMwNjY3NDkxMl5wZT4+PjE6cGU+Pj4xKT8tMzA2Njc0'@;
put 'OTEyXnBlPj4+MTpwZT4+PjEpPy0zMDY2NzQ5MTJecGU+Pj4xOnBlPj4+MSk/LTMwNjY3NDkxMl5wZT4+PjE6cGU+Pj4xKT8tMzA2Njc0OTEyXnBlPj4+MTpwZT4+PjE7cmV0dXJuIHR5cGVvZiBJbnQzMkFycmF5PCJ1Ij9uZXcgSW50MzJBcnJheSh5ZSk6eWV9KCk7Uy50YWJsZT1rLFMuYnN0'@;
put 'cj1mdW5jdGlvbiBHKHBlLHllKXtmb3IodmFyIFBlPX55ZSxOZT1wZS5sZW5ndGgtMSxZZT0wO1llPE5lOylQZT0oUGU9UGU+Pj44XmtbMjU1JihQZV5wZS5jaGFyQ29kZUF0KFllKyspKV0pPj4+OF5rWzI1NSYoUGVecGUuY2hhckNvZGVBdChZZSsrKSldO3JldHVybiBZZT09PU5lJiYoUGU9'@;
put 'UGU+Pj44XmtbMjU1JihQZV5wZS5jaGFyQ29kZUF0KFllKSldKSx+UGV9LFMuYnVmPWZ1bmN0aW9uIFEocGUseWUpe2lmKHBlLmxlbmd0aD4xZTQpcmV0dXJuIGZ1bmN0aW9uIG9lKHBlLHllKXtmb3IodmFyIFBlPX55ZSxOZT1wZS5sZW5ndGgtNyxZZT0wO1llPE5lOylQZT0oUGU9KFBlPShQ'@;
put 'ZT0oUGU9KFBlPShQZT0oUGU9UGU+Pj44XmtbMjU1JihQZV5wZVtZZSsrXSldKT4+Pjhea1syNTUmKFBlXnBlW1llKytdKV0pPj4+OF5rWzI1NSYoUGVecGVbWWUrK10pXSk+Pj44XmtbMjU1JihQZV5wZVtZZSsrXSldKT4+Pjhea1syNTUmKFBlXnBlW1llKytdKV0pPj4+OF5rWzI1NSYoUGVe'@;
put 'cGVbWWUrK10pXSk+Pj44XmtbMjU1JihQZV5wZVtZZSsrXSldKT4+Pjhea1syNTUmKFBlXnBlW1llKytdKV07Zm9yKDtZZTxOZSs3OylQZT1QZT4+Pjhea1syNTUmKFBlXnBlW1llKytdKV07cmV0dXJuflBlfShwZSx5ZSk7Zm9yKHZhciBQZT1+eWUsTmU9cGUubGVuZ3RoLTMsWWU9MDtZZTxO'@;
put 'ZTspUGU9KFBlPShQZT0oUGU9UGU+Pj44XmtbMjU1JihQZV5wZVtZZSsrXSldKT4+Pjhea1syNTUmKFBlXnBlW1llKytdKV0pPj4+OF5rWzI1NSYoUGVecGVbWWUrK10pXSk+Pj44XmtbMjU1JihQZV5wZVtZZSsrXSldO2Zvcig7WWU8TmUrMzspUGU9UGU+Pj44XmtbMjU1JihQZV5wZVtZZSsr'@;
put 'XSldO3JldHVybn5QZX0sUy5zdHI9ZnVuY3Rpb24gZ2UocGUseWUpe2Zvcih2YXIgZXQsY3QsUGU9fnllLE5lPTAsWWU9cGUubGVuZ3RoO05lPFllOykoZXQ9cGUuY2hhckNvZGVBdChOZSsrKSk8MTI4P1BlPVBlPj4+OF5rWzI1NSYoUGVeZXQpXTpldDwyMDQ4P1BlPShQZT1QZT4+Pjhea1sy'@;
put 'NTUmKFBlXigxOTJ8ZXQ+PjYmMzEpKV0pPj4+OF5rWzI1NSYoUGVeKDEyOHw2MyZldCkpXTpldD49NTUyOTYmJmV0PDU3MzQ0PyhldD02NCsoMTAyMyZldCksY3Q9MTAyMyZwZS5jaGFyQ29kZUF0KE5lKyspLFBlPShQZT0oUGU9KFBlPVBlPj4+OF5rWzI1NSYoUGVeKDI0MHxldD4+OCY3KSld'@;
put 'KT4+Pjhea1syNTUmKFBlXigxMjh8ZXQ+PjImNjMpKV0pPj4+OF5rWzI1NSYoUGVeKDEyOHxjdD4+NiYxNXwoMyZldCk8PDQpKV0pPj4+OF5rWzI1NSYoUGVeKDEyOHw2MyZjdCkpXSk6UGU9KFBlPShQZT1QZT4+Pjhea1syNTUmKFBlXigyMjR8ZXQ+PjEyJjE1KSldKT4+Pjhea1syNTUmKFBl'@;
put 'XigxMjh8ZXQ+PjYmNjMpKV0pPj4+OF5rWzI1NSYoUGVeKDEyOHw2MyZldCkpXTtyZXR1cm5+UGV9fSh4ZT17fSk7dmFyIFhlLHZlPWZ1bmN0aW9uKCl7dmFyIHllLFI9e307ZnVuY3Rpb24gRyhnbil7aWYoIi8iPT1nbi5jaGFyQXQoZ24ubGVuZ3RoLTEpKXJldHVybi0xPT09Z24uc2xpY2Uo'@;
put 'MCwtMSkuaW5kZXhPZigiLyIpP2duOkcoZ24uc2xpY2UoMCwtMSkpO3ZhciBrbj1nbi5sYXN0SW5kZXhPZigiLyIpO3JldHVybi0xPT09a24/Z246Z24uc2xpY2UoMCxrbisxKX1mdW5jdGlvbiBRKGduKXtpZigiLyI9PWduLmNoYXJBdChnbi5sZW5ndGgtMSkpcmV0dXJuIFEoZ24uc2xpY2Uo'@;
put 'MCwtMSkpO3ZhciBrbj1nbi5sYXN0SW5kZXhPZigiLyIpO3JldHVybi0xPT09a24/Z246Z24uc2xpY2Uoa24rMSl9ZnVuY3Rpb24gb2UoZ24sa24peyJzdHJpbmciPT10eXBlb2Yga24mJihrbj1uZXcgRGF0ZShrbikpO3ZhciB3bj1rbi5nZXRIb3VycygpO3duPSh3bj13bjw8Nnxrbi5nZXRN'@;
put 'aW51dGVzKCkpPDw1fGtuLmdldFNlY29uZHMoKT4+PjEsZ24ud3JpdGVfc2hpZnQoMix3bik7dmFyIFp0PWtuLmdldEZ1bGxZZWFyKCktMTk4MDtadD0oWnQ9WnQ8PDR8a24uZ2V0TW9udGgoKSsxKTw8NXxrbi5nZXREYXRlKCksZ24ud3JpdGVfc2hpZnQoMixadCl9ZnVuY3Rpb24gcGUoZ24p'@;
put 'e21uKGduLDApO2Zvcih2YXIga249e30sd249MDtnbi5sPD1nbi5sZW5ndGgtNDspe3ZhciBadD1nbi5yZWFkX3NoaWZ0KDIpLG5uPWduLnJlYWRfc2hpZnQoMikseG49Z24ubCtubix6bj17fTsyMTU4OT09PVp0JiYoMSYod249Z24ucmVhZF9zaGlmdCgxKSkmJih6bi5tdGltZT1nbi5yZWFk'@;
put 'X3NoaWZ0KDQpKSxubj41JiYoMiZ3biYmKHpuLmF0aW1lPWduLnJlYWRfc2hpZnQoNCkpLDQmd24mJih6bi5jdGltZT1nbi5yZWFkX3NoaWZ0KDQpKSksem4ubXRpbWUmJih6bi5tdD1uZXcgRGF0ZSgxZTMqem4ubXRpbWUpKSksZ24ubD14bixrbltadF09em59cmV0dXJuIGtufWZ1bmN0aW9u'@;
put 'IFBlKCl7cmV0dXJuIHllfHwoeWU9eSg4MzMzNykpfWZ1bmN0aW9uIE5lKGduLGtuKXtpZig4MD09Z25bMF0mJjc1PT1nblsxXSlyZXR1cm4gRGkoZ24sa24pO2lmKGduLmxlbmd0aDw1MTIpdGhyb3cgbmV3IEVycm9yKCJDRkIgZmlsZSBzaXplICIrZ24ubGVuZ3RoKyIgPCA1MTIiKTt2YXIg'@;
put 'd24sbm4seG4sem4seXIsV3IsWnQ9NTEyLG9pPVtdLG5pPWduLnNsaWNlKDAsNTEyKTttbihuaSwwKTt2YXIgWGk9ZnVuY3Rpb24gWWUoZ24pe2lmKDgwPT1nbltnbi5sXSYmNzU9PWduW2duLmwrMV0pcmV0dXJuWzAsMF07Z24uY2hrKE1pLCJIZWFkZXIgU2lnbmF0dXJlOiAiKSxnbi5sKz0x'@;
put 'Njt2YXIga249Z24ucmVhZF9zaGlmdCgyLCJ1Iik7cmV0dXJuW2duLnJlYWRfc2hpZnQoMiwidSIpLGtuXX0obmkpO3N3aXRjaCh3bj1YaVswXSl7Y2FzZSAzOlp0PTUxMjticmVhaztjYXNlIDQ6WnQ9NDA5NjticmVhaztjYXNlIDA6aWYoMD09WGlbMV0pcmV0dXJuIERpKGduLGtuKTtkZWZh'@;
put 'dWx0OnRocm93IG5ldyBFcnJvcigiTWFqb3IgVmVyc2lvbjogRXhwZWN0ZWQgMyBvciA0IHNhdyAiK3duKX01MTIhPT1adCYmbW4obmk9Z24uc2xpY2UoMCxadCksMjgpO3ZhciBVaT1nbi5zbGljZSgwLFp0KTshZnVuY3Rpb24gZXQoZ24sa24pe3ZhciB3bjtzd2l0Y2goZ24ubCs9Mix3bj1n'@;
put 'bi5yZWFkX3NoaWZ0KDIpKXtjYXNlIDk6aWYoMyE9a24pdGhyb3cgbmV3IEVycm9yKCJTZWN0b3IgU2hpZnQ6IEV4cGVjdGVkIDkgc2F3ICIrd24pO2JyZWFrO2Nhc2UgMTI6aWYoNCE9a24pdGhyb3cgbmV3IEVycm9yKCJTZWN0b3IgU2hpZnQ6IEV4cGVjdGVkIDEyIHNhdyAiK3duKTticmVh'@;
put 'aztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiU2VjdG9yIFNoaWZ0OiBFeHBlY3RlZCA5IG9yIDEyIHNhdyAiK3duKX1nbi5jaGsoIjA2MDAiLCJNaW5pIFNlY3RvciBTaGlmdDogIiksZ24uY2hrKCIwMDAwMDAwMDAwMDAiLCJSZXNlcnZlZDogIil9KG5pLHduKTt2YXIgbm89bmkucmVhZF9z'@;
put 'aGlmdCg0LCJpIik7aWYoMz09PXduJiYwIT09bm8pdGhyb3cgbmV3IEVycm9yKCIjIERpcmVjdG9yeSBTZWN0b3JzOiBFeHBlY3RlZCAwIHNhdyAiK25vKTtuaS5sKz00LHpuPW5pLnJlYWRfc2hpZnQoNCwiaSIpLG5pLmwrPTQsbmkuY2hrKCIwMDEwMDAwMCIsIk1pbmkgU3RyZWFtIEN1dG9m'@;
put 'ZiBTaXplOiAiKSx5cj1uaS5yZWFkX3NoaWZ0KDQsImkiKSxubj1uaS5yZWFkX3NoaWZ0KDQsImkiKSxXcj1uaS5yZWFkX3NoaWZ0KDQsImkiKSx4bj1uaS5yZWFkX3NoaWZ0KDQsImkiKTtmb3IodmFyIGphPS0xLHZhPTA7dmE8MTA5JiYhKChqYT1uaS5yZWFkX3NoaWZ0KDQsImkiKSk8MCk7'@;
put 'Kyt2YSlvaVt2YV09amE7dmFyIFRvPWZ1bmN0aW9uIGN0KGduLGtuKXtmb3IodmFyIHduPU1hdGguY2VpbChnbi5sZW5ndGgva24pLTEsWnQ9W10sbm49MTtubjx3bjsrK25uKVp0W25uLTFdPWduLnNsaWNlKG5uKmtuLChubisxKSprbik7cmV0dXJuIFp0W3duLTFdPWduLnNsaWNlKHduKmtu'@;
put 'KSxadH0oZ24sWnQpO2J0KFdyLHhuLFRvLFp0LG9pKTt2YXIgeHM9ZnVuY3Rpb24ga3QoZ24sa24sd24sWnQpe3ZhciBubj1nbi5sZW5ndGgseG49W10sem49W10seXI9W10sV3I9W10sb2k9WnQtMSxuaT0wLFhpPTAsVWk9MCxubz0wO2ZvcihuaT0wO25pPG5uOysrbmkpaWYoeXI9W10sKFVp'@;
put 'PW5pK2tuKT49bm4mJihVaS09bm4pLCF6bltVaV0pe1dyPVtdO3ZhciBqYT1bXTtmb3IoWGk9VWk7WGk+PTA7KXtqYVtYaV09ITAsem5bWGldPSEwLHlyW3lyLmxlbmd0aF09WGksV3IucHVzaChnbltYaV0pO3ZhciB2YT13bltNYXRoLmZsb29yKDQqWGkvWnQpXTtpZihadDw0Kyhubz00Klhp'@;
put 'Jm9pKSl0aHJvdyBuZXcgRXJyb3IoIkZBVCBib3VuZGFyeSBjcm9zc2VkOiAiK1hpKyIgNCAiK1p0KTtpZighZ25bdmFdfHxqYVtYaT1Wcyhnblt2YV0sbm8pXSlicmVha314bltVaV09e25vZGVzOnlyLGRhdGE6eTAoW1dyXSl9fXJldHVybiB4bn0oVG8sem4sb2ksWnQpO3hzW3puXS5uYW1l'@;
put 'PSIhRGlyZWN0b3J5Iixubj4wJiZ5ciE9PWVyJiYoeHNbeXJdLm5hbWU9IiFNaW5pRkFUIikseHNbb2lbMF1dLm5hbWU9IiFGQVQiLHhzLmZhdF9hZGRycz1vaSx4cy5zc3o9WnQ7dmFyIGMwPVtdLGExPVtdLEI4PVtdOyhmdW5jdGlvbiBPdChnbixrbix3bixadCxubix4bix6bix5cil7Zm9y'@;
put 'KHZhciBubyxXcj0wLG9pPVp0Lmxlbmd0aD8yOjAsbmk9a25bZ25dLmRhdGEsWGk9MCxVaT0wO1hpPG5pLmxlbmd0aDtYaSs9MTI4KXt2YXIgamE9bmkuc2xpY2UoWGksWGkrMTI4KTttbihqYSw2NCksVWk9amEucmVhZF9zaGlmdCgyKSxubz1PbChqYSwwLFVpLW9pKSxadC5wdXNoKG5vKTt2'@;
put 'YXIgdmE9e25hbWU6bm8sdHlwZTpqYS5yZWFkX3NoaWZ0KDEpLGNvbG9yOmphLnJlYWRfc2hpZnQoMSksTDpqYS5yZWFkX3NoaWZ0KDQsImkiKSxSOmphLnJlYWRfc2hpZnQoNCwiaSIpLEM6amEucmVhZF9zaGlmdCg0LCJpIiksY2xzaWQ6amEucmVhZF9zaGlmdCgxNiksc3RhdGU6amEucmVh'@;
put 'ZF9zaGlmdCg0LCJpIiksc3RhcnQ6MCxzaXplOjB9OzAhPT1qYS5yZWFkX3NoaWZ0KDIpK2phLnJlYWRfc2hpZnQoMikramEucmVhZF9zaGlmdCgyKStqYS5yZWFkX3NoaWZ0KDIpJiYodmEuY3Q9S3QoamEsamEubC04KSksMCE9PWphLnJlYWRfc2hpZnQoMikramEucmVhZF9zaGlmdCgyKStq'@;
put 'YS5yZWFkX3NoaWZ0KDIpK2phLnJlYWRfc2hpZnQoMikmJih2YS5tdD1LdChqYSxqYS5sLTgpKSx2YS5zdGFydD1qYS5yZWFkX3NoaWZ0KDQsImkiKSx2YS5zaXplPWphLnJlYWRfc2hpZnQoNCwiaSIpLHZhLnNpemU8MCYmdmEuc3RhcnQ8MCYmKHZhLnNpemU9dmEudHlwZT0wLHZhLnN0YXJ0'@;
put 'PWVyLHZhLm5hbWU9IiIpLDU9PT12YS50eXBlPyhXcj12YS5zdGFydCxubj4wJiZXciE9PWVyJiYoa25bV3JdLm5hbWU9IiFTdHJlYW1EYXRhIikpOnZhLnNpemU+PTQwOTY/KHZhLnN0b3JhZ2U9ImZhdCIsdm9pZCAwPT09a25bdmEuc3RhcnRdJiYoa25bdmEuc3RhcnRdPWp0KHduLHZhLnN0'@;
put 'YXJ0LGtuLmZhdF9hZGRycyxrbi5zc3opKSxrblt2YS5zdGFydF0ubmFtZT12YS5uYW1lLHZhLmNvbnRlbnQ9a25bdmEuc3RhcnRdLmRhdGEuc2xpY2UoMCx2YS5zaXplKSk6KHZhLnN0b3JhZ2U9Im1pbmlmYXQiLHZhLnNpemU8MD92YS5zaXplPTA6V3IhPT1lciYmdmEuc3RhcnQhPT1lciYm'@;
put 'a25bV3JdJiYodmEuY29udGVudD1hdCh2YSxrbltXcl0uZGF0YSwoa25beXJdfHx7fSkuZGF0YSkpKSx2YS5jb250ZW50JiZtbih2YS5jb250ZW50LDApLHhuW25vXT12YSx6bi5wdXNoKHZhKX19KSh6bix4cyxUbyxjMCxubix7fSxhMSx5ciksZnVuY3Rpb24gRXQoZ24sa24sd24pe2Zvcih2'@;
put 'YXIgWnQ9MCxubj0wLHhuPTAsem49MCx5cj0wLFdyPXduLmxlbmd0aCxvaT1bXSxuaT1bXTtadDxXcjsrK1p0KW9pW1p0XT1uaVtadF09WnQsa25bWnRdPXduW1p0XTtmb3IoO3lyPG5pLmxlbmd0aDsrK3lyKW5uPWduW1p0PW5pW3lyXV0uTCx4bj1nbltadF0uUix6bj1nbltadF0uQyxvaVta'@;
put 'dF09PT1adCYmKC0xIT09bm4mJm9pW25uXSE9PW5uJiYob2lbWnRdPW9pW25uXSksLTEhPT14biYmb2lbeG5dIT09eG4mJihvaVtadF09b2lbeG5dKSksLTEhPT16biYmKG9pW3puXT1adCksLTEhPT1ubiYmWnQhPW9pW1p0XSYmKG9pW25uXT1vaVtadF0sbmkubGFzdEluZGV4T2Yobm4pPHly'@;
put 'JiZuaS5wdXNoKG5uKSksLTEhPT14biYmWnQhPW9pW1p0XSYmKG9pW3huXT1vaVtadF0sbmkubGFzdEluZGV4T2YoeG4pPHlyJiZuaS5wdXNoKHhuKSk7Zm9yKFp0PTE7WnQ8V3I7KytadClvaVtadF09PT1adCYmKC0xIT09eG4mJm9pW3huXSE9PXhuP29pW1p0XT1vaVt4bl06LTEhPT1ubiYm'@;
put 'b2lbbm5dIT09bm4mJihvaVtadF09b2lbbm5dKSk7Zm9yKFp0PTE7WnQ8V3I7KytadClpZigwIT09Z25bWnRdLnR5cGUpe2lmKCh5cj1adCkhPW9pW3lyXSlkb3trbltadF09a25beXI9b2lbeXJdXSsiLyIra25bWnRdfXdoaWxlKDAhPT15ciYmLTEhPT1vaVt5cl0mJnlyIT1vaVt5cl0pO29p'@;
put 'W1p0XT0tMX1mb3Ioa25bMF0rPSIvIixadD0xO1p0PFdyOysrWnQpMiE9PWduW1p0XS50eXBlJiYoa25bWnRdKz0iLyIpfShhMSxCOCxjMCksYzAuc2hpZnQoKTt2YXIgWDU9e0ZpbGVJbmRleDphMSxGdWxsUGF0aHM6Qjh9O3JldHVybiBrbiYma24ucmF3JiYoWDUucmF3PXtoZWFkZXI6VWks'@;
put 'c2VjdG9yczpUb30pLFg1fWZ1bmN0aW9uIGF0KGduLGtuLHduKXtmb3IodmFyIG5uPWduLnNpemUseG49W10sem49Z24uc3RhcnQ7d24mJm5uPjAmJnpuPj0wOyl4bi5wdXNoKGtuLnNsaWNlKHpuKmJyLHpuKmJyK2JyKSksbm4tPWJyLHpuPVZzKHduLDQqem4pO3JldHVybiAwPT09eG4ubGVu'@;
put 'Z3RoP2JuKDApOmooeG4pLnNsaWNlKDAsZ24uc2l6ZSl9ZnVuY3Rpb24gYnQoZ24sa24sd24sWnQsbm4pe3ZhciB4bj1lcjtpZihnbj09PWVyKXtpZigwIT09a24pdGhyb3cgbmV3IEVycm9yKCJESUZBVCBjaGFpbiBzaG9ydGVyIHRoYW4gZXhwZWN0ZWQiKX1lbHNlIGlmKC0xIT09Z24pe3Zh'@;
put 'ciB6bj13bltnbl0seXI9KFp0Pj4+MiktMTtpZighem4pcmV0dXJuO2Zvcih2YXIgV3I9MDtXcjx5ciYmKHhuPVZzKHpuLDQqV3IpKSE9PWVyOysrV3Ipbm4ucHVzaCh4bik7YnQoVnMoem4sWnQtNCksa24tMSx3bixadCxubil9fWZ1bmN0aW9uIGp0KGduLGtuLHduLFp0LG5uKXt2YXIgeG49'@;
put 'W10sem49W107bm58fChubj1bXSk7dmFyIHlyPVp0LTEsV3I9MCxvaT0wO2ZvcihXcj1rbjtXcj49MDspe25uW1dyXT0hMCx4blt4bi5sZW5ndGhdPVdyLHpuLnB1c2goZ25bV3JdKTt2YXIgbmk9d25bTWF0aC5mbG9vcig0KldyL1p0KV07aWYoWnQ8NCsob2k9NCpXciZ5cikpdGhyb3cgbmV3'@;
put 'IEVycm9yKCJGQVQgYm91bmRhcnkgY3Jvc3NlZDogIitXcisiIDQgIitadCk7aWYoIWduW25pXSlicmVhaztXcj1WcyhnbltuaV0sb2kpfXJldHVybntub2Rlczp4bixkYXRhOnkwKFt6bl0pfX1mdW5jdGlvbiBLdChnbixrbil7cmV0dXJuIG5ldyBEYXRlKDFlMyooem8oZ24sa24rNCkvMWU3'@;
put 'Kk1hdGgucG93KDIsMzIpK3pvKGduLGtuKS8xZTctMTE2NDQ0NzM2MDApKX1mdW5jdGlvbiBTbihnbixrbil7dmFyIHduPWtufHx7fSxadD13bi5yb290fHwiUm9vdCBFbnRyeSI7aWYoZ24uRnVsbFBhdGhzfHwoZ24uRnVsbFBhdGhzPVtdKSxnbi5GaWxlSW5kZXh8fChnbi5GaWxlSW5kZXg9'@;
put 'W10pLGduLkZ1bGxQYXRocy5sZW5ndGghPT1nbi5GaWxlSW5kZXgubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiaW5jb25zaXN0ZW50IENGQiBzdHJ1Y3R1cmUiKTswPT09Z24uRnVsbFBhdGhzLmxlbmd0aCYmKGduLkZ1bGxQYXRoc1swXT1adCsiLyIsZ24uRmlsZUluZGV4WzBdPXtuYW1lOlp0'@;
put 'LHR5cGU6NX0pLHduLkNMU0lEJiYoZ24uRmlsZUluZGV4WzBdLmNsc2lkPXduLkNMU0lEKSxmdW5jdGlvbiBscihnbil7dmFyIGtuPSJceDAxU2gzM3RKNSI7aWYoIXZlLmZpbmQoZ24sIi8iK2tuKSl7dmFyIHduPWJuKDQpO3duWzBdPTU1LHduWzFdPXduWzNdPTUwLHduWzJdPTU0LGduLkZp'@;
put 'bGVJbmRleC5wdXNoKHtuYW1lOmtuLHR5cGU6Mixjb250ZW50OnduLHNpemU6NCxMOjY5LFI6NjksQzo2OX0pLGduLkZ1bGxQYXRocy5wdXNoKGduLkZ1bGxQYXRoc1swXStrbiksWG4oZ24pfX0oZ24pfWZ1bmN0aW9uIFhuKGduLGtuKXtTbihnbik7Zm9yKHZhciB3bj0hMSxadD0hMSxubj1n'@;
put 'bi5GdWxsUGF0aHMubGVuZ3RoLTE7bm4+PTA7LS1ubil7dmFyIHhuPWduLkZpbGVJbmRleFtubl07c3dpdGNoKHhuLnR5cGUpe2Nhc2UgMDpadD93bj0hMDooZ24uRmlsZUluZGV4LnBvcCgpLGduLkZ1bGxQYXRocy5wb3AoKSk7YnJlYWs7Y2FzZSAxOmNhc2UgMjpjYXNlIDU6WnQ9ITAsaXNO'@;
put 'YU4oeG4uUip4bi5MKnhuLkMpJiYod249ITApLHhuLlI+LTEmJnhuLkw+LTEmJnhuLlI9PXhuLkwmJih3bj0hMCk7YnJlYWs7ZGVmYXVsdDp3bj0hMH19aWYod258fGtuKXt2YXIgem49bmV3IERhdGUoMTk4NywxLDE5KSx5cj0wLFdyPVtdO2Zvcihubj0wO25uPGduLkZ1bGxQYXRocy5sZW5n'@;
put 'dGg7KytubikwIT09Z24uRmlsZUluZGV4W25uXS50eXBlJiZXci5wdXNoKFtnbi5GdWxsUGF0aHNbbm5dLGduLkZpbGVJbmRleFtubl1dKTtmb3Iobm49MDtubjxXci5sZW5ndGg7Kytubil7dmFyIG9pPUcoV3Jbbm5dWzBdKTtmb3IoWnQ9ITEseXI9MDt5cjxXci5sZW5ndGg7Kyt5cilXclt5'@;
put 'cl1bMF09PT1vaSYmKFp0PSEwKTtadHx8V3IucHVzaChbb2kse25hbWU6UShvaSkucmVwbGFjZSgiLyIsIiIpLHR5cGU6MSxjbHNpZDpuYSxjdDp6bixtdDp6bixjb250ZW50Om51bGx9XSl9Zm9yKFdyLnNvcnQoZnVuY3Rpb24oVWksbm8pe3JldHVybiBmdW5jdGlvbiBrKGduLGtuKXtmb3Io'@;
put 'dmFyIHduPWduLnNwbGl0KCIvIiksWnQ9a24uc3BsaXQoIi8iKSxubj0wLHhuPTAsem49TWF0aC5taW4od24ubGVuZ3RoLFp0Lmxlbmd0aCk7bm48em47Kytubil7aWYoeG49d25bbm5dLmxlbmd0aC1adFtubl0ubGVuZ3RoKXJldHVybiB4bjtpZih3bltubl0hPVp0W25uXSlyZXR1cm4gd25b'@;
put 'bm5dPFp0W25uXT8tMToxfXJldHVybiB3bi5sZW5ndGgtWnQubGVuZ3RofShVaVswXSxub1swXSl9KSxnbi5GdWxsUGF0aHM9W10sZ24uRmlsZUluZGV4PVtdLG5uPTA7bm48V3IubGVuZ3RoOysrbm4pZ24uRnVsbFBhdGhzW25uXT1Xcltubl1bMF0sZ24uRmlsZUluZGV4W25uXT1Xcltubl1b'@;
put 'MV07Zm9yKG5uPTA7bm48V3IubGVuZ3RoOysrbm4pe3ZhciBuaT1nbi5GaWxlSW5kZXhbbm5dLFhpPWduLkZ1bGxQYXRoc1tubl07aWYobmkubmFtZT1RKFhpKS5yZXBsYWNlKCIvIiwiIiksbmkuTD1uaS5SPW5pLkM9LShuaS5jb2xvcj0xKSxuaS5zaXplPW5pLmNvbnRlbnQ/bmkuY29udGVu'@;
put 'dC5sZW5ndGg6MCxuaS5zdGFydD0wLG5pLmNsc2lkPW5pLmNsc2lkfHxuYSwwPT09bm4pbmkuQz1Xci5sZW5ndGg+MT8xOi0xLG5pLnNpemU9MCxuaS50eXBlPTU7ZWxzZSBpZigiLyI9PVhpLnNsaWNlKC0xKSl7Zm9yKHlyPW5uKzE7eXI8V3IubGVuZ3RoJiZHKGduLkZ1bGxQYXRoc1t5cl0p'@;
put 'IT1YaTsrK3lyKTtmb3IobmkuQz15cj49V3IubGVuZ3RoPy0xOnlyLHlyPW5uKzE7eXI8V3IubGVuZ3RoJiZHKGduLkZ1bGxQYXRoc1t5cl0pIT1HKFhpKTsrK3lyKTtuaS5SPXlyPj1Xci5sZW5ndGg/LTE6eXIsbmkudHlwZT0xfWVsc2UgRyhnbi5GdWxsUGF0aHNbbm4rMV18fCIiKT09RyhY'@;
put 'aSkmJihuaS5SPW5uKzEpLG5pLnR5cGU9Mn19fWZ1bmN0aW9uIEJuKGduLGtuKXt2YXIgd249a258fHt9O2lmKFhuKGduKSwiemlwIj09d24uZmlsZVR5cGUpcmV0dXJuIGZ1bmN0aW9uIFlvKGduLGtuKXt2YXIgd249a258fHt9LFp0PVtdLG5uPVtdLHhuPWJuKDEpLHpuPXduLmNvbXByZXNz'@;
put 'aW9uPzg6MCx5cj0wLG9pPTAsbmk9MCxYaT0wLFVpPTAsbm89Z24uRnVsbFBhdGhzWzBdLGphPW5vLHZhPWduLkZpbGVJbmRleFswXSxUbz1bXSx4cz0wO2ZvcihvaT0xO29pPGduLkZ1bGxQYXRocy5sZW5ndGg7KytvaSlpZihqYT1nbi5GdWxsUGF0aHNbb2ldLnNsaWNlKG5vLmxlbmd0aCks'@;
put 'KHZhPWduLkZpbGVJbmRleFtvaV0pLnNpemUmJnZhLmNvbnRlbnQmJiJceDAxU2gzM3RKNSIhPWphKXt2YXIgcjE9WGksYzA9Ym4oamEubGVuZ3RoKTtmb3Iobmk9MDtuaTxqYS5sZW5ndGg7KytuaSljMC53cml0ZV9zaGlmdCgxLDEyNyZqYS5jaGFyQ29kZUF0KG5pKSk7YzA9YzAuc2xpY2Uo'@;
put 'MCxjMC5sKSxUb1tVaV09eGUuYnVmKHZhLmNvbnRlbnQsMCk7dmFyIGExPXZhLmNvbnRlbnQ7OD09em4mJihhMT1qcihhMSkpLCh4bj1ibigzMCkpLndyaXRlX3NoaWZ0KDQsNjczMjQ3NTIpLHhuLndyaXRlX3NoaWZ0KDIsMjApLHhuLndyaXRlX3NoaWZ0KDIseXIpLHhuLndyaXRlX3NoaWZ0'@;
put 'KDIsem4pLHZhLm10P29lKHhuLHZhLm10KTp4bi53cml0ZV9zaGlmdCg0LDApLHhuLndyaXRlX3NoaWZ0KC00LDgmeXI/MDpUb1tVaV0pLHhuLndyaXRlX3NoaWZ0KDQsOCZ5cj8wOmExLmxlbmd0aCkseG4ud3JpdGVfc2hpZnQoNCw4JnlyPzA6dmEuY29udGVudC5sZW5ndGgpLHhuLndyaXRl'@;
put 'X3NoaWZ0KDIsYzAubGVuZ3RoKSx4bi53cml0ZV9zaGlmdCgyLDApLFhpKz14bi5sZW5ndGgsWnQucHVzaCh4biksWGkrPWMwLmxlbmd0aCxadC5wdXNoKGMwKSxYaSs9YTEubGVuZ3RoLFp0LnB1c2goYTEpLDgmeXImJigoeG49Ym4oMTIpKS53cml0ZV9zaGlmdCgtNCxUb1tVaV0pLHhuLndy'@;
put 'aXRlX3NoaWZ0KDQsYTEubGVuZ3RoKSx4bi53cml0ZV9zaGlmdCg0LHZhLmNvbnRlbnQubGVuZ3RoKSxYaSs9eG4ubCxadC5wdXNoKHhuKSksKHhuPWJuKDQ2KSkud3JpdGVfc2hpZnQoNCwzMzYzOTI0OCkseG4ud3JpdGVfc2hpZnQoMiwwKSx4bi53cml0ZV9zaGlmdCgyLDIwKSx4bi53cml0'@;
put 'ZV9zaGlmdCgyLHlyKSx4bi53cml0ZV9zaGlmdCgyLHpuKSx4bi53cml0ZV9zaGlmdCg0LDApLHhuLndyaXRlX3NoaWZ0KC00LFRvW1VpXSkseG4ud3JpdGVfc2hpZnQoNCxhMS5sZW5ndGgpLHhuLndyaXRlX3NoaWZ0KDQsdmEuY29udGVudC5sZW5ndGgpLHhuLndyaXRlX3NoaWZ0KDIsYzAu'@;
put 'bGVuZ3RoKSx4bi53cml0ZV9zaGlmdCgyLDApLHhuLndyaXRlX3NoaWZ0KDIsMCkseG4ud3JpdGVfc2hpZnQoMiwwKSx4bi53cml0ZV9zaGlmdCgyLDApLHhuLndyaXRlX3NoaWZ0KDQsMCkseG4ud3JpdGVfc2hpZnQoNCxyMSkseHMrPXhuLmwsbm4ucHVzaCh4bikseHMrPWMwLmxlbmd0aCxu'@;
put 'bi5wdXNoKGMwKSwrK1VpfXJldHVybih4bj1ibigyMikpLndyaXRlX3NoaWZ0KDQsMTAxMDEwMjU2KSx4bi53cml0ZV9zaGlmdCgyLDApLHhuLndyaXRlX3NoaWZ0KDIsMCkseG4ud3JpdGVfc2hpZnQoMixVaSkseG4ud3JpdGVfc2hpZnQoMixVaSkseG4ud3JpdGVfc2hpZnQoNCx4cykseG4u'@;
put 'd3JpdGVfc2hpZnQoNCxYaSkseG4ud3JpdGVfc2hpZnQoMiwwKSxqKFtqKFp0KSxqKG5uKSx4bl0pfShnbix3bik7dmFyIFp0PWZ1bmN0aW9uKG5vKXtmb3IodmFyIGphPTAsdmE9MCxUbz0wO1RvPG5vLkZpbGVJbmRleC5sZW5ndGg7KytUbyl7dmFyIHhzPW5vLkZpbGVJbmRleFtUb107aWYo'@;
put 'eHMuY29udGVudCl7dmFyIHIxPXhzLmNvbnRlbnQubGVuZ3RoO3IxPjAmJihyMTw0MDk2P2phKz1yMSs2Mz4+Njp2YSs9cjErNTExPj45KX19Zm9yKHZhciBjMD1uby5GdWxsUGF0aHMubGVuZ3RoKzM+PjIsQjg9amErMTI3Pj43LFg1PShqYSs3Pj4zKSt2YStjMCtCOCxKNT1YNSsxMjc+Pjcs'@;
put 'TWU9SjU8PTEwOT8wOk1hdGguY2VpbCgoSjUtMTA5KS8xMjcpO1g1K0o1K01lKzEyNz4+Nz5KNTspTWU9KytKNTw9MTA5PzA6TWF0aC5jZWlsKChKNS0xMDkpLzEyNyk7dmFyIGhoPVsxLE1lLEo1LEI4LGMwLHZhLGphLDBdO3JldHVybiBuby5GaWxlSW5kZXhbMF0uc2l6ZT1qYTw8NixoaFs3'@;
put 'XT0obm8uRmlsZUluZGV4WzBdLnN0YXJ0PWhoWzBdK2hoWzFdK2hoWzJdK2hoWzNdK2hoWzRdK2hoWzVdKSsoaGhbNl0rNz4+MyksaGh9KGduKSxubj1ibihadFs3XTw8OSkseG49MCx6bj0wO2Zvcih4bj0wO3huPDg7Kyt4bilubi53cml0ZV9zaGlmdCgxLEZpW3huXSk7Zm9yKHhuPTA7eG48'@;
put 'ODsrK3huKW5uLndyaXRlX3NoaWZ0KDIsMCk7Zm9yKG5uLndyaXRlX3NoaWZ0KDIsNjIpLG5uLndyaXRlX3NoaWZ0KDIsMyksbm4ud3JpdGVfc2hpZnQoMiw2NTUzNCksbm4ud3JpdGVfc2hpZnQoMiw5KSxubi53cml0ZV9zaGlmdCgyLDYpLHhuPTA7eG48MzsrK3huKW5uLndyaXRlX3NoaWZ0'@;
put 'KDIsMCk7Zm9yKG5uLndyaXRlX3NoaWZ0KDQsMCksbm4ud3JpdGVfc2hpZnQoNCxadFsyXSksbm4ud3JpdGVfc2hpZnQoNCxadFswXStadFsxXStadFsyXStadFszXS0xKSxubi53cml0ZV9zaGlmdCg0LDApLG5uLndyaXRlX3NoaWZ0KDQsNDA5Niksbm4ud3JpdGVfc2hpZnQoNCxadFszXT9a'@;
put 'dFswXStadFsxXStadFsyXS0xOmVyKSxubi53cml0ZV9zaGlmdCg0LFp0WzNdKSxubi53cml0ZV9zaGlmdCgtNCxadFsxXT9adFswXS0xOmVyKSxubi53cml0ZV9zaGlmdCg0LFp0WzFdKSx4bj0wO3huPDEwOTsrK3huKW5uLndyaXRlX3NoaWZ0KC00LHhuPFp0WzJdP1p0WzFdK3huOi0xKTtp'@;
put 'ZihadFsxXSlmb3Ioem49MDt6bjxadFsxXTsrK3puKXtmb3IoO3huPDIzNisxMjcqem47Kyt4bilubi53cml0ZV9zaGlmdCgtNCx4bjxadFsyXT9adFsxXSt4bjotMSk7bm4ud3JpdGVfc2hpZnQoLTQsem49PT1adFsxXS0xP2VyOnpuKzEpfXZhciB5cj1mdW5jdGlvbihubyl7Zm9yKHpuKz1u'@;
put 'bzt4bjx6bi0xOysreG4pbm4ud3JpdGVfc2hpZnQoLTQseG4rMSk7bm8mJigrK3huLG5uLndyaXRlX3NoaWZ0KC00LGVyKSl9O2Zvcih6bj14bj0wLHpuKz1adFsxXTt4bjx6bjsrK3huKW5uLndyaXRlX3NoaWZ0KC00LGNhLkRJRlNFQ1QpO2Zvcih6bis9WnRbMl07eG48em47Kyt4bilubi53'@;
put 'cml0ZV9zaGlmdCgtNCxjYS5GQVRTRUNUKTt5cihadFszXSkseXIoWnRbNF0pO2Zvcih2YXIgV3I9MCxvaT0wLG5pPWduLkZpbGVJbmRleFswXTtXcjxnbi5GaWxlSW5kZXgubGVuZ3RoOysrV3IpKG5pPWduLkZpbGVJbmRleFtXcl0pLmNvbnRlbnQmJiEoKG9pPW5pLmNvbnRlbnQubGVuZ3Ro'@;
put 'KTw0MDk2KSYmKG5pLnN0YXJ0PXpuLHlyKG9pKzUxMT4+OSkpO2Zvcih5cihadFs2XSs3Pj4zKTs1MTEmbm4ubDspbm4ud3JpdGVfc2hpZnQoLTQsY2EuRU5ET0ZDSEFJTik7Zm9yKHpuPXhuPTAsV3I9MDtXcjxnbi5GaWxlSW5kZXgubGVuZ3RoOysrV3IpKG5pPWduLkZpbGVJbmRleFtXcl0p'@;
put 'LmNvbnRlbnQmJihvaT1uaS5jb250ZW50Lmxlbmd0aCkmJiEob2k+PTQwOTYpJiYobmkuc3RhcnQ9em4seXIob2krNjM+PjYpKTtmb3IoOzUxMSZubi5sOylubi53cml0ZV9zaGlmdCgtNCxjYS5FTkRPRkNIQUlOKTtmb3IoeG49MDt4bjxadFs0XTw8MjsrK3huKXt2YXIgWGk9Z24uRnVsbFBh'@;
put 'dGhzW3huXTtpZihYaSYmMCE9PVhpLmxlbmd0aCl7bmk9Z24uRmlsZUluZGV4W3huXSwwPT09eG4mJihuaS5zdGFydD1uaS5zaXplP25pLnN0YXJ0LTE6ZXIpO3ZhciBVaT0wPT09eG4mJnduLnJvb3R8fG5pLm5hbWU7aWYob2k9MiooVWkubGVuZ3RoKzEpLG5uLndyaXRlX3NoaWZ0KDY0LFVp'@;
put 'LCJ1dGYxNmxlIiksbm4ud3JpdGVfc2hpZnQoMixvaSksbm4ud3JpdGVfc2hpZnQoMSxuaS50eXBlKSxubi53cml0ZV9zaGlmdCgxLG5pLmNvbG9yKSxubi53cml0ZV9zaGlmdCgtNCxuaS5MKSxubi53cml0ZV9zaGlmdCgtNCxuaS5SKSxubi53cml0ZV9zaGlmdCgtNCxuaS5DKSxuaS5jbHNp'@;
put 'ZClubi53cml0ZV9zaGlmdCgxNixuaS5jbHNpZCwiaGV4Iik7ZWxzZSBmb3IoV3I9MDtXcjw0OysrV3Ipbm4ud3JpdGVfc2hpZnQoNCwwKTtubi53cml0ZV9zaGlmdCg0LG5pLnN0YXRlfHwwKSxubi53cml0ZV9zaGlmdCg0LDApLG5uLndyaXRlX3NoaWZ0KDQsMCksbm4ud3JpdGVfc2hpZnQo'@;
put 'NCwwKSxubi53cml0ZV9zaGlmdCg0LDApLG5uLndyaXRlX3NoaWZ0KDQsbmkuc3RhcnQpLG5uLndyaXRlX3NoaWZ0KDQsbmkuc2l6ZSksbm4ud3JpdGVfc2hpZnQoNCwwKX1lbHNle2ZvcihXcj0wO1dyPDE3OysrV3Ipbm4ud3JpdGVfc2hpZnQoNCwwKTtmb3IoV3I9MDtXcjwzOysrV3Ipbm4u'@;
put 'd3JpdGVfc2hpZnQoNCwtMSk7Zm9yKFdyPTA7V3I8MTI7KytXcilubi53cml0ZV9zaGlmdCg0LDApfX1mb3IoeG49MTt4bjxnbi5GaWxlSW5kZXgubGVuZ3RoOysreG4paWYoKG5pPWduLkZpbGVJbmRleFt4bl0pLnNpemU+PTQwOTYpe2Zvcihubi5sPW5pLnN0YXJ0KzE8PDksV3I9MDtXcjxu'@;
put 'aS5zaXplOysrV3Ipbm4ud3JpdGVfc2hpZnQoMSxuaS5jb250ZW50W1dyXSk7Zm9yKDs1MTEmV3I7KytXcilubi53cml0ZV9zaGlmdCgxLDApfWZvcih4bj0xO3huPGduLkZpbGVJbmRleC5sZW5ndGg7Kyt4bilpZigobmk9Z24uRmlsZUluZGV4W3huXSkuc2l6ZT4wJiZuaS5zaXplPDQwOTYp'@;
put 'e2ZvcihXcj0wO1dyPG5pLnNpemU7KytXcilubi53cml0ZV9zaGlmdCgxLG5pLmNvbnRlbnRbV3JdKTtmb3IoOzYzJldyOysrV3Ipbm4ud3JpdGVfc2hpZnQoMSwwKX1mb3IoO25uLmw8bm4ubGVuZ3RoOylubi53cml0ZV9zaGlmdCgxLDApO3JldHVybiBubn1SLnZlcnNpb249IjEuMS40Ijt2'@;
put 'YXIgQnIsYnI9NjQsZXI9LTIsTWk9ImQwY2YxMWUwYTFiMTFhZTEiLEZpPVsyMDgsMjA3LDE3LDIyNCwxNjEsMTc3LDI2LDIyNV0sbmE9IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIixjYT17TUFYUkVHU0VDVDotNixESUZTRUNUOi00LEZBVFNFQ1Q6LTMsRU5ET0ZDSEFJTjpl'@;
put 'cixGUkVFU0VDVDotMSxIRUFERVJfU0lHTkFUVVJFOk1pLEhFQURFUl9NSU5PUl9WRVJTSU9OOiIzZTAwIixNQVhSRUdTSUQ6LTYsTk9TVFJFQU06LTEsSEVBREVSX0NMU0lEOm5hLEVudHJ5VHlwZXM6WyJ1bmtub3duIiwic3RvcmFnZSIsInN0cmVhbSIsImxvY2tieXRlcyIsInByb3BlcnR5'@;
put 'Iiwicm9vdCJdfTtmdW5jdGlvbiBrcihnbil7Zm9yKHZhciBrbj1uZXcgQXJyYXkoZ24ubGVuZ3RoKSx3bj0wO3duPGduLmxlbmd0aDsrK3duKWtuW3duXT1TdHJpbmcuZnJvbUNoYXJDb2RlKGduW3duXSk7cmV0dXJuIGtuLmpvaW4oIiIpfWZ1bmN0aW9uIGpyKGduKXtyZXR1cm4gQnI/QnIu'@;
put 'ZGVmbGF0ZVJhd1N5bmMoZ24pOkdsKGduKX1mb3IodmFyIGduLGtuLFppPVsxNiwxNywxOCwwLDgsNyw5LDYsMTAsNSwxMSw0LDEyLDMsMTMsMiwxNCwxLDE1XSx5aT1bMyw0LDUsNiw3LDgsOSwxMCwxMSwxMywxNSwxNywxOSwyMywyNywzMSwzNSw0Myw1MSw1OSw2Nyw4Myw5OSwxMTUsMTMx'@;
put 'LDE2MywxOTUsMjI3LDI1OF0sX2E9WzEsMiwzLDQsNSw3LDksMTMsMTcsMjUsMzMsNDksNjUsOTcsMTI5LDE5MywyNTcsMzg1LDUxMyw3NjksMTAyNSwxNTM3LDIwNDksMzA3Myw0MDk3LDYxNDUsODE5MywxMjI4OSwxNjM4NSwyNDU3N10saWE9dHlwZW9mIFVpbnQ4QXJyYXk8InUiLExvPWlh'@;
put 'P25ldyBVaW50OEFycmF5KDI1Nik6W10sT2E9MDtPYTwyNTY7KytPYSlMb1tPYV09KHZvaWQgMCwyNTUmKChrbj0xMzk1MzYmKChnbj1PYSk8PDF8Z248PDExKXw1NTgxNDQmKGduPDw1fGduPDwxNSkpPj4xNnxrbj4+OHxrbikpO2Z1bmN0aW9uIGhvKGduLGtuKXt2YXIgd249TG9bMjU1Jmdu'@;
put 'XTtyZXR1cm4ga248PTg/d24+Pj44LWtuOih3bj13bjw8OHxMb1tnbj4+OCYyNTVdLGtuPD0xNj93bj4+PjE2LWtuOih3bj13bjw8OHxMb1tnbj4+MTYmMjU1XSk+Pj4yNC1rbil9ZnVuY3Rpb24gSmEoZ24sa24pe3ZhciB3bj03JmtuLFp0PWtuPj4+MztyZXR1cm4oZ25bWnRdfCh3bjw9Nj8w'@;
put 'OmduW1p0KzFdPDw4KSk+Pj53biYzfWZ1bmN0aW9uIEJpKGduLGtuKXt2YXIgd249NyZrbixadD1rbj4+PjM7cmV0dXJuKGduW1p0XXwod248PTU/MDpnbltadCsxXTw8OCkpPj4+d24mN31mdW5jdGlvbiBQbihnbixrbil7dmFyIHduPTcma24sWnQ9a24+Pj4zO3JldHVybihnbltadF18KHdu'@;
put 'PD0zPzA6Z25bWnQrMV08PDgpKT4+PnduJjMxfWZ1bmN0aW9uIFdvKGduLGtuKXt2YXIgd249NyZrbixadD1rbj4+PjM7cmV0dXJuKGduW1p0XXwod248PTE/MDpnbltadCsxXTw8OCkpPj4+d24mMTI3fWZ1bmN0aW9uIGhyKGduLGtuLHduKXt2YXIgWnQ9NyZrbixubj1rbj4+PjMsem49Z25b'@;
put 'bm5dPj4+WnQ7cmV0dXJuIHduPDgtWnR8fCh6bnw9Z25bbm4rMV08PDgtWnQsd248MTYtWnQpfHwoem58PWduW25uKzJdPDwxNi1adCx3bjwyNC1adCl8fCh6bnw9Z25bbm4rM108PDI0LVp0KSx6biYoMTw8d24pLTF9ZnVuY3Rpb24gUWwoZ24sa24pe3ZhciB3bj1nbi5sZW5ndGgsWnQ9Mip3'@;
put 'bj5rbj8yKnduOmtuKzUsbm49MDtpZih3bj49a24pcmV0dXJuIGduO2lmKFRlKXt2YXIgeG49cChadCk7aWYoZ24uY29weSlnbi5jb3B5KHhuKTtlbHNlIGZvcig7bm48Z24ubGVuZ3RoOysrbm4peG5bbm5dPWduW25uXTtyZXR1cm4geG59aWYoaWEpe3ZhciB6bj1uZXcgVWludDhBcnJheSha'@;
put 'dCk7aWYoem4uc2V0KXpuLnNldChnbik7ZWxzZSBmb3IoO25uPGduLmxlbmd0aDsrK25uKXpuW25uXT1nbltubl07cmV0dXJuIHpufXJldHVybiBnbi5sZW5ndGg9WnQsZ259ZnVuY3Rpb24gWWwoZ24pe2Zvcih2YXIga249bmV3IEFycmF5KGduKSx3bj0wO3duPGduOysrd24pa25bd25dPTA7'@;
put 'cmV0dXJuIGtufXZhciBHbD1mdW5jdGlvbigpe3ZhciBnbj1mdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbih3bixadCl7Zm9yKHZhciBubj0wO25uPHduLmxlbmd0aDspe3ZhciB4bj1NYXRoLm1pbig2NTUzNSx3bi5sZW5ndGgtbm4pO2ZvcihadC53cml0ZV9zaGlmdCgxLCsobm4reG49PXdu'@;
put 'Lmxlbmd0aCkpLFp0LndyaXRlX3NoaWZ0KDIseG4pLFp0LndyaXRlX3NoaWZ0KDIsNjU1MzUmfnhuKTt4bi0tID4wOyladFtadC5sKytdPXduW25uKytdfXJldHVybiBadC5sfX0oKTtyZXR1cm4gZnVuY3Rpb24oa24pe3ZhciB3bj1ibig1MCtNYXRoLmZsb29yKDEuMSprbi5sZW5ndGgpKSxa'@;
put 'dD1nbihrbix3bik7cmV0dXJuIHduLnNsaWNlKDAsWnQpfX0oKTtmdW5jdGlvbiB5dShnbixrbix3bil7dmFyIFp0PTEsbm49MCx4bj0wLHpuPTAseXI9MCxXcj1nbi5sZW5ndGgsb2k9aWE/bmV3IFVpbnQxNkFycmF5KDMyKTpZbCgzMik7Zm9yKHhuPTA7eG48MzI7Kyt4bilvaVt4bl09MDtm'@;
put 'b3IoeG49V3I7eG48d247Kyt4bilnblt4bl09MDtXcj1nbi5sZW5ndGg7dmFyIG5pPWlhP25ldyBVaW50MTZBcnJheShXcik6WWwoV3IpO2Zvcih4bj0wO3huPFdyOysreG4pb2lbbm49Z25beG5dXSsrLFp0PG5uJiYoWnQ9bm4pLG5pW3huXT0wO2ZvcihvaVswXT0wLHhuPTE7eG48PVp0Oysr'@;
put 'eG4pb2lbeG4rMTZdPXlyPXlyK29pW3huLTFdPDwxO2Zvcih4bj0wO3huPFdyOysreG4pMCE9KHlyPWduW3huXSkmJihuaVt4bl09b2lbeXIrMTZdKyspO3ZhciBYaT0wO2Zvcih4bj0wO3huPFdyOysreG4paWYoMCE9KFhpPWduW3huXSkpZm9yKHlyPWhvKG5pW3huXSxadCk+Plp0LVhpLHpu'@;
put 'PSgxPDxadCs0LVhpKS0xO3puPj0wOy0tem4pa25beXJ8em48PFhpXT0xNSZYaXx4bjw8NDtyZXR1cm4gWnR9dmFyIE1sPWlhP25ldyBVaW50MTZBcnJheSg1MTIpOllsKDUxMiksbG49aWE/bmV3IFVpbnQxNkFycmF5KDMyKTpZbCgzMik7aWYoIWlhKXtmb3IodmFyIEVuPTA7RW48NTEyOysr'@;
put 'RW4pTWxbRW5dPTA7Zm9yKEVuPTA7RW48MzI7KytFbilsbltFbl09MH0hZnVuY3Rpb24oKXtmb3IodmFyIGduPVtdLGtuPTA7a248MzI7a24rKylnbi5wdXNoKDUpO3l1KGduLGxuLDMyKTt2YXIgd249W107Zm9yKGtuPTA7a248PTE0MztrbisrKXduLnB1c2goOCk7Zm9yKDtrbjw9MjU1O2tu'@;
put 'Kyspd24ucHVzaCg5KTtmb3IoO2tuPD0yNzk7a24rKyl3bi5wdXNoKDcpO2Zvcig7a248PTI4NztrbisrKXduLnB1c2goOCk7eXUod24sTWwsMjg4KX0oKTt2YXIgVW49aWE/bmV3IFVpbnQxNkFycmF5KDMyNzY4KTpZbCgzMjc2OCkseGk9aWE/bmV3IFVpbnQxNkFycmF5KDMyNzY4KTpZbCgz'@;
put 'Mjc2OCksb3I9aWE/bmV3IFVpbnQxNkFycmF5KDEyOCk6WWwoMTI4KSxPaT0xLFNyPTE7ZnVuY3Rpb24gUGkoZ24sa24pe3ZhciB3bj1QbihnbixrbikrMjU3LFp0PVBuKGduLGtuKz01KSsxLG5uPWZ1bmN0aW9uIElzKGduLGtuKXt2YXIgd249NyZrbixadD1rbj4+PjM7cmV0dXJuKGduW1p0'@;
put 'XXwod248PTQ/MDpnbltadCsxXTw8OCkpPj4+d24mMTV9KGduLGtuKz01KSs0O2tuKz00O2Zvcih2YXIgeG49MCx6bj1pYT9uZXcgVWludDhBcnJheSgxOSk6WWwoMTkpLHlyPVswLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwXSxXcj0xLG9pPWlhP25ldyBVaW50OEFycmF5'@;
put 'KDgpOllsKDgpLG5pPWlhP25ldyBVaW50OEFycmF5KDgpOllsKDgpLFhpPXpuLmxlbmd0aCxVaT0wO1VpPG5uOysrVWkpem5bWmlbVWldXT14bj1CaShnbixrbiksV3I8eG4mJihXcj14biksb2lbeG5dKyssa24rPTM7dmFyIG5vPTA7Zm9yKG9pWzBdPTAsVWk9MTtVaTw9V3I7KytVaSluaVtV'@;
put 'aV09bm89bm8rb2lbVWktMV08PDE7Zm9yKFVpPTA7VWk8WGk7KytVaSkwIT0obm89em5bVWldKSYmKHlyW1VpXT1uaVtub10rKyk7dmFyIGphPTA7Zm9yKFVpPTA7VWk8WGk7KytVaSlpZigwIT0oamE9em5bVWldKSl7bm89TG9beXJbVWldXT4+OC1qYTtmb3IodmFyIHZhPSgxPDw3LWphKS0x'@;
put 'O3ZhPj0wOy0tdmEpb3Jbbm98dmE8PGphXT03JmphfFVpPDwzfXZhciBUbz1bXTtmb3IoV3I9MTtUby5sZW5ndGg8d24rWnQ7KXN3aXRjaChubz1vcltXbyhnbixrbildLGtuKz03Jm5vLG5vPj4+PTMpe2Nhc2UgMTY6Zm9yKHhuPTMrSmEoZ24sa24pLGtuKz0yLG5vPVRvW1RvLmxlbmd0aC0x'@;
put 'XTt4bi0tID4wOylUby5wdXNoKG5vKTticmVhaztjYXNlIDE3OmZvcih4bj0zK0JpKGduLGtuKSxrbis9Mzt4bi0tID4wOylUby5wdXNoKDApO2JyZWFrO2Nhc2UgMTg6Zm9yKHhuPTExK1dvKGduLGtuKSxrbis9Nzt4bi0tID4wOylUby5wdXNoKDApO2JyZWFrO2RlZmF1bHQ6VG8ucHVzaChu'@;
put 'byksV3I8bm8mJihXcj1ubyl9dmFyIHhzPVRvLnNsaWNlKDAsd24pLHIxPVRvLnNsaWNlKHduKTtmb3IoVWk9d247VWk8Mjg2OysrVWkpeHNbVWldPTA7Zm9yKFVpPVp0O1VpPDMwOysrVWkpcjFbVWldPTA7cmV0dXJuIE9pPXl1KHhzLFVuLDI4NiksU3I9eXUocjEseGksMzApLGtufWZ1bmN0'@;
put 'aW9uIEhpKGduLGtuKXt2YXIgWnQ9ZnVuY3Rpb24gWmEoZ24sa24pe2lmKDM9PWduWzBdJiYhKDMmZ25bMV0pKXJldHVybltWKGtuKSwyXTtmb3IodmFyIHduPTAsWnQ9MCxubj1wKGtufHwxPDwxOCkseG49MCx6bj1ubi5sZW5ndGg+Pj4wLHlyPTAsV3I9MDshKDEmWnQpOylpZihadD1CaShn'@;
put 'bix3biksd24rPTMsWnQ+Pj4xKWZvcihadD4+PjE9PTE/KHlyPTksV3I9NSk6KHduPVBpKGduLHduKSx5cj1PaSxXcj1TciksIWtuJiZ6bjx4biszMjc2NyYmKHpuPShubj1RbChubix4biszMjc2NykpLmxlbmd0aCk7Oyl7dmFyIG5pPWhyKGduLHduLHlyKSxYaT1adD4+PjE9PTE/TWxbbmld'@;
put 'OlVuW25pXTtpZih3bis9MTUmWGksKFhpPj4+PTQpPj4+OCYyNTUpe2lmKDI1Nj09WGkpYnJlYWs7dmFyIFVpPShYaS09MjU3KTw4PzA6WGktND4+MjtVaT41JiYoVWk9MCk7dmFyIG5vPXhuK3lpW1hpXTtVaT4wJiYobm8rPWhyKGduLHduLFVpKSx3bis9VWkpLG5pPWhyKGduLHduLFdyKSx3'@;
put 'bis9MTUmKFhpPVp0Pj4+MT09MT9sbltuaV06eGlbbmldKTt2YXIgamE9KFhpPj4+PTQpPDQ/MDpYaS0yPj4xLHZhPV9hW1hpXTtmb3IoamE+MCYmKHZhKz1ocihnbix3bixqYSksd24rPWphKSwha24mJnpuPG5vJiYoem49KG5uPVFsKG5uLG5vKSkubGVuZ3RoKTt4bjxubzspbm5beG5dPW5u'@;
put 'W3huLXZhXSwrK3hufWVsc2Ugbm5beG4rK109WGl9ZWxzZXs3JnduJiYod24rPTgtKDcmd24pKTt2YXIgb2k9Z25bd24+Pj4zXXxnblsxKyh3bj4+PjMpXTw8ODtpZih3bis9MzIsIWtuJiZ6bjx4bitvaSYmKHpuPShubj1RbChubix4bitvaSkpLmxlbmd0aCksImZ1bmN0aW9uIj09dHlwZW9m'@;
put 'IGduLmNvcHkpZ24uY29weShubix4bix3bj4+PjMsKHduPj4+Mykrb2kpLHhuKz1vaSx3bis9OCpvaTtlbHNlIGZvcig7b2ktLSA+MDspbm5beG4rK109Z25bd24+Pj4zXSx3bis9OH1yZXR1cm5ba24/bm46bm4uc2xpY2UoMCx4biksd24rNz4+PjNdfShnbi5zbGljZShnbi5sfHwwKSxrbik7'@;
put 'cmV0dXJuIGduLmwrPVp0WzFdLFp0WzBdfWZ1bmN0aW9uIG1hKGduLGtuKXtpZighZ24pdGhyb3cgbmV3IEVycm9yKGtuKTt0eXBlb2YgY29uc29sZTwidSImJmNvbnNvbGUuZXJyb3Ioa24pfWZ1bmN0aW9uIERpKGduLGtuKXt2YXIgd249Z247bW4od24sMCk7dmFyIHhuPXtGaWxlSW5kZXg6'@;
put 'W10sRnVsbFBhdGhzOltdfTtTbih4bix7cm9vdDprbi5yb290fSk7Zm9yKHZhciB6bj13bi5sZW5ndGgtNDsoODAhPXduW3puXXx8NzUhPXduW3puKzFdfHw1IT13blt6bisyXXx8NiE9d25bem4rM10pJiZ6bj49MDspLS16bjt3bi5sPXpuKzQsd24ubCs9NDt2YXIgeXI9d24ucmVhZF9zaGlm'@;
put 'dCgyKTt3bi5sKz02O3ZhciBXcj13bi5yZWFkX3NoaWZ0KDQpO2Zvcih3bi5sPVdyLHpuPTA7em48eXI7Kyt6bil7d24ubCs9MjA7dmFyIG9pPXduLnJlYWRfc2hpZnQoNCksbmk9d24ucmVhZF9zaGlmdCg0KSxYaT13bi5yZWFkX3NoaWZ0KDIpLFVpPXduLnJlYWRfc2hpZnQoMiksbm89d24u'@;
put 'cmVhZF9zaGlmdCgyKTt3bi5sKz04O3ZhciBqYT13bi5yZWFkX3NoaWZ0KDQpLHZhPXBlKHduLnNsaWNlKHduLmwrWGksd24ubCtYaStVaSkpO3duLmwrPVhpK1VpK25vO3ZhciBUbz13bi5sO3duLmw9amErNCxjcyh3bixvaSxuaSx4bix2YSksd24ubD1Ub31yZXR1cm4geG59ZnVuY3Rpb24g'@;
put 'Y3MoZ24sa24sd24sWnQsbm4pe2duLmwrPTI7dmFyIHhuPWduLnJlYWRfc2hpZnQoMiksem49Z24ucmVhZF9zaGlmdCgyKSx5cj1mdW5jdGlvbiBnZShnbil7dmFyIGtuPTY1NTM1JmduLnJlYWRfc2hpZnQoMiksd249NjU1MzUmZ24ucmVhZF9zaGlmdCgyKSxadD1uZXcgRGF0ZSxubj0zMSZ3'@;
put 'bix4bj0xNSYod24+Pj49NSk7d24+Pj49NCxadC5zZXRNaWxsaXNlY29uZHMoMCksWnQuc2V0RnVsbFllYXIod24rMTk4MCksWnQuc2V0TW9udGgoeG4tMSksWnQuc2V0RGF0ZShubik7dmFyIHpuPTMxJmtuLHlyPTYzJihrbj4+Pj01KTtyZXR1cm4gWnQuc2V0SG91cnMoa24+Pj49NiksWnQu'@;
put 'c2V0TWludXRlcyh5ciksWnQuc2V0U2Vjb25kcyh6bjw8MSksWnR9KGduKTtpZig4MjU3JnhuKXRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgWklQIGVuY3J5cHRpb24iKTtmb3IodmFyIFdyPWduLnJlYWRfc2hpZnQoNCksb2k9Z24ucmVhZF9zaGlmdCg0KSxuaT1nbi5yZWFkX3NoaWZ0'@;
put 'KDQpLFhpPWduLnJlYWRfc2hpZnQoMiksVWk9Z24ucmVhZF9zaGlmdCgyKSxubz0iIixqYT0wO2phPFhpOysramEpbm8rPVN0cmluZy5mcm9tQ2hhckNvZGUoZ25bZ24ubCsrXSk7aWYoVWkpe3ZhciB2YT1wZShnbi5zbGljZShnbi5sLGduLmwrVWkpKTsodmFbMjE1ODldfHx7fSkubXQmJih5'@;
put 'cj12YVsyMTU4OV0ubXQpLCgobm58fHt9KVsyMTU4OV18fHt9KS5tdCYmKHlyPW5uWzIxNTg5XS5tdCl9Z24ubCs9VWk7dmFyIFRvPWduLnNsaWNlKGduLmwsZ24ubCtvaSk7c3dpdGNoKHpuKXtjYXNlIDg6VG89ZnVuY3Rpb24gRm4oZ24sa24pe2lmKCFCcilyZXR1cm4gSGkoZ24sa24pO3Zh'@;
put 'ciBadD1uZXcoMCxCci5JbmZsYXRlUmF3KSxubj1adC5fcHJvY2Vzc0NodW5rKGduLnNsaWNlKGduLmwpLFp0Ll9maW5pc2hGbHVzaEZsYWcpO3JldHVybiBnbi5sKz1adC5ieXRlc1JlYWQsbm59KGduLG5pKTticmVhaztjYXNlIDA6YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlVu'@;
put 'c3VwcG9ydGVkIFpJUCBDb21wcmVzc2lvbiBtZXRob2QgIit6bil9dmFyIHhzPSExOzgmeG4mJigxMzQ2OTU3NjA9PShXcj1nbi5yZWFkX3NoaWZ0KDQpKSYmKFdyPWduLnJlYWRfc2hpZnQoNCkseHM9ITApLG9pPWduLnJlYWRfc2hpZnQoNCksbmk9Z24ucmVhZF9zaGlmdCg0KSksb2khPWtu'@;
put 'JiZtYSh4cywiQmFkIGNvbXByZXNzZWQgc2l6ZTogIitrbisiICE9ICIrb2kpLG5pIT13biYmbWEoeHMsIkJhZCB1bmNvbXByZXNzZWQgc2l6ZTogIit3bisiICE9ICIrbmkpO3ZhciByMT14ZS5idWYoVG8sMCk7KDB8V3IpIT0oMHxyMSkmJm1hKHhzLCJCYWQgQ1JDMzIgY2hlY2tzdW06ICIr'@;
put 'V3IrIiAhPSAiK3IxKSxfdShadCxubyxUbyx7dW5zYWZlOiEwLG10OnlyfSl9ZnVuY3Rpb24gX3UoZ24sa24sd24sWnQpe3ZhciBubj1adCYmWnQudW5zYWZlO25ufHxTbihnbik7dmFyIHhuPSFubiYmdmUuZmluZChnbixrbik7aWYoIXhuKXt2YXIgem49Z24uRnVsbFBhdGhzWzBdO2tuLnNs'@;
put 'aWNlKDAsem4ubGVuZ3RoKT09em4/em49a246KCIvIiE9em4uc2xpY2UoLTEpJiYoem4rPSIvIiksem49KHpuK2tuKS5yZXBsYWNlKCIvLyIsIi8iKSkseG49e25hbWU6UShrbiksdHlwZToyfSxnbi5GaWxlSW5kZXgucHVzaCh4biksZ24uRnVsbFBhdGhzLnB1c2goem4pLG5ufHx2ZS51dGls'@;
put 'cy5jZmJfZ2MoZ24pfXJldHVybiB4bi5jb250ZW50PXduLHhuLnNpemU9d24/d24ubGVuZ3RoOjAsWnQmJihadC5DTFNJRCYmKHhuLmNsc2lkPVp0LkNMU0lEKSxadC5tdCYmKHhuLm10PVp0Lm10KSxadC5jdCYmKHhuLmN0PVp0LmN0KSkseG59cmV0dXJuIFIuZmluZD1mdW5jdGlvbiBmcihn'@;
put 'bixrbil7dmFyIHduPWduLkZ1bGxQYXRocy5tYXAoZnVuY3Rpb24oV3Ipe3JldHVybiBXci50b1VwcGVyQ2FzZSgpfSksWnQ9d24ubWFwKGZ1bmN0aW9uKFdyKXt2YXIgb2k9V3Iuc3BsaXQoIi8iKTtyZXR1cm4gb2lbb2kubGVuZ3RoLSgiLyI9PVdyLnNsaWNlKC0xKT8yOjEpXX0pLG5uPSEx'@;
put 'OzQ3PT09a24uY2hhckNvZGVBdCgwKT8obm49ITAsa249d25bMF0uc2xpY2UoMCwtMSkra24pOm5uPS0xIT09a24uaW5kZXhPZigiLyIpO3ZhciB4bj1rbi50b1VwcGVyQ2FzZSgpLHpuPSEwPT09bm4/d24uaW5kZXhPZih4bik6WnQuaW5kZXhPZih4bik7aWYoLTEhPT16bilyZXR1cm4gZ24u'@;
put 'RmlsZUluZGV4W3puXTt2YXIgeXI9IXhuLm1hdGNoKG0pO2Zvcih4bj14bi5yZXBsYWNlKEUsIiIpLHlyJiYoeG49eG4ucmVwbGFjZShtLCIhIikpLHpuPTA7em48d24ubGVuZ3RoOysrem4paWYoKHlyP3duW3puXS5yZXBsYWNlKG0sIiEiKTp3blt6bl0pLnJlcGxhY2UoRSwiIik9PXhufHwo'@;
put 'eXI/WnRbem5dLnJlcGxhY2UobSwiISIpOlp0W3puXSkucmVwbGFjZShFLCIiKT09eG4pcmV0dXJuIGduLkZpbGVJbmRleFt6bl07cmV0dXJuIG51bGx9LFIucmVhZD1mdW5jdGlvbiBycihnbixrbil7c3dpdGNoKGtuJiZrbi50eXBlfHwiYmFzZTY0Iil7Y2FzZSJmaWxlIjpyZXR1cm4gZnVu'@;
put 'Y3Rpb24gVG4oZ24sa24pe3JldHVybiBQZSgpLE5lKHllLnJlYWRGaWxlU3luYyhnbiksa24pfShnbixrbik7Y2FzZSJiYXNlNjQiOnJldHVybiBOZShiKF9lLmRlY29kZShnbikpLGtuKTtjYXNlImJpbmFyeSI6cmV0dXJuIE5lKGIoZ24pLGtuKX1yZXR1cm4gTmUoZ24sa24pfSxSLnBhcnNl'@;
put 'PU5lLFIud3JpdGU9ZnVuY3Rpb24gVm4oZ24sa24pe3ZhciB3bj1Cbihnbixrbik7c3dpdGNoKGtuJiZrbi50eXBlKXtjYXNlImZpbGUiOnJldHVybiBQZSgpLHllLndyaXRlRmlsZVN5bmMoa24uZmlsZW5hbWUsd24pLHduO2Nhc2UiYmluYXJ5IjpyZXR1cm4ga3Iod24pO2Nhc2UiYmFzZTY0'@;
put 'IjpyZXR1cm4gX2UuZW5jb2RlKGtyKHduKSl9cmV0dXJuIHdufSxSLndyaXRlRmlsZT1mdW5jdGlvbiBMaShnbixrbix3bil7UGUoKTt2YXIgWnQ9Qm4oZ24sd24pO3llLndyaXRlRmlsZVN5bmMoa24sWnQpfSxSLnV0aWxzPXtjZmJfbmV3OmZ1bmN0aW9uIHhsKGduKXt2YXIga249e307cmV0'@;
put 'dXJuIFNuKGtuLGduKSxrbn0sY2ZiX2FkZDpfdSxjZmJfZGVsOmZ1bmN0aW9uIEVsKGduLGtuKXtTbihnbik7dmFyIHduPXZlLmZpbmQoZ24sa24pO2lmKHduKWZvcih2YXIgWnQ9MDtadDxnbi5GaWxlSW5kZXgubGVuZ3RoOysrWnQpaWYoZ24uRmlsZUluZGV4W1p0XT09d24pcmV0dXJuIGdu'@;
put 'LkZpbGVJbmRleC5zcGxpY2UoWnQsMSksZ24uRnVsbFBhdGhzLnNwbGljZShadCwxKSwhMDtyZXR1cm4hMX0sY2ZiX21vdjpmdW5jdGlvbiBGZihnbixrbix3bil7U24oZ24pO3ZhciBadD12ZS5maW5kKGduLGtuKTtpZihadClmb3IodmFyIG5uPTA7bm48Z24uRmlsZUluZGV4Lmxlbmd0aDsr'@;
put 'K25uKWlmKGduLkZpbGVJbmRleFtubl09PVp0KXJldHVybiBnbi5GaWxlSW5kZXhbbm5dLm5hbWU9USh3biksZ24uRnVsbFBhdGhzW25uXT13biwhMDtyZXR1cm4hMX0sY2ZiX2djOmZ1bmN0aW9uIHlkKGduKXtYbihnbiwhMCl9LFJlYWRTaGlmdDpqbCxDaGVja0ZpZWxkOl9uLHByZXBfYmxv'@;
put 'YjptbixiY29uY2F0OmosdXNlX3psaWI6ZnVuY3Rpb24gX3IoZ24pe3RyeXt2YXIgd249bmV3KDAsZ24uSW5mbGF0ZVJhdyk7aWYod24uX3Byb2Nlc3NDaHVuayhuZXcgVWludDhBcnJheShbMywwXSksd24uX2ZpbmlzaEZsdXNoRmxhZyksIXduLmJ5dGVzUmVhZCl0aHJvdyBuZXcgRXJyb3Io'@;
put 'InpsaWIgZG9lcyBub3QgZXhwb3NlIGJ5dGVzUmVhZCIpO0JyPWdufWNhdGNoKFp0KXtjb25zb2xlLmVycm9yKCJjYW5ub3QgdXNlIG5hdGl2ZSB6bGliOiAiKyhadC5tZXNzYWdlfHxadCkpfX0sX2RlZmxhdGVSYXc6R2wsX2luZmxhdGVSYXc6SGksY29uc3RzOmNhfSxSfSgpO3RyeXtYZT15'@;
put 'KDgzMzM3KX1jYXRjaHt9ZnVuY3Rpb24gemUoUyl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBTP3goUyk6QXJyYXkuaXNBcnJheShTKT9mdW5jdGlvbiBUKFMpe2lmKHR5cGVvZiBVaW50OEFycmF5PiJ1Iil0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIik7cmV0dXJuIG5ldyBVaW50OEFy'@;
put 'cmF5KFMpfShTKTpTfWZ1bmN0aW9uIERlKFMsUixrKXtpZih0eXBlb2YgWGU8InUiJiZYZS53cml0ZUZpbGVTeW5jKXJldHVybiBrP1hlLndyaXRlRmlsZVN5bmMoUyxSLGspOlhlLndyaXRlRmlsZVN5bmMoUyxSKTt2YXIgRz0idXRmOCI9PWs/TnMoUik6UjtpZih0eXBlb2YgSUVfU2F2ZUZp'@;
put 'bGU8InUiKXJldHVybiBJRV9TYXZlRmlsZShHLFMpO2lmKHR5cGVvZiBCbG9iPCJ1Iil7dmFyIFE9bmV3IEJsb2IoW3plKEcpXSx7dHlwZToiYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtIn0pO2lmKHR5cGVvZiBuYXZpZ2F0b3I8InUiJiZuYXZpZ2F0b3IubXNTYXZlQmxvYilyZXR1cm4gbmF2'@;
put 'aWdhdG9yLm1zU2F2ZUJsb2IoUSxTKTtpZih0eXBlb2Ygc2F2ZUFzPCJ1IilyZXR1cm4gc2F2ZUFzKFEsUyk7aWYodHlwZW9mIFVSTDwidSImJnR5cGVvZiBkb2N1bWVudDwidSImJmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQmJlVSTC5jcmVhdGVPYmplY3RVUkwpe3ZhciBvZT1VUkwuY3JlYXRl'@;
put 'T2JqZWN0VVJMKFEpO2lmKCJvYmplY3QiPT10eXBlb2YgY2hyb21lJiYiZnVuY3Rpb24iPT10eXBlb2YoY2hyb21lLmRvd25sb2Fkc3x8e30pLmRvd25sb2FkKXJldHVybiBVUkwucmV2b2tlT2JqZWN0VVJMJiZ0eXBlb2Ygc2V0VGltZW91dDwidSImJnNldFRpbWVvdXQoZnVuY3Rpb24oKXtV'@;
put 'UkwucmV2b2tlT2JqZWN0VVJMKG9lKX0sNmU0KSxjaHJvbWUuZG93bmxvYWRzLmRvd25sb2FkKHt1cmw6b2UsZmlsZW5hbWU6UyxzYXZlQXM6ITB9KTt2YXIgZ2U9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpO2lmKG51bGwhPWdlLmRvd25sb2FkKXJldHVybiBnZS5kb3dubG9hZD1TLGdl'@;
put 'LmhyZWY9b2UsZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChnZSksZ2UuY2xpY2soKSxkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGdlKSxVUkwucmV2b2tlT2JqZWN0VVJMJiZ0eXBlb2Ygc2V0VGltZW91dDwidSImJnNldFRpbWVvdXQoZnVuY3Rpb24oKXtVUkwucmV2b2tlT2JqZWN0VVJM'@;
put 'KG9lKX0sNmU0KSxvZX19aWYodHlwZW9mICQ8InUiJiZ0eXBlb2YgRmlsZTwidSImJnR5cGVvZiBGb2xkZXI8InUiKXRyeXt2YXIgcGU9RmlsZShTKTtyZXR1cm4gcGUub3BlbigidyIpLHBlLmVuY29kaW5nPSJiaW5hcnkiLEFycmF5LmlzQXJyYXkoUikmJihSPUMoUikpLHBlLndyaXRlKFIp'@;
put 'LHBlLmNsb3NlKCksUn1jYXRjaCh5ZSl7aWYoIXllLm1lc3NhZ2V8fCF5ZS5tZXNzYWdlLm1hdGNoKC9vbnN0cnVjdC8pKXRocm93IHllfXRocm93IG5ldyBFcnJvcigiY2Fubm90IHNhdmUgZmlsZSAiK1MpfWZ1bmN0aW9uIE9lKFMpe2Zvcih2YXIgUj1PYmplY3Qua2V5cyhTKSxrPVtdLEc9'@;
put 'MDtHPFIubGVuZ3RoOysrRylPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoUyxSW0ddKSYmay5wdXNoKFJbR10pO3JldHVybiBrfWZ1bmN0aW9uIEllKFMsUil7Zm9yKHZhciBrPVtdLEc9T2UoUyksUT0wO1EhPT1HLmxlbmd0aDsrK1EpbnVsbD09a1tTW0dbUV1dW1JdXSYm'@;
put 'KGtbU1tHW1FdXVtSXV09R1tRXSk7cmV0dXJuIGt9ZnVuY3Rpb24gVmUoUyl7Zm9yKHZhciBSPVtdLGs9T2UoUyksRz0wO0chPT1rLmxlbmd0aDsrK0cpUltTW2tbR11dXT1rW0ddO3JldHVybiBSfWZ1bmN0aW9uIGtlKFMpe2Zvcih2YXIgUj1bXSxrPU9lKFMpLEc9MDtHIT09ay5sZW5ndGg7'@;
put 'KytHKVJbU1trW0ddXV09cGFyc2VJbnQoa1tHXSwxMCk7cmV0dXJuIFJ9dmFyIFFlLHVuLF90PW5ldyBEYXRlKDE4OTksMTEsMzAsMCwwLDApLG50PTA7ZnVuY3Rpb24geXQoKXtudD1fdC5nZXRUaW1lKCkrNmU0KigobmV3IERhdGUpLmdldFRpbWV6b25lT2Zmc2V0KCktX3QuZ2V0VGltZXpv'@;
put 'bmVPZmZzZXQoKSksUWU9ZnVuY3Rpb24oUixrKXt2YXIgRz1SLmdldFRpbWUoKTtyZXR1cm4gayYmKEctPTEyNjMxNjhlNSksKEctbnQpLzg2NGU1fSx1bj1mdW5jdGlvbihSKXt2YXIgaz1uZXcgRGF0ZTtyZXR1cm4gay5zZXRUaW1lKDI0KlIqNjAqNjAqMWUzK250KSxrfX1mdW5jdGlvbiBp'@;
put 'dChTKXt2YXIgUj0wLGs9MCxHPSExLFE9Uy5tYXRjaCgvUChbMC05XC5dK1kpPyhbMC05XC5dK00pPyhbMC05XC5dK0QpP1QoWzAtOVwuXStIKT8oWzAtOVwuXStNKT8oWzAtOVwuXStTKT8vKTtpZighUSl0aHJvdyBuZXcgRXJyb3IoInwiK1MrInwgaXMgbm90IGFuIElTTzg2MDEgRHVyYXRp'@;
put 'b24iKTtmb3IodmFyIG9lPTE7b2UhPVEubGVuZ3RoOysrb2UpaWYoUVtvZV0pe3N3aXRjaChrPTEsb2U+MyYmKEc9ITApLFFbb2VdLnNsaWNlKFFbb2VdLmxlbmd0aC0xKSl7Y2FzZSJZIjp0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIElTTyBEdXJhdGlvbiBGaWVsZDogIitRW29lXS5z'@;
put 'bGljZShRW29lXS5sZW5ndGgtMSkpO2Nhc2UiRCI6ayo9MjQ7Y2FzZSJIIjprKj02MDtjYXNlIk0iOmlmKCFHKXRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgSVNPIER1cmF0aW9uIEZpZWxkOiBNIik7ayo9NjB9Uis9aypwYXJzZUludChRW29lXSwxMCl9cmV0dXJuIFJ9eXQoKTt2YXIg'@;
put 'JGU9bmV3IERhdGUoIjIwMTctMDItMTlUMTk6MDY6MDkuMDAwWiIpO2lzTmFOKCRlLmdldEZ1bGxZZWFyKCkpJiYoJGU9bmV3IERhdGUoIjIvMTkvMTciKSk7dmFyIHR0PTIwMTc9PSRlLmdldEZ1bGxZZWFyKCk7ZnVuY3Rpb24gSGUoUyxSKXt2YXIgaz1uZXcgRGF0ZShTKTtpZih0dClyZXR1'@;
put 'cm4gUj4wP2suc2V0VGltZShrLmdldFRpbWUoKSs2MCprLmdldFRpbWV6b25lT2Zmc2V0KCkqMWUzKTpSPDAmJmsuc2V0VGltZShrLmdldFRpbWUoKS02MCprLmdldFRpbWV6b25lT2Zmc2V0KCkqMWUzKSxrO2lmKFMgaW5zdGFuY2VvZiBEYXRlKXJldHVybiBTO2lmKDE5MTc9PSRlLmdldEZ1'@;
put 'bGxZZWFyKCkmJiFpc05hTihrLmdldEZ1bGxZZWFyKCkpKXt2YXIgRz1rLmdldEZ1bGxZZWFyKCk7cmV0dXJuIFMuaW5kZXhPZigiIitHKT4tMXx8ay5zZXRGdWxsWWVhcihrLmdldEZ1bGxZZWFyKCkrMTAwKSxrfXZhciBRPVMubWF0Y2goL1xkKy9nKXx8WyIyMDE3IiwiMiIsIjE5IiwiMCIs'@;
put 'IjAiLCIwIl0sb2U9bmV3IERhdGUoK1FbMF0sK1FbMV0tMSwrUVsyXSwrUVszXXx8MCwrUVs0XXx8MCwrUVs1XXx8MCk7cmV0dXJuIFMuaW5kZXhPZigiWiIpPi0xJiYob2U9bmV3IERhdGUob2UuZ2V0VGltZSgpLTYwKm9lLmdldFRpbWV6b25lT2Zmc2V0KCkqMWUzKSksb2V9ZnVuY3Rpb24g'@;
put 'dXQoUyl7Zm9yKHZhciBSPSIiLGs9MDtrIT1TLmxlbmd0aDsrK2spUis9U3RyaW5nLmZyb21DaGFyQ29kZShTW2tdKTtyZXR1cm4gUn1mdW5jdGlvbiBxdChTKXtpZigib2JqZWN0IiE9dHlwZW9mIFN8fG51bGw9PVMpcmV0dXJuIFM7aWYoUyBpbnN0YW5jZW9mIERhdGUpcmV0dXJuIG5ldyBE'@;
put 'YXRlKFMuZ2V0VGltZSgpKTtpZihBcnJheS5pc0FycmF5KFMpKXJldHVybiBmdW5jdGlvbiBSdChTKXtmb3IodmFyIFI9W10saz0wO2s8Uy5sZW5ndGg7KytrKXt2YXIgRz1TW2tdOyJvYmplY3QiPT10eXBlb2YgRz9SW2tdPXF0KEcpOm51bGwhPUcmJihSW2tdPUcpfXJldHVybiBSfShTKTt2'@;
put 'YXIgUj17fTtmb3IodmFyIGsgaW4gUylPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoUyxrKSYmKFJba109cXQoU1trXSkpO3JldHVybiBSfWZ1bmN0aW9uIFB0KFMsUil7aWYoIm9iamVjdCIhPXR5cGVvZiBSfHxudWxsPT1SKXJldHVybiBTO2Zvcih2YXIgayBpbiBSKU9i'@;
put 'amVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChSLGspJiYoU1trXT1xdChSW2tdKSk7cmV0dXJuIFN9ZnVuY3Rpb24gY2koUyxSKXtmb3IodmFyIGs9IiI7ay5sZW5ndGg8Ujspays9UztyZXR1cm4ga31mdW5jdGlvbiBRdChTKXt2YXIgUj1OdW1iZXIoUyk7aWYoIWlzTmFOKFIp'@;
put 'KXJldHVybiBpc0Zpbml0ZShSKT9SOk5hTjtpZighL1xkLy50ZXN0KFMpKXJldHVybiBSO3ZhciBrPTEsRz1TLnJlcGxhY2UoLyhbXGRdKSwoW1xkXSkvZywiJDEkMiIpLnJlcGxhY2UoL1skXS9nLCIiKS5yZXBsYWNlKC9bJV0vZyxmdW5jdGlvbigpe3JldHVybiBrKj0xMDAsIiJ9KTtyZXR1'@;
put 'cm4gaXNOYU4oUj1OdW1iZXIoRykpJiYoRz1HLnJlcGxhY2UoL1soXSguKilbKV0vLGZ1bmN0aW9uKFEsb2Upe3JldHVybiBrPS1rLG9lfSksaXNOYU4oUj1OdW1iZXIoRykpKT9SOlIva31mdW5jdGlvbiBzbihTKXt2YXIgUj1uZXcgRGF0ZShTKSxrPW5ldyBEYXRlKE5hTiksRz1SLmdldFll'@;
put 'YXIoKSxRPVIuZ2V0TW9udGgoKSxvZT1SLmdldERhdGUoKTtyZXR1cm4gaXNOYU4ob2UpfHxHPDB8fEc+ODA5OT9rOihRPjB8fG9lPjEpJiYxMDEhPUd8fFMudG9Mb3dlckNhc2UoKS5tYXRjaCgvamFufGZlYnxtYXJ8YXByfG1heXxqdW58anVsfGF1Z3xzZXB8b2N0fG5vdnxkZWMvKT9SOlMu'@;
put 'bWF0Y2goL1teLTAtOTosXC9cXF0vKT9rOlJ9ZnVuY3Rpb24gUmkoUyxSKXtpZihSJiZSLnJhdylyZXR1cm57dDoicyIsdjpTfTtpZighUylyZXR1cm57dDoieiJ9O2lmKCJUUlVFIj09PVMpcmV0dXJue3Q6ImIiLHY6ITB9O2lmKCJGQUxTRSI9PT1TKXJldHVybnt0OiJiIix2OiExfTt2YXIg'@;
put 'az0iIixHPU51bWJlcihTKTtpZihpc0Zpbml0ZShHKSlyZXR1cm57dDoibiIsdjpHfTtpZihpc05hTihHKSYmL1xkLy50ZXN0KFMpKXt2YXIgUT0xLG9lPVMucmVwbGFjZSgvKFtcZF0pLChbXGRdKS9nLGZ1bmN0aW9uKGV0LGN0LEV0KXtyZXR1cm4ga3x8KGs9IiMsIyMwIiksY3QrRXR9KS5y'@;
put 'ZXBsYWNlKC9bJF0vZywiIikucmVwbGFjZSgvXC5cZCovLGZ1bmN0aW9uKGV0KXtrfHwoaz0iMCIpLGsrPSIuIjtmb3IodmFyIGN0PTI7Y3Q8PWV0Lmxlbmd0aDsrK2N0KWsrPSIwIjtyZXR1cm4gZXR9KS5yZXBsYWNlKC9bJV0vZyxmdW5jdGlvbigpe3JldHVybiBRKj0xMDAsa3x8KGs9IjAi'@;
put 'KSxrKz0iJSIsIiJ9KTtpZighaXNOYU4oRz1OdW1iZXIob2UpKSlyZXR1cm57dDoibiIsdjpHL1EsejprfTtpZihvZT1vZS5yZXBsYWNlKC9bKF0oLiopWyldLyxmdW5jdGlvbihldCxjdCl7cmV0dXJuIFE9LVEsY3R9KSwhaXNOYU4oRz1OdW1iZXIob2UpKSlyZXR1cm57dDoibiIsdjpHL1Es'@;
put 'ejooa3x8IjAiKSsiXyk7KCIrKGt8fCIwIikrIik7QCJ9fWU6aWYoIVJ8fCFSLnJhd0RhdGVzKXt2YXIgZ2U9UiYmUi5jZWxsRGF0ZXMscGU9bmV3IERhdGUoUyksUGU9cGUuZ2V0WWVhcigpLE5lPXBlLmdldE1vbnRoKCksWWU9cGUuZ2V0RGF0ZSgpO2lmKGlzTmFOKFllKXx8UGU8MHx8UGU+'@;
put 'ODA5OSlicmVhayBlO2lmKChOZT4wfHxZZT4xKSYmMTAxIT1QZSlyZXR1cm57dDpnZT8iZCI6Im4iLHY6Z2U/cGU6UWUocGUpLHo6Ui5kYXRlTkZ8fEEuX3RhYmxlWzE0XX07aWYoUy50b0xvd2VyQ2FzZSgpLm1hdGNoKC9qYW58ZmVifG1hcnxhcHJ8bWF5fGp1bnxqdWx8YXVnfHNlcHxvY3R8'@;
put 'bm92fGRlYy8pKXJldHVybnt0OmdlPyJkIjoibiIsdjpnZT9wZTpRZShwZSksejpSLmRhdGVORnx8QS5fdGFibGVbMTRdfTtpZihTLm1hdGNoKC9bXi0wLTk6LFwvXFxdLykpYnJlYWsgZTtyZXR1cm4gcGV9cmV0dXJue3Q6InMiLHY6U319dmFyIHp0LGhuPTU9PSJhYmFjYWJhIi5zcGxpdCgv'@;
put 'KDo/YikvaSkubGVuZ3RoO2Z1bmN0aW9uIFd0KFMpe3JldHVybiBudWxsIT1TJiYhU31mdW5jdGlvbiBBdChTKXtyZXR1cm4gUy5jaGFyQXQoMCkudG9VcHBlckNhc2UoKStTLnNsaWNlKDEpfWZ1bmN0aW9uIFJuKFMpe3JldHVybiBTP1MuZGF0YT9KKFMuZGF0YSk6Uy5hc05vZGVCdWZmZXIm'@;
put 'JlRlP0ooUy5hc05vZGVCdWZmZXIoKS50b1N0cmluZygiYmluYXJ5IikpOlMuYXNCaW5hcnk/SihTLmFzQmluYXJ5KCkpOlMuX2RhdGEmJlMuX2RhdGEuZ2V0Q29udGVudD9KKHV0KEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKFMuX2RhdGEuZ2V0Q29udGVudCgpLDApKSk6Uy5jb250ZW50'@;
put 'JiZTLnR5cGU/Sih1dChTLmNvbnRlbnQpKTpudWxsOm51bGx9ZnVuY3Rpb24gc3QoUyl7aWYoIVMpcmV0dXJuIG51bGw7aWYoUy5kYXRhKXJldHVybiBZKFMuZGF0YSk7aWYoUy5hc05vZGVCdWZmZXImJlRlKXJldHVybiBTLmFzTm9kZUJ1ZmZlcigpO2lmKFMuX2RhdGEmJlMuX2RhdGEuZ2V0'@;
put 'Q29udGVudCl7dmFyIFI9Uy5fZGF0YS5nZXRDb250ZW50KCk7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBSP1koUik6QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoUil9cmV0dXJuIFMuY29udGVudCYmUy50eXBlP1MuY29udGVudDpudWxsfWZ1bmN0aW9uIHJpKFMsUil7Zm9yKHZhciBrPVMu'@;
put 'RnVsbFBhdGhzfHxPZShTLmZpbGVzKSxHPVIudG9Mb3dlckNhc2UoKSxRPUcucmVwbGFjZSgvXC8vZywiXFwiKSxvZT0wO29lPGsubGVuZ3RoOysrb2Upe3ZhciBnZT1rW29lXS50b0xvd2VyQ2FzZSgpO2lmKEc9PWdlfHxRPT1nZSlyZXR1cm4gUy5maWxlc1trW29lXV19cmV0dXJuIG51bGx9'@;
put 'ZnVuY3Rpb24gV2UoUyxSKXt2YXIgaz1yaShTLFIpO2lmKG51bGw9PWspdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgZmluZCBmaWxlICIrUisiIGluIHppcCIpO3JldHVybiBrfWZ1bmN0aW9uIFR0KFMsUixrKXtpZighaylyZXR1cm4gZnVuY3Rpb24gVXQoUyl7cmV0dXJuIFMmJiIuYmluIj09'@;
put 'PVMubmFtZS5zbGljZSgtNCk/c3QoUyk6Um4oUyl9KFdlKFMsUikpO2lmKCFSKXJldHVybiBudWxsO3RyeXtyZXR1cm4gVHQoUyxSKX1jYXRjaHtyZXR1cm4gbnVsbH19ZnVuY3Rpb24gbnIoUyxSLGspe2lmKCFrKXJldHVybiBSbihXZShTLFIpKTtpZighUilyZXR1cm4gbnVsbDt0cnl7cmV0'@;
put 'dXJuIG5yKFMsUil9Y2F0Y2h7cmV0dXJuIG51bGx9fWZ1bmN0aW9uIGh0KFMsUixrKXtpZighaylyZXR1cm4gc3QoV2UoUyxSKSk7aWYoIVIpcmV0dXJuIG51bGw7dHJ5e3JldHVybiBodChTLFIpfWNhdGNoe3JldHVybiBudWxsfX1mdW5jdGlvbiBqbihTLFIsayl7Uy5GdWxsUGF0aHM/dmUu'@;
put 'dXRpbHMuY2ZiX2FkZChTLFIsayk6Uy5maWxlKFIsayl9ZnVuY3Rpb24gaGkoKXtyZXR1cm4genQ/bmV3IHp0OnZlLnV0aWxzLmNmYl9uZXcoKX1mdW5jdGlvbiBjbihTLFIpe3ZhciBrO2lmKHp0KXN3aXRjaChSLnR5cGUpe2Nhc2UiYmFzZTY0IjprPW5ldyB6dChTLHtiYXNlNjQ6ITB9KTti'@;
put 'cmVhaztjYXNlImJpbmFyeSI6Y2FzZSJhcnJheSI6az1uZXcgenQoUyx7YmFzZTY0OiExfSk7YnJlYWs7Y2FzZSJidWZmZXIiOms9bmV3IHp0KFMpO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJVbnJlY29nbml6ZWQgdHlwZSAiK1IudHlwZSl9ZWxzZSBzd2l0Y2goUi50eXBlKXtj'@;
put 'YXNlImJhc2U2NCI6az12ZS5yZWFkKFMse3R5cGU6ImJhc2U2NCJ9KTticmVhaztjYXNlImJpbmFyeSI6az12ZS5yZWFkKFMse3R5cGU6ImJpbmFyeSJ9KTticmVhaztjYXNlImJ1ZmZlciI6Y2FzZSJhcnJheSI6az12ZS5yZWFkKFMse3R5cGU6ImJ1ZmZlciJ9KTticmVhaztkZWZhdWx0OnRo'@;
put 'cm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkIHR5cGUgIitSLnR5cGUpfXJldHVybiBrfWZ1bmN0aW9uIGZuKFMsUil7aWYoIi8iPT1TLmNoYXJBdCgwKSlyZXR1cm4gUy5zbGljZSgxKTt2YXIgaz1SLnNwbGl0KCIvIik7Ii8iIT1SLnNsaWNlKC0xKSYmay5wb3AoKTtmb3IodmFyIEc9Uy5z'@;
put 'cGxpdCgiLyIpOzAhPT1HLmxlbmd0aDspe3ZhciBRPUcuc2hpZnQoKTsiLi4iPT09UT9rLnBvcCgpOiIuIiE9PVEmJmsucHVzaChRKX1yZXR1cm4gay5qb2luKCIvIil9dHlwZW9mIEpTWmlwU3luYzwidSImJih6dD1KU1ppcFN5bmMpLHVlLmV4cG9ydHMmJnR5cGVvZiB6dD4idSImJih6dD15'@;
put 'KDMxNzkpKTt2YXIgSWk9Jzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJ5ZXMiPz5cclxuJyxYdD0vKD86W14iXHM/PlwvXSspXHMqPVxzKigoPzoiKSg/OlteIl0qPykoPzoiKXwoPzonKSg/OlteJ10qPykoPzonKXwoPzpbXiciPlxzXSspKS9nLGVu'@;
put 'PS88W1wvXD9dP1thLXpBLVowLTk6Xy1dKyg/OlxzK1teIlxzPz5cL10rXHMqPVxzKig/OiJbXiJdKiJ8J1teJ10qJ3xbXiciPlxzPV0rKSkqXHM/W1wvXD9dPz4vZztJaS5tYXRjaChlbil8fChlbj0vPFtePl0qPi9nKTt2YXIgdWE9Lzxcdyo6LyxFaT0vPChcLz8pXHcrOi87ZnVuY3Rpb24g'@;
put 'dnIoUyxSLGspe2Zvcih2YXIgRz17fSxRPTAsb2U9MDtRIT09Uy5sZW5ndGgmJjMyIT09KG9lPVMuY2hhckNvZGVBdChRKSkmJjEwIT09b2UmJjEzIT09b2U7KytRKTtpZihSfHwoR1swXT1TLnNsaWNlKDAsUSkpLFE9PT1TLmxlbmd0aClyZXR1cm4gRzt2YXIgZ2U9Uy5tYXRjaChYdCkscGU9'@;
put 'MCx5ZT0iIixQZT0wLE5lPSIiLFllPSIiLGV0PTE7aWYoZ2UpZm9yKFBlPTA7UGUhPWdlLmxlbmd0aDsrK1BlKXtmb3IoWWU9Z2VbUGVdLG9lPTA7b2UhPVllLmxlbmd0aCYmNjEhPT1ZZS5jaGFyQ29kZUF0KG9lKTsrK29lKTtmb3IoTmU9WWUuc2xpY2UoMCxvZSkudHJpbSgpOzMyPT1ZZS5j'@;
put 'aGFyQ29kZUF0KG9lKzEpOykrK29lO2ZvcihldD0zND09KFE9WWUuY2hhckNvZGVBdChvZSsxKSl8fDM5PT1RPzE6MCx5ZT1ZZS5zbGljZShvZSsxK2V0LFllLmxlbmd0aC1ldCkscGU9MDtwZSE9TmUubGVuZ3RoJiY1OCE9PU5lLmNoYXJDb2RlQXQocGUpOysrcGUpO2lmKHBlPT09TmUubGVu'@;
put 'Z3RoKU5lLmluZGV4T2YoIl8iKT4wJiYoTmU9TmUuc2xpY2UoMCxOZS5pbmRleE9mKCJfIikpKSxHW05lXT15ZSxrfHwoR1tOZS50b0xvd2VyQ2FzZSgpXT15ZSk7ZWxzZXt2YXIgY3Q9KDU9PT1wZSYmInhtbG5zIj09PU5lLnNsaWNlKDAsNSk/InhtbG5zIjoiIikrTmUuc2xpY2UocGUrMSk7'@;
put 'aWYoR1tjdF0mJiJleHQiPT1OZS5zbGljZShwZS0zLHBlKSljb250aW51ZTtHW2N0XT15ZSxrfHwoR1tjdC50b0xvd2VyQ2FzZSgpXT15ZSl9fXJldHVybiBHfWZ1bmN0aW9uIFduKFMpe3JldHVybiBTLnJlcGxhY2UoRWksIjwkMSIpfXZhciAkaT17IiZxdW90OyI6JyInLCImYXBvczsiOiIn'@;
put 'IiwiJmd0OyI6Ij4iLCImbHQ7IjoiPCIsIiZhbXA7IjoiJiJ9LGVpPVZlKCRpKSxRcj1mdW5jdGlvbigpe3ZhciBTPS8mKD86cXVvdHxhcG9zfGd0fGx0fGFtcHwjeD8oW1xkYS1mQS1GXSspKTsvZ2ksUj0vX3goW1xkYS1mQS1GXXs0fSlfL2dpO3JldHVybiBmdW5jdGlvbiBrKEcpe3ZhciBR'@;
put 'PUcrIiIsb2U9US5pbmRleE9mKCI8IVtDREFUQVsiKTtpZigtMT09b2UpcmV0dXJuIFEucmVwbGFjZShTLGZ1bmN0aW9uKHBlLHllKXtyZXR1cm4gJGlbcGVdfHxTdHJpbmcuZnJvbUNoYXJDb2RlKHBhcnNlSW50KHllLHBlLmluZGV4T2YoIngiKT4tMT8xNjoxMCkpfHxwZX0pLnJlcGxhY2Uo'@;
put 'UixmdW5jdGlvbihwZSx5ZSl7cmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUocGFyc2VJbnQoeWUsMTYpKX0pO3ZhciBnZT1RLmluZGV4T2YoIl1dPiIpO3JldHVybiBrKFEuc2xpY2UoMCxvZSkpK1Euc2xpY2Uob2UrOSxnZSkrayhRLnNsaWNlKGdlKzMpKX19KCksVmk9L1smPD4nIl0vZyxO'@;
put 'aT0vW1x1MDAwMC1cdTAwMDhcdTAwMGItXHUwMDFmXS9nLERhPS9feFswLTlhLWZBLUZdezR9Xy9nO2Z1bmN0aW9uIExyKFMpe3JldHVybihTKyIiKS5yZXBsYWNlKERhLCJfeDAwNUYkJiIpLnJlcGxhY2UoVmksZnVuY3Rpb24oayl7cmV0dXJuIGVpW2tdfSkucmVwbGFjZShOaSxmdW5jdGlv'@;
put 'bihrKXtyZXR1cm4iX3giKygiMDAwIitrLmNoYXJDb2RlQXQoMCkudG9TdHJpbmcoMTYpKS5zbGljZSgtNCkrIl8ifSl9ZnVuY3Rpb24gV2koUyl7cmV0dXJuIExyKFMpLnJlcGxhY2UoL1xuL2csIl94MDAwYV8iKX1mdW5jdGlvbiBwYShTKXtyZXR1cm4gTHIoUykucmVwbGFjZSgvIC9nLCJf'@;
put 'eDAwMjBfIil9dmFyIFFuPS9bXHUwMDAwLVx1MDAxZl0vZztmdW5jdGlvbiBsYShTKXtyZXR1cm4oUysiIikucmVwbGFjZShWaSxmdW5jdGlvbihrKXtyZXR1cm4gZWlba119KS5yZXBsYWNlKC9cbi9nLCI8YnIvPiIpLnJlcGxhY2UoUW4sZnVuY3Rpb24oayl7cmV0dXJuIiYjeCIrKCIwMDAi'@;
put 'K2suY2hhckNvZGVBdCgwKS50b1N0cmluZygxNikpLnNsaWNlKC00KSsiOyJ9KX1mdW5jdGlvbiB5YShTKXtyZXR1cm4oUysiIikucmVwbGFjZShWaSxmdW5jdGlvbihrKXtyZXR1cm4gZWlba119KS5yZXBsYWNlKFFuLGZ1bmN0aW9uKGspe3JldHVybiImI3giK2suY2hhckNvZGVBdCgwKS50'@;
put 'b1N0cmluZygxNikudG9VcHBlckNhc2UoKSsiOyJ9KX12YXIgTGE9ZnVuY3Rpb24oKXt2YXIgUz0vJiMoXGQrKTsvZztmdW5jdGlvbiBSKGssRyl7cmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUocGFyc2VJbnQoRywxMCkpfXJldHVybiBmdW5jdGlvbihHKXtyZXR1cm4gRy5yZXBsYWNlKFMs'@;
put 'Uil9fSgpLEZhPWZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKFIpe3JldHVybiBSLnJlcGxhY2UoLyhcclxufFtcclxuXSkvZywiJiMxMDsiKX19KCk7ZnVuY3Rpb24gdGkoUyl7c3dpdGNoKFMpe2Nhc2UgMTpjYXNlITA6Y2FzZSIxIjpjYXNlInRydWUiOmNhc2UiVFJVRSI6cmV0dXJuITA7'@;
put 'ZGVmYXVsdDpyZXR1cm4hMX19dmFyIGdvPWZ1bmN0aW9uKFIpe2Zvcih2YXIgaz0iIixHPTAsUT0wLG9lPTAsZ2U9MCxwZT0wLHllPTA7RzxSLmxlbmd0aDspKFE9Ui5jaGFyQ29kZUF0KEcrKykpPDEyOD9rKz1TdHJpbmcuZnJvbUNoYXJDb2RlKFEpOihvZT1SLmNoYXJDb2RlQXQoRysrKSxR'@;
put 'PjE5MSYmUTwyMjQ/KHBlPSgzMSZRKTw8NixwZXw9NjMmb2Usays9U3RyaW5nLmZyb21DaGFyQ29kZShwZSkpOihnZT1SLmNoYXJDb2RlQXQoRysrKSxRPDI0MD9rKz1TdHJpbmcuZnJvbUNoYXJDb2RlKCgxNSZRKTw8MTJ8KDYzJm9lKTw8Nnw2MyZnZSk6KHllPSgoNyZRKTw8MTh8KDYzJm9l'@;
put 'KTw8MTJ8KDYzJmdlKTw8Nnw2MyYocGU9Ui5jaGFyQ29kZUF0KEcrKykpKS02NTUzNixrKz1TdHJpbmcuZnJvbUNoYXJDb2RlKDU1Mjk2Kyh5ZT4+PjEwJjEwMjMpKSxrKz1TdHJpbmcuZnJvbUNoYXJDb2RlKDU2MzIwKygxMDIzJnllKSkpKSk7cmV0dXJuIGt9LE5zPWZ1bmN0aW9uKFMpe2Zv'@;
put 'cih2YXIgUj1bXSxrPTAsRz0wLFE9MDtrPFMubGVuZ3RoOylzd2l0Y2goRz1TLmNoYXJDb2RlQXQoaysrKSwhMCl7Y2FzZSBHPDEyODpSLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZShHKSk7YnJlYWs7Y2FzZSBHPDIwNDg6Ui5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoMTkyKyhHPj42KSkp'@;
put 'LFIucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKDEyOCsoNjMmRykpKTticmVhaztjYXNlIEc+PTU1Mjk2JiZHPDU3MzQ0OkctPTU1Mjk2LFE9Uy5jaGFyQ29kZUF0KGsrKyktNTYzMjArKEc8PDEwKSxSLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZSgyNDArKFE+PjE4JjcpKSksUi5wdXNoKFN0'@;
put 'cmluZy5mcm9tQ2hhckNvZGUoMTQ0KyhRPj4xMiY2MykpKSxSLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZSgxMjgrKFE+PjYmNjMpKSksUi5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoMTI4Kyg2MyZRKSkpO2JyZWFrO2RlZmF1bHQ6Ui5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoMjI0KyhH'@;
put 'Pj4xMikpKSxSLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZSgxMjgrKEc+PjYmNjMpKSksUi5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoMTI4Kyg2MyZHKSkpfXJldHVybiBSLmpvaW4oIiIpfTtpZihUZSl7dmFyIGJsPWZ1bmN0aW9uKFIpe3ZhciBHLFEseWUsaz1CdWZmZXIuYWxsb2MoMipS'@;
put 'Lmxlbmd0aCksb2U9MSxnZT0wLHBlPTA7Zm9yKFE9MDtRPFIubGVuZ3RoO1ErPW9lKW9lPTEsKHllPVIuY2hhckNvZGVBdChRKSk8MTI4P0c9eWU6eWU8MjI0PyhHPTY0KigzMSZ5ZSkrKDYzJlIuY2hhckNvZGVBdChRKzEpKSxvZT0yKTp5ZTwyNDA/KEc9NDA5NiooMTUmeWUpKzY0Kig2MyZS'@;
put 'LmNoYXJDb2RlQXQoUSsxKSkrKDYzJlIuY2hhckNvZGVBdChRKzIpKSxvZT0zKToob2U9NCxHPTI2MjE0NCooNyZ5ZSkrNDA5NiooNjMmUi5jaGFyQ29kZUF0KFErMSkpKzY0Kig2MyZSLmNoYXJDb2RlQXQoUSsyKSkrKDYzJlIuY2hhckNvZGVBdChRKzMpKSxwZT01NTI5NisoKEctPTY1NTM2'@;
put 'KT4+PjEwJjEwMjMpLEc9NTYzMjArKDEwMjMmRykpLDAhPT1wZSYmKGtbZ2UrK109MjU1JnBlLGtbZ2UrK109cGU+Pj44LHBlPTApLGtbZ2UrK109RyUyNTYsa1tnZSsrXT1HPj4+ODtyZXR1cm4gay5zbGljZSgwLGdlKS50b1N0cmluZygidWNzMiIpfSxwdT0iZm9vIGJhciBiYXpceGUyXHg5'@;
put 'OFx4ODNceGYwXHg5Zlx4OGRceGEzIjtnbyhwdSk9PWJsKHB1KSYmKGdvPWJsKTt2YXIgTGM9ZnVuY3Rpb24oUil7cmV0dXJuIFNlKFIsImJpbmFyeSIpLnRvU3RyaW5nKCJ1dGY4Iil9O2dvKHB1KT09TGMocHUpJiYoZ289TGMpLE5zPWZ1bmN0aW9uKFMpe3JldHVybiBTZShTLCJ1dGY4Iiku'@;
put 'dG9TdHJpbmcoImJpbmFyeSIpfX12YXIgUyxEMD1mdW5jdGlvbigpe3ZhciBTPXt9O3JldHVybiBmdW5jdGlvbihrLEcpe3ZhciBRPWsrInwiKyhHfHwiIik7cmV0dXJuIFNbUV0/U1tRXTpTW1FdPW5ldyBSZWdFeHAoIjwoPzpcXHcrOik/IitrKycoPzogeG1sOnNwYWNlPSJwcmVzZXJ2ZSIp'@;
put 'Pyg/OltePl0qKT4oW1xcc1xcU10qPyk8Lyg/Olxcdys6KT8nK2srIj4iLEd8fCIiKX19KCksaXI9KFM9W1sibmJzcCIsIiAiXSxbIm1pZGRvdCIsIlx4YjciXSxbInF1b3QiLCciJ10sWyJhcG9zIiwiJyJdLFsiZ3QiLCI+Il0sWyJsdCIsIjwiXSxbImFtcCIsIiYiXV0ubWFwKGZ1bmN0aW9u'@;
put 'KFIpe3JldHVybltuZXcgUmVnRXhwKCImIitSWzBdKyI7IiwiaWciKSxSWzFdXX0pLGZ1bmN0aW9uKGspe2Zvcih2YXIgRz1rLnJlcGxhY2UoL15bXHRcblxyIF0rLywiIikucmVwbGFjZSgvW1x0XG5cciBdKyQvLCIiKS5yZXBsYWNlKC9bXHRcblxyIF0rL2csIiAiKS5yZXBsYWNlKC88XHMq'@;
put 'W2JCXVtyUl1ccypcLz8+L2csIlxuIikucmVwbGFjZSgvPFtePl0qPi9nLCIiKSxRPTA7UTxTLmxlbmd0aDsrK1EpRz1HLnJlcGxhY2UoU1tRXVswXSxTW1FdWzFdKTtyZXR1cm4gR30pLHhhPWZ1bmN0aW9uKCl7dmFyIFM9e307cmV0dXJuIGZ1bmN0aW9uKGspe3JldHVybiB2b2lkIDAhPT1T'@;
put 'W2tdP1Nba106U1trXT1uZXcgUmVnRXhwKCI8KD86dnQ6KT8iK2srIj4oW1xcc1xcU10qPyk8Lyg/OnZ0Oik/IitrKyI+IiwiZyIpfX0oKSx1aT0vPFwvPyg/OnZ0Oik/dmFyaWFudD4vZyxWdD0vPCg/OnZ0OikoW14+XSopPihbXHNcU10qKTwvO2Z1bmN0aW9uIEpyKFMsUil7dmFyIGs9dnIo'@;
put 'UyksRz1TLm1hdGNoKHhhKGsuYmFzZVR5cGUpKXx8W10sUT1bXTtpZihHLmxlbmd0aCE9ay5zaXplKXtpZihSLldURil0aHJvdyBuZXcgRXJyb3IoInVuZXhwZWN0ZWQgdmVjdG9yIGxlbmd0aCAiK0cubGVuZ3RoKyIgIT0gIitrLnNpemUpO3JldHVybiBRfXJldHVybiBHLmZvckVhY2goZnVu'@;
put 'Y3Rpb24ob2Upe3ZhciBnZT1vZS5yZXBsYWNlKHVpLCIiKS5tYXRjaChWdCk7Z2UmJlEucHVzaCh7djpnbyhnZVsyXSksdDpnZVsxXX0pfSksUX12YXIgYjA9LyheXHN8XHMkfFxuKS87ZnVuY3Rpb24gSGEoUyxSKXtyZXR1cm4iPCIrUysoUi5tYXRjaChiMCk/JyB4bWw6c3BhY2U9InByZXNl'@;
put 'cnZlIic6IiIpKyI+IitSKyI8LyIrUysiPiJ9ZnVuY3Rpb24gTHUoUyl7cmV0dXJuIE9lKFMpLm1hcChmdW5jdGlvbihSKXtyZXR1cm4iICIrUisnPSInK1NbUl0rJyInfSkuam9pbigiIil9ZnVuY3Rpb24gUHIoUyxSLGspe3JldHVybiI8IitTKyhudWxsIT1rP0x1KGspOiIiKSsobnVsbCE9'@;
put 'Uj8oUi5tYXRjaChiMCk/JyB4bWw6c3BhY2U9InByZXNlcnZlIic6IiIpKyI+IitSKyI8LyIrUzoiLyIpKyI+In1mdW5jdGlvbiBjZihTLFIpe3RyeXtyZXR1cm4gUy50b0lTT1N0cmluZygpLnJlcGxhY2UoL1wuXGQqLywiIil9Y2F0Y2goayl7aWYoUil0aHJvdyBrfXJldHVybiIifXZhciAk'@;
put 'aCxLaCxZaT17ZGM6Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIixkY3Rlcm1zOiJodHRwOi8vcHVybC5vcmcvZGMvdGVybXMvIixkY21pdHlwZToiaHR0cDovL3B1cmwub3JnL2RjL2RjbWl0eXBlLyIsbXg6Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vb2ZmaWNlL21h'@;
put 'Yy9leGNlbC8yMDA4L21haW4iLHI6Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L3JlbGF0aW9uc2hpcHMiLHNqczoiaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL3BhY2thZ2UvMjAwNi9zaGVldGpzL2NvcmUtcHJvcGVydGll'@;
put 'cyIsdnQ6Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L2RvY1Byb3BzVlR5cGVzIix4c2k6Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIix4c2Q6Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIixt'@;
put 'YWluOlsiaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL3NwcmVhZHNoZWV0bWwvMjAwNi9tYWluIiwiaHR0cDovL3B1cmwub2NsYy5vcmcvb294bWwvc3ByZWFkc2hlZXRtbC9tYWluIiwiaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9vZmZpY2UvZXhjZWwvMjAwNi9tYWlu'@;
put 'IiwiaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9vZmZpY2UvZXhjZWwvMjAwNi8yIl19LHlsPXtvOiJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOm9mZmljZTpvZmZpY2UiLHg6InVybjpzY2hlbWFzLW1pY3Jvc29mdC1jb206b2ZmaWNlOmV4Y2VsIixzczoidXJuOnNjaGVtYXMtbWlj'@;
put 'cm9zb2Z0LWNvbTpvZmZpY2U6c3ByZWFkc2hlZXQiLGR0OiJ1dWlkOkMyRjQxMDEwLTY1QjMtMTFkMS1BMjlGLTAwQUEwMEMxNDg4MiIsbXY6Imh0dHA6Ly9tYWNWbWxTY2hlbWFVcmkiLHY6InVybjpzY2hlbWFzLW1pY3Jvc29mdC1jb206dm1sIixodG1sOiJodHRwOi8vd3d3LnczLm9yZy9U'@;
put 'Ui9SRUMtaHRtbDQwIn0seTA9ZnVuY3Rpb24oUyl7Zm9yKHZhciBSPVtdLEc9MDtHPFNbMF0ubGVuZ3RoOysrRylpZihTWzBdW0ddKWZvcih2YXIgUT0wLG9lPVNbMF1bR10ubGVuZ3RoO1E8b2U7USs9MTAyNDApUi5wdXNoLmFwcGx5KFIsU1swXVtHXS5zbGljZShRLFErMTAyNDApKTtyZXR1'@;
put 'cm4gUn0scjU9eTAsT2w9ZnVuY3Rpb24oUyxSLGspe2Zvcih2YXIgRz1bXSxRPVI7UTxrO1ErPTIpRy5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoZW8oUyxRKSkpO3JldHVybiBHLmpvaW4oIiIpLnJlcGxhY2UoRSwiIil9LHVmPU9sLHNkPWZ1bmN0aW9uKFMsUixrKXtmb3IodmFyIEc9W10s'@;
put 'UT1SO1E8UitrOysrUSlHLnB1c2goKCIwIitTW1FdLnRvU3RyaW5nKDE2KSkuc2xpY2UoLTIpKTtyZXR1cm4gRy5qb2luKCIiKX0sZGY9c2QsazE9ZnVuY3Rpb24oUyxSLGspe2Zvcih2YXIgRz1bXSxRPVI7UTxrO1ErKylHLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZShQbyhTLFEpKSk7cmV0'@;
put 'dXJuIEcuam9pbigiIil9LGhmPWsxLGVoPWZ1bmN0aW9uKFMsUil7dmFyIGs9em8oUyxSKTtyZXR1cm4gaz4wP2sxKFMsUis0LFIrNCtrLTEpOiIifSxmZj1laCxHaD1mdW5jdGlvbihTLFIpe3ZhciBrPXpvKFMsUik7cmV0dXJuIGs+MD9rMShTLFIrNCxSKzQray0xKToiIn0sT2M9R2gsTmE9'@;
put 'ZnVuY3Rpb24oUyxSKXt2YXIgaz0yKnpvKFMsUik7cmV0dXJuIGs+MD9rMShTLFIrNCxSKzQray0xKToiIn0sRDM9TmE7JGg9S2g9ZnVuY3Rpb24oUixrKXt2YXIgRz16byhSLGspO3JldHVybiBHPjA/T2woUixrKzQsays0K0cpOiIifTt2YXIgYW4sdmkscWg9ZnVuY3Rpb24oUyxSKXt2YXIg'@;
put 'az16byhTLFIpO3JldHVybiBrPjA/azEoUyxSKzQsUis0K2spOiIifSxBbj1xaDthbj12aT1mdW5jdGlvbihTLFIpe3JldHVybiBmdW5jdGlvbiBRYyhTLFIpe2Zvcih2YXIgaz0xLTIqKFNbUis3XT4+PjcpLEc9KCgxMjcmU1tSKzddKTw8NCkrKFNbUis2XT4+PjQmMTUpLFE9MTUmU1tSKzZd'@;
put 'LG9lPTU7b2U+PTA7LS1vZSlRPTI1NipRK1NbUitvZV07cmV0dXJuIDIwNDc9PUc/MD09UT9rKigxLzApOk5hTjooMD09Rz9HPS0xMDIyOihHLT0xMDIzLFErPU1hdGgucG93KDIsNTIpKSxrKk1hdGgucG93KDIsRy01MikqUSl9KFMsUil9O3ZhciBBcj1mdW5jdGlvbihSKXtyZXR1cm4gQXJy'@;
put 'YXkuaXNBcnJheShSKX07VGUmJihPbD1mdW5jdGlvbihTLFIsayl7cmV0dXJuIEJ1ZmZlci5pc0J1ZmZlcihTKT9TLnRvU3RyaW5nKCJ1dGYxNmxlIixSLGspLnJlcGxhY2UoRSwiIik6dWYoUyxSLGspfSxzZD1mdW5jdGlvbihTLFIsayl7cmV0dXJuIEJ1ZmZlci5pc0J1ZmZlcihTKT9TLnRv'@;
put 'U3RyaW5nKCJoZXgiLFIsUitrKTpkZihTLFIsayl9LGVoPWZ1bmN0aW9uKFIsayl7aWYoIUJ1ZmZlci5pc0J1ZmZlcihSKSlyZXR1cm4gZmYoUixrKTt2YXIgRz1SLnJlYWRVSW50MzJMRShrKTtyZXR1cm4gRz4wP1IudG9TdHJpbmcoInV0ZjgiLGsrNCxrKzQrRy0xKToiIn0sR2g9ZnVuY3Rp'@;
put 'b24oUixrKXtpZighQnVmZmVyLmlzQnVmZmVyKFIpKXJldHVybiBPYyhSLGspO3ZhciBHPVIucmVhZFVJbnQzMkxFKGspO3JldHVybiBHPjA/Ui50b1N0cmluZygidXRmOCIsays0LGsrNCtHLTEpOiIifSxOYT1mdW5jdGlvbihSLGspe2lmKCFCdWZmZXIuaXNCdWZmZXIoUikpcmV0dXJuIEQz'@;
put 'KFIsayk7dmFyIEc9MipSLnJlYWRVSW50MzJMRShrKTtyZXR1cm4gUi50b1N0cmluZygidXRmMTZsZSIsays0LGsrNCtHLTEpfSwkaD1mdW5jdGlvbihSLGspe2lmKCFCdWZmZXIuaXNCdWZmZXIoUikpcmV0dXJuIEtoKFIsayk7dmFyIEc9Ui5yZWFkVUludDMyTEUoayk7cmV0dXJuIFIudG9T'@;
put 'dHJpbmcoInV0ZjE2bGUiLGsrNCxrKzQrRyl9LHFoPWZ1bmN0aW9uKFIsayl7aWYoIUJ1ZmZlci5pc0J1ZmZlcihSKSlyZXR1cm4gQW4oUixrKTt2YXIgRz1SLnJlYWRVSW50MzJMRShrKTtyZXR1cm4gUi50b1N0cmluZygidXRmOCIsays0LGsrNCtHKX0sazE9ZnVuY3Rpb24oUixrLEcpe3Jl'@;
put 'dHVybiBCdWZmZXIuaXNCdWZmZXIoUik/Ui50b1N0cmluZygidXRmOCIsayxHKTpoZihSLGssRyl9LHkwPWZ1bmN0aW9uKFMpe3JldHVybiBTWzBdLmxlbmd0aD4wJiZCdWZmZXIuaXNCdWZmZXIoU1swXVswXSk/QnVmZmVyLmNvbmNhdChTWzBdKTpyNShTKX0saj1mdW5jdGlvbihTKXtyZXR1'@;
put 'cm4gQnVmZmVyLmlzQnVmZmVyKFNbMF0pP0J1ZmZlci5jb25jYXQoUyk6W10uY29uY2F0LmFwcGx5KFtdLFMpfSxhbj1mdW5jdGlvbihSLGspe3JldHVybiBCdWZmZXIuaXNCdWZmZXIoUik/Ui5yZWFkRG91YmxlTEUoayk6dmkoUixrKX0sQXI9ZnVuY3Rpb24oUil7cmV0dXJuIEJ1ZmZlci5p'@;
put 'c0J1ZmZlcihSKXx8QXJyYXkuaXNBcnJheShSKX0pLHR5cGVvZiBjcHRhYmxlPCJ1IiYmKE9sPWZ1bmN0aW9uKFMsUixrKXtyZXR1cm4gY3B0YWJsZS51dGlscy5kZWNvZGUoMTIwMCxTLnNsaWNlKFIsaykpLnJlcGxhY2UoRSwiIil9LGsxPWZ1bmN0aW9uKFMsUixrKXtyZXR1cm4gY3B0YWJs'@;
put 'ZS51dGlscy5kZWNvZGUoNjUwMDEsUy5zbGljZShSLGspKX0sZWg9ZnVuY3Rpb24oUyxSKXt2YXIgaz16byhTLFIpO3JldHVybiBrPjA/Y3B0YWJsZS51dGlscy5kZWNvZGUoRixTLnNsaWNlKFIrNCxSKzQray0xKSk6IiJ9LEdoPWZ1bmN0aW9uKFMsUil7dmFyIGs9em8oUyxSKTtyZXR1cm4g'@;
put 'az4wP2NwdGFibGUudXRpbHMuZGVjb2RlKFAsUy5zbGljZShSKzQsUis0K2stMSkpOiIifSxOYT1mdW5jdGlvbihTLFIpe3ZhciBrPTIqem8oUyxSKTtyZXR1cm4gaz4wP2NwdGFibGUudXRpbHMuZGVjb2RlKDEyMDAsUy5zbGljZShSKzQsUis0K2stMSkpOiIifSwkaD1mdW5jdGlvbihTLFIp'@;
put 'e3ZhciBrPXpvKFMsUik7cmV0dXJuIGs+MD9jcHRhYmxlLnV0aWxzLmRlY29kZSgxMjAwLFMuc2xpY2UoUis0LFIrNCtrKSk6IiJ9LHFoPWZ1bmN0aW9uKFMsUil7dmFyIGs9em8oUyxSKTtyZXR1cm4gaz4wP2NwdGFibGUudXRpbHMuZGVjb2RlKDY1MDAxLFMuc2xpY2UoUis0LFIrNCtrKSk6'@;
put 'IiJ9KTt2YXIgUG89ZnVuY3Rpb24oUyxSKXtyZXR1cm4gU1tSXX0sZW89ZnVuY3Rpb24oUyxSKXtyZXR1cm4gMjU2KlNbUisxXStTW1JdfSxvbD1mdW5jdGlvbihTLFIpe3ZhciBrPTI1NipTW1IrMV0rU1tSXTtyZXR1cm4gazwzMjc2OD9rOi0xKig2NTUzNS1rKzEpfSx6bz1mdW5jdGlvbihT'@;
put 'LFIpe3JldHVybiBTW1IrM10qKDE8PDI0KSsoU1tSKzJdPDwxNikrKFNbUisxXTw8OCkrU1tSXX0sVnM9ZnVuY3Rpb24oUyxSKXtyZXR1cm4gU1tSKzNdPDwyNHxTW1IrMl08PDE2fFNbUisxXTw8OHxTW1JdfSxTcz1mdW5jdGlvbihTLFIpe3JldHVybiBTW1JdPDwyNHxTW1IrMV08PDE2fFNb'@;
put 'UisyXTw8OHxTW1IrM119O2Z1bmN0aW9uIGpsKFMsUil7dmFyIEcsUSxnZSxwZSx5ZSxQZSxrPSIiLG9lPVtdO3N3aXRjaChSKXtjYXNlImRiY3MiOmlmKFBlPXRoaXMubCxUZSYmQnVmZmVyLmlzQnVmZmVyKHRoaXMpKWs9dGhpcy5zbGljZSh0aGlzLmwsdGhpcy5sKzIqUykudG9TdHJpbmco'@;
put 'InV0ZjE2bGUiKTtlbHNlIGZvcih5ZT0wO3llPFM7Kyt5ZSlrKz1TdHJpbmcuZnJvbUNoYXJDb2RlKGVvKHRoaXMsUGUpKSxQZSs9MjtTKj0yO2JyZWFrO2Nhc2UidXRmOCI6az1rMSh0aGlzLHRoaXMubCx0aGlzLmwrUyk7YnJlYWs7Y2FzZSJ1dGYxNmxlIjprPU9sKHRoaXMsdGhpcy5sLHRo'@;
put 'aXMubCsoUyo9MikpO2JyZWFrO2Nhc2Uid3N0ciI6aWYoISh0eXBlb2YgY3B0YWJsZTwidSIpKXJldHVybiBqbC5jYWxsKHRoaXMsUywiZGJjcyIpO2s9Y3B0YWJsZS51dGlscy5kZWNvZGUoUCx0aGlzLnNsaWNlKHRoaXMubCx0aGlzLmwrMipTKSksUyo9MjticmVhaztjYXNlImxwc3RyLWFu'@;
put 'c2kiOms9ZWgodGhpcyx0aGlzLmwpLFM9NCt6byh0aGlzLHRoaXMubCk7YnJlYWs7Y2FzZSJscHN0ci1jcCI6az1HaCh0aGlzLHRoaXMubCksUz00K3pvKHRoaXMsdGhpcy5sKTticmVhaztjYXNlImxwd3N0ciI6az1OYSh0aGlzLHRoaXMubCksUz00KzIqem8odGhpcyx0aGlzLmwpO2JyZWFr'@;
put 'O2Nhc2UibHBwNCI6Uz00K3pvKHRoaXMsdGhpcy5sKSxrPSRoKHRoaXMsdGhpcy5sKSwyJlMmJihTKz0yKTticmVhaztjYXNlIjhscHA0IjpTPTQrem8odGhpcyx0aGlzLmwpLGs9cWgodGhpcyx0aGlzLmwpLDMmUyYmKFMrPTQtKDMmUykpO2JyZWFrO2Nhc2UiY3N0ciI6Zm9yKFM9MCxrPSIi'@;
put 'OzAhPT0oZ2U9UG8odGhpcyx0aGlzLmwrUysrKSk7KW9lLnB1c2gobmUoZ2UpKTtrPW9lLmpvaW4oIiIpO2JyZWFrO2Nhc2UiX3dzdHIiOmZvcihTPTAsaz0iIjswIT09KGdlPWVvKHRoaXMsdGhpcy5sK1MpKTspb2UucHVzaChuZShnZSkpLFMrPTI7Uys9MixrPW9lLmpvaW4oIiIpO2JyZWFr'@;
put 'O2Nhc2UiZGJjcy1jb250Ijpmb3Ioaz0iIixQZT10aGlzLmwseWU9MDt5ZTxTOysreWUpe2lmKHRoaXMubGVucyYmLTEhPT10aGlzLmxlbnMuaW5kZXhPZihQZSkpcmV0dXJuIGdlPVBvKHRoaXMsUGUpLHRoaXMubD1QZSsxLHBlPWpsLmNhbGwodGhpcyxTLXllLGdlPyJkYmNzLWNvbnQiOiJz'@;
put 'YmNzLWNvbnQiKSxvZS5qb2luKCIiKStwZTtvZS5wdXNoKG5lKGVvKHRoaXMsUGUpKSksUGUrPTJ9az1vZS5qb2luKCIiKSxTKj0yO2JyZWFrO2Nhc2UiY3BzdHIiOmlmKHR5cGVvZiBjcHRhYmxlPCJ1Iil7az1jcHRhYmxlLnV0aWxzLmRlY29kZShQLHRoaXMuc2xpY2UodGhpcy5sLHRoaXMu'@;
put 'bCtTKSk7YnJlYWt9Y2FzZSJzYmNzLWNvbnQiOmZvcihrPSIiLFBlPXRoaXMubCx5ZT0wO3llIT1TOysreWUpe2lmKHRoaXMubGVucyYmLTEhPT10aGlzLmxlbnMuaW5kZXhPZihQZSkpcmV0dXJuIGdlPVBvKHRoaXMsUGUpLHRoaXMubD1QZSsxLHBlPWpsLmNhbGwodGhpcyxTLXllLGdlPyJk'@;
put 'YmNzLWNvbnQiOiJzYmNzLWNvbnQiKSxvZS5qb2luKCIiKStwZTtvZS5wdXNoKG5lKFBvKHRoaXMsUGUpKSksUGUrPTF9az1vZS5qb2luKCIiKTticmVhaztkZWZhdWx0OnN3aXRjaChTKXtjYXNlIDE6cmV0dXJuIEc9UG8odGhpcyx0aGlzLmwpLHRoaXMubCsrLEc7Y2FzZSAyOnJldHVybiBH'@;
put 'PSgiaSI9PT1SP29sOmVvKSh0aGlzLHRoaXMubCksdGhpcy5sKz0yLEc7Y2FzZSA0OmNhc2UtNDpyZXR1cm4iaSIhPT1SJiYxMjgmdGhpc1t0aGlzLmwrM10/KFE9em8odGhpcyx0aGlzLmwpLHRoaXMubCs9NCxRKTooRz0oUz4wP1ZzOlNzKSh0aGlzLHRoaXMubCksdGhpcy5sKz00LEcpO2Nh'@;
put 'c2UgODpjYXNlLTg6aWYoImYiPT09UilyZXR1cm4gUT04PT1TP2FuKHRoaXMsdGhpcy5sKTphbihbdGhpc1t0aGlzLmwrN10sdGhpc1t0aGlzLmwrNl0sdGhpc1t0aGlzLmwrNV0sdGhpc1t0aGlzLmwrNF0sdGhpc1t0aGlzLmwrM10sdGhpc1t0aGlzLmwrMl0sdGhpc1t0aGlzLmwrMV0sdGhp'@;
put 'c1t0aGlzLmwrMF1dLDApLHRoaXMubCs9OCxRO1M9ODtjYXNlIDE2Oms9c2QodGhpcyx0aGlzLmwsUyl9fXJldHVybiB0aGlzLmwrPVMsa312YXIgSG89ZnVuY3Rpb24oUyxSLGspe1Nba109MjU1JlIsU1trKzFdPVI+Pj44JjI1NSxTW2srMl09Uj4+PjE2JjI1NSxTW2srM109Uj4+PjI0JjI1'@;
put 'NX0sa289ZnVuY3Rpb24oUyxSLGspe1Nba109MjU1JlIsU1trKzFdPVI+PjgmMjU1LFNbaysyXT1SPj4xNiYyNTUsU1trKzNdPVI+PjI0JjI1NX0sU3Q9ZnVuY3Rpb24oUyxSLGspe1Nba109MjU1JlIsU1trKzFdPVI+Pj44JjI1NX07ZnVuY3Rpb24gQnQoUyxSLGspe3ZhciBHPTAsUT0wO2lm'@;
put 'KCJkYmNzIj09PWspe2ZvcihRPTA7USE9Ui5sZW5ndGg7KytRKVN0KHRoaXMsUi5jaGFyQ29kZUF0KFEpLHRoaXMubCsyKlEpO0c9MipSLmxlbmd0aH1lbHNlIGlmKCJzYmNzIj09PWspe2lmKHR5cGVvZiBjcHRhYmxlPCJ1IiYmODc0PT1GKWZvcihRPTA7USE9Ui5sZW5ndGg7KytRKXt2YXIg'@;
put 'b2U9Y3B0YWJsZS51dGlscy5lbmNvZGUoRixSLmNoYXJBdChRKSk7dGhpc1t0aGlzLmwrUV09b2VbMF19ZWxzZSBmb3IoUj1SLnJlcGxhY2UoL1teXHgwMC1ceDdGXS9nLCJfIiksUT0wO1EhPVIubGVuZ3RoOysrUSl0aGlzW3RoaXMubCtRXT0yNTUmUi5jaGFyQ29kZUF0KFEpO0c9Ui5sZW5n'@;
put 'dGh9ZWxzZXtpZigiaGV4Ij09PWspe2Zvcig7UTxTOysrUSl0aGlzW3RoaXMubCsrXT1wYXJzZUludChSLnNsaWNlKDIqUSwyKlErMiksMTYpfHwwO3JldHVybiB0aGlzfWlmKCJ1dGYxNmxlIj09PWspe3ZhciBnZT1NYXRoLm1pbih0aGlzLmwrUyx0aGlzLmxlbmd0aCk7Zm9yKFE9MDtRPE1h'@;
put 'dGgubWluKFIubGVuZ3RoLFMpOysrUSl7dmFyIHBlPVIuY2hhckNvZGVBdChRKTt0aGlzW3RoaXMubCsrXT0yNTUmcGUsdGhpc1t0aGlzLmwrK109cGU+Pjh9Zm9yKDt0aGlzLmw8Z2U7KXRoaXNbdGhpcy5sKytdPTA7cmV0dXJuIHRoaXN9c3dpdGNoKFMpe2Nhc2UgMTpHPTEsdGhpc1t0aGlz'@;
put 'LmxdPTI1NSZSO2JyZWFrO2Nhc2UgMjpHPTIsdGhpc1t0aGlzLmxdPTI1NSZSLHRoaXNbdGhpcy5sKzFdPTI1NSYoUj4+Pj04KTticmVhaztjYXNlIDM6Rz0zLHRoaXNbdGhpcy5sXT0yNTUmUix0aGlzW3RoaXMubCsxXT0yNTUmKFI+Pj49OCksdGhpc1t0aGlzLmwrMl09MjU1JihSPj4+PTgp'@;
put 'O2JyZWFrO2Nhc2UgNDpHPTQsSG8odGhpcyxSLHRoaXMubCk7YnJlYWs7Y2FzZSA4OmlmKEc9OCwiZiI9PT1rKXshZnVuY3Rpb24gbjUoUyxSLGspe3ZhciBHPShSPDB8fDEvUj09LTEvMD8xOjApPDw3LFE9MCxvZT0wLGdlPUc/LVI6Ujtpc0Zpbml0ZShnZSk/MD09Z2U/UT1vZT0wOihRPU1h'@;
put 'dGguZmxvb3IoTWF0aC5sb2coZ2UpL01hdGguTE4yKSxvZT1nZSpNYXRoLnBvdygyLDUyLVEpLFE8PS0xMDIzJiYoIWlzRmluaXRlKG9lKXx8b2U8TWF0aC5wb3coMiw1MikpP1E9LTEwMjI6KG9lLT1NYXRoLnBvdygyLDUyKSxRKz0xMDIzKSk6KFE9MjA0NyxvZT1pc05hTihSKT8yNjk4NTow'@;
put 'KTtmb3IodmFyIHBlPTA7cGU8PTU7KytwZSxvZS89MjU2KVNbaytwZV09MjU1Jm9lO1Nbays2XT0oMTUmUSk8PDR8MTUmb2UsU1trKzddPVE+PjR8R30odGhpcyxSLHRoaXMubCk7YnJlYWt9Y2FzZSAxNjpicmVhaztjYXNlLTQ6Rz00LGtvKHRoaXMsUix0aGlzLmwpfX1yZXR1cm4gdGhpcy5s'@;
put 'Kz1HLHRoaXN9ZnVuY3Rpb24gX24oUyxSKXt2YXIgaz1zZCh0aGlzLHRoaXMubCxTLmxlbmd0aD4+MSk7aWYoayE9PVMpdGhyb3cgbmV3IEVycm9yKFIrIkV4cGVjdGVkICIrUysiIHNhdyAiK2spO3RoaXMubCs9Uy5sZW5ndGg+PjF9ZnVuY3Rpb24gbW4oUyxSKXtTLmw9UixTLnJlYWRfc2hp'@;
put 'ZnQ9amwsUy5jaGs9X24sUy53cml0ZV9zaGlmdD1CdH1mdW5jdGlvbiBJbihTLFIpe1MubCs9Un1mdW5jdGlvbiBibihTKXt2YXIgUj1WKFMpO3JldHVybiBtbihSLDApLFJ9ZnVuY3Rpb24gdXIoUyxSLGspe2lmKFMpe3ZhciBHLFEsb2U7bW4oUyxTLmx8fDApO2Zvcih2YXIgZ2U9Uy5sZW5n'@;
put 'dGgscGU9MCx5ZT0wO1MubDxnZTspezEyOCYocGU9Uy5yZWFkX3NoaWZ0KDEpKSYmKHBlPSgxMjcmcGUpKygoMTI3JlMucmVhZF9zaGlmdCgxKSk8PDcpKTt2YXIgUGU9TDhbcGVdfHxMOFs2NTUzNV07Zm9yKG9lPTEyNyYoRz1TLnJlYWRfc2hpZnQoMSkpLFE9MTtRPDQmJjEyOCZHOysrUSlv'@;
put 'ZSs9KDEyNyYoRz1TLnJlYWRfc2hpZnQoMSkpKTw8NypRO3llPVMubCtvZTt2YXIgTmU9KFBlLmZ8fEluKShTLG9lLGspO2lmKFMubD15ZSxSKE5lLFBlLm4scGUpKXJldHVybn19fWZ1bmN0aW9uIGJpKCl7dmFyIFM9W10sUj1UZT8yNTY6MjA0OCxrPWZ1bmN0aW9uKFBlKXt2YXIgTmU9Ym4o'@;
put 'UGUpO3JldHVybiBtbihOZSwwKSxOZX0sRz1rKFIpLFE9ZnVuY3Rpb24oKXtHJiYoRy5sZW5ndGg+Ry5sJiYoKEc9Ry5zbGljZSgwLEcubCkpLmw9Ry5sZW5ndGgpLEcubGVuZ3RoPjAmJlMucHVzaChHKSxHPW51bGwpfSxvZT1mdW5jdGlvbihQZSl7cmV0dXJuIEcmJlBlPEcubGVuZ3RoLUcu'@;
put 'bD9HOihRKCksRz1rKE1hdGgubWF4KFBlKzEsUikpKX07cmV0dXJue25leHQ6b2UscHVzaDpmdW5jdGlvbihQZSl7USgpLG51bGw9PShHPVBlKS5sJiYoRy5sPUcubGVuZ3RoKSxvZShSKX0sZW5kOmZ1bmN0aW9uKCl7cmV0dXJuIFEoKSx5MChbU10pfSxfYnVmczpTfX1mdW5jdGlvbiBGcihT'@;
put 'LFIsayxHKXt2YXIgb2UsUT0rSHpbUl07aWYoIWlzTmFOKFEpKXtHfHwoRz1MOFtRXS5wfHwoa3x8W10pLmxlbmd0aHx8MCksb2U9MSsoUT49MTI4PzE6MCkrMSxHPj0xMjgmJisrb2UsRz49MTYzODQmJisrb2UsRz49MjA5NzE1MiYmKytvZTt2YXIgZ2U9Uy5uZXh0KG9lKTtRPD0xMjc/Z2Uu'@;
put 'd3JpdGVfc2hpZnQoMSxRKTooZ2Uud3JpdGVfc2hpZnQoMSwxMjgrKDEyNyZRKSksZ2Uud3JpdGVfc2hpZnQoMSxRPj43KSk7Zm9yKHZhciBwZT0wOzQhPXBlOysrcGUpe2lmKCEoRz49MTI4KSl7Z2Uud3JpdGVfc2hpZnQoMSxHKTticmVha31nZS53cml0ZV9zaGlmdCgxLDEyOCsoMTI3Jkcp'@;
put 'KSxHPj49N31HPjAmJkFyKGspJiZTLnB1c2goayl9fWZ1bmN0aW9uIHRhKFMsUixrKXt2YXIgRz1xdChTKTtpZihSLnM/KEcuY1JlbCYmKEcuYys9Ui5zLmMpLEcuclJlbCYmKEcucis9Ui5zLnIpKTooRy5jUmVsJiYoRy5jKz1SLmMpLEcuclJlbCYmKEcucis9Ui5yKSksIWt8fGsuYmlmZjwx'@;
put 'Mil7Zm9yKDtHLmM+PTI1NjspRy5jLT0yNTY7Zm9yKDtHLnI+PTY1NTM2OylHLnItPTY1NTM2fXJldHVybiBHfWZ1bmN0aW9uIG9hKFMsUixrKXt2YXIgRz1xdChTKTtyZXR1cm4gRy5zPXRhKEcucyxSLnMsayksRy5lPXRhKEcuZSxSLnMsayksR31mdW5jdGlvbiBWYShTLFIpe2lmKFMuY1Jl'@;
put 'bCYmUy5jPDApZm9yKFM9cXQoUyk7Uy5jPDA7KVMuYys9Uj44PzE2Mzg0OjI1NjtpZihTLnJSZWwmJlMucjwwKWZvcihTPXF0KFMpO1MucjwwOylTLnIrPVI+OD8xMDQ4NTc2OlI+NT82NTUzNjoxNjM4NDtpZihTLmNSZWwmJlMuYz49KFI+OD8xNjM4NDoyNTYpKWZvcihTPXF0KFMpO1MuYz49'@;
put 'KFI+OD8xNjM4NDoyNTYpOylTLmMtPVI+OD8xNjM4NDoyNTY7aWYoUy5yUmVsJiZTLnI+PTEwNDg1NzYpZm9yKFM9cXQoUyk7Uy5yPj0xMDQ4NTc2OylTLnItPTEwNDg1NzY7dmFyIGs9cWkoUyk7cmV0dXJuIVMuY1JlbCYmbnVsbCE9Uy5jUmVsJiYoaz1mdW5jdGlvbiBYaChTKXtyZXR1cm4g'@;
put 'Uy5yZXBsYWNlKC9eKFtBLVpdKS8sIiQkJDEiKX0oaykpLCFTLnJSZWwmJm51bGwhPVMuclJlbCYmKGs9ZnVuY3Rpb24gUGMoUyl7cmV0dXJuIFMucmVwbGFjZSgvKFtBLVpdfF4pKFxkKykkLywiJDEkJCQyIil9KGspKSxrfWZ1bmN0aW9uICRvKFMsUil7cmV0dXJuIDAhPVMucy5yfHxTLnMu'@;
put 'clJlbHx8Uy5lLnIhPShSLmJpZmY+PTEyPzEwNDg1NzU6Ui5iaWZmPj04PzY1NTM2OjE2Mzg0KXx8Uy5lLnJSZWw/MCE9Uy5zLmN8fFMucy5jUmVsfHxTLmUuYyE9KFIuYmlmZj49MTI/MTYzODM6MjU1KXx8Uy5lLmNSZWw/VmEoUy5zLFIuYmlmZikrIjoiK1ZhKFMuZSxSLmJpZmYpOihTLnMu'@;
put 'clJlbD8iIjoiJCIpK2ppKFMucy5yKSsiOiIrKFMuZS5yUmVsPyIiOiIkIikramkoUy5lLnIpOihTLnMuY1JlbD8iIjoiJCIpK1RhKFMucy5jKSsiOiIrKFMuZS5jUmVsPyIiOiIkIikrVGEoUy5lLmMpfXZhciBYbD17fTtmdW5jdGlvbiBfbyhTKXtyZXR1cm4gcGFyc2VJbnQoZnVuY3Rpb24g'@;
put 'emwoUyl7cmV0dXJuIFMucmVwbGFjZSgvXCQoXGQrKSQvLCIkMSIpfShTKSwxMCktMX1mdW5jdGlvbiBqaShTKXtyZXR1cm4iIisoUysxKX1mdW5jdGlvbiBDYShTKXtmb3IodmFyIFI9ZnVuY3Rpb24gRzAoUyl7cmV0dXJuIFMucmVwbGFjZSgvXlwkKFtBLVpdKS8sIiQxIil9KFMpLGs9MCxH'@;
put 'PTA7RyE9PVIubGVuZ3RoOysrRylrPTI2KmsrUi5jaGFyQ29kZUF0KEcpLTY0O3JldHVybiBrLTF9ZnVuY3Rpb24gVGEoUyl7aWYoUzwwKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBjb2x1bW4gIitTKTt2YXIgUj0iIjtmb3IoKytTO1M7Uz1NYXRoLmZsb29yKChTLTEpLzI2KSlSPVN0cmlu'@;
put 'Zy5mcm9tQ2hhckNvZGUoKFMtMSklMjYrNjUpK1I7cmV0dXJuIFJ9ZnVuY3Rpb24gTm8oUyl7Zm9yKHZhciBSPTAsaz0wLEc9MDtHPFMubGVuZ3RoOysrRyl7dmFyIFE9Uy5jaGFyQ29kZUF0KEcpO1E+PTQ4JiZRPD01Nz9SPTEwKlIrKFEtNDgpOlE+PTY1JiZRPD05MCYmKGs9MjYqaysoUS02'@;
put 'NCkpfXJldHVybntjOmstMSxyOlItMX19ZnVuY3Rpb24gcWkoUyl7Zm9yKHZhciBSPVMuYysxLGs9IiI7UjtSPShSLTEpLzI2fDApaz1TdHJpbmcuZnJvbUNoYXJDb2RlKChSLTEpJTI2KzY1KStrO3JldHVybiBrKyhTLnIrMSl9ZnVuY3Rpb24gTXMoUyl7dmFyIFI9Uy5pbmRleE9mKCI6Iik7'@;
put 'cmV0dXJuLTE9PVI/e3M6Tm8oUyksZTpObyhTKX06e3M6Tm8oUy5zbGljZSgwLFIpKSxlOk5vKFMuc2xpY2UoUisxKSl9fWZ1bmN0aW9uIHJhKFMsUil7cmV0dXJuIHR5cGVvZiBSPiJ1Inx8Im51bWJlciI9PXR5cGVvZiBSP3JhKFMucyxTLmUpOigic3RyaW5nIiE9dHlwZW9mIFMmJihTPXFp'@;
put 'KFMpKSwic3RyaW5nIiE9dHlwZW9mIFImJihSPXFpKFIpKSxTPT1SP1M6UysiOiIrUil9ZnVuY3Rpb24gb28oUyl7dmFyIFI9SlNPTi5wYXJzZSgneyJzIjp7ImMiOjAsInIiOjB9LCJlIjp7ImMiOjAsInIiOjB9fScpLGs9MCxHPTAsUT0wLG9lPVMubGVuZ3RoO2ZvcihrPTA7RzxvZSYmISgo'@;
put 'UT1TLmNoYXJDb2RlQXQoRyktNjQpPDF8fFE+MjYpOysrRylrPTI2KmsrUTtmb3IoUi5zLmM9LS1rLGs9MDtHPG9lJiYhKChRPVMuY2hhckNvZGVBdChHKS00OCk8MHx8UT45KTsrK0cpaz0xMCprK1E7aWYoUi5zLnI9LS1rLEc9PT1vZXx8NTg9PT1TLmNoYXJDb2RlQXQoKytHKSlyZXR1cm4g'@;
put 'Ui5lLmM9Ui5zLmMsUi5lLnI9Ui5zLnIsUjtmb3Ioaz0wO0chPW9lJiYhKChRPVMuY2hhckNvZGVBdChHKS02NCk8MXx8UT4yNik7KytHKWs9MjYqaytRO2ZvcihSLmUuYz0tLWssaz0wO0chPW9lJiYhKChRPVMuY2hhckNvZGVBdChHKS00OCk8MHx8UT45KTsrK0cpaz0xMCprK1E7cmV0dXJu'@;
put 'IFIuZS5yPS0tayxSfWZ1bmN0aW9uIGE1KFMsUil7dmFyIGs9ImQiPT1TLnQmJlIgaW5zdGFuY2VvZiBEYXRlO2lmKG51bGwhPVMueil0cnl7cmV0dXJuIFMudz1BLmZvcm1hdChTLnosaz9RZShSKTpSKX1jYXRjaHt9dHJ5e3JldHVybiBTLnc9QS5mb3JtYXQoKFMuWEZ8fHt9KS5udW1GbXRJ'@;
put 'ZHx8KGs/MTQ6MCksaz9RZShSKTpSKX1jYXRjaHtyZXR1cm4iIitSfX1mdW5jdGlvbiBfbChTLFIsayl7cmV0dXJuIG51bGw9PVN8fG51bGw9PVMudHx8InoiPT1TLnQ/IiI6dm9pZCAwIT09Uy53P1MudzooImQiPT1TLnQmJiFTLnomJmsmJmsuZGF0ZU5GJiYoUy56PWsuZGF0ZU5GKSwiZSI9'@;
put 'PVMudD9NY1tTLnZdfHxTLnY6YTUoUyxudWxsPT1SP1MudjpSKSl9ZnVuY3Rpb24gdGgoUyxSKXt2YXIgaz1SJiZSLnNoZWV0P1Iuc2hlZXQ6IlNoZWV0MSIsRz17fTtyZXR1cm4gR1trXT1TLHtTaGVldE5hbWVzOltrXSxTaGVldHM6R319ZnVuY3Rpb24gZjQoUyxSLGspe3ZhciBHPWt8fHt9'@;
put 'LFE9Uz9BcnJheS5pc0FycmF5KFMpOkcuZGVuc2U7bnVsbCE9bGUmJm51bGw9PVEmJihRPWxlKTt2YXIgb2U9U3x8KFE/W106e30pLGdlPTAscGU9MDtpZihvZSYmbnVsbCE9Ry5vcmlnaW4pe2lmKCJudW1iZXIiPT10eXBlb2YgRy5vcmlnaW4pZ2U9Ry5vcmlnaW47ZWxzZXt2YXIgeWU9InN0'@;
put 'cmluZyI9PXR5cGVvZiBHLm9yaWdpbj9ObyhHLm9yaWdpbik6Ry5vcmlnaW47Z2U9eWUucixwZT15ZS5jfW9lWyIhcmVmIl18fChvZVsiIXJlZiJdPSJBMTpBMSIpfXZhciBQZT17czp7YzoxZTcscjoxZTd9LGU6e2M6MCxyOjB9fTtpZihvZVsiIXJlZiJdKXt2YXIgTmU9b28ob2VbIiFyZWYi'@;
put 'XSk7UGUucy5jPU5lLnMuYyxQZS5zLnI9TmUucy5yLFBlLmUuYz1NYXRoLm1heChQZS5lLmMsTmUuZS5jKSxQZS5lLnI9TWF0aC5tYXgoUGUuZS5yLE5lLmUuciksLTE9PWdlJiYoUGUuZS5yPWdlPU5lLmUucisxKX1mb3IodmFyIFllPTA7WWUhPVIubGVuZ3RoOysrWWUpaWYoUltZZV0pe2lm'@;
put 'KCFBcnJheS5pc0FycmF5KFJbWWVdKSl0aHJvdyBuZXcgRXJyb3IoImFvYV90b19zaGVldCBleHBlY3RzIGFuIGFycmF5IG9mIGFycmF5cyIpO2Zvcih2YXIgZXQ9MDtldCE9UltZZV0ubGVuZ3RoOysrZXQpaWYoISh0eXBlb2YgUltZZV1bZXRdPiJ1Iikpe3ZhciBjdD17djpSW1llXVtldF19'@;
put 'LEV0PWdlK1llLGF0PXBlK2V0O2lmKFBlLnMucj5FdCYmKFBlLnMucj1FdCksUGUucy5jPmF0JiYoUGUucy5jPWF0KSxQZS5lLnI8RXQmJihQZS5lLnI9RXQpLFBlLmUuYzxhdCYmKFBlLmUuYz1hdCksIVJbWWVdW2V0XXx8Im9iamVjdCIhPXR5cGVvZiBSW1llXVtldF18fEFycmF5LmlzQXJy'@;
put 'YXkoUltZZV1bZXRdKXx8UltZZV1bZXRdaW5zdGFuY2VvZiBEYXRlKWlmKEFycmF5LmlzQXJyYXkoY3QudikmJihjdC5mPVJbWWVdW2V0XVsxXSxjdC52PWN0LnZbMF0pLG51bGw9PT1jdC52KWlmKGN0LmYpY3QudD0ibiI7ZWxzZSBpZihHLm51bGxFcnJvciljdC50PSJlIixjdC52PTA7ZWxz'@;
put 'ZXtpZighRy5zaGVldFN0dWJzKWNvbnRpbnVlO2N0LnQ9InoifWVsc2UibnVtYmVyIj09dHlwZW9mIGN0LnY/Y3QudD0ibiI6ImJvb2xlYW4iPT10eXBlb2YgY3Qudj9jdC50PSJiIjpjdC52IGluc3RhbmNlb2YgRGF0ZT8oY3Quej1HLmRhdGVORnx8QS5fdGFibGVbMTRdLEcuY2VsbERhdGVz'@;
put 'PyhjdC50PSJkIixjdC53PUEuZm9ybWF0KGN0LnosUWUoY3QudikpKTooY3QudD0ibiIsY3Qudj1RZShjdC52KSxjdC53PUEuZm9ybWF0KGN0LnosY3QudikpKTpjdC50PSJzIjtlbHNlIGN0PVJbWWVdW2V0XTtpZihjdCYmY3QuaCl0cnl7Y3QuUj1tZC5odG1sX3RvX3JzKGN0LmgpLGN0LnY9'@;
put 'IiI7Zm9yKHZhciBidD0wO2J0PGN0LlIubGVuZ3RoOysrYnQpY3Qudis9Y3QuUltidF0udnx8IiJ9Y2F0Y2h7fWlmKFEpb2VbRXRdfHwob2VbRXRdPVtdKSxvZVtFdF1bYXRdJiZvZVtFdF1bYXRdLnMmJihjdC5zPW9lW0V0XVthdF0ucyksb2VbRXRdW2F0XSYmb2VbRXRdW2F0XS56JiYoY3Qu'@;
put 'ej1vZVtFdF1bYXRdLnopLG9lW0V0XVthdF09Y3Q7ZWxzZXt2YXIganQ9cWkoe2M6YXQscjpFdH0pO29lW2p0XSYmb2VbanRdLnMmJihjdC5zPW9lW2p0XS5zKSxvZVtqdF0mJm9lW2p0XS56JiYoY3Quej1vZVtqdF0ueiksb2VbanRdPWN0fX19cmV0dXJuIFBlLnMuYzwxZTcmJihvZVsiIXJl'@;
put 'ZiJdPXJhKFBlKSksb2V9ZnVuY3Rpb24gcDQoUyxSKXtyZXR1cm4gZjQobnVsbCxTLFIpfWZ1bmN0aW9uIEswKFMsUil7cmV0dXJuIFJ8fChSPWJuKDQpKSxSLndyaXRlX3NoaWZ0KDQsUyksUn1mdW5jdGlvbiBndShTKXt2YXIgUj1TLnJlYWRfc2hpZnQoNCk7cmV0dXJuIDA9PT1SPyIiOlMu'@;
put 'cmVhZF9zaGlmdChSLCJkYmNzIil9ZnVuY3Rpb24gRmMoUyxSKXt2YXIgaz0hMTtyZXR1cm4gbnVsbD09UiYmKGs9ITAsUj1ibig0KzIqUy5sZW5ndGgpKSxSLndyaXRlX3NoaWZ0KDQsUy5sZW5ndGgpLFMubGVuZ3RoPjAmJlIud3JpdGVfc2hpZnQoMCxTLCJkYmNzIiksaz9SLnNsaWNlKDAs'@;
put 'Ui5sKTpSfWZ1bmN0aW9uIFJ3KFMpe3JldHVybntpY2g6Uy5yZWFkX3NoaWZ0KDIpLGlmbnQ6Uy5yZWFkX3NoaWZ0KDIpfX1mdW5jdGlvbiBzbChTLFIpe3ZhciBrPVMubCxHPVMucmVhZF9zaGlmdCgxKSxRPWd1KFMpLG9lPVtdLGdlPXt0OlEsaDpRfTtpZigxJkcpe2Zvcih2YXIgcGU9Uy5y'@;
put 'ZWFkX3NoaWZ0KDQpLHllPTA7eWUhPXBlOysreWUpb2UucHVzaChSdyhTKSk7Z2Uucj1vZX1lbHNlIGdlLnI9W3tpY2g6MCxpZm50OjB9XTtyZXR1cm4gUy5sPWsrUixnZX0hZnVuY3Rpb24oUyxSKXt2YXIgaztpZih0eXBlb2YgY3J5cHRvQnJvd3NlcmlmeTwidSIpaz1jcnlwdG9Ccm93c2Vy'@;
put 'aWZ5O2Vsc2UgaWYodHlwZW9mIFI8InUiKWs9UjtlbHNlIHRyeXtrPXkoOTE0MjYpfWNhdGNoe2s9bnVsbH1TLnJjND1mdW5jdGlvbihHLFEpe3ZhciBvZT1uZXcgQXJyYXkoMjU2KSxnZT0wLHBlPTAseWU9MCxQZT0wO2ZvcihwZT0wOzI1NiE9cGU7KytwZSlvZVtwZV09cGU7Zm9yKHBlPTA7'@;
put 'MjU2IT1wZTsrK3BlKXllPXllK29lW3BlXStHW3BlJUcubGVuZ3RoXS5jaGFyQ29kZUF0KDApJjI1NSxQZT1vZVtwZV0sb2VbcGVdPW9lW3llXSxvZVt5ZV09UGU7cGU9eWU9MDt2YXIgTmU9VihRLmxlbmd0aCk7Zm9yKGdlPTA7Z2UhPVEubGVuZ3RoOysrZ2UpUGU9b2VbcGU9cGUrMSYyNTVd'@;
put 'LG9lW3BlXT1vZVt5ZT0oeWUrb2VbcGVdKSUyNTZdLG9lW3llXT1QZSxOZVtnZV09UVtnZV1eb2Vbb2VbcGVdK29lW3llXSYyNTVdO3JldHVybiBOZX0sUy5tZDU9ZnVuY3Rpb24oRyl7aWYoIWspdGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCBjcnlwdG8iKTtyZXR1cm4gay5jcmVhdGVI'@;
put 'YXNoKCJtZDUiKS51cGRhdGUoQnVmZmVyLmZyb20oRykpLmRpZ2VzdCgiaGV4Iil9fShYbCx0eXBlb2YgY3J5cHRvPCJ1Ij9jcnlwdG86dm9pZCAwKTt2YXIgTHc9c2w7ZnVuY3Rpb24gRDEoUyl7dmFyIFI9Uy5yZWFkX3NoaWZ0KDQpLGs9Uy5yZWFkX3NoaWZ0KDIpO3JldHVybiBrKz1TLnJl'@;
put 'YWRfc2hpZnQoMSk8PDE2LFMubCsrLHtjOlIsaVN0eWxlUmVmOmt9fWZ1bmN0aW9uIHhyKFMsUil7cmV0dXJuIG51bGw9PVImJihSPWJuKDgpKSxSLndyaXRlX3NoaWZ0KC00LFMuYyksUi53cml0ZV9zaGlmdCgzLFMuaVN0eWxlUmVmfHxTLnMpLFIud3JpdGVfc2hpZnQoMSwwKSxSfWZ1bmN0'@;
put 'aW9uIEpoKFMpe3ZhciBSPVMucmVhZF9zaGlmdCgyKTtyZXR1cm4gUis9Uy5yZWFkX3NoaWZ0KDEpPDwxNixTLmwrKyx7YzotMSxpU3R5bGVSZWY6Un19ZnVuY3Rpb24gZmkoUyxSKXtyZXR1cm4gbnVsbD09UiYmKFI9Ym4oNCkpLFIud3JpdGVfc2hpZnQoMyxTLmlTdHlsZVJlZnx8Uy5zKSxS'@;
put 'LndyaXRlX3NoaWZ0KDEsMCksUn12YXIgbzU9Z3UsczU9RmM7ZnVuY3Rpb24gdDAoUyl7dmFyIFI9Uy5yZWFkX3NoaWZ0KDQpO3JldHVybiAwPT09Unx8NDI5NDk2NzI5NT09PVI/IiI6Uy5yZWFkX3NoaWZ0KFIsImRiY3MiKX1mdW5jdGlvbiBwZihTLFIpe3ZhciBrPSExO3JldHVybiBudWxs'@;
put 'PT1SJiYoaz0hMCxSPWJuKDEyNykpLFIud3JpdGVfc2hpZnQoNCxTLmxlbmd0aD4wP1MubGVuZ3RoOjQyOTQ5NjcyOTUpLFMubGVuZ3RoPjAmJlIud3JpdGVfc2hpZnQoMCxTLCJkYmNzIiksaz9SLnNsaWNlKDAsUi5sKTpSfXZhciBsNT1ndSxnND10MCxjNT1wZjtmdW5jdGlvbiBJMShTKXt2'@;
put 'YXIgUj1TLnNsaWNlKFMubCxTLmwrNCksaz0xJlJbMF0sRz0yJlJbMF07Uy5sKz00LFJbMF0mPTI1Mjt2YXIgUT0wPT09Rz9hbihbMCwwLDAsMCxSWzBdLFJbMV0sUlsyXSxSWzNdXSwwKTpWcyhSLDApPj4yO3JldHVybiBrP1EvMTAwOlF9ZnVuY3Rpb24gdXYoUyxSKXtudWxsPT1SJiYoUj1i'@;
put 'big0KSk7dmFyIGs9MCxHPTAsUT0xMDAqUztpZihTPT0oMHxTKSYmUz49LSgxPDwyOSkmJlM8MTw8Mjk/Rz0xOlE9PSgwfFEpJiZRPj0tKDE8PDI5KSYmUTwxPDwyOSYmKEc9MSxrPTEpLCFHKXRocm93IG5ldyBFcnJvcigidW5zdXBwb3J0ZWQgUmtOdW1iZXIgIitTKTtSLndyaXRlX3NoaWZ0'@;
put 'KC00LCgoaz9ROlMpPDwyKSsoaysyKSl9ZnVuY3Rpb24gbGQoUyl7dmFyIFI9e3M6e30sZTp7fX07cmV0dXJuIFIucy5yPVMucmVhZF9zaGlmdCg0KSxSLmUucj1TLnJlYWRfc2hpZnQoNCksUi5zLmM9Uy5yZWFkX3NoaWZ0KDQpLFIuZS5jPVMucmVhZF9zaGlmdCg0KSxSfXZhciBtdT1sZCxn'@;
put 'Zj1mdW5jdGlvbiBUNihTLFIpe3JldHVybiBSfHwoUj1ibigxNikpLFIud3JpdGVfc2hpZnQoNCxTLnMuciksUi53cml0ZV9zaGlmdCg0LFMuZS5yKSxSLndyaXRlX3NoaWZ0KDQsUy5zLmMpLFIud3JpdGVfc2hpZnQoNCxTLmUuYyksUn07ZnVuY3Rpb24gbjAoUyl7Zm9yKHZhciBSPVMucmVh'@;
put 'ZF9zaGlmdCg0KSxrPVtdLEc9MDtHPFI7KytHKXt2YXIgUT1tdShTKTtrLnB1c2gocmEoUSkpfXJldHVybiBrLmpvaW4oIiwiKX1mdW5jdGlvbiBQbChTKXtpZihTLmxlbmd0aC1TLmw8OCl0aHJvdyJYTFMgWG51bSBCdWZmZXIgdW5kZXJmbG93IjtyZXR1cm4gUy5yZWFkX3NoaWZ0KDgsImYi'@;
put 'KX1mdW5jdGlvbiBPdShTLFIpe3JldHVybihSfHxibig4KSkud3JpdGVfc2hpZnQoOCxTLCJmIil9ZnVuY3Rpb24gUWgoUyl7dmFyIFI9e30sRz1TLnJlYWRfc2hpZnQoMSk+Pj4xLFE9Uy5yZWFkX3NoaWZ0KDEpLG9lPVMucmVhZF9zaGlmdCgyLCJpIiksZ2U9Uy5yZWFkX3NoaWZ0KDEpLHBl'@;
put 'PVMucmVhZF9zaGlmdCgxKSx5ZT1TLnJlYWRfc2hpZnQoMSk7c3dpdGNoKFMubCsrLEcpe2Nhc2UgMDpSLmF1dG89MTticmVhaztjYXNlIDE6Ui5pbmRleD1RO3ZhciBQZT1yMFtRXTtQZSYmKFIucmdiPWhkKFBlKSk7YnJlYWs7Y2FzZSAyOlIucmdiPWhkKFtnZSxwZSx5ZV0pO2JyZWFrO2Nh'@;
put 'c2UgMzpSLnRoZW1lPVF9cmV0dXJuIDAhPW9lJiYoUi50aW50PW9lPjA/b2UvMzI3Njc6b2UvMzI3NjgpLFJ9ZnVuY3Rpb24gbWYoUyxSKXtpZihSfHwoUj1ibig4KSksIVN8fFMuYXV0bylyZXR1cm4gUi53cml0ZV9zaGlmdCg0LDApLFIud3JpdGVfc2hpZnQoNCwwKSxSO251bGwhPVMuaW5k'@;
put 'ZXg/KFIud3JpdGVfc2hpZnQoMSwyKSxSLndyaXRlX3NoaWZ0KDEsUy5pbmRleCkpOm51bGwhPVMudGhlbWU/KFIud3JpdGVfc2hpZnQoMSw2KSxSLndyaXRlX3NoaWZ0KDEsUy50aGVtZSkpOihSLndyaXRlX3NoaWZ0KDEsNSksUi53cml0ZV9zaGlmdCgxLDApKTt2YXIgaz1TLnRpbnR8fDA7'@;
put 'aWYoaz4wP2sqPTMyNzY3Oms8MCYmKGsqPTMyNzY4KSxSLndyaXRlX3NoaWZ0KDIsayksUy5yZ2ImJm51bGw9PVMudGhlbWUpe3ZhciBHPVMucmdifHwiRkZGRkZGIjsibnVtYmVyIj09dHlwZW9mIEcmJihHPSgiMDAwMDAwIitHLnRvU3RyaW5nKDE2KSkuc2xpY2UoLTYpKSxSLndyaXRlX3No'@;
put 'aWZ0KDEscGFyc2VJbnQoRy5zbGljZSgwLDIpLDE2KSksUi53cml0ZV9zaGlmdCgxLHBhcnNlSW50KEcuc2xpY2UoMiw0KSwxNikpLFIud3JpdGVfc2hpZnQoMSxwYXJzZUludChHLnNsaWNlKDQsNiksMTYpKSxSLndyaXRlX3NoaWZ0KDEsMjU1KX1lbHNlIFIud3JpdGVfc2hpZnQoMiwwKSxS'@;
put 'LndyaXRlX3NoaWZ0KDEsMCksUi53cml0ZV9zaGlmdCgxLDApO3JldHVybiBSfWZ1bmN0aW9uIE93KFMpe3ZhciBSPVMucmVhZF9zaGlmdCgxKTtyZXR1cm4gUy5sKysse2ZCb2xkOjEmUixmSXRhbGljOjImUixmVW5kZXJsaW5lOjQmUixmU3RyaWtlb3V0OjgmUixmT3V0bGluZToxNiZSLGZT'@;
put 'aGFkb3c6MzImUixmQ29uZGVuc2U6NjQmUixmRXh0ZW5kOjEyOCZSfX1mdW5jdGlvbiBQdyhTLFIpe3ZhciBHPVMucmVhZF9zaGlmdCg0KTtzd2l0Y2goRyl7Y2FzZSAwOnJldHVybiIiO2Nhc2UgNDI5NDk2NzI5NTpjYXNlIDQyOTQ5NjcyOTQ6cmV0dXJuezI6IkJJVE1BUCIsMzoiTUVUQUZJ'@;
put 'TEVQSUNUIiw4OiJESUIiLDE0OiJFTkhNRVRBRklMRSJ9W1MucmVhZF9zaGlmdCg0KV18fCIifWlmKEc+NDAwKXRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgQ2xpcGJvYXJkOiAiK0cudG9TdHJpbmcoMTYpKTtyZXR1cm4gUy5sLT00LFMucmVhZF9zaGlmdCgwLDE9PVI/Imxwc3RyIjoi'@;
put 'bHB3c3RyIil9dmFyIGUyPTIsSmw9MyxJMD0xMixObj04MSxGdz1bODAsTm5dLG00PXsxOntuOiJDb2RlUGFnZSIsdDplMn0sMjp7bjoiQ2F0ZWdvcnkiLHQ6ODB9LDM6e246IlByZXNlbnRhdGlvbkZvcm1hdCIsdDo4MH0sNDp7bjoiQnl0ZUNvdW50Iix0OkpsfSw1OntuOiJMaW5lQ291bnQi'@;
put 'LHQ6Smx9LDY6e246IlBhcmFncmFwaENvdW50Iix0OkpsfSw3OntuOiJTbGlkZUNvdW50Iix0OkpsfSw4OntuOiJOb3RlQ291bnQiLHQ6Smx9LDk6e246IkhpZGRlbkNvdW50Iix0OkpsfSwxMDp7bjoiTXVsdGltZWRpYUNsaXBDb3VudCIsdDpKbH0sMTE6e246IlNjYWxlQ3JvcCIsdDoxMX0s'@;
put 'MTI6e246IkhlYWRpbmdQYWlycyIsdDo0MDk2fEkwfSwxMzp7bjoiVGl0bGVzT2ZQYXJ0cyIsdDo0MTI2fSwxNDp7bjoiTWFuYWdlciIsdDo4MH0sMTU6e246IkNvbXBhbnkiLHQ6ODB9LDE2OntuOiJMaW5rc1VwVG9EYXRlIix0OjExfSwxNzp7bjoiQ2hhcmFjdGVyQ291bnQiLHQ6Smx9LDE5'@;
put 'OntuOiJTaGFyZWREb2MiLHQ6MTF9LDIyOntuOiJIeXBlcmxpbmtzQ2hhbmdlZCIsdDoxMX0sMjM6e246IkFwcFZlcnNpb24iLHQ6SmwscDoidmVyc2lvbiJ9LDI0OntuOiJEaWdTaWciLHQ6NjV9LDI2OntuOiJDb250ZW50VHlwZSIsdDo4MH0sMjc6e246IkNvbnRlbnRTdGF0dXMiLHQ6ODB9'@;
put 'LDI4OntuOiJMYW5ndWFnZSIsdDo4MH0sMjk6e246IlZlcnNpb24iLHQ6ODB9LDI1NTp7fSwyMTQ3NDgzNjQ4OntuOiJMb2NhbGUiLHQ6MTl9LDIxNDc0ODM2NTE6e246IkJlaGF2aW9yIix0OjE5fSwxOTE5MDU0NDM0Ont9fSxkNT17MTp7bjoiQ29kZVBhZ2UiLHQ6ZTJ9LDI6e246IlRpdGxl'@;
put 'Iix0OjgwfSwzOntuOiJTdWJqZWN0Iix0OjgwfSw0OntuOiJBdXRob3IiLHQ6ODB9LDU6e246IktleXdvcmRzIix0OjgwfSw2OntuOiJDb21tZW50cyIsdDo4MH0sNzp7bjoiVGVtcGxhdGUiLHQ6ODB9LDg6e246Ikxhc3RBdXRob3IiLHQ6ODB9LDk6e246IlJldk51bWJlciIsdDo4MH0sMTA6'@;
put 'e246IkVkaXRUaW1lIix0OjY0fSwxMTp7bjoiTGFzdFByaW50ZWQiLHQ6NjR9LDEyOntuOiJDcmVhdGVkRGF0ZSIsdDo2NH0sMTM6e246Ik1vZGlmaWVkRGF0ZSIsdDo2NH0sMTQ6e246IlBhZ2VDb3VudCIsdDpKbH0sMTU6e246IldvcmRDb3VudCIsdDpKbH0sMTY6e246IkNoYXJDb3VudCIs'@;
put 'dDpKbH0sMTc6e246IlRodW1ibmFpbCIsdDo3MX0sMTg6e246IkFwcGxpY2F0aW9uIix0OjgwfSwxOTp7bjoiRG9jU2VjdXJpdHkiLHQ6Smx9LDI1NTp7fSwyMTQ3NDgzNjQ4OntuOiJMb2NhbGUiLHQ6MTl9LDIxNDc0ODM2NTE6e246IkJlaGF2aW9yIix0OjE5fSwxOTE5MDU0NDM0Ont9fSxo'@;
put 'NT1JZShtNCwibiIpLHZmPUllKGQ1LCJuIiksRDY9ezE6IlVTIiwyOiJDQSIsMzoiIiw3OiJSVSIsMjA6IkVHIiwzMDoiR1IiLDMxOiJOTCIsMzI6IkJFIiwzMzoiRlIiLDM0OiJFUyIsMzY6IkhVIiwzOToiSVQiLDQxOiJDSCIsNDM6IkFUIiw0NDoiR0IiLDQ1OiJESyIsNDY6IlNFIiw0Nzoi'@;
put 'Tk8iLDQ4OiJQTCIsNDk6IkRFIiw1MjoiTVgiLDU1OiJCUiIsNjE6IkFVIiw2NDoiTloiLDY2OiJUSCIsODE6IkpQIiw4MjoiS1IiLDg0OiJWTiIsODY6IkNOIiw5MDoiVFIiLDEwNToiSlMiLDIxMzoiRFoiLDIxNjoiTUEiLDIxODoiTFkiLDM1MToiUFQiLDM1NDoiSVMiLDM1ODoiRkkiLDQy'@;
put 'MDoiQ1oiLDg4NjoiVFciLDk2MToiTEIiLDk2MjoiSk8iLDk2MzoiU1kiLDk2NDoiSVEiLDk2NToiS1ciLDk2NjoiU0EiLDk3MToiQUUiLDk3MjoiSUwiLDk3NDoiUUEiLDk4MToiSVIiLDY1NTM1OiJVUyJ9LGh2PVtudWxsLCJzb2xpZCIsIm1lZGl1bUdyYXkiLCJkYXJrR3JheSIsImxpZ2h0'@;
put 'R3JheSIsImRhcmtIb3Jpem9udGFsIiwiZGFya1ZlcnRpY2FsIiwiZGFya0Rvd24iLCJkYXJrVXAiLCJkYXJrR3JpZCIsImRhcmtUcmVsbGlzIiwibGlnaHRIb3Jpem9udGFsIiwibGlnaHRWZXJ0aWNhbCIsImxpZ2h0RG93biIsImxpZ2h0VXAiLCJsaWdodEdyaWQiLCJsaWdodFRyZWxsaXMi'@;
put 'LCJncmF5MTI1IiwiZ3JheTA2MjUiXTtmdW5jdGlvbiBJNihTKXtyZXR1cm4gUy5tYXAoZnVuY3Rpb24oUil7cmV0dXJuW1I+PjE2JjI1NSxSPj44JjI1NSwyNTUmUl19KX12YXIgdjQ9STYoWzAsMTY3NzcyMTUsMTY3MTE2ODAsNjUyODAsMjU1LDE2Nzc2OTYwLDE2NzExOTM1LDY1NTM1LDAs'@;
put 'MTY3NzcyMTUsMTY3MTE2ODAsNjUyODAsMjU1LDE2Nzc2OTYwLDE2NzExOTM1LDY1NTM1LDgzODg2MDgsMzI3NjgsMTI4LDg0MjEzNzYsODM4ODczNiwzMjg5NiwxMjYzMjI1Niw4NDIxNTA0LDEwMDY2NDMxLDEwMDQwMTY2LDE2Nzc3MTY0LDEzNDM0ODc5LDY2ODQ3NzQsMTY3NDQ1NzYsMjYz'@;
put 'MTYsMTM0MjE4MjMsMTI4LDE2NzExOTM1LDE2Nzc2OTYwLDY1NTM1LDgzODg3MzYsODM4ODYwOCwzMjg5NiwyNTUsNTI0NzksMTM0MzQ4NzksMTM0MzQ4MjgsMTY3NzcxMTMsMTAwNzk0ODcsMTY3NTEwNTIsMTM0MDg3NjcsMTY3NjQwNTcsMzM2ODcwMywzMzk0NzY0LDEwMDc5MjMyLDE2NzYz'@;
put 'OTA0LDE2NzUwODQ4LDE2NzM3NzkyLDY3MTA5MzcsOTg2ODk1MCwxMzE1OCwzMzgxNjA2LDEzMDU2LDMzNTUzOTIsMTAwNDAwNjQsMTAwNDAxNjYsMzM1NTU0NSwzMzU1NDQzLDAsMTY3NzcyMTUsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMF0pLHIwPXF0KHY0KSxIdz1JNihbMTI2'@;
put 'MzIyNTYsOTg2ODk1MCw4NDIxNTA0LDY3MTA4ODYsMzM1NTQ0MywxNjcxMTY4MCwzMjc2OCwxMzM2OTQ5NywxMjgsMzM5NDU2MCwyNjM2NywxMDAyNzIxMiwxMDA1MzE3MSwxMjgsMzI3NjgsODM4ODYwOCwzMjg5Niw4Mzg4NzM2LDg0MjEzNzYsMTM2MzE0ODgsMTQ1Mzk5OTQsMTMwNjg4NTAs'@;
put 'MTM5MjQzNTIsOTk2NzQ5Niw5MTc1MjY3LDkxOTUwMDgsMzY4MzUzNywxMDY5MjU4LDg4ODA4OTksNzQ5NDY0LDI4OTM0NzYsMTE3NDU3MzAsMzc1MDIwMSwxNTU1OTUwMywxODM3OTQxLDEyMDg0MzU5LDc2MzIyNTAsNzM2MzMyOCw5NTE0NTg4LDgyODg2MTcsMzAzNjgxNCwxMTE4NDgxMF0p'@;
put 'LE1jPXswOiIjTlVMTCEiLDc6IiNESVYvMCEiLDE1OiIjVkFMVUUhIiwyMzoiI1JFRiEiLDI5OiIjTkFNRT8iLDM2OiIjTlVNISIsNDI6IiNOL0EiLDQzOiIjR0VUVElOR19EQVRBIiwyNTU6IiNXVEY/In0sUDM9a2UoTWMpLGI0PXsiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9m'@;
put 'ZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuc2hlZXQubWFpbit4bWwiOiJ3b3JrYm9va3MiLCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwuYmluSW5kZXhXcyI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwuaW50bG1hY3Jvc2hlZXQiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5k'@;
put 'Lm1zLWV4Y2VsLmJpbkluZGV4TXMiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLXBhY2thZ2UuY29yZS1wcm9wZXJ0aWVzK3htbCI6ImNvcmVwcm9wcyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5jdXN0b20tcHJvcGVydGll'@;
put 'cyt4bWwiOiJjdXN0cHJvcHMiLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuZXh0ZW5kZWQtcHJvcGVydGllcyt4bWwiOiJleHRwcm9wcyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5jdXN0b21YbWxQcm9wZXJ0'@;
put 'aWVzK3htbCI6ImN1c3RvbXhtbHByb3BzIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuY3VzdG9tUHJvcGVydHkiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLnBpdm90VGFibGUiOiJwaXZvdHMiLCJhcHBsaWNh'@;
put 'dGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5waXZvdFRhYmxlK3htbCI6InBpdm90cyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5kcmF3aW5nbWwuY2hhcnQreG1sIjoiY2hhcnRvYmpzIiwiYXBwbGlj'@;
put 'YXRpb24vdm5kLm1zLW9mZmljZS5jaGFydGNvbG9yc3R5bGUreG1sIjoiY2hhcnRjb2xvcnMiLCJhcHBsaWNhdGlvbi92bmQubXMtb2ZmaWNlLmNoYXJ0c3R5bGUreG1sIjoiY2hhcnRzdHlsZXMiLCJhcHBsaWNhdGlvbi92bmQubXMtb2ZmaWNlLmNoYXJ0ZXgreG1sIjoiY2hhcnRleHMiLCJh'@;
put 'cHBsaWNhdGlvbi92bmQubXMtZXhjZWwuY2FsY0NoYWluIjoiY2FsY2NoYWlucyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLmNhbGNDaGFpbit4bWwiOiJjYWxjY2hhaW5zIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3Jt'@;
put 'YXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwucHJpbnRlclNldHRpbmdzIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1vZmZpY2UuYWN0aXZlWCI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQubXMtb2ZmaWNlLmFjdGl2ZVgreG1sIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5t'@;
put 'cy1leGNlbC5hdHRhY2hlZFRvb2xiYXJzIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5jb25uZWN0aW9ucyI6ImNvbm5zIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuY29ubmVjdGlvbnMreG1sIjoiY29ubnMi'@;
put 'LCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwuZXh0ZXJuYWxMaW5rIjoibGlua3MiLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5leHRlcm5hbExpbmsreG1sIjoibGlua3MiLCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwuc2hl'@;
put 'ZXRNZXRhZGF0YSI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5zaGVldE1ldGFkYXRhK3htbCI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwucGl2b3RDYWNoZURlZmluaXRpb24iOiJwaXZvdGNhY2hl'@;
put 'cyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5waXZvdENhY2hlUmVjb3JkcyI6InBpdm90cmVjb3JkcyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnBpdm90Q2FjaGVEZWZpbml0aW9uK3htbCI6InBpdm90Y2FjaGVzIiwi'@;
put 'YXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwucGl2b3RDYWNoZVJlY29yZHMreG1sIjoicGl2b3RyZWNvcmRzIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLnF1ZXJ5VGFibGUiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm9wZW54'@;
put 'bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwucXVlcnlUYWJsZSt4bWwiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLnVzZXJOYW1lcyI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwucmV2aXNpb25IZWFkZXJzIjoiVE9ETyIsImFwcGxpY2F0'@;
put 'aW9uL3ZuZC5tcy1leGNlbC5yZXZpc2lvbkxvZyI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5yZXZpc2lvbkhlYWRlcnMreG1sIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vk'@;
put 'b2N1bWVudC5zcHJlYWRzaGVldG1sLnJldmlzaW9uTG9nK3htbCI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC51c2VyTmFtZXMreG1sIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC50YWJsZVNpbmds'@;
put 'ZUNlbGxzIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnRhYmxlU2luZ2xlQ2VsbHMreG1sIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5zbGljZXIiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm1z'@;
put 'LWV4Y2VsLnNsaWNlckNhY2hlIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5zbGljZXIreG1sIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5zbGljZXJDYWNoZSt4bWwiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLndzU29ydE1hcCI6IlRPRE8i'@;
put 'LCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwudGFibGUiOiJ0YWJsZXMiLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC50YWJsZSt4bWwiOiJ0YWJsZXMiLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9j'@;
put 'dW1lbnQudGhlbWUreG1sIjoidGhlbWVzIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnRoZW1lT3ZlcnJpZGUreG1sIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5UaW1lbGluZSt4bWwiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm1z'@;
put 'LWV4Y2VsLlRpbWVsaW5lQ2FjaGUreG1sIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1vZmZpY2UudmJhUHJvamVjdCI6InZiYSIsImFwcGxpY2F0aW9uL3ZuZC5tcy1vZmZpY2UudmJhUHJvamVjdFNpZ25hdHVyZSI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQubXMtb2ZmaWNlLnZvbGF0'@;
put 'aWxlRGVwZW5kZW5jaWVzIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnZvbGF0aWxlRGVwZW5kZW5jaWVzK3htbCI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwuY29udHJvbHByb3BlcnRpZXMreG1s'@;
put 'IjoiY3RybHByb3BzIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50Lm1vZGVsK2RhdGEiOiJkYXRhbW9kZWxzIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLlN1cnZleSt4bWwiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9m'@;
put 'ZmljZWRvY3VtZW50LmRyYXdpbmcreG1sIjoiZHJhd2luZ3MiLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuZHJhd2luZ21sLmNoYXJ0c2hhcGVzK3htbCI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQu'@;
put 'ZHJhd2luZ21sLmRpYWdyYW1Db2xvcnMreG1sIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5kcmF3aW5nbWwuZGlhZ3JhbURhdGEreG1sIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5k'@;
put 'cmF3aW5nbWwuZGlhZ3JhbUxheW91dCt4bWwiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LmRyYXdpbmdtbC5kaWFncmFtU3R5bGUreG1sIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC52'@;
put 'bWxEcmF3aW5nIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1wYWNrYWdlLnJlbGF0aW9uc2hpcHMreG1sIjoicmVscyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5vbGVPYmplY3QiOiJUT0RPIiwiaW1hZ2UvcG5nIjoiVE9E'@;
put 'TyIsc2hlZXQ6ImpzIn0sZnY9ZnVuY3Rpb24oKXt2YXIgUz17d29ya2Jvb2tzOnt4bHN4OiJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5zaGVldC5tYWluK3htbCIseGxzbToiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLnNoZWV0'@;
put 'Lm1hY3JvRW5hYmxlZC5tYWluK3htbCIseGxzYjoiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLnNoZWV0LmJpbmFyeS5tYWNyb0VuYWJsZWQubWFpbiIseGxhbToiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLmFkZGluLm1hY3JvRW5hYmxlZC5tYWluK3htbCIseGx0eDoiYXBwbGljYXRpb24v'@;
put 'dm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwudGVtcGxhdGUubWFpbit4bWwifSxzdHJzOnt4bHN4OiJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5zaGFyZWRTdHJpbmdzK3htbCIseGxzYjoi'@;
put 'YXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLnNoYXJlZFN0cmluZ3MifSxjb21tZW50czp7eGxzeDoiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuY29tbWVudHMreG1sIix4bHNiOiJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwuY29t'@;
put 'bWVudHMifSxzaGVldHM6e3hsc3g6ImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLndvcmtzaGVldCt4bWwiLHhsc2I6ImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC53b3Jrc2hlZXQifSxjaGFydHM6e3hsc3g6ImFwcGxpY2F0aW9u'@;
put 'L3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLmNoYXJ0c2hlZXQreG1sIix4bHNiOiJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwuY2hhcnRzaGVldCJ9LGRpYWxvZ3M6e3hsc3g6ImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1'@;
put 'bWVudC5zcHJlYWRzaGVldG1sLmRpYWxvZ3NoZWV0K3htbCIseGxzYjoiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLmRpYWxvZ3NoZWV0In0sbWFjcm9zOnt4bHN4OiJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwubWFjcm9zaGVldCt4bWwiLHhsc2I6ImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNl'@;
put 'bC5tYWNyb3NoZWV0In0sdGFibGVzOnt4bHN4OiJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC50YWJsZSt4bWwiLHhsc2I6ImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC50YWJsZSJ9LHBpdm90czp7eGxzeDoiYXBwbGljYXRpb24v'@;
put 'dm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwucGl2b3RUYWJsZSt4bWwiLHhsc2I6ImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5waXZvdFRhYmxlIn0scGl2b3RjYWNoZXM6e3hsc3g6ImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vk'@;
put 'b2N1bWVudC5zcHJlYWRzaGVldG1sLnBpdm90Q2FjaGVEZWZpbml0aW9uK3htbCIseGxzYjoiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLnBpdm90Q2FjaGVEZWZpbml0aW9uIn0scGl2b3RyZWNvcmRzOnt4bHN4OiJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1l'@;
put 'bnQuc3ByZWFkc2hlZXRtbC5waXZvdENhY2hlUmVjb3Jkcyt4bWwiLHhsc2I6ImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5waXZvdENhY2hlUmVjb3JkcyJ9LGNvbm5zOnt4bHN4OiJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5j'@;
put 'b25uZWN0aW9ucyt4bWwiLHhsc2I6ImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5jb25uZWN0aW9ucyJ9LGxpbmtzOnt4bHN4OiJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5leHRlcm5hbExpbmsreG1sIix4bHNiOiJhcHBsaWNh'@;
put 'dGlvbi92bmQubXMtZXhjZWwuZXh0ZXJuYWxMaW5rIn0sc3R5bGVzOnt4bHN4OiJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5zdHlsZXMreG1sIix4bHNiOiJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwuc3R5bGVzIn19O3JldHVy'@;
put 'biBPZShTKS5mb3JFYWNoKGZ1bmN0aW9uKFIpe1sieGxzbSIsInhsYW0iXS5mb3JFYWNoKGZ1bmN0aW9uKGspe1NbUl1ba118fChTW1JdW2tdPVNbUl0ueGxzeCl9KX0pLE9lKFMpLmZvckVhY2goZnVuY3Rpb24oUil7T2UoU1tSXSkuZm9yRWFjaChmdW5jdGlvbihrKXtiNFtTW1JdW2tdXT1S'@;
put 'fSl9KSxTfSgpLHB2PWZ1bmN0aW9uIEFlKFMpe2Zvcih2YXIgUj1bXSxrPU9lKFMpLEc9MDtHIT09ay5sZW5ndGg7KytHKW51bGw9PVJbU1trW0ddXV0mJihSW1Nba1tHXV1dPVtdKSxSW1Nba1tHXV1dLnB1c2goa1tHXSk7cmV0dXJuIFJ9KGI0KTtZaS5DVD0iaHR0cDovL3NjaGVtYXMub3Bl'@;
put 'bnhtbGZvcm1hdHMub3JnL3BhY2thZ2UvMjAwNi9jb250ZW50LXR5cGVzIjt2YXIgbXY9UHIoIlR5cGVzIixudWxsLHt4bWxuczpZaS5DVCwieG1sbnM6eHNkIjpZaS54c2QsInhtbG5zOnhzaSI6WWkueHNpfSksVnc9W1sieG1sIiwiYXBwbGljYXRpb24veG1sIl0sWyJiaW4iLCJhcHBsaWNh'@;
put 'dGlvbi92bmQubXMtZXhjZWwuc2hlZXQuYmluYXJ5Lm1hY3JvRW5hYmxlZC5tYWluIl0sWyJ2bWwiLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQudm1sRHJhd2luZyJdLFsiZGF0YSIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vk'@;
put 'b2N1bWVudC5tb2RlbCtkYXRhIl0sWyJibXAiLCJpbWFnZS9ibXAiXSxbInBuZyIsImltYWdlL3BuZyJdLFsiZ2lmIiwiaW1hZ2UvZ2lmIl0sWyJlbWYiLCJpbWFnZS94LWVtZiJdLFsid21mIiwiaW1hZ2UveC13bWYiXSxbImpwZyIsImltYWdlL2pwZWciXSxbImpwZWciLCJpbWFnZS9qcGVn'@;
put 'Il0sWyJ0aWYiLCJpbWFnZS90aWZmIl0sWyJ0aWZmIiwiaW1hZ2UvdGlmZiJdLFsicGRmIiwiYXBwbGljYXRpb24vcGRmIl0sWyJyZWxzIixwdi5yZWxzWzBdXV0ubWFwKGZ1bmN0aW9uKFMpe3JldHVybiBQcigiRGVmYXVsdCIsbnVsbCx7RXh0ZW5zaW9uOlNbMF0sQ29udGVudFR5cGU6U1sx'@;
put 'XX0pfSksS2E9e1dCOiJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL29mZmljZURvY3VtZW50IixTSEVFVDoiaHR0cDovL3NoZWV0anMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRp'@;
put 'b25zaGlwcy9vZmZpY2VEb2N1bWVudCIsSExJTks6Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L3JlbGF0aW9uc2hpcHMvaHlwZXJsaW5rIixWTUw6Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8y'@;
put 'MDA2L3JlbGF0aW9uc2hpcHMvdm1sRHJhd2luZyIsWFBBVEg6Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L3JlbGF0aW9uc2hpcHMvZXh0ZXJuYWxMaW5rUGF0aCIsWE1JU1M6Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vb2ZmaWNl'@;
put 'LzIwMDYvcmVsYXRpb25zaGlwcy94bEV4dGVybmFsTGlua1BhdGgveGxQYXRoTWlzc2luZyIsWExJTks6Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L3JlbGF0aW9uc2hpcHMvZXh0ZXJuYWxMaW5rIixDWE1MOiJodHRwOi8vc2NoZW1hcy5v'@;
put 'cGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL2N1c3RvbVhtbCIsQ1hNTFA6Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L3JlbGF0aW9uc2hpcHMvY3VzdG9tWG1sUHJvcHMiLFZCQToiaHR0cDov'@;
put 'L3NjaGVtYXMubWljcm9zb2Z0LmNvbS9vZmZpY2UvMjAwNi9yZWxhdGlvbnNoaXBzL3ZiYVByb2plY3QifTtmdW5jdGlvbiBWcihTKXt2YXIgUj1TLmxhc3RJbmRleE9mKCIvIik7cmV0dXJuIFMuc2xpY2UoMCxSKzEpKyJfcmVscy8iK1Muc2xpY2UoUisxKSsiLnJlbHMifWZ1bmN0aW9uIGJm'@;
put 'KFMsUil7dmFyIGs9eyIhaWQiOnt9fTtpZighUylyZXR1cm4gazsiLyIhPT1SLmNoYXJBdCgwKSYmKFI9Ii8iK1IpO3ZhciBHPXt9O3JldHVybihTLm1hdGNoKGVuKXx8W10pLmZvckVhY2goZnVuY3Rpb24oUSl7dmFyIG9lPXZyKFEpO2lmKCI8UmVsYXRpb25zaGlwIj09PW9lWzBdKXt2YXIg'@;
put 'Z2U9e307Z2UuVHlwZT1vZS5UeXBlLGdlLlRhcmdldD1vZS5UYXJnZXQsZ2UuSWQ9b2UuSWQsZ2UuVGFyZ2V0TW9kZT1vZS5UYXJnZXRNb2RlO3ZhciBwZT0iRXh0ZXJuYWwiPT09b2UuVGFyZ2V0TW9kZT9vZS5UYXJnZXQ6Zm4ob2UuVGFyZ2V0LFIpO2tbcGVdPWdlLEdbb2UuSWRdPWdlfX0p'@;
put 'LGtbIiFpZCJdPUcsa31ZaS5SRUxTPSJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvcGFja2FnZS8yMDA2L3JlbGF0aW9uc2hpcHMiO3ZhciBmNT1QcigiUmVsYXRpb25zaGlwcyIsbnVsbCx7eG1sbnM6WWkuUkVMU30pO2Z1bmN0aW9uIGtpKFMpe3ZhciBSPVtJaSxmNV07cmV0'@;
put 'dXJuIE9lKFNbIiFpZCJdKS5mb3JFYWNoKGZ1bmN0aW9uKGspe1JbUi5sZW5ndGhdPVByKCJSZWxhdGlvbnNoaXAiLG51bGwsU1siIWlkIl1ba10pfSksUi5sZW5ndGg+MiYmKFJbUi5sZW5ndGhdPSI8L1JlbGF0aW9uc2hpcHM+IixSWzFdPVJbMV0ucmVwbGFjZSgiLz4iLCI+IikpLFIuam9p'@;
put 'bigiIil9dmFyIHk0PVtLYS5ITElOSyxLYS5YUEFUSCxLYS5YTUlTU107ZnVuY3Rpb24gRXIoUyxSLGssRyxRLG9lKXtpZihRfHwoUT17fSksU1siIWlkIl18fChTWyIhaWQiXT17fSksUjwwKWZvcihSPTE7U1siIWlkIl1bInJJZCIrUl07KytSKTtpZihRLklkPSJySWQiK1IsUS5UeXBlPUcs'@;
put 'US5UYXJnZXQ9ayxvZT9RLlRhcmdldE1vZGU9b2U6eTQuaW5kZXhPZihRLlR5cGUpPi0xJiYoUS5UYXJnZXRNb2RlPSJFeHRlcm5hbCIpLFNbIiFpZCJdW1EuSWRdKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IHJld3JpdGUgcklkICIrUik7cmV0dXJuIFNbIiFpZCJdW1EuSWRdPVEsU1soIi8i'@;
put 'K1EuVGFyZ2V0KS5yZXBsYWNlKCIvLyIsIi8iKV09USxSfXZhciBsbD0iYXBwbGljYXRpb24vdm5kLm9hc2lzLm9wZW5kb2N1bWVudC5zcHJlYWRzaGVldCI7ZnVuY3Rpb24gZXUoUyxSLGspe3JldHVyblsnICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iJytTKyciPlxuJywnICAgIDxy'@;
put 'ZGY6dHlwZSByZGY6cmVzb3VyY2U9Imh0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL25zL29mZmljZS8xLjIvbWV0YS8nKyhrfHwib2RmIikrIiMiK1IrJyIvPlxuJywiICA8L3JkZjpEZXNjcmlwdGlvbj5cbiJdLmpvaW4oIiIpfWZ1bmN0aW9uIG4yKFMsUil7cmV0dXJuWycgIDxyZGY6RGVz'@;
put 'Y3JpcHRpb24gcmRmOmFib3V0PSInK1MrJyI+XG4nLCcgICAgPG5zMDpoYXNQYXJ0IHhtbG5zOm5zMD0iaHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvbnMvb2ZmaWNlLzEuMi9tZXRhL3BrZyMiIHJkZjpyZXNvdXJjZT0iJytSKyciLz5cbicsIiAgPC9yZGY6RGVzY3JpcHRpb24+XG4iXS5q'@;
put 'b2luKCIiKX12YXIgUjY9ZnVuY3Rpb24oKXt2YXIgUz0nPG9mZmljZTpkb2N1bWVudC1tZXRhIHhtbG5zOm9mZmljZT0idXJuOm9hc2lzOm5hbWVzOnRjOm9wZW5kb2N1bWVudDp4bWxuczpvZmZpY2U6MS4wIiB4bWxuczptZXRhPSJ1cm46b2FzaXM6bmFtZXM6dGM6b3BlbmRvY3VtZW50Onht'@;
put 'bG5zOm1ldGE6MS4wIiB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiBvZmZpY2U6dmVyc2lvbj0iMS4yIj48b2ZmaWNlOm1ldGE+PG1ldGE6Z2VuZXJhdG9yPlNoZWV0SlMgJyt3LnZl'@;
put 'cnNpb24rIjwvbWV0YTpnZW5lcmF0b3I+PC9vZmZpY2U6bWV0YT48L29mZmljZTpkb2N1bWVudC1tZXRhPiI7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIFN9fSgpLFIwPVtbImNwOmNhdGVnb3J5IiwiQ2F0ZWdvcnkiXSxbImNwOmNvbnRlbnRTdGF0dXMiLCJDb250ZW50U3RhdHVzIl0sWyJj'@;
put 'cDprZXl3b3JkcyIsIktleXdvcmRzIl0sWyJjcDpsYXN0TW9kaWZpZWRCeSIsIkxhc3RBdXRob3IiXSxbImNwOmxhc3RQcmludGVkIiwiTGFzdFByaW50ZWQiXSxbImNwOnJldmlzaW9uIiwiUmV2TnVtYmVyIl0sWyJjcDp2ZXJzaW9uIiwiVmVyc2lvbiJdLFsiZGM6Y3JlYXRvciIsIkF1dGhv'@;
put 'ciJdLFsiZGM6ZGVzY3JpcHRpb24iLCJDb21tZW50cyJdLFsiZGM6aWRlbnRpZmllciIsIklkZW50aWZpZXIiXSxbImRjOmxhbmd1YWdlIiwiTGFuZ3VhZ2UiXSxbImRjOnN1YmplY3QiLCJTdWJqZWN0Il0sWyJkYzp0aXRsZSIsIlRpdGxlIl0sWyJkY3Rlcm1zOmNyZWF0ZWQiLCJDcmVhdGVk'@;
put 'RGF0ZSIsImRhdGUiXSxbImRjdGVybXM6bW9kaWZpZWQiLCJNb2RpZmllZERhdGUiLCJkYXRlIl1dO1lpLkNPUkVfUFJPUFM9Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9wYWNrYWdlLzIwMDYvbWV0YWRhdGEvY29yZS1wcm9wZXJ0aWVzIixLYS5DT1JFX1BST1BTPSJodHRw'@;
put 'Oi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvcGFja2FnZS8yMDA2L3JlbGF0aW9uc2hpcHMvbWV0YWRhdGEvY29yZS1wcm9wZXJ0aWVzIjt2YXIgcDU9ZnVuY3Rpb24oKXtmb3IodmFyIFM9bmV3IEFycmF5KFIwLmxlbmd0aCksUj0wO1I8UjAubGVuZ3RoOysrUil7dmFyIGs9UjBbUl0s'@;
put 'Rz0iKD86IitrWzBdLnNsaWNlKDAsa1swXS5pbmRleE9mKCI6IikpKyI6KSIra1swXS5zbGljZShrWzBdLmluZGV4T2YoIjoiKSsxKTtTW1JdPW5ldyBSZWdFeHAoIjwiK0crIltePl0qPihbXFxzXFxTXSo/KTwvIitHKyI+Iil9cmV0dXJuIFN9KCk7ZnVuY3Rpb24gdnYoUyl7dmFyIFI9e307'@;
put 'Uz1nbyhTKTtmb3IodmFyIGs9MDtrPFIwLmxlbmd0aDsrK2spe3ZhciBHPVIwW2tdLFE9Uy5tYXRjaChwNVtrXSk7bnVsbCE9USYmUS5sZW5ndGg+MCYmKFJbR1sxXV09UXIoUVsxXSkpLCJkYXRlIj09PUdbMl0mJlJbR1sxXV0mJihSW0dbMV1dPUhlKFJbR1sxXV0pKX1yZXR1cm4gUn12YXIg'@;
put 'anc9UHIoImNwOmNvcmVQcm9wZXJ0aWVzIixudWxsLHsieG1sbnM6Y3AiOllpLkNPUkVfUFJPUFMsInhtbG5zOmRjIjpZaS5kYywieG1sbnM6ZGN0ZXJtcyI6WWkuZGN0ZXJtcywieG1sbnM6ZGNtaXR5cGUiOllpLmRjbWl0eXBlLCJ4bWxuczp4c2kiOllpLnhzaX0pO2Z1bmN0aW9uIHlmKFMs'@;
put 'UixrLEcsUSl7bnVsbCE9UVtTXXx8bnVsbD09Unx8IiI9PT1SfHwoUVtTXT1SLFI9THIoUiksR1tHLmxlbmd0aF09az9QcihTLFIsayk6SGEoUyxSKSl9dmFyIHJoPVtbIkFwcGxpY2F0aW9uIiwiQXBwbGljYXRpb24iLCJzdHJpbmciXSxbIkFwcFZlcnNpb24iLCJBcHBWZXJzaW9uIiwic3Ry'@;
put 'aW5nIl0sWyJDb21wYW55IiwiQ29tcGFueSIsInN0cmluZyJdLFsiRG9jU2VjdXJpdHkiLCJEb2NTZWN1cml0eSIsInN0cmluZyJdLFsiTWFuYWdlciIsIk1hbmFnZXIiLCJzdHJpbmciXSxbIkh5cGVybGlua3NDaGFuZ2VkIiwiSHlwZXJsaW5rc0NoYW5nZWQiLCJib29sIl0sWyJTaGFyZWRE'@;
put 'b2MiLCJTaGFyZWREb2MiLCJib29sIl0sWyJMaW5rc1VwVG9EYXRlIiwiTGlua3NVcFRvRGF0ZSIsImJvb2wiXSxbIlNjYWxlQ3JvcCIsIlNjYWxlQ3JvcCIsImJvb2wiXSxbIkhlYWRpbmdQYWlycyIsIkhlYWRpbmdQYWlycyIsInJhdyJdLFsiVGl0bGVzT2ZQYXJ0cyIsIlRpdGxlc09mUGFy'@;
put 'dHMiLCJyYXciXV07ZnVuY3Rpb24gXzQoUyxSLGssRyl7dmFyIFE9W107aWYoInN0cmluZyI9PXR5cGVvZiBTKVE9SnIoUyxHKTtlbHNlIGZvcih2YXIgb2U9MDtvZTxTLmxlbmd0aDsrK29lKVE9US5jb25jYXQoU1tvZV0ubWFwKGZ1bmN0aW9uKE5lKXtyZXR1cm57djpOZX19KSk7dmFyIGdl'@;
put 'PSJzdHJpbmciPT10eXBlb2YgUj9KcihSLEcpLm1hcChmdW5jdGlvbihOZSl7cmV0dXJuIE5lLnZ9KTpSLHBlPTAseWU9MDtpZihnZS5sZW5ndGg+MClmb3IodmFyIFBlPTA7UGUhPT1RLmxlbmd0aDtQZSs9Mil7c3dpdGNoKHllPStRW1BlKzFdLnYsUVtQZV0udil7Y2FzZSJXb3Jrc2hlZXRz'@;
put 'IjpjYXNlIlx1NWRlNVx1NGY1Y1x1ODg2OCI6Y2FzZSJcdTA0MWJcdTA0MzhcdTA0NDFcdTA0NDJcdTA0NGIiOmNhc2UiXHUwNjIzXHUwNjQ4XHUwNjMxXHUwNjI3XHUwNjQyIFx1MDYyN1x1MDY0NFx1MDYzOVx1MDY0NVx1MDY0NCI6Y2FzZSJcdTMwZWZcdTMwZmNcdTMwYWZcdTMwYjdcdTMw'@;
put 'ZmNcdTMwYzgiOmNhc2UiXHUwNWQyXHUwNWRjXHUwNWQ5XHUwNWQ1XHUwNWUwXHUwNWQ1XHUwNWVhIFx1MDVlMlx1MDVkMVx1MDVkNVx1MDVkM1x1MDVkNCI6Y2FzZSJBcmJlaXRzYmxceGU0dHRlciI6Y2FzZSJceGM3YWxcdTAxMzFcdTAxNWZtYSBTYXlmYWxhclx1MDEzMSI6Y2FzZSJGZXVp'@;
put 'bGxlcyBkZSBjYWxjdWwiOmNhc2UiRm9nbGkgZGkgbGF2b3JvIjpjYXNlIkZvbGhhcyBkZSBjXHhlMWxjdWxvIjpjYXNlIlBsYW5pbGhhcyI6Y2FzZSJSZWduZWFyayI6Y2FzZSJIb2phcyBkZSBjXHhlMWxjdWxvIjpjYXNlIldlcmtibGFkZW4iOmsuV29ya3NoZWV0cz15ZSxrLlNoZWV0TmFt'@;
put 'ZXM9Z2Uuc2xpY2UocGUscGUreWUpO2JyZWFrO2Nhc2UiTmFtZWQgUmFuZ2VzIjpjYXNlIlJhbmdvcyBjb24gbm9tYnJlIjpjYXNlIlx1NTQwZFx1NTI0ZFx1NGVkOFx1MzA0ZFx1NGUwMFx1ODlhNyI6Y2FzZSJCZW5hbm50ZSBCZXJlaWNoZSI6Y2FzZSJOYXZuZ2l2bmUgb21yXHhlNWRlciI6'@;
put 'ay5OYW1lZFJhbmdlcz15ZSxrLkRlZmluZWROYW1lcz1nZS5zbGljZShwZSxwZSt5ZSk7YnJlYWs7Y2FzZSJDaGFydHMiOmNhc2UiRGlhZ3JhbW1lIjprLkNoYXJ0c2hlZXRzPXllLGsuQ2hhcnROYW1lcz1nZS5zbGljZShwZSxwZSt5ZSl9cGUrPXllfX1ZaS5FWFRfUFJPUFM9Imh0dHA6Ly9z'@;
put 'Y2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L2V4dGVuZGVkLXByb3BlcnRpZXMiLEthLkVYVF9QUk9QUz0iaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlwcy9leHRlbmRlZC1wcm9wZXJ0'@;
put 'aWVzIjt2YXIgTDY9UHIoIlByb3BlcnRpZXMiLG51bGwse3htbG5zOllpLkVYVF9QUk9QUywieG1sbnM6dnQiOllpLnZ0fSk7WWkuQ1VTVF9QUk9QUz0iaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvY3VzdG9tLXByb3BlcnRpZXMiLEthLkNV'@;
put 'U1RfUFJPUFM9Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L3JlbGF0aW9uc2hpcHMvY3VzdG9tLXByb3BlcnRpZXMiO3ZhciBPNj0vPFtePl0rPltePF0qL2csX3Y9UHIoIlByb3BlcnRpZXMiLG51bGwse3htbG5zOllpLkNVU1RfUFJPUFMs'@;
put 'InhtbG5zOnZ0IjpZaS52dH0pO3ZhciBQNj17VGl0bGU6IlRpdGxlIixTdWJqZWN0OiJTdWJqZWN0IixBdXRob3I6IkF1dGhvciIsS2V5d29yZHM6IktleXdvcmRzIixDb21tZW50czoiRGVzY3JpcHRpb24iLExhc3RBdXRob3I6Ikxhc3RBdXRob3IiLFJldk51bWJlcjoiUmV2aXNpb24iLEFw'@;
put 'cGxpY2F0aW9uOiJBcHBOYW1lIixMYXN0UHJpbnRlZDoiTGFzdFByaW50ZWQiLENyZWF0ZWREYXRlOiJDcmVhdGVkIixNb2RpZmllZERhdGU6Ikxhc3RTYXZlZCIsQ2F0ZWdvcnk6IkNhdGVnb3J5IixNYW5hZ2VyOiJNYW5hZ2VyIixDb21wYW55OiJDb21wYW55IixBcHBWZXJzaW9uOiJWZXJz'@;
put 'aW9uIixDb250ZW50U3RhdHVzOiJDb250ZW50U3RhdHVzIixJZGVudGlmaWVyOiJJZGVudGlmaWVyIixMYW5ndWFnZToiTGFuZ3VhZ2UifSxGNj1WZShQNik7ZnVuY3Rpb24gRjMoUyxSLGspe1NbUj1GNltSXXx8Ul09a31mdW5jdGlvbiBIMyhTKXt2YXIgUj1TLnJlYWRfc2hpZnQoNCksaz1T'@;
put 'LnJlYWRfc2hpZnQoNCk7cmV0dXJuIG5ldyBEYXRlKDFlMyooay8xZTcqTWF0aC5wb3coMiwzMikrUi8xZTctMTE2NDQ0NzM2MDApKS50b0lTT1N0cmluZygpLnJlcGxhY2UoL1wuMDAwLywiIil9ZnVuY3Rpb24gY2QoUyxSLGspe3ZhciBHPVMubCxRPVMucmVhZF9zaGlmdCgwLCJscHN0ci1j'@;
put 'cCIpO2lmKGspZm9yKDtTLmwtRyYzOykrK1MubDtyZXR1cm4gUX1mdW5jdGlvbiBnNShTLFIsayl7dmFyIEc9Uy5yZWFkX3NoaWZ0KDAsImxwd3N0ciIpO3JldHVybiBrJiYoUy5sKz00LShHLmxlbmd0aCsxJjMpJjMpLEd9ZnVuY3Rpb24gd3YoUyxSLGspe3JldHVybiAzMT09PVI/ZzUoUyk6'@;
put 'Y2QoUywwLGspfWZ1bmN0aW9uIE42KFMsUixrKXtyZXR1cm4gd3YoUyxSLCExPT09az8wOjQpfWZ1bmN0aW9uIFN2KFMpe3ZhciBSPVMubCxrPXdmKFMsTm4pO3JldHVybiAwPT1TW1MubF0mJjA9PVNbUy5sKzFdJiZTLmwtUiYyJiYoUy5sKz0yKSxbayx3ZihTLEpsKV19ZnVuY3Rpb24gbTUo'@;
put 'UyxSKXtmb3IodmFyIGs9Uy5yZWFkX3NoaWZ0KDQpLEc9e30sUT0wO1EhPWs7KytRKXt2YXIgb2U9Uy5yZWFkX3NoaWZ0KDQpLGdlPVMucmVhZF9zaGlmdCg0KTtHW29lXT1TLnJlYWRfc2hpZnQoZ2UsMTIwMD09PVI/InV0ZjE2bGUiOiJ1dGY4IikucmVwbGFjZShFLCIiKS5yZXBsYWNlKG0s'@;
put 'IiEiKSwxMjAwPT09UiYmZ2UlMiYmKFMubCs9Mil9cmV0dXJuIDMmUy5sJiYoUy5sPVMubD4+Mzw8MiksR31mdW5jdGlvbiBxMChTKXt2YXIgUj1TLnJlYWRfc2hpZnQoNCksaz1TLnNsaWNlKFMubCxTLmwrUik7cmV0dXJuIFMubCs9UiwoMyZSKT4wJiYoUy5sKz00LSgzJlIpJjMpLGt9ZnVu'@;
put 'Y3Rpb24gd2YoUyxSLGspe3ZhciBRLEc9Uy5yZWFkX3NoaWZ0KDIpLG9lPWt8fHt9O2lmKFMubCs9MixSIT09STAmJkchPT1SJiYtMT09PUZ3LmluZGV4T2YoUikmJig0MTI2IT0oNjU1MzQmUil8fDQxMjYhPSg2NTUzNCZHKSkpdGhyb3cgbmV3IEVycm9yKCJFeHBlY3RlZCB0eXBlICIrUisi'@;
put 'IHNhdyAiK0cpO3N3aXRjaChSPT09STA/RzpSKXtjYXNlIDI6cmV0dXJuIFE9Uy5yZWFkX3NoaWZ0KDIsImkiKSxvZS5yYXd8fChTLmwrPTIpLFE7Y2FzZSAzOnJldHVybiBTLnJlYWRfc2hpZnQoNCwiaSIpO2Nhc2UgMTE6cmV0dXJuIDAhPT1TLnJlYWRfc2hpZnQoNCk7Y2FzZSAxOTpyZXR1'@;
put 'cm4gUy5yZWFkX3NoaWZ0KDQpO2Nhc2UgMzA6cmV0dXJuIGNkKFMsMCw0KS5yZXBsYWNlKEUsIiIpO2Nhc2UgMzE6cmV0dXJuIGc1KFMpO2Nhc2UgNjQ6cmV0dXJuIEgzKFMpO2Nhc2UgNjU6cmV0dXJuIHEwKFMpO2Nhc2UgNzE6cmV0dXJuIGZ1bmN0aW9uIE12KFMpe3ZhciBSPXt9O3JldHVy'@;
put 'biBSLlNpemU9Uy5yZWFkX3NoaWZ0KDQpLFMubCs9Ui5TaXplKzMtKFIuU2l6ZS0xKSU0LFJ9KFMpO2Nhc2UgODA6cmV0dXJuIE42KFMsRywhb2UucmF3KS5yZXBsYWNlKEUsIiIpO2Nhc2UgODE6cmV0dXJuIGZ1bmN0aW9uIEN2KFMsUil7aWYoIVIpdGhyb3cgbmV3IEVycm9yKCJWdFVuYWxp'@;
put 'Z25lZFN0cmluZyBtdXN0IGhhdmUgcG9zaXRpdmUgbGVuZ3RoIik7cmV0dXJuIHd2KFMsUiwwKX0oUyxHKS5yZXBsYWNlKEUsIiIpO2Nhc2UgNDEwODpyZXR1cm4gZnVuY3Rpb24gWXcoUyl7Zm9yKHZhciBSPVMucmVhZF9zaGlmdCg0KSxrPVtdLEc9MDtHPFIvMjsrK0cpay5wdXNoKFN2KFMp'@;
put 'KTtyZXR1cm4ga30oUyk7Y2FzZSA0MTI2OmNhc2UgNDEyNzpyZXR1cm4gNDEyNz09Rz9mdW5jdGlvbiBOMyhTKXtmb3IodmFyIFI9Uy5yZWFkX3NoaWZ0KDQpLGs9W10sRz0wO0chPVI7KytHKXt2YXIgUT1TLmw7a1tHXT1TLnJlYWRfc2hpZnQoMCwibHB3c3RyIikucmVwbGFjZShFLCIiKSxT'@;
put 'LmwtUSYyJiYoUy5sKz0yKX1yZXR1cm4ga30oUyk6ZnVuY3Rpb24gV3coUyl7Zm9yKHZhciBSPVMucmVhZF9zaGlmdCg0KSxrPVtdLEc9MDtHIT1SOysrRylrW0ddPVMucmVhZF9zaGlmdCgwLCJscHN0ci1jcCIpLnJlcGxhY2UoRSwiIik7cmV0dXJuIGt9KFMpO2RlZmF1bHQ6dGhyb3cgbmV3'@;
put 'IEVycm9yKCJUeXBlZFByb3BlcnR5VmFsdWUgdW5yZWNvZ25pemVkIHR5cGUgIitSKyIgIitHKX19ZnVuY3Rpb24gQ2YoUyxSKXt2YXIgaz1ibig0KSxHPWJuKDQpO3N3aXRjaChrLndyaXRlX3NoaWZ0KDQsODA9PVM/MzE6UyksUyl7Y2FzZSAzOkcud3JpdGVfc2hpZnQoLTQsUik7YnJlYWs7'@;
put 'Y2FzZSA1OihHPWJuKDgpKS53cml0ZV9zaGlmdCg4LFIsImYiKTticmVhaztjYXNlIDExOkcud3JpdGVfc2hpZnQoNCxSPzE6MCk7YnJlYWs7Y2FzZSA2NDpHPWZ1bmN0aW9uIGhjKFMpe3ZhciBrPSgic3RyaW5nIj09dHlwZW9mIFM/bmV3IERhdGUoRGF0ZS5wYXJzZShTKSk6UykuZ2V0VGlt'@;
put 'ZSgpLzFlMysxMTY0NDQ3MzYwMCxHPWslTWF0aC5wb3coMiwzMiksUT0oay1HKS9NYXRoLnBvdygyLDMyKTtRKj0xZTc7dmFyIG9lPShHKj0xZTcpL01hdGgucG93KDIsMzIpfDA7b2U+MCYmKEclPU1hdGgucG93KDIsMzIpLFErPW9lKTt2YXIgZ2U9Ym4oOCk7cmV0dXJuIGdlLndyaXRlX3No'@;
put 'aWZ0KDQsRyksZ2Uud3JpdGVfc2hpZnQoNCxRKSxnZX0oUik7YnJlYWs7Y2FzZSAzMTpjYXNlIDgwOmZvcigoRz1ibig0KzIqKFIubGVuZ3RoKzEpKyhSLmxlbmd0aCUyPzA6MikpKS53cml0ZV9zaGlmdCg0LFIubGVuZ3RoKzEpLEcud3JpdGVfc2hpZnQoMCxSLCJkYmNzIik7Ry5sIT1HLmxl'@;
put 'bmd0aDspRy53cml0ZV9zaGlmdCgxLDApO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJUeXBlZFByb3BlcnR5VmFsdWUgdW5yZWNvZ25pemVkIHR5cGUgIitTKyIgIitSKX1yZXR1cm4gaihbayxHXSl9ZnVuY3Rpb24gaWgoUyxSKXt2YXIgaz1TLmwsRz1TLnJlYWRfc2hpZnQoNCks'@;
put 'UT1TLnJlYWRfc2hpZnQoNCksb2U9W10sZ2U9MCxwZT0wLHllPS0xLFBlPXt9O2ZvcihnZT0wO2dlIT1ROysrZ2Upe3ZhciBOZT1TLnJlYWRfc2hpZnQoNCksWWU9Uy5yZWFkX3NoaWZ0KDQpO29lW2dlXT1bTmUsWWUra119b2Uuc29ydChmdW5jdGlvbihrdCxPdCl7cmV0dXJuIGt0WzFdLU90'@;
put 'WzFdfSk7dmFyIGV0PXt9O2ZvcihnZT0wO2dlIT1ROysrZ2Upe2lmKFMubCE9PW9lW2dlXVsxXSl7dmFyIGN0PSEwO2lmKGdlPjAmJlIpc3dpdGNoKFJbb2VbZ2UtMV1bMF1dLnQpe2Nhc2UgMjpTLmwrMj09PW9lW2dlXVsxXSYmKFMubCs9MixjdD0hMSk7YnJlYWs7Y2FzZSA4MDpjYXNlIDQx'@;
put 'MDg6Uy5sPD1vZVtnZV1bMV0mJihTLmw9b2VbZ2VdWzFdLGN0PSExKX1pZigoIVJ8fDA9PWdlKSYmUy5sPD1vZVtnZV1bMV0mJihjdD0hMSxTLmw9b2VbZ2VdWzFdKSxjdCl0aHJvdyBuZXcgRXJyb3IoIlJlYWQgRXJyb3I6IEV4cGVjdGVkIGFkZHJlc3MgIitvZVtnZV1bMV0rIiBhdCAiK1Mu'@;
put 'bCsiIDoiK2dlKX1pZihSKXt2YXIgRXQ9UltvZVtnZV1bMF1dO2lmKGV0W0V0Lm5dPXdmKFMsRXQudCx7cmF3OiEwfSksInZlcnNpb24iPT09RXQucCYmKGV0W0V0Lm5dPVN0cmluZyhldFtFdC5uXT4+MTYpKyIuIisoIjAwMDAiK1N0cmluZyg2NTUzNSZldFtFdC5uXSkpLnNsaWNlKC00KSks'@;
put 'IkNvZGVQYWdlIj09RXQubilzd2l0Y2goZXRbRXQubl0pe2Nhc2UgMDpldFtFdC5uXT0xMjUyO2Nhc2UgODc0OmNhc2UgOTMyOmNhc2UgOTM2OmNhc2UgOTQ5OmNhc2UgOTUwOmNhc2UgMTI1MDpjYXNlIDEyNTE6Y2FzZSAxMjUzOmNhc2UgMTI1NDpjYXNlIDEyNTU6Y2FzZSAxMjU2OmNhc2Ug'@;
put 'MTI1NzpjYXNlIDEyNTg6Y2FzZSAxZTQ6Y2FzZSAxMjAwOmNhc2UgMTIwMTpjYXNlIDEyNTI6Y2FzZSA2NWUzOmNhc2UtNTM2OmNhc2UgNjUwMDE6Y2FzZS01MzU6VShwZT1ldFtFdC5uXT4+PjAmNjU1MzUpO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCBDb2Rl'@;
put 'UGFnZTogIitldFtFdC5uXSl9fWVsc2UgaWYoMT09PW9lW2dlXVswXSl7aWYocGU9ZXQuQ29kZVBhZ2U9d2YoUyxlMiksVShwZSksLTEhPT15ZSl7dmFyIGF0PVMubDtTLmw9b2VbeWVdWzFdLFBlPW01KFMscGUpLFMubD1hdH19ZWxzZSBpZigwPT09b2VbZ2VdWzBdKXtpZigwPT09cGUpe3ll'@;
put 'PWdlLFMubD1vZVtnZSsxXVsxXTtjb250aW51ZX1QZT1tNShTLHBlKX1lbHNle3ZhciBqdCxidD1QZVtvZVtnZV1bMF1dO3N3aXRjaChTW1MubF0pe2Nhc2UgNjU6Uy5sKz00LGp0PXEwKFMpO2JyZWFrO2Nhc2UgMzA6Y2FzZSAzMTpTLmwrPTQsanQ9TjYoUyxTW1MubC00XSkucmVwbGFjZSgv'@;
put 'XHUwMDAwKyQvLCIiKTticmVhaztjYXNlIDM6Uy5sKz00LGp0PVMucmVhZF9zaGlmdCg0LCJpIik7YnJlYWs7Y2FzZSAxOTpTLmwrPTQsanQ9Uy5yZWFkX3NoaWZ0KDQpO2JyZWFrO2Nhc2UgNTpTLmwrPTQsanQ9Uy5yZWFkX3NoaWZ0KDgsImYiKTticmVhaztjYXNlIDExOlMubCs9NCxqdD11'@;
put 'byhTLDQpO2JyZWFrO2Nhc2UgNjQ6Uy5sKz00LGp0PUhlKEgzKFMpKTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigidW5wYXJzZWQgdmFsdWU6ICIrU1tTLmxdKX1ldFtidF09anR9fXJldHVybiBTLmw9aytHLGV0fXZhciBWNj1bIkNvZGVQYWdlIiwiVGh1bWJuYWlsIiwiX1BJRF9M'@;
put 'SU5LQkFTRSIsIl9QSURfSExJTktTIiwiU3lzdGVtSWRlbnRpZmllciIsIkZNVElEIl0uY29uY2F0KFsiV29ya3NoZWV0cyIsIlNoZWV0TmFtZXMiLCJOYW1lZFJhbmdlcyIsIkRlZmluZWROYW1lcyIsIkNoYXJ0c2hlZXRzIiwiQ2hhcnROYW1lcyJdKTtmdW5jdGlvbiBIYyhTKXtzd2l0Y2go'@;
put 'dHlwZW9mIFMpe2Nhc2UiYm9vbGVhbiI6cmV0dXJuIDExO2Nhc2UibnVtYmVyIjpyZXR1cm4oMHxTKT09Uz8zOjU7Y2FzZSJzdHJpbmciOnJldHVybiAzMTtjYXNlIm9iamVjdCI6aWYoUyBpbnN0YW5jZW9mIERhdGUpcmV0dXJuIDY0fXJldHVybi0xfWZ1bmN0aW9uIEI2KFMsUixrKXt2YXIg'@;
put 'Rz1ibig4KSxRPVtdLG9lPVtdLGdlPTgscGU9MCx5ZT1ibig4KSxQZT1ibig4KTtpZih5ZS53cml0ZV9zaGlmdCg0LDIpLHllLndyaXRlX3NoaWZ0KDQsMTIwMCksUGUud3JpdGVfc2hpZnQoNCwxKSxvZS5wdXNoKHllKSxRLnB1c2goUGUpLGdlKz04K3llLmxlbmd0aCwhUil7KFBlPWJuKDgp'@;
put 'KS53cml0ZV9zaGlmdCg0LDApLFEudW5zaGlmdChQZSk7dmFyIE5lPVtibig0KV07Zm9yKE5lWzBdLndyaXRlX3NoaWZ0KDQsUy5sZW5ndGgpLHBlPTA7cGU8Uy5sZW5ndGg7KytwZSl7dmFyIFllPVNbcGVdWzBdO2ZvcigoeWU9Ym4oOCsyKihZZS5sZW5ndGgrMSkrKFllLmxlbmd0aCUyPzA6'@;
put 'MikpKS53cml0ZV9zaGlmdCg0LHBlKzIpLHllLndyaXRlX3NoaWZ0KDQsWWUubGVuZ3RoKzEpLHllLndyaXRlX3NoaWZ0KDAsWWUsImRiY3MiKTt5ZS5sIT15ZS5sZW5ndGg7KXllLndyaXRlX3NoaWZ0KDEsMCk7TmUucHVzaCh5ZSl9eWU9aihOZSksb2UudW5zaGlmdCh5ZSksZ2UrPTgreWUu'@;
put 'bGVuZ3RofWZvcihwZT0wO3BlPFMubGVuZ3RoOysrcGUpaWYoKCFSfHxSW1NbcGVdWzBdXSkmJiEoVjYuaW5kZXhPZihTW3BlXVswXSk+LTEpJiZudWxsIT1TW3BlXVsxXSl7dmFyIGV0PVNbcGVdWzFdLGN0PTA7aWYoUil7dmFyIEV0PWtbY3Q9K1JbU1twZV1bMF1dXTtpZigidmVyc2lvbiI9'@;
put 'PUV0LnAmJiJzdHJpbmciPT10eXBlb2YgZXQpe3ZhciBhdD1ldC5zcGxpdCgiLiIpO2V0PSgrYXRbMF08PDE2KSsoK2F0WzFdfHwwKX15ZT1DZihFdC50LGV0KX1lbHNle3ZhciBidD1IYyhldCk7LTE9PWJ0JiYoYnQ9MzEsZXQ9U3RyaW5nKGV0KSkseWU9Q2YoYnQsZXQpfW9lLnB1c2goeWUp'@;
put 'LChQZT1ibig4KSkud3JpdGVfc2hpZnQoNCxSP2N0OjIrcGUpLFEucHVzaChQZSksZ2UrPTgreWUubGVuZ3RofXZhciBqdD04KihvZS5sZW5ndGgrMSk7Zm9yKHBlPTA7cGU8b2UubGVuZ3RoOysrcGUpUVtwZV0ud3JpdGVfc2hpZnQoNCxqdCksanQrPW9lW3BlXS5sZW5ndGg7cmV0dXJuIEcu'@;
put 'd3JpdGVfc2hpZnQoNCxnZSksRy53cml0ZV9zaGlmdCg0LG9lLmxlbmd0aCksaihbR10uY29uY2F0KFEpLmNvbmNhdChvZSkpfWZ1bmN0aW9uIGo2KFMsUixrKXt2YXIgRz1TLmNvbnRlbnQ7aWYoIUcpcmV0dXJue307bW4oRywwKTt2YXIgUSxvZSxnZSxwZSx5ZT0wO0cuY2hrKCJmZWZmIiwi'@;
put 'Qnl0ZSBPcmRlcjogIiksRy5yZWFkX3NoaWZ0KDIpO3ZhciBQZT1HLnJlYWRfc2hpZnQoNCksTmU9Ry5yZWFkX3NoaWZ0KDE2KTtpZihOZSE9PXZlLnV0aWxzLmNvbnN0cy5IRUFERVJfQ0xTSUQmJk5lIT09ayl0aHJvdyBuZXcgRXJyb3IoIkJhZCBQcm9wZXJ0eVNldCBDTFNJRCAiK05lKTtp'@;
put 'ZigxIT09KFE9Ry5yZWFkX3NoaWZ0KDQpKSYmMiE9PVEpdGhyb3cgbmV3IEVycm9yKCJVbnJlY29nbml6ZWQgI1NldHM6ICIrUSk7aWYob2U9Ry5yZWFkX3NoaWZ0KDE2KSxwZT1HLnJlYWRfc2hpZnQoNCksMT09PVEmJnBlIT09Ry5sKXRocm93IG5ldyBFcnJvcigiTGVuZ3RoIG1pc21hdGNo'@;
put 'OiAiK3BlKyIgIT09ICIrRy5sKTsyPT09USYmKGdlPUcucmVhZF9zaGlmdCgxNikseWU9Ry5yZWFkX3NoaWZ0KDQpKTt2YXIgRXQsWWU9aWgoRyxSKSxldD17U3lzdGVtSWRlbnRpZmllcjpQZX07Zm9yKHZhciBjdCBpbiBZZSlldFtjdF09WWVbY3RdO2lmKGV0LkZNVElEPW9lLDE9PT1RKXJl'@;
put 'dHVybiBldDtpZih5ZS1HLmw9PTImJihHLmwrPTIpLEcubCE9PXllKXRocm93IG5ldyBFcnJvcigiTGVuZ3RoIG1pc21hdGNoIDI6ICIrRy5sKyIgIT09ICIreWUpO3RyeXtFdD1paChHLG51bGwpfWNhdGNoe31mb3IoY3QgaW4gRXQpZXRbY3RdPUV0W2N0XTtyZXR1cm4gZXQuRk1USUQ9W29l'@;
put 'LGdlXSxldH1mdW5jdGlvbiB6aShTLFIsayxHLFEsb2Upe3ZhciBnZT1ibihRPzY4OjQ4KSxwZT1bZ2VdO2dlLndyaXRlX3NoaWZ0KDIsNjU1MzQpLGdlLndyaXRlX3NoaWZ0KDIsMCksZ2Uud3JpdGVfc2hpZnQoNCw4NDI0MTI1OTkpLGdlLndyaXRlX3NoaWZ0KDE2LHZlLnV0aWxzLmNvbnN0'@;
put 'cy5IRUFERVJfQ0xTSUQsImhleCIpLGdlLndyaXRlX3NoaWZ0KDQsUT8yOjEpLGdlLndyaXRlX3NoaWZ0KDE2LFIsImhleCIpLGdlLndyaXRlX3NoaWZ0KDQsUT82ODo0OCk7dmFyIHllPUI2KFMsayxHKTtpZihwZS5wdXNoKHllKSxRKXt2YXIgUGU9QjYoUSxudWxsLG51bGwpO2dlLndyaXRl'@;
put 'X3NoaWZ0KDE2LG9lLCJoZXgiKSxnZS53cml0ZV9zaGlmdCg0LDY4K3llLmxlbmd0aCkscGUucHVzaChQZSl9cmV0dXJuIGoocGUpfWZ1bmN0aW9uIHIyKFMsUil7cmV0dXJuIFMucmVhZF9zaGlmdChSKSxudWxsfWZ1bmN0aW9uIHVvKFMsUil7cmV0dXJuIDE9PT1TLnJlYWRfc2hpZnQoUil9'@;
put 'ZnVuY3Rpb24gdHUoUyxSKXtyZXR1cm4gUnx8KFI9Ym4oMikpLFIud3JpdGVfc2hpZnQoMiwrISFTKSxSfWZ1bmN0aW9uIEVjKFMpe3JldHVybiBTLnJlYWRfc2hpZnQoMiwidSIpfWZ1bmN0aW9uIGEwKFMsUil7cmV0dXJuIFJ8fChSPWJuKDIpKSxSLndyaXRlX3NoaWZ0KDIsUyksUn1mdW5j'@;
put 'dGlvbiB3NChTLFIpe3JldHVybiBmdW5jdGlvbiB4dihTLFIsayl7Zm9yKHZhciBHPVtdLFE9Uy5sK1I7Uy5sPFE7KUcucHVzaChrKFMsUS1TLmwpKTtpZihRIT09Uy5sKXRocm93IG5ldyBFcnJvcigiU2x1cnAgZXJyb3IiKTtyZXR1cm4gR30oUyxSLEVjKX1mdW5jdGlvbiBLaShTLFIsayl7'@;
put 'cmV0dXJuIGt8fChrPWJuKDIpKSxrLndyaXRlX3NoaWZ0KDEsImUiPT1SPytTOishIVMpLGsud3JpdGVfc2hpZnQoMSwiZSI9PVI/MTowKSxrfWZ1bmN0aW9uIFVhKFMsUixrKXt2YXIgRz1TLnJlYWRfc2hpZnQoayYmay5iaWZmPj0xMj8yOjEpLFE9InNiY3MtY29udCIsb2U9UDtrJiZrLmJp'@;
put 'ZmY+PTgmJihQPTEyMDApLGsmJjghPWsuYmlmZj8xMj09ay5iaWZmJiYoUT0id3N0ciIpOlMucmVhZF9zaGlmdCgxKSYmKFE9ImRiY3MtY29udCIpLGsuYmlmZj49MiYmay5iaWZmPD01JiYoUT0iY3BzdHIiKTt2YXIgcGU9Rz9TLnJlYWRfc2hpZnQoRyxRKToiIjtyZXR1cm4gUD1vZSxwZX1m'@;
put 'dW5jdGlvbiBmYyhTKXt2YXIgUj1QO1A9MTIwMDt2YXIgeWUsaz1TLnJlYWRfc2hpZnQoMiksRz1TLnJlYWRfc2hpZnQoMSksUT00Jkcsb2U9OCZHLGdlPTErKDEmRykscGU9MCxQZT17fTtvZSYmKHBlPVMucmVhZF9zaGlmdCgyKSksUSYmKHllPVMucmVhZF9zaGlmdCg0KSk7dmFyIFllPTA9'@;
put 'PT1rPyIiOlMucmVhZF9zaGlmdChrLDI9PWdlPyJkYmNzLWNvbnQiOiJzYmNzLWNvbnQiKTtpZihvZSlmb3IoUGUuX1I9W107cGUtLSA+MDspUGUuX1IucHVzaCh7aWR4OlMucmVhZF9zaGlmdCgyKSxpZm50OlMucmVhZF9zaGlmdCgyKX0pO3JldHVybiBRJiYoUy5sKz15ZSksUGUudD1ZZSxv'@;
put 'ZXx8KFBlLnI9Ijx0PiIrUGUudCsiPC90PiIpLFA9UixQZX1mdW5jdGlvbiBOYyhTLFIpe3ZhciBrPVMuUiYmUy5SLmxlbmd0aHx8Uy5yO1MuciYmKFMuUj13NShTLnIpKTt2YXIgRz0iIixRPTA7az9TLlIuZm9yRWFjaChmdW5jdGlvbihFdCl7USsrLEcrPUV0LnZ8fCIifSk6KEc9Uy50fHwi'@;
put 'IixRPTEpO3ZhciBvZT1ibigzKyhRPjE/MjowKSk7b2Uud3JpdGVfc2hpZnQoMixHLmxlbmd0aCksb2Uud3JpdGVfc2hpZnQoMSwxfChRPjE/ODowKSksUT4xJiZvZS53cml0ZV9zaGlmdCgyLFEpO3ZhciBnZT1ibigyKkcubGVuZ3RoKTtnZS53cml0ZV9zaGlmdCgyKkcubGVuZ3RoLEcsInV0'@;
put 'ZjE2bGUiKTt2YXIgcGU9W29lLGdlXTtpZihrKXt2YXIgeWU9Ym4oNCpTLlIubGVuZ3RoKSxQZT0wO3BlLnB1c2goeWUpO2Zvcih2YXIgTmU9MDtOZTxTLlIubGVuZ3RoOysrTmUpe3ZhciBZZT1TLlJbTmVdO3llLndyaXRlX3NoaWZ0KDIsUGUpLFBlKz0oWWUudnx8IiIpLmxlbmd0aDt2YXIg'@;
put 'ZXQ9WWUucz9sMChSLmNlbGxYZnMsUi5jZWxsU3R5bGVYZnMse3Q6Im4iLHY6MCxzOlllLnN9LFIpOjAsY3Q9Ui5jZWxsWGZzW2V0XS5mb250SWQ7eWUud3JpdGVfc2hpZnQoMixjdDw0P2N0OmN0KzEpfX1yZXR1cm4gaihwZSl9ZnVuY3Rpb24gcmMoUyxSLGspe2lmKGspe2lmKGsuYmlmZj49'@;
put 'MiYmay5iaWZmPD01KXJldHVybiBTLnJlYWRfc2hpZnQoUiwiY3BzdHIiKTtpZihrLmJpZmY+PTEyKXJldHVybiBTLnJlYWRfc2hpZnQoUiwiZGJjcy1jb250Iil9dmFyIFE9Uy5yZWFkX3NoaWZ0KDEpO3JldHVybiBTLnJlYWRfc2hpZnQoUiwwPT09UT8ic2Jjcy1jb250IjoiZGJjcy1jb250'@;
put 'Iil9ZnVuY3Rpb24gbnUoUyxSLGspe3ZhciBHPVMucmVhZF9zaGlmdChrJiYyPT1rLmJpZmY/MToyKTtyZXR1cm4gMD09PUc/KFMubCsrLCIiKTpyYyhTLEcsayl9ZnVuY3Rpb24gWDAoUyxSLGspe2lmKGsuYmlmZj41KXJldHVybiBudShTLDAsayk7dmFyIEc9Uy5yZWFkX3NoaWZ0KDEpO3Jl'@;
put 'dHVybiAwPT09Rz8oUy5sKyssIiIpOlMucmVhZF9zaGlmdChHLGsuYmlmZjw9NHx8IVMubGVucz8iY3BzdHIiOiJzYmNzLWNvbnQiKX1mdW5jdGlvbiBjbChTLFIsayl7cmV0dXJuIGt8fChrPWJuKDMrMipTLmxlbmd0aCkpLGsud3JpdGVfc2hpZnQoMixTLmxlbmd0aCksay53cml0ZV9zaGlm'@;
put 'dCgxLDEpLGsud3JpdGVfc2hpZnQoMzEsUywidXRmMTZsZSIpLGt9ZnVuY3Rpb24gQzQoUyl7dmFyIFI9Uy5yZWFkX3NoaWZ0KDQpO3JldHVybiBSPjA/Uy5yZWFkX3NoaWZ0KFIsInV0ZjE2bGUiKS5yZXBsYWNlKEUsIiIpOiIifWZ1bmN0aW9uIG8wKFMsUil7Unx8KFI9Ym4oNisyKlMubGVu'@;
put 'Z3RoKSksUi53cml0ZV9zaGlmdCg0LDErUy5sZW5ndGgpO2Zvcih2YXIgaz0wO2s8Uy5sZW5ndGg7KytrKVIud3JpdGVfc2hpZnQoMixTLmNoYXJDb2RlQXQoaykpO3JldHVybiBSLndyaXRlX3NoaWZ0KDIsMCksUn1mdW5jdGlvbiBTNChTKXt2YXIgUj1ibig1MTIpLGs9MCxHPVMuVGFyZ2V0'@;
put 'OyJmaWxlOi8vIj09Ry5zbGljZSgwLDcpJiYoRz1HLnNsaWNlKDcpKTt2YXIgUT1HLmluZGV4T2YoIiMiKSxvZT1RPi0xPzMxOjIzO3N3aXRjaChHLmNoYXJBdCgwKSl7Y2FzZSIjIjpvZT0yODticmVhaztjYXNlIi4iOm9lJj0tM31SLndyaXRlX3NoaWZ0KDQsMiksUi53cml0ZV9zaGlmdCg0'@;
put 'LG9lKTt2YXIgZ2U9WzgsNjgxNTgyNyw2NjE5MjM3LDQ4NDk3ODAsODNdO2ZvcihrPTA7azxnZS5sZW5ndGg7KytrKVIud3JpdGVfc2hpZnQoNCxnZVtrXSk7aWYoMjg9PW9lKW8wKEc9Ry5zbGljZSgxKSxSKTtlbHNlIGlmKDImb2Upe2ZvcihnZT0iZTAgYzkgZWEgNzkgZjkgYmEgY2UgMTEg'@;
put 'OGMgODIgMDAgYWEgMDAgNGIgYTkgMGIiLnNwbGl0KCIgIiksaz0wO2s8Z2UubGVuZ3RoOysraylSLndyaXRlX3NoaWZ0KDEscGFyc2VJbnQoZ2Vba10sMTYpKTt2YXIgcGU9UT4tMT9HLnNsaWNlKDAsUSk6Rztmb3IoUi53cml0ZV9zaGlmdCg0LDIqKHBlLmxlbmd0aCsxKSksaz0wO2s8cGUu'@;
put 'bGVuZ3RoOysraylSLndyaXRlX3NoaWZ0KDIscGUuY2hhckNvZGVBdChrKSk7Ui53cml0ZV9zaGlmdCgyLDApLDgmb2UmJm8wKFE+LTE/Ry5zbGljZShRKzEpOiIiLFIpfWVsc2V7Zm9yKGdlPSIwMyAwMyAwMCAwMCAwMCAwMCAwMCAwMCBjMCAwMCAwMCAwMCAwMCAwMCAwMCA0NiIuc3BsaXQo'@;
put 'IiAiKSxrPTA7azxnZS5sZW5ndGg7KytrKVIud3JpdGVfc2hpZnQoMSxwYXJzZUludChnZVtrXSwxNikpO2Zvcih2YXIgeWU9MDsiLi4vIj09Ry5zbGljZSgzKnllLDMqeWUrMyl8fCIuLlxcIj09Ry5zbGljZSgzKnllLDMqeWUrMyk7KSsreWU7Zm9yKFIud3JpdGVfc2hpZnQoMix5ZSksUi53'@;
put 'cml0ZV9zaGlmdCg0LEcubGVuZ3RoLTMqeWUrMSksaz0wO2s8Ry5sZW5ndGgtMyp5ZTsrK2spUi53cml0ZV9zaGlmdCgxLDI1NSZHLmNoYXJDb2RlQXQoayszKnllKSk7Zm9yKFIud3JpdGVfc2hpZnQoMSwwKSxSLndyaXRlX3NoaWZ0KDIsNjU1MzUpLFIud3JpdGVfc2hpZnQoMiw1NzAwNSks'@;
put 'az0wO2s8NjsrK2spUi53cml0ZV9zaGlmdCg0LDApfXJldHVybiBSLnNsaWNlKDAsUi5sKX1mdW5jdGlvbiBNZihTKXtyZXR1cm5bUy5yZWFkX3NoaWZ0KDEpLFMucmVhZF9zaGlmdCgxKSxTLnJlYWRfc2hpZnQoMSksUy5yZWFkX3NoaWZ0KDEpXX1mdW5jdGlvbiB1ZChTLFIpe3ZhciBrPU1m'@;
put 'KFMpO3JldHVybiBrWzNdPTAsa31mdW5jdGlvbiB3MChTKXtyZXR1cm57cjpTLnJlYWRfc2hpZnQoMiksYzpTLnJlYWRfc2hpZnQoMiksaXhmZTpTLnJlYWRfc2hpZnQoMil9fWZ1bmN0aW9uIGEyKFMsUixrLEcpe3JldHVybiBHfHwoRz1ibig2KSksRy53cml0ZV9zaGlmdCgyLFMpLEcud3Jp'@;
put 'dGVfc2hpZnQoMixSKSxHLndyaXRlX3NoaWZ0KDIsa3x8MCksR31mdW5jdGlvbiB4ZihTLFIsayl7dmFyIEc9ay5iaWZmPjg/NDoyO3JldHVybltTLnJlYWRfc2hpZnQoRyksUy5yZWFkX3NoaWZ0KEcsImkiKSxTLnJlYWRfc2hpZnQoRywiaSIpXX1mdW5jdGlvbiB3byhTKXtyZXR1cm5bUy5y'@;
put 'ZWFkX3NoaWZ0KDIpLEkxKFMpXX1mdW5jdGlvbiBzMihTKXt2YXIgUj1TLnJlYWRfc2hpZnQoMiksaz1TLnJlYWRfc2hpZnQoMik7cmV0dXJue3M6e2M6Uy5yZWFkX3NoaWZ0KDIpLHI6Un0sZTp7YzpTLnJlYWRfc2hpZnQoMikscjprfX19ZnVuY3Rpb24gdnUoUyxSKXtyZXR1cm4gUnx8KFI9'@;
put 'Ym4oOCkpLFIud3JpdGVfc2hpZnQoMixTLnMuciksUi53cml0ZV9zaGlmdCgyLFMuZS5yKSxSLndyaXRlX3NoaWZ0KDIsUy5zLmMpLFIud3JpdGVfc2hpZnQoMixTLmUuYyksUn1mdW5jdGlvbiBNNChTKXt2YXIgUj1TLnJlYWRfc2hpZnQoMiksaz1TLnJlYWRfc2hpZnQoMik7cmV0dXJue3M6'@;
put 'e2M6Uy5yZWFkX3NoaWZ0KDEpLHI6Un0sZTp7YzpTLnJlYWRfc2hpZnQoMSkscjprfX19dmFyIGdjPU00O2Z1bmN0aW9uIGI1KFMpe1MubCs9NDt2YXIgUj1TLnJlYWRfc2hpZnQoMiksaz1TLnJlYWRfc2hpZnQoMiksRz1TLnJlYWRfc2hpZnQoMik7cmV0dXJuIFMubCs9MTIsW2ssUixHXX1m'@;
put 'dW5jdGlvbiBydShTKXtTLmwrPTIsUy5sKz1TLnJlYWRfc2hpZnQoMil9dmFyIEVmPXswOnJ1LDQ6cnUsNTpydSw2OnJ1LDc6ZnVuY3Rpb24gSHUoUyl7cmV0dXJuIFMubCs9NCxTLmNmPVMucmVhZF9zaGlmdCgyKSx7fX0sODpydSw5OnJ1LDEwOnJ1LDExOnJ1LDEyOnJ1LDEzOmZ1bmN0aW9u'@;
put 'IEZ1KFMpe3ZhciBSPXt9O3JldHVybiBTLmwrPTQsUy5sKz0xNixSLmZTaGFyZWROb3RlPVMucmVhZF9zaGlmdCgyKSxTLmwrPTQsUn0sMTQ6cnUsMTU6cnUsMTY6cnUsMTc6cnUsMTg6cnUsMTk6cnUsMjA6cnUsMjE6YjV9O2Z1bmN0aW9uIFZjKFMsUil7dmFyIGs9e0JJRkZWZXI6MCxkdDow'@;
put 'fTtzd2l0Y2goay5CSUZGVmVyPVMucmVhZF9zaGlmdCgyKSwoUi09Mik+PTImJihrLmR0PVMucmVhZF9zaGlmdCgyKSxTLmwtPTIpLGsuQklGRlZlcil7Y2FzZSAxNTM2OmNhc2UgMTI4MDpjYXNlIDEwMjQ6Y2FzZSA3Njg6Y2FzZSA1MTI6Y2FzZSAyOmNhc2UgNzpicmVhaztkZWZhdWx0Omlm'@;
put 'KFI+Nil0aHJvdyBuZXcgRXJyb3IoIlVuZXhwZWN0ZWQgQklGRiBWZXIgIitrLkJJRkZWZXIpfXJldHVybiBTLnJlYWRfc2hpZnQoUiksa31mdW5jdGlvbiB4NChTLFIsayl7dmFyIEc9MTUzNixRPTE2O3N3aXRjaChrLmJvb2tUeXBlKXtjYXNlImJpZmY4IjpjYXNlInhsYSI6YnJlYWs7Y2Fz'@;
put 'ZSJiaWZmNSI6Rz0xMjgwLFE9ODticmVhaztjYXNlImJpZmY0IjpHPTQsUT02O2JyZWFrO2Nhc2UiYmlmZjMiOkc9MyxRPTY7YnJlYWs7Y2FzZSJiaWZmMiI6Rz0yLFE9NDticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigidW5zdXBwb3J0ZWQgQklGRiB2ZXJzaW9uIil9dmFyIG9lPWJu'@;
put 'KFEpO3JldHVybiBvZS53cml0ZV9zaGlmdCgyLEcpLG9lLndyaXRlX3NoaWZ0KDIsUiksUT40JiZvZS53cml0ZV9zaGlmdCgyLDI5MjgyKSxRPjYmJm9lLndyaXRlX3NoaWZ0KDIsMTk5NyksUT44JiYob2Uud3JpdGVfc2hpZnQoMiw0OTE2MSksb2Uud3JpdGVfc2hpZnQoMiwxKSxvZS53cml0'@;
put 'ZV9zaGlmdCgyLDE3OTgpLG9lLndyaXRlX3NoaWZ0KDIsMCkpLG9lfWZ1bmN0aW9uIGwyKFMsUil7dmFyIGs9IVJ8fFIuYmlmZj49OD8yOjEsRz1ibig4K2sqUy5uYW1lLmxlbmd0aCk7Ry53cml0ZV9zaGlmdCg0LFMucG9zKSxHLndyaXRlX3NoaWZ0KDEsUy5oc3x8MCksRy53cml0ZV9zaGlm'@;
put 'dCgxLFMuZHQpLEcud3JpdGVfc2hpZnQoMSxTLm5hbWUubGVuZ3RoKSxSLmJpZmY+PTgmJkcud3JpdGVfc2hpZnQoMSwxKSxHLndyaXRlX3NoaWZ0KGsqUy5uYW1lLmxlbmd0aCxTLm5hbWUsUi5iaWZmPDg/InNiY3MiOiJ1dGYxNmxlIik7dmFyIFE9Ry5zbGljZSgwLEcubCk7cmV0dXJuIFEu'@;
put 'bD1HLmwsUX1mdW5jdGlvbiBpaShTKXtyZXR1cm4gUy5yZWFkX3NoaWZ0KDQpLG11KFMpfWZ1bmN0aW9uIFNvKFMpe3JldHVybiBTLnJlYWRfc2hpZnQoNCksbjAoUyl9ZnVuY3Rpb24gTnUoUyxSLGspe3JldHVybiBTLnJlYWRfc2hpZnQoNCksWEIoUywwLGspfWZ1bmN0aW9uIGMyKFMsUixr'@;
put 'KXt2YXIgRz0wO2smJjI9PWsuYmlmZnx8KEc9Uy5yZWFkX3NoaWZ0KDIpKTt2YXIgUT1TLnJlYWRfc2hpZnQoMik7cmV0dXJuIGsmJjI9PWsuYmlmZiYmKEc9MS0oUT4+MTUpLFEmPTMyNzY3KSxbe1Vuc3luY2VkOjEmRyxEeVplcm86KDImRyk+PjEsRXhBc2M6KDQmRyk+PjIsRXhEc2M6KDgm'@;
put 'Ryk+PjN9LFFdfWZ1bmN0aW9uIGFWKFMsUixrLEcpe3ZhciBRPWsmJjU9PWsuYmlmZjtHfHwoRz1ibihRPzMrUi5sZW5ndGg6NSsyKlIubGVuZ3RoKSksRy53cml0ZV9zaGlmdCgyLFMpLEcud3JpdGVfc2hpZnQoUT8xOjIsUi5sZW5ndGgpLFF8fEcud3JpdGVfc2hpZnQoMSwxKSxHLndyaXRl'@;
put 'X3NoaWZ0KChRPzE6MikqUi5sZW5ndGgsUixRPyJzYmNzIjoidXRmMTZsZSIpO3ZhciBvZT1HLmxlbmd0aD5HLmw/Ry5zbGljZSgwLEcubCk6RztyZXR1cm4gbnVsbD09b2UubCYmKG9lLmw9b2UubGVuZ3RoKSxvZX12YXIgdTI9WDA7ZnVuY3Rpb24gWHcoUyxSLGspe3ZhciBHPVMubCtSLFE9'@;
put 'OCE9ay5iaWZmJiZrLmJpZmY/Mjo0LG9lPVMucmVhZF9zaGlmdChRKSxnZT1TLnJlYWRfc2hpZnQoUSkscGU9Uy5yZWFkX3NoaWZ0KDIpLHllPVMucmVhZF9zaGlmdCgyKTtyZXR1cm4gUy5sPUcse3M6e3I6b2UsYzpwZX0sZTp7cjpnZSxjOnllfX19ZnVuY3Rpb24geTUoUyxSLGssRyl7dmFy'@;
put 'IG9lPSFrfHwhay5iaWZmfHw4PT1rLmJpZmY7R3x8KEc9Ym4oayYmNT09ay5iaWZmPzE2OjIwKSksRy53cml0ZV9zaGlmdCgyLG9lJiZrLmNlbGxTdHlsZXMmJlMuZm9udElkJiYoUy5mb250SWQ8ND9TLmZvbnRJZDpTLmZvbnRJZCsxKXx8MCk7dmFyIGdlPTE7Uy5wcm90ZWN0aW9uJiYoUy5w'@;
put 'cm90ZWN0aW9uLmVkaXRhYmxlJiYoZ2UmPS0yKSxTLnByb3RlY3Rpb24uaGlkZGVuJiYoZ2V8PTIpKSxTLnN0eWxlPyhHLndyaXRlX3NoaWZ0KDIsUy5udW1GbXRJZHx8MCksRy53cml0ZV9zaGlmdCgyLDY1NTI0fGdlKSk6KEcud3JpdGVfc2hpZnQoMixTLm51bUZtdElkfHwwKSxHLndyaXRl'@;
put 'X3NoaWZ0KDIsUjw8NHxnZSkpO3ZhciBwZT1TLmFsaWdubWVudHx8e307aWYob2Upe3ZhciB5ZT0wLFBlPTA7RDUuaW5kZXhPZihwZS5ob3Jpem9udGFsKT4tMSYmKHllfD1ENS5pbmRleE9mKHBlLmhvcml6b250YWwpKSxwZS53cmFwVGV4dCYmKHllfD04KSx0OC5pbmRleE9mKHBlLnZlcnRp'@;
put 'Y2FsKT4tMT95ZXw9dDguaW5kZXhPZihwZS52ZXJ0aWNhbCk8PDQ6bnVsbD09cGUudmVydGljYWwmJih5ZXw9MzIpLEcud3JpdGVfc2hpZnQoMSx5ZSksRy53cml0ZV9zaGlmdCgxLDApLHBlLnNocmlua1RvRml0JiYoUGV8PTE2KSxHLndyaXRlX3NoaWZ0KDIsUGUpO3ZhciBOZT1udWxsO251'@;
put 'bGwhPVMuYm9yZGVySWQmJihOZT1rLkJvcmRlcnMmJmsuQm9yZGVyc1tTLmJvcmRlcklkfHwwXXx8e30pO3ZhciBZZT0wLGV0PTAsY3Q9MDtOZSYmKG51bGwhPU5lLmxlZnQmJk5lLmxlZnQuc3R5bGUmJihZZXw9KGN0PXBkLmluZGV4T2YoTmUubGVmdC5zdHlsZSkpPi0xP2N0OjApLG51bGwh'@;
put 'PU5lLnJpZ2h0JiZOZS5yaWdodC5zdHlsZSYmKFllfD0oKGN0PXBkLmluZGV4T2YoTmUucmlnaHQuc3R5bGUpKT4tMT9jdDowKTw8NCksbnVsbCE9TmUudG9wJiZOZS50b3Auc3R5bGUmJihldHw9KGN0PXBkLmluZGV4T2YoTmUudG9wLnN0eWxlKSk+LTE/Y3Q6MCksbnVsbCE9TmUuYm90dG9t'@;
put 'JiZOZS5ib3R0b20uc3R5bGUmJihldHw9KChjdD1wZC5pbmRleE9mKE5lLmJvdHRvbS5zdHlsZSkpPi0xP2N0OjApPDw0KSksRy53cml0ZV9zaGlmdCgxLFllKSxHLndyaXRlX3NoaWZ0KDEsZXQpLEcud3JpdGVfc2hpZnQoMiwwKSxHLndyaXRlX3NoaWZ0KDIsMCksRy53cml0ZV9zaGlmdCgx'@;
put 'LDApO3ZhciBFdD0wLGF0PWsuRmlsbHMmJmsuRmlsbHNbUy5maWxsSWR8fDBdfHx7fTsoYXQuZmdDb2xvcnx8YXQuYmdDb2xvcikmJihFdHw9NCksRy53cml0ZV9zaGlmdCgxLEV0KTt2YXIgYnQ9MDtidHw9UDQoYXQuZmdDb2xvciw2NSksYnR8PVA0KGF0LmJnQ29sb3IsNjUpPDw3LEcud3Jp'@;
put 'dGVfc2hpZnQoMixidCl9ZWxzZSBHLndyaXRlX3NoaWZ0KDQsMCksRy53cml0ZV9zaGlmdCg0LDApLEcud3JpdGVfc2hpZnQoMiwwKTtyZXR1cm4gR31mdW5jdGlvbiBFNChTLFIsayl7dmFyIEc9dzAoUyk7KDI9PWsuYmlmZnx8OT09UikmJisrUy5sO3ZhciBRPWZ1bmN0aW9uIFVsKFMpe3Zh'@;
put 'ciBSPVMucmVhZF9zaGlmdCgxKTtyZXR1cm4gMT09PVMucmVhZF9zaGlmdCgxKT9SOjE9PT1SfShTKTtyZXR1cm4gRy52YWw9USxHLnQ9ITA9PT1RfHwhMT09PVE/ImIiOiJlIixHfXZhciBKQT1mdW5jdGlvbiB2NShTLFIsayl7cmV0dXJuIDA9PT1SPyIiOlgwKFMsMCxrKX07ZnVuY3Rpb24g'@;
put 'ZUMoUyxSLGspe3ZhciBRLEc9Uy5yZWFkX3NoaWZ0KDIpLG9lPXtmQnVpbHRJbjoxJkcsZldhbnRBZHZpc2U6Rz4+PjEmMSxmV2FudFBpY3Q6Rz4+PjImMSxmT2xlOkc+Pj4zJjEsZk9sZUxpbms6Rz4+PjQmMSxjZjpHPj4+NSYxMDIzLGZJY29uOkc+Pj4xNSYxfTtyZXR1cm4gMTQ4NDk9PT1r'@;
put 'LnNiY2NoJiYoUT1mdW5jdGlvbiB6NihTLFIsayl7Uy5sKz00O3ZhciBHPVMubCsoUi09NCksUT1VYShTLDAsayksb2U9Uy5yZWFkX3NoaWZ0KDIpO2lmKG9lIT09KEctPVMubCkpdGhyb3cgbmV3IEVycm9yKCJNYWxmb3JtZWQgQWRkaW5VZGY6IHBhZGRpbmcgPSAiK0crIiAhPSAiK29lKTty'@;
put 'ZXR1cm4gUy5sKz1vZSxRfShTLFItMixrKSksb2UuYm9keT1RfHxTLnJlYWRfc2hpZnQoUi0yKSwic3RyaW5nIj09dHlwZW9mIFEmJihvZS5OYW1lPVEpLG9lfXZhciBjVj1bIl94bG5tLkNvbnNvbGlkYXRlX0FyZWEiLCJfeGxubS5BdXRvX09wZW4iLCJfeGxubS5BdXRvX0Nsb3NlIiwiX3hs'@;
put 'bm0uRXh0cmFjdCIsIl94bG5tLkRhdGFiYXNlIiwiX3hsbm0uQ3JpdGVyaWEiLCJfeGxubS5QcmludF9BcmVhIiwiX3hsbm0uUHJpbnRfVGl0bGVzIiwiX3hsbm0uUmVjb3JkZXIiLCJfeGxubS5EYXRhX0Zvcm0iLCJfeGxubS5BdXRvX0FjdGl2YXRlIiwiX3hsbm0uQXV0b19EZWFjdGl2YXRl'@;
put 'IiwiX3hsbm0uU2hlZXRfVGl0bGUiLCJfeGxubS5fRmlsdGVyRGF0YWJhc2UiXTtmdW5jdGlvbiB0QyhTLFIsayl7dmFyIEc9Uy5sK1IsUT1TLnJlYWRfc2hpZnQoMiksb2U9Uy5yZWFkX3NoaWZ0KDEpLGdlPVMucmVhZF9zaGlmdCgxKSxwZT1TLnJlYWRfc2hpZnQoayYmMj09ay5iaWZmPzE6'@;
put 'MikseWU9MDsoIWt8fGsuYmlmZj49NSkmJig1IT1rLmJpZmYmJihTLmwrPTIpLHllPVMucmVhZF9zaGlmdCgyKSw1PT1rLmJpZmYmJihTLmwrPTIpLFMubCs9NCk7dmFyIFBlPXJjKFMsZ2Usayk7MzImUSYmKFBlPWNWW1BlLmNoYXJDb2RlQXQoMCldKTt2YXIgTmU9Ry1TLmw7ayYmMj09ay5i'@;
put 'aWZmJiYtLU5lO3ZhciBZZT1HIT1TLmwmJjAhPT1wZSYmTmU+MD9mdW5jdGlvbiBBbmUoUyxSLGssRyl7dmFyIGdlLFE9Uy5sK1Isb2U9bGgoUyxHLGspO3JldHVybiBRIT09Uy5sJiYoZ2U9QjQoUyxRLVMubCxvZSxrKSksW29lLGdlXX0oUyxOZSxrLHBlKTpbXTtyZXR1cm57Y2hLZXk6b2Us'@;
put 'TmFtZTpQZSxpdGFiOnllLHJnY2U6WWV9fWZ1bmN0aW9uIFR2KFMsUixrKXtpZihrLmJpZmY8OClyZXR1cm4gZnVuY3Rpb24gbkMoUyxSLGspezM9PVNbUy5sKzFdJiZTW1MubF0rKzt2YXIgRz1VYShTLDAsayk7cmV0dXJuIDM9PUcuY2hhckNvZGVBdCgwKT9HLnNsaWNlKDEpOkd9KFMsMCxr'@;
put 'KTtmb3IodmFyIEc9W10sUT1TLmwrUixvZT1TLnJlYWRfc2hpZnQoay5iaWZmPjg/NDoyKTswIT1vZS0tOylHLnB1c2goeGYoUywwLGspKTtpZihTLmwhPVEpdGhyb3cgbmV3IEVycm9yKCJCYWQgRXh0ZXJuU2hlZXQ6ICIrUy5sKyIgIT0gIitRKTtyZXR1cm4gR31mdW5jdGlvbiBrdihTLFIs'@;
put 'ayl7dmFyIEc9Z2MoUyw2KTtzd2l0Y2goay5iaWZmKXtjYXNlIDI6Uy5sKyssUi09NzticmVhaztjYXNlIDM6Y2FzZSA0OlMubCs9MixSLT04O2JyZWFrO2RlZmF1bHQ6Uy5sKz02LFItPTEyfXJldHVybltHLGNEKFMsUixrKV19dmFyIGVrPVtdO2Z1bmN0aW9uIGZWKFMpe3ZhciBSPWJuKDI0'@;
put 'KSxrPU5vKFNbMF0pO1Iud3JpdGVfc2hpZnQoMixrLnIpLFIud3JpdGVfc2hpZnQoMixrLnIpLFIud3JpdGVfc2hpZnQoMixrLmMpLFIud3JpdGVfc2hpZnQoMixrLmMpO2Zvcih2YXIgRz0iZDAgYzkgZWEgNzkgZjkgYmEgY2UgMTEgOGMgODIgMDAgYWEgMDAgNGIgYTkgMGIiLnNwbGl0KCIg'@;
put 'IiksUT0wO1E8MTY7KytRKVIud3JpdGVfc2hpZnQoMSxwYXJzZUludChHW1FdLDE2KSk7cmV0dXJuIGooW1IsUzQoU1sxXSldKX1mdW5jdGlvbiBnVihTKXt2YXIgUj1TWzFdLlRvb2x0aXAsaz1ibigxMCsyKihSLmxlbmd0aCsxKSk7ay53cml0ZV9zaGlmdCgyLDIwNDgpO3ZhciBHPU5vKFNb'@;
put 'MF0pO2sud3JpdGVfc2hpZnQoMixHLnIpLGsud3JpdGVfc2hpZnQoMixHLnIpLGsud3JpdGVfc2hpZnQoMixHLmMpLGsud3JpdGVfc2hpZnQoMixHLmMpO2Zvcih2YXIgUT0wO1E8Ui5sZW5ndGg7KytRKWsud3JpdGVfc2hpZnQoMixSLmNoYXJDb2RlQXQoUSkpO3JldHVybiBrLndyaXRlX3No'@;
put 'aWZ0KDIsMCksa31mdW5jdGlvbiByQyhTLFIsayl7aWYoIWsuY2VsbFN0eWxlcylyZXR1cm4gSW4oUyxSKTt2YXIgRz1rJiZrLmJpZmY+PTEyPzQ6MixRPVMucmVhZF9zaGlmdChHKSxvZT1TLnJlYWRfc2hpZnQoRyksZ2U9Uy5yZWFkX3NoaWZ0KEcpLHBlPVMucmVhZF9zaGlmdChHKSx5ZT1T'@;
put 'LnJlYWRfc2hpZnQoMik7Mj09RyYmKFMubCs9Mik7dmFyIFBlPXtzOlEsZTpvZSx3OmdlLGl4ZmU6cGUsZmxhZ3M6eWV9O3JldHVybihrLmJpZmY+PTV8fCFrLmJpZmYpJiYoUGUubGV2ZWw9eWU+PjgmNyksUGV9ZWtbOF09ZnVuY3Rpb24oUyxSKXt2YXIgaz1TLmwrUjtTLmwrPTEwO3ZhciBH'@;
put 'PVMucmVhZF9zaGlmdCgyKTtTLmwrPTQsUy5sKz0yLFMubCs9MixTLmwrPTIsUy5sKz00O3ZhciBRPVMucmVhZF9zaGlmdCgxKTtyZXR1cm4gUy5sKz1RLFMubD1rLHtmbXQ6R319O3ZhciBRdGU9dzAsbms9dzQsTzA9bnU7dmFyIEIzPWZ1bmN0aW9uKCl7dmFyIFM9ezE6NDM3LDI6ODUwLDM6'@;
put 'MTI1Miw0OjFlNCwxMDA6ODUyLDEwMTo4NjYsMTAyOjg2NSwxMDM6ODYxLDEwNDo4OTUsMTA1OjYyMCwxMDY6NzM3LDEwNzo4NTcsMTIwOjk1MCwxMjE6OTQ5LDEyMjo5MzYsMTIzOjkzMiwxMjQ6ODc0LDEyNToxMjU1LDEyNjoxMjU2LDE1MDoxMDAwNywxNTE6MTAwMjksMTUyOjEwMDA2LDIw'@;
put 'MDoxMjUwLDIwMToxMjUxLDIwMjoxMjU0LDIwMzoxMjUzLDA6MjAxMjcsODo4NjUsOTo0MzcsMTA6ODUwLDExOjQzNywxMzo0MzcsMTQ6ODUwLDE1OjQzNywxNjo4NTAsMTc6NDM3LDE4Ojg1MCwxOTo5MzIsMjA6ODUwLDIxOjQzNywyMjo4NTAsMjM6ODY1LDI0OjQzNywyNTo0MzcsMjY6ODUw'@;
put 'LDI3OjQzNywyODo4NjMsMjk6ODUwLDMxOjg1MiwzNDo4NTIsMzU6ODUyLDM2Ojg2MCwzNzo4NTAsMzg6ODY2LDU1Ojg1MCw2NDo4NTIsNzc6OTM2LDc4Ojk0OSw3OTo5NTAsODA6ODc0LDg3OjEyNTIsODg6MTI1Miw4OToxMjUyLDEwODo4NjMsMTM0OjczNywxMzU6ODUyLDEzNjo4NTcsMjA0'@;
put 'OjEyNTcsMjU1OjE2OTY5fSxSPVZlKHsxOjQzNywyOjg1MCwzOjEyNTIsNDoxZTQsMTAwOjg1MiwxMDE6ODY2LDEwMjo4NjUsMTAzOjg2MSwxMDQ6ODk1LDEwNTo2MjAsMTA2OjczNywxMDc6ODU3LDEyMDo5NTAsMTIxOjk0OSwxMjI6OTM2LDEyMzo5MzIsMTI0Ojg3NCwxMjU6MTI1NSwxMjY6'@;
put 'MTI1NiwxNTA6MTAwMDcsMTUxOjEwMDI5LDE1MjoxMDAwNiwyMDA6MTI1MCwyMDE6MTI1MSwyMDI6MTI1NCwyMDM6MTI1MywwOjIwMTI3fSk7ZnVuY3Rpb24gUSh5ZSxQZSl7dmFyIE5lPVBlfHx7fTtyZXR1cm4gTmUuZGF0ZU5GfHwoTmUuZGF0ZU5GPSJ5eXl5bW1kZCIpLHA0KGZ1bmN0aW9u'@;
put 'IEcoeWUsUGUpe3ZhciBOZT1bXSxZZT1WKDEpO3N3aXRjaChQZS50eXBlKXtjYXNlImJhc2U2NCI6WWU9YihfZS5kZWNvZGUoeWUpKTticmVhaztjYXNlImJpbmFyeSI6WWU9Yih5ZSk7YnJlYWs7Y2FzZSJidWZmZXIiOmNhc2UiYXJyYXkiOlllPXllfW1uKFllLDApO3ZhciBldD1ZZS5yZWFk'@;
put 'X3NoaWZ0KDEpLGN0PSEhKDEzNiZldCksRXQ9ITEsYXQ9ITE7c3dpdGNoKGV0KXtjYXNlIDI6Y2FzZSAzOmNhc2UgMTMxOmNhc2UgMTM5OmNhc2UgMjQ1OmJyZWFrO2Nhc2UgNDg6Y2FzZSA0OTpFdD0hMCxjdD0hMDticmVhaztjYXNlIDE0MDphdD0hMDticmVhaztkZWZhdWx0OnRocm93IG5l'@;
put 'dyBFcnJvcigiREJGIFVuc3VwcG9ydGVkIFZlcnNpb246ICIrZXQudG9TdHJpbmcoMTYpKX12YXIgYnQ9MCxqdD01MjE7Mj09ZXQmJihidD1ZZS5yZWFkX3NoaWZ0KDIpKSxZZS5sKz0zLDIhPWV0JiYoYnQ9WWUucmVhZF9zaGlmdCg0KSksYnQ+MTA0ODU3NiYmKGJ0PTFlNiksMiE9ZXQmJihq'@;
put 'dD1ZZS5yZWFkX3NoaWZ0KDIpKTt2YXIga3Q9WWUucmVhZF9zaGlmdCgyKSxPdD1QZS5jb2RlcGFnZXx8MTI1MjsyIT1ldCYmKFllLmwrPTE2LFllLnJlYWRfc2hpZnQoMSksMCE9PVllW1llLmxdJiYoT3Q9U1tZZVtZZS5sXV0pLFllLmwrPTEsWWUubCs9MiksYXQmJihZZS5sKz0zNik7Zm9y'@;
put 'KHZhciBLdD1bXSxUbj17fSxycj1NYXRoLm1pbihZZS5sZW5ndGgsMj09ZXQ/NTIxOmp0LTEwLShFdD8yNjQ6MCkpLFNuPWF0PzMyOjExO1llLmw8cnImJjEzIT1ZZVtZZS5sXTspc3dpdGNoKFRuPXt9LFRuLm5hbWU9Y3B0YWJsZS51dGlscy5kZWNvZGUoT3QsWWUuc2xpY2UoWWUubCxZZS5s'@;
put 'K1NuKSkucmVwbGFjZSgvW1x1MDAwMFxyXG5dLiokL2csIiIpLFllLmwrPVNuLFRuLnR5cGU9U3RyaW5nLmZyb21DaGFyQ29kZShZZS5yZWFkX3NoaWZ0KDEpKSwyIT1ldCYmIWF0JiYoVG4ub2Zmc2V0PVllLnJlYWRfc2hpZnQoNCkpLFRuLmxlbj1ZZS5yZWFkX3NoaWZ0KDEpLDI9PWV0JiYo'@;
put 'VG4ub2Zmc2V0PVllLnJlYWRfc2hpZnQoMikpLFRuLmRlYz1ZZS5yZWFkX3NoaWZ0KDEpLFRuLm5hbWUubGVuZ3RoJiZLdC5wdXNoKFRuKSwyIT1ldCYmKFllLmwrPWF0PzEzOjE0KSxUbi50eXBlKXtjYXNlIkIiOighRXR8fDghPVRuLmxlbikmJlBlLldURiYmY29uc29sZS5sb2coIlNraXBw'@;
put 'aW5nICIrVG4ubmFtZSsiOiIrVG4udHlwZSk7YnJlYWs7Y2FzZSJHIjpjYXNlIlAiOlBlLldURiYmY29uc29sZS5sb2coIlNraXBwaW5nICIrVG4ubmFtZSsiOiIrVG4udHlwZSk7YnJlYWs7Y2FzZSIrIjpjYXNlIjAiOmNhc2UiQCI6Y2FzZSJDIjpjYXNlIkQiOmNhc2UiRiI6Y2FzZSJJIjpj'@;
put 'YXNlIkwiOmNhc2UiTSI6Y2FzZSJOIjpjYXNlIk8iOmNhc2UiVCI6Y2FzZSJZIjpicmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVW5rbm93biBGaWVsZCBUeXBlOiAiK1RuLnR5cGUpfWlmKDEzIT09WWVbWWUubF0mJihZZS5sPWp0LTEpLDEzIT09WWUucmVhZF9zaGlmdCgxKSl0aHJv'@;
put 'dyBuZXcgRXJyb3IoIkRCRiBUZXJtaW5hdG9yIG5vdCBmb3VuZCAiK1llLmwrIiAiK1llW1llLmxdKTtZZS5sPWp0O3ZhciBscj0wLFhuPTA7Zm9yKE5lWzBdPVtdLFhuPTA7WG4hPUt0Lmxlbmd0aDsrK1huKU5lWzBdW1huXT1LdFtYbl0ubmFtZTtmb3IoO2J0LS0gPjA7KWlmKDQyIT09WWVb'@;
put 'WWUubF0pZm9yKCsrWWUubCxOZVsrK2xyXT1bXSxYbj0wLFhuPTA7WG4hPUt0Lmxlbmd0aDsrK1huKXt2YXIgQm49WWUuc2xpY2UoWWUubCxZZS5sK0t0W1huXS5sZW4pO1llLmwrPUt0W1huXS5sZW4sbW4oQm4sMCk7dmFyIGZyPWNwdGFibGUudXRpbHMuZGVjb2RlKE90LEJuKTtzd2l0Y2go'@;
put 'S3RbWG5dLnR5cGUpe2Nhc2UiQyI6ZnIudHJpbSgpLmxlbmd0aCYmKE5lW2xyXVtYbl09ZnIucmVwbGFjZSgvXHMrJC8sIiIpKTticmVhaztjYXNlIkQiOk5lW2xyXVtYbl09OD09PWZyLmxlbmd0aD9uZXcgRGF0ZSgrZnIuc2xpY2UoMCw0KSwrZnIuc2xpY2UoNCw2KS0xLCtmci5zbGljZSg2'@;
put 'LDgpKTpmcjticmVhaztjYXNlIkYiOk5lW2xyXVtYbl09cGFyc2VGbG9hdChmci50cmltKCkpO2JyZWFrO2Nhc2UiKyI6Y2FzZSJJIjpOZVtscl1bWG5dPWF0PzIxNDc0ODM2NDheQm4ucmVhZF9zaGlmdCgtNCwiaSIpOkJuLnJlYWRfc2hpZnQoNCwiaSIpO2JyZWFrO2Nhc2UiTCI6c3dpdGNo'@;
put 'KGZyLnRyaW0oKS50b1VwcGVyQ2FzZSgpKXtjYXNlIlkiOmNhc2UiVCI6TmVbbHJdW1huXT0hMDticmVhaztjYXNlIk4iOmNhc2UiRiI6TmVbbHJdW1huXT0hMTticmVhaztjYXNlIiI6Y2FzZSI/IjpicmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiREJGIFVucmVjb2duaXplZCBMOnwi'@;
put 'K2ZyKyJ8Iil9YnJlYWs7Y2FzZSJNIjppZighY3QpdGhyb3cgbmV3IEVycm9yKCJEQkYgVW5leHBlY3RlZCBNRU1PIGZvciB0eXBlICIrZXQudG9TdHJpbmcoMTYpKTtOZVtscl1bWG5dPSIjI01FTU8jIyIrKGF0P3BhcnNlSW50KGZyLnRyaW0oKSwxMCk6Qm4ucmVhZF9zaGlmdCg0KSk7YnJl'@;
put 'YWs7Y2FzZSJOIjooZnI9ZnIucmVwbGFjZSgvXHUwMDAwL2csIiIpLnRyaW0oKSkmJiIuIiE9ZnImJihOZVtscl1bWG5dPStmcnx8MCk7YnJlYWs7Y2FzZSJAIjpOZVtscl1bWG5dPW5ldyBEYXRlKEJuLnJlYWRfc2hpZnQoLTgsImYiKS02MjEzNTY4MzJlNSk7YnJlYWs7Y2FzZSJUIjpOZVts'@;
put 'cl1bWG5dPW5ldyBEYXRlKDg2NGU1KihCbi5yZWFkX3NoaWZ0KDQpLTI0NDA1ODgpK0JuLnJlYWRfc2hpZnQoNCkpO2JyZWFrO2Nhc2UiWSI6TmVbbHJdW1huXT1Cbi5yZWFkX3NoaWZ0KDQsImkiKS8xZTQ7YnJlYWs7Y2FzZSJPIjpOZVtscl1bWG5dPS1Cbi5yZWFkX3NoaWZ0KC04LCJmIik7'@;
put 'YnJlYWs7Y2FzZSJCIjppZihFdCYmOD09S3RbWG5dLmxlbil7TmVbbHJdW1huXT1Cbi5yZWFkX3NoaWZ0KDgsImYiKTticmVha31jYXNlIkciOmNhc2UiUCI6Qm4ubCs9S3RbWG5dLmxlbjticmVhaztjYXNlIjAiOmlmKCJfTnVsbEZsYWdzIj09PUt0W1huXS5uYW1lKWJyZWFrO2RlZmF1bHQ6'@;
put 'dGhyb3cgbmV3IEVycm9yKCJEQkYgVW5zdXBwb3J0ZWQgZGF0YSB0eXBlICIrS3RbWG5dLnR5cGUpfX1lbHNlIFllLmwrPWt0O2lmKDIhPWV0JiZZZS5sPFllLmxlbmd0aCYmMjYhPVllW1llLmwrK10pdGhyb3cgbmV3IEVycm9yKCJEQkYgRU9GIE1hcmtlciBtaXNzaW5nICIrKFllLmwtMSkr'@;
put 'IiBvZiAiK1llLmxlbmd0aCsiICIrWWVbWWUubC0xXS50b1N0cmluZygxNikpO3JldHVybiBQZSYmUGUuc2hlZXRSb3dzJiYoTmU9TmUuc2xpY2UoMCxQZS5zaGVldFJvd3MpKSxOZX0oeWUsTmUpLE5lKX12YXIgZ2U9e0I6OCxDOjI1MCxMOjEsRDo4LCI/IjowLCIiOjB9O3JldHVybnt2ZXJz'@;
put 'aW9uczpbMiwzLDQ4LDQ5LDEzMSwxMzksMTQwLDI0NV0sdG9fd29ya2Jvb2s6ZnVuY3Rpb24gb2UoeWUsUGUpe3RyeXtyZXR1cm4gdGgoUSh5ZSxQZSksUGUpfWNhdGNoKE5lKXtpZihQZSYmUGUuV1RGKXRocm93IE5lfXJldHVybntTaGVldE5hbWVzOltdLFNoZWV0czp7fX19LHRvX3NoZWV0'@;
put 'OlEsZnJvbV9zaGVldDpmdW5jdGlvbiBwZSh5ZSxQZSl7dmFyIE5lPVBlfHx7fTtpZigrTmUuY29kZXBhZ2U+PTAmJlUoK05lLmNvZGVwYWdlKSwic3RyaW5nIj09TmUudHlwZSl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCB3cml0ZSBEQkYgdG8gSlMgc3RyaW5nIik7dmFyIFllPWJpKCksZXQ9'@;
put 'SzQoeWUse2hlYWRlcjoxLHJhdzohMCxjZWxsRGF0ZXM6ITB9KSxjdD1ldFswXSxFdD1ldC5zbGljZSgxKSxhdD0wLGJ0PTAsanQ9MCxrdD0xO2ZvcihhdD0wO2F0PGN0Lmxlbmd0aDsrK2F0KWlmKG51bGwhPWF0KXtpZigrK2p0LCJudW1iZXIiPT10eXBlb2YgY3RbYXRdJiYoY3RbYXRdPWN0'@;
put 'W2F0XS50b1N0cmluZygxMCkpLCJzdHJpbmciIT10eXBlb2YgY3RbYXRdKXRocm93IG5ldyBFcnJvcigiREJGIEludmFsaWQgY29sdW1uIG5hbWUgIitjdFthdF0rIiB8Iit0eXBlb2YgY3RbYXRdKyJ8Iik7aWYoY3QuaW5kZXhPZihjdFthdF0pIT09YXQpZm9yKGJ0PTA7YnQ8MTAyNDsrK2J0'@;
put 'KWlmKC0xPT1jdC5pbmRleE9mKGN0W2F0XSsiXyIrYnQpKXtjdFthdF0rPSJfIitidDticmVha319dmFyIE90PW9vKHllWyIhcmVmIl0pLEt0PVtdO2ZvcihhdD0wO2F0PD1PdC5lLmMtT3Qucy5jOysrYXQpe3ZhciBUbj1bXTtmb3IoYnQ9MDtidDxFdC5sZW5ndGg7KytidCludWxsIT1FdFti'@;
put 'dF1bYXRdJiZUbi5wdXNoKEV0W2J0XVthdF0pO2lmKDAhPVRuLmxlbmd0aCYmbnVsbCE9Y3RbYXRdKXt2YXIgcnI9IiIsU249IiI7Zm9yKGJ0PTA7YnQ8VG4ubGVuZ3RoOysrYnQpe3N3aXRjaCh0eXBlb2YgVG5bYnRdKXtjYXNlIm51bWJlciI6U249IkIiO2JyZWFrO2Nhc2Uic3RyaW5nIjpk'@;
put 'ZWZhdWx0OlNuPSJDIjticmVhaztjYXNlImJvb2xlYW4iOlNuPSJMIjticmVhaztjYXNlIm9iamVjdCI6U249VG5bYnRdaW5zdGFuY2VvZiBEYXRlPyJEIjoiQyJ9aWYoIkMiPT0ocnI9cnImJnJyIT1Tbj8iQyI6U24pKWJyZWFrfWt0Kz1nZVtycl18fDAsS3RbYXRdPXJyfWVsc2UgS3RbYXRd'@;
put 'PSI/In12YXIgbHI9WWUubmV4dCgzMik7Zm9yKGxyLndyaXRlX3NoaWZ0KDQsMzE4OTAyNTc2KSxsci53cml0ZV9zaGlmdCg0LEV0Lmxlbmd0aCksbHIud3JpdGVfc2hpZnQoMiwyOTYrMzIqanQpLGxyLndyaXRlX3NoaWZ0KDIsa3QpLGF0PTA7YXQ8NDsrK2F0KWxyLndyaXRlX3NoaWZ0KDQs'@;
put 'MCk7Zm9yKGxyLndyaXRlX3NoaWZ0KDQsKCtSW0ZdfHwzKTw8OCksYXQ9MCxidD0wO2F0PGN0Lmxlbmd0aDsrK2F0KWlmKG51bGwhPWN0W2F0XSl7dmFyIFhuPVllLm5leHQoMzIpLEJuPShjdFthdF0uc2xpY2UoLTEwKSsiXDBcMFwwXDBcMFwwXDBcMFwwXDBcMCIpLnNsaWNlKDAsMTEpO1hu'@;
put 'LndyaXRlX3NoaWZ0KDEsQm4sInNiY3MiKSxYbi53cml0ZV9zaGlmdCgxLCI/Ij09S3RbYXRdPyJDIjpLdFthdF0sInNiY3MiKSxYbi53cml0ZV9zaGlmdCg0LGJ0KSxYbi53cml0ZV9zaGlmdCgxLGdlW0t0W2F0XV18fDApLFhuLndyaXRlX3NoaWZ0KDEsMCksWG4ud3JpdGVfc2hpZnQoMSwy'@;
put 'KSxYbi53cml0ZV9zaGlmdCg0LDApLFhuLndyaXRlX3NoaWZ0KDEsMCksWG4ud3JpdGVfc2hpZnQoNCwwKSxYbi53cml0ZV9zaGlmdCg0LDApLGJ0Kz1nZVtLdFthdF1dfHwwfXZhciBmcj1ZZS5uZXh0KDI2NCk7Zm9yKGZyLndyaXRlX3NoaWZ0KDQsMTMpLGF0PTA7YXQ8NjU7KythdClmci53'@;
put 'cml0ZV9zaGlmdCg0LDApO2ZvcihhdD0wO2F0PEV0Lmxlbmd0aDsrK2F0KXt2YXIgYnI9WWUubmV4dChrdCk7Zm9yKGJyLndyaXRlX3NoaWZ0KDEsMCksYnQ9MDtidDxjdC5sZW5ndGg7KytidClpZihudWxsIT1jdFtidF0pc3dpdGNoKEt0W2J0XSl7Y2FzZSJMIjpici53cml0ZV9zaGlmdCgx'@;
put 'LG51bGw9PUV0W2F0XVtidF0/NjM6RXRbYXRdW2J0XT84NDo3MCk7YnJlYWs7Y2FzZSJCIjpici53cml0ZV9zaGlmdCg4LEV0W2F0XVtidF18fDAsImYiKTticmVhaztjYXNlIkQiOkV0W2F0XVtidF0/KGJyLndyaXRlX3NoaWZ0KDQsKCIwMDAwIitFdFthdF1bYnRdLmdldEZ1bGxZZWFyKCkp'@;
put 'LnNsaWNlKC00KSwic2JjcyIpLGJyLndyaXRlX3NoaWZ0KDIsKCIwMCIrKEV0W2F0XVtidF0uZ2V0TW9udGgoKSsxKSkuc2xpY2UoLTIpLCJzYmNzIiksYnIud3JpdGVfc2hpZnQoMiwoIjAwIitFdFthdF1bYnRdLmdldERhdGUoKSkuc2xpY2UoLTIpLCJzYmNzIikpOmJyLndyaXRlX3NoaWZ0'@;
put 'KDgsIjAwMDAwMDAwIiwic2JjcyIpO2JyZWFrO2Nhc2UiQyI6dmFyIGVyPVN0cmluZyhFdFthdF1bYnRdfHwiIik7Zm9yKGJyLndyaXRlX3NoaWZ0KDEsZXIsInNiY3MiKSxqdD0wO2p0PDI1MC1lci5sZW5ndGg7KytqdClici53cml0ZV9zaGlmdCgxLDMyKX19cmV0dXJuIFllLm5leHQoMSku'@;
put 'd3JpdGVfc2hpZnQoMSwyNiksWWUuZW5kKCl9fX0oKSxjQz1mdW5jdGlvbigpe3ZhciBTPXtBQToiXHhjMCIsQkE6Ilx4YzEiLENBOiJceGMyIixEQToxOTUsSEE6Ilx4YzQiLEpBOjE5NyxBRToiXHhjOCIsQkU6Ilx4YzkiLENFOiJceGNhIixIRToiXHhjYiIsQUk6Ilx4Y2MiLEJJOiJceGNk'@;
put 'IixDSToiXHhjZSIsSEk6Ilx4Y2YiLEFPOiJceGQyIixCTzoiXHhkMyIsQ086Ilx4ZDQiLERPOjIxMyxITzoiXHhkNiIsQVU6Ilx4ZDkiLEJVOiJceGRhIixDVToiXHhkYiIsSFU6Ilx4ZGMiLEFhOiJceGUwIixCYToiXHhlMSIsQ2E6Ilx4ZTIiLERhOjIyNyxIYToiXHhlNCIsSmE6MjI5LEFl'@;
put 'OiJceGU4IixCZToiXHhlOSIsQ2U6Ilx4ZWEiLEhlOiJceGViIixBaToiXHhlYyIsQmk6Ilx4ZWQiLENpOiJceGVlIixIaToiXHhlZiIsQW86Ilx4ZjIiLEJvOiJceGYzIixDbzoiXHhmNCIsRG86MjQ1LEhvOiJceGY2IixBdToiXHhmOSIsQnU6Ilx4ZmEiLEN1OiJceGZiIixIdToiXHhmYyIs'@;
put 'S0M6Ilx4YzciLEtjOiJceGU3IixxOiJceGU2Iix6OiJcdTAxNTMiLGE6Ilx4YzYiLGo6Ilx1MDE1MiIsRE46MjA5LERuOjI0MSxIeToyNTUsUzoxNjksYzoxNzAsUjoxNzQsIkIgIjoxODAsMDoxNzYsMToxNzcsMjoxNzgsMzoxNzksNToxODEsNjoxODIsNzoxODMsUToxODUsazoxODYsYjoy'@;
put 'MDgsaToyMTYsbDoyMjIsczoyNDAseToyNDgsIiEiOjE2MSwnIic6MTYyLCIjIjoxNjMsIigiOjE2NCwiJSI6MTY1LCInIjoxNjcsIkggIjoxNjgsIisiOjE3MSwiOyI6MTg3LCI8IjoxODgsIj0iOjE4OSwiPiI6MTkwLCI/IjoxOTEsInsiOjIyM30sUj1uZXcgUmVnRXhwKCJceDFiTigiK09l'@;
put 'KFMpLmpvaW4oInwiKS5yZXBsYWNlKC9cfFx8XHwvLCJ8XFx8fCIpLnJlcGxhY2UoLyhbPygpK10pL2csIlxcJDEiKSsifFxcfCkiLCJnbSIpLGs9ZnVuY3Rpb24oZXQsY3Qpe3ZhciBFdD1TW2N0XTtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIEV0P2llKEV0KTpFdH0sRz1mdW5jdGlvbihldCxj'@;
put 'dCxFdCl7dmFyIGF0PWN0LmNoYXJDb2RlQXQoMCktMzI8PDR8RXQuY2hhckNvZGVBdCgwKS00ODtyZXR1cm4gNTk9PWF0P2V0OmllKGF0KX07ZnVuY3Rpb24gb2UoZXQsY3Qpe3ZhciBmcixFdD1ldC5zcGxpdCgvW1xuXHJdKy8pLGF0PS0xLGJ0PS0xLGp0PTAsa3Q9MCxPdD1bXSxLdD1bXSxU'@;
put 'bj1udWxsLHJyPXt9LFNuPVtdLGxyPVtdLFhuPVtdLEJuPTA7Zm9yKCtjdC5jb2RlcGFnZT49MCYmVSgrY3QuY29kZXBhZ2UpO2p0IT09RXQubGVuZ3RoOysranQpe0JuPTA7dmFyIEZpLGJyPUV0W2p0XS50cmltKCkucmVwbGFjZSgvXHgxQihbXHgyMC1ceDJGXSkoW1x4MzAtXHgzRl0pL2cs'@;
put 'RykucmVwbGFjZShSLGspLGVyPWJyLnJlcGxhY2UoLzs7L2csIlwwIikuc3BsaXQoIjsiKS5tYXAoZnVuY3Rpb24oWmkpe3JldHVybiBaaS5yZXBsYWNlKC9cdTAwMDAvZywiOyIpfSk7aWYoYnIubGVuZ3RoPjApc3dpdGNoKGVyWzBdKXtjYXNlIklEIjpjYXNlIkUiOmNhc2UiQiI6Y2FzZSJP'@;
put 'IjpjYXNlIlciOmJyZWFrO2Nhc2UiUCI6IlAiPT1lclsxXS5jaGFyQXQoMCkmJkt0LnB1c2goYnIuc2xpY2UoMykucmVwbGFjZSgvOzsvZywiOyIpKTticmVhaztjYXNlIkMiOnZhciBuYT0hMSxjYT0hMSxMaT0hMSxrcj0hMSxWbj0tMSxCcj0tMTtmb3Ioa3Q9MTtrdDxlci5sZW5ndGg7Kytr'@;
put 'dClzd2l0Y2goZXJba3RdLmNoYXJBdCgwKSl7Y2FzZSJBIjpjYXNlIkciOmJyZWFrO2Nhc2UiWCI6YnQ9cGFyc2VJbnQoZXJba3RdLnNsaWNlKDEpKS0xLGNhPSEwO2JyZWFrO2Nhc2UiWSI6Zm9yKGF0PXBhcnNlSW50KGVyW2t0XS5zbGljZSgxKSktMSxjYXx8KGJ0PTApLGZyPU90Lmxlbmd0'@;
put 'aDtmcjw9YXQ7KytmcilPdFtmcl09W107YnJlYWs7Y2FzZSJLIjonIic9PT0oRmk9ZXJba3RdLnNsaWNlKDEpKS5jaGFyQXQoMCk/Rmk9Rmkuc2xpY2UoMSxGaS5sZW5ndGgtMSk6IlRSVUUiPT09Rmk/Rmk9ITA6IkZBTFNFIj09PUZpP0ZpPSExOmlzTmFOKFF0KEZpKSk/aXNOYU4oc24oRmkp'@;
put 'LmdldERhdGUoKSl8fChGaT1IZShGaSkpOihGaT1RdChGaSksbnVsbCE9PVRuJiZBLmlzX2RhdGUoVG4pJiYoRmk9dW4oRmkpKSksdHlwZW9mIGNwdGFibGU8InUiJiYic3RyaW5nIj09dHlwZW9mIEZpJiYic3RyaW5nIiE9KGN0fHx7fSkudHlwZSYmKGN0fHx7fSkuY29kZXBhZ2UmJihGaT1j'@;
put 'cHRhYmxlLnV0aWxzLmRlY29kZShjdC5jb2RlcGFnZSxGaSkpLG5hPSEwO2JyZWFrO2Nhc2UiRSI6a3I9ITA7dmFyIF9yPUg1KGVyW2t0XS5zbGljZSgxKSx7cjphdCxjOmJ0fSk7T3RbYXRdW2J0XT1bT3RbYXRdW2J0XSxfcl07YnJlYWs7Y2FzZSJTIjpMaT0hMCxPdFthdF1bYnRdPVtPdFth'@;
put 'dF1bYnRdLCJTNVMiXTticmVhaztjYXNlIlIiOlZuPXBhcnNlSW50KGVyW2t0XS5zbGljZSgxKSktMTticmVhaztjYXNlIkMiOkJyPXBhcnNlSW50KGVyW2t0XS5zbGljZSgxKSktMTticmVhaztkZWZhdWx0OmlmKGN0JiZjdC5XVEYpdGhyb3cgbmV3IEVycm9yKCJTWUxLIGJhZCByZWNvcmQg'@;
put 'Iiticil9aWYobmEmJihPdFthdF1bYnRdJiYyPT1PdFthdF1bYnRdLmxlbmd0aD9PdFthdF1bYnRdWzBdPUZpOk90W2F0XVtidF09RmksVG49bnVsbCksTGkpe2lmKGtyKXRocm93IG5ldyBFcnJvcigiU1lMSyBzaGFyZWQgZm9ybXVsYSBjYW5ub3QgaGF2ZSBvd24gZm9ybXVsYSIpO3ZhciBG'@;
put 'bj1Wbj4tMSYmT3RbVm5dW0JyXTtpZighRm58fCFGblsxXSl0aHJvdyBuZXcgRXJyb3IoIlNZTEsgc2hhcmVkIGZvcm11bGEgY2Fubm90IGZpbmQgYmFzZSIpO090W2F0XVtidF1bMV09R2soRm5bMV0se3I6YXQtVm4sYzpidC1Ccn0pfWJyZWFrO2Nhc2UiRiI6dmFyIGpyPTA7Zm9yKGt0PTE7'@;
put 'a3Q8ZXIubGVuZ3RoOysra3Qpc3dpdGNoKGVyW2t0XS5jaGFyQXQoMCkpe2Nhc2UiWCI6YnQ9cGFyc2VJbnQoZXJba3RdLnNsaWNlKDEpKS0xLCsranI7YnJlYWs7Y2FzZSJZIjpmb3IoYXQ9cGFyc2VJbnQoZXJba3RdLnNsaWNlKDEpKS0xLGZyPU90Lmxlbmd0aDtmcjw9YXQ7KytmcilPdFtm'@;
put 'cl09W107YnJlYWs7Y2FzZSJNIjpCbj1wYXJzZUludChlcltrdF0uc2xpY2UoMSkpLzIwO2JyZWFrO2Nhc2UiRiI6Y2FzZSJHIjpjYXNlIlMiOmNhc2UiRCI6Y2FzZSJOIjpicmVhaztjYXNlIlAiOlRuPUt0W3BhcnNlSW50KGVyW2t0XS5zbGljZSgxKSldO2JyZWFrO2Nhc2UiVyI6Zm9yKFhu'@;
put 'PWVyW2t0XS5zbGljZSgxKS5zcGxpdCgiICIpLGZyPXBhcnNlSW50KFhuWzBdLDEwKTtmcjw9cGFyc2VJbnQoWG5bMV0sMTApOysrZnIpQm49cGFyc2VJbnQoWG5bMl0sMTApLGxyW2ZyLTFdPTA9PT1Cbj97aGlkZGVuOiEwfTp7d2NoOkJufSxRMChscltmci0xXSk7YnJlYWs7Y2FzZSJDIjps'@;
put 'cltidD1wYXJzZUludChlcltrdF0uc2xpY2UoMSkpLTFdfHwobHJbYnRdPXt9KTticmVhaztjYXNlIlIiOlNuW2F0PXBhcnNlSW50KGVyW2t0XS5zbGljZSgxKSktMV18fChTblthdF09e30pLEJuPjA/KFNuW2F0XS5ocHQ9Qm4sU25bYXRdLmhweD1zaChCbikpOjA9PT1CbiYmKFNuW2F0XS5o'@;
put 'aWRkZW49ITApO2JyZWFrO2RlZmF1bHQ6aWYoY3QmJmN0LldURil0aHJvdyBuZXcgRXJyb3IoIlNZTEsgYmFkIHJlY29yZCAiK2JyKX1qcjwxJiYoVG49bnVsbCk7YnJlYWs7ZGVmYXVsdDppZihjdCYmY3QuV1RGKXRocm93IG5ldyBFcnJvcigiU1lMSyBiYWQgcmVjb3JkICIrYnIpfX1yZXR1'@;
put 'cm4gU24ubGVuZ3RoPjAmJihyclsiIXJvd3MiXT1TbiksbHIubGVuZ3RoPjAmJihyclsiIWNvbHMiXT1sciksY3QmJmN0LnNoZWV0Um93cyYmKE90PU90LnNsaWNlKDAsY3Quc2hlZXRSb3dzKSksW090LHJyXX1mdW5jdGlvbiBnZShldCxjdCl7dmFyIEV0PWZ1bmN0aW9uIFEoZXQsY3Qpe3N3'@;
put 'aXRjaChjdC50eXBlKXtjYXNlImJhc2U2NCI6cmV0dXJuIG9lKF9lLmRlY29kZShldCksY3QpO2Nhc2UiYmluYXJ5IjpyZXR1cm4gb2UoZXQsY3QpO2Nhc2UiYnVmZmVyIjpyZXR1cm4gb2UoZXQudG9TdHJpbmcoImJpbmFyeSIpLGN0KTtjYXNlImFycmF5IjpyZXR1cm4gb2UodXQoZXQpLGN0'@;
put 'KX10aHJvdyBuZXcgRXJyb3IoIlVucmVjb2duaXplZCB0eXBlICIrY3QudHlwZSl9KGV0LGN0KSxidD1FdFsxXSxqdD1wNChFdFswXSxjdCk7cmV0dXJuIE9lKGJ0KS5mb3JFYWNoKGZ1bmN0aW9uKGt0KXtqdFtrdF09YnRba3RdfSksanR9ZnVuY3Rpb24geWUoZXQsY3QsRXQsYXQpe3ZhciBi'@;
put 'dD0iQztZIisoRXQrMSkrIjtYIisoYXQrMSkrIjtLIjtzd2l0Y2goZXQudCl7Y2FzZSJuIjpidCs9ZXQudnx8MCxldC5mJiYhZXQuRiYmKGJ0Kz0iO0UiK0g0KGV0LmYse3I6RXQsYzphdH0pKTticmVhaztjYXNlImIiOmJ0Kz1ldC52PyJUUlVFIjoiRkFMU0UiO2JyZWFrO2Nhc2UiZSI6YnQr'@;
put 'PWV0Lnd8fGV0LnY7YnJlYWs7Y2FzZSJkIjpidCs9JyInKyhldC53fHxldC52KSsnIic7YnJlYWs7Y2FzZSJzIjpidCs9JyInK2V0LnYucmVwbGFjZSgvIi9nLCIiKSsnIid9cmV0dXJuIGJ0fXJldHVybiBTWyJ8Il09MjU0LHt0b193b3JrYm9vazpmdW5jdGlvbiBwZShldCxjdCl7cmV0dXJu'@;
put 'IHRoKGdlKGV0LGN0KSxjdCl9LHRvX3NoZWV0OmdlLGZyb21fc2hlZXQ6ZnVuY3Rpb24gWWUoZXQsY3Qpe3ZhciBqdCxFdD1bIklEO1BTaGVldEpTO047RSJdLGF0PVtdLGJ0PW9vKGV0WyIhcmVmIl0pLGt0PUFycmF5LmlzQXJyYXkoZXQpLE90PSJcclxuIjtFdC5wdXNoKCJQO1BHZW5lcmFs'@;
put 'IiksRXQucHVzaCgiRjtQMDtERzBHODtNMjU1IiksZXRbIiFjb2xzIl0mJmZ1bmN0aW9uIFBlKGV0LGN0KXtjdC5mb3JFYWNoKGZ1bmN0aW9uKEV0LGF0KXt2YXIgYnQ9IkY7VyIrKGF0KzEpKyIgIisoYXQrMSkrIiAiO0V0LmhpZGRlbj9idCs9IjAiOigibnVtYmVyIj09dHlwZW9mIEV0Lndp'@;
put 'ZHRoJiYhRXQud3B4JiYoRXQud3B4PU01KEV0LndpZHRoKSksIm51bWJlciI9PXR5cGVvZiBFdC53cHgmJiFFdC53Y2gmJihFdC53Y2g9eDUoRXQud3B4KSksIm51bWJlciI9PXR5cGVvZiBFdC53Y2gmJihidCs9TWF0aC5yb3VuZChFdC53Y2gpKSksIiAiIT1idC5jaGFyQXQoYnQubGVuZ3Ro'@;
put 'LTEpJiZldC5wdXNoKGJ0KX0pfShFdCxldFsiIWNvbHMiXSksZXRbIiFyb3dzIl0mJmZ1bmN0aW9uIE5lKGV0LGN0KXtjdC5mb3JFYWNoKGZ1bmN0aW9uKEV0LGF0KXt2YXIgYnQ9IkY7IjtFdC5oaWRkZW4/YnQrPSJNMDsiOkV0LmhwdD9idCs9Ik0iKzIwKkV0LmhwdCsiOyI6RXQuaHB4JiYo'@;
put 'YnQrPSJNIisyMCpVMyhFdC5ocHgpKyI7IiksYnQubGVuZ3RoPjImJmV0LnB1c2goYnQrIlIiKyhhdCsxKSl9KX0oRXQsZXRbIiFyb3dzIl0pLEV0LnB1c2goIkI7WSIrKGJ0LmUuci1idC5zLnIrMSkrIjtYIisoYnQuZS5jLWJ0LnMuYysxKSsiO0QiK1tidC5zLmMsYnQucy5yLGJ0LmUuYyxi'@;
put 'dC5lLnJdLmpvaW4oIiAiKSk7Zm9yKHZhciBLdD1idC5zLnI7S3Q8PWJ0LmUucjsrK0t0KWZvcih2YXIgVG49YnQucy5jO1RuPD1idC5lLmM7KytUbil7dmFyIHJyPXFpKHtyOkt0LGM6VG59KTsoanQ9a3Q/KGV0W0t0XXx8W10pW1RuXTpldFtycl0pJiYobnVsbCE9anQudnx8anQuZiYmIWp0'@;
put 'LkYpJiZhdC5wdXNoKHllKGp0LDAsS3QsVG4pKX1yZXR1cm4gRXQuam9pbihPdCkrT3QrYXQuam9pbihPdCkrT3QrIkUiK090fX19KCksRHY9ZnVuY3Rpb24oKXtmdW5jdGlvbiBSKG9lLGdlKXtmb3IodmFyIHBlPW9lLnNwbGl0KCJcbiIpLHllPS0xLFBlPS0xLE5lPTAsWWU9W107TmUhPT1w'@;
put 'ZS5sZW5ndGg7KytOZSlpZigiQk9UIiE9PXBlW05lXS50cmltKCkpe2lmKCEoeWU8MCkpe2Zvcih2YXIgZXQ9cGVbTmVdLnRyaW0oKS5zcGxpdCgiLCIpLGN0PWV0WzBdLEV0PWV0WzFdLGF0PXBlWysrTmVdfHwiIjsxJihhdC5tYXRjaCgvWyJdL2cpfHxbXSkubGVuZ3RoJiZOZTxwZS5sZW5n'@;
put 'dGgtMTspYXQrPSJcbiIrcGVbKytOZV07c3dpdGNoKGF0PWF0LnRyaW0oKSwrY3Qpe2Nhc2UtMTppZigiQk9UIj09PWF0KXtZZVsrK3llXT1bXSxQZT0wO2NvbnRpbnVlfWlmKCJFT0QiIT09YXQpdGhyb3cgbmV3IEVycm9yKCJVbnJlY29nbml6ZWQgRElGIHNwZWNpYWwgY29tbWFuZCAiK2F0'@;
put 'KTticmVhaztjYXNlIDA6WWVbeWVdW1BlXT0iVFJVRSI9PT1hdHx8IkZBTFNFIiE9PWF0JiYoaXNOYU4oUXQoRXQpKT9pc05hTihzbihFdCkuZ2V0RGF0ZSgpKT9FdDpIZShFdCk6UXQoRXQpKSwrK1BlO2JyZWFrO2Nhc2UgMTooYXQ9KGF0PWF0LnNsaWNlKDEsYXQubGVuZ3RoLTEpKS5yZXBs'@;
put 'YWNlKC8iIi9nLCciJykpJiZhdC5tYXRjaCgvXj0iLioiJC8pJiYoYXQ9YXQuc2xpY2UoMiwtMSkpLFllW3llXVtQZSsrXT0iIiE9PWF0P2F0Om51bGx9aWYoIkVPRCI9PT1hdClicmVha319ZWxzZSBZZVsrK3llXT1bXSxQZT0wO3JldHVybiBnZSYmZ2Uuc2hlZXRSb3dzJiYoWWU9WWUuc2xp'@;
put 'Y2UoMCxnZS5zaGVldFJvd3MpKSxZZX1mdW5jdGlvbiBrKG9lLGdlKXtyZXR1cm4gcDQoZnVuY3Rpb24gUyhvZSxnZSl7c3dpdGNoKGdlLnR5cGUpe2Nhc2UiYmFzZTY0IjpyZXR1cm4gUihfZS5kZWNvZGUob2UpLGdlKTtjYXNlImJpbmFyeSI6cmV0dXJuIFIob2UsZ2UpO2Nhc2UiYnVmZmVy'@;
put 'IjpyZXR1cm4gUihvZS50b1N0cmluZygiYmluYXJ5IiksZ2UpO2Nhc2UiYXJyYXkiOnJldHVybiBSKHV0KG9lKSxnZSl9dGhyb3cgbmV3IEVycm9yKCJVbnJlY29nbml6ZWQgdHlwZSAiK2dlLnR5cGUpfShvZSxnZSksZ2UpfXJldHVybnt0b193b3JrYm9vazpmdW5jdGlvbiBHKG9lLGdlKXty'@;
put 'ZXR1cm4gdGgoayhvZSxnZSksZ2UpfSx0b19zaGVldDprLGZyb21fc2hlZXQ6ZnVuY3Rpb24oKXt2YXIgb2U9ZnVuY3Rpb24oeWUsUGUsTmUsWWUsZXQpe3llLnB1c2goUGUpLHllLnB1c2goTmUrIiwiK1llKSx5ZS5wdXNoKCciJytldC5yZXBsYWNlKC8iL2csJyIiJykrJyInKX0sZ2U9ZnVu'@;
put 'Y3Rpb24oeWUsUGUsTmUsWWUpe3llLnB1c2goUGUrIiwiK05lKSx5ZS5wdXNoKDE9PVBlPyciJytZZS5yZXBsYWNlKC8iL2csJyIiJykrJyInOlllKX07cmV0dXJuIGZ1bmN0aW9uKHllKXt2YXIgWWUsUGU9W10sTmU9b28oeWVbIiFyZWYiXSksZXQ9QXJyYXkuaXNBcnJheSh5ZSk7b2UoUGUs'@;
put 'IlRBQkxFIiwwLDEsInNoZWV0anMiKSxvZShQZSwiVkVDVE9SUyIsMCxOZS5lLnItTmUucy5yKzEsIiIpLG9lKFBlLCJUVVBMRVMiLDAsTmUuZS5jLU5lLnMuYysxLCIiKSxvZShQZSwiREFUQSIsMCwwLCIiKTtmb3IodmFyIGN0PU5lLnMucjtjdDw9TmUuZS5yOysrY3Qpe2dlKFBlLC0xLDAs'@;
put 'IkJPVCIpO2Zvcih2YXIgRXQ9TmUucy5jO0V0PD1OZS5lLmM7KytFdCl7dmFyIGF0PXFpKHtyOmN0LGM6RXR9KTtpZihZZT1ldD8oeWVbY3RdfHxbXSlbRXRdOnllW2F0XSlzd2l0Y2goWWUudCl7Y2FzZSJuIjp2YXIgYnQ9WWUudzshYnQmJm51bGwhPVllLnYmJihidD1ZZS52KSxudWxsPT1i'@;
put 'dD9nZShQZSwxLDAsWWUuZiYmIVllLkY/Ij0iK1llLmY6IiIpOmdlKFBlLDAsYnQsIlYiKTticmVhaztjYXNlImIiOmdlKFBlLDAsWWUudj8xOjAsWWUudj8iVFJVRSI6IkZBTFNFIik7YnJlYWs7Y2FzZSJzIjpnZShQZSwxLDAsaXNOYU4oWWUudik/WWUudjonPSInK1llLnYrJyInKTticmVh'@;
put 'aztjYXNlImQiOlllLnd8fChZZS53PUEuZm9ybWF0KFllLnp8fEEuX3RhYmxlWzE0XSxRZShIZShZZS52KSkpKSxnZShQZSwwLFllLncsIlYiKTticmVhaztkZWZhdWx0OmdlKFBlLDEsMCwiIil9ZWxzZSBnZShQZSwxLDAsIiIpfX1yZXR1cm4gZ2UoUGUsLTEsMCwiRU9EIiksUGUuam9pbigi'@;
put 'XHJcbiIpfX0oKX19KCksSzY9ZnVuY3Rpb24oKXtmdW5jdGlvbiBTKFllKXtyZXR1cm4gWWUucmVwbGFjZSgvXFxiL2csIlxcIikucmVwbGFjZSgvXFxjL2csIjoiKS5yZXBsYWNlKC9cXG4vZywiXG4iKX1mdW5jdGlvbiBSKFllKXtyZXR1cm4gWWUucmVwbGFjZSgvXFwvZywiXFxiIikucmVw'@;
put 'bGFjZSgvOi9nLCJcXGMiKS5yZXBsYWNlKC9cbi9nLCJcXG4iKX1mdW5jdGlvbiBHKFllLGV0KXtyZXR1cm4gcDQoZnVuY3Rpb24gayhZZSxldCl7Zm9yKHZhciBjdD1ZZS5zcGxpdCgiXG4iKSxFdD0tMSxhdD0tMSxidD0wLGp0PVtdO2J0IT09Y3QubGVuZ3RoOysrYnQpe3ZhciBrdD1jdFti'@;
put 'dF0udHJpbSgpLnNwbGl0KCI6Iik7aWYoImNlbGwiPT09a3RbMF0pe3ZhciBPdD1ObyhrdFsxXSk7aWYoanQubGVuZ3RoPD1PdC5yKWZvcihFdD1qdC5sZW5ndGg7RXQ8PU90LnI7KytFdClqdFtFdF18fChqdFtFdF09W10pO3N3aXRjaChFdD1PdC5yLGF0PU90LmMsa3RbMl0pe2Nhc2UidCI6'@;
put 'anRbRXRdW2F0XT1TKGt0WzNdKTticmVhaztjYXNlInYiOmp0W0V0XVthdF09K2t0WzNdO2JyZWFrO2Nhc2UidnRmIjp2YXIgS3Q9a3Rba3QubGVuZ3RoLTFdO2Nhc2UidnRjIjpqdFtFdF1bYXRdPSJubCI9PT1rdFszXT8hIStrdFs0XTora3RbNF0sInZ0ZiI9PWt0WzJdJiYoanRbRXRdW2F0'@;
put 'XT1banRbRXRdW2F0XSxLdF0pfX19cmV0dXJuIGV0JiZldC5zaGVldFJvd3MmJihqdD1qdC5zbGljZSgwLGV0LnNoZWV0Um93cykpLGp0fShZZSxldCksZXQpfXZhciBvZT1bInNvY2lhbGNhbGM6dmVyc2lvbjoxLjUiLCJNSU1FLVZlcnNpb246IDEuMCIsIkNvbnRlbnQtVHlwZTogbXVsdGlw'@;
put 'YXJ0L21peGVkOyBib3VuZGFyeT1Tb2NpYWxDYWxjU3ByZWFkc2hlZXRDb250cm9sU2F2ZSJdLmpvaW4oIlxuIiksZ2U9WyItLVNvY2lhbENhbGNTcHJlYWRzaGVldENvbnRyb2xTYXZlIiwiQ29udGVudC10eXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04Il0uam9pbigiXG4iKSsiXG4i'@;
put 'LHBlPVsiIyBTb2NpYWxDYWxjIFNwcmVhZHNoZWV0IENvbnRyb2wgU2F2ZSIsInBhcnQ6c2hlZXQiXS5qb2luKCJcbiIpLHllPSItLVNvY2lhbENhbGNTcHJlYWRzaGVldENvbnRyb2xTYXZlLS0iO2Z1bmN0aW9uIFBlKFllKXtpZighWWV8fCFZZVsiIXJlZiJdKXJldHVybiIiO2Zvcih2YXIg'@;
put 'RXQsZXQ9W10sY3Q9W10sYXQ9IiIsYnQ9TXMoWWVbIiFyZWYiXSksanQ9QXJyYXkuaXNBcnJheShZZSksa3Q9YnQucy5yO2t0PD1idC5lLnI7KytrdClmb3IodmFyIE90PWJ0LnMuYztPdDw9YnQuZS5jOysrT3QpaWYoYXQ9cWkoe3I6a3QsYzpPdH0pLChFdD1qdD8oWWVba3RdfHxbXSlbT3Rd'@;
put 'OlllW2F0XSkmJm51bGwhPUV0LnYmJiJ6IiE9PUV0LnQpe3N3aXRjaChjdD1bImNlbGwiLGF0LCJ0Il0sRXQudCl7Y2FzZSJzIjpjYXNlInN0ciI6Y3QucHVzaChSKEV0LnYpKTticmVhaztjYXNlIm4iOkV0LmY/KGN0WzJdPSJ2dGYiLGN0WzNdPSJuIixjdFs0XT1FdC52LGN0WzVdPVIoRXQu'@;
put 'ZikpOihjdFsyXT0idiIsY3RbM109RXQudik7YnJlYWs7Y2FzZSJiIjpjdFsyXT0idnQiKyhFdC5mPyJmIjoiYyIpLGN0WzNdPSJubCIsY3RbNF09RXQudj8iMSI6IjAiLGN0WzVdPVIoRXQuZnx8KEV0LnY/IlRSVUUiOiJGQUxTRSIpKTticmVhaztjYXNlImQiOnZhciBLdD1RZShIZShFdC52'@;
put 'KSk7Y3RbMl09InZ0YyIsY3RbM109Im5kIixjdFs0XT0iIitLdCxjdFs1XT1FdC53fHxBLmZvcm1hdChFdC56fHxBLl90YWJsZVsxNF0sS3QpO2JyZWFrO2Nhc2UiZSI6Y29udGludWV9ZXQucHVzaChjdC5qb2luKCI6IikpfXJldHVybiBldC5wdXNoKCJzaGVldDpjOiIrKGJ0LmUuYy1idC5z'@;
put 'LmMrMSkrIjpyOiIrKGJ0LmUuci1idC5zLnIrMSkrIjp0dmY6MSIpLGV0LnB1c2goInZhbHVlZm9ybWF0OjE6dGV4dC13aWtpIiksZXQuam9pbigiXG4iKX1yZXR1cm57dG9fd29ya2Jvb2s6ZnVuY3Rpb24gUShZZSxldCl7cmV0dXJuIHRoKEcoWWUsZXQpLGV0KX0sdG9fc2hlZXQ6Ryxmcm9t'@;
put 'X3NoZWV0OmZ1bmN0aW9uIE5lKFllKXtyZXR1cm5bb2UsZ2UscGUsZ2UsUGUoWWUpLHllXS5qb2luKCJcbiIpfX19KCksajM9ZnVuY3Rpb24oKXtmdW5jdGlvbiBTKE5lLFllLGV0LGN0LEV0KXtFdC5yYXc/WWVbZXRdW2N0XT1OZToiIj09PU5lfHwoWWVbZXRdW2N0XT1SaShOZSxFdCk/Umko'@;
put 'TmUsRXQpLnY6TmUpfXZhciBrPXs0NDoiLCIsOToiXHQiLDU5OiI7In0sRz17NDQ6Myw5OjIsNTk6MX07ZnVuY3Rpb24gUShOZSl7Zm9yKHZhciBZZT17fSxldD0hMSxjdD0wLEV0PTA7Y3Q8TmUubGVuZ3RoOysrY3QpMzQ9PShFdD1OZS5jaGFyQ29kZUF0KGN0KSk/ZXQ9IWV0OiFldCYmRXQg'@;
put 'aW4gayYmKFllW0V0XT0oWWVbRXRdfHwwKSsxKTtmb3IoY3QgaW4gRXQ9W10sWWUpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFllLGN0KSYmRXQucHVzaChbWWVbY3RdLGN0XSk7aWYoIUV0Lmxlbmd0aClmb3IoY3QgaW4gWWU9RylPYmplY3QucHJvdG90eXBlLmhhc093'@;
put 'blByb3BlcnR5LmNhbGwoWWUsY3QpJiZFdC5wdXNoKFtZZVtjdF0sY3RdKTtyZXR1cm4gRXQuc29ydChmdW5jdGlvbihhdCxidCl7cmV0dXJuIGF0WzBdLWJ0WzBdfHxHW2F0WzFdXS1HW2J0WzFdXX0pLGtbRXQucG9wKClbMV1dfWZ1bmN0aW9uIGdlKE5lLFllKXtyZXR1cm4hWWV8fCFZZS5Q'@;
put 'Uk58fCJzZXA9Ij09TmUuc2xpY2UoMCw0KXx8TmUuaW5kZXhPZigiXHQiKT49MHx8TmUuaW5kZXhPZigiLCIpPj0wfHxOZS5pbmRleE9mKCI7Iik+PTA/ZnVuY3Rpb24gb2UoTmUsWWUpe3ZhciBldD1ZZXx8e30sY3Q9IiI7bnVsbCE9bGUmJm51bGw9PWV0LmRlbnNlJiYoZXQuZGVuc2U9bGUp'@;
put 'O3ZhciBFdD1ldC5kZW5zZT9bXTp7fSxhdD17czp7YzowLHI6MH0sZTp7YzowLHI6MH19OyJzZXA9Ij09TmUuc2xpY2UoMCw0KT8xMz09TmUuY2hhckNvZGVBdCg1KSYmMTA9PU5lLmNoYXJDb2RlQXQoNik/KGN0PU5lLmNoYXJBdCg0KSxOZT1OZS5zbGljZSg3KSk6MTM9PU5lLmNoYXJDb2Rl'@;
put 'QXQoNSl8fDEwPT1OZS5jaGFyQ29kZUF0KDUpPyhjdD1OZS5jaGFyQXQoNCksTmU9TmUuc2xpY2UoNikpOmN0PVEoTmUuc2xpY2UoMCwxMDI0KSk6Y3Q9UShOZS5zbGljZSgwLDEwMjQpKTt2YXIgYnQ9MCxqdD0wLGt0PTAsT3Q9MCxLdD0wLFRuPWN0LmNoYXJDb2RlQXQoMCkscnI9ITEsU249'@;
put 'MCxscj1OZS5jaGFyQ29kZUF0KDApO05lPU5lLnJlcGxhY2UoL1xyXG4vZ20sIlxuIik7dmFyIFhuPW51bGwhPWV0LmRhdGVORj9mdW5jdGlvbiBVZShTKXt2YXIgUj0ibnVtYmVyIj09dHlwZW9mIFM/QS5fdGFibGVbU106UztyZXR1cm4gUj1SLnJlcGxhY2Uod2UsIihcXGQrKSIpLG5ldyBS'@;
put 'ZWdFeHAoIl4iK1IrIiQiKX0oZXQuZGF0ZU5GKTpudWxsO2Z1bmN0aW9uIEJuKCl7dmFyIGZyPU5lLnNsaWNlKE90LEt0KSxicj17fTtpZignIic9PWZyLmNoYXJBdCgwKSYmJyInPT1mci5jaGFyQXQoZnIubGVuZ3RoLTEpJiYoZnI9ZnIuc2xpY2UoMSwtMSkucmVwbGFjZSgvIiIvZywnIicp'@;
put 'KSwwPT09ZnIubGVuZ3RoKWJyLnQ9InoiO2Vsc2UgaWYoZXQucmF3KWJyLnQ9InMiLGJyLnY9ZnI7ZWxzZSBpZigwPT09ZnIudHJpbSgpLmxlbmd0aClici50PSJzIixici52PWZyO2Vsc2UgaWYoNjE9PWZyLmNoYXJDb2RlQXQoMCkpMzQ9PWZyLmNoYXJDb2RlQXQoMSkmJjM0PT1mci5jaGFy'@;
put 'Q29kZUF0KGZyLmxlbmd0aC0xKT8oYnIudD0icyIsYnIudj1mci5zbGljZSgyLC0xKS5yZXBsYWNlKC8iIi9nLCciJykpOmZ1bmN0aW9uIGhuZShTKXtyZXR1cm4gMSE9Uy5sZW5ndGh9KGZyKT8oYnIudD0ibiIsYnIuZj1mci5zbGljZSgxKSk6KGJyLnQ9InMiLGJyLnY9ZnIpO2Vsc2UgaWYo'@;
put 'IlRSVUUiPT1mcilici50PSJiIixici52PSEwO2Vsc2UgaWYoIkZBTFNFIj09ZnIpYnIudD0iYiIsYnIudj0hMTtlbHNlIGlmKGlzTmFOKGt0PVF0KGZyKSkpaWYoIWlzTmFOKHNuKGZyKS5nZXREYXRlKCkpfHxYbiYmZnIubWF0Y2goWG4pKXtici56PWV0LmRhdGVORnx8QS5fdGFibGVbMTRd'@;
put 'O3ZhciBlcj0wO1huJiZmci5tYXRjaChYbikmJihmcj1mdW5jdGlvbiBKZShTLFIsayl7dmFyIEc9LTEsUT0tMSxvZT0tMSxnZT0tMSxwZT0tMSx5ZT0tMTsoUi5tYXRjaCh3ZSl8fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKFllLGV0KXt2YXIgY3Q9cGFyc2VJbnQoa1tldCsxXSwxMCk7c3dpdGNo'@;
put 'KFllLnRvTG93ZXJDYXNlKCkuY2hhckF0KDApKXtjYXNlInkiOkc9Y3Q7YnJlYWs7Y2FzZSJkIjpvZT1jdDticmVhaztjYXNlImgiOmdlPWN0O2JyZWFrO2Nhc2UicyI6eWU9Y3Q7YnJlYWs7Y2FzZSJtIjpnZT49MD9wZT1jdDpRPWN0fX0pLHllPj0wJiYtMT09cGUmJlE+PTAmJihwZT1RLFE9'@;
put 'LTEpO3ZhciBQZT0oIiIrKEc+PTA/RzoobmV3IERhdGUpLmdldEZ1bGxZZWFyKCkpKS5zbGljZSgtNCkrIi0iKygiMDAiKyhRPj0xP1E6MSkpLnNsaWNlKC0yKSsiLSIrKCIwMCIrKG9lPj0xP29lOjEpKS5zbGljZSgtMik7Nz09UGUubGVuZ3RoJiYoUGU9IjAiK1BlKSw4PT1QZS5sZW5ndGgm'@;
put 'JihQZT0iMjAiK1BlKTt2YXIgTmU9KCIwMCIrKGdlPj0wP2dlOjApKS5zbGljZSgtMikrIjoiKygiMDAiKyhwZT49MD9wZTowKSkuc2xpY2UoLTIpKyI6IisoIjAwIisoeWU+PTA/eWU6MCkpLnNsaWNlKC0yKTtyZXR1cm4tMT09Z2UmJi0xPT1wZSYmLTE9PXllP1BlOi0xPT1HJiYtMT09USYm'@;
put 'LTE9PW9lP05lOlBlKyJUIitOZX0oMCxldC5kYXRlTkYsZnIubWF0Y2goWG4pfHxbXSksZXI9MSksZXQuY2VsbERhdGVzPyhici50PSJkIixici52PUhlKGZyLGVyKSk6KGJyLnQ9Im4iLGJyLnY9UWUoSGUoZnIsZXIpKSksITEhPT1ldC5jZWxsVGV4dCYmKGJyLnc9QS5mb3JtYXQoYnIueixi'@;
put 'ci52IGluc3RhbmNlb2YgRGF0ZT9RZShici52KTpici52KSksZXQuY2VsbE5GfHxkZWxldGUgYnIuen1lbHNlIGJyLnQ9InMiLGJyLnY9ZnI7ZWxzZSBici50PSJuIiwhMSE9PWV0LmNlbGxUZXh0JiYoYnIudz1mciksYnIudj1rdDtpZigieiI9PWJyLnR8fChldC5kZW5zZT8oRXRbYnRdfHwo'@;
put 'RXRbYnRdPVtdKSxFdFtidF1banRdPWJyKTpFdFtxaSh7YzpqdCxyOmJ0fSldPWJyKSxscj1OZS5jaGFyQ29kZUF0KE90PUt0KzEpLGF0LmUuYzxqdCYmKGF0LmUuYz1qdCksYXQuZS5yPGJ0JiYoYXQuZS5yPWJ0KSxTbj09VG4pKytqdDtlbHNlIGlmKGp0PTAsKytidCxldC5zaGVldFJvd3Mm'@;
put 'JmV0LnNoZWV0Um93czw9YnQpcmV0dXJuITB9ZTpmb3IoO0t0PE5lLmxlbmd0aDsrK0t0KXN3aXRjaChTbj1OZS5jaGFyQ29kZUF0KEt0KSl7Y2FzZSAzNDozND09PWxyJiYocnI9IXJyKTticmVhaztjYXNlIFRuOmNhc2UgMTA6Y2FzZSAxMzppZighcnImJkJuKCkpYnJlYWsgZX1yZXR1cm4g'@;
put 'S3QtT3Q+MCYmQm4oKSxFdFsiIXJlZiJdPXJhKGF0KSxFdH0oTmUsWWUpOnA0KGZ1bmN0aW9uIFIoTmUsWWUpe3ZhciBldD1ZZXx8e30sY3Q9W107aWYoIU5lfHwwPT09TmUubGVuZ3RoKXJldHVybiBjdDtmb3IodmFyIEV0PU5lLnNwbGl0KC9bXHJcbl0vKSxhdD1FdC5sZW5ndGgtMTthdD49'@;
put 'MCYmMD09PUV0W2F0XS5sZW5ndGg7KS0tYXQ7Zm9yKHZhciBidD0xMCxqdD0wLGt0PTA7a3Q8PWF0Oysra3QpLTE9PShqdD1FdFtrdF0uaW5kZXhPZigiICIpKT9qdD1FdFtrdF0ubGVuZ3RoOmp0KyssYnQ9TWF0aC5tYXgoYnQsanQpO2ZvcihrdD0wO2t0PD1hdDsrK2t0KXtjdFtrdF09W107'@;
put 'dmFyIE90PTA7Zm9yKFMoRXRba3RdLnNsaWNlKDAsYnQpLnRyaW0oKSxjdCxrdCxPdCxldCksT3Q9MTtPdDw9KEV0W2t0XS5sZW5ndGgtYnQpLzEwKzE7KytPdClTKEV0W2t0XS5zbGljZShidCsxMCooT3QtMSksYnQrMTAqT3QpLnRyaW0oKSxjdCxrdCxPdCxldCl9cmV0dXJuIGV0LnNoZWV0'@;
put 'Um93cyYmKGN0PWN0LnNsaWNlKDAsZXQuc2hlZXRSb3dzKSksY3R9KE5lLFllKSxZZSl9ZnVuY3Rpb24gcGUoTmUsWWUpe3ZhciBldD0iIixjdD0ic3RyaW5nIj09WWUudHlwZT9bMCwwLDAsMF06UVMoTmUsWWUpO3N3aXRjaChZZS50eXBlKXtjYXNlImJhc2U2NCI6ZXQ9X2UuZGVjb2RlKE5l'@;
put 'KTticmVhaztjYXNlImJpbmFyeSI6Y2FzZSJzdHJpbmciOmV0PU5lO2JyZWFrO2Nhc2UiYnVmZmVyIjpldD02NTAwMT09WWUuY29kZXBhZ2U/TmUudG9TdHJpbmcoInV0ZjgiKTpZZS5jb2RlcGFnZSYmdHlwZW9mIGNwdGFibGU8InUiP2NwdGFibGUudXRpbHMuZGVjb2RlKFllLmNvZGVwYWdl'@;
put 'LE5lKTpOZS50b1N0cmluZygiYmluYXJ5Iik7YnJlYWs7Y2FzZSJhcnJheSI6ZXQ9dXQoTmUpO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJVbnJlY29nbml6ZWQgdHlwZSAiK1llLnR5cGUpfXJldHVybiAyMzk9PWN0WzBdJiYxODc9PWN0WzFdJiYxOTE9PWN0WzJdP2V0PWdvKGV0'@;
put 'LnNsaWNlKDMpKToiYmluYXJ5Ij09WWUudHlwZSYmdHlwZW9mIGNwdGFibGU8InUiJiZZZS5jb2RlcGFnZSYmKGV0PWNwdGFibGUudXRpbHMuZGVjb2RlKFllLmNvZGVwYWdlLGNwdGFibGUudXRpbHMuZW5jb2RlKDI4NTkxLGV0KSkpLCJzb2NpYWxjYWxjOnZlcnNpb246Ij09ZXQuc2xpY2Uo'@;
put 'MCwxOSk/SzYudG9fc2hlZXQoInN0cmluZyI9PVllLnR5cGU/ZXQ6Z28oZXQpLFllKTpnZShldCxZZSl9cmV0dXJue3RvX3dvcmtib29rOmZ1bmN0aW9uIHllKE5lLFllKXtyZXR1cm4gdGgocGUoTmUsWWUpLFllKX0sdG9fc2hlZXQ6cGUsZnJvbV9zaGVldDpmdW5jdGlvbiBQZShOZSl7Zm9y'@;
put 'KHZhciBjdCxZZT1bXSxldD1vbyhOZVsiIXJlZiJdKSxFdD1BcnJheS5pc0FycmF5KE5lKSxhdD1ldC5zLnI7YXQ8PWV0LmUucjsrK2F0KXtmb3IodmFyIGJ0PVtdLGp0PWV0LnMuYztqdDw9ZXQuZS5jOysranQpe3ZhciBrdD1xaSh7cjphdCxjOmp0fSk7aWYoKGN0PUV0PyhOZVthdF18fFtd'@;
put 'KVtqdF06TmVba3RdKSYmbnVsbCE9Y3Qudil7Zm9yKHZhciBPdD0oY3Qud3x8KF9sKGN0KSxjdC53KXx8IiIpLnNsaWNlKDAsMTApO090Lmxlbmd0aDwxMDspT3QrPSIgIjtidC5wdXNoKE90KygwPT09anQ/IiAiOiIiKSl9ZWxzZSBidC5wdXNoKCIgICAgICAgICAgIil9WWUucHVzaChidC5q'@;
put 'b2luKCIiKSl9cmV0dXJuIFllLmpvaW4oIlxuIil9fX0oKSxJdj1mdW5jdGlvbigpe2Z1bmN0aW9uIFMoVm4sQnIsX3Ipe2lmKFZuKXttbihWbixWbi5sfHwwKTtmb3IodmFyIEZuPV9yLkVudW18fExpO1ZuLmw8Vm4ubGVuZ3RoOyl7dmFyIGpyPVZuLnJlYWRfc2hpZnQoMiksWmk9Rm5banJd'@;
put 'fHxGbls2NTUzNV0seWk9Vm4ucmVhZF9zaGlmdCgyKSxfYT1Wbi5sK3lpLHNvPVppLmYmJlppLmYoVm4seWksX3IpO2lmKFZuLmw9X2EsQnIoc28sWmksanIpKXJldHVybn19fWZ1bmN0aW9uIGsoVm4sQnIpe2lmKCFWbilyZXR1cm4gVm47dmFyIF9yPUJyfHx7fTtudWxsIT1sZSYmbnVsbD09'@;
put 'X3IuZGVuc2UmJihfci5kZW5zZT1sZSk7dmFyIEZuPV9yLmRlbnNlP1tdOnt9LGpyPSJTaGVldDEiLFppPTAseWk9e30sX2E9W2pyXSxzbz1bXSxpYT17czp7cjowLGM6MH0sZTp7cjowLGM6MH19LExvPV9yLnNoZWV0Um93c3x8MDtpZigyPT1WblsyXSlfci5FbnVtPUxpLFMoVm4sZnVuY3Rp'@;
put 'b24oQmksSXMsUG4pe3N3aXRjaChQbil7Y2FzZSAwOl9yLnZlcnM9QmksQmk+PTQwOTYmJihfci5xcHJvPSEwKTticmVhaztjYXNlIDY6aWE9Qmk7YnJlYWs7Y2FzZSAxNTpjYXNlIDUxOl9yLnFwcm98fChCaVsxXS52PUJpWzFdLnYuc2xpY2UoMSkpO2Nhc2UgMTM6Y2FzZSAxNDpjYXNlIDE2'@;
put 'OjE0PT1QbiYmISgxMTImfkJpWzJdKSYmKDE1JkJpWzJdKT4xJiYoMTUmQmlbMl0pPDE1JiYoQmlbMV0uej1fci5kYXRlTkZ8fEEuX3RhYmxlWzE0XSxfci5jZWxsRGF0ZXMmJihCaVsxXS50PSJkIixCaVsxXS52PXVuKEJpWzFdLnYpKSk7dmFyIFdvPV9yLmRlbnNlPyhGbltCaVswXS5yXXx8'@;
put 'W10pW0JpWzBdLmNdOkZuW3FpKEJpWzBdKV07aWYoV28pe1dvLnQ9QmlbMV0udCxXby52PUJpWzFdLnYsbnVsbCE9QmlbMV0ueiYmKFdvLno9QmlbMV0ueiksbnVsbCE9QmlbMV0uZiYmKFdvLmY9QmlbMV0uZik7YnJlYWt9X3IuZGVuc2U/KEZuW0JpWzBdLnJdfHwoRm5bQmlbMF0ucl09W10p'@;
put 'LEZuW0JpWzBdLnJdW0JpWzBdLmNdPUJpWzFdKTpGbltxaShCaVswXSldPUJpWzFdfX0sX3IpO2Vsc2V7aWYoMjYhPVZuWzJdJiYxNCE9Vm5bMl0pdGhyb3cgbmV3IEVycm9yKCJVbnJlY29nbml6ZWQgTE9UVVMgQk9GICIrVm5bMl0pO19yLkVudW09a3IsMTQ9PVZuWzJdJiYoX3IucXBybz0h'@;
put 'MCxWbi5sPTApLFMoVm4sZnVuY3Rpb24oQmksSXMsUG4pe3N3aXRjaChQbil7Y2FzZSAyMjpCaVsxXS52PUJpWzFdLnYuc2xpY2UoMSk7Y2FzZSAyMzpjYXNlIDI0OmNhc2UgMjU6Y2FzZSAzNzpjYXNlIDM5OmNhc2UgNDA6aWYoQmlbM10+WmkmJihGblsiIXJlZiJdPXJhKGlhKSx5aVtqcl09'@;
put 'Rm4sRm49X3IuZGVuc2U/W106e30saWE9e3M6e3I6MCxjOjB9LGU6e3I6MCxjOjB9fSxfYS5wdXNoKGpyPSJTaGVldCIrKChaaT1CaVszXSkrMSkpKSxMbz4wJiZCaVswXS5yPj1MbylicmVhaztfci5kZW5zZT8oRm5bQmlbMF0ucl18fChGbltCaVswXS5yXT1bXSksRm5bQmlbMF0ucl1bQmlb'@;
put 'MF0uY109QmlbMV0pOkZuW3FpKEJpWzBdKV09QmlbMV0saWEuZS5jPEJpWzBdLmMmJihpYS5lLmM9QmlbMF0uYyksaWEuZS5yPEJpWzBdLnImJihpYS5lLnI9QmlbMF0ucik7YnJlYWs7Y2FzZSAyNzpCaVsxNGUzXSYmKHNvW0JpWzE0ZTNdWzBdXT1CaVsxNGUzXVsxXSl9fSxfcil9aWYoRm5b'@;
put 'IiFyZWYiXT1yYShpYSkseWlbanJdPUZuLCFzby5sZW5ndGgpcmV0dXJue1NoZWV0TmFtZXM6X2EsU2hlZXRzOnlpfTtmb3IodmFyIE9hPXt9LGhvPVtdLEphPTA7SmE8c28ubGVuZ3RoOysrSmEpeWlbX2FbSmFdXSYmKGhvLnB1c2goc29bSmFdKSxPYVtzb1tKYV1dPXlpW19hW0phXV0pO3Jl'@;
put 'dHVybntTaGVldE5hbWVzOmhvLFNoZWV0czpPYX19ZnVuY3Rpb24gUGUoVm4sQnIsX3Ipe3ZhciBGbj1be2M6MCxyOjB9LHt0OiJuIix2OjB9LDBdO3JldHVybiBfci5xcHJvJiYyMDc2OCE9X3IudmVycz8oRm5bMF0uYz1Wbi5yZWFkX3NoaWZ0KDEpLFZuLmwrKyxGblswXS5yPVZuLnJlYWRf'@;
put 'c2hpZnQoMiksVm4ubCs9Mik6KEZuWzJdPVZuLnJlYWRfc2hpZnQoMSksRm5bMF0uYz1Wbi5yZWFkX3NoaWZ0KDIpLEZuWzBdLnI9Vm4ucmVhZF9zaGlmdCgyKSksRm59ZnVuY3Rpb24gTmUoVm4sQnIsX3Ipe3ZhciBGbj1Wbi5sK0JyLGpyPVBlKFZuLDAsX3IpO2lmKGpyWzFdLnQ9InMiLDIw'@;
put 'NzY4PT1fci52ZXJzKXtWbi5sKys7dmFyIFppPVZuLnJlYWRfc2hpZnQoMSk7cmV0dXJuIGpyWzFdLnY9Vm4ucmVhZF9zaGlmdChaaSwidXRmOCIpLGpyfXJldHVybiBfci5xcHJvJiZWbi5sKyssanJbMV0udj1Wbi5yZWFkX3NoaWZ0KEZuLVZuLmwsImNzdHIiKSxqcn1mdW5jdGlvbiBZZShW'@;
put 'bixCcixfcil7dmFyIEZuPWJuKDcrX3IubGVuZ3RoKTtGbi53cml0ZV9zaGlmdCgxLDI1NSksRm4ud3JpdGVfc2hpZnQoMixCciksRm4ud3JpdGVfc2hpZnQoMixWbiksRm4ud3JpdGVfc2hpZnQoMSwzOSk7Zm9yKHZhciBqcj0wO2pyPEZuLmxlbmd0aDsrK2pyKXt2YXIgWmk9X3IuY2hhckNv'@;
put 'ZGVBdChqcik7Rm4ud3JpdGVfc2hpZnQoMSxaaT49MTI4Pzk1OlppKX1yZXR1cm4gRm4ud3JpdGVfc2hpZnQoMSwwKSxGbn1mdW5jdGlvbiBjdChWbixCcixfcil7dmFyIEZuPWJuKDcpO3JldHVybiBGbi53cml0ZV9zaGlmdCgxLDI1NSksRm4ud3JpdGVfc2hpZnQoMixCciksRm4ud3JpdGVf'@;
put 'c2hpZnQoMixWbiksRm4ud3JpdGVfc2hpZnQoMixfciwiaSIpLEZufWZ1bmN0aW9uIGF0KFZuLEJyLF9yKXt2YXIgRm49Ym4oMTMpO3JldHVybiBGbi53cml0ZV9zaGlmdCgxLDI1NSksRm4ud3JpdGVfc2hpZnQoMixCciksRm4ud3JpdGVfc2hpZnQoMixWbiksRm4ud3JpdGVfc2hpZnQoOCxf'@;
put 'ciwiZiIpLEZufWZ1bmN0aW9uIGp0KFZuLEJyLF9yKXt2YXIgRm49MzI3NjgmQnI7cmV0dXJuIEJyPShGbj9WbjowKSsoKEJyJj0tMzI3NjkpPj04MTkyP0JyLTE2Mzg0OkJyKSwoRm4/IiI6IiQiKSsoX3I/VGEoQnIpOmppKEJyKSl9dmFyIE90PXs1MTpbIkZBTFNFIiwwXSw1MjpbIlRSVUUi'@;
put 'LDBdLDcwOlsiTEVOIiwxXSw4MDpbIlNVTSIsNjldLDgxOlsiQVZFUkFHRUEiLDY5XSw4MjpbIkNPVU5UQSIsNjldLDgzOlsiTUlOQSIsNjldLDg0OlsiTUFYQSIsNjldLDExMTpbIlQiLDFdfSxLdD1bIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIisiLCItIiwiKiIsIi8iLCJeIiwiPSIs'@;
put 'Ijw+IiwiPD0iLCI+PSIsIjwiLCI+IiwiIiwiIiwiIiwiIiwiJiIsIiIsIiIsIiIsIiIsIiIsIiIsIiJdO2Z1bmN0aW9uIHJyKFZuKXt2YXIgQnI9W3tjOjAscjowfSx7dDoibiIsdjowfSwwXTtyZXR1cm4gQnJbMF0ucj1Wbi5yZWFkX3NoaWZ0KDIpLEJyWzNdPVZuW1ZuLmwrK10sQnJbMF0u'@;
put 'Yz1WbltWbi5sKytdLEJyfWZ1bmN0aW9uIGxyKFZuLEJyLF9yLEZuKXt2YXIganI9Ym4oNitGbi5sZW5ndGgpO2pyLndyaXRlX3NoaWZ0KDIsVm4pLGpyLndyaXRlX3NoaWZ0KDEsX3IpLGpyLndyaXRlX3NoaWZ0KDEsQnIpLGpyLndyaXRlX3NoaWZ0KDEsMzkpO2Zvcih2YXIgWmk9MDtaaTxG'@;
put 'bi5sZW5ndGg7KytaaSl7dmFyIHlpPUZuLmNoYXJDb2RlQXQoWmkpO2pyLndyaXRlX3NoaWZ0KDEseWk+PTEyOD85NTp5aSl9cmV0dXJuIGpyLndyaXRlX3NoaWZ0KDEsMCksanJ9ZnVuY3Rpb24gQm4oVm4sQnIpe3ZhciBfcj1ycihWbiksRm49Vm4ucmVhZF9zaGlmdCg0KSxqcj1Wbi5yZWFk'@;
put 'X3NoaWZ0KDQpLFppPVZuLnJlYWRfc2hpZnQoMik7aWYoNjU1MzU9PVppKXJldHVybiAwPT09Rm4mJjMyMjEyMjU0NzI9PT1qcj8oX3JbMV0udD0iZSIsX3JbMV0udj0xNSk6MD09PUZuJiYzNDg5NjYwOTI4PT09anI/KF9yWzFdLnQ9ImUiLF9yWzFdLnY9NDIpOl9yWzFdLnY9MCxfcjt2YXIg'@;
put 'eWk9MzI3NjgmWmk7cmV0dXJuIFppPSgzMjc2NyZaaSktMTY0NDYsX3JbMV0udj0oMS0yKnlpKSooanIqTWF0aC5wb3coMixaaSszMikrRm4qTWF0aC5wb3coMixaaSkpLF9yfWZ1bmN0aW9uIGZyKFZuLEJyLF9yLEZuKXt2YXIganI9Ym4oMTQpO2lmKGpyLndyaXRlX3NoaWZ0KDIsVm4pLGpy'@;
put 'LndyaXRlX3NoaWZ0KDEsX3IpLGpyLndyaXRlX3NoaWZ0KDEsQnIpLDA9PUZuKXJldHVybiBqci53cml0ZV9zaGlmdCg0LDApLGpyLndyaXRlX3NoaWZ0KDQsMCksanIud3JpdGVfc2hpZnQoMiw2NTUzNSksanI7dmFyIFppPTAseWk9MCxzbz0wO3JldHVybiBGbjwwJiYoWmk9MSxGbj0tRm4p'@;
put 'LHlpPTB8TWF0aC5sb2cyKEZuKSwyMTQ3NDgzNjQ4Jihzbz0oRm4vPU1hdGgucG93KDIseWktMzEpKT4+PjApfHwoKyt5aSxzbz0oRm4vPTIpPj4+MCksRm4tPXNvLHNvfD0yMTQ3NDgzNjQ4LHNvPj4+PTAsRm4qPU1hdGgucG93KDIsMzIpLGpyLndyaXRlX3NoaWZ0KDQsRm4+Pj4wKSxqci53'@;
put 'cml0ZV9zaGlmdCg0LHNvKSxqci53cml0ZV9zaGlmdCgyLHlpKz0xNjM4MysoWmk/MzI3Njg6MCkpLGpyfWZ1bmN0aW9uIE1pKFZuLEJyKXt2YXIgX3I9cnIoVm4pLEZuPVZuLnJlYWRfc2hpZnQoOCwiZiIpO3JldHVybiBfclsxXS52PUZuLF9yfWZ1bmN0aW9uIGNhKFZuLEJyKXt2YXIgX3I9'@;
put 'Ym4oNStWbi5sZW5ndGgpO19yLndyaXRlX3NoaWZ0KDIsMTRlMyksX3Iud3JpdGVfc2hpZnQoMixCcik7Zm9yKHZhciBGbj0wO0ZuPFZuLmxlbmd0aDsrK0ZuKXt2YXIganI9Vm4uY2hhckNvZGVBdChGbik7X3JbX3IubCsrXT1qcj4xMjc/OTU6anJ9cmV0dXJuIF9yW19yLmwrK109MCxfcn12'@;
put 'YXIgTGk9ezA6e246IkJPRiIsZjpFY30sMTp7bjoiRU9GIn0sMjp7bjoiQ0FMQ01PREUifSwzOntuOiJDQUxDT1JERVIifSw0OntuOiJTUExJVCJ9LDU6e246IlNZTkMifSw2OntuOiJSQU5HRSIsZjpmdW5jdGlvbiBwZShWbil7dmFyIEJyPXtzOntjOjAscjowfSxlOntjOjAscjowfX07cmV0'@;
put 'dXJuIEJyLnMuYz1Wbi5yZWFkX3NoaWZ0KDIpLEJyLnMucj1Wbi5yZWFkX3NoaWZ0KDIpLEJyLmUuYz1Wbi5yZWFkX3NoaWZ0KDIpLEJyLmUucj1Wbi5yZWFkX3NoaWZ0KDIpLDY1NTM1PT1Cci5zLmMmJihCci5zLmM9QnIuZS5jPUJyLnMucj1Cci5lLnI9MCksQnJ9fSw3OntuOiJXSU5ET1cx'@;
put 'In0sODp7bjoiQ09MVzEifSw5OntuOiJXSU5UV08ifSwxMDp7bjoiQ09MVzIifSwxMTp7bjoiTkFNRSJ9LDEyOntuOiJCTEFOSyJ9LDEzOntuOiJJTlRFR0VSIixmOmZ1bmN0aW9uIGV0KFZuLEJyLF9yKXt2YXIgRm49UGUoVm4sMCxfcik7cmV0dXJuIEZuWzFdLnY9Vm4ucmVhZF9zaGlmdCgy'@;
put 'LCJpIiksRm59fSwxNDp7bjoiTlVNQkVSIixmOmZ1bmN0aW9uIEV0KFZuLEJyLF9yKXt2YXIgRm49UGUoVm4sMCxfcik7cmV0dXJuIEZuWzFdLnY9Vm4ucmVhZF9zaGlmdCg4LCJmIiksRm59fSwxNTp7bjoiTEFCRUwiLGY6TmV9LDE2OntuOiJGT1JNVUxBIixmOmZ1bmN0aW9uIGJ0KFZuLEJy'@;
put 'LF9yKXt2YXIgRm49Vm4ubCtCcixqcj1QZShWbiwwLF9yKTtpZihqclsxXS52PVZuLnJlYWRfc2hpZnQoOCwiZiIpLF9yLnFwcm8pVm4ubD1GbjtlbHNle3ZhciBaaT1Wbi5yZWFkX3NoaWZ0KDIpOyhmdW5jdGlvbiBUbihWbixCcil7bW4oVm4sMCk7Zm9yKHZhciBfcj1bXSxGbj0wLGpyPSIi'@;
put 'LFppPSIiO1ZuLmw8Vm4ubGVuZ3RoOyl7dmFyIHlpPVZuW1ZuLmwrK107c3dpdGNoKHlpKXtjYXNlIDA6X3IucHVzaChWbi5yZWFkX3NoaWZ0KDgsImYiKSk7YnJlYWs7Y2FzZSAxOlppPWp0KEJyWzBdLmMsVm4ucmVhZF9zaGlmdCgyKSwhMCksanI9anQoQnJbMF0ucixWbi5yZWFkX3NoaWZ0'@;
put 'KDIpLCExKSxfci5wdXNoKFppK2pyKTticmVhaztjYXNlIDI6dmFyIF9hPWp0KEJyWzBdLmMsVm4ucmVhZF9zaGlmdCgyKSwhMCksc289anQoQnJbMF0ucixWbi5yZWFkX3NoaWZ0KDIpLCExKTtaaT1qdChCclswXS5jLFZuLnJlYWRfc2hpZnQoMiksITApLGpyPWp0KEJyWzBdLnIsVm4ucmVh'@;
put 'ZF9zaGlmdCgyKSwhMSksX3IucHVzaChfYStzbysiOiIrWmkranIpO2JyZWFrO2Nhc2UgMzppZihWbi5sPFZuLmxlbmd0aClyZXR1cm4gdm9pZCBjb25zb2xlLmVycm9yKCJXSzEgcHJlbWF0dXJlIGZvcm11bGEgZW5kIik7YnJlYWs7Y2FzZSA0Ol9yLnB1c2goIigiK19yLnBvcCgpKyIpIik7'@;
put 'YnJlYWs7Y2FzZSA1Ol9yLnB1c2goVm4ucmVhZF9zaGlmdCgyKSk7YnJlYWs7Y2FzZSA2OmZvcih2YXIgaWE9IiI7eWk9Vm5bVm4ubCsrXTspaWErPVN0cmluZy5mcm9tQ2hhckNvZGUoeWkpO19yLnB1c2goJyInK2lhLnJlcGxhY2UoLyIvZywnIiInKSsnIicpO2JyZWFrO2Nhc2UgODpfci5w'@;
put 'dXNoKCItIitfci5wb3AoKSk7YnJlYWs7Y2FzZSAyMzpfci5wdXNoKCIrIitfci5wb3AoKSk7YnJlYWs7Y2FzZSAyMjpfci5wdXNoKCJOT1QoIitfci5wb3AoKSsiKSIpO2JyZWFrO2Nhc2UgMjA6Y2FzZSAyMTp2YXIgTG89X3IucG9wKCksT2E9X3IucG9wKCk7X3IucHVzaChbIkFORCIsIk9S'@;
put 'Il1beWktMjBdKyIoIitPYSsiLCIrTG8rIikiKTticmVhaztkZWZhdWx0OmlmKHlpPDMyJiZLdFt5aV0pTG89X3IucG9wKCksT2E9X3IucG9wKCksX3IucHVzaChPYStLdFt5aV0rTG8pO2Vsc2V7aWYoIU90W3lpXSlyZXR1cm4geWk8PTc/Y29uc29sZS5lcnJvcigiV0sxIGludmFsaWQgb3Bj'@;
put 'b2RlICIreWkudG9TdHJpbmcoMTYpKTp5aTw9MjQ/Y29uc29sZS5lcnJvcigiV0sxIHVuc3VwcG9ydGVkIG9wICIreWkudG9TdHJpbmcoMTYpKTp5aTw9MzA/Y29uc29sZS5lcnJvcigiV0sxIGludmFsaWQgb3Bjb2RlICIreWkudG9TdHJpbmcoMTYpKTp5aTw9MTE1P2NvbnNvbGUuZXJyb3Io'@;
put 'IldLMSB1bnN1cHBvcnRlZCBmdW5jdGlvbiBvcGNvZGUgIit5aS50b1N0cmluZygxNikpOmNvbnNvbGUuZXJyb3IoIldLMSB1bnJlY29nbml6ZWQgb3Bjb2RlICIreWkudG9TdHJpbmcoMTYpKTtpZig2OT09KEZuPU90W3lpXVsxXSkmJihGbj1WbltWbi5sKytdKSxGbj5fci5sZW5ndGgpcmV0'@;
put 'dXJuIHZvaWQgY29uc29sZS5lcnJvcigiV0sxIGJhZCBmb3JtdWxhIHBhcnNlIDB4Iit5aS50b1N0cmluZygxNikrIjp8Iitfci5qb2luKCJ8IikrInwiKTt2YXIgaG89X3Iuc2xpY2UoLUZuKTtfci5sZW5ndGgtPUZuLF9yLnB1c2goT3RbeWldWzBdKyIoIitoby5qb2luKCIsIikrIikiKX19'@;
put 'fTE9PV9yLmxlbmd0aD9CclsxXS5mPSIiK19yWzBdOmNvbnNvbGUuZXJyb3IoIldLMSBiYWQgZm9ybXVsYSBwYXJzZSB8Iitfci5qb2luKCJ8IikrInwiKX0pKFZuLnNsaWNlKFZuLmwsVm4ubCtaaSksanIpLFZuLmwrPVppfXJldHVybiBqcn19LDI0OntuOiJUQUJMRSJ9LDI1OntuOiJPUkFO'@;
put 'R0UifSwyNjp7bjoiUFJBTkdFIn0sMjc6e246IlNSQU5HRSJ9LDI4OntuOiJGUkFOR0UifSwyOTp7bjoiS1JBTkdFMSJ9LDMyOntuOiJIUkFOR0UifSwzNTp7bjoiS1JBTkdFMiJ9LDM2OntuOiJQUk9URUMifSwzNzp7bjoiRk9PVEVSIn0sMzg6e246IkhFQURFUiJ9LDM5OntuOiJTRVRVUCJ9'@;
put 'LDQwOntuOiJNQVJHSU5TIn0sNDE6e246IkxBQkVMRk1UIn0sNDI6e246IlRJVExFUyJ9LDQzOntuOiJTSEVFVEpTIn0sNDU6e246IkdSQVBIIn0sNDY6e246Ik5HUkFQSCJ9LDQ3OntuOiJDQUxDQ09VTlQifSw0ODp7bjoiVU5GT1JNQVRURUQifSw0OTp7bjoiQ1VSU09SVzEyIn0sNTA6e246'@;
put 'IldJTkRPVyJ9LDUxOntuOiJTVFJJTkciLGY6TmV9LDU1OntuOiJQQVNTV09SRCJ9LDU2OntuOiJMT0NLRUQifSw2MDp7bjoiUVVFUlkifSw2MTp7bjoiUVVFUllOQU1FIn0sNjI6e246IlBSSU5UIn0sNjM6e246IlBSSU5UTkFNRSJ9LDY0OntuOiJHUkFQSDIifSw2NTp7bjoiR1JBUEhOQU1F'@;
put 'In0sNjY6e246IlpPT00ifSw2Nzp7bjoiU1lNU1BMSVQifSw2ODp7bjoiTlNST1dTIn0sNjk6e246Ik5TQ09MUyJ9LDcwOntuOiJSVUxFUiJ9LDcxOntuOiJOTkFNRSJ9LDcyOntuOiJBQ09NTSJ9LDczOntuOiJBTUFDUk8ifSw3NDp7bjoiUEFSU0UifSwxMDI6e246IlBSQU5HRVM/PyJ9LDEw'@;
put 'Mzp7bjoiUlJBTkdFUz8/In0sMTA0OntuOiJGTkFNRT8/In0sMTA1OntuOiJNUkFOR0VTPz8ifSw2NTUzNTp7bjoiIn19LGtyPXswOntuOiJCT0YifSwxOntuOiJFT0YifSwyOntuOiJQQVNTV09SRCJ9LDM6e246IkNBTENTRVQifSw0OntuOiJXSU5ET1dTRVQifSw1OntuOiJTSEVFVENFTExQ'@;
put 'VFIifSw2OntuOiJTSEVFVExBWU9VVCJ9LDc6e246IkNPTFVNTldJRFRIIn0sODp7bjoiSElEREVOQ09MVU1OIn0sOTp7bjoiVVNFUlJBTkdFIn0sMTA6e246IlNZU1RFTVJBTkdFIn0sMTE6e246IlpFUk9GT1JDRSJ9LDEyOntuOiJTT1JUS0VZRElSIn0sMTM6e246IkZJTEVTRUFMIn0sMTQ6'@;
put 'e246IkRBVEFGSUxMTlVNUyJ9LDE1OntuOiJQUklOVE1BSU4ifSwxNjp7bjoiUFJJTlRTVFJJTkcifSwxNzp7bjoiR1JBUEhNQUlOIn0sMTg6e246IkdSQVBIU1RSSU5HIn0sMTk6e246Ij8/In0sMjA6e246IkVSUkNFTEwifSwyMTp7bjoiTkFDRUxMIn0sMjI6e246IkxBQkVMMTYiLGY6ZnVu'@;
put 'Y3Rpb24gU24oVm4sQnIpe3ZhciBfcj1ycihWbik7cmV0dXJuIF9yWzFdLnQ9InMiLF9yWzFdLnY9Vm4ucmVhZF9zaGlmdChCci00LCJjc3RyIiksX3J9fSwyMzp7bjoiTlVNQkVSMTciLGY6Qm59LDI0OntuOiJOVU1CRVIxOCIsZjpmdW5jdGlvbiBYbihWbixCcil7dmFyIF9yPXJyKFZuKTtf'@;
put 'clsxXS52PVZuLnJlYWRfc2hpZnQoMik7dmFyIEZuPV9yWzFdLnY+PjE7aWYoMSZfclsxXS52KXN3aXRjaCg3JkZuKXtjYXNlIDA6Rm49NWUzKihGbj4+Myk7YnJlYWs7Y2FzZSAxOkZuPTUwMCooRm4+PjMpO2JyZWFrO2Nhc2UgMjpGbj0oRm4+PjMpLzIwO2JyZWFrO2Nhc2UgMzpGbj0oRm4+'@;
put 'PjMpLzIwMDticmVhaztjYXNlIDQ6Rm49KEZuPj4zKS8yZTM7YnJlYWs7Y2FzZSA1OkZuPShGbj4+MykvMmU0O2JyZWFrO2Nhc2UgNjpGbj0oRm4+PjMpLzE2O2JyZWFrO2Nhc2UgNzpGbj0oRm4+PjMpLzY0fXJldHVybiBfclsxXS52PUZuLF9yfX0sMjU6e246IkZPUk1VTEExOSIsZjpmdW5j'@;
put 'dGlvbiBicihWbixCcil7dmFyIF9yPUJuKFZuKTtyZXR1cm4gVm4ubCs9QnItMTQsX3J9fSwyNjp7bjoiRk9STVVMQTFBIn0sMjc6e246IlhGT1JNQVQiLGY6ZnVuY3Rpb24gbmEoVm4sQnIpe2Zvcih2YXIgX3I9e30sRm49Vm4ubCtCcjtWbi5sPEZuOyl7dmFyIGpyPVZuLnJlYWRfc2hpZnQo'@;
put 'Mik7aWYoMTRlMz09anIpe2Zvcihfcltqcl09WzAsIiJdLF9yW2pyXVswXT1Wbi5yZWFkX3NoaWZ0KDIpO1ZuW1ZuLmxdOylfcltqcl1bMV0rPVN0cmluZy5mcm9tQ2hhckNvZGUoVm5bVm4ubF0pLFZuLmwrKztWbi5sKyt9fXJldHVybiBfcn19LDI4OntuOiJEVExBQkVMTUlTQyJ9LDI5Ontu'@;
put 'OiJEVExBQkVMQ0VMTCJ9LDMwOntuOiJHUkFQSFdJTkRPVyJ9LDMxOntuOiJDUEEifSwzMjp7bjoiTFBMQVVUTyJ9LDMzOntuOiJRVUVSWSJ9LDM0OntuOiJISURERU5TSEVFVCJ9LDM1OntuOiI/PyJ9LDM3OntuOiJOVU1CRVIyNSIsZjpmdW5jdGlvbiBlcihWbixCcil7dmFyIF9yPXJyKFZu'@;
put 'KSxGbj1Wbi5yZWFkX3NoaWZ0KDQpO3JldHVybiBfclsxXS52PUZuPj42LF9yfX0sMzg6e246Ij8/In0sMzk6e246Ik5VTUJFUjI3IixmOk1pfSw0MDp7bjoiRk9STVVMQTI4IixmOmZ1bmN0aW9uIEZpKFZuLEJyKXt2YXIgX3I9TWkoVm4pO3JldHVybiBWbi5sKz1Cci0xMCxfcn19LDE0Mjp7'@;
put 'bjoiPz8ifSwxNDc6e246Ij8/In0sMTUwOntuOiI/PyJ9LDE1MTp7bjoiPz8ifSwxNTI6e246Ij8/In0sMTUzOntuOiI/PyJ9LDE1NDp7bjoiPz8ifSwxNTU6e246Ij8/In0sMTU2OntuOiI/PyJ9LDE2Mzp7bjoiPz8ifSwxNzQ6e246Ij8/In0sMTc1OntuOiI/PyJ9LDE3Njp7bjoiPz8ifSwx'@;
put 'Nzc6e246Ij8/In0sMTg0OntuOiI/PyJ9LDE4NTp7bjoiPz8ifSwxODY6e246Ij8/In0sMTg3OntuOiI/PyJ9LDE4ODp7bjoiPz8ifSwxOTU6e246Ij8/In0sMjAxOntuOiI/PyJ9LDIwNTp7bjoiPz8ifSwyMDY6e246Ij8/In0sMjA3OntuOiI/PyJ9LDIwODp7bjoiPz8ifSwyNTY6e246Ij8/'@;
put 'In0sMjU5OntuOiI/PyJ9LDI2MDp7bjoiPz8ifSwyNjE6e246Ij8/In0sMjYyOntuOiI/PyJ9LDI2Mzp7bjoiPz8ifSwyNjU6e246Ij8/In0sMjY2OntuOiI/PyJ9LDI2Nzp7bjoiPz8ifSwyNjg6e246Ij8/In0sMjcwOntuOiI/PyJ9LDI3MTp7bjoiPz8ifSwzODQ6e246Ij8/In0sMzg5Ontu'@;
put 'OiI/PyJ9LDM5MDp7bjoiPz8ifSwzOTM6e246Ij8/In0sMzk2OntuOiI/PyJ9LDUxMjp7bjoiPz8ifSw1MTQ6e246Ij8/In0sNTEzOntuOiI/PyJ9LDUxNjp7bjoiPz8ifSw1MTc6e246Ij8/In0sNjQwOntuOiI/PyJ9LDY0MTp7bjoiPz8ifSw2NDI6e246Ij8/In0sNjQzOntuOiI/PyJ9LDY0'@;
put 'NDp7bjoiPz8ifSw2NDU6e246Ij8/In0sNjQ2OntuOiI/PyJ9LDY0Nzp7bjoiPz8ifSw2NDg6e246Ij8/In0sNjU4OntuOiI/PyJ9LDY1OTp7bjoiPz8ifSw2NjA6e246Ij8/In0sNjYxOntuOiI/PyJ9LDY2Mjp7bjoiPz8ifSw2NjU6e246Ij8/In0sNjY2OntuOiI/PyJ9LDc2ODp7bjoiPz8i'@;
put 'fSw3NzI6e246Ij8/In0sMTYwMDp7bjoiPz8ifSwxNjAyOntuOiI/PyJ9LDE3OTM6e246Ij8/In0sMTc5NDp7bjoiPz8ifSwxNzk1OntuOiI/PyJ9LDE3OTY6e246Ij8/In0sMTkyMDp7bjoiPz8ifSwyMDQ4OntuOiI/PyJ9LDIwNDk6e246Ij8/In0sMjA1Mjp7bjoiPz8ifSwyNjg4OntuOiI/'@;
put 'PyJ9LDEwOTk4OntuOiI/PyJ9LDEyODQ5OntuOiI/PyJ9LDI4MjMzOntuOiI/PyJ9LDI4NDg0OntuOiI/PyJ9LDY1NTM1OntuOiIifX07cmV0dXJue3NoZWV0X3RvX3drMTpmdW5jdGlvbiBHKFZuLEJyKXt2YXIgX3I9QnJ8fHt9O2lmKCtfci5jb2RlcGFnZT49MCYmVSgrX3IuY29kZXBhZ2Up'@;
put 'LCJzdHJpbmciPT1fci50eXBlKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IHdyaXRlIFdLMSB0byBKUyBzdHJpbmciKTt2YXIgRm49YmkoKSxqcj1vbyhWblsiIXJlZiJdKSxaaT1BcnJheS5pc0FycmF5KFZuKSx5aT1bXTtHaShGbiwwLGZ1bmN0aW9uIG9lKFZuKXt2YXIgQnI9Ym4oMik7cmV0'@;
put 'dXJuIEJyLndyaXRlX3NoaWZ0KDIsVm4pLEJyfSgxMDMwKSksR2koRm4sNixmdW5jdGlvbiB5ZShWbil7dmFyIEJyPWJuKDgpO3JldHVybiBCci53cml0ZV9zaGlmdCgyLFZuLnMuYyksQnIud3JpdGVfc2hpZnQoMixWbi5zLnIpLEJyLndyaXRlX3NoaWZ0KDIsVm4uZS5jKSxCci53cml0ZV9z'@;
put 'aGlmdCgyLFZuLmUuciksQnJ9KGpyKSk7Zm9yKHZhciBfYT1qci5zLnI7X2E8PWpyLmUucjsrK19hKWZvcih2YXIgc289amkoX2EpLGlhPWpyLnMuYztpYTw9anIuZS5jOysraWEpe19hPT09anIucy5yJiYoeWlbaWFdPVRhKGlhKSk7dmFyIE9hPVppPyhWbltfYV18fFtdKVtpYV06Vm5beWlb'@;
put 'aWFdK3NvXTtPYSYmInoiIT1PYS50JiYoIm4iPT1PYS50PygwfE9hLnYpPT1PYS52JiZPYS52Pj0tMzI3NjgmJk9hLnY8PTMyNzY3P0dpKEZuLDEzLGN0KF9hLGlhLE9hLnYpKTpHaShGbiwxNCxhdChfYSxpYSxPYS52KSk6R2koRm4sMTUsWWUoX2EsaWEsX2woT2EpLnNsaWNlKDAsMjM5KSkp'@;
put 'KX1yZXR1cm4gR2koRm4sMSksRm4uZW5kKCl9LGJvb2tfdG9fd2szOmZ1bmN0aW9uIFEoVm4sQnIpe3ZhciBfcj1Ccnx8e307aWYoK19yLmNvZGVwYWdlPj0wJiZVKCtfci5jb2RlcGFnZSksInN0cmluZyI9PV9yLnR5cGUpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3Qgd3JpdGUgV0szIHRvIEpT'@;
put 'IHN0cmluZyIpO3ZhciBGbj1iaSgpO0dpKEZuLDAsZnVuY3Rpb24gZ2UoVm4pe3ZhciBCcj1ibigyNik7QnIud3JpdGVfc2hpZnQoMiw0MDk2KSxCci53cml0ZV9zaGlmdCgyLDQpLEJyLndyaXRlX3NoaWZ0KDQsMCk7Zm9yKHZhciBfcj0wLEZuPTAsanI9MCxaaT0wO1ppPFZuLlNoZWV0TmFt'@;
put 'ZXMubGVuZ3RoOysrWmkpe3ZhciBfYT1Wbi5TaGVldHNbVm4uU2hlZXROYW1lc1taaV1dO2lmKF9hJiZfYVsiIXJlZiJdKXsrK2pyO3ZhciBzbz1NcyhfYVsiIXJlZiJdKTtfcjxzby5lLnImJihfcj1zby5lLnIpLEZuPHNvLmUuYyYmKEZuPXNvLmUuYyl9fXJldHVybiBCci53cml0ZV9zaGlm'@;
put 'dCgyLF9yKSxCci53cml0ZV9zaGlmdCgxLGpyKSxCci53cml0ZV9zaGlmdCgxLEZuKSxCci53cml0ZV9zaGlmdCgyLDApLEJyLndyaXRlX3NoaWZ0KDIsMCksQnIud3JpdGVfc2hpZnQoMSwxKSxCci53cml0ZV9zaGlmdCgxLDIpLEJyLndyaXRlX3NoaWZ0KDQsMCksQnIud3JpdGVfc2hpZnQo'@;
put 'NCwwKSxCcn0oVm4pKTtmb3IodmFyIGpyPTAsWmk9MDtqcjxWbi5TaGVldE5hbWVzLmxlbmd0aDsrK2pyKShWbi5TaGVldHNbVm4uU2hlZXROYW1lc1tqcl1dfHx7fSlbIiFyZWYiXSYmR2koRm4sMjcsY2EoVm4uU2hlZXROYW1lc1tqcl0sWmkrKykpO3ZhciB5aT0wO2Zvcihqcj0wO2pyPFZu'@;
put 'LlNoZWV0TmFtZXMubGVuZ3RoOysranIpe3ZhciBfYT1Wbi5TaGVldHNbVm4uU2hlZXROYW1lc1tqcl1dO2lmKF9hJiZfYVsiIXJlZiJdKXtmb3IodmFyIHNvPW9vKF9hWyIhcmVmIl0pLGlhPUFycmF5LmlzQXJyYXkoX2EpLExvPVtdLE9hPXNvLnMucjtPYTw9c28uZS5yOysrT2EpZm9yKHZh'@;
put 'ciBobz1qaShPYSksSmE9c28ucy5jO0phPD1zby5lLmM7KytKYSl7T2E9PT1zby5zLnImJihMb1tKYV09VGEoSmEpKTt2YXIgSXM9aWE/KF9hW09hXXx8W10pW0phXTpfYVtMb1tKYV0raG9dO0lzJiYieiIhPUlzLnQmJigibiI9PUlzLnQ/R2koRm4sMjMsZnIoT2EsSmEseWksSXMudikpOkdp'@;
put 'KEZuLDIyLGxyKE9hLEphLHlpLF9sKElzKS5zbGljZSgwLDIzOSkpKSl9Kyt5aX19cmV0dXJuIEdpKEZuLDEpLEZuLmVuZCgpfSx0b193b3JrYm9vazpmdW5jdGlvbiBSKFZuLEJyKXtzd2l0Y2goQnIudHlwZSl7Y2FzZSJiYXNlNjQiOnJldHVybiBrKGIoX2UuZGVjb2RlKFZuKSksQnIpO2Nh'@;
put 'c2UiYmluYXJ5IjpyZXR1cm4gayhiKFZuKSxCcik7Y2FzZSJidWZmZXIiOmNhc2UiYXJyYXkiOnJldHVybiBrKFZuLEJyKX10aHJvdyJVbnN1cHBvcnRlZCB0eXBlICIrQnIudHlwZX19fSgpLHc1PWZ1bmN0aW9uKCl7dmFyIFM9RDAoInQiKSxSPUQwKCJyUHIiKTtmdW5jdGlvbiBrKG9lKXt2'@;
put 'YXIgZ2U9b2UubWF0Y2goUyk7aWYoIWdlKXJldHVybnt0OiJzIix2OiIifTt2YXIgcGU9e3Q6InMiLHY6UXIoZ2VbMV0pfSx5ZT1vZS5tYXRjaChSKTtyZXR1cm4geWUmJihwZS5zPWZ1bmN0aW9uIG9rKFMpe3ZhciBSPXt9LGs9Uy5tYXRjaChlbiksRz0wLFE9ITE7aWYoaylmb3IoO0chPWsu'@;
put 'bGVuZ3RoOysrRyl7dmFyIG9lPXZyKGtbR10pO3N3aXRjaChvZVswXS5yZXBsYWNlKC9cdyo6L2csIiIpKXtjYXNlIjxjb25kZW5zZSI6Y2FzZSI8ZXh0ZW5kIjpicmVhaztjYXNlIjxzaGFkb3ciOmlmKCFvZS52YWwpYnJlYWs7Y2FzZSI8c2hhZG93PiI6Y2FzZSI8c2hhZG93Lz4iOlIuc2hh'@;
put 'ZG93PTE7YnJlYWs7Y2FzZSI8L3NoYWRvdz4iOmJyZWFrO2Nhc2UiPGNoYXJzZXQiOmlmKCIxIj09b2UudmFsKWJyZWFrO1IuY3A9TltwYXJzZUludChvZS52YWwsMTApXTticmVhaztjYXNlIjxvdXRsaW5lIjppZighb2UudmFsKWJyZWFrO2Nhc2UiPG91dGxpbmU+IjpjYXNlIjxvdXRsaW5l'@;
put 'Lz4iOlIub3V0bGluZT0xO2JyZWFrO2Nhc2UiPC9vdXRsaW5lPiI6YnJlYWs7Y2FzZSI8ckZvbnQiOlIubmFtZT1vZS52YWw7YnJlYWs7Y2FzZSI8c3oiOlIuc3o9b2UudmFsO2JyZWFrO2Nhc2UiPHN0cmlrZSI6aWYoIW9lLnZhbClicmVhaztjYXNlIjxzdHJpa2U+IjpjYXNlIjxzdHJpa2Uv'@;
put 'PiI6Ui5zdHJpa2U9MTticmVhaztjYXNlIjwvc3RyaWtlPiI6YnJlYWs7Y2FzZSI8dSI6aWYoIW9lLnZhbClicmVhaztzd2l0Y2gob2UudmFsKXtjYXNlImRvdWJsZSI6Ui51bmRlcmxpbmU9MjticmVhaztjYXNlInNpbmdsZUFjY291bnRpbmciOlIudW5kZXJsaW5lPTMzO2JyZWFrO2Nhc2Ui'@;
put 'ZG91YmxlQWNjb3VudGluZyI6Ui51bmRlcmxpbmU9MzR9Y2FzZSI8dT4iOmNhc2UiPHUvPiI6Ui51bmRlcmxpbmV8fChSLnVuZGVybGluZT0xKTticmVhaztjYXNlIjwvdT4iOmJyZWFrO2Nhc2UiPGIiOmlmKCIwIj09b2UudmFsKWJyZWFrO2Nhc2UiPGI+IjpjYXNlIjxiLz4iOlIuYm9sZD0x'@;
put 'O2JyZWFrO2Nhc2UiPC9iPiI6YnJlYWs7Y2FzZSI8aSI6aWYoIjAiPT1vZS52YWwpYnJlYWs7Y2FzZSI8aT4iOmNhc2UiPGkvPiI6Ui5pdGFsaWM9MTticmVhaztjYXNlIjwvaT4iOmJyZWFrO2Nhc2UiPGNvbG9yIjpvZS5yZ2ImJihSLmNvbG9yPXtyZ2I6OD09b2UucmdiLmxlbmd0aD9vZS5y'@;
put 'Z2Iuc2xpY2UoMiw4KTooIjAwMDAwMCIrb2UucmdiKS5zbGljZSgtNil9KTticmVhaztjYXNlIjxmYW1pbHkiOlIuZmFtaWx5PW9lLnZhbDticmVhaztjYXNlIjx2ZXJ0QWxpZ24iOiJub25lIiE9KG9lLnZhbHx8Im5vbmUiKSYmKFIudmFsaWduPW9lLnZhbC5yZXBsYWNlKCJzY3JpcHQiLCIi'@;
put 'KSk7YnJlYWs7Y2FzZSI8c2NoZW1lIjpjYXNlIjxleHRMc3QiOmNhc2UiPGV4dExzdD4iOmNhc2UiPC9leHRMc3Q+IjpicmVhaztjYXNlIjxleHQiOlE9ITA7YnJlYWs7Y2FzZSI8L2V4dD4iOlE9ITE7YnJlYWs7ZGVmYXVsdDppZig0NyE9PW9lWzBdLmNoYXJDb2RlQXQoMSkmJiFRKXRocm93'@;
put 'IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkIHJpY2ggZm9ybWF0ICIrb2VbMF0pfX1yZXR1cm4gUn0oeWVbMV0pKSxwZX12YXIgRz0vPCg/Olx3KzopP3I+L2csUT0vPFwvKD86XHcrOik/cj4vO3JldHVybiBmdW5jdGlvbihnZSl7cmV0dXJuIGdlLnJlcGxhY2UoRywiIikuc3BsaXQoUSkubWFw'@;
put 'KGspLmZpbHRlcihmdW5jdGlvbihwZSl7cmV0dXJuIHBlLnZ9KX19KCksd1Y9ezE6InNpbmdsZSIsMjoiZG91YmxlIiwzMzoic2luZ2xlLWFjY291bnRpbmciLDM0OiJkb3VibGUtYWNjb3VudGluZyJ9LFZ1PWZ1bmN0aW9uKCl7dmFyIFI9LyhcclxufFxuKS9nO2Z1bmN0aW9uIEcoUSl7dmFy'@;
put 'IG9lPVtbXSxRLnYsW11dO3JldHVybiBRLnY/KFEucyYmZnVuY3Rpb24gayhRLG9lLGdlKXt2YXIgcGU9W107US51bmRlcmxpbmUmJnBlLnB1c2goInRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOyIpLFEudW5kZXJsaW5lPjEmJnBlLnB1c2goInRleHQtdW5kZXJsaW5lLXN0eWxlOiIrd1Zb'@;
put 'US51bmRlcmxpbmVdKyI7IiksUS5zeiYmcGUucHVzaCgiZm9udC1zaXplOiIrUS5zeisicHQ7IiksUS5vdXRsaW5lJiZwZS5wdXNoKCJ0ZXh0LWVmZmVjdDogb3V0bGluZTsiKSxRLnNoYWRvdyYmcGUucHVzaCgidGV4dC1zaGFkb3c6IGF1dG87IiksUS5jb2xvciYmUS5jb2xvci5yZ2ImJnBl'@;
put 'LnB1c2goImNvbG9yOiAjIitQMChRLmNvbG9yLnJnYikrIjsiKSxvZS5wdXNoKCc8c3BhbiBzdHlsZT0iJytwZS5qb2luKCIiKSsnIj4nKSxRLmJvbGQmJihvZS5wdXNoKCI8Yj4iKSxnZS5wdXNoKCI8L2I+IikpLFEuaXRhbGljJiYob2UucHVzaCgiPGk+IiksZ2UucHVzaCgiPC9pPiIpKSxR'@;
put 'LnN0cmlrZSYmKG9lLnB1c2goIjxzPiIpLGdlLnB1c2goIjwvcz4iKSk7dmFyIHllPVEudmFsaWdufHwiIjsic3VwZXJzY3JpcHQiPT15ZXx8InN1cGVyIj09eWU/eWU9InN1cCI6InN1YnNjcmlwdCI9PXllJiYoeWU9InN1YiIpLCIiIT15ZSYmKG9lLnB1c2goIjwiK3llKyI+IiksZ2UucHVz'@;
put 'aCgiPC8iK3llKyI+IikpLGdlLnB1c2goIjwvc3Bhbj4iKX0oUS5zLG9lWzBdLG9lWzJdKSxvZVswXS5qb2luKCIiKStvZVsxXS5yZXBsYWNlKFIsIjxici8+Iikrb2VbMl0uam9pbigiIikpOiIifXJldHVybiBmdW5jdGlvbihvZSl7cmV0dXJuIG9lLm1hcChHKS5qb2luKCIiKX19KCk7ZnVu'@;
put 'Y3Rpb24gUXMoUyl7cmV0dXJuIFMubWFwKGZ1bmN0aW9uKGspe3JldHVybiBmdW5jdGlvbiBBNChTKXt2YXIgUj0iIixrPVtdO3JldHVybiBTLnMmJihTLnMuYm9sZCYmay5wdXNoKCI8Yi8+IiksUy5zLml0YWxpYyYmay5wdXNoKCI8aS8+IiksUy5zLnN0cmlrZSYmay5wdXNoKCI8c3RyaWtl'@;
put 'Lz4iKSxTLnMudW5kZXJsaW5lJiZrLnB1c2goJzx1IHZhbD0iJysoQTVbUy5zLnVuZGVybGluZV18fCJzaW5nbGUiKSsnIi8+JyksUy5zLmNvbG9yJiZrLnB1c2goZ2QoUy5zLmNvbG9yKSksUy5zLnN6JiZrLnB1c2goJzxzeiB2YWw9IicrUy5zLnN6KyciLz4nKSxTLnMubmFtZSYmay5wdXNo'@;
put 'KCc8ckZvbnQgdmFsPSInK1Mucy5uYW1lKyciLz4nKSwoInN1cGVyIj09Uy5zLnZhbGlnbnx8InN1YiI9PVMucy52YWxpZ24pJiZrLnB1c2goJzx2ZXJ0QWxpZ24gdmFsPSInK1Mucy52YWxpZ24rJ3NjcmlwdCIvPicpKSxrLmxlbmd0aCYmKFIrPSI8clByPiIray5qb2luKCIiKSsiPC9yUHI+'@;
put 'IiksIjxyPiIrKFIrPVByKCJ0IixMcihTLnYpLG51bGwpKSsiPC9yPiJ9KGspfSkuam9pbigiIil9dmFyIENWPS88KD86XHcrOik/dFtePl0qPihbXjxdKik8XC8oPzpcdys6KT90Pi9nLFNWPS88KD86XHcrOik/clxiW14+XSo+LyxNVj0vPCg/Olx3KzopP3JQaC4qPz4oW1xzXFNdKj8pPFwv'@;
put 'KD86XHcrOik/clBoPi9nO2Z1bmN0aW9uIHVDKFMsUil7dmFyIGs9IVJ8fFIuY2VsbEhUTUwsRz17fTtyZXR1cm4gUz8oUy5tYXRjaCgvXlxzKjwoPzpcdys6KT90W14+XSo+Lyk/KEcudD1RcihnbyhTLnNsaWNlKFMuaW5kZXhPZigiPiIpKzEpLnNwbGl0KC88XC8oPzpcdys6KT90Pi8pWzBd'@;
put 'fHwiIikpLEcucj1nbyhTKSxrJiYoRy5oPWxhKEcudCkpKTpTLm1hdGNoKFNWKSYmKEcucj1nbyhTKSxHLnQ9UXIoZ28oKFMucmVwbGFjZShNViwiIikubWF0Y2goQ1YpfHxbXSkuam9pbigiIikucmVwbGFjZShlbiwiIikpKSxHLlI9dzUoRy5yKSxrJiYoRy5oPVZ1KEcuUikpKSxHKTp7dDoi'@;
put 'In19dmFyIHNrPS88KD86XHcrOik/c3N0KFtePl0qKT4oW1xzXFNdKik8XC8oPzpcdys6KT9zc3Q+Lyxsaz0vPCg/Olx3KzopPyg/OnNpfHNzdEl0ZW0pPi9nLHE2PS88XC8oPzpcdys6KT8oPzpzaXxzc3RJdGVtKT4vO0thLlNTVD0iaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3Jn'@;
put 'L29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlwcy9zaGFyZWRTdHJpbmdzIjt2YXIgeFY9L15cc3xccyR8W1x0XG5ccl0vO2Z1bmN0aW9uIFJ2KFMsUil7aWYoIVIuYm9va1NTVClyZXR1cm4iIjt2YXIgaz1bSWldO2tbay5sZW5ndGhdPVByKCJzc3QiLG51bGwse3htbG5zOllpLm1h'@;
put 'aW5bMF0sY291bnQ6Uy5Db3VudCx1bmlxdWVDb3VudDpTLlVuaXF1ZX0pO2Zvcih2YXIgRz0wO0chPVMubGVuZ3RoOysrRylpZihudWxsIT1TW0ddKXt2YXIgUT1TW0ddLG9lPSI8c2k+IjtRLnI/b2UrPVEucjoob2UrPSI8dCIsUS50fHwoUS50PSIiKSxRLnQubWF0Y2goeFYpJiYob2UrPScg'@;
put 'eG1sOnNwYWNlPSJwcmVzZXJ2ZSInKSxvZSs9Ij4iK0xyKFEudCkrIjwvdD4iKSxrW2subGVuZ3RoXT1vZSs9Ijwvc2k+In1yZXR1cm4gay5sZW5ndGg+MiYmKGtbay5sZW5ndGhdPSI8L3NzdD4iLGtbMV09a1sxXS5yZXBsYWNlKCIvPiIsIj4iKSksay5qb2luKCIiKX12YXIgY2s9ZnVuY3Rp'@;
put 'b24gSTMoUyxSLGspe3ZhciBHPTEzKzQqUy50Lmxlbmd0aCxRPVMuUiYmUy5SLmxlbmd0aHx8Uy5yO1MuciYmKFMuUj13NShTLnIpKSxRJiYoRys9NCs0KlMuUi5sZW5ndGgpO3ZhciBvZT0hMTtpZihudWxsPT1rJiYob2U9ITAsaz1ibihHKSksay53cml0ZV9zaGlmdCgxLFE/MTowKSxGYyhT'@;
put 'LnQsayksUSl7ay53cml0ZV9zaGlmdCg0LFMuUi5sZW5ndGgpO2Zvcih2YXIgZ2U9MCxwZT0wO3BlPFMuUi5sZW5ndGg7KytwZSl7dmFyIHllPVMuUltwZV07ay53cml0ZV9zaGlmdCgyLGdlKSxnZSs9KHllLnZ8fCIiKS5sZW5ndGg7dmFyIFBlPXllLnM/bDAoUi5jZWxsWGZzLFIuY2VsbFN0'@;
put 'eWxlWGZzLHt0OiJuIix2OjAsczp5ZS5zfSxSKTowO2sud3JpdGVfc2hpZnQoMixSLmNlbGxYZnNbUGVdLmZvbnRJZCl9fXJldHVybiBvZT9rLnNsaWNlKDAsay5sKTprfTtmdW5jdGlvbiB1ayhTLFIpe3ZhciBrPWJpKCk7RnIoaywiQnJ0QmVnaW5Tc3QiLGZ1bmN0aW9uIGRDKFMsUil7cmV0'@;
put 'dXJuIFJ8fChSPWJuKDgpKSxSLndyaXRlX3NoaWZ0KDQsUy5Db3VudCksUi53cml0ZV9zaGlmdCg0LFMuVW5pcXVlKSxSfShTKSk7Zm9yKHZhciBHPTA7RzxTLmxlbmd0aDsrK0cpRnIoaywiQnJ0U1NUSXRlbSIsY2soU1tHXSxSKSk7cmV0dXJuIEZyKGssIkJydEVuZFNzdCIpLGsuZW5kKCl9'@;
put 'ZnVuY3Rpb24gazQoUyl7aWYodHlwZW9mIGNwdGFibGU8InUiKXJldHVybiBjcHRhYmxlLnV0aWxzLmVuY29kZShGLFMpO2Zvcih2YXIgUj1bXSxrPVMuc3BsaXQoIiIpLEc9MDtHPGsubGVuZ3RoOysrRylSW0ddPWtbR10uY2hhckNvZGVBdCgwKTtyZXR1cm4gUn1mdW5jdGlvbiBQMShTLFIp'@;
put 'e3ZhciBrPXt9O3JldHVybiBrLk1ham9yPVMucmVhZF9zaGlmdCgyKSxrLk1pbm9yPVMucmVhZF9zaGlmdCgyKSxSPj00JiYoUy5sKz1SLTQpLGt9ZnVuY3Rpb24gaEMoUyl7Zm9yKHZhciBSPVMucmVhZF9zaGlmdCg0KSxrPVMubCtSLTQsRz17fSxRPVMucmVhZF9zaGlmdCg0KSxvZT1bXTtR'@;
put 'LS0gPjA7KW9lLnB1c2goe3Q6Uy5yZWFkX3NoaWZ0KDQpLHY6Uy5yZWFkX3NoaWZ0KDAsImxwcDQiKX0pO2lmKEcubmFtZT1TLnJlYWRfc2hpZnQoMCwibHBwNCIpLEcuY29tcHM9b2UsUy5sIT1rKXRocm93IG5ldyBFcnJvcigiQmFkIERhdGFTcGFjZU1hcEVudHJ5OiAiK1MubCsiICE9ICIr'@;
put 'ayk7cmV0dXJuIEd9ZnVuY3Rpb24gSVYoUyxSKXt2YXIgaz1TLmwrUixHPXt9O0cuRmxhZ3M9NjMmUy5yZWFkX3NoaWZ0KDQpLFMubCs9NCxHLkFsZ0lEPVMucmVhZF9zaGlmdCg0KTt2YXIgUT0hMTtzd2l0Y2goRy5BbGdJRCl7Y2FzZSAyNjEyNjpjYXNlIDI2MTI3OmNhc2UgMjYxMjg6UT0z'@;
put 'Nj09Ry5GbGFnczticmVhaztjYXNlIDI2NjI1OlE9ND09KDUyJkcuRmxhZ3MpO2JyZWFrO2Nhc2UgMDpRPTE2PT1HLkZsYWdzfHw0PT1HLkZsYWdzfHwzNj09Ry5GbGFnczticmVhaztkZWZhdWx0OnRocm93IlVucmVjb2duaXplZCBlbmNyeXB0aW9uIGFsZ29yaXRobTogIitHLkFsZ0lEfWlm'@;
put 'KCFRKXRocm93IG5ldyBFcnJvcigiRW5jcnlwdGlvbiBGbGFncy9BbGdJRCBtaXNtYXRjaCIpO3JldHVybiBHLkFsZ0lESGFzaD1TLnJlYWRfc2hpZnQoNCksRy5LZXlTaXplPVMucmVhZF9zaGlmdCg0KSxHLlByb3ZpZGVyVHlwZT1TLnJlYWRfc2hpZnQoNCksUy5sKz04LEcuQ1NQTmFtZT1T'@;
put 'LnJlYWRfc2hpZnQoay1TLmw+PjEsInV0ZjE2bGUiKSxTLmw9ayxHfWZ1bmN0aW9uIFB2KFMsUil7dmFyIGs9e30sRz1TLmwrUjtyZXR1cm4gUy5sKz00LGsuU2FsdD1TLnNsaWNlKFMubCxTLmwrMTYpLFMubCs9MTYsay5WZXJpZmllcj1TLnNsaWNlKFMubCxTLmwrMTYpLFMubCs9MTYsUy5y'@;
put 'ZWFkX3NoaWZ0KDQpLGsuVmVyaWZpZXJIYXNoPVMuc2xpY2UoUy5sLEcpLFMubD1HLGt9ZnVuY3Rpb24gUlYoUyl7aWYoMzYhPSg2MyZTLnJlYWRfc2hpZnQoNCkpKXRocm93IG5ldyBFcnJvcigiRW5jcnlwdGlvbkluZm8gbWlzbWF0Y2giKTt2YXIgaz1TLnJlYWRfc2hpZnQoNCk7cmV0dXJu'@;
put 'e3Q6IlN0ZCIsaDpJVihTLGspLHY6UHYoUyxTLmxlbmd0aC1TLmwpfX1mdW5jdGlvbiBKNigpe3Rocm93IG5ldyBFcnJvcigiRmlsZSBpcyBwYXNzd29yZC1wcm90ZWN0ZWQ6IEVDTUEtMzc2IEV4dGVuc2libGUiKX1mdW5jdGlvbiBmQyhTKXt2YXIgUj1bInNhbHRTaXplIiwiYmxvY2tTaXpl'@;
put 'Iiwia2V5Qml0cyIsImhhc2hTaXplIiwiY2lwaGVyQWxnb3JpdGhtIiwiY2lwaGVyQ2hhaW5pbmciLCJoYXNoQWxnb3JpdGhtIiwic2FsdFZhbHVlIl07Uy5sKz00O3ZhciBrPVMucmVhZF9zaGlmdChTLmxlbmd0aC1TLmwsInV0ZjgiKSxHPXt9O3JldHVybiBrLnJlcGxhY2UoZW4sZnVuY3Rp'@;
put 'b24ob2Upe3ZhciBnZT12cihvZSk7c3dpdGNoKFduKGdlWzBdKSl7Y2FzZSI8P3htbCI6Y2FzZSI8ZW5jcnlwdGlvbiI6Y2FzZSI8L2VuY3J5cHRpb24+IjpjYXNlIjwva2V5RW5jcnlwdG9ycz4iOmNhc2UiPC9rZXlFbmNyeXB0b3I+IjpicmVhaztjYXNlIjxrZXlEYXRhIjpSLmZvckVhY2go'@;
put 'ZnVuY3Rpb24ocGUpe0dbcGVdPWdlW3BlXX0pO2JyZWFrO2Nhc2UiPGRhdGFJbnRlZ3JpdHkiOkcuZW5jcnlwdGVkSG1hY0tleT1nZS5lbmNyeXB0ZWRIbWFjS2V5LEcuZW5jcnlwdGVkSG1hY1ZhbHVlPWdlLmVuY3J5cHRlZEhtYWNWYWx1ZTticmVhaztjYXNlIjxrZXlFbmNyeXB0b3JzPiI6'@;
put 'Y2FzZSI8a2V5RW5jcnlwdG9ycyI6Ry5lbmNzPVtdO2JyZWFrO2Nhc2UiPGtleUVuY3J5cHRvciI6Ry51cmk9Z2UudXJpO2JyZWFrO2Nhc2UiPGVuY3J5cHRlZEtleSI6Ry5lbmNzLnB1c2goZ2UpO2JyZWFrO2RlZmF1bHQ6dGhyb3cgZ2VbMF19fSksR31mdW5jdGlvbiBIdihTKXt2YXIgayxv'@;
put 'ZSxSPTAsRz1rNChTKSxRPUcubGVuZ3RoKzE7Zm9yKChrPVYoUSkpWzBdPUcubGVuZ3RoLG9lPTE7b2UhPVE7KytvZSlrW29lXT1HW29lLTFdO2ZvcihvZT1RLTE7b2U+PTA7LS1vZSlSPSgoMTYzODQmUj8xOjApfFI8PDEmMzI3NjcpXmtbb2VdO3JldHVybiA1MjgxMV5SfXZhciBwQz1mdW5j'@;
put 'dGlvbigpe3ZhciBTPVsxODcsMjU1LDI1NSwxODYsMjU1LDI1NSwxODUsMTI4LDAsMTkwLDE1LDAsMTkxLDE1LDBdLFI9WzU3ODQwLDc0MzksNTIzODAsMzM5ODQsNDM2NCwzNjAwLDYxOTAyLDEyNjA2LDYyNTgsNTc2NTcsNTQyODcsMzQwNDEsMTAyNTIsNDMzNzAsMjAxNjNdLGs9WzQ0Nzk2'@;
put 'LDE5OTI5LDM5ODU4LDEwMDUzLDIwMTA2LDQwMjEyLDEwNzYxLDMxNTg1LDYzMTcwLDY0OTMzLDYwMjY3LDUwOTM1LDQwMzk5LDExMTk5LDE3NzYzLDM1NTI2LDE0NTMsMjkwNiw1ODEyLDExNjI0LDIzMjQ4LDg4NSwxNzcwLDM1NDAsNzA4MCwxNDE2MCwyODMyMCw1NjY0MCw1NTM2OSw0MTEz'@;
put 'OSwyMDgwNyw0MTYxNCwyMTgyMSw0MzY0MiwxNzYyMSwyODQ4NSw1Njk3MCw0NDM0MSwxOTAxOSwzODAzOCwxNDYwNSwyOTIxMCw2MDE5NSw1MDc5MSw0MDE3NSwxMDc1MSwyMTUwMiw0MzAwNCwyNDUzNywxODM4NywzNjc3NCwzOTQ5LDc4OTgsMTU3OTYsMzE1OTIsNjMxODQsNDcyMDEsMjQ4'@;
put 'MDMsNDk2MDYsMzc4MDUsMTQyMDMsMjg0MDYsNTY4MTIsMTc4MjQsMzU2NDgsMTY5NywzMzk0LDY3ODgsMTM1NzYsMjcxNTIsNDM2MDEsMTc1MzksMzUwNzgsNTU3LDExMTQsMjIyOCw0NDU2LDMwMzg4LDYwNzc2LDUxOTUzLDM0MjQzLDcwNzksMTQxNTgsMjgzMTYsMTQxMjgsMjgyNTYsNTY1'@;
put 'MTIsNDM0MjUsMTcyNTEsMzQ1MDIsNzU5NywxMzEwNSwyNjIxMCw1MjQyMCwzNTI0MSw4ODMsMTc2NiwzNTMyLDQxMjksODI1OCwxNjUxNiwzMzAzMiw0NjU3LDkzMTQsMTg2MjhdLFE9ZnVuY3Rpb24oZ2UscGUpe3JldHVybiBmdW5jdGlvbihnZSl7cmV0dXJuIDI1NSYoZ2U+PjF8Z2U8PDcp'@;
put 'fShnZV5wZSl9O3JldHVybiBmdW5jdGlvbihwZSl7Zm9yKHZhciB5ZT1rNChwZSksUGU9ZnVuY3Rpb24oZ2Upe2Zvcih2YXIgcGU9UltnZS5sZW5ndGgtMV0seWU9MTA0LFBlPWdlLmxlbmd0aC0xO1BlPj0wOy0tUGUpZm9yKHZhciBOZT1nZVtQZV0sWWU9MDs3IT1ZZTsrK1llKTY0Jk5lJiYo'@;
put 'cGVePWtbeWVdKSxOZSo9MiwtLXllO3JldHVybiBwZX0oeWUpLE5lPXllLmxlbmd0aCxZZT1WKDE2KSxldD0wOzE2IT1ldDsrK2V0KVllW2V0XT0wO3ZhciBhdDtmb3IoISgxJn5OZSkmJihZZVtOZV09UShTWzBdLFBlPj44KSxZZVstLU5lXT1RKHllW3llLmxlbmd0aC0xXSwyNTUmUGUpKTtO'@;
put 'ZT4wOylZZVstLU5lXT1RKHllW05lXSxQZT4+OCksWWVbLS1OZV09USh5ZVtOZV0sMjU1JlBlKTtmb3IoTmU9MTUsYXQ9MTUteWUubGVuZ3RoO2F0PjA7KVllW05lXT1RKFNbYXRdLFBlPj44KSwtLWF0LFllWy0tTmVdPVEoeWVbTmVdLDI1NSZQZSksLS1OZSwtLWF0O3JldHVybiBZZX19KCk7'@;
put 'dmFyIFZ2PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gUyhRLG9lKXtzd2l0Y2gob2UudHlwZSl7Y2FzZSJiYXNlNjQiOnJldHVybiBSKF9lLmRlY29kZShRKSxvZSk7Y2FzZSJiaW5hcnkiOnJldHVybiBSKFEsb2UpO2Nhc2UiYnVmZmVyIjpyZXR1cm4gUihRLnRvU3RyaW5nKCJiaW5hcnkiKSxvZSk7'@;
put 'Y2FzZSJhcnJheSI6cmV0dXJuIFIodXQoUSksb2UpfXRocm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkIHR5cGUgIitvZS50eXBlKX1mdW5jdGlvbiBSKFEsb2Upe3ZhciBwZT0ob2V8fHt9KS5kZW5zZT9bXTp7fTtpZighUS5tYXRjaCgvXFx0cm93ZC8pKXRocm93IG5ldyBFcnJvcigiUlRG'@;
put 'IG1pc3NpbmcgdGFibGUiKTtyZXR1cm4gcGVbIiFyZWYiXT1yYSh7czp7YzowLHI6MH0sZTp7YzowLHI6MH19KSxwZX1yZXR1cm57dG9fd29ya2Jvb2s6ZnVuY3Rpb24gayhRLG9lKXtyZXR1cm4gdGgoUyhRLG9lKSxvZSl9LHRvX3NoZWV0OlMsZnJvbV9zaGVldDpmdW5jdGlvbiBHKFEpe2Zv'@;
put 'cih2YXIgcGUsb2U9WyJ7XFxydGYxXFxhbnNpIl0sZ2U9b28oUVsiIXJlZiJdKSx5ZT1BcnJheS5pc0FycmF5KFEpLFBlPWdlLnMucjtQZTw9Z2UuZS5yOysrUGUpe29lLnB1c2goIlxcdHJvd2RcXHRyYXV0b2ZpdDEiKTtmb3IodmFyIE5lPWdlLnMuYztOZTw9Z2UuZS5jOysrTmUpb2UucHVz'@;
put 'aCgiXFxjZWxseCIrKE5lKzEpKTtmb3Iob2UucHVzaCgiXFxwYXJkXFxpbnRibCIpLE5lPWdlLnMuYztOZTw9Z2UuZS5jOysrTmUpe3ZhciBZZT1xaSh7cjpQZSxjOk5lfSk7KHBlPXllPyhRW1BlXXx8W10pW05lXTpRW1llXSkmJihudWxsIT1wZS52fHxwZS5mJiYhcGUuRikmJihvZS5wdXNo'@;
put 'KCIgIisocGUud3x8KF9sKHBlKSxwZS53KSkpLG9lLnB1c2goIlxcY2VsbCIpKX1vZS5wdXNoKCJcXHBhcmRcXGludGJsXFxyb3ciKX1yZXR1cm4gb2Uuam9pbigiIikrIn0ifX19KCk7ZnVuY3Rpb24gQzUoUyl7dmFyIFI9Uy5zbGljZSgiIyI9PT1TWzBdPzE6MCkuc2xpY2UoMCw2KTtyZXR1'@;
put 'cm5bcGFyc2VJbnQoUi5zbGljZSgwLDIpLDE2KSxwYXJzZUludChSLnNsaWNlKDIsNCksMTYpLHBhcnNlSW50KFIuc2xpY2UoNCw2KSwxNildfWZ1bmN0aW9uIGhkKFMpe2Zvcih2YXIgUj0wLGs9MTszIT1SOysrUilrPTI1NiprKyhTW1JdPjI1NT8yNTU6U1tSXTwwPzA6U1tSXSk7cmV0dXJu'@;
put 'IGsudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCkuc2xpY2UoMSl9ZnVuY3Rpb24gb2goUyxSKXtpZihudWxsPT1TKXJldHVybiBudWxsIT1SO2lmKG51bGw9PVIpcmV0dXJuITA7aWYoMT09Uy5hdXRvJiYxPT1SLmF1dG8pcmV0dXJuITE7aWYoISFTLmF1dG8hPSEhUi5hdXRvfHxudWxsPT1T'@;
put 'LnRoZW1lIT0obnVsbD09Ui50aGVtZSkpcmV0dXJuITA7aWYobnVsbCE9Uy50aGVtZSlyZXR1cm4gUy50aGVtZSE9Ui50aGVtZXx8Uy50aW50IT1SLnRpbnQ7aWYobnVsbD09Uy5yZ2ImJm51bGw9PVIucmdiKXJldHVybiExO3ZhciBrPVMucmdiOyJudW1iZXIiPT10eXBlb2YgayYmKGs9ay50'@;
put 'b1N0cmluZygxNikpLGs9ay5zbGljZSgtNik7dmFyIEc9Ui5yZ2I7cmV0dXJuIm51bWJlciI9PXR5cGVvZiBHJiYoRz1HLnRvU3RyaW5nKDE2KSksRz1HLnNsaWNlKC02KSxrLnRvTG93ZXJDYXNlKCkhPUcudG9Mb3dlckNhc2UoKX1mdW5jdGlvbiBoayhTLFIpe3JldHVybiBudWxsPT1TP251'@;
put 'bGwhPVI6bnVsbD09Uj9udWxsIT1TOlMuc3R5bGUhPVIuc3R5bGV8fG9oKFMuY29sb3IsUi5jb2xvcil9ZnVuY3Rpb24gUzUoUyxSKXtpZigwPT09UilyZXR1cm4gUzt2YXIgaz1mdW5jdGlvbiBQVihTKXt2YXIgUj1TWzBdLzI1NSxrPVNbMV0vMjU1LEc9U1syXS8yNTUsUT1NYXRoLm1heChS'@;
put 'LGssRyksb2U9TWF0aC5taW4oUixrLEcpLGdlPVEtb2U7aWYoMD09PWdlKXJldHVyblswLDAsUl07dmFyIHllLHBlPTAsUGU9UStvZTtzd2l0Y2goeWU9Z2UvKFBlPjE/Mi1QZTpQZSksUSl7Y2FzZSBSOnBlPSgoay1HKS9nZSs2KSU2O2JyZWFrO2Nhc2UgazpwZT0oRy1SKS9nZSsyO2JyZWFr'@;
put 'O2Nhc2UgRzpwZT0oUi1rKS9nZSs0fXJldHVybltwZS82LHllLFBlLzJdfShDNShTKSk7cmV0dXJuIGtbMl09UjwwP2tbMl0qKDErUik6MS0oMS1rWzJdKSooMS1SKSxoZChmdW5jdGlvbiBkayhTKXt2YXIgeWUsaz1TWzFdLEc9U1syXSxRPTIqayooRzwuNT9HOjEtRyksb2U9Ry1RLzIsZ2U9'@;
put 'W29lLG9lLG9lXSxwZT02KlNbMF07aWYoMCE9PWspc3dpdGNoKDB8cGUpe2Nhc2UgMDpjYXNlIDY6eWU9USpwZSxnZVswXSs9USxnZVsxXSs9eWU7YnJlYWs7Y2FzZSAxOmdlWzBdKz15ZT1RKigyLXBlKSxnZVsxXSs9UTticmVhaztjYXNlIDI6eWU9USoocGUtMiksZ2VbMV0rPVEsZ2VbMl0r'@;
put 'PXllO2JyZWFrO2Nhc2UgMzpnZVsxXSs9eWU9USooNC1wZSksZ2VbMl0rPVE7YnJlYWs7Y2FzZSA0OnllPVEqKHBlLTQpLGdlWzJdKz1RLGdlWzBdKz15ZTticmVhaztjYXNlIDU6Z2VbMl0rPXllPVEqKDYtcGUpLGdlWzBdKz1RfWZvcih2YXIgUGU9MDszIT1QZTsrK1BlKWdlW1BlXT1NYXRo'@;
put 'LnJvdW5kKDI1NSpnZVtQZV0pO3JldHVybiBnZX0oaykpfXZhciBmaz02LFRjPWZrO2Z1bmN0aW9uIE01KFMpe3JldHVybiBNYXRoLmZsb29yKChTK01hdGgucm91bmQoMTI4L1RjKS8yNTYpKlRjKX1mdW5jdGlvbiB4NShTKXtyZXR1cm4gTWF0aC5mbG9vcigoUy01KS9UYyoxMDArLjUpLzEw'@;
put 'MH1mdW5jdGlvbiBrZihTKXtyZXR1cm4gTWF0aC5yb3VuZCgoUypUYys1KS9UYyoyNTYpLzI1Nn1mdW5jdGlvbiBRMChTKXtTLmJlc3RGaXQmJmRlbGV0ZSBTLmJlc3RGaXQsUy53aWR0aD8oUy53cHg9TTUoUy53aWR0aCksUy53Y2g9eDUoUy53cHgpLFMuTURXPVRjKTpTLndweD8oUy53Y2g9'@;
put 'eDUoUy53cHgpLFMud2lkdGg9a2YoUy53Y2gpLFMuTURXPVRjKToibnVtYmVyIj09dHlwZW9mIFMud2NoJiYoUy53aWR0aD1rZihTLndjaCksUy53cHg9TTUoUy53aWR0aCksUy5NRFc9VGMpLFMuY3VzdG9tV2lkdGgmJmRlbGV0ZSBTLmN1c3RvbVdpZHRofXZhciBZcz05NixEZj1ZcztmdW5j'@;
put 'dGlvbiBVMyhTKXtyZXR1cm4gNzIqUy9EZn1mdW5jdGlvbiBzaChTKXtyZXR1cm4gUypEZi83Mn1mdW5jdGlvbiBJZihTKXtEZj1TPXtvc3g6NzIsd2luOjk2LHdpbjEwMDo5Nix3aW4xMjU6MTIwLHdpbjE1MDoxNDR9W1NdfHxTfHxZcyxiQz1UNVtTXX1mdW5jdGlvbiBqdihTKXtTLmhweD9T'@;
put 'LmhwdD1VMyhTLmhweCk6Uy5ocHQmJihTLmhweD1zaChTLmhwdCkpfXZhciBtQz17Tm9uZToibm9uZSIsU29saWQ6InNvbGlkIixHcmF5NTA6Im1lZGl1bUdyYXkiLEdyYXk3NToiZGFya0dyYXkiLEdyYXkyNToibGlnaHRHcmF5IixIb3J6U3RyaXBlOiJkYXJrSG9yaXpvbnRhbCIsVmVydFN0'@;
put 'cmlwZToiZGFya1ZlcnRpY2FsIixSZXZlcnNlRGlhZ1N0cmlwZToiZGFya0Rvd24iLERpYWdTdHJpcGU6ImRhcmtVcCIsRGlhZ0Nyb3NzOiJkYXJrR3JpZCIsVGhpY2tEaWFnQ3Jvc3M6ImRhcmtUcmVsbGlzIixUaGluSG9yelN0cmlwZToibGlnaHRIb3Jpem9udGFsIixUaGluVmVydFN0cmlw'@;
put 'ZToibGlnaHRWZXJ0aWNhbCIsVGhpblJldmVyc2VEaWFnU3RyaXBlOiJsaWdodERvd24iLFRoaW5Ib3J6Q3Jvc3M6ImxpZ2h0R3JpZCJ9LHZDPVZlKG1DKSxRNj17b3JhbmdlOjE2NzUzOTIwLGJsYWNrOjAsbmF2eToxMjgsYmx1ZToyNTUsZ3JlZW46MzI3NjgsdGVhbDozMjg5NixsaW1lOjY1'@;
put 'MjgwLGFxdWE6NjU1MzUsc2lsdmVyOjEyNjMyMjU2LG1hcm9vbjo4Mzg4NjA4LHB1cnBsZTo4Mzg4NzM2LG9saXZlOjg0MjEzNzYsZ3JheTo4NDIxNTA0LHJlZDoxNjcxMTY4MCxmdWNoc2lhOjE2NzExOTM1LHllbGxvdzoxNjc3Njk2MCx3aGl0ZToxNjc3NzIxNX07ZnVuY3Rpb24gRTUoUyxS'@;
put 'KXtpZihTLnJlcGxhY2UoIiMiLCIiKS5tYXRjaCgvXlswLTlhLWZBLUZdezZ9JC8pKXJldHVybiBwYXJzZUludChTLnJlcGxhY2UoIiMiLCIiKSwxNik7aWYoUTZbU10pcmV0dXJuIFE2W1NdO3ZhciBrPVMubWF0Y2goL3JnYlwoXHMqKFxkKilccyosXHMqKFxkKilccyosXHMqKFxkKilccypc'@;
put 'KS8pO2lmKGspcmV0dXJuKCtrWzFdPDwxNikrKCtrWzJdPDw4KSsgK2tbM107aWYoaz1TLm1hdGNoKC9yZ2JhXChccyooXGQqKVxzKixccyooXGQqKVxzKixccyooXGQqKVxzKihcZCopLykpcmV0dXJuIDAhPShrWzRdJiZrWzRdLmxlbmd0aD4wJiYra1s0XXx8MCl8fCtrWzFdPjB8fCtrWzJd'@;
put 'PjB8fCtrWzNdPjA/KCtrWzFdPDwxNikrKCtrWzJdPDw4KSsgK2tbM106Uj8tMToxNjc3NzIxNTt0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gSFRNTCBjb2xvciAiK1MpfXZhciBUNT17fTtmdW5jdGlvbiB6dihTKXtTPVN8fDk2O3ZhciBSPXtDYWxpYnJpOltdLEFyaWFsOltdLCJTcGFya2Fz'@;
put 'c2UgUmciOltdLFx1NWI4Ylx1NGY1MzpbXSxcdTZlMzhcdTMwYjRcdTMwYjdcdTMwYzNcdTMwYWY6W10sIkNlbnR1cnkgR290aGljIjpbXX07cmV0dXJuIFIuQ2FsaWJyaVsxMV09NyxSLkNhbGlicmlbMTJdPXs3Mjo2LDk2OjgsMTIwOjEwLDE0NDoxMn1bU118fDgsUi5DYWxpYnJpWzEzXT0x'@;
put 'MCxSLkNhbGlicmlbMTRdPTExLFIuQ2FsaWJyaVsxNl09MTIsUi5DYWxpYnJpWzE4XT0xNCxSLkNhbGlicmlbMjBdPTE2LFIuXHU1YjhiXHU0ZjUzWzExXT04LFIuXHU2ZTM4XHUzMGI0XHUzMGI3XHUzMGMzXHUzMGFmWzExXT04LFJbIlNwYXJrYXNzZSBSZyJdWzExXT03LFIuQXJpYWxbMTBd'@;
put 'PTcsUlsiQ2VudHVyeSBHb3RoaWMiXVsxMl09OSxSfVQ1WzcyXT16dig3MiksVDVbOTZdPXp2KDk2KSxUNVsxMjBdPXp2KDEyMCksVDVbMTQ0XT16digxNDQpO3ZhciBiQz1UNVs5Nl07ZnVuY3Rpb24geUMoUyl7cmV0dXJuKGJDW1MubmFtZXx8Uy5Gb250TmFtZV18fFtdKVtTLnN6fHxTLlNp'@;
put 'emVdfWZ1bmN0aW9uIEk0KFMpe2lmKFMpe3ZhciBSPXlDKFMpO2lmKFIpcmV0dXJuIFRjPVJ9cmV0dXJuIFRjPTZ9ZnVuY3Rpb24gX0MoUyxSLGspe3JldHVybiBoZChmdW5jdGlvbiBwayhTLFIsayl7cmV0dXJuW01hdGgucm91bmQoUlswXSprK1NbMF0qKDEtaykpLE1hdGgucm91bmQoUlsx'@;
put 'XSprK1NbMV0qKDEtaykpLE1hdGgucm91bmQoUlsyXSprK1NbMl0qKDEtaykpXX0oQzUoIm51bWJlciI9PXR5cGVvZiBTLnJnYj8oIjAwMDAwIitTLnRvU3RyaW5nKDE2KSkuc2xpY2UoLTYpOlMucmdiKSxDNSgibnVtYmVyIj09dHlwZW9mIFIucmdiPygiMDAwMDAiK1IudG9TdHJpbmcoMTYp'@;
put 'KS5zbGljZSgtNik6Ui5yZ2IpLGspKX1mdW5jdGlvbiBVdihTLFIsayl7aWYoaylzd2l0Y2goK1Mpe2Nhc2UgNjQ6Uz02NTticmVhaztjYXNlIDY1OlM9NjR9dmFyIEc9UiYmUlsrU118fHIwWytTXXx8SHdbK1MtMjAwXTtpZig4MT09K1MmJihHPXIwWzFdKSxHfHwoRz1yMFsxXSksIUcpdGhy'@;
put 'b3cgbmV3IEVycm9yKCJiYWQgSUNWIGluZGV4ICIrUyk7cmV0dXJuIGhkKEcpfWZ1bmN0aW9uIGdrKFMsUixrKXt2YXIgRz17fTtyZXR1cm4gbnVsbCE9Uy5pbmRleGVkJiYoRy5pbmRleD1wYXJzZUludChTLmluZGV4ZWQsMTApLEcucmdiPVV2KEcuaW5kZXgsUi5JbmRleGVkKSksbnVsbCE9'@;
put 'Uy50aGVtZSYmKEcudGhlbWU9cGFyc2VJbnQoUy50aGVtZSwxMCkpLG51bGwhPVMudGludCYmKEcudGludD1wYXJzZUZsb2F0KFMudGludCkpLG51bGwhPVMucmdiJiYoRy5yZ2I9Uy5yZ2Iuc2xpY2UoLTYpKSxudWxsIT1HLnRoZW1lJiYhRy5yZ2ImJmsudGhlbWVFbGVtZW50cyYmKEcucmdi'@;
put 'PVM1KGsudGhlbWVFbGVtZW50cy5jbHJTY2hlbWVbRy50aGVtZV0ucmdiLEcudGludHx8MCksRy5yYXdfcmdiPWsudGhlbWVFbGVtZW50cy5jbHJTY2hlbWVbRy50aGVtZV0ucmdiKSxHfWZ1bmN0aW9uIHdDKFMsUixrLEcpe1IuQm9yZGVycz1bXTt2YXIgUT17fSxvZT17fSxnZT0hMTsoU1sw'@;
put 'XS5tYXRjaChlbil8fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKHBlKXt2YXIgeWU9dnIocGUpO3N3aXRjaChXbih5ZVswXSkpe2Nhc2UiPGJvcmRlcnMiOmNhc2UiPGJvcmRlcnM+IjpjYXNlIjwvYm9yZGVycz4iOmNhc2UiPC9ib3JkZXI+IjpjYXNlIjxsZWZ0Lz4iOmNhc2UiPC9sZWZ0PiI6Y2Fz'@;
put 'ZSI8cmlnaHQvPiI6Y2FzZSI8L3JpZ2h0PiI6Y2FzZSI8dG9wLz4iOmNhc2UiPC90b3A+IjpjYXNlIjxib3R0b20vPiI6Y2FzZSI8L2JvdHRvbT4iOmNhc2UiPGRpYWdvbmFsIjpjYXNlIjxkaWFnb25hbD4iOmNhc2UiPGRpYWdvbmFsLz4iOmNhc2UiPGhvcml6b250YWwiOmNhc2UiPGhvcml6'@;
put 'b250YWw+IjpjYXNlIjxob3Jpem9udGFsLz4iOmNhc2UiPHZlcnRpY2FsIjpjYXNlIjx2ZXJ0aWNhbD4iOmNhc2UiPHZlcnRpY2FsLz4iOmNhc2UiPHN0YXJ0IjpjYXNlIjxzdGFydD4iOmNhc2UiPHN0YXJ0Lz4iOmNhc2UiPC9zdGFydD4iOmNhc2UiPGVuZCI6Y2FzZSI8ZW5kPiI6Y2FzZSI8'@;
put 'ZW5kLz4iOmNhc2UiPC9lbmQ+IjpjYXNlIjxjb2xvci8+IjpjYXNlIjwvY29sb3I+IjpjYXNlIjxleHRMc3QiOmNhc2UiPGV4dExzdD4iOmNhc2UiPC9leHRMc3Q+IjpicmVhaztjYXNlIjxib3JkZXIiOmNhc2UiPGJvcmRlcj4iOmNhc2UiPGJvcmRlci8+IjpRPXt9LHllLmRpYWdvbmFsVXAm'@;
put 'JihRLmRpYWdvbmFsVXA9dGkoeWUuZGlhZ29uYWxVcCkpLHllLmRpYWdvbmFsRG93biYmKFEuZGlhZ29uYWxEb3duPXRpKHllLmRpYWdvbmFsRG93bikpLFIuQm9yZGVycy5wdXNoKFEpO2JyZWFrO2Nhc2UiPGxlZnQiOmNhc2UiPGxlZnQ+IjpvZT1RLmxlZnQ9e30seWUuc3R5bGUmJihvZS5z'@;
put 'dHlsZT15ZS5zdHlsZSk7YnJlYWs7Y2FzZSI8cmlnaHQiOmNhc2UiPHJpZ2h0PiI6b2U9US5yaWdodD17fSx5ZS5zdHlsZSYmKG9lLnN0eWxlPXllLnN0eWxlKTticmVhaztjYXNlIjx0b3AiOmNhc2UiPHRvcD4iOm9lPVEudG9wPXt9LHllLnN0eWxlJiYob2Uuc3R5bGU9eWUuc3R5bGUpO2Jy'@;
put 'ZWFrO2Nhc2UiPGJvdHRvbSI6Y2FzZSI8Ym90dG9tPiI6b2U9US5ib3R0b209e30seWUuc3R5bGUmJihvZS5zdHlsZT15ZS5zdHlsZSk7YnJlYWs7Y2FzZSI8L2RpYWdvbmFsPiI6US5kaWFnb25hbD1vZSxvZT17fTticmVhaztjYXNlIjwvaG9yaXpvbnRhbD4iOlEuaG9yaXpvbnRhbD1vZSxv'@;
put 'ZT17fTticmVhaztjYXNlIjwvdmVydGljYWw+IjpRLnZlcnRpY2FsPW9lLG9lPXt9O2JyZWFrO2Nhc2UiPGNvbG9yIjpjYXNlIjxjb2xvcj4iOm9lLmNvbG9yfHwob2UuY29sb3I9e30pLHllLmF1dG8mJihvZS5jb2xvci5hdXRvPXRpKHllLmF1dG8pKSxudWxsIT15ZS5yZ2I/b2UuY29sb3Iu'@;
put 'cmdiPXllLnJnYi5zbGljZSgtNik6eWUuaW5kZXhlZD8ob2UuY29sb3IuaW5kZXg9cGFyc2VJbnQoeWUuaW5kZXhlZCwxMCksb2UuY29sb3IucmdiPVV2KG9lLmNvbG9yLmluZGV4LFIuSW5kZXhlZCwhMSkpOnllLnRoZW1lJiYob2UuY29sb3IudGhlbWU9cGFyc2VJbnQoeWUudGhlbWUsMTAp'@;
put 'LHllLnRpbnQmJihvZS5jb2xvci50aW50PXBhcnNlRmxvYXQoeWUudGludCkpLHllLnRoZW1lJiZrLnRoZW1lRWxlbWVudHMmJmsudGhlbWVFbGVtZW50cy5jbHJTY2hlbWUmJihvZS5jb2xvci5yZ2I9UzUoay50aGVtZUVsZW1lbnRzLmNsclNjaGVtZVtvZS5jb2xvci50aGVtZV0ucmdiLG9l'@;
put 'LmNvbG9yLnRpbnR8fDApKSksIXllLmF1dG8mJm51bGw9PXllLnJnYiYmIXllLmluZGV4ZWQmJmRlbGV0ZSBvZS5jb2xvcjticmVhaztjYXNlIjxleHQiOmdlPSEwO2JyZWFrO2Nhc2UiPC9leHQ+IjpnZT0hMTticmVhaztkZWZhdWx0OmlmKEcmJkcuV1RGJiYhZ2UpdGhyb3cgbmV3IEVycm9y'@;
put 'KCJ1bnJlY29nbml6ZWQgIit5ZVswXSsiIGluIGJvcmRlcnMiKX19KX1mdW5jdGlvbiBSNChTLFIpe3ZhciBrPVsiPCIrUl07cmV0dXJuIFMmJlMuc3R5bGU/KGsucHVzaCgnIHN0eWxlPSInK1Muc3R5bGUrJyInKSxTLmNvbG9yPyhrLnB1c2goIj4iKSxrLnB1c2goZ2QoUy5jb2xvciwhMCkp'@;
put 'LGsuam9pbigiIikrIjwvIitSKyI+Iik6ay5qb2luKCIiKSsiLz4iKTprWzBdKyIvPiJ9ZnVuY3Rpb24gRlYoUyxSLGssRyl7Ui5GaWxscz1bXTt2YXIgUT17fSxvZT17fSxnZT0hMSxwZT0hMTsoU1swXS5tYXRjaChlbil8fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKHllKXt2YXIgUGU9dnIoeWUp'@;
put 'O3N3aXRjaChXbihQZVswXSkpe2Nhc2UiPGZpbGxzIjpjYXNlIjxmaWxscz4iOmNhc2UiPC9maWxscz4iOmNhc2UiPC9maWxsPiI6Y2FzZSI8L2dyYWRpZW50RmlsbD4iOmNhc2UiPGJnQ29sb3IvPiI6Y2FzZSI8L2JnQ29sb3I+IjpjYXNlIjxmZ0NvbG9yLz4iOmNhc2UiPC9mZ0NvbG9yPiI6'@;
put 'Y2FzZSI8Y29sb3IvPiI6Y2FzZSI8L2NvbG9yPiI6Y2FzZSI8c3RvcC8+IjpjYXNlIjxleHRMc3QiOmNhc2UiPGV4dExzdD4iOmNhc2UiPC9leHRMc3Q+IjpicmVhaztjYXNlIjxmaWxsPiI6Y2FzZSI8ZmlsbCI6Y2FzZSI8ZmlsbC8+IjpSLkZpbGxzLnB1c2goUT17fSk7YnJlYWs7Y2FzZSI8'@;
put 'Z3JhZGllbnRGaWxsPiI6US5zdG9wcz1bXTticmVhaztjYXNlIjxncmFkaWVudEZpbGwiOlEuc3RvcHM9W10sUGUuZGVncmVlJiYoUS5hbmdsZT0rUGUuZGVncmVlKTticmVhaztjYXNlIjxwYXR0ZXJuRmlsbCI6Y2FzZSI8cGF0dGVybkZpbGw+IjpQZS5wYXR0ZXJuVHlwZSYmKFEucGF0dGVy'@;
put 'blR5cGU9UGUucGF0dGVyblR5cGUpO2JyZWFrO2Nhc2UiPHBhdHRlcm5GaWxsLz4iOmNhc2UiPC9wYXR0ZXJuRmlsbD4iOmlmKGdlKXRocm93IG5ldyBFcnJvcigiYmFkIHN0b3AiKTticmVhaztjYXNlIjxjb2xvciI6Y2FzZSI8YmdDb2xvciI6Y2FzZSI8ZmdDb2xvciI6dmFyIE5lPVduKFBl'@;
put 'WzBdKS5zbGljZSgxKTsiY29sb3IiIT1OZSYmIVFbTmVdJiYoUVtOZV09e30pO3ZhciBZZT1nZT9vZTpRW05lXTtudWxsIT1QZS5pbmRleGVkJiYoWWUuaW5kZXg9cGFyc2VJbnQoUGUuaW5kZXhlZCwxMCksWWUucmdiPVV2KFllLmluZGV4LFIuSW5kZXhlZCkpLG51bGwhPVBlLnRoZW1lJiYo'@;
put 'WWUudGhlbWU9cGFyc2VJbnQoUGUudGhlbWUsMTApKSxudWxsIT1QZS50aW50JiYoWWUudGludD1wYXJzZUZsb2F0KFBlLnRpbnQpKSxudWxsIT1QZS5yZ2ImJihZZS5yZ2I9UGUucmdiLnNsaWNlKC02KSksbnVsbCE9UGUuYXV0byYmZGVsZXRlIFFbTmVdLG51bGwhPVllLnRoZW1lJiYhWWUu'@;
put 'cmdiJiZrLnRoZW1lRWxlbWVudHMmJihZZS5yZ2I9UzUoay50aGVtZUVsZW1lbnRzLmNsclNjaGVtZVtZZS50aGVtZV0ucmdiLFllLnRpbnR8fDApLEcuV1RGJiYoWWUucmF3X3JnYj1rLnRoZW1lRWxlbWVudHMuY2xyU2NoZW1lW1llLnRoZW1lXS5yZ2IpKTticmVhaztjYXNlIjxzdG9wPiI6'@;
put 'Z2U9ITAsb2U9e307YnJlYWs7Y2FzZSI8c3RvcCI6Z2U9ITAsb2U9e30sbnVsbCE9UGUucG9zaXRpb24mJihvZS52PXBhcnNlRmxvYXQoUGUucG9zaXRpb24pKTticmVhaztjYXNlIjwvc3RvcD4iOmdlPSExLFEuc3RvcHMucHVzaChvZSk7YnJlYWs7Y2FzZSI8ZXh0IjpwZT0hMDticmVhaztj'@;
put 'YXNlIjwvZXh0PiI6cGU9ITE7YnJlYWs7ZGVmYXVsdDppZihHJiZHLldURiYmIXBlKXRocm93IG5ldyBFcnJvcigidW5yZWNvZ25pemVkICIrUGVbMF0rIiBpbiBmaWxscyIpfX0pfWZ1bmN0aW9uIEhWKFMsUixrLEcpe1IuRm9udHM9W107dmFyIFE9e30sb2U9ITE7KFNbMF0ubWF0Y2goZW4p'@;
put 'fHxbXSkuZm9yRWFjaChmdW5jdGlvbihnZSl7dmFyIHBlPXZyKGdlKTtzd2l0Y2goV24ocGVbMF0pKXtjYXNlIjxmb250cyI6Y2FzZSI8Zm9udHM+IjpjYXNlIjwvZm9udHM+IjpicmVhaztjYXNlIjxmb250IjpjYXNlIjxmb250PiI6aWYoIi8+IiE9Z2Uuc2xpY2UoLTIpKWJyZWFrO2Nhc2Ui'@;
put 'PC9mb250PiI6Y2FzZSI8Zm9udC8+IjpSLkZvbnRzLnB1c2goUSksUT17fTticmVhaztjYXNlIjxuYW1lIjpwZS52YWwmJihRLm5hbWU9Z28ocGUudmFsKSk7YnJlYWs7Y2FzZSI8bmFtZS8+IjpjYXNlIjwvbmFtZT4iOmJyZWFrO2Nhc2UiPGIiOlEuYm9sZD1wZS52YWw/dGkocGUudmFsKTox'@;
put 'O2JyZWFrO2Nhc2UiPGIvPiI6Y2FzZSI8Yj4iOlEuYm9sZD0xO2JyZWFrO2Nhc2UiPC9iPiI6YnJlYWs7Y2FzZSI8aSI6US5pdGFsaWM9cGUudmFsP3RpKHBlLnZhbCk6MTticmVhaztjYXNlIjxpLz4iOmNhc2UiPGk+IjpRLml0YWxpYz0xO2JyZWFrO2Nhc2UiPC9pPiI6YnJlYWs7Y2FzZSI8'@;
put 'dSI6c3dpdGNoKHBlLnZhbCl7Y2FzZSJub25lIjpRLnVuZGVybGluZT0wO2JyZWFrO2Nhc2Uic2luZ2xlIjpRLnVuZGVybGluZT0xO2JyZWFrO2Nhc2UiZG91YmxlIjpRLnVuZGVybGluZT0yO2JyZWFrO2Nhc2Uic2luZ2xlQWNjb3VudGluZyI6US51bmRlcmxpbmU9MzM7YnJlYWs7Y2FzZSJk'@;
put 'b3VibGVBY2NvdW50aW5nIjpRLnVuZGVybGluZT0zNH1icmVhaztjYXNlIjx1Lz4iOmNhc2UiPHU+IjpRLnVuZGVybGluZT0xO2JyZWFrO2Nhc2UiPC91PiI6YnJlYWs7Y2FzZSI8c3RyaWtlIjpRLnN0cmlrZT1wZS52YWw/dGkocGUudmFsKToxO2JyZWFrO2Nhc2UiPHN0cmlrZS8+IjpRLnN0'@;
put 'cmlrZT0xO2JyZWFrO2Nhc2UiPG91dGxpbmUiOlEub3V0bGluZT1wZS52YWw/dGkocGUudmFsKToxO2JyZWFrO2Nhc2UiPG91dGxpbmUvPiI6US5vdXRsaW5lPTE7YnJlYWs7Y2FzZSI8c2hhZG93IjpRLnNoYWRvdz1wZS52YWw/dGkocGUudmFsKToxO2JyZWFrO2Nhc2UiPHNoYWRvdy8+IjpR'@;
put 'LnNoYWRvdz0xO2JyZWFrO2Nhc2UiPGNvbmRlbnNlIjpRLmNvbmRlbnNlPXBlLnZhbD90aShwZS52YWwpOjE7YnJlYWs7Y2FzZSI8Y29uZGVuc2UvPiI6US5jb25kZW5zZT0xO2JyZWFrO2Nhc2UiPGV4dGVuZCI6US5leHRlbmQ9cGUudmFsP3RpKHBlLnZhbCk6MTticmVhaztjYXNlIjxleHRl'@;
put 'bmQvPiI6US5leHRlbmQ9MTticmVhaztjYXNlIjxzeiI6cGUudmFsJiYoUS5zej0rcGUudmFsKTticmVhaztjYXNlIjxzei8+IjpjYXNlIjwvc3o+IjpicmVhaztjYXNlIjx2ZXJ0QWxpZ24iOiJub25lIiE9KHBlLnZhbHx8Im5vbmUiKSYmKFEudmFsaWduPXBlLnZhbC5yZXBsYWNlKCJzY3Jp'@;
put 'cHQiLCIiKSk7YnJlYWs7Y2FzZSI8dmVydEFsaWduLz4iOmNhc2UiPC92ZXJ0QWxpZ24+IjpicmVhaztjYXNlIjxmYW1pbHkiOnBlLnZhbCYmKFEuZmFtaWx5PXBhcnNlSW50KHBlLnZhbCwxMCkpO2JyZWFrO2Nhc2UiPGZhbWlseS8+IjpjYXNlIjwvZmFtaWx5PiI6YnJlYWs7Y2FzZSI8c2No'@;
put 'ZW1lIjpwZS52YWwmJihRLnNjaGVtZT1wZS52YWwpO2JyZWFrO2Nhc2UiPHNjaGVtZS8+IjpjYXNlIjwvc2NoZW1lPiI6YnJlYWs7Y2FzZSI8Y2hhcnNldCI6aWYoIjEiPT1wZS52YWwpYnJlYWs7cGUuY29kZXBhZ2U9TltwYXJzZUludChwZS52YWwsMTApXTticmVhaztjYXNlIjxjb2xvciI6'@;
put 'US5jb2xvcnx8KFEuY29sb3I9e30pLHBlLmF1dG8mJihRLmNvbG9yLmF1dG89dGkocGUuYXV0bykpLHBlLnJnYj9RLmNvbG9yLnJnYj1wZS5yZ2Iuc2xpY2UoLTYpOnBlLmluZGV4ZWQ/KFEuY29sb3IuaW5kZXg9cGFyc2VJbnQocGUuaW5kZXhlZCwxMCksUS5jb2xvci5yZ2I9VXYoUS5jb2xv'@;
put 'ci5pbmRleCxSLkluZGV4ZWQpKTpwZS50aGVtZSYmKFEuY29sb3IudGhlbWU9cGFyc2VJbnQocGUudGhlbWUsMTApLHBlLnRpbnQmJihRLmNvbG9yLnRpbnQ9cGFyc2VGbG9hdChwZS50aW50KSkscGUudGhlbWUmJmsudGhlbWVFbGVtZW50cyYmay50aGVtZUVsZW1lbnRzLmNsclNjaGVtZSYm'@;
put 'KFEuY29sb3IucmdiPVM1KGsudGhlbWVFbGVtZW50cy5jbHJTY2hlbWVbUS5jb2xvci50aGVtZV0ucmdiLFEuY29sb3IudGludHx8MCkpKTticmVhaztjYXNlIjxjb2xvci8+IjpjYXNlIjwvY29sb3I+IjpicmVhaztjYXNlIjxBbHRlcm5hdGVDb250ZW50IjpvZT0hMDticmVhaztjYXNlIjwv'@;
put 'QWx0ZXJuYXRlQ29udGVudD4iOm9lPSExO2JyZWFrO2Nhc2UiPGV4dExzdCI6Y2FzZSI8ZXh0THN0PiI6Y2FzZSI8L2V4dExzdD4iOmJyZWFrO2Nhc2UiPGV4dCI6b2U9ITA7YnJlYWs7Y2FzZSI8L2V4dD4iOm9lPSExO2JyZWFrO2RlZmF1bHQ6aWYoRyYmRy5XVEYmJiFvZSl0aHJvdyBuZXcg'@;
put 'RXJyb3IoInVucmVjb2duaXplZCAiK3BlWzBdKyIgaW4gZm9udHMiKX19KX12YXIgQTU9ezA6Im5vbmUiLDE6InNpbmdsZSIsMjoiZG91YmxlIiwzMzoic2luZ2xlQWNjb3VudGluZyIsMzQ6ImRvdWJsZUFjY291bnRpbmcifSxaMz1bIm51bUZtdElkIiwiZmlsbElkIiwiZm9udElkIiwiYm9y'@;
put 'ZGVySWQiLCJ4ZklkIl0sVzM9WyJhcHBseUFsaWdubWVudCIsImFwcGx5Qm9yZGVyIiwiYXBwbHlGaWxsIiwiYXBwbHlGb250IiwiYXBwbHlOdW1iZXJGb3JtYXQiLCJhcHBseVByb3RlY3Rpb24iLCJwaXZvdEJ1dHRvbiIsInF1b3RlUHJlZml4Il0sTDQ9ZnVuY3Rpb24oKXt2YXIgUz0vPCg/'@;
put 'Olx3KzopP2ZvbnQoW14+XSopPltcU1xzXSo/PFwvKD86XHcrOik/Zm9udD4vLFI9LzwoPzpcdys6KT9udW1GbXQoW14+XSopXC8+LyxrPS88KD86XHcrOik/ZmlsbChbXj5dKik+W1xTXHNdKj88XC8oPzpcdys6KT9maWxsPi8sUT0vPCg/Olx3KzopP2JvcmRlcihbXj5dKik+W1xTXHNdKj88'@;
put 'XC8oPzpcdys6KT9ib3JkZXI+LztyZXR1cm4gZnVuY3Rpb24ocGUseWUsUGUsTmUpe3ZhciBjdCxFdCxZZT17fSxldD17fTtyZXR1cm4oY3Q9cGUubWF0Y2goUykpJiYoSFYoY3QsWWUsUGUsTmUpLChZZS5Gb250c3x8W10pWzBdJiZQdChldCxZZS5Gb250c1swXSkpLChjdD1wZS5tYXRjaChS'@;
put 'KSkmJihFdD12cihnbyhjdFswXSkpLGV0Lno9RXQuZm9ybWF0Q29kZT9RcihFdC5mb3JtYXRDb2RlKTooeWUuTnVtYmVyRm10fHxbXSlbK0V0Lm51bUZtdElkXXx8IkdlbmVyYWwiKSwoY3Q9cGUubWF0Y2goaykpJiYoRlYoY3QsWWUsUGUsTmUpLChZZS5GaWxsc3x8W10pWzBdJiZQdChldCxZ'@;
put 'ZS5GaWxsc1swXSkpLChjdD1wZS5tYXRjaChRKSkmJih3QyhjdCxZZSxQZSxOZSksKFllLkJvcmRlcnN8fFtdKVswXSYmUHQoZXQsWWUuQm9yZGVyc1swXSkpLGV0fX0oKSxKaT0vPCg/Olx3KzopP2R4Zj5bXFNcc10qPzxcLyg/Olx3KzopP2R4Zj4vZyxLcj0vPCg/Olx3KzopP3RhYmxlU3R5'@;
put 'bGVcYi4qPz5bXFNcc10qPzxcLyg/Olx3KzopP3RhYmxlU3R5bGU+L2c7dmFyIF9rPWZ1bmN0aW9uKCl7dmFyIFI9LzwoPzpcdys6KT9udW1GbXRzKFtePl0qKT5bXFNcc10qPzxcLyg/Olx3KzopP251bUZtdHM+LyxrPS88KD86XHcrOik/Y2VsbFN0eWxlWGZzKFtePl0qKT5bXFNcc10qPzxc'@;
put 'Lyg/Olx3KzopP2NlbGxTdHlsZVhmcz4vLEc9LzwoPzpcdys6KT9jZWxsU3R5bGVzKFtePl0qKT5bXFNcc10qPzxcLyg/Olx3KzopP2NlbGxTdHlsZXM+LyxRPS88KD86XHcrOik/Y2VsbFhmcyhbXj5dKik+W1xTXHNdKj88XC8oPzpcdys6KT9jZWxsWGZzPi8sb2U9LzwoPzpcdys6KT9maWxs'@;
put 'cyhbXj5dKik+W1xTXHNdKj88XC8oPzpcdys6KT9maWxscz4vLGdlPS88KD86XHcrOik/Zm9udHMoW14+XSopPltcU1xzXSo/PFwvKD86XHcrOik/Zm9udHM+LyxwZT0vPCg/Olx3KzopP2JvcmRlcnMoW14+XSopPltcU1xzXSo/PFwvKD86XHcrOik/Ym9yZGVycz4vLHllPS88KD86XHcrOik/'@;
put 'aW5kZXhlZENvbG9ycyhbXj5dKik+W1xTXHNdKj88XC8oPzpcdys6KT9pbmRleGVkQ29sb3JzPi8sUGU9LzwoPzpcdys6KT90YWJsZVN0eWxlcyhbXj5dKik+W1xTXHNdKj88XC8oPzpcdys6KT90YWJsZVN0eWxlcz4vLE5lPS88KD86XHcrOik/ZHhmcyhbXj5dKik+W1xTXHNdKj88XC8oPzpc'@;
put 'dys6KT9keGZzPi87cmV0dXJuIGZ1bmN0aW9uKGV0LGN0LEV0KXt2YXIgYnQsYXQ9e307cmV0dXJuIGV0PygoYnQ9KGV0PWV0LnJlcGxhY2UoLzwhLS0oW1xzXFNdKj8pLS0+L2dtLCIiKS5yZXBsYWNlKC88IURPQ1RZUEVbXlxbXSpcW1teXF1dKlxdPi9nbSwiIikpLm1hdGNoKHllKSkmJmZ1'@;
put 'bmN0aW9uIE5WKFMsUixrKXtSLkluZGV4ZWR8fChSLkluZGV4ZWQ9W10pO3ZhciBHPSExOyhTWzBdLm1hdGNoKGVuKXx8W10pLmZvckVhY2goZnVuY3Rpb24oUSl7dmFyIG9lPXZyKFEpO3N3aXRjaChXbihvZVswXSkpe2Nhc2UiPGluZGV4ZWRDb2xvcnM+IjpjYXNlIjxpbmRleGVkQ29sb3Jz'@;
put 'IjpjYXNlIjxpbmRleGVkQ29sb3JzLz4iOmNhc2UiPC9pbmRleGVkQ29sb3JzPiI6Y2FzZSI8L3JnYkNvbG9yPiI6Y2FzZSI8ZXh0THN0IjpjYXNlIjxleHRMc3Q+IjpjYXNlIjwvZXh0THN0PiI6YnJlYWs7Y2FzZSI8cmdiQ29sb3IiOmRlbGV0ZSBvZVswXTt2YXIgZ2U9cGFyc2VJbnQob2Uu'@;
put 'cmdiLnNsaWNlKC02KSwxNik7Ui5JbmRleGVkLnB1c2goW2dlPj4xNiYyNTUsZ2U+PjgmMjU1LDI1NSZnZV0pO2JyZWFrO2Nhc2UiPGV4dCI6Rz0hMDticmVhaztjYXNlIjwvZXh0PiI6Rz0hMTticmVhaztkZWZhdWx0OmlmKGsmJmsuV1RGJiYhRyl0aHJvdyBuZXcgRXJyb3IoInVucmVjb2du'@;
put 'aXplZCAiK29lWzBdKyIgaW4gY2VsbFN0eWxlcyIpfX0pfShidCxhdCxFdCksKGJ0PWV0Lm1hdGNoKFIpKSYmZnVuY3Rpb24gdmsoUyxSLGspe1IuTnVtYmVyRm10PVtdO2Zvcih2YXIgRz1PZShBLl90YWJsZSksUT0wO1E8Ry5sZW5ndGg7KytRKVIuTnVtYmVyRm10W0dbUV1dPUEuX3RhYmxl'@;
put 'W0dbUV1dO3ZhciBvZT1TWzBdLm1hdGNoKGVuKTtpZihvZSlmb3IoUT0wO1E8b2UubGVuZ3RoOysrUSl7dmFyIGdlPXZyKG9lW1FdKTtzd2l0Y2goV24oZ2VbMF0pKXtjYXNlIjxudW1GbXRzIjpjYXNlIjwvbnVtRm10cz4iOmNhc2UiPG51bUZtdHMvPiI6Y2FzZSI8bnVtRm10cz4iOmNhc2Ui'@;
put 'PC9udW1GbXQ+IjpicmVhaztjYXNlIjxudW1GbXQiOnZhciBwZT1RcihnbyhnZS5mb3JtYXRDb2RlKSkseWU9cGFyc2VJbnQoZ2UubnVtRm10SWQsMTApO2lmKFIuTnVtYmVyRm10W3llXT1wZSx5ZT4wKXtpZih5ZT4zOTIpe2Zvcih5ZT0zOTI7eWU+NjAmJm51bGwhPVIuTnVtYmVyRm10W3ll'@;
put 'XTstLXllKTtSLk51bWJlckZtdFt5ZV09cGV9QS5sb2FkKHBlLHllKX1icmVhaztkZWZhdWx0OmlmKGsuV1RGKXRocm93IG5ldyBFcnJvcigidW5yZWNvZ25pemVkICIrZ2VbMF0rIiBpbiBudW1GbXRzIil9fX0oYnQsYXQsRXQpLChidD1ldC5tYXRjaChnZSkpJiZIVihidCxhdCxjdCxFdCks'@;
put 'KGJ0PWV0Lm1hdGNoKG9lKSkmJkZWKGJ0LGF0LGN0LEV0KSwoYnQ9ZXQubWF0Y2gocGUpKSYmd0MoYnQsYXQsY3QsRXQpLChidD1ldC5tYXRjaChrKSkmJmZ1bmN0aW9uIHJuZShTLFIsayl7Ui5DZWxsU3R5bGVYZj1bXTt2YXIgRyxRPSExOyhTWzBdLm1hdGNoKGVuKXx8W10pLmZvckVhY2go'@;
put 'ZnVuY3Rpb24ob2Upe3ZhciBnZT12cihvZSkscGU9MDtzd2l0Y2goV24oZ2VbMF0pKXtjYXNlIjxjZWxsU3R5bGVYZnMiOmNhc2UiPGNlbGxTdHlsZVhmcz4iOmNhc2UiPGNlbGxTdHlsZVhmcy8+IjpjYXNlIjwvY2VsbFN0eWxlWGZzPiI6Y2FzZSI8L3hmPiI6Y2FzZSI8L2FsaWdubWVudD4i'@;
put 'OmNhc2UiPC9wcm90ZWN0aW9uPiI6Y2FzZSI8cHJvdGVjdGlvbi8+IjpjYXNlIjxleHRMc3QiOmNhc2UiPGV4dExzdD4iOmNhc2UiPC9leHRMc3Q+IjpicmVhaztjYXNlIjx4ZiI6Y2FzZSI8eGYvPiI6Zm9yKGRlbGV0ZShHPWdlKVswXSxwZT0wO3BlPFozLmxlbmd0aDsrK3BlKUdbWjNbcGVd'@;
put 'XSYmKEdbWjNbcGVdXT1wYXJzZUludChHW1ozW3BlXV0sMTApKTtmb3IocGU9MDtwZTxXMy5sZW5ndGg7KytwZSlHW1czW3BlXV0mJihHW1czW3BlXV09dGkoR1tXM1twZV1dKSk7aWYoUi5OdW1iZXJGbXQmJkcubnVtRm10SWQ+MzkyKWZvcihwZT0zOTI7cGU+NjA7LS1wZSlpZihSLk51bWJl'@;
put 'ckZtdFtHLm51bUZtdElkXT09Ui5OdW1iZXJGbXRbcGVdKXtHLm51bUZtdElkPXBlO2JyZWFrfVIuQ2VsbFN0eWxlWGYucHVzaChHKTticmVhaztjYXNlIjxhbGlnbm1lbnQiOmNhc2UiPGFsaWdubWVudC8+Ijp2YXIgeWU9e307Z2UudmVydGljYWwmJih5ZS52ZXJ0aWNhbD1nZS52ZXJ0aWNh'@;
put 'bCksZ2UuaG9yaXpvbnRhbCYmKHllLmhvcml6b250YWw9Z2UuaG9yaXpvbnRhbCksbnVsbCE9Z2UudGV4dFJvdGF0aW9uJiYoeWUudGV4dFJvdGF0aW9uPWdlLnRleHRSb3RhdGlvbiksZ2UuaW5kZW50JiYoeWUuaW5kZW50PWdlLmluZGVudCksZ2Uud3JhcFRleHQmJih5ZS53cmFwVGV4dD1n'@;
put 'ZS53cmFwVGV4dCksZ2Uuc2hyaW5rVG9GaXQmJih5ZS5zaHJpbmtUb0ZpdD10aShnZS5zaHJpbmtUb0ZpdCkpLEcuYWxpZ25tZW50PXllO2JyZWFrO2Nhc2UiPHByb3RlY3Rpb24iOkcucHJvdGVjdGlvbj17fSx0aShnZS5oaWRkZW4pJiYoRy5wcm90ZWN0aW9uLmhpZGRlbj0hMCksbnVsbCE9'@;
put 'Z2UubG9ja2VkJiYoRy5wcm90ZWN0aW9uLmVkaXRhYmxlPSF0aShnZS5sb2NrZWQpKTticmVhaztjYXNlIjxleHQiOlE9ITA7YnJlYWs7Y2FzZSI8L2V4dD4iOlE9ITE7YnJlYWs7ZGVmYXVsdDppZihrJiZrLldURiYmIVEpdGhyb3cgbmV3IEVycm9yKCJ1bnJlY29nbml6ZWQgIitnZVswXSsi'@;
put 'IGluIGNlbGxTdHlsZVhmcyIpfX0pfShidCxhdCxFdCksKGJ0PWV0Lm1hdGNoKEcpKSYmZnVuY3Rpb24gYW5lKFMsUixrKXtSLkNlbGxTdHlsZVhmfHwoUi5DZWxsU3R5bGVYZj1bXSk7dmFyIEc9ITE7KFNbMF0ubWF0Y2goZW4pfHxbXSkuZm9yRWFjaChmdW5jdGlvbihRKXt2YXIgb2U9dnIo'@;
put 'USk7c3dpdGNoKFduKG9lWzBdKSl7Y2FzZSI8Y2VsbFN0eWxlcyI6Y2FzZSI8Y2VsbFN0eWxlcz4iOmNhc2UiPGNlbGxTdHlsZXMvPiI6Y2FzZSI8L2NlbGxTdHlsZXM+IjpjYXNlIjwveGY+IjpjYXNlIjwvY2VsbFN0eWxlPiI6Y2FzZSI8ZXh0THN0IjpjYXNlIjxleHRMc3Q+IjpjYXNlIjwv'@;
put 'ZXh0THN0PiI6YnJlYWs7Y2FzZSI8Y2VsbFN0eWxlIjpjYXNlIjxjZWxsU3R5bGUvPiI6ZGVsZXRlIG9lWzBdO3ZhciBnZT0rb2UueGZJZDtpZihSLkNlbGxTdHlsZVhmW2dlXSlSLkNlbGxTdHlsZVhmW2dlXS5zdHlsZT1nbyhvZS5uYW1lKTtlbHNlIGlmKCFvZS5idWlsdGluSWQpdGhyb3cg'@;
put 'bmV3IEVycm9yKCJDb3VsZCBub3QgZmluZCBDZWxsU3R5bGUgIitnZSk7YnJlYWs7Y2FzZSI8ZXh0IjpHPSEwO2JyZWFrO2Nhc2UiPC9leHQ+IjpHPSExO2JyZWFrO2RlZmF1bHQ6aWYoayYmay5XVEYmJiFHKXRocm93IG5ldyBFcnJvcigidW5yZWNvZ25pemVkICIrb2VbMF0rIiBpbiBjZWxs'@;
put 'U3R5bGVzIil9fSl9KGJ0LGF0LEV0KSwoYnQ9ZXQubWF0Y2goUSkpJiZmdW5jdGlvbiBiayhTLFIsayl7Ui5DZWxsWGY9W107dmFyIEcsUT0hMTsoU1swXS5tYXRjaChlbil8fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKG9lKXt2YXIgZ2U9dnIob2UpLHBlPTA7c3dpdGNoKFduKGdlWzBdKSl7Y2Fz'@;
put 'ZSI8Y2VsbFhmcyI6Y2FzZSI8Y2VsbFhmcz4iOmNhc2UiPGNlbGxYZnMvPiI6Y2FzZSI8L2NlbGxYZnM+IjpjYXNlIjwveGY+IjpjYXNlIjwvYWxpZ25tZW50PiI6Y2FzZSI8L3Byb3RlY3Rpb24+IjpjYXNlIjxwcm90ZWN0aW9uLz4iOmNhc2UiPGV4dExzdCI6Y2FzZSI8ZXh0THN0PiI6Y2Fz'@;
put 'ZSI8L2V4dExzdD4iOmJyZWFrO2Nhc2UiPHhmIjpjYXNlIjx4Zi8+Ijpmb3IoZGVsZXRlKEc9Z2UpWzBdLHBlPTA7cGU8WjMubGVuZ3RoOysrcGUpR1taM1twZV1dJiYoR1taM1twZV1dPXBhcnNlSW50KEdbWjNbcGVdXSwxMCkpO2ZvcihwZT0wO3BlPFczLmxlbmd0aDsrK3BlKUdbVzNbcGVd'@;
put 'XSYmKEdbVzNbcGVdXT10aShHW1czW3BlXV0pKTtpZihSLk51bWJlckZtdCYmRy5udW1GbXRJZD4zOTIpZm9yKHBlPTM5MjtwZT42MDstLXBlKWlmKFIuTnVtYmVyRm10W0cubnVtRm10SWRdPT1SLk51bWJlckZtdFtwZV0pe0cubnVtRm10SWQ9cGU7YnJlYWt9Ui5DZWxsU3R5bGVYZiYmRy54'@;
put 'ZklkJiZSLkNlbGxTdHlsZVhmW0cueGZJZF0mJlIuQ2VsbFN0eWxlWGZbRy54ZklkXS5zdHlsZSYmKEcuc3R5bGU9Ui5DZWxsU3R5bGVYZltHLnhmSWRdLnN0eWxlKSxSLkNlbGxYZi5wdXNoKEcpO2JyZWFrO2Nhc2UiPGFsaWdubWVudCI6Y2FzZSI8YWxpZ25tZW50Lz4iOnZhciB5ZT17fTtn'@;
put 'ZS52ZXJ0aWNhbCYmKHllLnZlcnRpY2FsPWdlLnZlcnRpY2FsKSxnZS5ob3Jpem9udGFsJiYoeWUuaG9yaXpvbnRhbD1nZS5ob3Jpem9udGFsKSxudWxsIT1nZS50ZXh0Um90YXRpb24mJih5ZS50ZXh0Um90YXRpb249Z2UudGV4dFJvdGF0aW9uKSxnZS5pbmRlbnQmJih5ZS5pbmRlbnQ9Z2Uu'@;
put 'aW5kZW50KSxnZS53cmFwVGV4dCYmKHllLndyYXBUZXh0PXRpKGdlLndyYXBUZXh0KSksZ2Uuc2hyaW5rVG9GaXQmJih5ZS5zaHJpbmtUb0ZpdD10aShnZS5zaHJpbmtUb0ZpdCkpLEcuYWxpZ25tZW50PXllO2JyZWFrO2Nhc2UiPHByb3RlY3Rpb24iOkcucHJvdGVjdGlvbj17fSx0aShnZS5o'@;
put 'aWRkZW4pJiYoRy5wcm90ZWN0aW9uLmhpZGRlbj0hMCksbnVsbCE9Z2UubG9ja2VkJiYoRy5wcm90ZWN0aW9uLmVkaXRhYmxlPSF0aShnZS5sb2NrZWQpKTticmVhaztjYXNlIjxBbHRlcm5hdGVDb250ZW50IjpjYXNlIjxleHQiOlE9ITA7YnJlYWs7Y2FzZSI8L0FsdGVybmF0ZUNvbnRlbnQ+'@;
put 'IjpjYXNlIjwvZXh0PiI6UT0hMTticmVhaztkZWZhdWx0OmlmKGsmJmsuV1RGJiYhUSl0aHJvdyBuZXcgRXJyb3IoInVucmVjb2duaXplZCAiK2dlWzBdKyIgaW4gY2VsbFhmcyIpfX0pfShidCxhdCxFdCksKGJ0PWV0Lm1hdGNoKE5lKSkmJmZ1bmN0aW9uIHlrKFMsUixrLEcpe1IuRFhGfHwo'@;
put 'Ui5EWEY9W10pLChTWzBdLm1hdGNoKEppKXx8W10pLmZvckVhY2goZnVuY3Rpb24oUSl7Ui5EWEYucHVzaChMNChRLFIsayxHKSl9KX0oYnQsYXQsY3QsRXQpLChidD1ldC5tYXRjaChQZSkpJiZmdW5jdGlvbiBCVihTLFIsayxHKXtSLlRhYmxlfHwoUi5UYWJsZT1bXSksKFNbMF0ubWF0Y2go'@;
put 'S3IpfHxbXSkuZm9yRWFjaChmdW5jdGlvbihRKXtSLlRhYmxlLnB1c2goZnVuY3Rpb24gVlYoUyxSLGssRyl7dmFyIFE9ITEsb2U9e307cmV0dXJuKFMubWF0Y2goZW4pfHxbXSkuZm9yRWFjaChmdW5jdGlvbihnZSl7dmFyIHBlPXZyKGdlKTtzd2l0Y2goV24ocGVbMF0pKXtjYXNlIjx0YWJs'@;
put 'ZVN0eWxlPiI6Y2FzZSI8dGFibGVTdHlsZSI6b2UubmFtZT1wZS5uYW1lLnJlcGxhY2UoL14oVGFibGV8UGl2b3QpU3R5bGUvLCIiKSxvZS5yYXduYW1lPXBlLm5hbWUsb2UucGl2b3Q9IXBlLnBpdm90fHx0aShwZS5waXZvdCksb2UudGFibGU9IXBlLnRhYmxlfHx0aShwZS50YWJsZSk7YnJl'@;
put 'YWs7Y2FzZSI8dGFibGVTdHlsZS8+IjpjYXNlIjwvdGFibGVTdHlsZT4iOmNhc2UiPGV4dExzdCI6Y2FzZSI8ZXh0THN0PiI6Y2FzZSI8L2V4dExzdD4iOmJyZWFrO2Nhc2UiPHRhYmxlU3R5bGVFbGVtZW50IjppZihwZS50eXBlJiZwZS5keGZJZCl7aWYoIVIuRFhGfHwhUi5EWEZbK3BlLmR4'@;
put 'ZklkXSl0aHJvdyBuZXcgRXJyb3IoZ2UrIiBjYW5ub3QgZmluZCBEWEYiKTtvZVtwZS50eXBlXT1SLkRYRlsrcGUuZHhmSWRdfWJyZWFrO2Nhc2UiPGV4dCI6UT0hMDticmVhaztjYXNlIjwvZXh0PiI6UT0hMTticmVhaztkZWZhdWx0OmlmKEcmJkcuV1RGJiYhUSl0aHJvdyBuZXcgRXJyb3Io'@;
put 'InVucmVjb2duaXplZCAiK3BlWzBdKyIgaW4gdGFibGVTdHlsZSIpfX0pLG9lfShRLFIsMCxHKSl9KX0oYnQsYXQsMCxFdCksKGF0LkZvbnRzfHxbXSlbMF0mJkk0KGF0LkZvbnRzWzBdKSxhdCk6YXR9fSgpLHdrPVByKCJzdHlsZVNoZWV0IixudWxsLHt4bWxuczpZaS5tYWluWzBdLCJ4bWxu'@;
put 'czp2dCI6WWkudnR9KTtmdW5jdGlvbiBadihTLFIpe3ZhciBHLGs9W0lpLHdrXTtTLlNTRiYmbnVsbCE9KEc9ZnVuY3Rpb24gazUoUyl7dmFyIFI9WyI8bnVtRm10cz4iXTtyZXR1cm5bWzUsOF0sWzIzLDI2XSxbNDEsNDRdLFs1MCwzOTJdXS5mb3JFYWNoKGZ1bmN0aW9uKGspe2Zvcih2YXIg'@;
put 'Rz1rWzBdO0c8PWtbMV07KytHKW51bGwhPVNbR10mJihSW1IubGVuZ3RoXT1QcigibnVtRm10IixudWxsLHtudW1GbXRJZDpHLGZvcm1hdENvZGU6THIoU1tHXSl9KSl9KSwxPT09Ui5sZW5ndGg/IiI6KFJbUi5sZW5ndGhdPSI8L251bUZtdHM+IixSWzBdPVByKCJudW1GbXRzIixudWxsLHtj'@;
put 'b3VudDpSLmxlbmd0aC0yfSkucmVwbGFjZSgiLz4iLCI+IiksUi5qb2luKCIiKSl9KFMuU1NGKSkmJihrW2subGVuZ3RoXT1HKSxrW2subGVuZ3RoXT1mdW5jdGlvbiBnMihTKXt2YXIgUj1bXTtyZXR1cm4gUy5mb3JFYWNoKGZ1bmN0aW9uKGspe3ZhciBHPVsiPGZvbnQ+Il07ay5ib2xkJiZH'@;
put 'LnB1c2goIjxiLz4iKSxrLml0YWxpYyYmRy5wdXNoKCI8aS8+Iiksay5zdHJpa2UmJkcucHVzaCgiPHN0cmlrZS8+Iiksay5zaGFkb3cmJkcucHVzaCgiPHNoYWRvdy8+IiksQTVbK2sudW5kZXJsaW5lXSYmRy5wdXNoKCc8dSB2YWw9IicrQTVbK2sudW5kZXJsaW5lXSsnIi8+Jyksay5zeiYm'@;
put 'Ry5wdXNoKCc8c3ogdmFsPSInK2suc3orJyIvPicpLGsuY29sb3ImJkcucHVzaChnZChrLmNvbG9yLCEwKSksay5uYW1lJiZHLnB1c2goJzxuYW1lIHZhbD0iJytrLm5hbWUrJyIvPicpLGsuZmFtaWx5JiZHLnB1c2goJzxmYW1pbHkgdmFsPSInK2suZmFtaWx5KyciLz4nKSxrLnNjaGVtZSYm'@;
put 'Ry5wdXNoKCc8c2NoZW1lIHZhbD0iJytrLnNjaGVtZSsnIi8+Jyksay52YWxpZ24mJkcucHVzaCgnPHZlcnRBbGlnbiB2YWw9Iicray52YWxpZ24rKCJzdWIiPT1rLnZhbGlnbnx8InN1cGVyIj09ay52YWxpZ24/InNjcmlwdCI6IiIpKyciLz4nKSxSLnB1c2goRy5qb2luKCIiKSsiPC9mb250'@;
put 'PiIpfSksJzxmb250cyBjb3VudD0iJytSLmxlbmd0aCsnIj4nK1Iuam9pbigiIikrIjwvZm9udHM+In0oKFMuU3R5bGVzfHx7fSkuRm9udHN8fFtdKSxrW2subGVuZ3RoXT1mdW5jdGlvbiBtayhTKXt2YXIgUj1bXTtyZXR1cm4gUy5mb3JFYWNoKGZ1bmN0aW9uKGspe3ZhciBHPW51bGw7aWYo'@;
put 'ay5zdG9wcyYmay5zdG9wcy5sZW5ndGgpe3ZhciBRPXt9O2suYW5nbGUmJihRLmRlZ3JlZT1NYXRoLnJvdW5kKGsuYW5nbGUpKSxHPWsuc3RvcHMubWFwKGZ1bmN0aW9uKG9lKXtyZXR1cm4gUHIoInN0b3AiLGdkKG9lLCJjb2xvciIsITApLG51bGwhPW9lLnY/e3Bvc2l0aW9uOm9lLnZ9Ont9'@;
put 'KX0pLFIucHVzaCgiPGZpbGw+IitQcigiZ3JhZGllbnRGaWxsIixHLmpvaW4oIiIpLFEpKyI8L2ZpbGw+Iil9ZWxzZXtpZihrLmZnQ29sb3Ipe2lmKEc9KEd8fCIiKSsiPGZnQ29sb3IgIixrLmZnQ29sb3IudGhlbWUpRys9J3RoZW1lPSInK2suZmdDb2xvci50aGVtZSsnIicrKGsuZmdDb2xv'@;
put 'ci50aW50PycgdGludD0iJytrLmZnQ29sb3IudGludCsnIic6IiIpKyIvPiI7ZWxzZSBpZihudWxsIT1rLmZnQ29sb3IuaW5kZXgmJm51bGw9PWsuZmdDb2xvci5yZ2IpRys9J2luZGV4ZWQ9Iicray5mZ0NvbG9yLmluZGV4KyciLz4nO2Vsc2UgaWYoay5mZ0NvbG9yLmF1dG8pRys9J2F1dG89'@;
put 'IjEiLz4nO2Vsc2V7aWYobnVsbD09ay5mZ0NvbG9yLnJnYil0aHJvdyBuZXcgRXJyb3IoIkJhZCBjb2xvciAiK09lKGsuZmdDb2xvcikuam9pbigifCIpKTtHKz0ncmdiPSJGRicrUDAoay5mZ0NvbG9yLnJnYikrJyIvPid9InNvbGlkIj09ay5wYXR0ZXJuVHlwZSYmIWsuYmdDb2xvciYmKGsu'@;
put 'YmdDb2xvcj17aW5kZXg6NjR9KX1pZihrLmJnQ29sb3IpaWYoRz0oR3x8IiIpKyI8YmdDb2xvciAiLGsuYmdDb2xvci50aGVtZSlHKz0ndGhlbWU9Iicray5iZ0NvbG9yLnRoZW1lKyciLz4nO2Vsc2UgaWYobnVsbCE9ay5iZ0NvbG9yLmluZGV4JiZudWxsPT1rLmJnQ29sb3IucmdiKUcrPSdp'@;
put 'bmRleGVkPSInK2suYmdDb2xvci5pbmRleCsnIi8+JztlbHNlIGlmKGsuYmdDb2xvci5hdXRvKUcrPSdhdXRvPSIxIi8+JztlbHNle2lmKG51bGw9PWsuYmdDb2xvci5yZ2IpdGhyb3cgbmV3IEVycm9yKCJCYWQgY29sb3IgIitPZShrLmJnQ29sb3IpLmpvaW4oInwiKSk7Rys9J3JnYj0iRkYn'@;
put 'K1AwKGsuYmdDb2xvci5yZ2IpKyciLz4nfVIucHVzaCgiPGZpbGw+IitQcigicGF0dGVybkZpbGwiLEcse3BhdHRlcm5UeXBlOmsucGF0dGVyblR5cGV9KSsiPC9maWxsPiIpfX0pLCc8ZmlsbHMgY291bnQ9IicrUi5sZW5ndGgrJyI+JytSLmpvaW4oIiIpKyI8L2ZpbGxzPiJ9KChTLlN0eWxl'@;
put 'c3x8e30pLkZpbGxzfHxbXSksa1trLmxlbmd0aF09ZnVuY3Rpb24gRHMoUyl7dmFyIFI9W107cmV0dXJuIFMuZm9yRWFjaChmdW5jdGlvbihrKXt2YXIgRz1bXTtHLnB1c2goUjQoay5sZWZ0LCJsZWZ0IikpLEcucHVzaChSNChrLnJpZ2h0LCJyaWdodCIpKSxHLnB1c2goUjQoay50b3AsInRv'@;
put 'cCIpKSxHLnB1c2goUjQoay5ib3R0b20sImJvdHRvbSIpKSxHLnB1c2goUjQoay5kaWFnb25hbCwiZGlhZ29uYWwiKSksUi5wdXNoKCI8Ym9yZGVyPiIrRy5qb2luKCIiKSsiPC9ib3JkZXI+Iil9KSwnPGJvcmRlcnMgY291bnQ9IicrUi5sZW5ndGgrJyI+JytSLmpvaW4oIiIpKyI8L2JvcmRl'@;
put 'cnM+In0oKFMuU3R5bGVzfHx7fSkuQm9yZGVyc3x8W10pLGtbay5sZW5ndGhdPWZ1bmN0aW9uIGluZShTKXt2YXIgUj1bJzx4ZiBudW1GbXRJZD0iMCIgZm9udElkPSIwIiBmaWxsSWQ9IjAiIGJvcmRlcklkPSIwIi8+J107aWYoUylmb3IodmFyIGs9MTtrPFMubGVuZ3RoOysraylSLnB1c2go'@;
put 'UHIoInhmIixudWxsLHtudW1GbXRJZDpTW2tdLm51bUZtdElkfHwwLGZvbnRJZDpTW2tdLmZvbnRJZHx8MCxmaWxsSWQ6U1trXS5maWxsSWR8fDAsYm9yZGVySWQ6U1trXS5ib3JkZXJJZHx8MH0pKTtyZXR1cm4nPGNlbGxTdHlsZVhmcyBjb3VudD0iJytSLmxlbmd0aCsnIj4nK1Iuam9pbigi'@;
put 'IikrIjwvY2VsbFN0eWxlWGZzPiJ9KFIuY2VsbFN0eWxlWGZzKSwoRz1mdW5jdGlvbiBubmUoUyl7dmFyIFI9W107cmV0dXJuIFJbUi5sZW5ndGhdPVByKCJjZWxsWGZzIixudWxsKSxTLmZvckVhY2goZnVuY3Rpb24oayl7dmFyIEc9ay5hbGlnbm1lbnQ7ZGVsZXRlIGsuYWxpZ25tZW50O3Zh'@;
put 'ciBRPWsucHJvdGVjdGlvbjtkZWxldGUgay5wcm90ZWN0aW9uO3ZhciBvZT1HP1ByKCJhbGlnbm1lbnQiLG51bGwsRyk6IiI7b2UrPVE/UHIoInByb3RlY3Rpb24iLG51bGwse2hpZGRlbjpRLmhpZGRlbj8xOjAsbG9ja2VkOlEuZWRpdGFibGU/MDoxfSk6IiIsUltSLmxlbmd0aF09UHIoInhm'@;
put 'IixvZXx8bnVsbCxrKSxHJiYoay5hbGlnbm1lbnQ9RyksUSYmKGsucHJvdGVjdGlvbj1RKX0pLFJbUi5sZW5ndGhdPSI8L2NlbGxYZnM+IiwyPT09Ui5sZW5ndGg/IiI6KFJbMF09UHIoImNlbGxYZnMiLG51bGwse2NvdW50OlIubGVuZ3RoLTJ9KS5yZXBsYWNlKCIvPiIsIj4iKSxSLmpvaW4o'@;
put 'IiIpKX0oUi5jZWxsWGZzKSkmJihrW2subGVuZ3RoXT1HKSxrW2subGVuZ3RoXT1mdW5jdGlvbiBvbmUoUyl7dmFyIFI9Wyc8Y2VsbFN0eWxlIG5hbWU9Ik5vcm1hbCIgeGZJZD0iMCIgYnVpbHRpbklkPSIwIi8+J107aWYoUylmb3IodmFyIGs9MTtrPFMubGVuZ3RoOysraylSLnB1c2goUHIo'@;
put 'ImNlbGxTdHlsZSIsbnVsbCx7bmFtZTpTW2tdLm5hbWUseGZJZDprfSkpO3JldHVybic8Y2VsbFN0eWxlcyBjb3VudD0iJytSLmxlbmd0aCsnIj4nK1Iuam9pbigiIikrIjwvY2VsbFN0eWxlcz4ifShSLmNlbGxTdHlsZVhmcyksUy5TdHlsZXMuRFhGfHwoUy5TdHlsZXMuRFhGPVtdKTt2YXIg'@;
put 'UT1mdW5jdGlvbiBmZChTLFIsayl7dmFyIEc9Wyc8dGFibGVTdHlsZXMgY291bnQ9IicrKFN8fFtdKS5sZW5ndGgrJyIgZGVmYXVsdFRhYmxlU3R5bGU9IlRhYmxlU3R5bGVNZWRpdW05IiBkZWZhdWx0UGl2b3RTdHlsZT0iUGl2b3RTdHlsZU1lZGl1bTQiJ107cmV0dXJuIFMmJlMubGVuZ3Ro'@;
put 'PyhHWzBdKz0iPiIsUy5mb3JFYWNoKGZ1bmN0aW9uKFEpe0cucHVzaChmdW5jdGlvbiBDQyhTLFIsayl7dmFyIEc9W107WyJ3aG9sZVRhYmxlIiwiaGVhZGVyUm93IiwidG90YWxSb3ciLCJmaXJzdENvbHVtbiIsImxhc3RDb2x1bW4iLCJmaXJzdFJvd1N0cmlwZSIsInNlY29uZFJvd1N0cmlw'@;
put 'ZSIsImZpcnN0Q29sdW1uU3RyaXBlIiwic2Vjb25kQ29sdW1uU3RyaXBlIiwiZmlyc3RIZWFkZXJDZWxsIiwibGFzdEhlYWRlckNlbGwiLCJmaXJzdFRvdGFsQ2VsbCIsImxhc3RUb3RhbENlbGwiLCJmaXJzdFN1YnRvdGFsQ29sdW1uIiwic2Vjb25kU3VidG90YWxDb2x1bW4iLCJ0aGlyZFN1'@;
put 'YnRvdGFsQ29sdW1uIiwiZmlyc3RTdWJ0b3RhbFJvdyIsInNlY29uZFN1YnRvdGFsUm93IiwidGhpcmRTdWJ0b3RhbFJvdyIsImJsYW5rUm93IiwiZmlyc3RDb2x1bW5TdWJoZWFkaW5nIiwic2Vjb25kQ29sdW1uU3ViaGVhZGluZyIsInRoaXJkQ29sdW1uU3ViaGVhZGluZyIsImZpcnN0Um93'@;
put 'U3ViaGVhZGluZyIsInNlY29uZFJvd1N1YmhlYWRpbmciLCJ0aGlyZFJvd1N1YmhlYWRpbmciLCJwYWdlRmllbGRMYWJlbHMiLCJwYWdlRmllbGRWYWx1ZXMiXS5mb3JFYWNoKGZ1bmN0aW9uKG9lKXtpZihTW29lXSl7dmFyIGdlPWxTKFIsU1tvZV0pO0cucHVzaCgnPHRhYmxlU3R5bGVFbGVt'@;
put 'ZW50IGR4ZklkPSInK2dlKyciIHR5cGU9Iicrb2UrJyIvPicpfX0pO3ZhciBRPSc8dGFibGVTdHlsZSBjb3VudD0iJytHLmxlbmd0aCsnIiBwaXZvdD0iJysgKyEhUy5waXZvdCsnIiBuYW1lPSInK1MubmFtZSsnIic7cmV0dXJuIEcubGVuZ3RoP1ErIj4iK0cuam9pbigiIikrIjwvdGFibGVT'@;
put 'dHlsZT4iOlErIi8+In0oUSxSKSl9KSxHLmpvaW4oIiIpKyI8L3RhYmxlU3R5bGVzPiIpOkdbMF0rIi8+In0oKFMuU3R5bGVzfHx7fSkuVGFibGV8fFtdLFMuU3R5bGVzLkRYRik7cmV0dXJuIGtbay5sZW5ndGhdPWZ1bmN0aW9uIGpWKFMsUil7aWYoIVMubGVuZ3RoKXJldHVybic8ZHhmcyBj'@;
put 'b3VudD0iMCIvPic7dmFyIGs9Wyc8ZHhmcyBjb3VudD0iJytTLmxlbmd0aCsnIj4nXTtyZXR1cm4gUy5mb3JFYWNoKGZ1bmN0aW9uKEcpe2sucHVzaChmdW5jdGlvbiBlOChTLFIpe3ZhciBrPXtib2xkOiJiIixpdGFsaWM6ImkiLHZhbGlnbjoidmVydEFsaWduIn0sRz1bIjxkeGY+Il0sUT1b'@;
put 'XSxvZT1bXSxnZT1bXSx5ZT1bXTtyZXR1cm4gT2UoUykuZm9yRWFjaChmdW5jdGlvbihOZSl7c3dpdGNoKE5lKXtjYXNlImJvbGQiOmNhc2UiaXRhbGljIjpjYXNlInN0cmlrZSI6Y2FzZSJ1bmRlcmxpbmUiOmNhc2UiY29sb3IiOmNhc2UidmFsaWduIjpjYXNlInN6IjpjYXNlIm5hbWUiOmNh'@;
put 'c2Uib3V0bGluZSI6Y2FzZSJzaGFkb3ciOmNhc2UiY2hhcnNldCI6Y2FzZSJmYW1pbHkiOmNhc2UiY29uZGVuc2UiOmNhc2UiZXh0ZW5kIjpjYXNlInNjaGVtZSI6US5wdXNoKE5lKTticmVhaztjYXNlImJnQ29sb3IiOmNhc2UiZmdDb2xvciI6Z2UucHVzaChOZSk7YnJlYWs7Y2FzZSJ6Ijpv'@;
put 'ZS5wdXNoKE5lKTticmVhaztjYXNlInRvcCI6Y2FzZSJib3R0b20iOmNhc2UibGVmdCI6Y2FzZSJyaWdodCI6Y2FzZSJkaWFnb25hbCI6Y2FzZSJ2ZXJ0aWNhbCI6Y2FzZSJob3Jpem9udGFsIjp5ZS5wdXNoKE5lKTticmVhaztjYXNlInBhdHRlcm5UeXBlIjpjYXNlImRpYWdvbmFsRG93biI6'@;
put 'Y2FzZSJkaWFnb25hbFVwIjpjYXNlInN0b3BzIjpjYXNlImRlZ3JlZSI6YnJlYWs7ZGVmYXVsdDp0aHJvdyJVbnJlY29nbml6ZWQgIitOZSsiIGluIERYRiJ9fSksUS5sZW5ndGg+MCYmKEcucHVzaCgiPGZvbnQ+IiksUS5mb3JFYWNoKGZ1bmN0aW9uKE5lKXtzd2l0Y2goTmUpe2Nhc2UiYm9s'@;
put 'ZCI6Y2FzZSJpdGFsaWMiOmNhc2Uic3RyaWtlIjpjYXNlIm91dGxpbmUiOmNhc2Uic2hhZG93IjpjYXNlImNvbmRlbnNlIjpjYXNlImV4dGVuZCI6Ry5wdXNoKCI8Iisoa1tOZV18fE5lKSsnIHZhbD0iJysoU1tOZV0/IjEiOiIwIikrJyIvPicpO2JyZWFrO2Nhc2UiY29sb3IiOkcucHVzaChn'@;
put 'ZChTW05lXSxOZSwhMCkpO2JyZWFrO2Nhc2UiZmFtaWx5IjpjYXNlIm5hbWUiOmNhc2Uic3oiOmNhc2Uic2NoZW1lIjpHLnB1c2goIjwiKyhrW05lXXx8TmUpKycgdmFsPSInK1NbTmVdKyciLz4nKTticmVhaztjYXNlInVuZGVybGluZSI6Ry5wdXNoKCc8dSB2YWw9IicrQTVbU1tOZV18fDBd'@;
put 'KyciLz4nKTticmVhaztjYXNlInZhbGlnbiI6Ry5wdXNoKCc8dmVydEFsaWduIHZhbD0iJytTLnZhbGlnbisoInN1YiI9PVMudmFsaWdufHwic3VwZXIiPT1TLnZhbGlnbj8ic2NyaXB0IjoiIikrJyIvPicpO2JyZWFrO2RlZmF1bHQ6dGhyb3ciVW5zdXBwb3J0ZWQgIitOZSsiIDogZm9udCBE'@;
put 'WEYifX0pLEcucHVzaCgiPC9mb250PiIpKSxvZS5sZW5ndGg+MCYmRy5wdXNoKCc8bnVtRm10IGZvcm1hdENvZGU9IicrTHIoUy56KSsnIiBudW1GbXRJZD0iJytmdW5jdGlvbiBzUyhTLFIpe2lmKCJudW1iZXIiPT10eXBlb2YgUylyZXR1cm4gUzt2YXIgaz1SLnJldnNzZltTPz8iR2VuZXJh'@;
put 'bCJdLEc9NjA7aWYobnVsbD09aylmb3IoO0c8MzkyOysrRylpZihudWxsPT1SLnNzZltHXSlyZXR1cm4gQS5sb2FkKFMsRyksUi5zc2ZbR109UyxSLnJldnNzZltTXT1HLEc7cmV0dXJuIGt9KFMueixSKSsnIi8+JyksZ2UubGVuZ3RoPjAmJihHLnB1c2goIjxmaWxsPiIpLEcucHVzaCgiPHBh'@;
put 'dHRlcm5GaWxsIisoUy5wYXR0ZXJuVHlwZT8nIHBhdHRlcm5UeXBlPSInK1MucGF0dGVyblR5cGUrJyI+JzoiPiIpKSxnZS5mb3JFYWNoKGZ1bmN0aW9uKE5lKXtzd2l0Y2goTmUpe2Nhc2UicGF0dGVyblR5cGUiOmJyZWFrO2Nhc2UiZmdDb2xvciI6Y2FzZSJiZ0NvbG9yIjpHLnB1c2goZ2Qo'@;
put 'U1tOZV0sTmUsITApKTticmVhaztkZWZhdWx0OnRocm93IlVuc3VwcG9ydGVkICIrTmUrIiA6IGZpbGwgRFhGIn19KSxHLnB1c2goIjwvcGF0dGVybkZpbGw+IiksRy5wdXNoKCI8L2ZpbGw+IikpLHllLmxlbmd0aD4wPyhHLnB1c2goWyI8Ym9yZGVyIixudWxsIT1TLmRpYWdvbmFsRG93bj8n'@;
put 'IGRpYWdvbmFsRG93bj0iJysgKyEhUy5kaWFnb25hbERvd24rJyInOiIiLG51bGwhPVMuZGlhZ29uYWxVcD8nIGRpYWdvbmFsVXA9IicrICshIVMuZGlhZ29uYWxVcCsnIic6IiIsIj4iXS5qb2luKCIiKSkseWUuZm9yRWFjaChmdW5jdGlvbihOZSl7Ry5wdXNoKFI0KFNbTmVdLE5lKSl9KSxH'@;
put 'LnB1c2goIjwvYm9yZGVyPiIpKToobnVsbCE9Uy5kaWFnb25hbERvd258fG51bGwhPVMuZGlhZ29uYWxVcCkmJkcucHVzaChbIjxib3JkZXIiLG51bGwhPVMuZGlhZ29uYWxEb3duPycgZGlhZ29uYWxEb3duPSInKyArISFTLmRpYWdvbmFsRG93bisnIic6IiIsbnVsbCE9Uy5kaWFnb25hbFVw'@;
put 'PycgZGlhZ29uYWxVcD0iJysgKyEhUy5kaWFnb25hbFVwKyciJzoiIiwiLz4iXS5qb2luKCIiKSksMT09Ry5sZW5ndGg/IjxkeGYvPiI6Ry5qb2luKCIiKSsiPC9keGY+In0oRyxSKSl9KSxrLmpvaW4oIiIpKyI8L2R4ZnM+In0oUy5TdHlsZXMuRFhGLFIpLGtbay5sZW5ndGhdPVEsay5sZW5n'@;
put 'dGg+MiYmKGtbay5sZW5ndGhdPSI8L3N0eWxlU2hlZXQ+IixrWzFdPWtbMV0ucmVwbGFjZSgiLz4iLCI+IikpLGsuam9pbigiIil9ZnVuY3Rpb24gU0MoUyxSLGspe2t8fChrPWJuKDYrNCpSLmxlbmd0aCkpLGsud3JpdGVfc2hpZnQoMixTKSxGYyhSLGspO3ZhciBHPWsubGVuZ3RoPmsubD9r'@;
put 'LnNsaWNlKDAsay5sKTprO3JldHVybiBudWxsPT1rLmwmJihrLmw9ay5sZW5ndGgpLEd9ZnVuY3Rpb24gWlYoUyl7cmV0dXJue2NvbG9yOlFoKFMpLHBvczpQbChTKX19S2EuU1RZPSJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlv'@;
put 'bnNoaXBzL3N0eWxlcyI7dmFyIE1DPVsibm9uZSIsInNvbGlkIiwibWVkaXVtR3JheSIsImRhcmtHcmF5IiwibGlnaHRHcmF5IiwiZGFya0hvcml6b250YWwiLCJkYXJrVmVydGljYWwiLCJkYXJrRG93biIsImRhcmtVcCIsImRhcmtHcmlkIiwiZGFya1RyZWxsaXMiLCJsaWdodEhvcml6b250'@;
put 'YWwiLCJsaWdodFZlcnRpY2FsIiwibGlnaHREb3duIiwibGlnaHRVcCIsImxpZ2h0R3JpZCIsImxpZ2h0VHJlbGxpcyIsImdyYXkxMjUiLCJncmF5MDYyNSJdLFdWPVZlKE1DKSxENT1bImdlbmVyYWwiLCJsZWZ0IiwiY2VudGVyIiwicmlnaHQiLCJmaWxsIiwianVzdGlmeSIsImNlbnRlckNv'@;
put 'bnRpbnVvdXMiLCJkaXN0cmlidXRlZCJdLHQ4PVsidG9wIiwiY2VudGVyIiwiYm90dG9tIiwianVzdGlmeSIsImRpc3RyaWJ1dGVkIl07ZnVuY3Rpb24ganUoUyxSLGspe2t8fChrPWJuKDE2KSksay53cml0ZV9zaGlmdCgyLFJ8fDApLGsud3JpdGVfc2hpZnQoMixTLm51bUZtdElkfHwwKSxr'@;
put 'LndyaXRlX3NoaWZ0KDIsUy5mb250SWR8fDApLGsud3JpdGVfc2hpZnQoMixTLmZpbGxJZHx8MCksay53cml0ZV9zaGlmdCgyLFMuYm9yZGVySWR8fDApLGsud3JpdGVfc2hpZnQoMSxTLmFsaWdubWVudCYmUy5hbGlnbm1lbnQudGV4dFJvdGF0aW9ufHwwKSxrLndyaXRlX3NoaWZ0KDEsUy5h'@;
put 'bGlnbm1lbnQmJlMuYWxpZ25tZW50LmluZGVudHx8MCk7dmFyIEc9MCxRPTA7aWYoUy5hbGlnbm1lbnQpe2lmKFMuYWxpZ25tZW50Lmhvcml6b250YWwpe3ZhciBvZT1ENS5pbmRleE9mKFMuYWxpZ25tZW50Lmhvcml6b250YWwpO29lPDAmJihvZT0wKSxHfD1vZX1pZihTLmFsaWdubWVudC52'@;
put 'ZXJ0aWNhbCl7dmFyIGdlPXQ4LmluZGV4T2YoUy5hbGlnbm1lbnQudmVydGljYWwpO2dlPDAmJihnZT0yKSxHfD1nZTw8M31TLmFsaWdubWVudC53cmFwVGV4dCYmKEd8PTY0KSxTLmFsaWdubWVudC5zaHJpbmtUb0ZpdCYmKFF8PTEpfXJldHVybiBrLndyaXRlX3NoaWZ0KDEsRyksay53cml0'@;
put 'ZV9zaGlmdCgxLFEpLGsud3JpdGVfc2hpZnQoMSwwKSxrLndyaXRlX3NoaWZ0KDEsMCksa312YXIgcGQ9WyJub25lIiwidGhpbiIsIm1lZGl1bSIsImRhc2hlZCIsImRvdHRlZCIsInRoaWNrIiwiZG91YmxlIiwiaGFpciIsIm1lZGl1bURhc2hlZCIsImRhc2hEb3QiLCJtZWRpdW1EYXNoRG90'@;
put 'IiwiZGFzaERvdERvdCIsIm1lZGl1bURhc2hEb3REb3QiLCJzbGFudERhc2hEb3QiXTtmdW5jdGlvbiBJNShTKXt2YXIgUj1TLnJlYWRfc2hpZnQoMSk7Uy5sKz0xO3ZhciBrPVFoKFMpO3JldHVybntzdHlsZTpwZFtSXSxjb2xvcjprfX1mdW5jdGlvbiBSNShTLFIpe3JldHVybiBSfHwoUj1i'@;
put 'bigxMCkpLFMmJlMuc3R5bGUmJiIiIT1TLnN0eWxlJiYibm9uZSIhPVMuc3R5bGUmJi0xIT09cGQuaW5kZXhPZihTLnN0eWxlKT8oUi53cml0ZV9zaGlmdCgxLHBkLmluZGV4T2YoUy5zdHlsZSkpLFIud3JpdGVfc2hpZnQoMSwwKSxTLmNvbG9yP21mKFMuY29sb3IsUik6KFIud3JpdGVfc2hp'@;
put 'ZnQoNCwwKSxSLndyaXRlX3NoaWZ0KDQsMCkpKTooUi53cml0ZV9zaGlmdCgxLDApLFIud3JpdGVfc2hpZnQoMSwwKSxSLndyaXRlX3NoaWZ0KDQsMCksUi53cml0ZV9zaGlmdCg0LDApKSxSfWZ1bmN0aW9uIFNrKFMsUil7cmV0dXJuIFJ8fChSPWJuKDUyKSksUi53cml0ZV9zaGlmdCg0LFMu'@;
put 'eGZJZCksUi53cml0ZV9zaGlmdCgyLDEpLFIud3JpdGVfc2hpZnQoMSwrUy5idWlsdGluSWQpLFIud3JpdGVfc2hpZnQoMSwwKSxwZihTLm5hbWV8fCIiLFIpLFIubGVuZ3RoPlIubD9SLnNsaWNlKDAsUi5sKTpSfWZ1bmN0aW9uIFl2KFMsUil7IVJ8fCFSLnRoZW1lRWxlbWVudHN8fCFSLnRo'@;
put 'ZW1lRWxlbWVudHMuY2xyU2NoZW1lfHxudWxsIT1TLnRoZW1lJiYoUy5yZ2I9UzUoUi50aGVtZUVsZW1lbnRzLmNsclNjaGVtZVtTLnRoZW1lXS5yZ2IsUy50aW50fHwwKSl9ZnVuY3Rpb24gRGsoUyxSKXt2YXIgaz1iaSgpO3JldHVybiBGcihrLCJCcnRCZWdpblN0eWxlU2hlZXQiKSxmdW5j'@;
put 'dGlvbiAkVihTLFIpe2lmKFIpe3ZhciBrPTA7W1s1LDhdLFsyMywyNl0sWzQxLDQ0XSxbNTAsMzkyXV0uZm9yRWFjaChmdW5jdGlvbihHKXtmb3IodmFyIFE9R1swXTtRPD1HWzFdOysrUSludWxsIT1SW1FdJiYrK2t9KSwwIT1rJiYoRnIoUywiQnJ0QmVnaW5GbXRzIixLMChrKSksW1s1LDhd'@;
put 'LFsyMywyNl0sWzQxLDQ0XSxbNTAsMzkyXV0uZm9yRWFjaChmdW5jdGlvbihHKXtmb3IodmFyIFE9R1swXTtRPD1HWzFdOysrUSludWxsIT1SW1FdJiZGcihTLCJCcnRGbXQiLFNDKFEsUltRXSkpfSksRnIoUywiQnJ0RW5kRm10cyIpKX19KGssUy5TU0YpLGZ1bmN0aW9uIEtWKFMsUil7dmFy'@;
put 'IGs9Ui5sZW5ndGg7MCE9ayYmKEZyKFMsIkJydEJlZ2luRm9udHMiLEswKGspKSxSLmZvckVhY2goZnVuY3Rpb24oRyl7RnIoUywiQnJ0Rm9udCIsZnVuY3Rpb24gVVYoUyxSKXtSfHwoUj1ibigxNTMpKSxSLndyaXRlX3NoaWZ0KDIsMjAqUy5zeiksZnVuY3Rpb24gZHYoUyxSKXtSfHwoUj1i'@;
put 'bigyKSksUi53cml0ZV9zaGlmdCgxLChTLml0YWxpYz8yOjApfChTLnN0cmlrZT84OjApfChTLm91dGxpbmU/MTY6MCl8KFMuc2hhZG93PzMyOjApfChTLmNvbmRlbnNlPzY0OjApfChTLmV4dGVuZD8xMjg6MCkpLFIud3JpdGVfc2hpZnQoMSwwKX0oUyxSKSxSLndyaXRlX3NoaWZ0KDIsUy5i'@;
put 'b2xkPzcwMDo0MDApO3ZhciBrPTA7InN1cGVyIj09Uy52YWxpZ24/az0xOiJzdWIiPT1TLnZhbGlnbiYmKGs9MiksUi53cml0ZV9zaGlmdCgyLGspLFIud3JpdGVfc2hpZnQoMSxTLnVuZGVybGluZXx8MCksUi53cml0ZV9zaGlmdCgxLFMuZmFtaWx5fHwwKSxSLndyaXRlX3NoaWZ0KDEsUy5j'@;
put 'aGFyc2V0fHwwKSxSLndyaXRlX3NoaWZ0KDEsMCksbWYoUy5jb2xvcixSKTt2YXIgRz0wO3JldHVybiJtYWpvciI9PVMuc2NoZW1lJiYoRz0xKSwibWlub3IiPT1TLnNjaGVtZSYmKEc9MiksUi53cml0ZV9zaGlmdCgxLEcpLEZjKFMubmFtZSxSKSxSLmxlbmd0aD5SLmw/Ui5zbGljZSgwLFIu'@;
put 'bCk6Un0oRykpfSksRnIoUywiQnJ0RW5kRm9udHMiKSl9KGssKFMuU3R5bGVzfHx7fSkuRm9udHN8fFtdKSxmdW5jdGlvbiBxVihTLFIpe3ZhciBrPVIubGVuZ3RoOzAhPWsmJihGcihTLCJCcnRCZWdpbkZpbGxzIixLMChrKSksUi5mb3JFYWNoKGZ1bmN0aW9uKEcpe0ZyKFMsIkJydEZpbGwi'@;
put 'LGZ1bmN0aW9uIGUxKFMsUil7Unx8KFI9Ym4oODQpKTt2YXIgaz1XVltTLnBhdHRlcm5UeXBlXTtudWxsPT1rJiYoaz00MCksUi53cml0ZV9zaGlmdCg0LGs9K2spO3ZhciBHPTA7aWYoNDAhPWspZm9yKG1mKFMuZmdDb2xvcnx8e2luZGV4OjY0fSxSKSxtZihTLmJnQ29sb3J8fHtpbmRleDo2'@;
put 'NX0sUik7RzwxMjsrK0cpUi53cml0ZV9zaGlmdCg0LDApO2Vsc2V7Zm9yKDtHPDQ7KytHKVIud3JpdGVfc2hpZnQoNCwwKTtmb3IoO0c8MTI7KytHKVIud3JpdGVfc2hpZnQoNCwwKX1yZXR1cm4gUi5sZW5ndGg+Ui5sP1Iuc2xpY2UoMCxSLmwpOlJ9KEcpKX0pLEZyKFMsIkJydEVuZEZpbGxz'@;
put 'IikpfShrLChTLlN0eWxlc3x8e30pLkZpbGxzfHxbXSksZnVuY3Rpb24gWFYoUyxSKXt2YXIgaz1SLmxlbmd0aDswIT1rJiYoRnIoUywiQnJ0QmVnaW5Cb3JkZXJzIixLMChrKSksUi5mb3JFYWNoKGZ1bmN0aW9uKEcpe0ZyKFMsIkJydEJvcmRlciIsZnVuY3Rpb24gQ2soUyxSKXtyZXR1cm4g'@;
put 'Unx8KFI9Ym4oNTEpKSxSLndyaXRlX3NoaWZ0KDEsMCksUjUoUy50b3AsUiksUjUoUy5ib3R0b20sUiksUjUoUy5sZWZ0LFIpLFI1KFMucmlnaHQsUiksUjUobnVsbCxSKSxSLmxlbmd0aD5SLmw/Ui5zbGljZSgwLFIubCk6Un0oRykpfSksRnIoUywiQnJ0RW5kQm9yZGVycyIpKX0oaywoUy5T'@;
put 'dHlsZXN8fHt9KS5Cb3JkZXJzfHxbXSksZnVuY3Rpb24gRWsoUyxSKXt2YXIgaz0xO2lmKFImJihrPVIubGVuZ3RoKSxGcihTLCJCcnRCZWdpbkNlbGxTdHlsZVhGcyIsSzAoaykpLEZyKFMsIkJydFhGIixqdSh7bnVtRm10SWQ6MCxmb250SWQ6MCxmaWxsSWQ6MCxib3JkZXJJZDowfSw2NTUz'@;
put 'NSkpLFIpZm9yKHZhciBHPTE7RzxSLmxlbmd0aDsrK0cpRnIoUywiQnJ0WEYiLGp1KHtudW1GbXRJZDpSW0ddLm51bUZtdElkfHwwLGZvbnRJZDpSW0ddLmZvbnRJZHx8MCxmaWxsSWQ6UltHXS5maWxsSWR8fDAsYm9yZGVySWQ6UltHXS5ib3JkZXJJZHx8MH0sNjU1MzUpKTtGcihTLCJCcnRF'@;
put 'bmRDZWxsU3R5bGVYRnMiKX0oayxSLmNlbGxTdHlsZVhmcyksZnVuY3Rpb24gVGsoUyxSKXtGcihTLCJCcnRCZWdpbkNlbGxYRnMiLEswKFIubGVuZ3RoKSksUi5mb3JFYWNoKGZ1bmN0aW9uKGspe0ZyKFMsIkJydFhGIixqdShrLDApKX0pLEZyKFMsIkJydEVuZENlbGxYRnMiKX0oayxSLmNl'@;
put 'bGxYZnMpLGZ1bmN0aW9uIEFrKFMsUil7dmFyIGs9MTtpZihSJiYoaz1SLmxlbmd0aCksRnIoUywiQnJ0QmVnaW5TdHlsZXMiLEswKGspKSxGcihTLCJCcnRTdHlsZSIsU2soe3hmSWQ6MCxidWlsdGluSWQ6MCxuYW1lOiJOb3JtYWwifSkpLFIpZm9yKHZhciBHPTE7RzxSLmxlbmd0aDsrK0cp'@;
put 'RnIoUywiQnJ0U3R5bGUiLFNrKHt4ZklkOkcsYnVpbHRpbklkOjAsbmFtZTpSW0ddLm5hbWV9KSk7RnIoUywiQnJ0RW5kU3R5bGVzIil9KGssUi5jZWxsU3R5bGVYZnMpLGZ1bmN0aW9uIEd2KFMpe0ZyKFMsIkJydEJlZ2luRFhGcyIsSzAoMCkpLEZyKFMsIkJydEVuZERYRnMiKX0oayksZnVu'@;
put 'Y3Rpb24ga2soUyl7RnIoUywiQnJ0QmVnaW5UYWJsZVN0eWxlcyIsZnVuY3Rpb24gTWsoUyxSLGspe3ZhciBHPWJuKDIwNTIpO3JldHVybiBHLndyaXRlX3NoaWZ0KDQsUykscGYoUixHKSxwZihrLEcpLEcubGVuZ3RoPkcubD9HLnNsaWNlKDAsRy5sKTpHfSgwLCJUYWJsZVN0eWxlTWVkaXVt'@;
put 'OSIsIlBpdm90U3R5bGVNZWRpdW00IikpLEZyKFMsIkJydEVuZFRhYmxlU3R5bGVzIil9KGspLEZyKGssIkJydEVuZFN0eWxlU2hlZXQiKSxrLmVuZCgpfUthLlRIRU1FPSJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBz'@;
put 'L3RoZW1lIjt2YXIgSWs9WyI8L2E6bHQxPiIsIjwvYTpkazE+IiwiPC9hOmx0Mj4iLCI8L2E6ZGsyPiIsIjwvYTphY2NlbnQxPiIsIjwvYTphY2NlbnQyPiIsIjwvYTphY2NlbnQzPiIsIjwvYTphY2NlbnQ0PiIsIjwvYTphY2NlbnQ1PiIsIjwvYTphY2NlbnQ2PiIsIjwvYTpobGluaz4iLCI8'@;
put 'L2E6Zm9sSGxpbms+Il07ZnVuY3Rpb24gUVYoUyxSLGspe1IudGhlbWVFbGVtZW50cy5jbHJTY2hlbWU9W107dmFyIEc9e307KFNbMF0ubWF0Y2goZW4pfHxbXSkuZm9yRWFjaChmdW5jdGlvbihRKXt2YXIgb2U9dnIoUSk7c3dpdGNoKG9lWzBdKXtjYXNlIjxhOmNsclNjaGVtZSI6Y2FzZSI8'@;
put 'L2E6Y2xyU2NoZW1lPiI6Y2FzZSI8L2E6c3JnYkNscj4iOmNhc2UiPC9hOnN5c0Nscj4iOmJyZWFrO2Nhc2UiPGE6c3JnYkNsciI6Ry5yZ2I9b2UudmFsO2JyZWFrO2Nhc2UiPGE6c3lzQ2xyIjpHLnJnYj1vZS5sYXN0Q2xyO2JyZWFrO2Nhc2UiPGE6ZGsxPiI6Y2FzZSI8L2E6ZGsxPiI6Y2Fz'@;
put 'ZSI8YTpsdDE+IjpjYXNlIjwvYTpsdDE+IjpjYXNlIjxhOmRrMj4iOmNhc2UiPC9hOmRrMj4iOmNhc2UiPGE6bHQyPiI6Y2FzZSI8L2E6bHQyPiI6Y2FzZSI8YTphY2NlbnQxPiI6Y2FzZSI8L2E6YWNjZW50MT4iOmNhc2UiPGE6YWNjZW50Mj4iOmNhc2UiPC9hOmFjY2VudDI+IjpjYXNlIjxh'@;
put 'OmFjY2VudDM+IjpjYXNlIjwvYTphY2NlbnQzPiI6Y2FzZSI8YTphY2NlbnQ0PiI6Y2FzZSI8L2E6YWNjZW50ND4iOmNhc2UiPGE6YWNjZW50NT4iOmNhc2UiPC9hOmFjY2VudDU+IjpjYXNlIjxhOmFjY2VudDY+IjpjYXNlIjwvYTphY2NlbnQ2PiI6Y2FzZSI8YTpobGluaz4iOmNhc2UiPC9h'@;
put 'OmhsaW5rPiI6Y2FzZSI8YTpmb2xIbGluaz4iOmNhc2UiPC9hOmZvbEhsaW5rPiI6Ii8iPT09b2VbMF0uY2hhckF0KDEpPyhSLnRoZW1lRWxlbWVudHMuY2xyU2NoZW1lW0lrLmluZGV4T2Yob2VbMF0pXT1HLEc9e30pOkcubmFtZT1vZVswXS5zbGljZSgzLG9lWzBdLmxlbmd0aC0xKTticmVh'@;
put 'aztkZWZhdWx0OmlmKGsmJmsuV1RGKXRocm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkICIrb2VbMF0rIiBpbiBjbHJTY2hlbWUiKX19KX1mdW5jdGlvbiBlQigpe31mdW5jdGlvbiB0Qigpe312YXIgbkI9LzxhOmNsclNjaGVtZShbXj5dKik+W1xzXFNdKjxcL2E6Y2xyU2NoZW1lPi8sUms9'@;
put 'LzxhOmZvbnRTY2hlbWUoW14+XSopPltcc1xTXSo8XC9hOmZvbnRTY2hlbWU+LyxzbmU9LzxhOmZtdFNjaGVtZShbXj5dKik+W1xzXFNdKjxcL2E6Zm10U2NoZW1lPi8sckI9LzxhOnRoZW1lRWxlbWVudHMoW14+XSopPltcc1xTXSo8XC9hOnRoZW1lRWxlbWVudHM+LztmdW5jdGlvbiBFQyhT'@;
put 'LFIpe2lmKCFTfHwwPT09Uy5sZW5ndGgpcmV0dXJuIEVDKGlCKCkpO3ZhciBrLEc9e307aWYoIShrPVMubWF0Y2gockIpKSl0aHJvdyBuZXcgRXJyb3IoInRoZW1lRWxlbWVudHMgbm90IGZvdW5kIGluIHRoZW1lIik7cmV0dXJuIGZ1bmN0aW9uIExrKFMsUixrKXt2YXIgRztSLnRoZW1lRWxl'@;
put 'bWVudHM9e30sW1siY2xyU2NoZW1lIixuQixRVl0sWyJmb250U2NoZW1lIixSayxlQl0sWyJmbXRTY2hlbWUiLHNuZSx0Ql1dLmZvckVhY2goZnVuY3Rpb24oUSl7aWYoIShHPVMubWF0Y2goUVsxXSkpKXRocm93IG5ldyBFcnJvcihRWzBdKyIgbm90IGZvdW5kIGluIHRoZW1lRWxlbWVudHMi'@;
put 'KTtRWzJdKEcsUixrKX0pfShrWzBdLEcsUiksRy5yYXc9UyxHfWZ1bmN0aW9uIGlCKFMsUil7aWYoUiYmUi50aGVtZVhMU1gpcmV0dXJuIFIudGhlbWVYTFNYO2lmKFMmJiJzdHJpbmciPT10eXBlb2YgUy5yYXcpcmV0dXJuIFMucmF3O3ZhciBrPVtJaV07cmV0dXJuIGtbay5sZW5ndGhdPSc8'@;
put 'YTp0aGVtZSB4bWxuczphPSJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvZHJhd2luZ21sLzIwMDYvbWFpbiIgbmFtZT0iT2ZmaWNlIFRoZW1lIj4nLGtbay5sZW5ndGhdPSI8YTp0aGVtZUVsZW1lbnRzPiIsa1trLmxlbmd0aF09JzxhOmNsclNjaGVtZSBuYW1lPSJPZmZpY2Ui'@;
put 'Picsa1trLmxlbmd0aF09JzxhOmRrMT48YTpzeXNDbHIgdmFsPSJ3aW5kb3dUZXh0IiBsYXN0Q2xyPSIwMDAwMDAiLz48L2E6ZGsxPicsa1trLmxlbmd0aF09JzxhOmx0MT48YTpzeXNDbHIgdmFsPSJ3aW5kb3ciIGxhc3RDbHI9IkZGRkZGRiIvPjwvYTpsdDE+JyxrW2subGVuZ3RoXT0nPGE6'@;
put 'ZGsyPjxhOnNyZ2JDbHIgdmFsPSIxRjQ5N0QiLz48L2E6ZGsyPicsa1trLmxlbmd0aF09JzxhOmx0Mj48YTpzcmdiQ2xyIHZhbD0iRUVFQ0UxIi8+PC9hOmx0Mj4nLGtbay5sZW5ndGhdPSc8YTphY2NlbnQxPjxhOnNyZ2JDbHIgdmFsPSI0RjgxQkQiLz48L2E6YWNjZW50MT4nLGtbay5sZW5n'@;
put 'dGhdPSc8YTphY2NlbnQyPjxhOnNyZ2JDbHIgdmFsPSJDMDUwNEQiLz48L2E6YWNjZW50Mj4nLGtbay5sZW5ndGhdPSc8YTphY2NlbnQzPjxhOnNyZ2JDbHIgdmFsPSI5QkJCNTkiLz48L2E6YWNjZW50Mz4nLGtbay5sZW5ndGhdPSc8YTphY2NlbnQ0PjxhOnNyZ2JDbHIgdmFsPSI4MDY0QTIi'@;
put 'Lz48L2E6YWNjZW50ND4nLGtbay5sZW5ndGhdPSc8YTphY2NlbnQ1PjxhOnNyZ2JDbHIgdmFsPSI0QkFDQzYiLz48L2E6YWNjZW50NT4nLGtbay5sZW5ndGhdPSc8YTphY2NlbnQ2PjxhOnNyZ2JDbHIgdmFsPSJGNzk2NDYiLz48L2E6YWNjZW50Nj4nLGtbay5sZW5ndGhdPSc8YTpobGluaz48'@;
put 'YTpzcmdiQ2xyIHZhbD0iMDAwMEZGIi8+PC9hOmhsaW5rPicsa1trLmxlbmd0aF09JzxhOmZvbEhsaW5rPjxhOnNyZ2JDbHIgdmFsPSI4MDAwODAiLz48L2E6Zm9sSGxpbms+JyxrW2subGVuZ3RoXT0iPC9hOmNsclNjaGVtZT4iLGtbay5sZW5ndGhdPSc8YTpmb250U2NoZW1lIG5hbWU9Ik9m'@;
put 'ZmljZSI+JyxrW2subGVuZ3RoXT0iPGE6bWFqb3JGb250PiIsa1trLmxlbmd0aF09JzxhOmxhdGluIHR5cGVmYWNlPSJDYW1icmlhIi8+JyxrW2subGVuZ3RoXT0nPGE6ZWEgdHlwZWZhY2U9IiIvPicsa1trLmxlbmd0aF09JzxhOmNzIHR5cGVmYWNlPSIiLz4nLGtbay5sZW5ndGhdPSc8YTpm'@;
put 'b250IHNjcmlwdD0iSnBhbiIgdHlwZWZhY2U9Ilx1ZmYyZFx1ZmYzMyBcdWZmMzBcdTMwYjRcdTMwYjdcdTMwYzNcdTMwYWYiLz4nLGtbay5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iSGFuZyIgdHlwZWZhY2U9Ilx1YjlkMVx1Yzc0MCBcdWFjZTBcdWI1MTUiLz4nLGtbay5sZW5ndGhdPSc8'@;
put 'YTpmb250IHNjcmlwdD0iSGFucyIgdHlwZWZhY2U9Ilx1NWI4Ylx1NGY1MyIvPicsa1trLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJIYW50IiB0eXBlZmFjZT0iXHU2NWIwXHU3ZDMwXHU2NjBlXHU5YWQ0Ii8+JyxrW2subGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IkFyYWIiIHR5cGVmYWNl'@;
put 'PSJUaW1lcyBOZXcgUm9tYW4iLz4nLGtbay5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iSGViciIgdHlwZWZhY2U9IlRpbWVzIE5ldyBSb21hbiIvPicsa1trLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJUaGFpIiB0eXBlZmFjZT0iVGFob21hIi8+JyxrW2subGVuZ3RoXT0nPGE6Zm9udCBz'@;
put 'Y3JpcHQ9IkV0aGkiIHR5cGVmYWNlPSJOeWFsYSIvPicsa1trLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJCZW5nIiB0eXBlZmFjZT0iVnJpbmRhIi8+JyxrW2subGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9Ikd1anIiIHR5cGVmYWNlPSJTaHJ1dGkiLz4nLGtbay5sZW5ndGhdPSc8YTpmb250'@;
put 'IHNjcmlwdD0iS2htciIgdHlwZWZhY2U9Ik1vb2xCb3JhbiIvPicsa1trLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJLbmRhIiB0eXBlZmFjZT0iVHVuZ2EiLz4nLGtbay5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iR3VydSIgdHlwZWZhY2U9IlJhYXZpIi8+JyxrW2subGVuZ3RoXT0nPGE6'@;
put 'Zm9udCBzY3JpcHQ9IkNhbnMiIHR5cGVmYWNlPSJFdXBoZW1pYSIvPicsa1trLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJDaGVyIiB0eXBlZmFjZT0iUGxhbnRhZ2VuZXQgQ2hlcm9rZWUiLz4nLGtbay5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iWWlpaSIgdHlwZWZhY2U9Ik1pY3Jvc29m'@;
put 'dCBZaSBCYWl0aSIvPicsa1trLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJUaWJ0IiB0eXBlZmFjZT0iTWljcm9zb2Z0IEhpbWFsYXlhIi8+JyxrW2subGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IlRoYWEiIHR5cGVmYWNlPSJNViBCb2xpIi8+JyxrW2subGVuZ3RoXT0nPGE6Zm9udCBzY3Jp'@;
put 'cHQ9IkRldmEiIHR5cGVmYWNlPSJNYW5nYWwiLz4nLGtbay5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iVGVsdSIgdHlwZWZhY2U9IkdhdXRhbWkiLz4nLGtbay5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iVGFtbCIgdHlwZWZhY2U9IkxhdGhhIi8+JyxrW2subGVuZ3RoXT0nPGE6Zm9udCBz'@;
put 'Y3JpcHQ9IlN5cmMiIHR5cGVmYWNlPSJFc3RyYW5nZWxvIEVkZXNzYSIvPicsa1trLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJPcnlhIiB0eXBlZmFjZT0iS2FsaW5nYSIvPicsa1trLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJNbHltIiB0eXBlZmFjZT0iS2FydGlrYSIvPicsa1trLmxl'@;
put 'bmd0aF09JzxhOmZvbnQgc2NyaXB0PSJMYW9vIiB0eXBlZmFjZT0iRG9rQ2hhbXBhIi8+JyxrW2subGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IlNpbmgiIHR5cGVmYWNlPSJJc2tvb2xhIFBvdGEiLz4nLGtbay5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iTW9uZyIgdHlwZWZhY2U9Ik1vbmdv'@;
put 'bGlhbiBCYWl0aSIvPicsa1trLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJWaWV0IiB0eXBlZmFjZT0iVGltZXMgTmV3IFJvbWFuIi8+JyxrW2subGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IlVpZ2giIHR5cGVmYWNlPSJNaWNyb3NvZnQgVWlnaHVyIi8+JyxrW2subGVuZ3RoXT0nPGE6Zm9u'@;
put 'dCBzY3JpcHQ9Ikdlb3IiIHR5cGVmYWNlPSJTeWxmYWVuIi8+JyxrW2subGVuZ3RoXT0iPC9hOm1ham9yRm9udD4iLGtbay5sZW5ndGhdPSI8YTptaW5vckZvbnQ+IixrW2subGVuZ3RoXT0nPGE6bGF0aW4gdHlwZWZhY2U9IkNhbGlicmkiLz4nLGtbay5sZW5ndGhdPSc8YTplYSB0eXBlZmFj'@;
put 'ZT0iIi8+JyxrW2subGVuZ3RoXT0nPGE6Y3MgdHlwZWZhY2U9IiIvPicsa1trLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJKcGFuIiB0eXBlZmFjZT0iXHVmZjJkXHVmZjMzIFx1ZmYzMFx1MzBiNFx1MzBiN1x1MzBjM1x1MzBhZiIvPicsa1trLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJI'@;
put 'YW5nIiB0eXBlZmFjZT0iXHViOWQxXHVjNzQwIFx1YWNlMFx1YjUxNSIvPicsa1trLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJIYW5zIiB0eXBlZmFjZT0iXHU1YjhiXHU0ZjUzIi8+JyxrW2subGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IkhhbnQiIHR5cGVmYWNlPSJcdTY1YjBcdTdkMzBc'@;
put 'dTY2MGVcdTlhZDQiLz4nLGtbay5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iQXJhYiIgdHlwZWZhY2U9IkFyaWFsIi8+JyxrW2subGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IkhlYnIiIHR5cGVmYWNlPSJBcmlhbCIvPicsa1trLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJUaGFpIiB0eXBl'@;
put 'ZmFjZT0iVGFob21hIi8+JyxrW2subGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IkV0aGkiIHR5cGVmYWNlPSJOeWFsYSIvPicsa1trLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJCZW5nIiB0eXBlZmFjZT0iVnJpbmRhIi8+JyxrW2subGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9Ikd1anIiIHR5'@;
put 'cGVmYWNlPSJTaHJ1dGkiLz4nLGtbay5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iS2htciIgdHlwZWZhY2U9IkRhdW5QZW5oIi8+JyxrW2subGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IktuZGEiIHR5cGVmYWNlPSJUdW5nYSIvPicsa1trLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJHdXJ1'@;
put 'IiB0eXBlZmFjZT0iUmFhdmkiLz4nLGtbay5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iQ2FucyIgdHlwZWZhY2U9IkV1cGhlbWlhIi8+JyxrW2subGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IkNoZXIiIHR5cGVmYWNlPSJQbGFudGFnZW5ldCBDaGVyb2tlZSIvPicsa1trLmxlbmd0aF09Jzxh'@;
put 'OmZvbnQgc2NyaXB0PSJZaWlpIiB0eXBlZmFjZT0iTWljcm9zb2Z0IFlpIEJhaXRpIi8+JyxrW2subGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IlRpYnQiIHR5cGVmYWNlPSJNaWNyb3NvZnQgSGltYWxheWEiLz4nLGtbay5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iVGhhYSIgdHlwZWZhY2U9'@;
put 'Ik1WIEJvbGkiLz4nLGtbay5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iRGV2YSIgdHlwZWZhY2U9Ik1hbmdhbCIvPicsa1trLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJUZWx1IiB0eXBlZmFjZT0iR2F1dGFtaSIvPicsa1trLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJUYW1sIiB0eXBl'@;
put 'ZmFjZT0iTGF0aGEiLz4nLGtbay5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iU3lyYyIgdHlwZWZhY2U9IkVzdHJhbmdlbG8gRWRlc3NhIi8+JyxrW2subGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9Ik9yeWEiIHR5cGVmYWNlPSJLYWxpbmdhIi8+JyxrW2subGVuZ3RoXT0nPGE6Zm9udCBzY3Jp'@;
put 'cHQ9Ik1seW0iIHR5cGVmYWNlPSJLYXJ0aWthIi8+JyxrW2subGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9Ikxhb28iIHR5cGVmYWNlPSJEb2tDaGFtcGEiLz4nLGtbay5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iU2luaCIgdHlwZWZhY2U9Iklza29vbGEgUG90YSIvPicsa1trLmxlbmd0aF09'@;
put 'JzxhOmZvbnQgc2NyaXB0PSJNb25nIiB0eXBlZmFjZT0iTW9uZ29saWFuIEJhaXRpIi8+JyxrW2subGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IlZpZXQiIHR5cGVmYWNlPSJBcmlhbCIvPicsa1trLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJVaWdoIiB0eXBlZmFjZT0iTWljcm9zb2Z0IFVp'@;
put 'Z2h1ciIvPicsa1trLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJHZW9yIiB0eXBlZmFjZT0iU3lsZmFlbiIvPicsa1trLmxlbmd0aF09IjwvYTptaW5vckZvbnQ+IixrW2subGVuZ3RoXT0iPC9hOmZvbnRTY2hlbWU+IixrW2subGVuZ3RoXT0nPGE6Zm10U2NoZW1lIG5hbWU9Ik9mZmljZSI+'@;
put 'JyxrW2subGVuZ3RoXT0iPGE6ZmlsbFN0eWxlTHN0PiIsa1trLmxlbmd0aF09JzxhOnNvbGlkRmlsbD48YTpzY2hlbWVDbHIgdmFsPSJwaENsciIvPjwvYTpzb2xpZEZpbGw+JyxrW2subGVuZ3RoXT0nPGE6Z3JhZEZpbGwgcm90V2l0aFNoYXBlPSIxIj4nLGtbay5sZW5ndGhdPSI8YTpnc0xz'@;
put 'dD4iLGtbay5sZW5ndGhdPSc8YTpncyBwb3M9IjAiPjxhOnNjaGVtZUNsciB2YWw9InBoQ2xyIj48YTp0aW50IHZhbD0iNTAwMDAiLz48YTpzYXRNb2QgdmFsPSIzMDAwMDAiLz48L2E6c2NoZW1lQ2xyPjwvYTpncz4nLGtbay5sZW5ndGhdPSc8YTpncyBwb3M9IjM1MDAwIj48YTpzY2hlbWVD'@;
put 'bHIgdmFsPSJwaENsciI+PGE6dGludCB2YWw9IjM3MDAwIi8+PGE6c2F0TW9kIHZhbD0iMzAwMDAwIi8+PC9hOnNjaGVtZUNscj48L2E6Z3M+JyxrW2subGVuZ3RoXT0nPGE6Z3MgcG9zPSIxMDAwMDAiPjxhOnNjaGVtZUNsciB2YWw9InBoQ2xyIj48YTp0aW50IHZhbD0iMTUwMDAiLz48YTpz'@;
put 'YXRNb2QgdmFsPSIzNTAwMDAiLz48L2E6c2NoZW1lQ2xyPjwvYTpncz4nLGtbay5sZW5ndGhdPSI8L2E6Z3NMc3Q+IixrW2subGVuZ3RoXT0nPGE6bGluIGFuZz0iMTYyMDAwMDAiIHNjYWxlZD0iMSIvPicsa1trLmxlbmd0aF09IjwvYTpncmFkRmlsbD4iLGtbay5sZW5ndGhdPSc8YTpncmFk'@;
put 'RmlsbCByb3RXaXRoU2hhcGU9IjEiPicsa1trLmxlbmd0aF09IjxhOmdzTHN0PiIsa1trLmxlbmd0aF09JzxhOmdzIHBvcz0iMCI+PGE6c2NoZW1lQ2xyIHZhbD0icGhDbHIiPjxhOnRpbnQgdmFsPSIxMDAwMDAiLz48YTpzaGFkZSB2YWw9IjEwMDAwMCIvPjxhOnNhdE1vZCB2YWw9IjEzMDAw'@;
put 'MCIvPjwvYTpzY2hlbWVDbHI+PC9hOmdzPicsa1trLmxlbmd0aF09JzxhOmdzIHBvcz0iMTAwMDAwIj48YTpzY2hlbWVDbHIgdmFsPSJwaENsciI+PGE6dGludCB2YWw9IjUwMDAwIi8+PGE6c2hhZGUgdmFsPSIxMDAwMDAiLz48YTpzYXRNb2QgdmFsPSIzNTAwMDAiLz48L2E6c2NoZW1lQ2xy'@;
put 'PjwvYTpncz4nLGtbay5sZW5ndGhdPSI8L2E6Z3NMc3Q+IixrW2subGVuZ3RoXT0nPGE6bGluIGFuZz0iMTYyMDAwMDAiIHNjYWxlZD0iMCIvPicsa1trLmxlbmd0aF09IjwvYTpncmFkRmlsbD4iLGtbay5sZW5ndGhdPSI8L2E6ZmlsbFN0eWxlTHN0PiIsa1trLmxlbmd0aF09IjxhOmxuU3R5'@;
put 'bGVMc3Q+IixrW2subGVuZ3RoXT0nPGE6bG4gdz0iOTUyNSIgY2FwPSJmbGF0IiBjbXBkPSJzbmciIGFsZ249ImN0ciI+PGE6c29saWRGaWxsPjxhOnNjaGVtZUNsciB2YWw9InBoQ2xyIj48YTpzaGFkZSB2YWw9Ijk1MDAwIi8+PGE6c2F0TW9kIHZhbD0iMTA1MDAwIi8+PC9hOnNjaGVtZUNs'@;
put 'cj48L2E6c29saWRGaWxsPjxhOnByc3REYXNoIHZhbD0ic29saWQiLz48L2E6bG4+JyxrW2subGVuZ3RoXT0nPGE6bG4gdz0iMjU0MDAiIGNhcD0iZmxhdCIgY21wZD0ic25nIiBhbGduPSJjdHIiPjxhOnNvbGlkRmlsbD48YTpzY2hlbWVDbHIgdmFsPSJwaENsciIvPjwvYTpzb2xpZEZpbGw+'@;
put 'PGE6cHJzdERhc2ggdmFsPSJzb2xpZCIvPjwvYTpsbj4nLGtbay5sZW5ndGhdPSc8YTpsbiB3PSIzODEwMCIgY2FwPSJmbGF0IiBjbXBkPSJzbmciIGFsZ249ImN0ciI+PGE6c29saWRGaWxsPjxhOnNjaGVtZUNsciB2YWw9InBoQ2xyIi8+PC9hOnNvbGlkRmlsbD48YTpwcnN0RGFzaCB2YWw9'@;
put 'InNvbGlkIi8+PC9hOmxuPicsa1trLmxlbmd0aF09IjwvYTpsblN0eWxlTHN0PiIsa1trLmxlbmd0aF09IjxhOmVmZmVjdFN0eWxlTHN0PiIsa1trLmxlbmd0aF09IjxhOmVmZmVjdFN0eWxlPiIsa1trLmxlbmd0aF09IjxhOmVmZmVjdExzdD4iLGtbay5sZW5ndGhdPSc8YTpvdXRlclNoZHcg'@;
put 'Ymx1clJhZD0iNDAwMDAiIGRpc3Q9IjIwMDAwIiBkaXI9IjU0MDAwMDAiIHJvdFdpdGhTaGFwZT0iMCI+PGE6c3JnYkNsciB2YWw9IjAwMDAwMCI+PGE6YWxwaGEgdmFsPSIzODAwMCIvPjwvYTpzcmdiQ2xyPjwvYTpvdXRlclNoZHc+JyxrW2subGVuZ3RoXT0iPC9hOmVmZmVjdExzdD4iLGtb'@;
put 'ay5sZW5ndGhdPSI8L2E6ZWZmZWN0U3R5bGU+IixrW2subGVuZ3RoXT0iPGE6ZWZmZWN0U3R5bGU+IixrW2subGVuZ3RoXT0iPGE6ZWZmZWN0THN0PiIsa1trLmxlbmd0aF09JzxhOm91dGVyU2hkdyBibHVyUmFkPSI0MDAwMCIgZGlzdD0iMjMwMDAiIGRpcj0iNTQwMDAwMCIgcm90V2l0aFNo'@;
put 'YXBlPSIwIj48YTpzcmdiQ2xyIHZhbD0iMDAwMDAwIj48YTphbHBoYSB2YWw9IjM1MDAwIi8+PC9hOnNyZ2JDbHI+PC9hOm91dGVyU2hkdz4nLGtbay5sZW5ndGhdPSI8L2E6ZWZmZWN0THN0PiIsa1trLmxlbmd0aF09IjwvYTplZmZlY3RTdHlsZT4iLGtbay5sZW5ndGhdPSI8YTplZmZlY3RT'@;
put 'dHlsZT4iLGtbay5sZW5ndGhdPSI8YTplZmZlY3RMc3Q+IixrW2subGVuZ3RoXT0nPGE6b3V0ZXJTaGR3IGJsdXJSYWQ9IjQwMDAwIiBkaXN0PSIyMzAwMCIgZGlyPSI1NDAwMDAwIiByb3RXaXRoU2hhcGU9IjAiPjxhOnNyZ2JDbHIgdmFsPSIwMDAwMDAiPjxhOmFscGhhIHZhbD0iMzUwMDAi'@;
put 'Lz48L2E6c3JnYkNscj48L2E6b3V0ZXJTaGR3Picsa1trLmxlbmd0aF09IjwvYTplZmZlY3RMc3Q+IixrW2subGVuZ3RoXT0nPGE6c2NlbmUzZD48YTpjYW1lcmEgcHJzdD0ib3J0aG9ncmFwaGljRnJvbnQiPjxhOnJvdCBsYXQ9IjAiIGxvbj0iMCIgcmV2PSIwIi8+PC9hOmNhbWVyYT48YTps'@;
put 'aWdodFJpZyByaWc9InRocmVlUHQiIGRpcj0idCI+PGE6cm90IGxhdD0iMCIgbG9uPSIwIiByZXY9IjEyMDAwMDAiLz48L2E6bGlnaHRSaWc+PC9hOnNjZW5lM2Q+JyxrW2subGVuZ3RoXT0nPGE6c3AzZD48YTpiZXZlbFQgdz0iNjM1MDAiIGg9IjI1NDAwIi8+PC9hOnNwM2Q+JyxrW2subGVu'@;
put 'Z3RoXT0iPC9hOmVmZmVjdFN0eWxlPiIsa1trLmxlbmd0aF09IjwvYTplZmZlY3RTdHlsZUxzdD4iLGtbay5sZW5ndGhdPSI8YTpiZ0ZpbGxTdHlsZUxzdD4iLGtbay5sZW5ndGhdPSc8YTpzb2xpZEZpbGw+PGE6c2NoZW1lQ2xyIHZhbD0icGhDbHIiLz48L2E6c29saWRGaWxsPicsa1trLmxl'@;
put 'bmd0aF09JzxhOmdyYWRGaWxsIHJvdFdpdGhTaGFwZT0iMSI+JyxrW2subGVuZ3RoXT0iPGE6Z3NMc3Q+IixrW2subGVuZ3RoXT0nPGE6Z3MgcG9zPSIwIj48YTpzY2hlbWVDbHIgdmFsPSJwaENsciI+PGE6dGludCB2YWw9IjQwMDAwIi8+PGE6c2F0TW9kIHZhbD0iMzUwMDAwIi8+PC9hOnNj'@;
put 'aGVtZUNscj48L2E6Z3M+JyxrW2subGVuZ3RoXT0nPGE6Z3MgcG9zPSI0MDAwMCI+PGE6c2NoZW1lQ2xyIHZhbD0icGhDbHIiPjxhOnRpbnQgdmFsPSI0NTAwMCIvPjxhOnNoYWRlIHZhbD0iOTkwMDAiLz48YTpzYXRNb2QgdmFsPSIzNTAwMDAiLz48L2E6c2NoZW1lQ2xyPjwvYTpncz4nLGtb'@;
put 'ay5sZW5ndGhdPSc8YTpncyBwb3M9IjEwMDAwMCI+PGE6c2NoZW1lQ2xyIHZhbD0icGhDbHIiPjxhOnNoYWRlIHZhbD0iMjAwMDAiLz48YTpzYXRNb2QgdmFsPSIyNTUwMDAiLz48L2E6c2NoZW1lQ2xyPjwvYTpncz4nLGtbay5sZW5ndGhdPSI8L2E6Z3NMc3Q+IixrW2subGVuZ3RoXT0nPGE6'@;
put 'cGF0aCBwYXRoPSJjaXJjbGUiPjxhOmZpbGxUb1JlY3QgbD0iNTAwMDAiIHQ9Ii04MDAwMCIgcj0iNTAwMDAiIGI9IjE4MDAwMCIvPjwvYTpwYXRoPicsa1trLmxlbmd0aF09IjwvYTpncmFkRmlsbD4iLGtbay5sZW5ndGhdPSc8YTpncmFkRmlsbCByb3RXaXRoU2hhcGU9IjEiPicsa1trLmxl'@;
put 'bmd0aF09IjxhOmdzTHN0PiIsa1trLmxlbmd0aF09JzxhOmdzIHBvcz0iMCI+PGE6c2NoZW1lQ2xyIHZhbD0icGhDbHIiPjxhOnRpbnQgdmFsPSI4MDAwMCIvPjxhOnNhdE1vZCB2YWw9IjMwMDAwMCIvPjwvYTpzY2hlbWVDbHI+PC9hOmdzPicsa1trLmxlbmd0aF09JzxhOmdzIHBvcz0iMTAw'@;
put 'MDAwIj48YTpzY2hlbWVDbHIgdmFsPSJwaENsciI+PGE6c2hhZGUgdmFsPSIzMDAwMCIvPjxhOnNhdE1vZCB2YWw9IjIwMDAwMCIvPjwvYTpzY2hlbWVDbHI+PC9hOmdzPicsa1trLmxlbmd0aF09IjwvYTpnc0xzdD4iLGtbay5sZW5ndGhdPSc8YTpwYXRoIHBhdGg9ImNpcmNsZSI+PGE6Zmls'@;
put 'bFRvUmVjdCBsPSI1MDAwMCIgdD0iNTAwMDAiIHI9IjUwMDAwIiBiPSI1MDAwMCIvPjwvYTpwYXRoPicsa1trLmxlbmd0aF09IjwvYTpncmFkRmlsbD4iLGtbay5sZW5ndGhdPSI8L2E6YmdGaWxsU3R5bGVMc3Q+IixrW2subGVuZ3RoXT0iPC9hOmZtdFNjaGVtZT4iLGtbay5sZW5ndGhdPSI8'@;
put 'L2E6dGhlbWVFbGVtZW50cz4iLGtbay5sZW5ndGhdPSI8YTpvYmplY3REZWZhdWx0cz4iLGtbay5sZW5ndGhdPSI8YTpzcERlZj4iLGtbay5sZW5ndGhdPSc8YTpzcFByLz48YTpib2R5UHIvPjxhOmxzdFN0eWxlLz48YTpzdHlsZT48YTpsblJlZiBpZHg9IjEiPjxhOnNjaGVtZUNsciB2YWw9'@;
put 'ImFjY2VudDEiLz48L2E6bG5SZWY+PGE6ZmlsbFJlZiBpZHg9IjMiPjxhOnNjaGVtZUNsciB2YWw9ImFjY2VudDEiLz48L2E6ZmlsbFJlZj48YTplZmZlY3RSZWYgaWR4PSIyIj48YTpzY2hlbWVDbHIgdmFsPSJhY2NlbnQxIi8+PC9hOmVmZmVjdFJlZj48YTpmb250UmVmIGlkeD0ibWlub3Ii'@;
put 'PjxhOnNjaGVtZUNsciB2YWw9Imx0MSIvPjwvYTpmb250UmVmPjwvYTpzdHlsZT4nLGtbay5sZW5ndGhdPSI8L2E6c3BEZWY+IixrW2subGVuZ3RoXT0iPGE6bG5EZWY+IixrW2subGVuZ3RoXT0nPGE6c3BQci8+PGE6Ym9keVByLz48YTpsc3RTdHlsZS8+PGE6c3R5bGU+PGE6bG5SZWYgaWR4'@;
put 'PSIyIj48YTpzY2hlbWVDbHIgdmFsPSJhY2NlbnQxIi8+PC9hOmxuUmVmPjxhOmZpbGxSZWYgaWR4PSIwIj48YTpzY2hlbWVDbHIgdmFsPSJhY2NlbnQxIi8+PC9hOmZpbGxSZWY+PGE6ZWZmZWN0UmVmIGlkeD0iMSI+PGE6c2NoZW1lQ2xyIHZhbD0iYWNjZW50MSIvPjwvYTplZmZlY3RSZWY+'@;
put 'PGE6Zm9udFJlZiBpZHg9Im1pbm9yIj48YTpzY2hlbWVDbHIgdmFsPSJ0eDEiLz48L2E6Zm9udFJlZj48L2E6c3R5bGU+JyxrW2subGVuZ3RoXT0iPC9hOmxuRGVmPiIsa1trLmxlbmd0aF09IjwvYTpvYmplY3REZWZhdWx0cz4iLGtbay5sZW5ndGhdPSI8YTpleHRyYUNsclNjaGVtZUxzdC8+'@;
put 'IixrW2subGVuZ3RoXT0iPC9hOnRoZW1lPiIsay5qb2luKCIiKX1mdW5jdGlvbiAkdihTKXt2YXIgUj1TLnJlYWRfc2hpZnQoMiksaz1TLnJlYWRfc2hpZnQoMiktNCxHPVtSXTtzd2l0Y2goUil7Y2FzZSA0OmNhc2UgNTpjYXNlIDc6Y2FzZSA4OmNhc2UgOTpjYXNlIDEwOmNhc2UgMTE6Y2Fz'@;
put 'ZSAxMzpHWzFdPWZ1bmN0aW9uIFRDKFMpe3ZhciBSPXt9O3N3aXRjaChSLnhjbHJUeXBlPVMucmVhZF9zaGlmdCgyKSxSLm5UaW50U2hhZGU9Uy5yZWFkX3NoaWZ0KDIpLFIueGNsclR5cGUpe2Nhc2UgMDpjYXNlIDQ6Uy5sKz00O2JyZWFrO2Nhc2UgMTpSLnhjbHJWYWx1ZT1mdW5jdGlvbiBv'@;
put 'QihTLFIpe3JldHVybiBJbihTLFIpfShTLDQpO2JyZWFrO2Nhc2UgMjpSLnhjbHJWYWx1ZT1NZihTKTticmVhaztjYXNlIDM6Ui54Y2xyVmFsdWU9ZnVuY3Rpb24gT2soUyl7cmV0dXJuIFMucmVhZF9zaGlmdCg0KX0oUyl9cmV0dXJuIFMubCs9OCxSfShTKTticmVhaztjYXNlIDY6R1sxXT1m'@;
put 'dW5jdGlvbiBZMyhTLFIpe3JldHVybiBJbihTLFIpfShTLGspO2JyZWFrO2Nhc2UgMTQ6Y2FzZSAxNTpHWzFdPVMucmVhZF9zaGlmdCgxPT09az8xOjIpO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJVbnJlY29nbml6ZWQgRXh0UHJvcCB0eXBlOiAiK1IrIiAiK2spfXJldHVybiBH'@;
put 'fWZ1bmN0aW9uIFBrKFMsUil7Ui5mb3JFYWNoKGZ1bmN0aW9uKGspe3N3aXRjaChrWzBdKXtjYXNlIDQ6Y2FzZSA1OmNhc2UgNjpjYXNlIDc6Y2FzZSA4OmNhc2UgOTpjYXNlIDEwOmNhc2UgMTE6Y2FzZSAxNDpjYXNlIDE1OmJyZWFrO2Nhc2UgMTM6Uy5mb250JiZTLmZvbnQuY29sb3ImJkFy'@;
put 'cmF5LmlzQXJyYXkoa1sxXS54Y2xyVmFsdWUpJiYoUy5mb250LmNvbG9yLnJnYj1oZChrWzFdLnhjbHJWYWx1ZSkpfX0pfWZ1bmN0aW9uIGlvKFMpe3JldHVybiBTLzkxNDQwMCpEZn1mdW5jdGlvbiBGayhTLFIpe3ZhciBrPXt9O2lmKFMucG9zKWsueD1pbyhTLnBvcy54KSxrLnk9aW8oUy5w'@;
put 'b3MueSk7ZWxzZXtpZighUy5mcm9tKXRocm93ImJhZCBhbmNob3Igc3RhcnQiO2sucj1TLmZyb20ucnx8MCxrLmM9Uy5mcm9tLmN8fDAsUy5mcm9tLmNPZmYmJihrLng9aW8oUy5mcm9tLmNPZmYpKSxTLmZyb20uck9mZiYmKGsueT1pbyhTLmZyb20uck9mZikpfWlmKFMuZXh0KWsudz1pbyhT'@;
put 'LmV4dC54KSxrLmg9aW8oUy5leHQueSk7ZWxzZXtpZighUy50byl0aHJvdyJiYWQgYW5jaG9yIGVuZCI7ay5DPVMudG8uYyxrLlI9Uy50by5yLFMudG8uY09mZiYmKGsuWD1pbyhTLnRvLmNPZmYpKSxTLnRvLnJPZmYmJihrLlk9aW8oUy50by5yT2ZmKSl9cmV0dXJuIGt9ZnVuY3Rpb24gTDUo'@;
put 'UyxSKXt2YXIgaz17eDotMSx5Oi0xLHc6LTEsaDotMX07aWYoUy5wb3Mpay54PWlvKFMucG9zLngpLGsueT1pbyhTLnBvcy55KTtlbHNle2lmKCFTLmZyb20pdGhyb3ciYmFkIGFuY2hvciBzdGFydCI7ay54PU81KFIsUy5mcm9tLmMsIkMiKStpbyhTLmZyb20uY09mZiksay55PU81KFIsUy5m'@;
put 'cm9tLnIsIlIiKStpbyhTLmZyb20uck9mZil9aWYoUy5leHQpay53PWlvKFMuZXh0LngpLGsuaD1pbyhTLmV4dC55KTtlbHNle2lmKCFTLnRvKXRocm93ImJhZCBhbmNob3IgZW5kIjtrLnc9TzUoUixTLnRvLmMsIkMiKStpbyhTLnRvLmNPZmYpLWsueCxrLmg9TzUoUixTLnRvLnIsIlIiKStp'@;
put 'byhTLnRvLnJPZmYpLWsueX1yZXR1cm4ga31mdW5jdGlvbiBBQyhTLFIpe3ZhciBrPXtyOi0xLGM6LTEseDotMSx5Oi0xLFI6LTEsQzotMSxYOi0xLFk6LTF9O3N3aXRjaChTLnR5cGUpe2Nhc2UidHdvQ2VsbEFuY2hvciI6ay5yPVMuZnJvbS5yLGsueT1pbyhTLmZyb20uck9mZiksay5SPVMu'@;
put 'dG8ucixrLlk9aW8oUy50by5yT2ZmKSxrLmM9Uy5mcm9tLmMsay54PWlvKFMuZnJvbS5jT2ZmKSxrLkM9Uy50by5jLGsuWD1pbyhTLnRvLmNPZmYpO2JyZWFrO2Nhc2Uib25lQ2VsbEFuY2hvciI6ay5yPVMuZnJvbS5yLGsueT1pbyhTLmZyb20uck9mZik7dmFyIEc9UmYoUixrLnIsay55K2lv'@;
put 'KFMuZXh0LnkpKTtrLlI9R1swXSxrLlk9R1sxXSxrLmM9Uy5mcm9tLmMsay54PWlvKFMuZnJvbS5jT2ZmKTt2YXIgUT1HMyhSLGsuYyxrLngraW8oUy5leHQueCkpO2suQz1RWzBdLGsuWD1RWzFdO2JyZWFrO2Nhc2UiYWJzb2x1dGVBbmNob3IiOnZhciBvZT1SZihSLDAsaW8oUy5wb3MueSkp'@;
put 'O2sucj1vZVswXSxrLnk9b2VbMV07dmFyIGdlPVJmKFIsay5yLGsueStpbyhTLmV4dC55KSk7ay5SPWdlWzBdLGsuWT1nZVsxXTt2YXIgcGU9UmYoUiwwLGlvKFMucG9zLngpKTtrLmM9cGVbMF0say54PXBlWzFdO3ZhciB5ZT1SZihSLGsuYyxrLngraW8oUy5leHQueCkpO2suQz15ZVswXSxr'@;
put 'Llg9eWVbMV07YnJlYWs7ZGVmYXVsdDp0aHJvdyJiYWQgYW5jaG9yIHR5cGUgIitTLnR5cGV9cmV0dXJuIGt9ZnVuY3Rpb24gSGsoUyxSKXt2YXIgaz1TLnRyaW0oKS5zcGxpdCgvXHMqLFxzKi8pO1JbIiFwb3MiXT17Yzora1swXSx4OitrWzFdLHI6K2tbMl0seTora1szXSxDOitrWzRdLFg6'@;
put 'K2tbNV0sUjora1s2XSxZOitrWzddfX1mdW5jdGlvbiBsQihTLFIsayl7dmFyIEc9LTE7aWYobnVsbCE9Uy5SfHxudWxsIT1TLkMpRz0wO2Vsc2V7aWYobnVsbD09Uy54fHxudWxsPT1TLnl8fG51bGw9PVMud3x8bnVsbD09Uy5oKXRocm93ImNhbm5vdCBwYXJzZSBhbmNob3IgIitKU09OLnN0'@;
put 'cmluZ2lmeShTKTtHPTErMiohKFMuY3x8Uy5yKX1pZihHIT1SKXtzd2l0Y2goUil7Y2FzZSAwOmNhc2UgMTppZigzIT1HKWJyZWFrO3ZhciBRPUczKGssUy5jfHwwLFMueHx8MCk7Uy5jPVFbMF0sUy54PVFbMV07dmFyIG9lPVJmKGssUy5yfHwwLFMueXx8MCk7Uy5yPW9lWzBdLFMueT1vZVsx'@;
put 'XTticmVhaztjYXNlIDM6aWYoMz09RylicmVhazt2YXIgZ2U9Uy5jfHwwLHBlPVMueHx8MDtkZWxldGUgUy5jLGRlbGV0ZSBTLngsUy54PShnZT9LdihrLGdlKTowKStwZTt2YXIgeWU9Uy5yfHwwLFBlPVMueXx8MDtkZWxldGUgUy5yLGRlbGV0ZSBTLnksUy55PSh5ZT9PNChrLHllKTowKStQ'@;
put 'ZTticmVhaztkZWZhdWx0OnRocm93ImNvbnZlcnRfYW5jaG9yIHVucmVjb2duaXplZCB0eXBlICIrUn1zd2l0Y2goUil7Y2FzZSAwOmlmKDA9PUcpYnJlYWs7dmFyIE5lPUczKGssUy5jfHwwLChTLnh8fDApK1Mudyk7ZGVsZXRlIFMudyxTLkM9TmVbMF0sUy5YPU5lWzFdO3ZhciBZZT1SZihr'@;
put 'LFMucnx8MCwoUy55fHwwKStTLmgpO2RlbGV0ZSBTLmgsUy5SPVllWzBdLFMuWT1ZZVsxXTticmVhaztjYXNlIDE6Y2FzZSAzOmlmKDAhPUcpYnJlYWs7dmFyIGV0PVMuQ3x8MCxjdD1TLlh8fDA7ZGVsZXRlIFMuQyxkZWxldGUgUy5YLFMudz1LdihrLGV0KStjdC0oUy5jP0t2KGssUy5jKTow'@;
put 'KS0oUy54fHwwKTt2YXIgRXQ9Uy5SfHwwLGF0PVMuWXx8MDtkZWxldGUgUy5SLGRlbGV0ZSBTLlksUy5oPU80KGssRXQpK2F0LShTLnI/TzQoayxTLnIpOjApLShTLnl8fDApO2JyZWFrO2RlZmF1bHQ6dGhyb3ciY29udmVydF9hbmNob3IgdW5yZWNvZ25pemVkIHR5cGUgIitSfX19ZnVuY3Rp'@;
put 'b24gY0IoUyl7dmFyIFI9W1MuY3x8MCxNYXRoLnJvdW5kKFMueHx8MCksUy5yfHwwLE1hdGgucm91bmQoUy55fHwwKV07cmV0dXJuKFI9Ui5jb25jYXQoUy5oJiZTLnc/W1JbMF0sTWF0aC5yb3VuZChSWzFdK1MudyksUlsyXSxNYXRoLnJvdW5kKFJbM10rUy5oKV06W1MuQ3x8MCxNYXRoLnJv'@;
put 'dW5kKFMuWHx8MCksUy5SfHwwLE1hdGgucm91bmQoUy5ZfHwwKV0pKS5qb2luKCIsICIpfWZ1bmN0aW9uIE80KFMsUil7aWYoIVMpcmV0dXJuIDA7Zm9yKHZhciBrPTA7LS1SPj0wOyl7dmFyIEc9KChTWyIhcm93cyJdfHxbXSlbUl18fHt9KS5ocHg7bnVsbD09RyYmKEc9KChTWyIhc2hlZXRG'@;
put 'b3JtYXQiXXx8e30pLnJvd3x8e30pLmhweCksbnVsbD09RyYmKEc9MjQpLGsrPUd9cmV0dXJuIGt9ZnVuY3Rpb24gS3YoUyxSKXtpZighUylyZXR1cm4gMDtmb3IodmFyIGs9MDstLVI+PTA7KXt2YXIgRz0oKFNbIiFjb2xzIl18fFtdKVtSXXx8e30pLndweDtpZihudWxsPT1HJiYoRz0oKFNb'@;
put 'IiFzaGVldEZvcm1hdCJdfHx7fSkuY29sfHx7fSkud3B4KSxudWxsPT1HKXt2YXIgUT17d2NoOjguNDN9O1EwKFEpLFNbIiFjb2xzIl0mJihTWyIhY29scyJdW1JdPVEpLEc9US53cHh9ays9R31yZXR1cm4ga31mdW5jdGlvbiBPNShTLFIsayl7cmV0dXJuIkMiPT1rP0t2KFMsUik6TzQoUyxS'@;
put 'KX1mdW5jdGlvbiBSZihTLFIsayl7dmFyIEc9W1Isa107aWYoIVMpcmV0dXJuIEc7Zm9yKDs7KXt2YXIgUT0oU1siIXJvd3MiXXx8W10pW0dbMF1dfHx7fTtpZihRLmhpZGRlbikrK0dbMF07ZWxzZXt2YXIgb2U9US5ocHg7aWYobnVsbD09b2UmJihvZT0oKFNbIiFzaGVldEZvcm1hdCJdfHx7'@;
put 'fSkucm93fHx7fSkuaHB4KSxudWxsPT1vZSYmKG9lPXNoKDE1KSksR1sxXTxvZSlicmVhaztHWzBdKyssR1sxXS09b2V9fXJldHVybiBHfWZ1bmN0aW9uIEczKFMsUixrKXt2YXIgRz1bUixrXTtpZighUylyZXR1cm4gRztmb3IoOzspe3ZhciBRPShTWyIhY29scyJdfHxbXSlbR1swXV18fHt9'@;
put 'O2lmKFEuaGlkZGVufHwwPT09US53cHgpKytHWzBdO2Vsc2V7dmFyIG9lPVEud3B4O2lmKG51bGw9PW9lJiYob2U9KChTWyIhc2hlZXRGb3JtYXQiXXx8e30pLmNvbHx8e30pLndweCksbnVsbD09b2Upe3ZhciBnZT17d2NoOjguNDN9O1EwKGdlKSxTWyIhY29scyJdJiYoU1siIWNvbHMiXVtH'@;
put 'WzBdXT1nZSksb2U9Z2Uud3B4fWlmKEdbMV08b2UpYnJlYWs7R1swXSsrLEdbMV0tPW9lfX1yZXR1cm4gR31mdW5jdGlvbiBQMChTKXtyZXR1cm4oIjAwMDAwMCIrKCJudW1iZXIiPT10eXBlb2YgUz9TLnRvU3RyaW5nKDE2KTpTKSkuc2xpY2UoLTYpfWZ1bmN0aW9uIGdkKFMsUixrKXt2YXIg'@;
put 'Rz0ic3RyaW5nIj09dHlwZW9mIFI/ISFrOiEhUjsic3RyaW5nIiE9dHlwZW9mIFImJihSPSJjb2xvciIpO3ZhciBRPSI8IitSKyIgIjtyZXR1cm4gUy5hdXRvP1ErJ2F1dG89IjEiLz4nOlMuaW5kZXgmJm51bGw9PVMucmdiP1ErJ2luZGV4ZWQ9IicrUy5pbmRleCsnIi8+JzpudWxsIT1TLnRo'@;
put 'ZW1lP1ErJ3RoZW1lPSInK1MudGhlbWUrJyInKyhTLnRpbnQ/JyB0aW50PSInK1MudGludCsnIic6IiIpKyIvPiI6bnVsbCE9Uy5yZ2I/USsncmdiPSInKyhHPyJGRiI6IiIpK1AwKFMucmdiKSsnIi8+JzpRKyIvPiJ9ZnVuY3Rpb24gUDQoUyxSKXtpZighU3x8bnVsbD09Uy5yZ2IpcmV0dXJu'@;
put 'IFI7Zm9yKHZhciBrPSgiMDAwMDAwIitTLnJnYi50b1N0cmluZygxNikpLnNsaWNlKC02KSxHPVtrLnNsaWNlKDAsMiksay5zbGljZSgyLDQpLGsuc2xpY2UoNCw2KV0ubWFwKGZ1bmN0aW9uKGdlKXtyZXR1cm4gcGFyc2VJbnQoZ2UsMTYpfSksUT0wO1E8cjAubGVuZ3RoOysrUSl7dmFyIG9l'@;
put 'PXIwW1FdO2lmKG9lWzBdPT1HWzBdJiZvZVsxXT09R1sxXSYmb2VbMl09PUdbMl0pcmV0dXJuIFF9cmV0dXJuIHIwLmxlbmd0aDw2ND8ocjAucHVzaChbR1swXSxHWzFdLEdbMl1dKSxyMC5sZW5ndGgtMSk6Un1mdW5jdGlvbiB0MShTKXt2YXIgUj1bIiIsIiIsIiJdO2lmKCFTKXJldHVybltd'@;
put 'O3ZhciBrPSIiLEc9UyYmUy5zP2Z1bmN0aW9uIHF2KFMpe3ZhciBSPVsiIiwiIl07aWYoIVMpcmV0dXJuIFI7aWYoUy5zeiYmKFJbMF0rPSImIitTLnN6LFJbMV09IiYxMiIrUlsxXSksUy5uYW1lJiYoUlswXSs9JyYiJytTLm5hbWUrJyxSZWd1bGFyIicsUlsxXT0nJiItLFJlZ3VsYXIiJytS'@;
put 'WzFdKSxTLmJvbGQmJihSWzBdKz0iJkIiLFJbMV09IiZCIitSWzFdKSxTLnVuZGVybGluZSl7dmFyIGs9Mj09Uy51bmRlcmxpbmU/IiZFIjoiJlUiO1JbMF0rPWssUlsxXT1rK1JbMV19cmV0dXJuIFMuaXRhbGljJiYoUlswXSs9IiZJIixSWzFdPSImSSIrUlsxXSksUy5jb2xvciYmbnVsbCE9'@;
put 'Uy5jb2xvci5yZ2ImJihSWzBdKz0iJksiK1AwKFMuY29sb3IucmdiKSxSWzFdKz0iJkswMDAwMDAiKSxTLnN0cmlrZSYmKFJbMF0rPSImUyIsUlsxXT0iJlMiK1JbMV0pLCJzdXBlciI9PVMudmFsaWduJiYoUlswXSs9IiZYIixSWzFdPSImWCIrUlsxXSksInN1YiI9PVMudmFsaWduJiYoUlsw'@;
put 'XSs9IiZZIixSWzFdPSImWSIrUlsxXSksUn0oUy5zKTpbIiIsIiJdO3JldHVybiJzdHJpbmciPT10eXBlb2YgUz9bUyxTLFNdOm51bGwhPVMuZmlyc3R8fG51bGwhPVMuZXZlbnx8bnVsbCE9Uy5vZGQ/KG51bGwhPVMub2RkJiYoUlswXT10MShTLm9kZClbMF0pLHZvaWQgMD09PVMuZmlyc3Qm'@;
put 'JlJbMF0mJihSWzFdPVJbMF0pLG51bGwhPVMuZmlyc3QmJihSWzFdPXQxKFMuZmlyc3QpWzBdKSxudWxsIT1TLmV2ZW4mJihSWzJdPXQxKFMuZXZlbilbMF0pLFIpOlMubGVmdHx8Uy5jZW50ZXJ8fFMucmlnaHQ/KFMubGVmdCYmKGsrPSImTCIrdDEoUy5sZWZ0KVswXSksUy5jZW50ZXImJihr'@;
put 'Kz0iJkMiK3QxKFMuY2VudGVyKVswXSksUy5yaWdodCYmKGsrPSImUiIrdDEoUy5yaWdodClbMF0pLFtrLGssa10pOm51bGwhPVMudj9baz1HWzBdK1Mudi5yZXBsYWNlKC8mL2csIiYmIikrR1sxXSxrLGtdOm51bGwhPVMudz9baz1HWzBdK1MudytHWzFdLGssa106QXJyYXkuaXNBcnJheShT'@;
put 'LlIpPyhTLlIuZm9yRWFjaChmdW5jdGlvbihRKXtrKz10MShRKVswXX0pLFtrLGssa10pOltdfXZhciBuOD17MToiTGV0dGVyIiwzOiJUYWJsb2lkIiw1OiJMZWdhbCIsNzoiRXhlY3V0aXZlIiw4OiJBMyIsOToiQTQiLDExOiJBNSIsMTI6IkI0IiwxMzoiQjUiLDE0OiJGb2xpbyIsMjA6IkVu'@;
put 'dmVsb3BlIiwzNzoiTW9uYXJjaCIsNzA6IkE2In0sdUI9VmUobjgpO0thLkNPTk49Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L3JlbGF0aW9uc2hpcHMvY29ubmVjdGlvbnMiO3ZhciBoQj1QcigiZXh0ZXJuYWxMaW5rIixudWxsLHt4bWxu'@;
put 'czpZaS5tYWluWzBdfSk7S2EuSU1HPSJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL2ltYWdlIixLYS5EUkFXPSJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxh'@;
put 'dGlvbnNoaXBzL2RyYXdpbmciO3ZhciBwQj17dDoidG9wIixjdHI6ImNlbnRlciIsYjoiYm90dG9tIixqdXN0OiJ0b3AiLGRpc3Q6InRvcCJ9LFA1PXtjdHI6ImNlbnRlciIsZGlzdDoiY2VudGVyIixqdXN0OiJjZW50ZXIiLGp1c3RMb3c6ImNlbnRlciIsbDoibGVmdCIscjoicmlnaHQiLHRo'@;
put 'YWlEaXN0OiJjZW50ZXIifTtmdW5jdGlvbiBtQigpe3ZhciBTPVtJaV07cmV0dXJuIFMucHVzaCgnPHhkcjp3c0RyIHhtbG5zOnhkcj0iaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL2RyYXdpbmdtbC8yMDA2L3NwcmVhZHNoZWV0RHJhd2luZyIgeG1sbnM6YT0iaHR0cDovL3Nj'@;
put 'aGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL2RyYXdpbmdtbC8yMDA2L21haW4iLz4nKSxTLmpvaW4oIiIpfWZ1bmN0aW9uIGNuZShTKXt2YXIgayxSPVNbIiFkYXRhIl07cmV0dXJuImJhc2U2NCI9PT1TWyIhZGF0YXR5cGUiXT8oKGs9Ui5tYXRjaCgvXmRhdGE6LiosLykpJiYoUj1SLnNsaWNl'@;
put 'KGtbMF0ubGVuZ3RoKSksX2UuZGVjb2RlKFIpKTpSfUthLlRBQkxFPSJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL3RhYmxlIjt2YXIgYkI9LzwoPzpcdys6KT9zaGFwZSg/OlteXHddW14+XSopPz4oW1xzXFNdKj8p'@;
put 'PFwvKD86XHcrOik/c2hhcGU+L2c7ZnVuY3Rpb24gT0MoUyxSLGssRyl7dmFyIFE9WzIxNjAwLDIxNjAwXSxvZT1bIm0wLDBsMCIsUVsxXSxRWzBdLFFbMV0sUVswXSwiMHhlIl0uam9pbigiLCIpLGdlPVtQcigieG1sIixudWxsLHsieG1sbnM6diI6eWwudiwieG1sbnM6byI6eWwubywieG1s'@;
put 'bnM6eCI6eWwueCwieG1sbnM6bXYiOnlsLm12fSkucmVwbGFjZSgvXC8+LywiPiIpLFByKCJvOnNoYXBlbGF5b3V0IixQcigibzppZG1hcCIsbnVsbCx7InY6ZXh0IjoiZWRpdCJ9KSx7InY6ZXh0IjoiZWRpdCJ9KV0scGU9MTAyNCpTLHllPWt8fFtdO3llLmxlbmd0aD4wJiZnZS5wdXNoKFBy'@;
put 'KCJ2OnNoYXBldHlwZSIsW1ByKCJ2OnN0cm9rZSIsbnVsbCx7am9pbnN0eWxlOiJtaXRlciJ9KSxQcigidjpwYXRoIixudWxsLHtzaGFkb3dvazoiZiIsZXh0cnVzaW9ub2s6ImYiLHN0cm9rZW9rOiJmIixmaWxsb2s6ImYiLCJvOmNvbm5lY3R0eXBlIjoicmVjdCJ9KSxQcigibzpsb2NrIixu'@;
put 'dWxsLHsidjpleHQiOiJlZGl0IixzaGFwZXR5cGU6InQifSldLmpvaW4oIiIpLHtpZDoiX3gwMDAwX3QyMDEiLGNvb3Jkc2l6ZTpRLmpvaW4oIiwiKSwibzpzcHQiOjIwMSxwYXRoOm9lfSkpLHllLmZvckVhY2goZnVuY3Rpb24oTmUpeysrcGUsZ2U9Z2UuY29uY2F0KGZ1bmN0aW9uIGk4KFMs'@;
put 'Uil7dmFyIGs9e2lkOiJfeDAwMDBfcyIrUix0eXBlOiIjX3gwMDAwX3QyMDEiLHN0eWxlOiJtc28td3JhcC1zdHlsZTp0aWdodCJ9OygiUmFkaW8iPT1TWyIhdHlwZSJdfHwiQ2hlY2tib3giPT1TWyIhdHlwZSJdfHwiTGlzdCI9PVNbIiF0eXBlIl18fCJEcm9wIj09U1siIXR5cGUiXSkmJihr'@;
put 'LnN0cm9rZWQ9ImYiKSwiTGFiZWwiPT1TWyIhdHlwZSJdJiYoay5maWxsZWQ9ImYiKTt2YXIgRz0iIjtTLnQmJlBDW1NbIiF0eXBlIl1dJiYoRz1QQ1tTWyIhdHlwZSJdXS5yZXBsYWNlKC8jIyMjLyxMcihTLnQpKSk7dmFyIFE9W107cmV0dXJuIFMubWFjcm8mJlEucHVzaChIYSgieDpGbWxh'@;
put 'TWFjcm8iLFMubWFjcm8pKSxTLmxpbmsmJlEucHVzaChIYSgieDpGbWxhTGluayIsUy5saW5rKSksUy52YWwmJlEucHVzaChIYSgiUmFkaW8iPT1TWyIhdHlwZSJdfHwiQ2hlY2tib3giPT1TWyIhdHlwZSJdPyJ4OkNoZWNrZWQiOiJ4OlZhbCIsU3RyaW5nKFMudmFsKSkpLFMucmVmJiZRLnB1'@;
put 'c2goSGEoIng6Rm1sYVJhbmdlIixTLnJlZikpLFMuc2VsJiYiTGlzdCI9PVNbIiF0eXBlIl0mJlEucHVzaChIYSgieDpTZWxUeXBlIixTLnNlbCkpLFMubWluJiZRLnB1c2goSGEoIng6TWluIixTdHJpbmcoUy5taW4pKSksUy5tYXgmJlEucHVzaChIYSgieDpNYXgiLFN0cmluZyhTLm1heCkp'@;
put 'KSxTLnN0ZXAmJlEucHVzaChIYSgieDpJbmMiLFN0cmluZyhTLnN0ZXApKSksUy5wYWdlJiZRLnB1c2goSGEoIng6UGFnZSIsU3RyaW5nKFMucGFnZSkpKSxbXS5jb25jYXQoWyI8djpzaGFwZSIrTHUoaykrIj4iXSkuY29uY2F0KEZDW1NbIiF0eXBlIl1dfHxbXSkuY29uY2F0KFtHXSkuY29u'@;
put 'Y2F0KFsnPHg6Q2xpZW50RGF0YSBPYmplY3RUeXBlPSInK1NbIiF0eXBlIl0rJyI+JyxIYSgieDpBbmNob3IiLGNCKFNbIiFwb3MiXSkpLEhhKCJ4OlByaW50T2JqZWN0IiwiRmFsc2UiKV0pLmNvbmNhdChRKS5jb25jYXQoeUJbU1siIXR5cGUiXV18fFtdKS5jb25jYXQoWyI8L3g6Q2xpZW50'@;
put 'RGF0YT4iLCI8L3Y6c2hhcGU+Il0pfShOZSxwZSkpfSk7dmFyIFBlPVJ8fFtdO3JldHVybiBQZS5sZW5ndGg+MCYmZ2UucHVzaChQcigidjpzaGFwZXR5cGUiLFtQcigidjpzdHJva2UiLG51bGwse2pvaW5zdHlsZToibWl0ZXIifSksUHIoInY6cGF0aCIsbnVsbCx7Z3JhZGllbnRzaGFwZW9r'@;
put 'OiJ0Iiwibzpjb25uZWN0dHlwZSI6InJlY3QifSldLmpvaW4oIiIpLHtpZDoiX3gwMDAwX3QyMDIiLGNvb3Jkc2l6ZTpRLmpvaW4oIiwiKSwibzpzcHQiOjIwMixwYXRoOm9lfSkpLFBlLmZvckVhY2goZnVuY3Rpb24oTmUpeysrcGUsZ2U9Z2UuY29uY2F0KGZ1bmN0aW9uIEp2KFMsUixrKXt2'@;
put 'YXIgRz1ObyhTWzBdKSxRPVNbMV0uZmlsbHx8e307U1sxXS5zJiYoUT17dHlwZTpTWzFdLnMucGF0dGVyblR5cGV8fCJzb2xpZCJ9LFNbMV0ucy5mZ0NvbG9yJiYoUS5jb2xvcjI9US5jb2xvcjE9IiMiK1AwKFNbMV0ucy5mZ0NvbG9yLnJnYikpLFNbMV0ucy5iZ0NvbG9yJiYoUS5jb2xvcjI9'@;
put 'IiMiK1AwKFNbMV0ucy5iZ0NvbG9yLnJnYikpKTt2YXIgb2U9e2NvbG9yMjpRLmNvbG9yMnx8IiNCRUZGODIiLHR5cGU6US50eXBlfHwiZ3JhZGllbnQifTsiZ3JhZGllbnQiPT1vZS50eXBlJiYob2UuYW5nbGU9Ii0xODAiKTt2YXIgZ2U9ImdyYWRpZW50Ij09b2UudHlwZT9QcigibzpmaWxs'@;
put 'IixudWxsLHt0eXBlOiJncmFkaWVudFVuc2NhbGVkIiwidjpleHQiOiJ2aWV3In0pOm51bGwscGU9UHIoInY6ZmlsbCIsZ2Usb2UpLHllPXt9O1NbMV0uc2hhZG93JiYoU1sxXS5zaGFkb3cuY29sb3ImJih5ZS5jb2xvcj1TWzFdLnNoYWRvdy5jb2xvciksU1sxXS5zaGFkb3cub24mJih5ZS5v'@;
put 'bj1TWzFdLnNoYWRvdy5vbikpLHllLm9ic2N1cmVkPSJ0Ijt2YXIgUGU9ITAsTmU9ITAsWWU9U1sxXVsiIXBvcyJdP3F0KFNbMV1bIiFwb3MiXSk6bnVsbDtyZXR1cm4gWWUmJihOZT1udWxsPT1ZZS5SJiZudWxsPT1ZZS5DJiZudWxsPT1ZZS5YJiZudWxsPT1ZZS5ZLFBlPSFZZS5yJiYhWWUu'@;
put 'YyxsQihZZSwwLGspKSxbIjx2OnNoYXBlIitMdSh7aWQ6Il94MDAwMF9zIitSLHR5cGU6IiNfeDAwMDBfdDIwMiIsc3R5bGU6InBvc2l0aW9uOmFic29sdXRlOyBtYXJnaW4tbGVmdDo4MHB0O21hcmdpbi10b3A6NXB0O3dpZHRoOjEwNHB0O2hlaWdodDo2NHB0O3otaW5kZXg6MTAiKyhTWzFd'@;
put 'LmhpZGRlbj8iO3Zpc2liaWxpdHk6aGlkZGVuIjoiIiksZmlsbGNvbG9yOlEuY29sb3IxfHwiI0VDRkFENCIsc3Ryb2tlY29sb3I6KFNbMV0uc3Ryb2tlfHx7fSkuY29sb3J8fCIjZWRlYWExIn0pKyI+IixwZSxQcigidjpzaGFkb3ciLG51bGwseWUpLFByKCJ2OnBhdGgiLG51bGwseyJvOmNv'@;
put 'bm5lY3R0eXBlIjoibm9uZSJ9KSwnPHY6dGV4dGJveD48ZGl2IHN0eWxlPSJ0ZXh0LWFsaWduOmxlZnQiPjwvZGl2Pjwvdjp0ZXh0Ym94PicsJzx4OkNsaWVudERhdGEgT2JqZWN0VHlwZT0iTm90ZSI+JyxQZT8iPHg6TW92ZVdpdGhDZWxscy8+IjoiIixOZT8iPHg6U2l6ZVdpdGhDZWxscy8+'@;
put 'IjoiIixIYSgieDpBbmNob3IiLFllP2NCKFllKTpTWzFdLnJhd2FuY2hvcnx8W0cuYysxLDAsRy5yKzEsMCxHLmMrMywyMCxHLnIrNSwyMF0uam9pbigiLCIpKSxIYSgieDpBdXRvRmlsbCIsIkZhbHNlIiksSGEoIng6Um93IixTdHJpbmcoRy5yKSksSGEoIng6Q29sdW1uIixTdHJpbmcoRy5j'@;
put 'KSksU1sxXS5oaWRkZW4/IiI6Ijx4OlZpc2libGUvPiIsIjwveDpDbGllbnREYXRhPiIsIjwvdjpzaGFwZT4iXX0oTmUscGUsRykpfSksZ2UucHVzaCgiPC94bWw+IiksZ2Uuam9pbigiIil9dmFyIHlCPXtCdXR0b246WyI8eDpBdXRvRmlsbD5GYWxzZTwveDpBdXRvRmlsbD4iLCI8eDpUZXh0'@;
put 'SEFsaWduPkNlbnRlcjwveDpUZXh0SEFsaWduPiIsIjx4OlRleHRWQWxpZ24+Q2VudGVyPC94OlRleHRWQWxpZ24+Il0sR0JveDpbIjx4OlNpemVXaXRoQ2VsbHMvPiIsIjx4OkF1dG9GaWxsPkZhbHNlPC94OkF1dG9GaWxsPiIsIjx4Ok5vVGhyZWVELz4iXSxMYWJlbDpbIjx4OkF1dG9GaWxs'@;
put 'PkZhbHNlPC94OkF1dG9GaWxsPiIsIjx4OkF1dG9MaW5lPkZhbHNlPC94OkF1dG9MaW5lPiJdLFJhZGlvOlsiPHg6U2l6ZVdpdGhDZWxscy8+IiwiPHg6QXV0b0ZpbGw+RmFsc2U8L3g6QXV0b0ZpbGw+IiwiPHg6QXV0b0xpbmU+RmFsc2U8L3g6QXV0b0xpbmU+IiwiPHg6VGV4dFZBbGlnbj5D'@;
put 'ZW50ZXI8L3g6VGV4dFZBbGlnbj4iLCI8eDpOb1RocmVlRC8+Il0sQ2hlY2tib3g6WyI8eDpTaXplV2l0aENlbGxzLz4iLCI8eDpBdXRvRmlsbD5GYWxzZTwveDpBdXRvRmlsbD4iLCI8eDpBdXRvTGluZT5GYWxzZTwveDpBdXRvTGluZT4iLCI8eDpUZXh0VkFsaWduPkNlbnRlcjwveDpUZXh0'@;
put 'VkFsaWduPiIsIjx4Ok5vVGhyZWVELz4iXSxEcm9wOlsiPHg6U2l6ZVdpdGhDZWxscy8+IiwiPHg6QXV0b0xpbmU+RmFsc2U8L3g6QXV0b0xpbmU+IiwiPHg6Tm9UaHJlZUQyLz4iLCI8eDpTZWxUeXBlPlNpbmdsZTwveDpTZWxUeXBlPiIsIjx4OkRyb3BTdHlsZT5Db21ibzwveDpEcm9wU3R5'@;
put 'bGU+IiwiPHg6TENUPk5vcm1hbDwveDpMQ1Q+IiwiPHg6RHJvcExpbmVzPjQ8L3g6RHJvcExpbmVzPiJdLExpc3Q6WyI8eDpTaXplV2l0aENlbGxzLz4iLCI8eDpBdXRvTGluZT5GYWxzZTwveDpBdXRvTGluZT4iLCI8eDpOb1RocmVlRDIvPiIsIjx4OkxDVD5Ob3JtYWw8L3g6TENUPiIsIjx4'@;
put 'OlZhbD4wPC94OlZhbD4iLCI8eDpNaW4+MDwveDpNaW4+IiwiPHg6TWF4PjU8L3g6TWF4PiIsIjx4OkluYz4xPC94OkluYz4iLCI8eDpQYWdlPjQ8L3g6UGFnZT4iLCI8eDpEeD4xNTwveDpEeD4iXSxTY3JvbGw6WyI8eDpTaXplV2l0aENlbGxzLz4iLCI8eDpIb3Jpei8+IiwiPHg6RHg+MTU8'@;
put 'L3g6RHg+Il0sU3BpbjpbIjx4OkR4PjE1PC94OkR4PiJdfSxQQz17QnV0dG9uOiI8djp0ZXh0Ym94IHN0eWxlPSdtc28tZGlyZWN0aW9uLWFsdDphdXRvJyBvOnNpbmdsZWNsaWNrPSdmJz48ZGl2IHN0eWxlPSd0ZXh0LWFsaWduOmNlbnRlcic+PGZvbnQgZmFjZT0nQ2FsaWJyaScgc2l6ZT0n'@;
put 'MjQwJyBjb2xvcj0nIzAwMDAwMCc+IyMjIzwvZm9udD48L2Rpdj48L3Y6dGV4dGJveD4iLEdCb3g6Ijx2OnRleHRib3ggc3R5bGU9J21zby1kaXJlY3Rpb24tYWx0OmF1dG8nIG86c2luZ2xlY2xpY2s9J2YnPjxkaXYgc3R5bGU9J3RleHQtYWxpZ246bGVmdCc+PGZvbnQgZmFjZT0nTHVjaWRh'@;
put 'IEdyYW5kZScgc2l6ZT0nMjYwJyBjb2xvcj0nIzAwMDAwMCc+IyMjIzwvZm9udD48L2Rpdj48L3Y6dGV4dGJveD4iLFJhZGlvOiI8djp0ZXh0Ym94IHN0eWxlPSdtc28tZGlyZWN0aW9uLWFsdDphdXRvJyBvOnNpbmdsZWNsaWNrPSdmJz48ZGl2IHN0eWxlPSd0ZXh0LWFsaWduOmxlZnQnPjxm'@;
put 'b250IGZhY2U9J0x1Y2lkYSBHcmFuZGUnIHNpemU9JzI2MCcgY29sb3I9J2F1dG8nPiMjIyM8L2ZvbnQ+PC9kaXY+PC92OnRleHRib3g+IixMYWJlbDoiPHY6dGV4dGJveCBzdHlsZT0nbXNvLWRpcmVjdGlvbi1hbHQ6YXV0bycgbzpzaW5nbGVjbGljaz0nZic+PGRpdiBzdHlsZT0ndGV4dC1h'@;
put 'bGlnbjpsZWZ0Jz48Zm9udCBmYWNlPSdMdWNpZGEgR3JhbmRlJyBzaXplPScyNjAnIGNvbG9yPScjMDAwMDAwJz4jIyMjPC9mb250PjwvZGl2Pjwvdjp0ZXh0Ym94PiIsQ2hlY2tib3g6Ijx2OnRleHRib3ggc3R5bGU9J21zby1kaXJlY3Rpb24tYWx0OmF1dG8nIG86c2luZ2xlY2xpY2s9J2Yn'@;
put 'PjxkaXYgc3R5bGU9J3RleHQtYWxpZ246bGVmdCc+PGZvbnQgZmFjZT0nTHVjaWRhIEdyYW5kZScgc2l6ZT0nMjYwJyBjb2xvcj0nIzAwMDAwMCc+IyMjIzwvZm9udD48L2Rpdj48L3Y6dGV4dGJveD4iLHNoZWV0anM6ImRhZnVxIn0sRkM9e0J1dHRvbjpbJzx2OmZpbGwgY29sb3IyPSIjZjBm'@;
put 'MGYwIFs2N10iIG86ZGV0ZWN0bW91c2VjbGljaz0idCIvPicsJzxvOmxvY2sgdjpleHQ9ImVkaXQiIHJvdGF0aW9uPSJ0Ii8+J10sR0JveDpbJzxvOmxvY2sgdjpleHQ9ImVkaXQiIHJvdGF0aW9uPSJ0Ii8+J10sRHJvcDpbJzxvOmxvY2sgdjpleHQ9ImVkaXQiIHJvdGF0aW9uPSJ0IiB0ZXh0'@;
put 'PSJ0Ii8+J10sTGlzdDpbJzxvOmxvY2sgdjpleHQ9ImVkaXQiIHJvdGF0aW9uPSJ0IiB0ZXh0PSJ0Ii8+J10sU3BpbjpbJzxvOmxvY2sgdjpleHQ9ImVkaXQiIHJvdGF0aW9uPSJ0IiB0ZXh0PSJ0Ii8+J10sU2Nyb2xsOlsnPG86bG9jayB2OmV4dD0iZWRpdCIgcm90YXRpb249InQiIHRleHQ9'@;
put 'InQiLz4nXSxMYWJlbDpbJzxvOmxvY2sgdjpleHQ9ImVkaXQiIHJvdGF0aW9uPSJ0Ii8+J10sUmFkaW86Wyc8djpwYXRoIHNoYWRvd29rPSJ0IiBzdHJva2Vvaz0idCIgZmlsbG9rPSJ0Ii8+JywnPG86bG9jayB2OmV4dD0iZWRpdCIgcm90YXRpb249InQiLz4nXSxDaGVja2JveDpbJzx2OnBh'@;
put 'dGggc2hhZG93b2s9InQiIHN0cm9rZW9rPSJ0IiBmaWxsb2s9InQiLz4nLCc8bzpsb2NrIHY6ZXh0PSJlZGl0IiByb3RhdGlvbj0idCIvPiddLHNoZWV0anM6W119O2Z1bmN0aW9uIEJrKFMsUixrLEcpe3ZhciBRPXsiIWlkIjp7fX0sb2U9W1ByKCJ4bWwiLG51bGwseyJ4bWxuczp2Ijp5bC52'@;
put 'LCJ4bWxuczpvIjp5bC5vLCJ4bWxuczp4Ijp5bC54fSkucmVwbGFjZSgvXC8+LywiPiIpLFByKCJvOnNoYXBlbGF5b3V0IixQcigibzppZG1hcCIsbnVsbCx7InY6ZXh0IjoiZWRpdCIsZGF0YToxfSkseyJ2OmV4dCI6ImVkaXQifSksJzx2OnNoYXBldHlwZSBpZD0iX3gwMDAwX3Q3NSIgY29v'@;
put 'cmRzaXplPSIyMTYwMCwyMTYwMCIgbzpzcHQ9Ijc1IiBvOnByZWZlcnJlbGF0aXZlPSJ0IiBwYXRoPSJtQDRANWxANEAxMUA5QDExQDlANXhlIiBmaWxsZWQ9ImYiIHN0cm9rZWQ9ImYiPicsJzx2OnN0cm9rZSBqb2luc3R5bGU9Im1pdGVyIi8+JywiPHY6Zm9ybXVsYXM+IiwnPHY6ZiBlcW49'@;
put 'ImlmIGxpbmVEcmF3biBwaXhlbExpbmVXaWR0aCAwIi8+JywnPHY6ZiBlcW49InN1bSBAMCAxIDAiLz4nLCc8djpmIGVxbj0ic3VtIDAgMCBAMSIvPicsJzx2OmYgZXFuPSJwcm9kIEAyIDEgMiIvPicsJzx2OmYgZXFuPSJwcm9kIEAzIDIxNjAwIHBpeGVsV2lkdGgiLz4nLCc8djpmIGVxbj0i'@;
put 'cHJvZCBAMyAyMTYwMCBwaXhlbEhlaWdodCIvPicsJzx2OmYgZXFuPSJzdW0gQDAgMCAxIi8+JywnPHY6ZiBlcW49InByb2QgQDYgMSAyIi8+JywnPHY6ZiBlcW49InByb2QgQDcgMjE2MDAgcGl4ZWxXaWR0aCIvPicsJzx2OmYgZXFuPSJzdW0gQDggMjE2MDAgMCIvPicsJzx2OmYgZXFuPSJw'@;
put 'cm9kIEA3IDIxNjAwIHBpeGVsSGVpZ2h0Ii8+JywnPHY6ZiBlcW49InN1bSBAMTAgMjE2MDAgMCIvPicsIjwvdjpmb3JtdWxhcz4iLCc8djpwYXRoIG86ZXh0cnVzaW9ub2s9ImYiIGdyYWRpZW50c2hhcGVvaz0idCIgbzpjb25uZWN0dHlwZT0icmVjdCIvPicsJzxvOmxvY2sgdjpleHQ9ImVk'@;
put 'aXQiIGFzcGVjdHJhdGlvPSJ0Ii8+JywiPC92OnNoYXBldHlwZT4iXSxnZT0xO1siaGVhZGVyIiwiZm9vdGVyIl0uZm9yRWFjaChmdW5jdGlvbihwZSl7R1twZV0mJlsib2RkIiwiZXZlbiIsImZpcnN0Il0uZm9yRWFjaChmdW5jdGlvbih5ZSl7R1twZV1beWVdJiZbImxlZnQiLCJyaWdodCIs'@;
put 'ImNlbnRlciJdLmZvckVhY2goZnVuY3Rpb24oUGUpe2lmKEFycmF5LmlzQXJyYXkoR1twZV1beWVdW1BlXSkpZm9yKHZhciBOZT0wO05lPEdbcGVdW3llXVtQZV0ubGVuZ3RoOysrTmUpaWYoR1twZV1beWVdW1BlXVtOZV0pe3ZhciBZZT1HW3BlXVt5ZV1bUGVdW05lXTtpZigicmVtb3RlIj09'@;
put 'WWVbIiFkYXRhdHlwZSJdKXRocm93IkNhbm5vdCB1c2UgbGlua2VkIGltYWdlIGluIGhlYWRlciBvciBmb290ZXIiO2Zvcig7cmkoUywieGwvbWVkaWEvaW1hZ2UiK2dlKyIuanBnIik7KSsrZ2U7Uy5maWxlKCJ4bC9tZWRpYS9pbWFnZSIrZ2UrIi5qcGciLGNuZShZZSkse2JpbmFyeTohMH0p'@;
put 'LEVyKFEsLTEsIi4uL21lZGlhL2ltYWdlIitnZSsiLmpwZyIsS2EuSU1HKTt2YXIgZXQ9Il94MDAwMF9zIisoMTAyNStZZS5fY250KSxjdD0icG9zaXRpb246YWJzb2x1dGU7bWFyZ2luLWxlZnQ6MDttYXJnaW4tdG9wOjA7ei1pbmRleDoiKyhZZS5fY250KzEpKyI7IjtjdCs9IndpZHRoOiIr'@;
put 'WWVbIiFwb3MiXS53KyJweDsiLGN0Kz0iaGVpZ2h0OiIrWWVbIiFwb3MiXS5oKyJweDsiO3ZhciBFdD1QZS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKStwZS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKTsib2RkIiE9PXllJiYoRXQrPXllLnRvVXBwZXJDYXNlKCkpLEdbcGVdW3llXVtQZV0ubGVu'@;
put 'Z3RoPjEmJihFdCs9TmUpLG9lLnB1c2goUHIoInY6c2hhcGUiLFsnPHY6aW1hZ2VkYXRhIG86cmVsaWQ9InJJZCcrKFllLl9jbnQrMSkrJyIgbzp0aXRsZT0ic2hlZXRqcyIvPicsJzxvOmxvY2sgdjpleHQ9ImVkaXQiIHJvdGF0aW9uPSJ0Ii8+J10uam9pbigiIikse2lkOkV0LCJvOnNwaWQi'@;
put 'OmV0LHR5cGU6IiNfeDAwMDBfdDc1IixzdHlsZTpjdH0pKX19KX0pfSksb2UucHVzaCgiPC94bWw+IiksUy5maWxlKCJ4bC9kcmF3aW5ncy92bWxEcmF3aW5nIitrKyJIRi52bWwiLG9lLmpvaW4oIiIpKSxTLmZpbGUoInhsL2RyYXdpbmdzL19yZWxzL3ZtbERyYXdpbmciK2srIkhGLnZtbC5y'@;
put 'ZWxzIixraShRKSl9S2EuQ01OVD0iaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlwcy9jb21tZW50cyI7dmFyIFF2PVByKCJjb21tZW50cyIsbnVsbCx7eG1sbnM6WWkubWFpblswXX0pO2Z1bmN0aW9uIEhDKFMpe3ZhciBS'@;
put 'PVtJaSxRdl0saz1bXTtyZXR1cm4gUi5wdXNoKCI8YXV0aG9ycz4iKSxTLmZvckVhY2goZnVuY3Rpb24oRyl7R1sxXS5mb3JFYWNoKGZ1bmN0aW9uKFEpe3ZhciBvZT1McihRLmEpO2suaW5kZXhPZihvZSk+LTF8fChrLnB1c2gob2UpLFIucHVzaCgiPGF1dGhvcj4iK29lKyI8L2F1dGhvcj4i'@;
put 'KSl9KX0pLFIucHVzaCgiPC9hdXRob3JzPiIpLFIucHVzaCgiPGNvbW1lbnRMaXN0PiIpLFMuZm9yRWFjaChmdW5jdGlvbihHKXtHWzFdLmZvckVhY2goZnVuY3Rpb24oUSl7Ui5wdXNoKCc8Y29tbWVudCByZWY9IicrR1swXSsnIiBhdXRob3JJZD0iJytrLmluZGV4T2YoTHIoUS5hKSkrJyI+'@;
put 'PHRleHQ+JyksUi5wdXNoKFEuUj9RcyhRLlIpOkhhKCJ0IixudWxsPT1RLnQ/IiI6THIoUS50KSkpLFIucHVzaCgiPC90ZXh0PjwvY29tbWVudD4iKX0pfSksUi5wdXNoKCI8L2NvbW1lbnRMaXN0PiIpLFIubGVuZ3RoPjImJihSW1IubGVuZ3RoXT0iPC9jb21tZW50cz4iLFJbMV09UlsxXS5y'@;
put 'ZXBsYWNlKCIvPiIsIj4iKSksUi5qb2luKCIiKX12YXIgd0I9Z3U7ZnVuY3Rpb24gTkMoUyl7dmFyIFI9YmkoKSxrPVtdO3JldHVybiBGcihSLCJCcnRCZWdpbkNvbW1lbnRzIiksRnIoUiwiQnJ0QmVnaW5Db21tZW50QXV0aG9ycyIpLFMuZm9yRWFjaChmdW5jdGlvbihHKXtHWzFdLmZvckVh'@;
put 'Y2goZnVuY3Rpb24oUSl7ay5pbmRleE9mKFEuYSk+LTF8fChrLnB1c2goUS5hLnNsaWNlKDAsNTQpKSxGcihSLCJCcnRDb21tZW50QXV0aG9yIixmdW5jdGlvbiB1bmUoUyl7cmV0dXJuIEZjKFMuc2xpY2UoMCw1NCkpfShRLmEpKSl9KX0pLEZyKFIsIkJydEVuZENvbW1lbnRBdXRob3JzIiks'@;
put 'RnIoUiwiQnJ0QmVnaW5Db21tZW50TGlzdCIpLFMuZm9yRWFjaChmdW5jdGlvbihHKXtHWzFdLmZvckVhY2goZnVuY3Rpb24oUSl7US5pYXV0aG9yPWsuaW5kZXhPZihRLmEpO3ZhciBvZT17czpObyhHWzBdKSxlOk5vKEdbMF0pfTtGcihSLCJCcnRCZWdpbkNvbW1lbnQiLGZ1bmN0aW9uIF9C'@;
put 'KFMsUil7cmV0dXJuIG51bGw9PVImJihSPWJuKDM2KSksUi53cml0ZV9zaGlmdCg0LFNbMV0uaWF1dGhvciksZ2YoU1swXSxSKSxSLndyaXRlX3NoaWZ0KDQsMCksUi53cml0ZV9zaGlmdCg0LDApLFIud3JpdGVfc2hpZnQoNCwwKSxSLndyaXRlX3NoaWZ0KDQsMCksUn0oW29lLFFdKSksUS50'@;
put 'JiZRLnQubGVuZ3RoPjAmJkZyKFIsIkJydENvbW1lbnRUZXh0IixmdW5jdGlvbiBuaChTLFIpe3ZhciBrPSExO3JldHVybiBudWxsPT1SJiYoaz0hMCxSPWJuKDIzKzQqUy50Lmxlbmd0aCkpLFIud3JpdGVfc2hpZnQoMSwxKSxGYyhTLnQsUiksUi53cml0ZV9zaGlmdCg0LDEpLGZ1bmN0aW9u'@;
put 'IGN2KFMsUil7Unx8KFI9Ym4oNCkpLFIud3JpdGVfc2hpZnQoMixTLmljaHx8MCksUi53cml0ZV9zaGlmdCgyLFMuaWZudHx8MCl9KHtpY2g6MCxpZm50OjB9LFIpLGs/Ui5zbGljZSgwLFIubCk6Un0oUSkpLEZyKFIsIkJydEVuZENvbW1lbnQiKSxkZWxldGUgUS5pYXV0aG9yfSl9KSxGcihS'@;
put 'LCJCcnRFbmRDb21tZW50TGlzdCIpLEZyKFIsIkJydEVuZENvbW1lbnRzIiksUi5lbmQoKX12YXIgVWs9ImFwcGxpY2F0aW9uL3ZuZC5tcy1vZmZpY2UudmJhUHJvamVjdCIsWWs9WyJ4bHNiIiwieGxzbSIsInhsYW0iLCJiaWZmOCIsInhsYSJdO0thLkRTPSJodHRwOi8vc2NoZW1hcy5vcGVu'@;
put 'eG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL2RpYWxvZ3NoZWV0IixLYS5NUz0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9vZmZpY2UvMjAwNi9yZWxhdGlvbnNoaXBzL3hsTWFjcm9zaGVldCI7dmFyIEg1PWZ1bmN0aW9uKCl7dmFyIFM9Lyhe'@;
put 'fFteQS1aYS16X10pUihcWz8tP1xkK1xdfFsxLTldXGQqfClDKFxbPy0/XGQrXF18WzEtOV1cZCp8KSg/IVtBLVphLXowLTlfXSkvZyxSPXtyOjAsYzowfTtmdW5jdGlvbiBrKEcsUSxvZSxnZSl7dmFyIHBlPSExLHllPSExOzA9PW9lLmxlbmd0aD95ZT0hMDoiWyI9PW9lLmNoYXJBdCgwKSYm'@;
put 'KHllPSEwLG9lPW9lLnNsaWNlKDEsLTEpKSwwPT1nZS5sZW5ndGg/cGU9ITA6IlsiPT1nZS5jaGFyQXQoMCkmJihwZT0hMCxnZT1nZS5zbGljZSgxLC0xKSk7dmFyIFBlPW9lLmxlbmd0aD4wPzB8cGFyc2VJbnQob2UsMTApOjAsTmU9Z2UubGVuZ3RoPjA/MHxwYXJzZUludChnZSwxMCk6MDty'@;
put 'ZXR1cm4gcGU/TmUrPVIuYzotLU5lLHllP1BlKz1SLnI6LS1QZSxRKyhwZT8iIjoiJCIpK1RhKE5lKSsoeWU/IiI6IiQiKStqaShQZSl9cmV0dXJuIGZ1bmN0aW9uKFEsb2Upe3JldHVybiBSPW9lLFEucmVwbGFjZShTLGspfX0oKSxtMj0vKF58W14uX0EtWjAtOV0pKFskXT8pKFtBLVpdezEs'@;
put 'Mn18W0EtV11bQS1aXXsyfXxYW0EtRV1bQS1aXXxYRltBLURdKShbJF0/KSgxMFswLTNdXGR7NH18MTA0WzAtN11cZHszfXwxMDQ4WzAtNF1cZHsyfXwxMDQ4NVswLTZdXGR8MTA0ODU3WzAtNl18WzEtOV1cZHswLDV9KSg/IVtfLlwoQS1aYS16MC05XSkvZyxIND1mdW5jdGlvbigpe3JldHVy'@;
put 'biBmdW5jdGlvbihSLGspe3JldHVybiBSLnJlcGxhY2UobTIsZnVuY3Rpb24oRyxRLG9lLGdlLHBlLHllKXt2YXIgUGU9Q2EoZ2UpLShvZT8wOmsuYyksTmU9X28oeWUpLShwZT8wOmsucik7cmV0dXJuIFErIlIiKygwPT1OZT8iIjpwZT9OZSsxOiJbIitOZSsiXSIpKyJDIisoMD09UGU/IiI6'@;
put 'b2U/UGUrMToiWyIrUGUrIl0iKX0pfX0oKTtmdW5jdGlvbiBHayhTLFIpe3JldHVybiBTLnJlcGxhY2UobTIsZnVuY3Rpb24oayxHLFEsb2UsZ2UscGUpe3JldHVybiBHKygiJCI9PVE/UStvZTpUYShDYShvZSkrUi5jKSkrKCIkIj09Z2U/Z2UrcGU6amkoX28ocGUpK1IucikpfSkucmVwbGFj'@;
put 'ZSgvKFxkKyk6KFxkKykvZyxmdW5jdGlvbihrLEcsUSl7cmV0dXJuIGppKF9vKEcpK1IucikrIjoiK2ppKF9vKFEpK1Iucil9KX1mdW5jdGlvbiBkbmUoUyxSLGspe3ZhciBRPU1zKFIpLnMsb2U9Tm8oayk7cmV0dXJuIEdrKFMse3I6b2Uuci1RLnIsYzpvZS5jLVEuY30pfWZ1bmN0aW9uIEVC'@;
put 'KFMpe3JldHVybiBTLnJlcGxhY2UoL194bGZuXC4vZywiIil9ZnVuY3Rpb24gYnUoUyl7Uy5sKz0xfWZ1bmN0aW9uIE40KFMsUil7dmFyIGs9Uy5yZWFkX3NoaWZ0KDE9PVI/MToyKTtyZXR1cm5bMTYzODMmayxrPj4xNCYxLGs+PjE1JjFdfWZ1bmN0aW9uIFZDKFMsUixrKXt2YXIgRz0yO2lm'@;
put 'KGspe2lmKGsuYmlmZj49MiYmay5iaWZmPD01KXJldHVybiAkayhTKTsxMj09ay5iaWZmJiYoRz00KX12YXIgUT1TLnJlYWRfc2hpZnQoRyksb2U9Uy5yZWFkX3NoaWZ0KEcpLGdlPU40KFMsMikscGU9TjQoUywyKTtyZXR1cm57czp7cjpRLGM6Z2VbMF0sY1JlbDpnZVsxXSxyUmVsOmdlWzJd'@;
put 'fSxlOntyOm9lLGM6cGVbMF0sY1JlbDpwZVsxXSxyUmVsOnBlWzJdfX19ZnVuY3Rpb24gJGsoUyl7dmFyIFI9TjQoUywyKSxrPU40KFMsMiksRz1TLnJlYWRfc2hpZnQoMSksUT1TLnJlYWRfc2hpZnQoMSk7cmV0dXJue3M6e3I6UlswXSxjOkcsY1JlbDpSWzFdLHJSZWw6UlsyXX0sZTp7cjpr'@;
put 'WzBdLGM6USxjUmVsOmtbMV0sclJlbDprWzJdfX19ZnVuY3Rpb24gS2soUyxSLGspe2lmKGsmJmsuYmlmZj49MiYmay5iaWZmPD01KXJldHVybiBmdW5jdGlvbiBBQihTKXt2YXIgUj1ONChTLDIpLGs9Uy5yZWFkX3NoaWZ0KDEpO3JldHVybntyOlJbMF0sYzprLGNSZWw6UlsxXSxyUmVsOlJb'@;
put 'Ml19fShTKTt2YXIgRz1TLnJlYWRfc2hpZnQoayYmMTI9PWsuYmlmZj80OjIpLFE9TjQoUywyKTtyZXR1cm57cjpHLGM6UVswXSxjUmVsOlFbMV0sclJlbDpRWzJdfX1mdW5jdGlvbiBCQyhTKXt2YXIgUj1TLnJlYWRfc2hpZnQoMiksaz1TLnJlYWRfc2hpZnQoMik7cmV0dXJue3I6UixjOjI1'@;
put 'NSZrLGZRdW90ZWQ6ISEoMTYzODQmayksY1JlbDprPj4xNSxyUmVsOms+PjE1fX1mdW5jdGlvbiBlRChTKXtyZXR1cm5bUy5yZWFkX3NoaWZ0KDEpLFMucmVhZF9zaGlmdCgxKV19ZnVuY3Rpb24gWkMoUyxSKXt2YXIgaz1bUy5yZWFkX3NoaWZ0KDEpXTtpZigxMj09Uilzd2l0Y2goa1swXSl7'@;
put 'Y2FzZSAyOmtbMF09NDticmVhaztjYXNlIDQ6a1swXT0xNjticmVhaztjYXNlIDA6a1swXT0xO2JyZWFrO2Nhc2UgMTprWzBdPTJ9c3dpdGNoKGtbMF0pe2Nhc2UgNDprWzFdPXVvKFMsMSk/IlRSVUUiOiJGQUxTRSIsMTIhPVImJihTLmwrPTcpO2JyZWFrO2Nhc2UgMzc6Y2FzZSAxNjprWzFd'@;
put 'PU1jW1NbUy5sXV0sUy5sKz0xMj09Uj80Ojg7YnJlYWs7Y2FzZSAwOlMubCs9ODticmVhaztjYXNlIDE6a1sxXT1QbChTKTticmVhaztjYXNlIDI6a1sxXT1YMChTLDAse2JpZmY6Uj4wJiZSPDg/MjpSfSk7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIkJhZCBTZXJBcjogIitrWzBd'@;
put 'KX1yZXR1cm4ga31mdW5jdGlvbiBpRChTLFIsayl7Zm9yKHZhciBHPVMucmVhZF9zaGlmdCgxMj09ay5iaWZmPzQ6MiksUT1bXSxvZT0wO29lIT1HOysrb2UpUS5wdXNoKCgxMj09ay5iaWZmP211OnMyKShTLDgpKTtyZXR1cm4gUX1mdW5jdGlvbiBOQihTLFIsayl7dmFyIEc9MCxRPTA7MTI9'@;
put 'PWsuYmlmZj8oRz1TLnJlYWRfc2hpZnQoNCksUT1TLnJlYWRfc2hpZnQoNCkpOihRPTErUy5yZWFkX3NoaWZ0KDEpLEc9MStTLnJlYWRfc2hpZnQoMikpLGsuYmlmZj49MiYmay5iaWZmPDgmJigtLUcsMD09LS1RJiYoUT0yNTYpKTtmb3IodmFyIG9lPTAsZ2U9W107b2UhPUcmJihnZVtvZV09'@;
put 'W10pOysrb2UpZm9yKHZhciBwZT0wO3BlIT1ROysrcGUpZ2Vbb2VdW3BlXT1aQyhTLGsuYmlmZik7cmV0dXJuIGdlfWZ1bmN0aW9uIFY1KFMsUixrKXtyZXR1cm4gUy5sKz0yLFtCQyhTKV19ZnVuY3Rpb24gV0MoUyl7cmV0dXJuIFMubCs9NixbXX12YXIgV0I9VjUsWUI9V0MsR0I9V0MsJEI9'@;
put 'VjU7ZnVuY3Rpb24gb0QoUyl7cmV0dXJuIFMubCs9MixbRWMoUyksMSZTLnJlYWRfc2hpZnQoMildfXZhciBZQz1WNSxfbmU9b0Qsd25lPVdDLEdDPVY1LENuZT1WNSxTbmU9WyJEYXRhIiwiQWxsIiwiSGVhZGVycyIsIj8/IiwiP0RhdGEyIiwiPz8iLCI/RGF0YUhlYWRlcnMiLCI/PyIsIlRv'@;
put 'dGFscyIsIj8/IiwiPz8iLCI/PyIsIj9EYXRhVG90YWxzIiwiPz8iLCI/PyIsIj8/IiwiP0N1cnJlbnQiXSxpYj17MTp7bjoiUHRnRXhwIixmOmZ1bmN0aW9uIFBCKFMsUixrKXtyZXR1cm4gUy5sKyssayYmMTI9PWsuYmlmZj9bUy5yZWFkX3NoaWZ0KDQsImkiKSwwXTpbUy5yZWFkX3NoaWZ0'@;
put 'KDIpLFMucmVhZF9zaGlmdChrJiYyPT1rLmJpZmY/MToyKV19fSwyOntuOiJQdGdUYmwiLGY6SW59LDM6e246IlB0Z0FkZCIsZjpidX0sNDp7bjoiUHRnU3ViIixmOmJ1fSw1OntuOiJQdGdNdWwiLGY6YnV9LDY6e246IlB0Z0RpdiIsZjpidX0sNzp7bjoiUHRnUG93ZXIiLGY6YnV9LDg6e246'@;
put 'IlB0Z0NvbmNhdCIsZjpidX0sOTp7bjoiUHRnTHQiLGY6YnV9LDEwOntuOiJQdGdMZSIsZjpidX0sMTE6e246IlB0Z0VxIixmOmJ1fSwxMjp7bjoiUHRnR2UiLGY6YnV9LDEzOntuOiJQdGdHdCIsZjpidX0sMTQ6e246IlB0Z05lIixmOmJ1fSwxNTp7bjoiUHRnSXNlY3QiLGY6YnV9LDE2Ontu'@;
put 'OiJQdGdVbmlvbiIsZjpidX0sMTc6e246IlB0Z1JhbmdlIixmOmJ1fSwxODp7bjoiUHRnVXBsdXMiLGY6YnV9LDE5OntuOiJQdGdVbWludXMiLGY6YnV9LDIwOntuOiJQdGdQZXJjZW50IixmOmJ1fSwyMTp7bjoiUHRnUGFyZW4iLGY6YnV9LDIyOntuOiJQdGdNaXNzQXJnIixmOmJ1fSwyMzp7'@;
put 'bjoiUHRnU3RyIixmOmZ1bmN0aW9uIEhCKFMsUixrKXtyZXR1cm4gUy5sKyssVWEoUywwLGspfX0sMjY6e246IlB0Z1NoZWV0IixmOmZ1bmN0aW9uIEVuZShTLFIsayl7cmV0dXJuIFMubCs9NSxTLmwrPTIsUy5sKz0yPT1rLmJpZmY/MTo0LFsiUFRHU0hFRVQiXX19LDI3OntuOiJQdGdFbmRT'@;
put 'aGVldCIsZjpmdW5jdGlvbiBLQihTLFIsayl7cmV0dXJuIFMubCs9Mj09ay5iaWZmPzQ6NSxbIlBUR0VORFNIRUVUIl19fSwyODp7bjoiUHRnRXJyIixmOmZ1bmN0aW9uIFVDKFMpe3JldHVybiBTLmwrKyxNY1tTLnJlYWRfc2hpZnQoMSldfX0sMjk6e246IlB0Z0Jvb2wiLGY6ZnVuY3Rpb24g'@;
put 'TjUoUyl7cmV0dXJuIFMubCsrLDAhPT1TLnJlYWRfc2hpZnQoMSl9fSwzMDp7bjoiUHRnSW50IixmOmZ1bmN0aW9uIEZCKFMpe3JldHVybiBTLmwrKyxTLnJlYWRfc2hpZnQoMil9fSwzMTp7bjoiUHRnTnVtIixmOmZ1bmN0aW9uIFY0KFMpe3JldHVybiBTLmwrKyxQbChTKX19LDMyOntuOiJQ'@;
put 'dGdBcnJheSIsZjpmdW5jdGlvbiBnbmUoUyxSLGspe3ZhciBHPSg5NiZTW1MubCsrXSk+PjU7cmV0dXJuIFMubCs9Mj09ay5iaWZmPzY6MTI9PWsuYmlmZj8xNDo3LFtHXX19LDMzOntuOiJQdGdGdW5jIixmOmZ1bmN0aW9uIExCKFMsUixrKXt2YXIgRz0oOTYmU1tTLmxdKT4+NTtTLmwrPTE7'@;
put 'dmFyIFE9Uy5yZWFkX3NoaWZ0KGsmJmsuYmlmZjw9Mz8xOjIpO3JldHVybltlaltRXSxwRFtRXSxHXX19LDM0OntuOiJQdGdGdW5jVmFyIixmOmZ1bmN0aW9uIE9CKFMsUixrKXt2YXIgRz1TW1MubCsrXSxRPVMucmVhZF9zaGlmdCgxKSxvZT1rJiZrLmJpZmY8PTM/Wzg4PT1HPy0xOjAsUy5y'@;
put 'ZWFkX3NoaWZ0KDEpXTpmdW5jdGlvbiByRChTKXtyZXR1cm5bU1tTLmwrMV0+PjcsMzI3NjcmUy5yZWFkX3NoaWZ0KDIpXX0oUyk7cmV0dXJuW1EsKDA9PT1vZVswXT9wRDpyUylbb2VbMV1dXX19LDM1OntuOiJQdGdOYW1lIixmOmZ1bmN0aW9uIFZCKFMsUixrKXt2YXIgRz1TLnJlYWRfc2hp'@;
put 'ZnQoMSk+Pj41JjMsb2U9Uy5yZWFkX3NoaWZ0KCFrfHxrLmJpZmY+PTg/NDoyKTtzd2l0Y2goay5iaWZmKXtjYXNlIDI6Uy5sKz01O2JyZWFrO2Nhc2UgMzpjYXNlIDQ6Uy5sKz04O2JyZWFrO2Nhc2UgNTpTLmwrPTEyfXJldHVybltHLDAsb2VdfX0sMzY6e246IlB0Z1JlZiIsZjpmdW5jdGlv'@;
put 'biBSQihTLFIsayl7dmFyIEc9KDk2JlNbUy5sXSk+PjU7cmV0dXJuIFMubCs9MSxbRyxLayhTLDAsayldfX0sMzc6e246IlB0Z0FyZWEiLGY6ZnVuY3Rpb24gcWsoUyxSLGspe3JldHVyblsoOTYmU1tTLmwrK10pPj41LFZDKFMsMCxrKV19fSwzODp7bjoiUHRnTWVtQXJlYSIsZjpmdW5jdGlv'@;
put 'biBhRChTLFIsayl7dmFyIEc9Uy5yZWFkX3NoaWZ0KDEpPj4+NSYzO3JldHVybiBTLmwrPWsmJjI9PWsuYmlmZj8zOjQsW0csUy5yZWFkX3NoaWZ0KGsmJjI9PWsuYmlmZj8xOjIpXX19LDM5OntuOiJQdGdNZW1FcnIiLGY6SW59LDQwOntuOiJQdGdNZW1Ob01lbSIsZjpJbn0sNDE6e246IlB0'@;
put 'Z01lbUZ1bmMiLGY6ZnVuY3Rpb24gYm5lKFMsUixrKXtyZXR1cm5bUy5yZWFkX3NoaWZ0KDEpPj4+NSYzLFMucmVhZF9zaGlmdChrJiYyPT1rLmJpZmY/MToyKV19fSw0Mjp7bjoiUHRnUmVmRXJyIixmOmZ1bmN0aW9uIHluZShTLFIsayl7dmFyIEc9Uy5yZWFkX3NoaWZ0KDEpPj4+NSYzO3Jl'@;
put 'dHVybiBTLmwrPTQsay5iaWZmPDgmJlMubC0tLDEyPT1rLmJpZmYmJihTLmwrPTIpLFtHXX19LDQzOntuOiJQdGdBcmVhRXJyIixmOmZ1bmN0aW9uIEprKFMsUixrKXt2YXIgRz0oOTYmU1tTLmwrK10pPj41O3JldHVybiBTLmwrPWsmJmsuYmlmZj44PzEyOmsuYmlmZjw4PzY6OCxbR119fSw0'@;
put 'NDp7bjoiUHRnUmVmTiIsZjpmdW5jdGlvbiB0RChTLFIsayl7dmFyIEc9KDk2JlNbUy5sXSk+PjU7Uy5sKz0xO3ZhciBRPWZ1bmN0aW9uIExmKFMsUixrKXt2YXIgRz1rJiZrLmJpZmY/ay5iaWZmOjg7aWYoRz49MiYmRzw9NSlyZXR1cm4gZnVuY3Rpb24gYTgoUyl7dmFyIFI9Uy5yZWFkX3No'@;
put 'aWZ0KDIpLGs9Uy5yZWFkX3NoaWZ0KDEpLEc9KDMyNzY4JlIpPj4xNSxRPSgxNjM4NCZSKT4+MTQ7cmV0dXJuIFImPTE2MzgzLDE9PUcmJlI+PTgxOTImJihSLT0xNjM4NCksMT09USYmaz49MTI4JiYoay09MjU2KSx7cjpSLGM6ayxjUmVsOlEsclJlbDpHfX0oUyk7dmFyIFE9Uy5yZWFkX3No'@;
put 'aWZ0KEc+PTEyPzQ6Miksb2U9Uy5yZWFkX3NoaWZ0KDIpLGdlPSgxNjM4NCZvZSk+PjE0LHBlPSgzMjc2OCZvZSk+PjE1O2lmKG9lJj0xNjM4MywxPT1wZSlmb3IoO1E+NTI0Mjg3OylRLT0xMDQ4NTc2O2lmKDE9PWdlKWZvcig7b2U+ODE5MTspb2UtPTE2Mzg0O3JldHVybntyOlEsYzpvZSxj'@;
put 'UmVsOmdlLHJSZWw6cGV9fShTLDAsayk7cmV0dXJuW0csUV19fSw0NTp7bjoiUHRnQXJlYU4iLGY6ZnVuY3Rpb24gcG5lKFMsUixrKXt2YXIgRz0oOTYmU1tTLmwrK10pPj41LFE9ZnVuY3Rpb24gVEIoUyxSLGspe2lmKGsuYmlmZjw4KXJldHVybiAkayhTKTt2YXIgRz1TLnJlYWRfc2hpZnQo'@;
put 'MTI9PWsuYmlmZj80OjIpLFE9Uy5yZWFkX3NoaWZ0KDEyPT1rLmJpZmY/NDoyKSxvZT1ONChTLDIpLGdlPU40KFMsMik7cmV0dXJue3M6e3I6RyxjOm9lWzBdLGNSZWw6b2VbMV0sclJlbDpvZVsyXX0sZTp7cjpRLGM6Z2VbMF0sY1JlbDpnZVsxXSxyUmVsOmdlWzJdfX19KFMsMCxrKTtyZXR1'@;
put 'cm5bRyxRXX19LDQ2OntuOiJQdGdNZW1BcmVhTiIsZjpmdW5jdGlvbiBuYihTKXtyZXR1cm5bUy5yZWFkX3NoaWZ0KDEpPj4+NSYzLFMucmVhZF9zaGlmdCgyKV19fSw0Nzp7bjoiUHRnTWVtTm9NZW1OIixmOmZ1bmN0aW9uIHJiKFMpe3JldHVybltTLnJlYWRfc2hpZnQoMSk+Pj41JjMsUy5y'@;
put 'ZWFkX3NoaWZ0KDIpXX19LDU3OntuOiJQdGdOYW1lWCIsZjpmdW5jdGlvbiBCQihTLFIsayl7cmV0dXJuIDU9PWsuYmlmZj9mdW5jdGlvbiBqQihTKXt2YXIgUj1TLnJlYWRfc2hpZnQoMSk+Pj41JjMsaz1TLnJlYWRfc2hpZnQoMiwiaSIpO1MubCs9ODt2YXIgRz1TLnJlYWRfc2hpZnQoMik7'@;
put 'cmV0dXJuIFMubCs9MTIsW1IsayxHXX0oUyk6W1MucmVhZF9zaGlmdCgxKT4+PjUmMyxTLnJlYWRfc2hpZnQoMiksUy5yZWFkX3NoaWZ0KDQpXX19LDU4OntuOiJQdGdSZWYzZCIsZjpmdW5jdGlvbiBuRChTLFIsayl7dmFyIEc9KDk2JlNbUy5sXSk+PjU7Uy5sKz0xO3ZhciBRPVMucmVhZF9z'@;
put 'aGlmdCgyKTtyZXR1cm4gayYmNT09ay5iaWZmJiYoUy5sKz0xMiksW0csUSxLayhTLDAsayldfX0sNTk6e246IlB0Z0FyZWEzZCIsZjpmdW5jdGlvbiBYayhTLFIsayl7dmFyIEc9KDk2JlNbUy5sKytdKT4+NSxRPVMucmVhZF9zaGlmdCgyLCJpIik7aWYoayYmNT09PWsuYmlmZilTLmwrPTEy'@;
put 'O3JldHVybltHLFEsVkMoUywwLGspXX19LDYwOntuOiJQdGdSZWZFcnIzZCIsZjpmdW5jdGlvbiBvOChTLFIsayl7dmFyIEc9KDk2JlNbUy5sKytdKT4+NSxRPVMucmVhZF9zaGlmdCgyKSxvZT00O2lmKGspc3dpdGNoKGsuYmlmZil7Y2FzZSA1Om9lPTE1O2JyZWFrO2Nhc2UgMTI6b2U9Nn1y'@;
put 'ZXR1cm4gUy5sKz1vZSxbRyxRXX19LDYxOntuOiJQdGdBcmVhRXJyM2QiLGY6ZnVuY3Rpb24gZm5lKFMsUixrKXt2YXIgRz0oOTYmU1tTLmwrK10pPj41LFE9Uy5yZWFkX3NoaWZ0KDIpLG9lPTg7aWYoaylzd2l0Y2goay5iaWZmKXtjYXNlIDU6Uy5sKz0xMixvZT02O2JyZWFrO2Nhc2UgMTI6'@;
put 'b2U9MTJ9cmV0dXJuIFMubCs9b2UsW0csUV19fSwyNTU6e319LEtDPXs2NDozMiw5NjozMiw2NTozMyw5NzozMyw2NjozNCw5ODozNCw2NzozNSw5OTozNSw2ODozNiwxMDA6MzYsNjk6MzcsMTAxOjM3LDcwOjM4LDEwMjozOCw3MTozOSwxMDM6MzksNzI6NDAsMTA0OjQwLDczOjQxLDEwNTo0'@;
put 'MSw3NDo0MiwxMDY6NDIsNzU6NDMsMTA3OjQzLDc2OjQ0LDEwODo0NCw3Nzo0NSwxMDk6NDUsNzg6NDYsMTEwOjQ2LDc5OjQ3LDExMTo0Nyw4ODozNCwxMjA6MzQsODk6NTcsMTIxOjU3LDkwOjU4LDEyMjo1OCw5MTo1OSwxMjM6NTksOTI6NjAsMTI0OjYwLDkzOjYxLDEyNTo2MX07IWZ1bmN0'@;
put 'aW9uKCl7Zm9yKHZhciBTIGluIEtDKWliW1NdPWliW0tDW1NdXX0oKTt2YXIgcUM9ezE6e246IlB0Z0VsZkxlbCIsZjpvRH0sMjp7bjoiUHRnRWxmUnciLGY6R0N9LDM6e246IlB0Z0VsZkNvbCIsZjpXQn0sNjp7bjoiUHRnRWxmUndWIixmOkNuZX0sNzp7bjoiUHRnRWxmQ29sViIsZjokQn0s'@;
put 'MTA6e246IlB0Z0VsZlJhZGljYWwiLGY6WUN9LDExOntuOiJQdGdFbGZSYWRpY2FsUyIsZjp3bmV9LDEzOntuOiJQdGdFbGZDb2xTIixmOllCfSwxNTp7bjoiUHRnRWxmQ29sU1YiLGY6R0J9LDE2OntuOiJQdGdFbGZSYWRpY2FsTGVsIixmOl9uZX0sMjU6e246IlB0Z0xpc3QiLGY6ZnVuY3Rp'@;
put 'b24gTW5lKFMpe1MubCs9Mjt2YXIgUj1TLnJlYWRfc2hpZnQoMiksaz1TLnJlYWRfc2hpZnQoMiksRz1TLnJlYWRfc2hpZnQoNCksUT1TLnJlYWRfc2hpZnQoMiksb2U9Uy5yZWFkX3NoaWZ0KDIpO3JldHVybntpeHRpOlIsY29sdHlwZTozJmsscnQ6U25lW2s+PjImMzFdLGlkeDpHLGM6USxD'@;
put 'Om9lfX19LDI5OntuOiJQdGdTeE5hbWUiLGY6ZnVuY3Rpb24geG5lKFMpe3JldHVybiBTLmwrPTIsW1MucmVhZF9zaGlmdCg0KV19fSwyNTU6e319LCQzPXswOntuOiJQdGdBdHRyTm9vcCIsZjpmdW5jdGlvbiAkQyhTKXtyZXR1cm4gUy5sKz00LFswLDBdfX0sMTp7bjoiUHRnQXR0clNlbWki'@;
put 'LGY6ZnVuY3Rpb24ga0IoUyxSLGspe3ZhciBHPTI1NSZTW1MubCsxXT8xOjA7cmV0dXJuIFMubCs9ayYmMj09ay5iaWZmPzM6NCxbR119fSwyOntuOiJQdGdBdHRySWYiLGY6ZnVuY3Rpb24gdm5lKFMsUixrKXt2YXIgRz0yNTUmU1tTLmwrMV0/MTowO3JldHVybiBTLmwrPTIsW0csUy5yZWFk'@;
put 'X3NoaWZ0KGsmJjI9PWsuYmlmZj8xOjIpXX19LDQ6e246IlB0Z0F0dHJDaG9vc2UiLGY6ZnVuY3Rpb24gekMoUyxSLGspe1MubCs9Mjtmb3IodmFyIEc9Uy5yZWFkX3NoaWZ0KGsmJjI9PWsuYmlmZj8xOjIpLFE9W10sb2U9MDtvZTw9RzsrK29lKVEucHVzaChTLnJlYWRfc2hpZnQoayYmMj09'@;
put 'ay5iaWZmPzE6MikpO3JldHVybiBRfX0sODp7bjoiUHRnQXR0ckdvdG8iLGY6ZnVuY3Rpb24gbW5lKFMsUixrKXt2YXIgRz0yNTUmU1tTLmwrMV0/MTowO3JldHVybiBTLmwrPTIsW0csUy5yZWFkX3NoaWZ0KGsmJjI9PWsuYmlmZj8xOjIpXX19LDE2OntuOiJQdGdBdHRyU3VtIixmOmZ1bmN0'@;
put 'aW9uIHRiKFMsUixrKXtTLmwrPWsmJjI9PWsuYmlmZj8zOjR9fSwzMjp7bjoiUHRnQXR0ckJheGNlbCIsZjpmdW5jdGlvbiBqQyhTKXt2YXIgUj0xJlNbUy5sKzFdO3JldHVybiBTLmwrPTQsW1IsMV19fSw2NDp7bjoiUHRnQXR0clNwYWNlIixmOmZ1bmN0aW9uIERCKFMpe3JldHVybiBTLnJl'@;
put 'YWRfc2hpZnQoMiksZUQoUyl9fSw2NTp7bjoiUHRnQXR0clNwYWNlU2VtaSIsZjpmdW5jdGlvbiBJQihTKXtyZXR1cm4gUy5yZWFkX3NoaWZ0KDIpLGVEKFMpfX0sMTI4OntuOiJQdGdBdHRySWZFcnJvciIsZjpmdW5jdGlvbiBRayhTKXt2YXIgUj0yNTUmU1tTLmwrMV0/MTowO3JldHVybiBT'@;
put 'LmwrPTIsW1IsUy5yZWFkX3NoaWZ0KDIpXX19LDI1NTp7fX07ZnVuY3Rpb24gQjQoUyxSLGssRyxRKXtpZihHLmJpZmY8OClyZXR1cm4gSW4oUyxSKTtmb3IodmFyIG9lPVMubCtSLGdlPVtdLHBlPTA7cGUhPT1rLmxlbmd0aDsrK3BlKXN3aXRjaChrW3BlXVswXSl7Y2FzZSJQdGdBcnJheSI6'@;
put 'a1twZV1bMV09TkIoUywwLEcpLGdlLnB1c2goa1twZV1bMV0pO2JyZWFrO2Nhc2UiUHRnTWVtQXJlYSI6a1twZV1bMl09aUQoUywwLEcpLGdlLnB1c2goa1twZV1bMl0pO2JyZWFrO2Nhc2UiUHRnRXhwIjpHJiYxMj09Ry5iaWZmJiYoa1twZV1bMV1bMV09Uy5yZWFkX3NoaWZ0KDQpLGdlLnB1'@;
put 'c2goa1twZV1bMV0pKTticmVhaztjYXNlIlB0Z0xpc3QiOmNhc2UiUHRnRWxmUmFkaWNhbFMiOmNhc2UiUHRnRWxmQ29sUyI6Y2FzZSJQdGdFbGZDb2xTViI6dGhyb3ciVW5zdXBwb3J0ZWQgIitrW3BlXVswXX1yZXR1cm4gUj1vZS1TLmwsIVEmJjAhPT1SJiZnZS5wdXNoKEluKFMsUikpLGdl'@;
put 'fWZ1bmN0aW9uIGxoKFMsUixrKXtmb3IodmFyIFEsb2UsRz1TLmwrUixnZT1bXTtHIT1TLmw7KVI9Ry1TLmwsUT1pYltvZT1TW1MubF1dLCgyND09PW9lfHwyNT09PW9lKSYmKFE9KDI0PT09b2U/cUM6JDMpW1NbUy5sKzFdXSksUSYmUS5mP2dlLnB1c2goW1EubixRLmYoUyxSLGspXSk6SW4o'@;
put 'UyxSKTtyZXR1cm4gZ2V9ZnVuY3Rpb24gRjEoUyl7Zm9yKHZhciBSPVtdLGs9MDtrPFMubGVuZ3RoOysrayl7Zm9yKHZhciBHPVNba10sUT1bXSxvZT0wO29lPEcubGVuZ3RoOysrb2Upe3ZhciBnZT1HW29lXTtRLnB1c2goZ2U/Mj09PWdlWzBdPyciJytnZVsxXS5yZXBsYWNlKC8iL2csJyIi'@;
put 'JykrJyInOmdlWzFdOiIiKX1SLnB1c2goUS5qb2luKCIsIikpfXJldHVybiBSLmpvaW4oIjsiKX0kM1szM109JDNbMzJdO3ZhciBjaD17UHRnQWRkOiIrIixQdGdDb25jYXQ6IiYiLFB0Z0RpdjoiLyIsUHRnRXE6Ij0iLFB0Z0dlOiI+PSIsUHRnR3Q6Ij4iLFB0Z0xlOiI8PSIsUHRnTHQ6Ijwi'@;
put 'LFB0Z011bDoiKiIsUHRnTmU6Ijw+IixQdGdQb3dlcjoiXiIsUHRnU3ViOiItIn0sc0Q9bmV3IFJlZ0V4cCgvW15cd1x1NEUwMC1cdTlGRkZcdTMwNDAtXHUzMEZGXS8pO2Z1bmN0aW9uIGxEKFMsUixrKXtpZighUylyZXR1cm4iU0gzM1RKU0VSUjAiO2lmKGsuYmlmZj44JiYoIVMuWFRJfHwh'@;
put 'Uy5YVElbUl0pKXJldHVybiBTLlNoZWV0TmFtZXNbUl07aWYoIVMuWFRJKXJldHVybiJTSDMzVEpTRVJSNiI7dmFyIEc9Uy5YVElbUl07aWYoay5iaWZmPDgpcmV0dXJuIFI+MWU0JiYoUi09NjU1MzYpLFI8MCYmKFI9LVIpLDA9PVI/IiI6Uy5YVElbUi0xXTtpZighRylyZXR1cm4iU0gzM1RK'@;
put 'U0VSUjEiO3ZhciBRPSIiO2lmKGsuYmlmZj44KXN3aXRjaChTW0dbMF1dWzBdKXtjYXNlIDM1NzpyZXR1cm4gUT0tMT09R1sxXT8iI1JFRiI6Uy5TaGVldE5hbWVzW0dbMV1dLEdbMV09PUdbMl0/UTpRKyI6IitTLlNoZWV0TmFtZXNbR1syXV07Y2FzZSAzNTg6cmV0dXJuIG51bGwhPWsuU0lE'@;
put 'P1MuU2hlZXROYW1lc1trLlNJRF06IlNIMzNUSlNTQU1FIitTW0dbMF1dWzBdO2RlZmF1bHQ6cmV0dXJuIlNIMzNUSlNTUkMiK1NbR1swXV1bMF19c3dpdGNoKFNbR1swXV1bMF1bMF0pe2Nhc2UgMTAyNTpyZXR1cm4gUT0tMT09R1sxXT8iI1JFRiI6Uy5TaGVldE5hbWVzW0dbMV1dfHwiU0gz'@;
put 'M1RKU0VSUjMiLEdbMV09PUdbMl0/UTpRKyI6IitTLlNoZWV0TmFtZXNbR1syXV07Y2FzZSAxNDg0OTpyZXR1cm4gU1tHWzBdXS5zbGljZSgxKS5tYXAoZnVuY3Rpb24ob2Upe3JldHVybiBvZS5OYW1lfSkuam9pbigiOzsiKTtkZWZhdWx0OnJldHVybiBTW0dbMF1dWzBdWzNdPyhRPS0xPT1H'@;
put 'WzFdPyIjUkVGIjpTW0dbMF1dWzBdWzNdW0dbMV1dfHwiU0gzM1RKU0VSUjQiLEdbMV09PUdbMl0/UTpRKyI6IitTW0dbMF1dWzBdWzNdW0dbMl1dKToiU0gzM1RKU0VSUjIifX1mdW5jdGlvbiBxQihTLFIsayl7cmV0dXJuIGZ1bmN0aW9uIFRuZShTLFIpe2lmKCEoU3x8UiYmUi5iaWZmPD01'@;
put 'JiZSLmJpZmY+PTIpKXRocm93IG5ldyBFcnJvcigiZW1wdHkgc2hlZXQgbmFtZSIpO3JldHVybi8jUkVGLy50ZXN0KFMpP1M6c0QudGVzdChTKT8iJyIrUysiJyI6U30obEQoUyxSLGspLGspfWZ1bmN0aW9uIHMwKFMsUixrLEcsUSxvZSl7dmFyIFBlLE5lLFllLEV0LGdlPVEmJlEuYmlmZnx8'@;
put 'OCxwZT1vZSYmbnVsbCE9Uj9SOntzOntjOjAscjowfSxlOntjOjAscjowfX0seWU9W10sZXQ9MCxjdD0wLGF0PSIiO2lmKCFTWzBdfHwhU1swXVswXSlyZXR1cm4iIjtmb3IodmFyIGJ0PS0xLGp0PSIiLGt0PTAsT3Q9U1swXS5sZW5ndGg7a3Q8T3Q7KytrdCl7dmFyIEt0PVNbMF1ba3RdO3N3'@;
put 'aXRjaChLdFswXSl7Y2FzZSJQdGdVbWludXMiOnllLnB1c2goIi0iK3llLnBvcCgpKTticmVhaztjYXNlIlB0Z1VwbHVzIjp5ZS5wdXNoKCIrIit5ZS5wb3AoKSk7YnJlYWs7Y2FzZSJQdGdQZXJjZW50Ijp5ZS5wdXNoKHllLnBvcCgpKyIlIik7YnJlYWs7Y2FzZSJQdGdBZGQiOmNhc2UiUHRn'@;
put 'Q29uY2F0IjpjYXNlIlB0Z0RpdiI6Y2FzZSJQdGdFcSI6Y2FzZSJQdGdHZSI6Y2FzZSJQdGdHdCI6Y2FzZSJQdGdMZSI6Y2FzZSJQdGdMdCI6Y2FzZSJQdGdNdWwiOmNhc2UiUHRnTmUiOmNhc2UiUHRnUG93ZXIiOmNhc2UiUHRnU3ViIjppZihQZT15ZS5wb3AoKSxOZT15ZS5wb3AoKSxidD49'@;
put 'MCl7c3dpdGNoKFNbMF1bYnRdWzFdWzBdKXtjYXNlIDA6anQ9Y2koIiAiLFNbMF1bYnRdWzFdWzFdKTticmVhaztjYXNlIDE6anQ9Y2koIlxyIixTWzBdW2J0XVsxXVsxXSk7YnJlYWs7ZGVmYXVsdDppZihqdD0iIixRLldURil0aHJvdyBuZXcgRXJyb3IoIlVuZXhwZWN0ZWQgUHRnQXR0clNw'@;
put 'YWNlVHlwZSAiK1NbMF1bYnRdWzFdWzBdKX1OZSs9anQsYnQ9LTF9eWUucHVzaChOZStjaFtLdFswXV0rUGUpO2JyZWFrO2Nhc2UiUHRnSXNlY3QiOlBlPXllLnBvcCgpLE5lPXllLnBvcCgpLHllLnB1c2goTmUrIiAiK1BlKTticmVhaztjYXNlIlB0Z1VuaW9uIjpQZT15ZS5wb3AoKSxOZT15'@;
put 'ZS5wb3AoKSx5ZS5wdXNoKE5lKyIsIitQZSk7YnJlYWs7Y2FzZSJQdGdSYW5nZSI6UGU9eWUucG9wKCksTmU9eWUucG9wKCkseWUucHVzaChOZSsiOiIrUGUpO2JyZWFrO2Nhc2UiUHRnQXR0ckNob29zZSI6Y2FzZSJQdGdBdHRyR290byI6Y2FzZSJQdGdBdHRySWYiOmNhc2UiUHRnQXR0cklm'@;
put 'RXJyb3IiOmNhc2UiUHRnQXR0ckJheGNlbCI6Y2FzZSJQdGdBdHRyU2VtaSI6Y2FzZSJQdGdNZW1BcmVhIjpjYXNlIlB0Z1RibCI6Y2FzZSJQdGdNZW1FcnIiOmNhc2UiUHRnTWVtQXJlYU4iOmNhc2UiUHRnTWVtTm9NZW1OIjpjYXNlIlB0Z0F0dHJOb29wIjpjYXNlIlB0Z1NoZWV0IjpjYXNl'@;
put 'IlB0Z0VuZFNoZWV0IjpjYXNlIlB0Z01lbUZ1bmMiOmNhc2UiUHRnTWVtTm9NZW0iOmJyZWFrO2Nhc2UiUHRnUmVmIjpZZT10YShLdFsxXVsxXSxwZSxRKSx5ZS5wdXNoKFZhKFllLGdlKSk7YnJlYWs7Y2FzZSJQdGdSZWZOIjpZZT1rP3RhKEt0WzFdWzFdLGssUSk6S3RbMV1bMV0seWUucHVz'@;
put 'aChWYShZZSxnZSkpO2JyZWFrO2Nhc2UiUHRnUmVmM2QiOmV0PUt0WzFdWzFdLFllPXRhKEt0WzFdWzJdLHBlLFEpLGF0PXFCKEcsZXQsUSkseWUucHVzaChhdCsiISIrVmEoWWUsZ2UpKTticmVhaztjYXNlIlB0Z0Z1bmMiOmNhc2UiUHRnRnVuY1ZhciI6dmFyIHJyPUt0WzFdWzBdLFNuPUt0'@;
put 'WzFdWzFdO3JyfHwocnI9MCk7dmFyIGxyPTA9PShyciY9MTI3KT9bXTp5ZS5zbGljZSgtcnIpO3llLmxlbmd0aC09cnIsIlVzZXIiPT09U24mJihTbj1sci5zaGlmdCgpKSx5ZS5wdXNoKFNuKyIoIitsci5qb2luKCIsIikrIikiKTticmVhaztjYXNlIlB0Z0Jvb2wiOnllLnB1c2goS3RbMV0/'@;
put 'IlRSVUUiOiJGQUxTRSIpO2JyZWFrO2Nhc2UiUHRnSW50IjpjYXNlIlB0Z051bSI6eWUucHVzaChTdHJpbmcoS3RbMV0pKTticmVhaztjYXNlIlB0Z1N0ciI6eWUucHVzaCgnIicrS3RbMV0ucmVwbGFjZSgvIi9nLCciIicpKyciJyk7YnJlYWs7Y2FzZSJQdGdFcnIiOnllLnB1c2goS3RbMV0p'@;
put 'O2JyZWFrO2Nhc2UiUHRnQXJlYU4iOkV0PW9hKEt0WzFdWzFdLGs/e3M6a306cGUsUSkseWUucHVzaCgkbyhFdCxRKSk7YnJlYWs7Y2FzZSJQdGdBcmVhIjpFdD1vYShLdFsxXVsxXSxwZSxRKSx5ZS5wdXNoKCRvKEV0LFEpKTticmVhaztjYXNlIlB0Z0FyZWEzZCI6ZXQ9S3RbMV1bMV0sRXQ9'@;
put 'b2EoS3RbMV1bMl0scGUsUSksYXQ9cUIoRyxldCxRKSx5ZS5wdXNoKGF0KyIhIiskbyhFdCxRKSk7YnJlYWs7Y2FzZSJQdGdBdHRyU3VtIjp5ZS5wdXNoKCJTVU0oIit5ZS5wb3AoKSsiKSIpO2JyZWFrO2Nhc2UiUHRnTmFtZSI6dmFyIFhuPShHLm5hbWVzfHxbXSlbKGN0PUt0WzFdWzJdKS0x'@;
put 'XXx8KEdbMF18fFtdKVtjdF0sQm49WG4/WG4uTmFtZToiU0gzM1RKU05BTUUiK1N0cmluZyhjdCk7Qm4gaW4gYWImJihCbj1hYltCbl0pLHllLnB1c2goQm4pO2JyZWFrO2Nhc2UiUHRnTmFtZVgiOnZhciBicixmcj1LdFsxXVsxXTtpZihjdD1LdFsxXVsyXSwhKFEuYmlmZjw9NSkpe3ZhciBl'@;
put 'cj0iIjtpZigxNDg0OT09KChHW2ZyXXx8W10pWzBdfHxbXSlbMF18fCgxMDI1PT0oKEdbZnJdfHxbXSlbMF18fFtdKVswXT9HW2ZyXVtjdF0mJkdbZnJdW2N0XS5pdGFiPjAmJihlcj1HLlNoZWV0TmFtZXNbR1tmcl1bY3RdLml0YWItMV0rIiEiKTplcj1HLlNoZWV0TmFtZXNbY3QtMV0rIiEi'@;
put 'KSxHW2ZyXSYmR1tmcl1bY3RdKWVyKz1HW2ZyXVtjdF0uTmFtZTtlbHNlIGlmKEdbMF0mJkdbMF1bY3RdKWVyKz1HWzBdW2N0XS5OYW1lO2Vsc2V7dmFyIEZpPShsRChHLGZyLFEpfHwiIikuc3BsaXQoIjs7Iik7RmlbY3QtMV0/ZXI9RmlbY3QtMV06ZXIrPSJTSDMzVEpTRVJSWCJ9eWUucHVz'@;
put 'aChlcik7YnJlYWt9ZnI8MCYmKGZyPS1mciksR1tmcl0mJihicj1HW2ZyXVtjdF0pLGJyfHwoYnI9e05hbWU6IlNIMzNUSlNFUlJZIn0pLHllLnB1c2goYnIuTmFtZSk7YnJlYWs7Y2FzZSJQdGdQYXJlbiI6dmFyIG5hPSIoIixjYT0iKSI7aWYoYnQ+PTApe3N3aXRjaChqdD0iIixTWzBdW2J0'@;
put 'XVsxXVswXSl7Y2FzZSAyOm5hPWNpKCIgIixTWzBdW2J0XVsxXVsxXSkrbmE7YnJlYWs7Y2FzZSAzOm5hPWNpKCJcciIsU1swXVtidF1bMV1bMV0pK25hO2JyZWFrO2Nhc2UgNDpjYT1jaSgiICIsU1swXVtidF1bMV1bMV0pK2NhO2JyZWFrO2Nhc2UgNTpjYT1jaSgiXHIiLFNbMF1bYnRdWzFd'@;
put 'WzFdKStjYTticmVhaztkZWZhdWx0OmlmKFEuV1RGKXRocm93IG5ldyBFcnJvcigiVW5leHBlY3RlZCBQdGdBdHRyU3BhY2VUeXBlICIrU1swXVtidF1bMV1bMF0pfWJ0PS0xfXllLnB1c2gobmEreWUucG9wKCkrY2EpO2JyZWFrO2Nhc2UiUHRnUmVmRXJyIjpjYXNlIlB0Z0FyZWFFcnIiOmNh'@;
put 'c2UiUHRnQXJlYUVycjNkIjpjYXNlIlB0Z1JlZkVycjNkIjp5ZS5wdXNoKCIjUkVGISIpO2JyZWFrO2Nhc2UiUHRnRXhwIjp2YXIga3I9e2M6ay5jLHI6ay5yfTtpZihHLnNoYXJlZGZbcWkoWWU9e2M6S3RbMV1bMV0scjpLdFsxXVswXX0pXSl7dmFyIFZuPUcuc2hhcmVkZltxaShZZSldO3ll'@;
put 'LnB1c2goczAoVm4scGUsa3IsRyxRKSl9ZWxzZXt2YXIgQnI9ITE7Zm9yKFBlPTA7UGUhPUcuYXJyYXlmLmxlbmd0aDsrK1BlKWlmKCEoWWUuYzwoTmU9Ry5hcnJheWZbUGVdKVswXS5zLmN8fFllLmM+TmVbMF0uZS5jfHxZZS5yPE5lWzBdLnMucnx8WWUucj5OZVswXS5lLnIpKXt5ZS5wdXNo'@;
put 'KHMwKE5lWzFdLHBlLGtyLEcsUSkpLEJyPSEwO2JyZWFrfUJyfHx5ZS5wdXNoKEt0WzFdKX1icmVhaztjYXNlIlB0Z0FycmF5Ijp5ZS5wdXNoKCJ7IitGMShLdFsxXSkrIn0iKTticmVhaztjYXNlIlB0Z0F0dHJTcGFjZSI6Y2FzZSJQdGdBdHRyU3BhY2VTZW1pIjpidD1rdDticmVhaztjYXNl'@;
put 'IlB0Z01pc3NBcmciOnllLnB1c2goIiIpO2JyZWFrO2Nhc2UiUHRnTGlzdCI6eWUucHVzaCgiVGFibGUiK0t0WzFdLmlkeCsiWyMiK0t0WzFdLnJ0KyJdIik7YnJlYWs7Y2FzZSJQdGdFbGZDb2wiOmNhc2UiUHRnRWxmQ29sUyI6Y2FzZSJQdGdFbGZDb2xTViI6Y2FzZSJQdGdFbGZDb2xWIjpj'@;
put 'YXNlIlB0Z0VsZkxlbCI6Y2FzZSJQdGdFbGZSYWRpY2FsIjpjYXNlIlB0Z0VsZlJhZGljYWxMZWwiOmNhc2UiUHRnRWxmUmFkaWNhbFMiOmNhc2UiUHRnRWxmUnciOmNhc2UiUHRnRWxmUndWIjp0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIEVMRnMiKTtkZWZhdWx0OnRocm93IG5ldyBF'@;
put 'cnJvcigiVW5yZWNvZ25pemVkIEZvcm11bGEgVG9rZW46ICIrU3RyaW5nKEt0KSl9aWYoMyE9US5iaWZmJiZidD49MCYmLTE9PVsiUHRnQXR0clNwYWNlIiwiUHRnQXR0clNwYWNlU2VtaSIsIlB0Z0F0dHJHb3RvIl0uaW5kZXhPZihTWzBdW2t0XVswXSkpe3ZhciBGbj0hMDtzd2l0Y2goKEt0'@;
put 'PVNbMF1bYnRdKVsxXVswXSl7Y2FzZSA0OkZuPSExO2Nhc2UgMDpqdD1jaSgiICIsS3RbMV1bMV0pO2JyZWFrO2Nhc2UgNTpGbj0hMTtjYXNlIDE6anQ9Y2koIlxyIixLdFsxXVsxXSk7YnJlYWs7ZGVmYXVsdDppZihqdD0iIixRLldURil0aHJvdyBuZXcgRXJyb3IoIlVuZXhwZWN0ZWQgUHRn'@;
put 'QXR0clNwYWNlVHlwZSAiK0t0WzFdWzBdKX15ZS5wdXNoKChGbj9qdDoiIikreWUucG9wKCkrKEZuPyIiOmp0KSksYnQ9LTF9fWlmKHllLmxlbmd0aD4xJiZRLldURil0aHJvdyBuZXcgRXJyb3IoImJhZCBmb3JtdWxhIHN0YWNrIik7cmV0dXJuIHllWzBdfWZ1bmN0aW9uIGNEKFMsUixrKXt2'@;
put 'YXIgb2UsRz1TLmwrUixRPTI9PWsuYmlmZj8xOjIsZ2U9Uy5yZWFkX3NoaWZ0KFEpO2lmKDY1NTM1PT1nZSlyZXR1cm5bW10sSW4oUyxSLTIpXTt2YXIgcGU9bGgoUyxnZSxrKTtyZXR1cm4gUiE9PWdlK1EmJihvZT1CNChTLFItZ2UtUSxwZSxrKSksUy5sPUcsW3BlLG9lXX1mdW5jdGlvbiBL'@;
put 'MyhTLFIsayl7dmFyIFEsRz1TLmwrUixvZT1TLnJlYWRfc2hpZnQoMiksZ2U9bGgoUyxvZSxrKTtyZXR1cm4gNjU1MzU9PW9lP1tbXSxJbihTLFItMildOihSIT09b2UrMiYmKFE9QjQoUyxHLW9lLTIsZ2UsaykpLFtnZSxRXSl9ZnVuY3Rpb24gUUMoUyxSLGspe3ZhciBHPVMubCtSLFE9dzAo'@;
put 'Uyk7Mj09ay5iaWZmJiYrK1MubDt2YXIgb2U9ZnVuY3Rpb24gWEMoUyl7dmFyIFI7aWYoNjU1MzUhPT1lbyhTLFMubCs2KSlyZXR1cm5bUGwoUyksIm4iXTtzd2l0Y2goU1tTLmxdKXtjYXNlIDA6cmV0dXJuIFMubCs9OCxbIlN0cmluZyIsInMiXTtjYXNlIDE6cmV0dXJuIFI9MT09PVNbUy5s'@;
put 'KzJdLFMubCs9OCxbUiwiYiJdO2Nhc2UgMjpyZXR1cm4gUj1TW1MubCsyXSxTLmwrPTgsW1IsImUiXTtjYXNlIDM6cmV0dXJuIFMubCs9OCxbIiIsInMiXX1yZXR1cm5bXX0oUyksZ2U9Uy5yZWFkX3NoaWZ0KDEpOzIhPWsuYmlmZiYmKFMucmVhZF9zaGlmdCgxKSxrLmJpZmY+PTUmJlMucmVh'@;
put 'ZF9zaGlmdCg0KSk7dmFyIHBlPWZ1bmN0aW9uIHVEKFMsUixrKXt2YXIgb2UsRz1TLmwrUixRPTI9PWsuYmlmZj8xOjIsZ2U9Uy5yZWFkX3NoaWZ0KFEpO2lmKDY1NTM1PT1nZSlyZXR1cm5bW10sSW4oUyxSLTIpXTt2YXIgcGU9bGgoUyxnZSxrKTtyZXR1cm4gUiE9PWdlK1EmJihvZT1CNChT'@;
put 'LFItZ2UtUSxwZSxrKSksUy5sPUcsW3BlLG9lXX0oUyxHLVMubCxrKTtyZXR1cm57Y2VsbDpRLHZhbDpvZVswXSxmb3JtdWxhOnBlLHNoYXJlZDpnZT4+MyYxLHR0Om9lWzFdfX1mdW5jdGlvbiBqNChTLFIsayl7dmFyIEc9Uy5yZWFkX3NoaWZ0KDQpLFE9bGgoUyxHLGspLG9lPVMucmVhZF9z'@;
put 'aGlmdCg0KTtyZXR1cm5bUSxvZT4wP0I0KFMsb2UsUSxrLCEwKTpudWxsXX12YXIgZVM9ajQsejQ9ajQsaEQ9ajQsWEI9ZnVuY3Rpb24gZEQoUyxSLGspe3ZhciBHPVMucmVhZF9zaGlmdCg0KSxRPVMucmVhZF9zaGlmdCg0KSxvZT1saChTLEcsayk7cmV0dXJuW29lLFE+MD9CNChTLFEsb2Us'@;
put 'aywhMCk6bnVsbF19LGZEPWo0LEpCPWo0O2Z1bmN0aW9uIHRTKFMpe2lmKCgwfFMpPT1TJiZTPE1hdGgucG93KDIsMTYpJiZTPj0wKXt2YXIgUj1ibigxMSk7cmV0dXJuIFIud3JpdGVfc2hpZnQoNCwzKSxSLndyaXRlX3NoaWZ0KDEsMzApLFIud3JpdGVfc2hpZnQoMixTKSxSLndyaXRlX3No'@;
put 'aWZ0KDQsMCksUn12YXIgaz1ibigxNyk7cmV0dXJuIGsud3JpdGVfc2hpZnQoNCwxMSksay53cml0ZV9zaGlmdCgxLDMxKSxrLndyaXRlX3NoaWZ0KDgsUyksay53cml0ZV9zaGlmdCg0LDApLGt9ZnVuY3Rpb24gblMoUyl7dmFyIFI9Ym4oNyk7Ui53cml0ZV9zaGlmdCg0LDMrMipTLmxlbmd0'@;
put 'aCksUi53cml0ZV9zaGlmdCgxLDIzKSxSLndyaXRlX3NoaWZ0KDIsUy5sZW5ndGgpO3ZhciBrPWJuKDIqUy5sZW5ndGgpO2sud3JpdGVfc2hpZnQoMipTLmxlbmd0aCxTLCJ1dGYxNmxlIik7dmFyIEc9Ym4oNCk7cmV0dXJuIEcud3JpdGVfc2hpZnQoNCwwKSxqKFtSLGssR10pfWZ1bmN0aW9u'@;
put 'IFU0KFMpe2lmKFMubWF0Y2goL14jKERJVlwvMCF8R0VUVElOR19EQVRBfE5cL0F8TkFNRVw/fE5VTEwhfE5VTSF8UkVGIXxWQUxVRSEpJC8pKXJldHVybiBmdW5jdGlvbiBRQihTKXt2YXIgUj1ibigxMCk7cmV0dXJuIFIud3JpdGVfc2hpZnQoNCwyKSxSLndyaXRlX3NoaWZ0KDEsMjgpLFIu'@;
put 'd3JpdGVfc2hpZnQoMSxTKSxSLndyaXRlX3NoaWZ0KDQsMCksUn0oK1AzW1NdKTtpZihTLm1hdGNoKC9eXCQ/KD86W0EtV11bQS1aXXsyfXxYW0EtRV1bQS1aXXxYRltBLURdfFtBLVpdezEsMn0pXCQ/KD86MTBbMC0zXVxkezR9fDEwNFswLTddXGR7M318MTA0OFswLTRdXGR7Mn18MTA0ODVb'@;
put 'MC02XVxkfDEwNDg1N1swLTZdfFsxLTldXGR7MCw1fSkkLykpcmV0dXJuIGZ1bmN0aW9uIHM4KFMpe3ZhciBSPU5vKFMpLGs9Ym4oMTUpO3JldHVybiBrLndyaXRlX3NoaWZ0KDQsNyksay53cml0ZV9zaGlmdCgxLDM2KSxrLndyaXRlX3NoaWZ0KDQsUi5yKSxrLndyaXRlX3NoaWZ0KDIsUi5j'@;
put 'fCgiJCI9PVMuY2hhckF0KDApPzA6MSk8PDE0fChTLm1hdGNoKC9cJFxkLyk/MDoxKTw8MTUpLGsud3JpdGVfc2hpZnQoNCwwKSxrfShTKTtpZihTLm1hdGNoKC9eIi4qIiQvKSlyZXR1cm4gblMoUyk7dGhyb3ciRm9ybXVsYSB8IitTKyJ8IG5vdCBzdXBwb3J0ZWQgZm9yIFhMU0IifXZhciBy'@;
put 'Uz17MDoiQkVFUCIsMToiT1BFTiIsMjoiT1BFTi5MSU5LUyIsMzoiQ0xPU0UuQUxMIiw0OiJTQVZFIiw1OiJTQVZFLkFTIiw2OiJGSUxFLkRFTEVURSIsNzoiUEFHRS5TRVRVUCIsODoiUFJJTlQiLDk6IlBSSU5URVIuU0VUVVAiLDEwOiJRVUlUIiwxMToiTkVXLldJTkRPVyIsMTI6IkFSUkFO'@;
put 'R0UuQUxMIiwxMzoiV0lORE9XLlNJWkUiLDE0OiJXSU5ET1cuTU9WRSIsMTU6IkZVTEwiLDE2OiJDTE9TRSIsMTc6IlJVTiIsMjI6IlNFVC5QUklOVC5BUkVBIiwyMzoiU0VULlBSSU5ULlRJVExFUyIsMjQ6IlNFVC5QQUdFLkJSRUFLIiwyNToiUkVNT1ZFLlBBR0UuQlJFQUsiLDI2OiJGT05U'@;
put 'IiwyNzoiRElTUExBWSIsMjg6IlBST1RFQ1QuRE9DVU1FTlQiLDI5OiJQUkVDSVNJT04iLDMwOiJBMS5SMUMxIiwzMToiQ0FMQ1VMQVRFLk5PVyIsMzI6IkNBTENVTEFUSU9OIiwzNDoiREFUQS5GSU5EIiwzNToiRVhUUkFDVCIsMzY6IkRBVEEuREVMRVRFIiwzNzoiU0VULkRBVEFCQVNFIiwz'@;
put 'ODoiU0VULkNSSVRFUklBIiwzOToiU09SVCIsNDA6IkRBVEEuU0VSSUVTIiw0MToiVEFCTEUiLDQyOiJGT1JNQVQuTlVNQkVSIiw0MzoiQUxJR05NRU5UIiw0NDoiU1RZTEUiLDQ1OiJCT1JERVIiLDQ2OiJDRUxMLlBST1RFQ1RJT04iLDQ3OiJDT0xVTU4uV0lEVEgiLDQ4OiJVTkRPIiw0OToi'@;
put 'Q1VUIiw1MDoiQ09QWSIsNTE6IlBBU1RFIiw1MjoiQ0xFQVIiLDUzOiJQQVNURS5TUEVDSUFMIiw1NDoiRURJVC5ERUxFVEUiLDU1OiJJTlNFUlQiLDU2OiJGSUxMLlJJR0hUIiw1NzoiRklMTC5ET1dOIiw2MToiREVGSU5FLk5BTUUiLDYyOiJDUkVBVEUuTkFNRVMiLDYzOiJGT1JNVUxBLkdP'@;
put 'VE8iLDY0OiJGT1JNVUxBLkZJTkQiLDY1OiJTRUxFQ1QuTEFTVC5DRUxMIiw2NjoiU0hPVy5BQ1RJVkUuQ0VMTCIsNjc6IkdBTExFUlkuQVJFQSIsNjg6IkdBTExFUlkuQkFSIiw2OToiR0FMTEVSWS5DT0xVTU4iLDcwOiJHQUxMRVJZLkxJTkUiLDcxOiJHQUxMRVJZLlBJRSIsNzI6IkdBTExF'@;
put 'UlkuU0NBVFRFUiIsNzM6IkNPTUJJTkFUSU9OIiw3NDoiUFJFRkVSUkVEIiw3NToiQURELk9WRVJMQVkiLDc2OiJHUklETElORVMiLDc3OiJTRVQuUFJFRkVSUkVEIiw3ODoiQVhFUyIsNzk6IkxFR0VORCIsODA6IkFUVEFDSC5URVhUIiw4MToiQURELkFSUk9XIiw4MjoiU0VMRUNULkNIQVJU'@;
put 'Iiw4MzoiU0VMRUNULlBMT1QuQVJFQSIsODQ6IlBBVFRFUk5TIiw4NToiTUFJTi5DSEFSVCIsODY6Ik9WRVJMQVkiLDg3OiJTQ0FMRSIsODg6IkZPUk1BVC5MRUdFTkQiLDg5OiJGT1JNQVQuVEVYVCIsOTA6IkVESVQuUkVQRUFUIiw5MToiUEFSU0UiLDkyOiJKVVNUSUZZIiw5MzoiSElERSIs'@;
put 'OTQ6IlVOSElERSIsOTU6IldPUktTUEFDRSIsOTY6IkZPUk1VTEEiLDk3OiJGT1JNVUxBLkZJTEwiLDk4OiJGT1JNVUxBLkFSUkFZIiw5OToiREFUQS5GSU5ELk5FWFQiLDEwMDoiREFUQS5GSU5ELlBSRVYiLDEwMToiRk9STVVMQS5GSU5ELk5FWFQiLDEwMjoiRk9STVVMQS5GSU5ELlBSRVYi'@;
put 'LDEwMzoiQUNUSVZBVEUiLDEwNDoiQUNUSVZBVEUuTkVYVCIsMTA1OiJBQ1RJVkFURS5QUkVWIiwxMDY6IlVOTE9DS0VELk5FWFQiLDEwNzoiVU5MT0NLRUQuUFJFViIsMTA4OiJDT1BZLlBJQ1RVUkUiLDEwOToiU0VMRUNUIiwxMTA6IkRFTEVURS5OQU1FIiwxMTE6IkRFTEVURS5GT1JNQVQi'@;
put 'LDExMjoiVkxJTkUiLDExMzoiSExJTkUiLDExNDoiVlBBR0UiLDExNToiSFBBR0UiLDExNjoiVlNDUk9MTCIsMTE3OiJIU0NST0xMIiwxMTg6IkFMRVJUIiwxMTk6Ik5FVyIsMTIwOiJDQU5DRUwuQ09QWSIsMTIxOiJTSE9XLkNMSVBCT0FSRCIsMTIyOiJNRVNTQUdFIiwxMjQ6IlBBU1RFLkxJ'@;
put 'TksiLDEyNToiQVBQLkFDVElWQVRFIiwxMjY6IkRFTEVURS5BUlJPVyIsMTI3OiJST1cuSEVJR0hUIiwxMjg6IkZPUk1BVC5NT1ZFIiwxMjk6IkZPUk1BVC5TSVpFIiwxMzA6IkZPUk1VTEEuUkVQTEFDRSIsMTMxOiJTRU5ELktFWVMiLDEzMjoiU0VMRUNULlNQRUNJQUwiLDEzMzoiQVBQTFku'@;
put 'TkFNRVMiLDEzNDoiUkVQTEFDRS5GT05UIiwxMzU6IkZSRUVaRS5QQU5FUyIsMTM2OiJTSE9XLklORk8iLDEzNzoiU1BMSVQiLDEzODoiT04uV0lORE9XIiwxMzk6Ik9OLkRBVEEiLDE0MDoiRElTQUJMRS5JTlBVVCIsMTQyOiJPVVRMSU5FIiwxNDM6IkxJU1QuTkFNRVMiLDE0NDoiRklMRS5D'@;
put 'TE9TRSIsMTQ1OiJTQVZFLldPUktCT09LIiwxNDY6IkRBVEEuRk9STSIsMTQ3OiJDT1BZLkNIQVJUIiwxNDg6Ik9OLlRJTUUiLDE0OToiV0FJVCIsMTUwOiJGT1JNQVQuRk9OVCIsMTUxOiJGSUxMLlVQIiwxNTI6IkZJTEwuTEVGVCIsMTUzOiJERUxFVEUuT1ZFUkxBWSIsMTU1OiJTSE9SVC5N'@;
put 'RU5VUyIsMTU5OiJTRVQuVVBEQVRFLlNUQVRVUyIsMTYxOiJDT0xPUi5QQUxFVFRFIiwxNjI6IkRFTEVURS5TVFlMRSIsMTYzOiJXSU5ET1cuUkVTVE9SRSIsMTY0OiJXSU5ET1cuTUFYSU1JWkUiLDE2NjoiQ0hBTkdFLkxJTksiLDE2NzoiQ0FMQ1VMQVRFLkRPQ1VNRU5UIiwxNjg6Ik9OLktF'@;
put 'WSIsMTY5OiJBUFAuUkVTVE9SRSIsMTcwOiJBUFAuTU9WRSIsMTcxOiJBUFAuU0laRSIsMTcyOiJBUFAuTUlOSU1JWkUiLDE3MzoiQVBQLk1BWElNSVpFIiwxNzQ6IkJSSU5HLlRPLkZST05UIiwxNzU6IlNFTkQuVE8uQkFDSyIsMTg1OiJNQUlOLkNIQVJULlRZUEUiLDE4NjoiT1ZFUkxBWS5D'@;
put 'SEFSVC5UWVBFIiwxODc6IlNFTEVDVC5FTkQiLDE4ODoiT1BFTi5NQUlMIiwxODk6IlNFTkQuTUFJTCIsMTkwOiJTVEFOREFSRC5GT05UIiwxOTE6IkNPTlNPTElEQVRFIiwxOTI6IlNPUlQuU1BFQ0lBTCIsMTkzOiJHQUxMRVJZLjNELkFSRUEiLDE5NDoiR0FMTEVSWS4zRC5DT0xVTU4iLDE5'@;
put 'NToiR0FMTEVSWS4zRC5MSU5FIiwxOTY6IkdBTExFUlkuM0QuUElFIiwxOTc6IlZJRVcuM0QiLDE5ODoiR09BTC5TRUVLIiwxOTk6IldPUktHUk9VUCIsMjAwOiJGSUxMLkdST1VQIiwyMDE6IlVQREFURS5MSU5LIiwyMDI6IlBST01PVEUiLDIwMzoiREVNT1RFIiwyMDQ6IlNIT1cuREVUQUlM'@;
put 'IiwyMDY6IlVOR1JPVVAiLDIwNzoiT0JKRUNULlBST1BFUlRJRVMiLDIwODoiU0FWRS5ORVcuT0JKRUNUIiwyMDk6IlNIQVJFIiwyMTA6IlNIQVJFLk5BTUUiLDIxMToiRFVQTElDQVRFIiwyMTI6IkFQUExZLlNUWUxFIiwyMTM6IkFTU0lHTi5UTy5PQkpFQ1QiLDIxNDoiT0JKRUNULlBST1RF'@;
put 'Q1RJT04iLDIxNToiSElERS5PQkpFQ1QiLDIxNjoiU0VULkVYVFJBQ1QiLDIxNzoiQ1JFQVRFLlBVQkxJU0hFUiIsMjE4OiJTVUJTQ1JJQkUuVE8iLDIxOToiQVRUUklCVVRFUyIsMjIwOiJTSE9XLlRPT0xCQVIiLDIyMjoiUFJJTlQuUFJFVklFVyIsMjIzOiJFRElULkNPTE9SIiwyMjQ6IlNI'@;
put 'T1cuTEVWRUxTIiwyMjU6IkZPUk1BVC5NQUlOIiwyMjY6IkZPUk1BVC5PVkVSTEFZIiwyMjc6Ik9OLlJFQ0FMQyIsMjI4OiJFRElULlNFUklFUyIsMjI5OiJERUZJTkUuU1RZTEUiLDI0MDoiTElORS5QUklOVCIsMjQzOiJFTlRFUi5EQVRBIiwyNDk6IkdBTExFUlkuUkFEQVIiLDI1MDoiTUVS'@;
put 'R0UuU1RZTEVTIiwyNTE6IkVESVRJT04uT1BUSU9OUyIsMjUyOiJQQVNURS5QSUNUVVJFIiwyNTM6IlBBU1RFLlBJQ1RVUkUuTElOSyIsMjU0OiJTUEVMTElORyIsMjU2OiJaT09NIiwyNTk6IklOU0VSVC5PQkpFQ1QiLDI2MDoiV0lORE9XLk1JTklNSVpFIiwyNjU6IlNPVU5ELk5PVEUiLDI2'@;
put 'NjoiU09VTkQuUExBWSIsMjY3OiJGT1JNQVQuU0hBUEUiLDI2ODoiRVhURU5ELlBPTFlHT04iLDI2OToiRk9STUFULkFVVE8iLDI3MjoiR0FMTEVSWS4zRC5CQVIiLDI3MzoiR0FMTEVSWS4zRC5TVVJGQUNFIiwyNzQ6IkZJTEwuQVVUTyIsMjc2OiJDVVNUT01JWkUuVE9PTEJBUiIsMjc3OiJB'@;
put 'REQuVE9PTCIsMjc4OiJFRElULk9CSkVDVCIsMjc5OiJPTi5ET1VCTEVDTElDSyIsMjgwOiJPTi5FTlRSWSIsMjgxOiJXT1JLQk9PSy5BREQiLDI4MjoiV09SS0JPT0suTU9WRSIsMjgzOiJXT1JLQk9PSy5DT1BZIiwyODQ6IldPUktCT09LLk9QVElPTlMiLDI4NToiU0FWRS5XT1JLU1BBQ0Ui'@;
put 'LDI4ODoiQ0hBUlQuV0laQVJEIiwyODk6IkRFTEVURS5UT09MIiwyOTA6Ik1PVkUuVE9PTCIsMjkxOiJXT1JLQk9PSy5TRUxFQ1QiLDI5MjoiV09SS0JPT0suQUNUSVZBVEUiLDI5MzoiQVNTSUdOLlRPLlRPT0wiLDI5NToiQ09QWS5UT09MIiwyOTY6IlJFU0VULlRPT0wiLDI5NzoiQ09OU1RS'@;
put 'QUlOLk5VTUVSSUMiLDI5ODoiUEFTVEUuVE9PTCIsMzAyOiJXT1JLQk9PSy5ORVciLDMwNToiU0NFTkFSSU8uQ0VMTFMiLDMwNjoiU0NFTkFSSU8uREVMRVRFIiwzMDc6IlNDRU5BUklPLkFERCIsMzA4OiJTQ0VOQVJJTy5FRElUIiwzMDk6IlNDRU5BUklPLlNIT1ciLDMxMDoiU0NFTkFSSU8u'@;
put 'U0hPVy5ORVhUIiwzMTE6IlNDRU5BUklPLlNVTU1BUlkiLDMxMjoiUElWT1QuVEFCTEUuV0laQVJEIiwzMTM6IlBJVk9ULkZJRUxELlBST1BFUlRJRVMiLDMxNDoiUElWT1QuRklFTEQiLDMxNToiUElWT1QuSVRFTSIsMzE2OiJQSVZPVC5BREQuRklFTERTIiwzMTg6Ik9QVElPTlMuQ0FMQ1VM'@;
put 'QVRJT04iLDMxOToiT1BUSU9OUy5FRElUIiwzMjA6Ik9QVElPTlMuVklFVyIsMzIxOiJBRERJTi5NQU5BR0VSIiwzMjI6Ik1FTlUuRURJVE9SIiwzMjM6IkFUVEFDSC5UT09MQkFSUyIsMzI0OiJWQkFBY3RpdmF0ZSIsMzI1OiJPUFRJT05TLkNIQVJUIiwzMjg6IlZCQS5JTlNFUlQuRklMRSIs'@;
put 'MzMwOiJWQkEuUFJPQ0VEVVJFLkRFRklOSVRJT04iLDMzNjoiUk9VVElORy5TTElQIiwzMzg6IlJPVVRFLkRPQ1VNRU5UIiwzMzk6Ik1BSUwuTE9HT04iLDM0MjoiSU5TRVJULlBJQ1RVUkUiLDM0MzoiRURJVC5UT09MIiwzNDQ6IkdBTExFUlkuRE9VR0hOVVQiLDM1MDoiQ0hBUlQuVFJFTkQi'@;
put 'LDM1MjoiUElWT1QuSVRFTS5QUk9QRVJUSUVTIiwzNTQ6IldPUktCT09LLklOU0VSVCIsMzU1OiJPUFRJT05TLlRSQU5TSVRJT04iLDM1NjoiT1BUSU9OUy5HRU5FUkFMIiwzNzA6IkZJTFRFUi5BRFZBTkNFRCIsMzczOiJNQUlMLkFERC5NQUlMRVIiLDM3NDoiTUFJTC5ERUxFVEUuTUFJTEVS'@;
put 'IiwzNzU6Ik1BSUwuUkVQTFkiLDM3NjoiTUFJTC5SRVBMWS5BTEwiLDM3NzoiTUFJTC5GT1JXQVJEIiwzNzg6Ik1BSUwuTkVYVC5MRVRURVIiLDM3OToiREFUQS5MQUJFTCIsMzgwOiJJTlNFUlQuVElUTEUiLDM4MToiRk9OVC5QUk9QRVJUSUVTIiwzODI6Ik1BQ1JPLk9QVElPTlMiLDM4Mzoi'@;
put 'V09SS0JPT0suSElERSIsMzg0OiJXT1JLQk9PSy5VTkhJREUiLDM4NToiV09SS0JPT0suREVMRVRFIiwzODY6IldPUktCT09LLk5BTUUiLDM4ODoiR0FMTEVSWS5DVVNUT00iLDM5MDoiQURELkNIQVJULkFVVE9GT1JNQVQiLDM5MToiREVMRVRFLkNIQVJULkFVVE9GT1JNQVQiLDM5MjoiQ0hB'@;
put 'UlQuQURELkRBVEEiLDM5MzoiQVVUTy5PVVRMSU5FIiwzOTQ6IlRBQi5PUkRFUiIsMzk1OiJTSE9XLkRJQUxPRyIsMzk2OiJTRUxFQ1QuQUxMIiwzOTc6IlVOR1JPVVAuU0hFRVRTIiwzOTg6IlNVQlRPVEFMLkNSRUFURSIsMzk5OiJTVUJUT1RBTC5SRU1PVkUiLDQwMDoiUkVOQU1FLk9CSkVD'@;
put 'VCIsNDEyOiJXT1JLQk9PSy5TQ1JPTEwiLDQxMzoiV09SS0JPT0suTkVYVCIsNDE0OiJXT1JLQk9PSy5QUkVWIiw0MTU6IldPUktCT09LLlRBQi5TUExJVCIsNDE2OiJGVUxMLlNDUkVFTiIsNDE3OiJXT1JLQk9PSy5QUk9URUNUIiw0MjA6IlNDUk9MTEJBUi5QUk9QRVJUSUVTIiw0MjE6IlBJ'@;
put 'Vk9ULlNIT1cuUEFHRVMiLDQyMjoiVEVYVC5UTy5DT0xVTU5TIiw0MjM6IkZPUk1BVC5DSEFSVFRZUEUiLDQyNDoiTElOSy5GT1JNQVQiLDQyNToiVFJBQ0VSLkRJU1BMQVkiLDQzMDoiVFJBQ0VSLk5BVklHQVRFIiw0MzE6IlRSQUNFUi5DTEVBUiIsNDMyOiJUUkFDRVIuRVJST1IiLDQzMzoi'@;
put 'UElWT1QuRklFTEQuR1JPVVAiLDQzNDoiUElWT1QuRklFTEQuVU5HUk9VUCIsNDM1OiJDSEVDS0JPWC5QUk9QRVJUSUVTIiw0MzY6IkxBQkVMLlBST1BFUlRJRVMiLDQzNzoiTElTVEJPWC5QUk9QRVJUSUVTIiw0Mzg6IkVESVRCT1guUFJPUEVSVElFUyIsNDM5OiJQSVZPVC5SRUZSRVNIIiw0'@;
put 'NDA6IkxJTksuQ09NQk8iLDQ0MToiT1BFTi5URVhUIiw0NDI6IkhJREUuRElBTE9HIiw0NDM6IlNFVC5ESUFMT0cuRk9DVVMiLDQ0NDoiRU5BQkxFLk9CSkVDVCIsNDQ1OiJQVVNIQlVUVE9OLlBST1BFUlRJRVMiLDQ0NjoiU0VULkRJQUxPRy5ERUZBVUxUIiw0NDc6IkZJTFRFUiIsNDQ4OiJG'@;
put 'SUxURVIuU0hPVy5BTEwiLDQ0OToiQ0xFQVIuT1VUTElORSIsNDUwOiJGVU5DVElPTi5XSVpBUkQiLDQ1MToiQURELkxJU1QuSVRFTSIsNDUyOiJTRVQuTElTVC5JVEVNIiw0NTM6IlJFTU9WRS5MSVNULklURU0iLDQ1NDoiU0VMRUNULkxJU1QuSVRFTSIsNDU1OiJTRVQuQ09OVFJPTC5WQUxV'@;
put 'RSIsNDU2OiJTQVZFLkNPUFkuQVMiLDQ1ODoiT1BUSU9OUy5MSVNUUy5BREQiLDQ1OToiT1BUSU9OUy5MSVNUUy5ERUxFVEUiLDQ2MDoiU0VSSUVTLkFYRVMiLDQ2MToiU0VSSUVTLlgiLDQ2MjoiU0VSSUVTLlkiLDQ2MzoiRVJST1JCQVIuWCIsNDY0OiJFUlJPUkJBUi5ZIiw0NjU6IkZPUk1B'@;
put 'VC5DSEFSVCIsNDY2OiJTRVJJRVMuT1JERVIiLDQ2NzoiTUFJTC5MT0dPRkYiLDQ2ODoiQ0xFQVIuUk9VVElORy5TTElQIiw0Njk6IkFQUC5BQ1RJVkFURS5NSUNST1NPRlQiLDQ3MDoiTUFJTC5FRElULk1BSUxFUiIsNDcxOiJPTi5TSEVFVCIsNDcyOiJTVEFOREFSRC5XSURUSCIsNDczOiJT'@;
put 'Q0VOQVJJTy5NRVJHRSIsNDc0OiJTVU1NQVJZLklORk8iLDQ3NToiRklORC5GSUxFIiw0NzY6IkFDVElWRS5DRUxMLkZPTlQiLDQ3NzoiRU5BQkxFLlRJUFdJWkFSRCIsNDc4OiJWQkEuTUFLRS5BRERJTiIsNDgwOiJJTlNFUlREQVRBVEFCTEUiLDQ4MToiV09SS0dST1VQLk9QVElPTlMiLDQ4'@;
put 'MjoiTUFJTC5TRU5ELk1BSUxFUiIsNDg1OiJBVVRPQ09SUkVDVCIsNDg5OiJQT1NULkRPQ1VNRU5UIiw0OTE6IlBJQ0tMSVNUIiw0OTM6IlZJRVcuU0hPVyIsNDk0OiJWSUVXLkRFRklORSIsNDk1OiJWSUVXLkRFTEVURSIsNTA5OiJTSEVFVC5CQUNLR1JPVU5EIiw1MTA6IklOU0VSVC5NQVAu'@;
put 'T0JKRUNUIiw1MTE6Ik9QVElPTlMuTUVOT05PIiw1MTc6Ik1TT0NIRUNLUyIsNTE4OiJOT1JNQUwiLDUxOToiTEFZT1VUIiw1MjA6IlJNLlBSSU5ULkFSRUEiLDUyMToiQ0xFQVIuUFJJTlQuQVJFQSIsNTIyOiJBREQuUFJJTlQuQVJFQSIsNTIzOiJNT1ZFLkJSSyIsNTQ1OiJISURFQ1VSUi5O'@;
put 'T1RFIiw1NDY6IkhJREVBTEwuTk9URVMiLDU0NzoiREVMRVRFLk5PVEUiLDU0ODoiVFJBVkVSU0UuTk9URVMiLDU0OToiQUNUSVZBVEUuTk9URVMiLDYyMDoiUFJPVEVDVC5SRVZJU0lPTlMiLDYyMToiVU5QUk9URUNULlJFVklTSU9OUyIsNjQ3OiJPUFRJT05TLk1FIiw2NTM6IldFQi5QVUJM'@;
put 'SVNIIiw2Njc6Ik5FV1dFQlFVRVJZIiw2NzM6IlBJVk9ULlRBQkxFLkNIQVJUIiw3NTM6Ik9QVElPTlMuU0FWRSIsNzU1OiJPUFRJT05TLlNQRUxMIiw4MDg6IkhJREVBTEwuSU5LQU5OT1RTIn0scEQ9ezA6IkNPVU5UIiwxOiJJRiIsMjoiSVNOQSIsMzoiSVNFUlJPUiIsNDoiU1VNIiw1OiJB'@;
put 'VkVSQUdFIiw2OiJNSU4iLDc6Ik1BWCIsODoiUk9XIiw5OiJDT0xVTU4iLDEwOiJOQSIsMTE6Ik5QViIsMTI6IlNUREVWIiwxMzoiRE9MTEFSIiwxNDoiRklYRUQiLDE1OiJTSU4iLDE2OiJDT1MiLDE3OiJUQU4iLDE4OiJBVEFOIiwxOToiUEkiLDIwOiJTUVJUIiwyMToiRVhQIiwyMjoiTE4i'@;
put 'LDIzOiJMT0cxMCIsMjQ6IkFCUyIsMjU6IklOVCIsMjY6IlNJR04iLDI3OiJST1VORCIsMjg6IkxPT0tVUCIsMjk6IklOREVYIiwzMDoiUkVQVCIsMzE6Ik1JRCIsMzI6IkxFTiIsMzM6IlZBTFVFIiwzNDoiVFJVRSIsMzU6IkZBTFNFIiwzNjoiQU5EIiwzNzoiT1IiLDM4OiJOT1QiLDM5OiJN'@;
put 'T0QiLDQwOiJEQ09VTlQiLDQxOiJEU1VNIiw0MjoiREFWRVJBR0UiLDQzOiJETUlOIiw0NDoiRE1BWCIsNDU6IkRTVERFViIsNDY6IlZBUiIsNDc6IkRWQVIiLDQ4OiJURVhUIiw0OToiTElORVNUIiw1MDoiVFJFTkQiLDUxOiJMT0dFU1QiLDUyOiJHUk9XVEgiLDUzOiJHT1RPIiw1NDoiSEFM'@;
put 'VCIsNTU6IlJFVFVSTiIsNTY6IlBWIiw1NzoiRlYiLDU4OiJOUEVSIiw1OToiUE1UIiw2MDoiUkFURSIsNjE6Ik1JUlIiLDYyOiJJUlIiLDYzOiJSQU5EIiw2NDoiTUFUQ0giLDY1OiJEQVRFIiw2NjoiVElNRSIsNjc6IkRBWSIsNjg6Ik1PTlRIIiw2OToiWUVBUiIsNzA6IldFRUtEQVkiLDcx'@;
put 'OiJIT1VSIiw3MjoiTUlOVVRFIiw3MzoiU0VDT05EIiw3NDoiTk9XIiw3NToiQVJFQVMiLDc2OiJST1dTIiw3NzoiQ09MVU1OUyIsNzg6Ik9GRlNFVCIsNzk6IkFCU1JFRiIsODA6IlJFTFJFRiIsODE6IkFSR1VNRU5UIiw4MjoiU0VBUkNIIiw4MzoiVFJBTlNQT1NFIiw4NDoiRVJST1IiLDg1'@;
put 'OiJTVEVQIiw4NjoiVFlQRSIsODc6IkVDSE8iLDg4OiJTRVQuTkFNRSIsODk6IkNBTExFUiIsOTA6IkRFUkVGIiw5MToiV0lORE9XUyIsOTI6IlNFUklFUyIsOTM6IkRPQ1VNRU5UUyIsOTQ6IkFDVElWRS5DRUxMIiw5NToiU0VMRUNUSU9OIiw5NjoiUkVTVUxUIiw5NzoiQVRBTjIiLDk4OiJB'@;
put 'U0lOIiw5OToiQUNPUyIsMTAwOiJDSE9PU0UiLDEwMToiSExPT0tVUCIsMTAyOiJWTE9PS1VQIiwxMDM6IkxJTktTIiwxMDQ6IklOUFVUIiwxMDU6IklTUkVGIiwxMDY6IkdFVC5GT1JNVUxBIiwxMDc6IkdFVC5OQU1FIiwxMDg6IlNFVC5WQUxVRSIsMTA5OiJMT0ciLDExMDoiRVhFQyIsMTEx'@;
put 'OiJDSEFSIiwxMTI6IkxPV0VSIiwxMTM6IlVQUEVSIiwxMTQ6IlBST1BFUiIsMTE1OiJMRUZUIiwxMTY6IlJJR0hUIiwxMTc6IkVYQUNUIiwxMTg6IlRSSU0iLDExOToiUkVQTEFDRSIsMTIwOiJTVUJTVElUVVRFIiwxMjE6IkNPREUiLDEyMjoiTkFNRVMiLDEyMzoiRElSRUNUT1JZIiwxMjQ6'@;
put 'IkZJTkQiLDEyNToiQ0VMTCIsMTI2OiJJU0VSUiIsMTI3OiJJU1RFWFQiLDEyODoiSVNOVU1CRVIiLDEyOToiSVNCTEFOSyIsMTMwOiJUIiwxMzE6Ik4iLDEzMjoiRk9QRU4iLDEzMzoiRkNMT1NFIiwxMzQ6IkZTSVpFIiwxMzU6IkZSRUFETE4iLDEzNjoiRlJFQUQiLDEzNzoiRldSSVRFTE4i'@;
put 'LDEzODoiRldSSVRFIiwxMzk6IkZQT1MiLDE0MDoiREFURVZBTFVFIiwxNDE6IlRJTUVWQUxVRSIsMTQyOiJTTE4iLDE0MzoiU1lEIiwxNDQ6IkREQiIsMTQ1OiJHRVQuREVGIiwxNDY6IlJFRlRFWFQiLDE0NzoiVEVYVFJFRiIsMTQ4OiJJTkRJUkVDVCIsMTQ5OiJSRUdJU1RFUiIsMTUwOiJD'@;
put 'QUxMIiwxNTE6IkFERC5CQVIiLDE1MjoiQURELk1FTlUiLDE1MzoiQURELkNPTU1BTkQiLDE1NDoiRU5BQkxFLkNPTU1BTkQiLDE1NToiQ0hFQ0suQ09NTUFORCIsMTU2OiJSRU5BTUUuQ09NTUFORCIsMTU3OiJTSE9XLkJBUiIsMTU4OiJERUxFVEUuTUVOVSIsMTU5OiJERUxFVEUuQ09NTUFO'@;
put 'RCIsMTYwOiJHRVQuQ0hBUlQuSVRFTSIsMTYxOiJESUFMT0cuQk9YIiwxNjI6IkNMRUFOIiwxNjM6Ik1ERVRFUk0iLDE2NDoiTUlOVkVSU0UiLDE2NToiTU1VTFQiLDE2NjoiRklMRVMiLDE2NzoiSVBNVCIsMTY4OiJQUE1UIiwxNjk6IkNPVU5UQSIsMTcwOiJDQU5DRUwuS0VZIiwxNzE6IkZP'@;
put 'UiIsMTcyOiJXSElMRSIsMTczOiJCUkVBSyIsMTc0OiJORVhUIiwxNzU6IklOSVRJQVRFIiwxNzY6IlJFUVVFU1QiLDE3NzoiUE9LRSIsMTc4OiJFWEVDVVRFIiwxNzk6IlRFUk1JTkFURSIsMTgwOiJSRVNUQVJUIiwxODE6IkhFTFAiLDE4MjoiR0VULkJBUiIsMTgzOiJQUk9EVUNUIiwxODQ6'@;
put 'IkZBQ1QiLDE4NToiR0VULkNFTEwiLDE4NjoiR0VULldPUktTUEFDRSIsMTg3OiJHRVQuV0lORE9XIiwxODg6IkdFVC5ET0NVTUVOVCIsMTg5OiJEUFJPRFVDVCIsMTkwOiJJU05PTlRFWFQiLDE5MToiR0VULk5PVEUiLDE5MjoiTk9URSIsMTkzOiJTVERFVlAiLDE5NDoiVkFSUCIsMTk1OiJE'@;
put 'U1RERVZQIiwxOTY6IkRWQVJQIiwxOTc6IlRSVU5DIiwxOTg6IklTTE9HSUNBTCIsMTk5OiJEQ09VTlRBIiwyMDA6IkRFTEVURS5CQVIiLDIwMToiVU5SRUdJU1RFUiIsMjA0OiJVU0RPTExBUiIsMjA1OiJGSU5EQiIsMjA2OiJTRUFSQ0hCIiwyMDc6IlJFUExBQ0VCIiwyMDg6IkxFRlRCIiwy'@;
put 'MDk6IlJJR0hUQiIsMjEwOiJNSURCIiwyMTE6IkxFTkIiLDIxMjoiUk9VTkRVUCIsMjEzOiJST1VORERPV04iLDIxNDoiQVNDIiwyMTU6IkRCQ1MiLDIxNjoiUkFOSyIsMjE5OiJBRERSRVNTIiwyMjA6IkRBWVMzNjAiLDIyMToiVE9EQVkiLDIyMjoiVkRCIiwyMjM6IkVMU0UiLDIyNDoiRUxT'@;
put 'RS5JRiIsMjI1OiJFTkQuSUYiLDIyNjoiRk9SLkNFTEwiLDIyNzoiTUVESUFOIiwyMjg6IlNVTVBST0RVQ1QiLDIyOToiU0lOSCIsMjMwOiJDT1NIIiwyMzE6IlRBTkgiLDIzMjoiQVNJTkgiLDIzMzoiQUNPU0giLDIzNDoiQVRBTkgiLDIzNToiREdFVCIsMjM2OiJDUkVBVEUuT0JKRUNUIiwy'@;
put 'Mzc6IlZPTEFUSUxFIiwyMzg6IkxBU1QuRVJST1IiLDIzOToiQ1VTVE9NLlVORE8iLDI0MDoiQ1VTVE9NLlJFUEVBVCIsMjQxOiJGT1JNVUxBLkNPTlZFUlQiLDI0MjoiR0VULkxJTksuSU5GTyIsMjQzOiJURVhULkJPWCIsMjQ0OiJJTkZPIiwyNDU6IkdST1VQIiwyNDY6IkdFVC5PQkpFQ1Qi'@;
put 'LDI0NzoiREIiLDI0ODoiUEFVU0UiLDI1MToiUkVTVU1FIiwyNTI6IkZSRVFVRU5DWSIsMjUzOiJBREQuVE9PTEJBUiIsMjU0OiJERUxFVEUuVE9PTEJBUiIsMjU1OiJVc2VyIiwyNTY6IlJFU0VULlRPT0xCQVIiLDI1NzoiRVZBTFVBVEUiLDI1ODoiR0VULlRPT0xCQVIiLDI1OToiR0VULlRP'@;
put 'T0wiLDI2MDoiU1BFTExJTkcuQ0hFQ0siLDI2MToiRVJST1IuVFlQRSIsMjYyOiJBUFAuVElUTEUiLDI2MzoiV0lORE9XLlRJVExFIiwyNjQ6IlNBVkUuVE9PTEJBUiIsMjY1OiJFTkFCTEUuVE9PTCIsMjY2OiJQUkVTUy5UT09MIiwyNjc6IlJFR0lTVEVSLklEIiwyNjg6IkdFVC5XT1JLQk9P'@;
put 'SyIsMjY5OiJBVkVERVYiLDI3MDoiQkVUQURJU1QiLDI3MToiR0FNTUFMTiIsMjcyOiJCRVRBSU5WIiwyNzM6IkJJTk9NRElTVCIsMjc0OiJDSElESVNUIiwyNzU6IkNISUlOViIsMjc2OiJDT01CSU4iLDI3NzoiQ09ORklERU5DRSIsMjc4OiJDUklUQklOT00iLDI3OToiRVZFTiIsMjgwOiJF'@;
put 'WFBPTkRJU1QiLDI4MToiRkRJU1QiLDI4MjoiRklOViIsMjgzOiJGSVNIRVIiLDI4NDoiRklTSEVSSU5WIiwyODU6IkZMT09SIiwyODY6IkdBTU1BRElTVCIsMjg3OiJHQU1NQUlOViIsMjg4OiJDRUlMSU5HIiwyODk6IkhZUEdFT01ESVNUIiwyOTA6IkxPR05PUk1ESVNUIiwyOTE6IkxPR0lO'@;
put 'ViIsMjkyOiJORUdCSU5PTURJU1QiLDI5MzoiTk9STURJU1QiLDI5NDoiTk9STVNESVNUIiwyOTU6Ik5PUk1JTlYiLDI5NjoiTk9STVNJTlYiLDI5NzoiU1RBTkRBUkRJWkUiLDI5ODoiT0REIiwyOTk6IlBFUk1VVCIsMzAwOiJQT0lTU09OIiwzMDE6IlRESVNUIiwzMDI6IldFSUJVTEwiLDMw'@;
put 'MzoiU1VNWE1ZMiIsMzA0OiJTVU1YMk1ZMiIsMzA1OiJTVU1YMlBZMiIsMzA2OiJDSElURVNUIiwzMDc6IkNPUlJFTCIsMzA4OiJDT1ZBUiIsMzA5OiJGT1JFQ0FTVCIsMzEwOiJGVEVTVCIsMzExOiJJTlRFUkNFUFQiLDMxMjoiUEVBUlNPTiIsMzEzOiJSU1EiLDMxNDoiU1RFWVgiLDMxNToi'@;
put 'U0xPUEUiLDMxNjoiVFRFU1QiLDMxNzoiUFJPQiIsMzE4OiJERVZTUSIsMzE5OiJHRU9NRUFOIiwzMjA6IkhBUk1FQU4iLDMyMToiU1VNU1EiLDMyMjoiS1VSVCIsMzIzOiJTS0VXIiwzMjQ6IlpURVNUIiwzMjU6IkxBUkdFIiwzMjY6IlNNQUxMIiwzMjc6IlFVQVJUSUxFIiwzMjg6IlBFUkNF'@;
put 'TlRJTEUiLDMyOToiUEVSQ0VOVFJBTksiLDMzMDoiTU9ERSIsMzMxOiJUUklNTUVBTiIsMzMyOiJUSU5WIiwzMzQ6Ik1PVklFLkNPTU1BTkQiLDMzNToiR0VULk1PVklFIiwzMzY6IkNPTkNBVEVOQVRFIiwzMzc6IlBPV0VSIiwzMzg6IlBJVk9ULkFERC5EQVRBIiwzMzk6IkdFVC5QSVZPVC5U'@;
put 'QUJMRSIsMzQwOiJHRVQuUElWT1QuRklFTEQiLDM0MToiR0VULlBJVk9ULklURU0iLDM0MjoiUkFESUFOUyIsMzQzOiJERUdSRUVTIiwzNDQ6IlNVQlRPVEFMIiwzNDU6IlNVTUlGIiwzNDY6IkNPVU5USUYiLDM0NzoiQ09VTlRCTEFOSyIsMzQ4OiJTQ0VOQVJJTy5HRVQiLDM0OToiT1BUSU9O'@;
put 'Uy5MSVNUUy5HRVQiLDM1MDoiSVNQTVQiLDM1MToiREFURURJRiIsMzUyOiJEQVRFU1RSSU5HIiwzNTM6Ik5VTUJFUlNUUklORyIsMzU0OiJST01BTiIsMzU1OiJPUEVOLkRJQUxPRyIsMzU2OiJTQVZFLkRJQUxPRyIsMzU3OiJWSUVXLkdFVCIsMzU4OiJHRVRQSVZPVERBVEEiLDM1OToiSFlQ'@;
put 'RVJMSU5LIiwzNjA6IlBIT05FVElDIiwzNjE6IkFWRVJBR0VBIiwzNjI6Ik1BWEEiLDM2MzoiTUlOQSIsMzY0OiJTVERFVlBBIiwzNjU6IlZBUlBBIiwzNjY6IlNUREVWQSIsMzY3OiJWQVJBIiwzNjg6IkJBSFRURVhUIiwzNjk6IlRIQUlEQVlPRldFRUsiLDM3MDoiVEhBSURJR0lUIiwzNzE6'@;
put 'IlRIQUlNT05USE9GWUVBUiIsMzcyOiJUSEFJTlVNU09VTkQiLDM3MzoiVEhBSU5VTVNUUklORyIsMzc0OiJUSEFJU1RSSU5HTEVOR1RIIiwzNzU6IklTVEhBSURJR0lUIiwzNzY6IlJPVU5EQkFIVERPV04iLDM3NzoiUk9VTkRCQUhUVVAiLDM3ODoiVEhBSVlFQVIiLDM3OToiUlREIiwzODA6'@;
put 'IkNVQkVWQUxVRSIsMzgxOiJDVUJFTUVNQkVSIiwzODI6IkNVQkVNRU1CRVJQUk9QRVJUWSIsMzgzOiJDVUJFUkFOS0VETUVNQkVSIiwzODQ6IkhFWDJCSU4iLDM4NToiSEVYMkRFQyIsMzg2OiJIRVgyT0NUIiwzODc6IkRFQzJCSU4iLDM4ODoiREVDMkhFWCIsMzg5OiJERUMyT0NUIiwzOTA6'@;
put 'Ik9DVDJCSU4iLDM5MToiT0NUMkhFWCIsMzkyOiJPQ1QyREVDIiwzOTM6IkJJTjJERUMiLDM5NDoiQklOMk9DVCIsMzk1OiJCSU4ySEVYIiwzOTY6IklNU1VCIiwzOTc6IklNRElWIiwzOTg6IklNUE9XRVIiLDM5OToiSU1BQlMiLDQwMDoiSU1TUVJUIiw0MDE6IklNTE4iLDQwMjoiSU1MT0cy'@;
put 'Iiw0MDM6IklNTE9HMTAiLDQwNDoiSU1TSU4iLDQwNToiSU1DT1MiLDQwNjoiSU1FWFAiLDQwNzoiSU1BUkdVTUVOVCIsNDA4OiJJTUNPTkpVR0FURSIsNDA5OiJJTUFHSU5BUlkiLDQxMDoiSU1SRUFMIiw0MTE6IkNPTVBMRVgiLDQxMjoiSU1TVU0iLDQxMzoiSU1QUk9EVUNUIiw0MTQ6IlNF'@;
put 'UklFU1NVTSIsNDE1OiJGQUNURE9VQkxFIiw0MTY6IlNRUlRQSSIsNDE3OiJRVU9USUVOVCIsNDE4OiJERUxUQSIsNDE5OiJHRVNURVAiLDQyMDoiSVNFVkVOIiw0MjE6IklTT0REIiw0MjI6Ik1ST1VORCIsNDIzOiJFUkYiLDQyNDoiRVJGQyIsNDI1OiJCRVNTRUxKIiw0MjY6IkJFU1NFTEsi'@;
put 'LDQyNzoiQkVTU0VMWSIsNDI4OiJCRVNTRUxJIiw0Mjk6IlhJUlIiLDQzMDoiWE5QViIsNDMxOiJQUklDRU1BVCIsNDMyOiJZSUVMRE1BVCIsNDMzOiJJTlRSQVRFIiw0MzQ6IlJFQ0VJVkVEIiw0MzU6IkRJU0MiLDQzNjoiUFJJQ0VESVNDIiw0Mzc6IllJRUxERElTQyIsNDM4OiJUQklMTEVR'@;
put 'Iiw0Mzk6IlRCSUxMUFJJQ0UiLDQ0MDoiVEJJTExZSUVMRCIsNDQxOiJQUklDRSIsNDQyOiJZSUVMRCIsNDQzOiJET0xMQVJERSIsNDQ0OiJET0xMQVJGUiIsNDQ1OiJOT01JTkFMIiw0NDY6IkVGRkVDVCIsNDQ3OiJDVU1QUklOQyIsNDQ4OiJDVU1JUE1UIiw0NDk6IkVEQVRFIiw0NTA6IkVP'@;
put 'TU9OVEgiLDQ1MToiWUVBUkZSQUMiLDQ1MjoiQ09VUERBWUJTIiw0NTM6IkNPVVBEQVlTIiw0NTQ6IkNPVVBEQVlTTkMiLDQ1NToiQ09VUE5DRCIsNDU2OiJDT1VQTlVNIiw0NTc6IkNPVVBQQ0QiLDQ1ODoiRFVSQVRJT04iLDQ1OToiTURVUkFUSU9OIiw0NjA6Ik9ERExQUklDRSIsNDYxOiJP'@;
put 'RERMWUlFTEQiLDQ2MjoiT0RERlBSSUNFIiw0NjM6Ik9EREZZSUVMRCIsNDY0OiJSQU5EQkVUV0VFTiIsNDY1OiJXRUVLTlVNIiw0NjY6IkFNT1JERUdSQyIsNDY3OiJBTU9STElOQyIsNDY4OiJDT05WRVJUIiw3MjQ6IlNIRUVUSlMiLDQ2OToiQUNDUklOVCIsNDcwOiJBQ0NSSU5UTSIsNDcx'@;
put 'OiJXT1JLREFZIiw0NzI6Ik5FVFdPUktEQVlTIiw0NzM6IkdDRCIsNDc0OiJNVUxUSU5PTUlBTCIsNDc1OiJMQ00iLDQ3NjoiRlZTQ0hFRFVMRSIsNDc3OiJDVUJFS1BJTUVNQkVSIiw0Nzg6IkNVQkVTRVQiLDQ3OToiQ1VCRVNFVENPVU5UIiw0ODA6IklGRVJST1IiLDQ4MToiQ09VTlRJRlMi'@;
put 'LDQ4MjoiU1VNSUZTIiw0ODM6IkFWRVJBR0VJRiIsNDg0OiJBVkVSQUdFSUZTIn0sZWo9ezI6MSwzOjEsMTA6MCwxNToxLDE2OjEsMTc6MSwxODoxLDE5OjAsMjA6MSwyMToxLDIyOjEsMjM6MSwyNDoxLDI1OjEsMjY6MSwyNzoyLDMwOjIsMzE6MywzMjoxLDMzOjEsMzQ6MCwzNTowLDM4OjEs'@;
put 'Mzk6Miw0MDozLDQxOjMsNDI6Myw0MzozLDQ0OjMsNDU6Myw0NzozLDQ4OjIsNTM6MSw2MTozLDYzOjAsNjU6Myw2NjozLDY3OjEsNjg6MSw2OToxLDcwOjEsNzE6MSw3MjoxLDczOjEsNzQ6MCw3NToxLDc2OjEsNzc6MSw3OToyLDgwOjIsODM6MSw4NTowLDg2OjEsODk6MCw5MDoxLDk0OjAs'@;
put 'OTU6MCw5NzoyLDk4OjEsOTk6MSwxMDE6MywxMDI6MywxMDU6MSwxMDY6MSwxMDg6MiwxMTE6MSwxMTI6MSwxMTM6MSwxMTQ6MSwxMTc6MiwxMTg6MSwxMTk6NCwxMjE6MSwxMjY6MSwxMjc6MSwxMjg6MSwxMjk6MSwxMzA6MSwxMzE6MSwxMzM6MSwxMzQ6MSwxMzU6MSwxMzY6MiwxMzc6Miwx'@;
put 'Mzg6MiwxNDA6MSwxNDE6MSwxNDI6MywxNDM6NCwxNDQ6NCwxNjE6MSwxNjI6MSwxNjM6MSwxNjQ6MSwxNjU6MiwxNzI6MSwxNzU6MiwxNzY6MiwxNzc6MywxNzg6MiwxNzk6MSwxODQ6MSwxODY6MSwxODk6MywxOTA6MSwxOTU6MywxOTY6MywxOTc6MSwxOTg6MSwxOTk6MywyMDE6MSwyMDc6'@;
put 'NCwyMTA6MywyMTE6MSwyMTI6MiwyMTM6MiwyMTQ6MSwyMTU6MSwyMjU6MCwyMjk6MSwyMzA6MSwyMzE6MSwyMzI6MSwyMzM6MSwyMzQ6MSwyMzU6MywyNDQ6MSwyNDc6NCwyNTI6MiwyNTc6MSwyNjE6MSwyNzE6MSwyNzM6NCwyNzQ6MiwyNzU6MiwyNzY6MiwyNzc6MywyNzg6MywyNzk6MSwy'@;
put 'ODA6MywyODE6MywyODI6MywyODM6MSwyODQ6MSwyODU6MiwyODY6NCwyODc6MywyODg6MiwyODk6NCwyOTA6MywyOTE6MywyOTI6MywyOTM6NCwyOTQ6MSwyOTU6MywyOTY6MSwyOTc6MywyOTg6MSwyOTk6MiwzMDA6MywzMDE6MywzMDI6NCwzMDM6MiwzMDQ6MiwzMDU6MiwzMDY6MiwzMDc6'@;
put 'MiwzMDg6MiwzMDk6MywzMTA6MiwzMTE6MiwzMTI6MiwzMTM6MiwzMTQ6MiwzMTU6MiwzMTY6NCwzMjU6MiwzMjY6MiwzMjc6MiwzMjg6MiwzMzE6MiwzMzI6MiwzMzc6MiwzNDI6MSwzNDM6MSwzNDY6MiwzNDc6MSwzNTA6NCwzNTE6MywzNTI6MSwzNTM6MiwzNjA6MSwzNjg6MSwzNjk6MSwz'@;
put 'NzA6MSwzNzE6MSwzNzI6MSwzNzM6MSwzNzQ6MSwzNzU6MSwzNzY6MSwzNzc6MSwzNzg6MSwzODI6MywzODU6MSwzOTI6MSwzOTM6MSwzOTY6MiwzOTc6MiwzOTg6MiwzOTk6MSw0MDA6MSw0MDE6MSw0MDI6MSw0MDM6MSw0MDQ6MSw0MDU6MSw0MDY6MSw0MDc6MSw0MDg6MSw0MDk6MSw0MTA6'@;
put 'MSw0MTQ6NCw0MTU6MSw0MTY6MSw0MTc6Miw0MjA6MSw0MjE6MSw0MjI6Miw0MjQ6MSw0MjU6Miw0MjY6Miw0Mjc6Miw0Mjg6Miw0MzA6Myw0Mzg6Myw0Mzk6Myw0NDA6Myw0NDM6Miw0NDQ6Miw0NDU6Miw0NDY6Miw0NDc6Niw0NDg6Niw0NDk6Miw0NTA6Miw0NjQ6Miw0Njg6Myw0NzY6Miw0'@;
put 'Nzk6MSw0ODA6Miw2NTUzNTowfSxhYj17Il94bGZuLkFDT1QiOiJBQ09UIiwiX3hsZm4uQUNPVEgiOiJBQ09USCIsIl94bGZuLkFHR1JFR0FURSI6IkFHR1JFR0FURSIsIl94bGZuLkFSQUJJQyI6IkFSQUJJQyIsIl94bGZuLkFWRVJBR0VJRiI6IkFWRVJBR0VJRiIsIl94bGZuLkFWRVJBR0VJ'@;
put 'RlMiOiJBVkVSQUdFSUZTIiwiX3hsZm4uQkFTRSI6IkJBU0UiLCJfeGxmbi5CRVRBLkRJU1QiOiJCRVRBLkRJU1QiLCJfeGxmbi5CRVRBLklOViI6IkJFVEEuSU5WIiwiX3hsZm4uQklOT00uRElTVCI6IkJJTk9NLkRJU1QiLCJfeGxmbi5CSU5PTS5ESVNULlJBTkdFIjoiQklOT00uRElTVC5S'@;
put 'QU5HRSIsIl94bGZuLkJJTk9NLklOViI6IkJJTk9NLklOViIsIl94bGZuLkJJVEFORCI6IkJJVEFORCIsIl94bGZuLkJJVExTSElGVCI6IkJJVExTSElGVCIsIl94bGZuLkJJVE9SIjoiQklUT1IiLCJfeGxmbi5CSVRSU0hJRlQiOiJCSVRSU0hJRlQiLCJfeGxmbi5CSVRYT1IiOiJCSVRYT1Ii'@;
put 'LCJfeGxmbi5DRUlMSU5HLk1BVEgiOiJDRUlMSU5HLk1BVEgiLCJfeGxmbi5DRUlMSU5HLlBSRUNJU0UiOiJDRUlMSU5HLlBSRUNJU0UiLCJfeGxmbi5DSElTUS5ESVNUIjoiQ0hJU1EuRElTVCIsIl94bGZuLkNISVNRLkRJU1QuUlQiOiJDSElTUS5ESVNULlJUIiwiX3hsZm4uQ0hJU1EuSU5W'@;
put 'IjoiQ0hJU1EuSU5WIiwiX3hsZm4uQ0hJU1EuSU5WLlJUIjoiQ0hJU1EuSU5WLlJUIiwiX3hsZm4uQ0hJU1EuVEVTVCI6IkNISVNRLlRFU1QiLCJfeGxmbi5DT01CSU5BIjoiQ09NQklOQSIsIl94bGZuLkNPTkNBVCI6IkNPTkNBVCIsIl94bGZuLkNPTkZJREVOQ0UuTk9STSI6IkNPTkZJREVO'@;
put 'Q0UuTk9STSIsIl94bGZuLkNPTkZJREVOQ0UuVCI6IkNPTkZJREVOQ0UuVCIsIl94bGZuLkNPVCI6IkNPVCIsIl94bGZuLkNPVEgiOiJDT1RIIiwiX3hsZm4uQ09VTlRJRlMiOiJDT1VOVElGUyIsIl94bGZuLkNPVkFSSUFOQ0UuUCI6IkNPVkFSSUFOQ0UuUCIsIl94bGZuLkNPVkFSSUFOQ0Uu'@;
put 'UyI6IkNPVkFSSUFOQ0UuUyIsIl94bGZuLkNTQyI6IkNTQyIsIl94bGZuLkNTQ0giOiJDU0NIIiwiX3hsZm4uREFZUyI6IkRBWVMiLCJfeGxmbi5ERUNJTUFMIjoiREVDSU1BTCIsIl94bGZuLkVDTUEuQ0VJTElORyI6IkVDTUEuQ0VJTElORyIsIl94bGZuLkVSRi5QUkVDSVNFIjoiRVJGLlBS'@;
put 'RUNJU0UiLCJfeGxmbi5FUkZDLlBSRUNJU0UiOiJFUkZDLlBSRUNJU0UiLCJfeGxmbi5FWFBPTi5ESVNUIjoiRVhQT04uRElTVCIsIl94bGZuLkYuRElTVCI6IkYuRElTVCIsIl94bGZuLkYuRElTVC5SVCI6IkYuRElTVC5SVCIsIl94bGZuLkYuSU5WIjoiRi5JTlYiLCJfeGxmbi5GLklOVi5S'@;
put 'VCI6IkYuSU5WLlJUIiwiX3hsZm4uRi5URVNUIjoiRi5URVNUIiwiX3hsZm4uRklMVEVSWE1MIjoiRklMVEVSWE1MIiwiX3hsZm4uRkxPT1IuTUFUSCI6IkZMT09SLk1BVEgiLCJfeGxmbi5GTE9PUi5QUkVDSVNFIjoiRkxPT1IuUFJFQ0lTRSIsIl94bGZuLkZPUkVDQVNULkVUUyI6IkZPUkVD'@;
put 'QVNULkVUUyIsIl94bGZuLkZPUkVDQVNULkVUUy5DT05GSU5UIjoiRk9SRUNBU1QuRVRTLkNPTkZJTlQiLCJfeGxmbi5GT1JFQ0FTVC5FVFMuU0VBU09OQUxJVFkiOiJGT1JFQ0FTVC5FVFMuU0VBU09OQUxJVFkiLCJfeGxmbi5GT1JFQ0FTVC5FVFMuU1RBVCI6IkZPUkVDQVNULkVUUy5TVEFU'@;
put 'IiwiX3hsZm4uRk9SRUNBU1QuTElORUFSIjoiRk9SRUNBU1QuTElORUFSIiwiX3hsZm4uRk9STVVMQVRFWFQiOiJGT1JNVUxBVEVYVCIsIl94bGZuLkdBTU1BIjoiR0FNTUEiLCJfeGxmbi5HQU1NQS5ESVNUIjoiR0FNTUEuRElTVCIsIl94bGZuLkdBTU1BLklOViI6IkdBTU1BLklOViIsIl94'@;
put 'bGZuLkdBTU1BTE4uUFJFQ0lTRSI6IkdBTU1BTE4uUFJFQ0lTRSIsIl94bGZuLkdBVVNTIjoiR0FVU1MiLCJfeGxmbi5IWVBHRU9NLkRJU1QiOiJIWVBHRU9NLkRJU1QiLCJfeGxmbi5JRkVSUk9SIjoiSUZFUlJPUiIsIl94bGZuLklGTkEiOiJJRk5BIiwiX3hsZm4uSUZTIjoiSUZTIiwiX3hs'@;
put 'Zm4uSU1DT1NIIjoiSU1DT1NIIiwiX3hsZm4uSU1DT1QiOiJJTUNPVCIsIl94bGZuLklNQ1NDIjoiSU1DU0MiLCJfeGxmbi5JTUNTQ0giOiJJTUNTQ0giLCJfeGxmbi5JTVNFQyI6IklNU0VDIiwiX3hsZm4uSU1TRUNIIjoiSU1TRUNIIiwiX3hsZm4uSU1TSU5IIjoiSU1TSU5IIiwiX3hsZm4u'@;
put 'SU1UQU4iOiJJTVRBTiIsIl94bGZuLklTRk9STVVMQSI6IklTRk9STVVMQSIsIl94bGZuLklTTy5DRUlMSU5HIjoiSVNPLkNFSUxJTkciLCJfeGxmbi5JU09XRUVLTlVNIjoiSVNPV0VFS05VTSIsIl94bGZuLkxPR05PUk0uRElTVCI6IkxPR05PUk0uRElTVCIsIl94bGZuLkxPR05PUk0uSU5W'@;
put 'IjoiTE9HTk9STS5JTlYiLCJfeGxmbi5NQVhJRlMiOiJNQVhJRlMiLCJfeGxmbi5NSU5JRlMiOiJNSU5JRlMiLCJfeGxmbi5NT0RFLk1VTFQiOiJNT0RFLk1VTFQiLCJfeGxmbi5NT0RFLlNOR0wiOiJNT0RFLlNOR0wiLCJfeGxmbi5NVU5JVCI6Ik1VTklUIiwiX3hsZm4uTkVHQklOT00uRElT'@;
put 'VCI6Ik5FR0JJTk9NLkRJU1QiLCJfeGxmbi5ORVRXT1JLREFZUy5JTlRMIjoiTkVUV09SS0RBWVMuSU5UTCIsIl94bGZuLk5JR0JJTk9NIjoiTklHQklOT00iLCJfeGxmbi5OT1JNLkRJU1QiOiJOT1JNLkRJU1QiLCJfeGxmbi5OT1JNLklOViI6Ik5PUk0uSU5WIiwiX3hsZm4uTk9STS5TLkRJ'@;
put 'U1QiOiJOT1JNLlMuRElTVCIsIl94bGZuLk5PUk0uUy5JTlYiOiJOT1JNLlMuSU5WIiwiX3hsZm4uTlVNQkVSVkFMVUUiOiJOVU1CRVJWQUxVRSIsIl94bGZuLlBEVVJBVElPTiI6IlBEVVJBVElPTiIsIl94bGZuLlBFUkNFTlRJTEUuRVhDIjoiUEVSQ0VOVElMRS5FWEMiLCJfeGxmbi5QRVJD'@;
put 'RU5USUxFLklOQyI6IlBFUkNFTlRJTEUuSU5DIiwiX3hsZm4uUEVSQ0VOVFJBTksuRVhDIjoiUEVSQ0VOVFJBTksuRVhDIiwiX3hsZm4uUEVSQ0VOVFJBTksuSU5DIjoiUEVSQ0VOVFJBTksuSU5DIiwiX3hsZm4uUEVSTVVUQVRJT05BIjoiUEVSTVVUQVRJT05BIiwiX3hsZm4uUEhJIjoiUEhJ'@;
put 'IiwiX3hsZm4uUE9JU1NPTi5ESVNUIjoiUE9JU1NPTi5ESVNUIiwiX3hsZm4uUVVBUlRJTEUuRVhDIjoiUVVBUlRJTEUuRVhDIiwiX3hsZm4uUVVBUlRJTEUuSU5DIjoiUVVBUlRJTEUuSU5DIiwiX3hsZm4uUVVFUllTVFJJTkciOiJRVUVSWVNUUklORyIsIl94bGZuLlJBTksuQVZHIjoiUkFO'@;
put 'Sy5BVkciLCJfeGxmbi5SQU5LLkVRIjoiUkFOSy5FUSIsIl94bGZuLlJSSSI6IlJSSSIsIl94bGZuLlNFQyI6IlNFQyIsIl94bGZuLlNFQ0giOiJTRUNIIiwiX3hsZm4uU0hFRVQiOiJTSEVFVCIsIl94bGZuLlNIRUVUUyI6IlNIRUVUUyIsIl94bGZuLlNLRVcuUCI6IlNLRVcuUCIsIl94bGZu'@;
put 'LlNUREVWLlAiOiJTVERFVi5QIiwiX3hsZm4uU1RERVYuUyI6IlNUREVWLlMiLCJfeGxmbi5TVU1JRlMiOiJTVU1JRlMiLCJfeGxmbi5TV0lUQ0giOiJTV0lUQ0giLCJfeGxmbi5ULkRJU1QiOiJULkRJU1QiLCJfeGxmbi5ULkRJU1QuMlQiOiJULkRJU1QuMlQiLCJfeGxmbi5ULkRJU1QuUlQi'@;
put 'OiJULkRJU1QuUlQiLCJfeGxmbi5ULklOViI6IlQuSU5WIiwiX3hsZm4uVC5JTlYuMlQiOiJULklOVi4yVCIsIl94bGZuLlQuVEVTVCI6IlQuVEVTVCIsIl94bGZuLlRFWFRKT0lOIjoiVEVYVEpPSU4iLCJfeGxmbi5VTklDSEFSIjoiVU5JQ0hBUiIsIl94bGZuLlVOSUNPREUiOiJVTklDT0RF'@;
put 'IiwiX3hsZm4uVkFSLlAiOiJWQVIuUCIsIl94bGZuLlZBUi5TIjoiVkFSLlMiLCJfeGxmbi5XRUJTRVJWSUNFIjoiV0VCU0VSVklDRSIsIl94bGZuLldFSUJVTEwuRElTVCI6IldFSUJVTEwuRElTVCIsIl94bGZuLldPUktEQVkuSU5UTCI6IldPUktEQVkuSU5UTCIsIl94bGZuLlhPUiI6IlhP'@;
put 'UiIsIl94bGZuLlouVEVTVCI6IlouVEVTVCJ9O2Z1bmN0aW9uIGlTKFMpe3JldHVybiJvZjoiPT1TLnNsaWNlKDAsMykmJihTPVMuc2xpY2UoMykpLDYxPT1TLmNoYXJDb2RlQXQoMCkmJjYxPT0oUz1TLnNsaWNlKDEpKS5jaGFyQ29kZUF0KDApJiYoUz1TLnNsaWNlKDEpKSwoUz0oUz0oUz1T'@;
put 'LnJlcGxhY2UoL0NPTVwuTUlDUk9TT0ZUXC4vZywiIikpLnJlcGxhY2UoL1xbKCg/OlwuW0EtWl0rWzAtOV0rKSg/OjpcLltBLVpdK1swLTldKyk/KVxdL2csZnVuY3Rpb24oUixrKXtyZXR1cm4gay5yZXBsYWNlKC9cLi9nLCIiKX0pKS5yZXBsYWNlKC9cWy4oI1tBLVpdKls/IV0pXF0vZywi'@;
put 'JDEiKSkucmVwbGFjZSgvWzt+XS9nLCIsIikucmVwbGFjZSgvXHwvZywiOyIpfWZ1bmN0aW9uIFo0KFMpe3JldHVybigib2Y6PSIrUy5yZXBsYWNlKG0yLCIkMVsuJDIkMyQ0JDVdIikucmVwbGFjZSgvXF06XFsvZywiOiIpKS5yZXBsYWNlKC87L2csInwiKS5yZXBsYWNlKC8sL2csIjsiKX1m'@;
put 'dW5jdGlvbiBvYihTKXt2YXIgUj1TLnNwbGl0KCI6Iik7cmV0dXJuW1JbMF0uc3BsaXQoIi4iKVswXSxSWzBdLnNwbGl0KCIuIilbMV0rKFIubGVuZ3RoPjE/IjoiKyhSWzFdLnNwbGl0KCIuIilbMV18fFJbMV0uc3BsaXQoIi4iKVswXSk6IiIpXX1mdW5jdGlvbiBnRChTKXtyZXR1cm4gUy5y'@;
put 'ZXBsYWNlKC9cLi8sIiEiKX12YXIgbDg9e30sYzg9e307S2EuV1M9WyJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL3dvcmtzaGVldCIsImh0dHA6Ly9wdXJsLm9jbGMub3JnL29veG1sL29mZmljZURvY3VtZW50L3Jl'@;
put 'bGF0aW9uc2hpcHMvd29ya3NoZWV0Il07dmFyIHEzPXR5cGVvZiBNYXA8InUiO2Z1bmN0aW9uIGFTKFMsUixrLEcpe3ZhciBRPTAsb2U9Uy5sZW5ndGg7aWYoRyl7aWYocTM/Ry5oYXMoUik6T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKEcsUikpZm9yKHZhciBnZT1xMz9H'@;
put 'LmdldChSKTpHW1JdO1E8Z2UubGVuZ3RoOysrUSlpZihTW2dlW1FdXS50PT09UiYmKCFTW2dlW1FdXS5yJiYha3x8U1tnZVtRXV0ucj09aykpcmV0dXJuIFMuQ291bnQrKyxnZVtRXX1lbHNlIGZvcig7UTxvZTsrK1EpaWYoU1tRXS50PT09UiYmKCFTW1FdLnImJiFrfHxTW1FdLnI9PWspKXJl'@;
put 'dHVybiBTLkNvdW50KyssUTtyZXR1cm4gU1tvZV09e3Q6UixyOmt9LFMuQ291bnQrKyxTLlVuaXF1ZSsrLEcmJihxMz8oRy5oYXMoUil8fEcuc2V0KFIsW10pLEcuZ2V0KFIpLnB1c2gob2UpKTooT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKEcsUil8fChHW1JdPVtdKSxH'@;
put 'W1JdLnB1c2gob2UpKSksb2V9ZnVuY3Rpb24gdTgoUyxSKXt2YXIgaz17bWluOlMrMSxtYXg6UysxfSxHPVRjO2lmKCFSKXJldHVybiBSO3ZhciBRPS0xO3JldHVybiBSLmF1dG8mJihrLmJlc3RGaXQ9MSxSLmJlc3R3aWR0aCYmKFE9Ui5iZXN0d2lkdGgpLGRlbGV0ZSBSLmJlc3R3aWR0aCks'@;
put 'bnVsbCE9Ui53cHg/UT14NShSLndweCk6bnVsbCE9Ui53Y2g/UT1SLndjaDpudWxsIT1SLndpZHRoJiYoay5jdXN0b21XaWR0aD0xKSxRPi0xPyhrLndpZHRoPWtmKFEpLGsuY3VzdG9tV2lkdGg9MSk6bnVsbCE9Ui53aWR0aCYmKGsud2lkdGg9Ui53aWR0aCksUi5oaWRkZW4mJihrLmhpZGRl'@;
put 'bj0hMCksay5iZXN0Rml0JiZkZWxldGUgay5jdXN0b21XaWR0aCxUYz1HLG51bGwhPVIubGV2ZWwmJihrLm91dGxpbmVMZXZlbD1rLmxldmVsPVIubGV2ZWwpLG51bGwhPVIuc3R5bGUmJihrLnN0eWxlPVIuc3R5bGUpLGt9ZnVuY3Rpb24gb1MoUyxSLGspe3ZhciBHPU1zKFNbIiFyZWYiXSks'@;
put 'UT0wLG9lPVNbIiFtZXJnZXMiXXx8W10sZ2U9QXJyYXkuaXNBcnJheShTKTtlOmZvcih2YXIgcGU9MDtwZTw9Ry5lLnI7KytwZSl7Zm9yKHZhciB5ZT0wO3llPG9lLmxlbmd0aDsrK3llKWlmKG9lW3llXS5zLnI8PXBlJiZwZTw9b2VbeWVdLmUuciYmb2VbeWVdLnMuYzw9ayYmazw9b2VbeWVd'@;
put 'LmUuYyljb250aW51ZSBlO3ZhciBQZT1nZT8oU1twZV18fFtdKVtrXTpTW3FpKHtyOnBlLGM6a30pXTtpZihQZSl7dmFyIE5lPTE7aWYoUGUucyYmKE5lPXlDKFBlLnMpL2JDLkNhbGlicmlbMTJdfHwxKSxQZS53KVE9TWF0aC5tYXgoUSxQZS53Lmxlbmd0aCpOZSk7ZWxzZSBzd2l0Y2goUGUu'@;
put 'dCl7Y2FzZSJiIjpjYXNlImUiOlE9TWF0aC5tYXgoUSw1Kk5lKTticmVhaztjYXNlInMiOlE9TWF0aC5tYXgoUSxQZS52Lmxlbmd0aCpOZSoxLjJ8MCk7YnJlYWs7Y2FzZSJuIjphNShQZSxQZS52KSxRPU1hdGgubWF4KFEsU3RyaW5nKFBlLnd8fFBlLnYpLmxlbmd0aCpOZSk7YnJlYWs7Y2Fz'@;
put 'ZSJkIjpRPU1hdGgubWF4KFEsOCpOZSl9fX1RPDEmJihRPTEpLFIuYmVzdHdpZHRoPVF9ZnVuY3Rpb24gWDMoUyxSKXtpZihTKXt2YXIgaz1bLjcsLjcsLjc1LC43NSwuMywuM107InhsbWwiPT1SJiYoaz1bMSwxLDEsMSwuNSwuNV0pLG51bGw9PVMubGVmdCYmKFMubGVmdD1rWzBdKSxudWxs'@;
put 'PT1TLnJpZ2h0JiYoUy5yaWdodD1rWzFdKSxudWxsPT1TLnRvcCYmKFMudG9wPWtbMl0pLG51bGw9PVMuYm90dG9tJiYoUy5ib3R0b209a1szXSksbnVsbD09Uy5oZWFkZXImJihTLmhlYWRlcj1rWzRdKSxudWxsPT1TLmZvb3RlciYmKFMuZm9vdGVyPWtbNV0pfX1mdW5jdGlvbiBsUyhTLFIp'@;
put 'e2Zvcih2YXIgaz1PZShSKSxHPTA7RzxTLmxlbmd0aDsrK0cpe3ZhciBRPSEwLG9lPVNbR107aWYob2UmJmsubGVuZ3RoPT1PZShvZSkubGVuZ3RoJiYoay5mb3JFYWNoKGZ1bmN0aW9uKGdlKXtpZihRKXtpZihudWxsPT09UltnZV0hPShudWxsPT09b2VbZ2VdKSlyZXR1cm4gdm9pZChRPSEx'@;
put 'KTtpZigib2JqZWN0Ij09dHlwZW9mIFJbZ2VdKWlmKFsiY29sb3IiLCJmZ0NvbG9yIiwiYmdDb2xvciJdLmluZGV4T2YoZ2UpPi0xKXtpZihvaChSW2dlXSxvZVtnZV0pKXJldHVybiB2b2lkKFE9ITEpfWVsc2V7aWYoIShbImxlZnQiLCJyaWdodCIsInRvcCIsImJvdHRvbSJdLmluZGV4T2Yo'@;
put 'Z2UpPi0xKSlyZXR1cm4gdm9pZChRPSExKTtpZihoayhSW2dlXSxvZVtnZV0pKXJldHVybiB2b2lkKFE9ITEpfWlmKFJbZ2VdIT1vZVtnZV0pcmV0dXJuIHZvaWQoUT0hMSl9fSksUSkpcmV0dXJuIEd9cmV0dXJuIFNbUy5sZW5ndGhdPXF0KFIpLFMubGVuZ3RoLTF9ZnVuY3Rpb24gbDAoUyxS'@;
put 'LGssRyl7dmFyIFE9Ry5yZXZzc2ZbbnVsbCE9ay56P2suejoiR2VuZXJhbCJdLG9lPTYwLGdlPVMubGVuZ3RoO2lmKG51bGw9PVEmJkcuc3NmKWZvcig7b2U8MzkyOysrb2UpaWYobnVsbD09Ry5zc2Zbb2VdKXtBLmxvYWQoay56LG9lKSxHLnNzZltvZV09ay56LEcucmV2c3NmW2suel09UT1v'@;
put 'ZTticmVha312YXIgcGU9MCx5ZT0wLFBlPTAsTmU9MDtpZihHLmNlbGxTdHlsZXMpe2lmKGsucyl7aWYoRy5Gb250cyl7ay5zLmNvbG9yfHwoay5zLmNvbG9yPXt0aGVtZToxLHJnYjoiMDAwMDAwIn0pO2Zvcih2YXIgWWU9KGsucy5ib2xkPzE6MCl8KGsucy5pdGFsaWM/MjowKXwoay5zLnN0'@;
put 'cmlrZT80OjApfChrLnMuc2hhZG93Pzg6MCk7cGU8Ry5Gb250cy5sZW5ndGg7KytwZSl7dmFyIGV0PUcuRm9udHNbcGVdO2lmKG51bGw9PWV0LmZvbnRoYXNoJiYoZXQuZm9udGhhc2g9KGV0LmJvbGQ/MTowKXwoZXQuaXRhbGljPzI6MCl8KGV0LnN0cmlrZT80OjApfChldC5zaGFkb3c/ODow'@;
put 'KSksIShZZSE9ZXQuZm9udGhhc2h8fCEhay5zLmNvbG9yIT0hIWV0LmNvbG9yfHxrLnMudmFsaWduIT1ldC52YWxpZ258fChrLnMuc3p8fGV0LnN6KSYmKGsucy5zenx8MTIpIT0oZXQuc3p8fDEyKXx8ay5zLm5hbWUmJmsucy5uYW1lIT1ldC5uYW1lfHwoay5zLnVuZGVybGluZXx8MCkhPShl'@;
put 'dC51bmRlcmxpbmV8fDApfHxrLnMuY29sb3ImJm9oKGsucy5jb2xvcixldC5jb2xvcikpKWJyZWFrfXBlPT1HLkZvbnRzLmxlbmd0aCYmKEcuRm9udHMucHVzaCh7c3o6ay5zLnN6fHwxMixjb2xvcjprLnMuY29sb3J8fHt0aGVtZToxLHJnYjoiMDAwMDAwIn0sbmFtZTprLnMubmFtZXx8IkNh'@;
put 'bGlicmkiLGZhbWlseTprLnMuZmFtaWx5fHwyLHNjaGVtZTprLnMuc2NoZW1lLGJvbGQ6ay5zLmJvbGQsaXRhbGljOmsucy5pdGFsaWMsc3RyaWtlOmsucy5zdHJpa2Usc2hhZG93Omsucy5zaGFkb3csdmFsaWduOmsucy52YWxpZ24sdW5kZXJsaW5lOmsucy51bmRlcmxpbmV9KSwxPT1HLkZv'@;
put 'bnRzLmxlbmd0aCYmSTQoRy5Gb250c1swXSkpfWlmKEcuRmlsbHMpe2Zvcig7eWU8Ry5GaWxscy5sZW5ndGg7Kyt5ZSl7dmFyIGN0PUcuRmlsbHNbeWVdO2lmKCEhay5zLnN0b3BzPT0hIWN0LnN0b3BzKXtpZihrLnMuc3RvcHMpe2lmKGsucy5hbmdsZSE9Y3QuYW5nbGUpY29udGludWU7dmFy'@;
put 'IEV0PSEwO2lmKGsucy5zdG9wcy5mb3JFYWNoKGZ1bmN0aW9uKGt0LE90KXtvaChrdCxjdC5zdG9wc1tPdF0pJiYoRXQ9ITEpLGt0LnYhPWN0LnN0b3BzW090XS52JiYoRXQ9ITEpfSksIUV0KWNvbnRpbnVlfWVsc2V7aWYobnVsbD09ay5zLnBhdHRlcm5UeXBlJiZrLnMuZmdDb2xvciYmKGsu'@;
put 'cy5wYXR0ZXJuVHlwZT0ic29saWQiKSxudWxsPT1rLnMucGF0dGVyblR5cGUpYnJlYWs7aWYoay5zLnBhdHRlcm5UeXBlIT1jdC5wYXR0ZXJuVHlwZXx8b2goay5zLmZnQ29sb3IsY3QuZmdDb2xvcil8fG9oKGsucy5iZ0NvbG9yLGN0LmJnQ29sb3IpKWNvbnRpbnVlfWJyZWFrfX1pZih5ZT09'@;
put 'Ry5GaWxscy5sZW5ndGgpe3ZhciBhdD17fTtrLnMuc3RvcHM/KG51bGwhPWsucy5hbmdsZSYmKGF0LmFuZ2xlPWsucy5hbmdsZSksYXQuc3RvcHM9W10say5zLnN0b3BzLmZvckVhY2goZnVuY3Rpb24oa3Qpe2F0LnN0b3BzLnB1c2gocXQoa3QpKX0pKTphdD17cGF0dGVyblR5cGU6ay5zLnBh'@;
put 'dHRlcm5UeXBlLGZnQ29sb3I6ay5zLmZnQ29sb3IsYmdDb2xvcjprLnMuYmdDb2xvcn0sRy5GaWxscy5wdXNoKGF0KX19aWYoRy5Cb3JkZXJzKXtmb3IoO1BlPEcuQm9yZGVycy5sZW5ndGg7KytQZSl7dmFyIGJ0PUcuQm9yZGVyc1tQZV0sanQ9InRvcCI7aWYoay5zW2p0XSl7aWYoIWJ0W2p0'@;
put 'XXx8ay5zW2p0XS5zdHlsZSE9YnRbanRdLnN0eWxlfHxvaChrLnNbanRdLmNvbG9yLGJ0W2p0XS5jb2xvcikpY29udGludWV9ZWxzZSBpZihudWxsIT1idFtqdF0pY29udGludWU7aWYoay5zW2p0PSJib3R0b20iXSl7aWYoIWJ0W2p0XXx8ay5zW2p0XS5zdHlsZSE9YnRbanRdLnN0eWxlfHxv'@;
put 'aChrLnNbanRdLmNvbG9yLGJ0W2p0XS5jb2xvcikpY29udGludWV9ZWxzZSBpZihudWxsIT1idFtqdF0pY29udGludWU7aWYoay5zW2p0PSJsZWZ0Il0pe2lmKCFidFtqdF18fGsuc1tqdF0uc3R5bGUhPWJ0W2p0XS5zdHlsZXx8b2goay5zW2p0XS5jb2xvcixidFtqdF0uY29sb3IpKWNvbnRp'@;
put 'bnVlfWVsc2UgaWYobnVsbCE9YnRbanRdKWNvbnRpbnVlO2lmKGsuc1tqdD0icmlnaHQiXSl7aWYoIWJ0W2p0XXx8ay5zW2p0XS5zdHlsZSE9YnRbanRdLnN0eWxlfHxvaChrLnNbanRdLmNvbG9yLGJ0W2p0XS5jb2xvcikpY29udGludWV9ZWxzZSBpZihudWxsIT1idFtqdF0pY29udGludWU7'@;
put 'YnJlYWt9UGU9PUcuQm9yZGVycy5sZW5ndGgmJkcuQm9yZGVycy5wdXNoKHt0b3A6ay5zLnRvcCYmcXQoay5zLnRvcCl8fHZvaWQgMCxib3R0b206ay5zLmJvdHRvbSYmcXQoay5zLmJvdHRvbSl8fHZvaWQgMCxsZWZ0Omsucy5sZWZ0JiZxdChrLnMubGVmdCl8fHZvaWQgMCxyaWdodDprLnMu'@;
put 'cmlnaHQmJnF0KGsucy5yaWdodCl8fHZvaWQgMH0pfWlmKFImJmsucy5zdHlsZSYmIk5vcm1hbCIhPT1rLnMuc3R5bGUpe2ZvcihOZT0xO05lPFIubGVuZ3RoJiZSW05lXS5uYW1lIT1rLnMuc3R5bGU7KytOZSk7TmU9PVIubGVuZ3RoJiZSLnB1c2goe25hbWU6ay5zLnN0eWxlLG51bUZtdElk'@;
put 'OlEsZm9udElkOnBlLGZpbGxJZDp5ZSxib3JkZXJJZDpQZX0pfX1mb3Iob2U9MDtvZSE9Z2U7KytvZSlpZihTW29lXS5udW1GbXRJZD09USYmU1tvZV0uZm9udElkPT1wZSYmU1tvZV0uZmlsbElkPT15ZSYmU1tvZV0uYm9yZGVySWQ9PVBlJiZTW29lXS54ZklkPT1OZSl7aWYoay5zJiZrLnMu'@;
put 'YWxpZ25tZW50KXtpZighU1tvZV0uYWxpZ25tZW50KWNvbnRpbnVlO2lmKGsucy5hbGlnbm1lbnQuaG9yaXpvbnRhbCE9U1tvZV0uYWxpZ25tZW50Lmhvcml6b250YWx8fGsucy5hbGlnbm1lbnQudmVydGljYWwhPVNbb2VdLmFsaWdubWVudC52ZXJ0aWNhbHx8ay5zLmFsaWdubWVudC53cmFw'@;
put 'VGV4dCE9U1tvZV0uYWxpZ25tZW50LndyYXBUZXh0fHxrLnMuYWxpZ25tZW50LnNocmlua1RvRml0IT1TW29lXS5hbGlnbm1lbnQuc2hyaW5rVG9GaXR8fGsucy5hbGlnbm1lbnQudGV4dFJvdGF0aW9uIT1TW29lXS5hbGlnbm1lbnQudGV4dFJvdGF0aW9ufHxrLnMuYWxpZ25tZW50LmluZGVu'@;
put 'dCE9U1tvZV0uYWxpZ25tZW50LmluZGVudCljb250aW51ZX1lbHNlIGlmKFNbb2VdLmFsaWdubWVudCljb250aW51ZTtpZihrLnMpe2lmKCEhay5zLmhpZGRlbj09KCFTW29lXS5wcm90ZWN0aW9ufHwhU1tvZV0ucHJvdGVjdGlvbi5oaWRkZW4pfHwhIWsucy5lZGl0YWJsZT09KCFTW29lXS5w'@;
put 'cm90ZWN0aW9ufHwhU1tvZV0ucHJvdGVjdGlvbi5lZGl0YWJsZSkpY29udGludWV9ZWxzZSBpZihTW29lXS5wcm90ZWN0aW9uKWNvbnRpbnVlO3JldHVybiBvZX19ZWxzZSBmb3Iob2U9MDtvZSE9Z2U7KytvZSlpZihTW29lXS5udW1GbXRJZD09PVEpcmV0dXJuIG9lO3JldHVybiBTW2dlXT17'@;
put 'bnVtRm10SWQ6USxmb250SWQ6cGUsZmlsbElkOnllLGJvcmRlcklkOlBlLHhmSWQ6TmUsYXBwbHlOdW1iZXJGb3JtYXQ6MX0scGU+MCYmKFNbZ2VdLmFwcGx5Rm9udD0xKSx5ZT4wJiYoU1tnZV0uYXBwbHlGaWxsPTEpLFBlPjAmJihTW2dlXS5hcHBseUJvcmRlcj0xKSwhUiYmay5zJiZrLnMu'@;
put 'c3R5bGUmJiJOb3JtYWwiIT1rLnMuc3R5bGUmJihTW2dlXS5zdHlsZT1rLnMuc3R5bGUpLGsucyYmay5zLmFsaWdubWVudCYmKFNbZ2VdLmFsaWdubWVudD17fSxbImhvcml6b250YWwiLCJ2ZXJ0aWNhbCIsIndyYXBUZXh0Iiwic2hyaW5rVG9GaXQiLCJpbmRlbnQiLCJ0ZXh0Um90YXRpb24i'@;
put 'XS5mb3JFYWNoKGZ1bmN0aW9uKGt0KXtudWxsIT1rLnMuYWxpZ25tZW50W2t0XSYmKFNbZ2VdLmFsaWdubWVudFtrdF09ay5zLmFsaWdubWVudFtrdF0pfSkpLGsucyYmay5zLmhpZGRlbiYmKFNbZ2VdLnByb3RlY3Rpb258fChTW2dlXS5wcm90ZWN0aW9uPXt9KSxTW2dlXS5wcm90ZWN0aW9u'@;
put 'LmhpZGRlbj0hMCksay5zJiZrLnMuZWRpdGFibGUmJihTW2dlXS5wcm90ZWN0aW9ufHwoU1tnZV0ucHJvdGVjdGlvbj17fSksU1tnZV0ucHJvdGVjdGlvbi5lZGl0YWJsZT0hMCksZ2V9ZnVuY3Rpb24gSjMoUyxSLGssRyxRLG9lLGdlLHBlKXsiZCI9PT1TLnQmJiJzdHJpbmciPT10eXBlb2Yg'@;
put 'Uy52JiYoUy52PUhlKFMudikpO3RyeXtvZS5jZWxsTkYmJihTLno9QS5fdGFibGVbUl0pfWNhdGNoKFBlKXtpZihvZS5XVEYpdGhyb3cgUGV9aWYoKCFvZXx8ITEhPT1vZS5jZWxsVGV4dCkmJiJ6IiE9Uy50KXRyeXtpZihudWxsPT1BLl90YWJsZVtSXSYmQS5sb2FkKHNlW1JdfHwiR2VuZXJh'@;
put 'bCIsUiksImUiPT09Uy50KVMudz1TLnd8fE1jW1Mudl07ZWxzZSBpZigwPT09UilpZigibiI9PT1TLnQpUy53PSgwfFMudik9PT1TLnY/QS5fZ2VuZXJhbF9pbnQoUy52KTpBLl9nZW5lcmFsX251bShTLnYpO2Vsc2UgaWYoImQiPT09Uy50KXt2YXIgeWU9UWUoUy52KTtTLnc9KDB8eWUpPT09'@;
put 'eWU/QS5fZ2VuZXJhbF9pbnQoeWUpOkEuX2dlbmVyYWxfbnVtKHllKX1lbHNle2lmKHZvaWQgMD09PVMudilyZXR1cm4iIjtTLnc9QS5fZ2VuZXJhbChTLnYsYzgpfWVsc2UgUy53PUEuZm9ybWF0KFIsImQiPT09Uy50P1FlKFMudik6Uy52LGM4KX1jYXRjaChQZSl7aWYob2UuV1RGKXRocm93'@;
put 'IFBlfWlmKG9lLmNlbGxTdHlsZXMmJnBlKXtpZihTLnM9e30sbnVsbCE9ayYmcGUuRmlsbHMpdHJ5e1B0KFMucyxwZS5GaWxsc1trXSl9Y2F0Y2goUGUpe2lmKG9lLldURil0aHJvdyBQZX1pZihudWxsIT1HJiZwZS5Gb250cyl0cnl7UHQoUy5zLHBlLkZvbnRzW0ddKX1jYXRjaChQZSl7aWYo'@;
put 'b2UuV1RGKXRocm93IFBlfWlmKG51bGwhPVEmJnBlLkJvcmRlcnMpdHJ5e1B0KFMucyxwZS5Cb3JkZXJzW1FdKX1jYXRjaChQZSl7aWYob2UuV1RGKXRocm93IFBlfX19ZnVuY3Rpb24gbUQoUyxSLGspe2lmKFMmJlNbIiFyZWYiXSl7dmFyIEc9b28oU1siIXJlZiJdKTtpZihHLmUuYzxHLnMu'@;
put 'Y3x8Ry5lLnI8Ry5zLnIpdGhyb3cgbmV3IEVycm9yKCJCYWQgcmFuZ2UgKCIraysiKTogIitTWyIhcmVmIl0pfX12YXIgZDg9LzwoPzpcdzopP21lcmdlQ2VsbCByZWY9IltBLVowLTk6XSsiXHMqW1wvXT8+L2csdkQ9LzwoPzpcdys6KT9zaGVldERhdGFbXj5dKj4oW1xzXFNdKik8XC8oPzpc'@;
put 'dys6KT9zaGVldERhdGE+Lyx1Uz0vPCg/Olx3Oik/aHlwZXJsaW5rIFtePl0qPi9nbSxzYj0vIihcdyo6XHcqKSIvLHRqPS88KD86XHc6KT9jb2xcYltePl0qW1wvXT8+L2csYkQ9LzwoPzpcdzopP2NvbnRyb2xcYltePl0qW1wvXT8+L2csbmo9LzwoPzpcdzopP2F1dG9GaWx0ZXJbXj5dKihb'@;
put 'XC9dfD4oW1xzXFNdKik8XC8oPzpcdzopP2F1dG9GaWx0ZXIpPi9nLHlEPS88KD86XHc6KT9wYWdlTWFyZ2luc1tePl0qXC8+L2csX0Q9LzwoPzpcdzopP3NoZWV0UHJcYig/OltePmEtel1bXj5dKik/XC8+Lyx3RD0vPCg/Olx3Oik/c2hlZXRQcm90ZWN0aW9uXGIoPzpbXj5hLXpdW14+XSop'@;
put 'P1wvPi8sQ0Q9LzwoPzpcdzopP3NoZWV0UHJbXj5dKig/OltcL118PihbXHNcU10qKTxcLyg/Olx3Oik/c2hlZXRQcik+LyxSbz0vPCg/Olx3Oik/c2hlZXRWaWV3c1tePl0qKD86W1wvXXw+KFtcc1xTXSopPFwvKD86XHc6KT9zaGVldFZpZXdzKT4vLGZlPS88KD86XHcrOik/ZGF0YVZhbGlk'@;
put 'YXRpb25zW14+XSooPzpbXC9dfD4oW1xzXFNdKj8pPFwvKD86XHcrOik/ZGF0YVZhbGlkYXRpb25zKT4vLGRTPS88KD86XHcrOik/Y29uZGl0aW9uYWxGb3JtYXR0aW5nXGJbXj5dKig/OltcL118PihbXHNcU10qPyk8XC8oPzpcdys6KT9jb25kaXRpb25hbEZvcm1hdHRpbmcpPi9nLEdlPS88'@;
put 'KD86XHc6KT9zaGVldEZvcm1hdFByW14+XSpcLz4vLFNEPS88KD86XHcrOik/dGFibGVQYXJ0cy4qPz4oW1xzXFNdKj8pPFwvKD86XHcrOik/dGFibGVQYXJ0cz4vLE1EPS88KD86XHc6KT9wYWdlU2V0dXBbXj5dKlwvPi8scmo9LzwoPzpcdzopP3Jvd0JyZWFrc1tePl0qKD86W1wvXXw+KFtc'@;
put 'c1xTXSopPFwvKD86XHc6KT9yb3dCcmVha3MpPi8sbGI9LzwoPzpcdzopP2NvbEJyZWFrc1tePl0qKD86W1wvXXw+KFtcc1xTXSopPFwvKD86XHc6KT9jb2xCcmVha3MpPi8sajU9LzwoPzpcdzopP2hlYWRlckZvb3RlcltePl0qKD86W1wvXXw+KFtcc1xTXSopPFwvKD86XHc6KT9oZWFkZXJG'@;
put 'b290ZXIpPi8saFM9LzwoPzpcdzopP3ByaW50T3B0aW9uc1xiW14+XC9dKlwvPi87dmFyIGZTPS88KD86XHc6KT90YWJsZVBhcnRcYlteXC8+XSpbXC9dPz4vZztmdW5jdGlvbiBjYihTLFIsayxHKXt2YXIgUT12cihTKTtrLlNoZWV0c1tHXXx8KGsuU2hlZXRzW0ddPXt9KSxRLmNvZGVOYW1l'@;
put 'JiYoay5TaGVldHNbR10uQ29kZU5hbWU9US5jb2RlTmFtZSl9dmFyIG1TPS88KD86XHc6KT90YWJDb2xvcltePl0qW1wvXT8+Lyxpaj0vPCg/Olx3Oik/cGFnZVNldFVwUHJbXj5dKltcL10/Pi8sYWo9LzwoPzpcdzopP291dGxpbmVQcltePl0qW1wvXT8+LyxURD17ZGlzcGxheWVkOiJhc0Rp'@;
put 'c3BsYXllZCIsZW5kOiJhdEVuZCIsbm9uZToibm9uZSJ9LEFEPVZlKFREKSxrRD17ZGlzcGxheWVkOiJkaXNwbGF5ZWQiLG5vbmU6ImJsYW5rIixkYXNoOiJkYXNoIiwibi9hIjoiTkEifSxERD1WZShrRCksRjA9LzwoPzpcdzopP2Jya1tePl0qXC8+L2csYlM9WyJvYmplY3RzIiwic2NlbmFy'@;
put 'aW9zIiwic2VsZWN0TG9ja2VkQ2VsbHMiLCJzZWxlY3RVbmxvY2tlZENlbGxzIl0sTEQ9WyJmb3JtYXRDb2x1bW5zIiwiZm9ybWF0Um93cyIsImZvcm1hdENlbGxzIiwiaW5zZXJ0Q29sdW1ucyIsImluc2VydFJvd3MiLCJpbnNlcnRIeXBlcmxpbmtzIiwiZGVsZXRlQ29sdW1ucyIsImRlbGV0'@;
put 'ZVJvd3MiLCJzb3J0IiwiYXV0b0ZpbHRlciIsInBpdm90VGFibGVzIl07ZnVuY3Rpb24gUEQoUyl7dmFyIFI9e307cmV0dXJuWyJsZWZ0IiwicmlnaHQiLCJ0b3AiLCJib3R0b20iLCJoZWFkZXIiLCJmb290ZXIiXS5mb3JFYWNoKGZ1bmN0aW9uKGspe1Nba10mJihSW2tdPXBhcnNlRmxvYXQo'@;
put 'U1trXSkpfSksUn12YXIgdWg9e0N1c3RvbToiY3VzdG9tIixEYXRlOiJkYXRlIixUaW1lOiJ0aW1lIixMZW5ndGg6InRleHRMZW5ndGgiLExpc3Q6Imxpc3QiLERlY2ltYWw6ImRlY2ltYWwiLFdob2xlOiJ3aG9sZSIsQW55OiJub25lIn0sX1M9VmUodWgpLHViPXtJTjoiYmV0d2VlbiIsT1Q6'@;
put 'Im5vdEJldHdlZW4iLEVROiJlcXVhbCIsTkU6Im5vdEVxdWFsIixHVDoiZ3JlYXRlclRoYW4iLExUOiJsZXNzVGhhbiIsR0U6ImdyZWF0ZXJUaGFuT3JFcXVhbCIsTEU6Imxlc3NUaGFuT3JFcXVhbCJ9LEZEPVZlKHViKTtmdW5jdGlvbiB3UyhTLFIsayl7dmFyIEc9W10sUT17fSxvZT0iIixn'@;
put 'ZT0hMSxwZT0wLHllPTA7cmV0dXJuIFMucmVwbGFjZShlbixmdW5jdGlvbihQZSxOZSl7dmFyIFllPXZyKFBlKTtzd2l0Y2goV24oWWVbMF0pKXtjYXNlIjxkYXRhVmFsaWRhdGlvbnMiOmNhc2UiPGRhdGFWYWxpZGF0aW9ucz4iOmNhc2UiPC9kYXRhVmFsaWRhdGlvbnM+IjpicmVhaztjYXNl'@;
put 'IjxkYXRhVmFsaWRhdGlvbiI6UT17dDpfU1tZZS50eXBlfHwibm9uZSJdLHJlZjoob2U9WWUuc3FyZWYpP29lLmluZGV4T2YoIiAiKT4tMT9vZTpvbyhvZSk6IiJ9LFllLm9wZXJhdG9yJiYoUS5vcD1GRFtZZS5vcGVyYXRvcl0pLFEuYmxhbms9ISFZZS5hbGxvd0JsYW5rJiZ0aShZZS5hbGxv'@;
put 'd0JsYW5rKSwoIVllLnNob3dJbnB1dE1lc3NhZ2V8fCF0aShZZS5zaG93SW5wdXRNZXNzYWdlKSkmJihRLmlucHV0PSExKSxZZS5wcm9tcHRUaXRsZSYmKChRLmlucHV0fHwoUS5pbnB1dD17fSkpLnRpdGxlPVFyKFllLnByb21wdFRpdGxlKSksWWUucHJvbXB0JiYoKFEuaW5wdXR8fChRLmlu'@;
put 'cHV0PXt9KSkubWVzc2FnZT1RcihZZS5wcm9tcHQpKSwoIVllLnNob3dFcnJvck1lc3NhZ2V8fCF0aShZZS5zaG93RXJyb3JNZXNzYWdlKSkmJihRLmVycm9yPSExKSxZZS5lcnJvclRpdGxlJiYoKFEuZXJyb3J8fChRLmVycm9yPXt9KSkudGl0bGU9UXIoWWUuZXJyb3JUaXRsZSkpLFllLmVy'@;
put 'cm9yJiYoKFEuZXJyb3J8fChRLmVycm9yPXt9KSkubWVzc2FnZT1RcihZZS5lcnJvcikpLFEuZXJyb3I/US5lcnJvci5zdHlsZT1ZZS5lcnJvclN0eWxlfHwic3RvcCI6WWUuZXJyb3JTdHlsZSYmKFEuZXJyb3I9e3N0eWxlOlllLmVycm9yU3R5bGV9KSxRLnQmJkcucHVzaChRKTticmVhaztj'@;
put 'YXNlIjxkYXRhVmFsaWRhdGlvbi8+IjpjYXNlIjwvZGF0YVZhbGlkYXRpb24+IjpicmVhaztjYXNlIjxzcXJlZj4iOnllPU5lK1BlLmxlbmd0aDticmVhaztjYXNlIjwvc3FyZWY+IjpvZT1TLnNsaWNlKHllLE5lKSxRLnJlZj1vZT9vZS5pbmRleE9mKCIgIik+LTE/b2U6b28ob2UpOiIiO2Jy'@;
put 'ZWFrO2Nhc2UiPGY+IjpjYXNlIjxmb3JtdWxhMSI6Y2FzZSI8Zm9ybXVsYTE+IjpjYXNlIjxmb3JtdWxhMiI6Y2FzZSI8Zm9ybXVsYTI+IjpwZT1OZStQZS5sZW5ndGg7YnJlYWs7Y2FzZSI8L2Zvcm11bGExPiI6Y2FzZSI8L2Zvcm11bGEyPiI6aWYoaylicmVhaztjYXNlIjwvZj4iOnZhciBl'@;
put 'dD1RcihnbyhTLnNsaWNlKHBlLE5lKSkpO3N3aXRjaChRLnQpe2Nhc2UiTGlzdCI6aWYoUS5sfHxRLmYpYnJlYWs7aWYoMzQ9PWV0LmNoYXJDb2RlQXQoMCkpe1EubD1ldC5zbGljZSgxLC0xKS5zcGxpdCgiLCIpO2JyZWFrfWNhc2UiQ3VzdG9tIjpudWxsPT1RLmYmJihRLmY9ZXQpO2JyZWFr'@;
put 'O2Nhc2UiRGF0ZSI6Y2FzZSJEZWNpbWFsIjpjYXNlIkxlbmd0aCI6Y2FzZSJUaW1lIjpjYXNlIldob2xlIjpRLm9wfHwoUS5vcD0iSU4iKSxudWxsPT1RLnY/US52PWlzTmFOKCtldCk/ZXQ6K2V0OihRLm1pbj1RLnYsUS5tYXg9aXNOYU4oK2V0KT9ldDorZXQsZGVsZXRlIFEudil9YnJlYWs7'@;
put 'Y2FzZSI8ZXh0THN0IjpjYXNlIjxleHRMc3Q+IjpjYXNlIjwvZXh0THN0PiI6YnJlYWs7Y2FzZSI8ZXh0IjpnZT0hMDticmVhaztjYXNlIjwvZXh0PiI6Z2U9ITE7YnJlYWs7ZGVmYXVsdDppZihSJiZSLldURiYmIWdlKXRocm93IG5ldyBFcnJvcigidW5yZWNvZ25pemVkICIrWWVbMF0rIiBp'@;
put 'biBkYXRhIHZhbGlkYXRpb24iKX1yZXR1cm4gUGV9KSxHfXZhciBmOD17SU46ImNvbnRhaW5zVGV4dCIsT1Q6Im5vdENvbnRhaW5zVGV4dCIsU1Q6ImJlZ2luc1dpdGgiLE5EOiJlbmRzV2l0aCJ9LGRiPVZlKGY4KSx5aj17TE06Imxhc3RNb250aCIsTFM6Imxhc3Q3RGF5cyIsTFc6Imxhc3RX'@;
put 'ZWVrIixOTToibmV4dE1vbnRoIixOVzoibmV4dFdlZWsiLFRNOiJ0aGlzTW9udGgiLFRXOiJ0aGlzV2VlayIsVEQ6InRvZGF5IixUTzoidG9tb3Jyb3ciLFlTOiJ5ZXN0ZXJkYXkifSxORD1WZSh5aik7ZnVuY3Rpb24gcDgoUyl7dmFyIFI9e307cmV0dXJuIG51bGwhPVMudmFsJiYoaXNOYU4o'@;
put 'K1MudmFsKT9SLmY9Uy52YWw6Ui52PStTLnZhbCksUi50PVMudHlwZSxSfWZ1bmN0aW9uIFc0KFMpe3JldHVybiBQcigiY2Z2byIsbnVsbCx7dHlwZTpTLnQsdmFsOm51bGwhPVMudj9TLnY6THIoUy5mKX0pfWZ1bmN0aW9uIHo1KFMsUixrLEcpe3ZhciBRPXA4KFMpO3JldHVybiBRLmNvbG9y'@;
put 'PWdrKFIsayxHKSxRfWZ1bmN0aW9uIHYyKFMsUixrLEcsUSl7dmFyIG9lPShTLm1hdGNoKC9zcXJlZj0iKFtcdzokIF0qKSIvKXx8W10pWzFdO3JldHVybiBmdW5jdGlvbiBDUyhTLFIsayxHLFEsb2Upe3ZhciBnZT0hMSxwZT1bXSx5ZT17ZjpbXX0sUGU9MCxOZT0wLFllPXtjZnZvczpbXSxj'@;
put 'b2xvcnM6W119LGV0PXt9LGN0PS0xLEV0PTAsYXQ9IiI7cmV0dXJuIFMucmVwbGFjZShlbixmdW5jdGlvbihidCxqdCl7dmFyIGt0PXZyKGJ0KTtzd2l0Y2goV24oa3RbMF0pKXtjYXNlIjxjb25kaXRpb25hbEZvcm1hdHRpbmciOmNhc2UiPC9jb25kaXRpb25hbEZvcm1hdHRpbmc+IjpicmVh'@;
put 'aztjYXNlIjxjZlJ1bGUiOmNhc2UiPGNmUnVsZT4iOmlmKE5lPWp0LGV0PWt0LHllPXtyZWY6UixmOltdfSwhYnQubWF0Y2goL1wvPi8pKWJyZWFrO2Nhc2UiPC9jZlJ1bGU+Ijpzd2l0Y2goZXQuZHhmSWQmJlEmJlEuRFhGJiYoeWUucz1RLkRYRlsrZXQuZHhmSWRdKSxldC50eXBlKXtjYXNl'@;
put 'ImR1cGxpY2F0ZVZhbHVlcyI6eWUudD0iZHVwIjticmVhaztjYXNlInVuaXF1ZVZhbHVlcyI6eWUudD0idW5pcXVlIjticmVhaztjYXNlImNvbnRhaW5zQmxhbmtzIjp5ZS50PSJibGFuayIseWUudj0hMDticmVhaztjYXNlIm5vdENvbnRhaW5zQmxhbmtzIjp5ZS50PSJibGFuayIseWUudj0h'@;
put 'MTticmVhaztjYXNlImNvbnRhaW5zRXJyb3JzIjp5ZS50PSJlcnJvciIseWUudj0hMDticmVhaztjYXNlIm5vdENvbnRhaW5zRXJyb3JzIjp5ZS50PSJlcnJvciIseWUudj0hMTticmVhaztjYXNlImNlbGxJcyI6c3dpdGNoKGV0Lm9wZXJhdG9yKXtjYXNlImNvbnRhaW5zVGV4dCI6Y2FzZSJu'@;
put 'b3RDb250YWlucyI6Y2FzZSJiZWdpbnNXaXRoIjpjYXNlImVuZHNXaXRoIjppZih5ZS50PSJ0ZXh0Iix5ZS5vcD1kYltldC5vcGVyYXRvcl0sbnVsbD09ZXQudGV4dCl0aHJvdyBuZXcgRXJyb3IoIkNGIFRleHQgUnVsZSAiK3llLm9wKyIgbWlzc2luZyB0ZXh0Iik7eWUudj1ldC50ZXh0LHll'@;
put 'LmY9eWUuZlswXSxudWxsPT15ZS5mJiZkZWxldGUgeWUuZjticmVhaztkZWZhdWx0OnllLnQ9InZhbCIseWUub3A9RkRbZXQub3BlcmF0b3JdLDE9PXllLmYubGVuZ3RoP2lzTmFOKCt5ZS5mWzBdKT95ZS5mPXllLmZbMF06KHllLnY9K3llLmZbMF0sZGVsZXRlIHllLmYpOih5ZS5taW49aXNO'@;
put 'YU4oK3llLmZbMF0pP3llLmZbMF06K3llLmZbMF0seWUubWF4PWlzTmFOKCt5ZS5mWzFdKT95ZS5mWzFdOit5ZS5mWzFdLGRlbGV0ZSB5ZS5mKX1icmVhaztjYXNlImV4cHJlc3Npb24iOnllLnQ9ImZvcm11bGEiLHllLmY9eWUuZlswXTticmVhaztjYXNlImNvbnRhaW5zVGV4dCI6Y2FzZSJu'@;
put 'b3RDb250YWluc1RleHQiOmNhc2UiYmVnaW5zV2l0aCI6Y2FzZSJlbmRzV2l0aCI6aWYoeWUudD0idGV4dCIseWUub3A9ZGJbZXQudHlwZV0sbnVsbD09ZXQudGV4dCYmeWUuZi5sZW5ndGg8Mil0aHJvdyBuZXcgRXJyb3IoIkNGIFRleHQgUnVsZSAiK3llLm9wKyIgbWlzc2luZyB0ZXh0Iik7'@;
put 'eWUudj1udWxsIT1ldC50ZXh0P2V0LnRleHQ6eWUuZlsxXS5tYXRjaCgvIi4qIi8pP3llLmZbMV0uc2xpY2UoMSwtMSk6eWUuZlsxXSx5ZS5mPXllLmZbMF0sbnVsbD09eWUuZiYmZGVsZXRlIHllLmY7YnJlYWs7Y2FzZSJjb2xvclNjYWxlIjppZih5ZS50PSJzY2FsZSIsIXllLmNvbG9yU2Nh'@;
put 'bGUpdGhyb3cgbmV3IEVycm9yKCJtaXNzaW5nIGNvbG9yU2NhbGUiKTt5ZS5jbWluPXo1KChZZT15ZS5jb2xvclNjYWxlKS5jZnZvc1swXSxZZS5jb2xvcnNbMF0sUSxHKSwzPT1ZZS5jZnZvcy5sZW5ndGgmJih5ZS5jbWlkPXo1KFllLmNmdm9zWzFdLFllLmNvbG9yc1sxXSxRLEcpKSx5ZS5j'@;
put 'bWF4PXo1KFllLmNmdm9zW1llLmNmdm9zLmxlbmd0aC0xXSxZZS5jb2xvcnNbWWUuY2Z2b3MubGVuZ3RoLTFdLFEsRyk7YnJlYWs7Y2FzZSJkYXRhQmFyIjppZih5ZS50PSJiYXIiLCF5ZS5kYXRhQmFyKXRocm93IG5ldyBFcnJvcigibWlzc2luZyBkYXRhQmFyIik7KFllPXllLmRhdGFCYXIp'@;
put 'LmNvbG9yc1swXSYmKHllLmNvbG9yPWdrKFllLmNvbG9yc1swXSxRLEcpKSx5ZS5jbWluPXA4KFllLmNmdm9zWzBdKSx5ZS5jbWF4PXA4KFllLmNmdm9zWzFdKTticmVhaztjYXNlImljb25TZXQiOmlmKHllLnQ9Imljb24iLCF5ZS5pY29uU2V0KXRocm93IG5ldyBFcnJvcigibWlzc2luZyBp'@;
put 'Y29uU2V0Iik7eWUudGhyZXNoPShZZT15ZS5pY29uU2V0KS5jZnZvcy5tYXAoZnVuY3Rpb24oT3Qpe3JldHVybiBwOChPdCl9KSx5ZS52PVllLnRhZyYmWWUudGFnLmljb25TZXR8fCIzVHJhZmZpY0xpZ2h0czEiLHllLnJldj10aShZZS50YWcucmV2ZXJzZXx8ImZhbHNlIikseWUucGN0PXRp'@;
put 'KFllLnRhZy5wZXJjZW50fHwidHJ1ZSIpLHllLmhpZGRlbj0hdGkoWWUudGFnLnNob3dWYWx1ZXx8InRydWUiKTticmVhaztjYXNlInRpbWVQZXJpb2QiOnllLnQ9ImRhdGUiLHllLm9wPU5EW2V0LnRpbWVQZXJpb2RdO2JyZWFrO2Nhc2UiYWJvdmVBdmVyYWdlIjp5ZS50PSJhdmciLHllLm9w'@;
put 'PSIwIj09ZXQuYWJvdmVBdmVyYWdlPyJMIjoiRyIseWUub3ArPWV0LnN0ZERldj9ldC5zdGREZXY6dGkoZXQuZXF1YWxBdmVyYWdlfHwiMCIpPyJFIjoiVCI7YnJlYWs7Y2FzZSJ0b3AxMCI6eWUudD0icmFuayIseWUub3A9KHRpKGV0LmJvdHRvbXx8IjAiKT8iQiI6IlQiKSsodGkoZXQucGVy'@;
put 'Y2VudHx8IjAiKT8iUCI6IlYiKSx5ZS52PStldC5yYW5rO2JyZWFrO2RlZmF1bHQ6dGhyb3ciVW5zdXBwb3J0ZWQgQ0YgVHlwZSAiK2V0LnR5cGV9aWYoZGVsZXRlIHllLmNvbG9yU2NhbGUsZGVsZXRlIHllLmRhdGFCYXIsZGVsZXRlIHllLmljb25TZXQsIXllLnQpdGhyb3cgY29uc29sZS5s'@;
put 'b2coUy5zbGljZShOZSxqdCtidC5sZW5ndGgpKSwiYmFkIENGIHJ1bGUiO251bGwhPXllLmYmJiF5ZS5mLmxlbmd0aCYmZGVsZXRlIHllLmYseWUuZGVsfHxwZS5wdXNoKHllKTticmVhaztjYXNlIjxmb3JtdWxhIjpjYXNlIjxmb3JtdWxhPiI6UGU9anQrYnQubGVuZ3RoO2JyZWFrO2Nhc2Ui'@;
put 'PC9mb3JtdWxhPiI6eWUuZi5wdXNoKFFyKFMuc2xpY2UoUGUsanQpKSk7YnJlYWs7Y2FzZSI8ZiI6Y2FzZSI8Zj4iOlBlPWp0K2J0Lmxlbmd0aDticmVhaztjYXNlIjwvZj4iOnllLmYucHVzaChRcihTLnNsaWNlKFBlLGp0KSkpO2JyZWFrO2Nhc2UiPHNxcmVmPiI6RXQ9anQrYnQubGVuZ3Ro'@;
put 'O2JyZWFrO2Nhc2UiPC9zcXJlZj4iOmF0PVMuc2xpY2UoRXQsanQpLFI9YXQ/YXQuaW5kZXhPZigiICIpPi0xP2F0Om9vKGF0KToiIix5ZS5yZWY9UixwZS5mb3JFYWNoKGZ1bmN0aW9uKE90KXtPdC5yZWY9Un0pO2JyZWFrO2Nhc2UiPGNvbG9yU2NhbGUiOmNhc2UiPGNvbG9yU2NhbGU+Ijpj'@;
put 'YXNlIjxkYXRhQmFyIjpjYXNlIjxkYXRhQmFyPiI6Y2FzZSI8aWNvblNldCI6Y2FzZSI8aWNvblNldD4iOlllPXtjZnZvczpbXSxjb2xvcnM6W10sdGFnOmt0fSxQZT1qdCtidC5sZW5ndGg7YnJlYWs7Y2FzZSI8L2NvbG9yU2NhbGU+Ijp5ZS5jb2xvclNjYWxlPVllO2JyZWFrO2Nhc2UiPC9k'@;
put 'YXRhQmFyPiI6eWUuZGF0YUJhcj1ZZTticmVhaztjYXNlIjwvaWNvblNldD4iOnllLmljb25TZXQ9WWU7YnJlYWs7Y2FzZSI8Y2Z2byI6Y2FzZSI8Y2Z2by8+IjpZZS5jZnZvcy5wdXNoKGt0KTticmVhaztjYXNlIjwvY2Z2bz4iOmJyZWFrO2Nhc2UiPGNvbG9yIjpZZS5jb2xvcnMucHVzaChr'@;
put 'dCk7YnJlYWs7Y2FzZSI8L2NvbG9yPiI6Y2FzZSI8ZXh0THN0IjpjYXNlIjxleHRMc3Q+IjpjYXNlIjwvZXh0THN0PiI6YnJlYWs7Y2FzZSI8ZXh0IjpnZT0hMDticmVhaztjYXNlIjwvZXh0PiI6Z2U9ITE7YnJlYWs7Y2FzZSI8bmVnYXRpdmVGaWxsQ29sb3IiOmNhc2UiPGF4aXNDb2xvciI6'@;
put 'Y2FzZSI8Ym9yZGVyQ29sb3IiOmNhc2UiPG5lZ2F0aXZlQm9yZGVyQ29sb3IiOmNhc2UiPGNmSWNvbiI6eWUuZGVsPSEwO2JyZWFrO2Nhc2UiPGR4Zj4iOmdlPSEwLGN0PWp0O2JyZWFrO2Nhc2UiPC9keGY+IjpnZT0hMSx5ZS5zPUw0KFMuc2xpY2UoY3QsanQrYnQubGVuZ3RoKSxRLEcsayk7'@;
put 'YnJlYWs7ZGVmYXVsdDppZihrJiZrLldURil7aWYob2UpYnJlYWs7aWYoIWdlKXRocm93IG5ldyBFcnJvcigidW5yZWNvZ25pemVkICIra3RbMF0rIiBpbiBjb25kZm10Iil9fXJldHVybiBidH0pLHBlfShTLG9lLFIsayxHLFEpfXZhciBTUz0vPCg/Olx3Oik/c2hlZXRWaWV3KD86W14+YS16'@;
put 'XVtePl0qKT9cLz8+L2c7ZnVuY3Rpb24gbTgoUyxSKXt2YXIgaz0wLEc9MCxRPTAsb2U9MDtpZighUnx8IVIuQ2VsbFhmKXJldHVybiBudWxsO3ZhciBnZT1SLkNlbGxYZltTXTtudWxsIT1nZSYmKG51bGwhPWdlLm51bUZtdElkJiYoaz1nZS5udW1GbXRJZCksbnVsbCE9Z2UuZmlsbElkJiYo'@;
put 'Rz1nZS5maWxsSWQpLG51bGwhPWdlLmZvbnRJZCYmKFE9Z2UuZm9udElkKSxudWxsIT1nZS5ib3JkZXJJZCYmKG9lPWdlLmJvcmRlcklkKSk7dmFyIHBlPXt0OiJ6In07dHJ5e0ozKHBlLGssRyxRLG9lLHtXVEY6MSxjZWxsU3R5bGVzOiEwfSwwLFIpfWNhdGNoe31yZXR1cm4gcGUuc31mdW5j'@;
put 'dGlvbiBVNShTLFIsayxHKXtpZih2b2lkIDA9PT1TLnYmJnZvaWQgMD09PVMuZiYmbnVsbD09Uy5zJiYhUy5jfHwieiI9PT1TLnQmJiFTLmMmJiFHLnNoZWV0U3R1YnMpcmV0dXJuIiI7dmFyIFE9IiIsb2U9Uy50LGdlPVMudjtpZigieiIhPT1TLnQpc3dpdGNoKFMudCl7Y2FzZSJiIjpRPVMu'@;
put 'dj8iMSI6IjAiO2JyZWFrO2Nhc2UibiI6UT0iIitTLnY7YnJlYWs7Y2FzZSJlIjpRPU1jW1Mudl07YnJlYWs7Y2FzZSJkIjpHJiZHLmNlbGxEYXRlcz9RPUhlKFMudiwtMSkudG9JU09TdHJpbmcoKTooKFM9cXQoUykpLnQ9Im4iLFE9IiIrKFMudj1RZShIZShTLnYpKSkpLHR5cGVvZiBTLno+'@;
put 'InUiJiYoUy56PUEuX3RhYmxlWzE0XSk7YnJlYWs7ZGVmYXVsdDpRPVMudn12YXIgcGU9InoiPT1TLnQ/IiI6SGEoInYiLExyKFEpKSx5ZT17cjpSfSxQZT1HP2wwKEcuY2VsbFhmcyxHLmNlbGxTdHlsZVhmcyxTLEcpOjA7c3dpdGNoKDAhPT1QZSYmKHllLnM9UGUpLFMudCl7Y2FzZSJuIjpj'@;
put 'YXNlInoiOmJyZWFrO2Nhc2UiZCI6eWUudD0iZCI7YnJlYWs7Y2FzZSJiIjp5ZS50PSJiIjticmVhaztjYXNlImUiOnllLnQ9ImUiO2JyZWFrO2RlZmF1bHQ6aWYobnVsbD09Uy52KXtkZWxldGUgUy50O2JyZWFrfWlmKEcmJkcuYm9va1NTVCl7cGU9SGEoInYiLCIiK2FTKEcuU3RyaW5ncyxT'@;
put 'LnYsUy5SP1Mucj1RcyhTLlIpOm51bGwsRy5yZXZTdHJpbmdzKSkseWUudD0icyI7YnJlYWt9QXJyYXkuaXNBcnJheShTLlIpPyhwZT0iPGlzPiIrUXMoUy5SKSsiPC9pcz4iLHllLnQ9ImlubGluZVN0ciIpOnllLnQ9InN0ciJ9aWYoUy50IT1vZSYmKFMudD1vZSxTLnY9Z2UpLFMuZil7dmFy'@;
put 'IE5lPVMuRiYmUy5GLnNsaWNlKDAsUi5sZW5ndGgpPT1SP3t0OiJhcnJheSIscmVmOlMuRn06bnVsbDtwZT1QcigiZiIsTHIoUy5mKSxOZSkrKG51bGwhPVMudj9wZToiIil9cmV0dXJuIFMubCYma1siIWxpbmtzIl0ucHVzaChbUixTLmxdKSxTLmMmJmtbIiFjb21tZW50cyJdLnB1c2goW1Is'@;
put 'Uy5jXSksUHIoImMiLHBlLHllKX12YXIgdjg9ZnVuY3Rpb24oKXt2YXIgUz0vPCg/Olx3KzopP2NbIFwvPl0vLFI9LzxcLyg/Olx3KzopP3Jvdz4vLGs9L3I9WyInXShbXiInXSopWyInXS8sRz0vPCg/Olx3KzopP2lzPihbXFNcc10qPyk8XC8oPzpcdys6KT9pcz4vLFE9L3JlZj1bIiddKFte'@;
put 'IiddKilbIiddLyxvZT1EMCgidiIpLGdlPUQwKCJmIik7cmV0dXJuIGZ1bmN0aW9uKHllLFBlLE5lLFllLGV0LGN0LEV0KXtmb3IodmFyIFNuLGxyLGZyLGJyLExpLGF0PTAsYnQ9IiIsanQ9W10sa3Q9W10sT3Q9MCxLdD0wLFRuPTAscnI9IiIsWG49MCxCbj0wLGVyPTAsTWk9MCxGaT0wLG5h'@;
put 'PTAsY2E9QXJyYXkuaXNBcnJheShFdC5DZWxsWGYpLGtyPVtdLFZuPVtdLEJyPUFycmF5LmlzQXJyYXkoTmUpLF9yPVtdLEZuPXt9LGpyPSExLFppPXllLnNwbGl0KFIpLHlpPSEhWWUuc2hlZXRTdHVicyxfYT0hIVllLmNlbGxIVE1MLHNvPSEoITE9PT1ZZS5jZWxsVGV4dCYmIVllLmNlbGxO'@;
put 'RiYmIVllLmNlbGxTdHlsZXMpLGlhPTAsTG89WmkubGVuZ3RoO2lhIT1MbzsrK2lhKXt2YXIgT2E9KGJ0PVppW2lhXS50cmltKCkpLmxlbmd0aDtpZigwIT09T2Epe3ZhciBobz0wO2U6Zm9yKGF0PTA7YXQ8T2E7KythdClzd2l0Y2goYnRbYXRdKXtjYXNlIj4iOmlmKCIvIiE9YnRbYXQtMV0p'@;
put 'eysrYXQ7YnJlYWsgZX1ZZS5jZWxsU3R5bGVzJiZudWxsIT0obHI9dnIoYnQuc2xpY2UoaG8sYXQpLCEwKSkuciYmcGFyc2VJbnQobHIuciwxMCkmJihYbj1wYXJzZUludChsci5yLDEwKSxGbj17fSxqcj0hMSxsci5odCYmKGpyPSEwLEZuLmhwdD1wYXJzZUZsb2F0KGxyLmh0KSxGbi5ocHg9'@;
put 'c2goRm4uaHB0KSksbHIuZHlEZXNjZW50JiYoanI9ITAsRm4uZHlEZXNjZW50PWxyLmR5RGVzY2VudCksIjEiPT1sci5oaWRkZW4mJihqcj0hMCxGbi5oaWRkZW49ITApLG51bGwhPWxyLm91dGxpbmVMZXZlbCYmKGpyPSEwLEZuLmxldmVsPStsci5vdXRsaW5lTGV2ZWwpLGxyLnMmJkV0JiZF'@;
put 'dC5DZWxsWGYmJihqcj0hMCxGbi5zPW04KGxyLnMsRXQpKSxqciYmKF9yW1huLTFdPUZuKSk7YnJlYWs7Y2FzZSI8Ijpobz1hdH1pZihobz49YXQpYnJlYWs7aWYoWG49bnVsbCE9KGxyPXZyKGJ0LnNsaWNlKGhvLGF0KSwhMCkpLnI/cGFyc2VJbnQobHIuciwxMCk6WG4rMSxCbj0tMSwhKFll'@;
put 'LnNoZWV0Um93cyYmWWUuc2hlZXRSb3dzPFhuKSl7WWUubm9kaW18fChldC5zLnI+WG4tMSYmKGV0LnMucj1Ybi0xKSxldC5lLnI8WG4tMSYmKGV0LmUucj1Ybi0xKSk7dmFyIEphPXt0OiJyb3ciLHJvdzpbXSxSOlhuLTEsaWR4OlBlfTtZZS5jZWxsU3R5bGVzJiYoRm49e30sanI9ITEsbHIu'@;
put 'aHQmJihqcj0hMCxGbi5ocHQ9cGFyc2VGbG9hdChsci5odCksRm4uaHB4PXNoKEZuLmhwdCkpLGxyLmR5RGVzY2VudCYmKGpyPSEwLEZuLmR5RGVzY2VudD1sci5keURlc2NlbnQpLCIxIj09bHIuaGlkZGVuJiYoanI9ITAsRm4uaGlkZGVuPSEwKSxudWxsIT1sci5vdXRsaW5lTGV2ZWwmJihq'@;
put 'cj0hMCxGbi5sZXZlbD0rbHIub3V0bGluZUxldmVsKSxsci5zJiYoanI9ITAsRm4ucz1tOChsci5zLEV0KSksanImJihZZS5jYWxsYmFjaz9KYS5wcm9wcz1GbjpfcltYbi0xXT1GbikpLGp0PWJ0LnNsaWNlKGF0KS5zcGxpdChTKTtmb3IodmFyIEJpPTA7QmkhPWp0Lmxlbmd0aCYmIjwiPT1q'@;
put 'dFtCaV0udHJpbSgpLmNoYXJBdCgwKTsrK0JpKTtmb3IoanQ9anQuc2xpY2UoQmkpLGF0PTA7YXQhPWp0Lmxlbmd0aDsrK2F0KWlmKDAhPT0oYnQ9anRbYXRdLnRyaW0oKSkubGVuZ3RoKXtpZihrdD1idC5tYXRjaChrKSxPdD1hdCxLdD0wLFRuPTAsYnQ9IjxjICIrKCI8Ij09YnQuc2xpY2Uo'@;
put 'MCwxKT8iPiI6IiIpK2J0LG51bGwhPWt0JiYyPT09a3QubGVuZ3RoKXtmb3IoT3Q9MCxycj1rdFsxXSxLdD0wO0t0IT1yci5sZW5ndGgmJiEoKFRuPXJyLmNoYXJDb2RlQXQoS3QpLTY0KTwxfHxUbj4yNik7KytLdClPdD0yNipPdCtUbjtCbj0tLU90fWVsc2UrK0JuO2ZvcihLdD0wO0t0IT1i'@;
put 'dC5sZW5ndGgmJjYyIT09YnQuY2hhckNvZGVBdChLdCk7KytLdCk7aWYoKytLdCwobHI9dnIoYnQuc2xpY2UoMCxLdCksITApKS5yfHwobHIucj1xaSh7cjpYbi0xLGM6Qm59KSksU249e3Q6IiJ9LG51bGwhPShrdD0ocnI9YnQuc2xpY2UoS3QpKS5tYXRjaChvZSkpJiYiIiE9PWt0WzFdJiYo'@;
put 'U24udj1RcihrdFsxXSkpLFllLmNlbGxGb3JtdWxhKXtpZihudWxsIT0oa3Q9cnIubWF0Y2goZ2UpKSYmIiIhPT1rdFsxXSl7aWYoU24uZj1RcihnbyhrdFsxXSkpLnJlcGxhY2UoL1xyXG4vZywiXG4iKSxZZS54bGZufHwoU24uZj1FQihTbi5mKSksa3RbMF0uaW5kZXhPZigndD0iYXJyYXki'@;
put 'Jyk+LTEpU24uRj0ocnIubWF0Y2goUSl8fFtdKVsxXSxTbi5GLmluZGV4T2YoIjoiKT4tMSYma3IucHVzaChbb28oU24uRiksU24uRl0pO2Vsc2UgaWYoa3RbMF0uaW5kZXhPZigndD0ic2hhcmVkIicpPi0xKXticj12cihrdFswXSk7dmFyIElzPVFyKGdvKGt0WzFdKSk7WWUueGxmbnx8KElz'@;
put 'PUVCKElzKSksVm5bcGFyc2VJbnQoYnIuc2ksMTApXT1bYnIsSXMsbHIucl19fWVsc2Uoa3Q9cnIubWF0Y2goLzxmW14+XSpcLz4vKSkmJlZuWyhicj12cihrdFswXSkpLnNpXSYmKFNuLmY9ZG5lKFZuW2JyLnNpXVsxXSxWbltici5zaV1bMl0sbHIucikpO3ZhciBQbj1Obyhsci5yKTtmb3Io'@;
put 'S3Q9MDtLdDxrci5sZW5ndGg7KytLdClQbi5yPj1rcltLdF1bMF0ucy5yJiZQbi5yPD1rcltLdF1bMF0uZS5yJiZQbi5jPj1rcltLdF1bMF0ucy5jJiZQbi5jPD1rcltLdF1bMF0uZS5jJiYoU24uRj1rcltLdF1bMV0pfWlmKG51bGw9PWxyLnQmJnZvaWQgMD09PVNuLnYpaWYoU24uZnx8U24u'@;
put 'RilTbi52PTAsU24udD0ibiI7ZWxzZXtpZigheWkpY29udGludWU7U24udD0ieiJ9ZWxzZSBTbi50PWxyLnR8fCJuIjtzd2l0Y2goZXQucy5jPkJuJiYoZXQucy5jPUJuKSxldC5lLmM8Qm4mJihldC5lLmM9Qm4pLFNuLnQpe2Nhc2UibiI6aWYoIiI9PVNuLnZ8fG51bGw9PVNuLnYpe2lmKCF5'@;
put 'aSljb250aW51ZTtTbi50PSJ6In1lbHNlIFNuLnY9cGFyc2VGbG9hdChTbi52KTticmVhaztjYXNlInMiOmlmKHR5cGVvZiBTbi52PiJ1Iil7aWYoIXlpKWNvbnRpbnVlO1NuLnQ9InoifWVsc2UgZnI9bDhbcGFyc2VJbnQoU24udiwxMCldLFNuLnY9ZnIudCxTbi5yPWZyLnIsZnIuUiYmKFNu'@;
put 'LlI9ZnIuUiksX2EmJihTbi5oPWZyLmgpO2JyZWFrO2Nhc2Uic3RyIjpTbi50PSJzIixTbi52PW51bGwhPVNuLnY/Z28oU24udik6IiIsX2EmJihTbi5oPWxhKFNuLnYpKTticmVhaztjYXNlImlubGluZVN0ciI6a3Q9cnIubWF0Y2goRyksU24udD0icyIsbnVsbCE9a3QmJihmcj11QyhrdFsx'@;
put 'XSkpPyhTbi52PWZyLnQsZnIuUiYmKFNuLlI9ZnIuUiksX2EmJihTbi5oPWZyLmgpKTpTbi52PSIiO2JyZWFrO2Nhc2UiYiI6U24udj10aShTbi52KTticmVhaztjYXNlImQiOlllLmNlbGxEYXRlcz9Tbi52PUhlKFNuLnYsMSk6KFNuLnY9UWUoSGUoU24udiwxKSksU24udD0ibiIpO2JyZWFr'@;
put 'O2Nhc2UiZSI6ITEhPT1ZZS5jZWxsVGV4dCYmKFNuLnc9U24udiksU24udj1QM1tTbi52XX1pZihzbyl7ZXI9TWk9Rmk9bmE9MCxMaT1udWxsLGNhJiZ2b2lkIDAhPT1sci5zJiZudWxsIT0oTGk9RXQuQ2VsbFhmW2xyLnNdKSYmKG51bGwhPUxpLm51bUZtdElkJiYoZXI9TGkubnVtRm10SWQp'@;
put 'LFllLmNlbGxTdHlsZXMmJihudWxsIT1MaS5maWxsSWQmJihNaT1MaS5maWxsSWQpLG51bGwhPUxpLmZvbnRJZCYmKEZpPUxpLmZvbnRJZCksbnVsbCE9TGkuYm9yZGVySWQmJihuYT1MaS5ib3JkZXJJZCkpKTt0cnl7SjMoU24sZXIsTWksRmksbmEsWWUsMCxFdCl9Y2F0Y2h7fVllLmNlbGxT'@;
put 'dHlsZXMmJlNuLnMmJihMaSYmTGkuYWxpZ25tZW50JiYoU24ucy5hbGlnbm1lbnQ9cXQoTGkuYWxpZ25tZW50KSksTGkmJkxpLnByb3RlY3Rpb24mJihudWxsIT1MaS5wcm90ZWN0aW9uLmhpZGRlbiYmKFNuLnMuaGlkZGVuPUxpLnByb3RlY3Rpb24uaGlkZGVuKSxudWxsIT1MaS5wcm90ZWN0'@;
put 'aW9uLmVkaXRhYmxlJiYoU24ucy5lZGl0YWJsZT1MaS5wcm90ZWN0aW9uLmVkaXRhYmxlKSksTGkmJkxpLnN0eWxlJiYoU24ucy5zdHlsZT1MaS5zdHlsZSkpLFllLmNlbGxEYXRlcyYmY2EmJiJuIj09U24udCYmQS5pc19kYXRlKEEuX3RhYmxlW2VyXSkmJihTbi50PSJkIixTbi52PXVuKFNu'@;
put 'LnYpKX12YXIgV287WWUubm9kaW0mJihXbz1Obyhsci5yKSxldC5zLnI+V28uciYmKGV0LnMucj1Xby5yKSxldC5lLnI8V28uciYmKGV0LmUucj1Xby5yKSksWWUuY2FsbGJhY2s/KFdvPU5vKGxyLnIpLEphLnJvd1tXby5jXT1Tbik6QnI/KE5lWyhXbz1Obyhsci5yKSkucl18fChOZVtXby5y'@;
put 'XT1bXSksTmVbV28ucl1bV28uY109U24pOk5lW2xyLnJdPVNufVllLmNhbGxiYWNrJiZZZS5jYWxsYmFjayhKYSl9fX15aSYmIVllLmNhbGxiYWNrJiZtOCgwLEV0KSxfci5sZW5ndGg+MCYmKE5lWyIhcm93cyJdPV9yKX19KCksYjg9UHIoIndvcmtzaGVldCIsbnVsbCx7eG1sbnM6WWkubWFp'@;
put 'blswXSwieG1sbnM6ciI6WWkuciwieG1sbnM6eDE0YWMiOiJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL29mZmljZS9zcHJlYWRzaGVldG1sLzIwMDkvOS9hYyIsInhtbG5zOm1jIjoiaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL21hcmt1cC1jb21wYXRpYmlsaXR5LzIw'@;
put 'MDYiLCJtYzpJZ25vcmFibGUiOiJ4MTRhYyJ9KTtmdW5jdGlvbiBWRChTLFIsayxHKXt2YXIgZ2UsUT1bSWksYjhdLHBlPSIiLHllPWsuU2hlZXRzW2suU2hlZXROYW1lc1tTXV07bnVsbD09eWUmJih5ZT17fSk7dmFyIFBlPXllWyIhcmVmIl18fCJBMSIsTmU9b28oUGUpO2lmKE5lLmUuYz4x'@;
put 'NjM4M3x8TmUuZS5yPjEwNDg1NzUpe2lmKFIuV1RGKXRocm93IG5ldyBFcnJvcigiUmFuZ2UgIitQZSsiIGV4Y2VlZHMgZm9ybWF0IGxpbWl0IEExOlhGRDEwNDg1NzYiKTtOZS5lLmM9TWF0aC5taW4oTmUuZS5jLDE2MzgzKSxOZS5lLnI9TWF0aC5taW4oTmUuZS5jLDEwNDg1NzUpLFBlPXJh'@;
put 'KE5lKX1HfHwoRz17fSkseWVbIiFjb21tZW50cyJdPVtdO3ZhciBZZT1bXSxldD15ZVsiIXByaW50Il07aWYoZnVuY3Rpb24gRUQoUyxSLGssRyxRKXt2YXIgb2U9ITEsZ2U9e30scGU9bnVsbDtpZigieGxzeCIhPT1HLmJvb2tUeXBlJiZSLnZiYXJhdyl7dmFyIHllPVIuU2hlZXROYW1lc1tr'@;
put 'XTt0cnl7Ui5Xb3JrYm9vayYmKHllPVIuV29ya2Jvb2suU2hlZXRzW2tdLkNvZGVOYW1lfHx5ZSl9Y2F0Y2h7fW9lPSEwLGdlLmNvZGVOYW1lPUxyKHllKX1TJiZTWyIhY29uZGZtdCJdJiYoZ2UuZW5hYmxlRm9ybWF0Q29uZGl0aW9uc0NhbGN1bGF0aW9uPSIxIiksUyYmU1siIXRhYmNvbG9y'@;
put 'Il0mJihwZT0ocGV8fCIiKSsnPHRhYkNvbG9yIHJnYj0iRkYnK1AwKFNbIiF0YWJjb2xvciJdLnJnYikrJyIvPicpO3ZhciBQZT0hMSxOZT17fTtpZigoKChTfHx7fSlbIiFwcmludCJdfHx7fSkucHJvcHN8fHt9KS5maXQmJihQZT0hMCxOZS5maXRUb1BhZ2U9MSksUGUmJihwZT0ocGV8fCIi'@;
put 'KStQcigicGFnZVNldFVwUHIiLG51bGwsTmUpKSxTJiZTWyIhb3V0bGluZSJdKXt2YXIgWWU9e3N1bW1hcnlCZWxvdzoxLHN1bW1hcnlSaWdodDoxfTtTWyIhb3V0bGluZSJdLmFib3ZlJiYoWWUuc3VtbWFyeUJlbG93PTApLFNbIiFvdXRsaW5lIl0ubGVmdCYmKFllLnN1bW1hcnlSaWdodD0w'@;
put 'KSxwZT0ocGV8fCIiKStQcigib3V0bGluZVByIixudWxsLFllKX0hb2UmJiFwZXx8KFFbUS5sZW5ndGhdPVByKCJzaGVldFByIixwZSxnZSkpfSh5ZSxrLFMsUixRKSxRW1EubGVuZ3RoXT1QcigiZGltZW5zaW9uIixudWxsLHtyZWY6UGV9KSxRW1EubGVuZ3RoXT1mdW5jdGlvbiBnOChTLFIs'@;
put 'ayxHKXt2YXIgUT17d29ya2Jvb2tWaWV3SWQ6IjAifTtpZigoKChHfHx7fSkuV29ya2Jvb2t8fHt9KS5WaWV3c3x8W10pLmxlbmd0aCl7dmFyIG9lPUcuV29ya2Jvb2suVmlld3MsZ2U9b2Vba118fG9lWzBdO1EucmlnaHRUb0xlZnQ9Z2UuUlRMPyIxIjoiMCIsZ2Uuem9vbSYmKFEuem9vbVNj'@;
put 'YWxlPWdlLnpvb20pLG51bGwhPWdlLmdyaWQmJihRLnNob3dHcmlkTGluZXM9Z2UuZ3JpZCksZ2UudmlldyYmKFEudmlldz1nZS52aWV3KX1udWxsIT1TWyIhZ3JpZGxpbmVzIl0mJihRLnNob3dHcmlkTGluZXM9ISFTWyIhZ3JpZGxpbmVzIl0pO3ZhciBwZT0iIix5ZT17cjowLGM6MH07aWYo'@;
put 'U1siIXNlbCJdKXtpZighKHllPVNbIiFzZWwiXS5jZWxsKSl7aWYoIVNbIiFzZWwiXS5yYW5nZSl0aHJvdyBuZXcgRXJyb3IoIk11c3Qgc3BlY2lmeSBhIHNlbGVjdGlvbiBjZWxsIG9yIHJhbmdlIik7eWU9TXMoU1siIXNlbCJdLnJhbmdlLnJlcGxhY2UoL1xzLiokLywiIikpLnN9InN0cmlu'@;
put 'ZyI9PXR5cGVvZiB5ZSYmKHllPU5vKHllKSl9dmFyIE5lPVNbIiFmcmVlemUiXT8ic3RyaW5nIj09dHlwZW9mIFNbIiFmcmVlemUiXT9ObyhTWyIhZnJlZXplIl0pOlNbIiFmcmVlemUiXTp7YzowLHI6MH07aWYoU1siIWZyZWV6ZSJdKXt2YXIgWWU9cWkoTmUpLGV0PXtzdGF0ZToiZnJvemVu'@;
put 'Iix4U3BsaXQ6TmUuYyx5U3BsaXQ6TmUucix0b3BMZWZ0Q2VsbDpZZX07U1siIXNlbCJdJiYoZXQuYWN0aXZlUGFuZT0oeWUucj49TmUuciYmTmUucj4wPyJib3R0b20iOiJ0b3AiKSsoeWUuYz49TmUuYyYmTmUuYz4wPyJSaWdodCI6IkxlZnQiKSkscGU9UHIoInBhbmUiLG51bGwsZXQpfWlm'@;
put 'KFNbIiFzZWwiXSl7dmFyIGN0PXthY3RpdmVDZWxsOiJzdHJpbmciPT10eXBlb2YgeWU/eWU6cWkoeWUpfTtjdC5zcXJlZj1TWyIhc2VsIl0ucmFuZ2U/U1siIXNlbCJdLnJhbmdlOmN0LmFjdGl2ZUNlbGwrIjoiK2N0LmFjdGl2ZUNlbGwscGUrPVByKCJzZWxlY3Rpb24iLG51bGwsY3QpLFNb'@;
put 'IiFmcmVlemUiXSYmKE5lLmM+MCYmKGN0LnBhbmU9InRvcFJpZ2h0IixwZSs9UHIoInNlbGVjdGlvbiIsbnVsbCxjdCkpLE5lLnI+MCYmKGN0LnBhbmU9ImJvdHRvbUxlZnQiLHBlKz1Qcigic2VsZWN0aW9uIixudWxsLGN0KSksTmUuYz4wJiZOZS5yPjAmJihjdC5wYW5lPSJib3R0b21SaWdo'@;
put 'dCIscGUrPVByKCJzZWxlY3Rpb24iLG51bGwsY3QpKSl9cmV0dXJuIFByKCJzaGVldFZpZXdzIixQcigic2hlZXRWaWV3IixwZXx8bnVsbCxRKSx7fSl9KHllLDAsUyxrKSxSLnNoZWV0Rm9ybWF0KXt2YXIgY3Q9e2RlZmF1bHRSb3dIZWlnaHQ6Ui5zaGVldEZvcm1hdC5kZWZhdWx0Um93SGVp'@;
put 'Z2h0fHwiMTYiLGJhc2VDb2xXaWR0aDpSLnNoZWV0Rm9ybWF0LmJhc2VDb2xXaWR0aHx8IjEwIn07bnVsbCE9Ui5zaGVldEZvcm1hdC5vdXRsaW5lTGV2ZWxSb3cmJihjdC5vdXRsaW5lTGV2ZWxSb3c9Ui5zaGVldEZvcm1hdC5vdXRsaW5lTGV2ZWxSb3cpLFFbUS5sZW5ndGhdPVByKCJzaGVl'@;
put 'dEZvcm1hdFByIixudWxsLGN0KX1lbHNlIGlmKHllWyIhc2hlZXRGb3JtYXQiXSl7dmFyIEV0PXt9LGF0PSExO3llWyIhc2hlZXRGb3JtYXQiXS5yb3cmJih5ZVsiIXNoZWV0Rm9ybWF0Il0ucm93LmhwdD8oYXQ9ITAsRXQuZGVmYXVsdFJvd0hlaWdodD15ZVsiIXNoZWV0Rm9ybWF0Il0ucm93'@;
put 'LmhwdCxFdC5jdXN0b21IZWlnaHQ9MSk6eWVbIiFzaGVldEZvcm1hdCJdLnJvdy5ocHg/KGF0PSEwLEV0LmRlZmF1bHRSb3dIZWlnaHQ9VTMoeWVbIiFzaGVldEZvcm1hdCJdLnJvdy5ocHgpLEV0LmN1c3RvbUhlaWdodD0xKTooMD09PXllWyIhc2hlZXRGb3JtYXQiXS5yb3cuaHB0fHwwPT09'@;
put 'eWVbIiFzaGVldEZvcm1hdCJdLnJvdy5ocHh8fHllWyIhc2hlZXRGb3JtYXQiXS5yb3cuaGlkZGVuKSYmKGF0PSEwLEV0LmRlZmF1bHRSb3dIZWlnaHQ9RXQuZGVmYXVsdFJvd0hlaWdodHx8MTYsRXQuY3VzdG9tSGVpZ2h0PTEsRXQuemVyb0hlaWdodD0xKSx5ZVsiIXNoZWV0Rm9ybWF0Il0u'@;
put 'ZHlEZXNjZW50JiYoRXRbIngxNGFjOmR5RGVzY2VudCJdPXllWyIhc2hlZXRGb3JtYXQiXS5keURlc2NlbnQpKSx5ZVsiIXNoZWV0Rm9ybWF0Il0uY29sJiYoeWVbIiFzaGVldEZvcm1hdCJdLmNvbC53Y2h8fFEwKHllWyIhc2hlZXRGb3JtYXQiXS5jb2wpLEV0LmRlZmF1bHRDb2xXaWR0aD15'@;
put 'ZVsiIXNoZWV0Rm9ybWF0Il0uY29sLndjaCs1L1RjfHwwLGF0PSEwKSxudWxsPT1FdC5kZWZhdWx0Um93SGVpZ2h0JiYoRXQuZGVmYXVsdFJvd0hlaWdodD0xNiksbnVsbD09RXQuZGVmYXVsdENvbFdpZHRoJiYoRXQuZGVmYXVsdENvbFdpZHRoPTEwKSxFdC5vdXRsaW5lTGV2ZWxSb3c9RXQu'@;
put 'b3V0bGluZUxldmVsUm93fHw3LGF0JiYoUVtRLmxlbmd0aF09UHIoInNoZWV0Rm9ybWF0UHIiLG51bGwsRXQpKX1udWxsIT15ZVsiIWNvbHMiXSYmeWVbIiFjb2xzIl0ubGVuZ3RoPjAmJihRW1EubGVuZ3RoXT1mdW5jdGlvbiBwaihTLFIsayl7Zm9yKHZhciBRLEc9WyI8Y29scz4iXSxvZT0w'@;
put 'O29lIT1SLmxlbmd0aDsrK29lKWlmKFE9UltvZV0pe2lmKFEuYXV0byYmb1MoUyxRLG9lKSxRLnN8fFEueil7dmFyIGdlPXt0OiJ6In07bnVsbCE9US5zJiYoZ2Uucz1RLnMpLG51bGwhPVEueiYmKGdlLno9US56KSxRLnN0eWxlPWwwKGsuY2VsbFhmcyxrLmNlbGxTdHlsZVhmcyxnZSxrKX1H'@;
put 'W0cubGVuZ3RoXT1QcigiY29sIixudWxsLHU4KG9lLFEpKX1yZXR1cm4gR1tHLmxlbmd0aF09IjwvY29scz4iLEcuam9pbigiIil9KHllLHllWyIhY29scyJdLFIpKSxRW2dlPVEubGVuZ3RoXT0iPHNoZWV0RGF0YS8+Iix5ZVsiIWxpbmtzIl09W10sbnVsbCE9eWVbIiFyZWYiXSYmKHBlPWZ1'@;
put 'bmN0aW9uIE1TKFMsUixrLEcpe3ZhciB5ZSxidCxRPVtdLG9lPVtdLGdlPW9vKFNbIiFyZWYiXSkscGU9IiIsUGU9IiIsTmU9W10sWWU9MCxldD0wLGN0PVNbIiFyb3dzIl0sRXQ9QXJyYXkuaXNBcnJheShTKSxhdD17cjpQZX0sanQ9LTE7Zm9yKGV0PWdlLnMuYztldDw9Z2UuZS5jOysrZXQp'@;
put 'TmVbZXRdPVRhKGV0KTtmb3IoWWU9Z2Uucy5yO1llPD1nZS5lLnI7KytZZSl7Zm9yKG9lPVtdLFBlPWppKFllKSxldD1nZS5zLmM7ZXQ8PWdlLmUuYzsrK2V0KXt5ZT1OZVtldF0rUGU7dmFyIGt0PUV0PyhTW1llXXx8W10pW2V0XTpTW3llXTt2b2lkIDAhPT1rdCYmbnVsbCE9KHBlPVU1KGt0'@;
put 'LHllLFMsUikpJiZvZS5wdXNoKHBlKX0ob2UubGVuZ3RoPjB8fGN0JiZjdFtZZV0pJiYoYXQ9e3I6UGV9LGN0JiZjdFtZZV0mJigoYnQ9Y3RbWWVdKS5oaWRkZW4mJihhdC5oaWRkZW49MSksanQ9LTEsYnQuaHB4P2p0PVUzKGJ0LmhweCk6YnQuaHB0JiYoanQ9YnQuaHB0KSxqdD4tMSYmKGF0'@;
put 'Lmh0PWp0LGF0LmN1c3RvbUhlaWdodD0xKSxidC5sZXZlbCYmKGF0Lm91dGxpbmVMZXZlbD1idC5sZXZlbCksYnQuZHlEZXNjZW50JiYoYXRbIngxNGFjOmR5RGVzY2VudCJdPWJ0LmR5RGVzY2VudCksYnQucyYmKGF0LnM9bDAoUi5jZWxsWGZzLFIuY2VsbFN0eWxlWGZzLHt0OiJ6IixzOmJ0'@;
put 'LnN9LFIpLGF0LmN1c3RvbUZvcm1hdD0xKSksUVtRLmxlbmd0aF09UHIoInJvdyIsb2Uuam9pbigiIiksYXQpKX1pZihjdClmb3IoO1llPGN0Lmxlbmd0aDsrK1llKWN0JiZjdFtZZV0mJihhdD17cjpZZSsxfSwoYnQ9Y3RbWWVdKS5oaWRkZW4mJihhdC5oaWRkZW49MSksanQ9LTEsYnQuaHB4'@;
put 'P2p0PVUzKGJ0LmhweCk6YnQuaHB0JiYoanQ9YnQuaHB0KSxqdD4tMSYmKGF0Lmh0PWp0LGF0LmN1c3RvbUhlaWdodD0xKSxidC5sZXZlbCYmKGF0Lm91dGxpbmVMZXZlbD1idC5sZXZlbCksUVtRLmxlbmd0aF09UHIoInJvdyIsIiIsYXQpKTtyZXR1cm4gUS5qb2luKCIiKX0oeWUsUikscGUu'@;
put 'bGVuZ3RoPjAmJihRW1EubGVuZ3RoXT1wZSkpLFEubGVuZ3RoPmdlKzEmJihRW1EubGVuZ3RoXT0iPC9zaGVldERhdGE+IixRW2dlXT1RW2dlXS5yZXBsYWNlKCIvPiIsIj4iKSkseWVbIiFwcm90ZWN0Il0mJihRW1EubGVuZ3RoXT1mdW5jdGlvbiBkaihTKXt2YXIgUj17c2hlZXQ6MX07cmV0'@;
put 'dXJuIGJTLmZvckVhY2goZnVuY3Rpb24oayl7bnVsbCE9U1trXSYmU1trXSYmKFJba109IjEiKX0pLExELmZvckVhY2goZnVuY3Rpb24oayl7bnVsbCE9U1trXSYmIVNba10mJihSW2tdPSIwIil9KSxTLnBhc3N3b3JkP1IucGFzc3dvcmQ9SHYoUy5wYXNzd29yZCkudG9TdHJpbmcoMTYpLnRv'@;
put 'VXBwZXJDYXNlKCk6Uy5lbmNyeXB0aW9uJiYoUi5hbGdvcml0aG1OYW1lPVMuZW5jcnlwdGlvbi5hbGdvLFIuaGFzaFZhbHVlPVMuZW5jcnlwdGlvbi5oYXNoLFIuc2FsdFZhbHVlPVMuZW5jcnlwdGlvbi5zYWx0LFIuc3BpbkNvdW50PVMuZW5jcnlwdGlvbi5zcGluKSxQcigic2hlZXRQcm90'@;
put 'ZWN0aW9uIixudWxsLFIpfSh5ZVsiIXByb3RlY3QiXSkpLG51bGwhPXllWyIhYXV0b2ZpbHRlciJdJiYoUVtRLmxlbmd0aF09ZnVuY3Rpb24gbWooUyxSLGssRyl7dmFyIFE9InN0cmluZyI9PXR5cGVvZiBTLnJlZj9TLnJlZjpyYShTLnJlZik7ay5Xb3JrYm9va3x8KGsuV29ya2Jvb2s9e1No'@;
put 'ZWV0czpbXX0pLGsuV29ya2Jvb2suTmFtZXN8fChrLldvcmtib29rLk5hbWVzPVtdKTt2YXIgb2U9ay5Xb3JrYm9vay5OYW1lcyxnZT1NcyhRKTtnZS5zLnI9PWdlLmUuciYmKGdlLmUucj1NcyhSWyIhcmVmIl0pLmUucixRPXJhKGdlKSk7Zm9yKHZhciBwZT0wO3BlPG9lLmxlbmd0aDsrK3Bl'@;
put 'KXt2YXIgeWU9b2VbcGVdO2lmKCJfeGxubS5fRmlsdGVyRGF0YWJhc2UiPT15ZS5OYW1lJiZ5ZS5TaGVldD09Ryl7eWUuUmVmPSInIitrLlNoZWV0TmFtZXNbR10rIichIitRO2JyZWFrfX1yZXR1cm4gcGU9PW9lLmxlbmd0aCYmb2UucHVzaCh7TmFtZToiX3hsbm0uX0ZpbHRlckRhdGFiYXNl'@;
put 'IixTaGVldDpHLFJlZjoiJyIray5TaGVldE5hbWVzW0ddKyInISIrUX0pLFByKCJhdXRvRmlsdGVyIixudWxsLHtyZWY6UX0pfSh5ZVsiIWF1dG9maWx0ZXIiXSx5ZSxrLFMpKSxudWxsIT15ZVsiIW1lcmdlcyJdJiZ5ZVsiIW1lcmdlcyJdLmxlbmd0aD4wJiYoUVtRLmxlbmd0aF09ZnVuY3Rp'@;
put 'b24gZ1MoUyl7aWYoMD09PVMubGVuZ3RoKXJldHVybiIiO2Zvcih2YXIgUj0nPG1lcmdlQ2VsbHMgY291bnQ9IicrUy5sZW5ndGgrJyI+JyxrPTA7ayE9Uy5sZW5ndGg7KytrKVIrPSc8bWVyZ2VDZWxsIHJlZj0iJytyYShTW2tdKSsnIi8+JztyZXR1cm4gUisiPC9tZXJnZUNlbGxzPiJ9KHll'@;
put 'WyIhbWVyZ2VzIl0pKSx5ZVsiIWNvbmRmbXQiXSYmKFFbUS5sZW5ndGhdPWZ1bmN0aW9uIHdqKFMsUil7cmV0dXJuIFMubWFwKGZ1bmN0aW9uKGssRyl7cmV0dXJuIGZ1bmN0aW9uIF9qKFMsUixrKXt2YXIgRz1TLnM/bFMoay5EWEYsUy5zKTotMSxRPSJzdHJpbmciPT10eXBlb2YgUy5yZWY/'@;
put 'Uy5yZWY6cmEoUy5yZWYpLGdlPW9vKFEucmVwbGFjZSgvXHMuKiQvLCIiKSkucztnZS5yPDAmJihnZS5yPTApLGdlLmM8MCYmKGdlLmM9MCk7dmFyIHBlPSIiLHllPXtwcmlvcml0eTpSKzF9O3N3aXRjaChHPi0xJiYoeWUuZHhmSWQ9RyksUy50KXtjYXNlInVuaXF1ZSI6eWUudHlwZT0idW5p'@;
put 'cXVlVmFsdWVzIjticmVhaztjYXNlImR1cCI6eWUudHlwZT0iZHVwbGljYXRlVmFsdWVzIjticmVhaztjYXNlImJsYW5rIjp5ZS50eXBlPShTLnY/ImMiOiJub3RDIikrIm9udGFpbnNCbGFua3MiLHBlPSI8Zm9ybXVsYT5MRU4oVFJJTSgiK3FpKGdlKSsiKSkiKyhTLnY/Ij0iOiImZ3Q7Iikr'@;
put 'IjA8L2Zvcm11bGE+IjticmVhaztjYXNlImVycm9yIjp5ZS50eXBlPShTLnY/ImMiOiJub3RDIikrIm9udGFpbnNFcnJvcnMiO2JyZWFrO2Nhc2UiZm9ybXVsYSI6eWUudHlwZT0iZXhwcmVzc2lvbiIscGU9UHIoImZvcm11bGEiLExyKFMuZikse30pO2JyZWFrO2Nhc2UiZGF0ZSI6eWUudHlw'@;
put 'ZT0idGltZVBlcmlvZCIseWUudGltZVBlcmlvZD15altTLm9wXTticmVhaztjYXNlInRleHQiOnN3aXRjaCh5ZS50eXBlPXllLm9wZXJhdG9yPWY4W1Mub3BdLHllLnRleHQ9Uy52LFMub3Ape2Nhc2UiSU4iOnBlPSc8Zm9ybXVsYT5OT1QoSVNFUlJPUihTRUFSQ0goIicrTHIoUy52KSsnIiwn'@;
put 'K3FpKGdlKSsiKSkpPC9mb3JtdWxhPiI7YnJlYWs7Y2FzZSJPVCI6cGU9Jzxmb3JtdWxhPklTRVJST1IoU0VBUkNIKCInK0xyKFMudikrJyIsJytxaShnZSkrIikpPC9mb3JtdWxhPiI7YnJlYWs7Y2FzZSJTVCI6cGU9Ijxmb3JtdWxhPkxFRlQoIitxaShnZSkrJyxMRU4oIicrTHIoUy52KSsn'@;
put 'IikpPSInK0xyKFMudikrJyI8L2Zvcm11bGE+JzticmVhaztjYXNlIk5EIjpwZT0iPGZvcm11bGE+UklHSFQoIitxaShnZSkrJyxMRU4oIicrTHIoUy52KSsnIikpPSInK0xyKFMudikrJyI8L2Zvcm11bGE+J31icmVhaztjYXNlInZhbCI6eWUudHlwZT0iY2VsbElzIix5ZS5vcGVyYXRvcj11'@;
put 'YltTLm9wXSxwZT1udWxsIT1TLm1pbj9QcigiZm9ybXVsYSIsTHIoU3RyaW5nKFMubWluKSkse30pK1ByKCJmb3JtdWxhIixMcihTdHJpbmcoUy5tYXgpKSx7fSk6UHIoImZvcm11bGEiLExyKG51bGwhPVMudj9TdHJpbmcoInN0cmluZyI9PXR5cGVvZiBTLnY/JyInK1Mudi5yZXBsYWNlKC8i'@;
put 'L2csJyIiJykrJyInOlMudik6Uy5mKSx7fSk7YnJlYWs7Y2FzZSJhdmciOnN3aXRjaCh5ZS50eXBlPSJhYm92ZUF2ZXJhZ2UiLHllLmFib3ZlQXZlcmFnZT0iTCI9PVMub3AuY2hhckF0KDApPyIwIjoiMSIsUy5vcC5jaGFyQXQoMSkpe2Nhc2UiVCI6eWUuZXF1YWxBdmVyYWdlPSIwIjticmVh'@;
put 'aztjYXNlIkUiOnllLmVxdWFsQXZlcmFnZT0iMSI7YnJlYWs7ZGVmYXVsdDp5ZS5zdGREZXY9Uy5vcC5jaGFyQXQoMSl9YnJlYWs7Y2FzZSJyYW5rIjp5ZS50eXBlPSJ0b3AxMCIseWUuYm90dG9tPSJCIj09Uy5vcC5jaGFyQXQoMCk/IjEiOiIwIix5ZS5wZXJjZW50PSJQIj09Uy5vcC5jaGFy'@;
put 'QXQoMSk/IjEiOiIwIix5ZS5yYW5rPVMudjticmVhaztjYXNlImljb24iOnllLnR5cGU9Imljb25TZXQiO3ZhciBQZT17aWNvblNldDpTLnYscGVyY2VudDpTLnBjdD8idHJ1ZSI6ImZhbHNlIn07Uy5yZXYmJihQZS5yZXZlcnNlPSJ0cnVlIiksUy5oaWRkZW4mJihQZS5zaG93VmFsdWU9ImZh'@;
put 'bHNlIikscGU9UHIoImljb25TZXQiLFMudGhyZXNoLm1hcChXNCkuam9pbigiIiksUGUpO2JyZWFrO2Nhc2Uic2NhbGUiOnllLnR5cGU9ImNvbG9yU2NhbGUiLHBlKz1XNChTLmNtaW4pLFMuY21pZCYmKHBlKz1XNChTLmNtaWQpKSxwZSs9VzQoUy5jbWF4KSxwZSs9Z2QoUy5jbWluLmNvbG9y'@;
put 'KSxTLmNtaWQmJihwZSs9Z2QoUy5jbWlkLmNvbG9yKSkscGU9UHIoImNvbG9yU2NhbGUiLHBlKz1nZChTLmNtYXguY29sb3IpLHt9KTticmVhaztjYXNlImJhciI6eWUudHlwZT0iZGF0YUJhciIscGUrPVc0KFMuY21pbikscGUrPVc0KFMuY21heCkscGU9UHIoImRhdGFCYXIiLHBlKz1nZChT'@;
put 'LmNvbG9yKSx7fSk7YnJlYWs7ZGVmYXVsdDp0aHJvdyBjb25zb2xlLmxvZyhTKSwiQ0YgbWlzc2luZyB0eXBlICIrUy50fXJldHVybic8Y29uZGl0aW9uYWxGb3JtYXR0aW5nIHNxcmVmPSInK1ErJyI+JytQcigiY2ZSdWxlIiwiIj09cGU/bnVsbDpwZSx5ZSkrIjwvY29uZGl0aW9uYWxGb3Jt'@;
put 'YXR0aW5nPiJ9KGssRyxSKX0pLmpvaW4oIiIpfSh5ZVsiIWNvbmRmbXQiXSxSKSkseWVbIiF2YWxpZGF0aW9ucyJdJiYoUVtRLmxlbmd0aF09ZnVuY3Rpb24gSEQoUyl7aWYoIVN8fDA9PVMubGVuZ3RoKXJldHVybiIiO2Zvcih2YXIgUj1bXSxrPTAsRz0wO0c8Uy5sZW5ndGg7KytHKXt2YXIg'@;
put 'UT1TW0ddLG9lPXVoW1EudF07aWYoUS5yZWYmJigic3RyaW5nIiE9dHlwZW9mIFEucmVmfHwtMSE9US5yZWYuaW5kZXhPZigiICIpfHwoUS5yZWY9b28oUS5yZWYpLFEucmVmLnMmJiEoUS5yZWYucy5jPDApKSkpeysrazt2YXIgZ2U9e3R5cGU6b2UsYWxsb3dCbGFuazorKDAhPVEuYmxhbmsp'@;
put 'LHNob3dJbnB1dE1lc3NhZ2U6KygwIT1RLmlucHV0KSxzaG93RXJyb3JNZXNzYWdlOisoMCE9US5lcnJvciksc3FyZWY6InN0cmluZyI9PXR5cGVvZiBRLnJlZj9RLnJlZjpyYShRLnJlZil9O2lmKFEuaW5wdXQmJihRLmlucHV0LnRpdGxlJiYoZ2UucHJvbXB0VGl0bGU9V2koUS5pbnB1dC50'@;
put 'aXRsZSkpLFEuaW5wdXQubWVzc2FnZSYmKGdlLnByb21wdD1XaShRLmlucHV0Lm1lc3NhZ2UpKSksUS5lcnJvciYmKFEuZXJyb3IudGl0bGUmJihnZS5lcnJvclRpdGxlPVdpKFEuZXJyb3IudGl0bGUpKSxRLmVycm9yLm1lc3NhZ2UmJihnZS5lcnJvcj1XaShRLmVycm9yLm1lc3NhZ2UpKSxR'@;
put 'LmVycm9yLnN0eWxlJiYoZ2UuZXJyb3JTdHlsZT1RLmVycm9yLnN0eWxlKSksIW9lKXRocm93IG5ldyBFcnJvcigiQmFkIHZhbGlkYXRpb246IHVucmVjb2duaXplZCB0eXBlICIrUS50KTt2YXIgcGU9IiI7c3dpdGNoKFEudCl7Y2FzZSJBbnkiOmJyZWFrO2Nhc2UiTGlzdCI6Y2FzZSJDdXN0'@;
put 'b20iOmlmKFEubCl7aWYoUS5sLmpvaW4oIiwiKS5sZW5ndGg+MjUwKXRocm93IG5ldyBFcnJvcigiRFYgbGVuZ3RoID4gMjUwIHRyaWdnZXJzIGNvcnJ1cHRpb24gZXJyb3JzIGluIEV4Y2VsLiAgVXNlIGEgbG9va3VwIHRhYmxlIik7cGU9Jzxmb3JtdWxhMT4iJytMcihRLmwuam9pbigiLCIp'@;
put 'KSsnIjwvZm9ybXVsYTE+J31lbHNlIHBlPSI8Zm9ybXVsYTE+IitMcihRLmYpKyI8L2Zvcm11bGExPiI7YnJlYWs7Y2FzZSJEYXRlIjpjYXNlIlRpbWUiOmNhc2UiRGVjaW1hbCI6Y2FzZSJMZW5ndGgiOmNhc2UiV2hvbGUiOmlmKCF1YltRLm9wXSl0aHJvdyBuZXcgRXJyb3IoIkJhZCBEYXRh'@;
put 'IFZhbGlkYXRpb24gdHlwZSAiK1Eub3ArIiBmb3IgIitRLnQpO2lmKGdlLm9wZXJhdG9yPXViW1Eub3BdLG51bGwhPVEudilwZT0iPGZvcm11bGExPiIrTHIoU3RyaW5nKFEudiBpbnN0YW5jZW9mIERhdGU/UWUoUS52KTpRLnYpKSsiPC9mb3JtdWxhMT4iO2Vsc2V7aWYobnVsbD09US5taW58'@;
put 'fG51bGw9PVEubWF4KXRocm93IG5ldyBFcnJvcigiQmFkIERhdGEgVmFsaWRhdGlvbjogYHZgIG9yIGBtaW5gK2BtYXhgIHJlcXVpcmVkIGZvciBUeXBlICIrUS50KTtwZT0iPGZvcm11bGExPiIrTHIoU3RyaW5nKFEubWluIGluc3RhbmNlb2YgRGF0ZT9RZShRLm1pbik6US5taW4pKSsiPC9m'@;
put 'b3JtdWxhMT48Zm9ybXVsYTI+IitMcihTdHJpbmcoUS5tYXggaW5zdGFuY2VvZiBEYXRlP1FlKFEubWF4KTpRLm1heCkpKyI8L2Zvcm11bGEyPiJ9fVIucHVzaChQcigiZGF0YVZhbGlkYXRpb24iLHBlfHxudWxsLGdlKSl9fXJldHVybiBrPjA/JzxkYXRhVmFsaWRhdGlvbnMgY291bnQ9Iicr'@;
put 'aysnIj4nK1Iuam9pbigiIikrIjwvZGF0YVZhbGlkYXRpb25zPiI6IiJ9KHllWyIhdmFsaWRhdGlvbnMiXSkpO3ZhciBqdCxidD0tMSxrdD0tMTtpZih5ZVsiIWxpbmtzIl0ubGVuZ3RoPjAmJihRW1EubGVuZ3RoXT0iPGh5cGVybGlua3M+Iix5ZVsiIWxpbmtzIl0uZm9yRWFjaChmdW5jdGlv'@;
put 'bihTbil7U25bMV0uVGFyZ2V0JiYoanQ9e3JlZjpTblswXX0sIiMiIT1TblsxXS5UYXJnZXQuY2hhckF0KDApJiYoa3Q9RXIoRywtMSxMcihTblsxXS5UYXJnZXQpLnJlcGxhY2UoLyMuKiQvLCIiKSxLYS5ITElOSyksanRbInI6aWQiXT0icklkIitrdCksKGJ0PVNuWzFdLlRhcmdldC5pbmRl'@;
put 'eE9mKCIjIikpPi0xJiYoanQubG9jYXRpb249THIoU25bMV0uVGFyZ2V0LnNsaWNlKGJ0KzEpKSksU25bMV0uVG9vbHRpcCYmKGp0LnRvb2x0aXA9THIoU25bMV0uVG9vbHRpcCkpLFFbUS5sZW5ndGhdPVByKCJoeXBlcmxpbmsiLG51bGwsanQpKX0pLFFbUS5sZW5ndGhdPSI8L2h5cGVybGlu'@;
put 'a3M+IiksZGVsZXRlIHllWyIhbGlua3MiXSxldCl7dmFyIE90PWZ1bmN0aW9uIGxqKFMpe2lmKFMucHJvcHMpe3ZhciBSPXt9LGs9Uy5wcm9wcztyZXR1cm4gay5ncmlkbGluZXMmJihSLmdyaWRMaW5lcz1SLmdyaWRMaW5lc1NldD0xKSxrLmhlYWRpbmdzJiYoUi5oZWFkaW5ncz0xKSxrLmNl'@;
put 'bnRlclgmJihSLmhvcml6b250YWxDZW50ZXJlZD0xKSxrLmNlbnRlclkmJihSLnZlcnRpY2FsQ2VudGVyZWQ9MSksUHIoInByaW50T3B0aW9ucyIsbnVsbCxSKX1yZXR1cm4iIn0oZXQpO090Lmxlbmd0aCYmKFFbUS5sZW5ndGhdPU90KX1pZigobnVsbCE9eWVbIiFtYXJnaW5zIl18fGV0JiZl'@;
put 'dC5tYXJnaW5zKSYmKFFbUS5sZW5ndGhdPWZ1bmN0aW9uIGZqKFMpe3JldHVybiBYMyhTKSxQcigicGFnZU1hcmdpbnMiLG51bGwsUyl9KHllWyIhbWFyZ2lucyJdfHxldC5tYXJnaW5zKSksZXQpe3ZhciBLdD1mdW5jdGlvbiBSRChTKXtpZihTLnByb3BzKXt2YXIgUj17fSxrPVMucHJvcHM7'@;
put 'aWYoay5vcmllbnRhdGlvbiYmKFIub3JpZW50YXRpb249ay5vcmllbnRhdGlvbiksay5zY2FsZSYmKFIuc2NhbGU9ay5zY2FsZSksay5maXQmJihudWxsIT1rLmZpdC5oZWlnaHQmJihSLmZpdFRvSGVpZ2h0PWsuZml0LmhlaWdodCksbnVsbCE9ay5maXQud2lkdGgmJihSLmZpdFRvV2lkdGg9'@;
put 'ay5maXQud2lkdGgpKSxrLmRwaSYmKFIuaG9yaXpvbnRhbERwaT1SLnZlcnRpY2FsRHBpPWsuZHBpKSxudWxsIT1rLmZpcnN0JiYoUi5maXJzdFBhZ2VOdW1iZXI9ay5maXJzdCxSLnVzZUZpcnN0UGFnZU51bWJlcj0xKSxrLmJ3JiYoUi5ibGFja0FuZFdoaXRlPTEpLGsuZHJhZnQmJihSLmRy'@;
put 'YWZ0PTEpLGsuY29tbWVudHMmJihSLmNlbGxDb21tZW50cz1URFtrLmNvbW1lbnRzXXx8Im5vbmUiKSxrLmVycm9ycyYmKFIuZXJyb3JzPWtEW2suZXJyb3JzXXx8Im5vbmUiKSxrLnBhcGVyKXN3aXRjaCh0eXBlb2Ygay5wYXBlcil7Y2FzZSJudW1iZXIiOlIucGFwZXJTaXplPWsucGFwZXI7'@;
put 'YnJlYWs7Y2FzZSJzdHJpbmciOnVCW2sucGFwZXJdP1IucGFwZXJTaXplPXVCW2sucGFwZXJdOitrLnBhcGVyJiYoUi5wYXBlclNpemU9K2sucGFwZXIpO2JyZWFrO2Nhc2Uib2JqZWN0IjppZighay5wYXBlci5oZWlnaHR8fCFrLnBhcGVyLndpZHRoKXRocm93IkN1c3RvbSBQYXBlciBTaXpl'@;
put 'IG11c3QgaW5jbHVkZSB3aWR0aCBhbmQgaGVpZ2h0ISI7Ui5wYXBlckhlaWdodD1rLnBhcGVyLmhlaWdodCxSLnBhcGVyV2lkdGg9ay5wYXBlci53aWR0aH1yZXR1cm5bMSwhMCwidHJ1ZSIsIm92ZXIiXS5pbmRleE9mKGsub3JkZXIpPi0xJiYoUi5wYWdlT3JkZXI9Im92ZXJUaGVuRG93biIp'@;
put 'LFByKCJwYWdlU2V0dXAiLG51bGwsUil9cmV0dXJuIiJ9KGV0KTtLdC5sZW5ndGgmJihRW1EubGVuZ3RoXT1LdCksS3Q9ZnVuY3Rpb24gYmooUyl7dmFyIFI9W10saz0iIixHPSIiLFE9IiIsb2U9IiIsZ2U9IiIscGU9IiIseWU9IiIsUGU9dDEoUy5oZWFkZXIpO1BlLmxlbmd0aCYmKEc9UGVb'@;
put 'MF0scGU9UGVbMV0sb2U9UGVbMl0pO3ZhciBOZT10MShTLmZvb3Rlcik7cmV0dXJuIE5lLmxlbmd0aCYmKFE9TmVbMF0seWU9TmVbMV0sZ2U9TmVbMl0pLEcmJlIucHVzaCgiPG9kZEhlYWRlcj4iK0xyKEcpKyI8L29kZEhlYWRlcj4iKSxRJiZSLnB1c2goIjxvZGRGb290ZXI+IitMcihRKSsi'@;
put 'PC9vZGRGb290ZXI+IiksKGdlIT1RfHxvZSE9RykmJihrKz0nIGRpZmZlcmVudE9kZEV2ZW49IjEiJyxSLnB1c2goIjxldmVuSGVhZGVyPiIrTHIob2UpKyI8L2V2ZW5IZWFkZXI+IiksUi5wdXNoKCI8ZXZlbkZvb3Rlcj4iK0xyKGdlKSsiPC9ldmVuRm9vdGVyPiIpKSwoeWUhPVF8fHBlIT1H'@;
put 'KSYmKGsrPScgZGlmZmVyZW50Rmlyc3Q9IjEiJyxSLnB1c2goIjxmaXJzdEhlYWRlcj4iK0xyKHBlKSsiPC9maXJzdEhlYWRlcj4iKSxSLnB1c2goIjxmaXJzdEZvb3Rlcj4iK0xyKHllKSsiPC9maXJzdEZvb3Rlcj4iKSksUi5sZW5ndGg/IjxoZWFkZXJGb290ZXIiK2srIj4iK1Iuam9pbigi'@;
put 'IikrIjwvaGVhZGVyRm9vdGVyPiI6IiJ9KGV0KSxLdC5sZW5ndGgmJihRW1EubGVuZ3RoXT1LdCl9aWYoKG51bGwhPXllWyIhcm93QnJlYWtzIl18fGV0JiZldC5yb3dCcmVha3MpJiYoUVtRLmxlbmd0aF09ZnVuY3Rpb24gdWooUyl7aWYoMD09Uy5sZW5ndGgpcmV0dXJuIiI7Zm9yKHZhciBS'@;
put 'PVsnPHJvd0JyZWFrcyBjb3VudD0iJytTLmxlbmd0aCsnIiBtYW51YWxCcmVha0NvdW50PSInK1MubGVuZ3RoKyciPiddLGs9MDtrPFMubGVuZ3RoOysraylSLnB1c2goJzxicmsgaWQ9IicrU1trXS5SKyciIG1hbj0iMSIvPicpO3JldHVybiBSLmpvaW4oIiIpKyI8L3Jvd0JyZWFrcz4ifSh5'@;
put 'ZVsiIXJvd0JyZWFrcyJdfHxldC5yb3dCcmVha3MpKSwobnVsbCE9eWVbIiFjb2xCcmVha3MiXXx8ZXQmJmV0LmNvbEJyZWFrcykmJihRW1EubGVuZ3RoXT1mdW5jdGlvbiB2UyhTKXtpZigwPT1TLmxlbmd0aClyZXR1cm4iIjtmb3IodmFyIFI9Wyc8Y29sQnJlYWtzIGNvdW50PSInK1MubGVu'@;
put 'Z3RoKyciIG1hbnVhbEJyZWFrQ291bnQ9IicrUy5sZW5ndGgrJyI+J10saz0wO2s8Uy5sZW5ndGg7KytrKVIucHVzaCgnPGJyayBpZD0iJytTW2tdLkMrJyIgbWFuPSIxIi8+Jyk7cmV0dXJuIFIuam9pbigiIikrIjwvY29sQnJlYWtzPiJ9KHllWyIhY29sQnJlYWtzIl18fGV0LmNvbEJyZWFr'@;
put 'cykpLCghUnx8Ui5pZ25vcmVFQ3x8bnVsbD09Ui5pZ25vcmVFQykmJihRW1EubGVuZ3RoXT1IYSgiaWdub3JlZEVycm9ycyIsUHIoImlnbm9yZWRFcnJvciIsbnVsbCx7bnVtYmVyU3RvcmVkQXNUZXh0OjEsc3FyZWY6UGV9KSkpLHllWyIhY2hhcnRzIl0mJlllLnB1c2guYXBwbHkoWWUseWVb'@;
put 'IiFjaGFydHMiXSkseWVbIiFpbWFnZXMiXSYmWWUucHVzaC5hcHBseShZZSx5ZVsiIWltYWdlcyJdKSx5ZVsiIXNoYXBlcyJdJiZZZS5wdXNoLmFwcGx5KFllLHllWyIhc2hhcGVzIl0pLFllLmxlbmd0aD4wJiYoa3Q9RXIoRywtMSwiLi4vZHJhd2luZ3MvZHJhd2luZyIrKFMrMSkrIi54bWwi'@;
put 'LEthLkRSQVcpLFFbUS5sZW5ndGhdPVByKCJkcmF3aW5nIixudWxsLHsicjppZCI6InJJZCIra3R9KSx5ZVsiIWRyYXdpbmciXT1ZZSksKHllWyIhY29tbWVudHMiXS5sZW5ndGg+MHx8KHllWyIhY29udHJvbHMiXXx8W10pLmxlbmd0aD4wKSYmKGt0PUVyKEcsLTEsIi4uL2RyYXdpbmdzL3Zt'@;
put 'bERyYXdpbmciKyhTKzEpKyIudm1sIixLYS5WTUwpLFFbUS5sZW5ndGhdPVByKCJsZWdhY3lEcmF3aW5nIixudWxsLHsicjppZCI6InJJZCIra3R9KSx5ZVsiIWxlZ2FjeSJdPWt0KSx5ZVsiIXByaW50Il0mJnllWyIhcHJpbnQiXS5pbWFnZXMpe3ZhciBUbj15ZVsiIXByaW50Il0uaW1hZ2Vz'@;
put 'LHJyPTA7WyJoZWFkZXIiLCJmb290ZXIiXS5mb3JFYWNoKGZ1bmN0aW9uKFNuKXtUbltTbl0mJlsib2RkIiwiZXZlbiIsImZpcnN0Il0uZm9yRWFjaChmdW5jdGlvbihscil7VG5bU25dW2xyXSYmWyJsZWZ0IiwicmlnaHQiLCJjZW50ZXIiXS5mb3JFYWNoKGZ1bmN0aW9uKFhuKXtpZihBcnJh'@;
put 'eS5pc0FycmF5KFRuW1NuXVtscl1bWG5dKSlmb3IodmFyIEJuPTA7Qm48VG5bU25dW2xyXVtYbl0ubGVuZ3RoOysrQm4pVG5bU25dW2xyXVtYbl1bQm5dJiYoVG5bU25dW2xyXVtYbl1bQm5dLl9jbnQ9cnIrKyl9KX0pfSkscnI+MCYmKGt0PUVyKEcsLTEsIi4uL2RyYXdpbmdzL3ZtbERyYXdp'@;
put 'bmciKyhTKzEpKyJIRi52bWwiLEthLlZNTCksUVtRLmxlbmd0aF09UHIoImxlZ2FjeURyYXdpbmdIRiIsbnVsbCx7InI6aWQiOiJySWQiK2t0fSkseWVbIiFsZWdhY3lIRiJdPWt0KX1yZXR1cm4oeWVbIiF0YWJsZXMiXXx8W10pLmxlbmd0aD4wJiYoUVtRLmxlbmd0aF09Jzx0YWJsZVBhcnRz'@;
put 'IGNvdW50PSInK3llWyIhdGFibGVzIl0ubGVuZ3RoKyciPicseWVbIiF0YWJsZXMiXS5mb3JFYWNoKGZ1bmN0aW9uKFNuLGxyKXtrdD1FcihHLC0xLCIuLi90YWJsZXMvdGFibGUiKyhTKzEpKyJfIitscisiLnhtbCIsS2EuVEFCTEUpLFFbUS5sZW5ndGhdPSc8dGFibGVQYXJ0IHI6aWQ9InJJ'@;
put 'ZCcra3QrJyIvPid9KSxRW1EubGVuZ3RoXT0iPC90YWJsZVBhcnRzPiIpLFEubGVuZ3RoPjEmJihRW1EubGVuZ3RoXT0iPC93b3Jrc2hlZXQ+IixRWzFdPVFbMV0ucmVwbGFjZSgiLz4iLCI+IikpLFEuam9pbigiIil9ZnVuY3Rpb24gTWooUyxSLGssRyl7dmFyIFE9ZnVuY3Rpb24gU2ooUyxS'@;
put 'LGspe3ZhciBHPWJuKDE0NSksUT0oa1siIXJvd3MiXXx8W10pW1NdfHx7fTtHLndyaXRlX3NoaWZ0KDQsUyksRy53cml0ZV9zaGlmdCg0LDApO3ZhciBvZT0zMjA7US5ocHg/b2U9MjAqVTMoUS5ocHgpOlEuaHB0JiYob2U9MjAqUS5ocHQpLEcud3JpdGVfc2hpZnQoMixvZSksRy53cml0ZV9z'@;
put 'aGlmdCgxLDApO3ZhciBnZT0wO1EubGV2ZWwmJihnZXw9US5sZXZlbCksUS5oaWRkZW4mJihnZXw9MTYpLChRLmhweHx8US5ocHQpJiYoZ2V8PTMyKSxHLndyaXRlX3NoaWZ0KDEsZ2UpLEcud3JpdGVfc2hpZnQoMSwwKTt2YXIgcGU9MCx5ZT1HLmw7Ry5sKz00O2Zvcih2YXIgUGU9e3I6Uyxj'@;
put 'OjB9LE5lPTA7TmU8MTY7KytOZSlpZighKFIucy5jPk5lKzE8PDEwfHxSLmUuYzxOZTw8MTApKXtmb3IodmFyIFllPS0xLGV0PS0xLGN0PU5lPDwxMDtjdDxOZSsxPDwxMDsrK2N0KVBlLmM9Y3QsKEFycmF5LmlzQXJyYXkoayk/KGtbUGUucl18fFtdKVtQZS5jXTprW3FpKFBlKV0pJiYoWWU8'@;
put 'MCYmKFllPWN0KSxldD1jdCk7WWU8MHx8KCsrcGUsRy53cml0ZV9zaGlmdCg0LFllKSxHLndyaXRlX3NoaWZ0KDQsZXQpKX12YXIgYXQ9Ry5sO3JldHVybiBHLmw9eWUsRy53cml0ZV9zaGlmdCg0LHBlKSxHLmw9YXQsRy5sZW5ndGg+Ry5sP0cuc2xpY2UoMCxHLmwpOkd9KEcsayxSKTsoUS5s'@;
put 'ZW5ndGg+MTd8fChSWyIhcm93cyJdfHxbXSlbR10pJiZGcihTLCJCcnRSb3dIZHIiLFEpfXZhciB4aj1tdSxFaj1nZjtmdW5jdGlvbiBGaihTKXtyZXR1cm5bSmgoUyksUGwoUyksIm4iXX12YXIgV0Q9bXUsQzg9Z2YsS0Q9WyJsZWZ0IiwicmlnaHQiLCJ0b3AiLCJib3R0b20iLCJoZWFkZXIi'@;
put 'LCJmb290ZXIiXSxxRD1bIkFueSIsIldob2xlIiwiRGVjaW1hbCIsIkxpc3QiLCJEYXRlIiwiVGltZSIsIkxlbmd0aCIsIkN1c3RvbSJdLERTPVsiSU4iLCJPVCIsIkVRIiwiTkUiLCJHVCIsIkxUIiwiR0UiLCJMRSJdO2Z1bmN0aW9uIFhEKFMpe3ZhciBSPWJuKDQpLGs9W1JdLEc9cUQuaW5k'@;
put 'ZXhPZihTLnQpO2lmKEc8MCl0aHJvdyBuZXcgRXJyb3IoIkJhZCB2YWxpZGF0aW9uOiB1bnJlY29nbml6ZWQgdHlwZSAiK1MudCk7dmFyIG9lPURTLmluZGV4T2YoUy5vcCk7c3dpdGNoKEcpe2Nhc2UgMDpjYXNlIDM6Y2FzZSA3Om9lPTA7YnJlYWs7ZGVmYXVsdDppZigtMT09b2UpdGhyb3cg'@;
put 'bmV3IEVycm9yKCJCYWQgRGF0YSBWYWxpZGF0aW9uIHR5cGUgIitTLm9wKyIgZm9yICIrUy50KX1SLndyaXRlX3NoaWZ0KDEsMHxHKSxSLndyaXRlX3NoaWZ0KDEsMSksUi53cml0ZV9zaGlmdCgxLDEyfG9lPDw0KSxSLndyaXRlX3NoaWZ0KDEsMCksay5wdXNoKGZ1bmN0aW9uIFIzKFMpe3Zh'@;
put 'ciBSPVMuc3BsaXQoL1xzKixccyovKSxrPWJuKDQpO2sud3JpdGVfc2hpZnQoNCxSLmxlbmd0aCk7dmFyIEc9W2tdO3JldHVybiBSLmZvckVhY2goZnVuY3Rpb24oUSl7Ry5wdXNoKGdmKG9vKFEpKSl9KSxqKEcpfSgic3RyaW5nIj09dHlwZW9mIFMucmVmP1MucmVmOnJhKFMucmVmKSkpO3Zh'@;
put 'ciBnZT1ibigxNik7Z2Uud3JpdGVfc2hpZnQoNCw0Mjk0OTY3Mjk1KSxnZS53cml0ZV9zaGlmdCg0LDQyOTQ5NjcyOTUpLGdlLndyaXRlX3NoaWZ0KDQsNDI5NDk2NzI5NSksZ2Uud3JpdGVfc2hpZnQoNCw0Mjk0OTY3Mjk1KSxrLnB1c2goZ2UpO3ZhciBwZT1ibig4KTtwZS53cml0ZV9zaGlm'@;
put 'dCg0LDApLHBlLndyaXRlX3NoaWZ0KDQsMCk7dmFyIHllPTE7c3dpdGNoKFMudCl7Y2FzZSJBbnkiOmsucHVzaChwZSksay5wdXNoKHBlKTticmVhaztjYXNlIkRlY2ltYWwiOmNhc2UiTGVuZ3RoIjpjYXNlIldob2xlIjppZihudWxsIT1TLnZ8fG51bGwhPVMuZilrLnB1c2goIm51bWJlciI9'@;
put 'PXR5cGVvZiBTLnY/dFMoUy52KTpVNChudWxsPT1TLnY/Uy5mOlMudikpO2Vsc2V7aWYobnVsbD09Uy5taW58fG51bGw9PVMubWF4KXRocm93IlVuc3VwcG9ydGVkIERhdGEgVmFsaWRhdGlvbjogYHZgIG9yIGBtaW5gK2BtYXhgIHJlcXVpcmVkIGZvciBUeXBlICIrUy50O2sucHVzaCgibnVt'@;
put 'YmVyIj09dHlwZW9mIFMubWluP3RTKFMubWluKTpVNChTLm1pbikpLGsucHVzaCgibnVtYmVyIj09dHlwZW9mIFMubWF4P3RTKFMubWF4KTpVNChTLm1heCkpLHllPTJ9YnJlYWs7Y2FzZSJMaXN0IjppZihudWxsIT1TLmwpe2sucHVzaChuUyhTLmwuam9pbigiLCIpKSk7YnJlYWt9Y2FzZSJD'@;
put 'dXN0b20iOmlmKCJudWxsIiE9Uy5mKXtrLnB1c2goVTQoUy5mKSk7YnJlYWt9dGhyb3ciVW5zdXBwb3J0ZWQgRGF0YSBWYWxpZGF0aW9uOiBgZmAiKygiTGlzdCI9PVMudD8iIG9yIGBsYCI6IiIpKyIgcmVxdWlyZWQgZm9yIFR5cGUgIitTLnQ7ZGVmYXVsdDp0aHJvdyJYTFNCIGRvZXMgbm90'@;
put 'IHN1cHBvcnQgRGF0YSBWYWxpZGF0aW9uIHR5cGUgIitTLnR9cmV0dXJuIDE9PXllJiZrLnB1c2gocGUpLGooayl9ZnVuY3Rpb24gZXooUyxSLGssRyxRLG9lLGdlKXtpZih2b2lkIDA9PT1SLnYmJm51bGw9PVIuc3x8InoiPT09Ui50JiYhUS5zaGVldFN0dWJzKXJldHVybiExO3ZhciBwZT0i'@;
put 'Ijtzd2l0Y2goUi50KXtjYXNlImIiOnBlPVIudj8iMSI6IjAiO2JyZWFrO2Nhc2UiZCI6KFI9cXQoUikpLno9Ui56fHxBLl90YWJsZVsxNF0sUi52PVFlKEhlKFIudikpLFIudD0ibiI7YnJlYWs7Y2FzZSJuIjpjYXNlImUiOnBlPSIiK1IudjticmVhaztkZWZhdWx0OnBlPVIudn12YXIgeWU9'@;
put 'e3I6ayxjOkd9O3N3aXRjaCh5ZS5zPWwwKFEuY2VsbFhmcyxRLmNlbGxTdHlsZVhmcyxSLFEpLFIubCYmb2VbIiFsaW5rcyJdLnB1c2goW3FpKHllKSxSLmxdKSxSLmMmJm9lWyIhY29tbWVudHMiXS5wdXNoKFtxaSh5ZSksUi5jXSksUi50KXtjYXNlInMiOmNhc2Uic3RyIjppZihRLmJvb2tT'@;
put 'U1Qpe2lmKHBlPWFTKFEuU3RyaW5ncyxSLnYsUi5SP1Iucj1RcyhSLlIpOm51bGwsUS5yZXZTdHJpbmdzKSxSLlIpZm9yKHZhciBQZT0wO1BlPFIuUi5sZW5ndGg7KytQZSlSLlJbUGVdLnMmJmwwKFEuY2VsbFhmcyxRLmNlbGxTdHlsZVhmcyx7dDoibiIsdjowLHM6Ui5SW1BlXS5zfSxRKTt5'@;
put 'ZS50PSJzIix5ZS52PXBlLGdlP0ZyKFMsIkJydFNob3J0SXNzdCIsZnVuY3Rpb24gZmIoUyxSLGspe3JldHVybiBudWxsPT1rJiYoaz1ibig4KSksZmkoUixrKSxrLndyaXRlX3NoaWZ0KDQsUi52KSxrfSgwLHllKSk6RnIoUywiQnJ0Q2VsbElzc3QiLGZ1bmN0aW9uIExqKFMsUixrKXtyZXR1'@;
put 'cm4gbnVsbD09ayYmKGs9Ym4oMTIpKSx4cihSLGspLGsud3JpdGVfc2hpZnQoNCxSLnYpLGt9KDAseWUpKX1lbHNlIHllLnQ9InN0ciIsZ2U/RnIoUywiQnJ0U2hvcnRTdCIsZnVuY3Rpb24gemooUyxSLGspe3JldHVybiBudWxsPT1rJiYoaz1ibig4KzQqUy52Lmxlbmd0aCkpLGZpKFIsayks'@;
put 'RmMoUy52LGspLGsubGVuZ3RoPmsubD9rLnNsaWNlKDAsay5sKTprfShSLHllKSk6RnIoUywiQnJ0Q2VsbFN0IixmdW5jdGlvbiBCaihTLFIsayl7cmV0dXJuIG51bGw9PWsmJihrPWJuKDEyKzQqUy52Lmxlbmd0aCkpLHhyKFIsayksRmMoUy52LGspLGsubGVuZ3RoPmsubD9rLnNsaWNlKDAs'@;
put 'ay5sKTprfShSLHllKSk7cmV0dXJuITA7Y2FzZSJuIjpyZXR1cm4gUi52PT0oMHxSLnYpJiZSLnY+LTFlMyYmUi52PDFlMz9nZT9GcihTLCJCcnRTaG9ydFJrIixmdW5jdGlvbiBWaihTLFIsayl7cmV0dXJuIG51bGw9PWsmJihrPWJuKDgpKSxmaShSLGspLHV2KFMudixrKSxrfShSLHllKSk6'@;
put 'RnIoUywiQnJ0Q2VsbFJrIixmdW5jdGlvbiBOaihTLFIsayl7cmV0dXJuIG51bGw9PWsmJihrPWJuKDEyKSkseHIoUixrKSx1dihTLnYsayksa30oUix5ZSkpOmdlP0ZyKFMsIkJydFNob3J0UmVhbCIsZnVuY3Rpb24gSW5lKFMsUixrKXtyZXR1cm4gbnVsbD09ayYmKGs9Ym4oMTIpKSxmaShS'@;
put 'LGspLE91KFMudixrKSxrfShSLHllKSk6RnIoUywiQnJ0Q2VsbFJlYWwiLGZ1bmN0aW9uIFBqKFMsUixrKXtyZXR1cm4gbnVsbD09ayYmKGs9Ym4oMTYpKSx4cihSLGspLE91KFMudixrKSxrfShSLHllKSksITA7Y2FzZSJiIjpyZXR1cm4geWUudD0iYiIsZ2U/RnIoUywiQnJ0U2hvcnRCb29s'@;
put 'IixmdW5jdGlvbiB4UyhTLFIsayl7cmV0dXJuIG51bGw9PWsmJihrPWJuKDUpKSxmaShSLGspLGsud3JpdGVfc2hpZnQoMSxTLnY/MTowKSxrfShSLHllKSk6RnIoUywiQnJ0Q2VsbEJvb2wiLGZ1bmN0aW9uIElqKFMsUixrKXtyZXR1cm4gbnVsbD09ayYmKGs9Ym4oOSkpLHhyKFIsayksay53'@;
put 'cml0ZV9zaGlmdCgxLFMudj8xOjApLGt9KFIseWUpKSwhMDtjYXNlImUiOnJldHVybiB5ZS50PSJlIixnZT9GcihTLCJCcnRTaG9ydEVycm9yIixmdW5jdGlvbiBTbChTLFIsayl7cmV0dXJuIG51bGw9PWsmJihrPWJuKDgpKSxmaShSLGspLGsud3JpdGVfc2hpZnQoMSxTLnYpLGsud3JpdGVf'@;
put 'c2hpZnQoMiwwKSxrLndyaXRlX3NoaWZ0KDEsMCksa30oUix5ZSkpOkZyKFMsIkJydENlbGxFcnJvciIsZnVuY3Rpb24geTgoUyxSLGspe3JldHVybiBudWxsPT1rJiYoaz1ibig5KSkseHIoUixrKSxrLndyaXRlX3NoaWZ0KDEsUy52KSxrfShSLHllKSksITB9cmV0dXJuIGdlP0ZyKFMsIkJy'@;
put 'dFNob3J0QmxhbmsiLGZ1bmN0aW9uIHpEKFMsUixrKXtyZXR1cm4gbnVsbD09ayYmKGs9Ym4oNCkpLGZpKFIsayl9KDAseWUpKTpGcihTLCJCcnRDZWxsQmxhbmsiLGZ1bmN0aW9uIEFqKFMsUixrKXtyZXR1cm4gbnVsbD09ayYmKGs9Ym4oOCkpLHhyKFIsayl9KDAseWUpKSwhMH1mdW5jdGlv'@;
put 'biBXNShTLFIsayxHKXt2YXIgUT1iaSgpLG9lPWsuU2hlZXROYW1lc1tTXSxnZT1rLlNoZWV0c1tvZV18fHt9LHBlPW9lO3RyeXtrJiZrLldvcmtib29rJiYocGU9ay5Xb3JrYm9vay5TaGVldHNbU10uQ29kZU5hbWV8fHBlKX1jYXRjaHt9dmFyIHllPW9vKGdlWyIhcmVmIl18fCJBMSIpO2lm'@;
put 'KHllLmUuYz4xNjM4M3x8eWUuZS5yPjEwNDg1NzUpe2lmKFIuV1RGKXRocm93IG5ldyBFcnJvcigiUmFuZ2UgIisoZ2VbIiFyZWYiXXx8IkExIikrIiBleGNlZWRzIGZvcm1hdCBsaW1pdCBBMTpYRkQxMDQ4NTc2Iik7eWUuZS5jPU1hdGgubWluKHllLmUuYywxNjM4MykseWUuZS5yPU1hdGgu'@;
put 'bWluKHllLmUuYywxMDQ4NTc1KX1yZXR1cm4gZ2VbIiFsaW5rcyJdPVtdLGdlWyIhY29tbWVudHMiXT1bXSxGcihRLCJCcnRCZWdpblNoZWV0IiksKGsudmJhcmF3fHxnZVsiIW91dGxpbmUiXSkmJkZyKFEsIkJydFdzUHJvcCIsZnVuY3Rpb24gVGooUyxSLGspe251bGw9PWsmJihrPWJuKDg0'@;
put 'KzQqUy5sZW5ndGgpKTt2YXIgRz0xOTI7UiYmKFIuYWJvdmUmJihHJj0tNjUpLFIubGVmdCYmKEcmPS0xMjkpKSxrLndyaXRlX3NoaWZ0KDEsRyk7Zm9yKHZhciBRPTE7UTwzOysrUSlrLndyaXRlX3NoaWZ0KDEsMCk7cmV0dXJuIG1mKHthdXRvOjF9LGspLGsud3JpdGVfc2hpZnQoLTQsLTEp'@;
put 'LGsud3JpdGVfc2hpZnQoLTQsLTEpLHM1KFMsayksay5zbGljZSgwLGsubCl9KHBlLGdlWyIhb3V0bGluZSJdKSksRnIoUSwiQnJ0V3NEaW0iLEVqKHllKSksZnVuY3Rpb24gaXooUyxSLGspe0ZyKFMsIkJydEJlZ2luV3NWaWV3cyIpLEZyKFMsIkJydEJlZ2luV3NWaWV3IixmdW5jdGlvbiBN'@;
put 'OChTLFIsayl7bnVsbD09ayYmKGs9Ym4oMzApKTt2YXIgRz05MjQ7cmV0dXJuKCgoUnx8e30pLlZpZXdzfHxbXSlbMF18fHt9KS5SVEwmJihHfD0zMiksV3QoU1siIWdyaWRsaW5lcyJdKSYmKEcmPS01KSxXdCgoKChSfHx7fSkuVmlld3N8fFtdKVswXXx8e30pLmdyaWQpJiYoRyY9LTUpLGsu'@;
put 'd3JpdGVfc2hpZnQoMixHKSxrLndyaXRlX3NoaWZ0KDQsMCksay53cml0ZV9zaGlmdCg0LDApLGsud3JpdGVfc2hpZnQoNCwwKSxrLndyaXRlX3NoaWZ0KDEsMCksay53cml0ZV9zaGlmdCgxLDApLGsud3JpdGVfc2hpZnQoMiwwKSxrLndyaXRlX3NoaWZ0KDIsMTAwKSxrLndyaXRlX3NoaWZ0'@;
put 'KDIsMCksay53cml0ZV9zaGlmdCgyLDApLGsud3JpdGVfc2hpZnQoMiwwKSxrLndyaXRlX3NoaWZ0KDQsMCksa30oUixrKSksUlsiIWZyZWV6ZSJdJiZGcihTLCJCcnRQYW5lIixmdW5jdGlvbiBaaihTKXt2YXIgUj1ObyhTWyIhZnJlZXplIl0pLGs9Ym4oMjkpO3JldHVybiBrLndyaXRlX3No'@;
put 'aWZ0KDgsUi5jLCJmIiksay53cml0ZV9zaGlmdCg4LFIuciwiZiIpLGsud3JpdGVfc2hpZnQoNCxSLnIpLGsud3JpdGVfc2hpZnQoNCxSLmMpLGsud3JpdGVfc2hpZnQoNCwwKSxrLndyaXRlX3NoaWZ0KDEsMyksa30oUikpLFJbIiFzZWwiXSYmRnIoUywiQnJ0U2VsIixmdW5jdGlvbiBXaihT'@;
put 'LFIpe3ZhciBrPWJuKDM2KSxHPVMuY2VsbDtpZighRyl7aWYoIVMucmFuZ2UpdGhyb3cgbmV3IEVycm9yKCJNdXN0IHNwZWNpZnkgYSBzZWxlY3Rpb24gY2VsbCBvciByYW5nZSIpO0c9cWkoTXMoUy5yYW5nZS5yZXBsYWNlKC9ccy4qJC8sIiIpKS5zKX12YXIgUT0ic3RyaW5nIj09dHlwZW9m'@;
put 'IEc/Tm8oRyk6RztpZihSKXt2YXIgb2U9InN0cmluZyI9PXR5cGVvZiBSP05vKFIpOlI7ay53cml0ZV9zaGlmdCg0LFEucj49b2UuciYmUS5jPj1vZS5jPzA6US5yPj1vZS5yJiZRLmM8b2UuYz8yOlEucjxvZS5yJiZRLmM+PW9lLmM/MTozKX1lbHNlIGsud3JpdGVfc2hpZnQoNCwzKTtyZXR1'@;
put 'cm4gay53cml0ZV9zaGlmdCg0LFEuciksay53cml0ZV9zaGlmdCg0LFEuYyksay53cml0ZV9zaGlmdCg0LDApLGsud3JpdGVfc2hpZnQoNCwxKSxrLndyaXRlX3NoaWZ0KDQsUS5yKSxrLndyaXRlX3NoaWZ0KDQsUS5yKSxrLndyaXRlX3NoaWZ0KDQsUS5jKSxrLndyaXRlX3NoaWZ0KDQsUS5j'@;
put 'KSxrfShSWyIhc2VsIl0sUlsiIWZyZWV6ZSJdKSksRnIoUywiQnJ0RW5kV3NWaWV3IiksRnIoUywiQnJ0RW5kV3NWaWV3cyIpfShRLGdlLGsuV29ya2Jvb2spLGZ1bmN0aW9uIG56KFMsUil7IVJ8fCFSWyIhY29scyJdfHwoRnIoUywiQnJ0QmVnaW5Db2xJbmZvcyIpLFJbIiFjb2xzIl0uZm9y'@;
put 'RWFjaChmdW5jdGlvbihrLEcpe2smJkZyKFMsIkJydENvbEluZm8iLGZ1bmN0aW9uIEdqKFMsUixrKXtudWxsPT1rJiYoaz1ibigxOCkpO3ZhciBHPXU4KFMsUik7ay53cml0ZV9zaGlmdCgtNCxTKSxrLndyaXRlX3NoaWZ0KC00LFMpLGsud3JpdGVfc2hpZnQoNCwyNTYqKEcud2lkdGh8fDEw'@;
put 'KSksay53cml0ZV9zaGlmdCg0LDApO3ZhciBRPTA7cmV0dXJuIFIuaGlkZGVuJiYoUXw9MSksIm51bWJlciI9PXR5cGVvZiBHLndpZHRoJiYoUXw9MiksUi5sZXZlbCYmKFF8PVIubGV2ZWw8PDgpLGsud3JpdGVfc2hpZnQoMixRKSxrfShHLGspKX0pLEZyKFMsIkJydEVuZENvbEluZm9zIikp'@;
put 'fShRLGdlKSxmdW5jdGlvbiBKRChTLFIsayxHKXt2YXIgUT1vbyhSWyIhcmVmIl18fCJBMSIpLGdlPSIiLHBlPVtdO0ZyKFMsIkJydEJlZ2luU2hlZXREYXRhIik7dmFyIHllPUFycmF5LmlzQXJyYXkoUiksUGU9US5lLnI7UlsiIXJvd3MiXSYmKFBlPU1hdGgubWF4KFEuZS5yLFJbIiFyb3dz'@;
put 'Il0ubGVuZ3RoLTEpKTtmb3IodmFyIE5lPVEucy5yO05lPD1QZTsrK05lKXtnZT1qaShOZSksTWooUyxSLFEsTmUpO3ZhciBZZT0hMTtpZihOZTw9US5lLnIpZm9yKHZhciBldD1RLnMuYztldDw9US5lLmM7KytldCl7TmU9PT1RLnMuciYmKHBlW2V0XT1UYShldCkpO3ZhciBjdD15ZT8oUltO'@;
put 'ZV18fFtdKVtldF06UltwZVtldF0rZ2VdO1llPSEhY3QmJmV6KFMsY3QsTmUsZXQsRyxSLFllKX19RnIoUywiQnJ0RW5kU2hlZXREYXRhIil9KFEsZ2UsMCxSKSxmdW5jdGlvbiBPbmUoUyxSKXtSWyIhcHJvdGVjdCJdJiZGcihTLCJCcnRTaGVldFByb3RlY3Rpb24iLGZ1bmN0aW9uIG1iKFMs'@;
put 'Uil7cmV0dXJuIG51bGw9PVImJihSPWJuKDY2KSksUi53cml0ZV9zaGlmdCgyLFMucGFzc3dvcmQ/SHYoUy5wYXNzd29yZCk6MCksUi53cml0ZV9zaGlmdCg0LDEpLFtbIm9iamVjdHMiLCExXSxbInNjZW5hcmlvcyIsITFdLFsiZm9ybWF0Q2VsbHMiLCEwXSxbImZvcm1hdENvbHVtbnMiLCEw'@;
put 'XSxbImZvcm1hdFJvd3MiLCEwXSxbImluc2VydENvbHVtbnMiLCEwXSxbImluc2VydFJvd3MiLCEwXSxbImluc2VydEh5cGVybGlua3MiLCEwXSxbImRlbGV0ZUNvbHVtbnMiLCEwXSxbImRlbGV0ZVJvd3MiLCEwXSxbInNlbGVjdExvY2tlZENlbGxzIiwhMV0sWyJzb3J0IiwhMF0sWyJhdXRv'@;
put 'RmlsdGVyIiwhMF0sWyJwaXZvdFRhYmxlcyIsITBdLFsic2VsZWN0VW5sb2NrZWRDZWxscyIsITFdXS5mb3JFYWNoKGZ1bmN0aW9uKGspe1Iud3JpdGVfc2hpZnQoNCxrWzFdP251bGw9PVNba1swXV18fFNba1swXV0/MDoxOm51bGwhPVNba1swXV0mJlNba1swXV0/MDoxKX0pLFJ9KFJbIiFw'@;
put 'cm90ZWN0Il0pKX0oUSxnZSksZnVuY3Rpb24gUUQoUyxSLGssRyl7aWYoUlsiIWF1dG9maWx0ZXIiXSl7dmFyIFE9UlsiIWF1dG9maWx0ZXIiXSxvZT0ic3RyaW5nIj09dHlwZW9mIFEucmVmP1EucmVmOnJhKFEucmVmKTtrLldvcmtib29rfHwoay5Xb3JrYm9vaz17U2hlZXRzOltdfSksay5X'@;
put 'b3JrYm9vay5OYW1lc3x8KGsuV29ya2Jvb2suTmFtZXM9W10pO3ZhciBnZT1rLldvcmtib29rLk5hbWVzLHBlPU1zKG9lKTtwZS5zLnI9PXBlLmUuciYmKHBlLmUucj1NcyhSWyIhcmVmIl0pLmUucixvZT1yYShwZSkpO2Zvcih2YXIgeWU9MDt5ZTxnZS5sZW5ndGg7Kyt5ZSl7dmFyIFBlPWdl'@;
put 'W3llXTtpZigiX3hsbm0uX0ZpbHRlckRhdGFiYXNlIj09UGUuTmFtZSYmUGUuU2hlZXQ9PUcpe1BlLlJlZj0iJyIray5TaGVldE5hbWVzW0ddKyInISIrb2U7YnJlYWt9fXllPT1nZS5sZW5ndGgmJmdlLnB1c2goe05hbWU6Il94bG5tLl9GaWx0ZXJEYXRhYmFzZSIsU2hlZXQ6RyxSZWY6Iici'@;
put 'K2suU2hlZXROYW1lc1tHXSsiJyEiK29lfSksRnIoUywiQnJ0QmVnaW5BRmlsdGVyIixnZihvbyhvZSkpKSxGcihTLCJCcnRFbmRBRmlsdGVyIil9fShRLGdlLGssUyksZnVuY3Rpb24gdHooUyxSKXshUnx8IVJbIiFtZXJnZXMiXXx8KEZyKFMsIkJydEJlZ2luTWVyZ2VDZWxscyIsZnVuY3Rp'@;
put 'b24gWUQoUyxSKXtyZXR1cm4gbnVsbD09UiYmKFI9Ym4oNCkpLFIud3JpdGVfc2hpZnQoNCxTKSxSfShSWyIhbWVyZ2VzIl0ubGVuZ3RoKSksUlsiIW1lcmdlcyJdLmZvckVhY2goZnVuY3Rpb24oayl7RnIoUywiQnJ0TWVyZ2VDZWxsIixDOChrKSl9KSxGcihTLCJCcnRFbmRNZXJnZUNlbGxz'@;
put 'IikpfShRLGdlKSxmdW5jdGlvbiBveihTLFIpe2lmKFIpe0ZyKFMsIkJydEJlZ2luRFZhbHMiLGZ1bmN0aW9uIHZiKFMsUil7bnVsbD09UiYmKFI9Ym4oMTgpKSxSLndyaXRlX3NoaWZ0KDIsMCksUi53cml0ZV9zaGlmdCg0LDApLFIud3JpdGVfc2hpZnQoNCwwKSxSLndyaXRlX3NoaWZ0KDQs'@;
put 'MCk7Zm9yKHZhciBrPTAsRz0wO0c8Uy5sZW5ndGg7KytHKSgoU1tHXXx8e30pLnJlZnx8e30pLnMmJlNbR10ucmVmLnMuYzwwfHwrK2s7cmV0dXJuIFIud3JpdGVfc2hpZnQoNCxrKSxSfShSKSk7Zm9yKHZhciBrPTA7azxSLmxlbmd0aDsrK2spKChSW2tdfHx7fSkucmVmfHx7fSkucyYmUltr'@;
put 'XS5yZWYucy5jPDB8fEZyKFMsIkJydERWYWwiLFhEKFJba10pKTtGcihTLCJCcnRFbmREVmFscyIpfX0oUSxnZVsiIXZhbGlkYXRpb25zIl0pLGZ1bmN0aW9uIGJiKFMsUixrKXtSWyIhbGlua3MiXS5mb3JFYWNoKGZ1bmN0aW9uKEcpe2lmKEdbMV0uVGFyZ2V0KXt2YXIgUT1FcihrLC0xLEdb'@;
put 'MV0uVGFyZ2V0LnJlcGxhY2UoLyMuKiQvLCIiKSxLYS5ITElOSyk7RnIoUywiQnJ0SExpbmsiLGZ1bmN0aW9uIFM4KFMsUil7dmFyIGs9Ym4oNTArNCooU1sxXS5UYXJnZXQubGVuZ3RoKyhTWzFdLlRvb2x0aXB8fCIiKS5sZW5ndGgpKTtnZih7czpObyhTWzBdKSxlOk5vKFNbMF0pfSxrKSxj'@;
put 'NSgicklkIitSLGspO3ZhciBHPVNbMV0uVGFyZ2V0LmluZGV4T2YoIiMiKTtyZXR1cm4gRmMoKC0xPT1HPyIiOlNbMV0uVGFyZ2V0LnNsaWNlKEcrMSkpfHwiIixrKSxGYyhTWzFdLlRvb2x0aXB8fCIiLGspLEZjKCIiLGspLGsuc2xpY2UoMCxrLmwpfShHLFEpKX19KSxkZWxldGUgUlsiIWxp'@;
put 'bmtzIl19KFEsZ2UsRyksZ2VbIiFtYXJnaW5zIl0mJkZyKFEsIkJydE1hcmdpbnMiLGZ1bmN0aW9uIEtqKFMsUil7cmV0dXJuIG51bGw9PVImJihSPWJuKDQ4KSksWDMoUyksS0QuZm9yRWFjaChmdW5jdGlvbihrKXtPdShTW2tdLFIpfSksUn0oZ2VbIiFtYXJnaW5zIl0pKSwoIVJ8fFIuaWdu'@;
put 'b3JlRUN8fG51bGw9PVIuaWdub3JlRUMpJiZmdW5jdGlvbiBaNShTLFIpeyFSfHwhUlsiIXJlZiJdfHwoRnIoUywiQnJ0QmVnaW5DZWxsSWdub3JlRUNzIiksRnIoUywiQnJ0Q2VsbElnbm9yZUVDIixmdW5jdGlvbiBxaihTKXt2YXIgUj1ibigyNCk7cmV0dXJuIFIud3JpdGVfc2hpZnQoNCw0'@;
put 'KSxSLndyaXRlX3NoaWZ0KDQsMSksZ2YoUyxSKSxSfShvbyhSWyIhcmVmIl0pKSksRnIoUywiQnJ0RW5kQ2VsbElnbm9yZUVDcyIpKX0oUSxnZSksZnVuY3Rpb24gcnooUyxSLGssRyl7aWYoUlsiIWNvbW1lbnRzIl0ubGVuZ3RoPjApe3ZhciBRPUVyKEcsLTEsIi4uL2RyYXdpbmdzL3ZtbERy'@;
put 'YXdpbmciKyhrKzEpKyIudm1sIixLYS5WTUwpO0ZyKFMsIkJydExlZ2FjeURyYXdpbmciLGM1KCJySWQiK1EpKSxSWyIhbGVnYWN5Il09UX19KFEsZ2UsUyxHKSxGcihRLCJCcnRFbmRTaGVldCIpLFEuZW5kKCl9ZnVuY3Rpb24geDgoUyl7dmFyIEcsUj1bXSxrPVMubWF0Y2goL148YzpudW1D'@;
put 'YWNoZT4vKTsoUy5tYXRjaCgvPGM6cHQgaWR4PSIoXGQqKSI+KC4qPyk8XC9jOnB0Pi9nbSl8fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKG9lKXt2YXIgZ2U9b2UubWF0Y2goLzxjOnB0IGlkeD0iKFxkKj8pIj48Yzp2PiguKik8XC9jOnY+PFwvYzpwdD4vKTtnZSYmKFJbK2dlWzFdXT1rPytnZVsy'@;
put 'XTpnZVsyXSl9KTt2YXIgUT1RcigoUy5tYXRjaCgvPGM6Zm9ybWF0Q29kZT4oW1xzXFNdKj8pPFwvYzpmb3JtYXRDb2RlPi8pfHxbIiIsIkdlbmVyYWwiXSlbMV0pO3JldHVybihTLm1hdGNoKC88YzpmPiguKj8pPFwvYzpmPi9nbSl8fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKG9lKXtHPW9lLnJl'@;
put 'cGxhY2UoLzwuKj8+L2csIiIpfSksW1IsUSxHXX1LYS5DSEFSVD0iaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlwcy9jaGFydCIsS2EuQ0hBUlRFWD0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9vZmZpY2UvMjAx'@;
put 'NC9yZWxhdGlvbnNoaXBzL2NoYXJ0RXgiO3ZhciBsej0vPCg/Olx3KzopP2NoYXJ0PihbXHNcU10qPyk8XC8oPzpcdys6KT9jaGFydD4vLFJTPS88KD86XHcrOik/cGxvdEFyZWE+KFtcc1xTXSo/KTxcLyg/Olx3KzopP3Bsb3RBcmVhPi8sUG5lPS88KD86XHcrOik/bGVnZW5kPihbXHNcU10q'@;
put 'Pyk8XC8oPzpcdys6KT9sZWdlbmQ+LyxlST0vPCg/Olx3KzopP3RpdGxlPihbXHNcU10qPyk8XC8oPzpcdys6KT90aXRsZT4vO2Z1bmN0aW9uIGIyKFMsUixrLEcsUSxvZSxnZSxwZSl7dmFyIHllPW9lfHx7IiF0eXBlIjoiY2hhcnQifTtpZighUylyZXR1cm4gb2U7Z2UmJmdlLkFuY2hvciYm'@;
put 'KHllWyIhcG9zIl09TDUoZ2UuQW5jaG9yLHBlKSx5ZVsiIXBvc1R5cGUiXT1nZS5BbmNob3IudHlwZS5yZXBsYWNlKC9BbmNob3IvLCIiKSx5ZVsiIWFic3BvcyJdPUw1KGdlLkFuY2hvcixwZSkseWVbIiFyZWxwb3MiXT1BQyhnZS5BbmNob3IscGUpKSx5ZVsiIXBsb3QiXT1bXTt2YXIgUGU9'@;
put 'IiIsTmU9IiIsWWU9Uy5tYXRjaChseik7WWU/KFBlPVMuc2xpY2UoMCxZZS5pbmRleCksTmU9Uy5zbGljZShZZS5pbmRleCtZZVswXS5sZW5ndGgpKTpQZT1OZT1TO3ZhciBldD1bXSxjdD1QZS5tYXRjaCgvPGM6bGFuZy4qPz4vKXx8Uy5tYXRjaCgvPGM6bGFuZy4qPz4vKXx8TmUubWF0Y2go'@;
put 'LzxjOmxhbmcuKj8+Lyk7cmV0dXJuIGN0JiYoeWVbIiFsYW5nIl09KHZyKGN0WzBdKXx8e30pLnZhbHx8ImVuLVVTIiksWWUmJigoZXQ9WWVbMV0ubWF0Y2goZUkpKSYmZnVuY3Rpb24gc3ooUyxSKXt2YXIgaz0iIjtTLm1hdGNoKC88YzpyaWNoPi8pJiZTLnJlcGxhY2UoLzxhOnQ+KFtcc1xT'@;
put 'XSo/KTxcL2E6dD4vZyxmdW5jdGlvbihHLFEpe2srPVF9KSxSWyIhdGl0bGUiXT1rfHwiQ2hhcnQgVGl0bGUifShldFsxXSx5ZSksZnVuY3Rpb24gRm5lKFMsUil7aWYoUyl7dmFyIGs9MCxHPTAsUT0iQSIsb2U9e3M6e3I6MmU2LGM6MmU2fSxlOntyOjAsYzowfX07Uy5yZXBsYWNlKHRJLGZ1'@;
put 'bmN0aW9uKGdlLHBlKXt2YXIgeWU9e3Q6cGUsYzprLHc6MCxzZXI6W119LFBlPVtdLE5lPShnZS5tYXRjaCgvPGM6c2VyLyl8fFtdKS5pbmRleCxZZT1OZT9nZS5zbGljZSgwLE5lKTpnZTsic2NhdHRlciI9PXBlJiYoUGU9Z2UubWF0Y2goLzxjOnNjYXR0ZXJTdHlsZShbXlwvPl0qKVwvPi9t'@;
put 'KSkmJnZyKFBlWzBdKSwiYmFyIj09cGUmJihQZT1nZS5tYXRjaCgvPGM6YmFyRGlyKFteXC8+XSopXC8+L20pKSYmKHllLmJhckRpcj0iYmFyIj09dnIoUGVbMF0pLnZhbD8iaCI6InYiKSwoUGU9WWUubWF0Y2goLzxjOmdyb3VwaW5nKFteXC8+XSopXC8+L20pKSYmKHllLmdyb3VwaW5nPXZy'@;
put 'KFBlWzBdKS52YWx8fCJzdGFuZGFyZCIpLChnZS5tYXRjaChjeil8fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKGN0KXt2YXIgRXQ9W10sYXQ9e30sYnQ9W107aWYoY3QubWF0Y2goLzxjOnR4Pi8pKXt2YXIganQ9eDgoKGN0Lm1hdGNoKC88Yzp0eD4oW1xzXFNdKj8pPFwvYzp0eD4vKXx8W10pWzFd'@;
put 'fHwiIil8fFtdO2p0WzBdJiZqdFswXVswXSYmKGF0Lm5hbWU9anRbMF1bMF0pLGp0WzJdJiYoYXQubmFtZXJlZj1qdFsyXSl9WyJ4VmFsIiwieVZhbCIsImNhdCIsInZhbCIsImJ1YmJsZVNpemUiXS5mb3JFYWNoKGZ1bmN0aW9uKGt0KXt2YXIgS3QsT3Q9Y3QubWF0Y2gobmV3IFJlZ0V4cCgi'@;
put 'PGM6IitrdCsiPltcXHNcXFNdKj88XFwvYzoiK2t0KyI+IiwiZ20iKSk7T3QmJigoT3RbMF0ubWF0Y2goLzxjOmY+KC4qPyk8XC9jOmY+L2dtKXx8W10pLmZvckVhY2goZnVuY3Rpb24oVG4pe0t0PVRuLnJlcGxhY2UoLzwuKj8+L2csIiIpfSksKE90WzBdLm1hdGNoKC88YzooPzpcdyopQ2Fj'@;
put 'aGU+W1xzXFNdKj88XC9jOig/Olx3KilDYWNoZT4vZ20pfHxbXSkuZm9yRWFjaChmdW5jdGlvbihUbil7dmFyIHJyPXg4KFRuKTtvZS5zLnI9b2Uucy5jPTAsb2UuZS5jPWssUT1UYShrKSxyclswXS5mb3JFYWNoKGZ1bmN0aW9uKFNuLGxyKXtSW1EramkobHIpXT17dDoibnVtYmVyIj09dHlw'@;
put 'ZW9mIFNuPyJuIjoicyIsdjpTbix6OnJyWzFdfSxHPWxyfSksb2UuZS5yPEcmJihvZS5lLnI9RyksKytrLHllLncrKyxFdC5wdXNoKGt0KSwocnJbMl18fEt0KSYmYnQucHVzaChyclsyXXx8S3QpLCJ2YWwiPT1rdCYmKGF0Lno9cnJbMV18fCJHZW5lcmFsIil9KSl9KSwoUGU9Z2UubWF0Y2go'@;
put 'LzxjOnNtb290aChbXlwvPl0qKVwvPi9tKSkmJihhdC5zbW9vdGg9bnVsbD09dnIoUGVbMF0pLnZhbHx8dGkodnIoUGVbMF0pLnZhbCkpLGF0LmNvbHM9RXQsYXQucmFuZ2VzPWJ0LHllLnNlci5wdXNoKGF0KX0pLCJkb3VnaG51dCI9PXBlJiYoUGU9Z2UubWF0Y2goLzxjOmhvbGVTaXplKFte'@;
put 'XC8+XSopXC8+L20pKSYmKHllLmhvbGU9KHZyKFBlWzBdKS52YWx8fDEwKS8xMDApLFJbIiFwbG90Il0ucHVzaCh5ZSl9KSxrPjAmJihSWyIhcmVmIl09cmEob2UpKX19KChZZVsxXS5tYXRjaChSUyl8fFtdKVsxXSx5ZSksbnVsbCE9KGV0PVllWzFdLm1hdGNoKFBuZSkpJiZmdW5jdGlvbiBF'@;
put 'byhTLFIpe3ZhciBrO1JbIiFsZWdlbmQiXT17cG9zOiJyIn0sKGs9Uy5tYXRjaCgvPGM6bGVnZW5kUG9zKFteXC8+XSopXC8+L20pKSYmKFJbIiFsZWdlbmQiXS5wb3M9dnIoa1swXSkudmFsfHwiciIpfShldFswXSx5ZSkpLHllfXZhciB0ST0vPGM6KCg/OmFyZWF8bGluZXxzdG9ja3xyYWRh'@;
put 'cnxzY2F0dGVyfHBpZXxkb3VnaG51dHxiYXJ8b2ZQaWV8c3VyZmFjZXxidWJibGUpKD86M0QpPylDaGFydFtePl0qPihbXHNcU10qPyk8XC9jOig/OmFyZWF8bGluZXxzdG9ja3xyYWRhcnxzY2F0dGVyfHBpZXxkb3VnaG51dHxiYXJ8b2ZQaWV8c3VyZmFjZXxidWJibGUpKD86M0QpP0NoYXJ0'@;
put 'Pi9nbSxjej0vPGM6c2VyPihbXHNcU10qPyk8XC9jOnNlcj4vZ207S2EuQ1M9Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L3JlbGF0aW9uc2hpcHMvY2hhcnRzaGVldCI7dmFyIFdhPVByKCJjaGFydHNoZWV0IixudWxsLHt4bWxuczpZaS5t'@;
put 'YWluWzBdLCJ4bWxuczpyIjpZaS5yfSk7ZnVuY3Rpb24gTFMoUyxSLGssRyl7dmFyIFE9W0lpLFdhXTtyZXR1cm4gUS5wdXNoKCI8c2hlZXRQci8+IiksUS5wdXNoKCc8c2hlZXRWaWV3cz48c2hlZXRWaWV3IHpvb21TY2FsZT0iMTAwIiB3b3JrYm9va1ZpZXdJZD0iMCIgem9vbVRvRml0PSIx'@;
put 'Ii8+PC9zaGVldFZpZXdzPicpLFFbUS5sZW5ndGhdPVByKCJkcmF3aW5nIixudWxsLHsicjppZCI6InJJZDEifSksRXIoRywtMSwiLi4vZHJhd2luZ3MvZHJhd2luZyIrKFMrMSkrIi54bWwiLEthLkRSQVcpLFEubGVuZ3RoPjImJihRW1EubGVuZ3RoXT0iPC9jaGFydHNoZWV0PiIsUVsxXT1R'@;
put 'WzFdLnJlcGxhY2UoIi8+IiwiPiIpKSxRLmpvaW4oIiIpfWZ1bmN0aW9uIE9TKCl7dmFyIFM9YmkoKTtyZXR1cm4gRnIoUywiQnJ0QmVnaW5TaGVldCIpLEZyKFMsIkJydEVuZFNoZWV0IiksUy5lbmQoKX12YXIgeWI9W1siYWxsb3dSZWZyZXNoUXVlcnkiLCExLCJib29sIl0sWyJhdXRvQ29t'@;
put 'cHJlc3NQaWN0dXJlcyIsITAsImJvb2wiXSxbImJhY2t1cEZpbGUiLCExLCJib29sIl0sWyJjaGVja0NvbXBhdGliaWxpdHkiLCExLCJib29sIl0sWyJDb2RlTmFtZSIsIiJdLFsiZGF0ZTE5MDQiLCExLCJib29sIl0sWyJkZWZhdWx0VGhlbWVWZXJzaW9uIiwwLCJpbnQiXSxbImZpbHRlclBy'@;
put 'aXZhY3kiLCExLCJib29sIl0sWyJoaWRlUGl2b3RGaWVsZExpc3QiLCExLCJib29sIl0sWyJwcm9tcHRlZFNvbHV0aW9ucyIsITEsImJvb2wiXSxbInB1Ymxpc2hJdGVtcyIsITEsImJvb2wiXSxbInJlZnJlc2hBbGxDb25uZWN0aW9ucyIsITEsImJvb2wiXSxbInNhdmVFeHRlcm5hbExpbmtW'@;
put 'YWx1ZXMiLCEwLCJib29sIl0sWyJzaG93Qm9yZGVyVW5zZWxlY3RlZFRhYmxlcyIsITAsImJvb2wiXSxbInNob3dJbmtBbm5vdGF0aW9uIiwhMCwiYm9vbCJdLFsic2hvd09iamVjdHMiLCJhbGwiXSxbInNob3dQaXZvdENoYXJ0RmlsdGVyIiwhMSwiYm9vbCJdLFsidXBkYXRlTGlua3MiLCJ1'@;
put 'c2VyU2V0Il1dLG5JPVtbImFjdGl2ZVRhYiIsMCwiaW50Il0sWyJhdXRvRmlsdGVyRGF0ZUdyb3VwaW5nIiwhMCwiYm9vbCJdLFsiZmlyc3RTaGVldCIsMCwiaW50Il0sWyJtaW5pbWl6ZWQiLCExLCJib29sIl0sWyJzaG93SG9yaXpvbnRhbFNjcm9sbCIsITAsImJvb2wiXSxbInNob3dTaGVl'@;
put 'dFRhYnMiLCEwLCJib29sIl0sWyJzaG93VmVydGljYWxTY3JvbGwiLCEwLCJib29sIl0sWyJ0YWJSYXRpbyIsNjAwLCJpbnQiXSxbInZpc2liaWxpdHkiLCJ2aXNpYmxlIl1dLHJJPVtdLGZ6PVtbImNhbGNDb21wbGV0ZWQiLCJ0cnVlIl0sWyJjYWxjTW9kZSIsImF1dG8iXSxbImNhbGNPblNh'@;
put 'dmUiLCJ0cnVlIl0sWyJjb25jdXJyZW50Q2FsYyIsInRydWUiXSxbImZ1bGxDYWxjT25Mb2FkIiwiZmFsc2UiXSxbImZ1bGxQcmVjaXNpb24iLCJ0cnVlIl0sWyJpdGVyYXRlIiwiZmFsc2UiXSxbIml0ZXJhdGVDb3VudCIsIjEwMCJdLFsiaXRlcmF0ZURlbHRhIiwiMC4wMDEiXSxbInJlZk1v'@;
put 'ZGUiLCJBMSJdXTtmdW5jdGlvbiBpSShTLFIpe2Zvcih2YXIgaz0wO2shPVMubGVuZ3RoOysraylmb3IodmFyIEc9U1trXSxRPTA7USE9Ui5sZW5ndGg7KytRKXt2YXIgb2U9UltRXTtpZihudWxsPT1HW29lWzBdXSlHW29lWzBdXT1vZVsxXTtlbHNlIHN3aXRjaChvZVsyXSl7Y2FzZSJib29s'@;
put 'Ijoic3RyaW5nIj09dHlwZW9mIEdbb2VbMF1dJiYoR1tvZVswXV09dGkoR1tvZVswXV0pKTticmVhaztjYXNlImludCI6InN0cmluZyI9PXR5cGVvZiBHW29lWzBdXSYmKEdbb2VbMF1dPXBhcnNlSW50KEdbb2VbMF1dLDEwKSl9fX1mdW5jdGlvbiBRMyhTLFIpe2Zvcih2YXIgaz0wO2shPVIu'@;
put 'bGVuZ3RoOysrayl7dmFyIEc9UltrXTtpZihudWxsPT1TW0dbMF1dKVNbR1swXV09R1sxXTtlbHNlIHN3aXRjaChHWzJdKXtjYXNlImJvb2wiOiJzdHJpbmciPT10eXBlb2YgU1tHWzBdXSYmKFNbR1swXV09dGkoU1tHWzBdXSkpO2JyZWFrO2Nhc2UiaW50Ijoic3RyaW5nIj09dHlwZW9mIFNb'@;
put 'R1swXV0mJihTW0dbMF1dPXBhcnNlSW50KFNbR1swXV0sMTApKX19fWZ1bmN0aW9uIFBTKFMpe1EzKFMuV0JQcm9wcyx5YiksUTMoUy5DYWxjUHIsZnopLGlJKFMuV0JWaWV3LG5JKSxpSShTLlNoZWV0cyxySSksYzguZGF0ZTE5MDQ9dGkoUy5XQlByb3BzLmRhdGUxOTA0KX12YXIgcHo9Il1b'@;
put 'Kj8vXFwiLnNwbGl0KCIiKTtmdW5jdGlvbiBfYihTLFIpe2lmKFMubGVuZ3RoPjMxKXtpZihSKXJldHVybiExO3Rocm93IG5ldyBFcnJvcigiU2hlZXQgbmFtZXMgY2Fubm90IGV4Y2VlZCAzMSBjaGFycyIpfXZhciBrPSEwO3JldHVybiBwei5mb3JFYWNoKGZ1bmN0aW9uKEcpe2lmKC0xIT1T'@;
put 'LmluZGV4T2YoRykpe2lmKCFSKXRocm93IG5ldyBFcnJvcigiU2hlZXQgbmFtZSBjYW5ub3QgY29udGFpbiA6IFxcIC8gPyAqIFsgXSIpO2s9ITF9fSksa312YXIgRTg9Lzxcdys6d29ya2Jvb2svLHNJPVByKCJ3b3JrYm9vayIsbnVsbCx7eG1sbnM6WWkubWFpblswXSwieG1sbnM6ciI6WWku'@;
put 'cn0pO2Z1bmN0aW9uIFQ4KFMsUil7dmFyIGs9Unx8e30sRz1bSWldO0dbRy5sZW5ndGhdPXNJO3ZhciBRPVMuV29ya2Jvb2smJihTLldvcmtib29rLk5hbWVzfHxbXSkubGVuZ3RoPjA7Uy5Xb3JrYm9vayYmUy5Xb3JrYm9vay5Nb2RpZnkmJihHW0cubGVuZ3RoXT1mdW5jdGlvbiBlcChTKXt2'@;
put 'YXIgUj17fTtyZXR1cm4gUy53YXJuJiYoUi5yZWFkT25seVJlY29tbWVuZGVkPTEpLFIudXNlck5hbWU9Uy51c2VyfHwiU2hlZXQgSlMiLFMuZW5jcnlwdGlvbiYmKFMuZW5jcnlwdGlvbi5hbGdvJiYoUi5hbGdvcml0aG1OYW1lPVMuZW5jcnlwdGlvbi5hbGdvKSxTLmVuY3J5cHRpb24uaGFz'@;
put 'aCYmKFIuaGFzaFZhbHVlPVMuZW5jcnlwdGlvbi5oYXNoKSxTLmVuY3J5cHRpb24uc2FsdCYmKFIuc2FsdFZhbHVlPVMuZW5jcnlwdGlvbi5zYWx0KSxTLmVuY3J5cHRpb24uc3BpbiYmKFIuc3BpbkNvdW50PVMuZW5jcnlwdGlvbi5zcGluKSksUHIoImZpbGVTaGFyaW5nIixudWxsLFIpfShT'@;
put 'Lldvcmtib29rLk1vZGlmeSkpO3ZhciBvZT17Y29kZU5hbWU6IlRoaXNXb3JrYm9vayJ9O1MuV29ya2Jvb2smJlMuV29ya2Jvb2suV0JQcm9wcyYmKHliLmZvckVhY2goZnVuY3Rpb24oUGUpe251bGwhPVMuV29ya2Jvb2suV0JQcm9wc1tQZVswXV0mJlMuV29ya2Jvb2suV0JQcm9wc1tQZVsw'@;
put 'XV0hPVBlWzFdJiYob2VbUGVbMF1dPVMuV29ya2Jvb2suV0JQcm9wc1tQZVswXV0pfSksUy5Xb3JrYm9vay5XQlByb3BzLkNvZGVOYW1lJiYob2UuY29kZU5hbWU9Uy5Xb3JrYm9vay5XQlByb3BzLkNvZGVOYW1lLGRlbGV0ZSBvZS5Db2RlTmFtZSkpLEdbRy5sZW5ndGhdPVByKCJ3b3JrYm9v'@;
put 'a1ByIixudWxsLG9lKSxTLldvcmtib29rJiZTLldvcmtib29rLlByb3RlY3Rpb24mJihHW0cubGVuZ3RoXT1mdW5jdGlvbiB3YihTKXt2YXIgUj17fTtyZXR1cm4gUy5sb2NrU3RydWN0dXJlJiYoUi5sb2NrU3RydWN0dXJlPTEpLFMubG9ja1dpbmRvd3MmJihSLmxvY2tXaW5kb3dzPTEpLFMu'@;
put 'ZW5jcnlwdGlvbiYmKFMuZW5jcnlwdGlvbi5hbGdvJiYoUi53b3JrYm9va0FsZ29yaXRobU5hbWU9Uy5lbmNyeXB0aW9uLmFsZ28pLFMuZW5jcnlwdGlvbi5oYXNoJiYoUi53b3JrYm9va0hhc2hWYWx1ZT1TLmVuY3J5cHRpb24uaGFzaCksUy5lbmNyeXB0aW9uLnNhbHQmJihSLndvcmtib29r'@;
put 'U2FsdFZhbHVlPVMuZW5jcnlwdGlvbi5zYWx0KSxTLmVuY3J5cHRpb24uc3BpbiYmKFIud29ya2Jvb2tTcGluQ291bnQ9Uy5lbmNyeXB0aW9uLnNwaW4pKSxQcigid29ya2Jvb2tQcm90ZWN0aW9uIixudWxsLFIpfShTLldvcmtib29rLlByb3RlY3Rpb24pKTt2YXIgZ2U9Uy5Xb3JrYm9vayYm'@;
put 'Uy5Xb3JrYm9vay5TaGVldHN8fFtdLHBlPTA7aWYoZ2UmJmdlWzBdJiZnZVswXS5IaWRkZW4pe2ZvcihHW0cubGVuZ3RoXT0iPGJvb2tWaWV3cz4iLHBlPTA7cGUhPVMuU2hlZXROYW1lcy5sZW5ndGgmJmdlW3BlXSYmZ2VbcGVdLkhpZGRlbjsrK3BlKTtwZT09Uy5TaGVldE5hbWVzLmxlbmd0'@;
put 'aCYmKHBlPTApLEdbRy5sZW5ndGhdPSc8d29ya2Jvb2tWaWV3IGZpcnN0U2hlZXQ9IicrcGUrJyIgYWN0aXZlVGFiPSInK3BlKyciLz4nLEdbRy5sZW5ndGhdPSI8L2Jvb2tWaWV3cz4ifWZvcihHW0cubGVuZ3RoXT0iPHNoZWV0cz4iLHBlPTA7cGUhPVMuU2hlZXROYW1lcy5sZW5ndGg7Kytw'@;
put 'ZSl7dmFyIHllPXtuYW1lOkxyKFMuU2hlZXROYW1lc1twZV0uc2xpY2UoMCwzMSkpfTtpZih5ZS5zaGVldElkPSIiKyhwZSsxKSx5ZVsicjppZCJdPSJySWQiKyhwZSsxKSxnZVtwZV0pc3dpdGNoKGdlW3BlXS5IaWRkZW4pe2Nhc2UgMTp5ZS5zdGF0ZT0iaGlkZGVuIjticmVhaztjYXNlIDI6'@;
put 'eWUuc3RhdGU9InZlcnlIaWRkZW4ifUdbRy5sZW5ndGhdPVByKCJzaGVldCIsbnVsbCx5ZSl9cmV0dXJuIEdbRy5sZW5ndGhdPSI8L3NoZWV0cz4iLFMuRXh0ZXJuYWxXQiYmUy5FeHRlcm5hbFdCLmxlbmd0aCYmKEdbRy5sZW5ndGhdPSI8ZXh0ZXJuYWxSZWZlcmVuY2VzPiIsKFMuRXh0ZXJu'@;
put 'YWxXQnx8W10pLmZvckVhY2goZnVuY3Rpb24oUGUsTmUpe3ZhciBZZT1FcihrLndicmVscywtMSwiZXh0ZXJuYWxMaW5rcy9leHRlcm5hbExpbmsiKyhOZSsxKSsiLnhtbCIsS2EuWExJTkspO0dbRy5sZW5ndGhdPSc8ZXh0ZXJuYWxSZWZlcmVuY2UgcjppZD0icklkJytZZSsnIi8+J30pLEdb'@;
put 'Ry5sZW5ndGhdPSI8L2V4dGVybmFsUmVmZXJlbmNlcz4iKSxRJiYoR1tHLmxlbmd0aF09IjxkZWZpbmVkTmFtZXM+IixTLldvcmtib29rJiZTLldvcmtib29rLk5hbWVzJiZTLldvcmtib29rLk5hbWVzLmZvckVhY2goZnVuY3Rpb24oUGUpe3ZhciBOZT17bmFtZTpQZS5OYW1lfTtQZS5Db21t'@;
put 'ZW50JiYoTmUuY29tbWVudD1QZS5Db21tZW50KSxudWxsIT1QZS5TaGVldCYmKE5lLmxvY2FsU2hlZXRJZD0iIitQZS5TaGVldCksUGUuSGlkZGVuJiYoTmUuaGlkZGVuPSIxIiksUGUuUmVmJiYoR1tHLmxlbmd0aF09UHIoImRlZmluZWROYW1lIixMcihQZS5SZWYpLE5lKSl9KSxHW0cubGVu'@;
put 'Z3RoXT0iPC9kZWZpbmVkTmFtZXM+IiksayYmay5waXZvdHMmJmsucGl2b3RzLmxlbmd0aD4wJiYoRy5wdXNoKCI8cGl2b3RDYWNoZXM+Iiksay5waXZvdHMuZm9yRWFjaChmdW5jdGlvbihQZSxOZSl7Ry5wdXNoKCc8cGl2b3RDYWNoZSBjYWNoZUlkPSInKyhOZSsxKSsnIiByOmlkPSJySWQn'@;
put 'K1BlWzJdKyciLz4nKX0pLEcucHVzaCgiPC9waXZvdENhY2hlcz4iKSksRy5sZW5ndGg+MiYmKEdbRy5sZW5ndGhdPSI8L3dvcmtib29rPiIsR1sxXT1HWzFdLnJlcGxhY2UoIi8+IiwiPiIpKSxHLmpvaW4oIiIpfWZ1bmN0aW9uIG16KFMsUil7cmV0dXJuIFJ8fChSPWJuKDEyNykpLFIud3Jp'@;
put 'dGVfc2hpZnQoNCxTLkhpZGRlbiksUi53cml0ZV9zaGlmdCg0LFMuaVRhYklEKSxjNShTLnN0clJlbElELFIpLEZjKFMubmFtZS5zbGljZSgwLDMxKSxSKSxSLmxlbmd0aD5SLmw/Ui5zbGljZSgwLFIubCk6Un1mdW5jdGlvbiB0cChTLFIpe3ZhciBrPXt9O3JldHVybiBTLnJlYWRfc2hpZnQo'@;
put 'NCksay5BcmNoSUQ9Uy5yZWFkX3NoaWZ0KDQpLFMubCs9Ui04LGt9ZnVuY3Rpb24gU2IoUyxSKXt2YXIgaz1iaSgpO3JldHVybiBGcihrLCJCcnRCZWdpbkJvb2siKSxGcihrLCJCcnRGaWxlVmVyc2lvbiIsZnVuY3Rpb24gY0koUyxSKXtSfHwoUj1ibigxMjcpKTtmb3IodmFyIGs9MDs0IT1r'@;
put 'OysraylSLndyaXRlX3NoaWZ0KDQsMCk7cmV0dXJuIEZjKCJTaGVldEpTIixSKSxGYyh3LnZlcnNpb24sUiksRmMody52ZXJzaW9uLFIpLEZjKCI3MjYyIixSKSxSLmxlbmd0aD5SLmw/Ui5zbGljZSgwLFIubCk6Un0oKSksRnIoaywiQnJ0V2JQcm9wIixmdW5jdGlvbiBsSShTLFIpe1J8fChS'@;
put 'PWJuKDcyKSk7dmFyIGs9MDtyZXR1cm4gUyYmUy5maWx0ZXJQcml2YWN5JiYoa3w9OCksUi53cml0ZV9zaGlmdCg0LGspLFIud3JpdGVfc2hpZnQoNCwwKSxzNShTJiZTLkNvZGVOYW1lfHwiVGhpc1dvcmtib29rIixSKSxSLnNsaWNlKDAsUi5sKX0oUy5Xb3JrYm9vayYmUy5Xb3JrYm9vay5X'@;
put 'QlByb3BzfHxudWxsKSksZnVuY3Rpb24gdnooUyxSKXtpZihSLldvcmtib29rJiZSLldvcmtib29rLlNoZWV0cyl7Zm9yKHZhciBrPVIuV29ya2Jvb2suU2hlZXRzLEc9MCxRPS0xLG9lPS0xO0c8ay5sZW5ndGg7KytHKSFrW0ddfHwha1tHXS5IaWRkZW4mJi0xPT1RP1E9RzoxPT1rW0ddLkhp'@;
put 'ZGRlbiYmLTE9PW9lJiYob2U9Ryk7b2U+UXx8KEZyKFMsIkJydEJlZ2luQm9va1ZpZXdzIiksRnIoUywiQnJ0Qm9va1ZpZXciLGZ1bmN0aW9uIHVJKFMsUil7cmV0dXJuIFJ8fChSPWJuKDI5KSksUi53cml0ZV9zaGlmdCgtNCwwKSxSLndyaXRlX3NoaWZ0KC00LDQ2MCksUi53cml0ZV9zaGlm'@;
put 'dCg0LDI4ODAwKSxSLndyaXRlX3NoaWZ0KDQsMTc2MDApLFIud3JpdGVfc2hpZnQoNCw1MDApLFIud3JpdGVfc2hpZnQoNCxTKSxSLndyaXRlX3NoaWZ0KDQsUyksUi53cml0ZV9zaGlmdCgxLDEyMCksUi5sZW5ndGg+Ui5sP1Iuc2xpY2UoMCxSLmwpOlJ9KFEpKSxGcihTLCJCcnRFbmRCb29r'@;
put 'Vmlld3MiKSl9fShrLFMpLGZ1bmN0aW9uIENiKFMsUil7RnIoUywiQnJ0QmVnaW5CdW5kbGVTaHMiKTtmb3IodmFyIGs9MDtrIT1SLlNoZWV0TmFtZXMubGVuZ3RoOysraylGcihTLCJCcnRCdW5kbGVTaCIsbXooe0hpZGRlbjpSLldvcmtib29rJiZSLldvcmtib29rLlNoZWV0cyYmUi5Xb3Jr'@;
put 'Ym9vay5TaGVldHNba10mJlIuV29ya2Jvb2suU2hlZXRzW2tdLkhpZGRlbnx8MCxpVGFiSUQ6aysxLHN0clJlbElEOiJySWQiKyhrKzEpLG5hbWU6Ui5TaGVldE5hbWVzW2tdfSkpO0ZyKFMsIkJydEVuZEJ1bmRsZVNocyIpfShrLFMpLEZyKGssIkJydEVuZEJvb2siKSxrLmVuZCgpfWZ1bmN0'@;
put 'aW9uIGRJKFMsUixrLEcsUSl7cmV0dXJuKCIuYmluIj09PVIuc2xpY2UoLTQpP1c1OlZEKShTLGssRyxRKX1mdW5jdGlvbiBoSShTLFIsayxHLFEpe3JldHVybigiLmJpbiI9PT1SLnNsaWNlKC00KT9PUzpMUykoUyxrLEcsUSl9ZnVuY3Rpb24gZkkoUyxSLGspe3JldHVybigiLmJpbiI9PT1S'@;
put 'LnNsaWNlKC00KT91azpSdikoUyxrKX1mdW5jdGlvbiBBeihTLFIsayl7cmV0dXJuKCIuYmluIj09PVIuc2xpY2UoLTQpP05DOkhDKShTLGspfXZhciBCUz0vKFtcdzpdKyk9KCg/OiIpKFteIl0qKSg/OiIpfCg/OicpKFteJ10qKSg/OicpKS9nLE1iPS8oW1x3Ol0rKT0oKD86IikoPzpbXiJd'@;
put 'KikoPzoiKXwoPzonKSg/OlteJ10qKSg/OicpKS87ZnVuY3Rpb24gSDAoUyxSKXt2YXIgaz1TLnNwbGl0KC9ccysvKSxHPVtdO2lmKFJ8fChHWzBdPWtbMF0pLDE9PT1rLmxlbmd0aClyZXR1cm4gRzt2YXIgb2UsZ2UseWUsUT1TLm1hdGNoKEJTKTtpZihRKWZvcih5ZT0wO3llIT1RLmxlbmd0'@;
put 'aDsrK3llKS0xPT09KGdlPShvZT1RW3llXS5tYXRjaChNYikpWzFdLmluZGV4T2YoIjoiKSk/R1tvZVsxXV09b2VbMl0uc2xpY2UoMSxvZVsyXS5sZW5ndGgtMSk6R1sieG1sbnM6Ij09PW9lWzFdLnNsaWNlKDAsNik/InhtbG5zIitvZVsxXS5zbGljZSg2KTpvZVsxXS5zbGljZShnZSsxKV09'@;
put 'b2VbMl0uc2xpY2UoMSxvZVsyXS5sZW5ndGgtMSk7cmV0dXJuIEd9ZnVuY3Rpb24galMoUyl7dmFyIGs9e307aWYoMT09PVMuc3BsaXQoL1xzKy8pLmxlbmd0aClyZXR1cm4gazt2YXIgUSxvZSxwZSxHPVMubWF0Y2goQlMpO2lmKEcpZm9yKHBlPTA7cGUhPUcubGVuZ3RoOysrcGUpLTE9PT0o'@;
put 'b2U9KFE9R1twZV0ubWF0Y2goTWIpKVsxXS5pbmRleE9mKCI6IikpP2tbUVsxXV09UVsyXS5zbGljZSgxLFFbMl0ubGVuZ3RoLTEpOmtbInhtbG5zOiI9PT1RWzFdLnNsaWNlKDAsNik/InhtbG5zIitRWzFdLnNsaWNlKDYpOlFbMV0uc2xpY2Uob2UrMSldPVFbMl0uc2xpY2UoMSxRWzJdLmxl'@;
put 'bmd0aC0xKTtyZXR1cm4ga31mdW5jdGlvbiBreihTKXt2YXIgUj17fTtpZihTLkRlZmF1bHRSb3dIZWlnaHQpe3ZhciBrPXtocHg6NCpwYXJzZUludChTLkRlZmF1bHRSb3dIZWlnaHQpLzN9O2p2KGspLFIucm93PWt9aWYoUy5EZWZhdWx0Q29sV2lkdGgpe3ZhciBHPXt3cHg6NCpwYXJzZUlu'@;
put 'dChTLkRlZmF1bHRDb2xXaWR0aCkvM307UTAoRyksUi5jb2w9R31yZXR1cm4gUn1mdW5jdGlvbiBJeihTLFIsayxHKXt2YXIgUT1HO3N3aXRjaCgoa1swXS5tYXRjaCgvZHQ6ZHQ9IihbXHcuXSspIi8pfHxbIiIsIiJdKVsxXSl7Y2FzZSJib29sZWFuIjpRPXRpKEcpO2JyZWFrO2Nhc2UiaTIi'@;
put 'OmNhc2UiaW50IjpRPXBhcnNlSW50KEcsMTApO2JyZWFrO2Nhc2UicjQiOmNhc2UiZmxvYXQiOlE9cGFyc2VGbG9hdChHKTticmVhaztjYXNlImRhdGUiOmNhc2UiZGF0ZVRpbWUudHoiOlE9SGUoRyk7YnJlYWs7Y2FzZSJpOCI6Y2FzZSJzdHJpbmciOmNhc2UiZml4ZWQiOmNhc2UidXVpZCI6'@;
put 'Y2FzZSJiaW4uYmFzZTY0IjpicmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiYmFkIGN1c3Rwcm9wOiIra1swXSl9U1tRcihSKV09UX12YXIgeGI9ezA6Ik5vbmUiLDE6IlNpbmdsZSIsMjoiRG91YmxlIiwzMzoiU2luZ2xlQWNjb3VudGluZyIsMzQ6IkRvdWJsZUFjY291bnRpbmcifSxw'@;
put 'ST1rZSh4Yik7ZnVuY3Rpb24gVVMoUyxSLGssRyl7aWYoRy5jZWxsU3R5bGVzKXtpZihrPWsucmVwbGFjZSgvXHMrL2csIiAiKSxSLkludGVyaW9yKXt2YXIgUT1SLkludGVyaW9yO1EuUGF0dGVybiYmKFEucGF0dGVyblR5cGU9bUNbUS5QYXR0ZXJuXXx8US5QYXR0ZXJuKSxRLkNvbG9yJiZR'@;
put 'LkNvbG9yLm1hdGNoKC8jWzAtOUEtRmEtZl0qLykmJihRLmZnQ29sb3I9e3JnYjpRLkNvbG9yLnNsaWNlKDEpfSl9IWZ1bmN0aW9uIFJ6KFMpe1MuQm9yZGVycyYmKFMuQm9yZGVycy5mb3JFYWNoKGZ1bmN0aW9uKFIpe3ZhciBrPVIuUG9zaXRpb24udG9Mb3dlckNhc2UoKTtTW2tdPXtzdHls'@;
put 'ZTpaUyhSLkxpbmVTdHlsZSwrUi5XZWlnaHQpLGNvbG9yOntyZ2I6KFIuQ29sb3J8fCIjMDAwMDAwIikuc2xpY2UoMSl9fX0pLGRlbGV0ZSBTLkJvcmRlcnMpfShSKTt2YXIgZ2Usb2U9ay5tYXRjaCgvPCg/Olx3KzopP0ZvbnRcc1tePl0qPi8pO29lJiYodGkoKGdlPXZyKG9lWzBdKSkuQm9s'@;
put 'ZCkmJihSLkJvbGQ9ITApLHRpKGdlLkl0YWxpYykmJihSLkl0YWxpYz0hMCksdGkoZ2UuU3RyaWtlVGhyb3VnaCkmJihSLlN0cmlrZT0hMCksZ2UuU2l6ZSYmKFIuU2l6ZT0rZ2UuU2l6ZSksUi5Gb250TmFtZT1nZS5Gb250TmFtZT9nZS5Gb250TmFtZToiQXJpYWwiLGdlLlVuZGVybGluZSYm'@;
put 'KFIuVW5kZXJsaW5lPXBJW2dlLlVuZGVybGluZV0pLGdlLkNvbG9yJiYoUi5SR0I9Z2UuQ29sb3Iuc2xpY2UoLTYpKSksUi5BbGlnbm1lbnQmJihSLmFsaWdubWVudD17fSxSLkFsaWdubWVudC5WZXJ0aWNhbCYmKFIuYWxpZ25tZW50LnZlcnRpY2FsPVIuQWxpZ25tZW50LlZlcnRpY2FsLnRv'@;
put 'TG93ZXJDYXNlKCkpLFIuQWxpZ25tZW50Lkhvcml6b250YWwmJihSLmFsaWdubWVudC5ob3Jpem9udGFsPVIuQWxpZ25tZW50Lkhvcml6b250YWwudG9Mb3dlckNhc2UoKSksdGkoUi5BbGlnbm1lbnQuV3JhcFRleHR8fCIwIik/Ui5hbGlnbm1lbnQud3JhcFRleHQ9ITA6bnVsbD09Ui5BbGln'@;
put 'bm1lbnQuV3JhcFRleHQmJmRlbGV0ZSBSLmFsaWdubWVudC53cmFwVGV4dCx0aShSLkFsaWdubWVudC5TaHJpbmtUb0ZpdHx8IjAiKSYmKFIuYWxpZ25tZW50LnNocmlua1RvRml0PSEwKSwrUi5BbGlnbm1lbnQuSW5kZW50JiYoUi5hbGlnbm1lbnQuaW5kZW50PStSLkFsaWdubWVudC5JbmRl'@;
put 'bnR8fDApLCtSLkFsaWdubWVudC5Sb3RhdGUmJihSLmFsaWdubWVudC50ZXh0Um90YXRpb249K1IuQWxpZ25tZW50LlJvdGF0ZXx8MCkpfVNbUi5JRF09UiwoIkRlZmF1bHQiPT1SLklEfHwiTm9ybWFsIj09Ui5OYW1lKSYmSTQoUil9ZnVuY3Rpb24gWlMoUyxSKXtzd2l0Y2goUyl7Y2FzZSJO'@;
put 'b25lIjpyZXR1cm4ibm9uZSI7Y2FzZSJEYXNoIjpyZXR1cm4iZGFzaGVkIjtjYXNlIkRvdCI6cmV0dXJuImRvdHRlZCI7Y2FzZSJEYXNoRG90IjpyZXR1cm4iZGFzaERvdCI7Y2FzZSJEYXNoRG90RG90IjpyZXR1cm4iZGFzaERvdERvdCI7Y2FzZSJTbGFudERhc2hEb3QiOnJldHVybiJzbGFu'@;
put 'dERhc2hEb3QiO2Nhc2UiRG91YmxlIjpyZXR1cm4iZG91YmxlIjtjYXNlIkNvbnRpbnVvdXMiOnN3aXRjaCgrUnx8MCl7Y2FzZSAwOnJldHVybiJoYWlyIjtjYXNlIDE6cmV0dXJuInRoaW4iO2Nhc2UgMjpyZXR1cm4ibWVkaXVtIjtjYXNlIDM6cmV0dXJuInRoaWNrIn1yZXR1cm4idGhpbiJ9'@;
put 'cmV0dXJuIFN9ZnVuY3Rpb24gZ0koUyxSLGssRyxRLG9lLGdlLHBlLHllLFBlKXt2YXIgTmU9IkdlbmVyYWwiLFllPUcuU3R5bGVJRCxldD17fTtQZT1QZXx8e307dmFyIGN0PVtdLEV0PTA7Zm9yKHZvaWQgMD09PVllJiZwZSYmKFllPXBlLlN0eWxlSUQpLHZvaWQgMD09PVllJiZnZSYmKFll'@;
put 'PWdlLlN0eWxlSUQpO3ZvaWQgMCE9PW9lW1llXTspe3ZhciBhdD1vZVtZZV07aWYoIkdlbmVyYWwiPT1OZSYmYXQubmYmJihOZT1vZVtZZV0ubmYpLGF0LkludGVyaW9yJiZjdC5wdXNoKG9lW1llXS5JbnRlcmlvciksYXQuYWxpZ25tZW50JiYoZXQuYWxpZ25tZW50fHwoZXQuYWxpZ25tZW50'@;
put 'PXF0KGF0LmFsaWdubWVudCkpKSxudWxsPT1ldC5ib2xkJiZhdC5Cb2xkJiYoZXQuYm9sZD0hMCksbnVsbD09ZXQuaXRhbGljJiZhdC5JdGFsaWMmJihldC5pdGFsaWM9ITApLG51bGw9PWV0LnN0cmlrZSYmYXQuU3RyaWtlJiYoZXQuc3RyaWtlPSEwKSxudWxsPT1ldC5zeiYmYXQuU2l6ZSYm'@;
put 'KGV0LnN6PWF0LlNpemUpLG51bGw9PWV0Lm5hbWUmJmF0LkZvbnROYW1lJiYoZXQubmFtZT1hdC5Gb250TmFtZSksbnVsbD09ZXQudW5kZXJsaW5lJiZhdC5VbmRlcmxpbmUmJihldC51bmRlcmxpbmU9YXQuVW5kZXJsaW5lKSxudWxsPT1ldC5jb2xvciYmYXQuUkdCJiYoZXQuY29sb3I9e3Jn'@;
put 'YjphdC5SR0J9KSxbInRvcCIsImJvdHRvbSIsImxlZnQiLCJyaWdodCJdLmZvckVhY2goZnVuY3Rpb24oT3Qpe251bGw9PWV0W090XSYmYXRbT3RdJiYoZXRbT3RdPXF0KGF0W090XSkpfSksIkRlZmF1bHQiPT1ZZSlicmVhaztZZT1hdC5QYXJlbnR8fCJEZWZhdWx0In1ldC5uYW1lfHwoZXQu'@;
put 'bmFtZT1vZS5EZWZhdWx0JiZvZS5EZWZhdWx0LkZvbnROYW1lfHwiQXJpYWwiKSxldC5zenx8KGV0LnN6PW9lLkRlZmF1bHQmJm9lLkRlZmF1bHQuU2l6ZXx8MTIpO3ZhciBidD0iIjtpZihTfHxHLkZvcm11bGF8fCJTdHJpbmciPT1rLlR5cGV8fCJOdW1iZXIiPT1rLlR5cGUpc3dpdGNoKGsu'@;
put 'VHlwZSl7Y2FzZSJCb29sZWFuIjpHLnQ9ImIiLEcudj10aShTKTticmVhaztjYXNlIlN0cmluZyI6Ry50PSJzIixidD1MYShRcihTKSksRy52PVMuaW5kZXhPZigiPCIpPi0xP1FyKFJ8fFMpLnJlcGxhY2UoLzxbXl0qPz4vZywiIik6YnQsUy5pbmRleE9mKCI8Iik+LTEmJihHLlI9bWQuaHRt'@;
put 'bF90b19ycyhRcihTKSkpO2JyZWFrO2Nhc2UiRGF0ZVRpbWUiOiJaIiE9Uy5zbGljZSgtMSkmJihTKz0iWiIpLEcudj0oSGUoUyktbmV3IERhdGUoRGF0ZS5VVEMoMTg5OSwxMSwzMCkpKS84NjRlNSxHLnYhPUcudj9HLnY9UXIoUyk6Ry52PDYwJiYoRy52PUcudi0xKSwoIU5lfHwiR2VuZXJh'@;
put 'bCI9PU5lKSYmKE5lPSJ5eXl5LW1tLWRkIik7Y2FzZSJOdW1iZXIiOnZvaWQgMD09PUcudiYmKEcudj0rUyksRy50fHwoRy50PSJuIik7YnJlYWs7Y2FzZSJFcnJvciI6Ry50PSJlIixHLnY9UDNbU10sITEhPT1QZS5jZWxsVGV4dCYmKEcudz1TKTticmVhaztkZWZhdWx0OiIiPT1TJiYiIj09'@;
put 'Uj9HLnQ9InoiOihHLnQ9InMiLGJ0PUxhKFFyKFMpKSxHLnY9Uy5pbmRleE9mKCI8Iik+LTE/UXIoUnx8UykucmVwbGFjZSgvPFteXSo/Pi9nLCIiKTpidCxTLmluZGV4T2YoIjwiKT4tMSYmKEcuUj1tZC5odG1sX3RvX3JzKFFyKFMpKSkpfWVsc2UgRy50PSJ6IixkZWxldGUgRy52O2lmKGZ1'@;
put 'bmN0aW9uIHpTKFMsUixrKXtpZigieiIhPT1TLnQpe2lmKCFrfHwhMSE9PWsuY2VsbFRleHQpdHJ5e1Mudz0iZSI9PT1TLnQ/Uy53fHxNY1tTLnZdOiJHZW5lcmFsIj09PVI/Im4iPT09Uy50PygwfFMudik9PT1TLnY/QS5fZ2VuZXJhbF9pbnQoUy52KTpBLl9nZW5lcmFsX251bShTLnYpOkEu'@;
put 'X2dlbmVyYWwoUy52KTpmdW5jdGlvbiBEeihTLFIpe3ZhciBrPXRlW1NdfHxRcihTKTtyZXR1cm4iR2VuZXJhbCI9PT1rP0EuX2dlbmVyYWwoUik6QS5mb3JtYXQoayxSKX0oUnx8IkdlbmVyYWwiLFMudil9Y2F0Y2gob2Upe2lmKGsuV1RGKXRocm93IG9lfXRyeXt2YXIgRz10ZVtSXXx8Unx8'@;
put 'IkdlbmVyYWwiO2lmKGsuY2VsbE5GJiYoUy56PUcpLGsuY2VsbERhdGVzJiYibiI9PVMudCYmQS5pc19kYXRlKEcpKXt2YXIgUT1BLnBhcnNlX2RhdGVfY29kZShTLnYpO1EmJihTLnQ9ImQiLFMudj1uZXcgRGF0ZShRLnksUS5tLTEsUS5kLFEuSCxRLk0sUS5TLFEudSkpfX1jYXRjaChvZSl7'@;
put 'aWYoay5XVEYpdGhyb3cgb2V9fX0oRyxOZSxQZSksITEhPT1QZS5jZWxsRm9ybXVsYSlpZihHLkZvcm11bGEpe3ZhciBqdD1RcihHLkZvcm11bGEpOzYxPT1qdC5jaGFyQ29kZUF0KDApJiYoanQ9anQuc2xpY2UoMSkpLEcuZj1INShqdCxRKSxkZWxldGUgRy5Gb3JtdWxhLCJSQyI9PUcuQXJy'@;
put 'YXlSYW5nZT9HLkY9SDUoIlJDOlJDIixRKTpHLkFycmF5UmFuZ2UmJihHLkY9SDUoRy5BcnJheVJhbmdlLFEpLHllLnB1c2goW29vKEcuRiksRy5GXSkpfWVsc2UgZm9yKEV0PTA7RXQ8eWUubGVuZ3RoOysrRXQpUS5yPj15ZVtFdF1bMF0ucy5yJiZRLnI8PXllW0V0XVswXS5lLnImJlEuYz49'@;
put 'eWVbRXRdWzBdLnMuYyYmUS5jPD15ZVtFdF1bMF0uZS5jJiYoRy5GPXllW0V0XVsxXSk7aWYoUGUuY2VsbFN0eWxlcyYmKGN0LmZvckVhY2goZnVuY3Rpb24oT3QpeyFldC5wYXR0ZXJuVHlwZSYmT3QucGF0dGVyblR5cGUmJihldC5wYXR0ZXJuVHlwZT1PdC5wYXR0ZXJuVHlwZSksIWV0LmZn'@;
put 'Q29sb3ImJk90LmZnQ29sb3ImJihldC5mZ0NvbG9yPU90LmZnQ29sb3IpfSksRy5zPWV0KSx2b2lkIDAhPT1HLlN0eWxlSUQmJihHLml4ZmU9Ry5TdHlsZUlEKSxHLlImJkcucyl7dmFyIGt0PXF0KEcucyk7ZGVsZXRlIGt0LmJvbGQsZGVsZXRlIGt0Lml0YWxpYyxkZWxldGUga3QudW5kZXJs'@;
put 'aW5lLGRlbGV0ZSBrdC5zdHJpa2UsRy5SLmZvckVhY2goZnVuY3Rpb24oT3Qpe090LnM9UHQocXQoa3QpLE90LnMpfSl9fWZ1bmN0aW9uIEx6KFMpe1MudD1TLnZ8fCIiLFMudD1TLnQucmVwbGFjZSgvXHJcbi9nLCJcbiIpLnJlcGxhY2UoL1xyL2csIlxuIiksUy52PVMudz1TLml4ZmU9dm9p'@;
put 'ZCAwfWZ1bmN0aW9uIFdTKFMpe2lmKFRlJiZCdWZmZXIuaXNCdWZmZXIoUykpcmV0dXJuIFMudG9TdHJpbmcoInV0ZjgiKTtpZigic3RyaW5nIj09dHlwZW9mIFMpcmV0dXJuIFM7aWYodHlwZW9mIFVpbnQ4QXJyYXk8InUiJiZTIGluc3RhbmNlb2YgVWludDhBcnJheSlyZXR1cm4gZ28oQyhI'@;
put 'KFMpKSk7dGhyb3cgbmV3IEVycm9yKCJCYWQgaW5wdXQgZm9ybWF0OiBleHBlY3RlZCBCdWZmZXIgb3Igc3RyaW5nIil9dmFyIFk1PS88KFwvPykoW15ccz8+PCFcLzpdKjp8KShbXlxzPzw+OlwvXFtdKykoPzpbXHM/OjxcL11bXj5dKik/Pi9nbTtmdW5jdGlvbiBEOChTLFIpe3ZhciBrPVJ8'@;
put 'fHt9LEc9SihXUyhTKSk7KCJiaW5hcnkiPT1rLnR5cGV8fCJhcnJheSI9PWsudHlwZXx8ImJhc2U2NCI9PWsudHlwZSkmJihHPXR5cGVvZiBjcHRhYmxlPCJ1Ij9jcHRhYmxlLnV0aWxzLmRlY29kZSg2NTAwMSxZKEcpKTpnbyhHKSk7dmFyIFE9Ry5zbGljZSgwLDEwMjQpLnRvTG93ZXJDYXNl'@;
put 'KCksb2U9ITE7aWYoKDEwMjMmUS5pbmRleE9mKCI+IikpPk1hdGgubWluKDEwMjMmUS5pbmRleE9mKCIsIiksMTAyMyZRLmluZGV4T2YoIjsiKSkpe3ZhciBnZT1xdChrKTtyZXR1cm4gZ2UudHlwZT0ic3RyaW5nIixqMy50b193b3JrYm9vayhHLGdlKX1pZigtMT09US5pbmRleE9mKCI8P3ht'@;
put 'bCIpJiZbImh0bWwiLCJ0YWJsZSIsImhlYWQiLCJtZXRhIiwic2NyaXB0Iiwic3R5bGUiLCJkaXYiXS5mb3JFYWNoKGZ1bmN0aW9uKHl1KXtRLmluZGV4T2YoIjwiK3l1KT49MCYmKG9lPSEwKX0pLG9lKXJldHVybiBtZC50b193b3JrYm9vayhHLGspO3ZhciBwZSxQZSx5ZT1bXTtudWxsIT1s'@;
put 'ZSYmbnVsbD09ay5kZW5zZSYmKGsuZGVuc2U9bGUpO3ZhciBrcixOZT17fSxZZT1bXSxldD1rLmRlbnNlP1tdOnt9LGN0PSIiLEV0PXt9LGF0PXt9LGJ0PXt9LGp0PUgwKCc8RGF0YSBzczpUeXBlPSJTdHJpbmciPicpLGt0PTAsT3Q9MCxLdD0wLFRuPXtzOntyOjJlNixjOjJlNn0sZTp7cjow'@;
put 'LGM6MH19LHJyPXt9LFNuPXt9LGxyPSIiLFhuPTAsQm49W10sZnI9e30sYnI9e30sZXI9MCxNaT1bXSxGaT17fSxuYT1bXSxjYT17fSxMaT1bXSxWbj0hMSxCcj1bXSxfcj1bXSxGbj17fSxqcj0wLFppPTAseWk9e1NoZWV0czpbXSxXQlByb3BzOntkYXRlMTkwNDohMX19LF9hPXt9O1k1Lmxh'@;
put 'c3RJbmRleD0wLEc9Ry5yZXBsYWNlKC88IS0tKFtcc1xTXSo/KS0tPi9nbSwiIik7Zm9yKHZhciBzbz0iIjtwZT1ZNS5leGVjKEcpOylzd2l0Y2gocGVbM109KHNvPXBlWzNdKS50b0xvd2VyQ2FzZSgpKXtjYXNlImRhdGEiOmlmKCJkYXRhIj09c28pe2lmKCIvIj09PXBlWzFdKXtpZigoUGU9'@;
put 'eWUucG9wKCkpWzBdIT09cGVbM10pdGhyb3cgbmV3IEVycm9yKCJCYWQgc3RhdGU6ICIrUGUuam9pbigifCIpKX1lbHNlIi8iIT09cGVbMF0uY2hhckF0KHBlWzBdLmxlbmd0aC0yKSYmeWUucHVzaChbcGVbM10sITBdKTticmVha31pZih5ZVt5ZS5sZW5ndGgtMV1bMV0pYnJlYWs7Ii8iPT09'@;
put 'cGVbMV0/Z0koRy5zbGljZShrdCxwZS5pbmRleCksbHIsanQsImNvbW1lbnQiPT15ZVt5ZS5sZW5ndGgtMV1bMF0/Y2E6YXQse2M6T3QscjpLdH0scnIsTGlbT3RdLGJ0LEJyLGspOihscj0iIixqdD1IMChwZVswXSksa3Q9cGUuaW5kZXgrcGVbMF0ubGVuZ3RoKTticmVhaztjYXNlImNlbGwi'@;
put 'OmlmKCIvIj09PXBlWzFdfHwiLz4iPT09cGVbMF0uc2xpY2UoLTIpKXtpZigiLz4iPT09cGVbMF0uc2xpY2UoLTIpKXtpZigoYXQ9alMocGVbMF0pKS5JbmRleCYmKE90PSthdC5JbmRleC0xKSxPdDxUbi5zLmMmJihUbi5zLmM9T3QpLE90PlRuLmUuYyYmKFRuLmUuYz1PdCksbmE9W10sIWsu'@;
put 'c2hlZXRTdHVicyl7KytPdDticmVha31nSSgiIiwiIix7fSwiY29tbWVudCI9PXllW3llLmxlbmd0aC0xXVswXT9jYTphdCx7YzpPdCxyOkt0fSxycixMaVtPdF0sYnQsQnIsayl9aWYobmEubGVuZ3RoPjAmJihhdC5jPW5hKSwoIWsuc2hlZXRSb3dzfHxrLnNoZWV0Um93cz5LdCkmJih2b2lk'@;
put 'IDAhPT1hdC52fHxrLnNoZWV0U3R1YnMpJiYoay5kZW5zZT8oZXRbS3RdfHwoZXRbS3RdPVtdKSxldFtLdF1bT3RdPWF0KTpldFtUYShPdCkramkoS3QpXT1hdCksYXQuSFJlZiYmKGF0Lmw9e1RhcmdldDpRcihhdC5IUmVmKX0sYXQuSFJlZlNjcmVlblRpcCYmKGF0LmwuVG9vbHRpcD1hdC5I'@;
put 'UmVmU2NyZWVuVGlwKSxkZWxldGUgYXQuSFJlZixkZWxldGUgYXQuSFJlZlNjcmVlblRpcCksKGF0Lk1lcmdlQWNyb3NzfHxhdC5NZXJnZURvd24pJiYoanI9T3QrKDB8cGFyc2VJbnQoYXQuTWVyZ2VBY3Jvc3MsMTApKSxaaT1LdCsoMHxwYXJzZUludChhdC5NZXJnZURvd24sMTApKSwoanI+'@;
put 'T3R8fFppPkt0KSYmQm4ucHVzaCh7czp7YzpPdCxyOkt0fSxlOntjOmpyLHI6Wml9fSkpLGsuc2hlZXRTdHVicylpZihhdC5NZXJnZUFjcm9zc3x8YXQuTWVyZ2VEb3duKXtmb3IodmFyIGlhPU90O2lhPD1qcjsrK2lhKWZvcih2YXIgTG89S3Q7TG88PVppOysrTG8pKGlhPk90fHxMbz5LdCkm'@;
put 'JihrLmRlbnNlPyhldFtMb118fChldFtMb109W10pLGV0W0xvXVtpYV09e3Q6InoifSk6ZXRbVGEoaWEpK2ppKExvKV09e3Q6InoifSk7T3Q9anIrMX1lbHNlKytPdDtlbHNlIGF0Lk1lcmdlQWNyb3NzP090PWpyKzE6KytPdH1lbHNlKGF0PWpTKHBlWzBdKSkuSW5kZXgmJihPdD0rYXQuSW5k'@;
put 'ZXgtMSksT3Q8VG4ucy5jJiYoVG4ucy5jPU90KSxPdD5Ubi5lLmMmJihUbi5lLmM9T3QpLCIvPiI9PT1wZVswXS5zbGljZSgtMikmJisrT3QsbmE9W107YnJlYWs7Y2FzZSJyb3ciOiIvIj09PXBlWzFdfHwiLz4iPT09cGVbMF0uc2xpY2UoLTIpPyhLdDxUbi5zLnImJihUbi5zLnI9S3QpLEt0'@;
put 'PlRuLmUuciYmKFRuLmUucj1LdCksIi8+Ij09PXBlWzBdLnNsaWNlKC0yKSYmKGJ0PUgwKHBlWzBdKSkuSW5kZXgmJihLdD0rYnQuSW5kZXgtMSksT3Q9MCwrK0t0KTooKGJ0PUgwKHBlWzBdKSkuSW5kZXgmJihLdD0rYnQuSW5kZXgtMSksRm49e30sKCIwIj09YnQuQXV0b0ZpdEhlaWdodHx8'@;
put 'YnQuSGVpZ2h0KSYmKEZuLmhwdD1wYXJzZUZsb2F0KGJ0LkhlaWdodCksRm4uaHB4PXNoKEZuLmhwdCksX3JbS3RdPUZuKSwiMSI9PWJ0LkhpZGRlbiYmKEZuLmhpZGRlbj0hMCxfcltLdF09Rm4pKTticmVhaztjYXNlIndvcmtzaGVldCI6aWYoIi8iPT09cGVbMV0pe2lmKChQZT15ZS5wb3Ao'@;
put 'KSlbMF0hPT1wZVszXSl0aHJvdyBuZXcgRXJyb3IoIkJhZCBzdGF0ZTogIitQZS5qb2luKCJ8IikpO1llLnB1c2goY3QpLFRuLnMucjw9VG4uZS5yJiZUbi5zLmM8PVRuLmUuYyYmKGV0WyIhcmVmIl09cmEoVG4pLGsuc2hlZXRSb3dzJiZrLnNoZWV0Um93czw9VG4uZS5yJiYoZXRbIiFmdWxs'@;
put 'cmVmIl09ZXRbIiFyZWYiXSxUbi5lLnI9ay5zaGVldFJvd3MtMSxldFsiIXJlZiJdPXJhKFRuKSkpLEJuLmxlbmd0aCYmKGV0WyIhbWVyZ2VzIl09Qm4pLExpLmxlbmd0aD4wJiYoZXRbIiFjb2xzIl09TGkpLF9yLmxlbmd0aD4wJiYoZXRbIiFyb3dzIl09X3IpLEV0JiYoZXRbIiFzaGVldEZv'@;
put 'cm1hdCJdPWt6KEV0KSksTmVbY3RdPWV0fWVsc2UgVG49e3M6e3I6MmU2LGM6MmU2fSxlOntyOjAsYzowfX0sS3Q9T3Q9MCx5ZS5wdXNoKFtwZVszXSwhMV0pLFBlPUgwKHBlWzBdKSxjdD1RcihQZS5OYW1lKSxldD1rLmRlbnNlP1tdOnt9LEJuPVtdLEJyPVtdLF9yPVtdLHlpLlNoZWV0cy5w'@;
put 'dXNoKF9hPXtuYW1lOmN0LEhpZGRlbjowfSk7YnJlYWs7Y2FzZSJ0YWJsZSI6aWYoIi8iPT09cGVbMV0pe2lmKChQZT15ZS5wb3AoKSlbMF0hPT1wZVszXSl0aHJvdyBuZXcgRXJyb3IoIkJhZCBzdGF0ZTogIitQZS5qb2luKCJ8IikpfWVsc2V7aWYoIi8+Ij09cGVbMF0uc2xpY2UoLTIpKWJy'@;
put 'ZWFrO0V0PUgwKHBlWzBdKSx5ZS5wdXNoKFtwZVszXSwhMV0pLExpPVtdLFZuPSExfWJyZWFrO2Nhc2Uic3R5bGUiOiIvIj09PXBlWzFdP1VTKHJyLFNuLGxyLGspOihTbj1IMChwZVswXSksbHI9IiIpO2JyZWFrO2Nhc2UibnVtYmVyZm9ybWF0IjpTbi5uZj1RcihIMChwZVswXSkuRm9ybWF0'@;
put 'fHwiR2VuZXJhbCIpLHRlW1NuLm5mXSYmKFNuLm5mPXRlW1NuLm5mXSk7Zm9yKHZhciBPYT0wOzM5MiE9T2EmJkEuX3RhYmxlW09hXSE9U24ubmY7KytPYSk7aWYoMzkyPT1PYSlmb3IoT2E9NTc7MzkyIT1PYTsrK09hKWlmKG51bGw9PUEuX3RhYmxlW09hXSl7QS5sb2FkKFNuLm5mLE9hKTti'@;
put 'cmVha31icmVhaztjYXNlImNvbHVtbiI6aWYoInRhYmxlIiE9PXllW3llLmxlbmd0aC0xXVswXXx8Ii8iPT09cGVbMV0pYnJlYWs7aWYoKGtyPUgwKHBlWzBdKSkuSGlkZGVuJiYoa3IuaGlkZGVuPSEwLGRlbGV0ZSBrci5IaWRkZW4pLGtyLldpZHRoP2tyLndweD00KnBhcnNlSW50KGtyLldp'@;
put 'ZHRoLDEwKS8zOitrci5BdXRvRml0V2lkdGgmJihrci5hdXRvPTEpLCFWbiYma3Iud3B4PjEwKXtWbj0hMCxUYz1maztmb3IodmFyIGhvPTA7aG88TGkubGVuZ3RoOysraG8pTGlbaG9dJiZRMChMaVtob10pfVZuJiZRMChrciksTGlba3IuSW5kZXgtMXx8TGkubGVuZ3RoXT1rcjtmb3IodmFy'@;
put 'IEphPTA7SmE8K2tyLlNwYW47KytKYSlMaVtMaS5sZW5ndGhdPXF0KGtyKTticmVhaztjYXNlIm5hbWVkcmFuZ2UiOmlmKCIvIj09PXBlWzFdKWJyZWFrO3lpLk5hbWVzfHwoeWkuTmFtZXM9W10pO3ZhciBCaT12cihwZVswXSksSXM9e05hbWU6QmkuTmFtZSxSZWY6SDUoQmkuUmVmZXJzVG8u'@;
put 'c2xpY2UoMSkse3I6MCxjOjB9KX07eWkuU2hlZXRzLmxlbmd0aD4wJiYoSXMuU2hlZXQ9eWkuU2hlZXRzLmxlbmd0aC0xKSx5aS5OYW1lcy5wdXNoKElzKTticmVhaztjYXNlIm5hbWVkY2VsbCI6Y2FzZSJiIjpjYXNlImkiOmNhc2UidSI6Y2FzZSJzIjpjYXNlImVtIjpjYXNlImgyIjpjYXNl'@;
put 'ImgzIjpjYXNlInN1YiI6Y2FzZSJzdXAiOmNhc2Uic3BhbiI6Y2FzZSJwcm90ZWN0aW9uIjpjYXNlInBhcmFncmFwaHMiOmNhc2UibmFtZSI6YnJlYWs7Y2FzZSJhbGlnbm1lbnQiOmlmKCFrLmNlbGxTdHlsZXN8fCIvIj09PXBlWzFdKWJyZWFrO1NuLkFsaWdubWVudD1IMChwZVswXSk7YnJl'@;
put 'YWs7Y2FzZSJib3JkZXJzIjoiLyIhPT1wZVsxXSYmKFNuLkJvcmRlcnM9W10pO2JyZWFrO2Nhc2UiYm9yZGVyIjppZigiLyI9PT1wZVsxXSlicmVhaztTbi5Cb3JkZXJzfHwoU24uQm9yZGVycz1bXSksU24uQm9yZGVycy5wdXNoKEgwKHBlWzBdKSk7YnJlYWs7Y2FzZSJmb250IjppZigiLz4i'@;
put 'PT09cGVbMF0uc2xpY2UoLTIpKXtscis9cGVbMF07YnJlYWt9Ii8iPT09cGVbMV0/bHIrPUcuc2xpY2UoWG4scGUuaW5kZXgrcGVbMF0ubGVuZ3RoKTpYbj1wZS5pbmRleDticmVhaztjYXNlImludGVyaW9yIjppZighay5jZWxsU3R5bGVzfHwiLyI9PT1wZVsxXSlicmVhaztTbi5JbnRlcmlv'@;
put 'cj1IMChwZVswXSk7YnJlYWs7Y2FzZSJhdXRob3IiOmNhc2UidGl0bGUiOmNhc2UiZGVzY3JpcHRpb24iOmNhc2UiY3JlYXRlZCI6Y2FzZSJrZXl3b3JkcyI6Y2FzZSJzdWJqZWN0IjpjYXNlImNhdGVnb3J5IjpjYXNlImNvbXBhbnkiOmNhc2UibGFzdGF1dGhvciI6Y2FzZSJsYXN0c2F2ZWQi'@;
put 'OmNhc2UibGFzdHByaW50ZWQiOmNhc2UidmVyc2lvbiI6Y2FzZSJyZXZpc2lvbiI6Y2FzZSJ0b3RhbHRpbWUiOmNhc2UiaHlwZXJsaW5rYmFzZSI6Y2FzZSJtYW5hZ2VyIjpjYXNlImNvbnRlbnRzdGF0dXMiOmNhc2UiaWRlbnRpZmllciI6Y2FzZSJsYW5ndWFnZSI6Y2FzZSJhcHBuYW1lIjpp'@;
put 'ZigiLz4iPT09cGVbMF0uc2xpY2UoLTIpKWJyZWFrOyIvIj09PXBlWzFdP0YzKGZyLHNvLEcuc2xpY2UoZXIscGUuaW5kZXgpKTplcj1wZS5pbmRleCtwZVswXS5sZW5ndGg7YnJlYWs7Y2FzZSJzdHlsZXMiOmNhc2Uid29ya2Jvb2siOmlmKCIvIj09PXBlWzFdKXtpZigoUGU9eWUucG9wKCkp'@;
put 'WzBdIT09cGVbM10pdGhyb3cgbmV3IEVycm9yKCJCYWQgc3RhdGU6ICIrUGUuam9pbigifCIpKX1lbHNlIHllLnB1c2goW3BlWzNdLCExXSk7YnJlYWs7Y2FzZSJjb21tZW50IjppZigiLyI9PT1wZVsxXSl7aWYoKFBlPXllLnBvcCgpKVswXSE9PXBlWzNdKXRocm93IG5ldyBFcnJvcigiQmFk'@;
put 'IHN0YXRlOiAiK1BlLmpvaW4oInwiKSk7THooY2EpLG5hLnB1c2goY2EpfWVsc2UgeWUucHVzaChbcGVbM10sITFdKSxjYT17YTooUGU9SDAocGVbMF0pKS5BdXRob3J9O2JyZWFrO2Nhc2UiYXV0b2ZpbHRlciI6aWYoIi8iPT09cGVbMV0pe2lmKChQZT15ZS5wb3AoKSlbMF0hPT1wZVszXSl0'@;
put 'aHJvdyBuZXcgRXJyb3IoIkJhZCBzdGF0ZTogIitQZS5qb2luKCJ8IikpfWVsc2UgaWYoIi8iIT09cGVbMF0uY2hhckF0KHBlWzBdLmxlbmd0aC0yKSl7dmFyIFBuPUgwKHBlWzBdKTtldFsiIWF1dG9maWx0ZXIiXT17cmVmOkg1KFBuLlJhbmdlKS5yZXBsYWNlKC9cJC9nLCIiKX0seWUucHVz'@;
put 'aChbcGVbM10sITBdKX1icmVhaztjYXNlImRhdGF2YWxpZGF0aW9uIjppZihldFsiIXZhbGlkYXRpb25zIl18fChldFsiIXZhbGlkYXRpb25zIl09W10pLCIvIj09PXBlWzFdKXtpZigoUGU9eWUucG9wKCkpWzBdIT09cGVbM10pdGhyb3cgbmV3IEVycm9yKCJCYWQgc3RhdGU6ICIrUGUuam9p'@;
put 'bigifCIpKX1lbHNlIi8iIT09cGVbMF0uY2hhckF0KHBlWzBdLmxlbmd0aC0yKSYmeWUucHVzaChbcGVbM10sITBdKSxGaT17fTticmVhaztjYXNlInBpeGVsc3BlcmluY2giOmlmKCIvIj09PXBlWzFdKXt2YXIgV289K0cuc2xpY2Uoa3QscGUuaW5kZXgpOyg3Mj09V298fDk2PT1XbykmJklm'@;
put 'KFdvKX1lbHNlIGt0PXBlLmluZGV4K3BlWzBdLmxlbmd0aDticmVhaztjYXNlImNvbXBvbmVudG9wdGlvbnMiOmNhc2UiZG9jdW1lbnRwcm9wZXJ0aWVzIjpjYXNlImN1c3RvbWRvY3VtZW50cHJvcGVydGllcyI6Y2FzZSJvZmZpY2Vkb2N1bWVudHNldHRpbmdzIjpjYXNlInBpdm90dGFibGUi'@;
put 'OmNhc2UicGl2b3RjYWNoZSI6Y2FzZSJuYW1lcyI6Y2FzZSJtYXBpbmZvIjpjYXNlInBhZ2VicmVha3MiOmNhc2UicXVlcnl0YWJsZSI6Y2FzZSJzb3J0aW5nIjpjYXNlInNjaGVtYSI6Y2FzZSJjb25kaXRpb25hbGZvcm1hdHRpbmciOmNhc2Uic21hcnR0YWd0eXBlIjpjYXNlInNtYXJ0dGFn'@;
put 'cyI6Y2FzZSJleGNlbHdvcmtib29rIjpjYXNlIndvcmtib29rb3B0aW9ucyI6Y2FzZSJ3b3Jrc2hlZXRvcHRpb25zIjppZigiLyI9PT1wZVsxXSl7aWYoKFBlPXllLnBvcCgpKVswXSE9PXBlWzNdKXRocm93IG5ldyBFcnJvcigiQmFkIHN0YXRlOiAiK1BlLmpvaW4oInwiKSl9ZWxzZSIvIiE9'@;
put 'PXBlWzBdLmNoYXJBdChwZVswXS5sZW5ndGgtMikmJnllLnB1c2goW3BlWzNdLCEwXSk7YnJlYWs7ZGVmYXVsdDppZigwPT15ZS5sZW5ndGgmJiJkb2N1bWVudCI9PXBlWzNdfHwwPT15ZS5sZW5ndGgmJiJ1b2YiPT1wZVszXSlyZXR1cm4gSUkoRyxrKTt2YXIgaHI9ITA7c3dpdGNoKHllW3ll'@;
put 'Lmxlbmd0aC0xXVswXSl7Y2FzZSJvZmZpY2Vkb2N1bWVudHNldHRpbmdzIjpzd2l0Y2gocGVbM10pe2Nhc2UiYWxsb3dwbmciOmNhc2UicmVtb3ZlcGVyc29uYWxpbmZvcm1hdGlvbiI6Y2FzZSJkb3dubG9hZGNvbXBvbmVudHMiOmNhc2UibG9jYXRpb25vZmNvbXBvbmVudHMiOmNhc2UiY29s'@;
put 'b3JzIjpjYXNlImNvbG9yIjpjYXNlImluZGV4IjpjYXNlInJnYiI6Y2FzZSJ0YXJnZXRzY3JlZW5zaXplIjpjYXNlInJlYWRvbmx5cmVjb21tZW5kZWQiOmJyZWFrO2RlZmF1bHQ6aHI9ITF9YnJlYWs7Y2FzZSJjb21wb25lbnRvcHRpb25zIjpzd2l0Y2gocGVbM10pe2Nhc2UidG9vbGJhciI6'@;
put 'Y2FzZSJoaWRlb2ZmaWNlbG9nbyI6Y2FzZSJzcHJlYWRzaGVldGF1dG9maXQiOmNhc2UibGFiZWwiOmNhc2UiY2FwdGlvbiI6Y2FzZSJtYXhoZWlnaHQiOmNhc2UibWF4d2lkdGgiOmNhc2UibmV4dHNoZWV0bnVtYmVyIjpicmVhaztkZWZhdWx0OmhyPSExfWJyZWFrO2Nhc2UiZXhjZWx3b3Jr'@;
put 'Ym9vayI6c3dpdGNoKHBlWzNdKXtjYXNlImRhdGUxOTA0Ijp5aS5XQlByb3BzLmRhdGUxOTA0PSEwO2JyZWFrO2Nhc2Uid2luZG93aGVpZ2h0IjpjYXNlIndpbmRvd3dpZHRoIjpjYXNlIndpbmRvd3RvcHgiOmNhc2Uid2luZG93dG9weSI6Y2FzZSJ0YWJyYXRpbyI6Y2FzZSJwcm90ZWN0c3Ry'@;
put 'dWN0dXJlIjpjYXNlInByb3RlY3R3aW5kb3ciOmNhc2UicHJvdGVjdHdpbmRvd3MiOmNhc2UiYWN0aXZlc2hlZXQiOmNhc2UiZGlzcGxheWlua25vdGVzIjpjYXNlImZpcnN0dmlzaWJsZXNoZWV0IjpjYXNlInN1cGJvb2siOmNhc2Uic2hlZXRuYW1lIjpjYXNlInNoZWV0aW5kZXgiOmNhc2Ui'@;
put 'c2hlZXRpbmRleGZpcnN0IjpjYXNlInNoZWV0aW5kZXhsYXN0IjpjYXNlImRsbCI6Y2FzZSJhY2NlcHRsYWJlbHNpbmZvcm11bGFzIjpjYXNlImRvbm90c2F2ZWxpbmt2YWx1ZXMiOmNhc2UiaXRlcmF0aW9uIjpjYXNlIm1heGl0ZXJhdGlvbnMiOmNhc2UibWF4Y2hhbmdlIjpjYXNlInBhdGgi'@;
put 'OmNhc2UieGN0IjpjYXNlImNvdW50IjpjYXNlInNlbGVjdGVkc2hlZXRzIjpjYXNlImNhbGN1bGF0aW9uIjpjYXNlInVuY2FsY2VkIjpjYXNlInN0YXJ0dXBwcm9tcHQiOmNhc2UiY3JuIjpjYXNlImV4dGVybm5hbWUiOmNhc2UiZm9ybXVsYSI6Y2FzZSJjb2xmaXJzdCI6Y2FzZSJjb2xsYXN0'@;
put 'IjpjYXNlIndhbnRhZHZpc2UiOmNhc2UiYm9vbGVhbiI6Y2FzZSJlcnJvciI6Y2FzZSJ0ZXh0IjpjYXNlIm9sZSI6Y2FzZSJub2F1dG9yZWNvdmVyIjpjYXNlInB1Ymxpc2hvYmplY3RzIjpjYXNlImRvbm90Y2FsY3VsYXRlYmVmb3Jlc2F2ZSI6Y2FzZSJudW1iZXIiOmNhc2UicmVmbW9kZXIx'@;
put 'YzEiOmNhc2UiZW1iZWRzYXZlc21hcnR0YWdzIjpicmVhaztkZWZhdWx0OmhyPSExfWJyZWFrO2Nhc2Uid29ya2Jvb2tvcHRpb25zIjpzd2l0Y2gocGVbM10pe2Nhc2Uib3djdmVyc2lvbiI6Y2FzZSJoZWlnaHQiOmNhc2Uid2lkdGgiOmJyZWFrO2RlZmF1bHQ6aHI9ITF9YnJlYWs7Y2FzZSJ3'@;
put 'b3Jrc2hlZXRvcHRpb25zIjpzd2l0Y2gocGVbM10pe2Nhc2UidmlzaWJsZSI6aWYoIi8+IiE9PXBlWzBdLnNsaWNlKC0yKSlpZigiLyI9PT1wZVsxXSlzd2l0Y2goRy5zbGljZShlcixwZS5pbmRleCkpe2Nhc2UiU2hlZXRIaWRkZW4iOl9hLkhpZGRlbj0xO2JyZWFrO2Nhc2UiU2hlZXRWZXJ5'@;
put 'SGlkZGVuIjpfYS5IaWRkZW49Mn1lbHNlIGVyPXBlLmluZGV4K3BlWzBdLmxlbmd0aDticmVhaztjYXNlImhlYWRlciI6ZXRbIiFtYXJnaW5zIl18fFgzKGV0WyIhbWFyZ2lucyJdPXt9LCJ4bG1sIiksZXRbIiFtYXJnaW5zIl0uaGVhZGVyPXZyKHBlWzBdKS5NYXJnaW47YnJlYWs7Y2FzZSJm'@;
put 'b290ZXIiOmV0WyIhbWFyZ2lucyJdfHxYMyhldFsiIW1hcmdpbnMiXT17fSwieGxtbCIpLGV0WyIhbWFyZ2lucyJdLmZvb3Rlcj12cihwZVswXSkuTWFyZ2luO2JyZWFrO2Nhc2UicGFnZW1hcmdpbnMiOnZhciBRbD12cihwZVswXSk7ZXRbIiFtYXJnaW5zIl18fFgzKGV0WyIhbWFyZ2lucyJd'@;
put 'PXt9LCJ4bG1sIiksUWwuVG9wJiYoZXRbIiFtYXJnaW5zIl0udG9wPVFsLlRvcCksUWwuTGVmdCYmKGV0WyIhbWFyZ2lucyJdLmxlZnQ9UWwuTGVmdCksUWwuUmlnaHQmJihldFsiIW1hcmdpbnMiXS5yaWdodD1RbC5SaWdodCksUWwuQm90dG9tJiYoZXRbIiFtYXJnaW5zIl0uYm90dG9tPVFs'@;
put 'LkJvdHRvbSk7YnJlYWs7Y2FzZSJkaXNwbGF5cmlnaHR0b2xlZnQiOnlpLlZpZXdzfHwoeWkuVmlld3M9W10pLHlpLlZpZXdzWzBdfHwoeWkuVmlld3NbMF09e30pLHlpLlZpZXdzWzBdLlJUTD0hMDticmVhaztjYXNlImZyZWV6ZXBhbmVzIjpjYXNlImZyb3plbm5vc3BsaXQiOmNhc2UiYWN0'@;
put 'aXZlcm93IjpjYXNlImFjdGl2ZWNvbCI6Y2FzZSJ0b3Byb3dib3R0b21wYW5lIjpjYXNlImxlZnRjb2x1bW5yaWdodHBhbmUiOmNhc2UidW5zeW5jZWQiOmNhc2UicHJpbnQiOmNhc2UicHJpbnRlcnJvcnMiOmNhc2UicGFuZXMiOmNhc2Uic2NhbGUiOmNhc2UicGFuZSI6Y2FzZSJudW1iZXIi'@;
put 'OmNhc2UibGF5b3V0IjpjYXNlInBhZ2VzZXR1cCI6Y2FzZSJzZWxlY3RlZCI6Y2FzZSJwcm90ZWN0b2JqZWN0cyI6Y2FzZSJlbmFibGVzZWxlY3Rpb24iOmNhc2UicHJvdGVjdHNjZW5hcmlvcyI6Y2FzZSJ2YWxpZHByaW50ZXJpbmZvIjpjYXNlImhvcml6b250YWxyZXNvbHV0aW9uIjpjYXNl'@;
put 'InZlcnRpY2FscmVzb2x1dGlvbiI6Y2FzZSJudW1iZXJvZmNvcGllcyI6Y2FzZSJhY3RpdmVwYW5lIjpjYXNlInRvcHJvd3Zpc2libGUiOmNhc2UibGVmdGNvbHVtbnZpc2libGUiOmNhc2UiZml0dG9wYWdlIjpjYXNlInJhbmdlc2VsZWN0aW9uIjpjYXNlInBhcGVyc2l6ZWluZGV4IjpjYXNl'@;
put 'InBhZ2VsYXlvdXR6b29tIjpjYXNlInBhZ2VicmVha3pvb20iOmNhc2UiZmlsdGVyb24iOmNhc2UiZml0d2lkdGgiOmNhc2UiZml0aGVpZ2h0IjpjYXNlImNvbW1lbnRzbGF5b3V0IjpjYXNlInpvb20iOmNhc2UibGVmdHRvcmlnaHQiOmNhc2UiZ3JpZGxpbmVzIjpjYXNlImFsbG93c29ydCI6'@;
put 'Y2FzZSJhbGxvd2ZpbHRlciI6Y2FzZSJhbGxvd2luc2VydHJvd3MiOmNhc2UiYWxsb3dkZWxldGVyb3dzIjpjYXNlImFsbG93aW5zZXJ0Y29scyI6Y2FzZSJhbGxvd2RlbGV0ZWNvbHMiOmNhc2UiYWxsb3dpbnNlcnRoeXBlcmxpbmtzIjpjYXNlImFsbG93Zm9ybWF0Y2VsbHMiOmNhc2UiYWxs'@;
put 'b3dzaXplY29scyI6Y2FzZSJhbGxvd3NpemVyb3dzIjpjYXNlInRhYmNvbG9yaW5kZXgiOmNhc2UiZG9ub3RkaXNwbGF5aGVhZGluZ3MiOmNhc2Uic2hvd3BhZ2VsYXlvdXR6b29tIjpjYXNlImJsYWNrYW5kd2hpdGUiOmNhc2UiZG9ub3RkaXNwbGF5emVyb3MiOmNhc2UiZGlzcGxheXBhZ2Vi'@;
put 'cmVhayI6Y2FzZSJyb3djb2xoZWFkaW5ncyI6Y2FzZSJkb25vdGRpc3BsYXlvdXRsaW5lIjpjYXNlIm5vb3JpZW50YXRpb24iOmNhc2UiYWxsb3d1c2VwaXZvdHRhYmxlcyI6Y2FzZSJ6ZXJvaGVpZ2h0IjpjYXNlInZpZXdhYmxlcmFuZ2UiOmNhc2Uic2VsZWN0aW9uIjpjYXNlInByb3RlY3Rj'@;
put 'b250ZW50cyI6YnJlYWs7Y2FzZSJzcGxpdGhvcml6b250YWwiOmNhc2Uic3BsaXR2ZXJ0aWNhbCI6aWYoIi8+IiE9PXBlWzBdLnNsaWNlKC0yKSlpZigiLyI9PXBlWzFdKXtldFsiIWZyZWV6ZSJdfHwoZXRbIiFmcmVlemUiXT0iQTEiKTt2YXIgWWw9Tm8oZXRbIiFmcmVlemUiXSk7InNwbGl0'@;
put 'aG9yaXpvbnRhbCI9PXBlWzNdP1lsLnI9K0cuc2xpY2UoZXIscGUuaW5kZXgpOllsLmM9K0cuc2xpY2UoZXIscGUuaW5kZXgpLGV0WyIhZnJlZXplIl09cWkoWWwpfWVsc2UgZXI9cGUuaW5kZXgrcGVbMF0ubGVuZ3RoO2JyZWFrO2Nhc2UiZG9ub3RkaXNwbGF5Z3JpZGxpbmVzIjpldFsiIWdy'@;
put 'aWRsaW5lcyJdPSExO2JyZWFrO2Nhc2Uibm9zdW1tYXJ5cm93c2JlbG93ZGV0YWlsIjpldFsiIW91dGxpbmUiXXx8KGV0WyIhb3V0bGluZSJdPXt9KSxldFsiIW91dGxpbmUiXS5hYm92ZT0hMDticmVhaztjYXNlIm5vc3VtbWFyeWNvbHVtbnNyaWdodGRldGFpbCI6ZXRbIiFvdXRsaW5lIl18'@;
put 'fChldFsiIW91dGxpbmUiXT17fSksZXRbIiFvdXRsaW5lIl0ubGVmdD0hMDticmVhaztkZWZhdWx0OmhyPSExfWJyZWFrO2Nhc2UicGl2b3R0YWJsZSI6Y2FzZSJwaXZvdGNhY2hlIjpzd2l0Y2gocGVbM10pe2Nhc2UiaW1tZWRpYXRlaXRlbXNvbmRyb3AiOmNhc2Uic2hvd3BhZ2VtdWx0aXBs'@;
put 'ZWl0ZW1sYWJlbCI6Y2FzZSJjb21wYWN0cm93aW5kZW50IjpjYXNlImxvY2F0aW9uIjpjYXNlInBpdm90ZmllbGQiOmNhc2Uib3JpZW50YXRpb24iOmNhc2UibGF5b3V0Zm9ybSI6Y2FzZSJsYXlvdXRzdWJ0b3RhbGxvY2F0aW9uIjpjYXNlImxheW91dGNvbXBhY3Ryb3ciOmNhc2UicG9zaXRp'@;
put 'b24iOmNhc2UicGl2b3RpdGVtIjpjYXNlImRhdGF0eXBlIjpjYXNlImRhdGFmaWVsZCI6Y2FzZSJzb3VyY2VuYW1lIjpjYXNlInBhcmVudGZpZWxkIjpjYXNlInB0bGluZWl0ZW1zIjpjYXNlInB0bGluZWl0ZW0iOmNhc2UiY291bnRvZnNhbWVpdGVtcyI6Y2FzZSJpdGVtIjpjYXNlIml0ZW10'@;
put 'eXBlIjpjYXNlInB0c291cmNlIjpjYXNlImNhY2hlaW5kZXgiOmNhc2UiY29uc29saWRhdGlvbnJlZmVyZW5jZSI6Y2FzZSJmaWxlbmFtZSI6Y2FzZSJyZWZlcmVuY2UiOmNhc2Uibm9jb2x1bW5ncmFuZCI6Y2FzZSJub3Jvd2dyYW5kIjpjYXNlImJsYW5rbGluZWFmdGVyaXRlbXMiOmNhc2Ui'@;
put 'aGlkZGVuIjpjYXNlInN1YnRvdGFsIjpjYXNlImJhc2VmaWVsZCI6Y2FzZSJtYXBjaGlsZGl0ZW1zIjpjYXNlImZ1bmN0aW9uIjpjYXNlInJlZnJlc2hvbmZpbGVvcGVuIjpjYXNlInByaW50c2V0dGl0bGVzIjpjYXNlIm1lcmdlbGFiZWxzIjpjYXNlImRlZmF1bHR2ZXJzaW9uIjpjYXNlInJl'@;
put 'ZnJlc2huYW1lIjpjYXNlInJlZnJlc2hkYXRlIjpjYXNlInJlZnJlc2hkYXRlY29weSI6Y2FzZSJ2ZXJzaW9ubGFzdHJlZnJlc2giOmNhc2UidmVyc2lvbmxhc3R1cGRhdGUiOmNhc2UidmVyc2lvbnVwZGF0ZWFibGVtaW4iOmNhc2UidmVyc2lvbnJlZnJlc2hhYmxlbWluIjpjYXNlImNhbGN1'@;
put 'bGF0aW9uIjpicmVhaztkZWZhdWx0OmhyPSExfWJyZWFrO2Nhc2UicGFnZWJyZWFrcyI6c3dpdGNoKHBlWzNdKXtjYXNlImNvbGJyZWFrcyI6Y2FzZSJjb2xicmVhayI6Y2FzZSJyb3dicmVha3MiOmNhc2Uicm93YnJlYWsiOmNhc2UiY29sc3RhcnQiOmNhc2UiY29sZW5kIjpjYXNlInJvd2Vu'@;
put 'ZCI6YnJlYWs7ZGVmYXVsdDpocj0hMX1icmVhaztjYXNlImF1dG9maWx0ZXIiOnN3aXRjaChwZVszXSl7Y2FzZSJhdXRvZmlsdGVyY29sdW1uIjpjYXNlImF1dG9maWx0ZXJjb25kaXRpb24iOmNhc2UiYXV0b2ZpbHRlcmFuZCI6Y2FzZSJhdXRvZmlsdGVyb3IiOmJyZWFrO2RlZmF1bHQ6aHI9'@;
put 'ITF9YnJlYWs7Y2FzZSJxdWVyeXRhYmxlIjpzd2l0Y2gocGVbM10pe2Nhc2UiaWQiOmNhc2UiYXV0b2Zvcm1hdGZvbnQiOmNhc2UiYXV0b2Zvcm1hdHBhdHRlcm4iOmNhc2UicXVlcnlzb3VyY2UiOmNhc2UicXVlcnl0eXBlIjpjYXNlImVuYWJsZXJlZGlyZWN0aW9ucyI6Y2FzZSJyZWZyZXNo'@;
put 'ZWRpbnhsOSI6Y2FzZSJ1cmxzdHJpbmciOmNhc2UiaHRtbHRhYmxlcyI6Y2FzZSJjb25uZWN0aW9uIjpjYXNlImNvbW1hbmR0ZXh0IjpjYXNlInJlZnJlc2hpbmZvIjpjYXNlIm5vdGl0bGVzIjpjYXNlIm5leHRpZCI6Y2FzZSJjb2x1bW5pbmZvIjpjYXNlIm92ZXJ3cml0ZWNlbGxzIjpjYXNl'@;
put 'ImRvbm90cHJvbXB0Zm9yZmlsZSI6Y2FzZSJ0ZXh0d2l6YXJkc2V0dGluZ3MiOmNhc2Uic291cmNlIjpjYXNlIm51bWJlciI6Y2FzZSJkZWNpbWFsIjpjYXNlInRob3VzYW5kc2VwYXJhdG9yIjpjYXNlInRyYWlsaW5nbWludXNudW1iZXJzIjpjYXNlImZvcm1hdHNldHRpbmdzIjpjYXNlImZp'@;
put 'ZWxkdHlwZSI6Y2FzZSJkZWxpbWl0ZXJzIjpjYXNlInRhYiI6Y2FzZSJjb21tYSI6Y2FzZSJhdXRvZm9ybWF0bmFtZSI6Y2FzZSJ2ZXJzaW9ubGFzdGVkaXQiOmNhc2UidmVyc2lvbmxhc3RyZWZyZXNoIjpicmVhaztkZWZhdWx0OmhyPSExfWJyZWFrO2Nhc2UiZGF0YXZhbGlkYXRpb24iOnN3'@;
put 'aXRjaChwZVszXSl7Y2FzZSJyYW5nZSI6RmkucmVmPXBlO2JyZWFrO2Nhc2UidHlwZSI6Y2FzZSJtaW4iOmNhc2UibWF4IjpjYXNlInNvcnQiOmNhc2UiZGVzY2VuZGluZyI6Y2FzZSJvcmRlciI6Y2FzZSJjYXNlc2Vuc2l0aXZlIjpjYXNlInZhbHVlIjpjYXNlImVycm9yc3R5bGUiOmNhc2Ui'@;
put 'ZXJyb3JtZXNzYWdlIjpjYXNlImVycm9ydGl0bGUiOmNhc2UiaW5wdXRtZXNzYWdlIjpjYXNlImlucHV0dGl0bGUiOmNhc2UiY29tYm9oaWRlIjpjYXNlImlucHV0aGlkZSI6Y2FzZSJjb25kaXRpb24iOmNhc2UicXVhbGlmaWVyIjpjYXNlInVzZWJsYW5rIjpjYXNlInZhbHVlMSI6Y2FzZSJ2'@;
put 'YWx1ZTIiOmNhc2UiZm9ybWF0IjpjYXNlImNlbGxyYW5nZWxpc3QiOmJyZWFrO2RlZmF1bHQ6aHI9ITF9YnJlYWs7Y2FzZSJzb3J0aW5nIjpjYXNlImNvbmRpdGlvbmFsZm9ybWF0dGluZyI6c3dpdGNoKHBlWzNdKXtjYXNlInJhbmdlIjpjYXNlInR5cGUiOmNhc2UibWluIjpjYXNlIm1heCI6'@;
put 'Y2FzZSJzb3J0IjpjYXNlImRlc2NlbmRpbmciOmNhc2Uib3JkZXIiOmNhc2UiY2FzZXNlbnNpdGl2ZSI6Y2FzZSJ2YWx1ZSI6Y2FzZSJlcnJvcnN0eWxlIjpjYXNlImVycm9ybWVzc2FnZSI6Y2FzZSJlcnJvcnRpdGxlIjpjYXNlImNlbGxyYW5nZWxpc3QiOmNhc2UiaW5wdXRtZXNzYWdlIjpj'@;
put 'YXNlImlucHV0dGl0bGUiOmNhc2UiY29tYm9oaWRlIjpjYXNlImlucHV0aGlkZSI6Y2FzZSJjb25kaXRpb24iOmNhc2UicXVhbGlmaWVyIjpjYXNlInVzZWJsYW5rIjpjYXNlInZhbHVlMSI6Y2FzZSJ2YWx1ZTIiOmNhc2UiZm9ybWF0IjpicmVhaztkZWZhdWx0OmhyPSExfWJyZWFrO2Nhc2Ui'@;
put 'bWFwaW5mbyI6Y2FzZSJzY2hlbWEiOmNhc2UiZGF0YSI6c3dpdGNoKHBlWzNdKXtjYXNlIm1hcCI6Y2FzZSJlbnRyeSI6Y2FzZSJyYW5nZSI6Y2FzZSJ4cGF0aCI6Y2FzZSJmaWVsZCI6Y2FzZSJ4c2R0eXBlIjpjYXNlImZpbHRlcm9uIjpjYXNlImFnZ3JlZ2F0ZSI6Y2FzZSJlbGVtZW50dHlw'@;
put 'ZSI6Y2FzZSJhdHRyaWJ1dGV0eXBlIjpjYXNlInNjaGVtYSI6Y2FzZSJlbGVtZW50IjpjYXNlImNvbXBsZXh0eXBlIjpjYXNlImRhdGF0eXBlIjpjYXNlImFsbCI6Y2FzZSJhdHRyaWJ1dGUiOmNhc2UiZXh0ZW5kcyI6Y2FzZSJyb3ciOmJyZWFrO2RlZmF1bHQ6aHI9ITF9YnJlYWs7Y2FzZSJz'@;
put 'bWFydHRhZ3MiOmJyZWFrO2RlZmF1bHQ6aHI9ITF9aWYoaHJ8fHBlWzNdLm1hdGNoKC8hXFtDREFUQS8pKWJyZWFrO2lmKCF5ZVt5ZS5sZW5ndGgtMV1bMV0pdGhyb3ciVW5yZWNvZ25pemVkIHRhZzogIitwZVszXSsifCIreWUuam9pbigifCIpO2lmKCJjdXN0b21kb2N1bWVudHByb3BlcnRp'@;
put 'ZXMiPT09eWVbeWUubGVuZ3RoLTFdWzBdKXtpZigiLz4iPT09cGVbMF0uc2xpY2UoLTIpKWJyZWFrOyIvIj09PXBlWzFdP0l6KGJyLHNvLE1pLEcuc2xpY2UoZXIscGUuaW5kZXgpKTooTWk9cGUsZXI9cGUuaW5kZXgrcGVbMF0ubGVuZ3RoKTticmVha31pZihrLldURil0aHJvdyJVbnJlY29n'@;
put 'bml6ZWQgdGFnOiAiK3BlWzNdKyJ8Iit5ZS5qb2luKCJ8Iil9dmFyIEdsPXt9O3JldHVybiFrLmJvb2tTaGVldHMmJiFrLmJvb2tQcm9wcyYmKEdsLlNoZWV0cz1OZSksR2wuU2hlZXROYW1lcz1ZZSxHbC5Xb3JrYm9vaz15aSxHbC5TU0Y9QS5nZXRfdGFibGUoKSxHbC5Qcm9wcz1mcixHbC5D'@;
put 'dXN0cHJvcHM9YnIsR2wuU2hlZXRzJiZHbC5TaGVldE5hbWVzLmZvckVhY2goZnVuY3Rpb24oeXUpe3ZhciBNbD1HbC5TaGVldHNbeXVdO01sWyIhbWVyZ2VzIl0mJk1sWyIhbWVyZ2VzIl0uZm9yRWFjaChmdW5jdGlvbihsbil7InN0cmluZyI9PXR5cGVvZiBsbiYmKGxuPXcudXRpbHMuZGVj'@;
put 'b2RlX3JhbmdlKGxuKSk7dmFyIEVuPXcudXRpbHMuZW5jb2RlX2NlbGwobG4ucyksVW49QXJyYXkuaXNBcnJheShNbCk/KE1sW2xuLnMucl18fFtdKVtsbi5zLmNdOk1sW0VuXTtVbiYmVW4ucyYmKG51bGwhPVVuLnMudG9wJiZ6dS5zaGVldF9zZXRfcmFuZ2Vfc3R5bGUoTWwsbG4se3RvcDpV'@;
put 'bi5zLnRvcH0pLG51bGwhPVVuLnMuYm90dG9tJiZ6dS5zaGVldF9zZXRfcmFuZ2Vfc3R5bGUoTWwsbG4se2JvdHRvbTpVbi5zLmJvdHRvbX0pLG51bGwhPVVuLnMubGVmdCYmenUuc2hlZXRfc2V0X3JhbmdlX3N0eWxlKE1sLGxuLHtsZWZ0OlVuLnMubGVmdH0pLG51bGwhPVVuLnMucmlnaHQm'@;
put 'Jnp1LnNoZWV0X3NldF9yYW5nZV9zdHlsZShNbCxsbix7cmlnaHQ6VW4ucy5yaWdodH0pKX0pfSksR2x9ZnVuY3Rpb24gSTgoUyxSKXtzd2l0Y2goTkkoUj1SfHx7fSksUi50eXBlfHwiYmFzZTY0Iil7Y2FzZSJiYXNlNjQiOnJldHVybiBEOChfZS5kZWNvZGUoUyksUik7Y2FzZSJiaW5hcnki'@;
put 'OmNhc2UiYnVmZmVyIjpjYXNlImZpbGUiOnJldHVybiBEOChTLFIpO2Nhc2UiYXJyYXkiOnJldHVybiBEOChDKFMpLFIpfX1mdW5jdGlvbiB5SShTKXtyZXR1cm4gUHIoIk5hbWVkUmFuZ2UiLG51bGwseyJzczpOYW1lIjpTLk5hbWUsInNzOlJlZmVyc1RvIjoiPSIrSDQoUy5SZWYse3I6MCxj'@;
put 'OjB9KX0pfWZ1bmN0aW9uIE5uZShTLFIsayxHLFEsb2UsZ2Upe2lmKCFTfHxudWxsPT1TLnYmJm51bGw9PVMuZiYmIUcuc2hlZXRTdHVicylyZXR1cm4iIjt2YXIgcGU9e307aWYoUy5mJiYocGVbInNzOkZvcm11bGEiXT0iPSIrTHIoSDQoUy5mLGdlKSkpLFMuRiYmUy5GLnNsaWNlKDAsUi5s'@;
put 'ZW5ndGgpPT1SKXt2YXIgeWU9Tm8oUy5GLnNsaWNlKFIubGVuZ3RoKzEpKTtwZVsic3M6QXJyYXlSYW5nZSJdPSJSQzpSIisoeWUucj09Z2Uucj8iIjoiWyIrKHllLnItZ2UucikrIl0iKSsiQyIrKHllLmM9PWdlLmM/IiI6IlsiKyh5ZS5jLWdlLmMpKyJdIil9aWYoUy5sJiZTLmwuVGFyZ2V0'@;
put 'JiYocGVbInNzOkhSZWYiXT1McihTLmwuVGFyZ2V0KSxTLmwuVG9vbHRpcCYmKHBlWyJ4OkhSZWZTY3JlZW5UaXAiXT1McihTLmwuVG9vbHRpcCkpKSxrWyIhbWVyZ2VzIl0pZm9yKHZhciBQZT1rWyIhbWVyZ2VzIl0sTmU9MDtOZSE9UGUubGVuZ3RoOysrTmUpUGVbTmVdLnMuYyE9Z2UuY3x8'@;
put 'UGVbTmVdLnMuciE9Z2Uucnx8KFBlW05lXS5lLmM+UGVbTmVdLnMuYyYmKHBlWyJzczpNZXJnZUFjcm9zcyJdPVBlW05lXS5lLmMtUGVbTmVdLnMuYyksUGVbTmVdLmUucj5QZVtOZV0ucy5yJiYocGVbInNzOk1lcmdlRG93biJdPVBlW05lXS5lLnItUGVbTmVdLnMucikpO3ZhciBZZT0iIixl'@;
put 'dD0iIjtzd2l0Y2goUy50KXtjYXNlInoiOmlmKCFHLnNoZWV0U3R1YnMpcmV0dXJuIiI7YnJlYWs7Y2FzZSJuIjpZZT0iTnVtYmVyIixldD1TdHJpbmcoUy52KTticmVhaztjYXNlImIiOlllPSJCb29sZWFuIixldD1TLnY/IjEiOiIwIjticmVhaztjYXNlImUiOlllPSJFcnJvciIsZXQ9TWNb'@;
put 'Uy52XTticmVhaztjYXNlImQiOlllPSJEYXRlVGltZSIsZXQ9bmV3IERhdGUoUy52KS50b0lTT1N0cmluZygpLG51bGw9PVMueiYmKFMuej1TLnp8fEEuX3RhYmxlWzE0XSk7YnJlYWs7Y2FzZSJzIjpZZT0iU3RyaW5nIixldD15YShTLnZ8fCIiKX12YXIgY3Q9bDAoRy5jZWxsWGZzLG51bGws'@;
put 'UyxHKTtwZVsic3M6U3R5bGVJRCJdPSJzIisoMjErY3QpLHBlWyJzczpJbmRleCJdPWdlLmMrMTt2YXIgRXQ9bnVsbCE9Uy52P2V0OiIiLGF0PSJ6Ij09Uy50PyIiOlMuUj9mdW5jdGlvbiBFYihTKXtyZXR1cm4nPHNzOkRhdGEgc3M6VHlwZT0iU3RyaW5nIiB4bWxucz0iaHR0cDovL3d3dy53'@;
put 'My5vcmcvVFIvUkVDLWh0bWw0MCI+JytTLm1hcChmdW5jdGlvbihrKXt2YXIgRz15YShrLnYpO3JldHVybiBrLnMmJihrLnMuYm9sZCYmKEc9IjxCPiIrRysiPC9CPiIpLGsucy5pdGFsaWMmJihHPSI8ST4iK0crIjwvST4iKSxrLnMuc3RyaWtlJiYoRz0iPFM+IitHKyI8L1M+Iiksay5zLnVu'@;
put 'ZGVybGluZSYmKEc9IjxVPiIrRysiPC9VPiIpLCJzdXBlciI9PWsucy52YWxpZ24mJihHPSI8U3VwPiIrRysiPC9TdXA+IiksInN1YiI9PWsucy52YWxpZ24mJihHPSI8U3ViPiIrRysiPC9TdWI+IiksKGsucy5uYW1lfHxrLnMuc3p8fGsucy5jb2xvciYmbnVsbCE9ay5zLmNvbG9yLnJnYikm'@;
put 'JihHPVsiPEZvbnQiLGsucy5uYW1lPycgaHRtbDpGYWNlPSInK2sucy5uYW1lKyciJzoiIixrLnMuc3o/JyBodG1sOlNpemU9Iicray5zLnN6KyciJzoiIixrLnMuY29sb3I/JyBodG1sOkNvbG9yPSIjJysoIjAwMDAwMCIrKCJudW1iZXIiPT10eXBlb2Ygay5zLmNvbG9yLnJnYj9rLnMuY29s'@;
put 'b3IucmdiLnRvU3RyaW5nKDE2KTprLnMuY29sb3IucmdiKSkuc2xpY2UoLTYpKyciJzoiIiwiPiIsRywiPC9Gb250PiJdLmpvaW4oIiIpKSksR30pLmpvaW4oIiIpKyI8L0RhdGE+In0oUy5SKTonPERhdGEgc3M6VHlwZT0iJytZZSsnIj4nK0V0KyI8L0RhdGE+IjtyZXR1cm4oUy5jfHxbXSku'@;
put 'bGVuZ3RoPjAmJihhdCs9ZnVuY3Rpb24gd0koUyl7cmV0dXJuIFMubWFwKGZ1bmN0aW9uKFIpe3ZhciBHPVByKCJzczpEYXRhIixGYShSLnR8fCIiKSx7eG1sbnM6Imh0dHA6Ly93d3cudzMub3JnL1RSL1JFQy1odG1sNDAifSk7cmV0dXJuIFByKCJDb21tZW50IixHLHsic3M6QXV0aG9yIjpS'@;
put 'LmF9KX0pLmpvaW4oIiIpfShTLmMpKSxQcigiQ2VsbCIsYXQscGUpfWZ1bmN0aW9uIFZuZShTLFIpe3ZhciBrPSc8Um93IHNzOkluZGV4PSInKyhTKzEpKyciJztyZXR1cm4gUiYmKFIuaHB4JiYhUi5ocHQmJihSLmhwdD1VMyhSLmhweCkpLFIuaHB0JiYoays9JyBzczpBdXRvRml0SGVpZ2h0'@;
put 'PSIwIiBzczpIZWlnaHQ9IicrUi5ocHQrJyInKSxSLmhpZGRlbiYmKGsrPScgc3M6SGlkZGVuPSIxIicpKSxrKyI+In1mdW5jdGlvbiBDSShTLFIsayl7dmFyIEc9W10sb2U9ay5TaGVldHNbay5TaGVldE5hbWVzW1NdXSxnZT1vZT9mdW5jdGlvbiBPeihTLFIsayxHKXtpZighU3x8ISgoR3x8'@;
put 'e30pLldvcmtib29rfHx7fSkuTmFtZXMpcmV0dXJuIiI7Zm9yKHZhciBRPUcuV29ya2Jvb2suTmFtZXMsb2U9W10sZ2U9MDtnZTxRLmxlbmd0aDsrK2dlKXt2YXIgcGU9UVtnZV07cGUuU2hlZXQ9PWsmJihwZS5OYW1lLm1hdGNoKC9eX3hsZm5cLi8pfHxvZS5wdXNoKHlJKHBlKSkpfXJldHVy'@;
put 'biBvZS5qb2luKCIiKX0ob2UsMCxTLGspOiIiO3JldHVybiBnZS5sZW5ndGg+MCYmRy5wdXNoKCI8TmFtZXM+IitnZSsiPC9OYW1lcz4iKSxnZT1vZT9mdW5jdGlvbiBQeihTLFIsayxHKXtpZighU1siIXJlZiJdKXJldHVybiIiO3ZhciBRPW9vKFNbIiFyZWYiXSksb2U9U1siIW1lcmdlcyJd'@;
put 'fHxbXSxnZT0wLHBlPVtdO1NbIiFjb2xzIl0mJlNbIiFjb2xzIl0uZm9yRWFjaChmdW5jdGlvbihidCxqdCl7UTAoYnQpO3ZhciBrdD0hIWJ0LndpZHRoLE90PXU4KGp0LGJ0KSxLdD17InNzOkluZGV4IjpqdCsxfTtrdCYmKEt0WyJzczpXaWR0aCJdPU01KE90LndpZHRoKSksYnQuaGlkZGVu'@;
put 'JiYoS3RbInNzOkhpZGRlbiJdPSIxIikscGUucHVzaChQcigiQ29sdW1uIixudWxsLEt0KSl9KTtmb3IodmFyIHllPUFycmF5LmlzQXJyYXkoUyksUGU9US5zLnI7UGU8PVEuZS5yOysrUGUpe2Zvcih2YXIgTmU9W1ZuZShQZSwoU1siIXJvd3MiXXx8W10pW1BlXSldLFllPVEucy5jO1llPD1R'@;
put 'LmUuYzsrK1llKXt2YXIgZXQ9ITE7Zm9yKGdlPTA7Z2UhPW9lLmxlbmd0aDsrK2dlKWlmKCEob2VbZ2VdLnMuYz5ZZXx8b2VbZ2VdLnMucj5QZXx8b2VbZ2VdLmUuYzxZZXx8b2VbZ2VdLmUucjxQZSkpeyhvZVtnZV0ucy5jIT1ZZXx8b2VbZ2VdLnMuciE9UGUpJiYoZXQ9ITApO2JyZWFrfWlm'@;
put 'KCFldCl7dmFyIGN0PXtyOlBlLGM6WWV9LEV0PXFpKGN0KTtOZS5wdXNoKE5uZSh5ZT8oU1tQZV18fFtdKVtZZV06U1tFdF0sRXQsUyxSLDAsMCxjdCkpfX1OZS5wdXNoKCI8L1Jvdz4iKSxOZS5sZW5ndGg+MiYmcGUucHVzaChOZS5qb2luKCIiKSl9cmV0dXJuIHBlLmpvaW4oIiIpfShvZSxS'@;
put 'KToiIixnZS5sZW5ndGg+MCYmRy5wdXNoKCI8VGFibGU+IitnZSsiPC9UYWJsZT4iKSxHLnB1c2goZnVuY3Rpb24gWVMoUyxSLGssRyl7aWYoIVMpcmV0dXJuIiI7dmFyIFE9W107aWYoU1siIW1hcmdpbnMiXSYmKFEucHVzaCgiPFBhZ2VTZXR1cD4iKSxTWyIhbWFyZ2lucyJdLmhlYWRlciYm'@;
put 'US5wdXNoKFByKCJIZWFkZXIiLG51bGwseyJ4Ok1hcmdpbiI6U1siIW1hcmdpbnMiXS5oZWFkZXJ9KSksU1siIW1hcmdpbnMiXS5mb290ZXImJlEucHVzaChQcigiRm9vdGVyIixudWxsLHsieDpNYXJnaW4iOlNbIiFtYXJnaW5zIl0uZm9vdGVyfSkpLFEucHVzaChQcigiUGFnZU1hcmdpbnMi'@;
put 'LG51bGwseyJ4OkJvdHRvbSI6U1siIW1hcmdpbnMiXS5ib3R0b218fCIwLjc1IiwieDpMZWZ0IjpTWyIhbWFyZ2lucyJdLmxlZnR8fCIwLjciLCJ4OlJpZ2h0IjpTWyIhbWFyZ2lucyJdLnJpZ2h0fHwiMC43IiwieDpUb3AiOlNbIiFtYXJnaW5zIl0udG9wfHwiMC43NSJ9KSksUS5wdXNoKCI8'@;
put 'L1BhZ2VTZXR1cD4iKSksRyYmRy5Xb3JrYm9vayYmRy5Xb3JrYm9vay5TaGVldHMmJkcuV29ya2Jvb2suU2hlZXRzW2tdKWlmKEcuV29ya2Jvb2suU2hlZXRzW2tdLkhpZGRlbilRLnB1c2goUHIoIlZpc2libGUiLDE9PUcuV29ya2Jvb2suU2hlZXRzW2tdLkhpZGRlbj8iU2hlZXRIaWRkZW4i'@;
put 'OiJTaGVldFZlcnlIaWRkZW4iLHt9KSk7ZWxzZXtmb3IodmFyIG9lPTA7b2U8ayYmKCFHLldvcmtib29rLlNoZWV0c1tvZV18fEcuV29ya2Jvb2suU2hlZXRzW29lXS5IaWRkZW4pOysrb2UpO29lPT1rJiZRLnB1c2goIjxTZWxlY3RlZC8+Iil9aWYoKCgoKEd8fHt9KS5Xb3JrYm9va3x8e30p'@;
put 'LlZpZXdzfHxbXSlbMF18fHt9KS5SVEwmJlEucHVzaCgiPERpc3BsYXlSaWdodFRvTGVmdC8+IiksV3QoU1siIWdyaWRsaW5lcyJdKSYmUS5wdXNoKCI8RG9Ob3REaXNwbGF5R3JpZGxpbmVzLz4iKSxTWyIhZnJlZXplIl0pe1EucHVzaCgiPEZyZWV6ZVBhbmVzLz4iKSxRLnB1c2goIjxGcm96'@;
put 'ZW5Ob1NwbGl0Lz4iKTt2YXIgZ2U9Tm8oU1siIWZyZWV6ZSJdKTtnZS5yPjAmJihRLnB1c2goSGEoIlNwbGl0SG9yaXpvbnRhbCIsIiIrZ2UucikpLFEucHVzaChIYSgiVG9wUm93Qm90dG9tUGFuZSIsIiIrZ2UucikpKSxnZS5jPjAmJihRLnB1c2goSGEoIlNwbGl0VmVydGljYWwiLCIiK2dl'@;
put 'LmMpKSxRLnB1c2goSGEoIkxlZnRDb2x1bW5SaWdodFBhbmUiLCIiK2dlLmMpKSl9cmV0dXJuIFNbIiFwcm90ZWN0Il0mJihRLnB1c2goSGEoIlByb3RlY3RDb250ZW50cyIsIlRydWUiKSksU1siIXByb3RlY3QiXS5vYmplY3RzJiZRLnB1c2goSGEoIlByb3RlY3RPYmplY3RzIiwiVHJ1ZSIp'@;
put 'KSxTWyIhcHJvdGVjdCJdLnNjZW5hcmlvcyYmUS5wdXNoKEhhKCJQcm90ZWN0U2NlbmFyaW9zIiwiVHJ1ZSIpKSxudWxsPT1TWyIhcHJvdGVjdCJdLnNlbGVjdExvY2tlZENlbGxzfHxTWyIhcHJvdGVjdCJdLnNlbGVjdExvY2tlZENlbGxzP251bGwhPVNbIiFwcm90ZWN0Il0uc2VsZWN0VW5s'@;
put 'b2NrZWRDZWxscyYmIVNbIiFwcm90ZWN0Il0uc2VsZWN0VW5sb2NrZWRDZWxscyYmUS5wdXNoKEhhKCJFbmFibGVTZWxlY3Rpb24iLCJVbmxvY2tlZENlbGxzIikpOlEucHVzaChIYSgiRW5hYmxlU2VsZWN0aW9uIiwiTm9TZWxlY3Rpb24iKSksW1siZm9ybWF0Q2VsbHMiLCJBbGxvd0Zvcm1h'@;
put 'dENlbGxzIl0sWyJmb3JtYXRDb2x1bW5zIiwiQWxsb3dTaXplQ29scyJdLFsiZm9ybWF0Um93cyIsIkFsbG93U2l6ZVJvd3MiXSxbImluc2VydENvbHVtbnMiLCJBbGxvd0luc2VydENvbHMiXSxbImluc2VydFJvd3MiLCJBbGxvd0luc2VydFJvd3MiXSxbImluc2VydEh5cGVybGlua3MiLCJB'@;
put 'bGxvd0luc2VydEh5cGVybGlua3MiXSxbImRlbGV0ZUNvbHVtbnMiLCJBbGxvd0RlbGV0ZUNvbHMiXSxbImRlbGV0ZVJvd3MiLCJBbGxvd0RlbGV0ZVJvd3MiXSxbInNvcnQiLCJBbGxvd1NvcnQiXSxbImF1dG9GaWx0ZXIiLCJBbGxvd0ZpbHRlciJdLFsicGl2b3RUYWJsZXMiLCJBbGxvd1Vz'@;
put 'ZVBpdm90VGFibGVzIl1dLmZvckVhY2goZnVuY3Rpb24ocGUpe1NbIiFwcm90ZWN0Il1bcGVbMF1dJiZRLnB1c2goIjwiK3BlWzFdKyIvPiIpfSkpLDA9PVEubGVuZ3RoPyIiOlByKCJXb3Jrc2hlZXRPcHRpb25zIixRLmpvaW4oIiIpLHt4bWxuczp5bC54fSl9KG9lLDAsUyxrKSksRy5qb2lu'@;
put 'KCIiKX1mdW5jdGlvbiBTSShTLFIpe1J8fChSPXt9KSxTLlNTRnx8KFMuU1NGPUEuZ2V0X3RhYmxlKCkpLFMuU1NGJiYoYWUoQSksQS5sb2FkX3RhYmxlKFMuU1NGKSxSLnJldnNzZj1rZShTLlNTRiksUi5yZXZzc2ZbUy5TU0ZbNjU1MzVdXT0wLFIuc3NmPVMuU1NGLFMuU3R5bGVzPXtGb250'@;
put 'czpSLkZvbnRzPVt7c3o6MTIsY29sb3I6e3RoZW1lOjEscmdiOiIwMDAwMDAifSxuYW1lOiJDYWxpYnJpIixmYW1pbHk6MixzY2hlbWU6Im1pbm9yIn1dLEZpbGxzOlIuRmlsbHM9W3twYXR0ZXJuVHlwZToibm9uZSJ9LHtwYXR0ZXJuVHlwZToiZ3JheTEyNSJ9XSxCb3JkZXJzOlIuQm9yZGVy'@;
put 'cz1be31dfSxSLmNlbGxYZnM9W10sUi5jZWxsU3R5bGVYZnM9W3tuYW1lOiJOb3JtYWwifV0sbDAoUi5jZWxsWGZzLG51bGwse30se3JldnNzZjp7R2VuZXJhbDowfX0pKTt2YXIgaz1bXTtrLnB1c2goZnVuY3Rpb24gbUkoUyxSKXt2YXIgaz1bXTtyZXR1cm4gUy5Qcm9wcyYmay5wdXNoKGZ1'@;
put 'bmN0aW9uIFp3KFMsUil7dmFyIGs9W107cmV0dXJuIE9lKFA2KS5tYXAoZnVuY3Rpb24oRyl7Zm9yKHZhciBRPTA7UTxSMC5sZW5ndGg7KytRKWlmKFIwW1FdWzFdPT1HKXJldHVybiBSMFtRXTtmb3IoUT0wO1E8cmgubGVuZ3RoOysrUSlpZihyaFtRXVsxXT09RylyZXR1cm4gcmhbUV07dGhy'@;
put 'b3cgR30pLmZvckVhY2goZnVuY3Rpb24oRyl7aWYobnVsbCE9U1tHWzFdXSl7dmFyIFE9UiYmUi5Qcm9wcyYmbnVsbCE9Ui5Qcm9wc1tHWzFdXT9SLlByb3BzW0dbMV1dOlNbR1sxXV07ImRhdGUiPT09R1syXSYmKFE9bmV3IERhdGUoUSkudG9JU09TdHJpbmcoKS5yZXBsYWNlKC9cLlxkKlov'@;
put 'LCJaIikpLCJudW1iZXIiPT10eXBlb2YgUT9RPVN0cmluZyhRKTohMD09PVF8fCExPT09UT9RPVE/IjEiOiIwIjpRIGluc3RhbmNlb2YgRGF0ZSYmKFE9bmV3IERhdGUoUSkudG9JU09TdHJpbmcoKS5yZXBsYWNlKC9cLlxkKlovLCIiKSksay5wdXNoKEhhKFA2W0dbMV1dfHxHWzFdLFEpKX19'@;
put 'KSxQcigiRG9jdW1lbnRQcm9wZXJ0aWVzIixrLmpvaW4oIiIpLHt4bWxuczp5bC5vfSl9KFMuUHJvcHMsUikpLFMuQ3VzdHByb3BzJiZrLnB1c2goZnVuY3Rpb24gSDYoUyxSKXt2YXIgaz1bIldvcmtzaGVldHMiLCJTaGVldE5hbWVzIl0sRz0iQ3VzdG9tRG9jdW1lbnRQcm9wZXJ0aWVzIixR'@;
put 'PVtdO3JldHVybiBTJiZPZShTKS5mb3JFYWNoKGZ1bmN0aW9uKG9lKXtpZihPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoUyxvZSkpe2Zvcih2YXIgZ2U9MDtnZTxSMC5sZW5ndGg7KytnZSlpZihvZT09UjBbZ2VdWzFdKXJldHVybjtmb3IoZ2U9MDtnZTxyaC5sZW5ndGg7'@;
put 'KytnZSlpZihvZT09cmhbZ2VdWzFdKXJldHVybjtmb3IoZ2U9MDtnZTxrLmxlbmd0aDsrK2dlKWlmKG9lPT1rW2dlXSlyZXR1cm47dmFyIHBlPVNbb2VdLHllPSJzdHJpbmciOyJudW1iZXIiPT10eXBlb2YgcGU/KHllPSJmbG9hdCIscGU9U3RyaW5nKHBlKSk6ITA9PT1wZXx8ITE9PT1wZT8o'@;
put 'eWU9ImJvb2xlYW4iLHBlPXBlPyIxIjoiMCIpOnBlPVN0cmluZyhwZSksUS5wdXNoKFByKHBhKG9lKSxwZSx7ImR0OmR0Ijp5ZX0pKX19KSxSJiZPZShSKS5mb3JFYWNoKGZ1bmN0aW9uKG9lKXtpZihPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoUixvZSkmJighU3x8IU9i'@;
put 'amVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChTLG9lKSkpe3ZhciBnZT1SW29lXSxwZT0ic3RyaW5nIjsibnVtYmVyIj09dHlwZW9mIGdlPyhwZT0iZmxvYXQiLGdlPVN0cmluZyhnZSkpOiEwPT09Z2V8fCExPT09Z2U/KHBlPSJib29sZWFuIixnZT1nZT8iMSI6IjAiKTpnZSBp'@;
put 'bnN0YW5jZW9mIERhdGU/KHBlPSJkYXRlVGltZS50eiIsZ2U9Z2UudG9JU09TdHJpbmcoKSk6Z2U9U3RyaW5nKGdlKSxRLnB1c2goUHIocGEob2UpLGdlLHsiZHQ6ZHQiOnBlfSkpfX0pLCI8IitHKycgeG1sbnM9IicreWwubysnIj4nK1Euam9pbigiIikrIjwvIitHKyI+In0oUy5Qcm9wcyxT'@;
put 'LkN1c3Rwcm9wcykpLGsuam9pbigiIil9KFMsUikpLGsucHVzaCgiIiksay5wdXNoKCIiKSxrLnB1c2goIiIpO2Zvcih2YXIgRz0wO0c8Uy5TaGVldE5hbWVzLmxlbmd0aDsrK0cpay5wdXNoKFByKCJXb3Jrc2hlZXQiLENJKEcsUixTKSx7InNzOk5hbWUiOkxyKFMuU2hlZXROYW1lc1tHXSl9'@;
put 'KSk7cmV0dXJuIGtbMl09ZnVuY3Rpb24gYkkoUyxSKXt2YXIgRz1bWyc8U3R5bGUgc3M6SUQ9IkRlZmF1bHQiIHNzOk5hbWU9Ik5vcm1hbCI+JywnPEFsaWdubWVudCBzczpWZXJ0aWNhbD0iQm90dG9tIi8+JywiPEJvcmRlcnMvPiIsJzxGb250IHNzOkZvbnROYW1lPSJDYWxpYnJpIiB4OkZh'@;
put 'bWlseT0iU3dpc3MiIHNzOlNpemU9IjEyIiBzczpDb2xvcj0iIzAwMDAwMCIvPicsIjxJbnRlcmlvci8+IiwiPE51bWJlckZvcm1hdC8+IiwiPFByb3RlY3Rpb24vPiIsIjwvU3R5bGU+Il0uam9pbigiIildO3JldHVybiBSLmNlbGxYZnMuZm9yRWFjaChmdW5jdGlvbihRLG9lKXt2YXIgZ2U9'@;
put 'W107aWYoUS5hbGlnbm1lbnQpe3ZhciBwZT17fTtRLmFsaWdubWVudC5zaHJpbmtUb0ZpdCYmKHBlWyJzczpTaHJpbmtUb0ZpdCJdPSIxIiksUS5hbGlnbm1lbnQud3JhcFRleHQmJihwZVsic3M6V3JhcFRleHQiXT0iMSIpLFEuYWxpZ25tZW50LnZlcnRpY2FsJiYocGVbInNzOlZlcnRpY2Fs'@;
put 'Il09QXQoUS5hbGlnbm1lbnQudmVydGljYWwpKSxRLmFsaWdubWVudC5ob3Jpem9udGFsJiYocGVbInNzOkhvcml6b250YWwiXT1BdChRLmFsaWdubWVudC5ob3Jpem9udGFsKSksUS5hbGlnbm1lbnQuaW5kZW50JiYocGVbInNzOkluZGVudCJdPVEuYWxpZ25tZW50LmluZGVudCksUS5hbGln'@;
put 'bm1lbnQudGV4dFJvdGF0aW9uJiYocGVbInNzOlJvdGF0ZSJdPVEuYWxpZ25tZW50LnRleHRSb3RhdGlvbiksZ2UucHVzaChQcigiQWxpZ25tZW50IixudWxsLHBlKSl9ZTppZihudWxsIT1RLmZvbnRJZCl7dmFyIHllPVIuRm9udHNbUS5mb250SWRdO2lmKCF5ZSlicmVhayBlO3ZhciBQZT17'@;
put 'InNzOkZvbnROYW1lIjoiQ2FsaWJyaSIsInNzOlNpemUiOiIxMiJ9LE5lPSExO3llLmJvbGQmJihOZT0hMCxQZVsic3M6Qm9sZCJdPSIxIikseWUuaXRhbGljJiYoTmU9ITAsUGVbInNzOkl0YWxpYyJdPSIxIikseWUuc3RyaWtlJiYoTmU9ITAsUGVbInNzOlN0cmlrZVRocm91Z2giXT0iMSIp'@;
put 'LG51bGwhPXllLnVuZGVybGluZSYmKE5lPSEwLFBlWyJzczpVbmRlcmxpbmUiXT14Ylt5ZS51bmRlcmxpbmVdfHwoeWUudW5kZXJsaW5lPyJTaW5nbGUiOiJOb25lIikpLG51bGwhPXllLnN6JiYoTmU9ITAsUGVbInNzOlNpemUiXT15ZS5zeiksbnVsbCE9eWUubmFtZSYmKE5lPSEwLFBlWyJz'@;
put 'czpGb250TmFtZSJdPXllLm5hbWUpLHllLmNvbG9yJiZudWxsIT15ZS5jb2xvci5yZ2ImJihOZT0hMCxQZVsic3M6Q29sb3IiXT0iIyIrKCJudW1iZXIiPT10eXBlb2YgeWUuY29sb3IucmdiPyIwMDAwMDAiK3llLmNvbG9yLnJnYi50b1N0cmluZygxNik6eWUuY29sb3IucmdiKS5zbGljZSgt'@;
put 'NikpLFsic3ViIiwic3VwZXIiXS5pbmRleE9mKHllLnZhbGlnbik+LTEmJihQZVsic3M6VmVydGljYWxBbGlnbiJdPUF0KHllLnZhbGlnbikrInNjcmlwdCIpLE5lJiZnZS5wdXNoKFByKCJGb250IixudWxsLFBlKSl9ZTppZihRLmZpbGxJZD4wKXt2YXIgWWU9Ui5GaWxsc1tRLmZpbGxJZF07'@;
put 'aWYoIVllfHwhWWUuZmdDb2xvcnx8bnVsbD09WWUuZmdDb2xvci5yZ2IpYnJlYWsgZTtnZS5wdXNoKFByKCJJbnRlcmlvciIsbnVsbCx7InNzOlBhdHRlcm4iOnZDW1llLnBhdHRlcm5UeXBlXXx8IlNvbGlkIiwic3M6Q29sb3IiOiIjIisoIm51bWJlciI9PXR5cGVvZiBZZS5mZ0NvbG9yLnJn'@;
put 'Yj8iMDAiK1llLmZnQ29sb3IucmdiLnRvU3RyaW5nKDE2KTpZZS5mZ0NvbG9yLnJnYikuc2xpY2UoLTYpfSkpfWdlLnB1c2goUHIoIk51bWJlckZvcm1hdCIsbnVsbCx7InNzOkZvcm1hdCI6THIoQS5fdGFibGVbUS5udW1GbXRJZF0pfSkpO3ZhciBldD17InNzOklEIjoicyIrKDIxK29lKX07'@;
put 'US5zdHlsZSYmKGV0WyJzczpOYW1lIl09US5zdHlsZSksRy5wdXNoKFByKCJTdHlsZSIsZ2Uuam9pbigiIiksZXQpKX0pLFByKCJTdHlsZXMiLEcuam9pbigiIikpfSgwLFIpLGtbM109ZnVuY3Rpb24gX0koUyl7aWYoISgoU3x8e30pLldvcmtib29rfHx7fSkuTmFtZXMpcmV0dXJuIiI7Zm9y'@;
put 'KHZhciBSPVMuV29ya2Jvb2suTmFtZXMsaz1bXSxHPTA7RzxSLmxlbmd0aDsrK0cpe3ZhciBRPVJbR107bnVsbD09US5TaGVldCYmKFEuTmFtZS5tYXRjaCgvXl94bGZuXC4vKXx8ay5wdXNoKHlJKFEpKSl9cmV0dXJuIFByKCJOYW1lcyIsay5qb2luKCIiKSl9KFMpLElpK1ByKCJXb3JrYm9v'@;
put 'ayIsay5qb2luKCIiKSx7eG1sbnM6eWwuc3MsInhtbG5zOm8iOnlsLm8sInhtbG5zOngiOnlsLngsInhtbG5zOnNzIjp5bC5zcywieG1sbnM6ZHQiOnlsLmR0LCJ4bWxuczpodG1sIjp5bC5odG1sfSl9ZnVuY3Rpb24gTUkoUyxSLGssRyl7dmFyIFE9ayxvZT1bXSxnZT1SLnNsaWNlKFIubCxS'@;
put 'LmwrUSk7aWYoRyYmRy5lbmMmJkcuZW5jLmluc2l0dSYmZ2UubGVuZ3RoPjApc3dpdGNoKFMubil7Y2FzZSJCT0YiOmNhc2UiRmlsZVBhc3MiOmNhc2UiRmlsZUxvY2siOmNhc2UiSW50ZXJmYWNlSGRyIjpjYXNlIlJSREluZm8iOmNhc2UiUlJESGVhZCI6Y2FzZSJVc3JFeGNsIjpjYXNlIkVP'@;
put 'RiI6Ry5lbmMuaW5zaXR1KFNlKHtsZW5ndGg6Z2UubGVuZ3RofSksInNraXAiKTticmVhaztjYXNlIkJvdW5kU2hlZXQ4IjpHLmVuYy5pbnNpdHUoU2Uoe2xlbmd0aDo0fSksInNraXAiKSxnZT1CdWZmZXIuY29uY2F0KFtCdWZmZXIuZnJvbShnZS5zbGljZSgwLDQpKSxCdWZmZXIuZnJvbShH'@;
put 'LmVuYy5pbnNpdHUoZ2Uuc2xpY2UoNCkpKV0pO2JyZWFrO2RlZmF1bHQ6Z2U9Ry5lbmMuaW5zaXR1KGdlKX1BcnJheS5pc0FycmF5KFIpJiYhQXJyYXkuaXNBcnJheShnZSkmJihnZT1BcnJheS5mcm9tKGdlKSksb2UucHVzaChnZSksUi5sKz1RO2Zvcih2YXIgcGU9S1NbZW8oUixSLmwpXSx5'@;
put 'ZT0wO251bGwhPXBlJiYiQ29udGludWUiPT09cGUubi5zbGljZSgwLDgpOylRPWVvKFIsUi5sKzIpLHllPVIubCs0LEcmJkcuZW5jJiZHLmVuYy5pbnNpdHUmJkcuZW5jLmluc2l0dShTZSh7bGVuZ3RoOjR9KSwic2tpcCIpLCJDb250aW51ZUZydCI9PXBlLm4/eWUrPTQ6IkNvbnRpbnVlRnJ0'@;
put 'Ij09cGUubi5zbGljZSgwLDExKSYmKHllKz0xMixHJiZHLmVuYyYmRy5lbmMuaW5zaXR1JiZHLmVuYy5pbnNpdHUoU2Uoe2xlbmd0aDo4fSksInNraXAiKSksZ2U9Ui5zbGljZSh5ZSxSLmwrNCtRKSxHJiZHLmVuYyYmRy5lbmMuaW5zaXR1JiZnZS5sZW5ndGg+MCYmKGdlPUcuZW5jLmluc2l0'@;
put 'dShnZSkpLG9lLnB1c2goZ2UpLFIubCs9NCtRLHBlPUtTW2VvKFIsUi5sKV07dmFyIFBlPWoob2UpO21uKFBlLDApO3ZhciBOZT0wO1BlLmxlbnM9W107Zm9yKHZhciBZZT0wO1llPG9lLmxlbmd0aDsrK1llKVBlLmxlbnMucHVzaChOZSksTmUrPW9lW1llXS5sZW5ndGg7aWYoUGUubGVuZ3Ro'@;
put 'PGspdGhyb3ciWExTIFJlY29yZCAiKyhTJiZTLm58fCI/PyIpKyIgVHJ1bmNhdGVkOiAiK1BlLmxlbmd0aCsiIDwgIitrO3JldHVybiBTLmYoUGUsUGUubGVuZ3RoLEcpfWZ1bmN0aW9uIGRoKFMsUixrKXtpZigieiIhPT1TLnQmJlMuWEYpe3ZhciBHPTA7dHJ5e0c9Uy56fHxTLlhGLm51bUZt'@;
put 'dElkfHwwLFIuY2VsbE5GJiYoUy56PUEuX3RhYmxlW0ddKX1jYXRjaChvZSl7aWYoUi5XVEYpdGhyb3cgb2V9aWYoIVJ8fCExIT09Ui5jZWxsVGV4dCl0cnl7Uy53PSJlIj09PVMudD9TLnd8fE1jW1Mudl06MD09PUd8fCJHZW5lcmFsIj09Rz8ibiI9PT1TLnQ/KDB8Uy52KT09PVMudj9BLl9n'@;
put 'ZW5lcmFsX2ludChTLnYpOkEuX2dlbmVyYWxfbnVtKFMudik6QS5fZ2VuZXJhbChTLnYpOkEuZm9ybWF0KEcsUy52LHtkYXRlMTkwNDohIWssZGF0ZU5GOlImJlIuZGF0ZU5GfSl9Y2F0Y2gob2Upe2lmKFIuV1RGKXRocm93IG9lfWlmKFIuY2VsbERhdGVzJiZHJiYibiI9PVMudCYmQS5pc19k'@;
put 'YXRlKEEuX3RhYmxlW0ddfHxTdHJpbmcoRykpKXt2YXIgUT1BLnBhcnNlX2RhdGVfY29kZShTLnYpO1EmJihTLnQ9ImQiLFMudj1uZXcgRGF0ZShRLnksUS5tLTEsUS5kLFEuSCxRLk0sUS5TLFEudSkpfX19ZnVuY3Rpb24gUjgoUyxSLGspe3JldHVybnt2OlMsaXhmZTpSLHQ6a319dmFyIHhJ'@;
put 'PWZ1bmN0aW9uKFMsUixrKXtSWyIhb2JqZWN0cyJdPVN9LFRiPXtTSToiZTA4NTlmZjJmOTRmNjgxMGFiOTEwODAwMmIyN2IzZDkiLERTSToiMDJkNWNkZDU5YzJlMWIxMDkzOTcwODAwMmIyY2Y5YWUiLFVESToiMDVkNWNkZDU5YzJlMWIxMDkzOTcwODAwMmIyY2Y5YWUifTtmdW5jdGlvbiAk'@;
put 'UyhTLFIpe3ZhciBrLEcsUSxvZTtpZihSfHwoUj17fSksTkkoUiksVygpLFIuY29kZXBhZ2UmJkwoUi5jb2RlcGFnZSksUy5GdWxsUGF0aHMpe2lmKHZlLmZpbmQoUywiL2VuY3J5cHRpb24iKSl0aHJvdyBuZXcgRXJyb3IoIkZpbGUgaXMgcGFzc3dvcmQtcHJvdGVjdGVkIik7az12ZS5maW5k'@;
put 'KFMsIiFDb21wT2JqIiksRz12ZS5maW5kKFMsIi9Xb3JrYm9vayIpfHx2ZS5maW5kKFMsIi9Cb29rIil9ZWxzZXtzd2l0Y2goUi50eXBlKXtjYXNlImJhc2U2NCI6Uz1iKF9lLmRlY29kZShTKSk7YnJlYWs7Y2FzZSJiaW5hcnkiOlM9YihTKTticmVhaztjYXNlImJ1ZmZlciI6YnJlYWs7Y2Fz'@;
put 'ZSJhcnJheSI6QXJyYXkuaXNBcnJheShTKXx8KFM9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoUykpfW1uKFMsMCksRz17Y29udGVudDpTfX1pZihrJiZmdW5jdGlvbiBHUyhTKXt2YXIgUj17fSxrPVMuY29udGVudDtpZihrLmw9MjgsUi5BbnNpVXNlclR5cGU9ay5yZWFkX3NoaWZ0KDAs'@;
put 'Imxwc3RyLWFuc2kiKSxSLkFuc2lDbGlwYm9hcmRGb3JtYXQ9ZnVuY3Rpb24gXzAoUyl7cmV0dXJuIFB3KFMsMSl9KGspLGsubGVuZ3RoLWsubDw9NClyZXR1cm4gUjt2YXIgRz1rLnJlYWRfc2hpZnQoNCk7aWYoMD09R3x8Rz40MHx8KGsubC09NCxSLlJlc2VydmVkMT1rLnJlYWRfc2hpZnQo'@;
put 'MCwibHBzdHItYW5zaSIpLGsubGVuZ3RoLWsubDw9NCl8fDE5MDc1MDU2NTIhPT0oRz1rLnJlYWRfc2hpZnQoNCkpfHwoUi5Vbmljb2RlQ2xpcGJvYXJkRm9ybWF0PWZ1bmN0aW9uIEE2KFMpe3JldHVybiBQdyhTLDIpfShrKSwwPT0oRz1rLnJlYWRfc2hpZnQoNCkpfHxHPjQwKSlyZXR1cm4g'@;
put 'UjtrLmwtPTQsUi5SZXNlcnZlZDI9ay5yZWFkX3NoaWZ0KDAsImxwd3N0ciIpfShrKSxSLmJvb2tQcm9wcyYmIVIuYm9va1NoZWV0cylRPXt9O2Vsc2V7dmFyIGdlPVRlPyJidWZmZXIiOiJhcnJheSI7aWYoRyYmRy5jb250ZW50KVE9ZnVuY3Rpb24gRnooUyxSKXt2YXIgaz17b3B0czp7fX0s'@;
put 'Rz17fTtudWxsIT1sZSYmbnVsbD09Ui5kZW5zZSYmKFIuZGVuc2U9bGUpO3ZhciBZZSxjdCxhdCxidCxPdCxLdCxRPVIuZGVuc2U/W106e30sb2U9e30sZ2U9e30scGU9bnVsbCx5ZT1bXSxQZT0iIixOZT17fSxldD0iIixqdD17fSxrdD1bXSxUbj1bXSxycj1bXSxTbj17U2hlZXRzOltdLFdC'@;
put 'UHJvcHM6e2RhdGUxOTA0OiExfSxWaWV3czpbe31dfSxscj17fSxYbj17Rm9udHM6W119LEJuPWZ1bmN0aW9uKERpKXtyZXR1cm4gRGk8OD9yMFtEaV06RGk8NjQmJnJyW0RpLThdfHxyMFtEaV19LGZyPWZ1bmN0aW9uKERpLGNzKXt2YXIgeGwsWW89RGkuWEYuZGF0YTtZbyYmKFlvLnBhdHRl'@;
put 'cm5UeXBlfHxudWxsIT1Zby5pY3ZGb3JlKSYmY3MmJmNzLmNlbGxTdHlsZXMmJihEaS5zPXt9LERpLnMucGF0dGVyblR5cGU9WW8ucGF0dGVyblR5cGUsRGkuWEYuZm9udCYmUHQoRGkucyxEaS5YRi5mb250KSxZby5mV3JhcCYmKChEaS5zLmFsaWdubWVudHx8KERpLnMuYWxpZ25tZW50PXt9'@;
put 'KSkud3JhcFRleHQ9ITApLFlvLmZTaHJpbmtUb0ZpdCYmKChEaS5zLmFsaWdubWVudHx8KERpLnMuYWxpZ25tZW50PXt9KSkuc2hyaW5rVG9GaXQ9ITApLFlvLmhhbGlnbiYmKChEaS5zLmFsaWdubWVudHx8KERpLnMuYWxpZ25tZW50PXt9KSkuaG9yaXpvbnRhbD1Zby5oYWxpZ24pLFlvLnZh'@;
put 'bGlnbiYmKChEaS5zLmFsaWdubWVudHx8KERpLnMuYWxpZ25tZW50PXt9KSkudmVydGljYWw9WW8udmFsaWduKSxZby5jSW5kZW50JiYoKERpLnMuYWxpZ25tZW50fHwoRGkucy5hbGlnbm1lbnQ9e30pKS5pbmRlbnQ9WW8uY0luZGVudCksNjQhPVlvLmljdkZvcmUmJjY1IT1Zby5pY3ZCYWNr'@;
put 'JiYoKHhsPWhkKEJuKFlvLmljdkZvcmUpKSkmJihEaS5zLmZnQ29sb3I9e3JnYjp4bH0pLCh4bD1oZChCbihZby5pY3ZCYWNrKSkpJiYoRGkucy5iZ0NvbG9yPXtyZ2I6eGx9KSksWyJMZWZ0IiwiUmlnaHQiLCJUb3AiLCJCb3R0b20iXS5mb3JFYWNoKGZ1bmN0aW9uKF91KXtZb1siZGciK191'@;
put 'XSYmKERpLnNbX3UudG9Mb3dlckNhc2UoKV09e3N0eWxlOnBkW1lvWyJkZyIrX3VdXSxjb2xvcjp7cmdiOmhkKEJuKFlvWyJpY3YiK191XSkpfX0pfSkpfSxicj1mdW5jdGlvbihEaSxjcyxZbyl7aWYoIShaaT4xfHxZby5zaGVldFJvd3MmJkRpLnI+PVlvLnNoZWV0Um93cykpe2lmKFlvLmNl'@;
put 'bGxTdHlsZXMmJmNzLlhGJiZjcy5YRi5kYXRhJiZmcihjcyxZbyksZGVsZXRlIGNzLml4ZmUsZGVsZXRlIGNzLlhGLFllPURpLGV0PXFpKERpKSwoIWdlfHwhZ2Uuc3x8IWdlLmUpJiYoZ2U9e3M6e3I6MCxjOjB9LGU6e3I6MCxjOjB9fSksRGkucjxnZS5zLnImJihnZS5zLnI9RGkuciksRGku'@;
put 'YzxnZS5zLmMmJihnZS5zLmM9RGkuYyksRGkucisxPmdlLmUuciYmKGdlLmUucj1EaS5yKzEpLERpLmMrMT5nZS5lLmMmJihnZS5lLmM9RGkuYysxKSxZby5jZWxsRm9ybXVsYSYmY3MuZilmb3IodmFyIHhsPTA7eGw8a3QubGVuZ3RoOysreGwpaWYoIShrdFt4bF1bMF0ucy5jPkRpLmN8fGt0'@;
put 'W3hsXVswXS5zLnI+RGkucnx8a3RbeGxdWzBdLmUuYzxEaS5jfHxrdFt4bF1bMF0uZS5yPERpLnIpKXtjcy5GPXJhKGt0W3hsXVswXSksKGt0W3hsXVswXS5zLmMhPURpLmN8fGt0W3hsXVswXS5zLnIhPURpLnIpJiZkZWxldGUgY3MuZixjcy5mJiYoY3MuZj0iIitzMChrdFt4bF1bMV0sZ2Us'@;
put 'RGksRm4sZXIpKTticmVha31Zby5kZW5zZT8oUVtEaS5yXXx8KFFbRGkucl09W10pLFFbRGkucl1bRGkuY109Y3MpOlFbZXRdPWNzfX0sZXI9e2VuYzohMSxzYmNjaDowLHNuYW1lczpbXSxzaGFyZWRmOmp0LGFycmF5ZjprdCxycnRhYmlkOltdLGxhc3R1c2VyOiIiLGJpZmY6OCxjb2RlcGFn'@;
put 'ZTowLHdpbmxvY2tlZDowLGNlbGxTdHlsZXM6ISFSJiYhIVIuY2VsbFN0eWxlcyxXVEY6ISFSJiYhIVIud3RmfTtlci5wYXNzd29yZD1SLnBhc3N3b3JkP1IucGFzc3dvcmQ6IlZlbHZldFN3ZWF0c2hvcCI7dmFyIEZpLE1pPW51bGwsbmE9W10sY2E9W10sTGk9W10sa3I9W10sX3I9ITEsRm49'@;
put 'W107Rm4uU2hlZXROYW1lcz1lci5zbmFtZXMsRm4uc2hhcmVkZj1lci5zaGFyZWRmLEZuLmFycmF5Zj1lci5hcnJheWYsRm4ubmFtZXM9W10sRm4uWFRJPVtdO3ZhciBpYSxqcj0iIixaaT0wLHlpPTAsX2E9W10sc289W107ZXIuY29kZXBhZ2U9MTIwMCxVKDEyMDApO2Zvcih2YXIgTG89ITE7'@;
put 'Uy5sPFMubGVuZ3RoLTE7KXt2YXIgT2E9Uy5sLGhvPVMucmVhZF9zaGlmdCgyKTtpZihlciYmZXIuZW5jJiZlci5lbmMuaW5zaXR1JiZlci5lbmMuaW5zaXR1KFNlKFswLDBdKSwiaGVhZGVyLTAiKSwwPT09aG8mJiJFT0YiPT09anIpYnJlYWs7dmFyIEphPVMubD09PVMubGVuZ3RoPzA6Uy5y'@;
put 'ZWFkX3NoaWZ0KDIpO2VyJiZlci5lbmMmJmVyLmVuYy5pbnNpdHUmJmVyLmVuYy5pbnNpdHUoU2UoWzAsMF0pLCJsZW5ndGgtMCIpO3ZhciBCaT1LU1tob107aWYoQmkmJkJpLmYpe2lmKFIuYm9va1NoZWV0cyYmIkJvdW5kU2hlZXQ4Ij09PWpyJiYiQm91bmRTaGVldDgiIT09QmkubilicmVh'@;
put 'aztpZihqcj1CaS5uLDI9PT1CaS5yfHwxMj09Qmkucil7dmFyIElzPVMucmVhZF9zaGlmdCgyKTtpZihKYS09MixlciYmZXIuZW5jJiZlci5lbmMuaW5zaXR1JiZlci5lbmMuaW5zaXR1KFNlKFswLDBdKSksIWVyLmVuYyYmSXMhPT1obyYmKCgyNTUmSXMpPDw4fElzPj44KSE9PWhvKXRocm93'@;
put 'IG5ldyBFcnJvcigicnQgbWlzbWF0Y2g6ICIrSXMrIiE9Iitobyk7MTI9PUJpLnImJihTLmwrPTEwLEphLT0xMCxlciYmZXIuZW5jJiZlci5lbmMuaW5zaXR1JiZlci5lbmMuaW5zaXR1KFNlKFswLDAsMCwwLDAsMCwwLDAsMCwwXSkpKX12YXIgUG49TUkoQmksUyxKYSxlciksV289Qmkubjtp'@;
put 'ZigwPT1aaSYmIkJPRiIhPVdvKWNvbnRpbnVlO3N3aXRjaChXbyl7Y2FzZSJEYXRlMTkwNCI6ay5vcHRzLkRhdGUxOTA0PVNuLldCUHJvcHMuZGF0ZTE5MDQ9UG47YnJlYWs7Y2FzZSJXcml0ZVByb3RlY3QiOmsub3B0cy5Xcml0ZVByb3RlY3Q9ITA7YnJlYWs7Y2FzZSJGaWxlUGFzcyI6aWYo'@;
put 'ZXIuZW5jfHwoUy5sPTAsWmk9MCksZXIuZW5jPVBuLCFSLnBhc3N3b3JkJiZudWxsPT1Qbi52YWxpZCl0aHJvdyBuZXcgRXJyb3IoIkZpbGUgaXMgcGFzc3dvcmQtcHJvdGVjdGVkIik7aWYobnVsbD09UG4udmFsaWQpdGhyb3cgbmV3IEVycm9yKCJFbmNyeXB0aW9uIHNjaGVtZSB1bnN1cHBv'@;
put 'cnRlZCIpO2lmKCFQbi52YWxpZCl0aHJvdyBuZXcgRXJyb3IoIlBhc3N3b3JkIGlzIGluY29ycmVjdCIpO2JyZWFrO2Nhc2UiV3JpdGVBY2Nlc3MiOmVyLmxhc3R1c2VyPVBuO2JyZWFrO2Nhc2UiRmlsZVNoYXJpbmciOmNhc2UiVGVtcGxhdGUiOmNhc2UiQm9va0Jvb2wiOmNhc2UiVXNlc0VM'@;
put 'RnMiOmNhc2UiTVRSU2V0dGluZ3MiOmNhc2UiVW5jYWxjZWQiOmNhc2UiRXh0U1NUIjpjYXNlIkJvb2tFeHQiOmNhc2UiUmljaFRleHRTdHJlYW0iOmNhc2UiQmtIaW0iOmNhc2UiSW5kZXgiOmNhc2UiUHJvdDRSZXYiOmNhc2UiUHJvdDRSZXZQYXNzIjpicmVhaztjYXNlIkNvZGVQYWdlIjp2'@;
put 'YXIgaHI9TnVtYmVyKFBuKTtzd2l0Y2goaHIpe2Nhc2UgMjEwMTA6aHI9MTIwMDticmVhaztjYXNlIDMyNzY4OmhyPTFlNDticmVhaztjYXNlIDMyNzY5OmhyPTEyNTJ9VShlci5jb2RlcGFnZT1ociksTG89ITA7YnJlYWs7Y2FzZSJSUlRhYklkIjplci5ycnRhYmlkPVBuO2JyZWFrO2Nhc2Ui'@;
put 'V2luUHJvdGVjdCI6ZXIud2lubG9ja2VkPVBuO2JyZWFrO2Nhc2UiUmVmcmVzaEFsbCI6Y2FzZSJDYWxjQ291bnQiOmNhc2UiQ2FsY0RlbHRhIjpjYXNlIkNhbGNJdGVyIjpjYXNlIkNhbGNNb2RlIjpjYXNlIkNhbGNQcmVjaXNpb24iOmNhc2UiQ2FsY1NhdmVSZWNhbGMiOmsub3B0c1tXb109'@;
put 'UG47YnJlYWs7Y2FzZSJDYWxjUmVmTW9kZSI6ZXIuQ2FsY1JlZk1vZGU9UG47YnJlYWs7Y2FzZSJGb3JjZUZ1bGxDYWxjdWxhdGlvbiI6ay5vcHRzLkZ1bGxDYWxjPVBuO2JyZWFrO2Nhc2UiV3NCb29sIjpQbi5mRGlhbG9nJiYoUVsiIXR5cGUiXT0iZGlhbG9nIiksUG4uZkJlbG93fHwoKFFb'@;
put 'IiFvdXRsaW5lIl18fChRWyIhb3V0bGluZSJdPXt9KSkuYWJvdmU9ITApLFBuLmZSaWdodHx8KChRWyIhb3V0bGluZSJdfHwoUVsiIW91dGxpbmUiXT17fSkpLmxlZnQ9ITApO2JyZWFrO2Nhc2UiWEYiOlBuLmZvbnQ9WG4uRm9udHNbUG4uaWZudDw0P1BuLmlmbnQ6UG4uaWZudC0xXSxUbi5w'@;
put 'dXNoKFBuKTticmVhaztjYXNlIlN1cEJvb2siOkZuLnB1c2goW1BuXSksRm5bRm4ubGVuZ3RoLTFdLlhUST1bXTticmVhaztjYXNlIkV4dGVybk5hbWUiOkZuW0ZuLmxlbmd0aC0xXS5wdXNoKFBuKTticmVhaztjYXNlIkxibCI6aWE9e05hbWU6UG4uTmFtZSxSZWY6czAoUG4ucmdjZSxnZSxu'@;
put 'dWxsLEZuLGVyKX0sUG4uaXRhYj4wJiYoaWEuU2hlZXQ9UG4uaXRhYi0xKSxGbi5uYW1lcy5wdXNoKGlhKSxGblswXXx8KEZuWzBdPVtdLEZuWzBdLlhUST1bXSksRm5bRm4ubGVuZ3RoLTFdLnB1c2goUG4pLCJfeGxubS5fRmlsdGVyRGF0YWJhc2UiPT1Qbi5OYW1lJiZQbi5pdGFiPjAmJlBu'@;
put 'LnJnY2UmJlBuLnJnY2VbMF0mJlBuLnJnY2VbMF1bMF0mJiJQdGdBcmVhM2QiPT1Qbi5yZ2NlWzBdWzBdWzBdJiYoc29bUG4uaXRhYi0xXT17cmVmOnJhKFBuLnJnY2VbMF1bMF1bMV1bMl0pfSk7YnJlYWs7Y2FzZSJFeHRlcm5Db3VudCI6ZXIuRXh0ZXJuQ291bnQ9UG47YnJlYWs7Y2FzZSJF'@;
put 'eHRlcm5TaGVldCI6MD09Rm4ubGVuZ3RoJiYoRm5bMF09W10sRm5bMF0uWFRJPVtdKSxGbltGbi5sZW5ndGgtMV0uWFRJPUZuW0ZuLmxlbmd0aC0xXS5YVEkuY29uY2F0KFBuKSxGbi5YVEk9Rm4uWFRJLmNvbmNhdChQbik7YnJlYWs7Y2FzZSJOYW1lQ210IjppZihlci5iaWZmPDgpYnJlYWs7'@;
put 'bnVsbCE9aWEmJihpYS5Db21tZW50PVBuWzFdKTticmVhaztjYXNlIlByb3RlY3QiOlFbIiFwcm90ZWN0Il09UG47YnJlYWs7Y2FzZSJQYXNzd29yZCI6MCE9PVBuJiZlci5XVEYmJmNvbnNvbGUuZXJyb3IoIlBhc3N3b3JkIHZlcmlmaWVyOiAiK1BuKTticmVhaztjYXNlIkJvdW5kU2hlZXQ4'@;
put 'IjpvZVtQbi5wb3NdPVBuLGVyLnNuYW1lcy5wdXNoKFBuLm5hbWUpO2JyZWFrO2Nhc2UiRU9GIjppZihRWyIhZ3JpZGxpbmVzIl09IU1pfHxNaS5ncmlkLE1pPW51bGwsLS1aaSlicmVhaztpZihnZS5lKXtpZihnZS5lLnI+MCYmZ2UuZS5jPjApe2lmKGdlLmUuci0tLGdlLmUuYy0tLFFbIiFy'@;
put 'ZWYiXT1yYShnZSksUi5zaGVldFJvd3MmJlIuc2hlZXRSb3dzPD1nZS5lLnIpe3ZhciBRbD1nZS5lLnI7Z2UuZS5yPVIuc2hlZXRSb3dzLTEsUVsiIWZ1bGxyZWYiXT1RWyIhcmVmIl0sUVsiIXJlZiJdPXJhKGdlKSxnZS5lLnI9UWx9Z2UuZS5yKyssZ2UuZS5jKyt9bmEubGVuZ3RoPjAmJihR'@;
put 'WyIhbWVyZ2VzIl09bmEpLGNhLmxlbmd0aD4wJiZ4SShjYSxRLFhuKSxMaS5sZW5ndGg+MCYmKFFbIiFjb2xzIl09TGkpLGtyLmxlbmd0aD4wJiYoUVsiIXJvd3MiXT1rciksU24uU2hlZXRzLnB1c2gobHIpfSIiPT09UGU/TmU9UTpHW1BlXT1RLFE9Ui5kZW5zZT9bXTp7fTticmVhaztjYXNl'@;
put 'IkJPRiI6aWYoOD09PWVyLmJpZmYmJihlci5iaWZmPXs5OjIsNTIxOjMsMTAzMzo0fVtob118fHs1MTI6Miw3Njg6MywxMDI0OjQsMTI4MDo1LDE1MzY6OCwyOjIsNzoyfVtQbi5CSUZGVmVyXXx8OCksZXIuYmlmZmd1ZXNzPTA9PVBuLkJJRkZWZXIsMD09UG4uQklGRlZlciYmNDA5Nj09UG4u'@;
put 'ZHQmJihlci5iaWZmPTUsTG89ITAsVShlci5jb2RlcGFnZT0yODU5MSkpLDg9PWVyLmJpZmYmJjA9PVBuLkJJRkZWZXImJjE2PT1Qbi5kdCYmKGVyLmJpZmY9MiksWmkrKylicmVhaztpZihRPVIuZGVuc2U/W106e30sZXIuYmlmZjw4JiYhTG8mJihMbz0hMCxVKGVyLmNvZGVwYWdlPVIuY29k'@;
put 'ZXBhZ2V8fDEyNTIpKSxlci5iaWZmPDV8fDA9PVBuLkJJRkZWZXImJjQwOTY9PVBuLmR0KXsiIj09PVBlJiYoUGU9IlNoZWV0MSIpLGdlPXtzOntyOjAsYzowfSxlOntyOjAsYzowfX07dmFyIFlsPXtwb3M6Uy5sLUphLG5hbWU6UGV9O29lW1lsLnBvc109WWwsZXIuc25hbWVzLnB1c2goUGUp'@;
put 'fWVsc2UgUGU9KG9lW09hXXx8e25hbWU6IiJ9KS5uYW1lOzMyPT1Qbi5kdCYmKFFbIiF0eXBlIl09ImNoYXJ0IiksNjQ9PVBuLmR0JiYoUVsiIXR5cGUiXT0ibWFjcm8iKSxuYT1bXSxjYT1bXSxlci5hcnJheWY9a3Q9W10sTGk9W10sa3I9W10sX3I9ITEsbHI9e0hpZGRlbjoob2VbT2FdfHx7'@;
put 'aHM6MH0pLmhzLG5hbWU6UGV9O2JyZWFrO2Nhc2UiTnVtYmVyIjpjYXNlIkJJRkYyTlVNIjpjYXNlIkJJRkYySU5UIjoiY2hhcnQiPT1RWyIhdHlwZSJdJiYoUi5kZW5zZT8oUVtQbi5yXXx8W10pW1BuLmNdOlFbcWkoe2M6UG4uYyxyOlBuLnJ9KV0pJiYrK1BuLmMsT3Q9e2l4ZmU6UG4uaXhm'@;
put 'ZSxYRjpUbltQbi5peGZlXXx8e30sdjpQbi52YWwsdDoibiJ9LHlpPjAmJihPdC56PV9hW090Lml4ZmU+PjgmNjNdKSxkaChPdCxSLGsub3B0cy5EYXRlMTkwNCksYnIoe2M6UG4uYyxyOlBuLnJ9LE90LFIpO2JyZWFrO2Nhc2UiQm9vbEVyciI6T3Q9e2l4ZmU6UG4uaXhmZSxYRjpUbltQbi5p'@;
put 'eGZlXSx2OlBuLnZhbCx0OlBuLnR9LHlpPjAmJihPdC56PV9hW090Lml4ZmU+PjgmNjNdKSxkaChPdCxSLGsub3B0cy5EYXRlMTkwNCksYnIoe2M6UG4uYyxyOlBuLnJ9LE90LFIpO2JyZWFrO2Nhc2UiUksiOk90PXtpeGZlOlBuLml4ZmUsWEY6VG5bUG4uaXhmZV0sdjpQbi5ya251bSx0OiJu'@;
put 'In0seWk+MCYmKE90Lno9X2FbT3QuaXhmZT4+OCY2M10pLGRoKE90LFIsay5vcHRzLkRhdGUxOTA0KSxicih7YzpQbi5jLHI6UG4ucn0sT3QsUik7YnJlYWs7Y2FzZSJNdWxSayI6Zm9yKHZhciBHbD1Qbi5jO0dsPD1Qbi5DOysrR2wpe3ZhciB5dT1Qbi5ya3JlY1tHbC1Qbi5jXVswXTtPdD17'@;
put 'aXhmZTp5dSxYRjpUblt5dV0sdjpQbi5ya3JlY1tHbC1Qbi5jXVsxXSx0OiJuIn0seWk+MCYmKE90Lno9X2FbT3QuaXhmZT4+OCY2M10pLGRoKE90LFIsay5vcHRzLkRhdGUxOTA0KSxicih7YzpHbCxyOlBuLnJ9LE90LFIpfWJyZWFrO2Nhc2UiRm9ybXVsYSI6aWYoIlN0cmluZyI9PVBuLnZh'@;
put 'bCl7cGU9UG47YnJlYWt9aWYoKE90PVI4KFBuLnZhbCxQbi5jZWxsLml4ZmUsUG4udHQpKS5YRj1UbltPdC5peGZlXSxSLmNlbGxGb3JtdWxhKXt2YXIgTWw9UG4uZm9ybXVsYTtpZihNbCYmTWxbMF0mJk1sWzBdWzBdJiYiUHRnRXhwIj09TWxbMF1bMF1bMF0pe3ZhciBsbj1NbFswXVswXVsx'@;
put 'XVswXSxFbj1NbFswXVswXVsxXVsxXSxVbj1xaSh7cjpsbixjOkVufSk7anRbVW5dP090LmY9IiIrczAoUG4uZm9ybXVsYSxnZSxQbi5jZWxsLEZuLGVyKTpPdC5GPSgoUi5kZW5zZT8oUVtsbl18fFtdKVtFbl06UVtVbl0pfHx7fSkuRn1lbHNlIE90LmY9IiIrczAoUG4uZm9ybXVsYSxnZSxQ'@;
put 'bi5jZWxsLEZuLGVyKX15aT4wJiYoT3Quej1fYVtPdC5peGZlPj44JjYzXSksZGgoT3QsUixrLm9wdHMuRGF0ZTE5MDQpLGJyKFBuLmNlbGwsT3QsUikscGU9UG47YnJlYWs7Y2FzZSJTdHJpbmciOmlmKCFwZSl0aHJvdyBuZXcgRXJyb3IoIlN0cmluZyByZWNvcmQgZXhwZWN0cyBGb3JtdWxh'@;
put 'Iik7cGUudmFsPVBuLChPdD1SOChQbixwZS5jZWxsLml4ZmUsInMiKSkuWEY9VG5bT3QuaXhmZV0sUi5jZWxsRm9ybXVsYSYmKE90LmY9IiIrczAocGUuZm9ybXVsYSxnZSxwZS5jZWxsLEZuLGVyKSkseWk+MCYmKE90Lno9X2FbT3QuaXhmZT4+OCY2M10pLGRoKE90LFIsay5vcHRzLkRhdGUx'@;
put 'OTA0KSxicihwZS5jZWxsLE90LFIpLHBlPW51bGw7YnJlYWs7Y2FzZSJBcnJheSI6a3QucHVzaChQbik7dmFyIHhpPXFpKFBuWzBdLnMpO2lmKGN0PVIuZGVuc2U/KFFbUG5bMF0ucy5yXXx8W10pW1BuWzBdLnMuY106UVt4aV0sUi5jZWxsRm9ybXVsYSYmY3Qpe2lmKCFwZXx8IXhpfHwhY3Qp'@;
put 'YnJlYWs7Y3QuZj0iIitzMChQblsxXSxnZSxQblswXSxGbixlciksY3QuRj1yYShQblswXSl9YnJlYWs7Y2FzZSJTaHJGbWxhIjppZighUi5jZWxsRm9ybXVsYSlicmVhaztpZihldCl7aWYoIXBlKWJyZWFrO2p0W3FpKHBlLmNlbGwpXT1QblswXSwoKGN0PVIuZGVuc2U/KFFbcGUuY2VsbC5y'@;
put 'XXx8W10pW3BlLmNlbGwuY106UVtxaShwZS5jZWxsKV0pfHx7fSkuZj0iIitzMChQblswXSxnZSxZZSxGbixlcil9YnJlYWs7Y2FzZSJMYWJlbFNzdCI6T3Q9UjgoeWVbUG4uaXNzdF0udCxQbi5peGZlLCJzIikseWVbUG4uaXNzdF0uaCYmKE90Lmg9eWVbUG4uaXNzdF0uaCksT3QuWEY9VG5b'@;
put 'T3QuaXhmZV0seWk+MCYmKE90Lno9X2FbT3QuaXhmZT4+OCY2M10pLGRoKE90LFIsay5vcHRzLkRhdGUxOTA0KSxicih7YzpQbi5jLHI6UG4ucn0sT3QsUikseWVbUG4uaXNzdF0uUiYmKE90LlI9eWVbUG4uaXNzdF0uUi5tYXAoZnVuY3Rpb24obWEpe3ZhciBEaT1xdChtYSk7cmV0dXJuIG1h'@;
put 'LnM9PVhuLkZvbnRzWzBdJiYoRGkucz1PdC5zKSxEaX0pKTticmVhaztjYXNlIkJsYW5rIjpSLnNoZWV0U3R1YnMmJihPdD17aXhmZTpQbi5peGZlLFhGOlRuW1BuLml4ZmVdLHQ6InoifSx5aT4wJiYoT3Quej1fYVtPdC5peGZlPj44JjYzXSksZGgoT3QsUixrLm9wdHMuRGF0ZTE5MDQpLGJy'@;
put 'KHtjOlBuLmMscjpQbi5yfSxPdCxSKSk7YnJlYWs7Y2FzZSJNdWxCbGFuayI6aWYoUi5zaGVldFN0dWJzKWZvcih2YXIgb3I9UG4uYztvcjw9UG4uQzsrK29yKXt2YXIgT2k9UG4uaXhmZVtvci1Qbi5jXTtPdD17aXhmZTpPaSxYRjpUbltPaV0sdDoieiJ9LHlpPjAmJihPdC56PV9hW090Lml4'@;
put 'ZmU+PjgmNjNdKSxkaChPdCxSLGsub3B0cy5EYXRlMTkwNCksYnIoe2M6b3IscjpQbi5yfSxPdCxSKX1icmVhaztjYXNlIlJTdHJpbmciOmNhc2UiTGFiZWwiOmNhc2UiQklGRjJTVFIiOihPdD1SOChQbi52YWwsUG4uaXhmZSwicyIpKS5YRj1UbltPdC5peGZlXSx5aT4wJiYoT3Quej1fYVtP'@;
put 'dC5peGZlPj44JjYzXSksZGgoT3QsUixrLm9wdHMuRGF0ZTE5MDQpLGJyKHtjOlBuLmMscjpQbi5yfSxPdCxSKTticmVhaztjYXNlIkRpbWVuc2lvbnMiOjE9PT1aaSYmKGdlPVBuKTticmVhaztjYXNlIlNTVCI6KHllPVBuKS5mb3JFYWNoKGZ1bmN0aW9uKG1hKXttYS5fUj8obWEuX1JbMF0m'@;
put 'Jm1hLl9SWzBdLmlkeD4wJiZtYS5fUi51bnNoaWZ0KHtpZHg6MCxpZm50OjB9KSxtYS5SPW1hLl9SLm1hcChmdW5jdGlvbihEaSxjcyl7cmV0dXJue3Q6InMiLHY6bWEudC5zbGljZShEaS5pZHgsKG1hLl9SW2NzKzFdfHx7fSkuaWR4KSxzOlhuLkZvbnRzW0RpLmlmbnQ8ND9EaS5pZm50OkRp'@;
put 'LmlmbnQtMV19fSksUi5jZWxsSFRNTCYmKG1hLmg9VnUobWEuUikpKTpSLmNlbGxIVE1MJiYobWEuaD1sYShtYS50KSksZGVsZXRlIG1hLl9SfSk7YnJlYWs7Y2FzZSJGb3JtYXQiOmlmKDQ9PWVyLmJpZmYpe19hW3lpKytdPVBuWzFdO2Zvcih2YXIgU3I9MDtTcjx5aSsxNjMmJkEuX3RhYmxl'@;
put 'W1NyXSE9UG5bMV07KytTcik7U3I+PTE2MyYmQS5sb2FkKFBuWzFdLHlpKzE2Myl9ZWxzZSBBLmxvYWQoUG5bMV0sUG5bMF0pO2JyZWFrO2Nhc2UiQklGRjJGT1JNQVQiOl9hW3lpKytdPVBuO2Zvcih2YXIgUGk9MDtQaTx5aSsxNjMmJkEuX3RhYmxlW1BpXSE9UG47KytQaSk7UGk+PTE2MyYm'@;
put 'QS5sb2FkKFBuLHlpKzE2Myk7YnJlYWs7Y2FzZSJNZXJnZUNlbGxzIjpuYT1uYS5jb25jYXQoUG4pO2JyZWFrO2Nhc2UiT2JqIjpjYVtQbi5jbW9bMF1dPWVyLmxhc3RvYmo9UG47YnJlYWs7Y2FzZSJUeE8iOmVyLmxhc3RvYmouVHhPPVBuO2JyZWFrO2Nhc2UiSW1EYXRhIjplci5sYXN0b2Jq'@;
put 'LkltRGF0YT1QbjticmVhaztjYXNlIkhMaW5rIjpmb3IoYnQ9UG5bMF0ucy5yO2J0PD1QblswXS5lLnI7KytidClmb3IoYXQ9UG5bMF0ucy5jO2F0PD1QblswXS5lLmM7KythdCkoY3Q9Ui5kZW5zZT8oUVtidF18fFtdKVthdF06UVtxaSh7YzphdCxyOmJ0fSldKSYmKGN0Lmw9UG5bMV0pO2Jy'@;
put 'ZWFrO2Nhc2UiSExpbmtUb29sdGlwIjpmb3IoYnQ9UG5bMF0ucy5yO2J0PD1QblswXS5lLnI7KytidClmb3IoYXQ9UG5bMF0ucy5jO2F0PD1QblswXS5lLmM7KythdCkoY3Q9Ui5kZW5zZT8oUVtidF18fFtdKVthdF06UVtxaSh7YzphdCxyOmJ0fSldKSYmY3QubCYmKGN0LmwuVG9vbHRpcD1Q'@;
put 'blsxXSk7YnJlYWs7Y2FzZSJOb3RlIjppZihlci5iaWZmPD01JiZlci5iaWZmPj0yKWJyZWFrO2N0PVIuZGVuc2U/KFFbUG5bMF0ucl18fFtdKVtQblswXS5jXTpRW3FpKFBuWzBdKV07dmFyIFphPWNhW1BuWzJdXTtjdHx8KFIuZGVuc2U/KFFbUG5bMF0ucl18fChRW1BuWzBdLnJdPVtdKSxj'@;
put 'dD1RW1BuWzBdLnJdW1BuWzBdLmNdPXt0OiJ6In0pOmN0PVFbcWkoUG5bMF0pXT17dDoieiJ9LGdlLmUucj1NYXRoLm1heChnZS5lLnIsUG5bMF0uciksZ2Uucy5yPU1hdGgubWluKGdlLnMucixQblswXS5yKSxnZS5lLmM9TWF0aC5tYXgoZ2UuZS5jLFBuWzBdLmMpLGdlLnMuYz1NYXRoLm1p'@;
put 'bihnZS5zLmMsUG5bMF0uYykpLGN0LmN8fChjdC5jPVtdKSxjdC5jLnB1c2goe2E6UG5bMV0sdDpaYS5UeE8udH0pO2JyZWFrO2RlZmF1bHQ6c3dpdGNoKEJpLm4pe2Nhc2UiQ2xydENsaWVudCI6Y2FzZSJIZWFkZXIiOmNhc2UiRm9vdGVyIjpjYXNlIkhDZW50ZXIiOmNhc2UiVkNlbnRlciI6'@;
put 'Y2FzZSJQbHMiOmNhc2UiR0NXIjpjYXNlIkxIUmVjb3JkIjpjYXNlIkRCQ2VsbCI6Y2FzZSJFbnRFeFUyIjpjYXNlIlN4VmlldyI6Y2FzZSJTeHZkIjpjYXNlIlNYVkkiOmNhc2UiU1hWREV4IjpjYXNlIlN4SXZkIjpjYXNlIlNYU3RyaW5nIjpjYXNlIlN5bmMiOmNhc2UiQWRkaW4iOmNhc2Ui'@;
put 'U1hESSI6Y2FzZSJTWExJIjpjYXNlIlNYRXgiOmNhc2UiUXNpU1hUYWciOmNhc2UiRmVhdCI6Y2FzZSJGZWF0SGRyIjpjYXNlIkZlYXRIZHIxMSI6Y2FzZSJGZWF0dXJlMTEiOmNhc2UiRmVhdHVyZTEyIjpjYXNlIkxpc3QxMiI6Y2FzZSJSZWNhbGNJZCI6Y2FzZSJEeEdDb2wiOmNhc2UiRmJp'@;
put 'IjpjYXNlIkZiaTIiOmNhc2UiR2VsRnJhbWUiOmNhc2UiWEZDUkMiOmNhc2UiU3R5bGUiOmNhc2UiU3R5bGVFeHQiOmNhc2UiU2NlbmFyaW9Qcm90ZWN0IjpjYXNlIk9ialByb3RlY3QiOmNhc2UiQ29uZEZtdDEyIjpjYXNlIlRhYmxlIjpjYXNlIlRhYmxlU3R5bGVzIjpjYXNlIlRhYmxlU3R5'@;
put 'bGUiOmNhc2UiVGFibGVTdHlsZUVsZW1lbnQiOmNhc2UiU1hTdHJlYW1JRCI6Y2FzZSJTWFZTIjpjYXNlIkRDb25SZWYiOmNhc2UiU1hBZGRsIjpjYXNlIkRDb25CaW4iOmNhc2UiRENvbk5hbWUiOmNhc2UiU1hQSSI6Y2FzZSJTeEZvcm1hdCI6Y2FzZSJTeFNlbGVjdCI6Y2FzZSJTeFJ1bGUi'@;
put 'OmNhc2UiU3hGaWx0IjpjYXNlIlN4SXRtIjpjYXNlIlN4RFhGIjpjYXNlIlNjZW5NYW4iOmNhc2UiRENvbiI6Y2FzZSJDZWxsV2F0Y2giOmNhc2UiUHJpbnRSb3dDb2wiOmNhc2UiUHJpbnRHcmlkIjpjYXNlIlByaW50U2l6ZSI6Y2FzZSJYQ1QiOmNhc2UiQ1JOIjpjYXNlIlNjbCI6Y2FzZSJT'@;
put 'aGVldEV4dCI6Y2FzZSJTaGVldEV4dE9wdGlvbmFsIjpjYXNlIk9iTm9NYWNyb3MiOmNhc2UiT2JQcm9qIjpjYXNlIkdVSURUeXBlTGliIjpjYXNlIldPcHQiOmNhc2UiUGhvbmV0aWNJbmZvIjpjYXNlIk9sZU9iamVjdFNpemUiOmNhc2UiRFhGIjpjYXNlIkRYRk4iOmNhc2UiRFhGTjEyIjpj'@;
put 'YXNlIkRYRk4xMkxpc3QiOmNhc2UiRFhGTjEyTm9DQiI6Y2FzZSJEdiI6Y2FzZSJEVmFsIjpjYXNlIkJSQUkiOmNhc2UiU2VyaWVzIjpjYXNlIlNlcmllc1RleHQiOmNhc2UiRENvbm4iOmNhc2UiRGJPclBhcmFtUXJ5IjpjYXNlIkRCUXVlcnlFeHQiOmNhc2UiT2xlRGJDb25uIjpjYXNlIkV4'@;
put 'dFN0cmluZyI6Y2FzZSJJRm10UmVjb3JkIjpjYXNlIkNvbmRGbXQiOmNhc2UiQ0YiOmNhc2UiQ0YxMiI6Y2FzZSJDRkV4IjpjYXNlIkV4Y2VsOUZpbGUiOmNhc2UiVW5pdHMiOmNhc2UiSW50ZXJmYWNlSGRyIjpjYXNlIk1tcyI6Y2FzZSJJbnRlcmZhY2VFbmQiOmNhc2UiRFNGIjpjYXNlIkJ1'@;
put 'aWx0SW5Gbkdyb3VwQ291bnQiOmNhc2UiV2luZG93MSI6Y2FzZSJIaWRlT2JqIjpjYXNlIkdyaWRTZXQiOmNhc2UiR3V0cyI6Y2FzZSJVc2VyQlZpZXciOmNhc2UiVXNlclNWaWV3QmVnaW4iOmNhc2UiVXNlclNWaWV3RW5kIjpjYXNlIkRlZkNvbFdpZHRoIjpjYXNlIkRlZmF1bHRSb3dIZWln'@;
put 'aHQiOmJyZWFrO2Nhc2UiWEZFeHQiOlBrKFRuW1BuLml4ZmVdLFBuLmV4dCk7YnJlYWs7Y2FzZSJDb2xJbmZvIjppZighZXIuY2VsbFN0eWxlcylicmVhaztmb3IoO1BuLmU+PVBuLnM7KUxpW1BuLmUtLV09e3dpZHRoOlBuLncvMjU2LGxldmVsOlBuLmxldmVsfHwwLGhpZGRlbjohISgxJlBu'@;
put 'LmZsYWdzKX0sX3J8fChfcj0hMCksUTAoTGlbUG4uZSsxXSk7YnJlYWs7Y2FzZSJSb3ciOnZhciBIaT17fTtudWxsIT1Qbi5sZXZlbCYmKGtyW1BuLnJdPUhpLEhpLmxldmVsPVBuLmxldmVsKSxQbi5oaWRkZW4mJihrcltQbi5yXT1IaSxIaS5oaWRkZW49ITApLFBuLmhwdCYmKGtyW1BuLnJd'@;
put 'PUhpLEhpLmhwdD1Qbi5ocHQsSGkuaHB4PXNoKFBuLmhwdCkpLFBuLml4ZmUmJihrcltQbi5yXT1IaSxmcihPdD17aXhmZTpQbi5peGZlLFhGOlRuW1BuLml4ZmVdfHx7fSx2OjAsdDoibiJ9LFIpLEhpLnM9T3Qucyk7YnJlYWs7Y2FzZSJMZWZ0TWFyZ2luIjpjYXNlIlJpZ2h0TWFyZ2luIjpj'@;
put 'YXNlIlRvcE1hcmdpbiI6Y2FzZSJCb3R0b21NYXJnaW4iOlFbIiFtYXJnaW5zIl18fFgzKFFbIiFtYXJnaW5zIl09e30pLFFbIiFtYXJnaW5zIl1bV28uc2xpY2UoMCwtNikudG9Mb3dlckNhc2UoKV09UG47YnJlYWs7Y2FzZSJTZWxlY3Rpb24iOlFbIiFzZWwiXT1QbjticmVhaztjYXNlIlNl'@;
put 'dHVwIjpRWyIhbWFyZ2lucyJdfHxYMyhRWyIhbWFyZ2lucyJdPXt9KSxRWyIhbWFyZ2lucyJdLmhlYWRlcj1Qbi5oZWFkZXIsUVsiIW1hcmdpbnMiXS5mb290ZXI9UG4uZm9vdGVyO2JyZWFrO2Nhc2UiV2luZG93MiI6UG4uUlRMJiYoU24uVmlld3NbMF0uUlRMPSEwKSxNaT1QbjticmVhaztj'@;
put 'YXNlIkNvdW50cnkiOkt0PVBuO2JyZWFrO2Nhc2UiRm9udCI6UG4uaWN2JiZCbihQbi5pY3YpJiYoUG4uY29sb3I9e3JnYjpoZChCbihQbi5pY3YpKX0pLGRlbGV0ZSBQbi5pY3YsMD09WG4uRm9udHMubGVuZ3RoJiZJNChQbiksWG4uRm9udHMucHVzaChQbik7YnJlYWs7Y2FzZSJQYWxldHRl'@;
put 'Ijpycj1QbjticmVhaztjYXNlIlRoZW1lIjpGaT1QbjticmVhaztjYXNlIkNvZGVOYW1lIjpQZT9sci5Db2RlTmFtZT1Qbnx8bHIubmFtZTpTbi5XQlByb3BzLkNvZGVOYW1lPVBufHwiVGhpc1dvcmtib29rIjticmVhaztjYXNlIlBhbmUiOihNaXx8e30pLmZyb3plbiYmKFFbIiFmcmVlemUi'@;
put 'XT1xaSh7cjpQbi55fHwwLGM6UG4ueHx8MH0pKTticmVhaztkZWZhdWx0OnN3aXRjaChCaS5uKXtjYXNlIkRhdCI6Y2FzZSJCZWdpbiI6Y2FzZSJFbmQiOmNhc2UiU3RhcnRCbG9jayI6Y2FzZSJFbmRCbG9jayI6Y2FzZSJGcmFtZSI6Y2FzZSJBcmVhIjpjYXNlIkF4aXMiOmNhc2UiQXhpc0xp'@;
put 'bmUiOmNhc2UiVGljayI6Y2FzZSJBeGVzVXNlZCI6Y2FzZSJDcnRMYXlvdXQxMiI6Y2FzZSJDcnRMYXlvdXQxMkEiOmNhc2UiQ3J0TGluayI6Y2FzZSJDcnRMaW5lIjpjYXNlIkNydE1sRnJ0IjpjYXNlIkNydE1sRnJ0Q29udGludWUiOmNhc2UiTGluZUZvcm1hdCI6Y2FzZSJBcmVhRm9ybWF0'@;
put 'IjpjYXNlIkNoYXJ0IjpjYXNlIkNoYXJ0M2QiOmNhc2UiQ2hhcnQzREJhclNoYXBlIjpjYXNlIkNoYXJ0Rm9ybWF0IjpjYXNlIkNoYXJ0RnJ0SW5mbyI6Y2FzZSJQbG90QXJlYSI6Y2FzZSJQbG90R3Jvd3RoIjpjYXNlIlNlcmllc0xpc3QiOmNhc2UiU2VyUGFyZW50IjpjYXNlIlNlckF1eFRy'@;
put 'ZW5kIjpjYXNlIkRhdGFGb3JtYXQiOmNhc2UiU2VyVG9DcnQiOmNhc2UiRm9udFgiOmNhc2UiQ2F0U2VyUmFuZ2UiOmNhc2UiQXhjRXh0IjpjYXNlIlNlckZtdCI6Y2FzZSJTaHRQcm9wcyI6Y2FzZSJEZWZhdWx0VGV4dCI6Y2FzZSJUZXh0IjpjYXNlIkNhdExhYiI6Y2FzZSJEYXRhTGFiRXh0'@;
put 'Q29udGVudHMiOmNhc2UiTGVnZW5kIjpjYXNlIkxlZ2VuZEV4Y2VwdGlvbiI6Y2FzZSJQaWUiOmNhc2UiU2NhdHRlciI6Y2FzZSJQaWVGb3JtYXQiOmNhc2UiTWFya2VyRm9ybWF0IjpjYXNlIlN0YXJ0T2JqZWN0IjpjYXNlIkVuZE9iamVjdCI6Y2FzZSJBbFJ1bnMiOmNhc2UiT2JqZWN0TGlu'@;
put 'ayI6Y2FzZSJTSUluZGV4IjpjYXNlIkF0dGFjaGVkTGFiZWwiOmNhc2UiWU11bHQiOmNhc2UiTGluZSI6Y2FzZSJCYXIiOmNhc2UiU3VyZiI6Y2FzZSJBeGlzUGFyZW50IjpjYXNlIlBvcyI6Y2FzZSJWYWx1ZVJhbmdlIjpjYXNlIlNYVmlld0V4OSI6Y2FzZSJTWFZpZXdMaW5rIjpjYXNlIlBp'@;
put 'dm90Q2hhcnRCaXRzIjpjYXNlIlNCYXNlUmVmIjpjYXNlIlRleHRQcm9wc1N0cmVhbSI6Y2FzZSJMbkV4dCI6Y2FzZSJNa3JFeHQiOmNhc2UiQ3J0Q29vcHQiOmNhc2UiUXNpIjpjYXNlIlFzaWYiOmNhc2UiUXNpciI6Y2FzZSJRc2lTWFRhZyI6Y2FzZSJUeHRRcnkiOmNhc2UiRmlsdGVyTW9k'@;
put 'ZSI6Y2FzZSJBdXRvRmlsdGVyIjpjYXNlIkF1dG9GaWx0ZXJJbmZvIjpjYXNlIkF1dG9GaWx0ZXIxMiI6Y2FzZSJEcm9wRG93bk9iaklkcyI6Y2FzZSJTb3J0IjpjYXNlIlNvcnREYXRhIjpjYXNlIlNoYXBlUHJvcHNTdHJlYW0iOmNhc2UiTXNvRHJhd2luZyI6Y2FzZSJNc29EcmF3aW5nR3Jv'@;
put 'dXAiOmNhc2UiTXNvRHJhd2luZ1NlbGVjdGlvbiI6Y2FzZSJXZWJQdWIiOmNhc2UiQXV0b1dlYlB1YiI6Y2FzZSJIZWFkZXJGb290ZXIiOmNhc2UiSEZQaWN0dXJlIjpjYXNlIlBMViI6Y2FzZSJIb3Jpem9udGFsUGFnZUJyZWFrcyI6Y2FzZSJWZXJ0aWNhbFBhZ2VCcmVha3MiOmNhc2UiQmFj'@;
put 'a3VwIjpjYXNlIkNvbXByZXNzUGljdHVyZXMiOmNhc2UiQ29tcGF0MTIiOmNhc2UiQ29udGludWUiOmNhc2UiQ29udGludWVGcnQxMiI6Y2FzZSJGcnRGb250TGlzdCI6Y2FzZSJGcnRXcmFwcGVyIjpicmVhaztkZWZhdWx0OnN3aXRjaChCaS5uKXtjYXNlIlRhYklkQ29uZiI6Y2FzZSJSYWRh'@;
put 'ciI6Y2FzZSJSYWRhckFyZWEiOmNhc2UiRHJvcEJhciI6Y2FzZSJJbnRsIjpjYXNlIkNvb3JkTGlzdCI6Y2FzZSJTZXJBdXhFcnJCYXIiOmNhc2UiQklGRjJGT05UQ0xSIjpjYXNlIkJJRkYyRk1UQ05UIjpjYXNlIkJJRkYyRk9OVFhUUkEiOmNhc2UiQklGRjJYRiI6Y2FzZSJCSUZGM1hGIjpj'@;
put 'YXNlIkJJRkY0WEYiOmNhc2UiQklGRjJYRklOREVYIjpjYXNlIkJJRkY0Rk1UQ05UIjpjYXNlIkJJRkYyUk9XIjpjYXNlIkJJRkYyV0lORE9XMiI6Y2FzZSJTQ0VOQVJJTyI6Y2FzZSJEQ29uQmluIjpjYXNlIlBpY0YiOmNhc2UiRGF0YUxhYkV4dCI6Y2FzZSJMZWwiOmNhc2UiQm9wUG9wIjpj'@;
put 'YXNlIkJvcFBvcEN1c3RvbSI6Y2FzZSJSZWFsVGltZURhdGEiOmNhc2UiTmFtZSI6Y2FzZSJMSE5HcmFwaCI6Y2FzZSJGbkdyb3VwTmFtZSI6Y2FzZSJBZGRNZW51IjpjYXNlIkxQciI6Y2FzZSJMaXN0T2JqIjpjYXNlIkxpc3RGaWVsZCI6Y2FzZSJSUlNvcnQiOmNhc2UiQmlnTmFtZSI6Y2Fz'@;
put 'ZSJUb29sYmFySGRyIjpjYXNlIlRvb2xiYXJFbmQiOmNhc2UiRERFT2JqTmFtZSI6Y2FzZSJGUlRBcmNoSWQkIjpicmVhaztkZWZhdWx0OmlmKFIuV1RGKXRocm93IlVucmVjb2duaXplZCBSZWNvcmQgIitCaS5ufX19fX1lbHNlIFMubCs9SmEsZXImJmVyLmVuYyYmZXIuZW5jLmluc2l0dSYm'@;
put 'ZXIuZW5jLmluc2l0dShTZSh7bGVuZ3RoOkphfSkpfXJldHVybiBrLlNoZWV0TmFtZXM9T2Uob2UpLnNvcnQoZnVuY3Rpb24obWEsRGkpe3JldHVybiBOdW1iZXIobWEpLU51bWJlcihEaSl9KS5tYXAoZnVuY3Rpb24obWEpe3JldHVybiBvZVttYV0ubmFtZX0pLFIuYm9va1NoZWV0c3x8KGsu'@;
put 'U2hlZXRzPUcpLCFrLlNoZWV0TmFtZXMubGVuZ3RoJiZOZVsiIXJlZiJdPyhrLlNoZWV0TmFtZXMucHVzaCgiU2hlZXQxIiksay5TaGVldHMmJihrLlNoZWV0cy5TaGVldDE9TmUpKTprLlByZWFtYmxlPU5lLGsuU2hlZXRzJiZzby5mb3JFYWNoKGZ1bmN0aW9uKG1hLERpKXtrLlNoZWV0c1tr'@;
put 'LlNoZWV0TmFtZXNbRGldXVsiIWF1dG9maWx0ZXIiXT1tYX0pLGsuU3RyaW5ncz15ZSxrLlNTRj1BLmdldF90YWJsZSgpLGVyLmVuYyYmKGsuRW5jcnlwdGlvbj1lci5lbmMpLEZpJiYoay5UaGVtZXM9RmkpLGsuTWV0YWRhdGE9e30sdm9pZCAwIT09S3QmJihrLk1ldGFkYXRhLkNvdW50cnk9'@;
put 'S3QpLEZuLm5hbWVzLmxlbmd0aD4wJiYoU24uTmFtZXM9Rm4ubmFtZXMpLGsuV29ya2Jvb2s9U24sa30oRy5jb250ZW50LFIpO2Vsc2UgaWYoKG9lPXZlLmZpbmQoUywiUGVyZmVjdE9mZmljZV9NQUlOIikpJiZvZS5jb250ZW50KVE9SXYudG9fd29ya2Jvb2sob2UuY29udGVudCwoUi50eXBl'@;
put 'PWdlLFIpKTtlbHNle2lmKCEob2U9dmUuZmluZChTLCJOYXRpdmVDb250ZW50X01BSU4iKSl8fCFvZS5jb250ZW50KXRocm93IG5ldyBFcnJvcigiQ2Fubm90IGZpbmQgV29ya2Jvb2sgc3RyZWFtIik7UT1Jdi50b193b3JrYm9vayhvZS5jb250ZW50LChSLnR5cGU9Z2UsUikpfVIuYm9va1ZC'@;
put 'QSYmUy5GdWxsUGF0aHMmJnZlLmZpbmQoUywiL19WQkFfUFJPSkVDVF9DVVIvVkJBL2RpciIpJiYoUS52YmFyYXc9ZnVuY3Rpb24gWmsoUyl7dmFyIFI9dmUudXRpbHMuY2ZiX25ldyh7cm9vdDoiUiJ9KTtyZXR1cm4gUy5GdWxsUGF0aHMuZm9yRWFjaChmdW5jdGlvbihrLEcpe2lmKCIvIiE9'@;
put 'PWsuc2xpY2UoLTEpJiZrLm1hdGNoKC9fVkJBX1BST0pFQ1RfQ1VSLykpe3ZhciBRPWsucmVwbGFjZSgvXlteXC9dKi8sIlIiKS5yZXBsYWNlKC9cL19WQkFfUFJPSkVDVF9DVVJcdTAwMDAqLywiIik7dmUudXRpbHMuY2ZiX2FkZChSLFEsUy5GaWxlSW5kZXhbR10uY29udGVudCl9fSksdmUu'@;
put 'd3JpdGUoUil9KFMpKX12YXIgcGU9e307cmV0dXJuIFMuRnVsbFBhdGhzJiZmdW5jdGlvbiBCbmUoUyxSLGspe3ZhciBHPXZlLmZpbmQoUywiIURvY3VtZW50U3VtbWFyeUluZm9ybWF0aW9uIik7aWYoRyYmRy5zaXplPjApdHJ5e3ZhciBRPWo2KEcsbTQsVGIuRFNJKTtmb3IodmFyIG9lIGlu'@;
put 'IFEpUltvZV09UVtvZV19Y2F0Y2goUGUpe2lmKGsuV1RGKXRocm93IFBlfXZhciBnZT12ZS5maW5kKFMsIiFTdW1tYXJ5SW5mb3JtYXRpb24iKTtpZihnZSYmZ2Uuc2l6ZT4wKXRyeXt2YXIgcGU9ajYoZ2UsZDUsVGIuU0kpO2Zvcih2YXIgeWUgaW4gcGUpbnVsbD09Ult5ZV0mJihSW3llXT1w'@;
put 'ZVt5ZV0pfWNhdGNoKFBlKXtpZihrLldURil0aHJvdyBQZX1SLkhlYWRpbmdQYWlycyYmUi5UaXRsZXNPZlBhcnRzJiYoXzQoUi5IZWFkaW5nUGFpcnMsUi5UaXRsZXNPZlBhcnRzLFIsayksZGVsZXRlIFIuSGVhZGluZ1BhaXJzLGRlbGV0ZSBSLlRpdGxlc09mUGFydHMpfShTLHBlLFIpLFEu'@;
put 'UHJvcHM9US5DdXN0cHJvcHM9cGUsUi5ib29rRmlsZXMmJihRLmNmYj1TKSxRfXZhciBMOD17MDp7bjoiQnJ0Um93SGRyIixmOmZ1bmN0aW9uIEJEKFMsUil7dmFyIGs9e30sRz1TLmwrUjtrLnI9Uy5yZWFkX3NoaWZ0KDQpLFMubCs9NDt2YXIgUT1TLnJlYWRfc2hpZnQoMik7Uy5sKz0xO3Zh'@;
put 'ciBvZT1TLnJlYWRfc2hpZnQoMSk7cmV0dXJuIFMubD1HLDcmb2UmJihrLmxldmVsPTcmb2UpLDE2Jm9lJiYoay5oaWRkZW49ITApLDMyJm9lJiYoay5ocHQ9US8yMCksa319LDE6e246IkJydENlbGxCbGFuayIsZjpmdW5jdGlvbiBEbmUoUyl7cmV0dXJuW0QxKFMpXX19LDI6e246IkJydENl'@;
put 'bGxSayIsZjpmdW5jdGlvbiBIaihTKXtyZXR1cm5bRDEoUyksSTEoUyksIm4iXX19LDM6e246IkJydENlbGxFcnJvciIsZjpmdW5jdGlvbiBaRChTKXtyZXR1cm5bRDEoUyksUy5yZWFkX3NoaWZ0KDEpLCJlIl19fSw0OntuOiJCcnRDZWxsQm9vbCIsZjpmdW5jdGlvbiBEaihTKXtyZXR1cm5b'@;
put 'RDEoUyksUy5yZWFkX3NoaWZ0KDEpLCJiIl19fSw1OntuOiJCcnRDZWxsUmVhbCIsZjpmdW5jdGlvbiBFUyhTKXtyZXR1cm5bRDEoUyksUGwoUyksIm4iXX19LDY6e246IkJydENlbGxTdCIsZjpmdW5jdGlvbiBMbmUoUyl7cmV0dXJuW0QxKFMpLGd1KFMpLCJzdHIiXX19LDc6e246IkJydENl'@;
put 'bGxJc3N0IixmOmZ1bmN0aW9uIFJqKFMpe3JldHVybltEMShTKSxTLnJlYWRfc2hpZnQoNCksInMiXX19LDg6e246IkJydEZtbGFTdHJpbmciLGY6ZnVuY3Rpb24gcGIoUyxSLGspe3ZhciBHPVMubCtSLFE9RDEoUyk7US5yPWtbIiFyb3ciXTt2YXIgZ2U9W1EsZ3UoUyksInN0ciJdO2lmKGsu'@;
put 'Y2VsbEZvcm11bGEpe1MubCs9Mjt2YXIgcGU9ejQoUyxHLVMubCxrKTtnZVszXT1zMChwZSxudWxsLFEsay5zdXBib29rcyxrKX1lbHNlIFMubD1HO3JldHVybiBnZX19LDk6e246IkJydEZtbGFOdW0iLGY6ZnVuY3Rpb24gQVMoUyxSLGspe3ZhciBHPVMubCtSLFE9RDEoUyk7US5yPWtbIiFy'@;
put 'b3ciXTt2YXIgZ2U9W1EsUGwoUyksIm4iXTtpZihrLmNlbGxGb3JtdWxhKXtTLmwrPTI7dmFyIHBlPXo0KFMsRy1TLmwsayk7Z2VbM109czAocGUsbnVsbCxRLGsuc3VwYm9va3Msayl9ZWxzZSBTLmw9RztyZXR1cm4gZ2V9fSwxMDp7bjoiQnJ0Rm1sYUJvb2wiLGY6ZnVuY3Rpb24gVFMoUyxS'@;
put 'LGspe3ZhciBHPVMubCtSLFE9RDEoUyk7US5yPWtbIiFyb3ciXTt2YXIgZ2U9W1EsUy5yZWFkX3NoaWZ0KDEpLCJiIl07aWYoay5jZWxsRm9ybXVsYSl7Uy5sKz0yO3ZhciBwZT16NChTLEctUy5sLGspO2dlWzNdPXMwKHBlLG51bGwsUSxrLnN1cGJvb2tzLGspfWVsc2UgUy5sPUc7cmV0dXJu'@;
put 'IGdlfX0sMTE6e246IkJydEZtbGFFcnJvciIsZjpmdW5jdGlvbiB3OChTLFIsayl7dmFyIEc9Uy5sK1IsUT1EMShTKTtRLnI9a1siIXJvdyJdO3ZhciBnZT1bUSxTLnJlYWRfc2hpZnQoMSksImUiXTtpZihrLmNlbGxGb3JtdWxhKXtTLmwrPTI7dmFyIHBlPXo0KFMsRy1TLmwsayk7Z2VbM109'@;
put 'czAocGUsbnVsbCxRLGsuc3VwYm9va3Msayl9ZWxzZSBTLmw9RztyZXR1cm4gZ2V9fSwxMjp7bjoiQnJ0U2hvcnRCbGFuayIsZjpmdW5jdGlvbiBraihTKXtyZXR1cm5bSmgoUyldfX0sMTM6e246IkJydFNob3J0UmsiLGY6ZnVuY3Rpb24gUm5lKFMpe3JldHVybltKaChTKSxJMShTKSwibiJd'@;
put 'fX0sMTQ6e246IkJydFNob3J0RXJyb3IiLGY6ZnVuY3Rpb24gXzgoUyl7cmV0dXJuW0poKFMpLFMucmVhZF9zaGlmdCgxKSwiZSJdfX0sMTU6e246IkJydFNob3J0Qm9vbCIsZjpmdW5jdGlvbiBVRChTKXtyZXR1cm5bSmgoUyksUy5yZWFkX3NoaWZ0KDEpLCJiIl19fSwxNjp7bjoiQnJ0U2hv'@;
put 'cnRSZWFsIixmOkZqfSwxNzp7bjoiQnJ0U2hvcnRTdCIsZjpmdW5jdGlvbiBqaihTKXtyZXR1cm5bSmgoUyksZ3UoUyksInN0ciJdfX0sMTg6e246IkJydFNob3J0SXNzdCIsZjpmdW5jdGlvbiBPaihTKXtyZXR1cm5bSmgoUyksUy5yZWFkX3NoaWZ0KDQpLCJzIl19fSwxOTp7bjoiQnJ0U1NU'@;
put 'SXRlbSIsZjpzbH0sMjA6e246IkJydFBDRElNaXNzaW5nIn0sMjE6e246IkJydFBDRElOdW1iZXIifSwyMjp7bjoiQnJ0UENESUJvb2xlYW4ifSwyMzp7bjoiQnJ0UENESUVycm9yIn0sMjQ6e246IkJydFBDRElTdHJpbmcifSwyNTp7bjoiQnJ0UENESURhdGV0aW1lIn0sMjY6e246IkJydFBD'@;
put 'RElJbmRleCJ9LDI3OntuOiJCcnRQQ0RJQU1pc3NpbmcifSwyODp7bjoiQnJ0UENESUFOdW1iZXIifSwyOTp7bjoiQnJ0UENESUFCb29sZWFuIn0sMzA6e246IkJydFBDRElBRXJyb3IifSwzMTp7bjoiQnJ0UENESUFTdHJpbmcifSwzMjp7bjoiQnJ0UENESUFEYXRldGltZSJ9LDMzOntuOiJC'@;
put 'cnRQQ1JSZWNvcmQifSwzNDp7bjoiQnJ0UENSUmVjb3JkRHQifSwzNTp7bjoiQnJ0RlJUQmVnaW4ifSwzNjp7bjoiQnJ0RlJURW5kIn0sMzc6e246IkJydEFDQmVnaW4ifSwzODp7bjoiQnJ0QUNFbmQifSwzOTp7bjoiQnJ0TmFtZSIsZjpmdW5jdGlvbiBBOChTLFIsayl7dmFyIEc9Uy5sK1I7'@;
put 'Uy5sKz00LFMubCs9MTt2YXIgUT1TLnJlYWRfc2hpZnQoNCksb2U9bDUoUyksZ2U9ZkQoUywwLGspLHBlPXQwKFMpO1MubD1HO3ZhciB5ZT17TmFtZTpvZSxQdGc6Z2V9O3JldHVybiBRPDI2ODQzNTQ1NSYmKHllLlNoZWV0PVEpLHBlJiYoeWUuQ29tbWVudD1wZSkseWV9fSw0MDp7bjoiQnJ0'@;
put 'SW5kZXhSb3dCbG9jayJ9LDQyOntuOiJCcnRJbmRleEJsb2NrIn0sNDM6e246IkJydEZvbnQiLGY6ZnVuY3Rpb24gelYoUyxSLGspe3ZhciBHPXt9O0cuc3o9Uy5yZWFkX3NoaWZ0KDIpLzIwO3ZhciBRPU93KFMpO3N3aXRjaChRLmZCb2xkJiYoRy5ib2xkPTEpLFEuZkl0YWxpYyYmKEcuaXRh'@;
put 'bGljPTEpLFEuZlVuZGVybGluZSYmKEcudW5kZXJsaW5lPTEpLFEuZkNvbmRlbnNlJiYoRy5jb25kZW5zZT0xKSxRLmZFeHRlbmQmJihHLmV4dGVuZD0xKSxRLmZTaGFkb3cmJihHLnNoYWRvdz0xKSxRLmZPdXRsaW5lJiYoRy5vdXRsaW5lPTEpLFEuZlN0cmlrZW91dCYmKEcuc3RyaWtlPTEp'@;
put 'LDcwMD09PVMucmVhZF9zaGlmdCgyKSYmKEcuYm9sZD0xKSxTLnJlYWRfc2hpZnQoMikpe2Nhc2UgMTpHLnZhbGlnbj0ic3VwZXIiO2JyZWFrO2Nhc2UgMjpHLnZhbGlnbj0ic3ViIn12YXIgZ2U9Uy5yZWFkX3NoaWZ0KDEpOzAhPWdlJiYoRy51bmRlcmxpbmU9Z2UpO3ZhciBwZT1TLnJlYWRf'@;
put 'c2hpZnQoMSk7cGU+MCYmKEcuZmFtaWx5PXBlKTt2YXIgeWU9Uy5yZWFkX3NoaWZ0KDEpO3N3aXRjaCh5ZT4wJiYoRy5jaGFyc2V0PXllKSxTLmwrKyxHLmNvbG9yPVFoKFMpLFMucmVhZF9zaGlmdCgxKSl7Y2FzZSAxOkcuc2NoZW1lPSJtYWpvciI7YnJlYWs7Y2FzZSAyOkcuc2NoZW1lPSJt'@;
put 'aW5vciJ9cmV0dXJuIEcubmFtZT1ndShTKSxHfX0sNDQ6e246IkJydEZtdCIsZjpmdW5jdGlvbiBXdihTLFIpe3JldHVybltTLnJlYWRfc2hpZnQoMiksZ3UoUyldfX0sNDU6e246IkJydEZpbGwiLGY6ZnVuY3Rpb24gWVYoUyxSKXt2YXIgaz1TLmwrUixHPXt9LFE9Uy5yZWFkX3NoaWZ0KDQp'@;
put 'O2lmKDQwIT1RKXtHLnBhdHRlcm5UeXBlPU1DW1FdO3ZhciBvZT1RaChTKTs2NCE9b2UuaW5kZXgmJihHLmZnQ29sb3I9b2UpO3ZhciBnZT1RaChTKTs2NSE9Z2UuaW5kZXgmJihHLmJnQ29sb3I9Z2UpfWVsc2V7Uy5sKz0xNixTLnJlYWRfc2hpZnQoNCksUGwoUyksUGwoUyksUGwoUyksUGwo'@;
put 'UyksUGwoUyk7Zm9yKHZhciBwZT1TLnJlYWRfc2hpZnQoNCkseWU9W10sUGU9MDtQZTxwZTsrK1BlKXllLnB1c2goWlYoUykpfXJldHVybiBTLmw9ayxHfX0sNDY6e246IkJydEJvcmRlciIsZjpmdW5jdGlvbiBHVihTKXt2YXIgUj17fTtTLnJlYWRfc2hpZnQoMSk7dmFyIGs9STUoUyk7Im5v'@;
put 'bmUiIT1rLnN0eWxlJiYoUi50b3A9ayk7dmFyIEc9STUoUyk7Im5vbmUiIT1HLnN0eWxlJiYoUi5ib3R0b209Ryk7dmFyIFE9STUoUyk7Im5vbmUiIT1RLnN0eWxlJiYoUi5sZWZ0PVEpO3ZhciBvZT1JNShTKTsibm9uZSIhPW9lLnN0eWxlJiYoUi5yaWdodD1vZSk7dmFyIGdlPUk1KFMpO3Jl'@;
put 'dHVybiJub25lIiE9Z2Uuc3R5bGUmJihSLmRpYWc9Z2UpLFJ9fSw0Nzp7bjoiQnJ0WEYiLGY6ZnVuY3Rpb24geEMoUyxSKXt2YXIgaz1TLmwrUixHPXt9LFE9Uy5yZWFkX3NoaWZ0KDIpLG9lPVMucmVhZF9zaGlmdCgyKSxnZT1TLnJlYWRfc2hpZnQoMikscGU9Uy5yZWFkX3NoaWZ0KDIpLHll'@;
put 'PVMucmVhZF9zaGlmdCgyKSxQZT1TLnJlYWRfc2hpZnQoMSk7Uy5yZWFkX3NoaWZ0KDEpO3ZhciBOZT1TLnJlYWRfc2hpZnQoMiksWWU9Uy5yZWFkX3NoaWZ0KDEpO1MubD1rLEcueGZJZD1RLEcubnVtRm10SWQ9b2UsRy5mb250SWQ9Z2UsRy5maWxsSWQ9cGUsRy5ib3JkZXJJZD15ZSwxJlll'@;
put 'JiYwIT1HLm51bUZtdElkJiYoRy5hcHBseU51bWJlckZvcm1hdD0hMCksRy5hbGlnbm1lbnQ9e30sUGU+MCYmKEcuYWxpZ25tZW50LnRleHRSb3RhdGlvbj1QZSk7dmFyIGV0PSExO3JldHVybiA3Jk5lJiYoZXQ9ITAsRy5hbGlnbm1lbnQuaG9yaXpvbnRhbD1ENVs3Jk5lXSksRy5hbGlnbm1l'@;
put 'bnQudmVydGljYWw9dDhbTmU+Pj4zJjddLEcuYWxpZ25tZW50LnZlcnRpY2FsJiYoZXQ9ITApLE5lPj4+NiYxJiYoRy5hbGlnbm1lbnQud3JhcFRleHQ9ITApLE5lPj4+OCYxJiYoRy5hbGlnbm1lbnQuc2hyaW5rVG9GaXQ9ITApLGV0fHxkZWxldGUgRy5hbGlnbm1lbnQsNCZZZSYmZXQmJihH'@;
put 'LmFwcGx5QWxpZ25tZW50PSEwKSxHfX0sNDg6e246IkJydFN0eWxlIn0sNDk6e246IkJydENlbGxNZXRhIn0sNTA6e246IkJydFZhbHVlTWV0YSJ9LDUxOntuOiJCcnRNZGIifSw1Mjp7bjoiQnJ0QmVnaW5GbWQifSw1Mzp7bjoiQnJ0RW5kRm1kIn0sNTQ6e246IkJydEJlZ2luTWR4In0sNTU6'@;
put 'e246IkJydEVuZE1keCJ9LDU2OntuOiJCcnRCZWdpbk1keFR1cGxlIn0sNTc6e246IkJydEVuZE1keFR1cGxlIn0sNTg6e246IkJydE1keE1icklzdHIifSw1OTp7bjoiQnJ0U3RyIn0sNjA6e246IkJydENvbEluZm8iLGY6ckN9LDYyOntuOiJCcnRDZWxsUlN0cmluZyJ9LDYzOntuOiJCcnRD'@;
put 'YWxjQ2hhaW5JdGVtJCIsZjpmdW5jdGlvbiByOChTKXt2YXIgUj17fTtSLmk9Uy5yZWFkX3NoaWZ0KDQpO3ZhciBrPXt9O2sucj1TLnJlYWRfc2hpZnQoNCksay5jPVMucmVhZF9zaGlmdCg0KSxSLnI9cWkoayk7dmFyIEc9Uy5yZWFkX3NoaWZ0KDEpO3JldHVybiAyJkcmJihSLmw9IjEiKSw4'@;
put 'JkcmJihSLmE9IjEiKSxSfX0sNjQ6e246IkJydERWYWwiLGY6ZnVuY3Rpb24gWGooUyxSLGspe3ZhciBHPVMubCtSLFE9Uy5yZWFkX3NoaWZ0KDQpLG9lPW4wKFMpLGdlPXQwKFMpLHBlPXQwKFMpLHllPXQwKFMpLFBlPXQwKFMpLE5lPWhEKFMsUixrKSxZZT1TLmw8Rz9oRChTLFIsayk6bnVs'@;
put 'bCxldD0xNSZRLGN0PXt0OnFEW2V0XSxzcXJmeDpvZSxzOltnZSxwZSx5ZSxQZV19O3JldHVybiBOZSYmKGN0LmYxPU5lKSxZZSYmKGN0LmYyPVllKSwwPT1ldHx8Mz09ZXR8fDc9PWV0fHwoY3Qub3A9RFNbUT4+MjAmMTVdKSxjdH19LDY1OntuOiJCcnRTeHZjZWxsTnVtIn0sNjY6e246IkJy'@;
put 'dFN4dmNlbGxTdHIifSw2Nzp7bjoiQnJ0U3h2Y2VsbEJvb2wifSw2ODp7bjoiQnJ0U3h2Y2VsbEVyciJ9LDY5OntuOiJCcnRTeHZjZWxsRGF0ZSJ9LDcwOntuOiJCcnRTeHZjZWxsTmlsIn0sMTI4OntuOiJCcnRGaWxlVmVyc2lvbiJ9LDEyOTp7bjoiQnJ0QmVnaW5TaGVldCJ9LDEzMDp7bjoi'@;
put 'QnJ0RW5kU2hlZXQifSwxMzE6e246IkJydEJlZ2luQm9vayIsZjpJbixwOjB9LDEzMjp7bjoiQnJ0RW5kQm9vayJ9LDEzMzp7bjoiQnJ0QmVnaW5Xc1ZpZXdzIn0sMTM0OntuOiJCcnRFbmRXc1ZpZXdzIn0sMTM1OntuOiJCcnRCZWdpbkJvb2tWaWV3cyJ9LDEzNjp7bjoiQnJ0RW5kQm9va1Zp'@;
put 'ZXdzIn0sMTM3OntuOiJCcnRCZWdpbldzVmlldyIsZjpmdW5jdGlvbiBrUyhTKXt2YXIgUj1TLnJlYWRfc2hpZnQoMik7cmV0dXJuIFMubCs9Mjgse1JUTDozMiZSLGdyaWQ6ISEoNCZSKX19fSwxMzg6e246IkJydEVuZFdzVmlldyJ9LDEzOTp7bjoiQnJ0QmVnaW5Dc1ZpZXdzIn0sMTQwOntu'@;
put 'OiJCcnRFbmRDc1ZpZXdzIn0sMTQxOntuOiJCcnRCZWdpbkNzVmlldyJ9LDE0Mjp7bjoiQnJ0RW5kQ3NWaWV3In0sMTQzOntuOiJCcnRCZWdpbkJ1bmRsZVNocyJ9LDE0NDp7bjoiQnJ0RW5kQnVuZGxlU2hzIn0sMTQ1OntuOiJCcnRCZWdpblNoZWV0RGF0YSJ9LDE0Njp7bjoiQnJ0RW5kU2hl'@;
put 'ZXREYXRhIn0sMTQ3OntuOiJCcnRXc1Byb3AiLGY6ZnVuY3Rpb24gaGIoUyxSKXt2YXIgaz17fSxHPVNbUy5sXTtyZXR1cm4rK1MubCxrLmFib3ZlPSEoNjQmRyksay5sZWZ0PSEoMTI4JkcpLFMubCs9MTgsay5uYW1lPW81KFMsUi0xOSksa319LDE0ODp7bjoiQnJ0V3NEaW0iLGY6eGoscDox'@;
put 'Nn0sMTUxOntuOiJCcnRQYW5lIixmOmZ1bmN0aW9uIEdEKFMsUil7dmFyIGs9Uy5sK1I7UGwoUyksUGwoUyk7dmFyIEc9Uy5yZWFkX3NoaWZ0KDQsImkiKSxRPVMucmVhZF9zaGlmdCg0LCJpIik7aWYoUy5yZWFkX3NoaWZ0KDQpLFMucmVhZF9zaGlmdCgxKSxrIT1TLmwpdGhyb3cgbmV3IEVy'@;
put 'cm9yKCJCYWQgQnJ0UGFuZTogIitrKyIgIT0gIitTLmwpO3JldHVybltxaSh7cjpHLGM6UX0pXX19LDE1Mjp7bjoiQnJ0U2VsIixmOmZ1bmN0aW9uICREKFMsUil7cmV0dXJuIFMucmVhZF9zaGlmdCg0KSx7Y2VsbDpxaSh7cjpTLnJlYWRfc2hpZnQoNCksYzpTLnJlYWRfc2hpZnQoNCl9KX19'@;
put 'fSwxNTM6e246IkJydFdiUHJvcCIsZjpmdW5jdGlvbiBOUyhTLFIpe3ZhciBrPXt9LEc9Uy5yZWFkX3NoaWZ0KDQpO2suZGVmYXVsdFRoZW1lVmVyc2lvbj1TLnJlYWRfc2hpZnQoNCk7dmFyIFE9Uj44P2d1KFMpOiIiO3JldHVybiBRLmxlbmd0aD4wJiYoay5Db2RlTmFtZT1RKSxrLmF1dG9D'@;
put 'b21wcmVzc1BpY3R1cmVzPSEhKDY1NTM2JkcpLGsuYmFja3VwRmlsZT0hISg2NCZHKSxrLmNoZWNrQ29tcGF0aWJpbGl0eT0hISg0MDk2JkcpLGsuZGF0ZTE5MDQ9ISEoMSZHKSxrLmZpbHRlclByaXZhY3k9ISEoOCZHKSxrLmhpZGVQaXZvdEZpZWxkTGlzdD0hISgxMDI0JkcpLGsucHJvbXB0'@;
put 'ZWRTb2x1dGlvbnM9ISEoMTYmRyksay5wdWJsaXNoSXRlbXM9ISEoMjA0OCZHKSxrLnJlZnJlc2hBbGxDb25uZWN0aW9ucz0hISgyNjIxNDQmRyksay5zYXZlRXh0ZXJuYWxMaW5rVmFsdWVzPSEhKDEyOCZHKSxrLnNob3dCb3JkZXJVbnNlbGVjdGVkVGFibGVzPSEhKDQmRyksay5zaG93SW5r'@;
put 'QW5ub3RhdGlvbj0hISgzMiZHKSxrLnNob3dPYmplY3RzPVsiYWxsIiwicGxhY2Vob2xkZXJzIiwibm9uZSJdW0c+PjEzJjNdLGsuc2hvd1Bpdm90Q2hhcnRGaWx0ZXI9ISEoMzI3NjgmRyksay51cGRhdGVMaW5rcz1bInVzZXJTZXQiLCJuZXZlciIsImFsd2F5cyJdW0c+PjgmM10sa319LDE1'@;
put 'NDp7bjoiQnJ0V2JGYWN0b2lkIn0sMTU1OntuOiJCcnRGaWxlUmVjb3ZlciJ9LDE1Njp7bjoiQnJ0QnVuZGxlU2giLGY6ZnVuY3Rpb24gZ3ooUyxSKXt2YXIgaz17fTtyZXR1cm4gay5IaWRkZW49Uy5yZWFkX3NoaWZ0KDQpLGsuaVRhYklEPVMucmVhZF9zaGlmdCg0KSxrLnN0clJlbElEPWc0'@;
put 'KFMsUi04KSxrLm5hbWU9Z3UoUyksa319LDE1Nzp7bjoiQnJ0Q2FsY1Byb3AifSwxNTg6e246IkJydEJvb2tWaWV3In0sMTU5OntuOiJCcnRCZWdpblNzdCIsZjpmdW5jdGlvbiBMdihTKXtyZXR1cm5bUy5yZWFkX3NoaWZ0KDQpLFMucmVhZF9zaGlmdCg0KV19fSwxNjA6e246IkJydEVuZFNz'@;
put 'dCJ9LDE2MTp7bjoiQnJ0QmVnaW5BRmlsdGVyIixmOm11fSwxNjI6e246IkJydEVuZEFGaWx0ZXIifSwxNjM6e246IkJydEJlZ2luRmlsdGVyQ29sdW1uIn0sMTY0OntuOiJCcnRFbmRGaWx0ZXJDb2x1bW4ifSwxNjU6e246IkJydEJlZ2luRmlsdGVycyJ9LDE2Njp7bjoiQnJ0RW5kRmlsdGVy'@;
put 'cyJ9LDE2Nzp7bjoiQnJ0RmlsdGVyIn0sMTY4OntuOiJCcnRDb2xvckZpbHRlciJ9LDE2OTp7bjoiQnJ0SWNvbkZpbHRlciJ9LDE3MDp7bjoiQnJ0VG9wMTBGaWx0ZXIifSwxNzE6e246IkJydER5bmFtaWNGaWx0ZXIifSwxNzI6e246IkJydEJlZ2luQ3VzdG9tRmlsdGVycyJ9LDE3Mzp7bjoi'@;
put 'QnJ0RW5kQ3VzdG9tRmlsdGVycyJ9LDE3NDp7bjoiQnJ0Q3VzdG9tRmlsdGVyIn0sMTc1OntuOiJCcnRBRmlsdGVyRGF0ZUdyb3VwSXRlbSJ9LDE3Njp7bjoiQnJ0TWVyZ2VDZWxsIixmOldEfSwxNzc6e246IkJydEJlZ2luTWVyZ2VDZWxscyJ9LDE3ODp7bjoiQnJ0RW5kTWVyZ2VDZWxscyJ9'@;
put 'LDE3OTp7bjoiQnJ0QmVnaW5QaXZvdENhY2hlRGVmIn0sMTgwOntuOiJCcnRFbmRQaXZvdENhY2hlRGVmIn0sMTgxOntuOiJCcnRCZWdpblBDREZpZWxkcyJ9LDE4Mjp7bjoiQnJ0RW5kUENERmllbGRzIn0sMTgzOntuOiJCcnRCZWdpblBDREZpZWxkIn0sMTg0OntuOiJCcnRFbmRQQ0RGaWVs'@;
put 'ZCJ9LDE4NTp7bjoiQnJ0QmVnaW5QQ0RTb3VyY2UifSwxODY6e246IkJydEVuZFBDRFNvdXJjZSJ9LDE4Nzp7bjoiQnJ0QmVnaW5QQ0RTUmFuZ2UifSwxODg6e246IkJydEVuZFBDRFNSYW5nZSJ9LDE4OTp7bjoiQnJ0QmVnaW5QQ0RGQXRibCJ9LDE5MDp7bjoiQnJ0RW5kUENERkF0YmwifSwx'@;
put 'OTE6e246IkJydEJlZ2luUENESVJ1biJ9LDE5Mjp7bjoiQnJ0RW5kUENESVJ1biJ9LDE5Mzp7bjoiQnJ0QmVnaW5QaXZvdENhY2hlUmVjb3JkcyJ9LDE5NDp7bjoiQnJ0RW5kUGl2b3RDYWNoZVJlY29yZHMifSwxOTU6e246IkJydEJlZ2luUENESGllcmFyY2hpZXMifSwxOTY6e246IkJydEVu'@;
put 'ZFBDREhpZXJhcmNoaWVzIn0sMTk3OntuOiJCcnRCZWdpblBDREhpZXJhcmNoeSJ9LDE5ODp7bjoiQnJ0RW5kUENESGllcmFyY2h5In0sMTk5OntuOiJCcnRCZWdpblBDREhGaWVsZHNVc2FnZSJ9LDIwMDp7bjoiQnJ0RW5kUENESEZpZWxkc1VzYWdlIn0sMjAxOntuOiJCcnRCZWdpbkV4dENv'@;
put 'bm5lY3Rpb24ifSwyMDI6e246IkJydEVuZEV4dENvbm5lY3Rpb24ifSwyMDM6e246IkJydEJlZ2luRUNEYlByb3BzIn0sMjA0OntuOiJCcnRFbmRFQ0RiUHJvcHMifSwyMDU6e246IkJydEJlZ2luRUNPbGFwUHJvcHMifSwyMDY6e246IkJydEVuZEVDT2xhcFByb3BzIn0sMjA3OntuOiJCcnRC'@;
put 'ZWdpblBDRFNDb25zb2wifSwyMDg6e246IkJydEVuZFBDRFNDb25zb2wifSwyMDk6e246IkJydEJlZ2luUENEU0NQYWdlcyJ9LDIxMDp7bjoiQnJ0RW5kUENEU0NQYWdlcyJ9LDIxMTp7bjoiQnJ0QmVnaW5QQ0RTQ1BhZ2UifSwyMTI6e246IkJydEVuZFBDRFNDUGFnZSJ9LDIxMzp7bjoiQnJ0'@;
put 'QmVnaW5QQ0RTQ1BJdGVtIn0sMjE0OntuOiJCcnRFbmRQQ0RTQ1BJdGVtIn0sMjE1OntuOiJCcnRCZWdpblBDRFNDU2V0cyJ9LDIxNjp7bjoiQnJ0RW5kUENEU0NTZXRzIn0sMjE3OntuOiJCcnRCZWdpblBDRFNDU2V0In0sMjE4OntuOiJCcnRFbmRQQ0RTQ1NldCJ9LDIxOTp7bjoiQnJ0QmVn'@;
put 'aW5QQ0RGR3JvdXAifSwyMjA6e246IkJydEVuZFBDREZHcm91cCJ9LDIyMTp7bjoiQnJ0QmVnaW5QQ0RGR0l0ZW1zIn0sMjIyOntuOiJCcnRFbmRQQ0RGR0l0ZW1zIn0sMjIzOntuOiJCcnRCZWdpblBDREZHUmFuZ2UifSwyMjQ6e246IkJydEVuZFBDREZHUmFuZ2UifSwyMjU6e246IkJydEJl'@;
put 'Z2luUENERkdEaXNjcmV0ZSJ9LDIyNjp7bjoiQnJ0RW5kUENERkdEaXNjcmV0ZSJ9LDIyNzp7bjoiQnJ0QmVnaW5QQ0RTRFR1cGxlQ2FjaGUifSwyMjg6e246IkJydEVuZFBDRFNEVHVwbGVDYWNoZSJ9LDIyOTp7bjoiQnJ0QmVnaW5QQ0RTRFRDRW50cmllcyJ9LDIzMDp7bjoiQnJ0RW5kUENE'@;
put 'U0RUQ0VudHJpZXMifSwyMzE6e246IkJydEJlZ2luUENEU0RUQ0VNZW1iZXJzIn0sMjMyOntuOiJCcnRFbmRQQ0RTRFRDRU1lbWJlcnMifSwyMzM6e246IkJydEJlZ2luUENEU0RUQ0VNZW1iZXIifSwyMzQ6e246IkJydEVuZFBDRFNEVENFTWVtYmVyIn0sMjM1OntuOiJCcnRCZWdpblBDRFNE'@;
put 'VENRdWVyaWVzIn0sMjM2OntuOiJCcnRFbmRQQ0RTRFRDUXVlcmllcyJ9LDIzNzp7bjoiQnJ0QmVnaW5QQ0RTRFRDUXVlcnkifSwyMzg6e246IkJydEVuZFBDRFNEVENRdWVyeSJ9LDIzOTp7bjoiQnJ0QmVnaW5QQ0RTRFRDU2V0cyJ9LDI0MDp7bjoiQnJ0RW5kUENEU0RUQ1NldHMifSwyNDE6'@;
put 'e246IkJydEJlZ2luUENEU0RUQ1NldCJ9LDI0Mjp7bjoiQnJ0RW5kUENEU0RUQ1NldCJ9LDI0Mzp7bjoiQnJ0QmVnaW5QQ0RDYWxjSXRlbXMifSwyNDQ6e246IkJydEVuZFBDRENhbGNJdGVtcyJ9LDI0NTp7bjoiQnJ0QmVnaW5QQ0RDYWxjSXRlbSJ9LDI0Njp7bjoiQnJ0RW5kUENEQ2FsY0l0'@;
put 'ZW0ifSwyNDc6e246IkJydEJlZ2luUFJ1bGUifSwyNDg6e246IkJydEVuZFBSdWxlIn0sMjQ5OntuOiJCcnRCZWdpblBSRmlsdGVycyJ9LDI1MDp7bjoiQnJ0RW5kUFJGaWx0ZXJzIn0sMjUxOntuOiJCcnRCZWdpblBSRmlsdGVyIn0sMjUyOntuOiJCcnRFbmRQUkZpbHRlciJ9LDI1Mzp7bjoi'@;
put 'QnJ0QmVnaW5QTmFtZXMifSwyNTQ6e246IkJydEVuZFBOYW1lcyJ9LDI1NTp7bjoiQnJ0QmVnaW5QTmFtZSJ9LDI1Njp7bjoiQnJ0RW5kUE5hbWUifSwyNTc6e246IkJydEJlZ2luUE5QYWlycyJ9LDI1ODp7bjoiQnJ0RW5kUE5QYWlycyJ9LDI1OTp7bjoiQnJ0QmVnaW5QTlBhaXIifSwyNjA6'@;
put 'e246IkJydEVuZFBOUGFpciJ9LDI2MTp7bjoiQnJ0QmVnaW5FQ1dlYlByb3BzIn0sMjYyOntuOiJCcnRFbmRFQ1dlYlByb3BzIn0sMjYzOntuOiJCcnRCZWdpbkVjV3BUYWJsZXMifSwyNjQ6e246IkJydEVuZEVDV1BUYWJsZXMifSwyNjU6e246IkJydEJlZ2luRUNQYXJhbXMifSwyNjY6e246'@;
put 'IkJydEVuZEVDUGFyYW1zIn0sMjY3OntuOiJCcnRCZWdpbkVDUGFyYW0ifSwyNjg6e246IkJydEVuZEVDUGFyYW0ifSwyNjk6e246IkJydEJlZ2luUENES1BJcyJ9LDI3MDp7bjoiQnJ0RW5kUENES1BJcyJ9LDI3MTp7bjoiQnJ0QmVnaW5QQ0RLUEkifSwyNzI6e246IkJydEVuZFBDREtQSSJ9'@;
put 'LDI3Mzp7bjoiQnJ0QmVnaW5EaW1zIn0sMjc0OntuOiJCcnRFbmREaW1zIn0sMjc1OntuOiJCcnRCZWdpbkRpbSJ9LDI3Njp7bjoiQnJ0RW5kRGltIn0sMjc3OntuOiJCcnRJbmRleFBhcnRFbmQifSwyNzg6e246IkJydEJlZ2luU3R5bGVTaGVldCJ9LDI3OTp7bjoiQnJ0RW5kU3R5bGVTaGVl'@;
put 'dCJ9LDI4MDp7bjoiQnJ0QmVnaW5TWFZpZXcifSwyODE6e246IkJydEVuZFNYVkkifSwyODI6e246IkJydEJlZ2luU1hWSSJ9LDI4Mzp7bjoiQnJ0QmVnaW5TWFZJcyJ9LDI4NDp7bjoiQnJ0RW5kU1hWSXMifSwyODU6e246IkJydEJlZ2luU1hWRCJ9LDI4Njp7bjoiQnJ0RW5kU1hWRCJ9LDI4'@;
put 'Nzp7bjoiQnJ0QmVnaW5TWFZEcyJ9LDI4ODp7bjoiQnJ0RW5kU1hWRHMifSwyODk6e246IkJydEJlZ2luU1hQSSJ9LDI5MDp7bjoiQnJ0RW5kU1hQSSJ9LDI5MTp7bjoiQnJ0QmVnaW5TWFBJcyJ9LDI5Mjp7bjoiQnJ0RW5kU1hQSXMifSwyOTM6e246IkJydEJlZ2luU1hESSJ9LDI5NDp7bjoi'@;
put 'QnJ0RW5kU1hESSJ9LDI5NTp7bjoiQnJ0QmVnaW5TWERJcyJ9LDI5Njp7bjoiQnJ0RW5kU1hESXMifSwyOTc6e246IkJydEJlZ2luU1hMSSJ9LDI5ODp7bjoiQnJ0RW5kU1hMSSJ9LDI5OTp7bjoiQnJ0QmVnaW5TWExJUndzIn0sMzAwOntuOiJCcnRFbmRTWExJUndzIn0sMzAxOntuOiJCcnRC'@;
put 'ZWdpblNYTElDb2xzIn0sMzAyOntuOiJCcnRFbmRTWExJQ29scyJ9LDMwMzp7bjoiQnJ0QmVnaW5TWEZvcm1hdCJ9LDMwNDp7bjoiQnJ0RW5kU1hGb3JtYXQifSwzMDU6e246IkJydEJlZ2luU1hGb3JtYXRzIn0sMzA2OntuOiJCcnRFbmRTeEZvcm1hdHMifSwzMDc6e246IkJydEJlZ2luU3hT'@;
put 'ZWxlY3QifSwzMDg6e246IkJydEVuZFN4U2VsZWN0In0sMzA5OntuOiJCcnRCZWdpbklTWFZEUndzIn0sMzEwOntuOiJCcnRFbmRJU1hWRFJ3cyJ9LDMxMTp7bjoiQnJ0QmVnaW5JU1hWRENvbHMifSwzMTI6e246IkJydEVuZElTWFZEQ29scyJ9LDMxMzp7bjoiQnJ0RW5kU1hMb2NhdGlvbiJ9'@;
put 'LDMxNDp7bjoiQnJ0QmVnaW5TWExvY2F0aW9uIn0sMzE1OntuOiJCcnRFbmRTWFZpZXcifSwzMTY6e246IkJydEJlZ2luU1hUSHMifSwzMTc6e246IkJydEVuZFNYVEhzIn0sMzE4OntuOiJCcnRCZWdpblNYVEgifSwzMTk6e246IkJydEVuZFNYVEgifSwzMjA6e246IkJydEJlZ2luSVNYVEhS'@;
put 'd3MifSwzMjE6e246IkJydEVuZElTWFRIUndzIn0sMzIyOntuOiJCcnRCZWdpbklTWFRIQ29scyJ9LDMyMzp7bjoiQnJ0RW5kSVNYVEhDb2xzIn0sMzI0OntuOiJCcnRCZWdpblNYVERNUFMifSwzMjU6e246IkJydEVuZFNYVERNUHMifSwzMjY6e246IkJydEJlZ2luU1hURE1QIn0sMzI3Ontu'@;
put 'OiJCcnRFbmRTWFRETVAifSwzMjg6e246IkJydEJlZ2luU1hUSEl0ZW1zIn0sMzI5OntuOiJCcnRFbmRTWFRISXRlbXMifSwzMzA6e246IkJydEJlZ2luU1hUSEl0ZW0ifSwzMzE6e246IkJydEVuZFNYVEhJdGVtIn0sMzMyOntuOiJCcnRCZWdpbk1ldGFkYXRhIn0sMzMzOntuOiJCcnRFbmRN'@;
put 'ZXRhZGF0YSJ9LDMzNDp7bjoiQnJ0QmVnaW5Fc21kdGluZm8ifSwzMzU6e246IkJydE1kdGluZm8ifSwzMzY6e246IkJydEVuZEVzbWR0aW5mbyJ9LDMzNzp7bjoiQnJ0QmVnaW5Fc21kYiJ9LDMzODp7bjoiQnJ0RW5kRXNtZGIifSwzMzk6e246IkJydEJlZ2luRXNmbWQifSwzNDA6e246IkJy'@;
put 'dEVuZEVzZm1kIn0sMzQxOntuOiJCcnRCZWdpblNpbmdsZUNlbGxzIn0sMzQyOntuOiJCcnRFbmRTaW5nbGVDZWxscyJ9LDM0Mzp7bjoiQnJ0QmVnaW5MaXN0In0sMzQ0OntuOiJCcnRFbmRMaXN0In0sMzQ1OntuOiJCcnRCZWdpbkxpc3RDb2xzIn0sMzQ2OntuOiJCcnRFbmRMaXN0Q29scyJ9'@;
put 'LDM0Nzp7bjoiQnJ0QmVnaW5MaXN0Q29sIn0sMzQ4OntuOiJCcnRFbmRMaXN0Q29sIn0sMzQ5OntuOiJCcnRCZWdpbkxpc3RYbWxDUHIifSwzNTA6e246IkJydEVuZExpc3RYbWxDUHIifSwzNTE6e246IkJydExpc3RDQ0ZtbGEifSwzNTI6e246IkJydExpc3RUckZtbGEifSwzNTM6e246IkJy'@;
put 'dEJlZ2luRXh0ZXJuYWxzIn0sMzU0OntuOiJCcnRFbmRFeHRlcm5hbHMifSwzNTU6e246IkJydFN1cEJvb2tTcmMiLGY6ZzR9LDM1Nzp7bjoiQnJ0U3VwU2VsZiJ9LDM1ODp7bjoiQnJ0U3VwU2FtZSJ9LDM1OTp7bjoiQnJ0U3VwVGFicyJ9LDM2MDp7bjoiQnJ0QmVnaW5TdXBCb29rIn0sMzYx'@;
put 'OntuOiJCcnRQbGFjZWhvbGRlck5hbWUifSwzNjI6e246IkJydEV4dGVyblNoZWV0IixmOlR2fSwzNjM6e246IkJydEV4dGVyblRhYmxlU3RhcnQifSwzNjQ6e246IkJydEV4dGVyblRhYmxlRW5kIn0sMzY2OntuOiJCcnRFeHRlcm5Sb3dIZHIifSwzNjc6e246IkJydEV4dGVybkNlbGxCbGFu'@;
put 'ayJ9LDM2ODp7bjoiQnJ0RXh0ZXJuQ2VsbFJlYWwifSwzNjk6e246IkJydEV4dGVybkNlbGxCb29sIn0sMzcwOntuOiJCcnRFeHRlcm5DZWxsRXJyb3IifSwzNzE6e246IkJydEV4dGVybkNlbGxTdHJpbmcifSwzNzI6e246IkJydEJlZ2luRXNtZHgifSwzNzM6e246IkJydEVuZEVzbWR4In0s'@;
put 'Mzc0OntuOiJCcnRCZWdpbk1keFNldCJ9LDM3NTp7bjoiQnJ0RW5kTWR4U2V0In0sMzc2OntuOiJCcnRCZWdpbk1keE1iclByb3AifSwzNzc6e246IkJydEVuZE1keE1iclByb3AifSwzNzg6e246IkJydEJlZ2luTWR4S1BJIn0sMzc5OntuOiJCcnRFbmRNZHhLUEkifSwzODA6e246IkJydEJl'@;
put 'Z2luRXNzdHIifSwzODE6e246IkJydEVuZEVzc3RyIn0sMzgyOntuOiJCcnRCZWdpblBSRkl0ZW0ifSwzODM6e246IkJydEVuZFBSRkl0ZW0ifSwzODQ6e246IkJydEJlZ2luUGl2b3RDYWNoZUlEcyJ9LDM4NTp7bjoiQnJ0RW5kUGl2b3RDYWNoZUlEcyJ9LDM4Njp7bjoiQnJ0QmVnaW5QaXZv'@;
put 'dENhY2hlSUQifSwzODc6e246IkJydEVuZFBpdm90Q2FjaGVJRCJ9LDM4ODp7bjoiQnJ0QmVnaW5JU1hWSXMifSwzODk6e246IkJydEVuZElTWFZJcyJ9LDM5MDp7bjoiQnJ0QmVnaW5Db2xJbmZvcyJ9LDM5MTp7bjoiQnJ0RW5kQ29sSW5mb3MifSwzOTI6e246IkJydEJlZ2luUndCcmsifSwz'@;
put 'OTM6e246IkJydEVuZFJ3QnJrIn0sMzk0OntuOiJCcnRCZWdpbkNvbEJyayJ9LDM5NTp7bjoiQnJ0RW5kQ29sQnJrIn0sMzk2OntuOiJCcnRCcmsifSwzOTc6e246IkJydFVzZXJCb29rVmlldyJ9LDM5ODp7bjoiQnJ0SW5mbyJ9LDM5OTp7bjoiQnJ0Q1VzciJ9LDQwMDp7bjoiQnJ0VXNyIn0s'@;
put 'NDAxOntuOiJCcnRCZWdpblVzZXJzIn0sNDAzOntuOiJCcnRFT0YifSw0MDQ6e246IkJydFVDUiJ9LDQwNTp7bjoiQnJ0UlJJbnNEZWwifSw0MDY6e246IkJydFJSRW5kSW5zRGVsIn0sNDA3OntuOiJCcnRSUk1vdmUifSw0MDg6e246IkJydFJSRW5kTW92ZSJ9LDQwOTp7bjoiQnJ0UlJDaGdD'@;
put 'ZWxsIn0sNDEwOntuOiJCcnRSUkVuZENoZ0NlbGwifSw0MTE6e246IkJydFJSSGVhZGVyIn0sNDEyOntuOiJCcnRSUlVzZXJWaWV3In0sNDEzOntuOiJCcnRSUlJlblNoZWV0In0sNDE0OntuOiJCcnRSUkluc2VydFNoIn0sNDE1OntuOiJCcnRSUkRlZk5hbWUifSw0MTY6e246IkJydFJSTm90'@;
put 'ZSJ9LDQxNzp7bjoiQnJ0UlJDb25mbGljdCJ9LDQxODp7bjoiQnJ0UlJUUVNJRiJ9LDQxOTp7bjoiQnJ0UlJGb3JtYXQifSw0MjA6e246IkJydFJSRW5kRm9ybWF0In0sNDIxOntuOiJCcnRSUkF1dG9GbXQifSw0MjI6e246IkJydEJlZ2luVXNlclNoVmlld3MifSw0MjM6e246IkJydEJlZ2lu'@;
put 'VXNlclNoVmlldyJ9LDQyNDp7bjoiQnJ0RW5kVXNlclNoVmlldyJ9LDQyNTp7bjoiQnJ0RW5kVXNlclNoVmlld3MifSw0MjY6e246IkJydEFyckZtbGEiLGY6ZnVuY3Rpb24gZ2IoUyxSLGspe3ZhciBHPVMubCtSLFE9bGQoUyksb2U9Uy5yZWFkX3NoaWZ0KDEpLGdlPVtRXTtpZihnZVsyXT1v'@;
put 'ZSxrLmNlbGxGb3JtdWxhKXt2YXIgcGU9ZVMoUyxHLVMubCxrKTtnZVsxXT1wZX1lbHNlIFMubD1HO3JldHVybiBnZX19LDQyNzp7bjoiQnJ0U2hyRm1sYSIsZjpmdW5jdGlvbiBZaihTLFIsayl7dmFyIEc9Uy5sK1Isb2U9W211KFMsMTYpXTtpZihrLmNlbGxGb3JtdWxhKXt2YXIgZ2U9SkIo'@;
put 'UyxHLVMubCxrKTtvZVsxXT1nZSxTLmw9R31lbHNlIFMubD1HO3JldHVybiBvZX19LDQyODp7bjoiQnJ0VGFibGUifSw0Mjk6e246IkJydEJlZ2luRXh0Q29ubmVjdGlvbnMifSw0MzA6e246IkJydEVuZEV4dENvbm5lY3Rpb25zIn0sNDMxOntuOiJCcnRCZWdpblBDRENhbGNNZW1zIn0sNDMy'@;
put 'OntuOiJCcnRFbmRQQ0RDYWxjTWVtcyJ9LDQzMzp7bjoiQnJ0QmVnaW5QQ0RDYWxjTWVtIn0sNDM0OntuOiJCcnRFbmRQQ0RDYWxjTWVtIn0sNDM1OntuOiJCcnRCZWdpblBDREhHTGV2ZWxzIn0sNDM2OntuOiJCcnRFbmRQQ0RIR0xldmVscyJ9LDQzNzp7bjoiQnJ0QmVnaW5QQ0RIR0xldmVs'@;
put 'In0sNDM4OntuOiJCcnRFbmRQQ0RIR0xldmVsIn0sNDM5OntuOiJCcnRCZWdpblBDREhHTEdyb3VwcyJ9LDQ0MDp7bjoiQnJ0RW5kUENESEdMR3JvdXBzIn0sNDQxOntuOiJCcnRCZWdpblBDREhHTEdyb3VwIn0sNDQyOntuOiJCcnRFbmRQQ0RIR0xHcm91cCJ9LDQ0Mzp7bjoiQnJ0QmVnaW5Q'@;
put 'Q0RIR0xHTWVtYmVycyJ9LDQ0NDp7bjoiQnJ0RW5kUENESEdMR01lbWJlcnMifSw0NDU6e246IkJydEJlZ2luUENESEdMR01lbWJlciJ9LDQ0Njp7bjoiQnJ0RW5kUENESEdMR01lbWJlciJ9LDQ0Nzp7bjoiQnJ0QmVnaW5RU0kifSw0NDg6e246IkJydEVuZFFTSSJ9LDQ0OTp7bjoiQnJ0QmVn'@;
put 'aW5RU0lSIn0sNDUwOntuOiJCcnRFbmRRU0lSIn0sNDUxOntuOiJCcnRCZWdpbkRlbGV0ZWROYW1lcyJ9LDQ1Mjp7bjoiQnJ0RW5kRGVsZXRlZE5hbWVzIn0sNDUzOntuOiJCcnRCZWdpbkRlbGV0ZWROYW1lIn0sNDU0OntuOiJCcnRFbmREZWxldGVkTmFtZSJ9LDQ1NTp7bjoiQnJ0QmVnaW5R'@;
put 'U0lGcyJ9LDQ1Njp7bjoiQnJ0RW5kUVNJRnMifSw0NTc6e246IkJydEJlZ2luUVNJRiJ9LDQ1ODp7bjoiQnJ0RW5kUVNJRiJ9LDQ1OTp7bjoiQnJ0QmVnaW5BdXRvU29ydFNjb3BlIn0sNDYwOntuOiJCcnRFbmRBdXRvU29ydFNjb3BlIn0sNDYxOntuOiJCcnRCZWdpbkNvbmRpdGlvbmFsRm9y'@;
put 'bWF0dGluZyJ9LDQ2Mjp7bjoiQnJ0RW5kQ29uZGl0aW9uYWxGb3JtYXR0aW5nIn0sNDYzOntuOiJCcnRCZWdpbkNGUnVsZSJ9LDQ2NDp7bjoiQnJ0RW5kQ0ZSdWxlIn0sNDY1OntuOiJCcnRCZWdpbkljb25TZXQifSw0NjY6e246IkJydEVuZEljb25TZXQifSw0Njc6e246IkJydEJlZ2luRGF0'@;
put 'YWJhciJ9LDQ2ODp7bjoiQnJ0RW5kRGF0YWJhciJ9LDQ2OTp7bjoiQnJ0QmVnaW5Db2xvclNjYWxlIn0sNDcwOntuOiJCcnRFbmRDb2xvclNjYWxlIn0sNDcxOntuOiJCcnRDRlZPIn0sNDcyOntuOiJCcnRFeHRlcm5WYWx1ZU1ldGEifSw0NzM6e246IkJydEJlZ2luQ29sb3JQYWxldHRlIn0s'@;
put 'NDc0OntuOiJCcnRFbmRDb2xvclBhbGV0dGUifSw0NzU6e246IkJydEluZGV4ZWRDb2xvciJ9LDQ3Njp7bjoiQnJ0TWFyZ2lucyIsZjpmdW5jdGlvbiAkaihTKXt2YXIgUj17fTtyZXR1cm4gS0QuZm9yRWFjaChmdW5jdGlvbihrKXtSW2tdPVBsKFMpfSksUn19LDQ3Nzp7bjoiQnJ0UHJpbnRP'@;
put 'cHRpb25zIn0sNDc4OntuOiJCcnRQYWdlU2V0dXAifSw0Nzk6e246IkJydEJlZ2luSGVhZGVyRm9vdGVyIn0sNDgwOntuOiJCcnRFbmRIZWFkZXJGb290ZXIifSw0ODE6e246IkJydEJlZ2luU1hDcnRGb3JtYXQifSw0ODI6e246IkJydEVuZFNYQ3J0Rm9ybWF0In0sNDgzOntuOiJCcnRCZWdp'@;
put 'blNYQ3J0Rm9ybWF0cyJ9LDQ4NDp7bjoiQnJ0RW5kU1hDcnRGb3JtYXRzIn0sNDg1OntuOiJCcnRXc0ZtdEluZm8iLGY6ZnVuY3Rpb24gakQoUyl7dmFyIFI9e30saz17fSxHPXt9LFE9Uy5yZWFkX3NoaWZ0KDQpLG9lPVMucmVhZF9zaGlmdCgyKTtHLndjaD1RPD02NTUzNj9RLzI1NjpvZTt2'@;
put 'YXIgZ2U9Uy5yZWFkX3NoaWZ0KDIpO2suaHB0PWdlLzIwO3ZhciBwZT1TLnJlYWRfc2hpZnQoMik7cmV0dXJuIDImcGUmJihrLmhpZGRlbj0hMCksNCZwZSYmKFIudG9wdGhpY2s9ITApLDgmcGUmJihSLmJvdHRoaWNrPSEwKSxSLnJvd291dGxpbmU9Uy5yZWFkX3NoaWZ0KDEpLFIuY29sb3V0'@;
put 'bGluZT1TLnJlYWRfc2hpZnQoMSksanYoayksUi5yb3c9ayxRMChHKSxSLmNvbD1HLFJ9fSw0ODY6e246IkJydEJlZ2luTWdzIn0sNDg3OntuOiJCcnRFbmRNR3MifSw0ODg6e246IkJydEJlZ2luTUdNYXBzIn0sNDg5OntuOiJCcnRFbmRNR01hcHMifSw0OTA6e246IkJydEJlZ2luTUcifSw0'@;
put 'OTE6e246IkJydEVuZE1HIn0sNDkyOntuOiJCcnRCZWdpbk1hcCJ9LDQ5Mzp7bjoiQnJ0RW5kTWFwIn0sNDk0OntuOiJCcnRITGluayIsZjpmdW5jdGlvbiBVaihTLFIpe3ZhciBrPVMubCtSLEc9bXUoUywxNiksUT10MChTKSxvZT1ndShTKSxnZT1ndShTKSxwZT1ndShTKTtTLmw9azt2YXIg'@;
put 'eWU9e3JmeDpHLHJlbElkOlEsbG9jOm9lLGRpc3BsYXk6cGV9O3JldHVybiBnZSYmKHllLlRvb2x0aXA9Z2UpLHllfX0sNDk1OntuOiJCcnRCZWdpbkRDb24ifSw0OTY6e246IkJydEVuZERDb24ifSw0OTc6e246IkJydEJlZ2luRFJlZnMifSw0OTg6e246IkJydEVuZERSZWZzIn0sNDk5Ontu'@;
put 'OiJCcnREUmVmIn0sNTAwOntuOiJCcnRCZWdpblNjZW5NYW4ifSw1MDE6e246IkJydEVuZFNjZW5NYW4ifSw1MDI6e246IkJydEJlZ2luU2N0In0sNTAzOntuOiJCcnRFbmRTY3QifSw1MDQ6e246IkJydFNsYyJ9LDUwNTp7bjoiQnJ0QmVnaW5EWEZzIn0sNTA2OntuOiJCcnRFbmREWEZzIn0s'@;
put 'NTA3OntuOiJCcnREWEYifSw1MDg6e246IkJydEJlZ2luVGFibGVTdHlsZXMifSw1MDk6e246IkJydEVuZFRhYmxlU3R5bGVzIn0sNTEwOntuOiJCcnRCZWdpblRhYmxlU3R5bGUifSw1MTE6e246IkJydEVuZFRhYmxlU3R5bGUifSw1MTI6e246IkJydFRhYmxlU3R5bGVFbGVtZW50In0sNTEz'@;
put 'OntuOiJCcnRUYWJsZVN0eWxlQ2xpZW50In0sNTE0OntuOiJCcnRCZWdpblZvbERlcHMifSw1MTU6e246IkJydEVuZFZvbERlcHMifSw1MTY6e246IkJydEJlZ2luVm9sVHlwZSJ9LDUxNzp7bjoiQnJ0RW5kVm9sVHlwZSJ9LDUxODp7bjoiQnJ0QmVnaW5Wb2xNYWluIn0sNTE5OntuOiJCcnRF'@;
put 'bmRWb2xNYWluIn0sNTIwOntuOiJCcnRCZWdpblZvbFRvcGljIn0sNTIxOntuOiJCcnRFbmRWb2xUb3BpYyJ9LDUyMjp7bjoiQnJ0Vm9sU3VidG9waWMifSw1MjM6e246IkJydFZvbFJlZiJ9LDUyNDp7bjoiQnJ0Vm9sTnVtIn0sNTI1OntuOiJCcnRWb2xFcnIifSw1MjY6e246IkJydFZvbFN0'@;
put 'ciJ9LDUyNzp7bjoiQnJ0Vm9sQm9vbCJ9LDUyODp7bjoiQnJ0QmVnaW5DYWxjQ2hhaW4kIn0sNTI5OntuOiJCcnRFbmRDYWxjQ2hhaW4kIn0sNTMwOntuOiJCcnRCZWdpblNvcnRTdGF0ZSJ9LDUzMTp7bjoiQnJ0RW5kU29ydFN0YXRlIn0sNTMyOntuOiJCcnRCZWdpblNvcnRDb25kIn0sNTMz'@;
put 'OntuOiJCcnRFbmRTb3J0Q29uZCJ9LDUzNDp7bjoiQnJ0Qm9va1Byb3RlY3Rpb24ifSw1MzU6e246IkJydFNoZWV0UHJvdGVjdGlvbiJ9LDUzNjp7bjoiQnJ0UmFuZ2VQcm90ZWN0aW9uIn0sNTM3OntuOiJCcnRQaG9uZXRpY0luZm8ifSw1Mzg6e246IkJydEJlZ2luRUNUeHRXaXoifSw1Mzk6'@;
put 'e246IkJydEVuZEVDVHh0V2l6In0sNTQwOntuOiJCcnRCZWdpbkVDVFdGbGRJbmZvTHN0In0sNTQxOntuOiJCcnRFbmRFQ1RXRmxkSW5mb0xzdCJ9LDU0Mjp7bjoiQnJ0QmVnaW5FQ1R3RmxkSW5mbyJ9LDU0ODp7bjoiQnJ0RmlsZVNoYXJpbmcifSw1NDk6e246IkJydE9sZVNpemUifSw1NTA6'@;
put 'e246IkJydERyYXdpbmciLGY6ZzR9LDU1MTp7bjoiQnJ0TGVnYWN5RHJhd2luZyJ9LDU1Mjp7bjoiQnJ0TGVnYWN5RHJhd2luZ0hGIn0sNTUzOntuOiJCcnRXZWJPcHQifSw1NTQ6e246IkJydEJlZ2luV2ViUHViSXRlbXMifSw1NTU6e246IkJydEVuZFdlYlB1Ykl0ZW1zIn0sNTU2OntuOiJC'@;
put 'cnRCZWdpbldlYlB1Ykl0ZW0ifSw1NTc6e246IkJydEVuZFdlYlB1Ykl0ZW0ifSw1NTg6e246IkJydEJlZ2luU1hDb25kRm10In0sNTU5OntuOiJCcnRFbmRTWENvbmRGbXQifSw1NjA6e246IkJydEJlZ2luU1hDb25kRm10cyJ9LDU2MTp7bjoiQnJ0RW5kU1hDb25kRm10cyJ9LDU2Mjp7bjoi'@;
put 'QnJ0QmtIaW0ifSw1NjQ6e246IkJydENvbG9yIn0sNTY1OntuOiJCcnRCZWdpbkluZGV4ZWRDb2xvcnMifSw1NjY6e246IkJydEVuZEluZGV4ZWRDb2xvcnMifSw1Njk6e246IkJydEJlZ2luTVJVQ29sb3JzIn0sNTcwOntuOiJCcnRFbmRNUlVDb2xvcnMifSw1NzI6e246IkJydE1SVUNvbG9y'@;
put 'In0sNTczOntuOiJCcnRCZWdpbkRWYWxzIn0sNTc0OntuOiJCcnRFbmREVmFscyJ9LDU3Nzp7bjoiQnJ0U3VwTmFtZVN0YXJ0In0sNTc4OntuOiJCcnRTdXBOYW1lVmFsdWVTdGFydCJ9LDU3OTp7bjoiQnJ0U3VwTmFtZVZhbHVlRW5kIn0sNTgwOntuOiJCcnRTdXBOYW1lTnVtIn0sNTgxOntu'@;
put 'OiJCcnRTdXBOYW1lRXJyIn0sNTgyOntuOiJCcnRTdXBOYW1lU3QifSw1ODM6e246IkJydFN1cE5hbWVOaWwifSw1ODQ6e246IkJydFN1cE5hbWVCb29sIn0sNTg1OntuOiJCcnRTdXBOYW1lRm1sYSJ9LDU4Njp7bjoiQnJ0U3VwTmFtZUJpdHMifSw1ODc6e246IkJydFN1cE5hbWVFbmQifSw1'@;
put 'ODg6e246IkJydEVuZFN1cEJvb2sifSw1ODk6e246IkJydENlbGxTbWFydFRhZ1Byb3BlcnR5In0sNTkwOntuOiJCcnRCZWdpbkNlbGxTbWFydFRhZyJ9LDU5MTp7bjoiQnJ0RW5kQ2VsbFNtYXJ0VGFnIn0sNTkyOntuOiJCcnRCZWdpbkNlbGxTbWFydFRhZ3MifSw1OTM6e246IkJydEVuZENl'@;
put 'bGxTbWFydFRhZ3MifSw1OTQ6e246IkJydEJlZ2luU21hcnRUYWdzIn0sNTk1OntuOiJCcnRFbmRTbWFydFRhZ3MifSw1OTY6e246IkJydFNtYXJ0VGFnVHlwZSJ9LDU5Nzp7bjoiQnJ0QmVnaW5TbWFydFRhZ1R5cGVzIn0sNTk4OntuOiJCcnRFbmRTbWFydFRhZ1R5cGVzIn0sNTk5OntuOiJC'@;
put 'cnRCZWdpblNYRmlsdGVycyJ9LDYwMDp7bjoiQnJ0RW5kU1hGaWx0ZXJzIn0sNjAxOntuOiJCcnRCZWdpblNYRklMVEVSIn0sNjAyOntuOiJCcnRFbmRTWEZpbHRlciJ9LDYwMzp7bjoiQnJ0QmVnaW5GaWxscyJ9LDYwNDp7bjoiQnJ0RW5kRmlsbHMifSw2MDU6e246IkJydEJlZ2luQ2VsbFdh'@;
put 'dGNoZXMifSw2MDY6e246IkJydEVuZENlbGxXYXRjaGVzIn0sNjA3OntuOiJCcnRDZWxsV2F0Y2gifSw2MDg6e246IkJydEJlZ2luQ1JFcnJzIn0sNjA5OntuOiJCcnRFbmRDUkVycnMifSw2MTA6e246IkJydENyYXNoUmVjRXJyIn0sNjExOntuOiJCcnRCZWdpbkZvbnRzIn0sNjEyOntuOiJC'@;
put 'cnRFbmRGb250cyJ9LDYxMzp7bjoiQnJ0QmVnaW5Cb3JkZXJzIn0sNjE0OntuOiJCcnRFbmRCb3JkZXJzIn0sNjE1OntuOiJCcnRCZWdpbkZtdHMifSw2MTY6e246IkJydEVuZEZtdHMifSw2MTc6e246IkJydEJlZ2luQ2VsbFhGcyJ9LDYxODp7bjoiQnJ0RW5kQ2VsbFhGcyJ9LDYxOTp7bjoi'@;
put 'QnJ0QmVnaW5TdHlsZXMifSw2MjA6e246IkJydEVuZFN0eWxlcyJ9LDYyNTp7bjoiQnJ0QmlnTmFtZSJ9LDYyNjp7bjoiQnJ0QmVnaW5DZWxsU3R5bGVYRnMifSw2Mjc6e246IkJydEVuZENlbGxTdHlsZVhGcyJ9LDYyODp7bjoiQnJ0QmVnaW5Db21tZW50cyJ9LDYyOTp7bjoiQnJ0RW5kQ29t'@;
put 'bWVudHMifSw2MzA6e246IkJydEJlZ2luQ29tbWVudEF1dGhvcnMifSw2MzE6e246IkJydEVuZENvbW1lbnRBdXRob3JzIn0sNjMyOntuOiJCcnRDb21tZW50QXV0aG9yIixmOndCfSw2MzM6e246IkJydEJlZ2luQ29tbWVudExpc3QifSw2MzQ6e246IkJydEVuZENvbW1lbnRMaXN0In0sNjM1'@;
put 'OntuOiJCcnRCZWdpbkNvbW1lbnQiLGY6ZnVuY3Rpb24gRjUoUyl7dmFyIFI9e307Ui5pYXV0aG9yPVMucmVhZF9zaGlmdCg0KTt2YXIgaz1tdShTLDE2KTtyZXR1cm4gUi5yZng9ay5zLFIucmVmPXFpKGsucyksUy5sKz0xNixSfX0sNjM2OntuOiJCcnRFbmRDb21tZW50In0sNjM3OntuOiJC'@;
put 'cnRDb21tZW50VGV4dCIsZjpMd30sNjM4OntuOiJCcnRCZWdpbk9sZU9iamVjdHMifSw2Mzk6e246IkJydE9sZU9iamVjdCJ9LDY0MDp7bjoiQnJ0RW5kT2xlT2JqZWN0cyJ9LDY0MTp7bjoiQnJ0QmVnaW5TeHJ1bGVzIn0sNjQyOntuOiJCcnRFbmRTeFJ1bGVzIn0sNjQzOntuOiJCcnRCZWdp'@;
put 'bkFjdGl2ZVhDb250cm9scyJ9LDY0NDp7bjoiQnJ0QWN0aXZlWCJ9LDY0NTp7bjoiQnJ0RW5kQWN0aXZlWENvbnRyb2xzIn0sNjQ2OntuOiJCcnRCZWdpblBDRFNEVENFTWVtYmVyc1NvcnRCeSJ9LDY0ODp7bjoiQnJ0QmVnaW5DZWxsSWdub3JlRUNzIn0sNjQ5OntuOiJCcnRDZWxsSWdub3Jl'@;
put 'RUMifSw2NTA6e246IkJydEVuZENlbGxJZ25vcmVFQ3MifSw2NTE6e246IkJydENzUHJvcCIsZjpmdW5jdGlvbiBkeihTLFIpe3JldHVybiBTLmwrPTEwLHtuYW1lOmd1KFMpfX19LDY1Mjp7bjoiQnJ0Q3NQYWdlU2V0dXAifSw2NTM6e246IkJydEJlZ2luVXNlckNzVmlld3MifSw2NTQ6e246'@;
put 'IkJydEVuZFVzZXJDc1ZpZXdzIn0sNjU1OntuOiJCcnRCZWdpblVzZXJDc1ZpZXcifSw2NTY6e246IkJydEVuZFVzZXJDc1ZpZXcifSw2NTc6e246IkJydEJlZ2luUGNkU0ZDSUVudHJpZXMifSw2NTg6e246IkJydEVuZFBDRFNGQ0lFbnRyaWVzIn0sNjU5OntuOiJCcnRQQ0RTRkNJRW50cnki'@;
put 'fSw2NjA6e246IkJydEJlZ2luTGlzdFBhcnRzIn0sNjYxOntuOiJCcnRMaXN0UGFydCJ9LDY2Mjp7bjoiQnJ0RW5kTGlzdFBhcnRzIn0sNjYzOntuOiJCcnRTaGVldENhbGNQcm9wIn0sNjY0OntuOiJCcnRCZWdpbkZuR3JvdXAifSw2NjU6e246IkJydEZuR3JvdXAifSw2NjY6e246IkJydEVu'@;
put 'ZEZuR3JvdXAifSw2Njc6e246IkJydFN1cEFkZGluIn0sNjY4OntuOiJCcnRTWFRETVBPcmRlciJ9LDY2OTp7bjoiQnJ0Q3NQcm90ZWN0aW9uIn0sNjcxOntuOiJCcnRCZWdpbldzU29ydE1hcCJ9LDY3Mjp7bjoiQnJ0RW5kV3NTb3J0TWFwIn0sNjczOntuOiJCcnRCZWdpblJSU29ydCJ9LDY3'@;
put 'NDp7bjoiQnJ0RW5kUlJTb3J0In0sNjc1OntuOiJCcnRSUlNvcnRJdGVtIn0sNjc2OntuOiJCcnRGaWxlU2hhcmluZ0lzbyJ9LDY3Nzp7bjoiQnJ0Qm9va1Byb3RlY3Rpb25Jc28ifSw2Nzg6e246IkJydFNoZWV0UHJvdGVjdGlvbklzbyJ9LDY3OTp7bjoiQnJ0Q3NQcm90ZWN0aW9uSXNvIn0s'@;
put 'NjgwOntuOiJCcnRSYW5nZVByb3RlY3Rpb25Jc28ifSw2ODE6e246IkJydERWYWxMaXN0In0sMTAyNDp7bjoiQnJ0UndEZXNjZW50In0sMTAyNTp7bjoiQnJ0S25vd25Gb250cyJ9LDEwMjY6e246IkJydEJlZ2luU1hUdXBsZVNldCJ9LDEwMjc6e246IkJydEVuZFNYVHVwbGVTZXQifSwxMDI4'@;
put 'OntuOiJCcnRCZWdpblNYVHVwbGVTZXRIZWFkZXIifSwxMDI5OntuOiJCcnRFbmRTWFR1cGxlU2V0SGVhZGVyIn0sMTAzMDp7bjoiQnJ0U1hUdXBsZVNldEhlYWRlckl0ZW0ifSwxMDMxOntuOiJCcnRCZWdpblNYVHVwbGVTZXREYXRhIn0sMTAzMjp7bjoiQnJ0RW5kU1hUdXBsZVNldERhdGEi'@;
put 'fSwxMDMzOntuOiJCcnRCZWdpblNYVHVwbGVTZXRSb3cifSwxMDM0OntuOiJCcnRFbmRTWFR1cGxlU2V0Um93In0sMTAzNTp7bjoiQnJ0U1hUdXBsZVNldFJvd0l0ZW0ifSwxMDM2OntuOiJCcnROYW1lRXh0In0sMTAzNzp7bjoiQnJ0UENESDE0In0sMTAzODp7bjoiQnJ0QmVnaW5QQ0RDYWxj'@;
put 'TWVtMTQifSwxMDM5OntuOiJCcnRFbmRQQ0RDYWxjTWVtMTQifSwxMDQwOntuOiJCcnRTWFRIMTQifSwxMDQxOntuOiJCcnRCZWdpblNwYXJrbGluZUdyb3VwIn0sMTA0Mjp7bjoiQnJ0RW5kU3BhcmtsaW5lR3JvdXAifSwxMDQzOntuOiJCcnRTcGFya2xpbmUifSwxMDQ0OntuOiJCcnRTWERJ'@;
put 'MTQifSwxMDQ1OntuOiJCcnRXc0ZtdEluZm9FeDE0In0sMTA0Njp7bjoiQnJ0QmVnaW5Db25kaXRpb25hbEZvcm1hdHRpbmcxNCJ9LDEwNDc6e246IkJydEVuZENvbmRpdGlvbmFsRm9ybWF0dGluZzE0In0sMTA0ODp7bjoiQnJ0QmVnaW5DRlJ1bGUxNCJ9LDEwNDk6e246IkJydEVuZENGUnVs'@;
put 'ZTE0In0sMTA1MDp7bjoiQnJ0Q0ZWTzE0In0sMTA1MTp7bjoiQnJ0QmVnaW5EYXRhYmFyMTQifSwxMDUyOntuOiJCcnRCZWdpbkljb25TZXQxNCJ9LDEwNTM6e246IkJydERWYWwxNCIsZjpmdW5jdGlvbiBJUyhTLFIsayl7dmFyIEc9ZnVuY3Rpb24gZG4oUyxSLGspe3ZhciBHPVMucmVhZF9z'@;
put 'aGlmdCg0KSxRPXt9O3JldHVybiAxJkcmJihRLnJlZnM9ZnVuY3Rpb24gcW4oUyl7Zm9yKHZhciBSPVMucmVhZF9zaGlmdCg0KSxrPVtdO1ItLSA+MDspay5wdXNoKGlpKFMpKTtyZXR1cm4ga30oUykpLDImRyYmKFEuc3FyZWZzPWZ1bmN0aW9uIElhKFMpe2Zvcih2YXIgUj1TLnJlYWRfc2hp'@;
put 'ZnQoNCksaz1bXTtSLS0gPjA7KWsucHVzaChTbyhTKSk7cmV0dXJuIGt9KFMpKSw0JkcmJihRLmZvcm11bGFzPWZ1bmN0aW9uIGZzKFMsUixrKXtmb3IodmFyIEc9Uy5yZWFkX3NoaWZ0KDQpLFE9W107Ry0tID4wOylRLnB1c2goTnUoUywwLGspKTtyZXR1cm4gUX0oUywwLGspKSw4JkcmJihR'@;
put 'LnJlbElEPWZ1bmN0aW9uIGx2KFMpe3ZhciBSPVMucmVhZF9zaGlmdCgyKTtyZXR1cm4gMD09PVI/IiI6Uy5yZWFkX3NoaWZ0KFIsInV0ZjE2bGUiKX0oUykpLFF9KFMsMCxrKSxRPVMucmVhZF9zaGlmdCg0KSxvZT10MChTKSxnZT10MChTKSxwZT10MChTKSx5ZT10MChTKSxQZT0oRy5mb3Jt'@;
put 'dWxhc3x8W10pWzBdLE5lPShHLmZvcm11bGFzfHxbXSlbMV0sWWU9MTUmUSxldD17dDpxRFtZZV0sc3FyZng6Ry5zcXJlZnNbMF0sczpbb2UsZ2UscGUseWVdfTtyZXR1cm4gUGUmJihldC5mMT1QZSksTmUmJihldC5mMj1OZSksMD09WWV8fDM9PVllfHw3PT1ZZXx8KGV0Lm9wPURTW1E+PjIw'@;
put 'JjE1XSksZXR9fSwxMDU0OntuOiJCcnRCZWdpbkRWYWxzMTQifSwxMDU1OntuOiJCcnRDb2xvcjE0In0sMTA1Njp7bjoiQnJ0QmVnaW5TcGFya2xpbmVzIn0sMTA1Nzp7bjoiQnJ0RW5kU3BhcmtsaW5lcyJ9LDEwNTg6e246IkJydEJlZ2luU3BhcmtsaW5lR3JvdXBzIn0sMTA1OTp7bjoiQnJ0'@;
put 'RW5kU3BhcmtsaW5lR3JvdXBzIn0sMTA2MTp7bjoiQnJ0U1hWRDE0In0sMTA2Mjp7bjoiQnJ0QmVnaW5TWFZpZXcxNCJ9LDEwNjM6e246IkJydEVuZFNYVmlldzE0In0sMTA2NDp7bjoiQnJ0QmVnaW5TWFZpZXcxNiJ9LDEwNjU6e246IkJydEVuZFNYVmlldzE2In0sMTA2Njp7bjoiQnJ0QmVn'@;
put 'aW5QQ0QxNCJ9LDEwNjc6e246IkJydEVuZFBDRDE0In0sMTA2ODp7bjoiQnJ0QmVnaW5FeHRDb25uMTQifSwxMDY5OntuOiJCcnRFbmRFeHRDb25uMTQifSwxMDcwOntuOiJCcnRCZWdpblNsaWNlckNhY2hlSURzIn0sMTA3MTp7bjoiQnJ0RW5kU2xpY2VyQ2FjaGVJRHMifSwxMDcyOntuOiJC'@;
put 'cnRCZWdpblNsaWNlckNhY2hlSUQifSwxMDczOntuOiJCcnRFbmRTbGljZXJDYWNoZUlEIn0sMTA3NTp7bjoiQnJ0QmVnaW5TbGljZXJDYWNoZSJ9LDEwNzY6e246IkJydEVuZFNsaWNlckNhY2hlIn0sMTA3Nzp7bjoiQnJ0QmVnaW5TbGljZXJDYWNoZURlZiJ9LDEwNzg6e246IkJydEVuZFNs'@;
put 'aWNlckNhY2hlRGVmIn0sMTA3OTp7bjoiQnJ0QmVnaW5TbGljZXJzRXgifSwxMDgwOntuOiJCcnRFbmRTbGljZXJzRXgifSwxMDgxOntuOiJCcnRCZWdpblNsaWNlckV4In0sMTA4Mjp7bjoiQnJ0RW5kU2xpY2VyRXgifSwxMDgzOntuOiJCcnRCZWdpblNsaWNlciJ9LDEwODQ6e246IkJydEVu'@;
put 'ZFNsaWNlciJ9LDEwODU6e246IkJydFNsaWNlckNhY2hlUGl2b3RUYWJsZXMifSwxMDg2OntuOiJCcnRCZWdpblNsaWNlckNhY2hlT2xhcEltcGwifSwxMDg3OntuOiJCcnRFbmRTbGljZXJDYWNoZU9sYXBJbXBsIn0sMTA4ODp7bjoiQnJ0QmVnaW5TbGljZXJDYWNoZUxldmVsc0RhdGEifSwx'@;
put 'MDg5OntuOiJCcnRFbmRTbGljZXJDYWNoZUxldmVsc0RhdGEifSwxMDkwOntuOiJCcnRCZWdpblNsaWNlckNhY2hlTGV2ZWxEYXRhIn0sMTA5MTp7bjoiQnJ0RW5kU2xpY2VyQ2FjaGVMZXZlbERhdGEifSwxMDkyOntuOiJCcnRCZWdpblNsaWNlckNhY2hlU2lSYW5nZXMifSwxMDkzOntuOiJC'@;
put 'cnRFbmRTbGljZXJDYWNoZVNpUmFuZ2VzIn0sMTA5NDp7bjoiQnJ0QmVnaW5TbGljZXJDYWNoZVNpUmFuZ2UifSwxMDk1OntuOiJCcnRFbmRTbGljZXJDYWNoZVNpUmFuZ2UifSwxMDk2OntuOiJCcnRTbGljZXJDYWNoZU9sYXBJdGVtIn0sMTA5Nzp7bjoiQnJ0QmVnaW5TbGljZXJDYWNoZVNl'@;
put 'bGVjdGlvbnMifSwxMDk4OntuOiJCcnRTbGljZXJDYWNoZVNlbGVjdGlvbiJ9LDEwOTk6e246IkJydEVuZFNsaWNlckNhY2hlU2VsZWN0aW9ucyJ9LDExMDA6e246IkJydEJlZ2luU2xpY2VyQ2FjaGVOYXRpdmUifSwxMTAxOntuOiJCcnRFbmRTbGljZXJDYWNoZU5hdGl2ZSJ9LDExMDI6e246'@;
put 'IkJydFNsaWNlckNhY2hlTmF0aXZlSXRlbSJ9LDExMDM6e246IkJydFJhbmdlUHJvdGVjdGlvbjE0In0sMTEwNDp7bjoiQnJ0UmFuZ2VQcm90ZWN0aW9uSXNvMTQifSwxMTA1OntuOiJCcnRDZWxsSWdub3JlRUMxNCJ9LDExMTE6e246IkJydExpc3QxNCJ9LDExMTI6e246IkJydENGSWNvbiJ9'@;
put 'LDExMTM6e246IkJydEJlZ2luU2xpY2VyQ2FjaGVzUGl2b3RDYWNoZUlEcyJ9LDExMTQ6e246IkJydEVuZFNsaWNlckNhY2hlc1Bpdm90Q2FjaGVJRHMifSwxMTE1OntuOiJCcnRCZWdpblNsaWNlcnMifSwxMTE2OntuOiJCcnRFbmRTbGljZXJzIn0sMTExNzp7bjoiQnJ0V2JQcm9wMTQifSwx'@;
put 'MTE4OntuOiJCcnRCZWdpblNYRWRpdCJ9LDExMTk6e246IkJydEVuZFNYRWRpdCJ9LDExMjA6e246IkJydEJlZ2luU1hFZGl0cyJ9LDExMjE6e246IkJydEVuZFNYRWRpdHMifSwxMTIyOntuOiJCcnRCZWdpblNYQ2hhbmdlIn0sMTEyMzp7bjoiQnJ0RW5kU1hDaGFuZ2UifSwxMTI0OntuOiJC'@;
put 'cnRCZWdpblNYQ2hhbmdlcyJ9LDExMjU6e246IkJydEVuZFNYQ2hhbmdlcyJ9LDExMjY6e246IkJydFNYVHVwbGVJdGVtcyJ9LDExMjg6e246IkJydEJlZ2luU2xpY2VyU3R5bGUifSwxMTI5OntuOiJCcnRFbmRTbGljZXJTdHlsZSJ9LDExMzA6e246IkJydFNsaWNlclN0eWxlRWxlbWVudCJ9'@;
put 'LDExMzE6e246IkJydEJlZ2luU3R5bGVTaGVldEV4dDE0In0sMTEzMjp7bjoiQnJ0RW5kU3R5bGVTaGVldEV4dDE0In0sMTEzMzp7bjoiQnJ0QmVnaW5TbGljZXJDYWNoZXNQaXZvdENhY2hlSUQifSwxMTM0OntuOiJCcnRFbmRTbGljZXJDYWNoZXNQaXZvdENhY2hlSUQifSwxMTM1OntuOiJC'@;
put 'cnRCZWdpbkNvbmRpdGlvbmFsRm9ybWF0dGluZ3MifSwxMTM2OntuOiJCcnRFbmRDb25kaXRpb25hbEZvcm1hdHRpbmdzIn0sMTEzNzp7bjoiQnJ0QmVnaW5QQ0RDYWxjTWVtRXh0In0sMTEzODp7bjoiQnJ0RW5kUENEQ2FsY01lbUV4dCJ9LDExMzk6e246IkJydEJlZ2luUENEQ2FsY01lbXNF'@;
put 'eHQifSwxMTQwOntuOiJCcnRFbmRQQ0RDYWxjTWVtc0V4dCJ9LDExNDE6e246IkJydFBDREZpZWxkMTQifSwxMTQyOntuOiJCcnRCZWdpblNsaWNlclN0eWxlcyJ9LDExNDM6e246IkJydEVuZFNsaWNlclN0eWxlcyJ9LDExNDQ6e246IkJydEJlZ2luU2xpY2VyU3R5bGVFbGVtZW50cyJ9LDEx'@;
put 'NDU6e246IkJydEVuZFNsaWNlclN0eWxlRWxlbWVudHMifSwxMTQ2OntuOiJCcnRDRlJ1bGVFeHQifSwxMTQ3OntuOiJCcnRCZWdpblNYQ29uZEZtdDE0In0sMTE0ODp7bjoiQnJ0RW5kU1hDb25kRm10MTQifSwxMTQ5OntuOiJCcnRCZWdpblNYQ29uZEZtdHMxNCJ9LDExNTA6e246IkJydEVu'@;
put 'ZFNYQ29uZEZtdHMxNCJ9LDExNTI6e246IkJydEJlZ2luU29ydENvbmQxNCJ9LDExNTM6e246IkJydEVuZFNvcnRDb25kMTQifSwxMTU0OntuOiJCcnRFbmREVmFsczE0In0sMTE1NTp7bjoiQnJ0RW5kSWNvblNldDE0In0sMTE1Njp7bjoiQnJ0RW5kRGF0YWJhcjE0In0sMTE1Nzp7bjoiQnJ0'@;
put 'QmVnaW5Db2xvclNjYWxlMTQifSwxMTU4OntuOiJCcnRFbmRDb2xvclNjYWxlMTQifSwxMTU5OntuOiJCcnRCZWdpblN4cnVsZXMxNCJ9LDExNjA6e246IkJydEVuZFN4cnVsZXMxNCJ9LDExNjE6e246IkJydEJlZ2luUFJ1bGUxNCJ9LDExNjI6e246IkJydEVuZFBSdWxlMTQifSwxMTYzOntu'@;
put 'OiJCcnRCZWdpblBSRmlsdGVyczE0In0sMTE2NDp7bjoiQnJ0RW5kUFJGaWx0ZXJzMTQifSwxMTY1OntuOiJCcnRCZWdpblBSRmlsdGVyMTQifSwxMTY2OntuOiJCcnRFbmRQUkZpbHRlcjE0In0sMTE2Nzp7bjoiQnJ0QmVnaW5QUkZJdGVtMTQifSwxMTY4OntuOiJCcnRFbmRQUkZJdGVtMTQi'@;
put 'fSwxMTY5OntuOiJCcnRCZWdpbkNlbGxJZ25vcmVFQ3MxNCJ9LDExNzA6e246IkJydEVuZENlbGxJZ25vcmVFQ3MxNCJ9LDExNzE6e246IkJydER4ZjE0In0sMTE3Mjp7bjoiQnJ0QmVnaW5EeEYxNHMifSwxMTczOntuOiJCcnRFbmREeGYxNHMifSwxMTc3OntuOiJCcnRGaWx0ZXIxNCJ9LDEx'@;
put 'Nzg6e246IkJydEJlZ2luQ3VzdG9tRmlsdGVyczE0In0sMTE4MDp7bjoiQnJ0Q3VzdG9tRmlsdGVyMTQifSwxMTgxOntuOiJCcnRJY29uRmlsdGVyMTQifSwxMTgyOntuOiJCcnRQaXZvdENhY2hlQ29ubmVjdGlvbk5hbWUifSwyMDQ4OntuOiJCcnRCZWdpbkRlY291cGxlZFBpdm90Q2FjaGVJ'@;
put 'RHMifSwyMDQ5OntuOiJCcnRFbmREZWNvdXBsZWRQaXZvdENhY2hlSURzIn0sMjA1MDp7bjoiQnJ0RGVjb3VwbGVkUGl2b3RDYWNoZUlEIn0sMjA1MTp7bjoiQnJ0QmVnaW5QaXZvdFRhYmxlUmVmcyJ9LDIwNTI6e246IkJydEVuZFBpdm90VGFibGVSZWZzIn0sMjA1Mzp7bjoiQnJ0UGl2b3RU'@;
put 'YWJsZVJlZiJ9LDIwNTQ6e246IkJydFNsaWNlckNhY2hlQm9va1Bpdm90VGFibGVzIn0sMjA1NTp7bjoiQnJ0QmVnaW5TeHZjZWxscyJ9LDIwNTY6e246IkJydEVuZFN4dmNlbGxzIn0sMjA1Nzp7bjoiQnJ0QmVnaW5TeFJvdyJ9LDIwNTg6e246IkJydEVuZFN4Um93In0sMjA2MDp7bjoiQnJ0'@;
put 'UGNkQ2FsY01lbTE1In0sMjA2Nzp7bjoiQnJ0UXNpMTUifSwyMDY4OntuOiJCcnRCZWdpbldlYkV4dGVuc2lvbnMifSwyMDY5OntuOiJCcnRFbmRXZWJFeHRlbnNpb25zIn0sMjA3MDp7bjoiQnJ0V2ViRXh0ZW5zaW9uIn0sMjA3MTp7bjoiQnJ0QWJzUGF0aDE1In0sMjA3Mjp7bjoiQnJ0QmVn'@;
put 'aW5QaXZvdFRhYmxlVUlTZXR0aW5ncyJ9LDIwNzM6e246IkJydEVuZFBpdm90VGFibGVVSVNldHRpbmdzIn0sMjA3NTp7bjoiQnJ0VGFibGVTbGljZXJDYWNoZUlEcyJ9LDIwNzY6e246IkJydFRhYmxlU2xpY2VyQ2FjaGVJRCJ9LDIwNzc6e246IkJydEJlZ2luVGFibGVTbGljZXJDYWNoZSJ9'@;
put 'LDIwNzg6e246IkJydEVuZFRhYmxlU2xpY2VyQ2FjaGUifSwyMDc5OntuOiJCcnRTeEZpbHRlcjE1In0sMjA4MDp7bjoiQnJ0QmVnaW5UaW1lbGluZUNhY2hlUGl2b3RDYWNoZUlEcyJ9LDIwODE6e246IkJydEVuZFRpbWVsaW5lQ2FjaGVQaXZvdENhY2hlSURzIn0sMjA4Mjp7bjoiQnJ0VGlt'@;
put 'ZWxpbmVDYWNoZVBpdm90Q2FjaGVJRCJ9LDIwODM6e246IkJydEJlZ2luVGltZWxpbmVDYWNoZUlEcyJ9LDIwODQ6e246IkJydEVuZFRpbWVsaW5lQ2FjaGVJRHMifSwyMDg1OntuOiJCcnRCZWdpblRpbWVsaW5lQ2FjaGVJRCJ9LDIwODY6e246IkJydEVuZFRpbWVsaW5lQ2FjaGVJRCJ9LDIw'@;
put 'ODc6e246IkJydEJlZ2luVGltZWxpbmVzRXgifSwyMDg4OntuOiJCcnRFbmRUaW1lbGluZXNFeCJ9LDIwODk6e246IkJydEJlZ2luVGltZWxpbmVFeCJ9LDIwOTA6e246IkJydEVuZFRpbWVsaW5lRXgifSwyMDkxOntuOiJCcnRXb3JrQm9va1ByMTUifSwyMDkyOntuOiJCcnRQQ0RIMTUifSwy'@;
put 'MDkzOntuOiJCcnRCZWdpblRpbWVsaW5lU3R5bGUifSwyMDk0OntuOiJCcnRFbmRUaW1lbGluZVN0eWxlIn0sMjA5NTp7bjoiQnJ0VGltZWxpbmVTdHlsZUVsZW1lbnQifSwyMDk2OntuOiJCcnRCZWdpblRpbWVsaW5lU3R5bGVzaGVldEV4dDE1In0sMjA5Nzp7bjoiQnJ0RW5kVGltZWxpbmVT'@;
put 'dHlsZXNoZWV0RXh0MTUifSwyMDk4OntuOiJCcnRCZWdpblRpbWVsaW5lU3R5bGVzIn0sMjA5OTp7bjoiQnJ0RW5kVGltZWxpbmVTdHlsZXMifSwyMTAwOntuOiJCcnRCZWdpblRpbWVsaW5lU3R5bGVFbGVtZW50cyJ9LDIxMDE6e246IkJydEVuZFRpbWVsaW5lU3R5bGVFbGVtZW50cyJ9LDIx'@;
put 'MDI6e246IkJydER4ZjE1In0sMjEwMzp7bjoiQnJ0QmVnaW5EeGZzMTUifSwyMTA0OntuOiJicnRFbmREeGZzMTUifSwyMTA1OntuOiJCcnRTbGljZXJDYWNoZUhpZGVJdGVtc1dpdGhOb0RhdGEifSwyMTA2OntuOiJCcnRCZWdpbkl0ZW1VbmlxdWVOYW1lcyJ9LDIxMDc6e246IkJydEVuZEl0'@;
put 'ZW1VbmlxdWVOYW1lcyJ9LDIxMDg6e246IkJydEl0ZW1VbmlxdWVOYW1lIn0sMjEwOTp7bjoiQnJ0QmVnaW5FeHRDb25uMTUifSwyMTEwOntuOiJCcnRFbmRFeHRDb25uMTUifSwyMTExOntuOiJCcnRCZWdpbk9sZWRiUHIxNSJ9LDIxMTI6e246IkJydEVuZE9sZWRiUHIxNSJ9LDIxMTM6e246'@;
put 'IkJydEJlZ2luRGF0YUZlZWRQcjE1In0sMjExNDp7bjoiQnJ0RW5kRGF0YUZlZWRQcjE1In0sMjExNTp7bjoiQnJ0VGV4dFByMTUifSwyMTE2OntuOiJCcnRSYW5nZVByMTUifSwyMTE3OntuOiJCcnREYkNvbW1hbmQxNSJ9LDIxMTg6e246IkJydEJlZ2luRGJUYWJsZXMxNSJ9LDIxMTk6e246'@;
put 'IkJydEVuZERiVGFibGVzMTUifSwyMTIwOntuOiJCcnREYlRhYmxlMTUifSwyMTIxOntuOiJCcnRCZWdpbkRhdGFNb2RlbCJ9LDIxMjI6e246IkJydEVuZERhdGFNb2RlbCJ9LDIxMjM6e246IkJydEJlZ2luTW9kZWxUYWJsZXMifSwyMTI0OntuOiJCcnRFbmRNb2RlbFRhYmxlcyJ9LDIxMjU6'@;
put 'e246IkJydE1vZGVsVGFibGUifSwyMTI2OntuOiJCcnRCZWdpbk1vZGVsUmVsYXRpb25zaGlwcyJ9LDIxMjc6e246IkJydEVuZE1vZGVsUmVsYXRpb25zaGlwcyJ9LDIxMjg6e246IkJydE1vZGVsUmVsYXRpb25zaGlwIn0sMjEyOTp7bjoiQnJ0QmVnaW5FQ1R4dFdpejE1In0sMjEzMDp7bjoi'@;
put 'QnJ0RW5kRUNUeHRXaXoxNSJ9LDIxMzE6e246IkJydEJlZ2luRUNUV0ZsZEluZm9Mc3QxNSJ9LDIxMzI6e246IkJydEVuZEVDVFdGbGRJbmZvTHN0MTUifSwyMTMzOntuOiJCcnRCZWdpbkVDVFdGbGRJbmZvMTUifSwyMTM0OntuOiJCcnRGaWVsZExpc3RBY3RpdmVJdGVtIn0sMjEzNTp7bjoi'@;
put 'QnJ0UGl2b3RDYWNoZUlkVmVyc2lvbiJ9LDIxMzY6e246IkJydFNYREkxNSJ9LDIxMzc6e246IkJydEJlZ2luTW9kZWxUaW1lR3JvdXBpbmdzIn0sMjEzODp7bjoiQnJ0RW5kTW9kZWxUaW1lR3JvdXBpbmdzIn0sMjEzOTp7bjoiQnJ0QmVnaW5Nb2RlbFRpbWVHcm91cGluZyJ9LDIxNDA6e246'@;
put 'IkJydEVuZE1vZGVsVGltZUdyb3VwaW5nIn0sMjE0MTp7bjoiQnJ0TW9kZWxUaW1lR3JvdXBpbmdDYWxjQ29sIn0sMzA3Mjp7bjoiQnJ0VWlkIn0sMzA3Mzp7bjoiQnJ0UmV2aXNpb25QdHIifSw1MDk1OntuOiJCcnRCZWdpbkNhbGNGZWF0dXJlcyJ9LDUwOTY6e246IkJydEVuZENhbGNGZWF0'@;
put 'dXJlcyJ9LDUwOTc6e246IkJydENhbGNGZWF0dXJlIn0sNjU1MzU6e246IiJ9fSxIej1JZShMOCwibiIpO0h6LkJydEZSVEFyY2hJRCQ9MTY7dmFyIEtTPXs2OntuOiJGb3JtdWxhIixmOlFDfSwxMDp7bjoiRU9GIixmOnIyfSwxMjp7bjoiQ2FsY0NvdW50IixmOkVjfSwxMzp7bjoiQ2FsY01v'@;
put 'ZGUiLGY6RWN9LDE0OntuOiJDYWxjUHJlY2lzaW9uIixmOnVvfSwxNTp7bjoiQ2FsY1JlZk1vZGUiLGY6dW99LDE2OntuOiJDYWxjRGVsdGEiLGY6UGx9LDE3OntuOiJDYWxjSXRlciIsZjp1b30sMTg6e246IlByb3RlY3QiLGY6dW99LDE5OntuOiJQYXNzd29yZCIsZjpFY30sMjA6e246Ikhl'@;
put 'YWRlciIsZjpKQX0sMjE6e246IkZvb3RlciIsZjpKQX0sMjM6e246IkV4dGVyblNoZWV0IixmOlR2fSwyNDp7bjoiTGJsIixmOnRDfSwyNTp7bjoiV2luUHJvdGVjdCIsZjp1b30sMjY6e246IlZlcnRpY2FsUGFnZUJyZWFrcyJ9LDI3OntuOiJIb3Jpem9udGFsUGFnZUJyZWFrcyJ9LDI4Ontu'@;
put 'OiJOb3RlIixmOmZ1bmN0aW9uIFFBKFMsUixrKXtyZXR1cm4gZnVuY3Rpb24gQ28oUyxSLGspe2lmKCEoay5iaWZmPDgpKXt2YXIgRz1TLnJlYWRfc2hpZnQoMiksUT1TLnJlYWRfc2hpZnQoMiksb2U9Uy5yZWFkX3NoaWZ0KDIpLGdlPVMucmVhZF9zaGlmdCgyKSxwZT1YMChTLDAsayk7cmV0'@;
put 'dXJuIGsuYmlmZjw4JiZTLnJlYWRfc2hpZnQoMSksW3tyOkcsYzpRfSxwZSxnZSxvZV19fShTLDAsayl9fSwyOTp7bjoiU2VsZWN0aW9uIixmOmZ1bmN0aW9uIFRmKFMsUixrKXtyZXR1cm4gayYmay5iaWZmPDU/KFMubCs9Uix7Y2VsbDp7cjowLGM6MH19KTooUy5yZWFkX3NoaWZ0KDEpLHtj'@;
put 'ZWxsOnFpKHtyOlMucmVhZF9zaGlmdCgyKSxjOlMucmVhZF9zaGlmdCgyKX0pfSl9fSwzNDp7bjoiRGF0ZTE5MDQiLGY6dW99LDM1OntuOiJFeHRlcm5OYW1lIixmOmVDfSwzODp7bjoiTGVmdE1hcmdpbiIsZjpQbH0sMzk6e246IlJpZ2h0TWFyZ2luIixmOlBsfSw0MDp7bjoiVG9wTWFyZ2lu'@;
put 'IixmOlBsfSw0MTp7bjoiQm90dG9tTWFyZ2luIixmOlBsfSw0Mjp7bjoiUHJpbnRSb3dDb2wiLGY6dW99LDQzOntuOiJQcmludEdyaWQiLGY6dW99LDQ3OntuOiJGaWxlUGFzcyIsZjpmdW5jdGlvbiBnQyhTLFIsayl7aWYoay5lbmMpcmV0dXJuIGsuZW5jO3ZhciBHPXtUeXBlOmsuYmlmZj49'@;
put 'OD9TLnJlYWRfc2hpZnQoMik6MH07cmV0dXJuIEcuVHlwZT9mdW5jdGlvbiBOdihTLFIsayxHKXt2YXIgUT1HfHx7fTtpZihRLkluZm89Uy5yZWFkX3NoaWZ0KDIpLFMubC09MiwxPT09US5JbmZvKXtpZihRLkRhdGE9ZnVuY3Rpb24gdG5lKFMpe3ZhciBSPXt9LGs9Ui5FbmNyeXB0aW9uVmVy'@;
put 'c2lvbkluZm89UDEoUyw0KTtpZigxIT1rLk1ham9yfHwxIT1rLk1pbm9yKXRocm93InVucmVjb2duaXplZCB2ZXJzaW9uIGNvZGUgIitrLk1ham9yKyIgOiAiK2suTWlub3I7cmV0dXJuIFIuU2FsdD1TLnJlYWRfc2hpZnQoMTYpLFIuRW5jcnlwdGVkVmVyaWZpZXI9Uy5yZWFkX3NoaWZ0KDE2'@;
put 'KSxSLkVuY3J5cHRlZFZlcmlmaWVySGFzaD1TLnJlYWRfc2hpZnQoMTYpLFJ9KFMpLGsucGFzc3dvcmQmJnR5cGVvZiBHNDwidSIpe3ZhciBvZT1HNChrLnBhc3N3b3JkLFEuRGF0YS5TYWx0LCIwMDAwMDAwMCIpLGdlPVNlKFEuRGF0YS5FbmNyeXB0ZWRWZXJpZmllcitRLkRhdGEuRW5jcnlw'@;
put 'dGVkVmVyaWZpZXJIYXNoLCJoZXgiKSxwZT1YbC5yYzQoU2Uob2UsImhleCIpLnRvU3RyaW5nKCJiaW5hcnkiKSxnZSk7Ry52YWxpZD1YbC5tZDUocGUuc2xpY2UoMCwxNikpPT1CdWZmZXIuZnJvbShwZS5zbGljZSgxNikpLnRvU3RyaW5nKCJoZXgiKSxRLkRhdGEuS2V5PW9lLEcuaW5zaXR1'@;
put 'PWZ1bmN0aW9uIHF6KFMsUil7dmFyIGs9bmV3IEFycmF5KDI1NiksRz0wLFE9MCxvZT0wLGdlPTA7ZnVuY3Rpb24gcGUoZXQpe2ZvcihHPTAsUT0wLG9lPTAsZ2U9MCxRPTA7MjU2IT1ROysrUSlrW1FdPVE7Zm9yKG9lPTAsUT0wOzI1NiE9UTsrK1Epe3RyeXtvZT1vZStrW1FdK2V0W1ElZXQu'@;
put 'bGVuZ3RoXS5jaGFyQ29kZUF0KDApJjI1NX1jYXRjaChjdCl7dGhyb3cgY29uc29sZS5sb2coUSxldFtRJWV0Lmxlbmd0aF0pLGN0fWdlPWtbUV0sa1tRXT1rW29lXSxrW29lXT1nZX1RPW9lPTB9ZnVuY3Rpb24geWUoZXQpe3ZhciBjdD1WKGV0Lmxlbmd0aCk7Zm9yKEc9MDtHIT1ldC5sZW5n'@;
put 'dGg7KytHKWdlPWtbUT1RKzEmMjU1XSxrW1FdPWtbb2U9KG9lK2tbUV0pJTI1Nl0sa1tvZV09Z2UsY3RbR109ZXRbR11ea1trW1FdK2tbb2VdJjI1NV07cmV0dXJuIEJ1ZmZlci5mcm9tKGN0KX12YXIgUGU9Uy5LZXksTmU9MDtwZShTZShQZSwiaGV4IikudG9TdHJpbmcoImJpbmFyeSIpKTt2'@;
put 'YXIgWWU9MDtyZXR1cm4gZnVuY3Rpb24oZXQpe2lmKFllK2V0Lmxlbmd0aDwxMDI0KXJldHVybiBZZSs9ZXQubGVuZ3RoLHllKGV0KTt2YXIgYXQ9MCxidD1TZShldC5zbGljZShhdCxhdCsoRXQ9MTAyNC1ZZSkpKTthdCs9RXQsWWU9MDt2YXIganQ9eWUoYnQpO2ZvcihhdD09ZXQubGVuZ3Ro'@;
put 'JiYoKytOZSxQZT1HNChSLFMuU2FsdCxGOChOZSkpLHBlKFNlKFBlLCJoZXgiKS50b1N0cmluZygiYmluYXJ5IikpKTthdDxldC5sZW5ndGg7KXsrK05lLFBlPUc0KFIsUy5TYWx0LEY4KE5lKSkscGUoQnVmZmVyLmZyb20oUGUsImhleCIpLnRvU3RyaW5nKCJiaW5hcnkiKSk7dmFyIEV0PU1h'@;
put 'dGgubWluKDEwMjQsZXQubGVuZ3RoLWF0KTtidD1TZShldC5zbGljZShhdCxhdCtFdCkpLGF0Kz1FdCxZZT1FdCxqdD1CdWZmZXIuY29uY2F0KFtqdCx5ZShidCldKX1yZXR1cm4ganR9fShRLkRhdGEsay5wYXNzd29yZCl9fWVsc2UgaWYoUS5EYXRhPWZ1bmN0aW9uIEZ2KFMsUil7dmFyIGs9'@;
put 'e30sRz1rLkVuY3J5cHRpb25WZXJzaW9uSW5mbz1QMShTLDQpO2lmKFItPTQsMiE9Ry5NaW5vcil0aHJvdyBuZXcgRXJyb3IoInVucmVjb2duaXplZCBtaW5vciB2ZXJzaW9uIGNvZGU6ICIrRy5NaW5vcik7aWYoRy5NYWpvcj40fHxHLk1ham9yPDIpdGhyb3cgbmV3IEVycm9yKCJ1bnJlY29n'@;
put 'bml6ZWQgbWFqb3IgdmVyc2lvbiBjb2RlOiAiK0cuTWFqb3IpO2suRmxhZ3M9Uy5yZWFkX3NoaWZ0KDQpLFItPTQ7dmFyIFE9Uy5yZWFkX3NoaWZ0KDQpO3JldHVybiBSLT00LGsuRW5jcnlwdGlvbkhlYWRlcj1JVihTLFEpLGsuRW5jcnlwdGlvblZlcmlmaWVyPVB2KFMsUi09USksa30oUyxS'@;
put 'KSxRLkRhdGEmJlEuRGF0YS5FbmNyeXB0aW9uSGVhZGVyJiYyNjYyNT09PVEuRGF0YS5FbmNyeXB0aW9uSGVhZGVyLkFsZ0lEJiZrLnBhc3N3b3JkJiZ0eXBlb2YgJDQ8InUiKXt2YXIgeWU9JDQoay5wYXNzd29yZCxRLkRhdGEuRW5jcnlwdGlvblZlcmlmaWVyLlNhbHQudG9TdHJpbmcoImhl'@;
put 'eCIpLCIwMDAwMDAwMCIpLFBlPVEuRGF0YS5FbmNyeXB0aW9uSGVhZGVyLktleVNpemU+Pj4zOzU9PVBlfHxQZTx5ZS5sZW5ndGgmJih5ZT15ZS5zbGljZSgwLFBlKSk7dmFyIE5lPVNlKFEuRGF0YS5FbmNyeXB0aW9uVmVyaWZpZXIuVmVyaWZpZXIudG9TdHJpbmcoImhleCIpK1EuRGF0YS5F'@;
put 'bmNyeXB0aW9uVmVyaWZpZXIuVmVyaWZpZXJIYXNoLnRvU3RyaW5nKCJoZXgiKSwiaGV4IiksWWU9WGwucmM0KHllLnRvU3RyaW5nKCJiaW5hcnkiKSxOZSk7Ry52YWxpZD1tYyhZZS5zbGljZSgwLFBlKSwiU0hBMSIpLnRvU3RyaW5nKCJoZXgiKT09WWUuc2xpY2UoUGUpLnRvU3RyaW5nKCJo'@;
put 'ZXgiKSxRLkRhdGEuS2V5PXllLEcudmFsaWQmJihHLmluc2l0dT1mdW5jdGlvbiB0cmUoUyxSKXt2YXIgaz1uZXcgQXJyYXkoMjU2KSxHPTAsUT0wLG9lPTAsZ2U9MCxwZT1TLkVuY3J5cHRpb25IZWFkZXIuS2V5U2l6ZT4+PjM7ZnVuY3Rpb24geWUoY3Qpe2ZvcihjdD1CdWZmZXIuZnJvbShj'@;
put 'dC5zbGljZSgwLHBlKSksRz0wLFE9MCxvZT0wLGdlPTAsUT0wOzI1NiE9UTsrK1Epa1tRXT1RO2ZvcihvZT0wLFE9MDsyNTYhPVE7KytRKXt2YXIgRXQ9Y3RbUSVjdC5sZW5ndGhdO29lPW9lK2tbUV0rKCJzdHJpbmciPT10eXBlb2YgRXQ/RXQuY2hhckNvZGVBdCgwKTpFdCkmMjU1LGdlPWtb'@;
put 'UV0sa1tRXT1rW29lXSxrW29lXT1nZX1RPW9lPTB9ZnVuY3Rpb24gUGUoY3Qpe3ZhciBFdD1WKGN0Lmxlbmd0aCk7Zm9yKEc9MDtHIT1jdC5sZW5ndGg7KytHKWdlPWtbUT1RKzEmMjU1XSxrW1FdPWtbb2U9KG9lK2tbUV0pJTI1Nl0sa1tvZV09Z2UsRXRbR109Y3RbR11ea1trW1FdK2tbb2Vd'@;
put 'JjI1NV07cmV0dXJuIEJ1ZmZlci5mcm9tKEV0KX12YXIgTmU9Uy5LZXksWWU9MDt5ZShTZShOZSwiaGV4IikudG9TdHJpbmcoImJpbmFyeSIpKTt2YXIgZXQ9MDtyZXR1cm4gZnVuY3Rpb24oY3Qpe2lmKGV0K2N0Lmxlbmd0aDwxMDI0KXJldHVybiBldCs9Y3QubGVuZ3RoLFBlKGN0KTt2YXIg'@;
put 'YXQ9MTAyNC1ldCxidD0wLGp0PUJ1ZmZlci5mcm9tKGN0LnNsaWNlKGJ0LGJ0K2F0KSk7YnQrPWF0LGV0PTA7dmFyIGt0PVBlKGp0KTtmb3IoYnQ9PWN0Lmxlbmd0aCYmKCsrWWUsTmU9JDQoUixTLkVuY3J5cHRpb25WZXJpZmllci5TYWx0LEY4KFllKSkseWUoQnVmZmVyLmZyb20oTmUsImhl'@;
put 'eCIpLnRvU3RyaW5nKCJiaW5hcnkiKSkpO2J0PGN0Lmxlbmd0aDspKytZZSxOZT0kNChSLFMuRW5jcnlwdGlvblZlcmlmaWVyLlNhbHQsRjgoWWUpKSx5ZShCdWZmZXIuZnJvbShOZSwiaGV4IikudG9TdHJpbmcoImJpbmFyeSIpKSxhdD1NYXRoLm1pbigxMDI0LGN0Lmxlbmd0aC1idCksanQ9'@;
put 'QnVmZmVyLmZyb20oY3Quc2xpY2UoYnQsYnQrYXQpKSxidCs9YXQsYXQ8MTAyNCYmKGV0PWF0KSxrdD1CdWZmZXIuY29uY2F0KFtrdCxQZShqdCldKTtyZXR1cm4ga3R9fShRLkRhdGEsay5wYXNzd29yZCkpfXJldHVybiBRfShTLFItMixrLEcpOmZ1bmN0aW9uIE9WKFMsUixrLEcpe3ZhciBR'@;
put 'PXtrZXk6RWMoUyksdmVyaWZpY2F0aW9uQnl0ZXM6RWMoUyl9O2sucGFzc3dvcmQmJihRLnZlcmlmaWVyPUh2KGsucGFzc3dvcmQpKSxHLnZhbGlkPVEudmVyaWZpY2F0aW9uQnl0ZXM9PT1RLnZlcmlmaWVyLEcudmFsaWQmJihHLmluc2l0dT1mdW5jdGlvbihTLFIpe3ZhciBrPVJ8fDAsRz1w'@;
put 'QyhTKTtyZXR1cm4gZnVuY3Rpb24oUSl7dmFyIG9lPWZ1bmN0aW9uKFMsUixrLEcsUSl7dmFyIG9lLGdlO2ZvcihRfHwoUT1SKSxHfHwoRz1wQygiIikpLG9lPTA7b2UhPVIubGVuZ3RoOysrb2UpZ2U9MjU1JigoZ2U9UltvZV0pPj41fGdlPDwzKSxRW29lXT1nZV49R1trXSxrPWsrMSYxNTty'@;
put 'ZXR1cm5bUSxrLEddfSgwLFEsayxHKTtyZXR1cm4gaz1vZVsxXSxvZVswXX19KGsucGFzc3dvcmQsMCkpfShTLDAsayxHKSxHfX0sNDk6e246IkZvbnQiLGY6ZnVuY3Rpb24gR0EoUyxSLGspe3ZhciBHPXtzejpTLnJlYWRfc2hpZnQoMikvMjB9LFE9T3coUyk7US5mQm9sZCYmKEcuYm9sZD0x'@;
put 'KSxRLmZJdGFsaWMmJihHLml0YWxpYz0xKSxRLmZVbmRlcmxpbmUmJihHLnVuZGVybGluZT0xKSxRLmZDb25kZW5zZSYmKEcuY29uZGVuc2U9MSksUS5mRXh0ZW5kJiYoRy5leHRlbmQ9MSksUS5mU2hhZG93JiYoRy5zaGFkb3c9MSksUS5mT3V0bGluZSYmKEcub3V0bGluZT0xKSxRLmZTdHJp'@;
put 'a2VvdXQmJihHLnN0cmlrZT0xKTt2YXIgb2U9ayYmay5iaWZmfHw4O2lmKDIhPW9lJiYoRy5pY3Y9Uy5yZWFkX3NoaWZ0KDIpLDMhPW9lJiY0IT1vZSkpe3N3aXRjaCg3MDA9PT1TLnJlYWRfc2hpZnQoMikmJihHLmJvbGQ9MSksUy5yZWFkX3NoaWZ0KDIpKXtjYXNlIDE6Ry52YWxpZ249InN1'@;
put 'cGVyIjticmVhaztjYXNlIDI6Ry52YWxpZ249InN1YiJ9dmFyIHBlPVMucmVhZF9zaGlmdCgxKTswIT1wZSYmKEcudW5kZXJsaW5lPXBlKTt2YXIgeWU9Uy5yZWFkX3NoaWZ0KDEpO3llPjAmJihHLmZhbWlseT15ZSk7dmFyIFBlPVMucmVhZF9zaGlmdCgxKTtQZT4wJiYoRy5jaGFyc2V0PVBl'@;
put 'KSxTLmwrPTF9cmV0dXJuIEcubmFtZT1VYShTLDAsayksR319LDUxOntuOiJQcmludFNpemUiLGY6RWN9LDYwOntuOiJDb250aW51ZSJ9LDYxOntuOiJXaW5kb3cxIixmOmZ1bmN0aW9uICR0ZShTKXtyZXR1cm57UG9zOltTLnJlYWRfc2hpZnQoMiksUy5yZWFkX3NoaWZ0KDIpXSxEaW06W1Mu'@;
put 'cmVhZF9zaGlmdCgyKSxTLnJlYWRfc2hpZnQoMildLEZsYWdzOlMucmVhZF9zaGlmdCgyKSxDdXJUYWI6Uy5yZWFkX3NoaWZ0KDIpLEZpcnN0VGFiOlMucmVhZF9zaGlmdCgyKSxTZWxlY3RlZDpTLnJlYWRfc2hpZnQoMiksVGFiUmF0aW86Uy5yZWFkX3NoaWZ0KDIpfX19LDY0OntuOiJCYWNr'@;
put 'dXAiLGY6dW99LDY1OntuOiJQYW5lIixmOmZ1bmN0aW9uIFlBKFMsUixrKXtpZihrJiZrLmJpZmY8NSlyZXR1cm57fTt2YXIgRz17fTtyZXR1cm4gRy54PVMucmVhZF9zaGlmdCgyKSxHLnk9Uy5yZWFkX3NoaWZ0KDIpLEcucndUb3A9Uy5yZWFkX3NoaWZ0KDIpLEcuY29sTGVmdD1TLnJlYWRf'@;
put 'c2hpZnQoMiksRy5wbm5BY2N0PVMucmVhZF9zaGlmdCgxKSxTLnJlYWRfc2hpZnQoMSksR319LDY2OntuOiJDb2RlUGFnZSIsZjpFY30sNzc6e246IlBscyIsZjpJbn0sODA6e246IkRDb24ifSw4MTp7bjoiRENvblJlZiJ9LDgyOntuOiJEQ29uTmFtZSJ9LDg1OntuOiJEZWZDb2xXaWR0aCIs'@;
put 'ZjpFY30sODk6e246IlhDVCJ9LDkwOntuOiJDUk4ifSw5MTp7bjoiRmlsZVNoYXJpbmcifSw5Mjp7bjoiV3JpdGVBY2Nlc3MiLGY6ZnVuY3Rpb24gS3coUyxSLGspe2lmKGsuZW5jKXJldHVybiBTLmwrPVIsIiI7dmFyIEc9Uy5sLFE9WDAoUywwLGspO3JldHVybiBTLnJlYWRfc2hpZnQoUitH'@;
put 'LVMubCksUX19LDkzOntuOiJPYmoiLGY6ZnVuY3Rpb24gZFYoUyxSLGspe2lmKGsmJmsuYmlmZjw4KXJldHVybiBmdW5jdGlvbiB0ayhTLFIsayl7Uy5sKz00O3ZhciBHPVMucmVhZF9zaGlmdCgyKSxRPVMucmVhZF9zaGlmdCgyKSxvZT1TLnJlYWRfc2hpZnQoMik7Uy5sKz0yLFMubCs9MixT'@;
put 'LmwrPTIsUy5sKz0yLFMubCs9MixTLmwrPTIsUy5sKz0yLFMubCs9MixTLmwrPTIsUy5sKz02O3ZhciBnZT1bXTtyZXR1cm4gZ2UucHVzaCgoZWtbR118fEluKShTLFItPTM2LGspKSx7Y21vOltRLEcsb2VdLGZ0OmdlfX0oUyxSLGspO3ZhciBHPWI1KFMpLFE9ZnVuY3Rpb24gSjAoUyxSLGsp'@;
put 'e2Zvcih2YXIgRz1TLmwrUixRPVtdO1MubDxHOyl7dmFyIG9lPVMucmVhZF9zaGlmdCgyKTtTLmwtPTI7dHJ5e1Fbb2VdPUVmW29lXShTLEctUy5sKX1jYXRjaHtyZXR1cm4gUy5sPUcsUX19cmV0dXJuIFMubCE9RyYmKFMubD1HKSxRfShTLFItMjIpO3JldHVybntjbW86RyxmdDpRfX19LDk0'@;
put 'OntuOiJVbmNhbGNlZCJ9LDk1OntuOiJDYWxjU2F2ZVJlY2FsYyIsZjp1b30sOTY6e246IlRlbXBsYXRlIn0sOTc6e246IkludGwifSw5OTp7bjoiT2JqUHJvdGVjdCIsZjp1b30sMTI1OntuOiJDb2xJbmZvIixmOnJDfSwxMjg6e246Ikd1dHMiLGY6ZnVuY3Rpb24gc1YoUyl7Uy5sKz00O3Zh'@;
put 'ciBSPVtTLnJlYWRfc2hpZnQoMiksUy5yZWFkX3NoaWZ0KDIpXTtpZigwIT09UlswXSYmUlswXS0tLDAhPT1SWzFdJiZSWzFdLS0sUlswXT43fHxSWzFdPjcpdGhyb3cgbmV3IEVycm9yKCJCYWQgR3V0dGVyczogIitSLmpvaW4oInwiKSk7cmV0dXJuIFJ9fSwxMjk6e246IldzQm9vbCIsZjpm'@;
put 'dW5jdGlvbiBFdihTLFIsayl7dmFyIEc9ayYmOD09ay5iaWZmfHwyPT1SP1MucmVhZF9zaGlmdCgyKTooUy5sKz1SLDApO3JldHVybntmRGlhbG9nOjE2JkcsZkJlbG93OjY0JkcsZlJpZ2h0OjEyOCZHfX19LDEzMDp7bjoiR3JpZFNldCIsZjpFY30sMTMxOntuOiJIQ2VudGVyIixmOnVvfSwx'@;
put 'MzI6e246IlZDZW50ZXIiLGY6dW99LDEzMzp7bjoiQm91bmRTaGVldDgiLGY6ZnVuY3Rpb24gWjYoUyxSLGspe3ZhciBHPVMucmVhZF9zaGlmdCg0KSxRPTMmUy5yZWFkX3NoaWZ0KDEpLG9lPVMucmVhZF9zaGlmdCgxKTtzd2l0Y2gob2Upe2Nhc2UgMDpvZT0iV29ya3NoZWV0IjticmVhaztj'@;
put 'YXNlIDE6b2U9Ik1hY3Jvc2hlZXQiO2JyZWFrO2Nhc2UgMjpvZT0iQ2hhcnRzaGVldCI7YnJlYWs7Y2FzZSA2Om9lPSJWQkFNb2R1bGUifXZhciBnZT1VYShTLDAsayk7cmV0dXJuIDA9PT1nZS5sZW5ndGgmJihnZT0iU2hlZXQxIikse3BvczpHLGhzOlEsZHQ6b2UsbmFtZTpnZX19fSwxMzQ6'@;
put 'e246IldyaXRlUHJvdGVjdCJ9LDE0MDp7bjoiQ291bnRyeSIsZjpmdW5jdGlvbiBtVihTKXt2YXIgayxSPVswLDBdO3JldHVybiBrPVMucmVhZF9zaGlmdCgyKSxSWzBdPUQ2W2tdfHxrLGs9Uy5yZWFkX3NoaWZ0KDIpLFJbMV09RDZba118fGssUn19LDE0MTp7bjoiSGlkZU9iaiIsZjpFY30s'@;
put 'MTQ0OntuOiJTb3J0In0sMTQ2OntuOiJQYWxldHRlIixmOmZ1bmN0aW9uIHd0KFMpe2Zvcih2YXIgUj1TLnJlYWRfc2hpZnQoMiksaz1bXTtSLS0gPjA7KWsucHVzaCh1ZChTKSk7cmV0dXJuIGt9fSwxNTE6e246IlN5bmMifSwxNTI6e246IkxQciJ9LDE1Mzp7bjoiRHhHQ29sIn0sMTU0Ontu'@;
put 'OiJGbkdyb3VwTmFtZSJ9LDE1NTp7bjoiRmlsdGVyTW9kZSJ9LDE1Njp7bjoiQnVpbHRJbkZuR3JvdXBDb3VudCIsZjpFY30sMTU3OntuOiJBdXRvRmlsdGVySW5mbyJ9LDE1ODp7bjoiQXV0b0ZpbHRlciJ9LDE2MDp7bjoiU2NsIixmOm5rfSwxNjE6e246IlNldHVwIixmOmZ1bmN0aW9uIGgy'@;
put 'KFMsUil7dmFyIGs9e307cmV0dXJuIFI8MzJ8fChTLmwrPTE2LGsuaGVhZGVyPVBsKFMpLGsuZm9vdGVyPVBsKFMpLFMubCs9Miksa319LDE3NDp7bjoiU2Nlbk1hbiJ9LDE3NTp7bjoiU0NFTkFSSU8ifSwxNzY6e246IlN4VmlldyJ9LDE3Nzp7bjoiU3h2ZCJ9LDE3ODp7bjoiU1hWSSJ9LDE4'@;
put 'MDp7bjoiU3hJdmQifSwxODE6e246IlNYTEkifSwxODI6e246IlNYUEkifSwxODQ6e246IkRvY1JvdXRlIn0sMTg1OntuOiJSZWNpcE5hbWUifSwxODk6e246Ik11bFJrIixmOmZ1bmN0aW9uIG9WKFMsUil7Zm9yKHZhciBrPVMubCtSLTIsRz1TLnJlYWRfc2hpZnQoMiksUT1TLnJlYWRfc2hp'@;
put 'ZnQoMiksb2U9W107Uy5sPGs7KW9lLnB1c2god28oUykpO2lmKFMubCE9PWspdGhyb3cgbmV3IEVycm9yKCJNdWxSSyByZWFkIGVycm9yIik7dmFyIGdlPVMucmVhZF9zaGlmdCgyKTtpZihvZS5sZW5ndGghPWdlLVErMSl0aHJvdyBuZXcgRXJyb3IoIk11bFJLIGxlbmd0aCBtaXNtYXRjaCIp'@;
put 'O3JldHVybntyOkcsYzpRLEM6Z2UscmtyZWM6b2V9fX0sMTkwOntuOiJNdWxCbGFuayIsZjpmdW5jdGlvbiBYdGUoUyxSKXtmb3IodmFyIGs9Uy5sK1ItMixHPVMucmVhZF9zaGlmdCgyKSxRPVMucmVhZF9zaGlmdCgyKSxvZT1bXTtTLmw8azspb2UucHVzaChTLnJlYWRfc2hpZnQoMikpO2lm'@;
put 'KFMubCE9PWspdGhyb3cgbmV3IEVycm9yKCJNdWxCbGFuayByZWFkIGVycm9yIik7dmFyIGdlPVMucmVhZF9zaGlmdCgyKTtpZihvZS5sZW5ndGghPWdlLVErMSl0aHJvdyBuZXcgRXJyb3IoIk11bEJsYW5rIGxlbmd0aCBtaXNtYXRjaCIpO3JldHVybntyOkcsYzpRLEM6Z2UsaXhmZTpvZX19'@;
put 'fSwxOTM6e246Ik1tcyIsZjpyMn0sMTk3OntuOiJTWERJIn0sMTk4OntuOiJTWERCIn0sMTk5OntuOiJTWEZEQiJ9LDIwMDp7bjoiU1hEQkIifSwyMDE6e246IlNYTnVtIn0sMjAyOntuOiJTeEJvb2wiLGY6dW99LDIwMzp7bjoiU3hFcnIifSwyMDQ6e246IlNYSW50In0sMjA1OntuOiJTWFN0'@;
put 'cmluZyJ9LDIwNjp7bjoiU1hEdHIifSwyMDc6e246IlN4TmlsIn0sMjA4OntuOiJTWFRibCJ9LDIwOTp7bjoiU1hUQlJHSUlUTSJ9LDIxMDp7bjoiU3hUYnBnIn0sMjExOntuOiJPYlByb2oifSwyMTM6e246IlNYU3RyZWFtSUQifSwyMTU6e246IkRCQ2VsbCJ9LDIxNjp7bjoiU1hSbmcifSwy'@;
put 'MTc6e246IlN4SXN4b3BlciJ9LDIxODp7bjoiQm9va0Jvb2wiLGY6RWN9LDIyMDp7bjoiRGJPclBhcmFtUXJ5In0sMjIxOntuOiJTY2VuYXJpb1Byb3RlY3QiLGY6dW99LDIyMjp7bjoiT2xlT2JqZWN0U2l6ZSJ9LDIyNDp7bjoiWEYiLGY6ZnVuY3Rpb24gSncoUyxSLGspe3ZhciBHPXt9O3Jl'@;
put 'dHVybiBHLmlmbnQ9Uy5yZWFkX3NoaWZ0KDIpLEcubnVtRm10SWQ9Uy5yZWFkX3NoaWZ0KDIpLEcuZmxhZ3M9Uy5yZWFkX3NoaWZ0KDIpLEcuZlN0eWxlPUcuZmxhZ3M+PjImMSxHLmRhdGE9ZnVuY3Rpb24gQ2woUyxSLGssRyl7dmFyIFE9e30sb2U9Uy5yZWFkX3NoaWZ0KDQpLGdlPVMucmVh'@;
put 'ZF9zaGlmdCg0KSxwZT1TLnJlYWRfc2hpZnQoNCkseWU9Uy5yZWFkX3NoaWZ0KDIpO2lmKFEucGF0dGVyblR5cGU9aHZbcGU+PjI2XSwhRy5jZWxsU3R5bGVzKXJldHVybiBRO3ZhciBQZT03Jm9lO3N3aXRjaChQZSl7Y2FzZSAxOlEuaGFsaWduPSJsZWZ0IjticmVhaztjYXNlIDI6US5oYWxp'@;
put 'Z249ImNlbnRlciI7YnJlYWs7Y2FzZSAzOlEuaGFsaWduPSJyaWdodCJ9c3dpdGNoKFEuZldyYXA9b2U+PjMmMSxQZT1vZT4+NCY3KXtjYXNlIDA6US52YWxpZ249InRvcCI7YnJlYWs7Y2FzZSAxOlEudmFsaWduPSJjZW50ZXIiO2JyZWFrO2Nhc2UgMjpRLnZhbGlnbj0iYm90dG9tIn1yZXR1'@;
put 'cm4gUS5mSnVzdExhc3Q9b2U+PjcmMSxRLnRyb3Q9b2U+PjgmMjU1LFEuY0luZGVudD1vZT4+MTYmMTUsUS5mU2hyaW5rVG9GaXQ9b2U+PjIwJjEsUS5pUmVhZE9yZGVyPW9lPj4yMiYyLFEuZkF0ck51bT1vZT4+MjYmMSxRLmZBdHJGbnQ9b2U+PjI3JjEsUS5mQXRyQWxjPW9lPj4yOCYxLFEu'@;
put 'ZkF0ckJkcj1vZT4+MjkmMSxRLmZBdHJQYXQ9b2U+PjMwJjEsUS5mQXRyUHJvdD1vZT4+MzEmMSxRLmRnTGVmdD0xNSZnZSxRLmRnUmlnaHQ9Z2U+PjQmMTUsUS5kZ1RvcD1nZT4+OCYxNSxRLmRnQm90dG9tPWdlPj4xMiYxNSxRLmljdkxlZnQ9Z2U+PjE2JjEyNyxRLmljdlJpZ2h0PWdlPj4y'@;
put 'MyYxMjcsUS5ncmJpdERpYWc9Z2U+PjMwJjMsUS5pY3ZUb3A9MTI3JnBlLFEuaWN2Qm90dG9tPXBlPj43JjEyNyxRLmljdkRpYWc9cGU+PjE0JjEyNyxRLmRnRGlhZz1wZT4+MjEmMTUsUS5pY3ZGb3JlPTEyNyZ5ZSxRLmljdkJhY2s9eWU+PjcmMTI3LFEuZnN4QnV0dG9uPXllPj4xNCYxLFF9'@;
put 'KFMsMCwwLGspLEd9fSwyMjU6e246IkludGVyZmFjZUhkciIsZjpmdW5jdGlvbiAkdyhTLFIpe3JldHVybiAwPT09Unx8Uy5yZWFkX3NoaWZ0KDIpLDEyMDB9fSwyMjY6e246IkludGVyZmFjZUVuZCIsZjpyMn0sMjI3OntuOiJTWFZTIn0sMjI5OntuOiJNZXJnZUNlbGxzIixmOmZ1bmN0aW9u'@;
put 'IEp0ZShTLFIpe2Zvcih2YXIgaz1bXSxHPVMucmVhZF9zaGlmdCgyKTtHLS07KWsucHVzaChzMihTKSk7cmV0dXJuIGt9fSwyMzM6e246IkJrSGltIn0sMjM1OntuOiJNc29EcmF3aW5nR3JvdXAifSwyMzY6e246Ik1zb0RyYXdpbmcifSwyMzc6e246Ik1zb0RyYXdpbmdTZWxlY3Rpb24ifSwy'@;
put 'Mzk6e246IlBob25ldGljSW5mbyJ9LDI0MDp7bjoiU3hSdWxlIn0sMjQxOntuOiJTWEV4In0sMjQyOntuOiJTeEZpbHQifSwyNDQ6e246IlN4RFhGIn0sMjQ1OntuOiJTeEl0bSJ9LDI0Njp7bjoiU3hOYW1lIn0sMjQ3OntuOiJTeFNlbGVjdCJ9LDI0ODp7bjoiU1hQYWlyIn0sMjQ5OntuOiJT'@;
put 'eEZtbGEifSwyNTE6e246IlN4Rm9ybWF0In0sMjUyOntuOiJTU1QiLGY6ZnVuY3Rpb24gVzYoUyxSKXtmb3IodmFyIGs9Uy5sK1IsRz1TLnJlYWRfc2hpZnQoNCksUT1TLnJlYWRfc2hpZnQoNCksb2U9W10sZ2U9MDtnZSE9USYmUy5sPGs7KytnZSlvZS5wdXNoKGZjKFMpKTtyZXR1cm4gb2Uu'@;
put 'Q291bnQ9RyxvZS5VbmlxdWU9USxvZX19LDI1Mzp7bjoiTGFiZWxTc3QiLGY6ZnVuY3Rpb24gclYoUyl7dmFyIFI9dzAoUyk7cmV0dXJuIFIuaXNzdD1TLnJlYWRfc2hpZnQoNCksUn19LDI1NTp7bjoiRXh0U1NUIixmOmZ1bmN0aW9uIENlKFMsUil7dmFyIGs9e307cmV0dXJuIGsuZHNzdD1T'@;
put 'LnJlYWRfc2hpZnQoMiksUy5sKz1SLTIsa319LDI1Njp7bjoiU1hWREV4In0sMjU5OntuOiJTWEZvcm11bGEifSwyOTA6e246IlNYREJFeCJ9LDMxMTp7bjoiUlJESW5zRGVsIn0sMzEyOntuOiJSUkRIZWFkIn0sMzE1OntuOiJSUkRDaGdDZWxsIn0sMzE3OntuOiJSUlRhYklkIixmOnc0fSwz'@;
put 'MTg6e246IlJSRFJlblNoZWV0In0sMzE5OntuOiJSUlNvcnQifSwzMjA6e246IlJSRE1vdmUifSwzMzA6e246IlJSRm9ybWF0In0sMzMxOntuOiJSUkF1dG9GbXQifSwzMzM6e246IlJSSW5zZXJ0U2gifSwzMzQ6e246IlJSRE1vdmVCZWdpbiJ9LDMzNTp7bjoiUlJETW92ZUVuZCJ9LDMzNjp7'@;
put 'bjoiUlJESW5zRGVsQmVnaW4ifSwzMzc6e246IlJSREluc0RlbEVuZCJ9LDMzODp7bjoiUlJEQ29uZmxpY3QifSwzMzk6e246IlJSRERlZk5hbWUifSwzNDA6e246IlJSRFJzdEV0eHAifSwzNTE6e246IkxSbmcifSwzNTI6e246IlVzZXNFTEZzIixmOnVvfSwzNTM6e246IkRTRiIsZjpyMn0s'@;
put 'NDAxOntuOiJDVXNyIn0sNDAyOntuOiJDYlVzciJ9LDQwMzp7bjoiVXNySW5mbyJ9LDQwNDp7bjoiVXNyRXhjbCJ9LDQwNTp7bjoiRmlsZUxvY2sifSw0MDY6e246IlJSREluZm8ifSw0MDc6e246IkJDVXNycyJ9LDQwODp7bjoiVXNyQ2hrIn0sNDI1OntuOiJVc2VyQlZpZXcifSw0MjY6e246'@;
put 'IlVzZXJTVmlld0JlZ2luIn0sNDI3OntuOiJVc2VyU1ZpZXdFbmQifSw0Mjg6e246IlJSRFVzZXJWaWV3In0sNDI5OntuOiJRc2kifSw0MzA6e246IlN1cEJvb2siLGY6ZnVuY3Rpb24gZDIoUyxSLGspe3ZhciBHPVMubCtSLFE9Uy5yZWFkX3NoaWZ0KDIpLG9lPVMucmVhZF9zaGlmdCgyKTtp'@;
put 'ZihrLnNiY2NoPW9lLDEwMjU9PW9lfHwxNDg0OT09b2UpcmV0dXJuW29lLFFdO2lmKG9lPDF8fG9lPjI1NSl0aHJvdyBuZXcgRXJyb3IoIlVuZXhwZWN0ZWQgU3VwQm9vayB0eXBlOiAiK29lKTtmb3IodmFyIGdlPXJjKFMsb2UpLHBlPVtdO0c+Uy5sOylwZS5wdXNoKG51KFMpKTtyZXR1cm5b'@;
put 'b2UsUSxnZSxwZV19fSw0MzE6e246IlByb3Q0UmV2IixmOnVvfSw0MzI6e246IkNvbmRGbXQifSw0MzM6e246IkNGIn0sNDM0OntuOiJEVmFsIn0sNDM3OntuOiJEQ29uQmluIn0sNDM4OntuOiJUeE8iLGY6ZnVuY3Rpb24gXzUoUyxSLGspe3ZhciBHPVMubCxRPSIiLG9lPS0xO3RyeXtTLmwr'@;
put 'PTQsLTE9PVswLDUsNywxMSwxMiwxNF0uaW5kZXhPZigoay5sYXN0b2JqfHx7Y21vOlswLDBdfSkuY21vWzFdKT9TLmwrPTY6ZnVuY3Rpb24gcGMoUyl7dmFyIFI9Uy5yZWFkX3NoaWZ0KDEpO1MubCsrO3ZhciBrPVMucmVhZF9zaGlmdCgyKTtTLmwrPTJ9KFMpO3ZhciB5ZT1TLnJlYWRfc2hp'@;
put 'ZnQoMik7Uy5yZWFkX3NoaWZ0KDIpLG9lPVMucmVhZF9zaGlmdCgyKTt2YXIgTmU9Uy5yZWFkX3NoaWZ0KDIpO1MubCs9TmU7Zm9yKHZhciBZZT0xO1llPFMubGVucy5sZW5ndGgtMTsrK1llKXtpZihTLmwtRyE9Uy5sZW5zW1llXSl0aHJvdyBuZXcgRXJyb3IoIlR4TzogYmFkIGNvbnRpbnVl'@;
put 'IHJlY29yZCIpO3ZhciBldD1TW1MubF07aWYoKFErPXJjKFMsUy5sZW5zW1llKzFdLVMubGVuc1tZZV0tMSkpLmxlbmd0aD49KGV0P3llOjIqeWUpKWJyZWFrfWlmKFEubGVuZ3RoIT09eWUmJlEubGVuZ3RoIT09Mip5ZSl0aHJvdyBuZXcgRXJyb3IoImNjaFRleHQ6ICIreWUrIiAhPSAiK1Eu'@;
put 'bGVuZ3RoKTtyZXR1cm4gUy5sPUcrUix7dDpRLGlmbnQ6b2V9fWNhdGNoe3JldHVybiBTLmw9RytSLHt0OlEsaWZudDpvZX19fX0sNDM5OntuOiJSZWZyZXNoQWxsIixmOnVvfSw0NDA6e246IkhMaW5rIixmOmZ1bmN0aW9uIGhWKFMsUil7dmFyIGs9czIoUyk7Uy5sKz0xNjt2YXIgRz1mdW5j'@;
put 'dGlvbiBabChTLFIpe3ZhciBrPVMubCtSLEc9Uy5yZWFkX3NoaWZ0KDQpO2lmKDIhPT1HKXRocm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkIHN0cmVhbVZlcnNpb246ICIrRyk7dmFyIFE9Uy5yZWFkX3NoaWZ0KDIpO1MubCs9Mjt2YXIgb2UsZ2UscGUseWUsTmUsWWUsUGU9IiI7MTYmUSYm'@;
put 'KG9lPUM0KFMpKSwxMjgmUSYmKGdlPUM0KFMpKSwhKDI1NyZ+USkmJihwZT1DNChTKSksMT09KDI1NyZRKSYmKHllPWZ1bmN0aW9uIFNmKFMsUil7dmFyIGs9Uy5yZWFkX3NoaWZ0KDE2KTtzd2l0Y2goayl7Y2FzZSJlMGM5ZWE3OWY5YmFjZTExOGM4MjAwYWEwMDRiYTkwYiI6cmV0dXJuIGZ1'@;
put 'bmN0aW9uIEwxKFMpe3ZhciBSPVMucmVhZF9zaGlmdCg0KSxrPVMubCxHPSExO1I+MjQmJihTLmwrPVItMjQsIjc5NTg4MWY0M2IxZDdmNDhhZjJjODI1ZGM0ODUyNzYzIj09PVMucmVhZF9zaGlmdCgxNikmJihHPSEwKSxTLmw9ayk7dmFyIFE9Uy5yZWFkX3NoaWZ0KChHP1ItMjQ6Uik+PjEs'@;
put 'InV0ZjE2bGUiKS5yZXBsYWNlKEUsIiIpO3JldHVybiBHJiYoUy5sKz0yNCksUX0oUyk7Y2FzZSIwMzAzMDAwMDAwMDAwMDAwYzAwMDAwMDAwMDAwMDA0NiI6cmV0dXJuIGZ1bmN0aW9uIGJvKFMpe2Zvcih2YXIgUj1TLnJlYWRfc2hpZnQoMiksaz0iIjtSLS0gPjA7KWsrPSIuLi8iO3ZhciBH'@;
put 'PVMucmVhZF9zaGlmdCgwLCJscHN0ci1hbnNpIik7aWYoUy5sKz0yLDU3MDA1IT1TLnJlYWRfc2hpZnQoMikpdGhyb3cgbmV3IEVycm9yKCJCYWQgRmlsZU1vbmlrZXIiKTtpZigwPT09Uy5yZWFkX3NoaWZ0KDQpKXJldHVybiBrK0cucmVwbGFjZSgvXFwvZywiLyIpO3ZhciBvZT1TLnJlYWRf'@;
put 'c2hpZnQoNCk7aWYoMyE9Uy5yZWFkX3NoaWZ0KDIpKXRocm93IG5ldyBFcnJvcigiQmFkIEZpbGVNb25pa2VyIik7cmV0dXJuIGsrUy5yZWFkX3NoaWZ0KG9lPj4xLCJ1dGYxNmxlIikucmVwbGFjZShFLCIiKX0oUyk7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIE1vbmlr'@;
put 'ZXIgIitrKX19KFMpKSw4JlEmJihQZT1DNChTKSksMzImUSYmKE5lPVMucmVhZF9zaGlmdCgxNikpLDY0JlEmJihZZT1IMyhTKSksUy5sPWs7dmFyIGV0PWdlfHxwZXx8eWV8fCIiO2V0JiZQZSYmKGV0Kz0iIyIrUGUpLGV0fHwoZXQ9IiMiK1BlKSwyJlEmJiIvIj09ZXQuY2hhckF0KDApJiYi'@;
put 'LyIhPWV0LmNoYXJBdCgxKSYmKGV0PSJmaWxlOi8vIitldCk7dmFyIGN0PXtUYXJnZXQ6ZXR9O3JldHVybiBOZSYmKGN0Lmd1aWQ9TmUpLFllJiYoY3QudGltZT1ZZSksb2UmJihjdC5Ub29sdGlwPW9lKSxjdH0oUyxSLTI0KTtyZXR1cm5bayxHXX19LDQ0MTp7bjoiTGVsIn0sNDQyOntuOiJD'@;
put 'b2RlTmFtZSIsZjpudX0sNDQzOntuOiJTWEZEQlR5cGUifSw0NDQ6e246IlByb3Q0UmV2UGFzcyIsZjpFY30sNDQ1OntuOiJPYk5vTWFjcm9zIn0sNDQ2OntuOiJEdiJ9LDQ0ODp7bjoiRXhjZWw5RmlsZSIsZjpyMn0sNDQ5OntuOiJSZWNhbGNJZCIsZjpmdW5jdGlvbiBkZChTKXtyZXR1cm4g'@;
put 'Uy5yZWFkX3NoaWZ0KDIpLFMucmVhZF9zaGlmdCg0KX0scjoyfSw0NTA6e246IkVudEV4VTIiLGY6cjJ9LDUxMjp7bjoiRGltZW5zaW9ucyIsZjpYd30sNTEzOntuOiJCbGFuayIsZjpRdGV9LDUxNTp7bjoiTnVtYmVyIixmOmZ1bmN0aW9uIGxWKFMsUixrKXtrLmJpZmZndWVzcyYmMj09ay5i'@;
put 'aWZmJiYoay5iaWZmPTUpO3ZhciBHPXcwKFMpLFE9UGwoUyk7cmV0dXJuIEcudmFsPVEsR319LDUxNjp7bjoiTGFiZWwiLGY6ZnVuY3Rpb24gS0EoUyxSLGspe2suYmlmZmd1ZXNzJiYyPT1rLmJpZmYmJihrLmJpZmY9NSk7dmFyIFE9dzAoUyk7Mj09ay5iaWZmJiZTLmwrKzt2YXIgb2U9bnUo'@;
put 'UywwLGspO3JldHVybiBRLnZhbD1vZSxRfX0sNTE3OntuOiJCb29sRXJyIixmOkU0fSw1MTk6e246IlN0cmluZyIsZjpPMH0sNTIwOntuOiJSb3ciLGY6ZnVuY3Rpb24gS2UoUyl7dmFyIFI9e307Ui5yPVMucmVhZF9zaGlmdCgyKSxSLmM9Uy5yZWFkX3NoaWZ0KDIpLFIuY250PVMucmVhZF9z'@;
put 'aGlmdCgyKS1SLmM7dmFyIGs9Uy5yZWFkX3NoaWZ0KDIpO1MubCs9NDt2YXIgRz1TLnJlYWRfc2hpZnQoMSk7Uy5sKz0xO3ZhciBRPVMucmVhZF9zaGlmdCgyKTtyZXR1cm4gUi5peGZlPTQwOTUmUSw3JkcmJihSLmxldmVsPTcmRyksMzImRyYmKFIuaGlkZGVuPSEwKSw2NCZHJiYoUi5ocHQ9'@;
put 'ay8yMCksUn19LDUyMzp7bjoiSW5kZXgifSw1NDU6e246IkFycmF5IixmOmt2fSw1NDk6e246IkRlZmF1bHRSb3dIZWlnaHQiLGY6YzJ9LDU2Njp7bjoiVGFibGUifSw1NzQ6e246IldpbmRvdzIiLGY6ZnVuY3Rpb24gcXRlKFMsUixrKXtpZihrJiZrLmJpZmY+PTImJmsuYmlmZjw1KXJldHVy'@;
put 'bnt9O3ZhciBHPVMucmVhZF9zaGlmdCgyKTtyZXR1cm57UlRMOjY0JkcsZ3JpZDohISgyJkcpLGZyb3plbjohISg4JkcpfX19LDYzODp7bjoiUksiLGY6ZnVuY3Rpb24gWEEoUyl7dmFyIFI9Uy5yZWFkX3NoaWZ0KDIpLGs9Uy5yZWFkX3NoaWZ0KDIpLEc9d28oUyk7cmV0dXJue3I6UixjOmss'@;
put 'aXhmZTpHWzBdLHJrbnVtOkdbMV19fX0sNjU5OntuOiJTdHlsZSIsZjpmdW5jdGlvbiBMMChTLFIsayl7cmV0dXJuIFMubCs9Uix7fX19LDEwNDg6e246IkJpZ05hbWUifSwxMDU0OntuOiJGb3JtYXQiLGY6ZnVuY3Rpb24gcXcoUyxSLGspe3JldHVybltTLnJlYWRfc2hpZnQoMiksWDAoUyww'@;
put 'LGspXX19LDEwODQ6e246IkNvbnRpbnVlQmlnTmFtZSJ9LDEyMTI6e246IlNockZtbGEiLGY6ZnVuY3Rpb24gQXYoUyxSLGspe3ZhciBHPU00KFMpO1MubCsrO3ZhciBRPVMucmVhZF9zaGlmdCgxKTtyZXR1cm5bSzMoUyxSLT04LGspLFEsR119fSwyMDQ4OntuOiJITGlua1Rvb2x0aXAiLGY6'@;
put 'ZnVuY3Rpb24gcFYoUyxSKXtTLnJlYWRfc2hpZnQoMik7dmFyIGs9czIoUyksRz1TLnJlYWRfc2hpZnQoKFItMTApLzIsImRiY3MtY29udCIpO3JldHVybltrLEc9Ry5yZXBsYWNlKEUsIiIpXX19LDIwNDk6e246IldlYlB1YiJ9LDIwNTA6e246IlFzaVNYVGFnIn0sMjA1MTp7bjoiREJRdWVy'@;
put 'eUV4dCJ9LDIwNTI6e246IkV4dFN0cmluZyJ9LDIwNTM6e246IlR4dFFyeSJ9LDIwNTQ6e246IlFzaXIifSwyMDU1OntuOiJRc2lmIn0sMjA1Njp7bjoiUlJEVFFTSUYifSwyMDU3OntuOiJCT0YiLGY6VmN9LDIwNTg6e246Ik9sZURiQ29ubiJ9LDIwNTk6e246IldPcHQifSwyMDYwOntuOiJT'@;
put 'WFZpZXdFeCJ9LDIwNjE6e246IlNYVEgifSwyMDYyOntuOiJTWFBJRXgifSwyMDYzOntuOiJTWFZEVEV4In0sMjA2NDp7bjoiU1hWaWV3RXg5In0sMjA2Njp7bjoiQ29udGludWVGcnQifSwyMDY3OntuOiJSZWFsVGltZURhdGEifSwyMTI4OntuOiJDaGFydEZydEluZm8ifSwyMTI5OntuOiJG'@;
put 'cnRXcmFwcGVyIn0sMjEzMDp7bjoiU3RhcnRCbG9jayJ9LDIxMzE6e246IkVuZEJsb2NrIn0sMjEzMjp7bjoiU3RhcnRPYmplY3QifSwyMTMzOntuOiJFbmRPYmplY3QifSwyMTM0OntuOiJDYXRMYWIifSwyMTM1OntuOiJZTXVsdCJ9LDIxMzY6e246IlNYVmlld0xpbmsifSwyMTM3OntuOiJQ'@;
put 'aXZvdENoYXJ0Qml0cyJ9LDIxMzg6e246IkZydEZvbnRMaXN0In0sMjE0Njp7bjoiU2hlZXRFeHQifSwyMTQ3OntuOiJCb29rRXh0IixyOjEyfSwyMTQ4OntuOiJTWEFkZGwifSwyMTQ5OntuOiJDckVyciJ9LDIxNTA6e246IkhGUGljdHVyZSJ9LDIxNTE6e246IkZlYXRIZHIiLGY6cjJ9LDIx'@;
put 'NTI6e246IkZlYXQifSwyMTU0OntuOiJEYXRhTGFiRXh0In0sMjE1NTp7bjoiRGF0YUxhYkV4dENvbnRlbnRzIn0sMjE1Njp7bjoiQ2VsbFdhdGNoIn0sMjE2MTp7bjoiRmVhdEhkcjExIn0sMjE2Mjp7bjoiRmVhdHVyZTExIn0sMjE2NDp7bjoiRHJvcERvd25PYmpJZHMifSwyMTY1OntuOiJD'@;
put 'b250aW51ZUZydDExIn0sMjE2Njp7bjoiRENvbm4ifSwyMTY3OntuOiJMaXN0MTIifSwyMTY4OntuOiJGZWF0dXJlMTIifSwyMTY5OntuOiJDb25kRm10MTIifSwyMTcwOntuOiJDRjEyIn0sMjE3MTp7bjoiQ0ZFeCJ9LDIxNzI6e246IlhGQ1JDIixmOmZ1bmN0aW9uIHVsKFMpe1MubCs9Mjt2'@;
put 'YXIgUj17Y3hmczowLGNyYzowfTtyZXR1cm4gUi5jeGZzPVMucmVhZF9zaGlmdCgyKSxSLmNyYz1TLnJlYWRfc2hpZnQoNCksUn0scjoxMn0sMjE3Mzp7bjoiWEZFeHQiLGY6ZnVuY3Rpb24gc0IoUyxSKXtTLmwrPTI7dmFyIEc9Uy5yZWFkX3NoaWZ0KDIpO1MubCs9Mjtmb3IodmFyIFE9Uy5y'@;
put 'ZWFkX3NoaWZ0KDIpLG9lPVtdO1EtLSA+MDspb2UucHVzaCgkdihTKSk7cmV0dXJue2l4ZmU6RyxleHQ6b2V9fSxyOjEyfSwyMTc0OntuOiJBdXRvRmlsdGVyMTIifSwyMTc1OntuOiJDb250aW51ZUZydDEyIn0sMjE4MDp7bjoiTURUSW5mbyJ9LDIxODE6e246Ik1EWFN0ciJ9LDIxODI6e246'@;
put 'Ik1EWFR1cGxlIn0sMjE4Mzp7bjoiTURYU2V0In0sMjE4NDp7bjoiTURYUHJvcCJ9LDIxODU6e246Ik1EWEtQSSJ9LDIxODY6e246Ik1EQiJ9LDIxODc6e246IlBMViJ9LDIxODg6e246IkNvbXBhdDEyIixmOnVvLHI6MTJ9LDIxODk6e246IkRYRiJ9LDIxOTA6e246IlRhYmxlU3R5bGVzIixy'@;
put 'OjEyfSwyMTkxOntuOiJUYWJsZVN0eWxlIn0sMjE5Mjp7bjoiVGFibGVTdHlsZUVsZW1lbnQifSwyMTk0OntuOiJTdHlsZUV4dCJ9LDIxOTU6e246Ik5hbWVQdWJsaXNoIn0sMjE5Njp7bjoiTmFtZUNtdCIsZjpmdW5jdGlvbiBHNihTLFIsayl7aWYoIShrLmJpZmY8OCkpe3ZhciBHPVMucmVh'@;
put 'ZF9zaGlmdCgyKSxRPVMucmVhZF9zaGlmdCgyKTtyZXR1cm5bcmMoUyxHLGspLHJjKFMsUSxrKV19Uy5sKz1SfSxyOjEyfSwyMTk3OntuOiJTb3J0RGF0YSJ9LDIxOTg6e246IlRoZW1lIixmOmZ1bmN0aW9uIGFCKFMsUixrKXt2YXIgRz1TLmwrUjtpZigxMjQyMjYhPT1TLnJlYWRfc2hpZnQo'@;
put 'NCkpe2lmKCFrLmNlbGxTdHlsZXMpcmV0dXJuIHZvaWQoUy5sPUcpO3ZhciBnZSxvZT1TLnNsaWNlKFMubCk7Uy5sPUc7dHJ5e2dlPWNuKG9lLHt0eXBlOiJhcnJheSJ9KX1jYXRjaHtyZXR1cm59dmFyIHBlPW5yKGdlLCJ0aGVtZS90aGVtZS90aGVtZTEueG1sIiwhMCk7aWYocGUpcmV0dXJu'@;
put 'IEVDKHBlLGspfX0scjoxMn0sMjE5OTp7bjoiR1VJRFR5cGVMaWIifSwyMjAwOntuOiJGbkdycDEyIn0sMjIwMTp7bjoiTmFtZUZuR3JwMTIifSwyMjAyOntuOiJNVFJTZXR0aW5ncyIsZjpmdW5jdGlvbiBUNChTKXtyZXR1cm5bMCE9PVMucmVhZF9zaGlmdCg0KSwwIT09Uy5yZWFkX3NoaWZ0'@;
put 'KDQpLFMucmVhZF9zaGlmdCg0KV19LHI6MTJ9LDIyMDM6e246IkNvbXByZXNzUGljdHVyZXMiLGY6cjJ9LDIyMDQ6e246IkhlYWRlckZvb3RlciJ9LDIyMDU6e246IkNydExheW91dDEyIn0sMjIwNjp7bjoiQ3J0TWxGcnQifSwyMjA3OntuOiJDcnRNbEZydENvbnRpbnVlIn0sMjIxMTp7bjoi'@;
put 'Rm9yY2VGdWxsQ2FsY3VsYXRpb24iLGY6ZnVuY3Rpb24gSXQoUyl7dmFyIFI9ZnVuY3Rpb24gbzIoUyl7dmFyIFI9Uy5yZWFkX3NoaWZ0KDIpLGs9Uy5yZWFkX3NoaWZ0KDIpO3JldHVybiBTLmwrPTgse3R5cGU6UixmbGFnczprfX0oUyk7aWYoMjIxMSE9Ui50eXBlKXRocm93IG5ldyBFcnJv'@;
put 'cigiSW52YWxpZCBGdXR1cmUgUmVjb3JkICIrUi50eXBlKTtyZXR1cm4gMCE9PVMucmVhZF9zaGlmdCg0KX19LDIyMTI6e246IlNoYXBlUHJvcHNTdHJlYW0ifSwyMjEzOntuOiJUZXh0UHJvcHNTdHJlYW0ifSwyMjE0OntuOiJSaWNoVGV4dFN0cmVhbSJ9LDIyMTU6e246IkNydExheW91dDEy'@;
put 'QSJ9LDQwOTc6e246IlVuaXRzIn0sNDA5ODp7bjoiQ2hhcnQifSw0MDk5OntuOiJTZXJpZXMifSw0MTAyOntuOiJEYXRhRm9ybWF0In0sNDEwMzp7bjoiTGluZUZvcm1hdCJ9LDQxMDU6e246Ik1hcmtlckZvcm1hdCJ9LDQxMDY6e246IkFyZWFGb3JtYXQifSw0MTA3OntuOiJQaWVGb3JtYXQi'@;
put 'fSw0MTA4OntuOiJBdHRhY2hlZExhYmVsIn0sNDEwOTp7bjoiU2VyaWVzVGV4dCJ9LDQxMTY6e246IkNoYXJ0Rm9ybWF0In0sNDExNzp7bjoiTGVnZW5kIn0sNDExODp7bjoiU2VyaWVzTGlzdCJ9LDQxMTk6e246IkJhciJ9LDQxMjA6e246IkxpbmUifSw0MTIxOntuOiJQaWUifSw0MTIyOntu'@;
put 'OiJBcmVhIn0sNDEyMzp7bjoiU2NhdHRlciJ9LDQxMjQ6e246IkNydExpbmUifSw0MTI1OntuOiJBeGlzIn0sNDEyNjp7bjoiVGljayJ9LDQxMjc6e246IlZhbHVlUmFuZ2UifSw0MTI4OntuOiJDYXRTZXJSYW5nZSJ9LDQxMjk6e246IkF4aXNMaW5lIn0sNDEzMDp7bjoiQ3J0TGluayJ9LDQx'@;
put 'MzI6e246IkRlZmF1bHRUZXh0In0sNDEzMzp7bjoiVGV4dCJ9LDQxMzQ6e246IkZvbnRYIixmOkVjfSw0MTM1OntuOiJPYmplY3RMaW5rIn0sNDE0Njp7bjoiRnJhbWUifSw0MTQ3OntuOiJCZWdpbiJ9LDQxNDg6e246IkVuZCJ9LDQxNDk6e246IlBsb3RBcmVhIn0sNDE1NDp7bjoiQ2hhcnQz'@;
put 'ZCJ9LDQxNTY6e246IlBpY0YifSw0MTU3OntuOiJEcm9wQmFyIn0sNDE1ODp7bjoiUmFkYXIifSw0MTU5OntuOiJTdXJmIn0sNDE2MDp7bjoiUmFkYXJBcmVhIn0sNDE2MTp7bjoiQXhpc1BhcmVudCJ9LDQxNjM6e246IkxlZ2VuZEV4Y2VwdGlvbiJ9LDQxNjQ6e246IlNodFByb3BzIixmOmZ1'@;
put 'bmN0aW9uIGFDKFMsUixrKXt2YXIgRz17YXJlYTohMX07aWYoNSE9ay5iaWZmKXJldHVybiBTLmwrPVIsRzt2YXIgUT1TLnJlYWRfc2hpZnQoMSk7cmV0dXJuIFMubCs9MywxNiZRJiYoRy5hcmVhPSEwKSxHfX0sNDE2NTp7bjoiU2VyVG9DcnQifSw0MTY2OntuOiJBeGVzVXNlZCJ9LDQxNjg6'@;
put 'e246IlNCYXNlUmVmIn0sNDE3MDp7bjoiU2VyUGFyZW50In0sNDE3MTp7bjoiU2VyQXV4VHJlbmQifSw0MTc0OntuOiJJRm10UmVjb3JkIn0sNDE3NTp7bjoiUG9zIn0sNDE3Njp7bjoiQWxSdW5zIn0sNDE3Nzp7bjoiQlJBSSJ9LDQxODc6e246IlNlckF1eEVyckJhciJ9LDQxODg6e246IkNs'@;
put 'cnRDbGllbnQiLGY6ZnVuY3Rpb24gbHMoUyl7Zm9yKHZhciBSPVMucmVhZF9zaGlmdCgyKSxrPVtdO1ItLSA+MDspay5wdXNoKHVkKFMpKTtyZXR1cm4ga319LDQxODk6e246IlNlckZtdCJ9LDQxOTE6e246IkNoYXJ0M0RCYXJTaGFwZSJ9LDQxOTI6e246IkZiaSJ9LDQxOTM6e246IkJvcFBv'@;
put 'cCJ9LDQxOTQ6e246IkF4Y0V4dCJ9LDQxOTU6e246IkRhdCJ9LDQxOTY6e246IlBsb3RHcm93dGgifSw0MTk3OntuOiJTSUluZGV4In0sNDE5ODp7bjoiR2VsRnJhbWUifSw0MTk5OntuOiJCb3BQb3BDdXN0b20ifSw0MjAwOntuOiJGYmkyIn0sMDp7bjoiRGltZW5zaW9ucyIsZjpYd30sMTp7'@;
put 'bjoiQklGRjJCTEFOSyJ9LDI6e246IkJJRkYySU5UIixmOmZ1bmN0aW9uIHlWKFMpe3ZhciBSPXcwKFMpOysrUy5sO3ZhciBrPVMucmVhZF9zaGlmdCgyKTtyZXR1cm4gUi50PSJuIixSLnZhbD1rLFJ9fSwzOntuOiJCSUZGMk5VTSIsZjpmdW5jdGlvbiBiVihTKXt2YXIgUj13MChTKTsrK1Mu'@;
put 'bDt2YXIgaz1QbChTKTtyZXR1cm4gUi50PSJuIixSLnZhbD1rLFJ9fSw0OntuOiJCSUZGMlNUUiIsZjpmdW5jdGlvbiBBZihTLFIsayl7ay5iaWZmZ3Vlc3MmJjU9PWsuYmlmZiYmKGsuYmlmZj0yKTt2YXIgRz13MChTKTsrK1MubDt2YXIgUT1YMChTLDAsayk7cmV0dXJuIEcudD0ic3RyIixH'@;
put 'LnZhbD1RLEd9fSw1OntuOiJCb29sRXJyIixmOkU0fSw3OntuOiJTdHJpbmciLGY6ZnVuY3Rpb24gb0MoUyl7dmFyIFI9Uy5yZWFkX3NoaWZ0KDEpO3JldHVybiAwPT09Uj8oUy5sKyssIiIpOlMucmVhZF9zaGlmdChSLCJzYmNzLWNvbnQiKX19LDg6e246IkJJRkYyUk9XIn0sOTp7bjoiQk9G'@;
put 'IixmOlZjfSwxMTp7bjoiSW5kZXgifSwyMjp7bjoiRXh0ZXJuQ291bnQiLGY6RWN9LDMwOntuOiJCSUZGMkZPUk1BVCIsZjp1Mn0sMzE6e246IkJJRkYyRk1UQ05UIn0sMzI6e246IkJJRkYyQ09MSU5GTyJ9LDMzOntuOiJBcnJheSIsZjprdn0sMzY6e246IkNPTFdJRFRIIn0sMzc6e246IkRl'@;
put 'ZmF1bHRSb3dIZWlnaHQiLGY6YzJ9LDUwOntuOiJCSUZGMkZPTlRYVFJBIixmOmZ1bmN0aW9uIHNDKFMsUil7Uy5sKz02LFMubCs9MixTLmwrPTEsUy5sKz0zLFMubCs9MSxTLmwrPVItMTN9fSw2Mjp7bjoiQklGRjJXSU5ET1cyIn0sNTI6e246IkRERU9iak5hbWUifSw2Nzp7bjoiQklGRjJY'@;
put 'RiJ9LDY4OntuOiJCSUZGMlhGSU5ERVgiLGY6RWN9LDY5OntuOiJCSUZGMkZPTlRDTFIifSw4Njp7bjoiQklGRjRGTVRDTlQifSwxMjY6e246IlJLIn0sMTI3OntuOiJJbURhdGEiLGY6ZnVuY3Rpb24gYWgoUyl7dmFyIFI9Uy5yZWFkX3NoaWZ0KDIpLGs9Uy5yZWFkX3NoaWZ0KDIpLEc9Uy5y'@;
put 'ZWFkX3NoaWZ0KDQpLFE9e2ZtdDpSLGVudjprLGxlbjpHLGRhdGE6Uy5zbGljZShTLmwsUy5sK0cpfTtyZXR1cm4gUy5sKz1HLFF9fSwxMzU6e246IkFkZGluIn0sMTM2OntuOiJFZGcifSwxMzc6e246IlB1YiJ9LDE0NTp7bjoiU3ViIn0sMTQ4OntuOiJMSFJlY29yZCJ9LDE0OTp7bjoiTEhO'@;
put 'R3JhcGgifSwxNTA6e246IlNvdW5kIn0sMTY5OntuOiJDb29yZExpc3QifSwxNzE6e246IkdDVyJ9LDE4ODp7bjoiU2hyRm1sYSJ9LDE5MTp7bjoiVG9vbGJhckhkciJ9LDE5Mjp7bjoiVG9vbGJhckVuZCJ9LDE5NDp7bjoiQWRkTWVudSJ9LDE5NTp7bjoiRGVsTWVudSJ9LDIxNDp7bjoiUlN0'@;
put 'cmluZyIsZjpmdW5jdGlvbiBsQyhTLFIsayl7dmFyIEc9Uy5sK1IsUT13MChTKSxvZT1TLnJlYWRfc2hpZnQoMiksZ2U9cmMoUyxvZSxrKTtyZXR1cm4gUy5sPUcsUS50PSJzdHIiLFEudmFsPWdlLFF9fSwyMjM6e246IlVERGVzYyJ9LDIzNDp7bjoiVGFiSWRDb25mIn0sMzU0OntuOiJYTDVN'@;
put 'b2RpZnkifSw0MjE6e246IkZpbGVTaGFyaW5nMiJ9LDUxODp7bjoiRm9ybXVsYSIsZjpRQ30sNTIxOntuOiJCT0YiLGY6VmN9LDUzNjp7bjoiTGJsIixmOnRDfSw1NDc6e246IkV4dGVybk5hbWUiLGY6ZUN9LDU2MTp7bjoiRm9udCJ9LDU3OTp7bjoiQklGRjNYRiJ9LDEwMzA6e246IkZvcm11'@;
put 'bGEiLGY6UUN9LDEwMzM6e246IkJPRiIsZjpWY30sMTA5MTp7bjoiQklGRjRYRiJ9LDIxNTc6e246IkZlYXRJbmZvIn0sMjE2Mzp7bjoiRmVhdEluZm8xMSJ9LDIxNzc6e246IlNYQWRkbDEyIn0sMjI0MDp7bjoiQXV0b1dlYlB1YiJ9LDIyNDE6e246Ikxpc3RPYmoifSwyMjQyOntuOiJMaXN0'@;
put 'RmllbGQifSwyMjQzOntuOiJMaXN0RFYifSwyMjQ0OntuOiJMaXN0Q29uZEZtdCJ9LDIyNDU6e246Ikxpc3RDRiJ9LDIyNDY6e246IkZNUXJ5In0sMjI0Nzp7bjoiRk1TUXJ5In0sMjI0ODp7bjoiUExWIn0sMjI0OTp7bjoiTG5FeHQifSwyMjUwOntuOiJNa3JFeHQifSwyMjUxOntuOiJDcnRD'@;
put 'b29wdCJ9LDIyNjI6e246IkZSVEFyY2hJZCQiLHI6MTJ9LDI5MjgyOnt9fSxxUz1JZShLUywibiIpO2Z1bmN0aW9uIEdpKFMsUixrLEcpe3ZhciBRPStSfHwrcVNbUl07aWYoIWlzTmFOKFEpKXt2YXIgb2U9R3x8KGt8fFtdKS5sZW5ndGh8fDAsZ2U9Uy5uZXh0KDQpO2dlLndyaXRlX3NoaWZ0'@;
put 'KDIsUSksZ2Uud3JpdGVfc2hpZnQoMixvZSksb2U+MCYmQXIoaykmJlMucHVzaChrKX19ZnVuY3Rpb24gQWIoUyxSLGspe3JldHVybiBTfHwoUz1ibig3KSksUy53cml0ZV9zaGlmdCgyLFIpLFMud3JpdGVfc2hpZnQoMixrKSxTLndyaXRlX3NoaWZ0KDIsMCksUy53cml0ZV9zaGlmdCgxLDAp'@;
put 'LFN9ZnVuY3Rpb24gWW5lKFMsUixrLEcpe2lmKG51bGwhPVIudilzd2l0Y2goUi50KXtjYXNlImQiOmNhc2UibiI6dmFyIFE9ImQiPT1SLnQ/UWUoSGUoUi52KSk6Ui52O3JldHVybiB2b2lkKFE9PSgwfFEpJiZRPj0wJiZRPDY1NTM2P0dpKFMsMixmdW5jdGlvbiBfVihTLFIsayl7dmFyIEc9'@;
put 'Ym4oOSk7cmV0dXJuIEFiKEcsUyxSKSxHLndyaXRlX3NoaWZ0KDIsayksR30oayxHLFEpKTpHaShTLDMsZnVuY3Rpb24gaWsoUyxSLGspe3ZhciBHPWJuKDE1KTtyZXR1cm4gQWIoRyxTLFIpLEcud3JpdGVfc2hpZnQoOCxrLCJmIiksR30oayxHLFEpKSk7Y2FzZSJiIjpjYXNlImUiOnJldHVy'@;
put 'biB2b2lkIEdpKFMsNSxmdW5jdGlvbiBabmUoUyxSLGssRyl7dmFyIFE9Ym4oOSk7cmV0dXJuIEFiKFEsUyxSKSxLaShrLEd8fCJiIixRKSxRfShrLEcsUi52LFIudCkpO2Nhc2UicyI6Y2FzZSJzdHIiOnJldHVybiB2b2lkIEdpKFMsNCxmdW5jdGlvbiBXbmUoUyxSLGspe3ZhciBHPWJuKDgr'@;
put 'MiprLmxlbmd0aCk7cmV0dXJuIEFiKEcsUyxSKSxHLndyaXRlX3NoaWZ0KDEsay5sZW5ndGgpLEcud3JpdGVfc2hpZnQoay5sZW5ndGgsaywic2JjcyIpLEcubDxHLmxlbmd0aD9HLnNsaWNlKDAsRy5sKTpHfShrLEcsKFIudnx8IiIpLnNsaWNlKDAsMjU1KSkpfUdpKFMsMSxBYihudWxsLGss'@;
put 'RykpfWZ1bmN0aW9uIFhuZShTLFIsayxHLFEpe3ZhciBvZT0xNitsMChRLmNlbGxYZnMsUS5jZWxsU3R5bGVYZnMsUixRKTtpZihudWxsIT1SLnZ8fFIuYmYpaWYoUi5iZilHaShTLCJGb3JtdWxhIixmdW5jdGlvbiBCNShTLFIsayxHLFEpe3ZhciBvZT1hMihSLGssUSksZ2U9ZnVuY3Rpb24g'@;
put 'SkMoUyl7aWYobnVsbD09Uyl7dmFyIFI9Ym4oOCk7cmV0dXJuIFIud3JpdGVfc2hpZnQoMSwzKSxSLndyaXRlX3NoaWZ0KDEsMCksUi53cml0ZV9zaGlmdCgyLDApLFIud3JpdGVfc2hpZnQoMiwwKSxSLndyaXRlX3NoaWZ0KDIsNjU1MzUpLFJ9cmV0dXJuIE91KCJudW1iZXIiPT10eXBlb2Yg'@;
put 'Uz9TOjApfShTLnYpLHBlPWJuKDYpO3BlLndyaXRlX3NoaWZ0KDIsMzMpLHBlLndyaXRlX3NoaWZ0KDQsMCk7Zm9yKHZhciBQZT1ibihTLmJmLmxlbmd0aCksTmU9MDtOZTxTLmJmLmxlbmd0aDsrK05lKVBlW05lXT1TLmJmW05lXTtyZXR1cm4gaihbb2UsZ2UscGUsUGVdKX0oUixrLEcsMCxv'@;
put 'ZSkpO2Vsc2Ugc3dpdGNoKFIudCl7Y2FzZSJkIjpjYXNlIm4iOkdpKFMsIk51bWJlciIsZnVuY3Rpb24gUXcoUyxSLGssRyl7dmFyIFE9Ym4oMTQpO3JldHVybiBhMihTLFIsRyxRKSxPdShrLFEpLFF9KGssRywiZCI9PVIudD9RZShIZShSLnYpKTpSLnYsb2UpKTticmVhaztjYXNlImIiOmNh'@;
put 'c2UiZSI6R2koUyw1MTcsZnVuY3Rpb24gTzEoUyxSLGssRyxRLG9lKXt2YXIgZ2U9Ym4oOCk7cmV0dXJuIGEyKFMsUixHLGdlKSxLaShrLG9lLGdlKSxnZX0oayxHLFIudixvZSwwLFIudCkpO2JyZWFrO2Nhc2UicyI6Y2FzZSJzdHIiOmlmKFEuYm9va1NTVCl7dmFyIHBlPWFTKFEuU3RyaW5n'@;
put 'cyxSLnYsUi5SP1Iucj1RcyhSLlIpOm51bGwsUS5yZXZTdHJpbmdzKTtpZihSLlIpZm9yKHZhciB5ZT0wO3llPFIuUi5sZW5ndGg7Kyt5ZSlSLlJbeWVdLnMmJmwwKFEuY2VsbFhmcyxRLmNlbGxTdHlsZVhmcyx7dDoibiIsdjowLHM6Ui5SW3llXS5zfSxRKTtHaShTLCJMYWJlbFNzdCIsZnVu'@;
put 'Y3Rpb24gJEEoUyxSLGssRyl7dmFyIFE9Ym4oMTApO3JldHVybiBhMihTLFIsRyxRKSxRLndyaXRlX3NoaWZ0KDQsayksUX0oayxHLHBlLG9lKSl9ZWxzZSBHaShTLCJMYWJlbCIsZnVuY3Rpb24gaVYoUyxSLGssRyxRKXt2YXIgb2U9IVF8fDg9PVEuYmlmZixnZT1ibigrb2UrOCsoMStvZSkq'@;
put 'ay5sZW5ndGgpO3JldHVybiBhMihTLFIsRyxnZSksZ2Uud3JpdGVfc2hpZnQoMixrLmxlbmd0aCksb2UmJmdlLndyaXRlX3NoaWZ0KDEsMSksZ2Uud3JpdGVfc2hpZnQoKDErb2UpKmsubGVuZ3RoLGssb2U/InV0ZjE2bGUiOiJzYmNzIiksZ2V9KGssRywoUi52fHwiIikuc2xpY2UoMCwyNTUp'@;
put 'LG9lLFEpKTticmVhaztkZWZhdWx0OkdpKFMsIkJsYW5rIixhMihrLEcsb2UpKX1lbHNlIEdpKFMsIkJsYW5rIixhMihrLEcsb2UpKX1mdW5jdGlvbiBFSShTLFIsayl7dmFyIE5lLEc9YmkoKSxRPWsuU2hlZXROYW1lc1tTXSxvZT1rLlNoZWV0c1tRXXx8e30sZ2U9KGt8fHt9KS5Xb3JrYm9v'@;
put 'a3x8e30scGU9KGdlLlNoZWV0c3x8W10pW1NdfHx7fSx5ZT1BcnJheS5pc0FycmF5KG9lKSxQZT04PT1SLmJpZmYsWWU9IiIsZXQ9W10sY3Q9b28ob2VbIiFyZWYiXXx8IkExIiksRXQ9UGU/NjU1MzY6MTYzODQ7aWYoY3QuZS5jPjI1NXx8Y3QuZS5yPj1FdCl7aWYoUi5XVEYpdGhyb3cgbmV3'@;
put 'IEVycm9yKCJSYW5nZSAiKyhvZVsiIXJlZiJdfHwiQTEiKSsiIGV4Y2VlZHMgZm9ybWF0IGxpbWl0IEExOklWMTYzODQiKTtjdC5lLmM9TWF0aC5taW4oY3QuZS5jLDI1NSksY3QuZS5yPU1hdGgubWluKGN0LmUuYyxFdC0xKX1HaShHLDIwNTcseDQoMCwxNixSKSksR2koRywiQ2FsY01vZGUi'@;
put 'LGEwKDEpKSxHaShHLCJDYWxjQ291bnQiLGEwKDEwMCkpLEdpKEcsIkNhbGNSZWZNb2RlIix0dSghMCkpLEdpKEcsIkNhbGNJdGVyIix0dSghMSkpLEdpKEcsIkNhbGNEZWx0YSIsT3UoLjAwMSkpLEdpKEcsIkNhbGNTYXZlUmVjYWxjIix0dSghMCkpLEdpKEcsIlByaW50Um93Q29sIix0dSgh'@;
put 'MSkpLEdpKEcsIlByaW50R3JpZCIsdHUoITEpKSxHaShHLCJHcmlkU2V0IixhMCgxKSksR2koRywiR3V0cyIsZnVuY3Rpb24gWTYoUyl7dmFyIFI9Ym4oOCk7cmV0dXJuIFIud3JpdGVfc2hpZnQoNCwwKSxSLndyaXRlX3NoaWZ0KDIsU1swXT9TWzBdKzE6MCksUi53cml0ZV9zaGlmdCgyLFNb'@;
put 'MV0/U1sxXSsxOjApLFJ9KFswLDBdKSksR2koRywiSENlbnRlciIsdHUoITEpKSxHaShHLCJWQ2VudGVyIix0dSghMSkpO3ZhciBhdD1vZVsiIXByaW50Il0mJm9lWyIhcHJpbnQiXS5tYXJnaW5zfHxvZVsiIW1hcmdpbnMiXTthdCYmKG51bGwhPWF0LmxlZnQmJkdpKEcsIkxlZnRNYXJnaW4i'@;
put 'LE91KGF0LmxlZnQpKSxudWxsIT1hdC5yaWdodCYmR2koRywiUmlnaHRNYXJnaW4iLE91KGF0LnJpZ2h0KSksbnVsbCE9YXQudG9wJiZHaShHLCJUb3BNYXJnaW4iLE91KGF0LnRvcCkpLG51bGwhPWF0LmJvdHRvbSYmR2koRywiQm90dG9tTWFyZ2luIixPdShhdC5ib3R0b20pKSwobnVsbCE9'@;
put 'YXQuaGVhZGVyfHxudWxsIT1hdC5mb290ZXIpJiZHaShHLCJTZXR1cCIsZnVuY3Rpb24gaUMoUyxSKXt2YXIgaz1ibigzNCksRz0hMSxRPTcwO3JldHVybiJsYW5kc2NhcGUiPT0oUi5wcm9wc3x8e30pLm9yaWVudGF0aW9uJiYoRz0hMCxRJj0tNjcpLEcmJihRJj0tNSksay53cml0ZV9zaGlm'@;
put 'dCgyLDEpLGsud3JpdGVfc2hpZnQoMiwxMDApLGsud3JpdGVfc2hpZnQoMiwwKSxrLndyaXRlX3NoaWZ0KDIsMCksay53cml0ZV9zaGlmdCgyLDApLGsud3JpdGVfc2hpZnQoMSxRKSxrLndyaXRlX3NoaWZ0KDEsMCksay53cml0ZV9zaGlmdCgyLDYwMCksay53cml0ZV9zaGlmdCgyLDYwMCks'@;
put 'T3UobnVsbD09Uy5oZWFkZXI/LjU6Uy5oZWFkZXIsayksT3UobnVsbD09Uy5mb290ZXI/LjU6Uy5mb290ZXIsayksay53cml0ZV9zaGlmdCgyLDEpLGt9KGF0LG9lWyIhcHJpbnQiXXx8e30pKSksUGUmJmZ1bmN0aW9uIFZ6KFMsUixrKXtpZihSKXt2YXIgRz0wO1IuZm9yRWFjaChmdW5jdGlv'@;
put 'bihRLG9lKXsrK0c8PTI1NiYmUSYmKFEuYXV0byYmb1MoayxRLG9lKSxHaShTLCJDb2xJbmZvIixmdW5jdGlvbiAkNihTLFIpe3ZhciBrPWJuKDEyKTtrLndyaXRlX3NoaWZ0KDIsUiksay53cml0ZV9zaGlmdCgyLFIpLGsud3JpdGVfc2hpZnQoMiwyNTYqUy53aWR0aCksay53cml0ZV9zaGlm'@;
put 'dCgyLDApO3ZhciBHPTA7cmV0dXJuIFMuaGlkZGVuJiYoR3w9MSksay53cml0ZV9zaGlmdCgxLEcpLGsud3JpdGVfc2hpZnQoMSxHPVMubGV2ZWx8fDApLGsud3JpdGVfc2hpZnQoMiwwKSxrfSh1OChvZSxRKSxvZSkpKX0pfX0oRyxvZVsiIWNvbHMiXSxvZSksR2koRywiRGltZW5zaW9ucyIs'@;
put 'ZnVuY3Rpb24gcUEoUyxSKXt2YXIgaz04IT1SLmJpZmYmJlIuYmlmZj8yOjQsRz1ibigyKmsrNik7cmV0dXJuIEcud3JpdGVfc2hpZnQoayxTLnMuciksRy53cml0ZV9zaGlmdChrLFMuZS5yKzEpLEcud3JpdGVfc2hpZnQoMixTLnMuYyksRy53cml0ZV9zaGlmdCgyLFMuZS5jKzEpLEcud3Jp'@;
put 'dGVfc2hpZnQoMiwwKSxHfShjdCxSKSksUGUmJihvZVsiIWxpbmtzIl09W10pLG9lWyIhcm93cyJdJiZQZSYmb2VbIiFyb3dzIl0uZm9yRWFjaChmdW5jdGlvbihLdCxUbil7Zm9yKHZhciBycj1qaShUbiksU249MjU2LGxyPTAsWG49S3Qucz8xNitsMChSLmNlbGxYZnMsUi5jZWxsU3R5bGVY'@;
put 'ZnMse3Q6Im4iLHY6MCxzOkt0LnN9LFIpOjAsQm49Y3Qucy5jO0JuPD1jdC5lLmM7KytCbikoeWU/KG9lW1RuXXx8W10pW0JuXTpvZVtldFtCbl0rcnJdKSYmKEJuPFNuJiYoU249Qm4pLEJuPmxyJiYobHI9Qm4pKTtscjxTbiYmKFNuPWxyPTApLEdpKEcsIlJvdyIsZnVuY3Rpb24gbXQoUyxS'@;
put 'LGspe3ZhciBHPWJuKDE2KTtHLndyaXRlX3NoaWZ0KDIsUiksRy53cml0ZV9zaGlmdCgyLGtbMF0pLEcud3JpdGVfc2hpZnQoMixrWzFdKzEpLEcud3JpdGVfc2hpZnQoMiwyMCpTLmhwdHx8MjAqVTMoUy5ocHgpfHwzMzApLEcud3JpdGVfc2hpZnQoNCwwKTt2YXIgUT0wO3JldHVybiBRfD0w'@;
put 'fFMubGV2ZWwsUy5oaWRkZW4mJihRfD0zMiksUXw9NjQsa1syXSYmKFF8PTEyOCksRy53cml0ZV9zaGlmdCgxLFEpLEcud3JpdGVfc2hpZnQoMSwxKSxHLndyaXRlX3NoaWZ0KDIsa1syXXx8MCksR30oS3QsVG4sW1NuLGxyLFhuXSkpfSk7Zm9yKHZhciBidD1jdC5zLnI7YnQ8PWN0LmUucjsr'@;
put 'K2J0KXtZZT1qaShidCk7Zm9yKHZhciBqdD1jdC5zLmM7anQ8PWN0LmUuYzsrK2p0KXtidD09PWN0LnMuciYmKGV0W2p0XT1UYShqdCkpLE5lPWV0W2p0XStZZTt2YXIga3Q9eWU/KG9lW2J0XXx8W10pW2p0XTpvZVtOZV07a3QmJihYbmUoRyxrdCxidCxqdCxSKSxQZSYma3QubCYmb2VbIiFs'@;
put 'aW5rcyJdLnB1c2goW05lLGt0LmxdKSl9fXZhciBPdD1wZS5Db2RlTmFtZXx8cGUubmFtZXx8UTtyZXR1cm4oUGV8fDU9PVIuYmlmZiYmb2VbIiFmcmVlemUiXSkmJkdpKEcsIldpbmRvdzIiLGZ1bmN0aW9uIHRWKFMsUixrLEcpe3ZhciBRPUcmJkcuYmlmZnx8OCxvZT1ibig4PT1RPzE4OjEw'@;
put 'KSxnZT0xNzE4O3JldHVybiBrPjAmJihnZSY9LTUxMyksV3QoUlsiIWdyaWRsaW5lcyJdKSYmKGdlJj0tMyksUlsiIWZyZWV6ZSJdJiYoZ2V8PTgpLFMmJlMuUlRMJiYoZ2V8PTY0KSw1PT1RJiYoZ2U9NDQ2KSxvZS53cml0ZV9zaGlmdCgyLGdlKSw4PT1RPyhvZS53cml0ZV9zaGlmdCg0LDAp'@;
put 'LG9lLndyaXRlX3NoaWZ0KDQsNjQpLG9lLndyaXRlX3NoaWZ0KDQsMCksb2Uud3JpdGVfc2hpZnQoNCwwKSk6KG9lLndyaXRlX3NoaWZ0KDQsMCksb2Uud3JpdGVfc2hpZnQoNCwwKSksb2V9KChnZS5WaWV3c3x8W10pWzBdLG9lLFMpKSwoUGV8fDU9PVIuYmlmZikmJm9lWyIhZnJlZXplIl0m'@;
put 'JkdpKEcsIlBhbmUiLGZ1bmN0aW9uIHdsKFMpeyJzdHJpbmciPT10eXBlb2YgUyYmKFM9Tm8oUykpO3ZhciBSPWJuKDEwKTtyZXR1cm4gUi53cml0ZV9zaGlmdCgyLFMuYyksUi53cml0ZV9zaGlmdCgyLFMuciksUi53cml0ZV9zaGlmdCgyLFMuciksUi53cml0ZV9zaGlmdCgyLFMuYyksUi53'@;
put 'cml0ZV9zaGlmdCgxLDMpLFIud3JpdGVfc2hpZnQoMSwwKSxSfShvZVsiIWZyZWV6ZSJdKSksUGUmJm9lWyIhc2VsIl0mJkdpKEcsIlNlbGVjdGlvbiIsZnVuY3Rpb24gcmsoUyxSKXt2YXIgaz1ibigxNSksRz1TLmNlbGw7aWYoIUcpe2lmKCFTLnJhbmdlKXRocm93IG5ldyBFcnJvcigiTXVz'@;
put 'dCBzcGVjaWZ5IGEgc2VsZWN0aW9uIGNlbGwgb3IgcmFuZ2UiKTtHPXFpKE1zKFMucmFuZ2UucmVwbGFjZSgvXHMuKiQvLCIiKSkucyl9dmFyIFE9InN0cmluZyI9PXR5cGVvZiBHP05vKEcpOkc7aWYoUil7dmFyIG9lPSJzdHJpbmciPT10eXBlb2YgUj9ObyhSKTpSO2sud3JpdGVfc2hpZnQo'@;
put 'MSxRLnI+PW9lLnImJlEuYz49b2UuYz8wOlEucj49b2UuciYmUS5jPG9lLmM/MjpRLnI8b2UuciYmUS5jPj1vZS5jPzE6Myl9ZWxzZSBrLndyaXRlX3NoaWZ0KDEsMyk7cmV0dXJuIGsud3JpdGVfc2hpZnQoMixRLnIpLGsud3JpdGVfc2hpZnQoMixRLmMpLGsud3JpdGVfc2hpZnQoMiwwKSxr'@;
put 'LndyaXRlX3NoaWZ0KDIsMSksZnVuY3Rpb24gVjMoUyxSKXtSfHwoUj1ibig2KSksUi53cml0ZV9zaGlmdCgyLFMucz9TLnMucjpTLnIpLFIud3JpdGVfc2hpZnQoMixTLmU/Uy5lLnI6Uy5yKSxSLndyaXRlX3NoaWZ0KDEsUy5zP1Mucy5jOlMuYyksUi53cml0ZV9zaGlmdCgxLFMuZT9TLmUu'@;
put 'YzpTLmMpfSh7czpRLGU6UX0sayksa30ob2VbIiFzZWwiXSxvZVsiIWZyZWV6ZSJdKSksUGUmJihvZVsiIW1lcmdlcyJdfHxbXSkubGVuZ3RoJiZHaShHLCJNZXJnZUNlbGxzIixmdW5jdGlvbiB1VihTKXt2YXIgUj1ibigyKzgqUy5sZW5ndGgpO1Iud3JpdGVfc2hpZnQoMixTLmxlbmd0aCk7'@;
put 'Zm9yKHZhciBrPTA7azxTLmxlbmd0aDsrK2spdnUoU1trXSxSKTtyZXR1cm4gUn0ob2VbIiFtZXJnZXMiXSkpLFBlJiZmdW5jdGlvbiBPOChTLFIpe2Zvcih2YXIgaz0wO2s8UlsiIWxpbmtzIl0ubGVuZ3RoOysrayl7dmFyIEc9UlsiIWxpbmtzIl1ba107R2koUywiSExpbmsiLGZWKEcpKSxH'@;
put 'WzFdLlRvb2x0aXAmJkdpKFMsIkhMaW5rVG9vbHRpcCIsZ1YoRykpfWRlbGV0ZSBSWyIhbGlua3MiXX0oRyxvZSksR2koRywiQ29kZU5hbWUiLGNsKE90KSksUGUmJmZ1bmN0aW9uIE56KFMsUil7dmFyIGs9Ym4oMTkpO2sud3JpdGVfc2hpZnQoNCwyMTUxKSxrLndyaXRlX3NoaWZ0KDQsMCks'@;
put 'ay53cml0ZV9zaGlmdCg0LDApLGsud3JpdGVfc2hpZnQoMiwzKSxrLndyaXRlX3NoaWZ0KDEsMSksay53cml0ZV9zaGlmdCg0LDApLEdpKFMsIkZlYXRIZHIiLGspLChrPWJuKDM5KSkud3JpdGVfc2hpZnQoNCwyMTUyKSxrLndyaXRlX3NoaWZ0KDQsMCksay53cml0ZV9zaGlmdCg0LDApLGsu'@;
put 'd3JpdGVfc2hpZnQoMiwzKSxrLndyaXRlX3NoaWZ0KDEsMCksay53cml0ZV9zaGlmdCg0LDApLGsud3JpdGVfc2hpZnQoMiwxKSxrLndyaXRlX3NoaWZ0KDQsNCksay53cml0ZV9zaGlmdCgyLDApLHZ1KG9vKFJbIiFyZWYiXXx8IkExIiksayksay53cml0ZV9zaGlmdCg0LDQpLEdpKFMsIkZl'@;
put 'YXQiLGspfShHLG9lKSxHaShHLCJFT0YiKSxHLmVuZCgpfWZ1bmN0aW9uIEJ6KFMsUixrKXt2YXIgRz1iaSgpLFE9KFN8fHt9KS5Xb3JrYm9va3x8e30sb2U9US5TaGVldHN8fFtdLGdlPVEuV0JQcm9wc3x8e30scGU9OD09ay5iaWZmLHllPTU9PWsuYmlmZjtHaShHLDIwNTcseDQoMCw1LGsp'@;
put 'KSwieGxhIj09ay5ib29rVHlwZSYmR2koRywiQWRkaW4iKSxHaShHLCJJbnRlcmZhY2VIZHIiLHBlP2EwKDEyMDApOm51bGwpLEdpKEcsIk1tcyIsZnVuY3Rpb24gR3coUyxSKXtSfHwoUj1ibihTKSk7Zm9yKHZhciBrPTA7azxTOysraylSLndyaXRlX3NoaWZ0KDEsMCk7cmV0dXJuIFJ9KDIp'@;
put 'KSx5ZSYmR2koRywiVG9vbGJhckhkciIpLHllJiZHaShHLCJUb29sYmFyRW5kIiksR2koRywiSW50ZXJmYWNlRW5kIiksR2koRywiV3JpdGVBY2Nlc3MiLGZ1bmN0aW9uIFU2KFMsUil7dmFyIGs9IVJ8fDg9PVIuYmlmZixHPWJuKGs/MTEyOjU0KTtmb3IoRy53cml0ZV9zaGlmdCg4PT1SLmJp'@;
put 'ZmY/MjoxLDcpLGsmJkcud3JpdGVfc2hpZnQoMSwwKSxHLndyaXRlX3NoaWZ0KDQsODU5MDA3MDU5KSxHLndyaXRlX3NoaWZ0KDQsNTQ1ODU0OHwoaz8wOjUzNjg3MDkxMikpO0cubDxHLmxlbmd0aDspRy53cml0ZV9zaGlmdCgxLGs/MDozMik7cmV0dXJuIEd9KDAsaykpLEdpKEcsIkNvZGVQ'@;
put 'YWdlIixhMChwZT8xMjAwOjEyNTIpKSxwZSYmR2koRywiRFNGIixhMCgwKSkscGUmJkdpKEcsIkV4Y2VsOUZpbGUiKSxHaShHLCJSUlRhYklkIixmdW5jdGlvbiB2VihTKXtmb3IodmFyIFI9Ym4oMipTKSxrPTA7azxTOysraylSLndyaXRlX3NoaWZ0KDIsaysxKTtyZXR1cm4gUn0oUy5TaGVl'@;
put 'dE5hbWVzLmxlbmd0aCkpLHBlJiZTLnZiYXJhdyYmR2koRywiT2JQcm9qIikscGUmJlMudmJhcmF3JiZHaShHLCJDb2RlTmFtZSIsY2woZ2UuQ29kZU5hbWV8fCJUaGlzV29ya2Jvb2siKSksR2koRywiQnVpbHRJbkZuR3JvdXBDb3VudCIsYTAoMTcpKSxHaShHLCJXaW5Qcm90ZWN0Iix0dSgh'@;
put 'MSkpLEdpKEcsIlByb3RlY3QiLHR1KCExKSksR2koRywiUGFzc3dvcmQiLGEwKDApKSxwZSYmR2koRywiUHJvdDRSZXYiLHR1KCExKSkscGUmJkdpKEcsIlByb3Q0UmV2UGFzcyIsYTAoMCkpLEdpKEcsIldpbmRvdzEiLGZ1bmN0aW9uIEt0ZSgpe3ZhciBTPWJuKDE4KTtyZXR1cm4gUy53cml0'@;
put 'ZV9zaGlmdCgyLDApLFMud3JpdGVfc2hpZnQoMiwwKSxTLndyaXRlX3NoaWZ0KDIsMjkyODApLFMud3JpdGVfc2hpZnQoMiwxNzYwMCksUy53cml0ZV9zaGlmdCgyLDU2KSxTLndyaXRlX3NoaWZ0KDIsMCksUy53cml0ZV9zaGlmdCgyLDApLFMud3JpdGVfc2hpZnQoMiwxKSxTLndyaXRlX3No'@;
put 'aWZ0KDIsNTAwKSxTfSgpKSxHaShHLCJCYWNrdXAiLHR1KCExKSksR2koRywiSGlkZU9iaiIsYTAoMCkpLEdpKEcsIkRhdGUxOTA0Iix0dSgidHJ1ZSI9PWZ1bmN0aW9uIEZTKFMpe3JldHVybiBTLldvcmtib29rJiZTLldvcmtib29rLldCUHJvcHMmJnRpKFMuV29ya2Jvb2suV0JQcm9wcy5k'@;
put 'YXRlMTkwNCk/InRydWUiOiJmYWxzZSJ9KFMpKSksR2koRywiQ2FsY1ByZWNpc2lvbiIsdHUoITApKSxwZSYmR2koRywiUmVmcmVzaEFsbCIsdHUoITEpKSxHaShHLCJCb29rQm9vbCIsYTAoMCkpLHIwPUk2KFswLDE2Nzc3MjE1LDE2NzExNjgwLDY1MjgwLDI1NSwxNjc3Njk2MCwxNjcxMTkz'@;
put 'NSw2NTUzNSwwLDE2Nzc3MjE1LDE2NzExNjgwLDY1MjgwLDI1NSwxNjc3Njk2MCwxNjcxMTkzNSw2NTUzNV0pLGZ1bmN0aW9uIEtuZShTLFIsayl7KCgoUnx8e30pLlN0eWxlc3x8e30pLkZvbnRzfHxbe3N6OjEyLGNvbG9yOnt0aGVtZToxfSxuYW1lOiJBcmlhbCIsZmFtaWx5OjIsc2NoZW1l'@;
put 'OiJtaW5vciJ9XSkuZm9yRWFjaChmdW5jdGlvbihHKXtHaShTLCJGb250IixmdW5jdGlvbiBuVihTLFIpe3ZhciBrPVMubmFtZXx8IkFyaWFsIixHPVImJjU9PVIuYmlmZixvZT1ibihHPzE1K2subGVuZ3RoOjE2KzIqay5sZW5ndGgpO29lLndyaXRlX3NoaWZ0KDIsMjAqKFMuc3p8fDEyKSk7'@;
put 'dmFyIGdlPTA7cmV0dXJuIFMuYm9sZCYmKGdlfD0xKSxTLml0YWxpYyYmKGdlfD0yKSxTLnN0cmlrZSYmKGdlfD04KSxTLnNoYWRvdyYmKGdlfD0zMiksb2Uud3JpdGVfc2hpZnQoMSxnZSksb2Uud3JpdGVfc2hpZnQoMSwwKSxvZS53cml0ZV9zaGlmdCgyLFMuY29sb3I/UDQoUy5jb2xvciw2'@;
put 'NCk6NjQpLG9lLndyaXRlX3NoaWZ0KDIsUy5ib2xkPzcwMDo0MDApLG9lLndyaXRlX3NoaWZ0KDIsInN1cGVyIj09Uy52YWxpZ24/MToic3ViIj09Uy52YWxpZ24/MjowKSxvZS53cml0ZV9zaGlmdCgxLFMudW5kZXJsaW5lfHwwKSxvZS53cml0ZV9zaGlmdCgxLG9lLmZhbWlseXx8MCksb2Uu'@;
put 'd3JpdGVfc2hpZnQoMSxvZS5jaGFyc2V0fHwwKSxvZS53cml0ZV9zaGlmdCgxLDApLG9lLndyaXRlX3NoaWZ0KDEsay5sZW5ndGgpLEd8fG9lLndyaXRlX3NoaWZ0KDEsMSksb2Uud3JpdGVfc2hpZnQoKEc/MToyKSprLmxlbmd0aCxrLEc/InNiY3MiOiJ1dGYxNmxlIiksb2V9KEcsaykpfSl9'@;
put 'KEcsUyxrKSxmdW5jdGlvbiBxbmUoUyxSLGspe1ImJltbNSw4XSxbMjMsMjZdLFs0MSw0NF0sWzUwLDM5Ml1dLmZvckVhY2goZnVuY3Rpb24oRyl7Zm9yKHZhciBRPUdbMF07UTw9R1sxXTsrK1EpbnVsbCE9UltRXSYmR2koUywiRm9ybWF0IixhVihRLFJbUV0saykpfSl9KEcsUy5TU0Ysayks'@;
put 'ZnVuY3Rpb24gRzUoUyxSKXtmb3IodmFyIGs9MDtrPDE2OysraylHaShTLCJYRiIseTUoe251bUZtdElkOjAsc3R5bGU6ITB9LDAsUikpO1IuY2VsbFhmcy5mb3JFYWNoKGZ1bmN0aW9uKEcpe0dpKFMsIlhGIix5NShHLDAsUikpfSl9KEcsayksR2koRywiUGFsZXR0ZSIsZnVuY3Rpb24gQ3Qo'@;
put 'Uyl7dmFyIFI9Ym4oMjI2KTtSLndyaXRlX3NoaWZ0KDIsNTYpO2Zvcih2YXIgaz0wO2s8NTY7KytrKXt2YXIgRz1TW2srOF18fHY0W2srOF07Ui53cml0ZV9zaGlmdCgxLEdbMF0pLFIud3JpdGVfc2hpZnQoMSxHWzFdKSxSLndyaXRlX3NoaWZ0KDEsR1syXSksUi53cml0ZV9zaGlmdCgxLDAp'@;
put 'fXJldHVybiBSfShyMCkpLHIwPXF0KHY0KSxwZSYmR2koRywiVXNlc0VMRnMiLHR1KCExKSk7dmFyIE5lPUcuZW5kKCksWWU9YmkoKTtwZSYmR2koWWUsIkNvdW50cnkiLGZ1bmN0aW9uIGRpKFMpe3JldHVybiBTfHwoUz1ibig0KSksUy53cml0ZV9zaGlmdCgyLDEpLFMud3JpdGVfc2hpZnQo'@;
put 'MiwxKSxTfSgpKSxwZSYmay5TdHJpbmdzJiZmdW5jdGlvbiBVbmUoUyxSLGssRyl7dmFyIFE9R3x8KGt8fFtdKS5sZW5ndGh8fDA7aWYoUTw9ODIyNClyZXR1cm4gR2koUyxSLGssUSk7dmFyIG9lPStSfHwrcVNbUl07aWYoIWlzTmFOKG9lKSl7Zm9yKHZhciBnZT1rLnBhcnRzfHxbXSxwZT0w'@;
put 'LHllPTAsUGU9MDtQZSsoZ2VbcGVdfHw4MjI0KTw9ODIyNDspUGUrPWdlW3BlXXx8ODIyNCxwZSsrO3ZhciBOZT1TLm5leHQoNCk7Zm9yKE5lLndyaXRlX3NoaWZ0KDIsb2UpLE5lLndyaXRlX3NoaWZ0KDIsUGUpLFMucHVzaChrLnNsaWNlKHllLHllK1BlKSkseWUrPVBlO3llPFE7KXtmb3Io'@;
put 'KE5lPVMubmV4dCg0KSkud3JpdGVfc2hpZnQoMiw2MCksUGU9MDtQZSsoZ2VbcGVdfHw4MjI0KTw9ODIyNDspUGUrPWdlW3BlXXx8ODIyNCxwZSsrO05lLndyaXRlX3NoaWZ0KDIsUGUpLFMucHVzaChrLnNsaWNlKHllLHllK1BlKSkseWUrPVBlfX19KFllLCJTU1QiLGZ1bmN0aW9uIG1zKFMs'@;
put 'Uil7dmFyIGs9Ym4oOCk7ay53cml0ZV9zaGlmdCg0LFMuQ291bnQpLGsud3JpdGVfc2hpZnQoNCxTLlVuaXF1ZSk7Zm9yKHZhciBHPVtdLFE9MDtRPFMubGVuZ3RoOysrUSlHW1FdPU5jKFNbUV0sUik7dmFyIG9lPWooW2tdLmNvbmNhdChHKSk7cmV0dXJuIG9lLnBhcnRzPVtrLmxlbmd0aF0u'@;
put 'Y29uY2F0KEcubWFwKGZ1bmN0aW9uKGdlKXtyZXR1cm4gZ2UubGVuZ3RofSkpLG9lfShrLlN0cmluZ3MsaykpLEdpKFllLCJFT0YiKTt2YXIgZXQ9WWUuZW5kKCksY3Q9YmkoKSxFdD0wLGF0PTA7Zm9yKGF0PTA7YXQ8Uy5TaGVldE5hbWVzLmxlbmd0aDsrK2F0KUV0Kz0ocGU/MTI6MTEpKyhw'@;
put 'ZT8yOjEpKlMuU2hlZXROYW1lc1thdF0ubGVuZ3RoO3ZhciBidD1OZS5sZW5ndGgrRXQrZXQubGVuZ3RoO2ZvcihhdD0wO2F0PFMuU2hlZXROYW1lcy5sZW5ndGg7KythdClHaShjdCwiQm91bmRTaGVldDgiLGwyKHtwb3M6YnQsaHM6KG9lW2F0XXx8e30pLkhpZGRlbnx8MCxkdDowLG5hbWU6'@;
put 'Uy5TaGVldE5hbWVzW2F0XX0saykpLGJ0Kz1SW2F0XS5sZW5ndGg7dmFyIGt0PWN0LmVuZCgpO2lmKEV0IT1rdC5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJCUzggIitFdCsiICE9ICIra3QubGVuZ3RoKTt2YXIgT3Q9W107cmV0dXJuIE5lLmxlbmd0aCYmT3QucHVzaChOZSksa3QubGVuZ3Ro'@;
put 'JiZPdC5wdXNoKGt0KSxldC5sZW5ndGgmJk90LnB1c2goZXQpLHkwKFtPdF0pfWZ1bmN0aW9uIFRJKFMsUil7dmFyIGs9Unx8e307c3dpdGNoKGsuYmlmZnx8Mil7Y2FzZSA4OmNhc2UgNTpyZXR1cm4gZnVuY3Rpb24gSm5lKFMsUil7dmFyIGs9Unx8e30sRz1bXTtJZihSJiZSLlBQSXx8OTYp'@;
put 'LFMmJiFTLlNTRiYmKFMuU1NGPUEuZ2V0X3RhYmxlKCkpLFMmJlMuU1NGJiYoYWUoQSksQS5sb2FkX3RhYmxlKFMuU1NGKSxrLnJldnNzZj1rZShTLlNTRiksay5yZXZzc2ZbUy5TU0ZbNjU1MzVdXT0wLGsuc3NmPVMuU1NGKSxTLlN0eWxlcz17Rm9udHM6ay5Gb250cz1be3N6OjEyLGNvbG9y'@;
put 'Ont0aGVtZToxLHJnYjoiMDAwMDAwIn0sbmFtZToiQ2FsaWJyaSIsZmFtaWx5OjIsc2NoZW1lOiJtaW5vciJ9XSxGaWxsczprLkZpbGxzPVt7cGF0dGVyblR5cGU6Im5vbmUifSx7cGF0dGVyblR5cGU6ImdyYXkxMjUifV0sQm9yZGVyczprLkJvcmRlcnM9W3t9XSxEWEY6ay5EWEY9Uy5TdHls'@;
put 'ZXMmJlMuU3R5bGVzLkRYRnx8W119LEk0KGsuRm9udHNbMF0pLGsuU3RyaW5ncz1bXSxrLlN0cmluZ3MuQ291bnQ9MCxrLlN0cmluZ3MuVW5pcXVlPTAscTM/ay5yZXZTdHJpbmdzPW5ldyBNYXA6KGsucmV2U3RyaW5ncz17fSxrLnJldlN0cmluZ3MuZm9vPVtdLGRlbGV0ZSBrLnJldlN0cmlu'@;
put 'Z3MuZm9vKSxQZihrKSxrLmNlbGxYZnM9W10say5jZWxsU3R5bGVYZnM9W3tuYW1lOiJOb3JtYWwifV0sbDAoay5jZWxsWGZzLGsuY2VsbFN0eWxlWGZzLHt9LHtyZXZzc2Y6e0dlbmVyYWw6MH19KSxTLlByb3BzfHwoUy5Qcm9wcz17fSk7Zm9yKHZhciBRPTA7UTxTLlNoZWV0TmFtZXMubGVu'@;
put 'Z3RoOysrUSlHW0cubGVuZ3RoXT1FSShRLGssUyk7cmV0dXJuIEcudW5zaGlmdChCeihTLEcsaykpLHkwKFtHXSl9KFMsUik7Y2FzZSA0OmNhc2UgMzpjYXNlIDI6cmV0dXJuIGZ1bmN0aW9uICRuZShTLFIpe3ZhciBrPVJ8fHt9O251bGwhPWxlJiZudWxsPT1rLmRlbnNlJiYoay5kZW5zZT1s'@;
put 'ZSk7Zm9yKHZhciBHPWJpKCksUT0wLG9lPTA7b2U8Uy5TaGVldE5hbWVzLmxlbmd0aDsrK29lKVMuU2hlZXROYW1lc1tvZV09PWsuc2hlZXQmJihRPW9lKTtpZigwPT1RJiZrLnNoZWV0JiZTLlNoZWV0TmFtZXNbMF0hPWsuc2hlZXQpdGhyb3cgbmV3IEVycm9yKCJTaGVldCBub3QgZm91bmQ6'@;
put 'ICIray5zaGVldCk7cmV0dXJuIEdpKEcsND09ay5iaWZmPzEwMzM6Mz09ay5iaWZmPzUyMTo5LHg0KDAsMTYsaykpLGZ1bmN0aW9uIEduZShTLFIsayxHKXt2YXIgZ2UsUT1BcnJheS5pc0FycmF5KFIpLG9lPW9vKFJbIiFyZWYiXXx8IkExIikscGU9IiIseWU9W107aWYob2UuZS5jPjI1NXx8'@;
put 'b2UuZS5yPjE2MzgzKXtpZihHLldURil0aHJvdyBuZXcgRXJyb3IoIlJhbmdlICIrKFJbIiFyZWYiXXx8IkExIikrIiBleGNlZWRzIGZvcm1hdCBsaW1pdCBBMTpJVjE2Mzg0Iik7b2UuZS5jPU1hdGgubWluKG9lLmUuYywyNTUpLG9lLmUucj1NYXRoLm1pbihvZS5lLmMsMTYzODMpLGdlPXJh'@;
put 'KG9lKX1mb3IodmFyIFBlPW9lLnMucjtQZTw9b2UuZS5yOysrUGUpe3BlPWppKFBlKTtmb3IodmFyIE5lPW9lLnMuYztOZTw9b2UuZS5jOysrTmUpe1BlPT09b2Uucy5yJiYoeWVbTmVdPVRhKE5lKSksZ2U9eWVbTmVdK3BlO3ZhciBZZT1RPyhSW1BlXXx8W10pW05lXTpSW2dlXTtZZSYmWW5l'@;
put 'KFMsWWUsUGUsTmUpfX19KEcsUy5TaGVldHNbUy5TaGVldE5hbWVzW1FdXSwwLGspLEdpKEcsMTApLEcuZW5kKCl9KFMsUil9dGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIHR5cGUgIitrLmJvb2tUeXBlKyIgZm9yIEJJRkYiKX12YXIgbWQ9ZnVuY3Rpb24oKXt2YXIgUz17Y2VudGVyQ29udGlu'@;
put 'dW91czoiY2VudGVyIixqdXN0aWZ5OiJsZWZ0In07ZnVuY3Rpb24gayhZZSxldCl7dmFyIGN0PWV0fHx7fTtudWxsIT1sZSYmbnVsbD09Y3QuZGVuc2UmJihjdC5kZW5zZT1sZSk7dmFyIEV0PWN0LmRlbnNlP1tdOnt9LGF0PShZZT1ZZS5yZXBsYWNlKC88IS0tLio/LS0+L2csIiIpKS5tYXRj'@;
put 'aCgvPHRhYmxlL2kpO2lmKCFhdCl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgSFRNTDogY291bGQgbm90IGZpbmQgPHRhYmxlPiIpO3ZhciBidD1ZZS5tYXRjaCgvPFwvdGFibGUvaSksanQ9YXQuaW5kZXgsa3Q9YnQmJmJ0LmluZGV4fHxZZS5sZW5ndGgsT3Q9ZnVuY3Rpb24gZnQoUyxSLGsp'@;
put 'e2lmKGhufHwic3RyaW5nIj09dHlwZW9mIFIpcmV0dXJuIFMuc3BsaXQoUik7Zm9yKHZhciBHPVMuc3BsaXQoUiksUT1bR1swXV0sb2U9MTtvZTxHLmxlbmd0aDsrK29lKVEucHVzaChrKSxRLnB1c2goR1tvZV0pO3JldHVybiBRfShZZS5zbGljZShqdCxrdCksLyg6Pzx0cltePl0qPikvaSwi'@;
put 'PHRyPiIpLEt0PS0xLFRuPTAscnI9MCxTbj0wLGxyPXtzOntyOjFlNyxjOjFlN30sZTp7cjowLGM6MH19LFhuPVtdO2ZvcihqdD0wO2p0PE90Lmxlbmd0aDsrK2p0KXt2YXIgQm49T3RbanRdLnRyaW0oKSxmcj1Cbi5zbGljZSgwLDMpLnRvTG93ZXJDYXNlKCk7aWYoIjx0ciIhPWZyKXtpZigi'@;
put 'PHRkIj09ZnJ8fCI8dGgiPT1mcil7dmFyIGJyPUJuLnNwbGl0KC88XC90W2RoXT4vaSk7Zm9yKGt0PTA7a3Q8YnIubGVuZ3RoOysra3Qpe3ZhciBlcj1icltrdF0udHJpbSgpO2lmKGVyLm1hdGNoKC88dFtkaF0vaSkpe2Zvcih2YXIgTWk9ZXIsRmk9MDsiPCI9PU1pLmNoYXJBdCgwKSYmKEZp'@;
put 'PU1pLmluZGV4T2YoIj4iKSk+LTE7KU1pPU1pLnNsaWNlKEZpKzEpO2Zvcih2YXIgbmE9MDtuYTxYbi5sZW5ndGg7KytuYSl7dmFyIGNhPVhuW25hXTtjYS5zLmM9PVRuJiZjYS5zLnI8S3QmJkt0PD1jYS5lLnImJihUbj1jYS5lLmMrMSxuYT0tMSl9dmFyIExpPXZyKGVyLnNsaWNlKDAsZXIu'@;
put 'aW5kZXhPZigiPiIpKSk7U249TGkuY29sc3Bhbj8rTGkuY29sc3BhbjoxLCgocnI9K0xpLnJvd3NwYW4pPjF8fFNuPjEpJiZYbi5wdXNoKHtzOntyOkt0LGM6VG59LGU6e3I6S3QrKHJyfHwxKS0xLGM6VG4rU24tMX19KTt2YXIga3I9TGkudHx8TGlbImRhdGEtdCJdfHwiIjtpZighTWkubGVu'@;
put 'Z3RoKXtUbis9U247Y29udGludWV9aWYoTWk9aXIoTWkpLGxyLnMucj5LdCYmKGxyLnMucj1LdCksbHIuZS5yPEt0JiYobHIuZS5yPUt0KSxsci5zLmM+VG4mJihsci5zLmM9VG4pLGxyLmUuYzxUbiYmKGxyLmUuYz1UbiksTWkubGVuZ3RoKXt2YXIgVm49e3Q6InMiLHY6TWl9O2N0LnJhd3x8'@;
put 'IU1pLnRyaW0oKS5sZW5ndGh8fCJzIj09a3J8fChWbj1SaShNaSxjdCkpLGN0LmRlbnNlPyhFdFtLdF18fChFdFtLdF09W10pLEV0W0t0XVtUbl09Vm4pOkV0W3FpKHtyOkt0LGM6VG59KV09Vm4sVG4rPVNufX19fX1lbHNle2lmKCsrS3QsY3Quc2hlZXRSb3dzJiZjdC5zaGVldFJvd3M8PUt0'@;
put 'KXstLUt0O2JyZWFrfVRuPTB9fXJldHVybiBFdFsiIXJlZiJdPXJhKGxyKSxYbi5sZW5ndGgmJihFdFsiIW1lcmdlcyJdPVhuKSxFdH1mdW5jdGlvbiBRKFllLGV0LGN0LEV0LGF0LGJ0KXt2YXIgT3QsanQ9WWVbIiFtZXJnZXMiXXx8W10sa3Q9W10sS3Q9e3N0eWxlOltdfSxUbj0hMTtmdW5j'@;
put 'dGlvbiBycihpYSxMbyxPYSl7dmFyIGhvPSIiLEphPTA7aWYoT3RbaWFdKXN3aXRjaChPdFtpYV0uc3R5bGUpe2Nhc2UidGhpbiI6Y2FzZSJoYWlyIjpobz0ic29saWQiLEphPTE7YnJlYWs7Y2FzZSJtZWRpdW0iOmhvPSJzb2xpZCIsSmE9MjticmVhaztjYXNlInRoaWNrIjpobz0ic29saWQi'@;
put 'LEphPTM7YnJlYWs7Y2FzZSJkb3VibGUiOmhvPSJkb3VibGUiLEphPTM7YnJlYWs7Y2FzZSJkb3R0ZWQiOmNhc2UiZGFzaERvdERvdCI6aG89ImRvdHRlZCIsSmE9MTticmVhaztjYXNlIm1lZGl1bURhc2hEb3REb3QiOmhvPSJkb3R0ZWQiLEphPTI7YnJlYWs7Y2FzZSJkYXNoZWQiOmNhc2Ui'@;
put 'ZGFzaERvdCI6Y2FzZSJzbGFudERhc2hEb3QiOmhvPSJkYXNoZWQiLEphPTE7YnJlYWs7Y2FzZSJtZWRpdW1EYXNoZWQiOmNhc2UibWVkaXVtRGFzaERvdCI6aG89ImRhc2hlZCIsSmE9Mn1lOmlmKDA9PUphKXtzd2l0Y2goaWEpe2Nhc2UidG9wIjotLUxvO2JyZWFrO2Nhc2UibGVmdCI6LS1P'@;
put 'YTticmVhaztjYXNlImJvdHRvbSI6KytMbzticmVhaztjYXNlInJpZ2h0IjorK09hfXZhciBCaT1Mbz49MCYmT2E+PTA/RXQuZGVuc2U/KFllW0xvXXx8W10pW09hXTpZZVtxaSh7cjpMbyxjOk9hfSldOm51bGw7aWYoQmkpe2lmKEJpLnMmJkJpLnNbe3RvcDoiYm90dG9tIixib3R0b206InRv'@;
put 'cCIsbGVmdDoicmlnaHQiLHJpZ2h0OiJsZWZ0In1baWFdXSlicmVhayBlO0JpLnMmJkJpLnMuZmdDb2xvciYmKEphPTEpfU90LmZnQ29sb3ImJihKYT0xKSwhQmkmJlRuJiYwPT1KYSYmKEphPTEpfTAhPUphJiZKYSYmKEt0LnN0eWxlLnB1c2goImJvcmRlci0iK2lhKyItc3R5bGU6IisoaG98'@;
put 'fCJ0cmFuc3BhcmVudCIpKSxLdC5zdHlsZS5wdXNoKCJib3JkZXItIitpYSsiLXdpZHRoOiIrSmErInB4IiksIiI9PWhvP0t0LnN0eWxlLnB1c2goImJvcmRlci0iK2lhKyItY29sb3I6IHRyYW5zcGFyZW50Iik6T3RbaWFdLmNvbG9yJiZPdFtpYV0uY29sb3IucmdiJiZLdC5zdHlsZS5wdXNo'@;
put 'KCJib3JkZXItIitpYSsiLWNvbG9yOiMiK1AwKE90W2lhXS5jb2xvci5yZ2IpKSl9Zm9yKHZhciBTbj1ldC5zLmM7U248PWV0LmUuYzsrK1NuKXtmb3IodmFyIGxyPTAsWG49MCxCbj0wO0JuPGp0Lmxlbmd0aDsrK0JuKWlmKCEoanRbQm5dLnMucj5jdHx8anRbQm5dLnMuYz5Tbnx8anRbQm5d'@;
put 'LmUucjxjdHx8anRbQm5dLmUuYzxTbikpe2lmKGp0W0JuXS5zLnI8Y3R8fGp0W0JuXS5zLmM8U24pe2xyPS0xO2JyZWFrfWxyPWp0W0JuXS5lLnItanRbQm5dLnMucisxLFhuPWp0W0JuXS5lLmMtanRbQm5dLnMuYysxO2JyZWFrfWlmKCEobHI8MCkpe3ZhciBmcj1xaSh7cjpjdCxjOlNufSks'@;
put 'YnI9RXQuZGVuc2U/KFllW2N0XXx8W10pW1NuXTpZZVtmcl07YnI/VG49ITE6KFRuPSEwLGJyPXt0OiJ6IixzOnt9fSk7dmFyIGVyPSJ6Ij09YnIudD8iIjpici5ofHxsYShici53fHwoX2woYnIpLGJyLncpfHwiIik7aWYoS3Q9e3N0eWxlOltdfSxPdD1ici5zKXt2YXIgTWk9MTtpZigoInN1'@;
put 'cGVyIj09T3QudmFsaWdufHwic3ViIj09T3QudmFsaWduKSYmKE1pPS44Myxlcj1Qcigic3BhbiIsZXIse3N0eWxlOiJ2ZXJ0aWNhbC1hbGlnbjogIitPdC52YWxpZ259KSksS3Quc3R5bGUucHVzaCgiZm9udC13ZWlnaHQ6IisoT3QuYm9sZD83MDA6NDAwKSksT3QuaXRhbGljJiZLdC5zdHls'@;
put 'ZS5wdXNoKCJmb250LXN0eWxlOiBpdGFsaWMiKSwoT3QudW5kZXJsaW5lfHxPdC5zdHJpa2UpJiZLdC5zdHlsZS5wdXNoKCJ0ZXh0LWRlY29yYXRpb246IisoT3QudW5kZXJsaW5lPyIgdW5kZXJsaW5lIjoiIikrKE90LnN0cmlrZT8iIGxpbmUtdGhyb3VnaCI6IiIpKSxPdC5jb2xvciYmT3Qu'@;
put 'Y29sb3IucmdiJiZLdC5zdHlsZS5wdXNoKCJjb2xvcjogIyIrUDAoT3QuY29sb3IucmdiKSksT3QubmFtZSYmS3Quc3R5bGUucHVzaCgiZm9udC1mYW1pbHk6IitPdC5uYW1lKyIsIHNhbnMtc2VyaWYiKSxPdC5zeiYmS3Quc3R5bGUucHVzaCgiZm9udC1zaXplOiIrT3Quc3oqTWkrInB0Iiks'@;
put 'bnVsbCE9PU90LnBhdHRlcm5UeXBlJiZPdC5mZ0NvbG9yJiZPdC5mZ0NvbG9yLnJnYiYmS3Quc3R5bGUucHVzaCgiYmFja2dyb3VuZC1jb2xvcjogIyIrUDAoT3QuZmdDb2xvci5yZ2IpKSxbInRvcCIsImxlZnQiXS5mb3JFYWNoKGZ1bmN0aW9uKGlhKXtycihpYSxjdCxTbil9KSxscj4xfHxY'@;
put 'bj4xKXt2YXIgRmk9cWkoe3I6Y3QrbHItMSxjOlNuK1huLTF9KSxuYT1FdC5kZW5zZT8oWWVbY3QrbHItMV18fFtdKVtTbitYbi0xXTpZZVtGaV0sTGk9T3Q7T3Q9bmEmJm5hLnN8fE90LFsiYm90dG9tIiwicmlnaHQiXS5mb3JFYWNoKGZ1bmN0aW9uKGlhKXtycihpYSxjdCxTbil9KSxPdD1M'@;
put 'aX1lbHNlWyJib3R0b20iLCJyaWdodCJdLmZvckVhY2goZnVuY3Rpb24oaWEpe3JyKGlhLGN0LFNuKX0pO2lmKE90LmFsaWdubWVudCl7aWYoT3QuYWxpZ25tZW50Lmhvcml6b250YWw/S3Quc3R5bGUucHVzaCgidGV4dC1hbGlnbjogIisoU1tPdC5hbGlnbm1lbnQuaG9yaXpvbnRhbF18fE90'@;
put 'LmFsaWdubWVudC5ob3Jpem9udGFsKSk6Im4iPT1ici50JiZLdC5zdHlsZS5wdXNoKCJ0ZXh0LWFsaWduOiByaWdodCIpLE90LmFsaWdubWVudC52ZXJ0aWNhbCl7dmFyIGtyPU90LmFsaWdubWVudC52ZXJ0aWNhbDtLdC5zdHlsZS5wdXNoKCJ2ZXJ0aWNhbC1hbGlnbjogIisoImNlbnRlciI9'@;
put 'PWtyPyJtaWRkbGUiOmtyKSl9aWYoT3QuYWxpZ25tZW50LndyYXBUZXh0KUt0LnN0eWxlLnB1c2goIndoaXRlLXNwYWNlOiBwcmUtd3JhcCIpO2Vsc2V7dmFyIFZuPUV0LmRlbnNlPyhZZVtjdF18fFtdKVtTbisxXTpZZVtxaSh7cjpjdCxjOlNuKzF9KV07Vm4mJiJ6IiE9Vm4udCYmS3Quc3R5'@;
put 'bGUucHVzaCgid2hpdGUtc3BhY2U6IHByZS13cmFwIil9fWVsc2UibiI9PWJyLnQmJkt0LnN0eWxlLnB1c2goInRleHQtYWxpZ246IHJpZ2h0Iik7dmFyIEJyPSgoWWVbIiFjb2xzIl18fFtdKVtTbl18fHt9KS53cHg7bnVsbD09QnImJihCcj0oKFllWyIhc2hlZXRGb3JtYXQiXXx8e30pLmNv'@;
put 'bHx8e30pLndweCl9dmFyIF9yPTA7aWYoWG48PTEmJmxyPD0xJiYoX3I9KChZZVsiIWNvbHMiXXx8W10pW1NuXXx8e30pLndweCkmJkt0LnN0eWxlLnB1c2goIndpZHRoOiAiK19yKyJweCIpLFllWyIhY29uZGZtdCJdJiZvZShicixjdCxTbixZZVsiIWNvbmRmbXQiXSxLdC5zdHlsZSxZZSks'@;
put 'MD09S3Quc3R5bGUubGVuZ3RoP2RlbGV0ZSBLdC5zdHlsZTpLdC5zdHlsZT1LdC5zdHlsZS5qb2luKCI7IiksRXQuY3NzKXt2YXIgRm49YXQuaW5kZXhPZihLdC5zdHlsZSk7LTE9PUZuJiYoYXQucHVzaChLdC5zdHlsZSksRm49YXQubGVuZ3RoLTEpLGRlbGV0ZSBLdC5zdHlsZSxLdC5jbGFz'@;
put 'cz0ic2pzIisoYnR8fCIiKSsiLSIrRm59bHI+MSYmKEt0LnJvd3NwYW49bHIpLFhuPjEmJihLdC5jb2xzcGFuPVhuKSxFdC5lZGl0YWJsZT9lcj0nPHNwYW4gY29udGVudGVkaXRhYmxlPSJ0cnVlIj4nK2VyKyI8L3NwYW4+IjpiciYmKEt0WyJkYXRhLXQiXT1iciYmYnIudHx8InoiLG51bGwh'@;
put 'PWJyLnYmJihLdFsiZGF0YS12Il09YnIudiksbnVsbCE9YnIueiYmKEt0WyJkYXRhLXoiXT1ici56KSksS3QuaWQ9KEV0LmlkfHwic2pzIikrIi0iK2ZyLGt0LnB1c2goUHIoInRkIixlcixLdCkpfX12YXIgWmksanI9e3N0eWxlOltdfTsoWmk9WWVbIiFzaGVldEZvcm1hdCJdKSYmWmkucm93'@;
put 'JiYoanYoWmkucm93KSxaaS5yb3cuaHB4JiYoanIuc3R5bGUucHVzaChbImhlaWdodCIsWmkucm93LmhweCsicHgiXSksanIuaGVpZ2h0PU1hdGgucm91bmQoWmkucm93LmhweCkpKTt2YXIgeWk9WWVbIiFyb3dzIl07aWYoeWkmJnlpW2N0XSl7dmFyIF9hPXlpW2N0XTtfYS5ocHgmJihqci5z'@;
put 'dHlsZS5wdXNoKFsiaGVpZ2h0IiwrX2EuaHB4KyJweCJdKSxqci5oZWlnaHQ9TWF0aC5yb3VuZChfYS5ocHgpKSxfYS5oaWRkZW4mJmpyLnN0eWxlLnB1c2goWyJkaXNwbGF5Iiwibm9uZSJdKX12YXIgc289W107cmV0dXJuIGpyLnN0eWxlPWpyLnN0eWxlLnJldmVyc2UoKS5maWx0ZXIoZnVu'@;
put 'Y3Rpb24oaWEpe3JldHVybiEoc28uaW5kZXhPZihpYVswXSk+LTF8fChzby5wdXNoKGlhWzBdKSwwKSl9KS5tYXAoZnVuY3Rpb24oaWEpe3JldHVybiBpYVswXSsiOiIraWFbMV19KSwwPT1qci5zdHlsZS5sZW5ndGg/ZGVsZXRlIGpyLnN0eWxlOmpyLnN0eWxlPWpyLnN0eWxlLmpvaW4oIjsi'@;
put 'KSxQcigidHIiLGt0LmpvaW4oIiIpLGpyKX1mdW5jdGlvbiBvZShZZSxldCxjdCxFdCxhdCxidCl7RXQuZm9yRWFjaChmdW5jdGlvbihqdCl7aWYoanQuX3JlZnx8KGp0Ll9yZWY9InN0cmluZyI9PXR5cGVvZiBqdC5yZWY/TXMoanQucmVmKTpqdC5yZWYpLCEoanQuX3JlZi5zLmM+Y3R8fGp0'@;
put 'Ll9yZWYuZS5jPGN0fHxqdC5fcmVmLnMucj5ldHx8anQuX3JlZi5lLnI8ZXR8fCJzY2FsZSIhPT1qdC50KSl7aWYoIm4iIT1ZZS50KXJldHVybjt2YXIga3Q7aWYobnVsbD09anQuX21pbil7anQuX3ZhbHVlcz1bXTtmb3IodmFyIE90PWp0Ll9yZWYucy5yO090PD1qdC5fcmVmLmUucjsrK090'@;
put 'KWZvcih2YXIgS3Q9anQuX3JlZi5zLmM7S3Q8PWp0Ll9yZWYuZS5jOysrS3Qpe3ZhciBUbj1BcnJheS5pc0FycmF5KGJ0KT8oYnRbT3RdfHxbXSlbS3RdOmJ0W3FpKHtyOk90LGM6S3R9KV07VG4mJiJuIj09VG4udCYmanQuX3ZhbHVlcy5wdXNoKFRuLnYpfWlmKGp0Ll92YWx1ZXMuc29ydChm'@;
put 'dW5jdGlvbihycixTbil7cmV0dXJuIHJyLVNufSksanQuX21pbj1qdC5fdmFsdWVzWzBdLGp0Ll9tYXg9anQuX3ZhbHVlcy5zbGljZSgtMSlbMF0sanQuX2JhbmQ9anQuX21heC1qdC5fbWluLGp0LmNtaWQpe3N3aXRjaChqdC5jbWlkLnQpe2Nhc2UibnVtIjpqdC5fbWlkPWp0LmNtaWQudjti'@;
put 'cmVhaztjYXNlInBlcmNlbnQiOmp0Ll9taWQ9anQuY21pZC52LzEwMCpqdC5fYmFuZCtqdC5fbWluO2JyZWFrO2Nhc2UicGVyY2VudGlsZSI6anQuX21pZD1mdW5jdGlvbiBPcihTLFIpe2lmKDA9PVIpcmV0dXJuIFNbMF07aWYoMTAwPT1SKXJldHVybiBTW1MubGVuZ3RoLTFdO3ZhciBHPVIv'@;
put 'MTAwKihTLmxlbmd0aC0xKSxRPUctTWF0aC5mbG9vcihHKTtyZXR1cm4gUSpTW01hdGguY2VpbChHKV0rKDEtUSkqU1tNYXRoLmZsb29yKEcpXX0oanQuX3ZhbHVlcyxqdC5jbWlkLnYpfWp0Ll9iYW5kaD1qdC5fbWF4LWp0Ll9taWQsanQuX2JhbmRsPWp0Ll9taWQtanQuX21pbn19KGt0PWp0'@;
put 'LmNtaWQ/WWUudj49anQuX21pZD9fQyhqdC5jbWlkLmNvbG9yLGp0LmNtYXguY29sb3IsKFllLnYtanQuX21pZCkvanQuX2JhbmRoKTpfQyhqdC5jbWluLmNvbG9yLGp0LmNtaWQuY29sb3IsKFllLnYtanQuX21pbikvanQuX2JhbmRsKTpfQyhqdC5jbWluLmNvbG9yLGp0LmNtYXguY29sb3Is'@;
put 'KFllLnYtanQuX21pbikvanQuX2JhbmQpKSYmYXQucHVzaCgiYmFja2dyb3VuZC1jb2xvcjogIyIra3QpfX0pfWZ1bmN0aW9uIGdlKFllLGV0KXt2YXIgY3Q9e3NwYW46ZXR8fDEsc3R5bGU6IiJ9LEV0PVtdO3JldHVybiBZZSYmWWUud3B4JiYoY3Qud2lkdGg9TWF0aC5yb3VuZCg0KlllLndw'@;
put 'eC8zKSxFdC5wdXNoKCJ3aWR0aDoiKyhZZS53cHh8fDApKyJweCIpKSxFdC5sZW5ndGg+MCYmKGN0LnN0eWxlPUV0LmpvaW4oIjsiKSksUHIoImNvbCIsbnVsbCxjdCl9ZnVuY3Rpb24gcGUoWWUsZXQsY3Qpe3ZhciBFdD17Ym9yZGVyOjAsY2VsbHBhZGRpbmc6MCxjZWxsc3BhY2luZzowLHN0'@;
put 'eWxlOlsiYm9yZGVyLWNvbGxhcHNlOmNvbGxhcHNlIiwidGFibGUtbGF5b3V0OmZpeGVkIl0uam9pbigiOyIpfTtjdCYmY3QuaWQmJihFdC5pZD1jdC5pZCk7dmFyIGF0PVllWyIhY29scyJdLGJ0PVllWyIhc2hlZXRGb3JtYXQiXTtpZihZZSYmYXQpe2Zvcih2YXIganQ9MCxPdD1ldC5zLmM7'@;
put 'T3Q8PWV0LmUuYzsrK090KXt2YXIgS3Q9YXRbT3RdO2p0Kz1LdCYmS3Qud3B4P0t0LndweDpidCYmYnQuY29sJiZidC5jb2wud3B4P2J0LmNvbC53cHg6NTN9RXQuc3R5bGUrPSI7d2lkdGg6IitqdCsicHgifXZhciBycixUbj1bIjx0YWJsZSIrTHUoRXQpKyI+Il07aWYoVG4ucHVzaCgiPHN0'@;
put 'eWxlPnRkIHsgcGFkZGluZy10b3A6IDFweDsgcGFkZGluZy1yaWdodDoxcHg7IHBhZGRpbmctbGVmdDoxcHg7IHRleHQtYWxpZ246Z2VuZXJhbDsgdmVydGljYWwtYWxpZ246Ym90dG9tOyBib3JkZXI6MXB4IHNvbGlkOyBib3JkZXItY29sb3I6IisoY3QmJmN0LmdyaWRjb2xvcj9jdC5ncmlk'@;
put 'Y29sb3I6V3QoWWVbIiFncmlkbGluZXMiXSk/InRyYW5zcGFyZW50IjoiYmxhY2siKSsiOyB3aGl0ZS1zcGFjZTpub3dyYXA7IHRleHQtb3ZlcmZsb3c6ZWxsaXBzaXN9PC9zdHlsZT4iKSxUbi5wdXNoKCc8Y29sZ3JvdXAgc3Bhbj0iJysoZXQuZS5jLWV0LnMuYysxKSsnIj4nKSxhdCl7Zm9y'@;
put 'KHZhciBTbj1ldC5zLmM7U248TWF0aC5taW4oYXQubGVuZ3RoLGV0LmUuYysxKTsrK1NuKSEocnI9YXRbU25dKSYmYnQmJmJ0LmNvbCYmKHJyPWJ0LmNvbCkscnJ8fChycj17d3B4OjUzfSksVG4ucHVzaChnZShyciwxKSk7ZXQuZS5jLWV0LnMuYysxPmF0Lmxlbmd0aCYmKHJyPW51bGwsYnQm'@;
put 'JmJ0LmNvbCYmKHJyPWJ0LmNvbCkscnJ8fChycj17d3B4OjUzfSksVG4ucHVzaChnZShycixldC5lLmMtZXQucy5jKzEtYXQubGVuZ3RoKSkpfWVsc2UgcnI9bnVsbCxidCYmYnQuY29sJiYocnI9YnQuY29sKSxycnx8KHJyPXt3cHg6NTN9KSxUbi5wdXNoKGdlKHJyLGV0LmUuYy1ldC5zLmMr'@;
put 'MSkpO3JldHVybiBUbi5wdXNoKCI8L2NvbGdyb3VwPiIpLFRuLmpvaW4oIiIpfXZhciB5ZT0nPGh0bWw+PGhlYWQ+PG1ldGEgY2hhcnNldD0idXRmLTgiLz48dGl0bGU+U2hlZXRKUyBUYWJsZSBFeHBvcnQ8L3RpdGxlPjwvaGVhZD48Ym9keT4nLFBlPSI8L2JvZHk+PC9odG1sPiI7cmV0dXJu'@;
put 'e3RvX3dvcmtib29rOmZ1bmN0aW9uIEcoWWUsZXQpe3JldHVybiB0aChrKFllLGV0KSxldCl9LHRvX3NoZWV0OmssX3JvdzpRLEJFR0lOOnllLEVORDpQZSxfcHJlYW1ibGU6cGUsaHRtbF90b19yczpmdW5jdGlvbiBSKFllKXt2YXIgZXQ9W10sY3Q9e30sRXQ9MDtyZXR1cm4gWWUucmVwbGFj'@;
put 'ZSgvPChcLz8pKFteXHM/PiFcLzpdKjp8KShbXlxzPz46XC9dKylbXj5dKj4vZ20sZnVuY3Rpb24oYXQsYnQsanQsa3QsT3Qpe3ZhciBUbj1Xbih2cihhdClbMF0pLnJlcGxhY2UoL1s8XC8+XS9nLCIiKSxycj1ZZS5zbGljZShFdCxPdCkucmVwbGFjZSgvXHMvZywiICIpO3N3aXRjaChyci5s'@;
put 'ZW5ndGg+MCYmKGV0LnB1c2goe3Q6InMiLHY6cnIsczpjdH0pLGN0PXF0KGN0KSksVG4udG9Mb3dlckNhc2UoKSl7Y2FzZSJiIjoiLyIhPWJ0P2N0LmJvbGQ9ITA6ZGVsZXRlIGN0LmJvbGQ7YnJlYWs7Y2FzZSJpIjoiLyIhPWJ0P2N0Lml0YWxpYz0hMDpkZWxldGUgY3QuaXRhbGljO2JyZWFr'@;
put 'O2Nhc2UidSI6Ii8iIT1idD9jdC51bmRlcmxpbmU9MTpkZWxldGUgY3QudW5kZXJsaW5lO2JyZWFrO2Nhc2UicyI6Ii8iIT1idD9jdC5zdHJpa2U9ITA6ZGVsZXRlIGN0LnN0cmlrZX1yZXR1cm4gRXQ9T3QrYXQubGVuZ3RoLGF0fSksZXR9LGZyb21fc2hlZXQ6ZnVuY3Rpb24gTmUoWWUsZXQp'@;
put 'e3ZhciBjdD1ldHx8e30sYXQ9bnVsbCE9Y3QuZm9vdGVyP2N0LmZvb3RlcjpQZSxidD1bbnVsbCE9Y3QuaGVhZGVyP2N0LmhlYWRlcjp5ZSwiIl0sanQ9W10sa3Q9KG5ldyBEYXRlKS52YWx1ZU9mKCk7WWV8fChZZT17fSksWWVbIiFyZWYiXXx8KFllWyIhcmVmIl09IkExOkExIik7dmFyIE90'@;
put 'PU1zKFllWyIhcmVmIl0pO2lmKGN0LmRlbnNlPUFycmF5LmlzQXJyYXkoWWUpLGN0LnNraXBlbmQpe3ZhciBLdD1PdC5lLnI7ZTpmb3IoO0t0Pj1PdC5zLnI7LS1LdClmb3IodmFyIFRuPU90LmUuYztUbj49T3Qucy5jOy0tVG4paWYobnVsbCE9KChjdC5kZW5zZT8oWWVbS3RdfHxbXSlbVG5d'@;
put 'OlllW3FpKHtyOkt0LGM6VG59KV0pfHx7fSkudilicmVhayBlO090LmUucj1LdDt2YXIgcnI9T3QuZS5jO2U6Zm9yKDtycj49T3Qucy5jOy0tcnIpZm9yKHZhciBTbj1PdC5lLnI7U24+PU90LnMucjstLVNuKWlmKG51bGwhPSgoY3QuZGVuc2U/KFllW1NuXXx8W10pW3JyXTpZZVtxaSh7cjpT'@;
put 'bixjOnJyfSldKXx8e30pLnYpYnJlYWsgZTtPdC5lLmM9cnJ9YnQucHVzaChwZShZZSxPdCxjdCkpO2Zvcih2YXIgbHI9T3Qucy5yO2xyPD1PdC5lLnI7KytscilidC5wdXNoKFEoWWUsT3QsbHIsY3QsanQsa3QpKTtyZXR1cm4gYnQucHVzaCgiPC90YWJsZT4iK2F0KSxjdC5jc3MmJihidFsx'@;
put 'XT0iPHN0eWxlPlxuIitqdC5tYXAoZnVuY3Rpb24oWG4sQm4pe3JldHVybiIuc2pzIitrdCsiLSIrQm4rIiB7IitYbisifSJ9KS5qb2luKCJcbiIpKyI8L3N0eWxlPiIpLGJ0LmpvaW4oIiIpfX19KCk7ZnVuY3Rpb24gQUkoUyxSLGspe3ZhciBHPXt9O2lmKHR5cGVvZiBnZXRDb21wdXRlZFN0'@;
put 'eWxlPiJ1IilyZXR1cm4gRzt2YXIgUT1nZXRDb21wdXRlZFN0eWxlKFMpO2lmKCg3MDA9PVFbImZvbnQtd2VpZ2h0Il18fCJib2xkIj09UVsiZm9udC13ZWlnaHQiXSkmJihHLmJvbGQ9ITApLChRWyJmb250LXN0eWxlIl18fCIiKS5tYXRjaCgvaXRhbGljLykmJihHLml0YWxpYz0hMCksKFFb'@;
put 'InRleHQtZGVjb3JhdGlvbiJdfHwiIikubWF0Y2goL3VuZGVybGluZS8pJiYoRy51bmRlcmxpbmU9MSksKFFbInRleHQtZGVjb3JhdGlvbiJdfHwiIikubWF0Y2goL2xpbmUtdGhyb3VnaC8pJiYoRy5zdHJpa2U9MSkscGFyc2VJbnQoUVsiZm9udC1zaXplIl0pJiYoRy5zej1wYXJzZUZsb2F0'@;
put 'KFFbImZvbnQtc2l6ZSJdKSooUVsiZm9udC1zaXplIl0ubWF0Y2goL3B4Lyk/My80OjEpKSxRWyJmb250LWZhbWlseSJdJiYoRy5uYW1lPVFbImZvbnQtZmFtaWx5Il0uc3BsaXQoIiwiKVswXS5yZXBsYWNlKC9ccyoiXHMqL2csIiIpKSxRLmNvbG9yKXt2YXIgb2U9RTUoUS5jb2xvci50b0xv'@;
put 'd2VyQ2FzZSgpLCEwKTtvZT49MCYmKEcuY29sb3I9e3JnYjpvZX0pfXN3aXRjaChRWyJ0ZXh0LXRyYW5zZm9ybSJdJiYoRy50ZXh0X3RyYW5zZm9ybT1RWyJ0ZXh0LXRyYW5zZm9ybSJdLnRvTG93ZXJDYXNlKCkpLCJub25lIiE9KFFbInRleHQtc2hhZG93Il18fCJub25lIikmJihHLnNoYWRv'@;
put 'dz0hMCksUVsidGV4dC1hbGlnbiJdKXtjYXNlImNlbnRlciI6Ry5hbGlnbm1lbnQ9e2hvcml6b250YWw6ImNlbnRlciJ9O2JyZWFrO2Nhc2UicmlnaHQiOkcuYWxpZ25tZW50PXtob3Jpem9udGFsOiJyaWdodCJ9O2JyZWFrO2Nhc2UibGVmdCI6Ry5hbGlnbm1lbnQ9e2hvcml6b250YWw6Imxl'@;
put 'ZnQifTticmVhaztjYXNlImp1c3RpZnkiOkcuYWxpZ25tZW50PXtob3Jpem9udGFsOiJqdXN0aWZ5In19c3dpdGNoKFFbInZlcnRpY2FsLWFsaWduIl0pe2Nhc2UidG9wIjpjYXNlIm1pZGRsZSI6Y2FzZSJib3R0b20iOkcuYWxpZ25tZW50fHwoRy5hbGlnbm1lbnQ9e30pLEcuYWxpZ25tZW50'@;
put 'LnZlcnRpY2FsPVFbInZlcnRpY2FsLWFsaWduIl0sIm1pZGRsZSI9PUcuYWxpZ25tZW50LnZlcnRpY2FsJiYoRy5hbGlnbm1lbnQudmVydGljYWw9ImNlbnRlciIpO2JyZWFrO2Nhc2Uic3ViIjpjYXNlInN1cGVyIjpHLnZhbGlnbj1RWyJ2ZXJ0aWNhbC1hbGlnbiJdLEcuc3omJihHLnN6Lz0u'@;
put 'ODMpfXZhciBnZT1SJiZnZXRDb21wdXRlZFN0eWxlKFIpO3JldHVybiBnZSYmayYmUiYmWyJsZWZ0IiwicmlnaHQiLCJ0b3AiLCJib3R0b20iXS5mb3JFYWNoKGZ1bmN0aW9uKHBlKXt2YXIgeWU9cGUuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkrcGUuc2xpY2UoMSksUGU9Z2VbImJvcmRlci0i'@;
put 'K3BlKyItc3R5bGUiXTtpZigoIm5vbmUiPT1QZXx8IVBlKSYmKFBlPWdlWyJib3JkZXIiK3llKyJTdHlsZSJdKSwibm9uZSIhPVBlJiZQZSl7dmFyIE5lPXBhcnNlSW50KGdlWyJib3JkZXItIitwZSsiLXdpZHRoIl18fGdlWyJib3JkZXIiK3llKyJXaWR0aCJdLDEwKSxZZT0idGhpbiI7aWYo'@;
put 'TmU+MCl7c3dpdGNoKFBlKXtjYXNlImRvdWJsZSI6WWU9ImRvdWJsZSI7YnJlYWs7Y2FzZSJkYXNoZWQiOlllPU5lPj0yPyJtZWRpdW1EYXNoZWQiOiJkYXNoZWQiO2JyZWFrO2Nhc2UiZG90dGVkIjpZZT1OZT49Mj8ibWVkaXVtRGFzaERvdERvdCI6ImRvdHRlZCI7YnJlYWs7Y2FzZSJzb2xp'@;
put 'ZCI6WWU9TmU+PTM/InRoaWNrIjpOZT49Mj8ibWVkaXVtIjoidGhpbiJ9aWYoR1twZV09e3N0eWxlOlllfSxnZVsiYm9yZGVyLSIrcGUrIi1jb2xvciJdfHxnZVsiYm9yZGVyIit5ZSsiQ29sb3IiXSl7dmFyIGV0PUU1KChnZVsiYm9yZGVyLSIrcGUrIi1jb2xvciJdfHxnZVsiYm9yZGVyIit5'@;
put 'ZSsiQ29sb3IiXSkudG9Mb3dlckNhc2UoKSwhMCk7ZXQ+PTAmJihHW3BlXS5jb2xvcj17cmdiOmV0fSl9fX19KSxHfWZ1bmN0aW9uIERJKFMsUixrKXt2YXIgRz1TLmNoaWxkTm9kZXM7aWYoMT09Uy5ub2RlVHlwZSlzd2l0Y2goUy50YWdOYW1lLnRvTG93ZXJDYXNlKCkpe2Nhc2UicCI6Ui5s'@;
put 'ZW5ndGg+MCYmUi5wdXNoKHt0OiJ0Iix2OiJcbiIsczprfSk7YnJlYWs7Y2FzZSJzZWxlY3QiOnJldHVybiBmdW5jdGlvbiBrSShTLFIsayl7Ui5wdXNoKHt0OiJ0Iix2OlMuY2hpbGRyZW5bUy5zZWxlY3RlZEluZGV4XS5pbm5lclRleHQsczprfSl9KFMsUixrKX1pZihHLmxlbmd0aD4wKXt2'@;
put 'YXIgUT1BSShTLG51bGwsITEpO2smJihrLnVuZGVybGluZSYmKFEudW5kZXJsaW5lPWsudW5kZXJsaW5lKSxrLnN0cmlrZSYmKFEuc3RyaWtlPWsuc3RyaWtlKSk7Zm9yKHZhciBvZT0wO29lPEcubGVuZ3RoOysrb2Upe3RyeXtpZihHW29lXS5nZXRBdHRyaWJ1dGUoImFyaWEtaGlkZGVuIikp'@;
put 'Y29udGludWV9Y2F0Y2h7fURJKEdbb2VdLFIsUSl9ZGVsZXRlIFEudGV4dF90cmFuc2Zvcm19ZWxzZSBpZigzPT1TLm5vZGVUeXBlKXt2YXIgZ2U9e3Q6InQiLHY6Uy5ub2RlVmFsdWUucmVwbGFjZSgvXltcbiBdKy8sIiAiKS5yZXBsYWNlKC9bXG4gXSskLywiICIpLHM6a307c3dpdGNoKGsu'@;
put 'dGV4dF90cmFuc2Zvcm0pe2Nhc2UidXBwZXJjYXNlIjpnZS52PWdlLnYudG9VcHBlckNhc2UoKTticmVhaztjYXNlImxvd2VyY2FzZSI6Z2Uudj1nZS52LnRvTG93ZXJDYXNlKCl9KFIubGVuZ3RoPjB8fGdlLnYmJiIgIiE9Z2UudikmJlIucHVzaChnZSl9ZWxzZSAxPT1TLm5vZGVUeXBlJiYi'@;
put 'YnIiPT09Uy50YWdOYW1lLnRvTG93ZXJDYXNlKCkmJlIucHVzaCh7dDoidCIsdjoiXG4iLHM6a30pfWZ1bmN0aW9uIERiKFMsUixrLEcsUSl7dmFyIGdlLG9lPVMuaW5uZXJIVE1MO2lmKHR5cGVvZiBnZXRDb21wdXRlZFN0eWxlPCJ1Iilzd2l0Y2goZ2U9Z2V0Q29tcHV0ZWRTdHlsZShTKSwo'@;
put 'Z2VbIndoaXRlLXNwYWNlIl18fCIiKS5tYXRjaCgvcHJlLykmJihvZT1vZS5yZXBsYWNlKC9cbi9nLCI8YnIvPiIpKSwoZ2VbInRleHQtdHJhbnNmb3JtIl18fCIiKS50b0xvd2VyQ2FzZSgpKXtjYXNlInVwcGVyY2FzZSI6b2U9b2UudG9VcHBlckNhc2UoKTticmVhaztjYXNlImxvd2VyY2Fz'@;
put 'ZSI6b2U9b2UudG9Mb3dlckNhc2UoKX12YXIgcGU9ZnVuY3Rpb24ga2IoUyxSLGssRyl7dmFyIFE9e3Q6InMiLHY6Un0sb2U9IiI7aWYoUyl7az1TLmdldEF0dHJpYnV0ZSgiZGF0YS10Iil8fFMuZ2V0QXR0cmlidXRlKCJ0Iik7dmFyIGdlPVMuZ2V0QXR0cmlidXRlKCJkYXRhLXYiKXx8Uy5n'@;
put 'ZXRBdHRyaWJ1dGUoInYiKTtpZihudWxsIT0ob2U9Uy5nZXRBdHRyaWJ1dGUoImRhdGEteiIpfHxTLmdldEF0dHJpYnV0ZSgieiIpKSYmKFEuej1vZSksbnVsbCE9ayYmbnVsbCE9Z2UpcmV0dXJuIFEudD1rLFEudj1nZSxRfXJldHVybiBudWxsIT1SJiYoMD09Ui5sZW5ndGg/US50PWt8fCJ6'@;
put 'IjpHLnJhd3x8IVIudHJpbSgpLmxlbmd0aHx8InMiPT1rfHwoUT1SaShSLEcpKSksb2UmJihRLno9b2UpLFF9KFMsaXIob2UpLGssUSk7aWYodHlwZW9mIGdldENvbXB1dGVkU3R5bGU8InUiJiYocGUucz1BSShTLFIsUS5ib3JkZXJzKSxkZWxldGUgcGUucy50ZXh0X3RyYW5zZm9ybSxTLmNo'@;
put 'aWxkTm9kZXMubGVuZ3RoPjF8fDE9PVMuY2hpbGROb2Rlcy5sZW5ndGgmJjMhPVMuY2hpbGROb2Rlc1swXS5ub2RlVHlwZSkpc3dpdGNoKERJKFMscGUuUj1bXSxudWxsKSxwZS5SJiZwZS5SW3BlLlIubGVuZ3RoLTFdJiYiXG4iPT1wZS5SW3BlLlIubGVuZ3RoLTFdLnYmJnBlLlIubGVuZ3Ro'@;
put 'LS0sKGdlWyJ0ZXh0LXRyYW5zZm9ybSJdfHwiIikudG9Mb3dlckNhc2UoKSl7Y2FzZSJ1cHBlcmNhc2UiOnBlLlIuZm9yRWFjaChmdW5jdGlvbihldCl7ZXQudj1ldC52LnRvVXBwZXJDYXNlKCl9KTticmVhaztjYXNlImxvd2VyY2FzZSI6cGUuUi5mb3JFYWNoKGZ1bmN0aW9uKGV0KXtldC52'@;
put 'PWV0LnYudG9Mb3dlckNhc2UoKX0pfWlmKCJzIj09cGUudCl7dmFyIHllPXBlLnYubWF0Y2goL1xuLyk7IXllJiZwZS5SJiZwZS5SLmZvckVhY2goZnVuY3Rpb24oZXQpeyJzdHJpbmciPT10eXBlb2YgZXQudiYmZXQudi5tYXRjaCgvXG4vKSYmKHllPSEwKX0pLCJzIj09cGUudCYmeWUmJihw'@;
put 'ZS5zfHwocGUucz17fSkscGUucy5hbGlnbm1lbnR8fChwZS5zLmFsaWdubWVudD17fSkscGUucy5hbGlnbm1lbnQud3JhcFRleHQ9ITApfWlmKFIpe3ZhciBQZT0iIixOZT1SLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJBIik7aWYoTmUmJk5lLmxlbmd0aClmb3IodmFyIFllPTA7WWU8TmUubGVu'@;
put 'Z3RoJiYoIU5lW1llXS5oYXNBdHRyaWJ1dGUoImhyZWYiKXx8IiMiPT0oUGU9TmVbWWVdLmdldEF0dHJpYnV0ZSgiaHJlZiIpKS5jaGFyQXQoMCkpOysrWWUpO1BlJiYiIyIhPVBlLmNoYXJBdCgwKSYmKHBlLmw9e1RhcmdldDpQZX0pfXJldHVybiBwZX1mdW5jdGlvbiBJYihTLFIsayl7dmFy'@;
put 'IFEsRz1SLnJvd3M7aWYoIUcpe2lmKGsmJm51bGwhPWsub3JpZ2luKXRocm93IlVuc3VwcG9ydGVkIG9yaWdpbiB3aGVuICIrUi50YWdOYW1lKyIgaXMgbm90IGEgVEFCTEUiO3JldHVybiBmdW5jdGlvbiBRbmUoUyxSLGspe2s9SlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShrfHx7fSkpO3Zh'@;
put 'ciBvZT17czp7cjowLGM6MH0sZTp7cjowLGM6MH19O1NbIiFtZXJnZXMiXXx8KFNbIiFtZXJnZXMiXT1bXSk7Zm9yKHZhciBwZSxnZT1SLmNoaWxkcmVuLHllPTAsUGU9MDtQZTxnZS5sZW5ndGg7KytQZSl7dmFyIGV0LE5lPWdlW1BlXSxZZT0iIjt0cnl7dHlwZW9mIGdldENvbXB1dGVkU3R5'@;
put 'bGU8InUiP2V0PWdldENvbXB1dGVkU3R5bGU6TmUub3duZXJEb2N1bWVudC5kZWZhdWx0VmlldyYmImZ1bmN0aW9uIj09dHlwZW9mIE5lLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZSYmKGV0PU5lLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcuZ2V0Q29tcHV0'@;
put 'ZWRTdHlsZSl9Y2F0Y2h7fWlmKCFldHx8Im5vbmUiIT1ldChOZSkuZGlzcGxheSlzd2l0Y2goTmUudGFnTmFtZS50b1VwcGVyQ2FzZSgpKXtjYXNlIlRBQkxFIjp5ZT0tMSxTWyIhcmVmIl0mJihrLm9yaWdpbj0tMSksSWIoUyxOZSxrKTticmVhaztjYXNlIkJSIjpjYXNlIkhSIjp5ZT0tMSxT'@;
put 'WyIhcmVmIl0/KCsrKG9lPU1zKFNbIiFyZWYiXSkpLmUucixTWyIhcmVmIl09cmEob2UpKTpTWyIhcmVmIl09IkExOkExIjticmVhaztjYXNlIkRJViI6Y2FzZSJQIjpjYXNlIkgxIjpjYXNlIkgyIjpjYXNlIkgzIjpjYXNlIkg0IjpjYXNlIkg1IjpjYXNlIkg2Ijp5ZT0tMSxwZT1EYihOZSxu'@;
put 'dWxsLCIiLDAsayksU1siIXJlZiJdPyhrLm9yaWdpbj0tMSxmNChTLFtbcGVdXSxrKSk6KFNbIiFyZWYiXT0iQTEiLEFycmF5LmlzQXJyYXkoUyk/KFNbMF18fChTWzBdPVtdKSxTWzBdWzBdPXBlKTpTLkExPXBlKSxTWyIhcm93cyJdfHwoU1siIXJvd3MiXT1bXSksZXQmJihvZT1NcyhTWyIh'@;
put 'cmVmIl0pLChZZT1ldChOZSkuaGVpZ2h0KSYmImF1dG8iIT1ZZSYmKFNbIiFyb3dzIl1bb2UuZS5yXT17aHB0OnBhcnNlSW50KFllLDEwKX0pKTticmVhaztjYXNlIlNQQU4iOmNhc2UiQSI6Y2FzZSJCIjpjYXNlIkVNIjpjYXNlIkkiOmNhc2UiRk9OVCI6Y2FzZSJTIjpjYXNlIlNVQiI6Y2Fz'@;
put 'ZSJTVVAiOmNhc2UiVSI6cGU9RGIoTmUsbnVsbCwiIiwwLGspLFNbIiFyZWYiXXx8KFNbIiFyZWYiXT0iQTE6QTEiKSxmNChTLFtbcGVdXSx7b3JpZ2luOnFpKHtyOih5ZTwwPzE6MCkrKG9lPU1zKFNbIiFyZWYiXSkpLmUucixjOisreWV9KX0pO2JyZWFrO2Nhc2UiREwiOmNhc2UiVUwiOmNh'@;
put 'c2UiT0wiOnllPS0xLGNvbnNvbGUuZXJyb3IoIkhUTUwgQ29udmVyc2lvbiBkb2VzIG5vdCBzdXBwb3J0IGxpc3QgZWxlbWVudCAiK05lLnRhZ05hbWUudG9VcHBlckNhc2UoKSk7YnJlYWs7ZGVmYXVsdDp5ZT0tMSxjb25zb2xlLmVycm9yKCJTa2lwcGluZyAiK05lLnRhZ05hbWUudG9VcHBl'@;
put 'ckNhc2UoKSl9fXJldHVybiBTfShTLFIsayl9dHJ5e3R5cGVvZiBnZXRDb21wdXRlZFN0eWxlPCJ1Ij9RPWdldENvbXB1dGVkU3R5bGU6Ui5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3JiYiZnVuY3Rpb24iPT10eXBlb2YgUi5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3LmdldENvbXB1dGVk'@;
put 'U3R5bGUmJihRPVIub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlldy5nZXRDb21wdXRlZFN0eWxlKX1jYXRjaHt9dmFyIG9lPWt8fHt9O251bGwhPWxlJiYob2UuZGVuc2U9bGUpO3ZhciBnZT0wLHBlPTA7aWYobnVsbCE9b2Uub3JpZ2luKWlmKCJudW1iZXIiPT10eXBlb2Ygb2Uub3JpZ2luKWdl'@;
put 'PW9lLm9yaWdpbjtlbHNle3ZhciB5ZT0ic3RyaW5nIj09dHlwZW9mIG9lLm9yaWdpbj9ObyhvZS5vcmlnaW4pOm9lLm9yaWdpbjtnZT15ZS5yLHBlPXllLmN9dmFyIFBlPU1hdGgubWluKG9lLnNoZWV0Um93c3x8MWU3LEcubGVuZ3RoKSxOZT17czp7cjowLGM6MH0sZTp7cjpnZSxjOnBlfX07'@;
put 'aWYoU1siIXJlZiJdKXt2YXIgWWU9TXMoU1siIXJlZiJdKTtOZS5zLnI9TWF0aC5taW4oTmUucy5yLFllLnMuciksTmUucy5jPU1hdGgubWluKE5lLnMuYyxZZS5zLmMpLE5lLmUucj1NYXRoLm1heChOZS5lLnIsWWUuZS5yKSxOZS5lLmM9TWF0aC5tYXgoTmUuZS5jLFllLmUuYyksLTE9PWdl'@;
put 'JiYoTmUuZS5yPWdlPVllLmUucisxKX12YXIgZXQ9W10sY3Q9MCxFdD1TWyIhcm93cyJdfHwoU1siIXJvd3MiXT1bXSksYXQ9MCxidD0wLGp0PTAsa3Q9MCxPdD0wLEt0PTA7Zm9yKFNbIiFjb2xzIl18fChTWyIhY29scyJdPVtdKTthdDxHLmxlbmd0aCYmYnQ8UGU7KythdCl7Zm9yKHZhciBU'@;
put 'bj1HW2F0XSxycj1Ubi5wYXJlbnRFbGVtZW50OyJUQUJMRSIhPXJyLnRhZ05hbWUudG9VcHBlckNhc2UoKTspcnI9cnIucGFyZW50RWxlbWVudDtpZihycj09Uil7ZTppZih0eXBlb2YgUTwidSIpe3ZhciBTbj1RKFRuKTtpZihudWxsPT1TbilicmVhayBlO2lmKFNuLnN0eWxlfHwoU24uc3R5'@;
put 'bGU9e30pLG9lLmRpc3BsYXkmJiJub25lIj09KFNuLmRpc3BsYXl8fFNuLnN0eWxlLmRpc3BsYXkpKWNvbnRpbnVlOyJub25lIj09KFNuLmRpc3BsYXl8fFNuLnN0eWxlLmRpc3BsYXkpJiYoKEV0W2J0XXx8KEV0W2J0XT17fSkpLmhpZGRlbj0hMCl9dmFyIGxyPVRuLmNlbGxzO2ZvcihqdD1r'@;
put 'dD0wO2p0PGxyLmxlbmd0aDsrK2p0KXt2YXIgWG49bHJbanRdLEJuPW51bGw7aWYoISh0eXBlb2YgUTwidSImJihudWxsPT1CbiYmKEJuPVEoWG4pKSxCbi5zdHlsZXx8KEJuLnN0eWxlPXt9KSxvZS5kaXNwbGF5JiZudWxsIT1CbiYmIm5vbmUiPT0oQm4uZGlzcGxheXx8Qm4uc3R5bGUuZGlz'@;
put 'cGxheSkpKSl7Zm9yKEt0PStYbi5nZXRBdHRyaWJ1dGUoImNvbHNwYW4iKXx8MSxjdD0wO2N0PGV0Lmxlbmd0aDsrK2N0KXt2YXIgZnI9ZXRbY3RdO2ZyLnMuYz09a3QrcGUmJmZyLnMucjxidCtnZSYmYnQrZ2U8PWZyLmUuciYmKGt0PWZyLmUuYysxLXBlLGN0PS0xKX0oKE90PStYbi5nZXRB'@;
put 'dHRyaWJ1dGUoInJvd3NwYW4iKXx8MSk+MXx8S3Q+MSkmJmV0LnB1c2goe3M6e3I6YnQrZ2UsYzprdCtwZX0sZTp7cjpidCtnZSsoT3R8fDEpLTEsYzprdCtwZSsoS3R8fDEpLTF9fSk7dmFyIGJyPVhuLmdldEF0dHJpYnV0ZSgidCIpfHwiIixlcj1Ybi5nZXRBdHRyaWJ1dGUoImJnY29sb3Ii'@;
put 'KTtlOmlmKHR5cGVvZiBRPCJ1Iil7aWYobnVsbD09Qm4mJihCbj1RKFhuKSksbnVsbD09Qm4pYnJlYWsgZTtpZihCbi5zdHlsZXx8KEJuLnN0eWxlPXt9KSwxPT1LdCYmQm4ud2lkdGgmJihTWyIhY29scyJdW2t0K3BlXT1TWyIhY29scyJdW2t0K3BlXXx8e30sQm4ud2lkdGgubWF0Y2goL3B4'@;
put 'Lyk/U1siIWNvbHMiXVtrdCtwZV0ud3B4PU1hdGgubWF4KHBhcnNlSW50KEJuLndpZHRoLDEwKSs1LFNbIiFjb2xzIl1ba3QrcGVdLndweHx8MCk6Qm4ud2lkdGgubWF0Y2goL3B0LykmJihTWyIhY29scyJdW2t0K3BlXS53cHg9TWF0aC5tYXgoNCpwYXJzZUludChCbi53aWR0aCwxMCkvMys1'@;
put 'LFNbIiFjb2xzIl1ba3QrcGVdLndweHx8MCkpKSxPdDw9MSl7RXRbYnQrZ2VdfHwoRXRbYnQrZ2VdPXt9KTt2YXIgTWk9Qm4uaGVpZ2h0OyhNaT1NaS5tYXRjaCgvcHQvKT9zaChwYXJzZUludChNaSwxMCkpOnBhcnNlSW50KE1pLDEwKSk+KEV0W2J0K2dlXS5ocHh8fHNoKEV0W2J0K2dlXS5o'@;
put 'cHQpfHwwKSYmKGRlbGV0ZSBFdFtidCtnZV0uaHB0LEV0W2J0K2dlXS5ocHg9TWkpfX12YXIgRmk9WG47aWYoWG4uZmlyc3RFbGVtZW50Q2hpbGQmJjE9PVhuLmNoaWxkcmVuLmxlbmd0aCYmInNwYW4iPT1Ybi5maXJzdEVsZW1lbnRDaGlsZC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpKXtmb3Io'@;
put 'dmFyIG5hPTAsY2E9WG4uY2hpbGROb2RlcyxMaT0wO0xpPGNhLmxlbmd0aDsrK0xpKTM9PWNhW0xpXS5ub2RlVHlwZSYmKytuYTswPT1uYSYmKFhuPVhuLmZpcnN0RWxlbWVudENoaWxkKX12YXIga3I9RGIoWG4sRmksYnIsMCxvZSk7aWYoQm4pe3ZhciBWbj1RKFhuKTtpZihWbiYmIVZuLnN0'@;
put 'eWxlJiYoVm4uc3R5bGU9e30pLChWbiYmVm5bImJhY2tncm91bmQtY29sb3IiXXx8Qm5bImJhY2tncm91bmQtY29sb3IiXSkmJihrci5zfHwoa3Iucz17fSksIWtyLnMuZmdDb2xvcikpdHJ5e3ZhciBCcj1WbiYmVm5bImJhY2tncm91bmQtY29sb3IiXXx8Qm5bImJhY2tncm91bmQtY29sb3Ii'@;
put 'XTtCci5tYXRjaCgvcmdiYVsoXVxzKjAuKlspXS9pKSYmKEJyPUJuWyJiYWNrZ3JvdW5kLWNvbG9yIl0pO3ZhciBfcj1FNShCci50b0xvd2VyQ2FzZSgpLCEwKTtfcj49MCYmKGtyLnMuZmdDb2xvcj17cmdiOl9yfSl9Y2F0Y2h7fXN3aXRjaChCblsidmVydGljYWwtYWxpZ24iXSl7Y2FzZSJt'@;
put 'aWRkbGUiOmNhc2UiYmFzZWxpbmUiOmtyLnN8fChrci5zPXt9KSxrci5zLmFsaWdubWVudHx8KGtyLnMuYWxpZ25tZW50PXt9KSxrci5zLmFsaWdubWVudC52ZXJ0aWNhbD0iY2VudGVyIn19aWYoZXImJihrci5zfHwoa3Iucz17fSksIWtyLnMuZmdDb2xvcikpdHJ5e3ZhciBGbj1FNShlci50'@;
put 'b0xvd2VyQ2FzZSgpLCEwKTtGbj49MCYmKGtyLnMuZmdDb2xvcj17cmdiOkZufSl9Y2F0Y2h7fWlmKG9lLmRlbnNlPyhTW2J0K2dlXXx8KFNbYnQrZ2VdPVtdKSxTW2J0K2dlXVtrdCtwZV09a3IpOlNbcWkoe2M6a3QrcGUscjpidCtnZX0pXT1rcixPdD4xfHxLdD4xKWZvcih2YXIganI9YnQ7'@;
put 'anI8YnQrT3Q7Kytqcilmb3IodmFyIFppPWt0O1ppPGt0K0t0OysrWmkpYnQ9PWpyJiZrdD09Wml8fChvZS5kZW5zZT8oU1tqcitnZV18fChTW2pyK2dlXT1bXSksU1tqcitnZV1bWmkrcGVdPXt0OiJ6IixzOnF0KGtyLnN8fHt9KX0pOlNbcWkoe2M6WmkrcGUscjpqcitnZX0pXT17dDoieiIs'@;
put 'czpxdChrci5zfHx7fSl9KTtOZS5lLmM8a3QrcGUmJihOZS5lLmM9a3QrcGUpLGt0Kz1LdH19KytidH19aWYoZXQubGVuZ3RoJiYoU1siIW1lcmdlcyJdPShTWyIhbWVyZ2VzIl18fFtdKS5jb25jYXQoZXQpKSxOZS5lLnI9TWF0aC5tYXgoTmUuZS5yLGJ0LTErZ2UpLFNbIiFyZWYiXT1yYShO'@;
put 'ZSksYnQ+PVBlJiYoU1siIWZ1bGxyZWYiXT1yYSgoTmUuZS5yPUcubGVuZ3RoLWF0K2J0LTErZ2UsTmUpKSksb2UuYm9yZGVycylmb3IoYnQ9TmUucy5yO2J0PD1OZS5lLnI7KytidClmb3Ioa3Q9TmUucy5jO2t0PD1OZS5lLmM7KytrdClpZighb2UuZGVuc2Upe3ZhciB5aT1TW3FpKHtyOmJ0'@;
put 'LGM6a3R9KV07aWYoIXlpfHwheWkucyljb250aW51ZTtpZihidD4wKXt2YXIgX2E9U1txaSh7cjpidC0xLGM6a3R9KV07X2EmJl9hLnMmJl9hLnMuYm90dG9tJiZkZWxldGUgeWkucy50b3B9aWYoa3Q+MCl7dmFyIHNvPVNbcWkoe3I6YnQsYzprdC0xfSldO3NvJiZzby5zJiZzby5zLmJvdHRv'@;
put 'bSYmZGVsZXRlIHlpLnMubGVmdH19cmV0dXJuIFN9ZnVuY3Rpb24ganooUyxSKXtyZXR1cm4gSWIoKFJ8fHt9KS5kZW5zZT9bXTp7fSxTLFIpfXZhciBYUz1mdW5jdGlvbigpe3ZhciBTPWZ1bmN0aW9uKEcsUSxvZSl7dmFyIGdlPUcucmVwbGFjZSgvW1x0XHJcbl0vZywiICIpLnRyaW0oKS5y'@;
put 'ZXBsYWNlKC8gKy9nLCIgIikucmVwbGFjZSgvPHRleHQ6c1wvPi9nLCIgIikucmVwbGFjZSgvPHRleHQ6cyB0ZXh0OmM9IihcZCspIlwvPi9nLGZ1bmN0aW9uKE5lLFllKXtyZXR1cm4gQXJyYXkocGFyc2VJbnQoWWUsMTApKzEpLmpvaW4oIiAiKX0pLnJlcGxhY2UoLzx0ZXh0OnRhYltePl0q'@;
put 'XC8+L2csIlx0IikucmVwbGFjZSgvPHRleHQ6bGluZS1icmVha1wvPi9nLCJcbiIpLHBlPVFyKGdlLnJlcGxhY2UoLzxbXj5dKj4vZywiIikpLHllPVtdLFBlPTA7cmV0dXJuIGdlLnJlcGxhY2UoLyg8dGV4dDpzcGFuLio/PikoLio/KTxbXC9ddGV4dDpzcGFuPi9nLGZ1bmN0aW9uKE5lLFll'@;
put 'LGV0LGN0KXtjdCE9UGUmJnllLnB1c2goe3Q6InMiLHY6UXIoZ2Uuc2xpY2UoUGUsY3QpKX0pO3ZhciBFdD17dDoicyIsdjpRcihldCl9LGF0PXZyKFllKVsic3R5bGUtbmFtZSJdO3JldHVybiBhdCYmb2VbYXRdJiYoRXQucz1xdChvZVthdF0pKSx5ZS5wdXNoKEV0KSxQZT1jdCtOZS5sZW5n'@;
put 'dGgsIiJ9KSxQZTxnZS5sZW5ndGgmJnllLnB1c2goe3Q6InMiLHY6UXIoZ2Uuc2xpY2UoUGUpKX0pLFtwZSx5ZV19LFI9e2RheTpbImQiLCJkZCJdLG1vbnRoOlsibSIsIm1tIl0seWVhcjpbInkiLCJ5eSJdLGhvdXJzOlsiaCIsImhoIl0sbWludXRlczpbIm0iLCJtbSJdLHNlY29uZHM6WyJz'@;
put 'Iiwic3MiXSwiYW0tcG0iOlsiQS9QIiwiQU0vUE0iXSwiZGF5LW9mLXdlZWsiOlsiZGRkIiwiZGRkZCJdLGVyYTpbImUiLCJlZSJdLHF1YXJ0ZXI6WyJcXFFtIiwnbVxcInRoIHF1YXJ0ZXIiJ119LGs9ZnVuY3Rpb24oRyxRKXt2YXIgb2U9dnIoRy5zbGljZSgwLEcuaW5kZXhPZigiPiIpKSks'@;
put 'Z2U9Ry5zbGljZShHLmluZGV4T2YoIj4iKSsxKSxwZT17bmFtZTpvZS5uYW1lLGZhbWlseTpvZS5mYW1pbHl9O1tbInBhcmVudCIsInBhcmVudC1zdHlsZS1uYW1lIl0sWyJkYXRhbmFtZSIsImRhdGEtc3R5bGUtbmFtZSJdLFsibXBuYW1lIiwibWFzdGVyLXBhZ2UtbmFtZSJdXS5mb3JFYWNo'@;
put 'KGZ1bmN0aW9uKFBlKXtvZVtQZVsxXV0mJihwZVtQZVswXV09b2VbUGVbMV1dKX0pO3ZhciB5ZT17fTtnZS5yZXBsYWNlKGVuLGZ1bmN0aW9uKFBlKXt2YXIgTmU9dnIoUGUpO2lmKCI8c3R5bGU6dGV4dC1wcm9wZXJ0aWVzIj09PU5lWzBdKXtpZihOZVsiZm9udC13ZWlnaHQiXSYmKHllLmJv'@;
put 'bGQ9KygiYm9sZCI9PU5lWyJmb250LXdlaWdodCJdfHwiNzAwIj09TmVbImZvbnQtd2VpZ2h0Il0pKSwoIml0YWxpYyI9PU5lWyJmb250LXN0eWxlIl18fCJvYmxpcXVlIj09TmVbImZvbnQtc3R5bGUiXSkmJih5ZS5pdGFsaWM9MSksIm5vbmUiIT0oTmVbInRleHQtdW5kZXJsaW5lLXN0eWxl'@;
put 'Il18fCJub25lIik/eWUudW5kZXJsaW5lPSJkb3VibGUiPT1OZVsidGV4dC11bmRlcmxpbmUtdHlwZSJdPzI6MTooTmVbInRleHQtdW5kZXJsaW5lLXN0eWxlIl18fCJub25lIj09TmVbInRleHQtdW5kZXJsaW5lLXR5cGUiXSkmJih5ZS51bmRlcmxpbmU9MCksKE5lWyJmb250LXNpemUiXXx8'@;
put 'IiIpLm1hdGNoKC9wdCQvKSYmKHllLnN6PStOZVsiZm9udC1zaXplIl0ucmVwbGFjZSgicHQiLCIiKSksIm5vbmUiIT0oTmVbInRleHQtbGluZS10aHJvdWdoLXN0eWxlIl18fCJub25lIikmJih5ZS5zdHJpa2U9MSksTmVbImZvbnQtbmFtZSJdJiYoeWUubmFtZT1OZVsiZm9udC1uYW1lIl0p'@;
put 'LE5lLmNvbG9yKXt2YXIgWWU9RTUoTmUuY29sb3IsITApO1llPj0wJiYoeWUuY29sb3I9WWUpfXN3aXRjaChOZVsidGV4dC1wb3NpdGlvbiJdKXtjYXNlInN1cGVyIjp5ZS52YWxpZ249InN1cGVyIjticmVhaztjYXNlInN1YiI6eWUudmFsaWduPSJzdWIiO2JyZWFrO2RlZmF1bHQ6KE5lWyJ0'@;
put 'ZXh0LXBvc2l0aW9uIl18fCIiKS5tYXRjaCgvJS8pJiYoeWUudmFsaWduPSItIj09TmVbInRleHQtcG9zaXRpb24iXS5jaGFyQXQoMCk/InN1YiI6InN1cGVyIil9Im5vbmUiIT0oTmVbInRleHQtc2hhZG93Il18fCJub25lIikmJih5ZS5zaGFkb3c9MSl9cmV0dXJuIiJ9KSxRW29lLm5hbWVd'@;
put 'PXllfTtyZXR1cm4gZnVuY3Rpb24oUSxvZSl7dmFyIGdlPW9lfHx7fTtudWxsIT1sZSYmbnVsbD09Z2UuZGVuc2UmJihnZS5kZW5zZT1sZSk7dmFyIFBlLE5lLEV0LGF0LE90LEt0LHBlPVdTKFEpLHllPVtdLFllPXtuYW1lOiIifSxldD0iIixjdD0wLGJ0PXt9LGp0PVtdLGt0PWdlLmRlbnNl'@;
put 'P1tdOnt9LFRuPXt2YWx1ZToiIn0scnI9IiIsU249MCxYbj1bXSxCbj0tMSxmcj0tMSxicj17czp7cjoxZTYsYzoxZTd9LGU6e3I6MCxjOjB9fSxlcj0wLE1pPXt9LEZpPVtdLG5hPXt9LGNhPTAsTGk9MCxrcj1bXSxWbj0xLEJyPTEsX3I9W10sRm49e05hbWVzOltdfSxqcj17fSxaaT1bIiIs'@;
put 'IiJdLHlpPVtdLF9hPXt9LHNvPXt9LGlhPTAsTG89IiIsT2E9MCxobz0hMSxKYT0hMSxCaT0wO2ZvcihZNS5sYXN0SW5kZXg9MCxwZT1wZS5yZXBsYWNlKC88IS0tKFtcc1xTXSo/KS0tPi9nbSwiIikucmVwbGFjZSgvPCFET0NUWVBFW15cW10qXFtbXlxdXSpcXT4vZ20sIiIpO090PVk1LmV4'@;
put 'ZWMocGUpOylzd2l0Y2goT3RbM109T3RbM10ucmVwbGFjZSgvXy4qJC8sIiIpKXtjYXNlInRhYmxlIjpjYXNlIlx1NWRlNVx1NGY1Y1x1ODg2OCI6Ii8iPT09T3RbMV0/KGt0WyIhcmVmIl09YnIuZS5jPj1ici5zLmMmJmJyLmUucj49YnIucy5yP3JhKGJyKToiQTE6QTEiLGdlLnNoZWV0Um93'@;
put 'cz4wJiZnZS5zaGVldFJvd3M8PWJyLmUuciYmKGt0WyIhZnVsbHJlZiJdPWt0WyIhcmVmIl0sYnIuZS5yPWdlLnNoZWV0Um93cy0xLGt0WyIhcmVmIl09cmEoYnIpKSxGaS5sZW5ndGgmJihrdFsiIW1lcmdlcyJdPUZpKSxrci5sZW5ndGgmJihrdFsiIXJvd3MiXT1rciksRXQubmFtZT1FdC5c'@;
put 'dTU0MGRcdTc5ZjB8fEV0Lm5hbWUsdHlwZW9mIEpTT048InUiJiZKU09OLnN0cmluZ2lmeShFdCksanQucHVzaChFdC5uYW1lKSxidFtFdC5uYW1lXT1rdCxKYT0hMSk6Ii8iIT09T3RbMF0uY2hhckF0KE90WzBdLmxlbmd0aC0yKSYmKEV0PXZyKE90WzBdLCExKSxCbj1mcj0tMSxici5zLnI9'@;
put 'YnIucy5jPTFlNyxici5lLnI9YnIuZS5jPTAsa3Q9Z2UuZGVuc2U/W106e30sRmk9W10sa3I9W10sSmE9ITApO2JyZWFrO2Nhc2UidGFibGUtcm93LWdyb3VwIjoiLyI9PT1PdFsxXT8tLWVyOisrZXI7YnJlYWs7Y2FzZSJ0YWJsZS1yb3ciOmNhc2UiXHU4ODRjIjppZigiLyI9PT1PdFsxXSl7'@;
put 'Qm4rPVZuLFZuPTE7YnJlYWt9aWYoKGF0PXZyKE90WzBdLCExKSkuXHU4ODRjXHU1M2Y3P0JuPWF0Llx1ODg0Y1x1NTNmNy0xOi0xPT1CbiYmKEJuPTApLChWbj0rYXRbIm51bWJlci1yb3dzLXJlcGVhdGVkIl18fDEpPDEwKWZvcihCaT0wO0JpPFZuOysrQmkpZXI+MCYmKGtyW0JuK0JpXT17'@;
put 'bGV2ZWw6ZXJ9KTtmcj0tMTticmVhaztjYXNlImNvdmVyZWQtdGFibGUtY2VsbCI6Ii8iIT09T3RbMV0mJisrZnIsZ2Uuc2hlZXRTdHVicyYmKGdlLmRlbnNlPyhrdFtCbl18fChrdFtCbl09W10pLGt0W0JuXVtmcl09e3Q6InoifSk6a3RbcWkoe3I6Qm4sYzpmcn0pXT17dDoieiJ9KSxycj0i'@;
put 'IixYbj1bXTticmVhaztjYXNlInRhYmxlLWNlbGwiOmNhc2UiXHU2NTcwXHU2MzZlIjppZigiLyI9PT1PdFswXS5jaGFyQXQoT3RbMF0ubGVuZ3RoLTIpKSsrZnIsVG49dnIoT3RbMF0sITEpLEJyPXBhcnNlSW50KFRuWyJudW1iZXItY29sdW1ucy1yZXBlYXRlZCJdfHwiMSIsMTApLEt0PXt0'@;
put 'OiJ6Iix2Om51bGx9LFRuLmZvcm11bGEmJjAhPWdlLmNlbGxGb3JtdWxhJiYoS3QuZj1pUyhRcihUbi5mb3JtdWxhKSkpLCJzdHJpbmciPT0oVG4uXHU2NTcwXHU2MzZlXHU3YzdiXHU1NzhifHxUblsidmFsdWUtdHlwZSJdKSYmKEt0LnQ9InMiLEt0LnY9UXIoVG5bInN0cmluZy12YWx1ZSJd'@;
put 'fHwiIiksZ2UuZGVuc2U/KGt0W0JuXXx8KGt0W0JuXT1bXSksa3RbQm5dW2ZyXT1LdCk6a3RbcWkoe3I6Qm4sYzpmcn0pXT1LdCksZnIrPUJyLTE7ZWxzZSBpZigiLyIhPT1PdFsxXSl7QnI9MTt2YXIgSXM9Vm4/Qm4rVm4tMTpCbjtpZigrK2ZyPmJyLmUuYyYmKGJyLmUuYz1mciksZnI8YnIu'@;
put 'cy5jJiYoYnIucy5jPWZyKSxCbjxici5zLnImJihici5zLnI9Qm4pLElzPmJyLmUuciYmKGJyLmUucj1JcykseWk9W10sX2E9e30sS3Q9e3Q6KFRuPXZyKE90WzBdLCExKSkuXHU2NTcwXHU2MzZlXHU3YzdiXHU1NzhifHxUblsidmFsdWUtdHlwZSJdLHY6bnVsbH0sZ2UuY2VsbEZvcm11bGEp'@;
put 'aWYoVG4uZm9ybXVsYSYmKFRuLmZvcm11bGE9UXIoVG4uZm9ybXVsYSkpLFRuWyJudW1iZXItbWF0cml4LWNvbHVtbnMtc3Bhbm5lZCJdJiZUblsibnVtYmVyLW1hdHJpeC1yb3dzLXNwYW5uZWQiXSYmKGNhPXBhcnNlSW50KFRuWyJudW1iZXItbWF0cml4LXJvd3Mtc3Bhbm5lZCJdLDEwKXx8'@;
put 'MCxMaT1wYXJzZUludChUblsibnVtYmVyLW1hdHJpeC1jb2x1bW5zLXNwYW5uZWQiXSwxMCl8fDAsS3QuRj1yYShuYT17czp7cjpCbixjOmZyfSxlOntyOkJuK2NhLTEsYzpmcitMaS0xfX0pLF9yLnB1c2goW25hLEt0LkZdKSksVG4uZm9ybXVsYSlLdC5mPWlTKFRuLmZvcm11bGEpO2Vsc2Ug'@;
put 'Zm9yKEJpPTA7Qmk8X3IubGVuZ3RoOysrQmkpQm4+PV9yW0JpXVswXS5zLnImJkJuPD1fcltCaV1bMF0uZS5yJiZmcj49X3JbQmldWzBdLnMuYyYmZnI8PV9yW0JpXVswXS5lLmMmJihLdC5GPV9yW0JpXVsxXSk7c3dpdGNoKChUblsibnVtYmVyLWNvbHVtbnMtc3Bhbm5lZCJdfHxUblsibnVt'@;
put 'YmVyLXJvd3Mtc3Bhbm5lZCJdKSYmKGNhPXBhcnNlSW50KFRuWyJudW1iZXItcm93cy1zcGFubmVkIl0sMTApfHwwLExpPXBhcnNlSW50KFRuWyJudW1iZXItY29sdW1ucy1zcGFubmVkIl0sMTApfHwwLEZpLnB1c2gobmE9e3M6e3I6Qm4sYzpmcn0sZTp7cjpCbitjYS0xLGM6ZnIrTGktMX19'@;
put 'KSksVG5bIm51bWJlci1jb2x1bW5zLXJlcGVhdGVkIl0mJihCcj1wYXJzZUludChUblsibnVtYmVyLWNvbHVtbnMtcmVwZWF0ZWQiXSwxMCkpLEt0LnQpe2Nhc2UiYm9vbGVhbiI6S3QudD0iYiIsS3Qudj10aShUblsiYm9vbGVhbi12YWx1ZSJdKTticmVhaztjYXNlImZsb2F0IjpjYXNlInBl'@;
put 'cmNlbnRhZ2UiOmNhc2UiY3VycmVuY3kiOkt0LnQ9Im4iLEt0LnY9cGFyc2VGbG9hdChUbi52YWx1ZSk7YnJlYWs7Y2FzZSJkYXRlIjpLdC50PSJkIixLdC52PUhlKFRuWyJkYXRlLXZhbHVlIl0pLGdlLmNlbGxEYXRlc3x8KEt0LnQ9Im4iLEt0LnY9UWUoS3QudikpLEt0Lno9Im0vZC95eSI7'@;
put 'YnJlYWs7Y2FzZSJ0aW1lIjpLdC50PSJuIixLdC52PWl0KFRuWyJ0aW1lLXZhbHVlIl0pLzg2NDAwLGdlLmNlbGxEYXRlcyYmKEt0LnQ9ImQiLEt0LnY9dW4oS3QudikpLEt0Lno9IkhIOk1NOlNTIjticmVhaztjYXNlIm51bWJlciI6S3QudD0ibiIsS3Qudj1wYXJzZUZsb2F0KFRuLlx1NjU3'@;
put 'MFx1NjM2ZVx1NjU3MFx1NTAzYyk7YnJlYWs7ZGVmYXVsdDppZigic3RyaW5nIiE9PUt0LnQmJiJ0ZXh0IiE9PUt0LnQmJkt0LnQpdGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCB2YWx1ZSB0eXBlICIrS3QudCk7S3QudD0icyIsbnVsbCE9VG5bInN0cmluZy12YWx1ZSJdJiYocnI9UXIo'@;
put 'VG5bInN0cmluZy12YWx1ZSJdKSxYbj1bXSl9fWVsc2V7aWYoaG89ITEsInMiPT09S3QudCYmKEt0LnY9cnJ8fCIiLFhuLmxlbmd0aCYmKEt0LlI9WG4pLGhvPTA9PVNuKSxqci5UYXJnZXQmJihLdC5sPWpyKSx5aS5sZW5ndGg+MCYmKEt0LmM9eWkseWk9W10pLHJyJiYhMSE9PWdlLmNlbGxU'@;
put 'ZXh0JiYoS3Qudz1yciksaG8mJihLdC50PSJ6IixkZWxldGUgS3QudiksZ2UuY2VsbEhUTUwmJihLdC5oPUt0LlI/VnUoS3QuUik6bGEoIiIrS3QudikpLCghaG98fGdlLnNoZWV0U3R1YnMpJiYhKGdlLnNoZWV0Um93cyYmZ2Uuc2hlZXRSb3dzPD1CbikpZm9yKHZhciBQbj0wO1BuPFZuOysr'@;
put 'UG4pe2lmKEJyPXBhcnNlSW50KFRuWyJudW1iZXItY29sdW1ucy1yZXBlYXRlZCJdfHwiMSIsMTApLGdlLmRlbnNlKWZvcihrdFtCbitQbl18fChrdFtCbitQbl09W10pLGt0W0JuK1BuXVtmcl09MD09UG4/S3Q6cXQoS3QpOy0tQnI+MDspa3RbQm4rUG5dW2ZyK0JyXT1xdChLdCk7ZWxzZSBm'@;
put 'b3Ioa3RbcWkoe3I6Qm4rUG4sYzpmcn0pXT1LdDstLUJyPjA7KWt0W3FpKHtyOkJuK1BuLGM6ZnIrQnJ9KV09cXQoS3QpO2JyLmUuYzw9ZnImJihici5lLmM9ZnIpfWZyKz0oQnI9cGFyc2VJbnQoVG5bIm51bWJlci1jb2x1bW5zLXJlcGVhdGVkIl18fCIxIiwxMCkpLTEsQnI9MCxLdD17fSxy'@;
put 'cj0iIixYbj1bXX1qcj17fTticmVhaztjYXNlImRvY3VtZW50IjpjYXNlImRvY3VtZW50LWNvbnRlbnQiOmNhc2UiXHU3NTM1XHU1YjUwXHU4ODY4XHU2ODNjXHU2NTg3XHU2ODYzIjpjYXNlInNwcmVhZHNoZWV0IjpjYXNlIlx1NGUzYlx1NGY1MyI6Y2FzZSJzY3JpcHRzIjpjYXNlInN0eWxl'@;
put 'cyI6Y2FzZSJmb250LWZhY2UtZGVjbHMiOmNhc2UibWFzdGVyLXN0eWxlcyI6aWYoIi8iPT09T3RbMV0pe2lmKChQZT15ZS5wb3AoKSlbMF0hPT1PdFszXSl0aHJvdyJCYWQgc3RhdGU6ICIrUGV9ZWxzZSIvIiE9PU90WzBdLmNoYXJBdChPdFswXS5sZW5ndGgtMikmJnllLnB1c2goW090WzNd'@;
put 'LCEwXSk7YnJlYWs7Y2FzZSJhbm5vdGF0aW9uIjppZigiLyI9PT1PdFsxXSl7aWYoKFBlPXllLnBvcCgpKVswXSE9PU90WzNdKXRocm93IkJhZCBzdGF0ZTogIitQZTtfYS50PXJyLFhuLmxlbmd0aCYmKF9hLlI9WG4pLF9hLmE9TG8seWkucHVzaChfYSl9ZWxzZSIvIiE9PU90WzBdLmNoYXJB'@;
put 'dChPdFswXS5sZW5ndGgtMikmJnllLnB1c2goW090WzNdLCExXSk7TG89IiIsT2E9MCxycj0iIixTbj0wLFhuPVtdO2JyZWFrO2Nhc2UiY3JlYXRvciI6Ii8iPT09T3RbMV0/TG89cGUuc2xpY2UoT2EsT3QuaW5kZXgpOk9hPU90LmluZGV4K090WzBdLmxlbmd0aDticmVhaztjYXNlIm1ldGEi'@;
put 'OmNhc2UiXHU1MTQzXHU2NTcwXHU2MzZlIjpjYXNlInNldHRpbmdzIjpjYXNlImNvbmZpZy1pdGVtLXNldCI6Y2FzZSJjb25maWctaXRlbS1tYXAtaW5kZXhlZCI6Y2FzZSJjb25maWctaXRlbS1tYXAtZW50cnkiOmNhc2UiY29uZmlnLWl0ZW0tbWFwLW5hbWVkIjpjYXNlInNoYXBlcyI6Y2Fz'@;
put 'ZSJmcmFtZSI6Y2FzZSJ0ZXh0LWJveCI6Y2FzZSJpbWFnZSI6Y2FzZSJkYXRhLXBpbG90LXRhYmxlcyI6Y2FzZSJsaXN0LXN0eWxlIjpjYXNlImZvcm0iOmNhc2UiZGRlLWxpbmtzIjpjYXNlImV2ZW50LWxpc3RlbmVycyI6Y2FzZSJjaGFydCI6aWYoIi8iPT09T3RbMV0pe2lmKChQZT15ZS5w'@;
put 'b3AoKSlbMF0hPT1PdFszXSl0aHJvdyJCYWQgc3RhdGU6ICIrUGV9ZWxzZSIvIiE9PU90WzBdLmNoYXJBdChPdFswXS5sZW5ndGgtMikmJnllLnB1c2goW090WzNdLCExXSk7cnI9IiIsU249MCxYbj1bXTticmVhaztjYXNlInNjaWVudGlmaWMtbnVtYmVyIjpjYXNlImN1cnJlbmN5LXN5bWJv'@;
put 'bCI6Y2FzZSJjdXJyZW5jeS1zdHlsZSI6Y2FzZSJzY3JpcHQiOmNhc2UibGlicmFyaWVzIjpjYXNlImF1dG9tYXRpYy1zdHlsZXMiOmNhc2UiZGVmYXVsdC1zdHlsZSI6Y2FzZSJwYWdlLWxheW91dCI6Y2FzZSJtYXAiOmNhc2UiZm9udC1mYWNlIjpjYXNlInBhcmFncmFwaC1wcm9wZXJ0aWVz'@;
put 'IjpjYXNlInRhYmxlLXByb3BlcnRpZXMiOmNhc2UidGFibGUtY29sdW1uLXByb3BlcnRpZXMiOmNhc2UidGFibGUtcm93LXByb3BlcnRpZXMiOmNhc2UidGFibGUtY2VsbC1wcm9wZXJ0aWVzIjpjYXNlImZyYWN0aW9uIjpjYXNlImJvb2xlYW4tc3R5bGUiOmNhc2UiYm9vbGVhbiI6Y2FzZSJ0'@;
put 'ZXh0LXN0eWxlIjpjYXNlInRleHQtY29udGVudCI6Y2FzZSJ0ZXh0LXByb3BlcnRpZXMiOmNhc2UiZW1iZWRkZWQtdGV4dCI6Y2FzZSJib2R5IjpjYXNlIlx1NzUzNVx1NWI1MFx1ODg2OFx1NjgzYyI6Y2FzZSJmb3JtcyI6Y2FzZSJ0YWJsZS1jb2x1bW4iOmNhc2UidGFibGUtaGVhZGVyLXJv'@;
put 'd3MiOmNhc2UidGFibGUtcm93cyI6Y2FzZSJ0YWJsZS1jb2x1bW4tZ3JvdXAiOmNhc2UidGFibGUtaGVhZGVyLWNvbHVtbnMiOmNhc2UidGFibGUtY29sdW1ucyI6Y2FzZSJudWxsLWRhdGUiOmNhc2UiZ3JhcGhpYy1wcm9wZXJ0aWVzIjpjYXNlImNhbGN1bGF0aW9uLXNldHRpbmdzIjpjYXNl'@;
put 'Im5hbWVkLWV4cHJlc3Npb25zIjpjYXNlImxhYmVsLXJhbmdlIjpjYXNlImxhYmVsLXJhbmdlcyI6Y2FzZSJuYW1lZC1leHByZXNzaW9uIjpjYXNlInNvcnQiOmNhc2Uic29ydC1ieSI6Y2FzZSJzb3J0LWdyb3VwcyI6Y2FzZSJ0YWIiOmNhc2UibGluZS1icmVhayI6Y2FzZSJzcGFuIjpjYXNl'@;
put 'InMiOmNhc2UiZGF0ZSI6Y2FzZSJvYmplY3QiOmNhc2UidGl0bGUiOmNhc2UiXHU2ODA3XHU5ODk4IjpjYXNlImRlc2MiOmNhc2UiYmluYXJ5LWRhdGEiOmNhc2UidGFibGUtc291cmNlIjpjYXNlInNjZW5hcmlvIjpjYXNlIml0ZXJhdGlvbiI6Y2FzZSJjb250ZW50LXZhbGlkYXRpb25zIjpj'@;
put 'YXNlImNvbnRlbnQtdmFsaWRhdGlvbiI6Y2FzZSJoZWxwLW1lc3NhZ2UiOmNhc2UiZXJyb3ItbWVzc2FnZSI6Y2FzZSJkYXRhYmFzZS1yYW5nZXMiOmNhc2UiZmlsdGVyIjpjYXNlImZpbHRlci1hbmQiOmNhc2UiZmlsdGVyLW9yIjpjYXNlImZpbHRlci1jb25kaXRpb24iOmNhc2UibGlzdC1s'@;
put 'ZXZlbC1zdHlsZS1idWxsZXQiOmNhc2UibGlzdC1sZXZlbC1zdHlsZS1udW1iZXIiOmNhc2UibGlzdC1sZXZlbC1wcm9wZXJ0aWVzIjpjYXNlInNlbmRlci1maXJzdG5hbWUiOmNhc2Uic2VuZGVyLWxhc3RuYW1lIjpjYXNlInNlbmRlci1pbml0aWFscyI6Y2FzZSJzZW5kZXItdGl0bGUiOmNh'@;
put 'c2Uic2VuZGVyLXBvc2l0aW9uIjpjYXNlInNlbmRlci1lbWFpbCI6Y2FzZSJzZW5kZXItcGhvbmUtcHJpdmF0ZSI6Y2FzZSJzZW5kZXItZmF4IjpjYXNlInNlbmRlci1jb21wYW55IjpjYXNlInNlbmRlci1waG9uZS13b3JrIjpjYXNlInNlbmRlci1zdHJlZXQiOmNhc2Uic2VuZGVyLWNpdHki'@;
put 'OmNhc2Uic2VuZGVyLXBvc3RhbC1jb2RlIjpjYXNlInNlbmRlci1jb3VudHJ5IjpjYXNlInNlbmRlci1zdGF0ZS1vci1wcm92aW5jZSI6Y2FzZSJhdXRob3ItbmFtZSI6Y2FzZSJhdXRob3ItaW5pdGlhbHMiOmNhc2UiY2hhcHRlciI6Y2FzZSJmaWxlLW5hbWUiOmNhc2UidGVtcGxhdGUtbmFt'@;
put 'ZSI6Y2FzZSJzaGVldC1uYW1lIjpjYXNlImV2ZW50LWxpc3RlbmVyIjpjYXNlImluaXRpYWwtY3JlYXRvciI6Y2FzZSJjcmVhdGlvbi1kYXRlIjpjYXNlInByaW50LWRhdGUiOmNhc2UiZ2VuZXJhdG9yIjpjYXNlImRvY3VtZW50LXN0YXRpc3RpYyI6Y2FzZSJ1c2VyLWRlZmluZWQiOmNhc2Ui'@;
put 'ZWRpdGluZy1kdXJhdGlvbiI6Y2FzZSJlZGl0aW5nLWN5Y2xlcyI6Y2FzZSJjb25maWctaXRlbSI6Y2FzZSJwYWdlLW51bWJlciI6Y2FzZSJwYWdlLWNvdW50IjpjYXNlInRpbWUiOmNhc2UiY2VsbC1yYW5nZS1zb3VyY2UiOmNhc2UiZGV0ZWN0aXZlIjpjYXNlIm9wZXJhdGlvbiI6Y2FzZSJo'@;
put 'aWdobGlnaHRlZC1yYW5nZSI6Y2FzZSJkYXRhLXBpbG90LXRhYmxlIjpjYXNlInNvdXJjZS1jZWxsLXJhbmdlIjpjYXNlInNvdXJjZS1zZXJ2aWNlIjpjYXNlImRhdGEtcGlsb3QtZmllbGQiOmNhc2UiZGF0YS1waWxvdC1sZXZlbCI6Y2FzZSJkYXRhLXBpbG90LXN1YnRvdGFscyI6Y2FzZSJk'@;
put 'YXRhLXBpbG90LXN1YnRvdGFsIjpjYXNlImRhdGEtcGlsb3QtbWVtYmVycyI6Y2FzZSJkYXRhLXBpbG90LW1lbWJlciI6Y2FzZSJkYXRhLXBpbG90LWRpc3BsYXktaW5mbyI6Y2FzZSJkYXRhLXBpbG90LXNvcnQtaW5mbyI6Y2FzZSJkYXRhLXBpbG90LWxheW91dC1pbmZvIjpjYXNlImRhdGEt'@;
put 'cGlsb3QtZmllbGQtcmVmZXJlbmNlIjpjYXNlImRhdGEtcGlsb3QtZ3JvdXBzIjpjYXNlImRhdGEtcGlsb3QtZ3JvdXAiOmNhc2UiZGF0YS1waWxvdC1ncm91cC1tZW1iZXIiOmNhc2UicmVjdCI6Y2FzZSJkZGUtY29ubmVjdGlvbi1kZWNscyI6Y2FzZSJkZGUtY29ubmVjdGlvbi1kZWNsIjpj'@;
put 'YXNlImRkZS1saW5rIjpjYXNlImRkZS1zb3VyY2UiOmNhc2UicHJvcGVydGllcyI6Y2FzZSJwcm9wZXJ0eSI6Y2FzZSJ0YWJsZS1wcm90ZWN0aW9uIjpjYXNlImRhdGEtcGlsb3QtZ3JhbmQtdG90YWwiOmNhc2Uib2ZmaWNlLWRvY3VtZW50LWNvbW1vbi1hdHRycyI6YnJlYWs7Y2FzZSJudW1i'@;
put 'ZXItc3R5bGUiOmNhc2UicGVyY2VudGFnZS1zdHlsZSI6Y2FzZSJkYXRlLXN0eWxlIjpjYXNlInRpbWUtc3R5bGUiOmlmKCIvIj09PU90WzFdKXtpZihNaVtZZS5uYW1lXT1ldCwoUGU9eWUucG9wKCkpWzBdIT09T3RbM10pdGhyb3ciQmFkIHN0YXRlOiAiK1BlfWVsc2UiLyIhPT1PdFswXS5j'@;
put 'aGFyQXQoT3RbMF0ubGVuZ3RoLTIpJiYoZXQ9IiIsWWU9dnIoT3RbMF0sITEpLHllLnB1c2goW090WzNdLCEwXSkpO2JyZWFrO2Nhc2Uic3R5bGUiOiIvPiI9PT1PdFswXS5zbGljZSgtMik/ayhPdFswXSxzbyk6Ii8iPT1PdFsxXT9rKHBlLnNsaWNlKGlhLE90LmluZGV4K090WzBdLmxlbmd0'@;
put 'aCksc28pOmlhPU90LmluZGV4O2JyZWFrO2Nhc2UibnVtYmVyIjpjYXNlImRheSI6Y2FzZSJtb250aCI6Y2FzZSJ5ZWFyIjpjYXNlImVyYSI6Y2FzZSJkYXktb2Ytd2VlayI6Y2FzZSJ3ZWVrLW9mLXllYXIiOmNhc2UicXVhcnRlciI6Y2FzZSJob3VycyI6Y2FzZSJtaW51dGVzIjpjYXNlInNl'@;
put 'Y29uZHMiOmNhc2UiYW0tcG0iOnN3aXRjaCh5ZVt5ZS5sZW5ndGgtMV1bMF0pe2Nhc2UidGltZS1zdHlsZSI6Y2FzZSJkYXRlLXN0eWxlIjpOZT12cihPdFswXSwhMSksZXQrPVJbT3RbM11dWyJsb25nIj09PU5lLnN0eWxlPzE6MF19YnJlYWs7Y2FzZSJ0ZXh0IjppZigiLz4iPT09T3RbMF0u'@;
put 'c2xpY2UoLTIpKWJyZWFrO2lmKCIvIj09PU90WzFdKXN3aXRjaCh5ZVt5ZS5sZW5ndGgtMV1bMF0pe2Nhc2UibnVtYmVyLXN0eWxlIjpjYXNlImRhdGUtc3R5bGUiOmNhc2UidGltZS1zdHlsZSI6ZXQrPXBlLnNsaWNlKGN0LE90LmluZGV4KX1lbHNlIGN0PU90LmluZGV4K090WzBdLmxlbmd0'@;
put 'aDticmVhaztjYXNlIm5hbWVkLXJhbmdlIjpaaT1vYigoTmU9dnIoT3RbMF0sITEpKVsiY2VsbC1yYW5nZS1hZGRyZXNzIl0pO3ZhciBXbz17TmFtZTpOZS5uYW1lLFJlZjpaaVswXSsiISIrWmlbMV19O0phJiYoV28uU2hlZXQ9anQubGVuZ3RoKSxGbi5OYW1lcy5wdXNoKFdvKTticmVhaztj'@;
put 'YXNlInAiOmNhc2UiXHU2NTg3XHU2NzJjXHU0ZTMyIjppZihbIm1hc3Rlci1zdHlsZXMiXS5pbmRleE9mKHllW3llLmxlbmd0aC0xXVswXSk+LTEpYnJlYWs7aWYoIi8iIT09T3RbMV18fFRuJiZUblsic3RyaW5nLXZhbHVlIl0pdnIoT3RbMF0sITEpLFNuPU90LmluZGV4K090WzBdLmxlbmd0'@;
put 'aDtlbHNle3ZhciBocj1TKHBlLnNsaWNlKFNuLE90LmluZGV4KSwwLHNvKTtycj0ocnIubGVuZ3RoPjA/cnIrIlxuIjoiIikraHJbMF0sWG49aHJbMV19YnJlYWs7Y2FzZSJkYXRhYmFzZS1yYW5nZSI6aWYoIi8iPT09T3RbMV0pYnJlYWs7dHJ5e2J0WyhaaT1vYih2cihPdFswXSlbInRhcmdl'@;
put 'dC1yYW5nZS1hZGRyZXNzIl0pKVswXV1bIiFhdXRvZmlsdGVyIl09e3JlZjpaaVsxXX19Y2F0Y2h7fWJyZWFrO2Nhc2UiYSI6aWYoIi8iIT09T3RbMV0pe2lmKCEoanI9dnIoT3RbMF0sITEpKS5ocmVmKWJyZWFrO2pyLlRhcmdldD1Rcihqci5ocmVmKSxkZWxldGUganIuaHJlZiwiIyI9PWpy'@;
put 'LlRhcmdldC5jaGFyQXQoMCkmJmpyLlRhcmdldC5pbmRleE9mKCIuIik+LTE/KFppPW9iKGpyLlRhcmdldC5zbGljZSgxKSksanIuVGFyZ2V0PSIjIitaaVswXSsiISIrWmlbMV0pOmpyLlRhcmdldC5tYXRjaCgvXlwuXC5bXFxcL10vKSYmKGpyLlRhcmdldD1qci5UYXJnZXQuc2xpY2UoMykp'@;
put 'fWJyZWFrO2RlZmF1bHQ6c3dpdGNoKE90WzJdKXtjYXNlImRjOiI6Y2FzZSJjYWxjZXh0OiI6Y2FzZSJsb2V4dDoiOmNhc2Uib29vOiI6Y2FzZSJjaGFydG9vbzoiOmNhc2UiZHJhdzoiOmNhc2Uic3R5bGU6IjpjYXNlImNoYXJ0OiI6Y2FzZSJmb3JtOiI6Y2FzZSJ1b2Y6IjpjYXNlIlx1ODg2'@;
put 'ODoiOmNhc2UiXHU1YjU3OiI6YnJlYWs7ZGVmYXVsdDppZihnZS5XVEYpdGhyb3cgbmV3IEVycm9yKE90KX19dmFyIFFsPXtTaGVldHM6YnQsU2hlZXROYW1lczpqdCxXb3JrYm9vazpGbn07cmV0dXJuIGdlLmJvb2tTaGVldHMmJmRlbGV0ZSBRbC5TaGVldHMsUWx9fSgpO2Z1bmN0aW9uIElJ'@;
put 'KFMsUil7cmV0dXJuIFhTKFMsUil9dmFyIFV6PWZ1bmN0aW9uKCl7dmFyIFM9WyIgIDxvZmZpY2U6bWFzdGVyLXN0eWxlcz4iLCcgICAgPHN0eWxlOm1hc3Rlci1wYWdlIHN0eWxlOm5hbWU9Im1wMSIgc3R5bGU6cGFnZS1sYXlvdXQtbmFtZT0ibXAxIj4nLCIgICAgICA8c3R5bGU6aGVhZGVy'@;
put 'Lz4iLCcgICAgICA8c3R5bGU6aGVhZGVyLWxlZnQgc3R5bGU6ZGlzcGxheT0iZmFsc2UiLz4nLCIgICAgICA8c3R5bGU6Zm9vdGVyLz4iLCcgICAgICA8c3R5bGU6Zm9vdGVyLWxlZnQgc3R5bGU6ZGlzcGxheT0iZmFsc2UiLz4nLCIgICAgPC9zdHlsZTptYXN0ZXItcGFnZT4iLCIgIDwvb2Zm'@;
put 'aWNlOm1hc3Rlci1zdHlsZXM+Il0uam9pbigiXG4iKSxSPSI8b2ZmaWNlOmRvY3VtZW50LXN0eWxlcyAiK0x1KHsieG1sbnM6b2ZmaWNlIjoidXJuOm9hc2lzOm5hbWVzOnRjOm9wZW5kb2N1bWVudDp4bWxuczpvZmZpY2U6MS4wIiwieG1sbnM6dGFibGUiOiJ1cm46b2FzaXM6bmFtZXM6dGM6'@;
put 'b3BlbmRvY3VtZW50OnhtbG5zOnRhYmxlOjEuMCIsInhtbG5zOnN0eWxlIjoidXJuOm9hc2lzOm5hbWVzOnRjOm9wZW5kb2N1bWVudDp4bWxuczpzdHlsZToxLjAiLCJ4bWxuczp0ZXh0IjoidXJuOm9hc2lzOm5hbWVzOnRjOm9wZW5kb2N1bWVudDp4bWxuczp0ZXh0OjEuMCIsInhtbG5zOmRy'@;
put 'YXciOiJ1cm46b2FzaXM6bmFtZXM6dGM6b3BlbmRvY3VtZW50OnhtbG5zOmRyYXdpbmc6MS4wIiwieG1sbnM6Zm8iOiJ1cm46b2FzaXM6bmFtZXM6dGM6b3BlbmRvY3VtZW50OnhtbG5zOnhzbC1mby1jb21wYXRpYmxlOjEuMCIsInhtbG5zOnhsaW5rIjoiaHR0cDovL3d3dy53My5vcmcvMTk5'@;
put 'OS94bGluayIsInhtbG5zOmRjIjoiaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iLCJ4bWxuczpudW1iZXIiOiJ1cm46b2FzaXM6bmFtZXM6dGM6b3BlbmRvY3VtZW50OnhtbG5zOmRhdGFzdHlsZToxLjAiLCJ4bWxuczpzdmciOiJ1cm46b2FzaXM6bmFtZXM6dGM6b3BlbmRvY3Vt'@;
put 'ZW50OnhtbG5zOnN2Zy1jb21wYXRpYmxlOjEuMCIsInhtbG5zOm9mIjoidXJuOm9hc2lzOm5hbWVzOnRjOm9wZW5kb2N1bWVudDp4bWxuczpvZjoxLjIiLCJvZmZpY2U6dmVyc2lvbiI6IjEuMiJ9KSsiPlxuIitTKyJcbjwvb2ZmaWNlOmRvY3VtZW50LXN0eWxlcz4iO3JldHVybiBmdW5jdGlv'@;
put 'bigpe3JldHVybiBJaStSfX0oKSxQOD1mdW5jdGlvbigpe3ZhciBTPWZ1bmN0aW9uKHBlLHllKXtyZXR1cm4gTHIocGUpLnJlcGxhY2UoLyAgKy9nLGZ1bmN0aW9uKFBlKXtyZXR1cm4nPHRleHQ6cyB0ZXh0OmM9IicrUGUubGVuZ3RoKyciLz4nfSkucmVwbGFjZSgvXHQvZywiPHRleHQ6dGFi'@;
put 'Lz4iKS5yZXBsYWNlKC9cbi9nLHllPyI8dGV4dDpsaW5lLWJyZWFrLz4iOiI8L3RleHQ6cD48dGV4dDpwPiIpLnJlcGxhY2UoL14gLywiPHRleHQ6cy8+IikucmVwbGFjZSgvICQvLCI8dGV4dDpzLz4iKX0sUj1mdW5jdGlvbihwZSl7cmV0dXJuIHBlLm1hcChmdW5jdGlvbih5ZSl7dmFyIFBl'@;
put 'PSIiO3JldHVybiBudWxsIT15ZS5vZHMmJihQZSs9JyB0ZXh0OnN0eWxlLW5hbWU9IlQnK3llLm9kcysnIicpLHllLnY/Ijx0ZXh0OnNwYW4iK1BlKyI+IitTKHllLnYsITApKyI8L3RleHQ6c3Bhbj4iOiIifSkuam9pbigiIil9LGs9IiAgICAgICAgICA8dGFibGU6dGFibGUtY2VsbCAvPlxu'@;
put 'IixRPWZ1bmN0aW9uKHBlLHllLFBlKXt2YXIgTmU9W107TmUucHVzaCgnICAgICAgPHRhYmxlOnRhYmxlIHRhYmxlOm5hbWU9IicrTHIoeWUuU2hlZXROYW1lc1tQZV0pKyciIHRhYmxlOnN0eWxlLW5hbWU9InRhMSI+XG4nKTt2YXIgWWU9MCxldD0wLGN0PU1zKHBlWyIhcmVmIl18fCJBMSIp'@;
put 'LEV0PXBlWyIhbWVyZ2VzIl18fFtdLGF0PTAsYnQ9QXJyYXkuaXNBcnJheShwZSk7aWYocGVbIiFjb2xzIl0pZm9yKGV0PTA7ZXQ8PWN0LmUuYzsrK2V0KU5lLnB1c2goIiAgICAgICAgPHRhYmxlOnRhYmxlLWNvbHVtbiIrKHBlWyIhY29scyJdW2V0XT8nIHRhYmxlOnN0eWxlLW5hbWU9ImNv'@;
put 'JytwZVsiIWNvbHMiXVtldF0ub2RzKyciJzoiIikrIj48L3RhYmxlOnRhYmxlLWNvbHVtbj5cbiIpO3ZhciBrdD1wZVsiIXJvd3MiXXx8W107Zm9yKFllPTA7WWU8Y3Qucy5yOysrWWUpTmUucHVzaCgiICAgICAgICA8dGFibGU6dGFibGUtcm93Iisoa3RbWWVdPycgdGFibGU6c3R5bGUtbmFt'@;
put 'ZT0icm8nK2t0W1llXS5vZHMrJyInOiIiKSsiPjwvdGFibGU6dGFibGUtcm93PlxuIik7Zm9yKDtZZTw9Y3QuZS5yOysrWWUpe2ZvcihOZS5wdXNoKCIgICAgICAgIDx0YWJsZTp0YWJsZS1yb3ciKyhrdFtZZV0/JyB0YWJsZTpzdHlsZS1uYW1lPSJybycra3RbWWVdLm9kcysnIic6IiIpKyI+'@;
put 'XG4iKSxldD0wO2V0PGN0LnMuYzsrK2V0KU5lLnB1c2goayk7Zm9yKDtldDw9Y3QuZS5jOysrZXQpe3ZhciBPdD0hMSxLdD17fSxUbj0iIjtmb3IoYXQ9MDthdCE9RXQubGVuZ3RoOysrYXQpaWYoIShFdFthdF0ucy5jPmV0fHxFdFthdF0ucy5yPlllfHxFdFthdF0uZS5jPGV0fHxFdFthdF0u'@;
put 'ZS5yPFllKSl7KEV0W2F0XS5zLmMhPWV0fHxFdFthdF0ucy5yIT1ZZSkmJihPdD0hMCksS3RbInRhYmxlOm51bWJlci1jb2x1bW5zLXNwYW5uZWQiXT1FdFthdF0uZS5jLUV0W2F0XS5zLmMrMSxLdFsidGFibGU6bnVtYmVyLXJvd3Mtc3Bhbm5lZCJdPUV0W2F0XS5lLnItRXRbYXRdLnMucisx'@;
put 'O2JyZWFrfWlmKE90KU5lLnB1c2goIiAgICAgICAgICA8dGFibGU6Y292ZXJlZC10YWJsZS1jZWxsLz5cbiIpO2Vsc2V7dmFyIHJyPXFpKHtyOlllLGM6ZXR9KSxTbj1idD8ocGVbWWVdfHxbXSlbZXRdOnBlW3JyXTtpZihTbiYmU24uZiYmKEt0WyJ0YWJsZTpmb3JtdWxhIl09THIoWjQoU24u'@;
put 'ZikpLFNuLkYmJlNuLkYuc2xpY2UoMCxyci5sZW5ndGgpPT1ycikpe3ZhciBscj1NcyhTbi5GKTtLdFsidGFibGU6bnVtYmVyLW1hdHJpeC1jb2x1bW5zLXNwYW5uZWQiXT1sci5lLmMtbHIucy5jKzEsS3RbInRhYmxlOm51bWJlci1tYXRyaXgtcm93cy1zcGFubmVkIl09bHIuZS5yLWxyLnMu'@;
put 'cisxfWlmKFNuKXtzd2l0Y2goU24udCl7Y2FzZSJiIjpUbj1Tbi52PyJUUlVFIjoiRkFMU0UiLEt0WyJvZmZpY2U6dmFsdWUtdHlwZSJdPSJib29sZWFuIixLdFsib2ZmaWNlOmJvb2xlYW4tdmFsdWUiXT1Tbi52PyJ0cnVlIjoiZmFsc2UiO2JyZWFrO2Nhc2UibiI6VG49U24ud3x8U3RyaW5n'@;
put 'KFNuLnZ8fDApLEt0WyJvZmZpY2U6dmFsdWUtdHlwZSJdPSJmbG9hdCIsS3RbIm9mZmljZTp2YWx1ZSJdPVNuLnZ8fDA7YnJlYWs7Y2FzZSJzIjpjYXNlInN0ciI6VG49U24udixLdFsib2ZmaWNlOnZhbHVlLXR5cGUiXT0ic3RyaW5nIjticmVhaztjYXNlImQiOlRuPVNuLnd8fEhlKFNuLnYp'@;
put 'LnRvSVNPU3RyaW5nKCksS3RbIm9mZmljZTp2YWx1ZS10eXBlIl09ImRhdGUiLEt0WyJvZmZpY2U6ZGF0ZS12YWx1ZSJdPUhlKFNuLnYpLnRvSVNPU3RyaW5nKCksS3RbInRhYmxlOnN0eWxlLW5hbWUiXT0iY2UxIjticmVhaztkZWZhdWx0Ok5lLnB1c2goayk7Y29udGludWV9bnVsbCE9U24u'@;
put 'b2RzJiYhS3RbInRhYmxlOnN0eWxlLW5hbWUiXSYmKEt0WyJ0YWJsZTpzdHlsZS1uYW1lIl09ImNlIitTbi5vZHMpO3ZhciBYbj0hU24uUnx8U24ubCYmU24ubC5UYXJnZXQ/UyhUbik6UihTbi5SKTtpZihTbi5sJiZTbi5sLlRhcmdldCl7dmFyIEJuPVNuLmwuVGFyZ2V0OyIjIiE9KEJuPSIj'@;
put 'Ij09Qm4uY2hhckF0KDApPyIjIitnRChCbi5zbGljZSgxKSk6Qm4pLmNoYXJBdCgwKSYmIUJuLm1hdGNoKC9eXHcrOi8pJiYoQm49Ii4uLyIrQm4pLFhuPVByKCJ0ZXh0OmEiLFhuLHsieGxpbms6aHJlZiI6Qm4ucmVwbGFjZSgvJi9nLCImYW1wOyIpfSl9TmUucHVzaCgiICAgICAgICAgICIr'@;
put 'UHIoInRhYmxlOnRhYmxlLWNlbGwiLFByKCJ0ZXh0OnAiLFhuLHt9KSxLdCkrIlxuIil9ZWxzZSBOZS5wdXNoKGspfX1OZS5wdXNoKCIgICAgICAgIDwvdGFibGU6dGFibGUtcm93PlxuIil9cmV0dXJuIE5lLnB1c2goIiAgICAgIDwvdGFibGU6dGFibGU+XG4iKSxOZS5qb2luKCIiKX0sb2U9'@;
put 'e2NlbnRlcjoiY2VudGVyIixsZWZ0OiJzdGFydCIscmlnaHQ6ImVuZCJ9O3JldHVybiBmdW5jdGlvbih5ZSxQZSl7dmFyIE5lPVtJaV0sWWU9THUoeyJ4bWxuczpvZmZpY2UiOiJ1cm46b2FzaXM6bmFtZXM6dGM6b3BlbmRvY3VtZW50OnhtbG5zOm9mZmljZToxLjAiLCJ4bWxuczp0YWJsZSI6'@;
put 'InVybjpvYXNpczpuYW1lczp0YzpvcGVuZG9jdW1lbnQ6eG1sbnM6dGFibGU6MS4wIiwieG1sbnM6c3R5bGUiOiJ1cm46b2FzaXM6bmFtZXM6dGM6b3BlbmRvY3VtZW50OnhtbG5zOnN0eWxlOjEuMCIsInhtbG5zOnRleHQiOiJ1cm46b2FzaXM6bmFtZXM6dGM6b3BlbmRvY3VtZW50OnhtbG5z'@;
put 'OnRleHQ6MS4wIiwieG1sbnM6ZHJhdyI6InVybjpvYXNpczpuYW1lczp0YzpvcGVuZG9jdW1lbnQ6eG1sbnM6ZHJhd2luZzoxLjAiLCJ4bWxuczpmbyI6InVybjpvYXNpczpuYW1lczp0YzpvcGVuZG9jdW1lbnQ6eG1sbnM6eHNsLWZvLWNvbXBhdGlibGU6MS4wIiwieG1sbnM6eGxpbmsiOiJo'@;
put 'dHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiwieG1sbnM6ZGMiOiJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIsInhtbG5zOm1ldGEiOiJ1cm46b2FzaXM6bmFtZXM6dGM6b3BlbmRvY3VtZW50OnhtbG5zOm1ldGE6MS4wIiwieG1sbnM6bnVtYmVyIjoidXJuOm9hc2lzOm5h'@;
put 'bWVzOnRjOm9wZW5kb2N1bWVudDp4bWxuczpkYXRhc3R5bGU6MS4wIiwieG1sbnM6cHJlc2VudGF0aW9uIjoidXJuOm9hc2lzOm5hbWVzOnRjOm9wZW5kb2N1bWVudDp4bWxuczpwcmVzZW50YXRpb246MS4wIiwieG1sbnM6c3ZnIjoidXJuOm9hc2lzOm5hbWVzOnRjOm9wZW5kb2N1bWVudDp4'@;
put 'bWxuczpzdmctY29tcGF0aWJsZToxLjAiLCJ4bWxuczpjaGFydCI6InVybjpvYXNpczpuYW1lczp0YzpvcGVuZG9jdW1lbnQ6eG1sbnM6Y2hhcnQ6MS4wIiwieG1sbnM6ZHIzZCI6InVybjpvYXNpczpuYW1lczp0YzpvcGVuZG9jdW1lbnQ6eG1sbnM6ZHIzZDoxLjAiLCJ4bWxuczptYXRoIjoi'@;
put 'aHR0cDovL3d3dy53My5vcmcvMTk5OC9NYXRoL01hdGhNTCIsInhtbG5zOmZvcm0iOiJ1cm46b2FzaXM6bmFtZXM6dGM6b3BlbmRvY3VtZW50OnhtbG5zOmZvcm06MS4wIiwieG1sbnM6c2NyaXB0IjoidXJuOm9hc2lzOm5hbWVzOnRjOm9wZW5kb2N1bWVudDp4bWxuczpzY3JpcHQ6MS4wIiwi'@;
put 'eG1sbnM6b29vIjoiaHR0cDovL29wZW5vZmZpY2Uub3JnLzIwMDQvb2ZmaWNlIiwieG1sbnM6b29vdyI6Imh0dHA6Ly9vcGVub2ZmaWNlLm9yZy8yMDA0L3dyaXRlciIsInhtbG5zOm9vb2MiOiJodHRwOi8vb3Blbm9mZmljZS5vcmcvMjAwNC9jYWxjIiwieG1sbnM6ZG9tIjoiaHR0cDovL3d3'@;
put 'dy53My5vcmcvMjAwMS94bWwtZXZlbnRzIiwieG1sbnM6eGZvcm1zIjoiaHR0cDovL3d3dy53My5vcmcvMjAwMi94Zm9ybXMiLCJ4bWxuczp4c2QiOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIsInhtbG5zOnhzaSI6Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1h'@;
put 'LWluc3RhbmNlIiwieG1sbnM6c2hlZXQiOiJ1cm46b2FzaXM6bmFtZXM6dGM6b3BlbmRvY3VtZW50OnNoMzN0anM6MS4wIiwieG1sbnM6cnB0IjoiaHR0cDovL29wZW5vZmZpY2Uub3JnLzIwMDUvcmVwb3J0IiwieG1sbnM6b2YiOiJ1cm46b2FzaXM6bmFtZXM6dGM6b3BlbmRvY3VtZW50Onht'@;
put 'bG5zOm9mOjEuMiIsInhtbG5zOnhodG1sIjoiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIsInhtbG5zOmdyZGRsIjoiaHR0cDovL3d3dy53My5vcmcvMjAwMy9nL2RhdGEtdmlldyMiLCJ4bWxuczp0YWJsZW9vbyI6Imh0dHA6Ly9vcGVub2ZmaWNlLm9yZy8yMDA5L3RhYmxlIiwieG1s'@;
put 'bnM6ZHJhd29vbyI6Imh0dHA6Ly9vcGVub2ZmaWNlLm9yZy8yMDEwL2RyYXciLCJ4bWxuczpjYWxjZXh0IjoidXJuOm9yZzpkb2N1bWVudGZvdW5kYXRpb246bmFtZXM6ZXhwZXJpbWVudGFsOmNhbGM6eG1sbnM6Y2FsY2V4dDoxLjAiLCJ4bWxuczpsb2V4dCI6InVybjpvcmc6ZG9jdW1lbnRm'@;
put 'b3VuZGF0aW9uOm5hbWVzOmV4cGVyaW1lbnRhbDpvZmZpY2U6eG1sbnM6bG9leHQ6MS4wIiwieG1sbnM6ZmllbGQiOiJ1cm46b3Blbm9mZmljZTpuYW1lczpleHBlcmltZW50YWw6b29vLW1zLWludGVyb3A6eG1sbnM6ZmllbGQ6MS4wIiwieG1sbnM6Zm9ybXgiOiJ1cm46b3Blbm9mZmljZTpu'@;
put 'YW1lczpleHBlcmltZW50YWw6b294bWwtb2RmLWludGVyb3A6eG1sbnM6Zm9ybToxLjAiLCJ4bWxuczpjc3MzdCI6Imh0dHA6Ly93d3cudzMub3JnL1RSL2NzczMtdGV4dC8iLCJvZmZpY2U6dmVyc2lvbiI6IjEuMiJ9KSxldD1MdSh7InhtbG5zOmNvbmZpZyI6InVybjpvYXNpczpuYW1lczp0'@;
put 'YzpvcGVuZG9jdW1lbnQ6eG1sbnM6Y29uZmlnOjEuMCIsIm9mZmljZTptaW1ldHlwZSI6ImFwcGxpY2F0aW9uL3ZuZC5vYXNpcy5vcGVuZG9jdW1lbnQuc3ByZWFkc2hlZXQifSk7ImZvZHMiPT1QZS5ib29rVHlwZT8oTmUucHVzaCgiPG9mZmljZTpkb2N1bWVudCIrWWUrZXQrIj5cbiIpLE5l'@;
put 'LnB1c2goUjYoKS5yZXBsYWNlKC9vZmZpY2U6ZG9jdW1lbnQtbWV0YS9nLCJvZmZpY2U6bWV0YSIpKSk6TmUucHVzaCgiPG9mZmljZTpkb2N1bWVudC1jb250ZW50IitZZSsiPlxuIiksZnVuY3Rpb24ocGUseWUpe3ZhciBQZT1bXSxOZT17fTtQZS5wdXNoKCIgPG9mZmljZTphdXRvbWF0aWMt'@;
put 'c3R5bGVzPlxuIiksUGUucHVzaCgnICA8bnVtYmVyOmRhdGUtc3R5bGUgc3R5bGU6bmFtZT0iTjM3IiBudW1iZXI6YXV0b21hdGljLW9yZGVyPSJ0cnVlIj5cbicpLFBlLnB1c2goJyAgIDxudW1iZXI6bW9udGggbnVtYmVyOnN0eWxlPSJsb25nIi8+XG4nKSxQZS5wdXNoKCIgICA8bnVtYmVy'@;
put 'OnRleHQ+LzwvbnVtYmVyOnRleHQ+XG4iKSxQZS5wdXNoKCcgICA8bnVtYmVyOmRheSBudW1iZXI6c3R5bGU9ImxvbmciLz5cbicpLFBlLnB1c2goIiAgIDxudW1iZXI6dGV4dD4vPC9udW1iZXI6dGV4dD5cbiIpLFBlLnB1c2goIiAgIDxudW1iZXI6eWVhci8+XG4iKSxQZS5wdXNoKCIgIDwv'@;
put 'bnVtYmVyOmRhdGUtc3R5bGU+XG4iKTt2YXIgWWU9MDt5ZS5TaGVldE5hbWVzLm1hcChmdW5jdGlvbihhdCl7cmV0dXJuIHllLlNoZWV0c1thdF19KS5mb3JFYWNoKGZ1bmN0aW9uKGF0KXtpZihhdCYmYXRbIiFjb2xzIl0pZm9yKHZhciBidD0wO2J0PGF0WyIhY29scyJdLmxlbmd0aDsrK2J0'@;
put 'KWlmKGF0WyIhY29scyJdW2J0XSl7dmFyIGp0PWF0WyIhY29scyJdW2J0XTtpZihudWxsPT1qdC53aWR0aCYmbnVsbD09anQud3B4JiZudWxsPT1qdC53Y2gpY29udGludWU7UTAoanQpLGp0Lm9kcz1ZZTt2YXIga3Q9YXRbIiFjb2xzIl1bYnRdLndweCsicHgiO1BlLnB1c2goJyAgPHN0eWxl'@;
put 'OnN0eWxlIHN0eWxlOm5hbWU9ImNvJytZZSsnIiBzdHlsZTpmYW1pbHk9InRhYmxlLWNvbHVtbiI+XG4nKSxQZS5wdXNoKCcgICA8c3R5bGU6dGFibGUtY29sdW1uLXByb3BlcnRpZXMgZm86YnJlYWstYmVmb3JlPSJhdXRvIiBzdHlsZTpjb2x1bW4td2lkdGg9Iicra3QrJyIvPlxuJyksUGUu'@;
put 'cHVzaCgiICA8L3N0eWxlOnN0eWxlPlxuIiksKytZZX19KTt2YXIgZXQ9MDt5ZS5TaGVldE5hbWVzLm1hcChmdW5jdGlvbihhdCl7cmV0dXJuIHllLlNoZWV0c1thdF19KS5mb3JFYWNoKGZ1bmN0aW9uKGF0KXtpZihhdCYmYXRbIiFyb3dzIl0pZm9yKHZhciBidD0wO2J0PGF0WyIhcm93cyJd'@;
put 'Lmxlbmd0aDsrK2J0KWlmKGF0WyIhcm93cyJdW2J0XSl7YXRbIiFyb3dzIl1bYnRdLm9kcz1ldDt2YXIganQ9YXRbIiFyb3dzIl1bYnRdLmhweCsicHgiO1BlLnB1c2goJyAgPHN0eWxlOnN0eWxlIHN0eWxlOm5hbWU9InJvJytldCsnIiBzdHlsZTpmYW1pbHk9InRhYmxlLXJvdyI+XG4nKSxQ'@;
put 'ZS5wdXNoKCcgICA8c3R5bGU6dGFibGUtcm93LXByb3BlcnRpZXMgZm86YnJlYWstYmVmb3JlPSJhdXRvIiBzdHlsZTpyb3ctaGVpZ2h0PSInK2p0KyciLz5cbicpLFBlLnB1c2goIiAgPC9zdHlsZTpzdHlsZT5cbiIpLCsrZXR9fSksUGUucHVzaCgnICA8c3R5bGU6c3R5bGUgc3R5bGU6bmFt'@;
put 'ZT0idGExIiBzdHlsZTpmYW1pbHk9InRhYmxlIiBzdHlsZTptYXN0ZXItcGFnZS1uYW1lPSJtcDEiPlxuJyksUGUucHVzaCgnICAgPHN0eWxlOnRhYmxlLXByb3BlcnRpZXMgdGFibGU6ZGlzcGxheT0idHJ1ZSIgc3R5bGU6d3JpdGluZy1tb2RlPSJsci10YiIvPlxuJyksUGUucHVzaCgiICA8'@;
put 'L3N0eWxlOnN0eWxlPlxuIiksUGUucHVzaCgnICA8c3R5bGU6c3R5bGUgc3R5bGU6bmFtZT0iY2UxIiBzdHlsZTpmYW1pbHk9InRhYmxlLWNlbGwiIHN0eWxlOnBhcmVudC1zdHlsZS1uYW1lPSJEZWZhdWx0IiBzdHlsZTpkYXRhLXN0eWxlLW5hbWU9Ik4zNyIvPlxuJyk7dmFyIGN0PTI7ZXQ9'@;
put 'MCx5ZS5TaGVldE5hbWVzLm1hcChmdW5jdGlvbihhdCl7cmV0dXJuIHllLlNoZWV0c1thdF19KS5mb3JFYWNoKGZ1bmN0aW9uKGF0KXtpZihhdClmb3IodmFyIGJ0PTAsanQ9MCxrdD1NcyhhdFsiIXJlZiJdKSxPdD1BcnJheS5pc0FycmF5KGF0KTtidDw9a3QuZS5yOysrYnQpZm9yKGp0PTA7'@;
put 'anQ8PWt0LmUuYzsrK2p0KXt2YXIgS3Q9cWkoe3I6YnQsYzpqdH0pLFRuPU90PyhhdFtidF18fFtdKVtqdF06YXRbS3RdO2lmKFRuJiYoVG4uc3x8VG4uUikpe3ZhciBycj1bXTtUbi5zJiZyci5wdXNoKFtUbiwhMF0pLFRuLlImJlRuLlIuZm9yRWFjaChmdW5jdGlvbihTbil7U24mJlNuLnMm'@;
put 'JnJyLnB1c2goW1NuLCExXSl9KSxyci5mb3JFYWNoKGZ1bmN0aW9uKFNuKXt2YXIgbHI9U25bMF0sWG49bHIucyxCbj0iIixmcj17InN0eWxlOm5hbWUiOihTblsxXT8iY2UiOiJUIikrY3QsInN0eWxlOmZhbWlseSI6U25bMV0/InRhYmxlLWNlbGwiOiJ0ZXh0In07U25bMV0mJihmclsic3R5'@;
put 'bGU6cGFyZW50LXN0eWxlLW5hbWUiXT0iRGVmYXVsdCIsZnJbInN0eWxlOmRhdGEtc3R5bGUtbmFtZSJdPSJOMCIpO3ZhciBicj17fSxlcj0hMSxNaT17fSxGaT0hMSxuYT17fSxjYT0hMTtpZihYbi5jb2xvciYmKE1pWyJmbzpjb2xvciJdPSIjIitQMChYbi5jb2xvci5yZ2IpLEZpPSEwKSxY'@;
put 'bi5zeiYmKE1pWyJmbzpmb250LXNpemUiXT1Ybi5zeisicHQiLEZpPSEwKSxYbi5ib2xkJiYoTWlbImZvOmZvbnQtd2VpZ2h0Il09ImJvbGQiLEZpPSEwKSxYbi5pdGFsaWMmJihNaVsiZm86Zm9udC1zdHlsZSJdPSJpdGFsaWMiLEZpPSEwKSxYbi5uYW1lJiYoTmVbWG4ubmFtZV18fChOZVtY'@;
put 'bi5uYW1lXT1Ybi5uYW1lLm1hdGNoKC8gLyk/IiZhcG9zOyIrWG4ubmFtZSsiJmFwb3M7IjpYbi5uYW1lKSxNaVsic3R5bGU6Zm9udC1uYW1lIl09WG4ubmFtZSxGaT0hMCksWG4uc3RyaWtlJiYoTWlbInN0eWxlOnRleHQtbGluZS10aHJvdWdoLXN0eWxlIl09InNvbGlkIixNaVsic3R5bGU6'@;
put 'dGV4dC1saW5lLXRocm91Z2gtdHlwZSJdPSJzaW5nbGUiLEZpPSEwKSxYbi51bmRlcmxpbmUmJihNaVsic3R5bGU6dGV4dC11bmRlcmxpbmUtc3R5bGUiXT0ic29saWQiLE1pWyJzdHlsZTp0ZXh0LXVuZGVybGluZS13aWR0aCJdPSJhdXRvIixNaVsic3R5bGU6dGV4dC11bmRlcmxpbmUtY29s'@;
put 'b3IiXT0iZm9udC1jb2xvciIsRmk9ITApLFNuWzFdKXtpZihYbi5hbGlnbm1lbnQpe3ZhciBMaT1Ybi5hbGlnbm1lbnQ7TGkud3JhcFRleHQmJihiclsiZm86d3JhcC1vcHRpb24iXT0id3JhcCIsZXI9ITApLExpLnZlcnRpY2FsJiYoYnJbInN0eWxlOnZlcnRpY2FsLWFsaWduIl09ImNlbnRl'@;
put 'ciI9PUxpLnZlcnRpY2FsPyJtaWRkbGUiOkxpLnZlcnRpY2FsLGVyPSEwKSxvZVtMaS5ob3Jpem9udGFsXSYmKG5hWyJmbzp0ZXh0LWFsaWduIl09b2VbTGkuaG9yaXpvbnRhbF0sY2E9ITApfVhuLmZnQ29sb3ImJihiclsiZm86YmFja2dyb3VuZC1jb2xvciJdPSIjIitQMChYbi5mZ0NvbG9y'@;
put 'LnJnYiksZXI9ITApfWVyJiYoQm4rPVByKCJzdHlsZTp0YWJsZS1jZWxsLXByb3BlcnRpZXMiLG51bGwsYnIpKSxGaSYmKEJuKz1Qcigic3R5bGU6dGV4dC1wcm9wZXJ0aWVzIixudWxsLE1pKSksY2EmJihCbis9UHIoInN0eWxlOnBhcmFncmFwaC1wcm9wZXJ0aWVzIixudWxsLG5hKSksUGUu'@;
put 'cHVzaCgiICAiK1ByKCJzdHlsZTpzdHlsZSIsQm4sZnIpKyJcbiIpLGxyLm9kcz1jdCwrK2N0fSl9fX0pLFBlLnB1c2goIiA8L29mZmljZTphdXRvbWF0aWMtc3R5bGVzPlxuIik7dmFyIEV0PSIgPG9mZmljZTpmb250LWZhY2UtZGVjbHM+XG4iK09lKE5lKS5tYXAoZnVuY3Rpb24oYXQpe3Jl'@;
put 'dHVybicgIDxzdHlsZTpmb250LWZhY2Ugc3R5bGU6bmFtZT0iJythdCsnIiBzdmc6Zm9udC1mYW1pbHk9IicrTmVbYXRdKyciLz5cbid9KS5qb2luKCIiKSsiIDwvb2ZmaWNlOmZvbnQtZmFjZS1kZWNscz5cbiI7cGUucHVzaChFdCkscGUucHVzaChQZS5qb2luKCIiKSl9KE5lLHllKSxOZS5w'@;
put 'dXNoKCIgIDxvZmZpY2U6Ym9keT5cbiIpLE5lLnB1c2goIiAgICA8b2ZmaWNlOnNwcmVhZHNoZWV0PlxuIik7Zm9yKHZhciBjdD0wO2N0IT15ZS5TaGVldE5hbWVzLmxlbmd0aDsrK2N0KU5lLnB1c2goUSh5ZS5TaGVldHNbeWUuU2hlZXROYW1lc1tjdF1dLHllLGN0KSk7cmV0dXJuIE5lLnB1'@;
put 'c2goIiAgICA8L29mZmljZTpzcHJlYWRzaGVldD5cbiIpLE5lLnB1c2goIiAgPC9vZmZpY2U6Ym9keT5cbiIpLE5lLnB1c2goImZvZHMiPT1QZS5ib29rVHlwZT8iPC9vZmZpY2U6ZG9jdW1lbnQ+IjoiPC9vZmZpY2U6ZG9jdW1lbnQtY29udGVudD4iKSxOZS5qb2luKCIiKX19KCk7ZnVuY3Rp'@;
put 'b24gUkkoUyxSKXtpZigiZm9kcyI9PVIuYm9va1R5cGUpcmV0dXJuIFA4KFMsUik7dmFyIGs9aGkoKSxHPSIiLFE9W10sb2U9W107cmV0dXJuIGpuKGssRz0ibWltZXR5cGUiLCJhcHBsaWNhdGlvbi92bmQub2FzaXMub3BlbmRvY3VtZW50LnNwcmVhZHNoZWV0Iiksam4oayxHPSJjb250ZW50'@;
put 'LnhtbCIsUDgoUyxSKSksUS5wdXNoKFtHLCJ0ZXh0L3htbCJdKSxvZS5wdXNoKFtHLCJDb250ZW50RmlsZSJdKSxqbihrLEc9InN0eWxlcy54bWwiLFV6KFMsUikpLFEucHVzaChbRywidGV4dC94bWwiXSksb2UucHVzaChbRywiU3R5bGVzRmlsZSJdKSxqbihrLEc9Im1ldGEueG1sIixJaStS'@;
put 'NigpKSxRLnB1c2goW0csInRleHQveG1sIl0pLG9lLnB1c2goW0csIk1ldGFkYXRhRmlsZSJdKSxqbihrLEc9Im1hbmlmZXN0LnJkZiIsZnVuY3Rpb24gUHUoUyl7dmFyIFI9W0lpXTtSLnB1c2goJzxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYt'@;
put 'c3ludGF4LW5zIyI+XG4nKTtmb3IodmFyIGs9MDtrIT1TLmxlbmd0aDsrK2spUi5wdXNoKGV1KFNba11bMF0sU1trXVsxXSkpLFIucHVzaChuMigiIixTW2tdWzBdKSk7cmV0dXJuIFIucHVzaChldSgiIiwiRG9jdW1lbnQiLCJwa2ciKSksUi5wdXNoKCI8L3JkZjpSREY+IiksUi5qb2luKCIi'@;
put 'KX0ob2UpKSxRLnB1c2goW0csImFwcGxpY2F0aW9uL3JkZit4bWwiXSksam4oayxHPSJNRVRBLUlORi9tYW5pZmVzdC54bWwiLGZ1bmN0aW9uIHhjKFMpe3ZhciBSPVtJaV07Ui5wdXNoKCc8bWFuaWZlc3Q6bWFuaWZlc3QgeG1sbnM6bWFuaWZlc3Q9InVybjpvYXNpczpuYW1lczp0YzpvcGVu'@;
put 'ZG9jdW1lbnQ6eG1sbnM6bWFuaWZlc3Q6MS4wIiBtYW5pZmVzdDp2ZXJzaW9uPSIxLjIiPlxuJyksUi5wdXNoKCcgIDxtYW5pZmVzdDpmaWxlLWVudHJ5IG1hbmlmZXN0OmZ1bGwtcGF0aD0iLyIgbWFuaWZlc3Q6dmVyc2lvbj0iMS4yIiBtYW5pZmVzdDptZWRpYS10eXBlPSJhcHBsaWNhdGlv'@;
put 'bi92bmQub2FzaXMub3BlbmRvY3VtZW50LnNwcmVhZHNoZWV0Ii8+XG4nKTtmb3IodmFyIGs9MDtrPFMubGVuZ3RoOysraylSLnB1c2goJyAgPG1hbmlmZXN0OmZpbGUtZW50cnkgbWFuaWZlc3Q6ZnVsbC1wYXRoPSInK1Nba11bMF0rJyIgbWFuaWZlc3Q6bWVkaWEtdHlwZT0iJytTW2tdWzFd'@;
put 'KyciLz5cbicpO3JldHVybiBSLnB1c2goIjwvbWFuaWZlc3Q6bWFuaWZlc3Q+IiksUi5qb2luKCIiKX0oUSkpLGt9ZnVuY3Rpb24gT2YoUyl7cmV0dXJuIGZ1bmN0aW9uKGssRyl7dmFyIFE9ZnVuY3Rpb24gWnooUyxSKXtpZighUilyZXR1cm4gMDt2YXIgaz1TLlNoZWV0TmFtZXMuaW5kZXhP'@;
put 'ZihSKTtpZigtMT09ayl0aHJvdyBuZXcgRXJyb3IoIlNoZWV0IG5vdCBmb3VuZDogIitSKTtyZXR1cm4ga30oayxHLnNoZWV0KTtyZXR1cm4gUy5mcm9tX3NoZWV0KGsuU2hlZXRzW2suU2hlZXROYW1lc1tRXV0sRyxrKX19dmFyIFd6PU9mKG1kKSxZej1PZih7ZnJvbV9zaGVldDpDMH0pLEd6'@;
put 'PU9mKHR5cGVvZiBjQzwidSI/Y0M6e30pLHZkPU9mKHR5cGVvZiBEdjwidSI/RHY6e30pLExJPU9mKHR5cGVvZiBqMzwidSI/ajM6e30pLE9JPU9mKHR5cGVvZiBWdjwidSI/VnY6e30pLCR6PU9mKHtmcm9tX3NoZWV0OmpJfSksZXJlPU9mKHR5cGVvZiBCMzwidSI/QjM6e30pLFBJPU9mKHR5'@;
put 'cGVvZiBLNjwidSI/SzY6e30pLFdsPXkoOTE0MjYpfHx0eXBlb2Ygd2luZG93PCJ1IiYmd2luZG93LmNyeXB0b0Jyb3dzZXJpZnk7aWYoIVdsKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IGZpbmQgY3J5cHRvIGV4dGVuc2lvbnMhIik7dmFyIG5wPXtTSEE1MTI6InNoYTUxMiIsU0hBMjU2OiJz'@;
put 'aGEyNTYiLFNIQTM4NDoic2hhMzg0IixTSEExOiJzaGExIixNRDU6Im1kNSIsTUQ0OiJtZDQiLE1EMjoibWQyIn07ZnVuY3Rpb24gbWMoUyxSKXtzd2l0Y2goUj0oUnx8IiIpLnJlcGxhY2UoLy0vZywiIikpe2Nhc2UiU0hBLTUxMiI6Y2FzZSJTSEE1MTIiOnJldHVybiBuZXcgV2wuY3JlYXRl'@;
put 'SGFzaCgic2hhNTEyIikudXBkYXRlKFMpLmRpZ2VzdCgpO2Nhc2UiU0hBLTEiOmNhc2UiU0hBMSI6cmV0dXJuIG5ldyBXbC5jcmVhdGVIYXNoKCJzaGExIikudXBkYXRlKFMpLmRpZ2VzdCgpO2Nhc2UiTUQyIjpyZXR1cm4gbmV3IFdsLmNyZWF0ZUhhc2goIm1kMiIpLnVwZGF0ZShTKS5kaWdl'@;
put 'c3QoKTtkZWZhdWx0OmlmKG5wW1JdKXJldHVybiBuZXcgV2wuY3JlYXRlSGFzaChucFtSXSkudXBkYXRlKFMpLmRpZ2VzdCgpO3Rocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgaGFzaCBhbGdvcml0aG0gIitSKX19ZnVuY3Rpb24gWTQoUyxSLGspe2lmKCJyYzIiPT1rKXRocm93IlVuc3Vw'@;
put 'cG9ydGVkIFJDMiI7dmFyIEc9V2wuY3JlYXRlRGVjaXBoZXJpdihrfHwiYWVzLTI1Ni1jYmMiLFMsUik7cmV0dXJuIEcuc2V0QXV0b1BhZGRpbmcoITEpLEd9ZnVuY3Rpb24gRjgoUyl7cmV0dXJuWygiMDAiKygyNTUmUykudG9TdHJpbmcoMTYpKS5zbGljZSgtMiksKCIwMCIrKFM+Pj44JjI1'@;
put 'NSkudG9TdHJpbmcoMTYpKS5zbGljZSgtMiksKCIwMCIrKFM+Pj4xNiYyNTUpLnRvU3RyaW5nKDE2KSkuc2xpY2UoLTIpLCgiMDAiKyhTPj4+MjQmMjU1KS50b1N0cmluZygxNikpLnNsaWNlKC0yKV0uam9pbigiIil9dmFyIEc0PWZ1bmN0aW9uKFMsUixrKXtmb3IodmFyIEc9InN0cmluZyI9'@;
put 'PXR5cGVvZiBSP0J1ZmZlci5mcm9tKFIsImhleCIpOlIsUT0ic3RyaW5nIj09dHlwZW9mIFM/QnVmZmVyLmZyb20oY3B0YWJsZS51dGlscy5lbmNvZGUoMTIwMCxTKSk6UyxvZT0ic3RyaW5nIj09dHlwZW9mIGs/QnVmZmVyLmZyb20oaywiaGV4Iik6ayxnZT1tYyhRLCJNRDUiKSxwZT1CdWZm'@;
put 'ZXIuY29uY2F0KFtnZS5zbGljZSgwLDUpLEddKSx5ZT0wO3llPDQ7Kyt5ZSlwZT1CdWZmZXIuY29uY2F0KFtwZSxwZV0pO3ZhciBQZT1tYyhwZSwiTUQ1Iik7cmV0dXJuKG1jKEJ1ZmZlci5jb25jYXQoW1BlLnNsaWNlKDAsNSksb2VdKSwiTUQ1IikudG9TdHJpbmcoImhleCIpKyIwMDAwMDAw'@;
put 'MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIpLnNsaWNlKDAsMzIpfSwkND1mdW5jdGlvbihTLFIsayl7dmFyIEc9InN0cmluZyI9PXR5cGVvZiBSP0J1ZmZlci5mcm9tKFIsImhleCIpOlIsUT0ic3RyaW5nIj09dHlwZW9mIFM/QnVmZmVyLmZyb20oY3B0YWJsZS51dGlscy5lbmNvZGUoMTIw'@;
put 'MCxTKSk6UyxvZT0ic3RyaW5nIj09dHlwZW9mIGs/QnVmZmVyLmZyb20oaywiaGV4Iik6ayxnZT1tYyhCdWZmZXIuY29uY2F0KFtHLFFdKSwiU0hBMSIpO3JldHVybiBtYyhCdWZmZXIuY29uY2F0KFtnZSxvZV0pLCJTSEExIil9LFh6PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gUigpe31SLnByb3Rv'@;
put 'dHlwZS5idWlsZD1mdW5jdGlvbihhdCl7dGhpcy5faT0wO3ZhciBidD10aGlzLl9idWlsZChhdCwiIik7cmV0dXJuIiI9PT1idD8iIjonPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9InllcyI/PicrYnR9LFIucHJvdG90eXBlLl9idWlsZD1mdW5jdGlv'@;
put 'bihhdCxidCl7aWYodGhpcy5faSsrJTFlNj09MCYmKHRoaXMuX2M9YnRbMF0pLG51bGw9PWF0fHwib2JqZWN0IiE9dHlwZW9mIGF0JiYiZnVuY3Rpb24iIT10eXBlb2YgYXQpbnVsbCE9YXQmJihidCs9ZnVuY3Rpb24gUyhhdCxidCl7cmV0dXJuIG51bGw9PWF0fHwoYXQ9YXQudG9TdHJpbmco'@;
put 'KS5yZXBsYWNlKC8mL2csIiZhbXA7IikucmVwbGFjZSgvPC9nLCImbHQ7IikucmVwbGFjZSgvPi9nLCImZ3Q7IiksYnQmJihhdD1hdC5yZXBsYWNlKC8iL2csIiZxdW90OyIpKSksYXR9KGF0KSk7ZWxzZXtpZighYXQubmFtZSl0aHJvdyBuZXcgRXJyb3IoIlhNTCBub2RlIGRvZXMgbm90IGhh'@;
put 'dmUgbmFtZTogIitKU09OLnN0cmluZ2lmeShhdCkpO2J0Kz0iPCIrYXQubmFtZTt2YXIganQ9dGhpcztidCs9YXQuYXR0cmlidXRlcyYmTHUoYXQuYXR0cmlidXRlcyl8fCIiLEFycmF5LmlzQXJyYXkoYXQuY2hpbGRyZW4pJiYwIT1hdC5jaGlsZHJlbi5sZW5ndGg/KGJ0Kz0iPiIsYXQuY2hp'@;
put 'bGRyZW4uZm9yRWFjaChmdW5jdGlvbihrdCl7YnQ9anQuX2J1aWxkKGt0LGJ0KX0pLGJ0Kz0iPC8iK2F0Lm5hbWUrIj4iKTpidCs9Ii8+In1yZXR1cm4gYnR9O3ZhciBrPUJ1ZmZlci5mcm9tKFs0LDAsNCwwLDY0LDAsMCwwXSksb2U9e2RhdGFJbnRlZ3JpdHk6e2htYWNLZXk6QnVmZmVyLmZy'@;
put 'b20oWzk1LDE3OCwxNzMsMSwxMiwxODUsMjI1LDI0Nl0pLGhtYWNWYWx1ZTpCdWZmZXIuZnJvbShbMTYwLDEwMywxMjcsMiwxNzgsNDQsMTMyLDUxXSl9LGtleTpCdWZmZXIuZnJvbShbMjAsMTEwLDExLDIzMSwxNzEsMTcyLDIwOCwyMTRdKSx2ZXJpZmllckhhc2g6e2lucHV0OkJ1ZmZlci5m'@;
put 'cm9tKFsyNTQsMTY3LDIxMCwxMTgsNTksNzUsMTU4LDEyMV0pLHZhbHVlOkJ1ZmZlci5mcm9tKFsyMTUsMTcwLDE1LDEwOSw0OCw5Nyw1Miw3OF0pfX07ZnVuY3Rpb24gZ2UoYXQsYnQsanQsa3QsT3QsS3Qpe3ZhciBUbj1idC50b0xvd2VyQ2FzZSgpKyItIis4Kmt0Lmxlbmd0aDtpZigiQ2hh'@;
put 'aW5pbmdNb2RlQ0JDIiE9PWp0KXRocm93IG5ldyBFcnJvcigiVW5rbm93biBjaXBoZXIgY2hhaW5pbmc6ICIranQpO3ZhciBycj1XbFthdD8iY3JlYXRlQ2lwaGVyaXYiOiJjcmVhdGVEZWNpcGhlcml2Il0oVG4rPSItY2JjIixrdCxPdCk7cnIuc2V0QXV0b1BhZGRpbmcoITEpO3ZhciBTbj1y'@;
put 'ci51cGRhdGUoS3QpLGxyPVtTbl07dHJ5e3ZhciBYbj1yci5maW5hbCgpO2xyLnB1c2goWG4pfWNhdGNoe31yZXR1cm4gQnVmZmVyLmNvbmNhdChscil9ZnVuY3Rpb24gcGUoYXQpe2F0PWF0LnRvTG93ZXJDYXNlKCk7dmFyIGJ0PVtdLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpO2lmKFdsLmdl'@;
put 'dEhhc2hlcygpLmluZGV4T2YoYXQpPDApdGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCBoYXNoIGFsZ29yaXRobSAiK2F0KTt2YXIga3Q9V2wuY3JlYXRlSGFzaChhdCk7cmV0dXJuIGt0LnVwZGF0ZShCdWZmZXIuY29uY2F0KGJ0KSksa3QuZGlnZXN0KCl9ZnVuY3Rpb24geWUoYXQsYnQs'@;
put 'anQsa3QpeyJudW1iZXIiPT10eXBlb2Yga3QmJihrdD1QZShrdCkpO3ZhciBPdD1wZShhdCxidCxrdCk7aWYoT3QubGVuZ3RoPGp0KXt2YXIgS3Q9QnVmZmVyLmFsbG9jKGp0LDU0KTtPdC5jb3B5KEt0KSxPdD1LdH1lbHNlIE90Lmxlbmd0aD5qdCYmKE90PU90LnNsaWNlKDAsanQpKTtyZXR1'@;
put 'cm4gT3R9ZnVuY3Rpb24gUGUoYXQsYnQpe3ZhciBqdD1CdWZmZXIuYWxsb2MoYnR8fDQpO3JldHVybiBqdC53cml0ZVVJbnQzMkxFKGF0LDApLGp0fWZ1bmN0aW9uIE5lKGF0LGJ0LGp0LGt0LE90LEt0KXtmb3IodmFyIHJyPXBlKGJ0LGp0LEJ1ZmZlci5mcm9tKGF0LCJ1dGYxNmxlIikpLFNu'@;
put 'PTA7U248a3Q7U24rKylycj1wZShidCxQZShTbikscnIpO3ZhciBYbj1PdC84O2lmKChycj1wZShidCxycixLdCkpLmxlbmd0aDxYbil7dmFyIEJuPUJ1ZmZlci5hbGxvYyhYbiw1NCk7cnIuY29weShCbikscnI9Qm59ZWxzZSByci5sZW5ndGg+WG4mJihycj1yci5zbGljZSgwLFhuKSk7cmV0'@;
put 'dXJuIHJyfXJldHVybiBXbC5yYW5kb21CeXRlc3x8KFdsLnJhbmRvbUJ5dGVzPWZ1bmN0aW9uKGF0KXtmb3IodmFyIGJ0PUJ1ZmZlci5hbGxvYyhhdCksanQ9MDtqdDxhdDsrK2p0KWJ0W2p0XT1NYXRoLmZsb29yKDI1NipNYXRoLnJhbmRvbSgpKTtyZXR1cm4gYnR9KSxmdW5jdGlvbiBFdChh'@;
put 'dCxidCl7aWYoInN0cmluZyI9PXR5cGVvZiBhdClyZXR1cm4gRXQoQnVmZmVyLmZyb20oYXQsImJpbmFyeSIpLGJ0KTt2YXIganQ9V2wucmFuZG9tQnl0ZXMoMzIpLGt0PXtwYWNrYWdlOntjaXBoZXJBbGdvcml0aG06IkFFUyIsY2lwaGVyQ2hhaW5pbmc6IkNoYWluaW5nTW9kZUNCQyIsc2Fs'@;
put 'dFZhbHVlOldsLnJhbmRvbUJ5dGVzKDE2KSxoYXNoQWxnb3JpdGhtOiJTSEE1MTIiLGhhc2hTaXplOjY0LGJsb2NrU2l6ZToxNixrZXlCaXRzOjgqanQubGVuZ3RofSxrZXk6e2NpcGhlckFsZ29yaXRobToiQUVTIixjaXBoZXJDaGFpbmluZzoiQ2hhaW5pbmdNb2RlQ0JDIixzYWx0VmFsdWU6'@;
put 'V2wucmFuZG9tQnl0ZXMoMTYpLGhhc2hBbGdvcml0aG06IlNIQTUxMiIsaGFzaFNpemU6NjQsYmxvY2tTaXplOjE2LHNwaW5Db3VudDoxLGtleUJpdHM6MjU2fX0sT3Q9ZnVuY3Rpb24gWWUoYXQsYnQsanQsa3QsT3QsS3QsVG4scnIpe2Zvcih2YXIgU249W10sbHI9YXQ/MDo4LFhuPTAsQm49'@;
put 'MCxmcj0wO2ZyPHJyLmxlbmd0aDspeyhmcj0oQm49ZnIpKzQwOTYpPnJyLmxlbmd0aCYmKGZyPXJyLmxlbmd0aCk7dmFyIGJyPXJyLnNsaWNlKEJuK2xyLGZyK2xyKSxlcj1ici5sZW5ndGglT3Q7ZXImJihicj1CdWZmZXIuY29uY2F0KFticixCdWZmZXIuYWxsb2MoT3QtZXIpXSkpO3ZhciBG'@;
put 'aT1nZShhdCxidCxqdCxUbix5ZShrdCxLdCxPdCxYbiksYnIpO1NuLnB1c2goRmkpLFhuKyt9dmFyIG5hPUJ1ZmZlci5jb25jYXQoU24pO2lmKGF0KW5hPUJ1ZmZlci5jb25jYXQoW1BlKHJyLmxlbmd0aCw4KSxuYV0pO2Vsc2V7dmFyIGNhPXJyLnJlYWRVSW50MzJMRSgwKTtuYT1uYS5zbGlj'@;
put 'ZSgwLGNhKX1yZXR1cm4gbmF9KCEwLGt0LnBhY2thZ2UuY2lwaGVyQWxnb3JpdGhtLGt0LnBhY2thZ2UuY2lwaGVyQ2hhaW5pbmcsa3QucGFja2FnZS5oYXNoQWxnb3JpdGhtLGt0LnBhY2thZ2UuYmxvY2tTaXplLGt0LnBhY2thZ2Uuc2FsdFZhbHVlLGp0LGF0KSxLdD1XbC5yYW5kb21CeXRl'@;
put 'cyg2NCksVG49eWUoa3QucGFja2FnZS5oYXNoQWxnb3JpdGhtLGt0LnBhY2thZ2Uuc2FsdFZhbHVlLGt0LnBhY2thZ2UuYmxvY2tTaXplLG9lLmRhdGFJbnRlZ3JpdHkuaG1hY0tleSkscnI9Z2UoITAsa3QucGFja2FnZS5jaXBoZXJBbGdvcml0aG0sa3QucGFja2FnZS5jaXBoZXJDaGFpbmlu'@;
put 'ZyxqdCxUbixLdCksU249ZnVuY3Rpb24gZXQoYXQsYnQpe2F0PWF0LnRvTG93ZXJDYXNlKCk7dmFyIGp0PVtdLnNsaWNlLmNhbGwoYXJndW1lbnRzLDIpO2lmKFdsLmdldEhhc2hlcygpLmluZGV4T2YoYXQpPDApdGhyb3cgbmV3IEVycm9yKCJITUFDIGFsZ29yaXRobSAnIithdCsiJyBub3Qg'@;
put 'c3VwcG9ydGVkISIpO3ZhciBPdD1XbC5jcmVhdGVIbWFjKGF0LGJ0KTtyZXR1cm4gT3QudXBkYXRlKEJ1ZmZlci5jb25jYXQoanQpKSxPdC5kaWdlc3QoKX0oa3QucGFja2FnZS5oYXNoQWxnb3JpdGhtLEt0LE90KSxscj15ZShrdC5wYWNrYWdlLmhhc2hBbGdvcml0aG0sa3QucGFja2FnZS5z'@;
put 'YWx0VmFsdWUsa3QucGFja2FnZS5ibG9ja1NpemUsb2UuZGF0YUludGVncml0eS5obWFjVmFsdWUpLFhuPWdlKCEwLGt0LnBhY2thZ2UuY2lwaGVyQWxnb3JpdGhtLGt0LnBhY2thZ2UuY2lwaGVyQ2hhaW5pbmcsanQsbHIsU24pO2t0LmRhdGFJbnRlZ3JpdHk9e2VuY3J5cHRlZEhtYWNLZXk6'@;
put 'cnIsZW5jcnlwdGVkSG1hY1ZhbHVlOlhufTt2YXIgQm49TmUoYnQsa3Qua2V5Lmhhc2hBbGdvcml0aG0sa3Qua2V5LnNhbHRWYWx1ZSxrdC5rZXkuc3BpbkNvdW50LGt0LmtleS5rZXlCaXRzLG9lLmtleSk7a3Qua2V5LmVuY3J5cHRlZEtleVZhbHVlPWdlKCEwLGt0LmtleS5jaXBoZXJBbGdv'@;
put 'cml0aG0sa3Qua2V5LmNpcGhlckNoYWluaW5nLEJuLGt0LmtleS5zYWx0VmFsdWUsanQpO3ZhciBmcj1XbC5yYW5kb21CeXRlcygxNiksYnI9TmUoYnQsa3Qua2V5Lmhhc2hBbGdvcml0aG0sa3Qua2V5LnNhbHRWYWx1ZSxrdC5rZXkuc3BpbkNvdW50LGt0LmtleS5rZXlCaXRzLG9lLnZlcmlm'@;
put 'aWVySGFzaC5pbnB1dCk7a3Qua2V5LmVuY3J5cHRlZFZlcmlmaWVySGFzaElucHV0PWdlKCEwLGt0LmtleS5jaXBoZXJBbGdvcml0aG0sa3Qua2V5LmNpcGhlckNoYWluaW5nLGJyLGt0LmtleS5zYWx0VmFsdWUsZnIpO3ZhciBlcj1wZShrdC5rZXkuaGFzaEFsZ29yaXRobSxmciksTWk9TmUo'@;
put 'YnQsa3Qua2V5Lmhhc2hBbGdvcml0aG0sa3Qua2V5LnNhbHRWYWx1ZSxrdC5rZXkuc3BpbkNvdW50LGt0LmtleS5rZXlCaXRzLG9lLnZlcmlmaWVySGFzaC52YWx1ZSk7a3Qua2V5LmVuY3J5cHRlZFZlcmlmaWVySGFzaFZhbHVlPWdlKCEwLGt0LmtleS5jaXBoZXJBbGdvcml0aG0sa3Qua2V5'@;
put 'LmNpcGhlckNoYWluaW5nLE1pLGt0LmtleS5zYWx0VmFsdWUsZXIpO3ZhciBGaT1mdW5jdGlvbiBjdChhdCl7dmFyIGJ0PXtuYW1lOiJlbmNyeXB0aW9uIixhdHRyaWJ1dGVzOnt4bWxuczoiaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9vZmZpY2UvMjAwNi9lbmNyeXB0aW9uIiwieG1s'@;
put 'bnM6cCI6Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vb2ZmaWNlLzIwMDYva2V5RW5jcnlwdG9yL3Bhc3N3b3JkIiwieG1sbnM6YyI6Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vb2ZmaWNlLzIwMDYva2V5RW5jcnlwdG9yL2NlcnRpZmljYXRlIn0sY2hpbGRyZW46W3tuYW1l'@;
put 'OiJrZXlEYXRhIixhdHRyaWJ1dGVzOntzYWx0U2l6ZTphdC5wYWNrYWdlLnNhbHRWYWx1ZS5sZW5ndGgsYmxvY2tTaXplOmF0LnBhY2thZ2UuYmxvY2tTaXplLGtleUJpdHM6YXQucGFja2FnZS5rZXlCaXRzLGhhc2hTaXplOmF0LnBhY2thZ2UuaGFzaFNpemUsY2lwaGVyQWxnb3JpdGhtOmF0'@;
put 'LnBhY2thZ2UuY2lwaGVyQWxnb3JpdGhtLGNpcGhlckNoYWluaW5nOmF0LnBhY2thZ2UuY2lwaGVyQ2hhaW5pbmcsaGFzaEFsZ29yaXRobTphdC5wYWNrYWdlLmhhc2hBbGdvcml0aG0sc2FsdFZhbHVlOmF0LnBhY2thZ2Uuc2FsdFZhbHVlLnRvU3RyaW5nKCJiYXNlNjQiKX19LHtuYW1lOiJk'@;
put 'YXRhSW50ZWdyaXR5IixhdHRyaWJ1dGVzOntlbmNyeXB0ZWRIbWFjS2V5OmF0LmRhdGFJbnRlZ3JpdHkuZW5jcnlwdGVkSG1hY0tleS50b1N0cmluZygiYmFzZTY0IiksZW5jcnlwdGVkSG1hY1ZhbHVlOmF0LmRhdGFJbnRlZ3JpdHkuZW5jcnlwdGVkSG1hY1ZhbHVlLnRvU3RyaW5nKCJiYXNl'@;
put 'NjQiKX19LHtuYW1lOiJrZXlFbmNyeXB0b3JzIixjaGlsZHJlbjpbe25hbWU6ImtleUVuY3J5cHRvciIsYXR0cmlidXRlczp7dXJpOiJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL29mZmljZS8yMDA2L2tleUVuY3J5cHRvci9wYXNzd29yZCJ9LGNoaWxkcmVuOlt7bmFtZToicDplbmNy'@;
put 'eXB0ZWRLZXkiLGF0dHJpYnV0ZXM6e3NwaW5Db3VudDphdC5rZXkuc3BpbkNvdW50LHNhbHRTaXplOmF0LmtleS5zYWx0VmFsdWUubGVuZ3RoLGJsb2NrU2l6ZTphdC5rZXkuYmxvY2tTaXplLGtleUJpdHM6YXQua2V5LmtleUJpdHMsaGFzaFNpemU6YXQua2V5Lmhhc2hTaXplLGNpcGhlckFs'@;
put 'Z29yaXRobTphdC5rZXkuY2lwaGVyQWxnb3JpdGhtLGNpcGhlckNoYWluaW5nOmF0LmtleS5jaXBoZXJDaGFpbmluZyxoYXNoQWxnb3JpdGhtOmF0LmtleS5oYXNoQWxnb3JpdGhtLHNhbHRWYWx1ZTphdC5rZXkuc2FsdFZhbHVlLnRvU3RyaW5nKCJiYXNlNjQiKSxlbmNyeXB0ZWRWZXJpZmll'@;
put 'ckhhc2hJbnB1dDphdC5rZXkuZW5jcnlwdGVkVmVyaWZpZXJIYXNoSW5wdXQudG9TdHJpbmcoImJhc2U2NCIpLGVuY3J5cHRlZFZlcmlmaWVySGFzaFZhbHVlOmF0LmtleS5lbmNyeXB0ZWRWZXJpZmllckhhc2hWYWx1ZS50b1N0cmluZygiYmFzZTY0IiksZW5jcnlwdGVkS2V5VmFsdWU6YXQu'@;
put 'a2V5LmVuY3J5cHRlZEtleVZhbHVlLnRvU3RyaW5nKCJiYXNlNjQiKX19XX1dfV19LGt0PShuZXcgUikuYnVpbGQoYnQpO3JldHVybiBCdWZmZXIuY29uY2F0KFtrLEJ1ZmZlci5mcm9tKGt0LCJ1dGY4IildKX0oa3QpLG5hPXZlLnV0aWxzLmNmYl9uZXcoKTtyZXR1cm4gdmUudXRpbHMuY2Zi'@;
put 'X2FkZChuYSwiRW5jcnlwdGlvbkluZm8iLEZpKSx2ZS51dGlscy5jZmJfYWRkKG5hLCJFbmNyeXB0ZWRQYWNrYWdlIixPdCksbmF9fSgpO2Z1bmN0aW9uIEhJKFMpe3JldHVybiBmdW5jdGlvbihrKXtmb3IodmFyIEc9MDtHIT1TLmxlbmd0aDsrK0cpe3ZhciBRPVNbR107dm9pZCAwPT09a1tR'@;
put 'WzBdXSYmKGtbUVswXV09UVsxXSksIm4iPT09UVsyXSYmKGtbUVswXV09TnVtYmVyKGtbUVswXV0pKX19fXZhciBOST1mdW5jdGlvbihTKXtISShbWyJjZWxsTkYiLCExXSxbImNlbGxIVE1MIiwhMF0sWyJjZWxsRm9ybXVsYSIsITBdLFsiY2VsbFN0eWxlcyIsITFdLFsiY2VsbFRleHQiLCEw'@;
put 'XSxbImNlbGxEYXRlcyIsITFdLFsic2hlZXRTdHVicyIsITFdLFsic2hlZXRSb3dzIiwwLCJuIl0sWyJib29rRGVwcyIsITFdLFsiYm9va1NoZWV0cyIsITFdLFsiYm9va1Byb3BzIiwhMV0sWyJib29rRmlsZXMiLCExXSxbImJvb2tWQkEiLCExXSxbInBhc3N3b3JkIiwiIl0sWyJXVEYiLCEx'@;
put 'XV0pKFMpLFMuYm9va0ltYWdlcyYmKFMuY2VsbFN0eWxlcz0hMCl9LFBmPUhJKFtbImNlbGxEYXRlcyIsITFdLFsiYm9va1NTVCIsITFdLFsiYm9va1R5cGUiLCJ4bHN4Il0sWyJjb21wcmVzc2lvbiIsITFdLFsiV1RGIiwhMV1dKTtmdW5jdGlvbiBucmUoUyl7cmV0dXJuIEthLldTLmluZGV4'@;
put 'T2YoUyk+LTE/InNoZWV0IjpLYS5DUyYmUz09S2EuQ1M/ImNoYXJ0IjpLYS5EUyYmUz09S2EuRFM/ImRpYWxvZyI6S2EuTVMmJlM9PUthLk1TPyJtYWNybyI6UyYmUy5sZW5ndGg/Uzoic2hlZXQifXZhciBQYj1bXTtmdW5jdGlvbiB5MihTLFIsayxHLFEsb2UsZ2UscGUseWUsUGUsTmUsWWUp'@;
put 'e3RyeXtvZVtHXT1iZihucihTLGssITApLFIpO3ZhciBjdCxldD1UdChTLFIpO3N3aXRjaChwZSl7Y2FzZSJzaGVldCI6Y3Q9ZnVuY3Rpb24gYnooUyxSLGssRyxRLG9lLGdlLHBlKXtyZXR1cm4iLmJpbiI9PT1SLnNsaWNlKC00KT9mdW5jdGlvbiBRaihTLFIsayxHLFEsb2UsZ2Upe2lmKCFT'@;
put 'KXJldHVybiBTO3ZhciBwZT1SfHx7fTtHfHwoRz17IiFpZCI6e319KSxudWxsIT1sZSYmbnVsbD09cGUuZGVuc2UmJihwZS5kZW5zZT1sZSk7dmFyIFBlLEV0LGF0LGJ0LGp0LGt0LE90LEt0LFRuLHJyLHllPXBlLmRlbnNlP1tdOnt9LE5lPXtzOntyOjJlNixjOjJlNn0sZTp7cjowLGM6MH19'@;
put 'LFllPVtdLGV0PSExLGN0PSExLFNuPVtdO3BlLmJpZmY9MTIscGVbIiFyb3ciXT0wO3ZhciBscj0wLFhuPSExLEJuPVtdLGZyPXt9LGJyPXBlLnN1cGJvb2tzfHxRLnN1cGJvb2tzfHxbW11dO2lmKGJyLnNoYXJlZGY9ZnIsYnIuYXJyYXlmPUJuLGJyLlNoZWV0TmFtZXM9US5TaGVldE5hbWVz'@;
put 'fHxRLlNoZWV0cy5tYXAoZnVuY3Rpb24oTGkpe3JldHVybiBMaS5uYW1lfSksIXBlLnN1cGJvb2tzJiYocGUuc3VwYm9va3M9YnIsUS5OYW1lcykpZm9yKHZhciBlcj0wO2VyPFEuTmFtZXMubGVuZ3RoOysrZXIpYnJbMF1bZXIrMV09US5OYW1lc1tlcl07dmFyIE1pPVtdLEZpPVtdLG5hPSEx'@;
put 'O2lmKEw4WzE2XT17bjoiQnJ0U2hvcnRSZWFsIixmOkZqfSx1cihTLGZ1bmN0aW9uKGtyLFZuLEJyKXtpZighY3Qpc3dpdGNoKEJyKXtjYXNlIDE0ODpQZT1rcjticmVhaztjYXNlIDA6RXQ9a3IscGUuc2hlZXRSb3dzJiZwZS5zaGVldFJvd3M8PUV0LnImJihjdD0hMCksVG49amkoanQ9RXQu'@;
put 'cikscGVbIiFyb3ciXT1FdC5yLChrci5oaWRkZW58fGtyLmhwdHx8bnVsbCE9a3IubGV2ZWwpJiYoa3IuaHB0JiYoa3IuaHB4PXNoKGtyLmhwdCkpLEZpW2tyLnJdPWtyKTticmVhaztjYXNlIDI6Y2FzZSAzOmNhc2UgNDpjYXNlIDU6Y2FzZSA2OmNhc2UgNzpjYXNlIDg6Y2FzZSA5OmNhc2Ug'@;
put 'MTA6Y2FzZSAxMTpjYXNlIDEzOmNhc2UgMTQ6Y2FzZSAxNTpjYXNlIDE2OmNhc2UgMTc6Y2FzZSAxODpzd2l0Y2goYXQ9e3Q6a3JbMl19LGtyWzJdKXtjYXNlIm4iOmF0LnY9a3JbMV07YnJlYWs7Y2FzZSJzIjphdC52PShLdD1sOFtrclsxXV0pLnQscGUuY2VsbFN0eWxlcyYmKGF0LlI9ZnVu'@;
put 'Y3Rpb24gRVYoUyxSKXtpZihTLlIpcmV0dXJuIFMuUjtpZihSJiZSLkZvbnRzJiYoMSE9Uy5yLmxlbmd0aHx8MCE9Uy5yWzBdLmljaCkpe1MuUj1bXTt2YXIgaz0wLEc9Uy5yW2tdLFE9Uy5yW2srMV07Zm9yKEcuaWNoPjAmJlMuUi5wdXNoKHt0OiJzIix2OlMudC5zbGljZSgwLEcuaWNoKX0p'@;
put 'O2s8Uy5yLmxlbmd0aC0xOysraylTLlIucHVzaCh7dDoicyIsdjpTLnQuc2xpY2UoKEc9Uy5yW2tdKS5pY2gsKFE9Uy5yW2srMV0pLmljaCksczpSLkZvbnRzW0cuaWZudF19KTtyZXR1cm4gUy5SLnB1c2goe3Q6InMiLHY6Uy50LnNsaWNlKChRfHxHKS5pY2gpLHM6Ui5Gb250c1soUXx8Ryku'@;
put 'aWZudF19KSxTLlJ9fShLdCxnZSkpO2JyZWFrO2Nhc2UiYiI6YXQudj0hIWtyWzFdO2JyZWFrO2Nhc2UiZSI6YXQudj1rclsxXSwhMSE9PXBlLmNlbGxUZXh0JiYoYXQudz1NY1thdC52XSk7YnJlYWs7Y2FzZSJzdHIiOmF0LnQ9InMiLGF0LnY9a3JbMV19aWYoKGJ0PWdlLkNlbGxYZltrclsw'@;
put 'XS5pU3R5bGVSZWZdKSYmSjMoYXQsYnQubnVtRm10SWQsYnQuZmlsbElkLGJ0LmZvbnRJZCxidC5ib3JkZXJJZCxwZSwwLGdlKSxwZS5jZWxsU3R5bGVzJiZhdC5zJiZidC5hbGlnbm1lbnQmJihhdC5zLmFsaWdubWVudD1xdChidC5hbGlnbm1lbnQpKSxrdD0tMT09a3JbMF0uYz9rdCsxOmty'@;
put 'WzBdLmMscGUuZGVuc2U/KHllW2p0XXx8KHllW2p0XT1bXSkseWVbanRdW2t0XT1hdCk6eWVbVGEoa3QpK1RuXT1hdCxwZS5jZWxsRm9ybXVsYSl7Zm9yKFhuPSExLGxyPTA7bHI8Qm4ubGVuZ3RoOysrbHIpe3ZhciBfcj1Cbltscl07RXQucj49X3JbMF0ucy5yJiZFdC5yPD1fclswXS5lLnIm'@;
put 'Jmt0Pj1fclswXS5zLmMmJmt0PD1fclswXS5lLmMmJihhdC5GPXJhKF9yWzBdKSxYbj0hMCl9IVhuJiZrci5sZW5ndGg+MyYmKGF0LmY9a3JbM10pfWlmKE5lLnMucj5FdC5yJiYoTmUucy5yPUV0LnIpLE5lLnMuYz5rdCYmKE5lLnMuYz1rdCksTmUuZS5yPEV0LnImJihOZS5lLnI9RXQuciks'@;
put 'TmUuZS5jPGt0JiYoTmUuZS5jPWt0KSxwZS5jZWxsRGF0ZXMmJmJ0JiYibiI9PWF0LnQmJkEuaXNfZGF0ZShBLl90YWJsZVtidC5udW1GbXRJZF0pKXt2YXIgRm49QS5wYXJzZV9kYXRlX2NvZGUoYXQudik7Rm4mJihhdC50PSJkIixhdC52PW5ldyBEYXRlKEZuLnksRm4ubS0xLEZuLmQsRm4u'@;
put 'SCxGbi5NLEZuLlMsRm4udSkpfWJyZWFrO2Nhc2UgMTpjYXNlIDEyOmlmKCFwZS5zaGVldFN0dWJzfHxldClicmVhazthdD17dDoieiIsdjp2b2lkIDB9LGt0PS0xPT1rclswXS5jP2t0KzE6a3JbMF0uYywoYnQ9Z2UuQ2VsbFhmW2tyWzBdLmlTdHlsZVJlZl0pJiZKMyhhdCxidC5udW1GbXRJ'@;
put 'ZCxidC5maWxsSWQsYnQuZm9udElkLGJ0LmJvcmRlcklkLHBlLDAsZ2UpLHBlLmNlbGxTdHlsZXMmJmF0LnMmJmJ0LmFsaWdubWVudCYmKGF0LnMuYWxpZ25tZW50PXF0KGJ0LmFsaWdubWVudCkpLHBlLmRlbnNlPyh5ZVtqdF18fCh5ZVtqdF09W10pLHllW2p0XVtrdF09YXQpOnllW1RhKGt0'@;
put 'KStUbl09YXQsTmUucy5yPkV0LnImJihOZS5zLnI9RXQuciksTmUucy5jPmt0JiYoTmUucy5jPWt0KSxOZS5lLnI8RXQuciYmKE5lLmUucj1FdC5yKSxOZS5lLmM8a3QmJihOZS5lLmM9a3QpO2JyZWFrO2Nhc2UgMTc2OlNuLnB1c2goa3IpO2JyZWFrO2Nhc2UgNDk0OnZhciBqcj1HWyIhaWQi'@;
put 'XVtrci5yZWxJZF07Zm9yKGpyPyhrci5UYXJnZXQ9anIuVGFyZ2V0LGtyLmxvYyYmKGtyLlRhcmdldCs9IiMiK2tyLmxvYyksa3IuUmVsPWpyKToiIj09a3IucmVsSWQmJihrci5UYXJnZXQ9IiMiK2tyLmxvYyksanQ9a3IucmZ4LnMucjtqdDw9a3IucmZ4LmUucjsrK2p0KWZvcihrdD1rci5y'@;
put 'Zngucy5jO2t0PD1rci5yZnguZS5jOysra3QpcGUuZGVuc2U/KHllW2p0XXx8KHllW2p0XT1bXSkseWVbanRdW2t0XXx8KHllW2p0XVtrdF09e3Q6InoiLHY6dm9pZCAwfSkseWVbanRdW2t0XS5sPWtyKTooT3Q9cWkoe2M6a3QscjpqdH0pLHllW090XXx8KHllW090XT17dDoieiIsdjp2b2lk'@;
put 'IDB9KSx5ZVtPdF0ubD1rcik7YnJlYWs7Y2FzZSA0MjY6aWYoIXBlLmNlbGxGb3JtdWxhKWJyZWFrO0JuLnB1c2goa3IpLChycj1wZS5kZW5zZT95ZVtqdF1ba3RdOnllW1RhKGt0KStUbl0pLmY9czAoa3JbMV0sTmUse3I6RXQucixjOmt0fSxicixwZSkscnIuRj1yYShrclswXSk7YnJlYWs7'@;
put 'Y2FzZSA0Mjc6aWYoIXBlLmNlbGxGb3JtdWxhKWJyZWFrO2ZyW3FpKGtyWzBdLnMpXT1rclsxXSwocnI9cGUuZGVuc2U/eWVbanRdW2t0XTp5ZVtUYShrdCkrVG5dKS5mPXMwKGtyWzFdLE5lLHtyOkV0LnIsYzprdH0sYnIscGUpO2JyZWFrO2Nhc2UgNjA6aWYoIXBlLmNlbGxTdHlsZXMpYnJl'@;
put 'YWs7Zm9yKDtrci5lPj1rci5zOylNaVtrci5lLS1dPXt3aWR0aDprci53LzI1NixoaWRkZW46ISEoMSZrci5mbGFncyksbGV2ZWw6a3IubGV2ZWx9LG5hfHwobmE9ITApLFEwKE1pW2tyLmUrMV0pO2JyZWFrO2Nhc2UgMTYxOnllWyIhYXV0b2ZpbHRlciJdPXtyZWY6cmEoa3IpfTticmVhaztj'@;
put 'YXNlIDQ3Njp5ZVsiIW1hcmdpbnMiXT1rcjticmVhaztjYXNlIDE0NzpRLlNoZWV0c1trXXx8KFEuU2hlZXRzW2tdPXt9KSxrci5uYW1lJiYoUS5TaGVldHNba10uQ29kZU5hbWU9a3IubmFtZSksKGtyLmFib3ZlfHxrci5sZWZ0KSYmKHllWyIhb3V0bGluZSJdPXthYm92ZTprci5hYm92ZSxs'@;
put 'ZWZ0OmtyLmxlZnR9KTticmVhaztjYXNlIDEzNzpRLlZpZXdzfHwoUS5WaWV3cz1be31dKSxRLlZpZXdzWzBdfHwoUS5WaWV3c1swXT17fSksa3IuUlRMJiYoUS5WaWV3c1swXS5SVEw9ITApLGtyLmdyaWR8fChRLlZpZXdzWzBdLmdyaWQ9ITEseWVbIiFncmlkbGluZXMiXT0hMSk7YnJlYWs7'@;
put 'Y2FzZSA0ODU6eWVbIiFzaGVldEZvcm1hdCJdPWtyO2JyZWFrO2Nhc2UgNjQ6Y2FzZSAxMDUzOiFmdW5jdGlvbiBKaihTLFIsayxHKXtpZihSKXt2YXIgUT17cmVmOlIuc3FyZngsdDpSLnR9O1Iub3AmJihRLm9wPVIub3ApO3ZhciBvZT0iIixnZT0iIixwZT1SLnNxcmZ4PyJzdHJpbmciPT10'@;
put 'eXBlb2YgUi5zcXJmeD9vbyhSLnNxcmZ4LnNwbGl0KCIsIilbMF0pOlIuc3FyZng6bnVsbDtpZihSLmYxJiYob2U9czAoUi5mMSxwZSxudWxsLGssRywhMCkpLFIuZjImJihnZT1zMChSLmYyLHBlLG51bGwsayxHLCEwKSksUi5vcCYmWyJJTiIsIk9UIl0uaW5kZXhPZihSLm9wKT49LTEpUS5t'@;
put 'aW49b2UsUS5tYXg9Z2U7ZWxzZSBpZihSLm9wKVEudj1vZTtlbHNlIHRyeXtzd2l0Y2goUi50KXtjYXNlIkxpc3QiOmlmKCJQdGdTdHIiPT09Ui5mMVswXVswXVswXSYmMT09Ui5mMVswXS5sZW5ndGgpe1EubD1SLmYxWzBdWzBdWzFdLnNwbGl0KCIsIik7YnJlYWt9Y2FzZSJDdXN0b20iOlEu'@;
put 'Zj1vZX19Y2F0Y2h7fVNbIiF2YWxpZGF0aW9ucyJdfHwoU1siIXZhbGlkYXRpb25zIl09W10pLFNbIiF2YWxpZGF0aW9ucyJdLnB1c2goUSl9fSh5ZSxrcixicixwZSk7YnJlYWs7Y2FzZSAxNTE6eWVbIiFmcmVlemUiXT1rclswXTticmVhaztjYXNlIDE1Mjp5ZVsiIXNlbCJdPWtyO2JyZWFr'@;
put 'O2Nhc2UgMTc1OmNhc2UgNjQ0OmNhc2UgNjI1OmNhc2UgNTYyOmNhc2UgMzk2OmNhc2UgMTExMjpjYXNlIDExNDY6Y2FzZSA0NzE6Y2FzZSAxMDUwOmNhc2UgNjQ5OmNhc2UgMTEwNTpjYXNlIDQ5OmNhc2UgNTg5OmNhc2UgNjA3OmNhc2UgNTY0OmNhc2UgMTA1NTpjYXNlIDE2ODpjYXNlIDE3'@;
put 'NDpjYXNlIDExODA6Y2FzZSA0OTk6Y2FzZSA1MDc6Y2FzZSA1NTA6Y2FzZSAxNzE6Y2FzZSAxNjc6Y2FzZSAxMTc3OmNhc2UgMTY5OmNhc2UgMTE4MTpjYXNlIDU1MTpjYXNlIDU1MjpjYXNlIDY2MTpjYXNlIDYzOTpjYXNlIDQ3ODpjYXNlIDUzNzpjYXNlIDQ3NzpjYXNlIDUzNjpjYXNlIDEx'@;
put 'MDM6Y2FzZSA2ODA6Y2FzZSAxMTA0OmNhc2UgMTAyNDpjYXNlIDY2MzpjYXNlIDUzNTpjYXNlIDY3ODpjYXNlIDUwNDpjYXNlIDEwNDM6Y2FzZSA0Mjg6Y2FzZSAxNzA6Y2FzZSAzMDcyOmNhc2UgNTA6Y2FzZSAyMDcwOmNhc2UgMTA0NTpicmVhaztjYXNlIDM1OmV0PSEwO2JyZWFrO2Nhc2Ug'@;
put 'MzY6ZXQ9ITE7YnJlYWs7Y2FzZSAzNzpZZS5wdXNoKFZuKSxldD0hMDticmVhaztjYXNlIDM4OlllLnBvcCgpLGV0PSExO2JyZWFrO2RlZmF1bHQ6aWYoISgoVm58fCIiKS5pbmRleE9mKCJCZWdpbiIpPjApJiYhKChWbnx8IiIpLmluZGV4T2YoIkVuZCIpPjApJiYoIWV0fHxwZS5XVEYmJiJC'@;
put 'cnRBQ0JlZ2luIiE9WWVbWWUubGVuZ3RoLTFdKSl0aHJvdyBuZXcgRXJyb3IoIlVuZXhwZWN0ZWQgcmVjb3JkICIrQnIrIiAiK1ZuKX19LHBlKSxkZWxldGUgcGUuc3VwYm9va3MsZGVsZXRlIHBlWyIhcm93Il0sIXllWyIhcmVmIl0mJihOZS5zLnI8MmU2fHxQZSYmKFBlLmUucj4wfHxQZS5l'@;
put 'LmM+MHx8UGUucy5yPjB8fFBlLnMuYz4wKSkmJih5ZVsiIXJlZiJdPXJhKFBlfHxOZSkpLHBlLnNoZWV0Um93cyYmeWVbIiFyZWYiXSl7dmFyIGNhPW9vKHllWyIhcmVmIl0pO3BlLnNoZWV0Um93czw9K2NhLmUuciYmKGNhLmUucj1wZS5zaGVldFJvd3MtMSxjYS5lLnI+TmUuZS5yJiYoY2Eu'@;
put 'ZS5yPU5lLmUuciksY2EuZS5yPGNhLnMuciYmKGNhLnMucj1jYS5lLnIpLGNhLmUuYz5OZS5lLmMmJihjYS5lLmM9TmUuZS5jKSxjYS5lLmM8Y2Eucy5jJiYoY2Eucy5jPWNhLmUuYykseWVbIiFmdWxscmVmIl09eWVbIiFyZWYiXSx5ZVsiIXJlZiJdPXJhKGNhKSl9cmV0dXJuIFNuLmxlbmd0'@;
put 'aD4wJiYoeWVbIiFtZXJnZXMiXT1TbiksTWkubGVuZ3RoPjAmJih5ZVsiIWNvbHMiXT1NaSksRmkubGVuZ3RoPjAmJih5ZVsiIXJvd3MiXT1GaSkseWV9KFMsRyxrLFEsb2UsMCxwZSk6ZnVuY3Rpb24gaDgoUyxSLGssRyxRLG9lLGdlKXtpZighUylyZXR1cm4gUztHfHwoRz17IiFpZCI6e319'@;
put 'KSxudWxsIT1sZSYmbnVsbD09Ui5kZW5zZSYmKFIuZGVuc2U9bGUpO3ZhciBwZT1SLmRlbnNlP1tdOnt9LHllPXtzOntyOjJlNixjOjJlNn0sZTp7cjowLGM6MH19LFBlPSIiLE5lPSIiLFllPVMubWF0Y2godkQpO1llPyhQZT1TLnNsaWNlKDAsWWUuaW5kZXgpLE5lPVMuc2xpY2UoWWUuaW5k'@;
put 'ZXgrWWVbMF0ubGVuZ3RoKSk6UGU9TmU9Uzt2YXIgZXQ9TmUubGFzdEluZGV4T2YoImV4dExzdCIpLEV0PSgtMT09ZXR8fE5lLnNsaWNlKGV0KSxQZS5tYXRjaChfRCkpO0V0P2NiKEV0WzBdLDAsUSxrKTooRXQ9UGUubWF0Y2goQ0QpKSYmZnVuY3Rpb24gb2ooUyxSLGssRyxRLG9lLGdlKXtj'@;
put 'YihTLnNsaWNlKDAsUy5pbmRleE9mKCI+IikpLDAsRyxRKTt2YXIgcGU9Ui5tYXRjaChtUyk7aWYocGUpe3ZhciBQZT1nayh2cihwZVswXSksb2UsZ2UpO2tbIiF0YWJjb2xvciJdPVBlfWlmKChwZT1SLm1hdGNoKGlqKSkmJnZyKHBlWzBdKS5maXRUb1BhZ2UmJihrWyIhcHJpbnQiXXx8KGtb'@;
put 'IiFwcmludCJdPXt9KSxrWyIhcHJpbnQiXS5wcm9wc3x8KGtbIiFwcmludCJdLnByb3BzPXt9KSxrWyIhcHJpbnQiXS5wcm9wcy5maXR8fChrWyIhcHJpbnQiXS5wcm9wcy5maXQ9e30pLG51bGw9PWtbIiFwcmludCJdLnByb3BzLmZpdC5oZWlnaHQmJihrWyIhcHJpbnQiXS5wcm9wcy5maXQu'@;
put 'aGVpZ2h0PTEpLG51bGw9PWtbIiFwcmludCJdLnByb3BzLmZpdC53aWR0aCYmKGtbIiFwcmludCJdLnByb3BzLmZpdC53aWR0aD0xKSkscGU9Ui5tYXRjaChhaikpe2tbIiFvdXRsaW5lIl09e307dmFyIFllPXZyKHBlWzBdKTtZZS5zdW1tYXJ5QmVsb3cmJihrWyIhb3V0bGluZSJdLmFib3Zl'@;
put 'PSF0aShZZS5zdW1tYXJ5QmVsb3cpKSxZZS5zdW1tYXJ5UmlnaHQmJihrWyIhb3V0bGluZSJdLmxlZnQ9IXRpKFllLnN1bW1hcnlSaWdodCkpfX0oRXRbMF0sRXRbMV18fCIiLHBlLFEsayxnZSxvZSk7dmFyIGF0PShQZS5tYXRjaCgvPCg/Olx3KjopP2RpbWVuc2lvbi8pfHx7aW5kZXg6LTF9'@;
put 'KS5pbmRleDtpZihhdD4wKXt2YXIgYnQ9UGUuc2xpY2UoYXQsYXQrNTApLm1hdGNoKHNiKTtidCYmKCFSfHwhUi5ub2RpbSkmJmZ1bmN0aW9uIGNTKFMsUil7dmFyIGs9b28oUik7ay5zLnI8PWsuZS5yJiZrLnMuYzw9ay5lLmMmJmsucy5yPj0wJiZrLnMuYz49MCYmKFNbIiFyZWYiXT1yYShr'@;
put 'KSl9KHBlLGJ0WzFdKX12YXIganQ9UGUubWF0Y2goUm8pO2p0JiZqdFsxXSYmZnVuY3Rpb24gQ2ooUyxSLGssRyl7ay5WaWV3c3x8KGsuVmlld3M9W3t9XSk7dmFyIFE9MDtTLnJlcGxhY2UoU1MsZnVuY3Rpb24ob2UsZ2Upe3ZhciBwZT12cihvZSk7aWYoay5WaWV3c1tHXXx8KGsuVmlld3Nb'@;
put 'R109e30pLHRpKHBlLnJpZ2h0VG9MZWZ0KSYmKGsuVmlld3NbR10uUlRMPSEwKSxwZS5zaG93R3JpZExpbmVzJiYoay5WaWV3c1tHXS5ncmlkPXRpKHBlLnNob3dHcmlkTGluZXMpLG51bGw9PVJbIiFncmlkbGluZXMiXSYmKFJbIiFncmlkbGluZXMiXT10aShwZS5zaG93R3JpZExpbmVzKSkp'@;
put 'LCtwZS56b29tU2NhbGUmJihrLlZpZXdzW0ddLnpvb209K3BlLnpvb21TY2FsZSkscGUudmlldyYmKGsuVmlld3NbR10udmlldz1wZS52aWV3KSwxPT0rK1EmJiIvPiIhPW9lLnNsaWNlKC0yKSl7dmFyIHllPVMuc2xpY2UoZ2Urb2UubGVuZ3RoKSxQZT15ZS5tYXRjaCgvPFwvKD86XHc6KT9z'@;
put 'aGVldFZpZXcoPzpbXj5hLXpdW14+XSopP1wvPz4vKTtpZighUGUpcmV0dXJuIiI7dmFyIE5lPSh5ZT15ZS5zbGljZSgwLFBlLmluZGV4KSkubWF0Y2goLzwoPzpcdzopP3BhbmUoPzpbXj5hLXpdW14+XSopP1wvPz4vKTtpZihOZSl7dmFyIFllPXZyKE5lWzBdKTsiZnJvemVuIj09WWUuc3Rh'@;
put 'dGU/UlsiIWZyZWV6ZSJdPVRhKCtZZS54U3BsaXR8fDApK2ppKCtZZS55U3BsaXR8fDApOlllLnRvcExlZnRDZWxsJiYoUlsiIWZyZWV6ZSJdPVllLnRvcExlZnRDZWxsKX12YXIgZXQ9eWUubWF0Y2goLzwoPzpcdzopP3NlbGVjdGlvbig/OltePmEtel1bXj5dKik/XC8/Pi8pO2lmKGV0KXt2'@;
put 'YXIgY3Q9dnIoZXRbMF0pO2lmKGN0LmFjdGl2ZUNlbGwmJihSWyIhc2VsIl09e2NlbGw6Y3QuYWN0aXZlQ2VsbH0pLGN0LnNxcmVmKXt2YXIgRXQ9Y3Quc3FyZWYucmVwbGFjZSgvXHMuKiQvLCIiKTtSWyIhc2VsIl18fChSWyIhc2VsIl09e2NlbGw6cWkoTXMoRXQpLnMpfSksUlsiIXNlbCJd'@;
put 'LnJhbmdlPWN0LnNxcmVmfX19cmV0dXJuIiJ9KX0oanRbMV0scGUsUSxrKTt2YXIga3Q9UGUubWF0Y2goR2UpLE90PVtdO2lmKFIuY2VsbFN0eWxlcyl7dmFyIEt0PVBlLm1hdGNoKHRqKTtLdCYmZnVuY3Rpb24geVMoUyxSLGspe2Zvcih2YXIgRz0hMSxRPTA7USE9Ui5sZW5ndGg7KytRKXt2'@;
put 'YXIgb2U9dnIoUltRXSwhMCk7b2UuaGlkZGVuJiYob2UuaGlkZGVuPXRpKG9lLmhpZGRlbikpO3ZhciBnZT1wYXJzZUludChvZS5taW4sMTApLTEscGU9cGFyc2VJbnQob2UubWF4LDEwKS0xO2ZvcihvZS5vdXRsaW5lTGV2ZWwmJihvZS5sZXZlbD0rb2Uub3V0bGluZUxldmVsfHwwKSxkZWxl'@;
put 'dGUgb2UubWluLGRlbGV0ZSBvZS5tYXgsb2Uud2lkdGg9K29lLndpZHRoLCFHJiZvZS53aWR0aCYmKEc9ITApLFEwKG9lKSxvZS5zdHlsZSYmKG9lLnM9bTgob2Uuc3R5bGUsaykpO2dlPD1wZTspU1tnZSsrXT1xdChvZSl9fShPdCxLdCxnZSl9aWYoWWUmJnY4KFllWzFdLGsscGUsUix5ZSxv'@;
put 'ZSxnZSksUi5jYWxsYmFjaylyZXR1cm4gcGU7dmFyIFRuPU5lLm1hdGNoKHdEKTtUbiYmKHBlWyIhcHJvdGVjdCJdPWZ1bmN0aW9uIGhqKFMpe3ZhciBSPXZyKFMsITAsITApLGs9e307aWYodGkoUi5zaGVldCkpcmV0dXJuIGJTLmZvckVhY2goZnVuY3Rpb24oRyl7a1tHXT1udWxsIT1SW0dd'@;
put 'JiZ0aShSW0ddKX0pLExELmZvckVhY2goZnVuY3Rpb24oRyl7a1tHXT1udWxsPT1SW0ddfHx0aShSW0ddKX0pLFIuYWxnb3JpdGhtTmFtZSYmKGsuZW5jcnlwdGlvbj17YWxnbzpSLmFsZ29yaXRobU5hbWUsaGFzaDpSLmhhc2hWYWx1ZSxzYWx0OlIuc2FsdFZhbHVlLHNwaW46K1Iuc3BpbkNv'@;
put 'dW50fHwxZTV9KSxrfShUblswXSkpO3ZhciBycj1OZS5tYXRjaChuaik7cnImJihwZVsiIWF1dG9maWx0ZXIiXT1mdW5jdGlvbiBnaihTKXtyZXR1cm57cmVmOihTLm1hdGNoKC9yZWY9IihbXiJdKikiLyl8fFtdKVsxXX19KHJyWzBdKSk7dmFyIFNuPVtdLGxyPU5lLm1hdGNoKGQ4KTtpZihs'@;
put 'cilmb3IoYXQ9MDthdCE9bHIubGVuZ3RoOysrYXQpU25bYXRdPW9vKGxyW2F0XS5zbGljZShsclthdF0uaW5kZXhPZignIicpKzEpKTt2YXIgWG49KC0xPT1ldD9OZTpOZS5zbGljZSgwLGV0KSkubWF0Y2goZFMpO1huJiYocGVbIiFjb25kZm10Il09W10uY29uY2F0LmFwcGx5KFtdLFhuLm1h'@;
put 'cChmdW5jdGlvbihWbil7cmV0dXJuIHYyKFZuLFIsb2UsZ2UpfSkpKSxldD4tMSYmKFhuPU5lLnNsaWNlKGV0KS5tYXRjaChkUykpJiYocGVbIiFjb25kZm10Il18fChwZVsiIWNvbmRmbXQiXT1bXSkscGVbIiFjb25kZm10Il09cGVbIiFjb25kZm10Il0uY29uY2F0LmFwcGx5KHBlWyIhY29u'@;
put 'ZGZtdCJdLFhuLm1hcChmdW5jdGlvbihWbil7cmV0dXJuIHYyKFZuLFIsb2UsZ2UsITApfSkpKTt2YXIgQm49KC0xPT1ldD9OZTpOZS5zbGljZSgwLGV0KSkubWF0Y2goZmUpO0JuJiYocGVbIiF2YWxpZGF0aW9ucyJdPXdTKEJuWzBdLFIpKSxldD4tMSYmKEJuPU5lLnNsaWNlKGV0KS5tYXRj'@;
put 'aChmZSkpJiYocGVbIiF2YWxpZGF0aW9ucyJdfHwocGVbIiF2YWxpZGF0aW9ucyJdPVtdKSxwZVsiIXZhbGlkYXRpb25zIl09cGVbIiF2YWxpZGF0aW9ucyJdLmNvbmNhdCh3UyhCblswXSxSLCEwKSkpO3ZhciBmcj1OZS5tYXRjaCh1Uyk7ZnImJmZ1bmN0aW9uIE9EKFMsUixrKXtmb3IodmFy'@;
put 'IEc9QXJyYXkuaXNBcnJheShTKSxRPTA7USE9Ui5sZW5ndGg7KytRKXt2YXIgb2U9dnIoZ28oUltRXSksITApO2lmKCFvZS5yZWYpcmV0dXJuO3ZhciBnZT0oKGt8fHt9KVsiIWlkIl18fFtdKVtvZS5pZF07Z2U/KG9lLlRhcmdldD1nZS5UYXJnZXQsb2UubG9jYXRpb24mJihvZS5UYXJnZXQr'@;
put 'PSIjIitRcihvZS5sb2NhdGlvbikpKToob2UuVGFyZ2V0PSIjIitRcihvZS5sb2NhdGlvbiksZ2U9e1RhcmdldDpvZS5UYXJnZXQsVGFyZ2V0TW9kZToiSW50ZXJuYWwifSksb2UuUmVsPWdlLG9lLnRvb2x0aXAmJihvZS5Ub29sdGlwPW9lLnRvb2x0aXAsZGVsZXRlIG9lLnRvb2x0aXApO2Zv'@;
put 'cih2YXIgcGU9b28ob2UucmVmKSx5ZT1wZS5zLnI7eWU8PXBlLmUucjsrK3llKWZvcih2YXIgUGU9cGUucy5jO1BlPD1wZS5lLmM7KytQZSl7dmFyIE5lPXFpKHtjOlBlLHI6eWV9KTtHPyhTW3llXXx8KFNbeWVdPVtdKSxTW3llXVtQZV18fChTW3llXVtQZV09e3Q6InoiLHY6dm9pZCAwfSks'@;
put 'U1t5ZV1bUGVdLmw9b2UpOihTW05lXXx8KFNbTmVdPXt0OiJ6Iix2OnZvaWQgMH0pLFNbTmVdLmw9b2UpfX19KHBlLGZyLEcpO3ZhciBicj1OZS5tYXRjaChoUyk7YnImJmZ1bmN0aW9uIHNqKFMsUil7dmFyIGs9dnIoUywhMSwhMCk7UlsiIXByaW50Il18fChSWyIhcHJpbnQiXT17fSksUlsi'@;
put 'IXByaW50Il0ucHJvcHN8fChSWyIhcHJpbnQiXS5wcm9wcz17fSk7dmFyIEc9UlsiIXByaW50Il0ucHJvcHM7ay5ncmlkTGluZXMmJihHLmdyaWRsaW5lcz10aShrLmdyaWRMaW5lcykpLG51bGwhPWsuaG9yaXpvbnRhbENlbnRlcmVkJiYoRy5jZW50ZXJYPXRpKGsuaG9yaXpvbnRhbENlbnRl'@;
put 'cmVkKSksbnVsbCE9ay52ZXJ0aWNhbENlbnRlcmVkJiYoRy5jZW50ZXJZPXRpKGsudmVydGljYWxDZW50ZXJlZCkpfShiclswXSxwZSk7dmFyIGVyPU5lLm1hdGNoKHlEKTtlciYmKChwZVsiIXByaW50Il18fChwZVsiIXByaW50Il09e30pKS5tYXJnaW5zPXBlWyIhbWFyZ2lucyJdPVBEKHZy'@;
put 'KGVyWzBdKSkpO3ZhciBNaT1OZS5tYXRjaChNRCk7TWkmJmZ1bmN0aW9uIElEKFMsUil7dmFyIGs9dnIoUywhMSwhMCk7ZGVsZXRlIGsuaWQsZGVsZXRlIGtbMF0sUlsiIXByaW50Il18fChSWyIhcHJpbnQiXT17fSksUlsiIXByaW50Il0ucHJvcHN8fChSWyIhcHJpbnQiXS5wcm9wcz17fSk7'@;
put 'dmFyIEc9UlsiIXByaW50Il0ucHJvcHM7ay5vcmllbnRhdGlvbiYmKEcub3JpZW50YXRpb249ay5vcmllbnRhdGlvbiksay5zY2FsZSYmKEcuc2NhbGU9K2suc2NhbGUpLCtrLmZpdFRvSGVpZ2h0Pj0wJiYoKEcuZml0fHwoRy5maXQ9e30pKS5oZWlnaHQ9K2suZml0VG9IZWlnaHQpLCtrLmZp'@;
put 'dFRvV2lkdGg+PTAmJigoRy5maXR8fChHLmZpdD17fSkpLndpZHRoPStrLmZpdFRvV2lkdGgpLGsucGFwZXJIZWlnaHQmJmsucGFwZXJXaWR0aD9HLnBhcGVyPXt3aWR0aDprLnBhcGVyV2lkdGgsaGVpZ2h0OmsucGFwZXJIZWlnaHR9OmsucGFwZXJTaXplJiYoRy5wYXBlcj1uOFtHLnBhcGVy'@;
put 'PStrLnBhcGVyU2l6ZV18fEcucGFwZXIpLGsuaG9yaXpvbnRhbERwaT9HLmRwaT0ray5ob3Jpem9udGFsRHBpOmsudmVydGljYWxEcGkmJihHLmRwaT0ray52ZXJ0aWNhbERwaSksImF1dG9tYXRpYyIhPShrLmZpcnN0UGFnZU51bWJlcnx8ImF1dG9tYXRpYyIpJiYoRy5maXJzdD0ray5maXJz'@;
put 'dFBhZ2VOdW1iZXIpLHRpKGsuYmxhY2tBbmRXaGl0ZSkmJihHLmJ3PSEwKSx0aShrLmRyYWZ0KSYmKEcuZHJhZnQ9ITApLCJvdmVyVGhlbkRvd24iPT1rLnBhZ2VPcmRlciYmKEcub3JkZXI9Im92ZXIiKSxBRFtrLmNlbGxDb21tZW50c10mJihHLmNvbW1lbnRzPUFEW2suY2VsbENvbW1lbnRz'@;
put 'XSksRERbay5lcnJvcnNdJiYoRy5lcnJvcnM9RERbay5lcnJvcnNdKX0oTWlbMF0scGUpO3ZhciBGaT1OZS5tYXRjaChqNSk7RmkmJmZ1bmN0aW9uIHZqKFMsUil7aWYoUlsiIXByaW50Il18fChSWyIhcHJpbnQiXT17fSksU1sxXSl7dmFyIGs9IiIsRz0wO1NbMV0ucmVwbGFjZShlbixmdW5j'@;
put 'dGlvbihRLG9lKXtpZigiLyIhPVEuY2hhckF0KDEpKWs9US5zbGljZSgxLC0xKSxHPW9lK1EubGVuZ3RoO2Vsc2UgaWYoayl7dmFyIGdlPWsubWF0Y2goL0hlYWRlci8pPyJoZWFkZXIiOiJmb290ZXIiLHBlPWsucmVwbGFjZSgvSGVhZGVyfEZvb3Rlci8sIiIpO2s9IiIsUlsiIXByaW50Il1b'@;
put 'Z2VdfHwoUlsiIXByaW50Il1bZ2VdPXt9KSxSWyIhcHJpbnQiXVtnZV1bcGVdPVFyKGdvKFNbMV0uc2xpY2UoRyxvZSkpKX19KX19KEZpLHBlKTt2YXIgbmE9TmUubWF0Y2gocmopO25hJiYoKHBlWyIhcHJpbnQiXXx8KHBlWyIhcHJpbnQiXT17fSkpLnJvd0JyZWFrcz1wZVsiIXJvd0JyZWFr'@;
put 'cyJdPWZ1bmN0aW9uIGNqKFMpe3ZhciBSPVtdO3JldHVybihTLm1hdGNoKEYwKXx8W10pLmZvckVhY2goZnVuY3Rpb24oayl7dmFyIEc9dnIoayk7Ui5wdXNoKHtSOitHLmlkfSl9KSxSfShuYVswXSkpO3ZhciBjYT1OZS5tYXRjaChsYik7Y2EmJigocGVbIiFwcmludCJdfHwocGVbIiFwcmlu'@;
put 'dCJdPXt9KSkuY29sQnJlYWtzPXBlWyIhY29sQnJlYWtzIl09ZnVuY3Rpb24ga25lKFMpe3ZhciBSPVtdO3JldHVybihTLm1hdGNoKEYwKXx8W10pLmZvckVhY2goZnVuY3Rpb24oayl7dmFyIEc9dnIoayk7Ui5wdXNoKHtDOitHLmlkfSl9KSxSfShjYVswXSkpO3ZhciBMaT1bXTtpZigoTGk9'@;
put 'TmUubWF0Y2goL2RyYXdpbmcgcjppZD0iKC4qPykiLykpJiYocGVbIiFyZWwiXT1MaVsxXSksKExpPU5lLm1hdGNoKC9sZWdhY3lEcmF3aW5nIHI6aWQ9IiguKj8pIi8pKSYmKHBlWyIhbGVncmVsIl09TGlbMV0pLChMaT1OZS5tYXRjaChiRCkpJiYocGVbIiFjdHJsaWQiXT1MaS5tYXAoZnVu'@;
put 'Y3Rpb24oVm4pe3JldHVybiB2cihWbil9KSksKExpPU5lLm1hdGNoKFNEKSkmJmZ1bmN0aW9uIHBTKFMsUil7U1siIXRhYmxlcmVmcyJdfHwoU1siIXRhYmxlcmVmcyJdPVtdKSwoUi5tYXRjaChmUyl8fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKGspe1NbIiF0YWJsZXJlZnMiXS5wdXNoKHZyKGsp'@;
put 'LmlkKX0pfShwZSxMaVsxXSksUiYmUi5ub2RpbSYmKHllLnMuYz15ZS5zLnI9MCksIXBlWyIhcmVmIl0mJnllLmUuYz49eWUucy5jJiZ5ZS5lLnI+PXllLnMuciYmKHBlWyIhcmVmIl09cmEoeWUpKSxSLnNoZWV0Um93cz4wJiZwZVsiIXJlZiJdKXt2YXIga3I9b28ocGVbIiFyZWYiXSk7Ui5z'@;
put 'aGVldFJvd3M8PStrci5lLnImJihrci5lLnI9Ui5zaGVldFJvd3MtMSxrci5lLnI+eWUuZS5yJiYoa3IuZS5yPXllLmUuciksa3IuZS5yPGtyLnMuciYmKGtyLnMucj1rci5lLnIpLGtyLmUuYz55ZS5lLmMmJihrci5lLmM9eWUuZS5jKSxrci5lLmM8a3Iucy5jJiYoa3Iucy5jPWtyLmUuYyks'@;
put 'cGVbIiFmdWxscmVmIl09cGVbIiFyZWYiXSxwZVsiIXJlZiJdPXJhKGtyKSl9cmV0dXJuIGt0JiYocGVbIiFzaGVldEZvcm1hdCJdPWZ1bmN0aW9uIHhEKFMpe3ZhciBSPXt9LGs9e30sRz0hMSxRPXt9LG9lPSExO3JldHVybiBTLmRlZmF1bHRSb3dIZWlnaHQmJihHPSEwLGsuaHB0PXBhcnNl'@;
put 'RmxvYXQoUy5kZWZhdWx0Um93SGVpZ2h0KSksUy56ZXJvSGVpZ2h0JiYoRz0hMCxrLmhpZGRlbj10aShTLnplcm9IZWlnaHQpKSxTLmJhc2VDb2xXaWR0aD8ob2U9ITAsUS53Y2g9cGFyc2VGbG9hdChTLmJhc2VDb2xXaWR0aCkpOlMuZGVmYXVsdENvbFdpZHRoJiYob2U9ITAsUS53Y2g9cGFy'@;
put 'c2VGbG9hdChTLmRlZmF1bHRDb2xXaWR0aCktNS9UYyksUy5vdXRsaW5lTGV2ZWxDb2wmJihSLmNvbG91dGxpbmU9cGFyc2VJbnQoUy5vdXRsaW5lTGV2ZWxDb2wpKSxTLm91dGxpbmVMZXZlbFJvdyYmKFIucm93b3V0bGluZT1wYXJzZUludChTLm91dGxpbmVMZXZlbFJvdykpLFMudGhpY2tC'@;
put 'b3R0b20mJihSLmJvdHRoaWNrPXRpKFMudGhpY2tCb3R0b20pKSxTLnRoaWNrVG9wJiYoUi50b3B0aGljaz10aShTLnRoaWNrVG9wKSksUy5keURlc2NlbnQmJihSLmR5RGVzY2VudD1wYXJzZUZsb2F0KFMuZHlEZXNjZW50KSksRyYmKGp2KGspLFIucm93PWspLG9lJiYoUTAoUSksUi5jb2w9'@;
put 'USksUn0odnIoa3RbMF0pKSksT3QubGVuZ3RoPjAmJihwZVsiIWNvbHMiXT1PdCksU24ubGVuZ3RoPjAmJihwZVsiIW1lcmdlcyJdPVNuKSxHWyIhaWQiXVtwZVsiIXJlbCJdXSYmKHBlWyIhZHJhd2VsIl09R1siIWlkIl1bcGVbIiFyZWwiXV0pLEdbIiFpZCJdW3BlWyIhbGVncmVsIl1dJiYo'@;
put 'cGVbIiFsZWdkcmF3ZWwiXT1HWyIhaWQiXVtwZVsiIWxlZ3JlbCJdXSksKHBlWyIhY3RybGlkIl18fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKFZuKXtWbi5yZWw9R1siIWlkIl1bVm4uaWRdfSksbnVsbD09cGVbIiFncmlkbGluZXMiXSYmKHBlWyIhZ3JpZGxpbmVzIl09ITApLHBlfShTLEcsayxR'@;
put 'LG9lLGdlLHBlKX0oZXQsUixRLHllLG9lW0ddLFBlLE5lLFllKTticmVhaztjYXNlImNoYXJ0IjpjdD1mdW5jdGlvbiB5eihTLFIsayxHLFEsb2UsZ2UscGUpe3JldHVybiIuYmluIj09PVIuc2xpY2UoLTQpP2Z1bmN0aW9uIGh6KFMsUixrLEcsUSl7aWYoIVMpcmV0dXJuIFM7R3x8KEc9eyIh'@;
put 'aWQiOnt9fSk7dmFyIG9lPXsiIXR5cGUiOiJjaGFydCIsIiFkcmF3ZWwiOm51bGwsIiFyZWwiOiIifSxnZT1bXSxwZT0hMTtyZXR1cm4gdXIoUyxmdW5jdGlvbihQZSxOZSxZZSl7c3dpdGNoKFllKXtjYXNlIDU1MDpvZVsiIXJlbCJdPVBlO2JyZWFrO2Nhc2UgNjUxOlEuU2hlZXRzW2tdfHwo'@;
put 'US5TaGVldHNba109e30pLFBlLm5hbWUmJihRLlNoZWV0c1trXS5Db2RlTmFtZT1QZS5uYW1lKTticmVhaztjYXNlIDU2MjpjYXNlIDY1MjpjYXNlIDY2OTpjYXNlIDY3OTpjYXNlIDU1MTpjYXNlIDU1MjpjYXNlIDQ3NjpjYXNlIDMwNzI6YnJlYWs7Y2FzZSAzNTpwZT0hMDticmVhaztjYXNl'@;
put 'IDM2OnBlPSExO2JyZWFrO2Nhc2UgMzc6Z2UucHVzaChOZSk7YnJlYWs7Y2FzZSAzODpnZS5wb3AoKTticmVhaztkZWZhdWx0OmlmKChOZXx8IiIpLmluZGV4T2YoIkJlZ2luIik+MClnZS5wdXNoKE5lKTtlbHNlIGlmKChOZXx8IiIpLmluZGV4T2YoIkVuZCIpPjApZ2UucG9wKCk7ZWxzZSBp'@;
put 'ZighcGV8fFIuV1RGKXRocm93IG5ldyBFcnJvcigiVW5leHBlY3RlZCByZWNvcmQgIitZZSsiICIrTmUpfX0sUiksR1siIWlkIl1bb2VbIiFyZWwiXV0mJihvZVsiIWRyYXdlbCJdPUdbIiFpZCJdW29lWyIhcmVsIl1dKSxvZX0oUyxHLGssUSxvZSk6ZnVuY3Rpb24gdXooUyxSLGssRyxRKXtp'@;
put 'ZighUylyZXR1cm4gUztHfHwoRz17IiFpZCI6e319KTt2YXIgZ2Usb2U9eyIhdHlwZSI6ImNoYXJ0IiwiIWRyYXdlbCI6bnVsbCwiIXJlbCI6IiJ9LHBlPVMubWF0Y2goX0QpO3BlJiZjYihwZVswXSwwLFEsayk7dmFyIHllPVMubWF0Y2goeUQpO3JldHVybiB5ZSYmKG9lWyIhbWFyZ2lucyJd'@;
put 'PVBEKHZyKHllWzBdKSkpLChnZT1TLm1hdGNoKC9kcmF3aW5nIHI6aWQ9IiguKj8pIi8pKSYmKG9lWyIhcmVsIl09Z2VbMV0pLEdbIiFpZCJdW29lWyIhcmVsIl1dJiYob2VbIiFkcmF3ZWwiXT1HWyIhaWQiXVtvZVsiIXJlbCJdXSksb2V9KFMsMCxrLFEsb2UpfShldCxSLFEseWUsb2VbR10s'@;
put 'UGUpO2JyZWFrO2Nhc2UibWFjcm8iOmN0PWZ1bmN0aW9uIF96KFMsUixrLEcsUSxvZSxnZSxwZSl7cmV0dXJuIFIuc2xpY2UoLTQpLHsiIXR5cGUiOiJtYWNybyJ9fSgwLFIpO2JyZWFrO2Nhc2UiZGlhbG9nIjpjdD1mdW5jdGlvbiB3eihTLFIsayxHLFEsb2UsZ2UscGUpe3JldHVybiBSLnNs'@;
put 'aWNlKC00KSx7IiF0eXBlIjoiZGlhbG9nIn19KDAsUik7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlVucmVjb2duaXplZCBzaGVldCB0eXBlICIrcGUpfWlmKHllLmNhbGxiYWNrKXJldHVybjtnZVtHXT1jdCxmdW5jdGlvbiBKeihTLFIsayxHLFEsb2UsZ2UscGUpe2lmKFMmJlNb'@;
put 'IiFkcmF3ZWwiXSl7dmFyIHllPWZuKFNbIiFkcmF3ZWwiXS5UYXJnZXQsRyksUGU9VnIoeWUpLE5lPWZ1bmN0aW9uIExDKFMsUixrLEcsUSl7dmFyIG9lPXtjaGFydHM6W10saW1hZ2VzOltdLHNoYXBlczpbXX07aWYoIVMpcmV0dXJuIG9lO3ZhciBnZT1RfHx7fTtyZXR1cm4oUy5tYXRjaCgv'@;
put 'PFtePF0qPyhhYnNvbHV0ZUFuY2hvcnxvbmVDZWxsQW5jaG9yfHR3b0NlbGxBbmNob3IpLio/KGFic29sdXRlQW5jaG9yfG9uZUNlbGxBbmNob3J8dHdvQ2VsbEFuY2hvcikuKj8+L2cpfHxbXSkuZm9yRWFjaChmdW5jdGlvbihwZSl7dmFyIHllPSIiLFBlPXt0eXBlOiIifSxOZT17fSxZZT0h'@;
put 'MCxldD0hMSxjdD0hMSxFdD0hMSxhdD17czp7fX0sYnQ9LTEsanQ9W10sa3Q9W10sT3Q9e3M6e2FsaWdubWVudDp7aG9yaXpvbnRhbDoiY2VudGVyIix2ZXJ0aWNhbDoiY2VudGVyIn19fSxLdD0iIixUbj0tMSxTbj17fTtwZS5yZXBsYWNlKGVuLGZ1bmN0aW9uKGxyLFhuKXtqdD1udWxsO3Zh'@;
put 'ciBCbj12cihsciksZnI9V24oQm5bMF0pLnJlcGxhY2UoL1tcL10/PiQvLCIiKTtzd2l0Y2goZnIpe2Nhc2UiPGNsaWVudERhdGEiOmJyZWFrO2Nhc2UiPGFic29sdXRlQW5jaG9yIjpjYXNlIjxvbmVDZWxsQW5jaG9yIjpjYXNlIjx0d29DZWxsQW5jaG9yIjpQZS50eXBlPVduKEJuWzBdKS5y'@;
put 'ZXBsYWNlKC9bPD5dL2csIiIpO2JyZWFrO2Nhc2UiPC9hYnNvbHV0ZUFuY2hvciI6Y2FzZSI8L29uZUNlbGxBbmNob3IiOmNhc2UiPC90d29DZWxsQW5jaG9yIjpicmVhaztjYXNlIjxwb3MiOlBlLnBvcz17eDorQm4ueCx5OitCbi55fTticmVhaztjYXNlIjxleHQiOlllJiYoUGUuZXh0PXt4'@;
put 'OitCbi5jeCx5OitCbi5jeX0pO2JyZWFrO2Nhc2UiPGZyb20iOmNhc2UiPHRvIjpOZT17fTticmVhaztjYXNlIjwvZnJvbSI6WWUmJihQZS5mcm9tPU5lKTticmVhaztjYXNlIjwvdG8iOlllJiYoUGUudG89TmUpO2JyZWFrO2Nhc2UiPGNvbCI6Y2FzZSI8Y29sT2ZmIjpjYXNlIjxyb3ciOmNh'@;
put 'c2UiPHJvd09mZiI6YnQ9WG4rbHIubGVuZ3RoO2JyZWFrO2Nhc2UiPC9jb2wiOk5lLmM9K3BlLnNsaWNlKGJ0LFhuKTticmVhaztjYXNlIjwvY29sT2ZmIjpOZS5jT2ZmPStwZS5zbGljZShidCxYbik7YnJlYWs7Y2FzZSI8L3JvdyI6TmUucj0rcGUuc2xpY2UoYnQsWG4pO2JyZWFrO2Nhc2Ui'@;
put 'PC9yb3dPZmYiOk5lLnJPZmY9K3BlLnNsaWNlKGJ0LFhuKTticmVhaztjYXNlIjxzcCI6eWU9InNoYXBlIixPdC5BbmNob3I9UGUsb2Uuc2hhcGVzLnB1c2goT3QpLFllPSExO2JyZWFrO2Nhc2UiPC9zcCI6WWU9ITA7YnJlYWs7Y2FzZSI8Z3JhcGhpY0ZyYW1lIjp5ZT0iZ3JhcGhpYyIsWWU9'@;
put 'ITE7YnJlYWs7Y2FzZSI8L2dyYXBoaWNGcmFtZSI6WWU9ITA7YnJlYWs7Y2FzZSI8cGljIjp5ZT0icGljdHVyZSIsWWU9ITE7YnJlYWs7Y2FzZSI8L3BpYyI6WWU9ITA7YnJlYWs7Y2FzZSI8Z3JwU3AiOnllPSJncm91cHNoYXBlIixZZT0hMTticmVhaztjYXNlIjwvZ3JwU3AiOlllPSEwO2Jy'@;
put 'ZWFrO2Nhc2UiPGdyYXBoaWMiOmNhc2UiPC9ncmFwaGljIjpjYXNlIjx4ZnJtIjpjYXNlIjwveGZybSI6Y2FzZSI8b2ZmIjpicmVhaztjYXNlIjxncmFwaGljRGF0YSI6ZXQ9ITA7YnJlYWs7Y2FzZSI8L2dyYXBoaWNEYXRhIjpldD0hMTticmVhaztjYXNlIjxibGlwRmlsbCI6ZXQ9ITA7YnJl'@;
put 'YWs7Y2FzZSI8L2JsaXBGaWxsIjpldD0hMTticmVhaztjYXNlIjwvYmxpcCI6YnJlYWs7Y2FzZSI8c3JjUmVjdCI6ZXQ9ITA7YnJlYWs7Y2FzZSI8L3NyY1JlY3QiOmV0PSExO2JyZWFrO2Nhc2UiPG5vRmlsbCI6aWYoY3QpYnJlYWs7IjxzcFByIj09a3Quc2xpY2UoLTEpWzBdJiYoT3Qucy5m'@;
put 'Z0NvbG9yPW51bGwpO2JyZWFrO2Nhc2UiPC9zb2xpZEZpbGwiOmlmKGN0fHxFdClicmVhazsiPHNwUHIiPT1rdC5zbGljZSgtMilbMF0/T3Qucy5mZ0NvbG9yPVNuOiI8clByIj09a3Quc2xpY2UoLTIpWzBdJiZrdC5pbmRleE9mKCI8dHhCb2R5Iik+LTEmJihhdC5zLmNvbG9yPVNuKSxTbj17'@;
put 'fSxFdD0hMTticmVhaztjYXNlIjxwcnN0R2VvbSI6InNoYXBlIj09eWUmJihPdFsiIXNoYXBlIl09Qm4ucHJzdCk7YnJlYWs7Y2FzZSI8L3Byc3RHZW9tIjpjYXNlIjxhdkxzdCI6YnJlYWs7Y2FzZSI8dHhCb2R5IjpldD0hMCxPdC5SPVtdO2JyZWFrO2Nhc2UiPC90eEJvZHkiOmV0PSExO2Jy'@;
put 'ZWFrO2Nhc2UiPGJvZHlQciI6T3Qucy5hbGlnbm1lbnQudmVydGljYWw9cEJbQm4uYW5jaG9yfHwidCJdfHwidG9wIjticmVhaztjYXNlIjxsc3RTdHlsZSI6YnJlYWs7Y2FzZSI8dCI6VG49WG4rbHIubGVuZ3RoO2JyZWFrO2Nhc2UiPGJyIjpjYXNlIjxici8+IjpLdCs9IlxuIjticmVhaztj'@;
put 'YXNlIjwvdCI6S3QrPXBlLnNsaWNlKFRuLFhuKTticmVhaztjYXNlIjxwUHIiOk90LnMuYWxpZ25tZW50Lmhvcml6b250YWx8fChPdC5zLmFsaWdubWVudC5ob3Jpem9udGFsPVA1W0JuLmFsZ258fCJsIl18fCJsZWZ0Iiksa3QuaW5kZXhPZigiPHR4Qm9keSIpPi0xJiYoYXQucy5hbGlnbm1l'@;
put 'bnQuaG9yaXpvbnRhbD1QNVtCbi5hbGdufHwibCJdfHwibGVmdCIpO2JyZWFrO2Nhc2UiPHJQciI6Qm4uc3omJmt0LmluZGV4T2YoIjx0eEJvZHkiKT4tMSYmKE90LnMuc3o9YXQucy5zej0rQm4uc3ovMTAwKTticmVhaztjYXNlIjxwIjpLdD0iIixhdD17dDoicyIsdjoiIixzOnthbGlnbm1l'@;
put 'bnQ6e319fTticmVhaztjYXNlIjwvcCI6InNoYXBlIj09eWUmJmt0LmluZGV4T2YoIjx0eEJvZHkiKT4tMSYmKE90LnY9KE90LnZ8fCIiKStLdCxhdC52PUt0LE90LlIucHVzaChhdCkpO2JyZWFrO2Nhc2UiPGxhdGluIjpCbi50eXBlZmFjZSYma3QuaW5kZXhPZigiPHR4Qm9keSIpPi0xJiYo'@;
put 'YXQucy5uYW1lPUJuLnR5cGVmYWNlKTticmVhaztjYXNlIjxzdHlsZSI6ZXQ9ITAsY3Q9ITA7YnJlYWs7Y2FzZSI8L3N0eWxlIjpldD0hMSxjdD0hMTticmVhaztjYXNlIjxsblJlZiI6Y2FzZSI8ZmlsbFJlZiI6Y2FzZSI8ZWZmZWN0UmVmIjpjYXNlIjxmb250UmVmIjpicmVhaztjYXNlIjwv'@;
put 'ZmlsbFJlZiI6IWN0JiYic2hhcGUiPT15ZSYmKE90LnMuZmdDb2xvcj1TbiksU249e307YnJlYWs7Y2FzZSI8L2ZvbnRSZWYiOiFjdCYmInNoYXBlIj09eWUmJihPdC5zLmNvbG9yPVNuKSxTbj17fTticmVhaztjYXNlIjxzY2hlbWVDbHIiOnZhciBicj17YmcxOiJsdDEiLGJnMjoibHQyIix0'@;
put 'eDE6ImRrMSIsdHgyOiJkazIifVtCbi52YWxdfHxCbi52YWwsZXI9KChHLnRoZW1lRWxlbWVudHN8fHt9KS5jbHJTY2hlbWV8fFtdKS5maW5kKGZ1bmN0aW9uKEZpKXtyZXR1cm4gRmkubmFtZT09YnJ9KTtlcj9Tbi5yZ2I9ZXIucmdiOkV0PSEwO2JyZWFrO2Nhc2UiPHNjcmdiQ2xyIjpFdD0h'@;
put 'MDticmVhaztjYXNlIjxzcmdiQ2xyIjpTbi5yZ2I9Qm4udmFsLnNsaWNlKC02KTticmVhaztjYXNlIjxoc2xDbHIiOmNhc2UiPHN5c0NsciI6Y2FzZSI8cHJzdENsciI6RXQ9ITA7YnJlYWs7Y2FzZSI8Y2hhcnQiOmp0PW9lLmNoYXJ0czt2YXIgTWk9Qm4uaWQ7Y2FzZSI8YmxpcCI6anR8fChq'@;
put 'dD1vZS5pbWFnZXMsTWk9Qm4uZW1iZWQpLGp0LnB1c2goe0FuY2hvcjpQZSxUYXJnZXQ6KFJbIiFpZCJdW01pXXx8e30pLlRhcmdldH0pLEJuLmxpbmsmJihqdFtqdC5sZW5ndGgtMV0uTGluaz0oUlsiIWlkIl1bQm4ubGlua118fHt9KS5UYXJnZXQpO2JyZWFrO2Nhc2UiPGdycFNwUHIiOmV0'@;
put 'PSEwO2JyZWFrO2Nhc2UiPC9ncnBTcFByIjpldD0hMTticmVhaztjYXNlIjxudkdycFNwUHIiOmV0PSEwO2JyZWFrO2Nhc2UiPC9udkdycFNwUHIiOmV0PSExO2JyZWFrO2Nhc2UiPHNwUHIiOmV0PSEwO2JyZWFrO2Nhc2UiPC9zcFByIjpldD0hMTticmVhaztjYXNlIjxzdHJldGNoIjpjYXNl'@;
put 'Ijwvc3RyZXRjaCI6Y2FzZSI8ZmlsbFJlY3QiOmNhc2UiPG52R3JhcGhpY0ZyYW1lUHIiOmNhc2UiPC9udkdyYXBoaWNGcmFtZVByIjpjYXNlIjxjTnZHcmFwaGljRnJhbWVQciI6Y2FzZSI8L2NOdkdyYXBoaWNGcmFtZVByIjpjYXNlIjxncmFwaGljRnJhbWVMb2NrcyI6Y2FzZSI8bnZQaWNQ'@;
put 'ciI6Y2FzZSI8L252UGljUHIiOmNhc2UiPGNOdlBpY1ByIjpjYXNlIjwvY052UGljUHIiOmNhc2UiPHBpY0xvY2tzIjpjYXNlIjxjTnZHcnBTcFByIjpjYXNlIjwvY052R3JwU3BQciI6Y2FzZSI8Z3JwU3BMb2NrcyI6Y2FzZSI8bnZTcFByIjpjYXNlIjwvbnZTcFByIjpjYXNlIjxjTnZTcFBy'@;
put 'IjpjYXNlIjwvY052U3BQciI6Y2FzZSI8c3BMb2NrcyI6YnJlYWs7Y2FzZSI8Y052UHIiOmV0PSEwO2JyZWFrO2Nhc2UiPC9jTnZQciI6ZXQ9ITE7YnJlYWs7Y2FzZSI8Y3huU3AiOmV0PSEwO2JyZWFrO2Nhc2UiPC9jeG5TcCI6ZXQ9ITE7YnJlYWs7Y2FzZSI8Y052Q3huU3BQciI6ZXQ9ITA7'@;
put 'YnJlYWs7Y2FzZSI8L2NOdkN4blNwUHIiOmV0PSExO2JyZWFrO2Nhc2UiPG52Q3huU3BQciI6Y2FzZSI8L252Q3huU3BQciI6YnJlYWs7Y2FzZSI8ZXh0THN0IjpldD0hMCxjdD0hMDticmVhaztjYXNlIjwvZXh0THN0IjpldD0hMSxjdD0hMTticmVhaztjYXNlIjwvZXh0IjpicmVhaztkZWZh'@;
put 'dWx0OmlmKGdlJiZnZS5XVEYmJiFldCl0aHJvdyBuZXcgRXJyb3IoInVucmVjb2duaXplZCAiK0JuWzBdKyIgaW4gZHJhd2luZyIpfXJldHVybiI8LyI9PWZyLnNsaWNlKDAsMik/a3QucG9wKCk6Ii8+IiE9bHIuc2xpY2UobHIubGVuZ3RoLTIpJiZrdC5wdXNoKGZyKSwiIn0pfSksb2V9KG5y'@;
put 'KGsseWUsITApLGJmKG5yKGssUGUsITApLHllKSwwLHBlLFEpO2lmKE5lKXtpZihOZS5jaGFydHMpZm9yKHZhciBZZT0wO1llPE5lLmNoYXJ0cy5sZW5ndGg7KytZZSl7dmFyIGV0PU5lLmNoYXJ0c1tZZV0sY3Q9Zm4oZXQuVGFyZ2V0LHllKSxFdD1WcihjdCksYXQ9ImNoYXJ0Ij09UiYmMD09'@;
put 'WWUsYnQ9YjIobnIoayxjdCwhMCksMCwwLGJmKG5yKGssRXQsITApLGN0KSwwLGF0P1M6bnVsbCxldCxhdD9udWxsOlMpO2F0fHwoU1siIWNoYXJ0cyJdfHwoU1siIWNoYXJ0cyJdPVtdKSxTWyIhY2hhcnRzIl0ucHVzaChidCkpfWlmKFEuYm9va0ltYWdlcyYmTmUuaW1hZ2VzKWZvcih2YXIg'@;
put 'anQ9MDtqdDxOZS5pbWFnZXMubGVuZ3RoOysranQpe3ZhciBrdD1OZS5pbWFnZXNbanRdLE90PXsiIXR5cGUiOiJpbWFnZSIsIiFwb3MiOkZrKGt0LkFuY2hvciksIiFwb3NUeXBlIjprdC5BbmNob3IudHlwZS5yZXBsYWNlKC9BbmNob3IvLCIiKSwiIWFic3BvcyI6TDUoa3QuQW5jaG9yLFMp'@;
put 'LCIhcmVscG9zIjpBQyhrdC5BbmNob3IsUyl9O2lmKGt0LlRhcmdldCYmKE90WyIhcGF0aCJdPWZuKGt0LlRhcmdldCx5ZSksT3RbIiFkYXRhIl09VHQoayxPdFsiIXBhdGgiXSksT3RbIiFkYXRhdHlwZSJdPSJzdHJpbmciPT10eXBlb2YgT3RbIiFkYXRhIl0/ImJpbmFyeSI6ImJ1ZmZlciIp'@;
put 'LGt0LkxpbmsmJihPdFsiIWRhdGF0eXBlIl18fChPdFsiIWRhdGF0eXBlIl09InJlbW90ZSIpLE90WyIhbGluayJdPWt0LkxpbmspLCFPdFsiIWRhdGF0eXBlIl0pdGhyb3ciSW1hZ2UgZGF0YSBjYW5ub3QgYmUgZm91bmQiO1NbIiFpbWFnZXMiXXx8KFNbIiFpbWFnZXMiXT1bXSksU1siIWlt'@;
put 'YWdlcyJdLnB1c2goT3QpfXZhciBLdCxUbjtpZihOZS5zaGFwZXMpZm9yKHZhciBTbj0wO1NuPE5lLnNoYXBlcy5sZW5ndGg7KytTbilUbj17IiF0eXBlIjoic2hhcGUiLCIhcG9zIjpMNSgoS3Q9TmUuc2hhcGVzW1NuXSkuQW5jaG9yLFMpLCIhcG9zVHlwZSI6S3QuQW5jaG9yLnR5cGUucmVw'@;
put 'bGFjZSgvQW5jaG9yLywiIiksIiFhYnNwb3MiOkw1KEt0LkFuY2hvcixTKSwiIXJlbHBvcyI6QUMoS3QuQW5jaG9yLFMpfSxbInYiLCIhc2hhcGUiLCJzIiwiUiJdLmZvckVhY2gocnIpLFNbIiFzaGFwZXMiXXx8KFNbIiFzaGFwZXMiXT1bXSksU1siIXNoYXBlcyJdLnB1c2goVG4pfX1mdW5j'@;
put 'dGlvbiBycihscil7S3RbbHJdJiYoVG5bbHJdPUt0W2xyXSl9fShjdCxwZSxTLFIseWUsMCwwLE5lKTt2YXIgRXQ9W107cmV0dXJuIG9lJiZvZVtHXSYmT2Uob2VbR10pLmZvckVhY2goZnVuY3Rpb24oYXQpe2lmKG9lW0ddW2F0XS5UeXBlPT1LYS5DTU5UKXt2YXIgYnQ9Zm4ob2VbR11bYXRd'@;
put 'LlRhcmdldCxSKTtpZighKEV0PWZ1bmN0aW9uIHh6KFMsUixrKXtyZXR1cm4iLmJpbiI9PT1SLnNsaWNlKC00KT9mdW5jdGlvbiBlYihTLFIpe3ZhciBrPVtdLEc9W10sUT17fSxvZT0hMTtyZXR1cm4gdXIoUyxmdW5jdGlvbihwZSx5ZSxQZSl7c3dpdGNoKFBlKXtjYXNlIDYzMjpHLnB1c2go'@;
put 'cGUpO2JyZWFrO2Nhc2UgNjM1OlE9cGU7YnJlYWs7Y2FzZSA2Mzc6US50PXBlLnQsUS5oPXBlLmgsUS5yPXBlLnI7YnJlYWs7Y2FzZSA2MzY6aWYoUS5hdXRob3I9R1tRLmlhdXRob3JdLGRlbGV0ZSBRLmlhdXRob3IsUi5zaGVldFJvd3MmJlEucmZ4JiZSLnNoZWV0Um93czw9US5yZngucili'@;
put 'cmVhaztRLnR8fChRLnQ9IiIpLGRlbGV0ZSBRLnJmeCxrLnB1c2goUSk7YnJlYWs7Y2FzZSAzMDcyOmNhc2UgMzc6Y2FzZSAzODpicmVhaztjYXNlIDM1Om9lPSEwO2JyZWFrO2Nhc2UgMzY6b2U9ITE7YnJlYWs7ZGVmYXVsdDppZighKCh5ZXx8IiIpLmluZGV4T2YoIkJlZ2luIik+MCkmJiEo'@;
put 'KHllfHwiIikuaW5kZXhPZigiRW5kIik+MCkmJighb2V8fFIuV1RGKSl0aHJvdyBuZXcgRXJyb3IoIlVuZXhwZWN0ZWQgcmVjb3JkICIrUGUrIiAiK3llKX19KSxrfShTLGspOmZ1bmN0aW9uIHprKFMsUil7aWYoUy5tYXRjaCgvPCg/Olx3KzopP2NvbW1lbnRzICpcLz4vKSlyZXR1cm5bXTt2'@;
put 'YXIgaz1bXSxHPVtdLFE9Uy5tYXRjaCgvPCg/Olx3KzopP2F1dGhvcnM+KFtcc1xTXSopPFwvKD86XHcrOik/YXV0aG9ycz4vKTtRJiZRWzFdJiZRWzFdLnNwbGl0KC88XC9cdyo6P2F1dGhvcj4vKS5mb3JFYWNoKGZ1bmN0aW9uKGdlKXtpZigiIiE9PWdlJiYiIiE9PWdlLnRyaW0oKSl7dmFy'@;
put 'IHBlPWdlLm1hdGNoKC88KD86XHcrOik/YXV0aG9yW14+XSo+KC4qKS8pO3BlJiZrLnB1c2gocGVbMV0pfX0pO3ZhciBvZT1TLm1hdGNoKC88KD86XHcrOik/Y29tbWVudExpc3Q+KFtcc1xTXSopPFwvKD86XHcrOik/Y29tbWVudExpc3Q+Lyk7cmV0dXJuIG9lJiZvZVsxXSYmb2VbMV0uc3Bs'@;
put 'aXQoLzxcL1x3Kjo/Y29tbWVudD4vKS5mb3JFYWNoKGZ1bmN0aW9uKGdlKXtpZigiIiE9PWdlJiYiIiE9PWdlLnRyaW0oKSl7dmFyIHBlPWdlLm1hdGNoKC88KD86XHcrOik/Y29tbWVudFtePl0qPi8pO2lmKHBlKXt2YXIgeWU9dnIocGVbMF0pLFBlPXthdXRob3I6eWUuYXV0aG9ySWQmJmtb'@;
put 'eWUuYXV0aG9ySWRdfHwic2hlZXRqc2dob3N0IixyZWY6eWUucmVmLGd1aWQ6eWUuZ3VpZH0sTmU9Tm8oeWUucmVmKTtpZighKFIuc2hlZXRSb3dzJiZSLnNoZWV0Um93czw9TmUucikpe3ZhciBZZT1nZS5tYXRjaCgvPCg/Olx3KzopP3RleHQ+KFtcc1xTXSopPFwvKD86XHcrOik/dGV4dD4v'@;
put 'KSxldD0hIVllJiYhIVllWzFdJiZ1QyhZZVsxXSl8fHtyOiIiLHQ6IiIsaDoiIn07UGUucj1ldC5yLCI8dD48L3Q+Ij09ZXQuciYmKGV0LnQ9ZXQuaD0iIiksUGUudD0oZXQudHx8IiIpLnJlcGxhY2UoL1xyXG4vZywiXG4iKS5yZXBsYWNlKC9cci9nLCJcbiIpLFIuY2VsbEhUTUwmJihQZS5o'@;
put 'PWV0LmgpLEcucHVzaChQZSl9fX19KSxHfShTLGspfShUdChTLGJ0LCEwKSxidCx5ZSkpfHwhRXQubGVuZ3RoKXJldHVybjshZnVuY3Rpb24gamsoUyxSKXt2YXIgRyxrPUFycmF5LmlzQXJyYXkoUyk7Ui5mb3JFYWNoKGZ1bmN0aW9uKFEpe3ZhciBvZT1ObyhRLnJlZik7aWYoaz8oU1tvZS5y'@;
put 'XXx8KFNbb2Uucl09W10pLEc9U1tvZS5yXVtvZS5jXSk6Rz1TW1EucmVmXSwhRyl7Rz17dDoieiJ9LGs/U1tvZS5yXVtvZS5jXT1HOlNbUS5yZWZdPUc7dmFyIGdlPW9vKFNbIiFyZWYiXXx8IkJEV0dPMTAwMDAwMTpBMSIpO2dlLnMucj5vZS5yJiYoZ2Uucy5yPW9lLnIpLGdlLmUucjxvZS5y'@;
put 'JiYoZ2UuZS5yPW9lLnIpLGdlLnMuYz5vZS5jJiYoZ2Uucy5jPW9lLmMpLGdlLmUuYzxvZS5jJiYoZ2UuZS5jPW9lLmMpO3ZhciBwZT1yYShnZSk7cGUhPT1TWyIhcmVmIl0mJihTWyIhcmVmIl09cGUpfUcuY3x8KEcuYz1bXSk7dmFyIHllPXthOlEuYXV0aG9yLHQ6US50LHI6US5yfTt5ZS5y'@;
put 'JiYic3RyaW5nIj09dHlwZW9mIHllLnImJih5ZS5SPXc1KHllLnIpKSxRLmgmJih5ZS5oPVEuaCksRy5jLnB1c2goeWUpfSl9KGN0LEV0KX19KSxmdW5jdGlvbiBKUyhTLFIsayxHLFEsb2UsZ2UpeyFTfHwhU1siIXRhYmxlcmVmcyJdfHwha3x8IWtbIiFpZCJdfHwoU1siIXRhYmxlcyJdPVtd'@;
put 'LFNbIiF0YWJsZXJlZnMiXS5mb3JFYWNoKGZ1bmN0aW9uKHBlKXt2YXIgeWU9a1siIWlkIl1bcGVdO2lmKHllJiZ5ZS5UYXJnZXQpe3ZhciBQZT1mbih5ZS5UYXJnZXQsRyk7IWZ1bmN0aW9uIHZCKFMsUixrLEcsUSl7dmFyIG9lPXtzdHlsZTp7fSxoZWFkZXI6MH0sZ2U9ITE7Uy5yZXBsYWNl'@;
put 'KGVuLGZ1bmN0aW9uKHBlKXt2YXIgeWU9dnIocGUpO3N3aXRjaChXbih5ZVswXSkpe2Nhc2UiPD94bWwiOmNhc2UiPC90YWJsZT4iOmNhc2UiPC9hdXRvRmlsdGVyPiI6Y2FzZSI8c29ydFN0YXRlIjpjYXNlIjxzb3J0U3RhdGU+IjpjYXNlIjwvc29ydFN0YXRlPiI6Y2FzZSI8L3RhYmxlQ29s'@;
put 'dW1ucyI6Y2FzZSI8L3RhYmxlQ29sdW1ucz4iOmNhc2UiPC90YWJsZUNvbHVtbj4iOmNhc2UiPGNhbGN1bGF0ZWRDb2x1bW5Gb3JtdWxhPiI6Y2FzZSI8Y2FsY3VsYXRlZENvbHVtbkZvcm11bGEiOmNhc2UiPC9jYWxjdWxhdGVkQ29sdW1uRm9ybXVsYT4iOmNhc2UiPHRvdGFsc1Jvd0Zvcm11'@;
put 'bGE+IjpjYXNlIjx0b3RhbHNSb3dGb3JtdWxhIjpjYXNlIjwvdG90YWxzUm93Rm9ybXVsYT4iOmNhc2UiPHhtbENvbHVtblByPiI6Y2FzZSI8eG1sQ29sdW1uUHIiOmNhc2UiPC94bWxDb2x1bW5Qcj4iOmNhc2UiPHNvcnRDb25kaXRpb24+IjpjYXNlIjxzb3J0Q29uZGl0aW9uIjpjYXNlIjxl'@;
put 'eHRMc3QiOmNhc2UiPGV4dExzdD4iOmNhc2UiPC9leHRMc3Q+IjpjYXNlIjxleHRMc3QvPiI6YnJlYWs7Y2FzZSI8dGFibGUiOnllLnJlZiYmKG9lLnJlZj15ZS5yZWYpLHllLm5hbWU/b2UubmFtZT15ZS5uYW1lOnllLmRpc3BsYXlOYW1lJiYob2UubmFtZT15ZS5kaXNwbGF5TmFtZSksbnVs'@;
put 'bCE9eWUuaGVhZGVycm93Y291bnQmJjEhPSt5ZS5oZWFkZXJyb3djb3VudD9vZS5oZWFkZXI9K3llLmh